From eff3d9ebfd2498a7db76df71ed72db9e28594c31 Mon Sep 17 00:00:00 2001 From: ChrisChen2023 Date: Sun, 28 Apr 2024 07:34:32 +0000 Subject: [PATCH] Deployed 86c3df9cd1 to master with MkDocs 1.6.0 and mike 1.1.2 --- .../20.appendix/6.eco-tool-version/index.html | 6 +-- .../nebula-flink-connector/index.html | 14 +++--- .../nebula-spark-connector/index.html | 41 +++++++++++++++--- .../ex-ug-limitations/index.html | 2 +- .../ex-ug-what-is-exchange/index.html | 4 +- .../nebula-exchange/ex-ug-compile/index.html | 4 +- .../ex-ug-para-import-command/index.html | 2 +- .../ex-ug-import-from-clickhouse/index.html | 4 +- .../ex-ug-import-from-csv/index.html | 4 +- .../ex-ug-import-from-hbase/index.html | 4 +- .../ex-ug-import-from-hive/index.html | 4 +- .../ex-ug-import-from-jdbc/index.html | 4 +- .../ex-ug-import-from-json/index.html | 4 +- .../ex-ug-import-from-kafka/index.html | 8 ++-- .../ex-ug-import-from-maxcompute/index.html | 4 +- .../ex-ug-import-from-mysql/index.html | 4 +- .../ex-ug-import-from-neo4j/index.html | 4 +- .../ex-ug-import-from-oracle/index.html | 4 +- .../ex-ug-import-from-orc/index.html | 4 +- .../ex-ug-import-from-parquet/index.html | 4 +- .../ex-ug-import-from-pulsar/index.html | 4 +- .../ex-ug-import-from-sst/index.html | 4 +- master/index.html | 2 +- master/pdf/NebulaGraph-EN.pdf | Bin 16667383 -> 16669889 bytes master/search/search_index.json | 2 +- 25 files changed, 87 insertions(+), 54 deletions(-) diff --git a/master/20.appendix/6.eco-tool-version/index.html b/master/20.appendix/6.eco-tool-version/index.html index 6e6925ca08..c3befab13d 100644 --- a/master/20.appendix/6.eco-tool-version/index.html +++ b/master/20.appendix/6.eco-tool-version/index.html @@ -8448,7 +8448,7 @@

NebulaGraph Exchangemaster -v3.7.0 +v3.8.0 @@ -8496,7 +8496,7 @@

NebulaGraph Spark Connectormaster -v3.6.0 +v3.8.0 @@ -8512,7 +8512,7 @@

Version compatibility

The correspondence between the NebulaGraph Flink Connector version and the NebulaGraph core version is as follows.

@@ -8421,6 +8421,10 @@

Version compatibilitynightly

+ + + + @@ -8461,7 +8465,7 @@

Configure Maven dependency
<dependency>
     <groupId>com.vesoft</groupId>
     <artifactId>nebula-flink-connector</artifactId>
-    <version>3.5.0</version>
+    <version>3.8.0</version>
 </dependency>
 

Compile and package

@@ -8469,7 +8473,7 @@

Compile and package
$ git clone -b release-3.5 https://github.com/vesoft-inc/nebula-flink-connector.git
+
$ git clone -b release-3.8 https://github.com/vesoft-inc/nebula-flink-connector.git
 
  • @@ -8481,7 +8485,7 @@

    Compile and packageHow to use

    Write data into NebulaGraph

    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    @@ -8837,7 +8841,7 @@ 

    ExampleApril 10, 2024 + April 28, 2024 diff --git a/master/connector/nebula-spark-connector/index.html b/master/connector/nebula-spark-connector/index.html index e7876d4f79..03d1bcd3f3 100644 --- a/master/connector/nebula-spark-connector/index.html +++ b/master/connector/nebula-spark-connector/index.html @@ -8380,7 +8380,7 @@

    NebulaGraph Spark ConnectorNebulaGraph Spark Connector.

    +

    For more information, see NebulaGraph Spark Connector.

    Version compatibility

    The correspondence between the NebulaGraph Spark Connector version, the NebulaGraph core version and the Spark version is as follows.

  • 3.8.03.x.x
    3.5.0 3.x.x
    @@ -8408,6 +8408,21 @@

    Version compatibility2.4.x

    + + + + + + + + + + + + + + + @@ -8493,7 +8508,7 @@

    Use casesNebulaGraph Algorithm.

    Benefits

    -

    The features of NebulaGraph Spark Connector 3.6.0 are as follows:

    +

    The features of NebulaGraph Spark Connector 3.8.0 are as follows:

    • Supports multiple connection settings, such as timeout period, number of connection retries, number of execution retries, etc.
    @@ -8513,13 +8528,13 @@

    BenefitsRelease note

    -

    Release

    +

    Release

    Get NebulaGraph Spark Connector

    Compile and package

    1. Clone repository nebula-spark-connector.

      -
      $ git clone -b release-3.6 https://github.com/vesoft-inc/nebula-spark-connector.git
      +
      $ git clone -b release-3.8 https://github.com/vesoft-inc/nebula-spark-connector.git
       
    2. @@ -8551,7 +8566,7 @@

      Compile and packageDownload maven remote repository

      Download

      How to use

      @@ -8583,6 +8598,8 @@

      Reading data from NebulaGraphval nebulaReadVertexConfig: ReadNebulaConfig = ReadNebulaConfig .builder() + .withUser("root") + .withPasswd("nebula") .withSpace("test") .withLabel("person") .withNoColumn(false) @@ -8594,6 +8611,8 @@

      Reading data from NebulaGraphval nebulaReadEdgeConfig: ReadNebulaConfig = ReadNebulaConfig .builder() + .withUser("root") + .withPasswd("nebula") .withSpace("test") .withLabel("knows") .withNoColumn(false) @@ -8652,6 +8671,16 @@

      Reading data from NebulaGraphwithUser +

    + + + + + + + + @@ -8934,7 +8963,7 @@

    Write data into NebulaGraphApril 10, 2024 + April 28, 2024 diff --git a/master/import-export/nebula-exchange/about-exchange/ex-ug-limitations/index.html b/master/import-export/nebula-exchange/about-exchange/ex-ug-limitations/index.html index d5fc5bcbaa..6824d360e8 100644 --- a/master/import-export/nebula-exchange/about-exchange/ex-ug-limitations/index.html +++ b/master/import-export/nebula-exchange/about-exchange/ex-ug-limitations/index.html @@ -8255,7 +8255,7 @@

    Software dependencies

    Note

    -

    Use the correct Exchange JAR file based on the Spark version. For example, for Spark version 2.4, use nebula-exchange_spark_2.4-3.7.0.jar.

    +

    Use the correct Exchange JAR file based on the Spark version. For example, for Spark version 2.4, use nebula-exchange_spark_2.4-3.8.0.jar.

    nebula-spark-connector_3.0-3.8.0.jar3.x3.x
    nebula-spark-connector_2.2-3.8.0.jar3.x2.2.x
    nebula-spark-connector-3.8.0.jar3.x2.4.x
    nebula-spark-connector_3.0-3.6.0.jar 3.x 3.xNoNebulaGraph username. This parameter is required when the Storage services require authentication. This parameter is only supported in NebulaGraph Enterprise Edition.
    withPasswdNoThe password for the NebulaGraph username. This parameter is required when the Storage services require authentication. This parameter is only supported in NebulaGraph Enterprise Edition.
    withSpace Yes NebulaGraph space name.
    diff --git a/master/import-export/nebula-exchange/about-exchange/ex-ug-what-is-exchange/index.html b/master/import-export/nebula-exchange/about-exchange/ex-ug-what-is-exchange/index.html index 62ea4da84f..e51e3b127a 100644 --- a/master/import-export/nebula-exchange/about-exchange/ex-ug-what-is-exchange/index.html +++ b/master/import-export/nebula-exchange/about-exchange/ex-ug-what-is-exchange/index.html @@ -8473,7 +8473,7 @@

    Version compatibilityData source

    -

    Exchange 3.7.0 supports converting data from the following formats or sources into vertexes and edges that NebulaGraph can recognize, and then importing them into NebulaGraph in the form of nGQL statements:

    +

    Exchange 3.8.0 supports converting data from the following formats or sources into vertexes and edges that NebulaGraph can recognize, and then importing them into NebulaGraph in the form of nGQL statements:

    uDgPP7Ho_YbN`%J@FXe}3Z0xnKSHWW zW5LyzNj9l}B%0%UH~9}+z|dlb{FHT$UEHaV3S=xt)D$w#AOyl>h3Y76HTrB0+{&lU zm6{=7pwh0uRBp}hF{R~pvJQ{Du;Kr>0r{BI7&#>}YTspyr`2rY@(Wyv?L#jA$u+r%# zfG-tNusS7R*NExC|Bn85DO)M`gFWUE1IwZU3_~JuccyYP(}HE;=V`apV4CrVE3+~L zYR2Z!urkljK}>TDSb5LDvhv4_%l;bFPk&rI)Yl0LV>-_4)t;-JVRF)KOVCctbhW!_ z%+`OPpSqD;Pkp3PF2G9Un%YXqXuzE992mKsCvALa;EWC~MPsfUuuY2&4hM!pa*!6? zwUa|#?cRSOd9{YcxoljqRt;!%epTga?aD|8m8XUv|DzN zUfK=W2J3_6(W9t3Y1xhur6xG0*;Bjg4o0(A&Xusq6t9|u{G80#Ta#vJ zF?Ba`2JYUTLxP|9nlyS$F{3(SoYI8_4x7CB_06J%7DpjoCw&1_2sQZ^8LLhNdr3<5 zQ{Syv5Q|e?DS|&wV#D=DSL5ULDLnX7^Q}L~o|#0*AM!;z8dT7SR_WcH+Hi+PuuJfO zU#xh-p7Mh@XELdYU95qrX-R~P^b7OBXD-w+kuy1n&8tD+us+DP-7qmb^*wTB!6rBx z|MPcTqGRi-hE%OH%N*|L4b#+f!CI8ye@^p(cBfJ^pFj5dzx&aP0zNrA^=%5JOe3{g zr>iDRDQy^jUSr%W#3Os{Qr9@2Yqj*xqJ#Ix&tLq}xj;+WoM_Zq4~eD5uh-rn)~3|( zib~Y?cEjTN0>uhby_uRGsa;N4x<+_CS7V@*&jWpW0gU#mOipBuFD`sR^mZ8^*oJ8e6QX)x6H?elN_7&@*n?WrGI zoC)EiPN-ew5`zi2%QbR4G>pk%+MVf`N4K}%0&S30&a z)fvS%O!z{s&f;o<&`_jExoX(krFblfKh^XpLsJZ&qcLrS!)$soOglv-1j{SzOvhsr z$UuhlLb z?lk9v=aYH)P`U>9PtoUiYm!XF{-kTm_bSB=?Dhc4`81D{Be$O)yqGx#Sjctbmu}6~ zP^@xX1LsZnrMYdG{L}DG3e7_H+SMy+1Cw<0`E%d5obOix09&1d$8!Eh*xSY5dFtH>{EK&wOlSjKcm(fJA-8 z1ex^H>#H0~g(ic2aXhlLbF~~^&kDu}diD_OH60j6yO>&-7wX9&OQWeZ09M~BdZp;isFvv|TI%y_Ts6RJc zC57UdV=6!M!foC1Th5c-4z=~xwj!$1Q;5WMw%D19?4_v{zjgJeSB<;Yp-$Riw=YAE zpruADOXzte+v*hCPjYe+%04re?dz7D4mAsNX^YILjY9bfg;o-6(QF4hIA#&VI?@hP zQ_oO1e_^KHJ)XX8eR6yn)ymr!5xUUQaV?tY3qqQhy`*5YS`!>kXSJhb7VN0Fa5sC6 z&{qu^6O)gSElMYF!#A-iu22&ssjOIF_Ts-RnPxa*tr&ADf^%l;DDqo3?28j-pQ66G z$<%|u1B07HVLh9poiMp%`pB&W06wdO=^bV-@>+?*6UbiZS7$T#SiObf#8^~GC^9>e zFn?s~iavjQ{*8a^yPy3dW$>6P>Fa)(`NOx*?@eX;tYc!?^VoF|h!`8+m>6CCXVQ+ad#Xy#PKlL@c-F`=&I5!_`>6)UN>Qql$ zWFC--BB+HhDmP4m#2JI1zxh+&{k}gbD(Vb$4)_3z@9<5Ooz2F*zkmKWKSi-<`(0s@Z=b#m;lzwf};xk|zn3xZY!b>Lgpt`<=@&XGOdyMWHxDP3Dcx`O~9wHsLE0 zP|bxM7xKuVMU(7g-M1pyn8VAOqmR4 z;IK&hk~#<0DK&g0A+RH`Yc~cAi(QVt{{}0S6zuI!FSEHe%ttB4|5n)uU}c&BtF`WXAKZ$2&Mdo-om|8_UcE%|$&zJ31WKmOg%X0h-22(0I% zaPpcI7hhqBT2>3{R0;CNE+E`FFJM0KVJ1}iI5z6~Ea_?#AMFI%b-N1qp0@|q>tgte zIKbX(>U({V#i~|^@fBt!5;HN#loUJxWxtio3}^?kbGwR2GgVz+B%HkDz~H*Rca+jT zWM&PkI-uyeDsKt)1s2#p>qu6qdzj`US|@}4L=7ZA2dk>YX)4LPr;t?I$H6Lb6zu*w*e){z=6ehLeH8Yj1%Xg`xe!$)GQ=L^ z1nF$o?iL_(zoajK;()4iRTtHc`Lf#atrx7~RHoo%Y7P^gfsNyX{*If;(=5F@7)*vl zUay;uDwm#mgH)W#q>|o^0=Hn#k?d120ISe8uzbmJQVuHh8LWf~u!`UR_!a31y*eQk z$y#O4*1aG=qhtWlZl8bm=f3;??|J)t_#@<}(mfsDe6hn4zTl~RE~z+ZS3%fdRmT?W z7HWLHXQv)=kuw3aC}`ePPO54vshY%U&{exVjo?aD+dbcNAH4SEpD9=so)l5Vs+#DU_|H%*G^{Y`Npdb!t2weqX&p=t=V|n_K3qxc zBq3qnsd*12q+MllO-c?lzs8oJufl>ewJdlfB+i>OPh(}}$Oo$;abWq9h(i6X7QtuBES_@ll@|qx*UoC|Ak>wC41Gdk$LK@Y%-AnXhVSKqw zV=FJ%z3})UA&K@&7p)Igel=Km-k7#pGn$I13#AXCv#kWLxByCK&l$3eG;FJ%vIsO& zcqj*9(k(sWiNe|KhCcAWvxFpqwa`y8D1sBxQ<9V-1nDm1&tQa%#fhxA^O;>jQg5w@ zOO|t?5I@Rb9)na(50yl!Bm!8O7C)q8R8ED4t<{hxGaO613MU7vXm;w0cQq3W*DA&v z{tsTwgJ1fA!&DmcG|MB#Mw+&F16P6=RGkwDe{2hEoh%$CvH$mh%3iEk?m^GK-((WV zCtM^~DUvTJUOO96?RJ06=|UozH+8E4oF_x7V-uMey*&5c5G+0dk!!oTki5f_9(=HR zlWAU=OoKSs7e|t3zK$OeA+LFt|EDKg(|gX_TdVBsH8$`s=!yZe#_AGk z`tBv#+2C)1Jb-Mxxrg-X+8ScY+vk7z{N2x1Hma2ORM%m?pW68R!N2>%@4Kd0xY88@ zR-t`hWfBMT>6k9ZYT8V-EAu=U(?u%s0u^iLr4ePc5`JHGF2Tyr16IW}=dL&w{IVn7 zZC1NREGjD@h4b6f=dZq^ni5$JU)rc#`679?y|Plt5-N$6U$+>9_)4O~+%2aAO;)>e z{%caz=1s|Szpblttoz=gq!;KVw1Q`|DQM7e?7JG=P>W~dfmjM=mxhO|~k0Q$k7 z7;|I#rqu=Fsm$?hbS;qi8V>9J+KP&iT?PET@l~AvUxlmqW^%Dw(wxayW|!=w#haVW`}g z_k2K^p+;EV`Aq-w!{FsKWWWbl)vX7sfGDt!=g)urPk#5aKi{&UY@^1;y!iI{U+Zvb zULfQ*H&o_TsW0}uj`&2U-A}>w5J)DfQ#Fdp6`>B-&hICiD6uTjAVR`0_J@bhzxvO9 z_x+!!w>tgw{P}nN|IU5ZMP z?lQrVznLBTgYa5}IV0yvDBcY_5CxIn|4f6fvpq z3C+HZdzZgCs4~e?F$(HHu2_a!t$2dHs~!4ESmh6qzZnyI#e&@HIH_k?15237f#n62 zWqHeI4BZ*hE`LipDSb-dbLms#DX7)alk$|f!cJ1=^?p@k zqqwMY6&0{4hM-FLfK|RVSgT1ksqSI%H+77el7@Y6_&+Xo@gH^D@q=UpJu_I;jT?gd zB9dsUBb8fsBm&L0Uke^hd~|v9`KT+fW?oq<^sDhyG@}Z7!FaH$FR7|b7L=MMIKdu8 zgk7UUI8T*>6RX$}g66lW(S!dx`dOcgkUHJm2kT)Au&UZO3FyT?Ciwou7iN5>A;L>u z9GnN`>1Bv0{S4Ywt$XCgE{^iQGiYRGRHN!2OomKe}`M?I}=q8t^BT_mqSNRm8h9=3adouGy3tr>0FruVD804|GaviFbASmr)y2dP1NmPUQ7OyMN`HcLC3v! zxLFYwYAy6jD{I){T)4}B4A^yx@h$WRxs!`9Cs!gd)9*_##$@O-`ETOlYlc+YgiV-s z4kA{$2Hrx8V={tiujl=A+>P*2_SY?rv^uvHX@VP5@PwFBG+jgGIi3pM`$7)+PefPk zr#qr3c;btaFezPMwDWpkE`(h#uzFFZu>IKL2+Heki|dGSZkKp9{^X<&w%}6BN9un{ z`A;C%7Y$KJu7o|P2I;&*+QA5!*ui<7!!84#^F&guhud@8+q*35vN|>t_&th@7YV{@PU<%(u^f z<6q%wh-=R`2-r1&DbbSO#Sm-q7-GXjHD_PZY1ei?bDBJTt~)dHfBw;bbtam>@j`?} ziXop~Lx}IN>B0UhKFxrycFR&@a9)59m~ns}It68klB5}1^&%8WQ?Xq&0zL;8lPtD2t z9<%m!N@voce%2sd4TVVJTJ0*ARjrXgSbg1I3n^}-LmRFSa&mO%%owm@FBR9o^WIBh zi^00a;8Tk_u|7!hUuHO4B5YAYH z4?M7pu>_;2)})2)ulL7g8j68Pbe(ES>M*5w+x0Vtec1IrNjfo1*Ifn_BuFp+&RFxb44L`*qLMWS$OkHv$BWpzH7hR}hf zGh|?2V4;)$G*qfRIk6O#;(Cfxg>iKH3JFeBa{<@)xPX(;FU0<0Ag-P|5z2a$_`=Lp z*Md4ry>;Z&nhdeYWH$UC*9YOgS0}PL8PeEFYCm~^i_)pg)sAEG-tO1OCj^BeV3Jt~ zIfww$X_qw&2bR9dfn`?Nz&<{I_g^EFW}LU5Dk)`PS?F|NnTI;CjI|k93%-&&u7<_4 zX293n^v;}=R|V@qNgia3FqIita8a?K(WX!2xoHLyA)M?+@Kx!I6VH(!q{h`w^LCab zBcY=Bp?LZhtHs6D8K92tcho_i=%KC@`6neIu&RgaWJ+SOJ#1Jwi5&c~;lj{Rcwnt~ zc*_ZeL$dNuN_KK=!vZty!YnW%2jgJv6P-7_!_!X799XVLO^_zs?XsHWe2=X+PqS#l zFnMc;AKp*t^^me5hI41y;Ws%!{4h^F9=@xwcag)5S9hMo{kni9qcj#OF3@C1i?ulO zTPH*0kgghW$Y2;^tpq<@J5M|ByXK0$V$ppwrE~gX7Hg~pAcmONg4p_1#TlBxUu#Qb zYUb5Lv@We@uExFZA#!+}qC`!uzq)#!h>J!2q{W&v?wHpMyKm}wYRGc3oH^2VoW@^~ zXq6aMgSgOZk0-*k`eu0m7-S8N$K?mOvd5W>l!fAsw5T#taAwuXAw?HUhpRhF-_3xM z3F_!f%1RQ~RCH-rhAW%&JZT+Rkg`&`-^D2|_DIr+Xnh|f_~teVpX(Kq(31HGE{S6| z-y=$-$RU3v2}Hxz=H#!GIfk7sf`tr%Bh{px?K=jySc_?xsdxj+S~FnKb?RykT0NnJ#fTs=HsM84xn#mh>? zm^XQLX0a<@o)|8*!{UnF&T}+{EvCE^ea!e~&6ZcIGe&YV@?O(NIX`@lm#Fq#nXsD7 z`{#f4b3goXm%!wNoThc1)zrLCTtaW5gGaK?+7#}|zEVPJMIu$B=#0sT^sC8mawSXL z-1Id_Q!PQMq;|aSki0+t%CCR-(>QT_YI5iki;_Hw)q7N?1gCjaCf6#Ip~yzy|Bcn0 zBr*P;FFx49tccmVpTv_D&B^De&6r1JmJJ$7O!7wY71d#jZl+jjVTPcd8-xjzXu*-V@81SYVv46^nNO0B>D6Q+dk%MC<%(F+KbC* zmhEULdrlptk6!gNW*j_sZ?`6wLG69}B8>EtUawqGY@C^XG55J}r8IacUPv2M}EWwR59P*R=P?4|EdZG?=u z)QY)ezkU8oe~H&F!u_oXmaDy))+)1v;T)RRwtfnxsY6J9yos|X7Bf+PHAt0iHHaX~ zWJRy|U7mDvS=}r%L7};I`^xMrc|!noar1eyW<4N2C<3O)?+fPy4^7jFSgK|*Q-LoD zPflsWvZ$@eNNFpg^{UIV;=zKD${V)sEJhGfoy@V4=IW$x)M=5vQCo-VzG#=Uh{a4w zM-9SLl7fzujxX9}IV0cWYfLP-4eQ=y-S`$y^i5}WhCshpKl+1H^{d)3T^CF$Y{5vg zH`rkZaZ{DmdsLRf3@dDXkQ=+&;g#L4Gy2o`3r%t9-URDGS}>g$-;_R)jyinw^^rdB#~ zO^}Y})Q*O&?-p$u2a9NlyyW!SYTl*NE=V_Z zM;W$6B-tZH$82Dix<%(jnA~dS+1e6!Xq`Ti&Lm?&1Jdy?DmFh?}fka7JAVV}h?eR$m}_kjUO3 zOyYp(wk9q*O!5(NUnK^rRar_P$5#_DH*wx?<3Ww+Xp_M?7Xlgj_#%o%_+1G=yv}97 znU_!s{S4tdwhnQC%G?9b;m$oil=V9o_t<5rvusIqVKN6KVP2H5%102acv{xLSuj^S z3VdNp36gzv`-RDFSzJ_hi)&`Pj!r9aiS`FwAUT;T96R>Hwhl`ED^-}w=gy>daX^kr zsk3raLO-5CvYy4jI_{28ABCs26UmoYRR;U1BrlXuX4HvcPg;35{-rOQ=LxmdonB~}$qSD)>_Iz?e z71A18xM*SPBFDZ~EH%AWJO!hI2&Ym~eb8;3=N+M!=FWGxsi1@ZLtY%Yq6Ps<>YqX; z)s9)JCWH4B%?M#SVQa=m3=9snVtRb7gjQQ0q}o?ss@7?c>lpNohF$oF60IU@x?w9u zlVMx!s*H@q5d>->bN9};)_+I88>Ut_&tB#PvBx~eQszo{5qVPvczkQIOdH<}ryf=g zf~OQ=ej!kfB{SIVsM4u8g9+eR#{hf&eE1K>Y?e2=pQr}a+~gC+fF8&d1zu_~SiT+1 znd6<7ZAyROz6pQ|I{k;{RJNQc`jEr|RzW-y`vEDJ3d-!ud5V7D;edqJmZXm@kr zVri-~6}%ACu{4~d&!2y5)>!duekun7m}I3KUdB++AQvbbMYSsnfOfZs2v5Wh$R1Rk z9i4>9N2oy<6pFS)6LveXVyEv7@r(PX{GNbU82@X*GTlpGOs^)WpiF<ibub*OyDL zj)Hxj;Wim&z#?&CV#Bh!vI$P{jU3oTex3AP`O&ZbRQg5EI&wDDOw!{mK+1{l(eX}ZwKoIB7WZXX|$zu%siE4^d8fJCooDEta=+zZX zGD-D7-?QWSs{AwGNSf#KXHXLkon#{?DD`26{IjY*|)hTWTzr73R^0( zlGpOtC}^#6C=a*+s?l3Qf-PEb^Y-`B)o$EZufHavv7L*Ev`w&cA#`q;-D@2gRH9wJEM#D@ zZ5sxy|Bn7IxD<1E$+I;7^ndzbnfkygKF~e1TKbG{HtfEI1;*0aV+P7P5d!D(B9aJH z7*z5t?N6?f2jK#DV%TVbsroR@?MH`Q>G0m&VDt1)4(zD`xLLm^)~SM7h(~)x&b$1_ zMO&8+)Z|NxQ=~_c%@_m~B@aN-rGbNmqyI+)4bQV(|LI@*?)yJa2hHz#)}mo*MST7* ze@(2I^y%!tI(9ln7Yg_Z=XN?pUhjMshUqbUs^`Q(v`XnmK9{g!*Q?& zheS%Hj)C3ET%A#b)u#bV!wR_t%OWQRb~WZ+j}!4e*Un(OX6B8sOk~P~oKkEc}U?@db z>E}4#D2J$?gNV}(1~lz5sS?cLSdYQLGA%>hSw&oy$#~rw1NU;qI%_ycy-hoHl>>#s z+%l7$s?Kq~ZqvY0!~)}Ryu_@D{u!AjbgF8g^XYIX<)mF?aZSI9xpQ5vi<|hhU3uO0 zyD15lenc>bah>46QV|&#{dyThSsfbHI6p}xTvP2(Tn&Pkb-Q#IynS5cl=e#89LEf|5D^2rBVzByP#z3PJ5|Pl z`lrfR#4t>|Er(&l|4qUjV1^KZd08QdYe=E7CC)DQT~(vx3rI!^< zw9DL}feHGENk6}DIScfNKw`pN?a28XA<#vfol)doh|PgK9Kwd6_&-L*O=Hu!??+4j@E zZ`)29&ETeKm~!2~h%~2JZXThvK8K9(EV)Fp7+IO(p_o+b<&PCtD1CG;lmH&vM6MeX1fdc3b zELhs?D2faWu_Zo6z>U5meFx1vU8rZ>&%Ayc=?_Xp8Mi9`~CoVkYk3JUb0)sU5s1RE;Zb( zzIbTDvmv~T+4sVNc%RL7Of*c3)wY|V1A<{v)fZXULYTX{-PNZ&_&?C^+DK+GaSgTa z@|43-WHQV^x$js=oE+skbvgpI~6`>Ohk*y`4>5!bjx1U?W$WsHe zpx3}kk%q<3_omd>b-{-O511yuX-Mb@%y1(lGZpun7Qe};X!Oh}4VIx^vSF~ZoQyMD zL^x+Gd4OQ?x+xd{XnpwKnbD|Clw!l!)DLv+SWt7QRtJBn$4o+GYJy;V_WL&7BzV9~ zMX=(^YzH%&WKtRy5ppxtWlM2LF;&%|a*`N?@|8q0PLhUY%!$74u$mxVws1YCWKuv~ zP8gFtbM- z%CsvHavYAe5U~Px&Fwas7ll&8g)FFrxRUaURGiv(@dL$Lr!r1#6Mqs{-HL_r$!!wf z;D1LyU>3B1D+j(h&n=N3M4GFx!3!fUaozXHkXg*rGyVYct<`biWG%yiVRFmB1Iu?5 z21ZcLcJdyp@4E=iZkWz7ALO2?mC%vbYkS(g#MTWgD;Y3;F^_J2t^bDp0rEh{tQEkF zb3E;`Ml+b$y_}#;3O#1pNeDiTVf+DRj4GJGv-KPgEK`{VMqWF8aQj}B|IlvS=Gji6 z>hR8NKC~K`vJ`nU+KF9Cg7ZLJ?J-KIff*idTEZd!&B5lDju}d94o0IL)jn53V+m1v z+NF1QU=gi#k*DPdggiem{A`^JSibM19ceTs4fYV4{j?L5k>6uc2n();e9iSiW{aQ& z?J^a0`mW(2Xki?V!9@plM0fAkb z;)9a{o((I2Lc0o}7+6N{g5hN~!H<-#rk%K?RsI{GRIQkd0~Ruz>N@;5!F<5dl%ySf zquLRW_66VMziBAEEeBRDbZ>Z-e6(X{uXgUCZkK_R(-&^mF_Z^j;|$IPmI|cKOjB{* z!Q}X^9~`+N zV90BQ=^C!YNyiWm8IzeBTR9nJd$uQGH~e33K%Jesl|TkI3PKD_cU?7R*uz#<{xLA& ziP0DAY&Ic!) zBRgX%H3(-;9PGFICDk6pJX|?n^UbxSyM{KZ5WMpi>FnEvAhM#mr^}uKi z3%0<#fWBg8U=c($-{ZF0uweZ+^bas9K5Pvm2?C7ee!a^#SiCd1!Gvh96SQxL<^;PC z7AEUp&Eno*Q5t@OMTXwMh!!;n({^A>yC|o>_5CpZX*SzrNR$nWfSBn#2H>?Xqbj>Y z!Z@y09>A;P9pNj3+vPtZ6QOmzQa4znf^4wJ7zQKHuYQgV=6;IFOg;MrTQZb%j%q^# zW5lb@eCB}}?Zyu|ci2HkU=CEm*aQ<>6BxVN|7KuD!83u3FgfB{4Z;rBu!voxeT%DF zMRG93Yj*wdCjSkP8E!$%1`FM8gT1d#l7Zn{aTJY_+>yaYeCmqT%RF-&&#;c2Ro&RY z!i3qzMdW=HVLU6U=Qu>H`j+t&iB;DusE5^qzX8KLGq5buvcV$Z6<4JotdTt%3^^>c zFzxQaw^#XZYq-`e!sGoDeya^8uOdGPtLw4TH;esD-+57H?aPDdxx_#rSg6d?*^#Jr zEY9n`PrI=3Zhh_EI`HIH5@y%aqxgp;jZSOo^gxw!Ua^TZrNKN(n58s0ibRh)s@yOn?kmJEAfLZ=pNf$<^7 zorj@Nrq}%(SOgLpcto9rkTzI&dIS3m>5}6Yoyj@=Ry_9|WuEJ~*0=uGJ2SUNLy^`vFG4n8|Px6fJCFhB+CVoWw}}3ZdQi@;TGX43c30 z0~42>Sa6%gtvBt$%{YBG>FuodfC+a$@B3_>i|gr9Xl1slfobzeACMX*2w#)On}jL3 zB`ihL?#O7k^LsA9xT{^EtYbNAv72FRn|AS9r`7qVCPT#uNeRCfml2o1z+`B}9ur}U z#j;=)4-jn>a-i=GG356qbZ4<~&z!vqlqlqJt~+2}p~$V{#aKN-^F2>fbi2Db`{4JK z(K@qq$I#q;(B37b3$qWYSv&Dn)sChS#}oa_<4DH9TviNeg0qSin0pFa5=B;N*kl-X z3JY6}u|>z3mpJ4J#y;V;VbPm*kv0L7@JO3l4e-ca+ zK_t#(EwW<6z~G(`=$SjM$ZDORicz=h3C0*|S~fvAK#2_;9IIn-?lv)G!C=R%l-CTH zc&v4CU`qhnwh0p~nX{g96RZE%z^0u$4JIBg24S2_7KB?zwKm^-{C26G26XQ8gVe`3 zq~m6Cs^C+bO zu-&%&Gk5e$_$~BL-t))jfBZks6J5!7=<2lQnEhD(ljIrdlc|oLpKOQOKm9!fVi?~r z^!fDL-~Hg{)7h&5(@qV@dHMQz`R(ui&_6{os403UCdo&H-y^N`x2-esWRZuw%2a{C z>XHY8uEYoDd(!k2n5!wf$u>Iw{ENS1osvxAL*s_XSx<@Zx6i-%JF`0}>x>61MGi2R ze|}g*RnD4ae^FKEKsXPDXtK)nmN_5esf(8O=^bt`i}zHB9yfQC%wcPJ!&abF`z&)xeoFGqV=TRUZ`NR@i!14m7t( z+Si$JZCfJP>`EthU7E!{-sPBqC+I6as6u55Z7dmSpml>OyO@N>`?%g$bO{YhXk!M! zBXZ!Wic&DwXTjd;_8iwkVu6qCBm9LXgWzgl@!Pc$!dOy2F)6$#zE^I*fgOR2hc3+~ zqrOP2L^xK-1_Iz~brUR-SeTHA#1^wpD082`^LM`cM=xoGpZ8}XB-TDr2+{yLVODiJ z$>v(F%Aq)K7KLYgU@CFXiqA}dMw_xLxAQ$k_v&Dx!;eEW&_xn1{y6z-Nx=mD1q~Y$ z5aLoSPW)x@PBMLMvQU`B40Dwkt`h`P38P>P_(7V?TI}J`5buh3o3T)&qjFIbuWz|N&JH_I#c zlVEXs2gJ}P&Tma`MT)R0n>C=z2|Xp_K^=jKJdfTTvR(1jn_WP}QzDSr4R2bn7?24=}9Hp9u7 zH?O{846`r(b{=FKL(G0onw)p3)osPh;)ARfh3cwqW+4Raym%+SKcxU+o7m_!#y@oE zK3lTa!{=}QAHzM;*dw4zDTsAeVC4=4^K4YMqfN&-orv5NhQ)-BHE6v=0eLI)gT(OI zuMunV%z?Rqv+tzS6-;T56YSS*7}YXzqBj`AJvF?xtBuw7BX9o6&`s?TOg7%W(XA$`6jO+Ubl{sDdOC-r7^ff#R)VPT86Jd~w7Wj#7VXM` zFwxf~w_t{mzzF4|yXXEBp3_{ao%Fky3|+72gbtT-i(s_pl3S)`WNK3ECK)qsg84M- zOxj-O))7b2Tq^N^oUu*%F1G+iD&~Cf3tAXKv@pX_xyU2aS8hx0JD1;Tp&UvU@RKSx z^9BwVXr0%B-#-7p|LeOy{7;m7f$am1vctpM=b!(-89M9ECB~FPVPYCn%O={Cp&Bg8 z)>?z?gyJilnb(7KCUV})I!XH0Ns_-@2#|}gN__^N%4CV<@w}h;%3L9LGBTB$d2?*bB?*2UZsl*nR<>h@7O7 zcfEAisMjMRy#+eie=aWBM7nw~-!>QURC82^vb;9``(I}bV zJSBDB_t|#AT(6fT5FXBA(>$DYkqs+aRx%%)q^I-hHdxs>tW4I(wcVkikL;e}64^bY zI1S=47vNQTW-?szSuQ!j5l=tva zEX$j;c}5Z4H;s~ly^A$6?=n5F1Ot|lsdN$PW-GM~OmWjw-{HUXE6UIR-`3r%?3P_s z0LJdYw1SN&Xp~eVl)b6^Ibx)^_ZW3Jt@*9}uC>>iYyOP+vk$}@ZSrTXeps%3a zMpQ4RJG*7kn?Hl*T>Dv8Rqq0z;J(w}dK&uy2QMH0H0Yi?H!NtGII$E&o~~z zyd!{i-VtDS-P{995V)NoRL0}1UMKDn|4zoXrzYgfyD z6JP!w9^;<0{HLF~I*{fN7VO<3_g-2U8MsFnuxAznfterdzDITeDAXA<3G3aBl~|Z=^4xopro%te=*& zXq~bxm+MP`8oZ#i_)d(m)lS~?$?5)jWLmPNGSzc{; zpjD4mJIy}%(Y_tjqPIW2lA0;h>Ad~u@(2I>>kmGx@3`le_Y;o zoc1LOLvX6q9NL851ZqaXqkY4+P=?oSJ|4R4rjEVQdy_B444BYL0$c4IGH7HqoZlRc zL3W_UijZE@6#$`0tG)c{|7?-|riUl44*-&nzjC8h->v+xzL&*KXyfimgR8G845=1h9=v4XjQeI--}t& z?fc8sBg1}>(dT?P$j@DM%_6y{g=OXhJ&UPhFqvx0W+qZTI1vs%s98IX@JKP zF=Xo+?$i(FXxw|_IbYDS0VkfDeC$`$pOP~1m3(I$=$(6{@QN8nmD}; zdlG@LeiK5zC7r^OE>q>3PoIX+ls%p2Kzqiao}Re2)srKN#@6YF7gsZGZccJ|S|6fO zr>Ea@{{za_R^yKeQeltksUyb^*nZL)7L2Be{ArTVxPwh|Bi>csIex3=!udg)P>LF@ zOa3r|8_|;}#P6$U9DDD+m`C0@BAHk#Ob^6T0xaW6ZA>T4h6B(}sf|f5#YA1Z_?fTM zIQGYC?t%u5sOiOU^m`W)Qkz95Q>UM0TFvj#k5yY6WxHD~8rqhcagMYmVU-WFCQ+nh z08Mfzth(o&Bg)jNA0)SmTLt&%+dgC7cpGxYojyWw-F}X811i3b#6vq@36msJ+>7Bh z%*2{-_b!lTZEwjOslM`fLC^fi1^Vw*!5|WvH8D}xV0_@GE(JiFQUJ6m1preWovd5l zIpU!f;M!qE%@EPmZx^Z3yCBlswt?4}QUJ8c68zlP2?+IiV}Ni+SK&)je~5NZ6Flr7 zKwxf;-S6Nk3{HC>^Jf1a`W>-4i8&{Y0!A)euSqZ3b#DgF$CdgjN|rfBlgytAv)Q;``mK z=7arb-pM#Zd#05=k105I-x9f9ZNkA+fdX|*Iy9c_ir9Y!0+)KA6PZcGC0bLmXWGgE z(oU!dZLcC$eHk&zuj^zM0Kec#FAxqpi)P98l_fsrHnE!S$N6gifst3vvwU_j3pYq9 zTkiKkod#@;s{-1~@4b2doe!s47H_S2%R>M-|>bt;_4(ow0EN&8P_ijN60T_TNa1rOKW|FQjtB2RzTDOf=j-~30u0&ao}3o zY*=2J+^{^@de2jwVYb?v%%U~BI0+J3D<9ZuS2t~R+Q~yx@pIl8GzezXSUbgpf{4+K7Zi*T-TkMx43mosPta6 zaCWTR>;6CNF%K&~d~D6ld2l(Wb_H$nNzu-cS>~9?&;(LQw`1wb&1*@uW^*Q*_*yR} zX~soMHe_$Ltr^C&!g)EU(L_=t?s(;%M0B&yIE^D`V(?U-F%i|?Dtz=N11`V#_WM8j zaDpZJ+*(+zA)f>P=<@I1W;NA!J8gB^>Gh%+FRjXrn<_&zIS)M<$fQL8=^xwt#-M3q$YyD8bNIbjP1%ih9?%8_N7G>7@bK-~DVAe8>Im86 zU>UV&ck zomq>H`0f{p_&&)fR+ERPAS*pw8&p8kWTYm6wYS7Hj#7K)jq~^SvtSdyoM?V}O zwrJ@L(UWjO8|_L)K}$@urxE(Cb)=$&sI~2T_YD-=Z}R(jMf{gd8jL9T+%UT9J~Kc zyIV~Ls>?Xv+0d#5eG0n8B+pkdG&p@vl3anJ<%^Cr$4h#c6((;6QGoGUI#kFCA|*~X7g~;!VPm1dlCR-U9pU-@9a1_hDxdJcOQwh)#oYX3rDLd57$@2vKaqoVv@QUj=4~VN}gqn_M%U~^VMoHkn4XIDxr0L zL}-n6sfbM@u=6Bnol%ogHS<+SP8MF>^ed z{l6Qneh@Ddx1x3Rx7axq(UX87%F4;OM<&(l9L(6GXKj9dbwYJ@#_0l9R!)NUokj?3mh_2chc@O0tWZX-AJHui?jpbUSas7*{(K@#=<2pAZG{V0Z!}qxgu2=idK(J|V ztB_5_dyG?+SBj9< zj1|^r%t<|Mb$0ri3wE5tm%tHkcky@?^UbzCV_6HsNG@W_bOGPJibj=54lWjke`%)S z_0Cn~^_F{U*^Ht6%DBxd_%JdD(%Hwwbj+)J)? zAE%30Za&l;W?A{8p>>zU&>BzFo`P>zJBY^PIPVM^;Bjaev+O^`Y8GAt**$G+7}v2K zp?cx5l6nyfg*EB>L@+;?^bO%AvyjRY_Am=|CW!#)XF+ql3#rs9{UVQ)Z&&Ap z*7%Nz^L6K*WPCg0BvjAD;vkPVzMEmj;kmN^5TBg+(2Cv-yY|G=Rr}nDib~0_m}x$P zMr}NI`fmTlbgxRj3~YBhw05`ARHV)Vsoq)O1To)zqUxc)iQxxfCeIb#Y(2Ejx6HVX zVur>5tlirDVj0_#&K$|f{zL32W(M|`LC~ggduSsA&^m}|9Jlb532*iv;)q~{CXB9r zlQbe7TH}c(p?YT*sF&W=&wNL+&1DZ?0mTEH>j!C=K2OQqZ5bQal^%Jv@kBJNm0dX6 ze~8e&emfdwCMK)rP1puAE>VU4y>oHZ)&A4>#yj^wK+EenrLBTh2hy5x;~g6}-Z8&* zykoS9^>f&`4Lvb4bA$?w(B99rnxq#K}w7H^ZqSZ>xz%^C*aUwf_)1O~xC;!{!HdkZEPY|RUhpsEO6GI>^~|W zc2IA^bR6|5UB1;P)1dRg{2pYfk4ZkvXir&LU%d32B*xs^N*T|62fnsR9-E|%RxYZh zMg4NGUmtnee_Wb}P5yKi(I~ur7?9E254jz=AQ(3iQ@T$v@Qdy8%JYMCN#A1$L=UU= zX&WRls2Nz&NCh0s0bpqE7lZw@@jsw1jG^CHVO1X!RX*D`G)Ns$2F5vwva8m>lxJB+l&Mx3 zQI@dmObp%WI|uw2M|Mn!FC)uj4YdQFPpY&gK@(j)?*f{ffu@1w>K^9vwRcVO z7f%r-qc(1PY_%h;Ya+Nf(qd~DR7`$+`InF0f7>M}k?T*LwdN<*DTTF;>xDL&5v{Xk z(yf}X$1?QHruYL~DxZ!vstzce8q^Xwm7 z(;9bldk;UjrZw8*dqJ-k5@K38W1fArte-{*;+WQGV_N$_Qn#7(gM9NoI*PG{vog(& zpeY)3+lSLddn??Yaf&Nzw*=Zcf~J&dIbHazatZt%r0b&sq4E``R-tGe+hygDk$oe; zt!?MiMez7qw3zENYVt5b4D5RsGZP1tskckzOfzdLXZq!&FdV??8wkY<(aEHL&`!@Tu(o?! zlh8gB^W^45sDs%BNf5(aOo-?GyhEnxK{%>c6PXb{$v{d>T)-Ypp#148N7vH~RKpS`V$t=f-C-^_NJ&{lr1 z%MaZD#`)WRd_JmD5>BP=XWR;q6pl52z=uXT0X;`K(WfsXKvFn%V2~?+z=zt8;ahih zwFQEbo8i)puCI2wyxbOju>X>|-{%A|9kZI}J9j&&9KC3U`@9_3;cRQf{-ceD)8%qB zfM^`uR?L+SNnX>>!hT~&FH zlP}!6m1>*M+Wv#+&OJ`K&AbU$tmS;FZJPUeigS%2`A3gi)X6|uzeFxl*al%UyGr!*52A0_6~IhMk@+8<91nAWk4YNd5- z>-<>h?JJ^HF&Vf{21z5}=^XodBYyuD<3sF5hUpFQ$>k6K6h;A(JMXSPO{xG|C(QbZ zbSLU()ADC%pZCe|FaVtyXOA8xLOR1XWQaDoid>O%va{Vr11a^y5Yb|%Xu*?!y}bF! z```UgIJckG`?)wLjbp$3{POir0EJ()08K!?Jvg+kWB1W{X>Y}+X)Ms}hsJ}eMaf~h znJBM4vHhSI>SIXWP`?o%rqLexfJ~IjkAM39gAd1v@e7kCfW`*7{4x)WlOnC4n=@IR z4vX(D|K)*~@zu3q>yGmt0Oa*`f}X^l&%Yz zpy5KktjIzy26|F5C6VG29208@aZ)SMy4*hFm>V?-n5Bgez-Kbz&<=^HcM+gX#iV2z zIEkpA0_&dg`|cm0bqT%&GJ<;-B)WB6IN7Cl@%?HIA$AFVAowo953RH1(Kvy#)f~Rr zE%^#3Np#(QmUc4|6K>>p!lZ96zxoQB4@7EB6Ffu{JiPqotM}jgV`&Yu7Iwv~IpF){ z>pyof$b>p-DGIIn)0MalCA6+(dWSZt0x*=xg-X-nTSmw6Vg#sc!4Z|xw6pbSyF*L^^R2ZG2EPeJpwsEY@NKu(dm=F1=%s+8m9sgEr}- zX@}Gh5n30?I}%AOvs*04+XXsYjH@f&Z^FfHhKf@=v_um6S@LvgCDyqKlC}8k{jez4 zJS+%3TMZUyjmD~&OGP$!*irJ=M<4&zr3%cGsl2cHa;l zwSmXG79r?gyK6|Fz06^!zjq4*XlFY#p6$*FCiw<4|jqTfz-UE>4Lt*IxGuEaI2 ztF3gTMB-1A*EDhKAAG;tRQlmXD9}E?eEc;JXwcd4bNiua zldXZrCtD+YKRSVg880uz$=B03${j*;EGWj|+&D({C@m^s>{4FVsBZW71R-4I4y1Tg ztrkIJwImg&c}NP(94}OOj2dYZBio=qFC*O2FtIO#lH=yJH2m+Igf`#`T7R{PY7pGK ziH=vfgE;96ZswpXXdm}YLhH7+CZP*T7NOOL1TX*k*YCdrDk`}HEg$eReV1B+CAYSj z6>WkiksJ-0pxv?00}~<+_^DCFfS-ak{e63HoaRL5tB%&KB{GhgbQl*VMEr(xTIgS7 zi0OQI`1&lfpm#9kTBW}dK{^KA|LGTh|MP$N*)QIF>xVyl^Cy4%^MC%?cQvYgd-;#Q XdH?<2mhAEA+czJ4@Mm9t_2&Np1-B`_^un`|kVW-TS+;*PfX*->g~l&04efKKIm-_ZC&V z-dkjJYHFr2b#AIPGnmFV9XMRy#-+{hHY%-NDP9;{qzkoh;p(E2E?lJxgLt8o?kGh) zt}3mms;S1P71gvV$D7E4p zl~Js%Q;B`()S_ygTB@WG`_O45MG|P8RwpWQ6^E{KmF`Gbbvmh6ooEc5Uh2Z2G>YwI zum%x_-bGZTSBk3jO6iVD1f*Aqfb=SFAYO4*;OyuRWCu*>r`!w{G{q7jC#GK zQ7>sUh+qvaVy^}l`HnasgEYGa37J798qc7T>PW~8YUz#!hB1;)8MKmWt<+4ir$GX1 zaFv?rq&kv44SLZ+2EAxJgXEhA8NERmkJ`mWu#nnCNkeTmyp7sL1gmyY3pjA0HD%k4 zGKwhFF0MkKY8TN^Y8TP*a3NR>7s5Q_LO`l^F$lPDAvG6gSFIF{i3`D)xDcBwU4%iX zl}e-7UdclRQl)5UT!?)rRpM}zqA#eGqA#eGqQ!9`sTNJIR%)bPHIg3DrPWHURHSun z%sVG;Nr+rkrf-_JZzZXdMywR=u2ve9rYX(4j}hyu#C4`tiK||%5*-8=qS;g`QJYFK zzDg|>Nw`%KT$RRPde*$1-c=m5O7v;9O7sr3N?dkomFN_>5RI=gxR?gCXgdNkFN_P* zEMAC9Os$setCn!8C7jSKR+ez8)#CK1)q2yh7VQ*T7t`$)EsWye)e<(fxT(2H5w6}Mr19uMkGyKh?A}n ziAb#x*Na*!*+wgwM5}f&oo(4}ibe#el{`kP6+6&M?xB@Ntd(X%E3Q?wR_anKb*YtB ziB=?Rwbr0D4Q-{g9p~IPG;&r%8?c*)N4+VtCWlU%UQfmDy7@F=6-9$vnl85bTcOk+ z_}P9&Ths8a&Dovb74=Oqp7l)6JgiyZcNW&>ZN{ivO~bmjkcv98Uz_^cnAUe{WODEO zwJFcDvuVRJTT{bc!-Rso0nKsK#uV(;O5v)fGWK;}-v*|i`m{Bj8`$)#z_73`q?2uL z>T75E;MI(3vzDVR8u4AxZQC!j+n5^lX~;5473OAq6I<4+pKn7`MQ>N8Sf;Qw_2{E# z`|EJF%)2+=i5q&fF+J#`VW*x9ZfA-g+`zQ8udQip-zKJw=WN-XpB0v-7X90p+^`6gf0HG81NQ6zgM=!11N?;B?moEPYhXW;gdVBYxq({NZk(45 z>*eNKhuM4keubtTaJ!{x!XQhbsMd?DnKsP-qU#AhHg)-~m8R{UPNoSydi?EZI^ok&xvXPB9dLp<5t=kTAQ z{VYxIhP7i29$GYp|ERU>oCPlxq2?b~f*>NDJrS?~0=W#f9GapkbC zrklg9Soi_BT^BdpvGgCt8oLd#WyNlQdti81(;okZ{2f!Ce;@uLp(pC8M+_jr&a{5S z5dQ9gHzTa=S^i3>CePfsu7T;~G7IKsvZ%|BU$)&1`Xy$M({dKwUNKF-dY$oYi=iMX_xS$qM@lyb(-g1G{x=hXKUT(+bUp zwng(!vu#X^qRdUT^SlH!GBX8R?`g44$k*S zt$&ReYAj6sqdoZ6KSxjCt=@2fH#5sqbP%m#ny{p~Y4?H-!pQC}m`Rn`pn5d$m=V0| zd|9)}LK`-z3+7~fLxAvFc#fI9^0j3R8$oi7oj`!)GAGlc*v>-jFQ$R-FwbadnrUo8 zg*K)ija!9*4p?-Go$3vBCoQ3_%i_^|IdiHDFprkDGKDT`Y${khk{^cWlGQ@%TT4ds zK4TiPbgppcD)mWaTWT_yy$Z z{=+ohhHP{#xaY4QLIfWev`WjC=oNPCk_vNgjBj9Cw5F-`#IWFiiL)jL%$Ym`3mBW4 z=~O3M)00(w@YlxVxq7H*_%_V%jzx1?f*Q71uW0tAmNu-SP|;AKF|bn>K6a*QYx=Rp zj|SVaMk;{4u%-u3+4gJ4Quj8dxV1w}rvfDRa1(C&t@C5O&wAUM4z3%-UPi-H8^;Y2 zibCW3cm)M<1BDyT@!d>!Yh(nSz7!gmCanM3bSJ)!nHH<+i?L2vU%!#tpgt4lOz9gs ziyx_8ZBnlHR=65WvFpeGcXhuF4Twv@H~UVT$z3%t`E5|L{in^oP@J*B#njuu&NSf{ zOVh%iTChtWEbL7^H?{yp-fd^gwmrrUGJoToFYB0Im|75Bsx=x~HKqxs;q28;@ZaC2 z5p-e0EIMJ*J$}TlLDH&kAkB@mG-YhCG@bmhm)NL_sZoLrk5VJ-suQ|f0m8S!J}n5& zrj7}XOt1dHHoK#{DQt6trArdBmL!<%yv5pf=j_;v2!)c(id3{PwS8jC5+fDCrtRZx znf+YFEM`3%Zn}N0Vv2CpsFiO+)@7ceA8OdJCG!+PEdM7k4fbnu#ziUmvdewFY}wc- zMQ?bga(z>_KT6Rb?*1-HFeR z3Plq^o!vr3OQF@Qb|@IJP|=m$3*~opE4F?edJURZ*P8vgP|=z0+p=@tpqgc@qK{Cm z^$;ue_X??6Laf-FU5Ql;{VzpZjf$`M9od!Nkzs2GhI_5}EtQwnFH-P+rh=cPVQDtn zps-|~OBD93_aa4ex@XJ67AfYMh6mWN4~rDz`HNYL7327eJBt-=|8DpVd(#-SwP1E(s3eKsVd6 z1IrZOu(xqQRIyC)ooW9*8#a2mV$#2>wPB4{DB83B%i$P__t4MxD->Qrt8M;fby)Ta z#Ynzs*OhPzUYmy#?0aY>thb-@YRC326;ZG;KfnY4Varzkp!iO>%5{R@bXcZPGuKrZ zd*3@)9?MrLMhm53QxxVbyB@}Z`BpRSYD|-6g~HCXsGFtW8@H7Mt=NPm@b~qd#OcN@ zOIENNBb>4XsJ~vL=)oQ>!d0Ud=xZv8RPech-*Ah1?9LiRUD`P9*wD4`lw-pztc3Vh zX#>8%y`EHR!yap)Wbax<7eRcsR$&mXwnZqc*x+@Fc4jVY-+o00^1VK$w(aa#={m&# z;U+~ymV&pfk5@EcelzN}K**qS{oKT!>EkiVdvO5FhfeZP(V`(U#4FmGPPKs-#be>p z#kqKe6C1D-R_&DzXKS@y(T2nhY{Gg)Q>Gl`(~c#qhsmr%`CFFk_IgE2Fb?Q^gF??= zT-vB;#6mYJT4k-?pa?f3M{9Nrd!%T|0$UwwiH=7hq zd5J1y6_^xz6sG*2C@QgJBNG(u1SJO3<)7>*aB9R#nWAZy1ygjW#}qm^IFH?LJ1ozO zw5zi%+ZDaot5q0Tn{5iKgkS$lYRjCKSaf7bkz6Z&^J2Bz742ATGEBcef@}TX_txwH z#FxPx*ri=qIFKwYXk^G_Ki~a&7fhcBg&R*=vZ@r+!yP+zID)g2@2uGc&pI7t#w!Yv zuLdxe6h&)xG8tys?rCRgq--ekgxekeeJ3XcNb*M4@JP6A=1ic-r2R?NEN8!mA zUZ=wK|6l-UZpYSHp|I*7MJ$`teu#~Qt5)fxaaFPn7qI=_v+}m7gJTjW1B<_)=+0VP z1YuJEVcK@UypBe1P%7E>v*7PL7h#@pXW>k~qwDf%xt2|AKg8Ao=O<2Dy_VDo^wOS{fr0B%s+oCR7mbV3p#MU>?IrjUVf;#i#!9UQ$@m3W zV%8-Lo!^0Aw07*xM6Nk&|D(e0E3MMtq|s}XLbVQ;;ko%kyluY1sge`UTwK_s%L*?u zElazsNEP^t_sZyeMGupr!j_%SR|J^umD{kP-z(~{egz6I)5hmEY)65j7a!b#74qRT zT??`QQo)!)?C2mqoK3uiiE|3EWAd~pscpylU4iTJRc2mMjA3mfK`l40U_aYG2J^(L z3n>Bx@ddvZDSY_KSq+L6o!1dBwPTLcI4c%6g=^1#n9Mb#dp4{hkn?1vlQ~O4Y%qlz zCS09J0}kU9t}h>QV-GtzZr>cE`mpnIrl$JS2=srFjNnJZlM|94S$ zKBn}^gzMg#&LK6Um~F%iZYb-$9hvdb8Jv$vS%X-)ubDY(Gn0d_k3b}_evX9HA-Rt& za|z|@v%h9?E&pGo->~r^oU?EWaPBBNOAp~zo4J^Vy|ZOQXK|~TqL>qcOWw4+4J6G- zaH~Pl|5c!MR5Vh+rl+=eHDfPgV3KDhV0tmXcQbZzT2pB!p(gz|PNsu@o;5fRxSQrqfo-lPbzOvcw435a%uY z1oEN{s}175Rw%VX2yy47rO+d4+OS2D2o8kmb2)cDZ&7MY;eVj{Ty7MbxD>3GGuEpC zOP$O43!?W)Siki=&X-Nxjm==mJQTFe!PT>QoRKL@Kx9jzxCJb{A>yYAfB4pC4)eL$ zY+`qx_H4*n$-(GoMugmqkJwrCOe4clmhiIBtFvVV+R5S!f|S8F$z zS+Y@!xQQepOFH3Y&hi%lF6H{H*FJA^_WfdRg=xcZ8}?=~x7MVb$orqDa_AE7E7l`| zYrw`w;mUF;`r;K$SZZb^^^9sE05L7lkrFD-;04bAOi&HPq!U$a{)xTdDI zcWv0FLhxAAmE5sRQSkpB?Z5t1V?YV{v6RsRffaKyDZX7!` z6{MDt0K)TFjlQ<8<$6#R*)Suq+1j$CrwAjr#X;LY>(B#223z)O9k-ef9*{wUIODjv zY>5hcDkZ7txHmgaRoBF$_daQu_k;0Vh)Hqb3$!x__i4rw*KubfA)N5DXM_b#_*A3;!}h>7+z=As7wEDEc-|B55KnS-2>p7 zAGtYf!){C`9cVD)R<5g1@9|Fwe~CzOLS%Fzi^%S^Aa^X6@|{E>F&&zu=87>nP0mYiYwjg+-S@HTD>6ZDjj?L!u-u{Dy4NubhQAc#8G-bawhqt|?pjD>s0T)J$}=F+UviNp;zs zWftbN!KwM!P^#aO`R?F)@%35g3ph~v4vsP1F04B~s^fQ1zJ2UYuD?+4>Q0PZwUK%P3gaJUHD$D++lfNzHvq?ow(LX#%0}(sbo}j)a?NXdxE83;Q7~kiqg*|f7iQ5Plc*9>X+E?? z7uM{Tbgn7?#0EjTa-?@VHtQ&Site(#;TG-bkl}xpShIC|xn_8>rfdu&9^Z?N{Zv0# z=bud&%9JCLj#260L^{u9vFY%F4HdrF`|BYkY?dZ=&KhKZ&G;jG#|#dM?%6dA4V*GLa`u!tbmm~72DZ%Z7r}B(683Y} zV!F8fu&4?5?AbjJ1R$Y1KntGxIW_zBu-G*(1<#ry zbOnvJOnCrH;n#=QLPL@;{-4q~zSH`l5kXUC6DGutI1jRA&vpRQg9C``&>4SZDhz_} zaqK~?WI9e;b`T*Tzaviwg?E)6wE}d;j4b2yMRL+j-F^+&p3olPL&}H?i-81ut-A0?q*~3FESBoC+qGs19;Zeq7xN!N*$Yc0D-g1J?w*Y(|Y1;OjX2`zzFyT&6ke#UWO+l z6iUy!4?>|z4JOSFoi}I7?9b(__&7q=KFg4#8BSp5oOA%eyR4L5JAtX-OJ9tF-5X^C z7DVi5#n^}jo#5Is&y$=j?{YeJ8RsZC*|+*!z#8UYdG#*G&eP&sIA38l0`-_2%Iz-T zUXSnKLRke^I6&8gSH+&@Ks39EIAM)H=Bm|6@Rc&imd!tjeWGnDR@K@O&{S~}>u~Wd zJbR(j2+RpTLQzNJDYypCZRk0J71N&v$yuI85W$D^0XIqB`^NqEcpi?9Rw6ZE8JQ$zd!LH8>d2i z=JVnqI-Kw~R^g66;cj!x5S+mA?1g(@ox#Ze@2b|_6!0x zY<9f2IRfIRzgfoSQnpQbQNTouW7iq%2d)3+8u5JGYbtIH z{TqIV<~FQ+3`ES-{5mh^Y7}<*oMaJOTiI z*cD?@rOQ7^(RpO)0T5R~yy&-@Fp;-rs*ZCLjh)IE3sY4@o% zcFgV~H&O`FvSZ+a>o0QNR85E-sA+GuuL$Auf@qYYm4>lAOcSpuCl3(iu#PHsVwU+m zE!c=lupr`pq$HQPpt^I*0<8)V`SRhBX94#e@4oy@@HOrf zV3qI@6CdE-&gWdLW=)BT2#5#`m>f#8syCf_V8@~gIX}wk@hVLrlE>3&m}p7{1?)jr z;0<>Ru3W-k%CHwqPlt&X5 ztJN!j15@D2N~w>bC0HDtuEGSPmSMPQC@}3e@vF28YkM6v_`*vgV4u;~;qSbXn&nWE zaUI#4)L9pP9D0V6>yFep-u)RV!01wc%B+al^LaBN#ifXL!hIOkcmw;A+f6zPp=d7b zCSurq>)}>;H#rY8oGMeuH}nR~bo>@)FH-WqZaSgXL@(4@H4|_wZ*xPX8|5=_1LWL@ z%+i1jJvz{Wv{*L!FMq&u-y|D$^)}}xwVXgLz3(8I;SaESJ(YFj_h`a;-9;jQ?G6qU zlvnvvQ})$e@b=4gpz#G^pz(!wv0nN2P%hj>B=EmNmfm=x6DOW`h4JL~sLP(-2T2Zj0QdT`{MG}`+MI07GRF8cXNaMj z3Og+dzM)f3U1!T2rrr28KRGkW}$PiqXxH? zDuYgkBYV9PFD~PqT@>>#E23DbR=XOtc-2{_N7pW>i?@}U4Jis}llQ#wcK>00Ox zQ1vbbyn*YYQfajYgGz}?C=~%Hc@-i8yyI!msC6o}PK!*zpjP4SVN?|WMB$A{txnUr#-mi|HQ15f`^6jY^wuxl zuEkr$F4U9ojxuy(j0QXcQ5%#h7lXk7U1UImfqz}wISMa=LNWgqE2cuL(ra7|cn{ft zS27J66<$|Isffc7+Fi9OrIN~AQ4y~WQ?Up{jX^4D_FUBly^97z=Nn5if+4E#tilxq zG|^g>QH^1^x`tISX2x3uz=o0O~BBB-~|SaL8ZbAxp)IthnL3T4pb`mNEF_y zg}}e*>m2Ng!MduoYNcMMcEMY%=#)zNH-nvn@q#v4S*=oQjY^HHR-?rGzbNKkv~`Zc zi@91?;eA~Qn0i;0)CYAayub^$qmc=3&O#ss!YltUH@*qgtzTC9iM=LKWwO=Y?PtHK4v0&&dScc)=Hfq=6s^uhC<95d`5I1qcK|D=8od!fVth zAqc|DyUtN~7axKM0bM{4A>f5yBP3A+I@IFnnE*jc5X1!@tkY>R-FR0UpB%U-^%@;& zp;S^yn8Y<71#A!`jf6>B!T<_E9F!|zq9u#Z1)QV!*%w}zhCp_amMF%6caKF(u7pWk zk5L#91Q7y0EP)`73ZsJ{Lco_MTAjGEqKLJ0;zEkj0fNrOC~BY)>0Cq&pgjnp1{guB z6PG}g4iI!oaS$*71W5rP=!6%#ougn42$BMVAiUL&5`v%-6@clCkVFkcV>;obbPygv z5I(hlKoH>JyyM~X1PGD_f*|=P-rk2GjsfO`AVR?F{92vlpRg?iQGt;tS0_0rEDb@_ zfEU*xh#F{#fS?5k27(~^XE44!P{H@LczOzIQ0rZ=BvC313dE?wQ&sE%;1d@Od{Rqm zMW>aRz^HQ3f~i3CTJSnF@TCHRV1o;BAwDS3V|&6|?)0$++KM!RDaP6rHw*gy0+P62 zfp76nyaBwSbRl!&^9a7Oz)n$0;%*)PHIfl~AJDsCt3oB63JeBjC))|%D1n<@XteMa z-ulo-lE@YGjRz!IEwvLqD4}*V6pTk~M*yU)O-Z|yjy`DM{a;BGt`ojHK||V?bi$_? zB$4HX?=eUsFv83IBoP?l0|Sx>4CY4YkT_2#e1$}11V;E+g(QH%o{O3oKlVYO!MuqL z;i`}%HK1PFailVU(F@3L zl4u=sE>qQrj!g?V|8WXfblE4s^>qQ5~5_Cnxgim4cnF?4O z+c&vCmLnk``(v#_lm-bXwD*g{B0d*CCZn2!PIhTxbiM4-MCp3r8y(anN*BL9BZ)ec zJ(@^eFM2fWPqeO=U7C1ZFS|4myIyu_Vs^dk(nReD)I^}f?cx`0=#a?WAbT{CyFvD7 zVt0e&(MBclJAy4y4G}zI21x=Kglv)oFb3JBiQ~oZTZz#w{fup{G1VrH`r_8AA`%xrazyY;B#xPp8j_`?FbBy9NfH?F zr>poWq;s%}(llf{m><20%z}AAsQ`}hGSH@0>7vx>@I@qIbV{L6F7<=>1d?P~_$nlE zevorPk`@Sk>jz1)ELa|rIL#`!F(g@wfh0)_oZ6N0D`Ee`22G-*20ji+QUjKUB&mVN zLz2}H7;%9FgYFR_U=v5`qtR#~QC(@lAO|E#)=J>8VCZvM=U@%3a>M{CMC8~*@WCfv zEOmp$L*Bs8La-yE671g~H^j%3212G{2|X?#3H=1am0Vz51m+qIzBWbzNGPNwrP64O zBntf?A=V+A!ltfLBj?iKBUOGY_73#E20hBK77y zModmn>;iMaV6Ga(eL6h_LNo|r7BmJ*Lt!PD9|sm1N(5bDYM~Sn9VixNL2ykKc*{xI z3^G{SjQBiUZG^w*;M`~{8VjodaNu#SNTAiUDhRZ6rU7NHP>tl(fNx`wI?`;*i~ytH zd_V-@hxrr8o0+-_-dHsPmAqpNGjG4w{ zf?kjXBXWSl(5R$M7-&fnVS!pzdiWXK5ZOGo0?-;tC8h)CLXwsdCcstvPMVHe(1TKA z#EAnIG+si58)G$7Xf7>DkQ9zLh>c+?H3oxHab3~uz!aEwoK|3MQI?5Pfh8#7(Wr>~ zU@9;HLN7Q5iluc1q&PRi`q#S{ag>3L43m!~C+#|zPe{^&#`aCik%xuj2+}088g_3; z(f~2FSiq7Na(1OmYW(12QbR0+GQj26AAP2bfrEgs0+F`pgvugZ1g=Pp^l)|qLQ#CD zPUs}kqm@Ic3o=xAkrw9@gij>BU=3wHSSJQbjX(}W$0!wzNasFAI0oznFT@ca`k`Xc zium*xeYt{0u>(Q95?eM(MN~Lj!I#*yKyge3eDre)?v)^FlEf{Sz5<6NI3^B6KqIOW8j&<05f~|qpwHJKNn;}7#cnNF24`y|Nnj8SxMD$xWwddCZzYMqNKph1 z<46*<;QWu!NMQth9S={D)c_2Zo}>m~D3;lsLV!h1YcOi@GYizGxZDs}>M`B4)gTRr=V38Wx8nLkF_yI&K@j{A^rXgz z_86S_y9Ca`ID;TJ$N2&r75fX>k3uTGW9;16;=pV01h6u8W4#*tF9lgbIqe15`>-%o zSZ|KM?7H!4wfSQVX!+z zI{Y;mgwAbf{fE)`#iN=qvbcCS6Gr`s3n7ep6CFQ{Y%Mx^7^WQ&o}iS6D>`x*c_4NL zv4r{-T{VpS4|^bAVhkhq!!fy7kGdDVFN`;y=x$-;dk84SYJ@;^s4((8mFPfWn?00`vj!uZMQK*?eeAdpiE^G(i9aP^BmU0uHc60T9%Z1u3?~ zBMhO0=n%dp3IstiB5lSve-<@RTuFN>-x1Whiof>Y97eN_ZC5NI2$CH^g%BhK1VJ(* z1&nYmp$$$AAczVmIz;FomZ;kpA&DBmj}Sx%I5I%oBWVBx1VLgWK+s5bq%aR>Z(<1` zz`X^5B7TizMvNJPr~p|Rj;BQkM$jiDQ3HiKbX3M$0UqY6k?cs^j}TTYAqbKkiT81q zE|w4k$&AS2@EkxK1I0Fon1yP{=x`2B5ODq!hANOm4MYaw?^&RPAV_vZss};RKoBH5 zQuu;hNYqUbBr{U5f~Pt{2|9!zDxlB=yBhy@0#nai1$#PLcoutRt>}3i^<*ic07gbm*X1stO!f z7m`FkBx_Q@2T4SNYyy&GPKx&EQKi(5z(@wANRJX^l#&0@@he104Q z211g+V5A6;r7;m*x=MznM^1=Qr6JK?Ej_J(P68vC)`;$jGo{B8kN`${5&;Qdq^A#% z07iP^0105Erwot)MtZUU31Fm$36KCrdVl~4V5Elz;C~#yLX^ft>?u7Rz)nG6WCK%T zEBt#DkCtm2g5{o+9-h` z-o^7RsV0Gu4NS}{9SR~)A~3Rj>FB^THFTN^4ieQ+%nwOaL#L^bWHkgvGBD0CNRqV> z7|FoMRY{Vy5E#k6ba;xN??e2}(*Pw05G6IBU{Ih01{4fQQUeNxB!R(D=~zV4LSQ5V zQ(TXyxUv=kBRMdI@sPy#FT&_o%#cw?YCyq|Bru?0FtDTs_M`k&><|VY?Xrf`TDRYCysCFjDLSZ75ZeBmyHF7!(Xi0s{($Bx@ls zk^|!ijwD$Nf#K~-`=1IF3{h4?U}OV>f{~|7U_il;BsHL5>_5_&fEbdb1r!WP0)udt z&T+&+Ak~M&Yr+0UDGpAxWHkUI<#Q+l7%ArpQ-OkYa%x5C5F`l@Js}fqz1!*BxwN!BY&5`fPx`OS`hRi_K?8n zjf6%vFpkV1$!Z9UY+xJ%(0RKE6ehx}4zd~oBO4fJB9J64pkN$9NMK-0NRk$V$_P<5 zFen(3G$v3mBv}o>$O#!v(M8QTmK_d^rBLGPa zQLvDrfg$khm?Q}dQLvn&kuTv@F$oN!U`VnS0wdX%POKowS_q6$GBA$&+vwy}4bKKh zlGG3dBUuyXp8OM%q=qP1&erg@2_%Vv@hg%f$yxwLPS|jGNs^rZ69vmT8=hl8k_}80 zEN5->E0G9$B``$6a@vL`5hO_l#_ZuFO0o=5u$;N!Sv(}2lz-wFi$rNmm}p3n8lqr1 zeZyfeNz#~zg5~^;)*K{B3sJC~!Qs(O8=SODV2FY#hvT1rh0*fFvnOdxI8}fos{t4} zkHZUukYoeH43H!+M8R?zho?a#Nm_`4V4`3-jU#S?BxxZEmeV*jQLvcCVgI8icMzr721uMjO7lb%Ea!1Jo`fVb1W~Y* z$3Y9g$Y~s&Y(SD7m?&6I<8UwvNwlvqjJOe^G$x{8Igi89EhO24iGt-kj#yMD=W+CS z29m6Wz{n0v6fCE4M7NMc%i#S3LL*ZIQLvoH;n@O7l4W3byg?;dhA3FhF;W;T=W#f5h9nu7=pK?dCOpX_NmfH(Bm?6iCrRR%Xk)-5 z91#qj?2#mEAuy5yYm``jIN%n?M0*G%Nexl3oX6p`nj}dLQLvoH(QboR#AGc5Mlvw{ z$gECI<1|FUavFzy3HzU%$KmX}4Lv3ljEE;_BuQY1g5^ApwlGK%7@}Y~jnfbX%V`|m z4J1j{0x)tKrvU{UAm?&6I<1|FUavDb)D4vr` zLm~R>j`v*;&%$~&0YJ{KHV_h7~zcre-*xa|EZu*jp*Z%O*tr(t4|zaaGOct0zZ0CLj6whaU6K z53uYvO5bbh?$c`%ZpS9CeAA=yLs7E^mv5+sbs3tPTHLz#k@PGU@xI@p_YeI_`v1CV z`j`Pl+qIhpzPw#am!RUCYbB?JYPN|xXSYzJ# zo55{;6qA2FvEa9%am&}?spN>P40ObJI6|%HV{pkLQ0{-J;3R7rz8PZqg>Y&8l|0 zo3E<-)u2n;emi+@=ji{W)>;Ln-w&_a|M$6hQ+A#Fb>q6JBj@)lomlEn{A}~>;;QPE zyFNWOjxMV`R#ka@p=a@t+PitRuL_Jc!SCnVS0uePM&17C@YGma=6By%J=Z;V?p9;e z+t3dS)2m*uoN*#2t!)3g==;rX$1Pm@u=)?uM`k>Ox~*TNx{+M1L?=kIeL`RaaI-I#uKpr%v(2zq^fpEGS-W ztn>W5#omgQ&sQ2Vjo;QzU32?*;YzR2+N9d|Db-)i`cUO}_Jc!;ab-yD+?n^kPxAcu znn#jl{E+i8rM9wmw^fNJdaZqZyZiaWpMuB58(;h7W<5NTx8Qcs!>bqfB^oQIefZ?p zIq&c<7> z2R%wijrVgYYxnxbJXPkSeQ|F_rXBk`bJp3Qv)5;r)4v|4i!U4vK6|}#XUEXduSUhc zNxgdTQTWVK|9!z1Dm(FiJ{(Gk&%3m_YR=%K)!Vfdd7FxQ9()wI^I-$W_xhwasm(^e zI?@UiXPkYUo$PmJZ^xwKpFC`iCBzuhUZ&@7Ob;CFeJk@pnMXlR_4bapuP1mkS(y;y zFt6ID)#z6>&q~$dK^O8y6^zW=uJwHUQ_-H9S?P27R=*4S<2sA>JNrykyurh!} zUJg@3<}X;7VY-~0RXkYf`2De4*&*K5BZ979&${oERIhx&hqr*eeO;(S<=-vW&drWC zjxyw@^cizI+j++518=hzI*c5Bz%{4j!ay{tx?Zqv;+02P4j(poG%5M?_WrH>X?;H2 zjxG9i+!WEoXBcT3S8 zD7nyXVb_Coij>{A4khKWJKH}^cFf2Q&(AqJ_hhukFP5oW4xPNO&+ighU_0u;AnzjE zMo~{XC#+3~Ni6*ZuzK$8$X11!w>L%=I&}E8qvx0s1@u%78}hi&cg&raJ%vilajQRW zKW^+`b&yM}Jl=NUHwU?*tZ=vFStVw9C36Z^4g|yxLvjlVs*SJkcU+6$3m8~^EgF|E zj{MmdIu}gXxJ!m%m zLuCIQ9UW%4C0m9pD&Ch8`1DfUQF-U`m61W*@rbfbYm4@Ts4(km=cV-RaVPT3`GW2C z8E>B*bZl6@sMtQ;Z{^&RWpM!kCI3nP;FSxt8QC-PZBApp++Ws<46-<$7`4*qc96T} zeY~H2iCIO*TfbVCFRE&sJ`4@r-tOeiqiXugc2qSh%0xBCd>mO^H!Ad{6Wtql+~;N{ zcPr2@w{TpKJMQ-)pYFAPaqIs7_~XHsW!(BDF7?>llOLk;)d$dGVcffs#^AHljt?O< zBftDp4C5j}sl-#Nv#*Xn(TaV7DA2WcuujA2PD0BbU zpTJeO$Dx5xR%Vz$9V?R5v8L%3F&BmA;-9^agko`C ztm6Mfx1hU5+&+@8oRsdEG2}_`nM||s)m>t$eF`miI}Az=d^*0zoy0OUf!5hUa}GYMs11iKKhkysDJ#o-mPD{R*uSiU`@h|TlYhr?wfw0a?#I4 z$EROdaNO73HSPTmS*f|nS_jkvd$upX7OCny`!D15!s;HAFTS}H1EyS?mAZ2L?E_;` z<&yV`gl@NzTlbxj4PDBEk9t5jRumIZ`g8QN(Q`sVgD)H_`uOMd!ocFqNjLa@Dc3aniU<-#hCkUirN}IcJyoObpLqo86Nkz(`g-(Dl;~N zH2x|pykE3259K#Tzp_F381HO&+RLB|a3*(ff)NX{?}9tg(DV6EH7x1B;7;|<*AG)2 zjTwoDlIJ{4bq^aeAl4J0cDZF*%$kAbnHEK7-M0Gsl`p;yXQDs0{GZ7EU?a3Ybkh%v zeKNYc4==i2e7D-oalWAY5IUqP{GSQ#J+P=D&J_x!KS1xlz&OGEwVzPR%Xj9Uq1zMO zV^d6o>e#*IPg8xvj@_p}8Hsmy;jVAk0^#n0{9BRJt!^ZC+d2aH0$17nmh$%GzCY_< zL1&|=ihIVPlM%x)lsN79-H9b!ZuL%H>&*5i@*ftq*2g|HKHQDl>Bn1tyWq|b&V$@D z>l9s63hLr{b=Bi@@;5@k$6sj(f2VtqwvYP-!JDjff2><7bPrs(c&B!TRjc>AQh~xc zU`upx{Z{YKq_VdsHw0{r4z_AF@A%LY2Q4f+HpHIp*P%o)Fn0b^<1WXr2P|cLiK6P` zt3vNFcM<~gy|+23=< zr|8ho2l=(%I$VDo_1A|Rp)uE!78Jf8v+KO^u{rRl&?7WAYZhtIxxOLn&H1YQN zH*c%fytk`uzVLFf|DsQIjUSSWGm82)HSPG};`fWk-hTR@Z>N>?N^F-qXL;t0vaIS> z>m2v&%KmCacIxTT&v*QNp!-C}d5-g12KvoNeOMI!?&}%zrymI{DBH2AaCWX?Z$?5& z!ZGKgM<)+IpXOYmPTQ4m%=1IzqWw;pw*m{BR8O9Ms*v`zg}CL`Ok;fc@w~Y%VNFDnrA*L zuNmy;lKH6Ga@_rB-0eSiXXP`9|8Wm?H&#A5Tzq)~f8&HlYOwo)wD-H~oT&sO4X)i( zG^cR$mAAVpTV*~f`Iz7LRdnIz^oR5FqvJ-u{&ryE;l$B%9N&AD8D?Cl%HFy1Vf2%c zhxQcP*7cted#IbcOZv35_m|^GZcJ78b|2$sb)nMXT&v0m^`@7;*CV6D#?Pqe@pM?A z(YGx1LdB?xkFz4yUcP1PQy!c9-Q%n6HzCYT@8Ov8HmBNaU3~Yg&RX_MzF!`OO%|M<`7X5D}K=VkfWB1d;s zv9ar%opT0keZHorU-Sh0erM0(6P7=nT^rgJzqaxEyOwv3guLWNeMoY<;pp^unAzxn z=BEljr95+ScPd`|GUVpHV}`D-bl#cs+uWSjHxksF z?=Rf-c4LD7u_WX8*2i-n_KemBNB_3(%A=H#ec}%OQu6U>^EZ*Z9u_`IDUL}CHe|lP zlG1i-WLC+CH%}8f!YUpolH0j=4o!(|nA@_%e9m!C_aOnvnU&)rlUF5ODye=Gxc|+z z<5!AOk}kAD>&j9K#o$&I_HSBW*tI6_L)`E4Zxg(d_Au6$)`Vaeou(mTUz@3yOy_it?l4AFy}elI$)>bcTgV^tHoE81s}U+KV*MU@?Ml2<+&)^dXT97Ddpv3gj` zJL4QqcZ1H4Gox#|Z9yRTxM#k9^{^gy{4F+gN=uo0a+=}Ln;)~YkDu$AYhV02X2H`< zBci9Wy@t`gl-Ts{4!PWpDq)0?G}KJBWQD31K^sy1%$q zwV`#=!15(|duMxUitif!Tke@`08cPOE;}o#80uWYFs?WSdho^l_M4p4Eb?E^pNzEfvG9RS*7Q` zU7S0-<<#im=_hw2MzxwT)-P>-&v_6}2VN_y^((su%IH)Ye4?IJjmP4MhrgW;G(`OB zn_M(@jMvfG-`?BzORg!gxZBH7d#8BE=Xv#fntEwNVnWxKqo(KHB)X}(nm**vtogopnRtutiJqXYU>TYW`09{;P7MPo!_3G^coDy0MC#tpifHHFAwP z{tS$1bZo|%s>tr)hRg?U*LFUB+qLJ@F*DX#UCevy>v`ALc;$dyYTqc$v`y2-+@JkC zbj(8Q=71Qx2c;3$XBP;E%e>m^6F|}h(%01n;J}8`9c;IZv zs`J>snml;3ZO@?{iFIz3et)7QF1)<-#kPZiW2-hK7IrIdR?qVO?CEE-##h+;ge6N*K?QfXoF3hx#J~JFHcE}hwa!9k{IqXQ%o1NoBa>uuf{vm@i?YX&I6AOQTzWa~Mn_K_#?Yvgeizi@}E{@y-vmJOE z*Ee$f*t~I%+<@nbeeQRiuF;Aw`!QqJ>x`#yZf31Y^S_N87*dhf7~Ix6FTrWtxAO`Q zd}<$3=eHhlHEAc7rW&=yTMA6k5A8Fp6KUnWkD24;npwYf=I%G|_8h-IRFzcZf9y{9 zx=!vM-70pw2hI$4&wR9?2Nw6MxcfzZolJmOxwdUu%G=&GPqSge`MIehv;V5RG3Dvu z4MjW78B;H)(gyxi>z07Bg)3tN$Hv6O8VjnT?Ze%xA6|QGZ0wMfRAo1;0!SAQbaxv2 z^5yqAPm(RoO7kmYj5kZK796O4T@#s7ywz!(O;jO!y*cp;ytg9BecaLU6&2BAp1(Qx zDcV>(#(m?N$|qIH?gQaCr+3Uf)nnYz-(KuaKj7$|o^$JV1a{f{%Ia!gU6p>pJ_sa*?%rM%Qt~yaK{`LICH}5{$wmzS|tJB-iyZdfDZe0BO(G9=o>9w}4f3H3^ z`PR>GeEiDO)6c!c(ht2i%+Ia(aO*Rkk+TPv4ZEj&-pM_y)~n}VgW~f%7kv9s)3{Ik zkCFBKd%Wp;|K;!Rs;uWfxiU3neEUyUp*@q6+thBo-NdTqcEE+6PbV5HE}uVM;cz?k zR{YboS$hsA|JtWxu0zhq7LP}aZRMnW+s)Q4+NS88$BU`eBVTPXc6PdTdu(kM7aAM& zA#Y9n+UB-)gT{_+6CS?!&ogy4q#o{d@1A1Sn))4_oYo&c+(u>dMQLL@yMB-EEm^mw zzN?ed)x(D;+`p%|FoM;(nKxi94CW14q?>sM7St2}r1vzh&zkixZ#m+T|JaPM@Kb-C zsngQVZgTRyB~UIlFE~?YV=8IkRgN3$0uWQX@|sc9#LjN!*sU`n!H=SvcjeY^TEjxz%)86x=ZEPakKc}SKD3q1bTfA}qQ`eOx1|{rr}L5kdGe>J zmc8RO?<(&pUR3Nn+^j6iJMVmY?S`{w(m(D>dUWqy$b~aj6_xgB;XZ-dS@EZy>}ye0 zwa+$bU$bdz9p7wDEOVR|`-9`hM-G$fuPb?~%cHaTyqrBBr!^bXCVb}NKljyX%)aVl z-n4O3S22PWz3?!{FQIyxx3cn^dFu4OIxTZ;XSN!% ze$ymo(brsK9WnD1v3d7Hf0&3wJ7haExtUJ7iM*ntmCHrSA8QlV`r{W-RS=NN*f7 z^W`5476z{I8}u@zLV4z;&G%30j0v6mvL@ui`*~+KB zX9cw%&!01{fPr~~!rHwjuXbFoKh*2qRmG~n`W@mNfAB%6rBqClvB5x?TFHQY*_wXl zEv?@FY13M3ybqGZ_Xxrn76d{&9(KBOIko+5&dBGe>I@na-A)4j_c8_Fi(=k z|LS!DbLeeut=RNmw|lWVz05UrdSklkGml>8p3KX`Tx(7c*w?+yyV4TA>tP;Btviyt zG%~-lCM1RKxtPbE$>QhG#<(e`dGAXF4L-$Py~kcwbU1W4(m$p!@O16TqIR`glM3%u zhoqkQIOKMIpZ;f(%8X?<3r{^u>!!JPPoEQ?dD#8Yq@3(qhic!?xN+vg<0P;9c?F&a zVjSZ4#n!y8&ifEBe7o|E|K>8skVkz2qhF5=dXm{N_Vt_bkFsi?%?Phnch&sdJ!1Q* zo%I`jGcKr2xOC-G+GputyB34S28mZbM=wptUtV`38|P)d)cC$>i^XX5*YW`_*lyj=uEnW{?bbeaErP}dndb}D3h*bX&(c-(*G)Kj>8oV? z@mM~f&A6b9aK7fLn0o7a@dXWCois~?E=UD5okDG)jBo4w$Un$MY=v(ANxAeD20*O{ zhTnGUK|(9Scf0<&Htg;|^KZVU9*8n?aQa-@#C;%-G}4Hl|Ly>;6^Y>uuwX62`Ve>#48 z7e7c7Tkc$=X;BqAT@xFV9=da1jFozC`lVklb`CxG@~>vM2Tp8t`~JGB+P}h^^&Q!) zY)r{VZ~IG`1CQq&`S>X3(~C!UrDuHK;ThkP^M0OY)vf$1mmJz&&~f9q2Q|i3?HiZR z2)tbNP2-Rm6$iRBX5aO=b-{YocVhw?w{Mj8wrqgis_%~7j-I=;-|y~4ow|>FyrTM6 zk3VKd&fL9nhhz7VDJ$H%+`fCiwsniA&FnlrRcyK&9nfu1zkw^ty=pJIxyASUh(Yo(GKAEWe**_(b;0u<&9|N_+VH8Xz3tOeQ*Y8?_QMhr{;gX7!+@2`hxz?burYE}v-=Ap8?;P2 z(mK5$Wm3WB+?Ej;mp501_&Fru5#QsD9ya&gKW4MRGo>eeQ2{;AKZ*@VS+LX3h-ZAo z1qbn@F!RCdqxmV5kn3naeLMP9W%iI&>k?vaPOBd2dGNu4>-p2}UD{Z2e@N1*zTVll zy(hYke*OAW_n+4lef$NF;@%!BxjT@5&{y_-ARfu(UT0;4lIn%b&up^G>cFAnCp@m6 z4Jx=^T-7mf=D`OcWAH5R`gr@Iyf?s=h)RPpR%9x+F*8L2LJFaTWJt=a%&Qbi zAydmNnI)1kl%X>0WGV?o#5RQ3Av4?ethMQO&Ueqb_x{fJ-G8k84DU0&?_O)Y&-*+Z z>xqkAvm?~?*8@&?6!olNeW)M2PxR!7>o=oa)&j!%hO9pU`nsM+GLs$=g}!hC-+J zTU?4<`8S?ElGz%3H%_OzV8JS*hv~4M{{^xdek#l zj>)Jx{M4@4qy|pDnL@CWyrRj&&0wAKsV}bV{RUs&ZgDZXj33uM(<=#m7e#Rz z-3AAWvxSN8LgIsQzUd+fiD>Q5?I9R+FDvdnoZWtTYSQ`2WwTA8DK#!SCg1wW4TvH#??eCQDUs z6&w(bm+!{T7Tvno2i`7cbV0Qo2m(lN1>$`1%H$Txao}_>uh#j%Wj^7gt}B0>$0#*} zLz)6dF&P~E8?&`_gTmnCD&uh7><#RK9Z1d3C-jdbSz63CuhTe;1z*f4RRG4oxt9Pw zW-~s<|8ST;>2l((j*-2(LpQwi;TZ7z;q%5pP@RH+oK~HuT;^RDGd^vY{~^Mz{UI<+ zI{t|T?eq=+PsevQ!+RT2ZDv!wGrK*v>O^Ei2ArVABN`7 zrC8NIfTOQgogS`c2MA6N7My{RlJj3x+$Tm#&V7Yrx;Ka4#PlZ^OoLs~86HV_<8bi; zyEJqa9Rx397hDPFJBphcNr#TRd9)~*j`iU*9L}v#`9W{g_57W6?p+v!Tscr|B$Fbr zoga?qHs5Is9mz@A)y$}mnYcZ@%n(HF$3@``x_2O-1THGw*Skd`PQ#x5^31kyrV#7T zWakW~5X@l)RV-A#-6yeW@l8_q*jE5|;Q3eqxIbd6V+TGhcfK;~r#Qk81RJv&A9KAs zW8rRHx|+%l_n-#pC1ld2t03rllDdpB7{sLk)4cz6;>)`>zXy89e19xc++-FM&kRP5bMc{}$kKq@)}>@rHr;C%PNOeQ^plYb*o=R=U;Q#vFi zG-GDN{P{eL=XkFwukJY4OzqA7a3Qw@$H+McouR8_J)@uudAoAvBmvHM*x_7wkl|T4 zoP#y+P4DDm?079K!{b0{4lhQ+3<63yy>1Veo_t+$XvS!;sHIH00B7MLFDncf885)j z-t035f~~s|J^b5E)PZkz;d@nBukyD751jh)ns^jnsPH|0N7=2uQnvzDp=U3JTW)ZD9Q10Y*4$y#SG5rJjubHNy<&FfnS-oKp6>r+jwge zJlw~swL31E!SS4DYcO^$_kdlx3-KAKH}0l%uI-aAc^I9w-Am=LS1ncZP4Gsj#Kq^ax0mF`u25=uLf7e;Q5`m5z+=^N@~={qhzxo{>qRLg*Xpe6>8uyEHWaBLXcR{!!9S-J)IScCeu ziv^%pPY`6#qxu9!I&qGA*w~rs6C`*3o^2m_giRfE29O*dfxf-+aVx4&Is-!G^8FU5 zhc3Yry`WE!r85H-A2d^+a0mhM8-w~xVB7^jYJlCM0l$JK;KsR>pHvJ4#uc^VIP)Ti z>AM$MNz)0oRnqK^vchd&5)MpvA{Px?Vj{?`jIu)4o+NB#*t>-LFHt*wH}H=d@om@l z6RNe6bxh0WyuB0HAsTbm zE0uB~P*JFwnmW@l{~*o9(jhHFs+2mWUuxm>jWjvhMKr!NOV$e?p*qf3Qa91x{^T^U zFz{kR`6{dlEt9WLqvm_3i`8uxrkkS{*3z%#781Tw@M2%ra_(!dbxgL~U%gsR_Zt)Q zRuw~&^^t4-NnUZ2e(g?2l>RiNh$K%z>MFz#vQ|Du@TbNIQdbhEA$2vzFRWki!i2p1 zS^)i8QSGZQK^80X)(eIvkNTIdsM0ZcWPkN#CEah)Lc$TCRBZDi2{vJC_X-KWRbL`4 ziVz1rl;bp{u6`$Z3C+A}QPZE=wE?9V5mut>PZOAzi~cLFoyfBn`$TDWfNd%CYk6pP zU}isiVbX=WA`Y(5NG&w?Zqu*bA|$*BXh5`5a6a&%#R>O1Djg34kkr9>h^mFa5{VX& zd!P-Aj_7|Mp1Y?Bd;}rk*EQ%(LxSMXIryiqTYt{b7QzeWR!y7_0ljnnwlsCLX#mVQ zn&I#(&gi|vY;){%l|=G_G5y-pX#tbELX6H}7s{DCNT%Nq^_La0@pCTLQPKqw?bsQ-hdO=+FF6tKX{CW2 zdPx_`C=}sj_cG}kJ@?N~JnV+T{a=>fyhcy^wEp!i%0T78DFA1yT|Xrr~pgpKH!DQxin3yB*I z2@Nz=;Bge_|LHB}!^`p|+L8}{5+?6o0%Nl5Jt}Vk8~h_@2|HF?wOE5D7!&L<^P~x1 zm|JDgXJ-f^gj?VJDd;_8*xJ*JBVxYycv1w8S z9ksKkrhMrlP0nbRY+ZOlS+MXIqW+M7mbTzAH$AI!>r|+)>A7Q^IWjrBqo#K}`5uj| z63nx7qvd|&o_vo#bM9(+0v(edWH(Q)k5q!i0m-;0`?}sPzp1>5ey8>?sD=fB3spP^39a=Oa3A_^0rw$=1Uh;@NPeDt1dJAI1S6!Ln2_Ik2Po6;Wk0zc zWbb7ZYysT+1iFoWTh65{k%aBfy{t^2i{f7*(L`JY+(z`H1?261m5ig8)Vxelrsvki zhqEr>_FMcb8-*b4`3L+?L<8JjGy_a?I`#rQB6q8Tx#_lf!7QRsi`eG`0V6nv|`L|Tl8IL>Dx_J4>D`rLxRO9#3j4SB!< z66s5mpuJ+sv=vphAPBC+v>1;JpT5tl`PxYbm&ILiYF8(A%Vv;_n@>d(B?JIURfn zs-n`DNa}{i9)Ws`j3p9H#65f9L;b9=%=#~qarBa!NB#cGt8}p8FDsXDcOw5_9+p)9 zCu%41elwi?;L0(BP9GCqR1UTRX(Mj`J+PlfS`=&sM%w+<^6dUTQC-YWOmoU^%+)aB5b^8{u*%|CJ; zRtRW;O#gFK#2U}^Pe16APx(SglQ;$}4ur4~3Rm8$vOIyPGch2=$p&2jLz*iTJd#_+b=a@diTRcxg^uxdG1JKhqf zusOO(uKgd^1Dc9#-DjrOLaxySa*aiPJ;>zf&44D4+fQN=c5zZ}UHsTa8Fa%s51w|r zoka280VBN`oo^>cpH`NtK>`N?~CDS_f=T;jIInZCL9-)uj8)nnTuJ?eXln z@1o+z)U2Dl^rA;qI5{u6xXV{#eE}}B4(!kuAeepW{*N0xkh@KpymJnjWnNmez(?p5X zvt=2zwu!;A)9bX~?Dxo)Co6`V-6boaU7+sA);z0~ znW5c|+=&v%V9))kbG4JFg73d$EKsbD#hVBwocJKOH(Vd9iRTjy-sfQX#65>)P)H62 zNgg)8Z++WY779jJa12HUra)tYj7~~!e+v8eDK}5?s1c*$n0}{cpu}=_zYARDD&y)> zAv2k{_ZBn~Y|$q@a#8{XO&hZjrvvc8OP5joN%zbY=HXJ~fD0QXK#=9)Rlh*fsv=24 zOPN&AJy>OeUxTcnnihHm>`&8r1%|P5e`rN0PQ{ax51yO+Wm`f1V6n>Wpp}sI+u^K= zryf07q3k||T?;MiFH2;96z7S9kK+7O&{jg6+>!tf9>SYY7PavBwT;9FWBt2ljndMvomOY(r+EYSZg%@r0$8-Un;}d_S3m z_Y!0~(*~XlqJiU3bc|&Y^PEa0Ak}zk<}0)S3_Rz>S|5zgVi`w9mw>TA1U*qi#Ilhq zjNCsJ`0jmSU7B?ca-z@!k-+d>1`>PhP%Cd>fOiz2YButa=6tFF3FP>ZVJ9f*&vJ2v zu}yKYdC8C|d`2GcFKFjHQjtxB{sYfs=s#f8?~v$Ua|Ul7@WIp^EmHpQeP|3d<|FVT zBSnhyw-yGVDqpZY8S5pufu?6@y!i&%x=(o4?4m=vdy%Fm;?rDA8r1o~gXL|`hmJvi z09+syJvr7`L0#{Wa=l{jm#{1gyZvm~Kq&8Tov!3Q}Dkg4T?e z^*~a}`ZzM{2Kg#$JYOY&CA2<7eN7DqmD@6iOgq$b=F;DW@agmk>1{1yR; zcece?4v@!uSgeE-tK!B!gHgvZqjb|%FJj5SbUaPf*zFOx%j>cgy+Vj(kI2q`Uj@!gVG;KHLD^Ee=W(P5A=9Dq@Q*ab_~j`PfX)&iTpbf1jNuQ5rK zP=ui`Z+h)e_mD)~1e=*4jTn!agS(IrR@3}3FgmphIbTcGR7^bX;P4O@imn4bOVU{W?L&;=Amr^n#Dv{kw<`ax zM@i{5A2`T?^xrO!sRc*}AHmUPq71q%I*Fh1NqdI3`TB z?+6%_gyjh}-`t+_(u{ODlHAq(30oyy_{7@d`lSlMK6!_souJg{94jOdV;Y+ef?sxcrh1X_ zYrbEyBLoUh(*cgC1A|-HvCG$7y`1ro8<_k8Ex-B zsDj*~EeK3QG9(Mn)2l-ck!MEN2IEPp3DwLP(D)I(<^Ar{KVE$mo&J5jzpl;w+_R7z zlq{^|AnJrihkeX`Vm5S@tCUZ-@TOPUQH+Ec1QaZloT{hUT&2IA+Hk7GB`HuHf;(LKo4{4tV!ggRHuHeGKl zQ8iM$by{cFVYWW|J>y=J`J19huIjeb!F9InOZmiC$^G@`VpfK7^t}{JBDo6p+jFSM z)m>8!8Z&7i%SHTdT&H3XdfEyMz|?8Y0t6$hg6V>Tg+i$`8vo8j;#Wz zg!eEALY-^*k|0AdfZTVg2-~n9$s)ITtxS| z611@Wv>OIW5;ho(e8$voL*CAL#P}T+ont4fZL8$MN88vHqjghKrS%JM6=zA=`GawXDESN2 z%Ue`3W%7;?w>0ng?w3(!OHCL^v$ZXC^&-A+MU0%M>K_g4>&jShlm7uDcb3czb={Rr zdh9BO&fD!jTrJmK8Jtcd=yvnpK4Tg9A)a>-(s#yl+J7$fB9_IeN$P7FlP9I)EL_zYo zlqJ$)WLR*%M`HhnIH6asK-tu_8bh?*3wGQ~lR^ABLCh;Wa)!{)UQo4$Y0I9vghzaF z7GRbwaC5hhN#-)TU3itP$9@Ij)IIE(-F!$t{=*Mb~S5IQcSw)nfi5DWzz)KJ!}^q**}7m+i#KlEhb$i*8;9F>}A~B;`Hb$h;ET;F(I2=(^$!> z&UWEmr1v5TQe(fdu4FxzvP4=G!2*1!#C5C=>sQGb`lp&`#=UpIMi_qKCk`?l|8Efs0K?wD{B0x62+U^o3&J!%qQDOtiKbvb_(uOzTM9%;8}}EpKn8Pp zMeQa$20-Eg&mo#(bc>|LXuJh&SZGB5``Dn&*I};?x}Zkv-Ze-oFHHdv)$k@TV$-sP zRxO56SAr){Fm??M_JM6X6pWpHyKw_G(1eT?jJ3S2c8NQcA6nX?(KcR+Q2hw3rK8M< zcfeRa9jjuIUNKkkaqVTkJPsF-X$4R6oWF3pzVflkarwNdB8?4|o6Bw;A?|YHib2xL zo=x1EoJMJ_T(h-`MQHyJ1#KZx#b%B-9=)b;_(XBR#ji-xO*3X!Wah>J_cr|>p8f|; zwawP}mnVM+yqtL8{)Z;Ca@Bzc^UppXy#HZ1KdyiKyYoTgtE)e3GnH*e`FFl^7_73= z&(d7)e7*#l`sMdE1`B!2b&Qpbm)P975xA~3oEq!w(voF;J$p+md)};kDhQy=ui`{v z*#>4WF<2WQ&JJ%GIzn%6nJYTDjP>EvJ7qKBRLv8uuH25*Mfuy#HBDZhfHr@bgoj-7 zx-wF?Kkd#lgTk4@3HUoCFMR*q%QKCk z!p{9(G*F2*WQ{G(@_3)MeZ@sD=izbgK*_>1BndQ-gk$MB!UKc24I zQhQrxNBenEJ`DmJGAgnc`UeDIqo$a44Z8AaoADud3;yF~{32~LUKE3G#@GJ38NY#V z#=Wu4_|~7B@nOT2lS`X%O8L*tcw2U#G*k1cVS9F&N zgPreWpJr+U?0Apy&WJ^x>Q(8(fRU6Gb*FzVza({QGxK?-}*|-Z<@rN*@m6 zY|let?bhL9v6@)HkAA}lP+e}z#~y{9^5KhHuzl#Gz%%{Vp(8)DPrLsHT;~L~Mw}y7 zjgLUi0k+fjN!nPgk5qfBzWAr*>)0zoTy3-K@WP*_&{wo;dpf~7b_@GuzDT&hNsY#ixuP?cH1KL zgf6Z*7O%J&jzDef3ELPAYI}9c^6^5OH0!TuxIFX&EP*dBM;;B%hSJJv!Q z{Kjl8C~O(Lc{vR#V2aC+U==V%U4qztnK;4%ZS0w6kIFm(&Pf&`UIKGVGM(&-JZ4__ z@N`-GsiGrTXZ!}Dwr)t+N2pQSg>ThDx{D@Zj}U_I5mfO#0ymPb2z4<6ssrnw1({0y z$2ivIK0mlJjSDL~+XnCcAu*Giu?t>Dpo(o~eYoFLE;hJl1RhY7(j@6Pb3e_7+7D+a zX}Fjn10@xEb=hxvF+~QZ52(C}ftKUE7nV?(004}~xSWA&>|?`OBtevE{?IMh2p>A$ zt3aN87XsT3_>7graN$K4!Ht!mKRg)I|3;;*PrvIjbjbFB)o&K1^*L7B9v`|=57veU ze?|F|&Sr>)$RyjqelIYoW|ltb?KygnEbu(A+hZ8J-~mu^P&itoiRh}}y14lrlh0mP z3d!Dj#m9)}F>d9|RWsO^a=oJ`L4^%FErdzxGuwA_7yg*##O?rs?I{A>*v?Zo#Bf|C zA`k+pLrOWDp%&uCvI)b6eVlyKi+8qX91pRUhTt5>f-~-7yx%EFe%8ep+2>T*s*}uZ z4$bVDVfc<%?RYDe5IBM-1a=kPg&y{dU3gv~=JI0rTZBC7J+IIT}Q3|+xy<$Q=tO+~BD2Yiao<5MJ2rHdSa+3VqU z>v5S2QGD8KpBjIRpSQ3H+Ys_%;U8a#&6Qh-HT+NlTtr8fbwcm@67Nu;h*A1w(jJA_WnKdknp&}KsUEvI;zdf>&k|FsDo={$JIvcDy?1|BO_g9zbOr) zN~_D3#zb{XB?E6Nk95sb#roC=xA61lLr6VOjWlDUx-nUexU5tjS3{v+ph%a6#NuA* z-#9wxTU{|8#Pz}D#@Zt#P1WfeL*<0>-K3pOL&_R)C@^00lj}h17|$p7;+UCd_@0bNRa-_|oenRUqA)=B;ihV@ zo_;o>b(63Pb(~-EdU!Hb^ z$?#XrO~io!eq6k&Dx)?rO;c?Ykt(TwD)s^3u_oHk*@x+&A#5q_L9%|3hm&?z3n4x2 zh?UuekK+fv_Bx$ZZfP(7EHlQd&0g*U*C7VY+PvJ69j99~b$Gd9w&G-VR3)hm9dK3( zAq|axqP&cIk)nK^9o#$3F(Q%?zb?$b>*JXXZ7iYbA<`jTf2+&4u=RRH=AbAi@6K7rpep z*q<09-z85j3=fcIB7RKHPBq<`d&22Ty*o6WyvsOVYb>}!VN#wdMID>!KSUypgf&}I z#}1h%Uh^xx;KbHp;Oe4S?KU^dax=gGkRQ`tnXpIi60Qd@a#<%TuV!UeYx%163di5h z3}D=K!HMt85?=VRB)TDta0#6cCD8BD*eeqQBP}jE6`V;dqd}d%0gMvXiDk8g?>fB$ z7$q;@w3<(-b131!sYmZRLC+!*284lve?tG6Fl7c-cFmTrc4deBSog}bnI$S$eF6w| z4k37>>|q44l-_~UR_S1ZB%KBDzeHU^3HxRLk0xN=p(DYtk7)@er2hs+ zf33|!he8RWgfhyM1v(rG2hS1H)GU|0t<+bCNI@gS<9apmk8A3Cf)==3D;Vi#WU1eF z8`&bZiR9|slVlXT|%h2)fUU$c* zE*qa5ytu_sO4Y8D`=w7Pfmv;pPz-m0UC5VLs^0XxtA)bW(}=5aswR^mANuGn0THPC za{ms2*=CiHzpCA_nr()gLcZLOpdqH$3i+$p9aHzdWy)ljwgWwKm#|lNt@(g*nGw7xe_2!o@OUl$*pDD1P_t*r{rf@Qt&i4K5-Ab#2eVBIA?>eyM z&#zR;Mi0jlT=}C9Y|*^2r!n*OD~4bn8ql`hAk6>(vB!4%%{qN?O5|pAO*BCi z(b!4Pdti&rjXfCCj>mRNOAIhn?Zhv@efWM#867KeWaCs-Ur z{)qS=!^;k$M$rTpG&hDIMi4u&MF<^;A;>Sgfxd|%C?d2VvhJjp#6z?g)Sqz8H$0R- z;Xl&HX>z15OcpfX2lW#I!bT(d66HrlpVZ zD4*%PzC?$SVVS=G|A|Zq5QZuw!0j6(`M!EpBeW>l4u_R$1^!3ywm(&fj>f~XKAZr{ z+JbM7A?lR?%UTOHiic&r7_v=UZ19LIg>VUu_(%)s68uN{--VICD*zs&4<6AxUz}u# ze*>42qkm5ECb;MD!3`2eL@Ew3n!Wl$+_XipvQ*`aJ)4dV>F6VpYAMea+p&%X71NQ> z%U*l81eG@Hd$>0Bg;kKMN0|E7*%}4L+bZx1Qm1b3G2(qZwbyp!HnCDpVZn_W*HKEx zQZGfGkB(jNn4h&y5>ZSnQlO6}2LA@PcX5T`LCMbfJ%b~ZQa0D}}~t-p9%Ot3HgP6o*X7^Nl?)k-3W z9b>YR+REBQ%2V(!Ma}z+Ip)3JSIyHFTwD5!h^a5|B?Q8 zVdU=$NRVvJQdxAJHgk=ce+|zC+Wws6^$6y-RxXaPpo*Wqv-x`IdaJpu3p;}=M>Nhe z3UKNLiF-wBc5&Vm_ZqFMS0T?+4zd`>jc>D>o7kpb*)geT8&)l`Z5kNNc470lI6}Q#j>Bz^t+rk;xezlF5B{B5Hh)|uzi^YI-5#h zV_Kcy8+x5Zlj*#aYFa0Ef^W!X^m{rS!qh(?NTA3A!XAO%wGwN9=Bt$$ah;_iCgISI z)e`=Th({fCmhVbxZIrwu}8+_tUzy+wL!F%v|sU4WUB?JtS*!@ogdg}qf6|yOCJypVi-pBRR&=%T^dL^fX-(S_Q{6+Vk>4)=XIKwpz*KV76XIOV`=b?YLyP} zsNnzi=!>gSlLrJM65v3(tQ26%bbb>E$0EkvXs4WpIVOQb5nnUCGF~O&bsGuLI$QEJ z=xF7Le5YS}`TUq->HNmn%A@U*kyaja57o)lp$fYL@@)@R4&_$5Xr3vWy!p&jaQ9Sy3es|BDwraCvjKhT)^V9o9SArBe4clk1@t>t=9uBG%>FuME^ zyrpWWt>q2ddj7=CPG6=n8eqdG(wNCqR%>8daIf4>8K=|;pcN0{EtO}N??$z?l3`mh zCM{E`ge3+Ty6eF&z<(fAnc){wQ|*vKO+9eFuFAh z7MM*oJj}PLtz|}&v*BSLhWb2&n;I>I;1etE#$rf+!WNhCK>mdPNdLPq@^=Ne~HnbmiK=hGFlVvNYoiyAaH83495h>79Mv6)7|2dUMAVGrvgSx~^G|6P$6T9yLyt ziXo&mwBQrIWp;X^mOsyjTO@naZIdu}YWewc@;%+R4^e1d_>96U3(BULF`>}oP?=0T44cYk4VuUuNczZL2H~*vCVV?yXenJeV@9`CjeXT05Wj=b{e|$d zs(PjK`ai%e;kNZA1vpT~u*^4Vvq^#UinYvytv0JLN`wKrBA+0JaKErqy3*H4I>`oC3q=5|6jq#-xg?_ zcY2vGEwr?WOf&dvc#6H_=K|Pq2J<_?0$&6*b5?h^)2~E!yqFT99$bEVl4N*awuJW_ zGSaHpWc*{&vzHl}E1rY=LvD%7+~CNBbiDoSP^qpFo8nZRd872P)}9KtDMe!ruT$$N zmIm;0Dv{T2fd)Op-c5UaLc^Ffj~hv;x^{B+_=M=*eGczjt;LXjR4gLM3-s3Q==8Bk}gFE<%{)>qE(fc<5nN-Bb)8oT}Mm#6%JyAD$|ISZbbQrS_PCY0Bqok|p zd6!5BMJ!#9sl1_=q#Vw%^#5cR}SW4s`r#YK<1xgFQG|A@Dj?8 ziWCuugj?_uimrbSn?rgDwm656FwoT_6U= z8wOGa6)D7Cp&z8V)gyzKkIL6yaz$JV_4gDc(7kl)c6o za928R&SrdHt|;DIp6VI?vh~RuEv4{;>jKKFb$x?%&G{1Eu>KM83yj9Tf=4iquJ6VS zcxiZJrySl%10;2}oj(!Y*_$b9sAXP|fKkp^=%OYs2%-l<1uGWZE!fv;C}^g{WFDV?hAO-f{CK&w9-l@ zRO1zaxQqqmd_mZU&_d-aP{x3px#;CjSnN3-%AfEb>34x}cr5jycMZo}(VO*iw{*5Sl85F!voz0#kB|sV3o7A|E-HC& zyR{=zv_x*)k(o?3=FDCgGtg_(vmcp79#%%M>e|-N^&Sa;4CwjW`K@lWW3_BJ#+LA9 zI=^;T<5smak=vOp%Bz2YH~bNC8xvfrKyX`L&WbP>@iml?#AnK&LlL z83Rs%4CqifJYE~OYNo-P_F0TaIiU0U5*#ly7DNvS4u za{Ks(Zer0qevU5zhzv{An54H_kI~|{gyX3HTf!cJ7@tEs_{H0_&TR@+N{q;T%g60= zNQ8zMGdQ;?7?7J-DqxT@x~>kAnt%&g!r8%)J2;h(2S!;YbY5Q~!3&%C8nD8bhM;Nj zUqsX^CEi#X<{Q0<#V6@4E`VR$Uz(nQcZr1A0YefjHe&|RIMBOq;dKBkXI}x2KJ?*R zf++?uqP6w#E-3*6RM1s#3HxM@|6(U*Ow6K(Ap9>}cHF|^gPy4;@S*l~gyfZ&?_Rlr zDCI3-JEmqma%^}?GvS!}ngCN!fJJN*iwz%cW$)4Fbdmd}=zS`KMzW8c^Qeh0K#J-= zs0xbrcK1yj-Nd5k-uL{i%UrP%c~DzXQdGexuz7maVRkZqf$gZe^T=%e!u+~smNDKI zO1)0sk%!o$IDl-tjF#6aY5H>Uq&1&FLX(!#!-VT6%U)+lglSpx{W*-T`2btp(354W zpF*Up3lf^_XaMVZ28jnvc8*OfLTM6hS{Ow*7p-Z4XR+$TP7uxT6rS7+5{)dHOLQ0s z&(cNaMKS+Qrk3(A!X(or!ZMd6OE$9Dq)F6#`#s#4c@kb|aMd&hK>Uwkbo+Z)T$dUN zqI73`PnOZ44;x{t%Yfc)fVcR5?g%0wQH{3HvCW0zh z<~=DV$n&;&EVGgEXIb*=bs7+n3L!Y>y{k1;ZLv)jDJD3If^YlZ_!Zi<~!d#7&^ z#=|no$h$;`kqMxX#!M6QZ)K+K0Ac8ckFe)t9c7g4X1BPsB$@`FKk+|;xB2~h$nS~o3W%0Eok6|GG^$K!%J{kO&uQ8CHRl@zY9ZB=dTU;w{%GA zxGuU*o4GWDzlI^H^K-^`Aei3?7Wk|~Qs>9^+11Dn3YOFv4J>4mQA8EpIv}Uha2Znf zlow>O?Qa~=7ARdgvQWg9+D3E?nRr;@Vn9b4Iu&l;#Cr1b9JRK_xPI((P~Y>m1#1Zs z{4Ttl?7fA_snsToO7)xrE?Cm1Wb8W%Ngu^h8w8n}tZAN{+wk6%L+*0T>AoMjRTp26 z1&N2(TpgPcT^QXRN$wpZNo)*qecIgjPOqxyQ|nkYcCkfohu1tPF0Kzcs@D6V-B|HW zb?nB_>Umd6Vu))Y>1a_;Pn}hjy#Uonfm)v%LYB+%n2YD#71URI<4|u*_vpEW8plHp zu83S#&jWK!6(LG}DCe%R^BuO6qa*R}gUPHftz8AP9c4sO2F0jI=DCrYO>H&1sS%Xt z6-BlEpL&McYi1+*b}>n0*S{|bnw+%geL@-k)czqRz%XdV+vG^sDikF>#4ddXX;IRw zg&d0ZP*iKl)jT*h!74cx6|`ditd1elD`6a8aU1z`KWFFsX3=}^vb$${Xs?CQXwPT^ zu(il~vA9^r`%4dh7OFqOX9KPfIbqo05_0PsFthjV4?<$vB7wD644ZM;cbV`=LxMs)qiIMg?HKOCH zB2K9MkQh_wZLd3mfr_)bypEsA;|{h&V4rNxM=qUri{$!ZfBa*e1`*UD&l678j=MhW zeHa^S1d>Zjp1glw&9;ovd`eaklkCN|=ToXF<5iNCzN|8im|N8Z!B{nS_n=fH>fzym zlP713W0Q?~*SnM|5=Sy3mA`muRz$fPF}Yj!rK8dW4n;!VSYtKYa)bgVAI0QQU7p|= z3MG3;Zd}yw#q8|E*i;ZPCD>>uN}MJ)FkZz*a`s$`a|40%@y%dG{G?HyEt5ICD!7hs@e_cJ>vY_~qR;vN?z$>Jn`$OX6qK99QNy&({d#xiu zu0#u}&CLU^lBzCX)`-|;N#zH1vaJYue*@EY_KW?M2bA+hqw~q2vv0kN#~A2r25S~h zfYpOzQ9oLb%vL&h8ijg2f4Ycp2T2M~;||dbvWDEoI!Zc6Ukf zlQE=mkZl=f{-rO^>Xv=CcbCh6DMT)&0^2_nhVvniu`9leXd6Hvfi9vaA062&=T`*_ zu=ImSJWcW$ z=k#Q}LP6aG$7K$`n6xgAka2x;#%4&|c{B`b3j1x$$V@J&?oI||1tw_FNcyZHZ3F7oa=oygd8Ja%^V`A|!1GqTtRP|d%@$jX0 zFOHJ2e=}$0B&!iC)gzVF{2+Z}DqD&X1__U!A1LP^BSnK1U14QKo^V(3dlA$OngPVR z6);Xs;2a`1lrU>XiE`z<{QSwI9fm3FkH8g(F{|7I%|Z zxnLj@5>7VD0-Xo&DdeUpIp)enEQBG6qWOu<#OZw3+UCg#OP%*=az?f=P2#`>eJ;oG zX$pQr9yfv|ljIOF!_etzG}=0b<`qPub0+|qh_54-@M(s~AvtH3aBL;K$4u9ZJ=9}A zrz?9Di9KZQm2+J7C?K$|7;yp8v3odKcxcXnDV!XJF@tr@R5{zT1G*WiIvgmrte9|N zp)_F!dh829^b%z5#r5Ja+}GC1l`z9?R#k^_>;xq(8ufUHLO5IvZ9vf`+=)~~%au(r z7VcsBeX)g;ZqnmJt+9nTnbdp`7Jv`F&iHlk1(P6JYLgk8iiI*CI#nzI4@&O zGLEo9gRDzs@mmOeMrdk{fHGJk*E7ZcEJT`MG&_{8jmbJ1D`W1p!&LSd+$w~}-3A)@ z-zz@d_#s`JBfr_YbftU7O)q31SF><@Ry*GL%|mFZ$<)SMYGNIp=Y?ik#)y_~NGR@> zCbai97fOl|3z3evncKiJ(P$atFqog}bxV5~T7xDfr*o;_C%op3v(ZArNV3Ls^^$9SHiahNF%{i>Ts=?8ze@iGYZF`yRYX40^YdH-R*~}BsI^vn(K{H- z#gh^;eZ|8*-tlf>u;MENjC4|hx}SL1&>ios>#X<&0i%$V@C`7_g1z;j-V_Q!&6Sa) zgxgSlx;fZ8VuKZ*ETB}96878_591H^Zegv&i+92`Jo?u^5`39}L!z?nS!~SPH!QdeAu=!x$x@932 zkM|v4zmc24{2G{e9n{_t58D>v-Lk{#tK*F%BzR9SI2+>o_~3D^N|mT87FFd)E>O!2 zYPl;OsWfQusIt7_QB~fy%Zl#-cVN>VRppQHu?!?ef=!{D%J%}17a|OpIEXM{_Ngix z@Ii!kF_@B3kjS;9)R-2?j-MD)$9BB36960aIE2 z?h|}ehL2T1j1&(O4E5eBX2oX>n7X6{OGhnB_5_5>K!3r#rGUA zEnsf6c$ihFcgtQYJ~CiFgSCM11VK_(eDu5w=3QWIjCfcu$dR_<69Y^iSQ{(uBow=; ztP$*!ftAF|5Npj_Yc>q)L6hap7ggoHE>$rkQV!NHFP(^6!`ni)26c<0EN_OvdPz#GSJ4iHB|r^L>2n_?!=a|U?SR!+!vp-js=#}*LF>>lghfX0SX9*> zwf*1ji-(;F^Q|)vvk(mcwa3<&vLz=tvL{E@B!aVHzM^-Iuczl{Fy9G+lfYRJ5psOJ z7+`pl6V@h+hb03~c-Og$@G%F7cN?^NkF&fnQro{aMLetmh>;Cid$n2KoKxGM37C(- z6OA-z`2xy8ZNGXdd{==fu0g8_FdkqLV3vjZKE4NQP>1D>uiF0GY4BAI_Z3ZS(7FVe zJ8Jv)q{He3p5z9tO29;^?XLlhJn*D7Xl>DDd6T5J|3U_QRe>j?LCXR#Szyou@i24X zdDwtx_ zHRX>dtuEJDUPw;Jd?+4P2+a8nTEFS7F||)lP|uQ@@pAOpcDwXZ;po{p>+6D{&TN)v zCduv<3+az~j$|I|n3j#+t%wAi3beh=>6kk=d%0fbs8g|5^l{ZM4&-d(iPm<7GPJ%w zyp=Ubu?!8W&yUaDlZs4xv@0qoN7V1LurM^D&gY&xG&dPaoUCsipP8Pbx(DVP8sCOx@v(U?@@;4>D4_O(f=?L2htJYd>NnEzhdu^jq zb?ERvE>RWlJoT3wJXO>%drWPQvWU#*F3X;U|1%^O5Oc3Zma}m$J~a z;4!H^cZgD|yHHw4a&HMb`?*Wr(6+B7n>bYEEY95AUrUZepqqAl_`v>O5)JqS!nbta<*2|BR zXp#$>w}XEqQ#)3&1q0dEt$BXx=-jJ; z@~v-ngEvW2@(TO%fgm$H>$NUFP9FZL1n-B3mO&DnIoqGd>5qv}-aqWSAwhCCXmbnH zhkrphyu(!@{m*WuW3o-vrP2DMcip2!a%L-b zn02hPG_5)ti=NW_hKz)t=QJ=~kTuPYXex*QaD4K!gDL!nV|V#B2UB{vz%w03_Dn@I z51-fwzv^f+V(G|pf(^O2H#bUf;>B5^`UD2mJuV#4v;VNkp{wlpK}MuvZtgNBKO1r| zt!jQ6dD`k0`}czUGI>$b$+DP)80q#p^UrNuV|Pm*u?@%MRQ$HJuc}pE*fwWb+#rXa zn&qL0L8o;!r!HLS%lo*_=Dc>DZJR+d3WO}q@(Q{WfN-$+hESA zjk^Oa>Cw{~nNoF((Wf-Nc@$C%Lh2o|-9b?RF;F(zQ!6mmwlZ<{B9g5?TKFvW`Kb#Y zVpNOMHqx&9*ZZ;0e&IM}EO*#{3>C}ic3n3sxjV09TWWS$CU0E4Uu6EQV?fJnFZ((t zSoV%=4xcwpZ*Vt87$v_nvaIY4f3KvE!3|4=9l4L8h=CdE({I_OP3V9iWxkEV4NhK$+vQ&{zQ(AZQ3&% zSWP^tvWF8~%YWNiZ^($r_|2ul&+Zd^Qz%liU?ro==e|z(=gBS0C{j1tY~*uRv{&a8 zrv4b|+1#rj^gM2MDA4lwFu$i<_$tSWCbD{_>#f>`hrD?&rUHh`9`a7SaL;VL2zoh4 z(rt*F>AE74=kwGbT!0TMyK(C1H}6Rf;G?Q^0e`^D6&GJ#h1w;<9u!fes8}lF zQfk~$ktXyGKTr%qMRwn)CX|7-S&!mS31+*v-{UQ(3Bc0Q`YiL|ZjMN;XMl96Pj_q$ zI>CcKh&~ds#Yf}4T8>t@PtMpX7~GRu#k?iO($ETik^dWMZH>0!8-Wio9Ei)Qp(qdMj$F;oCZRF7K^%hSD z!FL{|p(a_eQyvC{u|Mj+7@CeWC@2n;F6-o>L{52G+x2eM8Xe2yb&qg4)A`Qvc~q87 z%o&A@P8Wxc*!KhG_gwE?0hdXK9IY!UFP)UkDh9W8#5TZ!oMJ{bL=53l=5%bVGv6pz zXwe-mWmYywc&3mQG~C$WR&u`4;l##qd}H8!(jj}i&Y4wdR5tZMAva3Slviz5E*>5OAgxpLoG`y29&j#R!gPefx&Y|cn$eAr?b%`~=@vsK2{ z-OLk;u{Xa7)@7d5?dkV4?enl}$jFhZSV}dv{?|xa=cOret;a=2vUxIQikUy1CiRo& z&8*ZGYLZ!fWyyWk(Hg}wuO(``#SF<8CRVyve29I|n=xfGxVr~YJexta8Qt0>MRn2Q z?KISS9MdaWS^n7l1oE6ByOMg!{(0vr<8xQsk0NjZzl?0!LgF}4X#o$pz%FNaY~|ZM z*Q>SA+~~TI;J#P!=m2~h-(7bjUhQ>7jg&*&LCft1y9yesC-~seL$y?TnenA~Rcl-9 zJ6^bWu*o?Dxl*{uZqVAnpbs9vgY)VY)?+JAUMbuSVj?$0JeJ3EWef+na#K{NmddwW z^1b#}Oeox=qN2%|2SkM4DN;yQI@)_hIlG~MV$gb8G`8IuC3QE(pOfo1v+eU7Y;QlK z-4j$t9jSZWzsjS}le$%VG=BPp-T|B5ehOk3R5$tIhLR6FTU<9LK0d8rHhiV<;}!S) zNXf`5gR)bs<>uB1RWZSRKQHSk(+>j~KsbJ>sRHif!YwbfMqh9tR?Q#kKYqykvgP^3 z%gVdp@7T=9u(zXz@tDx zLTf>^JZoGAbIF3%Q-rh(n~Rs16H#9pqfuX$`0}OXcvg9rUPm^WS7y0bAMrUtViOGHga;REiP?vT@L*vrsduy2?jhAN zlU&3sc;n1?{R`QK)8XC4Zm_rwo=7Hm>WjapgqP|2(k>v}GA~=bc8ou-gDuhh zAg@rI#IOS)Z7}A8XhDqL=sm9zMRo)^gjRi;m=0)-jWN$+_4AwHthu8hJWqhHz6Zd*byLI<|mw(>wBt zOWho``#{K`J$}_=_=#D?Jz4ISAR}gQaixMHxMB{sbn+Bftd*bT?hy-44#=VpLr0IY z$E96k(L9~GaG!4JFDzc((Z&;3=z1W}XdsUDn*AS-$&0Kw?Zy`lI~E{IT^`FmZXcCK zhLM>`#3NldA5khVos3f=>x8&7&C=W_-oA-~ALI^gm?$5B#jBl8B z?2r$fX&!FaI@mHyjzc_Vy7*@D$ESOPX1c4D+ZtBz75b$~S8~VcEY2U-@yj6gS4`zU z%tE4%eyo)!-gavR)8+k(`PC#ZJ!D*6U5`$CtEfxTt`G*r=M~-o`xncoN!G0|Ho3im zNmHGEMW25C@c)H?a8wDm)^u1+@(`vLRklgA*aS?ZTchiDF8&U?^|hnv`~03J>|ZRX zCdn`*?5G6H?b$FtD*R}A@(OS8m1h68+usaKbT+_mt#T>hB$1QX7#y4+Qn+|q6@vpj z##AeyzB5!qsH(ps*bKJ)G68}~{w)zJyfw6cIWNesr8ey78jB6{(TG73Xkn)Npm~Q~ z153=g1T3Ck)Aj(j!b7PCTJ2lHVZbJH=%+;j#+iqDhT~1lDE|qb`pMp-WsY+QwyJ8UJzc;yU z=^c==L?%V14*04WSM=%4seel#M`QdC6n{rR5Z;C3XU$7lvJz8@s?xYih}(tZkW04o z2D|ApH4kuV=-Q<3dvq@00H<}zdy`uXQ(q^2GpN&jbS|FIwG*Bzs~H?m_q?4S4L(0) zaDa1|9wO@ISD#;hN5G_c_csU-RPyhMc)zClEd z=SlNPvHFr#h2wV{A_`L*#y%Uxog(uUxRjWC?BXg7S{)ZWqwvmoxq0>&d3{Np*Cj+z z@tOZ;WO{70GHBH4(N(frmNv3ts7U#_>P2*-gwiOrBNRaM^2Ag+zxTCu+wetEmhhr;5M9?#D7MP zwxeh_GXd{D!rN~p&AWVS8NZ*}rH72GtLxF}3o2LCt|HhagW_}2g@9YjWc<|X)(e~7 zPMW8Ag?>e!e*N&DCYTF9=A@vC<2N1lQ#*tyMOAGQ6*dI}>9*+Vo{!%xV7($NeV^{L zgj>r5{nQwSu!Tv$+@5_4qE?2bCnsG1PifX~zx~a?RA=9U5W<8C`sTBO!NCb4g@w0Q zF*v|qOtk{)IYTu>r}{gB&0yOv6Cjx6-x85@K_lpwvjT5EzmizCur(I@7N8M>B+$Z4 z_d#>FfCiSB^9fiyzozX4Xu3HYNO}&H{(&UIn-5k4Kk3TvgzLvDklFJ42X7R3^ZD6A zLl^}JZ$3ZfDJSg_t*P-bUK%#JY1(_2K2s^myBpsjzlGtNeTHxWe7t5kbWJ z`&&E~WEtO1_g1~gts&fJvfq?>+3Z#5Liq^Yx^ufsnQ2!~wtXF)qj1s5s`*s8$=6AX$Ylt&MX> zJT7qWnKk2S!ZVhg!hI6ZnL*ddc1GfR8_p%n8ca9;C+(h94l(%ZJi-XVZ%O%~5ay_r z|2?1xBOmnae6{R{GXFj;U)>vq3RwSb4B4ST=-Dn8>63thfZ&?kPA`hkt5Y>qnT_X3 z2>C5q6tugLZr@2S8OjYo zp-I1V`0{^VzP=ZFA;o-lctMle!JU&`V+y%};$8!K@9bw1?vbnIJyQaCTa>M9RDz~% zH;;9<5c^!Fr*z)#Imj2c=h8;r8H(~8WJq_7lBaYgpK(Q)bCW&$q^|SFinyM@JdR}9 z(b1~rX`7~-#znbImwQ^vl2WqY<{}V5PJQMv9&PDojyZP$|j{~*S+NB1!?mCn%UkHC^_`j zTZ&~$W?&0K$Rl5AnSAR!`Ke(dP`I6)eu0f5i1qvg? z(o-?xQEw7IjjynT=gN)%ykt!@)!o8w1{qP`U+8ml{<4d!RaRK8*_X6Eo^f?<7dE|1 zKZ$oze4PE{1AbO$nRl*rPc!q4d&ETk8 zUt^+kbAHImZ(KvwbTbsvJ&yX0;D*I-5Fl8neoMr~)yLd^IRSRRmc!(|Osb2d(TG9# zXkljfAY5Z|Yp-{}jwPE#v3M?L6vK9?mPG`~L%3DHl`;VYOZd;){Ts3Q8x;tn*8Z6r z04pB&?dYGbDg?dfpfEp)6tMlZROu-=<|R{bLvZb+-(K|PgumuR?c;I)GkeJsM|K3D zU?yp>t7WC7hZ~W^A6R?A{|nzc7tM-@xJ0wb%u_`^9D4WKJU+x|oBA|QZYY1joygd% zJwGA6SnBF}q7OxX!T=6f2`SLYY&lc0J7z7INyO9#!0nZl8ER?ESU%suH zaYdirEcy!syfk5dD}rEUi0;-tTf7oeiqdH;BD5N!yR{PDU^iW>=0y&T6(`d7ML<3| ztcA->ZZS-Kz5bg)oo)o|)~+{1cWW6O0IKFkgU=5c9N-+LhZS{`ZW);Q`a1$9%|*XK zfS{6pPel2e>LPkF=vMv@DL{THix6fN{RlK-oQyCte9$qSzZ~XPoVa0u#WP|ycAFMT z9hx1;u$=%XJfBkuqfP&Y!AoJB&n{)T3$$_bto4h7%4(~w{jRQ$r z4jj)*xiZ}=Cqo{8M36rcFgTs!o%p0%dXM|Cu~NRPg&k$!PX1Ih@$rb2u9-ygYQ$Uh zExSfa$+lao=~pKErRRsHNM21Up*u+?rLeIYkoiGOrnIe*~>Ax-_e&PB*|* z0*y^_L#@9|RQnE}~y8`=QLA zNsE#6{N;a%;m(v2hFI6P>^`*MTI-sz52r|~ES@a@Ce63(d+3peuKaF^$*r%k*26M` za_LC>ND@~UUBxnkMc+u;XDuPz6m~y8n&7yRyCo7(aewdgcP{@_oWA2>_%mz#H&uZA zwC4XLlbePPe3UBOnddc}7AH)eh_HLpd8F?_7)PO-VhPFI zii`MxeEavynZcfUJ62F^m(AWgPgXUw)*0B*nn?V{Lllwp$KNmtQX77nZ&B zka2Z237z&<5s{@`F$g|8cn7>(A|otYm(*x-+kr__gnmVze*N$}f}Q`B;=dCRxK6-p z$FQ*MAxtT%YEvp9_yoLmB)nWAC@jm+dcam$EO2X77W|B`~g z4>0nxS^TSr1GZ}{I_9Gh(`AI2?t^9+9MjvT@5?!tfW^}UYKT@ZFCcX{8G}0AoOAI& zpoGyr{jDUz5e!xXKk3TvgzLvDklFJ4`Mct;@%&oAvl8G4=4T5HVH6-7!Tgw~oYcut zbMgZ5)e`vdi36Wva&J_rzL@MZ*Gy!gdd^_6UGuAeDcNw&xMrs?&co)DW791M4)^hf zm1q|}YE3`Br+KlscG_^(mWnQ)A^i60=$ZE|9*u5}i1<`LskRk?|0y#5D5^!w?YhPA zTRXm>TPh>`q%5J}cEK&-lUMxtN1t>hueuz0mz$*J$FKKT$=FZD;n6^CA+*#m?Tc62 z;rCNzURCTYIfEyf?FxAnU`{-d56la4_#Cc*M3$rZLG3%uURD? zz7U|TJghT^vh9JQayB(Lri`y~YolG5(3PdpWt|#gt_GbHXx+80og6wQ`Jw)SfkW)Z z5*H)2BEecN)*gyZMn_bs4w7CbJ&-w$wquenKW;asCj!xP*+%{ zbz0Z%d|#?=UrxJ=R+l21yV!V4wWsii;gDg!U6^_-=}J^xdq|g4uF^!XdO>D|r(mGr zkdq-r%Dz2>*fl>=Gi}_fz`k6t7Ji^RRc`cg-6>z{Si4VFsgA~I@(XS|Xla$dBd{YqSAyC2ESS;Q;W zu(Yh%Lol;(&gi(I2DnSAR`9XOVWJGP7OMeqLD2@}6EA570pX#a- z&3Zz%*caK(U6RXfTb9Gb)7u@GU_d!*pLE*1TGaUod8+u$$r8r_hurG!aCsB_@TpRC z+N_V_k=wD-<@pKJS6qo?`Srb7jdO!sqT11Mfe?#^L)qYKbkh zB6`acA3pne1dHbQ)fjw^;0_wJE@>a(&-hqM66$~Sr7H$yMEULg3*S< zhfpC35-blWF}WQ)5m}`avj}$+F1|)=T4oE?pd%!x__~g=?YY5La%D1K){`-VHu$yH z9Am{*qfa))Qac=-yJ`j-#gRCId}3hNd5bhk%vOg*c=%rxxWLA_B-b3ro)@AL;y1-1 z&II{!|He6_-hz8&0xdTg-4L*m0Jkin64ZU7Ui66%7QIc zesSok2{veLlyNSUc32b>P5szDe+$_zh^o=ff@~>01*`I{TwTWzqTygcHt6L(MX@EX z&Y4r`sb%F*R@xJo%qRQAwT}|9)q%<1{5T~d$~mE{+&~*l%hB8#YNgoU)D28p?yg%M znEe$RY}EOjpSafdR!hbWsMZsSjsNPBhB!hz5vxYFXF%FKvJi$_?A(|50!!XX_sdvE zkUEcBhrElMy4^M3#b!hdXk3=KM@A*9Ml^BjNJ%d+BSI@jY%)qbVY#g2YwKX-o3B+- z!|$K3)f6|7&XeVSBC`t=XtqX@zyq>d*nLy)TkAAV~12Z>U+UIVArI z+`6gS*E@p9Nbd}l82Q>x9=s!;aN^{$&b+25$3=O1?$?2k{cBt1YDdYCkPn>qb_7%Z6t*~ z_)eL-=#zEE%J)GVxW^fSxmR$%9OAf{7RLo-#TSR8$|vV6jh4!3uV_v^FIRQCg zxrrS78jW|E$2+vUoVXprp%W@WrM%1QjB<95j!G>vWI;QKL$n)STykq;tS6o*v9;gE zGE>l0YxH#twgd#$y})aR1=K7w$MBoMQP^$vqeJ40xjhOU3E?eaw z3Y1o%{#0ulfm-kybne zD$jutLB}Qt*a()2`9f$y<_k$RQ!0}=VlHH`{-Gx}?&0;XMbU;s7DSx~vJ1=*v@44{ z1NTyWG#XJxTRtY_tX0v>kEn#mC!Vmwa%Q*e@mZ+6W`2Kp;}f=%e@4Re0W_uS18qv~Zw8w0tzYh3&ryJn0|HNe@Jiy8|pT!^}Y)(1treK9kWP>f* zq3MFbVBhoWI;5@xnNaHrEyl;K(AmqxMNo;4uzF;)(;p?k(D(f1-C8M!!G%@OmiOOB zyLPL{CRGS%PSeN^=q5R8;VI2*J9=8^t-ogHp}vcjC5WJ_G%#{tj2zMBb#sBkEOb)N zmJ%P8p&HR}T~|t`jQ7DuqwWx*9}C$yFv`7k?8BF&9A*~k`5J4@p}vn=DfLn184Zix zT5CS*s}=?K+KjJ3F-*JgI`6M|2f^6OXpfbUW8{-hSS{-W8>}@uKOy3p=$fa3t?jv@ z!YxpDa+7zln_pZP9s!Oyp_U1PgB#z6G|q*e(6tPQ#Ck$IUbLiXyRgayjS{sz)k2#J6~AoI9BE@YtbH;>sp*NRT-Fl>Wbm2!ztV|&eQZ=*+mlt3#r@_)|CLGUvbMaEhTIOe=ZTf=B2?xwjiUsA?>$@| z*2f)Ys0RcUuB8`_PVq!~a1iiHe)7ouvM%R{0Wr`Pw(9vF>8>z!a}KZd=2q{3`5sp-V3m-126qlOy!zAA9faqnaY74Fw%c=fk4+HX zIO9|Z+D5O+lpHQOB)GQr*X1cbX79Ix`#>eHKh-;7YtA zHWV#oFF~r+8~u1If1DWCjBlVF>vg`mJGFZEDh=UWll^aSp?+dl*E6mnbWcBxzqN?p zPYk_6;8Kw7h(z+oxvE#h{F6UEi|}J~b?b8_5^gOr6J~TKx4&Hm;`0IDE~CUUv)pu9 z|3wH6lR|KD#|bVQza-|L#LzGoMDHY|yW>0%zFdi0vwCFMjk(micjE|Mz&wFN1`qOW%v zK0UVH4L01|Tw%k_Pi*mQsr|_3?_B<=IDN;%@MqTeZ>j*H75PtS{!dc=PKZ}V>h~r2 z-E9H>|C?Y5;#k^`t6|&lgMIU)-?r-QS_ND3>~D5^>G8!%cl5W5pJ5%&cRhrRDcrh3 zgoC})_LB)8KMcEj-ntTHGN|}wU5l}1PF+h&Y_)i7mN9Qz@x!*=v7;kG@yNIVr*&2H zWUaQH(U(qbY>VDixWBf5yCPiNmeaLr*L@+^0_r9H(QI=Sw$R28vE~Q)9c+hWVgr_` zrkz0wssIqT*f|HcTgHv+YB)S1xd`*S`qagC!yt!rN?0(baoANbfSKeUZ; zz5fzALyOpk#hZH_cRVJ(ip1YcEt)#$dWxO2SJ=#w(&xx(=;{gQS6++$+jR9jv ztGQDAI#xGCc_K+;1j z&SFh~^IG;ruv`2*9s@fUk5zOV`l$D zoJ`!By}T#fzyyEOK^aBAqvy}5ipeP|qVZ|9=b~IgK{Xf2W@8jUV7#B)aHG+66tk{$ zDK92`3dQlyb=M(0x5lmAq`rgda#g-HM~o7Int=q+fUme$ldq8T6PJ@nAusg>H!__ejos_ISw&xrjd9OGA%Y3rmKJIekoGx~BkvWE(*EbL*(!2_V z%S@F`HiiIqb4V7NV&jKU*gAhp5TH+G+p~lB06h(xFS{;fr*OSYx=W^814$cy=$r^} zSFXPUFtEgkb(UxVNIp)~F7+trI96ETz!Xz^x)dO`$z-a%-XG&;@NGv<=(shnpBu3D zC;dJFOD|bI|NPyc-RMgG9_UIkO1Tg1p`5L?6yL85-3hz>rBfc}r0F+~OnEZy1Qad% zFrPV`*-viVM=SM*fqwR7+A+IWmI;Y0x_t-x+KS8C+?)9BY zbtp>&7;?2eF9Gc^fWl}W*i&sC$_V+I6@mPP_5iBJr*7BP0zf+hvcIJnvIh0tf4}>NB^%U^D1i`pV_{Ue@d@Cw<<_Rj; zDr8GJY--$toPTXkY^(<;FI1)%*dRVGRf`uJRY)mU?aXa}Bw)qSM{iH$HC@+vAhf`Y z_s=xLq47x%Hkq9EYS^UE!a}1JqEudW9VB4^6+&oT(baIusihKr>HK{uiU zBRVkN{g4KXcL6Y#5~KlRNemb>+Ua8`Fpj{0F-Is0j5$IvV9XKPt{#TM+z<>Hn}tj+ zeK!k?tyM8#oXL;j;`$JjuRer^ixGp6Nl6<3#-bQ7ejrd5cMAo^;%@&2j5Sm-U>q5O z0b>o-Z-DUz)#=YX0F19eF!nN9IxtqlfU$;Z=O@6$KroAo)k6RmBRUVDw8eFyMS*cR z|5sq_1Et|<>BB$%U=aZ0oltX%&}xJMFy0wL1IA3u0E~tBF<^WZ1I9Z-P++`36$8e~ zAxe34U_6v7m4o8qL_Q1`2V%H*K!pXN1LLGwVC;_q<7Aas&hyeNitNF7Tz{eQt|~>b z>Cx%7{I%ovd0oA#&P=z4kOm}LN)K%gB1cw8Dou~4Uw$z-ZR0)GK(&zZZJxA{DJ>-> zcp`A@0RQEqvhy{u&6~?zShEO5VVAFg(c0*N+#!(5S}A{< z)U}mNlYVvt+slA~*9`aH{UGh#)?3eYc4p0i-PXDG>muzx&IG*_b~9{6hJ(`9`Fc-= z*K@@+_b%6K=L+mKqwJZqfKSz%pZ5PUWkVet>{ZGq_0)N}IFlv=^K8Z(qr2@rpL3MD zCuNk5oQaXCx|H9$T3dH`L)GhOrQNHCZS8Ca?i5Znh$~O6-h;qLUoF<`i$Aw3cz*Co z#?`Xj==7f!!SiWX3<4gD^nLM9_XN-9+zlVYv$z2Sv@7~_)XM*rVC{buLGTK|378rM z&tHV;1Wnr$cEg8T8JeQ~HeY?H;vKMViHzUoI^FoE;0fK1gmp^RJ%jlo|lkrCmqHO;6*gi(ORv4cP4xjJ6|@qEWR=mXq@CR?U0s$V1B|F1mvzOpOj!+S_b?j6X5rXbcS;G>UUdN*ttj;Jds|&`b zD=^*lFB4E=v~}&KHCtj+Bc*aW6^w0d z;h>ph#{#y~PnciWU1bjyQM~UbA*dHK=bTi|hvB*=zqqa{`>V2Xm*MQ!vs2+3gu*qq zG#y4RCmeV|{P3Nd&=NQ9sYlvbvRhttyaSBvH9*-5*fqO_ARlI%gX0*{m~_3$5Kg$k%gQ1J!j^NmC5W6cq(j_!h$Dw7 zw$}4-sCt1foLj>|wY<8OS*7&^{T%wy{}UER{sxQ#DF2GZ|05K~9sf5djvi7si2N0a z(*U_Bt&@gMB2arJn4xnLdTXBx)r`10>d4CWzcv5e*01=y9ru+`ubakm%T=J-YaTFykvs1|hG%ql|V-w~kdSnXmq^{{gvZ~Cd@s}zh z4TnzHVIi{9d9X2ZP~~G_^5O7fqP=MMym}1;kp5K`Jx@D)KrMo zTfuEhf*r~g*8wG0he#y4pRB}|fFKhMsSOrVn=(VOuLIR-uJv#eR%9O&8-HmAA9=_E zf!X}X*cDIN@!Zs6I5sy75sd@a4bjtc7!W!1n?lT(7n^~NVwa0zfIb&BfYBZ+34tAl z;SdjjoT(5c#|pAT%k7tW$I>2yyLnh}3TW-Il7=QZX)06<=pvX`B4DZoxHlX8-3t-6 zC7>O@ac&=+KNHIPGXbCz+JhdRLDVZ1PCZV9b7F%{rAGnoik96~1;$K_G4oi-O7zG% zygkUq5e|{npEUv^w^5ze-94&C@K}19ea4}tk*RbQQMp3lRNboh6Z#?M%E12cSYVS; z(h2=#g0U`JL)Ayb)u0lPs36dz4<(DPVC^P^Y+nh--l7W}bK&$^z;TR_fUXtr$Y#OG zc1+aqGOp>jP=eT5d-#Q%Mpd}cT~^wtqDRE|Bxhc}{ zKH}O_9o9G9k*uwEpGrt9a2D{*-#gX0d)nqyk!wJf(<_ln+K0>ZMp*ZUH9Frj3-AsK zP@Co!LLLTPnaQ7-Y`*4EABtCUl}E19&Zv8nU!+}Vj~ulxAW>Z^KDl(dPM)j|7Hysy zY2WVYqoR!cFNASR`u{@EPo7#`@yTSr6h5M6F{_|-5rAT!t(ImWy#wl)5 zJmJE=PYUl3a!Y_nM!KlzYE+x4M#U$I1XvmdJ-faxGh}E+6YQgL5`@I-I1yBn(cBvr zgti!*4I$+^ZpF@WD<9_NbO}1Z?F!dmZ8}(sNg#6Y_|Pl@wEjt=^RG&8fGv9nCD(DP z^G$#o{wD)lEKZfMI1bL^LSt}`|3EGKbj3!RAa)%-U51W8a?s4H#wO8H`y&P`z4(+5 zOxJ1_Ub$y$Jf1gWGZ1!B-^}}6#5JutmOT&2b+2np{MH0t4p<%W^s|q$M1I>+4Lg^4 z)to$SY%O00^tCphB|#=`MLR2kh<@hLZC#u^=aGQ-NAYIw2$U|Dk28o}$4W=TtH>a+ z`9sdsoh3m7178BgGKuN8Ze1xXG`r%4>&kmGXj5qBIy3AiMac@9DY#xe6Wd&Cqx7_7 zX6p9na;8AfRGlcd)RC;S-m=J|EhW{gcCjt5K9BIuBn^=^x9;8Xct|&J+=O|zaCRF`Ke>4f?3lHB z`CJxhoo}p0rADGw6DA+bW4Hcka=Me?{!Xw3q{`Ba_#Xri#N%-r=1Msd^wCIz$<_pu zTR0rkXV@-UdlR=B9kC%}A_WT=_G97RS+N35fyA)*gZcSaKMBnZM1S1($v*MDM|v}4 zn7ImPl;;MM-~=|f6gv)s-#=xax-Wv&}_UK3X1Nl`d` zC*Ia^R8LRP(%tp&K=hrE-1q&{)d}%wBc9LhLYr@Y2U-RDVeR{oPgG-VR`LMSFJ<`ZK`c+t zwSh2=BcI&sUuqs1gtlUzw%+Ldu;{zxp0{pxx+>ktPZNoBQ*%%2CZzcKeo?UQNDv!m zw09DCc;1bshehYMfAMqIkRhO8L~;%sqEE|3a?*oe}L~OpXd6Xf-KR| z%f2AX$@LEF?xyjQ#4s?f=UvtT<8X~5!)FSgH-f%1$j%pUwWck(+H^c6zUY6|q%+GssYeY}EAL&j$oovvmSP;J@BPpb+ ziTIGy*Bt`1NAsG>?L&(KZy27zOkhq}Q5tT9Jme5sm$Mzic(H*QGNPDJwWXMW2 z>j_Mfo#hk~#hey38WS-wpIkO}BXUl11K!WZ#%};n9S-IJsZ4=|CEb!v$?_)L(+MrH zFeVmMoAp2p2k)G8(>T(@vZcUKzgoJM`_$xiO%hniR9a;1rgfx;=MeMr?$LD0IkMzB zR1+(gZ1$M?TY-Tf(Dx3^9#SPGTQ$usZSjMNX5|;9e2C}K!vlQnX6mHmUe602hTU>b z`J~`Va}d|N(gn&!_*5#K9vi`Ys)5OMDdVylY2)rP^Hlj(`~0+%Jt4+cG}1gu?)!>; z+%0?xiD^!Y?%n?Q`DT(q>-ZLki+!R;M->7fTYs=?*79RJRA2@PO@s6L(;?VJkrbJqVQpDkG}Jh-lf|6fXXPy#Xt8Q z6x>KWb2!MZmEws{b7Ia5cL~WYpbSuokuSM(jMVY!C~NAV#3RcP)6CBi`qE_*gIi!g ze*eMV@-2VSb8=0JstMw8%q&Y>!cpQ3_Q5+Ym0IfT!5KYw=zwyFtpeV-dZV z1`@?w14@&_LKZIv{Q{_I2h}#&8iEh|LrlSiJN%_q$n(M@AhCaT@)3V&?K%ht9NA*=5GE;5$)Xb zvXcmYc#!sp|I3mx2&AZLz6)gfpgIa1V!7+#$B2^F2a)&UAqzQ z)vE3x`$a!h85>RH1Bv*V)q=4J2lwtLE_X{%=W%|5n1U5-0%TJ$nBE5-X{O%7gzher z6O#ik_wOh21R?D~@V7**<#tMZyN4}=E(A+~v;bN~6U<#M?rvJC3CAMF7PO_PD^lVz zKEPk6OOU;5SoSs~^PY^1)e+f%WpO_ixA=Ch8Mp@#P@u%TK_T%Vefn4<4q`1JP!!+w zN?5IgPZLrC7D*Sz-PXY0Nx9W-7z_ISF#T+peqpuB<7gFQy6&z|K06bZmIKcqM^i8g zSosQWrD3(ib}i=BN+_oFm>GK=0*P8xh+~g^;ng!irOBn#iw{Ba`H;b`bx>=2F)MFi zrM_Kt>U8?&7znV0vfKVtbn*raatsHz0liy}13KAmXoL+XB;Uaw2A=G^%Fpro3S~Kp zAI@2R;dj~`8LN9&2s9@h)OH9oFaeg>crRVV0KGUCp+_5s9Cf>+p8v@;V$z`|mpM(z zRl%}}sdnsq%}dpudP#-kgIW%02Kc?HF~=hMH3){IPoxXiLupJbQ0!KP-V}6oz|F_> z_N8j&psN_lu&F#aR#!wwu6D8tr1)GWmcj!y$~Xod2sxd4Na8_F@N_R)mLfo|xv9V} zFy8i@m6xk!F-RJ&@l);TT9v^3)(?2Qptg0>uJP!?10ky`%Gmoz@J=t!9_~=<@h{2F z8uvSD6PqQ=!j0qHO8Fb2c1N9@ut4k5kGcPW&ce5wCCC~F16>z)KO>U zp=zJ@X^Vz0Md}5GMea<;5Ie_41Kybdt0J>0azKzf>Gt&aV5O=XnXD#PwomEkM7GpT z*H>n4!%Btu3=*`_cgiUzGgr<;fVNXWw1q<1V;v2&eQ zZNT&NbGWiZoG7ah;T;jTVQ-vh(6+C1jj#wpQ7IU$2bch?-wfw=i?YgE&#uA{RbR9O z1bf)H&U-^}y^mYJ092j_Lg{Kk01>B4FnEC5iyFHw+i+C6u5j2b(t=1xPIu=v%d`gh|j`vHPXF=Wps=hk9vs>2}g) zJ5i4~n2fDoq5erDON|Db=#l+uwQU_O^pn{gPmPM=>W0S5CaFx*6= zP)cdMxNx<9*GO$9z97HW{S|pUP$YAT+thl-g_-@8opEsS2#ZuE08#&ivhSvP3wezt zOUS)SaZ9eY6z&LUF}sn`_vJ&(dNHauyRkTt`8@)K$E>%BW}+`O=D z=Yn%S!5d&eaC?a3n$tr*>#wE1iUsEMxBXq@xmoV!Gp`{WiN*m(n>=H|xJH`*?2D_VlBNYDEP0UmRgteUqP zpeCw02?X!JRD#54md)4bDp3M-9fg{ovH)r_Y+pj?d4#h=PTv5$`Hktz=Pr@f`Nniq zbmTXtqfRY8=d%c=Xrg~Xz)mm`^q>O7z_|ZG0^w>V4T5gV1_;V<#T0{}O4&H^c_{iM z{F#kgfuML3mw)!t@V1?wh)Yj$eYxKKfX7PVb#_l%m(tRclYOgZ=B=h0FWg*ESc|mm zFCi!uPS1EuwNPhBcJnynUXZ6}X85O*W{%ACc_ClCg4oa0$X*PR?-`G?us%+E^n9pj zX-0P|WQ-D!5wf9SzKd&Dv*)y=n=u|BADkxYP6WSibN5^T}}BLT?*uyvy8JkK=R*dCkP< z_ByqA%7X5l88y;GXZ(kRv~i=C4iDZ*x2PX}+Q|BT^eN!ePESq3gLeW0ql=uH3`ecb zkAA*c*Ar4oxUdTN-U{$`MJlc^I5ITukG^=i77D&3;kPZvmo)AJuu;L1*22NvkE`V91`8GM)Isp5KuS5Vs zR>~@-_MzyjAocyDV?9w>)Q(<|m_?1&gs$4G=z*e%?Z>4RIpNNVI#HB9l zbn$3yCwYD)!Sgw`hbG(16A zd6QnGf&u}BTm#qMs&b#h6BLd(G|d_93g*!yzze_c%g@#*cti>_^()+X8@Rf=QLH$o z#;*`7=EU4sE25b_oPpb}BRwm}#Q0-s1cF-PFtAfF(7nM4 z0BS)?V!mY$vNF5&_MuIq-F3krju9KHXjl>dH< zjL82FW_N8P#b_8ie1kN`>%gHdb&3i6|P(#5dk8trnGpyaUR z#g5#AQ#AraFnLp$DFQI!IA-!o-I4$ic%@IkUg68?vhIRJh1p514j1l0af_xo z#>${Yqmk1GG{J^F=D$c3G03xN^;n4>i`%#V_ufiP`+M|6_ zUgxToYU_v`;OJC|ixNQ&aG+2xWs_|$Q0il{9|?DnLDpL^769sjYZ+fUq1gN>-6Z-r^7F%`n9nW~TF?$Jvc zYE0WtL^QsEjfNc@B}wS?M`YIXD8KDj(9l{2A;rHYydugBROw(8CZ~+J2>t zQh*H8u)G;!sn2;SH?0S_&hU;`$$qq_&t@-z+I)GyN0mf4aMxcs$|VNTfAmtq%1cQ( z(namSqn9~&*mih}X-=V)@ZFeK%V5_7T!WmZ?pNY!{RTIJJ6~}lP@=ezMtKjzjVNqX zamHZd?p!FiqhW&>Y`llrdI+pSV)QfArrI;W#f+C2ZbWBq=+Cqora_mXmcL>v0Iquu zVnl2>b*b-knG>s_kvTxYgB^yvfF||Bwnk}ar=a;_)xCQ_u2fV4SnlpunvX)eyPL{U z$OgkZlKEA4jC2(=yyQ^47?;QMh=QE6^4M;9NBB!$1mM2|ahui&smYLmZCEXx1NyEpJOO2ZD$-5~ONp`avVhs5=e1hC{ zK21Bj4nEq;av*bZqDEe~eyCSxVDIr)MD6^YVK$nqhn*849c$rF<=m`^G78)tU4+Eu z>o3ENW8IvE4ZK`?9_!ST&-Da}51Ie*A^TmS0%7a-BPtzV z2CnFK?p-(izF~|sLDBVkpX5(^M{b_*N{DLi&R@Gf=f!|=*$W}I`a*|b63>g7>zl6e zJ_svqupaJI;VwHODFt_DSd&Fn*3_TPlQv52hKaJIf#Yt}pgSvOG)8w`OXt0HVd_tT zK4138k#9!pO_iR%c(|0Y2*X_qsB7WKsip+yO)z+l6Go(}y)G>u+1Z%R`@v`GPuYCl zTgTqB+823U;)Kc1*jkMSb**h3t9>!d&S& zjwT;utRC4JL${>QH@h2LBE*&89?vb$BLo-W6v9h!TaaHgQ4+*2`Uf19|3y#HcoE*0 z;5N=JFDH~g$N3O!N^ycro*DgwrNuZYr0_#D#2>u=8dRx%Y*db(W0tmQ_xVmrPVau{ zzf}@n>4^V4lU3#4?c6C;I9784pQZH1yyos}(ge%ku&?tJ$I`<+RyUBmnSrg%y<>|N z3k0L)D-|q+FVuT6J$lI4UpwiGqecnu6FWZMyzzz?rM>M49THG^ry~PB)|HeDl!F3&E@c{*1{z3Ez&?*vBQFz3^SQNAa2jgOEK^S+P-KsLdysRo34l8)Q{% z9%@TaR*adQOp4s|R}w*t2IWu~Y6E@1$e{Vk2zv`M<+!y9($z0~IlmRaAf;;@2j+-x z*TIIOay-oW-|L~8hli?fmIhDiSxSHV!t zAdhU5_M#T8z2&$$|{K0Nj)8qQW#1X_5Xzs>CTTz_9w z$lsFAn*N=YKj+9q)rS9?j_Lhd_Ne?f%g0_V;K0)R?=ku6vUu4s0&5v=^}=W#EPjRe z!U*=S0Fzep@lL-t`L^QG#Qs}#jrHFBHzodPp1&!t!adiq`!iyEaQE~*=}C`vGHbth zNQgg4q4&YU?wF9t5#Gb&V`bt6o>N`ol^!1ML}%;WLsa*>x4lj^ zG&P{~UiVs!an<12y~u|yg`n<=naPpPuFsw0`5JaJHw~kvBl}&qbStn5<#)BkkK(VT zV_nSWSlA*RK2_z;qgID?T5hBw)d7rDpqfxvffFa3d;=Sh=_J@SRdk2#z*t|-5!mBX z2r{7!VRx{r%?E}BF#QpFHxld}4(~0Bh27Aur5XdU-{}q;oFn)c0=WVwtUUr-jI(5? zU=3uVLNL38VNL4MH3V zzC6O~4Q?xHG7HnriiZTFH?U_4qjmFUjX?fl#9lCB`!5?&KTNj?b-hRv{Dp8nrHd;! zClxLD%aHFX1e_D1gSrgM=oqyf^${BqEGuBk^jpIZ&j*K*3{liMX`Hf4vGV}oPZDkw zvUivq%N)7{IZ7f24HB1{#*BJ5IeKV~*-5kiA8%hCNL9Q2|CXF45=BCk3>7kkl%bNM z2q7vND`g%+#+?+Ir?d@4gA5I%!8{~$;Z)=(Q|4sqIB|^U{MJ5)>b>{<-uu4yzW4XX z*?T|Fv!1oqvz}*9Yps1gx+f!$;jN{U53PAS+DRqCWs_WUJ4@PSDbMD*6&H_9<`M|h z4)BUnDdQzb@bW5GL`GZ7tAlM-`>a@Ju8H%kJKYx=>j1vcPVIfK?p(Q|vV1ut;`}Ud z1hBC|CeA_=6a)pZL>!wY@XeLH2k+>u2AX$Nkmrcn&ejOX0_k*USPqFeoenCmI{mMd zX$oU4jT*}XxY<_8-GUqytmV$xLy(B`s`JW~GG96wIsqO#HAuvXfJB^5 zhkZ1Wz%k(nB;wFTVgy)wY}^|3>j&_TX1<3+oSp{EG5YGxY0%?`)@#@x5$6}JF|KjH zXpN1BX?eg(sG@WI4;ZL`b|431upRXJ3mj0ECc0yE7iN4Ig$=r=aXvR^Q3K@WK#7){ zqrNaC+6<`FUB_kxe5GZ$qR4NgD=Oc_qZ}IB$GR1&R1lk;KGg6XJm6{Xzh*%VX06I` zJ2h(ST^t%c7Y(?wUZ-&n4cfUD>#r}IIvJxQ zet1|;YxIoIOgOTZGHH3@%$7T^wfDu`xw5USS`P~71_C1w>iCJ#13l0T%Oy7M0h6%a zdb>2KR_!yn1KU(;^v>kodF`MQ)0y%RYq3h%R>rLFpO7JS69|BrwElX#{MQcqVmke4 zEnNQz10{X`l@FNY^n@_UjoN2+(nSJCO@sA^=pwl>0<68Z_QprZ|10_g0h)+Uj2jqY z;~t`{AHmE}brkhqg4=@HE`k5ipDA6k>PK-eR>y<}5*Rlwj>|*eHbb5w(C=rMHg7@k z&EUPBW$(~KZ#RSYI(7o#dbpEb(V!wNgeHlV}176 z`_5edC<~R^nA9+R>|MWmw((SUlSNw8Vhr|MttK4YN*~u9T6|kxasm@(0iT! zQG#7TmDV0yj3F3%Iev?J+ktZ$~2L#!ffiAQvSVm*3OtXoq=T z$PLNy9uEww4C*0nn{Iw;6n&SQZq1wYwjsbg-P(9`tPIkPvTX*)mXD$KG}IO)MUCnT zgG+iQe!J!4!|kJp!N>f(k#*lkz`0z}v8y=oFkjH)?NdAPH1{^%a`yh$DEtf~c$uT{ zgKE^To~OoMhz@MdA_$ty#3->r(IttuAl=%htz(BP_+fU{L#9Ltw_Kad9Ho)jp4-GY z1(Je@*;RR|upg_uwPjA0AZE{9^0B5-)84Zk$rN)2C%kAlI51n%_-~fV+0yC$CyU5{*6C8sCQP+=9SAo?7K^**2R!N3jb`$nTmvBGB5% zZlD>Vaf+B_KM*u3{-{dVds0mlT+;P3+K{3~a!7?NPr>TcCc7LWQ zyuUYqr5I_)C1S4ekY~Ep~t>c z%wIWj!^Q8zsO@}53(=RUj2wvGL-5ymDh3HU^Vx2I^dT&BOKINo{qH>BpZ`tP6y^b6 zQ~t*u@LMZr9&qF@WK9WI{RI!W{{q=A2fFu8_tSR!nKji^O{z}%A{megQO-V)5Jm7J(tSPBzng{%h5at1Yt${gk zW8!EYa1m*`2i(nI-UIG7pEQMlYf*~s0Y5|Y3BIPKlEkRX^e$vg@kdW*IDwnFnw~YK z3fvnSgMd5uUE>;awnEkv)cuk*g;8|VD8S(yM^BonO!jHTlBOzuNt*f)%d`fQFG+K4 zTF|qmxS}!NtBla^vZm;jszSeJP00w2M{_{dl#CEPYl=M%vZgNl$eQAh?skEsDNIj@ z1ArD-($xIm=t)zrdrqy$MbZcnSk{!P5It)uQoRVvk2`jnW{g@|)>I5+P4O&bP3gyB zPH7S8`K+lp_507j^)3}n&zgb`KeMJ>glI`qA80+uGrg*`q^XC&SklxjdeYP_gqAh6 zE1H%y#U4-Ny@Q@L^_G_4bVq$oI}K8z?qgX~>i+XtQ}2^~*fbz(ia!I(ntGr7s+dNC zMI;VIdn|e5v{|un3d>3DZw%7(4@_E}k>Arz=@fz6LpTH$9@Ey`iRfu{bU+@M zVe|HaHuYAT^~93*&QKa>h@$PW1!1LGd1@p0u&t#uJc=JRo>q7dmB=AY|Kp??`Pb#T z4?wTp^&nY>CfSNM1C2dKH$YZ8P1e!qZ8Ij2`pUagX&oexLRa}Nk*{B)2taYaCeH>7 z0@2in5$d1(DxjFkOBS&qU%cs2Xkx|<3vI`GWIHGsLsN1a45=y|(T{HoXNI&+{dgwl zWZ@53?a~MO@i*VFgDZPSIzciOtE}&(7nAI7ZHJ_-H-q5rW{p{^JgZxI3y8$)g2OoQWo{lEmYf^MTLdDe{ z*C!`#Xo$9g^^#w~@Zqb5|HpcokDU~J^r3V*-*7azuCWt1?U*GPMf-7m4-b3{ighUC z0m-|fo$JIkAJ;=-n@4LtW5!ekoc7=lcd&tYv=(V=J0-f8gqDyM2mqZJVOKXgcnGC zZ2BJIau7~H=J$dGF^7kIZxS_5If27_L!8Z2Z@Sy*r@iof&E{xD-ZaW2KXQyG%zCcH zIeqgr`_LNvka$#V2;MBS3X-N~kDK-AB=8}b)R|Ecjg$^_*4lnFFMNfD4;M;vf_o_I z){Q=I$2)m3yD5~gMGoEyZM=4n#e-+-`t?b-D6Xg6Ht%3@*RZGb=g1{BB=nP|isk}N zpP#mrML+a1@~tteE>mZLH~&p6!iqhe$pH%2HBg;CZ~#mXfCE6WkCAEb6cfDMs_@!z zLUvAo!sYp5>Gy~LZht6pjV-$i)dQR0O}JWxSq0wgBMwR^_ONQOz{~o2NFG96`xv)s zt%p3JA9Q7!&f?~0ovc*h*dezammOnj?E4{I$U;^1nObAWN{a*yiG zvAkp2(#)t>ALK7AD7}gS%cS}?04@L+0zczVHIUz_p@OOL?sszkf*O|93tGYG!6Vqi zss`*D=Gi5INx^bIi;y-}UB(Rtq76D}6IRBwr;QRTqO-k>;){P#Tm>7@dWKo}(n9hJ zqbvg7>&)AAfh)|JKi%+k;VQf~QnP`Z!r?oM17{o+2_>Q8F?ixzYR7BQzTAz}E?r9< z>Rcw1yB9*BCTt4#&?n551iLjH^9*5 z8~%B-_CDsUJ6FtAmRI;krb7v(ex;{I4Ks?Omqr*h(Je!?_kMQnBU@x!wQX|mG&?j@ z_(!ETJE&xJ`kR+&uESayH7fkMgP7$`+3W-Ym8?5wx5>6%$m+aeUdBvoky-m6Fz^au zUbmLpZi_G`ISm-^qlpBL3EO3_&x^zeu=d!vU{rCC@jTi-!pM$(9)g#D`yuS*KkLqE zQ09l~Yl0vv>KD~9)^We6jtz>b!ha=H(OLfo3{*fxkb^PU4$A!n4ru(yd{)#jqXISq z7PN$@tRZ?r)K+x$Fg+n^H%>9|8_67A@{ig)>hG}HGw{MAi|BcE4K>od8zLY^HbY2O z^W;PZRj#6PY+9-WiCIrgH1FmlxU@~xQ#Bg4!aw#;4c9HTr%Yg(a!;D2=AQ9Yb$r!# zv{t;k?PE}DN4DNkxhhZG8}&BsQSlm$Mk&(Mb~i&omlsIO+(A9{Q^PZchOjNVgyk^t zzC3!Ah3`!f(wn@UoLJ&?6!mO1xh#_YW&{3mCz42=5?<_vlHxS85>TQc51tmvE`Twg(lXKETc(ZiaJz9m(f8 z;(5wIYWy78s6kv`i)T>LlU?J~*uu6qC2?ny=ft*H?1P)YPT{2=a_v5S5SEcQ-rXON=?Y z)+dDTGrDqxwq65}LgiA`!rKoLT;6cI-TmHTlv8LsdsbLiu4vf3WTX~?>`xW2cO}p6 zKq~g-&8Y1gZw*M;azAAZFR*UK#Pesg%%FbUmi@jUsNR-&*bUotsKP*Q@^UA-kXj~Y zc5j83ZSw9U2VDcB`+KEaDyoX_ixii9;nkY$+?<7dV>8Mi0x!w^kxBt#*qbB4S}P?Z z&sZfMzT$C7y^o3&F!HQWP8`U>zKfwW=M)net(GEW#Kc=FfQ?AVnC!V&C9KS>RcSfs zXz#78tBKvOo|deMoD*S9zmhB!t>rYPesG&~I+c=X55FgICA8k;=Z87^^R;_?`PB9)q1!ov#6cndB zp_>eJ<36C=`uz(;u#{VY*IBMP2h#dEhf;cj#IzY!^J<|4kvHY*sNgiCFyFvCh~@a? z0%PWT5Mucwq8)bGMNEK(v}&<9pFeh zi0aHRnqwulCI5%Svmo(@l7CGt;U$>v=%QK1ttf7W@$ph@;Nsc0Q0*B;sU_bGyreNh zae)7cs86)nF&p>}yNjr~I1Z0*bO{TfP>;Dv&ehNMtV_xdo*qTcfA4N7C>{*P8&-8& zw{{0~bt(2lS_Knb3>7~&t$f)3$()uc>7LN8P=bA;H=75chz}e`^0OV@zqlHmA$DE+ z}~A-M%_K zw2s1fB&G!?huSU1ZDd#}qZ^Znv%m_hOOiglT8^?(8HJFfPy7+I9+;#?7~cN>ucKuB z{V1Unvj-=-_@}P2D3!v<3W?l@L3>F?RR~KEu!&+v_SKcxtp0wpG$~Dt!b#zrAHz|5&Sjg=I%q4mm}2*cg(ysn2GH zO-^#QRLynIA%ka=>E;99y-`4@uGYXM4aT2w5zL z(xgH(7D`aKu6>3RoXXHdFMtDDLdpR1v$}7+5Yu^On@Szs#oVCpzlP@G#azsFsjnUO zF1VEA(oy?n#`UNx4kwHn;cz<``*hFb-bR;xV&q>2o@sCs*BYTOo8dp(z@sbqt9zGq z3An8V(R>12Bn+X;MZs|Mk3Q`wvL0(&k;W_@vnDjME%1nrw=;vl|_{Sk1w|)8Omt?U1G7`DX;uO`@7*CYnbYOi8BJjGp zWTN#n50X_A+d)#iMC9ID30rdJP}i(S3xWDLr)~54Hw5K^;;4|068IHs2=WpPnusy3 zLsY3W9sA&^14WC!LtDC++pb!!^+Ivy6|XYpDgXGb z9S)=#Iim>s+)W)0D#d1JU!&_*;`X2%D{(uvPxWwb2WncQw#q^u?lES$TlQPxVAn(A zMr)UlMzxpWJTQs;3}$ERQL|;Z^9VEzc&XG}pJ(5hLSh!~;kHVl2~Vh(yGiGbskN)a zVPA2lKdoi`81uRxy#EshTw|CVJ1M&Me}w~@xe~W!@!3A~&NAHAANG@8@+H_d^+z2e zc43c39hc$OB4&Li2bewhI<t1n7&Q187KYXrooNqwRXDk@MsA_5*Lzw+& z{y`a^q-_xBvAR$})Hl`h)=@oBR8HzJv}$y#Pjo9IJ#PG5*KsJ+ab;H>$uq8<(w(GE ziMzpdXp78sZL2MJ8YQG+eipR%rJJ4JwtBt^N_VatEvq&{_cFsm4qF8iue}Pl3dOVF zxRIozWsLXzxeqbRUFSNRaX8KeP&eKZE>hE+IL-hV9?eY6TE zhyxRto!yQ~GUK?AZmOKyL3vw&MQc@aq_|^sn6k3&Un>$ICCnjO1_gt~{F7~~L-`r6 zTp14DigLFyd+QYiHm23_%Xq9wf0v*Z+P>fFyU@{lvcZjCG?Ne5|ET{Ydi0)LBo`3R z*IPaNK}@fwF+u)oF2XI_|CFTP2}&Yvplgp3R^wJ9CrEa4i*M|kywrG+hq~!#_b!T) zqO0{Ot5%=j#>pBvllzt9>+V-36tojQalYzm$#Si{Bkt44QBZqPsi}!`(Eg@|$xWqD z05o#-do~t4K0RumsVqh)$-CF<&zJpTyz+oVa;d2r!>b6~)prRJOy?aq-~T3=yw_Zf zq2i0Cs6Vp9l|HW)>qJ^@Tl~n;gYe4Ew9V&`nelk zCOuj9#fdw`Hi}#A|yKK0GF>BdMb5_p%ch9X3{=AW+bFb*)D~4B=MQ#x&=hwKVdV6)S_9l+f zeF8x%vzBq1vr3iopSz~oygKl*is-%o!zCr25wmIwF{dXhSf{~Q1SvWm&)(7SM zhU(!Cf;WCUEV}Q8;S#Z|bD!AGUxor|xI{eb+%%i@Z$fOUv4%?|v(9m?vEC!ZaYqA? z!?VuqT4Q}lh+~tc=;e5|D>7L)8*|oA<@~vUstpNhYaGm3yUO{ip>WfXVOQjqujTyB zP`G8tppdo9onPk*0;NPl2BoZJ-sY^c`|nP!3I1&h$0lvj%eM`$?2X*Atb%`SkgCMm zV23Rni*!7mtE~;by@kU}M|AN$!z%|OxA0W(D+H-tS{uB2E63iW0zv9o%dVTVZmZxo z3{uTq8@O0kbYF_$63wh-3FfRjRquXT8~k}IN2jjn;xxl6+L2rKBNhB1L8=?sgSEGD zl1HiUGiNki z*i`Vh2C2Se4~`Jw*lW zYd47fJxF$0$FSSgpc|PbD$i$!5;E`hPFUaV9X>T`9nSRFsdzAE(+NYB9z*-nH%E6h zaU3Ube{^{>PH~wT&oN5m5+aYE4eFbroDOYpvTqT8L{567H7a{PXBc^j6t?lLM=Ku^ zdwXRmCSJS+9sQ0=#?HM?G%+^WZZg7S*%DmTaC1;{lK9fT%3K7kxoAvP@;=UCaeTY7 zp+;{vOS00zmQ6Fogc3e0y8>L!FyqYFWa-VY7_$jmQ|_UGmI=qi!M7nT)T-Yy$-bwk zT$!J>l5)}&anI{o2GX}Nees&zadXs<%kN@wQF~=bmi&fiUP`#B@1v6Us%m}O<-U*; zUL(gItZqe#TpVk2NF2C_dW&Tw(c9KIenerl>9VofSByI(6uxZlc&MJUsD{e-?S%Ts z_+#e>?V}e?b+8@UcleZoRDW-#od-rm0eUBB3D11ctY8}g_Ez!HHi>uJ|j;ZrB2!_&jpm&@MR`ZTc|S)CFM(}XSL_3 z8H(*?K0Gbg$PV5&olC+<{Uy}r+2M|-`UgksDJ^pL#=|rqT`B=tw{otIsww(aCVO0T zED3H`7OmY%vMOO4ty>E=A%hmh+0sfUHAXg871f@|7`Cv>l!yKL)5==UZVWDSDltAQ zW+3WTn^*9n+^PFym#lT3MV@nE%JIWq(Y5aNXPTUUJQb<6XMKh;hnrKR55{&+F~|;Dgo_V(%R2{r z3~zgEX=j!(=rkBuRq9k7{JBkmS*pa}v*L zZCrKJRWYm2aLj2?-lC2`abkHxe4Dh}QlU|PjdgLA6H9H&dh23>bX zy<1_JOq+-K;O^|^SFj)5-KAsUJQ!Fv+Ps}=XI`_JjL2G;lY>>Ni}~uyqx!SA=iF?j zcJ2P4^t7DfR&Jd2C{S>8=0#p_`KpUUWY^r@azMyvC`JvxWo5KI7Rr9v%|jgR(|EL# z@`>qLJgevDEMxo~W_8hv8_K*FAGGl$%FXRuWoceRD6}iMX*lM>{7fXYc~Q70&q$-UK3onPrL}IJ2g14YsGAJYwV1&ra>K zlZP^KhpqFQz&i0_rjbXx!E)W|EpNnxCyK`bgyptEy_e9%p^3eM6UEIL!zNwL)5qZ7 z0oU!wF1~oyBX?;p>&XtT?p>`;=7T58e3F|dn_9!#;td@YPUa3-nO8Wva@xsck$Q_Q z)e)sPMI&`$!m`CXN0?@A^X%>jI!JEud1N@2mzP?wS+_SWyqPaYzV1^w;Z{LPXv+|8;$b;5vUM(Gcr?iGzUS%0thoxm*CUDV z@y*nX=BBpI&R)(}<#Wm~!tnHwJMMk#CJI8iso$k#UryfWXjLJFFiRxn@gNuv=5Ik- zo!DvF;W*(q7`WkEKE6!xeo_`gyW{FSShhTH+PfvXn${G2 zE~;{Scv5TVvLlaA5i;aqUPrWP#Kf&^w^Yb;84R?Q;Po)Uy1;>Cs<&5|?YFR!*Vs@B zM^GqwORSP9@I0h!!B?2s+Ith!CfZa#7M>`bQF0?s7M2(j@x*UlyQI64!s`^3s_fXP zUZW#%+Ovm|!ff}VA&(4+tlhM$jif6Xx#`mZ3N+T8${RWPNM2ThoJ_0uob?eKfp?zp z_{=q#Q6e>eJjBqsuubuC$H7Na)qFZT;d(K)e^BF*eD+$m-h8|v$-Q;N-CKdntFXyB zx2k^<$MlSE$yH?d{Z@{xS;lQ-DpALMp!Z8i{5rW9Jko@T);@O)#r2}4T@~iqbPrRH=Z3#4V znB^l^dzG)^T$*2|n4@gIl!v&(uK7cGP`88as?P^)kV_Wr6P44~m?fG#3;HMELX#Ex zY35b)lv1T+Yh2&8IdR$FJPn-7DeF?(2DTf8!_{%k#r*yW$IH}fsnK@ap%u7~sh(DR zyU)cAURammxNq)SQD1N3C%&w?&`BYeq?gTel|^FYTBXE>0C|(tQ}yGlmVIrC&y>x{ z3F0#jj!1dmx(;7)ayjK%op|D>k%rDm)-whQ0j!H>2E1Qpp=x)IK6in&#j~RZc#&9qGiAbiJ2_d2 z_w%dr4hvXZB-VliI6o1`h*NN%pfte<-k~i`-K*CL@v_3@fZBrZcX6yNk2g>dgVU8+ zBFwA6^SitSL&)&OysAFu9+8ozzQo3=XG!66VO9Guj^0L~^?LY^>o8gJXRpdtoClN2 z6w|}y{E@uvSOuUdO9#El=wI<{6{efmH%`YWV67-|WO>=G0DLn;_Y#NP!-VGSSLJ~O zY%rsp+fU(}mvkSec4l9emMygiw`Ycn%@T`eJR|DfH#1+|>_3a$(oJ%}fR)=Xmfvmd zCao_py}42g6L9LAA;~oyZ)t=0Wm(pm0cCOJ0B=(FR@>Owfn@2dzTJtEaKTo(*g9q3 zS3AWT{y6hI!TD-nw?7!hj~JUf)a^Xv=a}sS*9XfXKT8Glc{o0crLrT)r5Uap2fduJ z-kjkZ3NV}Vg(w?N5alOIrB^K)c`sAEjL*GdAn`+0jc_fJ-+JF#A$9VaeSe+eLlcZe zQroHgjOL}?qm{jhO_|M0Ngu3eXEI)^wPBil#&qa1T5#bMP?A47;0Fyr9mNY^8))%D zjIhTh`C=ouWK<||QcnbUn)BgfUbVtCC9GsMA2E-2BycXsTS6(kAFMrn4UfDVPW%Ky z3>5sF!|@^$rR=+dJgrL1`9gF@hk27Q?!-RKl417lz z8{k+D&XIhjR++hZS%gkSW=bd%`sI9cJfCIG=AEUGO{l27)g{D0@};hT7o~G>%D3O8 z_e@PuRmsakGkjEJAa(X6alAb-{|?2mVqdp=)r6N_x5-?+$}pb#ot#7|L#DK-y~=a_ zR32(2^}D$8ToUy#kNe1^mO@Lr&y)!jo{I*6;_+1lHZ*?@mYB?(K2Ha&q19! zJhCY%_$B#f=3bL2Qs;1i+pSSsqp4>J1nY1zSJiU@1raAEiF8=c9xoiORt`T{Vo|PK zRpQ#7QA?cacYN*+IBxHgki?dLs%(cAWi*i-gU_IhogXXdXPKBN@gbd`DQ>H_FR%{w zdz~}v-#)8ZkY!JQ@J2f9zTls8^f(sDV3fGm>B>7Yk!-ppQkbpmhH* zj{61oxf2DYeQkD6v}s+iipGWhP_TK>w&(pXqo*lSgxO(1k)JGoXu1P5{U-us!GKuD zKcx5@2{i2gX^xPe3jZ%=@q^vQ^E7*6Q-T@&#~?LdaBD!FrcQxx3eBKDXR#VgcISsB z|JEs`FNr_7Wc~iYUVp+|$S(`y|Ho-zV$<@AM88mw|8EzPPesn}`uylpn<>QA=x~Lv ziu)2(VElmB-EL%U_;ODB(<+X0n~46@=AyRA!BHEzX-}W`q21Cs*XCx`cSx01ClwXx z2G0!+&xj`>)VYRF-}zm;y@u^?Hd1)2##<#5EloX09mVdXJ8}rg_)|-g{nL)wjvhG+ ziozG~b9HD=oq{z#_Q%=C{-}ahuig$lfxH?;{A0C8M#Em&hXnFI%}p7rL_M4<>`;w* z*p}&);U{3=X_Ir@E|I^ISg6gazFjUcF}}BNJ%2q?hfd8ZAH24+F%D04zHEpWSsK{0 z$Xt{>db27Zt7%7vn7aoj!TIRksE0)pWnL80&}zh1?%547{3`b<41%OMDdm!8#$^3c zb&Gn1lc6LBAwD+~yf-d>SpHrcp;sgEUG{*I9`A;;LmXxB$N3i@!~celT?`93H}*xM zdmsxr>BPIC&&yb(Oo+h4(lT;b(y5MAv%6WLrKP#8-?A^h+xLU_);{O8J{dOvK{I^d zhO~1{73t^+Spw-nTbcLP2_q+k^Ufwgil|pcZ}D2s?e4Y{D!ozADhQBqF1JQZ=Bfov zEOIk3T+gsK-hyF9W8+4w&uU~k@LK*K*8&!abDm7U&pPgJ7m|`%zfD|RHGpQNL;AqF zh^!jHaH5k520QY_Ctn<3M`kXLU_hSzxos%FTk%Ch`Bs!ar&w`N3jUIRhP2ojP($aY z99Jh8J=-m7lQ%V7McT|No7dGnu(7!(NP4}4kO6qnP7+B&@?j%=B9czn!H zvRg+F0-^}9wd!t-*thC?vC{at4}dohfRz{b0h9>rErw~pl?qMpXZ{$Lr!Bph0pNVl zHA$Z_+GtF%m1C#V$`Jfh8WczPj4O?FiVH}aoHft!u{a@1;bmrb3Mkl}nMK=^z7o7W zKyS;AkyuRs)VuTh!wrw+-Cj-}Z~-QsraWgc01)0-LfMFOEEG4lVnt5wn{(QEJ>9+a z>C&L;HvklgI|;a!4*iW&MjMmF$uFgnR`y`&pxor=`=uR4#Z?z~cg(3!|s4~QWy zdCp&J#U$+G=J7piTNmL6iyr|pO2aK(OFQ5Gx#xiI`DhYD?sQ&R8+?v@zgo(lY_z|q=N-u_Xj^vz$e^AWDAF;b6LYc_T+&^;3`iL8H%ML>Q6Hh~xhJiSSei^|FD%J2Mzn0fwfu9L!oDZ6A}92xuqH2^Ro)@l!!V-0sgO zCdMxGt>W~|Zn<%GPeZC$BiDqGOFJGvF;wDVcZu-CEgeX# zKfP(R0gS+rSb!Gf1QZ3a8uwwqd^kx%epuL&b^%BO1{&$|l`^|*Jhx5y*&OL$T7yp- z9a01ll+Qc^m?DBSOp*C*jYDg3g3;I+fTs|s;oDGP0kDBtnE){Oti}yM6cMmI^mI&a z4-uhQAsTYW;ip}ZZvjL_utuo~+XbfX1)LBt^~^|9VQ;(}V1h{2cx-?=3z!59 z+f#*(?YR%b_6(t8d(xVKfQIeaM2F{W5*T#(1(0)0P8py(`=C;}jS-N9Z2{3lxW
    =hmQ_Gxw*z_CCZ?bEKLR(Tn}s97;Jz#7?0o3g#?LyKWC`b9~Mc*QB!yf$GOGX5Il`T3$I z)u(>P#Eos9Q8KbH!H6P_e12QQg-Hjcv2D~8Ww`04rzto?oUJAV%#O?iO%yqjVAWVI7fM9Jq1vYBTp-B#q}^_n-AZ(>G?Sqg-Xq*eQyBjLo>=C8c;)IK;b*_ zGBrVBZ*S>66RI(3>^t({c=VM#KnJysnpF%MiP=8&v|obKo0hknmoaNUS#K7@KI@@nvRZcKs1?09HrxqKDu}luu5pFCK=XMJmr2m zMvz%mC+0A{F7@o;rzr^i+`fvP;oAYOdB~+pTCQ1(Lh46EdX%tPNOa0)U$`8 zvZAoU(+S&Yf~jTKXA>l8I$59qkVT@SXviXmXviX4Yn0kH4Q^E*Bdp66?B~esA2oIp zLWfKer>_IC`&V5c?oCe;tT7YUD?uVl4#?aj%r+k|-s`m{YPOo9zAMW4O~=l)+&L`j zBS=9+GRj8r>tAXN9au!7E*6Hhjg#~~bPVc7-ZU}s+vPL0ZGU#AFJJN6yqwtzt&dbM z>0}jq%2~C83U3E#0Tm=^^8nsKZ7Cb`z@EFCHmL1L_EY12@4H`RSH!s=wfjFstPn+f{ZM0v~SX0n>Y% zHk{jm9uC0qpqbZjSFoOPiviDb^crqIt*|EnL?qKGZ9orAI0Ti>fpA%__oXTR7bM=% z4t-OgMOS54>`%_8f&MCbBmn2TL?#*D+r)!#+ZRQkk^Z<4bmKLg2*V_NMC^DCC(8hj zwW!H8948VnMbRg6ReWP%8kn@56%G{1=(ea;XrgEZi+r-|Tgq2h!9LZ25MsmZ+h2%_ z7N2$PIn_EhZdpY@kd~6%6`M`?*WpK{69?E2c+wtQ+uK_^4tvhHb=VK%(_Wb#WyeK7 zkcid0>brm8s5E&SlaRjIMxCp0gx(IuF)ccQnuX%b0T~mw5v>csZDTyAXU2IHl?cP_ zWh_nE#-xI}hT&wEn6Ue^qNyQ}Xu}#Xin53Y63uC^B!HtuJG=iTS_6(-pR=-1gh}NAz2U(tQ=q1| z(fX1yBx2_~0ZHE}(2SkdN$;vzZNV!E7>)&Wy0@Z?5hR+ap_jsOBEKqk0;g~GE!b8c z)egl;F7bD-aKrTG09ZwnI-xYlrPMuFiSS=lI%Yj0HC>T%ylZT(5K(3RSCgexBg~b= z8LklfcIV<}dER|%J^R=R24Rs}*C=CgMm-2VsbUzJ(~y$-c=2h-uyjK;l`?C;J;9=O z@=1R~i&wP8m%5G~PWKocI%v)ej|$>1k7MiQRJ(4mQAj6jZ!-N*C(L(0t$zQBg(Hjt zBj`u(T*rx{nb&cf=$r5;+{&%ns!Z?lFlfG!Y~E63swlROR!b%SS*=xy&=RAI)PE4||C7boaNMR0Ij1uepl&4P;rmPFL0rNiH)N70DklG(3cT7ZVJX7zIhKr+s9SZ})AO z-C6b9tZtMx1BFt@$A{Wd)PK zj_dth0bageH zGB75L>%ap4`Ju)i`(@BTa2v$ZN&j8~T{}{xLSIEcBi$0 z+w0vQGIZH-YxLnVV0QaFJ1*gY#D2It&kt?~JZk(X$ig!QP{8dSXrH97@B{PgcuXS& z?ix_1bJaHmTHD#-_AnZc6F_L1ZEO(1tVFjBX0rKCbmKuaP4)i;0l1hKtnsg9RDb_l zXK-Nxd4JmOA6E$&Jqo>o+33d%Vm1%i#>DZ%5`SUNe$LWgoic%JX)c7m zF8B&`fmh%73gkEmqc#%Lo)m%rr~Gf-lY*3IN*%5}s%?EoL+~h%!edP> z$xjK?iMj-n`Op_xlRybMx}8ZV##|zOt)KdRc#2#&(%4pEdUPv}?LO!HQS>3nSiK*PcVUN%M_(r5{LqNoI6-v7ZJaCWnS|TPcpJ#Cp}9#o8MYq+Fs)@l zoujDq9o$~@{9W8;tVjA%Yz!sM$54seIH@JE23`gz-)(qGxjpsa(&c!UZ!F22C81QF ztp_N26eU8CN{Ou`W%}TAPUY#(ij}#DNeFScfMUR0UY)~o(xi5hv#O!lOV3{8c{VA{s^ zK8{CJ-$X*k+c)LIIvYKcC+X9dfu-yN@wd;XFV__mo8Fne97?OGhKfLxbRVav>zpyLA6T0oW{7e<QN)L=P#vl7dv1S|W&@?^Wg(@c(PnIqn9j`F) zvGgX^71WbC!kdyvqQ)lFys=dIOaet_l)vBjv`bb=+r;=pcSGUBP)peZP27hmTjhPG zygcVdkDRpYsUr@mJ5hL3=UN>Sg&iPzGo28A5_{t+nVaIBt3#-oKH~l1(e0M)UM{V* z_qIhT){wdn3*@QS8&FgaMtSy-8biuof2g-i#UeII_WBUS!4H~Yp`6#Lht!;2RJkVf z_H8=NgCFFH1hn{%kB{5&?(J&!#-cWh1Eudk5NBz`c;UAQwM6AgCu+U>G^e#DsVyoX z+);7q1_T&cE7$fbhw~CqA8G54V_zZ-uH;DPeV$QggUH0FSBOks?Y)mXSu8Vl;9ZtM z@TLn3-tZE!;7y{!SsU43f;UHQo*V0t?Ed)Tq*I~-#BQu;v72dn>?U0W;v?j&0zAG} zri$V5%+cC@fjOjABdbP+uR+YRFDkr0Cf6pTU$rD)=IBsf&&B$FENU}l^ahLNjC~pk zcrBROuc`$u!NFZ^CDRbKsdO;GVB|NTGlzKcdIs~%&H|2n5}zm*!|8XjuAkc;w!FdH z$EmEPdu!Uv(VnoJlBP~@^z>F7=~1f7>m4Q{HLgN(Mc$sqNTm>}Pzj=(T7sjg13)x7 z+?}`GEZRD;+Z6&mQ(b1g4zQn|2x+)kBQuI0Z1@Pn=}%R+ajF|>e$v~Q!-v<>1Cxad z-!qLCsqcCjXGC-#va7&HkM5jG$Skkk;9!EUURF4~S5?t;*aalmdgtaWjCs{WZMH=dTAtx?WP z6|x&PXdWE7`L=-zfYn}$?oPxaKzRiujMKHcS6GlI#3FY0 z9pHq7U;NYqgJtv)TCL$!L!5GiF)j}8c1Wd#brcAB=RoY(mcCl&IhTAIFni(>+Wwni z0X?qs0*k$HTr^6c7p)<@0udq0>!kvy7fTK!2Mo|kwio*Y>3FNurz$^W zJVe$TA{2mRPT>OZc-Y&AwWSI}jA~*yEFFtgZTlLQp41I_)(U6laRoT7bL(5a>U4)n-G(4zfNG#2*^20n$x6I>7$;;iCzGmV4Vgd#Ppv8+A0 zerD?3?KuNHGem>71Ia~A&$#%lhhp0x4xmbl-l)oFwt>$(i018{-#Qrwfb)K>ARwi; zB_+M&&G9^&jZl`jeqxC^tOStWH?|=CFR+l!7FytDe*5uO3t-A)kn;XprlKt&GO}8b z1}VSk5C$o~u%&Ei0O9+WJGTS$H)DGONLr0aTG;j$26&3rt`bB9{Q>$F?&~}6ucE0|OX5y@3nzd$7BPD5ZUSsnXv_{@Cl%8MIX}1?yAPZW96P?|Ni`v^ z5JnB7V?fktJWSjnw732)7K4hrd&M!SM^xt+WpQAq#&-8+2z=?hf~|(mF$FdV7o}{8 zBhYrl9n}zO31U0j(H5U$M6!c`nd#tYkHq8}k(b+86aY_Xq`CMbxL zr5_CGG-X2=1sMWLh{7GEZ;us109jgXxdq?q45P8B*~=Uds&9a06;4}L;ZY^b5QTkq z5Sy2U?Qx3Cj@0qemH@Ay>mryA#Y3EK#kD+wVLM<_oUcnXlq5-q7Ttf% zb0)M7n1-=cBJ>@$eOmbhtbdO-2lr0TAq6u1yqw`zfww%EuK4bDQ~_qQX^Zs`Fteu3 zu=RCz{E=4qaWCVmo-hg$Nk5m?Hdzd;j?-8zYAbp$MRCB=5XE`Tg(83` z&n0Lw2#E5>?>%yCS^43S&X}8N0R(4uj`TuM=H8>JrvNj5ujfND1cO4r3~6UWo|><` z0KplZF>+yEv{mI6Gdl>sz+^Jt^Spn!*lJe@B5yU~OIk_;l>Y>P^1*aKd5$x67@&MG z+gTI4n!Ke)sCSV@8=Wx%H8Ef2HpVrylSB3yBj?mJLlf$KHIfM$Em#mp_bx366!=ujt=ePX_1WR2pd{nS)WeorHG%*l zue1q>6Q{2LvHMrcYfjB8Ka866WU90D%P40@8m#WPutoVP62&CwTC?+9dFfJ->pR)( zNgWyc2JT#$YhHiHD2eqo3&Zt`&%=twNg5y82c&1ajb>l(D}Em-yqj32n9)y;IxY9T z&Vi+9Dxs5?DENWyYgMv%pVaBVBEU7`yT42^;#}_1NZD3~K!4AT?|#%?d)~>bw&T~@ zy~!*n>vJ3*dg~c{_ltXh<2}({rf3MgxtYnP_d0n`e{x_E;u(JtaUI971G=Y^qzP82ghG#EdGQ;&#cv1@FmQIz2Fb3j}L^ z$8gVkf6pg$E(=m2xHR+(f=i&J-C`+kG~yY~OIfCsL7n?o#Y$n^Z()SLCcw!dPKfh7u{``?d`XN7ceJ-^V_sul)xhnM* zcBKbmAO>`vQ+Htp?xbIuF=89NUz#!ECprtg=XuRD(fyNLNEthrK%LNS%oY#cL%iuc z=TVw;jBl;MeY5>PG&rY+2IbW!Zxcng#@ZA0TiBS9FnfQ|vL7#NmbfO1x!6EQt zDu4kl9!!{qmgYf-(iA8+p-b~|D#$+?^q&^PpVIq3RvY=bSpP}#f3lXbu;rgz-ZY~k zbZQ83{_*T!A5oKlXd zoPH#k*wtlHY!zyv^d>m9yjkgCaDNg$Q@NwK-N(Dg_9NG37T=lZZZBOd(%H!Aj9AY{ zI=LXyDT8DC0I@TOV}|ZcUO4jIPpjU4B6R*}fq(#RVu(M6mL8D7aesi&*}@UM8XPBo zf&lqXSv;sTy~_nYL&@f}N>g1K+!~s++vjB5D~P96n%?8` z3$=oHnuUbUsn7*I)4BWtq4I&`+vi+b>7;)z0rJbd{A(GfJ$@kt zB^FHc-_0=}jBS2I|Flffxfs;ZfiZ}%JzXgNkvX*=Kh!nJb&1%+S;gWU-0fw& zXKm^;d#9D~MA_Ok*n1!eENKpCs6}(DC21K*^;zNw&Qyy&M|X7q}<9 z7K=cgN^ycn%t?tK8lAiTOTlJa&Yt&9D`j7cHE+o=)y-pE)5~%01WkG99Se2$S{G}+ z5o<1VUdcfxf{IY5l|l=J%bH*XdXFE2+?&#m4g7}{kOiJUD11TDUn%~#1PFaD<_AVs zB4S{{xPNt47W)1BNm-b9RPq&W%}&}REDSuo^>QH1?r)#BVkZ1KYwLSCM1R=s@0>zC zyHZ%b^wIxY-T%=%2;-k#wSQX1zg6NF0))PP|51t0!L}!VIn`h)7YzJ!z5m1FEX|xe z_J>^}rar8`9B=uJrH2FJJpy^EHu;YH#~r^^wRedlNb|Q~2=en9J?dC*1VR3!&UMJU zx51MQsZXjAAA@yx(~xm}li4wu?_J_kmf0__g$~4P9VTh|!UrI_rjH7W@`_N(#ApfO zyQLwP2K0X=|NK*S(0m4pEj!$YvRaE9pA?eB6Ok^+ zv0Vqjcu|RBcLKgPcwDBz+^ep5r_#!h)WYh;-I*qcY;mT9k#8jV6nVTy1|S|h?Rcj4 zKPsBC?iKY7?Y3;^D5$xHnLMVEc2%B-hQ4W zanclWgv~KqI*Ho9F>8$RirN^DZ;%$I`Vopo9I~Aju&1eLm*EP<-xbLqULzPBk}7T?7Qe zC@N9}6cv@GpdiwTG%3dlA_!6=HG_(X1qM+<6C6<@QZgeYD4_$gaG-ka{}`^ z@4fH6^L+pBdmf*h?7i1od#$z437+3td#_4#?4|Cnq!IH3URUX z1~Je6HnQ6prbR&rm6j%vL-v3{okgeX8-0w%6=iE7xY)2cwr;JPUXMk=ltCc5 zk7arxv!~J4xqnq@VdW*wzxIp8=E-q-!8J}|1EA~sBgy}JY;jy0UkhQ3GlcU8x{i7> ze9fDrkgx5QK|7=%dX)1a3ym>S*jvu+WS2Spqu646a5)xQ#4BIjT-HA|Q>wNPc9r>+ z+6+J(@?DIH%R*%F)ge2iJ?@u?Sym^;)=+Li;PZLCi3-9S{?w z8jgoRkTOg)v5koZ3<**rCwdxGzS?6uycV;cas6TER#_4i_EuGnpm9D!hy*g%1$U(# zmms({a0KDYE|Uu4wM)XOi#`%1E(=>CZ`}B;1fj~vm*!|puG#T{>*3X|L6jB?GcVIU&o{N`ZYbDIgnsIcGS2b?Kd%dxfk+B4!ROUPHh$O% z`9NPZ3ZWpTs3)7e6}DbY%K4c|2{f2Fc-Ry6Y!T6&Lj9F!AWpCk2<+D3zn9$U<+2#w_C6d3btTn%x}Rm6KugUMYmvinnCaVT>K}{=9v6oike;^+$ym5?THyOPOfSXN>XdTi0;)g)9fQq;DRp56SMKR zdot|&hc2PAT;=`l6qEDQQm(;%tcA}f$DctA)HYFVGr4=*4R#!kxE=YJ^27`7n2$gR zJKs_TpHG4zs_%Myeg~Eo^7~B*Gc!6I5oqa8J%)5x8TR(D_e601i_pE#=JHZvt>9Oz$)!3lX?u z@>m4!F}A3W6Bi!YRoY^?%1w`Or710RXL)f2o7mdJ8 z>;0DqoQ)s?_uvc`fwNhykR7}$$$V1Htnq;yaw{I9Y&MwW`Ojy4eoe5!OL-Z(TWqJi z$21XnfKpUR>yTf4amq|Lg)LdF*yAq#2p;+}h}I<~2Cwrn^}gI(ZGheKc=()=j~w|K zd%#KXxzikN)O{jgk|_p?X4$qc{H$(5dQYLSGXkNaI^5{MIVT#+k~$WM_PqN)w_i7EAto0c<$(_xwG->>4wl( zQJb}~@4xOB!pCx93~`{EMr-<*(s|Ngx9Em(bV{(JA%&!ePIF!Y-(k(M2+mzyjYPCODG7bN zucX5ybyRmzri@NroXL6bLT3+>LaJw{sazJ`W08M1OM_b3&a+$eI-`2+Ce~QAo=)ND z*$^JJn#R>o`6=1@l2XohhxROTKBN4v#@%a+-@H3KKLU-t%a-0qctN!66m}v~JB3Aw z`klfn5QU{T#Fqb{ZN8{4a`Bsk%YRT@v&mcOrbtV|jmXj)63c(k0s@dH zXz0K!Kmgr3Kz;alb8sHvzW%0Fdd z%3+pZHu(ueuUvX#g}_qK|NeJ}o(U`kV$43wQp~0|;9!u1`chyL>K*W
    Qtm@fdckaR zIwN?yk7IZJ_#_GG9(OrOP|9Ii?`h1rmR|GjFhS<8mhm#}sD#}4A+)jj{3=-wVo|Sf z2=REYu*8p}=`~BWqa@C+(rJ-&O-+Ym{ulQO`z=Aci936Rw|p;xjlzNfPdu@@S6F1R zYa8*`USUt7a<}k~B^%DK5+|PS7FJ(%@cb&p7D?}idUR{T!yKY?x3Cd$Qy*m53g{7( zc@ug}JP~DAMNf#gA@1(MPKei$z@?c_329SC8Px|GHPnK`BC<(h=NrbR$ZsTPS&nvb z6q2W28z(GRa&#qwZ4#kT_V()Ocqf*mN=xQIY(kx6IPTPB`X+FawCxU$AnbERUPdZt{B^&Y|C3T#x@G&1K*9q~3(*q<2A zgiRccpM@o5j5K4nB%WTAwDR7aGwaX4Q(tZxdB{RD)*1TPP3oD%D2A}YkNP!AavSz* z)T!SzjqFv}uzxer@3XL$1~=jKngopTtz3;Sh`4=bJ$zFF3XRc~HOm%Q<^?`HLG)${ zC!>=?OqSoQsOU#1nRBS0s2a<*gbz~?hW4(7gSMVW}VjE zEYJgV4slz59rQC67}f>q3k-<_`k=_ghYk>b=@;I*SlgV4Fd@Yq)Z2pA;6PjIOOkEF z6p2Ml;kBEs*%^LUh9qY$uVlczEmw2LcC{yki@dDSol}vjRf`xW`m%&&q~p(aRaOx{ z4;vBJ&D=>{XQl)NSxzeDJXe2~3=LuyOIQ+i@LCTFtbdrbduMdPyO(^vEsS!Zuj2E53faXucraQo`psR$O8iCmH=vHD6ewz z;R%e-`|wHK98^?}tFj9H{x>`u%~mKTuk%)dIx8njP2F?Oz&L!f0P26J!heu}O^0gP z@Nc$R5?6i^_C~;_M1gfca}d)4wGNaAGb}NEFy%2bN-=4tfpV$9I8gcUNu_z?fEY6g zGY&JO_ZlV%b)Ucr)FI$LCDbRFFcr+J|5O9wraxfMg76pN`@$dwEhX(VD6A#~rKE{! zgODPBhub*!(}R@}4ky2#^GIG7&&~Ma68FOKg zD72=xp7!=<-x?vFjt1vXYasf(Qq45Jp4Df9OKH__eU1F-Nv0xN0W6j5R85TFkkYyd zY#M&F_)FzYFOqC-V#n>l!VM`6jh_5FM#yb5rek3Eva@}6;K(BVyNP9=IwtJQ>gAf=rlXKjyME$7i!x1l~57pU^aF3oVqw8(Wq%hpL6V;Z>Ss$OyOgrJO zGcI2KIYCd+(}Wk4ZSy)%GL+k?8Fg(qMCw3tLo42gGd^f!a*Zv@aw|)v>TPMbS4nIg z5>{ShL*x$$?^+a2+%+t`%h0IRe%$Y+Ze1fJ8;3ndCV2MagpN-peR$$brBR3An!ThV z%_G7ASv2HYz@5FOk9Gw*<+2U2(L* zt_FK{C9^oKjLAy5@(9jy8J-yPq!|Rg>KJTWmD@pI>{IBbpW;neQHg|=xO~}3e#N7_ z%rYlK=4|1EB`tLZF_8X`lR*5B6+2O_q=zq*L&9qn@|^KyXV5ENga@nH3zA~luD|2g zz+pM@r-!eVH>!M%s36M@fULqJzt%y%=3p~ATG>51oQ#cDOIJKfv+D_ub8fVc&zBy~ zM0;nh{E}sZ&Kqy1pNA?WV{?P;KdsICGU!ir`W$H4 z2`CBj@{=A)#c%Q?lJ(nvg7^qA9xdRnTnOeL^l9|Y`cf=pvKG` zel7*`3S~Q~4iBfZRt3-P_kw9gF0)RTpbFudYU-V`i6*Oh7o6;Q_e*7xj z`*J+vBgV)&J&rDrn?8346gF_8o@XXHh3e;x5LSd$7F_$(=;DmLjK_F&sTmzn&H$HD zKoyuXo+^+T9M;vL7eKOuEPqc{3&^IFykOa(1W#unRs5?i|Ig>~Zy?=2+y{mMu$v2R zBY6}|O=4me#oJZ*4HJY6yeWs^)}1Yuvf-31lIGayKNx}D>a89K1%zIr7)*G&7KC^w zH8yA)4HP${f)2@KkHBVw(T~F=*hgWD*1Jipn_!?Uy6Id)X)qM4%Z>nQDvuh1YAkr zO7sOSkB2#tln@+g5@pgPgnu;LjWX3pQQ@BtLh z2gQL;TT@MV+LIX8wa5x>?(~;t0!^J@a3?m!vjj$EKe)jAjN=wZq#iM1rgPkQ`j5Ws zkE7aw|2hT!Gr=68>!0ZZH}EoO8ErOTCCbor4*O{lXVA5i0EeLDVYK&wmRa7gEPewQ zWb^W|p(cK7Q-1TU1|9wLtd=hVuj=@BErq3lR&x_E=~kvmI@}4!vxMfM*;#|ymb@cL zw)R;#Hn%dX)j)}SfpBeq2~-Ji>AF+H7_0Q~eN2K- zEB7+-mp_HY7jcO1{uJK!!ziWA@{!oBOlB*3X&@7YCWLht?IapZ2s^+{m_8wFu)NBA zcSS$^qB8A>Jrly3t96#_61@}e7&F5_3fG-5j-DnEB?ck{#X18Ck7{BIH(p zh0QY`qd5+NJI3&M!-yz!uhZz>J~VKp>Q)d`M`K7)swzXm)#^KtrsOFNsZs0K!BMMg zVWULX=`$O?Y2{oSTP0h+Fow3|V}sV8py<=pyLuzXR_VkBm7cCNZqy{wr-Tm^`CQ>O zMCmE?m6#!Axqj5T7#puSSgW5YV9*9(8Jys#6}1Z@w4g`qua*wX{!G9m!jSUT?COO% zQ6>o>Ia67)3_9oK)_u#T9UG*3y0Ql4SwHHVWDknYGr_$7T$z6p^EW91bMKs>5bLL) zBHx0o8jBlt{oQ&|3`>E4(&uAc{`Grq_mg&m@onrF zQrH&_W;H*542p(LKhm6=J8EA!cvD%;^%Y}o>d@&K)}vc&v9T~}5?g14eEzBq@_45s zWt=(ja=Q~v7pH+BbD`0z z&>EQt1ja9VBhS|yd?ccHMB;oZ#+PwK!tx<1>fwn;B0Asj>Z1 zIu73~fcl@Q@Sh}L(}9-i#s6lTA=IXOnmQxA{x55#5z`krX9T8#SxJ~msHtEH*d&Ij zgjyo7$r}@W2Pk)AmV#fvJ~M%(s3n+vn5CFax|pjlUt%Vq-T|JCn1e83DyWP9u?EC} zIbo&$VuYnI$gFA)B>p}Nhh?erg~f!Bw>rd}S$JP@jVL~Q`@}UPYp)snT+9&(mg3K| zgt!;gGL{xQil}_P-J@GhGyNVf{P;<&wd5efQLllR$G_-S&GEPHe9$t*v%Rh{Q9Ci& zVSC+gmXog&ckEPy%!gTqnSa}2mk@S!)k`iRggp)KF8n`3y|^0N)HCnD@=aV^W4e5$ z{F?QaDTX+aAC$i7R8&?^ChlI0^C$8b;Y7A}E#1FaS)FcuYE9B&cq6}j=)m$==fkH; zb6zPiO)ekWi?v|PScIr1gxjls|CN&5()}9BfJR(C)KKxtchBWR76Kwjcv)_Gxi=Ez ztO0~zMeLr#sMHz}pf_3`yM?H-2q*tNuvsi$scoJTjZD0BHYfU=YctasJ{rOCG(e7sI-I2=jG1NvQjan8mAxxa})VOxUE9)W||U*)Bj7f z?2@S%FSJW-N$mK|QDWgD+&biZM6vnp=&NX&1Afk9&3a0}FFXSy#dDW5q}~|ur4|9A zF!G{0c&2QwuOqZ-zt)_siAIE+gp5(w9Cw054(b~lV;C8+Ncr5_;c2r|mZ9C_P+DB2 zyVTKVCPJ_pnLb}#(tVVm>f;`?SY*w+#D6u`p`{}eqr7}=J!3$hv@V@ZaJ}S zDNbV5XjsisZX{apv0uV9m1rc4+dvc-#%)}c6jlQQ1Ow;a5v!KswEjjc=v)6il$Zn} zfY%lTtDtb% z67kUYIJEep&OPCeCQ|`bo2S$gedtWFLBGtXh+!S(S9UyNUOfgsr6RgVcKA<_km6kZ;+rzm2FU0#<%qhTDi_ zv}~|^sMWGPAW~vrrB1$9rnOsXPLp+U%LebRfXEfl2j3oQH2{IwLW6$4$@&@AO$Tbz ztX`O^@i5Bgo3yJ2Q~*)h=2^W8-|)0pyXnHXaaM2Su9}0O2aLlv3z2}xf2hKLkN^Tu z&099W;w_kExVYg7QAY%4h1w{MZv-~ zE(TX|Fc$sGt>ws{2x~yHM+2%`AN9>#3(a;>%;S>Sa(JDqgE8B>W(s|LxZ#8^8rT?j#ow>4v(Oy5As<+;gI{3rgGX=3BQTN9Lw7XOcZwG?`P{C~p*ZFI>qR z&boF(!HM|6rKaBK*$MY%A9u47NgZwY)ts_^*6c^Yb>dGN07Zk-=1%Bq9Od_dkdYu- zV@cZZMXx^}hbuATf_MN^7$X|wO15Q7L>enKNFOQ6NXzINW?%HWlTp_1#XBc+vurpk zZ`_1u-4H%n;t;P%Z_pm?K-rsuB2Jc(;YE7dTP#jnixyVls6PUDSK#cyc(5eUb1E~V zdpKg&D+-**OVKS&+m^lY=d`ju%4}P~)b#5qgA`)?o1H;RUv>By9wBOI;nsZ52JC?w z@|i?DsD+avA|t}9x0OslF)!XAylMiKj0{RenOO2m1pbab(!*fi6W~lp zY==fbhJKGht5>xFKquAH-W0%_F0qJr=MgD?cOMj@W9ys;2?S9C(PC5~L*ML~5~rFn zTsGwffI&>@;I5tlD{W#J{~QMSuoOwq%>qsGp=0*q&Y7umq~nu=AHOo%nvi_ngy+;4 zfJ3tvbuWaK5C-t%R}?=Vr==*$Bq>0VbVYBIP-v&4&W)ts!{A;#2JhCN1i%s_;B2$E zwAdfv&oS1JS~`aK;o}5zhD8WOGT2@7z?2&XU>TG=HSGSxT89LC4%@l`gv8Cu3zvg~ z0){Yv3uiD%DW0<@yd`7!)~aCor&}H*i5@@wH~_&$N#GDTTcEW2lSTmaa*v)6AX3bH zH!VUVAp^Z54w14@04i=8j$_yF388wEb5UHX7?1Ca9~?~@7%c=Si@FS)&jFARIZy0b zjWb?~c-it>i3(!4pOEgjE~nvb#T~TnxRHsxbn}Q7crTAO$ToqO_Y}d)`(EtTUtaT| z01X1vV@m?pt`}g71M^@|GzJD8z`&rrTiCQ%z)2F`xl0!YHiCb{;Z_!UiO4;Q7sMp9o)J?S?cLa<<7LXC$fQvIsT2UE=zoDyt1(b2Z61`W+p7=` zpj6#n0Vq|s_ivz7v;dUah0LQ;pLYvTsZ|&%6)ixe6fulw*E}etgthj}gHj7E?gLA3 zb}kA^B`$zcW(izN6qJhj1qG#)_bD`h;>!ClP)b=-?YnP4DP*evl`<8KZpG#}Jda8p zJL9+xP^kq_%6*>zlzJ*~J8*zMw+le2XlN~fQdSF~)LIObdipLb4+W);VQc?<3kFK9 z)f0eH$jt^FT|lMW1=6+&P$_7ksMJjXDs}i9Q0k@tl*-3cK$Qj+whBP0g}w(3--1$W zzXhe%2tcV^j9YmhfKrG6mAXBTO1(o-sha{+N?9OX8M__9r6o=PN&zbhN}&>jT0z3_ z37LnM%9@47-ilcBDAw#Il{<{ng~+tu0iL=k$ukN6c~{OmgLF^D)@7*Fhn7nIndDc2 zhqDmtGgUY{{e0+1w?!|S-CK%YemLv+dszCMe@hu|q&nDefG)(DzS8n#FLS8f@=JXaWAWP z1nh!aj>c$G@f}sO%t9>s+j);|6a@@v@7%M&y0mxPqZi}}E9ks>n>_Tc&W4|YFqhYX z)>&q-h#><Vkw0gNUp`&Zn z30pbM?zEpl)5Sh)uhxt-^AR213x2fKe5E}mTG&^SI#OYuIPIb69 z`};mS+3{^Wanrp`)YFCWRCbTeiiB$Z=-Msyh35P+#UHp7+fC#3y8Sbr;azrxTCLNT zg**C3>!)hNf})X`^+Ulk>wBlBF7mX8{I)Zs5T6Zo+zo?1R95Tk6NaQ9hz?-MG7K$I zHa;0aKD!>*v&2%-=~E1M6miXD@G7!7B~}N=X6_h&I(mXW$9r7+i>Awd164Lh=6da{ zNs3=s8qY*UtBF5d+i-a`X<*cBx8H9rjJi#Bx@6+ljB2m&hM*Pi1<`%hQ_%6`RaR1u>xZhSV;%X~S}d*v^_2IztL=A|5jDd(AL+M+T%!*yXIlqnKO zK2H0-Zi|wbm-{WBG0bk+KJ5!UFibyVH)vcp&jj=SV`ctb%-^I4Y=qYlL=G28l#<15 z5mGPqCML+?E+GGhYS*l^lTrOf?Z3_UKWVM-t+_3~=>Pw4A#p?wCytu4<}Y*5mJXJC zW2AuFOk5?4TfJoNrcX(#EWij_M%7!h>mr?e!oQ!3*}EPdmikgEoA4TW^y~4CE7JtE zWwj*7>Eqq(l+y+g{cA>__m#v3d1@Eku^sfW-OW}hg7@6jF|@z1Lme@r2hrD8uU;W9 zx6bUq_So&;G?H&0Uw>j@1R6@4i-gpnEQf{?PKoHf4Y!lnqYM#Kxgy^^&N;58+v&HD zmzp~FUVHOeB>H-~e338Pa=ShBZ7%XPc0LURnG20xh3M;vKw#|L8~Nt-!PP4i^$@1k`GzM4D3?WFmw;Zmb>4}`mC$kcW&zayOojg>0hK@?Ph;F}Dc51> z;SWkU6g|{3xGi$k==O0GJ(OEVLWNoAL&rG%FZ^vzuKTvg6qJouvgIQG(8r81x16@jQ2xwc+UIwEd) z*g@AcAm`e^Ytu(76!TRx@0a@~4v6hp_RVOoTq`7!5T(^|hlugpaobfJD$13hPvTLG z^I?ZI>;l#0rU8d69<9(hBK~&fq3X>8XbT;Cm;;1FSv6d+hDpGoy#o5Af!7Bg#q0sj zq=CD4fTi;B3PrfwFIQ4%-KUYSdJ`0K%_q*P0ayw1sS2%tG@*p;I4?YqFdZCpLFznZ zh^_c_(AZcoVOQ(E%@})cBuEYlICNlP#yv3O7UDJ)T<{W@g|qsj4(m zP(C$RP&m*xRmd3Q&$gEYhqbP?^(sQV>@EBfhGV#6CMs&olw%z!A7-c_CrSK>@I|#) zLYY<9%rFEFsw3iOM~t+p#aV?{yWHAB0y^*}2j$6|X--DS*0c=zoCac@($G<;_S8a> z@PZeRcSO@Rv?AiMa@ynBiVa@G@6{Oeg=%Yw&y*)F)*-wtgTq zAEVYx$w{_rk+v4GGF+1E%1k5=zIo_sxr)ba^{eRD(;MPV9Nqu`084RrGN&CPua8H3 z;bpzUdzj`%^1vIFm59EL$huajXbyQOqoGJeX1FRh;$>o6Bm3g-BQG($fkpEiHulRf zkB|f$fDVuYb=sy;UWOKvN^g*tp_=e)tEuuv+Xj8`woY29H4AQT@<_XvWqZ1z&3fO|mXr-Kf>@3nTfG{-3RUL26!fS1J0gVW$H&qUZM89i6 znUn;c#SE%&LS*|~3#KB@{s74}dF#)?cfaZv+p4O9@m3?BWs3k%2(%Z?24q7f9+}kh zgctYWU?>#bpiTAIodKCVj?oX(0ex_kp~9;kuJWb#ur->_GI_DY21}<2Nk(?CB?&&P z4``;$V{L#el>Reh5kqPnq7hO|^s^vW#h`klJEa+*0nTh&Q(g!Cz~WI><6VGPa7`}9 z^>Z);V`TUSI^DL@|2@7zDf$cFU_2J!8wS-s5!a3iDvX9(Xc7(bzh%)x^t6{u zhIv3%P0H&uno9O_Ozy&aa zq(p;kGGGP^Eev=_hTIrPJV;7JTQ41us~3?Mg$>?L$klQh>AWhW;^bMHjt5HvI*}}g zy`josFR$`-7Z~s+EpIf~+_KD+=@Tab@YS9~b`_c?azOA#4zof+Ok#r*v1lhwd2yII zk-ihBsYNO%TUs@O=3!t073D%Ir6)wc&=)zONjJL^x!%j+&0VT4#HyE-%Z@D zgEK&?Z$nNCOqSvTs5Y%jSrLJUKn4#7~}$4e~yab%W|@Wuqvs*F?PrgvxdO zMc9RV)*5nSluMGJ4Prf$>;ovAfLQvczpN%v?o212 z_fK@;J&Ctb6sUk|%>WzXyg;qL`dWA>%q41IBn}{8zg%8Oi)~Az{3s~YB1Z{C4N$-g z(5~}~2>8&HA3u2XIcHjTVr*jTC%6&LC$c&FKnc`e07RKuBB&DJ(v45DP}atKSw}Dl zKLbgT;h<0}`1Hklcuj}qOF$u@8G4*-4rw@(yFQr)I48RBABrAPR7f*P0wN6%E7Tfo z8pmD-*nwD51IHZ@0a#r2dGx~UP%5!4Z+M(-)$A0vi}Pw$ybv+T3hi-py1h%KE>o(* z6z(0D>Q>yN=EO{9;B$1EE~jJ|3*%)2evu09y*%(7JP)V?dMgrOPL(gp5 zYL%6E=438_4~hMy;Ug&Cpo`)S@^vWQu+&=hCPWG z-jImF4SNz7;D+=6f*VXwxS{UA()pE0+TWy>0BxmnznPO*W^_D~@VL6uD zAiHZi;K9kRFO{U>2`6fuNy%XABW;ni(ZT7`izJ_Wl9k*JB?|pFwjdEBB>Acg*+d`r z^Acpnt2*CNBTBF9p45x?cdF%il>=!$M}>Xnj-AaUOU&n*^XC|p=kKleq~u)N zYP{?yL?^##tbVj|wXFHV5VYivpwUU|y*O!Ny)n*?c*Gbd@nhG~$Q6%P>KuVMq-MkR zqmg37xji_)C1^KM(-^nqdkJh5Ubq(+{fLfxaUy6C?WHl!i>R<0r?o`u$Octn_HNud zB4Ib|;W`3gPffb@+0vZ%*2ct*yKz4eqkh84%<~|qfFDpDeh>uSK#m~r_TJYxr8jbG zjmS~R4M8LIXrsZWWVvQ2{1+GtylrLZSrxF3^Z0k)qpu;yHgJqioQ2nrr|<79b}@^A ztgba1ShE9jRGFi-gC^HC_;l`MhY>QvCK=6rq{Q=Q$L@6n6D9aF(`5zxnNb-&U1OBo zDoH|Q*fj0<$K59gaTCM*>A6Yj=i%`)SWNiO35p-`IFRM@H{}?3dje&3^b`ee(wsxy_CD zm$@q)LJk<`@7Z|KZS&jTuJ1@zzn_!5S>$E&ZPyQxYxYWhupR)JAt2LuquHjzKU@cy zd+(?1*dijo+FdE-!0x)e>86SwtoI~D9=^HbPs@EbbJn^m6@kco8!xi9G~O3izH#b) z&Kg;fmq`h(A7XbTpS!>5Q9@+I8QEL+CES&I4;UlLCdcO?x|<9yTQ zTNK@u3{8!fnQb&X^uanY@ya>)cI1Qgqr}L>lpV;ansKj{AIRm*RZm=ti@rAFTaTBD-FiX)Qap{O)mgr8pp6@>5NZ7dK?sv<5-in-)yzsN!LGgRMZkelukW6zSNe_$I>AXKouPZBCb2Zz( zJF$JwvjfS=Z|{mu2)SAP zaqFTrM^Naa?|Mcl|NtaT^jY*WXf$ z?s)P!?(;~;vy2yS#Ota^yd6*jxQwD{Tb!z&8XEigf=BdcX-?6d7f;Ne1P!ruv!a*A zdmv@rZq9F6fkThAiu&1^%>{~W2DE^H!4ocx1j(AGZnw0lyp!~cZN~}rYgUo7r=n-e zI2X8m@OY5h{ySqcOES2DZxko1GRtZt8NP!bY3j6qvWYhV zU)v|W2!kJ88apKO?5ym47%?oz;fv0V$k@J}^oxBPkvF(M0tcfXGyEhuBW;8?>G4zd z%O@m@m_M#~HW;lPA42jrlx>q7J?l5Pp@_*g=#&qUDq@z=$#&Em+SH=aK*J*D@$n0T zdM=H$qSAVQ`)L9z);vqAh#8tO^13n`uBuTE)Y+Y>Q_KAZqqBUryNq}n7EK_xv`c)+ z+3mdj_S(nbI#YX*8zg4lGqo| ztaduiH%3Lhs+qFB=}ltcY&kOQ?_5WFk>=nYBjro)@U>+g_qd~#ti>3%Z)mYuAv2n!J2F~HI__^@mdD$5Yj{+WQ0|0m4XkFv>7|S0_vk1)$k%CPb%Ja z1=Swx=t~s~?Y3`gbx0;_jV_^_R@+*{c^l|e9qlrh;rF13^jrIMU(4&4obzbL{h4rZf?5>_AFZaz$>uU9`Hbr(x5ZbaMOl&Wp|~Vx9hw290rDyz)-; z841s8Ft_s zVaA6FRIQRfeGmUUPy0Z@bvGM8X9r+Tk z-6l!)9!VH1s!eyPxu7#a+2|1$Lpe_q^XM9_?`)B=d&0fJA4PwD7{enabM4NJviuvb z(~h&>i9LlUzWp#=mgW+#O=1LcCj7L6?U>KX1_@z{BK0CGR17DN6NXCBwc>u#39>?b z;WuVm+%j)NlPBCJqi}x(aQMMr?5KWKPtC)w4P7iyrwkWRDaT*aD=LbOY9~tycweBc z`}$318v5Jg(-H9rT~Frw&QCIKPePo;gTnDm#|fTIV1Qq3I%Ci0k>Pl)Hc3*uI~Wjm z@0Omoq*iJsa_&p2mP;KncCdG3m|?&v$u8PN&fH**kLoxSw_#hH{#nkeiBjh}zk4j; z-g*Jv{m63) z`_3xJM@DgqT$**Ev>Vn|Kg%nON~SUWn0w7YzztU&J0}Zyb3L@urDP zkw5#QK3d+1K%lCbc!v8G@1P%?z4277z?a-H!SJ3_@%G;tWMkw!8Y6M1*^vN0Dj7)~ zoh|Y0ytww?hQ-5%!YR9~fMERS(T|x?d~nWyLnzJlClc&!jr?^cG`Cy45!alN(I@kK>yluO2LQ? z`llr0js^MQU2w7Y5UQ`v#8|C5?Xzl=o9AWO5hc}%>}?H_BM;_cReU}D5(5UK4b?4| zW$25Nig2~dPL)O#6nR~b7Ar(8sn$U)IjBA|9o4bCseK9MN2iUT*s@yJva*b6U8n1M z)K>H-OqE=bZ{#8_S)>FHhl_YDq4$gT0JVK7g^u{3Jrc2oF5N?*AT6+bkU;+sS!a}W z0eupsuEKB9RYp^Hnik8>-j3K=z*;Uw5rH2h93x$KctUUTS6w?bRN3&av7x4+;c?;W zRoj@qz<(Kh#@_a}iSbU^>#stU3|EhE{xnD!y6Psmm~Kp)lB@hIYZ+vV$S9K3+5Vyq zjO;#@s!ZD;TO${l*illA;f1Us(OORJXYWC`p{v~UFR-VVCl+Lf5;%MX7U&-fC@JGj zZ{VE@6A|J37Ep^{?<7Mzi$3R8#0oqWv?OcOZ-vvhT`vPe<9u$Ar;huK)J6cI424iM zScY`h;~jIUh3ZBup7>?5NwN7{nd=#3fOmMt05Qx9Yad9|q(_zIP92 zw**lXTX}x{YmSS^tLmhaviRS|jBa`?uH6V{z)*ZvdrUc1kT=o_J+-Gp1M_Ryj9FRQ zdYO<~on^Juvl6>WWJB-SsqRY6IAcAE-^Vc7z(2!geKRNVpCvA`^THV1tH03%|7)LI zanvY^3k9^$^{=Fv`zAaF&Bs`OSemPY2>wYd&iIzBba^ahx z8%~-1zd*3+?{g42k8tw)ZL5CWgUtzpx81o=lzU;O2je1gD&42%6uEMY+;=i}s%BUQhGf$6E3CBUxmUZ-8D`=@3gEeyMQ9pgYd zK%{^j8mDZyP?7r^+fhBfENC?El6jE==K#UapeVTMU-n=G$Tv>=?1#!@0zmOIbw83-XHc%Je#3JMDOS#%bk;Qd(F! zNv(X&F0+e(2!(jR`;%E6aglvj2f3&=JWQq0sdGN#9$Nh1KLR2fZ7YUD{@m*?7c!^2 z+SL0ZFR{DyfIl_V`^A9<`{B8vOtcOpJ2y(smN!=_4yU!2jrxQ3E0R0KI<%!K8o&eX_|@EZqk#(IVMfu5GVI5)XcjI_2Isw4z6#sQKZjIab`6j7 zE>V8p(%=f60Yn`Qj9hnN$pHz%N31M&E23LBxB16eytr+ z5Q3Z+-D<RBD7#%!1xQ{8}DCGa`EjRELc3RB@xqLv_d(Xm!ZSn((c0_WtymGOM=< z=6Kcx(oI>Sfi2Jcb0UkqMFHxCg=CG8@&0wRk}~R>ck)gQe^NBmip*B5g-VSaHtsEY z(d$enRL9)97$ifYe~m**b3qJ!Ebi!Rfb$IY@Y5};NggWJ4$XPIk|=R4B( zV>8Q^fzN`UeZRA;Z~OO|b!$ls-)#}z4;XSjctp$>FnV_ky+5W`~**I5{Dt8wzU@ zs&=-d*|R6)?w#|;8H{{}nwC;uOGSf}I^nF-k@_q%GJP@SS-H!XRJ)$zk@`gMvZZl( zhG!G0+uOWKa^77rRpoZk*Oh)=w_fIKkR<}< zNOFdo^6k7Yv!21>sXIw|k&_p1>-UtYj@&8#3}>^}V%IxXS30AhIAkdgPIOg)>)HUp z)!`E?C@xm*NRVZxzi2FagsXQMj@j(Y(U>m}S^imiy+r10E*!+`$7(Sozbc(7B@ATS zoeHxpMF<0P23C0Spwk~otU6XN>}+5gaM6=q5ox8y)+`$iocf_hcj(Es>(PU{kDY`S z4N*<=^&uzW5Q)L6Cw21O6|fVcY-u(p>145<)_@(bQ&rSS<`q_O?kyp0B(t2gPM0Q- z#@dCA`WC>Mup?#2(k3qgl{`sb%wpnql`U$T8u24VL-Iuxl&Z|u@1axc=T4UOVTuR6 z3MswiK^5_pCY($%mwpTzC4j-N)MX%B;uJjvDn@2Y^fcsULvct##sxS%^pjg&=*T6) zrzrGN7NRtm707HRP2&?YYt5BMamf|6LO3R zzflfp2`ZDys4_3wDG!0hZ^#dqY8dp&tTcCaBBRY^ zE~E$8A*Kf#f05&#LyvgfzECIfF-&|Ko45u}5cNABDbIR|lzE&El;_&o!?Ch~@&Kt- zk?hC4W%68Y;UHA(L{ngLFoi;qe&{%;Ib_xpx_z=@8~IfzD1)A%3dU`RLXi2mpD1wNY9{9_On{!WYT1Z9>#y{|>_jyJGao>y$P?p^ zI4Bi)YdfYS7l)prHj1(;8+t_{CkygiL8zQ?nvKT(Ib13aZZ=?<>cD!2yZ z?xxIV*o7|qF%Mk=y;WqUHZ80@FaKj|!&&Tdt;os-p|BJ0_D&9sRo?yMxs^?^3LHCX zPACCOn_E21o$XMks$x#H*Cf{C4>p#<`lYA)na=IA2KfPS+>&AqRw}Z&<%#*Y4^lL$ z;8gkoSJ<}qV|NP= zTh~c>F4?Y}aDGy-Uf4|oa;6gCd|RhPL^%KX zH=F4`Wb>%OoLK@(mIgM!A`5hI)Fd~;?3LJk9AerwL$)J~T=rABz(P4QC)Wm)^>+e6 z`5EshxOW1u8*VUhLy+P~=0$wrBdJNh0q)$RlQ8XI;uKPjS_d8m>l`qh%H{Zv)ZsAQ za=C^ta561SEqbI_HLc^U%tKd)#6pKa#nvb0%)kyDjP-ZB52t2^_5@nN8MLKmMqH!6g#eVIWk`{k{9F{pB~!d z?Q}cc%QRaGSUM8RWF{}4hg%`;3p&S$Q!)(A1>oTfT`w@|C!kQr2($_aSl^vyIJZ_M ztpcqW39d&gM$%_v;K_%s0PGSn;;|m~3lGT=zAf z>)f8&^+8K(Xv`DBvh_<}pLb*d{(aR?i3{eB-zgk@Id2{I%M;uEgXeqv20>0E~Y%|HH!;WYho-g&?W}=tKJFgUIRtpFnB#035M0uyP!K z_LT?s+XeH90_!dLm;7e181Qg@^Rf9&HuoRI`Ty2J1ys=hkcJ6V0C&#?y*2=3K!f!F zYLHJopb3;w4}gBlTss2-)&sbqx|%neK*)6fJYeR%t6fMh>r+4jkx(R%#9yK{hM~0C zQQ_`&Mx(m6{dJMCtpD|eQ}w-I%bvG|V>OVZ{~Q$gI=a2-{d!BdT2V&wmXEEe-o~k- zuSqaNdso#7oFPS)>B3RsFLT5qJQGsmNXO}tsyO+J4}kM6{ar$*!jZ;`(?zu!fc{xc2cQwa zhd(Mrz!mbK##VqJq-7iksRh76+#G{|Ez2}d^SdWxL<|D;-zUG>NQ1t&0V*J)4nUIa z0G5A*67%NAAW;4(4BUk)UYF%BVPGkLs=_79G+zC0s&q&WK;u#2F#Nl45s-O1IP?TO z0M!4Nh<^_{$By^V$3^VF9D=2S@{wt>ED~?r%;t`NHU!S~>d0Vco9@`99q~;kr~b&*9u}_1XLi>g5qy zO}B3nI=;KRB>}evmT-)EckE9sdlzwB?JC7f65||>JhxQW0UxgmGrDBoexpMIQWkMU z6;6^)(jom>63+gkp1fr8uhQQH^hjJq9P{9;o;iOc$mA&byYy$Z@D$zu2?6jAX8(H@ zAFWta@_r|91n2w&C({fBs}AloUM(9q@^jKK>u)ao;EF$+erpO&6&a)cJ1HnQ{~}BZ zI1_2%xF{lKwrox8Urb|C|IW{E?aTcYkp9QJbPkLohrF zKmWi1%pKzoeZZMJVNx{mIz&NOod60TxIb96{;R)r`V+Iid;N*tU%LNE`aeqm{5QM& z#^?WA23yO&k%E=@8=L<-8U9&)bjjuK}8+lhg|=d5G4r)Ro2oM$}F$M=bjKf&AlmQ}~Zr%WI{)I{^uy>0375wDDn^7XkI zs}JjwKt}kUY7cl@DdKVRD&oGqom_o6nfvLBOpi=i#1mDxDV!Y|DE;%V5_swQUH!E> z^smz21R$~rfDf%&Plq@bAX(k9T%`v*xsj=hc;>+zrs$Bl%0j`uhRpRx1?d#%t{1=w z(wPJxLUI&=yvM=&h&~no;Ul4q+V8&pl2`zYzfXQMq69rp0xCe-eE>&LXD@&QIxw6L z85{K23t;HH;Ebn(xW|3a-|8UkdynlkodckXd|C4F0NQBHC zG*;i()|yO@V~PD-Z7*ksB%#m~HCo7PjaL^d(5!1>?ULPcYm5Z07bOE=z1?PC#&7cM z{&*+N*XtE}E*RcrhWm?|+np~h-Kd)T^?E7=^w$&n`+!eEQg|@2gDi<^!5z75h?M`7 zsN;=TfIkr5eq%%YUHpLd1d76K31``|R z{ChK)I56U$-hc7>FPVJ&myrL&MI+cq+6>nw&Inf(FPOCqu`B8i>3{GQWJ9F*M?qn* z=s(;3P|yQB29Wp=;2jEm7Ylg2e@l-Cc@6=%f%p9^;e~(e8mM4~8>|*=ByWb>3qB0f zcNu2?-S*dL-zp6KPmUe8YM*yPGDT6GCKR`j?BJh9j82=r;|BuxM{>yRyn=bh;K>w3R{^@@PHb4K9 zi~KM7f+yH-Y=-Gu!S489u^xXi<)O zOaGeLVDR>=P^7FORL2=KP$*!}La-lgUd z{r5G~zrlOYKF-~O*GVCX zbAq<58@|_HKA*31mYK#p_A-*b^Fu{8L)8IY5)xEEsx!eP?pa1Z}PQg-K?q~yw zM9jIzJ>9={LzdkJ=@~fxT={-C?#nd;q? z=&O-YlY2Cx+l9j@6{DI4kziO*DG(G4=u;{j`$k_WB)AqBYLk=I$0!FoiRUK?TMv7> zjDMKT%RSswlxTBog2-nCubS{0}mmcy?I;u`d z0jIS!b85Pu_fVSLnv|M&hy$@{s63b7(oiu#?b#kfJlaV8mob%i&%snG2}@Lr3kb^jiWQknpM_?@qtUPB&y<=)6E5QeC~XZT z7ae!5qG1ez%ba4E3YAs$o@dF9^+qI0Y&=#1-7%H;9d3g6;!NLKPKigqdalPavf8j$msz%K5ArL=2s&w z`$TqHNEyLNErA03&OXYdmMD||Jbyt~@G2*C=ymVtep*K)(lPz=aOW9b%O@*|_UT^U z6jzw)?bU-qXQ^!0jY)&acU62C9Y9Dek@tzTo$GxtvsiZKMtAaP7`bPI9aW(&d`xs~ zLIsHoiUbfeUGfya5ib3WumwJECXM5dlS;|7?{n7T6U@0EE)7l2Ox`}ib62r==cDDx zcKUe=&hrszSgF;ezcVPzM$JJD=Em%ED2=L(HW*XRZApFL!rTkQ`F;a@TxJlF%@Prj za}j+8vBzsr!*ta390GXo{S8h^8|bFk1nE4t|iKg96mN6XAAxsl%2P z%s)o*UaJvz0i(WAFpn`)d)Ha@-I zeM?P^xuiIOrCm$gYrWUy*3z%F=QDzn_Q$Ey=d?IOR|_k>E0^T@H?FmIy0RoFvW#Pv-u8^nhqd+kVINnpJ;vu`g%@wkyN;;#$MTzQ zS`CSo;tj(jnkq8CuY5kfu39KX8t#H&zVcZFwd?(wYQ=fr+LtTg>K+aHdRvBfj?Jan zXM@XbGvC4DG`95E{k7F03qG2FmE9P%@JSjdzonB~Nzk9y3ifc_HuQkB=o9# zuWSDR<8Z z+yT-{{F}tRp-KsPR(S!_2AhO|of^{wfm`}!g<6W*TDCjQz^{EWU-zOe6^)!<7_>eB zmq_26G#Stcfmv;e}CuxvC58R%)#Ad_>+U-s&^k@=_PC z(T6(VNIV!1V5lD95{&4SdVB}$s~?|X<|j7R@$3ne63TTHOJl#U>6STf_!&(1srTie zrR-T&Hvw1f#PM{CMpYZ-;(=w8wO76$XrlKmqQX|?-7qd2uY81kKWhmL7tR`vnUY5> z3cTR-vsvP4h0>Ex<=FUXM)ug|Q{QskJi<|HqD#sW`;b{@GK&a(_(WE)3|mdn?)L6! zk}KO-=goKWg8LT`Ewm<(vyu6lKFg)3l-XSSFr#oFvJ#V5!PVq|ndHJfUe90=7`zkp zNz^lskZO6v(da}zhw6CmRLMw#M!T+(aiLP#kRs)$uG+3`ZPbq?wwfN_E(i_>I!Bkc zqhv9wv&A}7X>&OmvU%dBWao;njti+0^bW>#(NfPpr8u?cafMGK9t?C#GUO~S&3P`hW9F6VA8^jt$S z;R7Kb7gk7cE3ny=5XY(B*J4{6DZhP>;Zd4%(S859!U}(-u#gXN`&sBd^>^G-ybb(eUW1gvLT%?a{yh>9R|B1IK#+t}!&D zvP=Y>tXwfU*!U>>r%r87nvI-tjqa><35;6OtZErFwS;C{bCgy%mJ_nM)r@y@xe||% z+BQ2f6}H?qzovp&cRk6E#$5fen}X@xis!QG(LKu~9o64&kP1g`mJSci94nd%423x^ zoBznLxPK5`1R}Q@@?EgnvL^=Vq=eIL)HW0{W!4X#8Vwxd`Oe3$*-ZF~(xT(xPZj z0dcOXC(HConz6^{t-WRjqUKNe@csBI%D{nuJ?E_+n;_Ui zze%wHcZG%I-aM~g$;Fhu4{zty^gAKWnBG+cS!)ASaxctl;mMrKgUmX~T{*x#i%j=ARyuz6JVOOS~3d?NYos)fCkU)%ZGZ)j}O zg`^_}lJYv6RWeZ0Okv$%ci~D!p=cyL#*3g$@XZ^mGT+;!TcPIXyq3k8c_DVZl#pz_ zNbEQC(|2R0Ke&Nygs)GRU3*H88$+ifuRAY8XI4G)+2BM~cR?gy>BI#?@ho3H%p_ME zdO@SS`b8axbij<8aT!ZbqdS?|#|2HMS? z`#Uc=hHT>0?uvfy;Pg-IjBFG-!sm2WuxD^n(29oShOw@mdKy`%`o#B4%hlf&Ju5n) zI9p!_jOibVu^WmEPkOM46(nwMHUYWL%_-~3Ffj4f9n;`AGM8D0Yc8`DB>uQ4QP$z(gNTVT-7A@k+0{s z!C?V36y(J2k3j8I3Y+>U6Zzj=f*KUFy2#pb^%(2p011Qaw$}YzqqSUnZVy+NI8ATX zKt@ar7QZ8;zCN5qU&;~cGTHW{!KnWhmd;bi92&1W^-Q`so z4gocPW~4TL#}>ml5b}I^i$fVEua32LC0#WxF|~hCR48>}CT`jc&dB*(wY7Jf{;GYU z`l%)1%KQHGAmknQ3_q~3C2_>y{IN^5SoMT=`eJ!1PW!S%NMnuqm)=)glT@eBiJ3i; zHlK%wgU5I8TW@%PANQ<(j;)5Un61eT1)q)GTy6&A`&+dRG!kt98h)ns7D@%?;dIOOhhwq)Wl&-EAo#jl+@ z{p+7sbO5wptiVQEYRDb~9G~Lzd1hZX8n4#b0p=$ZH2mWbRHU1UwwejNt&*CCfx4QW zK!K>chHiI)y!IhfXMRcAT=Bhc=eT(te3Diykt+DZO_3o(5xo&hxOrK$CW*nWD6|z# z`&k*kj@I0}nHl}+K9A7^-_W$DJS*SBJZjcjhh#O?5Ch*fFW5u!&!3ou^=(=>O794^ zr(EN%kMLu+bu@!YH=J@D5zq87P#{)EyqZE}n|^a-Zo4isr~|UzY>#|^1hr*D!cbN+ zF8`r3ELi8dv&)$^t*+_G#l;R{v1Cz)XD(4z=579GQTafj3&rQo49ikKexv$NaULeS1pzOlTlCD zGxIjMGsCejWVa^J;aT#6%K-N(;Ev5y96ccrImM{=vzHhgkC4h3*IdrC&-`df|<7GdPw z^2c!+?At$}h6X%pwxN0kxL624xmT@0xtGuVVCUdb7YP$9xrJCQ2KK$N->ra0-fj7U z1R{tq@w?r0hduiZMBMU<1j@7beF^Zn@p-7%e`Ig6Fz~j={tC8+Jt1ktO=%!O9y_M# zzN=%|^>TwD@cC$MLLHQ{od!lLCJ2nsUac}x(@s1CR}ik8OVR$6m;weRmX0lHkj z?QTkq5yo7d@jSg+rQSPvrVUW?|1ypRRm7Et1PQ63)T4sh|8Q!8iMkJy@#F#Hj-q#{ ztbw}E22-LXoJpXK%Gv3)FA2&C5atf1F8WgEgj00{54oawFAQ$=LJR6-KX4kjEhHUR zp#6#}0i++L3e(=8u)*;BL0UfYMMn>|mX|yl5>hAB9rd7dz1_@3W*d_HIP_9MBvS`+ z1RHffK}}-h46ZS+k(3m#k>*DszMxp$!!jmRBWEr7B$ZelHZy#P4|IE`05pWr_!hnm z6l5)<%SS$Vn;-BO4CS`_HT^-5I=#9o!gMz8LvUbXe~k{nd|XYY4e^`TSjsA#^iMs{_k#8>)j;=8^>|T@ z&siEoBUVT4huMC75`~bc+6DQ=p<)5WyT+=hGA+}SA`1y2By#3?3rNTFYQqN6lsQ86 zn83)WY4eRGpzg-oFw;p1Pk0BH2MFWXeuSN88^ekZoP`wWfrgUEi852+g$&(2K`?># zXRMr;Xw0;1&DA@EdIDOclfZa!7PP(oJ$KR1SFg&+w3Xjm{XQRrZ*8DTRX*Ha>N` zxuhKlembZsHnrqPM$z!F_%pyRY|t3lI2C*Vyr<;#ekXmu)>q5=erzbl?!=E9!sDXi zU06_+Xh=e1312f+@Um$Lw<%D?l|(X!Og~_L|C$*j{;Yz!Pu)1-Q7aA=k*q7R(Ow~J z83Xn%5X}SsAVRL03J=e6E25P#8a25kk79T?uFSlfM)teWwOmY&WdtCsDLpXvANXuggSrx$ z4=Q+RU|rrzNSh*fVtcw~JFut#KFpL;W?Kxqcbi7r@k#9UXp&`{U-gozn`JYuv+ZC8 zQDj?O^=e~L%12KCv2}stRsE#uSjbllYz0?f#CkD`95O9jI1R9%8mC<==(_IUrHg)7 zMW^qAt2$bd1wt|{5KpS;2=|jBd@8{Ml^r9qNEMT}Ah(tjDl%4~c3rZRa_-g|uS$$^ zfcCc$?Ubm^v|x24njpOzp3UjWMr6k$m39Zul-&=Z0iaBO5g5Xo8RS)zY=?Ob(TeeN zXefa&DvgSSlyUY4Ka3zyo4*Ji@Hhp0p$!XbO5pQRgmfv&p#xihqAf@I^-Fs6dILSI zOH&Cd92kj~k0O~%GJMgD`&!3$in)-U*zaF4DdkP=QHL4^T01}AP?h>&lIBT3TM0Mf z`cQ8(c~98IeqaB*joukx}WU%tII_$=1Al((#Cr&>mgMMb&JmAC3O0dENC&!cpux4`}|9 zBOi(s(z;xUGk+dZMvc&b{dYS&x5!w6n#_Wh!kt_vswz$ejFg>7heYi>BQ!J-`VYU< zXjc8=e$(yY+2L+Patc8UQ+c${6cpe?8Q4nJm6}6&&ToEb{U%|US?vx*R9*b$eFkaR z^c>q9x>Dlr_cNBG$t*Lh(WnX9rUVp~j)4iRLLyU{jtEaiJ4DB%d_&eXbNU4;*HeX? z%{qZdj0Cy@X{a?cPnUW480urSMVb(onU44kK8t|>c^{K%cxjZ#0-%xoJs;2euJ50 zoit;Iy+670F;a5W<}wbvG^0aQkj6$=4O>mi*u<)1y{!pPWOb)ArsB>quiY<(2RH=- z165J`u`zXXA;IOJxYc`hw}x5kVC2}73Bj{;)QPGDGk1POU!i#0e0%r?@>{1$6#Fs= zJPqrz)D?s?mx`R>A%QEifw)eXOXYJd(#xB+pVE_M*#wNXJ_G0$#wby_LI9+4nuEH#%P@xR7g! zf6okn3J<)edO!&SEUe4h1I9{dft-(`+F>V85sLS-rzD}$K=87%UCeOHnJz|35bXdV zGA1kDDM6QMf!UA@-X4Z!caTN)o$!9Mf!QhcL<9d)t2-fhsHo^K6w3&a;bDlczreUX~j|qAvz{N*YZ=z}^ z+t9bEu6aHMHC+kg0Ua|e**(?q%)l5=RN;Grw+Ox9bYrTzY>OvP6&~D(H&!ym{c2a? zYvk}!5@UBK5+ak{?7^DRS?q6rWY?*07xyx$gL8?I;HJAm`!lFu)3dpG?e6_LK6F$P z!lCPHd5v`R?a||Y5vq?p`gvcPc})!9W`#8ULU=a&B<^PoEEH2XI{6yWdSI1bZhC>jG*Ql)?l-~ZeoqLUV>=|-z$qptz)X2eC58sW7TZ)r`(up5k z<|l;(I*9X)hQ;G`Js%HSX^hf58Z(oMs9K!0_+%V!}&{RLr+4){fho;!AGHa~6&x%qOQsM@TkC#04QN8js-5R74s8&+A$i zAFrred}H4=_2sb-xkVuMpI>{QRw*qmyqn8hJ+Fwcy0H~)+^CwK;J!aUaN=oFE-J{- zRTMg~$k-0E9A8*aOcMsZTq$*q@#Ghe*7{(Y0k3Z^JnL^O?`bWT=$|x?%hJ{>-BOiK zV0Bh*=>-}4!nHZKR*_`%Ly*@alP}7h^~<6)o;5#z7Thajog2NeTdzDA_AGUso-Z+s zd%in)ro+2DvL|sSkn^T%nzqsQ)w;hk;q-Pdt;G(kzjPLJOkBDcQJyHYvGA?v9Xk7ti zqQc?=g~*Wr__hR$F+GdQ(F3QmwJCK~HLe8+iS_J2LA z6Y@RZF$hL}I#r-AyB)2d9bbk!<*&=AyQO7JUxzfhw|AcZ+1C6x25fykf7}~VQYw2P z$^bTczn+VgA+<(M-l68<1RY2K_IZ$$q?gh`+-R^QKtcR;7mV~Old&y!!Ob0sbB_rK zlCZG@RXIU>%YL;b9o;d}%K;1k8dsBB7L%_BYAt9(FnM<3WuwH7sk~30v1ae|TVkC@ zjQz!Sc(+G-I7)}RN_z9YU*z18{x0#3{n>h& zm|v#&*a-7SDuLTx$H*e7g94Cx{Z@v8{ovWi+I#DyIv1?Y^xKyP9zz6y<#Nrc9!FT2-OlIJFWOVnIMFM7l*zBD|h1Ri#T(T2>RN{Uxp-d%^n{6IB<})FwSR(G0WRHv7&GMpw-c&3poP0Fg?{~>hqX^j*D?s)gPhubS z)yRVEcUFIH>xBhrS@B#KhH4O3lx@bxOSWG3%M`gJ13wwz?-*{4wUV1loJ%%b@%}=y zB2o?SDCW2BUgI*>>n5NN^WKU!6Y;kyg@6|!D-$@RbNVnX3$OmtJJs0XB$GPg)Q(<+Zm+OWw*}YX3=Ps`I5Y~Gr_u| ziJ^z~i9fcX0kv9`cWYNRu}=}XxWS4bTDY9phHeDqmteEkYik0vXt-v$Lb&J^xA8YY z@#@P&mQ$=Mv?|=o_&!JEUDl-HzAA>$9Q_#Q+MQhwpW!2)8Y#gec`Ug&Dw|fVE)N6H zX9=L9YVZ05aqR<|ZJuM3eQ(;aG4WEfK{rOF@AOGe2luBzL1>&l0wfzB=7jU&7D!3?(XQ8SJjPBBT#P$1VMvQhplj`c>CvSAlSTw?Koeo~1 zjx%HoNY-TO1ZF=yFgu{}YLACoMt}JnY5yYge$zrLub*alvS`yQjAj}j0BdwIi*=4NR zW2{e&tfYLzTh8g*R^vmqNWLH(+{f1k171zlu|dFc zuL(muU&{1T;*yl_mn%s=Ex zi*|HinVc>(qYs+3-(R6yw$0n<$aZdGsJMyebn5X%?Y6*aqsO-m}98M!Y{qe-jdXAxJ^%v88Fg1)zla= zlem;$p%by8oxz%RWVV&Fy1*YgC3bw8hm+#f>r5U1HF@1D#G@yu+S8&f^TWm6@fXY4 zlyS)7iTGqWg39);(lrvL9nMRDtFGg%Pw3Rxn7ef*tSLjxed;oi=kgR*W&+>1n@+@V zw;p^$x{#JORo z`}P}W;uF!z;Af}@2La)9|MUF-^3#1Zg@|X zx0+Q6-CiO3EAOm9jy|Fobrg88{g6P`|FAl1Yeg<`q59sIjXV3XGzSC9S;jf6qFSl+ zNQJ`$=LhL%#;c_tUj312i78~O8SQ5sD8o`WbW`tnLUDO~_2HlTtU6LJXZMYsJnvlB zheZh)xzEo5PrmPIhKd1JBkP<~qi}lwdP0l%bm;J9_oIH#;}uJ z8qt@i82__gkwmiKv-_8wvqMVoWB(_&M29So9}gAy2b_LUft;a^y0U{CMYOxyS1Z>>>hby(4u;`XH63&qG;)} zaN1SbU3_4egl$fr~hDH&D?Mt>isr2Dp?SE6Hb5wx@_i|`wS)997?X*=b%-8aJP4McN8z&DNa=q z<4kIF3=EGYZ>4rE7!p&D?3OyW&8E+vKkFNO6?v*CLNkeut-(+Thnu@ICTC?)S2brp z4t;b0u6~bDXesMQz29R|Hcb=9nH%sLLc7g>>}1x{@KT#T`&v6?rDX1#@vT_=hHz{F z<#M%|O1GWuT|NCqCC5Sa_e0#gg|zI2Pz*GlLucvT7E5A@TIY0x zrF^}-pQB9SThql3DW@Eql6-A0z{p<-C2z+@icPHf!a0;8eE5D;%`1#8v4_YZ4d`@s zTjy6#DI|u+e~faEzLV$tm_nqjf!(-GEn-Dz&ayx`QIV|qm7u$hFg81`Ike14Ke)PM zG8nkVP>q3>BEChZ-KQmCSxOMfEn7-=RuR})U3h%6 z8EBT*?$+@OC}s7MV~*oM<9xZe*;BIjEh_}7w5tda`WyLb_)Wz{!FG~$CZB$74a{#s z)*vEE?WqcKFeD%%pFaupOFs$s6DmSh01>!g1)TEv*gZ@WIj(#jhVHtyG<73t%Sb_g z%$wD76U#7Pv{zZEp=tNE8?W&fbi0IJkLI-H49QJLz;au(x7UBYN;u|-Pa`kc8Px$6 zP^M#J>A7-#Ky1!OYe8GxQ5Urmm;{wDL%8H|;aoMOyAs*GI`EyQI=jW2&Ag#Vu46xQ z!m=v%!=e4mc4>Rzf{VfOmMv>?`CFWX)L^A;?ur0p@Y#{WVZI;@cs%E#q6f)O)e0!c_ zOcc;5Pgngu%dbY0BlIpEq>VV@s#k-WEnoK~q}L{w1LD?@?k<8nCBmfmGHDHfjCmVS)mMKB$9s z>hWjD8Pq+~1T|KW&tIC?W0zT^Z$7^4&l!eZ3HQ@}by0SVus`(_xhjzx>sW8oZF<|=GPRN9YfSH@YA znD?ePchmDezUBqlWg_4|bh>;uA&Dp`u*#&#Jp73;GCKY2GqenpWHSz*kxl=Vp_ri* zXNfC2)#LD3^5`uHr%(-DIH@{^tfYx!?;dS&f%%*v* zegk=#*k09`1KOnijUAPV_G3XS5a?zc2Rrw|W4py!uP>#I`|lg*kOTf%?q{a&nMe z&ekj1koV08o-Z;kn}9RsA5YK`rzoUA!wyX0RkrkI7EpDsCK0~%T*NPyr!*aL;0 z5?2rnR_t-hMDBPmsx}U;no;IFi;sYhkCSuXPOPr@5$2qph|}AGYK=Tsg?2NbPo;>` z;jVp_Dk8GJi|+U%1IG*=9lKpsiMS@VA4$^DHoE%uLK@*G3VR#hD#`MNI+~qaj{83O zNVu%-?o^cUeD}u|<~a0t{RR|*83{tX-QmgTvKNA>GE3tT$<0IG;=4bgQb)?2XX)7> zHW{IgMrBPr%7If$QD3ut^1^qb0BF`C=d%oaHkMxun_pTCaJQQ3P5$fxSgVC4 z9&NYcLIS|0Gp4v|rWsWs(}S>fET{6h#8=zw+2gzJ!n-*p&cUy~QGk@NrCAER`ch;` z>6ceNsa(vjsE3QBlq6d|8&)*XfRw=o`%9BM{=-ho^>_9ll&uXc|8Ks5Nr&O+Mng{s zin-8SaB*rY!9ReRw3+vD6)XzN`i9Fzme$skeFx>1R?3tZznpI*AaIuE>nNqLn?3gY zk|3=k0!;=ZP>cH-27xrC?7Hewx}x~mG;TDt>vJ}3)pIxE(j_3lVI8=N#n; z7vBANg)F`fhaoGw&U_dpC9GHtWdX}DR6aJ7%U*652FY-PwFE2~xXyYhc@u8~S^eYt zK!+)0_AT6-F{r}A%r5s5r&fu~^aq5Urwz2s$9|Qud#@|5)yUp2h*x6cSv${JY0?Ck zlESG4jG7WW#hrQOv89^`s$}EUy``I1h{Y}TrYeOg`C(*DUln}j&V2IQFe^PEbsf6Q z16sV{Bs{+w$H@XQ;6$yon_KcUp<$Xu$r`bf~urNhiDeK;@ok=O4(fC51Rcx>>k(fv)Ir#IJ5gR zGV=q7{<@}YaFrH8xI8~7s-Z^a_KA|*VPgr~(zfGz+b85Vajj_)*U}Siw0R$8X=!U& ziiBc_s?9+{0Ct??_&I-QdY;+SN4qUH+XTk}}WY>#Q1QJ1A zG%n+@$5hq;AucUoP;K#b&Tk&p<}BVR;-}P2+h91VI}(O>2+H6e0TQzo#IdIPI9!<)o2 zQk%1>GHb2dG7ZZS&>E;47>#M=?1pp_HFATdss=cK3zfRLu~nEUt~+XyC}-stJ=I|! zcp*sw?^vWm$UpI2LgH@2F(Jm*D1S(Opv))su%w-gSyX{-?zbW^^&ySsufFZK8s?wQ zQ^`Fv{{i%kRoNsa7L{X+T(3|`%x4b0ZMUlsvRpC2W?kfP^h88lWF=lOGF)z}j>KA2 zOA#9Z&U%GR%tx!0qZTx|hO4+Ga%|h7BZ>B8}uxBt3x;$&xCT zimr?}WlGF_uYNUw!#|~sBFd|Jo^uPLP=CeHk^TUpX4^7aLuMVyXtn~s9Lt*0d&FToqon4X{P z4S*r@h!eR9*O)-<2+uROB}AJPh(BbY2Wt6yIt5WlFZCa{i&$ha$p-}uUQ4vAj}>Hx zY7V~1I!GpaL(u#cp-Wn9l_jo2uAol|%fn;~;6-v!ZLgf&n^+O0rH-YVg|DWD5is&0 zGn(oPx9)>2KJ6BdfPi^soK|#RnG*BeIQ*I}CM3H?#jxs9fy)5nQQ-T;<64NpdLY#H z1^sr|w8XM%c9da~~>Xzs6Su(5|5sicvnt3?LIJypP$s zI-*qfO)Hf0J;#tk&|)BBQmH38jC+2crum`Q(|byOz1bk#Gf8oRGLbBLs}!>i79?>U zo$3-P`31!SqMW~hMQ*X!ba#Ws026r9v>}yMy8c}exg$5H1CuO+T*vYH3hhv;XeU;Z zHAojt_Y!^a+ds?B3p48)(I&ZJHFJd1HMuZ9Oz!~lXTW+MaXwPgb266ob$#W8uKUyb*P% z_Uio%rE|x(MvB|#oQqukRE+-hRAeu$0LPx_f}?iA!`uK34Sj8A@?tY!kE2dvaOXb;=1|^yWf7GX3Is)J3(-^X zVnBr}!D$hw#zd!T5-;L1K}>$asCTo(GwK=d6k2;adjTgH(29eYhAo$e?TwER1gU>J zF3i!UawHn=HROO8MBFz<>@rPOcOE~MPKHL;{=8T+KtcPp4-*Hc9zp{6WmAf1MLWQV zGb^d*3(j{RDhSf(cVCoj^P{XqrY0wtl^amgY9gR?FkA6TvQIMyCt0#ta-iXHg3g$l zz5VV#FP$+3MDFA1jctyVGkvQ?D=M(FhBQrl15X++M2~{)lUfI+~O;tc49nfI$Xxmvk`%Q$YVV-367pzlf z1=&fu827{YmV|(RT^>gBkLT&| zSSBqLIh)a66VOhW&PmgR@Gf75CP6IhGfzun;5B22^!*?{p&1ycPbL-C0B33E}vH1FtSxX|^ci0uO>EDG|4znH`8iFwLOr(dTH+XGaz zIpt_-d>%5t)+sFBSEtyqJ4kMcJM{rplLdqizD7g2b9BqhYn5oYh-)7{f_j!--!{Ix z3;gqTqKO?A3l_-r?~mMiQVk+0c(Hoc9#yZ{CubiX)@t%5q!F4(-QP-T!*z?nj60fd72I2N93*}VY-4$`T1c2}oO^P=+t}y}DRQ#LPU8N~MU>@FIxs#6J4w+}1)7WVoTFLZh2#pcZN~5ko_j z1{2c3nwIFuLPD;p!aEq7qrlDF_~B$%qMUt0sfC#KjAuaoMa=s z#u+ipC`dhi^}=AR{l<83IL!5Q5iAH&uZ;Rjpw1gBUU=ysyTAzH_S&A(+?-DAk5PG` z8!3D$U=n3=QEm=2>5s$!andh!UxO0-$EDyuNU5iU!h*Qa*EHi@3@yC(!3;Ug(B_lQ zBR?QN4fE*#j>&plZByxY&=e&J95aKit>_w z51tRo1c%No1v!ZmB300X165K!4gGGf2F<~vaRMb9HNyPXEqCkdVQ~nNl0w1K%*dA| z>enp^KW7o5NmX%ST9O3hXqhn4bV5s2_2#NyaeOy7#nb}_8&x>^`!U8MsF*z=-k&pM zLyJ{?{}!g)K3;6H3I73v3oDPth^vj5SPu)0h~#h74lfNA@JBl;F3Ru731g*fe+xoqe+ASc;8@8mx*{I6k7EpdH4-!T%@*!hx@7YHW&58jAZ3 z?!Adiy=Jh?9i9mv?1mv7+?RSx)TeM(kR%9~6v!vd(8mIRn#@N1{w0IeSWXRf-&I^% z9Kjdc3r>_LvGA>9d;;ZDI9_BT1DiYuQ+^vBj@yJovVu;m6&VTvC(AE`6@LYblIh!V z8!XeE7Wuc2o&FhAyK!JZi9#f*)-4b@ouU1i7Maw|`pf)GHGa2BCey;Yz~NN5hmixB zb8jTz0KQyK8QEY%R_>Iu528*beMw>cuFEh;c^vLI9q+JiL2I%B54jK?6lU2m_F-2r zTl8*0GZH(DZP?V$a6>{kQ^&dl?46U1()Vot4^{6RU&#~njRqTRY}?w{-q^Nn+b7!C zwz09bv2EM7o!s+#o_pWVeg8RgdZwqV`dgUpnd)jkv2$@^JZu5!GvibPcx3$FVimv;8B`Y% zt(%4gOCDsH7tON|#kf|aPDQ$7vyZ5gUqYNfG7rr~MDP-rtL8&f^<_)L6ZOcgBpMD4 zHk_^hQtd|2NFbLgfjyE*jR!+S1EfipbefP!oI<*#uz2SB8<-oPio3Adr8ID;LYlyK zmBR$s^!AEU8JPb_jzmw7%03L-4Y%l>a_a2`>IXU$=4@d0VFY5hLeEqf7Ah?>1P`vY znGvL7EelBr%qGKlYtTU0b|7A24w#`BSrKGjC9Os(-<=a z>xwd6`%7e;D=lmEJH(R-DH#HDA}UAav3H!)92g2@U>59$@ejxkMYtUdb91i24hdQ< zix)L8qBB(x2^Pq3VQR)4{6%Gv9Z)j{^9QBqCGS=$RFdti49p>#=&U$kU9j)0M2yW{ zgqVQ(!bgN*0^_DeC58^RzDJ@+n}$8Aj85AI!GRk&CB<3Gvc>@k3^W}4AIKVOB8xf= z%m*DEkbkXUtI7edH|zx`2MR8ymxh(}PYvl25#yor6uzd)%i<6KN)jf%1$TCgz|q{q z#!Y}%1PV>9)Z-vcDhV%zZ&SD?2-+cj6P1H!mx-o&{6pHZpWu+TueoSKp2 zy=eaGjD$#!$nB+!NWH2T$Fy{%(+LLiQ)A*)M;hVApl{tV-=L!ax`F;a(MI6^iT@0y zDLx-~eIS5KXRlwm7>OHV!?m>l8VQ zUE?3;5fSyjZqN1o9w&4EPL>{r3II|YMWMw3-MoHpn^hxtEU){qf9Q(qb|E))NbeE5 zU;FL--q)#_Z5MLX^E+<8?{^4=d~o>OeDqPi0UU2`wLe3TJvz*?hOuLYKf|zxhmRdM zsaOb`nGwZhxO8rkTnA#D-RP`;QQGHzdR)F{G;TU?blc&b@rNb@)?0aFXX^}yKKlj$ zuI&P+w^~nLv9-6HyZgxZ5ux^%&9~UO%gp0{o~g_`tL;q}%lMk#vmIz-tD;atKVC)K zm-Z_f%VK?^_c#W?15Z6a10y|N?nBGc&%`KoGLA)#)s(X`eXTOk)#+D~&+dyW`tDto zD@|LfqFz7bP-|q_clFpbvxOSu@tWTO>tAu{109d#jYm921c=v|uuM1W@1}ZLtA{DM zU#WX7`hIO3|gVns>LKn#FS^IG#$)%-E6geeKk{wD)O~I}S{Z4X3`q4{Fwc9D15I zn!S0l7mlcxiQAC3$r7i?evfa0`IgHJ59YcK-Fb?BKg+n%cL7;EsH1mZIrGGg%kGu| zF&zC$^!BuMdDmxoH`nxXoED#=?%s3x5>&kdmQ3PonJb&LM8{35jQe-$q`R{7=8rSH zzV+7@m()M!jP&x$yi3NRr)yOJIgWmN>k77MFJb5`AzE3_b**WxpJAzZ_EpAQ@X0N~ z;B9gev!xCzWoKDJIbtUjE_d+p-z5s%Wy6N=AIw>AI;|(c4Mg(VY)JgH|%5wwcN{a>F8`&SQQ8IvmW~`{h4B zx&Dj6I!j+PS!f)eyxU%3hmGBt9?FR zdiYH|`D7oBztmTjs_FnfCu_Psy_gkvuzy>WMTHt`RPrSouX>x`;V-{zVcXof;S=cv zHtjK-IW$3km$x8d4PLj#mY==1;k&h6va=K9xK)=84}BfY_rLji+3!oE zg=n9iw=hGftWc0!Gs)ZkD*02qxSDVDtr0`L!XBKdgVKh^)_j(7mZ$|UFVH0Y zVTZcwbTzym)MfK)il7@yeg(#uQ_tVXv7$D3zd%CP(e4QG=m=Yq6(wO8belke}>_ua`~qz^Ce`k|;u5k+SJ(p|qYw0&_% z!fa?00fHh@IS4bPmpagU7`s}cm(Uu2Sr^1oksAkD?=D>=xYnf!XCJpb3Gm-dBB8lr z9W{Y2VVG0!j!EHiBtQHvdYFTF=l~E~k^^PrNukzZibr9!RU-2N>~KYSEZ^6yUyLY< zrqb~}xXwaM;3zmh%|yYcp|4DLMX=_3_d}bbAa-K*gch16O!~Lbct@h!z*tQ%QJlZHYfF$!=2nCdz+vtETm0jxV&Pjybi;|!;UBa5 ziN%z!YXce4`-$la#&mEHjL`;ye_7 z$iUnLBnQ`AYM({3&Lyrs&mA=LPUw#n|6fel8wS5`=+B!VQFO3f>(U?Ppsq%}gzIr5 zimB+yF(?KBT37J%w0$0@-JSpgoIn|xe|_R<$vP5(ih~dhS%ljF-j3I=%@)G0cZi2) zU;xnLuVR_akrs{!1>@kL@;_QM*(hHynR@A4!h@6c!_VJZ_r_eiN?i0je!Q?76El)r z?FH4XP-&Tlg&amsf8?#ok%8Ki^&X1fWzrW)+nXya0 zj|u(0c83YiADmAg_lj>b?!BS`d@_m*fPZFu&z2Wp4%z&<*tj>FsvDq?`$=~nl$_F> z*ZZ9i&;F&%{QH4*Qe+w2JDPF@{m!WtTW-9sOt5_wBy>@Vsxf^*qAs!nng@oDTNB3q z##(295Jg;GS_HIL5+w_<%7g-PH8GU2ez2gge^!60emrAAwHB+zU5;Hul8o-o(vWpS zro7ma(4u;~tFOoj03?@xo1}^`XG?J3I%WFJH3{06y)oQhmPhOM>GuqhL^B?-_sS%@ zmgL6U5%~{M?+o0sg6|r`Pu1f5u9p9Un%RpDm=L2H4mQBUK>ibWzca@6JhGaMGUJV% zN2HqcTWV(1AN&m`I}1fgeIpV44J5NGD<*?RZk5`8d8RJandma4==d{>R_brEQ9ZPd z(LySB#~4$E^U02e_De!g#f0*gowdW2v6(ZWJ-C;=F?tXO1~}KOu%?fRmJhSMrdujF z006I6=;&$K+Z(+Hp+Z5xensu2aTXYcd5Y!oyaGc8m%*aG984h=86Xj^67FvO(1h4W z{4?Yt0~=T7HdDXr^J-I`im**$QQ1qu5!EtVt&(zOoxeTy$4jv@uM|#PRV>P%jwvXC zQlxwq#2?uP1NI$<(8nbIX3eF;z4=opWwLjhl4c4Me2VpHkc#nta6YC;uG)m;OVnWE}+par*CV; z%NW0q_Hb2V6a-0AL(f~Xk}{Uj0{&hjh18Ab2WX?PSCU>qB0zLNYaoe2o&Sne7|;)( zui}M3Xl)B5+i-IjC9mU+u13?g*qh!LyCIo2hOL=1j!;z=_C0R)2rAPtU1}MmQx%tv zQsrsiOX7rg@YDflT;sj{LN#l=^QIJ|={BVodalHNpL`eIBYM$&qw9}x2PoRQc5qz# z`8|JjOGmrSQTojx!uVO#_2}ZaH`Q>I%*|YYW9tt6v^j?uLO~#FJMHNCql_kZGXt~Z~-wSpM176XJO=lqf6a9a|VGG z(+SdF@sMV;xS+5-2+LUV4Zvl%nLICFOT7iNp;_098<$%^Jafi0RRk!OG|g7et1Nmb z0@D)H_{d^wbj%OBW@Pe7clH+oBTYTVI{o zhjTgO54zGl0Vw?Qe4q;OIr^uKJf26s-L#ozIltVznd>vH*Y+ez0T7gS`a?2Le!j3J zwp8Tb6TRo!04vIdut>nxx2!NGHNq5x3*e<94HqY;3lV^9O>PXLm5@hgDEx&^`&S?| zS?EW|`-usEubgazCQzDDw$j=c{bb#{MQGl z-H)0(-sT$;z7h>Kwk3B2d;Ag?RYut?!;m@#mL5lVTG2(@rZ?5#_7;W6?c9e=C+3GA z0`8P?Fkk#28vyfLoc-N~P+YNna|&XiHHXc8#s~J@+x-u$fUD4Jncim)d|)OFPbyA0 zwm)XUtAGJi?b&-5E#7br2I(DT(XNk|yU*%7?!@y~#qN82R;UWrFP%nwG}pGP(dXiv z-~26({5V#SS2VxY3E`iYG8^_~>ucB?MJ}#a>$E%NW%73l8TaWrRHD)cp^|=%4-{l$ z(u?X!E6J-VR%@s(oA-p``i#m?U#I+e6118Pz6F%i6TCPKobYcPSpu{9Cz|3BcW{HI zr(HW(o6Eo3gu>gTa(Q0}_mb>8B)fU4x)>r?TRX1hqQG4ynpPELed`$2q;WW!l|RWT zpIWTBxwl)A>z>O~HU@2-kv9{ocCshaZl|8?j(G~$drydI8?}k5+RZ0fX(ez>T)>a@ zPyifjJu+`|TG|}XeqE`^DRM(4laL`c3v+GmvU7-aU&YhQTYb?G)lc%BBUK5(HA+qpy0Vgukq?<%Pp<8= zGG%q<%kR7#YY?C1PXyIde)W?gU2pH{%mUnAGEq>6I|N2dJ8w*5QC)K$+xcwBUlcSM zR(x5~lf$3?lm*|H+YN!A4E2&(sPJrtN$Kn8!pljN5Ja>1$eY}3`wjSs zbW+Z=tuhJTN0Cz{dpavjJ#yQ?6f>0|r7E463^h%tQ2WIQX*`y;>?`=2Zy)rJS_lgw z61K@ZLktT*NJ37n zFtTMC3QC$IH$j`QC&#WoJM!U>^#S1D;+Od1Jdc}=*$Xx2yl#-}cdcpI!d^+q_SszN zeIbIiSCm&xpt3DxB;bBGV-FsUvb!nS3!4d1y*wM>eL*h^1t)LGOzEbdF>uSKNGF4P z{~86jQEU77S5E6aa%s$nvb1uGsyWo;y`P(j`y!TgWb_d=5$W9Ed2wCbW(kmQy4*i1 z^SqYx%#68aPJf|c`5itxcjQ|VY0ufh#O7-a7fkR$(#UtFdHDDxk{DKF88?Sgm4t4$ z5jpcXN>093$;QzoUC8M1DwUX)wi7Hm$tddap~~9oytDeN^9~2H27-Tk&YQdA_4Mhw zoAB#nzxBh_<6htS!}`@25fh;KoV)JyX~}|t;OY0%Zy_hw%hiq@(XNA&BNI1*VN$j| z`Q>bbmB+7UGTOfT{k;pxt`+bri{&WNV5s&cgMgSplj^o2{Y*Q}#=x*uLC>Rq^^ens z5iv|MVPpWIQOd5u7@zm5i-KInimKs8_ecZ}+f~F~YUoPx7!ASx$2h<>5E2sBsGWDU zmN&Z_vqmnRz@ojz}bD`tQNZ(&D2@= zFQ&IKCu$7Tjw;U1mZA_+h+JJ&(6EuC!o-<_=-v%(o?9@!lMOaCGGm+2Hcgw9f#-&8D?WoQMU_!f;!eA2;)*^ZIfEIS2P`Z^XEX z(tfo|ZNzICQfLV8L;%3s@aZNLPg*G8!^cZV+*tj5`yli{yOgQ57md)!_r+%n6eR1R3%HH~$#CyUIP5792kIQ>`nBj}w1^nTx}+H$-^$!xi&i>zR0W{X6SE-7 zFUm*jiuU@NbfJ*A9hZo0lL zoG*`UyT7R(-Ja5eICUBQAe1^=d!yKpKWQOw;k13U>+roGwgDz2uYSU z9y5yq3;9Tb(`q4b!O4F*C7)@?~P8 zCt-T~L?PxkPu_n3CbM92HY73I&ZOjGtD6dGeFlLZ-X-%!!+pVwmAT;-Ro@~^Gx%tn z1PVn#u^by;aK@x$!Y3BdfurGC8Xjrm6_rFYjqf?D%{5?Epv$9A0TBKSXT#QdiEEkd zWW=>gBys^|y^g*Sx=zR|IDdeUZIH)YunWd~GYdw?*GsEBPs~%O=)~Lovle?Jv?Qqz zzYJIMZ(fA2&)V)nOd}q%Q*}sJw$b|dz8maf8J>}>*9r+oA`n49rZ>_h9kR)?0K0>w z8eaLYaCBiK?W<5Enj7f~6AINyNRsz6Tnd!YyxZ~!tycyW!QLrhR)RS?R3 z!Z8tftR+dt&wta5vFzt>cZ`|L;V7bmNq1YaVx#q7oq|66MgrV>_jF9@kkIc-E}*63 z$W%y-18SSKu7AP~xU#PpBlaY?Au-lOLF@%)kQxTGB80OdV}wP%mYCBaEw>BR2fHFI ziz{Qp4m_?N3js8Us%yf@U?My00;_WB1UHcIut@?E;z&l(mxR|8{ON)r=EUGQ&Y|bT zuEC818YT8(T48$@2XrL+YMB$|hcJe~96{Z}Tc!P5sZA1CY=8$`aSae(3RU@fNQzPo z;x!GdNIDW<$pKxGfyvQ?0pJ%+r3GXR8624a)?ncjfMj+3LOjv0dN5mvIgA~)+dn@n zVL>u$O(e7fRt9vL2deyS_F%F1z#3VM16o1yB{s;7t0J<-l*E|~ZfBV>pfFlFZvUY4 z1Tq=XNj8J}l3gj8l+KW+aD$k?6l(#Q`xOM;lRgNba|W5N4Elo&8|>zB)i}k z1<}V10BNNJ!UEn44n&FoX$lAjR0yGWBzS>lC7#5QgCHvzk1-bPfT$g1dOzrF+=Y=5 z9TG~a0y zNt^I+69g!chBQSLV5jOpOg{y+=;*`7dRU4G=`4T323LVN?!kbtYJ=`Yk;6~*Fom~( z%w&Ovp{j%A5%&@q{EP&L70hY{1A+fZfeUN_dFoFZfuO=q<$0V)R+6z4jt2P%DHA2+z)R?ensg)p87OydIYHcM%}od`);eaJF%WQBWDgG0dw;xBe^xil*V<0FNVZ zqO3Z>6%c63Eim4D&`+d4{^s?Bvh1d{381hGLq=Or_ zB~Sy%Uo%Kwcw-OCOAF-{p+CUf;YI`K3##gcMSyY)82Ifu2?ef>T?@F2Ojni zjUB-|mg6rsKzM_m#S%EdZs4}Gd5z;~lBLXYK^-vY8u)wYG&t!UG4eEP1s#^)O`1l2 zMnTkb6LC6X^rTeD0BpOE4LHMT&q{`h+m8iHnxE+JxD%ea|< z?a+yU5Zq$)Xod*_mC_LvNCb9=j%)|X5uyj1cPIfr9hx(dkEK2^4ESpxU(C8y_EeUu6(}V@dVpA&8XiDfn4lt`< zKEZ-DsRD73*C4Wm@CUY_4Z0Ihn*=I+DY+FU$O7l;6g3zCK`>R03Z_v{?n&xJ?bE*y z3bYApmesLAFrPSEtznHKG8)f%Vp7#;tTDg{Cs7rP450ybPj5o@1~g;PIaC4%$qroP zfDO=D4ZcMmL_>4-Q?>o4YJF`}$HbW*<9KtQoT>xof8&5l1N--8ltJpg`@w zJ-LPeRq)3TpyqQ1`Ld)piuY(v2s-Tj@@M&b0o3fQLAaLx{GM^PkPH-Oq83pCC&~`o z5o`d^w!j)`f+6-&Y~X;Tin*B&#&xjCJY^#YSAUih70ErpF%Vdy zETGFsfC>isz#QVy!yX`lYQ>F0NP7i9pMr7&M{SL!VFpTG_AF#O#e9ywb%KDV+Z1jCM^? z0EoRM1IaxQ$N=&`KoQ&hN}n)fxq+iqQp<$l93M)2rS{Q^=tW%}9b^Ti^LJ2-Jcq2+ zREvV;O)NK5i-zR|*LDM1yjEK52^{ZunrZw%e1Q4tY8ue*4lX2K9GG#j?f6@y*9z*W zgRRELD|voMlR28~V1F$RXbAC42)Y4GkR}X9$+TE@=-#E=w$^4rW#nmr!wD?YdQxXa z7KZu7p_GFIX150?c69s<_wDkL>fc)bG}z`HXNpp+_8Q79Bsr)k zcGoFKuGjM?Vb^y*;dd)S=mUUYO00hMg*!^%@Yx?Z%<~O@|4-T6%Rjm6!CT)~pS0IR z&dXnGBQ8TyhCN-GXeC-gUMYsx>mIP1eMPY+6ubrM^L0_zY&oZ{FE>irhn}V>i6rgZ z*Kb*s@wy3!aP`j}V~=HP4sfS5WCC=k zb`f~mn%lVnFBuGn`9ETdXPc*MY)diUW-|1&$&2Kb%vsxe#n4U*TpwA#tVw*+23m|$ zBVnM!ktnz737PNGH4k1KQxR>U@jx3>>1?5~F%V-1JJfxrz0}FA2`*`v8M<>9Z%R{B zwQZq!v09#xjEm8#hCo!hN%m~^^%mZToEf6@xl(Ivp)CP?Ri|G~%0CNK#x!#p7SyRs zmku~!o5)5SeiFbEnH&-jQgp%BUeL0Ut0gaB_Ae~{{XO}HYcbiOHky*`$d=b8o4`OT zIQZ*(W7zX;BWuB&Cq>rC0p>@QQ^X3m5R`@_m$Z&8a#R1sX}ntc+Ht~}F)R^$QVkCr z2B0LVgL?wN{yqt*jc0^G^LKlb8|gjp!enF;PKZa0qk^->cY12?%=qE@8OklaGmBDu zF`c6-i1WAxsC7-*(`zvuh3ItQrky$ox9O~yo37FWU*~1z??wZjn zV`JH66B`}Vy(R6t0Xl;nh7f+lhH=&eCK4BHKg9v0odJqPQ)6b-|JtpRBqg6&sd+xX z*x*rgllr}tz(1t1$&BE1ezLtTdr7jW5i~q^c(pAfjlSgLP);A%GY{~8bdND=f5Mjbo7GSA1US(Ut@|&NBlyipT;Vrj8-$u>LX5F zAbSMtLk>TBEz0FiE>p5OXXGS@CJ$Th+cfy2^PKp`OdVZepbF|b-_U7q(fR~tmlC+_@ax;90mXotXN)V@%+der^N~(H6O2NJA z8bKFZvJ<#(yG-U;rcYLUxUI)dya=hT&Wi^K2cTGLm!~ST3tig5puGHD4Y?F$S274; zoAx%S+JVz%+@h|zwR=YEh})G+``^0_;8bjR>VffM_4SUX zS{v$WiWuu%-Y7El=Ai3t_{`QHJ5FWVH(#<8`Vw3SGEUk-5TcYn#w24s*5hkE!Yy8tBYBCt^-dcuE>D`HW4(ghlW zzD8FG1iSy!DwyDAtMtsbJ=**m}@t~YW1%nxe~|oSsy$OC%`gJ)cLP*S2i}S#~$Z*mo21 zsdp9~E}wGGt#^<$aj@D>Kl9N(FBAp-%bu;a4*3Xgyh=Mq$17m;__?pvncZa*O1J>^ z3lQ7(nDXA7QbsGe3TX7LBBRT4l^w0ue=Ekn=;O}2oNwhMy!qUi`enL)C86rFDlj1& zjjAmPk&;6|u_=>1F zu-Ep)>8|SKkM~(!A^lypd`8#VeMhnU8sMBjUHWp}d+X~$OKZzjjXt(E4P~@grFf(H z@n@W*lj?c@VdVIyLR;|U5gOr;b-_i@MBfje=IJ$xpIT8eHO5s=!izQ{=$G5R-2JIHj&7>yR+l2(eM&fW!ivdO``{*y94jYLdN_p^%s(98et~(|$j9EX*2!#W zUPWx@r=U z*6=+oNb*~H7uUS;+MhN&m5ZB}>3TCLLj!vU+}QpP^d)=mY9q~5*AZHQGX~CPOVO#jf}jcYCQDy zU$05USyLTK;RdCFMkW0?k-Q_k|`+OWHdq_#cz9TBoO0JuCn%7ZQ6U|RK< zE{)MUbSTMO(>v9(`_oX}RR45R<+I3%6 z$neJd{Gj^(Dg!V-*K$IAwGNYh`6v4^D5x~w%aYB&A~nM?sJ#4Yh9&)trPn92K;Zu9Zp5?fW`op$UUIx zp`UuCu35{UIa0Mfprt^^Q%gLcMG&vQ9(HrTKOW{|5s!1_uTx(=pou|uQ*k|^IRTs9 zhC1tEBOo$0Uktn-UjUr(35wJWVY%L*%g9L7O+O_gyqeP%lg}Mpt5waeS&;pDKm>P8 zBKBtk{%O~4NRl@F5)5W))&wR*+3#*$ZCdxKm~;znFrLq|;yss-DbGmc0nU^-1eKf` zj-??KBOwBV-+wakQ zc$!y53=`%cY~ywD+}ty*Q`4X;^IF+X9JnHkI>Y)N0GIji-yA8*pS{EqB2tnx#+`i^ z6dq?kui>%jnrV;tc{_NHbuoh9X!ex!7hv{uzrxr3oW^3)RK9{Z;=$|I4u!7K(u6LTS|8%t-e`h3kx%&YTc1mfxEsCRwx?(!isi zMt!??bgUpT#gW*YE{O}A=BdOpax>GadO&8GG9^Yk_WTwi>_3qGCpd4SV#!m;A2^v9 z%M|4WV{$QcsNiLZ7PP+`4ZHRN?gHru!cQ2O<5UZdw{YNWyFLQC;+e`1fJOpDUi&iq zJC!HnvD6=89~earNadn+LZYZ>7W=o$i<1EsiQ_;JUE3TpklQUdD8b=_bsB^EYB0fE z5>0{_7MV)AslYV{UxG}m8Ye7~CPr3mi^~N9tfvvf+9P`<2dC0lcKoU?{_cq{E6aL9 zECLg;HLarnSnVI zVm^QT@R;VDJBrXd&HFj0o(z>L2N$L&ylAG;e=J7i{mCF9Gr^7DV_-Vi8;6~3r$lC~ zifu3&c0pz|srml*PPiJW-eMQ%G^#9e`NJG_0^msX33l!E{Dkh{l=BfEPd34>2VUN$ zTxy$|WbI|Y3)KEDi+rmXDk85;*0+Z1d}jVFDxWpHGSKWX{Aim;SxqbTN8je{-5zsn zaeCIVea0h&uqNE{sZDx?sCGsLEz}_5S<`M@H%vs#&C%xawcm3oyKZhlbE(6dM+D8R zJitcHLp{df6cE$~vgx>_Nde#JMZbWP`q$g=k+mTaQdKHwQCpAdALCAvxa@%it=6z^ zp1~s+R0XC-!|$S%OY~P%HN-pU3d(aLTZGn8voRp&RRoHSUIVjd$k%F!XuW|PkDHZx zPmTP-v|z$hae8Ho=F?4Is^QC(dhtyH0M+qln@@(Ok6sfyEx%m*6i;y8-nq43T!U>@ z55W=*nU6~dF-WI~cgCRW78DuzG_C(Y{ZAl33Q<8eeDhGjF;AlMq4MxfK%<;th#aLW zNR{?TTuVc#Jp6ll!GCN)0D&u%<*OlJe0UfSdrw))_C$Xuhf>JUsqFR$^sajZz-qS{ zeOOOf-SyY|2Yh4$ng(b_P0Gm%tV#Y75odb$wQ(`)50mZk>@!=_lEE zoPVn0-?w9tTtLJWp`j1KJ9iZsV8qfGF9^=(9A_MG0vlOSK2N^cJmk#xTOakNV67wG z=Y7n%^1RBylBL2+Y6s#^93hvr&zQJ4MPY+3zAh&E*}mC&J?JDNomEMxif76VFxP0G zCq4He7JgkNDj!m;{-^crtM`PznTfJDeQGD!enPRwo{WULG;>n129Aj}z!GJ8Nm$Zs zU+(4SbZaM1RTRru+};8DDG36zin^0myFiQdXf|+55k8-M`}e?QuY$VW%ezUda9lI% z2%qqksaFYQ)YOB@C00%4uLHhVvc6+*Szzv0&=Q#_^JuVt;d2wn4;|Y>J3b(38k7~& z(%m4=5FCtf0}|^~NzFYP04Q^`!hZ9RWJ&M|F8>N!T&5qm#tZhL?O5iZ9Pt4f>Qg0t z%aSd7$5?;X-Cmc;6GA5Ez{S}=?29JNt>94d zjb)h$k=N(HUJXp+4dmhJ{B-4X{faC>YOj@tLn*I=dg)dDt-0}nW%bES!(*4foSShE zMMi{{D+^V_HrF_0h_)14p?ljT3WdRomFQWZn=)nYc!|NLv_&$;U%{s=l$x53KJ#E3 zMV85FV0q=@jaSy(0sYj6i(|`rID@>3e>D|$YVsSBN_Wls$~slSr&6~Tm!b;_4+~A!6v}*LF@DZS&$GL+6r|j?;WM4cwRQ#*e5UQ6F2{Kg>YwtHDWWKTR^yi4!b;)K_jv6mJ z);ISju>+V^@yEcGzpdT{&fH(Se?!R$h6^#3WVpvgH6mB39n-j{v~?m}d^+!~}$s3|Sr0WI!&MYD6EXtsl114fN3S+%dX5~K!dr5cTKP-UKNvw{t zt}0Z;v?v(vW6lfn)|0u@44vcHX?${#Ox5ES6_VToKwN&fx`;V)>%@Ggr9olUUjQ>o z3}td2u8Ja;^0sdXR#pI?-MGVLyWu?$3g-N#DEB{&*kto{6Ll(98~(NLGdFu$MiJOR zzpT?XR*Mp6u#T^)3QOg$;IG0`u{Z>vog?uRS`gHtg^*1g)-J437`)B@-MZ{|; z11&=P1$}cN6D^@>k>BZ|*o5`7W46UXVKYxhoPQTj{nAuCr0oV@9Z8FZmAye&QRm(m*2?%U;6PKXFhWLQrSqE1=80ig$|tBPMHTJRjlzBc?^Z zkeoB!0#oND{tmhC8REP73KVzz19H)MSaEC{(`{v~Q(HhJg$Vz84xn$kQ*>XyR+Q9K zqxq+Mi^T_hF>NNteX?!#`k*Y%QaI$I0N_02=sCRQD5VP5P5cQacsg{V3m1~JA+x1f zavfR5hm)6Hn*%2gv>se2;Jck1*mDto|xo zqySQL`&c+S;*zK3Ua4M6!VQ`w^<$=*r{Cb?c|2we%5Y z%c9aD{*&|tjrx_BjkfB!<)13l!#w@_2LsMMUkTq1n40|a;)h2Md66PZKGWiNx9Jee z5#>>5LIe&q6U#@bfB}o{1yP}}akCaTGy|u-{StrWxjnF7F?^5{~Gep>^r&y z`MNzDMTiIByI0JeE^!?u#XX%)ierN12#}V1zg`Z32mkn2g zJ8s;v(w$XrZI5nqzRa7(1dZ$sQrcmie*!g7BeqvsMj>{G=@0;*i$j=*He47AFl!{*Bq?znW{A+wBg=ZaJ1;uWOe zF&pofXEjIW9rd8al^Ssz^zI;+wbUcPY(IX%zMxMVVspSSV#SKA2YFVaLK3cJ3K7-(ANez*SpO$~ zQ$-9roN4jYhWnaMs`0h)*-LcO`#ogJCXb#(Z_Q1~42e?j`+?w+!}hVPT?y3VX*tX6 z286kx@#DW#FH$-@01k+Ctz}|Ns#&VBJhUM62-o&h#ErRz1=A0BpX0z4Sj|^oSj9U;;RB z(a|#bV83Q)6$l<+s#}VAccO4qwcTq3(K^8#A7BRB)rkhL&@V0I7ceD+CA7FoF#ZKC5|wzj{K2ES^vA?VyZt`^(#s-W52WZ(0;?>-*M zBghnQ``VG0-5oO}loO-8{eeJNbx%I^mr3soW!r)Og*RWF3wl8x&a$EC(vbG zlVYg#u}emL`MGh2y{w?k!Gkq(1OW!cfaK922^>#jz6vu4dd|RNsZYVR9)9ZT7hj_x zLogt5di46&%z=x}ER=M;qe1dLnp5GbrB47JlDkZ5z;YoplRf%j$2J~S_=Fe$=a{+D zcrwQk92ZNY-{0FOdfhY8xz(5YWwN5%AFGn%`d|*fl)aw7TP~cABYmvqq!=))nu^gA z$6riubJe)-4)50{JP|(f^)rQ-A{oBl)@!ytvAdK(*2U;`|H8dVPMFX7KP75@&9ed? zkEUb4U#I60xABh&5$(TZ3EuZVHt`W_nDt_i{0#1@k^h|ssB;NP-iF&e?;%H|zv!?! zcn41~3V9>$LsyZ#szNG3L5<%Ug=KiwKT3B*?mRMRfyne)MvUkw);^PMyG`6lZ)gc* zy1kw@hcY~@cgmOR{yp>SqW%|R1;eJdvLx`@&OyTy!6`0#B#0{QWElGT23A2~#%7;0 zhjoUi`uE?@pQt_e={lGy{|{GR8CFNkbz2--yhw3(FIL>4xVyW%>!G;2yA*e~0>$0k zi@TJA>z%&u{hsH3_XjhaGufGwot;cFSy^jH(AZpuqyM{Mgi$GnI-Aw$rE0|^$!SZi zh?Y9Wsa#n)HiLKPi`zD7dkW|sW_KNN`M(r3SF!L`P!O!C+KKQa2quaFFGgv^f`X~R ziSTs1pN8J8Ttup>_B=o@9?!=d$P}`dcJh?qZt(paLsEX@o^)5sw|*^M+xwl9KkG+O zgQy`GB45T{?TPHRQqL0MaXzl;+w1#XhWve7N<~S6#{vm#8sTYW47(g0CazQ+DAQ%W zc5DeYJV!Z4d3!P8U2-6eH<73qzrY$~`|tiXx!QW&Pwevmu_CpQrAi3wXNio^!1PFG9V-Mx(qyn1A-!xeRl*7p`U>OK3Xk@9x9Ll}jE zCVI(Ee8*MDg$+xo@S89@zRIYj?P(F%sIAR8(q;8y%e<5vZ@xYh}RuVn9qQ)Ju!v{Dx z_T1vRcq7E?r8NO5DCg*!ZH5skJf&jA}_Vj)Qk$T!1SYzE+CK*GU>UsloyBS{6dp>RQ@rM9)9 z(1KX#hSO0jTCcF6Cqm;?b_Az=1pkSWK_GSCrTFK?;{<%ifB3H`nKTOxx&&~Y{2h=5 zBQtb4XMhkQqr#5=mZm|B2*_4tI-#<}UPG2ik|Xo;qdutG^g=^NhkvGHQ9~zA24UzBN+T58$xDI`(EkYU1rnEGWrBoU3kdntew5B6drk*)gD4wC>KJ$TBZ%J3 z7}D#YP0)xZ1Q+%DEvX}5944y=5aWCo?$w@V-I}FFhYRM8D@dV$;49og8z4304w?yX z5*C~Y6K8TW)u@3I>J6sLGZ!_c`M4AM`$PbN@krAEtpXj+3#*hS8(<6p-3CeFAK~O5 zL;xSw837x8h;T6qK(Y+gQV!rb=?I(9{(Aj;mcOk3N6yMB6+kBwn8mdh#UaY|S%Gz@ zG)y)fD42xoKMPTE9ie~XOWS}zSlA62Y*5aMU*mF8egZ^55EaA^yHPHH5k}e8XaswP z)od%WA8n=~jtapC&}tHv6Fb`%zlr+tMQkSwpjSr)Xopg{nc<;<(8gm#V=qig&7%E6 z211SpIFZo)5zvIpA=m?U#uq_A@$&!X20TDq-Wu_67MOe3qlW`BY##PVAC-Qv)jdTG zYr0t7p*0*i=xo!MYPwLjp1@YeWaSY%+)}qXU;&C&Oe&j#lhkg50Ide_)fMz!lur6T z2}1?BkLE&?4m>s2uudV}1Ledl(@0HW6FM>?{xBrtNTYEyo#$}Ie{JH9H zBdo4U7AFhj3$uqewqp3?fJm%38@uFC|8I3K=qq=lpkS1W0%&s3JRc0-(N2 z8c6_hWp$0TZYI>0a4$Uw{sfs}_1LXy&^qi&=VxM{J<0OTnwO3+p{tP~P=II&@drGK z2T2I?6Ithk_*z_eqIG_SE(|Upv| zN0J!FTCJq&3B@Iy|4+kEEPp_bG17#mB1si+9s0`GvN`%`iak|PGIO1vJ>af75dUl% zL|MzxmWx58SXKxu#($Fr6v7@>?SS8Xgab-Sj3B*1 z990G2RX6lh<-Xg1;Fvf^ClKRfl|WNWQMNV`p)54N`um^Lmw{CQGC*)_MWE1(iwuyV zqA>XcWDUVL2CoOmZ({vNaO`Lt4&b2?>kV!J1O?Rqk4-t51_J?HMG=<09+k7dTK}(E zC$41y9s`L{p~K-q2e|`9t-`7cVK~CUEaT3M$Vz4jyQSerf<$oN$vcOKMo>3*eEl$9 z*4KKJo{g(k;yA-LqO06o75sej!7f|#ha5NJ}$!sxIn&n$S~5|Em6N*;(Ak7Nb!Dx5-} z%0161@^4~ZaZfUQgFNYa>vY2QPv$@DptIRHDb&6!ahM~(5r3v|X_xQ2n(HLE%XfUD zzGHd^f5L`z5=&Mu8yFF)j=tY|zjx^vaA_Hmfxi>QHSBjK<@;7n_V9YKmU+IvrXE(Z zCVp^uB$zHC`?2|Cnxm(ysKNg2VS?!WhDyWl+2wgmy&s|>fe>u$vs2Uc9Q)kz{^Y(| zIT7R=1eg2D^r&87=MJ>9~8>dV63?Jp~8mxaexIjnKGIN+`4E1w`Z_BO)b}c8)p^SBLEJ zg{i*Z>%yRlk=REo0AhE4c^swbk2N!9na(9l3Kdwvico`@gh2A@vJvj*eMQo zc%Rn4cX-Ic7%Lr=zTq%uK1O5nJzB?qHEvF1y%w^!^QfF~cTn!{irnH1GWZAksg>@_ zp~3mifx#v4w}t;Wy?X$L^V40&ADn}U$tI~9$UU1I0nN7OFA;iMWAngyWAnm2^FMVB z`4;PCU$XnjF}!j^4o_~T_*&JFg~4Def`7n!O&QlyKP|&^w?%~!8`(xg7|i@h8TL4v z`3y=UGx6>e|5E&*!4J$QWz+aSjzxt_CsiqOb;f|rOP0z`jXiUE(bF9-mkMrv*D&B; zUoUSrgB-I5YsI?$zWE&{kItGMJ-rw{jvF7gPmCDjO#yHHY>V2#`a^AZO^!NGt6!5^ z#&2P(VvRG_EtkAnPsAv-pZRa8<(XWh)@K}l=XGF3Kwa^`fx8C7`QlTSxOb1S(e znFX}AMCWF%mO__&cR*Rnzwtp#pA2k^Cvms{ZR$&KRdu6{g_`f z#Dk4z>FjLAgx*bJM%uXI^KALTL{{MWpT?q%4V$g~74fsqQ~Hvg5=RcZem7(NGPi>+ zrSoxb-(}ZDJWeCuqE)2bM-#n}b=PM3$qMjuz0&z6IZV^>+t5^}5}(&nMe<1_sOzm( zrOM9ld@!~~!`uFt`UU(^jpu5%xUep?wobb}LDlN*3nxG9m!ZUsi;H@ucgoWPajH`+ z?#|BG>_A`eVb{>ct+$`=!_DsT?hwyhvQPcmd1w{=QRmR+YOsR+rSXx8zQoq;^29vg zBFsu(>1T8P`+$Wc`kF)!g73MY0t3GGsIa`IT5ydD-{Fqa6WH7Fp626(^N(+s0hX3b zXJUI8D;2L8kJb>K(F|_E7AFra`%Sr@uH@Bz3UrE%R^a`TH%+~EEm!9TJ3X6UAke!g zU!d>2_xT232e%Wn%Cf7)hZ*`B=d~HR zpN;HWyctG#rPs1IkW50@n(FVvn&#WJ)crbc9luQ3fd=IaffV>>W(436JuhAjPQO@f z`>i3cPosU|rT4n|$?c=w=f|?5ecflm%nWj$9M7x>kKyO>3znyblbchi{nW~R`J6?^ zu1c*^>6h8Tn|VJq>qpQE%an4iQMK|X(8H5{*Yj&`2i9!I!$OBiw;fu-s~Kv+_>-^Q z^GWuLw4WK$1GaIVMe$KpS=OLIqe!b2<6wn*=}0v{xX(0VtD94nM&Z4sqH`C!2yaIL ztity*?aW~Pr6`<0uo3K4#woBBmNdOHV$&_HidDHm!JQLbnGe#*>FZ{tI$fEK8?n!8>(Wx?DODHYawyZK2HRn zyi}K!+naeiZ`Mcdnzwrzb)PlM9rr9u(#iEZYuU=tO+D1D92}AK_Hn9Cg(lc2U0a$? zS5Z!mgp^`sz)um2Be{xKdE_dVDHvmPH%g8$DLik zq)g`>+l(q{*?jThcDl=)voYDr^}~I4#I7Y>r8}>M(ED`q(vfGmc%Sa& z+oeA6t+8>c`qd|-=yFPlh2C(;)$IA<4F;=)h>ngb_M}yp!RXlfjbZC{d=>kSti5pK zs_~`x3Pi>4u9m?QbW~#I{KCC$Yvb4M`?z)-nqs;2q?_|>G6QHVw6C<8Wh5+}PAXPrtZ5O+7FLIhCKR4 zw`Rl01Qpro_?E9}l)u_y#-gvFdl!DjxtV4AO(d>k17!>~Wqrfe|9zMI6g}6Sr{mnX zA@@hxcg^#QftTQY$Lx-~>b4qgM{Q9vOs;nW#;RgRu<XeGDAh2M;J5 zAwgfi{lEK5H+08h=sBG>meg;&KI~t;ehBKQt-^`o41s}wwDC~P-eAv6fQWu4a)=ul zLQpevyQ}if=Q_nStk21jj8c>rYAMo}{d<^OtrU^RA_RIkBy!xRhwme!s$8Ep= z%-xb-mFL&m-%w^tL=Xyj*aMlS{lt*^TzYE~z1S=8x_f(bdJK|3e&#C~r z89fS+rP)({x{vM7ee+34^muxH&t_DaR#JICMDpFzpj$}%8LN0`1ma2mCYDJDb(P#x z-bau98}#~F^>bHY|4&uF1Eo%5tSGBtkVt<=s7746UIhp~?+ZEQZMGpB+h*A2dCoS(b&``16wGpDCw zb3hkWMTkpXDwl&E_rH^GklP;1UQ1YK@+sQqHzG>$y!Pk|nf^+B&K@1$MtPF%0| zvBKY<2VNcqX<-p(!tPgrS-FjOTQ*S_3 zE0+3XDD&t`InD@LySWDkByKQ)KHD8NAOz_@xZCPn-T0o49bWsgGI{Q~7}9VWn?3Rr zu_xtbdwVH^<0!f{$FX&1pAsgoFMql;WswsdORf=l>z;eY(;Qy5`)G7WWft*2!i~|@ zpJ;%Y9?Qk-at=V!Ndk7jC|6>zxsfUwp`6Y9Z5c@ufrsk}^ zSpu)Zg;5{f>QgcpJxNk@kO{soZpp2dN#Y$>3BO3S=9GF9UIoFbD|OI#8n;+5bDjGL z>m>GJ6d1?0Dm#@?Sc%wTVK*+-6tX6k?5g)p?2SlqePkr*ownncM}N5?|RIm%uOV>LQs zC>kK{45vZVyuu{G`;L`&(HU#VWt--_kexvG8GjZ3JYlMO&Tsq?51mIZjE`wY4;GQK zp%3&yQ|EhCgf@0pZ!&aCMf=a@130^U*A3P2?y-k~*-#{G+b`0YV@*6EB_8q!ox?c< zDM%>O>!-3rHwhK(3+rO?)q>KO87=E7v+Dt=3CQy)rw6d|dhXaHx7G{U7CCp;j#LM> zD*!Aib98;N%xl@YI<~G;j~ZNF5oo$ZEd+9{!6OU1Zyu@QaqTzxMV6Xvu_jZjRtLk@ zu5OL!gsfSF#l~xSf~|#C$m(gFZBG5wA2vj7BmE{Vy#mUpLTZ zxB!XVPY?e0%E2EU6EzICds@Qan&1p@70Kb1`-QCbvlttJcBbIjO%X*dE@`Y8Am17~ zdH9{LHrAfN@Fk%{R0CeG_w4D_2G?{vj!8nrhQ_R@?%klfo1#~o$WK&E6$A0s!2`cb zJ*0(6Nt(HZ9=y(TR+lJ2+sycfR}PeqxZ4nXA&5mHW)F%ep)r6R5)@+2^j>1UG%r`l z)WV0o=x9nPLh6G?MGizIxtFXW#hmnFAb3D?zTO*=gtH4OBZ$@Z%cw_2G%WpI$yzja z5U8i1_8W)0mes|}lwK=S_1o8^dSsQF8~z{e*O!aW)A=0MZVK36$lafz{LM!qEY z46Oxsq_fbhQDxZ~{xY%tA;dGwZy6@)ww!|#zxic-_seRRF!r|a)=|trQ2RA<_HCOm zP3(w0p@E}Xf7e$cVkp5D%*YzyyqSrHAsQwNbiFj3L~}lJ4)LsWN6ePSTs{{QVTygQMp^{=Oe^$MX1f_LHjj5T@9ZkslGXH3h z)>^Ah*_KBis^oB&Ynly#0w){MNZQS|NPo7s9=4%^J=0ysKx1FcZ4IlRobF}tSxfk; zC$~6;@ixL{K;4=qxa)#vOd7urW9N^D1?7A}VS30pvxr8zi;=yOG@DI-1noCWkOurS zq)2ne@tP2CdgO!w4#1tID7X?>oscAHNrtl5UZnEjI~g2iw0mXHJWJ9q2&%$cjy;_` zQCzTXrA39lh&iKtUt*vU71M%0l}c$s`#%S7`4|DqX#X6X0suP7FFB@-<<5@_QEpP6 zdTFU~PbH9U)@|}$7Jm4ds+GvbEG%CjZYLf(QW|TVZOh~JZygqETbZ6jb^XY+E8V(b zS#LciIJENu4b3Qj^(qi@gh8sS|M2%4m+?e&rkqkb@x-5EZ729__Q1?d#fxJ1td8Tj zPptzAq#~>EIugI6P$&Y5)owcvitkH6#GKhUyHu^mzh1mIZtM?8m-)r~JQgjo zI#;tQpgHh%DJ23U2$p4Fl(c6ohDL0D{q$RMTvpgh0GTc0qd^Z`C1KSa zck8d3bYFU+ri+&&IWm1zg?GxfH-7aXgqNUO~|)D2t|W>({hl4I0&c`=nlUUK1e~M zSDtjle{g;(jPrlmcIhgh{mV!0(U}SzIC56^=Nc`Z;^ztyX6!?0Ovc8aySRz+n8-8h z&l+-_liomlJ{Ulg#S`S!Tl>ydPH$!OS5JR_>hDJJ4+Eak2(7z4^aE>}S$g?8h zd1b1;oVl3JR`NtyN5?Ah7v<-JZBjR5W5G%9RpK2zCV6LlGY7R|fy;9~BV9|M?kN(x zLFi@qK6_ClaIO(I`d3*j^S3gVtnOb{*;*C?I5LGWaQYk!5c@J;jlwq;>->hlB*Eb% zI&8oC(_Ig_*pyj^hd~;DL5>o_{~3xdq+Ic2_ng2|BJj}|<1w_Z;*Kw>&D#QB#w?U& zs945G&m^ps<;ZPlo%Syz{Z!vdYIC3cGHAW8xtgygs{fn)*%M)Tv$@qWd$@O{)-DJv#v!4R@s;7?9fux>|+Vzt9_HZO8)mb=hxQm_keOR!{p-$c%5KZU!E_4+u z#9JqfgYC+t^b2dA8VEJ#*IvI7D`n;?T7OUQCODc+-Z0qO=%3vwl1mef2&CltVt__A z9Wlbk{130}8Y&L2)N&rOX>E9CtiT%aZxMyx@3aXMzh)+^o@)^uXV|Rf$n$|04NKiG zE`R2Hb#BTjT3e;xZ2s0`m&K1Zh>yUf*k~8+Q@=Uir0PVj!yWdyGCXW9Pm-)6#_YE$ zZZIHUG57Td>4Y)@H#HckKd>NYEfo|f9Hv~Ug-j%NyA9^%qUx`v|6MazA`k9w}P^A~_T zrrBV|!GZK78h=o>rWI2C5|TOp6!3B1L%5T+EE9(r1K$7JSO4va|JB42`Y`AHGt)qn zAGJ=TAVuS${aMk8Hzhw%Kq9E!Zj`u?l-%9)OwAP=Ot~yv#Q&L_nnR{+?!$HaC5v2H zHy?3q^#z;DI%^@(SuN>gJ{GmL_?*NVtL+V;sM-!yJOeEv*jZGkIag*RQ z6CIQW{I%VHWC>HyxR|yt> z>3n3}t0zuKCmoaPzOm7}%97h0i|fg{8%!Rn16S?3QV#X9DaC$jJvO^^(dS_|9}Grx zBK|c)+E#eXPo>SdrO=pw+{qREz`iRq1R)O|0XDaqtcus<&9qE#`j_;LH8X({*m&g@ zllSA)ND-1556djdi1JuRp*&WJcZV}x{Hc;!Yrk(vi#9IU^RxUKaVGdn>&t}pulw(M zgmto#moj+5v~s6EZjbPp0eo!5Eq^B7$F7~U-s9w83$ecBZn0L$Z5G>MUOGZ zIZ1lm(!6rpP@_9;q^oL~w0pM=&;=^X>#e@#;IyDpyRm0^?&kbxvIgNVKR{3k*wx?# zus+YK#a;^@y1;{{u7yI&PuXzkc&;v0EBTQ{V4cJ^X+wyQnf< zjKO(EPK-rW;4y+(47v+N>0-c0vzlArV6hv}HRK{n0P!Np(cEQR62`UG2|k8iQYJ*u zOLJk~7(7$jtE(#_H``Nt6>B8!&h|^5q_nT{7g#*|v#v?}TH{ZGZ$`NlS(EUben|Y$ zN)5}KFWflaBr4kTh9&{Y{7d@3Pt1)C))ZyWr=w>X3>Z+mZj(2C7@yy0T|!$X#Jb6* z(QlqRu`L#l+r)c&UCfby;#cLHT^OF$JwFQx|4(JI?DQ}d_O$`N&U1&Ws$`cdG5n=_ zU6|Kvrwp4~*Zgim5Sd*RgK+kJiDbHw#3_NrlLNd9cH}!tiQr?KAe^h913F#odFA`B z1>6J~8c!gSkReID60J>4`I0YvUx#2QLR{#;!1?y{C<+kN$uOM#9Euc-vbxY%^zDQ9 zhEf-SU4ahH`d&zHdxYBUy16Y&=C#5>8>5xbV`)S4v0G{RoZQ5kU4sm#DV1>jG1W)G zHTj&F_M`c#yFw~ zl|; z0U2mNufJ<e z_Vy0{Ps}AV*9*v0=eNlDjoo(GgK+tZRVBz;7K!+)MF`JePa4~}vEg!ET9YkY*N%B! z^xVAX7geEmCI56LVk@*{CXQ-j3s-MAwm9+`uAM=CR@qvBIJe1DD~=ybxy6*YIRu7w*1=a0#&}PJMK~y+V5V8{QM7Rs!F+b?)ZdRowUdn)MUFC z)RM2tPW;DUAG^s?Z1=6OuNwHnwM}a6x2vHGRaedOPA#mHAE%^tn`ge~#L9mf%?i^B zXG_0GIuxBhMvp3m1?iOF5N|1A2bxf$qB)Y2_TjPC_REo05}~8*3sKTuXC}=+$@P8M zpH)gl$N6X?ioY^^Mfsl*aP?)gZPKAi)ARD&2yOBHTk)zp>-9y)Mcc|*ou$1*CdcCu z>d0ic!5EK42pY}y%oBwCQZ+YOC|Y>_cj(_ZXsDN>{^&qxC z72qQtY5WdQOaE^D5bEf{^hiwVO~$P|S|jsyy8h<|ue)wN*-kgNZe9VGB6rk&zu5ch zlD?pJ(dej=+XZOWj>Jc^kstz&ULLQZ%x3p$2+(B()*w81BDpYmiD%s|lKP?Nr8y<6 zdDGtiUfP~ueSNjOZtLgj^m53hkb=F&l{eNw3|lTp=(Le}}i}q>(*1+*j>A4zn98-FO(kO6<1&S>(mlHiSG62rYmz`GIwj}+NR!{ z-_Knu(%jG%v#9LS08YEgP4L9MU!7&={o-No7Dm0-tLRaQ)LN^{X8TQC6-uNecjD$f zjzt&64qC6c+|Hi3a-JoU-k7lKKe;^S{%5d+28@bgEVX{J`!v8? za(z?RN19kH&~C;fU~djH=}u(1iv@x-wH*-SIv|k*OvPl^|fxC;@@oy`M#H@6{r@S=&SYBK;00G||!<@$5 zt7}IMAm3%D&IOUjig|smlx@_C_xsCd`B>jyL~Pb;Hw(fqrG+03D!E_B^+1`N>j_)c zhxl8Kh?hRQ%1dw|k7?DeOLnalm0ncm%XhrLdN02IV*5m}oE@oUw<&b(^L&@r>~xf} zosKj{mpa_op7l7LefgezsqboScm#0?9*!uk9~+CArC_DqCz@MF%vwetyQkndX8k32 z=DAeUd*JGrz>43i5a0U-dOg!TXHyU_ie2n<|5faC&Fh- z10!?7lQ5P6yv%Py6>)d^zXQ3sjTk3?z7Yxk=I)-C>D%C-dOD(if>i>UJMQsRbG=QP zeK41s)p&fCG)o>XAsUWHB3=Ftn&_Shtiex->2k<|Wjtu~yHFBE8IwK$?F?-$f!_ye@R` zag$*rJYdSf`35>}T8VZRXy@P^{HByyB(CD3)fU4zArnOuLKBe|6FCQx#$46c+s6*# z!p@l`xYx8@ERUuk=$rqWdk_x>)7N=d8+$B*L?=s3O{nT}2{L-Sx0>iyu|FRF)Mjv;$ zHMsF@<#FpBiVoPt@}rL7b864;|DV)yAzM3^oYN_I>s0*)3@P>34+0jdvU7FdX`q%^ z&>u-)d|u{KIu@x){{{Riw)x#mRs3FNOsNL8s5*vMjPNVjP8|K$HU2MezUGhm2yV1R z2N;Ca`i$K=<4L` z!dpH5jdcd|<=)}h%;KErV9;$oi$+;$g$Q>!Jr~)mBORsa>`nyAmgaLyufSTb@*ld) zqlO}eBEk&dI&6dGL4MMtpM{Y-5*F+wD$}!1IF@LPqL2q_(}Pb;n6m7o7EHVlwEh?u zWO4YKCP*F)p*XEDz~8c&F$;<~!`I~wA7TbSQV|t(VgSQE;!p8{k&hB8Dnkr1m&EVJ zpz=nFzD5&s3}_i?q@T&Gz|^OSD|_n&at>EU0hPIGqywC(Z=fap^)SrpVIs-tf^gw) zX3O!*L84DoI0 zCkRKI4c;ZOa0R#pjR}SM@`sJ2Xk}uwc8kgccAFr(<~j@1Bhn>F$5i-@tjdIMrI6nd zs=PT>MEGW-Q_6+sZARRWiMq;^AMKsO@lOm|iZ&S{V-^>v0A8}$5( zG_*j{ISckjrO5ApUXkbt{CDgH^5etxyI?>TYv4DhaQ=o7ZDJk;`-8Df7a%YcBU>5x z2|zxT5DqtY6xjYk|4T3-4iEUHpb8hV84a`LBQ$VSC#J>?r>9Nt%eMfS64~Kx;s?rG zKSfYFvj7H6bL=YLb$;Yoa1`!DbmUq5q%j9>ntrT4@DDJmqV_dZWX2{Q(FIv(#>SAb z6tFXsmXSJepw2KARRmJfeXS-o7~2!J{OTqClxmMcKm>7?`Z7yQ1G*p$5WlO{IuM*5 zCal+UME=3(E|edT6VF#Z3qVN07OguB@EKr!t8geGXF{YU;<#Ijhqe|E=;-l3$^AbB zAcby#>PnZP4eukfV2lF+AD|3fE*J;_45>MV<8+;%MFQ*(I~l!j&m`>c;Zi$)c0d2n zPZIkQn>XV)`aKF14;@x2S|BkQ7E?*z=K-KdIiz+BXc3^hRfqw^q--}e>arP|PJSdn zbJ*lc5u1}AE+mQn)0dc^rhO`?#m+L`VW0=?sv}ifaWW!&`&%2&8cOCUs*bBo4 zMl@;yK%t%oNos+Dsegk~zSVxV;s9zZVJ%q|XHZ>Gco6`%9fY%0{KJt_N4A*kh3EUu z1K&{^=avfPoi5~vOj3)aPkPKpeH$Guhyu!1SPlS5$Kl9z0tGpUw<7>>8^1#AEb)!Z zV(Oo5R19*{VeDyEuPvHzGT;i@!$)X7FpZfh181IjzrP|tbI4Rv|2K7O6cs=9W}X;$ z{BO|Gi305-*!xyj!72%KI@gw})ZxlOqMV-I^30NOiswYkIo9YQI2 z#$0eRV8M%s<&#>Mk}9!76LqT^k`4oxP~h){{67&5#OC#W`TIzFQ6n)lKr=^%QRju= zB2zEU0}7QcM>`on(BiBG03$(HEeb$A`;LqnF_N9r#04}0sL|lxt@1yB9BvBNE#~PJ z64YQ#$lA*>Ay>iz=&Jp*wpBDW;}M26!{Bpv7=ROXD-adJJ(%`FlfuHG80vzPS6?bB zheh{f7RQrtL`5gB(thqmhh=TEu>W&?Vsg_zL}|=ugpBAUNVr-|Gu}{&XB$NgVz?_T zZxM1Sz~4F;V?{?X`4^fZtEROJE_5{}#68fkFd=~csS4ghf!K6M&6~nrbUsQuI}6rP z@XEo~UHC&n6~HoRg@q(SgaoN;-B6!22JMqzs#PLnLMDGb8h{8kB3`BbMryV$S;c38 zvty79h#@JZZ9fT(;GuCDC!|%u{-6hQ0@?0Gb?nsxZ9XQC9w6uSZla&|Va!H-jUwIm@mZ;Qw^b zh*{U+^fMSGbP3_fqb^jy=bx-pF#t3>hj^f1i%JP17rGNxg(^O0zFD1>vg84XSi!** z3d2c!3Yx-^{3a?#QZ*2RxZV%w7N%MQ8Ld#^pkdVSeDcjl^8QE_&amRz{p+uh^fX5( zE};z3LDe?`UgCWffWurDfmj66jf@5WJzQTWP)}19$)r_5&!UBmU1Ad!%Cj5*P_(g( zHasv10)SW&A8B5HZv`R{N0Jc^aHUz%39`_UQZzs?=moo9DuxCe3o7?0Z|KF$o+AKo zGr|f`NA2ro432r`G>hf*!#`K#F0$&06Q@}psEyx)vVn`g{2f-Yx-w+H6He#z)fO4@K~Tnt2!)lji7dZ$@v=q#E`0 zQINQwWgbGju9ucRPk4iz27G<_4m+JU3;#Y@-%UQ6`|w$p@tFR(Uh8y@pvp9lK6)P9!5%V{KC55X7lTKmlTC? z>k_tjN*j@Jx&QV>AX%6A>Nr}yg81n7Z8;Ti|DyMF?8n;4Co9r4JeWVMHGS^X=Hco5 zBhFjBRI`C3W8HBEtY6t*_<%RG?p$fS>97ZUe(X{Tz^r`7a(m_Z+mNnjrOW#~ZhtCK zuPtz>gL)c&Uqz(5P4$#cQtm)I@MbWX)xU;%Xc;Jp#jd+{-96QoxbibG|SiM(=06ykuoe zz6J4(Hbf!2)g9CpvgYz?fiZTYI`zDG`k1&%+fzH&C>ReJAbg`W_A#byY+o{NS2;`4 zX}CemabQ!n$at9!+?EsW-N|#Wj8~%ufNeHpRm(TFLYOb zy|@o!!3`a^uKUc~9RM9w<&Uvi)wyA7MyxT>OdT4kcR0P?7qTiovoGhSnBCKI1 zOQJeRURmlImyZo!84>B^=JBIgrR+v>^Na&UmGN+wI2c#ehkCfKm>m|6uB_LmY^<0% zuBNmlb&A)eU|^q4)->on-?`kCJSsZZQ+YJ9;wC0yX1Z26)?U2)Jloi8I<#!Oth%&1 z^E&YZwP4=m|2$`{pW&h4a=xL2lFOMf*WThl;Y(kdP)yVwK!dx>=d*M==AIK zAoICjq=`K(W753D=f~#I?v5ava$rt(Jo<8xKMEC?PV>aFzE5sger$k}TuRO3<@(UG z8tiRO)azS&*|W5;3}ZE94}V|HC(;Vq?MXC05Ln$;aiHb#s;Fym+umFWbs##cx~&@Q zD!I73?}}heY4km?9kUMebE>kQDtzUfUJCrghh4YfpdxJkaIn1^(slidtJoea?JyeF zK4<3HUrO`%E|J+;HT!IetR`QjMrgsZoNMOIaA%N8)$y}2Z(pX&N5G?Y_3;8U6~ndM zz&q}e9zb|D9(72OS}o2+mT_*j@xXpsIx)d-<=k*jyKcp+q3##R;ePIkd+vSujH@lb zae2wJx~`l2*nzL~0vC7CBc$JYG;eYT4yEvz+S7E1CA~CE+}$s^OFxD4^V9e&ntkrf zm3wln6$*U~^PPjpywb;S+r<_XKCl-vR1pdhSb^f}##GjLbV2IADPp&e`0%9-{AfmW zNcH1BK2o-S*B};L7=Y~p-so8syD+#Uy*JR`Ev=~=(3z@2Z=JxwBNV{gHlZ}y@ZmU38?VMYm8A+Uw z8WxM?C6TlnUpNpS$2o%tzqIP?RxFi!=lXI$Po*ScRb6%u(5P{UE#MB;CIyyIWEda^ zWMuhR=ODXr1&&UnS52_MS!1UFyNSmFeUTEn2C)?Qy7}p!?`{lfO8R~4;k?IHIcymg zQ{cr<3ICIr6RLvJVx@E-B?w)^GxOcOb(f8s) zP_TK{w;}*en5pH(AtT=s@B2ENy;Q5ame5^g$<+81U&DL%nS-?F`iAx}l_`3U>l%8< z=b&>1XP@N}(zkYuY~NOEM)OUlpTHWyk3h)n?$5qQm*yDg;>^(R!mtJrBHmCc>014kZ-+dB=9XtJm~v3pR~dlt6q_l?tzcLo&D(DJKs>?{GH@6{#f42cKJ1mf#&BK@Za$NVD3IP@mY2dQKPHTt1P%z6+KuMVZ;G z!!3UGcN$eoxEmZqRr0x4Zg^TrC?~-Nl@w`ygR4&0Lv$ zBP$N&zJ_al!QWB?+<1blN*_d-zxtM?BdL?Wd?Z*)lwq|%%IqZlEB5x$W{zEA!{3Ua z`g=}Cg7Q-A<;j&Bw6Ar4O<0mWd58Ig3x#2<_UldEMy=Z_Aqv4KPZOTxbIJy)mTa{o zc|38ReO}1rMiQU5tH-{fSTHEWAC<2klf#UsI>WIjoX#+ctObEg+UU&))3|vLjn4_q z-7j(K@*Cx-Dcq!Ou4^L0r2L6{8^JS;2~YFg2;Q5{iFzj?<1a(`+?uuCh_!K!b4QwP zbJp!Jt{VcP_T?+jGrkTd{Bg&e`pG>g>0gImb25EueB|1y+S&EH=IKBSmuMHm>Er%) z={)*w6|K6a4ZPcX4vtRlTdo z)ar4m%ei`*uk*5Zpm`BnCpwoJX)fMohl6jL-jGASUeUp)kkjyciFCa?c%zEC;iVo@ z?9vLeo?hJu?WOs5a5UrFV|dp7=T5|rYP>P^igh1js!pNxvA9sLh$*0yH(6**6`^0D zh`9oHXJ8oaw+x`EzC%(x!Z;U_YHS8yez_wtZM-gZXvu*aFEhcEI@nOP@_j-HW?yFb zhXcn*eb|7%0ZrJgF(Y<8)7(I+N=nY7C_rn>6dc)|Ln1EMir~@@Ag@hdy#9zsH>E1u zVAsv+uQy2`5>Wa%{XyS+7{rw~(f0Gp_}$?Zo4>4z`jAj|*Y4KbpG4VUorq#+Jf}e& znO+;T9?zVcO{FWs1kX2qA3{GQ(%gs^1mb-Y)a-^J3XoX>=k)OH%eO51=>X3c*0W^= zR(4%9dIG%YJ=yEF%$|=J6YCY2UBC2ou}De_ctLMa#vzcwzqtyO@XgrNyXnG4g`nU# zsPeM1snj8jqylc8_=q*8{5Zd^r7dfgqdFOx@%8VGXW06-x4$^N1`AcY_bq+;kgK+B zB!;Cc^&12+ylE(oaVc}!A<@4ZgEPMn|nkyDrzNNbdCaZ{$FaAUj1^h5Q~mQvz)QrZ}EFNWIU zi>h686ffCk@Z%)fe^phVek}EBE@y4w!bvpZss#}(bgdqHly98#a%lagEO6-;`A$1$ z+Zqm4C+lsjvL;tIWr)A;Ge@CO9%I|5T<7v0(IrAF5Lk7sc440an#i zK}vLAT-HUowE7G~SY>oa@o1-!KZIHSDZk^iBnda)9;NK4xjZL3gkA1<`uGS#1ur8a z`vR1~_=!XOb>ot7=NGmdH==j)rM95Rd>gI^7?u!i3%&TyPo5bJN_91r(_uZ1AeSVh zkG6=x-lpz3?Q8eF`nok<8FWk57v1rB4vF>gii+|4_|7iJdGeF@ghLZ>Q0f&fd-r1r zuINVy>(5>Vht))UM2Oej4!3FbRXm+JC;6Zte|e;HPwJ50 zA)@#*p3n1AC}y2>oELdNt0%9F$|{?iUT3uuOU51OrZS;G^5Eo^=xa%`m8YY}JqQYB z+CZO+dY{dYjy;AJ!~=>Z3d06}g~F#NqOORDouN`?=?!$LV}7V8=oCD%wc^9nxNqPE zbX7_LOwr6GVtlva`QwG+RFh_N8~T!7!muqsD+z)E{qKDeS+W30C{EDjE8T(3?|MDI zPV!of-yukSZ7Z7pbgBo>3G{cM-54JqJxf#C7c$h^+@_{JdUthMS66+Ni@NS~aWy&p+p2z< zc=gD_kSlnw>q|(w5#j6B{(Xo&>O0TPaeH6az*L!VauAD&b-`X#b;#TOJ_$;ez%q-_ z%SBZWCTvDn%gb%=Ev-2c>d?w2PKFU6kk3^o5Ti}>_B^-c#p~mmGUyqLv-fK8Y&3+Z2qFcuMH5Y{w6csRJYy%F@kbnzfe zhGG*%sly4F)yngGI$6s(FTQswvgbKpKhvj}hVZeV9UCEa~Qx^Upwuu&-Vj_LKh($gxub`{?N z=lp~c-?vDTKz>Q3__#M>-|=!(mQbYCi7Jfe_WEA5-mv!3OHiT8`GoGU!o^dV=y-AG z(5nW_mo#$@PX_GlcFYL!xo2%8;qi~Z9F-#TgCN&?@hSU`{d14RLI!Dy12%g&+_%ft zSxvKzjpk`9MdcnOnzjkdwn;k$jD=kMnNKEGJG;wnmeGe#9QR8q>z6GZ6U`fWxVe)v zH&c{eDHK;opvyE3ZHMML^>*pXmUev)xitZUxGO~OSYYguR_`dm%qDX;G08hn7DR1V zwy-l(@McCIb$!{!e#1wx_IpA5h~Tj7x%lpAp;M0hm30DtMV#DnPV5EnNzK??Jw1+j z1@_Py|8cf6FJNT0>{{+!c<|Y8oO5wo-Mt?U>*e>4P%*m;`qFtQOTQZFg4KfWl<0*-SS9OHRaj^y^_d{si5sug53t zZpsr&z+SP=iLi~j2bOPplmk%l)+|Y$AnkDFCdl6Gy{F9N)~R)w`|mW{hih}*be4!W zek^cN1O1`SxyqJ%Pkl5{*3(mvpB8sU%fz)qsM3s~EM>-|+*(whDoXb8+}x6IL#K`# zC@YZ##b~XX4n00TxNH&OPq@x}*j11W+Y6X$81Jl!{WHN{nD8=FTBUe%PD?ePlXTVH z_8c&(HjlYb3j>a8tW7J3ykr)K{I zs|8SRz5m5r|2ERv-DU&v;=UKJ{ix6aI61Ydv{kf0X%p6Q^myfKR@xsKj!R5!tG~SQ zHXQ|b0)u|#LKKR}ltx-9(Q7PImwcELGJ2*{%?MmGAtNX~M6=V2pROCme+@Khte4w0 zvj1GoYF{lLH@kfZ$K29gf6{SIbmnFfgRt!Do70K*$B3leZBLGVf^Qyrx3-?Z&(^tc zy~fy8f~_iU;TB1DvU^4EtH_vk;!s80+PG_fU6sx}ymKz_RJzfPzQ#E%Kc{_JI?}1F z&}onU%c~8BudxIncgL%wR=91UVUe}M*lk~H&kZ_I_UcR|GhzE=Se&@2nRT`L_EHGQ z_dVw=bXcyKr&W-wv*7wOKidGb2|Tm$-vK6hXYX~Ws%f4QF8I1bPc-?>g{aFUZk4;m zh0F?ouY#B9V?>QYC-i6`!BWqF?Jw7pX#erfu#+IQJ2!BHoE9v|bqYuuyRH0tKDOs2 ze$iUnoQkqGuvgSWou$y(8ufhdw6FQzaJh92C?vx!WR*2&WWS&EnE^NTZy5q_=@ywA z31}fWPtK#SvaFeShK=udCLf{M;COIr)gl<{TNX1F!t@N;@rul~6 zB}0lNit3M>V8hIeb@5}Jebe!*U^DV3*s~4R{Vs%ftXtk*x86vDdN`JuFdikJnuRT> z^+a}Ua3fgO15h(QGJnXQ7Ms<{p3(tY&URLMj(b8x_0Iiq6lC^6aM|%9@bkv$P@or| zmsbZ@XtLG~VWKlBB^*wl^qkvI=xT8IK^$yhV1VTtjNCBGRV(_^Z@wUb?e2rBPIAsA zd=V(F$faU;so-yD%aW1qayOQ_SpSfp7RHz*?tBwQ>vgm;7QN_$5TM%0kTQTA(!qT8 zJW1X7$#MCE(eL)O#q(puSi~87cdH~nd%vLOT$s5~`r%M8$s1)O6qBl^`9>_WJAZjx z`x%d@p*WZ?tRcnen7-)pwIgy=&Xb#*yA|%osCc;V8K%m)q)jlkew+$zg9~K>TXX=| z!iNJV+UZE*JgBFYGZ16;&+MKwqS<0<;`N>2bYsmzg+}(BkW!T618bzh%nv%j z6q+FFymrlA+TKH^aZg|850w6Nlnfy9hPrYZ^|BA&+_}$DH8(n5_HM(u0gBzdvx|}X zct1&JaQ-M`d;bTWk6lW}gg@udfv!|_UKJAH)UG3IWivx0HptFMR84o}D^o3d*>H|7 z0jrs4a{{_;^pnkJjSRmZ3A&x7^&q0lz5*4C;hCkPM=ueEY)l!;4{?5%Gw#CR`=hxJ z$nut}s}hg-8IhU4i1SIr0b#xw`J5tNrGC~4*30F6-u`G$ijIzQPEYw%&D~}JVoR-u zd|sc=CU}QJ@w_bM(mrZaWy2btXR*XL!pDbf?_y;wl4;$B&iUxG3qBF?1H*er8rkB= zOpg!yxD%bekHODPVoJQ!CA&8|o(_Bx7jCY-RgoO!;|t04F~Nh60KWH6yVp`e_YT2h z{Bmbe;Aa7@2i6>2V@uq`)*b4WU(MdqDwhj8u7%-3n=#WbLesI@n5Lh{g4%Ixg)GYl zAvJqnYgUp*RT%ko3!_c7*@s(3glTm%uXtV(!IxKNE+|UNNJd24c=kMSU#>#u|KQS7 zLrIMX*g5{-6Re#Z0wz8p4J}U1mI)Wf+AmZK3BSs4Lc737X1`KXd* zw9lGl#eWWf5#_5N=X{9wL||+5&PF5fvUl|R?qo}o``iWlX$eewyGZh_=a%XuIP70r zewbJXp`m#&Mtky2CL1mLg1A266MpnWd}H@BJQNfZb5idMJQGx7()A0xKajaGDpr@y9(R7RY==r!oAEyOXvls}VgEaE$9c&N3<-@?>#DFxrDJRyE>oQ>+= zLVPuCAx=v@mGy80s`7e%$^uz>X;Y70SzPyd=dB@C4PX^AA-P#}*Zu{#7<1-D-;f`- zD>}3y(+oPs92P~BFmG4m;s87%&0o_o@QVbV|0tT*+g=(jGhny^t#y8A&SdPvfEXtz zqNMbwc|ALaS~QWh;rlXqn}wnY{5%u7C2?b@yjX3kO^JSI&)Y66=|C!nS zpUDq2&P9|0mdjhD`Zh3&xx~dTvz=gxpisbZJr?Writkra;w5$_MD^K`3O5egFR_zQ zKLY#@B0;SA>6LNcE^mlQG}jZKRWQE^eIN2?+*lG};rbRsE=@}}6?o-(u2CTKb7AXC zD(T_ui=p(Nf_fb-XSRULm}& zSolSh4JB1RbL>0#?KxTz@Oc`U;pucsvx2Xm+yA1PDsVULL%Mza@O&>U41T9n*m|6R zlsQR-|0lddp2vc9-s{JzXm*HY=`~vz7I{w+j(I9bP=q9q#}yupIW89}Cco ziID-HEBM?Nq`;pCV@F)wMf!kB1hn!ulVe)~s2LTR)3jgEGt=2Mk$#quwDuoKb;eXz zB}D4Hkf5QamcPrU{X(3=DTjv<)6EraKxeUS4sTFPZbU}{V z=Z&HbfxrtdIPJ1$Ijsn^6+?Z&(OE%>&U_d%S|awLvV+g86~Xc?b8Q7?ywkoDcG{DB z;7ZAWzGdUrE>Mst_~(AX??sz@IQ&MXR8^Fi?4EeIre)K0hU( zB(&v#0I!)~ezJpx2K98+LLdOE9bkV}Zf&hh#X8hk)FbXn@!%Wb`umIE+Tsq!IB@ii zheH6&l7Pg^(kFxK7=N&I;NUL4-^h6vu0!M=&W1lIlmA@H= zGrFNO@#ru#HT{AmjC84L^4qldv%O8O=fGh?Cl33QsjQc&8&*=Zuv953Ft3jb%Ywi^ zug}a3@`Jj?Hh9QO=uqSxK+xHuB9UNhwDo=gR6FK_ieuzDEOm>lj_8PAbWW0+{Nrh1 zp;g6@f)k;sn7%`aiW(+YL&y3VZj)oNaKIFPg3L4199r2k3Ez|-|4~%5SrCFjHFZuQ zfi5a4n5%+<{Q0)JkaW@%3kLfI`Su`Jv%1#Aqv;n8GGj_J1`0AG9&shE^HgPLTl?jK)th7Y14v|*2I$m?U_;AlqN$~OKvNdX}zE~Yc_KJ2s} zJY12Y+zVA0OK{GVBRS^RxDQ)KRQPWFC&jtQ#z}{nQUpMWo4O|33$o(qcb?y1QVlWA z{)^h)51~%T)*_^g2wN;K5qQTCNWc|zGIYiV?IYqqhiWA_6?Gk>2RwS>KUyZK3OKog z*vQ<*TvW;lWCn2lLE%b&Cz2!U>7-I4PBvh1Uq+>j5*#+o`%~EA$ve%0b%x3@h-|8GX|=>K#>NcEol+b zmEZ)Xbpx??V8&kk!T(lRK-?v|K$1RiCOgw}*XvP=AmQfc=QSolRn1FwgP z!sHLjPjHJ=K(L4xo-qlLZUi{o7{8311WE|cMDFIpW zI?x57JuDn9l=@oL@!njK~x4hYdd7arc9JaOr1WI zF#YETyUS_CgVp&Nzd~p}7%P5DbpL7H^LI{sc`118#{8!`ku zZiV%Nfz;NhSpFb*#|+t38Zp)nZOh92`zMvW$7UC2tu84d2aj&v=6@Naz3ds zrWC94?;jv!G1IQ76xP^MK@Yq=G;zuWR`&10NNWx!5#mOXh|t>e_TRY)`HkaM)X@$w z;B!fL7V+|C|3eBpK?#W1p)k@lQw$k@Ra9>InZavyXvK}>l5%AwVQh}%TR@p_P`)9^fCoK)U2@(oKs`>MPGO1-E{_C)SaEq>S ziyGRkzvFEf8W80$%qQ+bRejj%4SA956)Ski@O+#UFQVI?VAx-x z=b^T;0*Yf{G@ho#4?!7I?Aq{>T@wc>(*Slp6y9x~Exd0(JeB5e7#KKQ?~V)hb?fgu zh`tg%q7Yu|x54)&;v*rP+U!pGvbRTFa^g=P@T zEpsKi+*sX<+U@c?ahgqY*cCa5@d?(32%$!syYg?^2RxrxnnA1=WFhi<=0!Z0z$e_* zax4Zt+s;6nzV842rRP7A5*CES^nk}L3(;z}|CP*$G<8bC2W?A}VhBMrv6)=L?ZIp`H8W7jwF5c-{G zP{OZ{fsPGZc&7+{tM~y=xE;c7k>Ujql~JyPU0ZKt4$QR_x2dm2^yJXPo8Xx$$29*j z7wW~+=+}Q25=Q*r^)uc zeY8}Y9RTlB6Wmp0w4R&`av`RTiO)|63xeOzJKyG*foqbwz3Y(~;0;ZxT442k!DC=$kKge)Lyv2sByInMYeM>-{X+gz*IB3HS=Px}nQi0E@gD!F?>x>~ zXX<7miJ?-1mn6%@nETT!dJU01%R|-v#QWV%+QjwfC98o$h3VTOn{&V0r+?O&yd%eR zqu(}k%xdb>*dZ}w$8)7tZ7!$!!0-juqQs6iz;|GKo_}ROpE>QkZtOX}!W|{gb0;0H zlIly75!(4#pwl~lBC*BM-Un^$wQG1a{ z#f1@4^|f3QZv1_$3QRaL@~4LInl+`r4iEF63rfj!#C_es=weNqyW^{4Rrv(rUUzr{!ph^TTk^?2k_xIW&+zdj}rx1d)*4SZ8ytn4vz zJ?~L#N}E{NCEjJ+n&Qh8Z*WJ99?^Dzj|tk_;<_KLbd?$#&;*^Ia;(^mZ!dInRUB`c{Ot$!NZo=G}hKLr*Q^ z$=Po(p?=E4SjBfLcJ=3W)E7>&Leto%kGbES+Lv~KRvUlr&Yt|TR+Uw(p(>Bi8GWHI{pQ-dRKUSQ1v&20v zceK3qgPB&GZ!VMi;!&Dtc(^HlAPKLb1}5 z&^ea~%tBhc;)T1uJ6?TyFxpr$O5&BzvoI;LN2xm4_k{ZYm7sILTC+TQr;E%&Vp z)HIFa8pW9mD7LPT1(Vifbxb3Zq^~mCx@8FGbKMgAo@9Qx(d+NV#}cj7IS5yN-Y|u> zA9NWIrQY$x5T<-`XE=ZLSLomrpnnxUIve3{eKzt0ZlV_EZA|M?!ng(OddejD7qn{| zXX>NUHD307i_7NzCLIIf()y;mA%`xZ!Z%xjuQyOaCeMnQ0|Sg3V%tw5$_^{4Fpb$y zq-(ZWt#Ev;!oNQ~i+(PBC5g}LTp=Gwti_21M~D;Wg9U-;)T5$w$I-)_tLw`E@yZJ8 z<0o8v??Lldo_E}`)ioOQL}z*aqY?3X!;Z5v^609fmlp>HpEY2|NN>$MkCirZ%1>xHP#664$$^rBT!J2u;Q2_JMY##$4iT4O&a zRd#f6;R{Q;&h=}u++8Nv?}J@Hp!S4cRiYkto8Dz5^S1b?Pem{IS*TJnmiMzU!7q^% z1-C!R_eY9u-Yx$L(?;H46(!DiRNfhE$KAg&WJOvf_5y3i!J=8dxX<6Y+S8o`_|v~I zVWjT%wBFP_L4Yxv(<P3y5Y=OxdtW|&$*Nj(3u23#ADZT?w( z;I>|{uWq^|OrDFWB#NtV^wG<_-;Jzwl4_m;k%u-doe-FY)bo#>?^J&DP=S^W z%Gmev`lriTo$$4dCU^Q*%M{xVr+8hG&7fnxdp_J7H|4Yq+jCJb3)Qhw(i%6$MrYCF ziEAXL*YA{eST51Gt_6t4YviZj+x6|vY4FN!b%CaPrsFHCRVE=G0U!70`_A-Efy`vQ zKXq+S8_Ai#>jIwh-$=MLW9G}pr@o-_+sgu;m!**P%f?GRMK_X-TF#EdT)t5|q=@rf zekS$I13J=VWZ?r;N{vXc_t$L?9}6GPXGdtpPW-ay>i4IMFIEH_8<`^#qTQMQR1Eshw2Lc1FNvD##vkx$da>i6us_s={|hyg`#c5aag7+fN)1 zPmh&S-`_}-6*7~cc)wsal4ByAK|^sSq2nOn15zlcf3>nhGf2Ufari91b5UD|>1Yfa zrJmkJLW*cAn&$0Rse)T(9e8jS}|V4{F3Fe%ReSNQCvP<%ez8x;s$ASD?j4F{js2Fy(Pp`*OaF}3&n3k?(^wAVf!U}ARAk`239_0)7 z1Zbn7b=E(AX;Gk4WH@Y^xWCsm`+DE+Z2@R=c~r@> zRyj^n;f|EY5HohB8Y0W9-_ddozPy3PrwW8o>M|ATcz!s0eV#JSzjV8-Yr}rg_W&N- z!R?eg=^?U2jxU6K%vDJ?dixv71FXwDch18UUtV*ij8hJN#RLy9ADgq~gmECf`yyfZ zhfw7_H~pgi8E_Gr>=c7u*!MGA0Y;ED6NVLmD+0P}KVP6Zq($1rQ7wuq)vfP&;y2pb z{I~DOflpFA401R;`V^QolKu}2DicX`Ul0%h^dy_SnyJ^>Nhs|o0{qR^o3jG^d7hM< z>f+{5g}qlgi;Pzh>a3%@p^=V``16vR%G$F~AnT+)yj0D1W)?v@=8H9~6rVFjIs)8& z^KuC61J*aNHMjCYdp_W0jJgsa zr(I+Qi6JaknlWVGx%gGlS1I-%@4V%6lz_oegAJv0W{#z>D9lJQ?mKV#Ss~>VEacUx^NJ>$+TGBnfmFA{^`!fS{=nI4DvU~J9-fs5p z&KBsN2P-B=u%*Mf)Hh|c22RuORu!X4GxLq7c#o6l%ga|fmPOT1m6>$a6ndnA_2Htu z0{LoF;U}%+jjB9%@>b0|2&lLYg*8K}JBVn(NR*K+&q^vF?b0&!3D0-Q6{pM?ltQy} zb%+kK$1(oW$55iybDCOU72fdmHDeBAzfQN|VvBr4U(db^MUp8FQF}CjM6okVaYd1{ z^q^WpjF`7g&c(o1)jZ{^y~P8t%&zXUGT=8As-`lE$MJbZ{7#;B=zd*-%FQx$mzrX7Z(!oY2ng9&%>K3o604ys`mM!V=8c` zsS*WOKWdkuq2ImSOarZj@%5&Focj#rYKw8I?kFRi|ImtHv#AK>s7z~cC_y~ci>k$& zcz1Xk7F0K=PgEh|oQ&PfA{bThJ6;vf`eo=c6?<6wt=yea({1Fb!{%)J_D|$hl>^Bb zWn5};#95rW^MH7NiPte8)>gSF9p-{@JE+ja*ssybxB4hjdg-?x@TB(}QD6I1hp9EI zb}=^uXSI|yA8n$T3^Qu^8`+nlWaieQ$WJ{q56|E2V1zLiRlr3>hF->4zuA=d1>t0Z zr;YE@5RxH1b;;Mz<+xz8W!lS9&?k8a{PGN87Zqn|HYK603q$V#7zSjvA|yK#jgR4m znRc+_RssrL+PkURtmC=h=gA*HMqFrIY}f}{zhQ!r2=Vqac1-H;Fq&(Zn-43Po{aVL z_z03;f@Y7{@mkIhm|WMS{Wo7NT7O!AEu|y?+QTR;a+Vd(cGgcpJHlDFHYC6P?%<<@V z%%m?p5Sk8#Ex)t(6(6eOe|HMwaS`E-V#`o($w7<${;BV!Uv=>(*h?`1{o)*Ly6|Sv zQj$!Q_nSXVPVs61;aYZ}H zOjv;X|DWmvT8a89=>$HnIv`n8S!ecR@xx8TJ;v>+`S6kJWm1)W6?fQg{vDMk_sWf2 zTihvF5W}3)!u48BLqb9=eQ;2g^0q7&0H$v`|J}r@M0K@Sc6Pkno;7@d zmtunQhW`Eec|+gVV+Q1T}lak?#))7)^s*D_lg$pSl&%%V6gG!F$uQ|KVw*idpz&K=}PJ%lC;H<9Xz8w-Zns-a`e1-XFS{mwSr`(S}m< z^9p3g!47bm3L%>FJ@l6s!#RY2M>Kbc=1a)C=j*P)eFVnr_Q=l6O@4%oa_bn4@cZt5 z=gVzXH;uMEqcKRE-VS&?`6_G98-_S-|KwQWZDnOH~;K zDae;s8i9@vC{O8>LUkk=%Z}>OFQ%rr-C#kB5e~PRMP2-le^TE&)AH=Ijnr^&$e_n&gb*vWF*N#o) zPcx-b;Dc&z()I1JKz4=gN4M0n>u0G8*XNRgfKy6Zrorbi?29`C-&b zS@_2!h$nsXhctonX+s`mxBWdud9YFYoEJrT>mxh&_0C|P{r<3Ppt$idn^w@krVcqn zi$^QPd4+q`zh&9&m}zr1sHyn(uAp_&Ri zdW89tfEm#J!NX*HQbC6V-e*<))^^`(DRp%gmRoGf0sB62xeu+@;Pn(Hb}nUenKezX z`q{0%^kD~Dm|7UojPkz|fvPI_FM%POIHy*Y`nN2&#nk(XrWSrYw;6Ois>e7yg4nfl zY!tCXU?*6jQ-TA!8@vb49zdM~)6PcErnI277op;Grv*;vhF7-DIvOLS;O=y-7O}j< zz%{tv?3?6!zIIT7k4>^0&y%>upHkJ?V75@jqGFo7ho;Q#B0XQA!IaPTd1W>f_UWZr z|GmkS)FrDZOHat&v=3`FSUkb1SxUGizLl_au10S^bXh!0voV1=8DPAx>}a@F9SY`3 z=~#WIU0=Apv}CVq8I}ctqMZT=J%;C@IoI%QdF9J z^~DcUk7*hXM$nd?cVHxY>}w@t<21BZA#$Ycvn(G$aU=#EQ08-Ntw@p0Pm59HxlM9V z2|-26D)B|e$o9-^12zmhB)^k!ZCy&^;@ZJPpddaXAD~ALFzFQ`#;5FW7Umd(p<=IiZmfqg&~EmNj$sR zrDJk_o?fE#wv7iXOfQXI7Zl=MCcD<3gX0~iCGF78WCtkP!)@3Tq)OZ0PJSt^uk?AO zwZ#SIeiNwY1(b{!@peV^2YIQ|ON&ez63;3*b28MR;WQB1TAP0_(vmI1^}Z!y%J>&6 zd3-RS@=5N`*gagcu`M@_?-1Q|B*L=BeuLG&ekzvJc-aPeQbC2DTrP2E31j zFhy>G+v%DXnbniN))t}XKFcY##zkeYY8pR~jNJ_)HtHL^a=1|V+Vh*YQrgVJw{plv z^rJ~|5jBBJs)J(xpVGv$4l*UfPn-UD0H*#c7KOi}=ratv2uT-m)lRH`s)NK386qEq z*z6x2x{!aOo`#6k%~rNQZxUHQ>9cWRH23~kHa3gL&XW^9ZV1D=?V*?GHm$7L=^%^U z_0ehLy~6%@({9Ui&9Ci!t~?aO$dqG`DLeG(`e+a@)|Nl2LYJ*?$q;>i*Jy$jFz)s= zjtsANAy;(7wa_oO=Z}IaI#RQfRl+C|t7Nc14NcUf8t%rbv(GM@G~aBi$|@Qj4J5!! zEVn-VpJBTH8zN*LihBBuTnpj|fDwqSk2KjQNR`zUTl^IYFM4Wv2ADM`d-Bp@_#UMI z;_))@)ER}KhAJpNpjb#00Gl?dBso4^3HG-$j2hnJWeguz^o;TR?fHhc)Rmtena4ri zxOT}wlXt^Z(iZ6or||Lj-{#;f2mB%C`S@x5OPjy2r300|KjAQD5<}3a_p6Y;kxo(5 zDd9wBgFk|TggzFvcouauV%iDz1uH?==hxkx`C71u-{}@x?Kh{);CLpzcZhx=J z)R}7pQKelNphgYlrs}`fuMi;J9viPC~`3^lr?q~?HM8EJ^0!wPl6#S z@h>|%zF3=mYc_>ZBWbz^2^NtMi^oA}GXtH*u^MhAgb>E{w|`sdR(c{!6(CMRxr+|- zMuvPN`sL=VdlC@icRNEkE8g?YA+C4(Gnc!O>=|d!%kQRjKp&34?dGtagsvKA0Usu- zaVd&ivG69KD8AlY@-|Q<9bnH+w@Ej zRb)YJq|#J#kE^Psn`vwwr+v;(Lk^(hIY=+@;+j%~aol|Uc##N;9!4Hb6q$B0NFbrc4C19#`XvD!;y`ghOro^? zi*ivYLaG>5f};O0RKeq)vA5A2L=9n)$NnWFNAR&g#pr@K(RS#Tr6u~{s}kew?bx*3 zg^$y%nRg%BJqlSnt@ao7(9T)T-%{N-IxaQsf`%bmgbo?A~)j=1DoQGgGgqz;jU2FYh(K zqI~s=0_oA0nhfRxiwzOYoQc0BcEria0$UNW5B?~j7!{|w252Pz_4eUH4Iz%}eLWQb z@h`x4^;BUPKaz2hy;<{^ydFaqQYS%`5)ox^kYXM(P$+`}n_nZHnRnoy|;PrGXdp$>U&NRP8jq+{9htCVC)6(n>crNLUG)YPD-*Ow` zi&Ooh?moMSyMB@@$pz{0HY0Dw4Ep`Ync#6hyHMH{=u)>wpRp<} z{T}k|8O0#w<{ZbKY1fS;C!>h?#r7>L*4X zt=Rqw5f8ELjmAKbXX37_|DQfwea@$(5ZvNu(RVs4ND~wDer`JZi3%RaAXyF&tA^<8 z0V-}~)%K@VS)#VOoe)zv5@v%QPalJ{8?@iIu4GJqfacHTs>yIkl7+Yggu6s)BKF}N ztp8ewyPAy@c+GkzR`^YZS`hXZ(%YB{;bGM5KIW%CX=ueI zKe$qDgvi$aPvz|=p?d5Tra2HHpGVSLB=O|@-}6K39gU-w)yDcxU$F8_({NP|@F~_T z>u&5*XOo%k&HM%@`m+YL`o$~X8dyhM>-yeHrmt7nBPu#W<&rV#NB3pkUAUuI0*$Cv zohQE_Ge2JUplW079mO~eNp=4L=^qiYKm@|?i-8M%{uq)MU3Wj=MZqkA${<2MDuHPW zwp1N2sdx+2AJ8FaR2MmdQZTZoz;Y`pMNXmP?U1=?E(*t<`k0<3`66Y{hCS=oi#OXc z6kPT*UXShmyU;R%n96?_APo znu@Y}Vov;&W6lpqsPtwLoF3hZthNxLl10Hf`QjtMIW7HFy{YVA!pa2=78NH+ytHjC ztstOIT{89hn;p5GqNIKYbAEChDQa5K^nw{*@oNM>&`hbgTY*G%pFg!AfiFR4j@>UMYM0N5JD!h`WqjC5-Jd=po`N$d3EZa1}}2+(O>YgIPJ+Yd2_ViraXp>fxzur>bV! zz_+g;q~jkQov-Qy@z`0icQ=arG!vXt-R~0N<@LoaV@jic+zCXHy&r@z$IC*@x;b}& zrQx~h^fXBLgn_Q)u7Zb%nmUi6cR?GuH#FTe8dEC5M=y!qn@JMljeaBYn_!-$sXB#G zeU2+J{qM=7cpW8x&K%0UJ%oj2sxm{juFLAF?;i~oT2huv@At<%YbtCz4|Ho8h9!N= zg_Z$4;@9VQKPlv(p&d10Q1eAEk0 z=q7sPVdC$4cg*Mq8=dWo!0V~>8!^P?SLy7(U;n~J!>kh#P(Z_FgZ(A5qe(GHoR0l7 z9ekZx`*m7mv1l9+9KKQgbpJ2OAu>m!UtD5Pu>SWl2c+nORb^Y)K3)ve__zGA;HM#1 z4+ayK)p^Mo*>$>lR1t%ns*dGi&0RxSQ`~%R!g!p5GTUY2$z?Qnov7`J09=2=gq86r zHB9{t4rYsc`k&Bc5bqVkLpQ!+$``*-D!HBWC1?{=<&f{lVVqp`Nrcutqy2BGov536Y9$FiL zl#M7=y60cIa~oMvih<9|=-wpS8?1Ep3`K-*QL`GVEF1<-nFfNU{z3lI8zgRSey$y~CV&3*Hm`YfEc^x_c8FR37}bn<+nU1! zB2UHDr21^?bxyNc2R4F6eE|zw$($oZ3YF5flN3vx!!b-hLy1xe_mVBH1Rn|(JK;Di z5Cne4JY9ZdYYz$EQ1oIJIOmr-H}&4&Z^sqrzQOYh9J>3<>Wu$Jp|pv6dI+Dd87hjfyMmU1c z_Kd3_LW#Av;GLi+&7zKaZV2FTb->$QF8A8aaTZN5b%IZ!;&GMB))pgfDstb3aPzq! z>xkSx-9`yt&JB_^e9vM?%~a~4OOTw~nfgST1fAjgoV6#(VNM<2lOCy9_4q zRD{N1DN3f(>D7mn+ne#qh}WM5O}@E1cc05#R`nV;3^`u+s4T}nQ~BH z&Pf38r$=q(ql?COFkeizdi)EL)n)DE?~`0Gx>dcd5wc7Wm0FV7anC%Qtoi1QII2=m z_fzr3#Jjj+!e^nW#%!?4%^>mHgK$BPxS}=O|HAsf|Kj?uk3Egl6*wy}b6I(0Yl*?U z1UR-|X>Ttg17Dwt4Bl_{g;i%dGcw~orzA|%q{{`ewWp{dzC z8KuuWNPn8+^@2W}UmC5pg0|obI_Qmf-STQQxi)uwjTka$e{htrXNZYxE?u26r!ifk$ZLok5rG7%GuPtq-5oUR=LA~GD^7a zwXLg=ksJ`?>YfPuh*9n}hZ=JOa+;_%K9@C87}0!I{ZKf@To~Eg%Sct{%XQ~lL1bFd zg_nT%t&9Ql4fcU-R`;Pxn2xKg&;F#~@@I}8#4Q`6k3U|ZyC(^&^UK>6zW$IK4gZ|7 zem(dlPO4t*^cTC#jE`v9Au`Qx0MZR(%+H-&BGl+=QHTQN4lcBZ=QA~?9pM~?_aPO! zGAYWoR611BdVtvEY+(n1V__=3Bgf@WoKKIep~h|cHN|)Mj>s{6Gnz&n$q-|EFdyo?T{1Mc#1_m=CC}-4dNs^Asfap6k@V{= zciCF5hTi*^_||PRTWCsOQy#3Y?q6^+D2}$>`OT7F3yxofiMzUNOg$kq(zboIEnKLJ ziGAY_*r+w)Sf3$<(u4%*n{#gce5uRN3B?qNdP3@C;BUN@wrqHcKmf(}=ea@jaTAv1 z1}}p2x$m5d^CN&F48ug2l52+%NbO z*j$Cw0Oszxv!-8jIWd3To!iJ7pAv2anYi$AlMK^8;p)OH%p9b~R*Kewof(^t$kSHU zg~CUQn=`qRkj5CXL^vIvK$_e-7}y|We~HWqQ(0ZYrkkcQ{ZH-WWuKELrZrs}ZzqcW zydQkFwRPOA{5LW7dcxG^v6RS&`6B0xsoFXq2Oxhg;OGfRvmIeOuO6;kuNH=@Ur;-e zUs<1HR4n%Xf2exLC`p z*2=8NjNF+Ku>SKIHD(#;xIZ>E7Vq|I=bG4eC-U+k zaHxpk9s`_RdFaQf^ej(M?@*((6wLI*VvGP>vd&Q1W&ME*@s1MBDK@Am7r>EwkgE^Q znAZCrWZ}hZ51ZusdBvaieWpfhm-MpA)TCb^3pd70gl{sssX$8hoLEHK4HnucFIdi9 zW92xqf4e1OS%9edCCuMq_uPQC2KeHX-Q1=QS-^PG3BVSN!S$sJY`J_7HT>s;?X-ET z%yQgT;Y44x79P{EGa;-6OgdX8Sa*ChF2k-gm$l`I@MA99Y^D%N1yYFNDYq0f5*rKNIzIUS-U@=5w9pk`CLC>EGFYI0DZy3bPyf4rRtaG9wi8ursMwdO4w7bxGyxnPA| zU##n{=}x8urYuXZ`Fp9h_XyPVNGx@jL6f$no+=Qgu#B~QoF&lQ#-VOF=38`xgypk% zAWEu`mA-YV??@hje-4bCa$UMz!im_rl$tx(8s3OA*w&lF54#f%N%Zg5XKf)iBfy#; zH&2jFwgU=5nhF71AIdR*JS+&x`e|6u-3T9nx>V-tUhtbicsN8d{^OhaalX?9M$N+Bx*9c42 z4O4~Qd25DL^>57b2zWt{tl;Fv^kf&GFs>R#h61yBCebwC=eC`+M7BL;8<^^3@>5Dr zzxcWpZBvTg1PzDV<|P0^t4=6H^B-c=1g*|n1nUd5dyadtYt{sYxj!s>k+>>Su3=!n zd2ACZHtko(A2(Z`iInMUOD)Ezf-)ae9|y-nz@^72%rHhuw73V{CMvH#3!idK*|^f- zoW#?*qDDncr~1JO>_vrulXkp_l(i`K#{0gmHo3yPD9uQ#p&tTl^ObcgX5^W7!RmXX z!ypiB#L-sx*Z(hTqL2k^k@DvC z1Rrc*0vf;=o^bN>YVPRne~i3y6L)mv^>HVEQ?|)N5Jok zrH`bt+eErvEiv_X?Q9O19m1FN$q>g$UbleBls)G5lxU|ic02)x=gvGbfuB}k6Cv(cj-U#~1QG4faoQZpaxz!q#S)qWC#y6b z2oN*H(qyVEE%GDR&b3jPis0XAoKjnC^5sbTt-heEVE8A3wJxv9+y6(%C-gLxOXCx} zeSd+1SFxRl2yyN_Up3zKR?c0h)Rh3SnT67Jd><6+L&<%d+1Ss4fZ}T$S?*|=FsAg4 z&_(OwsNhsAj5A`L1g^?ya?3$?Pw@yNTtJU#=A5zT3HEs;IiG#TIuTp%fT7Oz66g=C ztW!u;QgXzVKU39>a`Msy5ZDW1Ai;U+|LYtU%wk9r1o;FoD9jaS(=Uka=1q|Cl<+S+ z@-bT`CYda5g?mNq{UGYkSia)w4SzcvD7h5P@OwP}(Xq}EO>JN5D(Z9`(^9757>|AG+M2FRXixpiVIEc&Zs+%zAk1A3t z{?9who%aPxK@R!9-kB$lX=NFo_qAC~ol70iTbX>#o7)=8v|%{EE9hdeqrqrqbn%+y*U6Qw+032LK$)7PbXAgy%kEdC`Wp}%~yp?r%u8(V#T+!Pgr7oSWo8n#Z zsscVB17iy5DpIlzFYHOSkS}>k#nEol()Fh2I zv);Zj@AU*slhFO=iOG0B8RJxz@q1rWfAfDTY^&D9Vf5L-_!e*iZ{12A9bJ^2zj>VajE}p2>G*N5>iNZD#~|n3uWok(UDZf zR4g4plbL3>v+0znV>y!a>v&7p(SEk(MSA`>;{2>G1lr8vM=1Z#6ZcexwTz$Pc~1Hkj)ZVlEKD>A4AInQ!HWev zC4IZwEv*u{a*~H1Dc-%qAr{m!CEU1goXrNXVrGH+}-Bq%dlntHR%)eZE!mRAR-mskYg;vjbJ(ZsG zI(iTff{%8zx80hh5$-yy1GGc~NN-NMB|A+I*@b6q0tcG=bMVA8wYJo?K%S7zuwz^i zy|bJ9wBoY1QnCulTlWT3T&V7N+A!v;_KPGE+%raPBXl!$8-AIY708IL`@l|Xt9m#5 z@->Oxku)2mO~7uq8%^ex z>10+TEks=OfNq&`gs8__!?ip;u+3X7hFMmfOT9&%tGxB<4*x8(m@&Ayr7m&d_8 z*V)3rhkc#?`tx!}z7vB;TOTcvo><~yD`tKYkR@XS?`34wXd655NM7f~C)7%OQAjO! z-g3vP?)Dvf*fA!hjMjVLmF8%mI*P#!4*);{SZS**WxdY4eH`OCcNWu(i!b&6Vy_YQ zw2XWkZ!&*6dqm`y0@#^%;Rz7CcX}c~RW~9nnG5{u^)a=)njcs#i#o*<(@9#WC-ie9pA4U^YH*Tv1~`z(w!3nCq6&!^%4X=>rIJb(U!-*AR$p;;Q-I* zVihXACdnZK*O)$z?lAtH9Oab`*sIn$fB9J`-c5uj*yU;77`6RHkH;vOnY3=@EJ0qi zy-=3B#_F4@7^?QvagNt3!21CI$1T?LJ~>dm>~@j<++QJV`6)Qrg)HLl@2jx&k4U(V zri+QN4!Oxow4QaxXHVu%>7rFvQvhV!==e6yP_WiXV&(4;`24H|%#ZxRD20{axkK({ z&dgKarmF`R)r#$j_8zTcX5sgRA|&UOX^{6$w{(rK|6jnu~)Qb%6{^${^3 z;IUwa4l#JyjtpeCOGBrGUEANq{{7XP9m}Zr$J$)%2IEAx3+zX9W$UI80l=VLgn5H6 zkSQ~H+^%l}Ms$F%fQXiFnO|@56Le87jXpz`uZ6$hA?r(Dd2(OHe!GKpAE(n(bK$cS zi&1c{Ie;DE4r$@i4_D_?D`OS_C!l0&Hjsy;d!rk&HTrni@52hK6D72aWx>Fw6g}eo zAptNqT6}fX+c!>)UMSpZ(RT`F!G7*p!O#RWDcp%Bk>aylw3sc6zy)L>s)!~>+n0=@ zK1h9Z)q~b=Y;BDyw^)SyLTj~Ol^2pMcy^F;6q%?}P#ItYOzA`j6z7WSIBGYYJ1;(x zC5`udfgR$_+x$-%Bt#D892A5z#Yqu{7$EJ*u!U{I&d`gkt2|cZ=VyV(yY+nZW<>ep z4~eX(swuoOh=E3&s!=X4|N@ZORaf85+^MqnwI+g|_42j}J`v#p_oanGA zLYi6(n&b^G-OyHxi2PbVQvCo$u-H9u;>Kb$Ec1U~S$_M6( zZv+h*=azKWJ!gp{YFXoo(g`=%R!%72gxr9J+=^Q#C_rer*olRF%mvpBxB>~R$%Ci` zhCe%_lmPd&?+HgT1XL3g03*LW)PxfmpmYdEfJYxzkBEWatYN2(@ai1hIk?1Ab7qRQI8tJ04=4kTv`muogq%L#_aFK?{ za5&&TXr*ajO#LKkg&h`p6ho580g$1TgbDC_B%(~mxatD#osyLPmyM}W%5q?cKk+^& zh!#0k{@5|jE(O#s5SFAOtlbLgZ-RlM7R%C#GJ?M4pWB9lf>rICi=vNR3%ch^xYv(? z%mOO?11P-!e?%-DlDlgsD}o3fHTpfk|5wWMg)lv_nJ|)49GC!!$8$d6Y!Ma!9OFLn zSRqIymicJT?%!4J_{w|zayesyfuZWWxZPL(h)YavC>+;fgrV8Mvy2r&GDA<8g`8Mdskp)o39K6cm-P9rDd zI{5uL=HYuvP$(sU1mSa$Z?0*i`8hFR?UY$-?mr;YVtc&U%+^JOG*pimx54mm&#k%xJQQJmkQCy`=P*kT$q z<8B9$_R9ax==G}~1H2vt25ZYd`{fsJzQD1DRt#nY)1fu z2z~%$LF0q)-i7(m6CS6@F-A0P_+~RgilT6UdJJP<3kc*+@XP|WVH}a+=s;MFn9NZ@ zS0e+tLHw)?Dt`i{BT(s9@=c#xur3K^nelm4fl>$7)WV=Z%?LA~Vufm^>_78RH=|Yi zX1|Q{L)e3DoeetJ`~x>pg8q-+1XPCjRz~~=KdQm-+k21(JDNHZf)y^&S@#dpI@NR@Jpf`epJ*+kHuHfBhh(g#8+R!58$*AQ!oLd_&?4)xv#o_j$BU60v{ z39gNyxHcU4b5B%wYE8313At4jd;<>JiW;=~KSC37Y`-(Owi~F0s2W8Hp-nqq`6i6t z*{bkH=mH(AA^}k5L<3U_&?em*(ky+3UT6&}p-VH$Ko6N;zZ04|mr(v6pUIGno!F$+ z2icy4*i;&|0Vpq&))Ur>636T@_8Ta65lx6`Oza>^kMZxGk1NuE6;%)>HBcSInnX^~ z9tdX=o+x!`_?1FbBg*0+N+Aq<=jOo-1;~j_;|!IFYNIp&q!uWQB<_;H>*SkQ&uKs) z9>Bk~D*z>p#w2CyHReB@69z|YL#jPB@QIsb150{lQ`awIJJJLA zyP#a4{8Fh33i5F>53oAhRLm0pkLCn3B2%hSY4LOH9SIzkj_ntbsXBRRZ`>?1O+vXp zIw8RN!;HW`doF;0-*8DkYmy7fi-V3jl)W0HY16Or&3%4 zk4Ie2-U4B)9U7js7@>IUTErQoelgpAzNz(c?OIesHpql5&^oDdjX1m$#u~(S#`iSb z5kM^?sZ%Od2WF4q0pT4&JP<{H^*CTn9zzN$COYHx2iUYcNdF9K$u(UyWz=MLNcIL` zP}}0LP861?2oOrqM_{CN@ZRNZ&gqw3Jk%^0eETVxGK3h_fHUIjq4Psc4Ah4`3))O6 zXT1PQc&=|xS@KP~xeV9dna@LiVHd*F+iBmaFt5Xt3th<8INiu7LA~_6Qo8yb|H&@jbdUe_el}#?MopJHcV4dIUzI{Jh zuF6z5nLKgOqqc3YF_=ktO}13xyl`GSHNWcWuwqZy-imQdbMOA)y5^i+1Ly=?r`DEL zys>QWw|JDCF@ME&v>!cP)k?itsM%z$D{*m8W*Tm-&6?5UlY4dleQ@@^+1=I!ypOPZ z6?<=49`7D7Ps!MHO#eM4XrGCzR&P&Z+BZMT9-^r#tB{&}lAU^MO*>JzqhJnc+ZY;j z zakT_#zt6h5!?Vt?+1Su_6y5`kBPV!25&Sorlm}t&ZG=2@|WSN8x2; z*WE{_S^76EzqXV~NKXRVZ@TpvWMV{5iI#O!sW$IiEY5V6 zZk+Tvc7=s-Kem8NDqej~Z-ZOS9dmphm{U%+7N%ArwZ_{|ZBA|z>vPDf_gQTAi<4Fr zUCDojphx8Zv?Uo4}6%!c|&WjINYBnV{Fu9iFDHRiz9WCPkE;Qc8 zyLkNjAuCraOYjQ@6N@pc7X;M6uP47RFh08^(xGJBqS``9AK7>Z?!E8hWYTo>s5qLi zM$`>~1_wBww}e6k?pmTQEM#8lM(ckv9fRAe8M99BNB7;wVHRGz46aqV?al;=qZ;H+ z7C61RXk$hs4n5D4&X7|{R65G|k6Iek?1h?6z?^mVP3Za8D-P!=e(c6>&W`@A*!5fW z(LsyfYCarg)Khy|*FbIvQeUSis_!52<-iqv8{FSd8PkU$0C7q=(T8CIyr^GYs;)$X zw9ZHCpXn|_)=cgNL@Zuf#ZOHcm0pMP{CznwK5ljLr|kT`T2)$kvHo`B-FO49$4UEQkzpg%5MEYoFNu8FmSeVC8 z_*~{2`3?FOdn=IF+2NS9&BULaXK%dXa(U#PAr#5VJNHq2>J|P57{g_M$_Tl~)jU0H zDf*o%1!b|2U*~PVlC6N$zP-6w@pf_NsV6#1L5tM-Lt5G9s<8UUaBhm}`CqnZn)>q(FoP zjGci+Ly7D?0?B1+1peD2MM!;5+NZdu?P_ZwLfTEkCBwbIC&5H+9Q9<4{ z-@&!PM*(U2Z!Rs`5{o&<0cy^CLr}k?Dv)%4-z!>Jb46*N*M4m6`n!@<=X}we=^Yhi zsDzERbVW@6c&h7UMxrZxjJkMot&Y&27<^G;2N-<1=^xuvFHhs9EmHg~^p2Xb<5t=J z>vTF$EH`3G7&GNQd1P~?m0r(& z`Hj@Yty76_-Te45yl`>^0O>{)LHplGQ21|{V^9Da!~b{L*%Yu-gvO5UlcUEtBW~$+ z?&uXKU#Li#Z(Br7r0_tLVIyBO5BvI6^kaKCTOu=Sl5RGN5KXV=E~|o3+sfKNkGd1LYVYdvfKAqe{wl`A2hXs|8^ z=CMoVZ=U{@&Pp;cHr1e#{`fS5ZNdyC?i=P!zVoQSa4p#3>o)WY3re!j_5W23?40FNF}*J}oM9v|K^ z=*kGU#izcCE zj?ofWtI43gij{&JA@9%ehtPvC+5f8H+e=sT4wggeOyhA$9zOqKMQicb6EgRpAD6lArQmIOV3Nn z-|cnJ0L_Lrhf!yzKPO1HiS{|zv=5vIT0;+G8FH?>$RBUI`_29=8cQBiCW@90als)} zms{h^XU}`lsq@27!&f*8ABDRg~oA`>xE zQ@m7NN8@YSOWn`=9su64POOYc5v7U(N$Fmyy(ik(<&aNmgPh#66%g40JoqY(#p>GW zGG~Ca^wO4hX(gsmVJZF{&jNR|11K#f}Nd#mXfg&~}g>zKeuaLE2Js zH0x-igbjI_9$L&2>WW9Y2K;=4BR6E=L3ak@Bi3~k?>xdZ3na8Dp%6h=(shJ7I=~i7zllee?Zj=mw#Y6zda4wFYoO?eWT{xHj7(P>g@0$}VnCpuxCh7snuXYCT z=_u_am>^xoSm^KqrcyX7EP2jhi=I2Qh+^H>84 zFjC+t9TI{FfJLqKXgqdQ;7a9VsNlavZeWn0sDm)|^bu}Q>V$oKW@`(5ptq2+p9JDJ zx`pjpyxC!{dw!KmL__VhF(mj*v}uAWJ85V-41Y;R1W9|(_m7k7tAQ^>!0y`;wFzg-^pBv}c=O$;g}e}s z;GS&&Zznh0a7@pqeQKOMvC1bgbs3WBw8KTFvZe=e|JrquEdioGbI?J8^vSASFS6cu_rNx` zvYzB;z&uQd!Ilbf+%4!A2vEV8?Ceh_7vW#Y+EewF{CkA{?og^{vE3F%>c^J1{5 zl;?Ng;>B>)p^*hZG}4!PJtXy9Y62_eNFpm6KtqVZSBn&`Lq<(vxlWI?D}-i^L~MY} zSd5#Rrqmfh)nzigs#`tL1jNCj8LI4y1r1Qz02Adhh;`2Tochx!x)UsqSyQd9yzSx4 zi+ZBHFoMu^PGHvD4DX}z)d**z(#_X=Ur~cH2G_xhuv+Ceuc;K7J$d^v-9lY3&aO8z zAdABZr7AE217nVgzI=`Kx7_nzydNsZ&^j3-K%RiCP};B~Ue7g3?a&F+lvRbKOm;ex zj@mxyLl>Y|Wy0+8JDnz^r#XQt{eEQQ=4pMWvaj-_M1=r+d$%TaA{WR8J4l6o7892Y0EZIx;CFpE0C2O!xt_nJ*BC|`7bQSE@SRO-T3d`JTaqSk55s;~ejj(WB?K>W|? zP67PrWu)aaOfe}Tk^y0)G_WWbBBeQ5v7Rw}VeY9J)q*zFq@QKZYzt2WTY#^boQSmP zWNNRlRam}^5=W1}T>A_eFEHB#HyB$-DeW`*!hto^PcNxPCv&lgZfV%vJc7 zCrnbC41C=2X;t?GN*z@z_-F*nfDpoT&0BZ%bgRDt^n(^ZmwWMa_N3muyH++!hMm02 zm=JDR_*`f*6u)`Ipc=2TXdr~w7QZF6Pat9zcupsyN->gz!!%t?m4s3a8Wtv@BA_)& z#i?3CYQiF-kC>GrB(#p4-uQZCczOoc0YIF|AF~kA)o__KnfVePuof-ci6-Ye`_BruA0XC6c< zxKfQrD^#|+Ld<~Z74`D`3`;I^3<`p3RF+1(L)+m zdAab>(ES>chsj%wK!1l8Acvxpou*w`J-Balb``IloLQx&bq@r0b6OjV_^ z^avuwCJOmIf?GO&yIrc_@%qd{?v~|{l&bao{^yvYElXgGiW-0{qkWNUa4X20_GR_# z@9a;Bf(b14O<7bL8(Nx8E!W>MMGg>sOOh;7MNzZpXdxvR8@FT-wX#7)PN0PcwTh^# zKk*hFLeJf!?q_5O;yyRTmJ~v+>uPuueL6e_$oaX8G4>JBrY)JOjGPynjt1wm4KN`2 zYa}G8B>a9N0zLs}u#PR^06V3@BQ5Jfc61~b3ZrGhYsn<+8Q%zM6+J9NH|pV(T-2&# zY0wzUp+7-_FH$5Wn4@_txC37ZCTA|^8-n7Qf5a5a^3aM}goIhiWgbb7)=Qv+WY3u| z>YiessU<89)i{+=j-&_u@Y8(Jd5N%iCXV7gW#Bs2mw5oFD;Tt$!de#=cO(+aGw7LP zbhdH`Sa!_iy{`|q{E1_Yfh=FQ1-__p`Q)RxcFd@>;o{G!Of~6=0wriRccn!O4?WUj ziXb~UL5Gs>WemdecD)Grko%<;HmSX>_;+^K*;FU31=okZg{cg)10YWFuUwa6v-wHK zi8H9!Xp{i$7U}OTy{Wb1>hPq4$oIsLWRa|Prw3-w5cU|DjUZ4VWz;oY%w338lR9=*jmw@IKflR|ePE$~d;=n@rF0tRCM3u4E32 zhhowoAHG=&f(ZQNcJpPWDKyH3M5=AY+A-_}!)*lVLXc1N_}0gbl)XWzEA{jGm>$Cs;O%2cZWayf~;d5(H@^b?Im;iC6>=0IZfP zcv61U%qxWpD@DB0$!8PDyKb$5G`i(s3oaiG-ll z0BxusS+~l3SaSzUjPw9&ZV&bQ!dEIF`ONX^ZwPpi?%eJmHCN{lxL};yP=0rWniC0Y z&2?+Xw@JvYQZ@b1Bax=JPQe2bQ4v5ip57EQB=g#1q{r)4^xxZg_N>e{+uyw&4@ucr ziOv&9WE`YM?`CUg6jdMxT3ru zWxFpya0|hi1WA(<+7m5|)|yFH(vD%CFg5nv7~1=K+um1iFaaXKLY?TNLUDrE(;?^6L3hRP+{yG>zDqt-4AuOt&S&*? zJ((F(6_I)w85fqkdRZA$8F0YgKn(KNw2W(OQ%J@w7|p$YG>o}81z;qEs7APWzh_YJ z!`QBG9uoetmBmzlV6OLe5j9JZJ?;t*T5IWKA*;2gDY=Ai;_M~&?-6uRI?HZORrnNv z$_j+rFIX`@9L@-PbCFsvUo42hA-&P}>WtXJ)>kib9ofGz!$!AAy2K=LRFfihVs+IQ z{mRqDiTp3+A`A5u4(Ld~WZlVyms|iy)u~f*08lUSIIaIV$;du1BH$p5DXRW31TZWz z$b}`1tn!2@KK?Lt@a9jg`;&rJRrGQ1a4D_+Fh2n9D<9o&opAeAYLgB&S(|V~WMI2d z0kcBq14k1fn^Ou5-Cx(vuKhvtiWf$CH06<|g0K-4K5H6L_zvHQs6I&M$&{85ohssB zvOKh+JKu0rm<$ZJ&Bcy2xlCwEd0Y#qrxTlhPAjVYkz}AIRG*zlk(HYbu7v^ryR^Bg0;n#0>R zQfS0N|I8w7dp&+cEi35LS
    jMZ|@+ACqn*Yw&XEZ$$)Pz?Un7PungcG@F#}(6a!Y` z3}li?l!}W7>FFF%^3?+L_gXZrq1;RLFzFiMFI+z1X$XGDe=?eTYl0z`EyAaRLVbh+ zGekCMA5Z!xAG9t?6)9Hf zAS<2oRbK*G_MEU7JHnesopwkN_ zg@B6ifWCMdbk>$S)_D=XhO-GRCL6aflp;(m<_1IswMRad#mVxh*pIpFVvmw76seV9 zW1a8_st>cWLzV~d=Y<0yShZC3K{OynhzU)yP^j_FN-ngdJwkEmgFRd=I867gTmDL_ zAxnkxcLRKfE03ZW;9OXJq>#&}5{buS4^Y2}o;J0r{w2&ksvkvr5H zzn0f;(G$kpifoY}ftnAtOD z&4pE(@SObmmT;oCxH#3Z-(riT$9Gjy(~;3L$Dmg-qa}*P_+>qM|9jsNthL6!*-i=G ze;D2jnk!>{-$P!_=_nQ8(TSK1rJ!=b0BduDJV2iFSxQcb$pR{wUTXB58lkL^hh5PGmr+Sq#(?QQYohf0vF60mJok>aA z-p9ZPcy4{PzRl1*x(YCkwB6az2PRI2>UV|F4)T4zTr6+CQS?23E`MD__fj^L1L7&$ z5KOo1_q&uuA!!30>n1`*vUa3F-YS)R*m@U8B_LXS1CcjAZ|*KX`1yUFA9pGA-`qAn zyhhrbo?b7v7>Kg=^`UACv1I%3s#>;E@m}o!O%hYxnK5x0wv!XT7vwT*-w6t5ivO4> zfqKIc00K7OKYAWx02%IShm!|x$UCp`o)k{E^>W+Zua|FEVJW;Ki1zS1T76GMYgC$y zrzj(6e8ff`W81@rPd8bJhn&LhOjXZ(%~2m{swXGXQYoJ|I$le1D~OH@#!Ax3gu*stG!C0&ID^lt+JQqmhKa=6~cmlbh_h%=DaLJ z$6{U>2a6Y=Y{Z`(v(>N6PyM#KV7>8>+SpCyr_D$FI7mvkVy!0T3{b#4{zJ0v(0SC}y7ZDQM|R9>`bSJ) zz-}5_bewbX^cLI(xr9Ld=p1KM;vDB-FOAIi3Z={93(fiFIw{G&)31T)G}mp9KTE7v zD05vrQ#O+Em`I{&VRJeHz8J^Oey=xX1Af98aX zz$4FMtA#fFNlV?{Tw6(rN}5AE(+^=X+j!h~MZm}V{%~cjW8Wx-n4=dRT~Xl8cD*}= zW~)6fpK{_JvuKjx@s7N+e@`dwkSg7>tj2M6@>V3lJvVRsN?+d;%8&W#XB<=l@K3Ue zTl0*s#GekLWfq^WksiQ8J2ZK0!}^I^JiSjfHQR|fzlN(iwsg~_XststKN|kgXsu~C zf@pqkRI`C~{q&_OAYl+#uL^-gLWQvnc(-*p?{umz+=dV*+sKelxn^(QR3&2a_`ajl zT?OZUZcDhA^%#qqY=zVOQpFs9FC6^F>n0{(YppSd?)!aOn-ogbtcyT!1V1a>Y< zVWcsh`VX_Y()w>PJ5&7Hr_MPWw~eFOPI)SPl2iW~vxJyjIE9ejU%2BW7?9XeBC9C1 zW6e&%*5#R8*bg?7Txc@q+6#A5As0(o+0r9}%GN~?DOClV&uGto`XG0s0kD05cSvCp zZw|YeU{oFkoLm=w>1qR?2t{2hGfAOZ|M0JiWu&a=ZBmRdH0PhwD%+~X1i?~IVEIN;*lLF!kO69CUA^aKQ-0@L3?ZFK)8=~vIFq5rM~ zuXo@bYqnQ&{iIzTR&K?d%=m4L1Ky-xMn~)BKR?ff0)@2ns%l;;MTHoE<%)(+U`K== zC~bpqhC+7%{=f!k(sB82gAxV%rZd!_wqfwFiUaMFpWm1a0(WzPj_Z!JAAfuxcbRBfz|?!%Fou zZ*^JAVGtcne~m)Fro(yk$-7{0DI&3fD6R!koSB=5Yz|zWagb}(jJ4iOaI6|m?nJ(h z-0-2%uyYcy0?l8P)KfU+(ui-W-T_`|7&qpNPR#F0SR{C zRQ;$|$mAQO%3d{0us)Uxw5ve~gT0HfXdk&cmP@H9@WW&fJe;=Xit6&L2S zHwY$AUvrPAzbOJuQP6~W_|iY8polObS)rrIXet{ED>q)Vxu_BRCg*&(D-}v#0f&b}ZC<29 zkva({Qv$|`aQlb+$=~y*v^q7PZUy$;ye0ay>9HE=;!YZSyf#jLLwv7-`V0*zh~z{X zqVC8z+#W-)(zq`yrXcblvH>_B2z-Qhg$DrJKha!gy*-nKlF~qi%#l2=HUJ`KCy1{9 zhw7hb3e-`WAEsgO`T7Xj9=y0dYZ7Q@beuc$ZkXEUo6pW>XozM?ohJ^bH^puvb*pAJ zN9iC?l804u((B*8dZy4Rtt(62Sq<-o7@@d+IOa;Y(;xM_arpRN8I6U_yzm0Tq5cAD zCc?T%@}v`lZZG?l!cG?Y zoFOP_3DK}uc2-| z_dsx$;1(S2yx(1Ct#f|NOqZ;x-n*o0Pw%Q{hs(Qs{X z2IGU}IY5`{3J`ktU#I58RCya}Xl_+R_{&JmrgR&MiyuN$`exm;T^Frpz1&@MGz3bE zpNBMao4e_o5qvDabz@(S!S(GjPHT9botUxzG*+kXz;ZSvx=|erNrzxGif;bV5TQ|qV76CV2>OQK8WydFD6ntCKCEK+>QF9zb_aQW1$^T z(tV*mjQU~@`(6j23ODFFUOu$ZS#%6J16O;}C01T1={K?-TFbq0xJP zgnYaj-h7U^ZA z=BOk>7(FO1Jzz*?hGb7uONJ#>8%Qcm6G{4uY5jM-=jDZ&z1@6VweDnDY$(m|Hr4j$ z-OudgB8C60g4-F=;qpOlFaNjK%d*~P3}rhSP|#TT+kwDa0;@~fdG8C0SYomni>1>~1UI5?wUFzkdG6GW> z$_HX$Y9p$CV--y9;_OvlZm%DTNIvlVcp3~*C%RlPHL)fcy;FuHY+X|fb}g`ZyWEW- zRpk7nUjDE~XC~+hzd&XJHub#OP{GvqdGzYo`;Hyq@5%jsAuJPDn}zZOhu$Y;O%#CI z3@?}g+8%`o_~bF~N5#7*0D^t5cc&M;n2FBt3PMZ7X@7rWvee5!6_E)cs#hdJh27nc z+R=M>{)S6Rj3xAVza?>O83~x++D}8Qq<(YxcrpBgnD^ISh3nrp=sEERVH%u49=Xo8 zu3PgYrn9u9MD@?16~p)43q`qymw7%u9kO}RmiZYQz`X3SYUHx5ax-1u=Gz8K{Icw=oH&GC7IW-VjQ+^bZMAlhPl8o!kKX7@6O7TI#ovjj+nh>^>m~ z5!caE+f=uunycG$6inD>9OteY;AkRv2%`nsR$up|VwLKp_-NIB6q#*${hJTFKO3Tc z@}PJQ*s4)4?;e(-wWNJ#0lCaR*GJlX{pl7KidsJocgDl~{;AVn zcGCwKi|jn`=F0Rc{8=hkTR&nD>kYg&+>?qEa3XXs4DZ(lLvA+odO`!=nBfq{?v*zk zxOd1Ez8TZc93POUfLo>~c64@3*!Z$#nH(J-5sl6#57*wenlj?Y_+r&&#m(DYs*MqQ z109X@k3q$Mov^v^1s=PGC|_N&%Co{c0rx+-P3$>tJlgRcP}rwhXfj9Gnj3|(I}W!0 z7{T?k=-5r?lRY`pnPLwq>b0Cjzv^z9Y3hCB%R`E!v8`~oWEd6lW^z8oXo25(5XHA^ z7};`GWPqVwx+fxB<@M4vcpz?F2lrH32l|c^CHM6zDJy$i94(1CMLnz;^@}^xJv+rx zFn9547-_Q3@Uv&j$|LO`k??B%9jAyB-|^>^=4)BRq|_e7D^B2fzC-3w@0l-L(%LFe z*P~D^$wJ%wc=0B(vMYG+AokMW*Tcv*Mn{no6k=U41NswwLhic5rob&C;$4Mv0rucI zjcHdg>#`Jd4A@$1R6T3lwIa2+_cdNd^$a|?Bo2&rIX*|VqxerP zAZ=XB^FtA5TrY5sa6Y6e#%6bwMR4M}72JdyqG^a26G24p&qmsk5g~es^w9Q%^e=Bf zBC$N`DBQLEZVdJN?yigm|kDj8aHe&BX7JLATdwleb|GoMDIjP;MM0}H3EQMY{k z>X#f^6~$5c88)FA+80~X_OOArAR4!T=`(p_KFw(PF5G3PYy3_;{1EU4u5J2=i|Vk9 z@hk8rzBzxfNX_u!bbOne7}d%B)z6+2vp4dXU;gniTsZ!Qnej6;lzmZ|?a2D*Y=H@s zhZp&eQR62zr}HH9cRsSLz*A=k(Et%vctSd57z@NHjR>=G<6%opQr+3+@AKi@m_8;Y zNlQ$(OZ+JbxrH46E9|u9%Q=6if5Z$jPL|3Qpu?n@{TgXh@!3*Z2aUd-GjuI3x7I)E zrp9pN0EUI2+Ce5jW?E)x`|B3nw-P%_1*&i11I35|mqwx>Ghi1e5tp`ZH*wo~U^i*O zaAo}H6(Y)0p6m48h@JP|UWrsT&Fx>X%N4}i&|cCC=KY39LO+q}F5`Qt0~FVGYW!*;F|u+tW%jkSE^6W&2pf&?d2dsK=Z*ruuKD+PbG{La%oo+oS;ogtxO7O`Ys;4N@_Cw>uopQzB zZ;fGGQGNnCZ+X8SjMpLLthMXQcV#il;Fxi*K>kT^dqkV)T`N8%@O`^}u$C{~|JqbY zJA~)a$w0k`C_Wx+4QmbYajlS#I+-`LE+=Q$00Hp~#6q~QD0;}~L^>8F z2)x77-o8!x8N!8dq>_$(z-vWc%a|;VXA%y|zrDj?5|^HCa*%ho;NPR5h`$AOSwApz zI3Ly>nAR;0*2C;mfKw8dwoL=zka<`YZa8e-)Y909I-{x(P8`fW04K#QhODFVGpG>TF}AcKwr$zQN)7cWohRz7HJI_=YQ_gnyn>Un^H{Nc_8q99%V!p!LflAXZ$RJBL&vgCh=RxqSvkF3Vf^O*J6H1 z4780ZSG8GJaTtbpKcw52+xn0sOf-d5@@U`>?I!M8-+vXK$^S+7 zFCL6{jy2x-Ldu{-Spn&Q`mg9Mo+9Wt7qA2#Bh?)K#?(cgJ@hdvnI@*BV3Mvz@51x>ajb;^|7;-ErYghAYx0@4jX5t%CiC zAbfwg)cK}vKad(zbt(F<+dee=DMzb<4`G5xHz~nIG>qKP!Y`4sc-#dAYc1uyggJ)= zijJInSPNAoq%onrx}1BdR8UmsAEVOZs(k7cVt^fAZ>!^rivPb9VjIQvzXR(J;@Q^= zW)*j##{%>Pc1?m#tO|bL1lAtJzJ{HCn$)q#GOdpQS#sOWYSwMm?mp+2mgy=ex8sWB zzwcpP02!;}f{mG*X1bqCaD92zgj)t+-lX;tdb4y>2n_bba<0%VjkdL(uNjC}|CsP* zJfMk@C?8P>G7L-L_{`g__*W%0n0h^Q{Q2tqo+B#ClkW&x2O@WV{6<%gZePrtw{B~8UTJh=`>ro9OT818xmRaW7>k!?w zC3N0Ez*^xlp&-ZaX|Os>m}88Gz1)j5I_mjO2t(kgPnZPIfW9{Dm{sQ0W>dI|C61F( zpx&QX_$&EM|3RFJ_+~Gp zc+uo|)-n)qnA6+=?=&hd)f|0;-I=X}dR{F?V~x6I80F;$fwHpQUG0Cwq~vHI%*}}T z>;8@NeK+<6UhcV?-y<4Yk_$q@!sk3!;ZOmJ&hbsihnKpCH%g>Gg4_uW{XmjgJLKh@ z{3{rSy1-)}dcYiWGShO`Pz{#q9@r{QgIy z9E^pq+_H7{@ITAf7~6BZ2$ZF*roj=&{}h=7i{`vW`n}#3RZSP&C|%R;Z<>S5sc`*px3hm z*QPw3E~q3zB4tcKDQl__eB@(EBh2uzW>OtiP3@>4AfDTqh8Ql1bqq1+^~@1o#B{Dd z>USg!nMq-;f1y&70a4ev-$bW%8%tDkDJpq09TgSqyRcnPXRnXPoq`ZCFnalp+<)x9 zaWNh=Og)@P;{|@yHJC#;bTm=U0jo<#cFyfs8IvQ@()k1F^-0nE?Fe2#gusCK9AD)p zmy?%w@9Y6%9$eKUj-&%y%{nrFdTfRy@(i;V!k`y7mY;X191jK;<7ddr}WVrQ~`PD~t=BHP!xO8@px(IjG3tU8_dwqtd#zod4!yYtf8 z+LuhhnOdeyv*_DX`)QGasL7YTDcx?^sIj@6fOlN?EP|9U({w5|4R9zp<759(efcVQ z{8YOwIW!=+AARVCSi!HFYiak#PcA*76(z+$>)>QH(=DHlSWga=4 zD~m`87iWLzK21N2&Z$kB-ji zSoX#P|He*v>KBY?RRI5?za4~}r>iEcnIyI^t6t^vjTs`1HSsfPCYu_{q&Q`8(M^in zT$J`lrG6chSd>o}jJ8yN)@sG|#+w(wY{S-k56O$S*k0uHNX2MWuh{iH*AmgC#%M+X zyjosKT4(W09bo$3+t;!MW%SJz!VC6ByKl<$_cYV3DdjxnNMnUT!)6N67+$ufuIRf=LJAB{1@K%< z)>x$QG95GwpB^nC{1=#^KbTxG7hR&uRjCTb(&1XHDhj0dF^*wA*(x*UuTe4D1#96X zAi-EO!W-d8q;E!@3`}?tAe|B;9ONgNnk9b!`=l7@mQuEPAl#B}G>DZ{E!LurQ6EWO zO&aWLzmwgxw+8IbO^VRDvZ0dI&$fpAL5lI2BMutD25} z;U0^zRMg#4tj>SFJ{%8qV^G{b-8n|!p^B?L6kv+*i5baVuoEnhyC3&lG<|G!Owyg07piYJ)@~~qK$TaBL^$Y9D5pchQ z7dy2;gheQ8rQ2r-tg2_yodQ zv;{P{oMmeLj#}Nfh=RoB6mmKp|Cr(Wz)Jb-;+=TLSincWb7Po&lffuph8amz*!ij7XvA z)v*e=1Xe|}v-&$}d1KIeT9QxIiQz6Yuj;(=UE`(X_(p$W*>uYuFElXInfni&y_+@$ zjnH1p5Rx!O$;s&#E$HbN#e}uWPj&ENtE<)KdHg^3U;94ZD}E|i@{em99{mC4 zCToxJ0=V>=uiK5k8?fQB(LOmlZTEWt+uInsy#ZcdI$|D46s#2h0NK@UO55(e>awzR z3JDlqjT12MowuAy%CIkh`)!28nIxg8;RHe7m9EaYzd1zPS;GA>cOa78hvmZZ=Ygu7 z(td<2$rgLhU_wsP!dj${+hzYa8V6YPTO`ED7WKSji(>C*lx|_(62#wd-djmH)3@#~ znaeG?u$1TcF_Cj*FD0>|y!;reV}SQprKd^U-)dp}~=?|Hs8)!)Bi2L&rly%)j&aZ~d-iw(1kAm{mH@BOiciAb+?r zIX+t?hGT(fb+;R%$;MCJOZ|PT^|9&vx?_Zg(08)T|6GgpO zT(ZaDnEz|3v21IjG!6#5S-BK_3`fo^PjzX1tw)5M#7fz*dXBs~itUKm3VCxVTW0LZ z=pogaCdN7i{PCSaq{(j$)kdIgDw$Q$&{!AjApJ>lRytGDEWtW)gx}aa{wGCw8Jt!_ zt={>`i}#~Xrl7^)6*H0oS-Kl{A#C}LOnkBCO|YKe6;%{_j+6_d_{J|n+`7Mv1O(-> zo4^QEyZ|E_9L750j*->kVv)XDx%up@)jk^?@7dkv_5;+zcc5*|hzsaY4=U-d=;{l* zHCVfFhH^;gbwhQQ4S4@6JnS|L+3jnZG<+{|c2*~bt{0M!YDf;p1Ybe6xE)Ce|EEKZ zYFkN6S;pfNVt&{_^Uk6eZUFKo?U0~2ikc^ee?By0LgRaq__a;a@MZ4lCsT6&hh4(1 zlVqxGakL;!GL2oX%`+fyV$>M6?-Ib+ZK`~6gD~{KsQf$ZZ7RRkYRG;iIaeuLDvqK^ zA1-56v&(klZy{^Tdfk@Z51YyGcj=G`i~f{v<$pPb{L0gpuBG8U=2ykC7jZVb9_X7t z)XeIZvT96jL*!2$f%h!$DK;&;XH2pUm9`tOLV}b$TqCT3Ji{oQz?ZLS`O(coh~! z;T|@9svu^(DIL%SooRJ=4Un@AVql6^8Ym&h;Y*Ch+q)C$MNp#~tSB z%dx3;zK;4M-r0jFt#%!v)Xj%R#SlLADW_Ag^UZu|TTQrBA*gA)OGy=0f|^JU(ZLQ# zx~|X}K#q-?&MNJ}0rkNoBs`lk7r`}kF4gimTc|M2&-8bk&)=L|ztT)dtFsT>+MVV6 z)7=>ESXy_86*iCQ?u%=s%-?+Rp-Zo@Rpo~QC5mV4*AI>^4g zchCqcV?Y}?3>}4h{Gq$Ql2M}MvR3*gV+KLHB7^0BzpxA){kKbfS&UY1%p*iB*J} z3J2F&z7vhVPXX=CH0Bwq(_{Mk^7>S~U>B(ITwNoQBBSh1Qx|C1;^q(HdMMuGZV(V9 z==PRrXbXl_an77aE}6>_aP0tjgT@Q>wFOHfsE+G?y1@13XLCuI2k365Bndf#AYzAIjbmD?2VoB@8* z8i~5~oC^Gs5hFiiLa_yUuNZ}u4OC%9k0oqPC))ZtUrztR$SmWi7eL5QFU*}@3-Usr$6dRC z@U|=zhaEb0c+JhazoMF9u?TpkJBE(9rS;JK-+!EjtE$$$%Vw`K#DGnZEA;T085CX) z2dK)iHk|vYw!T`tH$6byF1tr3*Pt`V+4uHoq2OPk^V({26F<76WMM=8@xl{r*J;w_$Z}{auk!ZfJ_T=T}~cf5pIlm-!IV z7_p(Fq>(ANPbj&xlG+xD8?9MLIQDQF4C#@gt_ZXKEUNd9pvA3@!pzlB-Knf6^<^UC zO}fP;UL}*5!w^x=H7}qH)^9Yx(oC(K*8JgD&VJk+1h#ul%||P8g(E zAmY5jisLz*qZ@-qXZZAmSlKzFKyL<3Jm>P3>;ad%$L9KsPA3`+`=0=@ZiT@$ZuM8% zyw#38#~q)4RN}nDj;#Piyse}=+9zq6K`zCvYrbqnwD)EWdm3mbTkC+AAJfT3XB;D! z7Vlg?7zzYFu1^GYOTfRc9%1EQJqV{auk<+2Q_JFHDcD@}SH8yAtjOTe5#`HArMK2= z|G9+1@o3%0&WeA?^Y4%E{hgD)-3?iR(T6uQm^xKKmRO^8MYsr1+vgvp{NCC+*GGR^ z8kOwhVV_=iEXc|JSC%@fAip@Kd<3%ArlIc zin86E?w#@WbIdY{h3eoo}<6b#llwpG6E!Ix2!qk0m?nTqKYFdHb{8*$?8=J39LhYZ=l;v7fJ0k%6u+E1?S&=K{wtJ$TeQBr)ZF0@tC$uiPiJ>zm_OYoS z`iauNC<^2Y3arl(c)_}M^+#NJ#+a((ThbwAjXD_?dsE?u92{FC-{&Iu``o^}^|sF# z78IZLl}isr{@CbTN=*zEFme;12)g|q{xz&aEU=H`6;)S)@>t_6Hj`X7%S`+WA(lf{ z{KBuiFg)+CJ4J&?>(Y@S;*e1tpci+!ua%CPbDt0_X*IB-arE5T{mwAwl?U2Y9nv*>Q zbVUOJ+abv!KSun8X`S7rFUvYK)B#JJ`Hny5*}V0>)^dNu^OK`DzG%8krc^o5$bJ#e zpH!L)I+Py6J@=I-4BYweV+G@x`daA*7B;4ZyFLttj3{Concv-j#dCS=K^)H_(mzxi z`QPeikLyd2GhtxAJBH-{y2SpM;R)bBdy~RU9b|7Zi3-1oAwls|#oG=Ua$~-kfESEI z8hpcalS9wk$Wo?^+?WbCWJ~l=f*SYY)pq;65B?y-yY1vN8D;w0s!5)%LrAR-hIx_{wZuN6g*)0&&;NaGXRmS!h0}`MOAEaaw5c_EFkq`1|C!oIM)i>P#oPm)*Qli^ z7AiB-Qf>u7s55>X&7O4DeZ|Yy3rzT>nA*#9qMkd1BVfDe0Nf`S z048@M@WnWYO9SzkDxRW0FobWa&ExF{>)!q+g*ZpTH;&iLKk}3i>7>)=D|X55I5Fo2 z&PUge2w{eUwim*H_0WE>lnxdHgWbEsui{%^3M`17+Y! zv=%KY8+m{?k3aBoih1?_``2F5hXVh{!It~u{cvnCC&uXQZNH&{4)Ht6@`uhytxO31 ziDB4|Jr}^ojl^~^3LAA}*-xc9CdsM4im~Nf6ra&F43+C@d>$(lg8B4&R z%H%FaSBOJv*)oGtgh387FiTCR)mR`HQVY!sCPYlnS~p^dG~F$%suWG{)FFfn8|j(v-Po$&_Z(LW z_6OJXPYDFD3|@j~jEsN7aAiP6YXgJ;^ISda z%CGCq)f!@@b=qI&RA!{ee;C>Q)l13_6rcTZ*bc|_Go+b zoV|Lv)4e))^qk13smnxo86535FTY)xh$`JT z1***mdR`sfmd3r7Xj3|5mVbgRMzVRg$_=D0z=GNA0mo0s+4r>Gnr8kzM1Cp3)Grv? zI=>VS3|OlILV#h214@-0%hOSEZ3n8m!Gut9be-qi_s~*9*`mtF-=EtV%G$@ zj@{74d5hbq92x2Mofb@)h}=x1_7B1ghP~R@p zWTG`1LSfi@P4pi0=gp_R^BCi0)j4VF9!KQMudI3#MQyHE7aFElhMTybJfO(n^lElz z2C%Y@c{|X5*VD9nK-~tmZj~=@J^f94*s8D5e7o4U+o0g^+IjmXtKX64O7NCM&^+Yh zs#x8?R|^b#!x|Hw9xUlu%ctnOx{tQr>z7mt%Wcjumba|@VOM|r%FB6{I7ySVz}cRD z-c`E$$6bBJBIiBhzPGFPJiR)BhVkbPhKnZlw0?c}ToM!h!dj;T;pQu1Kc+ysM=+yq z_`Ppxdkl8`L~_+ceM@HxcUiBjuVMzDbuFJ@kO*LNqm|QD)@dTli;;cCNWY@ZhY?qr zChzrJl=E6o|2W-By)0Z@V>h*1D8U_5oGWIBL1TiCZ|$7A*rO%xz&1Z@&mQtenbVmP z-v%oNTI74W%wiXfezN$@Qu&&0&{JXx+TC@Snzwkt57hQ4t6$ar*_z8EcFqzH-nSkR zb9;bcB>BrIt^L^Pp)7Sk@?^9}XS#kGiEcfXdgEY}5n^56)hnyYxaUEY z#@?x^X6C~tKuTnyM; z^qSJOb>y8iYP?6Wv`TX^VwA8sf8-0 zs#&Y6jd#Lcsp5#I(ZVtmt&<+kNo@0|`RNU&_h(t7Vp)=;m11#;L;fXtunds29t)Hf z&FQ;j;FOSAI)sP`qR&>t>5r#jcGv3eGVe4(#=eqo7jXYhB>iN772{9CO|!mUpKh|Y zA;lU!xvu!Dx?$b7y_;8{7|xGLo5&oI-KfM}`jBe74k)?P(_yi1a#askIJWviFAkln zyJYQIThEK;FSw~(?dwavvAuJ8-UI zi&=?lk@&XXielAo-RR{>)BQI}AQO>zk@{((Q=A<}y*x@Dp(*fMONC#%j*Re^adiyr zEHFd_gid>+uPZM{QmFs+kJ zozS*uk${S#80G%~L7pRi+&4~qMUfo~l-bDiN!sy5kgg?ve~4@O zNHpd}4ie#N`5Qs2`{>crp+v64PzR19}pL36@uR1s@I@i6bmN{(h5Q{V)+P zOVL!KW3~9*UbjK^j=Nak#yg}?Of%#S&|dF3s6P*FC~J~bp9OvvVtSPd_})E5uub@P zZs<)2stkHau$=UVJq$@uaJU_pBRk&r`OxBCXq`Bh?L@*lWd&$5v`v-hY9)9%#Z*v? zp~Jus{?cx%+ZMVFjuN)*W$#B6Nuo?go_bj!?VWzE5etxuvyat7>4EB)^;#g$>pjBWiI+ z_@3)Q3w-(EBGloNL?7&v3tOXd6<1FnS?JVRo%@}gz`H-mtIz!hR*jqIl5`{vN&dY- zV3p6bCbHsf>rl#sBcYNWFR|AwUVofxTE_BX&`~@_SOBn3U!K~o;NTDMNzChi>O9s@ z6!PzP9p9g&6|WbFr>-;@o68=T+z>mdJxRYQ7mS;H(==aiFMXIDin;i7@^DM!#GaZT zU?wMvD!0Ki6f`Z~JV+u)BpDS;My8D1N3!kah5vGk9N6o>RVw4bk5mX-!t8k^W;>sO zXdh%-+fIPJVqqydyF1>wMFU35V9@+NsaA}XLuY!s!^P!40@n9`uSf}rmAcW0{`IRk zJSce!I<$pxGl;bUEvOED(2g7fmsK$6jNN9r=h%9e zeA$1Pz7wzCDDhP+$GX_S&tCuuv(2ds?s>n0s3m~*=0RWLXFio!*c)2UWA~KXxGR9^XO3FY?1}a zKGNrxzw#tXW_U^$^_Ce;z#osl@`N%^*v_2e7iA_b;*H?Js3GVxl&7rvEIW(fDu1LuQvCWo=|UJd(G+% z8sjgaBl9WL?)E2KdHCgg5^$Qm19o&=_h2d2lNQ^&VQ=LkI%5O|2h2<|Z6dIdM`;14 z%u%KbD^X z!8e%C4h&SMZ5O-Cq<;~n^eLd8R#3au;!8+x zTCcZtE?keaNlOu?^eV{V(9k5AF0TSj(`o6CiQWfwSd%JVmC%rga|;M$D&}XCBp)EJ zX~%J1-_lKg%UPKL{U@cg48)Xp&@q2GC_dt`IPBGUSe$R7k&cl!AmoM+J#Ij}(@s%H z56ptAE>bQEzm=BXzwg7GMWm~vD?-+sk1<9Au}5eUA%8OIP7u?h*qsK=zT*NfhwO=* zxKY(e;R8G@zufRQetCU$qUb~l&t%(k9LIO!yg^t(5e<>o zw5mU6B$5z(*^%fTvcoK=e1r@CdtDg`@LYGdHC`Q(V{$DJM>r<$YI) z%=_LoZxkmkDu8lcst@^zld2)&|1TWfKV6FrbBsxo8qzPk#y`9M-wRl;AlT^c-HVTe zm}Qf#m?S5rV-<|M)z3p%bLAC&p?xg%P_2B8900 zb8$CPxYqYQR~Cyk`J2SV?`v9;&wO!sB5DJORpZ=*3PMcBWBrgmeRby=k1f7LQy3bd zwpN5?+871LS^wP-cKGSQSBw2Ki@0;Antg;17mx`gUXzAKn1we=@ZdE(TE)_5s~r6= zwE=&YUUT7Tc5$ipw_Jt#v%}7LNSSrP8w-?%um3REKXVRg%)gm{eDu3}?m@rBY#sZ4 zO1%9HDL`CEkdC|@`lO3e+rIE1ryu*Z(^BM=29{^-mO<4c;3xfMvh2H&+YBNlj|CXQ zDyaHy>Bzc7!EssNCXN;E#H!t{b+G%@Cp^yT_0am3A zWaRO5gcD2CF;aR!k*}Z*e~6>rQ2w-ikTFf*i1DuxG4@>*L%tRiwTMKR^IrT;I%CNI zvlewYhNsvlTM*s2SK~x38ITdh+x3(+_LANqc_|#)Oz?3``-1;rBkjYvXOOJ0Rn?iI zN8+z|JT2|+w`=Uwgf7k?$E|dgSd7BLa@fC>c6lAiqpS;9#!=AxU=5~VqwrGqXEkX> zXB9NF4kb3TLBpBw;PMhHmv`8d7^eBb5lrDq;Z;JMu=<~c=|9eVar$WNGBKg%IxDBw z-l;j+z$^Zzu~YZvpQOMA|9X{SS?heABPsUK=0+}3XW z>#?3UnB+i))7=yjy=fh$aTz4zHP|uKq>>JY@dQ4QAg)oM=I(^8bSo6+e!GWiipAWlP=woEY(49d>>XgNpj*DWs3(}x)L7x zD#jnQO_@*gq>t*KLu?rN0QlorY@DMC7XdNdvkPcAygC0MgyvZi>ybGm9Bl^NjjH~!MW2jb(2(?8F7*rfu<6&1pM-gR zM#&>pLoWDBIxuh;(kXkWC*4(nlO^1vs;{Z9}X z!#qROLJ_S!`Zrty7(mgP7WVi|=VD*DJirM@iQZ^DbbWqq-QSOBkyJ(N&1PT1pY!~D z$AXC>LF1(|QSH&0R4;QXHcaO2J#$D^#ySh}`EK;ocRo#foLmeDe7@aJE;`8=`*}W3 zKHU~PKOc^lseT(Mf6{v!Kelu6R`^;Fi&wiZeylLS%UOC100G`FXN%hfe;=wkRPn=8 z7n@mr=LgfWL_{;sKJ)<}7pG&KuK4+%|N0bhh~4~`UJP&bu0)ytaa(%+7(s61`+Pf? ztO`w%ySx3gGiW=T%<2B#@cFHR?BRkQC`p zy3T|^>sXdFMu2?qyG7+a8ngW9i@=xSaVXmt*vRrk7!d1cLbOd^EZB-z4-+=hLN)@F zXSz4CjWYAd43uikn4fq~#wr&h-6Z$~X+#@v4G!W0h|Ev|00!r)xlysy{>{emHLccNhb3sf7e8(5G zK)<}|Kr9gC0tvDQ6lFp8eGvDgi;N2t)2v+?+BD~GOanrkWav$RgX?P+qr#gOoyj|c zVy^0N$zgO!LgwK2jm}&r;KA4XooZkPIJl0nAlo84uy*%~2vpF5jrrX6jX>B0fKw-% zfpjiT0B)L@xQhizLkQf>)LDdGF3^FM41`rlnN$vy4RnZ>fQ3o;lH7xp2)l{+ANi+E zTv{@ep_=pxd_C4MMk}&$8n-Qwauu6UH&iy*Vc>^2J>`kX8VINm0|$l181)@NUVR}6 zhLjN(s!0ge5e?xFgmEk;PGyGImfN-iIPBOn?PFe=TWZ z>#FCcFt%jPbQ1^z6cYr(sMHS){HGM-U68yH5sxJ!dsd@ml&M2|R*{>`AePCzM-d^m zr0BVb8tTbQroW&LeY^&RFiphByj)--i1Fd54!a7iw*d=l2LUiLl5*jTV28SB5h77d zN(dXpFkquGa%D$#bVNcC#{$IuWe3%$5hWgq5Fai_^v57_@A$(ZG|z;+-0Prw>PX<^N4KH))(3v8C*X8xWEvch-W@7JT1hv$?~ zN>U+2MfvqKK$+l!;RC{bFz4x3v)sKpBC!#td2mvljI4g|g4Cn^KlK<}(S%?O3iE*v z+=HkY^k2iAxDcm(?j=Dm5Fkt99YnRl&&~~XnrjlWN)8s{6r(=kn?az2AtTfaFxj(I z4h5wXQM0nJ!l4RJiAChG@Fvp?alOTI^TX~M(ZYpxV4{Ko@_n$d4b*&kb0f2M->T~m zuG#qJ5q5?C1$EF=vmgsLBPP;}H9|us*P$Xu6tI|vs3&R}&V~Sy*l$zm%%FmbX3nI` zs2G=4VzlU4*V;~^;aiXktMx(Go>HfZQn1nHLN zkLxPlBkCl87m>q~kW4edbsp=j_Fo}0rvK?JAuPsfU^e%dyIA;1yG}Bu7?BQ-RLct$ zgx10>0qN*~Tty(EVE$DDHezg6&uk9?HsHuasyO}ZhV7`IG<0a+ataJI;<{=f@`U<1 zyp^49I`CqoDaaD#wK}j+e_0%XU{M^VyTJfMfP^0}+6S>9MZYMBw3V(yhK_oIZBYXv znxMLo>s+&Gp75f@3pOJaH!C3Ky_0wlusA{r zq6>!Nyn}|(ObDtG#=wNE$A-Zf2+mu630puqj~$sw1lDiLF!P}?tY)Ebb%0c}w?nSe$VPHQh6cZihh{1!{?*8`)#9rLDi|+? zN%34+I^6^H{hZ>BtH4!C@g7FII@_c&4=FD4&K{wKzV3sz|f|I-g%j}5xsA^B_| zl-!MC$D;MO6&7SY6oe-@_<=++USFQF(4aBZmnOGR{Vfj0?4-Tmtp43iuSsv{>X zXbIH6ZROC*^ssj-bjn-dRZxP&sNq>_V}dH_xr{7gOKngL!U1kv<#D7;yrQcx2gvhS zaT8Wh>rTGH_zEGix34;WPRnh1Q%7fC31+~%MTye5&vL4Epv3H9 zshAYwhV3bGL(s%>4(%_Ab2Dy}llvR`4>$zSq*)-2$ONJ{VPG?M>{#+m@qpAbIw;-( zx~8Yy?VmOIDhfhp9UX{Kaqd~NWK@Pi2$s0UfZ7V%G1O^CSg2SL#8gU7`DKg|FdD6v zCqFW?up<^ABNqbn55{p>@qQT?T-Mg}1-Do-)_beX$JeNEzF{*O2XU;BHmTQQ3#fk3 zlM%uR%Ki=oLByyYFw-_d3vNt9of6}|j2oz#p$CjAVh$!IijVD9bl4B-E~ca$Uw_b)p$S}yrf>U_FpydvNue`9VhYQOU9qB3FdzN>TZ zC;+cYZfVrx)plF|^_^H}A57&;Lx)4LF8_pY10a&sE$@B2$ecDsre(piyn0fb6j9r49Nc}M?mG{F`Q@>u2Q=Ud%Q&H8X)Gt5$wa4R= z2uNrf&HKTy>)Kr2+k0PF;M1g>rmW5QIOhabmbdIsdh;t*i~JR$J_q*t%+9-(zrESY z56EXY6v8^Ty0N9)o+@k+FwGiw{a(O6X8!NRJ$$B*By3b(ts?5~HU4hB8nsUEqQnom zRq*Zmi+&}eWIcChe$HDxu?YDoE``yHFW@8#IqdXf6f#G$?-c~?xoiiX5|*#*ypWh0 zcE6YI<$BgO(sz1RUp=j;#cz|R`X3js`XBo*rp{`$GnD6xC>*YK*?S{hny0l6fZmC? zxj4aqHD}~bYK&&|&0-WM)$}m5tTi=-{=4d(Ck6;$doYc&3J<-4r&BzUf8Atn0Fc|d zDO;Hjtt{8G?{F>B{96Y8co3lllQSF@ud)6D)^=Qd_?8A5+toNTM5jmbh_(W%O!>=J z=Y%V6at_4U39#*Ty1E~^3c!aT^TTHT(pYhH2xA6;)5Raet&jpFX^1c%`65In(M zLU4C?S-~AbaCdiiC%6Q6x8Uw}cb@0G?>+Z^L`e`}$Mgg_iM>?M!{y_l}D^uUBUEWLB0wKi4hbSj)MU`I|; zfTdICN93=p(Xw8SX)RVNHy~6`v&Xd95@P%cdhS~k+LFb^q;*FldJcZ@cqA}Vpx9)7 zlsKbAGN%ysx!H%i??}g}_5232eA!m%{ruiqGmgZMLGfZ!yjJ0ZcFhsLZ(Jvf2{Lts(^b1lsD)ywH ziolYcac~IA3v@F7xu{di%l}K~ORIKn(a)LVe3XP3!M6{HxK@ za{!gP@*qMRmNB3Iq$G2o;@58dqDmT+E_-5ygv+sTP3(Dfv=VmyPDx@f-zL*n?utMw$~nxs16GUNuXkIc_Bv$_3JF4J=UXwY=Io~lu5xqXuV{@dtR<@6+XCn2GYy20n-e84?~ zXC0lo#8+EBJSy{G-xc=Pce@`A^LafvzT!1;4Xp~hjvHKQFR}x7VeLzuKDmOIguB44 zeidqoZ~Gn3`^p(Yq=CkKN1tm-9nT1d%Yd|md7|@y%_W<&V-*!DQjYT zRqCqs$N_4jMqAubW^(bP6hJUWfEn>t#3{HO`K~d#yyKZS-RgB?o5F;8M$h~W{PLAuxB`WgG3vlxSL`9Px|oJ)*o~lsC;Xv3;zpjp zp>Df*qVoEeZNy_;Br}tDy&EP+;q*ZDrw-%>*wFQ$AdW`sjjE-1#+_>Z_bb1*aO9gd`RIXk z`I>sIKin~K@>k9(7i=s2j>D}7MtBD?G1E6j_VT=raULWESHRj{u9j0tM@l1PGjj@K zh0PJfsMff9HDzNPkwH@MnUzw^Ieh!MrOlpckG<65EUK910(GgYMy6Y#g>0wX{PJs% zhk4V~dq(e|b&S+{{f>x4%DrfCBMZj~&XhXkjT_9ml%MND*y672tMW4SRQ*S#Cjyh^ zlSJL56|!ZTFu)R}q#_7O4h&Q zta1$(;Wmr=vyNaI-qb(_bFrN)EkuFFH-+=nEA$ zX+mM+E;TARt=E5ms_o+$!7WAMMZ4vZ{i&s<-&mep(7|)0gEkJ=XK(COed>HHSX|z9guk^+(v-U$t}xycP>C44PzIHOWqg zcA|{A_fpfqPlz{9_NNvWg74qXdX$H~yI_tB0GE?YN}V!f*ZY9>5&meqwD=6&h@u08V+dFcZ0*lKr0xtLa{#6b+nS8!=xC2+i>2yxwL_e z4O*41je@shPniRSu2xlHcDA=?Thq@iZ;)O>t^{0r)ztD)dFcB-mKU?1*}b8MAIBD) zUPrKwWnS<0VzD5s%m3JLzw!cj#qEg&c(^+sXGZC=t~oGFk51hw7IuJl)H5!syML!_c|GZSxU>xM6t?*GLJoiWIAew zLM+N6@gwH*vn8MAMmHYWa|AK$)u4h~x5$jrM$MrENejFI zyZL+S%gb=zCPV&Zit~gPIvPU@o>$Hfwa>Yv^0qZPHX6sALrAdqjtcz{EQ-%?;PDrU zd&GH6LsSrdM)4QHZ(ED@Dwu*FNoZ|s9*;t3?s;BBuvBPIr+mGfQnBO`d)^ zhfIw*KjNbq7;>`(7@N*M+~Lh{X`4Scu+iqGO6JCYD#nS!5vhr4It$um#~SMWK^53!_ZE%;lGG^~@pFE887y0`O)pO4Qz%e~i~O9D*WU8^#<3c$D9 zC9%x(lg~rySB8g8Gk0E`#O@ez>hVe6WTJb_M69wJ_K%7s&2a%5bL0`=;KsuB=-W2z!xNszvhSx*eV{`09Omc}kP zlkDP!=MwD!uIGYd${^E0@G4}6&t;)(y+ycfp+LgU>D({wmw{CCJa)4l`*9n05s@-m z0ueM>S$2Nq{pncL+#D zMqcL0+Ul=G%lHjJ60oVqW2V4!8)iuBpHYvU?!nm!yf>g|GSu0 zg?f+e3JX%lGrc#HqFVgtFbD|JMi&V;EA;H{aN=)yhbF|o&))r%;xTA!5_*;lDPuo} zdwb_oirMY)!af>6^`#qj`+A<~@>!9WxN<9AMtSS;k;=*L8vel~Fou!$f#L$2_dxfw zgX?Ij0enu*TJ-=OUD7!2spX*>So;aI{O)+h?8(Vv6*pG@n%9|gTM9qv;>R%B<5;-# zax=w@A)Nm3pvhpi1`p-@QQ2MC##QLvP~X;p7|-yl}Wc z9xn{j=lf|%FK=y``lz^~O_=taRV>IL73D0tm-?t*hq}5LDK^?cy!B+jYj-M3$8fG| zsbTOfdi)o#*Won%wncGE2kXzNJJIGy9`8^cJTeDn9%aOfrx;VbQnpfdeEb-CHPbD^ zYS!q~iEmPAzh5>6AAwR->NS>;=qB1g$}XKUXh}Mv>7z(|aI5{Q>0R=YGbEr&SX#qn z(m@!3db?-l)vz*9^`_QU(jv*w=R$Dnyd2JC}Da=x| zvC%5qQM3lzkJxmqxWB%OPW-9eGIniq?^+F<4@V{DOI;P!kJ(CQ%5I_s91jyjQpO5f z6Tm@--l&tQ6B_e`%*9e$U>*7xlxCSagzLgrG)hO~v{e$v#Cm^PXWKS*3wjA_8&@w9 z3RhAT4Vw*U*T(lK>izv;631RT*BQI{iTR7@8kzn(I3=zng9jo;haD0BTBvuPmtfYlI_yY)T-lXn(cmjY& z`W{h{=hKRsjr;eWW=jN?%>jYk=rL=gYI(V&)Azw2;c#K9w6<0f9N!zl6jhS-gb4qp2|6|Q(M1L_`O33170(o*Ha(QJ0)gP(2PSj z+L1EiMJ>QA*R=8)E;im?uTS+h-kyNqJ)hYO++NssIq3pE`aDFOt{)p0UBG*mU6)r< z#>1WP`_3sM9CCi)`w{SdI(|5DI15K*eBfREJ6vz0-46%Rsv!4*uv@LDqiS>gQ{LD^ z!&#sMd+}km72N3t?JEDKUxd*b6bavssB8mPxR9$z8~E2{jcmbFdGL+(^b;U=2757V zV&HN`HX6cdC3_u$NvDMs^vaq{U2}HVDJ%Hat~^zl{Ez%HCBkn3ivSN<6mvvXTw|+z zb|NV;|FLj{=)5g)5{rXdq!G#1?#IuV&F7!2f>{}{at4_ur1-=hKbx^c!c~)pBOp<1 z7um7%BIHx(bX(`c^W3MQ(K7&+S1s=)=ECYzl&Sjg!ApIl)7`}m*pK{*V!gQVrcHJ8 zhqMMi5L^(t=ImK}j>Flu_1;ltlj4@BFlRSNR# zOI@(!n`O+|%x%fl1eS{kL(Fi{!UOeeIw#F|)q~}nq!GF^IHwA5_&11NBlT5?C4Oij zbb}Kx?CWzqK`TWGNfZMpumZ?VWD$_N;zl>@%>=JVMJgmgN$?TV#)^DT&=XQwz3hl^ z61`Pi8_!wG4~EOM*GSDgnA4RWh}Z6+xmW76{;2pOEb;-z1%YV+Vz}N}V*r^h3qn6ue<32xNtOVYQ22s*27dJ@24;UXs%NRmb|G-?xyNlm* zN-d)36!PjaHQ8f5bSRBP=ontDAJ)&(XeUfQ)e^cI+uVWd~?(YG;T%%n2Uk2ZV_k6!m7t?x@0}s zdga-G!fbxUPY6Qh2>B@9N8sO5zjRywhD%2#@Qd3bxB@F{cG=m zT7ZMmsj(|1)xzYjwV6L-LUFoHOPLp>`#t`^73bW=^7CRg#9I-?k&+nvkG)So_D1~j z*WOnU2V(M@LC}HZ|Lua@qq>Sp5&EmfmKk#hO#uill$iB9%h zG?BK+qkk166ay~m3}y)07`!>HzaGn%ZI&5O=yO>^O$0}E!}r0g5a1^xxoxiL1t^%zm3+?8S9w|lUN*-#^na9X< zK^W54&fDW50i|>rdDvjI7j zKCKR*9lLhK^kRA4!OHxbZ6V{P`>u77=s9u|6H27oh+rUq>lbfwl#ht2kpenK(`|?d zld*$)xm~0WjD}IxmbL!}d&6aru?mb7kORGeNk5J;`>&GRhJAqj2a9s@?LWq2$tO$y#UjJW;Ov_) zR38KIoX;TZK70G?n~>;~>ZX5C_A;@K_K~cH_a_h4fn}*5O9lQrF9gX!Qx(vle9N{R{THxJ#05p% zk3SJ(I2!qDzFc+A_)EG+2FltCh=R_j5Tg$qy?>YUb`tEJ?Ci_X?HeNiJT6*@7zGA= z{Kk@Srvx=46rTOcLGC<~%FE+F`m@t?*({s>JJ>>zX>!jGHcL#c7Zm;Cp(iL9nm-uC(M$&DWNqUfx7R?44{Sd5yGrx^QMNvy=b5DFZm_PDJ4v?`0X>g zF@lVK`y?x5-4qR+&=b}c;OAtEXDW&VLt8xX2Q=*`eE9=W1m-%tg5hlE8~F4np}*TS z{9iO{xcpV`FlZq%LRRKiC|hB|4(+#L*_^!TB7v_oiKQ-DTnw98K8Y2fx6X^nrznP; zF#AdYns)?~ti3L}$n2|=wCe!PuH-vTmw*svp_e5jUMc`1O7y|A>0>VJ?qwP9FiL2z zBKF!B)U;*i2`}1LPSnn^@pg5*a{l(B0K63eZ)Pm5z@z6gX%}vDJfaHMizc{B-#POG zt7x&?Llf~^uoCWm+xM6)H`I66osH0lKD$5#lbXsKw+|b!Y@+X1@7~X&@0WLjU10R- z*sL~r;6R^sKO(3p>>fVNvX3f)Fqiajh5W~4pK^%p-*DHw97y~j$jT4g&J$1QOd$h> z(H~#jEKYokath8qIi+)JpZ4G7yLywR?1KcR#IPLO{?W^g92O4(IEFY_>l2mImB@f= z2^iQQ{aj9jUe){V01tk)_jz~zOXvQjOKmJ#USPiDS z^Rl^##68-YOQr5cGwS0BUnwdVnnO?Rc}xw}+@sL^LD;$v)>kctfgIL&8@+Tnagr>ic%NNHvl<4ICTeg~~YV z=g?EzDouJH!;&=ZvJKnWjEZh8&6u26O{#kI;#rb*H;S9>;Sh3i$ceGfE^=6q5`KbI zA2)L2qJwOBv$}$mlsril=YXPBk~$U>3}b0Bt(D6Ik_SdGGY%ts@wE@DKC-zqc>~^z zlL<3;P2O^$5DjtQJY&y~ZNNhl@X|;69yF$&_D1>U6^j;W4BLkvR1VLX@rz+^6q_$n zFE8AoZqL-XW8)aV>aKtBw*EBlIf*!W9fNeIY}zoA zY+(u4xeBk;w}#~xBIKHnF)!K01OOa2r8wSzhCmwXLvDvQzG}ViRGFqmCr7b<%_2%F zN=8suK~YW(3JJumxwCv3Ii^-?tEhCLH)FoLC0U8sZ-lL#jn}RTp2PaN?4GZ974hmD zZx`M)!?TyGEyFq?j(U;cvP5w|glt?~}+2e4t+RD)TP66%D z-_S+V>X)Wd7^KrII4@&Z+_R^^(!qaM`8dTaXwoeuA&2;hYYsr2M;Z~64h|{kUC~G%osA;e TZE*~zIaCMloT`yxz>5Q&a`4Hx)?c@=25|aU`x{L;gZ|m!h zVJR^9orGyR^leUBNAkFbl^5m|#youTO9a2y=3@s-kbQtYM%;cEQpU)dem=Rj20^!u z>&jCsQSZ~A=mLc(qN3l=YG+nr9*LH-rrmx9yY&O6QwCE5--2@QG6eqLL0BK`~J|Ht*Sh} z7t)iOkD^QDJYda(O)GzNy2m^1omIFpa_K|98_tZVyV0d{p?saBAb&LD=PQ9XMuWoY zz(I*@;C@i}{j%#_kN4>DYMa=1H|hE5)-m6j4l*bBIB84QW$=XDKQ4|5Ppakto%jTM2UXK`A$%)jw69gc6qqfiRCy2`*uIG>E`OmdKVR!Z^;VLtH|(@e|9V1-W?f0d?Z;20wW(>JNgU$1kXgZcJc(zBnDQ{un}9W+ z6!Pk>%&C`{@!3Xo0iG%2NeD3F$mLZFuyvF@7-Z*RR2V{UCZ8f zW03KKoBe$4u8&vOV7T2&0w3fM@?P@XK3Qs!QKkiN0p05ZVp1tcOE5szB?(E9p;mq zQx@Cl9xOrslQ+oXqc_CHG9??FT{?^&gdWdepq=&}=Q^M8$~CKEq)8{YzlV8Kmzauq zd%buGl<%p)#t?f^^C4opz~Jp1rObLR;2S|Ov9o40JV?r-fwuHi!nu?ZXuH-SiMS+E z)LyaFO3Z1pmrT?~D`hmGY-8Z1AsFa@)y~|5d<-+g1g^A>NC{75ShKQbCdpu_?k zR0xkx6^q3x5t96Vw%IG8)aL6q3#V6TKR4`lV)~E96c?%}`paWTXJyeQP_tF`S(Csl z9P|j}_Rk(nEtrY%{wF$ew-a?T1PZ*R-bSwX>u~xqhCIEM58neJvs6t@&>v@zMHv|a zXFFgFQdP`8K1$Rgmp}b#?gVp8IU!S{vw<#DBrV5PqZ9w0QH8!dg2G)0W1mQgLjCa< zx_AK(`6w4n8mAw3Trt);o)Vo+cR(s&%Bid*y{_Jw1zIyDy66v}FN4q{t^cms60>Q- ztE8%QT0KF!mPd~CT<=w=w9Tq{8$Ent^MR=@Tr%Svtq$91`!$*y`)UHlD>5BrX6O|{ z9JFPcsWiHxDr*~*#3}~)ks`$fgzgArY&Q%2CsH&08H>2i;FMr;h@-*?!043-Jt4e= zTofn98J^qEi5;=|fS4X`)hA?FYMH=Kzo6)xeThJTs}3*jOQmM35RCyow^!1fPhUn>f1o#} zhVoFowCZv919K6&j;Wb->eoz50Z|w5(}n!opd1B*DJ{&hS2OQuAO~mJ-j`jm(>cMC zCwb0WaZA6A0wDzUWymBSudZTBx5MDU0} zZ6B9_WZg+P8G5*5?r;seE5@}zVLtwHWNgXo&3H|{;8GX%qQ>V~Ys+x{)0<#^hQVhO zI+b*y+WtL4QpEb|Vy%{YQ`eIl*<5y?LECU1A@RrWiUDS~E>$x&lglo332~@(Ru*5Z z-996jk_6jVe-0-D4x4c%RaASm^ir)zGQP_6uoH7uPMFFHV(j#Q(H$HR2Ac@PlvvhB zS>(XKsk4mq^?dQBRBZi&4{@K$!Nd&O@&Q)KJ>XJ}Fof+SA)9Ye6d!Kfln$QQ4Tm5r z|KgM^Ch;~H^*F<3rd#=k4-c2_?;8tn-jQhSujuK+Z1#W!^}GUli%}CoEPl@rP9x)m zF!PRDLX>$P-xdUv33F?7h(Z`onupenvFptPBt)zN>x=jKR+Aqo+-IS#4`3n>3jq-r z2^_J792qqY@YNgKA)E5~b$mFZ_G%c(75T!>(i{c`eCyIEj%vQMH$Mwv+@Bi_mv(f0 z5_XwM1qy((p7=mYfj?P%_1Gkam*ci4&FBTrzcXMgu!SEa6GlTjlMp5Tpw+vX|U*xGU?E34M{2LJaQqXu>1tiK5kaIYwq-k599su zlkn%$ikK9)kgLnr085K1)t0Ya(-nef=3DYtaK?g|HA#!L3~tb zACQy>pv%*J4J~zfN^PwA38bY1%c7$B+^Do zvD4HaZgQ0*F|c$h)C;ee4}DF>4gK`}>f_4}dJyC$-SD_*+ZYN4tCb@%2|h|m4H5-9 zqbB^Mbc0{}Q{$C8xVg zy|5{C1x>Ml*-X5n*yJ3Q#Yhz0}H-oJ|;A<$kjZNz)mdpH^ zbxrTeT}Tn+{5l^q51PJ_+l<>pDAcMk0~cC`8fk5LYL>%^#26bfZH7U(H~!F)3`|fL zJ_4O+*_V%p&Rr19U_}9?SPn9wf1IPLb@Prn{mF2^QH^0>ghvajF5e(UHh;BepMZFj zxh%SgibS9_2XXiu+{9nEyDjU^@$?qeEklS_G#RKultUPoJK3OZzd0P(3W5gyO4o7c zkGjwmbVh2eO&=<}ro6EK@WZmQ*5LU)PE}7{YA(37*S!6~Mr2|RJYlFj#wD3ZspY3KI0~OkyzCPgL-0rbX`sJ zW3OU9uOg)4IzTETe-KwEssTuo+u)Xijraz6%Q|@zlG>!<##5->c78$>C~SYCDIqIm z<-GK1%lgAL%yLtxhi>+dCSndf&jj1%Hu+%loh;I`pkvrIz@pg0Xg|! z^zQAD(6N~49=`!1<^t7!3DeSd_=b~zfe2&~J3IZLj3`c`Hz3^i|H3WD3Cjy3eJ-Iz zl0|Jy8DqO1>&a%QzOrD16h+N{{7l6XbhaJ9bRJbcaJ%&N2yB{xHW6wx>luTfW(``z z8ga?wb96TS9a+}ashiD+dMN_wE6^xv<+Pz3bO8xo^PrV}y_$=6z=4 z>+1U2;<{kx@Y#g7Vc!51yq51%Z!JwVQE z_0JSbpq%{oiCbJK-3H*&vz#^#x_ZG8EY1|ie)36ebCxjgV*6Dw6)83Ca|i3cw`%_? zu#+9E;kPx2BOmwl)(Fc29rmNvQog)+3HNrA+--g&(^gMk8o9>R^Ivg-w48J@jj=|p zS0AaHz;j8;Ozw#7Cf6mn^-&5_Wby$8~=`<}>M4#b8!ajOLu;tD7l-!e7?8q{u z6`ajCimv5>x0GvHo}y}|H3$?>_-`!YTUZ4~!DQruj>P|dmGYN`tw6kAS4x70gz`{Z z8FeXPm+*=C@^uT;b2p>o-60_!+jeX_;sKT!c2>Em^8BTI>1c^N*UG(WC}!P1k=T@H zN^A&x6^jfnx|vFxrBL!S%dWcI2K^Y0AndU`3PvOuEFcj`8Eo{5g&y~zFr0R2QG|ob zPllbn`QUZrVkIq!nARG(NJ!(=P3{VdvvUu`=r^0D>*EZ>?bmSJG*XVni4(j1xns+ZsWxga1Elj1EXZ!*P zNu3oHnA>a^MBh=p9)bF2-A{|e&$$xu^f$W~_a)@dUx&z-R8dgaYS9|R-a^o*qlw?R zSpNx>ef&YYorw0Kl(TnfaVuj6oMGzgcn^Xcp?}YU0bGnl@fZjV!5E`Zn|*eSw=fTB z>@7@T?$rj_AiQI5Mmnm{;b7cMpv-_;qV%+-E(h_m#R^elN&DIq8^o8%P81OBzVstt zY-eYF@g3VMRs}fNDWf;Dr6HfELhyAt2od zWj8;`uMId-3~Ra35XO6fJkv4&O>IMXUz!Pa`J?PNxsKi6V;^;=iz~4JAXf~omvwH^>ku| z+FFO18Hx0#GUCpt&HSqbU>jeyDbL`_Az_~k;+k6(E^ivS7Cn70Iw0(d6>3f>dMLGf z2&cnfJRf0*PZC>^AC)Ym7=5{ABIxj0HZdR!f(=UTQ}lmH`8+g;l-mei^wQ(&sem^G zEV9ATx#OlTj#2_G0zSaG7m7?893@A+TaYd6BF{b&|~#l+RlR@))zUxGLkjP3jOt6<{TlK}jL_jvm-G)gQw{eKn7~K(Kg7x`p703co`56D zgO!Cpr*DRy)EPLmf){GZ6k#1k^o_`Y585$C^^+=1>xG=SMz_krGAarP6I)eT<`#J_ z6~-jWg$d)9_y*0Le7Gj7r+~%lYzdIg%WbIuw%FcBf<-(IrQ_#B(bcKc48ITS!zPAs zk)`q#P^Z&cNQ8_8JKlxLGj_hV%65^W8a02Y#7j(I*m-bFJ`o^UjQrMe@u&CV59ACZ z6l@U>-ix!qBNrIWl3{nQCepW?a6cL{vwmtHePnv+U(ZVM2n>q2EFJ;@6j(rz{dZGN z)8DzOM7r_eeRW?9u<9Nyu3FkRB(0t*XcJuAOXQ82-rx!lC}gv0c6GjNCCb|nQDoy! z-!oEtf?H`Z4?v1Y*(QcpPCb-uQt2bHa65+k^yam7WOH;rXsT}ruDF61Gb$}f1Th(5ZjyawjO6sLCy0ch!ew|8kF-&RF0}l5-_Tw!ew+t4i(3&lR z-o%ZCel8x>o#5ep?G8rojo^(k(9P+y*5v^8;Qlo*$2S-ZcbHe4rS>AM*6?4l@Xwk0 zWw6&0%Kwt+tUFXR5fr~ab4L#mx2c8p!bvAqSB$^6lXZWjFL0)5s26JAU(&U>h)*AH zXJF&sh=$bAE(N4ecOApXcF*Lmmg~1~=rHl{4l+n*fBuQ$Dq&S#k+!SvNtT<1gEIQf z`Ms{$o@I(K`h#a5y4H96CGs;61lWNfV4ZfS6^z6@=u>q)CIy=o3N`2haXTJzcK=vL zYwbw4WGeS2UoSod}~jhOI~x!p#H3c@+|am~|Zv!k>dmf4ObMe7>W z*7RvD`I=d@WN=vEZz{QftdP*5pY+_^$A8IXqUw4Q`>|0TZOHI-WYivhA<3$(&Ur2| z=Bgf$@2-uTB2gl(xulfywJqmF{BwlQCX??f``E{YM|3HCe4Ctb3tx8ewGD#qz2+G6 zJf>XXLY@*G0pU#yI&}YBP)3#&k6>vM~yetppsB1Ai_-JYfrHKJ}- zt;2seMiaMyc#(ezy1Oz4@+sJaF)t4{<}nRO!dXFLW&59nS?@3g5==N2rQ4}?S0i+h zSeD(`u9GcxF`Jly{*0qUmr^LtUjmG#lF7D+zD!+=@sr^l=e2R}jzm>ud(Ka8$-R#1 zr*Rz)vp~s5k;knQr2B><{AAog7hj{-9>TigNyZa`kkCh@cKRLro7-Onj9epW5qhHF z&z!q~)h;3Px}r+}XDRH)jx8sX%}*G#+wpjRB*fxG%0X`%z(dIUom4L?Na^ulX`F(s@V`m*409TL#-R4vy=Hsk z$=F*StB>Fuyoqq`%v!Rn)6`zag=G1#%$h;Z1ICz7R!jNjwqUSJRTa4v6#5 zE1>RRzr;|H(~H# zHqd=49VPiUJsJ*XPX@Gu3fgVTL_}t6Ufs_u?23{F{j;{x4(19wNA<$mU+ z(02CcjQfatjHkwwh7tZm0PeZ6q}Z9|oa$fV=m4d}6iurh{F92SWc=N6IbDM*H*YZF zLjG7o&?fqk6ft6<{&;Y|$m+2?;l;*c$uziCFF&zM&vU>n=J+HCa&i=}R-boIfXz6| z#na&;4^&$j9@q@y4Y8P;NfUcWOm&Ox2|-*!>5uKZ+-^YFSzt*KiLj()@+`6oS=q(> zwsj?A56UHt-i?w0rIL;~yJOIa$UGy|o4wN6KRxgSVUl3{)oi3lNsC@v9NfQab#2?oBBYXzZjlP z|1AHirzVm^UIjW11i?y2)E(#+ilUcKvI34AYCm8f4pC>y z^{Es1VWMyN8PESKM)ZF;5c46%Kgw=w1GI1d*fyurG>~p1WO?bq`fM<7Jwzf*wppWU zEbfasqh3W*dXSdZ(9vD1gdsqp7&3YLE=fqmwOX_K=IcG>Y9g|f)uQA$>3=o6dg*5E znLZkjm8NV}aW=VH`E@=hLA{L~*z@!#b86vYjA>e4-1%DDu2ny#!Vo}{iOYK>mlg6Nrc*H;n>Y-zBl8x0ie!x4g1Y248;`BmvgA3S7f>wL! z0oUP7w#HMW+RayQ^;^qDClZ&S_17iO36^sQg~{^UYhyEb>iwqfLjH3G_~mA)&T}v; z*_Qrp-0Z3*qSPVmN;B#&Z@0*XZz$JVI~{ud&EODvoL8Kpk_pop@|%CQiP9Y-P*Qu* z2%s>&@&O=KnBWG~cdp2|;V>}ipDV#faotUCa%Ouz2b{m+#1PHZG>uR!?*F8RHBmb% z?>F2p{SlBix#X@MRY%mZcos{u_HghzTr%5pkOyBFQ#&fEILDgB)hX~L&|8Dgk^Hdu zeDzA}MI<{LLstCcAg&HA+4u+9idqd2o@Xru5bRP2^eE7fehT`tgLuWqAv9H3-v9E7 zPETDB5b8a%z>isHOcLqN^}&*UCvmxl>S{`Cb$K;%x^Om|yuQ8o)o@{XW<$kaG0M1x zKWn9s?UP_PZws842AKM?wt0giIt1e1V+OApt{5Nj^GH=GejGdpT6Ske+s-$|6{WoG zIyk(B?GxQr3^3-BkynvzBi!7W06%_49dVDH#Hv1F^U9eDs zd!+Il*YHv9#1T2?*_8TeNDJ_@3w)rL>)x;)PAl5KDs1iPcuL2LI6XgcBQXDOyfCKG zlEViO3t2k)?sLD;280|^no^s#@XyIoV=g7N6K!9LKYUx3uH$ChL-q7#s}g9xc7EcQ zgMbUK(M>EKcp-m19~49E92rqy{INTsMX&U$KebQCml>Yo%Gf@)VfBWPHFK^TM*y9~ zq2?2f&in27X5J-VA*3vn10+-><|2W?g@FU0-5J9+)`OC7T~CDsE?<{|!@~nX#FIP? z5;qydIYm*9MeF}Pu=*J*1hmkt#66jnL%-Oo)ZDVG=vGiS&>Unza8@+IEU+|*6WNdo6BTxc@s6RWs+*yk- z8m1>w;9p8_VT{51Y&T&S2#+0>2@Ew#xo|cVrBm|hh$smPr(SMp>5-(JgL_LxSln@R zq-%zFZAfQum&pp5n{~-uqQJ^h)Nx?!r*L5kpG47R_3(24AX3TP6pY`OGlRxPFsKD_ zA%V+*JfdrQY4ODN`V8<-5zgiel2&hDH5PE)Z1W3-;P%)dsPkx-{D9n;7PS&Bc7`KY z5`a^sAR-yX*?U&<=SeO`7gH464rQ1D`8gQK&!s_ro^Vmw3X5KW1_!eU$MiJXEuMhq zUkZwkoj~#N%FI3>6aqTU(yp$vD1Ik&i{WI0Ga2o7pan<*077kG-6 zBwYRom(VL}98pBpL{g#H)Cft{)iOb$R!<=-R@)D?Cc|Gcl-FV}Q8OjZGsQ<&4kI9= z7&x7|H(}G)H%!6zPc@CEox!A%p|0b4clsDmT8oYxUBEsaq9JF3c8Ly9$9l9_XE~J2 zlGK}l-Ug2bb@iDtd_5CdpYq>PUyOK*UhYJ>cQ)zNvh4}SMxjp*Vf^S4rgYt*+srlN z$ws-soO3VN`_(ZCa?&{P=aFH%JiSEnW9y?lbt1G0OW#BScVR%KHa^}q4BU#xxm6%+ z26v@5YI{Zil_nMY$*es9btVVT2?AB{$sYxwv9ZWHKMcWUOik@4pA)ujm>7cML@58s zA6O46_%|UtFZmIayZpk$Ko1G-Y+qu*?2FIkpoDLSo4bE0xPQaW$k5^tVJS-{Y-@yE zbQT;}K^G;veD;LbRJ&W@YsX>hTfROA!T=B5^ z96BDKPG$mL_^k`-{JwXuFuwRqiRj?nQKR!H3js2fLB{YqLps|ZCXfyan(NDxxO}zD zfp0W+dj-wM9u_?#$owyFbo!x5+>+1_Of)&dW8)ypH6Is$yub zIcqYr_c_1#6nQuoRGm|@&rQZ}DI7*KD~y-a&7H8vd=vt&qU)W39uo>94oR?V68w4rRq~ zbI3WtE{;&_oq#1py=%qMVs$U)?0M;<+sQ-waPMl?oWxl(>F;HdCh}+l9=%4CXQxA0 z8y9%c%W$ns%sq)(LD%OLR#vI!I}u1aCm1Gzi0HL*E|0Y6pr;b{5t+SQ@Mb(TjL5fq zi-1oUioq98)1LhB3W_p3nZ~9FbG;iFyQSjyqv(Y^gn*VUMx@5S%pNc|3c}zE{Pkap zfawkcQLn5)d)puX&oOYh)8rqd$J((CV@ADre#PEfr?HK>PxU1hmZoP{MPud^5ybJH zv*uHet*bI-r~LD1La*2lXEw}}VQ>vZ;CL@~-n<&|d=N#;cv3#zPk?xbAE~9m*DVZ{ zFS~EOGffvAa*crCE=8KXII!dO=FCSH5tSnmymWvh6l%kXkV10(B}bm%CwH^XQlR^Z z_}9573e;0?LCuCt_TNuu>Fa+#XxkisgXbKZVAcW!Szc~M=OB4T4Vs8u!%qMq7ZP<`({vKg zGs3m@($r@m4Q};M=T_Nnx*#3TQ-J;{bpH+P98pg3Jm3d_AWBcptqPj^RGHhD20Ss& zsXwJtH#n_Z6VOLR9s{t$-5zD{Wo>P|h?}`}%>JOyYbZUwV~zFz9jb~ut)nh%qvxAs zi~h8`84K7%Cte{5g z^Up`J`m{yXpiYU+PNf36~j^tv0kN!EcYSh9$&N^wlD9(4wUmBmZuIf&jS{#$mbW>?$ZS7n)PW^>;-c+B_(^Cyq!u$a| zHXu}wvf3KutF-)Xszzq4Wav6kQNh@FPiKc|;y{p9`aVNb5~CIYd(=AQyepY5g#Bb6 z3SPq9Lx*uQ)$7 zg~yH!+8dOx(^=bMM4UpoxLtyob4$?VJNlCYZQDTnjg8LLrVw9Ri+-0sBrVoRcyDh{ z3vBT=Rd?--Tf2)2t1QO=amcSM{)hV39d13_T)+H7t+A^B*WZ9+Z+Ah1%>aGbTk= zAiAk*@Wv9|p#_3EO!o^C2^QbIe)6`?MSZk>ep4Qp87vA!ewQ1X{s2 z!T-eRSh>Y^EC833zSx~~Tul4(l65Vz|3;L_SN;q0rYS>w#n45Ll`0-(P$$o1j!Gt^IX3E3HQ*Y#z;Pj*{p@u~9 zFUAy)JR0xdKxv8zYRZioldU(}6k2HFCoUb(D8LnT!Mx=$xVBP)$mXYwZ~+orMqr?M zfwfaEHWSc$Xw(+!U^Y=w?Pp+G(8AB>R$5i5XOuXCBYE~jtv?f)CPGZ6)v+ADnB`Zs zE=_bCnYCUfV~*qW7W`&!vx-lA2B5V{G!UJcNINIn{<;gB(_7t(TfI$h>F?q2$6Vaw z1x^?%xn<~u_V?PA=oAZt86fQ%iA|7ENq<8Lx)wn1T+l#LB>u=!>$s|XSpMykGei*j;~shg??D=;9_|XuGUGk(lv!MNcVbm30u?g+&7*axcGHYnP)OQ7J>&i zOHbxpzJJVkk(Mb3Q;3BBIlz0IGZe2pl!nyGgSP5cF-e}yl{V!>Q2z7O-#AVK4jB?M z6>Fp!e%rCqcH{4t*M0OU)FtdPL{pd1I1#$|iHTyDMKP4~pTXf>aB3;mBcXio>7yyv z-04Ucz8#}l@Q-7KfOw$bBAf|kXMuR&gOJ$vKVfrIMKN6mpJg|CY5!##6pH_^7~a2B z8bP|s*p+Gr=Ao8<^RmP*7{x31+PZ@*e+DSHkmlMnlXzzhRUSm(vRQyOr%2NTyI9R_ zgE%`MmArf7?`cqXOA!sP>SfCW%CUeR1?l_`#BSV6$jY-$1H|RKG-N~}wA?Y)=K;b4 zuM^IjEB4R@V?6GByX)FaEEB1LgLA|MOm?O3N{TEKevZLeGme$CNVe$_a7G($!(@Czo){dkR4_+sgYelS~bZB}-MJ$ggt(Yy0SCA9?@4%_tG zKd*M#$1g&sH5BNGF_wsymMIG~ccmKaAoer8b-hv0LYNPGZk?dOl|#4)sPS%r{H&9q zwjCeKN1Np|vG)i3<-iA_SvA_M>fHVvhuBB{%SJ|qCF_+S*a|h zEHas$D{!rzqhX}UV^W8E1AD;lpSm|bIny~MPk zZ!<);wTdzLaOz+bTBShv3!m0sKE~pH_mOW-8rKaate-?>G&J)~bBrC3e%U zx50dAmbW532yu1v*Ppc0Tps&)KcG2|X^^fb?=MwOJo&CUC64>=3**D3b$b#iGF$PH zFK47bsi5fc^2+F3Yb>&bn~R5YjpPhrV^Z43H9SiH@|FOjj>2f*Hf*R2i_Hy6w&<4t zVe3cqOb95_FD-Mly_wh_nn(-sCz0uVl-ohSI&z%{^lz||X%ahwpZu^7xmgt$*@;sm zSBtunY2MMre|nFY;wj~Y5J-Mcf#a8LDuZ!s6qM_AlbH?BBX^*^!a^jKgn{VHFo&{@p zl=?M0$~8_BkMgr-#u4;vQ;ZdhAII)EtbkCRVTQSf(;qujqJo+)drD8)xflmqK7!r3 zobJuij36e=6qy`u5rgk4ZmyZurHnOO82mz%axS;xIxAw#d}bXj_+Dsn{rzk%za=&! zT^7eJ3q^s1=;D?}}m?UAp_IAO!HX9>l9vIOvI;6A>Cya+}sd&Y4QFXXHt1H_?!p zYH+A*=uNH7-6oi8*)MZ4dC$yBQg-oYlqp5?Hem*%kisO4cK-Zc*m)-}z8?+y@6IQIb6Cj$qw`Gowsl=!Kh!q@0Vw318@5sZ2wqghV8 zEd2c#(0r0&vLYQVvZYadfly6onhNhl73Xf|e|#z=i8_02Cqqjcr)n11oE|P-om)=0 zuX^`rXj60qEQ8~1athT>b6%dJ41*6N!pV7Q`>;lVwR#IaHn$)_B@KLj-$oyA;VF_( z*ERHKYA3EUv2K!!`}JbAF3p2;dcQFt7%@7OXjJYWXnk{C;E{Is0;#?-l2=_o=)<~~ zyf1<@9<8zU$Q#Gckmm{mOd3YWs7QF5txNJ;0WtqqaB}NL)cE@`mEtS#Oh<}d*+E9A zAl0X!IdH}YqpSC98dNG6pd(Qz43FSlLe3=+jJ3)0`5#IjffE!wSAG4p` z!!&{vJ!|DUPILg4?JiX{6dF|fi1 zfM&PwmS$M{|1%}oL0EP9gk0L4bId_zIn?tl-%qohuraQB>nbjb-OHQkUQAQ$OxKcc z9)iKn296V|mWUmzKgbjD*-IQ?B#z8O*)UutLcX)pI3*W&hU8~WuoBF885K4K=uTs8 z#+aX|jzr|UMOgzrlYfAP=0nVBt)cIJcqpEgI~CFHD<-_*E*~u2b7dQJjamUwSz@_o$guGRQqqUKH-?o?0Ee z=ugAp%0uMl(`&rb5t+d)(j)r?z12Y(r_Ms}x36)=2_-U@UFa6In^&_8QGFH}5~>nrLqT+JYwxp73InyXE>dFwx-waM1!C_eifovE%Id7S=%s+mNy2 z2j)wLixyA(EXdw?1!txr{1zUnLN%~i!t)g08dQZS75^BrUVoqMG7K}taJ-PTG=d?O zb{3?~zY$|^K*W$T&XqIK+DY6s+HpbeMkP?eJ?^8v!06_-@U$8RXy!OFdhkB3Z+UZQ zUvVxz6I#=Tc5Dq$1l{HtCQGItQ9n?SoX`7p%zWfrA)33_IrZ@S8b7_)_LFr@luW2g zZMFu@@g>6cR;yc~dx2`pW317U=<>(7{F9UWb0s<&C1PwAM;Nuf_ac3q>w^VLKF3X6 z8d`DN83U4Smh-a?keQvf%`?O)ohZ4j@=hHq)}Sn%+F~tx<_}o-m`pFS90t;OLOTHwP5F%nn2+Y4G8i-RMwFknID0*KePocrx_6~gQpk0&Pb zA#brAmwjlaKNT)z2+BBdQmUa9jPL(Jc1(sbiuhA2HV;=c=0&(ZiqduK@{&MqmAEV= zHt&1k#fP9%=%j^l8}RX`*nG8gESwR(B?EF7&&)Ny*gUp$BAn3}kvdU;UTHel+mjX; zbu*=81OdW;d4d*(bLD9jxmECK+gA+d*0O5yW4TWqeih;QKCnjZ6b#v7^ZLzp_87O+ z=7wVPy_4WuBtPyr{VI-}GGL9Kq@6esruGA*j@TkQ>0>P=DxBoAo-TW{2z^gZ9~mI$ ziE6_)%l{fb+1}U6A6D%jJ!1asoQs!^>C>OHphE^)>!z>xW9M$DbxDOZir_oWGGC8}Lcbha!wFYWStIG-O^vbrF*WIIFDqN4W5e+wHZDgR#YHFwS zGl;E(Ww5@KIF(XYs9G+ydQ1OwYWz|C;fS9~-uS(uIBl+ZJMqia`Jv6x`Js?0-0;Wy zeR)NozR6{0cwTdp#=*o4l4pVOnvrZM6;h}|kJz;W#M!OE&xxlnhYmS%rDit%q6`~K zD67Q?6=qn3K=1brLv|fOx*5*Hute6N`ZJ6+yxGr0G0i~&$c^&}I7!tigj;>I^+`pj z0`Sur1(ez6agsj&oED^o`P?4#y(MS?{>jjC^^8-3A{R>ImA1S+!(Ztw-&-u(t94b@ zSKp-@;G8a_&s_AI-?rRS|8kO7A&MtKNPE)a;6+oRriVd{DF(Fm2O8pvcI_|3hvGYU zQV6rUZ)?yHk-0LY5PXV_LJ$?xdxE48U(9<6(IGz17(769;1$J_LCha7NTCA|RxVe6 zOilj8sY=+Q387`jBe|yt0rAn$!|A}{7KGC1u?KPX$LsYi2%;10XIZa@rB>ur9GBJw z1=F~u-a8fQ>NK=(9lEj%IRJ5g8AFW4U(HXq%|SmS2fMTwt7jNKStzFC`EKw7M3#(~PtzbeA7u4!{UKztYsd0;>}Lx`qK1KE z9wfftb%T&E36)nBQwP2N5wcZ`z}KYh!BL-4E}gNrk4J-@A+6DPz`GT~h;T|xI@8dpQ$+CtBDn#2|>BAUxC znYSYSo+Q&J*%eDn(5aCQqkoTGN_i!H-eVa1SNc;n9eeR}fxZtjP|{wNj{ z@@+m`IsyE&pa^+H zEzPyI;xwt-PC@%omp=_LHO`=8Jv1D}Cd^%-4et=>8@p-W-(a-R++eiCzrbh(RKaMS zv)|DArh(D=3V_k_se;j>0n>0rRB9Ch3%;K;`BlTAyrQ6;PWCzA4_hXV+DDzTqvq=8 zdc0oT&a#0R2@9*f;s3mg14xKbrDdlrUe~+xH!z({a_u_+V4C0$x%7X5D0m_ zb{hwN>pZ1AaTTBBw-ibnxCp3Rd6V3LH11oboYH1&2OIb4tQ~1g?Hj zvqpwUnQh7;E$EoN@-SAb!saAC0Ak;|@b9 zA$_u-isl#+>SIoc?9h{C)6e?DLf|uM2280IIy6XS5JSUu95-3czLyh-W09AMaBq#d z4-pgnJU3dr-%`G}9Yj7i!~12hbkX09QdT~!6tktjKd6J+ue`V${jO3p>T%v_>g>GI zRJ|oBdS!n@pUeZ?Ohj(Ip1+ISmV_CL+{z=fURDzJT6!I$ev%ok6k6y{(tMZ?2f!AO z_5xd+?5SnKa@EeGr~jqpPrnFQpy<}o$zsprNZ*#F{x%=2>3)%p5>BsU?8aWtW8^o; z7@OpQammf|M*&eOjt;rO)@A1v=9*(J6`F)@sX(iU=Uu}btMe!l<}|uXxoC9L92lZ) z`5Q!!H;8xcV2Hr!4H)C;4H)C;4H%<+IT+*05g4OYrN~0-tY+ifn^StcLA-nHnZVv_ zn(IGWI?~SqH=9;{(*yO>o4yaLC;A2*%!m49hO?=sH=)a4Pj6tCDV3w5?@>H!cI{u? z{U>7;x&O+c-EK793e1<3?|IB0m9&6Q+5m#iplBshU$d4$L+0}??HsQ}uPk!cTQ9$C zxhqutv^hI8=?evetK%ovT?WI=t1sWzTt;0+^99cmN}wafC=uV1nK3_!_*Nf3!6;wu zV*kT{sXB}QcUhxK{gyoIf)<+PifZ-SJp(QqC9Vq{Gu>6V9s8MJxC$;%W7U@|`Zs40 zH4Y!Sf&ERr*`-{-Y&A5Guo&WA(9^v&fWx44S2NH4{ZOweK^h99id}_v(nZh5P ztkNW6SG;c5DLJElI?$Bkv%0?IU-7do|MsxQ#zi^`!_gb8JRi52BQLD`RljrB3KxB@ zT02^VpFylP9z>`_xx3*T} z5N!_=-#lZpI!;S_7m6H1YEadxi{PUD&UT#Al|kgLh^+U}f!L=Oc!BX;lFHv1(2^>@ zVDAHNvbc?Uf}vaGZJ)$ne-vvhjl27O%Bo=KXS$t8_Ib1h)8X7)(2Om3|~ zUteLJuCVb#$9$Q@aOZtj*_e-~M^{q8QRejO%^!}5f_DyRib#!~i<#RhXVgRwrpB6u zmLR=w@pCS&i%;-moq3;V!5gO9DO*=BX59Gj?ha`fO7V;guon$n{&N4C#(+I2q32?# zpU@eYK2o++-E=yRP?7*7crz!G=e}3G*%KlFr(@FFN&9f2(x7TOX1oLUF$dL}f`(Ws9E!;c!pm+V3r|1}oN4YAd z%yojE^11_qHCtVG!u?mycKg>2w#5&cJ%R7I#-fmUn;SS;Gs0iH?Ti$pUHSsAa%Hx< z1X-XWk>5q~Vd1m7ye2f9Bic)Eb;)c;^aaul5{4qrJ$Op%HuN4cZFV`Ose~ifH+f6x z-ZK{iN?Tp1X{MP8T$qYKgT}uHf9ri*-k5MzF$#&%|JvR`tQBeGiza?zx{hc%RB}P$ z>UE`cRM{QR#na}eMa{EnaT{8BfmcMektT95kXMa_f)#*pilsbN@$^+W9^+Y2+Ge+T zfzXp7(#uD`20N$J`r>uD{&2xrmG>G`~!L|K*gp;v|Jzm!MtM~6_x?;$`nzv5&;yDccC;hP}TZD;Q;V|l` z<*m{cGb;{B2=s|-t4N*hM{HW;UufJOA3LPs?^w~N{a)`6J9Gu^Skb0w(92Pmzr)W@ z0v#oY!5VN$P2Qtj9Xpr3v#_VhY<0}GVV)D}zTBi)RrD33y9%=~v$7&Ka)zy2$t4Iv z{qohYzUpzwrSK(Jx5GO=Q`Q(dsPp};@%YfQsV;Zg9S<3~3Xn&UA`Uc$pvl$qy{(>W zFDr_5N1kdYAB6?QWXRF2Dt>cZ2u^AUK=D_w2IQgks2;3gtw9q~h1kIW!~wDfB$1U! z6B7HoGjJGyG7avqm}=jHC(@P#3U?%YL@>suL6w_$O(M>4d@emT%VB^i$i$pJ%}%H5f9-Bg^VP*p0_G&7f@eS>keTOV8s$LPpt(C&JmXu;BnDF1=gtV&R(ikPH)W#HE6cP~X(R zOP&$>x&>(@A$fB{YoXhS3#sp-kk zZHV&ZVW)d$^!00$JLEF!mB$S~T09LN!RU;%e+3!(?=Bp{r0Xp=DzhiQ2G1dCUp6^_ zIaJsC0-YdQ-!g12BD-%O!^Wq=5^N!{QSenNd+9ku_yswNAGWJHk3AhC$Gh{H(fN=5&t19+kWH(t_;gkSOP*ABDR1XG7OL zQc+*r=!~ttCY!NRLT#qXQ{E$x!KC z!fdwi&xy{`p65JmaGVi79Cd9=Kigkdl}=%J5~055LS31&b?1@lG}yAeX@u@pJ!Bx6 zTODX9uoq%4vvBQfaBYm%4D3zVv|(e^xA{vWcELC}WxN@Qc8VHmIS2?*W-1)6`ZTb* z@sYL-VN}?<0e&IsYi4!aMS9ouSV!~1uk%cvtvt+|aBxlkzIozV zVROwXtq{ILM{oHZ1x5o!xrgz()xW~N>> zyG`Y|0JjZ~#J{*=7Y`W)A1`VnOpGq%B2Mx3okeI^+k6(d*xOQ;sNb)Cy&XOOql z44mahR75aw5>+@397js-L^bauAIwj{w>>onCaC&seFJHJjK0ASI58ZRfuTaK3_|e! zpJ4fVUIO$TV^o**$euUeJ|5uldRuM-^nT3YPJA!sGAT|EVR#Qg31!^&_sNveA8Y@@ z+L@xm>zjn5kLWQ36>U*f~?fZ^-onm}@DA12A z(z_QL6naG!tN^#Xhf}7^?Y~oU-~3J5AC+4}L06D1K24b;1nS!3cfWvyn8;jY|4MhJ z0dlGYa8QC=1gEy2BUQH|4w5%K)7LK!)Mi10EQsA&7Gb#Uq*n&iu3tOp-|g(umsSfb zqH!8;j@0nmJlgSp2%9lqbEa@tJ?e&55)Oj98N0kU5=f;PT%&=cWrZuJYyP~xp=C4G zx{}9IgE#!u)&W&fo_7V95&y^)eI!_`f%Jl>+E9A(LT!DA)b#_M$HSj8tr?u*dvsq0 z*o2Ua#P*3{)fkyiGDyiL9%hjqRbWlI#vZP6BJtjz+2!l4trH|}4jEO&DRp^r+v@%pL32L1&X&7(?%0GZM9P(rZz*M^M=LRP2uO3kk1*r z&2W|iMLFSza&1R1Iv1S>tnQKT>OFHH3x<4=Ue?>sejxskp0_KI@|<6IUoN&$qdJ2X z!mfdsNAdz}C*>~&a|eKG{Y?am#ZjD21jb?G;ketr#?DpoF!&X*lLIeCeuB*eb{A?) zrqkUxqAuWr2v*^H%U$-~9j5DMLgGZ}rEGt}#7F%f{@5@ZaaHM1-&fI9*M{6sxbxzg zXho>-q{ZEhbz(H42<29P$aI^xxpYPg*!3SY1o7ddyuu&ZUY;xK6 zI}Auv4(k4VRwId-H->=u(hYORF^k~K;QG_~&?qcRkU>6zu# zfSqP}p$%x}39A)uU*q$C2%o8E^6SGcG`5@hSZ}LVSuf51l~jU?NTWcKOMX3JgB+!e zC;Nc`r<@YU6qZZ+cZdT0A5w!atO^<}Nh7tCHd8-owp!LDn4XdMwCpx8pmBR{UO0{({-juE4ldPmA)pPSS$6t^LX{Zjm`_r5=-9iauFgB)22bPmv5 zA3z;#+696L&Yh@lJI5wX66=aC2pO`%|D-z5b&=0%IK{zJU150hlJBZ=gkM#~OfMWO zT2^yk62j(U!mgMt&Ph=Ix)K_hd=f1(osAaVl2ggi1cpEM9EckaF=8zRDTa)8Fc*Bz z+gINcLwW(};v>MeAHu|=7Ma-GW%x0iMRNa^-Sb)HRmNqAOoqYfak3O5yY;s1r}U;0 zOeS^V;9J7C23i(G~vv$S*u=N&5@T zUjdUq9{F?sDe$))h;wx5$dB<~5(tn{;tdwYxYYy<*!&v;>YFle<>ncJ0yjFopR+Fh~uY!Z=<(jHnIG=@?NDXbYki6bqrnGlRZdl z(WU*_X#}01h45RXe+bPc!&IF(c}6PpUwINsy81!LJa8_lCH7dsZ=94`m*3jLtr8l0GsH*LZwk-+@_YmrJ2 zd&>5nfYx{Fs6h+8>$kEh<`gwdrJ{!pDR01Pe$%pgcyMzm&wmLv;cd6d>cxe?9pCS2 zizx78WB(=WfDT%!R^GrJ1W##s9yjgm*D&DD~-nCv>y0qCS-p`uPVc=~pW1pU_`#qk;RacEu{D06%H*@&MS- z_h;wW>o$VMM5P#HfC}jsataIL7lYlIvzMK}qOVt1Yp;)`uhI2uf7xR4->A-o*V8MB z?}qi|RPh<)w z#`vEM`pw1i>&In`zVSK*|I!GXfB#G6Ajd&$2f#TWmkkTP|3Nh&<4{31k!Zb#y88F{ z{sfA1H*Hod2$t8;C~v#_WXK#^33@e;Ti}=$c1DV@WhzoT=t1OCk+;}74hlrHVb@wP z^9#Jylp@1G8=skL5S4ooIC?jAE z-y`%<_FRM1LPk%)PE({mv9%l;3yHL>pPJ2REZ+X4&R5iiI7F_v&YK0Fr2wyH!dPg+ zqTe6g0|Q8&TlHR+i4?uK&>`%xwK}SyrhRj28g~+ zWxXC`y*375W2s$>(Q^d0j+w{Jl6?M!pY{!qj2CJ!*H{dsZ6urcN!_N;$~DNF&J}2+ zI&v<1@ErZ8HT(nqD{o-lR(poSJe6XoxfHxw{rvg}wcNdq*}Z6_?*UGBR6B<)YWs6* zfPDdegD?N{E!FA>)WTm9NHl@xEQ2u=lGh?5D=99hCMXSS8fAE6|Y7L+8 z!571eGV+L*GxXRR8_Svg5gos*O+7V!E!$M;LZ;Oc{LSHb_5N}C-V(KWc9FmTZ#sHC z*^iSyt}Rcu(fvcf?nU>=)gKb!J+ElXlJAylQ?uV^o33)7aJyS~{`TA07_7Y52?C;7 zOXXH9nyVx3?OnIJb~w(W2BO}8$6c-7$;)4r`m=`dt55CTJL`Kg0XI*Xnq<+%-VKpn zC$8>p9ye!X?L_Tuj~6nY*O!`Eh8OLBVSc17@a?v>22u=wz46mA__)lXTrh;>dIw(648ksmowhC9#Im94ryRo7?Ct66 z=X98(|IuNxUDTYTFbq<&*$9LxTuqLGJmR}CYgS#Ko^mjURrXQ=!OYqTSb5}h91!Ta zgc~~!j~f|AO;pU<*&j((_)aZY;UZ;>j{dcPRo;^& zLE^C$sCFtv$QV5lz+<*e!vl&{*SWlu^hkZDG792-$7Cv{=fXm#0-_79r}f)XnMWp=g!Qm>F2H@Y6_k>c(na}^}t#W$Utjw0M5^o)r1Ff$+JS-^Zw+;GUr01a+@+7D&&IJ0-Y5Ge(%01n)rH~m-{$Jn9YnF*cG41XYv&-oy^#7_wf|g0}R2J{Mx#fhQ zL2vtqNQKV7zM5OS1qUeuEhxMM4PHgk`tVye|3_O+u#q_Q&@C~-z6L78dEbAvVrzxp zTo1jS1RUsTp%KKRdEu2&{HL4A(LeH67 zcE2Z1l5LY9JehZ@#bv%H<;YzvAe9?Q7OWisfMfSPvQ&G9mb)3*_+Y9N-XH`hBR>=D zv+rr>;~)h%a+$#vMYL*V=$c089iSx4j_1rSQC&~C98b@KIq4-93j5}xY`TjDmQbIY zz;+Y++OOLPdyD2KGX$EhZ-^CK#)D5!AXFAK*3qGlvPeTn8}7cNv-?dZf+Z?W48T_d zR?QyRks@nv6s_H#kFqaW`$P{mp6{-<&jhi1 zw{ZvUtg8mYd1_39C9DWObd~D5gV=1MsRMucUIe#c=CgqFua{!xNpjb$cxFeME=gY)iZ?h=Yi=?jE+#G1uc48 z`RT*fPtuTKD6JG&9p>Bm?h*m&yHb!T-mlM@UZ0aYcKy10WlFA!A4~ly45t=mjsl_5 z-=Q^Y0EUj;8*dFNI9Q`3eAI~q1u}hqc>!5UMvMc$y_Af8(vcm;Dy*+3AKVKv-)Jxl zZ5$o@--_Esi7U=MQ80i0h!Z~xq2#D(f{T6c@)us(T?9ScWl{I7q&U->tYvp2{DK+R&F^-WDhfgU9tEty#iXSR3-Uy0L+d2X)Fsx^i#=7Hoz!HqY(nZ)j zrGugFfD%-};9S{dY!n26aRe>e5sF7BKuGJDE49lCc8rC_SfqW)!W()V5?J!t;PmV% zE1xfGERLH|ORPA2wHxk*3CuE`abI`^z?bUr!LD)i_IBFelJi=qLXbSzke~)KR5|JE z-V+=ar1XY#tqcGkT6uY7cJKpjwoi{XB&a~*>&o4DD8$f5aF6n-Qs6O2tt=RGVc(_a4pclQB3i|~${@+)BX0`RH-f%WOFkX>-tG`(%pAhp)FpzSy4A) zEr3)TxO?g^a?|&|yIE@YE|`0{AJd#sbJ3{mTRwcrdcD7|em%Ee+PlMhb|ak!Jd&)l zu*HzsGh2JVu}qw?k^MMpdp;f-6M4k5lFCyzbPRPyk~ z=19+KU%R*6({%2zXFi`jzz%hPerKeY5~j&{VbyEgb@yc5!mA?Bsnnq&?t0|Ns4s(Gx8Nn|HhzZD-~44nE_= z_Ce?!7~|B+G5Tr2z7P!VG4&r=omJ@`UiZ&yhrCp8o4{Z72uS=z!T-EFNCDfredn-_ z9!#EbHESrk>~sghN&0#=AF_S-yzH`wbR?%W<$<$L%(tdv3-y6Kwv1!HAkUz3Q&rTpe@B2sq>E#N%F6t4B4ZIvhpY|Z<=NHsVWkyS8yRR3_*)24q zwVva2e%@Xp)Kc0eOb&ZFAnY#LrDv!K^P*k9{m3qDO-}A@n>`AxRom5LO1oN3uNT={ zN!h9^#}#Xe#gA7LW2(#e_=ytmkC0>a@xxzap|(JEw9Ebm3e;@>VHINb1yi6(9VNc; zkUmGsnTe1?^O`&yYjF{_HBOa+DZq%ONE)KAQlb?7_JcF$Ub6e-B=Y&B4C_`H(NA*w zP=U?jUlKIRQf((F2sYP#Rt<@MKefwfqvli2WXmKQL9sH8g}scp)`xCDNTrLYG3SV( z0c2Pmw+6Z0nJCgM5hPNeP7>)sCs9YJ6zhH`Q9%SPh1NKYlgUABTZN;Pi(iB?4~ZrU zoY)sF_uNrt;n)Sr5+t+`{#2H)L-TfxX0+YLiU_;6k~_|`!%4>(Hy>n>;i$eyN^Pdlgk53aP31^O!|j7_8N~$LRmj9Qz~9!+O0Q9 z>{4QwCkaUQdELA>tT_SDz8S5zk=3!F@|LBxuxK5J5u;~rNnwD(A%Nu48B!!Fgh@ud zESoyU5c#pc#B!J~e7JvjN~4A{&m%(Ryi(VYUVvm=eJ`T}4%cwkObYn8Mh^h~i~6thhe$e39Hi z&wn(7#lQH-_E5j;V2QwLv(-dq(0ae~TOeycZZxrW((R}#KNToNZgCoG$p0(oP_ZzT zq4uXYl7AP`;TT&rz2LNz$Z1SzR;ZSzSt^&17qS*9=809;jMBD5y!@f!Xn;Wfs0>=9 z$U!nlVI|D_-2v%{-zc4>2;JVqfa%x9+_-U`D3YeMAHKEOpLd1xJnSzRtF&Wbd4D0* zuBZR%R?G|?ZRrG%tGvbFZMzA8#3d~wS%tfLo-JwqNf#0aqaHoXh zy#6@u)p6!|jPN@b<@d`9G(#4K|A(u04v*{!8iixqwr$%R+sP&y+fH_3Y;4=MZQIty z*2c*|K-RCiSu`gGUnsZv0Bds9lLzGCUB^j8=QlE#k#53lgMdp)YG z^w4N1r%SZfqo=EU$wOze0`a_%AucRo+93pdecXTQ34fe2eH|dajox0NCPqe`p%*}) zn8HB6)$N`DT62z#0I}0;zC}4^%g?WV#NXP5Mp-DzlOq*S^RLJ$rlB8^Y6*4W8*e#0 zZo%|+&1Zk(Y-q~hHnjDQ-dJ?4)+#QLX7}&)?NZ-L8)e@R+y60~6nVDb%KoUo4<4lt zY<6fUwJ`acONuKOtFQT_@5M7?j-()t+ddG6GMm7jq^ zgSKh>aLu)fPsDex>I=O;8mYvM5#Yt_c~cS20l2J=+XL*+I`AKc#A^Dq#*&agU>@vL zk|ZT;kXT058AUz5@7{QPuYYzFUifhg$eji4(ib<^(RCP=hqOWk!%c%yuI9SS7D&_- zwY{!o(4`HOZ>8ZB?gHM-p09UzeLq)Yg$uxcd#ApH!1(~)Mw#Gh#dEIjNzKXfr`(0$ zXu)TOtXkgpH;H>bulcz)X$t~{Qy!(>s5%FA4nw`;W2;G#$q3_U#4nu|>& zf2Wzzkr@ISwv{E^3qKDRy35J3OA+WngwF_`ruw9e}u)(Gxjr*d#@If9>xY3dhS|_%qCfhppAL z!(xTX+B7UF5l`|e!OO)4S4McGcz1n>O#BV_nr->xdCMl$7RLYK>v=1CP&$zNZXP|W zKO{dDdY3!$A0 zf%Rf!5&~bq|H!u#&F5y0YtI<0&@|V zj<n8Wx$3LLv(N4x%EPD6<+z{F{#LDfiChYwZy&`%l8+v7#LaQ0 zTT>sPI<#OJ2NJg>s2d=<73TlDA{$+W{@gVz7RKi?oY?p(T*@x;Gb>PWElromov=k! zO<@$HgOCeMi-;<|YzhWp#i9;wqz@c$13eheGR%)l#Y3s3(z=pNES>2n(Yas6Jc@cl zctg-0gY~5U=_*#9<#!k_yNIx=u^IiwE?F^ej`L0pNk^zMsT&wN4~js8I$tajP2^v% z@=`|K21?%7x-yIbmBb4=2+fRhYn~EC&TdS#dkWJnTu3ev;esviD5gS+SserDQ@MsA zBqj_v+(zY-zJ`f>vyWj>rL$lxALcvSEhCpuh;OHJ+D6?98p!o=1;c8(<$?*@#p^^(*GDK@qH`Ff?aqUzd;x!@VqoW0H6Bk!sX>kr({LsQ{#DMFE-#7VI)3BG4bvnqGkj zj#yaJRTb}Ot*;$TWnc?L6`yI>c>8TrL~-)BTn@N=JH4Mg+fD=BI^qSu#1x#;r`~i9 zmA&lubr9S6XL>V9EsG%!mx@3;1_l`n#z6V)tDL9+vvT}(6Me|KRvp>tY5w0~G?UtT z1R*LM>J!wGkL8U8tifV7wYfvpOrW?4M#8BIIhF72pri{CE_vD2Q`B1gHR_;L^668iHtaUYqEjcT(-M3RPkS!@qo>b1A^j&H zh*J>U1O6j4epY&jjv$@0PHC@O5Ht3D>6~HvfvmZQ+eSjt&BOo%H*$nF-KhK~yD6!< zH-fPASwzPRHj|a)#-iPG7w~lEp_8&l^G;c%m#uvvi!lwaVtE}Jj`78yZdHEtT^(YTqb8T^t1fwK-$$c?Oj$-70SJKMqtFe?XS@XlT z{rQ{N$?>m34;hEy8ONLCnJ3-MbFN|5Rq?CgFvA{Rlc)ZDuKL*}e`bih6 z{kJ+c4kI1DpjWKr}fVUZwFnoF?{NfM;+>%gyHA!#evGT#V z!Q}Y%o0zmTq!LxjRtR{f&3f69-k-$G%r8~xqg5*l$sv`Mpd`uKTzdTcera_O`YmkV zTHzMc;RT2+kD6zdEvo`G3z_N7DB1A?Je=e{_kMQ>f7JUt3uElX4%S-e>%XS~Dwn_| z{a8ey@GlY#XE{=uuUOUe?wqoCZB8yqpSlw^y-1o(2ef5=U(N@ocR z1?CUUcZb8ua5Zv>BU}H*fBpIZa&)35D1m|*eCm7U7 zMp8Z=e3R~bz@tD#@(<9K>TUSfIW0WtmMZXr!C4t?(ZxijAs$ktTkvs?S}ddM)C(*u zA{%f4y%x{;I`6CEL=^o}kFlU;Sh2bk+=BfEx*p|@zQ*re;$0A6m1Ud3A znyv}IBiAU7q?+ecc>BmLb@fhK-yAxNt#H7zLT3-wTUTILN&8}i)LU0#@s(dZX%5SR zP+OXfQOh5ClrpZ4kfYghd#hLSr}m>k%@hZYnR=*HhimJ%R4%`@oyRlx)&yMzMnHR( zW6686;v7FC4^M?m10udqGg@ z{35wiVH-TI7ipg6KNy!-C9FPR459_@t*r}VMwCNu_#{jxstalh1WKTv}=bbXFq?yrSOx^b!;tIZf|TplaJAvaEb&u=dkLFj+|D~7Q{(m}r#9`MZ?@CZL`kg( zGAfPt^ua5X%fE;0ll95UaW;X5myat8L%o1keVUtZTQ7vcFoDQ@2Jw5m)MYlNJW$n5 z(pk8sSm}0u(pR1XSC2TlE`eDx4!qQPDq?Z3oMEFJ3n#o!Ug43L00pibi~1S@YR4-N z6Rt8#(b)%pdS-Ul(7(n?MExz+SC-Hv$rx_7g2 zwdMnJPRw}S@4-C!YN;Ga(bp>IusORwCBu@#404=SU5Z|UJ98T0dtWS_cRERPh$UxA z0P7Q)9FIsaO{Sjx(~r3Ejnmd6pVpcV+f{}Dr%l5mp9H#ta|g6~J|U^9mMolU`{m7jc`*cHTF%-)DS25(d%%sEyxxM4$KRpK`iKcI%j>y67ETlxpo6uCRI} z*yeG2FxXoSzJJLJ2v2{{XoU>CsPCwmXtfxp2qTX0;EIBU$P=@)!_@t|?!F)Je1jV< zLNn+onEzL+p)aF4i`_5fMMjX6jrL+#^6CmY_X8^yZ2FO`xync0Ps5i@($T^y+v=c8>`48h0(l8Q-Q0CTy z6gUM?z!84N<+9IQzeq~K!loL9vou^K3CX^8(Umns5BWStZ-nGF08|ZWNd%14if`K<_}oLSiuzJ%4BueGEy$1 z0!0>8VP(U@14}S(1ZqA4OE}Z=NamWTHilWj^c8G=9OI}U_R7lU>rFxHjLGK#A(;RX@W?r1eAjT!KbfKpWpz zh$^p2W*G+L)zB+OpsvW?vZv*9(=72dj|Cw;WgzDzfAiGBbPeRE9nV{U77ab_Fc~F7HhqfWRDiH+8vx}dJ z02AE=Gp0v*dx-+C*4PRWiYr%cIe>puL@3JUggF-zQ*pvhcP1^d&M#!?qh!%WJn-M! z`NNFCr=}{6M=?&27yG9ZBc00i2Rz{%u5iUNNtq4jAO9JK??p0bUvomN6%v|@yqm)) zf+(tCCp-u<|vj4p*N>GWD+_Efv7B4sHlEUO^P~fVz{`wQy`~NJ2>$5VQ%6_gjU^xGS-ovG#H3 z^oM`AtlZ-qZZ$dmA`6jFp#naoBTEuQ;7>Y~mng1i0}PlAa~^#aY$2C+>jzmPp&;}i zG#;3D5nokv69M1jG7>YsP*#$-gQULweRf@2S0DxSqB3^?te2@}%cQ=35ki@j4oYCk zo}oenEUS_rZp|}#&$XzP(1F`$M|RRAwo3dBsPS6@gZ8EJ%Pj+1 zQDsUHU`9q9cLs>aJt_GIE^_vKOa&It9y@WKBVu3!C>)TjLJtAHNnrgJY{b>_6Tm#3 zU?I{#Q(-MG5>@6-sc?M-^9_B+ z8Nn$g#Kv)+d>h1CRDY2M>3tR)oCh3)nG(F6Mo^w@zyPM*KKsWe{Wb9(JAr^Ea1a{i z;TSOIn!1%hvHV%2-2wLe=L$p1f7bU%81VqAYn67f9aL!0rx1+?NWwE#ttebv#bc_9 z3N1Qd63T#)RWvBCGN>QZB4Eb!ODqz94mXHU4QR@IIQn-Gr%~GJfj}*qbyRi2Iz?!8 z(cSW&xouSj-hWF-9@qEY5GR4Kasuar5BQx62JGQny4-S&Aub^WYC_6WLk_}>9HFKS z%r#Wa%uI?(#DY}J^G_@AGO!1fD>?w7#uMHZ3r(QtKaf#vAc&X+n?*?!2^p|RL1`~> ziV$0_6O_lqs*^rh>;y8dk{%y12Mi)Y!_J0a1^v-a2clz&x1>MUEV8FdCaGDW32d__ ze~gz6CAtb1-~$=hf(f=tQl>|GnEKE=ZPl0CBD4gZV&`d!DRcwj)r0n{_G*0AV77cJC z)+kA4A0!>CEH>HifZBk>z>rnPK1W#X2(4AaMp6B+0`6S27S8fBWI zHmtF9R@Aaq00sGtG?kM;W~zcu1j`4{kd0eL0Lw*QDk#t1JgXoLi7&BPM0QVR4)+)y zC|vu1>OWwj+X>P0Kt@!kbr8VvMK06DWEwRBw43uO4uw%z+8RLM_y*ZTVF_S`2HDE3 z`2V`E5faXC*5pyG?OfdI$wLUK@0T5yQDDvoNvDSBfsIbHui2nA~Y&*wfnoFVXu zVqgK(Z#3VOtSJVXxE2C7o5{01cG+TOn*_JU9m|%GX&SW!tfgkkI_0(lxCZw{alk$t zgpeE&oR&VQ5c$|q9&iFyDen+NaRbJS2T~$_RMt%Pf{+}^mYBKMh=F@WUjvd$X}M?x zocuEWGudM8N;Xn*xt{q^T68ubJaO?2vyFy|bi@}dmmDnIYRb<7+t2~vlsVg$(f}p8 zju1lM(Pv?L+yyihun_tkbgPnXO@E{ zz!jRD839^;YE3DS_CoAiB_O~mdzm_L?wAy!ujUlD zSl2Q;uC^n{1Ni82!c3@6PDD)&XLzOG+0;?I8;%&TnkJ2mBN19q6Cj@3e~tZ1b5I0W z>sd{;k@q3Eew^a)N2#0DiliWd?e_AGOLUm7y0^vb0#74syFdzEE&&ALMdFgmww4*)Dr~2o^2?P9|&xLDVUpu~~u(%e_ zs9v~)zt5h9KfjOxrypH1f|1KZ8>)>7*Ke7>slj3D2VdfE?s9G{?g+kil%C_IvP>DH z`*v4tGMs=A6nfgNTGm^|lv�>QL`iIWOrG?;?PYdLo^dg`PSjzVm{8DdqyGso*DFb7cx!*$Df!5tqMv@w=REqi zi6K-=yf6r!%YF4s)9auhDA<*KO?$<+D%3Q7lO<<$uXLbpAxOHpmaJyrhpT5HrR$QV ztB>0WQ%#vst|25}{j&eBX3(V*)^9_LeA%Vo$99TaZb|s2V0mN`drM8P-fC5BV57l7 z*=RoHjM8OGgy06};u(kJL#YO*!ombBw%M7`XW}ExQEgS6+v(B4VrqaGg(y>v?T+Hv za5Ez8&UWl8XZB~s!)RsO$rGB;*1sE%G(5AjA3B7`*4z*n&y>VBzNxpsHh@__C(XOU zOJU~atD%Ooeug#LPQ$iScOkcfW|~<1JJoBZ#$^euD*+GjH`A0z4o@912UD4S(}J5u zckv7;HSQw6RNN~g^NZ@7f0VA`Oc}#7&3tyb%doJ9iZ1ceINy6hW7T(OKdXE5hB|3Z z;w78zq!Sr)g=pvp1=rcqtpS-_ahSR@84`)Ut6b2c7x&8fiNa*mMnz4DlR~6C_9+ty zcikMZvyfo@#i>5j(8IyNOwmkg2dqu%D+JwDdzFQ*%MQso+($Y`v11R)37g{vHZ17g z<4)uTkNmmbuev#-)xNZTxrf%}7yoj=ubGO^&asJ{vTMZ~%()KEFI9e;j&1YmlwKi{ zdia%)P5K2+sg7REs^_p;5dYl$LO6IS@4pkA-_FsUQ`I|{Twz@zL#_?Ct8Xd&$q~}! zL6tm}5ZRDhg5%+b)f*Y=vijMQ8X!S|1-4I;nl3>>MxFciLbZD368<{1^;&B?I%C2& z-%@Q{+#-I-l5Rtt<92^X!I5~Wn0g>V!2sC8w!my{{0gk)cd{5@>QrnyT_OIpih1Nj zoio{OzLI(RCz}~L;*!ZdOk#peFqCZF4~*{p9PFn*yg<8fyyOE5>*GhE<2EEYY^nbz znuJTYxbX;&qhK)Mf{y|XtvOEL4pLyJdS)d{~y(R!FC*|3_PB8Oq8 z7k=ivkC5TBntbyLcG-{U)T-PYq6BK;-%8|uk;E|_g^leCCsmN-Y%|2)FDUae+udw0-7ty&%5 zb}|goYQ|tuHXz3lG>M<9*wkQ|inKAEK1s^0*-~gg`)__oE}QJ%Car3&w3yXB-#8If zLH#1c?B`=P$Ii=LD<)b(tW7*z@28&$)#c3JZ~s&bX^P(fdmKB%t(U6#SHRTt$KbSB_?V(rH^bTt>e|dgC_x651ope4plwyBhOm91!ra`` zrK|js8GnDyA{lnXR;A~spB~1~Q%w%~yYTfy;0zao==D2nB8zaBV~D8}PJDCXI!iXNupQggpz^Z1I|Mup1(Abd9QziMCGWnkI;f?M`c3GYjV z{i3Z-l+YDZKY?*7ji+U=)@5wu<#fo{)PaEJFx8U@*3D6U;WBNzCb_xHAXJC zS?VTih`s(g%`+g7n;L&Kv1HDDz|p7(=i}ip?v3Xod=|=_*j;F)Cf2-yZ0f*kQWe7m z@D%ph6!an9?l!wo;%3YfUg#BKyoGI6A$}oNQ0;m#@QGzSlj~V*{VwbPyyS+aJKf8p z#3pEWemB5(XvCN#w-1kdl>Dsk)*u_3FLfp<=pwy&n}8rw)yuR!eDu)eKV6)3xboQM z6BeF0>hNQ)X11N&quT1%9lEj(MXjs?SiY=WEBtd+)8_s9Wt*p#tRU>ya*u}L^@;hV z|M$~`lrYU?qk>c#gky28?($+>VDT5CjiJ!baj*Q9>@1pnoWn6Geib-)9gn;u)9cdS z#W$~?KUd5ry$pIYSCo$1?MuAVtUYCkI-=Dv4ac9Ee%9{K#OdWie-0(f#D+A}G7z;R?8v9~i+xbVnZ9=@Gs zjq5#;bgB}T61=_r@A9_KYqbStV{3n@oQn?h-e7z%>r(!b@81mjJlU@0rwyFcx(Gw~ z2LJtgJDo(#neQdcG$dMO_z^`NL-vOq2!|ApO%wuhuiwTepzGZ%>^aO-B93k7HZN&q zp!{#)AlfdQ zNJMnqCzI2h^ufKu8T$CHGb82@xnf()(f$hjB|T&FiTZ%bZHlON%hMCTnWdkZ)~7L+ z!Opxbw?C}yYUS)|K$XX0$qbyLLc#DRkVY+E+MCd&0L73S5*-HyMY#5mmYl;)vK$+* zjH&T8miT9I;u3wBBH>t};Sg%%218D9(j5bKMY#G`RK`=1;=(t*s8^F{3UF8Zy&%!~ zjk3n<8{A=CtPr5>?N1fasDqg}tXW>%xR7{hkQI`$?Y8KJ5Q3Sod?_8c*ZHyatgB*Z zYABj#09eXTm?PF-EU~CTKp*yez>33-oTKp0f20 zWrIb#;trj}&MXJe!m#s|n-U56?)ZJ5JOkc%J zto-eA@l3$fs$Q#mz6I~weGdNq0oMB}?cx+u^Uhek((-e8!$HEnpb!I!?_WghqJ{NE z61fp3-{+iUzHR)xzCf&=4izkINAAL2(QX|1{4{yIfeSkv zs-5Z|*q&;Y(N7L-?XWWD>4a><0++qHXO(Ix{o@2 z{6rdhPiQlaDLBVG+xyd2TKK}<0#U`)d)!Az;VCAwv$wC(XTTRg&n^X7RH#3e?`5!5 zTp3PC`sL$p?>U_KzM14MBXk$3#;mI3R43?xGPA>UBX3djnL`b_T(fgtxlFS|$;-0V zOcyVd|C~tc2C+&nxoWf7)s9K8^R%z*XIZu|08i!1Ogyx@#*lU;3L;BHF{^)`-$9jcA6B&d{&kxk&j12w?nn%k4=98{*oL^y7T4UFK%=xCcHN~<$>F|GxjS0-FQKpEp>NfLMe*G6=b}i z1rYUtYaQY46=oA@qb>s$I9+`i__juqqB~zJSINN?DQVpfiF!Qh zpvg*!lQ+2l_;RFliB|^_?YP-=8JQ;ewy0XvJKkMk)EhM_<2WB0a@5|Ka0RFws$Vn| zE=%;zY#n~Iqr$0%DJv5WOub5W|n!DZE@Mv z@Kozha|pyN=q06U?laJhIm=B%Mg&E@if~PMHPA`C*${LCx3m0(*$BoNqSXc}m0ANP z;fHb?H9L_L;Ag!1Drob1dQ0-M+jjKPz@zke9?G#RaOYWJQvwimyh zL8|>G@p(xV*^!u{cyJcA?bcH`ES?OHzXK70|bZxqVq5mi#2D z2!iT2$^+meGae0341s`T@xnal;v{1#&R$jOf=}gVe^#}%WY_%z6scI*@ zWuY5m^-QF%!cJ$rb*dRC={GJ<`&F0D^GUoYdb^LWz~;haU_?`q!wbF|okLo?9{Zcw zXTkZT)LNydBWvQ}lF>4~uj#jn5XEBVdNT#4XZE9dRY0@BV)z!6xy#SqpH({3n})AQ z+#6F^F0M|y(E)2-dWmlb_=@#LW&kV>I#mT?Z^`X{_9vWn)8GWqSF3dc{s67|F zuiIIm1LEuEYH_&TD<@ZzEw$d8A%VdM1iPm6TSLk3`?>V{>v_?kSKtz`>-SAuNc?;E z+j(TV5fI(jhDYm*!h-lAIP--VgClfu#ipyI_XLyM(jimJm*oHk!6CxGQrHF;KgqRe z$-o5aFRgFcIC5f0bS8jVN3lS%BBZA+HQxNmT9!3P&Mv}EXM`; zxv85=FN94B)5dDmPX^ur4z#yWs(Y7!8lJu_fsF-_X}}9jK`R(n?4N-yMhTaOATj4J$7b!}o~`oi@X#E|nkhU{v(7h75$-Mh1bbt9v8w zwSC!b&ybU+^fp|jV7b`Jq(8%)gdq~#G)n3T)-hnf1z7%hgM&x08Gj@%(Sk1mq7j1Q zO;uSvUBvdX5>|1ryMc!>4h`wOqfAN*plLgXdDH44g6=c_C^}S9i7xcsXO^2k6kE?x*1%z~ zRy6j2w_I|pXU1aV!_A3Iw=<>%V0dWpb8{#97n3e1KzU%!_%bzFQFi^;pt!(4A~X7J zd8@JsZHD^j((P+majdNHANluhI>H0W^eS64A&Io8?a6f{U|fO2l}s&{mWLNQ5rj8= z3yXNK^FPeLG8#UG#Gr9i4!jdX|4>;dNjB?M@y^a@l=uI#vSVVq8NP!D1yJw)*jSDH zsjjTwzKHnDrBi^3dJM@`#VysGN?*9Xv6y|TTop_;l!3!=VICxp4o?3*b0MCRyxoFq zbpePLGSxd+_Zu5v<*^(`kGb6TBg(S%N$2c(c4D_l_&GW2wa)LAIp7w<#p94NQ5s+9 zWg*DFm4sxzxW7cTGrrFe1MuYxdnajnVja04AabnN=uml3F`x1Zos`;i9)*f1m5YRPZVK3MC9yBRAG$KUJq^xg0ZuZO{ z3hf)DUEe`}eIJ=voI=KGnN^D!p&=Z4UrY`40Q@wLE>Xk;X|(zQ4p*%IXO(K39jVXp z_~86>mzCH3$bdkA1Pnz4D4?x3Ux2l@h0oY4!3sTjU|tjCn%Wsm^}Ch)?1Jkt97sk> z&Gzh1jKb&SayR%a$=PA}jc$eb`A(2$y>php%$~RkFOHFx$nZ-?_#bRy|b1?BsXZrUEcASzSJPVwl3C9*9`0PU;eJ2jv!H zFah$0zl{}v?;Yy@j`shdU#%WLwTsVPw8ASOU^J$G6eC@ zS?;y;Mc8eX0GO?fT;86hzacI&9r<Pch- z^@A1cc?%&hwzG>Ui!UwYPq0%RUCSI4n;!KUvZ ziI}=;T6e1JigyF* zT3qyAs4YYz2DLFk)gMk%a(29i_;G!0x0$(K@P_%}+A!NaLA%y5%~q(LK-=o3Vf+mC zaWWq@YBz^70gszdrQkKw>cjj#d3n zSCv+lmS)yzvq&B!wgu<3_>{qAd#0)m;AS(usSD2+U}|KC25D8?X| zHjW*|^?AjI=P~EO24JeQo#Gv|Q~WF#EL$pUrG6L^p`xAD;8X-AQm+}Vx)0-yNM6a|qEA0UuY zWU;%9jfw^6fLgh&K;>$vLKkPv*$rPx=Y3dYr*&b}t$#|v4>^#>h+GVBrIw`DL0_;^ z#WM(Rr4YXc3IMVwcB{`y5L`=SZTVRJ4EaCsz<)G{>YDx#XJpHSB}Yc=7RbXg`0#$C zzRg*@Skm>{JksTBR>gLOi|z0A*}o%eEya?TyXE=x0uW(J)bTi(vy=dW+a+y{DUCOd zPZ~(ih~x(@CMw|uadxNG%j+uO)Pw**vQU-3Ae>cM(-QymCr!xXKv(|CQlE+f zx&jh`t^lA3$f?#x;t@B#7+va7V|p`hG#)EGjx0=%E&uq*Fq`XT@3NQ*$p_jX{C&&` z14E7p;MX2A@@$OjcWi;!j}C!*0#OJGK|ppP<Qxe+4koA{#HdlZ8S z{@-%wruWSR=jb>VY*_boaY{!en5b`2F=nVZK$wfU zI&P>aK-gHy0;oITKODv7191su{&TV*vW_Q(rkVclMo&b(!!l6jWtrIFw-sbJ_L0{` zB0V$mZeU(D7WQ+>XDg95*)l#kT@-I{`6P!T4t+N#fzb7B(d!;RPTy&1gQvaI`o^+< zx&75ImL-i=cTPt-y-pbbj`CV6B%W%Nh@vu-OCVdCWq)vUo-WfI3wsP9!#gD2aaKMc z6~YW#R0Xj*6xks=?^Lz9r#W(ms}~oSKcaMuC->0-x%S~x_?hf-g1357O+igEjY3&Q`o&5nFtK9KkzIra)=L#Vg5 zo-yWt3+E8kJan>2W8`EGGGTR8!4{0v?Dl`=+a!A_Nnn=SjL(2GS6n>AaARxhi|%HoHXA^wsF zShbtDnN74=g_DvL{#JVy*`;yHv!9HFEtET~gowdSyKPazhQ=rAA~Fa=J*i69!;{qvDJD%lATdXzXx}=ON5eapjF+I z7AW;8!+^^zR3qw0drYgq7PN!OB5peMi?}7|J{nB^xcLTE2a`=@CHKcjeHey2N#&9N zCY_OsrQmk%d9FQu0Lvu9^#uz8b!YUd@9`uC!_poM%gLzeZZehI2m3kWegpE=PAVo^fL?O$ z`yc+)_OuU4Q2k1yOs!IXAb7L}4-5gN+QtctK?KtD)``sCt@^zXG{q4SeJ25Gg47gT z2zUZjTCE=xOa={4=PanG+L+Y7e;#e-r8_Sg#B^E&95lqVGX2Jhf6+R2F(Yik@!zNc z&>t>^x6!s+#J+8; zBM>*3G2srhS03Ku*+3^%DtK?;aCg&Rw?Dijfgdp(X5D?F1%TG9Y)NMW8X6da)8Pw7)y zClQ`W8a)7N)kvRl79NMCDar`BVD7GnfhCg(x&{Z|<<};;LU#^EJcc3CQUHG&jv&Hs z#ejlMf`Q@oL)&$r#JYqWzfQRhFA^MnNpC&`0Xk+>#w4N(q$ICQ?wGS7GUE&+YhSJ& zNL@3Y1jr1-SE&xtT(vl|4S)e<1+?dx-dTjhK4wvyqzc?W5y%5rm}^X|a5;a+XvhOJ z7T=$G1Sr$Lw)3=+pe2Ip*`-VZ+UlPEnv z0;=(#ix5SeD(gfxKrpnl{ViEcMe7N)K>{FYYU)LF`+lh`K?1_f$(8lzAxZGIx^XbD zNHP>eoFol^plUPL3@F@^KQY`u3;N|Lhn;yyGNx?<{^|Hza-qi;Fo|$vimNk(ffwj_ zVn_n%fn=$16wzg1N}>XvHTs>P)dcBp4lkmw0tu4A2;vk?={_UEifIR$#|w_4r4H&3 z1s()jS;tcc02#v60Lkm`qbLMQTmGcVl@J6G?u26!R3zvK$?(5{?keI+g5Xt!Ei*ua zAg%;80EcFlnHopTvRyI?GZT{fnnA2?G96)fhC#Sh4Wuf2snc zq^*xV^$(U7*&Z&-Jbfs*IWYr9vL&zq0hA2vs1YJe$|c62XdnC3+8z*}o>4FW!wxj3 z9W4sjn=-WA!WJ4>j`46I0~V_SKbz(qCX8k1`e{-b!iQTO$N-R0ImTQiMfGhld!Nvf zSbMnr5z7eBw^4N^O+d{G5zfa&+QTi$Q24K4r&YjqTibV#XwKtr5u9!g)Dn0%mB7}z zF+%LC zfr1v|ASv@rf!+g&8s>|`K$6MqLUX(mVP~MKo*0+~l!NRm8VA(jx@edHzfo#r;01zy zCl-7Wc|t)V|EE|XgwWP+2m>Era%Bnt^6HeTV@X z@%`Bu+~rq*6BKwLeFg|mP<7OQY8QM|RKVcRUY5Oh3AKmtcH9V5J6dYWG2xR!b8(m!-@QMf>~n#D+LK?3P3fE}q)Qj#5lS_pyM0)?FQ3IYL~ zvFsrN={LYSV*5xXF+nWmZ~&DOreJ$fCgu}xWFRwntSa^RppH<{v_JmS{Bc_l(| zS{l@J5T1u}Q%bTRN;_!3Iyi6(ZLemmv5fzZs;`cUqlv!6N$>=B65QQASnvSBT?co! zArRbkaCi5?A!u-ScX#)le81hZyMOedtEsMGvbDsh%k;+ zF#c5z52b*FoX-gLFLK~OHK}Vj2Io-q*}`Sx2l4Sm_Wgn`aUP1<1zc7uU}tSOh#kDVihqX$ykN6Ug5k(J*rVN))C>|^lCC{l3g zInQnX07uX=g$z4;CJ_)jogBi3KS2X>G$b6zCm677XhVUwq&$8bGB8*hD1zJAJ)eF7 z4pKBYl2CA>NKfma###KC%o);`KEkOxcK87%q5dRF!j4bat3W!hl^|`b&Vo<1!Kca_ z;R_U0=6}N#Aj62~>jeW}6ax(;$cVN>B3@>WDpI}VSQ=&CE#m}=O_1CUW;L z2uO4lPHTt^uvi7by5oq^%7_HTcYcXhfnodPj^Kf{E(|k97G?Abu~1T^DarSvAto6l z4sU3}ZBRmnW-5`UugDiDiM&%9BIABQ`+ps(n8D&-QS1UgAzrg5E<=IKQJqkXA0-3s zvt($V!tQ}aff0Oy7`PG_zXdrC8(%G7%a(3~0blt=<$$BeUy3pgnH!qH&z=!?-o>C! zi;d|bqAsYxT4w`)Ar3OCRZ85`+8|_7x@(4Qe($Q=u@3ncqK-?%9f6n^C?Hi7#I{e> zCRO4lpD$3HEzV;Esd?gpHFroSw z53gWFqVM}hN5{IaK!6_AtsSAgFN?5z@XosL{mrcY+XYDYLG932!QT?nFHhNQIa~(2u+Q0B0FM1<+XS?Xz;KYs zZb`jw8Xsgoy+lb3ac(9H*`v00?yTzH$$G6m_f4!Ze_2)GD#&#AvG{WGrtB)q-=4RA zwnS1O^?G~%yZn1~QHqVEBOjL9hm)pvWiyKFD3_V>s%4k!k==0t@|w3wmnWY0_OJLA8!m(8g6b2=^T-&(SG-#?SXNxu?~5T}HSE3kkas>N0oRSW8l9pZHp{98-~M!$yqtv^ z9mriksYwINZgfWc$21AQ$gf=3sLym^W|S0BO9w+kIfHVnMZqq!s>qb~tI3;=adQ9^+j&LuZ~Yokl&>`$`|V4ph?pC=D1WeeE`!BSrRq&KJC;*gsxRMh6d20LIg^Zd}v z96urZG0S*9qZ&yz9n74q?k?(wL{TJ^xoeAg+efxH+0PXzcpFU zS6g?Xa8q6M=UjgytN7XZ?9&^^lV z{Yb>4FM{a=ZO+`DJdAkWKb<-l*t~bELjbXabdK@CKZ(nbu zie+>s=G+$05l+ZFA7{@W9)$@Rxw3kS-bHKl-_>{V9}Tp4)BhgTzf|)9@k5WYSnYYd zkuNxCAH=;)wDwh4{@9RmaAZ#5Ep@)Kl8^$eghP6+gN(W8*8vVh(yKQe`?|#NY|CJ; zjm7oW);Ff(H6df;*%FXj5~nWF7Ff*N;bG{bly^c(G?B}wZm2+2Bfm8d+VoW@ly~9B z@`P6o=aFiUW=`%8yd+IrcSOhl0xU$)(jNy>$F9GTdU(@vNGF%Vca2j#SsMdP`-$gP zE$}uSZhA8x12%5Y-(kf4|1g6b+U&8wM7u~bupqZD6ljngrIe^ZhBLU|h`o*0JRqJZ zC|ESdd-inM z1K3o=J@XhCYfF9y9~x)qGSTtd{EMiF*d zsm9oCgKg9S8y3vn-c2Sq>i(bgrTerVN5O{4Yvkq>3D(DLEI3s{gAKfhqBOu(v%{cx zPN<@s^i2~~b!{nVwvoxnDby^@)Xl%GZi|JHU-5en3JM7Mv|9d{eoL;p4|i+O_wN3XrzF+l)*C{)$fiZ}|X zT(5nhPJG@gjLSDsOaA1)bd3H$mvGJ=I{NY#*lnCPygXnrI;Icy0uaz!T z64Vg`DmTi0)%wEy!{Hat#Yf6O$A@5;Y)&YwFCf+lx^(lBD%h7WQQYhPKawb<)(}&4 z5f7k-n16(uC@=q!L<_7(3wRrmMBDwjggHi=o6Qr(A#%-VF7?nnPP7OEJP3? z653%7_ovVlLEAdA8|g}XF7vEpjX|Ggs?{OAMgv&0oK=EMkCEh{L7>`WBz1g2AVQncytZOxlePV~|`ENeIw zLJiAN{at)-w|=hYbHA4cnHs>CvPP-oM#J_WGLWNK7J-mGX6L|%97Wet3!)df?}M@Z zgUTkDx#9o|BWU{Tsf6ByE1BcHTn(fra(!fnyeBlj9OigI3i;^wm z`~E7v8g35qx-_5bFg}^au&C@9rBYgm%_(PCHY#MeSU89ptJIj&-vZ{X-nob|=O|mh zDrtN${gX!{d2BCT%C*^J-nzF_xX|v%%lJwOAHydq4|H3q6O}i#+$B38nu%LpJFpyt z%IW1;)l@`s%Nw517#+PC5~$<}53uMMxOSjy5RAI4X_R+XFT@>mP&wfnd)nmTTbW~? zyjTC5yXg62%Q{ZN<+a{{3g_6xuE!?0Y!|x{!yhUf+1LrbLk{28S2MR)r$CBoFQ>X| zk02Bw5U7exTJ9?tuIzaD7>SUE9ond=c^0)wDZijKWE-tUZ#n%FPCOjbvk=@jBLv1# z6F{s<^B+Z0lqA@!p6KDib?3t*D6hOHs~P%Cg+S~>u)V(S`+Cn^-ZaUXro1+c;WI(! zH!r}gtz&_|dws*2rq1=8Y*828nit&}U3<`!;3r1sa*0yU@$E5UgsSr%i#8tKTB2O z9Po1!}b zFxp*dK>LBocGd=4k!me(oZ^Tb8M@1p35;aDZC)QDa9gC!?MV!qU$}#}I%&{U2@g=V zmy_b8OP~hg5^s%dxC}ndqcCx9_c7Hul9Ue|HCObIy5fxHMW`-q-=Kb-dK8tq=dVVI zqJj~R%5uH24@P$l@(Ss0n&LyE;E~G1k}PVRw(Y7AnXfjr4&q-rZnQ{HVD*Il12n6@ zo}aXcDcYv)tzcmrvnNDtv9egDK{MZu?l*If-{;uS^;D>_veaF_?bu>bZbd>;$`hM- zCQBF|kJss_qLFY8NqfB-zG8)=#agwgS&;NFKGbPcuviqxU?9qG*6Yw#F1}R__i60( zyq-=we_K3?Ca3az;3ZnU40#vc0#a`Qy4TO6NK9JJqB^(Up@r?8qcOMWeD32ejPbWw zqpx`q?_!<FUaR~+YsqH#=fJ>?3v)UpAz$&MfoSp3f<`d;eK;!Z(`pskgj>o&v zXx)!P)#bIegw}S^n&-5s1VzjiZgpMGSR>b=hEn4rGCBd4j5$<=o+Q5**dvWv*K^7& zLY%$HwNK_c-i#|4D+l+Rm9u!>Ix_z>V4W5MSeUVPjntDhz>H^nk9M493h=0rrL%hFP4 zg_iW`dpThZR&x6yc-J4A;{3$+E29QMApj3mh*ATAxBG^SH;Em;yq9MIFV6vAr;jJn z9yYt+l8Qp^nk0hjKYdDfE^951wYXiNvvh$}7`2~qc%4C|;n2{gFm?lad5WbsY zBnsGul{X0|)b7{d+$hS=npO5bXh%NPh47!SN^+qu%CC8nZ-tpqWFvdk!}K-^Rj!cC z2P4{7EsF1L#$@uGvKJG zkn&{zF?n720b<%+F|N+_a1$z;bJEK07XsFZ)dbQL#C|#+ROO#oMa8*!t1Q_XZ%F%2 z!!n`9iL?ZDd8+=?erkpgoz6tg_C{Xeh}bGamz*}`EB4h^6(n{J{P3j~Vd3eBf#cv> zL4YkV3ThY@kjKwzYuEHX993-mEmBnfzTibi(}z{``KPp+U|R2Uw_2!j?hv`Go>&#P z7ANt-7ve@Vm5*NxVuJFQl8`@#F)5v|GVJDwsscZ)kGX!5&Cl=XhsOwZ z?hnUR5T!aF;n!xbTVb1fphBnqWb;tkdmsgBi~s?MVhNkkZnTxTr~Qs2C7NZ&i!>u` zvv@|P(2@7z=je@u z4Jah3)i^NlZustD7!qE;TYbjO?fMY$Qn=pja&Rd*$r|bf%D+eAgBAy^-y_jO{{$gF zAf3USAAz19kO-k?K)8=ce8@fO7oICNlmZPvZjjC+5(l3Ejtlmsh|tQoNjvzrEQtb3 z0DZ=gTuzX^=`vHU^JC`{y-;uIbK^ciE9wkKU99#=T4Coq;@=}_7|^995DUEih_nq0 z(cw+uq$W}M5MtbCulE@l24&%I&)GqxzS_r~ww?Wbth7}I*Sa!*n_1NveE#v}*vw3f zs>vl$ZR+S;G}60o)g^H7khXv*z^m=$HJ5q4(k|?Q+5Ht{kivwm^?OcXO|xuk zTUc1|<#w}^^x&R#nU)S)#d~HcdGMGhjvDp#`}^Btbg*6KO+Lx{WhXjwv3X_bYdBh` z+nUuiUSyUx2UGt*7O75VEptE1r4_ZS{7Pc?4)7J6_lCs#5%{KjM*gEtLp~YWD9Cz3 z3ooCbK=c@0Sm=jj#u1|%*T}i{YQ0i2Q&~?SDbV*}FIf2XqDc51f9>Vr>f+uG`?OFZ zCCoK>3-(RU9+;`1Wv4eX4YKTFL`P3feQW z$lSLinATjOm}cC;0p2RkC&zHgW27s_eY`v5C+;w1B-TEDwkl&=n|1+eCC!$Wzm7HA zS@kfY7Vk+iWn`s(w0$J9M0~Uy`%Hs77n}2DM$26@4irTzEL;8J@0g&;raWB1n3U!n zIT*QURdh60GHi!~+a_pNxwR!bi_U2_Z7w%z>-)YfmIC8%d5MdP+DNhS9XfkN$v~i^ zW+aWp*eSX5-lmptqoB&$<~|D{pn~rR6!f9t*H^1HS@tI%cauY**bvXHl=fjVN!@E= zr53DwC165EJ^f&mr`6o)LhI)0)5+TX=jBZ`8bFKRNOe{#Jx-9U-*+sP^hLoY3f z)S&NURuQS61M2D*=ksyT6fir5Mr7L~lQ|8`DuK9a%S;i;DfCqt?zd^GbE)PFV<5-% zb>=jqBT&R0ZJ7<~DX`^8O_Xz2<`X7 z`6}n`6bk$>qGBuKFDRNO9R@YtB#UnD_4kWc$VzV=hr#_LF6VYvbwaj9KauWA!Z%^> z4&Zm;{6`p_p#W07%nMK7(4&vcub=gV+Qlm_g*IOmADFh!k%gG~hM&csz7;I}u%c`6 zI*;6&YS-a4tjUwQ+cU!LSM~9UlgZ_|K#09CBOH2_6Ov$m*j3zV9XR&CS5&60&sp;G zUDxrcP7qA=1CzRAY!9pJuXjghj|3?7T_Yk_ne%oEB2uT|@Q9sE_B<#CM>lEvoxHtF zrnr1Z?5qXQP!H$3U`CK8tL!SdOfV{JWtVYC!U6|eyALhCs+tX(8UanK z;HE^`Y*sru>(hMs#3`4~}wPE7GWGZ9pinc9=*ObUHk{)IfEul@WbuE#T zA5sNtFjZ&ZNxQ#&tQtNQj2%gEF0?|W7K}Zg!8FA!F31|h7FzG&Me)I91w88*2BqZo zy+n6ia*UYFshWbb8xJYQSiCLB@qsoZe^P0%oG#U69SX5=ypypqTty{%6mgh)SEy5E z1=N53V3#phjb)$jRJ?W@&#JVV5+fws^>t6SPfDT-=Ub&!a1PO620b@dIoavRG~eXC z;z-VaVBdmFuqQ)podqMRr&Ip!1sB(h6;BbM5`*+I8$Y>toll;|)6!aX-vTl2HcR}O z!XMs#La(OEy8F8*ffY=yY%~7uSO-cuaRo%J$sFSBv;nH%y~(^gR$_OL;eMF7SbrD9sZ(qE>A>0I6vpZ3LEkAg(xugcM4`xAR5uLb!@`N zhp&IPIpPpTou_9S3VMaq#V4WZoe7fVxg~ze4n)GrjP2rUQ6ch?>=^rpFn$zL$C$jN zH;?unBXI1vL>mM5ZUK<#_(+h+wjmniNizcew1@Mi^FpVgui4qT+ts;I>Rs=v{&fD} zc(aCcyVT-H?(on416<*xa0XOV=H}kHi}K&Z0dL~{E~cf z8d^pg(*eP%<8hh&{w%Aj{i|!`=mrVmII(gQVD&;`$6i>h{9>_LV>#HwK{zKHZmzK>UgYjxZS2v(rII&E_=k3brjC8dA$jW{>oKZ870rq z#PI>1o~Q|8cDfoZ_v+Hhbu4x&wwkZ5C=eKyyEI>d6s%ZZ5#C@W^s#3X7+>$3fOX3g z>%_o*iu zEX~yDSa#>qXIl%m#sGI-e(C{3hpBkPR50+KqQ7JGIn#QplKPORUcf$c7%aF*aFS0w z5C*=daC10$s$tjV)&BRwT)gpUnpd2{b@!66wP#$YK7WnfRwWkI`kjdt%baM)xwuM5 z2Xk=gg}0KAo1Lp|)T*#+F+Je;fQLf^a#*IK%lauD_o~DaRHKh13Z|Q&3;>6j^S=Ua zXsqh%NQleU3Z$CTjPIj~kA@cc_|T%KNr;aj&kje*>dz;s&OEWE`&IwV9zaPL$fUqI zE14&Q?$vvWfA~%Rhu`VooI#PXQ?X}s&0;gJ>-$0u1f;y}2_Diku~n}KdA{cmG~Km3 zb4cw+HkfV&ERTg!nt2(w2O76bfSJ@04({o92O9TGf->sgwmPKJnvRwD zG-%NX{2=Ho5y(p}!}g^CCmWsqFFZL8{*8#K+Xe5D%w?)G8N(|Z#YP1F z!@-)ZQNhLk+iu&{Jja7Id#8fZ)b+k>iWC#li%s3x_(L-PQv%{bJiJ~ zFxg{X&_Q-hPk3=9aOG!vTUM2P;r43&d=wuS376VQ6cp0+CB+Lz(x#Hgtq*T=UoE@6 zGC#FcG-3>=tFjrs$PHGF`9Y|oTof7DncQdTuXNbq+tZ7gBGejjUJ%F_ zZy&nXvR7Mtfx+gE(}LSCwTVzfexzTfEb3#LjW-mlx*q=}@QAytoO7}|;~qA|2me5W z>9_XF7Gexz@YV-d^ExpfVma+cf$E{ThG*3BwU*7U(iInu;*mgiJKw5I?tMH#Fu8{e ze#^eNi^V?fq^4BQ72>|hC41P=rI3f2h`MP@W}pce>W5~+5#27M0mibDq6BrVaUcx; z+u_vOG%Ow`(D`OsC#x~7)7I@y0g)z(WV;q%LUoRpGRO-ulKfuL2`XeUFgd4AM2wJ& z<_7ai7J4DxM8&4n!zNIjK^259ve?eveoMUfn}UR?kh1mi+BxwaR}v_h=c{8w6VFt; z&(OQmfvi{9t(WVtMD5t;&}icddD`PwS_)+<*S|b~FAUrtDOR8;<^rCDplH@Cy%32& zo-FE>=jdiclT(_tUVi3RBxI@S=r*1rN$b$!HyZjVQ2r#yxrk7r&r>gGWMreRh#2xq z(BhbGP?NpZ8jVLy_6-%VA$u~27^DAt^hAfs^?AI7g3}tObr`C2fem?62!Dnax9e*K zLVdMCICs6Ph7UAF9YI*rR#?{oK>fe=uLHnSoM2bh-=4r|IwHfYo?MUZcRO?y}KSLOT#J(3E_VdHe8>`(R<{Wl&6rNd&> zMHRpCK(dQvL@}i*#RUwUdm1E|D*2-wRPD}h9K1saLc2TMj&WM54cd`9ElX}52RmiL zRT=3X?irkd5c9DgEA`8+EIT1>u&^e~a1sLB>?njjjBf)i{z9l#ya+xZR zS%MAlpY<8j*if4pH$k#GUz?5XkhVI3r7lRd}& zNb?ue0H?3s_NWJJag!tGQfqh1s7c?{(Nm0Q+_swz0V|S^6@3^RyZ>2F>tDvJEcO_qLv}F~ z5aNbXSY^`aPC|cuWx|vt3LJt%64!HTeLx@8nL$k`K3)UxKW_=>+Z#HT)Oj^aY@i}& zyoSPA24$iJTz&DmEDq`K=^c;_r|rX0DP7BJSfO|jV6Hw(_E^+#M*VuF)GmZ+km4!a za4AK%>vr31hXZLOFK<@s~tnH7yIWENlDk_u{muG*@@%TGuN@Qb!UD2 zGw6KI6Da5P{ZA{1URBS;qF&t4!q_W9HPmbqS*>9NDc&uGlnTI0D1~efaGi3Tc3Cj< z)ybXh@mJMRz@Ne|bC1N2VKc@C+aKs;=K916Br$LrN zu;rHezMLspR}8BR{)t8@S&nS+CDTpL!hS~;z$TpRq@NYh)^1`MXGAdZnMDS3qv!&g zrsXPG_050jQ7-P2z{ERNL8j2Sjqd>ghL_Alf`Dz$A3CRUHcQO{ojtRzYtP<7k$J%w zWd=6FkzVl&vE7tsWY~wxt7AT{cxS4(9g^x$cEDp(@|(4ju;mIf+NuJP_;T zfMZZ`ncUX6G$zV1&egWabvF|RWO0k#Dh88;fQT{lZ7eKqNxj) z)UjHCmw8*;0v|}`K6vIV?)hO-53=W|hnm|bmc<+Xgpb>F#F*e@iCbj*%D&FDP+Q<4 zV4b9k^4tUWeC8`G!NMM6ltC&1!kY?u#-ZGuKG;G`Wd>jPodF&@L}v z8?ao_)YZSNx}CgBXy;SB>8fL_3R+>S)b-f#_^T61;w9-3CNFuV1!@f1^_R?7JyLJ9r(|)Qf z(L5kE&=A=?d@5NEsh;O}7HHZ(RN?V0-MNG5u^cX_=)a%t+B5*7-yHN*quezLrVO^8 zPRosP3B_}G)WuK5=YgQdcXx9emTa@o3UzkWUhfV?6fbJ8lL2>}w4^t3BZz{S;GF({ zfD)44jQlqP7^SoN=MAsf0Eojc7nR)BdJbo2DQeB1O6!vHOmNTnaKZ}e3ftSH>XgEA z2Yu5&0IE>=`hx%z1GR~{{vDr1f(u52uS4)k`R!pPi6lej1@Bb;zDzhyanPH6uQKIHUW9q3tJeTD4zy>w2uafG)^m13nk6*oR3N1Bj#AgYhL_4`z`oTgVe+tV zaVHN|bJ=2}Kmp#TbwerIDWfy`)+pp%qw!#%AJm02T-Pw1z;urHtyysvNaaxqCW?3* z?VQjFPW4YM?syh1BYA%imHz!rX}4p=O7V? zXw`e90qNYnG&2v>r$n+47^fxG8dQ+Go3*?Lc1I$Sq#yZLRRW(KddXS+*WFsBj?3y%$4SOY?rd1__cN69HddN6Yy6lb6qd&Acj;8naJ8 zGyzhh`m?zwo@9gkB~sgO#Fp0G&O5=VykukIYY9`6ozKKZuHy?l3o~bwv8|0ki+m4X zKMVh=;gDpXz<+V`dNrJ0TW{E-5~dKwNn>w6bh0u;L-EHq)jOQR;eJSGKJYmE8{-$9hF!qNclEd%swDHvWb;ro-6Ar z>X_uM1g>!I=1^Ci>d_y!n1izv-tw!B^GZQ~RLNSspJZrmB zn7!@w&BwiR%~!u#I%}w{40nBgyy=?|s>(_EqZ$yofkF(F+Z1bY4iR1z=bov_3{m36 zCAW2Amm&6nT- zDdq+B6U3}L1os@fHUp{i7j|OLe{9VNDEGVW#Lk*Jse*%Z0&x&86+;+IS zI8%|?#M!TzAcooc@jD8433^z#sV^=;RC8XvpN#ag<~zzqDj3<%Mi2>EimY%KZe{xe z_%^1jsoRMk4aF4bJyc|*I+Jf)?_>UG5cX=EOTmw^(h-qFX?Y9ng>(hfscrtXpV;3` zhLu*4X(n;xz@Q6p9Ql>M*kV88m(A8(JwWu~pL#x`|DI78|IXhJS`mtn1P)Ltn8=CD z;-jhsa;cK6tK_E0lrrqvV@MvEg@kN0VpfSm#UHppSn1`R4M@@Sn7zhPmL>=)Lp7d1 z2e|E~FE=nNzM+b4e)k@JY?^kM>mRxoLp$r<(wWu3m<>wK==LwiS(wqlm{U7$@AhvR zL+~nx?mY>B@__t*eiJjV8|dFu$+4ss9JOGQH7dP>ET zG9=!D=<4_TH+|tT4H1|M!ot=!6r4i%iWdoQK@OoC{jTqlnb3&Ap+1AqVKn7UjEW9m zVyr2ICNwa(c~dK@$(Xu|9#9A|xJ|dQl0ur~B(SRt|LDc1WLp9mLehMs!&=09M+fPm z0_Y5A|Ijk@$`_JFcK@pHQyq1o$nT>sE+DgkuEN&+{#_f&I*^jw2EGQ{WiUkhm$d{g z+ZN1{rm?7w2o2rQS5X8ZRVU)l*;{z!{aXf*?d7^OqEjEq{JP^P#t-vynIx2Re$R(7 zK>@r=)FAJaiNXQx%^sz$i8fMPZmRqJtI-~WDnBfdjXDq@ck@B5&@+S_i(X_`lT{*i zbK>;g8a&iA@?ea9=Ay~$`DM<-Z_I(y+XtrqFVUI|NuZYeHn#a%4H%WupQEjgm?HjQ~FZoI#W?)wxJe1ZzFGkY9ukFM)M| za;}u92R)XK*aO+dKaqZ~cu8rlMWK|sZ^ua1I}OppkXFfoNI=NoK|;FQ9V#+P#mq== z%Am=nz>YF6rOO^d*BUoyQqjQR$^#)Gy9dcnGb15SnX%}6!WDq%?t4(8XZ{Kmbs%c; z(ePHTWhD`CLWzls`hxJgfTz#F{Q@QY9}Ps$;agavAD~han8$+#Gmm*1Ck{WgJ1F+qPLb7=_?EA3~ z{piLAqNf^4X-W^dZ=mp(rfx%xdqY7y?Kdi!Qa ziQz(|-25!U?k`QIN~qi0HF_!`osTeu#B1A!sNg)ae>fL7`jq+m^nJ3(?6X+=!_6P(I0GiAk^4J zBCR>3pM9i;yfgNLzvvNl1H}hf0@6SAYvV>t3kBhHV)nRAG-VCeimIUiaZgGJ1RTg; za4S%LM{bm=edw0N_($JBDHxKGq=Eu`fpLfM-2h+wHy}7uVL-@P5HgJY_kTGeYalsb z0CDUpUqe2m=dem&5&}Q*h#6Z#q8)Bl`Hmwinug;~HnvYZ$jvyEOk(h!rZ>f(kdp-3s@k2!EO(G%N%aWP+*f+W)5rMe`- zpwZL@cO<(|X3@jeL%Q%qjT#}L=yNBnFF6b#B5oLBQ|?eX}rKh5Ju!W&|Ks4RxDmwY!fog(>Fmn`~^|H7Vn!Z`q)-WQ=| z0SVWkDhZXaV`GNr-L&t){U9w01 z-w1_JW#V}GT#fOY{uMoQ^5O{6+g#>oqsV^&2BpnJ4MlZ=Jt1td%t<dueO{Q?ScW@tQb;8(n+G6EzG!biL?{Z27ZQi1tc4% zMxTS9Xmvh>YTH{uN$<3PlKCmt(n{r5opl?Vutbq5rMog)vmB-Ybaz8T6VTRg)H2-R z54$F3c|||`xWTZ3F>UR}vbl|GEfvv+Xb9|lgz=DK-%^G>}??o$hV#5 zG1O&o6}He-nd~$yf`wPwo~B!ceedtiIX0KCM}_sKGjFKcd@)TM(xPjF79d9=Ch*@~ zD0u&2e>{k~w0nEKTLw1UiVgnW>g{~YMg7_+jP)g&Y+J;t#a&5lIR zrFuYta0Go`e~Pw#SY6x#k#^_Yf(q_q{z+6v{l1~BzV`a;!tIPLaNNtEStj+YF$4Ie z?{nYq=bFox@BuI!;i7G(Y*YK2y^pm&LufrdF)6OiAeziNl_a4am1I2J=+DCOsr(@< z0Ud(jGB=>deGyQ1Pjdfevxj#z?a~vtWw+ru?jlrFH!&V=CS)4tYTAH{G$ZYJc#<|M zhnDNs5q>&yZ?^A#c;W>RTs}YS!UgWkmJF^-rnz%*J;@Ew-xF%|4W23H1^AR2hu4nK z2F=zqKT$o+FZT=1TMX7s<(xX5!pW)R0XQ-QT@KrBcQWKg zc+FVe)P9v;ubiZHQ{cpi$LJqkV%CHsm31N$t_MNna<*g@K^ZejYks;DyTHEu3QX|8 z+!3}a*R0%_g&4q|Hnrl z;OM8ZqV6vLs`Y`a7fIty!L3iEmE!6Bz2n3;{i&xByXBIgyStLHj3$Dk_a>G0AK40V zx<#H^Hm!@z$7bbqf(nhC@4$xDd=mfyDSpJD=`0@wLf)R*yZ*ZGZLpi}!Rh`&pR{u0 z-jr+GlMq^SOIz;rfrO=GWuG?RX6f0SHp4d3uo$xHGN%Llc_FXPu@U_i>O0+8RNC-z>bUuu~( zui27Fs82MBg#=&fDW7gzKU>afYHWVwq`;EbOi?W(wH&r9UKGT+Kht5muRmWDU5?Jt56VhC}qW8$TMYr%x zz$UdOhIA>{t;JXttzY&h7netgwJZ^Qyd(eBN<^^i)yz(1ZG+R@lUoYbUEc_|4++L! z?RUZq%podh^*yFj>oX&T5ZOH=H1{Oljo>@MjP+}7#|$A`p#}N~+ee>lFB|zZcWFL7 zoP+zI2_Y{cFmM^qKcYp}Le`exGxeG#JyS^C7wf-eUvy%mR!``)>zi=Pxqmlcw-bvb z))9GHYSY>b+%c(D=P*i6DDe|6{Gi6vIM!q|DAJ!VHfJ>Mpk@y7+cN@|u`1!q*sG{p z9svhTl^&m+8eNrv-T5lJ*Z8Rxd$FUhCL|q~(*o{isldgE`vRi-*iDrpwdmC04;1^n z!R({1D|60TOPjXvjq+FTgX{$ZhV9}AZ7oVmz&1VlWm%rl&}zwJwmW~{im7R?@J@<$ z*SJHcp8G4M;kHt-SyQ1zFmIu$8peFew-H5=^NiXjFoBbB8%JUDm^Ka;zbUV$!SeAu z`!*o_6&O3FhvrL92^$*y{q8$Pr-IBO#$_gDlBsg4T7k`zGf)5`#mD9{HlVvpob`}o zo)?^Do~~1kVv%5dfB0bF&29zDo1iqd`Q${_P47^ zzYNfi36TKu4I(`SXQh`>_Rlc(EO^yd39=KH5BOtm$G%+cE(p!Zx}cnM=v$A0Q56*Zwx~1~AKann|)5o>|qT8=#-kp+9>NUAnZ%-2EQ~DP|X}($GkLS@hdWz>vHVh^O2@D*v zhABsa&%Xv{ZZAYE*?Zq`KkC6La-!AVs+%O9!jKg=$V+!TJ(I3?JewhM@25)zCw_6A zPC6vk6VP=rQCD|xq{_Ytj|?Du*L*s+Aoq^edc4X*n1VlB7y`C<+>Wjazk9r2M}v#> zZS`IOEa1*`PzftC`DatjnR(pkzea*i_l?8{_}$)epfy(H0K_bkjn3jOJCHdWGAWF3 z0w|OX*%!&_p@f<4!sF*gJm?cUG7a({MRlUpoQ1Ht1z9Aw5L|56{f7@12GlyCPtt zbXk3aw|AToH~d_6Ad8qSJu?MAr_U3!o!$DI)OO0_j<<$(d~Z33v@(hP$)ct^c{QzL zP&!s`PQ5|SB}U)N_4%;egCBUFFjsqhx9UMI0iJ7E_iSZq@woPSZqdKy^PRs}s2bN{ z2DBg57r6x`POt2Mok25eH?sigkw$%|1}fY~-qjd1J`+BcZ+zVy`;OD=O|DU#q+fR0 z%AeHGzB}a%*)ekD$b~q?8FC*UKm_?~DfHK83UH@eW-RsIb`+++FQAryr)NJG+`R)~ z!6z=DU;Ljj!BkwxKVg8Z|L<4PSpwbg6|M^(U|<%k62}t`5wiRl!BkP9;D`Jh!}-IY zZe7`_cXZ;xIKjAzhW4C^m0Gv8SThd&)GEOPo(?^jH%Fvor!|7v+wov##If?IvTZTA z&VhSSK>dg(WBFm5(GahFN8JV<6z=C=%4`++JB`5Sr-99$%_^}jupZlRvr8i^hQGx{ z|6w(3%f-{vgBzZ9QK z2D$9aIt5OhoTo*$W_IK`9hjuxz5W+f?-!wr$(SsqItSw)v}V+qT`F;?%b7 z_SE+6f86KZ_kBL>G4_Xy>||vpS(#aDPR-quA{#)wbtKKB-%vzpfCs<_I%vj`;#Lnq zo|6xE`T^{sM^h@f(#lAM9=5 zQjlI;he3gw1p@v))*cV>H@ubK1H=y@&^$2fP)?MalVLK=s)Z|M?CCGDOjx<(a9n$I zmneW48ZM{;Qpnz$Ui;Z1m1u8cNPdVVXu#qfLqh>-m(LqtWY(&(pBC(Us_33njS@S< z0@kXx$KP;kwr7NcYM~)(LX>nz@l}%DP(>b0aD`ts#yxc=8Ly%SWT#RPzNWl+i3IO9 z_YoEJ1-=121EM42;+l$W&LITN9EYP6(RAcJhVh4kw zR~Kus3W`{p{cLU8?g&UL0t^`YW0G2`>CzFfmAWz6YVOErM1Hvp55$a3wS$S|S5=)U0CDF3b}d)Dyusd}aVV zqBU#!ZcdLV^HJd3S7;_lZ0Uc051_?orad|tn=JpzY4TLZbV_%QdM#0VS0&pTN6t%$ z=NiP`I8pErYvNx6V^Fy#IW!9LBsr5Zi*hKEB~C!J4FyCSGBk4-zp09x|6>gN4au;! zwr!Tx8Cgz?nIpD)|KK+T=`6;cYl{i^u!!PIU6qqF6@EI(re>xEa3dXY{{z&7`(`J> zx%@i_9`XaLz{%j%3?C1(LuPFq1>;|jnB7e#vh#a9k%^k5RvdPYyDDfPIKBFg-MWrp zAN-3&V!-<^8zZLi$)f3dNql_VmbztC0gkiw(t$=Vb?j3twV!-p^61{9fQuV2qb^j= zP^R7AkXS|4h2K%d8+4_rCxxq&S7w84fN6S5_Dgqu8?~Z90oN#GFVfO{aTk|aEuFgb zjAl5_j02Y!c;p~?$PoW)%N?YI?!LR*fxXe7<36gia`GNtH=sqf5}g0~3?{sWED}Z! zS(`rOx#jp-7{_46F0?G#?dK3t7xv1N6AjPBIFa2hk!Jbz$EsIqeXK~%3AeupnhYbB z?bV-SlE>ylR$d^S6zf;ay-&R~6Y>70W8F}Ovj>EJe2s(LPo23-Zp(q)<)+nB1`-65C#Y%5|yaG7!FT zethw%`r;D-T*J0KyBq*4+yYTdE6!Pw4-%G`H!8x9Kr*2dYalEQ7=igVn1pxe8?1Hy z02m=ys9-@lTEN6o43F*R54=D877{*D*cL*4x+tt%9N|en=e1fP#Vgg(d(XiPts6x~ z2N6G>_}`+n1jbN~f9lQR7Ki^Ye!K*w}qs3tN_+rHI|__*=KHUNgFC4Zt;$VQY* zcgwq}JlQoyM&utg9Zvvklu?o3e{IpzOs1;o%u)*{p02iAHo3o4D=B2C%BTM=REFWU zCRWMI15@Ao?&e5+N&StMO5doOkS^{Z6w+rsAs^XA;EId;2f%%fLBbHVjZsPiB2ApO zWlVm~;kHe3ocgxTO1r6ujTpC@e=Yw6@I&_PWQf4N{H|6>>@`@~ zD8IAj-U1@kUc=RJ_>L`yeL#u*)>>vVGfKU zRHKGbvRFfgybol+B@HoM-m<_Fk6%!(Buiz-L*q3COZXoxkRY<(zUf{(4bfI+hOIY3 zAf{zs8V-Wle3LOaJwr+_{Iy4z{Ad=CvQYzO`J4($1Dusb?;v(}`b;`?Y6pJ>ffr+r zN}9mrK#K-dIJCx7GBb2&x~fl;N)n%z8nt`AG5em1-O>W6{n6UGf59?|jL|M5qG$07DFvR=>$HwvPK zFwy?dfVFUNj=hh#$U@Z)dhx(LcI_G)LE39=I-$mERkZ&59RLLzmWcg3eeQnYgnz2?U>?x4dHB%RJ**JA|LyMaPM*Y@i(RNe z_Ewx|J9JeaW<*sHsIWI}_k9UUpW_2D-Zijl4M#XZ4P+E3r0~{BAEE>{dU`CHp-uNf zH)Y8dK7an$q_gMWO0n9rsq6#hZVyEiX$7D^qmn8Pn-2nD`@g-rOI>Yy(vb$g zle*b^V7{w&a1E&Nq?kQWurWsrs9hq&eaT5!+rMsKg7T_6l~!CLO2uv^VJ-bjH(9y0 z*6KTzVQ=#N-#ZpBl-&F!$;J-u_cLAk?pBe#oA{XEUxF_molTCBYgt%VjafRN6JXqmTTq0Y|t8}Cid zafjn1%3Wc$(m$uzEQkIpk*&lguCP54iSPx$;$d~f^4SFEKQh2{P)wSs`A0PJYajj` z|A*IsYL}Q3*_cLa>0W2@rK&tMSJG|1H&dX0aIM23>xdiCPT6m28C1gC;zqfpZ;l{9 z+T2z_(eNUG(Prv~@717E6;g~XVxg>+puG9fzn>yMvKoVFm8`W?R(N z70!%abME=IzPR05VF}lXBkULqd)a5z81WGo9*VK9!$u7%Gaw3wNnymLQmbO6%$=RT zD_xL`PT_=nKD*8!cbJ%I)2Nm?N^V29E{)2ZoE6^xLjpnZ$>Ib@w%s0)P9*`1*b#xH zGFO?aP(%y}EF{*UHr|9a-eUn<&n^R?EyM9SAcJ5}2V%nD#PAD+1VE=jn0Y|3^p7Kj zyFtAz_JO8A5HKMIz?HrX{jgEsrW+UU9-p444l*lwg{%KCpZ0eO|Ni;pf~of4b1 z8kR?@IKcd)v;FH}NE*s|X_i7+GLN#fn_iKO&M{6b&%?WMZsq~P2?JeZexItb763PVD4LaQT0Ij0}W-I>rDotw(PF zq)Gr`cgQsgH)&vJ0Dwr^jK-?4P@TD7d3tQUya>e7pg2YU7lId_o7k{zlyNO^+2<`R z?OM81%TLwRSeg=&pWP(op69pi`~EEG`y3W02%Mu3wk0S?WxCn(?Ql&AE{B1J+Rd&v z1m$ki?vCqzJjLsE5xZ6`w>D+odR9KgyU~Krab29Yz_5x$;OQwNA zV@@w4PW4Y0>~CZ^I>s;1%Ah{dF%QIR<#G^Br?NaUaLc7#%`n=X6f@xZjaOi~QQwEm z-kU<m1>g-$q8b6;ETQm{<+pyj+~TY=+YGj}UZkdR$20^<(&?;zRzs2oa{tk; zEtBCx+G5i2q%tOIJjh;29VH(Z{y3*g23r1edP-5{3`0r$?*MV<`z1~A0m%(2E(~XY zWs+3cg&I7)cLU5lH@DKec5_bKoq(|I3U4uEy?1VF3s4umIxjLKYGYI8#Twbo$21a^ z$yA%-kFL^M2#uRXVGqYgv(6N4Msbl84F9k`zSKCFN6wYW93;kz@nWG7jb|Mk%{iBx zK~+e7V3plu8SoQh_)x>9bVy}A4tFA_IiTxOIFkIsHnN@U$^H-=N|d_oC?lSL^0C0? zQA;jp2WUNXQLS>xax^UJDcx3<8&1W|(!oBdQLXfXJ{VmbR-X%!qr)l+e>iv+^!pw} zwDDo5P3JQ(9uO}_lWkAA_utzA^)Yy}A=vGzTOk+70!Br$JmB>#TPwDi8MjDNq=OxP> zkJ2+1h4Ktrth7SaHx7f&`h2GE5WW<6d8=i57e4Dodc{OGJ#bn#Vsb<9>*aO^@EPGg z1h?8=e`aVrJp4mMBbUaZ0BeOK?@KtcF?+&6o_qf(@vpRVCQbgB;}7QcU36Nf0xUn^ zuZOgiK)N{RB8$v=qfE85z?@z^PGM+ZU&HSmcfrqF1;TIf^ZOe0C+}*nDjvipVQ}L~ zmjrekcin>!d(wdq{mm}<(_gF&V? z>+?SrQo+rXFuSMU`tBohWSM&Z27QIGqjXrE*Scpd$uiTpp{>_pyD$k5XLu5n3Ny1Tpvk8_j(I z=V-FD@C95i=xkNWZrjj!>dHkmuFiaN44Qwz#SCcv#v*({@W47k_-u;7HZ^zq7pPlY zRQ=G>K-w!Z28I1M;SP`ghW^m`Yu?e}!-mu#lFD8ZTl^yXOgmxxI-feHts@KNd}ux4v{jRxQs3O!sz zbpWdE@q-R77+COK^?mGJz7Os)lzX??S zTYW=FQRwgz49xsUDEo)A97IvXxJbsP!V`X4*}Wg`f@+q+@Ronz?J7D;<^q^FiyRG4 zLj17fEF!sK?a)a^oG$+iCSwij*LU$>D@b92;^0=FfCy(WgBCaF#7^nQp+m~HdqjyA zk~mWyA}VDrnpSmS5+`yOhH$1dVamuwKG-#g<|Rfw_}O$>NX36r^RFvV8?&bSgK;_m z&+<7)DG-BDCk)xQdT7u!5r8Bmv9m%Mv-Z}ehqQ59)Qs!}ZWAg4{?4=8SiE)#41 zbMkQp?73{GWL*}K5L6Vp?05q+FOre|{wxRKpRN)A|6L1qx$kiwD`zuzsJkPV_mDyh z?l)KKn9|Zo2YCpRcE-yF54|IxbOu>*h%l}SG@Ary73u+i7pBTV!mv<$aowHpMC9=e zSt9*I|Itc+Ak+NVa4#H;^&XWQ0bx6sG?8imS;|g4`agOobO{p${~Sk>qn#?!z5BT3)RQ&@&&}Mc*hg@79s0h-9P>|#u+zkbVs{D0a zRNf>Cv!A&4dLz;0%_d15u9Gj-N!#t_Fd%_`E}I&{EfY(Bde2ig#x*v0@o7!cYKy0w z47-wTU1L?JGt_`ux?GfOeo~gJS1;EFo(D6~rvWR8d%tLFOoy6l{8E=jJ-vZ@L+hfdc?e1(>D+wCYQ5Kc zU12jKud&ZonhUuyHIoJWVF1LokcyCloCuW?`r8=x5sq1n_ihtV*p8fhnW?^s-zdW@ zxyZ28zwDb7-#bQeNbGRl;A1r(G7($F$p8SeIEbUq`49daqBCgGs(^=0!`>+!fJB;M@C_0`9Z)6}+VIWYSP=Kf|`i72HX4J}8@ z``C?Y`rhu=+=h1&9KKXg>2?&-MYQ4X=&Tra!{=doVm%-5t)ISAfgM z^?T4+(EblPuxquAuqEvi$jL!7mP+2FBKygxg$4b`{DD`p&zi6&x`G?oUpf(@Y;!ln zeW(0pO}Ua-7EwOI=b`~hj}E=EWdF4P@%y&|RSGLqIYo~m3Rya0@B{7eCzg@K)M$OZj$F7;NJ7q`D8`DG8*!G_ty zRuvISOmy+eQ#sGXwoYLH9Kv;`BFlT+U(+suCgxatazET6W+$LiA;X&o;8)~{u^RI; z>8LFoi=*8Z&dEz1bD0;6A7L{aUgA;}dABMbWD6g+g%m&{XnYEo=f$1D-GIM|R(3YN zoM6W$`@!#SUcQ@&(|>86_g|h$rnN(=4yf>lWe70E6T>E!mO?^aYbWYUQ~QH%S$ypd zKhs%reS&b&btb4ZwQ;hRHsT!y>9s*Cf%Sv-I7Nr@+;5QBye@qYe>5cd!NYw~+&xfO zo9De)81nMl$Mnaic>^R)mjTU|uB?1=z@@7t7~;tHs4imI0MMKgK2Sjrg4<6J*iGTO zOgUP9Dj1iWFjrQeQRn2Bcs)hDOsy67yrrnj;jNj5htEi8UJTa2uKYq*dQ5CX2z~Qo zF4Q>J;cc@g-(fvL=d7Ls*`4Q%&zi0Mfu3p6fNlC*`EMnK$MV|eB*6392_Mf8YtG`R zKRgRwwoDox{xS<#O{wW!u-hi~jC=rl6X^32_kM@%#g<9+(l|3#HYS)7lNu6J;9Ogy z9oOJpcm>B}Z~or9Mx{P~{mXdoYv5()h7^=18neF^$V(f_`4>t|V^7 zQB#@R(po>|;0dyT^CzG1+S;JAzhG#qtG~6ktuBK0w_mNbM|jM2rlE)JM5e*2;CAb9 z^Nlpc*%;2k-bZ@#!<#q9^Xff&kGe*iGsfnK@$v*~b}aK?5CAWQHQ7NLgkyJ>vru0dZ5sRfV=aLTF%0{+^V6%;TWe`=8=PM1a~NvaJac20tZTDleF zYWIOf-?PG@9>83JbP?fuo0-R-+#HsJ3ul#Xm5?d7Zz!WIt=@6d z&i>TKQfh?gF7}lfVG*Z+C45SX_NL&CU(Nn%kpHnY+IX| zxCy)NU%0r!54m{EkgX^J54+R)TO&qx%M$Bf5Z6(|T_2GFt9!7vw>3nL>_`XilsY&5isDo&oGci>?;aTrU_yxi=BXvZU^t}E4a0Z^svw6AdQM5+UE z5UMRNDtSQ%&nIHF138=kn=_N9ZfyfdzzcbWIB#g)hAmV{Jl52b zHFZxQgO|S}pXpOYhA`n8g_mv^Kc(?QHNY@*J5R>9WE7Bf__8?;$FOhEC|LqX-k0fE z=&24soD&vX#m-)aLMvI~_TTy?7VV^IcBMe)?wNER_~6WaAztQ!|IpWqI?~rBqw^~? zyNxrKWSh>Q(l6HF?`Id%hhhEaG>v-`K-}kstq9SW9Aa^K9PlIlpf3iAS>cZVjfBfh zzg=TLBwT|C$Lamg0)4v#0N)-3*R#F>R$(ot-mkp3dV3eS*v->wQ|26$IO*+N>|&u3 z`X?jKmGE;?3XXd5k}Yx4Yvc;%V@|$na6x8CKRlxQD_5 z%(?Ct!5DUbUC1mN&Pd|`(oE@PAuDS>G zL$v#3V?<*CK|!2fsIaohMgC#`gI|;h8V=Ys<}tngh`s;(rX8@G7pXa=pT zZ-Mho#+_9d*>=+9bobv?%a#P%nd(y4KZ+|C<0Ywj>UAd_>~SMH=aoL4;wnlCO6Pus zMFo{L&XZxOsmB*5#bqz5A12c;#M$w;*(Yy+-dR{e4~ci-F}dC=i=(??k*e%JX8Pev zMH3f9il8&supNzz4|t^q@#EHWLq<--<@*nZTWc7 znc4TqMd^ctY3p1a3wrdk*bAhF*I&4w0pvif>S(*Xi;u>%O?-#>7pyOpo)_o01b>$R zx$;bVtPrf)$Ee^s3~XNl%FefD!B6Nr!vzN2=Qq!M4x%`Tu(*M3&6a5G(e-_tkG<4| zCEFIRph^7f80!rKI(|WQj6$XPA-{sQ+~U4U7gOC$ocUMS5wJ4ce2SSZkIgDdeKF;g zgU7$W5$io;T>h6py-6Bi+#jM%SRWP^6kt!<(crgIH|y+wdE*BR0ns={HtH$Wh)vW7 z;aR_N)olS{bN3yfGGv`Fm8zB4b6~6jg1cnn0)bHxBNr_uwW^#m8w{yD0X4 zWl#ZcyW<%aa@^F1$2U+^vh|NAv>5CnUu`c9upT6U1aJi|?1lD>O? zQ_JV*{pSjv0(wm%cfaQ@X{DezutG|bp@qlq)$8RE5%98y2>2j1c{k<$_(U}}GL!Wj zPB)PiVO~PjLHHy1aqx2VE#8cu2Pk%1ud@JrAJ_w)UuS}!P%Npz(_)^rM!E;wN42xk z8TVgw`^(%a=w5XChBzk%f*hWia9HH9AmR$%gp;^gVW`W2OlZ?l}i2^rn|_?|TsDHh6sBDK|fgU(Z!6 zfu}i`z!HH5rRJq2nZR-&&vA;J1xNa!36i79{t5{0YD-%;fu)4gN8I!e@i_8_4$K2e zgExg`26jmkG=;^GWp~)iGEoy_OLlfEOqTV8n#Ou#5kGxC6X{>Or&F%jh$* zT#*;Fiucal@qOR8X`lT&PBMYP)j6=g_?T|j&wXVLIgF8E_`VX#xuX3!Inw*QKzzv^~F)-F?J*u~}Ui zMC^%|RTjBoT-M^`BRSU~^^VWTc6?k{?m9(^FCyoNAa2Y`@hU~{TV4zVD;6j^xF>>Zf*$J^Gy{z{<&N~~ zPXQZcJt-y>QjUDe?QPn0|AXg|6|BcfMXXbRzdo9*o%Z#O_-t?yQn$lF>Pk+7qHBw4 z(-h@hG~|ZY{xnzpdrz1l#M>bO&ky|+^Z9-9SBmr}%>tslfdzessxW>_Sc5-XVwgtY z@M#Hzk|G|@VLqtC#vT(KBn^2Bx=qLc(yy@Q*|oa%fZEjHX}>}_2doO|3(%BA(n5K_ zO?c`ZvP*8vT*TIymJ=wpO>3zH@OR&UhD`vX=B&#UayE zedwz@k0i2NqH43KOqbBOwiv8d3%4=3xen*(_Sl$Ioa&Ya$nY_{Ml(_kxd9x~rd=4U zB37x)c`+=!G+n@M3^|*}oJ=C=oS`zHcNv97u!fuqPk#d8MBX1s=G+Dvtt3_Pb{U0A zkG|kolHQQ&+6bDygie=PGa?D-dJ!c%(+B+$TV|Ke0uWvD>P?@olIDz2A6@M)E6CS+ zDUPLGc2d76%ED+VQf)iW6eBEA}@T4Ah8&g$a5wegc3#UVayDG*Lz4i zlyu2Su4}*=P%vf=XPx2I*>&Ndt!Ro-PS$|y$BnYQIcKzr{rw(x$B^VjU-BLMQ#tD^ z&APK~nEyqDXzpI_L|4~m&HCoLn`AWUQw}*3m~}rp?wT4jRh8@Rs90DKNC0};;u;c_ zGc9;9n@3%~hZf+8uIMn!<$a zCg5h1#;Mf^sL(}!*X)Hy{!>Gg&tDH3xi3UnngQOMP7YEhfM^VTd@pEo}2YtJMZX&c`5@-1VS^#ZKDF^M_$wkW7J2;?1us~NItPa5|M z+6SiIy*s2o2q+{OL(kX=-YbIIP*Krvrq7diibNM=P*KbwluX);U`3fJr|)+?%ye*6 zB#0)sTs#_lB$hg}=@=lwphNM#pfDv!C5*yMMnIGXv?DbDwjd#|=NY&=FpF$loLfC9 znunp(Yb+_E9mju*-_IWXFxoL$^Vf!WhcsT6gbn*W*NS+>-wtP<9V5g3lmgOR4vL+) zWNG74>x0yVhui1)uL|8m)&18v?YYkTSNoVnJz|`TkgRsI*&V=3I<8k#2Qh7AaRKfq zUf8gSbI)zf+eBUz!J+B=E9%?CxEpQLAA)L>BqS}78ub^j`t0;Q`e-7LEFj@13o*pd zp%SQRNDyNO37PAD-5f2Q0V*+4`NqL=n0o9vWsbn?A4xYfI@2sf z^xEufsvjLeO;x~I^kG&Ov~Uq0>nhqyJ8^iFYDGgMXnKF=NEn6O?>{8fAReni=G}c->t9}NitgKgct)6n{!>A4Y3nRrj@*zwXKQ ztt(Y{82pDS6WWk1buAg4n{p%L(Mm@RGFH@3^6}h_`{!c7o=VV%ad`axzUV0xodDlh80DHWO2|Y~4om4XnF6DzcaeE` zCS#IYV9GRrS+}TXCjV%LMfa^yZ126G!bdhM;;ua%bDiGTuj`Sd=UweUoJ${oj(F%k~i9Jr;u!hQ2I_r5hbWWkn%;2=kBh6^bZ(5w6kn1_pRUx z`RnOGwh<2#r7_U2B>AHmEJT17|H?%!4IFUER=1mrHpcrTeRRmooSdYWe2K_+Mf zr3KCSAr4n|e&@5k`i9Now2E&hX*zbWqQLlR1$MA#1V8(KmzlWe&;Do_$f;I@BAM%=$lODRuTQ8GbioKKk0V1F!@1m!zWeBok>nhq1Tx- z9(!0^z)Xj!r&LhsYqhA+8_zQyq#meLa(}AarJzE9;mVSWevs~Z$g+>XzC4+&^x0ik zg-t`LD2?&Ih@nP-5PHZGRrncYO-lhGYv%OJg&~y=Wq~F*&y+QWK;+)X#6B;-etVItuLiCsW-v+LN_r^U&0Ka#dm4opMHaje>mTfVK!Iwde^({gw z2?LfFeoQco;ND{P=^@Aq9$i$hYin>YF@uV_S2Wt-dmh)ty4>)Aoe?0;cByg%WH)9- ztA!faF7^9o3?$ALYaSac^qWMlBM`j`v!Y)p+?+zcP_Nl?9UzP&#vJN@VLlzF$>UsV z0um1O4bkWasjI|)GLKehvd7o=#|NPTegbM=&}k?}gthS6G4Xg%P~DtSYy-2TmKt0qm-Zq}RmgixbLeqX990@&^lpk_p=9Zx5Cs`zs)%1g0WyV4cQf)$A( zzGE-4LPzw$G02@oFh;8FSw+sO(~B7s2Aoybc#{q}hRdmyhKJ$oS$~~XV-+zbD2oUV z(jeq~kMA5Mw>3x|LD1(bTBFxE6cvu9;VjY&d85~W{NRfR!OvAxrjC1y+vbXBiqEdC#^;t(&Fw>fgzIWe{fQcI8Oj>T@*pKg@da z9&M2vbg`N{W~D#HxtE{i&@U4=YYO3wjYHe8ElwYzV;(;fBV$#z>k3=i7RoIaIIX<+ z!2hd3MTw;To~AS5=I4WSv4H&@as%_=2AqrUzto0?UVX*6nB=zl4)fQz zylTmyT8}75YD#lTdbo}osMy=O@bqTuekCd?&z^u^*nx}li?p;`grmah(>&2O{I1% zstXn!`sAo+VKt9(=rI$Y?NQUvmE^xea;s?}OjP={;Sx^i2bb)&7k%-2?XYCMElBrFwTH)iuOyC$8JIFbfO zK#!9n4p99$Mojg=5Cz&{fr5P{#bViqr}>JrL}Ja!arta)q6RoPBo3FY@&Bka#>GWM zf>Tr=DSM^xDkCkZPFyX*dzDUfZ}Ggw_*LxruHOI!AUl#j*va;i)+q!F1b=(hGD%KG zn(ow?T@A044E=iw|7Y!l28JeO_2^Sly55Qf7sC=?*HeTf5Mqg=Y(pdbGkbIEW~J8cn@Z z+ePH&sXjWA6Vh1Y6!r}L+&~9=zV*b^KT%e8Uu)>95AJT42kR7b?uP>7g`KKIPJ@Tt z;fU}p{p=8qrZS-0SumeGi6C^;Oe+!ZDjkq$KacpL7~)<8^ZW>j#}`+{!~ca7f*~A1 zJIzZ=Nx-I|C-Mk$QL}H9;#Z@}Yf30zOXVAsbC$Lj7|mLPnve{s`RL$Zx=m z8KvtLC1fX6R|+EL%D66ySl(A6mhwi*2K}k4$Q+!OIA9?Iimjbm4O`;;EUSO;I7E4U ze;C-5ePREffCyI9(9Fj>-AfZDS$A*&@L%pPxD{vVg*=n71KyVfa+c3Wr%zcC#{OMFZ65fus^<7n+EVNRY#D@g(6UL013KnIlzWicGMBvls_ZSLG(%Td zTzrqO3Ib?MBZFRufT3(F8Y%sj5lFL^w~24iOa#)j0OwlNwrW?{D-Zz3|B4*b*@(q! zL-x(9ODANS+W+A?{}oLYdXJ)kjMOJi;O1TW*$6{)@*VK|R_otc#@SjHnh?hNg7+vz z)KKOAUdexIL7zY`e++&FBlWPppDkS7%fr~KSanI=)Oq-BTQd4Ik9Ya94Fm%bU-5$h z6QzhN0;~;Vmgld(`L4cN-e+QSpOs)4OA!4K^ONh5bnBBrpB}Df1lzq+y- z3UyS!Phu1WRAKZY4YHjLzb!Ef>jg&p=0y;LYIQo@f$zo|V6a1_(1;dDffS1=aeXAH{Y5J0k;%0`Og*wkZ{gAYw zi8Q_jZ%f1Xo`WvHtfJn>~F2rlP1pK8TgIN26QvfZva9Cp33RmG& z6-0K&lK=DaJx*7t+M_PNHPzYoP)qVWiQ7_dggtzz(^A){q0MOSQummdz0`B*VG*BV z_uSzh>)bawPc7*(pJ#IVW0pxi0hRk(o}W}~h?KgfvbH-JfdeP(DeHrrrEBqP0O!(% zucsN!qY7GvCYj}(OAf3#Gm9Z1FWrzh&a|$>I3usO*eym&jFA_59d+(N+%SX%8c2-# z4^<$7m8ew2O^GSNzlvLxXl8kb8XR7dnW+xbf64zYCDJm)hx z{C%IH2)kB6`6_JdQsex^SmMMEK!*0<0Q5)(<5;HiJe6w`Gs+r+Izx3SwWn6BB3x<0 z+uGoF{}hB+ItgiK+4~7jf;j0NR#Z<1iCPPBb);4OZ@YQnN{P1i2xG}|N7gOvtlZ-&?L3^dbe0n(XLz-d#-l)1|E z#PO9MP;JI#r@1_Gw1bj_?=s2st6}6=HntppEk~(p_vqbwCS>|^y@q{dnPM;LJ;ufe z5G(6-rp%Y+p3>4i(MVMC9}nHfzf%pMsth1+0UQeON(!nH0|cu~nz`0fdSLm>E*q-m z*WQYjgGVbx$5&-srBEh?0OkJ5JfmOIy+GsMg{4AOKzfvsejG#Day_m8VG zGdi67VSK7ZoEP=ygnAl8(V#62Fw=3tR0l%tF5Wpm>90P5NI@IvZBc>ieaa963 z@-NIZHoz$p z2LB|pDTya(i=frxq5lQ4JK$u_8PKipK7eBxf|OW$%9z601j=;**G_rh?Jb+AX{t|W z`duVDDap!%WjAOl0+azctkOYEb}OpmK6cDSE)p>-O_Xr33+=}TX+BH!h7luyEFZ1J z)EKfyFMYm^ukYyFfRw#S?E!ZO5{)WnZvbF~qS1`L$ATiB!MS}H?C1}A2$aXFegq|@2ZJ%U22(kzpAX@-MS)T6euS5adc{p?m zWCsk<-9i%*4ctodm#AVBc=%UA4B5d|3OFNNFqm6E4j25C1ycwKoD3EdMEbAjS8SUU z$9fo!ONe%k14n=DBu`U0?y9#-;#hPQ)D#KvAYGi^WhC>E8k!>p50rhgDB@U#KHA;K ze?v_n8TFm&fV5J4;}sk6ddthd2a+NeF8tlyG{ksSyyU^IV-af57U+9xq>vV*$!-MZ zVCv_+5%_mo{`CXfJ_x3+{0*VgJlIyGQF_?K11U-t6WtkgBDFQ{wk+^LzVs=+v3B_iCV4s+K0Fze<%2;u}YiJoUI=*yxBRzh;1DP@o# zLR7pM979wGuHWR0vCie+s7#{c5rcGLq;3tW9h(S6^Rj&bjx)5ZM15-@YX4)!RBOj* z0K8dnjO)O7Vw>u49|cy*#O`|Z2)Rz?B+ZY2&4PUqcz1f{OUnX?jLcN2RovP$G<|+X z9Ch=qbk?@QK@sSB))Ghb{Y5-t`qVu28Op^*wX==xGVrwjp*^Tt|If%dIM{Ys=@AkG`%6Ijf1! zYQ~F~Bb|Mjl1|<+UHxqPpJ5a-#sz4r3+T1kpT#1Nf#r~N@6MDSIw$-i*}EJ%GqnX23O_?f<69(8B0~v zuUT{Ipg;0aH6*8`L-WfuX2d$FJA-c|3$QkC5T@YkMQv8Ttk75gGU!*{o3v|>2Ow&d zFQk<9SNr+XSaRe7ny9~~!?HN50EDX)EP_|q4r(EOaG~c~%f`T;Nlq*gIKv9wZpnmC|EQu0YI2b$ zP;QfQb>BvSYc5S5*?gR93_|71 zz#7aij`-UM^4&nc2&|ZTX|Z4-WcEl=sQxwM;X7~IZ!@@v^tE2s@(^N5CSixBnVtD zTPqIN68swC&Q6o)CYbNZ0-QY)01#hrZvz8EoD^Mi`A66AVPd+}xYr3Z#2^t-_j0xd z7wgvSQS%R7RV1G`f@5Dh&U*EoH!0Y94hvFTjyw*$Lh_|U%CY@VtYN}621nhCQCo>H=U^qd=NYg9HU4ImJi|o#$1Oh~z zJ20n1GU$m5QjS&{8zjX*GAyGJba-@Wn+8RyJ^1igHHdQ9c=E`?C}pl-xAtcBrEvtL z;ru~6|BD@sf6<-t1PEYO#6Ri1;hn&%pWkV8(8j=8V68kXFee-~H&eNr#8&u2jzk~~ zlWI}yaYpdSJnvmkzDnZO&e*?Lf0E0yyxeGG2|Dh_b=Y%_EzNsEkY7i=NMnMd6v9D4 zxpz#Kopr(?oXn|`4%DzyW^RJ%bcwC}RB+6n8oGUOB;%!83D_vDo)WQBS>*`fGLfVS zWLG7&dHMLs&fRFoyF>KL+GkSqAN06_knt+bPzhRSiK!{Thou$?4|v|D7f`1aID6F2 z_2t>-wQFl{q2Y z@xP$7IkwTN|Loj^xSTu!e06#CJFLn=Y^Dq>ncNQ;}Y>J4Vx zH{$OI%3om^EBbg{qw>FpTxx6PS*<6HEKR|asPT~5fM{X%S&HiV`3oE5x`Pm}n+(fw z%wri+seK~NWxoAnBH!ea%jXbMQ--9wRw1AbPW&bv+}Dr-DQNspC|lxVZS|+U=tkDZ zd~+vW>(3EUENyO`J=A4y#Ww0qX+tKi){6eNx|@TFfw+>Gk=0~bwVVz8aRIdTM2)Wo z=68x6KqKkAtBAxbEsHYlkzN<6#eU}a6pa40f6TZ5^@T<O zhT4Z?cB@Wh(!i9|$n+YKLCNGgvwa`^h`UOjJVVXE4b~ac$S56_026E|tGod^6zUPiKjR)I{utNk^?!`p(frT}=F3Oc&DEi!`SqZT&VW2F*5sgD*h@F3mUaqN zH)xw0WvW1202#UJun=!mg8@9);)!f`FGv0CQMqZ^Dc5l-xXews$yu>^01MEn?cH*6 z+*E`(X{{^W=(w+LmW3CqbA9ccWLsBmHO;;lb;~Rmbz|7U#d=p0kTfl(Qmz$Wj_ZjH zGW5C6aBED#<@BLxYMXW6g|gP`xR7#wy&T|7JKldMwr7|cdWPQC${d;- zq?~aNEE-Im7v)dX4Mj9b+XFne}a&$JN}xG36bNX3jY z$6K5IXC!$y?8z|(#v(!l<0W{51Y54B^(>ZbZ_~>wNd1nV$=>bs&_dbxD*u*l{l+(R zG41{{+c8-J(lW2X)+rqn5eT!nLpR-#7AQPNWgKnI6;nxZKPANhM!e+sQ}Os){>^IV z#MuUx>`?pd8Ir+#uXyx~d?#4WX@}AdtIWE*Q4Ot#I7};@4*bbG1y~dV@ZA3Z+oAEO9`@e&=X-V_u;>iVa zOkVgK^prGVtTNoW(iXy{9!ejs41T(DZ5d7a8Y=A`$wjFEUEl6JopSgLNLU^9&ENAU zs#PWCUjMj_eY8#WvLnm8rC?|s`${Bxx;2As-gYrR)4K9MkBX7Cu#G=+TSNHpadf`x zf4weZuik0vam(y<`Hbl0Enq_`=ws4(rZP&4_)+*)Odr-M7C+k)-dVS;ADf>xl{)bd z$86xn(53Y1s9pMy)*LBZp3xqK_KHFz3ItpRI-29?^&$zw%S$VI@S}+(r?CnNh>X6K zZf=X=xx>E&jtfiS1ukJ1lsoDAZHig3dW9-W=T*eshv69?RGZ!&0aJ1}X~1;o zsBNd=ux1bduK$HIXm7;gb|Cw%sGma0HhEAQz|}`_MZqJ1Il|G^3lS6(Job(PcfSIN z!qO%W_$ge)XzEJAbLnPDRRL<58t z0zLP-bq#@WO5A=N6Aa;+`<9tdE#jiP*Do;yrfU_MQl&wPT3?YF-nx)EM}TNg;E?tN zNtkhz_-Rv--21&h!-0uYCV%Tc?xV6t&r{=$(r%)oVz~d1hO1U{S}~Wtsjs`ky8xMj z@a{pMAgf^`Js5ghC@YKi`w`tGqM2>4tD4!ZUO6 zGk0Y!3%921toDAR|w5>M$?(gY7I_q(gziJ ziulLpTwP+vh#^)4y7^ za#dz!Mn*;k_Wr%(yy3KlMV#_f@)sB(*7v*+mKDR+oOKP|hREY8)_L{X5&)#P5RP8b zX7hra4e5$am$X>jV74l=dcDflZ{md0>#-_N5h*OwvA+R4T2Da0fWRpzmxYSJK#G>_ z14Rsfh+G`V4+J2ik{0|$)+J0!AOHuo79uI~$h2!+V+hPZ0z*9?TcuoJrPvYV>&^a0 zaGfGZL=9b_HFMzvxH|ZNq!OCr(u2Ehqa-aHYnD4JF(cY(!yrQr8F>GDGH{^uc6SPe z!4LNHad!>RpFsQy=bcVM z;8;;*U;dSYsIfjcTIIo?3v;NkC4zX`z4m0o>H>%|g+$c4m>$yY%&f^wT))3u9m-tR zPIV-d`5@=zaOw6iUa!|_<~;gj_B*r*OEhDAA(IuM1ebk7$2}inXMsm8!XPGjQ6&xvJ$v0-jQ_1~+aagnSPi2K=r}A33=eF~lD?_WO zm}$vr3-B^Nf>$d@Hr-)GHy301?u0r(QUZ2>m4JG&V~BHBJw@lC`3e@4gp2;nqp1>C zw9vY0YMkHx`7`u>dVwap1*E=RDhHdxIj>Vc`K!QSa4LB8cvxggWZ?GhG4HRiKi})B z&#l7bEJ!UaX;OnS^g&9ua?>p)~*#yAK zg&$=U-wAK-S@C-O2ZjJa!G#(j(4#%7%Xu0VW}KVwcYF`qFXb`dlzKBed-l?%AtM>5 zOaT=qZ8sVdsg6qTDL31OQ-R-w61XqGs|%V*_GL3i5A_?sdBrY*Z{Myr-3AFXM@Dns za-twH=cEjEFu6VHJhcb4r-aRm@gIP$HV#CFD|?$k5c!vtaJbdJS{_sdkLy^>AkFgp zgKUlfZ!{R2CFl$1%|PGe6-kjoc3O3njeN{3M+#(jVQDnjjYktINviQ%w!e)Cuc-AmZKlaHP`f$(Mej=DJh2}oo%sKV2mk`zn?Ez1D%%-!^xji?Xu&@`q>bUQQs0b6o#TZmX zTo_6Mf$JIPEm2(eo@o9{k|=)d$flhqWwY5h>e~&K-F0Jy5IMM?L_`4Va}y5~TF$;? zEN%onYw(6Pu9C&%mVfQjfbOP!NFa6XbwZ9;>-9L@mR8pvhI6zt-iO+O$*8mYlmh8V zRqFVHERyAV(Q?xhQxoH-4bEt$D$EN5e50l(5*)LAnr5?CAx5~9A;Z0j3B7zJth7yp z$Dk0sKJpyB`6%Kz9&G?cwv?=8bZNevU?>9P7B63yvxVQ|>W(ZPXqNq8X{%hjzIXKu=c|sh|MfpIY_w=VIN=4(cyK+?7Qu1ZRsU9J zaLD*%>iu@r<-K=!FpB0`LVc?{4#`4}JjPvQzm>@SM}Iwq$fvMgG&+zTGgSX4g6^Y| zn!$2qx;xc&2qtyhbqE!%d>Kc5T@#(sW`L|1PZOT_>))K=dZTI`vMPj=G=&jT4{#aITVL z%t{vF-8ke>7_1-@`fX7m72xkFT$CVbpYK(XYGE=x_4&0zM~A;HP``_Vx+aP;$)_%Z zbM$SNjxCjr)quK+f?Q(g%>UyGERzXj$6#;*AQ8|D=Z`S*3exGxpQYw=&%9^BaOF7R**bEN8wK$REx+No`+=>@RmA%YtLIkjp^WSCEdW0l{z)@C!d# zXuzpDv|OiBNZlOhBt39siT|`hvd;=nsG* z_O^IlEZeT*rS6i`*bD>vhuD**G)#gI;Jy6r`7o1s`6&OLwgA}+sVJ=(&Y(#H?DPI{ zmDlOfN_6<0*LxEyNtJXC*ikQ>5hKo7KzYt{-!X(OY0l^J|D_9k^#%6=fotS!#rS*P zIgmzJmx$*I>sk#7!IsX=LszCCD6S$^eBK6WW+S@gnc3C&k}16sBmWU@gu_dRdcxfq z|I%*I8+S^R8=mQ)6Xk$JJLw_0<4!|gu2+(MB)wzDs8`$-pCPO3j92?0);^;(((`T`W9|@DZ2ie&heX zS4QaniG1e!6Op{>PNtEzqVUBhKS%6=^leopVSM}08(HwknZypxE7M=;(DF(WG*FS~ zaL?LQz9E)1`9L$KS@r-t#C?tSUJCe%z7!iHaR`B#CP1*25a*v;tHPH!i5j0mD_!iKw&qcD!wU5O4aTIpM z6o^9h(03|IWy>ti{EJcrYod@k8G}rPDo;)HWcdc-E9;ddt2sgKWzUm2{D%_3~rs zM(S9+6jQq0gfq<}7j_9aD@`^J77GAqIKfd1Z8lkU%dqze{}uq!r|hU#yZt)P%_rk z@C#*`CY&FzEn6&UAX%+^?uzw>XZ5sGjem}@=7*WYRLWI*_fdBLqJt5j83tg3L$(=K zD-#F_!SjBkp(Wu|oSy*V$L0!z=F!i`>`osf85vF&pP&1xVwgVv9*lJ|9;o{O8!~r?hMrfq%ozV@??5;R(R$MDJ<2J+C_RYxiO$#X`5;`B{ z_Mx2q@}xWMCup6;>PLFrJJqGmY6T_~pl}Y0H(JsCwwQJvM3eJ71lxi7T>FGf7TjZH zJbf7xOdB?&zRe(dg;&W$rZ?>PZZE2QO4!HX#tK5pXw#F8V5YnqJ%B#wA0`ivF+Y!i zWhsc2CY0)1>Znv$wfi0}n@xP%iCNnU1$#2s(0U28GTgb_9!iO<9Z_Q3d0d!JD*NV< z^Fuk+IV^llO#V@3aRhNsa8_M#+Gx6x`EOO-d^SR}Ml}{)85kB*IyY84x%swqYb!J* z4aG;6q8dNA94#_PYx>?qFjGtNH5&KEhJ+hu_MHpP-Hcz^7y zLlPrT?}SZ42h1-|={OtnAn?{)qE>w|7?yJcOdVN!A;t))fces3&AZILG?^V+XY?9A>2S&;7r!YP3npNor@4g zHJdy{wqTuX1Grw^#P}lTCZNLR6L)On5dX@``UfRynt{er#Q zr)s99ZXG+O42o}@t`dMg2;Pf8bIBEX_5bqg?tj@9pL~aU_0l^81!sxpxRs+}ghWnI zIDqg>|1)}?xl&_`mN@op? zTzPhL1?*qCzBWZ6jJILqG1J}teiDxjuCdc(492A`1Ge{NHP#cYa<1JmtuEE|J=g&| zpjBx<+;H#a%*Z{LGyfU#y{Cio!S+XPdMhP>Tyd{|G8I$Gt@3H8%Zub5iJcT`60&NV zRn~9Eqm#rfUklnM{rylTMaRW>vKbs0JQn{t^Z!Dw__X;%|z$3%6CzzkdQb$BQV& z0i#OIoRAw9=UY((T?QM71%kd)48`rN_r_i&DHT1koMDx^P|F3Sv+5c(i0O+o(85)R zL*Fm6fB)SL&e|fYwK3l~&>@&02P?#k*EKBoEcABP&`#LykaE_YPH)6!X>e>(aM~FuVRSr3mGZ7N^_Mk^W_tT0@RoHEO#OBK;hBBV=-9qn#c^2lwv>&4D!VT zq|BJZ_qh10As{QRk>h4i1r(!~%Kwj|qIYt1@eeg|j|Ntz-lmSVv?5%Yz8jgf8sdG) zHcnfr?6P5EU0SN8iMC;iX7!nZS7X{^FUr^mG4*?bWky%(jC9QS@&mlyh2?#}j|%uW zD{`hbu^0o4VNinxiG?6LK(q|fG-91ECcd05Ci=I0A*%}JkL1l1M;rBzqWwCiX|X7N z%Y_{r9P4TL#Mv>r9TRXZ+Futj#<88Po2};sjI+%h9=)sh@PoNbX@Ju@9xfQZBn&{t zODB~5;&s_&^FO<#<^_OMiDLo9J5yiO^P3|;XyZrcjU~Bi7Bu_dI(Nf~0|SFKpA1=+ z5-Dr#{DF|qjtb3n4`jh$Eo8HRt1&Gds^2KL8l4;Iw-TaljFwND$keTp*mqm9arm64 z3terAN~GTKrFqG}S6MG2(@4x7QE9AD;+~=6-b%CD_B46=5CE(Wl&P;Cb8nc)cHd8t z@!8EBy`QOS&qRNL+W(QHW6X{dMuey!RrKc0PhWuzZ#P|5jCHdyrD7G2Rfjcl%_OhK zV3s+YwkR!!k9|WH*Thw@si)PHbo!%18kWJ0@Ka)fd||AWWRoRuw7eAM;P;-qqUe!e zzjgxQk)N7pNIb3mz25Q{}}=idpflPIp`a8-Pwh zV8KbEl`Th+UdNVpGjTX(-^7>yNP&Z~4q1P<7qqK zAZ@8Qa%{y|J$gVZuzzGR1C1h;U%>&F9~|T6aSMAR^MD*$Zn#I&nfoTm8$W+Qk#uIg zepkJr7Qs7%E|3pG)hnbl#E^nNCEm_9C(hj{A$x17OOdUl$^ZkDG`}Jc>fC6=#EGjf zVPG;f#tit=9Fqlaa>Uk`b7NnmD@yCE|1RsEz&#z1FX86Mc)-?M(PvZD*XX4Hms=<{ zVa@N|Nzbb@=L5oab9U{}sKIaPyPYzd?1z8$Ea{~mP){fEqMEcTz!3Y($Ng%@ zfI<_`8$Z@|hTrQ_FM9Z7^fU~ol#1jh=rog3VSkfQ4fL3h@>L6!$ znw~aW4vPtVm3C4Ni%%oRk%(vUPO!iW%cwPYUFVPvip;dAmZ$e3DB|nwkG|yX`yNz- zoqH`Pkj78}Yl4o6kk)(FM|;-i@_Q1ZoL$LI&b{X;t+WD`0)RM9FP2d++R?3danIdQ zuJ+V+0WZ4EKGCBYi#1z-Em_2XcDOu+=fG%j{HLG|GxQ;JD+UpH$^zCZSNFy&S}WR~ z_;r^+5|V%|xaQPd=3ZmP!w$)s2`Yx8NyMlpm*BybNbHX{`?;X`VxTdPDT7DY1hzG*NrN~Wg^k;v#)8=Ew3Mo5L^|aJCy(*MI?he_d1Ma3@>x>TI$NJ z@s0Cjz|vasYgI)~)zzAvQAy(Uo=-Z4zNK1i&| zndEpAv&h0-D0|s%1Q6{%D~pukK{6+{lOK!ERRqVp4N$U9PF1of9tkep$*;0*HR@Pa z%~bn?f+Fi^HO{cSK!t)MQn0o$s+bGKluii(XFj>c%Z<>|A{VUr--EBQx+uz0ZD!K+ zHc{T^GNS`Ym-GOioV2|T`w0QD%WHG503-C@7vdV5dmMSE^eWIGrCEr4#-%&7jmU6yy1Rj~0{{>aWCIpHY9kB_E*0>f`~caKh4 zH3tH*naOv@L(fphkCXQ9um?9?+rqu`O@!a2Wd(h&pht)C?Xl-#$KtfJUjv??ykCSK zF7F8+bxr*5ves4t&upvDqSUz-fL36ITpE`vZy+!H z(Rl;-Ud$8xjJZN>e?6^>sgaL#f38cAZZ_~0!uo4hxk)9a!*KRvF{BFG6eyLhIA(K@ zWAX5Nhoa*AqQwu+Dncl!P+qs<+?6-<@vX|*E640vQl?&Tu|veZ`mYUiYlR6=!_DWN z>ZnP=?O)*d0ceOxK@H>m8?A{sUzxpWzgUn-qblbkYAL3)&V5@M#fbTVWmzSCt5&=~ zmFKZtlS}W?)otx}q}5GWL7)02c*KUiiWp`MsT>lsXnOjvJy=zEVczS_18<8(Sd*_Y z{A#HazJl`cyWf;hS#s$QGUXCrQyE7u*A;dNnrZr(Csw=6uaQ5LmaWa$Cx@hv*u3*> z`eN76`zJOTr#6q?qjF$qvtj6+lhpsnvl*?KHdmRfAzNnvN3u}V`+7`|__l06d9RJ} ziKot~tes5)u(xnsSJ(EiUcIVto1_-xdGFWTcIE@Go#(M9Y#(`Hveg9SC7pInJD-}o zGCeY9!)qguD!_W!-Ye4AbVpjo8JT-Vy#*TvjHGzI{=xC}Kh`)`f(zy{yqR_DYk zJKO^cfJrmoU0CoDXQ1HB)w1pSpb)aI*!H4H3g%z`<5Wmi2xCcC2)pOW%yn^wv$Z=| zEQn571oG&?trz~!!5|;j5LH*tah!$Fm59K%x`B1m@GmM(8;5ng39pD>QwDKyf3?&0 zc*mf52>?1Mx&dL4<2}O88r=79aAn3*fw|6Rbii-k#)1zYf)KBC-(X!DPC=rRD!OM- zqs5)VaKbD*>6!N84-i|F^`w7co#mCRVtO3bX6v0Vy^Tc>0tv)s>->KnZ?mAVis)PS zeD{7{!w+zOV7K1!{aeU*zqYh9T_=o1j*S8A%(f)5_=f+(7PxE~h1)m)A}{M>UB!D9Ztjt~JBWJxOus7_gJNPrp|>M zT#tscpIpE~s`vC^&CC?!&QHD61cp(S7D9{BOD)!BF$x+(7x!9}o|g`y61eQn%A`Kq z`}*U2{@iT0akpIkFh*20Z>1!(hIs-~`sTZ-_w+8?2eT49p>?h2f*4XuAI9lt1gAbp zz3&>XsTH=;9OM_YX@bv&cBG9?HLjQ66V#6I?C}B~e9C*j+#c}1Qq^=23nmePKKxN~ za&rpoi2oMZ-&GX^+psd++}~4qhl{-wtL&AE4Y_kKJ}NfwK~l%LPiR~P`opP+;GEkk zj5b0Xa9}a^o~QUvw^c6&b&`ZTZ!nEfvNZ^3$Ra8vM@&>~QAHf&Y*?ZpuO4kLH$K{v zbXoK!s}rm)lO`;ydRI#RZ5uXedVKlE7HFU5R2qYpMph4d0?eIeZ-R;qNIL!kVFRo7 z@P=e%WWBI51VVfkmaaG!<5+qA6yyjRCsX*tQYC%vE(5Z$y{zVzI8GGoL=u!HeSs?m z_|8AeJA6!5j_u!`62$lCE~kEXZuXb%VhoUB>9!#6p z%c3TdvsZxN+v)YK?`6~$P*$$`gIa52LQ&@;nJaUO`~7gyi|}{*Olte{qIECSwTfzU?q~5VCm2# zx+IZ89+Kbe1hc6beh%9k0)hwkV@C`X6q)0SrXovgfYSq1F?+e9jp+g81bM6!cz~_sq&ly=_jI zl&H-x-^YszVK@G-i->^thdil?vV*-m!sG@~We$lDyzZaj$Xk=JPH0LA# z!wF#XU-#Q%+Tf_dA!*agl3me5OpDjOI_lo|PoUVOI6JcobXOrnN4Xu>F=wlISvgaD z%@PolXzWYPO9)0#p2oe}0UVbc|DkJrhJwFH&uHmjAYpMSAC?DGEf@di8Ett>+Z`S9 z=QLW~+*?VZ1b*@NFv>5a=dX*!sXW7!%LS|rRd-66+EMGBl%h)!Z*6D$bIIwnkDGR} zNfhStD7aLNV~C)ejVs!~MwYD1Za}iwXf#8XzTbt#{rg%a)KK9M9Tlznc#j-)TzVAX zMD;~hfKcHUN&baE@w@be3#)fNvXXg6!s=_Jf%X}VyyOWt6OX3~a!Ye`MP<$&90UM< zfyt%W+n2>%IAq_xCeY-6iI~}|l!3nzfSVF7Qu9cItYjF_7YG7!(+wGsUm@pLN7t9R zOQ4W9hWEKy47|-veWgyGdmtGjs=m)i(+2#4p@^m7wQ6BEx({rsVPy9~zaSZEMVS>)aN>yH z_jP?Me3g>7OtanG zrC6zP=EZ0o<-w`Z;yKf}j&@XKXmiH3;;2qeOX$in@K4tA8!FvE?I|z1XqsIkM&`S? z{wp8zd9f}6lB_71Ix>LlZ1`nm8IOn`nro+R{F^VYM9&+3NiaFP^UkuY!cy;L>&QIj za@jx*3POF(xm1iLAsvAS<1{@r+G-EDCYc~9#%0j!B7gO%HKJKV4vV$MndWqE3oRpA z;~HfGVl5*}-*WnhOj1o@R=o-K%K%m!XIj0hU-^A7LkZ|04jh0;lumw=k9hPoLet;O zPSXAGTtz&~3wk7l|84QVR=xF6W#v&o)5tOvOJiAo6h@x^?SYi_z(tEWeVSaIj})3d z4}J(+hgG;uquO^$@n0tQ&N7Q<-i4Q*kr7k2cv|`CtBLCGkc{9GDYjf7LHveXyaJS& z&k8__oOB#f9m();Jn~GE90lEz`&y$gS*S2ppjJx5+#iIQwHSmna<k zkSkn<34yi_Hec~&k8CQ8M%ZU2mJoGRtjz%N`>?yitpMCIPakWsDsE^rDl*4ir2Xw$ zCF3%n7DTI%FJXeaAn`H(K5TM_hQcaQp#*6VNCxPx7Xq@NQjVwXG(}Oln_z{mko`{U zI^reF=}U;l_M!6a;US^+#8#<~K&Kw4ILr0i~uecU`N0o znRqA;xGPlIfNv;@5J~hAV9vn*w1^0Rp&*Kt75d-(q!ZbAQ_4bR=ycHB!J!iHcVG8- za!^hm!=bvyK%48EfYckuV4g)*PcO4zt79AHIAn|LRf48byY2K(4C=*bu#Z6hlxx}w zYLSo2vJgD~(We}j?X3m~AhsE(w`w$PlnMoAfIym)?05yC@Rt4Y81Wj98MPaAxsUMXE)3%M9u3__2&yas zoYjBTFj8_3igZ6QF9Mwm>uXo9XX@WG-NyT}BIg$>NoxO3E{IpGhsHfG=9O`noXM z?e#!qO()HgY9~oL6(=$D9Mne5FMoyQAtaod|0KRFLK4CBuh3Ou?yf{o0=FXk2u-Hk zcC7$Nl@;dS*HD0G(;@MGC4b@hj`%L-Em9fo{(!X5>-B!|6&m^^a{=RW(}jy0_AyMvDyS}-)OK3gC5{}feG?Wr5P_ZIYKyM`UP4Oii-ivcWTjgq5J*ho+Z~^HsLYL}mvizT!5fz2+8LE} zSKG%HyaRXsL=|Mlng*9JiXdEZFkKY3(7#8=yG=E>VgTcJ{GkyQJ1ZH&jwwjBS0_^3 z{n6^6AOHu92$aqzFR@>ZeL zMWiqq+;Q*q8M0Y$&6&6R*a#ffjWLnr`6TF$<+@(lVzu|#(96TO&6;MEre3cEP&orT z9fIs{vj~%DGB+tW0>6{CAz2;*vI!gsNh0dHZ%~lM7>HtZ|Bt}81+aJHGAO1wPgJ4w zI`42{P5<_syDwzABszWf%6WL}Dbu*cPUP*TNRXMF%?@nwjaUC@YAVNr)}f8%chUhz z2e!5nMgC)+O8Yq1bvd+cd5^<46#x*+am^fJ-qBX*-7(aL<)WZ$~|{QZoWHq!-* z493(x0I~mqFwzst^0t3)P?GC@9Z5SaJTa?R^Fh1!{jNL-F0K#w zoTh$l`^B-k=;j7fOK8tYE&RY`HwFbE4q($nDePb40!fl4m0ScFB`5z$(4cR2B?E0| zHwjAAC1SEEAw$QZN}p2{4haok9e)%1lF-ry@0>tWtw}3t&5o zSE&FeqnOaT4Eptf!xMGQhBZyNYwtsZ(7(cA3gmhu)mQVEs=C5bWwwkiAnGO*!VE!} z;kW&VH!pke&!43Y1t$5;Jv4b)72>=`%Z~Ni9am7~jBjr>KJYjD4Cjv9z0?-7R$RI3 zWAn+OniT4k2m|3cPev^R-{!SP9nRqy(hJJ?s zm}K*LK+)e|yEDc}VL!ImJL>5~Qh-jcu%^a*X|BQ-w5~7bcSy5D_GGemm$WASp~HL9 zwt-=~ENf)43Bl#x5^BmwilQ&xdng{nw&z0wRr>8KLZv1^-|sKdohw2BS^`3xVG>JgmA|wHqHC{>Y9N~-#SIWYOTzr$0TAWU=0%9sOX2Yocx>Tdw!7cX@h76j|L(xT|zo=`p z=5~5wBe#P92vJucECqi`H!Yx+h{7m{CoTp6Q|3TyMb&hB!GTh3R+^N)RV zO95q2zBk)JbuzoU{`4B9XmO7nb$Myj;72u2{@?z(bVrz%Jre-BRSex#AGMs!a&Lo# z?$-vH%v+;Erzm%B&|gottV48^I?Z_=HPd^Z)mPoLEYiF>KA2sPZ|OEV?F^jD{^K<;*8)`v$V7+%`sWh zvcXH(=YxmFeTj$8eJMY-Ck}ic$kq;(*See5SOWfi`*%Sk$75H0(F$YFuaH-BkUCQk z1Daoo0(@dS9L%$^NW+VF9MeUIjFre_>c~l zFHOj9-Mr0{Rj9a=m(4t6f^mXqjZayLGhAKUg3)N`egJT=358z;3Khq z$_N{Qzq4GDrfd|Q`89q4k?{KnQ2==3@*;=HATA)C%@Bu6J>(wb_iaDYN=uPh+`W1O z-+(yx9SpMSwJ-qT z_HkM}*LRN1jz1s(KQ8D5fJ3qE!a^DlgD>>%DL6^qw>xR(YrZEnt*_J}Az)#VE4IQN z&R3ShD#Ka=CVK^kUd2vmJ`E_k2kgRTWBc{@U1rXgvOTTw z+1XQTi)jYbMJ$_8NE%B}S#mQfJE(LI$0=s*hU>nrA~|;= zt`R6oxDfVo{*0V$WyG?Uv`Q`{GIqxq9 zrviKvN_{BLrPaT*p|vIq!}bCLcCcp1TN;IcAh|8INe!CBSDyb#RIZU#ts(MTxIZ)f zl$^Z(2i(HDL8@j$`t?J+|6idR$p~84HbNdp9;Y%`n#`tLC?M$KVFV00ak1Ya37tb6 zeUYP_Dmifj$THe-<)?hNSJ3Xe`^_$RHq2Bso@MBdnzYTH>ixVCeDg4%_b*_(Ym=I| zwfDQ8TS&r0s=*tqv-+!0zK_fUU zTl;OPBoG$cDp*Gf#RL!mUO0jt({rfvP)GMmw05GAD-?czmt05+p`5H5aAQ#mg=CMw zMxpN-W=&bXJghZ5b;+96r8Pyi=`7Y^%14= z1i2&of??4)NAp*caVVV!IgT-b$1q{ofQaFRG7n>oxbt#Z;r@X>hg&Bxfr$76f#8b< z|C^h0Aakh*IFIq5hW}|z60K=`jwi?@Y^A@!A4engRlA1Jp(qs_{Fu%&qeTnwY38mF z!~|sD`hc5$HV+X5c%-((?qXB~D+JCH2Ql$6dVM}9b_@O*c`yKHHxaV;@1V!4uQKAlZU4{F^`zkh;&e-AH$pNb!8$~e^cw_^eW=yyJVi;oBKGcq=D@(N66$h)u? zAsNO)hM?+G0(FEeDz~h7mw0IIu#ET@M`Y&}Y-n!MXlQOih$QEdqCb6;2NOx}P-Rw+2u?#}`ptH|X(f^)2tPs>5^{gQ^CIXyvJ&}NA*J&PJ4DvtcN_-&#Z=jwY`LJO-16n;5< zMKE_WnGH?@={@&GOn%MzNI2w4gX%teve?cS)sR(y9(SfQ8^~7T#+h(#na`T{4R#gS z0`w9i?Ss{dIt;jYlGNN=6$PBHh10y}pNh|hpi?WqW+gOOC-L0+#- z^DEGRlWdKM1Bt$FCMh|`cxPgfiYqXza%`BmGhL50M?UK|wSuPYJ*m)modSYD4TcJ2 z@^>iwjyoj(skTR>Ae-=Ca&*lVqXhJiMw=mvp0WJ$MHc)l^7Qwe=eDcLw9V?COk@-O zInq_cZ8AgJD97zd_`8w$O&=nPwOs3E!GzC%rw)w>UgUF2E#>_kVdom4p@PxC&+H@pnSn-2KQY z^-B~rr%DSjp&mcY7GPFL7bC^|Ics+5kv)2^=TJv4BbqO?g{fDKT&)xoPFJp%L*xOr zGd2T`D`tT{bPSUlRLN;OAzM4WJs;0?g#HE3uAYBx2=TyhfSdTi|5zx2KM-^;S% zTWrC91*FzBr`qTDZ3}Jw(cX8+?=uiow$ad0shSPJeUDgeHTU4W%Rh&y3>O)`ZJ~*@ zqN(IBHWCwi;7_s)9~II{iHkz9TM7mY_K>fkhc9%q;uPKoH0Yn^q+xZc7a}5RGh(Wl zGq9a#$b>GVG;5;}{L(G3PqBY^y^Yz=?%BdpYO_%p8dmHyj&hAKV?LT`x| z#?et$Ywji5awjn7At&{NZB=mPp04!b^a#)5Y{SDSY@LK)%S{LId1@M8MsWfB5?z(v zhlcJp;Om0apiN?_BgGfiF+yu9y-A5pLO?r@#L{!5MQ~jf+H?ym(vY!t%%_Zgzs;UG z2vGubZ6nj&=5`15o5@<(X>tfr$fG#SuFSl8XVJS5Y67V#M`T88WR%;Owz;paOkPrP z)_k35Zx49u>p|Mu1b?5ib5jGllAtdW$0%s`qR0um5f;PUsS90|*N~VB`36OGje<4| z=^B`Lv-D2-Q0iOvnj#U;w)p)#Rf>Y zDo$%JEpKw5(p7-Xp3s}VY^L|^YFhPA_-;_ugs=$YTcY?+dBS)HnXmv3^eXH^mfb^x zZ0_0_dXNk~2QVi(nzkMBK+_#_bgcM))lwA8qSHSzyXMa`J+?^!FEq{-L9gPCX4ce& zGIxZ+i)>QG;@Oefe=+UQ-L;m+SI4NA<^bKKRBvKHepNyr(&++?aGk(xN=_Zq7DVhU zZT~^xNxF$}{F7U!{YwcDPZm^D-?p?h&U-jaWHON%(FMtf)`N57C@MnJEVaWuag=kQ zy90f4FVFAnMfuL-WpQvurmux0W=6?Xh$InB^(1LY`GP+~);nnRxI}ugMAExC$-9GM zB@|RW3Te_S58vlOj#Q^Xk-HEGwQAD-OHa971<|{Jy9hF^E%_L5Vbfl4fBw?=qBwbT zBtMK*$(O{hXvzpTGeq9lMv?piXqj`M+-st*zYXk8az(3alQeqS?;O^v5R@J8c{ z>tHUxB_3SpK3ZSfW^se($(&-FF2C8@`+4MjNl?O!It%Zjein#_FjnCWI`Qk5znm;1`8>Y>kq`jG2RT7P`HHJa>a zo<1>Srs+Cx*3BB&xztxQHPjTJYzTe5Am;V|>q@al!=-f;G&T4oC3|LD=?$3Tuf$ zV>pHW@fsQbs9cFyj`tBiJ$Q!$Zg;Mq%Wr~{b;92t6kD5$WdEaxXcin0L#+(Sptt)9 zSw^Pn6S2XyXq>cv0XohgeGGB3d-&}<*V6F*&&Ck02_KUuTK1uqiD|B>`&eZJ7EUHczd z$^IG8(#!Ca{x%?r$$*;X#&2Vau{sm?c09Oeg@rl{QmLA8rf$j`sSFbk?{tH98G%U( zVgd#fmNZsdMy1)q_1>>kh-?eEy?`7?v*0@A84QWOuo*?R6tAEvJtgfJ&kxo`DK`ifW0o0Bc}m{HRKyQ1AqHfj1ACtWw$9&2Mb%;(X#D>E{h# zW9=vFB{(GL!VCXf29N16AdylrA09b*GWeXk2U1tVNe1pzXTseFxQ0= zFB3O$v}I9Tfi6Dw)N(?rFm9%n2fn7|1%m0kVh5_0?N;$ewiv9hK3B5X?td|*caRdWK6~w-LN{tYr*r50`To@I?$*(nW#bq#d zNhkJ9H$yrHqR|%`eEJ11_joCwIz%T%hNka+)+f2Mx=TVLyA!0uZ5p9WuC?YooVfmn~;@k>m9N@Kbzyg+JD_%%;D z^Uh3CLucfzT4}D?Wn?no_~b=Q=EzUBdLTV*KJ+3zTrm02IQ-j~f`Jm~h1pqwV&AHN zYHJv8-kKnD}pudf$1I}Z3WkkY}e?CLXlHX*G&o&qFInr?>1ge%+yQ23o zfb{!Vf5|9QHk(a*JNzhJRX0OuH>(+JJ^N{vf1fd)En6Vb-D?4`n;i6KywqxF?3TgU zlq>3K7iD7zI})b6^oojl) z**4vUC%_-A^|RTZNB_^t6bGW;V>+S$gn>a8Fy(P}M0Zm}ciR&o%I;d}vK451c}O!> z)xR>YD>U5*0X~hq$*(U+W4yEHd@*hi?)VFsjgeo%>%7$@-v}U~64r$%Aulw-T$tvc zX3$j@mPj;*9XZmTl7@bY;+^{Be5Rf95IewTz$k;Z>!cS8#-h&QTlg9zb&e&7Hj@c*7%m$E(>17g)5O`?Gk zc;XB*SL#TFHNMl*<8MOcH{Ea}R7H3IYr4GRw;@ef>vYn5&)B*<_itkCN}Vk|ptsVt zU{(G%)=mY|V8$(JW_DfyKq(~o!kq>!8#C4aBxi5VUG)ib+a@mH7mpgiymvu@N`n~U z|0C=h!|Qyyz2l^D+L(>4#mHD* z`^e#Cu1;$vcWJXIa?|}YmBJe7+q@D#d5{y^_@nnz9pR!FmHN{%W>uTx&i;M+ld^GBpFW`q8A4_R^`LN_SY#cQG zxRKCK<;R!cL4lED>SFxBwhSQuo2RnM?f%Jgaok71R23y&Nm@rZXdC=UagmBlX9TyL z7Ok;Rz3cU)7DknC8_(PM?O6Cl?6SO4S=vtW!l10)VH~f+5$*HKszM2)-EGk?-{&{y z*a%CtH@j+;>SEvaTN;Kx1X77>rEPIK;Lp!4A)m`3pyf4 z^f$^d$8m6}LiUR^@PGvUV`F4E-0d0&Sg2@w3#VZ;Vt_I`96l;*&(0Y$ESVewf=zfF zx{}r>{5V!q*g)PL$vD86&%mgXkYb`gv zz^l&dB9}kumU`5XH0%|%To($LJqF#NNjP+YbHK z=LC(fwoHIVkm$fj;qmDpD`FbbYWFa_T8x5_dsGg~y>bYI{%CgS9-TOpQtWzEPDN;q z1QrN{X?=1@QhUJ_lUj6cDp(=a)bMEnT3`Zezbdse88qf;L%(vuCRK3EUUz^wSq;?5 z2Z@`ybF)Q(`&sC?ES-~IZOP~XiW8cPR&wl|{#GU-%ff@Rb!$oND0nb9%n82MLY zV*6UtWBP>*8w7WQdqE)xDu5#ENEY6|4`Mn>CSR+G%(C_8GXsZ>*CD zcFw|E)!i)a#!;Um)9Gq~jKdJTb&^KF;%;!>x+4|KaOfS9+&Bo>E5u(v3PJuyTMbsi z*;6-gP=d$rWG0vFg6HvC1|ixE0T6?V1*MEA3ls~cw&wUq@E03#65n->M0 z)e~C_TKF|z0PiKoggXV>4rlkR2pkKRRm5Bw z)CwdAK2^6B8;ACmhDL@Cm17Pr9+a3Y?P?&G;fPaeAY6@`9mz96Z>3K>lGdbsTCfV* zPR$2RFt;EwIABFoXTr=&pA)n%!yPV1`$C2}Z0WZZPy;pzcomMo^J8&#Rs9<>-~k9J zV4NbAi1Hw|nCntK8ery3Jfs6i-8g3xkd>|0EqC$Lw zU{i_Pu(83TQon9ulK>4x2O%c`0cr9uBkx*Fs3X#Q)m<{}cW$M1*YZPGagurHa0E6cxKn7?@7*b&oT!n{NME47` z6b4|xm`pRmL?%Id`QhXg%@Z2nbPFMnwh$V?%()4#U4c;eTnI{1x@SAkh&2;tJ&vkI zPzO7J>FcgVFH)RZ1Rm?lh}lnaOo=+1N~VNJvUD>x7;0OvN#26uRI|G2`WzFoSePu2 z44^IrXd*ATp&$qb-iUa3|9XD-a8T1@Vh{LU$zQM;GkJCBoM7hDRZ5=`f{+C5d(c4x zJM;us6wVtoI0g-bEkwCS~fu`!x{ z=I#N5GIXpBU*H(VpCEFep`oyFk$6S=)Ij$Ca{Z1yBDMyLz`Y&t?r#ooZv>?T+X|dN zDcDp%emt~4^bT%XlL37!`{GFQwR%*m})1YrN#9{y^^QZ=%OlmxvS{R&|&*()Z1N*NH2VmnLyHws_D)CE%?2v zg6RGH_C2)Vxc+F#WYz<;1xy|D)?kdg^_jrF39z!oMVk?+&ieM&v>JVz+K(Ebc?>6a=6cqaG9K|0zH~#Tyiig=L^<-=%1;7 zn?-;%EIeaa2$m;n$wf+ko}jl*&d}=iw$t|i8C~2#q><@HLwEafpZRP3_C*?pqa#Y~ zimzkx?Og^}>j-C4j^3)JWIlcMt&@6MEf~n)s9aMp-ngMX+88~hPAH&X2zeI+A!Ew! zgf&l5Yc_q|;B;vz=7|Qn^KU+2y>aFtQ~Zd+&lW-@P`IOu)$(GL4qgxUOpBlfL2r~L znnQK$TCOITQk9T^u!*o4k#5-Sl==sE9lVG-a<35lrIrY0g(UAC`F2&%!V{cbWzw`cneGo~@I1;rSW0ppz@=SR#g)rsj z%~uX(o!^%4NcBfrr8S>dr(B(HgOAVR)c=u9=0hJzWP1tzMSf>7jMPvu+0?qpKjKZYk0x$Qf9qnC>M)mqmAhSPB}wxIXzGGq zJ^U8b+EWj{v0nCRNZgR!JK`ildAli0ewyFLpxqOYP@kQfBO*5a7J6rrU%xN(>N&fj z5WXNKSjOCIJu0{{mHPb{As^WJaj|;&@m4WFe%Ys6z8;Bh!Ma(D9w)mhs-7Xke=N=0 z>R5$xnXYO1F%HL?QHJV2YRgw#PF zRX%UKkTpt>F#{WWaC>1?DSi+m+u2j5=>=1Q?0Fq$Su_{WTBLqaEDn_4m!CKaRB`gO zB0*a4*$zjMuEj%zsDZjO01Ef%0DebSD%s28buh$UH&63}} z7^9fCxGmiy=jJF}vI70TS9oqU%f;4jx7XF@GU@-~E8Ln-Exl~F>Q^kT{8NZA^90{x zKRStP<403ZM(2LMBM1cJQ$Qx&C3@n->kzBeK*0nU5XV?VI09ttwivQbogmOgkpX&5m zpW@?wpvf^mT~R9)OHCKpJ=uQEJuW{Fd3=9)_;@A~xMq!??Ys|9noRCLFZN~9iavvV z;rB!D!CBJ4_vzjt?lZSQ$nAjzFsHc~iiCCorXrr!hvn?hCabE^W=yra z0$%`vUQehritF?7R=C7}u0^6Sooqp7P5SuFwV_nwrlXvlc-?{PeQpa)DNe;ViuW{zDFAPSQ82@8*v{qkK0zT~u8%cO9I(H$DX)2Dbk zWcf(%CyIV#HDd2z?U;<7zT#dDj04n7f=~<4l$RGlq}h7O1skoy!t@XE>iJs@ITuIf zktnUO4FewBOh#OhNcqgj4s1IelCvnPvvHv`UMqbhBd*(zmS*j8dYYel{L>bpXuFon zqValetc1iUTTUm@mt9-%RkbNwQE-KF=KA^IOJV;^wwtNl@9cwLh=R{*LBv zdz`>^SgH8zS+VuyCRb$Bq*HXvS2>9L`behUY#{VV4%=r0`fGA69yh&yKDkGlwbZa*KaaTW(ZJ;j<5$A#$c6A!bioe=HX2Fwa1I?GRrM$XES4lGEtR7)7gX9>3^~Q8~IcPUJo8t-1ruWY6Mowt_hW39T z=teYT2+F9jJ!`f5IPXLs4bh6`(v;=LU`-O=M2?q}8KAUUt7|af!75hlP1N__13dVL zGqEOt^@%d_J=A>9h&I9j8qr_bpQG-`wd{`Si9cCZ%>TB8p}E14KjdebR!2BsbG16W zcF5g6-{u!_M(V>mUYNa-`>V~rXuM7}qh(dvp7p%Gx04;1+i~O7n=*cHpi;U@SDygF za4cMhG3u~$ok1Mkh?64Z`9Mw#nAW&n^ES(^9xyjUJ2A|>Pq=V9Qen=b3R)(;}r;D)TcS?Zdp*Y#>CN^_^@YCFJw$XGB%-@20>;v28u_-?(SDWIiiiB?3dk_30IN zHRV3(?q~6f^@q(DHxBz!8&C;|p`Wpm3M8!qeMU*sHvpMS?iLF5?c@g;YAV$RCWipA zkc$0pwI!yaF%d_}GYf*^SVmaZy{36=UUIq@zYOH^t*MLWqncE!CTFTvY(G&0_rLuJ8lr_nu3Jvhe z*J#SWYrU65yBO0CrBg#=2r~?!f%D68wS~-_rnA!=A!TPfLk?&28USUAqnF?>?eWp# z{KSi+8+Sdp>W6%ae6G$hs+hG_h<+-!d1rIq95`P?5}fW>Z^Wg;YXV)Onnyz%d0II3 z4Zl9PK8!X;xZbuyA?b~K#xM9Dwi?9W@79F4+WNe8|5=9G@cYzmO+$SpiBnQ)a1t$k z{_6Y4K>UJCwBE<*^TD(!L7=Sx`!>n0Wf|C$1XC{ERhVD2c0`z)>59br@N4$cxXlcA zQ%;V$?6sJ8ho1LA4jK5|mF$&?99qS`?sl~?zjU8w20`#usN_D0wX(RGqvKq)fRKITfLoa zHVbZ6i+#0EkRKj?ZnQ6`>4Vi@hsT~YM-w593_>?dNqplbCLsn&_^l!vM$LpW4IaJ1 z@ex>%%-|&7uhF-QV2j9<$gcWW%lj5WV$3=Q7*?T`<&QaV+1kZdsd!);n-C7VkB2{y|`;7IR?GMNaHi{|)G;K(~jgPM% zC;0g`*0Q}wajfS3)c6w{v5)5aw%g@>^FHNG8O3inQ_PZF<9K90Tn>Itsq&%8cDJ8v z_x}FSw&~lF0Tl3g5&(2x-Y{aVwbwgDk`w`LbT=7>SWUI>hlzyY3Q>rIX3}rk(kx`E z>60nSo_l$MP*;95WEo-%p$gxgeV*}%=1P_8gl`yIEMu{gr%VN9&N$vTubPbtyl^>o zUtU@(c!8YchD@~uwfc&~8>hG@f;ap<0ZcLe%x+2!|I~a*$uAwNbP#jzFEpNRw=}@& zgQek~20i^^Mvu;U{gr|-Vo%-@B2mCyyZXydorNYY8rZiumfM2P5!uB9&?V|q$Qju~ z(ixUXSwj5ZxZw*?VtS9p`}uxy!EV@;IoAtq6X26mDcHG>b5qsKjzt>Gg%D{)i$*V~ zozM^!I!YLtTu?=g>wUUE;dDrj=79%VjrIxZt*+A=)2#fy@u=K$yVbzCPWtBg9q3&7 zY7LP)45df=eRgtwP@DVtj;rQ6KI(PW{i%RjF1CRwsZVY08q`a zI(F`Q&jb?OEv9dUHk;%ft%zf7c^%K8R!ynI=3(`F{*7Efv^1n{;5`XdNp$^}9mzG} zr(gGsfp<>lyx9{sOKT)9fhQs93zt~K8}(pwiAh8NLH>^%(&SfNvS2r z(@D-dlBPYD+szDb!I^NfMF`HH(XVlm<@0FUAq^-JXB5KgOK!l@MwDIc!Y3`sETd|a z)t|7FAt^|mx=r?CfUckfKC5-;Hj(qd9=2-3;da9~KY8Lc-*NMP_5Cpa@+eAirNyOE z)a1c+WRR1}k}da1=a37vGi231?PXfK^@anmty$C1KA?RdLg#@s;@q`oIJSo5#H`o% zNNEF^U3ab3bN|zqK^3l7A|^-PXLS!@MJJ2&mDHO-Y*&;8_??yD``xl|xo~}Pq62Dj zqp`@Z)?-7Cqs9)`=JWMb3E`o%fKcY287QBZgD-=L4~!s%^jBvL(GNZ%{j0tIj8%bU z-bwAO>9VX@`m)`@eNo1}E@!5- z{`)%-R^);8-?b%-CWJ=>QwX4(6+Sa!$5ho77pg=pnM_D^XrqOs-6sV96vBk!kz#7H zw-3c-mO7p`yr!aa#Em~EeZC3_rifdY)X%ZZ;&lb-eFqlqgkQ^9&s}Hx7x{BwXG_Hr z4iq_SakM@~V4@MnBZL<)p#j{V*w>H+LQblJ3m{4@1ZAn=Q>>NgndX5H`wpCKeQ?`< z4zITGqP5TUOdrhAWWjy3N^M?P?Zd@z(}EvgayZZXy(;MTnkbQ-wiCZ9Tej*rq>7I# znOBB=03;LhL)j15?~k%sU1jJ-(Sl>KLDW(6i@5`T=Y&QD87uRHMUW>DFrDCNu|UOY z`t<(U3p1+7RYIHrqW9Cq7xjjf|2|pw>^?&*;kH(Zr~h14CkmhrzMHeZ|FiRU9y+B* zeHyww#szkOky}L;K!c$`hHZ~lj(cX=$}d<^W%zcC9b25HA-x01ixJ?=A??P8X zIItwP=&-{;+IeYNS#ccj<=pa}5#j|YfLX-XdM+uST~}2W*f=b!0hpZ5vWEg?UC>B{ z7N*#B#DSf6bICI108L>#^a?E|5BlHDCE6H+Trl|Rk(b8_`8`hvPPiPdTBN3r=up*TkQm= zQ1qz0nVzjdiED>T5$~g-Kp>a}Dd$ZlSUYHGK@gY9pv#Us@8p2hrv#v)nat(Lmarq( z5*7dRxgLj<$2?fOF-H2}8O!$b7#h5(t%;Mfqp4x4%qOo;skg5PhyU|3$l}BvX=`T0 zkO!ZL&hGvqxeO>1Of1oMo_#+Ahy1`+<>{AqgB8NVg2KF|*+h1Wk=X}Bp4dk1|j5OL@SYohF=eJlr zZGV-c92=D-<=BrFVXKd6mF9+k#Of)4t5Yrpa(*fEjm&|AI>ov@nGfHbX)g==!?1^3 zA2bzK z%I8S0|4xIAflFcm0Ld11v3oCu#+gr@SGMX`cm$iE(K>jA7013!$00#=MlJ}0UfbVA z_J=E}lIh#;bJX8W{7Gj>D?cI%4b_Khc~rBG^28?f!8`ost5SRH4$+$uJ`i%iQ$M({ zk%0TUV=?4S@#~var48UJ-U48SSQ+t1Q)c4AkTBNnGs(&xDtvxtAFvc@DA!Pl9xSJ3 zDXpu8!e!<1gGkr?pT6OYOH@!w>36B$b^(&Zn4#@*L#CSa?UbQ72 zdN&1J>wGB+@_rubvSpl~o}a&NcqL%HE3sICrB+@6WbhjWBTq>1e<=@Mn50I!qU{lv ztm4e-F`(3@RGp?j3Qj8Aw};e_iU^m@Sene?f!%;XLG>H-!2%*gbkdUEBJM>4t0~xU zro(Tl0oA0L?7cD~C)pF&=d4dn$5NWKNqYUif@sH$#J3rk9>H!Iy9#Z4D5>ln;N#(? zpt9Q=6;|L2olxA6)~zL(nVz~z?iiysFU396FeR%cydvRlWMNG~d(8j+BEdP(<-Ch*ckkwnDa#nTHAB?g4gaLPWFy z9jeVdFdS!-F+E4Y^8aWQ`71RZ3Xup{mNVmzIZDiW0{%K`p#N9(3O%H`4a60W4kH*- zGOzijVJ0H_5j~o-@jRcg8Q}yAXjWg4!5XrS<_u&s;eBK841coIt-nyV4{xgm3i1;}SCUsh>Gj zNT&E!hb%CszFXzn$ZD~$f%}?PmxKINuT~dw>X+fOD>H8*>UG-$$4o>&qo;LNvE0-l zEQc3#W5q^0K40JY7d&w}xWzZMNe~KZ$fQe!9b!RGfKT_c+ZQzEeHVK)L&~p4Iu+`M zKlFf#7%)VBjVHgE&Px|Lc&i9MpUrHL^m^Ard0E)&cXY06-YKJN{rX+Oq{0{s|JQ&! z%QV;dQ@k8?luv)rHRRU{=wNNG(%ZZ!@|4HhzLnD^*6%>-yE!55Av~ui0l`t73gh;BwVJ0w zFHh{+^EU)YhqV7ghe}WCeS|pLzcE+%$4;HnE9C!Uo75c@Q1r>txPq{|3X%PP0P&OX zzrnWE>FLu}cfyrk#r|s^gv8Vjcy*#M_7kDBi;5;gcRfC`zYs(DRKnfQZvFDab2a}> zs;-hR=E80Mp|B6NqSw_Y9 z_%o$Vl0NTxGOy$6!kv(P4-A*jE0t=MOe#u4e^LA=Q-D*Ucp)WIp-~30_n2r0h2%>z z!EJ|qNNtISeMgmfS3m!;H~s%a9lZ>D;Y2O149n=R7C$}NWO+{Rkftg^p}gvw!ay0+ zqldeuUS;Q|+(DMDXi-eqeb#AeL5m3dKfGz0X>L6djx)?JG=>u!g@}7p$y^k93wX{D|E=9}9DRvb)~4 z)hg(y2aEPQ%-IJTvkt*}Q>4ujOJWtWvubJ=3lD$a1h(%h4jv2TAFEq7@UDEdux*kr zD~Zju+w}QZ{CJ!qdOr+*cW-$+M^Qex74mpKCh?)A{#lai?~8n^Vt&@Qnalsa*a|Jz ze;A5T?LTAw?tOn~4z#^DM}7|3z@sf#SZS+y5O_N-5qN`mnrcFTL#%@UFHG%%M{GbV zzE-p}XQ?<52?oXy`|)>;rv@V+vI0?v?7B88CltK6c5mKJq>iu?CaVHR9#Y-$>Wv?1 zx1aRT=eF4QDc>Vp;LC-|WJpG5T$`EK5G;-!MmYM6rwwnFwZ@rUCKUk3M0t?c;91_Q zg7;-TH!m0oxj(HU@v~o2eIWH7+eu>1tRk_?Y}-@Si`jEhrrh(3Bc%BDk$}+lnLgV)@u}v+o#)DH`+L=L8hM#QYo1O=(k)}B)2*b!K22C{x4p--vmULtQpFx3x_=8 zrA79}gTPL%^i9_-3;!q(CQ6bOc)W!|Qw#OCnc{FF9ZYioT-z`!+(yMn`=`^uBc38hQkANjoFnk z+^>9;FFjG9{JrfHJV*jEr z1u0Y1`iH?IHfK}`ciX}nd}lHJo49-Tqx6e(V;2Q!8I-3JntxU+&q7E|79%+don4RC@E@)0UFj0D%$oY z#3-Ajs@Lv&W!1BrR1LqAd#q751Z^*Ca*Yvz{r5`97z}0K7!OTcNNGw#thI8DhvjUJ z3L{{4fq6Z>O%j{)u(R>yI7y-M{gtW%7klkjQQXw;B{m)d$wj8p$L zuF?5MjVT3~p}Y*E?48R1Ww{zXrGJQlAnKjw#-%)`e?(mwb<~>Er+^}2op#}L#;#Pu z9CD9?dch+S1?!aVAs^eU1*Mo}k6%?G?j_9Vf;6UO>JRxt%|OP>lEARfAgm*ijQJJB z0CWBDOu`Fd=$g5^>E8fz`OB^=eQn6dhvR{faRFuTU9V>HnlQo;nDU^=9hjjg?tdL- zv_Tr<0pf=M;#adIFz&S%=mC=E?!SYrwFj8+>Sw-0t2(P0zy+nT*MKMA^Evvd+uZxC z(VJkazIr7kZTs!ISjiNYv?%P$(i7W8HN^s*9<+U8@ndfe=zK&1xc2+!*)>>bVRNAyM zVuszx=k7lqkOFc9lpDP-{OqYe62D&mvhP@p$$5bQrh1L&lspcYJN?nTc$1h&_!BT$ zzwPUqOudLdQpxtGu+2+50!!`UYzITX!mF{mckzi_VAmKRg`>q2bDBNX^vVdEX5fSk zR$`el*{n4JGX;>Xb9qa%>d$N+|48{XC9#;P)+t=4Y0k zH~oF!0Tj6mhWF;ec)m_OejuK`v|QUGWpJj;UYp$Xc1gNxtd^#PbY$CfNuzw>KrZi@>jPnb8oWpD6D3%amiT#x8IUB-3+Wc$G zF!9%9`)sGm9v0j^6S;jTwp!uvNk|z`dj%Ejs z@-)!jrLdHD(@j4t{wg4T)qg@gW)hlnGE?Ps81|iu)n|-6giW1slgsiNQcFwDKJ~JD z>w5L@q5ZH)xCSjzy-C$yJMl3LXR&vZ!(BWvyV7cs30)kq&#<4VeUGtG!-?P}loaM@ z%dci*#$(ZG$upDan5bt3-;YTPHKZrNeqR?a5cO_H=R0uy_e9e-MZj^wST2|QC8vBw zWiyLBa+WWZtro4*{xPg8r2t#31br-g$LXWo)90)rZ>guBzDg}m&+Zu;{QdS?qX$jh zO5FBYnDwk}Qw#iE@Mgg<#A8SSew6g}@i%O+{Ws7F#~G0IX>$uB$17gv`eLx4CY#=$ zc=VO)@d<$+F5F#9lM}=m&+Kbpzf|>bblgRZ*+kbl7f*M7%W+AbdYL96=v(}j{Y36P z+e(0O3Z8ZJa+sJZ6Blmb83-W27A4^Q= z-oJhT^2rQci=S$pFfU%n|JQxbFk9sf=96O;0wElbgsf@pEC9CP%B-^rI#Vv-vv)vE zCNv?g(SG--yI@R}uo0~F=;`=CC+pbu?8F%n3c69%g#Tx_4eL*<;;*NV2a^YV`cF9A z9%#{Y`IRDOeEn0%mlT?LWk3JO$-Qv`-=y`wRdppyL9OcJ{z#&^@#-kKKkV|JPZAk{ z&UB*%(u0=AFWd|^2xtWk&mpoo%63CHD+HpdrU-$qddqwS4^jQAaMMrIhabKDdG8k2 z2vax8lwEW=DP>8_PlM5*=4)N-UCklfB{_#YX{nJ#*P@iEs<1AKboF%g}00CpY$24dBRDfh~_yI{>`&4RFC&8Bxe->lv z0@T&5q}23=oBaII3H_?i^i?=)BmL%j|Mo=+-tK13HGZ4u&&`XJ*LI=WMs^_@1r*$$ zGh#TfGS&bs1fW%Y%KPh3RY|V=2Y>N{&wQ`Uai9Ps6*-+KmUV%j)AP%2(_9-R>hirW`k+ihTI``Eu(0Ds^$@0=v`+Vk1f->4^Oa~vfp!WK|C#1O^zQQh z`Y<;%C6~(}!;yWX+@B^F%J>PReEDEcUw$KxI=Ueb&O5trs3-Uv*lo%;?LoiW&w<5E z@yIk07aB_BNwts}?g;yJ6j0&|TG#}z%~o=mqy~vL=~_qJVzEYJw2hlCzdO)=RSIuV z*31`yMNftY-h?K8GY~sMG*h9BD%Wx6j0?ws?uT?sMYuivixaapRQfCI^9lf)|e4 zvnumAwYvujgQ z1~&{s>OR7Svu{>!7l|4s)uAUR#=S zv4%{YCe!S8c{b!m;X&$s{8D+Nid?h7U^}o$SuZTd^Ebv7__GK^C+s7k>Y0aQY&+N{ z^d3U%=9n|En?)X;X&z9;McTqoZ9h$nw*jUzNbKM~jmNtsV`U+P`O;ZHXb^KH2Jvy5rop{3l^#I!7 z!-#062Gm7q|87duNU3s@)W9WWWt0QW4t+J*InP=lTCu4w-P+YZR4d93lXNi4jvX}h6&yP*OSDm5c$kZ;q zwSDL=a$oBf-`=VH9n8So)JQL>O$1--$l11#6XLWm)m^}%qgfLv*^?1?AZ#Xk&LP4m znSBs4vU?{PFDKs?yQraDzAajxVge(2$y4tYW=H)1;jt=z2BRub2IHqxB@|#Yw6z}l z$qI>>RHtIr0YYEfeUX?^Sy_iwCzJenSrY{7_u=kwatF!s=-27Pt_hM!-#c zto^DfORU#2vc;d-AXV0NDcVs4*hv=AqfU80*}wHI+!wdGs$={l}4 zMaGgxTafEGsC!!hxb*f<1>#Z&IP^snCl3gg^MEs^UEwQ3_NvM+mTW+DNpeRngu3Nd zven&_dZ=X1}2rJqM_-*}?MTSspcLJzFM=Rh>rV=7@L{})Gj zOB2$L%}mvamgg6EX8uA@SKF`rBpDk;9olN6IHy3`-6q0wrW=4(;=>n6Mekbx$I59- zi^!w9tun@8`6aE$lXX&7=wS5PTD~_ghnL(G?}!;#st&ZA zyo@4#VfeMjOK0ohDE|ap%2%dm8!0ERINE*)G4hTlli-_BcJjJ2}UQ22=P=j+!Ma0S2>txHm` zXPc0a!O}oG`mjA^R($6l+hzsLV}#TdBVfM_rF#9?;!N=I+#lKc8&G!7I$Rs|CG@T`6X&|>3RETUx3v0%YAc_vT5)S&cg#F)9b4R=y#IimvO^5F zNBc2HJ%oYljhU{yx)0jHJ+0CsSMBaxJAqkA zj>48PdMvo@W~It{8ky8HdRDT`biZao9TpT7g$>nJ+}Tx)DUsQ`^jC$(X|-$A3S#JG z-(z+KGv!-4yhLqZ}T}Vg8+Vo%smf0HQTB;mGwGlpG{kk|IPjFN?v}|vVGxE zR(An~kGOh7I(Sl%OP-k)$rGR6fM9?*wA!2X8)9=WPEJ(xN|nQeqDj*Mm>K0j$Cchm zZ|0UzvrA%B12%LF3a#{>71h*i%njW+=S0K?iAbh5uS^?1=yP8=U{==B0W{ZK$z7=@ z3M#%^%q;?lTz0oRT;an03QbHILW@5FrZi4ZHSJBbFeAC09LTkW;A1E3Ax3SMRrF~U zX|;A;j;;ma*M>r}5ZKJ>OqG#BvzMJ1o`=;sH~hx(46#iEhjLso?}1Y^`SGU_$KMr= zR*uG=r{vDto1%K(@gcls1*kAa$m$g%P(XN3$q5#Hl8pRO?TN?WR;C`BE}+0yII93@ zww;1fm<(y*GU}_kPOr}QV|?O!%$x20eSF4mx;sTP-^DvsGjo_R@5J=?BLlICB;cEThQBCE=(Z3xn=dsrI#Ja%F5}EMSK1@eI6;PywB? zH7ku!F8#$zz|_H($=95Q{k-B+NO3$~y+3)x6{vUJ#>pP_>^zOUqRa7Q&VFB%EazRl z@93qPwyzKPe`H9wvD6VI%@pAwFR?Fbect;07N3Q32RkHcl(Q8Sj(0OZd0FbguCrlH z=+-_)4;yfj|CPG3KLSXv=Ds_icp{cR=6GH%*5X7=PbGdTS1uFX1n7QxD)r1u$G4X6 zEzf!+>I{D1nz?x>g4D>h10uTXfXDR~13R_hIaTz6K|@qW5t{lc4!hv!xZ>djW^=+@jc+RoAq?K?n_<E{nfGn2uqjTF-eaBrV-HjL4qYD1&c=>BV|vuP;LX>Nw`p;@kG> z8c))Eynb&K@Btyvr7Md{%ti1jQ`-DLQNT}Quuhge%fqWjb;B-A!i}LQC5emJ-m-OhZR zYNLDgK@-AzI~GkkSoSbz88L$!4I5%X6sX;X>fH-ZFsR@Sse$k_TLpKQqdPiI56N9T z&}No72pT?HTdsByp|>yv;!I7>tq+6KnGm950FFQhhOcmfKS&Ra04mUuv{DK($`jQR z*?*#u*1@{a5${#kqiHZK5?esu3iSeUwUAU_g0|?EFd_CjZ+0H=aL*&V|_?ha)On zB51@BlRtAt|MV|D!*1anRM!cIg>VCUl4De^X`*P~gagAdgHV)2kyj%~XkGau(g+p2 zvf*Y}KJT^l%cHB4O-anamNusax^+D3_Jc)zZj0nM=I1Q zb0!v_%1boR4ygWzF&qvtQ|d7};#Z(na*)n<4!BMUUDVH!PQ|OU#2(MVS$0 z3OAD`7`!+1jxuvwk!Qu}F$an!D(;n4CHBnd#O<{W`m$;+mxz8jDE8ez{W^1Y72RFi zCyLM;3Lq)5kx2aFEzSDh_(!h;u4@&-&E|Wdvj+hnKeCknhtHR@8^6ejUs2EWqkEj3 znuO)VlWnry7mkeblV<3_pv{qFfb3mz`)e-{d*Y)0=Se6AkM0|)C-1oniRhGM+$AQ@ z@2QBr4GK0&tiDovh`oR!$=%KyHod|a+xVU{g&zo#{HC%n?&&Er zpnx!A`Wqzt;&nVWRR#vo@{GaDAdUmVn+;$?Ad`)Y;*w*=)}~{ z*j7FNppQv-7}PL=;;;wh^TnGpA&5l5CmV60?(2Wzsei9jzT^yGdNySRIpWy*A4klH z%CF)kRxTYgOZ}JEw9leOFh*{SzwHnB@J)(>!YNJXFLkWa8S-kUyko#rv;1dZ1n-^8 zH;~N#Kt_P^8963CEUn$eVD!OMJRsH?otx zPKcf6b+`jXRg^M1M=zPr6VAVWn-E`H~xB2Gm#`s>ci^QhhfN~m$~+B_*fq92A6 z(BBC7cBS1jRb}^XxjocC_%z+%eZ)B&@W;sAq`9wQWw5W0FU6|SBh;|7dar|pV(1_~ z>KNj7$&2NOhk`l-ou~NV|6}VdqvC3scHv+lcnI#n-Q9y*a0?!SySr@M86>#726uON z3GVLh1o$TR{k-pa&bQ8wSqyvC?y0V--c?t1b?sR>_`^gTv`sPt5_}hp#B(k!!>@$_ z;a~d$Sg2_z3?N0$F>z-4JkO_-m;qjCR^tJ)eo;+@@?-i>wTlw0#`_|y#wPNbmKj?w zV}@VW4gT5kC_;qGsH-j(8&4=Zl>{n6oEg7fA`rDitfu&vp;c0@qUw;G{+JkzlI z6Z5jY^|j#>j(M|+3$2V_Q>L6%$LyL~zyA0Ycw*A4&O;nb<)UlrX|K|J(bQ!2+F112 zlb!j#JZ7e5yp!Q5$gYAZ3skh$*FHh**J;lbHjY|+pmampEGpF~4n#5c#ogRtsn94I z_tV&`JK@6WZ#Bk<5aa~**aNm&gTANDSAr5`Z5=*X)^D~375yJ>8Lx5OuQMqsrgUHV zua_pT?guR_&AF48Bhaqe`7viKj#%Bwj3O%f4#r*@y-4KXD{3Xs9y#OA#G{C$vJmDE zHk)(EoCf&uJhtDj-R;{>J2FWZl2>DuW@p5(TZkh8JuEv87X(3csD%T(iVJ(1(&~$G zvmeA!kBS-X*dYhlC@a^nxhBR^Q3flKb>X5w>lE75+#B4jYFLMBgknY`y&ulC zth89QHZ zOi(k17D1{&VNdjFd%sJ^xj2zCNO7bKg~{EBbHiiD3L`*aBB&e2SpDGg*!U~8_6Aem z+4O}h68t*A_=`hVIe8|9I(*w>NOS|S=7x|dz*ui?^>Tb){Br!C2g*}Rp+HV?>+`0v z9%Nq?PnFBfdE%4lfDoo<;mZEi&z;#R$7&8ZzIdqPe&2n=J2-6mud}%Et|;S?iRG?O zD_qA9EOZUk4%^HVLRgBMeO)KQ^pM3?<+#ZJF=yCcp398wbXUmR^Y>uGJ?6Q?I2yaOi&^p?6qQ;yqg%t;Tnl}su%f$ zYU^baDt?s&J&AnPD}|d}n82X)Wh1FAQ zru64}p)HjwNd_`|`H}GFepsk3WP8A1;%Tb2(RPFtl){x-(Kcfmq)l-xp5bd3dg+PZ z+x=M%$~qs7XMEbtPmcvgJX;*pyaOHKQREdz(~L@Zb&762J*_o**j0pcdgl~}&o0Ep zZSH65SPNArIcZD;{{FB+wYIR0*;42Vuu8~Yn0$w~{NDU}8I>{#YWlUf1{Cn^t$Wi~ z?6O9sMvwdda@}YQm0`{#i*>Oi7p)CGp7cE{^K>vQVx(&-h32t!G@NmF4Ct+ody^V+ z9gUg<#A02ZtK@!8wcjb*U@T0mGWo%f`R5*&!S0{QxFjJB2k)JL;0|W?A8KSJwoc1F zz_pa6YhCo562EW5YJV&H49LhJ8T?*t@Co1*cD|oQrT-jB*e5Zfwj|)n(pz}w>Skzc z1D`%iPt3b>6ezA)wqY*nkzG4)8+qjh&uWw4<$p|~?R!&u6MnHAAh8d-;@XJ3M3P>r zGmvGct1_nD+^weQFJ2@-WjR?DnBK#aWaOfDfzS1;gwDkTc|?Xc&$LY zpfNXoFBc6yMozZh+^URJ_}Q}@lo!Ti^7hNaPFN*p#EUOhZg|Y7zP7>HAUT_L&^hW| zL)X$-=kf&IqX&TMdEqUnUguDLV1t)1!?%S|cMjvUF+Q3VKdH93spPMj{tFT)t}qa& zWx5~o&}9_bC50)WV-xaCwPXTqT>Hs}7&GZ%TxUI#X8^XsRdY!_?l521MHZ#-@16%_~j zhT^9f(v`Yg6>|w?YRX@lln7ojC_Z&v6M7OTU07K!r{f8XM506@#wn~djf!)RCa%^t= zDieor6jj4>qEJ{I`<6boB!4(`9A#snGAdA5*ba+UAp@66&H@bhzPy?BIe;J=g=;zJE>*Mv9CAmUBK2I<$D!8)tPG|w5 zq>oTi%(ATODby(M#v8S(#&}QaD`tfYlB*|X_M~c|h-DfPw@GkAGseS@UIv^n%8Vm8 z>Jif!>-+^=LF9@}3NGzx*5tZ$i?hmHrqoW_puXm#KPMTh=4o(NsSX5G20uQ|J=x(| z750^pR(OPu!cKoz(d=A7B0_u6M4tnWWQpV>wQdsW35vIJMwQ_NZGw}N?rS5N;kTnD zbFkL(Avl?Bw%HC9l(57%%{3d=nai*K48+sZMp$g_TT!i$e3fvtXI(lyrYhe0C|APu zD_>ow>2a#bAh+P6cmAP3oa8XqDXJWQ_RflFWa-B z7UNO~c@&5%!S9H<0=UyOE?l0!+g^xy~zQ1pRo{d%8_6K)FC$&BJi>x;x{FsGN`8=e! z>93lMlN%*Ilz$Mo`zSOU^WlF0Tc|)l1SiDP#|UkpVp0U!g`CK_1`Mh~ z$rxP)Vw3(sY*VbUJ1u>>WNt&(F%cZ{LRc|iSZKKB6p82-@n6Ki|DSp$ruP=|(b!T` zZ&EsEQxw(P;9sol)-^Mg$EN;ZbAfZrDIIrC=z+RR4g?3E^}mZ;dbkNbGq=#P`;y{% zCE{Y>oswc7Ow?TZH1ma1UA*!oFEp6YbvGtWOW>)(F2VGW{>I?ljDe2}A!rvka^@Cr zWk8{4Ax|e#^n)YhI0#u0;$$p)c-u2hblGMW!aL9p5A6*ha9S6Bu31gYL`a^8uG6ck zO(b89LT9#ea!BaQ80|`88hc~d z_HnCUmH42op;%gK&XPGhls^Dm^;HI?22jTjp4?r{JMJiwV_6Dte!q?(9$S}Jkn65n zzl}Mb**YvFx*}cLv=@9a4vTp7>iCAqC-+X8Kl2U2N~8LZ8RQ3Y+QKV_UQd&0*Z%x%S%ye;9Odrt{>bUINPP zQv|+9>m?GJG!N>%q97)}F8rIW?Bzr>fdqy?_?(~G=GA8xeN4{~KHqe)25oXjB0;=2 zW`Zr=xXWkv;d?{*%ET!i-StDw$jqNysN_sNrpxuxZ#2-bq$Z%F0{stG*(c_Ljnl`g z*PBf;G25AjWfZhO2!Eb!S%d<19540_10xmt9Fb}MD>ZqY*^%kZ`*IJ&MWGCZd^QT% z{1rFXUA&V!f_aqo_WC$*_}m~pcun-i%P%70pnR-H-TISSm}~9*p%Q3Bq5_KhESQs$ zJkS^0_{a5x5L7U=HaY)iIcg8@>(`r?3c;7BnF(-a(k4Ux&6_^|QfcYWIl-TBB_6m; zHEEd4@v$VY3}&o^^-W~}_u;G0uEFey!P6^brh9)H@HFu_CMYM^o?K15-Y{ynn8;qJR4rIy?*W zzzmYUx`PbIi@oJ|tI)s~@iHxyknr^enS!2QD*=bQjeQN{uM7x4eaSJ0*q*sE8o!fw zd_XA69*GuDkA7F&C%F{4)xbD}QO{=6@&pv3v0yZwHC$pZrpaTkXp;Qm`PA=Xj&tQ+ zgrG{{;HQxLcNW=o4$=mHU@rcIms~`=Z_$7)#GQr5qFf$<+mv(D&xcPvM?w)!{fNmZ z6OJRRId*_aB+M8BAp3RIq0Z&Oi+e$_2Y1rfBS@Wy@8%ER4|`Zd!4L0remu!(Fltw8Hr3R3AK-6KPSOWO zL;ZY9TPFI@b57ycxWgop;F<`3siZ7A5I3kpkgK$bXR-=mEQcb!N7$rK!&KXr9;yzBO5~>di+vl;MyoCj=e2gs_z>bG=+}M zD`Z=yKlJ+xAhLGR7?eaT(<&3_T1;KN%QP9y$ybscBlQK@0txkx@W!{l1J?zSt3x5V z_4MF=3ZlDYz}U(!7)-`*%o85|6YRXS3zjV1$gQ; zF_TOWy?m?CpyxFcJax{a2zs_(P+1K_U5dfd7ON-whq=wy51cu=^|)Z-B$a=NaTBzW z*mjVjEdGmY*{S+_HJh8h*LIXJoEM-S!48dtT^1daxr(uI1}f!c9-xf;t6zI?5H3Pvx6 zpO*Eby=8pOcWu2kZf-1RPJ29YT0N28lixy|x_>8Mc1_MW-ry3n8v2gDaI@Jo8t#98 ztW{js6lj5JYijM+@b|E1l$xuLTgP5$VR^G!XV`HD3@hL^l#M6o2`Z62<@YuixXfak zjBZxm^Re?9dYq>(n&Y;yYsu#F1||3>`{f4I%NDG7x;L_-mCd9c8|x^2lwo>?t<$Qx zvC102fS4B^H@LKOn^j$Ai-9Fd@)jR)EQ46q| zC(xGY2~1B?Zj~r}+%G|js>WSnt&z&F+1j2TPdNS1es8~>TvA_-uoE|a$BSNT%Sek> zY^U^IWLFb5Q>m%h_*~IqVi!U2IN_&fMJy--z{Kq^$d15VYYKTXXE*hvCQqK1g#L7( zdS|c~*~4gVEA%=>ZD&S358KEVPJh>&^2xh z5Fk@dP~7jd%=LI8a;#UP7LN|6Xo zA0B4Yn(2F`gw$&}~HeG23Wyz8r!WIVQVtVHjH1G^b>#hhGGS%JESrwXQ1Whqr$tt>m44o0-O<} zCaivdQ{@6UTZI&%C^TLBQU_GO|9E<*ui_zCdAeZTW zFMSmh98U(`gYaVMm6wfW43CLz-L)fcgEFboU5faglh*)4q5DynI`mTz^pAPl%YvwH zJz}O;H_rhfnJH9yxRRu;5f+9XZvapE7Plm$=k#s2G<3(u1&kzDA=fffsU-!)xf|55 zPbqva0>og(h7$+ADbC#yhvCxanPbp1Db5x_qA`A`Ko^s05m<6YM2V^gZzr_L2R#%^ zUF9=lTk$3YODw-jj-Z|mZ~6E&4zc8aSQq#D$>}Az-pl6pJ8wJ{nQ3>H**3=U6c6>?$>JvRs!?LW_~ z)W2e!gnr-%^W>ggN3)|MkG!`@B^8*%SVLy_^oEHG%MF}&(Lo7HT9*w-pVy*B#!%XR zSJrCebwAVYUIKUHolbF`=H(PN#?VnzOo)aG?&C4H&3H#fHZ%#kF|d9FrW+V+ZrG54|&}_59SwLk?gk;aN5Xb`1@(e+16f*fMX)PllTUuJ0v@kh}wUE-oPS`I0*$vMUf3Swcl49)VwSB zq4&-YcCq%eo+TVKwB&_;!9u=FB*gF=(M9;+w{|QXjd&eZ{5x#SsiTw%()I9$ffRB* zn3wzXyf*}K24d0k(c{CB5k|%zmmF_(UV|5zhx>_Gr&vT~S7+=geF2|EJa1X(l;HE> zX5FjAEjIPu9`CMz`NTJGsfp(zEXDwoS5@hJOxj!oj=JcI!w%qed-pzbheY@7QjpQ) zM{RYm69a>48j?#J_Thj!GwQ&LuOUUL>CY?TeMaRlb6M=8wS;BE7;c zj~NePy;m9yCv}hvGrQ9M3rBflorO#E?o9J;q;8P~YIDANLTDW|8Je2`eE5aHo#1Pn z6{8w$D0%d$u)Ey*(^SU%ZkrlJZPk0hm`X@V8c>3$Q(XHdofkfiEMS~J?SHbdTNCR& zrBk=DDfqfO06a%^sG<`jPT5Fx?B@EiH;%*)4o_vxeb`u&m%bB{-hY3NGK;#O z&*^^;E44HSRqm(hNLAMIf+}_no8~6CwTk6S`apjZ_h%9!6EX z0lYht?@8D4VL@5N#qFv0r1`HAdU-i0}KNY({P}9Ym4MT}IZk>3n{? ziB$d{q&kewM|fnTlVdzz7?iZbqm5yWFs~05l%<=#m5^R%Ob;ganWonQ8`st`iXJJS zx#h(p-Td-Y?Ntp*Tqe<=A1*@~p?{83b;txh?2;p`1pWk9_+EvCy+7xqO4i$}FU0DM zL}q&&nQ25A*xrhd36$QHq|k`?M(NcC_+)&+_X%Z_<#fdVo6%6vkW*Y;7)x?mnr9aV>MEZ*`@=h$mwPGWkAugSbRu<4U5d5uz!NW>;IOjXj#u%8he{)y@#uJ=fmSf?#usrq9 z#ZA!d&al5{QtX^2+=qs)&Y7dSTMQtx@|rK|i^E)WfwC$~ozogTRzOr6+817m*y)PB zP0A~k+j1iVr;=e2(#KOE0%PZ!>YfPrja-73ZtIoow`F)}rvfWsYlYf+(QfTZ zpSSzz!%|E|L1p02_oNuT61>iVtJn>4S^@?u!vSds9gM(u<=4KxG~WI(yW`f=^c+GB zkFUo%`a15~g5ryN=WIc0a+1{7!`no!cZ_dO+d#Ks;Df*8I=F9-t~xm<{`8$*Iv*=$ za>;q=ujCwh^jo2$N#J;z!@$#$y$2Nt)hiC6QQA2$DZdil)=vlsFRcR`Ind4 zoHSqp*#p>sL+q$8^I$%`FRZqK@(_Mp50sn1sW0>Do^TSwb3IL$8Z^OLlCwOVcY8^` z%fA?!Fy)fk(qEUt%*eSfJbR$5TLe$R*t!tK)WdF<-?=lRE(7qL^PzwNY;vOo(wjM&?KFT|6&wW{#>4tDB z_3Zasl*goqmJ$s;+}ngzZOwn(RPm%0SkPrC@|^5PRh%pdsLXub*RXMxsf~a#)^0=y?vv)9_GU_9E-ZD)@sxg{ZL0)^=7G#%T5RtLaTx3pN zIkGQR5Y!enGJeH)D1Hm6!5b640wE&oJ{HbzAFcgZhjP>X!6`!I5Cg8y$V2bAgn_N3 z!w^3T*9Ua!UhVOIN|=V}-ru;S)rKW- zlYc`ox}_aOAt6B)f2lb_^j~dr6DxP4EYi3KO>?XWu27v4TJhQJ6y$5fr6-#>40c3p zaKLka528;rNz!j9Y@p~d!ksUGa0Ue4zSOXz!6e0DUQc|j9=TTO?6O|-C z(C2O}a53=pLHDN>6_G|uAMc;}*@a>oT&n`ovI>0fjw< zs=R`sQ8e!v5z|!A6>qLN%^ExF>Dcu7btK{q|C%Rb9DL0abE5Lbur+RIIGO6d(6L#dZBU?z#K5n`g{xxE%S zTw~xTVkDdQ_3HNeRNK|FE)8)P$KoM<{a>1E;d?&fJ$KZIE7Sy4*e`jQ-!YveYi*S3if=T8tOGb*u9<3f!OEx7 z%J7kjV+^F7XeTU?8-G8Ig2zxsoJ~U8Bz5cB;upoxqF4hux|s|?<`|Dg(3x^aGFafh zz?VxF$WB)r2(uflfllPkxdt?4OSC|%5&xB!J*X1Xoc&Xy00ZNedlq5vp=VaqLtT1m zrs(&ewb3gfAOp}QP*sk-eH<-UF`|>P4aQ*x);-T6i3|$LEM=M zuUWfgCViQo+EAwwBs_wA=-!z8>kp?uI{FP;_H$P_c0>O>%#p!Ph}$J%*^b-lIik^# zfQPW# zLHRFFOTYPeZSHL|jQ-1Q^+)ox%v^2qA#8uCB_(37hWPO}R`|!WgpFv7nDmmP{SyoH z*rtX54>Qa7&1`Hw&Ru*jllc)zx^GR8(DD2vdmaiSxq3oX5U)i^8AHc^tvr-8^ z_5B<-XhlyWhjI$Z3or=jVN^L~t*2DHap}`NySI z!FRXS8SS}w1a5aBPY1ayR2v5p$e&%kAejBQ-=iQLrMYR^A6%^Il|BECvz(~Rmj3lO1CahA?sc%iTgjI(vu7w(; z;&p3lR6|!c>zDHi@T2)FGBd0Bhxy(ot+()+uX}Xk~P(drGfJ(O;DpuVEEYa=AkT((rN{(P2$60YrnxM)nh zVOfK2tF2DVHj5wP?Tty<qzDu7~ zynVQFF%mti{8~{?`7}ezE?8K~O6grGz2I3%6ZLuc7V`eO&dGmESOYBfDxn#h5%K>60$g)k6R<7=F9V{})2;PpwV7+;Wu3;2PI(Y78;>nGEP&oH&7cMlqf#7Vlu4{GaDV>Qt zG(^Sd?}{ZbPKYS~CkiKT>F)e8Lr~#1V`AyX%)GyKj?jA$;Ww@WW!YQbY7NwSeWz_! z1fh>B+R(vY1a|!!yNk66z5sm2kiGm3Y&z$S`+uOS`Ywg8f zwc5SV^$il^COxLZD-+S>Lxh%Tv_)B={wG;l5nF~l0?0(`Pg0CXTZcblW%XKEH-__h zr7eyfZ&yo^Xt2obmmLq`Y$ZgTZQ!jsXMkI5E0*~2sXSH`Z!wQI9`_$tj(k>DA2GJy zYva^#&1D zn+#2&ql#Z^Z+fi>elm)k8mjXvcTb^TD@!=wT$$Pa7d!y3n?pm zO$>AJU7yBT?S<%-Svr(=7%#Rz?iOU~KQHP5cBacD{bffMzEt_mp`HwEy(_BI1*mXIR9YGn5d`KOJe5xNn2JP?vFC~%=l!J2}TIE90FUdfZ z&Rsmy;W16=ry2Dr@BC^(E=1e*+!KjntU}sA&Aa8~IDaERW;dgnC{RcESN6gP&Bm`2 zC}eIf_=a{7voA9vZWdIK48OND8$Xw0ZO?bU15M{uxT>_CKn)KIfJsT?b&X?4bIO2U zC;tDy0bf#6^OAF^#Q_uW&i4dBaA^_$;(OenbeH*9Qiq~AH>0nPMxaWRA;SkFgLp`f z#FwZbJwBkubp|t5CT6yp6Pg_@^Kn2Md~$bju*wADglO+m9IS&BPwO#NELR5dmbjiK zCkQc6+mCDSQxNAr=tFzmiX$q{o#An#=5b@1Q$mGYcZhs~;n=@N8yKRL7;Z+Esr?px z$uoJ%nJi?suFzasYk^BVEM<1i#du0Ez$atseZS^Ykk~CR?cr{bm>TCCJ2)U~Ca;I{ zi6g%)x3$(KEzvm(G9R6bWa()@#v?H}(K(us+gVojmY??Y0^BiYDVfx}ZhE}Q8zH|< z{OK(;*Ixg6Hm5b7tav!%rI+)xM$OFD5+ym>{S>fMhwOW&vGilAl!RS zaFF;b;UKY@Q0CR74`p1~R2T<%lK9=WU^1I&R*1?JCEK^ zblhW7zZ#5*J)16;SDOx=XPEyYsJ+CAeok|G_?&Q)R||kyzXKU$)OmXWCq4z7#q!cE zGvV+*r{zxaSK{t&hIOl`PYHJO+qPS4p)jcOJ5i_R1a+5M_*!fI|6OGFziN9}*X7Ji zKo7sAdH0`WN0*MhTYb@l_R|x?)|&h8iB0~%R%8Co%JL83bLF$hFD>b!9Uge}=(k_- z)&N*TqQ~)i=SM%)64~zl`JrlYdYlI_d9x~+Eh@NW2DcV2jCWBxUnVx>6>s2947$cB zdpSM`9h$j}(@=TZONEeMNBtxc)9xTzd&@ZWzIDi9)Ac{8vNMfv#gYln3nM_fPCT@v z_bjC2wOY^xd!v;ziOL1Mp+qQD{}~7*w;Mq5UwPcK5O`^NzsBD3ldGI zqDNu2odZ7Z9%~fMu(W;l<)NIp_fT+-A@7j6{6bl3Q08(k>+aOML@gvx>`crPpLBfH zLS{w)gj{(ve$}J|{euuB`eBN%{YF;VMxJ+qwjOYn;FXe~ePMl4Dl^YOQ>QAh7P`B_VtUyji#e@!6FAr3vK-~6IM~NY4atWrWLBC(eAV7uBC66i;|Z8r zb^MZU{78Lta&X_U?)`MOe@4}Wcm3KAA1kyhsrj=Truq=kDx=95w8}$zyLA+b(uEL? zVeqme(k|elwe@v@$KWuGJJlGk#%<5F|2I8<>a?Y+YAK4kq=WiH4fnv)zQoOFnpNp; zq<0%ewH1WPQ7IUy(j%MEvJ$&V8Ufb7qz1f)RE`{K^r=6@8O^-v4EM5-DNDCClO?B( zrHX#fU#lFKI0~?y%c81!l=B%7z<`V*(}VXV=^anf{Gg13Hax*f2tk{zQZ9q2cNFi) zw)rcJoXr*R%Mn#3^uRXH5O-48ti{a9`^l=3haL%sWK4a&DiB1N#ETeYN)JSU&{q8W zelu4tI%7jFYr7?F>AYAE2YoE-eN$95OtWj!u^iLN}PsNm#v9UO!y z%`}VC?H^BwpLoQR>H(BP!^U41zCVx~7c&Xd)I_MGe|Kp{C`uw7>}+V}tgVP*B3zl% z4oLSK3WpMEwKfo0cf8pw-x93aNVEdH%^sd>Gd1-olopOR3%Em_vzqN>kOJOQz)XkY7=YxIp0`2k$6g5TJoH}|HvCA<5)is06XH8#U%o9~@8 zz?yh`7@BBF-qj72K zX%yk+#{0(4icu5ar0sBdZSIsJa)6RYDPM8cU!@lTizZAm*`TO@VTt>fg$WmE*gri> zY5=O7F2po(N(jEe*8YoBQea1sIlernT9#?d*u{;d^dVio#n(3Z!Q3V<0)E6-M?TfB zlFY{481U&XMvjS_=7^X8E~}K~INmxsDZP>kdx#hFYg@~fT@_Oq<2Y0Kxn-GgOE(Ln z$)|M}&%HAvoZVV2V~(e3_Jx`Bd-4|Z_L(x?V>$^Pvs@z{^{Y{qx5HogWW$WF-{#!O zqZrr1El$kxr_^#H!_|_ao1)gF-So-m!to`DvMbk|k}d+oRmFJ$A(?V)g{Y^}1jKGz za*SS7_C+N5s5U+fYB2-h8P*YSEjYIO#w!zkHF;i^2B95&%$W+F4!eErVxl2u+T%6T z*6MS4j09K(Wer=gON$L_T0?)HQ*nFSv*hoIolstJ+kQ8GOPbq15maM^+J-lIvbFhT zgwjtQCk(DsG3NyA;XK}wUY$PK;)x%kK2&!}V@*fBrV-=J%IG zThq1Q%6F#CVcwQYPsr0Dw~ItZ!X#aJfAeA)xbL9ts+@lY82O1(Y#FKfr8Ot(rD5aj z;x?fqU|X4k%nVO{+#%r`y&~c}nReA>!wnP&-iBb%j6wsN~a7O#DzkfT|#a=0~7 z@dm|u_w1FZcyNf(uxf><1Nnb>H3JRk6o}ZBDT~)?=1E1_rf3bf&O!D*nxL+mZ)tmaI8|e^pl|T zx2bn(i)$O=>1TSOt36 z8Xr`DQb^(xkcl?`F$i5RKtyF85-Ht5E34-RCBioySS%3%|3wS-=2PYs$TSD#4pz^V zq3cilfVDevo#B4$diLB^D zv~?CHv)Q~YL~Mv)@l0@?KCEs|?H&ug=&e9^5?$rbUv1(iPkq|!0&CuX{;1-0HYeF| z2HrJITB{fNfW+pjCY>jn(BBh`lrssVeTi=y2E=bujnx~Ml&HgG8i-D%>k6ys*-lct zhE7vobYZkc{k+;VdRIA!*!P$w*0CIbh^Fn|E-kNy*5FR(D2}^q-j)$YC!~n`Hz*l#s$P*m5>i^)6MBY@ZDdEr(8+XQtXmcg%dKWb)J27TR!b>MA35qK~zc-$3y zTTfIcsf}HFwE`$*P7fsq*yQu^qYEk?h6>JTJ5bFjEku|wH#q%P*(7rH-~ZGb2^u0> z_P0yf&)?Za=p>8e8ykQ41Xzsu!=C#ye)cJUB7P-AKgI-A8h>AtU5l54dT-xudA`wB zajF|xRg>OIPrZYMHjExle|(IY0Hdaapz&Q5VdL%2WtQy$`Os6h¥SO6$a3A4WA< zW>dO}*vm>-EFJ#aef3+`!=IKwS-}}juVMaFgS#jkrQ4f`t;DQHazK8~(BCs7t~FJ* z7ShmR^p%;nBqKxiPb}M74DcPm=3{Z!yt7sl3P=bEh*K(Td`H_yFZSINHRL{wR+v|H zMSn_ys{F^_`$Qf{oFhPG8(-~U$%(QX!^W7O2TroK&KB^sx|+6-M+8Les6#HMf^_X* zyp=ELDobE4WWNF#|GqAG8+T9b&ic1%1PI1<^wV68 zfs-YyEOE@tOwK(EymTQp0m4QS@h_8sgN09Dh+}@^0r2Z1bdpmOH&miC#f+Uc@EI^_ zb??@S8ADD-&q3h=-RCs_#aMUfIzhZ=z`Cj>Xi?Bu;`dAqcfG%I2QS0(hmK>Bly3Yd zNv!Yrjl}T3%pqEpwLjvT8hrSLG#`dVr_83nE0yF`}~zTl-1W+l5MZT#_gPX zj5aMhjQ`aqs4T0P^ukT;N|!@u6aDYyMaA12OHkRnI8j-ejlj7fu!?)9Z8YXQFo7>zC|G;y?qq0H{C+=2Sf!2g*Y z7ZL{Yu)t@PkeDF<@|z|A#wUKOpXxu>U}{3>qJ4u(s9wcw{FX$lDnD_s058XPRGjvAi0dCz&hfo z_pixYXgq+5{Sh`*^$zrp^@Hd)`KX;$fCmVvsh6Q0v`^@+C66+%SH*na9} zQ5!5ErQX&59VW;WR*Z;ARQaDfB!ADa^3?nNBwhjwI>_|jMfaZt!z0Q|_3T58TkiLK zT94r@WvheAcMz`*T^P?P9;!Qsiya_z3M^HPX?AQh}>Znd!ERZOK1_stt-&eQL zY3t~lo2Q73&%tQ%1!jlJyv*oz#8EG{GWh5SVv>g6?om%B4JRdbyx#2+y&kT=4G6v+ zzO_ygRp`BL6YVcHRd7t($oqXTd$~;ZhJ9kzdpjS|dz)`}wuq#Q={af=A6b6|_fktc z9GKcyFTc&=unGGmvi!Tgj&l0Ev3^8vPBXFo%ETkT>@(bcp=DX5eoU|4>n`KlRmB^8 zY?2uK*C8|%#30B|#psFqGNo!Iz!PoaksD$GaL5QeWxhSHb6R;tV!fqArO^WwK^syuq`2;O?C>wlSTLI@ z2~G7-MQNv)IbN3Wj(VvLGnwHpo8g&ro!n$*WgoScWNmJskqeL1K=u!L7p&Z6)$@#8 zl53xple7ZKa|Z&^R+p#`L@z(wFZ)kSxwxUaJCr7_(ZJB1Znr^$Y@a*Kfh~w(?@Mz# zIHQX!EabCS@&_ckevGDL4t(Vw%Xbcg0eD86*o5Mju!b%6{J`iBRMDAerq}->L$PZi zGJZw%fuPvq`#Nq1-1=q|tf{)Ra!9L78!}`3gsMI!wYEfh9zCx@Nn;7Sl1was&+1^F z|BJK6`xbN*xFH)25Di^JqkIT_Uo<*Opl1P19Knbu0QZM7TYTF%_oCi=CIy1l`n>Gj zPp|iv1bU{AFH)eVh5Hxs`I`@2R7Z|88Kt8beK6h}*Wh?YTgIn&{@?7D#MMQwFV^m2 z&b&-(lNl>Gw%?Zmb{|jbZf`cHZ<4-djI6I)RHt#kA_SoIf@B@-*F3FjR0Q1L5;VFZ z5SsS4pMTDnVqKV)HO4_k2AQ`#aiCRv%3qWqJK!qz1N#s?T3vKfG&x zbk!VXd%eHy1<5HMPvO)rkD9Q2c*Bs6@12bKe4BFA3qG#BD+*P zfwh`sa$V+O2p$tgEwbJytB9!8&ZF36@WMv}gD~?`ra`~l;kEnWR9K)k=n$ZY9)UT< zlk;3Suu#m9kAty!Kg<~Rzo0_Nb7RCRhyCRDM$J)u%4LBP_+Z+=m3idrbKa7(ZG(qb zP;DNL!g1^kT05gb=K>?-f6cC02zVB+cnDcwl%{RiKX?A_-8z;T#QqSdySEp(3ppzt z>B6dx6Qs+tQHV{im=w2{h+0Bv8>c2reJ7@>TrP7R8c&+1(6{_+(`eM|vCls)|7z|n znUs!bXnDH=7k4s|P$l67JNFffG^0>#@XY9hztj`loQ<5_=^mVTGdTcfX{mTM<05}G z!!8;is$}RMy^_KE31B_I`^3%PovuvxTY@uL21M{(0}$^0yLDDv&eGXCd^x{6vUFGP z*tLt%xYTxOW!n$`yI=)#*u^s59(DWxRp4PHn8}Bg5`I~M3a`1&c#Z&WJ3$@(gDQ4P z@?1#k-ZV}II86%ApyJwGw|D*{bmJpR)f_1uv@@&+L1pC35p##x4dS35`42Oi{n*D5 zWstb=n=tzb&zxHUwZlZhHToCo+uo9oWmr!veSS@NQD-t^wwG=nMLf(y>kX-(ah5kD zl2oLXcg*^r7?)=O8#XTSl7$UzgmQ*8&MC+M{77S3v{P6WbG{9!V`xN1*f3=4(-|%1 z=Z+hUFlCo@`9kZKJcq^$|OLF$A z1VM52tE|k(#b46yJ{1XNta<3>Q|Fi+!i#q2P4jK- zd+<>(cG7Aj*yi-Dinjm85;mMTXzcA@5hcBUHj~CYOFaDqS;c&HaPAgvogo+;yp?1Z zWpR)**`D-f@_Nc0f(gPcMP&!4Oqrzw(qWr_)7^B=yZsi|1l@yucGFOHy>&MOBG zuGdnqvpN-Sm2qK{N7eYbsIa{UL;Z|onS>$9mJO9=2?Y)_)wlXnJ6+?iU@fg_cH|(6 z#6B{~!iyvjt58^+Zr`nb9P+PTBGrP8;m^gJ60xcmmYQUU?UM%#b z^4sU2owwDAGQ@HwJeOKaVe`N+A+qp5uAN1D8f^`$#tndw;nD~+#;lR(cb zRmpf-(i2IAXt`tyz?=C~Y}r@6$N!4GYy{xy1tGkp`ifaPScxt^43RC; zZnKvg9n8^&L*eapvr%SxOgGK#tW~2K%2_&`Ah?g?q|gklUI>Q7b`M!)Ye_Ii;a;&mq1pXHH-pM3DKl*!za0P--|q1sCN*n56aKY5T|-C zpY8MdgOS9e3Don9<>a3Ez-PcLxek`Ltvko-my~y6?^O|pHwNj`d^V}xkogfy)Cs2Ybp@@O(biI98S;|EL3Q^uj#>HZw+lr(OSba{X+GK-(Gc~tg^uFG6(AYKGa0DGl{EzCq;9EVBm9O05yd2T0G z>P=5@kC{#^^)grnl1OF_<>}WRk}7ZCbh&c=OhWUSGxb1CWr?~(&AGR+3?-_J@~xQ~2wto^6(r=8%3}(Yeym1jpc$`%nvJvuY6I zEdQiimo|CAG;=CEkTDgW2)EtCgU@6x7M*dKjv}bocpIeMZ8ZPHJLbGZOlxvB9H+~Q zQZnz>+c=04ML_lUcR%UgyB}W;cjo>2Ydp4h4~rR6y(*AKXz+k@kSm3LEz-Se9yJvn68p`Vvly%1jDJPa#9R}TLTMpyk?pO4#bOm^8ma8P( z8PKLzWyU8 z{fl;p`dMtAgayNS(>F{D|D4mGt}np{4<>!GP3rzlcSW>?^jgW?ll5vYsRg4q=L>D0 zYQ3D~`OP*|^E-_*26duoIjv5Xo7NeYZ9p=dtF=U&4ss0OVTS1Rr!y{$(7`2TsY*** zHU!^te6${YCVwrK2Ld~CDIFtoo%W4y3G+==#CAjGs|BX)yx9f&mJ3V}d*XWPe_W+w zcOn&(C#3!4w7~RyP^Hr%9!6eT+aa#g&ifK%!rrhXaATA5$$|f4kQG()pgV6B3Mjsw zV<(g=x^v4&=*&*6zPix;T@s?%8ZHYxFBly>d4$k0ODj~MQDn9fCiFy5Ci}(C8reVp z2x$Pl@^q%?J;bozcZg03)=EO85lj0+xnGjVuzpOQaF3qtw3rW0Jl z)oQ5@%T|ntZqz3{_6DqqRi3H7)AOk=@T?e9XT||*M*Ts1=GfP=eV~h?ANW!bZL6?2%f{HZ%yQzY+TgcF<2bV3MyI0sk+xV zBEhdYi!&2b%s#Xmx2pK#K8{b+l4*NnoP;yS%8M+{tM2`b84wM)Z@aBcSlQemDN3<4 zCjqw+r?m#G&Z}}{Ab^^bQQfuGky=cxU7Vdw3g4M@JX?8ZLRfR&H0MQU8Z*^-XB5ceUh4R| z%6HGbBs#}KscnYU-tXo-!s^Uq@PNgyetCm68Iq-Q0t#=04bdXOmqt6KYAUm&iYlPq z#>Wp#N6Y|4&`Y7W)QcY}Wb@bryVRW9g_oEXBO?F{{ss|P+T9oAnHw5MFx)QMsG;on zc%oQYj3+`sw37NNKv6a)dYuBI+AEt&LN*%H<%Y4gIvX==*jKFmMrObkC~$Jq%e()?!kjf@?jE2;)m+&u zyz)fr)?8T*ok66pQwIg`&e;1$AxcR>SH&s$3S+!r`b=M68<-K}KneI>&yGF>R;e&&1+iB02W~#eu_$UhWtFBpD$?5yBXrIZ98y1M$ z-KJrdowGE6T%}X7aWEbDM=v#mo(L-Lo@@=#qR;j!y6Zs=)0-!}-p_@q z8W)Bpl4I3xnDrr=`dHZ1r)J0hyTk7Cj2FQF^m$=XDfgYJ<xcSOH4a1geDn}Bva6&%KZfB*^|x3*Dr^?ylLhg!Q+<)Kk!^S{8ehy^m?LZ`*w}|$ zg`;MtBKtRhD6Hw3_!B=2i=-6{UXjo+@Or;arUc=6b#13Ci5h}-RO1oTUUVa0?aV58 zvUJQMl=G5t;fAlNdA0r9Y}+5+jNE}PFPtms_4WNl@$7u zWXAOhlBT?DO`(-g2R0QS1zCCGPMCECN}v6eUxrcI!XZ!LF$Y6u+ZZUbYPm%OnxI&5 z`1?qGMOYY?YFiZ7(dVtaV?it@;-!$bsOOw2MBQ51F8S?#rU0ZxZ^`hDvAQ3h(Vda;17}cQi|Xb_8&x+#QF2jy zdxIytm9XcHmPGsQee~#`SG_OvbO5X%`|>{hl`^|c5*mNVe6%T!5tRKnzpIJhz%Aca z8#wW94AcR~of)ZjXE=j#20w!gn{fUM1()wU=Er4|@WG%Z`uMlN(V@}%v!Z?LbTj@R zG?z#lE+aJXeU-IE@5fCO;;8~>H<=XFceD>XsNUfa6t^(Ch-av8Sk33#@f5Zd!qZ%N ze>WbZ`2v9^@F{zp#U$-UH{OT_HQgRY#9idGNrC$Q0gm{FX?`kqg=RU8C~Lf&ut95e zu4ifq&FGlGTk##SEo7gMNFIWWhD*2Yk{uq&pe2u8^el5O!I1MlUaU?yfURE7zDN0q z(u@%;62wpaB}2u}gCFJXPk;Dmt2r0PWypqthb=ip_djQF)=m0;6)o+X>i}3t60U-p z2#D=SP8O{PxHbwxm&5FHQY2R^%gfuep9nmrp4ow!SK*Dm*ifP(+E25z-GA0w&|jEt z*wb#9nb(+<0OjReaz@`_rTVN8-8N0f1ZID?Xt7cHcb6_w-6*y$iQ}?WvCL%IroQ1h zU)`O)KKp=oZyGSJNr1rhYEA~kBxVhYm4_QH?Kj*JO>cCX5e)Kwp(Q$z-y9%4&qbhS{;aCDb@%C1-#G#|N2+C9op|AKfTc14hbVGoy&%*pPYMp zUm^-yRmwpAO~T}H>^XRTTKI9o^WD)P2rt>>DMec11F4cZ@BnWc1XYE*4TU~p25CY@ zEMbsoJjjPdZq%qQeU~=lXLWdhpTTYX*!&ZcMLLq#0QjnE||P;;ehQ`^m{1TGjpXuE0S6j$-CfH{B7%EB8Xtq zlxQtz{|(eBV~XH!!G;M;_uD9O5mL;p^j<;@B(+B9``6?Cfx2@DCS@pkx!knKpeJ4` z+jX4tSg6{zSb7au5KK`G*Au7{xeo}KmXq{5)~*(iO_Gn0X>TWmR(BPEL2u@u8hHTJ z3;!IjbreI^vte0XeMwny*f)2*`;bpLa0WUP7fj5At~x=ro3zXcg}@Gr_!r=!%YX4q zz8W^SM_N|_A34{4rE7L%Z^6N0wxV+Ne1`|mDlwfd*WK6S9XBI=*M%O~sy33IUJ`sp zvNHwN6>C1qEq)oW3yMO>eoUL?MtrpLMNvBfiGnq@zhyiok*WfX%fZUo8AuG);@K=7 zg1lgH{6St=k=!4jbuhx6IBqX+B|7r1-&TvQvOho0l^`z33ym|KGSxu?iJuU-h<+uR zp%PUr=IT2vQ{ZjIA}k(9YT6Q*eyUj&TYR)#-f1uQ$LqU=8WFVCNS?E5_nn3Wk{b|cSf{vIj&wBvs(p7&8GSjkzEwJ6 zfK~o_v^D3gA+N#>iwhS03C_VS_J7Be3-Wl-xsh|PR(m+goY+y7oq=}Q}`KWu9U1k!n-hocu1t{ zpv*Blo24|OvEb!1?>_Yr{%FC$O9R=RC$1}Mf8W+Rqbow?wsa?Y(W2N*-D>WcS1%z0 zmATo;t*q~7Q2)8E@wKEnGHI6PWsYSa+j(X9E!b9Pq{IIgl^c9>=&c#Zf*VKvW_dM( zVB>QwEmskRbdI0qO0Ip~avw?$*vd@{#92H@?&Ns1H~Wrpz{%0Vw+xzT!@?JZ3zf$2 zk4JS4rG7sJ3*00@Z224N!2;bMQDhk{=YCTbC)JZ-RivUjrwMEvv4eUxiG0LH%D9jV zdj}y^vC=?$gd%33hS}`B2`=?Yd9Z0c1{uIRO(16p6%L|1xac|*P9~T5jS>EFa{dtq zESqof1SqZhcIfUqyd_8dnrdT$Cp=0`zh=$4vlKpz@A&+kt15AZ{t;j2Q;L^N+sGzi zcNkg+NZ6Ts?d_r2=M}^()r!LO8C4o5Zr^eykoaaLEL7N}rr?uGGVF5+Q;2;S{^yKp zM{rl74FEcb3DItDmj>8^7e)g~5G{XvX9-CVJ-^XAzklB@8$3jeo;r;<2Z=p!oCSEg zoLp<3To)OC#x71_-97GnTds0xXGG>D(9I5c-EINz^|nL@od;j89ginrEPom>I=yuV zt$$oci~sD!Jv84i-Po>3Nfst}A$U)2m-hqR}b; zS8ip!Di`EI+ZFmSSqKutiI`(qCNHq9P#BV>DInjG+!S_en0Yq6N#fc>x)KnHT%^^e z*8+_Ga)Qp>q{-XUq)3BW6=)d(KkotBJD-Qn>e`7Tw{Uc<Odp~c>OnfE^fb#oW3S)oBdV;JZmB9h!|6IYsnvt^|(LCP_8n!u2KqIOv-1`%w@ z=AUp1nJ`$uVnMi}gaF8t3y{XkA3sRET0;1-Uuuq`+DZQ zfq(;^M(|e&Dx+7l6no~8z7$fi%Twrz&TO5PmfEltsfOyWEeDOqDL&QON2)Rd#Y+U+ z@l#|t{Xxj|DHGF?ARBsZVPrV6ETMOOw7!&0&<5BDU-~~L3GshS@^9a&#co9-IfM?Y zP3R*_Qfm2#4)`J_%#C4F98%md^-+_jy|_E`l_J4oom&M3fx+L8kHdSn^7C(%Lk%f6~D2+%Ma)<<${U!-*7$okr z0aIwii-b*hyR=N`*DYEL@kYJtH52fV4^#r=a5emLw=01ZA;jq#Q>;&Ih;Q!pL(|#0 zkd~=$XdPxm1HJ7^%(sSU@F63N!Thbr%lH2m)w`R6Q1}+_&$0J5~k^m`e>);_M zBZ{ud9NCFES`=EoFHv|CfHm~7rQcE^3_$5SaI60=;`!^l6X7k#5}uV134o<}Zpjob z!iOmR8VHK>_eHg*wp5k!dtZIB?r2O;D3`kBB6P~2K~>Mlpv>i* znT|u3VcVCYoP0*sFv{91SskwgD{;8*pZY%D_C)wTLC$cK*S zzOg<#$RK`h7aaU;*N(ve%|2^NFKQYxRA~!H;!F@Z(r5_uglVM6b4xljZ`>(1r9$9L8RDjhR? zF~(WjT{lYawx;l2K!r~U^5eYS#5@5QG(u%>&%>-zP4?B_r7v!bqwjn%MO46|^BXGrs? zU*d8(*DqU7AX5#9={b10CTft^`lg|@yLog7)i5s~8et9oHVWr1z<$(yI`*#S0XuvF znt*h#&z&OO*>_O9Tf>kiV+yEsNRUPYfMM@(_AMf9kU%ms0K&`8LK9pRz&03LX4${M z23M{QqiDhl`yybd_!im4`eTZIL)&F)KUI;{R=7jT+Qgoh7DUoumbp$3C(6(}q~02&n%F9(7y;t*n)iv<88%z^GbyyQBq(_`7Kcf5ZRN4)i%k0?niKU_miZD7KV2gT2fpjP=ujRFFHBRA6s|AH{M0Q|Y39TW zvAEs;jUkMTs+C-uh5881m0XdHiVrG`v&F{Td+*8k18<}c2FB=qQkmyeI?}K4x4=dy zMf@dvxaM4Rn)6*0q|O~>cyDL~-cN}lci`drIogZft;x^Uf&)_dby6R1jbuPm`Aa{- zZ=RRu$BpSYsTx{--0u4fS*GZpI|C_mpJ6h!{atNjqkn@>H_tJCzx1rj4={qvb(H0z z2Q}K^lnu~V`gpIpe?L@*2=JyFdp}qI_I9HZN}PSQ)iKbJF4`2yo>y=KvWTb8-o0Lf z12pl(4ND^CCVpaLEZZrwO4H`P`+X0-3lVreod7+7^08=pt8oaeQsRb+vC8)HMcIBA%AOyLpzRGEFF z|I#EWhB`q6=ZFKDoQ<7_={OKdp(%t?I5+X*U5%fnERZT_YK-%o|D%kVd4MN%g@dJgke0^?idjE z>OO=fng58tn4#S(JHTh=i8$a~1)4Ooeh0wYsQ0h$DZ}d#AHd1ge`aPUyAUq>XnVA< zc0CqW{ww1TU-HP*$jJsi4(d%dr&d?$|LIoG1#`rj)sqQ?g}e4nDV=Mt1u7e-1G&Nj z+Die5xx^R^=@$AQ&gB0N(8g`We1r$&2K?{gwH(@GEUoo!Kc?Wd4^C~vQ~)@s{>Td> z3MI1b_TmSx9IwcwVwX7i?kn zfGrp=wVJno#8uKl-jE&!;<5EW98mpld1;67Si1k`yFag!yV-v^jK|g!V<1u=$%k0^ z47j1*?kzwZ0rz^`bTt85Yai>z;imT zxGzHriV#XDCywh9Ms(9fvvqyv6@|U7P^d`75S>=fl5aN&hnzyn!)y7Rm@h z5GJIJG08t|@spwkp6*aY+7w=g+HF0b(sx{#^Vr z!y_{eNO$~0;(m#U7_ZzI+_74^LXT(r=T!&Op^WXVAlt}|qc4HFBIhbEiu**~$8sAT z`!lYkBxvQzYQ~K`qkKHFG&dMLQ* zO34)6pmDLZeXhSD2duW;XVB4Yzr8NF$I5tYqF^#bAlgL&V4ZH~cVV4BXMFl6PEuL( z6rGqo$>&ItS(&tLPMy#wo)@b* zGYp{EbwE8iG2{5WcX+4%$n9+H75{)P1v@*$ z%3bBR%rG{2{vDK0Op#VsvAC3T`aVXUBg#9L6*d^uYJfeD$S#uqy8dt4VUb8E*Jn_tU# zhqmoapmP;r91w?3!HqxEfn;NPeQ~#=*kxaaIhQLeM6cqgk-kQIBBo z1D`j`xI!_&)DrqM;xq}#jX4jA`p^rHC0xv%P^o_)W?hD;b2{$I#C4rC&mLta9N`ii zjE9HFOHlW5SxY%i<5VR#X!e)tv1mpeAF^!W4Vv4=hDwueAo*C8WEM|bwESfJmbl#! zD1C3nDFh*7AvMps5)wywd#yBY^i61P_x(w9$U^F>5zi@iOGQ;%-N2JhAAbK7&-KD2 z%n~SFY`C`n72yR+N*M!I&3ltJYxlDro46!f!Ok~RWV0RMkF`@KHJAgF+X`1lZvBbk zZ@)a!HK@ep?vQz~w zb=1oOK4&mOVa5N*i9;k0C`ZOxiQlC;J1(HC8{oX#sap)Q=@5OEY0)vThm||*-BPm6 zv>47+n6EGiL#C$gZpZvCiEpr$0k0&Jph&H(h@YK9JrKRIkH%?qMKDC0t{|cU8XWS5 zU3=iR>~Q>pu{pY*pP3(&>U@g59#md>`BG0Vjc*WTlAQPM@*ro6b2!ZBA&50U(MP~G zRq@$lYc%w=$dY*ygsfWS`O* zH=J^A2AJoq?_Qn)C@q`#-HPqn`hn+3W4>&|(jI7xs`3DWBo*hQYbY*bB6b}1+`Co# zt4oSW(7bg159wn4PdKOB|56}p@upY{Ld{6C=RG#XE&1#)v@qh*hCPdJ96nvd`#*;+ zAkMjGt^hrJrn_wm;@7jvnQXGNEdU$coZjnBcbS$VA1!BV54IGCXOc%PJC;S5@A#W-#NSI^uzN-RjZW{08gVUQ^9<_YLbTdo!6uQK%Oju<%idw z*cB4l3LWj2SlF1vgI+T2`dx7y3-1&*ET{A%f8lvg^t7wA6lBNtV16VDWuvBP0kWvK zIMEHUU4u(*XqG3g+!@Yv{e$jK6_l%w)p^~p-i1`QHjdE*kU zS(JDj3N3{-N`fMT`zKhrhnp=&%hg6`#RmAG07jY)ODZJ*iK*{3TzwQX0 zITIzbvMSd`5AaEiBDJG#pW9BrLnq#o1;&LxzeITG{$$d3j)DovQfJLF#J6M3pbT7V z8-r9N0ZaAFbtr9mCm{m##olZygQYga$LRB!*?+NaOqu5W(t;3O^mUP1($wkx0HRV# zZ0@d}b9{~Eq+aJAYC@+$O#RzPdrx=#4L(4YG18hl{ZML5Rw&K9~twS7RuB6w;{Fi(#@sS)^PTYCTcc;;UAe8ipqZ9AttW~ec(($f%TzU znNisCZU0W{c?^`5&b9x>r20W9BRV{6s<8{YxnNd%5k~3S#-3XZq%ufdqN{=pWTr!c zRDgj5-QHdnib(hWt5M`}6F2Bc_p!l83-_C@xDDSroJ===8;ft6Sj5I?Hv?*FH@G%M?DyGamF{@YACer#Tvd{aMsOoMObKUrr|uSnfaKOzAyri!X|>!1yf>iigk zAeHAN1Gvm-c6ZrBNbSVTfjEuf)sJ}!VXvOF@qM)CMLg3G=2z>EQnRg}L2k6WW#sl- z6-&sNo^tUfIUtxDKY!&*U-Z1sU&v?gD$BeZD9fHLIbTJ(fD?Zr^s)KYX}t?X`t(YR zTE%o=b!c!--;W+%7FmQkUtI;rkG~asD<*ZPBl+3fly~2`M|cxwbFHng5;>@V*j{D{ zXHD6xfaZ`R3M1ZS2Ql77o)|&5MyX{zD#f~zM>I%iI*N z{<6h&m6k5~)c8ypi?yqJ0aD2St|b7DTLCXfes@y}db@nre13HYWSe}rqjBh{=hC)3 z#@RlWHghRa?P8rHO};T2+q@M!H;Veb_3+%%f*9`0iAQ>E@M^_!1yBEBJf@X8Uay&T zOKR18Z@(aFn3xz3xjhM4Fb}CkDiAsZkTlgnUG6*m-GZ4=WQEH`7i2CIm^z}OejAgA zv_mvs@K#??l@6*!3LYwC5(UB~94c0V-q^3W9RHK@9^2)Ugx@%#)=HRMdZ5Ll%-FqJ zYQgi0J(e3-3gp5whR4=;2f@0`E4f3f@JfoSPj~%8lLwwKJ=S^74qSHBmM8(l>pv9! z7}CG_5~xmJ&=Rz$pt09K>C?aL2-#geHrQ5z9~j?-em|Aqvy6-tFFL>sn+jtx4&y7%C;{Wa{Vjsa9f8PwnBF)9s$!d@h+NKkq|t7NfV&VIcBkT7yi!Y zjiwk=m&(Td;c=7%_Kt-$*sK;4Z);EP(DZ?ZPNJNY`)^f^d8`l?KRyJEhVp=JgbfS5 zy)T@k|{!#Kh6{t_=JktFr#MGW}eIMg;vkivvx^lYIdVKj~0NEbK$?4?oFw z*D&U|3L*e<#I1MSfd6>(^$i%?S1--hAcZB@Pj(<+ee~UOuv!*<(`Ej2kG8Yo_Hf?# zo=IV3^TOxG`Xh`+nR!}_c%>6Y@w6Qg4Q}T{=_OJEk8+|EQZFkLfe?eIHM;196V|JG zaTBp_9GaN8E^7H^p2Q#ug%O#&ZO(woMeXksgt`ty7YAlisUF9`fDd`>?GaB1p?&UH z)D56*0?cUXGM-%tmg0f*n*67GI6hh*xP4hN-I{N(Bo1Vzb6T!p$p48;aQy1vn-r}7^6bHAV6g&7=m}z1q zg>YGa`-SAP6sxxRfiL)&q7noVVAK1sraZeEoFLaR(XhN-F8&6b9YkwNsyH1x*zuBY zm5mzId0**~5w*V%@xm*>RkJ3#GE2|%d82E8d+zDCa3Nb8Qk%u{uDYm8XE_b!mm6B> z`25|yd=cz$>FddFPTf3zUArb7q%_!!w+?-#o|YRpjeCyS9A1e-DhQggHBC&MZmM0r zhf)>4hOUY_=+~vVA{P~Tx`(vc^T(C%R1kr<@_gKR7*$Jx#IdkX8gDtcQlpK<*LAB^ z%XsJL65rCBxSyALNy+`!6;Ti*+XXs+LW&P zm=RFLyeyt47ZeGC0>cd#KCO+*=ye6~>mBK<>SeZ;T)+V<-C)oy6C;WUSO69+$VYj7 z@ojleYD{#z4?ct5o8z%4`J=5gkNnEB z%?6a0H;aLn*HJ{yXkLSdi5aw zrG!57GkQneQdYv{p~B&Vma4An0_#Mt%(~KEX&!vx8ihxk&GZzxM;y%nMWncVoO7o$ z2%L-@WR`0eii>>SrLB14qZ^5l7qo?#2M^GJK{rl>j0%$xfIcO(ndvE7D{aAaE}2R# zhEnxPg|ri`x93i;F4ji0J^Bz!GSHt%3gm#Qulv6h1 z?%wA*J`LIF@;wo)dLowxxW(I8KQV$5=pV3!7((Oc;3qIBQCl$dHDzrxElZS3c4x~^ zo8M=d6%?L+d!N;OM{3mxHPB~YnfI|P%0ix^SwKDo&v5gHo95W+<2O%kA^{L3tuv$twF1VaT^q_pD^+u@|n2E_o2!DB8Mh z+ehg!pIVp5>TJ-$(e*MMO<8R81#`NktHGtLKfIs}k^ zeXa|H|5A`zJ51xzTS1TC#>eNH?n)=dZ#oiH0`OB|7oc`_i2Dj^yDqSX30%BJciWm} zRXs7C05e(-(0wAg_b&6WJtDa_GH+N|?ZR-o{GWQDRQ@t5dlXLtvxJ^D8t~sRLoAv- zJM7>2!4^~g>=2!yBtzbKn=6Y%`?ho1piPc9LJRQsR1t$%py ztsT_6k~FKN7aN1owDN5v_PT~_=S_)UQmcLqN7JddxqZJ{bEjzwM3mj|#jUVh# z$R^@L?*%Lp(=9nIgAyE|Ke~_X`QJ=UX$Lj!r{D^VSCE#3WNEc{cB;-w?zA557*6_q zCEZK^&VaQi`a_%WH{1QR)Mlf8dXzyXy#p6a--i~iw@kX<5L(8?;fG}6=(BG#uoU=# zJird@NSkr&+xMjxr{?>ciDrKMRf}lVBCslmUwfUQaET!GFaCJU=sl2Kwmtvx22grH z5O-iVUrJcOm4A4DXf7gxlpGBOKS2@~g5Si?klJaJo6A~{na(s?$>+DK|0W~BGjv>L zoOCm9hZn3ZpnUB3W8vl?32Y9;1Nd1C8jFTV`SgGbN0Q4-PjTS zuS1*xwC^ky5NE)yfaaBCC`1wB43t0{!}|(vLMi;u-GAW{d1U;Jqi8Opt04gE3NnFu zk!fXJDZ)2r&ycAvpJsW~ts3KWYEz#`-0qe>9Ac2LdxJJN-Iwf7&rdp&R>pO4pZ!HR zwD?JLcU-$*Hf9mv!z&g-+d4A&?cCWnG=StpW6A-ib5n(d2r=Jas#uMC$c7?2P-;x; zeZ}g^a1pTfHCjS!gO&&O)WpaD?lmmbnY6HFO0Yeu7EoM)204FXh(rP?0n z@&#EysS79;Rmg5An+`u~)K|8Wrv~gg)_XHR+bd}vCtEE*yFU9aE@>x2a-ft?W0fg- zo93F4mUB1+6O~tpw0o3X>Wc65#Q&EZz?Ea|wL}DA52F8J4^n7S{R0f<{RMAcVU0&ftICvG_Sn)Qy7n41Mos zutt@5%7^8ae&kA}40@N#bR16L7$Jt9m{;sd7e%e{r8en0NZH{d`Vq&}ciUw~g|C-o zMoH^tX)mImm^VJB;t{~ZzI@3SJ3$y z7btGq%c6xW8gzSkc)<94aKQL)lvIDfs4k$)T0Z;gNL}ycp)0%Jg6dbt)ua`a&B=?$ zw!x&}14{8YUcr_Vkt{Y`r1yZ{KfBVMMsd@PD{thJsAX8&AwJzcF5y7zg~&JRi282; zGxp_vYVSRScBBKr=O#wKR6)w!ErdjSy5zX@-%S|r%HU|8Au|RGSYNhx^?9z_zkF$} z;<#zwX?y4AzYD?t*`>wbhdGUCjrxY1DuVjw+n&A#3Bd^weTeDva!-#-qIp${sXz^_7jl^W_Nd(Fc^)x~M& z;~>efaGh|Fd{Cb?`A#Gke4y8zrX2Q)oJvR1dD0Kc<4y8)9N>PtzhMz*SbEn}u52>y z4vN`Li}>(?WCN@C(8+9|J(E2D=NuF>1Vw{)>rwSZB!Z#)M}u7SO}KxTZFzI?$2^!q z>sI;Xd8wB_6py=_zxTq-BLwU8sCJ=n8I?s8@lnG=3dc7T_X5Tz^0?Xd+O2*~HEikR znmtf)=Yw?w8@WOMa9aK`r^e`i{KL#Y+~TwmPXlzjoBsXwB{b4xZr;Xh+jF0iN}GpQ zrE>e`TaV-B!Ba0U8Kpcoq9ZXLl6bg}kgF!cKH=Uhv5fEy?i$ypeiljgcr7CLhRu|M z@72wggdm}a^(;JP#UTpll0=|g<&J;85(tSe=(g9K5>K}w4rP0|qAg<2A&a&Z_;N8s zQG1d>e|+heJZC5{H=}V&0GH|}o8a=8*)BU7{L3jBiJ(Zv?!HYb6~fu=*)+0|AV6p+ zmhml5klf_+gAR*1>A6=KhI=kaKq`{{6)qDRL!KAIx_OPHTm-$|8iGV1VL^Ak2!cby zo|bpydcKJ`Oe0-++$W zw;t5)cNA*h8Yh0RbyPdSi@`!Q+3J~m>4&9WYjQyn{`uH ze}q|0X7}0T>2;~)fHTArczc%gDGdZ|njnv}q@d)M%&d^*Zfz}(;TvDQFN!nsgwSz6 z*Pu%;;Xe64y9$EBmOz%=Mf)&fcfV|GbfAqgsJzNe9rW) zL`CC|JqJLjAyl;BV#wXz13t8fYy{*Vho?=phBvZPh)I=PY&i$Q_Mtk5*{_%Kzn^FH z$XFcpte*3^9$&wDwbUV5HP?5eX2XKcAKu@4PkK_WP~n=;VJr+8GUYRDIqj*hy5c+y z+zyQdeQj!%8BBS+m41p}KW)dAk9wSn8LO>-Ps)M!T?^6bAdAqTZ}NpxuUt?@Ta)#e z2cb3n*l?%0|52#*3-PQ}k_`p|gdOm-O7Z_F`^u;|o~GXb!68T>I0Uy~!QCOjHMj?N z2rh#Jw-DSG_u%gC?(XjHc9*}r&vVZ`?}z(gcF&pF?dh(nuBxuC{?&ee+&DR*sQk?q zgPWPc(urnr!CVW>3(*-@qQ`4`07lJ02T}_JU>{|T&bY1X)}*R)sD-54>W{K-7Q=uG zW&Q%RqJ5>ScqkX3v<_NJl2ET;K86JaPE4AIxbotWo`lysn+U2>RQ^u_&tYp+E1 z;CK6VB`~`RM$p$u)l^r2XY1No$4af}+u}@U#I8^mPqUXi9WL6t19VcKpY{OI?L$6L zOI~E&zc+_%9;YiY=q(v<{ConuJnY>t7^#7wQeHsAB6+{(Uo_&dr+){f>`ve!TwvN) ze)TvZ^7Q+~*HOb~7P~il_$|q}*X15E{veN`%LUMc z+3rpZU&&R)*<};M!phlW45PT=&B>NJ7U1--T+h2R^5FCv{_-YY|FY>j0+8FCt1&Jg z0!w6(7a6<%9VhUa_Uy91ym5M^7wSx7uZaybd=zl^5d=)f4ZnO_nJH05DLLpl;B4w0 zshdo7GenBzg8OW?;D^*HWdgbFUDiFAGdnFe2uJHS6jo;sJ_STP(gd3SRptKVUc5E3 zm9g>0Ey9$V{`>j6K;=y#B`@Kj1Hz@w<1IX{X1L;wkX39PeeDctEEBa|MJuMX4bVQL zhI_;gl;Mqmdm9&-}5!X!1(#5Ow6uX~7h(pdU<5 ztPA4I>r#b84Yoh-GaDuL4O<%SD~yC9is=8TZtsuLEy2xntJ|+pKD!odl#FuY<*YW`Qz*{+IqUKgl>4>*LaDWFB(fg$E}ci^Y|#_hez{d zxZ^?pNYR9cDM4xa3PaJN-pxwA+@X^c}7unz;h|a8J{0U=Y{PBKNLDI{JHLK z-t-2(^hp2+4(p!#9M6aBkHFrpdlv~e5vbm_=@e4qHn(&PAyR>*s>a)@e<_4yp^YsZ z1x-y1rDBfYIs?1TxUQc~{%$+Mx9o0& zZoteGC#v-a>+80piiK5v%uedHRZRVR;f>Jq%65PC@(>%g6^OOdY|*^|+5 z)W5U068VS$f+=72wyRZX8~ji3T@b9cpPk>kEQ`6*VfnI;O=_-GwBflMOJA0C?()Cj z2bPaUjCjvZhiqMUG_Wj%asKi>u^?@$mIQv_r5tgSQ`!^jTrpIS z*q}J?lrqnepsngafKInS0BvkI)sY}lyy4v!Fv7=c$q7wy5PDH97s;JzF7FqoKEQ^b z>*V*cu9mN1BK^jQJcAgMNT?Y1hpt8aui;Ltmx(11&sM>-n~P#;Cl-fW_13iLtIqZ0VJ_Aj%@M8~abyk_DaLn6Rp zVV`QbW>F<3?l(j@l;%7~V__%5??uUAh=?Oc3pHcYX>RJX&fJMbiIdh@0vGH#5I^E< z-H6q1QltzILg(A7vW?;q7Y#D8v#(ShySz$rf>o{Bfk3V~_F?eSXzIgqq^D z^9Dfb|F(iKh_6V;kFT(d(jO{MM+e+?~#^!!E4)^}TMzft>dU`77x!r+7ULEk7@Zt3XlCKd!EmkbVtQ^WJ>pwn>5K z!8S3(y^h=dQ;Q;G(Ssa`rz}!Auv%}t^PEh(QfJ- z!g|ThvC&7=vgL}fAmKpQvP|<(yOuUR-(|ztUV04e@9lNu!S~`(*6&`KVBU*{&s&jO zzh&WObx?2v(mAAExv_fNKyhAmN(Qw68q(|(7-Z+EQ@U(Z$WW?|Xx_#P%EL4e7ED&z zZeO>+J^i&VS=b^o3G@wRI!Y$FCDkNHOS#4UbV?q-!kI z8ueTFv<8{I8`)WPY2A{R?viCbexn{5OAUM+#s^CDwcr--`*GH)+*IE8>rYON734@T zHwH$!t@;>ed(k@tdtJQnireg!qa~lZKSNcp8VoWQAwBIui9|a`<>|Pn^LALhMMzEQupp&&eKYIJ zfv9Z%AF&g5oi1^G_3^K!>CkOY(^59w_Nx&PDP>cRv7e}L=-{+SpD!(kAUdL@yeI($ zc+tp0YPz6Llf;IA^Wz>(Wzk(KDZMXOzrL0bHU^Q&=Br$njlS?7y!!wwNo#VAdK)CS zSomu+e4k+ZR1$$_XHw(Y`Ktpkh~uVMS>fX4+)E{5&b_VJ;0)xz`1~X!KK>6TIi5qFMYm5od{a9C<5{wZBl5? zJ|2Q}W5T(<$E2I2u%cTTU%y%CgG8PjSxz2jz?Hm!13P`~aW{0&I}I>k#6>RnFxQUs z#@{;lz->Hi!^xBTAani^xZ>=4TAg{ii|FLU5)Kr$H_xQGsAG8cKY?8ql2wAs&$ z{iR_l=_~B!%_U)av*p@(u`Xd&aRT0wp2l$yE&J4!MR4@!pagc;=EKrHFlvC0Y3;~1 zMD}Jb!DWdDXS|ZvicGdQNic zQ(YLIX@+v_8Tq)IGAK7JucBLk~P!@usV3JmCE~O_@np>@jDNlmHP(W6Vgq zg#NH1+)5hKJH+7CSo`G*;SNaT9D`E5| zfaT{n#s0wnv;=8=ZOqh6Oi^R9o&tbVfwTN5`V>jal`^-wt}u3o)V|;UxpgYVP!(Cz z9F7I;=o2W~r{Rk=!iPI<-t2;)W`>LThs2Z283Y%;CGt}>-H}L?reU{2L=W$nAMVN5 z@4(={M8k#Q!=rf~Zrz9q{wQZ#SSeV>SGH4Nym#8$HPYmmK>M)>Kl!Urp>-hcrwiVl z1Lb`N8nt!YV|=_SL)T}8Sy4%ZKkC14=>EK4LnG2qz;MhY-+^vvA_teV-tB46a}^`r zF|sWr-yv_QBaa%u2yn+$M+XBUQ@#QsN6=9t_`)PE12%G(5H*lg;F5Yoh*|qM&?!kU zm1xTdHWh~fC$4X%2d;6w@c<1a-Kh+XFV?R}!RexcrZwu9X}hHA7+uLBz^7jY#uz`W z2-!6*(+;83qZd7ySXEj-K;KHY6}A?9XzlrcnZ0B&<}wCbnTKvq|6C?e0FocAb6K<+ zbD4v!G*PQ@xMHlN0z)E)zd|AtsbfSt7K)+-^QDQ##M_@mKr37U;7Wf(8%807(HhPbTAbyWZx=J5!KNcX>8|yG9o&N%5+xI99|F%@y^8&Di6H)X1DC943j(-ZDwjm zY_Rl}PLI|Nye!vrjxsK3*xc z4_zB_&ekez^^t-mao;6X(c5e@of^DvTn&(W3{QDT*h$GW+)L50WhK!nRZL|tl&Bp0 z-KxtX^Ik2;=Y;Ti@Y!ovmX~%MnXoU?OdLOk_txrO4&}OeWttr|-jw$2c`xJWcdHI} zbf@!zZtEi<*b#8rkzU@N!&t8ekqMAj zjpMg3LE{EVU7&VGskI-EBh)nJFI1{K1}_XX)n&A&rqQUw{mJlaUCk7F*EXCK{DCAG ze6gdx$CSR}3HosUt7Nu17RBW8a?EFPXFzLgz0&P*i|g_xjDl!R=K+c|czU%)Ec(a@ z&wZq&X^(G-{uUJYnN#XJFkK^94;;wnSme%5QFT15@K*V%aGZq5eh)Bh#i7fNlNr-W zTex$Xs=y$OYYc$&yYO~TTA&SfS(8q~LjYSLQ5sHCC|aqIh{e8Gh4B$T(X-g_o|3&Vyg8`eKz{BEr=ajk^F^X zlT8%`hSAQFl5Z*ki*hHL7N!nRG8SrlnCm#yR!&(9uRc-617zqiVkrmmFX7S)|6|0A zM(WxD>R99*r$WYH)`y@6nu9R;SvmSUOn( z3))8YPNGX*H>6sQ*L?5d!&yVL*twN6JzJ;ph-|P+m=g>2XeaIV6}sj5Sy_?O?=tXt z_jAh;)%3x|cmp$za#j4FS zw{n^w1$PORf7*0I6(C2DH4{`~T|RV2(4vn%NB<_rmhEowdKj%8DOPjfT#(xFEi+M) zMi{{=&>Ed&Ptr(G9IcKShV7l7h2YrzR!N4T)XvqrZR#hsPYTo4C5gYCD;iEH;;EX;UGy~0P_imF3x0PWA&wME+A1L%tHG%!F%;3F!~wE`JR-`lqg|q@@`~0w|@xe8T2`^BDfZbVrBXM zMB)4NqBOYNsf#B#1T5|eJh}26TqC4d)gH|TRSoxESv~*g+w#cWwu__RQ6ARbUXncn zCU1UJCI}$*Y#xqpONQNGbgmH7IV~-whg2SA4SIl3P&VOnQ$sg|1#d{%7|Ii$cy}jh z`fXg#E`5j)bg0h=*f8ADS3Y1=kK)p$#x&*VqX7%2=o?<*14J68pqL79I8`c4&%GsP zbpf%yuc{s_xc^P3-_`BfEx`@WLK?W1#dJq5)K)eA$=#kh9C8V?C@u=K58)oXw3j!T##@=ggf zIhf+wNzS>y%Df(JrFe&W;l(Y(BTPF4+c=9DE$eM2U1(#}oItkzh-;W)2Z#mxch~SK zE8V`wU`Fs_%6y}GZ~GB8?bII!I`BMamHux%0i0I-m*0UtTvu#_eQ#s+i0v^t}qIQFn3kv31icpIV+6X|BK3q_c&57ZSx;jF|e{J}A}$M`116Ue1+^-gY}awyMbgji``8kSK#K zWI;wvD~&565|iRz`e{r<#077a;$OYFe16Ja(b)&gGc%O{h|B1W3;8YkF$;LEv(qjT zc(4OEl;^`s>}SMh)iUX>Aln~xsu3JSh6J&{9=+VED@P>)$iHQ(n2^0UAMgt_{;X-O z0FDoT?&IS0!C+>>lYX^BF%JlT7FBd@aQ~j}C4m`>Dw|*t&d3K*9@C-_=rq@kw*Yrh zGCQTyR1nS8p64l!Z$b|!9n@hPu*-k{hP6)t9_>x+aNhGUBl$ zQXDHUX5_b;A!%%3?plndR`Z=!E!I$C4N*GPKvP0u0Kv$0NjY{|*vyn#(?gY0n6+5W1{ zIW1mbXqg1vLK8;Q@(&DtwFs8*ljTtwph>u_eiA;+A-vWpexw>X;Y`|K`kk~PMDXiUbOOKaJS!T~~=09*3 z&^0XRn`%h0y?#D5+;dc`s!9A%TKmb~fpEuz9kt0x<5qqU(fw0x5%cWwoncsZme1{i zKi0a`1_-EO+5W~w*W8Wa_d9d5x;d0X=hQ@MK`6XdM>EA(ESTw2Av1UV1!Z2a3uIwD zC8NmS-0b2(6Yb)O#0v}x&T$2G^0@5YS{SUGJzX--8sZ(Ry_h#k+1r_{5tSVm~Zg|4uf_ zg0pcWesBF8J<*`o^^h_jZRxq1cbnqRWEec_eq+(-8VD;pC?@$=zNN+l(2om@lb`S% zbix+eh4pzp@Wt8!*IObmISBW2Zo}e}_P(nhW`>y>uTu`Ja)$Y%J19qNbjgx|`I#%Z z?aLKNoF znPiLLb`^_S3PQ=%6}R>~K*I!}>BBj8M;`=Z_dAGw4}Gu2srV$LsY2*^PiOL{YWL99 za#-PpM@8C&QEMw>!lH#A(99_TF8qn=ppQUWGBg(vrR_MnqV}0?J#YeDOHcF_o;yF| zii|q$t{=QpCZUSI|FGcR2xtrJU!V8JjfuL(A{w?V9|#{oqm)Du@n~+#J~BUOSwL++ z#!`(>^$cMDdIFUx9rNd$hld|oIF<^l?#lAIu(+Y%Wqoq|Ax8IGb2M?c>SV;VHNe#@ zm2-M@HsaqH?aun(oEBIWmZCjB8>BwqZfcOnHuBafp)s{@X`&{Mn@&x#GKRYOM=K#C zrtU{9N+&mQ9E{^Az3a)!`WnsT#JSWLB0e&tlfO4wJ-3j=At9LKx_6KWf$O%uZX0cM zJVb1pUjYe;rY)B+syi=G#1TI_BWRRWbj%v7!ktDJrdH&GNJN7%95}DXMq6|=?secD zX|uO62xa;C9xrvP@o#cBI^MlRdV0E^x(u+^Cli{_3Q<>2_E-!U71@FWPHM0l+3(J* zb%>rHPx(`>0U{(Soo>S1z(H-Q@WPJB_z^9wmF+2 zSuG(TPgoM7Aoq{wYZd9$qbpS#W&9f>Jn`{*bgH?lT8%XeJAv zjSSsGhTJCme zpWLldokID6d4A)heE0N~%cfig**WL?rvy)6A5ghZcWpUcQMy*TzbTG3=E{{lzfgL( zkpRT1<^TfojTzQs#U&rQ?{6DY_beSnXvZT=k2YMD@z(C@c}p@=4z~6Ch6y@TN#GgT zya9539c~D#=(~DEFX-r^BLLVJqG=M8mG+w5Wzfk3<;u&xH=2Pr|j!2<%lgiqvh6y(z#J2H~IiR}LQC}`f@=Q+&G}sq5H+%K%S*E+hbxeN?P>3Ei zegnYJyzMC;bR1;aFTa%48NGZKRvp2~yd^i~d#W4zBA8BU=UR2xpyroI zt-Fk{H!zv`rjW2mS=WMS-993CwD@|re3#Bu>F2Y)#Q^3sD}V%I<&nW%bzX2Q^@q}~m9=!)zqbi7Rj;VJ z2%x}ae)w+k;Ev29=tID*MGmn(#DVJq4gSv?GQ^3KTM4Jy0uZQSUKi-c@@Vr@gjye( zL?dX}W)5|XOo9(sGR?1Qmoo>-PrhHV_TixC9!&ULm#M?+px$aQH8jfhc;3VTcQYq1 z?`td$k!s-}fr1)}Du%NdvNjt1W`@f0}>eo#7f-uBhpU@-x~8LBuz+&lbYTa zqzovo>)A_PzR}(etD7cndZjo`a|~*dFq{LiuIdT>my~c74nQTKGm32Eox_h@`l-yF zX|wB|7pQ>9M$b6n{sYXKIw<612ne>gZ_wbd9g2(<(hhl&t@)p6pW1BmPgP zM0*D_lz*2|t9vb@X6GXFe^pU?emIx_CxzVPKYP$vNn9k`xv~M>^VIR^_IY%J_D?rA zEqqVcg$dg`Ezc_xc<}0?mM^jCe=N7Db2&FHv`V}1q7=X$PZZ z>h>MGp`FWcI$*J13qDULrRT_ z$F#ZBS4Gg%;jXoQeEGsL+kmlZX$VMf3~?2B#=^yY3`;eY8(=l)U~yAu@~HN-s}4Ue z)iXi<3eNDqali9jy=6cY-Ff_OLCy3fnCr^pb4F?;*)tl_vi!#~?_-_{9;-Xf#O82n z%+Kmy6~VZ`vf`J_d#pD#cr)a&kT)xkrz;FkrigNRjsr%BhXNp<*6DyS9KLqW|0K2)a3yO~z`Tx_# z|9Xr0adOBr(R7{lmb&!>(h&&=(SAep6deOIj0GvpEP?;1WR2@KA^VV@_Mhfanqj3P z7Cd8VW`olT3UyO|gNahW&3j8I$7}VVR%OTzq54hm~&-#h$xBOQWGUTevfA#(y(m$Pd1do5>{iD+88Pn!RbRR%Z&QwjVlxhdsR*{_$(3gGw5^2=UT8{e9y5ozHcXnXmk z{_cJE+UO%VP|3nSl>}nq$Na0WBK)NCOM56g;3k;2bN@5oxCD4)LV&?VVmkCh@688K z31Idwfk-VMfA^$h=^C6$BAxQgM?5z2Mak*jfM0n5wEoYqz_*nD_gibZ-fz1(!!H!Q zR-lt{J~X}IyQii-8kL>OF~0q8=72|K_Da70dswnl;8ErO7q_0uQVT3)&n9?eo8!-# zkXqYi74@*)1pgm_0@EKgt`Gqk7kCx1S8k(U+Y5sGDa=2$0OpA8J4H4uPlVG3FW!y} zFn9~UVYZeIP&sjWd?oIaA>)x6x@%09&;8hTpP3TtRKkz`O1&Ro>Paunp-dAURW`ak zMZU^bF6ljv>3+Cp>9a}h*3vf)3_YqEcN zvlr+omRO%jG+D<@cT#Mxm=?Ls*z5$MdTUsU6au_TAv%U*H2+nO@uuuwZG5?8MxP>h zdL7zGZ|Z-9@c1y`PSM&;>={GJ0rOB1JOh**0{910!AjxW_)PK710^iKq3W%v?SD-e zGcYJAhAFrg@L*k(0iJ~q`SaHp{G$JomAc^nz4z}eB>o|KDdL}JF7#j>avevDfcyoC z`UJr8q;VVw2|FW*!-GTS0&v6Qekp-x;w5+{Qsyt)8GT9kJ#-LBd=SxfIW#{k!#3O< zzt#C`_eq|~5G?wlQr>$XuKHJe--oBabnEzZ=9pfU9@#J{eti(d znjj>`Ek>dUANM6>6N+sd4)RG&EVLTkx&n-&j^~WcscQ%K*C;sL}SU` zcjGP=y__t8;lESe1x6A=nRXW5nWx*J!rzR<@&B4Df~^^h%0?An6XlnC%RCaJ9QH2L zkgYAmv^uqjI*L5WtR8CP@lKZi4fFF8SN^3G2ltm!fCuR!{+UGJ4bDd|&(<*}u10D4qBg!Z80_GjMC;1^( z4dy6b$mizOglJM*yFu#P<;37|L>8&6e7YwlP@l7FFc|zys;u&|2fZSj3YGl_9#Q7! zCnov{qD#m<7&4Oi9?A)#i^x5cSznRS=mKlHr?aUq6hsSYNs*9i+t+;>YNbj$;~^au5o0G zH#juW#U=emQ6!T6LXV_6{IG}&WzyXESdxjq=mHoqq))u+G^dt|o+_k1i@i@{R*zuZ zibtnV`Sa5<-|%`qR7p_E+A=6wvr?;hehb|~y0E+pEsFMG#tZ#mf*Q}l3&%?Irb$#p^Z+ODh z{P;6q*wq3~8woF~PZ-p#vs@>JUwyq!ojbVhZJUN5tG2>5 zaTXvGozTM%^92Jnk>s}$|3+whkA>b4{)5-NyI+O6ZBk<1KY(@mAoB94N^}5MZ~~nv zDgk2T=)mxR^u~J~tem!y zXXn*VpzvJ&IQusxQuaTyu93pVCjQ%BvWkzUufaH-aTQ$)8G#)>OK23SX5oH<;rnh;=vY8kRr+Lx|-&^ zzp$zG@2lv4o-xrBN_HDMz&8o7!v4jeDe{ZRDe_X-pfqab6?KO`6-6M8C$i}bMMFy> zq=ng=GHQAyj{W0t|Bt}memWEJ@eRzMwvUlII=R&(gwD`E6;cP*xn=xO3&q(v-t^kk z5F1{Cm+HpmbTXF1rP&ylOMlOZ^y?LJgGFikoNpb^HoBKf;pz_#jgH4-T?1U~K8wlM zX;%4$raf8a@x=n^c5Ps1O0Hyh$v&gssLs;vc(^vXfjPXwN@&A12|DrMfybW7se}t9 zU2|}$@T=8HkSd8-*Q>J58v9ISTG>iS=98o3VJE4p`eiLwFgNG%=|@C=$Bz@cFe9c| zl8dH+=ozZAuZL{he(B5tVSV!( z^U{nQOe0AC*xmdnr;f8+q{7-SsI{-H#>cF+Fdz=N@hj`OT&t8>x_ zvxJVlx|-)5m`ZgJV{RC0FpJ$bAhQOtWb!xRJT)a}slNI?hWUH1m zp1m6&8tNSH?k0+au9Ym6{Feb3cgBh926MLTZ_b{9IosGuxa7y0y|2Nn-Hdx+Y&tyG z6~L-JuJvPk{&Px~K#R9Lm$OxcbkIPxeif!Gcf~s#!-E_W13Nh3Xu7)XKnSO7so|<= zd_(en`46_C<>)IJpT7L0Lfq(}0z%vw`-NQmnrtBa(8=dB|FjbKzq=jmTBmrm`Wn=` zs|67g=kR6Q@`&|{8HeHW`j?wHxo{vJZs_=(GE^SapS|#mFfu>gFrf7CPjz*%StDV^ zq*=h3Qri_g-a?Zi_?bDa+_rkpTH^H}R)ft#6n@NRVzcGMbB2j0(~4gJUcpw95wS*6 zul03og8!Om$NC*k zx|7Z$G|`s%#OCxFMyzf0l25Fz+E#Xd?xIi$E58$kZo^#-3q)UndtlXK9dN>+RW^}4 zRO?>R(yK43)$?&!2Nvx8HWR%g(`LY2U>u+R@3+;rzz;hlSWUbk3`04 zIDmSKWA&;+vTs9$Me4%!1(xLoy3;F4a@f#{0fAh5K1Ar3s@W4$2~|Xdyy;M=q`AL# ztE)hU$ii(FD|6}%+R8u9!cgLxHR1VJO5BRToCfCFqqB#kIt4g`FIUUbEJY|*aQPrB zK1{#|N?TsxCiptdhss~cTlfp6Gl~sWq%UzeiZIQ2+ppj)>bFKz0>pu&2*k>(s0wHS zKOxbH@AB@a5%ilS!UZU>2^}j&dZ6~PrJQ`W(w~;KNQqQNZN-7R6BJ~VnBQ#YQR4p!I2JssA;fZICQHtFU z-IAprcvG}XX0A?HR7#zu4vrpV5{@k64-*q@yD(d8*AaBJ>6P2Y?fATGB|PAXI>G@O zZ;WnCl^Af1Hx&oHVd>_#b?XQM^1t5DBcLDtM0^wds?DjscnvgkCUAUtOOWsS4FSFO z{*<;DCi9VL>MFeKzRs%3lD61AU3G_Alo;&mbqzyVL2<4xs^ii4bwHa@&cvM)H#er4 zoxDfQ)vLOJr;3EZ?DxMub5O#i+W^K*(yd&_=r!EZA1I??o4O72Lp=kp)9ag31RKm zELi7=-YpEyWu~nM8qFrI2a}5*#*~OM*kPf0BDt;S#8<6?kG3ejNP)^_=SD5T6K1fx zcF-c!fI=?_66`M}gxvwXgWZSnB<2z`HL-KIG|HJSIdyj(#pHyc7dcMK4DKJMYI(NY zj@|qx9_K%d%vAO0sYNt?id}JgU#n zNxpAtE2$`K!*|xTh5ISMro$jsa|ZIQ^Im-;m1V>is~Bwmu0Or|skJf8*!=PwFTHKK z1A4g&)HW)F**{&KH*nu{23dQBykB_}P%$s$(L42-EQ1ALT3hd|(cM>Tdj@|?FmJkW zoQ1i5oVn--vIe|@@!!?Ogv)Oz#9uA`gG&21|beclGruUHUZnp1H9_;E83&@+-x9bnFg#x3u}@ew1lRv!Fh2 zZwGymt$U~hDcD=3279Xz=nz|HUr7!5#=ijG|4<|}x`gjBr>cNE*#8Wckb{(j3jc-@ z{P7Ns1D_0zNhA$b5UmG}=9F+mj--bV41XuL>5GQZ&)J%;3l#+E2N%pCCg<&RO%=(S zeV{@8k%-Sn2*O4Ct(GyD&JBA}5L|!6tjL?K9@{q;zT9vh;e;+luze_7@qs?D)bfI* zR%X*X^1Za5EelL+0F{`Gx9}#0Gi5ls+N;^v0Go}M!;_D8e7z9N>`LA2ybp*rMn=ug zxQ#?aVLh_qv#2*!LuoeE6CZ4X)fD_QbFAandhy1MIU;2rk!&W1=9quUjYOtwa0YyX zE%%J-sGS|J6pyglJ?#fbdsio-FTUZlUwYYcdg$R(5?+Z8uywtO&WW}!LBc6HUM^(s zgi;nR`ushJSOJMfFTRi1TZT6X&wDirfq<4&fP2x2~8@BAEvYlEPaaumFX#d#OY%cD6jOXx6b_j z>zGQp_ApCvDM72GQ(N@+w=!saVg;ogUJLO#_vjXaeN*Z(5S73Bwk_-U*1rQW-8EMt zfjxbG4!mezKA9$_=*Sa-7oi7C^c94ckZOM~LMsR_BGvw95qfYob)U{m-x;v`zO`!%&S>_iR9lZS8zne=%L>^QlDCpQ$^At^aMBt zxsTE_9WjOn`H=$%7>5e0x^e%m){DsNVQVA@?Q<8lmg8{ZdL}3 z$B74buxIr>>04~EU$li}YX9=|te`YE*$({xdw7Xgpqov$)eCxCBNTK&#e(LTMHm&L z3lAQ$nl=t=WRluQ1BNpA%%7sz?NoYwFsr4FP*x!VZB%IDnHbLOXwkjfKR1LkMfgmj ze;Jix$&gW@$umlHj!{7m9}1F~NKDoIo+VtSBCbd=kG?Ug!dt&FcKi@FH!SXPx7h^@ zo@`4wKRUBa8*B`OK3H_42=$*|JZ}cz9fh7+a>zHPvcK`pi1pPQrf^oU$v1V>GSK49 z%Fz{BN&VLH6|(4te0IK^Z&ND;fsr|3vN{=3V#*>aBA)GKorA><-=-yLde_A&wg*@2?M?EINQIFDI zSmX~OV!P1&Lg0l6_9x)=sqx=2E)816yMmetd}f@^j@bMg+(VDArlm==L3$r@WGgbH z5~#RL?;Y^;JXSR;XcIkoLBum7sOZkT{cUm6^(*e)K6|9$ISi*(fmD%UA9^UIh;HE~ za?R4o*jF*D>Z)Ljp)jP0Z1nB}eK#sZkkAvG8})G>N|~E@h=M$ z+Uc;lvXmr)8FnAH{LtW}zAUB`Qb>#(kN5_%G!OfM;j_s#!0q z-P~zuh$u`*^Ii7i2hQdB?qchsw}B~@6iAavT+YTtF);fF#~wN`jTwDc(?=iRF_4s2 zb<@CtMMCB{fxZC+h3VcZz*NK(4j&4RK>qXa(66(YT5Cl@-OU-QtMa-7>GBxEDH(}S z&oGNa*=iQX!x3=((?BBGN15G&Pl4sZL(DrKU67(qK0&(infG&eP?5}Z4F(JqCf8Fk zS|{_CZ!-Nj=^m98o|2kA$w?_E@?NBT0wGS^9-6E7kGFr>qP@tw-b=WD6i+PS-Tp?d zxaru9SZY(#2z55KI#70lWAl2=Rwbi5Z~!}ql~Os@KVTaPSv5x@aIX1OYAWnszgV!? z4?SR%aH%%N1;8#U+}|#$+%_pP#%!i!>1&(;reB4~^P~dl_x$pX+0TRU#+qwor(H|8 z)D}9J`FEpp`Adwh`j$V(-qTWdm+i0L63YdGAOm)(PYDOWP6RL5iI4?0egA&^O&{z< z>{8o+e{u4U+56VO>w4Kae*`NgYb#9bdVZ~s#^XZ!xwX+0#|PF2l@p@7HOMAH|6?c= zArew1#d&L9kWo7aF66*_DiLWgQqgM^t9bO)?PZo~zCV2cp=4}JYFSzBJ2L>O(a8f8{|N2GiTU8+v}kw6%Fo&$T7PnX$yFtcziNVl>ee0v1pUfX;vj$N2qc!hD2Tsi$38*e0(mo@AN zzFwe^V^sC_?IIbb_=!HZ2-bL&U^n=~Im+rUJpqyolS)X~%>N1V#)QHGDn$06H#jHn z#oT;tmy_140#Eqw(dNfbuFK3z`oFd`Teg~6r^RNU+?i-~ohe*fY<%}P>rl9+Eo3a- z+ON2x-WNxSVzUn) zBhlt3j2BVmU&YLxTL_*83`33~v+);YkKgdfy_J}|YUZ}0XgPin3G&V{BmZlSo6w3A z2aoUS{S*E#0f$e%>wWv~Ujc8u+c)_365pEbu!4aY5P_pz>c}(mdv=FT=9tWinLY?@Y+TsWsp2t5lOMn)EeO>Z&z;JqkYsb8OD({!@}Gb6zwBOdgJ zRBJ@N-SY=&*Uu*urtyaNx3(F#Yw(&2Loo{tWmyaacQ)nCy-MPJ>Yn#B?p#xN3}$-| zL+x11#++`?25~-=$p43}zmBSEYu|ujIweGqPDN5ekZz>AI|Pw#$qg(*x}=rv?(Pn0 zX{k+jcf-5%ob&sh?;Y^gi_h~{ztnaF3@3x3zaVwGAko8f7$y?CgrI=mnGgf%Yti7nwH**;#KG%W@W9>B>Z zAb{rh#lhsGHJa<(l&4%Idz1B{msd{{=CbsT4qRB3#GI`hf?_F|)q`423K z`ICv?lcXTvX>Tq?{Tmm+1!+qFIVQpA{!rE;Cj_24grkK-uluXJK?D8AJ^!|}5S{VH z++;5T;{zPoU~W6~Gry<1qbHA>JB_Mh!N)T|{|_!n^iy=+(H(YJ&e2^@PxyWrb1NgY zRSN92XopQdZ*eNzwZUUVBi+*TRw|b!D~}(Q^+Tksi%hl$)BYcX!LuU!o6yzEqo7&2 zX*~Ue?Pga?c;1>Lq?)UO7C`|Go(hIPt3>f$$n?8ohk zwSkdmTU`qGV>FcHUJiil7WxvUy5LfsXw>bw8&3zBm&1LED9__LBF|>X0*BajS6Wk4 zpA+g-8o^$_)b((BrH<_HXY_f^uO-MiT|}13*R6VO@1>`$@hyv-(Dh5a!aui<;r|w@ zO=12e895KaNp4Yy(M-MH>CE{y5ZxwQz;Bu-Rc3JlRn=@nIYtGv;O^I`6MJ&stx~*8 zFZc!RiNUcm-4X3b0n(9~jo%ziJiZgSxozbkB1pr3mq7shmVEWC$^^0_Lbi;BDB*KL z31j<6PC$v@rp_7#oVIf9lDHY|IyxP2CT&8`*|K25OFEcX=M_UX9R}_xd3WhvC7qIP zH|ag#kha8UUN-}amqlUY^)XJ4CjsfN|0NIE0@*S!$c8YvTEHO{ z`LH>c0tgnV-NKI z1{`@wNA;p;&>odtlpNT1oO^c>Z&3UHH*`#KWL>D$tr~~0#J^l3e@D;zo5aq&=|DpZ zu}S&A3H%v<$ENqxymi|^VZKbYd4Cc4*#{VamJ2Nm3)Zz<0sDuh9?HGWBsdR3P!98X z|04$#WFYHbL8QO>A321RTKy*nz5kWNzM{IZL^NjyT;sU~-I9KQ0 z29dk#Li*_T0*CVR!er&;9@ITR{u|hn5~IJ2HK6)rIU2VSE|FDx3V9T10{^>QVYXOv zUV^Q|MS9X-vOGa$GJN$%nZ^XfK9#$QM7C9ry2;de%n0B`s!U`3P*NcLk(|g=nv9ZA zm*f>C_v`szij{y#N05f5H)8Nj=MJfL+fVx6aYjx|zQ*z3_v+yHp>H~O|9)>~OnG+< zaD-jbl~<1HA_N3d@cpI<+V8!0gr35l{VR`SI{ZJAn7%(t-+|vu`)7?-9GSp8;%@ln zkJ=0g;uSeQC#m{6+FcLhTvUQu_6XO^YWw-s~A1w`UzsB~KxWkQF46@yNOOCxn z|Nm1a0Mw?F1L283tM(6x&L2AnfA|cp+U1{B`=6nEv9-922tWGMV46o|&CXE|km zLDG&)j93x8!Cm_NLX>W-I>+FTkn=YkN1j*(Z-rlFsl*_!!OPpee|T4?;+*%2T7;lw4Mtm)iuGK~ zsAluo>fv|}elKCUC4W31f7-!%Qb@r3fZ-0LJ#HvGot8bJ83EM6N(v-O&Xc@bn67>_ zpLa)hr*FFtC|B@bXr1Rlog5BXnJI0KXtR6b_oZJCmgC+KZmApx0amV3d)_(@ZLH_h z{_Hj%xSgtM_**E*_{}BX9n7MQ&i*){6N&nYYcx030{EtWBlYQ5a}>k&l;}uL6_E%0 zN^JA+z5U~`5M5e*z6Y7nZ?#Zq3VwbH$ibJKRx*28@mrGt-F5~(#x&^b9eG0AH=gOa zWv7aD3`w?a{L{|?k4{Nh1n+B~Lvf2AY>c!#LQX_XpN>H+rn9F52<^zp;@Bw2_Qls% zl>sPhUB`GqQFsF{Ap$hUJ4bbn+Nb~kDd7ShM+EO%WCi!^?^HHNH|gbA6(Z&#CULni zLETb|i1)@_RiW@URXRUM7zXYf#}Rk&HJk#}h>k_d!UIZftvdS2S`)~z0E>gG$tbZFJtgf50Dz-D&#>FKm0yD(m9)ksTZ~{!+;jk%w-}d zD^1;X>knS=<|*{T-E|x|EYhPwMYz*-KloXS;Z!7b9$)sT<+z*ucKa!R$~9i5njdgO=XTTvn^7-9*15K z=cb{0dNG&|H@U8}!|fFl6qhb!t>-c0Ox)`iBx@HnVt^X=xfn7~YInT+e`x(|CdkaG znsnx!tEuYqw)H1hFZGHKmaYm5Y)!}KF5D3uwC6|n@Iqa!4^#ErXOC}XAMX|z*H6zr zo#I*kbUSgLK(0g*eT*_PNHl_xCmLL1=oeb+_@$_;y(jYS-HU2fy;qhn&0qbY;ufPw zd`v|Z<`5u6@pY_GVuD4SA}5k0MC^3RF2XnZVFRegft~}m!4QkCl?`Zka%(2w1v!(97*jz#9 zrJW$>$FtWye(^OI&w5AAG>8V3Pt_yS!tl3{__QlwCbX}fe-gU84(5tTLp#bMRE~|p zx(i&RIrUqkY4ZVl3)dh%&xw@)0>LSruP2V}SKF|(BH65QSBFxQG3&gapiJEo5vg7B z*GF8jLanTXZG*=HEbdRZI}mxpU$3^uwh^X3uRqrO2)5>i&|t1~!Xiikj`PF! z(90#Dt?Zd9nhrA@L8YJC*BFA+%O6pykI&-ovCz$&@qP530g~GdH6O<2=DJK`GS^~lD^>v1VPAL68NsY~v|+8Si|El!H_s@o zoy1vg9;5%t(I%Aqc|Kh;Tz3%>%K?0iLhub`Pv97X)xgfNBjQ|Fpa1cSgSch4 zNDqnqf(uZP+JSwd7vTstCsDox-vOytG=cKx-fYiZ`1yX)CMkLzNXEMm%UGLys zY5f6TQ*jW2sI#f)L&&OH1+e`iiu}tkR}9haaRbrU3b2_ zZHRR&c$Wy?{bLO!}JG{bpVs;9@v?v;?xCmZy%xosXTt6S(WOx9$)|0^_$uX zWR9#%x%R=Bb~PW6xfn}X6N^%5V-@NaVqSQkv1W6BwGSR4RDi#Ze<>D{z3YV`%sd8L zSWRXJny_CyEC{muNLPaFCBP2-43yuXeu7Mfb|W4a568P171SUyXH zQwRMk4h=b5!YYHvPaNC=_;6{j*CU~P7r$ET?o*TAaFGB27#LPvML^u%gvif>dI?2^PO z6Y#19&F#_~h)7~D98fM>>EiI!V+YWegk(Rk$DMuH*yu7H-KqGM9DZs0Z9)Y~K%=@H zZhuS7B|p{8K!@ARy1E^X2VDeSDdQ@DvD!B5KApGM`-KP3*VyH!=ZKM@+JEvN)CARj z0p#F%x$3Lq^@zHJ(Wbk*9`-;r^Re~rWkBueb)75Mn9Li!T;}|T_+{Rsjmu&DiEPZl zlRX!G%kf{h1qZX8JC%{J$kW~tJimshA(%PUS(x#IWdq*GtwI#F)4<|KI$VONEvJaIX?1 zGW^3zT+mE|SbALWzWDbWJ`F}V|B^Z?$DFTAvS^m14bemk%0)^cELS+=sS88j)a4o* zTkbj}wEQc$fBNPO*s)toj~u1-dgt@#dn?DPmu zx4iPiRmaHiYHuSQSB_-@8! zdi!Tw*&c*)Z?8pT6)ffkU9t1h%dwJ!@~CUy>t}!O*Wa@XdDz>Qs+jmVlnKk&!0^`` zKac%mj!~NUW2z$wTI~0|RWuREQ%SjF3-R*HsNV2=RvnF2MEAL2B12)$aVH}RW3`QvWUl>OD3Y}kLx%&!Is$_z?z#R-`ZXGUs6@yrDaet5kePq4)BZe5 zN`W|7f5xj=w1GE8tZ4KOcLzc0>r(C;+j(~vcEq!YwYK+qX06NGXNVFh8;rtJc>cLP z`%YFtkin`_yNny?+gvp}7_reA8rzbJ1Zy)4Dgf}=j5#L3kV%`zR;+1wn_|^=)W3~q z!8~F;v8`W%d#KQLak45-6hV+zplWs|U|b*Zx-pDPBTze9i3lX`-Y=%VR}fY5$LI=H39O z1t;^v?F{6u_t}XGoeY*-->*F-x&#vvdBY+w*}aClFP)nwV%+42dc;-xwiMuUAz6PY3JSO@771pwYjCD z7ODgibUaf6mjMuoMvJ`2RjJO$J=*LV^YhR%kodsQTU0*s>iHZ8&nxYh6NBV1oT&`& z2fh=2N_wBOh3^vbb+fsq_Yt*lQr|G=5-zk7mKy=GqDb zN&p7LLnk3PW86zqq&NCk%lPA&g=hGt?nb{`BA`0QVJ}eRXZ5`s_PP(9Tm&zZ)XtI? z`yBMUA(@J8-7TBKD<*Utb=Iriyku|d*x{AG@Uacy#er{E1>b%O=a-4f4U=Olz2T3S zbJ__aOgxv{;8SwD`6cnrA|}*LJ$&n}KrYE=c&zF~Q?I*GCDZ~m9z&W!@UcX{Tn_Z% zAsP6K{K~LH;lYJw!K9N@E9`rXP^(oQw#~?!eRM~u4mYxHW*$at<0)I zt7eHmkSnyQT#8?x*yIRd%1ACLe2Wwiu0KKh(JZBZTjjQAsl|imh+rB_jpIGRioE8Z zoZah}wK7&S?YXZ;+f5Q=Jd|-vh5%5A1>=_k1dbGf1YgppMc1jc1C%f`v0W%4d;&YE zS4DVZwyo%of~Sk@daO)SHu6fIH$L}V$jPwH&v5bDdO%;|K4RcPR`>ph61!Ezf)H{8 z8`udDMBt%)4CCRvWu0O-R#WV zrpkqJ+T(A3CzKvEIotRMkIU~b-HX`b38M&Ra+a3Ze*-bN9n|qV&MFc9pDpRc){;Pb z=h;U=Dhw2X^|BuVTyiu*PkO2i8J11;zrbz_R#? z?s1ain*N*lpw3B+6_yLNdf9t_syC=0NgVaut(0fu{k8v~1ewSXa5$l&J|Tw`eWD3NicuS)^1t+ zXK;YeY8gpQWyzad=SYerI$J8|Yg5~&U~thguLFRI2Q6~a0kITs%XZqtVPgXql< zGMW=T)(KB$Kwr>aaXVh+_uPm4V{7YMe&dPRrvt*)m&Y7kfIsQD;7WX@r-nP3MMK#JRc>9< z;uypGOxqR_=)$^l9rTqQ|JXRTX`N2Lsv@B|=B^pi09t^s$-4WS7!a+rvUZxkUYQml z4lOWUd4+#K1s5Wee~T=f1JacZn5`K(5FMKV@KLsZh@i1G=}D+${L%liK!Md1-^rNQ zpPn$r&#{KI-pPQ>=RtiRH(9W~*dz+#5cB07V=Zjqb_L1LgjHT}?gE=BF`LRysLYh% zw`pfMErb{3N+6rI($jN%>klEB4Zj5^fpz4IwBz@s@MJf?Lnr^Ryn??*Gt+0M% z^XSZQ&?XY{=^E6u9Mgto3o2>c-lgNSX4HbF40xg~QcLUP&a{9EA_o8Xdm zBwBZcctzXb05E(hOn4o?zc2#TD^ODd2*{}e#JhdYbjy%yJwm${3cZcLzA*mda$@tO*0|G^Q`z)!fv-M z6mpL!P!P)6mWiv?gG0}qKpzkvG_iJRS&cX1*s87O2jC7W&r$FHZi}FQfvx$&yFJ|% z1iFKAn!t62yn|gK4tDwzPFZ2^dsSWr_@aKBbVc)e3vmf79AP5+;H1{1+FE#fG^3Wb zK6>+bf~n9xMVji}b&wRc>72!#`J;w1+{N|uS{7E7;OIDvJy5)UXA@2@Xe zA|x8(uOC)tbA0bhe}S)A(AJ**1rWg$+DTFdKqu4opSznR2MsAch4j`7r8!cjP!ZQ0pSE!zFZrC{)pfVNzog$M@{{VYdvAw8lUMR6&| zrjyJ$cBI?S@UF&PD`4T>J)qU2D z`tiA<^ir$khd$gcQ{*p`aV+_MYG}aD!ioqHYRBUORy;SK2&c8FMos%950v1!hZ5-e zKdFyAA=8fUkV={)zcgu^kJ++vxTpbSaZS`R9V#ij zcGKR>+!sX^K@%`5H|#S`?I~M5Rnv*^Y!IJ-p7VFa?Ki0-4~OplF^e;JnAwtM1$B+a z0H}s@bmimnKEgErXdy4Cg(?4O;h6k261i+2>Q!pBPr?ub;~qT5gCVMS*sXFCk`!PFMNi9*&+p|z^Ru-`6R z%c_LA7){!Kk$pUsbCLqEgKny?-N$&p$O`>mxiX0IH!oPO{H?gl%$QZ;v?9B~s|4Jz zSY7G&n3jx~{uqPQ-3jeZ~I{Q&NE;LzV&8+mr{+%m9f=3o>!C%TSHnI4KeQ zCCq>~`PKx9={9H)?u??!>$HlANwOBn98@xHcu+SQL5=>cU_nvuZ4u=OU z+ffilq7*67l6idm3X>IKUvXp-e$Ri?25BsgZWBy@J*bdAZOi7wG!X03O@CM27uAG2W*cd;^n3;fTiIdBK* z)uA;1&kphu+(F*`-wyKObZ27AS;^(E7AWs zzQJt*kGfLnnmlgr2i+LQYkptrG~Fs7DAd)tlWGd*b}VM|5MFXei*HuCcMGCyiJ%EC z3&iMPmb~|@*bNuiu`HcJq8#C5=yh(Z?Oeo}ej6qp;=itcH1KEFRw86)jp&;-4c3+~ zfk$%&klPmz6A++@gn#HJ4bw$_G=zI8*^s*&S`gP#<++s;iKJSQ}a(|B5b)(EE zzI4Glj;(Y$_olaP+;MK5%?_Twhy$vou1m8D;EJfAr?mQYb?w;mI~ZYtXzcUT{91~X7qHhV-Nusz@&q{5ch|q zqeO%CN(Zg?OlbTKVuK}9oG;nQtjGL1VKx-fyaG6BYFav66((xo-2~hAJ^4cSF=aF+ zdac9WE8;swFZK|>za7F6+uE}pa3{~+B9_%N%w-LK-qlDTV>fC3tXGB|UVpDZdru%r zgEpHLyN^Af6QT?%Hyj*r7ij)$9eIKPH=Zds8#XWh`=AvAJ??XVcBIwsy^8gAAajPY zirbavx9iuE#^r-(bb>nql19M`{Y>2qH(~BQ`<#7xC9j1JV(x$!qruy1<}C_ETXJ~< zTqReNys4|;fhPM+z8P?ahS(xOasd{c&_N;w#!H1A{^P83ffGRJ6LPYWv9{$H&ZUf*!r7k!gz zzXz*l#YyX3@AwzO>cWM#+!nLD9I0iCdidV&)1p|uu4)<;K2YFRe$)0 zEE)7{1$l1PXbS*3tuQP@roQ=rQaq?{0Vxp(Sdk8`)S;#E0volW53{K`&n^cuDP`dM>bw5;Tx-a zL|toH5N{EeO?%Ghd8V_}-5Ue{yqxn-ysOP&IupB+QJVUeXk>RYV=+c~U7E(I<*FQT zz@N%Vc`uIUjiTMwKiQUtmT^Jr$vSZia!u1&eBuE|-@(sI#j>|tM{RAjcNgjn#nMDA;j$P#pCl0<2@&Wx+43DEYI=AVNHxc^^AW$>)e!6N93i$Gg!Pls3mfxVh2 z#+v1WsXHI??8e(dDYud4Nyk!X>I|MrQF7f-xRj+x@?_HH4~8Gry@YZNHJiazKhnAD zEF}E#69)sv(=c37YgEZ-1LDet^8daR3I{M;yd;Q~{%Kx*Ay-gWe#+V&ZcFjz?^X|b z`f)vpA4hCpv~V$5O?SdQ5_D!QuUCvBbH>-}*vlvseUK*$^4sAHwP6C$2nf9K(7=)j z<*}k`Bm!;^8GHVt@N&kr&rkU2Gggl%JjgRAZ2x7^6>Lvh-A*R3C^857A2a|C&xa2} zIvkFj{aH&#FVsI&X>f~~Z;_#MM17GXMt$DX<6)&rea>9x412pBjpflBzE zXAD-6!+7!I6tvzfVA>r636Q7D0p>7ijuO4V!E-XNjbk5b!+hVzm!f#*BfeQQ36u~a zNPeariW*XL52mD2=d*qC0Q#R;z4ZABzFC_f`Om>hNGGK};c@T36!29DVGgNYeD!2C z%W9G7D_Cuc7jnS#+ijIK;pJQH3F#fWFOm!x$ItDd`xVi^Mj$L!@={fa)8=3rvm)AA zr@kkw>v^+;QCk?^vCvV~G%dWCLzwfTwlP>yRR^yc!2PKp{k>{{haxzK_7!5{@|P&H zSV-Xgrx2e^x0uvvG%EbDA6;EIOWL?=yOcs^c=-*Uq92o@4ij5Q^_C4s>sxv1N71!& zP6U9%Zk6IukhH^0;9*y$*y$qmd>CJV5)D-0;nievJ0gUHsp{!uz<^mXL_k(&Sd1^` zr>EJ}KoBw6eO=?HbV=Hl+`qRV62VaI(V;Z)&(Jo(P<{4)q59@@N9FKVyk(TnDOiGr zy0wiXh4G*m4joy85cu9Fa2OFt{KHLWeOfFH^T;`WZxG@?wIgl4UVCWQWFd_lHoq&z zm20$ZyS6(zcNo9kL{iI3dg)$z!qnf2<0@f0nLgYyOFwXFQPJYQ&sSU|`>Ce?oe&HjkYD?FtlQ!WN2LQ+C_*z|vTVGl6qhn!R z7)Hav$~IRqy!LhHTq`-oNqgM*upA{>gSxw;q)0_EA9L}D%q=qQ=RKHSE7JDpSMYz6 z+=!X)!eM!K*%HP$~oD`@s=6*AC2 z=xdtfH~@avT!!)N2X?81hpcF|nVZ^ZIjnnRiHL)@htSPadP^{@GVpR(%jx^P<2`AJ zR@uX1Xe{@*iI|-*$mquJ!Y-hn_S4d(hY{5+m{{^lzfBnKB`G_8+%Wbg{`W{RC$TG# zgsE&Kz?6T+pW3{bdyZu?*TTcWWU8IdVg>NrYN9;~Enqrt{Z8%J+n7tr`{?O9v zyXR4@{aJ*gzOzA5Ufn zeOz3E4Jnk%fVjU>8{C%TSXlM}1<(tyG`BSPh&vKEfH;x1Xx|z<_Wd$8C3DbYXf!|s zw7Qp|)xmTqt^K3gh@jQMfmY}E*XkIB1afxb<)%wVd2zq(yKY|JFs$0fO9Zb9Fsj&F zj=1-YnBZ}oT$s_7{>aZSrz4V>Sm#=f;!7GXal#^jQTqtQbW&O=yJ8u6Qz7vE62#+x z6{NTF_3S3_=$HTaY!chQTxtcI12#f9OR*cqk^ZQE#N_(Cp8@i5>ooj$CnK&!TdQ>Y zv4lSYQcF+JpjWfBK(xF$=CE{V!tY>nr{3$aT(dZYcqpV7=-9!(Fof2W+Lg*|>5^0G zLUL2GIPVJF6-Gwqs6cooP7V{Hp|dX9xshoPvy02rzqUobrssWbGkKZnRc4i*P^Ej2 zI@)t}x_wV&TPMAFjM=H{(s9X`#a(>E6#OhV;)s3}rG9`7E`m@b+R3Z}K9ha&Y89iK zE>|)~cb)JB`71^Iy>C?bDDm&s2@%y$34GMx#0@0@2+E%btO_Ttsf0@KU%f-B9W1^G zjOMEybqbS9EM1`NENtePHpFcio!m*W#JFc&t?rAr!gjk#+zb0uH)c;w< z_$Cq7l>Kg+=ft1&MfH9hVbH|?|3D7aiter(ihxeE> z@1Y-=^}`?1rB{InMo{sLWfMG1ef5>a1GcI+IV zO{Lo_@8EI*PhaaBlrk>S}%7+GqL&f zZ}S8ADdB1M7^yDP1_Oc$aQ<&w#IT-Bpt)pe%9bsIqydEq+ZJuRd#LD`+3kUlAA6#x@Ai+FNi&B zwFegpP`iEZps*^)6DoMkpq0d(D`RznoTHF0YvgmOr-aAb}J4uT@ zIlN+MqtVc2+%QzOKK(KtX}<9$a?g1sRc^7EG_@Eqt}hkeh|e#I-RSGv|gh!X$#c zVdVuN2|irpwLKo#J`mE5f0*x7`=K!X8vXYC4oPC0d${E5%bcyLb8R5xos*UHmZijp zz~1}V&<}2Q)6Dcpa`IBfU%$y<_wEI8g+Hgl3ovT0`4y^O;`BO=WUL(F$2?gow##Qq zy2{JpW9;gomM_7dxc5ASo4iQ*Sp-P)J|-7u1IdJTU*?(Yg^Ii;IhRvLgV)0OrT60# z=OK$jr0&{BQp8Q-G0vktjf`80mz<8~*!EwOw$3=$i%pC*7(4KSnC%_T-*E^W{MCc%gJv z0#G=5`;b3(=Z{@F)x0odV) z?T>2KDG?$!Y?F+Q*H~^`tM(ZkjPb3oG&Nx-s1m_+8fFcdMP8&EWKjFV6;g@FU9d&# z)*kD~qdpMC0;tfjusQk>*u^i;6s7uV2JleDG8Nrx2n@`^PxSgZ7-@U%o=$!`vc}Lt zc6Nm7(s!<}exFktjtGI!rFycwg`2)pZqr9|uX#`__KekFHaTQix^t#O6VVJC@Dfro z99OS$AX-rg$igC-?qwW_tBsN-a>MLhHK2ndA~_JjYM=4q-H*0D%hkabPY<<01d5DE z*P%=HhYzF@wtJ@pbFpjCrG{kjW*pO#X)E@+v!S~cGKoUO!X+{n51KV8iO6l=tEJ_F zzN`HkZj0zE@=hKvjU$7yJTtV0GF)NmXk~*!3AOkO?c2Ff7%_kGuvvWN9OHsHOjXfW zsfEuaE;0%2-rgHoSK)NvsJZy-6g?HfidbqxtjO7!k1mFaqI z5tWiK$zpKJ%Wf1=8FGRzQQNn=PkPCyon?j(_=6FeC6u%_3N$YAqrQc0y&qO!`p}s= zqmK`(Ur5BCxsbr8J2zL>+&M@s_sq&`WPKxky!i^ZGbn~8*Xd;evaX6iJWx@s{;7Nw z{~2{CE;$vm#6pyoUJ3)n;e=VLDI!IbB0Uis+O1P8#I3I(!G)xyQ09}_L?py*tE;8C z%G7>}@qOLZ(BKJK;+P~pxpTcjt;$$ZLkwg`Mk`hNNY^)ptrefT=Hgchk|koR=wY*MW4Ia zqs0n~IBVbL;xS72`74(kD{LeXSsaA2Ys%TYOhpuLvluqg&3+;SI9Oy8EAva-4u$b) zM%5lIOZJUPR}4;3^pg!}`jEEReQ|2&LiOv>L{KQdAqtgtm1q%74CO zbGUp}mk}_vdVck7offxzz2R9;d)IDzoaHmtQy*-gs?F zoBf(!snYjp_wq7c*f4Y>n5!wqxLh8mH(l-97K?r?!?M#37%Sx{Y6)>o<>jt))PN2) z{I?k&(k&;$zKX-$zXs@JxaB}(Uof)UZj;rJV(LV(aCVGtv)gdnXV%yGfd|C;$XMgU;fY9{p?+7r)AuUlY$fW~Y*x2TK|_ma)UUE$ z_QBIRfy1z%@aD6N@|i}=H-{UOXWB6sYw>6<83=MpH(aU5hKt@hiISQsI(4wtLi36v zb_9cjP$Z2v6&T&Jf&?RkVGBC_G7clM(p%6ahL zO2Y-RE_q@_?23+M0wt??6d>MJ)yQ10i@ykoNpcJOaVtQ0NXIU>%$Zk|BFveezb+M> zgFkP-VNcHCZ>Jpg?uNw!9{CPn(M z^tzd&QGnkItm}b4-b(I(Ukc)iMMyzP9v7K-A+Xu4BEjFh_!f9^5WZo_f%-m)L=xZg z0ImN~I!K-U`OLd^>7TEG5@q#ZlQ@LZ9EeC%Yw3nAA6F<50TFGMqsQAfrqIa=h+aaJ z|5A&FZ*@&9kh3!`w?D2^)_+?|_Csz#wnw0IA`jah&DDtc0{ie*_ehU5yGyvY09`-# zXGo&!Uc#aiO$>mksn}9gcNp7tVWIDfK-4xMKomzYz%0rx(7WjP@T9`X$(K5-7B zuEtkyV5DU4(ssY--?Kq!Kx%1JlIGcAL`<`_`=2bdob zzm0v@D8J~qiy5aeAYW%EnI|3Q{jSH#i+(F9Av*vg9Uy)y$}(EV6YePN+QYxJ>1X@7 z{l%`6^X$0${?MZk)lxU*#O$%Ci{~A9t1@C?%9uvcZ(4bz?z^AO*iwq? z3O1hsRcZkY<7Zlr7DY%bX`|%3@7MZtGmb0pinKj7LkZ3}O%>2m`ftNe$n{3+Axa

    X>VT3{+sTm?EBg{?ijzz4Lr6 z;!vCqkU`0U8V?8u1A<|XVtxjO#^FI{@}^Lxf>{W9YtTcE_=4EO=dtr>U}^&20*S~0 zHRQXZRt=WaW26E{h{PD7?c1VOS80SGnWD28EB48GNYOj~qhUUvtoUmz*VawaKq}$~ zpQVl9u1M-!mLNfZQJ26i;H+!Mkp$~LPU_4MA+m}H4q6{a=nKfihP?7h(B&mW1ELs8 zQ&MmgpeGGagap$b5(?KXyf}aa1aY=RVMY21-8j0%oJp__;BcDS2|ew&xBY6s)H{rl5!WgOfC?M6)^WMT@=P@Wv1f+P4}zjSFBY?}f1mJm61^xVk#1AWI4I`{y6x<&d_LEnlru%=K#U zRxp1ddE~J-&>=)Z&_R&r0h~o4{jnKo^_`)v@RIc1|G7fNw>2_Y57qxzA=3NNMRi-L z@WL_t0rSTeuzU?>_&y14JqrRVoOMPjN=yZmTJ2+*g<>yg9Tw zz?aOhFYv%7Be7-J|1bhu#9I}#Y-pIwN1$n041!h-z#Y^JYd651FOiYG*NH5(`TBSw0L80GERgfC%s zCWV#3u(bLs(RSDoHa6_cPcfcI@@+0XR;bZZAalS!z*s>PFioMNjDr=5mU<5Jqd~b$t90K>Qxn+qy(HdQAW0d#h9RapHHQ_4j-M={!ws zCR{MnPqLEr@6T^Y;Q_|dH^ zZB)OEP!jk~yw_8p){LhGYE6jV#EbqNRb$6e*-F9E{Fo=>JJv!VGZ%cHB{Ndk=Amap zHqxx7Zcu>a;)YhnvEDr+w8H7;_+*ql{vZ>ySEFFbbR1w~vBbgZ?8)}FB-ROC(_HV_ z#+_yOIYgVK8}VaM!Q@>qu=eA1+pdNoeKr{_ngp|O#a3xWH|U%0m=56aFP0s2PmT4o zvz%7U^JUljHn;GH4=x54=>L=CfPG~>E*Cx`E%|f#^UlL2>+um0LEJ`=G)bx_A0ty| zM}ryC8K8FIf#{M@cjzUviKes9@#Ttr^72R>pnkgab+CO|l6a#kYl_t4Dg9P4)}eSQ z00rX5nGH;%77U^S-hlsft$9?2Y*V^wJ>x>!%sAuPCJJXgCs!5X)-E-|!kK5tS*WO8 zdS9k;Mt10hV8zf=^C4-^{hDH5Z--#U_^$9x4M4D=QOLf`C%%j5ag7yYuX(YMcyrqA zL0-YhvwYXl*$D;O!}o{m<~BL^K|v<;y5E^61as8HtQQMkfFpC#s)}duUfN)VJ%8kW zh!?kV_=-f*oTdg<2JOt{+}ll#(Y&J~JBo+vj%_l@@|N&ljP02{uI)-ir(}#~^^3&i z5+QX`)l{EY4++?!&idBjBqK)H|(P7G(gnZv16}I3EhUys3p(1KrC}n4LMh%D;eGp{NtuCP?#MAwm%aQ+E*LJv z`KGq%&35ao&|DIPAhAE-d2}C*^ll53;qCFX5bh=Cp-4SvlNn0`=_I24&5;#Z3#G4t zf~E8II$rqWw(EiQ8E7(qTm%rlE%b+et3xqD$?*oO;joZ|-v%<}h%x3PeS_*KX!w+= zF4c*-Cb)B#MhQB(&x`=;nlcfDj^pn;(~DMJN7P(bYQy$jmaHDg*u5N~flT;nv^urB z8`VUSR=xH5dGy?6G-;IWMV^>d9&K_SpODA3M7DNXC%F8S_J9#DS_hc6+nI*{YJjfV zlhey9kh8Eji?>8!_=mETQ#CPbsJ!D*#e8vd{H3jlDqYp5L!bUqAy>B1&|tI_@2C+w zl>!zq8%$MdSz(wnq$*6h-M;d!R`cdNuprz(E3pWoBxb@p)2@cu0$E^wF;WMV^iBkC5wF*7hd+oGqi^p6+DXJP(7TZF(7gHRs;9QSXYufR-wgpztZa z<3i8I#q_r8zPLDr>YLmA2CGy%W<&8WM9z&cQXNyGY{Tuv#sGj|^P&e9Wo&JB@%n_8 z<`*E!WcL)yRs%aX?bOBM;ziXCSEu-j zdJP;zNY5UD3bP&flU5$-&Uf9KW`bTJ6>ye{Q6Y+ig`FH}yZSyY1nbIU8c8@* zWfS|8W2KW?G++60hfIBotH+sCX?Q=B`x)cwr462W=@0?e&!_kjG{oBTK;LS|DG%A} zGMa&pKiH4et=p0vi<}WkmC^K1?zhl_S_7X8NF(yhR^;t7IVB~m_-jZ^_%icdlbr3o z$i8baU}`9t<>HqssPI0KhP)OVgkm|I%;#~G)f@uyI~i0K#A+xWS3~G`cgwu#kAI}b znFL@OQ3I*UL;Q;u=O^&lsR8iyZOu}fHZXn%V|ZzYzZpjSe3dD>j+I_cfK14ozf#N|d>Ld zaQgdyF6@O!tmw1c-MC&+XHsCm-+Yf|r~sH<3FAvfM$yTwcx$^T>+qgnpN4X-P5)*= zOSIWif3B!!JD{D$xpYy=S)GOM@>HW_j&d?L3)zGM;~=~X&R^6$SpqS(x@=JFmv&T~ zL3bmk=gvC;h!W_9@wKzO*_+@p7@6Fa8X_HePf;v>7uz9oBF@$rjHMvIQtF4HCqSD?|! zy-SQxX@X*qY-iWqlBV@2fZR38lb4IUKu_3o&ZJiqJI@_;5SoVLfL^g=6>x|!HzO{b z8o{IV!-|`H$Gf;q(VwYkF>Sk!0nO!|&o?7u)evs;c zalZ1L6tR?9rQeux6!U9RQNmoX1SMpv)nJ&Lq9~TDnH+SgSkr#!zM(`CLA7XnHvb$p zb1a8tjWBUG2ekvQc3L-e5MV8|%9})#WfySa5@+74&P9-gto~Rl=M|r$f<25eLGIJ* zXRXNjK$~@EmMGBpBaDq{PIs4^$3PKPALz*Gnj(1{TJM~5HSKG-TQgVHp(mkCb?+t2 zTicW3{%OlzfI4fGyu>v@(SOs}Z`qsVM!|LGr80~=ehqXTtuG`91<>d-@G%w3nU$j7 zLdi)da+{j96ybSNaK+6o_b}Af;xiSGnNV>RZ;H^E5?o2xLs+`A{oXZRbRchzxu3ep-goPO$Dv@ng*T|I(p z%TM&{g{ERUTw6So&=?zi$%{PX>8C^WU`{B?Frf^o+$~-iu=bMDv4j?QLAwG}3QyL8 z<%v4BiyKS~3jb+@*H@SQz7|jQFM?4rA@>BuUWDE7^ejNoH{h97#mW~S0r9P9>u3TA zS@5_wGJIxURd0@Y_+ei<+^W^BlSx>K2Ps{iu24!>Ub!k?u`5Vvk7p~A5N3?l<{Nhi zy?)ZJ^@v1V;s5oX%Y6ChGZi*2W*d*ZSt;?zO)9NG=)&ML}2dWOi*bpP44$) z;7u*VI+`t1j3ng)T?grn#p>;f$YQ7=DjK8 zSulV@f8b- zKLjf)*jt09`Syc(-FA;Q`UB2td(vgWSCgV12~x93z|2{u~n}xB|6A-XHfKG%p8u0#(bcvjhv?h6YHxes8@k^IJ9d z(oF3Sz5{l3XaXpO^PCHneJsWOyOUnbVRb!E3OTJ#>w8u_|FH%89;<_cu}5@`Yfp^!g9{&!KLr>ADBk)FyH zFD9c<=}+paN$4*xAEpA0pDd3}l0WIVx^1{Pw?M_1>jz${OAQ0pc(D|F@$#HCTe&^1 z)nX@qeHkd;${;nsn_#CTS8-cw1;Y6*_GxxJS8{32dv=|!gjK1uzI=9hjJ;f$o4vq7 zf6poNV9O)&A=}Ssm#`z$%6m6vw)=}=OTl_NO$rptkPoD?cRan}F04ou35w|gA#uO) zCl%SNGE0#22YB2G?%&|F9)Sp6ffYe|GwPN4TWxugfje%1@UwqJCp#>)#wnbr|LF15 zpk%1X&l2&rvoJ55WV@e2e*2NDq8WrJp>PEs~b|cG-qlpC^py~%43^31+t@1CCH}oTGkR= zo|@V>l|AnOT1Pqr>G?B159Ke0l;V4>4_$C5KYbTqnjre?I3+$boN$5D&977l^{EI) zUDoA~Tyyq0yd`zI19z`YV6%7pV?b>~`@1z}lqc3IrcqeMvh4Db&Q~OAf*iguzVeTU zF0QrDhpuRaWc6sRE2*2J^RGC`n0m?^+WgHQl6FD>YTlCLQQ&|iO6p_Ra%u5`<6C=s z&dq4`=r;ZjinsfBmwB^P;r5H#&d+Xh?nR;BLuB0NY&-_I_r7K}W6wujOPA>7fSD>4 zN%g>19a?HgKiBPUV~?9(B<0r%@9Wh7;Nu)jiap+rkU1YR9RaOcikOkLTOOu{7n*p&?EiL>^cImLz`e!!O%6 zLSMv12&+T(s3QN{PnvqLePiP?<^Lq1tMlZxgT!del!RzBDENEdFR@eVP+TVRv1i=kmMmmKwRycLm_A))$EUj>Nh2c*W5_m zYvM}$ad%E_LxaFlyl%g{+*6^6>L)5qXXq@9w_0=c~ei&v6uq{q^U&%W57Rz=bBjLq0Ln&mvewP9|xp zpT_htGO(B5@)Ay~`SXv@V{;|q2CMjbq)P~5qC?Tc@7cC7yvHY+mCMe0hJ&8VmPs^^_)r$!c)<>LCG-z{`)D#V$}N>!edkt3AK>d7&E&I%#~>qG#TKMP@*k z-YBI&AfRgpAa%Z&nsfW0zj`m&vDbR}{in{R;$@3|l|PEgWzy#G!MJ^~E^7}*71+kVOm46-e{=OZ^5 z%v_@B`iQfxkDaGdS|OLg=(Pot6mg zKjtmz=}iGd-9YvSvj@g*AX5RHHUb|XR=XAh-|Qzzes2@uQ!1*3Z-{+gz&%9SCz4Y= zVYU{)F}#hNO!i6}Iu*&yt;edGa;f&gyc-&^9qdr$|IoOl-MIO37J=cp$X5>vfpV>Q zLOF^{jZ&yqVlXIzJxDV8%Pi0uR^V7W-t$8?XUyuiRXQcU8I6H!h21kiX98<9q3I{P zL%YUZ*dJ{mgexvQNwy{r%N|qv#1o@H#(u=OH*uevHLt!&TPX|Ya~(Sc*~@a|UFP^v z>2Gr4P2L%WT#oGd5q65>AtObrTz-peg*AQoboFEjFFNY7t-|{ zU5hUm+YS;I62j@~J_NG>b6#)YAFMS1lxMBN8fxD(7D1UhXKFWECTn<|@Nwq2fKFF& z?sm^M%t=51OgKamLvh8ojF#!2K3HOeNHWAgD9I`0tx?eCol*;Nu|kqf&M2QNIA?GU z9fmwJO=xU!=tf%O26A!5R6jjFt6EBGEhC#|PZ368@3*fdh&n3(;-C5~)o#mj6);+Z zrX5ICrux1uQHcE+u9h!M%K$A!pC=2N&m_CzOsUNKz~H^E`lz^tv@H8R#0(zEgOT*Nsa9~lH@J`x&eOmh@(>BPM3+`qup}xk;Gxq8UbacF{o-YrD|HN zE~72NvA`)S5x=$9=CM_w6-JRYmOo$YQXnIxC?#dheL~zky{7XA#gQVj-dPz$<}E4W z1bcV6EJdyD>t9?Rlqj$b@t!c%kb9Q0I7CihWxsC?4{9%9OO!}o653Rem;D`^=H$1H zQ-Y$~*E!&^RK^Sc^taYa>3*7b{FjarBhf$)A^x6OE8mA&p@sA@4HAYjhdO|MbgFnp zqpWb7jt0hJuk2}dE-FOK=u&rfu0&eOe4ja$OZ*}{cHwdN0S#Br5A1!A0C@f(A%qYAS}G>V0M z<=!oAWfZg=PKpP;$HT@Od~rUN`>otgM5Ys~eS3T{FO^so4zZ+Z+}+k2f>}%;-LHal z-!6*C;go&w;FrcR*f429P>Wn~fW(r)-K$|vx&TOFpLODNsyOg6-OwFythByMwp7p7 z(2u{9_O!SDs;#0a%o5+Hm!xq(Vp-mY_0S%^dSu_28(~5*QlPruM9Hp+?*r06AZ1TT0K%_dU`MxLwmrA52X2)OBjqOS zFbiP9G03)GVe5BhpII||Nt0|xjEG#)J}u&+Ylv8gz!7oCF=1g>YEj0g{PVYG5 zKBMl6N72qAMzDjuX= zS=K*4#isi$&T0x`yTX~X1&~TwnTqU3ki7vCVW7j*k`fGnQMhaB$)cgmI}tPv&Uvq6 zV0gxj`iXM{X6$>{SPos4>!0G46Xn(IVRW}@0m^BTRavBknZH71@oeVGYA{O<2$?Tj zulO#_!#q@R>H}t8q1#U@fzutr%QR<=4SnvPe=gPJ=6>H&dd}RhfuWdMJ&OPu zE=Z;FT_))!hK}<2+gtC9U+JDH_@mV3=JJNvCFU*aQ(U@j#YjnUQD4C7D7!fDt|U1RdDVuYbO`cIti^P26bxrh zeFn8PZz2-O7SCfE%|Iz)=r%otaIX~%$eNi@_ERb`JZfYK%i)dF{dmuYXI>EyVtac3 zT{`7fzg1PD;ifqY)#*mxw_O$mQ&e3&0LWoeTGqZR!xWw*CYSunK-sucKO=?buZ`LZ zBdx`p95z+(K%5WyzBHXOID$YDg@e91OA3Qf-7#CgudmpEI_BZ_USEw-f#-@Bi;xlR zVsb$9+;e6}-KX(S^KpMQA2vw<8h6BN}9?LUAlak zPCtTg$>Szgx93w6Ox^hRP_l9MMGqUpm*4}tDd;7b*J;V&C!%@yoPKa02a#Lb{=W1* z>8L(_oX*$XO`C3_y=Hd@l!oLB>@~3bc3AZzQL>7)qE{i;f=O*VEVy|p<9i0htN{+F zZBRBMNrbY`WR1yI7_%Xzqjmk-`{~EOMOWnhry-)S5{W)to5`2g!+Wh;%%yD3z{OT& zWX6pt)fDvch$iM!`O!?I`gWR?E_M5*37ey(H=W*JFm0dcd#;u!fa~!VH8-jqea7)0 zs_M#&he2RYTWd>ja^qsfEkjijGOwaNg4KGFD;Uv%^Ce1iOsi z)VH9h@OMGH6!h}7nm)|YfL-ck%BXT3_thlOw`nV`04vvQH=i-NWp*X$3nC-s%WM)> zMVn>@Q~vR{mffQ&fFjHUwli^gv~nxlM)I>8+N*y%%+6G8n3YFi`#HNJlF+uwDi-owGzsBr%dSaKouiGy)a|Yb{TlT3JbM+I zu(O#guc0RQ*Q4Q7O#Haq=l603ON0K#OvU0u$wArD+g;yXK>C=$V{1LHS^cYV-EH2W z>}qw_mP@DH?pwqesrLwv1%ny%SW3{B}=xlSM;L`2A-^jd( za9Y{psZwc#39YU8yIWFNe4-PF5yD~f#QTUQ>*2RW!LzXCRV|29xT)VT2E@%5K(ozdH~-?)s>CnaLLp(8bZYGgH~#GgvPk zm1pN{{icy)bw`j=_BUHt#VdgJ{gu%{Gj$0UG06%e?lc5jryY(06YX9+YY)`BRWe_> zON+J*=vUYAq#>GG`c!qNH}Pn)BQpsp;xOSFMJud#0oC~kQL|g_R$1;Q-?sx3rI33@ z2sZFw3iSC}Mv(e5qKbVt3@0L-8b9WVly`Z051DmDFXk>R>6uI9As*(GLXVe(hz()X=}G+c!P! zH3EoFr+tw!1IN9{b=*U(X!p?4=2mTGsL1@k!wwr+cNu^_=();k_dq}d>oP38UQ?!-Pkg)dF@K7mL zDDg*dlveEps>?4KS|k|FhU-NYcaQJW^I+j&Q~#M)D_;Z%b?E;?9l(hX!TELUB+0pv z;#Qc#)}Mlo5^EAp)AM=j&z_ksmy%=NOP&ruFpln zKE?cvB?7ZLQTG#eB_nO$X#u7$tph>SbWnM5H`UojnCUlZIAPxv}^10-;g2Qu@wE$A}V_@X^F)sxJ%MwzFd?3 zv49>+Mai0!wqtJT`lC!ne;;s*Z`*v@-xTX&A*jKuQ>atF;<%tVJNXI5koEe%bB{o~ zGvq_S{}+eVD1NsE2{2jm7l$XCR`v7yz!yPxzm`r+FM~XhXd!cfWWQnTrPD_kx#2pA zVb7g0bLwbQ&qUdqdPcQ5WlY)CppIXk!e8F6VS8V<7%zTQw>k0CWywm9{($_Ht9If) z4@HpTZ9}1*^1Cv*>_+%f2H*(NMF`QAZ~ol%d5m8NcwYPCG&rmAT|Rt~gM;Yt#n9^( z`uN;^T#tuAb^Uw=cuAvkL}h%?Xbf_xdDFx`$`N3pcK`7n0mW4&4Wqu^O&grlglD&f zpFubM;{3UPdNH&a_;G${6i8NU6xRj_NKy-fDLh`M^~Iwr`iU+W00{i$^~)<*p+Am- zIsOk)+$Hti!`xJhuOpvl-lg~;%~-5=3b6CkziPzQ+erMwarGmKIhmOHl=B!jUN|0C zK=94)bH5tr%uJQ`yrFqoXquAmH+bV}DSr6xKtee**-PA7@sg7{(~Bn z^XiQ%<1z@3n$3?xc?X zaGKV_UJUZNTn3?5(s?;E`wwjFtTc;_Al|8h%c+OOB`*HI?ty8_deh{sGu}^oq z4C89p3vdZdJ}%x~!m@IUJ{}#KW=-ayX3unG8`$HC=G_`OMqaKx>@d%`S@uaLG*{Bn zgqJ|9v*)adH3f`&t__R-JmqWi^c3$ae&c-LeP~(|L10P*r;JaxoFhD?2|1inJ#toYPUtIKKrOoG^0+p5Q^7>IEk>->^^}}6Bcij z!btD$bfFxMk??7nd2WhJ#W+%P9)OFLM;kRKIgo!Y_yZU@^qeq0z<@|*os(1xo~z$o z?nTFeJWp$_`E`ZJfB`?reTJI+;IgxkvMIwGH8UgU@pG#~wEjo51as(?;k_VsKgZeB z2^RNF65f)n&^d9|yZb7sDV-TzdR(RNR!bk^kU$faL3FbPf|Wx^F1FmViGp3Z=}@Wx z!?Fd2AUI$kwBP|&!tl$7!t~Ox&?w#2IA{_ zL=2X7BUE}T( z#YIf;EkhTbMlO(UIMJHU$5S3Ca|#htho0WCZm6Meu0rS4y^9XeYL7dd+nqg1m#{38 z^piy?qkOD9FC#?iog#3^G~{tQYl6?Ae1{!+f9q?npa}zaUQi*}pZd~q`fbu~<>Sr* z$SE_*29Pof%U~Q`+>g%%yuJauQb)#s7&pi!XqWUS`c4m7z|L0?N^<|dIquK1l;a7TvHCA>=??6>9fUsoC`n;!Oa`2pgNVSO(f4XH=3naM zNDq_Zb3th!Eq$$;5t6b(P!d@(vKKkc6W_HZU6l40y@s<(t`8s`Cdq~%8SxK_K0x-umB~P3A<|@|{-_;@f=K6GK;=k#aApq$V z$Pw*AzhK7zVKQ|6*ldKdxwecM*Y)vwB_b)WvDlUK9LPMd!#XH5pJ3X!`$POf{VRLA z;?uQki$R~V+;TtQ89w7{AdFlOBTD!s%7BPB9eAS1-A{iK)ndcKbP=A2EZZXlc> zEGB?zMF_mWP!|<8!WV(*f}F5`=@&gJszW03vUGRDKJ&^Bivw|pNO!}%g4_iezCxSN zde<{jvEUCzRF-qjf%nW!;}t!m*9hV#Ox;!Gc;e@jii=HuXh&EotDsVU*Uihjjbh{7 zTjt<$5!|2f;2NU?h2Oj9r{JN2Dm>(6Me#Pz1TCl=<=R|C~=vg%@=$c(%mXA!OMd}O);8f_pnN(RR& zBdnPI*cwcRzL*pZ_L#{v--2|F0;g98ew7MEaRf1L2U_T*6`p4 znvn*-5aPlW{;0%76zUMbH=uy1i&7+7x2zZButv~aILv@s0nC^PdMq5LX)Q8Ph~s>~ z(O+bwfa^TcDGMI%X%Ad{IGj{hV{2NkVGzSR{;0Ny{Cwi#6bNx~K{a*MBUcYoGPrG0k|1MW5D)BRF&^}AZ1$Hz z(y4L8!gqUFT>OkPF`grBQVvhtIVZP5CIX5rRf-@2qr5! zhUegsb1jm%xv2sS86hK8kh6x!75gB^J2`2Mhk*Xnz+{0}V|B_Ey8tV~w#Y-!FM3Zi z^g!%CqNe=eoTLfZVa}9qF=%=P!6MBRV&r;2vQtb_fTu-THAGLZB>k3EjFcBtq`K*Y z5hTtVBWt8aZ%{7PLP{}69YXn`5W;4q=?t*$)1I{qeQ)qGo>YWSI;OwUgGGSuXqnBl zH~n*+wAlQ(~a3Sx!zTMN|`hV z09Kgbb=p)tJQWd@u^krHUA|HSqzPRd_0E{w=~q=)>A^`gi!B7$z@N4*wZP14_CXQU z-o$@DBOr|~1j&*bpX%7Rn6JeQ{E~$=Cqjq^2VWl4)nizk=Th_9bB-mD-6i?-{S#-ujK-f}fE`>Kx0{B7=Qqe`Z9x-aVmx779`osOc}{ z8DeFHj%Z${wi2krgiKqhI|M()rYp#1iVsZLf$0w^iKImYOF9!{uK-9$egZw=9jRT* z^rUZi2~1DF=^^W&U~tO5XD5DR_B3bn{D}}wQwPOA3IziaL6cD59KrJ^gAk<}7(a!X z!r5O;&;-&Wu_SsX{-)8p7aCicD|kT#F=sG7xZ)9tv_}x72WMMcDxUqV`IY?_2IIR+ zG3lu8)(VTWh717=22ATzY;b052ap*W7aO2SlTQG}y{oxc3i409DkU0oQb#dvct=fe zbrPtcs`TheeeA8-rQ%q4Hsqi=N-lG490=9=t>APQ8V$cIwy~amCC8pInRmv2^I$|@ z$Aqk_*bH^VJd0_=G!V^`Cyzh^&F245^_5X^G+npB0tA;J!5xAH4-P?t1a}SY?lx#} z3o^I{cXxMp_u%f%!0kNmx<9_P=oz}Zbl0is>8gEp*@IK2QBF$#*Z_F-W%vDHircY| zDfqnB2^#-kp)qTYbHKVY7t%l8h}ee>+q?=@MW$3)^Npn#7@Kgh>im;g+=~rp8a7P~ zXEYGuUBut|vq)pgfTn;uiFkEpF=t-Xu>TJw@whll)RWS$=6R%(&hvCR$CWkqIFbkw zed7o1X&+&mQ5r0uq1X1v0DIMnHW*f@0@X~*Qrh&5NvTPHp9hiJ+1bDQz?*AYjUE-2 zImK2-KNu1X$@NC?=_iU16D9{TNqg*`u;}a(%e`d#MBMC;-jLS&gQ*!UP^|F)^b+yw z{tsXfK(|wVDebSSAtmjlIApAb6UT3ZD4SXPj){uZ=< z=3HPgz?#a#HqZ1gBJ*syMC7nq`lF!@yM28g`)D1a%+`8nj{!Fba4& zvIIN7M0_mbNexSPmo)H^`T_n0heif+$~0s1*&D46wEOC_HzlQle!zN*&D#`}dC5vf zI4bU2%iv-}D7dW>1l;d0Q3LWeP@n@ax!y6T<#E|73Qy-67)v`eS3@6k0QW_W*05a* zRN0VJ@{B*-KmL68xp>4RxPK|kP>5)vf+iZ)%lX0F2k=hW`oaQZ^o#Hi#Q46bN*wBT zZKY>Xf#h~vj*~$U*Fxin7(PfTg-c_@=d0KC!grLH>&v%q zW}GD^-b;HfwoQw+L$)74cN5IJkBhkK86#Ek{g*__ZsXUPpohm`642`2BdzJpCk~X4 zHY5Am5-Sq)@W)gFW(ywu_eqOP56y{&BbMc+y)WkJ z`yS%%*L5@gD~Y^E86#h>wL3D;ZR`rhCY-G&dY+oiX_naUFH;*p!O8_D5;~A4ZO-va%`1$d!Yj4Iq}@%Jl=gk2NH}UskSd zaiic-xH?)+x*4QRgyq+p=h6G5S(JIViBC0WuLyZ~0d}#;jbt<1li^5IVs#;up!@~J z-(?^~AKd3gg}e>mH651XB6!_y}SXSdF-;flgN)T@#185?4_D z$P>MMNmL`JAWBV|v9E_W^Qr;+d|bV_toWkAH{3$s*W_-g;_`+#*Sk65(2!B`{j`W_ z-9o;q1U1w1WHnWe{n)8bx4eO%teP`lW9n(jgQR1U&~gp!8qp>MZzec591_EFVC$7+nWJYm~$JXCSRu9yyl1n~8mjpgcMFdqsWU-Ds?3XcOR`zwruaq2V%LN zx}9|w8l`i$wfkL2{Qi&%|3}?k;#^&4^f}*5yls2>n{jhKKJY^vk&;=LA>wD-okucZ_*7w6tVIg$ni~tr>PHnVZO!9?6Z9+9zat9j zBo;EpZj-6TKyOHe*1jhHdlOpyfVRiT`t|?33hBs3?{NNZ+pieBen)Z5E7@tL&v%AD zstYhKef>1R=SXNcprd-vs`^-+WH~YxJmh{P#Xm+9@890m|7H@N#5-nVkAu+)NaRd% z)T7JwKEK#LytrMlD}+W(HwDt|SUGaXjm6dVyZf%ovAEeDyv%GLKF^@h2xNw34&n_v z)z3H4E&p~fLiF5w13e8KmbkjG?t@;unsc(63SR}`(nt(yL1$LpX)<55PlAsuL`IL*mrfp8Uwpajz`SbSh;*!rf87XDH;9{oBluPhvn3-oOB{MiiqEgK^=WjBS5cKjExRTG`n|)=GkhQd-3Z5_KOFJ&h{J8C)Q>u7D7 zS2HDfBU2a6t72AKQ9-$4h5xG$wbpm#U31?BkMQp1P?u9L0@Pjn3Y6d# z+QH8t#YOYYC^QB6O>!SN%geddED;!2FDrdN33iw<*(GUF-UqjpPI?~Biw`5Tw421; zqCm+}R=2YK;9BRku>a%tjo3nt7f$sMd=TF-{PjeU9Aa95J$}CghNl|QO~>4Rcrf>s z4Gu0r@QS+)Gi=PS;;fX4E(p;S3sZ=_0L9QQ%~Xj78WR?~GYH2ZwC@0t1H(AzloK9B||`Xh$HvX?>rszayX7=;XA_St=iyRP!Y4%S--( zG>CWO`;*6BgdZ#(P|5XQor@q628B3^VfhtviaLZLIMr>+%EAsW8?>nb?wK`R#Gdco zpJK7OPXTA)b{=A|N6jbkct06uZ>c?GVUIk(3A8_n>_}w)-KU{U4FmkZsp$N=c?t=v zE>jR@QM%}4cl?5}6V!nX;%iaxy3NQZIdhuo{IjfY1c3i>gjea#pe;CJ!!W-vd|kSD zCyeFSJe0i*q$BGWpY#)ER@Nwu921{eH}n%H;84M0NiGle`VrP5T8NaR0u3MLD~b98 z<0qd8ff)3%iCXPsY!+jVzsE&dzZc? zQ3X_}?h~Ll!0l6m4v~qPBR1-7IVN^^baB6PwzLih!y|uBIh?C;R|Hh zY04~X*l;Z|*k$p`MsjFz5z=s}9Xow?QDDjv!wgB2A*{uB$_hH1zWtrJNHaJG2vP%! zqqYhc@$1WODK)e+-OtiOpghBWL{Z_zYe2~q|1=23OwQZ>0vZIVhKl6DFu58T*mHni zFjOQx<|Ix4Qr>VUh7T<*AU03~M_CSt4UFN$G*bVjHr-4LYw(>+yVM9LBxQ%ib5a)r z;QB8F3e>L%AhW6T8Uvn;NO7ASG2r)RE_ML*UpHtD-n@^(W+B9?Kr9fuC|V{5M&a@A ze8valsa#rBsB~^LRJB&Pz`fRJ&CPe&z}W)eG!Gw4;u#K~O~&d*W!FhU20c9kXc@eZ zliIu>WyeJau>&6QlaT;m0h8!)-w_GFFo?=i0Z{kvBnbQyAc&IM>^#Kc@lmDz*}7fC zSYc!^NJ)y3kO4XnHa#HvBh%w{f&Wyi01f}^H@ctRXTaNjKq&{P+{9!-O+M4ZsKV4< z0^b928eV*-UnLqwX8aN!nt-DjsWH!cL!l6(0$5Zu0g>p)AAqI82}@q$TqM&^(fYx_ zIETa}CIV@T^9}1`tT|ove{S-JPtE4yF;;#5$RjEQ+6tq8Ct*uDExNiB3y~1Ry-1e8 zEP(@rD+ZFLEdaZ=Eu}L7{ESO9rh)nzw6M|#ynG<{tL=mmxIQpf1+uflHNL{ZaQ|jO zQU_ezUZnwIEtDj}q;Gv1w(AcVn~auBj=#)eyUES@mn_;p3mkqg-}sl&OPV$dM40z& zlPx1!mD>2rZ$AWDzR!T=<;VYn(@{aO{hdI-Z8|34n>|Y7O+~tPYa93PkzUPgb`Q(xY9F-erW_O9ScwU z5@%9Fa+9p@Bakv)$>^ZyB>qG)9YqKNPrv{rl?`ypmmdQJ#fVF2(sn`(kykb`0+Amu z$PW!iApfexdg=NM-TIre5SR-@hF)Om9;p)A9LPZLGT~b|04k>`w5f~XR}TkU{tq!| zv@pqx$ywb{0t~BP`9FSO*`xafTb5u!iw=Iar|=)k5kATV1~kj>$-{l`y#AVN7KC2- z7w#k=;zxv&1n}(c=X7u}XFgAsroUcNrpvnq1V33s6xBCZMB{SW3 zPuO%Z=m7e4XdaP-wtqolH&p?Hp^8w#p79%ZV~oN4ig|#%hxG5EfNz!X5s)ev!ULLi z?{9oOh2OYARoFK52+~SzHf293=3M|iQWlV|j6Adibmp8`c#7mNgb5O&aG+!RGg*+g zf@-ml%S#`jGpS(St9?ch5b68xsfF^dZmYov@3+DrU8aR@{~lYwG>0FB-^B0jWH{i7 z$J5yG7mym6mCBy)JvM2ZvO?k%N&j7+h3fQ+=OdLJsgV#Yc6o^J#BcZ@`f_x4C>mOA zpul(u#q_Y*OkoQDiX*&Rcnc!ml;@^rYeMu&Bo}`UqxYS_G@AiNf84QBptov-<X{=;%|3nIgAXo>;N3>Ideq)NzL6#%T*$jT&9|7?WDs*BXTB6Wa7}F*j_FgMs zXKb{9NnYT8pkTD~olq42^{=PN02PzntcjPNh6a>P`WZq0h7c-sDm&i*(%;ZP3Jpez z4(iaEKShhnWZ}|dFQt4wWbWl{eor2v(!I11+FI7s<`N#Y2nWOoS}oMIA^~|3JZ=Df z%_O-ZwuguqV>-WpPSYJL82~Y{qoUCr%m-wW5?E9t3iKi2PY zEdwC~w$H;RDtTB2%R`|TpWM)F|L)Kn_~pQ$sgWGJRGu6iWc#BkY4Kf{|8%2*lioNd z_xf9{mzyW@Ieb}*?LHBd$+y43y^CFvLH8ffZP6e0TCn(Vf7-40X?0w&KG(C&eQc-d zX&7sNwtG5~vweGjG=L;Nwzp)wZd=XJd%_t}r~^D7|{Q4-Y~v zZC|fn);d<_$*_L?#e191M=h=AZPj)PmKY^?o2DQm(LJp!zMTBSQdfM%SUG#d1Hw%` zB$q`Maryd*YjNZCr9tp*m$|KrZy@siK^xfPNPsE!I5Il(vU2l$`TY3hC&R^~y8sBh z`^6~D_-_RBLWyzhhDub0?VcR}M!kcUh6>5b_<-JhRDsjQz2;iZe2X1natS|3j5XGj z%h~L&_K|l{UT7a&TRM_4m7&eY4~}GY(Ag@l5QYiMCkFb#j*5nau$<~!?Z=kdVa}#~ zWciBp6c!vqE|`_zvklvhZN}?$17(o(AkxIOLAxkby5PG49>f4_xlK7|x_29Ug!bnn zuv!eX!F!BHvDL~;Bj%mg%E)M!$8~T~cZIGL>cx5us>t}ee}@XVm;pg`ACCuw@$0$ zdmisbPU~%Tr;HU&+;trdCR#Urx1UJE8`s$j`SZQ^RcN6sI0^0quIE-d+8{F><=K#w zbv?C#mS7PZp8bA7(eEos?5-?_dw4?_Jc^YBTmvzPr+wi#5?m6aBJ|c5&8ie-)6yc+ z%FRu^d8yK^ya0XRYvH7=og+vgvug~-ZT<;moHi`Q5-4e*lVhkf7uc<$jaES&aAhn> zjaIXeD9dE1=o!>2%!Fr`uMWrfDAUt{V{BtK&(<7<40rf5@ROo6rOhyve6NP) zteqi|#3lG#Jy@Tgn04WZh{OfHIC9LXJj?i2)iof-|DI%D3%ASGE|Y(HR`vL78#6(G z$^LK~^BnMZ#ujJ?S?t?)%i@*idg1o&jse_=2aSNERAh~4l;c)9NxZw-)-$g?2kb$Nk0_X zRCV`BBnhu0kC2W_86#aKHth9a{<`$KICdr&B~T7&7|##`{fs@uHnCGF4FG2o6M>37 zS7WlQ?6e--aY~%%<#Kem+v__Qn)xChH0?DE8m8LQ!9HBtMVZ&ej!5UI>;lZy5p@_!?o!ejL3!8%WqT4 zE-OQHGdvD^x%C6Ab+ue#PW(xl7TJ|g-G-L?mbM$*d|~o~E&Ja_QJHX#_?t&3gzcR< zsGg#aY5%H-LL*MZ&>Hq}eXnE?j5O$UYa!cVq6wu2jnJzbw(Ny9H_II|j6kWnF}BZ| zbuk6pA%$69slzKXDXdE(gy~f_5r%R^0uh*&1tSj>sm9l%TBE{{i5TP}2{#d7Z`l#fsAiiTj<)KBPA+#!xF*AbsfS-Yiw z4vqvh;Ye@nFUf0c@Js;C#LRKIA zXw54?3pW%tI?1lf&!55rX`Y+MaB}Cm;`lGOmEXs+d??vD8NxiyV2}qG)H-|`@iiXR zlag)@YVEw$J*08ATOVRbzQ&v|G+>iw&4t4)rmOo)qj+MJklCCzvd-H1c^n{345Wi7 zeAMM@z<)b44T?>-p;NF(c1-X4pSN6gIKdOwmGzj47LR?GsAdzv^4s#+jX4!z}aoGngJSE9S1R{JCpu z+0t9b;>}945^BJ=+(lko-lkk`S@i|gdkj0^c%Cdd9y+I5&Kib-UD21%M^0S)NW77Z zQ?%mpcb4a3-9O<#*WKO@fr$+NLEgC0QT{=UYw)rMv#wHgubJVU&@}d{l8_qsG zU#%k&c(J&+o*b`9M5sm&{JA?AY%bisOB<0eyLhE=3YU-=wdWqtY?0%670dw1X7xCt zp5pwKNOSalk@Dt6mzI$i;!}o zA-xp%w9Xvxk_1iT$a#?~>CS5#96P`G)p%Qcag3nBWb#M0z_i&rmN0e(cWx9rZ|%&? z3f|5p^$9R~(8u**dEx9uXx)C01;Yj3-uL;aFKBjQmerO&DZbLXaHCu(MiyY`mM|b` zMb?;Za16zPHBb|qmEgAcU_uTT@=}Y1b5ozzlDkuTal${~`t0)c{;2CM(?q!-mQI3eB#tf^bP`-Xj6D+F zMwn*yV`X!hVl)-UU3zk}0cNq~=-qvJv)}$Y8+QFojd0bvO0dOE`EaFJ37TDJqhKI) z3wAvexSXf6tpxQ#(^zBCB8~sKJUP2{bh#V|#lx z(@cwFtPCu{t58?*U)?^>*#ejJ<7k;DUug3ucUazk()YQ+_3uZ18tNY6Bo$O{QUC|W zM$#zl9lIpCisATtsb)alW&q2=wHVO5;TKnRH`*|HQ8)%ZHdzpM(b6~KPmeQa9p&Cao`PuRK zOw!@~tQLFKusgS<(_!DZLoVV|T{>b%{ubjNI2bg4dyYFLG#gBtgAtg4SD3n#KiIkU zGGX!jypwVI?Rcbn(d(=c3F7v2RB`_LI5Cjv^HtAB!25QCB?Hv{Vi$}fojdlnyiA$+ ztSa8Y`pL$9Yek~&aO&vQ+BDk$9`#|gxey8K&iSzlJVu7*37b*u;|P`^NBaV01NJ6I zqXBI+nD33{{MFGK z2XlOvF5X5w{8F??!Q1IA{&!5^1rvNR#0R?gseD0|X^eN3HXTac?wqQqxKRQ?`Z{_v%F^{i8--RivDZ%K!SkN3+82t?R{&^PWL(U5Vp)+fg$(*xp& zH8L{XKKn8j&hd_nzK7Pw%QB6zk}YC6!eZJ)+0p5WnXPzg0RpMc{RFAMWNW^7E=3VE zJA-R({ae4rTpr1z;`kPV=1yOcKXiJVWXZ#LLAHk5C^`H1)1YgY02_*3Wr=KUAO2bW z&k|GAp}@9eE#_((*=D~XThgSDkZlC%i*&oUOva+S+>WUPNV>Xo^L%QsVB}F2(#7L zMigj=<)s0cHfmBkrn*c;GcL4SDXdN27i%7|A0GFwTA#7I^uIoX@U%5+b}Y+IfB(I| z>8SN5ZuxC3Gh=j4ACt)kPtNSlcmau7J*D=#>R)k$yO@!iqBpBLp@=3S-m4`ZOD5K; zc1J7=RU-MIO_BCzbP3TyIFtZC~b;oTg`m%qhaLGGjT?U3k+ecQK^VFrg6Wmi~w^YJF&dQYi`5ldM_fQos14{5d2HnvOcSu=qPKp^#OQhL`Fva5dXn#OPjCIG zQFOg3qf3xfpP9kX!2;e$u)%;l8sCx;(b_CuL#;PNTY|Q=i#$eKzYQ6uza*0g9(~*5 z!dJ;d?oQ{G4@1%;)|_NG97#3kI9tI6_XUg?h`5@oTF;{#nk0xo-at^tGGAiC({@5-vgaxAYeLo${AH@4msXC7OI$$4ewY*Y63pP_^fzBKTzcat&D< zrDXf9;+~?jR!uCAyGY55M)5;*y>VaM$Y^?l_x1JQv4RR@R<`i_ELw0C;g%V_~?1_x}AUP#oHz;z|(1a8<<(U2c(EiH!ApviyiCc zJkLeG8f{3A{JOZmyN~YJ@V?zdJ9|BUb9BwgX)3<0pl;7}xZ7GE@Uk1ys1sbx^Eq%Q zXG_ZD+JjB+Yo#-;1f1i|P&Y0gH%D$XSk}EQlFow{BQ8-oIic44#<@2)AS1Y`cdtJ! z&V-nh#6lV4t+C**ulrY3uk+)(eCB$$*wnwC#}NeA27~)iwfL;i{D{3TR1Gzy{T9MrpKIPYY$Hl*xNkua05d+4enPnC_eJooM3@7|j4^!# zv9M!MdHLFmmIFKo!^k>B;FFnL{^8x)jwish$j9y_3#*i+3RmBvuu>|K71mGXUM(hH z+{26W?@S~m4s4-3Fu|67_~u_;lnOAdU{e@LCmD;vlD4W^6m`&JkagHqMNu-dwY+UU zK(Bq$!Z`b#trd>z7x3A)78~}DPy=$8IH~^1H?{2C&cs463q2+cNQ(Nqj7oMcHz|uJ z9HNk&?G_Rv)D|9{WK}7r$rjTX=7zlTfzY_yOq;*Z0w7g6&i7U{=$G**ghr2G1asA< zryw*{$}KERN`QVr3oue>-7wJ)#3{9fvk0axyloL_Q=;p_1~KH>{nH%*#)&~o2qBah z#o}%b>7;C4p0_Os2;uJk@8UInHxQs!g-kzH!Je74a;&h?H_HsRnt@zGXez{Lj2^)% zwvTBQPV5@)BW}BIPV89%11W7vMPZ{IE_URXkF5Y(EYuG7%s&SszZgic#TLi!j*K?N zb`&nCCCjXRm;7HseE4Dj)5*n1n^b>f=NmizM}CTzS;|&8;cFrc+;ZQn$EXl`Np5ge z>PIdNYz+3CV6|8nVG564fKIea3w})fsLfPCg7+ZH&@BoZ8HJUMmkb-iAZ{Q!jz^@z z&?9;i!E!3P2`Kr(c3`6eC$b&jArc;9(B`|)UA#SCAx(5YiX793MM8jlluiod>v^yg z+Sw&aB&lNlU34PpGGvIn=LS6;x9OYc7+$1s>2OR1jBs}leU@oNzvf3uLh>aLj`n1Y zBxVUTya!IQk_SM?dJOzPcz`c51~6Wjs&s%TdQjh0;81TESf>F{a9uINVH!ktz!d2p zJ3)ak>jb?HHs2;L))}BB{(a$m`~!7J{wy=7aaDYeQL|&Oy~R+daYfr${JuOR31Fh3 z&^FrP?2OJcE3XQTC!I6`Pym-MV0R+aHGcaGaj~XjkNc->xd`{6>>z`rWr3#G`WW71 zv>YsoplA=nEgjk_Clte`^@IWc35i2G{?D+lmAIM;8Mu;+ha5H(O?ef}e@sdauFLp{ z{`C|JbOEiuLjAiGt{eqQEr@-^b4qM=urRrd<2{_8r9>w{JFTbK1k5|imj=ol9@QD! zo+8(T5bSj&^a+&cknBrhmCQ*Sa_UH@z%clQ`F&3HW<-)brHW@I1*&f8j!7@_f*iSx z(N4s7gWC_#8hf_?o#bK{14v1rBeCLhZ_{#oEP>Dw{&%4t-^SH6*x)9q{ao-a&_UD#Wlg zGgATdC6TfeU!ew-ec*N(e5?cZ4udN*VMCTlQ%Mo!wIDie!Zbc?+Kms%x&TrPzF z#ZSLzxDoUx{2<;&r zQv&cxM@p5?&;yy~LOK;D*FTH)tX{6`D0=G*+EqY`;krn1sd_*Ah!(0Kd_{&aqAuU@{|+{j6VkqwW<#E z9{oMxox+^Zf2gX+m8RH;#bAN$el8Eh01Hi4{$MLSVNq&OtGZL#&!oEk*+TWZT#LU@ zVlIQKk?u)yMX)N(V&zI^*zjGk?}EKg7faUJL^Q4%l+1$msEGuA6f*au7P8_5A>3@{ z#>Q56Z_nd$7=!rJ&4&*Edvz2K_%E!g($@Y(h?y}ng&4KlF6UfM3L*D+Fm z%4o78bFzh3!la2^Aaxr>~ZuLvAVC&I#s4I+ z{ZL-8o=>&jvOs{Nt@p6&UDNKG-0(UL?whBE+|!N6UDN3T)-VBHyqxLgny%hJwI}xa zU-;b_5M-0FJ+9>-piRM0+V@)JSG~fDb3T;$CyousZA-`NsqJxLXrhsKW%bEoa)F}Z z<|Dh{iL=iapLtw9!O^dZ-!%;fY~1&rml!8}>hVpwnKlH$+)FQtE;=kTo*%x;A%Xe8 z;9*6%)Db?%F_?QVZL9tBo4yRS(gct@q_SNOOOj8uwP~PF&bpXcW!iGEH*BNoFt=nOoqQWq zx7=h_Lwqg{ETEeB9V*`GpF0b%@XwmXHLaQ+58KuebDe6OPQX=?iPv+X|_uVb^v;=3r-prOjywjKpAog0*yGp!mXWG}787Gaq4lBD2XOrPNqYiIZ zeIu3*)~TOYuOY3m;~QEDiMckFJB3IA=0eOBrx6KSEiQOd8$S1^dat`V0R=}-MNeLz z0o7H3%db~YvB7P3xD~B*YCd9768Ev7*gnQwK|yY`{7T5BaZ8!5EhoAU*M3_2~)|(Z%--b(Z%MqV7j-Z+zs#GokPxiodZK zmu3}$o}yN(5>W`}wu27VE3I;M4-X!R&o{rk>;)U#79o_aWb~zPa_&WMPVb*@d%297 zY=@-9=GO(=YPsrewsa6Wx_cl5slQI-lsDLy9!`Jg`#i+o}bfTtfiX0EKJb{p>-aO_dr4}-{XM>BVu5t zhD&^*A(r{z^|Bgoy3J@2G0ZJgTO^8-d~O5TDDNE^FL2v^i{!STS97Vs)G;|eg35Ki zd7Ep$eJg{UL|R7X?w7yRzjoA{9>0y|@CKM!a#;={d6d~(>Oeqswh&NlMVX!@q36-u zYx~2S`t%dg!{4-W(AzhNAXr4J<&NUDBN-v}v}T~|fP*VCKtVcVKA~jnXdy?CYYgYa zBk}Ac?c}&7NC#@%R+2#RF=t5l;dkiBdFU?iHx_D4UQxuswV_K?md$KACcT$<{Cg;f zs%K>cb>etdy54l8b07J_s-;x`b@$GG&Fxd2J2Bbu)9npt4NdydMk8FedfXkwLteF| za^;Lc@A`0`gMd3#G4)URUic(L^6g8 zBKfQZ@h0VbcwUU?+BlVRX?f8%jH)8h)T}(-{1gEy>98IBcYvwU63WuAHQ#hG2eOm& z!aG(H-VRsurZ);W{-Qm!?LYeMGw+{kxjq(lgeS-ASVa^rdRg7P^~P37*Nn`+ok~s1 zU(H+fXPBJy;dA!Sy>adRJ8Gn(5_HmBDLEhBfb8GmYLtGMTXN<~Bi$)3nQ22nh9F(w zqn+Ko(CRd8;pzV5&5)%7=S?n(iP!b8?D7@q`7NP^_U$bq;cG|62KNTe`#6118o19Up3tM{GoDHJdbRd6J11_q46SvL!y33-? z+*~Wyv%Fy?#>}-<+XX@CKsI*(=yA#BhQOkOwW8=ke$A}aE_ZdVm2=nq3)-nJJwfxq zoR2_shBeE+?c(7C-|2I0Tug+-n^Hv9hR!DLCNx)Ym4&H>QmWzLqpY6?SxVPvc^$bz z(djK*R2v0>5C(z#`df?O}4KuDD~>Qy+*oN6>TDh9d~5IHT%4SJbBg#V-1g7 zxC~lu2Ufm^5I04N+T3|!4{dyws~}8>b_tBQae2$z`_^5?)#FuZ`|DAkVBuC-n>X$hL*RK4hfj2BxdpS~mgEg{J zoilISCdxLhj7gdXM|%0?YdsaO_o_Rj*4sMyD43f`7Q}MdgGp1c@1o>Yn;OlHs`z8S z);%#9GGIK$hU$pWP__!aJCi&)Q-D!j*6+f5>_DG=4Ljy>?=*ft!QbI%&@Cy8mCh-1 zqpLN^sI|J@4R-D{QEYG;-8N5uNk48?X!>nU(YgDiAuv+K6ql$)Eco#*|H{Tvzk%}0 ztVg2B2FQljY=+^gABM}o6*WV4c@O{AJVRElg2be?gU8L$ovV(y#me(c`a{PQj2U=z zagQ{!JbE+t`Jhs#>ec1s@^E`=^Vh(b#22Gy6!7A3#VrDA@}U|i#m5c3t>)w7?%Z3y z&)XPCE{ScN$(U@HrL5J*o+<@`4%XYOIcsU92bGgFSIndzosRp=;MA*Ccoklsy?>^P zJ#=59Acz{7bDar;v1@Uqc7VEf7+S8r7+UN|jtE|z=&EI3tUCAS}Wp99=1r7Yre~pJdJY=CB-uhvy_6M7rrhgWI+sViTiyjoXg(O)o>nLJBkbKe4@c zkSr{{`~sfu3y+R?D1QilK1=f zD|FMp!qk11&G3&Y>mQ?L-f!$XY{YYCM=WKDxa9;THPPdxX4Zy8*1RZl?2dhg%s;6Dbx{zoxzEcyev=rO4SVGGF(QN>R` z0$I^zGhEOpW?duc=g4$an6ocN)`PX&XZBrwcH;a-?0#%eo};hxoou-x|`*uQM6;Mv2X4 z=bzv~NK(5@Ht#t4TWa;pNY#JWCf`xS3T4P)*v)62LUK#IhM(OpKL^p^e#Sw>sg3!d zwJt_g`6pxGGF+0BPpYBQy13Qa=@KsLN)pcw2N7od<+tOB!07IFZ0GG(tgmeOyFdJY zalWh!b2d8wvb}*&rm>y&`TX0149-*Q9GE!qAd8z#mCoMd_EE`7-=gBwyQ7pZEiH$1 zxkg*!nIXStSsxYYz047%Tg0YB@ZxEgS2*j<=-IJUmqjh5!Z}r}+ zL&~Jp4y5kQ9QM^)MrJjN9R%aKZBB?w8rhksP}av1xkH2XT;hTXNMwT+*>RgNK@C%M zAh0FYk~;6zr=8~6K8w{g{n{k6sLknlmL1k8f@mCL0`a&)r>LaXx@r8=D`%%qH-}&EQvG^AAZf!Zcg0UdZu@dR zhPVv02%u4{*X|Rxd#y0V|i*02$ubBb=iM@mM{%#zux|> zJIt5gK(?}EEQcA<*v@j00UNpRUTc-fmeR%PO-Iaoy=*i>3{dZ_F~L@AHF<1Ck#6{qtXy9}`s;#~eHF_LXM^exXpl>O_V z8Mq>MCQELB1QT_h$xbYlZ9^P4itzLb!}=GOH?erD`2@F%v`)RNtR!GxHaFiSI+>nE zWF(~w0~Tdhh(1Su?E(dlU(bTf0-81@-}LUKbvOan<1SN6%7q%0TN2NF$krSIg>_} zIVr>(@rci0;G{7d80>5CPDuWVONB zCW{7LyV#6H_HW}O<+>$YM38K2XmXlpi{W04x0afYzGPsK9)aU`4)>mcdt>V08=ocx&dyPq-0h&4CJTAFn>_Nk;(8t}klbb~&IeGrz zV@R_8A`ulnkF&C%NP*De2%oIW>xxqPEwAJdYiNT8;Plo%rj0#q@q11gJu_ z?!nWjx|VwOrpXF$>dKW76{)YqdN__hVgNHOu0K*;XKy(d=L?82y3(x#9uUpb{azH| z@vTbXM_P12 zBdLA&KLWk@EOv!*lBVtKigzf`VN%4KD_eUeUhkguIu)bC)qT}{9PRo$aXj-73iZ@jb;gRw zD-X@F!_Oa}X4jv(-6d`31bcgVr#Aw;@8$`PfgL%TXmm&6#52Q%Gp&EB^mbmV7akA) zzU{)!+bdNzFnCtujC3cC>!&&vdE}vPJICr2Mdq~KF{f4wsq@o?J*eSU^3ty~Vm(;f8rVelPlKf)v9 zLcmi*&uyNWr=UEkwvR#tUpncKJKSx2uAgIq?EL!{lH>M{^myKJ3z_p|9XOsw&eZkl zfoB_Oe|>=O7jja&d{DQgM|FtZjgsW?^7UYWp2B=#_`z$X!M2voU91;XTr~F8%Hy-QrAfBfnSp`iF5s@o`)da=BnRR(N{yi24=NuW)*QuRj zKa92Sqna3$I5{87Ai{WQAKi=>O^isdH2m>$2FojFMI>fM|O|&pSI&J1kAOvQOU>yGCM)!x#fg8cruk;i~!S_W23bRhn9BU0R8&Ult)f>SXH^5Mh7;`ISKI!K?n681RCBPKCIkcY;S=@h%%*| zhMwbRVrgM%l-Z>r?}?6&8#2+(*9RZBC*A~*8>gH~9yy9xy$4#-T6YL@0=q@&=E(Fq zhzDCjR^%L0#^LVc6_mWz#J&^GT;9%XtqB5Z+$HydTlEz^TbX(uB!@vAUKkQ&RMF0Z zEJjioY9LC!wks#(NAQDD1Rp`q@-XSx)Xdw*WA~KpgyMNW zpzd|y^42!^z9JlH{QM|=)dNxh!#7NYlRX(KD1fsPv`_p_t6u>Jg{za!bRR~=J;5VS zBMidwJpf7A=Ffh>d#gEn>hy|~-zGO=}g-uHgb#g9IHPW3_UU29eC z=XBNDug54^M%oX3P%M1PV(P>ppRXvO+55FA)FhKYV<@Azj$zX=S^fAA&`|v z$xk69{PJi)3KxM_E1O>BrDLtRY-Sq&(e3s+ql)F=d3Djzq@Yo}sBtA^|r-bz>g+A?Fg- zH59?itpcx~0O$L#hc@O=wdR~oq?`a>)GFh>4MwoVhBG>kQEOlA7`@?TKnryqSmJAR zyjg}h1ze2m;k|*HS~MT4c}GS%N))qqi?U|jB#r4G2SdqgqV#FXj&pwk)e1i2 zIHFoDh){o0mz1!AcroW~*SJ4s8tx6?jr*LhaT_z0g9N#`Qi)*YN#A0qc$zK*wLJzZ zsF&}Z;3f~(4VAMt*8I|w`P;tyX}jov{xe%Iru_>>jz7*m@L>51n4^i5S}>{5td|KB z2?4M;O$Y~-rRE9qfa%LHzSYl$3j#8+rIg^_MyX2|g@L5$s18V%q&@mK)HW!;19W-J z2+CS_LEiI;m#|?d$n-dfh#!A(WAPkG$#+GU7R(t>gQg#)@CYjwTy~*{6tRrA>MVg+Rx%OpI7)joDrCdjuTj*P*f)^bnNND!(>B z#)_^4B#pd2pNk>BZDaj&%?PYArV*bDf-45}_ciZ2p(k~V!^!cNmVWg9^noTkfe7P+ zDb8RXs;VwN8Ltt#G*y+`31B9| z>IXjaGuYqXDNgmCt4PgsZON&v_QDy~DdJ!{4ONEia!e0PJ9Nv!_@k*bmwhFPbwWrr z(|qx8HGX{G`VGf64CC^GjYVk-UHQ~Ki1bpmpXTxAwQryva@5iO0}wo?ns6nA?w zv_A++91+*8r^%$HCnIY4}D97Jb6mvdG@(Ko7py*mIm*8zW#coSXLG)+}9Di$^YP~ ze(Ckwo83nMYF-j|ovLSU2zYhB%6oHxv81A2*bx*J)fgo;Uvf~>^<28FIs;Jwdav8F zNzoUYu!XEIJ(nDSHDAnj)r%B&|9mVH1MIudw%^0qNo!NKbtvrPJu;l1CagPM(04EE zYNgmWV~m{v^EVWs)shVT6hY^{(vwrll|iFlj&0xPO&T&UpyyZ06jwCxzlwIU=MD6D zT6g3vSblU{W^gruN7Zg+)&P6mGoy3($a?=eU6LtrmbTa} zhyT*(^XG!|`B~U~sm?T3TDjFRw&YsNclomiC9fvv{oyzDfVt90uN;2*VX_q_iQ&&L z&PK`=E7C^W{!f1gy>@`T!s+Q6D2n2oKd!SrSyCL1!b}lt(iG-c=??qb_M+79kLtV6 zN+cOs!j4jZ*<#^|8D%Byz1={8W^>10RxP1>Ib9C|!Pbl`(*FC}l3Nor*#1Alaiy8l zPLw>zqnGcP?|}IPOu0l+)(Eghv4@7SzCJ+bYDni+ss^^~&4;M2vC+?#TvI;o2_urf zy|hUS@#=ec`;P)KA|tv}U3B@iy?FrwVz%r;-T8{Gz_^1}4ad@U)x}0PQw~lMo~B?} z%>%1ysWxq(&GF9Ha$x=k5Wjb)D-C+CDi%S$Fq`0iF%^0^tDVk`2LIKyx)v{c)nT%dUa8&lnwS&lqTcf&>4Y5gD)n8 zXsM#jIBk39W#d`bo6?o8!NF1l-|8Me(uSG1tuM+8oe{jsoNMHI@-?Z%@}8+eh2O1;ZtzsQn#mu$7`vMeD@Wiq*d`&IY>@ldufkWZSar|QvPS(5)*1#pE8nz8Z)fl_ zN_n1p(;G1xyOLL9#lzPh{P^u_R*jqK!MLhO_KJhsfIHS9tuHQMukc9AVL6EXak1X35kI5%H6opoH_j`=Njvk^j#P`S zIoKE-O^#SeVEa;@zZU+Qs;^mnUM$4MhwOsZ>j961e zJYbC(U`1w`^fAcm-(huyvxoduh$;|9maK+a%GPcEYt`FG*n_+1#d>rpncp{&Le7#c zsV2XdARl2Szsj8QOX=_|5HQYF^6+1lZW*8)0XbOzpO`pX>?>hATG-_amK$=Nqc&Ew z6d))Fa*dHYofH8AfpVSXx3VS5WR>-6GFLO_P$*QNF zpTFfBPbZOE4gS0P>&MY?wx?zu@a5^K>sh5MpeKsou5^XBI^d4au|@;9CODM^LqHLC zj#jPQySe2Dylu^Xe{J5cShiappL&-yFh9~>wFSQ4EKXOpdNwVpe73b8i>6EXzx|xK zd{n$mo_1-fs^7o+D62I;T$@Usz7$@|A>jcwq|FwE z+DjYh{H_nrhLb8hsXqdGKq-&nHrLQYD~}FMfDR_RjB!kw$hT@3SoQg`RZW_#vIDf# zaC4c$RZZOaaej9I${Sf+n8OzJwnG8sZXWVCS!Vn0da-9bzQx=RN`KastiLi5 zOFmf70Go_*)#J>w8xUD*4zsF`e*R7UPCVEspP79Cv2&h11+sHbqa>8ilVSt(o3xY? zS-(>iS?~a1=ax1toTsmsOEjR>zhn#^Ve>&xL(VyS)5)ViDJZgrvW;rUC`I9`?<;zc zDN$$fnkM==5c#+%46?I0eGKtzm1xOO7QNE}>xXI7Rzr?_@YZ)e$#zOl`wUoQVP(gyaZ17FU^DFGgN?FoG1HL?)SPRQAPN#U*HR%n zf44?=!p_N}fGRpC8=nC>=WlQwU{*Gsss^6-HgK;v1p4j zSmc2Bf;|;BI1I2@1e$MVca*9nHc{X+HbhiqrhvTpvTRu7@Fdv^1+pOPCfl0mgxwaC zwmO8_uCy#2cyDNoPFQ3!5;;UR0*tFEkeDQYI2&owDLF6bO0z|fAuyPeV zvNv`NoswLg0#F|&Fo@@*fpYU=lScF%MHnwGytEGlRznP-^=9*PNMGlYt z>T-1iHxoe|4`ksS;L|oTRMeJ$ocXx4f43tFWdOoi3Bcljs#WAh=pugQFe?)+hbPT0 zE9wmo=jj$xNVz)QE}33C$WhZ1y?b)S2#sVcyQ>$&$d=hblx^AyO;Jvl@_YhCwzaxBR5c$R#yw3$y;^6?t=c6$6+prCc@g4VRUz>$Ir` zf?zK-A7vM0UEk(egt@E7_(2y%qFEb#x`{knv5nb3zlXOZAR$McMD;D7D91xXha|(J z*jcJxw9yIGkO;a~nwl2w3sG>i8Mw9Yhxj2huX){KS(3>LSz869v$S?x4dp6Qcyf_$ zAD-ngJx?Fr{c?Gd36E9OxZ$^T8Jb|Arc+?!_UR)W9Pfq(NL^B*aVGDVFl)B6)&*oE zT)z}uAjkKgLotdl)1_li7z){n5D0n*4%nqQJBpJ>CT7$;L3pJ*Qcje-<_WrG zlo^(9)UFi$cwXZQASjUmBjGY3tv5@5xI*MuGICJ$Glybxw7Vxgisu!Ail}Te?YIy; zZEt=`g>X2DXMxBhKuT?~8cLbH4(HS;DZ>gef)_EiqL?>v$gNc|@N{sP5kq+h{>rF8g zP)~eT1mbUu{2{#9 zxhw9!o0#%xF$7!d=9y7@^))8OJV?>?HG*^h=nh! z2SkpkOvz`Um3g3Z^Ba02)WCnPxB|+{ftX_G9b`>7B_UTQAl6oa?LE>j4`Mh$GV#wO z6EE$^%uVpw5km=3(ZN15sH3fMBIh+hO_~Q8*=ZFe?9k64U1H}*&s&LI1e8}Q2HT^? zUgri?zk2u{BJ;;^+m%BtzILU{9$tehRez1k^AO))V^KO)aPh8QJMd5y{e0mblcODK z);kjx`5T3-6%GeG=l}_g5VWlZxeWLctF z(5iEtoSyIa;k~Sa{OEpA+`3_1JJ)I5+T*@)@f;O*Tq`6fz&QKp_Q_VwhI_{13td8F ze=b#A&axx;XfpQs_3iV|$Ym+7HsxQ-`oP==y^8&U4mwJdk`%& zMyHMsf{t>a<>T93y*~H%UdEpv@jz;w?aiIH!a2fUVw-v(ssk zkBhuVk||QnzeJ!w=*0?!5_~e9#2N(;xEA*aVYC;ke7{JvBeZor>6y|ZkQoy~;x)8F zRPOuua41liw}?n7)EOWDxO>JEzxVNn=h%9-qD<#2$*D3dM__QY(`@-2@i%1K zW|l^BMv+`y0Kz>kza1q^XSk15OsaK z(hDYV?UcUvhJcZ-Zi902|E=LN)QhL&LJz1lR-2XeChQqVQ&m7fjP%#TmKHZ_Mp;@* z?c%h7dHP(xO7!H7|5GJgmS~feGx6d#bQ8GoeYE7MK1dAy0Wzko3m+ zBoXlQ)}+1_eNcdbE$1{HJ+%Ot4_F?@+n%brJq8QO^ z`gy$P=->VKrD*r~M5JUFXpJPwNPW!4inWWEGLSqs1U`*v<`v@)T89j_FPADVoU3mT zt?_+5i~QT%C`vE!w*T!%Wq!{`W`!Rv%ICAVd>_H>Fw#=(f<1w#y{hKm`YIrs=?Kky zKs)*u&! zW^!###+6H4XJ#!u_g6d$>kqTP-y60Z{9mSummG*x!uyMOTUThrH#xkw{LJ)6l21H- zfMJZYVJRsLF{RHDZ+MY!lzse;sF`P_a?o9otll$iBaGu0F1$NnZn8wyTPHF|N)|q6 zEa_vH)bz?Vv<8|`4`O4N)n#2_7^obm%h(Db$HvRG;%sG9mpd6Qtsv{DEkvbMW>x0s zOZxt$Rn$^3i)tC2u#UT-Q}0i!WR;T2FEwgt#E|%A88vgSc3<1@W)So6k)7%D8T4I2 zhI4TwOWz@K#UArk@#TUmahozy_H4|t#sr~jl>D%Cto$3C_O`Mrm zKamjVUD!{>?YzdjRSVk%0F@k?lr$1C_&{ z;wi!fd5AEx+y4+s0EYki!VLa*h~=8$_+L7O8X7mb5Wg z>!AAnBoB+)RX%MEp59IHwzlC-ZQO0_T6Tob1 zCCw@YcYQG_Fq6h!1g3kUPZ%`~7g0U9D(?s5pvOv!B&tFvFg2z$ zHBYD;yajAbRO-)TQ2?5QtZp|O#_aV=$0jk_)4WJd+q!b}$2<<>M*oz-xG9y06>vqR zV7}3~6?t!I(KYo84o5L-vWqd$Gl<%C{}G?-l&B7%SyaZV%Ga87=q^VJF?TuU18$Pt zEj47CVLmvmI@;7$c=U0?LJSpcp6Waqcd%T z&DA$>26TWs-v>^5Au?~$7k$qcVYsTeVGB2!>cVH~dj(7QnZpA7_;dESGizs*7W%~O z^S&@3o*08og`0j4(5`q>S=#9d0HXY;7IH$>D%g)I&a-micsbbHdMp?D6#V?yaCtho z`U_kp`NR#_=pQb5dSjt%282;D^(Cl0pJpZ+;ne4=1_rO)ZJjQvi_Z?&Bu&~4x%TR) z^(lIxqhl6{xdE(4Q2cr7q;YnFaDB#n2RaG3vq4R8E%wd zQCTLY`sNm-;}wKE0B-B6OhYLmg;=P;nPHqvIxvxqUQy1njA2AUF}M(I(luSW)cGjV z^?79MF(}m0Sa#s)-U@{9r{|w}e&w?`e-I?U(6wO@?6`K4taC?pSMA-4iz6fX#WE{q zKFW*oyWQzPS8CKTi-N=*x#LdcxW{kGhw(VEZ2Eowc#ZpwadOlA$g+ejgsw}D-<{t} z0uShweyn8f@aN#KvkW4qg_3#~MTi$d;NBL%gx7291VeaA%@qh=tG*Ke?k!)ddANJ- z^mXV!8=>9+Oc*voxEPeH(-Wbfe+yv4dV4Qj1B39@51du)31ITSN3ky>qRV4u1%*^W z- zJwn;8bI@ve+?|-nnpql3B$5>Apj7qCs**->2RBap%wi*Nlnx+eEx_qgfimm z!{WLqC(fag{;S#zX`cx(B<|F&)qjmO5(0*C7yymajt9!^r6t623ubTO6ZkNu&0y!d zCwO%PsQnF?O@*n7P1mKxYH!u|#!frndm0!8LVUxm_!K=J{6WymGpifX#2&KrVYW|D z>58U_O^OyZg;z#O`yR2$L+52;ZfT0XkfX*X7kHh5B`!{Bt}HJP&yOWGJ6w>S^5NY< zOS2v{?=%uMG3%yso72!R+d7`Oxl1xC!S8v)IuQfPOT(=c$DNy$mYJnBg?LF$HK-Q@ zjHcCZ7Y(TszP}(Zm7s}vnE4~D&Oe09MLt7^j$bwVFK7`|XU~w4hi(**iTxL@fDYCE z3baj3M{;3R|MAIW)T2;HV}>P3`NiVDcQOt2WgIGxL2n^O5(4Qhm0L+UWG-;xQ;S<^ z2J9kCt_x?2^ZL9io$V$YRTitpj`2^T?fcL3uH<&_WN`r!JGd)5TYs8C*-BJfQxTiP zUSGbe;Em^x!k9zPZKL!WHxwFh|MX=y6bi2Y6EJmEsp=ju7%uyRh~OG@{8N>+hs>sw z-L6{_j?X>z`sYE$q5}LU^&z9zaXPa*3Kek2oIlH3j_$N$0^*?3UJQ@{<7%Vw+r5x^ zBl45&fre`P(C5Hs8ixP4KQvSS^^pC~)XnIR!?D~hhvTnB{xGwGt=0#%xB_@gSn9_* zzgqo3Rr-Fb+!NTNqO$n7Ewx{DMGv|2bN9zb{P0SXs&Y4LXN`+D-j0g&sg;T}YZp*~ z1o4>VZ3Kt4f<3$V8eQ+tMk&fyqk{eu3i zZNmYeh$xjOPx!x`!heIst}0Spib_(4DOP!(&jGBVY=o{P1VJ6BJu=ntknNXVb11PO zwK*sFdjs(67pS2x*{7n+z<6a(oW5=P_+G=qJ-Ruy7mHhbOEro$K>e+aqXdCA2m%alX(b zk=3m0SEQp^R~1UjH@LW6GwQ5-#%;2tL)%+M@8=^#c;~n~+{VHvph!vM^)L9NNyEkD zP1POR_GiMLwtcRrJ6Buc#+%^N`{1A$l^z;ny7bElomf=hlRUmF@eR(;>Mj?8fz%!G zz(Uxc6K8nbKo!RuI7MvWttNAleRe@);!sKnySS0JvTXY7O+XYf51H*utC#aaCr6kZ zm<QHrx6A@qqUW)T@ZjyK1@^iy%g;ohQmK@c(Zfi{XY7MLU}Rip~j4+MsWJU{DaF zXTxe2WF{_bf)ufZTsKP|l-2F0==XH$X#aWxV%sKI2Z_JSw%lg}KL^c>s~(a9fU0*i zx>Vw#SDwJPhS!c{fFZxW7y28@i{BO=YM^q+PB9iYB$hJ@J#1+SHzW|BB8N+Q;3NL_ zuW{#&*R`K0g{VAiosPWy9_Gug8A5Y>FYvA9)mc^iFYxu!iBwGQ*HgCUxMK+{sS)ft zZ>%<5p!Y<4yZ}`g+4Wjk*QIQkLKgigoS5XQNWhx^)3J)k$KhhH-1$M>>wR&`%ae(S zFmEAeAf*UoaR@*{h7njr3}-Ksqc7C3z0m>vWWp?LZN$^+DVa5SQSW(A=+j=xGR7zP zX8rlpTFUmI-bNVv9iTD^Hc`g*@pgNh4}1=bcS%9Lm@@D$FjCkkG!c$dY5L(H(NyH1 zHDX4fw{EcBs#4lLX>hjIUegrse-V>s0Bo7Pr3ZKM^EygQ;&_55$jZ=9n%jm93)Oz%CYa!x-Nf92M+ zmzu2>2~QAm(C*ukWLI8rPHwtpvze<8DOxbEb(MrLtKm8xJ(MVNRo5yFmY1So$C?k8 zMe(VM-OVp&5aBm3p7EFZrTfKIPjyQ7I1(CBg#n1az2|*)h0SjAZf}{+6eT(sf<-0@_WH@V zy@BKBjxvX4-J$T?=Y-IDqa0hzT({Gjha6BpgiZ!{7XioG=G$! z&WJ$FEcI;xd|IUk4D$r`M5GRI3T`lc4k!Y4q8Q@}-8oL*(Ks&kEfcT>tRR$pVc^Rd zaL2w~@QDNY!yW&P)K*~5OW>*e0IaF#frj6+34&JXRoGN>PJIKzH0}Y*f99_6HZD&1 zS3qFs=)(^qe&wAAnsvJu!BXLyh=aWD@bCsuf0VSv?cK zA1Pzhe-5e|VngV6P=;qD=H;+`!x;tEfh31{CI~9fav%}z;3Acz@JG1?XX5S9;ARd@ zxU3ygD8j*5Nio`Lwin7MUilc_WZA}aXB&3?dvjV9bm&`3Q`Sz!xuJWL`D%qEEBSQF zX{R*GX{qRdFT3NOSHyzP#DGV*pvr5?;ZQ35#TRYC_Mt@k9B(9I&V{*e%6LsYK(YaX z<+^vOBOjzQ<_c3=VpQlcvN;;+!OkHIUKP4aDMPEN`M@8J`587+hBAxf)hdealwV~2 zwO;A04XE*q%(&YWrl2`^xLpXVI zAoUm5T`lbxc-)j92HSrXL-+&PKZBDHQNkK6f9Ozzr@J}94%lan4PehGO*qoARwFkF zs|86{MVo|sp-nks`=+GsKhQaV0U$|1ru|j0pvjb=+*KlUQuJ z5K5T3hb_iLsp8ZIEeo;8k65j|+aT$j5%UIRQ*V+;q+>EkTHTC7&ie3QEhs}^l6P?_ zd648-4d|Lf?ULgC?J?Z%`0G$+A)TTQtkFf(aljC*R%X;}IwMl<&dj=_A}J9TXEgzD z6y|RzL9d~GOKr50c+@96ELz3~MLG=izrtrkIvH7 z4H6MAT|@R5e+rRv%^}$I{c4#+VrBa%Sxm-4jb**xr|ruMQ4^+fdLitp;*$qpw6qRO`0 zFH%eswo@`NY=6Vy&--*|)_HLCNuzURJVgG%ICV_qx?xURx<$8@`uBx@+?@yd*I}jI zoV+&?*of49saJ?{gkcNwwj6#2i@V-COAgQr{%~fYb;}4KF~1+unq7;ESx!AX@~-w& z_JS)KRX}tyE*`sQ^uUpG%!G<1ms2Q>o4xM2rou;R!&Gwqn?ImHva3fff0l%>pd%rc!?Xe zm!lvEdwGwDG+<`8!J*!@6g?3xCx<_$u`CX1ZAfzD)cG=F2?1$4=TTWCD<_BlATeg> z|3)J4xnu}=dvAI3zkJ}L3lpVD@;{{s_-1^clNX>uF$unAa9VB zMVXr{#=`LZ*BgquZu3R?$AY6knKM(K#0@67Ze1&7M|7=)p{UbI3@r2? zhJ9eoG5QP7F|$9b>81)wohs(vV}ay7=_C?h1OI(?E2*ZR)~^xS##8nE2Jr+ee3rq= zYojmsS0OKLAD?dfon8l%C#PFoclk0md>2G}nTZ=n(Ut2@5KHrim4zM#KO`9({bW!8 z*V=Uf!)-S#LYQ|Tuc_cdPYo08s;Ql&G`r$9pvmr($Hr6}Y@GK*Zu!(7S3kSI)i@pBX&U>;ztD9w_3zStt571N!#I37<7`v;~85_|BW$00uXEt^_sD z&aDtLl*;3h*Qbp)Q)jfODORMh3r@gC+sB6$65#uFdA{n*R@>`}z)UG<4ZR=UOmiQO zN^PKRpI7$eH4*Xlr!VlamC6SnhGiTBy^bUApbO>Z<9aYc1o##^2IRN|y;G`4s!Kay z|6Ss2LX~FIsb91r|Eo?PM*ECV+jkyX(`FP?H%E0+8$r8WC2bGA6zXiPz;=$#;BUf} zI&n=rHu5rIvXn&TLb9i!9Zk>8J!t;^{au2H!9vT-MLM^ZlLRHv!B`PtAd{!_7&ftH zgTy(1Q<>Rqx(g|LIxqpYPr+OZ%LkMvpvqZJ{KdxQg%U+;g7uh-Ukc0FW)Kg*N2fFB!ht-YY}mJR2{M;p6HfmfqqJY@syw+h;@#fZPnT=NP*dGd8#ipn7 z24&3`$wx8p30$)&mt!x4(G0$P6P_}g!BID8o=g(LIbWDu+b4oQfWIpGHi{j+T;W3s z$BJI7;PB*p31qF(Xmawv_Nk#IO9c-EgdWQ{t_DYkTTyhV%E_H zww0_qbZ8$g2TWgmBn-cUE@mktGz=yc*J@A#S2VlCI$eK zDH^Ebg0)&rWk!qcekT?+FDhv^&LsIy@(CP9s#^`Pb;OUJxBaxCYf|5cTjRUMWfN%5 z2kLg5-SA(v;(O0X@?I|S3Ikq|pO_EUoOqN;{(53Jd(!7yq_V6RqG6&;xK8Gv5Nx%X zz5}1mMteWHi34JePGoMcShErjUL$vwZ2m^fBR&b+_?bT2)FXcG$1UCX`nA6e%#zk` zmY)$L*XKbc{t5RS>3R|>rwSds^ApFo=if(2`atim!n?xv5NjZA zsQ#hvWh!6;n|fEXsIMi61{C|w1$mbDU*}cUftn&)P>B#c+i6Q^WjS>eF6UJ#lnaAt z-G{6@=$FkYQbpc%MSdH6P$QFe6Ej^yXV4{ze$80IA+z)I+2z3EK1q6*4L6)qC83~XC)wj+&`@}I z-6D`;+LhJg%``R0wam_LIICU!8FgQe>Csf5gZ1%kl{9tP&D+p`M^#H8N&j^_kU+;X zu82XLfI(i%&REJ5{w+3t%JUsEb$ZwXt2_~*9^b%B#wd4D)f17KfNj{sN~ou~f!>I- zuAT=eKGefkRsc*4Ya7EXa~H4mLnbHbU8$d&(;!{x1Gxo7<|%Ugt`VfPGr9oOFYqZ< z!T_w=3vyP7K5=Q_pnHV1XsDsd+T|7CkNlL*Jq4{$5jpF>&v>ovKCP}tv5aO3Lp+h; z>sBb*Kja0-%fXM+9eRXZfttDf470p-IH^l2EcZgZM zQVH$myuX}q+kAZeKYZy!*qZYT$^6N`YzVZ^ujXJZ=34c+>`=etQahpP;=Tox%gxP< z6KwMNghYw(xCnt}-zh71+^qID??~!$%opVz3(CNM?Q;XQ0tHSR?yPM*R;;0b!&C2Z z`y~O;>fw3xmQ^Dk)k@!X9$aaAf@_D`o97W$*(x@bSx}Hy!bOBWCR4cg7?eECOp+vErV&P)j6upsMu{derRK3$NQZ>TuT)l0+znNY^n0&SToJ08>lO@tNOMs0B} z!OtR&_PKTR7s82170A#ujrcs4tjRPaMSZJl(26|RvtT?=&ue^oSmFYDNC+a* zM@VXku(Ok8$wsI=liE5Tj}xM7SQ6_TjhA(Cln=PF-YT1#5(B_BFL|XokLO zD61sJ2|g-TJSCWqHWG(?Pe_gAot_PKewCzYqH^O-xnT^Vn?=tk5#V-#bm&maqxz3; zzKZ{umW=kyV`(nA0zxZXR3dDSK`}S~;;+UPmyY@@ZC=L1LVxF~V5n`j(QtRC%56W= z_Z{Is%dv=y7;W!eizqQW0%4~SEwe6Tg+tBn2L+WSZvW&o)3F5CXP1$vsR$BHW39599Ugk5?%6UQuFpM++CY=55d^!Vet_lv`+za+zG zwpYX@ifvR!z{`~x5^(zZoop1n_*>Hft-|Tn3vc-SFryE3#;v--3|*YaCUK9@+Zk&w z2?a}{`Wyt0X#>W274Ga7ZOLG>98`Mfw9B+?6 zN_|X6(puOhao8f&+X-XmQ)|BH?eL}ZjD|A*=~jEAgLc(q$L%AL7ft7DcHWQ|)zr~oGvd3PyMR)CN!h%JY!w(rj+0Pj~g&-1Y zE#X&HQBQ#Ud-SAp_kYDHrV6q(ra>~j=SCHwd@jO-pj|?~jzCeKcZhiNlNOq=47dZARD2bcx7R{%%a-4@8XPs9xX-}oybClkW- zlXMoa5oa82Xj6BA+Y$(Q9b_Ku4tIjgXz*KH6lW0`B%DmGDb)eF$jGTBC!->ofk+n# zLDntBd%01}+G5`6pC!W(DBCr%r2U=wKsS~P6bWc1&CN04h4 zzP0Bu#T8F0qE77bW@*8KEV|YX3v{G%001_=MSLi2P6KdoPJ@BPWEvptZzJs}i4ugkaK$iH$ zU?CYRqAs`#X$C0EJ0en06e#_?C9l`K2QEI`u{<9uXG$kF$cw<2i+yG@n~Dg!!@fDy z_)RRxj!h^rC=m&v@Dr@_DGp-h1}KT!oJw?L#Ayy0!OJn3z6gt=ORt`E6&RvFcMi^LpnzknJ|X^HYKAZ&TF+PQ(-GN zGOK$XIZQt2K0ZEVNOoWqBaNelcXTFN=bQ-tgjdWa4ixhnpZciW4bHcuuK$5NwBTR@xQ~TFLde;c zv!>QL5{%aDP9wbVYANHZcn3DLdwsL6{R1GdK_TF*1?L}%3+xA9HR{Doj0Pglzk)NV36MbZqYvt zzgLzOR9OfI56~IymufJvZVV`NhY&EYPXbg~HxNat0UNB)4|-06k*w)r-_J;gtS3Dr-)pZstZ49Lvt-~tps z#5FD8J+X&Rse7_eYKH$cb1$_&m;4M&O6?3)?G#lXt^o;#hDsVk;=9us3L&O`4h zJrV;lv}n92ZE_b3T}#t~-c#GmT`kd6t}_9J8q7^aEU~(;*?jj8rN5IRF6as;Zu{68 zQfDH+EGWnp2p|OLDaeRju(HN&OL`~L!_#d`(^x}6343;4;^64i?#267Tx|Dhs3%!r zw1*8~##WijSQbtITRlt*T^tCt#@+9kpk)a6yOtRtQSwey%71VQ39tmr6LHH(6D;3B z*PB^yQlWrg6h#WpjwNuw>`_Xvsy98TC{_?H5iJj7PX67VSWdUqH$!iyx8#Inh@AFFzYoPQ|ms>!JBusFZm8sXPEOIt81GGl%d6@*6zl1|HRl0JivpT;!}X2 zr}(#JxN@FXA!9^sI5+bDQct=kfh9C_2ppI>$s`Xg-m|__B!FKCntGY{0MU}@?k6cS zBn*yk&sAfZv$Mz*r|r@B(TxW^Piw1;RaCAbeJ>eTh((FBP^_Y?j1IW z0xntu`gng4a7tgWc@DC&*7Z~)a$S@pU}2KLArWv;_nFN1$g!?CB$+{gO4s_aNd{|_ zg*GsM#X+mX^&PbJQX6-C(yOd`kfPtUM%n-kLCmcnO9Phw;1-cCUU59N(T;JxAqt!Q zO=qDeA_to1fqFEe|FCaf_a7hit;2tk&Rrx*QMK+_SI3uyLWmT*MSw^x!$wBvjhdh> zE>aQU!d(;KaYo$i8=y)&}M=L50n*b~y5iL10GnCI&h-#p}UywgT*_ExqRo z!MDO|@;U;IlpyJORilqy zFs|?1{K&J1_oe#c(SjyB5X5IzWi3bgWs6x)fFH%-`P^}902A-{3YANz!;Lv;S;)Og zsJ)Rn>6*KJas1}jhjn(|anlGCsy5TGyEVNGaeH736T9l@!|@QMx7&;vi(*I9y}RX+ z!^z;`RyRqb7wcVXMard80_5Ho(x-K%S-N|f;Z+ny=APAg}VY0R@-$c2rZLm;a=Hh0Q!p0Vik#-ro}gxH^aiYq<1(3BZ`YWC`}-D{w7J6+ z6@ZUNC}RC;Vre0jJdHbi{VL$H{HJ+y+8q^|(A3%kGI@e7*XgQPywkK3VH$<)c9YEZ zI>%vdS=zX^ZzN-ao=`Kea&pDEER=T3|ESQGdVO){9qA$9)2ZQ8Uw+N|d>DV+8c`zJ zFi_dBW;y71&TGIV;}K#X;*-$14^1b-K1@RbDCrG{a6?DRMan1F~{fiMcDvFzo>L*p%mBh5vSaS$0y1|ar1mZI|4_qsVIl3$Y#s^yE!gfAnn+G zB%`eXdoJM3;(|?Y$~@}$(yc`{HQ}b7w?5Vl?VkNqPu;ia1fkL_y(E!>iMgo4hshqh z{JUZIIilV%c388X7T?y^+9yL8sqW$4zQ-(T-;D(Rmb4NH9r$MZ&h$Oysmx;5Bp;(y>|%WQzoDWZ??Bsp&_P)N0WFQqgT*nBKwm zHc8X{35EN?G3`l=^2+v^2DJ)C#KhV2TE#hf>{0{d5cg{4_C(5ku%)F9@b7JnK&9XU z9_O}DI`yaZwp9q7kQ`3+|LRYhGs+UG`HDT=&5}+FwRRMyZ4RH8Jmc^^-7eE_k#KRn zdAH!yCFFBzvJ=%%R z@_4z>)ip9+?%VIS_fd8esQ%1p-rSr%IdaIiX;$Kz@KpMG>AAz^N!IR3zG4>4y}WJl%%+>KJx-e3&7gr7shQ9n&LYiew&O`pnd}%`>*G@3--)qUDc> zMYHaL&o+c1{DP#`BbQF7V%6btlXLd9=`C&ac|%Q?!8doufW7M(6!U+0*^HTB_5`;7 zA1zz=W7I}1ddv0C9j8}Lw~tT^Z-NhNVsv7;k?^FW#T1XLnOh{MhC$C1mV}y8?!@?B z#I&#xnAa+VZi;@Aq8me-B9iFoUiSC12V>%OyQU96!0*lbWlNq{OYr@T{mJpT2+x*( z%rMC}vpKKT&QXLBAYerqst}7^i}on8t(nM||G_(WyD2kqeZj*GOH|fO{MS+!4k%oE zzgf_k5@+ymGyXFO$@zoJ=VvE^;prZD53Cc`!imG)Zzv3j8*lx8!X#i*si8fslm7nb z9JwL?$9Yh)O^p1Fo;JF`l1-tb7(8RuE@{?vP#4Pm+Pi2!W&rPVBFmYu^Y;+!fV%L~ zHyQ5hh4AvX-$x6x6p?wl7@m&nAO2=pyhEc)s?n)3h?jet_Pu)Tk9mL;Q!MQ^0TFBU z0$W}e^kw+@#8vpZp=~a;Dk1g$Z@C=RN@XwSSW8-}>O1vO_I#Dq{r1outJm7Y@_n{) zZt$h8ev63ebm{;!?oweDLAG7$h>TZ8aFXYnjZl`|Ij!DmznrG7P=R0aCrj~6?#%?y zZ*Z1YPOWCQ^%NVvBQF%~Wx#b}`Q}D$Az3wN^JfyekFrrZYnJhZ!Ty>0# z@1k{f5##71Ryqh>z!%4e^V?_9d)vUCr0NqPxNljbqFsPtH8IM#39nzO2iai@jNCg; zw~C?ZV^rw!!as42cNX&a35H|wvhK7|$3i4a-q%Mdq-~FI7iUk7H{067fnH?wVIhvdr^l&$^ z_;|m{!x;p?*^!x`DBcA#LCyyo$o!K#+4bMGx3Gx_$I2w?BR7hsQEWvzUF=9V6qkWW z#B0n}2jaTPUli*>Qa5pXq@(Lj-&HR?+`Gy@5nr-5zcrhQ!q?JXW#5KhAnhRHlkmFJ zks?IMiExpHPZNLaycY6)E)e>xLBt|p`)_33{$3D@1=AP%#w{=;o> z$78(xN3UbW+b7w#$7$R_fOwke(YJNyk7S3gfKWP|knHk|-I=1v^UX%@L@y?cMgN@A zr?>J1an8B5Z`qb%ApU39_H9q=d>_XC+_K4RbC+s(H$S?{BpA7OMMVBUs^@p~eB=?n z_#TD=s6ei@keM1QRX!PKg6UNnXmkR&Bjs_)V6Syvx4HP;I)&?EIj3F~Gos*){GqfV zaw0JinkT<|)g{>uLb8;BpyTFEYgCkN-@ zlXO=1_KIiwa>4G2w!rC1o`9EZ@x;@2)F_ck7}hq|m+kH_S1wy7_x^@`_FVH`9|M=` z^ebV%Gch^yuF(9AvQx*6J2T(1&5t6pbUS_mj1gh|kG=h=f(1w@QpoBE>+FV*>@!F^sIv?@7u^DW` z|CFsNXzar78SW;}rK93qCnFeo*M2-P2vAhBibC_%;2qvM(3coVR0#a}%4_Re{uh|M z#JPkcnnWKyQZ$_+9RwZsoMEfrMu+qPIbcSfhbEI0*%Db!a;v$aqQ1*e0=Zt0Nr-`7 z;n!9qy{$$D+irGe^oix?k8>Txyk60&F+yUZtm>j#pHH_IQIA{i<&s>OuO3#{>c3_% zQy$uB^)UxZV+35xMh?fl{gg~!lr-5dJH65HhL=rP@`FeDYxb!R^=xP~Y1-5Ly)?kE zQ$QSl!ACm4tMdu!7}S8EXIaNhtva@p9e}&G|G$aBex0+ zpF_A`8G4`TTXe|1X8Q5B+`L&JgCzNu+f*;<_6<`OqDWm5Dg-B?yMKr3915MK zAx?YRI!Y<^7M?mu@stM@Y|K0ccn_STlg8dsB^aoFqkoMhZl~*&Ycb><5I5M%J?3+W z9);fG4jJrCu-cMKBsB1>)wkG6`R$B+sI}Ew+9t30>~}ounacEY(DT^fVRT9>`7*i5 z-K9S6!#>BgJooqt`XyBz({x%U%|2^nRcpHw${LAvtI@Oc6ougXeF5$PpKpMaYTrVm znSg}#6h*3uK#%oQ4vEr~+q!NgiT2&1NlOqaNA>*r63Mrae76w zYNQX-G13(8r(*FL|J;gXN@q-wGd~LDF2yPk$IKo#=)KC+S;G%@2=WKLlKtlLNYj|} z>L;d6Se|%>wQY^$;JjdW(v`wjy%CrlA@?W9I z=IupR&ef9@KTE-mI*dBxY0&E(U&=b1S1UVv`@Ho%uP^%%)>(Md?1;S}7PfnbBDflP z(9+y$(4y?!x>-aOUjJ6Ilg0D5OEJYHe{!M`ldrHr*4(p2x$?n{h6Sm3}9AACM zEFtnhVW4DJH;rczh4#G(ptfyQ@TYrK)mf0MRxx

    GE6nLc`b8;Wm?$0?OVGj(1uM zkv_qwrpd`}pR(bizN8SspbGwe3sd)#6OS@dlt69kP|+a>bK&!cAt4f*1=8Xy!k|<7 zmDt&O4*wN3`g|L^!z`dh*ib27dHx(~l_jW$IK0X>pmT%v&?N7o5D4^d3SBThMa?o7 zhikW_h;h#H8(qhoAchXJH^-P1-IQJFZ*u-FHW7C2*t>*0eXulC)3Muto42y`cMy{7 zwnFb`8wftT3l0l*h=L1Kv$5>Ga=&YD>@3v>{$bRsTm6tQwfZI%Nm1tVPvj!CtCrTy z`wbUw-~EX3%CUJn4}kRJdt}inML<4i#?o>vuJ~M*_lw}67yXAi?IkJ9AXJ#wT=QXA zWh^pEe|7v`UJ_`vUUSNh=663~b?4rh^d4dIF_!tZ+UHrcZGuG~?k{?sgVPesgqG`+ ztCt;t(2i*44mJsTd1WlgD`-r5czc!VH#R@AKZZThhRR$5|I@2S?`7Fh-vO}9@@h9~ z7mbf`=zkhL!jf>~6T@LI-$P< z2FqYE1sOj5sh77Mf%E61ia?y@1UdxP1p`cAFY(+;OAsWUurK6qv53A0WNruIcQ{~7 zkRWJ1gw>+!-RRKj&BT$&<=&m9Py2T%N0b{%`iZVR5m*-d+SqexxPdYybvz&4Cf1h~ZA^9rl# ze3SYRu+X?ADCuxyOtdZ7V|}zvVtr)%{OJf&kmfp1S-x}SqeIbqn2PFjuP&N?AOD;M zYIoBpuhN*ko+cZ{&V*vU-*DDHK38PO-G->5A>pzl4;zb|A=v2My}X&b+?u~1z|@7Z6k z+~mT3gPF-WI4}&O;lK-}MieDJCwj(2C47iit*`L)&DoR-m2e!^gu+)zb`l&+1Bu=L zsi(+YBju0tyaS_g`xoI?Wv{@L^yT_u$}1&jKnRmergaj51rYS`-SlmmZ2x+-K>XJ1 zboXH>Tjfar*v|{*Pz?{hui0KEo2t(lM(s{+y<$fz`8F%*)}`e@Hx+7}1huy*TB^Wi z&1dBD>k5ImqOtnA2AlqGz@--bRH$-=T54#`ng-FoE);6elhRG~r(bB0Pe!>ZmeMq~ zkygZRXyXF=LGHbG+!bT#O-41+UkVtC)uLNC=d;I&$~j0wk37h@;ZtiRzOZO=ml-}r zozNf-{r>dtUd`o|NyvS;A+Pth)}WA6f(iPP*zSy@v&)*TVA_uTj3x_~kaGv*z(@&T zRNqL!s^98p^H=rym&EM#Hc@jE>AoR>H*RwW+DE&z^-1=ELdte)=sDBu)wTVGZY(#I zniNK?Oua)C=B_y=U+H=qiytfTSv{Q^ID4OVZJ2fc{MyOf&QU*F9DR18G!KiY>SN_4 zNVb57^p2(${Rl5ZFD$?_yfChzca2o^G{+TYUFr~Ca#^-y(eT%eE0q$Xs&rE0ndHbN zU=6;9=m}c2ttJbsDDe$``y!Xd%weRnO7AD}vaWGqyJK?oepDh*U75#eqCffH86T)9 zs`pcU1&;AJr^s|?>|mU9{GF>-@=b30rnaRcDQl^Re5s{uXxB`lMF101)iXai<%<f}#9AxFy zcWG@lBl^-}W>PzC#lNyw6=_jN&JVQ}0ZnUgf{i(x&+1V}2`#NhqiK<_4_QS+Za6kf zC*i8$aP(5BFirLvJ3sH=4DZ;-H(=Pk0RLP>|Rk;l>$>mi*c>Nu}*>Rwpm z)*-OcDe}gWdk$yD;MtV?^=!w6%_4&~EuQ?ijse~eZ1zqMM7foBhZAZnrXEP5dqJ9& z@UHR@>i6)Gvn&WWE?b&?d7>K{P(?cQ3Y%IE3{i8WB4JLdFeR`#+w}Hf1sFY1IW~E-~6f?_%@lNvHwMxqHz{Ub(C4cbYCaHn?8GE zZ`T~rJc{-op42joqFY@Dld9%&{QvGN%=E{#)64K^;HdP_WTk%KUD4{+Ri`&=OW}ub zwnD3iAMKo!1U!(N^r4_K$fJKnP*8YQC%@eKS@8U@y$Q*P+SW(4f3od9ojxDoO63Qf zbZ`!Ii1^7Ii*DA}2kfc?U96e(w41ZTkP(MVDS%>+_4ne}jejQZ(2dewZxpmbKsQ1BCd?lESg0dY zjdVPRkEp~oJP^9bhA{Vo~-%KyZ6bMow2OdzfN`9zCqh1z!dTj{kCE(_5jgc z%;oX>{bx8|*%npZz>vMQHCeYYob`ykPt|XVt+fx-iK+gpMdd}~;HhU zpzo6SUrp+|d;^=r6`IT2qmx(NR(%if}(QE3b5+`KJg(ZpIlJieUE*0zIRT1 zA2n26eTTTDtlPHfJ877pdnU%#B`a4+zk)n@NqD5L8w^ZX6*VGaPIectwZ_%r*?(5g z;ZW8c2aMYGSc(K^EAG1#(tO>XmDk*0tnf!&sTcQQ0>1epZK zCzz=JCM@3PS}5aHRp}_s!KP8RiA{5aY1f{dw1`lhuAV9575%@}#J#XF2(3g$*!}W0 z^0C)UOUnn=zNmcJv2G83fa&&K5|ICv9&Qrr;I?t^4jK4XhCkc`hE#D0x+2{=o!@TUwMpZ2VQc{+V9O`>qY5`b!As(ia{QbL>DL!wa(x4j@3!!ff*| z{GHi~)(YRqie<_DAk85M~hq626XRWOKY0D9dB$q)MJD^8`_Qw=W%@v_coE^Rs zx@{gUbZcyEJJ_rM@;K@Z=%SseefI!8j;4O_oOVr?LLct!4d@20o#HTWx%P?2ryMaO zPh~tG?z=175PCL0vgEh+d+cA1q%qRh@iDkBH2=7QY(Rc*>90=Ry&skv-$edO~ zX*1(!dq?J@sj-zo1?=nR31Pam#hri8&q3Z*jQ;(Kou|77-Erjy-5>41Ep_Z%?U4eq zrEIUphtL@wug%+Cde)X!?#GGR);@x~uH`2rtSGeqbzjdoKJJM_@8>U8yZo?$Q(1MkC36<-a4hit z+gmr{+v{)Z07qlil$vAnlAx}jeot2J?)+iYp9gcj4Cbu2d6fERHQn!~_N=E+&xdF0d|ctvZI2_H zA)#BvR{-VNePZnSbhM-|3F4%0V;5)jhnU^Lk(MMOE+>6i`{x1DOpj}>PXuXUJtymw zJZO}Ze(+>k$eXO>$c$dwFxg*&vnG4t6Sq?3yn_2!hOp^?D0CLa;oja?!3ojLUg2LY zWL&V|gA;hwp3#)Zw0fgqp|dB)-+`6NDne?p5~tRr{JvV+qC>m`3R!H+H+pf~I;y)_ z5n<%DQJzk_f3nzeL`9+7Zj5W}8(&+bE4FX;;%59N?#0RxHW7?Js~^`UmNd^GCBMN5 zz6N!f_ly8KJ>iwTK5S6=cv=TcC#rj#?R5Z^`?DQG19TzX1&o7X3qF_RQrvKhEcuzB z&~s}j!z#b?ACDJRXGDF_?DG`4~@Pz2BLfaTKeg^f*>tFQB z^U<BUs=*HC$9|nsW!u5osTUqPKD!3T zA@*IVGMr;i&=%;eRFHvj+`7r=C)!CmzxV|PwNNZa(Vx*Ib3jl|QE`E%8EyX1?+w9& zt4beY7rE)+o&Ow?JGo;;m_R^}B-a)JsaKfP=pd%})(K6r92ywZl3j)fH6IYl2jyog z3Z~?ipopQ2;o%RJq$*JmF$iPeTxFt39w@9ofyIhg)l-1>&u;J!MRF4vl~!2--G)h& zFBJ$Zi~n6w9bkMd@IBL_{5x6zs9|27&%hQWHA+Mg3i<%C;SPtVDpr`qg8T8 z^4}sLXVQTZaY9B{kLJHY@5Ng3&%8zdCu<&K0IvacDvai^iU?1DkRJ|)h;%fBmW%!U z!u^vC&R=p%K}jT2?&)fcj@-fowcw@b3Ld;;1f`u_I>f=-J^1_)dwe9erB3zL3{(ntn_Lq75ZCrWwvO}xi|6C#Cwpu;hQ z_LuApiNT{lK$8(S5*`kYBu_8|Wu)b!$Q@YXVf^(G;lVHC%wWKa|97Ouoh0UuW%RHY zZ$E~UJ49dk1u&=?LwjyD2pjQy=OK&UlURe_!ADO41sTXC1 zhBCtcky1D04Hyln5EUK@mSk2l#ruC!>f*+V z5S+f+BJ)1-<-kEB4LjDg!%l8KTC^lJnBD0RSe0ounzd3)P|piyZ~i@*v(ljnO18Is z@_5Z-T*sKz-9!O1QzR^zvdcgg5b3sY?w{_=q_GIQa+NEFwz^5<`!a>tq0deK% ze!@P@@bG&W7@n#;Qim+1Dm=N*5TF*<03YS%8|JHd6*N=EFJ(E8ppz+)j8zC=_11$HC+iP7k9dUTcQr!T9FefS?y=p4w*i&oUY zVd>zPa3*#%^YRm4>+8c`gp^kb;ZuD9#o_bv^J52}g)>)-USl~*j)=!_gY$S~BcBXA zxQrB>^X58`0}(u8&ND$Ys@3f0QFekQe=sh9j~PQsa-^~@9u~^4ytn1WwyI^N=~o5+ z(oEJB;@kFHi4i+Wra;UY@kq#vB;QAdr;G3u(TI*@>U7K6Nsc%g)q)wV1qS-^!9W$q zBuD`x9yg%6^$naxc+Y@(pv`V>ajzjJIgDN!!Mhiw%=h4yUB5KxXi z))-uDYqh%YYBS9TU*Z}zO2b9M6;CbEr0X#WZKcSh>*vDu;S3aPdn86|rhm;vgr!5# z>xpFU?+A{XU6iu)V}#^nns+z-0IdmlD**OQWW=2(h8r*9RgqF@AJ#>HGEI&&4EBtp}o?&DzgG$1W=ksA@h1xCSf4<)W_9@Im+t@Za zzZTUB5bT9?eIGW#BzLEZKsJYc2GjHDc;Bo2kBH6eIYdd)EEK(B^g!FTz*!`1(xGK- zlp;G7kMI33)k!mRt;UvP{_-|4SG;b*$c#$bK&l={0=OPO9(V|?YY4v?ZUxRWrt6+v zZ*LDxV-?4+jwfXED-<9ff1?rrw$q(<p8Ms_ubhNq>ZsmC3dJ24$b%=$}~03V{_}oPrJeZb5`c^R-w$- zdkqR{m1qrG-bn+=$&QH7b=*e3@>}$YzPJoi-lwK{Ic{9*sxSO8P(fov5o(#{d0oC~ z-(G9d=zsuo?~53FmRSyg8N?xq`t}s&IG%1>wwREoz9ax~B2(~jVs8J`7NL~t<(`DM z4bhymIrcX0Z_>|aNw-)46xPtUsO%an7n(ft*nJdqF(vf0Q+5TL1ImY(bga|V%Opyd zD*v)Ju8&vTA)G&@rq{i?2lFo6KoNtxx@?=@FmrPZ<8isGV2s z>IZE?zoR1!{En1M*WE+PSu93oQ@1NiT0zCU1C9hXmbCOTzP3eAfUnxTPQ_K>o7<^L zT^xc=+HB+Wj5e2Vot*vh{JD4S&$45y1J6A>U^%}N+zV6MF2Ct5EZ?Zm#gCf&q3^2U zM5I+aPCU*0d~*gYV15&`@GaU+L_raESEnk2<7Hm&ujM;IL~^6L`3VWISIk zKR4!&7kJSXK+{xbf9N4NS2sm!wcxqu z3)n-sGg#ho=4O4|4s9KORZR%zHGMREZ~AH}9WPzpPeYOmE(dn)@M?~Xzd@mQHO2q0 zq7+ryzWCfodo}Vw8|_Rip>%0@^X_500^f*{`k{p>anAnXNL&jWtk9h9M=@EXxg)-N z=2AbD8SmOEpl)|!N%^Wh5|}Ld(IP3dJfTra58jvkl&X}B0`~8Q$@&+jEI)gt^7D@; ziNle&`oZidD(R?OEsI{Jy10w`+l)Pp;NsSHjaEh6rVTkt_h9ZY^EeM%@X@gO8To6; zFp{X1u_K$%rs0;xX`IC+$vv+&@@Bcd;;A|)1-S{Jew4ef=jrj#VvF!wXYgF}m+rD-yK(tP(vwK=rOqmKK;9C*&l}PCvE8INqYRS;5U&pf4R==5ITW5>k z#|>Fqs?cu9OCd;~f6hGc8n5&9%;jzy6mrBPw_3REtt)RxOL-5`Xf?%|Gj-?N$HL>f zca;GA4+@o1gH&n*2dL-SmuB(LsyS~C6kMxn>$3=}4yz`oT&WKZ$L4L_j6SZbU76MK z^9~{15u9Iq37Ty@pD(Ku^K#`gh5TlrNBKK_5^`?Kgtb?l0eFWI^Y zx^+P3IO)8*#`>O&8=$^ti`~gccLzrHbC8Sl1j2b6<<+kj^NQxvSR>13w-U3Xdg0;a zDG0}N*K6FB9xX(rcO2}0 zI$1{$Sx(OXtS+|+8Mw}1cCg_rvfa$ZblquBpD?0m5tQv4a&_J^sXIrloi(pu@^$>> zsx&r#Ps20Am2qgj@Yu9HEhV#@E-0Iy!>BWmBM@oY=OS{*+;G33tDASKd=z za0Fak6Hpe!J^|t(#0Y2B)BQA>1&fNL`h=9!>K+w>2j{DoB;OYGrH_V_n}ks0@6l&D z5laRRldi9&Z06^@)9trm%+PKNc#QNt+l(R{>8%Ozdju+}nd+W=|H!?mxjOhY#+(m~ zGe${;Y%MO?YEL(37Crh5_YUB3zS3`uTLxxs{#@5-*xl!OeAw1HF3daIw;LeBG?yei zbI$C>&5yQhFhnb0RG_R|l8>YrPYB4FMagENOAYtsopEG)18uE|cRYl=te@}@xs{wB zcwf#oPfYY^vk-jPGoMA=^ytBhKhfb{nKId%H|gagwZBtW$#*}Mu$|*$@2+k{w&!Zq)t8XEy{V)Cx$+wG1H?BMu9XymqY+= zNF5iBuNkSNsx$%UPELrHx0+~Y`tgi*#vwxBXm?Hxk5}!ak(iYN zXY+FR?1-DS+-u}i2m)UTaoyl}oFq`^sZ{|Nnq+HUJ#Q!QxcFcbl@OklHmGZ~T(TEI zNZ-FW*c8rbrl+5|L;(&$<(1JiaPY}<2!n1&K1rueF^9=*w~xb z!<4~b<}Ey)(q6vS11gQ}SRo;yS}lycB;WKIl$8Tv`l7oK@AoBpF<9EJZy$WD9;Pc9 z%Upim-khwSoTA|{?@tbdO+KiTkfQ#*D!t6n)*giD4Wc4}I@wl(sKmgm zwsyy9FF;IEw4*wCIl`VXlBdD1MJLy1sCvH|eLprJYsS{r#%jJ}vz4Mubq_LMobJNo zyZ1cHP?mgb6E7)i+HYWg*FtxSnx7osTy%f*64FfJiwUD-<_L70?)vla)RS8N?^In- z!r~XanaA6XCNWkty-?xzXf0qWI;kId(-u@{DC7l8S0Ip5IQ=Xxi`?a$uRN?eL44G)s|CXjaTTX0Vp!48x*ya`km*6%4hZS& z7kyr3f^F3M_#UPB)tDnzG~(hLLcg!JVY+#dh}xC@3?RnRg46oRa30MD%3;P8OS?Wy ztd3%~1DB{VxEAamdKURYcalu3%I7@`C~3NUGIRj`h|xRClq@{Pe}c8-qeQ(NA?C8i z=RM(J_i^xw*0SW$?CV1DJb&54Uf>o^^5uJM2`t+W)O7GB6wvA5=pew3fWJ8)0BjzU zp!Jv$U7~7(iA_p;RND0&xF3AMU&KNDMIGcQa7`y%w@_wVbb|OxFikQx$eRJ2M_-6D zBHbT_4YWTwK!L!DiG)dHaCXcekZWNR)6KL1D^V31ili?*ns_uxPDYc=L-$ff@lgVV zz$(#>I&?pM82b@6h_3X(n&S1L*ryNHrLch@{4ynron*{_5P>fN?wwps{zIMlfG&Y?0hs?)(!R7{)i^I`ts%;s4G6_C2)7O9hMfc&Pv2myj3u zrM~bV{KBO90>4BWVWEGh3@RG*%Zw3F27AMX=#S_rd9{)J;1&p@Vy@!cNJs@}ZTOn)_ z3vTl!-W!o@!j6SX6M1{TJ4u-dkbx&4rZzJgd@qcJ9)iF_!K-7_`Tin25ry0VB+vX8 zE~72g39Ea-;HiEuiy$C|StU)B>qAx)x|kS{F7Za%ruWwyn6YdCyt)8|k(??xM6uB) zI2R087~*RNStwnT)$g;+OWnJSVpw#QSyU?^SxL!VIv(Gz$Mr+=u-K|f0ybgVA8C1pUj1c9(_-L5T0d=En_{g+xm z&q4ucC2Qewcd+|lfxpdbiHk9f4GpzV}> z1CQ}S*UFm$btp95ii(7np|c zA50^c_7A4X8y12ML0Tg0b_KWSCrjind;F871gu=BU8Ad{m@1p%YxF7`?(#1<6AXli z<;8v_F_>5|<>;`u!~Urek4PYh!H&b11uh;G03s7V6c2^^R4ItTF;E9qk(t-)s)8_1 z=dvScQTba&?2x3ZSQ(KQ=!S>=7!z&7#^y2DPjZNjvWSgL`|sz^Ahv`E0*O4GMLGw4 zCL0X6FpBO-jtNMJASJ4drv3zHgF)R{x*po`dvD@Q3~k@+3_B)$FqpoF_47sq@N!%P zcl8@46%e^EuTIHbO%NRuTDU4GI%8eiN#$SlRD>{C`&oEN}sAQ5?`R9Asw3+ z4owfIt!lKxa3Fn$<|lUGdnFBwjq#^LkpVO~OuhzK*3QeSK0;U?ctGQVcjpK=QdKlPnq>r+>hZ3#%n_pQZzr z4mg66adEOl;FkqiaOEvk5ubi%zRnOWO@z&pbMFYk9Gnxy2=LA+K_KpKD-cR6B{3|^ zwOWtOL9fe52?opww|7I)Y=o!(A$L%{2v0B46(NYO0IE?%M)2A-u)x)&y*r8d0w{fh zrSpM6AZPXE`N2qC5f_I1k3_SBk9-WW=Li`?yOc(&2zrP8K{Dpr(hKIJMVTA_h17Mj z&LdUv1+OGCuPzGf66yaP8Gr=usfLLGT7v+^9}lpPm2~mcFj*�^rO6S0O_XA`>XdbE|l#GRl4<{+~l|10XS+Nl^(%3|UEZOrFa1 z@&0SM1U?;H%!mH}j_q{L)g~<(EF%0FodZ z1yZDmEYPBpb-@!-!gxw^UKlpBfa=De7{ z(|c#XQ)EVN_r^87n(|^&*!n{EEww9|z6$Ts?`}QiHIuv`|6)@`E7A60-95Sy>GDwc z@yL=lxA)a1E^v2s-Zq-R6%}->H_8H}>9;Vg&uG)FvsA>atKh5KT+7}v3So}zw~;PC z+*%SQS5cY2J8-kbtA<=mqS68Ot#?}`KigVSvaJ9YvToGeTWEc zt!bwTDm>|__v4o*@4k$umpndtR#FGLn@8#Ogg@E{Omk~9KS<8TJ&vVcb6pi(szj(L z3d}E~?nitkJ(lAI%yJDS8%gHL^z>aR)HFPady}IS_4!-)tcf((q#z1XbO+q6ilno9 zZ{%v{@JjtETJ#jfb(;X!(C`=P&On!fS)W7 zIq7hfwyG$57}?g$5su+0T15K;6|CX^`?=dR&Gfs^6o_)dBjvhHq=AEw5JB?MaP#{b zCHHM6A!p#f08IuAbhci2p7d2!{WKJH#~axg3$ve{(b`OwdYrA;;&ml_^olmu;^CTthiT`4ofi;qP#c6k+uIUXc)b+o|%=H7_X=COzToIxcA znT#+;INZmPrG>*ts^4?X|UzI@ z1#LdfM`MxG8J`PYz?itb&8%WJT_X?BE`d}sU!7j+mTQA73>AWc5ydI`wvtOjyWz=) zCuf?)&N7~>)*r4Ndc`RbxOT=8pyYYV+0(GM-E~c6QCRx^_CT=_-In92Tl(MLcfRwD z&XN8F)}a>~%cdkf>x=GBHMbALO8Jc$y6S`Ur?mWs{p%O!xV36Vy^6iZ3ITwFq`^IY zq`tHhv+YvVg&mj3t&lmz{ecH3DQd=};iD}^Kk232&!@EU({rFak=>4nuAMN5d9khD zskk-wP>T1>&_L6i?SiMGc29_~`5aNkv=yl_H)mVQysA%^k-6u`#E9j-J{P4R2X0m(Hz}<-l3&%wb!s*;OC9_A!&SCQo$5w?7If1B-`~ERM_4aX{Hxwdv3hHLJ3%S zzFS`OgEv)v%wTtJslb^asm31blfD9@BGGM(zPI;6ads*A1?k~E4P*p=bVb&HN*p%a z;LG(BL7S6`WVYB*5u=sHyI6j@7+_fv8vPPi&CU?$Hs<-W`g8j$Zd`4jYX>-4n9oOA zcUHFR;^=@Io$%lLD1F!Er;}CYHt%P}*!|wlBmLuCnCqoxFU3LGpSG{cM9@1q)BT3n zuR^WA?1xVrKes&JOpmjIX})CsHd?-ov2B@6TO^8JG?`~enYKacTfnZ(`|E7YzI@9k zYgk46)#aZE$_emvx=jk)6(Q*dN~aVqj29GqgRm^3$^g$dPfbFAL1@XIkJ_-z*(W`E zRE1u?b*_<>t)$K^{3@6H-Ergc*)7l6W=Y$0zcO|c)u?UTDz5eNOs9IIT=j)<>!S`% z`}uVqG4qtV`K#~hIR3ZhG6$@eF3NQ}1va|A-Rd;&#?Gsw;@uZklbiLicNQ>wLnT$Aqxdn9!zn9mPdlhY zB{qwBE51ofZ*&v$rN5v#<4be}WNOZkTck!fX^yE0s({RzGNF~vF7H)TqUSD_t*j*5 z-0l8ON6@&TY|R=nGUkD*%Y8V}Yd-r4=5O<#B3}awJww4R=wQMw`7u*heF6UfFVe@a-7#*X;DSuFlg8#beAtKA(!n zcDkgGOFI#9dU&}LRf6E0_E=Qb6l`FSjKA?*8ou3{2pSA_SuO2%>rPGNrVPe|ul6{< z5`U1RBda@*G3DdMyMy8Ft3|oic6I$7IOlT)z##@Wzan;X-ud=gCgYT-M*AS{Fs5kk z_frDTQX>k~j;Su22*|NC*zq5IQ==xTxy~9cDINGLT13HJJdM6AMFEATN-WYzEcL{Q zDAlNrVwki}LXgBR938IMS5hZN60-{57K^%imZG;o1jU_DpkRiwhUwTUPE7HzG~^9A zAh1(s85i0wGArTLLo-4+qY`2LDWhtNV;e&4vBtAcce^_0lEQOjSo&Lq#A~G3Ikj|* zE|%M+L@KA+xyt3FXKs{+krun*03pia>sVva=2y0y4Q{S}1ZJuZT34sF2ZtP!&Q(sC zY^<-o0WyAprwz8$TwjOC@COfLI(-(>06fgm2|}=}SaQ5Eno#j`;yG(vVg0LMIj_FuA|NaA z1Z_-IUee64&3^$~obC5k1AqE+-p8;x$HFthnJzJGKU0SKr37`U*pFqL=&X~3bJ!Jm zSD#^K>~j#0ZPSZ)A1Afb#mU3&rUX${$VRCYX5b1s(nE!^3O!|Fx`cJ6UeTd&`@T;- z1DrAKgb^IYvGW|yU?`t+l;=&sH!!m2u;CxA_zFi_R&n5rK|o$Itv;U~HN{ixjY5Ek zDAse5h1--Nbwk-cbhq*?^*Rxqa(XIM$XV$wab(L2#8blMo zLVL|>mKeJLIPe0!@onGR}Zi-d%jX zOH!o7*71iXVsAs_%h(ef zN0l>csXXmxG!Q3lZeYXM0VI|IY$Ovm=Bi9*Gns*wD|bCB!_lS1i}WQeJKXm{BrrXT zFobeipDIPPD_bkE038?<-t z%foZtKe*7^NVxi7%zh&K#ipV5Z8N}?XJ@Qs*`Q>KAaW9$zDDyW9MFh~CH+Bw$1+#X zCO9SIZ;oSConA^<#JJj<;Ny_%@p}dF$yiQK{?U6n$A%?KV-j+n;kO(OCYnnIOgG_9 z=5?yQ78aVCW!4SboK(NlE#(FnB9rXakoa)on(}4;TIcCeR6Gr2S2B|8R#h8@s{q!U zdm*72=O~Sk_S7~j6u=w0V(Cg%>JC|j$HsJ;hRlTKO7*Tz^8rc-=+VgxLufgL>m94*{_TO?SEN1VN!`@!_rG??BN4-&BxsT{*$$v^Q7d zW?51UL^ZS;v%5MbiPFk0RE13aiQzUD{UAWdyY3}}hi`2?!!DbYDcqS9NvfXu=9PfiKv+bt(t6Ba6|j@=m_zcDt&Ps$tSQa2!|SJfVi+{qPu zO}z@hqw|?^`=(!Ijq@|H|8G=A^=x|or+K1nB5v&@6;|3)P<_ zf_X9S2w_~@W9no|{b;>dAk8Urp!jjyQDMtE-3~Idg<3#n&o3E=_nG+p^xAeIjbxcY zHK*|hu66eKjyZzv9OcDcNX9m*5tJkZdIwb!C>SEG7GJ0J+W47@?jF99p+PXjRe0_l zg1FgBVXBe^hm^N-OjBrChuRNcB;pr3Vno417)F2%PJdL9kKAO4&Sf>Pz5JDBja6P2 z3}n%mC|VzO9fV+~$qI-<%qLWh(SCg?T)|WnQnv~!W$tzuy74(2M z&WIHBeR8dMCzlChuFVZXU?ZISL^t>2F3Dj&s>kuUB<$q|^-rm^JsUd@3-Wk<%Qr=& zGXUl?C6&*DiN;dBD>3yt5=X86AK@E=?2+N2S-4ZZo|s-+OgT~rIW?|;uf!!CV=)a;^CqTc+_FIOh<>PJmi zNm0z`hwOrd#42`mi5Kpl?|ml4PMr@i?tk6hY#8Y?Z~Fw<7AZpL_fWNHr%zh-Kd-o` zu9z)xk#)mT9?rYAW>9Z~VHUiz5Vzv>$o*-BU%e3(QIPUIR6B(KkEyo~i>iC0hNYyW zySt23)r6$GTaLpqK$NDDIL(4n+|baxIZ4MRxx&_lfA^LyX#`u>@7u{X>)?0xUJ z*IH-ofj;1Uu%2FU35ewYj}DL!L=M%SV@Meo9qdZ>FzLp@^`<}}<+y(t{a2QU@;ji9 zymRf9vb)V|@l3l{vTm^>6_r}&Co-+E+A~^<=i$bZpl9R#U8Wl_{#OQ@P*e&j5!ncV zYm&(?+o+c{=H5ejr_!Goy0DnfyEK4lIpqG1K>|&_3{-KXw^ofcgJ!@nhUmB?!@$Ct zl&K(kUCm%N1J#t=i!Ihi$l>ee*1f zY%DQfvwyjA`khhkl-V2o<;_4?7>o&cr-H#?huo+~C{v!NVB{{m|D9QeTA_q(33d%3 zC2>$lIZL=fjTI6G(qn-H)y4CMM8=aNvIu%D4(^^+RkN(3(a(Vzvwx2$w^m?mf9AYe zpPsLdEit~bK7K2A`}c(|PTZOFoa+9$Zb1xx*afxavSv(5yz?oSK!WLRY0lSp_^bF| zEGSz^WD3Z}2s@%=OGNPy7K+ zM^d~){$E1UuziRZii9K#s@^6h0UkK(grKi@*HE9M%vW28WOj}}droM{P(QO8OEkZ* zwXQR&` zE^rcQ$vrni;57#XJ+7ZFwBZ~dM*_5O-wD32e@s!iP5XA+qCX6^KWkrk@QHG=wPUX3 z@95y$nGJ9Q#XZ0^b8pQl*hOpSDWqt=1+#NtDmC5 zdxQ^5As6=rEThZRg#lYmbV!rmei9+1#`{0l6p5ogko}U8sq+)Fq(hpf%(TTuoDnGg zKc(@q{JS(EPG8`ZQ{C{hHofVh`zbus#B9;t3m&!Yvtz&Fov`go#&v=xMKsrh&>5S0 z6&-r}m4((m29b4@$nbGuyyGt3_{VpZYvCXM;X*~|)PM$CIIYYLrQb6L1n!pO>W3(+ zGVa9?IP5C=pU9ZqjJBDf2?6Hgu%sXiqrqWAHN^J0@81OHUdtrPN6?K zB&ffm*FTV$X)-9F1#`p!q58)w_P&Uj80+&zdNVP` z%@5GvI_Oi)>wTq>P*^5RVPAXCMe6hD~H7LsGK*py#{;wF6lRfXYWG13$^AHpV1;Y7F zlF3hSk`sihCd&chHXz0W+8a<&2pt%;o6U+!sWLS38H-$_^gV9whz;r{e29pS1 zQ0%Rxxg{a}x3p*^Q425P8XTetf$cg(pA|9V-|NUAeh_?Mq_5_-ZOn}U-%ic6>&QSR zdfAcD&FEAH&4pQWZNNx`OZ??X!S8sHl@Vg#njr)jP9>}217Q1Y8@e;PR%@Z_yfYx2 z5cnWrUNb026C#kri8>Rzu!|t1ZpHAK5v-kGzay8T>^=VAV=^=ZjP^~R1VKo3{zph{ z5xsQHwNZb~`CpgKe`n}G$b_+|=TQXyg+XJ?d@BnhUg6anG~A2w9jSk)yCsCdW*On< z1|Zw_OT0AKWu>nDhOKTf=gka07njT7gRT&V#b1kim8cUi&8ug zuzT^M!tnoO!kzzQ!s$22A>i<=uk#~uyA&Rs(TGBUZJ8*<)BFjRMMQJ{ylZqRMa-LI z{6SLYWo!&fPLKDp^oB{UT>zR z1M+R}b@8R4ZN`o}N*6Cq5WS;-xKzl>zD#8O1&PX1)NM;hQ~bZeVJ+A9I7V@4x%94= z2-<^mtNg^Iv@tlVX5I|}njdJpu44{T)VxwgbhasyD2TsXmWV;fqeYT1M6#6%)z>W5FmeJ`p=V%q~`kwa=`8qLTY@+kVxGd@#4Uo{v|d-YRvRw z5eQ9Xz(tT9MCK6($^^oM?){84X$X6*%giV$Oi_!J0E8rV1H)XNmBA)f=e-+>s9Ih+ zqJ$wwb?W4^liFWFvU;0w~Z;k|=Q35LGD2VDlpv+HII9kU{+pijXvSRUo1+ z-1F?Iwr#&?D+$;b5!CkQk)`8$nwswC0-Mvb|6K^003`&cln?ZS1qdtSLF<~bB*1V0;^mYN%m~iS zPsvIVF$lTzULoimXKva5zIHD4JyZs=yKIeUAyN%gTtN(#c!U|^l0AW_qbx)}>1XW^ z1WPBoRdOSU!MxlnYlx1Dsb}N%@N9I(%;=&#hw?*-+oXVLA7V<0J0@~cf?$12#h})Y z*xxDCj=_FkdqkFyf@WaQNK5;QC5JB%~dF*HYDS8v$ay z!P7u}^tsswdEemCB6n1SKsSif8-d637)Zz6h+hJ9tzXz>TIQ42`&;_+x2@{+h6@%K^(MnQSJJUQB| zD^=@1EkF~E3h~Y`-=8*hl17R#B6Hfs*Sr>M8D%bi$VEvFHcsWBf}bE#C#c8pZO*C^ zT2fZ{Zs?7qRY3`*WHX}+&#W+plwJ<`equd>^_9QYO*+BQ`H=(YteAUGGZ$U zThdR++;$v2fum$|Wmk<-37eEHQ9_m*PZnD3hT+(-rWFUPOdh|QoPw6FgO#HZl9^^r{8(CLTO_~#*wD?I{e!lkVfJ9{v zqTDamckoxEQhto9x~b+ngYN+z_f_w9*-86dPtG{UHHUOoV|>Z|mL?Zg<4aKXxdr&h z^H(O-QJ-Y?`JP+9_LUE$ENA$$|G+|6j}Th=9QoZV@PjIloIh%0+`3lL>Rcvl9#dK0 z`0ie0g*oT#a-nN@(?(>vf=l@UvvV2!-@HF=Y+jYQ0&B*aX3pU`hHlae1F2f+MQ0Ck zmcOpA&xDYhPWmov@EcIUZ#}Sgum&=v#(JKr_cnfv@J5=lh!BX6{XMq%Rtu-5s!H%^ ziX7u>s$aGR{1;O@DzqQ`heo&74rX+B2zbRl+bd_S>X^}>c!cXFN-Fd10C2?b(lC4h9%qh)n`@D88HaC9? zTlDDyY{o*1P7*8D3|E=#J0JK{(t}L3mqIAweUkn<9g=-q?Qb80+|6kO1Uc0Q-}m*$ z+QHE+`qA0CVbaXWixVATFsIDFo(`90zreRn&wu1Pvsd6LhB&u-GFgjfZv`6nF8@gkDh2rx!k+G;9NqIEQglzubOgTv zezB*kD)N)|d(im&;9YN3b!f*L&125$<>)dgo7(Oli!UXq;uue$6(&l@sTRegqAf^D&yB z4yk;zJHdIlrc!&-4OvnBAsP;!hIn@@r*jW@c?Q{?c1-Vp#B&;q3P$$YBe+w{)!HDx z9sf}7U|s~pbonQrJl)?OCwK$Rn`^+%euJYr&+V$g&Tm_Xmq}{#{*Nb+Cy(o;1TTT> zCm5(jnXoSA+mn0lS|oWzOM{d%D>*3~_Nmk`u7dxWG>3?mhgi8i(tQG;JQlV#-?%VS z$>Qwo^mU>6wwt>>&(scWOsPNjsYUuJ|Kg#g*g3wZk|*iqYHzU_?q?!(2LS+D9I=Gn<7kPB+c;;fMRbRTyMU3)t{!W{)Ngqk=Xq=^xXZvW6*NUsJow`g0g=hK9D zTI=&BZ}FZkB7wUd03a3f-w)_!`;9Xk66kOJq6-x>N_vE{Qd8Op&VBS-_L3plBT$}V;vq(j zmeI4#VQecc5YZI)sXi$yj;mQa#V+296cvU}e#^tR%iZ0npzH;<)SC@pGb$PK$Y5=g zyHq+;$+=^FH^=NtFl)E_L3O;|zS4hFm`e56TaWBBz@R(CpXhgr^8S!r>R+C}P#X+z6P&8^D zv%i72G2g5Edwc;Lc=dN-guJ-~RNm#Y;eFWV^C~~DNB9P&EqlXTp|KyN)$n+qz4Jxd z*hPzq0m!~6oFd!O`62Cx8q1L8*+m(;DrM&sMJgzCVH4vTe-W|8Bka%W+Z8b~=;5<_ou!^;dc`<6@Xodld^s zepq*$jqh?jQ|#$d%pYQ3ibkUML+geTV`xT%0DKGrg6h7gyLl4%i9c*hf;&WMM zqve``)+;t+e~h#Gl%;=JS*~#xlRG$jJ`J1z*Voc=I>QNvNH`N3KLqqwba~YlV_&{h$COq+o(T@wd_=6op_2siT>CP% zXT7DSFUCE*EXWBYwhye|lQtWj&A?>6>MV6moQ(8yxL2~XvOno-%674IKx6+*0BR$F zbEVa^ZkCc8-Lfg{0ex2t2ikO&l5t4v$J`Bkg?seMHz@>Q8(3 z-0g}?^2hpwU%E)t&wTbxz0`X?({-B2u)}f@Df1PUoX2t@U~H~`DibVnXY4m+DqBLt zPMsyQp8QR9qp-@JP6X*EiWENZLi*$vrS-&Z*862;eClUr(2j`6ReE)G#6&I|RQ^2Z ztTJ-CYr?U_;Wp&U)1S)f#O>#Lr(SfFXDB5?>VC^BJ%NXK1#)!efgub&#ANpJ&5M!d zZgkD-q19*5uWkV%Ld(_ld53sYMq;$jnpMlx{{@|Si*;TQf}>iYIjA!DEk z?K+h#@M3DKu^*hbwJCM|_~H~_$gnhX<>0x5d)S)_(j*mIA!p^Hzz}eXR0ynq=%ve1 zh=6L6b?&EpIUD#}@2D6lK$9}(zy7Ofvl%9H$j~F|D)g{&VENShNM8}KdS2+jh(4aWosuCiwNrt-|@S|R7s9NRKQ+D+p6o+hNnZ@MM~+!f>foU z>*UUxOl;O6;#v};Gw9@#QwWf5rHPz7-cZ*NJp^fQ^PQh7g+aYOgWBNUmXxUuiu zf6E!>EJ0&MCkw>bRA2GshT!~CgqoV{cQ!Q5Hrcea-HGuXhsO2%65JG{shMk0^Wmhs zaXTG*U?g0bVP^Pt@V!&x&r|uvApa#1BaHzZpEO$O~E{LnGf3>z{;gbAPfRwsY3i^mqs5H6;v0Iy6cPQ<#xt@(YLm4ud=tRxxJmu7nk56Ra-P)mFC(k)cZnSoSCXL z0C+i2Q4Ut<>P6Fm>~DwRCKki1QQ}Fj6{83I2fS}D1Pdf{m_Op1`S|_uW*s@K;NYHQ z%xqPpw3z!@ptxN$#lb7G;$p1QSn$eOjyNA}gPfZ*;008MG4?VykepkKE|xSJUJfOb z_;@vL?5AopLBWkbV4HXPLsFGkjb_PT0l>lLCMw%Q{Kd{r*zTGo@&I!&$DX9W5h0jLps5mEB4zcn-h0EO=* zXvcn`eEgGn*?6o{rtf+T=}>?`apaD@u*h;!`9U)9hiowxI-L@z-P1U+W8MAyljP9l z?ND35ZpVpF!7V})nPHpTVGaZOdChLQq5jlXlSA6k&qn9rf0s38;eg)2oh?=Wemq@C z)&KW5fi&93ZTHKHdoQy)l8&~-rGmT_YljyO&Umihmr$q)xnolUt%Bu_fK(?$Aul=Y zl78*>6*A6*krM>D#*%|C?3nu4SE1;0)4RS75UzJ;+g8+QXz{VMV>CnRFbP zT-={3f*fVqRUQ#M$=K|ofd^&cg#?jbbZ+a6s>G}2@Wh8wyk9xjV67F(hG6A}+KUTe znWTp(CO8558hW%jVk4`0b&zp4dkr3mIn17}YZ!Q}`iqkRC_(&szN-uK9&^UaX-=%J zzrs-;N}aVoaTUxJevOE$rqQWvIxMskEfJr{ZZ^H|y+aPOQm42@cs}S=ViiR^A_c3X zQ}T@YP#P@s6Rk$u1j0VVZVjwP^I7A;eyfOrf8qWuC|XpC!zttHsy$DGwmi59r$l(f z%i-lGSYjy9ht{Z2XB8r8*&JgT_Wt)>1dH`S6Hl>CmvU2$%Eo^8S8eP2ak-^eT-BY5 zS_iM@drDm&;kAyB;nBo3e+uo#S#?4VqEnzEKUoBmN%ZO_AU{PjRVEK1@I*wF)Om7Y zoq8b#H-DiOBTH$93T8R04sy?hVlRWpQZcJe{#PJFCHlYR-gYN6I>qQdh*if@(zx%c zOrx;wo=l^Vc*iV1Uj%QO5-JgE6%31F+(FXIQa1YkPkIA(I5WsZWQkGir?hU&|9UeK zBUP;KdQxG(g+cmlVP);pfo7qz*^^TYbBb^$BkEtAYD*+nA0C_lEq1^MWn&iyD`#0D zy4%7r=luDEvTrEYM;VtyMa*5CsC?mPm590T?0F)_s;lius3M{3CHy1v*{^o!0q-}T zadBf2M+w7@pb=z@vdC||6k<{>T8wSZDEA9@%k5eg<+V;;Kj`ijGF<8>LX<9tW?4e+ z)kEtV!v}ZVetby|%r^vfUyquO6&zCgU}8)@H+><5F>7H#dqZqg-?LsJ~u-k1w!`5j<)c%>ncW0HucnNH#G^) zO1kvd%u4$jWlP$2Ik{{_2~ffE+{apd#P-r)PE9i!EBi=%g@NZz!Y;u6UvLgwfj=@K zmWGFyoJy;o0dIzqiTi3st*6wa(~`5S7U_;4`g?}`ojJIN_384wq<1XcpemyoD5;A-{-A$?Pi`N0rn%M8 z*p>=M5X1bZtg{?+a4eU~v%+EzWOfpN4B}gfQt}Z{0Yk|@fI;hmg9qErUV~&Zl3tE| z=8nlm+b-W91tV>BD~?z;rOEOg#Nb=h+aP_4jpgu@fp2-eV(~1xM`b<%bi2Ci^RlZR z8lDbW+J^piNm09wYkP0kapTn#jOvvC8~7uWU$mxM@5b2#R=>qXi#bH8prVY$;r+NeEPX{~IdS!7ai{g*oWf5N zSRmDbO-U-{0pGgYuW%RHN{3yr%g=!&WcfleH;nP$Kkk2*=ASR+3u6!w(JbE5cW{$+ zg%VXj#BTI|6MM)ZxN;AGyP{GqyC|x|k0fQM zw=>wXB=_FjtBV)^99oM{a!+0RT096TdAE>8)=FbXV!bD^YKg?2Nax1f(alDpoj*ak zR5HlB&wfm#PLmViw9zJ4aCq?=Dd`58a~0*qTj_AK0Fi1KbKB2ilYpHV2CfcE$BYZC zza8ra7#g{}NBAPZ2$U!Xz2H;+6iuOcYcuNmdX^lrWvZprZ3mDRdn4+`E+JM9wPG}s za6;-crWX3AZnRVv!9%&#n_1Lh7JO9DGxAT!W|(M&mM>J1-d8*9NWmzK)A;`DKVzzYy}3wjZFKI1e~*{x53TB9-JihdS;_= zt}5w3_C54i<}xx9-%`Q0lZ)VOvBu7=bBqHeH#X2c$p%-jjyZI{kBSKVy9fTF55mOX)GB zEYJ_%pzsAmu0-Iej1m`oPeEyiFZh-mN#ZmMI9AmXk@nxKe-V9eU?lC$8+V2I)sFuQ zKlgLK#)zotTpEXEB+~a_Vu{P=X6FBP2_=1}WP(`O_d4IM!K4<+8HYTqD5@i2B?ALe z7o5PFqX`hUDfBQJmSD1Z4$x{9P%w}NEa(`*R@5JsL+SW++SSx~ zrmY+U#Z@TwfW+tLS)r*mMOd_3{GoWl`$+rkzV02j)Kg>4_dCfvE#G#vc6f=S?t1*U zrLQ&N&UgN?i~Bi&E^zt%;L@v;R`kcSS@;r3Q|=J&@S*~!G}DcEp|0d~NX#j5yRHo2 zGY&Lxm2zWiGWL6=oCoE`Lig6bDXjh`vQW8*PFrw+1d6_=y~`lY(zfv5_fqzYarS ztQtB0n}+G;xEpt2g>I9y%ppa%N8G#;!3cch`XM#=$^c~c@uGHV4oM2Q5O9R935!`M z31BT=g@`aVDH!8AC&S3xqmRv{2E*~1Xid&Rz&ok?eyJR#;X)=}oaPJGcD2YYvLF|4 zEQaaP`0ZRc<9yDN!FTnQk1wKNl&OO&gCQ`+_j-PNomFDu@^*{6!y?RvuIDDn5BmNE zr}lSl^NdNKV`mfUg$n=#IG{xnoO6ujqQ#GGbWbYJE8b^U-4M4=qW{iU=X8cDEIJzZ zNP?QSES+racBxHuu{@2q^xD(Ju0+NC`#D(-ohchOgw7gV!GmpTaduz=RL;@#Oy5?v@*HpfE7+2D$<{ZcJelXkVVQA&exwSMQ%x` z_;dL4I|NX4ImM`5ATUlJAFTBMrJTp`u8ek&sl4a8cx;4S$HzMD&j?E)qiAB`*5qAK zi+U(K5EP2Fpx~>DYh61T*?iF-JKgHt<*_8Ws-{`VPAq}uc9DX1(yAEU?dC}5hqWIH z?iT5gR@zLb+u1QTV7CA4hqbZGfkk#C%lHqO5|B)IJyv#d-xn(Q9_n_(cSNGuBn26` z8B?RUlC>^QJ%pqCv}{`&VKp%>gPSJa*#!e0wkTQ8bzq+)(MRTCUtCwe)jxd1?F`>= zKei!#YbHnn`yEy`T_Q*yl+K2)0?5ld`|Ssw#vvN|wiE)n$Pv5w)xcP=o<9i;_E+vMCfY3J)6S-s`ORG zcd(SRw4XmM%l(%%lMZ6d$vq0dC56Sb(K}(y_Cr*l+gbdTl8f>AFCS(9r-qNG4}T$T zbv}_wed74aCo)E@C@f#SP2rv5DN<0HSlvdG)2peD8MPP$R4h)6yIKR4|6d-}aJUkh z(JQ`sP5J)BCuJvspvre(pJFrdC^9Jb>J%K=;7fH|I7I?!{1%V`Xv^g78Dfl^_(r+? zc2plwVOJrSDgpwi97}}sYw1#kp^dg6~)GzESuh-Tt zaD4cgi!bz&IkWl>2lBr5$|Zj~o}v<4Lf^%_M9SKacWeEE>R^`~fru7Hv84e|P3jBZ zsYY8~!pVPW(h|Ui$dmT{*8~(+N-2sJyMxLkRlL8dXd>MlMLQpf_U$$k1fzx z$~mT`8xNvW@pp#l#-Bo4U6pq(HigqQ^ZAQgb*I=U z;V-6*Pk`sE_bSEVuOP3UhW9yLmJV`tXXBwmMNBx`_7m~YK-;ny!Q;SX_3R>X5@M|Q zXN~Tt;hF{^3b}lBnxY}41@~X@+A(_h&>B#rx{W{dB4NCxuRcc#Q#|2N$FavfN=i@Fg9DIQ(MbS&UJr zL!jVnYn~cw1C47i0^6Rtj_yVvZ%knG(c#T%4ElN8C-op-dq6N5ch<0lg@3$Pp5?HQ(wXt&UpGQNnC#3#r=O&!9>jYpA@%pfTkFfdQ zh-2^kuFMf&|BoF(q%Rf3p5`1;1)#eg05ZAkvJS=sBm>Q@~V z=ITPJ;kVJ&RkMi9UKBDFdJ9A`!qDbMm5tJP36pN8r1}CTl=*Yqs18Du=gteoUlJ0a zZKG7CRk=s-3Wa_Ozvt176EGM-xWVUYoj&jUF3cX_PQ;9ykQcZ}rKLc3gmbSnxlbl> z?oXq^%f0%A-7gfnNQF=4f*-w$gBT;Lxek;azH13W=9t8l_k0^<{wT-mK9~FK8bxH9 zHS39xc6a-7LnCEV8$9gVO%OdDJ_X@awk{T00dG`S>W4ulp3(jI7pEu}36;5j8 z8gxtib=D&sDYDgMPf$@M9e{gt$!WULA=cgRIvbD#hfhTwe z1bCc&*yBYIyK7s=Pwscq+#R&`K~BRr#J=biftXh9#txMok;j=0!1n%uM!T;=C0O&m z!muC#dRLG5T)&+)^td#Nby>|Q%k=L+R67&2&M3wKR{Sn`W_kS4o2*q(@61hIF!e_3 z&vfgT_gA071yp;|gNyCQCw?i;4TF!Lm8@2rW}Im0R^3CpM@)^N?SCL!i4xl_p@ zC6B*+DAhe}PXJio^bK|f_2PU460wLKSY@-~o}|AR*z6YH=pG|NyUXUx!yD?S3)oe_ zis0PV<>MaPA3oEKO9(vb-+8qEG6i-oj7&Ic4ZFA%I8j~nW|LfeylyP^;;Cn2T-f%M zR9T~nQzP+BH{aXg&yrLEwaru(5oz#o3LY*(A7X1#s{Hm zueK6MT(f16s3)t<$*^S$r7ErNrw$IYCjJ_Vhg2$$%VJkU$0qIcVYZqX%16p$b${z* zRn?JfQSV^S%VWENrbE5Qd^PG^ zF@ko%kA$M!4WbZZ2M*DsI^dYYc zi_!^1gcj^}NVeRi8))^(b;p=oqP#|8IDWhlIJqRfvO@^_r|*NO>m;^KI=Dgsu&pnuxwK`Q4-r>Cf$x%+Gn|gLj$` zTjo!1m^%IWIrju36+h(2lV;L6x!^p&yQZF0tJOGOm$>@hTy8f|)o#sKj+;>4=Um(# zfwWoh>FEx}o>otXEJosQE#PhPiCq>m)`B9?j6RM9v9J)I1d^PU15>01KCd> zTEHe`y6_F8Sisb$~q_sPdoZBpsq_sta|f!H{z`G%?Tzq`svS(@s?WVmhKbE~?i z52hh-M-9m%{B-0ZMOku#6r9$5>bSAzNZ8N0u|A+=q$tGc)PLxCAvQPt)`F6{0;_wX zoZaUGMQpUk)xEd@>Gv@cqa{8todVS<-B=>w6KJ_ zQ2vCSVD!`dvF1v7z8b;%Ez}!9tsqMGn6=j^){sAk@V0cI; z4o8vkWr)J(Qq)8B*Rs(varyy?OmQTs>P8;`zR=>Ux@qE&d=<19W?|PVZgQfA!&}c% z!rF8)fgg+_l$)PQxa@l0Wc$;sidT$$7AdEj+BiNbRJ;8YXj~>eR>Zb7XD-!{Bwu|Y zxtUy{iaSF$woD^Oe@iBK`{$sY) zWOV_=!Kx;2n&Q(utvooedc#ORpXpD%M0`%s#VW@Y?N2;O8%@vo7Yr+lL@z1a53P2A z=yC!M37lhta(&wXtw7G+Fpgp-0xkbCz|2r2CjED6D;me3SNkNTnX*OPyYmd*PRn#Z z{c*Y2CY1ngoRkoa)7+o@X7RF2ks_4a%C^iUBw79V)M%RlXy93&nbY!Dk0pckQ#t!#u81mRji^V#T#!(XLNt2Dhr=AV3)OOK?0&e1h)$(w?4lhB9$ znA{i6=!_#^YosZz!N7j6Ony@Z{bbw9ufIhKiKE@pcS;~M*T&HnQveyBs*MUb& zV3(@DZQBE)i_(riG~^fLOfZafffo1vh?~NuPe$#3IMEosP! zg5%nlBrsLT5=JdT-OEbINhmezZ|_A*nmD^PQF z2oWAlPt_5x@$ei3Ae4ODvnUQ4-vySX1ws<{%t7}$KC~V{^L#d#2iL@1lHVi?GD-%w z0d|hIi<+2*q<|I>M6IQp`9(WUbW|d-S2HSm9BLG=kZ<^_58WBxD*ycI>Nb}s5nrY^ zxSjk!t2aAUIQ56gHmxheZ!u36 zP1T~n)XoVXJobz-^9YUf1toR)^EwfZt-i?ebz;IkY{?_R=k$VNSg9YByK09`)w61M z)xM~SPP1|)>dvF|6Gr`$^B+iPQ~!@+ z9D+RXocL@uOefm`GAPqE=@Uc>*44(cZahuHUsuUzWO(7q^7>1uDOyYjiNt5LeuXbu zeDC<)p|FfrbG+%1DhZElrZI}+(0W&Hn#A9!W5vfhzHoU$?RntXoI>LnE*ONht{S=0 zRCh@YtOVNhj)wdlk_2zHTwl0dVAAX~9r-_qUkA_$YqqaLi8fZU*%OF&baPe7zNhIx zGq*8y%=3-YUwptR=~RPRFRsdCM49VUN4@E)O(wLM$b8eKrLKiTtjpZKkRnK({Yfs} zuEm{zn4d$x7nQG$&isWzhU612ztb-Y^L)zZz(GjMTYg0{pH9hT@3-oP47WUBxKxZ( zuTa>9nZNZE5`i}WR+>ZHbWM2f~s=KwMc5>#@R;72+;=w#=qX-qk;hv4Ulh}Dt z>K(JBdZsl@bg&cR#qb{TVB%82f6GI$mmDqM4teDbkB^a(eZ0iU;+5984Ne z2mZni1zTa$-)(wLEpj58o_MAYGst&T06~cHQMZ6_-b-u$Z`!Igm;IfNF4Kf@vwUc; zW4I-c8W*sLt(jhoemI3vQD*k`hA`CTQK~ovO%Sz4P;Bjp(;RLo;m_mnO;G{sLoR%* zVJol`OA%{>9=4e3<-2{-}uulQF0=%eAky9eH>`hj;M#p>t*ZkP4%TX26hQ$ za-T}*$N!=cRyF!VUPyo#c!}Lqkmgh2u^-*ju->MIoT-P-OXVjKvo@J1sLK8kmf0=v z>(kG<`|+7~+U{s@$6Ja~tnth^`co>?E#dBDcT@F2Of>l*`PYeS#AwM+f`=$o6=1u_ zv}dS6D6#iS`pn$@y`uh)+4ud9Qg2GTW4y8&FQ_{@4!(8bD1!UW0HdW>_V%w5H-jVo zyv{T)*zn;CN8T)4Hx-Eido3f3tOp35$8-8j;Kpf$n0F;^YT<18@U%uL^&I8dA#RiV z3^g7lmRecglDj__Y5uHAA}`#L`J(06Q#)Kt+ig#`X4u<=s4;Ii*+{yUmG9!?D!Je_ zkqZwe!`_u7^Qti^fRIu0R9@93!!eMrk(7>^B%1L0!{AzcP^k|njhgGdggO&^aU^>} z<8>?KA>Dyt!Emhqx9*H*E2oXItq0|nPQ|D}+@3W4pgNbjN5KCeLp-2-za)=hXM+DU zA0N7<{HSQ{)HXHtuqLA_h@jwVFZt_MvlbEzGsppUkg{yKQsroGk&SNOuIAS$T({TJ zh-g(~(pHla1-1@>H?8Bkr&sLWSUBXdYs%W-(2|I~#P%xIySf+Kjq{Cl(0iQcSH>NW zH9=P)T6XuNEl3Q4N5r1xWkA!~(vwOVLKx}bWc`la;@xEg z&To2vb@&-^Sl;CK3R9b3l&YvdJ2yhPd^Fitun~*9qoz1ZX;y8(P#Txuh+7%5TvfCb=yQ8N z4R%&PjRr+?uELtz4h2U|<0OwPr9xx^za#;0%Hu6`i|!zH@(IMEd$H5zHj`>MKe@}* z2lk?zhUQ9l%K&JQm!bS_<6vM%Ky}o5>Zut-Ehgpi*2pj7(WPZeOM9E^TC?)=;>QRd zXRGPsLLSdewLzi2{0k!F6))w`cO@4+d@Ce4=+38dn&N|nGLv}Sxj8tkI+Sr5=YU0* zjI=(^1fH+i8!7v=1i#Xn5}JM?=mg?-=>EH}R!=;z(@0T!%e;`+oH8B(%KG$p5`q!WPdZtZxs>?~14^D`qHWzUGr-G3FgkgXhjil|>!Bd@Bj z4sA~jVH_ZnF}DEUXh7Nf=G)aYhqBkrCR$-QR%lA}4rMR;XYhrB89pG+%^-wT^n9xJ zxjnrk=l=q$Ss)QSCk2toSpHz|a8YGJUolcEZXi;N8_=?_XG{M{Zp*?~iza@~DT2^P zmbWx?-5?|)`{Pakc~+QqZmE1%J}w&GIASN|%tc;`QigPHI-mB_jJDqokri<;vSVpi zt0;8U%09E0`g{o7lA+HqQQh`?LY~9EG~v{2^r8pZ^JJ(jOD<2aLF9UINTP|{2 zh@R8J~+}Vr8izO5m&}ramhhg`2weoJYlfBcA(8A+3i(H#&^~UO zz$b2EOcX0e2kM%c_sy@n848bf1v}R#&O^Y0j-yeXtI36W41AK+Le~%p@2EV{AjD692`fXvJaDyLgKYAf<56R~IM&@)}7HQm~+Q%dOZs@xd5y8cEcV z&A*d<$n8di;5z4nm;p6N^+(@a6wUut%C>6rtM?_LhI)8hdZ$pLlfJYAg=U%PTR}^l zi7%frC&he%*Lq#JvJL0qRG|T@OWWmWJwr>^A)Q72K@e%LBMQ%|7J!x8 zUDT3No5*5Ll92@_4lFuuMk>CJqY8ap+aZlG)(8wEmw)RYR3JYp=D&+9`9D#3GYMG^ zp5sB149z!B@8v5Xcqd$~)1rPb3i()MP>{m|@v`1t?qqvljEu9g)7DZxe?OI1etx+K z)c#tkk`A;wjEr4Bu61MvAm$DzM%m!8c4zzQfcse6#qaIcpdGgGw$+!&bQV|zn$VS5 zWI-+{SrHh1`S_{=d03M9fZ}Sc{yhRYlQILxQdD6fB(Gn(E^vhg%~DkAZ`q8Zd@b8Y z-7(O}X0(YuR#J@MqFKuMwKYwJ6*{6GKf$)Yx;4F(DBqM%`Yb;b5bRdFe=9fFgxVAu zR@cj;N^rZWSIgQC)o_rNkQ_ZL*H=i8KZ2Zw(4oOr~@BXQ) z7ah1Aa800XFtMboP?4mLTZv)l?roY`@OD-WObDF-ODh_raN0^A*xARlSQNI8GJU_w zum)H89`Nb66Ni5T=r-UCyNmp;`QJt6u5UlwVTFF~et*Xq9(NQeH{$RM1pn_pWxI+d z?3~#R=Xx60D62AVx=%$YHJ?ud#WdL;H;WIss^3?a4nww}dp?n&GI$kol+O>ely94e zEx}%K+VSv&<`8mizQ^+g%SzG5A5&N&@!x_~{m|V499D(kRyLOs4uY6htgql}5Vg@Q@J zJl#KP0s`hoXs3PbiAyIOuPQ59%fpVxyCj9&8b5MTY#W(0N->YhPdG4-e=Ff|%pKh1 z8R)%$7N(a{ywDN-s4&5_?l(lyvi|yg!UpQdacRetqy**Uldu5`AdA=tE@B)NCY|{du_1D0qc+lI|eg0t3=5@T*PKs0gNU#NQTzKpvzi5~K{p z|8)_#UHQ+fR$|w@yVnRCh~P2_RHVDgfDt3^_h@aDTHH$6WUU~JTmUp_9yQE<6XtRl zJTu_=dr+z!G|A!}iD_XnBi9brL-SmzFH4hLOnyJpE`35hDz6%J^3b3BQyy(Ihl0Q< zvVlxWa}|QBLZ($0v_gY<74rX667F0<+8wt)unl1AI})7I`wvXDps(vpMOp z!qaxH02xg9{$aWXY1R4R!eX-eTe>5RJ5$M$_oK$#%_4x~(B<^++9@=5w-8}_ zK5;iU^n>o!D_9;G*CU^kr<2-;5$M2$vx&VjzQX1<6eVW5M?@^vTu1TvdV4_@C}*GrKM~} zLvR}ZMk7}u8n{*{_Gh8H=eQTlF`+`OdvX3wI)AW<>^I8Rd0Re4(s`-S$03T)he;BB z3%LNQ1q9&jWBc==H1{t>PH$;&in`_9DSxx z5r1HW^9F2?*N^yVccKr{RCtZ@JJfa8blM+Fgtij#d(Z9(Dn|krpndr5k|9o!!ju_q$=hMs!cB*zrdiWzw&^ z{n#IUx(FeNR?oBnkuQUjIvzju-b$=KJ&K9xj@P&aercU!*;%Bua=xq7Y_#BOzfs%a z>8<}Zw*!<#9=kEByq@3C>$n>*d!2QauiKKS`S5OJrXF38#$4-WG?da@royz3tq$MB z*DV5gY{^>NvSiVBtQwZ^S$gy95Qmw^ipY~PB6gOJU~jB%zav9GJhhKamfVP|4)>82 zvajjQY6uE1N`gUD6oNs8_&gha>C@n}{+3S{i;(kxWwcYEBSid^`iy+a@-j4!nYeh* zNq8hgdozpqtSewv`##QhCcAMpA6SE8b$t)eU+b?~lExL1ht%<6oZrSa^;!%4vsL?9 zcjps#{`62@aPD?B!e>q*&u?*mRglBVEhwHY4xaB8ZB_EVvaiLgVlh1Tv1$3d&gH>y ztN*s`)&VWx@J@S}%uJs}Evu=f^g84F*54m8NQbk+#Y#f4lN`)Q+-z!HPJC$M(;oCwQ}U{XXpf&E$^?9e!~n;vsGwl_Iq z?+XLGb=*0TAx!egT$1j>{j--+ei>igeDq|U_Qh@Fu&cH%f|KDrh^6(~_n4W%4^euO zbNyxx#=PbcxZ_)d1{J(eR}_0I3>OI~d_!%KwO9V+V+TdsJZ(xbj6rb}E?J4Owfh1@ zyO(o!_z|Bn?cxuxd4?0Eke9OCv<7>;UDZQ(G6)pz^Q^Cllu%94v!X0D|7o#jcZ|NX)WI; zTg6GX1A7C$By*KZi?EXo>M#ps*T_RR=q?5X&yc5X(ayLCtD4|vOvsG|T{Xr1S+FMo z{6uL1X*cIxa>p7&zqc>)Wk6zp!TlC+0tgChd{xZTA$!{;?c@ts>i`k!T!b4la_-pI zvOjXbY%|=RySL@CZ|}}-ZxctXc88^{@9wQ%O+J&Kg}E{#52;Z*8T)>;^e`3lFbxlX zHq=ZwQpY;}y$$^M6TZK}buMbi`}^YXYh$NT_~*p@>W94i8HH%m#@tWUItGs9IJt#7 z;yH`*_oXM^JB>y?uP!g0on%TNvzgsM`9rm-Lq0E^41LT zqV0~^*b zZFrY3RqYS<<(8!o_cGFY@bME+6d_wLsKgk3G9H-t8^dwdZ01-KTAx8R4Dy{>8*>AH9K#b;G2kHOYD0O|ewW%7npxiD^rt zVsEoXzT+=o&5w^3PDu5j7tnH;_W0U&O-zDOWy>lM6jHch1&5lS*D|Q0c-~NkTjVamk+x$S{0eDtH>tt} zGA9gUUy3oifK5eOiGB^Vk%(vo{J9m;bF5F!ULg_yY_g^f)wjc6TsP1^L0m|J%+PMEp!^xHP_ zE2QzxT^RA1}ZkhoJ*kJ>9>?6Pns#Un#`&PM861QZH~gfaP<6Pu;7_ z)0%*9>D~CR&k@VKQZKc-cU`x9)#u$?Ru7?ohk*wU-YV;tDuau8!1l+DUB@+m+$!YaHOdxmDlB-IPX0@HL-{oAG=HM*5t*Hw%e z9)-{ECY6Z6odQwa*)2igr%{xhk${R5>J3!H!QpYAQtrI2f5%+2bN9nQRtVWoOD({b zO&N~mnOm1;!!AK@!-z^a% z!WXPWWl5ARzd@0|eAaCLJ@5Iu5_N#u#2dFcOFb_!f2>ez?_Rm`iTW5L*iC<8rg2#$ zfj!xrCV@K7Kuk`xJQX!TaMGT!Xgvq;)tgeN>e;P7Y=Ct_YO=Klr)J9k5LCg|XL|os zIKQ##;BQY>Yb*Hmik+1|pA!Wf`SqJ&H1(#?IZer;R^B@DCCGO1tp( z#aH9*+w8vB0p722d;TiAbN&G&zC9-DHHI&=@laVM#H1KCI6uY+xs9~Sv*y0cYJ4{Z zq{Q)f9rK@~iYAK1t2=d)Jwg$ukBSEEXm>jCuSbOsi#WzxyJ4zj`muOGi|Wzr5b47t zTA3)bu$_#SCnvlS_7;^*ug;v?)KWQ3<*O=&AEF=E=-Z|Fc^QlD?8g9p;%Agb+wU<* zF>8gBuHcJ5ATU@Hz_vCZ4gTQHytS!zs4UrXz9?0hOVKux5%ktrR@YR}F=~@Dm?cx1 zZ5?9`p>}mYSjoxxvim2#`t%Khr?nLJb)#o=%;w~yjOF;@lcLoDebQc7)i4rji+SPg zlzk}<2a?|e6Q%j9@WV5JQpDOQPp)BDOv_0?r>owkE}?5uzRoVJe7q_5DEh(cg@A(Q za!a+U&+r(aWqzMkzkXA%W}Pa29a2ev1bec;h2ubhP&RV}y2OByjf#}5=eiNqUGSJWnM!Ad87 z76mjEZo!^oRSX2dPBh)mH66oZ-V-@2yn$b9hGB{s)%lcx*zn9pAqHlbdsoDP@xR_r z1oq0FAelBG0b+3rC7qN$f(t6wnzCmEf#WUZPa@C}$nEC9bDwl_{+Z+MY5WbXlg}a! z=2;&z?BrjMzH=Y?X>9nDMQ>U09G?A>Y#OS_HeInaXM#I{SL93?aF`-i`96VHkV1i1 zd<{6)RQ%jZ6)VzQ5n%;akb)VEjcN32~-^uDmy! zt&8m+#}YOk;nQ~{$v$DWa~^mi+H<5+yt(8a+uXYgAI45y&gU*a6pz7)orxS~h4bLn z5H9hZiJoztbM_GB2lm2Xr_YCU+ZBIcx)9xnfX)m4Cv23rbdE=zp0`9eQAK-%Z)J*|XXxjxD7`5x2zF3XA1nQMZY|8?#pUQL^4CqSXZO#On_~Nk zVDj;s7f#tcrBUM?nwv>dA|yCXE&M9AevSp~sTZaflttRvBY?6LVi5HLd00{9M@qdwE0j-5M&!&`jlSCYH8L5Xkb&P>H3Rxp^> zroDZpFr8K`3Q#tokI0;m??{|R3?At?R9P8~McUGcVn0C72|!@MUio1OYe{a~^dua8 zoA^K${LE3FAgaLz&bw*aBT0bQ^t!B8dd41Q{mW3|&9XafB0gN_I+*@#%`IZEp1)j(-y+H1$p}L8#Ue%F+2K;xW{Dekh_^Fk@|=qN3_G3=JImS`-yXsO*IU z%d=7Y4JL%WVk%_8k3XqYQisKY@ZhJ1^Bnt#Xcj?x9cIZ8yjjxl`&XApR|CkYu}aQB zZVPwzv4?g(IkwXs?W$scB83qvQx#}0?94}R>_2UJK$Z1fI!C11{C~7%%T7PgVVM5u zry@lY<24bEq3p+1G=8UC4)t%@Fda7`&p7-hi3|r$ZtEq%%K-Y!hPn2ir;OJ35%po* zNJ*G>iWI8WT*=L?F1E#zg%@W5P}DB7oj;AKw5^n!^rRC3ozZK;k{iFiqQy!plw4T~ zXBnb&*jfokc#sNcD4Od@JVEji3SMy^8r?w!uA@7`JvJ+Lfw`&1U}(RH8|wVXbhIrA zT)fZZvgN_-ULQ8uo6P?p6Fn?rn~SP=)ad*D-oS@^W;em28C|I@-+_Fz+k#V++@)gN z`4%Wp%yz{MXf=%emAAq`f2(KqsGhwkc}P6H>2P&nx3J3hXl)bP;5OaDn02^uNU1jM z)6Igs62*N~MdC6czPjI|;jp%xz(bpei}A^V{kqb+ z(jr$>|KsnY8RILK)x<->QOR>uaj*J~@PnNK+{rZA3A@G^^)a=b|MGxbKaMSXDNmtlu9QF7Yg4!bi}^q*(IwAt1j{vFzxO z#uv~qH`}p*8<^FCW$+xGh^L7psx68A1^@8?i_=7`ujoq()7}H1Jg$CKi2jtqB4?0Y zS3bP;H2b?0!g4x!XN87+%&OR+9_UnJCcSRtY!Fo((k7j=SDC@uWlID~raB9Y#~yC6 zRdE`)?}0?@jK+Q)4xU9UM9!SP4-%8@?FIgB;W>HnZsFhBw@ItVdfF?!HVIqaX{xK6 z*dyNkv`6XbE-?VkLO0~x%=5~%Hg`eiy|6F~bKlWGw(AxIN$ZUhfy4hI|Cm)>xyS4L zF0G8GYcYrhq4PtAh(GcP1|wb3#P9JKS3j>TEi1xx3aqLkJ=;{@D-E;B1b+0UQW_m! zBbQ;7EEa>xd-|aN;Pl|-%l=RL`u$%sKXXRhZvi6ysl5Em8y-gA_C^BCbmNHZMN|9k z=T={F4=DrH$FJNViQG|Ie!D=*p^!FT(dup|(AB|?8U*K0H_hrc< zn%BrnQF>vJ${Ag#jHAv{OtiG9gZMFvfGR-`MomzY+Otf9@PSAA~QLRO) z-aHO07kvY23?>z&mA&y*HhvhxM%qWTB%H8o1I7k%$5DfbWZ}5 zCRuiEvqllv{{!pOTx`(g<7@xC+kWwE;Wx65AnBIXA>BD5T8fGe>y8-~hi8h7cC1fT zM<&;5pflgaeqEiVILDA5}(~Dyw#rQq`2y74-A@v5eiSiEDZTp+T zz908jehOBEpVZqDawdTA`kg>RyA@}o;}o*V=(6dr3Saff18ewx5;ZrA*;2r)J3&5o_Kxjc)n+Gn9An@*6}(985C&6n zl}XM~!A5c)Ur(Z&rx7{G@~i)nPIT556tU>emeQC;Mvz;y(29}aop%2+o1_^;_7(0B zY=X}^H_r=TEU{zcPYZ=(KuAmQV5LFI<=14B<#bV7>qwx#s}<%S)_kzx6rd3OzSj&( zl+7+NMUB@faMk%KiKi0dzjf4lXN}pMU47mWi*oy69NV;xGhbW- zBY?%Nc#X{B0@^=-n+z{fOX@cpB;NX)9Tnp+G$bGJK|*XUyo4741PKjGXU5G_S@Ras z!PzjFPPQ0KG4XZBln0$MNhHZc7l-0kRc!Z7bg|}RS&OVlLVc!3ZrwWw^|lhA(MtE$ z_Q1o9$Ak8lq?`I;qUkJG(ErFNqV)?CnDvx=nj|0YtkcG4JAF_BO$lt6O^*!p%Or zQ{a8Hf+V@Q2GgC2zHFH8dAolN^g=v+O|xqX>p#5LZ@Y5Uimg^5v#f3bD#t@l$}h*$ z^HuV8{L7w%JQ^bHT2xIB>7HAecPi^~QeC@$d~NWBXy+cU8mT36uJmTAJwvXII;(v; z%R?tCr`k_P>V_4VKeQ!l`RQ}KU1iC5yRtfz1a%~4#B^U=NWC#bb853HWidj}(fu_B zmL$&BC7OHz_g@>%LnpccK?A+=P(`kzFK=u=^Of?-+wFARqtUP^dzv#Ru4Ord7wAb$o!C47@> zP!3h6xNnsz=N=uPTjcDi`SM3VQ0)oo+VfV0*Lz9;?YV6+?$V3bR_D4YuqkQNdG2^y z&_3Jfh}`+PNW?^NhE;E9kg}&wFkf4!YQXmizxfqGr>W;PE+wCiv_JndnBmtQEwjUw zHv#_;((Gmt6(ElTFq0H~lxSRBG`}ioE4;(6U)qZRvsgQVQ(Wagnt;@#V`EUc5 z`BoOH++G3o{8jk;Z+lVq%fyG!=b!s?pxfKF>-M{Rty|9}pnGp5dgS46yM10dY^KU> zTi3`VTf>am7sm{z8P-^hF~wF&Qb z$AqVz$4crQfT$Ff{b=c}|8P$1PPW2`MoA)eT*z&;=vNnlhWe=E`cn9YdQ6(T%wKB% zVjL2!qCL0XS;C*cuz&?({>L4cZeWP?Bj8uwkgRC4C0SZ>L=~r8ZN;oLk{&}feuZAw z35kDopu1ZUI+=K`Up8AP72rB8e=F6S&)$+$lrKM> zqe+GGiZM3us!b4B3WQ#6=!X~TtiyPg$YjHo;WgMDq0~+8j?*$t&I$Hw2|Z=y0sK2+ zs2Kb=gieq2EBsKJ5xCVg4)&9E1V!fitsum%(cF9`+1KtD+hSmSp{ACTTg7MpD5F}4 z6@v~e7gRw+H6yTuDUOnYf?PEtRD#?ucgTZ3K(@W0%d-6)V(a<#uN}nlUadAO-)PJ-a)eClp#jmS^!P`k&Cm2X2VVP#NlPoK`4?7ke~6Z?ze^6tW6F4<1RA4SYJ8& zdj(16jaOy%Hzn5_C*!jBM%tP^B8e^R`h9K9PyW51S8!ihR45hJY}u6mvg#BW!8a^v&fBj3p*B*BtL5|f0l0txV*oX6}@b_@w?O7 zF~MZm@JKI@n8|MV!iOy9e&+QE{Dn#Qd`uMJXD60R>&g*HurH&`^!VL-u7*!0p=jKj z0YQO~n1E>Ju42_O{smEsuW#l!|5nFiHg#18l@k&vmmrn&H!(&kr7r3TfJIOc!O7Xt z#J~o@eeE(^Czig=A>{g4ZL$e`V#*F(ogt1SW_JUM6N_bs1lx?Ae0!2g{g_HfNWQL| zYBj-<{n!Y|>iC%FRy0>(8n5%qt}a71eIyvr!|~4SbV3{}B=mk;OQ2MiYs>um zS)QPWzt#CC>!Xe(giM?59)d&f#~n&?M-UvU(dMf(!DPh8cK4p z!|GmeC4&S|21JM3+kYQ#I#7;k`9Ci~IceA%IT!y@0-t=~h6PK8h_m3O89==~JJRIS zv4!bT*PZX3G6cRe_lQhYY>N~R;V|QM^Fu+B1?Q0vgeB;-N5h2z(5qMx$oy}r57yz> zqghKFG0taGhlyn+cI9#uj)a>!Z0(5dCvZ9_D4 zJDu+SwzuCpfez?YLydQ%-6XnCK#7ch;zILA7+fn5QCNJAtAr3y6Rn&fp|Of^kn_*0 z=GfY32J2rIfl!|%DYJqUuMt*QHmw+hGg4S)?6W{!aN(p^>{nlKF`&hRa?x?5r3V#J z()ojm9!j{81KPK=4$*lUA6RMX`nek)cubH3n*ApLRUARheLOWHGbtptU!DGx;VUUZ zgn)jq6FK0{#HCxlg8t?vr5W&_4L7PoqbqP>mHt4+P~b|B13jloEi_~TcTr}S+R1|_ zS=E9@SL7;;4iH|qj>O_6TSNc4(2!>nQu9?S%si9S8aiR7xpyU^jbedOq1g}--i7qC z2q2<>jg9~+n`1Eijm3KlF$i5K!hkxdRTq5WZy(M6GbsrOJ)~W49L#B%56QbP%L*D? zv^d&K`Yu58zz-N@62t*Fu6gq2DvBkZc%_aUP>%)Sh5+S4h;#*dbzU0nz`W|f0Xwb8 z;Mpi?$#4QJaq<<$NEi`N78`UPhA4n|Euta_BzASX84Iy6oRTJfpx>M-uNDN+`b#v= z#&0MZLS!8*k{%T&S{N&7)WCq9OoI~-$|irPAPq6fl#HQz1tLnk9Xk-he^w@7=&O_e zES&O^IqHH*iaO?hH~;m@ra?Ai0~cjl?4wH&qr$uTqY@#es3QC6$Hw1BOXbB3QBncn(uaPXtA%)Q74K?ivH7; zfdim60W+0OB8UX287}s%Fd`bTp&&HC=A+?ep>x+tki_MH&_Iy*n1>ID(|!zGW0{U)2bfFW-%Jl4PP}Abu$D&x)A2 zODK)Ad=VTd#RgSMh6>Q3Lw!cdHPyz1TLVyWYb#<4Hk6yYP{QW+h3mo-1o@CK(JkV@ z=4vp-Da9Ckfuqo(wC8?CibYlp%(Eqhqg{f?T}8(NHKhof(AYTGXEy1cG)89YX&(vN zK@Xd`8?9PC9#;eD-~UzF4|p@2#2zO0C78bbNBPM2-3Z!Vv(Z8j14#?!Lw|Wj0;sV` z2Ieu<>42)}f&Y<2B)CZ*n2!Ptds2*c3q2l`AP0n=oAd)g5fGIqOMKzoCm44g?lXN> zREqfag?At}0*iZx?Ks~aM0rFAYL(D}PC2egU;50HVpSu)O&a?N?~3^6*@m%NqAnn} z(a`3G0&#pQpuV8wwuSA}qXM2MhvJent3!b|{$lV1M1ljbS)j?A;Gdy|Yn0WcZFOIX z8Y@yHrOC{*uMk$?+^@icGGW84Hb=}g*p_1j1*$aI$p;YtqY|kSNtxF34-ks_PB5+f zf!YQan4s}%?+PIsqNvyW8gBzN?iq;A&F>xZU|K5jEv~>gmk7XnCywtkI*E^@#)`Ev ziI1ag1*3z^3L0!haNk!W|LG#%{2}C%sIln;5Wj2UXxBlVM5*I;fegN?^|mnF#uI}YRiiw}Mr21lC} z`UI&^N=ghcENUhw>>kl1Y$n*d1LAFRq-u3U=Oc3dqBIESkRhC6GK@U7@^o6ZFtBU` zR>g39aNYq!sX5RD%BWhlal^)8CPm2jO?%U6l#j9$3+SVWgO6rF)HDZF<3cRUC72j| zSKJf#n<`o|=YVU+g4>`)ZDd3Rk@_ZtzZY}@3P9VkbTAq$)1ka@kpv44tGY_=MmXWW zD*fNj3Plu_(~6QD)BT8xWUM&C7$CysXh&I?VG2z8z`yNFS$_CWkiZtII6@kSoO)5( zf^Z{g_zg5e={>X#ndd z3D5*1Rp}5xGMVwHN*&Q#yav;9XcNU*3SVm_3Lq$EBSPpbo*RMA4Tme7XAcdLD+U`3 z5_7p|2MPZ;p;ASMG_0My5Gn>PH{Wrl6HZX{uu{d5+#3tB!Dk3_rvc7J^PgxlWwh@# zV@)c+G$!*75mcoe{qcTE8@CnlLZ{)h7_S zvuQ4%*9URczqd2`Cj&GljmtnqPL5KPT>WOOsbwHp5!J^i4#L(Sad-lI)VPyG5Dg_H zCJcp<_7~Xya=m0(UJ6!fqWw1 z$olsXr}HTLFN-$Nz0pc(Cp*ZOoGU~1Ns74?UF z)69&c<)ic!(sws@Nm9(HFtha}rqLSm|y zrQBtWEia))?x=;uKU-xs-1FS+_1=Nut6WkxW2m?j9;hAQde8fa-EQCZ0D-yFW{KrU zHe1r>X4hx|zbR5OTl{u`5dyBj)t~lp;c7XFlJW3pTU3JI{0Qn|BMKSA2{Y?Cu-ugbGW;z3W`5Yv`A>MeP{n z=KAKTUUn=Jz0W^Z42jFn0sCEO+x8`&v=rwN;nO~agV;QOJj{Q|dwKE*hW?%Os~k6OTk()2 zx6CmPC0<%-eCHx~VR^{VS0cIobpZ$aBZf{)*E`&|Knj=m!adpb1JLeVFfJmfc<7!Y zCu$rt2?}3swgaG=hv8OwBI&L z`p?<<+)=8T5C0Bju6kv0D4ixi%OpOH{`M?0r*=y@RWv`D@})Z65h(P&&&lpwyfjnH5t*au#NucclPv zt7aanE6M%p3+8;G@jJo#oi*HnAW`)0@jYpD#`gE7D-sgm*J;Q2l-hi0cx8~s-j}U2b}VX{mqHb`Si6?$2UM6T-~5u(}lb_56Y!^ZEBNL%MzW{)EvNZjw^Fw z=IU2F-Z{>(#cbQK!7KY&7FSHrmq->eNz!sw-z) zTVd;mtXf|{6vW;O$H~Ft+BSml`IGevYb)`QD^Pj3?noIJyuoj`eA)T3`T}4sVYF%} z{aEs?b~CT4(n@#v(>}0@KE*)PEI_~83%!MC(oh<~AEQ+?CP+G2br3(etZ`-R`iuD2 z#ne~|>12Z1X~{Z?z!w4B!5Wlv&*JP>;Bx4Z_-@I%LuqU1|WSdHH>hZ`5my_apN{}Ns;OE(g`zjmr0Td^(>a8v(u0uJ>GJRr?lX! zVRj*1t)c4uX&)g!@*qC%MBgBgOVL{6SYKmo&Dbzz-D7IXVZ~;pafPFrMNsMr`OGLQ zn}8p^Vj&xjSN`mJcW&}A@nYFAg2J`-F;hP)+tV;`#WtBCy9B7;m!`+>)=t5z zNhW+M9{$78e!tvN*!*>iOHjrhlF5e&?@@%Oi4Wu9BlHP*&Z)h|A@zWV+aslp!&k=U zhws$BoXOa(^{C)*iS@UakCMA^Seva<>!0<=|HsIThN^+Z?>-)7K=rpFhp06Bhs~_Px_@kcq$G=JJ~= zRx*@**5huwVLVGw-LxqQtrAxY;vEaoJye|PPOwbV>Pz>%@=`3%{m>{iUbpK0d)sJu z=4CO!C8ITP?`UbUy7&-a@r{Gd~OkH!Z~5^rG)Cno*Qx)9@dvrh#IZh%A&rE;#@y0pniKt#6p%BrKVkFu*^ zr|q@z55YznCEji+t`C^glYv0@`&|+K4WsKR6EhOGP9j$LU&aTMsb!-H)fwLN^ps|20;?LXC3{aw z*Iwl=71n^26siN&JQn>397_|L3Y zH-CS`6|VI0jR%YAEf8^{*g$#?DPJ`awE>9}6J^W0wSXMwZEw@J$9e&+kD%A}eTT~TM<;TOF9xYny^FAF^`oI! zCRQz!>%ZDhxqgnQ7^23O50YFBaI$2#>snDkiLV`UCI`_Xo&@axkXP-{?aG>t&q42$>%Sp#+v$B>>A2+$ zZ}EK^4k2yloj#s4;GVjPmMOqp>VSt4r=jrIJ96!J!+$>Gys>BtCUP-Td*DZWk zSQ*)nOG|~@N&|gyNmvLh(J0;Iu+NSZ8HwMMV*Z9ZU%G(b{neGz+o-C_Z!zG)9q_3s zv63s)LVj{wW+QODrVXsy(_3@fn%g(wOQ03lS=I-fnFL8GjFZKA%0*v=R%l(2;$uu5 z>xJ0oLexiFBi(k`c5vVy$N0v(;E2A}Gh4GVt<`XV)w{I4(?#~EYtK&lYO(y;n5xP+ z56wPxx${_t8;up)m5_edB=1F{0fd@pfj=s;9vWK6gKVlsCjq_Tq^j|Tr;nq|szI)i z{5o!LTeb@pV9UqybIZq5RQ!4Espql!cZ@oQ0n57B_B1z6suoF-WJim3-%BwY?-r&T zBSH@RmpcFM_VdWcN>Esq@@`%$$MG@SaeeG!zCAuqEbP%VZgbz@m@(UIz*tH%$lJiH z#ox{cd)#I)Fr@Q)(YW2oCcJlPiAAS#7xbBw3nTQZ7Q2-eZZdo{sOkgJj*5KwJ}sbs z<(h3d`-&Y$V;4=jgG>GR#13_juVAWVGRY-tO+U$C-2GEmvD>ZN+_ekM(F`+DNB%?U z^|ChBIh^@e{8n3DcH&7xeS$^7&WvUm_LR+-qwaIY2G`ck#|n~0XvTKJe&UR*H^f!K zl~`1F2^fNQvF$Lm4V0D_{X6~Vz8g*EFwW3|a=wN&K-A*U?eC9;FW>YM@xNa#{(Zf9 zW=<7$MRop;*aaMLg}q*Gz$GbBv-}ya*YG=nadOpevl~&C^ktn$(dlqR36}c_R_xr! z$r!1}_B1DkYYu6gVpt zeFZorwkyq*`|A^N+>r;v6*JvIO0 zV-?`vhx-@3Wr9w8q--SkSRH3s{ zYIAyBr&=dXW;@-Op|N}6Q5W3fP4OxpZ*AL{W6TvCnN0D;shW-XmJpB?Gi?9)Qp8@| z37-RjcH`FXW8I9PcK@qgd(Bg)Fa)5fC1(Pp4p|q`+)uRWC44BkNlaEE&!5i3W&Hel zKlzNAWj(PnlHZ@)SOnL0uS8z3+GCD?GkKi7+e>5_lw#TZ+}`Cf#lXzbt>wY;{NoD_LM9`CJa$m=A8KkVsTlUnDUWNE<)rHoh&AR00T=dA;8U z9fZ?LDT?&*YFmlS1Ngij&~!?|F2idFPb4E@(MnUARCZ6|vYPZ$nhd}EbQR^akY-X8 zSh}9IFvEbhq1{Y8T1x!4+k3XC-oHRQ*4ZV3(*Rdg_d0fz5HX<}=yA{sio zYrMB?sd5jjnDt@1abjWEd+MMgSB0*8%o-{hn$zK=0-pJTrdaWY%J_#Ro1+CSYU4$J z4E2Dq({x09Y6+H-Nwf|>r0BR%L|HxdSU7g8iF{ACS(7~iN#~~FxwEe;e$2mxs5*6< zJi9HtEEKZ=f7;+VU{~ENo>b0?jrxc<37=-?*FzbdFab zU{l4Ql(U;eW701m586yq4rUX)mpRuXx8hYIXinW_6^oZzY!#a}KC8{J?JL{Y%ij4$ zTq2a_6^P3eOGk&9{w=r+z!tnFV7|x~H!nB!V#e!bI4mUAh72m|m!3CN_#DSm2u69H zCDZ`kb-GCXj8B*qF=PhZDe=J%yg=M7@FQ#|uh4?F?Dp71&7Hqg7soBu(YmM5)mYF< z8d7_th;MW#?2gZ?Wl9}$o6s23?xhtY0eJ#BQr^G+Ws#0YF)goeq`dL5r`>727-3$BKH|2rKbPzt|#$8jV`jXkC2Vh0<% zc_ycjnf`9BA9%lwyBA1;3oNqH`(#0kiL(87g1U7fZh3od_WhdzwUj)QoYm15+Q*!L z;}uceCV9J8(K-HU|E6x{70;R*koC#SX5*vEX~=3;z|gI6Iwq&1|M@DNs`nk2?LMc!jio3hJySuxz*x>Fq6nBTg zU5gcWDDLj=R@@!l`QPWqN0Ub?bFVzzm4ijlFaBELoLa_gMEc>L<%0LVK5)s zeV>UiuM$GMEot>-(+U3eb@lEYt+xu`;ZUsdx#IO;xN2LQ%myg zV4vX|86#T-aew*Ht_RCJ3z~hc>M7zx_YU_hi!Y#9K^?S^`p@#7<}2DtJYC4 z^R)`z^1(Xtt8f7g3!Tv^oP1hZ7riGZ3z7j^2wCzC?j)z$|f-BMZ_LMApi1MA9 z{8KLp1TB9s*@Ctx)|<&!<)hz^CEPWP4%*N>LErIX{h(8}V6aVyw$Pr7Si@d5`40cU zux-k(!Qf7yjh>JKbC`+=4D)Y3wV>T|F|;Z8eDAiH*KsQ!WK?U5q+K>3PrpGzHY92Z zI%h(A!Gf=%PZ}ifA#4p>1lxO%6yuP6E5MkZA+U;{RfWO*#y6kEV8p;KKXY_^X`gV$ zi&@(U((oMS*!e}@b_8*K--&tnw$w-ed@|>5JkuqQ-Y^@O;=>dBP*YsgOyi^Z9-hi_ zTwF_gCd?uq3E6BO6WwR$Rg_`!^fzl8G0i?K{Em%qmLssp(W6LbHNP;8+EkONr?@sk zR!*+AFn`uvnan;UHz>Z-7j;T716zem2H5Uzlf+)&oU0a1X7Ui`<<{vd{r6m^*j+rk z?QrQlzH=40<7XYI%rW7)yxnk;ebd?-C`hzfdFZqc8?tg%0Eowu+bwOH2_767?NBu~ zL_^X#vP+0}IcYmyyoSJD=<_ zB#dkeF4K#5;hUL1wXk&uMm(Gx-#jTCoX7LfS@HnIPHt9Bt0)8>CZZfPi{ztHTe2;< z-oaiXy{{IQnjL!Jd^%>$*|8k(>Z;Y`Zx?{Xak+-MHdJC$h7b0v;UcW_LhdKI#PBHL3p%_9l(&PZ(rFhVyhk>&qrWbSqQQuXI*qMG^3)A7J84abNvat@~Ty} zDuk}pov^s7&IJsVY?-bOIACEA5}C6wCNpw4u|HwiVzpm-9{zhk@ojR5%RQB%1?HI& z_QLpTjz5f(;h*t4d&YVWtf2Sr?w@(;Jz0PoFRwU) zT9n0u=Fyk@1xZeUu9VW_Y_c>;9h9{CWz1o5vWKb0)TZb=sVW%RJ9yUgE&lI6BuR+I zO2Z-_c`&jyRnL%qkh`sZwX@~u%vLm zKJaD#_7Ffi_}ah`DWO;T7))#U=@XM_t?d4q%a#O0WE?JPYG}G><@q&*mq&h&_UK_W zsZj8NZToZ!btHm1f}ruAfyAbWJ#p;#il_+5$=_iHnN8wg%%fs1@Sc>nQHz#0$6DtG zr!!d)LZg0okRWl0;&H6cs{tc*7td~~3E^#>8jquEB{<7$z5 zv>)i7Tb3h9VX$E-oIT2*i~l2ivEanlf9GNGc_M}cac(B!65XOKmwKni1whrgBxjOY zA2us1)Cqm69;{T2kfEL~y8IVf_FVkdM^ryC-SS(4?Vq#U4%iA28r}W6KQSbq zK5yA$Pt_{YD|mCL5pucz<71@MyVcHAW?3f@OEgMa^s|Z3=xWVQ6@8wB(oGz|lf)oY zxlldEhsQ`~gK!*!3OQ`t+Zi0y zVETPq8HK~{3M5#Ysb3t78mzkUY}O}Wb21p!EVy(NvQ&fJ=u;37Ks++vaF1n|VMJ8u zFEbK1cs)#poVmX3{DxLdqP;cDzw#OK;9*xhpPqJXh+j z)t2EH&KG52NDv+x=^9zR1ac6Q=@htm2d489zKfex=lbCYo`p-ifIXz(M(2?05hr zMmyk82iIOeX7nhlKGQhED+i%YEiovOQ`-)-CZ#spqr0@#u+6@D`{I(Cl}?$d&SxKt z(mA!p2yBThMs>^etaHpX%ka%XOfQq^;lcB5F>oT1q1&Y#l`N&D%h+o(O-)WWi3~D+)_!7Vw@|Xgu|ecC!FY z3yY9!zR{p}eX#@-uo~=3A)Srzgo|2*OU3_OK1U9gQ&b&W7~T@|4;;XM@G#e_Xu54M zxc=QqI?DMXh{vv$Xk&es(kWQW#IhQ1mgoaQs8da}k-huRx+wV-{`#_xO~`ts|5Mpn z!rlC__ zV9qKm8iD;@az?8Z$R~8QHgy+u5Nvb_wv`(*i&FO#=6tm_2^R?>baV*{WgAnAZr!`j zBS9rH9ZJw=6-D4y>pib9dTJZpS%eU4KEqw|1-kxB!}w$E%YfLJSA7-`dY7zXqxMf1 zStZ!k{8Q&lkUrqw9Qe;R1FuUvSyOE9eK{?PDVG=iGWhzM8i_Wtr6^n*u#U+p)Y8m@ z!DaN&Hfp(KFMAkf=A%2di~wWPCkIR&76)dk4n+Hmmc{QAa94Qf8^!;d zgEo<1)C7|#X}`|c%wEibl}QIHGqtEV-1{6szY08kv6+%rsI3Hxd7kPNXA$`ylK+!7 ztpCNdS#&UO&XV}6s;_Xu?%o*u|G|5O-R>((`@-VP_kU^nzh#3vF@f@c_kYTsS#qsu4Ov&1G5@aQ=gQl$Pa}WVmek$*b_k_5|UyIqW&mA-1AoZ4df> z$WQ3E)cq5LK<(tG`yoO2DYC+F)-~Ht-X>;0V!a4{2ME;0BHj)OeqJJb2^X%0!UGmO zN>^7ftd;A&(0{i-HG$};nf!7Zog7TiflBkmwUEnA*MDQl62i-*BzOkT`m?v>-Dk~Q zsd~Jfz(7(0rb^Hk(otV#+V^8b+!IeSY_kq>;_JZ(T z>9p>X0P5OSZ(g>xUb9x^{gb~y%_PiGxG&>(r8QHC`>dfCrM+mROxM6%ijoS>q)(Z) z)DYbIf5S@Qcj4{=lht$@^MY>NRw83~ud{X;TQM9frlnSYfPGZpmwrTwPXpi-lG8;q zPm=1}i%8)=!WYP9Us}PgQkS)eC%c97I}eJ%tkgN{6^^g!6%&$(7|L$rejwi1BTN1J zQ{dW_W^7`w$!j+ujgNiP;o~URtf8goo>5SCceOF({^5&74S*K6hLx1$8F?)EB=^WbkHeoM41OW~@1>e7J?-PCxZ+_A!-5ipnqM42p)W}J5 zM`9HtHH?f=ay0iGb|K+TXMVbE^Ji*Gm_MobpL(<7i+F)hb@r+F!vFZ=?qvw+rOOl6 zzI|*Ff*~ltlE{$W>WbK|;6Fk%P=rOXhW$n^@Ou}8o_j(Dj!mX+MfUMI42PDjR0_(P z6VCiIj8ZucgNGZ}Mla4}j=P~O%2439&}DZ%mfPg#vzu8;j7l9G$mFDVJ*hCkdbR>P zV()8`nZSduBGa$E@4ypBDK#1_pjrL-)nXGXMXHmFyk}B~Gw*~K|GV#G{ecsO5>pwB z<*(~`ugu~+&8d95{+9!5Y27`H+R(YmvU?Os2#T&rPiKHos$( zR}3}&D7(1sjNDkX*l)|n7c6%+QCo{VVtr`ck-&pA%h^2|UP=Rm;Q^ipJKI4+#$)`+ z$u!n;M79ggohvGgyDg z4Xa5nql`XiN9{>2mEe9#Rgwl2?0@xDd#S3G*OD-taS|O1QgApVR12wHDf6DoRqwO=U$dZp5y-}?RN%JJ(028ffr zPwq41&F0V=BH|CC05fMiRiSbJ@(RY(DT&Tfy}yX&csTEJJY^9+qU}NmsWGcz!$kNg z@KON=C1s(O9mmK+ce*$^^gWPv+HUKh-QLpzk6|hj6R%%iy;;`%Qa|S18qV%uZZ|(5 z6H#|THLir;Ku2-lP=EIS9qO-Fy*iW}ym?1=i%)#oYUKY%IN%m44J6`)0F~O!zjV#x z$s-Ur(LOerW1pC$oz$PaD>s8Q#c3*&Ay=W%-|_GZ{GZzU>Eny_q!7bXS%aY*uaO`B zn~Rg$_|5cc=<+L-p-`4_mepilinEfM)p!%ouc}jFqYZ^+fO{Xkp!~2)Fzemt`6BVH z^PXGd(5f78A(mQuQDi3eSoijJVx+j)ag)gRu@6+5M6XA0c&iNGEXnlc9#kh;RUJ7b zQYuptm^6jH8J*DQyg8>2e4FeFIOyFJ9`?+M+McEHM&SVb3?uf6yu*$!F${QsR1pCd zF0Haa78fP0AftXME)vU1YGby;FqwFuOETTRlhy+S!J_{xVw)tK93|+ zr-V@qli<%2eMK2!xJ@eoyW0)Q!!zIuNkD9N4iP$%t9+;zn)7AiCt_AH3e_^hBQnX;? zDTPj{FF);MMfCGwSJi8WFa&!z8&=Sv8q-EA;R0-9SZH8vWOhWFy;aT37U?1dKf$&?^lxg~ZG_Y00m-Y5cgD@JkXM-_n&e=Q)MQV5!^ zX%dHu&eWIK$^G$DnF5R>qe>tD2z;SgJon?1_!bw-*KeroxQe%ZM>76Hq-bPLk}m2j zh~K8!j90?@x|Pvj{b-1fa99-DU}0_Oa2b#C0eNm5)#%e~>@4AZA}cUxk*U$)M><=O z;m6nm{=&K-r&U}`Ai~^F^?8QyBOEe97Hx9*lB4z`I`O$E3j|}$kau1ba{XpVFG=== zU&KEmZr|&+0>Gz-)X+NS0^(VUv`~&_a+JeA3y{tEXrLS=toBzRywMSt{p$OfEkQa? z2kYX9#o{R^nSHbZNamhmJ9#k$wpYk>e+kw=P9Gr#8h~$oPGs8jISfhPo{K{d%oFdLh2E-u+S3;$W0o6)S@@*p^ zyI*njtCsMj@nLL0(ANt@V_vR2fQLP1IN6UuZ$0%m=)%YifapYmR%L7|MeHsdKx8~Y zs#}A_;cgG=%TH_J?%+CN04Ff-8ro^#`ydCnY2YF%V!+-=0y8apK8l#tDP#~mp6j3N_80LK1yy8=e!yqxabrnJGCC5^i$|%ilQ2cPPHhhr(&==MNEshf$Xg-98 z!?CLh0-yN;OIW2zMNT{)*&eS_cY5>;hP$KM7)T3(cr=}@7ZI^Rl@2!+4RK^anTMZP zYDxGdXo0h{)h}-+Ip*+2el00EflaPiO&n+TO8L*1X4yPiFbAMmND|}Os#MiHKl6;% zc!L)qN#ym*GiI6U4XLSb2v4vsvzE`(Pf_e?h?4>IgHFNyqYv@VJ#}N2b28sEfaOP} zW_?i;YN%{2I2?5{U@pb6t#EOF`Dr849ZW|IsJF++x{u1-j|hOb7nvw^QV$0U!e~-O zIno@U$v=)`(}O2RlMkgmKw@YBcV8`fEdu?z1{qUW7GhV0_WqW zaCbi>^4F1qybmz%=)b zFs1~xBL|5zTL5pPA|6V?=29@MPi3kO&Bk0rI2X^sew*P4rvYt7wpmGCwt>M)GAlw? zIW&vcHJ)1x&_Ok!E_o?yCM0C`I~Sji~aeK?UL)hKEFF9N_oCry>0Y>}4mw6%cj zx}4|e*N>`vcmfW7+R`c!8h?RZGj3!FZc3*15MU&*L{{$d_O8vS)erIn^gi>b zji@%dJN_-&)i`Vt%IqWN&|Mzp*zwPe}F|NHk!zmv1FC zl5zVeZ6PJ4&(DkYwjJ-_QRp}CgrpM+a3l{hfqUQ5I-Xq)o-8{7=;uvZ&Gv2vJs8bO z#jI{U+T?W&za=sSIt8yF>1}sS*n?vi-d1@qS2^Isno29I=~vbnMj>t(3-;^A4d}f? zeTXTz^%{8wcaVXP+sHuR>n>*GPZHEXPY`Z(-(jndo8yz+MP2md@%r<6wRY2c)dYi& z+4Jl$NU+7wwl+y5@Xpf4aUhmzvpm}0_6_{*I}H@1n#b36;g*77>wefHwZMI)R%fWl z=bd4beCc)Gy+I{O3I>)OAb zt_8kn=72hU%iolDrc{wvUs&zoUMzvdtJ6m%^2Y9OQBe*0hE3sP@r$KgR zcc$p^lcNz>z{Y)~gFk$y^ptFY8uAB|jks$@bgegA7r@7NqxZ97%E@^HkA}nR*X@?) zF~H=>@j)~ni#O2s(|SvE81V(DGz?S5F&b8|B(hG&7{nxo-m#fK`Ww@e$EGWzYw^TB zBrIaXP17@@byY$=%29OBw&<2I-^Mo%`Fz4|;Xw0tyu@vRB;W1+pOgWNrLe1EzQ!Z7 zs+h!9F@I=ubO1D&8M~2LRK02LSP+m}0f@k9(+Vh*#4R~kaNj98cP_7ozCs)OXX|t| zs`TjU$XY@}d^~-O@cXx7 z;0ydOs1KfY)9j>d6@s0|2kqx>oU>;d@@H;xHmxUfa zP9->&XIW`gW7EbtIauSV9A*uZjhwIN*Tl6)CMyIf2^Z{Uo#mt4?Q52BS`#UB8_VNX zWF57$Nm;I86Q5B=1hu0*&mQd?0;ZeCo^a7k#7@iSj z=zN3x_^tH4cxDNeHzf79UaeMu4176X zM%ynqTActTk?hO(?>6hQ_?29KZs*;8<&&cu|E)P593o&PX64nK+&0DDg*u2d)Ot1s z>7~X;1ITMjX{2OSaN~B!DApo0ibCx`0ckL-{Sa@;r{Yy{zZGFXF5v{Iyqd7fP(7*` zUl<30X_f${88~GafoaC_56vvWG?Qtxr)lv5AiGf2fS-|u^PQl`@V)$#D(_9g#nkz2 zF09F;0na7jEnicu^pou-cFJNa)b&pn)zf7ARu01w?1Co@jI@_UPHphR)?lHQMk zE7?;g-0>!>_S5kuTI68c=$lesu47z9XMsnhT>ZC|!UF5}^m$p$`yy={w*c-z2EWd;ug%Ot3G~(DlmXi( z<6Y}K!LUKSI*_XoS1(C4_8L`O0KwHK4QeS&R!R&*B zgU$O)VGDx%yA`jV$*zgaKUvnV3`9h{B37K^_BHOl(mQwSge=>jr_cC#p)0afq&75C zus3YTFfZ5i;s7pqxBKm{;e-qQFR>M78{>g@tb$6@*@LEUPkRrOI_%!D{ii13!Ok#E z|1!d?ngF)0r9>d2*qQsmkH4mLcJ}%$jvM3c8vAB|&UtTY8|(bgGoR?FEA~|;+`tch zCYKtsR)M8}_G%)6uI4{nTaeX?D)ZUjQWuJ37nzC_Dwz)&1g+}MRyl(`nNjNbMw|!d zURJXXuD92nLbrO^vKFZfzYF?kpW`n9_{?+0@6i|AzNP`Smd@!<&)KzcEc^MZ4?VME z3D&kLfyFOB|3(0z56uyl9V$QLGurOEo)}d;V(hL%G_4!N%{MO0{$*SA7Vvu;PgwOV z5hVIc=Ts&zRW9M>?MEaX=!*qTun_9goZ`Nw4QUlPZSdsYW63m)u`j}`-jU;AAiB>% z!Qf#GT&*x6Mm%7NgT7(5*^F4l)3O79*YI3Uv%e#RTTMUu!3WHg8#H>|bv|Zdyku+n zvp7<8@6#H0N@AS@epxs7U?=14Y~{H!Gwi&yT6KJ_Hd|0saPo98x3)01Z-3m_4s6Yd z)wUrT@tNq|tyXgF$7BiZb6tOVGT#IzBA`H0d1l(U!brws9xLt75e1pFwpb%rn{ZzSb1%u*=hCZNi#Vs2dw3*&p$o&N<5F)wWMlr ztaj2EaeR^W*U#~1&fu3$-CyPR^%EA}NUD0e%nQr+@oP_>%^BbJ><`c3BEdC+!@91MowrKOIw|lL_Z$pd)Q^t) z^B*GBS_$N9da(D}`N5`lXNh_z$~9GRE|>WgTJce(zBPdCM*C)pvyf5&g}hC!!s-{5 zFqsp(IS1QIzNgL|B>j%(_hUq$j5~dCoZKT1p3@PN&%^4I&}S0(W&Wk-;}3^{&5y~b zmYq`(4A^+H-!I7SWn+}$XOlBfP4)kSOIr!wraJAYLa}FBpDe5X#_LK9 zpsRgVHKOfl=;`9)Gd3E%)W1S4uOvn{9RD$vy%F5Dc0YqO4KJ@o~7UB_^b?~=`rTpC}nok1)Y3Xjs zU~k(d@O2$|^Npa?Cms32W3t78==KG9tF=Xo61FG^>cRFhW~tr8&V$lsefw{(P;Ab7 zy-grYaEOQT+7z^@-h|%#vE@ljO@{kgFaXUtlg7a_yv=3(*${iMP+jzhdgtQf@{Q>I zaS%vp`~^uRXKS~n=2CzRq|K!|q5V!!?fO3Of+l!5Tk2!$tRwZ;`50$+rOv~)_!d7U zFo=9d)o4(x5M~muV)M{C-h=Koo{8YvReI9+t)ZRbw&b;a^j7qFV6(=@F9py^mLoWv zI~8MF7X)A#vaPh`94$@a5clKVY>M8Tu>+pzdL{wlZI36V2Tgq{V~eB0Nkavm_c(UD zTMLy`)|uEV^#>2q4EYaYemm)+CMp>$&KK!vVbfA30eb#=;!`0m>9b6+hxQbXR~keJb@0(g|4{-0x?t4jc-(LI{zU7gZ0sx2 zATg4&P6fa5Y`i?*eINp_gvISN=L5F=@@U)Hn>po0Jhq7TYsXf)GU}H~-t>-Q#6@{- zYje4fKvd#GY(XrH?^w5F!Zu~mkK8z~2g!?42*gki(dTL0@Fp!0^p~w8dNe}H*61MY z$F2}qB608qwQvYjWCfsF(yk7UnEaWkV&5nsfIl#^7hyb{!llrei+t4*~kv zkTlpGL>li`ndXg_*KIl17rimd;8=k~&p!QqJ=xHalZq5K;ZdEXl7}z7`C6XqW>~53 z2aP&EzDHRBY{Jj;qoW#hi?6_?c(G_3a4-F4AcV%BMsc$I!fU2El`CHRj)aVmk5KIj z!1wNl?RREK%ijwK-$K)UB0Caa6}xoq3%>k}G|5)!bSznu7bH}XvDF}Oh{{xHk6u=& zxo^O)rKQ&K(r5sJM4pH=En{HtS=`GxX@f>2smDy~nR^9|#AnB>`?}xH>dh=y6x%kxP{3H+S<+n0;#vsVgm`Mkgg+B{F-*PvX zssdlmS2z90Z`frIXyAZfk-A}|6$`Nxx6y-FT0gJX+(j+5lARr}%_8Dw+HH-4$M>pB zW6MSgURR!g*9}h7(^&CZeam**(=(vaGf;5-$M3C&`s;}&4FHu;uZzYA`b?eZt(rDR zU0zI?c24WoSIH92_?AHod*q+GxUj`e=zp4kAM5T!AEHp-6H$OkkC)LNN}UuFZ?@k) ztsZVzmS-ni_He0uaJ9N7SSPbLJPxNr13n7F@r>kmqRq}~eeMF&{P5?Vsb)71Zj$<1 zzLHdG-+5kR8Z<5HbvGKZFrB!LpFAeR>qo*nd9Qqpo)&_Imas2!uO{^ z9Oi<{F|3Bvw;3-Z$!}Nb9+cSdUw1X)PO@oM2}4Ox5I$D`Rc0Ix6K*z}$<_}Dx^z}8 zPZY0o=q8uO`M4YqA;z8%8}Gg}cA?h8-|LAubAJE9Jm4g<>RWE52Pg9xZw-V}n56iP zfg|-G98D}LS5Gpp+{he#^|!#pABV|M_5 zIGooIo8v>ul;!vy0pf_~XQD2=%KGqeE!!=20dkqfyEQ42sLJ;8qIf{Wtk!$>R|M|8 zVqK(W;7mG>nj9d4K=;3l?24Ccjf|DShAU)SHO(dl;WaXLWH0xNt>O>sFdc=)apM6R zn?Vd8!Ywj$zRgMEbC2j$0fkFn(#0^7H2sv9ph1A*)rw%yt$v}^|)PB(Tef0bOWVjxTwrQL{ ze)1k=*>Iu590z=|t<2ck(8;i-L1z%>8vVBNXni!-P_m6;oNPuK1fgZoND8V#hhe`7 zb>(VrI9%IpxJxoloNH~jegqbC%(p=_9l@4wSlvQX^+#Hi)wGM=`rVsn8t%hhjE1!h z>UbQnA8l;tyk6`*=VtR_qs&Zm!(?;e4(y5q{~=bja_L1BlH#}E*}`>48q!~3gUIt1 z|NMDm_=x(PB-QE>HS0@1%cE=`jfDNxct8N=J1(#5nI$)_%bEt)mMpN}*7d6`I?eyt z{o^`u>3w;-S{)K2R;_|_Yh8ybB+Kp-SQRSF$Z1@&< zhD_d;PNC!23geBJ(-JsQHa0^q(OlTpIHc(}CrT2sGOHJu8;P14vu4=}gG&VO#E(t^ z)Rc6zG9%c~RiZ|dsT^t3*7?`8q2@qFA0~~CV~4jK8KncBf4?(>R4@Nzj=`%OqZx@y zv&`eh+IL;m(@_u1;n6cHiiVzGUQ^e(3Z?5+l^rF&S*;&1)P7X%+QR^ zYKc$%`svE#7W>F2lpeN|ErWU|H2sui8lG5OJab7GUSp+M$b;>zuM+Ef#+5)l>~ZD8 zT7-;j#`Qhd&(Xmm2+tzah>A0lF3!!Lz@cit1Mt+>M4F+NVrgUaerDl0h-Xz6$x*2# z{o?K~i%@H)!7o}$O1zfR$ZQP#)r=^=%dcn@8SG&0d@LECuij6isFAtT_vfnwX&Hy7 z7RH73Gq3vEwxPG4sfSGeMRpl*r^C;t{ITjc#AnXT5wag9@hnVO=`8y6n1084?R$jL zy=|I;i=uIJgxBA(>HR-{g$%J$!6HJQ*-{ssNean<2z^z%f&f8N`8ruBEG`kqA*ZG~$Os1fwF5Tr&Fxebs;aRCe2t!P-+K zb>z655mw8rsVr)>4*p{*eCv<5zK$|XqMR1Rv9d8Kfuek2Z+VX!dbyMPE9$r76)|}z zM~i2FI{pTcxtU;6iExW>7jBk#B>Tz|^o)PpmXat7g)^K%$j;${jpAtPFF*8NNc-S9 zojyM0c>l%_Tz!HfdgZ*tD+%elIRz+Z!{66=oP`HfIF5p@dIeV+rp$&0GWb}1^n<#P zMYpS7B3VZL2jk%zJo!Oc^(ZPpx^Nvy80dQUrCn!}g@CJFsIuNP2Xhk*Ht(A=F! zVDm3?_lvK;tX1v5Fw}6@on6d7M^d%mr;rsYJDe8fh90j(YNm0bYoLs_6 z9FE83lbm?kxV!x@eU9knTy-Tlzb*MZ91z6PPM%bDs zZ!E*ogaQ-`d7xqr31zXMQ%?i!_o%f!3l0erfW?`7&5doSWTd*uH`hTb&*FSP=5lpp zpLFQowJZjbubk>nFnRsr{Fx_J7N=Bd zfg$gHeB;p6#TsQOD`VY6yQ&wDhN7FSoUK_upyKLIxp33;Nnh8iw$>3SDWBkiS=9!G%{;0+H?5gWe zKw%9R1(I-oEpYrhZ7*9G(5(ecc8FFnpT4sDq` zu;pbENa*)|#r@{w@nByb+a)h_?$Hdacbvj1AY;56P4LA-@jb{Tu=$O@T^NQHLAq@>yGC4 z_>2C-1G`9vfxZZ`a`WW28P!9En>Z(rwAq=yAd6~@ol$r; zloqC!Bq9e9S|;W2*B84inGs^3pk8X!Vwy^O47`!Vl=SGCiJ&(0XDkz|Vj+@lhkgJN z$)uwvVUHKi7w&DmrpLEFn2`%Ia(Xq%;VmKeNb=6@f*?J13nS2(9ZHl$i>m(U zp|teWq3F@Lb`>$xr=VBg#f`=2de;L>%1I2r>kLWJZ$5Scq9cN<&RY*afyvE$j|7{? zXi1e9iS@+ItsmtK{VHn!oEyr)B_(7X#$^?Gwb_B!Yp8|g=_udYd8`xPrt+N9wSuU7 zPi^F%$hFGS<3@eGf^i|`>XU_f0OJw`N_Pj&#jK4vKA%86T-Umy4T~1$zGPV|Mi?U( zHIwQq1qdafggE|or^wI1MS55rWM<2ahwKYDs-_SS@ny1Icw2~3OFtYkRfvtkyOHN% zT>FW&=aFaiqJRXC{Z)dE9c8wCEWn49wPNJpz5M1tq}QYWYx!-t_f3VomdCCCOU(Dj zzO%@*7sTS&o3c25z7P5b!t0LED1*blfxTUp)P+w80hf#ygA0DDP7}N*Q9&A) z)J0ecJ`Q17Oh_dun66)VSu4L*Q;82-Hd!x5uaK9%M1GUo?Pu-{x_B$>ibyxlxnUY~ zY>IN+*wSqt5E7#SE{KtznAiR9AO^n z{5D)g6!hfdVC{sAgz=Gk%w)Z&!bg2X5FEYFEI`bZAt+1^XQ@(f%a$9EH;3&Sm2uw| zL%A5vv59*FpJt-Qd$hXuxvSx9BAX%oa`6MQC*ctj&dkmf6!Mu5sp+B>fs|yJ!9@z8{ApC-F6hVxOe@#c) zz8n9d8YpM{=pLF3v-YDV(p*^3Y@$oiG!h0#p8@2C2@>do26DuwzaPT8v)p;#rLryA)kV=fhN0x}K3oHwhT z-5{tj@!WI}AlHqin`L@zI(*KvZ{6r!I~HAZn7}(KCq_`}%DSXY`m*JVx+8{;I#smC zG964ALYQKBcv5VTIoZ(x`o$41AmoAaB&`6OZk@M7-7BYs4q*<>o+@fjx-k<;!7x0* zk^!e=&b9_H4_Xoejne{2l_(buNs_J``4=&Y3>rg=vV7$CAN9}ia=z}TfduXS+>*Y^ zW~gTqy||_C;hZDixH5{R?ir16whozMM>g6$h{$;^f(&q$EcBOudvOIWuh-^rOuCw2 zPk)h|o-PWRIFwzb+2siAf@gy@~Z=W;Z8S&BSDkg`N9x;=! zRbGdTj3nl{34_<;UzCKtEq&&WK1w_%Zjp-oJatf@C(N-TSM8>c*uSwlHw3%)fRbtR zT(6_C|ADL1+8Iq^gmtzdmQuBHBM=w}+oOB(ltojw-+iOkil}Bk{xflSowJJ$>L@mu za(I{m3Mp}VEyo&oL81fR${ciJVMb#jgq=*iPoblY1a%Q>NQ)OS+@tyX)2(L3eTwFS zzdxlEM4agbVUg(-`=`HrCRHnhU!;*pbW*$QLj$z1IAn6yQ71s&cl4Z3WNxike9;5* z3P%}}pj_?|uVug3rO~vaMJ2W8rDSgf&fB`G8*Pr(sp(u`Zv&h9rW?g`Xs)7J7VZl6>faOUyKF{;?>+S_LMgkJTWQDxNk8Y}3sGFZg=j2Om$SiM zx0BBKp!Wr4ky5OMscX5hOM=vA3D7!VF|Y4fzaLdE4pxX1s8zS3T2`Huy*VS$Zj#HK zn^{HbA18YO2fh{yd|un`1ZibkVxDaqJMHl78GN!Ci28cT7Iyy-yTu!L97chxfK)Ak zn*2u=JL?C`{I|a`@D}D{79RFNZ*&qRFr84Z3~a=C7Cw|-DM@P|eiH8-RY-hWu&dA?=zU&L6gM_E;qq>&7t-sz*{8RY6c zFmJzfd&ScAr!bfC_8yM9HD;#jfQ_@=W?hc@Sws8tDBkob+>5?2j5j zVk)p2_oWzn@%(GY57q{_-=6c>ykDPURfR7Hc4$g{f_Afbv}vuM`iIZYjx>3-$?a{D z_)jME9OI|8iGO&M5NTvY=CX(etTzEo#7#m)$j;hza5183LYiOht08%VgpYy5ygZwq z_Svdjy?d-QD|e^^;C~WQAdDVy>DsFwY8rlk05(GbQ%_flKx01DA~sq z$_{gP$(|Q2zH7D(0+*=_6Vnnx1Z+&IRaO$(I7#B^^d-Y zlP43qTT%i{6lBpGyU?0R#5m!XxqhDqZpHS>t z5zuY`Mj@532h<1aGUXlKoB%M{rZoMX@dJu4uKs1 zI}BScmaHW?_~D7p$u_s($?sDz5O8DqI0rBO8 z>KBY2cZQH88Os4XCL0kJa1Ui}{ldDv6E8llTpmDeAFYWm&Ua#*lpr7bN@uZpj$~?B zZ>E2?scE|)I{kkB@h;>}1&14{`@a9@jYRT#-LOzI(m%u$ult%w5PyW ze%tkml&*F0GogkPwzs6sLSzpcBM3$%a`GjNdv32n0|kg9e%WwJ_B~y7#1$+4dpex@ zJu36~La^^A@w(WFb28#|6Bang{Fc-mH&mSb{>MUMVqJX1+E{;y*1Lc+TAYep(_@g3A{6*8L8#QWp}&1oLq_(^T)r3wS#{Gw%6vep<^Th=`DP z?ze9qB~wkC@4qkxlnZBqw^IJa*>{Q#tIyCW8YsM=dC~#-v#PH9T<_DlH3}%zjFbmx zu=fK`Roy4}?l&R@79!-Tw7d0}ZcZ;Ec32z79Yq$uV>Fy3ey1S$sDH#a?=^nbfyF)>` zLpp>Zr5mKqjn8x5^FHUi*LD7x&2`V7J$v7Ktv&3|{;u`as{Dd9?`uF8`E))QYDBjY zov9sV-G$HMjJ;PPoDqU5-lfB0h%W#>()G{Lm?hR@q!TskOeDx@6pA#?@l`>BY*fK0 z<&X=++^bN{PiWc_NVGNY^4&2`2YIwKz;V7_zDDN8eOCl$Lp32m1Z~ot`O#kCf>)d} z;f$TJ!%tQYG)ZUNbZMQL&<|X^#%!q0M|;7W_B1bt8L6HjE=Hn`U%aMC((qm7CJr_u z2MySr$JCx7%m)Q)BO`)WIxO60lK6NdEAQF(G%H^s)%6;w4kC+JKfzPCMi3`okX7`_ z_`s398r+!ip@G&Md_0j-txM-U+k%Q3U!driH8y4qrtp~c(GneW!#8UdC+6=LeWfWv z@v#-}#zV4B)S*$87_k@RrkV21m<~k@-ut`#<>0dj;$EHs6hLHAp8SQ zS!mS$?JPJ&EGZ%5Ksk=G$u{DXvC?Qf3K{K!^5zm?v$X{NvAxN5W?brh6oy^2g46h zlh7|o!6bcqJ6De%k+Bj}y~_1L1EM1BC&Wor9_k)TAoVpE{_EVwM?Y5lMMTD!y$po} z1p?U{@-cGr(C`xaPPfxgW*gj|?(zItf9#Xu~_R%|mClz$v4Xm#V}+9sKzLY)XtoYN`V#B8?fY zNEPyQ;yY3C542b8#%w&MssU~!s5oT_h#uV^1~vT}zCXW}{DSVW@x+L|$0yAlx)BRP z2<9f@1jMPLLuTM8y_&1uhIJAfgJreELn4)2BOO!EjVqzXcf<^bEV&fLW(Y<9)S(qJ8O$1}!gN z6rW;I&>vlR*yL8^gs7J=hC~_6ISE>s22hfh%L#+LV@*{FMdt3@P1)d#WZh-J1(Tv* zRh1x{!;hpB3C60ig068<9jRmmWhArBd{S!oAVg!T49|Nda6x+=V?Y;0mz~(!(~v?roCWWtRup&A-4GPBbhHPV`=4i)_}wqk>CZ!<2# zf>M~J2SJd;UnQ?{k~vB+H9lOWUelnnU~^}~f*%fatGE_ym8PaDS~ilN2`` zqd8yZ{l%%zvmr6?Hw&GaAP4m?zkc)q_W z7!Wf60tcp9*d&V8gqsa^K24b0G8>iO&rwm$@wrDl*+a+k(Q1Ed9uQ1Tnjk4PgKOWQ zvpnJVi%`Zl!SO&Lr94;YC3MC;NPk})8)tTVeuar!WY8lPz! z9FI42jfDJgQ}E-*hM0o{;yK&AC3=;M1?bSh&x-EILyPlM`s?TegvZnOeYfyKVyrr7y3>lcEOGK2%&SD0zPutpBIPZlqrcSnKC_owQXC)>^! z^_X(s7JCj?jEO6dQB+LTn0W2^)w7nHar*c9T@Qj~n=gpo-uDUp7+c?->lHk&2>c(TZ1ssz`G3wvRd2>PjS3f>$= zgqSw@&BUCB*VNUdo$e=WM8}Rzyz=z8`S31kpYJT$sQvRqnCXpx8CUf6_QWC+TtG%A zp*_Op8XDdDBK;ucO!T#*>14@x`h52{l^snU4EIA*3G!`%LieCDL(GrGrzS1Cif={u z4^%ytgWog`Qp#AC*~+C}l`3Ht|1OD6mp*4}o2MFhrMxt5NBOgMaV!>?=#~$`v~&N)vv456=f*=+FTp{ zYlBL6_DDhS{CVoeCz-|*=UQB07emHXm`r_IZGnHrdNAP^Sn4kt1ut3#q7~TC>*E!mn_I80TQP4v z775{odlWyI`FfLB4)O{9AXK`}K9+H-b3kHA3<;`p(w6)dYJpny+%+a`j`5yw@$nBT zmvvONZ6e7E>2%4Bq8~pYdPnnIzN()%(uDAni=@rBqvu@F0^WVynT%uA$hB+vPW7qq zR%x{h7S%GEwiEd+5~bwjVj5dM=$O9XffyPhYk#Q))VI z?i6aOy$6K*JMA}@6VQ^?O13(`deZjlMUA|XG}lA-_NPfx9!_I5>dyeZMLy-Jaoyi` z;_q~8U1>^Q{_(Z4{yr0WF!LUEGuL{CCSY@*38%(bG5o$@rW)F*Wu;M4q&-A$VnL@t zWTidp&^sTWp!J~&8p$D_moz!{n`(irMmrI+wWLC9oWMOcPP~-NKT%=CsY3y6e`LU8 zGiqZ0lTJ4jo=~naTHCa%F~%01H?o&z4C;Hm*ODmZ;>m0THXK4!-wHf8D z8tAT)>a#xGWVAP`n{uB&(S3H4yr2^$IaIPcw^h=5|Dq$X>w|grzQd*2WohF4FiZK5 z4ChCBXD)ozP@kccUo8s5KOE{#{xF9R@Muetk`j1^dgG;~3~yjonF<8FX^+(CnEXA) z$6b`oug_Oj!?-=d(5m$@{*{rnU|HQHS-XIKj@qmdO<`cOOH;`4uHK%z-MC`PoTH{p zY&xq`q7t>Y>~BNeRLZNwH7=8#`o3tXM|D3M8*Gd=U7-!yluWAbOB5q#dU$ngV?SNf z@}BKjZ-h8@`&jcv4!u}jt@$3vm(%!eGs=nCf@@uw$6uL)T2Br~p1Ms^&!xq+2)+py z?fH512fh+(L%6IxC#oGIm2Z5V7A7b5Tbr7YC|g?{&iA8wz{`y1$jk%wPGB=|*Gn&5 zznVf&Ujf?2e^fCHLE)Vd5g%cRzt#HD63tjRxR*C+-JkI0WYR6Z|EXr$(ks|9Y|WfI zvzr;dM8#CAhgUD3(nwNPH+u4OQhOqv@B+{4D0Jam`-^pit31bP>;11Q^B!nxc>An_ zDfbFxtizy!z7nAfn$2v3O`i)hthj9_QgYdOq8J(|(XM9XNx#%rBoV@DZ=b)hW}-@& z{FbL~toS=yf@14fNz-Z9r>ns=Lt!GZB5nJ{68#b z!;@%A=Q!TPsmbn`=uup{40O6ta55nV_9W?_@`LTep?j}fJ2c0tJczXd*dl4VK6w7G`V zbjtj$@xHsa((?=rv8W#jtp2b~|FX&zF0}c?e=@&zC`f-J(?LFcXX#jmpJ^gH9%_?1 zyu%vDTK7?7&NX~NzPK)BW9i&Xl8*XYjWNRFQ212DywsfeG)bv7^>*0B+A0e;@w6!U0S;zLtv&8XhPw@gtW8lQc@k{J70l;9fA_t(wPeobbe^X= z;X)hKq?r>@Au7wWds_M>>d1@i=Q8yAcJ=98^LF{;Tz+c!@x*TrrV9y$N%?)oTE>;$ z@`gs`UA)-tz|jelN;5)3&u3oPqCIWnO5VvB3$d+!&5G-v`a~UaTRJ-=yahk%okXr} zr#imAayU2TL`z(fVZ!3QfkyV(-mCuQe&6Bp!S91O$MiVug87y*Z-!-JH(=#6 zScHg&_OSjLAdu!_NDZvS4!8LD!z`HziYu7saGFMyyK}{#$i1)g^4RbcwaykAYiGLe z|E?eNygmTUF$KE_wl|d7Q5=8z$^&^Yae=gK_pO_orghENQZU^}RLJP>MMR3ytl`$4Oma1hRwV1<9}6`UQexQ( zr01)XQhb7{l9dS$e|w>9?p-|DS;SMkW`0#H{e8N6?Wb$MszdUR;V>`QhF;Nei?rTv zeu6rSEV?~Dn@UY{R{hv)yx*66_C=zF!)_Pi=QB4GNNr6|T5PJ{RaQwB@Wb$`Zo<&b z2lgKYmg~hVU!Uz)?9yTPrF-Yw-rZR^w->RM&#)>&3lcwU7ME0)xnbGkU!mjdCt0=^ zV0VmTG2G%aXkkYgD;T{I@Y=(VI-#O_MVm@@IPglt(=@c2jO;Oay{K=ybI1)!|6-ck zaaVZemQDZd`bsO=F(oV65+o+E>LQ?hS@VweyL|3sO2_TW#Ns9|>-vnhu3*h7bo17be+rncK1tu@`~a0$A0-A;1g-FRKj%PpWTXlm@(cQM7oDXy*j)wkl} z_`C?RdwbT91@_{@X8)xn9kPlombZSwXl=^un+x0f%WMQ|28O@!W8ga%%$cQCj zKlF-(EzsCH#oDr+az$6W$2!#uyPNYL*+)rVzyBJ!J;5};z17{>7b?@>T*rlmd^Oi4 z4i-$qn=idAiO;;r3hA_~csqr{{iNqVk?qe1Wc&XmwzO(kSVLX7^&!1j4Bgbo2xF@+ zB0nL?$ri}yv&hN1N(g_enfyGx_Zm&Ec*x>@jR2Z3W#H@k+2Y;OUiuBCVxr)DETTwo-`qIpdr?EsWLcI%m7bJ zEd!W{85t$iB>IO6gEQ`aX#CJvq?plOi6a>1XHvzT4X-rhRZ&{6SWxB zwZY>Ed~VRy;f3KdM9o021J1SgY}?@zkVqHQ26a&NP2&cL!nVwE zz;|v2N5}`U{TE>9>#{s|2r4kOw2XQrOzv?B*!qCx1F;p0C<^`Wz*g(m{{?KxS%9P6 z{{gl#zaD@saJEE*E`BE3(+-gw4eHZ;Lj05-t0@QcU5QcmdbN(M1dQ0YygH6Ts!-wB zY$)=5KYA&I#JZmII|h6-F(vHIHovR^#%;>dkeOUW;gLg&ZgHP)9N8;qx~GHdMWuA^ zr%&HKmH7qPeRL$P8FsXl2uGqFU>-#9!Ocg)h)7$h9J9cJZmIc30#=k*JVxW=_mwBI zB$x6Pzj1fA9KORuA5rld0Jfb(serw7$5`Jpzhn0g02fR#!9aE&uFaf(#x2z%2l&BXCm0xBJ@ryztW`SdFStVG@K5 z?eE^#=98In=6sd`q^72d-Q?z%ia){o8;`(a0SHl~eV5iKE9nQxZ5T5)$qQ)oG4g5X z*hiUPs9T8&Ty5a6y@EA02cB&a3K+zG18~;s+hY(X8$No%-#8wdey7YZlcOp{^Rbrb zNJaFq{;m!nIyz2Sh4@H?U3mgjXyomo21wuH5-eKKMxsU4PpIC=Ik+~%yp6>*m=-LK zCH)$n?6~wh+6s+SEI|v9!at`Owsu)XBIdlAH5VH8{V74pjE>)_8j8%0j*mQ@Py_op*|1ye%IfAr&mSmK|M?$U^49UQiBc*NbgBmy$! zjFK*-(PT~;g7h$k?$e^+12L~U%})6+N&h}Z?Xd}Y6Jn7ntYrX;5BdWDP(x;RfYWed z;%aqL9!Z4*Y%4Y_QYNk$WhldIh^dCqTlY1i4sqJ|vsE1KtfyjJ1GXZorj_$cq%u5& z3pAuUJOpqVDn$k9Yr3ieY$QQD80FLy6bGRSdz+6U|3sJKaFSW#KP!v?nO&=?*>8#{ z(8p3b0jV0Hgu0sw2e>n1F`$PB5t=LQU}^<$X_!)Sl9?rVzh9LQ8&04wD;9PLIc63o##42ga7Whn0GoeU#GituoRfpj8TmmV^x_y7Pk{WfZHtNDa6G zr68CJ0|FgoStDaWR2^NQh=_=+UIImCj}bR#u!oq3mb1P@s(OM9LX+Frt2(+ya*ZBz zR;k2a3uW|tSb^DC4QwXSJ($J0H*ptP2~kpH_(dBQI0fjIsDKA;Wx$t@WM7^7oKO6oNoFSf_*l(bR&6d4-~fq> zK&yB{cKQ_BFRt154q({9bMTC51gB~n91r&pxbBQ7m8fb)N`o#TDOHe|QPxYEMySYe z2JoWvPs;W8x0+{q4QT9Nocqi4*~3E%I-OD0mrickSkUdGQXfgexGxI6|=KdpA1Iw7%Q-%TvA!1Cn{gdpJ79#Sa?HZ z^9=L}nGe~aGEkcj4N2=OGqmAk^gyBK1=%?OtSBW$SRSk>Sv=xX!@z?V*rc*%-_RBz z6ZrY6!iG@N(6In$8wVy1Gzwt{9M^*??qS|$&AYT&9pj;&RMnPPEaRmWicx&%%{4Wn z8mr8g5>SX-uP5H~wA1~1V6+%6?Ja4G$fNs>2_ZvbC{h8tFBnoLStJq8;DNky32t1= z&0_-n-q+rOzQv9<5@qS1E}buKNtf?eVCi=<`T{BYckstN@ylOGm&9k!H?pm%>VCM9 zt`jt0%R+B_jbEL6Gv6&jm!Oxh%}+Fm+}zJsyv819?oH^qWbWSLd~ANHoDZ2UP}+P8 zjknnJGDp`uSxZnhe!>zdc)z_VczZQ6FXZ8{D`}zMMBy@=Zk*O0*r_um5O_EIk?NT0 znElTkw~O`CZ!~uSs*OF3D`LzO2j6N}#*ZuK=S)!MaRK+4o5tY=drMbd`1n*f?7;O- z_cun5k6rn4YMrY#5q0Z+T>ek@y2_wVjgO2rH%6r8RfZjIDI{&MVe+9(+X!ts&el}6 z!w+Z6M!baS=J+i0;RypGjV_$l?^cAF)Twz{`Vwx{7MC>jXBf$+O7bF{yk*;wFr53yTl!`a-b%9^PJNg#8df8)`ZAQf zuIm<@CycNxjLv>|oRnRwHFP3&k(uDpAzc6daN-(DgaR4z`?c46u#4H*9K-(o7DXvm z+i%Tr9i9A!o+Iq&U=DFQdh?I4%uVFU`6U};6TkLl^N+mEOLmO&^LYwaU5b|PRcjb& zIH>OHxvC|KKh@X=2Ul06VWi%aV#R7d3$Jd)z=YHf= zJ1VR&*RcO#G{{pr-fkSPaXM$Q+oJq;@O(sPggzE>J4Ievn-KYUQtyz$m#Wf>^E+O5 z;+UvXr`v56{e(?jF~NHJ1-(CJW#`r_>)O@a7YXw-UV6*xW;(pn$|Z6%Ci8>&u44m@ z=gtM0Uf!0m(&t%TZt>9A*m$k9xPIjJ0RB*gwCF?;hV$9yg^tgjZ>shO;yZ=ytt!yz zUOmeV%;Xh4l5|Ij9XQK!8(<3D=IP|};b}!pj2$`SMM+d)?Bv&cKQ;~hqo&H&?!;24 zwDG3?*0VGH*XT@#_3Ue1RwAd%O``tDv!YfD;(;5=u5;X`3OlsTjiPJvw8(rX+805D z?U=_keYu%XoQPEZ+K9u6O5UZy#3`M7i{hQ!rm*c#)kNvg?mdUD8V{yF-cw9YTf}J| zo-nx4b>*?%^|fdZM*PH_`-hY=C+MzCl1u33F;{5r;-$X9=0_*b*qEG*UMKFmDB=C> zJ>jxC^g-@Mb@x%5xPdTzN_Th0o;{yEwPo0RO%7->sVF{>T?1&2}f=bS6N8Ih{+wVAdHh%jvp(Krx=%9N9X70^gKj-ZE^g4l_ z`atb*#BqZbn(`mCS4%H#6Wpq&+kZ|N*HvY+Tsy|hE^5$TInMhy`1vjGzWUkUI-1!~ zF2zQObG^1kD+0r?Y0{k+Mzu3eDoHJI7|t#4Q>oj=hw|!cUv6OBG!*{Is!%7{&xHTB zJ}?jdGt;n;vs8>I*g}kI>pXbXMxgE6{F7Osk~fWuvYljTlxxj8DMHYHTK4F5Tc7lL zTSDY+)7fFL_@aiQr$Bhv&f5Aot6kj@y#im&>-c&W%ZT#$#}Iui9%6mT0u?HPDZ&d0 zkrxFE<52pD_gC#h+tbR&awv~SqN}LB_Dn6g4<7_@cw$(ImK$5#JH!p*)gQty+3obN z(rwSb(PK_w=9R=`!*Zh#cm>W!%4ErxBXn0^MWkA9KmXG3C1t}W@aoKM*TsIf&m}^j zh}!1W;k+C}vy2kcNUi46wJ(hgFE#6EveIJN1G%BKsIeG%?O7?2+|G3|s-CfL?27El zte6XU%r+d=9FZa13 zjJm!s{c^=Zlh|!WDHLvqs^u<46ySVbOHQT06cb`O?Z%(z^aWoJM>)O=(Q5j#8u_3n zZTtuH74<4%d$N0>)Y?q6+=G2 zd@329!`2Q#|5Dcf6wbW^>@_;z;Ec}sRmSYqEy4?wynKGY*@6A@7at7pJqwhiKhYj! znKNFWTs&csrlMrlVw~3?YPBh#{Gw;pmKYku$(m>~>$kG}G5$WzAW+Fte#QRg@NmbE z(2*FbD-gN?7|xF0h-lf^x^sacYA$p}33E37yB3^J;vn!v3+L5g#6;%^=KUF@XY+TU zwH)J>!G9^|BBA$}>nqoiya}C5_g-AeV=6!YFg*^(WY+pvA%H>kqVT*^6bR?Y6NhiA zm>+Mko#e$1-<^f zwfk?y-S&U*8_$0TJtCh1e&b5u;DL;&tDX`~Uh<`ka}4~~?x7w_Z%E?&3CgDGXK*pQ znI)95W2J=i#bxwaod@78SSgOdeAc4DGG!I7JZTy~V9iL#*Q;S$XI}{WeT%2q$Nl(Z zG>j&G6&<1ZU-*XYU-)M2zvG*#fUueBFmP|kc^!@W@$2YN-b7Ox`Nzqbs5vaOcXQtNZLLoGitcn4zSQxve{rJlP$8j2SE;YaB#DUMD&^pgUkP> zI}6%JU;a&Z6iXw5n{f#*n{sk7)5DD%uv|SVA?5gP-{+DIViiqB&MECBQPQ`44y4q0}{?xg@qF z2MGG;`8ZX=ZgnA%DbT2O<11S+&{Q?kgw&g?`DA{Y1Y=aj=>>po{!9}crV&jX24BMk zT2n(qB|&r7B1(*10murt9Y=Vg-U9S(J|3|sndVimO6mLG#sH;`Br@V+g3>r-G%OeJ zq|a$%*YeWDKmhmkn>qyG9A-MJMg)Fxl+b7(y_0x)3C`UB-zXjG%ti)%1JYz@UykbQ z$RVi)WuUM70YsVBK*UtHMR>P|2fe`DBE)zF?gee*@W{Zo$kYH`ms*Pa5fJ;S|B-h< z28+81i0wDe)T$JsQPvjDH($wt($eneWzIi^{adUM^Y50e5edj4@HfN0Nys6-RzJV} zjDF6BssqGzT;p!aWuhCODOF01D zT}0(yfMYTwmnaN0b`jDtOF_Mauav6+006440m}bJYIg^ucGk(LmJAP4J2k1ORsz+& zzfwB^6!}{9V+pY#uAhAtAVDyvU8#{Evv1si`flv)DL_rN9CWgca^D_n=DEBSJ8z^Y zr|*5sgpw8JOK#Mi2;1-_gz$68GJ<_vMg6OdTpEn%W82pa<}Chq>}!B#jB117RFm{-HgEcFFp<#8tUrqkZzX0>08!c) zYoTQ%qS#c#`Rgr0^Z!d6X92`)5t63MarRma8d{%>_0 zti6c`4{G{vH5>@i(Eh6U2Q}P_Oc1y6yK#TFtP}&rSb6Hfj4r+`iRK!GKxj?C-&$2H z0RWY-D%se*af}aB@6NycPv(O1KQI^B3tAh%T(apY9ZXK?d5L0BpgxSE3V_)GIULyd zi?Dxag*Bu4wg}5}D8fV2j*0-4nPx3i0f{^yKsS~YRlQqWbsVo)J$ML`tJg6;4ll8o z|HM^j5ov1gJU^?ZmF^eEFb6S$OM<@oM}*J|9XT`Bw}>YGyITytf2m97^<$j`FRsOA zX7AYB^F7$&HP#d8{mROBNqR8=F+p#6$IArmb zvTZdXzg0gJdYvA4aqqYo5S_9AZdjhR^${u^=Btw}6V`dEnU^|| z$`G3LxF_YMLS*>OHk07(dO1{=cU;y$@aWArML%1IxMeD|Eiij>LLd-$MNu7-tJ%Xh zCo9|;=+@NK^djO$j<`suxvZ$04}S0M7>74F!ujXa^sU!nc;w5T-YW}wxwDS&EiLZS zG;Hnp%6v5{uFUQdo3+>LQn%=^ZaaD=dD9^qhn~WlfjiY z7i;s2AJ^+l`On~X)jNZXIO=8D+POBc;j!EOTesu{k|5JY^R7HDv2=9Z(-j})E1`?Y zuq)FR9&@?Hq%NtMaEaMQ6Q(fD^NNt8%h5!_6ny9gt!!iUY(z|enpm-Q3)Ma~T*R9F z73ZGD9uu71UGlqjvw~_KEXJkK&RDls(bZgk{Dhsm&h?h7AZZWpf%js3&AFBM z0b*yyBM~j5rUQ9?)=7%%CCq8kGP~s%5*rRy`^58w89(a=Ebe)OsOoNm(Cl-~bC#J# zt81vxpSwkcgS(sZkgU||!cAxIjoV&NfqYOgyhQ^!G!Ii<1e)yyj?xr z;pD8w+dzU1n z9Ot?GOtACZGug1@w5FfSPC9lnTHdAb@iGT}bBzIv6}Ag&(nsosLqccIMbA4#o0_1E z#&ra%rt~UP2Ny^Se0497FSc1xQgv#Xx>TsTlQYoS?BsC0iJToxQ~SEV=$8CsKV5Yt zn4;X`IA`4A@gzXh4byFKzTps_t~Gz|Y?RN*xa)&;SeQBeQhkT&?@EljPCL^tuhW`l zmz_p!Wd2C_GWP0@I*t4mzS!nzL_Ncz+=>^z4~JRYW3eDC!cy+BgrQd*jGiaaRv)sK zu4Rj@hooxPeU}*PKVYF4&$jBKEKr5Pn`w=PP9vV-g&AuAJ&Odb=137Ce>uX zUh?jA99&jZGVQs~&NNSbWOwCvscwf6Pr+(#{={v*9gwr!n`Q52bkg97R~RlQRs?Db3E-RbHPkM`w3y1D1B5q-@)yXV?LSdD$3aCC3u1Zuj^&@SvbBFi5YDUMH z-n%G}setD-gkYFlt{g!B94)rHkVNLmAD-`hJb!nwZ*t|Q&!tn&XC~W5pJRU$vE<2KaWqrnk-Y-4mUToeM=1CcO-0#7>X%tp$ zCE~W!zH46yYeB$%$uqBDrBE*Qrd(QaQ$1&)CNw0^ym+?q?EEm5Z*s5~W%4|5jBWS!U99k+E>zDdUI%ApM+FU_NFVVby?Kc|7vmd?B(|HS(Hl?9WSb*|% ziM!tomG;3W5@9-0ESqxiaUoL2{6sxFU)3#`1hgARaozckkDpzHF3J<64_Y++!#=05 z=NoI$o<8TG{3-jB@^WLGZV$S)a_WiQB62w#9^2rZ{nN4BT*^>0-ZD=4*VQCyT;=HL z%?!^!tJLm3+(+|$I;v?lZ4Kj8J^9e>%cG)XtC=e2{-CJkaMO;|KX8SQ#L%R&!`V4E z0j5;0qmc`jpoMq+pEGi%UT@RDFm}|Bo2s#ou`;lf=ub3jP4}L--wS$uUvHCeb3Zl> zy3-cG&e5MevRml-8i_UQa+E*O7BXPRAm%D+eQ~*YRL?E8FMu5iRYo(Jw!4DLnFwA& zMov?Sj((b)j`s^hv@^UQ(hj)y-(`H1Nv3dmwa|C#>vYgpO_1i)IedHGaQc%fG5wD# zf4THcgG7H%+}M-vjowX=UQ^*sCrAC<3ut3dl(v=Z@$p)Axq?_*&SCGnCe1X4WN$lj zojj3VTSm^w-_>0$1rw%&BSp?oyFvXp2d#lEqq}`pMuiR<$CzISyZ!^p4lyyU;rhum z0oxkbMc8y_UV09p$B}NKw2Q^z`4c&z&hk9-=eI|BBJw@#b|i5sDrXDfL+`fx*BUo} zp5*SIHJm6dYnVX?FYj8uCOHe(k(um|7RJb@m-sVlH`@KtE=TTF?1yhW69y^$LH+SdI z;J7%H$o4!tYuY@^TijMJ*VEdD-AdE=I(+YJa?YYH)pd@jI3$~&5xTHHRHS+5toGJa zGvPY6gvYeNLWJ88{wG=PMNf%Kl*4spSIWDHMSJ&{?R`>4bM?o(0*%LM1o+qLh$74vO0@M>U^=m|Scb%A zbRcoBx8a!bLL6}&=UzNUy?Vdy(?rhvJj;dmM~>t2()<#s{_-oe>%4i>ow|#rMtF@N zUEL?G%=xm(posfB0x9mfy?>Rz{zSpvL|}ncbl~DaPv|^IzM1N^F+M?kG*fBKl?)00 z=h2g@1dDf`r*9XsoKedB61XYY;h?{hl@-f)dlr# zPb}9iplMW?-;)mpjZ%Wo=K6(ZY;SIkCw{^>Ile3^+_&+(A5;3d-NSn2M2r71z8}}| z#m~0({!hP6shr|(_Jth-hLdhGVyjO{@BbO9=2N38KB?w$yJ$3=%AZ7mqkpzR3HUnv zYk7Zr$nX5l&~~4&anNRuazb?T9iOcC1%x{-nv^8gG5)ULtNDll_Tcdg|K?&NNDHoy z6vRWeEsRDPc8|_N0xihLu^~cGWMV)?5^Mc}&xwsOhOdN&8dN70XiaV~=SX1VkiZck z3^ADdBef*Lmf(8Q#DDoLk3Wze>+K$U*WULBSE2wLF-$M?Qk!JS2rpT+`p2ZpxFUU; zkT=T<^}Mb1v@@4&Uw_d?zG(Ip`ssK?1F>gc$n+JOYRaX6Ku5#kZRQaVM<)*7Ke!U1 zO8{4*Fa|VILzG2a8DRF2H{%bhKwVT30lqX;3QI^xO@-y7lA0o+C{QZ$k;t4u5zC8iYX-p>Wiu0vmOvZYFN0prVVeSIJ<0 z)XESYukP7*e5^nl$;vN{T+Y1F4A$Q>Lq33GBfx&sp_39vA)wkAj{iBw2o1-_V5tLN z3#H=)trSV|oQi*AP32*jYU2ZuTLfR2M}Y|CX1!BRd&FNYg-M5MLVnz;t0*=m;gsbo z#6k8;S|}s={UJT@5t3>Eo=ll5^HVsAY_j_uPGY#v%n5wKS1vR1Ns5ixyXFE<7AG6` zc`dSF4tim?@SrSBp9=84jVkI4zRCg;QXMiL!9&Tcn*U}H&C9fsMBi`tn!6oPP!U^P z&`^Pl8@8^;fasf*n7!JeBh~Xx9L!f0_I}4h#cVA42(}`dRp%ocpue)(Mg9V6YNurI z(#W$ubO&bvs}x=qMyv``r`JiLX)E4*=vKm`CFH9exL9mEK@Gl>v?x!NL1`=gBQi!g z1mVu_Zw-+t5QTqy0pcqz$rqU5H0C)y*A2`tv{!V;KzcT!TLpIfo}`P0?1LL7m>l6w z&zwBSs3|TI-s#hWG4XOB^T=H3(88)oP*MzkBpmYOnL6yx05>@_QDS~78jH=V3cW|T z2QgC`4RKK^CgFsJDN@ZJ4!QpE!;TC!28)eHzT}67^k*6)Dyp^6*%h*wg{6FzQDijJ(5-xGsf}2Cxl>!8)Bm7h_5_| zMM4>Xeb&5#2(&|Mw0cGsY$%KeOMM{PKdlmuoh+WW9qaqGRzzedAxu%sRHOWnaK{%Q zHX4-pi2POA=u97p;FP{HNHzQszw9pUJAfZNM7S|dLkrD-pHEkPNWs$`I>>As90)&H zhd|UMgrF|1Mp4I~i-WbSOFjjI(CGV1=%Ci-IF{Xfj@Yr%y@V$Pbf6G67breZL3JJ@ zs6drX^bqqKt;UYP7bbLN5sEw{gN!oNssYCs3tjpvz+ev~R~{r9Z=UN50Xh*9qG2mB zlJH2F3jhM<#~`J)sxajc5wu6henl&?a>P)*j&z{_&O;_dPO8F?`AB={_lGLjn78+# zX@4e6aly$$k_7-FF; zWPxaps;UBs7#avn?#==opi&&>hCszk&>T68%#0o@MzYf9p|$^AJS2EJy-}ka21HLx zEDvHn>-ij;u&(C$xdGza@OLJf=sHA*WoQ=gU2y{M>BDZZwj-_ zJ1_|)IktHaxPJsCcAse!-|!pNbx;%QTTlO+4c$5M*iwSr{HX{tvJWFU1d#=qn+`V{ z&Bw-}68fGlh%hAo4Ot^HJCU&YIu}qYaiRcYCh_keXU$K`L&QCWhl8_!b!bJhCZ)uJ zlGtElHIT;U>12TU5t;k=!wUfOgMpJ$pQ-jvC}W-vcx&12DAIGkaa3!1(pg%dxot_; zcL$IkBZkmx^HVwe@a!zG*h3rt916W0<3Qp!Mlx2!8h?bwIP8^a&YtlrYix_~87BCR zu;TtI#pq3nnruII4~7naEf^64TF-+Ck)+9kFB7w!;REo)8P}5ZKr6CSWSvv_>GQz* zTvoX3|Lx0UDe^Z5xwuEbe!J!#`$L=yCAh+afgw`?RP(Pdla#Iah^1jY6Hq}G_nN7I zs{X-#Pk?D$4#L#>EeHgrz?I zwPh-xr}~#I6Oc5iZ2a9wrHCrlcrrD1U+I>nP3s$wsbh@~KMDNF_QcQ+SljH)zM-cZ zM$dM(2zixUIPkbnB7gk(TL+uW^??X5%ir|2DW4O0fY>Tbx$`$05L*pq`wC5O35=PY z4r-b{=~>xIl%xZRH!!X&=19U1XIbIW2>ZuEQ_O^zA70eqz~#~Xv-lxv3UQ}^w9}DU zn}qvhQhaSl5z1=rK8J@?6MWT~?gg}=rI~p-{N#M+8nrTFc_?%_z11Chwq9R;e+lP= zW;57fs6(ORoi{w~O^omv?KkkZl`C*%LIvv+X?Ni?=5}BLA4Am1x5|H9{%F{mIuZ9%)wkTUYtEacEr0uG zo#5%HED!H}1W&TCE>-{KJ4;>jen&xH@_}ph-MzdQ6Nl=?P4|bOf&QoaTZ^V1p5L!( zpT-aYS4{@^%c>gv@spt~Re_V^Pi>?P^UNaX-gkO1t6>6#8HW+eJB{ue_v+RCotB3ICP9dtGR$x5uO&@e;D}_=fUmTWH^I zn>8&<1X<6fVJ5EK)cz1%>U^A$uD#PmxvrO>HMA$sdvH{bE2XDuuQ>Z zDRjG|!}+3|t7i=B9pm>aGyI7P+t01dyU$$=Y=$-?9{-xmkexypNm#keH9b)~4xA&i zZiH5tXvROkjHji}nb~By`!h7H-zuOj|HJd1uqV9QGg*H#G4RZFM|wEfy<;P$Msv>a zq>rOsnQ6J*%;TP0zG80tn9bXXT~BqUHC;WJdAM99EtjcWE5I^hd_?bCXkmmXd?e?b z!}tPIZ`y=%#P)LADy7nXhy1pr+rb|~tqoO*xEWTuFdyQU_2$$|F$wuYbG7zuxQJJQ z&oO(!_*heUiC;!<{!`IzNl4n>=Iu?{;Rt3h_xcBms;ZLgo@>8d8qe0<+ts&cJWErv z{H^Z$x$tG1U-!0;;BRZVJ(t!S^7gtlTUQWBJ)KAoUT@U7m0vT}zALSY%Kc?@DNhVF zOJ1DbA=QIkZ)RWfxHYU)iSjRyEQDTn-_DDE@^mVw_uO}P?YVt@q#1wRTp{3ejC8!P z37njPC5!{3dF)MJXh0(OGh3TRj8D=~^o!=s{sY@v>yYZ}_X^Bn zhnWML>;uv2x*ubqoPQWgboTM}vTvbI*S0H8oKQw}?dv~#3kNRg1mV}md>8fJgm(2$ zl9`y7o-gyNw;wiDM4LS)ux(^FH&fT=iV-pizIYGfuF*Sh7kMIpas-}B@f z|M<}7yA59rB6i${%k;H+P*daH>U5Y}_i{y!`oV6vwWE6!3*H-lGSaCZI5TO2mT!|P z_i-ihQ&fMFhrfhALHIh{!+aI#*ZSk@LRW3F9gLCslk2PN`jC^E|Hal@hQ$>u?V?za z;O-WJyE}y7uEB#7++7DJxHGuBySqEV-Q8ty%bo1~-SeDt?)@?H^i;3v)m>fHtEc*X zn-Om;CfPHl4c|X*o^j3I>fU4l>r56P`0k&RC%-PTyY7C}tc1k4=pG{_Jfd4Qyk;Ir zM&CL#=*J#4YY$bMZ&WIBMtAGnR1CNFr~scmwX)XQ0ilbYUXQzM(KxStY(lG+q>D~k zM-Nk9G#9CvWI)aC83-+YThZ!!T-aekm^y4u|1eAnG%sCI{5SWj=7ZX z{31*za!t5#>wkCe7mVofeqMM34lOT6`7L=qW@ET+y;%*d?+u|VyFM7pK0O`IY}P1R zyeH@w1CFD&!htuR58ac%>D!uO$xq&X6F~FAqwXqR{$VU0M4Zc;mU(V;N+dKIXJ*vAaTTqRM-&aemjt)J; zBdZ3Evj0M%#6bNI-^mRQdMP9%7x2o91sC}393398tVcK{OJoKKjdIH}NAWCfH8A{F zvdkT4WkV%~qn$rt*|^fPiz?#BV42a)F-h&wH7M8*(1A1Yx?QoUNb1^s$>T(|S&57O z0q51aa_o;DS| z*E0}6IY0vNef4-e)MM%T`~0|pP9P)SNLrlR1*S;p{6~>eyMoG3tjQ9G50%ZQ3C)jx zS%UU9+zpXl5X~aD>^}Wvi~KVclqw1DrqZ9`fDC`O?e6!tyo5()W!>_WA8{2(7-PJ+ zl+FZv{*qY;(REU=OVA2m6aNT?r{h~{+SdZk#qM)ELZ{{p=Mz3>AQ+1lsOYGPuu!;s zrw71f{^o%Zx~MSdErV>zNR1s|JcM6%hi=2B%FEzu8QUPBpwpfQVKLq>Maz}%V6!Au ztg-K9c1$+V!lgMh&(C2GZ=!97c=yzDThkMNn?S$tY}*x8#1!}j_;;#P{2cAzND%OI zrmL79Nf4?GBJ|ks7#%p?bVwuR)z;^ui21)%+!g2h=t=I$X+KSiuyAO@Bjp?OM2adx z@q)-29x-S>F6r?YB@9+1cVulwQb^B&tY9<$?8pIE4P-m*T;|dt;1RWswfAEa1lN%smbSJAPk|6Y-hi>*)CE?8mrKeJD=~9cD?VcU3FOj zkqFWAAlHD^gy>%Zmx2TGR_@nmT#QO=kO@v_mCir!21a-^!tQY5jgfi-6@K{!_6-cx z%MbgGaZ&YWD%&{;pZ*G+Y$B-F`SO&ZcmPxX-7}y0rnNv*^sV+qbwnWCS~bu|{S}}W z99WgQ2rFZ!+%h{_=6E!W`axlrm1ExyoWAeBQdQU#mG zDn$^mU{F68My?vyOTRmi_^Ex@x#?7DMfue+ltzxmPQ}ihakcwtTK6E ziYR|6K(bWTx?_ZUm7{>ts*KYBj#fE7Rz`F3r~S;=kLP`gOY_ zo@9asdB*bq5Ut&=nh>`_+@&`xm`MY7?EXLyTaYOgpvF zSqc+GINV5%oaRwufu56craD`|^r{scoTqJiLQYgF&qL>iQ1UJ2G0^#*RMb(} zM^vw<`N)hCj&9E^j9GwwG_k{m$SG#SJxEq8z{27u0N$%qFi?3T0Ns1Jw`9OXcQTJ> zVxhyBh+}K-H=l+q+_0IsLDq2HT=Xu>U_cK!{YAJAo=L}qnoLA&juZ8NasNl>>~kvr zR6YCY{8slrnynNEBb@tj^`;9Hli1BB;Di<7-2Yq(_mp{Nx<0E+_;N1jw7F~}D^7Gc z?FTq}e>3Xxh1nyYN=HtNQy_%gqN9Q_Hj3x{jZUH8&yabNx5{MF@w&6Y4XB>^Yfg$H z>6Nk#f*^&?e$5xW&ClfUjt!t*D3*^m2FlD8)j}Hz{_Q*nwi-qu4{2VXE zAfGmL-0T3g2!-LG3He-6s}0u)RA*;yj0B+2cR(C+peFB9_fTSfYZyikPUOio*j=Ai zvWKfo*il`VhBXeWZa^R@xJi|8cyx+3;&U74U04?O?`p^ zRi&sZUx-W=80~7mB*xGyH=(hGBnFT z_h2?lBp086%w(W0RvuGVlp(g)WECb9%{VGdO*?{MHyj1Q=8e<&bl>6$!5)qxo6x?J z0g(?_#pntqAF$x=7H-nd$i!RMhP7BSd8AKbdlPmMQ3D|2^4ugWfsvry%%T-BU%M6 zU|v*;d-C4P#+lycjdlgl%DR6zax@0)(0N1@xn%Y~0!HyLB9~0Aii7Wqt6ip3Fg{Z+ zl{EX8r!w6wGPc&sJ~ZDG6)?8!(6qJ=T*&!11>5{o@B6;z$@SHGLyVzcOH-3tAAc$t zC$AZmG2-xVQVxqZUJAl@migq};@@zDuSAv=NF zI6x5j2jJ@}4DKHRjW`)AbR}kI5kxRo3ZDmoZ#a+G66BH|EBx`N$^XB;b$QAG_iaY0 zjA7&tX6GkAUYHi$nJ*6cOPt#Iwn~`n1$0F1<|tu`70KI=TlbJ`&fyU2w#EJ#(if$sQwUV#*Ckap^c!uN zP0KepKt9H333tr1Pe|ujRBI?X+C>&j^;Z3+P1z84i0`xGitC3@BF7Rj+p*&~2+e{Z zawdu>Y!oodfK$0d^3|L4_KG|?;_;Ja^Y#)I&k5+*mWatq7VuSN3NsV=HAF|GpEFO4>W+XQ;uy0;`~S0WYC zIPY)%s?zz;f_6Sh!7xhFu4cKZ5~66ePTg-O<<(n0id+e!&U&w@V+6#y5;xM&eJrUT zrD>j^_jghN5qN!LD*WE%1tMh`+A7xPQe$FUBq?i$B7iE9EvAU_LlSjI%_m?%yp-pI zzluB%K1T}Tf&9#t_0L_&p*{Ige74P0f*ZSK#|ns;I$}n!ZLu(u;9qB>^vI3Z;rK=f z8vU*Q0ndl-08ca>38n^UDGle46sdRqmH6B7beql%U=>+nt~?FuU(w;aSRF!$%trai+4Ib}1_}r3vl21#Nl?P*#tc z>PI#%VB)1UjH`uR8Bc|7U77sJJWt-xii$6>Wkak~X}qtherpDQP`l|-ma0wn))lkR zh$*6*NkP&K%V}kkIrZ3aG+jP1l5$?`HLjS@H?tJ#}M(Zn}oOA2` zB-Luzf7&BjG#k+hE(H85QctW}Qc1%1pkaM@UQmnln0Ifl;V!_x~c*B$%)g7Xc zDS#Xb0a4!?zt5HN;9=$PjU6DBzWpO>?zh>AMTETS_)FE15qzQRQjhZ#?9*RUCXvqq z=HwdzoW6a5)@H=l0WlMgm_-yDI9;ZSBGaUn+I*5^T<)H_)$}R@EOjS0Kx{L~`;znX z&%bO9I6pH)0=8K);8`STVTpjaU#AOMx6AP@Q)$K%u|jW@utU%7!%$;`r3xE=58JfJ z{)>B^_1qn94`%d|ekXBXd43_WSqYPw%&#o%JK8c8?}| zA`J%`>*ggb+P@)$^o^bU*kb7ZR;lm~6p42E9-0GYWba$^2N&nQ>wJ;2pMWJ0nG%L* z#^4p`a>*4#8F^}%#y1>PL`RLqduWMovgF-{ZBEM#IH_}(-N8BU5<>~+_Z}3FL@yYG zXrlZ1&wE`^NcO*u%-ElnRt}<6zTL;=kAfMtss1M<$i@ZEE0@V}>v``VGu(J*`2lo7 zsl>ycUVWl*o>E6bBJ7rKUcc3deh6V$pK@De@rU1GbfskMO{9v{!71S$t(`Uu0js1E z^#Azvn|VV*_0Gv+wSZ|l^eX*OMRpM~c?sMZ);e=UAgtt03|jE?@cSJ~R|q>qRwHYg z$$OK;KhJ$~3!lSw3r`3ol};zt)&dknT#6OUL6|*{eg>#6zTWsr$ z#B4tSR{Id^f+v;n4h3h=i1Npn7X!u8C=4U$F=cqWJM=$dg<^&~n3-lvQR5y4$4_GK zCP87bi6w<>sQWNs)7fw>!0~PAcwMF$?vn!PqM1yAu!Glk&x$#PTyvFZ4S*0LpqAKh zBrHjQxvhZQ`%qK_CyuRXg7g&f3H!?!)|z|AG{Pw>b@P`@Z`xvu@aSEO6b5}cKhv%* z#eN;$I8}x10X9ktAw9qsv+|E)tzg+UgjgCx{O`WuXX1ErbleAQ&t2R2fRO_q9M^Po zO_VD0>(V}4lTYl1d6W$BzJNx`V{A{wdJOtcpxC+yT(hrP>zD`S^BtMb>2|so$R{V;E_2hZ9m3r!f3MtzZ8?xLR zWZfCF%>@f_m1$EPunuwSqyFYbj=)a!jGU%t*w%NoP>q1j^}OF2XaKvSp*{g>qdSlj zWDPeO12ohozYdkI_EP6($_^Jr85NtixOI>>fosOA5{Ql%MT{~ujSGHyr=$0@%(OFb zIa&AKH`G60JROgn>1xRAkN%GR;ROvWS^i-Wb_;>C$?nese&2NpZkk;58ClHCo=*9G z*lFF0HU1*p=uMcSz77bPxkim??Urrenl`UF%m0QO)kIK9%nKM3$HLUc3EA(t{r^2`ONE_t&}KG(KkbEF?zu zII76l(kkRCdv0Lk1E$0sZ&abP)B)SE_DZGY#yV^!so0Wi1bx^c%dH-f^zn%Bl=k!j zg;wtn`Us)7v?$A1cM!Tctxp>j@rxS8qEVaMJI!IGF-dc?emNZfa0PN5W20}Rh;{jF zHU2u8~WLW9#{{Pd*lUTGl~i^H^o>v12{QNfK;F6V$Hop2q) z`4UBclU|HmNW`4(ZF)@;7&4t4LJB-;pF32hqY+p=m;_b0F;z8f9U%y7wY?l$<$N_D zCROME7|lPP4d@?2ry0O}*L%Jwrx70wT`w;pwQZ(*gU-)vt>iwQDFnVUKRf7#9_f69r+X67Ovm6RBF zP)5P8fXA86kHW170!!aC4fq7p0rd(jvBdg@COmUb!0G*4Sp{9s{B)LQ!Y#MBzXrq4 z!aUB8cEMzT<=+_|8&e%%PL4;%KDJ!mHS!e6%ajLB#gc3A-&;3v=a2326My}i zSkp1)Xv{ZQq4Aru7BhOzf>1Wrp+$ zHfEvWd(!~O=Hz|+|5Dp>)1xOsLvjNrn9vCTt8X6=u+W-|+Of>ZIEe7E+t9_Kow%2) z?d5@huI!TOlG95vvygyczmQ`?w>zEGxYW3tUt*>>?}2+q%~^l7Z$+&-lke<5Ztg&% z$eb}-Rdy0L*&grS;VvbDq1qS(ct_o1h2+ntE$hLNHQtZgsX<8vp>#n}puJ{Jx| zB~uIPq#dY+BVEAcPdlXhM?g}AErFL_!ME!(pg%J@Civ`b5;M9fq#5v)8Qlbu8fd_R z&IHi+?O*ToK<4AQN+`K=&I`%1nu7fjaLl;)`de-qCe4FXS)^cj%?Bn;Cg#5VckN%o zvUSNEi+lH~b_lE_kAo`;rG~>pB$)8UL+zG`9xN}XT0D3x8-JA6m~V5*Z8OQ?MaZID zXy#xNZ^bQ94vq`WqxarWL{G($D~dnP8MuH)bn{gmhevcdwj*7u$H{y+A#wdnRH1Ub zBS#t7yzA1%*UZhe?GEp*h;1D*NHfE4N(;rhfsi5^U{Xx9#QTk5^KVMrPy1Io5LT@s zG@UwV^T_!5++-z$+AQ8dk0pdZqj6wdjLk!U*N`s8t{VY4wgb~#&;f0=xc$mcer2dNT8LeB1Ib4U?=?hyhJJHwGz)^Pl5f`VHNARuICp z(dHTbe-VP;O9_O)B!!F%pP&QQlSq)Oci2zWv(rC`Y!K+MPEh9CGH%)vsX-PL8hq1a zYYE|kg|g8(PClbCkI-O|6P0Kn-)kuld!mI5I?b7&2kI@F&`ULHB-2wS(0J z2h|xeC8c0yTee11MbxBpenQyen{*^*gfxs~kcxZa{?)IW7BrHpStYs{xt!2UR&vG| z?l&dyS1Suz2;@)FL`FlHbM=b-2~R!^lL3AV7G8h=Z9a;{oekVWx%P+wfHriLZaYRu z2~b5H@-(^uM@FU-xWjHPLXO~Bz^LE2hyiV-4bEHIP?1#02JX=i`OlGkV1XTVME@py zoJUv~8+HcUZw4GhT3iB>elyo5lR9V(!8q-POe|^4H7$mSECl17@yPIzhx81#DTt9F z>7T(zeQX&^2@j$2cZvXIJG@Ylhw1J)uW0*SgLueJ{xja=gV#j=T13+Z?n#s=Lih&C z7M3)m>>XcAwu(>RLBtr`a*+Q%n#oMb2&N}%aNrqvq}EwJ!6U=<2XT@?!hf|*feH!< zES(C-VVY~j{|T3CXy1EFghr6XPYu4Krz?ZVFF|0y?_|J{-=AxeS}m~I49?;R^?Nzz zYvk0U?b!EglQp0jHxa=F;d~*o6;a~q+j*>{{BG_ZV$OpC-qkHI6Hx*h%-R#7e@8_4 zYYes_)~HJz*`PnyqYL&#&J1X2Cg3ul`GiLbuGDzQ-uA73*jD6MIi&d2@FAJVB$(gU z69e#>09O98xR9`Ge5Y0X=s+bf@VCXc?SH8bM&JH4_3ebTU2BzWjM0lfAt}g({L6I+ z8yp!DdtzYuCczhihbDy>viJKMpPdU1d{@NOCYp%eIG(N{dt^#*DwU?vLDRq8BMss# z_{5H)8ovjDa~*m|#%lE7pn?gDAhKBrtr`JjhQBL5>T|*Mv<9@Jp@kv_62arcbcQhQ zAazKfUGX1dkWde~$BtEF90s%M{YnE{Swt(|sE)vG&#aIRxK2W&ViVY&CbI&kX!_yJ zzE}?llu4*ieK(uPx8+57VxXc~56H0&=tH*hpEk-P$rrg!-OrCIK#D^`1JDS7=h0*# z7P$SbF2B>acE>1cPbhmhg|3OvNh_yfc8Rl+-xKus+eUe(c){Qnhw) zj&(>cvZ~({OPQsK35IhrTacM1BKQLdY=q5Vt&QKzN_#{@Xup|hMsl;U;qxVAq@s(M z93w^0hHQ=e!N-{^|0MF$yDo0r)Dfa|Wn{$U7`#yy8Hq%G;V0-0O-5J|uZ7sg1;0*L zFv?U3uziX`N|&x;)kJf?Ky&9HGhZVIyM;DlC`H%;WF!}kH;Ir*yi*JYDTshzopwx& z*i+>0IK%pL%@<9y`TH({QeCKPk=cgcfRU*ZjHnkz!X&7G z;&tbi49Q!5Q*4`TI_+8}I*N#kks(uc=S=lvCFAgT2&qV!rs1`pMb>nqg0({?GzGB1 zx(wN+`M@U0mk$W6C!^6Zugwiv?^lEO!0c@z$C)u#Gq?+=Q76%{BNobc-Q; z$KWK1eur%~zi&IRFdkt_Ery@3@fE7Tk*Q6r@DN30zL4NwLy(f{IU}~&)odlGntRMB zF)#kjacpyT@Hm;K{F}N->+Nx|v~_N&r6ylZK6{4<4Xt(qzL}L6yZ?nsPl5{8Sz}gi z`o0rF+hg{ruN())lpf3W7%E#?>o>Tqgjlv<=OSUc;7D|>Wl^ET2!Gl{5G7~pKP_`M z2rk3VT+G<9QL(b4b5{S!u~@v^VEu_1JhrA#Xf*4q z5rnV?fX&rN#B4A$jTJYOH*5tgxLVdF`zliQ4|T1Oy^?D!WTAf{h(QpnDtOx6qu-&1 z0CF}yF0NErfuzNVC;D^t&FNr3!3|AdT$~}>_>_ln(;|)6S$muZAu39ZzyWPDEX~3vK{0~6haT~$5HF<|4#3v5^!h2+e0G?;|%#LoI0xK zj6wQu`2ga@+SItSF4H#cjxbCBHS6+{peulY4`_q5>$RWsuM|aBcgDv?OP`ukcsK9Ck-LrB!49CJI_4ySlgXGp1zh>y9Xgz=$5kj5nsCx^4d*s zo85B~Zx1h4etG~O+$x@LTUQ2hNJYv`99lA?3P-mRy?FpabrRq3TY)9-WWa`KhGxmq z0_nLV4%8CzS&;NNr74zY*0{PO^W(^^=9qf^d6$AuyzPt4ET~E_{mnxLv)DJbSpDE` z1AeVuBnbR|cd&~FnqWgVVA2-{p z^wN>`s93hud)w#eaTw8<2VmPFkllZ`*0>;}FZxM?>A*lvrknyZGNE*OYM0GpE*yDsg@gmi5ogP1bQKH?1*21<(iT#KN{xE9s% z^EiMit105A>99w01?SXYZRFL#@H8FQzi@`$_5%s=O+m>9$g$%4BrHh4!eI1y4kLZ zSA_HYc>~wVcgUaRFZ&$QzzJ}{(RmP*rMq^=;b*a%Re#XUxAuRKT`BjK@l>Bw-o0UP z1zV9iTxs)ZgZ;uq$JtUN?KIrY`eh}XAZ+u?^GhyVH9_OF&vJ0a?Jdk?ssiYT3N65w z$a>*WzJuSKi54W@K`%Z!{G`?>*5+?90)8qOWIFQxA*vtbYb$ymG=to^0r|gvo)vOY zE4_V!*q8;@X0NFUN~|FPHd8NcyRM2J=r)t`_TlD!WIn{7Z2ETvpPc^MwEcL8y%^)= zx_c0CA9c19-Rg685w&ycd50zDG2Z&K2HF;%>kNGFDDqwWUiGlRImB1+XTK?^0>bxk z3Gn{j3{WX;coIrVT~Eb#RPmFutmU}y3`fUd$p!z~R$>yhXefH8H8~R_bxAclt93Bs1KRuZfo2M$@1hNpRBU5o; zSGn5Pk>JTmri3x|-)>0snaO zjWp&f-CLB_jc4lOA1ZWl>MoSL9RCt#ZYq_XW&gMUeb%>40A!_*0c-9yeDb{$yaQZ^ zURSGZPl)Wy7?j^bSLoYEug0%fG3`?YpNYhZ$6aO>FNK~eY^x_)u-DXFb1vDDxUZxV z&w74t4QgUMklWlxJ`Ib;UrY3<++CBRj(%UcRjVP_c%1WE&!68OuFKwnX|1FEAOl{= zY|0-`{&7>`1Pr=4at^!Qy3C#sG$WMV&&}yJODZ~@>trpu$3|dX>J`XFX_pl}D^!7B zU5$DRC7!3h0Cubo>hVU5ICOi)GhH&D>8i$~{}iHDo_ySl7rpcfMV9K_?Un@zsJ+w@ z%M1J}d*CSx3>)8Y)v=`3|sTP11kB%^07X7uwx_Nczl#`!d?+*U&Nd=uQG85J&Y zPwk4^q|D1CE^*pTY#%}v<4k0iasj14x%DYSrs})6hj;XPijYiLbbG|GpQ^3xNa~Dn z5B`4KsMcXK3eSN954meMDo>IcT!u^qv;yTOpikgOCQen`iJvOxfd{qTS|#0D8`wzn z;WAFg|8heX-|5{)EcnRuXfXjP|77R`*C3BJxlGGTtZ1JDZJLC>J~t=C#GoOvd)CV{ zE;Nt*ceN65GuV zCCwhXUgD68*d)Bw4Az`&yqI!l=iMX~W$THAm5yIn6w};zcS_okJK;9#9PyTw@O5{D zvM^WD5|+kLxIH%n_ohoeI9e*HjoJfD39eqAEY7k7_O%qc#TWr3sDBqWQEqkXGA1(% z_MjW93Y1AQ_@47Ky}fl6v&YqMnWjz8jcLnpHd)g`K`gY@1L0`9%}7Yod# ziy11W81ndG!AokHB*~-d<3b6>1+d8KK%=)+XO+WQY5IF-S__lK`vZN<`GH@J7%6L) z`JNrx3h6(aO|qW8((!<71~Q4FTLBc?w+ne4jueeX>NDRt`14{o_vi1U%ckq*r{uD^ zTgO1yh5VQ68yaSWD($Crl^Ngq$L66)9=YF}ALh9Mo^P*P*}l&wJ8x$v>3^9Hc9uYj z)h+H8dny}zDrX8@9=lrEA628a!#VL+u1IvPAMNy&W4%lCr2;A@AF?zr(}3TRik2uB zr_&KUwC!QK3n@gVM=an4O`_Tro|;jou~OK=;c{hLr~RTlxIo@xGi=G#E~%8MZDo3i zANC%5En0*(b2BgloMfo*RE*&LiR#+YsOt8Jb@tpZ8MP3(@(-P|W)|BKU&Qb9(xPG3 zOf@D&;AwF~d_nry@UZMN!2XbX;{9#_aYAw*m%9^qwck0CwR`tW3)*cf#&?pIAvt`! zeGffZy#YlMvI1M*#&ti2rG>MP)KUt%W*LO1JtG9BXlqeHM*_{`lV0pNf1Y1(T8FsKYhw*(jfDwKSOVPGuU4&`t$l*cYC9p3IkO%vA8&e2Vj#FQGa2F9PuSg`P? z!cV#3hCSUQ>P`>k-TJE@y>S5gL7`vW0hC0RJM;4p{&-_erpu~thKo^6w8$PKem}CF zD{1b~Ec4iTLUj^JKQv8o)6Y4ooAQl?eyeaj(8|d-0_P?@tc4$xQVef_w3!|rfAZOM zDsmS0CMVhQOlO`JZ=HBvaDBWn59@tZZeA2eFNXwh{2w4tKi8u7hvIyytB=i~^KN}1 zBOw`Nxf*(mI_n^y_0Id{DJ?@yz;DL%AWx9? zGCSVVNdC|W$doDN4Q>Y&&rMTek|_J^yRyGZhfI8OpxuWUu>maO_SNjc!>V{4k9hC-dY=7f8PVnK_jGz zk9HFszoF&3xF!3lZw>hJ1@kQ|Cqh2u8Bo`heY);`kDd>5%1G_78pb&LnQmC%Qde=a z5a3HIRh6moN(1s;su2D88NgeY79|cvAMqK#t*;EHM>0Z%EOR2Kq%wgyP+anpEWP=N z+1u8}!*Fz17}1VSBWnTe*R%9sUbITNIeh!3K`_4uBpjmgh^m82;393B`a|T0)QrMP zG0zLFxbP=cqw+#oIaWE|V*HC2NKaTNh^~zIOv_v7j0vnWm8J;M8o-&vy(^wvD^1H9 zV_%PWyRT65`m5Ft3Nthf>kMP7v3(ooW>fmI*kY51?;8#%a4V#feoj2I+HG>=MaX5} zH*U!1{n}}9`QaL6_kVxwMs|^ODdCqRC)ZGtFz2Z~FSN!DB@1cm=bMLcYZu3BF<+WK z+G4u^{Yp#K&HKyN7y@9`9KSeTCNZ+o)GcVsmllnL&|rlk>d?{6D%sh{abYV;`oT(< z)K>Q05`~p+K|Ul>noc5^z;Am!GTb-7C=y}_50U`|)&bsigGIt%OuTo)7LAH&^&Zs3 zIlx}PDVI7M6D?HDO0@P(eI~6F!cDi)-%s>x&|LmkU>O8r6*K^;rI2NxH}Ol{?)Dg0 z5Ag!zB}uOozL_v6EW-8O`-8C?%mOW#i)_svj?bY=o-ga5rh2fO zI_?eH8>NyNH2pQ}JG4Ap!~wG3#5ub3eRFjef63k=GzPU_zq&cF z@xIE)x6o3}9|N9$3kt+XN8|my1YG&P#Z(FfOOYD682$E{V;TVCrst7N`G>@sF^L`q{iNaBHSF3$hnO`av#B)w0&CEkhM0`?9 zxWJUk|BeBQUcFQbUU1@mV!sriPB5S>vmH z++!Tln>9IfOZ?KcY+km%$;p3GISS7!kt=(jccz8ko?ovDdvB6$3KR=oo?iX$si`{6 zMnPA{C$G?6$)-~Wcvhs`zz7eaMevzpfu(W4+*@~&m5VULQHPm?J<-YQy9yKI@WdB( z2EGj3R)8&&oqDTp^3452j-sW7+lKH=VVJ^1Js?dM_Fm^+T+WWlL^*JBjq??I!ooCn z-Scvl&-;-g3XYij$UD9>BAKd>9GC3|jHrG30`(3=??#(a6=2`qRMN;uo}DjMDXtNh zwKSck9w>z?lor!Gg$0vI=Z2_9NbT=LKeE%k01!OYAK-n-GeS(ckXqdV3p8F`xj0u@#ygEbX64C%6Mn_KcemHC@z{X&&F{6H-XejxBy~!X z!n_16H^KZ{A=G6I$ci|~+CmIq6hxA@Q*F85)!nZwqzh(7S@NuHU7@v-F#gh5mf~mTd0db7d1RhKhtj4g z#&1BW$WdPjk?!cMMnU4@Hsl4P4ZnmJxnAs_lwVfw_u3$@9&|aF7W2h!=Bv7w4kZ`n zV^q?`6223*f?O=R5bvJTvWt3W0dEakGfJS8iBmD@?b>JQ$E(uk+Pj}mpo${1IZGrH z$kG_M&T+euVuy~6+b@{xT8a^F zpIbRbKjN)+$^`9B2)Gvud|1Oo0;{8K^}T^Zgt z=ot&2wR-P%rC(d*JAYIg z3q!%Y5zij%Gjv>Vj){TbacG64SM0+mI%X!}wOBrA7dZO`UD-frSIQ??bSgs3n)Kmq zV~NN>UVki>jW-X#RgM|+yj69;ak-?i+etN1@18wj;)n!rwZ1@nX2H&u*u>Ri#ex+` z`c{8a*dRutyf3&N{`eaaQRE8?&YfxpoEO#=#i!vVNX1$?R;EJoISBDh=qmRZ9+OTf z7{!a1b`Xixi;=q`)y!{amtEtIYS6tLp!E;_TQo=)rgKpk?%y#Ck?)+2!Bu zbBl%d-nw@>;$QsgU5&{cakCS3+c{e?@U##Xb0f&GbVYi&Ro&|`nR28=Qnlm$lB#_! zoLSL0-{m>Ik-UxDN8GFrZM#+%TiB32F_8qx$X*SYq7K&Z-6Vf(gRCY$C`|rgloOZ1 z4R*{3WmQQC72p?=Mu}JkEbhj9BOB`hTTjFWnVfFJ*-@sIsbg$WD;2iYdV06I1k-^e zaaH8m+B@CHGQL;kjo_?=m1EM|+d4uNU8z6*^0Zs8%%2;wfY}^Qo_xbJhxmyc+8hx> zAwZ9m_owO(T*Gf(%1Bx*yaKi|&n<%2Km!2#I z|2wSp#8xjV%Otn^y4r%Tcx!V})^NT83XhWNiw?xHZrXI5d4o&qr%z|iTW>r3nx`FA z>_tt z5E3~0V@KY#oe_GJ?NmWHc=wVvEyqqMxiQ@PozR7JoXN_3st(1qv-^JD%jP1ZrXm%8 zDTYVXNyL)NC}+nmRSuI| zc8GOOs<6uu^d%jth382U>Te@1h^jhBhaD;@7?MC=I>H{3BxG8Ed>E`Wfg7y?=i_X- zm>4S|gvN?ri{^jh=jBR{)ywxf@+8`DtG}HqIkX@tF6%{ZA!8rdDhjQoz=nxDX57ue z8i9cx5yz)>i4abFQ$5UZEA=V?c5({-m)%d3HwGq0(URXu^;l3mMoSKNKIJzAxvf*6 z+cj}|<*C980d58HrcuW|aM8LlR8r)|pydprWmkG+aU^43a%W|-6ya5y(@J@@PCvEW zo{p&x(p6mlE=u||2qTb>4+Zj!rJcYXg$TJ0XF+BPR|c(<@tPKVqx&T7)u|m8|{+nY|f8eTbDVrY%M2Iw<<|68!M}L=&YxoXp>#X=*y zOAq#AaPF~%=NYdV2=DlH0OlD1$;C8*uW8d3yUW34n3I^V;Rw)|qfbhnC&BiggT+*N zzNYo@gOUcazRCzoad5z4M6J@N0br0{)jZg%D=?5nq&R}eXV75(^B^=l{m#n%V-nza zZKFSI>Q%P(fWq(LsuPV|;r?}a+ds;sna|yR-NBpgHNkrS0JYFP?d@i@cA>F@$-2&! zL2>0n()F%fNVdg=3=qd9sSqtvxU2d8vI~#g0AxIL-MHjb>|=rB&*_#^noO z2e0d!v&&@qGNiY14Z7w6)Ds@R!?N;u2nP4C0)C_2dF@MC)=Y)Z7u|>r-_bSW;YWuv zE?21X<>0UXp0~+ew`&5IqbO}-hzb68;jj%6urSbLYu)A?M!j|~u5yEw>FMV>yI|#PHYi$HJ|UQ9X>7hl&F6QvuAXDrL>Fw zx!rr~S^;$}-m75n1998DO3JE`l<<_$CeJG;nrFlhwwtg764}mGqfI3M9%k0YQbOx2W z#U^_1t+)3W@c(x}L$BeQ%~RnPJJa&5>Z*;2X~*G;4Q$;js22w(xE2XL>uzmq=%~}T zj^osyrmKgL5c&!o8+P{46ESx!dQFD{0a&VMM}wUZ)Z;D(je35vOdeH6*h7Tu#p*a% znAefN;JtaV=a~N>0FcPh4GDCy__HB!{&(L6%~+Opuua&F@PmeqshWv%leE&oH#1$S z&yCThcl2gnu%Ofl(L1bM5qn-QBHW<1cdlNqtBRHdk6ocqO zBxI?n%F)jPN!f?+p73n&7$MO^cw`;O1@xVtH1Yblu5R49?vzcOI zQviAB&fOHiVuX0m4^~!@V;D@2d^$w<}Yh3~fH5P=MfcziRWZt!Y#{ci&}=8?f|~+)yHd`>ozo`W9;4YC-$sWj-O{$TRVz|JqbWhFQT**`n|5o0$p5D&9mwz zE8zu%5&SKtTKdENE>o zdV9IMc1pgYdsUMtUR+W5kQ{Ef=sRh6NmYmhcAj)GI|a0c<`XwRCiH<|IjmH8Hesi( z4~_jmL*F|}eF^L(EMhtGqXja#OR^{U)HK|8aDN=?xea^3CGpZK8Bu0UNc+FIs8I&@ z(9y!c(uMQDwA<3r0tT>>u#C7rpZ(i2Q&1V{9YM4;_5=|l@=qU7ABn96ufDbM=5e;U zN}nfZguSJBT}fd~I?-E1JQeOx4nR`tn16I69@?aXU=MuKy(GWzbRW*$MZ?(pQn{Q+ ziG2~K-Chr`0x#wrB@B|-p`ca8i2{CdC$SrakKxz;+gAg)zIPU+kHl=fng${QeDxf!+1<|?HdJ2mL`TTU6kv)D6XWfADvyqOy-wH^ zjj?6KbV83lgMl#%3T=DnukdGPA-<}!2YcN5ftAOL8YB@xK~w%$IgwGg49b6$gLMNE zh#X_HwG@*cy?o9_MK;SHOa;fPQy8?%tvbgL7WG>u?K%~I`S$u)XtzK3_R>mok&p5?6_S~wk-22Vz34+c_~>bcf)-G;EpgAzUFCf`QVvOmI$>KyRrF+E6^ z4j~Dtx&Kysot|}f{9Wq4{QEq&@eBmaE&Y|0_;CC-h5vhuCr>_DRp0}OTKhw=QX?XsT$J5rZH_Rm{T=2|_k zE3o~DoW8+AuiQ)>LT8eoJWS=%U{f1IIU}CBCUipW*^<5|RwmfuKQEo4Aj0q(+ zrbSD+g6hV%#%t?~9Z8R_9tZ%Xe1Jt`)bUy;i{&@lgXaa+l?-5v&6Q4;+gZrVl!NL~ z!W6&{B-#3C>VX&wNL?SEl58af+N4&C4}lJJ^*A>czkpn)?nq zFMGV!WgnUl&<`J5e0e8K00>f1`;Idsi_i7!X98WPBUhg9obIeHQOCOvkJ!h3(-PS4 zXFE)do})&)NfMqr1s4bB*YXLVi%lE&W^RHqT#LNtCT)^hzSJTz* zsov2UZ><2h=e-!i21QWVL0tPY)W9un_tF?BeUxa65s5eL_~CJ248)Y^s%5oPZ9M|N zHYB94^+id$s-J=1oeA)g=+XE8(DjyKb;SI;ZgF=j?ogn(JCx!@OK~Vx+#L!`@#0co z;aZ@$yA^k*xVsd0KSSSl?|uIJT;~gOt(lccGWjLs$(lU3wnvQ@OS6NH48mQqmJ)Ho z=-2mm(Y9AG-s{#%g0{9}PAv~YZHaHyAdAI`Ss@TXJ|&n7Hlt{ z>-e;l?Xgygd27|_r$4S+#B+<9@c0S~FX$EJkuWS=CT7H!F>OinlB@f+$R^UMYmI8DlX5 zcVFDtDRJ)30`-u43Oe|UYU-4)R<t$d_I(goG&n_f};`Ia%ByPWfhfarUCacp_|=VeHoqw0_|=pwhe; zW5mR(cM*sFn9^}Ul{Ih}=Bq%CjiKto_rr+AHY&AwI)efm=%c`p@K33~f+%{^9Ayh^ zO#I$euVzi~aKxa6A|*sfqN}qop)nbJY)~=iXN9_U`@}`pZj`tQvER^b@BT8UiS&}k z12#PXZ6oinu@EoNj@mvQnz8{L9V;Ntt8e0z(`0=6y3M!oQHtD8oN$Pi_Ld|{D}0O5 zT2iE!nrfICmZ=XSrqoc(R*XP<3;VX8e)TCKtcOMu^~WZTZ7NfJ{r`G|w_W`i-@F)X zg?{|zOVi3gFY4bZQD20j#{7Zd%pq*wMeAdlx+5VJRN#=l^79r@4D(wj;eQt~kvPcH zgsfytMHX1=qTz0^-mMm99#e%b9)^66Jg;_ys~M~O`>}*z_>X~E3Qd;%7FaJkuwLUP zsl7C~^z3g&agZxTS&%-m-9GV=(#g926<=4lt5zu`la`f@$8E_ul_Iw~J$s!y;!%km@HrV4U z3PVmWLa}l7=8O3GEj7?#(olmivoI2xehwR6`5R|oQzrJV=NyZG%xa*N|Dm(k{3?7y zchH{>HbqcLX^hNH)+fs;N`Bud5`iopRYf%w4M*FBV$dJYD1=wpjbc!On2TpETXOI% z)S*uGEI_Y3=L`E*F#6k9?XYbcP3s?|GWCw7tLq>@+WR}*hLF0Fha_vpZ)!3Gp-PnN z@ljs%W*!6{9Mv7QsbzCchM#v8c%74yuO;x++}y1LkK8w@(`GEZroE3xxbv^hRcqIr z5ZXTA3M)~JJM|G1t#^d_Z`^NCHI}Z2Jv71VgaJQl`X_>>``w*~;Cl;fjl(?Xeug`- zprfV_YRIGUtWIEtrOwS8$PXZxxgec7(Fn|OwOhzKcSUkF-V6O?P=pL;+%+b%Q6#;A zP{Hs(><&J^#-iCmRU#c=_F@_SYzTZQ-i4#yU_^*&@FFX8_LbX$ToEPk1X}ca{!unE zTmm9vf4?^l5=!OtL?aN!xSos^SnfRg#t6U8QeBQvQkjZS@4I2!$(-<+RDZ78Je%6$ z*Tq5y*3KcGibOhGd+E%l#{gK-hM3l zcHjIa`G-M;LZ15CK!ab{3RToK=q7pY?oJDo?FMVG6ksmnQ0mhvs+ zfBN+o4MzCDKa{73quHb8dq8G$R4b}RC?r4sN=CQ88R^iWouJh7ZKTYHAH%!5%TNtK zG7Gzn<-|0aSvGW8wd$(smNFBnPe9%wa)Whl{7-+Q2uGP3_1H+ECI5ghe4Kr%8uJRJ zOjRbhw>7H2TgF2Eg^V_XF29ETsSctOd3HZv)MRe+`hEW3e<~vfkx8&JlCaeY=Ti}k z64K{Vy1p%yoxD?AK!;e{n**mX%p<|OH~QE_QAORhhA_+aX5xujnS8a=@`D=Ntf*2R zVMHA*Lf;pYTF`Rf!p!hDAOd0*d*sD!hBB2jQJB~2>&2G8@UeU~sHp7c9J@VP zK^P{rydlRZs_NU8i{6zvqeL4ei!*TF=#_XN%2#AK1jV3r2Y zyYg0iW?w)fo7SFzH<1Tw43>xzQu2NfhT%A|-rpOW>_((F(SAG|VYI^l?5On04BF5M z*|e+r4)2|?-`2{GW0$5P*zeRS_ldm!;Xt;-?9qKas$+-iPK#_EUq_;YQ|-`WlTz2H zd+ChXFyM-8OR&SRQ{!mP7PNrxnZS)b@pj7IJRg{t5a)CF+gkRy!zt!CiXDEKlyt4N z-R**;FTTYOpL@-&Br*spEFC1t2AL{S_G& zo%Zvw-syrB=%ud4YJZeAtdzCt?DxP?8pty7{zbPTJi>a0T%k3Q4@HA@CrF9!pemxo{r4@1L^6-fh3f+dfdb1v$)Z*U|9%!{b_jn$97Xg%uM8_s=^f&q%yb|CQ^JsOeKHOL-3%01s%ak|G2W8_?B zk8BMEf00V@p_zug&i&%Jepb41cX@W?Y{{E0KBGP#e7VT|(a%evd`8#J%W}gZH+?=Qx~7KHJA?je)fJN-I!hH3q;3e0(4t$D9I^+aaCdW>WI8_xO90)Ju?mlx5l$3FzoS z>J$g8x&=LN(}do*d??UdBIt7LP{j+=mMmY#t248E9yF=r(R^#~c3I0Qw&XHV@QU{` z`$pFTYqp^KbjL=p1lhzB>Agqg`$-SbR5d=AW|ddfzwpF!@y78iQ;6#MPJLR%M5)ZyPEFR%9d}pxxP3vJ`cUC z;-+dm&oe>IUQRuX&WHks2udiI$@6aTBEZAL>16(3&WDor^Y&z@()+Fp?4;?Sw)0|H z9Dw#IG8_kJ4-#eFSzRM-wj10zF3{Z_$USTAWYFWBm#P&egRG!vi6r-8|I-ZBoX-6jeTA;b^i( zYW4>6qk$8+Gs@T+CfQDL68^~%hHa%8>xa+1D7%3?DkR$$)Cg?<<87~0ohaf4tiY8^ zrVA2-uUgGGny+P|hmBxh#qr_sWuk*CgnkeRw$riR-rg2Axg^PxTTL4aVq9f1hX_z% z^c$rag)lE5Jhiev9n9q|OBZ8sg)Ys4vbfd z0VPvPI^>VZa*7Pqk8O5tqQ_4S=c9EodHC-RZ0zti)T}}8NW-tsAT-x?WqB6&>iK5$ zC^9G^ZvcI!J~iz4kE6=dxn1V%rdcNLP$g&c z5+2OB9M*SOql>9ptS>~|o~Lx#zI_%KkPKK>Rsi0F7-}*-cvs%v!j2sg_QQQ&;wFA} zr?Y0!!jBb00mnXQs7aNNi|G&OljByiQsKXg#_nr9!uyI$T)v)Z)lm^?Vq*xf(&TfoSKuE4ZENlc7m5+kn;5a8G50^xhTj$M|A)hS|`;VcRMyq zXC4#1lLJIlgGR|EF}C2XtZX~XG=pqyD3N7+ZAoR_(U`_;)InF=x?KIh2Hf3R%MOPz z*y!|}Z)&@)vxuYJ`*5&(LoV%;v=zR5OUPWwd>9f9Z$R+J7` z2rLi|Hdr^D)e)IFv0t{95(AQx_;@kIa*&?^DENr_Ica)D} zWA<#!ZxEfeM)Xig{es#hxA-x+gxvbUYCpK)R(;Q06aMgG)O{QSK3RwsrW#0C>&49R zOYIH_dhz}?k^`NoVVUW;bj2xB#!hUkWD$wdDUo`8g`veSK#yB%y1)$?08xABh8(oT zH6^ssk$(s7WmVuqhsQ_M13ljplDm>Yw%!F52?BYB=8YbWA+}%7?+}@A8R+*|Ozf0q z#gTLqY)Hb!3J7a_vvSbwEO4M-umUFw_^g70P#Sl&tR=SMu|0$6OhL!rdofkKxx|2U zNjjOI#!P8JD*X95QpATOA^mr{J0 z$0B_Z=E&@rUZ5T@Lnep$MF42Wpt52u z&{TU?5!qNA+;IBq0p2mFW$PuvTS81&Vy@yG#0Tss%=mGxkq{lX3&`2We`)2>eL^rn zX)I&}34Z_lqhEi*AxsKS-SS&SvJxM06mQ3aZN!5km|p)ZrQs}-2BgF3_r4L~GMgi$qKtix70V-r{NO>nqRA)wMPay-o6at8;pMi)H^w_Szpw;wHi` z*`t)55m6TbIvw=Chk*hK0_dvFB|!=t|y=`TiYf5I&@;;RD0Z6ygXL8=0A-0k$99=f>FPn~K-`MI~P= z6EuEhBH}m34u#l^^3$V1&xQJdop0pz3Z35-Bx{sk6p$PqP}Y&X0w|R29bO^x8=F+x zli&#(o9rt`qj#N4FJNAT6NXEQQ(@xjrry3AwG?ZY%pd0zAPWMWpdGQ3bRR@8dDe^` zz*8czpw+WB?u*Mdx2Ng^Ayf+lP=F82v@7uz%R zgRR79{RckuY%B`lu<#Gyhr*ZZ8$_V_b;>NDhHNE1s%>dh!?RhOOUYq}#%&dlFCk7b z_%dAeniFTFuoD?eeL&fl)^4t`oYz*UP z9}()*p6~7*VP|e}1kbS#;ti0>tEk-0{Tx++&!&G3-O5rcMt$sUOYYT{zeg59R;(O= zCqH+FmQ^=K;l+cIf}5ogoE-Pd`|iLBMy9K&#V>0i3x;l5Ui$-0U%T^tKJ&N|Wz+ZG zvaJlA4*FY0W}M_G&b1L)`8@GoAJ{%2PX6-Ic7DF;-w=HFK=OV3^zlrg=J3&KV4ds` z`@U(Wi8}E1DPaTUZpwJ*;FT+ikL&uS#{E*=%JWU95^%>X^>}A{U3Yx6Z{zW)_3M_K z=*<;V)m}wU_L+eKTO^R(f4TZ}e89goY1 zNAKsmsHWr35H3$Ff1vxv)5RnC)5A;^y)aklso#wJ%yq$mU72awb(YG-@eNX87zWjb zl>1-(`^aIK)^p~lw1ddO?Xw+yR=pL|NBm#s3DWn!8Vima9a5D1r9~s#P!~1)nB`e#_Mw@=bQzT&IkGFGWNFco}*f?*Zy^P&z;bFrO5M*54~ITBL$JKQ^*&|A8~R8TIYX5 zYJDLC9$nfG{?tABj%4J^vU|e=r<~_IWZgowf4gik4t56rh@qeArPBp!zb;Gr{-s-kR0#Zrio}ZUcdrsLeDvCM%7IA`RF{RB(wHn|&0R_21XjjwgJp0%AEvTMV4i_@~_{erb_y!j{xl*Jmi@%@4M z!`?orqHb|<<&G#}bv5OAOg79qKWKvwyn|N4dEZ?LmWWP^m0FKQ)!*0%MJ06m>od2Y z7jXl#{Cjspw5xSp@#zoOzeGM_Jm&F0+aD;^|L*qrYeIf$-!!|wU|&14b2VmHbtRFY zRCC?#;^^A1QMW^BA@hV1JZcl&TX*#U|45IQ)EoEN5}Ea?dgaOWNm3bl%g#=5^hsy^ z>H0aDT{?B8q(i^o|8KAo+53ggW9RLaiL^B6aV8vFK5mBA@wDwYkEke0$17gr82%|OYm9?@L&w3w zQL7C^c-xzz#<9UGQ^GhXGER#W+Y$Mf6)ZFp?%ZAmJMFp%f>B?@cKZ3>!T_n?gp`(r z*Uwj;U(JkZ@6;XnU?D*P!%@@?G2O>^OwK&3Bt8g8Ttp}C^FiLHNAp=NS*VAk(^6iINW_N~QH% zhl+m2BiMc0tx;n=0NkK)@n(d$gxa)Dr(P!t;`hciar(fOkN#$3fBhi1+*ZGTY`1-6 z+ZT_W=e*Lba9Rt5(MHv{>kQUDvs;6!2Wexwb~-foU*OtC;1)B6`a z*erbnDjidCW%1DyGKp|x#{>={5Hch#&#wV&@nKfSjoX977^zOs$tc)klm-PyW$@kd930D}_10$#ToG#bun7W2f5^p8?{`@q6u$nn3$ zA087swOKJb&H@{#cwWSx46UyL1lljXB9D*&%C{tI&5y-10kHn%og1E>6(Y%pz9nYMUEu9NxdR36Vt6eO0y}-iKOu4ipUSv116i{E?h4u z96`)EY$Y5L0SIN;dMB7Iv72-(9i~9YK}aFvjt4T#ra^gMcSZTG)i0g>4y+9LwVnb|L^aai`mNFt+{w6oRVob=r$2#pqE4b#DT~Ggx&^JM4u9IN?su zB72gT!&miabd&G9RTO5lh2zpga$Wz3O|(GvY9V30l$W31Z| zf%u*jWqU)UKEl>YJW%}8{g>Dz`;XYf^m4f=WLTH#uweBcu}O~d2nTa>sLrSBeU52h zvKnc0$!=jGESMH-kW@o8I#&?Yq|WF^Uku`l@Zi8M$%Cs4Xref(6A93~FrAFDXJZQb zl8%!?P_wDbG(X_@H%&Z24m^G)p2pc2%G|W_;5V;)th4*nSLgo; z$tnU+NQNfg>Km(K*1xDnL~8_SQ1Fr>x?@F)u>a9|xyt^BnL!5HFR*A53GTb(8o;fcH#gm+uGLo06-|D9c zpVCZyS>*Lg%s0bje}U0B2%vsPOA1Z>RHzdFyEYkdiqS~wWU5QiR&v;DQi~si&z&lW zgS;-V9gzD7H>{}4%lfpqadp9`CIzW-BmqAR$$^-qO$MXgXiiZS8WL%Vk=L!NU~x!m z_MxGdY$?IOx|gBaH1E?QRe5bIF}$x_Kyyouh^tEi^4nhnNmO8x(bq{lxIbY|A9K7B zJ$q2|3c>N^KQJd|5au+wOGt_Vu0RmWgM-(NHwDdqWh#h%jvCMNlPb z)BcmG+$NmhIFn@hvUsE3i%HCZ2GX3c{~e;fKNA0=IT2e<6a9zg^iKe5Nt}EDS1@Jj z!DXLuO>hNr30zD8b*1^xOP|%I2Wd{bu7gJOby;R5Q9$0yXs{Xy{x>0|Meg;5hqCAf zA6`z%cSAH`>VJZl6Gf{le-`Ap3x)nK!JCJqsTK?>T~Y30#f@yU-*3S(Qg_ndg{Kp~ z2;QJ{t|rB^eUl``U-CG$}Efd$NtJ)%@=j0GT|7}C8qae9Jz7c zHVqa&&%MXbH~FF^c}Y3fG19prfRF3b&?CLw?M0($I&cwl$pa|yv8Isk1yB=YlnuWY zTx-z>l&1JMwi`1bqsoBCnaAesq+iis4QDOuVQ=nowf!EkZSC6FcK7L7VsxdVSC67G zN6MZ1=kunTLg}T%CLIE88;{yRMcu&>wUz~p0}n~wj&ncZI$rgM2F2ctnakj)VE!rE zpR0uG@8OOpz5)_nwaX)qvyWpx*|#$T>(4x`j}Eus&J{hq4bjW@Pg;p?$L1?? zq26cgP{-_w7_QbnaBlHPHs885K(6XD2i2Tfm`ZRu{sOs5!8RTdK8gam`^#}S%fYz` zPGRZLrh@UM57QI*Hg3~Kg{D*yQ;&tSC=#NEGux%e1hz`S3a9h&qZ-{-Z8JSQ5*OyF z8QTjCKtrMFIg%08b`2>~q^C_;(>=$BoZA-E-g|=UI+HtwZgbe2d?&Tj-C%RCq(zp) zz;^4kLEs>6=)C=lj0Vc{cIP$u(+NaA`fSnX?qV^WdUT2WbCW<>_-5hK!k=3^H<#_5 zKhQb1(Cm;N)R>FEQDvl-ARGRqlFdk+4re? zB-XSmaj&O$1Y6H|G8@{?EUx9|S|+Yar}A5vAi%4`C(ez-V%D|s$9O&4FOUUV)TTD< zm1S~vf&0UNC8pcMb0;Le6*l->pLVnKHiKe?*^y=Ba%X)gpW^Q%t)YLus%u7(9{?q` zTbqjbmzS0H$ReyW1d<{}x8Z^_W>)2%A<*+u!@NgD^F$B2O_dt3O~w&4+rOJXBh

    quW_Xyv$6Ms^IXvaSwZz_sN#@0S8$(uS85k zCy@PC?w8^wwW=gc={Vu2CRVN;U%VTZ^y|>kF8}f8_){*XWB3HyUhMXI-Xlak4T~->URvy)U7>QNmRGK8T$4TP zN?UkOcL5Eif2&F7XnvVA5Zvrt;t~@ZV_{DT<(jXdeApw*9dWiU)r><4%KH#)ISnfM zWR4SVta&Fwc+N`!KGub|s^h@iH0N@~XswX$zLM}#Vn(2r@*6ONJY5%F$ULV&3yPtUvSmQbsM4Qa|a{U@)-j7m;n1QXzRqEV$J%a&zvmCk9cF-xPC z?;s~SUGH~2y>4wW^%P{4$6_C^Z;xba3?}U1o@1DwGt#lp@xgCAa&s%;#xwhW&!&>f zeGyvwB5u_s!6^iT1?iDop-@yfA>+*{Ze3dlMjI+1XZyM#s%1}O+sbhK{tzhn-*0XtIf<5N4*57}Pymnv$7)9w~|N?GGFZ~UHzNg(+R#d@ipA0f*< z$;dO)Z4fN1tt12*kWb=xw#>DuUQ68G-x{vrRB^KMeXgsI{W1`#lqY6s!ss*21l1~9 zT@#E1umlC~*D@B!tMoFJS$iZ(!nK-5C~uTS1ml4xkagxL?IM%x>9H*E1xVp=(zd+&G1PP20)|o?bwC7Yl6U)v7f2RBv-%ic>X571*^RZ+kdB zz7qr<)<%I_Vy%n$ot3sW+MKSKyVG@i`p=%z(-xu_mm49_7KcH8^P`YTg{QOY1Hlm| zN&Ay8X_0=IIkOxBJ?v$p^)yY68#gH&`?@DhjkonKJq^T%vo(<#klSX*$VXRnNnm0Q z%b?9E0gZe)&YHNWUFc|X(h!c?O%$cy9M1V%u<0Q4B$evq-Zc)`eHBN@%TJu0~O zMb$VVQGTQLrFSz%V(;s$k!zA_{bnqkw{k`l%xv-{X13(%$co6zb%E*lFV0}9N`$~0 zG1kZ*XG#Z>yqlnm&+ZIAZ*@(hk^_4+I)R10`N$*VkAkSa01lxx|RKw2^&Ckf~8%_hlIbu4{s70FChQmRKy zv~A86sM0pc*v0d=Rhw?AHRW6>)-oo!&mV#q!Xy4M}PHI z(b?v!XU+%ytV+8VwP}28w0o8NvkYiUg^XO`IZDDbYsj^5_iqdb{|MQq#E>JG!vFQi z21P#)GogEbQUiT#GDBNgM82u2qr68tIjwuceo3Kk5sKQ@o8KBzlWc`NdHmn7R9kc} z)zy3qM5Y>0FV%1^!U{*Euz*Q;HRgmCHML{>t%=oXS~xAV<0S7_U70W2k>h>G3^TK- z6N8=8cjT33LZL${8JoHfp8nuKGabj**ij4hm9EuII&{AN-}F)@$nvEAObnbC$%}!J z@ba=)a9qyv9?5Tn|Cv&w$w;V^MVL42ORM2v;Lj?<>vUMj3hUsY*`RpmQK#%u+iua* zb8C1RkSdMlZzf+02`Zi&%_gadnSS_xPf7Fgvs#ov{_X<89euF7xY|}W@~%%I{vfoN z{yH?$y#hM#lLOO+s>#X-GR%CUBMxtnm|{3sXdgG1nvj7GDFYenx;LIq;EWO-2jI_y z#s*Dn)$sVl@_9HrTBSjWPH}JexTWuIRMr)u?c)@V$d#8xgA;O+cQYi*|7W4wgp@I~ z=vC~f=BNM8MyA6Ie{1=QJd-J-Y_r?^wx-KDsDp|})xcX)6p?oiyN zMT)z-I~2F#?hbpk@B4lKf6m@F>n2&TC&|bhb7Uqs-f8D<4(%q=a-0TmV9ZQ;iEL8) z-(>?#S0O zE=u-l8jO5DNue>s6?OLmH?U0-;M;Gz6oH2WCg6qc&ObN#bH}0ON`jlqkMigCeDc{0 zH3z1;`IX!K)^dDDmm?e1!2U;^5#72Tb1+t(MS?J9&X&G-nLbTifP95XA|0Fwpmv!H zF}>_Vlb4;YJKhAp*udJ!J9UA~ik|~rfgsZy4Qp( zZ|{NJDw{~}Z2<){WB}Q`^}6h{vlVI88aB1nk8%BDKZ`P$?69Xc(BRx+_Vfp(7s|=S zizsrl7;*8=*k5X0=y6{f;VVvo`Szn!EX6sFgaA6=<=`m$t;WteyZh(>Gg|V|{PEQj zfvV0I;3->2bgezPlUf(>8GU@Z_$J6?)%3`>>gHHJS~~a1clYMeidS6z*TD_u`#BHK z-0X>yJGt!XkiEL&t_y)f;cRjry~8`V(`7@HU~L+;H`3cl9E?GM(g84l3dPOSVG6m? zC1m$ry*Xnz%#51n=`g*QsP{@_M%C7ZP2t&%aaRjbRt{6pzy*;IW{C{OQIkf zK1nz>^!ecR85GU@4@1>Y)EFA#o3yXs)o_f~bHn2m?#3Boo2A>9&@OqBz89dO0rP%> z;y864WmCDBPy)$>3!t3y#8XAYr*qP7x>+NnEU2A4&eWisWR}QOMjGYzphL=$DFkOS zA1rs)yFTQDOw$nJ<0nx_fVvSoc5%z#)ldIrx%eUZoG$eJ&Mgb=x6Vdmi0yq3dgYup zpLqDPiRCb^6X?6Q zdgLqy#l3qw6$KTA3af1rJX0zU+oT9?B2!W=lUYbGi_bCVBlXnFJj}?Wv49GWwL#Vi zK_Eh&zk;r=fldw0@niWb*hpdxqrwwQC+m)ZT%;b%=c2NxfLqp12sKnl`;YHByU;%7 z341+3u?S~#0bkutl*#@uVDKy(hcB?7``o9}&WYG6kPQR@nFlvHy26Ck%2(0juZ5~c zu2>G2_TlucHITOC9*vr^_=jP0>rgU;RgaWauouFs@0X@QAq>A)Mi9hGQTKJy4WE2b zs}6M-BI=*g*8Ec?=t~g~5zXtJ*Zrvx*J~pSkaK!p9;4c*eVeEw5`Fr%&?@3!-*Wa% zD7`fh2&G95K>Biw;|IOrO?TT!RL9g*Mry!Dn&`<2Z`7{r}(H#z612(CDM@MVD)gD zC|fB2U(P-(;VMl|*9@jLXR2X3jf~tUL}fBxt4M0Y!C`(+&uu{3TW5ibnk6X|S{-v~ zL0S4;KLrbpq@*z@s_aQZuYu18md{=Q>0kO0mt}*xp>Hv&ev0xT2E@-8Ib3`v zK~5LHJHE@j{dsoYT{i)7I6YVd8WZ1z1pjg_NQKTkYo=A!42a-o#;w$K!t-Ps@vj-* z`fd$#Pl7ZgfJbBRVW$B(sZ+qoNUA1TKsWqU zu2q}Kmun1ft`wRW7{K!5uf&H7#rj-}6ug_MQ}nK_{GHbg+TqlZme)c)i|(OI0VCTQ z@_|aFG;tdO7goDhv^)aXG(4TEB+oteohYExfU!z{0Y*k&J!WuH$^uJYwOb+&iKbL$h; zX$FdMbJzVTnGWS`qn4hk3dcd)+6P$+7}UlbXai+MonFys6pn)E%b}X`v#>R3 z8}fdE9e!f|BI+0pqo9~>Rx#*{Do$RC&)5~a-S5kFn>AqDV`s~%P90o2+gWEbO3DJQ zcELS5fqL-Fo^Z`2F=ze{IBoS24qq9Epz;?mnJKw8prZ^K#%MVGMFNyJVhu3e74LGz z6p)Obn7hIr4Fb?s!yTLnlBt!Xm=OrjBO%U~5D%UI*tJf^?ONG!V=M?fWtr@A!myIDNWED8>D-o+`G?E zYju)et^ZI?<0Bep0A_paRSWI9MD{kUupFJLSAhVTkuqBs9^)TaHdl`y(>3v6rgpw*GYk#G2yl`SkqRj|0$TyGtDjP?(a zr`2)*7Dtxw(FuhvO%1vC_Icr3)VAm6DZIyDb)Ob8c-ScjOX?%b!YLfS)OD`I6{lu= zPip-1ZMRR4xAp`|tdzIL#28$W{j;^Es{c$icO|Z7Z0az%g_Q)>(m=`RAS)wVb>tVA zL<)r321Qe2P2z8HCjV}Eni5#2Rmt-vz*6wjDtZbLPqem6#KW)t?>$LoNJ2Z-o8wSX zS*OFa38~*RubpX|mF`g7KRWFfYU?9n@)J5-JNvtJh<-iJ|0Q_sJPRv8SS(utO(_P7 z*y+x@wSNF%cJh(zv!&(PBGi}$WL=lU&Z%qW+e>u2e6Nr6HJ*^oWt))^wW_*+5MT$i zNG~Kx7St*%C^nm^jC@E><0Q%s-bmJ97^x#)*vVpQ7@x*t>O*aG>DW}$M}|$v4s9c1 zn0Yv$Ie6vo=DpG9+tIcfCNDg})FG*&P~AdhGP9Z8s>QR{CIUvvYbmx%;nNygb2}{( z$-U~Eaj8Ddx#ERUBvXmWF+`nw0o3Fk{32+G?Ng0Dl7S$WWhYS3j(n~5pBX@!?jE@_2io15c<4ibx<94>t9b)KYAn80_<(8jN1r0tKK_L zF8rHJB5%(G z%suG7$a<0KW&NrL+8Jcg79wmV1BA(Pho1f-Ic|5OG2Hfk+&@T8S{7pr_wSmX!0FZ) z!3rX!e{3<4@<3k*%1m4s)8qRhar2vp@3lM>5SxW=X(T%g5YX>51aP*Z!B3P^I!O;j zGQN-`4ql+wqvSKr!sau6eg}a(A^@5#5`Zp5Xo*#4`oBjx;|F++GoO?PC!>m+#9phb zqlJ3QPcJN^E>5Sl9UY`wq$xu9AIIc3^zgyPfb%k7nw_lh%_?R%}s_UXj^ zM3pE%NK8lPDqk6UBG#x?8@;J3oWYclH6X}Rxt~VoiM=mH&*fmO$R0~>rx4DNa?_n^ z7P}t8y9+3jOT8hoW6Im-(*US!1b29LZsVR!-xQT zRI#D?$s(M=_6!QI-9!D%9TI=;hpBQFMm==x+D}YBW|x$svb1y!-&ij9DB|6=-hXhY z0azM%hPs3a{S+WCDjg%D(CCOO&GSZXIF4hTeM0$`f7M5|ie`hQ(F>OnkOAM2M#90{}Wz`K%?wm$(<~Wz}lj+H3v;6!O?(h8cl8(*#;)V9sth2VL z?bD} z7Ey{n45NXCI>$o5Q0M<+cgF6mLU`sw@md zABEW`HjjxU<8hujO`qz?W44yPpn+3a?W!TOnb|#}*=EjlH*r~AkLu1=LmIyg%zsZMQZV95l8yLWfZscS9q4(de*GR#g zUd$StIJYmazIH{qQAN+@Wx44oc**~E^0b&3^W?T$R)9zh+AZLE}s`67d$%=(;S&H z=WVg6qbz@kY``ddV!8D*KZT9*hQuS;7vH(SKZu6P` zs!4p%n+52{|Ur; zqB~+s-xRlcL|4nX!M=`?U7T{9h=dAU-5d-Qzj@HE$1E}`m!@vjfK(59d$Ha$x!EHf!0XEa7n7&*1n{BqIvRf&%$D2hw;i|h?$#BFDH%7qm7B{e>;o5jWJ&zn!{FZWL!@!QY#zK_dp zG6&~I$t_W=CUsrw5cBI zth8NLdr|0Gtc<_!pc}|`t^CzePvYHbGroGBxmxdW)8~87_XraaLWph1bvI7m3Vn>P&9B7Fs2@mN@Yd3}1@ z;vmGAc?G#vme16x^G_Non#R()T4RN~d29m6Jj;vAL)4!ZGShShGg5G@SPKdDwUNHl zM@;THjm?Z(k=H#PzvWfSf3(b^lP|zqwJ5LUtnudLm}@DtnL{58mFh+(m`fV5w2|r( zbI3=w{diDj!)pB95%KjB80dJuPz1KL4N55HE5GC2^|csveqJcwr4UCY^;1K6 zrqv$00LJCwn!#%RX$N#Qx4L(`MB`^1b>=vQ{1EpILUOatp#z1UQg{r~*za(1nYOeF z6Gg=^Z1uzc2m7T6V!uk)qb(dTDbXeE0F$qfOG_GurWrRL3GNF-6xAShW$kiERQ}{U zyeFyuVyYRd_~!*6=4xox4XS(fY6sSFnxml%OY{Z$Yd*^CqQ#?)l?Lmh1BT9OxeueB zgzmVhiv7;n+vN-KYfU9;c2C0EdFx)yh zv2f$H>^5GJ#MAINeAcS>mOQR(@u+{Ygeh|7efSewA;#UmxvxS{ zPC3NANIHGI+_wJ!nHSrsJeYzKaOC=-k+?ii63Nfa+I z{qX(wD#O+7I3mtru?AmUlTuIb8?m<6EYFwSO^)I4y<|AKqdz2AW(oeV?UeeF1)45d zy@WemgHJ=9O_a>c(r3Zq`T6N_5G&=Rt--@LmAHSKeyHd;YNP{1YesIHCtT)fyx~u_ zK7J>t36q&zjl}+z`vs;R|Kl#Jd zVaa>ntQ(AyZKEM6@=d9=Hb-k?f>$=Z>|;TX{ZOp;bmh)oc8`6+QR)vmTmPrHvF3kO;lnElq0aZ} zxW{RWWEF*c-;|M}3{wKiDxL_AtcQdSy|he~_wM?CCQz0bu8z+$HC=zid{8F!lgU70 zHpTGQoBjk^cukCYl9pt_^qNsl0;|>qNPRLG8zG9>wqA84*8%d%<4%2<-?qf}QJggM ziR1~N!fVI!?nZ{^^zN?9O?xaWbp#{Uu%p5NO~y0nKJzcptRp)DE|Rn;jd!LFO-ZL7 zME)YlvKz5GA{kB!)Nxm;zXV4ea|Kg(M6d&NaJk`s&w=&PgAB0|3j6U3f3ZPW1rS%F z)t(kMN|RmV@wvDy?RWU$N=d&}K0XsiUyFRP#(=j?w!mHW*5gC?wvot?)gfo1OFMZJqm_Q2?}N6WE2SlbTkAFy%=fk zhZO>J8OZj+8D=%^8_v4BQHQSP-wI;gGd+(dbI#~9+cwuich_U#W0au=RB-_p?fjq6 zeGpioRnL!){k#+#mTIR3;7OIFx=5k{8XW(-AUK)dzv1gqRGCXqiVQksnd5qV{iKP- zNTCC{iwvN~;i+TchQ61!QTf7aj0Aq>94H{3V?kkM&i;n2&S`HcbP#@JWZJWw7b;s2 zJ811LD_W`wsW)jnKh58OO>N8xh5QZ4|BfG0=642EJqjCs35qG_WD+YVE~`| zP(7agIG@IeW|?_aFokvJapY06uAHjfM$}`XJvl<2__gpvm*zdNBQvrmAGSPfytbk` zVzH((Gm@3lb=vsRNbGsp?Z;0`0Bxam3Ge;Vy6vi;D%9bVZ9VCLmNRS19c@LrO<69n zS7TRyK{Xe>uYDjA50pHjmdtQ+AL5TBzje5A6WHP)M4T6`iMKjVy;*ImLw=0r+Dl{IcR* zZsE*iKW9O=gc)U;Px>yuTB_bp?_~=9%-uCx6|ND5n0ykzRa-RAOFGp*7qb@MTKmOn zRBnD32!4V_Vh;!I@0N{;-trcH`w)R6?4Y?Pk|__qpUEw?ns2cQ&q>2(IOeY(F0j;9QsI z!e_7IIeElLRr3JS&1Yo{A2#gI8x)i$L(Z$Z)(?Lclr1YzeDb_cjqjwH{Y3f(qGj-W z=yb<9&#}#UU<^m-Aru7k>}f%~%<1ryNYz}mG&{Q$ilumy4-kof4%SEl?$?up_;(+b z0{h=K94WZ{oDzAp+ks(&(mOrxxc;~PWiq|xUY{7)6|XPWy33FA4LW5m9hVRe%V}NT zw1o7j*SLqp(ZTIXI3lhL$NUyq?O`0vBDkkkSVvV*Wm|Jd>!v~12{=ApC2wN7>%9YR z^x965iW!B=6C4shXVEkJf*KV$3}&PQgSx%{lO9dkHv1jP{GLtke+U(NzYV@7LH*si zo{Ifpq9@jfb7>So{l)V@A(x|dWBfiZ<5oHmoy}BF`I<#mgWyEM?%%y87BW2W%VNoL z+KY|6m;q{Y$!5^0VP6Vt3xK(ipHv9V3d)+PC=o+-^z4xzad9I@1`P-V;&$L`xfCQ| zj>yOZ-(y$(vH{6;=~?eBr7_Zfmrl6<8YJ27%UMnO6rtVff`v90xTk!P2d;x1U#&PiR%`DS5ni4X(O3#Zky9rO>#S$)~0AT^75jyceGsYg^2=(k-*^ZuRfIDAd*Op^?)q=8 z>RDAsa33>RK02lDHOfJ(B#(KVeIIoIY1Q;<1Va}Iux@23%xSHTuR+1~O%`$=mefu3 zqA}P^6eAE#nOIb5R}9DFLNpgrYjP)@hX4~|RKSb&D}?2cAHL(lmcaYM7%MZ59E)Xe zf9@*gx~diM39D#qiul3+^}jACR`Y&}KvM!-kl$1(iRxY2jR(Gi2_p{sUmsN9?vH4k zj%hJeqGVxNl=eY+Y@?$k40YFWSiK3pFZ{fP3kBALq+SP!da8EPxwHy1sRqS5#R6^GSfqFsDjxr zx?yAeYi+c_t> z*IM^tjofmxUJTeB>)FkPvCCq-IIP>FZOUuT-gH^*0M5$=x_|B@pLU$G5N8F~^h9fH z9{&`=vi~KE*r1)WaU7OkgV@?aBxB6gcbi)SqF|1hKSLn*{9$0Y`L_0t|A&Fu#05PZ z7`=kR`?SB`!b33=pI7>V3EOao*N@VV-x3wg+*U!pGd}B`9+qt3M)>HHUef&V4bWcD za%EAUGjv<_jx%U{ec;mPw)>j%cpYKgZf_FIT4KMvi|7(!#h_iCRJpEiw{y^{d8VVE z`+_s2#7pjUVH9039AeQ7^q_@EgETIqBiK%u z>=rva5jVp=@dO-o{PcZ)IPeL(N1nTt5L&(f@;}<>_K0IvkiQ5SjEdudQiF;51ahBtA z>l#wCY_tga-Mb6?em9pNZnmqrh>H}UmJ*ADVE!u=`IEj}&5RQzA&(NVwi)D*yT1bV zgaDF@h;PbHdSaAJRVmT&%f6KCkC{aVvc(5})@Y$X%YPSv!@yRK)USm~Y=kKXL}3@8^^9@q z56*LfJf;h}(V^x=aYyFoSANOaKcR}MsT9Kx%hJtYM+Ws-;7^|ia7+>iqw@L0&zPeT zIQ9toS=-NEkMyz&`&5&$;kaPhJDfUJfuT1aWTN*>n6y|8zSxy_F-sY?axS1l(T1$>)W3zL?)=?wew_syP2){pe5f5PTDHg0asAzs^@ns7NTbdL9v9)Ext zfeBW}oo8d?6UiStEcZM7n=Y! zLU_+@J9pVaOBd(Wc|Tqrp@JCph9?07lXqLcgLeq5h%W5I7d_uZWr^s53x@D|UB;`7TGXU!4sR1StOF58qT;p;Hf@4jU+W}P1z=- zs+nEv9t`UpqAP(t0k{OXK$9P|lif?*(F(WRb(z1zVMddP3k6%^0Ut5E?PL&v2{@62 zfoKon4{3wuLCNbBMwNsiv)|PxL2F!^ZO1qhhq*jo^Xe6Dzj$r9sU14tKen+-!KhD@6diZIOGlP7@lx+jL&|)n77PxQ~=37SP{)yD-~TL%lb7TxINgz?_iB0+Os1bLe5c7McpU^4Swxl}6?Ub(pZ zj$*Y#)+W|S=ROX(YdCA15NZywDA+z8tEZ_DYQZv0&{+-*nkYqV#4^VYPvzeq=6ddSP8(yW^Xf>Tkw_a(j$=w#OdgOakTaix{2S#1)uEgt~ zdG(o6FY1J9p9rSOlSd_+Q`Io{@6bm&WC%4~2Hp12kM0!m-#D@$(wX@b4$((ii^=1d z844zbPWNl#lm+Lz8~M7=q`{wvn5f83heHB zU8uIG!A;|LGwz5S6*y)FzjmMYz38Xmb8o#WYPS*Da?vigDtr>argrDw+P{D}dksZj z)Tr{=zbHZRNSxHreFA=nG;}Enbcpq+{6TcCQihzrB@a?Ru1A?fQ=jhZTI?VHVsxLC*6tE9vSZnMuxq>L*z$ zzIKXztv%W`>{v=fT#Yq5Pif{|Jw?dHyac-e&P4g1aLk#oj!*oH0QUyv6np@TXIfJp)eB5Dw@(ZT-#&rWnW_HIIry*DS3Fo~YO5?d_XV-}EAMsJp0?4b4{vYoT zM&-a6ziHmPRz26IE6Lw=-V5fs-rQds&Mu95f7<)cHt`$j6E`eqiygbyFiO_a@iFp4 zGGb+chf)CBQfwRzYk+?;PgM1Gw-dXe1J9AeCQsUDy@vdqZnh|`h-uA{U^C%DE;h!t zZw}Z0OrL|XvY2brdA(l6hCfmyyO1;f=WZvKtfQFPv9)&-lDloS1352zYl{cV0Rs{h z7h^5@3t=TL8IODF1LIJrng~qzB$AuZFcN?VX@I18e{3cg!V1*nIL2pWHUwL=YIJL% zYV-_W@CJW)taB1E|0Fnq&+uEFL&9X|4W&M27=i{AF&(iNH8t^d6SlB83!-34Q;=xZu9OEe4bCQbdin_LkgmBF)n5Li)snK#9N_#w4! zMej{*f>r4cW+4{Gv}ntxsk4lb@U=u(l+llPharSpvx$zs&Z%6(61>nVe|ci-u|epR zS%4$|P==1O0TW?Y5^Y$6KEG60UxOsE9bB?13ly`HJ(V8eU=Rj&Fhd-8f(;3Z-~DCv z91(gR2Wj5@M;%bae4ZJqKZCd8nR4!9A9`QMK6{fm!##fL?w#{lPZIOsB2qTSjKHVv z9lTAg$ZX;Z%47GoC_Pi;I5v^ug_S!)qpaKxMVH69yF}pt8>2v$!!`5Y{pa8UG=bdb z^#G~A8i?JC^UQ%e_o>x!$`dy^p4E7$Ul;c{SZ$}`j|W4bP_grLCT?6?H*Z=K>&eU$R_m7I*rf`_Ozi!@+{c^3wkFC_|g zlIXX??6HAG3f^@~4&F5cGl`R`0JZ~SJK(mYgrUZ-5kEkDN?&s0Yy*e5JjX50&i3=> z-wyf>!Nx1a$o$sBy&LZC{+>D((I2u2)t&e-xK{yD?8#3D4)F2Q$*}_$2R{Sn4g5Eq zTa_+xklh;O_T##m8<^nM-NRa7RalpMs&X6VCe{BL2QzG(nBbgCP?2e_hGEasvizgm z8lMpjssfBz1v==d5vkifEHs2vQCJ|BDu?bP#RfeIit+}07`Y-UHytv1mxLvGPQK2X|I*bOvD9613zu@X;sux*7d4p2?pCMh^kz?|#yJ{1F< zuHDT1W`5d;0@klB+{bRC6(8{>rkaihRQ7f~JM1a;`#Y!6Ipj1H4=CuX_(lC*P7T;=dg`5+ z`|4h*s3NAS>W9PRLKkr30*l`-yV#7HM|57&ZRA6@Dj<=A$^;SWj^=)+M_T38Y);%8 zF$ud>D2Qv+oiaG@D~bCTSy^Yg_qCf@d$FKtKr_$|jfik-X-HR}rJ z^O8CvcW0B$1VtZT5LyKc_dIl`mTrxI01skE%Qa2itj%@L;UPUw2=#7Q)GC1i1&#Oj zn?~vWHf9JFSQY>@1{OdlA`mB*w3kvsafQrVmg)Sqn#gwM)6_pF-It<&bXKqJabXm4 zM_2j@H`0PzukN>yjV8-bwCzJpkzU|qwAwU^s`%WJ!Amu5>B0DZbwj>fl9Y@>AvX`M2=VV<7dS_#=o{rZ@V^=tf%+p&zcpN*}t!Wi;j|MTkp#2f4?!IDLa zGS@w3L-P#MCnSLFe@DES)0MWPABbze(m1#7+*!dEc86WA-fS9`LM7=8Bni(TphWMRlvJfArcS>&_oz43A!PZe@8~H@Gq7>0sDI|$q^f;= zbIe_Gj&gl9k{P8vy4Gu-y}GM1O|veU$qAGvRY7UBc$k%k-@W;^KRuiRXTvuv%M7&d zRa+O9Qpb)6;+e>=eID-4fYq0Sk9LQz`fqM-lp;}>ZxPWIZfjPe3oTZ|)4D;prN@58Ojazc>%fd9hI@_zAM4 z?U>!{`-y40h@CbB?Z*I8kl|Q$)-KVJ4H;j%mU9N+jbqR5re|Ai4|?cwTpM$p{K#G2 zuNNk2XyMT{G)GIVyqD24$Z#D$#ya}AJCAN;bPT*>1i0F24m^YVTz}*7i4T$^yNHc(pl>f zSlq>(X(jT6$!W|CQ=qOf4f#YEGy$OV{tKr1leAo9HK| zf}9@0c?9Uf59lLPF+mqrohc`75x`TnIt#Ey#u4ADkp9-X|KiZgUz2K;0y_cuktyb- zq{M*ce+sV9CE`aBYvaGo&jSM7;FT9>xv`{2*&>=yc1g=l7!N z>6WcA`#cJ9|GO}U{kBc)E@JE5LE%xHL*#Q~O5T4v`?pM}zh&mpPGRy`nh#NI2)zge(t+3=B0$cAzDuRWu zBtdO!a(#$EJDd7t7vmoMze<1Z3%fHvZjfyKr*~=7mNbV;J4_O-l3#>A9C8HLwu&cc zp?xRpA6?8}BGWB&VJLWc$Oayc?%w)>+3{rnq{3PE$1^or_Lqi=nmtEZgChf8Z{^A=s?A}lxnkTdflaF zw0t?&Nga6|v?Aq4E^6*Hx)cbu(n*?XV#wTB|^< z`tQ2e2xRdH$>z{+7#D?QmTYGTbVg~RTDB{FIdy{ZE>EsK=HRS6?+Ja{YR2u1K_q^! zJ{(Fql5aOdsYVkEZvw+Ob(4R^7e%))SjkZ3yC!JRO&k}jA}PEpQqIJOFV`P_8)hV* zNhykEQWA_M(I}YjRgR8vk6e*mkO}}Q#`5JiZ40$U-}*T$*_NIR&Sp$SnyU*y4I)`t z?GPj(x7jIYWkI`f9-j0pK4>Vn8nPb9wC8B>EgRZ+$6%yeXfV9~cK@>e>NLAEvAH-i z0r`?~AUQK}#gj3|!=LrI?)+@M?9eq{rT^tI)$t_1b@%u&)v4#`Y-L=i&Nipt25z}icDlo**`85F4RfCuq%~pGGYf5-zrz7iWd03{xY#$L10?#GYnWsr zn(CtYM?DWnJ<(o*KKNbJwvPaPM`i2g?@pNr3c;C)F9H?n-v?3Tl#Zwzb>_Z>dkvAY$U5qbzoZ)CC+k%@M23l=;?=b5 zmQeml#pAuZIw5DP_6-wuAU$y0>IGSm+_TvEm?C8BA>&78Yzj^|A`-5uL{+lUV#IXt}KqgMM=Hn%LCr6ya(p?ic6)VdlFQV!!JIQ_sE68oe1g_%_zhRIh zteg`lv`IlS5z!lZEfvR6H-FbHdyW^5lgas&YzO})KCjjMAcm{;x9-t><)$XAdL_-n z`As{}#-^DfPd4rWnzCHl%!b`arCFC5;qg3arc@9V(46T2?<#x-I^=unZ2WU6T$iY> zxICK71JE_{7-fr_NZB7|1m%%52+rqJJ!t5LilM~M_wj3_EE^`5&okWrsZpi zVpPp25}-gE1Iv%{9mMy08C}(cG~}h~-koK?th9dS%_)zR{laGW!M~}eDwsa7pM{Np zS#8wILYH+8WaX2IkDJ8_jfN`|jfTs{6{;0{h%Uq~;?5b2Xeo&)m=-bvHBj(c~1J?ndTG4(y7sYo{W_&0*>Fo$mV zwKW^Y>AupFpr^4m2Ct)hFUtbv{or#fnc3Gt;@vcAl-)FQL1si8I3+PmM|s1wSSy8l zMggE1&dRd%EUD{q5mlyvbkV*B#*1{$8;qR4VH^F|Jo9!_`S%{~JLcTT8=a>&sUv87 z)Rd#wI#F~_jqV0Uu?OwNwX4Y&?j(V36E1r`#?L2e_r5xw#KVW#*lZ`Ha^w zH$Me-ebg_u|LLR!2wi7|AI%c;x#hl{XsxFJhe#wqj4m-1PQ%ek1LORL>0bABRdJDG zT?`st(`e}^#1GqCA&%3$kkgfYMVIjP4~y>!!oz&_?CsqOLNhIm5mDV-8v2w5GRNx) z7p}5S)&%aX6j$QB60|k4>id}+3V*26c-%&_wrKt;eO<{SE>}-i*qyxlVmFuRHNoWA za$2qls2->fxZOUQbQf`AZd(uKHW}8u zJB8n}AP=$1hN7X=n!kxgeubfRa_u)6ALrg3l>4(%zSY$5GqF|Nd4ees{F$#wH9Z_A zRB(n5u1>BN{go>CbNTJFUM}HYUO#--pMXb~?1d?k^+ll|J;?`Rm~rC$JRiBZy# z9V>JA@i#%(?EQjEiHQ2S^*ZzPQX67xCEUA2?u@1C$2IT5J!BO)Fz@k8YQ6glci5tn z`!S(;?-PGm-lL48MHhW63xU>RqJn+O$%#N zKFW2eI%6ort?l{{3lME%@CJaM2oXgkKSxu63nza@eg23_{@b4fX4*9)7{jR`j2ems zB9z3myX87yYjRd=JwgOLg8>U8O8HhD5jq>cr}mR(!>bsFyN^!vdk0vx7_k-bI?B#m zMrcJne~}e`?tVfDVr4Lu-(lbnJ&lk%U5$|PaHino;NfBarkVi<{$%EVR>9QeVtS>m zE*zgF^pRS+zRRcbE+@8O^*-LZ?14S5ZYVW^5O^`ynQ##{hMu4RGkmHQ@iu7C+J-F@ zCY3|w4uXduMzQ(mz`p?vpi;tlkjM$w_-l4D`+*+!poAmnhVrlZyLZms4J$pAF}0+7 zOL18h+erfOeG0OU8W?T!J>T2PjnWmrYnc2f_tl!a2_KG-)xo_{a>D=g$w!CdrJT01 zQdYq0z0&NAYq-zEE0so-3@zSqV@nOAO{vbJo}Z(B>(l9>OtQ;&Zwa#2%6Jow^5rHb z)#NOVukm}wsKq+zS+>fH@D0}=3fPbsh*K{sCu^I4Hu*4aT(4g#=>9F$n|Y@z5aEf_ zM>%-IARMj6?G)#P`@y3$+Z*|CqeyF`O$QFKAvBlsnf}Y`t4ObTCjmRAz15i(@lW}+a~l_X$&Kf zt*?T}e%2=ApRj8YN8ohE{m^FVl^tvJP!fIdcY5pfG+yKNPsw~E%NxzU#`}YjH+uR8 z;bng&oF3%DY-3LertQ2{FYC*aRfXL7T{+WJeM+$p%0j889g^YuJ zRm|4$BO2XyzF4}B3fOl9*Z)AJdHngU?C%%}1UnqiMCO~Yiu)tK78L*FpH}_sxtT7i zYUNYOA3UMrs+1PAYl=@H?iLrlW}jGd=GAp;1j#MRGP#91XP~$ZG~yrgnqhRs7Q_Cm zS)?QnB-MAdlN16CPJ0Z|rk^k=jtD^@sejBQ6pbTJ;Ikof(4_%06fWjQEIGKizX)>> zH;gF6e?LkF(zwbkR^H8px>LPA6Q-wzgIo}Wk~g{`eByVo&}uCHR4V5n3W(63P!7oG zv1G8Ag8*>|1vN?tg}FR4;x9xcD9j#of6>pZn`uY5eBzU{D(iGlJ2hPT1TCmZ-mVUE zV$h5Wib;I+&CwL5Qg;_}bqeEMZ2pIiEsxz$%D4u02OvdOT;U-k*H?{PMZjZo?q*qeVfaEP1eW zC$%3@ULcP}0eu9!3Mv70KyUyJqqy6AP~a<$20_;27oSQ&cjlG$ zctCK6>m6INvBp^&GrD?QHS5++ob^F;A-vmA+(^t+>8gs@2t>b;ZpS(CXL>$MZOW9kl}%7oU)@ZiSaEgw8Bh(;I8~o)cQYDvX^y_uono z&;9QfxG_d{bFSMN{ZuJ#j_Bak7QwM~!8&t&&oBj`mI94MuG$MB9ESDBPER1X(l6Um zIx$@?N;6Eb!IYE>!FALuz(T*nDPit!D5_ZqXQkkt{bvEwB4xC_Fan*%!=a$<@2v7c zzy&-bH>gIyf6z+ALtGPqkz65}knClXvNcCJW~yrOoA5}~nHMjVf@0h6Kc`s-#PT{u zYV?}nzpwyWqlF91(dxs0VL`9wQmWGMKd=B=rAqzD@mGhY4G_a7kDz{ihdlTC@ye&o z3h2%us9>V1W*OG7gms|WHVCt%_ad1fbKXuRigTr-o3C8Ae}i%`8R=>&2RMa_%)Q= zAm?3%fEs*~0J4&LAR-6O^2$$?khnVlp70~u77ix7cM!EyTo3MVlt8jX*g!HVSFliL z7-|H}0J2^d>NNY4y=w$^&>@(tEuf}h4e5R*)||fn>;xw49P0ZC8NdG$|Ax{)C~U1T zDL)!_5ETS*S3nLo1Y#F)5S0iKoZ@7f0oG4!(EAIZq|kFfY~yc(L2IH~U(oAn)emuM zNPE?fsz+$S6;dn_Y|a&pLfD4LzGS<{NhJrBf+SiwpmTr?pXTz4@S%qqe5Z>Vd<@1E zyax;fYKeZ_67Uda|G~6e5T>2M=!BuK9l{)+e7|#r)Oo?eKGQG%9y#(U$w3DNULH8P zMVM96X}+UHi_xAR2R(}9vy^8y=TeYLgK6)o^$9nrf4GrdJrz0+%_QPWaCw6U+&tlWw(&uO(6?zbyt%pnxCbh?e5@w2(Eu@Qe*uTrM%jGA=DWr!K zLB5-3n8?paZkQ2_c0^>%kCL(iXSSrKTL?xTZ7jhf*$-(22N7%SeM0;KU!>l*psy2h z0{JJ15gt9)1L>S=-Zet4y5u@<^YIH5UfB0YjN|$j^XM~c&tw^_N+q(u<>WCd2HgK4 z>o23?3bw6bn4rNuID~}Y5?q73yE_DTf=lBBcL;95H8?cx?(Q0##=YTfa?icb`NsES z55}mXcge0=wQ9+n?V8ndU4yb8-GOn4a_;ALtiF+Ff2tw5Di~a*(9mR#%{g4g?pk@msr-()jGedXqE!bjGx$#KhUN)`mJfCF+#u|tH06TslQ z_wNi62lKqAoXD1t7{}iPLEHg}q2d+|V4-fe{BW%!KO6j@n)i#bD+70`B27+ZP zQ&8_nt@nP&f00iixI<;+*)XVR_aA~RQ}kw0>LrZNNi@TMEKYS;)qbwL0ErUE3~FA` z*6EhkY&nIUkF-yhU5qSQ1fB)hJeO015WTP)6Yo%s-~r74ZDStO`!D<|3ts?KApasM z1iz{>>K**KG5XpZt-&mErSityV#bEd1w7v9AF`qskNUFOX=Y z*F3dP{Wz^Y{61cfH&Wr7!&5K0oq+sogKSw0a&D4m=bG;RVq;GG0~?;p*tmX%Vrn{9;!6rsW|~ z;NUy&2Y<^aUgd^GKufoB??=7JWv8TSKdwwLd$Cq)qKCiLa%`KqyK zGu z$%G%2K-=>5FgCQp4d@IMsW!TkTs=J~mh{CYP4bFtoeQKad+m4qp2e4!7BEZqIOZ zoedJsZb=gzrgTwZ6%<^O9ioG=P_kmu8(&!$RFKDpZhIAw@2C9 zD_gqr#pTShwlc4Yq*Zo8Dd^zY_FYz97S$@hfiIvb@=^KV1exvdycI$p2$Ur*j$oEUrpds_-@olJ!LX7dnfv9+&pQ!VRWjBhKs zy5n5I)&Rdst(a0Nyk}dB&2zd9+6+>1?Pg6=wr}%*&O1Q#V^t9Jc88XPRq(sWrOJUI zn}z@=mG_^6h={^c+HN3@vUAwpDQtZHI)pI8l7co)gC^ zc?k17RT&JyP=NVoHg4DSJ87IZ;XGcbuevxuyAQ$*8>M4(?Gz*{O;%3D;fgoUBJv}q zKP+XG?WGIOviC)lM-3WPamUfc4=iNmkzoLOn`s}GCEG#{Z1<(*tq!Nh_q{)BB3D=^ z^PH!(Nmo%4J8KIkpyL(eDkV2ijrz5Xgta91UyLsDO8*ua<&wM>^*wYEd%B1C5O|&J`R*-=?f4`b>e=h2)3(xOQMek_WzWi^We9xMA73-IEec}(FD5)g2kfPu ztGD`U~H{>w2yUn#Yc`SUTSdd_-V*|1@{Tr(9gq$+=lbW zn+e$gQ_;^qiVhL(X;hpmAgE~N*;-TeGh~m4@+;`)Duw^o)Pg+VporI2pi?2W)EfJw ztoJchO^+9xn|)RXelHN^fplwmJM)fJAj+z<9Iul~050GEDz$YHVE*}T#zlo?d;Z#2 zK#Y9>5+VutC9WRtw|i0x&&69iwYbRQ|7rwc8ZRYnXwy-R&rg@jIO3e=Wb7a?rG zsG+Z{SJ0mKDc67^S^j4TtZzf8%|^>787tzI6ENieZdC~hGW~hOO4s80*z@qC=oEl3 zS|mGH4?$2f29K6jX1+M^uUS65yP{F~ueS?iKs;Z*o!&>f82;WtNA}k$eg*_52oNFX zeW~)5kjvmjGO4bz@7B>8rUG=UUU;(n{>ch5|1Jxa=%j-;ZMhF%BpCZ&-PR%}bp4Rg z=_5d$i&UPYj)61)_0kP-$mM(eD)3Y=hxQ~3Tw!E#@p0@Pk&dd z50(9lCyPLOm{H9kHx8Vcy(@I{V*G#K1oBf2Sh<*$^)lMY;F1;&2;3RujdLzgP*kvL z|B4v}^Z(zM0rEGI6+_kpKwm8`)Dy*iMfV{Ieygq*)zc zKt4ZFez1Iqemw885>u@6|MP*3)>`bIFkR^WXTA!F!rwGPqD$R+P>-iPjDC^*jcGcvkcp0OkgS-hDeJ=|@JSUGilO3_EDc>d%~+eoD#A zlKlzR?-En+T-h->Zqi-<R}8p>)watueO43FIoA~J4^s;I{s zFGFT~pCG*giPVxtu4=RNfw2p^Sx(ds={*sf*Z2`>pF>qR(Mc18%^k>!jg|-(hH|>Y z`;DCc+GFo6!4plU;coy3D|z$Mzy zm^*|pj80;y{X$s4%I0t|yCY*)XygD9e-pH+_R`YP3z0&E(h@^qCF@NlK^n2B`O z;cFN9qO8^CA%7+^G(WG)3vdesKQ_b8Fp@ zqc}h5?I@-;f9>RcLWs5@!ono^|La&xK24bJ*y4bk`=G0MNfY)Xvd092ZqY3u-|C=p z=sn5CpdHc__+eEti|5bCY;_!WBQMoz6v?1;;n{5G>{>ht%~VlFYS9@%jB1TT>+0p7 z3Ks=^0;Ce&?O!ddtyI(0judNL{IY8h#Huw`#)M3VV$469f;h@&}LhfA&XgyklKheLfzGKMJ0q!TR%&DM9McwC;lJ*%73P zZ-%DV>AIuyA6zRb%$?9>7R#jEAeks~=!w=!*98UdBTRXzrfUjtfTn;xid1hcQClA* zJ}F8TM9^N4&R+1JHWwLe0wgJx?OznEtwrV3j=virgNug@E9y_%0wza%O7h73rG=mc?mJ#yv^ z$>+Fn?izJh{Xul#6KJJ&4J0J`seK@G!ef|QD6N{jI{O>a#j6-k7gf>9h~In*Ed1+agSn$02#gMbyZgMTm$%}-wxwT zLm6tC1a!-*l0uo?jdkK%Uv?)5sw)`T8o{04vN9h?AmK9rT%MnD>3;{&gsVJ>eD4oEqeN1XXStp^{sTK6yJ;v=Lrt#;<7%|PsP%+IMoJ~Q( zSiqp-&uU5L$ZBjzQWzHcn`HjPoM9p=A9mC8!Fb{GiT;n9qLdiOVorF{rA~_9VFh@h zeo$;|O)~TilxI5O?@70xb-$8dy22{TLq}qR-mKei`2$#yxzJn$fWW*!qLMa;2Zha6LJGDF>fkHMBhjUqC zL#6)BDtv;*TZG}s=*G&@OW#~Ia>yY&P>J9y916`%aWjntXK~aahqZ^dLvefaQ#3k3 z)Z@o|=6vWzzg0xO_ezFrJ^oVw6tYSbtghpfTYXbihwCj+Piy8R=i1kd!N>LTw`J;c&ShDFOE-G)V z#YvTGLKr44bQ*5|)B=V_wA0@)+8fv;G=$>XO{)Ua)f=wBEUCKQPs0s>p_M1=>m2%z z0#iHGTyVVx$XW5}4kE%O4yDv$Ngq-%#uS=u?gB8;O(SNLDKTQY>k1GPCAS6(P)~P` zsVCs!$7}ulcTRXISn6V8%wa^xvQSY@Qz7gI^=%qUP#O7Qb{?12kbn#aX#-e=W;kKZ zsY1hto4uzBGo8cW5>9u(k`>3M4Lgy8W@tmae7X0p$)>em;(Q5--OH_MnHO~xVd!D0 zFU#=lX{gjDoSTtrelY2R+d&N%%&vj_RjhBBjBopqX%SU|%$Ge~Vs^unJv~@I%{54V zJ+TB@xavllI-iO!U#Win+x=G@VWuAPYnE07VF<#d90&jVHh?VI`?g=A!cd`Xm;vAN zFgyv+a#OZUwuQn>;ej|UljMYk*aO9f-1`GviU2=c?PGp){cSf^LM&hZSMO|jwG&H)Vr8A z^_X^vN9^;ep|;1(KBDcF;=l@NUE84U`d7NLs^+}bM2|pqo+P;-5xP`7ff>yShU2}Z zhN8KZE)elvU3>N)`i0SZ%h}mfJl%EF4{i}AmsC}0Mk>5iop|O$o?_(kITLmJ&O=l5ASSbHuERx@ZNI@y0yj72$Gn4y^ z{%TFW)lY)nq0Y<;oWC^UtZilb)KTTzXMv1NM8Dk4@_w`06#BwU*sD&A7-ESHYFrG( zlE~=2Fsc*t`MUfm7(SYU0E?iD}P# zI{cuf(3Vwk+He3Yw-qQaY$K0hx{0&KUA3H*2C|=7HO{%UrnqYfmLKQ-S+Oc>p+DoU zRUGhKwC89P8B@ewEa-E^00?;jwGh=|?51M>x^4v~%<$LcTYs%!C_f$}a<$65zgtea zQ|bF-tw0#-)0IwCr{e#K@F9PB?(C>->l-55skWtTO+rvaO5hC~!5qB(%H|bIzh#kE z)umS^G+br#)7~9pJ?MDlL_@SymiOaM^=F{??eNpkWORs`S4y@-D}=3Q!HrB`2bac& z!f>@g;fhaPf}Std?O0yS+){lKY2Ajy>ja_7sVR0Nz7f$Il*N}~Fe)yO%w)ErwbV2n zmXf^P%JN*{OzG|PSK_5Ny}71&!h>m0o6WW!ZsU?KSh2sEWneg#0&w>3f zYZ4QZG@ryi2#CzjXCub_(0jMKt8spHK=%sCK))Z*wDZAJa#nFuBs>#^Obf$JZ#~ui!m+*<*i&f9B0z~!_fRU68xwi+MLeR+&!Z6Swi-+RU zfo<=(uPL+*{l+zVL(_ru@~-XSc`9;mlXNaQsgzE^c+|};`m!JB^h#v*5>axMOhsF{ zMvx9VkK9L|pU7$2Fk29ibA9lkHrw~y>-}g@8*lV$XSb8*@nFs|gqaF9OE>DdZ$8Kn z&>D#5a2w6nxpnHQPm~*}lS7l(a6;mtPnGLDp7+3eStCd7JXHaSQ_2+@35R%`6TiUv z)doR1{PKffOPYAolS4riqgKlptk8maNXKE_$9pn6qmmlV@4ZVJE$F+ zY*2pI+s4QepBNDs{Tzmh!9eU5XAAZ>k`({;l|qCu%-_c}f(sD}5Kf-Dg%MBXogORr zNmgHmm#IdBOWK3}yV--+AQ_vFkC&+L0vPMVHzNU(h^*=-G>63!gp0sjjBl6&2Sewi zBZ}KUy}0-zvx?Eh6@HI(#^H;65+V0w(H6NjbzjJ87H@pJm*qw0qjzk8Jg=YKKzF=@ zV_pnjbVw2k=VlH851@RFfKzo^#M`u?Mi4rX9?3UNA zl63;r4|dBSas34TFE=|Muhp;Zai)r_mh6l=es^!Ykd22qPNZyUKjNfdpPgW)OopQh zHSXe~IiLW({q?f0_+}DwHdhQe)aN~$U*2`lZ zBaMy56BE(1{WXN^kddJTHhsHs8xN3OJG7_6;=ycIA1%0_yqT#p)A;J^@pv`!>bt$K z;wYoNkT}C>Qmz+3!;H}0Wa&#O;(mGkqA>A<5efdFt7YR9 z*88$Ilu{5>!2;Dm!^LD7sz&4Y`T#0UJCCG^pj)XQykSf?Mlq|r;I$iFi2@u8_vgI& z@V?|-gMo5-#k%@y%8?9#;ZPl@)f-#6iP7k^g(oRd}@;~BuS zqn@qSLhQm^$2`ESpd-v93s8NY|I*I$_$1shBeqcmzRce6eIirncxkwBsc_Lwk!2rS zYB7x9q%3F)ccp2Vb9iEhH6mt*nl5ds2zY%y7I=Bce$k_~*k*c(=?Lm8UkWzPU`<9L zx)0}WbDCg%xen(A*0fj!1-i~oi%52*3Gu2AW~wvp*3$83=s);s1C}3Hi%LUO)W9)x z;`dD%GYgwD1A9SUR&)XN5I+0<3w1)zEBavZ{BMJVmW+2dbCG8Y)4T=#wE} zs^xPf@_mp+&%+J_yYAVh@uT}%W!=CC$%OaoE5m^+a$a2Rqpg`q=EE(*E#>?ujE^(j z25YrG$y1b8_mO-*;6*iZvST5Hn9iM_vGBn%hiA{f%9 zwTfuKYuW^FL!Gz)se!I)>+sGXPdB4sQEXm=+m!P^jjkX7MIhhG7c7{Pz`A5M##y1g^v)}NlDxEYk}F`aPoo#_;z|1W~b7wkc+3MC>XR$`zhaAa(ZFb4EOkS%#Y9;30w{hgbrjdY>MJ4v1VX&qvO@1}tu9dKzNj&K+A*ux1* zDBj$*-Ia#h(}<-p6A#f7w@*>t{&Jb zoIU@rFPqIM15`%SLTE(Rq3y04sN8&88gI(9bontpY;wX?{d)@{9XwEI@gXXkvRwK9 zrszLID??zB8??gyQL&Ra`~FFX&|(5FWD>(3X}U}CbHkrqG?Sq3B{i8B834Dt z^GxUF5Pa2}30&p9$nbHUPB}>7`di_@PtPWrQ(t{Ny$c<1rh4%Bn0vwGUDpW~jX)=rS-HY4_RTuR*FFodzS-S4ZE&is@_N20X(H9UyFPNJ{lfB; zZygEJwMBng`%^R?@eZ={0UHK8F)~j; z@Jq`yD8%>i@yQijZ_LCLwB-5f+|yt_ZQVKvo_Jud2zmM5oprc>Y|TOk{{3Wd__9E@ z0zYfnOyAHZ7hNHmiJ} z^7|{zWrgmivTvb|t-XZA#D=;ejTtukP28H6_6A$E9>HJD3j<%1dYf(WsBk&3_>!Yj z&K`r3GHuyonshhs&oNfX2*V5VN>2(03~5Dp6xEnvzD;E!d!e#RKBJN&c>O?!!zTaB z#)#?$fZ7++(;ml7c&C2qzJ8L`2w*3FsQSSvxm(;)M5Jv$Zs604xVx6S;WStNmw6y- z+fQlOU_#Hal4+4GNAkwLn;PD%7_4!W&cLvCOsmSQZrQN)pZI|V1^o2rRUWZ z=TS3wnmir8bx+vx>(THM`)HO#0h<;>$gTo_8m#uMdNSG9Hw91yXK{k^r?>9Ap@W*Y zlg!Z4Ub!Bw!j5@^Z>LY5l8>$19XXNG4>cUL%J6O=$PcS;tn)FqEZ{MxYFoAt`pPe# zj0OuA=`6gv%RopMasfAn;L5x4m&Ny*=OUT=Qu5*ClAx0G_piAFObmi`hW1ilrXYUa zg+(6%Uw-?F&-|gD8zEO6=efE&W!Uf)55G`P-9ygv$3Hfd?*nV|zkisn+5uT*sl2ZH z64GoGxs3v5EuP493LVm=`q~m{>&HD*+ZTXWBQfkb^Rfvulf(@8AoRmM;DvV5EzKea z`%2lt3LAsnP-C{|99twqe)`WIq-@!|%(zE9Y25 zSxTNFZ6yy|3RUN+72a{A<#(9zFux(2f*)a#g@&$mbLf-EM=)GTryjPbudXZpdww(9- z{%QL2KnmHePRk1a!Id+_L$czm1LY5xs4)0ipS?Kjo;gv8llrZBd_E;^WIf)O+u~Oj zPJ~$vJa61PaZ>B13#1@Km|SB?<5?Ij6lda2qYp5b@O9V(j;5D>oPA1pfJF za~CjnHJ^)0)@;M#{`$rLav?Lon3%-_?I3SI-~1pkP~5&HaS+S(B~jan=(K{IQl2jV zb`qh1C@y>Z&vokZbPIsh{?I+N!leCB@b!5$~zWdd1*dqyO+q(O)B z!l6pI{LDgC>Wc%+*+Tc4q1cnPD)pqsmY_kf8$V50re~?Ipg{rpIo^{;*B>gpFeEr6 zI%2N!^UAjP#W%Je8`FmpzL#akJ+~cD(Eyg-)uEm1^?3zK!hXJ z)$dkz-8Al*li}TM2xwMK7KE6|Psjcs=?*wl#G8}46PNV+C+o#+e}O|skTNT>;3ql9 z;u<0(h%k%dg)VcHFg!RFgHVUrS*>EK%{G1Z4E)MGH9MZ*D8cA7$$yVOwiCk_yu(<; z;AU;hw0(M70r+8^+0d{#wlXsFAw#yb!#*p|T2n`8S^IX`6Hdf^%JCVG8f2QAXf`cV ztjBS|zw`ycdclv&k(K*M;>u4)ens-sj<&i+EO&QI!x$5US;QRf`J&#i8Pd{|d;^Wu z2=`i_rz{{8cL((u^zK6gBoDE`ZqQ3{Pp(VvpP+^4l!IPPgVAPef0_{VsJ`cOn~bX` zHLy=tGhAIcfgAL#ymg2&>A|2KO`;i&275~wYv6*OPeWr+I|tBi!saf6Z$W#gmHj+f z&c!lLJ5cVq!nYa;0y13_9tJZ`UB$@8rh!INNAGBWCAR9BW*9m-a>j-JhkYN8V!7#_ zT@|2uL{)5s3SBn;@vDPkFZtqep>|+#o_63tlw4K1h1I^4b!_A~?qA1nO~W_P#5Hvp`SQR^;oM!l zlLyV83D`S5NBz1?5{xkwhji3&lkw_B&TRlFH55EeW?jS0q@N0( zLE1*_+1u{f_xv;0%K0K)x$rm5+g@NPYAfg$HFk{onS%j`w8qgH&fn-Pcw}rZ-$joZ zcW#AvrFI|_okuaFdzFuy!rvmP13xd%s4|cnCz*QgCh&7~JFpwb8imyd>VM1yMFSpl zuA)^8yBy=`AR_+-0{7KP_XZNt2g#wHpj_MReU0p0ugY|NRo(abv8q6P^_THtgNebU zrU6HahPOpU=Tp?t?iMOd)%y2FhvE182l*Nk?&D^idXzkUu5NdBxJdeK-Cbo8x~n#c z)TG?==xv^}2y333RLP%EM8o{@0OnN=4yU+`%YmZR5RQX{5AQTS+rQMB;gQt~t)7FX zG&Wij<_nxT+ugQyZ-`sYnMThD(@w|X*5g?MthmX*WMlMde7BajhY&JV3UF32(2ChvF*d z>9iKbIV^L?sp{sLX%QS~6&EaZHTjV*V|MF|0XMt)DmNnrc5RL7bMM;SVpc1G%FA@Pw6W~{g8iVTB z);9M1T+u#96O*2c(-`V`7)f%`vq!&r-Fr9O0@SD|yTORrcJ@43O5l%4; zdUv(~ck1~LPHo;%_W`295oMSL#o0MrrBIRiNS)Iufn2a&YYwXK)YfrUZ{UrL^GY&f z@{x3(39JbPzN;D?KisqmRaPiDNp4J6NZmzW2=LoRYgITb=a>yR+3mrLcj3Mtu}^YDezETB>Rfu!96ijrtPK^I@Wd!Nv{R-(o7&3Ru6k= zM8KuJFfyPlF`jVU{i5blYa#saDmt-Hc%`EN%jyTebDSDzO;R(@zCHWQb?a)5-*;+8-7Bz{;9nH zJz1ok0i=T|gMVoYPX47C;;kcy3x-p_#>1DSf*|X;s9fWz;ef^dqh|{Pn(tLEZ94#o zFQ)afFMajBJt^W7^$+S#z9Irvl|$lSja4-35reoN%i#PnWx%c4Gl#Z~rDg-z>$JvG z#p9a-{dKCzeJA#Fuz|F^=wss_!%@^3o-zO0^9NZZ3|6H1a0_P9w*ZAKQ-H}S#qYP*JPuo zCNuJ{TvM9aQ`?``*`=W294o27l{2j>ulUWO41!FDEH*;pV9sS^^Nh#zcl%4CKTgli z5@~UW9U<|48t!+|N_kwp zXLmc<{`-MU9zYbUZ?eQCV<;hN1S$LPC7Kw*_)DlzSpIW*TqM%^?yh`wcQ?nR-ZRv) zM}LWm>vt)HmS4EABq(TcTCIWubt?W(`G_3c)E4k2+}!s$9;2~%mzlQ6b3fdu{J>!V z^hK24Q9kZ2>$wCllM!uT@GRLqm9tD+RAt%>WE&CkZbtr{2HA}l3U>{O6KC24yH(+R z2@j0C5uqZw5n>{GKrDcQftZOmEj~wQHFS&phemq-(=M(3ZjUqiRW<5%X`^0Pv-&m> z9ncH#JmL|jkvGg z2IBV*C2Z*VP=UC*ro;U?0bh1}=sbw$Gq!_^IOV20Deq10t%DOKn5?bPiR&}#1$6K3 zdz$_*VX^GE)I0;@YRF&21Gw3D_op<|7;(c;5q|_T;C0p*Ei{$>sUVmkOb}?twmzS0 zK>eDRBqf5}5N_nP>@Hj;`$A87LehTv6}|L)K5b4>RCAqj^~&hhDQkO7 z2lP!ouC`V#k8-c>|L*nOB8omT_5plGPDn~KD|hQYq}0qkm!al8M49QEx?dnB3|hV* z`{6$VX1YqH>+N^Q<1lIvnofX2Wjw@^flI1vPkZIlqtoUCYAb~{$m!^IE%oA@Gyi8v zn3V6bn7kjA-YpO1U2UIZa3k?}r>peOJR_OJO3Pz^J$WlQO{jA{Uo6Q;^xpgxL>?8WuRgzE^c z5waEelCxpbh}N42{+41E0dLZ9^ZfepC&lT32@%KkyO@D#eqYjI@Dp_4RHH)`?~3`7 zZ}ru^npv}o%3Pshuvm=~>y;2f0Ts}`koeo>gPV9%$9 zGVWQ0$%ttQ2l>guJF#u{=nUL2q|+N9A5H7=RpA>y4bB^Fp4X;`)Dvq=bLX&ugh#gP z&bw>~2=9WjhoODJLULS-o|h$=m%b^JfIiPM!1$Lfx8*>i*T;&3dK4MCDwb3`gO@7; z81`a&?Q?)@X@s%-Hb7)MTb{D+7rE14-}O zva52>tGP-w=nAAF>A>1C*?y1jO0}UkOTR#&jl#TjbcR9bdWu1)PQ$k94b@glrW0U3 z$mlN+=R2F6^Ry#!A39^saof1tkdn;7YWRGYOjui+j=j%wJQ5pj@}-=O6v?@X@|EI- zvfdL;@@iI4jyugs zo$H}=5J1!E86B5VY$qdBh~J|gY>5v>!Gd|I{IrK{6UEMEm38l(wujQ)Y+JuZY#CN} zZ*a8U^KB9XV=C9=^z~M}NEId4rT13$q_+G?CVjp@pEuo~9Hj+H?#?~{8h~FR7u2;+ zunP>r4yHMhsuoq*c9?lFkf+Tm@D0;vLK~L<>ZezLQQ*fFv6PAAiN7-HW85{>i48}e zzq@lS4Zfgs>|f!Aj!Ai*HS<4_%lSl5tm<1X@>C@OroRr#+)dT%vdbst(Y%*vh28%l zU6UCBV+XS|*#Pv2cm%Ks$rO+jSs{%h|1sMDpgZcDRGKRV^mabb+YU&UWaqRPy{{w+ z*_0HGE1uLBSo&M>y8^zu`AM4@^ga zR|e4~yNd9{pBX-4D*bw;CH~uig!dnUy3BGBsna77-#(Bfzi8iS;nVh#{aT&{57T63 zh3Cds>w;(-^6am$`Q{Zyd(OzGeh3XfOSe0ZbYY`;q^7ib+SUnjp--cnxxQBONRP!@ zbk&Fsn*d~pwmPaEr^jWj=Dwg`|LY&+!E;hsOlmYdY&*YYrW`-_pTFKj`R3diX9FX= z3HIlGJFqk69aV6}h?G04V9QnWX^KYR6OOgu6D+o4h9R1J`dO}MDxophAt3B=6BauR zr2y)?P@edIs_!fR2Q}*(Ig9QdKrUY0is#lS%-hHJK`5o!ECU={&U*V1O=7UZZ1g+!Q=rxg%cS~ZD){@(tRn-d*9D6LfM z&}@H^g;IpK*hIi^eolF8fsuG1k?R5c16g8vNS`Z2DWyS6VBeSKZ_J8RWmlt!_e8Rv z$*xom>rOY`rqvd*gKmxVY(1z;T=1b*$Q%vXfF}Ol2T!RN8)OO42nnuAd^oRTq4!2C z-C++nc8}V`C&T<26%OtslEBBq1U-?@JG!v)n zu%g-2a*a_$@btEy*ePO7aaD*b*lEYRnEU=WVP0qkdVeMEa@+w;VOxu2GXu*05S?># z{5)>*6kwOto`#ravYc=Xx6foEEpV&1)mIO*F7}C;Jgosx^(Gs5U>7Px98B{ii6_+s z)_C4_purdA7MV9$|IM1@JaT7@3WX|=&+0fwy8Pi;@*&}O$kOPOIB^Hloj%yrt>SwY zb0$&_cd?uaEygA-?t2Hx?OZFz$bG-dP(U%m@8WX`9aI`VCbmFC9$e~*?;8;kb5(*6s4bUM6T|2c{6z2X)*^ zRpEzS(`Ji^=6xPPC9(8re9RE=v~AJZ2=m>zgSY-0Kc-8oi=B*vUn`L7sou|W@`4I*V%=J5L*O%>#DjC@RjR@ zG;Ks+fu)L@N1TtkyzB#6gI-a@~AXy?qX7_GPBh zUw;=O?Vq~}(~%wLJBV9qD@~D3;-`=Zqorfp^_m9oR|!vQVf@7s$U4b~rguph5k~s~ zXb0PlFP!-#pFn6L|JGG4beJURpxXN+J;kOtDEt+BBH{<09bcI>=mUTaEdpK&XMvWk zJLq{;-|-A9d+zN#=esJmtP`$kbl_Wf(^|JLSfTNM&N3oh)*>DxYMY7pQ9MO1H=kL3O++~JUN4Z3krF&6M@z; zX%V-F1-5pYnO29sImDyvV{f2*1wE;Cn5XVFXL^ix1u(c13p6FNEImCwOmpI{qgPOV z>hd_=`)z3$%YD8cqeB^k#uC~M%;|k+&i3T%hFnXF6EKPt`mwg#YY^{?G{7DII8?}N z79nsHa!kP$zlVr+NFDiLxx*AGML+=ru%8{(J%nd5DdTa#$?}hoZVa7i znuKEQ6l+t9n?47GO8j)w6q^H^^+x3q%K^maE_|Aa(6r2p?y&ebWNQ259co6UdVkxM z^xxT@#QrfSe5OKB=K=*FSr&(e=CJJwst@u&>Y+ZE_;aB)wCE)o0cq_6+tSxRp%`?J zjt{h5t=}!5t@FmDK-DNPdeeoNn(c>tYlad(9oB~JSH>W_-5s8N3bHDWPtJ&_GC(7B z-A!A!c#0xhjTu2W`XF7W-P8PczeSK40e6d__%YdZfQcq28Sv%@R#H&DAI#XUFI0ia zpbaV@#z``-KI5SO!ks3T3-L6!X~>=6DE{*>8*w8*Jj})I1=690wNk~0r(Pg6+-B;w zM61kF1(k1VZ*dOj71)ukZ7%Zm&jIscgyZZ23vdwxY8j2!=@nPI>s1z+#fP&{MMx#e z;$lUp0I>QoU-J!}HdQIN#;b0w(ZNFac>3emyoVFWr_|ReyY*zz8vX3*X}5r42Qm3! z%jZ(}x@~|I`SF~?qqPE(s*hd(=3m*}+k60L_s_XUw36AX02c@+N(=-HU*K^EjEFfJ zV|G(O2At)o%krxqq~VHOWkqB-Tsujar&3%2oCr_T@4md+ZFs!95X7#p0j&8o8MIb3 zZ+(n&raxN8&=e42k|yga$(QpWr*iI$v-zZy+vcnLrpKoD18=F7=-C_HCN?_bcT*9@ zHYnA?!+;llVYQ&E`;6g~WSKuc1s_)|ZJR%=EJ-{evK9;!?l@bP1v*`hwhvBUu{HpX zt%2(wjG`Yr4L$hzTx?}lTvxKQ>0<7Qw%C3sH&!?vy|WmfJ}X>MZf4HuYxu4kd{t%p z;L$0wG~cgitnEQJ9xe@ros-4WWz};qP5yU)js2MVAI_7vzTHJ0I^B>r)(B=L2t_F@ z$SbhC<52OA`?`5+YxTrq4(QR}OB`$`H?b6WqKtHZ7XNM8yb{8CQvA*Q*Tr8RaktrB zYx-n^*lvQcg0(duZLqLJ6qoBP5@?N5I+5|iaVQCUaUhrteL1+_1FlCBZ3o(KQVJ&0 zhpn4MFzhS-h?(nIk)0qjcw3|R+R8&{ksYxTDBtyGMy9op5Zz)c z0b?fjcr*(=6)_Z}G69=aM2-?FjE%Fgosv#4WlO` z`M>X=GX+?qS!m8ry7?WsYiaN|jYjF2YdsidCdbWuVM$v^ZkstqppO4wNWsu4jEnK+ zVf|E5oF_@=31itOs=})vi7f7OUYQVOHggDlkI*s>3=qbrZN|*KCr{<-I?Uwk&T<57 z@7`%~#B6-#_M%kaUz#zFIlq74$3x;g)r5-v)!P2~)9?P$EX>4@RFsV*oHejj98w!P za(5Y&W%X^PnI&FU8D|PkA}@HLHlf1J>c59tR+VQzdbHj>@e}K)(oXCj^zD8L1&=6) z-9lC7Dfx*IhlR|3sf)uWs1)AR4ztH`(FHR?3w%)6h%$^M4yE z;YwrFutTv}O3=i(W2-Do_Re=8TshJ(f%q*nXKbo{1FQ;>D*>sDTr4sav~>##ta{h~ z1JVCa7c*(m^|`jdNssRLdU_JiSCv3j`7o!{1B>AB3q?pHm>RM&L!-5~+Ezrvru&S+ z)%ox))!FbM93C%6Q6pU_3?9p%+!%O#cxp^|lcmvd2@nn=|9#?-bLN$XSiWj@gvy5# zXUBlg0518E-wOnj>-(RgAxqH<{U=sIWACF;Hu8~S3NjxSe(|SmjG&hfh9`FHHm0TX zL1AHqu351kA|DS_N{{tUGpCBTOPD4OF$NKI-7+EeZ9J~O7HAf0n@5u_@Z;e3p@P1M z-e`pc&=0{AOjR3ICSX`KdK}F^iiYlYZ%%`heQ7izz=nlt7_kIfs38Al%P|fy@3-mU zd5wz6y7D1n=!Y*_EQ_A+cT;+c1O~`sCoCF{A&sfVK|*h|{rzeGc^<^HmBixI|9h8s zE=Y;j?q)x~OcfJhB6)qV9@1!+@>0myzqzLu&oPUu%x_&$qW&g+>UFtJ1Rz@Rjln2b z?)c@EsrxD_TY37R<2GSyu#4*P>UAbS1|tV+MjG8g+^t%<2UL@(?+^|@`6BVMoA$TC zA9kXH*TSIdCi{1pqix6H{Ro+R$71a9#KU;QOZyaO!Uh_oLB8&>){U-w-H0pZ0nodVVniir2EM5E&|T@$%czbDiQ`|aj?e@RA=xP zE8{9&K!B`F6-%qYc;b3AbN{5r-K@h*hC(b3M@BhyfZ!E8y!l$gsWSdW?A85YYil6X zL)z$}4*aL{H7uKqOgBv#k)v;5n+g(f2-sszAj)A$hh|M z|FQMX@s$K!|KP;7CbpeStch*gn%K^bZQGhy6WjL0wr%d6=Xrnc?tXUvxUE}V=Ub=h zsJpAq_4c?*Umtv6F2s3BM{fZ}$k&U0kJ*=8DlO`oY5aK7sHxF2yRP2xAxwGC7eOol z8esWlijq>7a>SX=m747b?~7@FTx$`$!vnHnzHJn8Y5|=?5C9?yE0}MeN3~My6v32i z5v@ptO4UL8k_DPI^j(>&IBffeS*@cSh+JabXV$kU3am=5(r<;-`Fvhn6zgg{-ZZVuN$w{t0P6+}rv+Sz-KF;Hu*8dSZ5m<^UDdo2NE21_fI z?l8u^)o@O;50=WVDM;)Zm~4<($@;OCxp$;6J^i^F-(uzNjK)6`aE+w2A{ ze`0!U?5BXom~!hhhr7MDKL?bodjmH(Gb`i$HY|vnfW!;sBc_=M&WCW2yurgn zLCB%QjRs!_kkDZc>LAa`h@h)mgPtP5(o&0aj8ah-Yq&dAGWHlOapc&NA zyAjkxdFcT})$s$PQ%o|0TF5i!QAE{gpa4)DJa~#qAtOQHpJ|}LGnouF)Y{0CER4Uz zdA-|}KrYQ}w+1dr^f0_PtBRq3AZ+$qfhbQi^m}!@A8_kyOOFVGkkd;Y1NI1w3eNZMHs;@)h@pOFe1P{@AS3xoW?TPo zg8z8lFXBX`!X!hM1h#~j+jNTbHh>Ij&|&)wjlx$gf(ckngfa`W32Gknn2a;Dc^bYX zbwB3->%@ts1D=Ld0J!V#IHDXwIblXvm=@Wv9oY6Tb9RiX>V4#CWVFs*&h1CR-2$a( zhcI(Yu%aa6T1aq!WK+bReVBP#T`y2(ntNcV7X#eQq|-2l{e!tB5>irtwO6_)4U&|c z?3)$t!y?YYH_XzgV(*_32|}yOfZV`0Fq20Q$RVx(6x;=Qog|FdhW*_SYfFCMz$}aM z=W`(ru*$F{{y?pT+p1PEjnnrZpae1}hil@;zn)D4L@IRzi|53xLjAj{c!>rqd8RT+ zoRyDY%C(0)$rPKQl;i+xsko>UUYPk5X%KK!Es_S&0%0EVzAAzX@fLbEDkb$wL6Sl5 z2m%Kz@lY91{^BANZaoHAEw*T4`bl$I!@_HTjA{LzpfvsfY%EyAE+;SFie$qb00?uC zdxjc)o86;$dlzN0Hth!uOqwk8jv6sY1GbYYDR4`yvx9j9|9F9Z_Y`K%bgclys9h#h z6z8`Quu={r23n|G32`%laV*CSF~F*REdXRltzJcv6W=a&B?r|%1ihXO^Aao)5eYt? zL9BK^E=bcngr{*aPyyG!kbD2w_Eh-G&q(xCh=Qv}LF`1GVr6Xo;8NSm;5K5goKS6HmnpLJ;e6<}|Q`3m5gEj>&3bDBRpTWMBHz$QwFp5G&0G z60VScNK*IvEGf|q5 z908xwh<4sf1>R`cQ_<V_ zwkAYz>>p?0s=xmmeIgdcfP_f0bXOYDNjst}2>0>43p0@RwA@PB2Z{FLHg zpv^%hEu#I_;*vz@iPDHYBL30KP@L6t!h<%SsmTVaP+XK=4CSAkfxd|ejZi@iamc+u zRlpfIBKNNdac?DX%w*QeDXN6pi+TB@52K(==-%I&b0!R+N;gAz~+K5V&dPHP^ z_1ZW&Kn8e+fYc=+%2ZFx?guHLKr;$@XZ2B{HB2_e*On6^MdxO$#sJQG@Jl7^|~?ngJRoTf)p6tu)r6Bi$kEO@O-JDvw{( zY@i{CPTBzv=7vratpG?a-jgPIJ;*(T5NNJVNQp-Eevgn1u)d27I{e!u0acD}sA#bf zeVF+uxoHzcP{V$Nl81Dd8O(_#(5s*m)BHVx_c);(4Inmd|Cm)w3I!c{)c8r{Y+EB1x-!RNj9^NNTPX7Tc#+ zGQVoNCnIc5725-9a*yvJ&Q8M*QGBbw_Jb{9=P-s+_~ zB<7(!`AW@Gswehpj)T@^00$GEde@>i=e}qXgZCq|EiX6zJ_6rq&SnbJP4h9~Q($Am z{?6KkqMht-n9S$ALp2IPy^v&&8$I7;z-YGjC$iozIEY$KCvxT4W{eAYd2G9ba1{U9 zuwRY9&(hYm@+iFqdY)mOs~9A8 zGZt95ZkDECY&gBLwUUD#=@afCJI#3d{Nu(}d6V=|npZNPZQ@j7Q6SPXYe3`=0S$W` z;mf4H?_2xTr*KGuJ>aCv^JY(9z1z{^uTd+Lwd+ms?>AY(b}z*0ruBD=J1qhJo`mLb z!BVB|YpEiT0dE?Obf71e%Y=cr+9rJ2-1?@jt~6zAbvI5msqXAQ$7r; zEW&g@NXW;2bQENF$LO_i;`^2eXJ*PDGvO9&;zQxuSv2?SCIQSrI9fH$bw!2w><}f` zl?9?23uIZ754KkqjW?R{k=3L5k^=`(&$dig zKDsTD3|R{CS+1`>?>DZ#I_W>EZ`RO!yL9)ItGm0mpD?;7*?c=Ifv^6(*=qm-d=K82 zIV;0Q;rq5pqkun_SWV8BvLevhzE{fCjh|jGbd}E1pnFS}=T@K%v#&KDTfUiLf3{MD zgV|~l(Ec)0*`vPq%vv)KN(jeIHbOvjNv#|Yc)I|6ZQWXVKd7-DheB5KJJ}K$jVKdXw z*O!?hL1D(T)4?bg=fNiWM!*bT-kV1Clnh6*tL>r(m5g4NMk}#qp@SAeO^}gl-@9;S zOMdwL5D&Uy$7b zh|pWcKZ5@k9A4(o#Vp=j*SG~F>);D#20oBNCflJuDCa*+jqDPEucLA2fGHAKTo8s$ zjdLeK5gsp)VY6PbQY=MVrA6;HK*WllUoFravRE{@8 zM!9e#t1EDv?BUvloF(3ORP{PJu>}+Fq6u3DKqfvFE@PC$?1r6B7E%r10-tn_*fNtt z;AIX}DdH)Ag286E{+@3I+!H{^CMru$i#A*-%ruV9{4p`4x0ow=`7!??06+ZgwfMH9 zKlQCtsxTx1v8)(>6Zo$quPpU!vA*;ge5q{7Z1O{^(plXM%n63+JKH_UfF%>71xp%& z;#EvwGzTz=djT(8%jhJJ6%Eemi^hxzAtX&b_-g)L-C24OZ(9i9tSINjxpSyO^DILi zLIC6|$BLeH_vq|(Wodkw#?r}CFXS-PQ&=Z2`w1SPcbzqX$dPtIta2){go>xo)=N`O zI^p0f&!M-_gx#f*IXNeFRYzBRj2=)DZk1Y44+Hrvm=gD}f8?<>x@D ztq3^ZyBqQWcAss{UaA)*hTCl#&Hp}}{c?yT*IT6FHe7nK!EnAzJMiXIneo7QldfUE zE5FSj^SZ#WEhu&Twf*9>q2n@r_bjX1&!X z6(2RYw%?M=%BQgUQa*3u0xql7$Dc!h&eNJf`+9gC&=nW@;?svPA-L-d67rPX_B5h+ z_zE%Q-QClE-!WYMJHM+ryvfS)ZAzYLev|pz3Lg$bwb zZxgAF^`4ubOUn#v-!)=?CeqTbz5xFJ`e~Y{Wo)war}C`AG+4zsp;FHAc6}ezWR!%Z zg*ktNSoI`e?O&GxogQI(3z}K%@yc?YbYP zX2Y`Sg2hQ~#m3Fh6B|EmbM%xA1frCn9~J+`SG=A~SO+4xhAbEyWM8EAQON z%z4K_si_tlaeGwn3j^oq=N^PZq{4Uot5;m(5oyOgu5x28qb>I{6=Q0uc)%eIpN#D% znH&}Vvc5vwWIdijn)8ZdK+HTsMwcvB3~t*c=U<>P3c~D`E0`h__K@o_$U$Rj5jR@= zXZ1-aj|;-G^2R3}1O6!j02G(tm%YcHG`lm;@UWb!q}OJLE$F74;)l+0{j~}q9DNPm zH!HkSagJa;`ak_J#Y^$3jVj&a3T@d$i;3`{rEXryGpn}lL8jHQyqd8ihW$Efjdx3m zhB5ebwj=GfAY z;bIy5n%Xwn?W@i@;EU^=s)^qac*8*O|a#46GLhXDbg4D(};;@!eXJ6zA5PL`Vtv$hLN&Z4E4jmibKV6?d(S5 z#2%OAvlB0N2=sXYm3%B$VjiGM(itLsowF6R$Ul#x{eefyG-rqSau&?dZE{XAj!zW! zhnwJ=?+90Q?G#glZgx5Zms{tKe;w9$lK3f=e|yE^nKH<2PYgR`Nlts3WZ;~7IXShb zoR$*u-stM>?0uAo4DNMSirfzksN$+wiR zSg(!V;Xif_5~vvE-aseVO~J1- zY1t#uH0P9WIPvdIQDFVSz&OD}cD9+9Nzb#(+4_0sN5OG})MOjfy&2(8*{jqRI#B)mc>6qXmZ=BDKK(7fH9@~sb?Ch^?$6(A|IQ5ub zr!;%k${sA{$vuSE7`wYGrQMUnKfdlU7@c=$-9O>fuT&WPL6E{5Pw)(%!s{%Xk5A`e zl;O=w=Rwk`epS1FQkJ%WkD1ukZ%y-X$+_$fKuc_kB%yHmKlBZho{#_$4lpqvxNsU=)E3-c&sNLyv3$ zvr9qu3Z6zd{3LN}l{<~Y`C#3tYmk6P3(=d^alDl2CP%=rOIZJ2UyrkyRW`|%oRRMk z9P$2zMGc@EnWTkfHd1GQ5;Xp>bh_}3Xc=q32N@pgNsuXvkiURq{?)@TrEwBT*G4zctJ78?V7@^+dH7bBJXI= z2bmG)k5^4#t^X<4HDPdtKVfmA6k53j@I?b)r@hdbIG|Tmet&Iy^?2xHhxvf{WTVvW zWE)5Ak8_Af7#HT34$htB*H91ni zoR>yVaD}!2=*GJIQv&O|hX;P^v~Q?(^F$wltVYp=qWDWiMY2iA5lmm&Dtmw3weGae z4Z+DqdPyZP*;gSiu^E$m81@8Yhuc3}EgzOnH4SR(*f7-=5#q^DF>o%t*S}v^-b~0( zPVq1+yJ=4CpcT0>&iAXeq<8DI>j;p6qu(E)|IRk)>^Zowwe+eHM}RcfX4Sh4=CXiqxOW=%6rGvIlYBlv|?WVgX zh|`Frb4PgCAdngZq%>W5k9_p9m0JWQgOSH?tIrB2{ zqkAP|NkT4otHms98#4s8zj^RqawR&|s=Bx8Ov1Rl7aAT0(EH98SCxF}R6ks`ehxi# zy*zAXr6l;5j$hWRZ(gdl?6s?*@=B-PUAzDIaEi#?ue)tp8riCzykKnKLX@}pQ@Oa9 z8bSNeT^!=V=b;2R;aIEKjS$p-+*_d0N;IkE+9*vlf8%JJyWH)5#MgPH{pPzEk>#D< zb4KepoB2l{pt#0NP_efks(#;K7nXq6FDextzL>icwG{paO}y z5nG3`r4<`wcI8IS6>^(^7w91w(>$9r*lujFcR_-_CW4|$OW{`YVr<#<2E3uvGjn@g5wNN%VA8!mE7EkFKSfB%|f zRGemfGYx@yaSmaszk5!}s@dF8pN@54JKH6$Di_AB*4rupjLOQ+rK5a2q5L^EwHQw5 z=h`6-jM3vOYtWR_Y(s-j=HR0L6VPR!up~2k!6WyjQpr9A{a~MalTD5MAF&4L&D`)B z9FCB6%6iq5t?###8DnHclC7>pa_2y85TqAzNM2ziRn&?T8n%(Bg+nj=C$cJ8Qyn^Y zu&>&N+3~@GbKG!187|0$BLxOyTsdG9=$T2))LY(w0%Rw;&sNTMc!>zErZ3x2*|E%^ zFTXW3QVc@;PVdJHd4a5O0R68Bvn$V6!Lu!T7JO~5wRt2@${KyQirIN2=d_cHdA!ic z`N+JJMFame(;BN{#Kaq*I@FP`cHo`Q4At2voOYnYTdd;j5N`_~Z*__F1?q$j)CmJU z7&9i^>;K3b@KnTOvscx2QBxi0Q4dQoz0EwcKoAzbT-&7rh#xf5*2i;w$r2ZY#91^M zgLr3k^-O(?Zf%PBd~j}^c~u_v0$EigwT{R+yrb6lk0C`!5w_-SgSTBd^H)?)&A#z8 zV)GBT?!a|ul3dl{(jUd*@~4Js^S|UK%^@D?{eGfSFnh;4TI}wx_)kDn*R^Kj+)>OA zc6>3oc>s8?lk#@P(5y97-aMnz|8siqqEFxNRrn0i6BjDDg--<$6u}am2xs890xs)PcGR17 zOz1l^tYuBZ*%k&|QbWD7#08dazW07(n@v%=p^75?gk|y9+}X*~!`xz*c zJ-y@Dda6oHsb4JGZFCz%2>di4nFTjyUK^ZFRT&7(nPVtmZj+wl=lEk~&K}6dnu^vM z!qa>Qzt#aCq*TycgzG0aP07#DLG)uL){g&-E+bfHps}@2{vZFz0QMf~gxko3;IUAT zPfV(z!~$!l(`2PDi^pkUk33>T$6|{Va&k)0j3MYq$(2(FFpBP2Y>VO@+B6Zo$LqAR z!Nq;g-mRP3Qa2Dvt~UWxsJ=CoUznCigoZg!;GDTCLXDD#eEyH~2HWHW zyq!12O3lvzMun6o=&S=iP`mK3PS8?AkL1^@d8X)_fijdLv-V z`8(r4TjyzIYK^6^)sZjTDR<~9xb2xqGdS9NX#0Os!>7oN%?rntCqqGnJafhW2Y&Q~s787V6RYRx(6$I==gmUkj8%I8A96#sV{+ zrh=Jc?ru1ujD8I)r3Thdc*ZT_b(*bm?Yz&z4hL-ml!z6nA+@M&W4i&|-kk5Q&>vOm z6OOjoe6YmiU^~%)GeUU%S6AHxdb!|x!}?#GSq=pr<*!z3k4xW#2!b8qqiQ)XjshPi zgiS)?a&hW^@0+0ueO)8eOTOAqPtc{oc)wAl{g}}77SE|+cPaiIc4{^7Mj<8c;Sl3c zmsFMjzzxr;`ghM2Ig14i!IdIAIcq_pd1t;9f+CLD?peKv5~OjN9*L0e=?HIPyCQ67 zqJ(2;ggSmD_MhnOo6;=H+coc#Q00^V(zjr2p8-B?2GBtY&$N`L`9^!ArK+wjJCa5h z@K9ou%^Y651rB8QjbWP?S^2fG?$PO4)Wlo~5b6QGF4vH@J_7DK1PDJrLiPym^R{@u zq0MQSSrM+_T}n49^WClrH*}iP?t25+R}hve{lJm-$m=rDWE^Ic^cr!R)jVqO+;qJ1 z)U;a*#og-pu--XGiy&hKyADFNoVawF4sT;{>J=(m$2RiNMt1PO@)oZw037FF98v7i zuR3W*NsaXB@{#6Um5Zq@ZrmNfWD<1Bm+0>KNpa8(ehl*m_&(G8gOZ+2C`e#fi080t zzc>{ar^oQWZ}>ap-d#^AXD*5Ob#dSt77U0|< z`n@Tzs=;F{`Lfq>`82}%2q>?U9mYAB@26#E(* z?w7?D`8~S4@n0NH8svO*aqOh-vd%jEYnH_*37oc=nsaNC(@t=d)&L9oIfo8=8ozQf zbCm(iTk826Tp>g8T_7O9C7p9v*RO+{6}P@#FE6$><2N)B6ve_J#(9MEz#c&n*P=Ch z&IvCrdoJ3AJY%FvUo@;izPkLS=fF3Wh&!}|0sruB>laJl08{3m&Q8^727bO!5+lpe#2H&* zNHO7NC`@eY2b|b8`4^!{tVQgD(5jJk)`-N5$;L}dEX+CuFJH)H^ipj=>W%lpYcx1w z?fU-nrk*Dm`T|gni-qMlAk%bPG_Nt+Spt<0u9*|z7j0%R@1J3-glCT!s-hA9s@QwS z$3rXAzS_hj{Y^RRu11A<@mtjA;GcmQTX zh<%y&(^+l9waNXMz#WO)qJU(xfH9$_F{bEpdRuv?=Xn<`|e#14iVTJ(pBi=IJ0}Ix zF-YXb!zA1-AxooN#7*%*HE`SvM^BdhpAp}JJWR!5#JIdQV4BZsyxq+^PO=zzUl*R% z`fLG$5PST_h-B+Mz2A+!S8KB2Zr6L(Al|aBeqGeLmf$+q9`G7enj+o|K-Y3Qe)nVV z<2dq>o+~Xl9Cj2kyogGjuXvddL)s*_%d=WCGi!h?1&JEo_+A3o(gM|N4SVBUS9;E>(0- zS>zRRTv`ZK{!si!_|Jn%WCcZ2Heyl?rDiaJ`VfQjB-v+?;%$_~!}`R+n0~QbG;cB> z#yB#r6BS<<)<7Ow?>)+qv`N2mVP!xf04^mRpD`btflcpy5*LXI7=#iRTy{sKHarneJTE& zUXl5Nl;!SoO6_DMmPEVX5Z@YRf0z+@d`}y2Ies^4 znP*S>vD;k;5!)5>jW2{p$41Ki0Hb(sZpek<8@Fd3x2l#GZ@G&~)WhO%(|mqD05?Rt zgV7kRjkT{7$eJ?w8K(dE0c^J_+%foa_ZG=13~WqE1|^Hw+P`)gqk!vX=9GrW6;ZOH z%2u7W2erEbStC6ZjizJNl4$mM+dCfIJ|YO~cBA#HW1FU;iTj;o-RIq%J@@(DGwWJ+ z?+iu%sDTUW)nn;Yx3Xi%AAlpLHj6VEd!0P&bN^dXOcM;f3Z7aZAUS~`Vv~ zH3FxqVzuK!#|unB$2-K9dvQ2;EXd)>qQ5w=ui6~o&GfDvOZ;aqvla&L$L&ni}E#txYEF-H^6TtD5? zH4+GqNV2XqkK05;t-$ehwp(^p2nmAf9Je%N;s_avNMKejTya)mztNjJFk*O{x+F74 zX0Vq*qfmoM!l8CWL?qyp!4|B}9X)$m59YBs3L-?Hd$YL!eghUs%YQ*&40iQX>h5u= zDjs06(M;PH7EUABQH8g(81Ust6k(95Qj|84@ukZ2O1Z!ecE0RrhX|~+zS8t0xM1u# z{Ze+B=M$s}9{0$iHf1)|JxdBzQf2+q!e;KZhnK@^>!v$M8XUp}LG=rUxCI2hLm?*Z zA&uEN_zVy}Ba%+3#>2*(q=s^lV-;CJqsDn>1zW7W!vC6 zM*UmIi5<^+isFh^s{eRN?}mPMW(nwCajRt{lU`P43BlfAtK}H;zeAjVhp`R-;-gfR{|};Vd!`HDPKBnvFl0MFPwtO$bA7)qI6oZR zKlHbU1xmKqou^oQZ2*?}FVbFikpcQynUFHJI}|)nNLzZ36ebRDk)mT##R9sl?G~@- zIfsB?IyQ^-RHl2-wp~xikvY3A-VRhdwXR(hB-*>qh-gfL&TPwtBuQF!Y6c$_Ok9uX zkrOKWzbraCtMK3D6$J1&c7My3SfvGL#DYy5upEuV4jKE+>XDGfQ}eFFa2dcJ;@myw zD3skI>2(l81Sez-?s8c#S}%67!%1KPzM#NA=`zy(8;^yCB5FYZq+`k0P`j3D%2-jk zdz!m&ZYQP*E%RoXy=Fe+%;Td@YGRW4m%!)R#k=#X(Y)ze=y&G~y$!jmE-% zekAmNW$h+9ZQ{6OZQ*YcE}OWxYx#mddp&muNbqRZ1ha|PP#oa7eOk0;a+(W)QXLc} zCruCle7N4-pAY;14^^p&rW4#=`#NEgPIg&CsPAE4pRad2e@SzfZ;rMQ;gBPWPP@hA z#2^dAA|*k=)(N)oD?t&{7j+cg!8tz-dDdwRgo@{$=c^U?s0qfVpaQgQf0~UeuYtQI zvgCxS!HSN5>=#8_?8N4=qJ;L82JR$s)CVGDHp-jAalv8&HuE+>(G=wnboQ$U!hkOx zassipI3^cx47aY8(Ia{(6;%d&{`KM{{?>vY zE!)>4fGMU2sPaoXc^ko+G_c^yEHdg*vmy=PU?<`HTMboXXd65x*{0A`7w_h3wCc3A zGQtDZHQZ`vz3)$Q$6pXE5TJyMlC~PwquLvU2LWfdASRNe42IPjF02B4Rog)TZyC+~ z-SNsW&Hi+3ww4e)Ui?4|lfj)88Z`@1p8%fZ0oH~NpmROd2Og@K^V?!v2t~0*9kbfP zcn5Y~Fs{c1oOGW`f?j8MXs8dI!7&k~x%@xyp@8t=AqA)Nta^y3wj;To4PSw|ze`a} z62a=S(PmPH73Yo8Yc>fuf57T854GO7nZ~dNcJ;P$clo%vKlF15c;8(#&%kUkgno6H z0c4(`=y$Z?o-KybOk@O)ASexSx-q=Xp6RZe!>8*iZ%;T$NLRP)!|vo%hSI2EZLyWGdu$gs|cwi3|lK1iJY9xyatK09Vw?Dmm-O4&ei;Dx_`9|FE`q1VSGI)Yx!Wg{d$%aL z(<1so+xZ|8IZ0`I7rx=yw~ye=epY6K_`HZ_$bL4#VSnumX7}oOLFE*t=+ z$U8~cB<}3%oG)FQ+9lo7Vp3&XeSwkyQprnazeYfu4xV{}n7Yl`2LwUM-FOcjz`sg!VES7O&Ts z#BQ9v@R@L9y53+rx~ft9b9m~+VewEVW6*ndG^xS~X>A3`m4eoABRAnM>T47Zze(5G zO-NK`CqKs>7aT^t0zlm=bb4v&Wt;yCgzqNms)g0Lqjk|)Xg&M3p*F)`m03nQlUhKb z4AD%Ac1Bf28B0WNG#t*dazc7X+M}1RwIwbZnN87I*_HIlR4W0lJuVQv>41ms3_CwD z<=Hfrjs8g5SA|SdNiC3KFyz6D0IQxlV=Po=x?}qLkSy|BIp7yOb0ROeEXU12C3yrf zc9+07QShb?0y4j}su&Zj6?0o4-dN_dcWgpdW>!Eh0Gs?F-C0l`j%-ya0o{C;bYArh zeb4X)+>qk!j0!S!m!)_r7`ybwfeMzugrI1Zqr?Mdwurf!Mu=~_ehvGO@SJJUpsbMLx%!NWEM zdDi_`VGvQ`L+xdk5urMN(*ABtGx&*{Hx*oe=f4eVJ*@Mqy`OIx&!YxCxEYyMG@J$i zo*m8!j##=8{D7~cDmwCqXq;F152m6Veiq<=?6jUf<%)5mc8!W-1uQn)v_?H!zTS=) z`}GFry!vlK9D}2-^;^S3U)GT;~NUcd}ov^sd10L+mByH(1f^C|EX3*UXQS zY&|-y-;VTt2PSzWn+L!zwk6jfx`QwV$6PUNt&d!SGu5Cs*Q#l($6a;9-)sQl!8ma3 zlfLtEjEl=C3@f%ex3+6A$D3kR*5cdBU=6T9@*T~(s>>-CZK!T*)hNH{&e`8&c{(+W z#am3;9Y)`5N(~a2tkzUp>hSMB|Do+@z*k%jxp+l=T8sH#OqF${I<*^Oz~bhEWb3Q{ zu!Nd_TmK1gk9caTfL*KCRp0epQ_LUgvu)UFoR4I44U%rcP3_onWizs}UK((dT`+@8 z^a=d`7KRuzqg5l;(XZcV*{3(!Yz%4WirPe#-{3@Mq}%CwJ-O2Feu>%lI0ySq#F*-c z=}kL1O)N#wl-XcK4wyax=#EtV)iy;H^4|Ny>Y24QnyKma{3~P3tNexAaP%JjQZ9;t zg=StaYT_+&um3LfU;wT=izW4nCI`b(l~!NiFZHY_tMjC%dOWy>4Bet=%Nc6IyX_4) z64n4r;Vn7a7(--hb*Fi#d*()lAMY?rOWiEO>_GiW|82QzSA2yeKuaAvK}~055<$5E z>9kjoz@|SD1|4#gPQJGif0E5+(YL~n0kWgKdgWLiV-!mC-~660CX$a3|?e{vU3p-cgE0^lLdP6tA}JQ&;OrxyhY5)-$+{f!h$F znaz$0j{hwoq^3GN?xJG?f$`)H|8-;t5jy3Z%;@Qn& z@Au-Qsc<^^-(frb)4dd-Wi12Lt~-%-o&UFKixw>s}e%cg0ORNOr?BPuj@2>92p%+FlrCk)3oK9gG z3Yu3En~85(?L>dfPYG;R%`^r>PFpj<002h=QSZrnFr&80uVA65W1$sSOlMD6^T>8} zDe6!guK{Y&P)5fjl&W{t#&ihU^@#us3N$@(@!me%Y>0565n*sdGg1Z4nWzCH)+&S) zO7nT_)3||x63W%xCT;Brg$+W_`Praj^~Yt6DF%bla^2n#4+hOE?K<^4v>~#eAV3f? ztS@aqDUV3`+DX_zWr#I(O8eNe#!9U}oD^xm0e(ReQZk@~lW*y^ZT%s@62raeED(C% zwCJI;kYOLZu3eHBq6CjC++H_Wy3=V-HN$}0yB+UQd9)Zq%VSm6t{tYTmyqNLS&(Zm z`+o17oJ+cDUCOiw--Z&Kt>=Mk7w{EPqUZDU{C36I{ppwm;OTe;=B~B7W8|SR$6mrL zU=&?9&DX_X(6Tt=0~j;mJD3G!2TLS@5O>?@_Z*@|u%$E50{n2Smd$`JfW;I@|M~0+4_axcRMv zhh>fH`40IT@jcIZJSX#`fEuNX>21M?;47Sd8Dt_kyx;TXx8SQVe0|b zlO5^L*LB6sXWj+nBJZauDn*8hqNCU%>nEi`dnmeOtII!C#%~{Ez|6AYiHdDSsh>&i zV*|7$*FHsyf&$KC)>Ki&qDvq<(nUWx8Ah&>W)IF0Defev3vZZ+XrY5dO<=9-Tzr_2 zQ%`toCMCYMBQa!T@sDiqnZ++Kt_ zpph|3WQ`Ci&GD^3~Sn4;HH!Stxev!@WgF*h%?79IimrLPg19 zOQL$?X1-TqJC0_Mv!oj&8_iHgm;*H}uC9?(<~C)Fs*Wxx8!@c9l|=5>ph_7oP-jkf za{p3vlFs_e%61o8hK33izlE5AQYtFEm_&s&et5{ld+(sLm-h z7@AgPJAk2uR_?veV(sf~QxY)qoB%KLe~8LH*(8EDkiu=_2rF4x7Hdz@!sVIAH70GN zn5tW;Y!$UbqfH%}T3B69hZh4;thind)_=fUqA*C+&2?yU?9=sf#{u{p*H^d#dnw@U zANEAtSyL?M^wvL$?N*~~$=S~AeWFfDyl$tNrp6yv5-D`zdcnE+{agw2Agj)wD*F)h z>e2yNbkaQa2z>h`G(Gf|LpdD_U|7$T!Vkwvc4w>Wh^Y4TxY}+;_wrx&q+vb^YVrNdwi6(X?b|$uM+rDSs@BX;!{^)g1 z_pYw)s;+wW+PimGy@j#~G-2iL`X2C3O~_8*NL6z4j9P|;imT$FqvUGv2qVv7s};~A zfl-JD4x5Fu8sT^MWf{vjIas893&6NEb-;$mOXKbHnFM_CK`17LqZnhI=*QNQrxFsS zQLrm$3`GQ#KL-U6qvxnA{i^rOJv*fB((@|N%c9~HX%QNzW8(v7Qd)&@c8-FZk36xe zRg&RK@!sUA|LP}o4!dW(sFQEE7EO^rB>{>Ov6&!5B z>gJ4*&t5)ssytv%AOyb*^_?u!UbI5r#xr1#43i@rS8_3U*aN%cg6XA4K%-Mp{QJF0 z({lvZTCL7@s>F8Va$9R{RTDl31D;Uvsw1-mc4y0@4ke9{wx7%SO#u}M?=vw8I{6iH z9|Iu$THC=N(}vaCj{|4&csuMD7nP%UPjv|QWhz2zMPP9y=Hg_U?DE=)2NE1UHr5Vv zMI}__9Cr_!CBh9TmyBq%)>#~H-GE5Sl7R%*4D2kxW}mgta)`f!80DGQ%Ldc%1=-uG?Hhk2thQ}60` z!QOX5eCHYYYKq@7wR+Ou=q41;)PYdH*8}jtqS#b?X6Th%ob)#>DW%9cvyb9p)r`A) zOX${3!Sn-hXqMqtq2sx_)u=1Lu@+FsMuz3GFnL*7u23w%TFe5kyn38@fa|BP4MUbG zKDS{EF;0ANpdR&;zqd^3ycJJXu5dR-9bd&&ppRB=Wpr8rQ+UYg+i`<3yZRZP9qacdA{fDV6sX^>GWp{5Z1_y08I^Kbe_K>0N0h zss(-*;2g_GYpWXs(3IHPzIb?J;Y@v{ny+d}%~7(ex-Zq^Jkq%@Pw3k6Cr43tNOy}D z)Yrg9p{SoMrlq^r1dB(t~)nhg9yBk|)PQrYC5^3Y_S zykL@nq|6eDsPcz-!lP)rj!Gj*#Hy!8ku&1pWY%FTyI?z!k{!EQG)TJp(o~`@ z(~l=N8P3^Fix#JwE}`>;NLA)RbNJ8L&Mr*hdmCr@z&Yh{We@s^Boe``LpPvg4YCFR z2e;)tJj@6c+cUo4eeAoD7*?KYmFN`J9jXC1_S#QT4K7J`Iu8+aZYUjk`9Vzy)|_J zGx=XL-1s5%EX!6avcKHi!lM@eAbU2T=+HVJYF!~B0Qv2b_{J?{%u5V@=Cq1RkDZT^ltavd6nZ-#}{w{wQ^T-NUP)`VK6n0wyOu97SM0Xic?({zh z;Nb(*)%@tFZUN3=GM|UauZKTtTMAgl3D}qUYj5`%9ss zg!Aj_483u%mj_(upUp-eVP8|B`s~j?)BPv3-!yP(_b4fqzMz^#&a#B#)5Z)!!Gi*X zjqNsOq~cvn!=x#2oC?RWM1(L8x{O;DcVoxgUNidf!EtvEqF)SHFdW^C@ORwp&sMD4 zBXxMMV+DSoRKAOE|L=K4w*i?K0*n*5O^J#FEN@1J0}wbN9#YlTe+Pr{Nsz+tvc{;m zP0Gzxw-3bhYn7+4sj7_j{%T2;T}Bo?@SBhFhvJD}7@%w6$;j1LmTqY4LRon8-L>TB z(P-N{5d0IY+UUYw-}Hex{PheQn56V9bkbm583Sc~zLVWZzwvqhe4*_1=^>pPzs#&! zmbTNe0Az1LW&{8_-F${SY5TT-pmf$bawbo?fl!=Y!Vsw`3vnF&owxYt(|)48V&pUg z@lU zo1XxERwkkqt4|gwqLba&7z{hdxpHiVBJ!e38)P91d4i8pf+LYvB`ft8O;_BYyge0E z;gtOgK*w*XGyF%eVr_;FY8w}o!CVnBD5?KP;3joMj^JQ$B~~?sz0!)AObPBF*sAv% zcE#5&8}vW1KX!{5`Q#-nEHs~J4oQv%#0EOV5`kQWyM=ZS@jTBlVg#0)_$1sutRi1< zE_US~fmCMj7Blh5U|v{%5Ird%DGN;kd`@vnD&c$6usNLvq;+%!=}&M6j3?czurCf6 zuzIMGQ(PgnP+pNL+#z*PMiDAFzlf;NN)ga+g4-kz>l4(A<`OX_Di)I>f?(J5uEO?6 zgN2eLz>%ISaMq}%OQ#^|Jibp{NiQV9&dsAsexKm@ps_%{O6RJnp#-;JKstJDA%~DE zJiwKO9KlCz!2*d56~ZqHd7`V*LJ97{#PhbKhls1ViW>$rG$6qTT!5<1H;`m*xGWhD zD%$8lty`M1;48j0E!Yxyl`zo=n~>QX0RTI$eOlBHCibrivNZ%`;RkF4F>%Wp zv7PV2VvxURKv%8sfZLDRO@2~1j9DO zZaIq@T%||q=xWt%u{#%l-Ve+ON!X)mnlV0&<%NXqrojXD~3c7UEK28(eCaoRdm121Ng3>+RuAIv}8Iz|

    oF)6 z4$tOy<}F6W$Z3vsMVBQRR|Lq@iuk&|3KAqmQ7@0p{WGG}`)s znbkr;Z`x8mKs`9K1m*&!U~>M;&G6^sSXMD>buTv}jPoi5&FGw!OBnm%3b1Q?KI#M( ztsN3*2XwF(n&zpD?#n^jzcZuUbblc~rC;nVQSxPFd|CAzV_IXZ@qRO`T5XtE zt~GrCFPD6!_X^+Ajk{Uq5D-U!{G=EeesA~YdUb~cl7W5Su@p9wr^mDYM{$^6@^;(p zoHbdct*)v0t}Qug<#9Bef8*f|V@3S2{ZecF+&tk&{lx(bA&8rgCcNFIXu%pUw&oX9 z^5e?H9n~k{g|lXB-rS|;zmIksO*2QUD`>wD1o0m+zdysye1T4=YtT;Gfq`kFWH=#T zW3`=+zO}AAH_Ie5o;K z*R~iXHW=QfD|&xBGkFa>os#?9u6^Dc9Nn30YsoR*YXPoB`f7OzOgJkjdz&bZ6Fc43 zXC8)jm!Cnuyk~caVk#CLpkXg)P2aV})#uV!pBjAYrsX;6c3tlHy4VF9ZT*Aj<5qs# z!(~|$CqI1npRwK14#knc@ScadQDZpRHiOFYB=*Z|zP96>3y(Oo(eo9<=i+99w`C3$ zN}P(z*B1Owj>U&97-37?Ug|8a&rOb}oX3_JX!#a9)S`z71v;nafUe$?`69G$D{NLV z4d}pEv~k5M`mh%z$|Jrzeg5T3y1Hs<%BtRhJnyk}tMfgf(?w)Na7L1T`|1W$ePE7T z&xUKH7J1adP3Y52=jhMQQIg0MjIx`d+d)yMp$Mlt$M-nHj!WI7k{3GJJ)`y9FaZ{~ z4}N+%7LQ&w`CNy(faLsitya|aGT-@8J7!$VcZP0fT)#3Tv~%QOe%H#VsMJzjcr9bn zG?pg%E&<&Qq2{MaAJ6@Qq~Nat3)@`VTU8aZ^+kG$bHTLZ+Z!hJX|7fDCIn^68AJrP z^(WdtoOQc=U2{VSx;u^+%iySrkFec*m4yQT9IP``qOp|A0m;3ZL4SB|+YUx<561MB zw1gG+FN-JBxiIEp5^S+*$$F1_i%QE=8$AU!ayr+Rep?DIkw+3^@R2J=+^@I@*dG-j zUwS9AP2QdEOz!+3jj%q7P1#EQp<^WLgS!wjLVZ`b?XS4Ydl{l`8boYF@%Bz;u&FZ4n50Vg^Y#)ZdDGxm61ljqdFi$Q zxXi8NDv{Ea?Y3NIk^WOw3)w|8;T?+q{@~!Tqg&`gFyQL8eGEM8^@=`E=0We=2%RDi zDmg`x-}2vbGP(H#4KtBz$1e3u#ou!Ym7d=yq^BnTMsw2t0juIKx~%j%ZD={9M;d2Z zVxRHrwPt4uj7yD{N(-yTz|4oEk+Q^MkxH6a`4WDI^>c5@ktXPxA31DC^6}9`pGJOF z9(-zMya7D;nOgbvy=1B8h4vTO23&~mX=VxzB>5`epa^Un9MYs*s+Q2Ej4<*Bbk$SH zVvXp}ZI+VTPZm@;Qf$Zxn;O%yc{3>K3DT(Sm@f2~S11VIcY7Ap5wZIo78fgSF`iiK zELhl}Q1hD_>&<@lJeVJ?O>+@C3g1blZ89#tp#gZu{~Wljm_)|uR8F(Fl6j|5j~e#J zZ1$R+t)Jg)H_tW&VJqnPt~S4ahog7dGBN68cec#2cP5!}-CEtXM>V)X_x3$rk$u@5M`Ni2hcuh8;*my4bu&GoRx7iR@W^p|Ez*1DN)zKe=Bz5u zZGK?lP z#ql(Dq*hYGY$-ddiba3Erpn!^*E}pJ@)5vCd&j~aTJp&{MtO+8W3(#I$f&tX~@U>z>6S{*myycGQ-j7uU;-fmO9#h zzvNlK>zedeuxQp%H(IvV28^U5G5`#vnt>mrn}i4uD<&M*^QqcSi_q8=ZK)!g{n@f< z`Id;Wg;_1VH;#KAwIzoawFBRcd8XqZbL+sSnxE@=X)5h;u&IuTKmV9oV7|_>rrOqK z67epqN!HGfNgmGMsoR&>A+oHtgmX_GPy)D(B1~qDvqOUZ*PXDb8Pq8!2vl{+uZoQCQ zFIvC4h}*Am7EE|*X+Kr77awI!cx&vmJRhp$k<_{Uxu|S&TQ%8c`>m@;`bb6pQ03at z`vzcJmM0Y7V|}UY{0Jx?x^UywXTxtG&f*@xXBQmdTOP{d^pMq+s?@WJ>uu?xQ7WfnA#2MooQkszSfyUG!efa9Yh#!#S~|MQ#PNbKXZYy~NJ~2lL%v7o$0f z*hr3PGJbm;--z|uwZkV2NvoD+&YR}i#DSi&jT`FPc8tq~_Zi@EN#n+1C-9=!k>q{f zP+&9Y5fyMdxRq6O_W0*ZKljvvmG=O4W)>4pOyZED#&)QaN!>V;paXyJEdyOao~MSt zMmn;|hV2i{AHkxvwQAS$ED6?5W-%OTZrt`7DT|$a2^{2BHG%DS%IQ}*gE(R~G4$)D zB){tmPgBEO+mnHvDV-aU3ulM#~2U( z9`Q)=JSD)=X*(t1XgbB{qk}?SXg&CgfyPLhXXJ48Z!W8N^`)aX5BeLHWx?)r>kR5j zv;F~E^^5a~{8|c$eG+x4oN0e5*&xBH%(eTfX*MVc(~UC0@@9Gu4K`*j_X*=5|n|5nz{GEDgTsy%EI}J`<{QAn)HeG3-CR zf|UNmnt~#R_~&8?LR~}Jaw^SS?V}klH*f7W^9dJ%7F3nHHsPXWxgEDwXS^ zWwUb+$Xy4!T)XbKJ}d3Q(90QQh-p% zOm5j0XI<6jjZJiH54z=ryf$eaW7`C(Grf0GY0=N{aToG%bj>maB8if%tw&ZWo>{N< z$cb`EwhDSaN2qFiZO*;udsFc`zKr(KGOkg3jXC$GjZIFE;TT9z70A4}1%Ej|n1PxM zs&09>TKPFh{#0e8o+{KEAMgKxzYJ(d{+iIvyb{KwR@ato{h3R#l}64A?n{ zLNfwev;q0gX=i;CW1F34<05xv$HrVj*#winr|p_0Wpl+w6{R#^VWmT!pAc`_48#I3 zTR3~SdOJrE7@8H_79{J3uu+PAm&Oo(B?IJQO=)Z9)Lis_RtzRb z7bV^GAg?)5y<3fXC5MDE4kypND)a1fJF}LegL!sS_8Ef-d*J7tsNIQ&G4n5KbEcm$ z@2`6OL#XDvQ2oi_XDI~X$UF^iFaR;0IZgw(dgoEB6?Qb#>@i=y)=Wbgv|KU6RiO7g z%&-}d>2%TNO9L7|y)oL0Q=qsDe~kB#OAzpoz>AWQeBZr*6=bkhXON2YkKp}V*KYj=gXC!A zs4MY1&sH;y!lTD-o+wuJtCVg0vY)EkUkZo$5#RNfB-!!-!|<7e14#LE_BAfJ6L*B9 zW{qo;A2@|py}E?*BdD^*Q-__UgOiTfMi4`x(ToBdq`d5O`W&K1o&9^0j_k?Z=zHE* zGwf^?Wwn%LK}q8M*4#LSMje^|i}rD|KNAy_O5PgI(X)wLd9 z0@Jl6zu(<#0ll5Pz|%uMXiJVjv<|sE8C6pCYh%x_9dj7Ww1F)V&pNMlMsPi@HxsIo zm)=i#=J&ZB1^u&F-%8;e*Mq-(4A&CiTJJkNPRCi!DkMAD$ArlCU!K zKshvaPAMvXSj=o=-D3rWNIfpan|a-~OdxN0bh?)ZmdQok1bhf{FV8wrK3ymc$Y@iB z#Ft zE>+w?j>9{AGhRVXO~<$mQM0jblMfa7jC#~0KqOxNg|TI;lD1}`d;E6Uk*(I!qp&{0 zUGo$+9bRJ(Hfml7zHEIzCR?NxO?&gI#SFpKq;_@g%Om|1Wp%h>K`#0{+ zZVnwPqHLC+TP7>tz@g#qBwigFrPR zPX5jxCCwpG1>^;k{D`BUafE{{X7RR-;mJqcED;wU;WrW^M6zVFaqPgqxVSm%#6@7H;@JZa#l&vnw%j#pk`=Qjt zdwq#y(tK;KH+hcE-o1Ib#U?)s&LjaEl#gh`YNfx_T0Toy5K-q_%uQ+M+)NF# zAeX(vw`lF^64>Mx#>+uBTEMsq?(fy`1YatBkW$6_LM_HSJCet_xrANY{SuQ#a zd``KoGoGXSFL5FMu_}31^QX|8Wr!6_cekpYkNXMVM3uI7TnM+40u_)u-+(X&|Ei6< zW0N0*e$w)N<68@WFQ7+zt(^CaN`3+SPT}DQ{oq6h069GOJH+L;I3=pw(MV7+9L7`vrW zDVSNr^sO}yj3l(|1bHLhq>Ph$bEboDn z&z{$FXT-^K0ph#h-LsO(>(N4J+0?J@c~o*33=lUm`ADT#4yw zJi8pLTdmjZp6?sBkIz|of;eZ%n*MO!1y z`AgPzs!i};#z zXX=Lp3HMPn>XN?P2ie zyKumR=G3fBUJ&Sqrt*pMf8YObPs%%CJ;$Q7bT$@pdLVq zoRYKxrw!$&L65HW7+Z$l7U~HrSh5xPHCEVNKiX#FREXsxh~^!97yrdFQEFqBz9CYq zIkt{)lB151IJDBn$D9-wIKHAgwJgX8Ta9n}j_b!A0;(?ND@l$*QT4>0WTbpc+WQ;f~Ww8HjYdG{a50<9w>Wt6HW|A-jVRq#Qw-?a4Sf1HjUOiiZw(Z67MGH?pX=jp!;EExCgTQR? zD8}Y&RD2=s+fknP)>>{v^1x^8-~R82kt-1Fn@E4tmOyuZOFoFsjJWViKvBHa3gqn@ zZxDj$e|p_-(<;%~9sjG=4S9;B`Bf{^eLuW_n)7c8>y~ z9F`Z@Q4%njzgqi)A#`cV>^A(Xsj|`Z3Hr9`YK1KVI^(vB�ojeOLU)?V;$?#nMh& zMSrmfbNQrAPKUZ-g-8T8M-(YqvGOgTAhq&vc(w8@0uijk3I|+$wXyXX+D0`p(#iUW-FUqZP6@WnyQ|3wC1)^DQ&Z{7tXX4=cvc{8<#uM$V5ld<+#q{NHXSd7h^r3VzYW+}5+{;b95I@S# z{wykMJd#0+w!`CwElQ$JUEy0hHm#8PG!7}7R|CgD-QF!p3>~^9>{0<51*dIF=Hk0v7KZ8! z)uu%NL8Phh$##!gE(WhJK@CPuu022_-h^F2lOKHFEsS|Ico5b&!d^9A()VZk;6}!h z?%q4U5#>tc9zD5}Po_p58A89NYpScCuIic9QjI^w zu-OE^ZLESuSpuS3imdwjXV$MhuV7i6QT4H=Z0?6IkYC!ZVK%-4y0|fJqA7)*8Yj)b z=Jx3d9b|CKLu^F=8rx;@G_RU*q*_WWlQk;sbjts=LGwMixrrq^E!AQfDiOb2HNV%qFBc8;96U#t2C#-gZ@8SZsA)V(3+ta-j#`?J2jHWBDDM}7-KjW0btjp5t@y2v z9!DO~q|52lJc4Ffz(bqk$Cw+{twj<56cA9w!W95~JIR6p*Nh4*v= zCBiWQV*H9M@i>eGullq<-Xxu0XxQoCMhc0Rm95Q04BwW*t&eqCNa1me;y>;$1(ja7 z0xUiCD4|ZFdi-rRXLKf>P$2JMTKyAw+8I|YiO7umt%Yy{+|?HJgC~AXWt5ov2*jbg z7zU*=RI49 zk2r3v`SXcbQtDVT9QDA5C*(Q6cF>J5uifL~@s^VSJyBWHr9udxXumDja{%W1%vC7* zh~JIrbwA>lUjWWvJw#4Dg|^T4_BYF?9mDQz80MVRnJ%Fqbx3lZga(+4{hjN+tKJ?c z@~6HJCmzh=smc#(HCICV?v#_Bg^CaeXBMNo_i|#{!svi2jgR;t%#;$n&^ax?%g21- z>)!X#{Jzh{Q2_de%Kg>Oj@+*@)T1s`I#E7aIaDJ?RDkj#KC<;}yPI|DXThvNsP(Tk zx0RgovJ05CkEYLu6|P*~CHFs}s_C$UG`au&4T3|mKbx;aYpEBdFL=L7zH&auNklPx zrt{xFKS#sDV@2=Tu3{&Zno=nd_I-9k*}>3n5l-I14dm7>WpDX`V;?hpTGI$TVJbw^(|}L&#->J$$yc7YMb>g*#&C*+W-RtFS6KRH z)wbd$6o+x$Sm<%KNiS8cidsFZOj5wdGq8`x36Oh<@4C}#xb?QH0VY4DT&z%RN9p9@hQ<7} z&GH|jiX{STiY=bD^Hlzwu=y!JUH8QG`m$sPjWX-`-;I30%ZA9u+92&|Z=TM)@*mmn zUjW=gR8Z-gqtDfsSP}MW5mWhAEV<%kNFEsRV~E($Lp@2#&_RiV=+p4>ohDqPLDl|%4aPe-Skq2z(9H*VhuH8`xFC+BH#mo!U`7nNjPTBzLiWled<3|(s!tdJq zZH3XaT9?x(WwQN~JV*TiB+}hac`g=NdVnP_RGBz+0R^&-?$nQ;5tPj4VKwp>(mojR zR%3f~;iYfS?`wP3ocJSeL!hG;v_T<|9l54zfsBf3vVZ&n7kn`-o!lB>1Wav7;i`ci zk3OF2(O075Jht6w7QRu(L4#fprVapBr63b4#AsKviF9JQ(-%^vgO<(z20GqL1zjTxK9{oWAfiT${gCaE!Ed zu*~<&<<7f(x+ed4w@K2QZI_XxQ-F=;?9v^ayzwMaL37cPn8qdbq{u?ByAA)8QZ=9+ zC=(}gBu;Dm)@;ppKEKLr*k)w1EbPpW~aKtacpP9?UQJ^*J{10DMOFxqI^~p>m4Jt3;F&jKcKL# zzT9=B zig&ava~_*K_#PMeUd`sJ9RV)5?k?~H(%1bT<34YYZ>~g2zu++XV+AHb?&*EXnF(rG z_{!T(8PmC?^;XN;S>~7~HF_` zDCnv0Z2ddr1d;sr^>=ckEUcfYO$@8MKn?=}chbq!7%q}lJ;HLo?FB$)Fq%!3_=>@{qeqEL}n4^AunHq7d{YvtAgC#bZTJ7_gzQ9hR4c`X5FJv>s}Gf6p{ZUBv@gShoO!1_iwc~1g?Z4J z6c5#@GISp8<*fp>1#QjdMZKzhvdsV5@M?q#XE(9{)VG$fq3$IolpyYiCG`*&VwPxR z9xPOoN4~o}n;wsUj77+-+7)WrDsbWMQ}KLB~vfowhkqQRTLbiN)L{L;q4VP(iy^;#1@I^LY()D3Of5>%;P z!UdHH0KPzCSImp!ZB!ws9wh(DlQ1Nm%3XfI${A0=c|^%V3d7?1Q!t)xZ@U!%5X~HS z%h~uB#3OJ()HUw<(!O^8;oOzb4&B!uJX8duBrPBl&%Suf+x8A|-D6FZS*G=O3qwu$ z*T$#5ilkUr<@zLw^S$`*0Sgvyv0T3gy|nQaK;^Wv+W>-63O$RUgdAGB;y`>n`t?`5 z#{6%taxuulZ4MD2u_J7xBW2K@RbiYij}^`8E_yX-sEjvO#S~=1Uw0?@^DA_sLlV#p zh>~|(D8$8rq@nUSP$NXmY^D2D5vjY_e(5`P-cuBzm05AFAUE+1h8}bFn#(VaRE>ZR zK-;AsUn`9n?IiD@e8FVn(QnMw*3^MUCim*0Dm>&s9(|6HJaX*Ou|i3g_bzvbzN#*>2H7h!!)pXm$R0$=eAla}fJ#%NP91=mXwrtg zzeof1ti%z+W!o=SMv!RD*R0APt#4?=17I__Nk*b-QsWDcjtb8Lc8#5Oc~mf25NzZn zD@Cetw~rbvbLMl!kF_~yZ<>1YPk77tD6Q3>+&3-%i9Rdxnhe~ro6lS>dYr?}PlF!5 zor-=%o-pZ6YEC@XdB)a_cN@PG=evqkO6WJJ& zmom`E?yhD;vJ`J>U{E3@J#zQN3!jOD6PUz<{9EnFGl{!px|V9PAe`I#bo2Y6?pz!v z#&n1M2NU*_#7pi8?qsYZ{}_wR8bCuNU{PW}r56~uz=cv|pkbR}Xf5YSBr)WFu|4O0 zI(uTxvhq4W$p)3{3R66m2N)Ipb)=c5l2#Q#CEzpiS^K0xEp2_UayU$N zPpv!qx5HSZ?u=pYmq_8mtz)(bFB$>)vXlH!g}gizjE{3vz0mK9!luxYYe3}%Q}1k> zmwd@D`7<}MuWlL!)~eaj;oaVs)vqjvrX~S=S1D>%Fb;8oBsS~ejsIlxgbjsfe2Xtg z_%gW{I{eYN45e9EisJoCESs9E6Zv(O?SEHAVlnc`06H1*u)6gaa&F>X>stLnm^_mY z$Ji|p7tj4sW8L)O7>2f<<^Zjc_IMQ>g}z1CDO*Ia8XKn{45qeXvazPBASdicnk)96 z_AWZTzLc&|zo&H8YvxFYj#%~7PfFS1yj;Z&>*h7O>N0BCM2PfXHiVa>Ox5LCK$(~} z-JyaS+e-Fk$A#wF7UNJWHH6a=slMa`V@!q4WjZaQ-Nr}MM#YU4X22ILSai{%z~t)4 z@^Sv81mfR+8`sH*hI?3p-|{n{0;xYSNhW zdt?Y1n`Nq8PbL!8-rqjw|k1`zbCO+ zca(Nply3BU zpz=IJ9nPChS^Ax6UrI|m{y~p)a@yUl@Uj!cHi+}^k`BTFj?H=9vZG)zl~u8?YTLy?VHxBG?0xy?2vuhR)rQbNLTE}1+eQG;9}mzSFkm%*P_NuJA~`-Z zs3_go*AW&5&=;C@^)laUWcH`?k;Wd@U84u{-k&2vpK zEAF=;H@$Z%d_Z;5D)#Zy+V-*YkJ0-*wLS+205>dhxy7c^*`S>gv-0FK0?u*mR%NqP z^r_oS{;lvib*W?8ifnK}wHi-U;~GDA7NLBhnknmk&g!+axYo$lePAYhG61s5U$dub5DD?s~kGSLA8W*U4k@iTAuhSVG*fnP_4pr z=g(XxH;Ovf3pc7d*CKvtQrb(Ez1k%37TOQ1V6)-*(&M+cdgq8xXOGYp^9{t0o|*&# z81i@p5BDZ*>yWeyxb-j`Cm4>BCfulQe8b*;Wduc^BD(VB5#1MM>Lx9># zRwj{sVNEmfMP$`1vGE9=M@3_cbWB;6{sr1(r)ntKU5PfrN^$(dE{OvT{fnKWP)VX?&S^TpwC1syg%A zS5=E(`2U6@w%;!!uRkC5aPc1(+uuh0YS5i7-U!S4z3YZiAe6o&09=PVS{S*jjS6Wu z_gVW!K??E(D-I@Fe*1*o?QI@PsH_ZsG41PFHZ-dDZ@ywwzh(CroWWVR0XH1BU{S|l zfqws>T8)4v-s8H@eOZ@)E0K3gdcR~XmSZ3594h;t!X+0kx1$N*L353KA*tT|SBp)Xq?10mqRG%eWV`cCj*lQTy=@h9KyzBX^N- zY4JrSzFw%7v$0*gxggPBelyoBib3W$Wn>8Wp}zf!Pw-8t6kthQJ{luASSwTYP|m0K z_hKaTqQPXATrHUOIH1IiX^`Ev33UQaX2UyF%QY6&6YzN;oH;iEuSvGYKH<&yh>5Gh zWVWoOBbh`tEXF58+!0!*bq={VIEo7RIG3c9CKpT55K3yu@fm;;)6Ny(@A_*!V+84p zz_Lgr0;`JL4G8NZoFn(-&6Bd$iOpeIk1y5u;js9HT*mtKfw__qmU^I}^^nHkQUqZ| z>X+65CtPMbFK#>~SE=Yo{_L(g4V0=4a?D{{Nu%7_@eEC2n#%dmb?X$(3O@Z#K=yFf zx>?rGkvt?`rR8)^$DheYe3NLAhBMWMRu)NFAxnSa#R2D`=zagXITom8E!yYiQVQ7N zV6AM1hV<}L4vJooQmC+sT~_~AU{Pk3`t#-%+mBtpxk!>j5;xGO4M!L~BjkCiH+ge% zsFF2^Mof^o(aCXK@Yf>*W(7+PI!677f)Q8_TlG?9f$+KYbdt>F$wbe@;v(b*@~cF- zOY)&m5(8jgI9-YEpD3;E+b8oW;XN568CRSpg%Y*^iuuXlgAhpb2^TmLa!z~k79@a# zv-b>XlGTJ-Yl~)Yqh{E;-4SayOggyyqEdH_bf&^m=@1dh;~OQlfy1z$r(ZvsI} zUaDdNwRf>##9_(W9rmDSeI0tIYx{A;^^^=Ll5vo2HE&ofG3`+j?7;X`gm{IO^0C9> zIQrKHYKx}!Qww?Biea8P3O-I{KT_Q>)61BKs;84B#`g7%c3(?F?#>q!y#?Eg0evkk zWx$swEY)Czu3&NSeuSwwE&?)L#K%~#GKZ0?M|Lj_(#~sDg1$H4Q+x}PG}B%cxz4re z=ODnfUNEUeDFkMAf&))!(&Cm$f;RaGA$ot5-RmXL#(phai&muh$9HkwmZhJjv`30t zXHbmq?ISZ98+tevcYJZBO2kgTHc#GiegGb|7f!zgTsV|#u&U%HNFbiV9p{t^Qzx@j zBwH9TMA;KMt_SjRa`|~Mb1f?Epyu*9;kHT-P#zJjFOOE=5a=N%%@hkD@dVxUVk1X5 z8Emtj#r)(~HKnTESPbr>$6o&V^18O>;EQwPb6j&EdQOyqBFsFv0V=%iPgYCkl?BiU zPrE2G7VV-hL1Q2G<8w{mc}1WIoT8G6FxuSM(z?%%@ry)eFK;;u@s4vd>76u3ISwDuq8(_$dDLEIi{?~?CWeVkAKvqCv3RYqy8Pk9XwK{KohFvyb9p=Z~Y-Q7Lhr6m%! zjvbYTD@Kd+;G5>A@aBy-S|+VKd;@sXwx_ry?q@_>Q^k8Fu46-XI0(9UW?FKVAw8cV zj96FFZ3b6HymH%$7u&$I*~)qmR&B{JYuNs6cp!g@Zy+5Dkh1%FeE*vGIu@A&g~NZ1 zkd|<18CT5mWWy(ITaMW>Yc7q{Bpf>Vv=faq+OWB=PDsEr6AvXtf+vxiTLQR&lHruc zcx?SmZmwpwAB3@uLe_tDYh>mc(Z9_oEO~6e85^k%><+S%h2va5aZW zr;#Rv%bglI+(%9dGGcJ})agn_pNmu6o%%GWFFk~=3d0Vzi|@_FbKx6*8SmM=a`sm< zI?xHkU^~<1$vxh$OL?}RQb_<_$4funR?)Q#(YUlj+;EclWh8bptx9SCe-{D17-iB- z$NLM-eVP#ErQItov~G3?OyZ;X1XUPqjPgXr7KUu`*rDGkwe@h~60NSAmyVJl04k2> zr3@y_L$^xpm(Cpw z_n_`u67#7W`8_6N+Ss0Zthc(7_hJ(UZ*TdT2AsRaWYcE7;0of6vvpro$%B?U~ zpPO-XJlyOQkouZ&n^_x>6U-mFZwbRl&VX33w?@KY`t>xh7-7WTwb6x*-#&;H`dis*KtsA|!mLVDp zZ1d@~GdmYPOC2b|nu5MAf6+wEO*Xhr@Ba3=KZj5R0JOUikdSS{=hp;Y%WvxHsowtd z`9Ae$CTaw~=S#`xiiBqm8)%3Yc-)8pT5lt6h7I`GfVG(9cHP<~-M zm~}4C)zevpPoUk8VkaUyRH}8Y>9cI&Vh^y`MOd9_Ge3jq6zJ~NTp6k}#6d94s7<_M zunS=9=vUArj$`>Kn0ltgCe}B)51VjaDAAGtrTwVA#{?0joh-5MX1DEUhTQ{m@dGFJWfVSd{R10F2q(B zYdXfn#hEGp5ZmE^Fb~NfP%|$uUN?+WBJT^FC56o+RMHu<$R{d$s+S~!rK5$LyK9@% z26{0RKp}ys4Lkhlozd5!pV}xH2!w`&;4Z?Op{ZvJ3WnB|MgGa74#}7O@1K8lZQxX~ za!zFUt)iQQt`ul*M^@X=6t%P#c$hyepu)4mUk9zLUp_LVhXzGY# zn^863de>hUr1MzaiSQA1oVwBy-jCPQoBKT{&B&JzJj>|RqS1M#<6(#9D-F}pm+KW{ z6er=;oexCei-CN<8<32rH@N_T3kHtUD)Fu>ANM?~ z{(psZ?Y7CflE{Z> zR*~q+-u$o#Pc~VONTZ-yoz`;bgN&-Pgk4p|xUece35V|Luueh;SgkUT$0nP!9k8em zuzSXq7gDV&`Y_AdOOx|7Y*gBJJ|Epe^ zyqk_TTV%lCDHH*ZRJH0b-U*gv*~v_`>cAywr8Ddpn;JgUupy29%QSwA?OHy>Fe{r5 zchr#+69l49e8>WXmzcKgOVc@T+^f#dJ1a1Z74NnV+NmKTw-K8l%I$iJ+N-eyZ$UIl zF++O>d(wUN3{H%7{aU7LQ5h4Tmx#qfJuXY*&)hl#_&JF0%+!X z!TGFYrBSZIHp@NHU@_AfYDm80LC(3-*M>k996}DJK{vrfTx%;p*icEJgT#a=Abi1<$4Q~!MG&1#`=^F+p%pP7 z*n$-#O%n-^0$^dn=q#aH{i`*U5!o%<8N0iCi3rsftCRsb*Y0daGolC?9-E}ok6%nV z#H|=?9d}9<5?V@yai%W2i*KHFPC?aPJo`6oy1BUd zjNw|Odk-oygH%XCb53bGIU|H70It!lt|>-U2vi>Sa_WDe3m1aZ-+nWtLU¬)`g< zhL=Pjpm=NH*@AOR4Tg@Gqr2H!ys(LG>}LWD4B}{P)C3#7DIYyJSItxR5SF)i`-e8hMLG$gWfRnqT7%ZL^L^(@% zh8JV?C59Dnm?1BU0I@V{kR9Ca8CigE1{?Sl&TPM*x^g%CU%b&VHc`IRQmqny=|+$< zZeNl*h>+lL^q7=SPEy@FI}MAWQv8piq8I=+0W0!WSKT01w`^|4aew#{><03|PQ2(W z7y-6@<;stK_FWS*+Ld7ZQe!EwR^~}~WmFlK?=-H101&K!K-n<+U3ZIvbyAbFiMC+|K@JN;MB4k$B;5m2TZo(I~dZ&Y*^ z6bFrp(!~KkXEt~zEN?&l3J)zc$Ubzp2;Yba5Um!XZ$nhHesjzD@v)(MX=Be1i!${ zw6kkM%Y<4RWOApLP-ec#ykU5c5Kq-o;eUn3o%IJbrIWRva0(Xh+k)|bDP0|>eoCr` z$6X=Ko4-{9S8lBlJ|1>fFV9#25o~{oKCwT7!Et&D()N1i=sg??@dJLG1@k*g=SRS! zP(Xc!2V46x0z7W%ms$9Z3b0jamEL_7yKp5yCqm9MU0b3HvDUc)2hagE9aTR{(f2pO zayNl7-KY)$1_+Yl13r+mT3`p3_JJA5Xe?ms<_f|Echq0@1`q}JEjqv&3c!PbndQ~3 z*bTC-;gA4(!z11Q$Xk}t071;Qw-17KF3y5S!3!%{0)Ok`Nz70PZ{o0j`Eq0DNHLfN z$}1Ir*`pz8R+1HM_r>919a9vFL!3R*7(BBz@CHOMHG)4H?fylxH%u9p(Yx^8IBVVD zCd~AW$=wXH_RoYzv7(gq1qYLYn0@|1!3&vp%asNG=G9kVfz>Js!>eg7z%x5$F3@EY zB9;%)y#hz$@j1+V`K_g!J^PyQckoM2MJ|s(^9(mJ)S35-?_E-m6N*SpKBesOQ8OD9 zz#<~2Lk~&a{AbA7Tjb!TTK=)2$eQzqPc3jJUpoU8VOFGSF+7qrlII%W{W+K*vXC7) zI%pgSR2MFNai?c=>770MH>NGp7ZLWWQP#R8GsDw(L-+L0{=fC(YZa$VRM+~4=htAo zlH=CSfP5##4KINv=f8!?AbEr_-me|MULd*5KZGut1~pj#*&5MS!C7G6+|zpZn8Bxb3^+ zbp8sqH^IK`y?u$LUEF*gPdwj#*3a@m!zSu{!1&1ul<~&#JwvGz+?q0v{#%qA;CyMr z@cguw(d#mQr6+%Y^W0V-<-vobvBhY{d&l=LPeOo0pU3fi%8~wx({WdqY@Olp;wvbp zZWg8K-L;pzt)u_X*w%*A8+Z^AF=2wlz zzYvkOaamTI-H!Ho-S#_e3@rPX?MAzvRm+pZGv)Wl&Kr(HlQDXq?}$S6alk!uAxxm? zIr@t(ArD62O5L1W&|EiaKOR{mrbY0uRSztZMFVOU2|cTPz4F~>gQj3?K%5@<$Xo4i zSRMeSM&-tsNZ+CK!9G@)f3tR=Zq%8x%bUrg!3YlPKa0NTdw_xCL15AaItj!zu>JyF z7Vu>JCA%b^O>y;kieiTxfd*28gwIHAZZsq(n0>eJ@}Vf@DVDBQbEnf_RsH%V2OEdd4dH#@ocTJV{K!l*m^k7`EfTTzj&5bC^!i2HOifzdb9A_rz? zv)xn8S|z?Y#R)zIZK4|T0>V4=_~rUi&i39W%;qNdVVQKA_DGV#6eUI}&L{*-1s*Ul z6hu*gaDpa;gyT|bPc0+%;}qd3oyIw>3!Rc7Yw6zk+9toX*oB7q-?0fBrye{JKzel0 z6iMjo!Bptnwt@}4iA$tqZ(tjGGEAm~PB&*6%H)X?dsIQ|b>Ld}>(w;Rb>I8fif#e> zkM}IMJ(7oWIJ}MyZ5sH}u(0`!UCf5(AtTjMR-wJKJ&_GBK=#BgF^B4GdlJ%EtDXgj z3Bh7&0aJ)+Sr<$8IuG6E7gxtKz@j1k5qGSZbuL~oKfYnjJ%>IDZrt;<^DmMq5fYC) zJTdXjeqzs_9mHZ+^gR+~zf$bO0cH3{lh}qf zz;l;{+UZWRzXgQSUC>7*Dpqnp6zN1xCY!P4?xp3dh0+p7gdB~#risasXvIvQvKYu; zcgkPY(~Q=M1!T)&1J!FA9J@)P{z$OU;t(&3-i%iU%QA$ZfutheSK5pLecKa_Zm0c?qTpCy@FJ$3vWr}VEXowmiy;O50TsTi%?5?dId#CAk$ zXF9lo2fmHzM)?XMi7Aikac7mnacPOO9kF0PPRToj$%%Cg1P9BZ(+ojci;p&jHNc{L zkAo%Ufu(3bpv=fAJ$2EYpf4gaUII{2Jj4^Bv)dkizI>NqtSN;4vX_87$|uEVJ_uQQv2 zLJTCz_~f>S<_&(lvuWAc+#HYk^1)EhHx^#=p3rzZa#Ssnyo>v1fqRR#hl74#o}dtO ztJO?-lZc={z5J+7+JXpB1H_5iO-FZl>{iL*p7H@N6s!-ZY6->ZmuItWm?NJ5&1RgG zULYfC>K@{QB!zz8nTnL0z?MUA-eD@CHnneBFzbNxJ5({R{54$pi*+Kp9TB$uNjs|z z5m(6{p);2?W+0P0ofaxVXpCk# zp+Yw?F6aYY@8u)Q8hzr6lzL|aSj{4Ha3aHIkM1%_76yDv4dhH)>^K!(`D1DzWPD5K z-E8cs*?!hQI|hF<@kS3sg8Yi9u&_!%Mw~*xUwsZRWAvulXCYIJf;h2fQoyq#1GAPj zr1diwp_@V5$IY+G5Ak|BV`rk-O=K=zbG9Z&vSR2P)5S`_FcdzBW0d2XU$}<(35txM z#3ntsw9~z|;_0_4jfsba`ZF=l+cIag2-`qaz%=WeLDl|7_{M_jMu}on(UKbSXIDj# zAOH|1;cmLHyucQuqEEw_HXG8r*dXH28WNU+VP|G&FXqGO|laCAj2 z4njTzt?dZq8qL&w*$v$*>9`6Tt=YxgNG|CvcNOFT{{3jA6K2O(DSe(ZXkkw_C+8Ie z(7rGMI+aew{;;*U#E<$k0(Bybn+^aw4Uo_2DUMf}cD1{IlEVEmPKq)Oeuv$A?5HTI zGN@d^h=#_JkVxz9*E_-H8meH&fFUC^=~@Dv{d^#J-gqMcft&TF5#CV1eEukRFYFyh z-pENL(yjOZVpso*;8la>Z{Jr|Z~3M)Vc;af@c$N*?G>T%2*_sj>3N5QMiK(Avk`a$ z(W&m$VuvJLu3)v=_sM0RU&_E_<9h3c)#f(X+|M{q1m08EwdTj9+(f^_Z#sC22i5#n zwb4gA1pU^XlBuP~bLjscf1B~-AO1HFK4akaY3Au-a3zl?rea>*P}!22T4PVY++6GVEA42f6xQ5zJs z?BH=$?3;nb9=W4ydN{h&~vhLrny{mhL;-CYR2*CXs359mxZy%aQXKDU#0i zyBwm4hW=4Sy3F4-o1tnxlmJZ>{3b@p?B>efq04pSSvYHM+}*g=m#uan$3oaDXPJDq zDbl8Pc4pywa&-A0I)x!}u?wx#7j(;cQ9X9ECoCRY$txWOvMaZ;L9|_?gB3Nw%@V)A zZ#4YW(tVUjVVc*el1_;1U9M1D+wMyBLF2BwuVRW?xAcIbA=R$%7Y78itmHP?UgId+ zA1rArDccUca+I^jRQ}>S>h=nsNK>8K(9Ao>WT{iVOIdM-a@84=@~|f)m=vR3_zs z6O65LPU^1V%{ScpjRE*O@J(t48rQagpnFTM7|PJJi*EF5M0E2_tze$Q%IqPp$K7D)`0LwZ0H9=!E&%Gh`Vw<{0Pi?7tqQxh(Nq=%^2zA5 zLm92*u<`dXcm=T9ob6c3#ZSJ7q&(27b&m1rK^0$mgl+#+2U3clLl*DeHC#)ZL4~jl zMmJ&>bom~O&Dh>EG*{fcPAg)Tn2(_PZu3c~RZwO`q%0(FAs(kSf5v}*h4P^^fMDA> zD(6`5Fd`U6Cr%p-wRmEKLmKqXU;p)IL($7N(U^{8E+lL!fVH91E2#W2IL9!cL`!b7QL*1K=DCPcy?#-T3R`|#K!9t>gk20I~EzmBC~ zDNftvH7Az+R*CCp7MCfE+=`p)vMF&T%^!Z9&3mUBh}k?U{Q6h1L?vcJsJH|_5H|lj z=HI`>gJ{dgm)C|?jT>8`B;q^C7dQ77b_ExVJCzg1b)y^{W$_D{T0i<8KpH{_eI$-n ztjm>a(rC%%5qn)`jo*NqO)iJu`a03n-aLu9WxK#!cc4kcXehSU3{9U++^B_Q(&**; zTuyM;k!nJZ*k!%b{$q-;&;!dd*ZCRQd(X_jD?6lIq$X>cTejEwpgz|{FVrmUL>?qp z;gvEK+9uqz5R2|~zB!>XK=o0w{g-nRi%G$|8=i5Sym9qE2Ut*?uscz}f*P}t3vQ9dt8)DZGmqA^6o|GOO{%M6#ZvB<-i9R2jBhF5EWy-#`2-liB@;9H$&!JpX-8rDL9XIz*S96GvF|DeP2Ua-iff4#i+C9e2395Z6yw|CbVx>@e^yxp85kJ)T^C#6`8LkZ8e)-YtVLX3ue{T_A}FT&V+QQamN^q)NOZm*(`DpKtQdWgFTxq~0WbU2CIfvW+cl;ReRd zGg1AUXLTy4;b{Q8>K{8M>#;p+;0m69eCTt)*zvMWHxFN{NU}$ip;7Ga{pFEwhDRCS z2QPr_)Oq3=u(nOj9~m$s{v;&g;!vo#|2|sS zWSEYt7cac3|9jx5?CYg{Z&L&ZX$aRdlvvrV%F5UpV8wCheh>09N9N=4&;bh7IA&$v zSf1AY-B=-mYWy4qGiU9e+x|bTRe!`a0xN4!Xg)vcDR9M8to2{46NJB5FPz0LRCn~K ze?9<<^%>j$$O!tK*4baKu$lea2>E0pVjQ_kTHmA}%zy-1-MGqt<>!PBpG7DZr6PcW zpxG>E)E9(xcXB!?FkWtR-M z>vyda9c}BZRA6A<8UD;eVh%>>){=ZY)11O`_eJehZEag;S-Gtf(&xvI7vry-=3V@KwtoP}e>Y~1$yZKXJAawNmjYJRof?@#TSk1swo$)%JKarRKY`bf z1#XQ$x&4*krUCk!*SJYEbEVP2`%!)dep)^))euijvjQ$iDr~BMya4|t`d4v2vta?< z>Uo^J_zDW6=R1u8MXzA<@1q6bQsFWAky}SNY)RyQtiIO*SNPk}-oHOGC5#{~S?$PY z+5zH5kZXt3_|I45o($diZ%u(0swpDq;Q3g7)8jK7({jQ?mOrKRk!jwJPwKiWQn+tE zI}x{Sn%^dQVo2@nCGzjkD6~nru6kh6ky(E}FahW5S1b6ECT*xV65L&`6gvq{rFuzD zby*CrEAdC&Yrhc)tU3!XG`R~cG-aR{G6E|3&^aj9W+{a<+u&Cyd!n={x1x_dS<^fW z-5c_sjA_;l%Du->^*ZUhHh2w;5P9xR34 zV%T~$sFR+sT$JLh>Iwy3-_LRcaQt62@rM&Dq` zKt^1@J46p*9p_oEAv~-VW)+73DTD`Ba-Gb-sqvdXiP^6nAu{1-+vakuX(QGFFh}*LJN4(jd zzbnB{XvrFUgMpt0-$F}3_(&QJIPlZ>|3gED8w}GVLxHEN&43Jx2pyLO7rod)X9!nl z>a2WEghr4j01Ix4XQ%Qwim-^M`mE!iIfNUMUNHO~a*H@X0J;=DKumRcaBpMz5A`w5 z?oENHDvziy7+GCKhWJ4V8o&-lGpF#sidhOC>S{AC9J37t4mA;{YP@RWA;txze0C?C%eIS%L-H@v&r6b zmNI;vI;=cQ69o9f(!vhA>^=rRmspq!`XAwuQ4A3~Kf_!rbIEaw9m%aK^GP`QHfLmdPA%BtO;W zVTA9Y8?yF;W(Do!tHe}+-r{aVH~1RUR{sIxNzJGw;SWP)G40ZCotJ6F1%GD7B7cXI zAc(du^B)c4O%lv!bjf!T$DVo^7df3FqboPzeG=#Moof^#|K&@#9a<`~YP%WpO(yE^ zVorGB6#wRA@Qfrd*p3|wa4j(G0{uKiOVbM(JnJ8$JAMfJ9LHyZHHyB=aRd&h0md25 z7bduskM1k*OLjv>GlS%nhS(n1eeF$af1sr@tF{+0`$q)$4gZ7kj|d(Gdv}|B1b6{F z3vLmt*jCIu{W3WIg!~RYxXv#V0D>W8ojQ$$4hZ2v-{L>Kkid3CZd94`fH5W=B<*iF zt4un0234?z%)(-!1y!LSZ1dn5DnQ{2@=4rqJUv($Vx(FfNcV_3MR0ztHQz5hME8g_ zzG){>>s5U^AQBQc0qTV4pjB{kGrKDHK$RXjT{@N&KJf0D2@?<(x0wRW$!rWs^n1}! zRR1R(HdCLG1qSp_N}2&n3Y2WTyflrtHTg=Bg@w)n%4(?QmqrjnMN5HQaDR(<%*8@w z%uZB&<^e%2tk?=dupdlFD>mc`S%p41*eECZRsDvYBv<1Km6bzz$#mLV1<1dQYuyr} zbH_%^$$+&5wCKtmHhv+cQab01x`>lEk{hdMfi02(p|hJ)wLJD)CWdOVcc8NmK7{_^ zp>Q9e_@<8>(pbHN)rVflA^m^Yddsjnf~8$FxCeK45AN^O^ zP3U^WG)!Sy+C*X#E_p$_I2ge^P}VdBLx!<)KTa;!10S=5U+9EscsH(H@Pu{E90`Iu z9+zc4;A3l*Ra@Q*Cbo-5ZGD^~T)_w2&kD32F5pCIiSvMtS1$}DK@yCfWeU$Iv$vl~ z`BC;N-nBjg&#)hpjYI$xIwurKEP-bfrvcTW1y2%4;PZU5KLL-INf1z8Jc?_FGC!l| zOrIYDeIj^-GnlYmyG>II82p^cYE(V=M30OB^dCq{2L0eJt6`~)D8?=;{$>)u{%e>t zybynVm}Q8g?zSo-sn>zc`RS_4*^DHrm@wO6ihQmU!V7epLAVZJTL6Ft6H*#L@m&pz z6G>Exoc2a#itvzORjk{RQDS59Mlop|FqpSO=QZ#W3#ehtEnQaXyKV3ipcTM;0gYDG z`A34_pMs280*K&8`;XyI=Q>P0HgPbbd2Xe%fKGhXAVDC3r3oto#FA3hS4AjlCR1|q zDQu$VLcu@k)2Qb8Z*x~9>>%-tMMHhQceRU_`gcm6Xm+hG8(hWKb*B=QcoG`;9 z_Ty7JHyXoj^#}-vDy6_6BC9hzq(9H)!Z7G*sJD1M`5*&j|Obn8LryE z9OpK9{B4f&T}AS`e+-}2DQYP}rp?~({Z0$Q&#}*m_E_x#Ah#FyB>UH@G#$~^+y*{Z zFU~0HqiWFFOPx^3RQ82XVD6{>W_AyX;HF?ykZF_fPPufla@;GXR&jV%fpKhh0zW#^q>aC9pO-;cJY)RN=~`!<16o6U z;CV)VKl&6!+e7JdWk$}6#qC33vPu_0xHaO^uR9QIBEkYciPoi*-#d!o$K>U7CNEMs znP6Q4niBTPU3A07AlSXYo-Cq5Oi0U^uhRbLrdjFe=INS0 z1vD4|CFKZ%n(;}Bd8uNAyJqIG9~DMg-xbY4`*o|;snh2f;-VdU;XdSv7w;7!h21ll z%C1KSGcLnuueK)!yPTOjWWN_d>PeRRNwl1Tv!w&tIfysws&Y<#=A+C%U^~R06`EQ# zLZ24RLErCl%jL_;Sc;kEHa%pW)Pm^;m82GO&tog4VHN@PFr){W?MTfEdm|1xji6TJ z<8{R(e}CWu@fDsRm2IkWOX)^bKmJ7Bg-FUj&yKWUbF)~tg<5^G*6%J%JKA}|j+;je z23LB&A2s~&?th-RAy;P(1$1j(hGyI8%UeA&w1Ov31j=^Yjvk4?*)7X!axEu{x)r+L zJ9u|pxte?NQM=jrtrp04l>|La`9L#<&;ZleAI)gIfkU~C_2fdkBy1z)xkhj#F7!|Eu$-kI&Oefvyh<8_Bf zdpQEN<~G0ykAK&}K-%hi zR?$LB;%8-OYE4^oR#e~2l}fbT_G3e3uyeJqm+5UWD$mFQD!pe;QB4xI&r(B@oIBrT zdtKwB;p$QVn^9R+X?5+qa%b|2*NM(TK$R53we$z#v#7Kw#n}H%rMosefBm=rCHtg< zxw!U`=@tc4gPv2gf*{79^VWa>OmeYy&YMY+rZurYH*>NO<)xg>Y~caZl)J&>!cN1@ z2S(3~&0@1-p3WR+R%M7H>JH7oqDoDxJeg1#shM1NX1@-SqP*s5YDGcr@@&oJxtG3* zL;^N#=8#&{T@YqF!G^-(r|#soj1cB~Vaf+0Flcz@XilZOLf{!SX{jjfRnru+2ik{c z%g==G+1G{d(f8udX?{&b^oMJR|G$|pV^+QVu4@7<-W@Rl8QvOSLR94V=`AlsL%)&} zxA8f)f9zT;rLk^9+2~u`aWp8Szf^~G=~l_Ns-ESy*WX^QF8bY@1{%a><$FGqmjTh| z5zw+l#)m{pR+WYK{mT3K1BQ!w{%mKTI>2n@K$rR+nt~=Z*OIU9Q`?0DMkM!z$HeL% z5p>i;Ip$kBo$hM~7oHc5MN{o%S+}7unm_$hrX^YPl5_2TSRI8Fdk$#igJW12KWv(FRA-ql*10_sO^Shmn!K0H2qxPSiZv*h*A<=8RGfx6IORg*Va zqgc^!f9jB&$hI>Tr5tE|se2r$PewsML6k4U|D>eg!WauF1S9Qc_nt`o-wn$9%>&8q|C~CHb`<^I+ubiebbto(3qRc6x~x_z zq*uzaO|~KWfqp<%^HYvRJU2O^CL}ZYl6?Z08;{BUtQw_5o*d@Lgl<)oif3%>E?Xa% z9xA~@c{x4~yy=XlJ_I{A<7HbH(%V~W{gf;b?42jyuk`yOMmLYbO0jj9Z2bLi0u8E$ zN_nX88H3ju%3WXml0YNvk=|4*qw-Dv;`D6rT!enk?)Xv}>aJ)s;wiVBu-!~;{JPRz zxaSxm4HSS&n++jVN%DCRxUyI`a$F~GT!YThN1TyfxJmkz=%)^b#@9=S5PikZ1lNzd z@I-j-95Ie~AI_;3UODr1oH`YTS`iw_-9u)@1ZTWr<1#snNkMkcc!m-|D{zt zN@^T-xIo1M4^dlp2sHO6uv|_PlCDfpof)VLJ&a|_=aCdJ|4GhER4c6^nR3~bFsPSe zG2AwYJ%KGvk~=6fqCX)upg#o;!(|mM1GY?$BT|F8q+SK###Ttlf5*m@qt5E7%;Sb} zZxCKicEn!Ce3#-^!2oDKUW@KF6Qx6U-*F!ecsbO_rSOzI30yj!jh)ElW|W%&5$ z{0n9+AhD8qII|BHsX04|Rty2}ktXe_MS>!6uuLaEoYAc=)Z7%w>lVzavQ2KfLcdc# zX=)O{a2Esaz`)Xn(f|`l z8zMT6HxCcHXCiJQXpbC+0!H5r_`2f#meBAz#@5C5P$w*kIy4gveOGSAR(#i< z^Z>!I=ykY_zoLJ!0R16cE{~2}-ieX$F`XK9nzp)MkrZI4+it)~Ohlb=wVv?9Gh3lHHJRsTGf}3@bKG`?P#^d$ak<3cRb(cbof0t zp2mPrNm4#fw3IPN?8uS%bq#dKzGnCxmV!E0Ube_@J70ZkU(If3U(Nj>gD-Q;9sc%P zp1YD0{%n_z*`Dq8C)=eKcJya>nH;_gJbf`M zxwQU7mR}o~RcF-Txf!^y7zyUF(pu5wKlsO{*ZSXim7;~g+q?=gCi5DLKM%sb>4!HQ zg3o61pzJhR|8(;*%!SX&K<^Eb0_I(gu6GBO_FgSn75%jPXXFGn!2vdvH|yGF1?;1X zx2;DDBOcS$%1ec(1DqB5kZ$ZekiDq(FEMMz59ooD5jwwX-#2xbxWcd0QDkMiWr<=rD8L#;lPoCR zr73(QcHqj(#%tHcA&6eZTRC32@)4xyNtfIA5q{a04W#Z3V-jmz!r_ws?I^`jysQE$ zESwJr(9qi>%klJ@8OBZg;V6bSb*YgBuu-MvXKYAP;ja+f4pol`^Y zFm+i@<@kv09TBh+=a$*}S!2ShZ)EFgME&L66QtLOyl3Lj{nnd<_LaV}Q`CHEp=fw< zi=p)o$nSV-+H|d-;0qnco&l=>g5T59XzzFQSIGM0(vT2JcZYs{%XwcX85SNCR%*2w)mOFR_MjSBwM1)n68?|YL2r0=qnGkb8=SZF{?Q&q{xY{peeRo3snL>pT zt75qnEBf$3`n4@`{X=|Gc!)Spimkl(I+05RGV}t!=>&j9ileyP@J{$@LgX)iSzHh` z4d64Ysr1P8A+C_vYGUl~{tW|v10l6EhySFQ8c!()9z(2qRHdJ68C=W(v`j{MchztQ z8;!fDR1>`x54d25{8kN#s&WB*xL{UgVI()ksd9#tsxW8+Ek1x;QC&|wcPR=f2NT6T zBaDUux5XOROj<2DXLmvUW4JU2u2oC*Z6{;>%FR?P#VsXso~rH;SBL=#PX0D|}*It;wyLVs->+p1yg zr~DgjsHedhXO(!n*Ns;P z1OGt@LG}&5CHSQgUkl(ofw}a{EwAAF6Vb~!E60gO0rYd z{FsrL@j(m5qI&oW4NTCwV|X&XPU4Q?=Z-7;#@C1u@i2^^}2(laH=I`#|dKP%SJFNVI=;8g&QNw1t;ICbY%pG54vK(?gQA&w%GkY(5gTG z4_dXx{|2k3{vWVv?`XMI%tb8#AD8QUKnb8YqbX7oLsCjsoVEk}oYf4830woypW|Re zM&SSy^dUSN06W+>1!daZH5ZF!H?`aKrkc&AQua>qrlpie}e;uq;sUjU_t9h^&|#~H*jeJ zkl3V1`1aFW$3iF&wtYf)!-x=ZuRG*~AaO5tT>usxCJ*}!Fk4~?Nlkq6ay=*HH|f8O zK37MH$*NTl(;FUk)oM2GZx}+V2bLk7$dYT!S}YEI6P6;KNQNdR_zKLNTngt;3{C8K z+hcQVNo(R0smGxJ&NFbU3U(XSXdwy^1K0l_S~c)n(TPDf9Ajs2X0qfmJ;hKO+w-?L z*>PlnVqprsX^mtgkU2B*hc__lBBin+ob57oSQP+kSrdSPrkHX7>c`tI<97d;3hf%+ zFI`QgmcV7ih0XOXD$|7HKSy)0^o{+gYcmagjxhqI#pGxF*4t7dqTl^M6CxKhQ~AFwuM1S8!|fNc^(?nJ>U{UNB3|ADI(DL(uUTy@$1 z0aq>mO9n2O1;V$%$K)!@MhiF)Q$$mV0xGMkFIoWHcd1Wb5k*HYy(OsnhhqG(Uvl~- z@sLixo@RXpTnnlX&#we7!Jo2#ixHu~GiP$u9G10!Ub3b7T>6c$TMe7J8J7nlW3|H{ z&$Y-02SCY7b%!xhSk+ZV=C)H=%>v-ntV4tv6C*AZR&2(zz1-dK`0Uuxl3|blmL$P;kO=VVq49KbOp{=nBb6Tw9i9?tZJcK*87C4 zGvOib6di$eXcCkA-RihBP!iq!*=$#3a5(zvL?U^cCIIZU*{~@sekXdUe3LckDkkcC z8K5E@NQ2W;wJH7<5`e#DcQRq!C#=W%Gvd6a$~fClMCbvoCc~Nqd3OC;jET;^uP~`6 z#utIH1Zi&#Ra73Xo|&H%@%iBXsIgcPNCy)ByltZxTs=e$s?o)z zn;du#E4~87HK)!@xsSb_85d`h ztItp8qKww%9zMIgQ7s!h(t*nA82WyWiu z|E<%U$NoTOW@MGY-)@`2XHCx?pCjd!-v*!Jmwf3QRzVB?1y|!%hr3)m*JW^xOuAO5 z@UPhwtk3L5kAM9{S9-@xz+Y~r*9We8$w7BpIWO*<1tjfpZA|y~kE{1HdS~t1_bryI zIc*m0V}yG)GtA@smXkB>NM>BCkn71l;OnUozfNJu>Z8aV-NENowx;JF|8|9YC|`y5 zJhshBT|wOg=ou%U37a6f3cZt%JI9t{(wC=auTH;KBK3o*$>FUElYqs)+3m?W4W}fJ z_YY}RKJ-qz4Qp++;||q9jc0KY<(eXAet9G3*T+9j9I8v@d%$ z9)yJo+wID?5QS}=W2zOkNB&=O6I#XY(iv5g=%CUo^V1S7pUOXe#S!``SOJarj_%4L zmwNf4l_kJjZhtTaasR^)l~46dr@}59H~#<1221?gtWWY+3wty_xz}dppl6+zC_gSI zdUw=6es1I@$IX23)!0$H9IV}TRuCPvNERJFE}`nc;^IquBzxuM89yS_`_@8X=(XzT zzzsT5SgAPXeXjNYP+IS6-7h%kvY%^qEgJjOW?Nx{FYMcN+NyS`vv%K*>zsFabQRs9 z$1^XxW0z#)`iuBaSnj&JTODEe?n|hpnKcp~>Q1k>ICu#yJxAF)(i&S=TLV|E?W1 znVbJDcn$P=Bc{nQSh|&^b5f~5GtyzOtsceNtg2w6STU)1WjR{EN5ix1TyFb?9oJxaQybx$Q zP-ogN`|IjK%h)WUVxjWicBT#WeyKf`oSceM&ml;vO7jZpEw{v|D51W|60G0XkIq2Tw0d0itu{x&U;PQP$05^~0QqRqO=xpI)XyT@YcPU?JIk`Ios32$K(~Xyp%;s2V26Ebr}x_c>Y`_ueV~Ww*su8rUoL zdq?L!&(f2v+J!R2YyTEPa?U#0LS->X49P0l9Q$WqYl4lI;h(lYaqG|c^HP9B9|oMY zj%wdam5-yhgZl?bMY)R_v4qXmDhbmJZsj*tU(RpPUjy}N=k>fNnNOEqEGCx|k0!1o z0v^u;*Rr#lD;{q)+1S~Z{g4z}PL{Zuto~#hrQAM0y->28WuL7tT0TY8{oWH;f!vFe zu{|E7D+ftsjZm_0)bDZm1XO_*bOK5Wd;|pu@SH@!kHQ_BN6Lo%p9cJwdX&aY=WuVr z??dqK*W}8G;2n8KD$D!RPttYlPJZ=Ij7^A=2S=2W25@f!@zdgvPDjGdq2aV_0b z7A=DuSb4|L1s)jl^7}=3s*DVGCE5$~Z(Q!50;@-#?Y~!#`v`-Zcb-8nFYAa8B|B`s z=0sQ5r@^D37c;`@KvJQ$L|C%6r7JyjaNZSed9`O`gr;{`!2OHg$i>16+dNhWdiBF< zZFKi-+iPJn-5OJloE`1+547omoMq#Xb94fAtzFLi*_me*G1m%?wrLq`hk&27v?jT zmF6o?rjf+x_U0N1*yXHgX>Y;af4MzLqsZCH+nI|fpfibQ*Y&GWr;>#coZX`kaWl?q zq~z;xeSQL)pZ(#1Hztg>r!ia%Z0)hUd_ zt_1pCMrYY)KaGQ)o_<6WlFB8C?NvjtD>+RnPC?!}{@OXC?Y^Q)w^@^(gwAmX?oPeM zlRm({<6AGZky5Mokf{udHWHTzPycbw@Uy0q6hB*|yt(mP!d>2nS%y{PXCk+22qBNw zBT-*~SKm;+eoM~Hm8*lHN~N1vhX(gf=9X1+&MeUbUneLdF!ipmQ^lx~RqIub;N|&M zITdC?C8>YfU-j&A)6~Q1`0_G&^$B<2ayYin_7Zy|kZk@N?aa7S)#ep#loMEQ70l-H z$Ld6>rR4k>H?qTP2_$galwotfA1#8zd4g1Z+L@)dC~MF&HUr{e?V%UFP#E>gIucw# zH|lcZz!Dhi1t}MyzPf}(YBTT@pqUza8?J&YBQL$VHXBPT6aLgV*i)uu1G!Po=J-3o zp4a7LSGTW=VdZMz270WA|2Nw9%J*e{&;GT?%Kbe!P3pkJuCA_$IIn6Sc}_dyAhb(k z@XF(#L}OmIdkCbJNh9)$e4)rQW}o;#k<08X<7Ir?E!hv5;nTqF$urW|(rL8%h96tc z2jEttvw@$#4-T)#&0n+(J6FRvlT!SLZ&}}0gEY040$e(5>mN_UW}xxTE1 zamTpS*@Bv*9jtArX41&Db`i4{+L-cdU!R1mJ=a`poPAnSV!bkmb{8>9I9`yAvx2t7 zL00E$&nFogen95CMrtr)qdNGxB{J*Y#Ud`+M?=ACjk~%PK6<*@`s?}52LTLP+F(Qq zU9=s7gz%JhH)vJyzNteF=mLSgKkqRK3z{W&2%u&*{e|Jh>q56zIG}&g&Z<&S=pJf6 zQ~naKi=#w=l`bumio;|tua0cMN&UAe2MP|daY!f&EjHIsw<$C;WMJ~XUOFU*H6g|K zyP6TvT?#258TdO&rOJ=Kvabt-JqGssG2rG0GNmh=p&F`P<;9IN2plyq?bQ%fC5#oZ zz?2;lgwzwxm@UmQhT>T6)7l9<`XP=k#Y~9qibXn2iXo00CFfzVE8u_{d_fSGylaU9 zsRu094>b&Q*jv1g&(s(LA0=wWZKbeIzc_3j)hdt<5t63^(|ti&%%QX`5R+T3)x=CM zGPKTje{!vDRc^aDU{&Y~D~yQf4uebv2ipP#EED(Pxu53sgrk5o=~QmsII-q@aX`$( zwRMPuOonFNfi4)*eL~)Dx*_!d1a%se#u=Yo=qai`6*UFrTGQ0fa7M^Y zS7{bfRLS6FIOF4tTd3>bK}QX^v(ZCIOzTVZhqdNf|7JV`X3H$0Zv?U28q&Mx4C$pQ z!EuzpsSNIoqN0H1ts)Yxr~+UaHq<2EmC_$(&1vB)`@pE`jS{j;MD;-*O2Q2d2tWwm zVGiP~hUDI3V&Yc>iUA8j5u8wmj|b}bB0f3Q2VC2be;hL91D<9>{U<#}usR!- zocQFo`E6h+97{vf1}6exjiqv_`i$`9ZyimpRhf66X#zWG&wigiWv-=k9)2t5*jzBh zMi1^3*RN_ExC<%cn;cmDD;D-hjYt>~lrqLFAoy_~sz9<&_;VLn`+}E0crsa}8bL+M z(7wN7!LU)5$c=9OHm=8c+4WbnxGy++VVNG#&acM;+cBJd;M7z^a!|1xH=;=GvvoCN zuL3+GRyHhb3*+9~im5)5(MWo7KLBX8^rR%+IUKAAiU4jkn0T7Y)EFm{+LRt%QXONz z<~=Gj)Dl*IxS}+W2}2Mm*j}Osu#E<+QXu{p6^hcZPxwL_`Y3mWil73lotEq)J_6yn zZ<;_{ruQJU5tM87bJ`1Fv3BZCMdB&w*0(wfctaasWFIDQYJ`U?7EezNklkhxoPGSJ zr0|@eMfguL(JT7zp&9uGpsGM{)^#SgxP} zs%m~!~St&9Pil7-Vswm(=^DSt%`*vTNptKNY1p2$uE*XHItps$&dU z;^;R)yUM=eaoDH~=`b-gfzI)^W9Sf)`QvNVoq?6Tqe&K3%X@*^T5&2D^X-_^Xu!Di zR7;sCrphfy0DZ6b;n*1((y>+Mca$CfqNXVS4@B|V+2tLwkO;QS=FmRy?O8^MIz z9aRGO_ACdd4+dD+r?FkJd}nB~=Ju8C9Rxgp2gkQ8{Yy~{ybYaSuhU#at3X(BP6$v? z*~yy5EI6p(ioy1<#$2m9g^$b|qEigBjYWhGBZuOouCf{FA4z_rQhWs5la;`KZR&@9 zB;XW)6c?cs?!~e+aWUBv0>upAt{ZehkPARnPseM{=?hQJ_TLl7?c@-lyY$UukNxRH^rs-`_LYUu?$e`f(q}r5owkqzcx@~ z(CBCNU&F8$zTZk;q1@Qy{@@E=<_!!%d5_W=)3rS;iZpQ{*|=w4G%=2qMEaG1XqvY` z0)J}kyJFSjA)KoiExgFQT&p%+;CZl2{yE-NSt!-7dI~FA?rMnU=h~jDIz~iuLW^qZ zS~ttUE9^3%6BQYdPk>gJ=)^cb^x?~8OEZdb%ig9v8G>cdSiDHPOuXPfhTOnA=LnQU z^vPRCC8v|NXMeE}r<I2)ysEadcn7Nxv_D&)=_A(WAOB1P-EsqxnN={ z7l%Gv(bUU)Pq=pP?QVg3_VWDFE4I?`6Yt+POXz3;n(Pv2FmLmVU<;N?#G1fy=-t7& z&{nJSdDcUW@B8L{7QxdZGLZMqxlqWp%lCn`)i2#ARoO{a_|Pl&!o7=A!gNdTL<9oM^^WXF)b+fE87Ye{)TiOdM zb971qTjlzo$1xJmo=+BHV{7-;c|wa&ryPNqE-n?2x}@&G;>-ic@IXLC?_`_pV6D6V zC61@ubK*zdJ!$a=l9K0-UkYCCkG_jNZ3KW3pDdo*$8q(FXC$7C+g}g%M?9XKI=RRU zks|U%NDKvbdHn_+(dUT!1ix27^s5)hp4=HMGACw$l)GjHw~$!t^^?pKyw_0!hVi(7 z`I`1xF=a7xp*=p&+7wTjMhwR?RO#%h!qy2#1XkVCk&eaDuCdE6Bl>w+&EKx|w|XjT zvs-rEcja1nqU84n+T1m?44m3rh00s57n24*IZd7zG99&8H|D5-CGI|by;*KWIN^WL zkGl+=caQYi)_Whu8WP#Ui4Ktgd6=r*MaKf`4^n5bUx;s0M3zP$14qT9Wa(fd0e@hUx z1^^{0D6uX)kMSV3$KPH`|1;B!Tlr%mXVxgu=70Pkd%|~<`cjhVP({=Xop$*%~>wCBivuw=0uA!S2JnP@|m*V1un z!xCEY*v%&dI{D8w@MV_U&BJYt;9;~*2Z*CibIj-@E(X#olWj=6QNM7i*3lW@)@ocM z6tC@_{|FJmI$eD~l)+b7wGPVi3KCYu9(@vY2za*h)VtX-X`#L3CBuU-k>R=RjS<)_4@fzGCDmRT07)6E zo;q%IlXYV^USJ$A?*LR=0M&mf!xSyrFBI%?(G|HgFQ#~!OYMQL5MNdzBTk9e6og@k zbGE##EAi2f(j7ge2Q92PXC1X5gdFi$RQ|*;(LT5^(amn_+$-m;Ja~RZqn}XCThq>Y z;av#^+G2z4g>sh&v|~V}1lnV7N7f!|^7R07wFWB7xOTtz-2aHliypqk$)A}+e9s3& z0&{~D)o>|YiT$k#bsApo}9Eb&+8 zO#N}loKLE9-1^PCZ@*>EQL$;xQ3)JgtIg{Fh$}&Tnl3fmX1MeQiLE0k6AMRcS^Nhb z7v+7CXu862i7J)&^Z<9e%J{ENkTn1oy4x|{^M#H~(2X2D%g4o%>tD5fti{j;9oaGO zfv)2wB|q`yC*k?$KR+Ede{$ViOrYgDC?218ocrrp z*xYKM7BO|q=$OIZrQKk6IMEdK72y7B|FX~8mp6UW>+k*(GZ?$zF!wiL@A&#mnZ$kV zPIEJ8!tEMlhE`pCAd7$L4^8y}L{DNWB1-8pjn;eJVnR>vsiLm0tl*zH#{gEtauhVH zc|Ljdg*U#(Y@0sT@2MNN-fL~kAq!nxm_+|bTDvsgI#>|Cn_AgK%si7UXrl5grFqf; z^|ZgcQ967RA;s>ewdIZy%xra(Y-Du;nmHSLc6!M2S*STFIf~VC1TH`ZYMOq-imk0M zu!{I6H;@yjhi5)p0{wL5P9L>K?!c4Dhfc<^mo>N-^rkMYy%tjij6EFp`*`O3{)CW| zVb~6JtwX~G<}EqHQ%W&^ABKsGj>{K_)XUQaB}hrfGCw=x9|J}d}XbrlrdgUD1sI+y|*gL7{fAAFg*L=QN zLgz52|J>5^mGm=fet)BJ+}z%0*9qd?djOZTeNKx@Wy7`cl$f0@r8!FEleOgw)u3H1 zBx{03taZ*yd>5s!S<#6z&ODl^V6V2L17Y!GrFnaC)s*DK@))#z{4!Av(_lf6eGudc zsS~lJeQ2a`oLog~p!2~+h}nx5vN*pHU3fV7M1py5e3*73`pCDBt6tm$q@KR}nKf9= zc$9%kKbko8h1KQgTh1W9RZpnx($`DV!1oYG0QH@`0CWbG)d1J`blR!b`g$QoKL%&T zcgUr|6}#54@C_6|-1CI;;M2_ks_~;Xh`#Yg@*7i-FGKMJlXxP;)>>8V-JjimuJ063 ze?GlEeFT$~bsWT0I{mI)+Bqg?ZXz4V77N$64^*^tQ!+ToVg7cXo3)izC{mO{2-#mh zUEdWQ&l&X(@Q0clg@&v;NkSJE`|3P)`ip*4XSiN7Fxy(>&Xd zp?bXtc^3Wy5*OvXLX8dhZfRGRG|Mk_1!6zpg0oV2;t^KyHZT64wVnMPnt=S9x z52oJ2UGI4Ptu-2Nel>6$MT0tw*u@COMq*O_eyJon=jLW=k5Yh7W7|w%`61u<{xy)| zsZu&!p;(}QX>>1R&1pHQxxKaB`n+>Oq||$)mK;tbfUxaEq<>DXc%lac6Dq)f2LXkiLAf_OiE21~)Eq4HDRd zB&0pD!e#5be>vXE&@LPqCxjD2bq*Cm5!RR4=zNB9ESbbmNm}%if2t@qRWJP9wG9th(2dy8J)GSWQe5tUTC_cIDPkYN4K#s(AenucmS0vm~HQpWi~I1*mk zLKR|F5$(1cO1AB#bhu2o3~GI*Ue`?0mx@9>r0fD{tqIn38#?kyv~}zE#|O*MahoDm z+FjH7`WJlfeQ0wrB~8qf(w&f1v~HIvj6S> zGJ#UDLw|oDoZ4?UcnT?%A3sYhpuI%CUWFqqU-uIWgdm>6 z4|a0~w}QIysTJcRT7wPhmDU}HDDit?Ps7t=q$S8sWlP=&IDEJ8;Jk^kiJL>9+hS?) zM`2ev9UC<;+IBF0SwK4_^tDTX5xoebESxEO3{?3>VNdD4+Y-|`^Yz5xwGyv?+`mNrY11+m&>G}$Ym zolve8*Cj(5;X)iz&As)0&chpUE| z_TYRN($xp`=$!vab$vB~_JY9?CIT1`?_tGmBF^2|v%mPvjog(8JfVKTPC;6hapdES zi1G*=01OZ{3 z*eLT{H-H2;2JY={ku&F812BDYW&x&fIUTjT^iV&W)R= zuXyj|0v1pOYWGKyb!sIFUqD{{#(zGNK!xm5Uw#L=jk;$)lNBl?JTo)4FE|_&hE!q> zNKCo=n-2q<5;Acl40#U5U4LpQ5(YPS<}|jH3N)U*v}sT#rC<#Q8g{PLHybOO_o%cc z(1t{GQ(S%Ai~a1ujf6ywO(-IeW?hH^lrQ|J7(lfaBji60*eeBP`z%wK3BsF+r{Xx# z#Jv-d>Z@r4x=jX)a~@g*0!q$G;Aj6FA>YtK3*{S*`JF>sI#szlVOk6EGnaH8pQXi= zQ3MhVAh|2l>C{?_&BCBnG2#yKNoc`pVBF7!i(!0ItbG;jNEqMn&v|dXzwK$J3IEKT z+GkJueqTrYcLKn*1islN9-)uqTy}XMlt^L+Iv^~*R8|C#Krc_shEh;EWn2vhBQ}NA zw>;aoQs3g8M`0&qKQ?va0T&E|MHp8~yLqwlgfZsE&`4H*mAWdty;#3wdMA2{tFD6& zOD;4!EVPSHDc6e91=wCfeTB-g9@B^U)9PC=##?{77_+miJH!oyDu$+;u*(-9Wsb)? zgPc;k7DBWE=B>^d`^5|f-1cdh_>uAEcKJhf{j%KFVYz#X7Ah)+t&ED@>) zWrsz*vS5n^x38v7#7+S~v$1b4GIl~rL2}lLU9}3$l&R4rH^oEh;~9eHiH3!1j0&y{ z%`{GXcl+7-D@#0AT4&WI{5I-W5UCd65{`bZ!vnkzB{S;Mb-{!u!s}327x!U;QRi~^i+mVr8ukO6gd#lv-e@ z7XZ?s;Q{>*Aux1lv4n)-nf?0F9MoSaPhdskO(;g`e(50lvtl?OQOW!>R0j(ERoW$L zw}3Wch7~5DJ8zKe0)(wcxjxO#i0$aXehDu%?p&JKs3fe^t(rTAkQT+8yMqEnpTUWwreX`s}3(ws6aQ~)o7~QGyCPRd$U#bC##YoZCD4B<$! zKs(?a>_b9`)!!~^r){i;2(1_Zr5qwGAt~#F64*l3)d4iwEYp;mbX(~kG+`vQ#Ke?8 zhc2CSqj-4~;4>9HCjg1&`{s=%P*~{?Q#gjCyVQsOAb9PDMs{QY1%+h(wD^_4k9CF0 znpk4-#h3~rw+9&ZvczOcWCRkafge1QPs)?4#7= z=L@1Y4H_l}-aPpOoCXKjhVRspG0GKcJ?C%S4bh)pG?ygDKNp&_7Jbe9sXY6Uxq}_mpaK(aq_4!R}T-hyMv9DN?(*eo9|)e+oQd$_ojLIq1yjX)%Ili~LkM-E zU4B~C*v{+5qKJIexp~tv?i^LCeH~f0(T^mAz9}Ma;Wama8UL}L`+}sDx#7C zx1~Af6{^_q8%=mlIv`YH_99?35gDZPkWWtAG|Y$*gro!X|+ftaz`^!w!+ z=CQxFAe^KD1E@jIx_Qc6$GMzRgLe*-{iv--BH~x^BDyFN$hUomDxIrAJwp+Y)!3Ua z|CZPuG5wRzEJ53kwMJrVPj`DcuLq4eFQgv#*Dt$bt3OTe1N?8ZEf(~Qb(EBbE`oPR z1q0|swz#~k&YI3&#GF9Sdq;vvF&qN$Jw93pE<$&;qb~e@^eHow=Lc4s2Ug0&anCcO zE*l5e9BrcIHcFFsN`bP`e`ec7#upkDzFF&$KpltnZS0MlYA6MlTO@ z%6k+C*UA;N4u|HZh_^7EXM5y6Dn*PoN-_oyB+NrEuEGR?=4`a86sG1tn3kADZ9nO4eNEI*UZq> zUn3BuRQB0aqa|i^IumyjrSI&>_Tn07xo0nW@PV}PE;-?X{Y+L>_44S~cT=I+N{EmH z<4F}T+s`ov2q++?t+@Xrb_gm;*UO2}g}jSh*_3!DOdbsvUwYOeM(v&c@lJ*X(+Q%4 z&1`v6w;+)Z)295vTKDREtE+F*z+y^G-zff|Q{qfA zsGx}_U*bT8{M^ke=XAvd8ci5?jmZ0BE-4w7bp-D85`K;ix}{A=ok}jID@#J1Vs23B z_dumw&Xc3`a@Vr2QqU*o@!~>de>BG;G_;*Edv8QO=01;WeavM` z=d+M1uzwXhQ2LEOmSLu9;&gyMS^ z_XwgVo28GmJ=cm_Q50`JW;jibAwlBmLN9(2-ItG}R!?t+%6%@c+;z zBi{CKHwo~%Blz-!pMu0IYnaOT0EH%VM|j9^Y8MLP9aXww-NhUDl|4l|rLI|0T3m*s zTOXjZ{@h{vSyiVyeS~OrJ|Fo=SUt{$=~ma8&MQr`x=OwpIUUF%;iX=y{ZquT(N(>a zr0&SWYh8oziD@O6ja`7ea9H0W!zOKpMunh$lgyR?ErV|F8T9_cWx$oC9^;w#uzlMq z8{DYEJki{dBYP;@*i3VK71baL&wpCay|6*~$y1xQ&@dIAZ!nyDp_JqI@c-`T#OF^x zqwF(XJ8ZFXcb(+d4g@#p?|of&6YmksshR(u@qnz&5$ z6X+01tBmYC)~2OTS>YsyuAwB3uEC$9YJ259Odnc$cR4>Alc}9Hre1gZYDv|qbi_#; zmS5W#Gu9*R4E;l|UE(6@>p2$cTEZ414mb}723KI+X1l4dI8@(Y!9_pCceko{I6^)S zReLIV3z?L^!e!hg)+??Q3wJOXl)lv>3QFJp>j}Ce{Xku-kAGzNOBQz$K_Am#tK_Cc zdiG1iNqcPZ0CV}qMZ=(a4UD_P0$coZX{0FUw!Ad@{-5>0y8zDbHFk}%ohrKopVW3p zKUfcET>F;d3St;+rSB7+)v3`kMKQg?|0;bzm3BJHd43O`6`5uG$5e+?5?SH$$sH6{ zx>$F2TCSoHp8~Lx` z*;V)TL3!+BB7L>N|6=N`qUz{^bs~5aT>DWA-6oswx@`?4Jrbc`8R#BoAgrEH=EC-Tha4l?f?RDjFBjopLxu5McTpZf=MJFnxV%Dth)w|t4AFl%X zA^zz_9(JOTmQ)@jCQRZ)=h{JgOP$D@#gBFdocX^drT8bCT{TF^v?o<9jqMDO&Vx{( zyFUoDC;!JQK!EPpHl9zbnKfgQyW5Ebg>R};)S1{C@Ca%fsAVrZ>$hty4z%O%_BMIq(-B9@3Ycb}ez zob$7=a@laL$j0+%o7LkLGH_#%288U!JYw!(-RZ2*?OyHY_tH2@%p~f2g)98!Y>^HM zz>Lj*TM^;#VyYqf{25M1m1lRB10KY^vPB%_tZrQSzlMQ(rSz)GKask$$9)IC;X;7$ z%%aSTU(M*lhA(Kt886J`L2I3s6unu9h09BR+p03UwW{2! zbumnC8E$OXe;DbQSTsw09kGrIU6E?gb+AaBIjOO#(0a8=g}!Mr9WUqo+1PPrGx}Kz zL=d&&QohlkL4WGyh2ZqZ<2`O=)wzZ20>yHz#G1vJv82-?#|v%7u;d3cV2(+btwz;0 zr#d=lT{`whY};Tp<#@)0KiwLleMQslY%ngV)2TJFN*N+Z|Y@NUA(-W%^q|F~TICf2WxZhs|ymRmj` zY&@P4xadwaFTRV|JaTwlf1X`ee_sFMb@;fQOnVuKIpZ8<6o=ePx?=4c=hB_2w5-yiifNib8BH5zlRS-9H4P;<3Kgl1 zMU!qxhre~d*994gi1y`F@?k_d-(PnrxG~Gq;+GB(;YR8XAw^*e71pU!Jn25eB^ZB< z-`nS2HSDzV;9ThgQECW8D=O|G_Pf)s_#$U|V)Q~@obO-K$fGQxn(!4TjjPus|7C{( ziFgqY&)ngUsvbH9HpM&lx?+~S3GOEg!wH9!?c+G$lxxE6<{m?5P&S9n>xHeOuj3fr zrrYn0Wfhi7YBsWX>PE&s<$U?AJ$6UAIs@LT3{!Y59n>ITms^);I8ldo_$lG6t(9p2 zb+l*y)VT@YSfWkc#u8T^Lkf4Xx~>>PCA!)30Gg~7MFc{=0HZ2sjnT zwxecxYEy@H``e4LLO9D3)Z;TsS_%Ji@tmDnLp#qoK{u!H{?thz0U&5cxI20j>fJj^ zCZ)3&`7&WfuaLdgIXdoRbLWPArR$-R^QXA?e!T;jT~J$D_u8?il)EUmn5DLU_usW0 z%sHPZ9nI$Uk+T+A?vM4XRoqWc6QYHjw4XXaN*wft)GcFUMJx)<2UDxgyPB}nF^B>` z%Zwz`AtI2{1)UnLY+e5qbQ^QPF_6gpHqr8gHpx2HDcO9OPkv3h7t zI<6$8nEA1Ktk{+O|M=#xyMY2Qm1^cqY7p~!a=Fy0Le|@Cb>2y?Ayo?lStOS>p$XYw z1WR3FkvxGEM1_HQm&ch(NJ&1@sz=0UbGjst(v|WmTHS^TZT1KE)k@uDSbim8O2n9( zA7($V=}b$suGh}D!QxLKZF;3Sr<k5gBMKCm-UAZ6%~H55$pcU6W@`=VN9V ze1WEtO<411wj9lPjZUI$en>@dlVECF#aD#1Eq#RQD|`eQC7hg`Ta)O2aP&CFdA%i=Cm@xQP!Inlqf!$RiQ%oCUrwuQCGM> zvLGBVDlTP0{tpR@`Cz=|xk(H#=1{O7H51>l2Zi9jw`qIy8s`X2Bz4S_kx;>@;H|u! z92ytN4H}no%PbEP&=rM+IngWRrUHqnU>nCb44ePwM76fKg{-Ezo}e@iaek^r&`;(F zzfhpk#=~86mT}oSG`SeH0M&47Q0W2EQczT>vu{OOdzX*lPY1YVM%HwBcOp#PnFvqa zy?>ikFbi*#dKhNRJ&w0C%0)cyuO|&wdOFyQz5Uo&NnNA91nSuKuh(qOBbrgqmr^$x zH^kqCZ+e1OA~y;Yi5sphAssK1+6IVxgq~5)Yy}*&%X0CD90IO)rE1&%QF24>+L5?j zFZL4BU&l*#r~qUmvmo}VaO-!f+nkcz-?s`98IK+Q^NHi_O(@!)y-qKjAl-x@u=V3L zcqJLfr3tMKHJt)Lup@crX&CLg2_f0c3o-liz}*Ih#NE;uH?2ThJ=XmDja1(#Bd0fD zc`u}88A_#gCZR;R-UY%Xe##jVFV-$YQ*Pg%={3u+dfLckq687 zU=K&d>;J$<7sTo{OfzzWIq!B^rCrFobr7@n$UK~z+@=RNqKtWvTf&b|V|Sz!Q3YrV zT=z8`?{=?MYLmLTn%Oeum*Ngv!QWWy989xp&k;@$j#w;G7D^Pjj5tSigvQ&6Nqcj0 z?7i$M0yLe^?ZOLP*d>pSL$bN#az>`H!#&DMUS}R5@wCYL2c9a~aZ20|Ba^ofm`;(TVi*_1+&4X6;&6rOvLNZ{iu$!5`NPXgco*R8n$Z zJxLvzj0PAA;y7ED^+Kh1_Ub=pHc!Y}_}_QD!0}-b4qro2v|ZU2a0GS}KA{b|+69^p zYW6NZB&-)x(eRx!T_!f`J3(9o-k)uJfVnk^o+civqdtTEO5D>xB}TPO`~FfB?D7Rd zgDgnz4ED>81l>o5udB1`B`_QdXo5_2|dy!|GB)KZ%2jrjJ$Z~CgQ=2|?!|Z$x z5p~&w^ifXXFNee}&tLtxvU|{f*wC@O@WYgqJXj;-r}F()HmDA9e{~VH;bL>aKlFC- zu}UB=k2(L5mVFO}GDmpGdidjhcH%1v16A+l&X-aoIir2g-&D8>1ucAI~JysYt>L(HU^=){^LIq3vmh#C3L?jZ(h?>8m(>sBe9gw9sGq-8A)`Z*?9o zv#p)L;}u(I{3_6UzOf+%dp_U^_zQ9tLhy(m<--;k!dikX8)BaK`Ce85+Pf=BN`Ham zWL^bGjD{AWPK}!4wCYqV)_K-h6FjF5C^I6vNf6XNxYQb?eFKj>kjo~?>LJv|AIa0X zdpt=2O*O7v^3}Y>*nhxnOWP;QB6=YS`iKQ;3Kt#G5-{2^%HNG;H7U)DC~sa_hs{fd zS_@r)Yiubsw9rs&Z&$QmI<;C=PTo1j=YWY~*DoD!z<20a*njs#lxE*pTm>z-ozj*! z@{~+0W<{V$PQUs~i6d$5T1u&E4SNbjr8fDG|t+7sixK-3C;8_#EI42u?c%>jTyoL)CT!-g{W1xQXm-2pJ{H%UE zBaqtpIgsEGi(M4uIFjFt)+l-G*-9HjhE*0X4Y1j4{w=Z%O^TexQ$Q(~%LpNil*@HR zJc)De-(mMay`h+V4v{0{@!H6g{(~mjuDD>EK>E9MBX3maNDi|-OBgGSiAgXkNUXNH zIIg;ZgZ~ekgfxOr5N~T|E14{O>{9Mm8pJzra27?a?Yd3hq=LJYUNOHA9V(U{6a=Ql ze82$4K|aik)OR+rS2sGl;ZAGoJ4|hU7;QMd$R~n%74<+@$ZEIkvAUwRR@xRyLWla= zo?RUk+Zj~bvOWHlwQJ&#SKaXeRe1w%6i>aP7`|?{qP1M}LN1S$lj!X_s`dS7>Rzl& z>;nIaB7sO)Y}4y>$UU-C$UPRK;%kCOG(c&|5)Zw(`X6xB?If!){^^!)MHDmzGBj7R zzt^QBGBk7`FGUOQ{)KV|ecnk%1y_mG;$K>WbYc~yCA4}hQTJ2`R=U&g(J$<>$P!@X zaJGSBb0>;iFgSB?xbgI0UA7{kT)CPXh>f=h*E3-f%Ch_nIA_mJj@$c=Nva{50QRxl zU-J?g2WGUv?gG5K)h+80J1DHy)|}1a#akWG5TdH6G5UWEVw}%8IYPhYp~ks! z;y&M|?=my7U@$4nVv%YU#Fh(+0;nigQ3VW`qJ4bP%BEDO2r4P1sw(Wn{xdl;W^fa9 zx)^eWV^m>9f2Mn3nc=3x_{aKsI3wUvnUAX^a_1n)9xdnKdEhkRXB2IJdKdarA?HRf zQA}6%iYI9PX2%Tb3brrz*UK_#K)e63!(gFy$FS2>vR7O|?Ac)&0TR71p!pH^ z>uhal49_YKS<=7lf-tXSr4ln2^ODyP)t! zm}=%F#lzrfr`%n4eN|`C7?DIV&78gsSZv}?;lfFr`26Y$w0mFVpLoYzQZh#C$<9GM z@RGUOL6F8|LYYUQ@z%a>SG`?X)^$V^$y*QYOEmHL<@G*eIjKn#4mkK4=Oh|=T=67} zcG0~LTTT`t+LPUQKgOO}S^LZ{V$qPzJ|SEUr$zd)bO_#7b)=fWw^P4l%4IvI&Yd89 z_64{6YdCnO$g**Ydib%jZ(gNtfxsP5@1_|ck5#0y@=qv-QJ4aKaEA_G0{mBRHy4Rm zzH`=84+is+GMn|K6Ywt<`zY&n+!k*VkN-Gds!my;Io$b;lk<{25Lr6%Va5$TacH_= zqw64vXOKg;+!QsrQ1z|7=S01@Fb{r#=Hs|{?OV_&PlwQOb`thFi$;2(ZSd+34ri_~ zgU7B@?1^g|VIdg!xtX6J?BA~6T|ACHb%A1C_;1;*A{i8^8Ngstce1E3af3aUOz7{C zW3Qysr4 z*<6)vkxp{I4VkWfzk_>WyMh7bY0FP8>0lG@n7rTfR>3pm-I*?$EQRpMq)wjAQiDam zz)~VKGZVx(0OTDbQbFt38OXg7lJ%q$kwZtn&1+z3%;byD`;g~|$Jyice;!|D5ez_h z7m-Z-$YGkk4`+SD=45oh_WY-j^+YxHyMb|~->&LN^zADyRhIaz1K0`x7=_UQH|Z|$+Z zqjf&ku*EjN9R23=&Z7ZIwPbnH8{Z`MC}o9JnTHBTKij&+KE(!ZitH99Q8@iMk<>fT zrWnbwGXxKG&x#MfkHR(-_1_k8DjqlQsVgiJ#2S-QH);D4w6M}_Jn#2HuScOJTAJzF z1&F^SR)u5!C9JN2f}<8aIUZ--lMVe|ss_#(LZ=5sg9fDU3( zMPfmE+|gWuG7!uCc6h!iRd}QioL|!t9I8UNM(v=FU+RaNu%~L1;)2u3|7??W3ZlX_ zdaW-M#yLF|1C?!ZC&?8WKAb#qP+p`aJATS7kXe#k`l%&j3vH023rvKrIk0cZwRes3 zk0aT(!#UEF88bjzP@Nz+ir{^1C0rNo_9Q86Dx$6D!znB|W z@W%0Qa`i>h%T6tztHQMI0iUFeF%th7>8Cwc6B>|Hi3}v10S5%i|Y5OykaXqIydKxWs28)F*Hjj>J1-R3gAYm@zG}E7Io+(lvup z?!6R^Pud5xeG|Hy#%Pf#5k-ys`MD70g`$gbtr!8>d%M!3-gh#=;Pq*{XZuI@=$=*X zm35;>Q*Axu0eGVF`*Umwc^K-xTr~kovU)JH@G7J5+rbS!qIbK;2jaDh+|Pk`M6U`| zsPC?$h`Q6BM=cUK|DIt zZkY65JETl1hYIK~d7(G~pBG2l$4e&gI6J5(a6fx=If<;O=^;W?Q6|6Q0n76>*Z-P4 z;&3gdiYw<{bm$^tD3zx67n4rA(g&ya^9ks$ESy$G02}}(=i`T{(WB@6x;L2Vy^Tt) zfw~yd*(Z^ctU72s!k*8lcd*1X*}{pGW<8ST_HN(K3|f@gLAiikEFLp|*dh$&vhV}3 zI1#iJO2|^ws;jA_Jc|FCyq6sQLaguW7R#t6Oauqf0GG7!B3Z|jz9FabZ9Z8tlMOpf zRvGfUvkidyj$3D}&l@G@_11=@WQ#!y-y}xt9|LG4#;oxwbLE-2Ri$ zR{XO=C<~&n<=5H_KZCbX`&Oe(WP`x&1#$C7S|9*?e81TklvySii&^afb!ZAY(V$5m z83X&jXp}bIqeJ%E^cU*heFA4O$=TpI>Fl54m-#x3&Ym#V1 z9J`L1ylau>P*+sH2XU;#iSVM3iyi9IkvQ&sPu20N%)_u=plWP=AOfBq6Fcj_d0k)s zsz?Rm)Zi)?n|6m~9PJyyE_|taPLvPwISSpE?TOCq8k-7i?b(#tvgJ)vstz|6bM7!bo0%6qP1fI4=H$ zKT%Wcm23B-JvmK^aCEMnVj)_M%ZEWsUZ2mw`-~w^T6JLIb6jPPv~d*v^unmm6k!As zJXxUh@kz4v51)Lni*tw+eixa-i()&&kCA{*EME{rj&F+=k5dp;!1oGc~_>o#qdU6bEmhK#-=xOBVM}2Qqw+HKM3Mw^Q?>L-ohvvy=1LLbWklC$2+-C zb4tJ_JW0wmW|(R9KEk@oIfcACMFy5PDo&c{JD3)`+*97-p2VoQ;_Y+&%@F&u?5~(z z#Y5Y1`$s=H`3G*gdEz_+MrMfhK(w*fjP`s6N;W7KMC1OHfdNkA9qbb#B6jhWj< zQ^KSPXYFOHUOCX{M>bD_@)^`0JXEr@E7b76<;HkklOU{*ClcBx+XB;82%8AD*Xsk`O z$h{G7mE~DbD*d9&fL$=^p`v2kmcEUNu5yM7b)@+ae&y-puqwanQeV!u zaz@KdHYPWsQ(wz>*n#khjwg4BxxV-!q8ySHS00}lx)He1g3l$c0F>1JbX!Yl6%e+R zSG61eP8Tw&tH8Fg8OPzZ#AQgUw_nJXw6zO>ifQY>2J7_-&5>-Z$CK@Wsyw0oC4%0+ zQtIdY&N=de3UxE^x0{E8(H`Hj?P~pRh&|yZIUDJMN?q}R6VL;-@k}nLh>IGrRy&ut zF06ie)7cSXYZ?>q2*CI+gyz>K($=IQ`IX(JzvhO~M#Ym(Q{!}M7)@Kph}_FyXb`I6 zl88v9s-~0=^UB1CMDn!!DXvug4XK_d7EW!?SJx$JH;HOcjt5U0hzyC@t6{#YP-QWP zEro7XH|h`s4j&75JKXZgth&S9QLK~*196=q1xTw`Mn}pj0Gk(G-7`UV$~F|=>J7Fr|+-`GD@@p5>@ec{eg`RwbRq^;$m~D4dbzjRhb0ephtG@mi!SXFh7USJ{zzGX^fAxx zPab_Mf1&@ZV6lB$QSX7jl5KaB&$2?Eto2tKo7n;&a3b|Ee+fUH^#I!ccN%h`xpFd- z3dUr#R43o#qQ@l`1$0y(^ilO+pC^BK686|;=~?jpth-e``yzK&qn7>z-OACE@%w-$ zGI7ta62V=C6iZlc_1T@!ho)B&>|$w2f(?Ue&u}V_(nPt@Zs!nbf7-FOL zU|i{E#=p@bhyl)D*>lBN;f(tISl_Wngkb#LVDxQWEJY*zBiIN9lPC|stnFP4q(xHQ zbq|oe#pJ#p@$3ApY%v}AzG1alZ?##h7~)$1bX6^{jJfHm+Z8gkfSDwE%%>t#H)oO z>?e@;FJl4e_|SMZZHh)YY0yo>YaxsnR>y8@KQFo58#i-cnxQ=RO}1KL+hSq4RcbfO z{PVFf{>`$%YZa!RwjU!Mq+Je(dwifi2!gM}o;Wd=UT-1oU&PF7+k*EiMLz@0UxQ`M zO4AF+Jv%Z7=@Yu75+`~!?U55UA(>Xz^i0|vy$L#H-CeyAr+Zz~=IjtE5QzL}dNtG$ z7=wlFB1Gd3kh)noX*^-n?XG0NxTnn}*>kbe#g<_IhXiOfsGH4^-wosI!**3y1O7Ds zt9R+xO8=?dQ^Lj-aQ$@m|F7LUpf)T^M}DjL=Hz}0vqjB202Y2%9V?THtG{h91lMrh zYQ6uJr$*@qHlo`mj>RtNZXqDt;LXQ-b>)^ zi*BXFVe-2&TZ%7Ex>4>&>t1d&5Mc_?P+}?hGRBgG9ap%>tVZR=uPt~e4YyUsM$+UO z53fv7jNCP8(m&^bH`HZ*z<=HJ?N5xd`;1JpCi=LcVFMtOE7?yV@i6wVajB|E-!B@w z-Lr;gVXQuEAINznsWOBOnz-ZQq%^)f(PEsZCOR$ZDnV=b^#q;A0ZCAG* z#up=0r=xQ3#$i5sDl75uRL0i(s>WrT<0<#7^74Y~su46x+iFz@&xrI`KbBrSNDl@r zRpvMgngB8;QMVCdHx9ps>zhHFRF_PNqcfY25kDKd!t|H{3 z4g(D#IO#z(^neQzo`corvi+)RIqJ`qtb(cGG zM8NZtX`Q?!O1TK%w6M|0=_~5k4WoIFR|>Dkwi@M*U5Zd-%%sIl#DNkAU!9@xzdid5 z2sh7;7w!G+o2NND?S1U4HRhl&nIQM|5j$aI)5nmFKam;3a@)9gp;XFa(Zw2M?x@wX z@eoA3c8Mg8sMcWji7}3-JV5UtGVr7|F48)*g+F|A;j0(*s(aD1>AXdCWx73C5$=`D zd!pm^bmaQxhUFZ!W49HufqaB<@N8cZbQu*np0OZrRLb5PH7yrN-^ohH)%QS}VWqig z#8D;9!AT=#7eant(MXo^?Sc9Ly`UKdnOcK_T~a!x(mrKcqcaf643PDINHt5SbpsPq zf|o!G`aK_U0NIpMBi6Kx*pm{b`o=BBC#wYQrA#F(^b}eRxDAQXlesu+-t!WLJz|MC zMGUF2LWV7YwS!ocEYMTHGuilSpf6c#sQmbe zU$(7aeT3D)vxw-xfI8^KFLq&x2I`xBigaRZA;CRNhqmg_!G_>wsEitAPpz2XX-6`P zJuD|atV zU6VKI713Qd2|9Yib4sz3NXs`qEC=$zU(k~zpS)@mw<^sj1zbk^TX3YyUOm_Wty zD3(a9;xTpIJB)5tg;|~bSI0Oj9t{7Jln%PC3v$nhGh6nkOl`_?z%U4Ld!|5m=j0y- z#h%l(F-RkaMG>B&?r3o;@(yghnzzf>*tZX<{Mo4t88}_0zcS#Fw9L?acz`?Ub>JRU zal}t^nS6d0=PtYdwOYFoeU_ga9;H;X-F7^P@g*GYGV%%x>8&A)qX{BjqiumK_S?b2 zEM&^QC^uDV_-1=?+BGJlnTVu|mWlN~*co{KE!U`d@H|c*non z!_;#dV6F@x{)e@rb$Iu&zM2BI&zW1u)3SOZm0i}_5>3VpX=h`S>1^KPkU?(RgnDN# zcu9LTvz2io1ao&-qs@svBOD}@a(LNd%@yJl;_@tza(L>?y*2ER6a+~}Ns$U`g^CiO zJiQf7!`Y@0g_`;q&EzQz>z6iWrXhC}NPVFN;xcmJYSSsu2KR=4qYxLyf|V!sU}Lz6 zLFZR(c~M!ilaq+X$v~TJ7mQ2`P)W;j#D3F_@7Ybb;-!8#QnLXVHBMCzD%!sjx7n~rsKl)Jpz zivnr4X$@I{;8-b`PNG8i6+mYTLaR58Z5N23vQD)m%N<3G;}t#Xo-hP{k$?b z9_RLGWk4;2tEou8PdO9R)fzFn&yGWi`B_EvBaDH~E@aV{k%#v40^c=et`7!`blke` zR)HlY#vd4K9;EAYx#vnN{EboK41_HUWvN;v|Jt@n-Y2orfIlKsN4;o;=J)f3&?eAd z_;R`=Q>_73pV=fKoQ-__jZUA)r_j9*>jE{yHG_1d!^V~wvP^%TDpfidKA*TE(%Tn) z1m00JP71on*!n>7%lC|gUmOcSv*|x`w`dBGhDk`cN#cJ>BA>_ng)|?mX`b{O^zT_j zD#ZVlTNsP~k=uM58hIMX{k`VLK%M5aOCv zCm+Hq5CXZ$V9c2`8o=m3{NrjfCxq=c!SoC`Q2RW>$dJ3+@~cY$z48xwR&bjFGlJTclu%-0N+Qf?j%$K zQEBeF!bh>Uk~cB{O2wh z0>_`m1EgS}bzekOfK&(V0R0U)EnfjXKA18OxsMU}zsl4u==A#*2t4MFldh0-%8)`o zkSCZqWip}WZNpjA*D9ocnJI#h2(skh^~~sWe3ewY)m!F#_XhzmroZ`_ zj+oRa$~566)mU(Rh2p*mjE^uGv3rxg<@tL4{p$oBw1Rn@c8X&6E8yEK2PZq)CoK!1 z)@pz9nAQBs%^I&i7(pgsnEd!QD{MoUjO(TU=T>BZrL)L0V<6Hy%ylW@pe;Z(;94u= zgKp!yyR2aabw=#H63?asY3Fr7<&9BoSi+rWx+J4P?o9GPi;({w*?}UbToboyvf
    )7W(Bv5@l0f_^ZqUK~^l;pkb>bdR{1QoS|NbUv(NeYVUXYp~k4) z41|SjCV92+y`a@RQh(TvmjKAE-vI8Nd!3;NDPTtmC_nFw z@>pQrxNrXRQ2ofN^|P-P%L$KHbdQ-0cv8tfkS4Zg>y8O?oKodB?1v96np9vtEw8mP zlbDirM8vrsWfe%tpzug={w^=i7%h8+DrGIdBD-=>l8|VT%^>Sm$u1u;0*r!;oGAqv2A%z>JKE60PG4qS1jb6j0hhpt&uiG7WPB7ziwP5iriV~L zqn)@`ood{|J>KtZE0UyJM#Lj47pu?=Ci?u@^98qCpV-{dbafpbYEH+pA8bI<#yugr zx6n9_oV?zv(_$|LbV!*73KjOMr5}jD>_K)W36%CE^7?$HW%h47jTSLn_&OG*B6gQJdVVxC=S1*!RdQL^gg3UGW zN2iBX+0rgUi*}r?&Yfo~Q-8P+nah{m_^=p*73k1VaXk1b&Hf2Zg8NRsv-jqg3%X9; zAEkZ^#DP39jG=a9L!h z@sG$BtZ=aPDp=}Ay%`$o0B`ff)WFb154*{E9P2=)o{Qcq)lL*|HvRM*^3_Uc zNWTGjAyt5gygfc}s-FTJ&=5YE*Tfa3U;LDLF#OP;1(6oU&Qj%JXqoC#tT#r-yAZ=- z=_dxU?lJyAcAGW<3W)iDZX}Yk_{H7&Udp^Q{j;6-MFJ5;)@L&^&##v8j0Hizl5Xb~ zDQAw*rL9jnPJiGh3|bMm1jZTcc;Vz=hiT%>ps5pBY)%2=xm(!khV<^bn>h2;V=c>Z zW=_^iPOj;rb|I5!SePQ=syp1_+>cs(idF%pC^S8Py_AV-I>XuOB?+5WGuP8%%_CvD zwQd=^8QJxgV?q0=YQ}#Z{w<$Ep2Wd*PSXUH@(*VM$|4eLY2U`i6s{KzC$=^R#)#5 zy8l(=k_rSlWh*RJ?NSh_V^>)ig9eLM+f`cK*cEvuU5W6jS z!nKc1qj)wo(+1z~O-toX7az)J^38DE8I#pGWu2BNZOEcGpUnUFH5tCF_fcg6JQX^rA72W?Z8UuRQc4XXtw zP@t?9LP;d}1DE@L{OQL!eHxJ{^?37B#0V$`dPd;JUsG8?qfV&U^RtM|m{+aE^mCr- zi(r+Ws$M91dcF~c-rphj(@4aLEhBgtCaJ2pqY|kZ;*Kym$10Xu#C`4FZAnq#vGlUL zmas#qC-+i!Ks#raJ0Kl5D#5kluxtf0re;VCjjwIw z7;D)r;m%PdA2LT}0C)AIEYz90G$&_fT%Dw|i^(5v^@PUAYwuc&IK8FkwtCAlc7<9^ zC`B-Kq{Ki`O+~(>1g>FBJp#t;Ui26!K7Oo*7)1yO;rK>l$33r5f0SEVgik&wtyOxt zK>cTHk`2Sj1B2{PzzkggS#VNWd9L2+#!)>#2&w$``?TAEB-ag8A|Z==^g5gOx99x! zj-xmevELCSoOSlXK@&IV&VRT+K|XV0{;U#-5~ovypHSx=3~izY{LSIdc1F$tK&|=rNiR51}Kd<(G@ORrN%=CQhT5Z6oe|EZQpOA`xvz95SPg zRCvBFf21~Z$S2GkkG>+p+5H^l-;8I0w(8uTGk>C@T(%$o4?5Vq-jhfW=IVapy99X5O$-8wW85bJq@M)%3ICwe$m?A_4G=*o zo_DP*Vwrvpnzk^d+5=kb&v06rgv<9xLkIB0^hC-;h%mCH^GnU^{~nW?O$MsfrV*l+ILJKx zO}At}XULghrNv{yAN$9b6{hEJi0y&gS^!8dnB$Jinuf))MRX#!LWy87r4~*;ic$A{KrA z$@y&<%9JVf&NS(;H>b8(2+} z*{e1M+U(=XN3>XJFy3WDPeWwF#`-2hmpJN(KuQ8$rLqB@Wqiz)`3@n{)NRKHWHPi znefe6`KqZTyP(DCwxmTpd!7C8S(H!6`|Tt4&L>JBga1y1~&1zgURlHEtZFJ zb8Q`#m*o0y+g>$Z6W?4De|@D};>`^?MXkqeG~A#weMG-jLk||q{8eRrgN2Keh^aJ^ zX(eZNQ<=?V3ZuS{02ZbsFrN0c)P~74xOfOiBi{cRUjMCp;Hl0sy0Xb@`O*s3GoQ@1 zyr!F!oRG@>q_)Rm9#O8cgn%1w4_tZ6qgXTQo0cU0+p_!SQ66~{bKDa{Mvp!Ih6PlN zvgGheT%A`_DD8ter%cv3G-%JXv#HI={j3Ar%gZ?;dAxlXVNId5i|Y?Y)A#;x(E~X^ zzR(l@#d$6z30(_|@^%icMKP--96l_>Zq!<^6aY_{qy8;X4sP8>IVMr{OkS+={~jdd zYD+!)&uUK^$u1K>UG+5<(zc6tdHs4(tn2zON=inCWk5El%A4O3W_~0W49NTLY&$?+n@OznsxRZv` zRy%G8Iuq962TZuU>7z**lW%g9rt!`|Y&<AElQl_I;iyI95jK;DNl>H7h=Z=rZ{3gTNCQib zi37hUC|XChGM~Og;>h}UJeB~jFMQK(1EYx<5uf)Amc-=9&pIhl^jNRT~5WmU#3b#&2Ni}M~`8}%&H&ZvT*wM;obVOc;3my%V$!Wv%uK@ zdC?eALK?mSU{?OSXqK9ne&XAX2@a7zmGKuO6@FM(e z-fMw}hqYA~`M-5a0!mZXnac*fm>&(f!XpLIW&D5~e+1KjG^L?NV+>;u21upK_@6$T z{EY50wo;~}uRoKKQfjuO!8fcLzc58`ZgI4)ks&M<@|QGe3hB>>A{oN1_Ce`gK~#mX zgsRAHJv>_PJn@vzO(_Kg;TmK+5g{I9X`W4bQ|1W}wvBun98toEwXh`y;UN<{feH!-da(-UPJdh2eh$j&0SAf)39zQXR@-6ZZtqp|@!_k44VbaQWhgMo$jIujvsE@g(G>ipOx z#*QHbD?ZjI&y320YxbPuT13-e20?*Y+uwI0RNBb$`K^DH0>ZXMP-Fy*FK)isq!dcE z&&kXgOpo_dwd>H<427(JHMMVU`FK5f0Nh?in_4E??J76^%c$v4$4a1|S+G9Npa3pS zu1GqZIecx^SdsYaZ8>tS10<4GqMER&3YxFA!bD<(Vhj2hGS#}M@4C;?RRmt6_`Hob zo~a%ovc!dkOe2do%>}(Ls?SXzPOJ_}?^F03+EqOM({}VvKGSG44D*ZnboK^6avTrD;J?G# z?`8qe*2A7e?c(ufi%|!Jk5vcEJH7723a)=ALH#^)kA2W#+arc|6gvw=FdwR#eo zwE3A;L-zGerNkADhmAx{O-}ylX&%s*abicYz?R(iVA>!ZZC~{RS6Vy2b+`bE1iY|V zu^mtv3#w^~e=td750!|qJrO~5r>Fq0e8Ip zFXt<7H6_RBZ#u;s{vdC(FaY&F&BRlk{s)|#)w74cL`W{|IBkH@%)C-D$G1f`)%KVU zgml4crR18@Zmz@7E(%UE+vz#YD%Bs2EGf)N;h0}hk>Tu$Uj7k8N#e~|fka5;)s_C^ z23b04Rh|+!;acH0itdWkJf$9ViNe2Yf=jlaXfBgS@$9Z=j-lzIz{HXi*=F<6oMdKY zifnd(e2ORL-YLfs`X4er$2*}{(^;y+@}+s-hNC%=nceZ;kOk8?@+kE_4$8{aJab~y ztzWQlNe6h0?mrl>W1^em96X}%BNfw}>bKRmVU3NR=Q8Si2k_i%)oVW4)9 zT46;f2!I~6tU>8tQ@1H# z=`i6?!bn+Po8}tb{Ok`$iX+A75Z3~>RlUIqenAfrnD6OI2NnKWS>hZtOh&3*#jnj= z|K=p$@%?zywY`^{=_{9zLUY>Nt#i>|ZoQ`2ubkGG5^XrtgaBMdpGP*5jAubES}IN< z@;O7Ecv7Jf( zBL1aZ7xS7&sUEN)ESJia^(tAzwkm@*%24apo3klj?)cdnVoF`J|9~>Lvllb-7XrPJ8 zFP_6LB5LDfv-UJ(fm6~DALwP)0KdwAO*WHsgRVzr47yeqapjgBS?{%nH^U))hj!&b zxeuzH*{IN|+-qtJ-|$1{CQ_VPGb|tg?0`muh8JuA77~M%_^t||RMN>{+-C!JDScMV z-qNdtAICjGD?(f|%iNtW(&L9u?g=ryL6!FuPQ!~NiTE%VAsXiL;dbeV=qb;_Ux|ql zRKotTx&1K7(p0egSsk*Tyt@{MtLOV|3fYNEVKd^(7oQUJFmEPLV9YFOOu4OMFapg_ zfx!ceUT>~2UyTsH5F!+AJU|Q|@@OcwAuPm3GU5hpp4*lBwon{4FF}4|LgoBz7 z21>m&w*M5SIeT|dFM42a*EwYku@wCu)mks196*Zy0xy%hkJc{+z6>w@aWl^RNR*U0 z)i=S*Lw?-oT@2at{9Y6i0W zGeqPO!HkEjeVdm=vaRL|GsoTmy!$V2fM8pqYhj{mRqp_iLQN;0`$g-4BZs}BWVo92i!Kzoj-OelJhg#9i433UO~3Wu>SF%B z<|xz5kw>Oaq3oN)XATGUPbsa?4*f>~S6HSV8-N!qG8+s!D8!3HIRR+SSxB!K;3#Hx zM%yzuzCJH9>r5gN+K7@&U^ym~w!jeCjw&vNjQihpQ11h!xr7K3bHMPgDCZ&nief`# z^{*&&fk08TL;ouYohYlxgPq;csb}b)-{lgIh;zi{FGBBZjMfNw7madevTrI&K7M9M zaRB6$XF%8zn;S&mk4SRQI&aMu7?}vc2PF}A(K)RkU}6rhkHI@pv{2PPCd=Bp)N2UO zwl$yY8)KKQhu2f=cV^dm`j<8*C@*R}P)sQS$PgL48O0bU&0+bX03<4DZ3nK&CJ}r$ zEZT*4-VgRqB-Lp;S#F?;0uqsS%jEz$uE@7=fH^T=#E!zSZad5yIy5~_wCwVXQ6}nf z1V^th3KWGuO20nUYMc+M{alZ6pPQ148*fDS%G$%cPz~eLN~GC-Yu&Z`~iEciBYntT98=TR7v{ z0Ql6Cd-mJgfvcPr($wxLTW{Jw_tiq|!8o>PDz_g~0<05<%1 zSj_j_ifJnWA&EV3?AaK%q=K4Hs*wk?lU09s!{j(!oi<)ErYKQkddlH`>o+SJBP*YT z2$mFQT5GZC`sg9t>8$R`WaPNVg)a~vP`|fhlph&D^6qGyHe~N*jT6X8lmBFO zIb&p`5CXHha1IQM+164XLAQWD#ehu0koxb+8*}=Vm4Ifgkc)C7XWb5}HJSG=l6OqF zFr<7}QvvTS?^UT?YkX@8>`%yO2A;n`G3xFuG2*F6l!IL*grSA=-5yG8eXS7C`L$@#GCQ@P%+Z~HBqh%KZCpDkaP(FUrTbbz0U%o5={Mesrv z75PNB{JOXMC3sSKechF1ncCNlKb7mnDfdTbKNpTS5x?F~M|!-T(X9mVT)%u6iXJ!~ zKcdhJJ5y#wW~pPBv6zmAtztB}If$=p?$hEw+@J1%S2Oo9t21#s07$ekZ7fK(R`KwC9W%)R;Z=ku$ufl7DdE*2f->=;#OwI zT~;HpQqhJyYw$Z?`Un%RboJ(Y?!(wylUzVuBsPhTYVagK6hUPN?KeYkgx1xZ>`ZYo zDm0^L5k<6doQNGNCj^NBoxlQWA(v|p8*jAYvUslNkQjo`*C&kVXuU0h%^P2Zuz{sJ zZQPN93^;`K$SWL@eFIuV2%P+k8c13)V1Y=gFo|w)!i+2*{x5+*z?|VB52^hEDHi}* z$_P!dN^Ux#u)hj19oTEKMCI@4wUi68t;LMw)r=_AD^`)X57*!FgG?n1tyQZTyb|FQ z(M+u3N{vx5dj<%pol$K6tqWP#j53I`T!X)^4|ES)x8z|dPNwUkpB@;!7t%CSRHyo4 z?+O9ddni$Hw4go_t?H0>Oc3n=GJSEphh%r{NsT>d1iBZm8m}~d(=1v%4=M*Oadv^pFv!FF5?>B;n zdktTDaVogSh-0K*gBh(n7Je0bd|IsSu16)GkE8vJvaJlB4QcHko?F#`5J)OahT}rlR2iS1BImQJS%=$6 zxxj(sah6Z(smUEzQqlk_OvFMONIeCNV^v2bt{zMU?gW?jW}-T!ON^0RYb{YZqF5`A zrKhHquMww$-nQU$yRaRgRz(YSH*hlZ3+)P(c@B7C;Nfw0IbShCUMYvsFLgxcRLlxk zVsF62Yz=O88b#qGHWHBiYG?87z$}x>oT6(5BvfbV^(9IS`S1V=AIWmqRzW-_f*sSB zxDt)yDdw)7HD>rX-5$en7QlRa8EQPrra6u+O0LSZc1urRw;=H_?OBn!vwZ$BLS(U` zUtZD~zhWVDBB?#m!D)CeebsRlbm3trm}xToF{zhUA^t}43mF=rML0Wb6lq%v7fsor z;VK8q7CAae3n~G?|K2(~on&C~v&v^mUukekM6Cxv21zV_XEbyf|25 zbQ1f361k-@bJBENCLN(?=JM|4@xyXY#O71eFr!k6>LSJT- zx^45Xa;mV6Rpd7-3)+5*BBftbVis`pU>4Qc(?4{z=H~~q`)}NER#XNO8i)1(43#*# z_45!ivRB`zQrdD{DS5%Xq1x;6!GmS zjl}{rxfR;(&fn#Qn;ZW8^cfD<6mE?qTk)O^+!|NIJjr&={$E9I_L#2wZK=I2^Zt(_ zADf3)V*%7e-~X1I=sC;-Mm+~NH9hkd6GI9*GMLrV-zx_9`y%o0*NR#}YD_|wZ^w9h ztf}83<#E>7m-1EqUU$OlBgkidQxY^ZY+NGQ4U{-A+ksAshWSBMLS?>2VxVE}Q5?aa zZ?%7R-RWq)>8;aeHKAd~;jh+gp(1ie?m@MbjchxG_yb&FYqkUlFl^#c{{-iA{W09L z71hHD;qIq39JqHsfr%+Qe`YiCa5ioa7v?}jfV##nPDkx1aTyg}A#0CXoCXqm+zG+^ z@Y+xJD98fTX|7`3@Nvw>iDjkBcetbJnVrk{$W18q)z-U)qRHlhOsS)(E{y;+`qtSWS z-Xd9)gs9R{E2JeC`#dmCeomSxfY{;1ciw8rc2Y?Wl{9*aEGB5s5N(X;)qi=AKVb7onN!0tJF0VIATHP2pCd5!Wa(?ctVk ze*y~p*RbV^iHkA6A;>5dd1Vsv_^8_QH)_P>9^RQ+m95h3 zQD8$QSgrW3>+!Ym1z_;*xlH?DN@voe#OtzWNG(h0gsMq~Djh>zrl3iYwe4HzsgHc5 z`-4r{n{7;bIN7v7MUy(qGwn)ZBN?elZ5JlxZ-FUMl$P9T zuV-qWpKk=?Cx|J#1JtM~Yb7Wzfd94X4?jS$zW+itt8<60XF@Uv;Ego-t=|aJ`2rvm zW6y9d|I~F{T)YAe`0yaF z4^Xna93?}YWT3KvQR6jDo?^}X6T6^_WR?rP(~;Zy>$(2r_(&i{xeNsxRA3{;x(o#$ zus;$tHy-zFA-ix~s+P*i#*Km!d9xnVW9##LSfcL(teZf2v+sFX_N>xfwJ59+}GzI;EyL3_e5_BTeFqHtE(dU^fq=>rGms^>4o%92w#$1IjYRe zUN1&TF;JRoO74K~6^A@j9`7>lEvO#`94?I^X(+X4qjEcacM1^!c^Bl=EyKca6LZF| z>Jarq_;A7Lb?1ZxiOCD#WuGt4a*dMH$K0GWJIFnQ%(tuFk6Nx%s6c^!THi+;NnB*L z5ouS($?(ceQ>g*9S861qcY*(b`F3oXGinOX3>0ZV|MT%&cG!Df|Iz*{ZR-kfTJ&V! zQi5s7(-V`!VrZHZS@NX&d%gSI8vyR%ZFxNG?ahE!aFuh~G!b)FaBA#zMbaB6nJvpC z$8@eXM$`grI4bq)hl^Aw>UZ3NAhhH;2}&uw3gVA5?5 z!?3{OU*w4o#!evvhR?N9^6nY{47>URT#0phguXnShY3c+L&6;<8>C@!t)@F(qS_35 zMsf6j$E7VheqQe%q_-$mQZnj1Y_Rx4w|$cm;*sDXf;}dqslowEOA3YsK9BA&IDY&g zvpplHhriwGHky4NivZmvGdacV{PHmi}Y>E!pM1 z%boYOtDwxst(lBB?s*xUN*56Yrn^E!HOa(kfIX)+!_ftK&fs5zgED4Gt$-U$oXbOB_T zL7AH8jE%_s;B=}otb#5eXc=1~EN8sdV#Yl-!#xOGZQ32Y0Uzi4;d0({!OCcBWK?8< z1WdE(l0<32UsQE;S1quBs0I; zdC@i$KlN2Zlh|w24r-fEPcM!1VAd=X01U=QWM_v1!!2i&GVYl7EX3#gNI-OfheOE( zXblm~8ox&}<=ie07{av34zEWnRI*kR2c*JzF{KF-P$z|bJNj~>(oZSsM&8Fs@c@2vq|ue}qU z_)yeh8WxK1VYwZ7=Z1iCJQpBZyI9_3rcdngLqflefha^OVRcIU0Qxqv`8@%^r(-+2R(VghyMrDA7_<0_rA~6bMD`M9g-jvPfK1O$YPJ*=~rSn9g#^vZG{B- z06thT1_I#Z;YP5T?_}6@|1?Vc27-AZktqR8k5{gE#J?EH-hz7*(X~%q4Lx236dWG; zQ>U!-Xy3hYEyCkzZ8D_l(-vJ0DW1`%DI_=l`VpqlxU!XA!otu^;Qigz z73kEyC~D88-kMdsr#@LWH_GIg<9r!OaVD?BE$+wZbQWiQho>2R#=`FsqkJ^xYWWy4 zYuU0j)i$+$I?5IIg*R_3+XH(5a?Pk%sd?qyA8fG0(}UFCowr&;f?M;%^4+UA5%hL5Na#L#Kwv7tXy7-#4xVuQ9)YJ=cf z%JWuDH{H;fBeW-=-6*%DSzTq=|A;FQ^EnS9Tk5bUm!~`*DJ|6j(NV4bhVX}&5LszS zLAAQq4MC7OS#McxHIb(eQYq|kS2$&>%M|P|K?z;^09deZUywaj@29p z!W$9#)UP>kX`1a{-ey>PN-vrYS2)*;)v~~LP_!J<6qjO@HuAq?wVZrA%0wO{;&d9I zV81ViG(CRV?2`B3tx(n%Wih7x0pj9r|Fs5112 zhcBqA=zWj@IM7pbFJe}|R0qX_ffp=dln4>K6LKRGM6p3}d=4mM)T%XiGWOd(4wY`@ zDhVKt54q%4_rIMdbYH(k-{r{V6@7-MBnQDQhc@_xLVE{p^&DXQ7^8_y}mH4Jzm!|wj?u-V=J1tivtLf;Iu6>)&P91|^+H*+5|bOJMK6 zyZw{&%Q%jaKuV2{>DS*0jcUWMAfQHh(Idu99vh)_X6vZ?F5@fx;@=zf3Y*~t3+w$k ztH4MA7$!-b86sVQO^L`A4P(ATmN+8$pJTEnv8HzpIP4DD&nGa)IvHL~FHH6v6mx=G)8g7#c!&;jM&DAF~-cN6nHpgz062K|8x@DOr6JWLD z<)~9Gl=ZSW-JH904`dN3ZQN%!FlYTfUcj5iHvGWn26$?0@7!+gU^#s@=p9 z;pq~q2&HM&<{pz9)t7IeXtvlPK+;c*r>m{`zDZX=oNrVWK=1gRj-KNu=M@q|d!)SLNTbQ;=ep+c@{0MT3%__>(3yG2SQT^R3fhXAc?4t% z+0KTZMy;{*tRv`zgI1+dbsf?|)(P2*rtQNvDi|jZEPSkF55yT0%!~q2JzniKEFX@n znzfleClat3EF6PxY&{YGhLg!GwJ{F}Vm$G>zH-@5(l1KrqC|MzmKQ1}E9N&0c`v9* zae9;TuCEm!1)P#vS8I8&Is`A*T@V)GtmoPozn=0g1Y0&=g*%8UN~^pnJo7npPi(hy ze|)Db8y){NTRyr-IAQ=)N4c4PX#aNnR4RA2?v8#kPhwILSS*SfI}}cny1gF?HlW>0 z4Diq*6>9*RLPWOWQYj>f{6|YJEg+qI8oQK_8Cy@iQMZlxM7X5Q%5RF~PA8Bj2*Ka4 z4N>8T4(feZS$sLcLTnZp1WpGPmHJ+x*NV zwYybz&=q&iHkhc!LA*^wnn0*F>Z#!M%&Wklx& zU_KWObOAak-k$Ap0>}|C6uRY}J$i#`AaOgL5E5Z5TKqAV*I@MZWk2*uupGSSmoZgn zUQ~vJh{bphBhzN{2y#!(LB#bD88^^O?4b}gXO{;Q5nx+m{xiW|xR*DPDTq(oRM%0I zb`^Fx1uCl+=YOmAKMvQR7tRSU0*t(?#aIA^iEUH5zBEDez)ZwMFDJ;IyaF%5!HFV% zI5mLVC%A-GW5vVR7~bZYTlcJ94}eed}SduiEzP@pbWL>zv(^GzWA zEp`2^4a3}Rk$od5Ww#YbT+00a5tnMO|GyzTWl|7hU)nudb_OBb?;z}> z1F|#b`Ul_siQ!SRGXP_F;`8PQLI#KjHhA?vQ>uS+fNRSE2z);y5L6?na@XbcIkwrg zz;h(lrGmfYb8K;NR3*2-HpokKB9Ru@1y#STX@UZ()V6+B3_Qk^ObKv&tzJJ6{X}m> zV6p;*UrzB8w?03&r=p>z3eWUSO|lEr;MPXWD>=qM0((>5-%Y-2 z{UjEcV9hB|_c=miMcD({c$`?CQpf?kyie5hpsX@_O$4Kw!hp5VS)TbvlRT>97e`Yd$SzXR|q#4D&G4R1+8UqC7#-6aJ~_12TdNt zK9k7~3h_4yo~StpCt7rExL%TIgmQBx(q#*bTS^J6nbyHDJ-fduZA-9_P|>0}y5pQl`7x^?y`*B7SMdpe zXa4=MVQ>U>8dekb3NpOh($2@BR4|(;X8euL=D}5B(EWJgJR(6c8US8aAt&CJt-soI zF*q(9_yBuLY=Xgl)Y4x&OcQ}#IUAwM3UjrYKOhIp*0Yf4Ojwc{jbFD4FF0LS9 z(wIokJD@06^n{c!m`LwZn6bB#1mDK*n07$T(3CTDsiaj~{RWE&;98-+W#z+R{C>4* z6Rf^3?zWrKF+e?SD0|e>yScZl!J0b7u1SR@Nk2Wx51Y}=j38Gy-b%UR1OT(!HHv2r z9aF|%__72h9dW0Ru@S*z4m)%bqHQ>4${Za*%--H*QHR{AF29-bRZ$9psh8uiQCTMo zEQgxK+MZebiit;KvlLD0RLCl%`Z0A_NP zfC0qbH`t=_RG+70ccG8~SVPtKHZm2pPwf0u*a|4m)mc-We3gCrc~fu*{3uMy)aie_ zW|D$p>gW}zkg{r}&Q0q}gbYjUi0qTt%~?T(qx^k`kBW&k6WEjUkOGDhbhl}yVmisM zEh725-Y(4=2QfQxGC#J=Ab*LdhJ{yMz~>JjJn!H5D~418{-Q*sclaBrp-6zw zox59yK^DO?(o>;G12OJzmz7pQpfz0tK`&30{?QFN7eQe(;8$(nb=CQ5d;~6nM%P`g zf|aax!`0fKPv^cEURetuQS`Gsk#pc40>rwxm>KinVBD>~gGI2CogKcplsbaf6uN@r zB;JDeBo0Yi_5jIn6m%QLoqj}8`tO1zlmSEO-5T7v9FIXQr@qyv=*t(rde`A!ZwRA) zDnGnX(D$`n1y%iTe?x6cb+>;f)^P>m~$w?^gL`cQfUIp|B*m9EhY*Rrhnn zxb3axR3&$Ep$L;|8TX#5ZaadP!v$7bOPAmEu=PBd>J5-1T`)cIyZt45hRZy&<)Gt6 z_mc?UjY4>5S<8AL6R;^V-8(Jezh!MZ6g}QDaMwDYtHQ( zrYr>O5PQ1(`g_$lVmNiWv%nO=H%6_mJ0!J^_1xxyKEh=}=h~IH|I4Q0#q?Bdi%P*F zr%SqlC{>c9AP5kR^jFkEu-ox{}HF25~(w`*6=!4R5j?uY5W>!C^dDWv-7-S9??GXyeVQ{EO1>)N;~$ ztO{h2H|KKWH_NP-<_Vw@HEjaiw=RES)39^_xCJcde?k+=DD?1IEcm)nxs{)jxqjz+0zG4={xOK6*QGqUP10Jzw_E;;2DD z2k#rQ?YvC5uFCmqb)1)GSya3}ml0h58{83uJBye~)pdA)22q}v(+1zPQr1j~^49Um zwDD;ZvX7zkjN4g#nSh&{o%rBPwnldZvH8|JbehnLkL0-c6hrek`68?suB$EH_8Jlj z9RJtR1{@B&{Qi+PPrT>11LsJHTTcsf#rnupd#{}&KN7;jpfWf@MFnJc@KSrnPJQ(;#W0Tnii$l3 zs>oSKL4Gja<6$G^Z*MP5h&{xR(O*o*LGR(OhHJYEsNQawj-ZKGCKs!6LyCGaI6i|S zBgzmxgH?Ht6KieehhA*puZ6Ju6!Q()9)dE{%1}qg>c=n=cc<+OP~0Ubsfim^q=i0- z9hQSdfiW)p+0R@*g$p54;Wmc>zopy)B46Gk+O&_aZrD~2Uo!g1v2lKUH@?PrM(PBo z@2|cqeSSDZfgfK5!pUuIDQ-)Fdh$Tn+P402jD!u3jK4H(yrEFU?gXa|Xz?BDsFIiW zkK(}Y45EDd7fnuBtipqTa{D%X{rHN2{5nf^N9$!hu1K?-duM9lsSi-yI-%SOD+NL< z^Sbs7@JM!KqN-wYds4;+NR6{FXURC7A;E7cD%TVUb1T?Woi_5&CtO#zKF?koNxYc^ z{5fj&vC?I)BHvt-?wx$(5f*Rr@2KcKFEpe8;ywuP#z`lqR{&27Lhf>9?^;Mi?E6)* zF*0yz$>?zTn6=I%(CjHcB?_^p6;S~QK|e$g#T{lRrRbxo1DQmB|0&0iZ&)I#+~Tl? z$lu%tn(ZTH!revOGXFguzpd;NeRI(S>jgp?B(=mETkBpCMljJ(sQ4{=Z%W0!z5IbwB6f)c7 z%1qW#xr1{LEB-c=+{ODdm6I*(WqVToEf_)k4#Hd{-+c-PyHOv2n$kUlf(3Y)`ru`^ z5}CBU;mLmLO=LUs(%4>Wp^G)aMU1~ZmCjZ4e`jbMZt-dw6=vZ#_G07=S;u=PVtvk?WL|C=U{7iEW(OS(^ z<)BGBRXmNTLVmdde345d!n9}%qdu^`?c`F(96V70&K1eBk&d`LfxaP(E;k+cGBG6ZbWU~Zepeo zdp_^a6$HNE>It4Q06@qBh^h|+f__LV?vN|Us#B%?gH1p)!B_XoHF9LE3$;1Snl+1z zmFAv6Zako}QT}IwFCuDYCXQi7Z&KR&FmAGedY?RU`rdqPpu8cc7ylwN3(_r|&PJ?R#o41~mib6V8lH=S#tJv~b z$OO=7!1e9;d(&4ZWjQLhgKjPBgr5y4xcC(zqP=2tXiz`oG5HFuTh)&x@cz1M`}J(i zKJ2}i^Jw@LdgbXw%ioB|(}Ead!5w{Y-IcK>*YnWr!^@Aj;B5G%$T;6rqj30)eC%?H z?X7fJ@>mx$b5U}wx^`iykL~Tg`)f|9YsflEh3kct3%l(bJch_6XXUuqVUsps=fL1c zS+nV%V-nUKW_@_|oh8csu|M75)9RR;i!voptm4$>$2A2!RPrH+8UMj~3-DcEQ+GhI z>de~)o(2g2dm8Zaq+Jy2@6JWR4{y(oRJ+pInRJlDH@b{BRNrQs=FLos!)l{=(Jv@T z@o3>_D5DT`s44^EN9vv)Tqy}g$|mlcz2MGiN1ix+D6MrUM^N!;vd?T+DY`ei8`IY1 zPv;&VQKtx_f1eeO2dsvjA9rIq6<>L5ZY(3~3l;v-kD=jn)n7kw@Y&;e&WDDe2+xIJ1@w#MEu(?cg~>(*QWVY;&}9V@e5mdldm zrYn#czxzc1aEMu8rZF4umgk7PUECyd@Gzt*5^(y)*JJrRC`Dc`9AJ%ffk%v|w1dg(ND!^zXV=p)a&StBPX zX9NQw$K{v-bs&$FvDTE<8K_c8T83p0l8_B5dSI3pQA+6q ziaE$j3i2ch8pv@9`6P-Zh;~XG@B-+@{w?7x-e9S}um-8kWp)waBvNhEU08J5S`4KT zqQo3Dg?n6V z3A#qDDr9wjQN0ie6xN@2H3FZ91Gc&u{2OgguJ{4PSPzZi<|txs+1LW^N1uR2Y=x5P zlMo)yy~)caI=PRHb~Dg zTR9MlgsnF##q;O&A#^w=eK}y0(K?!BJ_~0g-3w>jjCvYiaj~OIs!W}VDV26vzSDb& z?+JSdDVbZUZC9Db^Ldl-?}u?Tu}*cD&d|~xL@sR5*DaQvs@J$IZPzGi; zQ};@STdDZ>EateYpnwBZl`#4yX^!2MQ_SEEqgr2v#lr~5c^mK{GYyLPmzS=;Nzj-_ z*F6XIW{D$P$d-D;ZuEz$qQq`E32jehp15R@R(sW)Q+ zD!ji73=ojuVh=%Z*r!p*+7Cx8v_!c)>a56V9s>D=yG#BgYo$0Bo~`Xi-EKj#?dJUh zNugYP#`EZpURy07qCwAHN_sy@)Ye74cDbb8!*vvd|m8w*{>aDKOPLn@#01NsuwpVz6?41D`w;JzFCgzt_IM@_2QkFSj zctZM$T#B)3K;Hf>I~B*?aK8fLpo}#yK`S#T#+;bxuz`j_9tz7>T?LOwc{Zh_5zl5i z2=M^$k}6t3lYy^G)NubyFdSP4bd6AA4f~)Ce@%_K^6VH5`ynaZ(*uJOTc-j>nkj5e z-Bu&O&EwggRU>xa3`dV54$X%u?2xCZb#jh`}g!}t*q*v ztBlU|+}%8cZ;zWtFBvZs`Ve$Z`s$YE!}#g|pSv@-ZLWKn<}Xt`9aW>C!I*Y2YHn|v zFmxkDa!#Hp>|aSQ`HOP{iEYF%K$6cyyW*xvdb(O5B2jspg*fUNU<uSVZX0Y+mNs^3z_?LY(HIIc4FGrx4_ThEzH${cY3 ziMEWi${4A1t{HhY{%;ac0$Q%@Q1ls?&WgG(P=W|{D&wrb{4UN&@=!t0Qw_TM`Hc$t z`JLRn6dQ*~)>E(&6;W&ndQIb{Lpo<7IpT456)Hz5N}TuMhHeMJgLpaa86Ec^6nhBH+TLFAvXT5)X#aEo%umw4Wx8k2aYh)DAfhTR^_NKX<1*MgR$&`L za8)y&Jln4sGq#l-+K?DX?y5{zZDSvWUO4{EM3 z?-(Xc&#C0II4NcymXv9%bx(|wXDQ+=y29vG<=@4K56Oyfy4l-I+Xw@kf$we});7ac z3Muw?ZQhW9?9?A_HP1p{iO54FwqcOM;(L%gp&Wh~oCQ#z;PB&de8MDG$_7p?$eerV z#582jUxs03PM|u9jqkaIdHw+QPq22>J*el}T}Vn}y882*>HSp?tV)rH}gkcr5CZo`}rQ4fPZFYUHLy1f zRK(32chy%yRi_vll7NDhOVmhIEqi(L>UepM8>~Yg>F$gUjLFG`o^XW2D01?UlIs)> z<`;nfSbON_M1Fq| z(?eKJ1N#1uMGbWS7<|k>p)|>1K_bHb{_F3i(FRh60R7$n7$f}EmXqtrfm9+MSUzLVd}jp8&2MVPbw`IQgxPg3d2+s_fV)uT*?K z2lCEBQXMfdVfebq^-1Tco)UgcnSK+LzRzmp19X(lm!HoQsJi#+X@VDjL=sV-kq*J= z_fQK~Uq}|qQcFeQ{ESEQ{Kc@3MkrH|T6IT(j=Cb8a1WjNzCteZIJBlX7f8gUI6`X(*OOw`Hg`#_q0!Gx!<@hGMjDf^3ZOH_oNhaoz#LsZh-A@(^6EY16X zNykkJCAUM{41@1KWDGWR-?ONVO#O!;NJVkA1&BxNTk+2K16Hl-?2VIXg2qGG1?x06 z*s#-1_|pbPe-+IpDV1eCxCm|YFX~;bhnKyBIBPxDkjgsM%O3}13qUzX+ zSyTtG)~kSYJ~<HT#U zreb92N$6p(O_Q^8do60sh%d$y3M`;umk^)$*kZd|oragEhi_d`V{FyWz;q-9k)Aimf%w z2*H%QDF8V4%fS6v`{g%;jDUrT4vsa+!$p=58B3>vvZ@=Rp9hy{@Q;Yl>77fx zOrj;^Ojpy7l5fvCrnjY7ETgZtUXdu(X_Jq&XQIPuyDl1($BFKdkKG;7#m^Z~+G-NU{n-!0I(+ zs1RdwraS@QlnpYj&0vho&K^()21J7kCjdvTtrhEzlOZ-a$nN?f%x_y1d6X)>fC@UW6AkG-l1Z)y3d)KGpZ;XetjSLy17q<{h)TW5U3IAnw@mVzTI*x;^9w zvEb8#zCoQndlqqHG&Ss_bHQ4>IGAVbf;x5ZumqO38Gl%xBUz&)yB)LX^m$;9Cn*wv zpW)alU_f;nbyZDL^+BZ6pdo#ZB3Xfx6;Ge<7D22a3;5fBg79uN>0R$HxNI_GXa?jP zH^b#H##K{Fw7-b7U;O8W*|m1yepdbcV!)1Nw?>;I`LLhOtwLqK67c<}|UANq4aOsJJ5QW$z@4r3+@ z01D`8c#s5$pOtYXHPkO04EmKlvxAn1dxd9g=AtSc*fa_< z2l2XXvk`lH7u*)S^js4AXs#A1taIymrX<_%=C$bQ1OY;v8k%kXS$WA6AXUmbC0qa0)%V&9?DqOu%->9a_?EA43kLfD~L$$FH) z@evF{$$XN;+WK+Jd1<4J^3+n(@u(41)a3Q3jOcuj5}ZeUMhgp*=-PwSY8m%Kcc75p z#JqKPn^d=kE&W`EtEOI0nhvC&rddGdQ4C@lIc|8@l=kp{3@zH1e`rQtQJ|0+IfRVO z@8!_?l&{%5i=Ck@g(N;Kh=J~-7=(cQgvd)sV^qdhV!?u)4bW!J!TNU9*O=QY4pUT$@vny&#fkwfJqD57hoo<4H9WK?_wcTmJ#4 z&qx+jux+k1`3GaiT*)>+K{pII{>QKo!dIhaq7>u@IOukIrerSlF_3=4`@-ZB<);J{yy8C0;Fm4eJ)Lto7i!B<0vNrvm1ji)&Sq=Z!H zeg3fEG-b4K&R*rekacg^Gz$ON(Yk5`M!o=D;c$omTG1doD|i#jxTzndmxYrYnEKP8 z2QouBesPNCUGok(IM{kr5(bd|3{1IW{vf~<+*^nQ*_^go1Zd@dHCc4%Ts1l)M|B4# zXy@jtNa79{BO}Jqy$**ap^Qw=AFl5D!SqV$2au!dF^BwkvJE+7p}bw6U43In=y#Y| z0Fb{!2u>Ja%4#LR9}Y75OG{(VCKWm8uh=xTtN2~H2LH|fi?I_RF!+2ZXXa~e|=Za9)^ZdGglXM-R6;0S>;!8i_P@?T&cStqVbaKL#g&Y8a`P-cpJKz z$jLcPu8q*k-mNh+K_H^!2PFs@0-hc?0bAByrp!bPgf=>x=J-*AjYI10+ztZuScWk! z0?h}YDs1cu!|sgD+csU6vszqi&^KnfS+&4MG0tGjS4s*;wApj6n~tLDlB&qoX0$A0 ziTB6hwZo=;OkCYKm(JBbh1Km|sE3=`(SEI6-&4@p{JL$wNrqVyE^iZJ@jNjMz~=oX zefz{7y-L--{-A?%CuAm8RgaOQ>FdDS>00C*kIyE<0m*4|J8<8|9ZFQU78tn!gZ-TT`1Xk;nUhUcj4lYasQ-e*1g(6i={#=%RwFW;I0c*L)XQEV_MvA?&+8B5H8 zryF%V?5)QkyzKA}?R`9kgyo|Rz#Z3a?rM%p`+MLdsXuplaCT+zb;5-0-&(%&q2KB? zbk##weYJJl)=pRAthw1JKko6&^a9;*>H1@C=LlAD4SgKN>N@S@=A+-8Dla_Ng1SkJmv0U&S~coL_}&=@*)o#d zu>WZ*uqub7GonuaX|7q9&6_9t5%3ofGNPHPcy-C!(ST4>TUi zqC0Zu(rd4z#}9a}7>KQvR}b#T5g_vc8a6;WNH}G$RGmp|a`V1kSHSZ&e95VEBn=M3 zacJ#ogRC~T+Y;Mr`bT%8cKcIpKTG3tM(e{+{}|KZmmo}m?ep#HrQrR5=2tq4`TBCZ z|8)%N+x0|X-r7*t7R&yTnSnsEN3#sEm-WzOd%Ct2f2%XTxO)A>RRiOc#E;@mPh(Kl z6?C$TG^e-VgnInJa>qY}vsEiKY2TJX)$Z)QsGLXvt9Ub-&x)b3f=N$bs^w>dvF9&c zJxaDSNhX&TZDMh#eM~x8(-PvoK92^#W#kQ!F9)rFNBG20|5vY*yu_?M-+kiY8XLL^ zw715R^BDdF8_$IU*z$b!Kx70IG=MaSR#|eyS zXTw${FtWtjg2ICQce85G=${3R_;1*FUgeDy+34sCvTV10S;b1{ZW$MLQ@C2kuzuuM zEfH~sb+5th7HrQ~06411{p5LxAqa7=@R~#4hU(iVcSM#EaH%Q~a z2qM-9JHYeJ_g&|F2K=h?>VdaENhfPHImHpngOu*bGm?TX5;EQH{&*Rg-s(1TOKf7J z7r&kj$!$=d0Ry-z7Il4gKvLw>7NjUt+9XgXDTs%8e!VPhXm0twt|@N4BRsr%Y<|2e z%Uru1?h(S%1va5Jzyw3+wn3C@W;@2}x060>bU)>M`EG`82a6-=bRR>8SB~qr9DY91 zxvF!aXHQT5wRTl^Fw^OTwFQEyx4A0n*--HbLpb;M3wea`#m*EZGd5eUwcq zU9zzoywns~zuL-Z|G{TX8I{C~58&32Fs*3Zli}7!PCjcES4iMokX%lh`k7?Kv1N5g zANsd0Z5D7P>UjL~LkH1{;-45*MLoxB;TGt)^1)EB_WRtsum=+h5ULWwUA_Q&sfv9~ zpq&)O>T?`3an;8KwcsxM7BFG0u~COp2g%G5>_8ughYcQDV0*ti)4f=?~tGBfmbI z_M0UJZPo2@^`d1YrgCT9JWA_%^31P~<}fK@r!PPvWQ#RHWBNQI(r2yYkzx+ZQUE(d zVtS%kbrc$_RtL5d15^*hI1mG#J5+R&3L}AHKh#1>OfsZSN-_d! z?n`;U6PW4KK{&L6=xb*Oq}&nBla(29=-t zZ=!72sSo?6zpJMdAFi&4^w=1`m zw}&R`ccRl@+p|EAIW==X8|(M0j{($UrNuCwwo(R(%OB8AdKN_C)NYxJC`G7Ps@iZK z-UTrqfuY0&bik&e_uoN&Sa8Y(nPyt-BhVHdD)^BHs`zUbpj+ULhUG8MAh07*8W1>$ zu*|77q(Vxzk|A>41%cZYkLaG8jUV7=`ahW4hxn0&OtS65hld7hwDEvm0f{2n~U~XPUY7?1e4ATZd|; zPLUBQQ;oRj^w%4Yc^1jt=Cbx$<7yh-RwP%vXIhVyD1^vocz08oZziBE&1SK|3~Auv zN+?RM4So}1-j+~wyQfHp1}IouS31|a#5gJvgV3uWH{WBLmwl4PhWN9dLcQA9*u`BD z)@K?9nr0itV_5(94uN^6IRmS_{=D16y}0~O9ugBxF83WD&o;IczDn8~oz?o|4d*x@ zEZ@FUrM$f2X3+I9;r}8W2gVrb+;(P)DZEba+}x!Y~BU z$3cayKD*VWL|2^=@q0_l@MTBb-UvA{$7I zrUyR2G88%^WGZ3np74AU94v0#%)D}M+SE1=Uo?$z>Hw~$EIw#hGoY(z9tSnrnue8a zKM08{bN2r4?6!-7i)vL}cb1t7t+{27=?~qP?6&MVL$~0DPeFZ!-d_g9YE1yDjVi^G zb7xpQ0b4!KI-E|w?Bez#dVXz!_3z1}a!7i3mId6|IaQWc*j)VjiET-XeV%S1c$s~r zeeO6_MPO&5UbMs4IF{j-Q@a0rd9K)256+Hjpa!muzeVg=kAyb12t|7LqhXv)^@lZY z-eI*DGoHQmp<#5xP8Y;mojn6CmvSX!*JT#?p4XNNrYre_&NmbL@1ER8ZVQVnB!@X;+t%1%5xOra|!_ul41LI0vA4KF+hf5a#V?aNocw0U8I79mS2I9}Hb`d|_E)2jp#o59`^^NDK44%p-yFZ}2Cr z3Ti6lns6;33`$;R{|SKh6apeINqdrI%N{M#{2Xuar1(WnOO&dmrl(Ktp$I-b0y&g>`9BM`e z(Yek>`@x!hp9WJS7*Ag^`)_!8Lhq!InXmTN?_Idpb11JRC_zW<$X}98xk!BBeG@#@ zwCEpy?`dC?aUvnh^4GE12W1upI6a7{>sqJ>duRnfC=G&|rKM_GHL!6F!8rZCILD#^kfn&6sNCbEAc#?uG^BccSHYik=H4 zixD<^M$fcDWk#vT(&QLvNK(du#KI%DaI`5?Zz<5aW^%&L+M%?vp!41&OP6*k{zsXE zTSr~r2F$g+YT*tcK@88N$GpdHlyCws-Pr(VMC&B zNlA3O!4|pNb0z)#g|GPV*l3&Q)*{X2pk-Of(6|BqR~sEX=iQM_A8f3LMspUFwHe?h z?9eX9c%7AhgVI|J@hI{8r(Zfs11}cUn?sp{A=`9gcmZbn}P#huC;b1VI5R zF*W`-oJK4C*)F9B0B`P{pPhk)9nJvF;3wi9(MW z1w%GTZ64p;_{?p7ceu4$33#pN%q>j*lH|yXGqW5ZOV-V6aU%5Bxw2e4Oo;|0G0S)w zLqk{>cknzl&fcNdj5HFw<)mtl52+SI=)MVc+n4lq4*!)^y(P=gwLLtUb5%*c%Fuqf zWbv?dp}orzki;u}Ug2*%&y02<(;xg!OX|AbMX0|?UCKcUmU_34ik;hkHlI3F3xX1h zvd2Q>h$V}te0F{8*Z%R$gxvbA%oq2uymDwkt8Y@Kspiq?2y&UPixGjyP6ZdL)%=Y9J&;kc2- z;AwlsK3%P|Ex5&TkzBp%p<@$ykClu<%9FWNd9Q1h)|=EdM>Pr?S^-IISL){-k~wfY zeVC6iDt4fTB}e+AK^LIB*XEtV>E_%KDV_H4GyS$$(I;9${z#_U?u>ctbq9cM%J>cs zs)KNHb~H7%`R|wAFJRXr+9^0Qu+l`hr#Iz}BrK zvNS6sggg`1owel9Rva*I187ex2Ee&B%Ge8ZEgm{uJ~mQgZp?DHa!yp`wO#>$vo!d=OD z*Y?goX<9p8dF$Q?c%FK^+v3a-NHpSuyI>2&6B7bN{(Hnu2*!p7%WvTQOuF`S4516} zYh_)XU9u10F*e2Hwc)aDnAQ+Z%h-{Sx{otEp+h_E{A*EEU4U+0(yxeb2bIbk*h#rz zZ8GLaVBIj&L3mlghh)E(!LTUaKz&4G`Ltx5?mDZ5`g>Z&M%lgLlGP-Rl&jC!>-At> zq%aq7(n$tMvD=gI10hk)1V^@5nOdq?xywuTaa!!JwD$nJz{l+gC_lC_eQ-uTAx3EE z@)+5f;7O7RlJIZY4nn0_Q%tH)m-&ct3hb0uewk5Utg@RVvMr(}}z5=AU z2^kvW=)^Drss&9QoNDtHmBN&!sKpto?A#ClBZ9U#EFYYTl=dOf^>&h6{XOQ$7-@6H{Gg6(Ty8!Kn#P2S8`K(u)6;g!>=i5=* zgt5OxVkN6Fd@hgK(s8GEj%%tp7>e1+2#@6G(xq6#(N+?qg~NH!*@`TC*BO7xHrF5n z%-AXpn~4Ty!i{W(JH&2(qRc84J4Ing=pYS->*D~ZIION8vMTloDLJ|U*%RsHnGqo# zID`R0RPxNa2htwYhBAyHQR#hHQo#fO(oEMRz11+u`8QS`I3?d0QkvSID|)b*eX2rB zhqf)~7Cp(@rxC{^smujgT`>xff`kBoOv^lTzl)G@Zj>z@vPA*Yx&m!5B-?R1i(Z&`7^k z){I;yPL`9oT4l91p0ia<_rXm^f0-rgvh79SfO3(@E5Qg619EAE1H4Hms}=zOYSkCs zfDF0!o9XCru@k`o7U%Z(E=!BMC#!GWp>FMq#(N^MuvC7olE_PQTi z+gjG3a3w&_I^okY9m#6>-T>O(kzFaB%C<*Gpi|J_iD0J zR3}T*9Jny=c&hKmxia&|<xqx%yS zm#EEKiujW584GL%z)c5Pw#T`+Hd~MAT%{St+VO^%RXIzavR-u*fBIlvcyhH_Uh=Bu znA4kQCuZ+AP+(N1Bybo44_nBAa_?wk<}Es9I;y-_$oq^Mw6LoL;|HpAMqvmF$wsii&)}op5V&tH>p@{ zYYQlUle@q&N*+=FNF+>#)*(@-?%1@t0DV5tP5{^*;N(x`!=Wxrxtg|93u_kTwtR8q zgfh9AZ!(+$SuT60W}prO9k}3SaVCSg@g>ijwopw^2bB|VD@_Wl`A0}?G?|9H&0oHa zgVkFyq;70bei^Fut3HOshgNUS=@I|*Sg0|6OWkO^0i#24h$__6_Y{K?bzT01NG4_K z10+T+5;>-n|)P6WsHr@Z7Tl#6W$8AVu}ISrkT{LgX(T$_6q=U?Z{T#Ik}(fx>* zIuj}Qy(0J%YY63&qv#++Xdf2Jd~xn2qk)nWO_CS9jBGdN*_m`4Thy8^5Dkrze`Gxj z6ZI~bnWhqe3*%U5FgzNqSIY4`Qa^qOKt`x4L%6<~e3dW@A$211o;4c`s?sZ&%9IGY z)#jnG%$zt8d#^flI!>^iF9w|dOLdI~7DtWI$ae35f-;wE(f0VbZXkrxNy;XDWzG?s zH4*5}2-#^M1HDYNa6gr_$chM^cKxQ`& zKF={L)zYo5*S6cdPta-OJzW-;R2N2;23Bu4PE(6qR>zm?_cy2TD-;l7P!|8|?O~9Y zqlj>TQ}uc{5Ou}vHy0=7P6a2xVy&u8bYnpu7r!pOTkI#xqW>&ThbI;Bn8GM&W5mNO;-k)&3aX-5!BJRI9~=`w$Mz!M{IW@?lOT zde=XVXHv(o)NfYuztgWLs*XZXQx)90O`c#hOJ)B>?Z;BPs1rvrh2d!caLl(HJ9kXv zlLR~Vz7G5>S*x(58A<@(7K^2vjqdE6$rmPpQngDTZ^BT(Hbn#6;WKf|45(bt;LlusiQ$KuF-+PK0ig#MyLPx39$ z9XU8xM`~AF%?_`a+Q-Wy#;lgWJHHcSi6GR0A2532#rj9tLdbF()G@6YeslRmIEQs@ z0Cmwh#CynaBmDE~7u}JsB?1&v=Do%lZ!v?0C-}B}i}|EYGBzGu=jG1}J{xTt;1M{w zCE%=wbJoB4)Il{L9Ws@3>b_;m?xHq{BDI=i0yPjZTs zZm}2VqBMhOiq9v46}%OpIKcUoK?eTs)S?W0wf9azrO5X4* zZlx6b>yS(?+?@8uod%{RL;2b&;~)_cZyiYCtprrZN2zbW?Sy@vfT)n@?f~7aYU(e1 z*OSa>Kz%>H)7;dIZVl zv%4R`^-JR!2Tj@{D1?!B27^!makJ3&fWxfZbnMFk^&9T{N^uH*jooP@E6s62fVs_`d zRarfrh84KBE0K1mCa2CYZj0e{5WPw1_q(k-KgT%JbQZ39htPr^DBp= zdm}%uW1ztV0Qg})^!Z!blkIRP@OAi8#>g8QlWlR5o5R3uy)7|l&#`zf(e*}f3oZM0 zj*FO#h=L~~K)d4w>=JS7fPn})*lkxC)#tRjeJwBy?MhPgCmX(GLx zAM}j2qvjqzM}k7*g2F$b-^tHK3bPf01-vk6KHdZa2_P~yfML++uRtF!7Gwave(YY$ z1%Edwz{sUgK~C}Fql0uewokfKg7zQ zNw(_w7BBAjd5P6SgGnv6uFY|Fy>a9v-y; zHJ4>n+r;k)knQ%h`eBZpbA)Gv0adA zA@kGjjby;QQY%$9ETUTkK~wW{Pa|Ssq|H~aMJqv-Al4JdX)x174`L&F6v8E8r}-zB z!Ynt^v)ca9_tTTlpquo>X*C-fX`9xK19hD4t zD?OM}I}2Q7U}@ueEbH}`#wMP zZ++hAF7#&q7~a|Ex}RUkRxnsyX4BzzbIiQ^d4CY*6WjVlBd`at%u{9xSqxdr`H!3e zk3sWY_x?M^typKZ^@S+ZdMVp>7|VcRsyn=uIRRY&1!wK7rfXHcb8&=Xq)Nh^K`40_ z;Pby|=Gg`#rwI1#vzKOm91wRd=k@zefYs+B<|4;o$gtBX3!=*vHU{NzH0yGQP=LXL z?DdMBM>bN%l&1Th{DkxZDl)<)ssLl4bad#TsQtFjQVqV;u7XZRC#gPW=JiFm_VmSG z{6~MOxAcimL5HS=4BvdMK1YYpJkUny{dM+hPLieH4!} zBxb~B_Qp!ujGc|Fy#PHS3W($R<~8|kR>Vjo$#wLWf5zWzAnYWaXMeOH5}x4aB{~=S zE6&Dajio{~kTp&FcS-ZiUf*#AqpUZR#U$vYJc-E6t|QTN#YerIIwh2mPCB8Tz9pDE zI~s-j@O~i}s39*CI+Wq^P>9K=YU=2VsqFCG{Vu_4kjM-7)C%b74Z?c53Lrn-)-MfS zq@%JYu-{ex)2cpINYOs&t_9I0=0$TOaIri{+s{4E@UFc53o3}sJt)FVgBsQcoI;%E z;ldS3Pj=3ehO%~>Xj=n!AI?r;WB>aC?iBgTun`} zw4p&x&TL^5%nFzc&X}}LJ|DT*^{o)vZu9-dNtJUW0PLw{KBy+d5&UZ*A(h|M$u{Ng zBaC%%4l~zCpx~}V_!0H#+ZX0OT}=kn2_X##_?ShTp?6@k$WIe1jns2({Rl8=6x%(g zgkk?|q_~CA?zzCQ^uaO`m&XbFcOWk!1ep`$2eZj#7ujdz$E_CWHCJ{;4iy#{-4@O< z%?{JR325@Cy7Ub2#qEM#-L=*Fqs;jpo0p5akl(>n@BbK1i4P`RRcZb-deY;j|J>JR zU)|7?&IP0Et)UT@?~W)SG0E6GrF1DCOXJhN7`)^w2n3UJ0X$myC zu!8bog;|#pW;Hp3NQTq9-b7F@O3;s$(kGI~Fcnc(VgHb} zNDJMLhJwbZ7W@66LcirFb!v`Du3OG_H&qORpS=%>D#4DB`s;C%7gUUPpPUh1ze})d zJ?JyOAHI?+wH{)<&K*a;?BT0@+v-@;GHSBUytkUVCR5dPtXna$g8JIL9TgbyNv+4+ z1W@U2Vm=IXoWz~A>(P?4B;OLxwfna!6~I%2bbf`I)E3RNy1-gD-btEVH*MQfyBQ$u znC-V{SY47+L}+K=Bl9~hVdPevfAin&5m)3}M-wX$9oMQ3U)|qTibVzS3eU25>e`aoY*D$?BwH= zH#GuN1Lj8Ke>vXYu+okEyI3!;$6LQ)blo%E#UwZVqf5DI&*PufHl5+@Ac$0Xlm~3{ zAUX4&2x6N$M#l7+^SVAPK^iWU5NXiBLdq(eb#&>DI`C1!%(cQ(^iCqw%t6y5RB644 zM4$!NQHUGwxBOBxc8O5IjiixDdnJa+`d-JN`D;SOT1KRcN1Z3-9?o&p8I(dS-rGup zB$^|@q)nd6#6%tSu4c0#(rip)O95c*6codv1jN2!`7BFPvVSta8f( z5}C2!>Qt;xYSK2Bwb|6#$0|g)**J7Yc3?tc!C7uluG;*wq#Ed2+=0I2Z3jpKEsu>0 zU*=J49oX~-X^z-uGg=0u^jxqKagv$|D_ww_Jf^!?5jK~O6plwp95{ZAi|%hf>^!S7 z?)EXH=*_?IlIoNH5{0VYW}wU9ZzMix(1HN>yRM|&!RW-vI3kCcR@UMkD=L@QYGy?s zbZDSzwY7W~{_R}<$)FBsQUSn`ZkIE}0j!2(T5$^kAg>+{*N?9& zvOcOD*4QU;%gp?-QgB+6PHbo!?R^5ungyes#$PrqT{kAKAL@^8T)z@6t56=ahUjt2 zta~}ea`91zSs}QthEPs#VSRBq z*4v+_tJg~+E3?niB)$uh0QjtbG5|xkY*`R*WN990j=?S|P47&;KLsPA`J#=ypw zxZ#*`>v0lOmBET^rVH7OjR;Taf(Cl!xq(yQ^6qfbsSoI+`e;G=Ve=bB(`O}sXtR%7 zK{cVG2#t24H zB1VchvOOH1pD#m)d&nScvzsk>x+vE2OV03wF$-~FGSIczGI-GU^7rc&@XCssDWB0P zYCaa}Q^fLZq+iPdz8l`}7gvJs7k7fe7bfj5OH`FJf-QI?`21Rx(6Mb%csQ%POxy(olwmVW87TQ4<)E#(mCj zcxlzvui7z=Iy)IRp2b;AF0sYdktskdtEv$1!B6*#CdOQ}0k*e`C8Y1vvf0-1zG!vI zgQ+asXxeV3D|<=Dm?vs=D{8+zM9QX{*WxRgo3zrY$A@V^)X|>tx#IC86WzCnc*$34x{5uqIo;l$L!j@-2H|EK zFovAAhiI!0|9#w`!~Obr=kYC*)+7)a?5x75%%7T^S|+h3Bc9*=QmCexJ@9MB0mRk> z{eG|`rPhpz(b87v5uJm#TJ`{cjb(-it2pq*zzw`n*YtCBYz>>C%ioER_G9kDg)Gzp zha%g>iQKPdJq%_Qe1Qv}?DndQ|I~Z*n@te5+gMxF8roqjOtI+hW9mDYpjUIF>n4Yd zV*Q#(mxOfVVUrM1nWJ*hM@kZYPQy&}X?Ji(`*A!DaG%Md2jdD6OvnMwq4C4Wax0HP z4IkI9@=#M5c1J=;_u;@&=8DI_p~AVL^awh)(y^O3mr$|CG&fpk^a*yAWc!eQ=i8d^ zw`mEJv$)#&i~EnHjf?M)wl(&meH@Di}vJ3yfqh z$VegE^${*FHxK095dhCUguo?qdEnu1!WKOU;mydmz&Gssqe82Hb7&1y!;9L6&ADd+ zp=BHuKe}xL5>Ix&_p0renBIE+Qsp#){`{v8!)duZcsnTRS@;JfEy6)Nqim*RJ80Fq zBmQVUG2*@9hNNW}{dW2+LSO#e)C%k8eS?&~?3wrAFOOP^9H|7~x-f;z; zKGHuQUGcAy-vG|ODf4r>xPhJfgf{TW-d<99DhjD0rD~T-$Cl9u2W%ngKLEvX*1*0x zf{+WRc7`Xu?j-#vvMBxx7ZN62E&+RtGX=h~zO63fuu_ZS%a z#@jt@e-No!V=wQ1H^n{~HL)MV!|0Zar9LEhlKA!fo(3SjE3QNkqdu$!V`*xHucFY$ zgCim4kxgr<4Af}GZ*y?JuLUrwxwZoZn~E-i-x~>k zf19G0+HL{V1@d1P&Cro84o;@9hMH)IK*;MKZeP;=h>pRhGfJ%@2tJ2+g0@6hZSt7% znSTG~kIz^A($8bUmYbXk6;vxQPX+>HG^7TXSAFJXxb2 zV&WzBQry+OGg^maASN(p?|4+%H~4xv-F>uov(4*IU&3vOGSjY|PF|O{ah(o&Owye- zB*QlV>Jt_6dJEGfyLQX!&D<$C zt*BNVFMK)`)^W1^<@Q3>UXEfz*wdGZO(ZfF7ux7~-SPy)HeWg~2<~V2-sQ5M$Hj~VoB|V)bJywKf zxsnIrGqblJfle#}M}B{!C*=r6W-t-mEQ$Mx-`Re+d>dA2fNza%IuF0M3cL}opFadR zfp4+P#qw#u*yAWsV04CiXm@oQin8dh%zD>< zSdk2|3=xbG?Eb_Z{~;DtJ^Q%!11Rs&6ogMP-y%dtlu7zx+}0?uNdoWw$uspzO)|Wy z+jjxyL58g~BgvSXuenVq71=fcksJqL&D3xX*H21?@F#2s!(|Mf1j!j5Rf-H)~Y3&XyMgYnvf{JSw9X?j~!M>Y

    szH2;w83U^1mrSirocZ>!>g5sL$%fSOI%=dSA3DlJF*DLxVZ7AkCd(GMig# z?gN6Owep{84tI9h+4KT7MhfyZj{y_^)vhxV^22N5P&x7$ZLl8c?>5Fm_Xo?}J6I>W zv|=ljn8h5Z?6ZrsvRa)Q=ip(FE{lJ+&;zA$GZWLSrgbkZtc_FvrVBNnbn#ykzFa5g zw#kf{_LFBWG#G3gG=g_aA2y4<^sfCUCt_23O``tb1li_oOc&%`P6n-l7pJKi&^D+9 zuV*Hg_Vve!bB!!V=X^vtS{HQ|U>bk*GBJaB2e-HNsHfQ%HcMXx> z_6nSVjp_n(tK;g&dD86Yg)2?=iqf^XVXl!$i z?Zv3O_tOJ$>=!>N8ayJESkTIoRdO z*V$q4adxD+H@7ggwOc>7<>No_^@!eLX||X8_K6ijLe|iOdVW9y?QpR&(LjQVxFrkE z%zZRoi3o+B=wvJk&z!ax`VK6&hyMYt3Y@TqrzGz9V>RNqoTX{2`pD5=--siMKv~Ud zDtqPfleaqA&kji1L2pK&&y06jpk$Qv`?8G>MuDtZ0ScchYeFNh=j5CZSlB@y0?q_P zD&@h3*(~ZWxg!Beb<#%x=}&mcz;l2~C%i#`r5{>(Jv3H)S%{mHi*Pq8)b>0$jCDK& ze5j3OiT;OTz5N*QnS;*!6~fdJm^`@8JCU`W_e5cVRI9R6d8vpbaQvGDTr7wxR{>nk zzt%aj5G$^gl!A1?vv8UlLN$!og=<~mvpg?8=Z96BjwDIJsZp}Ee*8Gu(AL!`ILzhMC3^SoO*p$25G)6b6I+I5= zTcjqbz4SW%mpVp|@!@E8lIJ5tWxl9Q4(aTe;;BJxKbn*)1#|o_td1Uoi=yVC7*3T8 zgDmp5pTeYHoru5csHj~GS_8JzHFW|wfF~8Bt-_F!=0r=aFFH^Q8Yz5v>!?Ih@QD{u*?W29K{46Qxwq8@XRT|gD)vmWBG zi2oFHc%$;M7)?9lJ$P2>!E!J}$(!}01+)UEXdOr}s=q*jNwiCsd*XM#oyZZHVWMq3 zyO;&NIzRp21j%h3O7s}Iia4J9Nk*8(6cIUU0JArhX-{8dg4J?W|zQ*|p*$+qD2!ltjKA%AsF zj{gC};@#@m)1mq6=ZWWdGoY*ct^eZb>N7O7Nwm~y{o|mUrlTte=BOL(ySBXqPbT`6 zNyL$@;?&Xd{N9R(K(X7z=dE?1)5XolBj8z25pd=U*OSZD-Ryy5MOJ}ea&-84>mnfk z?AuNp-Kx;fkAFL}%tZMXYRK8P!W1Pa@Clu1__PDuq5^s8{})(Ye=UZr`G4HV+&!}$ zhJFKJ4jml-%MgS4wQsD!b~|S6=kiG`g_$8wq_Tl$$zHGk@hF0O!k*!BqWT*%V?$Y2 z`fHQsHOC@3j0M`RxqT{w37;llO!5qf_?0MN$Uzwvmx=6~QBlM4H?>JvJP(jGA0lKD zR6jUe^Ree}cXrr~FCa)x7LfEKq*6r(p(G(TMz@sV>uv98!tF_B_~Pno?Ob}A{O<=s z%4G8-O{e<9>-rjatbh+gFDQY{dd1LeF zTK}eN`O)zL*`J4D9=pKo4-mZ9qE>yMu1(I7{Gi*x>x7Xni2uaDpP zxR-7VBth2NZR_}!cQ%uQF@7^`j>*oS8F^ob4sRguq0!C-j>+3E{QKm$EzT7jrq(Qm z?*2TxDq|D3&5AMP^Y9B#1(Q*l4wj@VsAS5`_eY`-XiWjUkVG=kK%`0=qTR>Nk#$WM zRHbSw&GnSEe!#WIZ)$MW4(#~5?mrQXnkxbvs3C1^t~``aV`TP(Nc=TW64Ra!y%ghZ zH?%hnM7ZUAY&B(3P08Zl^cZz@9(Ksg50mC}vh=2PFY>Q-yjZ{PLU^!8C^6}G6@%zd z^YQIX8f&^5ilgLSQHxrYR@PmcPwXYb?dFT@dOG1&PXX()iN}F8tO^!$)p_lc*&(W1 zdcUTlHueUU1ZZT>C{btr5cU$akV$So-E5^fD#g9Ixj zNT1yME*`JPjCaU`i_?2mHz?ULdDXV!G4&LjZOSsK@%EKywvaHDT_5QON8N~hU#|BA zPaE2w+Q~v?Iud1o{WSzQ5OsrPWiUHFvX%C7Jq?mxIG6N@ZncP6Pr!S6bRBSfpdtf0 z1)%%?BkLW5Gkd~s(P(1ZwkLLGV%xTDzp-s+V%v5yv6G3NH@126`=4{F&b{};-c?=I zA9g>x*VDawuV*cClBe2?XWn)%lji&Qyzz$q-Gt3e-UpwAF*L+g6tx=Vw4yf_tEq_A zJTV&eM7?%A)MckC%4A3C=jBMTb*j|#-K9Ct6{X@#3`hx+-!qIjYH;N$R=t~-ayYKp ze|GqAr4kcLiaoRE+jXU<8wqv%1>g(Y6V*J*yP6i^4gs`@BeI0kG(N%ZnWRuRR0Hg_ z0f=oS28#Jj%L59Rd<9|_IqR1k1cWpzluM;Opz@^SbCnSz-;{s(s=b>fgO&X9{Cd^m5mU+&pSfWVHKlH`Nr7xpmtx{>6gk(8#eat! zEs&ggkpNQj+oRpvS0{JOhDwLqzbRkOEnw@szmPj0*`61GxdNeUe&fK`FmEe7d5brV zHJ(3yb$mpJ&oGK@WhQ1lN>U09#Kt1oH4O#Qc=!HvDWlaevVlteC^2kr(yG|OToiE2 zZ}Xfxde7-V=Va_4<}LaECI&BCX}^5d_deMY;IAD5y@y=Yq1X$euAGZ(=N43VR3Iui z6Fq8o`g`J_kc+wY@6&`OAwEK)c!Psmz8lLi6Me=KPpjf45|De403qLOuzI@gP45&n77DTDEqnF;I0{#S$GY zfN(r0Y}1v)4*#CPx4oM@!)qtv+!{O*(2jxr#OU#C;zQ>!zbt6DD4D*NrPyQza z`7l@~?9F@`y{I#e(3TJ>-40`m3OYP{<`CWunpX`Ku~RMzSi!J9FDLB2!LX(!K0IGF z27QJ-vj7*4g^=qm_plk?-TOBWurZa9_p>IA_&Ju9`yPGQpdDu(`#j&F_X%2kaOFTO zxEB*iT|bBUaP}AJ(d7Wx43h+zjS8~W#g-rQ?(cRWjz6}&&-(J4G#)Uwo$~%~fs^Is zx*;ly-}~j<84$B-Zm_mwo|kx-D&Ry3=RVKt=|*DF4Lf8o8sUc3q^BGTu(naDLDH&a zNRUHpTalwy*HT|Yv_M!x4ErP66@n~fvm5$qI9tGv-K6KaXN>DmtD|S4syj;>`FnjA zxd~iA``dg_IqEYvsO9VgFQcCCDkX>iZG?5XFJ9W5{)&I;P)lnmNpMy)@jUKdQr^w+ zr2n0np}EwV*9%lrV((x8;60p^wqQt1d$E>G@ZUnhHZMxq@r9#UF;g|(3+Tn)IIhIr zQS;j%5#q0cUb>h1Qm^C^h|B|O8@uF>+|%CG<}`WDgfB)$BW>w+INcjZ6ufIY6g&qF zrKVKIa#=E|_P_|n*rheuX)&koW`?JjJ% z#Ug_I*QpB47ozsYF==y#Oo1!>Mmf!(&)eTB% z@CMg*y8re?K^^6i5d&;_6`r0;EqTXi8rLqSt|fru%lSzyU_W{yDw+eTPJd_zq`EWZ z#4r93-gj^+kLYc4ief|5ysB28m=PYj%Olbdyfr^`tAb^1y*N{*ZI!sOqP~K5d>KRX z!2ik~pW<`hLQt`jZs{&_l4b*pSl|pE45q2sMNrP5>ziP;^xapBw|7ZI7STwwutuPAP4MB^hU#zm zr^Yo65mUMv{5UnSm;;ng?k5THDphGP1u+5C@W(6kxztVT{H4xU%clPdt1D> zrZ4AP)s{&4HT!pKMH}OyqB>FtGCTT!GZ6t>zwzLehfdL{?D+Ia6|-=RE`(i;MbYDt z%!6puMW& znW(*dB>i#bx>fo2gM3`UNalqirC*8T&z&_DXr7)pO*gKChh(vAgij$<@<3!m!iHN| zZIerG-bEpd9QIPM+6TyH05{0p<5ZV?W7v8+$R0A_zoinvu7nR1 z-i_06=XjmEiGrXw7kbF(gY~&KvFw6m7qY#s&mK*_rC{S+^98} zb*VBHH`{OmF=+*51Tnnp`GaS?(THfyd=K_n%!d}P1{oe_1fIW6>d)PMvI#Hq0P2$o zleZ!V&X_j~6_g3qw*VViAmnQi=WBLZ(wxvOT!^b8ZP_!2+@63cpDax!L~l69s`f2< zFW4Z36eXnmp&Vg4q}l5SY+e%op{KT%5~bdPvie_$*lo^sH@*37c27?|p_D%oTHd(9 zosuxuc1mFQB}qHf=1HF*%>!#2Em_G0C7^toS2BV$qPQ{134rJz5wXGsG_414bSese zMZ<>*zBe#djR&6nC0$6Mrog{T!)Sk(X9$ zk-CO|y@qCWNROrC?v|$Bum8KpfYnLMNxkyQ!>S9@4~O9)f3A9zI$;L%|9Lg0xphLAjaj75_bm0Ia6p9`gSd-{?;SF9 z@EmyDyinxFeV@%{`8hpIJyp-g6{jDn$OEJNDbKHw@)|{Cj4+QYox&g(L6xJYM~k>1 zoc3Vf9#M1WeRs80{$zdilo!juM38pZ@$@dQ!S8n6!}{g4LG*m+qCXpQ{jOiOQvA-Q za-UQ;q&@fSh(BKO5h-|3)YvdgRn$rPfxcbrj+PoXk(R)Xh7Wp~R>O^k1%b_YD4I6L zjrIay=KjA=G%s}4V>jARe6MPciI}IX6Ck2N8^Rm^bwPCgkLCEk%oATrsOzJzfb8$$ zlQOk9?-5ph<32(QZC{D{$YP@07FW}~-e&^Ta^J{ueq}C|<(}+f8;8-%) z6Z5w#`d!@SdYstF2hrC$0dZMm=2s+bbDSE@X?&tc&;>f$x_Y zb!KLEiksSc*Vnb@(_`K@QGUq7Gvw}Lg zYAul4O_|$$w9tQ(OR{veA*f(&zv4jj>E|YMY3-OhqZ8Ic$Rd2XlIFK)61KcG z!muLKooC)%!eLjj0>E*04u}a<{pqD{J7ng#7|LSH6(?V2Wv8h^aQgxETr#JZz)|$E za5XvMaasmZzBa z!4W@Q!LDV&Upe$u`uU@Sp3O1^rfoYfH+zJxn!W&qM28m7_m_rh4Masg6PW74A1)(a zP9Ew^TRQ%mi?{8quL~mSA|7I}9cC_pJ%=!h@A|F)%D6j^KiYPJZ10HT8n5#V0M9bPY);+i;%>DREpH&f#?+mty^@F@Y8 zEA8td=$!R`U^BED1xF-}LqnXu)SJ#$<|O4x2S;^X#yh(L3v-mikg57bIiu-zOle0k zHjWsAUD0gUJRdE%C+CmhH`o&WqyV38oUx#WBr{@UM1VVPrmg$g;XA^NOLYO#gIZ@j zggq^7rrW4W?m^`-ngzp8!mF9z&VHJ;*c(6gBg1^QcKOgQ15>UYp+1wDFQI`TO3nAO z;revQyWjPyXUym-(C;m=bOu2dRydaf*pnsq7m+XuHRzxdDWp4>c|z$BSi_+y^QAwl zk_Albl>i-%92cGSN?v4`zg#4??s>=n`Ybm5SX_6uOc^8wfHNf=evxqB#FRZ;-NY(; zv-sO=o{21+b-t0w0~fr?=!Eq)+aI^wPg$!+{4(;-g+G2nuR@nlEgCva42JxJu`&#> zjf~>PH1hy$cM+&Ow>c-ZtuSer6l>iDYHs8bGyqmu1Ad)!Ni*6lvntSKm;V}Ag*D;P zZay}zlm#2`XXk+EJ@FOpS~9mn)wPZ+HsexGqR&0c0!H>Uwr;6UB%kexeeABgpRnXV zC7fO70n$1SjH3#c>tRHE+EW z69aPp==Iy<;@Tz8v$XUn78P-f)1%x$Xw21o+o$n}?FbW)iJ!OzC36+X_U6Z; z+;PWxGgQ#qfwVp*qgrFZaB%n7Irk*>J@7>Wrt=rZ57f(45Zck}DeBPMNOr z*-+YuqYv2IngxFMTY!Cgsa%(FQMJ@V@d4To)@Ac3UV~u=)V}AEqGTHcJxrRvHzV4f zSltOFOj`Q5qkozwoZ+TOmYV>DPQguc8l_Dhz7yYm#*AKO)q#E?TYDNZik+j=bVTwE zw9o;EY8$b!==Dq)jr+~EOf0Gq5_Cjqn7}#zm&aquTuHD62&DD=i+IO2xT_ZjE+DyX zqdCB^_r%dos3V3t&eiic1Vb46TUnp%b)~L-00A?lzS>=+x>$a;D4WJNK@%cYS(c;e z`^gW{$EkHmk8l#J{{uKU0_yXxpabe0H;D+cwR=2^`1Bdap||r85yNs>Z~Ix|Ib4*} zgr+L*2Q~|rp{de#d5I9zBe`QhmAbs;4*>;|fGCI*g(MQZ>_6e^n(n1mT&YZv+ALlV z$sEo)am&ZMG`68i0t%v79}u+V@%|JTs17qmLfH^lo8%a%%G`+8ELV&&>EB90r799^ zJ#Mr^VnH2@-LuMTDeqXNLaPHJBHVLP3i3vpX8N*XwB~Yujmld zlx7laIs&4bBxdVfc#e73fhTH)|-U8^p{u(&bgWtXXaeF1Gl*J zo#cMX_v~++8Dyk(?_K&=3GlWXZw{aAUXy0jxp~@IZ~Cfwx>>uTd!}nPifrOtoHX7= zr6j6wK7W_Mup*WLD9+;Ufr)$T>PmTi-TMeSBT$?r*6@GeMMpwJ#FUvabnns1WLCgZ zPqg~@SN|uzNhew|hg^LVU7gH^1+u((PVAn;4`XXcSRN!;9<<9xMoNrU(Qk`I7r7sP z6paLo2iQpD<~yccXmV8EDKhT)O58LTcefRP8tY11<^kYb0p!Z1kDY=BwEW(Yi*_s!P*Oreb{?HUoe%ViQ7G+ODeO3*E zvzi!3042S%7YNiZ+36xkjOjw~$B;nMpQ`|kt!2IBm9$kpa&QWvu@aghV6Gx!89rOK zFWHBHp%em7*)bdDkuw|%=#7SPu|O*^UNWcGYVO;!wo8aO$dmnH`y+USBiYP8k%Wk_ z1Fg8*!{x6XVJY-B3A6CXwuBo9QC$?NZ4!zR^yIk!i-%8tM-6{R8kDnio3j7%27rYE zR-;4&G-^shcLSPZ(?kmWf6#1CQkC@|nyV!A96z8?1$A~pbau)$P!a=Kh;5H>^vG<_ z)id(y^>xhU%~uz1&%Z!rC_1W~ZXZTBnI1JhoxG6wm+M24a(d)C3LJ^zQ;h#cI-I^g z85xR<|IuB}s!hoqN_3YW_XZeEz6a%EFId-KV_;8wya8&a@|Y(KAhJ{v^1BkP{-Dh`lj_5Co5g_cRE2KVRR6 z<)ZB>zSEw~0E)T`Ax44I!7kxUHykjGuB(cU4Mp4xsBYdkr|Yo!TYki$esF0P=aKH0E`xpJVUtel>T=74Zr?@63ukA0 zTys;iwG?3e<`)(Bm$8#JcC7d_7S{A!4^L#a4a-$f9Ly@YCyz0bt}92+YOp)2u;5^? z9t;NE#Vg*u%`{BwWO%ZGc7y8Am_L>?)FT7BZ#JA`hgmw&+*cWPz1JB}GV3Rc$9sT3 zKY2H5zo5Rpi@D~0k)Wj&iJ={XvZncaqTvD}hw%))S+}m3S!o6Y;Gn1nh9&%KSls@c zUr0qBmJR=`#xk?mf;>iSB}-SUq_HXyR~P%#?yh)uzQ6)tNxa0@PtK0kzYVnRRv#$` zd+%;+jk|8=3f$KvB8B{sTL}ZfW-YMU#57sN-Y)XKZM#ZA3wD|o$)0yudwRYazGHB;urDtDR@Kx2j_K(5wwa=@`jO;dvg{&ZTa-xjx?%z$NO^z88RD9X}{%~P&8nicOu7U z(_cI^Mwn@be^4wTf($ZB`u$eWYv_XztX%I0x2tIJ9ZayQ}1dQO;Fa!4qz6WT){} z$ipC4pebH;fpKQwjFLu;N*m_lSwG%Db7C-@GS!#gdBTd%jRnm8gQj>1@_y3h5k_x0 zQARhm1`7MqW2*0053iD)U6V2fznf;zda7F&iDtkwPs(_$P33(QN(Z(%BPMe$MWW^NIf{3ltAud{1jTJ-sa6Pg z7B*4f^P|NjB<tAm@mN$$bCTvj>a=wBKf2{7L#VRDrtdGm!kd8>0P zUXbP0UdTJ8WnfL|SRL_qZZS=@uDLO$yyZOPy2d`Rs$I4W#AE{G%iv>`I}ijs=<|$( zs!0oC<@1$?^3RM!elcqN9UegbfkxhAo*f}S3&)q=zqDKgKl%@~Ih);i-IB~P?UpWN z*?rKHu*kKndlHr4mM;u;?cwaWuM$E4nJxfMfQ%f`V!?h#Z6Nm}ob#-B=(5}uPG|`YaKxrD&kXt` zMLQ(re;Xa07kp0cBhZGWU*z^Jz4;w(3#>A0-jGDBsYKA56>pWluin(k=X%O){YMS z><>N_Sn9q=A3skBGYrS@0T+tdIhF&vCiK~~=EK!47YdapBE;WT#;$3VZ77-BTxS$@ zs7a|7zf%JMPEe7w0EgP7Q#ULv)KZA~bl0VSoNfYKZtsZNUH|>Hb)#I8hJ4kd8Q!@C zaF!`W0P@iy0}|&pdw&$d$oF8bFU3-Z_#6(gWaN727#osO4*A_nD1in)SF+HK}wWkNSZe zfCR?|hIMClCEQ~w%~sF1U1&GbJ_2ICy4Kp4Gml&^HbS4E*wXMvw>Ne?qSXIzNV%_j z_Ip=q(=irN`oAU|Nmb{66An$@@wS<1mb?_yQE%j|YL@;$-!LMSHSHFKIS!ECgGy@9 zE<&~=;EI@y;DK8Yk;4K)aSH)orZLR?M7M+dGnvuMu&;0g*dkPqIG#Xiz^w$av9An` z*I$v2Pcsnx0m7LSQg@lH`b8Lv?sz*zKS!QswbM?l=M!T_^4iQa-?d>@rrxAbh!)ad zj4OFYlHs?PE{;kVqrGFfmknrvH)%qs1jQ)-o)2mC*E~JNL%Fa;ek?f>-X;Q)6IAh` z{r;stP$QdN)3^#4iY0W8l0mPQ;UWfMfV=imDEsSu4j!euvm#jJX z8YQ(~ee%EsJm)BjOxc>mWayaMtShS|k3)>Y zpjRuqcm0xXAjn)*W7w>2+1Gy?K}XOk2+)(S42lB3ZAjo;*0@waOsO2gp76fKF!#VP zJ3~9$P^vm)D+$+X3xGz>JX*FhoR~IS;<0=`4ez*x`2j+&j{CLl`!kG?dN*Yy3QB$N z{UJ^2;#8)dPBMhm`he{*XhYy7rNCu7OVPe`Mzy6rM^KS#U}%_6(W9RHq3=Ndatzs1 zckR2^tHCP8uFnh@<5#G49fPC|ka9-6Ykn6?618Ei&KD~MhUXs_0PY}R*kz;M+Xsny zAu&L-r;TF}arUkWdO44OJn0Z! zF1)B{|MBao2Dl#nZRI=4yv=5}YN$#Qtc1jIp@kTI-(kndzoN0tzCHfiUU9E;!E|{D zrQ$6trwNRPu^(Ho%q=At7?_(mn*|oDj5i0S|P z6lmyy(^z%~ecGcRf~h;BJnQ^_;R#({&(SmTi439!9c)JQ2A_E%T1N2Xg=TB~NrtfD zy{?m2m+UST$_KgISppUTxubGrfE9zIs0k{1*MCiSwiC$!FIHR+0&%K!ZwJt&jKa2y zTg-bj$x5>(9NS26?$Lqc3gN{-*aKq7-F>k?e}8g6SQ}-{%IEFHmj!1z1FbI3s4GnK zJ)rR)jFArEG7PRdzrhb%glXdVI34GBbp+HL^fWop3h56g)!I&90y(}9Dx}-}O=+;| zG?K3N$p5({73-uo==UvMG6H1U{%1{+`yLX<{~prtQQK_^Loa0;mS&yydb*dX7#7O> zXW}Ck+13z?65AhW{PgCB4r!hj(5@gjr8V~&_8toHQii=bNO`*R%W^merr~R&S8J#d zFQ;0Ee!C-t><2ci?Bw!PdrX=r82L|{qZWC@`CJ>8re+?%#h#HDvR}hkKqrn^vbFG`4pD84--6m)n&o-9Kmd@)<%*0Y$ z=mZj6)QSA>m-~mIUzg#6r*1SQgTquOowOSIw*9xB9}xW3Hcl#HH4^A^hKe%Ijyx?{ zY%rV;&0FLIX!b^KM_p*J!+B+6yevpLjE}lApiggKAPC&U>}hq%-xRw4U-=&17>X}Y z{TgcH^6dvR#E_QH&v;8m{bP`=cfojNe&2G!=~*4cg0enL3#C%;Qx4Uo zC0*h2>Y*9Dkgoz&(h>Bo&C4E}9=jrF#<&(FoKGk{ea`AyGK2k_K%C+EPia+s#AGP(@Zi^`1#?o zn1wM~3^3i>&wVjT!#=-x%h&V11yjkC`(H{@hHp0$M;C$skFQds-oT4*>YM&mQPUgm z+vPM&v2c8yFdI*W0f2dLaxJ{MlFZOn#IJ*uj;ynj^K|>01E)JbD7{M=MTf0Eft@_% z_5Qv;Blvlbwh}~6xhes>C!T!6LU#EcJa^?enRXM7C9s~eadCDPFqLnuOPD6N`_VHi ziFV1R*DyJ%^JZC)06d55W{cUql}WNdiQ{3qo1I{rPH4O>2i&USs&0RSTPH)B&v@>) z>l^+}?cE2P;QAZhqvGjh^jl;cssR6{dPhp=UknyacvOOdvY8<}(wAK_BVkFpE(p+0 zRYb${#2+V2c(y^adSaYAP&g zUySQOY0+lt`To0ShN2L`j+^)UE|;!UegZsyL-TAukBO_HQ!f4ysXQi315xUXlu(!5 z+GV)C;QRY76TmvcDXu7F#qRqr*A3&7pZU`#tKpk3Kmqj%$%DJ=@`eSw^INhK_{@Lw zS3bS8#Bmb1k7mn0H`b(*-^z4{fA?yTe}v8hs%6kVCKpEmO`|W49lyJP5c<=MYg39~ z{G7ZB)|qV}bJ}IprVWioRNsPiBg&$RX}ls%c_njzGP1Fie(tAd@X9$gWb$ ze6*hufOpK&R_?Upu#)xjj8dz~+0{+11OfNQ@1V337~c;kETq`wFRP{l9j&`-QF*)E zr@vArM`Y1oJ}`N=oyo5-sYf06lcZwGZPHiHLq*il>O8oJL>w@htRXn?$cI}HUinGc zL7?T!^0}i1#fCK1beoV#Od|XVWs}JmZL&D$fI!!Hao8ZwBIdR?D&vuUO6)lFl96v$ z>hWkz&glZ*II<9g(@F7hkE}`|B%B7l#W9AkNg<W~n;VSejX;ET~G?m~Q z%yetfnv3B|hGC--_ipIPCVIL$>3$7UO@?4iN4+RRFZDy*Ztb)elm1TQhI7pu9wrA{ zK$?Buz=j!pA#ntZ^q`>(4WhLwJPD295&DJ?N^-_7Bju2F#-@F zKWZEHi*oWinX}tTTR9Wl_N#<=GFw5w#muLL2%}iyXpRC;Oyvbu6)tQqg!L#_pgc?z z!#D_(EO|-0Z@v*R94X`-_8zk~BOYr{9Y?Q%rlqVtiE<*i5vg*(0xcv?rNLMDM&_$0 z+wP(iiwRmTN8n)?(C*VJ`PV>a>yi||s`+{-l#nH}0AGQEq|Kf+2#)ONm>TxZB5PvS z$Et!wHZ;)Ezt>5i>DfTO@emcDYD2w7$CZ4JVdAHn;ZP>Qihibgov%`h%YwOt4Ckgp zJ%1M8uct*hbTXB8T$d)dh3>Ay*Q&{<-R@(~%LSRVTa|MmRqczOdGn0S+snuu-ZIK2 zhri5n6)w>uP%Js)qv3t3!<8Jg(O_w>ohte;!$rpdD_|INcJ7)z9qJ57t?rEQHEoq@ zXcea)C%%fFv#aOd+n}?I<2npk(9-HY4p?QiYvNa`EwqOI+9J)^*0xsQHBv8PvP|GI zalv47(;}D28w}^X;2yOrH}z&}l6YpXEfHnm*}GACb8u!r1u66MKuB*xwat z;-FuN!wc!Q>cKFk!VT}R@V`KQ=O{Y{Y2Pg>B(?wue`iMmTw;zzf5A0L9PcofCp!(@ z%RvNrMg{kO9Aw6(cCoQCOWyt&yW=_!iJVsLKtL3-I;2ER!TE*F9;91`h?p?HOQOUx z`QFI7Z-8bKo?J76OrvW$QiW$e*8`U@52Y^~6l_&_ITcyTztKDaJG8IylpQ=!DT*->j8+pIV*)eA;QkztsbX?`^endvibVu>0~u znrc~}a}Y+gW~v6Cdt7PKzY%}Xv4nsBFMYGc)iUL7^4jrKtK{)bq}keo$eoUD;@mgd zvdnFh{%m2y_fvC@S&1L=lvTc_P7>u9ZgcTn%u9ln5Akd62aWCTCyHb z6BaA+5C1IK0_H9$HZpN}<H+&Gsmxl-w_QPydf zEuZr-OppqFnE0gOnaWG=*F1=-{sy2v)6HPmo0SJTOlWKz*{3_cAjs%={yaPt+h3L}Lg8ESG891BIP|71 zB;P#bZ;mwt`KFxs5UJg8dKv9F7~9*QE~5{ITo&3?P3o*08gx3;Ywof5wzuE1J)FLX zWLwQw`0f9t*{F~JCA{vN#$U!H`l`uLi+6cHruoeHQ=NUXyX%h~)qowNm_LBovn$Hr z+cR)?oi*+Lg3RTPy$L6YIDq{WS}mLuTz+8uP0;{+o>T=(r{}qUg9m{FW-a(uL71aS z!pH&MUdjpUP-PesRi!ys{u;&wuXybL>GHpyVp9%`tC*vrfcc-+U%ZQBFI&;7$lP#s ztD_^2?yk%{&+!wkL-T7Of4GyFX;v~8t z3Q0%~Ktfye^D$35b0IE3UpF%;Zc$e^bGN_suIOcLs~b~FR=&^ZjJ;vo$-+~k0o8N1m%?3w28U~_2nBxVz z!}ydLfUT)Yf>DgK0UlrfpBTQ&Tace_${+}5H!rK%_Y`YY;g2s@7omq^{Ca>aE|h?D zP4x|R`PhWA>w}usV=W&>w*5BR{unN->thiMRviCj(C+5rmp9Y@{+X}R@ly~rg-H3e zY5gq>s>?!WuXy}w;on~Cq#(b{$`z5+4+bhgG-1pd==Md)jOUgxj`NOs>ae|~aRNiL z%mWhh&Yr)zSLjLx*xWY5pI@}*3Ux+4UT4Vs7&B;p3tdv?J3Z(yVV^AyT?$6v7n5~- z7_e#d8$Ws0fBkgls#@9$~1=!>W0rrtMqUL zFkdnuikz1R7cJj0V2{kITPk0B{e1=tZY?;y{xc_BCL!R^|WTs3K*=}OO2qnl0=xZ)Pd3WBWG0%v!{o{|!djLz_^Q%P$wk99I3&hr}PFnZ%LzRcfL=``;|2dB&hW&urznQg4d2- z)HxB@yJ2bBPR?X4nQjnayaRyiV5-rjfP7o7@!F9E@LiTeC=tbkSBsBGekoSHRU@>& zrNns!wGy2$6Z^Md+)*?A>!=l!S!}^$fs*J7UZTuKcH`ddl9ZdpHj}T>d6(PdnLVq{ zHusuwEMM6_||6dJlD_Cw$c4B5?dm}4YzO;BFw9Pc_Q!GS)uC6_KtCMe@em)Sy z?(Pko8MAGA6B`lvK+ik?1o4)5%IY%8#^mDdD?! zJ<5i|^a}pd*Z8Iv^;|`2ie}>iucsz(A2G)hAqeW8G~*cp1fdXO%Aut83@*SaN!h$2 z*Q3)qm96#Onfo_3Vxh$#Y{X`fcgMCK*uzHe$kz*P zr;&#xyf8By_-2G`wc5QGRqXOchACB_Dd!3eEvY|rE)vU5+dSO&m2=YjELJ(3#xx~Q zD=gvXSCrzc@bh0=%(|%`2@s%`3;S?io&=oc5;A*1l$4qMC=|a{atk+Bcw!r@DE+~= zHZ>3&!EpiT`bx6UPqQ#{TJk3g??Tis*$FGsyk&~fFoT>@nLSs+KdtCr%PyaMB63@n zAxzE|et&1BGnWNJtw#7Ridpr2TR;;0xZaO5*bf`L1oW_uP#NzL5=9~X!vpIfimoR@ zVC;F@?nL_P@%{n@?au@W)bLoxyOPY}G zb0-Q=#q9aVZqf4(K>0?_QRy)9B-s7c`t|PVI3mmuCfxEEj~Mr19&|M-ycQ<>s(}tk zx#JucH`?r-Ow&C{m=~s|ws+!??zp&pDa?QOz?J>Z+TP+c#%jVEhEc9VeJtM=q+WE( zF6Yo_R7i@^&klv~mRW+H*09+~PAx%UAW91eLBhh?gCGdDi&QC~iBw@c7)w~8*$819 zW|LxKOD!W#>7ytopS%e^jQHDV3Jg){$P7`LlPSqW-Ly>{4~aCiPJcKoQiA9}?H4f2 z7FPy3j)jz`YGe)?^91lsU|=imIR6X&t;Q81k>+g~$?yOz8khNZ&ac0lY#X}UED8FO7cioWb zIH%p_C|Bb58vy9eG8X}DDGFMe_IybI_HZ=S`iT714}0X+XBi23;Z@QLxl*|9pD{$* zqVF|VgcKxuD>`FP|gRKm2sPQw{a5s%!DoB@Z7}+k+2)b1b+PKkX z%{7R`XD)RNN@j7-HWoUNmbp9tkXJAcy;EBZ)ft-V5s9BmiH*bxgA01R4=^KT13UP< zFk?yg<5!VQ=a7sj@S%!5fhdHTBvwm@!R9@g6s9@=Um=@ldNZ!IF6VXbHj{_AFwu88 z*_IvMpi;?QUpjz0lpCYELE};En%N=>~gX+s-x+9Mj-qCyo&%GqJGCMFv~G{r;s6-^FklNe%4xj&7}KLj0=j_4`VD5_C?Zu|(qn z4NWt$M9T)O;Gbe)Xua$D<*Q-r>$Dbz_gw+rcT2yX;o=_S!rT)!>W|W;5R1v-4|@~{ zXE#5e$45t%)d`VGYw#z>yycc#kf>^h+_(QtRUO>^mg;=W_#LTX*Sph}$OH#6CI|DP zbj<@|P?Z}GUYzU-aXlheQ-mRBG1YzlCs0TfS)mOO4hBoqq=E_+lH$jL{P*$iFaI$E zM!OKS$g#aZ#(-Z1EXWc%kYEwc#PO)y$Tn-<5MY`MZBkie4Xlh?cEl2P4K%5CqkGuk!7vf6cafYr91FFm zrK*+yu4+lT?BzUNf@0Q^Qfu_2)5Y;icT{;olDTEQ*1ka#;hJj9ROluT-oh%PLhn`l z&^$K^h0nUcs5~od(@riJ#7zaJ!Hs09A8~GQhBn{4Cnl4XC3>;$iw8cLDzYq=X~`^ zeU)&un|{MUTdxcMAFVnl;~fno55{?P&iu1e#Ueu;aomw&IDhuBXEL_gJuUu7wk4UC zArEv*i-doxZINuh)(Hs-EU{G+LJcu2u`%Dx98vK*$|VM66%#_&8G`G-7mzL#%V0&o z7juG`=UNJBOzMkH5eeqVUmLw|s)QS4J!xw!Whf_4a|c4Lm;jz+OD+t3g8X0j?jGvY zW5$ZkR%c6Ny3Q&Wtym8%QADH}R*sh_vM^2zXFsBq1mPW8Cukj)@-WhX$BSwO>8z$b z9w(2e4Gy)=Sp48L-0E2T#iI1er37K}KP*nr8e)i`tok8b2yUAu2gv_-#&SG}7yBqo z%dtTV$092kgjBu?d&%+>Y`RjnH%q>}BlYslXyvm-!vOsjh)}Xa3j=&Q&O;nps>`7@ zonuw^Z?8$I)S>8M58<{j83hv+Ea8PYY=pP#4Ijj~;jH!iK>*T_PE`^+L@3r}yn!xmg?KZjj#vjl8uuNO-a~0z^>h`JfXMvlI-s~WcBx$(&=+RY@5v_A+H)Gd~DzbpwWF0{dVnMKP|Zk|?#VYnkLG=LML zyximxM(uab0++~_FG&w_@!OLqFNsf%!s*6GddPd|)iAd7YOd1GRCg$RTDeLyL?tD^o~3lVNCbZO;#0PhRoA8QRk~d-5B`s{_=_Lr zx$N^Ssp^wrfVYvt7x8C{6Ee^I-D-nC8fW|F7u`vG9n{VRA`Yy1@3g8Q^ls%~nxGqI zLR9gM0Q$txuViEhp*y~jpNqxO@rG(#`AgCB?Hy!`a%0U6Z#e^KTG^Xr-aEwJ4>c<+ z;G1WU@c6FcT$0Un_>BS*=f#=@B4K`I0PVd(etBHrvUJ3NlJ+CvU~f&i zKEwT62?c3Gam??pK5B9hqCzyRZaLUX!#tlL=FLqm{e+ zh%BY5G^kt$?=A-VLYs9hQ`~&_AO`J*?(V=QhCsHwBz|ngebOc4I@xA7SNc+|gOKe> z@#-c8fOb=NZ+??v`jU~Nq0@fNyREavvYzoB2F)^)c&n&);b3ERIK1@3H@9LwIb{pT z^nG@p(wKesQ3xz)F_m7e_9Z-Vj!f0-To$-ODUkY>p7C8dQuMm{Y&qiB@@Op7&cw6?f1i*e*n8jFjXh-;C@h$lkPO8h~?te3}%!%V{)ezlSFL?qVYT zJy~m~8S?QA4r63}xHItbJ5nsqv;m8<)AjVSJUxK&I;%`?12ed|mMl4o38!Y;u{~9Q zSJOp~pyS#|{o8DY;EC3p^4FFFMs5#u?Zs4|H&P&NY?+lV0i0`|qliX*6SE5Q&7bJ* z+0bZ}u3+HY8h5E7SY^h9*Fm8jf{_)W_82$9F|$jkk=f#eLqJP+BqKZuLkDw^@K4C4 z7XvVLV9=P<^S6DMe4#G4t3bNNMA8VLefJxAb0s;P)6i(@&N-1$)0>|-hT~tcg&+*i0wfIsL!|48B+2+X)#wvu}#0H-Cf&QMRdg0$2E!ppO=55i=9Kenw`ac5c zej(P-u(n`Kcy#E`-o;vH>;z0eOk?=8zy{6nH^VN!XUX%2IaHO^@rABQEt6#EEW+K` zV9SyfP2=4#y4KDa6j|@1ZT%gU*rC zt%U>lRP@c|ZR~Wa`KC#(UVyDEAH4^K+S&?~vsS-6pU$gTKxNG@VENI#4Ri9P31;&p z;1tI2)qXarAsinpawEY0G<=OW3^B{T0(`FY_Izb=CBGDeQNKT1trFvQ`xTOi+_YJ* z@^uKZbj;GtsuZsxZvv0L5VZBxE?3c~768c^3GEvvIK!ozfL1`~7f_H0@b+N$^>(@b zHF0_Q^ihjtQSUN8|1Csn*Wjl23)GR!wli~vx3qlMCzosgF5`f56@yWp771Bn5+#$k zBt;dNV}8&i(P|U<+T}a|XB!#mE@bo=i&&g9m!J3Rsel{I4)|Rd1cQqyjY}^Vq|52K z)owAK6e!*a&`f9ke*1A>b^cvJUv(e^Na~F+4-6$`fY&~R=f1P)UWumRpV$>#q*%;l z`Pn*G?7rK-^`B(J;_hhs26GWh`$ng)rkZjDTDo%T%k;Dv zm7}MVTySC?tT8JyI0Ba9)iATF3##Yp+`g4U)3o5{P%@NgTQ<^%QM;+Jl`5k8dw9a0 z@`iU0Q1`4O$2KzqP9!*asA#%iBA)VO_ZFvjY-Y;0Ta?DPEY=f3yee`cn8x=(jkSJgT7JzZ5#N@HIZ z(npqYjh=4CzD!xOHJe9v@ZA3CZ0!2+casgSQz1>ESf#9NpX&5UNX?_?mzKp)Ye?M& z(BA+x&AXDKIm$W!mxFzNk_8<5CtLpzmI(nC9>r3l%~Y_JMo~=R7)LmjfV^~Q%PEoC z*WiJd($6>6g3n}BKyB`dc>w^J7iQ}vES&XuF#2?XcZhG}O?%l{vvuth{otmW+{b+8 zZQ~Un+;yo(nEKslcXg%*=iQTQl%Ao<49YPraTRAw+HwwfPd&E{-K!a?jol$7L3uVa zRZ>^KR6cI^p>fc+wKbu4ZGF|2`HiKriu*h$M$MxsMl2PTs=uR{IJ98)O9K#d(VYJMBc|^^{&};v z|C3`pED=2!bdvWz$LHmB$gb`3LSp#c4&UA05w(8`8)RWcc<}J+-7reF z8+j1)Gjp+{o#33QoFo_Vcd@R|x7Uj{P-cM;P@W_VV}2sH&ksE*EB@b?{91yeUT~bC zq}d)(m_Wc}gNDyT+U^RbQ{w<{7KF#AVzxyZpKlJxJ@3;;nnn&@doiY3MG9J;LV7=i z2>5(moZYN~e$P6`THNpRx9;Z+pJGoT<6~XrLr?L217lWQ;8fde^2^~=xDy?J@tB6k zxTM_Ba~sgz+DrX=efle{JDAwrHT=qsnh-+788E)t8MhHRWyAm;ll)j3w-xdEn590g z08P&DOC2RbU){{lqb;{l7?Q&HNyoRu>zqDtbw2nqOS>c)+aSwap9}7DXdWSx@^T{- zcW3fjs!Y;@Jmo{qY;+N zFblXik=Ztx7y{N*D@wKTSrSHL@176NF0U_pe`cBQ9(uvmr3?`ltRftZkbux zQK}@;&i7%p<@w+b+4s<@4w<^ohUVOW=#S&KKx2MbmA`I?Jx(9oqbrZ|Z$ixj)g>9w z%@gTpr=+Wix2uL4`I4TIp?Sb9v%RCDgaRy;`V^VN@;+cAT$EJb6Nj15i{ICq3=i`l znr|r-`5w;RtTE9}gmE+pEVT2)Wbu|Jgk13D(i&+n&V6}5wNhb98TYL0k@AAS5G_XO0OpdW|Z(+FmngqkbJNS)tY|eBU|4r+(g4+IxHQd|GO2a8CtpnNMW-RkCR5Abb0RC$NSsQjVS5?ksE3GV+J z@9z`!?o1j~mSG`FA^Wn@Xt_c&d&+Cx$stEL0&G?Egnf)Qd?mRHizrs0nyZ-E2N##h zJ0el3Z*Uz=x+4Dc;FiLD-T$BM#TKTrd;GNzBawlZohL*;99Xy(!uiE1MM~3EUa@H0 z0;Gmxku}RSO~$Ws9nCn(iVD<`c@>Ohu4}Jl+UpJS|mbtzy8;0J5CKlo-Ah-fPV35llGCEbzb_zAG*tYzcc3( zItkbogs0Y%UO2$yU5y=F=RwX&YNVY9{V@-!BF2Z0@Svj~q(SEr;na!@vX!XXH~)^f zkJK%(- zvRn`y&DofG2_S|3!#G&o*b{SB4fs@?;NwdDciSFZ%%NU0JOc=2zOaJn*^3~03oRNR zGT407j*^a>fNv=^Ul+`w#$?@L%A*XaBXvc!Sv-yKsJ&p1W5-1+moKVC= zAsoO&G3%QHfU?MB8dMx8ihB)54iXmD{JnXEsIhNOg@gN8{O$K4=XA-y}JW?QxBWG0b_0K&W?LeDnzc#DhI$6^2G8xYM=ijXJXj2MMbaI! z`k?TFdC^dvtU-?+c>+-k4W53f*TwMd5E#u|_FjHp41^q@Zn3aL?8S=wRHgjex1!g9 zg~?T~BO>qE4yC7;lp;>^Pa*RRR)PG9=0JX4@3*H9g&N@jlk=+44?#^k@do{Xw6k;u10K zpZ90`z#dhGg1%Mp>*1Yb`Huoq@%yi4$;1YL?j1`jq`<%Tbp!mW+rTK5ZMBuW1dHMc zsaBs__k($@=)7<7$$Xt6lk=Nb3RPLB?zKO92{Bv7cN0X!wKQzv>o=tX+v6RQeAz78 zf0UhFAr-ubX7m^8Qzkf!`dFdMXZ7O(`k3)}UKlnga^t_*N_j4rk=&cSIzmNXJD`gb z66Vc(biln~pl6I-#sc-ZH(J{Z-%r*N(>LVhKNNn#;*1c_BE@Cz2=AG3M6AFKSXL-} z!{6@|-lL@Q;CeL3!xQGWbH^XgzvFlVtu!%aqR1I{o9#0Tj7iaE)GHJ6hSC#VVlgZg znd=y968v*MhS%%<}`{bI~TMq9cl3yEtH5=b7zr3?rkjz=rqaeTE_ zf^%?-xHK8}X0SjG10ckt4eD<6O4$rKBOjMmhsILXD~iwuc#1`PU3aTSALjP%T&2;5}#XmWGP3aooHtBA)K84@)*Q zc%H+vTh$lfwTa>{5X0cjNwUg!>VTCL-4qx@boA;tXv~)qAOGNZP*86}(d7%6DwUqjt6wqAb1Y?o{zmE&TqB~hG}S7>72#P*Bt` zy%IBO8ua@7*$&o=-3zq*&ra7iBVh|tn@v>$3am@ zVq2B=YujG_W@Y^>R@^OBrinL<`$|0$+|l2K^6L`{f;8|bb46a?Ro_j?J^i9F0rHa| zrYfcD5FHPAS-ipT_PH|izl<5MM0CtNgk-JmtPjw+;>SL)!1d3Et&K=fVvv^ z^@eS%hnMcGEsJl>TE)+cgdV3a_4lyg2P>l(r%+>hvoF#)iL{@-X${FW&Hj0pSV~Gc z2?Y=V+gUF~>^Bcm#4aV<$^#0l^v&}T?d9KCM&z?+?gemn$T=(?Mxk~h9eU2X&RBEA zEdbM>*dMW1p+!Ib;>L#4SL6%iYv<{~+n1cz9NxcJCZ$NCabH?+YEXjCOF zy%Kv@+iLG6k#hA9`qeq>x%`#(*amSx+Nxw8hLFY$PRa43jv7ZuVW2Fd~q6oPj~1>@yZA~xXQa#8WG=lmPks-Tr$<=N&h zCSg+y@(_)**<@YC5JyV=BMWkzxBNQ#8tMAX#f9{K%rQGSyyvX5Eg>kPt>qStcz#1- z6W#Q|LwCLEH5g}Msk%i!?I3l|kmV6&H{UVG5fW@wX4$fnHP8YWVDFw17?L&u4)y9_ zZ<$=h-u^yhVpM>43Aj{#ozQofpPnNM^Au5qpcf5q<&ml7w#>51vuAPUV?Y12H?h(KIIJ8pzt9`xk?1Oy6POwnO;{KJkl+>J_58ZCTmn@Y zfVG&kI8lUYe)|W^jBw!Eb}Pf^5sHE6k!q9ZLUC2Io~^07fd$-ZJkm89ai8$V_IN&~ z`#I>$BWpwH<%uFh;iZYr3^GD|=_)(EI_81nfK}r+r^Pw%xK34Ob$o>dpm!3bTPpeU zAAiwTCbS_GtDEZJBtWSuC$ci6_?&`gAck6^ISf=J1%m+XvCTqmZXdD}c=-a$2C|o5 zl_~{#R2q{1i-J@usRm4OE)hX-Ae!t{E0i3SSZ5@gFT`qKx+}!y%MH_Z$8Ltv(oAcX zwi3Hisi)7OBmsqbZfP0=wQVG-l|x^vMW|15dEIGu>t3p!ree7XlLo)a!e9 zlte9O><#F5)N_Zxp1hTzRm}6BaGv;xM%P2gFyl|gnKFjeXz=e8z&P`9)JPinZ!SGt z97yj+9O#RLBR$|SQ6#;Mi%CS{>GmRRyB&-uWSiWR9Lxk2CoKc9aY`+(n?|A0;H{Qz z2Ai!+_|`!+x=|#6F`qL}^Eq|3s`B%f^osbr z1_PTg{6#Fuh*@osA3j+I8u&=%h+4+tBa4=pCK{Y77N-v3{4<)91`?*ymCM`VHjT%= zS!o#Da!YY54Eo*1^`(jpGvtXu%d|MV3I`SR^L#@2&!%*m1*1NCqb(0-6u|KKQf!Ei zZ)2s3hE%M2IeB^CnQ@|BCmryIAn;ie!x1v3VJjNc9}oww&Xv|I*tfv~zNj zD&{I!;FCoQFyza02Fn=%arx-Vm^0{&nExG@#!FTOh5i<6zxUlu#Mz<>S3V zb^Molu+DW#pUr%%4K?E4V@$~FAc z=skro9^eC{^o+_UlO6Y}Phb1W30&@OYV=zwb&ZTpoiHz1KN0(NoEpP=md-3R`3-MU zS(R5gYxD?Coi>0+i3oG)+isy!sqq>s>EkW4=a`<$o?=Vn-`M>zjUHy&E!ms;`Xt>T5t`(^_pxoSMO)KGVy++Ww>YGAa~C>y0h$7ka0-b@>tn7jQg~a>Myyhq0zU8tl+l@!2>qI0Y3ncPim_;O5X#~G4+s321LsPt3xn3Zi8vo zj5bx2NWgEl!VtWDu*p`HgPsbm?Fv{LF}8sFPk_Mc`nM6)14eFFUJYyHuYRtv13Bw$ zVP6^VUd)4%W(I~>rfeV;%Y@Q3)K?g}p4C#i*~1FmS;ab%e~pr2{z#RUdlM50(6j$ZPqElE2rHD8J{#e3* z6wGMWhl%8>YN=-7jH%tX_x_lAEMFTkAA~HQM zK5lN-{XU`P23I@kwtA@_H`4SPPr2*b_LCOO^A*^sYT$?VF0C-@)whD_o>!LNX96!Qwp#d6CWyhE^z458+%Yz6> zwSC1T>nQ8)Wa_xM5Hw2L_2xq{WAgW?-6{2~F0C73tBz!6CvV`By}j_n?!x_q#v8jH z5poT3!=b{Mth})0M3b+w4_><)i4yj1ta4=K=9@e4>2)V0z^ChhL*>x2jC~Ur!eqQ9 zJr;b${%|;SiBh%s+_T~RIkzJstgL*<{|)(DbX3u_#Sc~@yGa5SwR+eS^>j zy`&|`FxK3BJT2E4DFaNgv+HW=DL$m{cT7ti)Qka6e31?1^rreD8ZRoXH*1N6>>Ddz z`SHVvJj2un29R2&mK$1Zc1ELso=bma)d?BGmwdDF)>4loxrv4h-l{81Z=*0_vWIf* zFc^D7d>5PTu)7-qDaBrNZ1Z=n72Q;A^A$1ciIgg0q!`6K>AP@`Wj##Y=U9uZBG`yY zcnFUh?i>r248;Nu+S+JLMNa&6)7LO<#Xade@sDM%S1+B6@BqA^_s*9Bx{IdqBzPYE&sb0g?UOu4jG_u?N>nBrUbLb|RHPyT#tkBGk=)0< zc!6%`49r*9)CaY7zC3Qemc@sSd>B4a{RfzA^1+sjcmWNjKQ3EG9Y~XFhq{pJey9f+ zkfnV4xR8*QgzqY-!!H*`Ur~>sv)?*lVn>mRj&ucc@R;QoiKl@`^r6^0^wVM~`Thdz z=!B0O-7rUkXRV;ZqDJ~J0rm${@F0|F*-mjNKU*n5M6}WF{$Wxzch-TzV0Q#qYnHwW zTz{MB@6@o?aDN4x5k^lO&q;r}ldoVLruz#tLAKHpPm4Z@j9 zw!LqmhIO{G7EQ6L03ZNSpL}3(0<5ahV3!-GRgb8uztIe9{al;2+ChM7MC!qeh1X^# zW?U~6Y9d?d#iDUWJ1+%YHn7${Wi&n^wNyx)EQFNF9STms-fjnh9?T%}Yr*mjyXg+Y zgxYZKpJ~60>s&7=ze;stnzy^CwS(;)X05#`h! z{sJl9LQu$ektGLZpx?_3t|r4(zY0phVLUO@Ec66doAnvk?81g2N_^BnUFy~;X+v1M2n;y^iYy0;80pMtoJNE$7#!1esj>D@ehAh=y+KVmX5VL`k5b}L=rMrl+E~>3 zLQ~bgsD5O*W;IOLpe06pQ?E%$pJqAu1@I$V;r)GL2%=UkawPc7*+KfUz2qO92uVf~ z*K~L|6mamBK^;}pVK#D|YSF2yORDv)3(=kJ7SK%E&QU=e!(FEeTD}9<4*ikl*|J_|X)N1Kl(DvGETvk_6U@nb2gs`l9%F{E$OXU5@EU{&p!& zv!|iIfA^1^?Ox4TmbH|`cVc>g^+CJ^N*HRvUuef&FbJ?@u>Vk&X54|sE-m38x-3=t$rSYaA z^{t_JI6vw-26Kq*&;POgvMZzxX!>YZcUiVPY68Z$%x0s2%8jj>w;XE#)I}6A=~c}e+2b^zcD1e#3mg@dxDyX&73()yZtiu!?i&=hxYWV0oUI6BzRc2Vl2yeN<2tQ z<*LaFztxBq_m>L})c?w6lqrcvY!Wg%ew zX-?#y_1&L@HZ=20qz5>V#&}oG@m0qemp6a662uff;f9n=%h%FVq&mw)pgLX}Smyu~ zQv0uW<&bNds32XuuI(;eJC`RbVO3*PH$%OaXL?ui2f}3-$LEC99+mkQ@ea6uR#Ipn zXgO1`jz2(C*Gw7(_)iz&pmD%^LhqNGqJcgsTpbZS)ohr{e0JcEGzHlLKmug&PfBQ8 z+-gXar&*pL|N9lX-bHLSjW*MjV_HbObMo}fm=>J@l=p!aRu9D1YUDchf>Y*nA|Nd< z{2$3-RRhs*t?*)&h+K>go(k^v^aRdLgx-q0||cith-6s2icVZA8ra9d}G^55%nnEGdy!W zJnQ;~)IK)qi-qLbu*zMeI+|a8o>{x6Vk|4)2(hbi>bO8@Y6WPRnuyG%>lU!txk}<# zlf;4OanpR3TMKiCKn$;s!Wj9XX@xX4Zq~^u4vP7So0n@Z?w8M|>o{C?UbJm!bbj>R zUva7FS%o8y`~;mIUe!^~R<_>FR-V}<-j>X*mh2L;9$TIK?JrYyUC+De!0E82;y$2H z6kxL>r85@<@Y%Xm&2P|pG-cL%6}Gn%xV>^+=x}y^jD9{&tO0?RI+HOG%M*rsW600T z&EAiPmmhB_UDiVbV%^p@YCm4n3dbo1M_(*>nJ?zd+^pzt!<|;%c-1859&g?{m<`T+ zS~Dx7vd_64UaYs|#oc)5vrhxz?89{;dgPYvI-9OIfs;C0nQKghWW}s0Eyo=V`|qb_ z%O&pI5?hqqX%>+}S?RcKaTIk=+*XFAHxp}pA=h_2rQN@e2QL^|)`ktXh`euIKLg)( zbzYdV5Rgc8616nl0L;i?(+--ZkM2lrJl0a@-gc%Q+)Ew|HklcprgO-=b%n)A6_Jaz zyHM{9z*H#$r}VSiyk&UZ^cpMWlpsLau7P&D>&{NC`}uiMO`T>|?di?%w&;(sfz=Sq z+6^Xho+h2F$L<_F&ziY;_Lwam-|*>4Nsm99GL)QWHKiP4V+eFJj;2hWYj2xvGMz2I z@6K$iHoYGYwmyuIQYe*@05_9k*B>7$a&GN%z}-VfnPSH!D*lS4u%-6R>u?<}7z(?$ zIpny7k&*8T1`TYjl$wA-B)p7>;+PkKSxSVCfa1rUGwNA?OYEG-?c?8iwlOHxhRZcBQ?S>)%` zDBF(}dYde*j7>E!K4;77D9SC3;tC`NAT#hc4bf|w84il_vtc&V*og$4{F2xj-4gq1 zbE4?CIUl)ia!#4&bSq@G7tJfb!w!2bJS$SYlf>#rICg0>lw$^9lE0%tkM53s|7MfJ zs{Wh(Ir2F`KV!yDtVWN^V119oNOwrq_AXM6?mlK|v%{2OMds=dP2wFO!84O<1$1Py zj2IZYTy*kxi(8(^H#5l>l;aM|-ezxXo4?H3X7W#Tf1I7A|7{1nF6mZj-9UWP#b7JYTa** zUCboATi;5jvnUDTu%WiFcfT0x0lk9G2WtHkyk9nkzFxw zDR|Fjlwu2nRC0APbVO2kp!DEc$wHR1Ht+AwmUp%?D`R2v!wIczY=vjZ!0;_X`Tfq@ zO(pl)$2LIroQiG9TPUsfVY6@53lBXQ-95jlp7*E9&e>asw)~cLXV7^< z-lcW&kjqh*f9;1o8ORf`GkeYLUWeairQzhYf1tXUO|&IOb0Wca?YW!Uaq>KLiCV6) zC1mOS{q9mDIx6}yFe;f3I8Y-0kU8++X6p3GyqR0OY4aoS5M6(G^-DJ94Zts^azAUP zMLfXO`cRO&;aZhuE1*SGSvp6hscr;=}qs%Di_ko%MqZvdD3;q!2b zWu(Y*Dw$kO7qD`Y-q<@N_5{$Yf99!e(IStO4!%BZv^IFgU#p)0wtYXt&K|@ztf8K` z@MOp1ln*A<_jR3#LfG2kQ+%)mw5^_o&F(Xj8z8VR@+VRPq}TZu6Q%$RG67+I(+xzsaUXYQXlm4@1E3z;fky z=n7=4b_F`195~grthaa(rlVl-r@4K&w6iHys}^reGDMEH?|ENi@jbAFt_@H>2Wev# zuN59U$=sSl*yu#b^02tnRfZddf1acR-;USVfxLDr!OWMy_FlkE6<|D1I{tjMs@~cFmpB zRzL%W6tDED`<0<|RnAAh>Gn6R-B!kG>aOMbmxbD)S8MSZ}jYbwe{ z=B^-<=u*q3%VD#T#>bqu8Jq96a^aHU3KV%ZWwo=m?~{J$Z!e{de&+D=#cc+^)4A_t z{CcfheLvhH==Ui||k#ENREzH8Io^UA>!V!(TBcgp&A4@qb%`S1O>=Q=NTeZ3Fl5Yz>y zOVDg7nM#TtYrSjNUa!}?F1)P3$dslM06y1>Mf-&>^wf&m zwbrXB755u}!VtLzk-NYAn&XojMd_^S)qLEQ52>YN1wT3_>Vk2JX*c^5qVcxJECsO? z6yS;V|2R{cpl! zU$U;iDcVUe4m*KN(Q0^LVxnW1KKg9&>XK#bQ>t2+`bTl~hR^z2{deK$-QpoEqwB3^ z-_<9cJzQP6HQZo@aC(Q}#qwa8Z%mr{neqYQBs1>F!T|iwWQLK(2X?_~USXx^M{R zgTJEmy3db5e^a-Zr~uhrvy$sdqakYoZ;QywFUe@;(2+gBwK1%S58#KznXNd(D$i3O z?|EK??sbT$0~ZFP#`3tf{~4Rz?Cn6J`_J+z#X;WsXaPWSawp&Z%7g%H zE>WqnEEIB1C8sv}mqjB(IRx=Xh^!P~tKWhHXI2z9~{gJbhmoN@YOc?8B-msGf6LHzg{Nb83a|*UNPTtqrnf z*&!)|hx^zHs0@SdtC7B8LHXGjH>(O)M{UAD`Oyom!@0ptM^PnT1%25lvIW^3dq<5R zpe2aTFc@iCc7+2hY+BSP<(IaIBCwo1tc1q-D@6Zo%`Xn(=BBG4^j}P3@bRmqi{d*B zh4kLKO1Ti6yRr=+`>2c@oU`stUKIImoQtlUIM!wO(Nh>%)M~>49$Yizmlv2{rFc)k zFM%bp9Z>6-;3}^O;hFL&O%ddfJhZb&&=WcOn&_T=BH-+w6&$S6+u8)l@wEbU4r85< z7Pt;2S_g-L)%h#0W?foQK!G(~(P4*y3fEv%6UvVPZ-)ldfK0{&jT1lIR60W76a;@@ zKKS?QDzIuBqQ~{+nkQq3f-DI&V;$n3V+TUcIJ{(Ud&KQff^``Gfjw5jLun;&GkU&* z>^1XA;=jEZsI1_K05t)8R1uwKaG<}~uMsi9oH1vHUT0Wbx*`ZbTcXq_ zQE~$w5O~rr6`2GXN@bcSKAB3OSzy59IheslYG0iM>8}qD3n~mUfP=3^1|zf{rH!fX zC-H#56X^edC*J5Q*fCk0&=Lhk%Mjqya*)U|S>KKFL6cDPkG;aY8(%ON+5VZ2OkQRZ zCO)-%9Xdfe=X^C7-rx@u2jMAl#wHs78&Ao==ts(00Dje(W|<;Y16gO|b;b3d?Og=W z*yotZ{745`*8Q$=Nd`Vp>$(!j0{{{U@8@Yj|z7G45CAzn++z;9_|lL zx+E=0?1V%!0CgDipwwSMFV?;Xlee#{!~XME*3Nbf$Yiz}`-iR2g0K~;Dh^=gKk}$s zQ-aLa+oaF0{YdUrfa7&g+YZHl!|rqp&`N+Q4VUKnDm;1V5L57!3VA88q$>g!zJ#U)Cb(s^4OxsG9Ae_7IClNyz}Q zb*N}OJM_bvp;XNv%H(eMYRA^aPLu4w591ITiHcE>n$eq4xT2zQ_8G;8;{E%wR0D}$ zf+$1E2pG9|TwK_&=5Rx3B%<~z7_b_AI$9QT1zraM8N8B)`ut23!+|W%lzu5C_K6Dv zh}eMjuZZa42>5Eo=p(1XsGk{uRVVOhB?7O^p5zTuTfGkwo)u zK?}-)(z_fhO$T%2yjH%y`y*E;kV0K$%IY{sEK&x7J0V4cK+BA?RQXmNrAaqW zYB>0pI!wk^WI}6J6AF0`@s%r|I9B$*M0+)@F^?J69H(l&!rY5w@WSATtxI*F1wj#} z*`zWd84Yy;r1s={h_^vG#MAVDRMAk6l0o4}1e#PRlR=0AXT$>hP$6vKs#NVKgr9!| zgu*aRG90MKXpKxMywb1ww;8S!IRg0q`y|S{0#5#EVBhB!JaA2T}(A4%Wh%&im zS7=tBff<70BA|UGXjAhqc($a$IR$$*?AyUb+0W z1*$|d1`x&u36)$YbHD|HsSJ5H&+L4@nk!10v-%7)OU&CazI?MZ)nr(F9Nw|XL6Fij zIi_ZA!QtJl1?e?hFeU%tVdJ|kY_hhB^fpH370j?Z*X6<<-~m@pAAxUAu8^lL5tT8$%AQ(8m#V$c#|aPfyjg-W zxAT@;9Yr3tvQ^q#CZ2{78{69%c4(DQp_iS{7oaTPyil-q>GUmzbwcU16J)7=cJ4&Q zOEb5RHg(okPQ4Aa*Ny;&gX20hU;?FgSyPAEIsf0m*2i03yWc;wE}vda2MIXNOm%E; zuLAMDdmJRTz4YnGU#!|arm`TL3>G5q7S#@JbhhV_o zk_8F7S(&lTxfJIcJy1Hu^eM~5-7TC>G`IXj8`9^R;3}6?k{tG_VwB}%0JhCezSfRd zXcn93GkEv$&Mf9Lo|$%0Q}WyNUn;gqPo5WGoW_na973CsTiPI!_40(7nxkA}*jW*t zKD~}HcDXNv6>*C|EIp|HNV(2UatPh3^l^;LOLr16EpU^p)JCyUQAc2k(JrJSQdUG4cgL5`0p$EeUB!6YlyL|C9!@SRMyJ^*4#~nExHj626 z>*S4f=8OOLI9|j3-^X$B8=!GD9+?Nh(^;I3^R?&F5_jF7!}f%wjlYW$dg7o<$)9!( zNHC~{ML-!e*Ggz4W=9#DG4aOJb|1zVZ~d1PD}TAmE8Mwm{w?P@(RQ;gsGPom*XE-r zrG+ph_1wEz_MH1qbS=@92xwax$D;e#8qe^S z=5-}#|J}h2WNcgV#%cgs-g<0$>9vtN#)RM>lPIRhQ}FK55%F42F?n$7VoZ6cIg1>9G(Th;KM|Fq1Kig|0D<&)jOc(gdF ze5!W<9{oN=h*^JOby-S6iTG>OB_HKN(Q0`(#_9qTH%KEI>O(0(F63gVxU@4X)x0cz zK#&I6cuTWOz~*kd3-EIoI%|qQvN6kRHeQ{rHiMI00psUQyS?}XD0WJMjs6xGMkNpH ziVVBK2McahogZV@W6eHncFkve=UbO`4eboTcHbuX%gwX7wGHPE;M4+B@Yv*K@l^5a zmSfdcvF>)bj>*e7E?i#1vLyT;;4_NXgJw>;lo>v`2pYCl%}-P))A*r?UJgP3%i z#=Mx&xsO{?z9{K()b3K@jj_D#{BFUW;L0~P5fE>q={6Vu$krY5BHS%__pyq832g-0 zI_Oj!>QQ#pZQ|K%vQw=zWn)_Ln>`N6Ja3FA&MIZi6gsmh&sGMx4+T-4yUyJsPk9_3 zcG=RLwqJaIq`UOu-`$dTi6n4m@2V=k8Q?u%RW|$m!6xJ7WBoeu){=R;nps&~-@%@p zH}MKx*qU4Ic)cH!c5^zBXq$cejI|4lsjl<1q`r7w04gtczCDI=Zm-VO(dDd-p1uvN zpqC^2%9Y7;&p+!LbDudzpFeqfjdIq`wfUCP$fu8dTsGI>%b)Rjo9dTmuBP+Nc?3Lv zq!&L@tfK+b(z5xwcwk(*a;?3Pi{9a%ulJVU7K_(i85*qV)8ikw_ed(1M`gq^))*C5 znb#0~laaoA<>#N5dq7Wl+%Vg$$=7{1B4I%{;GTd%vtvQrF#{a{YB*nKAfC+Y)lGF(x z{lj>`9xpC~1(CWb}V6f6GmI@g7wzd0(256WG$+6kZpTT21&0;B^O zS!}j{aeOu0m1NJz4kl;+3Nb0)*Ra_0g0aeb9F8L2x+9Y1FW_60M9Pn9wU?PnElIw( zkDniwJ`%#c3v`y*j252+Ud#B|Ea3f>v6UN%? z@ZMX!WG5iou@K!Kw%moZDrpW*J{2*rj;Wpqjh}E_J^j;5-Iyc=fYf z#K|9Smtt4`X^hYt95Q^`&KXgVA4s)}aH?h5;G=JhuAzU&zx^DcmXg8EG|FvClp*4u zp_28Wc}%JgANX4%3M@DYm2$@*h%#+21Y_Ga>wPzlB(%qXpk>Lo{L2}EwxCj0)OefQ zw@Y5&P8zofso3pB@-yn5lKebn zRXbXp)yTDv#n1OvPXwLuGC#y2>Uw?}>ROETaHRBdM0tz5gS$gpK(E3rF3)siN<+|V zk<;IX(pnkOG}+sRS{1=1fytM-gj$V3<qlUj?^ATadafX_ zYIaiVU3GtU%_Bf3c#I?9&sU5+8B{_03idRA)ilndG4{Pxm#^JNkARj>U|EbEJ)Oo! z&kq=7Xe_Np@7N`6g;fo=lPfyTnw#`-I%UV&S$lL_0uGj9l})#07Q89Eq^)(6=|1{w zxk_Fs6 zyQ-uSLpv`kR@it8<{-H;iL3hpogoDFYL<0!$?woTC%ZAF(8c}FO=%&VX~WoU=S97-aG4N$*0NO zn%94jT88Qhls7nac64L$DF(%$=T{_=CDQJkYj|Cw3~EqK#Eyh*UV*pFjG_DJV3Cp? zxGw1jXL&M8Yu14NSZLbVwv!7Ufvie8d7q$_1qL5b`9FLdP?x0rfnHZ8Ef`9gv2-AS z{|M%I(GF2R6%U_Kj^)2&PlS1&kd!~)|HXYg3@v>sRU_Q9g(?m_y`te&vi`lg=%#Dk zn{}c}JzOh#HQFT~;?$0cyPG$Ffc)6~qfghh8AkO4`sJC#^z6bf!&Xi%6<Q+#Rj}i%)Bme6X z3k_wOje&qsWBT*-PL>L;$$8sfgTFu0XQc}z?o;F{xIbvP-2SShW(50ZMnfPL{(oG( zV|Zjy)9*dOBokW`O+2w}Ozcc-+h)hMIyNV^ZQHifvGL}ebt^iIhP=cqR?C zj6`l@#j+C2$$&Pnec&slzwrtzOzRmH@Ml~YRw-llYdn^Jw-#ISF2{WG+&*?Y6V1zo%yEiLKN=p$Z&a0dUP=B zw}}wMs+$bYb_pZ^x}Z|}i_Y%Tv{H*?9|Q{g#vLC8GpVv+WoaYME?2=Cde(;3@5C|< zCpXF)SM%dE?-NL9<55)Js9bpI+4HBi;D#w<1e6f4=0hNUu{382TgVLX4L3r|)4pIZ zFx{BD55wmYA&IGnonN)EE$B;>%3S|>;3OnXmQJI#eBus}f6qMYzuJ++;;X)Kj?zG!Q2Vx7wA8Q|o}deJ04G$}tA&S=uX!;a6LMgOSdz=Y^> zgWlX=@w+f{o7@8uU$RGEv8FLn7BMAvHEC6W2_n(-5h2QRikFHq*-;0KOH`(pa`2}Z z+#=alxJxOZX=4jjJ3l~er$nkX>D4iY&H+60Ukrk`4e6Q(Ew*GJUCGs@lC`bT*_E_xT7VW<);OU(t| zEy%~*?0ojh3YcxLJZI0_JGlrGm(W=92iy!5OA;x-Z&c&kM2k1lq)lh3%zdOD3EOBt zs!f3kFOAcAm-rb=j|bmu7+17|YcSJ9mTUzdSE5RJZUqYiC%#{m!??pdmRr7JaTF-N z#IHt)IM#2hPM7=U9Q0zd-P7S}0%K}@7x{T%|3lqmir<*(4L_z*z{U0AOx!&IgP<@X^YUX5K3|_s4 zp%9h4#fAVc-?mRvj1Ph=@V?Le1cZJQZbdXRN1g`h2#-*07H^!ZHo7^E> zS`loMyOKart?8iJzl3r}co*MrI!WKXy*bZ$sO z{4OVm$7|dju|YgwvNufV0XrIyB{Z5Jmycs-$r^?KHHX>@lokJq&YIm(_9*!3&8Pqk zD79v-^7_C|Qa{V`4rquiSSeoszRS7ymVhusT{Ag(bu4&m4c*sM6xdat^+^U6GlkIJ9Q$*{8!an7o!sg|UicwG(Ch>BZ;vZ|kP@i%AfQ)Q?;ah%6kq|88TD z!QC7V-=F5dcCU%m(`GX|;HpEb*iwm=q=C8Ib+TR31plk4Mam*oup4Cas-3-1Nx6Pw zPC!i)Vx700^fcO6SeO{JNKQXC{-a$q?gjr7K0(M?tVkWY^5C8c!?yfmx~t8I zPMT=}KVP#-L(PNlj>WwRAcrN{{zGXt>C`Z+*lB|KjaSwWK)k0rJy=ANHpKD`0HR7Q3xJ)07)_HVssZCDS0U4x-DeoWye=3 zF}60@6Xc2I8*!J~!k2}`C2UVjS%I1%oC8;X)YbpEIz|6X?*FAh*jcyDn&p30kI%{RUbS+KR|DAej3MuQazoCd5&+E*S!?6ki3U(sl)Zng z=#X}gc_DPHa46Z@#6G4y5%kY^{_j=KzAY41g?yh(OGx(u0SPc)sIEk zGyO#ysBd?z%ADD=3a8S~uKjjO3o-mYJBQ=E7X;XuA6TBM1C~snIb-vBH0`m!?B?;x zAziX26X{r2vtXlLJr)32C((2O|1RVB=(DAcqfUN4c9X!`5a9+To1b$2x%Hsl^T_-{ zPQwtAs@>!GG@p3 zQIJ|c_7mO@^6QNXpyafYE4EYG59)gs(q2mW_w|-DdvWzd;Kh8BqU({L*X^;~03SJT z75N| zUVVm$4UP^~DFv~Bm4^EHzj*1P&@KFD_lLv9!bX#GTBuV$Nm;$`HwZgFp4i>WQKRkP zsgnfxC#8uj1y&^v0RM_Q-_|YwpRZSQNJGy@eZbG_!>8M~J`8qxrbB>nyg)5HS7>*# zmh3!WP4$QO`P?e8S3^1%q&P0p^Kh`&enVQKq?jZ`R!kuPQx=f}Pi4aF*ClkKYi-MX zBlk@j*0+ZH)w7Rb%d_9AA`=|)Ml5dGGoyq#9P{AVAsXMBzz}1Ft8apZX_3E&X#Dzb zgqgqfC<$_{uRGu+j3Ccvu#MgHVfJ(VVhJu`XFXP@q9Otb)d)=8ZlcDGYm=vxw&>1m zZ^6(g=l}=CnX}H1O~%SRiOS9&Zmok-k&c>-faajW!Kjn%dY%?8#LFArTWd~37{q?@ z5CinA%dcWidP4P=_S1?Bm+C=7jYNytnGuI>t_`Wyls#rX)majd@*8*&6=VlIbx-RB zEJa*bcDUXjbEhq5$cD7Qrk?aEvfMbO#J?SFf`DEzcAJ7B`qROvGP3$NPpa~S9ZpF7 z;^76zkpoIZdG}k%pA{`H7gQl*wmdqzoL86B2hP>4a=5;(<`8y2o+3qejYUob2j?55 zaQTAkUo{ZAX!^upD`c6X(Me+ZtVD4E2m|$C3`GdOn&Z$8KU6jutbKnUAyzs-)D-2( z@B*r+q1z#RsAV$BDID!=wK(5Qz`J5$+Eor>CuiUWaqd6WIkm6`ct69L2&5PKo1I!8 z-GesNsuXIgb1hAs?C2-?ZQolIe`V=l75%N%mbnXTIia>F0{T?aBDc@+;NHXjIpB5| z;CsI;iON%c*`x>IKao5?wet)Q01UUHsR32cn@?t=_phjqH0KjZw2k9j13}$ z6R$4oTAS##0~3nga5`YQjHmYR#^P`NPR|$#?ywDS`)=8>NV7rt2N0YU)fS$$D}W;m z-xq+|Bu?A2kdIn4Cf!!{y=Tx(hf3qei?YANMny3361Ct>q)b*W9a7%g@Q^BM4R&<= zs1}t=Db(srz%Y+gf^#fifA+rWxz$&yhEAvZ$YFeC<`31e^xuAI18I4MJQr-k-PSkV zM(7hav@-~MYt6~pD6t94LZmX-6DZKuO*}u3bR^^8q$g#eD#U73t(cc$d>bLHH2;CO}#MUNWy&uh@G5Xj^;t1nMuK z(SZ#CV;9gm!F5%D@{4HofZ9&FwoU>zKgyT!9BeO^Asv7DX-Fx8HLrIcEGP=^XoK5Q zVWotqW|sgb((;wA&t}ity(WI2*9})S00^lqdlNQyklOazoD`A%+mBpY#3)c=m)N=p zjds_|)WC2ANpPmI!9~x3u0Lwfz*H+36f*hW;HAJs1UP0FoF($~>kp)yTM@ zS#Lq|UUVO3fl!GP#WK+gTW;*{ai_>RVW=`a1iUsMmbVnU+I;EfA1mOpP@>swJZT$NK{L zq;b-r=@RB`op>xcz>Jfk5cOep3Op? zO_q4kR*a!&Q(CfU$AnOxHPuUPkzCZ&_pquZXW1OD72V>MVnoobol%6^3LQKk{z7)9UZctQwf@+e8zu3~E)Cqe z8-3z2;>Rc}p+Gq4jh!S+6&HIYZ#Nm0NPhhLCE2CcTftEVz7FkBBp7HE!FP#{!%=S~ z_R|N_2BkCzfJ2}l*3dB4SSCyx88(6$wP)w7W2tJciszSzRVkm!A*5#PESm0xfZz7P zf=5mO31MXsBlh=nw$}{=1!z%xA~XMRbBS{ z#Kr3g4;E#FOk+`nsYTBku%x49qqORIQ}xP-L18Q|5ogG}U75d43kfd^CouX9WOagx zLIz2aLD!*apG)kzpZ6QknB4!U-ydLa@#@sfjicg4Ik2iy5>)p`s3}S%K4HApB`o$R zu4;+_m7(cFN(sfrZ9Y7#j5^+byb9!K7z;RHOTYLfN4Lox;`^k5n#i=36*UuyDU;@9~ofo^dFzP_(ukS2mK?1H(h`ktPw8r(ryU6KU&^vc+4=In{Vw@ z{YSRJYxB!GUcqf+Al}D;uSTKS?z$j5qa0XO>fylE_;jlx>r@?pWG3+$lZ195>=kRA zpsW&ZaKv!W;R6|+WP1;J zsL+4!hKd3n^mUjf!T!(990cAMmt|CMI!4PVoxSLkW>l9UilThMmMfUbGVb8E<8xPQ z<7egQ$Pa*$qY=uAk+s;6BD5YI@eZ}bIfKRJKriwISO`nMJC#Z-$RmjXB}_6*CzbdV z3VLyDH4*u%!we5dfCszVNkD`w;)AoVX$?9@Gy^vu;h(|vJ);~OO${`f3auQ*B3Wyc zUdMGLVp1fRj6E~{WbDY`F*%0aJN2e64*|yxj&!!8sl$-7VB0R4i;#CqBbFO6qR3zFSHr}vD8umb zF|&JsZj?|&-;H^_{xM$%l0pu`?T}?itY7+bMDPshb2J1vV=(hrf2F}2A{zmI{{$5* zxG%Zz0E*;^Fp?J>S97xe`1@okL%Sn+h9vW5hG7imGnZ-ai{ttA;{V~F zP)`PGFEo>h%e*XbC-@N4F&7Ds#-8tdhh5egsu%zA=p7~P5u-QD^Ab=E8q%siwehBn z_8y%qMe*v-t>c)YCYfcOmqy!7ii1JGMyI52d*#ZL;TnHEcZ!@4N_z@95rE_{fl2>| z7#-*?tVVc!HXUuJivR5*-F2%81=yZ4Pu2~m%$i07&*h5WZ~URmdUyDG#{bd$dI5ZY zdcB+gWUhSjecW7iDB0fHN_yum;~oUD>wDmyq-Jk73uIEHwCb2fM0)<3OTY$%DMWd0 z-i)C+#4=q>8@p{DP$ReBbF96V6%g1p3gjlnuDWoC&Pa&NI=eFU9q8qT)gran&Cg(; zwHmh%4^788hxC|3*Es1z)m?N&;X{{Mc|kLtjn)KMcHuG?vK& z6K>V6utPGOK#t3s$F|s-^tO1S!!MjvN?EQ8WTyQ%^s4dC=11fc`66dDP*P$1>6o9R zV#|AvDfhiRyC~G`UQ^U#f`i=tf_8=s337<+B2jj@n$XjjB zm?<&qEU6~@bw35QOv`jul-MP4)E$2&Gkty4Kh;xQ^s2&29~N^(%T99$RlhhEpi)r` zWX`haI2I&{R;0ZF99)2gy5qa~33`mIP0f=vf=rFQ?eM6CA|x5?%^-4kQ^D^%Z+aqX zImZpM)@{>}gvYha{x8%0C-ohiyOH?;s){|v^`k@b1ZfN@A>{BT3sr;B0m^IyY1Nf@ z+|3VdjD}Pi3%5*M2d?d2PA|r=T4u03%1##e*wmKdfXSKCKYV~_IT0MwkYc3d89Qmg zjNuEEdfsK1wLSvT*Geml2#Ebj#1QLle+ud-e(rO(k=OOQ?*;Ot?S*6wq2sSGc2qAW z_FJb$%U)Zf{mm4+{G6PV6R5wS%Q1<`o{jyDg2WlkjNgb|JpS{tN;Zcy69C9Ds_Is%6Nud9RIk#Wkg@nr@x*2OnZmYmQi;cV9OSw^In! zU{^otKK0=f6jRHi!`~UDdGn2MS^)v)q2N(x5KG&5H)i1+d)OI-$SMD0l4hn9=t}rQ zfK5s5o?cQEbY(d;kDc+m&3H<<%6xjq}Ea7AQtUOQ;R+;H1@DNqnljh}N;I;*9`8Fmbj|0oWZ9=Mym`KWpOySE70wV5p z4#gSZ5h_gi?bgo0`4+k5%|z|}ZVoE9tm^pU&PSN@@!~xI8++09Ct~3)zvm2fS6Lj0 zb^drF3wHm^1;yA#6}(pi_p{~aL2}h-EB0YvvpPaFE@N~f#oe#k@q#+U-!^jrUg)kr z)5^1*v@?i~>UG%`LJAOPM`==gd4Uv=5#!1P&opgyf16>Q1+3QmI4@q}_Y_Y=B2pjv zKEI`wx?KVpZqd+znY(C*|4&)JmS)U)BZg15F5}d9p<5p?cnFz2s1vEVc>zCk@8yNd zePg_Ni4Xo4{CHv{vWd%ao%Zy3o#Fgvk!vk+0-q36u`gJ3r{WX62AP3$&)WN){i8X> zAG>D@?vX2gJFnH$UqTLCPu{h?gCz#5&=^5qWtF(TgFj58;`BeqF1~2d*{)6iaZyN0 zVR+BNdQ4d|Li{9o&zIMO;*E4_vi*-@U03KIRCzDi?7ith(=ly&xj9a<=1_!Smij{2 zJ9@c(w8ojClk`2mGA7B2@dK3Og?^e^48W@*<4ac-gefs7L8(p`;R;ijzy!o_SBc!1 zfB`%ywf-5Wb0D&9$lC_Ak%>jK<+qhwX3~Djw%qewb9p?Q1v(V=hnQfC86r zFV^%dpg8(QP>NKp8p=b`OkfZ%*0%q=GU2`aQP-#qBVkE(er0pA+Jed_+72ScV$dMI zt5wE>c7J7aGu!&#-`5pgh=>GGQPvN2`5vE^E0Q|kp#Xk@XEmt&4qHASZ2ZzU<$yQM zYFLE9U57;wTG4VbBcxy~X_#xcjHagi3(K`MOUhLkcw3nx!ykO}pwD1S2;~Z5vWGu! zy?)Ry!h>#J*$869vVL*Le}2N}y?g#u-nTF&w8gX=7rtu4YS$N%GGqt9tS-Nwmam%5 z^~3En(+j59@u!hlAywp7>#*4ljz(D5BY41G55Pnl65Q-YAiz!OnYg5jY%!agngd?n z*Y2G~Vy8Ttf)$1`aEV5xp<*EYJv>8dBlV9C8cLq?&8rNwKQ0T1-@M@WTJLz?StIOx zzvLEwwp)IGtw@9lnAZX9g`(;fICW-ldo^HY!$K#e+C4e&0_UExPM>QLTj>`)>Sv98`B#X(nt18r zntmkQfnsGIOkE;rAvoK>7a7aN2@eChz+jcmPAK;*a`J{_HSs@aFDuSyH}(t(BfizU zTOP)nv=`-|Fu=@jtX)0>w;{L9_TMP1zH9F<1v1H|u0vEDk3$|d5E|bZD_^3&S{(S> zKhL%R8Ql9layQ#Zs)cnGulLitu1=Pm_X>Bh$WU3o3m(lYK$7t%jE2! z*{oSaQe8BB(!6}*H4J0$R=zrTbFxn9iL1l)Thtu61tKZ`&di;SZe|pFP{wFceF)ZaVs_Fa1%NODA{N#yo z?`jYn8Up~1|F5u3B%1BLNnC+cctox75{i&l!_kbkKfb|tw2-DAU zg`K(mZU@odUkEDFiSvHG?o0R}Bm|=f+1`Q*;ln-u2?w4paAKCfopuZu+ny5soa=Dv zeXfI}be_kCz~CiP>~ZGr3w2)}3OD=|gBq@LUTP*#T`vtz6}4r^qq;Uy-?S)mj26989-CckfnucT!|!MTtL@s zPB8$L7I|FuJir9!4qQzs7R3*Ah@9Bh(rX`~=N4d?w-*Oye=Z=MAYC)4v4 zF@e-0pk|OeKNH@s*6wpMs~J^R8;p|6{tsX%K~;9KsEV!%0sfPEz}qDc;`g26-kD*e z!zPw&Y^?8qNW!@ZQcfs$)3)|o`}M0lu}5^#X_h#FIw&Q-)_9Bc%pECbE!f-tP%in;3 z_-W66$5VU@bCLo!Tr;PZ^LpGX$ZPSKqgGQqOu-|0%TzMOpB2`EZ9e#!P@Y`Ttz@Fv zu5e!(^Oh%cak<)EU(mBJ1EXgDU%!#V7M8jAH$W?)Y0Rh}c>Fddi>)5;bLplf9#JVh zJ#(3R*P}O<12KiBJDEb00s!AD&G(qlX4bomjV9QHozAd;i|l*hrjLiaR8x=+v612N zPaR4I=db&(5qlHP)VVEOxJ{hLhjB)m`acPz3q#G73lmhv&Pa8mk4y&XJU6V6#H^}r zHt^nmSFguw?h2C`4%xgQsqLVMCSK4l$f+4F(W$2&NU7y1OwZQ%IRLtLq1k#-FZ~*= zhAVp)bBe*r8;+`ttm7go50vJ<5n-5B`JV7_zAnV4DgNY`+h*TWiMfUt_c+OD4ogu~ z5$PTq>U;kdsQx}=Ngp#{JK%8WHPWu|>_$7x)q+b1o9f3)Y#)*68B*W(@$m5*cIR^V3?PuM^te51F*Gs!dAnays z#U9%hiRop&na1}LNH&FRY8C_~#MNJy_cF&jsSRIQ1uv_Cvj9rb2z>w~WU6p)>qq1v z6(MVDb(l%ngyE?t+IO~Cmd*brb>bHK7HzeSro5l<_KneJAU&c(jsuA-d7e&(GF??f zJfu;-cIB5M^7?)x;4qLQ{=~#1)k5|bjw|Lv*CJBB5=*T(vN)M@Ey;9@(CdGvD|N++ zd$OVlnGvz*>@}$C&@d>ZUn3F1++0F>+=dp zR%hb~#@+_7|6}%3rb>t*_F`;vWv_C9;JZ|3?Y`Zo-Zf<>EoF5On zV_oYx#AI4s*F)^&6o+8{W)?R5&x@`+rtU;~%lcW1e8XvK(Bn)#ol-52+k!^bI zZ44*By5b(+NSf83@J9f8zVPFUf^hs^|A}#9NBz%#G@FFKjg>AI7{=vTh~S=~Pd^2_5fc&qwcnYM8d@~| zs)_jeW}-@YUV2^kR1O87?fij<#rM-wf53H3y+r?W<3?S|lRA65B$W;CEMbfY3r}>o zrsP>T^ySg6{TD(-ZsV1K##mi1_ax zz>0O`>g7ZCQ3%&AkL5;1cNvgZ$W?q!m>Ti=BLvbGkO#0fYER-lvo5L|X_Le5hD{{t z#M^OW^MEbZBflMO$J^pxF)P001yTw@i$K%sGM#yJ2G7M~g6&Z$y+*qKX|YYaL;}My zaqW@+?UHNkN*^1^lWngu`*(i<#FVu@VnFil6P--{FRqutD~AEzbf0AQ(9K-6BzHm} z5E1DM@(8EiHeQAfwWx%V)&jAvq*$3`^O zm-e%)lYfdKqZc>ATmJx4QRVjUhy<!sXX4i@3}FKE8xV9p@@D*E=dat1TJX8?W^^-%UR?>i)FC=p}$!N@5PUFL(G zpT1@n6@`4BuY+*z1Ps>BXBS|9!^$ELlbE6sYlVsc3of z=-GJS4bhV3k;`V`40r3KeCeHPg>wrg+()^HC%RM){#11jqUJ)xHev>8|HCG?-y#*Ld_n*9b?#6%{nM)1 zTU_OPg)qG4H^an`z!^t`<(sZ8z?#?RH%VK-E69XYD0TkL)_`njh6?J!kYzD_|C`V@ zIlmXs=K&3i^7DEqhX3OZE$*Gg#;0R$HE+=;2l|+ZEi=E1yJAN{Y3IGGDf^@I`3l(e zfK~*!y6)ThxE?DHFq{^MDH^)*TxeNS&OV_qkW+;aN2iwD&Tt zj}MjCtPKknx5|dtxJc`Kk2BIzxl5!zFJqFK9IN^wXowdc`UIu9wcASKQ!)i#)Mil= zVUu9PsKTki1k^&so>^r0sP0-)m!_Xx6pv>3I6&`cPTw`!j8GgVN43T)XKJRi#g{8l zHgifN|6+CRBi|VQe}%^aRA{~qi>8pa zs1y<+Sj&u9mNkzswUutJz=~rR2z%_m4)r#7Q`aoG!|_SVXm)zawJ3NrA=&YI{xE`a zmOs&m_9?Y!uPw<~Xf3Vn8c55NIKJw^n^#43XQ1eg^t=nsX6@YuXv(990BcxD$JH9O z|DbK!wH7Iyj&>Y2Wg|^pze69ws_W(|n`k2iQ*$h9_oVCIQ__mZ0aX+XwXUTe7`D+V z_-WIJc9#i7klm2)4SKFPkmvtS;zOdTChJzxv<==|t|@lNfel0_!HBv;Y))6xbcjmT z?B53eD@#OGqu=K3$;rFt1z6qJJI4!-fgK0I>ovO=`PqL~S9*G)G5C0AAV{Lq2!3Z1+DsrJ{yhl9S6TCICk33|W!1V56e4?e zJhF^r4C_}tLQ?b-G;TUx7IKpv3*7#F--<>tq&)iiw2u-Y!G zsntzjvy^Q8foAz{ue__Tm-?Coybfo1|Zpf4?dl-Y9laVXwd?y z-J&20$|E)(R-fqI(3|b9SNST1GrBUO<%1dQx5n4Nx`Y@ZTuu&)U|pz5BA@k)tGNm+ z2G@XgxQqnLVN4}D;h>EwrlBzyvBg0jzU8WIdk{?g_^~?zm5+?kVA7l{o_VgBTYh5% zCDC0AWJ(&UfVUV|^vVPT>P0K>+s-+YvlJPl#?@2nJuAAEj6;Yfx-s3F2Ubg)tnJO0 zHphzec*WTtYvr%h*@rpQANNsmKnNxRAVqDux3 zO{mN?vwy9N8yv8-zekC+bAa?qo#I(70QJZ>6`gr$FLIXDC{YE65kFTHhj{^?4PVxt z;rQ=srQ7~KTapgdpYR?D)4x}$Gr5FcFRFZLJk9Op6%)-4sv<@VcwPx?^MUB;1(*jN z$iP380OF&!Xr`D)f)vj`Jh0>4XP-k3j>cXU-@J2F{JZj5=iJQj{Tzr5Ilx^O1veug z57AaPx!`5G4k?enirQ!!%6yzks-qFH7H4*pRk_2JtGGW3oQJQ)&wi9B_CsVSlu2Ef z;G-rj64{&MquMSKQL>$>CAu~st|-wW=y0Z)0QR;@ogw4bd8QK2x2A5MsAUc0tp-k4(%e7-mY%D zQ0rg)Bz+<&7E)gg3U^E8)SHE#;J`?Cr3^C#q&rX|iSBy#O1L5;+KHO;nX<%f66S@4j2u^^G&7bA zw@TL*g2I)wB9rX}<7NVh@{{=e5DhrMH*I6B_zED@)}3wkN!8r*eb&71*%G}0&`b90 z20|hc4q3FdAQKxDN~Y%%ZfZXuYOMIZ?k0IxX*ajLUmd=oe4>!H=Do0scE%Y*{d%_ciVgO4m>i<(!A9bo@XK2wQ==yp9cvTZcG+3K-wRIgn|#MQ zbOXK&ci6hUrqa3v4N^zI#Jw0m?%u0ZjwQ><+;Q8Z<&tE^^QR>zUozw;CyYYBBZ{+x zLFkr%+)Dzl=_v7R@A8w8G>WM2G9;JG6X9nrVQzP-*5)rs!7 zz?;zGi6>O{9%-4&qYSo~i3XlY?<@F_U4oqEP(yVM3GT|6COzzq>Wt^#MusY@xYD0{^O^2>bGop3JL;P*d~?J=j!8qa7Y z(i@O8O6*`w?NYG`dIvIqA{&F>uZWd}as_@_K^{4#G3{uObr=->Wm`GiIFZ<1$x zs*H@NcxrP}PACrseI6dLQV}5l4kC{2{&OBmKKt$Zhs^xO-=+uw3D2bAOzthQUui-= z33N;2P=24}WH{qg0N!B!iv9u{`$4K_&oMhJQGG*B5{o_h70sG)8Hw`#a1v4w)efB5 z68R|ku`BukC54`vlErc2->Eo<@yuho^6j{o_>11O>fkuDj>7UOFdmDHbkD=G*R;8k zXlS*#P$lNv;p22-q1MwFG9_rtJ_HMbj85joE2R?+=10Ff0xa{K4u?_I!QGqc>pdMM zfocG{b$p4$o&@hk$de+!4xxR1@8f3l=c5uiJ}ISUJ$}b0hi$vilasD-p?8s)K(%OJ z`!jX?_6L(^&j+HoI%9d6v-N32cv(=TUT zuNtG*zrSir;f-~SZK4855l=63k_{ypbPQjm>HD=uJ?Ct!@}Tc?HosBZQFbJ7{^ zQ-&>-b=>$MhXX%3vnUGuIIN-cdUDr6QMkop?dm`+VSp~T3ylm8~^xG zSj2zdW;OMIqmx4bY)D#Ayq8pup@aK~%iO@AplXMWYTRL5m<4aPgN`Bq;8uTl1+V!`Ki$mcd@0>D-Z==xGat?<73+E<_pI{7KW zEf;n1`)ql&Ll-u6eY!F;ZY6n?Qg5(G}3cedCj7Rv(xCu9!Yc~`z|lH*60BnULWzL zN_i)CyFDtvLnw4~z$5?XUGdbX)qF))pPXv}3*1Pavk`(hXf9!AAIJTz3rJ=Zt5ay;d% zGge(TzIj4@25hK+bvvoWUp(DtKWiFYBm;B>APyS)M0fp~H1{ufqj>jJatGwaQh!73 zXJ%;rC-gYonsdZdsPEz9Z^JC)Hrk+*aow_8k!~K|x`oQsVW9_o1$ka0&ASRhb00~a z??(vz*7AHDv6`lBYRS>|>jYbPxGb3VO!!uEN!Q|5u1OPZ<(BEz5{Egf@m@%2iRmKL zcUOByTYR4fwso{PO$0yA+Q<|oe~O=!~TuG8n}gsE(zAvM1_Rj3C2TpGctA0{FH$hWTQPE@=Ka;emv6r zLE#Y6Fs!*E`@TOR%GF*6c}bRCmZEgrj^^&9K4H3E_Y-=JBt{c>J&leIWJf_i26B57 zBLj3}_6Cy%w(cqK@VZ&f02q4kvA;Hdz1D^DMzP+S4@PW#0OTS01Fn z??gX(ElUASo3VFXyO}s;?W3Vlp|a;qH}vY zn(f|$j9$is=*WsBdOHCSu^zgF|IMvBy;dvG+_djYt#?$b5w}m^*=^x^C>wF> z^<#u5p;gq|C8#N?`1DjRzEdxg)T=Z*8X|xiTgU?NuN|LI-< zhhTWEC+%YRl$kU_eZ^^CKKbzXXli6)`K0-N)RlRVZ_SkZok_=Ni z)9eK3c$CV$G@m<2C)@vyeKW?mBO|`WTUWJ~x45sZ`P!;0>zd0l!>jwd>jdH=Bs91J zg)(TJZ3_c|5}|ODe}C^1I6Ia^-n>EL0}9>ZO|Qz9n6bha!vUmMRCXSfs(ueIqxjzR zdt_G`x6m?z>)^mvop*kcQD3Oo2-IkSK6Zaf$enmT>Y z#Yh*js*CX|nFWNb26Kj{&Z?SP!eB?Z9uAo&1U~v$vKiu1lw0@Zm*W~%pxrnfPq0BJ z-Q2fhIo7O&x^oUFrd$YxnzQMIRSZV;x;{kpK2oS-G|*Qy>5N#Tcb1LqDZLi%YKLj# zZdf02!*1czT9@#xSftTw?=&I0m0d-&W^dho==*$LB?BHom`SdgH`yi`%${Df2fDA} zv<*Elv$8zz{k5q=>5UA7ufi2C4ve>5&S3SP4lW?`@y8G+XM}<-)*a7x{liZPMxzwg zdHKQWF))w^>p$Q8ric7ebKebY-i-m2o z2gvA-E`f1`=tO{nCX|6nz8K9{jn~Tl%EHUWM|_3zXiSz78{!ap9rUJXH|lVf{&KGIJ(nhg0@?(DD-DJh!G))(uG&3vVdTXlACVqfy`o4Fx+_{Ohz2F+8dUH+u z-=(kT=k9^hfegUwYT9(vO=H@UXx4N)8+iF#u_)7jah@K!mTeqm=N+bb)@zGq-}b^| zb76VWhT4|gy0+;`Y~#wZ(zdJpx=V67h-3?K*~bK4qo?W9(K2}2&YNOpRmHY&T%~=6 zlUc{KzYR!QgENIXDwb(EDZhM*;#@Z?Lj)GsrEs$tH&`c#gP+8gwm^Li<_c zXE`0Fwv?-&Iry7f@F#7ad75VC+N^FFAoxIIx6RA(4bxWlmqLes4@Wzm?#IEc<>bu` z)i2F@+E3HY>tVM%b^ID77Gz#=0fj#oPXP8*3kwvi8Smyeuyj7Da#~|(Lz^*mwm#wr zYj4;cE>-QBA8~S^BZmu+;-%vl97(F-FR@#Cy4Wtz#u%K_K=S?ovhEq`=r~EddR%w2 zN@MNZ3j5c=-BZmQO$Wp+OD9lW9#wIPSFVYBYpFP2KFl)moYJP}HY?*5H)_-YJUcJy zxNterb7!`s8)-(IMXB0!oI5FhHFj3r>%g6*9oukknGn3QFOCOXEA$MeY|ohx=xT2> zw{%+?6Eu=FHR{RjxetsRrZv~?f!0{jQajmK9_r#amp4YllR?`4M?=QsNN^#J!0*r2 zgG|P|EY0iS8 zKBcf;m^-u5`IgB|vxR7`%S`dC;qJ}QcAw2}Olr>6arVq7{sQzN**w*cMRlc$xQ#oo zV%pgyUqjuVz^B9~5$c1wicY)Cr(z{+5qpwX*CbzL2ES~CBWDV7z*qz1V_xhy$(4s8 za_E13R&y9r5ns-0bFq2oJF%IhriE=_Q+GdFRrm09{v~tP;+JBAYJvgU)U~kyD z=t)~{nb&sVm45fI^>m-GSw(l1sO}79MNo6seR+P=wG3ymZWQyiuJxPj z9D(BUEZ$=!^IRQ?VwIDtA2Ux!$SLT%!{wF(bpHNs#Fhr=pspcn6H_rgOVTyHsPmg# zH-*S_Pr9jW-gG-yG={#k;C2w7uY=Y7MjMDx5I8()XlBT=TfYEO_%Ezj$ zeY*d!T%vktBer>oN?jU0w*eA%+>u)~Z1qUCGy;#1r)Y9ks+JGj^{OT6A)m3#Y;nhY zUtL;ms8sZ6ufPp9Aet@xV`dqZ^m>2RMO z9_Qr#KdSyYypkr~0);1<*q+$d#I|irG~vWHI+!>UPHfw@ZBK05PVRos`M&4g^GA2@ zUHv@OT|ZQHSJzsL1kIQpR(sNHjXdo?HkMrIf=zjWr2ED>qvmGYoMvm; zt*FDaK~G;YF0bUM_rKfhPCo>Kb>-U97&551NY+>`>-)Hz8nbE~ zu3R4oeJ3@x3tM~&cXuVP+Ud^(R>&;9tsm-7!~TV0om*F@!Xb}sdM_K?6zVZa>0?tF zEDFEO+2k2uQ8M+z6ak;`!nud1|N96oK#6e-{9o!HU0D$I4{GOQ)sd55!E-4oEDl8f z^@=^Ca5@x1|L{)<)^l0jZk|sfDNN~D@rL;_kFztJe*||?FM0i*#hLkR2gS#S89AT1 zod12bA}ZQMCPLPM8qPZ>?)%K28VZD`C9ejH9-$-33p>V=Ge| z7$AM}U)_^%W7Z?F;Qy)7@R!E%pJJB$c;0R5<7|>R-nIMWO%GKfSpWixPWk<6BzJ`@ zs#4A_p|jKi#v}cvAkM-v;E?NJK!Ob@X*=H_Mhyu?4|q*`e(~08YRAPO7>zNG#**QK{_~@sPccnw(G^t3uHpfCgoCN-~i7?qNp!_(XJ8hy8u+gq(cG^>n)GN&NVC^>&FD@W_&KfMv> zWOr5^FPv-D?dm?{mH@>>uM@4z-Aa9fYwyewV^$yGkRdIz!@9@w>I5MNWEbkjo71NE zM0T{AvR`HuVJCFFIb}>`Etyv4vAUWR5tDK5IllIJQp@cMBIOx;$|kF5xKfj7Ruv9= z+LQS)>$?V0&E)@;?+diiIO;!`$lUfn%e^?YA~= zBM!-j-?*pLv0vjkdLt`Hx&`lEhZ!~H;ybez*UMY@G;Z~qQ=CJvGC9`r+j_$ZdU_L8 z2TJ89aWCJY8B>c7SY~n{&{maDu;B4EMkgw$D5QVL!d6oHA2-rg&lUB%USqv5!JGnOh^6~hxC#^ac?n7s?xb4kZYQqD&mqeOfS3pJ*M)qo<)vGCHWeO zCrY#(31bNx_KfPD34v#v_sJLjwRP!%yX~LP@5rCOz<{IQb3Ux?dg}WH(Twza;qe?) z?dRw*26Ubhj4B$OkU?;{=ZbMevUUgb=?Cl%swPfy)Wq7(q0=6@-Ox9#YOC5)qD(zqCP*>@*H0ELo9cdVKw(eh1eU`hC`_HH_$T8y<;v+ zotRF8|TAsE7+R3vCzw9ZJa_BK=z*3UN=rLHZ zDATdU4EQFqpB3z{T~GuD_JDF+F5`8EpOtalSdKP7L zHDe2PEmCQkD+iQ(pNk!a>6(^fr6;7=TB676;-wFgb~W={0Zx>EHhME+`q+Bc*3h6a z%L~bbw;8|_H%Pb5x&yR0U3!x5uxLV@u?I^o47L`Ps;p0zGcv`3hNJ-9)^R_#9w_mg zJazsl{kr61*47F5!Y{Hkv=gO1;?Uo0_QN3>kn&vd1`RGaCdMY)brJ}QF1TuTbxZm@ zlW!x5DbDpn!VuZH^;XlY=mTN8zX5At2y5Qg$1SC}2~*GM_F{5LpAskwi| z4wlF=`}N%=MCyZ!b<4mtc)=R#ZOgnTOnR;lIqJz8_@l=o`4liqqY~Eh%8dJ8{QOFR z6sVVTOx(zo3P-bfLu81LIpo{X^AuM81yY-)V~EE={9D0C(89UN@+Y`?k!4@a!dgBB znIdR$686%=CO~kyt@w2{2j0`j^4tQk1VVCaJ?tJ@QJ-um=TK!T^`a_^dkAW82sXC~ zPnvP<_tQU9OMurVD!o%lAC84)v@>~eE=~(?a{B?b@?H8kx{FeBJ!c{-GWkBkx+k4Oc&*rc++ieF z-pEoN89UzxxO}_J_>pr=^Y#2c6o}h3L}<(3<&|~g7yu%z3@$DvsPV&m;6&e}(+ea$ zrImC4bdlV`cubOQ6o95I3pMUL;yn7PAu(B$1n&-5rwl`|!-^P&gcX>p60NCs(28*8 zlE&Ck(T_vHr|1e&F*%PM5m zBWs0guaI_8pbRfmOiaDQx3?o_&(PanCw|F;eS^};yr*)GyTte+sBus+XXd^1h29Q9 z0`#e8OLBf1tNxm5S~`?$>lO^LCKapth>MpS7U0}ts zo)NKH6CY9L;JsaEqlIQvC2i;+dislC$Kf!DQq74VU@;0f5kBB8zBv0LBJeS?DK$D> zt|l@n6#07F_1B;eDK&Z$<$z^x5KEL!?;g%})0u3a!n3^AG3Tm&VG&~uHuOg((b^() zCskQKIfoj>G!bxv>FL443^+J*Aanrq6U0FF5vZ5O2AM|*Hvo!WwAydLQ<93RXD|(+ zN96DA7tR)5mK+d-&cN)ahxk-4Ny!#MLtGX&JizYHWCG5V5X3?(NDIC#E&U`ma|b4a z=6l7D=0rLv&7G(i(cF5F8^R)@SUK*s!{Eyg9lqm^Z8#psGkjBBq)&hf9jmioX-hU zVCN1b6+dWjv}WpTQ=k`z!6fTAj%&HoT%!wrTxgr(#jsKDe9f2bSrS|S5N3Zib z*ufD14J|qSMw#@r?IY5gdaAx@)57Lc^J69{&8@JVCk-(8xK84U!d74O%|ZB-hIql& ziPh}lK}bJ97u>`m-M>C^5M^8^(l$%EvD=xtA|qAWo7jE9^`7*an=eqQycx-5h_sOT z;Tp(7d2vE`*@}KTD?d7#&Ut)Vc~b7qt4HfoQPgPgX-bsEJ0{B2t-zIVw{?$iJB#cTh zPLzxVL%NIrk9AJe)8!IC*x98iLiqW-x{dG~uHk6wdqMBVJcE2 ze01yz%hL;=8bt8Kd30;{H;ldHwNDLGgnK#V7X6uo>xu~Q2Igi3x(3%Ep z7k?p?N(}IhqjrB$S1WV(Ik0(K+5Fb<^{9wXO5Km_1{HiV=tJAEWq7bpjmQ3si?S#e-4cCq+;+$U!jJ!f9o{)O_b?10+>y@(R)HrT?)p&((G$Xj{S|oznm;$6oxiDgysZSg$1e}rP(<>GyETIa zcm4>hX=p#%G+P2*y_+_bwwY!gwbw+|#0KcWpo3n#vl}0pH(t9uM*SuR}0h*SlLz0?<%TyZpLN>l}8@vDqZ`*x3HxCB|?Xb^HB)h}pwC zV?H$=?$FNuy*v{rtf#S6U88M_qvtYuwiCRlL*COl=bS5fWJ?-fDvPLGKV|dQwE&DS zC4c0H_#C`WVLtBr7KFc4h9EuB2q%d%6~ht8I{(V$X8orT?IUJSj9qv`XarHiax0?LU3U``VX*j#j>+wVN@c5bURUwurgQS@pYu z?&jz1sPkh+uF3{ltgv}9Qrly zd^T|aVWFgDXB~UHXkx5}wjxvIQH#qg%K%`>-R&W#1&@em9$AKK0c@bn16-Wvh9< z88ORm;ojL?kF+WHyz-vgkg){T$1xpnHFfPADpI`nNp4y76bCP8u$S;2X>#dk6^on8 zJP~C(SU#)<8>n_VAKSamQEK}VGQiB8xQ#S5FH8!12>;+P{^_cdDYh&t`Dd?s&YCgt zUBm{_zx3pLMRZuQb?KcN?u9zL9U?UQyLlP|O=vlC%w~N+Im`uVeoq>ZLt3lEQdS%= zhtc%~Nf~?%gqjlBvib#rbOg~aq!?l z^6^S`vl8q>Rc~yv#h_VvPD4VtywT+n$S=YO0X=Z7)8=a{-dlpJD6Jh;)rr&+`XWpq z3F>J`ofN1~jf=okcqjlKrDsP465l3kzO{t~a+-H&d_AA!edlzL$ifJ<$T7Z%6cCO* zBW94ih*VmIA(}&Yq=7~EJhhBMpqL!C--$%Htn8t7}@>6CSW+3(LlN z%UZIR9HjEc4TNZudTZ!8E5@Dn1q*hW#coS7EIzgB#IFl7^esF!in{$tqAGH0I{MkT zb*s~GSXq(d-n9}V-_a#get+ZHSJ*BiR9Jfw6XUt0g)=n?<;ONiLJ_z%0b(~!gMAPwiMD-1v z>!SJzx3U0x_Hl7!5b7K8+Ck%-|IVUNiKXs&+V%`(k{2$BQj}#fIRNS7D-Vmu*C_bV z78 z{Sb&!EkpJhS&wKgX}6{TVb^%9|KQj7*^DDO@Akzz;bvH|JEDXb5sw|~&y5#g*-*6^eS zgYbU_G%L@Gc%{XO%RVcH%(9psZ{;FW%3Du`Hb8m1!dzx2J-M@p*K{74cZ?E;Eq&xv znPa`S>Od3)NmTqn*EFb>)^8oIgUj;{Py+#O7oOHjYUAe@y9Rn)gSS9S%@Lm#&_! z@-6%GW2Y|tsm8jGB+()0T;;v;hcnzoJaS7`JHaD!k6Y=cP1{AM_hDnD?fF2f54Plw zg3|_7yThrX*7G8XPpW3uRw_1)MyPEarF^@;%G=8cVZ+{)M4G0}2G%sb0+8@0Qvw9t zN^&r!1kx7FqSOWPIb2$qu1bLK3vMMFPIE~G!Cx{0ky(Jup_Y2!wcfzwx1X?WQmNLa38)b@wUzgF#FHYwam^|Kk#B7DFtG zuX5f_F?oiEf5gK`0JsP=QCkt~;$P}hbjn7$YzpKl-C13ea`L@Uzovp4f3?ZYr-j`O zZ2RLOY;WthH{bv6CRHmx|9Y%EHpe`th&}F_j#Y$Zt7p2twq1m7MPT^yiy)Ho)&=j% z0lq}YZG4HuPQ>BVoGUkm94~d{D}!)Y6>ItvPhZ=ua(JI24FJq9mGI3klhpOCu}|73 z*TAQh-UX71hjp>0bMf_s-2EnRG*c68v-#Hy@y`>> z&X<1Z6;>r>8}iQ6x?XH5L0h)p(M!dDs%+^h32at>$hK+k{NSE6cf|f}lrs(D=IstQH64HnOjBd`>8NhUSq2p(I};P(@8dtf|e_yXaVqbRm~Q zxaJaNShLEtdhdcTY3$JW}aVllSCP z9o>l@;zZT5@!q)}@=7k=5p6+`WE1pGD<=B>x1T6D{)x5EN+=sc@+|vp=1Fuv2W*%w zy?7M&0`uSx?R)m{3}GOSLIBGD8$>y>E2>>D35tI@dP^KM&t1tqhkz0m_5!NhnTHML z5jd>E7=ai`W?PSHxuyaO$DOg@{ckIlUzkl!jLe6QSB&v|L1L|^-|!24hYKJH9c5T= zE1p&9yc9xs6u}E9y!KSr;jR?30@m=(+-x?7{0=2BxP{to{hMwI@e|tA-IIH|^EV0} z1~WN*5d_G65js1XiU1!khQGA$LcK%lJ;^s?Vr+~CTVp&h`ua~K*A|e$@k@ThaH`2r zCqYXs3|=Xr!PCah8^NviYa;Sm9L&(-VmXGizYe3b(NROXpG`@5@^SeF6aOc-JLP_d zI{vgz@+z9kV~MevBH|7S)&;VF_$)E89`H z;yV=Z2UTCA-23>b4u$Ox_=fLTk4lHv{kHp2qokmbzTK%xpXDn8p{ODBdJLI$+f6mM zwC5-=*!9X^+6biI2Nua*b-JoRR%T7^&r4*A5A)?w^DQ8Pq&s4BnHl|cocb9b^a3Ouj`pZ)+c4{H$=H0)5}`{aFkL{h=L4>r zoDTzSiwOA>(tJB>i`=N zwzIm~-q79qZAGF2GC03|gi&LE{r|tVG0}bT9D3FK0x}?cO1G8z7mXc#BQ<@X?28Z{ z?e?o;K~0qkIQ^!ulNGEXy9pRG%JU-ZTq^lr8`RAcvn$TP+?cH2)Y*R4E`Juwp-<%PlN@`qUBt~)=XObb_4A2L z=ubAXwY%REj!!1CzKg;Z-rThFgxqlNPq)DPcAvp8orNoZBA5O`+^TG?)B;ujzIIO5 zO7B0B<3Ofl1V2s_0@~1reL=mYS73!d#RKsJ8J)3I*3Num3bb6x@$(YM@_paudUt*L zFvu?7EHrSnpZR)RaXNZR6}WUd%DH!Nf|~DkcyKZj^WVPk&dbTkNBnKQ<)_tY(^QmE z|2&Gi&$1&EKkTH8aX@@7$4+0Q!qg0;?$BCd!l2AfjZmKTO*=;+b|y3kDMi2d&hvr) z_d#APR}cMJGE7dbq4aW}K5T= zb$5F=Q6V>{&}J?qy?q4id~y!N@83@%HK2`%XJMgd%*o$_z{;LQNA120Un|fy#HfSmG9uf zo_-ODurVicbX9jCIXo)WVBZCpA33@_jK!tSR2|vfuCAZidbBC=jX5u^V99tmur76^9tf3=aXyNjz;@g;dWr~9;!PK89J>ELGW=?WZ zD9D6Rc#Vz*nG@ZD2~{Cq-Q^yUUmwOAs6CKnl}djT(q57tpU{BQNM4?>!=C(Au4y#` zy}7QrQQ1mxANZklH}{LplA8{1Jjsp=?D*<;k)9{7Hv|2n`0kgYYp{q5%#=By3wV(v4ys+JHB|8z zDjH_Ivue@8>;tD3CC-lY?b?$DpU4kCO_OGXNHCHBDU1_<{r@Nl>#jzvHKY1mRvm$` zprqR3Xj%v{;^_ki6k0<YzXKL zSikBMAD&+CucDLgq%pVv-#6zkG;DQ>JO$<^nK%>+aFDd;u+dopL>r&)Q-UAIeS#_H zMITqE$SSm-hQ97XV52%CuJ$_I)v2;d6^UCqVe@4+h81ENi!$}vHgkg14L=}t7;3C2 z2G?c=D;i_n>iyr*stZ4Pd|ytt`-+Y@aMFY190)Vk2Vuo0DVj!-%49J3fL%o*;N|&H zS=I@WtncA0Kt7Po-|ni08P*YZ%EtMaQ>3ye@Nmy-O4F9;L_)`1qoq^c#h9S@qG+7z zZx(vh6YnGXv*IaM%8B{tW4LC!TLOZ(S(XLY3CjMZrpbu65njf#VPe%k*zbzmqv*%9 z*AY{lHh3niY*m881J1_rz(xU*(9QGe?s>+RMedyY=QlkjWIG!|4OB*!zZlT3z3<i74X1pGTWHU1RI^>nM>Q-}J04 zhxaGx(PfzZ8HIQy;gPw`|zId!;hUslUJ;BLKLm-H+ADKa*BshmyGMi z9@KL!YffJHe9sC(z)$rN1PKy6w0D{DdG$3|2bTUQv_~0T>Kan{+L*~xoR*)2cza+b z)Etw>`?Ku~IbT7n-`1HKNHeI>*te`>$JGY1s-xwJTb3i1aC(QgW;B2O_ya>@uZ+H) zJ7JCJqjvl>r_3ZWQnTzlkGLhG?jfaa+~a?)91gxBxIF`-iM zMfu8z8G(!rKKZZ&FhLwG93j6h>=o{L7We)1=Q4%FGS_kYm#E~wz+6ra-(kk z%u}MO-%+A2bVT}h9cZaSKc|YR9p7>lV4u@PB@|$tcf^F2s;Gzzlm7WC2;OYjcs)8^lA_i1(6y86&j*^OUz;rs7rDEd=tA*QC!JLUZWn zJnz=@tK`PewtCf7Hq6?iPr984QIWxB7maDdT5Qq?aAUK+dyUd4EJb0^jIHDK#lOFE zbT~DKDo=N}zHIm>_8^RXEd_LLo^FzIc8#i0cSMev+ppoMo|@Z&P5<$$$Vf#!46|@` z4n{P|p07rM#gdK?pe@Ki(hRW%W-h+iP zLP)S@s8t!fi`apO;}?%D z%HJ6;6vmZ{waCNAZ)0-*5jE`_jnBvZkFH*&4e}UT;`HmxE94AuyXMw}ZA38@{p>k9 zK%TxeErWL6Fl?z^6S_~F-?kobgcoqslf((%%K{FDZ^B(%=lz^;n)$s=9tj$p zj~I!OR1voQH=?+oLm-P^O7>L(U@-M;bilvVVb&+MLesT-65I%@MDYdl^xnFfE_#i< zzN7H9f@7U#6!UnN>RCh(JFAk58tnH7fH163;}cghc3w%=9pQ+f-MoQWM=#8oV%h_9 zu*ji8_T}t*H2mse>Y;6y3g^u*(xRO++7zmGpt9-8JYlmlqCPI>l7-Mt-Dofp#9ze4 zku#bic@fDzjbJIZ1jLIQ%#$NMnPBYwDBcI#ytt;0!&ImfN;pir(I302#e@>y0Z(lW zf!VP{&xgia)2qfBxj}6apR8Awluho9_`?=1x>@U+yu(4SU#c5$Nw~oa^sNU13JK+u zL1~qf_*@=+?dw=0sC$Ni{fg0^At>mt8`+vAbc(xY|4v}q7q>dQZ65*~QoOn@#+1#{ z*NxTOp?Eo!^J&`xm-If?k6KhNfm((N>H!=K;cpEzUHpf&ZhPZC+$t8qBl@1ny~RCv znK$!)mQXsWGFfhZ5Oq{^iv~T`r!JY@N#fxC715FA3Uq?_*3H79XBwqmgi|G}OAynY z7z>M1)5bXMpjAmIgnHO&Zc+%_N4U)h2Y2bQaeM^Jql;?9Z;n-#L0j|g}VOp{TN0^c(QE1k=NH^;9p2)?dOI|{l9&0Hj|C21B z0+sz55@gTlaaweS6^~8`ttOnNFCExtNGAFg&{u8n?G5nl^BUO>C~EN*e|Ug`8+KRp z#vq4X?iG?2Y@J_>cB>e-+2T2vOL&+T+-H8yA~)qn`!OpIY}8^83u!?r8_=kr_L?P$YEVAMwBU-HQ|O}o!!97YSSru30; zxjyGjM2}39$2<498oxX1&d5@xaJx%p5POI8-UvVWLB@C1=n9BV-rO(7auL()VwR96 z@1f*sK*Eo^bRI@K)B{&D$@}@fA6!K^`Yuj+NzsGMEIX&Gl&h1al5u4MUS}&uD@&@UY_4mK6`iP zOH@j;DOD3OFNSFw_xza zfJt7&au{I{3$k#cu*-Ubo5LESMq#$$emakjZfQszvJu1cVBa}kg_$bbx_KBe--$8~ zS0?^mC9@0=-f4u)ET76lUV>kD(!i+c$qm56=n~Y32os;C!vCkxuIIc;DD?D=-j5y1 zzfzH_!%t{Qlga3}(=?(n931%iR#_<8q$p>84GoO5C~N^7Xg@}(#D%& zftJ`fsH7!QUkJ_F37*ul8FGC`MI9tTuT*EB1i2oU0fWy5mM_6XjN6LI0S>l$k_JbB z+b9O*kz`MWLn)T8-LHnpa{@z7UPMd?bHU)9BSD-_1~rm+6GXmNprdhA2S+fB%ap2$ za>PS{I-If#&^l(DPqOyHfon&5+i~tGvz;bE!LU&#ape-CCkeo?DYB>=pqjFfrcrm5m)N%(qyQ&~AT0aN#?UE<8P@_!bOIYIHvl zl)tUXHybZmq3O^OaR3tOD;A8N3d&I-et){8hyOe|I5ZJa@{>BoPw;@j?l8GXIdCyF zRu*FO@hH+!W-xwZg=moU{9nib12`DZ!E`fSNXSMgL~Q37R)f@1I;cAY`AAZGln4Lc z^rb9d{I}`E%27WNVe&muxxhUKBjxplvsYn6dVfr_Zq8DJLj&+G#Nq`MplS!mup;E< zNFo*X;K108IXsmUNDQC@e#2`DO(p*+pbjMhUk1>0r|X2!%D|yLv9wfqp!^x1f5YJ) z;i^txf_~TNshJK}`Ss`icRJZZK{z|2Ep&$g)q}V}k=8!jJn@wr)btp#kaP!xnsnG= z+}q;NTtH4}GFeg{3h9nsjQl^-#oBK(9BGHvlkxn{)aKX0Fx49QBHSDAC&am*jtSXX z!V!BTeiu3ONNO*3M{h#e>6dLzQbcOmg351<1Zue0T_iUsc7>8$3{hbIB~rsNqOu#a z9Fs%VLcu6aNa2*B+?w=YFF+KNqGZIFXY{&)C>kq>S``WiW`?QD66T6bixyG>uL?M&Tl z`L!}CIh)x2p1Ro{Yj6Ano7R@toZfY?lz19cbOpH=sg;r!AjDanjxiaKzU|7RKY+N0 z07QUN3(pdDK==DO30i>Kn$V;X`6W8a-nfk5j#!>qELn-M5Jyhg32}@(sA8x+gd*D9 zq}WDmVn9rslEhqt6`d~hcltJqcK@IM4i(fe&S4|DiDP?TRN{(<$@l0JHN?e(DbD=_ zxxlLVp_CiJm%{zZ0@YTNr^VK!ic=Q8bp&)bkZcJH8Lpz(gWM$Ao#!|2uS)RWS==HX zFQ{vwEBgjs5^x#?&?Qm}V&^4=vrlzVfdXBut-u6}j(~rZG5BJ_!7eN)2~br1k*p;z zfr%tY3Tlq%M!~0&sGMkygQPWFQ2z9%od5Gj`$ilTA!MNeaw3ylvg#l+&<7o)2MA#Y zVI}CsnXC@StAosdHuJq?oqpPMv<&x8x&vAqs7G-8DkcnSb68(-U^fSV8Cy)zAGt>p zA!92tQGQeo4(&Mj^r9?GoThBQ4L6Lt`$KFtGp0^W2^3euxOzym_Qd8TTN)sb_wtA% z5ICB7`HO80599V>gWS@TtD!EG{bP&^6a`kdr2E6e+Lj7jwh|L6sj>a~~B7J40gX=;Z16`h7*d3r%lyq-C#tL%s}^j1mOOSPZdAH{aaSNXLd(VrSaN} zIb9cN?FmZABJKaus%Q~pt~~Rr>s;da8P=!JH9<1-Y1A3PJTq>xZOc~*6ZrqBdJINi z8D$uYT-RQB>eo0lCbSe#;nA~*6D9Lr% z(af^YgAntVKuZmiDL3p~0^-=M7@gBSX!QH~!e%#K6M6c^{Uv`1msd1UBq4J+<82;Vncxbwxs z#P?%v3V6BAT8a&WCXAKbQ9fLP#M9D#xGo6#&V8Uh;|};isLQ+&zyhVr^JFNAiQ_5kG9dsq@?R z)G(4hrVXCk&C%@bzTPs*g|sysY!E2U7g-qaUZ*aMPrfp5^_0iC5fvq!7-E&e5Ya}Fq)l5f{VS-{I~SC+`C|J_y$aueT$`$gfBDIflg0O1Y8REEJ>`{m$sOWor} zpfpt#KYaJn5bo?Y#g|om9(Ym!&w&!(SSr(a7{h#&C#xt7(`=kChd%YeVK0^Y#~jLZ zy36E?>8PTUi*70xewxP;^b(VD23MnY4AYo`{pD;h{*yc`jbc)UCVCQ1T!rcxZM7_w zPxxP~8GNH+GGsRB1SNbGlwo@p$0nvOT>+3&TJSt z(29tw_mp?v)@;%r%Qxc}jY&iK2D1(#G`Q~8>22H^z* z?%JxeiG|)HwZHcjE%0({8N^=YNml-{=U1zxR( zS$ND852SQ?A->0bwC7hQ&ct~etUH;oH?eVT>ReHlRUjc2!4xzBWF&visv4nP+v3Ju zOX(L!YmagkEKkv0fw|?1Y#be#xtgi7o=RF~ucch=G}*fQ{;Imn5leHy_=OMZvdDXe zheh-*R_*f_C%{(lzSF7(uVif3M_8lH?T0^vhuG7F%l$Yq(b!3=?hg>Royx0koOb;D za^q)Xtre!?<#`%#qp7+cH)`0^&9Cen?S{?$p%>k}F}-IDRK+ZK1IykW4x2>XGyXUM z=OL|vO=(-4b!jf+7r#uuPHCV?W)W&Va=Ip@q{(KKJ#Som-I+;rx?MS~Y}s(%Y3$+> zdBm<*T8Tn`BJGSDEGl8NPGd}=89z?S>b0Z#xL0^v*scTqt+VaKeI+v3q(z~)i81how5W##EI0`fa3i4`up_5wK$g>JbI8f!M6lMl9_l6v!eb|qV)PMwz< znoc*&Ylr+Nprrt=()m{luw-PSM1R*h@EoJyk=K1z^bcm5x$F1m=fOjya|;N(GYS5U zhGyx9W*Go6qrbIourmew-=C%cBBu}b82L#!4~F^69&<&J3(8L0M^QWx0-LrY$F|xk z-AcxZj0!};0?eXh{KB!gVTUzxrXrM$Wpi9Da9{Jwe*dJt;n~}ogwB+EIis_kN-oc~ zz@hh+jtNbuBz>dtmG-RvLUu(~&isO+khRLc3$Uu>%xu0#n{(O!@b@@&Tl&W%hCTG` z;5!2t$unms!Cl03DFj>}fLEP^7L!{*nwP1z0o`U`^AiTuEiMBb6|MB68>r2;=kQ$4 z7m1L2jFYaiV(D4vsPMKS+{z zJWYqD*DV*e&&i$oiaLp<>*>lp8Y#o3fRklTDe=1|{G}q&ursdaR2A-}oJrq8(TomN zl(xlT4nh9LMdqJV&eX4FP2oKjQ!dm~oKS3DOGcSZvlF1$pIkXrGQV&sW_6=@XlR*i zc06?{J{^6BxShRhsId)YjJn-b%m3_84QJ!+W85t=;KcNB^4D|(5i^OOwKnenKSG}= zoMKCitZ#hgBWR#o@Eu2zi(C&}JbCx&ou~ygN|F|i*PE}H-+n%izjEidH694)>9d|L ztjFJ`9h0`Nodv`sNue?VW&DWq=(7-Q^Ndk8llTTU3vUlk8VldsG-mRamIX(r1$LE~ zbi=*9ywh5f^)4+q_mHk_fsopR_Hf-0S_+YNj=I~K4`b-X>}uMAp#1A(dOYv3+E z(v=u(rrwRUliK`+by*9>JYJg8ELJYNWLDL(cN3l((IpRgU*`}TiQZ_@9xS^yFkU?6 z7;L3-CjZB8OU67-20--jxD`u*)x}z~{pl%-p612Wc#&__9~V()hjgN(y%$CA*SNJb z`1UyXb~WkBd9fuK`s)hvM?({x+SOpjfl>3My-sV%GgVnv7dh9d=gO$3M5Oj3xYkw^ z!D{Eyuu6(r^USTLxOu)#*A(Zmb?kRLq_H=H-X?$^f&hpJxZy~Eu0LtNwhAezE%{+|NGS<!;&Ju|>zq7r}DYw{U1K#V*#HQQr1X z%*3lKTi>_!J3zL7Z>LeqAoJaBvQ6;KxEJ5SHAy$oIB`hO`-V8j?g1XYu{(Kk<9NZF zs3losWto3c_S@Y4Y54hr`lJi6T2PjpD2th<2X%h|&AEPI_+K&(!ijjD;_MhoC^<;dSjn z#`^WdkeMJM3o4#=;4`ApqPx}y<5FPoL#2G6NBg{WOV5d2XgP_ zs>A=zND)|qW~A8u?~K$BSvwGoSLdnbQG2(&7I_4+p&@ZvhMqNJj{*XS{|LH_;anWu zkOPFYzMh#d>RO94t%7imBy126DAm#{uNp2iWIDctmFPnI_DIc{YIC4n0wuk15P?Q?nHf$`TiXe#s^>@ONj zk7p#iA<^f@lh5Nd*zdK^kInTkNK@teDO^iC6ybB>ych|InoU>AP(NwhuUUBiVtAlz zJ%2te5lP7}epT|5H|01XnC&KpInNu!qkU0RhWq~YeO1ve_4-4oPkwQ-8e;>HzSFl* z>-oZkZT0Tn1wj!&tH`iUij+z{s{jS#34Gc-ULQ^Y?=N$LBbARu>s8?OlY@0u5 zm_zu5sQ%7=p`2)7>hgZxUotq=ox?aBC$YqOjaZC$k@U&6Gh4%0>u(iUioh|V847|8HRs2#koLu%nBD@Hs^+-2O`Zek7Jvz(xZOj~Nb(oWxUw%KG9PL)e z!#>rkJ6~*DWyCRUAI(XJ{yKufOc{wjVOTVba4zoR0)p?nWv`+4R~|NB)1ykzzI55m zowtYOj2Dvf3OeCoDKs$P8c5Z0vORK3D5E`mpIg4i(wV{DPE=R8Dq=vVKWH8JTME0@ zW>&1xG)~yziJFq<+_<1_>hW*7A6r1}7rF_3T#9^2OW6_FnpFEqyb3N5)D{lj>^B5U z4xFfsc^~8gIpxB+E22Vs*lc1aodOxDGRM6Nh0!R}cb)sPUrRt_(awBRKDUL#Z%MV6 z99O2;9Q7{SrL8{qNd|pMkQ{;R#7dj&$ibt7V!=FKPPga&qdr%(>kmhn=TwTdvm(y9 zNcA{KVw;kvT>5x4E63vGA$AvGeFiT7sj$TyaUX9hUv9d-&FfdN;lazSdIFrXdmc4yy9pLN|)BuuBqoM!%_ zsV_KS$b*}eYEsQzJ#b~xyE?y%jINe7p|y9TDdnJyiBhON1~tRT@>3>5qWEq67p0~& z5lvpLB++?4be}&Fl~PVfr!-MEx2aNwcWWd^;O_uYz08nY8&WlOdqE)QNV;Gim{Ext zb(G+UixaD1LA;<^e65QKk?r>wJhI%iNQO2OtB7DkzX}dX!|-ua@!3IlG`n^a2Q=`~ z3b9npzX-&dLEW*<=Lb*N3d_NRfUZ25S78N_ctCXi7K*2CTz9N89T_16kHqUt_^rY0T2=mlH?TxCZ2I`bz1{}zVxU?(V|mXd4lQvKTxOZ| zoO-XY@T;s85A)25awJ{@sW*Jd<-Sv)4y|?!36K&E`6J*UsP;NxSPwgp$`}}MMnLVYR8rw1NY3cbDQ#mC)ZLbn-|s+#LgAZcWU5fnMTFl zT7(XQbxoB60uG%JrpHBl5NhWnC|Q!*CuU4ywX!zxskpN{*8ZHpx~Ug*$FH>ojjqtf z9@m;NM9cA*9xSMsS(KKXG(1)4u&%j4HoES)oH^-bH3O#Yv*(;-7^c>^>dp}J=a@`w zOWzGSRu15#;TXK2@>_%1S_6E3GUwmc+-hB6X_mzoCw_|w{$@Q$_8+#^W35kNUgXz6 zCJs%N==5q@avw0RM`ef^CZyCqz`Iw^d}OZm3?L;gl`<$lBZf3zA6z+NhwlgGn$Y>R zuE|>gNe+G~PmiC-@O3|kI~o%S1cC6afJSaDZ{vZ7Ana$EQV9O_hVT_Q^rcxbC=>mZ zqzMWJ?o734Oc4&QVPv`MT*eZ^+vi}X*Hyo1mPWbQ=QCI6+;j$Bp)@g;WjOteaKvZE zI)h%lOIH)KfmR0JB@um$!EOQe|DN%$lsu`q1}WWr(XbkSaq#KVrc3nf*cBk;0i!bgU336>~Q= z%@dD*^q!{>C;cF*HlnHJaEsD>Q#>YyS-w|HU7Ma^R=9G#bYCVtLw&q|;|Pllct`>k z*<~Bm9?y8E88zsxNNS_H(#iHK^(VjH2y@R2r}vWXLU%TvacGbKZnd39S*Nbo#X%L; z$+vH(=h9fVvB46n#Agx3si?C2+)#Jj%V}Bh=RnSwF|^RJCyP5>atR%c5@EU;J_slC z9+J~1GnlBXjMF2VLS--Tq31vr|Dg{M{bZr%L>1l&pTRJqoNydkG;I0$ib|YPQ~aqe z%_Y*I{pWMTdxx(3vj`p;ix@ejWl`!Df+KTU3>}n2K_B*<#t_Spt;G>$9oU+DWBnC} zMKDL~FAIq5x{1RqLP1VP<|GAnKN?VMG(5cDJ9FcK_5|HVt4dhR(`D&}N4PeC+$=lp z5JvnQeR_L)YggtjSmVfgSspnnr*G>w*Ofn6wC(t31P=N$PZ4*HW@u=s3Qu0HFKLHb zi@Ym4(batfQ2`|cp`Je*=Bw&u4J{?>XkF|PF85o6EOh_SEVs?`S|=u`?FCG4c8wV` z<8reefUPX!MV2=bM5;V6x}3)IdTO55m#0|`Av#KaZ_zH z3SlvKaC7_IvMf4SVfBN>({iXS)4}Rq^EU~R>DzfC^KXz_sO`T4S1)sk=n?dA_^>aH zuQ#A$j8)m|S+bhXmKy1dbloYrW!EyJ9W7~2p4>@_XRToV(`Yxpg#arNCTl`h(6wTd z;U=U9#$iCY;zN_Lhkd1>+)TuNS$DpOW2$zKNxLK4H!p!j>BFc+*t);vqSRBr#6S=L zF{Rud2pVHMhM}G|bUI-Zoa}uS&~ToCOk{tUOL4Amw_@F9=T{ zT{%NepcT6te6=L5ozOibX(uKKCVC?x;OMc;zD>^(@tjeKjq(NKi+&iU%g zHPL16StcPm6JyUVD)bHit>EisWOW0e!dzEuKEMyYf}Q@?4&8A?e*&UNn_~hm?r4rJ zb?qPDKEvZwZK?ITtGPIR0%yCQ%K!ExUmJF%eSdI)CTUEeKrURWt~6_vRhUgpeM^CD zDAI>(_$RKN{q<$yx)b$OQGA?wmC&pC#?GNiZKS?MV~R+g*f&u@P==m(H_VYQ7^#a(GrF!6e%a*f?WUTfsIm_ zl2#8(;s@Q4Fbd5gMZM>S5;Mhuq1YVGKWnMg1kXQxnp>NQLX~2`2n#0cz}T-PWC);t zAE1Qv$?2aaPDC+P|EaY6XS&YN1RWwJ0f%8&BG|WJe*gE={#Ta0)-0l_I*JRrjaT1- zdNK!WITT!l5u=-;NSXD5QFg*XR*JwZBGgR#j@6@j$$^oBFz61*ZOwV2B6GnpX`if8 za%EHGxcYgwN`BeJC0%-rPg@p$J}CpN(8n#o(=^C)j{Ve(J?e9J!Jr&Bl{hLre0xGE zQ1z4ANnxL?ib^pUbkLj4s(B0KIfQQN#vxK9>TlIOZgmLcUlDv8VphtP{2QiUvIM3; zcc17ED6V5lFj#C^)=Uki$a7MW#-JXgh-nymq2{EPI3Q6|S83#WMdmRqhiD>Itg6?~c zm8mqU1HxOPofe3S;9!J7S!S4wN^to7pRT6Ok-tFPC|hPj5Ur9T{2|-Bkz-6GQOlN4 zKlGk>lr4u6&?=RK_-zb4Wnyw}GM^mkA^6rHK6ilNlBe@HrTwzX{JPq~1hkO+zCil6 z5Wp^i2(fiJy0ERwa^j#&667}x?KA+I8F>RuOmDX-L~9ZY^l_kKkCBBPLyD>|DkomJ zF)1vFRskBU5X&N}tKX38BC49ee5RodFhK`sDtmNPC0!;$Q6;yqzxTQEDpcY8_uHb>H@&CQf_hn@N8C7GYwBG< z4Q$4D`S5`G+=6Dzl%$9V78Eq4N%RhC0ikKyC~@SwFfKrsY5STZ*#jyasldd@1cNMh zC4`i|g|C(zcy)=*YZcekEsF~6RLsB0?2+OnM`W71Wh<=pIJQ?ZPUHFrFAXogNpuQ+ zC6*j+gR9y*VM+}7n0J}Lsl9cyxE>IJaOW}FCA4y+>ZVRiNGEoKq!5nUAa z^tNhopkh;xxow&n1o(KupJm&RzRBFiXo9d!A#+cN0mAZ=K`n(ud>msgsKbG99Hy-6 z`kc9C&IaNZh@GH1D*Qhez`l6wU$K-5$bNN@qp%4XLM!&11LaXP%glj9VLroef=Up3 z!sRbK-^fT_c+kXUZpptUzffuVWmzT?(qlsd1o;A&$z!54u}tBH-uzo~K3Ue1)Mm(Y z5&7S!b-X7JJqsZsKV?4o@6aGWjuj@wH?Mxm+yWPY!TZeH`^965sA!a9iUzuFTp-yN zrV86ntn{ZWo8T5`En9Z0fcSw)r8$ks+uPBu{|>6qWdK^M8b*P?K)v*9fCNWbGF-YE z^Kne&S(*`Yx8ph!$_{PeB<={*iC(+he>!msTO@+~rBpNdDIK!(j@J;AHn0>6&JvRr zzCy{bA|VO1nCH7UL#z2sm=dq)vFU&jL%QU9bZ7zfRqu(PL>CG~Q^}HVRO~oxaB+F@ zJ~b%X^RNO-(0()ppVIXd)skairqqIwGxWcM5{4!yfi(y}ngy`*00<=Ne_wq1d{n&*{QBMsv!wS#)%jt}MR?q=J<}OVXJ?IXYxYEf1?4q!-l0=12@huH)j8 zS3z^htHtEVVt!u425BT1C>6=iKXQTEKXsyqw23;5!l)>Y%sc4$Ct1vDaCs1s5b4vN ziF^vw*noZ$3|p8It~k>>_-8*FxU4K@Hwr2r(r%Mm$r7BrPccuqqsWipT!%SOcKo`w zM&n;S65!!0Sa5iAw+cW*uJ5K{Ztn9Wg71lc51KS}xdRa~-BEn=*QJ_0Q*9P#)6iQF zttTo}g00^^M~j$w#$?Nt64Q|Vl0IEf0)hAwfI_Cy^yxAg7TgM@?lOUB#`~upzA33d z=g`gnXB`wLS*L4$Aa>he$6wB)vikF;F4v7oWa%NS9x_nNeU_NpNf z@3^e7A;ZUT6?rhxz)6?+JdjK=7b%uO@{aP-tfyqxo|ZD*B*d7^%$5kqCbX6TV?${b z$q$bD43t%57H<|S@chDN8K+Zr4Li0)FMIVXsF$s+opqiN#+a!g@X_!~(;6JbM&V$` zNPHW^;VpA3PHbZrMr|w?D$xNw*Q)6hudkzP4}5P&g?w*MlXd$CJ8K&NL%4E82$HJN zX64qNE3g}|%Io!5`I7nZruhWKD34h=&`HY3kC&k^v?%wiJ-`o#)aP>Z`LZU^te8!Zo%jOWqXq} zea!zZMqU_y*Wvey?HYeKO=%y4s$^VDds1eS$I5cLWlj0ji`neEd;B8x4>9TUL7Wv5 zJZ1^@H?||a#SAIwC8&?Ya~}`{a)aQ}qNmtN<97p=nyU09b^R7=(b#13Kjc#n^c!uf z`(!-&)AwH5UV0aMORYi;_z6P`tfo$XH#E@1P-h>?6eXE}&@(FnAc8d%NIx zG(Jb%OZ>$>+KA;4km+`@N1VR)db_VnAJz0NJ@a%)mym!CatoOb>iqXrN{}<$5!Se( zN3<5nfwh$CGu8OTpe?};rpONJ$QkB{#;g0^pI2cubyZSB#$+BHX;UZfe@|Goq6i$y z&nT`(PB25wo3urOUrtha0jDOfBfrP)6p}SBk73qwKm7w{E*jfV_ipFHjll`Pnt4uX zdPlqZ{>?5Lsjb;U)7h6}eQeHVN^k3!=2arYIfiy&DL6q4>~cXfS!F0g`Xx3IQbUWQ!H6@VCMx-a+F>U3OmdW<6)cT_LXUcbTZtH@?g5 zy-ra>2HYu(KZUMM$TPOuxrlLaxyMry%#78E)^4G~mNp2S66Wgir5y|Ga1Gh6`zCihf*f$X@&$ z<~_ySz| zxqjqWdebl+1d;bGQy_%>y)49!nNGxdpRouf<(=nk0X(X+C$vaXmjXk(ez4 z9>PD;pNA2y5?~rsPvR_M94MU7Ed4y#yV-_Hf6vTs}};IC1}w z4AZc+0;Iz3l&fIv8QS~l!j^T)!({Fxgov)@lv(~RBI@G31Ouem zmMD~WHQbKQig9Uj$O;%wss{B8xtaN?Ua7YXY$j-Yqg#@6i)dGuaptAg$kr`#=M?KH z*B&J2X9V9?S`IDwD%HAV$DAMqwMFEv%ObOsN|@K%{c63KeJZ;kK%dsBMgD*_LWCXt z0{kt_)6LU$O_M5dHOtxBc`e&|oU5&#(Kii?K!Oj;AmfU?kRl`)K6q+9a}|jyKC88= zc6@)CqogAspSb>3**5WD@g}v{c#j{+9?$$R+xt2u@+|!PYs7SMDPg>USF`fOk>`Hs zt+*VUuQo{+_koUR7iJVEoIJ40)w6h zMySo_l%n)e8M{KEn`L>St#hu?7xD)JykzaXiky_^;dM}4h1q_Z_emy8^mg`B)>W?J z6`>wQ)o1LDUI`V?2s4b11bqg_+`&PV(;AMsw)0k!=|KhDnZfR@jU$0{KUOB`MP+s{ zI^PbDQeixZ(OgQW(FALXT^19+0_~%lW}R4N-#=NzD&FKN{n(%QlP?pN$eTp%{#0Gj ztm@`rxi`_gBIX)Y$SbgL(q`|yU7IfNl-)FGTuVdq?HYb#*i4mD?Ws`xTHNbC{AmmF zV1}!a3X8^Madfk=pCov7}joU z5@?y2lFifz=PG@}wcf@f6lun*Gm!XgM>xxmI^#Dqh!caUV|-MwL4j|uOhoYSm+@{n zAJL=K$XI|N<+>iS=!6t+rS-cZQ)gz`rC-FN=B?_-lId+n-TgR3M>I?uM)`PZl>+Sf zz+l}0VTRCf{ffhGg1b8)MQu@&CXYNrS^vXBF()hj?*XjZkQn0u0ern9p$Lr>Vnn=@ z>Yb5U)$M}0+8Le6@(?E`)Sx-Lf9HJ(uD)lSXEpg>nR+c_lZ5c>2$M{={j19y$D7me z%PoyneA-ssaN-Ro=iO*#m0j;6X6HeqrQkYd#9Bqsd_~SH4i`;)>a=!=QNs(3weOrY zO{h|x%c)j*L27gr;=nrjK945;e zVOJoX^bW~zE;BX^E{-oP3-UND_0dTs(#_^B{!lAB3yQFGoh4|kv0qpID%Czv$UDEe z_>4T=^41Xif{KthYc`bN$?=fpW|!3enIJJ>TV_p8)4AyVsa~2y)F&{(_~ZUN{dFrG zdD#ob#sal;W^iW@fD&rOH}rd_Cy(aD{wB)0Lo?dJDp%XCHEeR1b!#DjN~Iw@O>yGt zNA0Iv?e^&H;{;)*(rp_p7h9uI`HVJ$q6b8$RvuCsPpz5cI~gX*Czhmc1)U?}ed6oE z!f{E0pgZNttIzUEsUF|XwT^D^t)*kKqoYhR@;!aly&_;10Tv8Sfa@*n&V|(;BGs8b zK>Jec~R+NQi%mt1I58-zX zbPJt?jm-1|z#HC+K_ah*3BbYWW(Ld&zId&`FI;K8+bgJk@U|aTopAMxxQ1R^ES%J- zeH?~dC@Qb`rI2)*;LikfFw{<5O9VFDe|=u+xLdhzr(0OfGHKjkidqwlC*(E@Wh7}h z_tlqgz5re#Idu5u7Ltv)U~(LtwAt3%PH&A0HC5WayuARW+Xi3%t>iAN*VG}82O3wN&Ec(E8QQthjKtDoF@p2O}Dsdlx?M(=I8k`Orrv2&TNT!cs zHTNw?uo*MyLK9-vwK{~eBTMfa!u-#XtPg9MPH5K;#XbZln1^l}&( zz-JS+F@1wH+vq7d@R>&#aYKDGcYaS7;o}?PWHA}-0P>VLar*Qe6*D=`GSdU3Dez$M z%N?mH2}CDfKXs1^5LhAvm(83_kU*U1=YO~xveN|_Nd58v1_+Vyk5(PM0q*uTx0Yv& z8R-|d5Ic)Ju8CZM&S*rkiCh##!XsT^4d$Cj%g*dCZ~{!J22HmkbnNl>-+5f$K#+_q zBzds*&@i*XebWtp1d%~G_IaQGp+08iNbwN9+t$&an5NW*7HFa!g*kz4Kv-y#O(5t0 z{4&;${V^g9dXPQ-Kxkd3R#S{!=5f~{Y9tu5Y?yv_7L;kz@izJbih0Sg0BJL+a(f?rIm6R~iIOPjTva zFn%7dwZB@ye_pk+;&ASYXk+~_auqKAa4y!0x7u0DrQ+m%^N#(y=T1diC0EFVm7`u& zT)(uxd?SdK?+YymgO>L{H5qUfoiXbbZ*SFE6{4AQY492E4Xf}bD<4Hw_dc&3 zyNy>qFi90yotJP|jCkt!c4c_+KtAFm*sFS6@($)~d^~Nve7GR#75{i?43U%jo>3;evCkm`-E&@s3bNi)+C!$(}NyNL1RS+iEJ=R zut7Moi?ezj$1CnrFP6`>ZuI3Vkx!^@h`U8%oZE>Aid-;Sut65`V>AJkZvorgntuP> z>>>(n8$upwZA=lbRbA59UVM&l6e6MM+-3PChcc4KCwiLzrSGmJYlg3s;P~C_ko zt++iNNi6|k&2R09XK`Yo3clJIx#`w8Gatg-<95^KGrmz_GIgAgc`QJy1kdR&wKOcd zh0j@3zW|B-Z7Aof1hYkm``52Hkr-!mepG?5K7vKaE)QCH9IJRwy|SOT0o@|qq?%y= zc00wiGOI6~pNJKS;IqMWqur6gF|3Z7Rj8)M7g4{p!AMkmdkfFjXZo`Uk0HQ2cXY0J zK|`F~oS_}t_Pbo-4~G$C>arh&@l6WMtk~LCP~i(^|Lr?7MYb;sh30qhWWm(2Ij^z1 z*cM(+iI?f3wT~30Tdz9>6hLNHQrHX@tdSytRkAjaTf1$X*DUJs$8a`@OONYFwxdmY z8kazEwDia=jAAdEl-JO>#fJAvKScU5S)m*m3s>ebM9CHVlwY*TW)!4Kw@lMwAbb@F zBNFB8)oufv@S0oP;};UTfI{l?dA7_w2-)oJZy~3wc| z3AZ!+owsD^_MVDTxqYI$B}WwEvS2fWwNPPbCiSNxoYbYn7|2h=J@0zfB{&B+&W)>n zCYH4+6`acs)3(AUkLTt6n$4cgeJItv*B^^RPN1p&=Lm$`D%72dENX-LKS52rG?LK? zVu!3OCOZL2-YnNyl1G`_#rF3k#J$rJEfxI-QEW)&eHCKwT{3;f6Po5FHs>*%%y)Ry z93nYM-+yt8Z}?`~iqw{tOT_UB3>*E{Oc&e?Nu1NVXx(wm&aAkXr~acGCgCK^1$Yz4 z5_A>Yh}Tgcz?jS(g0Q-RO%E$CEwITy_T@ z8xvr6i4gK3JjOjz#QCE7VKM5yqhfLjrqVq3#VKoYsyOUpzLFjZfBJXlJ_!v~s&fNW z-8{6GLoE%iIqdux*XV-vVx^{MMf;D?kqNAFkBvpeOs0gwxC*BqJWhvVTHOSwK#lj0 z1>9}48=VnZ3HY|R%LQ^7r6M&Nr^vs{RQLe?b`<0!uVhoT9ZW^TKIQK%h=?$`fjKfx zTk$}aW~F+Yu4XT~FyCJ>Q>TuCxBxg0v@4Xfr^RvqBZ#0)>n(CZbvMpU0vnHK1d3HRQHROp7L6$WZf9iC4HTC~!#s{Mf+xWZ z0oN(#vc2|ox1R5dzq9{|JLHA{o~P)hpj#Gn%JQ7^4gR!3r}()DGdS+{$}PUdP0ny* zDeB~-bn=8890POBeHQ&Sohi#yuz7!&y3|&r~C|)p&ItBjB96HUvkM6@v+5S3zBE6sxbXD zWdyC=$5?4OH2o^Faq_U^guqs%uk_`FM%ctO!{S9Qc!V(P3-XuE8s_yrfV;b@+%sCR z>L!qDM<8wxrsDsx4>Ab^y16!?L)EElPh=RE-g?2-y&*O6RCj*L4bC$xdcl~9DH7QZ zGJa)c156X*i-YkKx7 z1Z^{*7N;qO31J0g#P8PX{MLLj{E$xp`&s>V@o{wk0w2PE0G4~1Ew6N+gw&=eZ5maL z4)EhnK3XC>-d@%^Ki)1^=o^DJK;}+oo;AStYTrFBwa&}7LyOsus~}?)Pg>8SQ1C*f z4T+UZAd>Yo$?ju5)ip!eN6l+@v~%Ylbc$)^Zh;enHuqhu(LfIziH?r#zTHSex74GYI-$EsGW8 z44l@p1bPCllw1XPK5Q-O1$pf$Uyy*gFB&E?czcBSXMmi{@pf0@m{aKO5C zZ*q|PfkW&*?m zjLtMQuGQVg>DQCX&J-RGbJ!*6_3-IuY{~Mf=Xf4>PK{HqcN9n3nl8M%3K{q_-sUMk zOHN(u9YGt;!S_s5%6{6sEDQt|#CM1YxMCYmx)7JmM59O@UeIOoiI|4gM(^|pTeQZ zWA;)-Lpq|uKk=)66@dq`uniIabwz`53?@N6j>Zjf#IQPcCC!cuvss-X&i-@%>w41Y zFiD7fFP1FSU5y>_p0m@A--a}%=`q}}2W~FLSsUj_Ex~w|7)U`*zoo?$qm8Fnorx1T zSZ`5J;_t47K+GV&v_AILe}L^KbV-Q*q8avep4o=~D@U#oZYv5%-Cm$_G$nQg-TtyO z1?`|sw@5sWXB|f=@y^WtWhtl+o~N;x<*`?3SB-^;q0k>hDd>w1k!sIDwI1p{hRjbv zwUL9)J@}o&0P*d@{7(qjcVgR1Bp+uB4AA=txc4qTf9_2}=~8l2t}W>+?VbNn`c-gq zlMsw>hO|E$L}~VqB)8`u^3glBx&rLvUITb6*kjn4hX=IB{v~*D&3q5$^xSSmBMLdx zl$Xda%cv8!MDaWG_*C{D3IvHjT2ZzvUX2UwBD&KNDVsV%eJa zV3XrZsYzsQl7b$#qks$-5GFHdUnAs+?^(A-ikPU<8&A@(g+p?p5EPhRoxdMOj>nv!ieQ*jK~JZ3= z1mINB9I#7#O~>+KTvU@avGnGE0mGsc_!L$A1zE6)IWU$8c}K2G%aDjIuC{n%Rt#B_ z#T91PZlV274B29`Zw;cZ9qwSB;wRc&*oKtqdR9I)uZ!8$z*U8=RI^e_o1Gykqcle@ z_1wZ57zC_x6h}&XS1UD1zh3=r2TqtLxj)BBYwPw_;>nu{x|o(FaC3cxde#&ri1>s ze4;{lZy~%M3ML1uezAm^iLX9ntMCvqV~;9yIP`z}(|Y*XTP5s45nbAACudJ;WkhNZ za|d09a<%{3cM#(&fmHSqw{O}8V!a%T8Zk`teac3b;1)OKcWlcUXo8minV^>+$8*I0 zCio6~`s9w|bu&Qt=`xjwDrlGTq*4X=M1-&pv*G#<{^`9Gp_rBuhVY7!F0QW5en!+Z zu*z1A%&r9>p46PSCI^Eg1eqN|n``&oLK{Dveze5)2 zuMi5_4KX`1?ziQ+n}I$L&0S|QhZ*2z#Z%Qi?e3m}9B2&^*S4{z<8)cr#Vg-v8fs;J zw9@Z+j@X%Har?JY8qSr8WUIV<{O;h|Qc30U62e}y?{c|K-#L^5wRM@`L8<@=nWM@3 zeFSOGu?>eB5sCkODhk9l(vzaZO^VfP!aQ-MX8{zsOHv;{LYV)ZWzc?~!gyRn z$V`DB&9ac6zf9A}Oa)YP?{Q70X92#A!)9+w(pRI4aNHm0z>r7MI45)Z7L;b%78IVe z4s(j<4}p+1&E-($RUl*|?2pHga>kal2buQ_$`(H(c8%tqO5M#DDgsytEF?%UZbXew z|ETFgg)D?p$RD_B3uaejsxVm?1a=i^7pj9hLj3x*WtEb5@FNJpgBaJP+~HM@)A;XU zo!0JZxygPMQhV2yeqm-d;G&A;ccb=v9oija*Y=h~_d`n>fFwJbE?q@TylFq+)wsaq zKwcBfo4oq5Y%Dd{ttswtBMff-5dap{>j;09N`=u$aU%?W#0>A*7D@a~^>I?E$d+1A zgPxRQ_XNh>EAG@oQU!&Mp1dg%86(2*%Y=?4Fn@pe^4?0aZB*wfXlC1%B^&aUbVA01 z?lkS%M?v}kFqV)jywSX2^~_#)yi_)&6MDj*{jT6&dcn5 zT=J#DUhmt(g9KvWKYtxYwv{xXP{5JFHJ!*W{}ssjeC-m@0 zzcZLV69iT)aTjUq=YM2Og8#3XYp{O?5=!94Ou*lnUqC4KxU1D_mXa>`y$Td22)t4W znOu86%aY5bMI!KwBdye;TJ-2xHEIZIf zArW8xZOYlIQrvCWLflRJW%LAI2Hxe@1*=X`g3S5JgA&#RB@6qRD+OK=B4^R_)gF*9 zS~li5PF5+NUUTxiZQkVdYY|3_O{k$z(nY}R3H7te{&(ob&?-`Nv#+pdPx$Y2d$+zL zwnoo-ZEzNq;)XX|zP96d^hOEJFY@zPIz6Sn7^W498QTwA74S3jZ8LM?2AJMDsTbQt*9j$M%BQ6D$af= z%p(qgr^$IO1L5^ghq|ndyv_wq_0&u`yW*mX17F*BCZ#~v>brTylhB`U-!GRfIpC{e6=Wkhkoi`3I?iXN=S-%uo(W_^wUU0d>U9$S#T(Q5?-(&ba zmmO?ip#md{v?0bxvSX-mCYj2J&h@*2jayP?Nb^QSzIW#gFVu+Dy z=sal~G4E?WQCt=-(LWqMH1h3ORQSWQ@aW^utb{lx)Pu|8U@tuq$XSl}&snZ>`?S~n zA7{DC*ngbm0O9|~TRsTz^1beD0R)e)NoT0>q13$QR%6?ah{FzWZ$lq%Hy217d`H4O z?{5HMB$+A3{5wranH9QY1*;iOyv(qw%~RaQ$7?hun!LJI$p+8xt*}D*=^w!f3ZD1Z zC=iVDYtY8WXcRzR%|}T1e(xvG<^^ug=aD#5jIIIPbn?AEI_PD$*V2T497XZHUC97o17GrAeRxxNSr|A)0Y2cH{N%j_{z+^u{o8wa z(;t~~t*QFEgbu=^UYAGzz*VN-kd=wi?FcJ^i6NP<^NN$~cw!eghR;y2>&P`G!A@Zd zt+RlCyPj@mKbHwqPbEvh8VhvMNf4cb$D-aHjkMzPF}7hQ{FN8@R-@*AJaV%Y6da30 z*^*fX-=A6MHP zw2Ka;6f|SB_S`xNE}joPc~%wDNgUr!O4k9s!byXEBnzE4ckc_OMlWqVHXK}ws1qOR>(zW=DT}ny zXsnQsz$U|_8Rt5_NC(;rYr0{h!bE&yt2+WY`l?Je=h*Wz0+B;3QpJ|mTf`uKABuXC zuAjNaJXR5q`4+Ohc~aHC)7KQ*A5F(dw`;`71ge!o%D7aaBn8amMG?;t4;Qz?xc5o87Vo}tKhlLs5PS(4OlySR&L5KYJD7F*_AC~LSH`x2HEX!^mVx_meagSpoIb9CS z?^o^corZxjdN9L}yuFzY3U;DU2nV-A5>!&7Wez^cm{3hV}eB?Oj1O;N(G zSe+c=lrm4yEfHZIbvt|rHQm4y2L3a`Ezv3VqeM5SNo-TSadk%n0V>Mb^FPP!ecPBz z?SI+1CMtDWOxS)y>u>%mrBmNQ|6s}t^IC{>KeaacA4AHCYfZ3*kiIMl)8qS~Ne2jX zdiKDG8nDifQUe;pFrr?Ij3AqwrMbd1Dir1{jUSJb_>v%-%1(&+I4F(ZJsK^tfJ@M? zq7Q%kWc@G%4GdD6C^9YS(wOHLgpAd5tKH9A77n|OWPb&_>GApljw`R^K6L7rwx*)> z@f3%*ESZxvPQYfP`rZ*YjOE6oU4d}Z)sq7K089ZP0)QN$u-Y~#n9Av%M=wa>CpM30 z#Ju|2!YBM?3nG+sDbXel%v{`R6>o_QO3EUG^YFj5#t}*1b8ILBZCcNFTC<*L1 zKKths2K7(uTIkE9y4M6k8E94;{JQFdvW}u~aSwDxg6G z%_664?D#x6-LxzbYdVkWq52=Pnof9A2eWEDb9YD2!`q>jwa9gTa#qlWSUrQ%>lIG* zIv?}4e(v6-vZmIOa2|ml%@=Vf&Jn+854MBPL}DrAEeDXeJ3EqTu{3_JtsOITA&9Uq zWWGdHHkR=$jVj07Cc-sb0#k=VUpbcFxMXo__s_$Jodv0SatmJlpl%M+G?-2Di&Zsl z{`hpFa}Tm?#SzmH&n>uS`&x?d2y5EXG(t=;hs)R7_)w}Sr_1F;!M!x)NOk%U`161R z)J@`cJx_=+3iXbO9H7Ug`U{W5k^~2AoJ_K2W zGvH?eZdmDg#rkhR#^Nb*87SE)*z!(Z*yAmPax#J zN@gEy3;*+$bm43Z+&kqp&Fa_Cr}IiVyVgO?2#FhR|4 zNG-*Y8<$f~Re76&76tm#3Z;^4MIuVegM@^9tb$3`Ab86_nz~pDcvymQ$2nMiswtF_ zFt6b0Z3c>zwv^_cwV0T(zrU;LqrSFHYCGw4O(uN+0e2^*&!(X0@%)I}%Z zl%>1cA2fZ|O5;8ZDAq3?(SZ@*ZAeiQRc^dlqk@2A`5SWBrEKiWAoyBU;!&3^L?~pV z)eB&G*E{jN#Z}p0nN=;}ta2aR?q_ciS&_Y>L=zYIb+v4ti}4Rz+w53rQhTOp?@K-H zp6Kl7(b2_%`ip52y{riCPjx6?L|$R5NtXjse&On2%>)*S{&;!v-l`W^TXwDn6ImVt z=f?$Hv$%c+<6Ey>0h#+kCU2MNg$XQ8-y2#VJzZ~5hWGI7D{W!e2c=i~mwk3VD7Vru0F#=5(`id9WF(HxG-V*O#6hD9 z#_ZMK`y5znamIx~25;cY{mHL}!>Rqk%9}M_EELF1wjnSlutZzo#G{}kcvQ09sm(deW z30HZ&($Om(l4Y()AX~RTxNOA^Gg@@7-hcDIcV5NV!DT^bq&Do}yP!H^0y6X=LF)dy zkuAuXkZ;kRqiK4C7Wa2we5DtB6FmeDNu%Iy%`T;ls&8yrB7VqJ+FZER%X@oG)cfk3 zv@3V+lO43v+T}TE(lyDZ^#d{#-SX|t(V8f?-w4CmC>O&a2k1Qn>EW{m#Hs*CtqiRyBt((hAaf)vR4zvm^Bw11^L~~sg*sN*Bmh@lnZj90k zo5(T`uXPXdXXm(K6N=13ii=CC_U*Gd>4+&|n<(nkuF9lEeg|s+Df5lGQaq~JE4*mk!V@syTr?2}za4T7>33zu&P zDZhgS?G~ZY6${DuzjxrE*UJpo1TTjbKkdNETJZffTB+${8(Y^rqd$MOdV2c3+qs*w z_PkGuuk{tp1*Sm@u&DnGx8h4sbqIOc`5LL{=U}-TQSTvX@i1hRp?7z$@wn_;Kt1~5 z&izJG_PqAPMj$#{Ze`%S6m+RD-V+c?|gv0cQVOH)|yG?nymk#6f-c&s1GGmv*Y6s{IkQI z+y{}?3613k!QsVQIuhoX`kb$O% z`bG?Svw1CmDz0^Vn->0yk}6w2r2LbY_YXCeen|X~svM_)w2`BgcIj}DAhbvd3djv{ zOsaS*ska0)pyv&CWT3RA&Q?9MIVD3=HGiV<`1M0)Z*c(4qcs0tZ1k!rYa6PtX*R zFaGO<#58JkhjPub0&j=QWYmk^s*bS_K~KpKP+PEJ?YhL#sugmr(}?ZH(Oz(4lK2K+ zfG7HU+#R9(;UgtdVi%b>8 zzH5BX8bANhN(4)Zn!%T!*kT*45?U;hIfZ*j?lM<4G;8Jo!3`}ni4-bZalJv@;1{Y4 zl%V@aAWugiPlCgxb&q~L`&3dH2}~~vCm>D49j)^}(|v=|Zz%Pc@@LLgy$NgG$o2~7 zCh2nGf||j)nek=FKEq<=WnlVAE_KsE??;yht@J0HD<$a&ZZUH+OZDrQpEx^knb-^F zjAqbNwXvLxw@~L^znL_~6Gp6VZ9$Cew-A^yc!Bj9U|uPxq{w|WS+o}6bOjlB9^$O* zdQHcNaV8dodo5DeBGwmO8O9fQjd>$y=h{9k!4`8{CBe{zdFhUNw@OraZ$rglY_V{b z9EX5=28ob8gW=3FUlPZYqLJg=V$7o4M_xu;gZtt^LCQ&B;s)+RtBGt4fP84JdcS17 zZ_rx>aB>6&9}rv_!Dq7zJoXlZZxWV0!eRGO5JVOPQ4>;ln?X3vz+yOr7^+uP`%=PT zdO@~sCHDHNhe#NGI->D{yoV*eB8YsdRz+`_Qj7odl{+dD{M#oS0rbbZ02zsYPii=v zOBhZUQ!$yn%-m3=uCDu>IgiDQE=>^pWN74azU)b5VM&lZB_PM zB(J0+j;xn)CR<&^ko7^_&{Bo-9!WP%LR7wf=Wxh0{JUUC$|21W!vyMs^OD~fwF7E- zkU(vMKYI^zUq(g?##Vf0Bt~g`dyd{<t z!9AeCgXlqFStZRgGvgS<-Aj%Q+<}BVxq~yRBgQ?w;Im za{6|?pHW(??vCCtP4{W*2?wIHo5`_b|7Ib8nIqB=TTaJ;Zxkz!o98Ng`sg9N(p56x zB-zl5rc?RDutwz|4;y7=3a1R2=QQU=FQ@XP^I848sa7cfU!Z3X{0vF0HV>327__<9 zR|`7f{t7L)7#fHXgimHZ9_TPurN_*fUU4zUfULseES!hWf#P*xje0@&Aas|mkZq9P zzA3thxc|h`Z#c+`)m5;j)ge|QkWDa*z;K=;W;rhR-iH&gC#`r|5EzpL?nDcXTP!b7 zxc~O0xSEzu&3iRgb!t3`yiMlV-Gq>mEfW-?Gh0LQLtE`rEEQDmB}J7uVX!_o16?mB z@OMsz_^$(+Z$O_8Y?z~d2eY&nex{P`8SLeb4tk*fT)4eCy+F3v%+>vF;``=cV}0kH zV{sDMZb<5~*tXQx$O*en%C`xc~Zb7S@t z-}*0pCf^u;Hl}jeGi+gIHhYl*zO8r2ea;hV9g34>zGYnfDyO$6L6_8BWon4$I?=oO zr@gK-PKTMPoWo$~-r>99Yak-%lCAK_hH2rFU}CfF*V&t2qTcc^<~BL4y(8J11*d&s zQt6LytuYm$A1U+4IiJg&A*x<^W;`U_&7-`oQX8T{8GU<`F5D0JIX7u(l~skVe-4-A z*3{o~Q(F91@g4s9V`XLU*gNsPRt!be*5#f4b(FMsJbV^0pL(MlNn@)9d6fJzRGl0g zeSS3`Te&egm2X>!1Kk-0wa`Xft0~ud@&CNGc=43odB(nbe{g-vN$O6$nD=~+=sNSe z)Al#my|xcM^%lxzAl7r>;pM;lFnREQE8TzDl~c_rz!C+C%?s@~=mREyi71`bS{Ga<(Gp_`&4^SKJCpb)w;DKa*6XWZRYkyL zS-i9hrWqPs@wr6~6LAC6bembD*-P&x&X6$U@^9T*sxy=ePZAH~3U49b0Ct>@kt^dv z_X@#b-FrdBa!y-+!)iqfGQP0$FG}b6=OF)%7w?CM^~ZoSp+BfLmA;L*rFLCS0wC08 z5@3C|`NMUbqVdPLu%|S=ZbkcRb<{;^Hsg8M0iBur^23E^xw7E2SxxljI%cW-)ucwv z80Z~7ljIFKC0GX^ar3+(sEijOG~{UVl#5)sOM*S9j5O(?IWEwet{4zv46?RXS(fT; z(p6af6sb8q+l+=<-3ApDXl0*22vU>?vqCU{1TSEmBU^>dX#Oqvm0sa%oG7W$iVrzu z3o25{y3KO;6Hi)h+6wX|i-#i8I>}#!uz}2;2}wfCQUFI1rNR)8PowN zbU0s9lFqm@=mB;2dh|%YTtO!RomoZktVBZQ14-G(LV!T{jvBB_7J6%dz5^Z(4k{rM z*|-=ld3<;h=NHr^lNkL_gm?=m9Gv>V!o>4b22!3(4LvX{x7+n6Ngy^ z{C*@)=FfbQRaC;s%#IkRzS*jM@)U|4D=Dd2Ku>{)00(x7tqoOi2sE9LmnqR?WVOKR zj0TUJ>8_wBI)(`mL{|VM9s`DflOLE*#)7B~7A3+0>`$R!;RGVt<4q~L5rs?jN){91 z;*aGd1Eqe8-(fPbDvO}o@10RWaRjdPdGL?mynJH)TX+v_A{3n2;C#u4s!#~=nD~g# zux3OkoAKDgGb$ixoPJRO@V4PCVh*7|(^IGm40XXI9RLNQyOLJV)B39I}82 zNlXmuw;OP49atE{Jlsb`hJK!Ksp0=4m4Qt$ThA^fjWx~^pT}Aff{I*{BoZkP);Eni ze;X6n+q|z^P1 zg&4W+W#f`7YJZ;uk&K3Q)UM@(*Dtd~V?J+|#LqkqLsqdS8sUCKu-HsuV8W&x3l*f! zE)5?Hty`8#=#`-m!mbA?fK5>4sq_csvHq?Cgau|j>gn0X@a#0;U;++eIe?3W&SY|h z4U){2Icr2mezn^Z0>b2K4C{t~%v1oyFAqh6o*$Tl#!9Ve#^%AbF!2kK+|*J+0j)i;o}Ih|aBOC# zOojy)JVFs0?9Xg?{PI7!>&XXFJjjU^J`LptQ`!dE4)p$!Tv^JP33D)8v#Uz)+dyXl z6$t@FY@|DDk70y`8M>fhEB3oHjfU?f+eF_lIftPM*f&Zy3R6o3 z^h!Edv+q4{>my5eo^+Z(pAtlh4U}p~-$stRuJP}>0w9GU9s}rJ?A0fh(ysSTvDtk8 zi_bY94Y_|=WpzLoTw=2 zS0^Vl_$9ozuaa}Q^^JPYPH2ovc#0lWgiAU#p{amLvniwLN94qHiHPyQdq_PL7m?1` zw`yRZ9yQ|!1H12N)d2P6eFt(U1c$VaOgXj>h@g-dB$XvR!Q@aUOwem=E}gz8enNdf z6H?!FYY6LS8OY#}7(v5F9XOs=D~W<0-foZM7VH!9Wa>L0@V26 zyi^`dY)HuV#7k_zdS>a3s}Ucfq{_PoC#}Ay5}eerulx>kBE=J_a{_!e+H{*7^O9Yn zh8k$HMzuC^)OJ2~iqOI>OO+`b%xy~*2NSB6ElVo)RiJyy!?I%s+^cO;j_0y5$rlHK z4N5pf8S}r7ZzFFA`{}H}QYk5Q?0yy4-HqQB|0**S{ zwhlD7;CEDH0azJXK$~UtD;BTa;B-b}MOXQf4ieLKdh`V*F{ln7sFu`26xXh0DuX<% z^x(8jlOAwnQ7%xf9ZN!B$gzWzkvEYn0e(pS+t1^p3fO$I92(=J&KT3*I z?RnoFezu)pPCw+I@VA37=9qrFn|~1Y|9}`kSxhgRz;p$5`*gjqIC@GCec$`bxXKaG zvo&|&S^v#aNUV3Xc5HK!pNF2tVO(&DLzgvuh&2YJc5=hanL_LVM2>YDHSW4s1lE+X z81Ad>%B;`Db{}}s39dCAs=dd%NKwJ<*+0=D+1tOh4M`V&?in~Qd0or(Y}r3tFkJLH zF8}uMU>pE)I374lW!l6OmS8KVfReEJ$~5geLl=u&!FZO}?frZ^zjR|Zv(DVXW+xnw zL=x;7B6+C^?Mhm6!D!|(?7C?{ezjkjXYjVIY&poEwtJ;LAXtmi$%VYjQ?u{E5aGsv zV%tV#fI{dv-MT+=!)fC+@X)%j9dr@iw$(c z5wHr}sw7xIG|Op>gJeo7d4^Jk7=2 z(-Fg*EXDTihE>)3c`o7ZFm&}h#TA7aWoy|_XSL@jxrGJWWDy3e=Mt%G-NEeYmS^kO z-L3@GR2)=fVTxjPYPBb$Ym%LJ-a&7e`;0J1oN6eDfNLsE)xSG;h2WA?ACW}^^Zj1R z!bv%ocEbH{C&|7RXS~`kBRWA~Mo3VP^RVJ^-7Eat@?7E0cvn}&dHdx=+^NCN)?A9` z;$XUmA$`Y5!MFPxS%O+-*C(l)(d(o+)s=OSiL9Xr@dpXS2L$V--M5O}#Ma-~j6D9d zdetnYJN<>qa%7@!8L~*G8Iwnm&KZ+ZoQSquQ7;4aor5eJ@i##O3)81=87}Jq^*qukBoANjJ|9Q)|C7F!F%< zzgUaQlbsK9HOW!zNY8s^&F@t%zED-i?{k#)_!^rM71kVkcI95w9?q54U@&Zs@5{mn z_H1)Gd_1BMPc7d(&&m@mV>laAO6~S|$(R?ODI0GK5T7?rfeFXRlO+6@^k>UM=?OW+ z|0?mv>xAmA9>$9rdjxt1x?Z)dw)S*w%U73^2ffI`|Ej$)QvjUZi@_7Oqh z5;szD!jvRP5l@DsYu7y%9Sg{vU{{2Mf&s<3-(T|K1xz%xT;ubux%^6s}Hk z3>_LlD&f0ja3O6HGqnVy= zd*Rv~5p+x-Jt-*1eN6Q~?^+D8O_m_r&W=BF1Yy0$M%A&(5E7Hl(MA{B$MTF|V}(7V;w zq#%pA$XR}(1w{mpx?%q9R3$)DEsKj>`$ZNWt$Ej}5Pln*PCdX2Lmo3#i`Tl#0E3=w zQA-=9VI0H;;pxZ5(ub7MN0$pRi`>VAw5IB?g*;Cv1I&qzxM3DS6PG9AW%TMhBsoO@ z=kj}H?|xr;3?|H=3{AKGjY*)uytz)xm{b$z_kN=1sKm)p#aC{Ie6g|V_ddB=8}RyU zh#GvM#QpIuCWp1L#JnN$L0{-Bi&w~TTZjCuY?5M{_psGnB9r@rxASE+edaf&5*Nzm z`{kMECX#136ph!X6O8I;!U8iZjFiHyxgX~$@*|48=O@~w2nT+6i&ooL0voBjlh&Kv z=^B49D?p%^fmO%%4UBs_T5tGkumJkU@^+l_3iR>b%(Z<5vwf=>D)80^@uyqTwuj^g z-vmWytiOA2fFi|A=qaf)(b9|sD46Y{l;9=xJW?HTIHM zAINk(JL*%h942lRmgi3 zphjff!y_6()r24U_EOPF|D}n>I3A6a_)_`opvtZK%u#@h{k0$IkArlM@b_d;-KFZK zcW)kZT>Gdw)9;+Mz8ssBMA*JOxwB*ZLM*l?m4lJEf(p?C_)#f?%>|L6as{|s!i;Vu z`;*eN{x#fYi$u!s4YL!u7xn2jA~2A>+^2r8?mFT2u9J4#Hr2?&z#CmMJ7r#L2m@9N= zMsFz9f|mzs=f6n#=^{P0Qn$Y0DXS{BhASNU6CuSlD}J_$_GWP7faK1It154TL$)4~ zO)ihcLvk=!4(ED@_A$FgB($m|t#ZMrNsXxWcgspF$Pq3Qyd<06jphEojd`AfTm1W5 zCMo)5CE{<$BavN_uNZ6~n4i>p7rIpWoz`-M#NB^?8NKB*yt)-*jGrdWkCNmo5w0hn z43JMyACl=+X~HDQ+R3I5C+m!=G@Aq!-KMenl_XEw9#-A?3MyHn9OX8bvRLK`NNE~y zvEekRnVUuxo7%5=aE6j1aC(YfL3Nd2HYj~O-KB&4<(nZDSK;Oq!JhwO7R;ihm9&bx zt_c)yeG9Fo@XxdJo?1ty6KHZ_mDFClLnNF=_2a{ExrtmZ@>mgQn9RE9n{)6Yjgt@d z`aN{{nTg&8?0kV>%&E}wvqZ}W{iUX#8PN0-B#{+|y zljQQA>cE4Caw@i&BJ=thjnl2gm66ey9aSU$bv2zU@#tM>70Y1}Io@>DhckK^syFos zqjd48NpU|waoc01*JT$ZX5O(d%iXET)%xrn<8xf>sCzMqwGo`3gQ9z-w=HN8C$j}E zpyie4628-lg1%N9e?Hry@OJ7e#Tmphsw=6KINeijjI489)s>o|8mZ{YO_-3jg>!-D7yC=bL68* z_25EAiG@fmNL3k#2JT3h%!`I((bR;qMJHCYkw3vo%djdWT-usfooSnu%9T2{TW8`# zHR$b!BD>4r`5p<55=YrDhht5{wsc`@f1{_xr~L>LSrfE#QMLm23LGlLssrNFcWGx=vX@)TgstsxI}t_`fCs zjlTnJd6_l54|_TZ;JcUjkc!+E}t&L!-?m#ATw zD#47o8}*$lv@=ZVHF3ygZRrOi6Ixj+NXzojZNa+HSV}n5cWrvSojQdbh@r9r7KTj8 z2J^oe@qv_ah#BT+@F;CBX6ll*KIfnqFR}2w!^N&}lo>5aou8i6L3;jh)9ZT*=*wTm zk;-W1=(7t$xh{N9pMvLHPugZ@uvg3lX?Q9RAxlTGW{Tdx!&1`>%MbaYQZ!F^Wiamw zatWXm7*C!=yah>kY7ax<%h$}Lf|1{~1!=AYTmWmdpaiV(K~Avr(2ws9P!-sbt~~Tx zP|nY7k@@J+&IMlKhY$~JsUzHRcE)R(3pzy2OHX(1zp9pIx|`*U#+7q{9gs!Ne~h%^ z+l>quBbg*qC(aai!V%VH-;NA^N8q!dq@5%~q~Q(S7WZMJnEhSR?JIhi;u9XQkEIWf zz*iwBkStzfIQM-Zdz8Xg4%B|*r4yd!Hcj%!I;gv&iJ4ZYvT1joFQB*yu=)F-c>!CD z*7<@a{wPN?-87F!o8NNQFi|P`DIOw)Iw|)-*KRkpq9lsKqWt)0hKf<-(c$h>hc-YpU-n8r*t}>5j6HvsdsQOqAMB&%bT;;_ogF1 zfG#fu_q4S8?jFDTz{_836g-c~{GDoyV;lcdbSrS6j_({_R+@d;Yci#Jvyj3h~ z%PZ(>apucPtXGGwOZh>=(5A>Yh1?)h3)SAh94C7hN*uQdnb|3lIpW8J!^GYHX&LDS zkV#6rhoL)rQ27GodI}HW)xgD_YXlj)BPYgf5YaVT|J6pH9}%ta6IcoChSYWE6rf9F zmJ_FSEbGVCy)-JK0WGY2%bR3*Oeb25xX)`6hT;Iz=-x^YMOpIvug=$es7WT`}MY8qV{~UIXrCBfGKe)5AP+oMy$oGCzZ7>CaQs zZ6;(jpL-V9{vb^+a^0@-EV~C!zEI+~Y=N!Uy=^dQ@!w@C$q4|lRERj1=7bdV5f4+D0uwK_4~&sjDw)HhY#xiM)B1e1(kQ*MQ{E9A+i5p zCReh!^@3Y{4)%D5mCGxmVDT@A@7;}eXCs2*cf5__BOjv(=~y#mD=5$qWX>xqw2Y-W z;Rr>mY6*G&Wd2tf#|w(7t|L7#ic`oSq0!`JP`YealYD?JxVRd@`3{QaVM&5;oDG)5 zE}czy>0G&V&TNk=DcHGXAIy^wRI3YdtunkZaG1|U>Hc^9YL8@VN&GGMFzRpqlaRwx zQfdJ5HQFALp98;R7|r5Uf7aK%Q*)u48Aobba3g_(2}sK+1*enn4Fu*ha3t^;IS<5V z0ajc{?C`MzYR}!?d7~4r>{q^b%#=B5azWtXLz&#F47jNr@06Ox^`6`VHKuZ&L(nt} z`){M%hgDMXbS6%WwAO34Gx8q)ZuT}A)e@Bc8{`14Dk zsmKNH_{A{H^&3a`ru?;j+=UFyG{N{`3jKP!Lo219!pylW=_ zRdmZ821MgN6pg?p)R`y<4OU7@(dQAbFvrBBULHK{^>Z>tImX|Qf^_{Sw*og7#>{?m z4)Bb9BJxz5HDu*00B6`)9jP5HzaoFcE$)_cTT2SK4^tJ*ak5mGh`Hl?HWHRmCp09) zLgS{ecUv%=51lDK!mWFtD>x zHWI%lr~X6Sf8;!h2V{7#4TqL=U5O*s0qe#qVz4H65g1`9scfqJv3l;*V zRwHN>o{>!E?>Ty&TvFeU9^t#t@UPZg^lT3|?pcfr_MBQRtDuAcTGNJ(()O@}?bnFx z-(wdj?j2|Gp+T01d!8yAWL@eQ5)5*^lv#(1cdyM@Fq^4#vh1J7Ep(Ob=`L$N1)bJ+ z`+3QZ5h5iKs+mvOI3~&u)w}q2l>c$Dn>#6BZZqGv++2Im%FasZSYOe6q)EPXj5<5t zI`5clS)D{kG6d19OwU43y*X)hl70kKT)7z@9ZGFCtqbfuChQ-|Ek@OMw8-ojp8vA< z$EeB7ugTf(@3zx==v{qp`6W!9BH&OrX;_lOwI=gfi)b8c;hCUJa-^u(8HOfoP#C^s z@dBmHbN@E)?mWNr%|4SGq`Kc#@pO1SC~^0Ay`TRArID_Ias0hMgFq zjGjJ@{~-s@MqT~ICxlh&dtcre=kBqhnqlk%+t1aOmGzb9R`qAMM(Otl;pwMVvVYSh zSn0$2m`7l2>2(J{gkyS~dB`6lP(ebXp*=sHmtryz?GOtaOU z6w+{)F~}9)uo(3S0v?e-y3OT3&p9vdNooQ*;gi#!=I5DRuMBwuI^~4CnP*RH4(VDf zsxQ`7%&<)gSc=Q{Qi3l6`1Jfichi;5-47hzup54s*t_agi&mP@{T{oAr6e^QdaIZo z!mobrds5@oQ^L8t!s#Z?>6MCujbYs{PN^@y#}y8gu3mfxxApuk=skf~@W3;bb0Lb2 z(qIM#G+0p$qD3fCyQns$Qpy*ts8Ny0OE;R)SgL>eY)Z^vH!-J!!J$#eL;pj+`%EW0 zEcV19BE3y_3Nj94_zE4~>*ue~^SR>Kuo?H6J06GJ8TXn4Tm>*2VGGRzh0+^Tm8&_^ zy-4|c45+D|=c{oWtC;CQh-?(;=scp_NCh$IcCL(KpBehNxE<4jpqR1J!BTOtILwbU zQB+0X-E5V`IIBb!t2v;8YDzUFTQQG(ILQdtz-7i&MQBlwxWK_yu{)CD;lHYj8l+G8 zF;RiOTjZC^@#%g_il&o+6!VJFw!(w;FCukUcv3^#o*SxS(WD|;!gFk=gLPBXf%LF= zElhzBZj?a)P$9*Amw#boVcdxXK)`Ii#u`H(ovx?0f<%Y zU$&DOs%}70hKB&E#=sE6`7w;T#^DIE-t7B;KDhCVEBM=AGg_5V-(zUB|cFSP;7G{ zm9dpo1H$$X;~*6(pa|u%vEJD@GM~kGc>GPaxD!KVaq*F8EKDXSMKD>>F+7HjoD#!j zAMs52V7HCv;6ht5Q2{2X*Z~V`2QXT7X!N!$PxI@e4=B zSPWr;!(vo^WX~SekUGmvyvJ+>=TTAD|ARHZGUotjGC`99;7vqMSAg}bFg37E)CQVq z0WgM2Dig2;IGn^z$wZoxdr1JBavcc$gPdmL#+G{G43_91han!9#1z>jyxp?T+r86j zL;V0u!9xI8b6)X;zeLz&W8yb#Sv*ZPk-AHA(iz5|0E2U|)>n993y?aMCL_cXmQM|0 zCVkYY7?fn<-nEPkA`PYZ_mKizfhve(k=}(ynO3v4*uf%M09hk^0|#Fo($+v7;bPFM z8=Mx2yrAqC-nE4EItE%qh)n_am`U};o<FuZKY_VzA4y_ zGB*f*iVYXQ3Q7*hzmF^Uj$wWVj&QN~kCMu~MaB4=% zqmf9HQ+%mwOk~IS92pFtQH>+1zNyHJbAV`a=bx^Uo;*(JZMRqc51TRt>tg@R3UdkX z#GhTl%TWO!sys?$C{TX*bXA-nduLYF&lz~hrSxoVP}~Hv>Bi!)7@)zTu3OdkkQl4J zsWKO}{-7KznkvBfruZZ|h&;IN!Qr;cmhdLi8vzo!t*I#TV^shWFqKnP1zvg&&Gx9? z>Q8G>qG4lo?Ga%)>@S&gPwg)Xw`qXwK00TEm&ls-l-2tc-MjzC?f$j z0Mvo+HNbj?$~ZirGi~uk|GpNT_h+FJSg;T~bOxB~*>b4UmZ*r02hd!OOb2!GdG+KP zzF+FuQDi5SqpVT2TchHd!P4^!Ww1a30C0^vz;GX$&elmoMIN3O&@BgSuq2l}`ScMl z0&d%g3%tlYG12)ow(!5j7=-|?cQ8=})}jdC?3pz2c^s6-Ol0j^Ox-pC#ZBE6Wj>s@Hte8WIH4UctrLvy?SK0wDP7g`PCUbl%3%1PrtTlzx6g%Wah8SSG`8jL6WPVHSR4E#!jEi z2jgxYY>Vxvd;WkbAL#kHXN(1hbA`=f;=(kQ&;Ix<92)Rx-8XYDvc=dw!QR}O6&qGH z?6S(Smwc;TtVcL^f>}MVoy^F};#bX4e(++87XDe|Fz=;S&{ZN-FJ?HB=Vn9YqhPyy zcIj{KZ^Ko;LuAPK`kZ4aP(JJTSFrnRc{NR#cxpw|b|DLNn(P!mQ#o80dPG)R-F^Q{ z(a_+*J1RJf59HySWBypvZ`*BjE-}*kF;^z$)9R>$zjbulwd>=+kCcaIeb>tMyKHg7 zUC=YWb)4K>fLn~<`zG|*aEWw;D)ZNsbF0&r)1Png4@I`yHisU1=I60J2B%n4_AI6k zo+pWE@4QQ(r;XC`jXR5;*y*%;#Y0uE)eml`&CRyq$gqJcf&Gp)mdl+-=+U7s66vuG z2+VxN`|}Jo$5FfAAEl*06D|hYSVvO@Cmb%0mKG^Q8;pbw zo6~wLE_!^yK6x#TUwu{ce2^~MtHkJTM~6akP$GWGdrS;qUAXce;te6 zIIcT(5kg+eB64$G{B4kpZ8v=Sp3*g}-lZDTozm`4R{<%|2^6?n?RS_#X8|-8VQPG4 ztl>$}aliD?W`@n#{BHT$yGN!56YAz^Oc?VdsJQ4Z*U(?jU&!F0wQe9wnX&nvHp)fq za(eh<(7B$;Gw%&G6E4_wFO{D`*>-?{QYY9$N~9$v!c!lzeW&kZJY{JCm;dB3+` zb~C41iw2kvZ`ua(jxLXqf2NHc@~%2c%+Bj!?;gyZoVJuA(K`kRf4ohQ1a$kj`ahp- z{=9g9taaxf4JU7{jZLDt+W0QwU@4eES-j*21K~{;jX*PA0c)Tk0ouq2y*r(bztcZ3*tlBi1Ns$F5qs;-|H^!IGiKN>d4{mKY# zd5Fk659m%NZ#_P`wg~=!ug$wqKqccPdi8JUA1X6xN1=x=F5>!xPm#?j75?%8>fCtq zdbr>h5T>LEP9Y2TEpEbAq9P$mQ+as25dLU?Sx-j4em4XZ5XB^2HSP@SoVwkWj(yFu z6EsbJ3a>9yCS~D^Z*fC^wNeWIjurgzNMJ?HE6tn#>Na88F)yJ&WlY}eCEdq^l>(j( z_OV{O$(?zAyw5!ZqMKjW|Sv z=p&wbxNC))IuuFh7vavNFb=pVc4|DJ#R*-IqT`2pMgcu`nwVL!F-Gm_9tSC3xuUB#Ybg%M8Wa z5>zLQMm()3rLzn2-Sp}MS`Ve;Tds{R8l`$S#2ls1@lV=t$=aOf^OiF38>5(HSYCBU z=m**)UC0bHKUQk>&707Kcy{e}D-oVW?Pqc)=B?$`XCjJSoGU?$G&NlzMZ7dDNAvyo z36CtxkE;)xZ|@kgM(tJ!$fEr+RQN<1Eb13p(%B@r>;er(Z_n8SmxSyB=uCAb5z@cm zN>+)HM-d96BWOzF^&bT6T8VNgracn`4cv6(kJ6k?Qc>*-KB>y^kjF^Ta>tF3o8y%=$sQv<+G2ksWr$5&6{Uj> znqg6&(sYT7q;|A$vnCNm2}KUtJns~9MbgWWtN;jiGlc73vHj{G_6uFSE?7Zfk}*l1 zn+AQpL>BZh$ugP^0yy{+{fruq>bzb@#04x1O;{mCVpyPfVfFK@Nb?n#Az?sB43@w_ zO$ThZwk_V|h`bAt6=Ob(ZDFN)Wq*b6Woy}_WSQMBfg{)O;l~K0lfmhUl!9T2f0Id) zjXiXe_9*8(AWB7wykUpJ_B}?&t>$b^osl8w(rKSDRp6wP6^}GC!kCI$f}SxU!PMdM z^#w^U2}0b%0Jmw$|C%GUGs|mif30|QAM;#%G?+hbb$|Q~j+LKrHbA)SN+!|)yDNnj zj#sMbB9N8LqLgao0)~;^i$cl)|`O z|6Z-)R|MDwG|s9d3wRH!wnl~ynHNU;FYB+S>jAT0W8MG1Cjz!P{M&|$H`@&{6q=Ef zX4OMt7w`UJ?#Q};#Me)oUh|5X4gDbO_i@bJqVk4`0|puyV#%XZqMUs{j!*`@ewf$p z&-UPZ(Rm3TKGaHoT!Vv9E*qplZkA_6g3IN~5Bz7R=eF%JKFbTf+nO8uop!E#i^=u_ z-Z2+*J);hn4YnO;A2wgj5m6uV>+Hjd*BdIoENBZl!od7Nd?!oyt|{2P>|9*466E$k z$Iv2(ya!1IgGa-A+c45XS_X?bkwZyYZ~xTEm(p&*#w;wjbY`SIA}jqW%8I|E-yAHa zLj7N|>fgu;wnayCLe#XO(*(nxebp$g)E762M9HLkh(x!8-Z-I(tw-q-J%?Eq5yr@g zYv31tql}v3adEuWd%Kxwc%r3WFUexlhpb$J_>TJyevIPMH2v(RpOPWEAHh*_65t%# z8&8|||Gu(6mMFo?xU(iJTEM`?zrNFts!(6|1A@wQssQ73eA?oF^r()zW#;=#A@I zB&n(>FX|M0+2r5U2Nn+sjqvr!!Al_IDDrHHg>r9i64!O|IR z3|(0}4(Q<)P7v&{m9e(a+*tc#s?IfpqQBse%ZsF6^Y-Ar?TeoxlGvEEmR|!-$t!ghdA;R19kDlxt1X zaX$KZEYg8TinofEKTg1k_<@h3@MQrzIs`q;3VRhH{*-3H>~pac(UyJo>`Heun<6F8 zyo61$4Qh2_f&5DbHM)=j2HpQ$Pen>;u+Z;$F7E@jPAuxn(4Wr9l-C_> zE7Hi0M*C4df-Fi#!e^_Ql;$)Yr21JF;zIHj8kWf#4ktX;hO)XqZ;pP7Do&dWUCid6 z4=`D$qJYvl{@0@BPG%it=Co&evWl*Bd)kYhd}t=V^O=7JXJ7Xb{@a$?!f2@^wXKkp zj^v=8JGXOG#qC~VNHZ878NG&ps~|?BSs(v*OyxTJ1#6-*0%Mh;OqvuwmE)>^+u%v6 zNOVF$KGPhG{F*tIFA>qmfVzsy8N@~l+FU8tM^0NsiOp&GVL!X+Vf0rd!=Iykk{r@f zCv;2VgG?M@cL1JKY&wff8#_pzxoS3llKjX+(6QNwbEk#;q_+`P6eW8)xRF7uTK!K6 zry4N6jFbN#=hij71DrdDK`cIiUnle-?O}{uvD%O^rnNRfl1U4k-!c(JK1X!zJ07Ln zc6NQb_b!4tDl^e}E(v2TWam7WV=)8&ZHc_fLiMJpZhelkfK>u#qEfe5Tnu`fImuCZ zbr{pO2XCWp02$9T8&>I4dI|&<1$~-1>{J8dPc@C41)14me}QpzA%St!d&+TCW%sxB zakjgomSl6UZ$7mQ={pcue1d$ojJ!*p4jL;%C6+{NCqFb_-R%PY< zonr;qDZ+$EA1+3xe5*>+k%H1ap-WQ~ID97QI*?cdAVVhMh)+8NJ3PX9Zkt+q_cx;O zD!4~HxcWke@P5~g z5l07dQz~xV+@p0&SMr`*JZJy@TuS*MT)qX9YbJ-DQ9>1eF|kCEemH7W<4bGDZ^pJA z?xaZL{WT;kmf2eFPfDenyqSNr_4jy(vbnwb))yuCcN1yY_T{vQB&nAD)bZjQ2Io74 z{-}t2pIzw6+SPV+%-dWYZ4pf}>)jSH0%>Qm1XKtJOGg62S*!FpvKVa1{9$HW4NMr; zm@&p?90B+|>GV`6EM^d{8a|0oXVrDD;keDltFJh(y-lZ*()0&Wko!FOj0&1=>oSL7 z#9ux18rS$Q24%DZw{e6tUsW86j_P(ttM8i~nQ^)X&by7S4pEh4Pfxlbmt%O6He4Od zQ1<7&jP(+yjhtyi4V#pl5~8;*jmMz5S-e8{EHSC&hdgI+qy0eWgd}MOl<~Wx6DCqN zkehv&?ozfd^ke&tJ9Gfg&+C@RL|rxc*10vty1mZ zf!ZQnjJgX-AnMnNIg9H~G+fjUFgJZ-jDU^WT)K0#K+S%$fbJXBVwb@EA!E;Pb$hxw z5y*sY9g4fVODJ002_D?t-Cc{jI}~?+(q7m7 zoco*?{}=g$J(=u1d(B#t&3xxKtG%xaE+k;33)M|>%OzeaS)OmbzRH7Ug7K#(&^DvK zGXJ*#U#H{`-*!U1WwcX)nMj6$P0?4+fueHb0RAG#ZdAjva|D+fA}?V#zEx+w25`f} zt%U1$EG^65U8o#ZTt zC0y|4aB)ryw|qZCs)}eKc2y884`ie?<-LDOCK`9&eG|KhN2|!=XO!m*u-G$o=|cZVnNLwFh81SlsM9Nr z?~G5CkLq(+jP_$n!34Kiw%oqTH#4F#TQ3|N5Ht|;SEwJ+Gz><&6Pt0z zuzIUWc5{*tvGTzHR_duxbT}10OKIpM8k?Nl^}?-iDkRwQ!DHG!Tdb!MxVlmRz~MEW z>G8*BRh@e{@oS(tCX)`KXHY9VfJoYGb_L&EViQF$DeStvZH$d2p*p z^3m9dXl%PYAZ^a_lA^rSmZ>A`byYl3p5wsr)ug7og~szfw7ExG+m^4f$}UHj4ixnR$Onrp=)|p~6qMsUay*TuB-uUVHdYm0>ZH1V^|9Uza@rEvl>&0#NvJopZ zMPo5;S>hx`$J!q3o-~+>_4<@CAK8m`W3TX%zb0_GF#eS)ai{a_B@Y*#L4^4I&(#>P z=>M?HvCq017T4a`@_HITd?m=yA@-#klrV3+=^h69^`!6DuhW{Q=d@j)76pr7peL{k zqb?x=*5%$t4ylxWVsu6;Ud))iKLXa4besP|o%elz1gwFVKM7p{8r(#Lycg8!ylZ!k z%jgngF!F9Y-ffc}DZb%zCKxS9q$CU}hogrxG1h5r@lw zH6e^p*NB}7NYG75VSoF>DzkCs2Pj?i13u3pg!LqAnFjuEA_}^IOo?Al7r}#Iw8|ke zAR#C-PDHT)YrpWX9d*5BIoVy<%26JmqkSwgq5nur6`0-ze}%WfK%#q-8IF|`5yt?) zptmv%sH8sV7;~MF7Ray|BB@~6;?Mnfmn34YCP0i|d3p&K!m-E!s*K0QdizV-_3j>| z_limceF>UE#NY&eYf=q`K+fHU26&v0C`loZMj6G;i!`j84#fRIqkoj4d!Hb0aWRkz zqZ);O6sE?8Sbro^m3BXT==_lEhVJk#w$z1@0*wj&szBBIdjL5yOz4Ru8jLl#f5e~= zcqtSFh=PaxS0zda0VnBL&hf-pJ1y$9Z#LLlT&l)o){v(68*sIC=gSmS3`kYS*5{`x_CwAO{3! z5{W^G;V=gyLeJd|X($3HEQKi%qU?mw9eD_f-YhAE)(}eF#Aj(dLzsgSJ zKg!N2O^DO~qwLHD%B%#-L15}0*taKmKU|*+0!D>xFuJ18S+eTMAh@e(fRDvFL3)PI zI3c_P(CM3E)ZICww{C9g>)XM$xlW>1QOyL*gb+)E3QPz-XNMHMuVAUEGX4W|IH-Kz za)17vHHq>&%yk%I%9P~L!SBq+RG$U@z`fMLM?zRwZhS@ltW3M=k@RUkV$Cz@TWu_ z;jiM81xK+Fxg(!R8XsUt3sWdAHNZ&!NAc;KG!b*?`B(AzUoaE-FU$=42WG1L12cR6 zkV(_rJcvDL3R56h&CZl5Rx*YM`$8!fe;%kVKo_bp3ZvE3atNWB;eTl+(ocjW-!y=8 zwlmDqCdnU~Ij9I=`9m{f$0Rr)Sdjf4WFJlp03L`!hWGlTqq7%=@^@JB zAf&$cx6x^cigzH9p9`&X+_X~-ixj4_vp1RHspQ?q@2RZbeZfHxR9l_z)R&!JT@zfw92X415F|h~g2?gsdd~gwIZ)$l8u&tgz^<(>&hZf0Iq% zf1}N8g+@X2rjOs?`_D zUzazim#Q^rcq6Fy|AnT2Zpi8aNFewkdG~edL*&O0eh-QJzRvHE2vorb{>wI58X-uw zRF&-G9bWtr#5I?y5jHyfe5N7$7Obp(--fVFCK6?fzie|mzlRl`cDYAz2?`cT)xvHI zc4S)r`;%qK2bE$wh|Y-+;*Q_0gB>8K6QU3e+A<+5Rf3Fsh53ntPETQ@{Odv?I$z|xG$%B|FBM(zY5Wss>EowDr4{Mw=5+QwJ%<6 zxIS-YjH-mTEPE$1zdRmyl0mnplq0B>AJ$a$E~Qj*^&}i}V!!gJoM(d~Ln2MQ>>FacKGz>t zvt3kB%I?@B{l=1du&j-jZ$-vj0wU;+q z_btu$&y0+E!dd=bXvzC(bt*84+ zBFmWY+xmNqFQffeX90BQTo0z#QT4{Usao1%k$f>Wg%$ZaEz5nf0VqEua6{hqS zNtP)u@Cus%2P+R3cbeC7LVn3Xa%5#OLE{;Os8yUu6*VK=L#3y$_xKH%h!o51C|$cB~Y zgw*#pu#G^ckn5vXw-m)`D(Z#AeexEAb~8`=C)>}%ECJz^9-aY1<) z_In|lRe0Pc+qSJuV2AfSRXq6Q-bQZF?yWHM5T{u2y*&E0SkxQQtI94rN{5WS%Es?HuZP9f5wEf$32Y!=Vn%;D?)y1nkg6ZdJbdUWqW1 znaLA-_%QSDMLl3!F>356#YOG%CY$PGnSK37ud3Ner}L59Sp)kWGo+we?DBd?x{|6^ zT4MEt+*Nuc^S&2g^{k_t{+E;UO}*vNyG64$H_^oMeIoX~1e)G50k1CwI{I*1)^?+u zPi$4~UWVhh*4LBiB|lO%WAX%|y&5UCYwp5v%<2WT{1yo=#R6rWc8uNE%ng3x zi{^o5UbMhay@=Zzl$$jCg$4xdl`PM7n{5W>oW`Q(u7Z;2qRCP_cI}oK#NEv~E^32nnfn zvpWa9E9??yLMi$e$5&UtaiuJtXmR)Fd{!%62>B~^dA9UxHg)MiUPj=1*Yr!DqK~&; zAfnCNz3P=Ui|u8;;lcB6ajnI{^R7Y5ytL_4mdE9}nWqL`vtrL}r$j1g(bdP!^;oZy zaXlab>B-XeuhoNXTqCbGUQ`Zn>3FOcAs_zScz*2oaeZ@aoz6ILPA6}hN_wl_v%EO4 zZ0S+?f{35UI_dU+sC(OJIs0hpcw^z!ZT{)nLvw)7 z&y9-stZn9&`h4pP=Ms*R98i(=?!R*~_~mzww^hXF((m4OuXQ>A*tRX7NcB#(;OLT# z^*`Z+n*5BV4;4ZTjgbmd&Sc&|!OS7Hzd-IFN8FqJt*Hws5R`oL-2;l&d2T$vpydYGywSB7T>j z5hc)4)|#PJ_{jOxf_Vm>^K~Oio$0^q@6LZ?GS)L|kJIyZDE6#GP_{aJs7e441UgzV&3>r#}rw7)f$jc4df< z7C_qgc=NE^Eucm&HQDWIA(aVxB}KiF%j13LdiU^nyY}+5!jM5lL?5Jc%7JsDy|#ki zm!=4f9ph2vCqGXTNasD>HS^paLG;3v-!DmCi=g0gMT~I4nk<6`#K5aG2*Zn*=uQ|0 zsEE1-R^z=EDS=%^j9t!HJ{l}L2W#W8P&%ErZu%H6ADgqAr;z>T}Py)25v#4p$fzz+cpOdG%E%Wg=g7J2xIoMa-;zI^s=@ zF!B;9zKUR5G2q`Ls9DepUCM;BhU51PLc>_1q9nwJ5reNFUt?d<92>#Xk+e>7l7J@= z$^d)c9Rv{pOFl)}7fkF&+VaKG=nJ?1_`=xf6u4!ipeberCFNFmXLA9g@@6=H(*Ye~5Xhz%fE7VUNkkj&)Jpw6Z%PUvJoKT0amgj@Np1 zGl))K?1!d-vW(!D?3sb0FXqCtEm^J8Sq0w?8*fHS$fw=p#Elna=_ZwtbgDK>GNW-s zX_?JurpdjkBqZ++?AD)!@-xjmbF}7|?4Ca3F$BjO0!#NwOF}+6Uck)V?VBFES(sMU zM!FRkROfcR)Cj72>S}~A9t@Sc1Um}+qKiVG*+`x4QMIFSIsLr?QyiN(jx#g1QY^}E zQ%#sv(m%yey=pG z^Tt38Y?=rf4uK6{L;X4yGz@GetEk%)R2a*<7~86rwu)o$M*8mv&f}K}-QpF)P_Rmd zG~#ZN`wBJHLv31h&bgXGf3IV z0C9~yBdm;%NV~C!Hr>TL7-D&_wBL;!)kC;t}gllS>@^d*9{rQe18T9oCd=_F0k<+ zZkqn&PXvvF;$JLA`MzMZiZ^07T(;M4umo?h7j;(=%Sw1$)_d3mR77eh_Z&Ps9)N{O zfe}#+dW4-s9tLx~5j(VMK1W+m?^1`aOcPiT9vLjlY`1DU`%|f{M_XUTe`ZJIdKBw2 z2___6e>xpG1-idJuML&CSIWMpx2weQu8hQKn8SIr4P0~O?Yw4O5yf2vYky#KJQOlL z^4j8wCV2-PIuPgQ#o~yKLHdRv!xv=r8K8j6yR?6ZqpeTc1)o=KTCN!^yBG<2V}Vf) zn)?h0MoUU4`4p<8UNc9hp4riI48V5WWUEmN3wR=(`3p6p52zFsI=bzhm zMU*~y3lgCM5J?2B5o{3Beetp}24|L(8U+qC+IO`HdBw<_FCJ7z1<-=V2O(1faJ7*eS6`Lak>q~N zAk-T~MeJjZ?eUkGteQt)rrdFiwJvG`&R6YPh=tmDv{M;v8P?sCA9#7fm&PM))AEl# zU4u=YVd2KEqfYWUQ`gV9#}Qb;Y#oMksJAe#oZT&vAYW<#9ZRt8dZ#vA{v%wXPw zmQmpl7_hdk2F1|315VwTNq%K)tRIy2X+|G(I-A;7$kKEV18q_RG%#(TXFo-lP^<>3 zc0HOSJ*Z>9pnzm)050%w4I@`BmU|4KQ5paf>{8y#@ITY~*t7r=cpwKKAEJY!y^)?3 zqU++ZmS!YPeYE#nc_P1V@-31sa>Z&Y?BMW;J6eSg&SS;_-j0ZN$Df6Cy}P*~ht}6& ztP#ICD6FnM^{WT;l`BKEa;9Vbfoqg^vi~fklbwYFPH<~yaX?|+*HzWlWtUWoA{gsf+?lZ z4}#T2#`pIdviwg6T)3jMTB4DhMffd&56DW^*UVcpm+Xhl zg8bi&oPm>qc{y2xM_QX~&KUd~uZ=77#yGC+EWGNjcsq{FMm$BtzbdH>U&N;H%Y}sRg%E6xHLBr ze4W1~=i<|+!M;u{7VUZ9l`l3i%U6=JUdnG0al48c;;$I`lz#Da$x>eERqQAC;T;Q~ z2nI0g@^P1@1i|*v(anJ~SUgiNk)Xt{Q6-Vbqq2(8BOcpuf$o-iUHFh1v-!;X zaVLlY_!LQ0T+4kQ%YDz@g7qDPeu4Ddk7bXT+5aXccl6t~l5xsg6oK65s0}J?t~vSe zkj-kmwCkHuvCcO@uNZH;Z<8}a20DgGX;Q$0wVU75X1GRQ>q*2eNX8xAop+l%iHBZp zdw&ZVfh?|1#J}^ATLK3Rn@4`FO z@feGuW_o!aKZA|kaqL5In)ZP@xAc=F7aNP1^GE3iP^r<;9ta1PHW=F#z zYiJf1xHZW?X@5O?Zuh#6zPh`!Z1lwJJouWW>=LJFPxh5 zY%80xs64iEn$#?1+gCxPJb-rS^ZIQbKp`}AUws50pd1>Sub%HKz!U~L8k8>x*n$Rw zLWKZX(D?QA!T@o~OdAXkMVEvcZ6> z9?dH2*!eyuRJybd%c@G7mU~Y5aO}4Cggr&`P_4GJ-|J1-X-O@@E>pjY4pB=$#+>fq z;Fi;-kb@XDz1BP4n;%xbwj=o92Y*j$m>U)HYfPLN=6eRj5A+#(Ci)ma{aPUo_6QV8 z)V=_NDpg`X0HW`@ZTI)ONc5BOs=oQiu{Z1j4{NY{kFeoOeyEr35M8-oI? zwQEh{oMmxQ6ykjtiGcz@SaSS)E>6U{ItUnd46q_OeI`#C;10#UZ>b1Q<(c@b=V?b7 z%PbDGr+jKgeu_0**Un^QeB-{Ma?72_xjXu;3OBue>gjN=w5Qi5|I6rT<;if1tp07Y z=KJE!>V?^PLH5=!_-6R#|)fw6^AaQ z$cGDY%fBNgdjJoC3K>d7Mr?4PyX7iFWR|truqIUr5)PUP_ge(aj<$E}D` z{*WJVre;J~m~Ruqh~b&71Oz?$nUPuGEB3ScMPW(i-v6EjTJEvDZk8^LOg!~!Rwvce zEhpz1#ryLQnm9=%1Wm)5d}8YqXH3oMC%8p2y=bIGDvYhX`^-KoOsGJy~%k7zZvFL$aCy|NgJae0IVxGnhI zly_V(?kIvgfUPRZF}|A1*#^$(B=WndF>hZFRZU(px^{ed;!YQ!%RJC+*d#c|@=JG2 zBC1U?6*yn(N5acRV*+0576KD;fs1>Tqy(3ouVcqrV4X3>6C2LF`r8*+3GsYavSH=V zm~U9dW*GMjRANQtac$lui6tJxyrwMtdZ}8c+p_sc3B2^@?SkO zEi;WRh>4wOJ=bdTSK=}wE_NbW0)AkR^gZo;C^>I_pXD0dVl9z6Ls+Swb5eie>+>5G zlw+EI9v$w)0q(Fs=KuBRpt%(Bu@U7@`c0w=6)dN>VbHS+gZh^-J$Sm%aBll$CyO9E zD4Q1|cqf`l>!}$QUhQ%w>$u_&vS=(3f@uGDH!P=gL1^<=g4k(Oo9bx}Z8PHsI|rM9KD|-%S@mD z#;u`7$YM|LTWy!1`O+~5LHyU^?;E50l*F!}2G(F~mJG^Ew%|Tyn<> z71)m&s==vT`#5gw?)c+diL2knNtq?-7MmrHUWelp?~782-4q^LDR%p;yODrYzGO|S z<3zi}BmpEpEBy5YIj!K2V9Bp=Yss!CKaiTxjqCa`j@FE5p7O80UY~-C>LDVkR^EQ3 z{R_vzPE2s{cT7-Yg~DXf36eQ&Nfb1Or2vl3gRn3>UcjVF1S5bmqlSUT_G_`6ikIbQ zJbkACR85RP!gy55W0J0df_`A-8R)H5McA!bjTy5Xnc=&7Q$fH9a+^)JcwW@8*F2yM zx9NAvAdMW0PfXVbJf6mEvhHMbc8w!50hwoeJvGuF?wUAVy>=5bB2jrBNqjxc=+XsO zX%iS7!DSH)PO3&fP8Nx^cjmd8>GM`$_gU!CI09hsaPk;sG3RK8A}D(l^A`^0*b9<{Gf?; zZSzAq9J>0>5O?Q@-J}e#TDM1Lwk=*OlCDGJ$MSODm;JJ)gCUcw%Z|{kDM4b+u$8#F z26U(gruI%$9N%8^wW9oI0pbLVVI9Wou&B=mFB#FOwqmXM0y zehX2rIAeam&($yaY;BxYD+a0*M#T>H{SE83%G${_g|XMM;#JbXZ*010ceMc=_>VDf zD6xT9OSv|TW43`PcP*oCc{f`=j2!i8em|HrQ)MuEDMwz=wRFF*8b_E<;$a^Eq}&5C zRaXxhWtvx;`f4zT6cfF-dThFG*)aLT1>{88rJr!U;_jHZLfb#jn6c%WSH)dgC*PS# zZ$xJCy2RY|>M7;`L$`Vu6k2CFWS(%HAax%o&$qs7Wc8BSA7-pko*Qi8k$HPwNs&}f zXSL$I=fAlgkG+#_xh^L6##b2vbDdAgOpy+rB?p5Mh&w1z*3>s$^u7mK@|B2#M+Go; zh)#*)-o=ULLcKdD$IC$La+mYLaWufwExnj+R)!&-gG~iy8d>Je61o)_* z`A;a7Rp_M#Xj{!UIqZIg-_=cu;}329{n|CfA1TRe21F8 z+>-$H=|e4&?04&=^mi@i?x?R8Wl6~O(&NKTmdph)+8MRE?*J$d{&H|HTw7Xht?yp< zE^@q=km1vRjbzo^yz@+lHgm~^*TQ=>?ihUUGS@k9pL))>No%<5a`9EQbHTSAVQbEo zQxB*E$@*$7ahXP|vs!Tj&$_OsL z|98XSk4g>$NBzN6jvJN(O$RlwU;5!T)!6|euurq-0y%)9?u#bDGKXHt`3e3CLp@3t z7se6Y1O7sF9o2DahEzvaeTD2Y=@q_SJ$0G)2(a>&MBBjrxy}(aU^Tz4+g|)xs?*zW zcspvj?ZSE(Dah+{eW_bWiR2d7>4os+w;-#_nsAc}5=uX3r1Vus`}FF2^6Z3di^P&z z=>~>V(JyYl$eqlx%haw71;ihTO}W2J>BD40lDUSB4M9bJz>+HblpZ5xCE5#%`9lQm zm;%@fE5uSbK=xFSh+fzkC`E8(prkFOYxw7-0%P^pop3PcD&^lM|ezb0$DCJ@w?G%ODT z^+zs|Bq>zXH0WW&5kg!C9w13!+EcxN8g1$j|+t@oK0b+!v(go zY5!)&$r_N}60ps!H{_ZFfR-in_CvC!LXkA<8?;*xY*OHTC6v-tHYLe7@jh)A2PNuo zwtW$EHP$*i8I59KA+<8JBVym6!N1syp=sck#irICi;XI-XeUFgj~oZGV>Rs7Lb2^@ zRIc4TQxZb9V_+yik^4>3;*7Pp;=Nf<_0=xqdQ76F5{7-aV3L+(IPSsN>6c&rjHRjB zT)K*bxv(Nj9*>1q%0@1X_+YB}tS}Qe$CkU#Y$`~+0~P_iR_Yj2=wMV_^n z0NleRHZ=^t5~-GAzTWt`uFr0}iLLD*U6t%z-+syA-dmsHy|r(^ z5_&-jaEI(^=g5mt(4;@lW#;T$K>GZGCO;0v_s=ui2Q`2NjP6bYBtyE+#P~bf&^6Ku zT;d3Jfs2@Vb>gqSJR?_E*OE3++^y#6u9BroUTinl`aHa%me{g|ZIsb*Zs`Z@ zYabrke~-pFh)?jhKRsN5^4%o#8W$mR>im=7b{lA z=1avCwAjTn_xkd%m%rx4Hudzh_v+CUm7zR+v&I}(J1UiiFZ5a3VPK(Y{jmJ$1(eUT zka#&%`211KSnZp+F?+mP$msZ=>ovdLb)UX&?7fmywtr85dCYfnJ`a68kW4iGkatP{ z&ZIl_y%rGS5M>>%SGSiP9kBOHKp-ITr9UKwTo-Yb4wJbMkc=JpW32rRO$UXW%W)gmk+Y0r}pu)c5>2AxK(9lPaRF z=gVufxjJsyx<$%H)bM#Y`^rJOUFt>pZ_QyDc*hqGq->V7!%D^mAv$3AuKK6IHXv8Km2Lm>?NLd~LhaaOHK8p#Y0F1-4fvnWQ~a+7;MX0Uc~xWf@lTUP zlR!)}yJzmHHHXKg5;ZHuC3>qacdPpqx8A4W#aW&GQ;;)VdAsUTj9)l+y_@YL*v4SNFrl`btIUc=vKbUu&j)hO)MJV42O98Yr*gIJtcCY`nzfr~@FP4} z8>p4R5x!nrN}-gmaNK!7qf0OekRC_pzyjYFP_e)6S`<AN|h!$-{Kc4#39x8d|fE z+KaaLZd#h&eo2aH)id{6cH_DJRQ^VU=QJCvh45{1L_Y1j@@xXryU^@;V;?k*#1I`- zO^X~FoVZ{(!e?X_0)KJ!BUy(`_~(M@tCM@TpC$!W5-k>6-l5l}$OPtNd5Q$1vvcG@ScJa8{-W17-qx@baHtiPGkMqpm2;X0 zGPSc=BU-ENZ4yyF&2nh?tNYIRFzMtn`lvM4JYoNGn;E6+qxo`hQGlqUH$VZYP`A*+ zBL(k@`8-b{#4_ynh#in>XX=dOFt?D<7**KVV-m$ngykOBlXe`dmK-x7|8UTQI!nsM z_*^#$xHXr*eQam}U-h#c<0P-~8|@EO*8ACHt}77%N$tfp9%yY!`WU8>*3*cf2V7U{ zR@UGEnD}!uk;glzUbqpctvAL#dhWfDtfdB+Xo*QfOHk~qXFfnYYu`MR9q3DG$lADa zL8*xC$le{3kkr_urBUN^sCEQbV_a_NJARQq!(_gj9@$e5&-OcYUsZbWV`nm%% z*>bKn4qwyDf#}GU&mu1b9~+Ai5=g|1LxNEFMJM2fW?8=w zk%^=|@Zn92i@gVWizBZ}aW?(-*|8fQpYYcuHa)z$J^1PUE%{86(N&V2US!WKZ^4YP z{^_H1MTc&lf-$!{X?NG>?h!_3n6vfh40>Bu)qG9Tsz1H{YMcXb1KefLl z7y0>BLyuPz8H`D{3nC8;73h zt^?;G?kbpSBy{n(Q+9U=h3Y}>-}OpPWg#=DNLuz>&ag0ME%&oKo>|eD_kO1Nlp+t7 z8KlVwkaJ`;H4}LhEZ$(DiTuxL|0#k+b83^r&Kt`Kf_Wle|J(Nc%o1i>VDr~%IGxS) zO!ukz6z@f$x03Ns^aK;bVv0`Aw%i$R^H!vY&@1-ibojbtc<#0?MkLd}P1(LW)jKf*@b@ z5JbK9zBenehxW#_)%}k>E1(VP9tH(V<|xkRBL5o*l$Y%M<5a-aU`d;TPmP6k%VmdKLDOTJ8Vu#{V?- zpSHe#4ik2A;UCF#Ut)n=s;F2O9J6ndQ`G#ZhdQ$axs)FnekMH}+S@znj$pmtuPA6?MPGQk|J%GbLTJh<>A;Ol-#i&0IBMU76mo{jpdzdBvwsZ$vA43ztpS?yQu;<_ z^pMF`pBrUImyp4qh;TiVlUs-mI{d#Lu?^|S|Kkzv1*`wpBmNY@qJ>{u(E${4vy{@-gK4#TuP*WNnfnSIi1Z1kcY! z&iNZF%B2|vifa^~AMnHvt-a-DPHI}3ivWLa)Dhy?(ks1aMT=<(w<@(%&4W1HZPL(c zu7-7g?kkdT@Q`aL31V$~@+zgl(@BihFji$aApgH*lYiX$udA^0k0iM-L8>XtC|Age zU$H36XgxEU99qc^BsG5Xi|ebWf{b(XOkrtIkdQC_{Yz*j&&0Jr_y5E>3(x;@zZ<#Q zV?09Yf`YY?5f3rrl|)o`_zcCnul{LWFU+C%V4v)_D#QKksgurtXor zK`t!ORjk3GJpI}s=kiff$n`JmB}T~>EmJFdUR~_5sw#&f3fehMxhG-2&_Y5ZBcVJ_ z>?93=r|>gow^O)OQt7^%*=W=iLy~jL zvFw~x@6hUSh!=ycy`uN-Z{Ga!<-zshwzT4|DJ80-m)+(fb5ck2+U=XJjg85yf4BlN zctEC32|HR}s#fVP*K~#NkO}F0ynk0b!By(U-W`oM@0OWZ!MVn*LTEdqZvW zrsdpNF9TxEIZibCz6Z7t*2k*?PFY~`#i(Au%X9J^KU>Rp;|EUGr{eTSe=~Q5glsWP zUsh=y6ADAB_vNOj78Y$HZx*E$*L9QMtXjS$t5V;%`^6fKwn)Cq*T*zm*#pgX!*z@B z`0=cdkgO`t(Tk?>bi)eEVGWIKve{wX?n?s|T;DOJ)EMN!=+nb#T{oYfpU@)k&0gor zH3CP@)n}7ia2f*@g5ZWCGJ?hvX6s~1TRwK7y-!5aQ2cy zdg1qBUL60CBG5q4`KMynfOnN4G^Cw&txjh52=dekRW^4m{A$P#=vuRo#WZyfo>W(bL>`m3MWoA6W6mTjt%7`sJ4s znHJm7!=4$moDs3_6eef59>a0tu& zaJdoGpNlKADedyO0#b$mR@XSfvfeXAxNlL)L>F`5iBc_2M`ofluwQpempVmKzyxrF zaP-Olxa|mh&-rfijxmCS2sy`8Ff2Q|LimRut;k2e!VYeaxPj!!>ry;A9qBwsO2-Yo z@SEqK?rv7{)!!y-gvShxI~*P_tDahQ$xDuR=PvUo`g?Cjr+~5N%~D$~#n$)q)17c9 z34DulFpKq-vuJyCQ^{MmnsYPlYxf-LpzZr%WC~f&!&_ea6YL8=3cfLg0r;|x9ttl6 z>y)b~CVyD}wum-(E`q+v_mBH;3H}U3D3X#H7v#FTC|znI$?4^i zk_}?B(twWv2XJ(Ba4hXC9u%>&K!#Jg~``Led1kFXAZOL|sn(Hm;ocs;$sUvNusKQVRjQ!145NPx5e z*J?(&=sc5Nh5OBH*_mQ;lh`Q_#cK`HvC!N$7HJAex`z_c99JEj1^IBSYN_+|li1vY z;2s(cOPdviw6C9fkv=N4ba;#b-g~%XZ~0*{+GkD=wSX~xg2s(qQ;X-655!F|xYUwlAXy?%n*%>COr5e8}JW^h- z5*aBJ(&sW?Kl<@}(F0aWiKx+@{WCO&^j`EDt^AUTA)L_{H#2fRrBhQYxxiP;@?fN|gx!~I0V{+AJuDilwK>HV=8Z06-zz(?p<`e^!%$~95 zT<@z0AFh05jjwiwD@^cDK{=6+*+m^mykfA@g%7hKoNW?7<=9-ow!|R1-7)x5?r*_N zn5&vU6A^4Up@P^+(79m|nH1O2Supm9A)&vzamQ#33H@YKlCW%y3SnU;Ys8N*`TrC8 zWIA4Vx76&ySxPG$Tyvcb7lpm~t46SqmF~~z4y^iqRR8oaCYT#;k65b& z4&YBOSbwJFq0ms%UT+=`7Ht^SJZt_X>J^r3SN(*1DbG(a9(}kdZ?O_|!`NCPd7hxk z=yW<+-+jyFlq;C^la1E&=+ya+EPD7cwk(DMtjSSUt!vT30#m+L#(=3l=A+8mIGbE$ zGTadsvzbrriem9IXz(T~*mb43>78f-P;CNh_Uq8r8!SmRpGyC?iAbX8LApfv2^C*O z;wnb)CDc@+i%fF;cS4PCrc$4(R<1u;%y-t={OlSEO<57$8H@{@d)uh9RI73Hu%fOe zy>gkXXokH@$u>5T=)^xt5zK~OApa*i2|xYYgM?;#q%e=1hC~u zk}pc^b||SPi-+%900IlG6z+p=HSFJC2ux#Y8yMqNT4bf1gZoAQbM}Ik$Y{?8c{;V8 z(G~Ui8{rH6RVrg9clV|Z)E#I(63OazF{PhtK8{dSe53m%q)#@jd)64Fe_FWg${_fA-#}#lP z+0J}k)m&SZTUu6Fi?Hw&46Kt2dN@5^6F3;|Ud&{)G?=eLvYs22yG>ZS>D9qeZ!KC? zVfNbcy3pj+NMiWxxiK27seHOb9=e_=zt+*fI|U?o7*z0E3hXPbdu9c4gUE4G-N0I4 zN#rFd&uv8aPW==M!_~4XE0%?3{)U@kn<>`gwS%W2p2ZKiBU+;c5-9M?FHD*3~1{9P^0v5GId7|<9ZY~h*CPh6w0^T3=dI^+r@CiQ+YOq{QBHybkHnqhs;(gxD z=7)cA9cU?Z_2zAqnZ^K|lR@j`yF!_bcJO{rWt#1FMrm`vVM$3i(>U z!POV6{RIS!&_Q6?%sTHxgb8%EM-D6(DVa!HvbNIllgHS3A4>>NtM)lJCdF84)ioa0 zeJg&|?|v}}Dckto)DXbY_CGS687R|jXUftGi2@1Sl7pd>?S7;IKU}c4?WVB75&VPzH6pkHMLnMPLSeYa zc3xPtaY$m)wCLEw`LSfM-$BWDv6vt>R|-Uyfcj#Qiq~^#SkbQeZ^x{8uMGhn;Q?7U zC-Pl#UNbOU{4v3IWXb_qKjC%UYm5;E;$dD~f+5-c06#R@V0%{BWX@bZ7g${X|0OP{ zfZ_rm?g@o*FE};Tl84cCGOO!b@NxTg)%-TwE)QrP{nxC` zr!}I^rv?Ad>Z?Ho_p;kBuU?3~mFUiJHc-f*FwA~+UWHs7c7T~qj$s*T_ zw7?v;V+~fysJ`ze5BN_TWG4b54T}xKKq2l#a4(d%v-qTpWKUj~n6C=fC;=v$1Qvy^ zrt5n$*UfHql-UR7G^_9e8E~A%1diKY4RJPIA0r@buW8NgW%TL1FN+1IXvox_N~t7$ z4`zCZT&^3wHX?*?cGm(>jH?JUv!<@{tFlDj)Ml;aQ!3>d=aeGpC zYa+7M6|j80^;36!ht|H?CIU3DD8=WmoWlbmepkgY^Pd*`_9ELN;`eJrdTPk3=g~A( zsf=(*vpD@is)cW%89(8tS-l$bb&(dql~vr{;8h^jLXAeMM0v^O5{mBC<&4M`5$PpH z5l_Ii>&JFXfKFF>s5EL6=a81LI9faC3_A~wtt6|{Qg!p%KZt#dKLK31p?blaz+Uc! z$*i3v6z5bSO}FmnCH_CPw}7--?x#&|XB$iwPccdc%ko36xF8 z-$@g*@S1d?Q~+^B=QrFX^By`B%2eWAvvAO>CO_1bNINgH@DV6$6i2vw&=oLJV%Wn_ z&eekdr#jWG6s(aJ*DFWeUaGj@HVD+CnaSAmpGM$UAG#1o08T@G)xDejr7M9Q_6YZs zYym*>S30oujoU#wY^@>r`FH4RCYyLD*`=)mG@n0Szn}J!4Z3R~14ufS{ET~Or0lH( z&(PKv8zEUsnj}@W?ekX_*WVyB11Bm|WQlJ|!c9coy&}7y`6IjOo^d~Xq2#mUv@DY; zXW6?}IkvN=*FtU21&Ph17N0OEYbd&;ia4-+bPk<#bGNVlZsIZdH!BzCuBePddbBJ9 z9yX5&;l(8I3;J7{ug?AB$$xJa#+={%KpL#Fj^y(yk1f5YTIo4iy(PW)0QwB5ik+O( z*|&FDt$TKG&(#Sc8^e(lZ{xclaIX!>yWMkp&S->qGK+O)clYel*>m%Wjn!2OXP}n- z2oZbu*%jlM(G}xBZ80GK8QLm^UN?YQ`FVVq*MfHZCf6rV)9+WRUHVl4Ztzp2!PolZ!dK*kaXZ`#IeTxi%CW>pVvMqy4 z>L0DbXZed-@1gO}lt~kkR?((q>C*wBIqMavpN6_uS#Rt@df}k5cA6Ar5ve)g_JJ`- zg#o$)zhhh3a^tG=XYVPBcs-_DvvA@Fd&C}EGLqLnigmRJ&o+8vS@UH!B&8<*cHb=u zRElYs{>z`P_5(xtiVXrr0iN1(hr$A*L)kC_CqLKSn+>$aJp&2vL$~`rI7IBFY>GcQ z;VX#Su**4s7an>W`F&9vb^^d^QZi2VnviSfn6z_MO-m2w zW7}9jM9k;9ea%2de94Y&OZArHG7Z=7@M~@PRAOETaNKMFR^R{6oqtMm9z;W#7)qH6 zOgj<-YWhfs@=vsu9pi73=jHP(Q(noMa)6&@Wb=e4#S-WdIJm(6S>rg5qB?#q6S-}K zmUE~y^!!nKnHzm!hST2lvNo=li0ZI;tEMw3Vw^j0<{_fi4aW)CW`EU`tST+b;Hp;8 z;_zvD4{{?WSdE9@ZN040ZFch;cs1~x%*U*-@gXXsVT?h4!26+TWsZ*n2D}m;6NC z8%A&DgrP^T=;>}rXwu#^i!LZmVXfJXCqjTkE)<1{uy2NP1N@w5e*cD0L=NbUq5!p> z3j61-lakwyK*~WY!rsDhaABu8YQ>NIUBylVMi1N&*CHM98ew45-;$kr&dR#oyH+c- zZwz*8G+Md!5q>z-Gw1eEV`HeocsptRv@{Rs2*g<>poCL3uK=3+nn{nxC}`yk1X#?22tlbZIDVoN zf!6)L{TPO!cwnoBKb8jd zb5;%h+&S&HRpAfKW^jIJDeBfcnJ)S$D<3<0q^PjQm}uz!c)feN;}>%j2I+h{JUSFk z+)P8gC#leL1HOPu8FsLkzE;dY|L*kqop>2Sd(dlNnRcq$))mmi!83mRxO`(|YM!aJ zF$hHsMvv$Pi5qP(^^j*$-h}etyk&%oS~6%SQCD{ z{?x?({ih00XkIleL~8yAo#BB80cf%xv)f*i|6Cu~kbE|67ySt9k$n7aXele%WGpID z#(sWe^(}i8#?ee#1BHVXMt!-?Uqt8*m)!}6pn%wtg|?3UzPAUa4jA0LB&gA*E48DD=t-{3wt=HGK< zYBcAb`+xDfj(@TLxX{bKjE7s;T-^A4NQ}~7d^1kI>ppxfOMJMxXfJnpR~BBRbi;;)`Hsa5fu%Ej$G!PS@2>HK=p(I-PN3rHcPsxE(-d6;@32tb z2&Qy^2BcVXP+vNK4fT3scSe0%9X{JU+_XyphjKH6Z0(wC#2>P+n=g?3#MdAH2^E9) zL#M?2KjHnE(lL7@NkLDq=&kJfE*%6v3%=o8GM!KM@Ihc*>tm#iC30xsH+0@iKe@gj zQx&;MY5dwV2de^?o?HAq5VjrVX#*Z`ixl0h=kaMdid6ZaIoE$Pzf%%`V}akz*Nr_1 z*nU1iK2z{SY~;OXEnM#CsYNmEP#{ zdm30v&w(sJZ;7{Wp-ZU&TjD<(4iCXW^BY?+Tu{*SCkKg^#xBD5PxD&lO<~Ulus?q!D*iU{oA~YB|89=K^eZU((0AY*o%CC8 zXAnaJcwh=D0}crSUj<<-!pM`4D2QnNVTx}eGA7|xP_7yO5;d{-&sk`fDd0)ME{Gk# zzenk(L;x=-DLLf}9SaA6yv`jSzrR?5~D=%q)H0r=!5yr-B|w zl55tb0lpdnEC#WH+JVIZ@xNwyu|k`E`8~UUoJ|kqY?o5 z7_~c~B^>(4Y=8N`V|)g{EKm;U;OO^}$Fri~PrFdHltkg%3`fuokx;7g++1*iPg=5+x%52sK0t z3~bId%`>F{g+g;C{8dDT!e=-{LJrKAM#RnF5EPou^dmq$i3pf4Ezkr`?dLRBR3o(n z7V!!ILwlxP0<|0z$^#=!*#mf0FM+VQ$JoM?z~o5uwK^4Jv3ekqzaS9rX_@Cb{C{G) zqC_-{?E5Y7m-qN(Yg{G(No0zTxDI022Ha?hEJKRu5zHuDhPck?DZtPS43)E41I6Gp zcw|yuIA|wFs(%UAw1BKZq3PofLQrv`X@lR}aL^tY(p3g@9C@aZAQb-&VuAfj5S0cc z2E0RM4SLD)Ok~JA1AjIV?+5}}gIFmVr-XPy*p>hC#LdIl3Qil8Tm{nPn%3UQ3)Zj% zAdk1g@b!DvL*xD{v{Ygt3nR{1h)hSzH^nF7hwX#vb4^AIw*UM{X+0(61H_vng&`O2 zLOLX)y65;3nl{~&(6d@3Q%WX*tVCA*5hBb`wA+Cl!It|q7%n3;r6hJ8*i2|jRj>^_ zy}v)4t>BcBU`QYhp{ZLWCJi$-S3MgGQ^3dwHomgR`oCfxNM1`xrCs`$2+acHUk&L- zj#}dWM2z;-2_sumPuTbhh$;jSwIJ5D)EUwBkuC5J@f{Z=+Ulwlg$JC|B}a|4*J92 z84yy#O@(5sDK)07pAq5%wt|2!B@dzu_{)e*wMfYhBJ9%+Uv>hAH3);Im2|WzuB5cZ zFVi^RShZavcRW^&2eOgxr+~!=9*77paI{{?MmcQSEGG|#N!K3}N zXIYA9B)|;L#NUwbBWbYefIR{H{w^pRJ;XmktiY6Y-5Cfclvk|SM}6{Rgu(oX$qIfd z1unh(p*@N-#Pz6F#{bBHcD6fo$Jmvqb7OV{W{Ia-3z6*Tjd_S%1+pnOcR#U^>;EeQ znhFW1xZred<|1VZ00#>L(;*FbCDT%uIRpBqsCPL4{k+ITJCj)$Tj7+-;7J8(gJOi5-$q5)v}x;J8D^406~TX4{OKvn>$ zi&Z6WA{n#wQpseX;-b?Q*R7P$PLh0sQZ}N~oE^}(MkGHqQE8ab`SvJ@?NrWjJAq%5 zBuD{IsS))naw$A>@$cZ6mgpq)i8*k|a!48spUB|5^QpmG>IuJixZ3OgrlL|jh!}Op z5)JYIU4x4m1OC2yoidb%&IE|*{VCLV+F`>AX}f?TLD-zMZusp`&-#dA^q%V0SLHG-kgjJ`Qy?9X+i2 z*nDX2HI>*rJlT6?AC!#8Pi;NgUrOAHi8p9pdcF@LWGZQSxV;@-urM{D4XJ@{I#q89 z{EgDYfy7h~?w!zgng_geUVM|2p0@e8Zzu41-x2t{lON~gM9G?tehL!491~`D)`{V2 zh7V=#mY?6|jN$8&Hm+OSRv+5qw8NrYk!Q#Gc~tlQ&R4xNi?QU!XFb;Jc>3O2(R5S8 zoN{$rT*YqRFn#36;XGJ_cv`z@tT4>>ZNCHi+PSKEYOD1@yB>f&G;IuZ7Qmn5naS1E z7)4ToP<``W1HH8cz#D%m;m2m5Y( zH(cJ%*X>SevK!6*Tb;cn zVU#y5pE%(#112`iK9+5LKFSF`8&0U7hyY)`uZtLz+y%4QpWzsC{UHr^vYT(gh#N1E zn16YWTC@N$TYM#e(5+}^m-dIk4aZZ=28z&Rp9qjTZd6Bv_U6E|&D+5Ym@(DZ4Y@w% zm?JWi{mROytU6Xh_jnKYM(<;vba)6`t<>|b_Y(Uq%)V#+`yqZl#*6UoI$Qh#{2V5k zm*B=m6wh^jCu=0?*l17klIj$f{c5LrTZ;x$3?)Ex!o!5EA)ie;P}5!An-27&xg$5# zC|~Ta)$7f;fKczFJu z-wx0rlS4Tm|K=E#l z@j2Z%XOs0Dds{ff!eO7u{BV>8wXU~5F=(GznlnAj+B|4we_CRgJ=Gj|eQ>!km# z9c}%2$@w_A(6!fUt6D)Y-PkrZI|=2CO8^+QWO*z*Q{GT}NKR?qVqpR3b+4?7AU<~N zX5l??g<#>#96_!hr!qMBSGTB7KXgS?HcbmWXD3HYHCUN=k>b0Gz z%2v8KPTOkR@lQoC<&@V%bsx6vsr8s9~gse;jmm<>)XXePNZOTmG-4PsR51) zE|BXhIj<^XmrcJuVTBu@z?3MzD(ItTvtb%T(7WQMM*>-h{cYMe$U zvt_qhCq&6A>oQCnxl|`vw;h`Z0J>#4n@z1yr}W)pkjOp=C^Eku{k|v&o>gH=__k9t z(CL+@m;DHyx(1tOXo5c^t?+Ng0Dx<~F$IspMWF*euLv zN{`*84&}z*hRbG4xVkk)^e8eTyd{~Za|lF9QjC~3<;ZiYyV{#s&Ou(|0d?}O6tVJ- zbI0_kJ-6@7WFC6LLq0cyMSsWIt7J68I-Z-sv)9CGwgijgKMRd`4zDiK(tLG3=Y@`M zbW)x-9D`Sa=yAOCd@vQEJnsp8oNesXKCgeZnu(N#<~@Sn|2lLsM15!+Zat^r=;An& zBCV?(P@V7oIqmRqaYTCl1Ss1)EM(Wp=<~|zd&hk#PRo9HH_yagJ#!D+&d$aQ>3ci+ z83vyItl-ry`uJjuFCBrAb!cvx6H}tm-4%E~{x&M6rCb-nZtHB7wTyntt%1Ao%z4N1 zIh&zFWY{wjJ;;!sQ^+WbD`9IW_u7UIXTih7%qWVpQFqkSC3VVu|?Ou*s={=D;oZGzuE8k-ppj zT;71!x3H@xMR{Flg7<(#DOpu9Oxl!Kr1vWV0FU<_DaFloGa!3P#EfY1(_Q!p$Fj&H zc2%wqn*6PQbO0F1hULqEXI09DeQ5#m{-&qMvV(6(c5>b2eBt5Awk*6!#69{YQmU?3*2(8bQ2bg zCIzv|i^G60UzTfHQWQk!edE@0?FDEeebJoj)^oY*CNzp>q zA$0W?z15SfV+X(8RrGlH%jfxWYnc~ZKqKGyqX&#bD?+?oCyP0T-%4+;y@R^h^MI>a zPA0u$bFSmS)AN1qRg#LXNRs*Uj^Oh>MBuY_R6RkSb^0DAYR$Hrga8L1af7QNU@xIV zrDHVw3N{O7XZ`R#G4R7rED9zVkZP4)!gnx?2zh?Y7B!Im3@f%H)J18wfMu5>R&#f(HW zqc}e;FGB`#!6=e--imHOMLU0!`$?AZ9>uWu>``HYy{qwPiz8h8>A_X6Y+cxQm8&%Y zz}wqb>7lm^!_7HAfWN&yx7+m9`p@gezS@$e0Ogq9YC;^WG;>46C;1l{S`G165?u1w zO$hx=Kl*|v49k2;qHCp0S;>-diU;Yk`JHpKHcM9{(FeP<`yK|sao;l7Y-Jrod6oOf zW#jpc-ifg1j$SM96>oa5#(WU zBV{G)@Cg~$6L{kQhnTtu&T@7C)M@T|w(t*~73&x;uT05>;v45*Te)~wk7n)khmgAW zAJanRCLH9E7cHWE#85v4IUfERIl5J75lb7dTVo`x_f^I)Hw?F8u-xy5gZ5xa67Qo2 zqz9G^@t3QL_aGf8ED5Ohsg zQK5hYxYgC=nby6Mos__YH3GXq!OH3)7Euwcw-%co8i5r2>UEMq@-l1p6ngK{G6^*$ zHQ7r_p9%gf4_ztYKV})fD|j9-Uq_0R1;*dsPBx>x6>xI97i%e`N97F0rP$v%?1UCA zywAkT4Vn7^omE_9^zs@*&PVyAL3X-BhuZhsB+83})8Xe^Q=NLE1R7C*%MTj|!qy7= zY6sl!QW_}AtKzC=BuFf6+ld4Z#sR-X%k1yvEO@TlJal#R@8`0`doADdchWGb&99be z@W~=o&nz$2Z!bkdwLI!h@7EvuJ5;ay_%$5hr12{Olq9ut$H&TRU$^aB?`zGm;%D)K z)DAvGuerZ+uaA^rv7f3&HfVgV!kOBi*5k{l9a^~8Q_D=oGqg&xNuSpHs1Qxtd}4>Q zCA|w$5`~J0b~5KyIo&1uB0`l{M`c;;dx{bg2N&mhQ_)W;cW9{Sw)ZchsHy07)8|IX ziXg%PfnxQA4KrQAQ+NUhC2fsqUWs5+rQaK!@t&7MtSZDp4e1i6y)Y8DDS0cE}zi7jZtlT8E+2dngta63Z>utrp4sQ8C{XKa| z+vF?d>0pLUm=)Rqh}JP`JwI)e`w)dN8&Hb`-*idY5_ zA*%g2J)#i*=k~y?W?E3;LwML#g85+T3@(b*W1GcyN07}q^5h%LC0FAWm3{#Tp5Yzn z`k`XOK6_R+=NnmcE@?^1%OY?V2rkZvo}q|VLUqi03}h^UiOzVK5m@lu254R-QnvnB z%5O>5Y*P^V-hgkv@QP@=4kjAAP~36mWvZv#_1fzwCT=8*b`iG(we3LgAr(lLeZ9 zW@kv|z+?zT+u_cD0;AFT4rXU;tSI1rM8@D{O}fWTKuGDVY!`%GSo#xNGfe}!I4tOg zU9(dcx&suTyX^qM;tqD4hd0sv1Ak>{+S+*!Cxku)<#dtx%_54!>B5Pi8+N>3-^6zr zim$TWXm8oD+;|6@9)Hc^aTD>eU-Vt?vcpXDP-r?~tABI+x3_MCnZKmgsVG6a6PmAmd@A4VAEShp+GymuoK`ZzzN0gI={!;kzy07Q;X&xi zd_In$giO63iO_C}2Z{x{&a>LSq$Fu5wJtw(wAtd!GahU$wu@bH0EMAMNt5XboAn#@ zl@Z|lJA~QRgWOO6$Da!_han`IrYRgKM; z!+W7aBwnYsc8PAN+ug7&8-aL!#sES+ zfHcx^CX8;|BHksqqZu-lJz6Iq-4uHOQEdbSKhx?rnLX1HpJ^pYrM zow^uEsOBd`2*$su0Bs-0H`%jmZTn07$Y8XtxiUw`%={6dJvP<0f!PV)&IAvBwE^gh zs z9AxJMC?T*j-8I@(N?(w0YxfgN8=ERYJYor@($_eJT%T8~RHlo{hyM=x3}Jm?dAxoz zZ}&$_8ZjO+Q!%_4vq4d$p~;rt*$r@T#Jn5inF}4in&=wlRa@+mBwxcu4gJO>tXEP7 zBifKP{MSu(kr~hVNkcH;53U;(CucPFN8D#pceD~!YsY!izMSMQ_&8Hn1crrLRq6qT zz%xlsuIar7#bYVt~)qR+%bi$bIN8?SWG8%g~9* zq1Z29Fbw-?muKJrwC35ENw#e$KyWVxTxo(WYo3f|2?~S;u%hQ;6q;{f{maKPd zgMaoWmCg`#Xet1B=1vPFa~JGHB)%Tm?SBW;aXXvve!@TcSk8^tyWEXr*ht@-@9Fli zM2wODIIZO36}4(-6Q~=%_GlHj^<*} z+)(^Qp+1YF$l~hOjoXpk722eSaue))?v}ScFV_Tm`6B?ga-$`gVw|bG9d+iNTH;l2 zt>A{g{ob_6$<&bY8d$)q~7o(N$0PA{n&kH`oFMB5$0(>85dJJFB zZ~gDn^BiBoK-2C02}e^Ae>L}ZzYo1E&m(GV%Zqb^X7Va)Z7!$mTDjeSPe)X*lWn7~ zGN+AgSQv2RY2%P3B_eknxghpvPr9vx3&SbmYZQ?{j*hQ5XO%MMVo!QvnF?OLII*nO9n}pv*ydLRoZX*VyfFEziBH@`Jv^FHg3(gSPX-s5a#TKwK{@K^n>3A~ zChjQBo4WNki3K+)xLFKw9#Om1bk}qdZqx3S{eZ?Hb!qqLT@H(qmGgtcg6YP^-fE&t z+8}pkH%FG6#W0z)H^*_cDwGG8x@`GB)FP(c9p&#|lSg8L5Il+@M@A$5x6Jo3FJI3g z&z-Ug9cDxEP_LqShzA4pSP7v@JZxs)JsF!XkCy5qQOND?E`tHES&%Ok)=dzmK+$OE-JqSl<`l?VupOfM;&g%|s`{Lov zGj7Ej7E4TsmZU7*4-O%0QSzHTr`|Nh@hSe>o?&9nwp$2qfTjuO;`_5@D=obQAPP=v zvb_-S1=l;y#`2%X+HMo*K>p|d0p4!J;54HE6DQ;yf#$t%k%H{`7TX8h7fD*={tV|| zzmRlS^yeP^ikZ50Y|)hTEUCXT(93Kr+;ZURC*r!pad53{LjCe8x~|qwf+q5)SvyIY z42k-_SyX=^?GNbL>mPF4DVWD^nuW#jhqXWZg)Eiw1%&|zaLEAJ`fSWR@c-B;y6?43 zn$zS&C*q{eYq~#b&f&1NNs3*|0c@QsDqt*r`J(8@D;)SU5>_&=>9KF-2hVX8arykz zhTHpqf5J$rDRTO*8^Q%ErJgn>hZBrL7vvG3lwu*UqrxbZ|nU_ zW)@Cq%Bb+wR40lH<*vrzc5VUL?Be=+LL|Z^Ti0|Ia5u$D<&?-NKJ#Gl9t+al!zumA z{4C6rANO@yGsa3(IO1) z7QkKrrV;0zUZ9wr`0-3HLXNZDus!U+v7;J$*aA{7o~xbkFrp3PlRrGLU&0KxfmQH% zQhO^mbg)=v^Rr5pUmiN{;Ias|0r*)2kc^^o4wqnPe3SZgMklwqQ7kHlXHOZvi-EE3 zHZPYmsr2nS-_4Seb#1r4>fGbI8Loi{=OX@(ghN5$r zWp(qp#cS*t$8(pM)BW&r0ozEcP(MDcT(-Nd+q7#Z--~jIrbkiXVURk zgX!fTF+hm7PIGZKX&bBs>Ss(2`?g#Sf)g?!O;{NYWzSU2JHy0uHC_}C9zayM|;ZByXD zN0mQut9SwLZwcM2ybQxub#3jjhI6baf0CaPpf;kDZdsjti`nbc8gF%1{a6yPmU&RP;3`h$R`L!FgU#_cHaUJ9)l9rj=V0(9mWp0!5__8l_Enpe zk*>3cr8x2BW$f8gZLCF8ah2Kjrp~BS4Ib@A#gS#TtTLHb{8#AetPp&_MgNd{NC!8y zdGo4fB)F6X{1N?}X7JFb{x!&suRTL#O@t!W;+WWiGbHy8SW+fCt_xNjWB14dqFoKW z0=fsEgSd%E?tRScvua;0u@-8#6J0izEy=saM|mhYHA6O zRG)_%F;}0T(?e*FHE?d6yau1^HkMyMA+5WfL>X_CiS- zBzNaH1||;GDLRC1J3SzG8xx|OEE#j!qq~O|`bspQq6^P#e@*WJ%{!=C`aV#@ZP4Vz zOsl8cjGfRweZ-+6D%1_9nV)MUw}>Jcz554B{Xx?9;lT@MR2)|AIP;BqX!91<^rMu= z|7we(2j5MC=k!#mgO%iABk+@^!gKYcCugZptp(cGQ2*a9DBnu^rCjB<;sd1>{t^cG zvvel>@%JjXyS1AF5Rl{fZe4xHQ!m&@%J7QEe`Z0Na-dv$qFdZrj;qP?1Io%}3A-hS zDQ@gYxH_gD8!G9KqSAutZ)XoI5)eBWuhIT-*h zi)1Y`ROW5&TXsjq!CXZ6r8rmAika!K{WqgaL`Q<2GOWSVKAE>grU@MQXZT&=KU-m%G2?tyP33_b>o74l}B{E31 z9`IfDaecg7u)n4+-<~x1dz^O>`cA*&eLt)BG84-=pvNl2WbC7-yKb)2`1|bSVBpV!Lz-gp0_(4QhaPmnpv<9TTf>947x4=#{PK~E0&xzOTJ46B7@vG2~KIUem^Z_^)OLnhR zIq7-M$*7Uy8XlCyJ*x{q`kfnw%vuM_2HSO8**bNzFTTQdO@C%XD+FM#T#K_^f=A8S zK>EsV3}OG3Q%&M%lD0FQ;oDV;y3Y=D+XCBKcwB>rPfU(7hvg@PyNZ$^(uZrqkEvu>rNwIEkd#QNUP5lnpxC1b_628WfUsyXj7bbZ+VFp zu4BM^SXs+wk*bLO8hq4=!WdIEWO{8!4ErIOj`>8VCOu=?CnXb6f=TW`nw{vcSPN^qQNL;L7uP^`%eu%@uf!v8d0rGI6Rx7rR z&_LNQsXgE1Q|Q5onZmkxlb#!zXkVo#U-81lvSfOc3wR~dhO^~ab2ItjJ5*+JT$aqG zSf<~TmA0s+X0x`d@NSmVzX!C=S_f>(j6I(w=~b0^%2_vfN*fj#SbIs4{#vh@_N}M6 z9XR?^QSbs>+}4Y(DB>qFV>e|>sukO`g(b@^mh-N<*#!>_?XBj2!JMMjdYl%ry5(+{ zza73(5u?P)fvKN0gMj5kfIwm2Kx3PW&T$Xl2=^I6v*2=})7hA?!s6ZI4yqTZP)FRP z?#Y4IFfUKqw?)aIPLX*;p7yFXoB|>F93}lBvNZr99IgN`zAcq8c6(f_w%?ubHnLoH zEzKD)XaAU=S$DuSL&-Cbbtv$f+0^S>-XF;oeI8;YPvJliq|B6dJa1hd2GhO52;I!& znJZ`w&37yZ^eMu_`KII~xbw^dqSG$6YW{asfw%kf>9vo(E7+^+-`KiHh^~2ic7vHK zKL9MA7$Mi8eq;OFw1UR0`Pu9R=`Ob>$0Dw8G)Y&Tmv(J%I)=RXzaI%@F**E2o6Tp1 zLPVYDT;2nrXtoHhfBvbed0Fxalzd#hnO?pr$IHZ2g3_u>dtim&@6h{6*0Tfg-*twbbvQIHGuAdzQzjs4MT(1H6DyqH2CHO2Z*=FCgA z$(!>5{Sd71mtrX4-N}6IZvWxrQ#0Vb_U&T%;{NS$@~dX#YQCDLp)@P`OSMe;J5ysW z$wq+={u@9gr^=f-^b+oRxv4DAr&$I!2h-k((KY> zE+2#JF;frHOb?jNs*-mq@h-EJ&8P8X&Olw=MRF~+`cdkzUM1&5z_%TVdA!r}R~%(7W&>MEI@nE&S}&1E z2h6{C!vG*%$*>Y>jV~DzkSdK`2jw>p-^LUnY{mg68EUEHiDK4h-53 z93bo0o<2ssop(J3lnxE$arDb>q!Fyl)9J+!$TE~PVopuphnws{HrfvPN z@Dq2dU?QoM+bs+~NlsLDH%`+6sDu`N+@CR@Nw3@-+0y7V?scE~NAP@(Gi)ac&1QW| z#0Jc*Q8d)wz&w5VZ5CNMsaV*5ZPgs}}>w7IR*>uDnO zIz`$nS6qc#kCOL?7^UvK(^ZGgWjG&ELSt?p>(usQx78-1w)Er1MB}^ejoSSbgCYNC z^(th;v!qh=!<#fCy4sVdJME1!T8{np1!%RmGn(X!@(@&qT+{q*Pc5)J2Jm_9Kg9m` z5H1OKAl=vD)q73juV1X~2B##`@gEEE32_}`gR#(S7dl}5NiyE)tV&GrP|^5C57&#G zF|Mgei=AVCoG9Ex7bO+r@S=VkHnAXC#}*zx0Pn2QdDeDKMg!^b6Ry9X0wD1arb?$= zJUn02h}{+g!Uu0rDsbcC7OOh|T}xN&mCb8i#FRK)J>@seiK#cf%~X%N-3vI35Tg+f zzQJ0IQ{`9u^I|G@;s4ObDFbq!!pJyfqYdc+Q}%#z($_PG#b3i3?C66Y$2`Zf&$2Ls z(`jJ9`~DlQt(i;A)|6vH6d*IpXit(U841EdgwC>hZ%Aos4u41+)qAcHLLcp?!!b3d zu8at_zB)4z+4Wm8FXVR@z0bp=l8^Yu8D+ylQG{{-7 zY?&1%3PjcH^{8Px3Bj0uCIYmv)4r+0*k4y8_bR&d%|rC$m(ldP?Lj z`Y{Mwit`>Y5tV%hQ+x{P6etMp{_kMak9;-*AYQlZv_8F%bzfp{18*EoBQs{Qs-XN& zIa1R=c7Jy@`1`bFZwJ!U>BqJG(_J)+>F$OH$_}6>Wn&MW5b)XfW*##ApKO!OnE#z^ z5~g+-(EZ->_NvI(^>wqn0Ud~1_Bc&#vKV+goHgG=$RQ>Hn)5ALhHJTB4h)JriERRh z2Lg|UIT_al90Sqf+mBWQe=YI`*4lU}InGki>p;~_Xl`UlXs=a`UjJWce;rJO=(R=_ zYi=O{52`Ja4*6#2ZE+T>8gp03T34o;;xt$2Xyoji+V)fr&XuyqI3@=|Z>m@sg1$Pp z_(Q5StrZaLi{H;zoBI+T$yz{~WGzOe5Hkc@-QQFjY`0*Ag?%wVb9!b_s}d{sDJ9mL z`*hye8(=pi*e+;KTw6RBDQ>8z3WL6IMbruaK|kX=#ozPb+>lc=VuiSun-O~3hln_5 zE0Fvo3CPX1aa*E|+aFx~?g42ow)Sx-d^^pE>L6ETn zAWd#7D>qTXU2MNp_~ERw*#(&YC1FG`2DWDo#?fNA4U6{Q%^|sdy*7M8FfrQMA%yy& zcD01S@kIGEfyok@;tSWMD5&-1p43cm5V-hpohXxM(Bpk)ql&d0E<{^T{|Jd`ukQZ3 ze7pL*#kA{1+PmDk;!FX9+B*bf(mW?$``KQgk<)o0VSA3XNE$9(`UM*F2Hj#TD0#*@DDNwbVf_J)xx`|vWFD2y#PYqt&|u~F@(zXw z0@1Rp9h7@3Ol`85q9H5+>gu!Q@yzJ_wempFEgCN6w?W_|%0jaPq|;)6Thh_Op2(|M zoP~wt7Maa_`l=4}|HsukMpqVeZMz+JY^Q@x$M%k`9ox2T?AUfXcG7Xjw$rg~+s>Eg zdC&Wuan6rD#{RK>)To+k)|yrKbx$_^)hQ^iBfkzk?1t$hu*KKs0iHo8If>9M_ApV_q7P?e7ivYH*Cbbz;o(Z@Fo8rdvAjL6 zLOF1tn#6ySsZ4m1Icfx0L?`eLeU_Ipi}(S|tm_MRa&=G6RnI~@9A0AX65&hS)Q3KJZ{ zpp3l{Ybj^4?cjV~e*;%$vudcCa0y0+lKe-h6{$k#U={XKGzY2fI8#^+`MH7HJI>cUNoU7 zjZ*(!cj$g4L}`X-I%5YG2#cI`LxHY1(0M0qiv4ycNsb zaDCU2*iyrxlf&4T2Ua(>vS7$eZ9Z_ZsABZ#SDZ_@uzC9+BH1 zAQ+T>|3bX!_6hIOL(i7E4rd>grmmEG|w0{XkJwME|k|>s{~=t{Ots}wi6mye_ccI zi+BfUf%2yU!~Ce3{s>kctbk@S4^2#4c0VB<7;55LGZBI{A*aL|A#sc$Lwj6%$D#A1 zs9i+D>DA+b9Zg+cG&yTu&J$mr(EG_8=Ewos$wqE=wI3=p5;REka-{Lo*ICG65LV_? zVds8ovZTUMI^De5sT&iw2otPANLWah1^BoH!i+{k2oRCP`mI#NFdSMfl}+ zq=bajinJ%K|Ht@;X&H(F?js3~@U>Du1VAfRm>gD8hYnG41tFSLMubF2evRckYy3ZX zoNSkstB8^l1ffS|zFnOsOd;3T)8r3UG!6+V@%@S-vT&|dt+2en2d}kzC#Zi5&A}_^a@VMpP^VpOEJp6? z{C1OcO_)~uN0KN0ufMdSMeKux=#?vsIMtNyRZdhkAc7;Q(p=BfnL!qu-*Wag-Gm-= zS5RmL7R)>zMeYgBoDB~KKPZnu9KQs?#XTey3}gcv%~+%LUduHBq@_GI;w8wZ-^&pYjvKP7 z_4>G0Wy}32g$O%+~b+cK<-I|Nst!xAE1zni4S@E)EdeY{vVx%`bUEG;ZZlP*DR0G8YCcN067nU!IZ(1;sEP!P?s!R*nf46H_gm4##DYGd1!d$mEab@u8X@&mZfC9NWUDn>Pia;VTZ?rS?3 zmD?FaA9v@kU5PzwA(aa{HLAb32@)^|E^WnEE5Pvdz(Q0c^SX1TKg&HoUoK-mUpKE) za~}Gt+p0fL&p#HoOAd4B@M!ui%ca(kQpo2Z_F!Av)yW)MkT@>Uc{;vzgDTUu_8PuX z)zZBqU{1w(J~$>Xgix8&mAs_Fv)W215jY5;P7^x|(SRU-gaII97_cR9;vX0_q-^&n z)jbLruu&9be`xR9_J>7a-SdDvLiwh3H{xe{n%N<%^+=*NZMIly{O5hjj0jpE2_{F0 z;yOLcIaMo&A^afs)>f`aLEio5L%T;oVYkDsJW&sEsdh2Vq&OdhoZhh(6L{ChZ+AyZ zcb+l$(XXHNldGRIb*X#~*=xUE(p~dUZ@oEv{oFp1szqP$54(50o5P%ToP3dC^(u^h z-M1-+GFE1%PH7jO?wBQhL>VtwQ0$XKO*o(H>oP>6L*OGx$5d!6Sk%ojBEW5Jzk zgMfXJQh%RHgDqXou=1XxHj^_KXe`!D@I+Z^)4nQC}?3j5Mp4gV&Fg~?Pu!xnjaJHu{NDVO#3HLdki}m=TloAS z0w@rTowH1GnB&P7H3!Lpa((IHb1Rom06|2!xDc%VRdVY5CHYmj^p@(_2|4|fQ~Ca3 zO@%E6Vcf{S6ROdFmpRk>Yl4+yD~xO#KOqT`Pg*RMGP*b_e)b_Qy-&VL^L00SPx5_r=FW!A7W(p6{!!E} z?@?^u+i`J?(Oq$jljCg0S#Gj@4s!|d#fMx6uVvbAbUzE}e{XG?XpS{QR$QK|OQEAL z&*tnj-z{p0!G&)mw@a?ITY@#nGWreA_{p)kubWz-fm~pZxV=e#LEyexex{WGh%`&_ z%**W3niCb}wB4;XNaM(U*Rzrb$*P~-1Sh$P>ZmI7bVi0=-CXZodx|3Njt=B!9?yvu z7;O*ToqD)NmkF6=oKJ)T9zN7-06za#WnU%yFxkZf6)USr?3T5tup%{oJt zbiKorhMp8t5*DO@qGLZ4sR20IjfK0H!-gyN`GWN*mcB} zzxMRtO-gdPdMd48{;Gra@6|j;UL3)4)^JU~TY}wj(#jafKU0)IP1p7-13k0wZb%#Y zf3T3FdW7*;%11cTOWK*Iqwnd+T3fiO^SC~ubZg8JW+TH@{Nh@KC4bm`j6w5+FI&{m z^ra8x4CwGhDl|LKrCvRA=NJb{Z7TBPywkq}p|U+mb4+~>J;k6tq7=B+DTwgWKb4=j zbC?P+2|zlFo;H)xSED0LL2}Pp2Udy3;g8Rl-YMvR1cJBXxg==NjpAhYB(pe;B-%4G zOvkQ2kOkYVLWPq9DaZVi9o?VcF7e|#8?v&7Fh1XjYI<7b{(D;0#P#si4j72&iC4%W zItzgzF$M2Mw?9Y~clYj(lnUybAJtuTtZ>@Ov~76l-$yX(dL~KLU9$RkM7;Whg2WX1 z75jSJw0_B5IsC7yF%kEJA~pIElL+*=@$QydRbq~5A>;q>ZIBXX8YWeTk~ekHgCc0lcf2qZBu)%()}MpFYTXDDg1LzUhNPJxCnJGAEW zZS`U`$M@+tln7*8n-kln*Ezc)%h7XN!r~42&u`)AS>OX{pF4+izrc6#;Q++{ItkkJ zc^L-=Adcefk|HzVuxFC3eKtafh?+}Bf&1z&QHdJ_fpsu<);GY>(FrPtD2`cB7!YQK zm^*br5MUZt5x{VGDbl=b$PGaT#+Iy-0INTWYnOJM-=&TuZ3JQ_Sy^! zeTh7N`;?>`bj7aE5fwPndxC5p1QqOk@rlwYvmMrQvNIEuY5Fkk&PaKPozJ93C(Z~~ zn7JdNS-8hImrA7@jszy<_^@2PgvG)2rOj8QwEi zzo5yFtb=SVgf_@!w_>?zTFdn|cxu%vhSLGQqp$p!_wNpsr&6&y?+`a%Z@>j~6!QXL z7p4{82=hvZm2@4QfGVbj$veZxLhJJVn`^6-`jiit88px!x?GV-(2Wy8(5e`KC7QKmEY_Y# zkIH!3sy<@=yl&n>F3bA&!KfzSjX3CiUe=WqVLp1CueLWjF8Vpx zF|FX?>c`2$2s?bbCEq6Ax?^R3t|>ew0nVU8dp zx@D-M(LGgzr{~#Ln^!yO^)ElR=ejS?jv)IiP{MoWd+Gtpbk#;#R=xwm*#ACG{r=OS zM3RZyw8p{kTN?y|y_+9cRee$~9;nE02CSd45JrTasDa49n6Jnjx8n{B7LFpW<_a7H z%fW%t+e-8mZ=3-~#fQI7=|$sjNtF}%w&63akgD%Pq1XtoVJJEKW)SD0n*2{EZhq`p zeskDs-50=jFWwffTJ3%)LUpy!5j||oIz_|KPOaH$4Z>dxu9-;+y z%eboML2Hx22p3k=e#Q*T5#~e?4$f#nuh_-{3E| z8nNw6VimGx{tA1FLR6-nrc&!%`@xRvUDbcV-Z?rv`>GjOBo%V;Ns^H+sD{#(Z{f=Y zhpli$$z&I0WnRE8^VVDQV zYzjb2nL4x}C*#{f9JtR}O1~Nx{WxQAJM`W5 zc00hfvZK^iY^&o^2i+n{D0LNP?x>egLQ9?QCtdSKfY?f|vyLQE5g~5!#@AAH0U6(| z!o6*#_50|vOx|Z+k|0g}%Qz3NWyEo5k8mfNzw_PqOoyKhxc|<2+eI$Lic#edouBjt zz4Fm!PZW7Y$CO}#`>KaF1ty+-YYy6Zj*N9Z!vRzW#K6jxKFBK+yNJyiuhUIg97cl= zzt(fTfogWwtSRaBYfH)_6ZL0pG#jS+s9Q11?-wk+WVN>rc$;>tWRu_1+UkWn;Oh%A>#7$O#^>!ViqAe3*UxnE|bnnIZt#d!0vk$rdOOS39OE(hAE zh8aabe4nCp){4D_Z4{*lR3IUCw3qa6gkteO^ivng=@w1f`z?EnqdH}N*eG1nkTL@V z`Cms;+S+X8CO-6x>Ss*hc#CEDf+zQ=b~7)*sna^SIG|a#j_A{b+|>AuHMcPup(Jz>Gfyc|5;vG%c|WvDwqvGVvaQK0?<<&P`~g-BSu8-{wA+z}+mzu9NmTTZBu; za*$$A81+(L_-!LoL!xdr{L85>MuL1L(xLzQ$H;eXrV#63WZDubTs_Q5lx?>65w+2 zGlNfP%NKA+>Qhbv1{_WUZr@@iZ6?E}17cMe z)7)PEa3OR3ydn!JPGPt7F(5^ zze%uUpp#tRxJe}c2!^`5z>Gus_>BNFA8;?eRDd#>%&`^Ed zchobm2U$@)yI(e&ge`-U!i)PWBT?rL8g z=O@t|Hd4N~s~E>x7{xZ-nZs({mC7|-A`jRLCKcSjdQ!D&5QRpVbwmG)q^2eEP&Ew) zWFZ`@Yzcc}HcNw|v=P-I;FJE1&-bpmN>pR;Vh2yp7$Tz%)H7_7X-oV{DP{W7)lkT% z>q61amiu|xV(k1{a!x!}K@crgW3r7OYYSIB_trERq4{`&I}HTC6!Di*QBTUQFrY+k z>@0>mO-RNp8Um4omDuUon}{AO#dt}Z0sZJxJ}F?O%(vFIIpNo(=Y*5#v{`?sv!^~Kp@r<^RAD&zh1r(o-{Yp}Wt zNMjI7xKHTN*cu?`M`7do$(2!rIqW|yw`~1N1fU(cJ39;Qo@I$D8IvL^^b}V7abTrq zSNCee?zNrWhAsZ*t|S-p6EQ8W@To`(QN+Ijd3j(Msn8Yn6ve!w`RbW z_3?W4b66&4mIi2^Zl7aOfHG(QUh%C9beBLJdW-LWv+6d!KJxp`pPWk4KP&?6@?XiLJ4dv!jVYD$O4v zxYRUgtXB|06KdyVb(+&RC2uTA0d?XS%)XXi4v>)caeaT>hEn5Emp?uwFmnbjvKKF6 zT6!`*%FjOg6EX^XkX{07lDGuc>I?vCu)MlNlUMz~S@BE*n<~%ES|pK4cp1 zbS%DIt=|_+gxfBz{sj|#_lhK|;jBdO=^?o5Jx+35VN`D+&UfxKUUP`+^|(|bkIn=q z%Xh)GF)=#ox9r_|54reqy~;*Th&Jk>~*CQPb>UJMyJp8kAPrrbt~N)mr&H1S?X^*DHCK% zlAW;lGdm8Hzjl}-biprg$<+~uxUr_5KyU69>UBw%i;8PE&-p)Q)6`!WQ7Njq4x8_= z9|z+}e-3n_8PBLR9xTf-qc;k2AFf?A3@WHYGgr`0#sUVGll4{%=$9UpDR|+I$S5&v zkQbGVYqM`enTitF5`?q%JT~l5lN>D-reeb1UAd8kV>C^jliC>DH65J;9tr1Od!K>N zOI^@pg=YJt|9~@LjRglGg^zVayd5(6Yy8U3(Ox4ZI-f<}l_+*1&QyLPf3&V*HY3ATeLr^}`9W`f${UyL zpB^+t*}vFrsHSO4xD3}_g=v@G(FeW!Z3 zWC{j=WoUjsTs9A(*L&9I@HPTj4Hx)gN<}Ph%=3SgLHjm5

    YWtGd{OG%yLeLT}3cwoW}3 zoh03{m()E%6|@_5R!`3Gb{ZYOuip6P<&2^`ZruBrarx+s*>c(B)111Ejh5WJR!)eZ zJGLef0zdw2HEc*|m64;Oi8SgpM)VP2wf32+MJas)TQM@u`gL7>+4+9kmecwxs@=iP zZmPymifzGR~a(@)_@y_Tt9d$ zFC*YVC;$sw__kq-sA+?rue4{7mK!9*L5ugb%8THLvj`LzKkB2Py{BoXC<~=6N)U&# z$lev{EJLo!#C4xxl_`U@hr0|O6Tm=s|n!lfUN!V74MXwcKK=(G{KY0lb}-6h+lTSM1F ze|W;XbH4GJoLxNpbTbxhG5dEM=1LK5=*wkcIFot8_>|A9Qitg>!5JOHG0{%9a@OkF zdh&fZVUm9L#J1Sq+_$FrNU&T1;s=%4t99y8nlzq&%5R$*@APKfxg$V5{RH>gVnpbyqnw66d=D zE6O^z0ku`EK|sKlPQl@W|Q9USY9v@*$SB_;*7s?y@9ObFYF2?xC2R6)sHFZZ6>N!6FN+B+87 zu^AzN%7r1f*_EBYmX7Dg(8e;qAwU<1r5>j9T6ISJ@=&ahepPC=gxY**OxUV?kGv%` z2&}*Tq3cza1ga_B6har!G>Y~uY+4HE7gamWO?ZG+zqQjA(~33v&(d5S&jAJV+B$(q z(LcwvKa}pBt>=vFas03#mi=7u$SQ(_%RC)%x`AM-{_q5wq*X!pz9E4F7a)9~Wjms; z|4gAUklO~DK-j3nW+Y>Ki6m5Ci9YIQBe0rfbaZjbqC&3ELK>Ibvd9d8Rse;CS&6~9 zGAi!D(mrp-zti!MX?Xax2CH+3lV!YQo15k*<+^*N#FTpkrrK#s(fz#!&B*SY?O&AM z$WS!e1Rg>`I~Q>HzVogdB&k=@uyIr`h=8LzqTebg9YS$uFr4Rgn4;rm;%ZvFWF7Xm zmC!rvFQPahGo&MDqdoP9-W}_FT-%2%%f-07-i%h(cA`Nec$Ufi6XAj4XXQP>plFDb zt(jSUfpnHZ44;)uOsdI65gr0aAr*-z;Xdc8%oXyLF#Qdt5lR3cAz{gA_Tg4c)}a4n zO!vaC8fTAp3za6>@fbq^OW#<`>zRuS@%|WqsBa#%^^U;t`+!gCoO=M3Zoi-%cjKfk zXSd=13BlK`?_*`WKHDiNV$M@5DhsYA8k(B*HEwRk2G>rZo9DZJizIUYw z3dT#O0VhqCU!l-HTNHSYmMh&2Q$5`eTekz%aMDUvk62c>EEd{v1R3&WN3R`( zl|E7GRS7oi%+LMmSpeYB^<*|Eactp%3QHBvvmrf8`P~Kl2{$H;h#aGF*fOeyctH_V zbTsNP6uQw!mmGw=xaek#b+1`CFj_r~dJE$9mS-TCW|ef*({YV`J2ohujEAdWE%4Yz zx~EZIKduA^msBfj(x@w{SSx#L?`J-jLqiwo-BF}@^zm@;N+{rR$3%GNnnnjH8Q`t| zhj)IC^We13#1CE_JJZ{+(2Ehlq$8?ym1K@dz%LJb+`+ty=cwss{+X%$9smLtKa7(3 zk|HP`bMXiOvQ1JrM6CCk5(0PiFNSjQh=I~`Nvr1ccFC>~t1z(EfPr9< z8SANMown|%>ouR6$$u;&$yYLnf+g6rV_le70ratP5helhN~)y&PDI|HQvbJ zht&Nina}@sw1;kWG(05_$`+afRbOnE6SFQ1>)+%iZJL9S0UEuOzNv)NS7ucH{e8w8 zEdI+YmW6#r576^?=h86 z&$OuycVACl#7IIb+ZLF~$=H>k4@^51dciP8Y_grao@$PuPdw*OO8!3BB3~2b&Hwwz z{|-+J*ynU|5(zEsfp4xh8>ua|TMxQQZW@|<%yeNb+m1=pa4uR6Qg_+z?8tt@h?~gBF!cjcS-(4ZC4I^0r**$}jl7Vx>=cJ{PxS z`OhyOIlzsxNHA1}zUEs}%mc_dsofgWF&mL>FaA~Fl7lNmn+Z4qoU5^*^aTYnDJi#x znOge6&b1cW6yhua*=(SjRSoz`Np@-YFzDz}(#XL8;1oS^nFz1M#xfk!O3i#F?3}~vr#_Y11yaWHqHF~a|Y8q z--d2PtGR#cSk46s%mOV5?mIobU~;7`l3#)U?q2TTfyTty#J<(&5)iN(Dn8aUnI@gC zN3*5_(CadvT}UzFE81s(8^8sm7C7SOTsb*XNf4^G9b%rpa~7>9lNpr&|5%&}wJ{TB zZ}PgDH2q4oQCm;azEDn)GRJpDE^1WFk@05o(Z&(Z3*nEYWCs~`6VI;#oo|A@^k!Vh zSu#=C^{s+?5vqGBM;W$yxw3{37<1Z_9Y7OH4akjRRGre~r?3lEr zJa(3`mcpQ~G+2!05M4N>C#-WHX1%`2;!$QYr$C;KWpk@Mtgokf4M1b*0QJO3=&f*^ zMWXwC1@)qF+dz}!2)Fj8B6I;N`e!O>wNgf+IjOi0J>!f={sID*D4o!WwRq6Cbu$wY zfs>xw!H~TnVzE8xPrcv<=;j{kJKNI|PwK6w!MzSxa75GtIPm4az(os81;vA94LG@; z;>~cPy=cC;LcTu+>W`x)oUL?ww<-Hiy~p=|E27l^E1;FkSZIO(l@R0}>b~dc;CdU) zRVd(#8WQ@RctHH7CF4WJk9W~T89WHreUBO-Wk|?>YeHmI-0?sa=sKr1E>5Jzzt{T7 z|DURG7xOKePgl@L9;l5J9fc z-5ML=njujU_d($ly#fZ+2mq}(LH9t@HN8~Vq zlA+*fACo>4I$nxZ7*h`p zCE&rrHKyR1R7swx5H)87HT<6(-cmQNe?iNVM%Q@q-!~%5L=}X2L0k8~73!eW8=@2e3r|ee}lR6`GIJaNvCfD+s&X60jrgCnq5seG~L*q#4 zMaQGW88pYHgOZVT_AscDEliMlBC>uJe63wmAJ{L6&F3V5or$KfV%}+9{cfP^O^n^U zLVS-+0NUhb-GHxO=U0E~#m45T*@q;nXtb?e+B!DOK4ux>u|>V*Y2Ft(8|_}9fgVa_ zKJ1hm;A3&hSH@9L|IsB@$;I`IMwdl%%Ht^;NHKENlV}Wh1iQ79p`E&G!{GBUc?*4z z=K=4d&F~G_=?)yzzqpTHuHH?}?L)r4r$+4R2Q8jXt}RadQSq&Q?>7MjLSbsE@3yn6 zAyMmQ^s;aSm%!2I7tH45A%yCQr9YQpB=N2`CDXo)0Bx@_i^R z5o7nT(}J_QLP4WR*q2qJfHnae-IgM+h}&E$_}~BD)yYiof*mW9fElM^cTW! zVceh;ddqh%{?Ijf{}`LQX(FJ!@&Q~+%B%QhV-7O)ejr(p`cuatc9QH9trMCFy79B6-{236+X5jy zI9_Tl8qW>lb-hqxt=f{no<68`S-Z!vP@Wlc)(0= zKLsMN<3%-GS8X4iC+nN?YMn)DBL-R(Q-d1{yK?+KuAze-do=0@J1aV?3hmP-7P25e zvl^>u&V%4fGj(7{qaL^VR{XKQDO!NQ8?emlQ*7UdZ0{%ML2B2Y*!A{`T$c;qfUrUO zyn|RZF(A-e=gTu{koM7FmP?2L4} zzn==gkO@(LI;p41|G7Ka^>)156?SsyaDR!cX!-0%L?|z@qlj;#K$A2vjSDg%)K=#! zS`XxOjOX<z(RTfUm zn>N!_6FbroZTOaa!!rx8 zH7_U#Bnmuef|i}n#7rYVvelW|~Z zjOOfuml+>enh{!1je0ebF5|Sf7ppSJW&Lp~l&x+Qvoq&3VwB)o`#~Ocd~2L{#fqgz zY$NILqNHRc49+vnRW^4iB0S^WF0E`iXVDzGd^MX> zd2xCE4I63WV0p??Ee~>6*ao`~9cM5+h2RJ#TAuYgANPyS*O=Q=@`PY7OvR{0(Xs16 zrFc!>CU>9dpJ}DOL#PxRznX~PZr8*r7>}CV6F~SYyZ==@h!HC4kP4#3&5vwN?sxCNDYuj6E&!kR|7^kPbz&JVTW_+(H~DB=CZ9b`|8Ow$%)9+-(; z!$`yja?_F%{vL5;F=Gu?IJ_NUYax4#+jr!unx&;8l_9hv*jdXM=ha@pARWrr=Xeyq+LUtc9C7 z!XOodheb-1YUGopC-aHe_39P$3&bTX}Imp!Tx z8ZfF@er5AwN)s3-Q~wW4`!rK;m}zn@^4jAljmSORNoKt&o}5lyc&o#{3;TkDDua!x zMj^(#*KwJL$DP~caA-$jWT7N2-mt*xnq&ZJ{ZHfyk`@uH+7L~=Re3Byh9;R)REfkc zG**OPFUT|Di)pME3trkMZ)hn(^=mKkw`^Wpk{y1*%PEO{sXjgMy3Mch!_ZY1kOX_t zRP*aBDi5`wlS1tQ7*K73GZWG|hmC0`kx=gkbA-@_ea*@jTb{WMoJFy=u#up31w)Km zL86Jlr=sP`c|8Dd_T`dJP~nM=tzA3R_swl25jciDIo0qJp^7>N@5rT86K1xNV)W%(Y*f|=D;`GmZL0{X4*J5_gpHycwDxzm1}$0p zT^ew0&B3Qr7orKp(>ok9@y`%)peHDqap^`|=>+t2!xLz@>?JjasJP z^LmX`%qEr~$TcoC)LSbniJ41rP4gvyNS+gH@lsNtUC*adtSncJmyn5h%Ms+D%}yoy z8sF?|^GY5PfIc?z@!_6w;KU4hob7tg#8I^@fMI7)fggJ_=l6gw znyoLQFJ|uN@Ek+vZkBx%BZZhHs-o6}I#j4F4(3L6CfZ;R0=ch514RwWuD%H<>czzV z$6#mRX&h%Qb*AXEZ1J+2l5D5Ln6uas`OF`E2J_SoN7e`_Q_jkYL7ypWGRIEM7v(kY zai5|m4n74F`pW*4B#z3Zn>%(!%_^1N*$B(V$=SCF>d9k+*yAP-zX$J;)MS?D2_#DB z%hc`L9)GuQM>}wNYEy0qIOQ84l@5Z2Mm4R-Yi5tl zToeHeja^@U&_m==i@Fx4j`<~3l7VOA5E@S4Z%?p{PPw;JnYZN+){XA_;tD7km=tOe zD`R8TL6m$-4xStDZgURdFQI3Hd)A7zYms`M)u0WP?u}vNkH-4x%dZX<+}uIhQ#>C3 z;+ouL3Tv}sj`8e^%mWkw=cB&5=9A}44Q?nqLY^&EYtvpp=G-7?6GjS_rsM(DMu#lA zNXK=n;ebp?jZoDSvLL1?k2Vn;1(a$sgg;?I@+jk4sDoCPV%|t9G!|o7b|*&;D-);R z%C5rYOrBQ!$4Ec(*xkO6k3aFDJ8Yup;w~<5`E2q`JTPr&3pf)(`XUg$U?+wl$=-%?l~MQ2Le;MyDE)~It7$)~0W_AMeYPmDA`o6(Ptd0cmAdn2fq z`F$n3Okx~x;M|GVJ%xv0UzbNnkjvBjrrOX4TW)3ie|*rhkB5c$8;Qo)$fo*<8TDPY zCPAeYP_-5aOo&nMC4L^daSAxY&6#ydFY%K*QU^S4w^IYwwTBn0Jv8iFD+vXne-p>|E(A@1`m1uKZ&|3UQtf z{#lT;N+AV0sMMnzlS^8^f4SaC;O^8BH;UWF!gTu)Xg0LFtO7We@vfz!M$lLwL+c=i(S;*1Ji)`qCmo6v0EECdkr_LpuqQm>{qG zh;=AZUybJE6AI^dJTtE%E|&DpnZP9{l>u!*t$FQ-x+;FQa}W zi{byf8})C(Ow~io zwZE(pR(8M>J%x=MgfRXjYkh+IBqDuuNzmqbBTg!0cOy9r!EE41KDy>M*a_6qTq6xC-S4}#>i$lV`Y@qY6bG?sG|_Ob z|HeI9d{4WGF{9V-w)kEB{pi#%Ysy!os$JXuw6E>LyBXMB{q#@{>4xb}hS@w%4K_%z zu8>#Tq)j%=pcl;Hj-=!)bvXNBgyqPSjUDNL z=1Qh{h7pNo^N(LNktG##D)cEO8}8CI{aug2T-F?5pmkX&SD zi2_!DJVrWl_5*<5<41OCd+}kl8@4h5_RFD`MN<9@Uw;!%HQL;p*j+=wimtjWKZqR6 z#K1yT$j&iNW~gNBC=#luEOSBs+A`RaXg-eZxx5wF;fC$<_oPl)loDSr;8e*s#Epu- z&*QJGd02JBq&#V+oK0I&PO)fziQfJhllI|`7bWvfl%a?)BW~pzQ&Pzr!T}Y3pjPL^ z*G2Npppq|pk`K(HL)}Y$xVgeaC`g5q!jV<0; zI~^HLqu@DB4;Qtl24Rfs9m3y4&4yfBEVOVin$)i`y0~8gbhz4tzZoDLtV8a)C!8SJ zPZOpEQhWhO$%SC6B#fEaCJ8Kl=#v|ml{+OQh|iH(*G@tHoDUqkIRu&boYolgEJ(zl26*q~-gi z4W$)-=f^OHJeLz6H+lag6A2CdMzqpIR8nm(O?0o&*C%()BlN-cuyu-meEF&Dy_D)t zNsEyhNriRt|F>$Dw4>!n=v=IxY5|*F!`>3?c3+u2YLSjz6@VZd7X+5QD6$W_euAVS zo5F@iD`rgjdDVR>%kRh%YZ)7j6Ovk{uP$jIKF2mnGo>OvOrNi>ZUxIRPUfGBdOs0! za**lElmle0i@z+w*jv_qB_=b0R=B=pDfMud%>HAD4FwVSa&5hr0g~%wIoENFD&dOz z32K5{dcLeTZm;gM6kZN;x(H(gO5^iE(`84hA|Re$$OtDWQ6^Wg`sLa{G+9ExRi%wQ zXFpq-a!td&qkhf*q3WHZJ9&bB;f<5c#@HAe+qUhE?POy+6Krf-8*gk|8{4*Rzu({U z-shZq|C%#3Jzd?^)m1ay)%AfG3`D4DUSaABWX@&k#^zH0^OcF!`DSn`NUC>hmKX<6 z{iEHZRHo>;Dis}=z;Wc(OFA5uuVV2-Y-M@oQd#2Cd;_LoQa())X3esUHMHve6gsm8 z`DZ<@2(KX?97ItmStJCC*D7pgD;s67dv6)BS+hFvF?(tPUi9y#LlIsju70%OnlE(d z9RY@nGZs9c5DTR1-vh{K+(G2Z1zB{!J3V3ay(XRv4eoXqBpAE9@z%)*$p@(sK_oSn zDedrZjbSquUNFn}%bBXw$G0fzmld^0g)2?VQxUBwg)6ZER1wr&h?KIo- zX?EXW<7sEG{QP#+uMRPG1>UE)q9`98is{AP{W~0tJT-(5T4l-z6uAK7-s|Xx&AU%- zBrBHTsmK3zdi#>nbAl?IGel{@8@a*_x$w2#U&}O>%N!mbBQh0k)%*56uf)Wu%w%;D zQck4M%v+fq8^3S-QGlTHNO`8k)B_$rJ)R!CXjep_A!r&Cad*SN zP6#T38$V*@)Uwmtzd<&uZ1iJXRH%0wiS>M~fHS9z)GM(`3G62MCPvj^7fj)93tRXg zjLyezlo*T({H7Ns=mkYbsYYsVhidU?yM=>iz0tw=D|pDG=FB*S7nIug#1!;;{V8Mm z6K5_-jSY+hX67WTu)5=IeH^@vdPGI(1djHw;D??x{}j=TI-{DMDpf9ToHTX6<(dW@MzA!eEqSg zkG%l3ne$=XTIC{8p>g8S({u?wO4D^iRt8(YI|5W~S;7Vo#7@ps5v5ThCFS%7Mr$bi zOr({`9jk(zc$40m9pMtYft?_Hq@hQ8qzS$FO6wFv@~hXHk2fv<{}e%2#S+8xXTRrr z3x5<^3icbT2#>~Nc`g^jr-(`U{5Hy@d}jw zx-&iMT$yNUH1~0rw%P4m*^JY1mK(xy9F>6*3P6db=O|TD)V2+Loii59o#?v))^Dyz zeb>TaqMoVyOCYMdc&NI^7Q>8W3JXi2v86FaV)_Yvy(b^*Y>pSLPpu-lq}_;dl6&U=i!|*8>bZ5kB^VE<^z) z^cQ&w#y11`4!Ym5CX+pXtVZ{{4MY9ugQgh*^DYo8BBZ|ku`IFSGDg$+jfDmT`{q3% znL-_c_k%2gY(Q2GC~-5@pd}Pi95$2kM6$00!Pfd%#3c^`y8GO$rA1=o*?8R-4mhDB zRjI9LKHPN{pi@mi(}qY+`?TW@?X)}qoNIs%{yi&Ncfc6(F>r=7d4TGqh|4w*dMUccuP)F#TWfIlHzx)Re!YXCD&i? z@X9J~Hjw5o+T?XEx_z8|=%rSA4r>6QPzJ8Ag%^suavII<64A;dj zs+Qlwye#GIeeyqy6oKkAE+1U}b?8tNsIxvXSPd{o5}c4OIn&p8nI_-EqGqps-^;I0 z8xt7nwkjL@wwFaf^=NOcmuVA6+vcjnqx43b(Vh0g!Po_#Tias+2R@OTrJtSwe;aSJ z`)ks6XLSPOHxricuZ|H9S>xHe{Zau#pY41y9cu?q$KGnK;#J$@w{Qp24M8#QOlGi+ z8$w)o;G`NQ4a!+;*TjrZKeyxSe%t)LWk8^%Zmk9HP~$fQWJ=UI@sb(_n|!e|(d|!b z;C}?)%4|5>GqU#t$uLdNf)%IN)`5$SJx$jt?JODm;<9&^wBI>GPo7Q#K{T9}l)4kv z@%@Y;N_hm6{+lTB)=s9npDS_lg8!syc@nRA*!ssa^lG>xe5T_s^N@Q#w%*e^V_Rf?ju5<+W z7}zG!ZwV~f2$i`vtbTJ}V_3+S9;}nh6Q){)z*KpZJYzdmZ#zw0HEZV{HHkI5FlvI~ zAJ*DiF;YN5{r!zXTiS%5JRx+j08ZY7d1cQoZ|zBD4n(%FeGhzQ>m3w>dyUi`Ym7?$ zGTZy6emt+HadIC>&JRDJ}VYipW)7k+fkJXD!}o;y{Y%)DEYI zv-r%^IC_C3( z8de$Ot2U|>h(4#|;dG1p_?Ns&vX{D(J-by_Z|aS9=@^G&h%8qhWoL39Y2wvttxz0n z2Ek#zzgYJoGZ`N!mk!m!?T@VUlRo8aG*eJx5U68`z*ye#PE*(?*P#634JPFanRZQP zSUt#uHNu}LfDMNmSVil#3jX3iGi7P|qw)8z_&y<_(YY5>M$YnExHclAFPMS<8_ zwE5=5UGKFa!&&n6(qQs^ZGQQ_huiRe3t!ZOZ|n3FbNisS_WC-y;Ue*{9(JjI2kxcX zd}7{@>t1d_$Y;joz@69Sh%ZEZNjtpcN%uF6mzJnPUn+CBCA^qqK_@bB3%~h6UInkf zVs_YEDp?JDWI0Cm19CY)z*I&=2xJT{q8QAC>;$vhc@=!LLuo%w(@*Jd!Zx z@vbIAPa!S*Fp#077qGu4cAWxS=)qSW!jbq*m+2G0)SmZ=14mLK_uVCaXKU*h7p!}z zef(8oawt=S^|1?o=&kMGfSX>6pLcVui$#p=rQ6@R!Ysy{45ZOug?J~Y5a;u4Kp?BI zrEf|^sYovQAv)21oG|2iJn^yPyc!HFei%O0TCaN+H4Ljx(?~XzFN}DMUsyg6kJ13G zCW8KkbWq6b0nf~Aa@+DjG&1cy*|&K4*0vM9PN91<_9lJ#6B_DuLLg>nnS?*E(?8Xsq46xTs)$&rbL(Ct@P_B(oNO?5c?p(mN%rpFG@n_n4r@wk6|Ds z7AH(R{^1+UY;Q_5X|J^lRLSlLlLp-^EKo##yZ0z{YHr@ETKc9%e)l^9h0hOMjE1p} z46+)Omz=T?2VErZZzI>-v0Aja=?NZnzOg;~cWvfq@<#g$3auuc<)5U|ld+;9#(^ZA zo8ip@aL)gRk7RwUk8iyhNOZj}gD(?_RkiGZ%`|OG{K&WYf%vvrAg`=cZp$XqwVT~> zw&+}E+2-|3HQaY1m9Oc&0c?Fawj4t=i@koL*(8wREiyQTPAJGAc_rXi^=kmG?CDKa zRoC{oVcM#m9ZskiKuLrZ1oOJ19fqTkD(i z`v&ng5xXz>TEa4BN)HF71DIVC3nwNo7>t0#%`>C_WQr>nCO4RON(~pLI?T7_vpz`v zgcKxhOhzz`6hUrG74SEWlq7CUFW_@mp&JJcYV!-b*mnFm_`~UJRG@WcMxDOZ$-Q-W z80u#m*Jmv^c+G<3SZs6Z>dqxR>5C@(h^^5X3?qYzFs06vm7G2;rFrI=R%G!NxZxEV zW(T7;Tehs};-FL8aYiJ?cPH&PAAdD4@vp5mcpzfkF+7ydG6)rqTL~Hi5X@^$sLyO` zxJJ`%*j=VVbSgfWct8m>Tcy*8Ej?zOZq04|=bd@J!rz3fA-4D)S?`5=z4QYiCUxxsg^uYfdVRi;1ziXq z^5A)PzR4pV{)43RKie=8+s8;B+oz{rXpvIAPrvH+HeBO(h?YD3fZ-?Xu>vw9Svqac ztYX${kiUSb-k9UCJE(K_tB;3A?4BIPKIEH}6R~s=pM3Eq9KX;#ip+8#-yPulcs+d2 zJpatG(r3u*;$#PHTY%8uv<6%eW+#YJ+fpvD_!?PM@b=O)w0${em!`#r6m=DPrgx;} z4=v#jWskry{VF_y_Wq)M;!;iAHM>^d}z z>6%o)ytcQt?TX#x4%LelM2(Ys(n<7cf9y5K+o_NJn zkZ8|QsSxAO;Zq~^yH&KrBj;)h7o*VM2ROedOm}s`NYb=yeW{Y4em~lcL4VIg$Il7~ zey~xwlfjglEH%_RyqNNN&BV%(G;K~jGUdz=Dz&={;1Q{iZfV3o>k!}l;R{jd7Kg@k zFAT?j*9G{`TY_i)bmqDfkX+E*W6U|*=gc|Z=af@$NT;c$i2cic z-%(TJw=RU%i3vJ&WhD0|r}qO`>TRnDqM*oyoX3=>UT|me^~d`XV|EVOjXb5CI!er0I8E`7)kBS_js?BB_=obO3myi z`cp7_KIwmI)mM_R_`jXhW)s1gzj<}K+9*cYU0YG`FEl)2Ari<>5`;L>JT1b7RU} z6Rf|E@QK?EtQAhX)3P)gwc7+=9{eUAoJvPKxor7BXL`bbPI5qspzo?d%wD1bWpowXRYy25G%`sn50p(Q?N@m8D{9^5C42G2vc zv$J>ISx(J?EOtcIW7fM<_5D)omO#M0shH4y7WkWhugT|Vc&`)n)l>VMp;8J)QpF8@ z+g;oo{b}hI^qlOdw!lb%jTlB$0>pA^3Xmc-ic5KNjg5IfHufP-{1+?JM2f7dUY2@d zYv*+DBh+*TH%Ss|)1v_W-isklnsFp;Z&o7ASxo8adyTN;N4{w5pOOLx;}kYRvKb7q z?FB>_rE`*7{RNe2YVx;)K*EMSF|qAebqv|Di+u6cA}Zbxn*IW}h=Pw_?(LX^YydX2 zWB2%T$~=6D=U*S)o{bIn$IUCr?mr1J+vIZs*?EEMIw1ziUP-nu)6qqr$40!1YcH!? zuY|_^>#7eQXM7K{*iab#zU=A(Y2}|M_NUQ<2~Uyonn|fXYul=IYz~iE=Br&HZ-ol?>BCZem*b$c<@(n(a7!*m?I`nw`V{b?WTDAmSPa(J>m07*=nhmgS_hEi} z3w`M(#5B}$YfJMxaV*rJqX*R};?wv2@t`l?!29)blO2XAQL+J0V=DWhM2Dclt%2Q` z!;xYmjA;l~m@+AhX#%vi4yM&#i}l1|Vb)Fs|Kb$timfsh=jJV!-!IQobi~=q!c?Y-^caQaeJ5Pq>2e-zO z72%`hl`N(=?dgm(_#!?SKO5W~fQycnLqpzds!T~pQ@V#7M8%lbU;~*YsQ~*;)#@qF z1c`*wnM(T~N_C^n3TyNIp5*kxv2?h-d2rW&k(OQou4!L>1HgLOk!|0}QF^x@O89_}l&Vk&Nz490fH~!)z$AuhWDin5S{L;_N|GA(U z7T()ZZu0d0B`1uMm`eRb(6s+XgMB7&Q<#)LlMQ<2A1R<;11yn+74+r~$@dWT=Dt+S zrDMa;hJ}woA!gR&BkqhE9wZudLk(#;TK184lY|d)CPNJnHG_S}h_tTE*b*E(Mz*p< z?@^@LMf(q5HO#fRhjCZ3C=1IVM0F2@EDU9}n!5qrREfva{E&fcMVr3wq-3Eb*HHpV z`L~X@9gvFxq2gsxu35#i|Ek{w(Y9q>W`a<*7HG!ncFiSNwWJfzcS6%6B9=3tGX zmqV~Oy4`U&{_%6`9kIJMf8hYD=g5g#lQhYxj~U@VN5b$W21i>! zYWCZbf7NMKDxi!5!d0M-t`@w6<3OL6n=Z=v0NZ?-KL{F_X7i|=eA{vRjEk&#b`+{J zCDsWXNWERZNlYkCW1in)Rq^Q>;>E|Gp)ksnm1Cdh&~CEvHO*`-LBfWu5N?_y8O?O= z>1b%Tc@!fdo~hS;-FqqJy6G!+45hoqc}0Is_P}0!b(hWu zu71pH_0wHh6}jVn0VAxJzn=3EsBt4GOr`4ZwpaP78E(s%nx*@T zr_yL^t_1S8u$^HOMXVoGiZ#l1K@dmTtfk@7w0?E?qcg#(_9v}M+q;82nDqn(Uxc*2 zriLk1vs#ecuKZb$HH-cL~nR9Lw!SZaE7w&6{1zP@ zylS}eF-*;VCPNmWr7c%wW+ewqG4l*sxnPp66emIsu70`pE%y03Ms&pR6w>iPe8ER( z4~03uq{Tg|AA)**YX8RvU(Y2kU*o>Wig3EKQb6<-J+vCM_nfpd7W`kXV#?`GM2eNg z?TW`lqun{$u80Q&w*4|_EQ2fn-R|eB;98n>IUmbA@44|`N=pO3O%+)ZF5-A`0!Ej5 zna!LBhWQbp%^4?!v z?n$Z|yIr0Tk>6XNtJ32ai;s^AZP$O`QE4`GXWo?#9G5{{Gg9SW@;;RUGxjPt4;mrTulIRw)LLjss7ApNo zk8pB$_6Co?V$rGLgsNB9)etfGa)w`z^9OcFNS$*|!iZizqV6C|8mJ56KEvQZ| zT45dAAuf(rDOH}ITiS`d7JmM47GYLspOGtrbgupnx!6Fsr>e@Yh0^6Z7X-^tE|u`b z9Jw02P@5Yc?!q8e(fz38NSWfZ+#9v-&;U3nrlX%5;oSyig!ZCYz-VFF6q1GNGa?1G zz?LQ$Pq?aP+XG6{<%`JA4T~$O04)1_!|bgV=R(e0)qS4Kk~hD@4L5X};)7@1pPgl; zdM;ZVTyWr@>@Eat=szjTbr(E%{CA!0OI~5x0_}7T7zYoLyuW`P(TsfDzD*T4(g||@ zytp=X%}1-fb=|#+1O$j`5$roA(smC1`F>o^22Z|%G1jt!U<3V5I8YA%;Gpwx!Jn0KVVtmYk0r`ruaZ*1 zd-N#8unuV+zO7WwkZVcGJjtmQfWN$LyFy@yz^;P=9j@5y zS@+OMOQqvw@X)Cg`+MzG_3-Za;jIuqY~etxM65?@bBBvOKZ`;U#zp1{5|X&j=H%fh z)on`gu6p5{oq?4oE(%^~J&9z>wxanr?oi!YAwlpcGV!0BsGo1MNWj|@8t9LZaO@EY z+KiVHyw`dPNaYS${c;xwf18r%H3iSHJV2u$qu#wir=zsp^E|LXw{C)&!APg4SuRJv z=&I4alTr!mJGzpn(SGP~P2e^QrhEu}^z~ZPIYI+C=u=LNpv@8z7GDAHcGLUeg#Vm?(rmlmA8;YraMPZ7Pmu3w zK0x~klou*PKBBydBu%aG2guh8Kn{K3+#Lf7F)x4A&I`9sNAx-BueuRl=gFEN_*!^lKCcYs_t0I-JjsuPxE?dY3|c_U|-7j})8QT2$_ z_fW5iTrw`sSp`C2Co;kYzBd`THDEy4(k;ZxaM)N_R3V@juLxcjAw>O{4_@e$$CU&C zZky__8szx386xxzp*L7&g@-+v`DLhYiG)g77{nHb(;o znd~LW3zSG~CJYYT{|+qEZOJ?bzE&oEEh1q+TW=01dqpU)!k@-95yhj2bWTdK z3P)*|rOi334tUU8ay>dGTulLiED+=n*5eVqBIh9$le@DbG{XIdj@8aGoCuSw>%QZ! z=c#X03LUd@tlWMJ9PqoDGI#Oud?k4BVWebQR-M`HT36&)0tNfNFN*HcZV)Nm0VD0D5n z4@&wg*ue((AA+!G+w9iv;O-zMe>XwO(XVCM6l5_>big+M^6&6>;;9+N!JDW9I9~oW zMNMf@JDtFo4D?w~9{$gj8E7wid=H%rw>RXj)%QeQ>FiN_z4rCy?|)gSmDT6|fxBgy zl1h;yvZNH@Vh>MrriHjFgDcltDs~ zig*dU)B+|rsQ@9C9p@a(rX-B!%r~y=N+MI4^wT1Tz&Ao8>f0elI+rIR98Dw&!&bYGv#;$uTEc3~aHvn}eE3+Wm6q z%VG3etj?RCZ~OO#kUZzMzmTNO9t~D>8*DomiUwfQfe%q7W$sr0R!wjqG+tv=nC67K z!bo@^Q1q@6;kssCAHq=gq|0sDr(*o_D-J>V5=HF1qvnB%Ns`Ib?^Vi=;9>d!6 zAy3_nxz16k#(MqJUb!nj5n6OQ7*Rj=b?ameAfidRHruQ7Vf=tI%uG z=K&BjWJIlD2fv?14A2Q9AvuN!F-*Q(z&H^%SpI8e8`W_+;!uUSxlv0 zeaX{Qxhc+KQxIS4?Clt~e0ktx38*tK1WaNVz&@uzVBvqh!3t2gY)%zFxJA_$-GHz= zSTB|!7vJe?nvyi^e}XSr?MsAZIoIw-Gy<+Ek0%$iZ^$+)&n;x*DB)u?Dz*12bxyap zlZh5*x0y|oRCd-d(&@-@39e)l+oHSf`7(zT)HO>vE~uT+HDD=QMCl#rRkNc{t-G4D zYFGE^Ej|@wOV=4U7=)kI;u;K9W@i`s;B5)t86T)Jy2t8KbtJZ(D|~3uR$siD=>X#( zBW_sZJJm?BN!c|)BR3j4p%Ue=_;jqYlUhb*KF^WsrWhc{_^OOajk+jt>W1GPB$QEZaI(9);0Y=}aJjxNGy>D^DbD+#ugA?OEW>Hq90e7EyJ&`-o92jabyR=t zLf&rb-Y9|--yEu#meSa8!NF;#^s+d*i*sqaUDI1|)BfE`MNT%r7 z(`9e#HtjY2S_9u6XVz2*nm~=^4OZKwn!e=QC$=3`zbo%J)Y%}pU1i1;22kmVe@s8> z%*bJv5${|raQWo4RVsK)r8w3<+C4R&Lg!n1JB82RZ}~;oxzkhXyB9)2=Iaz(>A>w5 zO#6!;s%L>Af9o^1uik%Z1Sbv%^SDJ4c)QaFUY^`)foNVtefb(PT9SJ~bJHC^M%kiI zRe7JM*InSF?(_ce{BHFC==+3fc(-}+7#J^%F;*VgZWEhvx?N*hBhB9M{d0vuaD4s) zK>!?arDwp8CseV1vXC#k$0q=qw<@E!DF<0c1etDRRe=%_pP9Pz@V6r5T-n_N+DvD# zd_50B^w2ae26QvNw(v0MKN8`@#{P7qCQ!Qzm#Oy;7yqL1g%sO8@JG&^K>XOveJi-; zLp5I64dvRK1Nu=89@1~thS^QE4_xNW)^Z^cLH&uPmC<(mCpF()Ct*kfsk zCNtGuaLrhL*=iRmz%sy%$}%9qg!vDcsGBGR!CbgSO1vwyGYaVfB9$eh>zHR4XWr4b z&W9fI`bJPbT{1a?^muanQ3^Ci^m3bgD$AK9W0=MNH8Q$Mxo)wlVeZ+PUlMLcMp50c zpQM@X%S_>{An$sY>Q|5W=wu88v2wsm&SU#MFH=$gN_w5(YQ}o#f=XMS7o$^Tnnn2X zKHW~_=l0DnuJ}2;N0h%!C{`U>gK{>n&26Onq5W~k#MbqkQc66;xpb@_7)@6T3v_(7 zN|y#rfDw6?_(>+S>Do7e=lQ`UGQe*_LwB)# z5pE8+V72kB5sZ^KtDTKKd8!R)NLTm@u3x!|^UR}Tt}#T3fLOG^VzqH;4&{KK|IK{u z)U6}9!|&`{rCAi+ZoN;^CjoV+lfXa_5WMYqT#$~pKT5$&#YRyzx>gB=L&lxBbk zkAXuIueq6a+Jf7FLhNMLVO1JzojRKGsUAdLj+kA)NC-nHTMC{vjueqAckhn4H&WKh{CA!e_ZLiN8!HHKLi-8Ko^^}^IV#yL zSscgHkuP?^Ef`6E zjZj~O+p;OPO%u^u@#6^@k}>#JUE>}Yq4`vpm6_ZgMQNC*?*e8J1DbJj&vsF5)CH{< zKZ4F%jUrwP5BVLu@8*N-6V72Q^@m1w)tZrIBepg#I|E)1&CDO|sjhTOip}$W<~x11 zzbZtr){1CnYI<+ex(jgXM(YQAuylqHe9$OZ@98(^li3$vH+)6raPrTEwLN}i ze31~`@>(Tk#$*OKN*S)X0U@5zu)S_!9ZAHQkvYaSBGT_T!TqWq88PXq+r*)l!_)Q5 zgjuH}UgZRxeW&6DT`zZ>%TJe|U>$#{TL1UxRLV0B=C_n7HOyl$j+9n)Od?=G+RB~5 z$_ffAwkG5vonF_oo@O}Y{rMF#A#J$4GW$QHfFZUDgK8~(D2b*jjy7q}&qiO8|XUxpXw_%WzRJ9|5#SZK9#ki7ApJ z&wi!~jcEmwrZk*Ga^(xc%))SU-ziuIR%)zV^6lrN9MwS?G!jFy+-)A! zmZ!wNzdkPoUl;2#t>OoT8{vBDVITI64*JY>%hT)P9IMjj3+0G9k*7>c!mk*n@5ecF z%#^)Z7r?Y6sZAKSE~J)cM0)VflsOB`l%=BN(fs8?WBIXMMY3Lo8?-A~wev2Cw9~Mz zZ7T9z_v~=@RP?nTZ9E(pZQ$G)gU7{cct?N6pS3^xet}R_#4esE&o=Sbb|*yX?1Y>^ z274cP$5(mW;X5)YM_{(PM2Zt1z{?M~BKmdx%>84AX+jGsP6$$e)CDrVDABPa++tl{ zai1Gpu5Q3V7b>?zmc|R;{|^^tK9M5pca=3&QSoUbZ)IdkEj)a{5#PUv>}Mezww#Qs zxKOTTDHw+jg3?sIQQ;yCA$18`YA(@Ky+G*%7cXR0$TLRV0vZmvgEwuhE zUlB#*FgGs!%R4P{ZOoIXIA}HVqpz$a602OQ)EElpJvR z>Iea?^hS4IAzgFJIg!u0%#18L*1BhU0bb-rH*Bg8PzBq5Rx z2ht@We;LGun18^0$*+|Pw^;DUNzn;Ll_ANA8Eyo$(E1sXjPe-SA6t1f2fUwP1(3yp zp;)p)xKRF$1FGXLr1b+dDX%nQR6ug()6a1i^spuGdYpbK#T2$hC2-_H$v{%gkC&2E znK%q)!$u?cDQvsH^F*j~R_I_^njgg;h)-kOo*IF<<$;}5>U)u*6{wHY$cZk<&FVxY zr-oO#p#F($gIdXl=ew?z33*A2i$1w+z?zxG1R`FahacKA;!Mz!BLo1g#7Xv`B39E~ zs=OhA)7GMfAQ9S^1q-giMrcC?G@@Xt6V(P7=9Rl6Qj|?YMpz-&2Vs^O(KDvYRW}>K zGvaLPg@1(Hj}8dq!Ce zs2xASop35a3(iz)R@f8ftcV#GWE|*2)=99u?H1!HqLPSD*AYr#3wNY44@6jm%Wcqb z=!y#|rTC(V;Q&I43w_&*6$2s`?$A}7h-WCU1;wBi4;1Wh^8P*m|BwjGwKc%eZNfy# z+fJz4;XKkHVwD2XWcAW+85v?xF@}21(a^dmrLd6lrX8e7#Yw?_P_s;nn2$x57Z~z- z4`#B5?;23SLAL!Qy25r!_f;aY$k?_Q(|sD-|GS?A@Ond2Ko2-BbVA7BxY z;rHPnOFD$_UR`0cuycdtk3mtO0q=eAixpH=9wMogVOYqd#x*4fChd4HO4SGoDT4_& zD?W)>4+cDlrszu!6Ry(&k?oD>r_wYO|1D%q`mWz3ua)$FL*Xv$gm;ClGHwQ{_Q{n@ zokqkPiqvG>q1!w=%?zaaM)cA*m@&L4D-!?FP+vts<@C8_aj5bQzbN|M%<4g zJ$|wcf#p1Z39>>?L{MxtqPt2%n#*T}m%0x=>rq@ zfYug^{xQ!0I_UDO5XiZgnhD~Dy?~4HUoGWL?g+}Fm7+Od-0*6rKL2PnzNs@|F41aW z>6Ah1((wxg=9UHaU>N&PkOFzn2uG0v(NrL|_}?luz@3AuWI@j>&ACdk;GKh)xyJ1T z&6l((LC<~2hNYQPB)z^i6a7adMt-D1K9W@y7!m9<^N+7*R%Guj(;}u!Mi;|Qxp|^R z10rRAPmr1yl@tAN4jv#KuoFG{7E!7hm`l$O>NGQ#-(HD{$q#2tM>=WoV6yYyd>T+h zuVn#R@U57zIy43U$SeLnMZsn?RDjHjE)C=b2JDI&tPV)cg1Q62snA5uF}jFf$*@lL zSVJKKf~?xmz+=O0NZEB>kj^zml4%mk<0mShAP&``f7zkrp~0F^jme z6_O4#mj+n^E-{O&0HrU9usJPi-8>QH=!@JnE(*7CqRs+nk`PnErBS}x7^scg{X3x0 zuK-COUW6u1C%|NRE|s+lEK982bk4OdmtI9LV|q$6aoiLnCu}e>Vzj(ENf{JfY)&Gq*04 zi3X%%X)fV2E>me|P|A2IIlkyv%zKhkn&oOtI?FGZWsQl6x{-I0s?064Q~ups^8N*3 z*;1;3=tS`Xt%&}USVG^~LeI`p#><7U0Mj}G1O=_nK6BP~Pf)!R+yf4zPqbXaw3Hyf zklOU0>QpF~unjkA+SPXkja#V9u+IsZ*OyX9L!^K~epM&B(!2rb^VchEd3qR71?AH7 z_yHv{Y~j0-SJ>1NHkdu;B|3?+wgHpMCJj}o;NHo(a{n0&!v#DT?_?vOLRy%-$NXqF z@waTiLx3jh8KBAHZ~IHGwcOUwN?fsfXHf#&Ce0mcv*444$L74lpK84Z(l@T5lE zFE5q6I_q}S93x=17LAuGO{W)<2*mFDqFi@*BldUx1l_(BTb-wG8m>46|AOuE8d;NuW<*J6VmVIGkdKbX$;xV}S3-g`~~R{;*Q;IA@-7lFyAhzP|-p zzkkYj6%39kK&FOu$8;}EOO45m&g_NgBkKFO#frB6TqL+i*SCuyTQbpJfYExtSl^DY z`+Pbl{Jf*Uxn4iMYGTlIiy+=`!05~1`1HA52k<(dFRl{K7TBL0G={_lP(=SNre7ku zuZ2|uke_@bgeyhUXD4ZE(5uXOx>`0Kq^48GeFRAPIy1=)2YL@gP4x^1Y9ng-XQ}lF zd?!s(F~&~p*L_0l;_go5^f$cPLzVMUy{b*ShRAku9!p`1u1HBXy3RE@DTh@L19wQq z*=c#VE<-Lr@AJ*#gri>Z>n>H+hO38$+%1H8e;NvvO0PRf z8tGT|+RYV6Ov(U6iH}yz1;&42C{2$JY2xo2tX)Vgqc`3HRWTHsqZc_+TnGuCd^gJg z-J&HW%eYFzF>;%HM|Shv^k}$`R*YxEi(Q+%>8w|r+xj>7)92gf2A+ZndaJ{l=BZ&U z%WS?ZYp7mnQ-Qd-|xH))D=L)#KPBfb19aon(BY(}n2&T|cDFi#Mu zr$~yIGIzAP`Kc>m#}+-KDnR8GTXpWSG}^R)#D>V{Qq%QajX-9F-$k==NXG1faicTHYkRASVxue5>ybQvEF5WPewFUG?q!iV_)5S#ai#_Kp%&@5pLQ6~uumoJ_?#(5 zKSw74{Chxt+-P;+-I#oaayz?BTaL!Ql&^z`L;e@U!F0#_ySli|i)p#~3){pnV(a5k zvwIpfTxCn-vuRQ1^3cEU+4F+x4i4HE%^o_IildE+UM-XD<@g=*oYLy=1!r=d4Tpvdn_2>MoOg4;z=xjEWL^AAG5yF! zIL=NKZ;H}LaTH$$G~a`DRiV^;VIf)*+1UAx!Z>h!LMEp$<7`c)$3yt+l)gn*PH_q*W8=IBaNk8l1a!RK|Mw?GGAFnR_i4paX@nQNM?6`Q(r z&z(Ne{PN72BA>I#Ca+>iiB{o36a~p8sdQn*G(xTHtl6rU8gn<{-PU}E`1kT(oS-tT zM4r$^ao)3jtH7a=h02ztrZO?4fpS9T-;TivNI9iKufs|0cLcWedUc0C9@eV9*=as+ z?3g}uG{xruH$xBalyZ~`M?33%8~^ro2t0DzUpmsXY4XJR5+Z(fI@ryO&qy3woaB4g z-z#-$ZB-7=Yq-52KzCV98eGTw-4g6pFEm(jCgST_Hme4N9(Ts70_evYl zLl*@|?EE`*<_~8xVxD700oNNt z-?P24hKpZ1bY8`qAi_EJK}e?W?$K<=8kYbQYQ%r-K)f}kAUqh7?`-fbcQ`GLc<&gC z(Us~-dL|x%#`ahs?Q-+=-otoH>uERl1$5r%k1DG&?Lsc;volQ(JRf{#aP{WPMA^(m4#t zvk9R~SlHfjVQtG(dEuZuB*kt53_fTktlw^|_)eB?y78Ra6cQTQ!B;7?oF2XmPR=ms zX-}HVXh+MbXWA{UPrfuQ=5Hv2AY!=a-aqE}yuGWQh%^$ob z<(1vLOGIOfmf^!IXE;%gXRP`I+TtGmcucMvfd)p$*io>O(m{Si??Z&J%4?9PF-V~@J}`E614s&* zEQ9m@h4y4Y1LXdQQ45Nl*&p(-HUGoC?gpMSY)700AC@QYJS3mq&;=|Q3$X}|&Y#SL zJu;Ve(!yHq<53;D^XS{1^P?6D=oKx(AivibD=3h@Q1cW0^PkN+x{Q8t0lG|kR^761 zK3s99niRBOIG6buify}~v8oo~Q>Ob%RjP%2?JT?Q08PHJ(|ZPh&*gYmCrc+Wfli-q z_ViwPa_`jSF9Ust*^?fNH-qfRKlT0j*Po+h=AIpTiHX;F@;B)4G*j#0-m#Zzdx72> zG7>NkcNt+ zOAL%{^^M7ixwk6nb%;TGq7&Uxr}+T;&HJ)rT^S;Z!Fcyk*CYPWvL)MmkXK>M^vN~* zZ<2nk*DrdJ)8DI)&cYsM6l?r-XcvdSXPkI|y!yWPG6X`hJSRi+n0?1Sf?+QhJ|^P5 z)k~3K6)%Qp+mG!>zEb}ics%k9^wE6UfgrsF_1eYp)8)sc;Ilj4k38ylnT^Lw&#bMrrO4<`m5RG$sw;zj5o_1M-Ij7P?<#|laXWBqgb}S zQ=OYQ6stK@5m+W+ZYJadi<@sAs}HBiyGA3=Og1sxR+K981!=3cyL$(p6+U+Z zId-2PkFPmEJJ*Nf(+*(O{Jj6Pi)IVxt+f4o93VUzr9?;!epLTVSs!2goMnWUM?A=r zDP)<{&x8t8^~H|(OpZReR311?r|oK>>yiuf3Qvh?tb6x2)_&Q1DoDV}t}01#3fPD1 zy0-}aSSY4#{JHup2enH@tUEnF);i2^x587YO~0r=)IxXebPLXxqI<#N_)^IVuj>1+ zjLIx@cpYP)z;W~Qfp5FBv-Dx~UFw^SzK8k@{^r}p#86^=7ct)o#m2|GKr3l}io>1* zS`(}tW*Hbb2WLuyJ!rLhG#=s7v_lUJynRVTVZ5H6?p*rDP~hVuRl!V^tgYz&7eawh zX<6#nH*v^ef#Jx1caNadTX%0&WCHaIR#K0}b{Cy(P9o#G)Ays2A4vS0>jT_#*&=k0 zdpC9k*>Ta7G!_N&vdEDyS9gqCLZ{k-yElfm!;j{De z7_sB8Z zIUmbl8C94&ulE6GAv-HjY>0VL?G$_jJ;ix@T9ZRmPt5&Or|wA&16!wxo>?Vj-r=6g z>mbH$J0W^I*e%V(k7;f;@@VSI%@@*Yx*jWWi@tVIrNph=6U9m@U8}lgJoy9uIm}Ik zh*VB@5~YpF-T6Nk%{&W7t=-3_vZhVhM|$ytk#C_~IDlE2ck3byzFF_o17{m0a?-=m zG`-T-G`-<5SP_4rv*9sGUH8QUR;9^1>5a+yA64%gI4UB}E}05lxGPmw7J7;Ufow?( z{7hDd8}^46xKTVgG8H^-RsR%t9GCvJl~KN=wW$xq_ITv<|JvM~?#Q;9fR^~3-=q=4 z#SDSg&H->z<54}hj`$eyc~zO1ZSpcqq$=1 zn|7kPT6a^d&NcYBO}_hZWqa?i9y&@xOKhuG07HQrxF*j&|9X^;h@B(Ej<(DhHDc!j zb1>n1UoMPUHIToXAH=ZvS-2pJUSh)E#VUCQLOF=Q2gh7-YJJy@#)RJ)ochMF4Y4zL z);a*rx1f>H6VP1qy-(@MuX*^(Ib0an65 z08r0)ZBPRL?}T}}Ee~F>HbHXJNN5f9s1a1lmz-@DZ{amz1CwgMqG<2FD;!kpmJ_Es z4dkXlwQnxNq1q7~crbF^Gs=t_p;$U1IDrtJ@avBFP?lU4dQg_Q?lwolLMzY)xU?9S zJfSuvGC>>u)*|1jcfeQXjf8XrDREDff#JW`rOBrj{feB>b~TV1igqI3wE}{;YBj=5 zo|te?W(r`D!}q!USbUxBYKSVEh`>2--zIPHw$doh=s+?;O~A<}@w1r8GN>W4{?eTf zYBma_0yO-NIMEuYBe21QRx)3vc`XCCxxhn%>zpP)jJ?~oxkz2QmmRtd{y(n%GAxeg zX#<4`?(Xgu+}$;}ySux~;t*IQI0Sch*8suYgS)#soc;Zu_x*6rhuztk>8+}%zN==Y zukN}<0qg3zd`qdQL&sYL{|TbR8`WWmLTJ$?l=&^{;#5cK06mC=jfy0liZqQT!Xcn@ zhm9}?9aY|&T-FysdpS$fe(4KV?8Or5oQPpxrnNrr2{c%C(xFy2}+M9{Hz ziGf2=Lv39yLYPt%+(7nd7BmsFZJ-QL20YGQ+Z1xDF3vXDgxotqfq%dy;YWXnAwI)4 z9@k_WE`y9-pR>3=;F@8_qx2C_bN4{VzJKNvCHgdOnwVV9rOiUB~m++0X$L_EW%sxuC&6pI;V zw`yl%&W5UV4N{6Z0b6N3Isa>SsKt^rj$F4Uy!yD1LP(_9{N|IGC?&*jLtN2 zOYleM$KL>G1ZV1E60-u)#$?;Zn&3J-{br_+Iy^`aym`dSD^z~T0{-ZXf#u{gf;OaW zpi75>%;vm&&hEkP#C=L~;l#YkAgpDd?%0bVEk$zk@Uc&H6xy)Xdmu zdFUzCi^;N)ggNBnP;OjvI2|@U(Ix00Jsg_`Oyyz$EY4mN;BlB$$kl0sGg!AZ^O5zbcJFYrS*H@^|A+cbt-@qEa3PrtE^USe zmI{eNQgK7X7%V8OKfsKpSBTVa$eU&RmVXczl_IuAW@OPTTeVSB-zPyrdCXG9K>dLu z$pX)&v$PgemAaKMs8sLgR6k-XO%nTqNwlGA4Zx7P1vbUD$);DSgNl>X%7D)^-q1Dy ziapCev?KfUc4G~VOmpUo8E9n|e}LQNxGC$1nXw!Xe8OOoNFx`HH>!(mz0m<$bv}!f6ou>jKhn@OTguEVuTbM)Y83ajd+(ecJ|Y)U>Jv zeX^)F4l|JXIb^OaRj>l$`e>tz`s22|$k$c-o3SDC-=-62 zaG^3l?c>qjaJCU$5U-3x8dZaw?Ov$*HA&Z%p{}dIyg_#%z(4pff`%X~4(tMu{YbDN z^a&K!|4$GHxjG0Zda+VetwC1B52hgDz`l!35YBVDc6k1fYX7JJdG}E>7PlqD%DiZ4 zReigv!}@ROaZ?o}vlLYt%QtM&b=?>O=zm?!xHtky8UstV`qzjp_zbDk2tC=0N2GTB z!GLRfP(N%3fs}{kfHZ|z`GbT|_rJ<&u?@jBATtJ+LzxvWm$|IUJ zx2uL6)i;L%Ai_#FOhvUVSIS28t1_O%M<{-;zDS5$^opPI<>tPyl)W9?eJsyQmAR~~ zG*SFPf((Ql3Ks3>62y6VjqIH6>7o*Ma|xY)Y`&>vXv}Rj4`*sM-)~t-+gcB}O=JFi zUp)FMLNF3a+xNq!(mLohc+A&Ob-CU0U4lX5k0=};e5NKQp(W(p2S(VwZTAo>N_g`tNZ{DzQk%ZQ@3+ckgv2z+tnaurbrp%Inkj+SjN+vIN9V|xvD=Awd@NU7< zv4)3VPwu5B4RU3R90q#x^XYOU8tO50D6@+{J4RbolsfncUQQHKDJ8w692;~z4-J0L z|J7)j&n9>Jzem=}p_cz1S;wcO12O;)+qmMLF6F|m`vgyd9r-vqn1O(o16TGUhNoLB zgx}ajBbRkNd>=&2ihxw(g_f7jDp|t_b-OhhqxZd--uJiDN0RZkR)59#gV`JI>0T1z z@lLOIhxh}=;mxO$*6S|6eJ@>&dusU(jtF)O)!S^p#6er>?~08_v@kj1L~?+Kxy)rV zn@1rFw$4HESnQnEyCxWnaiean>~1AZVw?PwmGS+RxBYGber7Je%27YMMkQHgz0{M7 z3nBihYM|dAPfuoU!YKEt;}yRZ0Tvalk1dsy4ZDt(H=+Pe2~btAMqMF?rw-xO>+nms z#;5z6Lx-&PWo$2Xi?__0SO7rU$gfs!UF!7JoB6S~bIxh-o3ToRfj!<|t)p*K3#WJ} zET$Ls0WphAOOII|OaiU~f)fCxwR%oNo=M_72Sbr(X*oqV0w<@wCo%JBQv2te3UuK~ zMKU_+mN1$tE}E7oPCg+Q%B$MHFb$zmQHYDM4QJd>9D^`HgczjU=$HT^M3|!r``pc0 z3y7HYq3rU1i%=TydjSpH3TY26WSuXo(U&krT?Dla&9KeI0xH}uT&J>LRusYtZ$!bhvht0Itu+D{BYM59Lkp+|1V@9y=gjORh#HX0W8yA*pkbu@ z{F2<&^}N}ap^EyN7O3{j(AD5-n#>pZKzhOLyxG4h!26k1ybGhDcFnKk_UsaEV}VPJ z^J^fCu35Avwh{x|!r%nw)VRaIu?5NERNw)2OIm~b>RRm#|6x<<5pJZa=A}+N$h*Cn zH5XpeMo2$e+g5T?mDXx6t4_HE0g1h z+qrU!KHveova}uQ&5kJZDqtY+I|u6+RKb{9In^tD=aFgcUfsvhQSQeHf<~(zf|}^% z@%`%1#jT6|3*cDBHuC7XkixG0_%>@Efzta8eC2i)4abP|;ijz}=bnZrM-63~m#{V2 z$a!inGS`iP!0olGVY~(nr(2li7^`5K)QhetHlk+7jdg@-*CFl5Kw&cNY*P8V$ujPQ zG}OEf7LHN{80|$*xBTSrnZSrH2i;PI=Q}0I-d^F?JwOw~(ItxW5CQ|4IfL&>P4P*o zvM0iZs3T3^QJH6j26c`sWL;TGVJ}oOm1FdwZ(Mh^>O_g6yVX-F?WiER!*yIL)Xg?| z(b6rm=)|DKda@l@Fy3;{a==(2SvGkP-Z9du;(@2}>%ULyZn3Q*8uyAjo`%PPjkMug zHU1hP;`o%uC{<;#Pb-Jo!D4}ZksqaoxDZm#Um*AC_DQ-_)=!dk;d2GuCgUVf&SuG7 zdTYB)RcIsS`~0mzM(X)e9MxbOcQr0(d3{5&uaj=Ww?-c?srY=9hCPpxDf*T|`uWw_ z6dRk@lCzG%Nroo>)h2bXCYx}vxBQFIhO}-#ak!VGB3iSJO#>UF!ha^IMYuX-;mofZ zSqeRmVWcVFCM=P0%AYNd>P;n|gdcjTxhL!s>&iXQ^6?-?ZS{an8=(j&@tW&dXdeW&vg; z0TxgD@>F}Bd7eJ%))^OoLM_bRG!`ShS&Lj-*v5Kh#-;K&VKp33;Mpwa#wwQ0cH+L^ z8I<{Fm)XVepVDugD9*Qj3S6AnU3tXV7S+T(=?ZQb*$BO^W~U{=_;*;Krg-)uUwM>h zMm!i$3Q4oNL$>-JH=oB!Z7;qs0N&0#rP%u&AFbSPDn=TVt(sRn)iUhdcRlG~mL$(-W2KCmK2*irfjP75!Ou<}X|~zL5NH9&80<0hLS$5u zJh@9)ExBzBYEw@-&|G=dfMxv6P(nPv#pVci-EPyd?wBO)^TggEKsHmF z;kQofCOX-Gqgz(WuTUG9V3Bm!>~+5>P6WzUw01*w8D+oy2_8VT*QL@Hl?<^_b7#Zp z`E8|7mv(db#=Sb`@2iCYN`9|Pev1Y8<&}HgyV*T+zW2>rO!8=5dXb)Lb4I&?`I;F9 zYuKsPLjtu=I?E6Sv9NfbnwK0^~ zHH`Z}p|eUymw5-q+!oXg5(hFdFS?xB1KuFk>2Ccy=>E7qg3RO&v4{h?qn~2dt<8nL89>stsAK3Y?CDzyd zE0nL-<+rQeZs8B-r_rxR|F40QH3CJ$*G`VssbAI~>ItZ=?cI8mh-AQ8G3EOcEI7r~ z^7G@M58$<&M~tSWA34F2;;e3w22~iMTjSYh+I%|}2TSxX4E9Hy83#%4gKH)MHOHUxS z7KZfA0~{sH_iGJ3c2B*b8uCp6#~dq@5w~|k6m8EgMZeS`luywZ+Gu)`DtO#j5b9JVkxJE7;6Ff zp(IP23PcQwhB(V|PQ5>od%mubeaT-)a5aMkNMgE;2pQa3P@X~@0gOwZ%JS(bD*`@ z-#BPi$nhZgIQUI<&^@4PR>N0|WjhH7EU3AqtC+IG(m865?xHHL;8oDKnD?pvzh2j) znq5ORAUXmqq81WQ;WAh2TA%}5t`1%CU4K9MqolExa74#SPWNTFrY&W@?#RU4($&mx zJ-)=aPp5FpMDV0nsW)<$Nm!^Sywo8X8*pq$y#MxViP0864UhAy9`pl{N))G>@yRp) zs{5Mo=O?<*TvN{y)0M>!)_@|L0EYm7h_de_Ho8WB1RY&zc>zT}0ZB(vV~k(%9Mw*@ z+xs(qu%NSBAzcy$%UhQpI4MhjTN;=mxf)VA&O@g!t-X(sopFq z!rLJ97bl%n*001!v0*^6-|f>aIYECEVNDI(?VVbM|L?DBB$Nd$*J*O4E z%9cqfZlOGuQlHw$DomXmmNLEoKPz*ytaq(tD8;*J?TY=m?hTBY-TEJL2YJGdi3)}< zXIoRbEMJpqfZ@GM=@H)V-)-ry`sEEa5xL+GN00`Bjpw|xzL=;(*SFliPFhHOb^6;F z8sJO00r&HVt2a*cYeR)P*Ed^V5T@OH75`WE;wcI=+ngBJGGi<__&0aPSJsmjvtPiMj?TSD|?@u130&frqvi_bU=0#4a#uVp}txgX|l zC&o!KObFuJ?4gWNY9>^`dHeL8 zzD4S9Y-bu~LtxojWC!CzBgB$6PCyQKSeuBYJFAKxF>swi0Zzm3+Rw!vc04dQi?nS} z)@4kRqceUS9mk>z6@_@dz;+~@qTdIh`CT;&SN?zFyQcc2djm8EZXA6Bt|4@<;|tKQMGfzkhf8q@9AQF-aRQN}+VAM{FwrWA3b_<%D%D}N4?9Uve#8{n(WEl>5$YO4@3HZf zo5u+U^7+3VJpo=%-g-lsKfU?hr}^nLyz8!rNj=A{@$^-PXpwH#c8HpNXnM9Y6olpk z-uIsO0QzZIKx|Hc@cThz@B2fo_y=@0TlpwIh#4ZI0|Sv|cc zec|pLm4AjM3DZ4yyJK|Go$Kpb2S$Fg#PLLdI#Z) zWMiYb)y?FxFs<#vdI*9M8W@g@swc&j25QN#>;pfA*}M304|x24jY)rGEJgA)g&#)p z@a~9Um)+0BQb_((V$b5?9F)C)lP)ON2;lC`q5Tj75Uy2_o-1Ee`aPO+X$h>AoYFaZ zUmqV21^Cemx1Uqo{2hMPzoXZx<$Use*fFWZAU??mnPE;sk=$IrYB4spGrp1R(vz45 zl_xw3!1m!?G>{LD_k^q!y5jW$%Ssa4= z0^Koliij&Cca4`EJ)2+{raXr1iCEP@wt*ZEiWq@Y!E`iG#Iz5SiIr?EpptTOxcL{F z$cQm*YVdWPlEY^sN)RCk;|2)rUUgESa$*98{5Zj1@C_KQ(o#CeOsz#!6D%bV11fTk zWp%~Wew~(k{*d)mMxgB1-py`-B+h&vC8C}utM$p?GMm_1e?SuGvXNUnh zPG@K57I^@)0DiuB!>xz_O1=%&c;;1P?u?jLauFWNL$Tk+_?UGis?ETv4+qKsp7L7- zVv*OcqYCrKL&10!HmNbHxfQbJd7|WA`KRvELJ@) z`*nXQhmG05yNm-Ubb)RWu2v6e$2-7Es;{2YE!0E(@9D5fE3OC24TKzC!LJO5mGxWa z0O$$a;~yS~%a(tzcXjf8fq0uMf~Cmt=RYB@Puj7Ow2c)6RIRUh%;c;j*lz@Ib%>Ky zt{gqOgKUyj^=hngoGR81yB#X{hp>c8S1#KAT53CgMvOSA{`t%AfcxVLdi@wM%BV2( zZ+(1W{9@v&YHDwWjF_lqFy!bgQ>&#W3~%oz;vo5`YYtsx@tt8Jf&2G0=^2D+*V{&y zG3`U9JC~77HXzsO zh?&P5*W++al2R4|cvVU@2z+uok}<>{kfdztC=yI?Epp3U#RDFB_ms~7oZ66x`FyhS z@5{EG{OpqAxHdkg1&n9stGASuOUvTgrC&Ve9qHJ)G*2y-rHIJj#@;CK&I!vy`*FF* z)OcAnEJ8^4h-HHhT!@kkMTTsU>?Vrda0jUnlHKS-yc#y1>If;xe5yi0lDPSV)Xy2g)e)hRT7Qd)*VZv;lz;SIz&Y<_M;U|< zd^fcD^kakX{~B~^QLOeVW7?P5ZlsdD=}I_AcRo>97-Rg4tAW zjI|g^>s*)rN|k{ovT9-xA`*POlxroB0r%S>oa%YpPAAUt@#6IdOc&W9FT$X>H2skz zwHWY1PglP;ZX2==Xo3U&IR^VBTiJC;jTe&h&7)s(TDkiAMRyLi{2dBA-*LMbQGq2r zntJ}6c4-seE-oxS2|h$!qDpR|KK#elEPEa@EL6nqyRCDx`GI&H6WSc5b;_qeVS7%P z((-VokY1Q6$7we=fVe;%k<`lCmSBi?xD1Sl9r%lsD}V>;U|Y9udf3lw!JIhk>lE>2 z-kWYQays4|wmXSlKhD$oshUic#v!TL(A2(Ot-LHP{asgueL>q_R$or@ETis}3h}~F zY{s!WOsUnC9PI|3T<`{6BEJQZa}^%Lc67+f_^%x9YPY! z4?tyI6@X(C_(RPMgmGbf0E=n#HKxXtWY7Zs?S`u){xfs=4e}yY_SqeQ8XXOVbPfYW z1k-j(`RwLJx8Vj4_XaG&6D55{bs97?A4DD*5DNe+zIhu7sfs7()Cde`ux5+5a|y(w zC=@dNLExmWb;$EXqZYLsL`o?fyNdd(FjEYIrJ^$Cw?=` z&~3?0JHFZ7Z_TP&g+cy?1gS~2TYE$jWz`YP^7%Gc6TZLch!6OY?3`n43z9I88giP2 z1^=80BRr=wX6zS|mDmI6XPt@ZKb(mPy=}|!qRs5CyF)aDFf_9x^EZ5GS5IYMH~;}v zCvLzUxL98${&oKEW~xpes3ayV8y@X@f@kwLG+#~X=d4Cfl%d7z2c~l$R;kjb&EZ3l z>Ven3ynW3zO++(pDO_XpwR1Tg#(7wmv4|6!PvQe<{tl=ox378~wh*%ECRYNvca}S2 z-_N?OxTQ<+1sR97|FHGdS0T0u8Upr^b*@Z!cxKr1h?zLWn+J~UWKkINnd%@vpr>Xr z7OZz}7}qljrFi^Jq+f7l+LJ`>WftnfWw(^`exgBPDyqb)3@j(cq6}6@$hhSxyxsv* zebI#sNWQ?uX_k5s$}acmN<~nayK+ zkzfq}k>$nXghGSwNv=HX&p*Y2Bvcgbv#ku1WVaz7yN0EIxQ3nK*awfxj}p~p(B2cP zzeK|%B4*7mjs_)^ztO~gMv6A>D86fVH{O&YY6m^i{+ln}mKgkT*SC!6e*AgwNn>p#t-gypq8V55=ajjcH~$4c=yQ>=NQQUZCP6e&B5 zaicM!5;QTZZcVhk;G>aC(`WRR#!64j6ms3s8|RM|DHG+5o1Hw++2PjI+mA4Lodi}A z=S@GKcf==YNUo;f+JEYw(C0K~=we*?kbfT%a;#<0(^Kq!B&wlwa{v%Yql*r!wz}fE znAT=BeS1VAC&+%Kk82S~s>0vU?>nXLWAFkT{CHOOD6U{LS3Lb1P~`(vcw~9zFdiPP zteSRV62nQgSB4zQOE$*bk^#El2T$&Yr=S6RRSq8y+?K?Oq~h5@m%ZHu{T2 zoaH6CkLe#6j&AI?Ty_BP4Ga&F4^{J_Asi3lx3Ns?Kq0;raw|QCr8sZp>xD~vq7C;= z6A6ks1EkQ!_=~m?^R)$>?e_RGm+iMjhgE`_7pkQdgTLXU%CJwh4P#7+21jwVdB0m- zngig9&mZa{L;VG`Dk8gi7oE)9xkz)wMpjE;@Zn1yrl$?;xVZrB-Yjk~Hq~0Sb)yH8 z(_O}I<5Sc)U%XGU7cv)4|3smtMaC#wQ-5E2rcGZk{o#?ME(@y0+%9js$M;oYF@mLq z9Fz<+#$ZV(E(vHagJ8Mcz-Tg=9Tc)4oETMK>T=)~G z3`=OgVLW*E+pr>?$0|`I84(cmd&&^&HVXrm`v~_;xTe*g7gPeK_lV;Imca<2+#|X)HEzS@_7%Saskr1jUXPj!pYXmXQjYC0Pe27 z$DenR#2@cYy`)fhU2vRhWeN4k6u%>jLhUeEQGoCwTcpiXd4%y!u9XO5z6;2KWa z^hH9*_O(f9;T}zkOOYoh)iQv2gGV(vU1$(ce!}j*kmF35sk`Wvi*S&fc|!0jYi_P< zwpCqUJ<-Kit-N3$8?VKSQgnP2NfHbRL-R|&d@ z=f@J|G;RuZ8}nm_>jIdk0}TXA1cSH|;PYxYol(nixEV@~JPJ;YyH*7LbnCS!8BL7< z{lDXPaUy&8956eE_=Hu1ojA!dp;q_4SG9GTww&!s=+jMJOv6Kv2EVlU@Zob&;5ryb ze(_{Ehnq4Igtgc}7bdW#=_5mG;z}jky7L3Ks9-A+tS2zd6PePeLXZ-uA0SI)1%o58 z&@3^}LuQL|)b}Q~4K4cZX{|JR(_{q!?Jq+ppML!4lkgmW6k(1RlmWR^^QroAO~!8)ekz&r!GaUs;69 zTR1oAT00={?GwP!PPuaPeep(K6K4##s0?TN5)I> zxeLI$l)Ke+G{0!Te}x0~80;0Pe!hJ=nXvrEGqv~B_u%E{@4fuhYwztTE!B9(LtS%d zfyj04+p%I!7wNt%Fd7I`N8!g%{8RDo~b7&Tj&#T4l$p#Mlb%!Qx> zJ@gx5Lz+Tca%3p{E2=?Obbs4F)=a6^0W^LtH5qqH*^%UN)jqzFkUv2>sJJXH-F?6i z0~TyZDNb!vT#b^64p+^GPISnjNp2xe8d0#OBOs_Si)N``b~eG#cFVz8#J`upahX@g z(OV5ZQj-_zqOo(V8V0rmK(sNvvarre1H63zlUa?ZOmuOHkuH89=9gAlM7HJEVzEhN zF~Gs*5#>7IzwZ;hv_qUn*}>0z2^3V8-!?l*$75_(wWz)Swm~X|-_c3+My87jm z#7dfBNIY6GxtjXIU5|eol6%|!(P4Hp1s2k*8CcB%H=RegDQk$ShqL2n z8lJ*I3^>Z&Ff-8fQg$nZ)dPxSu?q3+yS_c*RE|EgSQL~04VDp|1xsm6VG=(OPeg%W zu^x|LV!n#;Oh%fPjjP%K3t?5*D-wO@gy9WA?d+C=M>-FqBB$;E5NV2(Cs8Va%0YdO zZF;S#zNSx>ME&vPa5R&BFNyYfpZw*hxBe0NsK1W@pe-WQ+dgBrpgB`*trqUzDi7QG z&KZNwK**Q=Xn;+ME3^zB*MTBD!#%=W8tV78HchuP?SS>SoscEt*bizM1$rdpa+(lx zs2g14xawmy(}(6jZPQ4f-i4mgHy@~0s;1kS%)DHxO6=1N0b8RnXH5pN8c@A=chDId zuR%@+a42>J=3sv&;k9B1j4g-n_&4PfMogM;Qyi~GHEXgXyJ=eQ!m)JvG*(DY{qf`7(DU}6&m@i-Gc?;WuoV&c)JVwpUf1jf zmd)g*^T{^=okG5o{)`eDnc$Y2$^E6QWiofhacV8}5cA8^L{yac3&FtXLCGHu0;op( zZ@VWB)~v_F$6^BsUK}laP1WQ$-@V&YJdo-tq0yl*)Lvz`lM1Qdyw7+6;$^49xW-;~ zvNzx@b4y(HY6P*IxH5M<`sGl-Vlsw)YF-6u&gh#FiMdwImDX9B_0Cj}CRIes~B#lcr66$C{wAWnJq2zIkGj?Ad& zEuuDuC`3*e*6bP9C!Oz3L_j&wN1LTcQA!jls+%8rYhfC}pHKSCAxj}`olIXC%N?Pp zj|qs_TR$elSBm4&4!3WfO(B;i0C0E>bn*;;yDaeXm6tub7bqUNxwFr7Rps3=ufr7% zx$f)m2$qUIM&(8+B~dJlm#FXKM+_A6F=Lg1&+eaM!5&cDAq~&I#j6^u{H>|8{&N4} zCH(&I8{Z50GEaCFg(N#ccLmoUQMIrNdm3=ACcxtdjXizNtbd24KHkHYK6QRA#$oVy zZP(>-KN?l>K#$A*T%?L$3&cL(PJ)!SlGdi9$SOCBF>y_Jp$vt|CA>Z)0}|d*53L<1 z86?lr&{f)U4+KxFw#+Wl@QwvE?1d_^wY`~_4*TDN>hLNd&nGA0JJ9hR?I;GYB?3md zstvD41GMi)OC`T_h4#{>2va}2J2v#PF}ZMTf*#Tnt(mBQz72Q@`#*g=ZRl`r;@*Wx zr?>0YiSbz>Zn8H$M(tpi4&KvHNZDCb9Xzw{u!iBqappVs09*Roy+im+EbwD2$DOOg z`il~d4%@J45qGl43pT|izXOP}+WWmOza)z`NI??{*V1-sq*y+iq)CBP04ohb# zlZ+i(Qb3IPhwiO&LwDhQFa39sc{dyoIzEsMfl(KwIqfW#Vpmwn?V9`oGu$4E=pBy; zB#$Atdf1pl%Pr4d3~IT`26|=2cVXpMK8B>7LmZ^JdXEv%iLW2iu{Zkksg1B#G3V?y zrfKU0iVr20dY{4}T#hv-)C2gaCnb+Oc#pFzjv~V(vduH@65=^N>;1}n7?#Tgj0zm^ zYSnmQGPnfTm81q#g-T@+yu}M-#8MNDZvqyR})B%>x6&Ex(+1nsxBdDwiRP?5FfywG`b+d5qynq;!5BQT&J$-Eo$TH>Dm?Gi!VnS*464{$g z7m^}WkTi}-EWW~&1~g^72eJPqxn>e99O3ZL++sAk$p~chL%+cC?bV0;wL*$Xo}$OJ+u|? zZJf_-V#l%ao5+TPK#rBjTpBbLfnsAm?d6cIy8j#%#j;`1@mB6p*bi;jt zJGIXn=beyK^P3*U&IECW{<5SPy`otdF&t+dEmsU>g+$N(&Y&B> z)PZvFBGm-w_g(5ltJ21>v;UtQNw+ zT<4oKznGnxrc0MQ$<&ndDU`AqUMz=k9R9ruT)qbv((pes{|h19xO)2g%R*%iL))JLx8RdbMz33L3@1I$-K-#1tx_JVz zja#RcsNuJo zwyUWRq5*lV6rXNY;`vN{LX3acrKZ~J}w3KDt&2b@3hm?a$n95en3Efs|w4>y`x}xmB-bT zdAUhvOmFw;18`6c&F=zKcRP#rXl1%% z`m>%cM?e1c2v4tGycsji{9LPTuUo#1UP(P@w~Q}v(Q@9#zH-^R&SQLJ9vi4YLOIK2 zUW{&ed>kc4nUJ(iIg7FTr^6OKVJX+o=GY>2o$ezi(8f+xo~jM_E_%--U>z!%z(G$% z6KjGV0Nb_mjOG$w!feHJs)oBEB^^!5&Jmp_f0@MVSido;WE)R$88)iq$t!sVwb={w z{J+p8JSq|76PYWCUH0BOW01f!zoCj2oH&R(PNuW}wMH$}5`iU}^fg@0EA6*a|bF zWa_k2=Zi;;*YBt}W9SgJ!j@S_IK{x{=HzC(?+}n^FN_ucuawGHx2k`d+i%GF2eZ$R zJ*Q=lQNiWBwa-}=4PN|>Hh<~+u`D)4=C}8O_#AVa>GBlzteLX4V^cYZF@c|Z>q*dE zE1aeO0)p;_1%HkY2>x_lSVWYD7}Oa%mU0ovpmE9an+xJT;T^0gzk998;rLzdyA>e( zk8J_qq`7D~MbVT@&~TJT)1A0HF>x5OEHZ8IGDt3i(Kn!lrq+YVwS<#ZW1w?6oxv2-9t3*Oi1#?F9NwRd>*xJLIa;Y}?5 z+oCPWaV(lsvIs_99#5czKEjDH2+23Bh2DVtM;cng!})(U!`Id>$W3gB^}}dd+K77n zAcFEi43P;?N9JQ-MD`75Lm+OuKtH9XgIKfokd7`c+;BjviWDvtf#t_lId&m?^Y`Du zU2QD_B@mjjA$})v%eVsm{UQ4I=ky0e3`7 zP6WoRmj$?CQZh(SWHx5mycKJ_{_>bo33+&#a!+Gv%Ls+`_QZfKl_;h+a z$5r4szASOC zu;7;lK{~ssAu4y6#jD%k!MRbx3-46yrj*;h?$*Efc0#3DNO#w_O})mQ(^MCNUccAq zS+NbJ=qtDMj2ZIGMKpf%1Ni{havf!uxK9Led<#+D(thcV$ozYsgRJN3`6$eh#gfGW zjbpBcAK_X@CS`MnrDoi!5zrx0NG zo=@m?06LXwQCWBExnQ4eN%!9=S?Ht7DtLEM(=@8?o{dLMbRe6cLoh*1@8T2|g{R&e z=-ys|fgyj$ubuPxyUd6V_95F}( z2K6}}YwUJfYdo~5AxT1JSWlPj@SLi33{!^qh-Umy_)O&mWmV6drUofnw&$Egk5)Sb zM@WlGv#)#2+B_j*J$}gW zo1DD4;G`&r_}RoYu(`9Es7BF8GLEe}sf)qA_ZFcy;c(6UM(s6osxzb|0rm`AbZ>Wo zDT$Dq-5X`%Qu2(++p%_cah_S+k>RhgJo ztDeOCB<~JtS1kqHXQeT42WSpDk0i!?+pm?Q&v=3g&|u!i6BuP(#^I#px&y@e zr&^x(>D>0_+Sc&U<;b7b|062yv3*K-f~!j^f4FLFvwIKyg z*N%{ASIhkB0E2;WuP=?ckOOht!Z#g@@BV#bvkGqf_!23Paaj3@!S6P%Gl9tAX)W6o zRU|}D{Ll8~B$ciBvS=cWrX^=Q~)e zR1{!{mfEao?bBub-R|yBILF{;qCk$bQ4>@&{^`8j<;(fW)s#A*ggl6UdO=qqiNxfgS+1F z3$xCbX_{&z;h9nx&7dip`cUrUK0F_>z)JvJ=L*eTBPaJY+}W^oV<6(>sdy(r5h(07 zgg!6UE3~V5-cX_{^B$2w(_hn!dfso(Y8NY_24;j@f8vjFj&#v3bG3R;cUo(-izPSS zCw&qQ|I!ctTLPrJV@VTY6MlQ=jkDqh(xe^9eZULetm5>v{ANCTc~M!%4AlrbM+3A5 z6@^$azXookKZ_EuQM@M2=+5OCG+B5`pL}Fa2BW_qTrc+{|+l0}{tE!+mB6l$AX2(Pvmx5Z@+ zQ*-p)FGCme$T97S1;d``RrOQ#{nA*dU= zglrL4dLrdre#nzu1P>ltF3MC3#wiSIcA%&hdCT!BG5{HMoIeG2 zw~F`3)`+1_#Kk^Z1Z8fz>@IqK*{!Yasbt>s!gepd2noe3o4wo9XJT#)8{`lBloyz_ z$4@``)Hvn<{xLt;AjESCCgB&3XvZ~)yf(kJ|0telofepT&Im-BBuW}(|FyU68q#HH zfHFo3^VfQV3i=|JZW%jzPKdz1SVfD#s$BIOrnYBrv}%jXT>n@L5bsp`cSCbaBkA*| zLWAZ;!)lRilf6|+nNI`cv&96dloN2ibq29H@m`Jvpm9#>GJ{D~(=-^3H_AJ5e8Y%o zHYytuJHzDZYgE9-rA64QLtI^N)H#Em7yxDW|4{YL(Uta4A82h(ZQGdIwr$(?soSYL zwT-E5+qR9V?dd)5_kH)Sb^mxyo|WXu+4&`VXC)hXn`65B$=1rUP%gGpAK&q|RG+0t zVC^mHa4wJ|j47Z;iX(xVH~N=VlXJ8{Ca8|fWgaT%>u9U7Yj0;$M3-y*cOv~h`9B}B zZ`h54&%F>603CC%0G}x^gz19W=XmO3lrqw@3*pA7ljA%7X`n2O>|ZM+?k&@`n|ST= zWboS9#0${-bo77nc^vp{Z*F7_E7l`Hx3+_{v&=ly#jon;mDpqsU`;#N@(%(df%#2T zpf4{b(Hw@mgP7FK@V{5Ui`U%k*CA9EwCwS>$>f+X0T_w(P5@@(0x*~89VIRLZ~RZI zD7z1ryzSW_Mo5Xzt<)%MFm;m>H|g21x?wJ&-qKXK&-Knl+jv*c<|LdOwK^!o9CSr{ z1ycK}vihp7o=~z0t{e^CntvV6quG5bk)0LnKZ^ovyRM4Sdrs_af9pC;*n)2acx}~Fz@7>tC@((9yquNR`tY3%G#d@P`QNteBt?fQ??7Ikxo8Z@p#Np z2o7up&p{olIq(C%!`T#q#A_7pR`xkf@Zvk<0a_l4ud!9?D`W%ueVlrTyJOnJkv?2? zojASfywCU&S@<;5*Y~jie>pFW)b(w@cHwSy0N5$`qDly*Rz1^;Ru`#{wf3?^T8^_P z4rWO$tJ7_jSzik)E>aYeI;B<^t{-5)r_z&Nf3?qVZH5Ealmmu7?kcNXdB(0ei{mm{gxGSb|Bx!xknQW zaG?>f8f*(WvHxmF2P5{1YP2gEh@)ZG4^ln+aBf5}vv==eu=V8qRja4)MtJu0Cf>bR zub?{j!Xml!@3q1m0*!6~q--~p&$qwBQD(=uKl8*MlfFkV$u5Lq_>GpJMz?Pmexxcv zs1Xng<14P%i*NiXfx1Fq#$kT5v5RjFh{l>~STKNos1Ms7#njk|y4s0cj`|6KXV{;$ zBeydQKT(|5weUqn*K7^K-te~ygL@_B^!s~wSktxS&4u9x)07Tt3Naoz{D60BVKhBy z)hi7iUT6LF@ZEE4Qqol4FILS4b8e>6h<_c&+dUOoN=LPZlCo`@q;M2rnywi1<56xML)3o9afo4CpyA za8x}1Kb{k<*S(l5`Y+R0#eKPZQ|JBms2u!-h5wKkS9wo_ckT-Nkr|HAPVDEl2IS?e;sw!@=}Be z-)EF{-4xe(m&ovlRjJ%QK8wLk4IlRyIHEK#wPufZG`}H!O5cv=tZ0;@B*;Vcl3a!^F%Lla zXpg?1r5d5n6eljm^~>lOcOly!02L=Gu;#x-;*^%+V_KS7+zzUkKM|dy%MdWR3TRvA z!wv#lp5%GMJw0}y+UjS{+)1h@yk$1t7ELl;=BSsHZ_NA#GC~0Er!3pEUMhCP7Ut1cGQF>_*!rP{(4&n~2%buAo8As+^-4M{_6T|(3Lh`JFm+;wx$ z$rC<@(3RNMrKW{NVNoyc7HT%_BfF(QG`~&l*mHuzph163%EP%*o}T@fKZ}`Lp*Y>t zXNx$iPPG-b@^&$P7n)aCZs;r}qF+I%;O`KZPcvtzvN#}?z!)qfs)+2ExDgEs*@JaY z-WG?ubl=WCB!^i8ikC!>ySWdM5#A3^pCPGeN&$Q3Ds(XCNg*EAT7G6(VZ_>I33eb5 zX(2#?7xYiqrOI|ok{#IzAxFd9?<~6`ZJZ~2#gQN7lL69wKP+SmC3Z~}r@RIvb`c2| zxfHNWi`oG;E@{E5*{yE$anaHbox$yg`Drb4h;LjVtRWt_7}RCeaG@dCzl9|yEaqFa zk$SHRMQ#W%or-BDw3wDX{b3ofPssb&~!Nxqjxm($ovV{l! zsRw{_FUMCRQQAg*hhg=I?MuZ@k(VB#!U_O&s9QcwbD>K!WP{K^;ZcH(l^45Rx6FU5vhz2U!tG@@Oj$?wey<{nrap#ncHyg;QeuCb)@$lq)Xng6k z$wJsGgl~M97&&Rm%MHakXw2M-hveDA%L1S*{K?%qlqA1+b?J&_H9|HhUR)-B((|-l zPJWXyA>K}9i|?=jZ^Uplwq(SPEgKewKs;#0tUj2r7 zz0k@+esdmA`gP0-7vx4|b7i`vv7Gg6fT)k?L3c0(QfUFltXJ7S*wi`}$Sn5BR zpCZBInEZRiGs>y$ID}z~8l~Di;s9BwA9OmatMk@-Wrt@Bg;-V$@Yza#;9g??M|^aG zI(~M=dL8DfUjEie^L!BVEA@CxI_<`ms#o$*kK9%wN`7Hn3ZFOhDQV0`#1?Df{I_~w zYqi5}SY1!>B08J6b-QP%b*1O8rlZ@vbl!RM=O6VQ;w5iw`(fAvlg_p^U>bv$InQ&z zQsZ0Ge}BV~qmfOHHEd8zaw3qjg#38_46Peh#9HwRF}#<8kEgM(yI(s$b|i;vDSuSj zv}`+2QkX~claLt}d;1+Tq_w2i@yBpX(BUqrh8g$U&ss#enVPE!LW)ukU^?kIUV9^#vp-~%s<`AhZ4x_DCCt#BuK#VLzEY#{-V3D z>F#GQdK*CT27&4V7SVIkUqm3&`g-c16u|KiNAAa=jf3%xZ~ypA7*TKpx*M}QM&RK& z%5pVM{rb6IHPO0k=9lSn+n8ns3Q!a0Svv}mX;4;Icnw|l)pd~G$$`)jK?tbBuw*yS z)ha`3IfyA(at+NXpqW^!;DWE)fQ!heMsQL$RH&liF~n{JV9Y=@Vo)I}P)e>zXBNiT z1BH}**x-}~rjv07>cxO|l4GygOzB(LT2xXhrcR0HgoXgQreXPnZ;OlYNSy6Nt74^? z62CuM(oJJMFsh8Jw{yq-!J$`#PIpFUz``DdbNmmeB#& zHR;h2_SyX(~vTI~}32=V4jMXB+@^S>COS$;)T7fSE>Ke5XN{+Q?bf zn?;rls!OB$mylukH2=>p0hu;BOf!kaK8)~!U0$K(lHz4kpQSwbj!n%lJ{ z2UH8JMGU+!f@Lk^Lv_MLrYMBVod_8~V#rq@zhFk_BLf8%2Yxqd=5THREP1oo+=ga! z=dMw+A@hy$KiA(4o;+vXW#0`E{Z`04;sOA*-eV7DG$%QdapMUWAAueYBd@E0m400c)$FMj*;pk9?%bD%WG0!{wh$X6BOZ3vtYpscGWeH z3mAS)huWs=saD}uu(i~7<(3&e4%Gr6ZD*cUNXiJUAIztR*U+97HWJJ%qif1Z3Xwkv z&!v9Nq+uhkfKq~uZGx@8G45)SHG#^FWA(?lwwzC1talUVva7 z-GBdK82}p*^p}D@siyG7hr2s6#hHD_J;(dc=AaMzA>>)5F1t~^)36=V!j8J*g3Iu|(8XuT%ryIkFCUzZ z55BqKR87lt$OPmX?5qU`r5`9g?h`Vk%L{KcA~urbH*PX-g7t_wS?OZ$ z_T}w%`qU!22Hi4Z4z$Y^)IxL+gCmz;RL`5u&*5nktwq-h%~}R~OC`Y))J96(m5)Ed zd3T!9jT8<(p&p55%3*rW$3tCR&qr%3zgBMThIM1%v53)h#C@FYzyqY;pN=~M#_8HA z-4ml-q87+wM&6U2_~PEN&(rO;o1%TNqIX+Zq|4DRDzja(;;*fzN`k^oPqvOG_~WXd zhHLnSe=y$oPKhouzPK1ndOw@T=)~;zrfvEsm2|!7X+Epsr#j5wVeGj794BS8udsu8 zH&Z>K!l6zd^LAbg)k<$u~PoEdyEEZp(3zh(QSV7cySNryhS=#@0$i_r+^RTJgg zmMdUrQzT1Rb;-HY3F@;4gH<*v1RW(?Vy#Dmbn5hy)=%Yys7 zq;=ArT!aMpT*mSVC1}jC#k}E84KvItI)$;m-6py7A8G_esz8BTu0CBvPabddFn|7* ztz05>>n=9V5QH_q7%5+xRB6{!2(B4b(144fL9_x}ko9a8yOkS&Qd%#0lH7m9b=XDJ zjbRQ1VdxjgG=>-99e0qh)8|#+V0oE(!ZC(E3oHh7)Svr6j$*5H#ea=-et3t*)71J( zc$S*Yv+-hVP6x!h!fal>=@N(}OU$962@7iJ7P3BeY^2~J)b2lneMI6OR{m<;vGal) zm009ma6_>5|3rR-8KdhaYT3T?;tZD^F>Lhjpp3RAJ;s{M5idkNr%-)ms%`Uk?f+HY z)V~Zc#f03Esa!P_JUCy+-x7JFpY1%y5p>&m++PRbr;9e7y0gbQWzvxLIho|%y@sPP zjD1KZll0N=EL)W-w(QnerF(cs-{aV~a31_w;lIvwp?M$fp861PDPU44SsT3QZH)by zyrYGU%6Yt4-8DY+6aje=((U8(PvUs=c99B^KfBXQiT3M@=+GK=^nYU%_|0LS1AhMh z^c7jM@n*xQVJ}Z~HnBrFF@EBup%SbXF}EXu5+VclU{Tf_Y-?=W zZMw_q81C;U<5Q7b8Oq-Fd9PneSzU-}}?oS=)-8uYf%ByJWxD9s1Lf^~)m2f#h%9 zyvFAGsijZ1{mSmLlJ*auL|NAr`;2CSYAgrNl|gw$hbc#Z=Uqpdgv3=gCFw6Wp{5k(1CZt#6IWt8s6@MDC;Wgd2```?ZKC2lpQ-D z19+D@{8#AJ9DRJOCooSia~JPJ&q8)Iql+DDk$GY9ty}Bn^u@%26gw<~Fe3w2(71Mb z8`lw-m3Fv*i3RWs$iCdD&}R20LM1|VYYjPY9k+hx;r{t~H1=Q<;A=^!`LM0-aJlOz zRxI!#=p<$Fle&BT=lfFE&md~z6Y8E=s~FkRtW6kb>uikIFe1=zJnhf<1(sBp|1d32AYk8x}%tw94$5VJPr? zh_{uB2r<2}loo|qzsLj+bdlRfukB7G{~XFW|Oeb#~v0m4-Ra5%gG0rMW}rQ!*-Us z6csE4XiYF^-R@&`lRZQOmfRhP3gzosVEr0kb*r2%B%Z7O8BIf5SKa+f&ls}B{Z$EN zjiXfeC&Z?Pj5^BN@1aH~EHjMpEK*~j4%erlfOzgI!vP+~&DTAVtxBZTcLHo7f723G zdl1)+fI$=G%m+umO*W*)6YUpSDty(Z4JHa;1>U+(g4l@nUhPlOU}_a{E!bv|0leW^ z9RW;BAeS9g6vNhV0dJz+K0K1X*d_)7 zDe)WwwHF4;878@&aK7%`t-a$ob!NRKN(Nbx6?tbeIz-2jMyi4n0}KwiP5H#Ga3*ZH9a9E_8;14|9y;^B?}qE(7+YenQyhC?7R<8 zjXT-B0|6n~wHwt@$Bo16K zzvnO}Kbfx_3+?&&Vp{$yKQhDm6%qs~k_H5>8VmJ-nkivk>|k#f3k(oRDmSjYL2E)W zA_FFdmZ+7$RyYU{$0^OX9CG{dE2Nqn7_(Dl%HXluTu zIjhG2##|%on{qn-O+fIYCNO)Sg_4#PkvlpwV@;U-2qFHQ)bYP0 zqlS2nf+|{vu^)6Ot9*?8sOlZRkaRHBqn}6)d+)Yz+%sxpFT&oh7M4&WV$=19457bz@^(E_6t`)Y1 zD66BY;UHGXAVxM~IAEu3^(6EmTBe6Zs!1&9b34k9IF{(6W@w#>En^%N;K0^_Kxqoi zU>jmZKXV**VZt$XL2?&Oic=sRRdG9%5c4C2BPx&Ek7;K^{`gfyW{F@}4MaCc2N5*r z`WEn?fHSqIKRO%J&Z5L`)y=k1)s=n*5Gy%3gTQf{npH^Q6Y!gwy{jdFlK++5M0t$C znUWViV5fp(obfBLH}R+o zD5us_CeVWCN^lanczmFaOABH6L+(*hwt!8JI2Zysc_neWig?aEQys{UK3S^hX25EB z^l+>M{2}pLAD%}DJft61Bu|V8jd$7<-qEkO4e-WTw4+sE|e|Ca% z=hG{Pf^whw;eZpGw<}V{L2~vzU7rH!F{VGK6exk0#SVl*0w4bZyTz?nWekKxvSOx` z)G{|pEAL>@8KEm$hH(;tSgMUDIt$CF6zQJYDa0jX0V{*AG=@Yr| z`5)}6>0sQneE?B1HAR+ua^y%FWI_@c7&wx%UT*(YIArMzUV3_lR8AyG4{D3lkeum~ zQ})(%#5MBf0do9QL-`mVH`|SDHC@%{6{Bl6PI&lx{aS&u#{jC*$HU=Zyz}FCYwS76swyTCRjk)2j=I7AK4naIL z_Oy)yFa>*icU>=E!t3_88yqZX#cr->Tq4$2-Z`ztSAH=(w=jdpUm8UPD=KOFk?NMAh5tSVmk1X%37-W~Jzzh^lt$V^^37rTEy4lnYy zt_&j-_PY*ip5lTPB^fx>w_X0~|Jzu$YA0y|K=mdZ!mIUvdaCUGyxMGB6?o)C=A(_j zA$k|}KHDXVYl(QA1HA6PexB?fr1a8-Uh_+Z&fy{jAjWRg?xT~S=jE_GeYlQg3&0~d z+VXC!_thFV2jrSkE7YD&pE~CZ(#VbS3kVo;8`TDVTt~5VB8!52x*Z-A`sA3tk}$-WYt^zW+NNRP6oN zdrFv#=X+Q76t3HWuFu~Myz}VG@>`DuV5zqxfy2Bh=zm9jX5m*0G^DUnxG{O-iM2mi z8|Bn>_B0JxSvH+Fao(Kd;?L9LEkdFoB6^#iR52y*Prf&U0Pt!@=ZwsYuJ9%?Icm>E zC=M^6Q~l!Yw%Ogwiu*i>sYPYQGzO6*L#Wn&(|rf$o0YaBy70tgx=;=zmQXvSxt~Rg z9+^CUL+>^3$$lRHX)t>Sm?3(*y+3^ITEA--h&_LL5u{wQVftScWx)<+BpAS3NL^Ww z8Wsku%2vlMtw28z49~;MIoC%Ty6NLPNEzM!{EeSep#zkc{*P(KkKy<{Y8^M@rNUR=tj3y+O7?2TaWLQ8E6PXcxuc06!6LS9J>v=6nQh`my7nJ1tj4v~pR&CSb z@a1VgMG9ZY`4BRdiKLU5AFC|Y_bYh+rCT4J(Dh(2Z@pskjkwv|tk(|L z-3zo!+Io#iwaJ`-glV@l5^*T&-{mV12@0~x5&0V|^6pSPc z69;myp*7PBE+UZ7=WZ}TNgPl|=L|PdVoop7`ojmz+Utn@(L@c(zv{u`KnPt3)pJA&n>79^ z@aO(g=ll?|sM~~A_m9yA>$G~4DlEo6s~v@|w!69LtjU~ui5c+#su>JJjYTOcEjTyk zjktQ^5&u779(cdEVozfq{EAWvs>747lMC>Lt(CQR!l+EGvETq;NZi(vYID?ABG)H_ z(^-b8{^@sC=N-Bt_N%3W@wba(uM(lQmCceJGR3^@s!hHOp5+a!GxF~A7egD2rh2=` z3xEdKGompqLwEg}=c%CF?zI;6h||A!Z55-lYbW&n=(^SX@zTNDdGR+a?TDLHeqPqm zj^YvSNsk#57?S|KthCXxk^LQS#kyHrmcz_bM7k=CHu3Ac`%nC5vpyl;5YnCz=rA$$ z*&OfP)SLoQU6)cOxUUB-ttVq$7s80ofVJQgSVezRoQ*}H#3ZnY>)KkwFR#V!dg}hw zB}b7tH}+pEV)rK%C=JVp2c<}MPuN>a8M#4w*EnmR8u5Ugmd040EY2?kz*eck+S2;b z^qb|`QQ3u^Y0*!AzeQ|W=q`}+dQ;InW(sX@>ExPSWsM{4_k(uA)&kim{osrb8P;Zs zKNg8N^W&FTT5TJhPhbR1ee2cLFWC&BvoOh5dp5OW?da(@R^@Z$21;+j0n0qZT%t@O z0_&dlJ_mqR7&>oFXlx!n>mnwp^I?NxRl}ciK67|PlWzz6YDjRgH1{)w(cv>FS|#v3 z3Ow%DZU+&dK}aOl6b`5x85d#j9GR`+uCB+%6qvnP^>KyKe6yBK0hy)3RGd60_s+3M zPc(D3kGovuUqs;FLD*~lI!ID2(9Z~eT;}dKYUmUaZbM95HM4MZna!9ymJSw`Y99#>X zMI2AIikc?^14?M?rt}~fz`!uLc?&~CWNUHL9GeUr46W-H{UF09OJ=8Bm`HR)qdcCD zMYn){`vXefea5J(1;vJ<)XuYAO{B0^{~p{50|Y2j3(Ltu*0zSV8gK}EVK(ls~5jUTWh7&38l2pkv%3&(^8ke502?MhoBzr~{D+Xq*lnyUOUaN7Z-9AC4xCVSYgB zCc6EY!PA-`y`+GyFZKh+YHvq#c%)5ZcS!A8c+-85a}bDfwDb-QVO%AcgPu02eP#f7 zyVoj$o^OZqWJW89lW;8iUbj&5s`lZw-!~xQe4=Y^J`yKp*s#l*)JD5hxdz#{mz?cH z_$!bfc@}E7TrBPqf}tO8jOH$u_j$`rdbDRL)Ivs{+HEk=u{~C^EEeeVrY+*|1YqA} zpJ%-8c&@8z*BdC8w(c?3HNa0r6>I}|W{s!3kN=cMdBI+Gp;GeEB%S<_PDB0+JDFj( ztwk_Xj*$GFM$Mc`1t%pAiPLQ>QJVrEI;2M*Mv@%W==bdSqLS(I$7aT+?W?ccZ1^56 z6;6YYAzVdN$qGCLT8&&R0&nf8lR#-4A<3xZH%_@*8EaTxyCDEtL0d?tLkybDI1M4l z*eG*m$O2r8#o?H77u2pp!D-oFne84`MJV(99dd~^>!#*oVx{`uM=xkMwx-Abp8Fl1 zV!i_8Z{bl>|k$0YOcP2MRK;YNbMBP0~n7BvcuD;_bFn&B?$qnqbizQ5p!eoyYmai^hwJ?x*B8RnkQguSZ?sJ$vaK1?Rb zs?zqCzUqA*xpK7gQ6*8CT3o=mIl%3-bMphf51-Bfx&QtR?J5q-Tj#1O%#LXBLaLe| zeTI9V0KQ*07m=APGV{KlXUoV?b);eeG;W2Io#PZ(*}nhYXuK=-@q_Cl^I%#ZC3W`4 zRVn;@Hy0&c!$-!m-mmvzo$&6DqG_rxgGRks=Tmf|l$z${`ZFL?-a&l=Pe7)`6-NLa z7}@mhBEFspczfk|DRj*2$Hhigo>bxV8wU>s9*0a7*xuNSd?_lO0*NT0mp2!lRY7Gh ztv)(V78wOH({$OsWY4XGN0BGE>ii6^6=k4IOGM7+ss&>N2NT|k@D;u~dmD>tBX9~1 z6Ic4g(8SM8eH~?>;U1nQV}%R?L;(QxCdW#v2Q#v-w6S|AM+CtYo_og$Y$#Fl2&EN& zh_=6EeLCOrbNa#14iVW zeaf7dWL6W>{d3m}2-;1>?j$o<%h)1*=4a@z(ba*gaT7X(3(q$(B zQFUnep1*rRc%(Ot^Bf5uBr~T3^ySw^LGw^1I3|4wTOhy+RlL~$A2j=#U+*pNPZ=D{ zyt4Y1Gw(1?%aVcMo^0*aEXi!iP|7&6AWTQhi=*yD<_k_H5_A5^OaKW5kn)4z{%FzM0#%;gY?92T6naa%)vpSFH&;y?BXoT zfizwqL2dnZ&IoA<+Cm=B^Q_D72!WKqi!_e}6?FkIfkxJHXYQN(zxMu@O!q9r;#~P? zhht8}cVJ2Fo-2}mx5 zj7xqjmdNG!Kfy&NV1#uT!5W~?HCE_dwgsVDwaG5CC6E)mX(M0+`xBUkoF{#UUqa?> zR)cIL+*?*RV=@v0Uk`84EWv7?*PlZ1^nU^ib{&wobtw>fzs~=l*3j`>0bEVI>2q|4 zp)>pVz8@bJk$XQLZvH*=ev5!TE#95i3KAZc`Nh;SJ!S<65XOy@zkhhejAjJjy&Kc# z8Gm}R9uIyCd_Nj0_I~_n@i6%NQ;~bwro#w6+Rgj2i~lmb$l2bhAbV)*DT{(aI&P+5CW~jUm$H%m$91X+8e^ zOLJomfAFqOBd4avK?PO)b~^x!v^Z0(8YN#LFNU2QAIfQl-5j0DGXMQ%J^q(dxwR_q zbYcfRv*i%%_+R6D`1poAUcIn0jCXHUS#r!69WDK7J^z}wy1yU`88XiK@{taa4z&Ni z588Cdq||&r)mQ;24$HXFAa^PXU~P%x9BWmY&4rRiZxZt_s%%{yYO(W(tQS_(7yr4j z)OV%QvK}F$g&c%+G^>J!v$f&t5J)>sNxs9%ZeKjS#rZsMIn35O9eLENW$4teL#vcs zMX@-q2DCnDY6_t52q)%i^O6RoZt)TY49Rej^*XG^HhyU7)qzBVeIH z13VJPORmf#kDxrUU z2PnPv8YRP!_*fFA8Y1-)7T+%J06N5B5Z!hd~R5yX&tcPX3*bx}>93 z)clD2?ZyAOx(`5d>y6j>&nyyI1{9_ePzax@Qx5(965mVo@3uJ9@Ac!GFiwg(sp9(w zU3)Bgzbqb@75qHVE^_<6EDu=*7?8F z1EFY9pB77Srw2HHLsR}-x$Lz;fof!|cn&uA^`|e$mPD4n&=%$N#xeQTWNzfY9Gd2&l^M&sm&)&<9 zMmLQ%`=T>kOzEfvY2EuYOzT$S1tR|RVb@GxElnpe5S(*G?9*L%${ zNDUtR?((lI^*36P59iRq4{pd+PQzXrv*kb{yl|M(nle+Rw%N{if@3X%FA4WL0-# zO?8upVOUv$)!_G)tI;~$+*1NZ(i;f*CP`HDv~hF6%9I?R>!8&BO(c$j#)1;I=l}Xh z3bPyC+reOVenBLzb9eBE2~XC0tZ62sMzh1MTcEJ3jo?^h-^8|Z!m)Lb7|Rn36giET z4678hvh{!riyjozvlW>FOAQpXGtG<=iv*ArPo)o%IacJxIh@2~o^X$5GIbn>?RttJ zemY|8q_1g-RIv8LOUL z=bKpyeKN!Op|6uc(s^9CSfR+Uiw$*5dToUW?Uw zrGcf{RAmEgvtGaUW8Uto=eftT!x%usqQ`7>5WwlzB2*-`Mmg)sF_xBY*gD0}3yo^^ zqzH2L5?639FF02pcW7;jUz^7f20;NyfMmOu#78et{fe5*n#Uet^gI3+^cO|&EN($u zlON~Wt#nD4k=0x1{d*EEd=SS;h|7mB@RKi@EJr{QR=u=lQ=R2itl;mtW7+HytLESpz=R2djVBjT>PUG;cmx`S5UaV>cq(P@=>M7kcQ;>^eoCO zcZM~bkh7aRS$j-Ay*@h z00SrLC!K*I@&fBcbKS`qhU!evgCu+$s1pe)HN~Qgj6*zNDFQ(7&ll#YI&I1Y;E=-) z2Gh^(b?8P7I(qvudJ{o3+xL3+@=btyN$tM;Ph3p}CoUG8xHQ%FG<1no?d|-bpT#&^ z)^y?p_hSiFwJuH@egj_+!2S6;+xzb^Exy;dHZN@OhoR{{> z+CxkPWIQEjt*DCEHktSG0=84E)pGP?$>g1)?ZM6^J-EUJl6%R%#0EV1P6{1+31e2L zxXgv{OE?iSh`sC$k*qqgH<&?x57fe>#n1@^LYHHdG(idk>!@AU+qn}vg|!Y8<*l~p z??nYUv9|v9MNon!6^0Lh(3!tOdBxa&6>kUS6Y5W1XdfkP+S4R}0c6LVZbYQbClSJy zl%DI0k3L`2m3%I-Rd??nL@Jbt=D8*kP2p(ND-euwnx3Y!p~f)2pU7#I%tu(V{!KGj zw+bVJT8A6;MGN0jPNhzd&jY&i5)C78ma>N3`4GNR>QgeOItA%cx@#vl(~c)ENMq_4 z{waee%%9ZxK6&;^2AGdHrH!C1*9%&|6)=rdZ~U?eLsrsZ>*97N=9>9=Un^SwJD0}V zUkzI16(vi0H^dNGD+)tSs5{QQQWQC^E0j>#A*)Y$t9Z3OrA9I= zEdL)!c^mLem|aE%Zz1_YP7!ma&UZ&IC%1|~ATF|d zChv!}=!54>hM>wAurg!rMZ)NiD}iNtEXW~O;!1&lyCDyHlp+t>TTOys&CMmZDo$(# z_X>1LsI~yu_!cXX!t!$^hJtnx@Si6t+5FzACZ9`{B8avx40o?p`@ybro!Zn&QP2;6 zTcHdVtk&09l0VD3`#ZQbM_>*q9s01{N0DeN@~?4ATt+q7N*N7@vC|GSasXcQ%Vg5j z;*|xZ(U%lw({r76dfDb;O$Kgv(8`C)Sok{T^mrD4zoc`AxzJmI%Q3;%pUe^q<4s=u zN{E$=Pp6MVVMCX~BDUE_-8u=(FZnkMCv*B_-7faunw67n zpB?kex_^vt@oZ&ey4A+`=baEUH!#w~(AL}K@9SpFBNE!tg z1A%w|2vEba{>dN=dl2R+brl}auW(^#(KB#9q4prmzs+(=K?R+JLX{z?2*mcmCY>})0@?O)jUWdIgCzV9Y zF9}-=V@zkL2@{TkY3Q2VlYU`3#d=rVCXI#yqOBQU&+piZNoJ3I{lbq=Y8Divwv2TD z806fD;;JS+UkK;Wmhv7p>M^Ej{{ru)plNVahJr{UPF9F>HKmPC+ud(Ku4pXZHg6K5 z2wET!k0YHpN~g+>?2t}^;3kVm!rz~yB-_?Z8_{#?Icnf3h^J&ORgl9m`Z?FwQC7Zf4S3nTNL3v6Yj?$hJL=>w<+5k_D_&`v zOt}QgL+9~mXug-)hwiB#YPDn%YaP^(oF@+1^FPR(V7eSktc*s2)2mWz4e=-ZUb0uhckz|)*Pb5MWCFL+;~F5u?K!mv7wKw4iP zqV+uV$v*TM%oHSyvBQDCk6+O!YX4esZ?Ne5RVY|yIbA}pNo9!S1J|NHG~TPW4&ZT7 zX}$jJ$nWyL2VNPeUGT8ru)3mJyWJA2ZODq9MvIrFrI-LYvL!$qu%?S)K51tVMWkP^qdEWjjdnTl0^Hcb24cJ*=Ila7>@8lr^nY=pr20?K){ zzU&vTF^ksoj?T+W{fA4{pq8#rQG~Eq$YXbUd$l5++9AcCk-){{E`uBc7k12yVG9fx zZA6O?EOo<56LC+Xnv=Wm$K*%B5>7rh=<^guS3$dF z*ZOlYhs6?SKbF@^Ui$}Qe!?VMbi$+qpEggm!EoFX+i+?&~zcp;K)vJQT_+~o;Q#R}4OEA5(X+^!KtK9Vj zx7s!|a}MV9*ubfmOp=rJ1b+P*_eyPojA7l7yx$7YxH8n1z@C${w(a&gO&2f@wHVN4 zQ-B2bJDN}D4tggTKv}NZb$kjf?AfE8Pw#1Khf(xKt0^mY=a-Qi?z$pnNBE! zMWEnRR~WkBC^5Vhv*yOd8a&Dn!0(yU=X=c)q$-J5fXx+?pK6Ud`Ml-M9$3EA7kJru zL4pe^2De{43gQm(znoNq#_YZd+xE~b?TN1CRCLXQ1DI%rW;~><7nUrP=7}fc&fqA7*o{f(Ob)tk@Qp;vZsS;9nfakFwTc@iSV-8hq=SVNJ!rr=(2#c zy@RQS=kYM1aX2QuIY7!83=4+73SUOF0&{W`B#yk5i?rSN&>t z%VGUHOnhB3*2|A*pB%yvsRU?xwYsrB23)DN%Ich4h@S?RI#N=l$4mSZ78)m5g%p(H z0V)?9xl%)*ge5E0EK@W$+eJ$q&HXsf3W74#x|VY^FB&s{p0eg^MdyXia7dPW(sgl@ypsJlUAF^(t~yP2`~Yc?5WC|chk2(*Oq&L=1;*BwRzmBdghy z71lrG-v{Q}do%2(z5KXlG*VpwL=A$*T>0as&@ioG(s>JX#=%83TXg^u7DU51QMR?| zHfEH&{VjbmhAja1hJYLQI=JP&T(&dcZT0#_mkdvO5O4Lh_bv9BR0(h=Ju){f;;1$8 z|4{W7P;vC&{%~=3S=`;NxD|JIcPZ}9;0~qO;;zM|Efk6t_u^9Ao#Os&-+TY(JNKMr zmt-#{rWFJqf??Jbc&pm8r zf4ISWj@>Mt6vLYX!f+kOoF`PJlD^4ET^mdIIl~UG-upY)qd(Y{YXUZ$uEv+YZ(wjL zTN1zI1EEDu)Ej!sc7he&k@Y)2E#=VWewzJUdI)GkWp_Qx+>&r_mW}(aH2eVnO~~KZ z`VpAGIR~#!#>1c|MHWOguIFhcr)D_yrf`q<%;gn zwlRRiR(SE{LNIz9*EbU8k5{jV=>BAPvj~_=2*iLx-s^#OsF}4^b$xpB_6W!YN7Vn% znp~(5=n#rKLy!Ouc&b0xf5#TTPGg3;L1EH|!h(NGgqTc$@#np<-=X}*$>{6DQ+tYn zv^ID`3m8lAal+WC`yq&pQ8gOi%NV=sjPM$?dvBWPtn0umuy!W4`s~hqqCj-VMlN&p z$+2rSqKTRHA;raTwco(l>3jcNo<}$af#hNtL9d$g+l}iLu%830E?$;J8WToojMjRr zou@do(Mh%%KHb%Ktp^6}d-t8Lzdh}Vf6!E~0BGFSivUV3WkNFF7nsobR5gIO1vw&E5_I$WxQ3f`lKpO*DzQ_7e#e>B`;?BL(qYW48 ze5)mDC|;OjiN)C`eXz&n3nf1_&Kgs>iR~G$_z&VLG2Uy8?WyQZ<*EjoO!PCv>Of}^ z5!SKVg~`)u5gTtuA6yecMFVzvAV3sBpr90hyA*eI*+h8{y-CC<_l?q2uGjcWB65&U z5sbjLq6Y+OTtNdZ;PI>~jeb4mXQ20i;`sCVX_#=F4cHt;nBcujK)md<5rec8`ln*7 zlc*0L3KbnepZiMeVB6Cmcwo+j)>Bq8X>L`_e|c;l^dRWuZ%kmzP$~u>DnI}UF>Vi; ziER~5np(-P0s@j%bnG=&czw4fmR}f zu-$W?i6tBTL*Hgc90?-PXCY|_jP-IQzB;B5OC$+K0&)GUXQV@>hkT`)6Bu;(#ytzqK4RGXT;hEvU$jIvsYBFztWoQ#rmFtA9f5WP?HfZ$8Z zmwzR*7u&XUfS6{U(jahBN}8ZbC5GWx z45Vw_d>F++V%cSV#hKXl9EB{K2$aPB(RL4BnLbQ;eqqH?D`?3Y^ zo+06(0t+3Ye9!li4!gouC7Fo&S>=lA-Psi|$N1U6d<-zzGY zrR@B}a$ml~b(a~H!s3TSkBsh=Q{csnlRHUHan}{9LYP#zv6aPs&4R(uTFK)t(;p3S z174glSw>r;m{2KT*9tO9w7GoIQjIT8>fA?Zb1>k~Xgv79qHZyStQsv*N<`y0tWfF_ zTQ!w0pdwqfItW!IwgR6||5*rE(;>uL8QJ`^j9dd894pGHh3>Q7MmFuB--2#GJTbkP4$NG!+n54lc@ zJ8g*Kt|NiN?E?3n8C5kW3=q$#X0fr#7v^^P!rj{>a=bnOhGJk)O(iATw;_3Q{NfdO2g)+S~6NH|?T)V>|D7+cRE9D~lB0lB|!yioA0M&jDfy{aqMDLCG6HP@v-zJ}H$n@yfq!SZV8xl9zFoFfVa}2&(bk z#%AVnYkD&GUvL)nvHku)4Bjdg@`w$VyQP_(7Q8yHdFm8Z&&%_WwOfLH8gX{f`NdnJ zN_#sWx&B(->~rHM{GHqZU}|)!ia!lXi=WHN_}RG#v&##XF05h%Tl7Qpck_#7siR&0j>&tDEw*bBhEJJ`uRRZCFDVSXWLbNzy@!2t%6$> zK<^3fo}JhQCQC8MtIK}IYzxP3FjIOv@(bp>O0s?8AN~_+}m~wPbQId9t}=a261C`ks&ORm!Ez`x2UH` z`?&PW1-zgPasf`I2G2z=A_F&S=>#Q+0aNPeds-X8@}56^_O}*`T_2+?+j2aBG5tSW ziy|u0Kp@?&^WN`r`S=n+Qh_m_Se1^xL!+11{fjPlZ(4MFT_+nBQ=xVXdvFkWG}P%~ z!YC+9{UKd7u!DVaP02GbfR=v`4}NuX(OC03wLsB@Bd>mQ zMDy^IIp)rQRJ{m2(7z)1(AAhvLr;ahoa0FQ(xf6G^u&a8dJ^<#htfN^8T)lnRXNKm zJ;H|E+pkg;n4HeANSHn`j?J3J`OTpZ3eNiqs7eTV6hwIMX~HkzEf9m8gRqyicipT_ zj{aD8RM7ocoKU5wdZbpt!TP#1;##(&DvWX2juJ=-@~!qmG^A*@jv{*)9g{>I{WG=u zdK;st7#B2hIddpKy&HU&hj{O^EudmO$=5s(de1r9p2Pj!5`Ta1!=u(dCswO_Quq8B z&=R=}_Po|tH4FUw@Qzt5{{rJ|4uh;iK76z-j`{Z>GdGjrPafI$kb3-^O6`Oy@NE8PIYbP2_{a>eddTK3 zhIJ5FM}97V>B+sC@Akg$cxc)jJJK^?r+UVC4qRdwty%b;U5fxefwcc!ho24>jQpW2 z6TYnV&uiQI^S6gdx|Z)IoTF`C-pmncN+{rG4G;?8^C|4|l>F^af*ix=k8dny0aFG; zwQAXJ8=)urXuf-1R#Dy2=PjosV!L9NI0WP8!NIs5w;_6Nt2Za7Sa=H zg!k*-!PCP}XmP|}^UNl4cb5gKTCOP~z81~j74S-Mv0qj8Ln58%vD;Eje80Y2`(6D} zB?sk9_PyF^{tPGACk#ckR&mr=?hq@uhSu&Qa#;&_8=BdVhT7qJ&FaFZs8 z126?%Z}v@t?U{7!)*AXgIrIiUN0c8=u_Z!@LruFka4ZhlmhNUvVb^}%ijE1`r{fm{ zaetfVMK7*v~J&GhK43knkQz*J^873!1HWaRw$sS5&ca+zzFZ3f?Cl@LDI<;!$L zeGIl$X7;EqAQ-`F-jDN06rAmOrUXh*?DD&$do4urICJWwpI7!>QjfjrBDy>bRe2zb z=f_7zE}1R;f*ZPzoV6mEi{1pI=e;GS2kT?@5$-C>y_VJCSKG^;#nWH@CY++p$T+x^ zn7ln~-vJMDHjcDcRUJ984{)l( zmPI||fuD3h{FEatJ*(WAWSdSRR*%ffnRi;-omB%rN{_d3{Be%mOge|bTDqV}C}!}o zE=U?!H;KC-<1e6et-Bu3Rh&<)bMtBoO7u@co$_5UhJM?MGOOeIyuu9|-S``&I=Ag( z1y#+rUKYG_lC*ZTU3BUE=`@U#?ZIzLpU#u&8-6_Y!Bw|9oV(;x4pu#7QJs%fhNZXj z{xB_KlTM-~Jscd1cKQqFug;sV`(tXI{wF09;QOuxt?ZQ8NTAb&zYFq_Z6?0!DBvFR zjUPpVLEmYPB>eGNhi`pii33amLS;Z^bL;qQ4!5nWw>RSY{M&7lF;JX<0CA?T5{=Hc zDn5RQF~&Gc&tp-I|HRNR@2Qr9NipPiW4r?D2YM%HW=k{@K>?y9Qjfs|ZyY1{c!x>A zpnZzk&XVm~`GRS*XfS6Zf@*rYIDgdL=eMT))eleyHkvWt95xE@n)i3jB#D0^XN}R+ z?aa`8LYDO{MY%@&A5GLTL0t6`r*-@$f&`A)Wzi)( zhanm%cbD#0b{zhVkq!2;vco1Wj$ppFv`Sh!f3;|z)n8}m`fk{X{At!cSd_nEmCqbW z0x-g!EFt>UAKJMquBT7npV13Mg1rv~EjAxHO$^N&JNsN5`9u>ln4i}+?<`+|)64J| z(a3c@AJ?`&v5%n>7mK1Llcz>(eQOb_9t(`av>ZHG>Ez@?&kCg_mwh-cMUzQl8lwBV z!apegOmF`3rxadia*pWpVj-TP_;n1~C1TS@N8Bp^yd)(IyB71|&QhmzG~tu{uvTkD z#Vl|}&nP^nx?oAhPcwe-(p~8Dk zw0a|PaZiG8A3mq0q3Qc99%UN(^M*)pp>=1tntj$zuqY$a*tYA~mI>c!wpB+W1M16G zUY%cFW~r&T#oE|F62$lFpq=?s-g};8_s$PEYi#c|9!D79d*{8>6;$bsM!9}G$#7T` z^*$K-Jw901^Jg*Ch2u05*h+1rMm8jDw@+LdOhW$3aw7QDQjqnpyv2#mM@V@c?!JA? zg$?JE2J^^v6GTzc_VR|WjXATeK_``JqrG*_>o?qZ4ojFSiGSS3a|V;7f&{&TlBT3z zku}d4{{PZ`C;vkNkP>kNIZ(5=s?o5{FEJC?cU1GUu~s>rDZBBy<&AP01vjpNHp)KwbOLITtB-pC_D(6(qwPE@U;-AX zOSfQ8q$-|h4a0vW5>#^|3S8tjN!@}^rF7UqT=XU8#jPtQ5o{g#AHUvawb7DeP|0Gz zz)@L8 zMS*De$R(8AH`m!OAg6hcX*T%+z~p}mF(NLRA+m5BXv5Gq*ksEZ(*2q; zb`8zy>D7a&+Q!TjL=Vkr!?wV!Nl+i8w19Lfb~OfTm*vpsjK2jg3g00QI1R>0v%St< z&+J(p=c7xr=`30?j`Sy+y!KJ#@nhp#iz1oqT4@M2FuD{O{>4>_sdIg6{`H(c7S&MTS0=2dz9j9^3@%Xa*Po5bGlTDA@?*$N^w zj>LoseZ@J(9w1tLunrgMa^$#-l1T_jY@A@vA;>f3{fyLDo-6&rc5lu6>w+y&XQ0!6 zQ0mmLoowo8;QWQ8rNS5B^34-gxK%Ux-h6;bR1(RUMW)ODCddfa-?w7*uEHU6BP`k$ z?BQg@0i&dD1Uf!-^@NwpA}fliOl6#*etzHLkpSr-t7Emb*>3IG1a)WQ+n6cJ_#36g{FymeEA+?M-(E!ZdLeBnQ9=tqJT&zL7r6- zFR!f7cX#}aVw|I;%ja;FdUA?$-$pBQga_2_OzQ1LD*Y1&e>HlQEfagOOFfP_Mq3^w zVSH2$#$8wpyCJBeE4?_4Pp7V1jie^VF&d6*G7lwWin~Q@#ICbbuo%+{O9t&~r3{zL z==9EtZd4*bksQz0%JZ!@V^z}yuf#nv((rzqI?)b;Nq*{6!aCv+rsCzNz zb#RPEYC^hA-!9a+m@pU;mb6=K+2|WE_M6;|yWPSVD+$wf`9j?u?Bb*~^f++)%h-@P zJ8E^vhY|G28`xlWi>3%7HestWHw)E4dqrWrzmQ z>)ca`|NfIw{yKF9>oO%X4%ry$xw7w`q|Q0rg#?{zy`;{vfzfk7Ey#3;fLC^Vv)rv< z^0btj|0ZGLYjnfC+EbH6Me~Qif}_*h<6W5FWKq{kyN}GaX&U53^~RkO`$@foG$xNy z`3OS}b_QecK{CT^k7anxm=9+Q=hsHJ?B>L@A;WlF# zm@*>y@F+T;-?tL8JyN_h6Y#BaZ2xRn0 z@8Yd9t+jwOq8gt1Y5jEcbNiId*eO|R4ib>nTh{YF`U=`4XW-KwBVEUu;U@60|Mo-N zhH)|#KN`EJBlacS?6KZ=6peWWBXWUVDe}@9ZPe7Q5S+MqXq*AsmcO!UM5TyI;kcoO z5tRSNoh2XQV%#&k^_{V?av)D>;Ym%q_>2m(IG1#BUEe+7-9NAw0kdylYxg-q^XP6z~wxWiG118D+$WFG(sYDkPi}r?QgA&DpyHg z{9tfIhi08cPgEXZ^`?Wu7c3adj|v9lGOZlyt#ZE`Y~vQ*=XJ!F%EEMLb_>6oD1A9m zxp4NT=g$J?{WiCCh{|q2!k=>Xz9Y!&t^PD?g?ChDp%M!r$pkuz6Uh5dH%?T{1lw^k zg_l-_)EoZF*!ob76opr>CK9Ma21EN$`QPlI*8IxdWSS>mS{B-oI+BrAnY*{y%Xtb3 zJF4zq)Aj~?jHhe>>72{CQy>1*%!|yFVclke4iO8%jveHdXx%1|`=`}D{jogO5Y9JM z>Rp!RL-|&2K6M}rqkobxhv7-M>m;bI`ICTpcECXPYq>3!-#65}dhS2Wyn4BVo_gW9 z;Gt_8_C*2(1d~1z&HX_Z^16nh=LO%cxkur;)ii{&9cdV^J?Di^SXh+^4KFGY+2ra7 z&5!797Q2T-Rp)p?Vs0xK9Zk>1=<2#?0 zKZlK)WuIREVc!N9wzyFJhVbE;#>wG}!R(!IRypfXH4aVlNWgJ{KvpncB#1XMfOc+8 zs0FR+eyc8PX;%)P8fI1m!|^k9m&AMYURzynP!AUe zZ~qTDoMi=)fd+X0&lYXQkRxUI-Gk3fH}~P9MxWpaNGMW8AYkGYC3rnEd_TMD)1XV( z%<(q_jedu8mWTPS~5K4Pqon*w96nU3v^BoD1KK3wu|W9F|e% zvMSdzx$E<*MHu4n;RfF@GI2?qJ&qPGpdjz`jz@;yAptc9I5ByB{JYNX3&_d9GD@Nn zm$l%l(2|pus}Vm#!iKt@FSU`{9-iJhPKpXOw4T7yjP|85AAS&gbraMtljt@Ke%zIo zH!r-`sBk|kbCuSpEo&Hdu;lA{zWqB`@b-LF@b(wPa0`AJT@OzCtz=ppZCbGj#9+T; ztc~vLUH|x;SKn8F|7u&|K0bdPv;ET>qpQe-Z}&W(E=~B9Irk~<=X{H=Q-GfdoqQG4 zg89yz)yO_R(Dl5q2L^&39#OvKC{qbe5mrjt7lm_9xCDpa@=)p9el5F)a%Gm#;$DTN zuQ{(uMUiD_@f@+Q07cPnDk;4O&O;?<#MK%1xfEv2P}%T3hxn#q=WI8k6T)dHTrH^= zrIbY!XbzGwuIPO0CquVOZcC+#tE7Wev#`4+J-+CAVJb*k4k*JazjMWkER`d3Z5I#~ z*h|MH(%TN5SF7|A2h6#O^b9Dp(kXDhhrB)LeV{9+`WQKg=ueYFhpA6W@BN)Ca<^&^cay~b*gjtZ%R4D(c)=!xGU<62JimJxq#=R^wZ_^c}-L5P-F1M z&Ex7kt?RMw>JeU0kTbpKsk2?=VU+uGJE>L$WvP45Xsez5F`yEq@1>vc6#Ei6B zRfooxy_9QX%v@UZlgG%)eXj$G|cAep*a_tWlWWR6)uhzBw$kny;D|pwVl&^xd z_Z?TE+-P0zC$;Ul3d%;h{p@)<_Xrw30QQCSe~q@qt=eWZL_H@^Nr;_VZfsy)nh*{2 z6E$r%YzQw%!vU%bC^Po7W)c~W?Cg1D=07B!5{60wKh+3?4`G!T|DHBrPn9=WO(Vmo zqSjD^OE#dZ)DV$I1r}}gbnP~{$-`eb~wf7cK&Ywo|zI z39Cy`6BOB)0^>ri{L>WC!`L}c(S`WK%h}DiS>Vyx)H7XUd&WEL&GQhoIC^Of(0XYP zoVy)`ql?BV!fNaT%yCJKia9p1!voUg%_RjCADxUWmJ);_&?c%c1lnN#BF_O@{&9-I zC?qL3ByQ(-F5UDCZMzkG{N?VBKIglOV}TQHH4{inu5hY_SD08&{G-0mXB-oNVoW2W zYM@e~dcQfWW{rK$G>7X&L~jH=s&ly_%CU?J9JO%K9EI@Zd@SsQa5&a%RrzV8`u`R= z)253=gG`{lUq)EZumJ|lfxTg(^r{pzuqe060k*!yR(mpgu}ay{8wEpvybd9+e?pWAb--t%G6(i^4FopHS6sJR42yt1`A{h}LiJJv-s4 z^a(J+;&V!CI5-)@C95^$fwkG_yC=e!Sx=EYwqP4gu)0W>na57ZiMLC5Lmi z48&>T_*vD7i^81jQe6shs>a1JVwkG=k;BuxXsy}f&5YTGnoCOX5t8PKKDkFZXI!sD z>7>YZ-42%s5SUtN)4p$iX!zk1(B)y>(}!*}l^1x|jOR>xjK8kSbXxsgz_MHVlksyV z>+n5nr|0;cNHf565_`b1Oj80Fp3Fg(XP+LM)=k3T92zDVl{fmh0tNV|QM)_;Dv%3| z>XlJ+sKih+{baJk?G6uwjXi@(_LZ(*y_2WT9j7gl= zoe!hPeb315*B}KV*NMjbyZyuFO|iO7_A~165c5?XpaXc>EQwiDz}4wJz-~cd-W()L zVq`}~nX=sFu!=VqQURPi?oH77b>V|K6M)FRSx?O0%qx;${J-A=6%N?1LidBa&UZIF z4JTmgH`ByL2Ac*1K36FX&m9T~jI60FDDiclI~*QN*sIucAUYZQ{m?#6G$+ca_t$?t z{W_F9NDT0=pB}e1GsmAck?{=vl@K017Q+*HWSkFB)8RV<0+=nAOy)Xn7ZzT|!R{A< z3(Mv$Zqurevx4K@J0eG~Z77Cd5$Kk_w8|3e56fy(8}f3PoM|O6fJMd=MlJ(9h=NRE zY7*n^Gti9Ze-Kd(Dy$`1>6^OSsDX$C+1~RR_ya&=896I$?Y$OD;CI%2!WDd-+%HmJ z`Im8w>Zhnbod=d!%bW)Mh-Y05^&!*ZYSh2S-H@By{<1A$z0Ji_R{U|GYRj(S^jesW zU)&aaD9B)*`&V5I?ddX#G+hlcSrckL;T1QXd+F)!%n+>SGpY&>7I`TkRz6DrfylKqfY`!yZR=v6LE(|Y1{>4d=Bu(9nDlCVul z&8_NaaF;c^GS>CI0x^B=ynKdQW3(kKJEbw&8lnocNQ@I)D~&7zPwlw9eyiO@B86oM zm#|R;J_y|r#Z{wN9eu$czhx9Mr(wg+i~{0e>5gY)-EdEurd>a4?RIaNoU8vg0r<3! zd_Zd1L_w1*MQcyat$)E2`iVC*V4TQ~Sek2~o;B@ZVk?}t(8zQ0Rnh|av>36c^@5~; z?99)e|7Jw5x`4C4&k~umxM4!P>%Qe=(9kqoNMx~ z0aZ;tPBj@pThr%C?A6R|q-}xOo}L9Y$k+yvaVEIkGx@! zMW?ZdB0L0GJ=SW!OUTr|oVby1$xHu|kDV9VEMv0+e=3~yqv!BiLlPEt(I7#nc7!Cg z1vpw4a-@(YAroKGr1b+*>R=!q$pQs03~+tExbJ`yRLcyhBc$ z^Yd^!U><)mc&eE)HDwBG`R?#cbnVYqE~K*b*;m3LkyV&xrmX|4nX9UOz6M9Mil#G} zi-c`5qCtHexZH=5!@~IVKLces+x#^NKRA+5-m5l^967PPJG9;f6MhGbE-?~L*>t`o z_R1X29%)W0!e4(B;UQ(ZYe}Cs<72kfW%XW3zfp&}kW4=<<}k><4?KD}s9gF$k6o+a zeLEDt!D2Oz7#%C^)F%hkxqn(pjmvBWe4`i*FWIX=3j8G zxVbWVU2!W=QR0MkMNHgFbr}h`FcQyQj^{Y~B*cG%Fi|Dus<0f==fy8UIdmhyS|W-M zvzeKzNv>M^HAR!00Hw%1E%y<&Y?hv*Of+=(m8XOs*?WoLMphg0_Y>(xo|@&*ujsC; za>@D6qrnFkV6SF|XctLhaCx~T5TcYP2xIP)_oi>}ia!UGhH=uHYW_w!IKrM4H&nw> z@PmM-kZ9|+Lf&`>>1&dJA#EC&Utd~{Zf-^z0{7BO`Or3vyWg{m-|>9(6Ww*1D}4}b znc2=D;c$>Qx?=?~sb2aiqDSW05AQ~tyT}{#?|!KVbfb2;>vx*;a~+0v(;&GN!0$m; z0kioOHP2{$HrRsiJ8Fwr8AdAiuNkG3T!$3ZIH}|vy5LDpkG|xQyDZD zp*`l^ETFJSLwAM*9?biK#w48m6oaMIwbksJ?9n;XddyK2Tab=x$rq8HbCfHSK3jQ4enqokeZsa zWv|%Se_z4UZh(|KMWXp~eJu8Nc-)nGN;w8fEO;1VFaQ1$NbAQa+O=pBcvGUGbzR%r zk=Ze)L{Q(eKR&&BZzuZ}BD*G)=qLk()?4AK&M+g=DZ4J_8X#LIh8}shoZx@%{#;tw z>qH!=n$?nRj_ecc<%fYB7Dg&lfEH0K?odO>Opi<-)bm3MFDLT?Pq;&BiR1`9Y2YwY ztx^G|5gw{~0|9=X=r`3DD*WrkXRrJZov=M&*Xp~Z9aq5;oUAYl3-)x<2B>Y2J#a?yS}o`VDeR)Xua!)tyTnlsB$N7*L|u$@@g|oAF|u(3OR5 z;j!9Gv1URR_Etf=6T zLlXU5@`9?764XB@*46mGPRfhvbH@zY|ci) zuiB`Vm@hGKB5cX6#*e{rxu!XK^p{6z=Pz<&w5{~9tZtz8fXboQ#hFEqJ44L&(>|wj zDZABdL2HQ$8kPuJ84S!;`W~7zD+UWpviB@9@B5(DnlG{n7z}w*=YOlCn zqk`>i#6d9bURl1E5$RHskI&ETA5w$2OBERlZc_Z;zM3v`wR++CUGa{Jp~xQ^@%mAF zw$N?n&uiF^$i_dd$l#R~M?mKC+GY$E?|4{NnEM1N83hrCrxfr31C?#ubUTg|1u=%$ z_zK4a)UWUrr5{Ih(EA0M83pZzr*u>`R2BxqM2Wd={cx!yeQ+g|3R1Jo6fn`B%D;Mj ze6;r`C$;r<4NHo@Mhcg3EDfyHvNP2-yw~`(TshZev^fAW77{_~zkGxoOxLx#d@d%I zh)d&npiy0%)b*kVIB>=1vd1Pt;2j%KfaO)GLQAhSpA9&m zxFHkdA2>HbjQqj_NrsUV=sC#6*~RHiZ8zRcvD-&Gq^AI01%Cp>gNo*Le^mOMb@`{1 zbnN(nwfBRX!^cJ8MebOL7$tAs4MkHg;nzCvCAI_*P0t=+`uk*c^3RBxoZ479oA%~> zS=jKi{d^TCn-7y&{Cak<#ff=y=Qb=8FHjWxe@lNJCyD43=aY8N*U4g4*E;ViDrm=8xQ=mb(la%#mDpG>U z4(lCG@ByhXh?LEZ6g605;{DekNs|fGZCG|yC-&8aJE=fAgmBl)+7c>$Ls@CpznH8e zA?>#0MOb%BGHJCXaZm}9R8RLMtpwdps0V3NURp7Lj0>{h4l#qVthCvWq`2tiCq0h%FXkjzDk#=|DjBCsz|V}Z+}udR+k7IY5l|Md9H~bA!L^*yT1o{6U;68 z27p8cDVz7v8T*aVBeY73JWZ8S%p1r6UhLI2-CLG@CF;xb4+OXT7oP}Tq1P`fTI)-F z3ww{uE&)yFmr26XdZP&EJ~tdMKYQbe;iI@gZex#RM0=%^X{eqLbX%>X@JeCLP^lZ9 z;PWyyOH)Gz5_55B92w)Ao>fejo~#;?&-9u zYZJK`V``DH)Hmg~O6-*iU=~P|)q<>>M7r=K3w6G9#;a=Hn`yR!G15tBz7E4by$wVc z556|32yaqfXC|E1f6piWLB3n5T(6s822T98ks}$A*YfDQuqhEr&B1VP;BVV?3J~p@ zY(kgPM5c54z2q?v(1Rksab|D(?6>h<+ux>wk#ipi!mkUY2j|j1I^$;6M7V*3jvj_< z232}z%YIwmR==i``zvf4E%V2&pQWp?PXcof=Gp}c)w6qXZf@Rwe-qb@XI7{S&fO_L z{2_Zod6}`kQQd|SBxaPzfn6P>RWsCyh+Kr>0M9LK1_wiGGNWt5Z)p23h^ho#l_mr6Ck|)a(X6qzH@K%lAJh9 zyKZ>Ais__G8yEEx+yy+pocUmQbKC)M=k3&RiPE)zfNNmP^p7WlUd+_$p0zh$(2?3U zq77b`{-OE%niL`9iW$nDeRx7cp{=; zEn@N-reIwnl!hrSgI97_EeUB^&b?(9-7*MAii4MP`0M<(1xlVz8S9jJ|IAf(k|XQ& z{FnFCG>~K=lOU}4^L_eNFi^6I)htBv_&*L$9dn-Mr56&thmJ z+wec%-}Np~K-GL?>h{7a(bWn$j?=V=_}YC#=dTRcx`s!qpod^Yt~>|1&^#%v4pmn# zkAyo9#kY9$9&aORBTaGV1F?pdMdVE(8ZAf}uI2M+EgtOhLC}6W0d2F<_J) zVh-b)+9<6F2<;Fc+5Vx#>fjW;|heoY}~(v8M_c!Q3+Oj8<1w_*_}35%p)^EPhDC1DFfD*5 zTN+cJZA1YHu0!aQW8^P9&5(aT@6&ns!_ArIp^F4yVwua|6=9jV>Phz(LH}=}X<92J zUIm%kiQMQu zJV-macj_o4nAumZtw1@n9!B)JVSMyd45|qd$s#pVaz2C&f~g7{7ns>7zsMnsg5q2L zj*n4OhKnNkkDn%S{+#lg-*%M=>khd|QB5Y9m+QL>q)l%NEiSm|3FJ#mp# zgWBhNk6OSBQ4{7^WbdlVZrgjF)8fhy-o8y_qx-SlFNw^6-#w}ds=@}vNy%0!7t!`6 z_aK}`l;r_Tu|_U7zi?pGpbSL1-?1Yg?3px5ltCi#oK+t-FxcAU_7_&L#o{CFXjG`% zFz4==W-Q^_Ij$7njAQJ!^|hSHjw2Rc0<;>sZS!e#P)IJaDpc(u=8&Rl7YZZVH|IF7 z6{6^<3&>ax)vF=t|0^&!Qv;!VOq#HRmI|Zv7Q&*7tQ}ExO{h9uLv+Dy5(S@uKAU@W z9e8VD&nR+jR@ZJ@QSr@eWHT7tIz5!YJ(yhvys$|tVFSXnBKmM-Trxboje)d(%+mXk z@)zztVcth!1MwnDmA|tXy5Iq~nJa@B*x(NAW(cK*uqFfpBCJCMe~4BHFu<@u@s@Dg zYvXm>Fsw2%g+R8rEQel%j%2pm_v1e+f^FzN=sz6w|COG*&@0gGPk4P`T6#%a{AXVz?H z?pjOGU|Wmf%lU^&Y5M^OXEjAyOBR*Qyr*de($f21lO%Wk5+1#L_ zYKSIzCmo9LvA@zz-!)>aHN_xkgKMaViMkDotM57-a+{|NJ*OeW0bQ^E*VVd|QHbO? zVXeg>eKaa7?ngUddHh%l(Io-{!eLtZj96j$c;YF28Uq<8UKCe1zwweHZZ?UQf3^ud z5~36VOi)!!t3WSjrc1F(*wCoT6AmXfWT6T=gqDm;h4sA0>!u?x;)FX$xE)vcO;*&L zY3|x@P{{q|oTDgsJm%G3}|^H{WBych{>}z{Wf~C()R{JMxK|#hTMg|J6BU-<+}y* zwYaa{wzCRFI;%m28U`!9HnWWOI7fxtM_TFKABM!?kae{-nsQ3t~79@`B!2=~G! zyGwRnkpy9quwQT-Gq7>%l)GRZqk18ZbP_uP3}K!PgHaE3fqLc@q^BtVnW~KWKZDn2 zvZ{n+Dc%Aja?W9s8ddU;Ou|INf08Rz*a!(%lc$6{NNQ=B1stO$4?chN&@5_p>_{oF zn6VSz)XB1QPz&w-+SckUKK?P)ZIe6eea-kleW1p}N|h6v0i= zAQqtG=}*_|B}UiV>w4ul#$Y?}Hu3IA@%~JaM5%6V=CY_>hGnFw;^g$w?=G{Yec#RH z(`Eba$$4yh!0OXv`7DpgG<-Dkh`esggtPKpeU&?JbGt3*t5ERpuJ?F}QQ`Je&a9DJ z+aJ-R=xVkjms4Q%?PAhr{cURX`&bh5=Wbw6xUGH_GqquwOo^y#)OGN_^|O~07B#m> z&eQ9SD)2H>@YeC8z5;|NQmV0dPlhfN)u$vZhjKA2n-(N1dez!>NIqye7Fcr1Kj^ti_N)X4MxBRf9}Gn@4V4ggX_e zN?EfO{FnDP-0G$?wdv8{rgV0^b48<-gFqqjWo}zBr^%L+uRZ8%;v~Cd*({vKx5?R| zd{#P7FURcl1xBe4A6+#&$ZcmA1Ar_Q%K6S|C#yM3C9AnkP2-sFW3`J}Pj|q}Yr(6v zd9|fK)1YILHaFYnx@Yp@+66zCq(&446QuL2tm%+?SeuoKi56IHi5BD>AQS!yV zEnRHoos>JHBK{7Uak4o}9{pFVJ4If9yM_H8wvWojng0;MEuRn1teg)UN&~VJ9!^@x zS9(Hcsg*NU9%(TSEqYXPWNs$p)&q14B_*qiH?*Ie7{@{6h39CuB1Zwr`kgroe>gx8(X(_b1&R6ZIM9hREo0E zmkfE&UB^tXXf_h>qA!t60#=cy=MH@~Lbpmrf@q(MS4MbTBF2U3d_9Kv25;^mF(dw^ zXPN#I7=K^fM82gv3^pyFcWjv+eQf6dGDn)gd17Qbjvh++qecx5vA~JFVL$rSl@No6 zz$7iN)$xV}Y6;qVe?R(dwmBi|z6Xu|xnI4rv-@mM(pt1WH9I}rO${DeyQ8dq%bm^V znp8owK=7w^G%06LPJ0;k-SF<0?(90mjXmTa-nvF@eR#70%697*8@m}ued+c+D=PV= z%zMVg)$SP#y$>|*+rS?TO%B1-_CZFfg#7iJOsBf0a>T0YRgT*75v!l%=ed`XjDPL4 z*#Uc1wO(6#ciSz@u~O2NpDUX7IR*3@f`xfT`AlP+O8aL!!O52s-Wgw|N~;Fce{30+ zMRy8T-5r}Vp_$&G{TqyMeXnBJuNZxa^#%^9*`&H>;kG)cPm%HvRCl z{0$g7YZ5*+%Ah+{x@-CVe6q;$Q}=N9w_z~4=}No^CvLw}_9%%U*GXHOM;T`OYO&{_ zHLZ)_xa3DLNRO~4HP)KTad8*lItO7as5?<{WXFzs&2H_!bWEbIXs9D5@&6<2EW_ef z!#97R&_XHhZiV9RPKy>R?rz21C0LQ-Iyl9PyIY~S7MDSaySr~V=i1%>m%a7_nVBRr zdGowNo;!K(pTcWRt->HokF=O{>cbu`?g?P@gO|r~JmKxyd!Mip;maG(tb_eYe$x}R z%p!r9<=F zQ>~LVg1%*vnaN>mv7g`0$7Yun8^#fijaT*D%&243$xNQ ztvLxE82-h}wR{3*!c(oyy2^5g(Yj-R?ayL{*?d^^dd0vLD&H_sZteV3UP)q>=N6Ba z^}IJBGD!!tVrz6-slF#GcT~c{@T@W?V&ljoBpNRiGJsBa{585mlNkxYdhs`eZvRVq zzqr;zUYo{{#DYh^#Bx)Am^T}=y?eUL%exKYJiXf{)~(`AZ>!+7P_<{}K)4F5QMEOm z$LY1scrlh*X>$gg!`& zh3aG7gj^}IBHEc9E~82GkBtEzAI}f*k{B3>BWfi6s*fu7b=_sor!|qSPPLKVWj^Xg zvr6VrudBL|lo{hzf%SOnr{vL@%uS6n*A?hQ?#Z8Q53Lq{i}h|9aD;R>;*ZFR9@F3V zZ=>BMaaWYk+$b`Pw@9VRP45+CCcs&a$g~EAc*Sf8iiLxDUp)4g>|Znumsb<~w^hd`D5x)79|Q@p_XYv>TyGb zM@~@;JHl%53z%$a^?;|~cen8GwY<#nk)yMBQ$lVBR96j2DEfyvOsMH~{duZw%dT?T z+n3+A6*MyjqTI&gsm?IM=?Va$lPngnc*Ctcg@r+5gze`6BH+e5-H-hT&T@#v{;Q zK$)1GXRy(ovTQ1U#&JGx@|c~Ev@1nmco-+a5TB=qiml){pK1ET@?qKJ%tydBJ%Y1< zd_9kje@`c&JOc2nptc^Unvr!krNFsI8Owc&$B*VsKpNtWf_e?bj@>33=e0XnXPFOr za49bxa;W^B^%PdzI(L}Q$~?mZR+>GRY}gVtu;_zghra;)@B*2|++~}j{RiI#t2;J9NEG#0i%aDwUo|I^;Q{CEVAA`J$#if2l z*?AA)jK#HnvzSq>KzJho`5BAr1gz}AA9K#>*&SQ=+9N<}PO@7^ZbEoC|C(AKC?}~h z*QA{HHLyQrs6FvI4Hohi%9M51-|A|#T&F#ZM@KpsLKbjMs@<2L3&Zs%zZA#2xp-fM zKYKr|H8^Fq+^p*2>d*K_&ZpFRcB&K=ZgaLXoC_34B$wvsR`F)nL+4t#fiLwdTr#R;RqORp)cNnF39X8kZ{9Gs%!1dCh1p4Q-#MKR&)Ll%XAe z`ZG%t_SY^h{+b`}n61CB&Z{WmN*s%AgGL>|duSFiJU#GMyBUYeIrMMrA32#E*He0t zOY+5>jbx0UtG@HAR(0*Ce=G*$Migk0NH`E_@VXN|qBlcuhpY%|6q&ibfY_9pv! z(vpVhGcSCvM<4C)hmX5T=~HR!21>Xd^hcVvqE?s_d6?G0eDNP5dv%|FeTwPuy&ObVU2f zdmwB%;8b2MWo7YxcO%V9IHR@2igLnwlD?>vV8xmH+P9h^+$x||W!IGc`V+#Tsf=!z zCW)hyVFJ?)p9OGShngXtZsg+9h3Z+6A8K|x`n&BomNl%cz? z+A(MQc6lI!Bcolpj@e9W3hJTR)6#@*$Vu}DmKBuwi`P-ak1j(Gy56lG`le9A$wxlu z=3(nGy_e-6JYRB{B1yC8Q@LdQ{ByhKgaw6^N7kaczRD&bUlF#XyOe>%*RwPBXK->K zR^D4>w93=~Z&Pw(IU#z|GSm^9(C2PkWLQ1;dL*^C5QnSvZ0GVj@`&Io@iV%*Jo9?Klu;t@4% zc>>Ss>2naG*G;7Qt-;^cyy4^TDX8 zbLz7*+F?{aQ#c7!=K-iy-hSOrZXMj8qT(3)&md1;}DXn+kamz40ISQ_m>XuWQOOn zsu3hK)19fD#YBXDVoTB7GTc~E4}Lba3r?5${Ix2_MMUIL9lx{$2SMJ_KfGH!R- za$t8ew>W5_K6V9KEE`jW#bA^IL|Ing`H&mw{~QCTd= zV)zTM6?g=H?A0HPEnyiY}~6W5-kZW%IS# zF2x&d(m)`NJ|eJejMfTm?sc;^JwkmaZ-uCV3`WEE76Z~(-}7$*Ldt)pz4o`QRnhhr z;l9h;c(J;DZ;80DZr*q;+8yDFMg2U^;c-#H+<*Io-=~ zg3-mnJsJBO1N<1{k@5$3@OM9W^k}1TD5E*_fF4=k3o^zV{Ifw&-e`_*2fym{fzu>xo6}4S)xX1&;+F}16v4T1?WPkE; zvFLX2=W}Vw0@5`@g6TnHF3s(LBpx)5{Xh1|u;8jJukcTQ`rpY*6Wvgvi75n%KnC*S zc!&bb1aBq52xCfYFR!6-I65j}yg^0^qO(BT3EoLamh=GpH-5ZFX%|Af(bNob0PVI4 zBf9aV{SZFC=i7+bks4%+_%s%}t0+w*OXdF;@)k~zvcLit9u^uDOz%9-p7y=IeB%#0 z$2fghU@dC5xG86^VS{r_HPLS(G^zT}YxX<%=!B(Uvm-~O1-Yy97!p(tEQ)X9Y7N6a zjU}Jb#ES!6&i1*Ay>C%CDGAD|>3+KtBVd&O3vMpR6FvBg_xR=;lIIp)wzcn!#pTe8f;TBp}EeLewr5FKw$r{t(3%c3hE9uL+fw>RhI=;Hi z81~U@S#u&w2_h;}#a?prZpCqs-Mj?|fK3WCWV7!9?S-~!C5zBJsrSbRbKbGzlS#RM zA^U^ODuE2U1PYZK=R5dic8T4q?7|WJ-I1~OL?ZaR^Ap&D0LJQ%c_4{B zR1G{zz~oDmnm$5l%l($HpC-v%e|eQvr-R36<)#VyoonuH=SuMY746{8B>C*Rtqj zkHB@h(STHszyPbBU(+#|90)p$Z_9a*9I5wlwU$LjlMf;^!RpWX`~3r%`NrT5SVH1S z=^o7(_Qg?4k5|0EffaACeYx<`hBrmjzEOBP0b-rE1lNV&1JVa3q9?|Grfh@SJ{jR3 zP}`3|rfFOQJ*(ss6R`24({KI$g2e@20<6$>B(QW&aW;k}ouwS$H{M0F4t|#v88sP^ zO%a6yKZbo?M(D>UQH}$vk5^N3h>FKA??-7r+{Q3@VO%0MenIW4Cj%@$>$DR~TKf@% zM%Oq7FXr!Y+_09^R*>gpbR59BPWem%G-ccS${7kD5MtGWDG+0l(2D-0hK20{j3XyC ztxS^<#8j(9)FeyBc`)GJxe?g{4G)>wMV=aI?K=mS!OylL!}dNE8=!hFY>1*&4NnYEhz$)&ip^$(#P5Kq>0c4b4`uL$?!u< zNi#sdFV8=(k&QsVufa^v?<*cRNubBeq6XF*h7AQjAA>j8%XE#t&) z^zoXnrlz9)BC~7D-x~}H)xOta9KA}MSis@Tl~)9yUqaFq3v=G1D7^;B>i$2>$H`Z} z)BiAk-?Z`4>Jy9k;j%$#e=T$eKOqoD99-5^#}SU#;3Xf@gN$c!lSxaoorw{x7n(Ya zxMob)4!(D3H5ukO`wflpb7;D#QyzGHPIu{&;`R7_aH3 zk&z}s6qK0>0)C4A82Y2EIUu)#&z$=nMS^m!MqSMW!?Ty3E{rnUy!G=G*o$Q8UP>1y z^SPFKgP|#>w3VugU4Rihhl}cJikcPnV-sc1Z=9fcm*v6nTb|w&d`S^OhKiP!fA$1% z<2{J*VAwv^*W!p;Cg=LyU4PCx+IcE?r72awkEQ)Fl63kcwQs<=#A)`QD_ZiuGhm@2Gj*$e-6+?11M2i~ht|>@r5$ z*+^ix+|=34#MBwsIGjgM-7ig#HZXXk4Yc=sFVq}gvspvQlu=(Pdr;^VVsgK!f##;K zeRB`meiaHoH(3};XDGCuZE@K7Ha;+1<3>aX;C)EJLO_S`9^NAv2l@MRP)5!8mO#_v z8TngI3(A+&ONNUkGdKst(W~^B%LH5ebASi$qftGjwvQ7@G`Ziuj5BtOc-oZIq}buk z53cuS@D4?)vb!>tbB`{TLwZ|PH)m32J-NTx$T`oAg1W=(*pkIeV34dCp4s55dEStl zW@v|mbRz9Ncx8Eg9W=m28yXT~K^fu^Q*skW$ z0}!LZc`73&+V&ViooAl>KIKU0;H2k}+sA;kG4)f!-tOQ}Uk69xb(eF| znG0d(yS4Ei^(B8gF%~Zhd+B*=G9XK98~;#~+Rk ze9)haaFOoaipbZxFSAuZo;f^7`q8i+;p(V*FsjucBu5Ti*pwh{bpg%N#$+@1HR~}V z@dKRVUDg{kD|CIh?#mX&n=^E|_=m&`ESEkXl(Bd0=hxX?HeFtoUCD*X0W!q(*KxMZ z>^3X0oz#MO9mC$AC=v**leQL!ytC}%SX+C|sg>U2Jr^OGZZpX>Nh0P;{1dx5DFmAn z(Pi4O#svErKRGDBo!QnUiz;w8V=1y=IpNQ}h`9~LkGcl*%9^pKxum%p+us%8eg#6h zaAI%~__lVqC7kS@;eN}_;(&EydiaDLhv=oba6y{;)HKUq-FCgwi>jlG&W*1<)#q>$%I z2r^=y-ldSQ|7cJ*e~B(Bk!NXZj%!6?ezE72Q5V)Yvn;U)YH@%zu!cj=*uk~7a94{S zg3CJcoxepR|JT2fvg)q8;#%XoSGzChF33lLdWAI}$v!iruBUYN=34-wBlAr|Ryo7N zirDp`aR}9R4KQYr$%VW|?{hL!VYW*(`(8n*i#Lj6v7phz%lZ^-_%bo{)w(JJE-_@d zll)#L3AQ5H&Q`Y#L&zlFLpgT>yj$pi?AsO^Z5SbuDXVc zF;&$JD$vKaZdG8RHnXENUtq!MUZMS^-L-&c1bBD6>6-Gr>;k3GjPmz~g2CLPPu6L_ zd5~poe(^F`{H$BqYl|7(&d{Z!j3!Mkqe^PS79KTDe&b%IJ0sW2lhso7VZMU!rP*y( z!C0i15`z8raIa?G?vg}no?#hkrIYkhdM$O|Ss8QveW(2cxx+M!v?M<3V;6&kEDOM9 ziP_7NtCyTv4$5~a>}fgEBBOj1A~#|}swP!+083Wbsogwr04s8|6YdJu;3>VQgMaS= zyoiA%7tCjhE zkn`Y@WqdHSlN?v076e|COHsE!7GE_s3}O<{)jJVD!UYxwkF!Q;t|;8Z8fPpvY^P!- zO_pwKW@ao1oc1{)J@!uv8kc#TtTGCU{%4_%&n1BSNJcxcCLvpV;^)BgUOT1}`leso zgM?=f@E$^$yhKe=b{;8wS{Z7_Y{$~L!fhE!{e1J$m-* z8uj-CNFCeNxuV`lu#<2w6OFTb*xYvi)%B!_yqLSu@v11#a`5hHBmBVMw|;&ef!tbt zE+7sp3r{as+$`-s3AoZZUB%?L?k+0C+gzpRp4)BHv-ggzurhABL}F%GkBo6WZSh`5 z#xMRg4y8I4+}>SUVor?D9cx|?h7$Vzjk?q<)1*R6onp`&uz;w%B|IHxpinysX?`~k4QQK>*-o9u# zKPZ{@wJ>HxwM%U_FIx)#6a#uhI7SRB+_v41+6!VE7tM}5Qz1qk^ijb z$N6V+`Q9*z^_!anN#Xi_8ENmAb23!&*nw*gBjh){H?5i_(-zQrt*vysiW#gU`e@#XrK zqSX9CDd<)mX^ffBXQJCQs{QW{y+_QES({vkZkI?~-FL<&_!J;+WquKDgvcW@5&xQq zysWOD9pm8Qv5Clo&GM&V1FM#e?o`hS`TVM*MABg|90l@l@jqq`r~tINGE5}<&jLH$8=|% z-9Z1?Q?` zc>astDicL%VohI#$v(`?8fCmDZG&4R=5vmYEdJUQJ|CVjs#1~-TIm^FkH4N&!O`f@ zzHY6LHQP;R8hNKUb~>#t=-6Hv1l-BH713^^O3#m^+-Tmu|9M^NSK#hKR?KiwfDDC- z#ool8>qlBo;$Iy50JZ@_XkRK>O-dLgnMi=96l0rprrD2SGohykrUB~k$5cs$u``YE zxvw2ZL%)lad%TW|=x{9DNN%tB`v6PlPi18r?(Ngd(6 z@RRS|QyF3J`O5S5g^0M5Dzt;j(HF!rIF+Iyz~DE7~|B~4!_N9{odW+*I0uv#>zGxI`RL;G2P5p23Xgk+rU zb=H4!sNNq(p`$StMZv<1EA{Q6qQmF7ywfBj(-I_hjPSFFl&j7ERf{A17EabGym13P zr>nLpE}Gf*n?<-W7D948(Zgv^Uzm1@hk!(FtiEws-_f{0N5D`YZq_g2KCE036W>I~ z#oaQL+?tgTgech4c3K1#EM3_iBm^DerjMW+mWm`Q@?&4u8B*DRN(pf1Re?VCfyC&b zW|$*ticg@Fcr=ZEpP`Pc&wO2n~LvAhD`C8$f}MGe9kxK=^^cZdkR-7klA zaY$O^3y1m_2XGyM#UMXOI;iQUexWePVZVH5s~EK4CZ~Y-HleDT8+`Bz0#9+14&h%F zH%w1-)LZ2DH&7WC3d+NH6R`D)pqwlQ`Rh$p0~}oBFq+ufFH(OpPtd}iI-bG-4sJy9 zEE)_ThD6^o#*2uH9u^n{|1lo)h^Kvneon(2lPb3M_rf1yUyDl&(P&1M0Sx{()FAmZ zbb!K;FK9fh3S=6DN-(RL;#Is7?fM34H)6)LZ`VS8?Fb_>?PwaHm4JFEPO>r|cq;3N zi9CPUKaOC7@0)Z>2U*%-F~UECfC91!Fyy#y=-~|}8~)ioN}%LYQ>CDUw)1-4X^!@j ztT`+wuwqvc(qP80ul+0n1=w$)LG%bFlo(8{@PbIOo??LzMLIkpm}Q799iB15aS&LJ z?9*t-JRKgX!8Ll#j=jz*!%t0Tn#SVSuce|jcJ=-3Cn^AY>; zo7g15dNkmpO^4_Geb_ok*pL5&QvwERiUP+8-vTujD-TpNaVXb?U_f}muA~k`gC5V8 z*~;Ha{Ff^EG#52TEC>rQvx?Lc{kwp6LPl0;g8=du8p!`DitPQ$N1?ELKNTSZasNzC z1lbnB!+?l4;0D0tLi!tUg&?g@c%%@jMqF|PMf>ru7ZJhH5cx)2W@eusip6${>qEw?9c& z(yhgp_A)Z9lRG|GrtH^eG$aB0TD%>%?srdP!jCuivp_zl9f>?}?~my2iw(FZzV`O_ zvmD;Dd1L!G6mWBXfAgEtE;=e=wKDTz^YSJHmnf{_Gyl(@M48SWq8}R7pFMof?XH=^ z<&3xcr10q2#3SBE?p8lMgk(LR^a;B{dN6wUg@@-2vES6zT^KF9fV$ll| zC#Jvh7xuDgbNi-UPH>yE3ujudf5x*Lp7ylvET6vYO@wYvr8E=>EGI);-4bndog1>4 zCvyd}Tzg926vobcCF}wQ#5p&&1ra$=7@;$(=ab9|q^Q+$qUAC7+cro?*4L$sln0e2 zLEkzzJcrz%O`eAn8T)Ndx0fAH_o?V4XCZHdV#iuS9?(e6T82LPKC?VOec2wnza}EQ z&BVEfPK)a&SK6ja2le7fC_l1lhIVf<8^-l+R;1aer+-sC^IirLR$g3F}{1sE3JQc5Hdzxn~RLPfp26 z4=J|n@J zUp$A3i_K>0iv3`Y>^xrSRKzE!*`v&I@gmuAf2;q+r*ydM zwy46fWh)lbtSGW10Uuwy4Hc>Tc4$q1X|4|X&vK1Um=cQAWSxzh_0fK+`~a~%Fk^HP zXE$%FTR03~zzI1%tapmEc4G9ZgZPt-%FxaN1XVLw=KH;NHF~ax^9R(-qXiq>t~C>q z>ic!Q%gtvk>8@9Gg3tnrty1d^++2l7IdI0{O7Oe#o}vlo@xCt+c$T> z7Li5!;`sMVd?XeI=S0yVF1{AjtI9Y)ZLI$Y1 zIMgj%KY@PMm#;VU+r1TPwpQTdocVG+ZhH0I#V(phdk_imysXHm3ol<@mYf}Jzw^{z z$H5is5Nf`=x)?VdYe|T+J2309tC-2}{l9zFw^vk!C$v1aeb(2X@Vp?*x}10V=&`?m zD?U4$)Jdq0G47fux>rpXhn>D&ms80Fg)aThpP#%w>`lzF#ShvlX?5UqEIW`Fc`FnN zIK`B z=t()#9<#Gmow?kHgM6SSt%2L+TWs&q%8i*q7{uC( zZ`3D}bFSvif8E~4iR(PK&3FXjYP@VKay^ot8>oD>mFy+;-Z5?Y`B|g-G77m`<#F7_WM(8}knKqjf@3*T2H!dcg=uuTNFDM`LMw zNIW6@WFX+pdEnpPJ$U(BGDV%-pBf~#V#IXa7RaWSu(N3OF*ZrQvQ`)qxaL$lbCs=u zH2=aS1Y}xT2J4xcp<@c?l0a{gup^=6x$#Zid7rTEUv5YLibUaq5e%x3y`!kPz6S3_ z0k($md#Pr3GTl~yzc5ZeRZmEA)YX;UuRwJ&^nzUfZPwMdtnJKmS*0s?n|D`Oe`Jdr zo9kO6jtlgfucic6q{Dr7Ifd?>)*^^)p3Ye=fyRu6znPMQwy?9mf=;#fij3?`kgnRl zrDb|vuR0-RW17t>Uyo|C=uatMvCYd0JOZvNA98gs8pPhB)X%eVajR@&(!O<^O>dK_ zCA?X`_@YzS;C=}H7tA>P*;WNTci`};UqGrG#H3%sqCVK1nm_c|Nt&tV_cGpF*;1Mz z0172@hm_U_D{8L7>e;WsKfA{%)mcJy+ZM4FPE*L&23NN**ZrK9M{h|hVYeQ=J2o3H zn9Vvv)_MA~Eu^J7H+JEpVF&i(&$|bcW`B=}`u-XmQ9_xmkG)UMmDMFfYsv7i;O@5{ zE{5VCe`UFnOmgq}8b|LQ4>sAT0TaCdK}dSV=tASzs@_a@`_zbw+pNv@4u6*3h!1Vs z<5jawhKuu(En3Gz^JQf7%AD~XH@@*o>An1q3aH?sOzKTKe6pEUcTMoHer)74uz0~@ zDm|IJ+t=|lq)_pkt9^`A;r(O?Tw5)jH7&!WxvWYvMr}AWq+0NnTk{hYPCo&)rF$Vz zxgU>0)(u-aUUpkw#|C`T^}ZY$Aza;@So)?9N5a*!^B)JNt1}Fo&&(xlA2Ss$6Rmww zE_Z6m;GLh4sH3PKJm6%k-@jYL)Q*I-W0zc>nlO{<1R2-4&RUceHRwv~%4fLPbgqwj z+E}ZPEzn=zT^8frvuznq5*7g^gf_F6wMTbplr?BmfS3{Zj=144-4nCtI@e6OMMrJ0eyt~i*x0fb?Qf#`x#%fqQ9|d;9RVxp;9%Em=b?>+xFFG4!U~h8;RyQAdl+R zZTPk(zjgY`c78vL{~oE!73lEl+}K=)oH5^fZMXt$NZ0$`hxaQA&uPTX3rwA7hk%UW z^Ti70*7q9qUw^H(Xd3{1Tb%-AL;UPvi1lq^O0$@7vv)mwa2%QEbJS*cyn^miyDrI6 ze?_~~)J8jVY<%8n>I$gRv=e0%{=|f%FS|>eZTw7{mW=8i#m*dp%5yK1 z6%Q+MZCl0I{>S4Ua^5PjJfA6lRW%=u^1+BwbRRWT7coC&YKq+BP_<^X1*M`~9&phB zQura+(-*TuJH46(z%y$4hoYhXBny}xkRr(g+3&$60$Ob_5Kv-%So~?nl17I6I{qf> zG^KrxF|Pe$`#Lu-WxVNYk37)@EHuVESPPtdG*Tz^y_)zHAk6+`F<&s#JnJpc#{XcC z5D&RMxExA!Tdvn?s^7}fZgS7W@d2)l? z{XADQLRz^>Pa7YBKdM9c>G0&%Dy{3(?pYw6_ABk))hzq$wh{x0vcGDb+QjJ+`E?N_ zWtjT*kSnEPcEg4VdT|WA8o{mbS7I3oT>TBXh{scdL4?R8;E|AYe6+e>9jEMwn|@4F z=tIulU_eXMKe~@xhGJPiEJH#Q@QB_;|FdC506PO_GF51h$^<+d#_`s2vOjW}t%wND z$`v1J7(Q}qD}W%l^xQ^q#QG+jZ0sb1v^0?aXtU~C5&+4RBp?8kY+(FtN0>N%vpJW9 z(2!~9{}e==u7uTXm;h7TOfBqHr5{6xW zTXb)=n6s{~QfRT%CMzj+`Dgb8g@6UcBxxsw zj3A+tQbi{PWoHjC1qBAfe@p~pm`^>v?Vv|ihOqkgEG%lJn?knh&sPZgJ9LWAwc&oh zW==t9qHy@~bhA>|*hx1-(5v}3am5;u(l?qLufsO+w){l2u)1PT*gdVoz^aTw2>aSO zX2dLt(5I0eu{2%ze${-~y&FOThlc}$1>uCl;}d8M?a{{aF#4*WVE@IjlbTbCZ1A{4p4#>f)vPWmU!QW2BK!Fe^;~79KK?D z)=ABj1wZ=R8_m53#TXv+HbsVQvxkTs#*aK~z7iMpd1S~^xVd8y8K%l*(J7{s_TrU) z&F1axRo_AE`mxAg&w%-_oGc_378Q#jc}U7@P%35u`GCQ^*9SHrBQl@VA=jZsR-O*E zAIDqO6m~u!F#OA}Q3N_%h%724)hDi*;qG@i2IgY2*v*QS>=XqppztAwW7Xu0LZ;XK zUAA+y`kGqJBzZ!(oJc)S2PVIrb+c(}h-=P;gtYE_)JeNEL)Y0xYFTp!~vX#HwLIzh0m68Ft`wYUeR zJSa>#@cg-h(ui+d)zT|Lb%yU8YutHmeh%qK>2zCe?wJ!gx>4_GNn4%ke@0|Z$y5~BKK+R)M-=RjU%D(OqqdMvvSTAFA!P{?P zHT$~YaUUYOjKEXkV$cyo@|7?w4|*kB5{V89j13+b{~n}For>rNKN5g~y$)J~xcV#5 zZ|VR%;bol&Ltp7t38R9tGXB}4f1 zq9iNe9=1*nA%CR z0l2%~*IG1YSSdB1*AE>9YQs2Y&Fe>3Je^GVkesh=wqf;V0>ixQbQ~+&$L+UAX)DjZ zPFW#mi%zvoN>0A|9efWg_1kYE(hP(1*{FIGP415jrVG@p50)15Ix^gfq7WC>ol7io zRv3zmaeX|<6Y)Ex1c~c+jm7gk^v;*_3TfGcGMt(cdFqYe^_A=%Y>NtQTxnyx zzEy~Weyzgx0vK)6+&5kMtmEudJ?`IolwB88YGby|jTYYOW|NYbItlLjSXM>!*@SA- zUq0$FzE!R;WfyWeHin^RfQc#<83G=l-sx z0=Vug=}zDOokHofn6=NFvH!TMvjRToao_ z`*!S%)5p73B=(+0NJ^TtA}9yEA=sV(Fn;sbZk{zPUjqHzcPr-m&vTB|Au zU70G;G%&WU9Y11W+E!pwd|yi|?DrJW!Qs?#nv&+?MYtA#xIJQHGnU|(S;@+>6~Dkz zPt3JK*LE(g?vdSu2O}pd-{*eq;3XK|p%HS3Jf1a@v!U9&u9dA~4(xKJ4FvR&`5Hd= zClzQYT|Fs39L(TKqMMosH1z3wX)YEg%I#8R1h$UTU=WoPN%l34lwQU8bt8*1(X#QL zIc(K>^}3GT?DdQ(=(gT`3qN9xqNneQaiJS`Y?1KAqEw>7 zw-EogC0`h&UHgv9nvU{hCM!Q`cRIoc%bRw7YALIOF>7s#A@V{ljFwe(r#(;a)<&tJ zvq5_K^$PVZ4)1>@jt)3hOO)(%E4ik=v6Z_p;_vt&oJMbZr<@XX(ZBILI|F2ah0Q|r zk1h~CT0gwBWF8oc2^Oa&8MW=buJ7-Q2`yRlhV!6!77qw!xYa4pp37^vxNbz8*u$Lk30xrn8Ia6Tj2>lFKbV;GP8B^-FT)J zhS*Gjb5$<=TS+7y&mEshlB~A8_*eErHXmNy3g_MWPGN4#=VgJW-)mcs0q(8oR;C_n z57ME+#Ltl*TQ!649)@l^yiFYWGc8J2o;Dvr;cYk>$+k7hpe-uw6jWW!`h8jl2ea}+ zbb#rj^&ZBOzEh?Y$d|Pt1x;@O3w(ZwnXy?2P$=w{HKO2q)JGlR(b6;7+$tYhPaD>)^Mv%47-a7^9Gdp+c_w-8e^q9d@kXgsk7V2~A9$7D!A@jbsi-7S;eQRn9 zsng~}ZAhQS&3~D_b3#di4P4SU;`~T&JVg=tDiY8e(8_AI==Tqyo^w_B!o?h($9mTB zF?IZ~3HG_{rSU?5_GCZp*%`~3*hZui1qG!=$ghqSg6IADf@R5)Tl23w}gS@lQ^j(E%dzMUb-JNgDPP zxtrf|JQb^HN?fNM53f_*I$q@)BxS5lequ!{!}6CRlTZM4!UDzI6cG+I-pKZ7KZ~-u zNL{gS7KdNvC4bdw4g>f9gx0I%98!`kd~?NbIlkSM2}Xrt16( z1~2b%;`Bs*5PD$|7`|S@`V3xg6wH15tPx~OX9!}xm1WA15S%A}{+s1MrT)uu#Qsl~ zn^e!q22O9VID6sgBD!8ezsqM^vcxla--G)g~Q=V#?1nEPxe?!>?`4N{JSug1OJ` zgpUedNgT>S1ov+&IG*ML23UUfr^5f4`v5tixgP(|+-Dxleb!$=7Lh0kAe$)Uya4NB ziMWV8hgD;v6fO~R$_ruMG>J#7`R~_$70j2EXTMzJ9*tr9K^K25?$i?M0f;)x*+Bm_c3aX4ntBuxB0^(wBR$H~4$3 zVkHogd~!S>ixKhDC;T`xlrwaMfW>Rtp|IU^HlS3J~ zoU!#*5l{54&e;!qzPRBmh@Wy-yQLyx;X)}qjk-p6h~*f5zki4jA`Y@=Nrd~T_ZGod zBC9|b4z3;<6&IWtFU1319`chgDZvPb3j(TD1o0;|{qPt=tiv$=7c@bXtL7JTFLwrC zp<~PkWc4TpprKIjiKG%Ffj^2Loy;&HSBNDWfsJ7+VHaTpPI}=3uUhk9eI@LywR~T1Owj>R*v{Zx zT$;1)KkYBOd4s81kb4{>c=;ZjJo>N4(T?L{{uyQ?M>WD$o!SPDNkf^eA!iCP=(-{7YBWn?FEf`!AJl#XSX!?(aqv^6l_ z&^`j|ekx4^1lJ3izL(m4?V7|6-aGCb^#<=9e_doyj-z{34X>~IO{D(sUkdC>_PF9O zNK_#?IY7?_9)y#fHIQZwA7A;KE!IIq1pZ4uqzLK_HV-INT^%d&yt_f{|57) z73G*s&A$t*_Nr3Xk%*sO5=QSbRyqWoH?K3nCiCi*Iv9a>0!UI>jZ@MuTN|f1>7?L3 z2A3=$;!Cmrk9@K;EMG&1`foflm{6X|k#UB><8Sqd{4c)VIxMQFfA>}aMY=;$x{+>> zMi7vYZjkQoEg&Hs!q6xPh?I1LNOvjS-QD>v^f}MZ^`OWoL&IE_<}=O1bGG=URx&Hb`1&61S{W~zMj3qSj1DesHgM|gyq^KbW_J$kzE zZJe+VRt9w2lA7+z&r{lnp!J0_2^>|o3sA5>YCDv%|Nd)oF(=lse*dfAJc;Q;)}mSY zYZ9bkzw^r>VR(@xr1ng5Ohh!6Q||>cuKD@Q;d4Sl9UGE0}Gi(!Ni^9E7B>A<)~zm$d*5!p;~E zOf5YYAArC`>6Sd90FSx_%WBsJc&1krxcgH>j=8vhCNOQ@Ku{SHWmiW2?_0kG9dMo)=4vYXkauN2B`wNaDEe2j))r8(av! zwt*U)u!FKm>9;^24^@K;bS-5H2AUwEOdmL10-o5$<3Sm0lyALMO3Ltnj*b1l=~#|A zE>Ia(8+lno`tjknV%DO zd;_PV^{X-%f1}FS4HbrF%%~-YqxNO(`_AC|@-I8kmVWU;ci_jS*Gf~0+6*_}(uM0<`-Gz!pS41( z8S~&O5h3rhV(7YMuL-*2u{=6G-rs97exx_IJl8;vUGp;dS?{LL6WhhO^Xju#p>-Mc zQ&&`9XO6bnW!{|$+{jN}P&HW?=T@H{wC#-Kl#jacZKs)6`7rs4=}vWI1P}XK-8r~l z4V;y>n@z0c>JW6X2lSawrgDkgZghy;TnwZXIFNWPuRCG)t@uE9rwe9t+hhcfUznGu z=Csnq8$q5g4l%!cuD7{vAtrk+5_XlNb9haBB6P8$@aZB@ItqQNy14i_0anU$!1?ZR zs}ubep^ve;Icz;}?wOEnep!%+;CW**PI_Qn)wq8{x-C(?qkypWFRQo0g2=2Vv#HiL znRPqfsTqQo7deU0Rxs+@gAEUU^7w||V?y6>a+G|`juuwJV2Z34>C{#lBOdC3B-aVG z$fKxu%~}M#c~$kN5fw0+hF1-H&@~93T4B)0y>wpeB#z4Ul+C?#7yNTZ>b3YnuZfnl zzxaj&+9}E9k{3}@$)NtUPWl{yEb+tQ3>7Q1!9dLf?GQtC^Yx7Jod>(uzL9gzY_|#7 zOdVu=c&SaNhl!$TJ#;-DENen64%*!jX4?%;y{RJ?KEfGm?zQ!HDSK~Reb*Y@BijJR zU9HnEa#Z{K!r!ewx5C${fN5?c<E$R`j2=+92 z4f71lZ9o|pFc#Z_-Pc85%Z6d~>xMdr#waV>kIK*>)8UKg)aDqw(Q5=fQ#-vcTfSMS zLcFj8E&2=|$9^|2-R`O7n&x9m?7J5taG1K!Y!^vMZbEl$>O&}m)D9_DQqK3UmU942}Y^gc+INa=xMPH2V zpL4B1Z)JvI7E|XECmBn(w=;sHx6{NYW`~|E^fy?n+E)P?neNR_9KE!%W3$hEY8#J7 zFQ5~Cm9HI?R!MpOsq~Mj+B+(#+px5b6eH_0#&>C98zVhYEF-xB`kwW#^_(TI39H$~ zn%s%;jhb4ohnRlt(pprNkL=Q3O>bsb>iq60hSRyNB^s}(EI9`gl23NGtq9<~@o#8+ zZ!zD$+0pbq8hLR0{>|$H$?}W(&a93d^rz4{2OG0ix9b%g92@MymhxbS&_}?b(#d(H zN-AnrwPUq(rh+h~D(eL@$N_t3Z8w~()&H5JhIkLHCmJ5B(+gciGGr9Iz~=e9`>F3~mJwra-LDq~4`{>FqK%z`_CBUco0O zh*G@rSv%M`mA$%(T8}%Sx?HiSaqPI>f|0M{<3r4ZdpjCLS{x;>*h^8vjD>8D z`-lt)Px_znCa_12RZB)&9cux|ODOub#_$L%VD*W8nYlt_Z@hf7`hGAP8 zJ*0?y;JMKMq?ozE(>x|XzAq!^HX#Ua!g}^%LeIG?*DS6>kwmLLGqqT#++cf4ktF__ z*`+JhS{AQthD>YwI4z1qYg#*$_haM5$Cfa4{SE8a(ZSHx8 z;>d=oWPJr#w$O)9aeU&g?y^{bYv*eB3_98);b=L#lIqF7+gRA|xJzckPZbF>%evhB zd4xZZ@HFTy67DW7<@mA)O@A3t4gHqfh4D-4m0RiLMPwGU8|ltWY4I<+;NB}NpC^m; zWBVSudILk=;&pea`zNkbhunWwk+pl{n96rW=u)@P2JBbg1yVA5FT9JAv#uGjSa`|d zu4n5&;+^8&+X6Wl(cn3jREuwmb>6X58IHJf)E}&BSGY9Tc-N2+MXj|nyWVb9h4ED3 zuzuWcxqH-9HQD(uzvJmTzR4qqC-!d?H>tt!H5!&V=L(jZ^^#u}m~m`h2&yLr048zTYZdy;8p-a~0W{ zCikeX^(E+=+rPBHe;1t)@F_nbNHxEBN7kF9-tDK@)kDZ7oG#^jK~qo5_6!kq1J>@K_@K=SSY&v z!pEmx+lC<&X0ETIWjOfJnOC2v5rz_#T8d^4 zD!3}*O}p?_zaEqoi@9NVw31 zqvQu@@x?CdUH1r0b{l>V=j&>>EM@KX78NStIr~|<8wgo!{P7(fP7|`4$mP~``u+IT zg`r&W=tzQIU%AZSsu0HrMXABqwx{vjaQ;Pkw!o3ruCb{uE~HzqcH<>|Wh0PGB(@NR z;o)?c-ecyojDFlwWJLA*%Wzh^l&p=p$LlhVxs1dWbKzInWp_8|$1`DPKbt)=J`K;X zsC;MQBML#x{6jZ|xcLn}v?c-rgTAsh;(gwz#*{?(iT;;T@UuI`7|nys$>MA7N13tt z92gk!o0j7eh>%2nSli2&<&POmh#rn4CoAFkS;Wty0J2-Ib%Pnqk+cX@5s@*QGuN1q z8}Ofo*}%Wn&UUh)NM1_GcbO8>nkTyPs5>BR>OCs+vSmMQ{d~^O_W?8!&tfAS&#)GefKQO399^NeFq%?5noWNbn2k-Y3X9_4pDmJ4a#X;sp|A$?J%*@Y}TFll% z2mbg&FV!hvD2UG4?v(b?2+_&@4-Gr#8LUy@t*y+}*6DswGbHBytjrt>V#OI(gP(ej zXiXGqQym5%-H9MpL}yH!60q+2p>%=eS880MWnkpy`_^q{nFsz}M2&B-F(y0xankPE zt*hn!&^ywptpjF!xE{f;sEXe!o<^3+-VSXs7 zqWFU12{sPREJh_bE^TIbYYv88R7CJ-3vlsAn%or9FNZ=*{%B*2Q-t-|p!31`G!-U>yeE(crp$Ts{3r-xN3BN zC>~Nc;3UIpe#E0&C+QGKN(~^2EO|rNk0ydbh>G5Sz6c7@##miP>)@36&hjR1q;T~y=wxHIoYet(E zGD;q!$iJ2XDdTV-+cY9Ru4{hw3;(->ZTaGnw8X%A37-a7HS~{OU|!cWpCI%L_{fh@ z5(H6W3K_S9zPphl?mSDtDDgXdmLU8sVfz+)$(vwUA)p;I zvF9G+!Pkb<7X0)}ANo@d-WO{s0{o5o%UBIR5KM5)X$Q1_9YI)?#62Zn`RIvfj&X)H z=tzCZ;{7r$iTz+VzEtg*uO%Qb!_tQY$okhZ_bn*)3pDD05d~S+%k`upX`(RpUX%Ca z3lr~O^1zhAcyzL9k7oU1_S+YHCb0pdFH1xi$4m)K?OL{C1M6`8h#;*X3%%6@w7cMo zXNcpn?07m@mhC3PDHu0tNKerp!($Ezk|NXHdYJDOf6X4(tTu zbV!>S(V0lW%pKVikI2OgM6uuzK}<3P`?Cg2Yc$6wd*D3DtP{>^XCdUhOlG@$-Klw~ zwnJ&!wNxEc_Sv*6YhI1p{-hNi`O(;Wf1-Z>)Q!tPT%KqS8i67$U=zTZ-iKcf*U*dw zy~%{%f)_$|44OhPL=29qz`GG?Zqw zrl!5*?BG`%N?Q{UNMd0G<~?3>k2*pd#4o9c7}*K=Y3(Qh6QT~${k6fG=n=RoOkwPsyxe@LA`Ra1cX$ppSTx9k4Z{j26_Z12m;pl93gUG) zrsknEt@dSKl#=RCqymva(eG|eTO-0#hh#;;S$BXp7Nyw=BKq_vl&JQKo_mj3W_X5s zNTcgrbV1#-FwneZugiN!ZSiJCRRaEG#grA)^)Q9lN+20Ab($<3Y_WjFz5F@$S?_z?0)9}=HqRpTa_R~3*KYHSrfKUal z1-Ps9Qh%PC)#7&|5+m?sT`GfZh2P$Cfyc#Ea3*b<2^?{jnRx7YZ4YWo`jTbY@8JCW ziHJTs!|94Q2Rx*Q<5Ecm{l)ploCpkE|L58mGm{_viM$%2!Lr3S_F04Lga~fnN;Z~j zUa*XHpH9NF3DQaCneY1yS@=(-!7?o8cg=kCZe>*IY#N8*t}0C$p=#`gJrQv z&@Ru3S-tB?FS^+u1%Ecf@@4^_5k)8>UPpAm-GkD8z28xq0M(v%P~+ARgZp(v(62!2e3)&-q9;~aZ4h>VvH zUK5c;JhgNrY`Ln*x`!$*H>O=g`WLz{y zwFlge)YI0w&_~0g?vqhme0|Q0LpEC-%%yaZ%e%(QT@jW)V+VX_LAI|au+rQMitX;M zcR=N8SW#p7((L|sCZj=h_^-)j|K>DrAU1Tt7C)RlESXM04f0`aYW6G%#B8V#Hqs@)57;+)%a zrhH1Dk(@s|9}}aK-Jad) z)NOv5hDhA0^>~6ELxLU4M104rp5*T3%L#Khrt(D%;p#YluVt}<$s7sHP}E(_C{`lm z&d@y38yh(r@*PfdSDzN0YLe3yS-ZIOm4#XS`lObAq@&K%Pm~>8bNm;Zk|I8#Wc|Kh$K@lPJcfU#UbRf)3%{kEExysMyEsNP)Z+Kj$x;|> zo`8s5+6QJHh~jT2kG!R|dOwdC|7_d|rB`XWWu0AH{dyJmg6`xnJDS_BR`Zh=%c>No z75|$wSw0_=O08V6AO`W?BKI1CZn3MxrC?(fmLmRB6cHZzbnyE!yk?YqE!B*fkt?yF z@`3Q$$1f<(>azIw+e4nWam}>#e)v|+OUw2SkHom)6U~xX0mtr@qx0$2P|?li?;=G& z#%7IOD-Pw6k;{*D*Ke+MIdi_v!YeBDs!0m#aGLlGzEzwl zXWVZ)*rW{j&iDAhY0iZ;r+LX%*K)lSKG>4Z*t0abwvW+)qoQRs-o`dtWoP9*Y(+N% z@nB?M9QKTQixiNm@i2^bN+kX(XXl5DKBjwUoco1e_I7&tg-b`Jw!8AMn~_zZffI?a z{-XSH2fjL^em3`EmMu0)j;8+Fz0i@Q4i#GeatWc{WB|2>bT^VQ@VIXZirGkmgwmgc281M zMj`Mx3uW`|->3JBp;D>g2uG?*?uAn=KuP`shNqXu<&5NXQL6_w_0$*=!TbOg?X&E zo;L%~?9KJkAE2D^@8mp+d?)VCL+W5+wmt3VKcrcnpN}LCO(+^kne9bEgx$Plwv4_8 zh3rO(MnSis%a)$*$!Mo|I>Hfzi#Km{x^vmG%1+s`IL^R7G68ScOrFE)Xh(Pv-I>{H z&3_x>T~^Z)9TD3|=qp8BcijnhH@~?~1U;bAo-^S3JX-U&45?eq9=eJQ*}ZtJDuMyb zC{Yai1aCDVird^ynXL4%1f$e74mQ!y(;Y(Ai{7n)w#MZK)|*(!ubym!t^$>wEixIu zvFY)B4D>owci7h25}}v9mlLV(#JZPQ?$mrq4A;(%RL6=`#*) zx44QsrUiTktR|$2y!E|u^^4}hEuin)QF(D6J7(CR9b}Jss$#A^ag83~9Iy1;;wUGa z$E#lwu)4h@Jfi4=vZ%(6O-N>PJn)okclig>DO!IsE^dE0p1=7Za4@g!`O_v<|Kdw9 zqwnvot&%ZVogj3IKP)@2*G75w@e0RBH42&aaDuhLhCWUYmZxJ}uD$KzyEDf2{@goU zA$j%|`f=zhr=xIW+fnXArn{Gp^Y&QtkD43n#*aq*DH(U)UE+>H{+p8^Ix%7Mw(wG z>R(*I#bJ7F@O(q&#a+>C&5c>x!FfEut4GRNA8v0(dx=;jjClS5X*w0@8jW!( zM^4Ljd&W9@uA&b%ndUcsN$9=YcSk{o!hKpXcE*Sk8nVA6lD-^~)k%->bSv-po%Hn! zztE5C%=C&~>C7ob^TZ7OjC?~g!_~sgg!Ilhv7?P4+$yM;x3K!)&JInvCyR0S6lz#> zHY-g3NGjHKBGgE-qaX2ikrVtBtrtC|{=xCykLmP_ z_DHv!B3_)&L{yWATKrdK#W4r3MM41?K{~lw7gZM-y>xNqg37v|O~v7N71kAG&(HPY+GeppJuuXzxS4%(1%k-09>B$aig&rVInS`BP4;3X<>HSw{X-QjW>vEn@yQ% z5Lp&JVUL^mkYW34;aOu%H_dH}-RFx%x6e4ehX&{FbdP_@VTQnGRxMwJu%A5Zga0ME z3?nQcdjY9-3O~wWc2mL&wm2eyf0R>brtFA5WH8yc<-5d_cuHLQ@@M%N&KXftb9vRX zQ%s?K`tr&QQlUe7%^AD@g%No>&J`ce<`^s;vG|w0Gy+iZ+n%;8FugX21eAb_9Iyxw zF;DqECf6UqxW{}V0>9#8theI@N+rU2P;vQ4Y~iP3mDRx9&!W;-xggsEmVZPLSaC0m zF@hnZ0&03g`SaGF5BB!R zVER!P&^|%0Yu-eLWN8v1m7{}KXMeiKf<|R=@3A0bi6QXbBt-a#^Wh2VxT?w)k|gEe72_|VVuz#k%nl9UnQRtKNZR9NcaXQ zfsklG2{4^v0k%l#$)cr3>^{dYqf!~3G-X&0DkTOKgLF>VFr@qc27y+=2`T@V<`AoU zPxY)@fSyOK+q%dcD#%vOD$BcH#&${%*8Zui&;*vA{XZ-lG0f+h-P6)Ih$2K=LqlPUz}7i}$k@y75Br7I;w>GlET>?LGG-vmpCl7y54j?0%Azhds6y1~(` z`n@7I*wSRGHkl6Zg1yJY#f3WesD?$B%&6Qq?r{*c5P107v{}F_>`CH| z`0watQafkq5}Y`ErB3ml6W>!o+RD+7zlIH&wfC3iO?LE_##B>i+Lu}LR@b8Hpvu3& zsFotup+a`$9%cOmaG%$%Vqge>O(u_AgVg?+MQA0VQUkNEx~jE)X)$&+0HRWH`a2)> ze|krT2CFq!WjCKigQ9)4h$hHr0P7N<%+o38G}>M^Q9Ec1=J=14FWq7w{e1OzPe; zUx7iRJy9cu@Swz$#uNiVfYSK;V1$2K4BHGC0Oq9{J=snV4yY;AOpsg?((J*7gPSdh zp8FKX!~?&Y8%0O=|8SPzp|U)kp{pj8*UbWWp9!o44U_aCJZumRlkj=WrRKU+Gnh&O zz9y58f4QGR9Nqt-K0~rFvSb2kh*OLW04&Vpcwm=m)#0^>|96Xt?|&>N_n+YAzZR2H zU@__ZXE7=NXE9N7`H#f}EBDe705sgw-=88nrv!rmY9kc-T)M4amM5kfmxobTo;vBy z?#lIe*F9%%f>wMMSb7>d`lr6Q%tqK z6K$IL6ZzYn6fuk7SI(v<#(>v(?L96Kx44^h)xhz5XLhaHi)-p8axdM&Zn*ys>1qGA zQ+LQ2+}%PH zG+lo5CjChyH_WYZwhGqpl%Nr+nuD&$pjw&UJmGX+_Kudk^x-^VVh?@ZUA{-bm;+YC z+aJg4+DQcPVno{Qf@n(NcX!$8^+t%9QuZqLf#&V*fH-SBw&$kPj8429uS=e)d2WQQ z-Yb$MIW83ETI@P0R5no9_`RHOLUnkYyE1`0o@XU@R&HM)icQbDB}3<1^;KH5L{V$C z6N9gq_I8d{fygXg3sHM05{J5;H2T&NZ~fctqa;|vXM9rD9W`&LyMp7!dx&gNDr>Eu zRBcC#i)juja4@^^>>_GE!5Rx&Ihmz&wo^fqLT~?MLEjPko)RuWJNv+s_$l|KZ;eYS zU!km?bl8&jW{;cc_YT}8xo`!~qRXSKp0%-(gDJd|XN*XC?P}>~NAQg87q6D(y**FlSkn;P zb6|=CV!j*7{aH+opeIy)c5rN~m$rTVr84givFWd+=2qxe(-_*`%r$>FB-k;@-&*A| zp0Rpnd!v#A?|rJiuGku5ykmUUCVyzN$kSEz(Qd@_7W>IYmbobnr?DN#hOqz2)qyvX zJH`7}A@W1YGLcf0;YYo5o6M=@sSj0MRZsOf{vGTN%|(%oE8GT+0kW-u zQzCWfh7i5aC@VZ!xcK&30KxYQ&iTY~Zhupms@E%D!D%Oy8g~iV=(zX2snMZsXX+R3 zjhFkclZ7=seZ#8<1YFpu(>n}uJtgp?Zq!|`DO2?{F^#o-)5vPH7#1xbpE+51tjjS* zj(jg`TZgo7^KeeRWJ|=_z;6K*?>GS*trY%ZrYU9Sa(!2_qu<4zPVm1iC$qXa;9VT zT3lbW=xaylt39+{wRO`!p|5zsJzNYyod?*EfcMVu54XCDcQ<8aHJbB2Bq`{@#Z5_f zwbWx|XS#DYWZ0kP?gqm7mfGX+UpI85?p&mp#Z?KXPp&ituC8F8aHcDzWGoU!O?<%8 z*LhQQq0Syz**IIAKV)nH%?6e-Mdw~cbsu_0a#ylOijaEb^_);TEtO3Fr2Fl!S#_{R z`CqTfuaWt8=vLOcl2!ZY`+|3g&OF=*?b97cZ5$;(kNI{n1hAhKZ?Tryn7&Ir4q#&UU79N>i4t~_*%)uZ*PhHh_ml462}hnO;`(1sr$_%T@wVAaUj z?n*j#9-v1y>3iK;btx8}Xbra<k0R+Htk>9hq!zf3f3a^OjfpPgieAt zr(vf%Kb#HS6y)ox&;}EpXROmQZX9-! z9`)?{-9jdnZ--_)h5P%?7Z{Ru@R=2a2julPKe4MrZ|b5@u2m-+5*o(~xdeqbZMR3C zt%TEzji+lAYk8LGR~;L$mP_kRI`?2&F)C_b8a3E%geBqmsk-r)YJIhZ#<}W-cq@-h z8!b1Qz3I=QC)6a}wl2=)q^~Rll2gRojxj0h_7jN6x?NZ=aD^NSk`r>@D5s>*pX9Ak z|LMDSf2WXg!4ThkTctnbwRig%t^dk|7#d~$_qLhF% zq85M+G6*BlcPO5{t}A}mbTAY+8z=YZ;Yf|yy^-f*h9F(OxBY|N&Qoz3*>0I3ReN=aMUTF~7!g&4u%5xg7m+@Fi_v+xOJj@!)&euG8=t&LPI>(s zIBI!JQh`ZFju@Bim)E)!?EW^*o(Z;>gi8vUXCh9imWJR8|KhHg#DT9&T2&)#=I%%Y zKf)i7Pa`r4NRcF)$vZ7Bx$e8-%?LM0-pd`Hft~&qlmBkagVP+w<{9%7#-)FxEA4 zJPFgZR#ja7WH_uc_2>uiXLyb8XS9jvWl9L`dw=OB%g2fdLTtEW}@z1^j&u zDJ+cvofs}D+!QvyMlSYT7_cPF?Q|fJ@Q4{7lkZXJDxs1yxY@^k^OqC}p@89BkyAro zT9EEZ5M)rD2Jyuo@L4zd49CgywWP93RpZgyB*|;%j1o7P*I_gWq`Bu#Bnv zgu>DZ0w#v+S;?ad&D}A8+5KAid_NJG8rZ# zE%Dj&-Fp06{mt1Spc%Er`+)n;K zA`*|=wQ#9k#|%MuI)i1M8%)Hgo3E2Y2(Wt|bgD=SVW&?>EJyuYyh0 zVH%*sydug@8Gt*IB7A@;iKqJ>{s0+?6qZsV-;I=LD9jX&vx)#5f`^R-@*m}8s`v4Z znP?6%5yS?pg|wKu$I}ozU*Y(*>|zbc%Yuem9c}wZe_;55niD012MF*&VbtnCSA+I= zkL?F*@)ISr*jB*BB87)9jcEK1tOhdG24U$7b4t~a*ns{1G&r=G{~@Y*)9!cax~Xu_ zc?bZH&1-i%jGmgOLM>ip_b^F|m$vFZQ7zUVt6mY6NFB9=WG31dE8YB-8-|{aD+B?v z47FHvC@7C28-4{3&sUaBHZ=H6lY%<_u?a`*cPu|^spddH7x2EtWn_QKCr8+f4XVau zhx-HZg^UDZA^GGGKwYQzsS9j+Kt6+{M-aR~L22gx8q9B$N~t8KI=kQbUHQ;lw!U~cmKQjCKe9WgXWe$ zyC2}cdSddhTPBc*lK~9u>@Cv@`@;F2x zPlqQiT)w(zG1y)e=!uf|T+9ChGrj;jmjiqWd7MoTYWMfWpdBc5#tV!vBxW^7LaHh5 zG$?cNv17u=1kD}Ol0ISPZ=?~a@22$chYv!l|7)p!_O5Rd1}XUj-`=%`H>+SW)(~=) zNt)sE{!nRZ2C^L)|HD0#VTXIqWUPexBmZSGRQ=%idT^_N;8t6u&)kgWm_nv{Bwga8 zAHEt3;DRq|^1w>--3iQ{jKWg4$>|^Nz}mOTRUw!)J`EO&&O;$a%%}Jm#|08pI`>tU zqVs`1?I}>*#rVK75dts^j$X|Z3P4H77cAo)7nqn{{lXnA^S6EsK3HD?=&EXtd%)rH z*=+ymzb9aH0d$14#GQX~y#I&%9auD=AnXy23&`Dp!wYam%?JWXf!`Rw6u{r^9p3x> zo_4bMtAY!q{!$pjo=Sk4%5tm&o~P4gSnCeC7R1W>=t&kPIrB%{q|o#O1`2ysfHSZn z#jduX7)b{8qkIjW)ru*5R;S^S5{33ca0hsrv_R(&oZuj{x#Y_r|3Ue}N0?k(>Ye8H zAaB#6_1@jZNgu58X#0}}-()ql@F3}AJ+u&h6`hYwb#UJM}J;ro+pnKJC_^x`UH-=wOZi zcJWOA`W77`*c|7-($=#n3g&B2FGeSWtflM48I@egj&KOOW46_wsM;8<2TMhsc6b=u zqTaOc#$~9dm~A;muII&zR%=ED57~xc6y|X4G?V7GesfTG*E8fQQbQT@15+8|3gbVU(Cp$k(YFK=pJR&Dg_fEl;SU7x^guVNI_F>R5l-4UmFy_(s4R=t~n z43?QI)!7UHHP|Vx;3%%_#0(^j5$Q$3I?@x)&T_-7dC?4$sl%b&}mKWg*`I{MQUbEVczo7E!q;?Tqp2e3&6BPs9HZ#+kFA1{wSv3YUg#CLu2g%q z?dj#QTGc`HUuVb~grp@jF{bh@jazDn?=+0IeM2_{%IxdZ7i}$bXBeTYX_f=X=671- zpiM}*YTIFqhq5+xhOFV@Rub*(7NVgGom0^|zM1TVKjB_(8)g8Xk6s!(i-MhdM&AY= zt#dAs&4KHSf~yN|&2IP+EK`S)w1n5^Yd5(mH<(_PSNtF*(|KbgG~G>0sAROO|7-6< zmvXbIwwRgZQ-i2V+%f3>uG1*H@!vgXad+7SnOU9Lu9r;}_7gns$+wZ}qsUE5hUIoE z9`%*_vLdV1e}3Ow3WxQ+m4)TcOu@&;7Tv7T;wI5HOhlSE;}5v-@*X&;u70Sk_X>{K z>!`~ARlQQ@bNfN|`0LrsdCI!4nNOlIzb+k_y0+eur*18j>65{gH|@+ZbtEnFy0VDf zwTzb)z0JdEW4zDYrcU17xXQ<(v0yzc3rIOz?#T{Y*LO|4H;GH5qEf!bJVZSlu4M#y z((QI*u2VRgiwHjb4&`Vw*5y$%+ue=vzMT%=^6E}}c1_jkZA6)-(sI)eAybho-_^-7{7u(@kwRz0@_ZGfg8WH8+Equc}ZdC}}!~0$qL>}NzmGN&seuZ9%bGhMjhmU`b zZtrLI+xxQ{S)$i;nd<;B}vV)ukU(Svaz*C=*A)B zog6=BKtf{kA}W$Qk%yJAlqdqXEqQacH!IcAQ*rvokV1;I$jVF#SCF^K=)pAaky7lbGmd~xl`IHQH4-#^urcZ1U$x3uv+nCQ59>B{qd=j#DUz)_j@x5=YK z@7F6$*?~ct%jf02J5Y0?jUH>t7@kdwRBf+T;}NwU+!L0Ol$A(jhL+MZ&wMAnU6!q#{vR`6l1mJ0+W6-_ zKC_LR)Xl%RDZlMc=#Nr-W;nlb_$h(^!~>}Zg4IH#yICAP=FpwBn8hFbQ?mpz@bz=O z3Nm=^`o_>Z?9f?n$FKt$g?w*No~@|~;P1EDt##1F6>-g7Zro{kpI_^9tcI6yFu$ni z8rca>(NxV?)C$k88MDh)7r0sL2_TUvH~SrQWmV-;Bfma%**LqFZfDz1iakKKNp4{cM&D% z%OA-8DZ#r7of)k}O?^t-!NuP8_@ObPc2kPbz9oDd`mlBO| zLVD|zBZ(UR7&@QcVl?NzthWOT()cO|j~=N@7lBl;+Epme{mvhSh?Vbg#<_8{tL6M`#Y+QOan>m&B>`8DNWH)kXo$!6Han94(bF#akSG3L z$ok(b|9_=nSr=I={!3K6bv=} za{%rdquxJxSmMWkM2Y}k`|zoHwB;#5R6|>qIm;&s_F(BD8P_GS{z_dH*1Mp@8LJBx zEoTy~1W)mzGLvXSdSNeQMF}AaISMCtoQT(IY5qU)G_8N>zTt!^IV>R4J!@%5g@>1P zLcqoUTU@ptEI6{u{e8i(>fgEqMOu&fgFc%V1z~&urjDWJ9D>XKf`9oc{N83nk57j;6#RF4)s$LzoXWneEbF<;^XqeqMZqQ=7mP+N8Z3Gvy} zoN%C-e$|BLh!5KH7PCL`ms(W-k!y0drNI4a3v)ex3P#nVCuuEGnw> zYl0OoOKkDRko2KTJ*vo%^uX8i$cUbJjtoZ3Jeg*#Kk2Z5>m$Su0~~iRTma}{5+(Ck zN*pwC3S#8i(SN5CT4C?62}r~;!RpzRJwIT#HOesGXMz#*)nJg|fGOi}UtEAG0>uXmv3}f=Pd)J7Ki+8-lUF{a zdQw8(Qcn=_41u;aJYDrfvgV&(_62te6VUsa4wQyicY9i^`D*vu6>H5ur@1jTYV!;^U4 z=rUD%MgaaBrc)%N@s%~aq;N0+RZGJ_C(~BS2WqeI9WiM53J1(MYYMQIXHr35C|<{N2gvs>hE4(^oJN@Z+ThzMYSQ zV`X_<5-T_R|ED8t-N3NJ*ln&^B5q{!Ge1F2}AbZnx&dH z-^BaBsbG_S4EXdA{$BJlJ^3ekV;S$`2mgs)7!2d}b4}&23$RGt#*hHd?%CcJDhm{9 z(O-oMVzOdWhRSrb)&3S2O#uVAa$REaWx)Go4RBnAcx*v{`2V|l%g1Ppv83Yt3?6H@ zRcZp*0Axegu}v)`lPDXW(J|_!kG;X3RI}TgGlw^E|mC3Tue% z6M|^r4+x)oX@!xy^eRCwea@D;)PC>Oj&ucGxGXXpRoJW*uGFfL`d-^#t`5vWXLV$^ zvNpcn{5NY=uYVq;obRM?&LhLC8mrj}*u!Opb~Y~6qN8)jq0$k56!M0k#r#r$2Ki&PAU2+bPWp_swgVn_*O9wGQ^t0k z{o;in6!o+@Twcz@>SC>JH(~FJP{4=BHT9Q{Y43@_BW|g!E@vzaYrN6U z6sJ*^n&9bE!RCE!C;EYey`E$PIrYFFmuftJZ5V8|efw``Vp0#_Qz|Ia5 z*yHRqCPx-%JEmDY%bhoSjGa{&uOd3*?4e)Ct(K>^^z295nsH}oW_AL{(`_xR?^<`u zsAb2#t!LF8jh~n=U0M@~&uqt4GK+lb>^*GZd~oE;pEo|Sh8=F~s(!kwlckyO#xrW* zq+gbPr4sGyEN;+AHgoH|Tpl50TIQzCX@$CE-LSt^uvWyMb}`XU$$nJFZYMORTLkgw zRV(ds(@cCntmn|*Y|t&R0}_R`d*{cS7-l!WSwO|980&ZaS0xR1&0va-CYt~65QS0rGXIK0}Kv<1VXUj z?i$>J!vuGCzs=s?x#!$-e+*3bbahu(t*)6`Yt{Sg%*1N68BK94xrI0yx~2Ud$r=2@769T(Z0Liq8q{?1pypO=+x7H32s%!;L-a4 z{E-fdWrJiMF45NZ)-mitY=geLTQ zSyeaJ?tCx2wAX4Z1Xm>+tedXdR2EvEh~^I;SSLJ;?cgOH7e;-Typ-Ei)`TC>W3J8z zxw36%n_YQ*P8|GV=Hs}t>mVbsc?P`Mz8DMO)Dse{l$;A?$UUV8$A z{7X~7-qI4UcyKMofbi?gk3TV%o^Z!3DY`9k<*IiTy^J1{Gz2ECyiy`jb8SzpomfH&EFzI-H)**trw%)1fUBCo5K#_?#-189eNPf?Uad_KUm)tXU~eNEc-*; z=$opxb`Fiy=^>2iHD#L3pus;JDQ7i2Jrr>|GXK#p1C2e)v(%?(;Ov7bsKLTA%?(cZ zJz5_yP7(bt8|wCJ7xcr=;PW)Nw;XNy}sg?BNzWRQCX+7wCMM_xMkZkv1=#Xh; zt4jY_**+J0zb$NmfVU|Y*!8#2EV@e;E`UN@)k`1ciTBzm>~?bGFGOPRn{6&P=Cc+$ z?V_k3W^0NaT@}a#m#f$U%lJ;+n5ek zrS(KYY-Ho?IQu+-2gng{9p}(x*7e^2#9v}wrrhh zYMPw}l}5ZtyDxh5M5>ADH!L!UAO|Z?W1OVC8Gni&#zQJ=4Qk69?wY7Yt*zI;jCk~4 z&sN>ewmJjZ@Y}cDJr_GMkj!u=WZ0B_&r|O9UXCna+O_4z`!)){XsTr{CWgnb!sAOw z3;P1m7^%|`zeTClr7wJO9^CZl%s3Q8thw6tm7EM-j*p|Nm0H+q{(V& z==r4|Z3o!{JxbvFpOsP5rOQh_K<(Scg%Qs@_q(ypPS|qAwp*(j!9ZD>PnwLUhOBB= zngQD1M)JolQYQ;#_Rm{Jqvr=Z`inosG<^!2F=y(lnt1(ZYvZp`Gk@eCWLGkK-a~sf z&r5yq#e!bwi_~z^yBmt__-XF&{>y+po8{fcus(9t5`vZ8Ovj@3ozdZtmOq>4CUZ#R z;05TO7D;XTDReXh@$n=8xwH;~P$bu@6;VaDEo;o8@19rcvzlm|#f(p!NN0V)7cNkG zVC5WM(>PBS`9Fw*Ojv-g$ivQg8*NkTzraBuK49x1UT=__s8e{h4Y(WJS-^521T~(o zCO?BfxmrMe{Wdl646CAn5`jS7>-yx?!q|jV0cYF((3-_^^2FTJIiuBb3)1_1*KtCT zoJ4q4wU^;Ad4E)5ajdQ81ZlAmrO->ssEyKHSq`uhjMEu4VsY4*NBT@*q~zt6Nx{HA zphk)am-jvP4>{EfsXf9qnr#XHn@$@O~+TOpT1XJh#@l*`; zJOc+S{wHt{=pz%me$5of4NlvY`C0LGN}C^NU|G{1I9!aCWB5AHX&{}%@$zi1-GYA9DZ(++Af%o zYInkE^mcpBmlPfbgZ`UZQbXXLhG+w^mu{{MXjC@!2urJKp#ETrN|h4?VJR^Sg+v4P zn+z+M6oB_E!nvFAf|RIM3Zh+)MF&hUnf!b~>W=U-Q5_rWImE9*jeVF9Y$ksr@$yiO zneklvGv>bE^K5r7Ns7WU_UT7|P&U6Z7O2`UeCn^4AUj^d4+a(Ya6tOp7zUjenBw3< z1qMdpUkB_nlS#XNeTDN3ApAuPlI~b4^rbN4K=lc51;KW&-daVS7i70dN*|UGqLEI_ z4IER)(t|1wXVm|A38>rIj1arw#k;}Ss}({j2k4q18u{S%9NYKCt4E8y;kHmF9s|yFl_EG*T zwjadu zn#UWQcv7RFfGmViQ!ip?}2PtXB!i9B!v^QhD26RcK z7Ug~r)d~0_o`~@kd(cWz^hDGrs8n$!-h#K8#b`ngLA^E_tTqt0!^!<+T!cP7sN=tKUq(X<`~imA$Cqk)0@HI@(0LIbbT!Qis~ zE1i<{#5W5v*(Iw0=yC{8d3Rs|PH+uktk$D5;z33vL=em>f9aA!CxZvKpdpo)g3Xy& z$OO7EY%HQi7@R09&&$cd)MO$=(0P?P-X{I#0M++D{)M;5c>mMC(D<)^!3p#)9RC0Q zg#;G>ObFnnCE?AtC@T7gTmbqHU_NJ#bE+c5MrV(6HqgrPRkrGA!Cr%J`zNLzi&8x4LDrF`#y!n>=&JtkgJtaZ099+1$aL{zY4vdt07LBU0|mn`+UmKvL&z-Ap4_(+a%GB7eY8I2~RKQFeB z#|Bdega;ujImB;)PyNa#*4T3OAl5*ZLau&3Y7f~+$-Y;5)Nbb2KLP@b2H;q*w;|8NZ)u7+kT8bA=(|7J0^W=Xo=2KdApWe%^2A<2dA?=T}3 zna0BH)*UI=<~dv_Df0~F;MNSeFO29$xt9txKb@Q(01t*S?)d+&1(Y#b~26JWj{JZg1*Iy-(8J-mPnvu?a{(z2S&7-?(h2}WTA2le94u6taQ_RD|G-+ zU+!WNWJtDU+R38Q91TA+Bn^u9Vl*AL)Ge3OPhCt6=9fOyx{ogfh$xRP`YqzQ3jgLK zK{boD4O3GOSfCbI8>>9n@%MUIxo{P%)$PLzK5fov7oLs#&7XnIlQyfr0j|)NSQ6rkhzYft59~k|F-VG>T3yVv zRUe${KI?I;o+S#+(3DlQr{t^Tk>T0?#PbuyN$n zT*Pz(#$qvX(+w7-M-7m8zo=tRTB0<2W^Gx=jExR0+Fv$6YE5q`$FWs(u64NQ+4G*s z9)9Ey*2l4JtvGZ4v4+<&J*!)OU$Q?EU_UxIvRud9;`>coEF#nj0(aU>}Y-o+;*3BeCOWy|w&ni`K$9hoE6CspY(UNU8*3BM}K!YhCbYGtX!>oIdYP@h}pyR7RQ2X<#4*qu*}uLTVc zt`CG-ZAVAe*B7l0g@qk6iMC+U%QlwLG@^_!&-Ilss&{4F6!b z1D8kNY}oYC=N=>)gkN6WM70DQvE-cJe(H`q=H#+Dw-<%m|2kjc#5f29Af&d;*+M)# z$Oq%+gIjOgN9JP!vs#E@Tl~-ZT6>2*eFGj)wihPjV5-)1z#6~^ZT?e(JDgutp43K` zP#x%>S>LmkM+4dRvTq0J<-XH$^Ze1aGrOteDXPDsLk0JAU>M?_uH}z1h(;d9>{Y%`f%~nr!Lgj}AVM)68_VWSirScAkC&C9K+3yrER|!9FYnnGvJ_Kkcc}9!;(ac@@?Gez z@p?Mg+0H-Ne=dwWQ|A>18b;g zUsrcu=5AT$3L$UyeXkQ8YB6c4Tg{${@XtCLn#x$45Zo%pxL-i&F)3#%Q#fl)Bzx~| zbzk^rfy_tG|G4s|ix=}Gj{%C6zRYele?2*1Jty#Mb~5&3fB-wB_u?(y`9 zo!nc=11Z}>7eZTz+~Q#1$%Z6WTh2Ex3GE&4&mN>dBqV>+lC^o4{Sn^gYr5H#@y73x zaJ~fZs_nQ~pzZR$oJO=}+V)-FBvu$XmcvhP5nq4KjJCDw6YM<=U(6a3-{++w7myTG zW-QgUn`21V6Y2ilzY9c!eaJhL{8^caJIN2AqK_Wen=v_y{{R!Mt*mYCG;yKI{C7?Y zWO}E+H`cJirV6tyIX>NN^zQSV4SztoGYmkiOHd*FfdVh!#|w%7`}!5^EksqD5Tv(Y zg*iUnUA5gE)B)dl%SXeWZZL3hR; z@1m>v%E)j zrUiAaN%?S0FJs*#m?^67-N0G?K=yhebbEy_XVcO*pt)h_VqMRMe*s5Hm&2yPZ#G}d zVYlZJlN{=Qc6cUU%h<1(_*CiGL4FW7o$}J**SC=5j(wj!--SjWq6y-eyURPrr(?sJ zBqx?p%h>LdOTCd3z2)qW3mLB7KC2gQVa}H~yLsekkaitHQdn)svJN3LVCXM4@T)EH zugzfntV+lugYHO!O7;%=Qp;Gy=vhPM-{^ThH;98D$`YDKub#-3J0bd=opFtyrwH%z zTiZ3E#q>+1&jS&seFwDZB^RNa5BR?sWm zV)}xN405NWJ1tdY58+W<@TSm^xnPO235r@cI?(Rl?RkHg=Hr?px|m$MU01rwJhSX6 zL9U^;bQ6x_1MWbewqJL`DD5RbTzxg4{m&c)-XKkl|JmbN<_Djyue!y~8 zWnSGS(w@wrTYZJ$-KmQ$R6wMfFM7Poxm5#)SF71Yg8k`5 z3z9W+F02)f^tu4Yn3&inqfFKc4g(7`)`h{azgw)F8WO2tmH=tXgB<;+bJ4dPQU3Rb zBx5h?W`6Vj;@?=6Q4@yee*q!h z!=~lEq*Ri*+pIT@%7}}*@8u)9<3x%)*f{K;EcIVr(bqh$=@}R39fLmjK-YO^3v`?Gc-$49I;9px;?i1qErjH)$;tnX}f8vW?rO8*`X`Bap60Qcah z*4<$L4loi0W?g-2>#|;-_Ie}T#hjsEuGD7K%unigP77^tm^x` zHD7Q+9=mSVzzDMf%W=c0tl4h53+lrO!*5~$Q(4DLMDxfS>ZLsI<-_?cQCW`lh`Nu7 zO2s|-mxlh9%TJOAOOaj6-iL`;tY+^bs@NWnzs$Vlx3xa~8FNuT_o6)04xV;q`7-U7 z99KH_R+qMr>#NIfS*~%;uK&$2Mzn% z*27(v^S-Ws23sLCnI!1B7OE4E*9<-C7)QFzu|(m}>&f9EZ? z6!6>RZ7+I%7^%th_2=1J*~wW$cjD&i$K>rw*4;`~y3CZ0;Q(*N4U6HsRTSt0v5tui zM0Jr9w{Fmg@Fy%F9!FA#^ZDqEanr8dK2f?-u3f7=6tAlR!2^L%F8)*X^eq+5FW29r zqng5;f-S`dTkfxDM6@JqEoL3l~N;j+%iymf2W*#v+kLjnJam{ST=G z6z&2CMBspeZ22W*v8mGJ=D5HgbqNS?c_I^ZO(t4(=mmm;WnCq3hODr)ZB5ROn=?Upx5AE=!*unKG1{(J^oIdE zOZo6FOQbK+#cx^K315z0T|774_Kb?cY1ryB07_kt+P$S1V{X`dKoM(A!TwbQZp7q* zaw93KAu{Xe`trk|+xugvN`zjnEwdsRh-tV1vq6nbq9?^nDz zBi%48Pyu|+qd3xNVdy8A|A@m%rN`iwp-f5GAOXPzSv(79&vBN^T?tN?&kn$q2EsS- zI%V9S3B+!~bzdpQ+==x=KG90h*`1`LGl*?0X7K+rL6@2i`dY_m=X%$R}X$6hY-S9r=~p@iktrI@`{9+Gd~rK zhDF4nA=qi_g}+_1?2psLVJ6hcPOV2lL}yl3&=bE^dl^KZhbYO2ic9b{@GB)7x)v-w zNRpdJL3nGH(b0i23PPeZMQUAW=TEm;B3xriOJj1F@^vz7sMHv?<5@L-p zP|RLYl7L_&6J2nrq>_{zhzI^?ArGGB2fQ;kGy8osUYr)d#GybSuRVl^&TGnrpO9?a ziiv;*wonfH>m|HzOuhSUs4UlM>=Do8B_i7aP)N#L6okpknL-BS!9^ zkV_i-1h}RX;)L@X{r&HC;f|XSe7$JMJD@VwDUR@z3D8`niT_xSSvAE zc>%!9MShL~DcU7!aaPy?_%~JwNyaqr2xyLA()6@1c#T^2o}}_s%ku!7PSq36J#;@< z@L*nohQ-JncBDk?*yn#GU@%V`IbE!Mx>&AWV==nNECst?0N(&y^!cd*T=Yq*1upu` z!GXT*Y+JQN@X7!io`{GFHt5g{s0NGDiqqyHidMaYMu1>tyHi>50f}?`gptx~qVa`i z*j4m4X#oX%|EsFe$gDplKIELmY3+C&!5M#|KNZ{jO&>=<46^O$kp5+4nb4*JDkW9S zz5}0gT_-0T)L9~(xnfYpSxYI>sAB}BDbEdFka~F+4A0IxB@CGt04*B-fYm-So;`!r zs4l1-xEwwX&$-%*7O|VLd zCbm!iqY}Wc$3)lDH|y>Vp?Aw)u}H9GdI2{R5tI?w?qTxx`Kb!hge5|&n-6i|T8!3R ziVA*3Ayq%0r4rQHcho>e3u@T*yJFkM%L1GZRufssOey;rzXCil;Ssnu1n$R?M?_H`d z3rw@;7h%ng~M~{JzO3j!<~kX_Btr26dW3 zmBF;x6ul59w|k%j($9nfF8p0#22C*kL#GbWAzF-@e^kbJK^f1Kv1PUOixn}BK%*77 z;2ig^PHDQomf@M2&%>fxgCusN26agOnx%?^&8wbPMKfIx1sgC;T$~R{eYcDo7H4J~e5VD=6G&x)KbM z#Lauap&cHLU_3ZSH4SXg(OaX?=f-gW+xVnP#6t5K#@4_Ij`^0u5`191zNIl(%oCHq zRjY4QE8%BL(QFzm?wPvDYXto49+?FM1T;-w=Rr88;^F#h?fusuo19NLjQ|7iB58-X z_PwK-+9}wWeWT6m)8NpnAT0fM=7cjA{1ybGZ>rKVz2F8*NEi5b4*a+`PYoQ+HaAVG z1w1x+q&J_XoqPm9t6DTqNbq(Xz1K?JLMZ7ocxn(q7n6QS+8?X;>t)Z4g{*Z@!{(5* z>gQ0)6|PpZ!2@QYdfUuM))p~vyMvIh{vWa}dtWdLuVQqR+(BihvBsS~$Ps4F!%Z=3 zo7V|}&e`eV@yw`p;8n)$jiPQiBGQ!E2XaBD7*0^phlsJs(%>NLUF}^~fT^J6es3RU zL!-QJo49FRUcj04gON{PWf{lVj6~V};oec}<7S4UX7AsCVfN|G zvKil#(_{7hKxHp#rR-AX-l>?uR>AJDl=mh~jswuL1@GbB{8PKuZ!R)@G8dOpkUTp= zTA(g$*3M){^(353(DbNy0e{)GN!Tv3T+#dP$Mxc&qWKJqPi2ndOrLXrk5k&+7xXU! z4A}BgqB47OIULod~Cv|fU^013AzqylhfhHo~BIB-NQunh_WBFgB%rBEX!!?u<$GB(TH9?rdmXGTB7h3P{^ zhHq+yl{_;X$d2fz8u5)s`fO>iH+PNlIR(95ExMAhj}@&MRd~NTlX)tC&vKR0mP`9RLVATG z)Qz`SZjsM@Y(QWZdu~l(z)j$ z^EXSl`EmVIE@QX$^VMSgVa@e?Qr*I;Z4+;@e$)2vfL5=gu0g%lAnL8!kr3**y4Z}k zzin+{?T!=(*}|xizoms(D+VSuBrPwdv?GvKW~*Mr%Mz3GVXU@5g&^#XgoMD=dsF&K z6LN&1T`jM9Uo6KNZc4(9jMoVgek01?ukLxiF9goLa)h@~_iI`Bw-#gwLpAhRaGUdo zitT#Ol?agFjn;*_6EM zB`orcKmJ!QmptwJzsJNol)6`mz2zZszT4aoR3}1K;4JW|>ZT+vw{F(^LA24782Y#$ zb zPp<-8WmYEc9^8sO#^%$#vpZLxw}n`Ly|qor)*vkSDHYZMG%45@m6A*hZPXWsI|N4zzI}_%?!g2FMM9}F80oeB^ z0k9#kB{kE>ttB*AM(t7l+aqPC@^QZs@1JII6)fJKc{JW~Odc#Hs7!uHNHB|!4#$mt zlXfe!^5n?<_)f`_euHpP@oDFL@16TNq<9h{@rasZsLbQR?u*-{=#eG=uFwzHeYg5! zZ?Kj9R#pwe^1X-1!@>FByTiCS4?wjjbv0(X*UexnzS(J;_~xk&$ZT!;lht_BcT|YR z@cL)^6ILx+t%gnFj=~6jO@M$jGHUYGeDyi@t`9c5Ge^sJ5=xow}r~ zs=iCdOeL|8jC>;NcLnbGZ(|w8xk{(pQ?1rYk^y{(OB+U->$w7==bq~N@<67UWCL!4 z^*~p!P>pX{$xhx;{-RG<^e(siZrLL4$&dW4aCpqG?jDMar$5q#g(U3HZ z){u0(o&Ai?f1m!EQjM-TD&Z8KkR zn;MGBXp|~zsQ++%CoL*iay3^ZIJi8Urm6KDV!?qXu^&dTI3J)&OW^^RNM3oYLdKGg zeyJ)|?6$iufwZ?afy6$YY}dwgg|E#?5|`1B74*TEgRrq=_L3IZXm-e6RIJEeZ$}TZ z8EqS_>T>SNFE45@ztdcY(7NFmx}AI`CYU{s`Y7P`Tg#FQ2~{m>B6ld|@z=Mzv{t4c z4aaqkMm2Yy;@ID7aDgb{93h>}{Hy4mU>aIt)F{~}!fT*2nB|4oo|G1a1I*>RX$l86 z>MAyVI5D^03_J2SJlx3;#0i<4SEfPL>_uj=+Em{Z2atNOyVL{1h%Bh%z?Mqjxc{#0}4+TQ;L_wAc(a0PNB&p=%NF0J$ z%o{;NBSbuU06rDgXFH|UXH#MrmhH$FX!K$!7pepzanZ=58wgv07 zf5|i!LgCQ}mWoECqE)D(!;%Ue{ktKyj*x5l6NkbDfSceX>weDwzngX|)gMhHbistf z0e?UZRu6`Gbc(hBlK|s_DV4#t9z)R^-7EJ@fjbc%t2gQt;T@e0`1!kuafDrMn851< zZm>xDDk_Z18u_kPVBmaiIX%`Jo_2pV2rQT8E05V%8SB@aR*p$D7b zG|uCk3Nf=GU9G{Oz+>fc_5)aiUG#IybXb%rqHSew2}>vT=Y6jc|JfG;AI!{222YkN zI*BeuL877o-a^+D?w+I=g~pgl9~??Z+*K@i=UzTtp&E&20FoN#FbqOxgPcL?v6uxq z3NA7V%2uNG5e!TW;x*^(Fl+f!hsh0vO8Xb|GsfxP@WLAyVA~QIL|S8EkC~OH8divjeW8xA zDPbKgo&EL-e^L9pcBXL<@JqdGLLwD05P23D<$^~+5sXPVO&u}$xRNF$CKi>NdW%Pq z+q3>b9ekpULck3QI~Cb~?1G6ogaSi|MXe1Ep_)xx(VK#EDvSoQ;Z1LWp8Z@%N;w;B z+rcJmm~gdOv)^z}MurLIpY2jCi>zKTBBNN5K3km$^1kIfJVG_*hYAY-7M8|#q*5Z4 zHVAq4hzM*eN(Asq{sT-NZen8SA;tkcu(0-lnnqy7i2ckOERYdG%;`2YNwBd~j7gsj z$w8+VE+O9(l^prLtK@?#nRh?ZK5sPgOWIU+(B@HRN2QS9BzBlNUw|d2?-aZ#TvNF4 z*1%Q@eSQywzUDZ9g`1C7GE0X=s3v++C7Tq_$B^e0q@duM=WJUI3>@1wqgRGgw)k2C z4rn?sKUqoPJTRSE;c4pEB$n*n~?G7=Uh zL>A-O-lDu2)yZHeUX82N!NG(eHA;C?R4FFV02w$fo|qz$jd(D*t|$~l;5jCg?Ph}j zO!ILyiVEb{lP2KbbI?X%BnGMEQTbtV&)Ve*gki+CU>`u!MivvDB!kICYiBMXf)TTd zx1guQf=NOk%gFG8q2Qupt6PN)9Lpu4$1)2&vuLoGMfb|Hd_KgDoi^oV=Y0e4$;Yaf zve<^S90iV+LX`RK@72Yj#Yp7GcSutzWGI*(u+Lh=0YH>7LtNRgH~>Q;k* zO1T~t@G<)#tRJ(|j?3-JNOrx27fcKGT}>?0pJ;l3R@+R{+l)r*7ZY`ewU>5^oHj+J zYV`*(QHltQGz)DsgilUGrCtCG#oK&Ubuzi=cU0gxV8U@Y6TsHmMjS-()^f20kKk2m~HdqXImgdPr*5b5sM49V#l77 z#Xs_HCx`ph&M{1OO`GPts|gdhZJket^#(IA;JLBR-OSWs0W6qvoUzerWSH<2-RDC@ zBu2p}HZ~QZLWBuzBiSN=1_ow4ZUh|qGhrMfPWZHw%3pz(q9?}xg#eQ~nojRJR=F8B zqRl>xfR>xXi~TkVCQ zK&!R^P}Y{i)>6BGh!B=c;ciX^26p_>4(u$RdA7Effq@-zGM`RBL&|!7UZfTXDUh{I z?C=iE|B~zAZ%0bP7!jt7;F8JN1wDYH1tHU~9BU+O>{vDduou{2H__-RIc-e98-S&( zE1X6|2w99UPlv~5^C~VfgoQ&gD*Y-H4-kD)dU%1&cAcp$LkAxC#hBW-Yfy{X+(*$4Q>cd*$M36%}gq^2x@HXFMwg=4+0p%Wb<*B zSNbV`kijkvhb1!-)gQELq>GvWzrv>518UQWP*7T}=#&#_&Ler2`Z;`!+AN=c0g!`T zB||dEF^q!}9%m7N*n#eqXiEPT1)-Z3Y`>tu>vb`2y*cVmH3>GiV=0S%92i1-i-`70 zdiV|p@J9im=?I`E;k$sNLFXr4i?>m^gW~>~5_Co9mqoKxXPi(k#I^E2Xw)(k84rHm z#TKI)y3>Gt!Q zaaM%xKDFLllluzu93_eW4V%mTqzxgvyHOT>+8G5Ld=!{&Fmp6?J`CKQtnFydG2{lu z!R<_Y;^UA;KDbFFG27C~qi{}=zaR}7j%0}{#0f^%&>lMS{1HCzc|J#{(TqjSt!6*e zK@gdgC%a1rRXAAK99j?i!jvZdTizv+thia-o!L3DRFr$YfgX#|#okkW zZc)1FLFf>{E-HPnYr3; z%iGxGQ*3pWkEr;JtZ%`Lo7B&m7v*GD)H$g!yw{7EZD{_+N`e~~7#L7}t3zq+RMY*G zwQrb)gB4vhMSg-~-%BDyr%qWezA%*5{{G{^m$Y;DNr1ID0LAo*X zTPXx6mFeyMo)e#h;x`)^OVs*?0eRPqm2r2SR>x@V#f{J2dRbZX;ryh z!S^11;sih6C;OIFeCKJ+`(8IQYR$F$8TH?&b$(neS}wmcZ>ctVys`M!x#f~vUN?GLpkbZ@3}11 z%64{NvE-?J8do+ijS*%g?cJU&aBhd`YXTJ(&rt7#zglnKs>O9u>>1BUxStZ0?$KDtt@FEylCq3)d< zCB0=?$yf42uskW%DtVu|n(CK$!8EVbp6`ly)W~v?S6O1^BQM?De-q2P#t0wIIs=TO z1d+S)ouahA7jva@NoOQMQFKRaHvxNnuaaWspEW<0uc?wb9>&a1yB6g?TGW4R zDCXLM{wn(gWPR86~q6LfjUv9jjsy0(udtR}^{YN{3&wi*Onc?GarbBw|hnaUpT;qNEpO69S7DF9i#kIH) zE#{&s^@(1!n@~GV2w{SnC+6$kwXe+)?o0pO2_d|9qj5a-mdT$&nF`hpTNLOnvw1#O zhN|41r#73Ch{2&7rl``*9vfc{@P4U(J)jine9c$%8J%2EyUzSHW}m7bXL22msPY39 z5`RSA*RE1VuaEX0-M(%DdJW7n3-&)MQ`?R&3lW6}B@)<@g(qT|P%giwa7&^t=r{*Dy=p?YoBy<79ZpO!W-X|_fv9bCPpa3uO_%h$|~w4kL!o76wIf0fQ9ujUiGnFC7SiR z-rrS)pR*dR%;Q8ecP5m~&(e7uqzP=)l6@zp5Nj$X5nC!IQ$%zXb=T~SOZ`f-Y7eXr zG%oQ4iM9}z=%ZdUUg?=i+8?-yJMO!Q=ltIh(W8;hy79I7hh$=jCQqxvN}7dPHjh~CZyr{<0VGqd$11K5nmgCpPa)^i4e z;-)uC+~kq>DG;W|%eN(xCG}o#52lIR{>=2|CsYA+#)O&vfa(1aEV5(tn({=pNf&4X z7*pDtGo#!ZlR5u1o%#^iF`7MBLEK z|MO6GoB>aMe=kFAvpcP)dnW4S8(AJExutiBq_oF}y>E!@!}n?^r>UXsp(X(lKqMzq8njiq7UY71BYi;)zOyc%3wS*Jd&DcD2U0 zRaw?c@2O1O`*!1g@;d7#hQBDB0&UA2Ucw2tUg##YZy7#s{cDh!enGA6cVw}|x(>o4 zm%D-zOYfU~8VNdOS#0XQ-2Cb9aRJwNZ4W1XKpR)tzK2{0fu)ehi=63n`&$PV0y)~r zV3%OZyx^6bqQTa?!2{7J??+H9>G5jP^C>^M<)-CnBeJPa#XPv~h|(G{73+l5^=k z1p+fbrJPFXs%C{A7~fDx^3eH;KMBJ&UW-3QWTtiAR4BvQSZ9-0TBMzU5`FPSlSpu4 z_N9cQO_KkR(ngTL?-`Z50)C7Juy}Vf)u{D&!E@hEw<>)9e_V>ottCHNOartNm=1>% z$!^ib&ouG8kQtmVfFYWJVmiGGnYB2I;>}D3INiC8Z}vXor`XW7UQzpp&vv&mY_Rvb z4DynObn=ppVMJ4z523qFW@twe+Lg`4-J8QrK_S_Bp7Q3u`3DmS9g3JRYCfcdE`kNJ zWgCke-j!6=3`}rs7>j4mFIjCq|A1<~AUGhcYWqcI0R0X4Vv3ZvUH^o0{03LP$?BJc z(H*{ix!AL0?u2s%k?%$q`Pp=v0QIT&XkZ1{%iFi~0%ZRXJO%~Ox1mA5FVD=(p0lq= zBu(0wuyr92@Gk9 z?x&!F8cqt>m5)qqWq)Fm{CxGj{nX#3aa4&)ANna3qxjp#2XW2Izw(Gpm3?N00MGn& zMc3{BVeKvBqWb!Ne>xH(FT0*)*q+#eziJ_5}ZULo{Zb4c?x{)s7tnqi< z_jR5B|30tRd2pUE>@|D#T6@*(^_lPbyu;P~er*kYF_ZDbfeN??yRu;sHsv-nMAXL5g^3d$>S zC$bqm^Jss>*J=}xz}F7HJ}2|X%J@|vGcF?w&G5Ha2?})IqFlCzEUUZ+!KDdS5kZpRNDfn77>Y6KVGEr@V(G>I=kIp#=W&g-d=ZyeeIVGyoVV_e~#an?ew`p z5ZrEuj+vMHyd7B|Mz<>VGHELPFJ2w4K`0XXTH7QYYYm8w@rgIYPyN_bjUGjnLC{2P95w`wY3&YH1$E7hjF4V zRmmNSlfI=s(}AAuYwR4}*_?)tz1aG3L(O@9qKi%TAUtp-Jm4=)@9FI8$vLgY;_HL< z0{`;@{W6QPM)?(wFO_Il>f%?{=PiF+3?EG72R|!wGh`Vioq78WiVf+}vhPVlvTdw$ zx=AaObQeZ%*SjqSnRQ-dPn~@gN`BTO5&dhe8LC=YiaB_YB=BXr*jz{kb<%9_KG|zt z&-1qI^(tIiUw@>WX4u$7>|yiFSIwX@Z@ui(-U3svh;jZsiP8bw;gQu@bN4{+hVdm= zU8apoGx50G$ckMr@og(jirFhT$UE0a1&Ra1=?SS6``#Ac;0yX(&O~`x`)4f+v29hP zE`HhLCtfM!rfy%QkD5-hRvZXiRj9|fco;v9RV_@Ogz~T|Xtl{&HIOH0jsM9OAFB)5 zLSwHgp&UKg|K7DynM*T%?w z(fSu7rJ11evx6p+o9@OhnR#M%?bQoUzRV1L3R@GG$<)%G$$2KLyP-LH6jw4t)9gfD zOuGKvrKyOVjNZGF2HI9u|0PVhjHqAe(7q{wh=LdzM$|0Lwc+DS+x|p_g$lXM`?=kH zeBo)4s>yrPi>8U;Gnp+fu{-SdCN)sASHU^=MBhje4xzut3Gf?bVu<|^|96;TVZw-7 zHy38#k!NH}hk=NZTY)tm8ea^VCIfc3j6h8m%6!xDm7uj=fIr5!_rC-y?}jAIUf4?s zKc~hS$PE0MGdxG_R9^f}WAbv>a*ae#p>JRlPAZsQpAnwc)i7~M26KsSVW`fNi?ir% zYz~pGwweLrf=#yxZQ=fLba4FO%7yXiG!s~QS=1B^2C|TT=gbszdGYFTjDEA# zjLYKaZ>mh5lZeu=6=}Cenw?y-zNa~zN~h>-{J&3Fh<*n~lJXNh;WK+fRT zc7g9XuCK0Z^wS-ze{AS3VB8vW&eOGW@JH?Uv3z(t6dM4^A$_o&E1Lc?;Pk#Jtwu)P8}S?ljR5cnyo^os9anPk3hp#$0|y z8%2ny0fY^9qB!6dD#HpQho;#X0O_&b?v@0@-$zxZ14Oq75PpD`iJ_4}5}9D}X;Wo5 zkD|s$rW3(CTTdNc1lm{1S%omnZf>ed8S4YH4eHsHq*_=EXdLYu9@i*$8sd~({UBiG z;SlpmU-F}V9mWXPuUxNigqI)nz41y-kiR$-0#gRD2A1!Ik~3xKs~^$+gL?USHre&n zY~G_27U&E-F};i$x$5ih6A1CIRHSHezU!|`4@ovDJbKv|&-o;Q!#?_v>Fe(SS-*?G zmh_n^+Xc`tB#s6~- zrT+g7hcbzdB{(PM+^Xg&q+10A4HgIarEnU=Zn0NH(HQlPS^WW}Ub8Iu4tN<7$_-6A zLnButzSL-|{je99GvjFoJx=vG8=(P@L$BF)dKkS=0Y1PkzlsITjEs08w$EVwDBMLCq1k#JGJ>Gs6HpN_!@N6jX*}JrK~VnK=>+HN$|EQ8=;DISH-o z%!-KLd$xH^E$3eCnOe*#8YHka={_Sjc!H=cgHM1|iHk}!5SSHnj!{T9OOlv14%!hU zrTJ&&Ci8=MGyKWt32d_@);yyDO@;{ia*P$mFv9709~VWwJudkGkotm5=AaHXkA zc|XCvU3ppriEQU+e=3V>zOkj5iaV&9bhc@i9S}|#{v<6h%lt^Syq~Kus~;8LzowXa z=;g{hm(%-%XU`a2bIFhe$RM^cFQiuHxsU0os}G1_QJbbKx{~wXD%7L}9y#<@RK5U1 zm&f2htzU96*nwcN94S;Bgf{XLDL1Qh6xXPbJu$OGD0%*091djOHMP(Z+#t0L}&Bly)Ghm63sbR@eEv5-`#j)|8zzu{7n32Z6a+6F$%k88lqup7{K? zfa9&W7@3h=S@dD}K@yNG5eeMnhsa3$U?Gk+J8#(f zUx5fofIfk}yxlkY8z@=Tq+9Xdagr=6mQVg8PSS)MOxa|FQXI7)fRhUr75SqV4fv2O zi2jqybQvD@U3BjOurNND3wBzOlC*IHW5$uAw>mb5o9?x@W)1J-=h5l|(6oF-3Wz8O zNRHXWe-8p8U;GV-6xAyM%@>;emH`ArV&ivpS|KS8y_JInM6&!1h%^K@8S%Uj&|rrX zqn37O(~3E?mdFL(g%-a7{o)NFE6>qE+9h)si53Wm6qmr1lzInG>Q}^$E&S&%+?Npqh5Cs)tc^=C)LiLzAl0hFdPS?Q4!HlZwlt z>V^o1&!<@Lb<}w@(4yL?<ZkbW-Mbke=qnP))*{qzo7OxS1$vHf`^WwEJ6Q47su>D{&MXWex(!d~RQ7t~Y zc$8i9lXnYu<+gZ~u7ix~i%49dnOv&23WJ`5rLURmXGqUoCtKHHTD^Be*iYWu#ccW5 z#i`T8uB~>N=XNFbl1dsw^Di#Ab0VDmjv?;&MwDpSKPrD^^aU%_U${_E*mhg@E;&-M zWap4sS??o3TB74@FL9Ss6bY{1bKI%GmIX0tN;FN*_FAs@~4NFFT_NnkanUH&nCu*af)=gNZP!7>c)G5 zTQ$3e2%X>2ET4V(79J5LDB&^Aa*|+P#SFvEH%I)Rj8lv)s-ILnMnYAc7gq2aqk{Fy zToN>FTLsV?V1;YTWzJA9Pv^;AheV4-$AnPnzPcX{SY|@?<9*>w)&5lDAf?E|V zv_*<2dS<&9QSYRCFVXLAzaH}ALk?Y+UEp)MB9v4A{oExw!^=NueY_ZH?Yp1WaB~Xd zU!xn1@t=-EN#kaJz+dQwME7|skuFF2eoHU##6P|Ay7|KBzF6k;;98aXX%xbLa%>@f zDaB9ncv44KD}0&N)I(0NVczTDu|vhRz@x$0bVxqVBON@aX8!i3c!TYZp0P3-s;!jq zfhed!w!;ADj<^8Zb@Q92o+KIJnm4J*cIML3eQw!tvq8d|6e#-l+>SFI)w#u@ly*(Y zKNHp*+RTSKZI!7OgL>D{4x1sm3wzSVl{C()O-7-_VvrwUJuUO-+z=p z;3dBPwYQt5`}J`)N^!vo{;4?+t)UqUGsNxgwr~r=e_b+d!H~t7qb8BLXa*bsyt!eH z0ILM{wJAZ#@02x5f6TZ&Gh#Y=6HaWJ=@L0HcTEL}D{jxc-|{LlbJ_aKd43%7Kj=sEnCGg!KvUN1Thd;nEl)cMg05|L_yXKD@X`M4Gab+ zXfI6WTay18Eq;Ij6}8?9wgFZ|1)+PiRjhmEwCSZ)fcpe=EkhzqN$okclEA|6kB!1Y z%ga=>f*AC{MbsMS%=$PuOFd`%5;`;|oE$nYIbvNlEg!Do4@UUSYmD zZ3fQ)?9;T13^Fs3L=i!Z{!;`<1(J0dSku^m|?`(n?> zg?PJF43syr3!wbr8ia>$lXTZ#B@37S8@s515A$S9GCb*FTP(aNob7_%*y(cK~kkAfuNL^OkqL7F8yz#TDiT1?6;)<5qW(*!&~&zIsLmH{AI%$4&J;C9_gJ8n5Qp2PD;}qGM3ijvVjlRbG3w}%nPLMqAYTy~{ z#2p7_4(aUyOR7~U2T3q<$m|5MbmAxLY_fa?07^mlc9_MP+6rJGA0fJuTP>+u=M5Zcu228Qxp;G0b z-LVjw&<6H)L?}foA;=OY5GU~Fb${bg0VoG+COlNl=hRn){vR#B@vQ;+BR`+PxZGGE zKeWSNiVR|d6G4|}DQkxfI+{El-cn$8NJ^F>%pNk8MVZ#CH(Ei35PgzanA0XCJRLVi zs(etR3Q?*ng!QAPY<^l`F!RelmYv9AQ3N$C&H&>mR0tl!U#fosYzkbPCD6In0p(G~ z7nwc{h6kYk-U6Hv-EpHD&DJBnivwf=B>Q}x39Q!g$pON`Hhf1#b|jn*KZ*xeh%PoA z_7N3DupoLy1M}~zOSMvPMHAcmH`4+G>?&ghbdwBQdEZ)uMIA|5kz zhE%snxL0IkYZfDM2Sbb4UaVif}dV|GvPEV{Pj*xNM;WOV!`vTrU9(qqRZ$%Qx`ICE22$q(x^k*uMU|?mR~2g!5IG`cTo)K)bR_+u*2TMeArb zRbIsp0EMq5Q{|k0*&Ez#fBBD(0PID`)JK)z zfJA60^e_K$+vQaR;6H}ygV{L7Gm=<%z5ECnFCw4X64OWt+;*hiYtYF2TcEc#Air=S zSZ5R9Byap^(fpsznA|+i>0<-4xp@kKGv@c1I0y{A;m&1-j4lb#99tM-tk}pzS@L7s zO}1df=j7=OFdQM8;BoX)iRG`cgK0YGF|9KJ;8e81&>L9)pf?O*=nW>}!d^oDe04b( zdShD?Ab$Qu-uN%v_`@{|oid!V%TP=_mbbl*va3{5St)lu62)49s6&mS}*M`2lVP zFkVV3U}KuQ2{fjw{t2x!!Tu}gS~v+ zNW)++-?r{Df4SRQo@ECcn9#(!nQo%9NnWQYl80vN9>cx^n8kXODswH#4e7B#C_8_| z6B3y*!ARKq&h>!R5~IQr()iJmP*t{!#*#2Y$CDQ_HT?9yjWi7p(vFt#$Ev?y-ZWmD zz>%^Hy$$QVexe|mRn>Qx;BS=KmXSl}6g8*%%Kue=zyz(Lm^R{h#$|C^-qJ!=j-8I7 zrJnBmp@^e*rLCJE*#0t-1G&vGg4`ONZT^|uscL_VV7OFh)H;OUCMn5paqf%iuntl2 z5ERDm{_CS@AbO`FCaSsAgXnO+tup+}rv2=}*YBavd+o;-bm){~%4zr~-h^n}%w_w- z{Uzk8o6ArvkVBB*ezL6<`lF^9VAlY8z%7`GmgeRRN<$^Zii^Kk;)4 z1_MvWO5bl<`xVU-9&2twSeq5BW1Pdb?P0y2X}*YzLa);@sNA5)A1wa?!!_ub!Yevklxj82rek2tEAAO}(SALz zGP2V)c$`5lD9(0ddCQS`<7-s&$I;Mkr`8}!sO#jq<+HQ>Y3=-$0 zDbm~GcUBLq{dH^TS_`o{MR-9rGIp9sGXQP%9R23ddBIt7qMU!u4w3!o0qWGS1nKmi zg(agIqAhClYg)(XOo`Wx`ZEdVS3kRptvR*3*6Q2qh5IM14ULVJ>m0=sZRZ=Fj{kBI z`sv(e@$fU*!P2{jeBgv`0Y-VX;i=ysxUL)bW{YqDn+hle2o9tg+6u?91 z;X`u|h5+QofUniW;WzKp?H}ffdOJ5Q40?B)@u9d<{R+yY&OU~l?)Mwg?%#ghZCmdA zxhmr*r^1fO-d6=Wb2!<=L5i;WjHbPBK zV$|*ztL~iA(U>U^^MknJ(b=IZRsaby{M=@`yY-OHKdy2m$!Q`ClKQuWLRd9&6^G)#Dd^v!R@~&?@$`DqX+(f=eo* zE5L>s88rPfL-jp9rP5Ien!RpUlB?IlyQ?0bU3}u4aT4VdaC503UV?i$S~~}U{pnkX zZrHpV)Z5}5&s-J(aS*(}&#Mm3EEnGGUF7ySG?<4?bU0SWj`E}`Sdt7cWKpJ*#Rxcv zSk8T^eV0vsJuiy5m;%I@J^}p;y+I+EU_9 z@r2ow03+%7#`90Y*|EuU3W!m^;Xlq7!R(S8p7PMV;{^o4BV# zFhkOAyTFaHw_)}u<5W0X{k>tcXh$ahE0pZO$g9OuHZ4>Si(`3BXc=-)e2(3&vN#@$Bujkr_6!Jmyz2%=KfgGujU`i`R|797x+>nJ+H#;_UXMCrWhj1`&GKh}nJc#(J8H^JHT&$D?-N zrAb8L^7JkvzY-$Bb_%(;j=Jzf>^xytx;rlAbllp$9j&|n3TX@pK4%Y{W)0IC%g+1w zaAL%Q3bO|i{&v3XD^;5r28HO@@3|*+r{6$NThs=}d?mCMD913DNn`ceiEGveNF&5RAvac5}Yje+gB$kc1(#*J6c}s7& z^ADZX%U-=scwvS_f@>5%K!0A*wd_v%psc12+Y@@QI+L;NFh$_oJTFdgVsw0S(A&#w z;rO;`#KDDmCkf)1ua-DHsDo3H)l#R`vj7oYx;x)&ci6tcnj&5@Zu}sddijRu>|!K*o$k!?t`kzvW**6PyZ7doD~1 zQ3(F{9K;Doj+>2B-;&4kHM4Ew(O5^yql5p=Q4<%}6yy2!h%ZDWq`vPb;R{k*V^8n9 z`vn#VAvcUAJZURQx)`A&^8pxJcX4uU=A+CG+++6MKk{SNFVowOTvk|gq6hFWWPgk* z&{a!n#puw~Na|!YG$3GnLEGPrA7rciCfSZTcJ7!eSiKops7>R9$W^6C?qwP;v3cr2uVPX%wl{6 z4u5@E(~DbruvOAZ6K5FN^+^yR0%|FovWvViI*x!8X#nDP#>B#L01eLz)Ol2(+F{#C zh)|#kXBWUAJ&*Z~aF{`Q5woArjz-$R-z`apnnSW5V-qjIf~H6*myWqwr;33PkubH< z7-Jv+*_XZsN$I+rXqe#zM9V6WKp4*Q>O;df1m^}MTz}q}hvx~19z|GsI&TB2QI1=U z65#U^gymrea1O|X;kE%QYQ_Oggg6{Ek_H%<%Z-GHvXjr`XGn zgU_Rxy`~1I5PevHokFLK1531i9Kb*rj$xN9NL_&%X$uKJ{_gd$sRKb)hWb=`olBBW zwzhzQP!U6CIItOR!WAwO<1?JB%om~-aLOd^Q;t*&94wPTD^UAylTwl2fm~GNU|FZD z5d>W5`dbO>+QL$I)`M__FmY7r^7}!7M*N*Y{k?Uf`GhGda}}XhO$e7h3g_HO00*%W zM*PN*!bO7IO;C>PZ$Thwz=aG)ihxP3Wz201AC6H3Cn@6}p#)maX^WnZ0uBqsvY;Pc zQfB=^4WxxH%WuoUk>-V^(4xX&O>{GYa^(>rz3{gTr_{B2(veov;nb-IXVt66iHr@G z4vr#_yY!5&+8T7=NNIzfAXuXAgn;TN-uXL`3*8jn%1V$1UxpDLo6{o?IkQtFj|g5VtwysAy z7*ia>a;YtHvf1(T-po#LV^1%CgSKjTI|M(f5z3WWBguR9f`HMSZ3T0k4R+c0{;=8; zmTWR+@8I3ji2I0h9KD$z@|+~vtOEh<5{&6{8YEDYH%TE$WAJ0+H}YuY*d7*$fxTTsF`>P#N%`YEVUk9_uiH&KZqZ(E)FrkI!g8K8_jmoV`|Z77a}R0V7!T_%+Ck zQL>4e{TTDY9{JS0gO|8z4Az7=ahkhFc2se@sr3g=W3FN=X+iz6U99=%B#^9@0l7jE$pTl_P`4seAG zcrfyxaJkS-X7zGTI0uDGU`eQbphO`j;JBM^kMv@*)4CqyFyt-uU7I^Om| zab9d?Sb-Y!D}UZkc7+}Af~U9^3}85fJ4cSY`t#~x&?CiywmB67U1kxfUI}zH)fdd5 zO^WP-ljz_^eWn9fQ9h=Peb>N)tVuY*b%r2o`196B<0B}*W#^hpr|976SlwIYAbW&T z@)^Db6H6e5ZJWQP6nrOgVSuHE0qh&d#xf+$;G1u?F%Cz)#4%>1B`fHk`7tAE;z0toQL0KF|p3!%R2C(~1g2KI4GVPtD5iWN*@a~daVGk;_pRgP-7u|VWtFmZ{> z#7Dt86LE4RD-sPyDK4xuQf8cT{t^ZP=dS+aPOiR;+7`T zjBsPrakz|7V>P)a@Ym3h4Gdlg>;uw+Qjf?xc=;TrVIx5eBLI;YDP;xLT<;>KvB?4~ zi4&A;HQ_B^=+a1ps0Jb8REC6ne#GYQWX)cg)=^a0)6~JM$In*Li<}+64$ISqFXtog zF&pg=9)bc=wp_k%JeU_=s)N!Yj2(ZMUXgr;kg^_3l7=P<>1IU>paZFcQm_#cq|~X$ zHj%$lf$KzQPiV13JI+QcHiCx{EXRq#%VTM~Y2E5!f>A#$0S$xKc#+B^VkZ9PdPSpg z$ku~?<*@*Sc?|bcS~;Vce}6od9)?;ew>bsaV){y*)rq|_^|qCDdf%{l;cMRh zp<|cjS30TrueA?kx%J(=XA^-_%R3J(e>RLh>*dIoolesBqjBT8hGP|;L+&TXAUCHu zx_iqsl#6T01QoxL;d6f89YzrD@*7oA{GMC+;{a*XvI@J`#}pkp-#C5gwi@+ruB}bP zsC`Cw%DH?wq?xTW!?1F2&AxC?&!Qs7jO84qmu&Zaw^>VubwQN=?wQKy_@3=aQFEnS zTj61ao6P~9u;c1GUdJ_&S8a>uE%Nt8oVOHz>IVj|8t#2UV#e1S)!aTOyd{*G8Iij? z8ydlJJYx%yP6^4>fcCuJz#guG-n0{&z}rI&I*3Ic-52LTZnhxyPEL*a9mFk22u9XW zlOEz&cx~u$53wx#5R|`{c%1o7@Ak_H-i-HS$Ckq18}|5cY{Hu3IXPkk&u-?w_wOug zL*=7A7QWw2Lpl0@Q3?jMvX58L*r%*J@nrCq{sWPl0X@5c9)3Ldge-MZt^iAh9mG+^(ygf!5G{3iRtBu^UL`86qBm zcm6y~oDL5G{J#Z>KUb6OSjBg##}Nm$d$SjN_S$!z7VG7NF>s$T`$BC7V|i{D8U0W&}{ad`{bdDWv;n47eMlJcYxFI**I2~O#JRd zxpK_3nyZF$A;-!4-Ib0kQ9&mr-lM%A&TkX#omMIbS32G}YUw)Wfgj!7jol{XC8O)+ z+dNU__dFZ-I!^H7X5KBmh>RNjDvtAhBUN9aQWP>%vt7;V9UC1jPED8pP6d&Fhu7>Z z{lY^+LH==71X=&KHCY!(LBD{6MrR2NYB4>I{V_0{>HR))){Kn2tc*ucYbHZ`I^C)+ zOMtx0$VZ|-d|FvbUfx-3YENk9>44nUyc45yqmfC5Zu>rd+xz~E1qn^-J+tiq!pfi4 z9uQx7M2QGjUym200({z+Y_uN28kC-mWORXzPN+GFYNoQsaQ<+?WIIb;BX8F#v$-{N zWr?@hXfe+=^JHR1GElE|WLI{p!&l&g=h72YWC5+tkbIUHr|>|$0q;}alTDxmunoo zMeOPzQf(@g%w4A=L*Zgs}Fw83@TDH`r=5D?70 zZHCgCn;U7_QnG2{pvCc!kG%-W6xDQM&^t$&+vPM&T!)JS*WT_Fq`s|{hQ!SQX z^n8S7#i@J8^``WBWy;95!}reSjnpnZI*Nt;4`s#Juuf<)UOcHDf_?EMi{x3E^T%h` zpZ3*`ZZhS)CbMT|^=-bkLKXRwrYgTbix?z*kmn`LvMzjXNIJ2*-)Q<{4mSd_7ls}? z)K*f(_eqz8AW=n}-gzth!`y>K`ht2e6SIG8S&?-_-MIxUja-$%^oo#@C zM2Cwa+oFg6XrX5QGSWvxAFDEhI{|qjy$>XLwbd;&UyziVUh7OCMpHQZ7Cqx6`^5GI z)0OZIiq|`LL(@1+198eXP2!?0Nb?wCyHCV)P)*7%TIJQuaV~W)xmz zGd^3jfX}b9zL(Xcz>wu-!K2(*ys?m?U8$QccO;~j{Dg%p?HPkZ=-eMIfI#Kq>{w$^|AYL>xOH?N<&Cgc^IEbvoPEBY{zm;o2$B;yxGz z-n+0>zu6qpwxp_i2ev{C?~!4I9hlyM3<*$Iif?gb zV^KEVZfqyL3Q4UFDO7FjQTMMNZ`3b2(&>mYRS<4d51V}cwF6K2 zjevjzPh;ct!`Sk_!yzEIj0Y*SQUC+970kn)bX;dqN1GR-4U})^42|P+HX#ikt3UkO z$8;9Ro^RXmSZvc8 zGg{n3Apc$aHzxx~S-sSVL-$wq3ZaE#2eZOYeg{A6E2PCw57j7Iz9ym`9hz~sx5b-(dfdvKUDTivFiWqAL0E$Y=r=} zIAD%YkU)yB{NQ@wrj=|xIBkazFgD zmXrU0YbNVsMvyr5_|e0I;abl6S^Ue`PBC%`Np7Y7hUK$`~dGtFt z0WpgzPc7)LmPG;6vchtVuptt69v`<%KSN|*u@qf>Y~T)>5u#TozX`a1xDM;qj`PxZ zEOF-|n44EqdI71HsV;mO6F2G=r6)m|7Zg0`Z7=u-^9zYxG=`TePSbB41*zyGf|H<7iROy2_60dJNaEUs(i{c;bS%^$z-;o+jyI+Z+OsYlecF3JM_hsH7)fq*Ig_uvey{G z=klpdVzRGUZDuBUeJ3WPv&X5N_a~d>cjLFU#eRNzqb|VXg`}GBBQTmW0{_T>g6SkX zd%#zn_usi3#a`?Qr$b0pIv}_SGa?l`Zbx+OK~%M&16Nit>c=Ht zVHBKiJCx8W?p3@8|I6VB06|JGIZhXinAG)2k{Ve5V4>Jxu;B zIzUoG=mC-%#XqWB?@FyPha_Kc$x~Tup!-G8j*Da9s4_)07jz&vCq9;5hZJDCyasg155j1H~?lF}MB{cHXPeBYy-FO(H-O&oEY>+Nh)UtXmt!hbLk9^!( z9^$GXWE>8l`d}^*=YK;GmVYpeNA|Gb4o^lvJsy6mRsxe;e*aqn%OhhlGv{hU_$dd| zy4XZjfkZZ=;ou7s1#(-V;6u^9;)Y;lt7RwDK{AL_#7k&}A`vP5vKL`=MM3uw^t73n z2(pnMQh;f}V+in5rWAAfY5bS3iKCzYJ+$}50u-_f!87{ zB$$hq5y)pMB(z{GS$LFzH9jvS8fd30X(Lu5odo`t&(BFFZHDwda69f}693bO%kVLaQB7y#xqM(JCnTf7MyI6E#b|H=$ zb4!JjQ97YS4ZL{EEU`^S1I5^a!}zn!c_)hPY^o+LkD@sbfAJ9+MbCKSn;x|-g1>SI zy@F@$!Md})eu*AbQS(U z$7Xwh0aMCax*+2)QCClaCOHcIO43@7u4a7jlW|Be<|a_ZxW_BRRPm)(jSUCXEDfEIL z=-k!tXrNcGU>=Z#NPR`kyhcMJDo1ugNv~Ooii@xDFRO(L9w0O3&ZfdID&>@E(Mi=7dP#7YXAf z*r5HG3|A2_J)-wN=wc8sRR4dvSnB_%i_s*K`CE3He&z&2n+@(6&_JChMqrvXa!y@* zJbDLjziDu=3J}sLP4=naEO8XV@8PWo5vUFH{LoG4s6oF2a@vX<_->L1;xWcCW-CSK%P;yDAm^1+#JWzT3E_u&HKofF{I0A8i*)<9@8Hacv@L;c8~+A+947ev{|LBj_xrzVvnfG z3XmHKe!2Ku-LI{dwfml)Q?>s=O}e^wy{eKhUZN0hlJGf3RDttL;!Z0LX(V(Xo?N1^ zbvqJ0{Q1J|lBCg_>0mHLd^XGS?vS@nJBd*I&hX)~`|_dYNALd6#|l*)LV|wQYe)BI zKXdNyET?ak=4yo`h~eR0lE*P_)) zV5Ny>l0C;Oy{1EfPsG9a=N>DrO40?}HgnMqs9`TmnG1g?mgT%!-8|vnO(>h}-$G;; zud$I*n|hnDCmZhK!L>P>*3JLBb{$LiASz_(uKycObE>Giy=j_tP>%Mb6|jx;@l zR$ZF1)mF{aS9ik4#;(eLLo104+Wf>vimnGg)p5~wG9kTz&ngOkw_; z!r>ZLWgq0XcdolbNPFLJAr%^VL!+ULK?$udm17wRjXr*MV@*U_)26NJ<^?PnR7cRU z+$wL)N-lBz_1_{lKWYap8H=Y)bIiI{YAX8Th{KDyJ0@>5i7Nsaatr%BPH93VqCzgdQ&;)UHV; z(#O6D-;c{N>t?m)y7{Deh4)52jmLs}lCUL>fE$`jOO#(cV?kYPci2J5Q^S+BdEZa`^MJGu~&GwwO$r2Nqv@>umqg*(=!~ zSh^wq@nZLpiu}*Fy7{l>L;&G1ZV*#$py-`3<;VFuN|)w{*%<5J}Oam_Oe zF+F>iTbxAXiZz>Wl*5vIg05WJE6N{DQ<$%y*YVbNE;`#Pxt6`Knsm}%=vEeHKGdg{ zl{VZ>P1m^6UAp#7_ZcNh8p~F!=-voxMg~yYW=!IL`fSxD5u$k8-Zoe=x8ia)i@P^{ zwGKT&r*V43ph-Oc=&Lu4Bgau>wdHHbWZEuUeTV#7^PsNvmqANMduZReN=NdzpXxfV zL;u;cS@LToUUGeU_C(d?QnnuwGoI>psuLqs4pu46L((zpld^mcDzYJ7OiK=JP@-_Y zC6R2FQm3p;s)gLB`}$Iz+^0~g?VkAfEcVqLLWa~N>w=DL%W>v}O(NGk#@EddIv&$%tjU*a;x?*@#7 z)&eFo#J94=ZO3fw*c*N>;bXcojJR80!a0(+V&8HEzy-p8I+=U~L~MH&dy(K1N)dd$q{6kli`8pzKQ(LQ2VAQxMuSP0w&eO*wttq0q~BgY|oxJ!NHjNNl% zGIPb+>$y{hSwG3sgnYeX_e1S8Z@I$>F|E|~72c>l8}Sgu?v^H-_x$>K(9>%3Mv`0i zem|iIE5_q{rtW_ID($j(CwqDRa-IaAO9HlLN-%w zb~)o7?zV=;B*e)fLO$p1de>n_u@Z*A&kEMBsyJAzUUo6c4F&8iWmW~3+1BN8?>SIk zH5VpWz6HM*Obw?#drmU+ynf~-ebBXzU%x=nzDM8onwkg8HgeVhBu-(<>O4}ZeTitv z0beGA7np`~EFaV=aISa$4j;9lw{f*87(Lakjheh@?PheX>tx#FfQh@ixV@*MsDqUx>V;`qI=(PD+-6xSlfDemqrMT)z-yKRBuR&;TS z7ca%#y|B1zao5G=PQSm;d+&Sy2+L%WOyr!CWHQfl&IcI(BDbRuX4S~wO84()tFrO) zg#Yd#ulQLvth9L&6NMMf@ASv@c3hM+#1bKUR(6JDOg4MROv6zl=1*)?!s6HBFN2Y_ z_A5Wr{-=vfP5MdkYa6c~gLH(6t&}Qx1)K;`7dG2$~pwP9Gq6Ck%aUqc4T-%!+ z)axuGBuG40Sle*C$EP*@_o=@h7bh5dEYv)ZW#F650t*;lP)2#&nTNf{X6xUj=$QML=FWn$YM36{#R3Ad%cQHpHEUm5?=zHU-Evil&qgXsE|tZz zAt_cPO%IJz2mA#wF6WbyxTgu1Wc2F_g^DiDOLu9h374{F$RVBQ6IR~qwPouz_8S9d zJ2@X-@d5=d$?$V{g#7GgynRbMD+ObK zr(InAK31EnInX0|;5`%q%~AV~=PERp83qkQ7nW=t2e%eF46+A#Y#P}+7$>i53_D)x zmmTgrw`2`pJf!996s@Te{C>0{j(EMNvr$O0A8RAqO2MvKrq!?0k&BTIWdRYm+YIgw?gm>^KJvuLr>1St!0)AN4pnkMcBkHKYwd{4Vfy1;+g3Lrz0dF}_z- z2KJGBxmzPUVnfP&J>NyG!Jo*ZD-JwyvJ1hj8Ql z)eJ@wYOaT2)?hQs!KHrqU0;DL`qXT!9bX>yzIQHOPD(EN&G2gbfHQfT!Ahj=XGW0^qDYBs`=m5eGk7U915QN&7iO*r%Va=cb9)gmd5EAv`S>!;xF z6h_D=f!pJG4`rP;%Evytz!du_CyHpvOb1$(!Rdf;rt;j!heohP`!;^g7>ZJo%NMJ$ zI=mP4*3&@Hh0jy4rw3%D^l{};IPpO#w(yR4{REnwb@0)3DQ1aU;A45pErz?O|6dmW z#@kS$*Fo1{Rn2Z)W#JG-C%W_;MH#|LiV-Td*heEC%9D>6x5_(Q`O@RXBvTwI%R@QJ zrXjxI?*P-Q3 z^X{onOPPTa(?`%~o)yk)7L63=h}7a6w&}_Q2q_=8s}^zrxN>TdV*owSo@PlYTNwZ* zrE~g`bh!Sc(0e#DdCr?Y^pc{tG}13|Ft{z+>t{;&3*k(67;?K+95LAS&rWR9_n&cG zb&KU)f$G=AuB7zrkLK8&)X%%2#AW)$9o1DHbzHZl6{#(2I+yM>@Hw6FH8r3d<=Aak z?Trja61TX4D^3Z>K$(8blc~lwvu-i|r$Y@1t!e}Ti*A+eH@=SDE_M(PeutwL79keP z(wPQa{ljL5@nyep@Fz=6q4^;LNb|~28;-KkHHlqyc8;Fw%8J|nYHQVBk-XFpj3U(7 z>*EKJ!VsJPFZrZg7cs&5Bv@#E$*y`2kA&xzWFBOrHy?1|!=_NwP`RN70bCESxHTVZ z|32iCKJ`V<`M|^4QNZF?RX=YC`NZpZ(yaVncUTEEs@X0hGecLn_fCZ7ccl#=9vr2P zQ-$3BlKaNh&nrVd@j0IIRZTZkJx<+DtJd>~o3I=0HB0nkK10qRo{-F!B_)rw+!LT{+D_Y*v|&{$5vtVE2Mg~YQBW=~fC zO!hP+G>1*<^k8Y9;@gPB+cJN-`jFw!TkrjS_m1BR_4d*w>XI4^MRi1^C*W-wfKju6 zteHR7U-%;zH9A4MhYs*A``?ZRq@44G&ud!;IM=lU&UJHsNNaj2{L%+RFIj!5xZ?ku2 zM=RFG(|zBu@J;VC5ig&z+}crxm#^<7Ni}dA?Y6!@3P6-h;x{1uzT4t{TDWO`hcxh( z0E1~?a;({PIjGD)y%v=H6hF<@nVI!%n&XF5?8~4nQ^^#bBaI=I=jr@V_9GWN$Acy@ z7560ntzE{yy&rdZMg4>&qf?Vn>pS>HKD*bKRTkhKXzS^GwX(ke_|UFBLM759*-B=- zG*)PwbXmh6(x2%3ed2+n>4h~bbe&r2QM>XfEu z)>V(1n=t%VZP$6OTBR!IMbqn#wG(&^uQs(zYEqgk2Q#!i8@h0vt;rTSCmMPyo-Uh` z9(?Baavy*bvO>6C=IoSacaJ~b$wn%ugzcFG?EINiShz{mxG6WHKooZN_wqUH-tGOb ze|Gv<`4&2Llu-%m-EO2$v)U8Vqw9h5zTr7OKlLKFn_}Sj>ffrxiPx|7zF!fw6lyKw zYGO*q(g|vPGoj#$^Q!}D67gRMgPPp$Y^AL~6)y<3y?DM?jAdV1rb zZ@!_GDX?}z(D?);`L{{y-CPLdJ|4=`| z>w;HtwO=f~H>qR+s9M(8&FcBS=kzuxC{C&7bk&bj7qVDRUf2Ha#*=J$K5){knwRdT ztk>2lE7MZDWvUjOH~%HSmzW@Xr90sr^S&+1(==R>9com^@| z37TL)tMMew9{uZ&)oE66dU{VZLH%#mDolAa;#6 z&o%C=jf-#&9J#LeY6#XTk9O7?wzZFlC3ziC{=Ry zPI^gfI|iIUmP>wl=oLbB{IzNwe|XipU;u27C6w_Kcl!_Ge_;Dv30Veba%nvG{BRopKU~gaNh!b& z=O6|+;Jy9>E}lz)^$nwu#^ObK6cxuSXM+*C;{2{1XM&DY=!?Y*>nk0vWC-v zcaHTbI#@((4{|9q1=#;#@DGY52(k$n;b&sj_WR3Fw>-#YfquG<0j+6A1>aGyKBxqv z+;ov^BA{P0v6i?47~}zL2In7E?p#^`uDK6D;rHGl%QF3o3d-39qMD+$+o&lqP*0MO zN%qrY1O7F1C_`dgRzlGV)>c}C!Bmxo-0HfZ7#7hNkMeyL`S)1argOY&Cdo@I1aXMH zkS@~*YZ8o7@HbijJw3t)h?u&A=@9-ThwXZF7uIAg;7b(fh0v@h?a|nM!T@8OAb@D# zItUXOqd#yVqFoJ=H5>0$IcSoU#mV))JF}2~ue=6thES5?UTXrv(tGd?K>X&ZdiCH= z)K1)$fNMkmlFJxjDp$PhvVcA&eiAKS6k9w}LdE~rI#c=!k0D$W%Um= zsfd2((0jl_i_MTyQ?n7}&MRlY8lu6`Z-R9VQ^&2L1SdA&GlQ^r-n)hk{=+3x(?r+n z^CNyw?2A$qA2+r64{%RY7kC?+DUrYp8-*pbY?iVb|M;YA2yy5jkFAu>4qP)2gA87Hien{Qb~!T$m7 z>0Cbt!SN{|Gy?olwaiy5QAi^R5PIA9<*wRFG z0XD&wh6kZk)c$#&1W=w}VS1o9f&q%ReH}7YXI1O#nBaIN!0MS|GB)=GkSq2`Jr`Kv zfXQ-+3BJ&!eAjGw6wT9E&9_XZFGuqjBDAojbjD==N)EWh&Dr_-4Fw==Kysx9Y({#@ z2x;&HH8B=1yYJf_K=**Z44SSSzNy%?0h`DR9KR0$3FWLs1_#xO5Q6_0;*b&l@dtb{ zYkmZnJA9=rrT(dymh?}6IY2j98~oHvLq{ozFkmX zjmQ?JFI^6L^Gf99cs+cxAQo$h%DnhVYyh+ZHg1Yn#m+Sdz;X(N``IH zSy+K`8fvGkoQ^FWJj9lj@7)JSey&%{D>yZNiP!y`dSi(pVV>4f_{Ch-6SKz*x5(=YH?zl%mSj3Gj<={^lAP_XCp}M$-L;L+vxTSE*vL64y|yf@ zy0+)mcuo6ebS~Gs?4-usue6Vk)ES>NeNxaKZA|uSAGpk{8Z|H|l;N2>Q@k<6PCA}L z>k!mxnyqn)9~NKI#m8O;xx79XLAht;bnWZyN-|rTwB|}b%|F<u9Ny34Y( zjfuD~lp>hP=$QYra8UfZQcANtY_0;C&9wC;Y!QjRdTr=jxItJ(6a9P#UpuuMXib|B{&HcM6wpL=lTm4cUH-$z`Jw;UPn?)d4P^psQLTjFCT&18s;^%&h<_n`(8n4S%PZ=WOSceYt$!QK)(=$c+66 zH|D*5MloVT6CX6w$XM|l1OJZLIYe=Y7f6cBjDN)s6;y%}iFMg%Iq}jWA6DP|2F$j-#GuIf~_(D{9at zh_TjVYhK5X_V7z|FJs5l=UNIp--z;e&!a;?k*nXCUz-*2b#H3iE{J~X@v*xpYBYA zz4o-H8MdZfSEsK78txC4*gN*Dqbr$hM8@uw8y0r%O=?xvelKZNlvgv<2?-|!uX;Ry zW~NM*>g*c}ob(=qK6w{~R?lhe8)-ePLVd4np4r?!g3udDY&sh34*Uc7p<&fNZ7oG7 zCS>4U+{0H!v{f`PzfwfQKID(UHL_6qXhDO+MYY!KX;es==gq%hh~YrY6*8k|C+bFX zEcV5r^}3GE=kei(_FJtsk+L$K$f1{?W!d#wv*Rn}wpMG5<)c+Rjw@B+QL9mx{;WQMnpi{E~swk+#fSjNQ7-M@jxG_uewbp=-~G zQu3QatW1vWJ4^x!-T15qBpYiI9=hHh<5x1nKpz+UqdVsEj$|(skZzU)Lu3C+^+D6J zw2WUZ&h&m&T5fQl3!A`NtHOt+%Ly2C$97Qqzp|C|JfYCihBl0628TuPrQ@bbv>Uc_ zTz}gUUasxv;{*%Su3f5T<|<|G7l#+!rMZCjT$pX`+{4n->#rBNf!(n~pNY=f&_(EnqxA_+tJnO7EOe9fS;j||g6fzG!H=Z^`>9OZb9rVn4uR1}L_U4vd^UC}38IGq-s#0JgmEEp% zqdS^-=4Pwv&vlz#0=KLhKd-r9U--9K+0QpUnsByo-qBZJN^|r_dMw4)gVJ+LwCt(f z4~#wgl>!{t8u(VA1Ajz0mGVk?{QOj?82F2p(}fO=&n%BQuDZ$8+010@Ic`kc8~=q< z3VTRtV`bq3YYTYe-q-+Td8c-Eq}?}wQ2N$wZ1L@c#>-sq&sp8_a=lJ{m&d~+w%Y(M zOqcBX)joEbsRm_r9VS*E%7Z=-?kmiMHnm{Elj^*i| zVThc4I#+9LWX)dv5_(RH4h9eeSQgn29T-bON*ob*y$?0#gmdfFPG=8ERaVC*rNr&V zJ(v8sw4TezY~$OD*s_qGT|Cb0BJY(Nn{eGgs~(oi?Wl<`j1%_C}U|(+WI4%v^3TT$Jmo{4X2+3Gsh%OwJGzM^vLcT{s zr!?Q`7cHUuG!x$B8*d|VFsc6FUKbPs_Ul|oZ8+ec+Pl&hxC{}}+%T)J*- zm$zWp@pBsDKWf(WsWT-~%Zt!I+%hWtAHsy`r=9a@F{Mdx!HGi9YqYQksXgE*gC?xx zmnWtd6p@LZT>T4RLHtg?u2@kZF=7nKLYN($^v7A%j_4rRwT#nFPOe4ohU=*;zRyqb{KR9a?1p z=UA+$CQq+q%I^4koY{IB<8zzLn=K(&ZB*31nD#B3LcwKO{7tiZ--05!PyA2OE&w+p z6w2e%lhtlv1sLYIDT^)LXlMQ)@{Nsl0wuZZyj3*EJLeFXl2&<#mgK3AG-k8~<4(>J zkHjm+*FkTh;ow}5{-QZLgF;{&p?D_7`APzi*T3_S(Q0CUPAyMgMRT(}!^WUrRJ+xK_LERGwOV*erC7 zS{ctc)5ZgzuMFq0?_6gcZ z9nf6@iFZDmD$;lYy$xta9C6VOM3ICTWvY(+_5yp;-1qFQKC$iJhHTPAVpWx>4A)ct z{d3W=l@eX<4IH!yz~N$qq`2873d6%YelrhvVba8c#Mw8rWMK_%<-G8jjvCBel?=4s ziq^;#73*yF>hVvaOA)gRA{KaC@*=r9YA}i}%*a=SvO#-Mo!yixD78A_bZ2Ud;Bt;$y?R&6Ny(5U>?_b(koeu-0Pzlbg;4M`aAYX&0r|ThV(GYp6+nz*tNu;!KM=Bcc;)l6mU2jo zHR4L4qFIaXBTbD&W}pW5-%8;UGN*c(NYhdWzv^)}x>B;Dh0mddxCkiQ{pt@s?N*aN zd?A)dnA}DYEJ7<77^B9L_k^EdK=OMFDQt#U zG)5k)^lIT}Zt2UV$`=$Qne^B~6n37=Gm`#!H{g(qZRNzGE>f4Muht}G`*!gh@?)N2 zHa}XLU?qn!Jza>e@_L1ILSOVo9ld|Rgh1+(znID)4*w@eUQn#8kzy>?`YFs))~H zyR**@y(=-T9=8@5cd8~bM2P83KNAZY=KDpD9f6-&J>X|+3|nE&sMrN+3#qfTM446N zTnwFSb8pZn=~`Oo`_RyzA6yBKLi8>5cLX;$S<|hv8h$95hJ#?i0whf_O*3TFQAG_W z?XJy?rKADpkwi{(#%?ZLf2o;8x+KRYhN_%j*A_Dxg0ajG@a|+_%C*w3GhuxYbNSv0 ze@w^BGx@PFB+w9Cdw2G2`LrCEZz5 zd4Op3i*IWv(32-*#Z96hKXAF9mQ8O=Q|Mmi_j6sS?&2>pbfw}z z_=JRAYro_X^4axs$uNIXGRRvz0b0l9nE5#i^CIKUjm4)Wl>&A>mY-P8Okn0*((E)Z zwL|7&l_T;PgBOZ1qO4I1Gasc;Y9&AfYUt-k#+NysI>zMD2ne)wqHpb0cP&k(eBZ44 zt?oyD?hjequL%rq6yOkCgtR>*%0#~?ldc@1_4G+*dJ2~ylWbE6)tjY!$Y!utE7G1E z>)30)5h#7xf%tpnhBzSfughoY)iMs6x4SIphuw3S%aK89ab)uO&<`cb#By>MKv9Gy zalNqp_YL90ACufhn=_t%5{V&anaOf>Ve=-!Z`n4(PRCvkr%+027x!AiNY%XcgvV~8 zO6!`akRk|Hs);jJiv@xO&Rk5b%{p4}a5tig@7rKL<@*tnOk$uWQHuEd+>wbqL{CTgUtHVRCGx|Be zfR?u-k9ihkOnc(|P^H{hJsf%T(3f+D)RtPk@>f7VOX}E3YWj zQpUq&+r`q-tf$9`h2g8tHDb_qH@9>e46o;o`)Use>TM!%6sF(<=BsFQ?<~qH{Z*j1 zHCgz=BI_qc58TwYj^mAELKn0AU~UY!9tGuZot+U9tONw`X}Mm#f@I7Dj^-D+pSbzy zwc0fh*_~Jn8x&(_ySt1*Ui1Z{YL<^QhR_p1*w9~3eRb@4w@A$C^l7Xc%sTlxLal5C z65Ukfab$VD#8RsHzX+ic@n4~0;I5|p3)6T3wb2LP23bj*HrT)Wc>Mad81K8)GH)CY zMzj;}^aL!b!F>0K?r6-1^wq`f+r*YRrjT1#e`{(j-ZhW?COj!n5w${{azJYd3-*C= z{n>JRiC8jPV3!>C>Xxr(>lG>T37L!iE$Nyrg?utz^n*$3;Dd4NErSYQ35?au;eStF z68gJvD)9e4*-lkkO+bE(Pq!sxlWn$l6+j z7Y-2!PNe&>OU3!v&_|iI2rc=oxGn0_h`9F8+F(*;uQ>i9;d7LcsduAHx%-H8Zv)?$ zZ6N;orbmw6U95+HC-+4ePX7okDEGfn3;Ljcq44f$!FL9$mR z@Ug2}>#7~L)8*sB?>b9@<^b=F@F0@v?9U+cJX45s$(7_uFc^_POrXG;&Jl5iaLg_S zWl8tpD|Z;&8e3a0@s23vFYN0h0(9sBoiZuF6hY=Z$QY5A^XWYnLMq(aq<`1^QnX~< zOmVv&c{p`_fzMz6r%U%essWcJCExmE>N3dYDM6JJxslAgBkZ=c?&)=C&^0R?b2P}C z{~Qk~$LkI*>!Dm!iQ*8(Dmm*uN^O*1Vt9G4sjdlKr7huyjRjAZ>5nv}PZlXdgkB~( z#4ykBClBI5tsS3@_irQt@~3;q_F}%pwF*2NUBHr5t_mu#NQ7S51?cL|c0wN@XSHQ(jclrZx2gx(>7(tq z82BbTu(v^9&5LSZq6S!#;+Tn6YbSJhs3l_8Z<*>+2k5)ed1sw|S7jUMnT5lm2#{zm zY{ufzsSfN5Nsal^S$&Lp@u7 z(NQJ#Dc9?>POLY^hqIl9iC|_o`=f(kM^h~9K%S{xUE0RKTlMIv7r7=D8%-(63JLOs z=Y2al;ccQx5{unGwiFp(v$b^ka zfyP_FKMM?$Byba5@YuOj2qX)y;IP!H^zE9uQqcc+n@t7ARiDu}GJL%umsl5aLc&yT zedX{>;Ce*nc#2Rc7zb@B9$y#|I0_}fD)})<6G-mWRX_IBbrwZ)1o=#4BW0j&_2xFv z)mI5$RB)ncFnQ+9cUkKO1w0tQ>fnDzUO^~?l^~$|w~_FGDb*+fp~(K9o-lipy1VV6i25>@i&fc51A-E8P>QPJ={GrlBtvJ5 zJp1T1IP#c4&tE0QlML~`iHe8``~~JZ6=UmD%75x5BUmaA1Rf-8Y=KN{gmtIq@H*~0&)x}_6&GaG`4HF8u7+Tog*|r&I;cT zvVnW%Q6?15zfVX2;YM%Lnh8kr^t6x-54I8|5t0b!Da)5M;W`Y@fjJ7P>c)cnJi*{C zV5qAt??Xp8`^wuAj{bkvsEvy=9fh+}f;aZI#h6k|t!I?NN3C${9YM$Hz9nY`pwk?D zc8FT{n=?&#m~ap9(ADX1R^H5qefLykyivS&r%bp^YS{}x*Nnk6_Kh218myuOw)EVa9L2 z&*J$R>itpY@Kvse+1|2^-4MLTcvn#7U<1nx#)nh=lPl%;97n#! zKeh7%Q|%r8A1a@>S8lCa{W3A3ypq_X>3CqNv->X+F_F?}2lsExe1*FbX-LufUxiVB zP|sNwgk3*b!#O1rhh6)Jsn_KxK;lzxX{+PSx%=UdpGv#3K_a*WZD~kH-DTQ)Dn&%u zA}I_ZtZd`O0X$EoBv1W?d$oD4o_-L+Vt%_+YNgIt+RIkdg;r^*jJC|tHg@wSpNI_} zGL)`QZk{X0Xqf@D{h8?>_v-9#0(=C2*Ke;dqK@a;LvnFjlMB5$cDBtf(6@J(2Jv8A z@?Fre5j^3>LDs*a_8eF>&+ZJCc&$ zK5OHxFeR>$N%c3BSd+ycz-Zp(kkY}T8*(hBdYiLZJ$JzPVsyOo^3nOq4lLtq0`F*6 z{_Q@PA=DcTzlw?XnKIkA;NInOI%OpJ3bW>b3J9Ied@>qxR&^!AVL$Mb+)Zp&dgM#m z3z)Q|Ibk#36Fpox?0x}AVG zT2!Z3CWP7*%N@=SCM|AuB^}-R)~^oZwgyuCJqjNjeV83qzO6aM&>!E2rBi!;09kw? zYxpBU;I|RDd|T-l&|6v3G0V*pR9kh|99-UbHJ&%nyp2OErIFutWGm5P0?F9+L2;B3 zwseCKxvi{PSb`u#&@j8T-eh$Lqq=?aIgrUi_9nhHC`t!wo?yLXv<9g06 zh@|6Dq_SsPWVdtG8LB({#jy3u6J>?Py!qiLA23qOHFYG z#Lag3C~GQz(LtCgJ0Kg4;Fwku*&8#qHv1ei)@a9q&tWOta^abdA=1hYo{JX-9$!1E zH&Stu%-c`$moM~URL3*>(`%)DX{WgRPUZEE>g=$TO2vY*dwF%(bm>b#0xsvcK7+uU z`BE!85sMrl?$abMuHOE(tb}9FoqIW&?nBA4=R*}@%GT_xoCv?RS4CG7nb!wdxK7V@ z|Kr55ekfgM`6<|hhL9fnA;s|WV8jT2y!ddm^A(Xxz)bFcp8@`&A>@PuvHt%Edb5?B zwq;$z&K_|2S$<_by}ZGL^{maB zm*=YwJR+;h<0~&)ASZMjP8_b+(V#1dn7P$CYkq9|`um${rJn||A?&qxrMOov?;Evj zc0jMBwmCwGDKYh8oGa^+D3pUg$ps^H{S9UMs%Wf0mBB;g!POR|LB;e%`dV1;l+?vi zJm51dk9zpuNY%!VS5bZD95ls&kJ>ej(vvdB`7}U_5R~6PNq&UH`6-XVW7t~vHwQAT zk^)-VHc|c$`kuPLE0l~m5MkL&U*wUJ2^{IRW>&>c^#hk!@FGv-OhX7DmFHF zgoL|Pkt^SV`6)uibuFwX!)nix z|2(3Ut`_|~k6Y4*WT!fx2}VvwCIK-+U8}`D^T3y^P_lIMNl|NR$2a6{=Zj5nySCN` zPjLHw;6z$_-V_*@;_fY1Tbw5P~( z2>OL9E4_?t#<-iP+9qgeofLhsw7uqO4B+c=B(0 zgr>;lTKt6>cGU{C_7m~=e{ghYl#6|yx5a_U)_EzBLcjaNud5yMqavhZ9>tY4Lu1ee zGuZ>PNek!)lk*=yKS*p6!Fzy&NID!pp-a~aTT#3662ux?#Q={rZGF#25+nU9S`KKa zEOmumbjW1i`{bcbV@_gKpit(OGKvZAp1+zwKODaG<08dKlSj*MJF^lcRA{3GH%yp* z`GX)``wmab9!9#L6`T(nG-)5!kLwmRiKISmi#cPFto^?W9nnY<;Nen~6a4Vfwf%n8 zX(%z43X1>A$|#aiHdYXm_e$iCQs4R4qTK`r&( zNU=j3DP2KAutC?HNQdlc8nEHv6Z+&Y)|fMBO_Tp6NXts;66=M{lLz|B>@o_{+a@Zn z0gG7T#T%%a$Vw(&u$i1gAoLDX^+FOOdy`a0uGjkxHJ4j{!-Ja0qtDd(gjc2L083vylnAt&mfb_7Y&qy2x*wpA(W1XTKF&mB&=8 zKoEB0BBFL?{fwAc?-&^lA-JFmky@#{8ej-Oz{uQ;RURIhFhYb4Wh{P^yBW)8hdJ-# z`>HyLAbjO+THghe>obt72@KZryHCztR!tdWKpP@YC{g*&+3>b}m{p9UW zSj`1?AO6M3td0ST)+)md0X|6MqoDzVSpqMK3mT~@-M zErF@PEoBKjf(HSp2B1HZ{+ORHmmx8T4z#X%YY{I-Vtun+3Nb=c%MUS{0= zu)%>Us0kGPgkSDP``I?wJH$!QQncMDZ=pgnpPwxL{6k{|4GJ@{5Jk8t*|c^DcgjN%MNpfnuf7i zKMPJaPF|Wu+=^m8-`t#F$`f}XZ5Ve(>|v(ffL~06M^FNPEwk% zOaMPVu0(w>-97b-?_gvb2SIS05YtbnWDiAcdk5DryMf$@%whlH`Fata$Oc) zalnsHrLZ&MwsDH0F#P5+4I@|0^QWM;k zMFn^i9Q-PB!`speiizX88(+t*jjTA4Mra81*%0<)ZpP$Ggv71bdN-o#MXfXz?Sg<( z32UbSvq@M&r-Yb2tWQqu{Bb{K7ex%PKtYvJuwtu;u^>Q=^~%&+NZ#>B&oYE%8rN#q z=Y8A~!DMY>he75qun2z7``%xAw6IJJ8FTnUrNjou>5pijr-Hgu_>9hV*jWK;hr5`l zOh9zz-&UKuMm~xXd}BPp$W^^K1Z)leQF2$pM(y^;+JE-ZWbL19&B*6zuCy1Z=`QzJ zf@bJ#un&K59BKeYVdxE@c$jxgK6F5n?qbNnAwV}s7agLC%@h#;mA^wxDcF@dCuG2< zPRiV<#UVWTr>4}_(>9nhJKR8vg%xTvsVR~+IIdmf#c8^&_6x3`vE9S?<*!wK>BxU> z;(mS)r~)8n{;A|`6@bo3fHtF;&j~~MfC;Pde+r0``cGwx#4!L}aU3=r-ln-@O3A1L z;wGDB0X43C`sIl1jQJf07}-_b-&5gZ=Y&*h4vq}&sj*rQB@3KLbSn(l4rrKk`kB#3 z{KlG@F(|pi6($bc%>Hkg1ORDH-BmwC&9(5=k>3~so$GjV(*Tj~LVy&7L3k_P^X|vK zp%)t-GQW$V0#v=%ii8Vj9~6}V*DeV18xqxMxzF@iX1>O5pL&o3Xz%Y8Kx3}#$J+#J zk4)rtALawu-XIiFEaq(;NA%`7#t)jxb)7lB%vDpdhAg;Wzd4`~&_$uGk5LtUKA2}A z9{#D&{5%r2=~kGWXP-`Y9FS}N44ocRd41UvdA`_t{lVQy=J;}j5jJ^faMugIecowD=<;YxQh-;Ha9b^D?7S6Em4J7s+qRflg1y|CPsEPLPP|OR;bi{?P**wlF*MU1zqq! zhQ=3rsv&D-gOCOYo{GbA8Whs`^u+SY&38?4(nBGX3ir+9s|nwYKXy3XD~x7Q}w_+#NLBbE+L%g9+B!>d_; z6`AGYY!zi`?*(Bl$!KHU$mr-1e;=>Pss!ZG33@mEvt{SOvs*lG{F-u4_pzT#f=wsE zIJ`>D!=O@H^A(g|ErZXnqoH@9-igXX*omV@6;J_l)SBE|`Z;I)Mpl|5scEF}D(%U8 zRma{UJNt~qg-P)nUx}EvMg`VshArn`TAep%u0mLlt12Bxz4az8ByT1sZ!Cvm6t4G2J8CEy z;mCQw2Sb5xI=V^)BL_&uD%wqKkuDo&j>$!A-E1_RzKSH+A0#Nvya%LI zo9CXhP!Aw(W~POI<`0s{EtF%BXl6ica_lr3+x#ehp0x*(^=$;_%&Z0$39hCr0!&aX zet#6l7iPR9dWzKFMWE%$r^PmuC2n-sM(H#dqBXLWw_mB6blPlD3c%}Nyn;AH(z<@I z!yo%5oVp-Sd1Yn@@Qy}XKrhnx-K96Ev`YP3`!C{ehi&ep9V1~`=9^) zNs?;D0x~+PqouhbtVXj@qz;=@SKp!!FT%fFFk@gRX)nFV`d&Vf$Ki6ocS$ldpJv?} zx>uNC5jz*DUpO1L&v(~2HQ+{c-{XdNnI5|PUauzus^_h&o*TM1a`E=VO*0mG$F5Y=WtE19E^iTYEsUuAjj zLet+v`KX$MwBZ*@>efvn2~C&nd6qs%O-^?)bw|KHg~g4y{oAb*YOOrVLs^ zsYfNBhFvdqI&{Y^)7hCXi~9oaJ4Zv@r>YYgNbjXrJhzE2?1_|IDxIe)PlkBD_~=HI z_(DRtl-wJ#bG^2gIY7t;I}0KUiuF_jgl8S1oXd(E#H>Nl^wgsrpH2MrU7ixbFoaMAXX4wB$wjhA!Cdo8@q4pk zH@`l7@Iu=`kM9hV`C@ZRm(^W!<|5S5xz_7{ddGWo7f~@d!Uu}C6qY$h{C~Lm>Zmw^ z?n?;n1PKf-!QCB#2Y0vN?lSlgAduib1SeSV;O;Uw4DRmkF3b1(cF&&OKdSqjuIfIg zUst_)U9axFd{>17Ubd~qBu8`|$;B~$rgCBpLDMFOHDV(jV!M=Kfv1=jOlW9|Bwxd- zug-s-N|F-H*3FN#(AT7f4_O)PBKqAEA_4RWxe#^LtZJe_44GMj^a;)>s>0Ebp_Iu?^x@e zJKelti13~~S>jn~&s@cC%@+bLB0Mwi9kU*xl4&rWoCOF)8TD|`T#^~dKwN^ATXef+ zce79K3w>RxhWI~2&c8qHE?qcAe<#VrJ5zVFjnrJa(2i%+L7bKQq{C=Fs_=-)Sufmm zV?JnIQ!+K3jop6wgy%&Pdkc#FdfRhfL#~i=1gUsA>oHF-Ed)AvEROGxA5jE=WgjV9 z%tJ-5Z}>OE#}_@fpZUoG1-#n5%i0aI^6BIw_xyIpXs4s| zuWn0UMc7t{TagrlLTQ{1NjhFC?LH4S~ZIpm+E3t48`+ zA^eEeuk`jF*MQCb7UtiLt{Y3U!}BpGjU%r9r|JV$+&-bh%IHmK2#EXuCSxzRk?O1J zJBWLO;=I>$D#Y?Np}Lhz#w#a1~B8ck9KbmjeX96*TarKJ>F+zsX=^HNKWy zUy9D?+yalgjq+6%(^OZTj}SPC$)~4pIa3Ghrxr3e`vj#ytbl}J&S5yFWo&yrd#iLm z0x9$H68)IM{pL{Ic06~C4w+*&G7ssnB##Yd&N$)X?r47F`8Ns%A2%SsGpi>8FNZ{P z*|HOSy=7yGLF9vNr4W(8K8A)f&5lZ_7IGESPGjMw&_0vlu`9<=Vak+x*yzTXs<*-J zu8Z@Q3xgL2&#-(TVfb(rTA`jCZESJt~Wu_&rayw*{Sj;*}I%|FR0cz# zwa->-__&+ASnfjgTM-YmRo*@#*&tCY4I@-s`xA#~+Dr%B*#UxK3Ze%ySjiLl3OaS4 zHaZJO(BvSmX*D2+;TLAN8$hZI zbh!~CRI}jyFx_J0&cOp+@Ct0lD-Z1F@uC^A`d~5$ziLMl)#{bvYWK^z zLBp`)MH&#pR(H4)d5n6u0n`s@D3{+p>7WEntSt)apVf;R8=D@>EA~4I`Lr&DQ2OB3 zcyc&s%&$#N<`vw14ERd!roQt6srB%s=##qh(twxCgI2t%$_ zJxj+LZemtOL-!3UIX8J0cI_blFls;QvsF9mC+EL0+%+m_LQxZ$HNgb!zFnT~uR=P#$p-zW`#qgJaM80=V0o~KqbttZg1-VB$thDMP zoRcmuoe6z2^mi^j&Ur3LCK6j5ec`WcWh@+Es$A4UHL!l5E(C!d^FRk~N%;w_2EgZQ zkVoR%vzW;4Pp-?9i?q*_o{t-!xe$!*-Y^Qe0u%%W7PkXuQw}6zLc^}kHb*bp^1?aSIF!S6Fwnqq!O=%m(Tbx5zc2qh&uoi0B!HCY z{9a~bYbiX|8QZI+Wo`HjiV4~|>7iqTJAHc*3$q1+{;M8GEe<$@<@qnWwwk|KkPIA? zy@NN~(F`Uo zh*yGg9FD^ElaI@#4 zuoe?B(m>&7|Me$HPO7f}kXfUKy#0peCDawg6Y>`L0@+xSrP*E)3lt*xrAj&ThM;g~ zu$R=X(f_WRoA`3@E%7TW7u>mR5KEQDM((Fh&@)^W${jsj()gV4Rc7@!MikuNTTH0^ zhN`IQh%Z3kt7Y6BmY$(=C|{F4amdeJL*&n<|E{qub^$Ia(rCEdpwN&|UfSHcEa+!x z#irxnM~d&Em_u{TuzXZ{Tkb5;f83P`3s4vD;XK|`*`lPaID_dZx9W|W!@O?DysLj# z5ku(dLR*$I3IEz?j4RYnn}pdtl0uPpE^BVYb!BzdEEfmF@faLM4#KXcRJX(2x*u%4 z7qUD)J1Xwq=M#&HfNVQ4M6gVG8HcNdjGQaa|p7v0Xn-=FFF5qMo#ZGY-6b2 zPp<@By1=jVqiNsBvOJ66#(ML+yAT_%fW+2s)2X`|-8u$KC9td+uyDtDC|54tfCUm%%t5>OetyFRe^kLp9C1lH^TP@zBRH9b$JVy~*&HqtzTaa*@o!CA(vq<>Ci?-Dzzq4C*tDz%fOQ znN{m%R>YK()I*g^4sr0k@w=ArOb$K>xZmi>el0~P$a}Nc&x?7bkA1bxJ(GP@?#LFK zX|R(9xWa-!?Qf@IqF-K>A8ZGSJ&`$SFS$qu6;Jh;T6CsQlm7wx7FYbTDDKsnCv(p; z|2`!JLwS)*4r8&?utj%LNm>D>n6XLJn(Wd%Au{ZiAHZ#aMHPuuJdFx7 z8mrHJ-~XaDaw4vOFoRJP(WEYu!&MZo6J?~B75@f`Iz(vvqdt-v@m@}0xsP}lQ_0ApS3R9BemC%aCOPM6aJI80>D$x6uZ|9}i9a(iOn$B@F9Ff% z_EG$iaEOy+Tm|e3v1}#%lx<%WHE-HoEYm#v$+4P_&HLe~wgq`LT=FvypChd?8tKL_DrQz(Qa)aat9xRyVpgBF*7=i-u#Lk2mU+|(3DfqCD7#F9ne7J)mmvy4F89`Uj zpjzvMUrSJmfh`VtIS_sTJt_&q2NIM-l~54Z?ZDg`=|`C@*g!9hO47S!3@n{OS(fQ< zcD2wv!P2!mP1Yi6vWkLe)%BtzYvm5({TZi8P%f~ACY;m#@Rx|NoquBVP#;ITw}MkD zx989P`%Oo@_^D*ryKOY(y2+Vw?7n->b!-#FRsmu4<0{yPp8Md-Z$YLR!mizNdEKBx zZQp{Q^u4LD;S?eKU$OASHPRnXjoNYxLD65f3O-hs-U4H}69H}5w!1b#gOUoLEN)b> z%w-n*fI_4bX1de~YW3&mcYcH=YHe%1nsbyz%R1E)4f1hZ%xz~2L%Zu2ITo#Ad*nif z4`G^2v2`^O<`Q*W$(4OqRU9~Gd;*}2U)6uLFv;S{zWn5*@)i7C?O0;^1y@g-kp@F$ zO)<6LRG+nh1ZHQj30poB17kZ5%D#92PvcD$@o!8G5@wO#Bgr{w>YbB`7nE5_2{@oa zAN&gb^wYD>;n0&Ba6q7i7e*EC!IvEscT43r?e$YNtve`hyrrk}8_}1GngU{wP{`lX ztAij|%O%?Z=5lw_!#TL97vG>??9$g>F`H4z(%(c4_51o__ zt~CXWo|L;awb2~EKR{Mn6b#ZC-TGm$m0*u+of5u(2D#8W^81r{R$e=1Wn3&>NJ}Y) zFU!Zhh+;=wr=3UcM*B4zWe+}N@ifY-CSzhZ0uHmCe|=Oe&J0MijkWS|M;yc*p%a{n zVx2^-DX_LW?*@?^ zWG~cbj9JV}^jRnRdq1I#FmO!2ezS%YUOB02?d?aC0;GtXVx<5+`|z~RMQ5QO)M$8i zS|^tFAVzm@2yo9Ou^7~9b8$t1=KCc-CEJe5Ed)umBdU3sQi{tLMvqiPhifB>)<7Oe zoI0@!3x`R@zCKD8Z`NS6?R*XsXMG;@S4z>e8$ff2a6%SD?+dfJ4@=$d3!@5;H9rl! zg85r)GUJaX(nU_qhPb2Z_DO8JH1U_q45aF9Z= ztUyGh`5kV=$EZ>C4Yp`mwndlD6T4x$oMnpdOT21z?0-B(a}GbL=tYDGW+gRAv6zLy z|M>bPH<(6Hq}#ji`>)GzH%LR8sg2|#qczKsDlD!wSR{zSNsNbC5s*Jd-_Xk&bo0+N z;TD%lphf5%#8cY#GVAscp%=*sR(IOk2H5=)Fxex3ZCH-l7wq8Qd|r2B$^4_$-NJc< z{OpM*O9Rudh7v^i*~5)m*QZAf1$&3PQ^|<}G^DJ z9KFSUhOAJwI!!@t+SG+RA|mRD^=lmmo`lTyDj~M>YD#&lZH(ivxs_76hjr@mr>9^Z zXgI<>P6p*DV13{R$AAG@v|`NToFw{YQ%7rqO{Y(mDn!5eVKYbqU4q1XB6Kb%2+!~N z%PTu#t}tO}YkaUM?y2XWPmcU(RoUe!2OpsZT9_}cv}&D9+Jf^J%>RscQ!T@PAv2*qdlg!h zDSl|^qlb>TL6LuLS5ELvnOGj5iG%#dl%-$=*KAjA?#cPYgco62gR%oWlewhiQXe7F zA}c5M(SPPK8ObHKLkhf)2^YJ>`s$jO{iiHP?ws9IzDd*z}8;z~H%x>SgvD1l)ld^KXGtdlPx3ZBErq)%^&STw|p6bJB znn}k`YcT?Sf?tO!VtuhFMDu?L(=uC#q7vJPf%P^_gbu)Q6_E)VoeN zltnunead33WMIqtfc@zzu<~;>$PE~io+;%+36WM>Nz3t$e_zw>W@zQ-+t8;alV+vI zsxIN0MlE$)*kND)<(szsso*pwahkUz)&2mFVU_6&b@Ab7pL1Z!^>CY?uB-;Pf&|!Z ze<1S_Iz~Q+;hnh0y{Y7zKhINFe#WDW$x~MfudmVs>nsRu&yYTULKqqWiDM)^_^rCq z-jwt@m6^ED4gN+_>W4RUM1+>-(w9FVqpsF*HX~XVw35;{5Ax7+aC9j)?pj*BfAWg& z^v#Hy`$Rz@_At^e80%O@aJ}N=6KVQRLw^u;?aj2n)tQD!P!?>&$}f$>E5E)+)L*wY z!)s5Stz+m}z?|}m1S80UrjhE|_@(rc?~1Q`t}fH>mGj6)w}YV#DfiJV2YsvMN9j5G zSopWDSy26NIpYl8@{2ZU{d7!YVUf>GFrC-H?k z4HX5VX0<0~4EJC-Fi?BZ(dySU2OMd&{Ty~DE3eqI@?xNQfk+Z*m#!O*}aD|>!I zbd^o9JDT9z%t~knaSmYM;aBpqx^s1!$b!YQVy-sOvXD|~4fTwDbQFLQKY3ppojTKn zi(rxd_awr?)SI?ALwqL6G^Dg#ve;$E*U*O%GJQrCN~W|M45=+Vp10=C6mv#=)CP@U zDXkX(h8m#?9_myy!6*APtpyy1>>I7olg0YY3n+g;`!sNv#+>V;R_}h@c^j(@en*@Q z8m80Rhf;(jj-k)8!a#-kUcXNBGvxZqNA9}fvlMzWrIW*G=lQuX^?t27g0}6W)A{U? z0|cz*!!Pk$4>774PJluI97Wg8vDcd0;hX$gn(xE6%|C@(ul)N25yq{(eIlkrho4r~ zUhhFK;T;mhEy?V2EM`tC#m%%)Pe)Yzn;Ho_$yq3;EUXJoe}6k41}RjN_hkP0ij_)y zNQgi#T!1ZV$uB6>9RajWRZkfop5Pj=w%<;ep7)%;lq1oe@fC6yc;DWk#ch@{e)o?_ z7jU%BIRL%TQ06!LiaYjKzRsg4+{WBVfMOM7DG=>VKtdlJ!+Wz#WK)K6?K|bp_wYGJ zt1bi~u&F5>s%*^p7@7Fnaczc&brh-5#tx|?MHcIt*J3HV7t>tI{^R&*+4bTQhP(gE z>F>6R)8UXs>^SC19Qmx|v7TTC=^_R)fx#&~iyh=_-hyY5WPE0S zk+Y@;&D(~{z`3dsKl6DTgD0mzBa2OtmOV7zqCs+sxI1o>S@6Q?NAaajU#?H`{>9@= zel|@EVRCpoH{c(Z+}FyaO|A)VSI-4?)bn5Kn!xN2iXKPCQiuzjvh4C?DOPcFQ9%B) zH(`!y{p)b#_WsDlcV1>N5D4J&`7^yXIYjqBpJ}=tHWxkXOm4jxWfFAtv z;iF}VKbL*tUJX=$sw`aS^m^2VPA-Nv_TSix>#;$5{a6#o+w1REUF>a$T7}wFz;} zbz_w4m8!zPYsH^BSNNe-)AU=Acl7s*ZDIjX)%VtzH+^0g_LKR&0DVapX_2`Hn1aoI z{Rpuo(HydNwL4-YjW*tmJxUu0t^jV=s9Hap#oSTC6z{ItQSm3H=&dpFlFF(lrj%LC zCr!J`?oo5@K#h4%a;s)2U1=nrtc(z{bf?$nD?Gr{rvET`RzRyIY_+$ zB^-#)PUJ&*5_(A$Yv={?-hzehxRc*J_rrY%17D1C;aLJy+kwlcr$!n!fAmKnt_R$C3Jl9!sT3_WpSsC@?EOG@vX8p%|{nq6ABn zmme|Bl8asjij&<>XrovgB42PRK2N`hY@|)e9OxhJWN+2c{QzBv=K7nc=3Y`CU9*^9 zpl_{-7bu@4B8sY4M*8f_e#944V7_xOJ|Zva=p6>vo+Pn<7wj&m8>=P|Fg%zS(E@O0 zJ1V^Vj5R=xbYO~|^I)`Ys%S?Ng)r?{*6fBz@F2Iga5z}X=Ps}M}m(}!E?+ChSR1i)Db_p9Oa>greH>Que; z{PFWe%R!Righ75AeF1NIx zT#af(gG2{T96V^zpX{*w4%cWwvw3W16i`qj6F0yH9>4}Mfp^L zlFNLID`1KKWD)oNYk~%G(XxtwcaeUE$q{ zz9nm=?BHn~06)STQmGUcSbPo{x8bucAO;r1_y25?)g5&r;X`j9*BC*QqLluX5Y!p| z$0^P@f)Ek4cHb0eg@@;&&mREFN$P#jJ6l|cHsb!W`GXlFd~;kjViMUeZjC7k1kL@$ zf#CIWUe$8e32(B-8X_OacG8~rP2!T*B|F2F!%Q)t(+0aM0sB`JPzr?osG@Oaf2X6f z8!kl)6H4eSWgiXcg%V&M51&nipWa|%T$8^ZRMXp)%#w#(U?sbK4ryn!1Y7JAZkFMd zF3e}A>1HmBRPZ}Ub!um^cf2M}=y~n`u!2*EAAX4i=?F0?zH=>e1jRxV8U`uDRF@w% z>LuB^kDwQJI>?+-g&@2~1E}ZK?e0kn(CoqSo!uMm8xl=(?_rGKBo)v*y-!nIqeN_@yeTy8(I$pnGp3t}XT;5H@1S&1G>4zsD*=4DSf4g~ zB71scx&2l)jhZ6Cbd>=fvizG8AM!;G@Uf4#dH!(Vxf3eor3znUlTb9Ei#B*OdZW_u z%uA3!@{JCI3$(|8Bn6NK#QugD?Y>Y1j0r1EhFatKhVinV6<#{oTo3V0wQ-l4$8()5 zwLThp2WddwFdotJEy8 z)I61D&S-^ZA2Qsp+Qu3L#~49t$Gh&Ou>Vjh7=uO+4)K76 z!NZ`82Pv?@emS7Cfe~(@)iZihGtk@0{}yD0?RYrI#U+00er>@L==o*avZ?k@II2YC zYdw8~#6I5wS0;=lYwustETOXx>;dcyAMO+Eb^KJ|V$Mpv#6uLYDT91RsOs%4~k zP8Sf@v2WqPyi;lI13VjS{Ds|?q;E%O5x=REi-Q8zScHs8304>Ct6)To5P6Ys2WfBD z(C4?Pzl}q%X1E+b#u! z80L?cu|B9RA$*Uk>F{?%hJW*<7+Z)RM|k==n@_PPTkR`~^th{n;I#-JHTMFmDI?O_ zKMp!#-r1%9*F*!K73bshO`UzaJoX;vyFk_NKU+g9f$4Oh4MDIMosvyHL1?c|r7GxN&SrL)zs**0y8t)|mV3%G=(!RRXE%K9 zc7rR4{Y-~aMb$?}DV4}C7}yK2>HqT%GApZX6D{RJ9{;DI6SN)p!Q80YOpymYL-R!z zooUFHr-Ul4LS5XWDFR>8NWaqJWCHtc-d881E6>B{jcu5oHWk&<$->>k&C=8n)e`(N zfrr#kWejNg0CHaDMF-s#ofG_Il&4~Vl_n4Kl)mGvMP~ojLw4%##X+$!ary+8_qtH+ zF1M1eS9Rj1s{HyZ;j8?%$}Qj>FUS-JTK#@0%H9;%cp~bh&rvwrl&}s|7xhZPN8(lt za2fK!61_$@hP5$AsMXG`(RP2cJq|p5-8TbaYFEu3gPM@oWhmh<32Aa-vsK8O36NBq z-_CXT2BmyT9_30b0Oi8=*Q>hRU9jvB)-@wwPIB@=jZ)K?%(O~cFyX)mVgM*$sm=Rs z_a(i-*>dry`01u#R$J3umLX*Jt3FJzU$N}SV8a)}Du%7%7m8E{w*r+`8C?si7()w( z1A_b*khC^IlOX7XK%U&;k=%T#bnWqoyk&0Am6V$SYtwd3^16wC<*p&q(^!B?W~!6# z1CnK(Ue8DL_5nf5vbEs9+_HnY_NH{DFqG4-)`WPJVZu_GBLKa~xK8OR0ExEM$iJvk zHH2Gx{^06EKn9(CSIPWD-MK^mC{dP@6Rkmpjr&-KA!Ssw=%~+ zny?KpsVK`@)~P91i>*mYhf9fZM@vYvPvK-@;*$P|kV&GtaZR9d%bS?aS1@Qzd9-nV zA+#O+Dp2U^7BBeqX+6IJjc8^;3fRQ@f;h6JB(s~`1o;b>bWybIMFN}vw^;xPLC&DD zDT+OMc1*52;SlE{J!eD>|2HiUmeJp!Y~-wvp^H+|b1;FfLNQwy~>yd526_FaKG)`W*Xxm%Sx1k%X*REmW8 z65NmQnKK`hwLuruMTT=TulV;tcm`&2?i@R8ww_(?b`^5oT}z?Se>0#!RdvL~W5$zo z7&j+N6=G42E_zqV-gH3p1c}|)ewj%KX0!kXv*d8sU>HVga$rE4)Po>UO|v|JhBH zFuOUvzp`%Qu3RKuLbm_6&&8QjzQO|%R*B+}?}x^Wf~<|4Lk7`PjMq!_JvUWH&{&C> zrR@)*4}I2qOGCRLN?%ppmz{E6llZG4`?K-`H73YkXhy&OSxpWe0`@rn-M1 z8iTQcuP4Gq`R6Wld6Cu;iBF!(GmHJo5FxR#lLq+OKlhNU*pQt`90+;%cGQQoHq`AO z^kc*tt7-7eG(^_PUp^VxB7_~ghCZLno|(>^T%J02JNn%I7c+)w11R|b;^F^);$fqu7?OsM0oj$Q zw$~N|CGP&y?xib&_6yP8(r0zl(!ilp-lHY5VWXj zHVA9$?Kp#Z!$tpz{Re0z_EP^8K=-4exGq5MeC_-`ps4K}%6N7QMaKOQ+IWWzAEXHu zIRl`8wi=%xr(!~aYqBh@Nuu{6LF(NS9$o5K^HXbLfhz$(7|OejS7*Mw9OjZ&rIKw? zb$B*MWO)O8jG#M@A*^gKiXSo;3x&@sOqyc0sFRdtup_Ti&Mjx6uh$nv*&vy!?A;Zy zHHBg|9`|U-=K@b0*k`hHAyY)LkJX{00F@IEQm^KL&RFi+CtvdJa<%{u0k%z`!Q;?m zT9j`7y>hd2mTonhVwu!V zLOT=k6`ZKF(hRzQON32;f)K~fdZD{ zQZ-#dpNmvibw6`7r`vE`OY7rd;IIq<^Jx?Q`Xpa$_CT;ek4J3D1T|n>GE=Xs(c`X7 zVCNQp%K>8SFHr;G)xYt$0@$=Ao zQ~wxHyJ$fjx|@Mfk9v!>{k$6sl`+)2zRagSD$iXk$YE*WMrW{=#AfU3p6MWqrqeK^ zL9m?GpX*Fp%&sY6r_b-n$_h~;g19}@40irUm^G?nR~#K`MG7k^gllCs@u;3uUu7Xo zq+F<$<1(r&EUX3K4{9V8e>$kELKm(G8WXlgOA@8Oj%^b++cH2rQAiR!dTup*@{_Lz z>DQ?2QDB9zNtC9(i2#%%9lyGz9_fVZV?Y#u_7x{f=hbSGU4q^kL8`!v1SQ^$*j)82 z{$mnVBLzWY;k|1)5G5McGM~_;KLXa-RPd_oz?!DfRWv=MC?##az7z;nOa68mY z!Fhc{tc@EpTjZ`D(xnzA!X`LE-}UM?yZZ?7F`-}a1ve6@_Lsm~ml2(R+6w9I4;L5f zFXb8K1J_jXaE6l$X7PlTj8ZoO=^%y}+TFpN;Mzr*bQ^dsyUCy^)^lUX^0 z^N5^H{7w^HlGi=rwy@y)8G2 zR9Dj_9Xf|xWjDhN6H)oz3m--$zzS&GC`^fx=6hb>5d%slO06ugSS)bLLJ<6ru|9p` zAGOeKSfvR>OsWds$`FBDHT$h_>^gq4b-Z!wa*NHHXS^;WZEA63MC0~7LB*)7)09Lg-d%J*{!MHyJmG{%W{zS>c?GC1OR?RBFpbt$eX=AM zj9tX#!m{q4b5NSzTAahNHgj*a@M+*LM)()tV-jJ|y!EFH)*XJC&rH5qTetZ$U(-N* zq(5DqKnnlggwT;Z4cPhVeh*9>F0IPs6>~CB>)engs(3ZdZE3)i2)`huPw-g6fnjgQ zQ-k(jNAyo3=&Xc0J+F{AD^`)~-QRPB)09${*|)pD*m<8cP0I+)M@RdWD%(<3LsdkM( zLa$#(O#PXRPsgN@7GUTPs;hG{*nOW}G~t>h=LA zzll!2DtVrCCJ+ov_hSq8%-<+Rb5Zke;2S^ibN0YkO-&A55J72IQ9=p$bB&W%S$IF$ zm?J_2xDZ?W7{K%9X-9nQAqyZbcIt1e1Unz-GzTYJxI*$W0O;hY9Gl4iMJn_Dk`7|7 z`>#<-mCZ2~a3Zu+rMTl9TeeQA(WX}b-i*QC!lp7KN75<>mTD1P&Vn`??A%J(RQ@8B z&h{KWr~cnnacg6)I~jh~?gaU2tLnaIWp+N(P1~_4kCxwmr0lThWDSD0Rh`r*hbYk3 zapG`yJKpYl?#KfVz;b;|#A_ycnp5T(s+3<4&ePIHlJ%USg?%4?#1`a;QzcVOviRc{ z#_{-10Si;K8znz%PNwNU##t(ClN3IUnHAEu(Un&;=wEvjO#9+0_ZajjrS~+Ir<_1* zJ6aYQmnAVB>K$SVcM3s>x2Mgvepux*g&E#=&@uS#LXvXwE4%Dpq~3j1?%Aa$XCIw! zPgfUazdTr1Pp_<~^O!ui=s+@2N_)(SLTeghfiaDcotFTrrR7Ki=7oAnk?}2;ata|)FDH>{oBq0>ezQor8XG&h&cwR9iK0Fr<`>A~-?sp=^bPsOb(B4v zcikmPnU+A(Ohi9HWdlPt#V9mG1IG8j%ZN%gJ&@ZA(jwBJ(5gTFnNy|wv4v*IKR*z& zkQR~Nyt^s{h3&V44!(M`Iw(#pX{s?Xbf;%rEZ}+gj%CFQ@-U>XDdP-XK)hp0l|2e# zan}Q?7{vTr-~>6=jm#Oa@LlcNr0Vd0{rp=eW~}Y_@d$BPZ5`}T?1~yvN)Mj^1X>aOb*g5h;kpwQ?3AaV8OR;H( zy`}|ii&g)^-AD&wDxY`NNYQ`27#B$;^+V_nov!|x#5#UxXU}DN(8Yn0pW5p9(OYg*>}J?pSKe~+E;_>Ily7Mg?9o{j+ZUsUf2`|Kn`DDuw*UJ$ zEiy_no-)$-r%LYr2cPA`(wVE+omM;YX!GIJa5v`_JcpsJwR>S%&?&0b-;nnHK2O#O67x5RvY6; zN-*p%g`2o$cK@$NgkuSqJL2ohzQLP@+v=b-O3z%#n~S@|-Ix>Dd*E(5RmzbDKZ0}d z+MHg+h;T%MKvV{V8up90^AE9#Q7XfGkaptKjYv>_|G@2M8O`i>qvnk<@RM%L_}%(H zB-X2{b)FfL`VOuZ66W;wEZAv&ASj&hm}X{i47QCuetOX%>wLCKFf8Y8J zfXI$Fgfm^drb`L3d?&*xrUXzB)BJQix$-^cMzZ=xVD6SD+6Jj=_lLapGO_37LW zt#q}I{@ksF&Zq3?1V?O~Ca~;7<{cqA^a0z%TXI2zv zn;|gt>aM;Bj!D<1evs|J!xO|_kU?`Z8Y6stx&C?BmEZi@bXn%S%9cqD(mwr>AE-KS z+jj7?vLgjxfrqoFV!L+v&)MpZJcvx&bLgqzaf`qN)an7j*TiNOWWR_$Si_w1#MTyS z20XINJ&Xw_0oU}`tjB+kO+WJ{6dZS_1dq9iAjX)lZmj%IV1q3U* zRHn`A)%p7#V}@fw4xb*{cQ=>&2v!i6W%SNgahfVCk+l_+)pb!C!_HJXnCpjXA$ei~ zhKp>=9g!506L!u8?5pyn+9tXmvQ2`%tBMYHB;{aUZ(0R1(6*6mRji8py7IJbzF=-X zEz24Bb|kEZDLa2-jkL7^8+_mt**^7W+Dy(~^eMTNdNiTDr}%@`??|ZeT1@$GhawM; zY;Fh0fw&EKUB;GuVw5ED`)|fjgq%h;uBg_?E{L2eAO+~{(HgN0y|vTvDJX3p%P%~3 zMSFOk1@3$%*WTbpx~)?G`{zmR^Pknn*w1`!Kh~afuCG1}?Yw+IhO?=vrhp4G)$9CV zf1le@sK7o^ox4Kt<`3!`Vdku1GH>={P1B1-EUt(UlqTb(-i%YUN@?SHe(HaxCpp&q z4?Rg%VB5nBxn`f57J|EVE7 zy<_?LF4|vAN6gaPZLnchkWbn`<5%#%hRZYO_o|CA<=tCw$67|QO-0E&J;_-(VR;M7 z?B$JWY0JwE?R0U!j1{|>(@0@DUjh1U$1`l2P6r%~xg&NM79TWtfP)bk>(8g`*pIFy zgLLzonI`G6U8P0BGRg`OJsm zB^#QGI7kjkhjj9~HG|s%0I8s{ctknQ?JG4`FjbxexOVz`#zmn%#s{NPIe0g#hwK!A z39h4kQ;ZLK;r`@0+p65QF;nmAXUOkt9uqh8-m34%uZ@V`D`b0O+xko!-nl&7`SGGH z-nl%!vo;wGl3+?xFZAWVE6}K;Kvp+Zxi8@V(_r-SJCtHV+JFZhd{--o0mke@#^oNR z)ik_7z>D56jzEQ%t^wfdyi0yjD+!c}=L|DfF`fqhi7%{95Fm-LinPcvM}9xu8H2U@ zkVRyXiBQ6Vv?wrKNBJMSj)5gY0LifE;Q0_h5^NgSF%)nM($m(qxb@pr%5-!1_u22o zz6B5zG1)r*4owfH&T*PEcUR~nUnGU)yjfWD?d;s=C9GL>__lO{dV5P$yV6VXuKOI~ zKUiC7_O=DmGXMQEaXwOMpT8=>=^amUq8;i**E<4HL>B?12`S?)ba4sA zXRf?R$*=k4qtMF;yQ4i=By9U&rg^%t%J@FhNyg84d}}t)_C?qHtoZ09zz*|qsXhNj zNXo14#v+bu2WRTaDVsw>se0}9_8_w8ZhAnOC|xe~sxHvX@^UntPq)>_bfVSA$1!)^ zcMTJC`uw7@_BPe=>gl=X?t4yhn=!VVajMcPdX;wPOrA1+|8&a&+NohTS9V4!``z*O zuhrR$4|Mi!m$CY%f{a@}ljWCWX!DfXp8Ew z@uzyAR})dRWZ5jww9FBqT}S|~U0z%GqAK`XIDidZH2HhT9(v(8*JSH5I6WLd#UUVo z&OJGMutVh^V{46t2tg;fc3b3|?K+Ts+P@}#>O+7KwY0=M^D3{U*IYc9?F55Q!vWH; z^ z9tKlH0LVc?_jy1W*4}^=Cc(>pzv`T2&t90dJ&0)Cmh0vg_+$KHs!3YwUqi~C9bSO@ z;iXJs1OaQKAi&3AN5OQLBwIRMyQb!UC=lMaxV;I7*{sbg8LlYKGp;_s`#BAWuwC((cp7jL#W>j1eyC6JpXg`dy1 zOcsP{rdIZAGUp=7wOvs+UVuIL>8C}@iCJ zi9l5;$JX|H|9dD^t=N1DURwxAKuaUI*59&eJ5S`$Y`D7>b~gWH|20G92loxze#uZ3r@8K`(w>UWz-^~H za6U7yXl`>y=J1?0%o1^rV)JxuZv0PVjyw0M(T%gpA(E{>dX{)raesTM8)V_)w2heQ z4vTBG?A7Sz=40R3QZL+T%XJiW*b9+CPg&&=r=9M$2WkAko;}PItF3a9Of9J0A^H-$ zylsIyo{+wHw6Bw?vOSerb}X4R`}~yscD-^3A~oDQRl2`bvXC+m8Dy3o&!^gRPKP7) z-&AqVXnFl;{r0zU%GC8>KXGf4aI7u0o~iOLge=faH;peGeRH_!;U0DN^k3HFE9a z+j?uIq9^`Q-N96CQjy@z8cxJ8ibHtbXC;<;bjR;J6%AJ~vu;mhW<&(07_;g+EH9{p}(=`*o+q^vCTpZG_G& z^Ig;rbsR}UoEMS>55Yqb4Z%hix6$O25 zKtr}v+*`JqzJC@!XJ;t$w({g(yyAT$8-)P_rhLmEIP+SL)=a=j{R;+b1&szN)e3q( zgzihCxM;v0n!mvE`Ugwx#xd2NIwdZ&xhbb6d&t&4=faHEmzMKIwrmy!J9{xq^S1}+ z~2za8F$mBb?R#~KXo4(*d#Y9K$~Fsv>k{C++>anC{ru6?HZpQ zt29t~PtrZ8WhI}vt^5u@KbeW{M{AgJ(dnK@f#}*4vjIJbM}2 zIL?_Jwcaz%xvgcf&H2=9)HDp=ENQH_#M~7x%yCvnmmfQ94`~_x^Aznr%M2SIf9C-< z;tNcDtAEUA=JKZ-y8-cGJ{>`@UYc)wSoWOO+YE&Qb;bv|63;mZ_AFPdJyNpS96JX_9zHVhk+>=MEMDqR(OKclim)3--GdZRW1zS0gS zL9A2z@U>`i^~wD-jRWom@^M9d%5R_X+TpZ_&8LkgxGCNcGw+J7xxZ1{!R?s|rO-;# zeu@o_rzbQr*!FY@M5QELVez&=O20V`0VijME0#WaNnG$_=QgeTJDmSBOw{6PYrBex zmRjYQm>G!uq8M(BbpLEISQ?kqLR!wGUE(9lgDqCXo;WUtR5&Ww@kS< zrj?@El)c$XzWDe}#H3vB$tGJ4IIOIv30obcoD0ZU2{M0)0)6=5>V zoZM>X#hK5dr=pn9UHxvcQIV1&^wL)B;XsEs)8XX`9^>Jk_7lGVW+}d|^_fK!e-9$m zT91QxuoWuF$c&)LhXB>%q%}j;GlSx%*hnLW$o4HZI>=>C`ia6%TXT)^G=qO-@s6Fpu ztH5-93L+z7AD;MbuOBzI!+nwZAZJ$Pjhb_McdO@Zk&CFo67W`to~ZY_0mV}8N7<|& zdVi;oOx$($$?)PyyB4lvZXG-W0>pe=I9gs`g#Kx<`26p{@iqbPA2igr)T?AXQeeb( z!28oKgE6THaZ$Q;j}`Rt)4Onm7xoM8UCh^7m@1s}?57L`O%1^P=j5?Q3&y)&&c8D@mktyN2qK|gry6LoGWKZflG@)SpVx#G zxq3GLJ%rUf%pfoqqrPd4kal+o8k)!_9%&6jKgLr=NQ4J~EluGYX6J*SyDbVZl z!rgVttUBv_#Ah7~l_Vl&|6FDj8g7UyxHJki_SG_|f<`{gx^dxKQ5c53lMsWt z{J%eSSbcH?L7bXW%45DZcdw-c`ymaX;m3td3K)CooOD+HFUL2Nodkpah!a^6AM_;&N(62rx(9V+?KIH!6S@d!Al?BZRAILc1;8|*W%{_TUcySy!4 zGA5n3orbtiVm4UOzwsW4hTJBg&%y8btIw#Dt25Ez#l()`7SDJyfOp5zy@ojI+)J)J znLPgX7jWtIkT-X4oq(1n*?ex~m-)>u8aI=C!2r4a<%FbXc!#6LB6cCOWNDSd+gVW^ z50CY6$c-ee^c6TYH{j{`FxU6rx3t*pK>aekOE7iJIF$7c;Rjs?I4Dlo-YKr6#+dt6 z=SOrC2sH?Wyz!59&d=t?pCog2i5+;WioY1HOg~rGVd8Fy9h0M$P{LAV_R--&qsk-0 z2?3kNvNMvPZDG8QM*Cprx=&%RoN47(+`-Xf{@*OJG+u~R^Z&j~EAV~tvMoj$TPF_= zc7HkfEH97Z+-eY@jZL6xH6e>4)-#=^Nb8)LR2SBqRu=^m>9X(IE3Trzt9$`wCISBW z%IPHX;qfba@yk1?K0cVZpn4IaXWA8R*8rVu-`_^l*d|h~MHD7CEKK`{^0NS~V(qmNu(KZ3j-FFsNFi7A+uY*U^@qFlLL`LJkM6Mly8Tv%g}I=c z;znKK6S2^)x4;+qRNIoGRMwLLoh7r+rpgc4mGEUl&=xz}f=Plc!xL$h-5i>#jV)Yue z&SMxV8%6AC#MtnSrPb2(WBq+ju!u3O94Yhr4^1`s`Rc9DdJHmEOa@7PVgpR$LLS!}NdViJfBE(0rvo9Kx8$_h z-2%Ksr3d`Qi=3u5=K9J;gRUB?&wuJhF(gM@>FVQsZKK0Eyu&b{P4KufItpf8f+T-91ti-NL!nyX&wf%><2+L%QnIB^h0>v${xg|(F{Lm$h0}%<;BH#~Y%7}BCQUOC{2QhqW`2@V}uujt@E8x(OcuD0D$M9n6 z>`FCU?94XQi$SnGXo{Hh40_OR!p9sJ&l_&Uc0{36OwmT91Sx0R9N(BwT+FwBV{H?4 zbmH8Hv z)c=F75`BvM_WMlaF{ver*XSYdRSc_^&sBF4E|D(puHW9Tq=+U~&BiDU^5GNGtBa#J z)6M?0%U+bS{?k|{Mv7lXvD!%=FIx+~kE%r9aA#2o#g&O+qXRt4+|sNQz*~x(dOaDs zrjvB=m+$4JDE;~5lRrOHZi_uv;x~|0kZGQ^{(8(BfD!EJpxVq5HYib@2t_SG|ma%3x0ZX`TiyG{Uj85gbLq+q0SYLE1n~E zalJey=IDJB_X1FZqm&GGo;HrO6Lrvf9L~E?CbWAS?CW>q6u*O~lJ%rwa(|$T)sHuZ zPx^K)JI*@xgCiV&`ap%Sn(o@Uf^zXpJKN@{uo+nUBUPvsYBNUNC3}1(!wg2JUlLK{+KoSfx9vu+U5g=84V+SE*>z9FgXLViqn++?TlZVE}lKF z|Ey?JSoh;2N1miNy1n&^ez-~OJoKvcD!CSfZ*qEajqrK<7LG3ELM>=REl53`*G_f-kI^mz)E*l{~9DlQUzSoQh_Y zi4pY~GE;!IJx9h6YFWK3x1R2zGxs9oILIc9Q(%RAl9>M9uIj+Q6H`;K;;$da8jt1( zM$OKUwty;_TvIKq51$^X3hsU z=5;2EFRS3HK6WNR%i<~uvo3Z*#J2#wstplemw%Q;{1;zMO;rEJWu}6djDs#mz(qmI z%%{AB-$+x*yFiC3kNwGy)*~LPEn)-ob10cu)3^#|$Fz4W>i3!~J%gqIVbg5>mF&37 z63^m_Kwj(yw66BZNcq_w28##VFQr0|pEy|FqvM-Y|we*5_YF&@-T8a#Pe05I) z8-Y|L#jeYfr_Gl)m70=#i)2=GXhkg`MSr})9eXQZpy)&8ci73HSXRbk#p0ryzP2EO zJC88cH|z<=iTr{#i6+OV*>HohDdjIZzT1%Y_qhCPHDNbllay#y{(a3kAcJz5)QAtB zJh}f$1hOM&_p6-Y;3F-i_i$?`iYLx0WPG(ct22{R1OBEGyUY6*4%b=d*YrF)-)L{7 z&2SFkd8f&vat{nlmJ226^Uue;=35%Pz;az!*<~`T9}CqrnKn=1o~+hqH>F>T%?@3R zJ}uuqnHZ8!@99c}D(=|W^{z|Nzk&#`p>f%mW)T}6e<1fGL)iH zw1m8vaw{{+vA=o#^^Ww#AoigxQdTUR{Om4JS2sIBu@Gj_Cyj+TC+NqQ$g-(8&0`X& z#-l$Y<@egZE$Pv{NEQNUa!1s+x2z(6xK!AT^}QTW_CpKg^AueJq|Ca@*MkQkEVmIO zWF)AihpC^T%|YTJnsoZD#g#sm8x`LL)|$UOKQvPA^g^gd!Yjg8G~qcM9%Rj!$I=AQ zr=aI7965p<4PPg);Wx6KKx3;c6SRTmw)8 zxh>_XoTh_tx)m{;Pq@6_5yDV;f_4~0f1|@U{^9!mxnv4V$h`U+JslFgyMD2>x^F3f zaI>%N_hQoJjo2;!Zrl5QUH(E_A|RpyCY<9t5^?U9tBJe-I&cR-JIUGO%`k)Qi0L0~ z5v5J;D`VI?GRtf6*RB>9Q;Fw$SX$_l=f8dashjqA^!kB#I^OMhNNC_D^FxsuTUHlI zFAe>NY?ClTRLja`1WRON-Pz*QY?cEHOe?F1uDU(w&bT6My}zazqcm`2pUe zG^kM*hAh0`c?cGrQ2In0e!f4W+CBB9p~{O60->XB1^aKF%a73RdJa-W0!oiWtN}k7 zONWRy()~=Y_;=xb%1-3;1oRe*VEtB2uwD6d-@PlQfUirmjt5`cW>M^)bM_Toh%TmX zosB%Ih{g+9G(0>Db4tr^h4=sjye+?@?RLB4_Q)pYbJZSH2~8c&!kkCYb*!z;8tqoF zS$Ye<`-Al>GG^0cB*Om9&~UA@-CdWO=HI=Litb~WWYkkG$f8g@sZ(DItHFm)wq1We zn}$3X13HK0vZ$a*#urFll*C-55lN2jd^Wu|!IrMUhNh&mM?sUWkw`c%%*7CaORk+Agm}CrM&QV?YqgXCY0)4EoQ7FaN5^I#Xr4qGkq` z_m8}#5P@GL!srwC+ZwPne|A){3HLSngWSmJfN$8EI%oupGIb1P)&zv3C$xpdmt?R0 zihnH;qgS@{rdPXyjX$iKcz?X5f1o?_7x0k(%%B(?423zbjmGLngMbH;<%y9D+I(P@ zvW8Z);lm19B=89fOYEyB{mTD?EGzyfFhDwIhRI0ETV&MO5REnM6|NAKD@cM9vadl5 zz_%Vx!ktp-Hr=?W_SPOHeq=muYq_ZvpnjAMWEKxh&A`;If@e3p)GCFkKH+_V9=+z- zQ|%~fIB;=7kDuP39wS7q6a}zTD zDA3?z9w6)qs`j7Gk*d-t@ZINrNQO3wfM))3Sl5qD#*6%1(G-vMfn>~bBY20lS=Q~4 z*C+Qu$tUf`u_kn0I5Vh>0Z6?=$#_?y%u{@!Q?H#>@=dmxTPU@8j77-#QiBQ9imA0q zZL(g;B9b={dieH*GAC6{-aOEiIY-ISdpVQ_;S{$OiBD);yN0mm5L3;-)f{ewmcsI) zu(i5J8P;XFJLn+YIOPa{o|oIi_X7h^gE{6ar?P8~Jxftia=3JhJlNQh0RQ- zK88g;shuu?CZAl-ez5ww9yCxXXHeQXn!u=q!*SNy*DQGwETaip6kx&@3Nx>H^>oa| z==&u9S2vXH)V)iyhStXBn1)sYokwE-oU%kqBPb_Jj~-0VyzNG$$Xp|qcRr(i*?LF$ zI|J@e&f*NNSU;fMZsxW)IZrE!pf`PQILL<1XO)O2IX&s*Gg16LlQd9L#c-yk(5Iy# zs>kr0--U6qps8z=tT-H%*Zb_WNUg|7y(Ib-kt7YE!EQ|HzN+y2SmlJ>TXUiej@2tF zAl5hQQ<7LRYqJIlP!>N&7&mSz7r>SVs`#mhp8L>TSIBbH$3T72dVTiN7bNA$(I#^N zp2U7FDffdJW`f-=7y%q2%hafXzOQ7lK`Ypw!cfOykSsC%M8*ChVjbG^HW8(K!dg`+ z5?nts0vl5^1wSPPoCOf|!0h|8B}4l0$6Kk0Y2}*dUHYuMTDO#iW#ZFmA71Heas7+? zaZ38-stHXd!@smfQgx0e7iOQL&&+mv_;mkWm&h+qX0-kza18W+9!xe5v40&HLR6>( z7sFDo5R?6#=t|m`@91iFLofY2+*Ep6+w`Hyx>YXZ?l#^W*LH{U;@{uTxJ*Z38gpW4 z{&P>bA5&i83?KhIgZd}})Fnr}+X9*vaj+z1$AmAn|DYZl>fWeM&znll_AElyd5k}W z>#WE0CjmdA2OWSd!hLo}sKYePSx#^3yJts6|A4Lry3EwOzp8^BjtlV3o|*4!Fm$=L z1ZCs4X(L=63#T|5YXPvySaEMR_Ku!UvYBO0-@XR-%l_DGKy?rsX^HF=cbRY3u)|37p*gi__}NJ7}6Pp=!=G^DfN0ue37b9JHbrcUxQU9uJejS?jM`Z-*D6VySy?tD$nO_xbXlRTJ8bAaMS~b&m zXsDSJyq{(;^0s!8MxW(vuRy}Rjm;5q#AI~xnMr;LEJ!KPYl{Ivow8&X89_f(-$aCz zUP1I51Z04*zYHyHM6F;v86>n(F@bG4HcWHmoIMB38kT4yX&q&x?|=b7 z?xtof+5Zz^%(`CuZIZlHx4e*-lnjW3y%KhE9Kf-G>E~%6)hYEO!@E#**F5^2%=?oq zz}i$Kk3L15)UyA*Y9cTv(lUe*;k&@K|N2jKA3uI`9MhS@_C=4D;kvusEF4l0V8EFq%J+z}?eQ?txMt!Bu8;8u>2xx++*Z(V_#K2T_-$^lIzrp#VW1~Xs)+0YWC518RtU_mt4LI#HW z*o=iEnL5KZs}vd5LJC;TqB#$IL1VX$XodYled#1WpohkO`M+ftNKm%I{Al9qPOvbs zFlt$_flNF4vH4=tPTY>>C@`@T*#(fIr!@jgbP)>Qh~)p!9a3cw8Dzl*|A+3d8ZINX z6wKR!+{a2V%>wZ=}s7Zo~5`ME%spU$KUVY zokXTSCTi0==UE13s6vFFuB06aEkH3}1gZD0wO9?j11(|GdJK3U>wf|whsZ3?l593^ zhU`{;sW4Uoj}DJi+KZKRT45RD2Ws}iNz4V7G2L7kQsPshRDY2Xe6U^UhIJjpry`&% zzs5!6phJ^E{7Dra4jO6=BNjFlIwC_QwV)P{^COE#>S`@ydVfNY!UcN>-+z$dbDS+V z;yn#b>jIK~XqK_a_KAwqfX+`ggPyu;I2Xx!a0M&`Y1D_TBn%o&=7C%mZcOIC55-#6h#w@oxEC18EuN8V$QJn)Bu;h8HY0gD$}Bv9y#{IC<%sty+B%-;^9 zC$;p`jG_CI9+5Q^vW>SH1la^Z9K!-@{V(<&gN56u6YL&RJi3_#6`5tbg@t-*VIAIA zv|sljLJ?5Y0pF_KVM?P62O+t$pxI() zp|OFA7DyVAoYBlExyUS91K6)6ML{$e(b{Nd^Ny06(xZ5me{dlFN7$$RQ)U$J-sZo` zhf{+JZw|RpzD4_y9VNY$;*z;fOD4G zKvXzrT($S>Ay7Gl034q)bA=6&T$k5>|7Y+u(D^Ugx3=ss9^rMd79~3g&CuG~sjxjK zRU^BP;`!T1?vk2+5b1{)S_(9VL+eK$$zSv{LBd3-74z$42nHD}7*di`d0AC7qEmVL zvB~Q(Is4*Gsnrd5WKe0TQw@0Jz)Tt{xHr?Ls^xbcgLZCg+QVj^r-Qk{!gVKZ( zl0W9Hsz$MHW3)Iiq(r8?n(QE6NkfP1C^98WBiV?(R~2GW)%j(<>YIQ)HcUg7xtYYl zO3srLoq3S?#_3i`CX^M;R5TH%A~qqEdrxk$9wR->0n5i$r5T zo;(PxA4jz}^8p(x-`=b4X8n4C#8+u0Qh5R%-5w?%fPZiCz%ypo(~ipn$rdk_Hi_zX zcGRqjv~t4D#r>99w*A$a8&1XI>Y8Pg7^4B*_+h}Xyw@2EV>7Q=i5dMp*k>K}-TQr@ zXVd>-U_;4szLMHPshVZphbz=@ruE(JP;FL%vTM2{6UZ%LWWdTP)QPQT(%w)|u8lq3 ziz1)$?7~|r3;Mt`vN2I`vU(s^6)VvtyFdk2v}4N&cd$DswLVmja$xt}QsiJl;9xDE^6I;AU&cp(`u4wvx&+U48>*eMfh`#Ut!Ve!h zj+k(0fv>-xcstimCA8hIprWIhk*IKt0v59^oQY=pMtWY}I)JB^o*Kab+6xz2^3E1H zK`BG)n~q#OLoEl>!6ht2`$(wRTt5m!CONx39;O;ovkbajm`*9&X4<}a`Ri`{A_8&u zaIr!x1ZIpoYpU|WU304P^~GKz%mM7bBt}bZK++c9@*}KaermkYN$}|UVr;M#Tux%W z`b_rkc2|Y?t4rYV^|JfLmJ8(&^=b|E)6$ZTE4_O=rHO39#ot7yTbWM60GDOO3CDLu zI;q@NF^9LEqr{&mLJ*+F{D4wF{N?Nn6b3wnlcB6iy3>Mf9&=pQ)ICgwA@Yd+8ZWBW*wYS7k4rl zh48LCZKSLup5L@i$OQ%$(=JjJW$KCQH@q%7>N9zmWc%iQ*(+5pxiVt(%nF^UJh}-c zY`JnIZx;8v>K&XMVlOK+HcakO?_^m4S<0QIat*o)Z-~H|Ya8i=;0)tC1r4tyyo8Ld zr3{5kJ394RYV?OA;sZbrew!W~J+=m&5meY+bpyVowsQ|!$7Rt;3=R35LrCX?{vhrh zL7R;1V(VXJoqy@0^|Mnig&1xYZ#EavI_5kA*WEO_;x{7btXL=lA~v|I{SJW{LR)UK zRGW1o?{63Nd}$BMU93|(^Bm3ahEi4W8#M&}XR6(3Zzk-gR8iPCXN${L`evTrE+J>O zFkQyF2fNz(EiIp;+$;<_#Q4O!Yr~&J4_zdWcVcxor~gW3GIYgJbB=Fo9h}gtyt~^R z2;nhG;m+Evjb8fH^458BXbyNU)V$)DdPS&oISX5SSyIqfY+(f22TW*;^{cb*tlPnh z(Ik^LRrUkTx;3#OfvCTA-7QE;#+6Q;xo#Q<$|l0K32xL)H0p_JCp|7+>U45%iQSD> ztJg-_ZvFCZ|W zL`C0k5~g!!uT02r0R@Mj1ln~ouR z*j8~}m@H&=wBk?br2-wp_kC>~-D|63UTL-D%_Y8@i)61seeV0Lnob6`Gu}EQ{Ii+k zahU05lFdzNOdg_4KG4z(tb=hEsfziJ_+iVDOk{8n^$c6%8^r#mKpqzG@NvcA3-)$D z?5>}@@-;O$yWKc4mAaIS@M+v6bm2{IG+r8p0~7OgwMA$50i7Ogj&=lDnc$9L(1J;K z)N=a8rgr!(;xOnxE%I?4{E%ZH0=-g^@m;pNb}hcwwA-fv_pV}{6PD%H^9}s=5;y8f zV*IMcNA}2tI<-3;ttP2>YL4sRdM?i^?z9#ey`^Qrj?;*{xq%vjfq%*^YNaz-p)?Wy zBL@#PU=XxEh3wm27kEt=rA{U_04F6U*+=pf2sja9*5BFjeq^?6MKEQsN9!( zD|(@U+@v#tZ^QP0sn@?Pr zB8>5!zB^z#s+n+QxQ(?JnZrCSsJWEH@t70%7c*{bVNGRuq&1dn$zz6F4IhwfJQCP@t!(MxUNyF23QKnh|l zsKtIIA3)^tj!{Y6Fivp_BuJx0)(FNNTK*R1j-a{NFNhv$zcyRpog6PdK8|%p=qxSQ z_z=|_a&|Z%wg2f8m;8<2WmKmJK;ly(2()f%>9{%M>S#xjr3dbqV(b|3V|=DX+X%mn zhW)$EYVo1gbv*N>dlQR~#LyX8Fj>u`!ER~#V9O(YgQM#-A6BW>El9hR(d7AGFTQPL zJsaCf47(=SY7zdE>QANN?_JR(UOg_Jj=ETl`*yG>7T+(9r z>L1cyUc?P0)6?$G z>&xLUCI$6Nqg@NTW8maEW>e1KHYJ*4YF*aR_Nf!}-qNT!B1d!TW|k4~NXaGOu@=%V zVqZ_p406pgU%oH@!=06=@F>4%J$;>h{Gzp`m%8b|*wNJvYCF4Wv~H_?e@g*8jk35K zna&@;Zkwqu&vHF$opl!@ZM2Nlr%Svb)F~#u9-GsMf30m`;2G)e&fhcPwf;Q!nY!Te zpmgnEiD2p#sw5om#uot`xUe}`ZcxoMZbymU!mUT^=hxnFFGrT$W`uY=v2k$O)i%@W z#J5G5Uz)kNw3@>l?)HeU_^V{&Qt-G_m1OkciDNI9`fWV>QR~!m#xiV#xAgWdRlf<% zUDm^A6#B#o@KtJ=*QuKlB43Sskm%j|yNm0(>lGO(7$@x~|GRZsb7x`miEc#3*2v5* zOP4wl^ZvNT^(RP>Z)I08yUSI;e>;Evc7pEN?U9{F?467J)*^E+_x(IVIgLTH$&>L! zEx_;Uw>x-A#~1!$q6^ydV57SIzy~~B?YUh;uN3SJoO-q-b)e2nI(OHnt@)cN89fW% zsfvrfjqKF|&%LSlfm6w&x5rruor1zI2a~j@on^vI@#6|~Uz?+;n!YPXTO>f)Q#`%m#=51hvDVU7>63>Xrg7 z^^L5Iu%-O$JD9;+ei-gkzzx&kQqEwo2r;0zNdRy4?*cJfzsGe(k=YAw76hzT4g}4sJ-{p19FG_Zv{k-^mp|hXE-@S~&LGg|+n|!=j z>6=3ZfXGF=(0H$6?L$`HjbQZ?+=TjoQL99cdeSGm(si0h>6Q~w;n@t zod^iqA?g+8W8(i#oHF*}C4PkBO6}{%BL<+x@d-9l@5VmDc-5nRPdHB{?)&xcy&l~g z60#P~96&MF!uXBL|LEw!qYzkW^n^2xbh0kcxFaurjEAF8(y{Q!i<|a|w92ypjhPcTOk$#P)d= z3_71tVeU`@?#&lads5qI2McJs51U7~I*R2^af%z0sPN_=fVa0P;7N{)Mqy`*e}?+D z3X1l65mR~?`-!c0C{6MxZKS<4 zMu58YmZ^AA(sS|d3nOVRTMaSa@o*HaDY14Xs;ZpBg_vWMx=FH(;~xK*Q;m`sZbN}I zn5`in3ntlluPSF1@rq(6;FGRWD{J6-ZPH?Nga>piZ?eH9TvkxnL&5xplO|rQiFie^ zin=Hh>vIg}+Xn*`;@)z=K_Mh2%c&STR#f&_vA(dEWFZ!kF`OH$@vP`PJ)hETi$-W; zqXaf(3}wC(G|OZCB^9O-zA=4>dt~lqJCVr%V`V?oc|v;(9ytqzmU6-9NDv4i?m2M< z5v$hqUHd|Rq9{9$@FVmeqiIQ_`ExIs%Q`|>28Z$%@~w3aL92~`MSUhEM^6-L!R^8K@F`?E znwC!BP}Yb%8y9*1%hD==^cmFw-9vs;*4;E$`eu5Q;7WWj0@%mKdAHd$+lJ7uh<9oC zKEUO26-tY%)>{;~P-Z?_qtwCT!6>3E5s#J$*|37V#Y{P9q?}aySDJd$3GMC|G}4cM zW!5i-g~`Oj{;ZmjC4Y)Xx%sEL;S`yB|7o^Wm1|qxuvJ~IRJv@bq#(H`t|pkDNQg?` zhGR$d&rsTbrqy^g;tsvJ$Aj{J^d2=PW@Y69{=lKL7~SuPnpKCNMrLrP?09)yE7V3m zBaBki2{6(RcYRg;XOzt{&K_gT!ZXTTU5w_Uc^-(vWN-)E4lnIG+i8jFZB$g?Y$R-^ zDQWgy1b2y;^_8h3x!rqn!V*=LxC_ZrW*x|c1Vm`dztQp0?S}a{Hy7)2ZL92mg3gmZ zKLNx?tqyAoPf3+Vyjg?vmsUSfCo^uQ&SvjMV869q#CdwhQEdLd3=$8KDF0RYGBR=@ z`l8}I?tz09lRZ7~o-sW#gPLYhaI!VoI%ckDTSM`h329%0uxreEOuantZcjte6}y5u z%ZE&w)@&)-#G?wez#{Z3Wcj zEVRV*d`b73;)kko-!HWpsn_0`@^WcKtEsJxTh<8<>6KE_WUP60Xk=3ZHt z&K1KFV~-PEnkh*APiYv=r&eBa8KP+}igL#lpDD5|md%;uyy;h#U}pJvll3n@P$_A| zS$fNMeOcsZag_TKiW~S{0M9PQ-HB-Lh+9Kmou)q9NwV0n_KMHn02l9p#h$4|O!%S1InT{pNvI0CdIIp_1&LCpaU(YAzg0S6 zS&AhVdpom*3|={D|J-)p%=S2~!)jFJo~<-VBi{;xxkb&|kbJ(7jKsS?i?qSxC%D!j zmOOBIke8NVGS*KV?F`_)wohF1Cf}q!**Ej$Z8t>}uAz9{P!uiu11L{oQ?Sm{&hB5? zqMbwBZ@;@V*^z~ldNKAMH6r|9is#A^Q;t{U9`PKp*~>W-Z;zio^@$+xyixAajVOr- zNqUb^HT;9T5bC{sH(&aMEy&m6s+*@C3f^x#=nd4*2bVy`{B66jA&J%x#eMY`-=4V; zZGZTRu?xiP!%!iwDK-iN~DQ77YG~$eX^&N>cn#ztOVF{@$tYI=e zSh;_Hn8ADv+xeb4z} zrx@urG~&N-byCzG{`l(ee;AmrI7tik43j=t%>EMY{V2i$@{$W)_N90=y^bTq515Yl z!}}+(VV`JJf2Wr&{%cZVaI&h`R?~n2% zulbu)lTJ}k#(HQr%el7yaSW=qryqp?obVEaL~gyA9i&4Sx}zk#G!emX)-W?F9wFZ5 z84RR>*@Qo~vpy6;8vf)COz1E6$8EKz4>s-0m=?tt&s{aA9Yfg3Ii7Np6meWrY4O8X zQS^qL-IN4I6N-Y!rgUmPK-Ge)n&FEy!SjHJgDxu}ez*bKjl3?@7SLxn+4wCB8r>h|nnxtl-JfJCQ?ga0eR> zal$xThM{EW$|Ov-ee+32|IP%`t(9bEBX@D&+ex~2+0B}GJ;yRpPSP(d_xQyS*Zv6G-8i!QZR1`9irqKZPrGJNjEHOQlxs z_yQ`T0RDrZS8s$C>W8Rps9qAE4`ac^!udZu0fp9`Insip|2Sa0|Kk9H{=ZhEMTLFw zHg|Rkw-9?p<3-~oz3;o>xh06Wkz?Q603DbGKmBgE;Hu4Rg1sKG29D`p4sVwIEsX-s zbW98?JM2{XuNA(sO0IXzVK=V6{Sdvt*HqJ)S+IB=P61XH27fgr3dX-gvN7p3H(+ig zrVlPD!k?erZSncEtRXE;I6QYJb2AFADi;2!HqISsT=0_C7~|aa2txx|j2|LS^a47+ zm46_CntYjegBM67EA25G;5_tG-DhPFkblc2OfkZeHSu-qJ`q!!2wvI^r}y%kvF^wl3T>kd-tT-Uue|>oy^7dGnxq8P7aFotlZ!9?6?$68hGM-?fVXWoMp8L z$l)Wd2c zY1O{`)ivXFe<7T1KQiLneH-oSdOttT$t8rUrE{-GFJ>Az#bYh9QESbYT^q2|gz(!H zy>NSSi)Yb_JijW^i}_N4FY!-E(bSp@09%T$D4VW+cfR%hxG~bxZ|;L3`Me`;-bMU{ zfke^_S-PX_Ur$N7x5?zx)EEz*&*F~brW>K?7^NiHLyBZZQ2sbRWtz{VhJ#(OjNQ^O6A0o<1yEvp?-?hU4^BF1<^pztu7Fvj{*gO+)YrlS-$uHi8#7*G7 zbVEvuHrKuQELE?#Lu}9YF6^Svwz=nk@bjt>ehpNPvA^@nI~fhfL*$ zk8ih|UoRc+l&R|K&(If`Jt#qxx}(3!h}*}*em_GTO(%SQb#~j*{5iZEYGe+4@~bXG zuRd~bIVdE`Pg~o)L}Z_5L;TDP^|E-g<4$lyFa2z@k|`mv*kOXo$lKaye1%MG1LbF< zqKwa;xC;xe7x4VNstWwQUld1gk=Vkqh+-=IxmE(jIA7$~wZ~|>nI!bGOc((-3E~Cc zdc0MUB)$Ay9a{!HapQ@yZ3fC`ICOhuBh>b$Fk&^ZT8oR6OlcYWZZea7?e~M`G3S^R^9irp$NpKoiNc3ZE|FegHP~qsvjF^0uTg@9*RK4G}!LKd8gNrQJ-v#6#SE+~ zHg9^}6P*D?0dJrOwuc$}s_>RfGsrSukD9v=OY#>NIKgtYYXz0(4@ym#X+Ro6XGpVyl$4h3B;}7@{Zhj3ZVSi zGAS+~>()4{wwRQVMsmmMsFW2#T#Hqz4mC`x@xvsrHIbmNpFpuZh-QFLBbDI5u_KD} z&X2b^%CWayS(b1&b;b886S)(b;87n@ERNg`i{HK_xtX76%qKo?)LKV{Y8Os8vv3H4*0#YYWM0 z=P>=*k~k1K$TbMN&WTvNr33gkemx?##oe)tj4UO|mE)%uRJ=$>Ik9@G6!#BK-%v2L z3M9vuTKXC3qH~&<2iDNABAWYprs9vMNbu>LVD1xTeyRWUL$%4XVY)b96UfAQN7*5V zl8N+tFZ;WXBxbR_Zs{nIpx03I*d?ic?aXmfYCzfkt7Oq@;7~Luiuq%axX`=>!)ale zs;Ba+Pls6B$;D3%-C{?eXP+a;FR(OEWN`^&dXy61JUau%O^NxXxmob0l?uo)tihZf z8-h1)Y>V8!xr3qY=9QpO20StQQcpjr4st2VkaTMj%sLt1<0aeFJaz{?tOecWziyf> zPFzw#y(;fs<|p}1+){NbdaYI+TF2y8=ag2(ht!_G6lcQ~@5{+k^hfg{XY+;M8YGW% z=DNgm^+nEg;7)>Y6`0;t3y3-sQKnN+j+Du_L$hV``mB{_c|5I4frd4(NM)4!$(7yd zs@kKW#M5#kau_7TXOH&Z8&~Wq8r~&?Q`(fqFs?a}+a2e|;qgkb?0&Ur68foAzUm8c z-tVOr>?LeUO@TNhY;&Zk2Q1InZ@PbTV>z#FbnYACEw}Hk<-g*Nwa2Q9bn%Q{!o733 ze-3nv{>&c6eQY_^1oVH&)!h1?lIoEd2qz}$TytZ{k(LrK9$`Y^EG?Ljbyq(jyn>zZ zvP@>%BC#ZZ+^|tSrF9t9H^N@_p!ZKeNDR#frl-2A*9=u0=jy>l03c&pM6jGM`Dk`J zXPc{^J`n?ZbV%tYgw58_!h$<@@OW?ev%C9~;%~b<-zevqD_}a{jWzZPTrf_Y#jm0h z;7Y~7iZ55lHV&}OeeUqT5Kj?8U^IKuDM5dVAy+c9Q3-f{!!h<+Yp3fe{hfQvJe%rL z%JE@A9G9e_3ss=e-e-K+M;A4vD<26D1L9KAfB zCH};PfRAP3|7N0RY zBs(t+tU>{MPFJrcfsu-X4JiL9zzz1_0^IM6#T#3$pDR0;|0%$2v`kmn2(Y7lKB@^^ z1$OKEY0-@^V-o)fG-kvZ-3e|xICl`=na59q{XxNk}% zgyFTFX7qnmU?42AXEh?v1E_K{KC}CzwUwe+qqAt0z6pe(W^O$!7D^J^wReBmRl+No z7y7}-LPk|WL}H1z;oeU_$dkAv`d2L7*K-QTN=9;idwCCzZm;fsJ#O!QJ15EUAen3j z_&6f7^zCm;?N{xsWb5Plh@Y(i&IR9`A2)*e_%x5C(L_v#drq5s02U=@)Z23^E+>aS z-Ejp4y+7w31>dHhVwLb|&PfYz@9QfcS$B{F5KNQpiB4Htcr`D}8jiicL-kLEtR>Id zRBo+9+b~3>INuSRAv}+=)nw9b)mA^Ov-_M}*2o?l$^b{-1Dw0`PRRu4uJ{*xI3hkT z+)P)yZm3c-zMtCK02ohilWE7qt4}7vgqhME#K}u#W?)o&twkrJLIl1o)or8_uTU zz%J%pYRy}v`lgb3m+b&`7~am1O*9{RDiHFYOCL_D=vayMimnyqcZS6N{{9}Ln4joN z9uVdL8dO))g$GB@_$b$8#Mpemv>L=VUy{)2YF|Iyx}&>5$BxmC~`6%KX)2f48w^c zWUOQW^r>5&gW?WNUyiWddL~lJtMVz|urc;pC|Z$}G%zrvZPL|^95a&A&8i&@&MGL| z#YHMW0__j*MU`6aszx0UtY54e!hon#gyUI;vpl;YU$l{+NY$yAL$2A?9Qfb}40S3m zgZd?rI{H?n^KpCN3uvjYC5~7kg6)phs9{9`K7IB+B*NCRn0QiehFgf2z}5(^$Sg&Z zIITq2=xby7`{R15PUzVrkU8WmO&*RukwiV_k20-3*6FS7dWTO*GwT)Vu@B^k*$tv% z3Xhrsdl1;rDb&`&o z{=TwExMyWZL?iT|Q{AmA83OFSI4I#>o0q0wTAfl6&X{=162aMzfWbp-<@LD!Ilpr!#@Ro57h#C4WhxCsNQEO^Hf{Ihi^uuJ7 zJ_V>Z5>UG!5j`1e2}A^!y8BIu%i4V*ZE8Bd6R#=f4o*#TY(dGuAj7MaYCGn>EEXL2 zsj1d>C<9M{m}24~G6V2b7c8089WyVlv2NYBte&oWUr2lx2MibKS*tcvxyL4%zUUd3 zu>O!AG0|JlT_&bnBWUzl$52f=&knNK2xNqq_<11=cRJlg*~kzH_g&t}_DqD)Or-nR zVfTi~`d7L;v29$<;xSEy$LSAU>pKr8zRj184xZgjXhUP`jdR-{sX#ot12@VJ9zS2B zM?46?`1REe6QCO?JFxB);9Z4DV;#B<=F;77c;Lz<12i3w6t!}=*#B0MzV*}XUJZVU z!h^0Oi};?@UypB3EKRJ-bY-P%BdGDK0l{VzLIXA%uP=LDcPv@X4zq_#xd_v0&-$#C zS3Ul$W4?4R?z-63&}ol-$}yf!nH+{q1Uk>+qJhL{H6Ul^*hrU<6T8hyn~%^H_2BpB zxFKdFj#MH&@eoPw7!z?{u5Aqg9Wa2P@@7Ex)t6L)7qHB^!neMSkdG8Y1o(!m9$iIq`E^0FfOGPs0^EsFSvBmEI zXeR8(77Tf1%Tm{~kmx@TP1dJl1D{xg!wGu8U(%JOV+(~t;I47>tHl;IS{Q~U!&S8+ zXvq2j6V-Q5is8q9WLC}mjcZ#tzD!resAVa~%39JaqURSb%+7Re5L~=EM%2Chx4Xqi zVhLWy!nAUr_xEIQGYB)x)CjeGnbU0%fc!lTNd1uhz8*UTOj9I}0?KQ6p>a4|sYQ<& z8{j;-YkpZq@B8RY&*AAlanSq}DVI;5m|aY}EK0Cq?b2w0-8Wo2^EsYa#W{Q^-t93b z(XGV1_H^7~-n3xnS)cXX4>lD0Wcn^MTc^;!!IvG=#1x~sQym^$*;2~I-HnV15FwEw z40m-RLJR{Y zM-&@St{dT1lvnaEr*;VY$CTQ%I1=hw^h@U48-f{Hq-(7R;t;pRdEC&@ z5S!N@>y!KW{rB376dN5BNsE1{GfN9S>a|@A&D!5ZKySd5!NIUSlc`zYonapuQdKiD zjZSV(!jOtY?=`uMW=tERn{fOXolFL45giRy0%%uBO6l)MQc5WU7Q;x9~u?Hed@DL7?qHw56Px1L)=Y zy(DQk@xuFGxCq2?d(E}h%DxktB=s4ZQX^7U{u+?%#WP-)dg5wHT#m6zH|?|j!)fh# zYMP9=ug0=HE(M+81)2Z%ZKN#26QAi}-sg7xmm&wPLOa81rP|HPccb}SZD{*0WO}P- zSN;C|bY(jCCo*L+pRX}5%c$3pcYv=1<$9&^UCjM!PC@o#cf(O;=-O--VtTRW2}hHU z-5$B@42_iQ=1QI@i-kG@2}q_WNMA*ditcFK|LR zGKyAEI>y`V7N3Wo*yT@&1eBTeA=0&*YvyWL3R^r2CnbDU*~V}Ik17pVT>vd9@@M5grWHT_5Rp=Z8^h5?7}MFRIp$mL+1BKfy#*O_fW<9CB$osNF+Ce!Iu$1 zl|sb$)q(J=<2wGD4c&(+3mPC>AjxBO(Z}060XO)Sh!`S%Hnnlh-a?3BNdYXUjV_qDwc{_lvW9Yy~ z@8$(%LDYekys8iToLKeI2!yLIN3mExd|zK*-z@o@Xl-qU?4F#^3IT*r?hIf=@1j)s z?f6$4aIrc`76u|3LdnuL6KwzV9(E`#1OY>+|BZ=?`!D-E^(QFkt8m%SZW# zTB>d?G5de|`2~fcQHsx`Jf-Fjk+fX}I`4G$NjhnXT3kInohYV>AftVFeQB<$OCLrR z&h6vVsUX>#eT7n-j{!K9sisP|YB7Jd%8gz`!be+cVyM#2)k&QVIiDu~v+A0_?JCU+R^ZTDh8r}1t730u&n(PGk>lf56arIBQUbU|T9vZBp3e_1*` z=&=N2f$d?MxoPjwq?)3khHO8XK4E*M=6l(S{Z#kLtr+AGoeF>qI*MekVy-tRJ|?Pa zzN?R1A!pw!e?}?AGW8ETt^UXoEiQj#?Vi1FT1!!t617s1?1mY!3E7S^{44$F%|heWc{gqi3xxqCnq+<`?mTj{59ws zA9o&e>cJ_IG<+7EA83SMEY_YofTb@^nwQ117aGqixH9O(5_4J-w{|8;Y=eQ48qky@ zL<|?QiVPHgp*qzjJ4F)4&~3!&e?__!qt`_zwo-K2wgWgt6*J7>>3W@rIWsCT4OtM| zNR-pwM&C%s!jn{ASHivW$^7BK3hvNM4^BFVG!FNy1)^Y33_gP3KHm&S-wcOhKIu9h zY&XSoxGJ%xhT`;sjrfIpQ%OSvPVxRMavbAgH z-x_Zwc;nCSr4rd|*xV=TKnOV-3}PDuG}G#t7xf{sHN0Sl2E83Kq$TM=t;%|@KT~CR zIT$VZ7V!^lOq7OkMf!&0s-}dQ&z#3=1zm;<4$i@4*7rw+uuG*5&A>&uxfGI56q5-= zkVxJ%CPp*C8D9PuYmWaXi&AkQcoF2j%H^4#pK3#P2mAF+H;T zt_GOY)b~$GtZK0b?#hcKlQGQ|^YVKlVzpWgPCX>gPyhhzjS3g_o9N}Z&vV_YGpNYd zvBhiL_UFJ*M3$aU)yv@ z_a(9aC zH;5p7FO#{@CP+KCk+n2Qd`2T!CKbd>!fmTLV0vnC{F*n10g7qY)FxQ(aV@*`dk~DL zIS_6yUdTm+g5Ei$Ploi}+0P<#pqA(FClQRVkLzDD?f-O~)XdHi6>oygD{}A56I3NZ zn_$UJ=N1zP+_Uu~#YMNu6NsIlp2~T)R#;(9`gq3uH&M?Yyb#R9)xf@*5Ff zMa@8C;ezw{d>*?P{(J$-f8HG1N*>-CK5mf|s02qJ^h?nFaA#zuhOGSJCM%y*Nu>p1 z5N>&p-Y;U*Yo-UDTGd4+5*W6l)K9N-13qc@1vpb4G#FHn=S(;HL0B&j4@Ix6y_dz^= zQ`|tbJ?D;cv*pkKOWsI(nFc@xQ65GCK)PjnLy`cLhrT|yaYOr7lFr3$6DS9Lx=%5$e$G>u!OGV5!naf2bCPNbYU zxbM0!ET2eAX5Pq2>U9R0-qiW1mvUVz8ec(*Qs@l3Qhtppe!}B$*t**E7=Gy+RCK(!;h(Inl8P>$taqOg*~nfJ<_^) z9Y0h#09t$^3R_>>*oYxL?;*FtH95P#A8OqKC$LHGr|ODwlM2x4tC<{xSfsyRq(_lG zEc6jlqEI$CYCvI(1?UkawBmH=6H=tFWZM^IEeojs&kg(|jt(%YN(XYS&jnril4>yp zM6i6|w;@hgT-oC&xutIZP;ICSB!nTb9gFI(qyfQ{=LZ96A!_?N-h&#l?j`Y7jx1fW z>b_a(F0n3=>AHc*k57sqVMP=|KE5?wnbE$Z>X&fSt@syzp=x8&3A%_ElFktD?C}>8 ze^_`*LZboX-+;pM566U4!Qs{q$Bt9M;^q77+u=KaISMNnlbqXGB^s4V83>x*qptS_ zHxp;t?!3=1N}ez4C?}F(Pb|g;)-)r(t+7Ee3AHe+Iwsi#r$w(aGMf_<*HiqJc=O5j zp_B%fRlE6pimQ73<&=rSrI1T)H>rYb`qgiR_)w|B7+_C7SRMCmu7p+W7a)y!tTjtv zH{+5_Kg`$aQg>9^L;Ybqr*W{#WMz6QUtPP&hcl|cI)lagi0nv(BNAG`50Qi#YJ>$%*RPB#_d}kbC}A;T9R0ahL);_F}q_+5vSS#^sFmqq!?vr@oy3S1toD~`gAz& zi1-7XCqPC3oplA?WZb4Ua#4bMXIJC(tTNxioBUujhx|ZoYaD6!fP5xn=`C5XJ71vO zBurgi=M0xPEHh*n(xRsjJa`mvH~WDgS5bAw#a|Flfj`Ax`{KH|ZS*nQEk#HXI!rzy zpP@;RX`}aB@_>$BAakOaxA<3U-$BS6DE7dJDu$YbW6jXclE@)}A;XBr26Bh)dr?5@ zgzMe`MyKYQA;>M-+MI^27vwKcX1aM>o3-dwB~PZh^4%tww}7>(GhfG`>GE-pZU@BW z_#H4Ir%m%)2=>ByER1@Ph@;-es=>qQxDdJs^Ojn6B0X?HI?}2uhM?gJ)2`teZ}+A3 zZZ{y8d1Y)1Y?}^nE#m@Db1Lw>hyV%ftr*6Anu(XkK@bmDkyEU>+5rqoNSl!Ni3h3T z^o9lM@A;?3!`%KEhnZTG-bd~lbYq8}R+|UXL@pV4mX4|v`pn$T+Q=R^BMO_znbm2B zh};|EO_`2`X0P@V_~Aa_y{>{E4nAJ#5ch8W&5I;}KkR^WCfyKZLLV^z5+I?4y8#9| zUw^Q+s}_T>VY)0K^7t7Rnue(lBjh8k_sBg_y;To7KY6lU5SO`5C4Q7;i0AJ+yMJr9 zsoi5-1TGAL@w$G!sU2VWNqSe0Zx?@T(b$|QxHs~6EC9QK~`!KGh_Ygd3&OHbx z1Ws{QiNKWf;8RiN$%emMY3+N@!fcQ%@tZ5BmQZw1*23Yh8)6gO@q7~hcH^)x)4zt$ zWMc6hgyY+M5OM0Y+!>TIu%-hI7?eeI5w*xSN5clh@3`y6$YevkLjc@pp9(yXXOT4> zXtPt>_r!l+?!TmbiM`89(hlDRAsOOjOO>|Z6I}UHD~c<=9_u-m*$qT72@=eaTrrfb zN^Q;`e^>$!xt5;5ZMFW=xCHLM*%uz3?|_KXqE+IAOvp0=F##@NgulY3?5mz3{;z>o z+Fqx%J#+)kYk9z|9pO|%%;rA_hfm^%_zWS`4*={_R;Mr@PPY4nzz6M{nkML6Desyt z_@*Qj@d*SzzO79~X-n>xvfh3woSN23*goII&V5=&S`2|FD z&<*;w6gvS@FnE!D=JASwLAF#0Fxt?!24ePh|o&t@{xgyYPvMOAX?$A1$yp0_;WRBRHwFW>d6cZ((73 zqndT2`Vy_bm{PQ%{Z|e~F8bKR@T z3}7?WNwQ|?MLp@HHcc2!AAR(d%n*^Vw*hr<=+!jj5m+(x<7dYu3>$Nw-N^+l8pN$< z!=fzgBNrRK32U)ivWc{cv!+FX z+)nXN)MUS&KL!Km1%lx8+Rjb}<1#WzBhy+BmvEbgMZ{ZBNTp~ zl-`_wEEU72`Ft7kiuCDTfED}0p}3GX{N`qQN9d{Smd*H{?vQv@IrM4n;%Kq-=InTS zQ`qw|;@_F7--pIBwP(fM@24b!?}bxU)A)X`JuV*jE|v|IlGeZ715wj%kWFT#rU$9a zmNQKM9KieMI%+alk3s$n@09uyZ1I51{x=w{D3oj8QZw6?&tW>x93Zo~`qzL*y{Lia z-UU|~=X(~2w?Z0a5HV?BT;Y#kD-HtBzNSB3GM$#mMfgWDBSsTlOmHFFS+S7)CyI=3 zIb=C1LilCQ8*#N`LN~?tLFk3H6U=<@r7@~3W8pLQg)g*}QAbBkd**c4nOkF(gP-v? z8V`Yb+H^U>`uQ{nVM%)PnE&l~Q$sAEJ0!Am>-WsZ>~3?DAg^UZyuKFK4_~>1yV3Jm z1132vV*)Bj?uIG>!=tFE_zN0mw;|6b-LAMXC;mGWJvMvJc(`3gdn~wZ(FBbPW6v`% zE1)^J9i*!P>6dC3Tnj4}2imCRkEer9iU+@}1cez3)ByV%aZ9yDCjmzlRVdfi9+;Mj z^JSxUYlSVp+_PR&?tl@m%PiR*JPQLp9AuZ^UOYx~P>}fh8}g+U+}ZY2+^lS3W;sL~ zr~c!{5z{{xy1rg8jr69#5(<)D*rOIuWlS3=S&#=Xo?u{-si^^fac)aO2d*O;9M=BNs=P&m90#f%#m=UN z;rY^pB%3>?3|@xV&d}A8EBn$*ZLJ4ci-p2zwBhobCv=$GbnW^{D|&{c_8Uo1B4-ws zl~c(KwsL+Vtbc1+BVlp>;<0cg92MJ%5`HkCg2H#d1Y-!NahK~MzWRV^J8a0dY+i{b zPg%rz{9on(AFnCXR21I2qmuZ)Cq0X(zK9T}r7<1tlvFG6*1~0+SW9cXiJ{|uFD2k` zH_5ki@pz$r$8691eu!K!(<#7)?VN3&1%LbJ&FKmh97WScL%)xlO@9l7Q_I+n6JQ}j zUwYa0E85zSbo)GV|NGyp>W(!YW=Z6nr6{R*RS4+;r4F3o-I#L?(b#n=A5 ztn&OWxV)-~?dt#i>OnQ!Gr4AWRm!=~)myl6mY|9=Qzk}KR^I>?Xq{emG#Ih2!C`(Vi-=*(&QLZ@ z8W!~=DExK*?eMw_R?Jk0UjQ4L8mjhm{5M02u>PA@n4*=1XLR_~Ca%N1c-$?4OxEt& ziV23?gtj@cI@>;!VC3XH9w6Cfu$DNV1vlaOk@ETnUU#q1`)Cn`(%>1d*8@>0l}V~Y z5pnLZX}ZtigtWS}m;3kh?4(ojs1cMX|DIs>Ari|n{Y+g`wsQI3NRk8yS%Xi&g$Q1Y zfI0D1Ro_>Z@3rm>*&Hh5jr#D_(yIZn&s4(~QY-CwO)mAaWLv?f&j4tDGWl`od0Jqb zd7p^kK@_v{`3VDi$pz*}1F$e9x)oe&->Qz59qc7Ro5_yp=dNcp^hstW>-e zVJSUL8cRU#P((!keT3EcW#!QIgtjBC*(2O8QxpqfTa>-zcRT^|Bt$csZ@J)(m3W1o z^2#gUY7x2KT#)TDI02MN-$V`bs4^50xvm1h@T}jM6R4694?-#YJ=OmHwXeAz!jN7} z0D?8UxEjfbmOBU#>0EIxZ0T&?Qxx`2W!N)G?;kEBO z3*^N6?oOCx8QNB&=Uk&QMqHPdXmV*XOlw`=ZFd!5O4c*|vKk(|akziNwT#1@L+8rK z$K!EvG|Vf~?0u3H-i;SJgUk+N$-flEuNznkSHYNBWOmYO^?p|_;i5|Vo8J4SF$ z%mF!btUHR(;eLU#k@m%?2f{aM&EEZ7YTOr+$ATtCv#2RHk@7%frP5@0p(!N(-Wk8P z1m+GbICny$W!!fJ_lH9dCz*Hq?`Zyt`qDqls9^F6KPdpc>CcdO{lUK9`k%SA5c=@A zgpTjbXnBdN#ZqBQeSsk^n%ds| z{L&VJQwv+oCvjB;zomhtXIb^t=%rfs&%H?C=Xj{rz;$q(&;#E3ql~q#LPPLsPCT3~ zg)(n5x~CWb8fV5fXd9xV_8L<%%|o;qb)Fzy1`ICcj>q;~oy0$BywH?BZs=$xRzIU# z204yFax{43#-{cromD7DT{K&IjRxs`sqeJ;LHL;@=jgBNi{`^=smLZ{i2m(V9ix0| z$B0bgR^#gvL_zz56t{O=nC>QSj1vQ`bs1eVexklcWByt;^#XJ%131!USX6{ukyUK1~`RCq#Ge@Pel1^63 zdlS(ynr`yGo%r`ZUtGat-)vsn3icn=cl#HbE;jcME8~ZaVut;wHJ$esBerTuRlp1* zw%SzRc8X9utuoqnlBrl%-)Y{6~mphKT{ z%pHg0V#|xi#%iTq0dZ4x!}g9n+Vu5Z7wR)vNDl=MTt8V`4@DY)X2Y6C2WJCkkF!5p zo8BmDpfP-5&XEY&-rxHBTkpjY1xr7Viv&AP+`xs#H>G~`_FvqfMl8n=ho5JQOlX7| zUq;Rt$RXM>IE8)Jj-|zhd+1BQ3PLqw=!I+Hwq$~7OTsrJ7==5~oH4}ETjtgvG)Vuf zK?qPvkY*kyRaON!jR%p>CJe+XZ02E`O7!t7#nlFT#pdZ85M#Y4%z#h2)yw>>v4Th2 z9)HS~LUuEiL!g5*CGy%5j1_6{=B^@7aRwt6_S^Wgtt(kW@Kxt$4FS`ePa~ITeF^%= z4r*kLmF&+N>89{KyAbi^eFgNh2jU!{L-alg~zwz0o6C^Dc5(fU-8f1MbM)+Ru$U7_2gH2$g;uL~S z{{~McGeE&mL8c>*f(!{)0yBq{VW;S2*l-Ukf-uL-DBlA!CwFxL9eF6*Bn>z9al)O8k$VBK%cEOnDXg@-H=7S6HLuxsYw#E5xx<4>Z1h zjvGw6R*0-flO{$f@GPX7W6(8h>fw>yI2`C}zp`%Q`RIKAi|7_a!u&w8jmS&-4#P$O z5m26dVL?s>8=(L)#(Lq3WFkv)BEV1$)Kp4rS!d~Xg;vNl4SVF5fb?bawU|G4jW|mv zCPf^;zWPopjq{;Ev%jODABx|GS_PR6QcFWh^wv9!<$}g{M5E?_kaf+1Mi?O;GtQu9 z0-tq_Ps#=Q)Di*NmJF>}V^4h;dS_#g<{&zqE!0HV&ao2uxI^+_*f@aI^8kgSGIFXhaClS%f+rfP=8F;pC7F>$}*44pl7OeN%*S^!o$ER+P^LXyh_PN^e zH-mY2(AoSvN&OPVX!ZIeuo|Qr&EWNLswlXAo1c$T+{rsoHF0}!Ro)q%-SKvG)n4v% z=|n=@;qK|y6sX7Vc?VFA=GVzOa_c(ZSuu2P&CUweZBFr;W&L`tVQh=f|M?PpNR0UW z8TqNd@zjYm95&EtgI#m`A#HC{(gDc!dAw2a#PP~rl8D&sFmz(ald`Q({v{2)ar<_2 ze>|AH<@Fpa=q*vz;l=a5&nbVkWAS#?b9!yTS5ztrP_wD7U&)7h@9V6;&?gRbvQ*iXf#412%)7hc*toia`zE5py zZ1r`DH&KR)5#V~5UfuP4a$3E$PK2sJ0MW5{?%A}M#}3%Nw|l;R>9iSs^&t$rY<^_! zdRl)X1autls;j>r;~0B#b&&+M@lQNF(C2Sva(KRp$D9r4zO*>!t$!Fa9bH{p0|cUhbT zTLFu7yC1!U9(=FImb$^ZX1PQDyY9)O;2%M-a&si}pyCq)h+X(OHj@WM`u{|dwAD$O z3U!Vxf0B5~nTTdE3ezOEm3xXKWQmh4B*)q_xZBuEd#l`C^2&Zn%Q4dIv7e_U|RO)urs|^AL^-u&!J|24>hkqxR zsK{KGG%|++mbl5M=G@4QigL^=@-WHC zX9%od*)Yp!yja8@;BSXpXz6y*58=rBS_WN?XflU`lm|~yL8WXe2sHj5ym}wFd+$V{ z+6|q(mOmAr6C&;@c`J?g)IP6wawg(ry)E~PA2TrkBI~IY_52{Az^4xs!H>hK?oWi{ z`~KsrC6a{M>yh^>(eW}9@5Mz+5k$|fylTA>eLMLU7qOM%ZX&_Ar9wm+hAg%tAUQ<6 zb+wDxdi+MW(L$qVMW;(Nw{Bs4R@WQ>(6aWtz`Ku{--dUWL8MS1YX`um$(V^U+?G)?H<&PH7oV7&QSu*df`+hky zqNY{+s`vZ)HJAR`dp{>d?>)0GPpr_uL-6AcNb=F{`9af>CAYI5*v0Ct_Co%0WaH-= zm?=G$9kCyD94|rlEN^@IZrAxXd9Q7|^bXLf zt|VA|1web~y%_3^dZU?BKDSRFb^)DiD;%EAJr3QAuxKw!PYhH~OWz~eG{lu(=X+2L z8J1jBMpTE@`{JemEp)zf$=|0(!jD&G#R6&(I(f$tO>9$frvwcrtPg{ zJ$t;Xrp@=fJ=`8azPRqDSB3OUlz{CpBhZ9F%6`OB;Tlz=67-JZ-qY2D*b{Fvu%Ke> zpPe)ZqMQ}!dtF_jN%H0?C5pVM_QPn6{`j!Gv)i4S^bZzdJ0@P}B;gClX38CjBF>|U zIxr|@!_^g~VsN+(I87+ouB>byM5K0u+dZPh(38cX2}>jc9MOD5_JF^&1T>Hs5|z$2 zYHNSv{Ij79CN3|ev4?GxlgH1`Dc@_ehrAmK@9>LcPFVw`t^6*jSmTASo3}R4zT+65 zqSwGkQk%s-M$*H9C51Y>VWBW?i($2MyitlOu!r?Y{m?IGi6w6^ZvdSz!}PuYN5e8BYgwQIe&7Uksu_dz62vasqN?2R>f@hc zT;pRgY91rnBP6U3$iWIICR6%96zX8DXcZlXi(eEcA=dZ*YgqcG^eso{yQK9mN1EYS ziH@T*XU|3|35{}$cbUiavs5z@7!Nvt*I7!-`ww9^rmx!;oQVM0s(dZO_Ao}yWHz|4 zO*#SZ^6AW1dh3LOalJhwo&|JiEnn@h+jyPF$ZR#l*U_nCsTscDBsy;$%nsMTpGADU zhLu?By7Cv|;ML@JSh^e@3pO^BaJbpjYcr@E4aX6$qQhlkW)G|+NcZCJRs_uo$7kqA zivdhxtPJG{*CPfzVOR3kRaNq30ATI8yH zLZZW~bn|5!stmrUr;5rz;=D}m3xX?#G4}y6y8>#S)dfdJ?V+p_RS{?3Z|y%(w3=~Q z1}LfVcWpueN;;sln9sY59Ij=Am@a$_S7Tfr;oXRgJV!u0nTbRyvl$MR{NDlJdyGl* z*-mFxIMEqAR0-Q3I^!5LVKg9XL8V6F5#7b_muZn3P%EhnB+WZQ4apbz$}meNHZxz< z)h-gj-{?u)5mW52$}VKfJFrx`C&B98k8n}CSB-VL1b=y;c>$~}<+x%ovWMd!XDuYi zhIn?I9R)<{4Y?uP^m#`~+jTlO)`LSa64+hUfnRb6Dx7^VU%}{c{Dsgn_1BjC0A<3S zuC^%?Du9|{7(xI1{YR~prT*5$SW%YN>drp<*sMTN`U+}FV9_Aw#u;W7&0z)On(K%N z60h}E@^k5KkU+JzXI7Tc*|T$c)$ZkNP*tW3ptIS?D#nMgxT(pC@z@a>ZTmC=mavjdJ{+v|n&t?`P{(dIadl+y$MlM6}ACR~nb@p#V3CR{u- zb0cpFe>63y_y;1M^3AGEYgWn7k4?etgeCJUY4*baEByB~747&fEr4&)pt!Ch<#ufg zK)1>pg=+*<`a+l)8)s8tM}FElM#Ao7%~DFzurKr*e&o`ku)Qc9V7+;pbP9B9G~dd=#1&8Xz12n@U>6htIyiR#TBvnL-F>H^C>?PPN7a8@Llt;P7vkN8+gIV+ z28XhaCScY!`9Kv7So$&QvKgt>{w#&Ii2!fOBm84aw?4B1$0(iJ)r9R4;&O0u(pt@P zQkNm21Bnw>lCR4@W{%-;qE6yv8WsFEw-ozd+IAYj8LY-?W%r|LoZom_z90uce_`iz zBJFg|e zpLwL-qQ3XsuCuN85&kDcitGcO>xzZ)s;9;Q+oRSsZ+8fr8m=-_CH{~0Hvjsu~ zTuUDAmu!?+mY4|)#KvG$ks4ODkK zdkVJ)l0{JpY;T;!rX+~x#T(S!inissXkKGp_aN3u5UqB-c-4s;o?QHZ{`=&h-v4OwjJT~MUv zABRWRB18BmB(|*8UIKVVvd+LPG_zzA5qMKXL0>a*Z#%xLo-2%wB8NE{u6zK^;^GDZRYNez0P`E7 z8w!l1A}P#G@D9v=?^QonsK8FI{ae*Pe}n3aI*iJ;Bl|!0zs2Xr|1LPv)Z0qIIk73% zTz!c|9Us_1mcw?q?t0^S5RgGyucCPn(6AK^<7omYO!>MC&hKjbyJnFgLHoNpXVU0> zOcT;C6@U(X?=m6lF54SfB3CxmI?s*1x^_ILyQA-_!@3257HJmFTrvQRiiLKsZW;oU zD7$nu3GhcyXi12;x70SP1j(XL6EfT5R2)rVC;An-W6Y7*KK7sGx!i9A5Bz&Zmur24 zJi@Uj!n$<^f|6b3rDd_dG}tWc+R%P!6IlmP3pjP09~D+^+4q&k^h_*t|FrADqWDxZ zP#CSry5X;#nd90b@2+=C6kk9L*TnB*Su_{AaK84KV3&F1T?THd)Uz&dg|Bkny*ygi zz3O}fM+Sp0Vy?~~XK|k}3KG>b4r7QVkQiJz>FwDmKo*;tJuZthU|#rjISy}1Xl4P9 zP0w8A@MVhw)4U$(k4?(7@`5OcfI`1;V9M+UZ0?NAkF01)C|I15PaNb%JE%f=aZ;Mu zX*PS<`Vc8Q8zWT?Q}JXnNKPE0dIlO+%f@aYiz{)Vj8>HS+hrkOjlWd+6Z$C+2gO-V zV@zs48-doX%@DPNrpQnv9L-5G20s8uV`!!->lZf+$W@SC-X0i7M7O!eoV*rkvGr7Q z3B7&1tD39#?BXOZtG_h{V_w~MVmiyGwY$97af$5wdILN@;qAAu>Q1IN*^VAwjw5h# z062Yk7@?EKY%V!t-6X|p-4ZJY`cn)1M`6p+Go&n3r41?MOI-t<2rtqn4FK#VbZ#q|m=K;K%Gv}UG z_&Pc{9gXzAuQBaCTzm+`L5}ZsQAyVWEo}8WZCVh=2P8-v_>ZkEe2 zD2V-NAYC{~fL)#n_VQqCp;EzMx7?e4@L7V!)Q@P(ZA$qBmc|qBCqAq=YFLpX>%9Dnt1?F)pR3fL!69y=A8!e-mj!PhncZb8?t)!B75U%pge(R5``y@!D zN+K+;)Z2SZ4fgnFm4I9B7)2}ELYOhXLN0I0Vh`{lAU0XGpq5awfTV8lOx*UG^1GUq zAb0rTEkKqbiphT@smbU&tY7h0#3+`&1xw!)TrQ>{JwJz>+-JgE{B=AtDZ)KfJ(p{+%IY=8WA#=YhSIWDG z>#vtiuO1O2gDjdihxzfgxU&=<)ti>LaCbJG2?38;JJAHuOHIGmIcX_#Yk#@ww4R$m zWlTwbB|v_`eJaH0>M$Sq@Y_xka(*?j<~>fE`BC7T*yM%iGKRlxDot||FE^PNi#vm-eddo!aU>Nfh8z&EHF zM;DNe?+x_&%e!?xy}7p3wbRMX&A6(et+$E;l93vJz!&IkUb-#Kp(4~@l`vPb7Y@bQ z^cp`3tA1kTxwgV68NOZs1bwM4Doe7<`D;FFD8dW)gKX=8>gG1*-(x2#{`cFmJHh7N z*F3~aD)iQ!chP?@V3!@)uotK}c>&mUJAjEYeZkYWHAvzf$P2l56}Z&BS?r5dl5g}h zT&lPnd}CF{tNI{J^)*Rg%9#_uPcYp6ew^<5Y}@|v{A$e0`A9#xJ3}SMTuPC6`9zUL z`@Fts@e-)Hy_%cOjWED>q4snDB97bKlsh^)n)+m?cb>(L6qLS@lM#!+Y>OO$0SHB4 z6tzQAr8REDQ2Rx$ro+mmt33PfE;L%M+^?<}+HzmL-yElFZDTFYv{k+uLe4jq-;T-n zx&ENsf#96+ITgLJwQ>WqdeZtSM(2aXgq5;0>RuboKHIJ2v_!G$NEtJ3xaEys_$z^4 z`8h3D@6-n9{Ms-_Tg+qPsrx(46bxhLqe9yAG_j5zp-S&oX z@zN~mMsoYpNS^Lqo`4i4ems58c(?NxgU(JfL)ML{#6hE1NyF?EmX&A0JP+?vg?x4v zFA0&OifDQyGybq*#hO_}D1@hen|d3m2ai`5Aa1+nK=vn8JZX5~ zf62*V-|%z40NDQ@a&m^QEnzcO(B-50ne(3rcS&MmbZW!~bNm8MF$f57tvg{o3rFK- zNr$=Yt>F56l(DoW7NZ=r7;4~xgZ@N^2ys?$0au;z?x__pThIE~TeN(5?zLY&xFMiA zd(*of`!f?*ED}l)bZ9=Tn7rD4Z;zN<#`X;f;N|$Vb9LGO_Kf>0Gy#;W`u%Xwy5U0E zaQONDHab{cy{P~g-Ay>DbL3F^T3zzy<=pJ`T`x)Li6iO~#rb=`Ix9-pmbXI2Ww;>M znEwq)SKmRrpnsu>T5*56KS7usPMDw39r`Q0zWA7_FdDTbp0~d5+@e;5u2{dtsm6*r zV4Lmx5(rN4N3quTow>>i_>w=PJk=i7V=i9^f)+fBgdecD&YeR%;W8fn{-m~Bm7pMh z#3U;2&pYSz89pv4g@=-ppmXoO=9QDMwa{lqzf`(>-C<_A3~PKJDh3wqHNuMlbq9P3 zqr1q{FI};`!pIME$u$~JVgn(o#j6wm=;Nz3N&%4VD`n>rV8>ReaKEYHTDd^PlO)2mKEF5=9=xd}z@Z|H3?$r|miZdmAN*r=d*Ha(Mk`2!zbj{9%vAfEvk`_+Pjo z#Lm~epcFNgOoZ)}72;g_Yude17%a|cr6fa$iPOQOEjc{Bnm^~UiSR^C{2qTboy~sNO!v{}RJpeN| zv8e_H2zXXP7Y4qTAk`1uP_?q1vlcU2Z|0EwMjOk&0 zVY??KZ$ZLkIP0q?6se@ca)ZVwmn1CkCNB(KNcl3wf<&HVoB~05tVtgAW$LIl3uG?- zB!ktcK?_KW|@NKrcdnqW?U={r+R4q)Xl6e$ev9md|4;I6|q94 z%|r`-AH}p27sRKv@2OW30%0>ves*Z|R~0H%WHzu_6Zht|)crEhaImi5a@V!3K;2!6 zAU@Ob+daL>^bgf#e_L0IY zINZkN;{TxT*m#IZqEp|7inA*t`hh&of-KoNEr8i2jf;MC9r9mo)LCPjO$t>^<-BSv|LNh+LY2_2z{I_J*W?qMuuglY{!7i?@2(sGyU6T?r8IRQ(_Dguq>N3Id*#75@XC*5^=v z2POW33`T$xu!Rba{E?eUiK7kz>MGSPQ3sh)(0&*6u`_g>N?xZNmJ=!<=`r9?_1VMh zkn3#Y;iL#x5E=k?vv;&v#?XILY-^j{75`sM2qN1lRpviT=$=l)3_RP3;|~ugi~?Og z5U(Q_x0FK9Z-M5CWE&jQ6=^W? z>RP&YaRY*c46CLg^|Ikx{jxCfhEd2t0};c(ukPoKxxdrQ0)E%$y_wP-e(wsRH$^im zv^hm(D@Bb}y39-eI`_|G<&?wP_y?I5TnyjsFL%Ei3ek12V7-ZT~Ho)D1 znLTumvPoeV_a)q6scYM|Jp!h#Z=pNtmJE|#0R0xT`HfhIO%emYyAN*Q%bKtZgTqu9 z@N;K@@`)-n9Z3r7`}V2^x?W&=jg!Wn@osdcJ!U{%C>HvDDkb2Zcj5W zy>&eUmTQm@c^rAImn+-mSh@=}X*!!6-h!o z4Gw?xdvqR@7tW)`&)&;4JhQcLYcg0vz5CCi0v49;+naV3S6*Kiyh$#68@jH}&Z>^y zXk=3SAE-J*8C^Pn)5__BhVk(LS!?QiX{_hbIKiGS!Ulv)2Mqfj<}bpA4eVll7r(a_ zl6uh1v2DK|nk|+No8<4RIf1K7KdhECJ&b4UH|=*?IhphP4Bfkx+icqav`@{M*IjLG z$CjypD$l;L1Dyt+b+-^s&K#y;K!p$n#@)`h%U^x{F08D&{0`YIwppu3`s~vOZW*y! z0(bd6F8)1iN6;yKl-2&MGg|`SACs29{Dn*c%8r@Ar0>9jFw4AvpcY~J?$?!D!vR9+ zGFS4onyNq8xmnC#iSMilUSQ`Fehf{N6#x&&16z%bd7IU!X@s0Bn~ySr=UNMgZiUI1 zI(xa6PjH*&!n$SO`&+2sbKgs&d9({E#HT|S7}k_sAjUwK!{$08QTOZKYl@=(`@!|; z>1D^)l;pGUm!+rGn#er4vh~tDGF`GDlf9yOiwn z@X@jbeB1D7kte=ST+ux=RKs1fm8Zq}bg1d!5`w9@1JJ!EOcQ<-ba;1bXY>rF1I5hV z2v|HE?|n@V16(N{?)t5in06JA`)%v#26v$)Mja1DDtVPyKkaQ+wH zGhxL)1>;P)@?pUNx&+L0q8PD?5IO|zQ~hoT0E6*LwU+hz6J4406{~hrZbE`@E!Dvf zw085BKzl5 z*0PqTK8i}_CC)>OmmDU;f*AUZ=%b&F4YHIeX~x%H0gSb(J9!{cp=$!81i^yL zA3|GqBOYTAsBm1sW-z62859C11lS3O z^F!c_LmSY5>9_&0wIT_QOf6Zh0+r&Mffau2dI-!3<6W*1i+F#;XsnK6^DqdIgQodw zByKIBeQ5Q{0sOqk?wh$=$PIa!Fs-o};jCy?V_swFuTICI+2K+&DMyPi#zgCWNj5IX zf!FqcV*Z$hyk5iu#Nn0eDmTb-_g~2D8#gNo?1Y6tEVr~dCA9C9=?4lPu9+vu15p7q zy`)mO7L<+6S%fez3Lc)B*3eH*7_8L!>b%N^NEhSy>6m=7wP=o^_@5)NB=75Fhuf+m zwB(5VQb>MO6>6}{hifSOMUwwG!w+Jo+=eUrw9g9TSAfsfPm?5@U!P%D{*b!wj;kMg zS&1OMuw@UF?GAGeCR)=(=&y_GnAOe%gX;-uB5UH$wy*1>16+|}Wbg=t23FEFDF-*p z^+lqt(ZCp#!^O>ji>l3a3x~M@2X(wkOlV&#Jiv>>YM~yg4ndJ!cKy}Y^9M-e{(Cwb z1k<8WAC|1=m2kjt4C-T73pOP5FFgDFj8AJ|ST-)EiVt!Q7_=sGI$tlW)Y|H+l_jZG z$Xwe&<6bS!YRB>$!0{Vdsa8kn;5WosEYLvh_F$OkwHHp+jMUV2IG%=s?r*1BcIXeb zR+PO7V|+FWDG(#Y0U^bd`+@qImcm@kg5=L0eGru=F-q$OvoHe%O*=AHr#K1tCx$an zi}bgUi4}rSzH^*MqFPa zrFNs?Y0W;~LZff1qC_(>{Kp^};mWodYIU6LYceG*zCE{T(yP|jcb<{j75ivaiEV=( zlLHppZ_7K-ryBUWxQI%tuazsBY8D~sLWrT7V0YoutLn)0B!($k90&QI-~iASAEY?& z$QZKV6l$A7>Qh$rdpBI;GuI(>&U1=lN=g~Ct#EOFqjPpfwI{;`hxuXcUTW2p=Qy4! zE2o2krq1xp85#-CiqUsUA~aygeBjwHyjRLAE?TnUfXj$57z1gpOqzfNnIa;6C)|WO zbG8}^V$3dJZynmgb3sPwPa`npZWs`N6qfO=Uv3zUYYfg-UYDFZK>rJGVj*XM!=8Ld zqLKQj_^mU;|1MhEq#!>|zi_Sm>o>(sE=S7bZrYD1+)!oiV08;R4gMcQ)(V7xzhaM= zQQV8M&4EyO*PH`&u8Y;pmwfEG6B;~I0P|4Ig9A+2XF3>g7LR#psITU3_Q;dJiCV!HdG=Nc(dshRN7G5!i_=TW_|H%>jU5 zD7eX=;kH8axdV=Ir4nw;ekh)hHAx^vA2~P~x&I`6_>e%7KCjRP5b9Yw;bLVvKk|7% zYWvp1PWT{L%KAQvJOM=g^Xc6eeCTixGzoOMRcu@biU@g(5H5t>IJt}{G@S}0+5R+M z^@4TVzH_Rv;ULdgq9v6onhi&VQOwxE#-RkMy)0OXq@g)w63imj&`r|Dzq)+3qSfs< z64a+A@UZuD9o3b24@=p9>i}a-T|)`8UY7vzkrk%|o$KvKHUobCuuI#t+IDS)F~Y7h zx8@rLny`Im$x`La+S{uzJt}2j=14=ROGs8}g3BeMu3N?%!X3p}B%2Dc@q2x7Bez^O ziDF{KTTz3tr~-3k#w-@ev8xx-rMIUEhNZ<8pYDL9>ZzwlH&RlyhV#-6XGesGOU` z8{G@g-=qx$W8ms=G9(+skJcEh+D<~oZwSaU+!xXqy%9t7!u@UUe~JK_2*_;oMl9Sw z2xN}~vq70?kPrttNQi@$CM6ig7T*bqfl5;sLokNTcAJMg46NiAh!`tX;cSo1dVk+z zf<7iL0?7YR;9@-;g(^6%_#)s(WHd4IUkcQky6V?3^ZLQoT>#6CLP7?=!S!ThA0PHI zLkMl?0HttLnMQ(Z|jjY8uIMhgsM z5o2-Ll!yw-sw0bBepoOOYuVxCvb6J-nP3k<5S|>URcc`0RQ)_ zhNn@Z+*M%Gy3?qKF)xrkq|JyIKp?^IeNcjfU|i%_y2jeYQi^@3Gs}WzF)(H;ePOV1 zSeIN`KWBA8O(*c`tf_yhQhi-*@?jgQ0~vDgLt>NbPuhiS!TN;Q={b>Ep*JV@94CAH zGkz5(sd1bxY^tvSU}M((4zJB?*zVDNwXf%T-oDkx7%gzWqk~vSk*#C%HRX7{)5)5VMHW))+1`*UgVwlAl zs&6Be_AXfa_AcQAkbEv8W68bg#l7y-sKN`J{5XNa)m zlX)6L(?6keXpk;F_oIz{%UbV!+T2TXOpBrVpg)xyiN>EMAPkVJzqbkh-|zQ`O+rNXM*d(Q+kL3_k)?l!GD|Aq0Y+&SuKM<0%ySk zPNfrAkM_+w@QAI?tijp;ZSShb=Swp=@kK{$^i_jUSGcihaI8qnN8DZqHr^@?vRP|C zKXc|lSl@rC$!Br&F=2@Yyz9bD__F)uY!CS9@_umiaesE10i-W_>`@Xn?2}4(cb{*D z+lps3NSifh_jO!BJd&0$PQ`A|D0uc)w&w@7+FfJBeWm7Z9M=aa#8rJC#QPi2*2)TX z0iu$0*g?CbOd8#`ME$32xo-adb+_@FUNA75n&A5bt!Y1g4?JoTJ&W-<*3@1&h7kSZ zFVmbp5`i7ddv>kNYYRRhPL4@8pdXlVX~fF0IrgK=@!?^bPO4oJ19n&J)Px?D>^*+K zSt+ZwWyfHu)Odp=<}72FJrC8gM~(RnlKOeB+i8E%&8Mu<)gdfNF*QxDoAwpbVx-^2 zr7Q1$E_d-Q%ljRyQwk?&yyYkA|z*cVA9O{YQLe6{%ENiDow3Hs`(Q84yUiWOik-6THn#Ls}im+hDMLu zFYl2q^lbigc}${VSG{shz64X3UbZ!ppMrCM2L4PRIS!uE3Pg!;btz?ns6|*O1$CsD zqTY%S{RVbd1}~PjXQu}j)sj6xlvLzVrb4)F6!AS@!S|I4AVd7|d>S%aZLMo(tOQ2& zCSF&m8j7>eA$tzfnyL$rWNNH-ZOGPe1;@6IP*-C=F9h!{K?_yQ%@UF8y}o3QycTt0 zHub{9KV>szTrqExIrLOlACrImv$808uo3&^ZgmFN+G!cP6rRXrLCDnIeA;p5eWH1< zD}1;XVF|i$!1MDo@z!Xkk+Fn-2KwVqNjJW!GlV60u{GhdLRY6&1UcM6{ACT?Kk%*g z4)csz^L_BV{eP+0UI;J2=1DDxjyF0kOylFc3$7CrTz@}LR5@Vm&p57&*n##o+9v14 zy4Y|%+?|qjl%>RDDMWnW9teBQ*y(hhqAJtLg|ARe0NQHD48vMv=I4C88im7ghoT-~ z-WWy5LQ#Ff5}i5(f^Ij`u)+B6f6wz{GSnH=F|e14l4ztmI>1K+?%rKx`l|n8E(Cwl z3544Yj*ie}cH5g8eLd;wIL{8QtOMI$AY5DmBv`g6CdcrIQQK6?xi1+|J>13t4) zNL|bnspr&8q?~06-~y-}L3p~IKm%g0Hp!hm{=HGloc47hlxJknM*b9oU)7*&76e{W zr0_EvmQ4EHya6trBD$HYzmr%z+0$SYAOW?YHd+(}HXTm5+5;r#1jqVqHC3z4CSVw< zlMnVzj~#S_^s^RhBlB?sMUK3~*zTs#2Ph)!3kWCM6N(<^FWM;aVzuE@G}ec(WPDtV zi4$kUqsQyI*2@MEq1QyT!l34pW)6CqXf1dbL07}>|R!s{M(+Ysb}hDEl|Mb z7EfZ$s>zNseCiyo;-p%!ut9KNu&Ph|aht5SGSq)=b*)+>GLog#B)G-nR~b1PR==5E zr+U$YcVrzDOHr`FWf@!8dwOvaM8j;BAT=dbqi}iw}9Y zaCw;?rjTFmjFs*Rs`hx%@hQI*Bgmo~^0%@Hf+PTl21oB#o~EkzP-2Tk@qpA>hJ)7w zugRabbHln63GwjUu0|ceEbZn4zG0IX@~UiwWFIH? zuu}v}A2c_~@+v9W_Z|ky*n`XWfyzt8{&{Yh@wNJgjA0VFUx7HM`e8i+dm!PaBeFAP z@xbhqo(DvV&rB*@$4@F)BH;Luv;D2;%WaQhDsz$kbYpz~o^W1{RGA^t=XJ{vPi!Gxi z@>nzFiT1=#FV9z!m7YJ~O~KT5CwP9Ff37jl&^a@>ySUt#jO8}IWxEpWPK)d@f4iZ6 z+3%95X%SRzNO+qcS2(PEzVLE7DcQX% z$V>r#!Ex01!^rh9poGS9r)pqA0Wc5(|iFd(p^kuq%WFFfFR0DIup$ZAI%bE4^Kr4>zbknhD!=; zq3PpVB5&+Rw{y8GCaq;$w|667PEM>3?8QclCD&tfjr1VHP0rH|;)METAFbCMAkt!i zlWvUHz95bn2fneI@B=BLcv~YqP-IE9f?N;YwJRMJSqZH0fQFRE&8ij+cDZ>u$yIGR zAO4o67Vz8@9s<7>YK#y*(7d+{f+(wrBn}f^3Y0!$MIFOeNmM73Qu9V}eWfyW)MLkZhhdrNoR;GpVxA=pvfjS~}?(-&r zCQXo%Qim^s0SVa-hmyj^)yB`sd8M23;o!Qi15L>QWJe1AoZBCPsm zOnL_;X^gC35s@@R$Wj02dT6ib57gs-nHi;gh>S7LXz;lBWBT=hA~+v0yG$lln5AK~ z2fZ^tV&^d-+t;B)p@hW++f%yNiRpl@)FFRBZ(xSN;)>3P;@hlu1DO@*8 zK^B$CHhN{^$k2=NJikf|IGCVP8(XPmjtq`aieS#7W4KG5IkF-qT(hsbqV|hwqQg4T zl0M@B(!J48m-&d9j(06*JMcB-p7F9%LmWxpL{zW}SmA^t*GX9k#Ys?QB7tH&=>AfX zj6X$l*U-q&7@xJzsbF_<3y=rZb>gqty#?|cWZ1J*SpLvcu1786{w+m(;X`ErWr@F( zt*d4n4^{madF!_2Z%Pd~82{vBRggQR_=Z(;bq*Z2%oj{i_$<> z9npeXXl^BJ3=5U8O+D9AnWlE zaApH@iYB}Up>`}y1#}R{W)i>xLvX-Axzj`k>neXnelY%w*F+NHX!g#aj^7=yZCQqm zW7>u%Tz~{gM)=>Zu#$A9h$IyfygB=Cfc((pu|j&V$YR|!6b)${pfP2eUla#u8Z0A{ zyJlSlGDvCWw^iS?O39@J4d`8W%A&gx_fo8x88__tEwDQy&v>(I@qrwq`er$8QI>%6 zN7e>A$ZA;Z^{88e1?z1atH8is&fRTtt)U=MXObdFjNe}Ca zu_24bu#9JnlVopXIjCz74+P(s*F!vvw^qi3Q)&N|b)c~MopgBx_Z5vBpL?88mI$IA z%1|BVmt9{U$o(uKlOoa5qOuMGcR;32E#q_qinM^D)TwRIyCFk^U&cc-HIXPbvNWAg zxF>~oml{;dBY@(kFlh(HJ!{6AEWh_{S2Ah@^PIuQ!9*gI=>lIuAoW`mFO+sRR5cQW zCXBVIi5O1%Psaw<#S~r$6e{3(Fyf%%u~grr9O=VPP$6u?9V>zmiZ)&?B{fBtQ8W<= z^=Cy*g2I`I;xDU)VICkO}3wQ^x)lP(Oio*I3q`x5GaEx33;KG}Q_R{QFWpV=UsN~bH891DW*c_)FK~UXWAW24uC0yYY#Q+QIO0mP34<)=;9^CYA{X3J~ z0;By9r#fdIs4S$nqass6z+y9zK5Hv#ffDnM_y>6RpAT!&S;C5?%)#!IKI0`u+DL-J z4BXMGXKlv&M@f*gVy#7i^3lElRC+3tH~$7G{GHy$_}?9c^H)TcsB|gt@1)J&{)Kz_ z5k73tTms<=+-!PSGa>{Wy=!(Q>;#Y>8H1o_(D9)h&vnD<$PZ9bCKGT|)-bWify8C$ z84+1tGUUQk#iB+#)YPlcq*|@%kp$n3imCT@Eln3|)1xDE!0t*(XE@81_1OIn&9udM z2!-#gia=#mR`9P(^`502b#Ra!q|CU9#Lx|UGhOfiC^P^?^INGX9Q%DDA#(9_Ijw|A zYLk%L<=n<&%j`qVpIT2Bk>$YgA->;seED(=?{sMgjS zM)@xPX5;4giTd3I-X3Nv!WVr6uKh6l*n6DJsR@}lHer_68zSUWsXzBZPP^*+m)EqxrEXJ!g7Jx#M3PJ04dh#RuIHJP5SreoZO ze(F!>Ra+>ay}zqT_kgaN0hBZKv50(*xatB1%oXav~L6rrr?=iYwTPtmfm zfbZ?obYEuP;gz-g(EeRMyK;hwwVl#+{&WsIIizff731S^fO|6mhXcB_V0nx;r zH8!ngHsP+!Q9iChqFT#nXa&-srJ@toV&p$0o}X3bTO#L!HRbzM@!t2)@UE7${ClM1 zs^O~=-Y}PiL)?~SJG)ZU=~wgYxlxjkr9Qjh{W%jh)#JpLZzc36eI^)4K>tbs?SF;) ztd)(aN&-B)^lrbD9WV`*xFq=_sM`sZR*3?mFAX4m?j(ut$nmpc+B(oSI1@kM@7Q}< zA0zKFCY;6rrkb}fAAt$WUkO$E&o12sKfFWq2)}Oiie=v=J#GOy0g%T0A3>z~y&;Q+Aoc5?NC*)ZNECPq?ukwW~_@>Mxhz;pK}2tNq_t?EPQjW(MXM01V7{v6ExdK9>!G4+U>m zT6*yb2U^VRsl)Wf*HIUVaQbaUJuDe%Dap@TjCbfZ?v+W6Hx$@7SU&T~Z=65_@e8LG z4Iqy<`un^E)4$$5C-=7}=X*odI@;&?lcyuk=yTL%(|X{D`W#)1$6d(8uCK!9_@8^9 zm+Q-&y||{EJ-R&IZpw}x!)9Jr=^*=YcN(D0h|ms?GIivcMtREu4r=}HY`b(EhDxkA zpj}tl^N5*CIMDNIT2rISm0kS)UDxXh9|(ou-XpPw@!`oJYfY==kEZA-Kv^7Qb^-N# zqZOwzG|k!>5Rs)>uz$(f{cQ=?_NSdd_B3;E?66KE%i`k#PTa}9n&(==mvUj8rKxU? zAL~~PA<^N@zPsNO$;9(x1#mJK!coDw*+AOi?RHYKr6U%~`Ca#P_qmLZ>B@Y93rHld z))|amBh*UJfMWOVuWo3#1fxV7dQ%~1%upH)@Dd&~^)h!8AldM9bW{E=m`xP}^!HtE z^;cLJ9zkpC`J)t_V?XW|a1KpUhJHcK37SX%ZU=GAX!??6&@$_$1_@wtDUjTtw& zRf|h@^;-H4^-VU+H&^^2UkDn%QS)IsNQADs&kL`a^sBzZeex3pHHXa;g5?*_D0A*yJB1=u#qK;V1#+ouLx+t)`=2Ly6rm<@1q_hXT_=xL0Htg6sh z_{t7*mdXUz_uMFQAG7r=WT)o?Zq)3F<~wGgt%&O|2P;+xoWxCNC>duWc-pV8i=*!w zzF)y}itAIgn0@j%fm}+`6~M%&`O`3E5XwG(P*$XRL`Q{RHuqDq;p^V(=|h?1>vk>n zOQPGK@BH&YRPMmxJdA)+19~r?P0E^bc^0e5o65jZS*wG5aVenkb>w=wO~7g?pX5@yURuj%I)HSqB3^{z(v>sH>h zTePpm!!vj&G&bi)DTEwDKogH!B5kM4zdNrIOzXI$>VepB-9!=IK3Qn0`9;)oOgEWQ zB|w;dSkTP2*h$6?F?wJ``tUN{N`JtiBB|>g(qX;2_#0P_i~7E6*$t~H%gNp^BVD%-SmB}W~CHY`CfNB4$oU`ZgGQMO%;OR4hK{bzfIt* z)u9wGCjYYofaIwjR>2RQa3OT(&YGZlnOXW6Juy%JwU2p(v2`8tES{Z%l?cBZ)vjrJCw4*apalU~-U@FMaDby~kLm zJuPaiW}C@VfZ&(He{^p%*^Z^O{t|n@|!I3MS0nO4m_brAS z$%ujtNo(I@;oIii((bO^wZzFtH3oj%`zoV9{=4hTyQq*l0=0>Y7((JIIud^D^yDC5 zHa7;`abBBa`C16yj>lt?y3Qw*F0V4a!D{B44q<>chm4z1l`%R}I%y?jszeadMSdT& z$E;D1HsT^MbkC@$DiV54t=+12@_#?eQHWKo{=0X6pVHVSDgODe;XMvPe!UBY_?fmF zl|t=5%kp)^s(&gKLM3C0bN>=;i|7rI_|((oF0SOZ-u-Fr&(P>UwO{d zYVH&bSV%g&V-343lN=WH9jABReHN_;EMK2jVWpPAbH)m6DZ~w*t6tXQIJ<3PjUN__ z4OpsIJJbY(z6%qkhSX}Sl1#!V&aK+1Q-_!nIb^=fq@<{rjz$qstX9CzmLo1so=D`)5K;DV3SC?sO6|HM3%w-p(NVxLE7{Av$g!W!;XA2}9> ztKk<&S35VOh&Kzk#jCn!b=|%*<_YPQ3Yf)Mhi1%YtU3$FXq=Ju)6ASaTHbSew38Sr zGxu+~PJd9V>6QzG8#xM4{MMBf*%*Za25j8IG~idzq_a&sodS)I_uIhZ_TL3BDwrvy zM<-Ds?bqhcQp@8b9)dP|b&G;%7BVH#iJry`CTrX%NLKYsCTpYm?}7Ip@u7WMvr-Gp z)+}+LE%m=`Wr+(Hg232UHb`-AxzBCPu68I>@^dPMWBG55g=|o3SnO^UFqwmTfEimh zQuT~5i%w|p32J1PH|EovQLo66%$@>aU#h+mOlO$EV_=Hi%mRqV8Qe>wN~ zL7wVxUdPVNwp3jE!3ls>8edoIemZn+R3FOsdYA6C{&3cat<}8y+O+X!GD(tZSNUn& zKg)A&3=QkcY(~b;9EQUk=o+aWDhQ{PtpjVi*j$nu1Ivb>b5+Gk-dYO2svbSH>WPCC z77Ht_GD=L%GWai3l=0nOcPtvgS>?W-N)v-$V#{N;4*O+PX z|2!EI_IVj?Ht93f6^X~ANmje9BL1G7R6ex=ML(&UCw<>)e|J405Q4)hUbVdK+RHN- z@5+cxupiCO55{#=a`8R>?qPnpM@4og-f24!{4bPbfSZA#N+{0_X0u(ED>CDEqri%k zaflX$;)OwBV%a)RB z3^9aN?Dl&cn+!J|uFCo(2dhawC7BaA&8%rYMJArija9yX z5zfnMX2dj!%a-8hR9+_PcH4Am?1d9;k9%a)haCmXaeqBdNuKD5uSgI zmULRZAW8hA!}vz)@hjSZIn-cVcoE^`d#8b~5{moJ9lY$h7Qq@|3J!y1=Ji4g&g8vQ zO&Iqqem(d2EU+xiURrN*rVwK@-+I<3wya)KS0ag7@y+d<)lOAksw`MIsT+#z>O7j9 zZcwq_v}mSbZiF(7^iES#+ZOcRV4SnOeq&#!7`HjbGHk{6jAB9mv3d~}+TYwDxcT-* zBA7iRD!XO3Yo6#m%qi8wAoW9r+ZGF}&J1rD_wWWt9iU&=7^dPsQzweIR8)JHAedGH zWP=xob(r^g7-lSD6i=qRw)*8ycl!2=(j4l+3>pRUXsmd+VTZ=Dg!N=QC< zf_c6TNrl67N_kjoLkn~Ufb`<{0)ztcwMP9EshGb!$=z-zoBjB#x8HmCO8)IHeDZr+ zDnjdk(*PYF^@qBfHpW#iUzTA`n3X0+{h(?T6%DJ`r6yBePi8Zp*JC|sC1o6VyerDA zl&=`r1bW89ojxHg9eD6jaOX1cPE`pbj(fMl8qK~ci#;%61!JgDKL~d1Bqmsbp|WP> zNW@{dh@efE8ci9Mj5K!523TwVg?@0k|4&N{oa{heth4$xUGVd0V?Htfo8r)eKe}*% z)$#&i`N0FN6&!8(T(2vRZ#hn}@0p5bRgAi9FW@l5;12?U$B{)1Puvq>JkEW+=KvYD zvX`y^m6uZ3Fj(w4V234p>$`(O4je%jo0pZHvfqH<_DkHW>_t)qz{oKzMtsEmv`%{n zNTU|FcmVY~;pf2k^mtEtk+8nOrv1s!zTn2OJS`8KscWT4yeTZqpRwFZKYOovnl2VH zHw&DfpWh`W(NJ*hNT;L=KfY~RG|n!~C`}Tqm+_tz)Wsn!{R-i#KD477Mz+7R4|2k0 zy!Ns`S^3Lddw)fKEk%BO-u}O6)d{{HgXs9={$yWN1wb_%Ey~Bn>8L|mM%N{QC}^2N_Sa=6Oh)P zKFBnpVchjSGdg^fs%z@cf4To+PY8Xt!GmZKlEp;`Ll5xfM$Q;>0#EU3>BEf#V!sG% zMGsu%;$-T7*1=-1G^>pDMrt*A;CZ^>d8Vt2t74O`pofWJ6e50;*I*pBGh-;dEhvA$ zuMmjUh*c5LEElo@YY^qb6i=X+xRd)~?eP>>WfKjDLR&ncUKC~`IIMM>>^F_OaiwlI zbk3@j>pqhPSD;Sh+Z?CqW|x5ooFOm;Q_r0+XBcJ_!h94-CK+NE48Q-e_KO3M5y{qX zWgYa1O&rB_uc|V%!l-=6IDe4&-BjU~iU?_|Kfy^SAogV;-Llrtpik5M>zj%M>bYCR z3LXmP9L!$6rhIwxvupJRDs&W#i7Qxl(s#_JIO>U9Hlz_a7?7aIRlQIC#I=xw0Zc!3!0*SL3&Qwr` zq0ec%;n1|G*Or~!Fmm;sC7z_|0(sBTZ{nT;DsTLph*>G+W~e2);Cifs!9-km;{kB4u4owBlW0rwOUt-Ubg(4i zjSEXknUCi@c*v)d##$o3z{Q1Id>(}M+XH`#2!H+d1r0BzLiNBE1VVf; zIUd1fA{>VXan8MyS6!-9_Si(ugd$;9jS)s~W*JmQ`jyI1f!i~moKL| zoLXpoCluHxDmM;hfNXxk(~Vi3@wvNq=~|>1TP~FdPn&f3|5Wxt?fNtLsO5sw5}eJMEc5%LRAMUssdV zl;{!%bD{25uG1}inMd5?pQsla9^Gw!bmaDA=SshlnSSF(0O}%lFKg=W&a#g8xtQC~ z)bY9y0IrgK+HsxVg{s}6ZZc_=WEJ~KlVUK-33t`u`MR3vIw81q9ei}Fw}hk51{@Fc zG?iLmse3t{x)9!`586NBTa{|O2xc0R#)lptTsMp&x1)4a?+Es8|n6{ebTnt z=uH>+P^XnZgPrXRoL9Xy+9iA?Bn>Zc8r3NaBTiH*#amd=I;W}G3X1~yEC(b81xM;V zqPJa(d_5j2T33a-{y2s&?`P3;$aWN~&XKUB295GVWh%1Y{{?lX+~oF*p9#?Aso~sU+^r++nGVK zs@@?i_?c+QxVR4auf6^c&F^u&&!#-ytuIOkn)`DlAuGBuCs)9Q`0uIz%K~1pz}Eo> z?hT>&FV)PDICjLIB7lZPCju5|2|>zPW!2$DMYh7jjhLO&a^S=VCq7 zt+>@r9g;l~es!Zg=Rovj-Yxd}zqY@*4W}(QIc$Vq3*X$GDQR1DB`=-}vN$U7^tAM| zlC`SA(*5P2`Fru%GIzPv@pajMvq*0NZDxe~vG0w0ymu zc>rJDG2%biuKYg-+x~f6pD3}DRUMSVloVoU><~L1JzDv=PrsN>{hQrgC$63XUi|!2 z0$lx>Yct*Vs-D~cJ{o>@7fBDKDOu`yPIW?O%s=lv3HyHyph!eBDPSaGFC)|SU%cId zGk+$a!;0!10-nGZljTly znf8Qzx(+3MlBp7BNsHMf;?e{M1iW*)p6*-oOiljss>bmYDViuCkPPJdEY=Ux^dk1| zlvSodR|K5;L~Op;3af6=4`6@e_8G36vzW-36+qmrHFT)d&t(6NY{$}{TP5LmqdiTFX^b38_glYRA{XDl5Z3t!akN8 zc+ESNB4NL1N_yGK5>*`=SV|Ht^&Df9BaM+U2iQkuZ{a>sox&QPTE7|TEY1!MphNBJ z{jI}gq9Ha(o%OO0)Kypnstjx6OTv0>U^ZSa%`i=%bt1U9CSz;RNJeOUwzEj@pY#(Z zW&fZ|U!8xFN~Q228zj7}W%0Z+wl_|y;5o8jC%JLy2cQ9Ug|-+j9}Zpm__K+g^UOkneRgU(8fhM|J8fFeVT{>(7y`g{RV)~`>4on??-=X8$IuXGm$RUanfX`;LY4nw06!h~jyE9SG zKVT*w&o574vS1Vdjf@#4*0$+}#8EW=z||FJGJYhd&MB(8=hNfGy7avv@}d{?*wX+#%^^NgpuXQ}LV3ADWS@H9u1jtIv1&#_tmEKhNRpHp2KAF$Hi z2sGo$!EkNmvfM-?GabtPRv##iLfgtULEZYX{F}hsM~n71FmtIc4HqiI;YaGT6wLoK z0ekDXn3f-Ds)SeOMaWN_Ho8bw{iMMc;z@fDx%J`(W9aqhb-X{3={a)5OPq18V*12Y zDJPW=g>fmkQO8+TCWS03biGi0Tz&RPA-#prP=)ochIucqFelsmEn!8=lydZ6Av^|= zqv9c;lYn-)cr*s00=_mwvdN@0oSa@_{$Fd@tW*79irt(ys%)9F1cg@~t5Qt0ZtGAl*?^zJ6(tH+q8;d41SjV|q>5 zz!ZOq(H-J5}~cGa@jz!X}%Pm*K(SFn*} zouz#~q)>pyj(Ev6~nv_J3`Np zc#RfY1c&p-Yi8-smoRobXX=ulhBYKKK!Ftm;;xAi1l4M9pZqpzf9Z)4Q#F`#p$u*V zohEuP^Gz0*@+q|D7NyZp@6gV^Ut$iuV~r6vnZB6Qm5MzzF?|rcC0fI_2f2z~w`DYU zo!0j0!*{CD&;)Evq=F`F_!)c$ZtQ7{XP0wp{Rq`R9O_K$xW)je2OV|umz~e;zy_g3TbFc z-Dvy>ho$W;_fLV*0bq50W`LS6V!__iwo_H%*mEfo95E&|GQ}!fSm}K&>v`ud?0Bo| zwhAn*aFprPH)ZV`>V=I2nP-F??JAl)buyHw4OagJEij&K}i zVeg`6^2AX3pL(wWsuAHjdFZRpwlvY6ki}@Ry^P3c&X|>*v*FSbUdP*X++>Stjb%q} z?FG_}zLtKi$`dZ0X}(X!;6Miec#E8`if6IFC-AU3Nn8nKIcrtx*1~AA!zz+dw>Phd5H6%CTUK zGy_@yS4gXI2bEHxU2xbaKBnzp6OpbIkn9jzqLd!^T)4cE z^JL|JUK1^)M?NMFgwbpxV9n206s$>L65M@AxD12q`~$a6cS2W@2B!(!$e}%B%mQegOAA(sx5fCsik~ zL+Z2cAc>>_;A^DIPIi27S)yhkLv$85e*RqzEsgsY{71bWK9OzcI9AyA=68JVkUOb9 zMyjsV!dU=I;xNmCq*b5?TKYC+^Ddr+R3uh8ZXxQjq}BKSJ^Snm$zXRj0pbz}B^tip zb;{5GV>$)LFY91xmbTZ85wzMHDGCm>gS?=M^=KgO&;M+fO(&j>Z|q&BcXEE|mwo-e zX(+53|0=t!Qp;df)()^2Ru zb~f5*vf0=+I?l$nz46BO1{>QpHn#8lp69;jp7-28=Ja$`cUARQ-97WIPtCOKEV*P^ zE!N2-Lo69v4c+}_j(e9Y#lr0hQr-#A2#bWRsGYyHD7toctX=Br_k_bC$@Q*XsL^5| zt^YMtxdj6V_jlNOjzk|AcuiZ3o77IuED#zCGd`O#tw01_f)@e39a63m@V@Ix_j6M`QdP)#Z&xvNq`XrqBdr=Kbb?!w2zeqHEG@!;N}%*2^q|5;y51Rr&*Rp1jd3l z@XK(0iF@0HW40QgkhGV?q1r@IxJ4Xo7Kc2;)?=HsSe|)fZ7a3tw}K1MYMwB;^OHpa zX8_@to`zT|*4Ea>|8a_YN6Dlx)M}^1lG-v0^~qDM9I#PUz5cILlqb7S)L!Dkwl0rk z9t-Xmd8`@-M8HX1UVT4Nj={{WR_qP8V1*u3BxcjVFzQ@x4%` z8GO=Z7Iq||WVMNTw`C>_-XhWhs?0a-1Zo&o7Ha^H^WXbC_uP2bELj>L7xtPb5`Fs1 zKK3wa)C=db@2c>YwJ1DZyCnfMRu@gS4{7KlKO(J@IJyrxAaGY@sP430JX#ZSW(hE> zeDTZD4EGd|9P$_7U6qj5g!rArCh&95o%eH?&Nv%~6kE=iIhpp!QhLdOgZ>wlYAf%U zAlq1)GZ{N2W%~BHfCi>wmATO_Uq$$_Es&-8wov<@0jG6uf(Y~~yhg&_cHQW$hLJwX zuX(tsv`tNdF=x465<=|N&>r<3|Dyl3pq995io9|Ap{xkKEl8e_0@l}wkhNu2>YGHd z!U<-U2&|!q}sr0oUC;p(@?UMM)J5=B@6#Smijdcnu>}i7Nb{d zEvxOM#%rpE8bDx<-~8!_fq#v$x^=_vCI0vEx_95<#Wl!2x;PY2xY$KvNki?Pf7bl8 z8-+Nb_-KBrhjOhFl8l1c8>9YxYGCTLCu=*IW`lLY83V+F1&U?3X;!ZL^Y%*MV^%2c ze2uTwqdLXC7D<1xD zBQ!qcnbb9ivn~e z{)AZoO2OZcqavNnebR(DfN>iU(t`;LZy{T|6z=Bsu0~Hp=F7ZvA!kd$k7d87)46QP zDjx>tK}^UA(J}YyQZm2i?IE&(?5H^?Cp|?Tb=e`7^@panNkiEpQEwb#eEX)*JvEx& zb}z0H9}HFk1;HxN-o>3neaNt@izvOZVio8>i&;HEkDN|ynRRoJ<@Y$*lIA*&(d!t3 z%HX^29Qe{`>g_9KMQ`Y4Q)yjx$BOPNEZ-nn(iUfJzRge(IZ z#6`24)IyFN)1Rm4DYosr{T!;*IcwwE$dgMH9da~s>vYnQPZHSauuU)+hw{`0M!r%2 zLAhYrfae0N?BR>5Uk&9E(L4MZRJ-c@*Qu5sExF%E{JqsZ{0{vThkuYAjqsV1X<;1Y zJtx*zK!zQ6^`Z`xEpeMIoW;Pq;LM!VHCnrha+rVkKI)lM_^JM;)5yuBr}Cy5+A?upQ;HI(aY-nxRV6dZA+nNr%TSR! znDMv$T`Zng*jhO_-#l6)eyp6OSHw>2Ic!j&no zxcm|3rWTpj<$jk|EyK5|x4Z@!(I4G3UYBdPBb7LOp# zk*u;8o7C5Z77Q!3YSC}hvh&!kH`ChK4?LyjJ5hJBwF`0}7z}Z)ZW;u!xw-R@Y0pQ; zB{{}Ny=9%;S2l5m7rEkga)E#_QFBGL{zG${|LiY1R|v}4oPS=(Q7J>fctgDRpNArc zH|(Y;1W05CY>PK2W*JnYX4MBxZ`eCF-V_Go^Qi$EEZUIs`UO-93MgUiPh=K8yLB={ ze==~ZZZ%!De!}}~g%4|$Ly>zYS*UFG5Mb=`peeR|q#&k^4S_`NB3(|DJX_rz=1REb-_oyW0Yp-ZD8ql_hM)h1$?X zjE!zJ0=fNkweW#ozaeV5_&r!+&B=xF%!Ufd`c0^28apcvho*aA1`EA6Hhd9LrbKo= z+VZ7vMye2Z+0q4o|0cpEByL+Z|GIa$sFtQ>SGT!;6Lq)!}{IksI>9vhRl{ZIL_E;rV?} zA zIGhcATZfXjQS_*hVcftpJEn+uS@m}0+g6o03sA1NB|c6R#%aeBAU);^H`u3JVZ**x zhZY^OPfUkJfG5PB(bHg|k}FzVi~gGv7ZNudt5E>qzCq5IBGien*L1Csqqjg#IJX9S z5686(J@GmKxBfA$xQ`xk5;wrRiU9d3vDbNU_;r`6snG_oZa{tbg0m~y_M_W=mh)cb z890w1F_X%!+r{abVoRX~;ho(KP&>C9QMy8vWlPvKM}I1r$z^tNcr$J_OFc~>HK(bW zHylzuVt$S~w$1J-C`>&zln4`s@bt=t^czRlAJL=Oxe|pYjyZes>98gk+N?L?RUx+# zSw?5l!%IWQDHSI0Nu2+-giuO6U8Q6^3wSz0Yp)xvzx`cq07 zame}JToTvb_DR6Etv{aGJxXprAI9B1@V!Sa0mqw?J~^8OYx{E9yCs9$z(XrK}}I3ua_8%;HB8g}$wwl2NEa{4x^yHJ->ngU+2R=_EfE4{J& zF~#8LUa%gD9rh1>H%ABg*%Np#GC-OqQry>C2YmE(%m{mk%=wQQx{`9nRD&T+yfhh>Wz&Sy%WdTGSY%di@?r-@98byzsS=z~s9WAR+y$lABq=WYF-G>>y8sTT7YL zw`gG%w0c@cRU*zjerA-axT=Wmy%}9dXOx>h7L{{wf8}>>OgyObr~VDF72Lg?-q7!@ zPpCot^2f!(YA^ydxob1fUdb716SetA6tW)e3+msiA?CY74@Pk> z#^4JiELWohmZ2uVg~Jz%n)D`X-JiL}g&L*I{7*jOk1o1wawbLd44cEg;7?4|DtG)j zuh*e5C*wok1^meLDE#|?)G_1UZf4R~FWoVAqu(jB7g2^d2j#5VA$&qIS!#d39I0c9 zR)PfY3$3zHSY@BGW(z#NwQG(wM(o>som=i(Rp;;!ltErY@^_MuwhiFlmxR! z9d}gI2>K&AHl+i`pP!-n59riW(5>g>*a_tHSe@LgEA>bT;MBlKQiAA}=Ko@uDXnA= zJ2vI_+HFAdOgT`<7QFL+MKhWHJ)CY|P8*y6n(&^^0;6eN!VD-*YfhU`iO&j0Sxx86 z)4!W-F@0?t7`-a=8{~Ga!pU|zq#H&EiTal9*qS%Cxrpc3dE?kdiPS40U(q3AI*1zX z1{I&oQtK#Rl>Bg?ZL?89#BVKt%tCQ1#i>(^`j6aHmtq#|L^TtEe=Z)Uji1Z)(tI@k zY!52-!v!a&u=83LTKu&x>6cS6zFg}6AmP9tmSM$R_*WO!GD(*}h0eA9mVfd2GT`E~ z!||QuHSr@C0aa4lbnCf;xmDYcyxx{lqp~wibx?6Ghm9X$H!R6NRf8~2V5y)j#*o)0 zSu^o9XDLTtUv1q2FX@K=^T&4{FPspX$iB|CW68RBOpI4H9?DaveN^|G>SONfcKM!# zY<#=*jLN-+LnXO=sF>@MsD^Cs1%Oe)Is z)Xv79&R#9-R^0mkT# zVPAI&lH5azFL}B}$$gme;}`VCP<_ z!1u-iNrRre07iBl8&IGkA$%M;+B&nhp%>)X!3Pw@m*tcitHt@!(tJ9+s-S|$@Hx%E z&Z6#I|MwgCzLzb=^NNdhG6A}*aQpT!*>`~uGJ&&TBx$~OG}7>&4= zu#G8pA2OXUhv(e_$`^sS%JPTnq@r|2~PqlkUE}g&)a(gQ4P& zYqLlx9P{v|C-wyV{iaQ>IoqS$Ezh9tNVG@$>C*@qp8eCslzmw>Cj zAp!8KCy&&=U@BM*88$K;`}*dD-gezfg@+WG?Hfo1y%?vdKj1 zu)zf-V=@M>`)FHKlw)C-#N6Zc?flsZj&&d`o{&ULP7?MZRdcg+Ncgr^X8cd6Xbe@D zFRQPXk|j$WNl*FFrc6`F4R@8n%-c=5-*TeWS8Lc(kr4Zatb?Da`N}F#PPM6qDZRTt ze9Ni)CjM4Ad~P<4e0B(xyd$WpQl3PaoGv#dsnS{+7tPibHSf0x%cJMMfl{UUo`DQ# z8SvUNyAlr(H&$&7E+qK5y16Wob5_eOu4H>}HW7=pF{ ztv8eVlQekNN>Y2ynS5_aEbo@e>Sup7e)9^-k#sOQ+rGifUr5@~+k!vjB zM*4E~I6CXykR~@-twDsk$@nEaZFB)(gLgA$O>@7DJoWAzkwJ=+=5Rqib@`SKdp^@; zE1J+!3SCvF=nLc^b($OsfNYM4X0yOL_0p2LE?> zGs3C=U!){mIcpWj61~(`2qO~cvmpb-NhYnekh!^J4aXR^WxvGsjEoI3S`9kYj-(0Z zLHDg|;^G+2n9Ld3k)Rs|Q)ix(oe(2I=E8W#>cq|B>ew!*Jx(R%hdAI77B^T9(o+AR zitbU3@1qG-bFcP7KD_3jwnAd0{ro9hP+JZaPV;i}4|7X&Zcgle|FIG(|JC|lsG#8O z8G5_xk;!cG8*BWkBK#q5I| zqzl##uDPeW@sEIt6Uf&2)KR8TEYXWVRx$c8YgI!Uv*)rTetNU7Gj4~z?WZ6!iuBj4 z^z37d>Ig3~Xe)%4@qOE0z)Q*diF4kmC}yB)$K-sC_?yYjExmKzqGV@^m_M?xP2Pth z)??}Mc4qEug||@UNutaHVFx^ZmhY&umo`l2&MaK-i7mivFY(4d*Nr3du`lzW>usdT zI@8s6`Ck4@hGh!&?6rx=9ZAoFqur4!*Ck0T-I;rLBD>*KnT}$n@Lu=SW2;ZJc^=+SaoS08hHB$)>Om6Xwz@qfzT4iG?R*9#G5lCX7WsyVNs(vCvqy$s`}q}t z`lN02!vg@Cckghy2bPG!*CKaZx<6#ng?Yu;z=$$}8Wg*XS{}k>%u!Y4 z_--PkWEvsN?tX-bVTHMtS;llRY;pq!7MtOy>DN)xuFdjCwnir+b3d!6O6Z_sv7hdC zb-ut|5Fh(8ZlBxHcAC#h&g<^HJqbQ>v}-cQhFywLJ#y|ky9d)0f0mu&`!}lefAzxk zd8wm128RnG!k)RaAxJem0;CTC_cqza1dt!nHM3s*eJHi88}OGowU-mzTv`4w42_>$ z5Z-+v~%_ozDiULy#Y{LYiSG_i6ZVz-e9jTJWGZ7b`8Wf1(v zYS)qnnu0?*f$7voL{rA6qtTcYnL>7SY|HcZ+RKe=G;7H_k54t?oQ=d3A`BS$0=|KY zG2zW2Iko12;$G%23tAGEuC$nc;c0pj#XaFpYQ+4c>MtF`l21}5WpD#bQaU-#Sn1lP)(@GyeZ6C?UOAJOXe zk`jVqomT1t4RWDI?yP?Um1Bl*kYQYI>}L2JJ|$!aam}1Ma~>6hX`*S(y2>#Sq*q^6 z$^%fY27@@7C~7JL4tI&EZ$&I$88d)b#uleD)YkC~FV<;xwGpqVlVs#D4}xH%W-E0T zPb7g&U9PA2LxMCg#$b*Pe#WcNe!c{Bg{u<;PD_%>Fn5J%D6Q>M17+(46fzsDl0y~&oJ6~j?A3_X8+*`qQP*JN(4h@OU<+5#M8B$>ABo`W1AwRr`pT;0 z`8USD#iOb-3c2}354hco^+orLsLWzV6`UH`)){X4NW$);S=`?6N7?}p6cbX!lc``0geUcNz&uEyP zZ_@fMrJHiP++5FULEmi3N*yN|o$n@j6}mQ48a&$IcB1YM_gAWIRsc8KS7{}MYFPVW zsVOpu2G6zW7`|Z%N|lj1Z4N*DRvxjVN0#ui7qd>BglEp(duc=$>5L}@FAC6u48`80 zk7qS^!sm(9&eGHBr}i8WQcI3nT;H|GqJdFbx7F#A08Itro=4)#*);PdJ(m4<_RZHy zTEY8BTtXJ9;~V655=#!Ww`hp=>+d%?u;i6cv}hpon=QJ=Ph1B`N=tr zto!JoO4pK$%f*k^7ZGeN{nY#w2JFlWaL?3rH>KBFcKJ718 z2c?;;jqHH84+q{y@}de)nUZbN(#hGd`uX~Ei|qnUJvvqhozj<5?3FW-bNhF{n@t`+ zA0kUDiiQolao|T*MD$7|)xQPc{i=VQhs+kSSp>}XQIS&6EX_^f6Hfhc<@PP3vNYxF zekfD0L=Bg{bZ62W%+m64OHq2-1mMPLVgtUij!s;@m*D@@iV*#b9>l^-HNt7diS-kf zvUHk->btJB?Ji|OUxV8(ed(SCov~C1blWn?_9%Y~20#cNT2c>92qek*^FFRzRJ1{c ze~%rqL9qqkY~2Qea~=4i1Lm;toSfDK(Y_^1LV zSy(JH1A3p%t)1Yw!Q716@3-KxrNT=Lvni$g|G+X41|A5JQ%YZu!QZXQT){9ELQP)8 z$fScLgA0*`Kt)Qd!v%6UT zt|p(ViZ?@ocd@qXGyfK9XG?)78(>Ew=K-KFOxbF+fq@dmppaJVqb939M^%`(oI-z% zBex}ZXd7?h5m$|+9h^O#@2k_+Mo2hKB)zzCu&V(-ken^2NMxIShrk+0wu8AD82OZA z#TaJW>dB`^|3e5$YWGCaJ0gHzlocxv^C^ROJ|@K(EZ2u~8VoZ+6mO*q7oCU#K9UYa zCmCn@5h0g<`WRNz7FcX#{UT42ffhsn16UAqV8Emx1TdzCn)9`;Q4)Lnt975VB+KL< zEHFaDr~Q%`L#lr{xtx4zyzy{!0aJ~$8G4(KGQtd|4_x1%N%37z)e#GQ30Fg3RF#uh z2P227z`~=>4lE%PM|fwkX`r%Trw><^v#(PZ8d|D8Gy(}+=%79g*2frT7%Lt&3eSA- z;ZNEO*9Xy53R=Q_Is|7r5UBjWjyWhJ^2w)2hFe5?QvQZmuzQ8RTwRZ%kHAqfD?*6X z2mEA^&HmBD8q!E^!A8E*hmFojj12W3k4REK4Kgq^$Wlx!k9E}Hyx^F%Z!!^Z~y>JJrY;0}t?9*2N4AHJ9yk{2nWc zE(8<6oG7==iy4T^@%|sAh(J2E>I;R%;~q6J90^h|HCQ_eNMFQpagK?08n7L<@NXHyBeqrBvYl!MqLrdXvD@sZ9C zWlOOBb`bV?r#M10z<4X>E&~%&T8MBifuh`0+kLuI^+{ziobW<7J`J)XtYAt}@c&0C zBBR_JJtF8N3)vk$(kVyw0gK=(lhU3O$9_}*IkAlNBt8@!SR3g89Cd)d?I`7Tf*J>P zA~i*vt*i$&`mozzd7x+$)pj70SEw(I(K~@qf6piwI)yrk4mM`ELQSze0akt^rXwA~ z+iX^tTSk<3I@zq>8?-a6;6uG49f<$icz=yUHTikOL1n(IaY1Fa%&HH@2Iz2O>uW-3 z_tVhA>r)|WFh{}g-Mofe6Acq2X8*^r!GOU_@z2_3um;-?bxC61w>XY5X8P`cEF=3? z@QBszDbp2-giQ70z^CX;{PBeh%u(YKgmbf$Ji9maLh%uZFC;Nt+;f@p^caMeRL z|J!hYSy6boj83h{sN_{YqZGv^oQMoeOwwkQmx2)dYv_jSa9iA<^|Om!`hqE5rNzbt z7x8hRtDzvk(QP%rAKWn@|i!F009 za1Cax%fGV?YJivzhO81LMSlnW&xk;zAA`vnXJVu1a9HVUfoVq1I*-wTS!{APCFF6Y z@6_NnCtBod!PdJV2uFgp2X`yojmeK?4tuS0SMfFa^!vt?cL11+jZ1rKs zaXdGN=XH{s7w2#F>BeznWPwd?LcYHe+)uP;#1a4A*diptkXk%P8;dzOSj$wkfmv+L z=-_H!Nem~Ay-H-PP(8JJ_BoA&Co*_!eMW!riKBEzVi~E)qjY}kBB-m^X;XNwK^!1T zN{kX6Tfg#2e9}s^SE_KDgOD^7EFve&bp2Ohbn5Mb4{(w2e>VVK?3ls=b1pA4G0{9C zHhZvL5maH$j5y?4B%SEZMR993=ArTxDoOC7>cgUc))$?s&xms{LOdc+t~LdGRQ=ah zar8C~s{aO&r$0w4KAE>B^^Ll@z`T)l6|clUN7IA@?9HuXBaV6IjZqYs>^MR}D%c3= z5jnjwf8KHUf?_V;akwgQ5VS{GC|3WcX&tFcu*o!0YzHEFNt?2PH6wt@TnQsoSeL5o zfq^f_@17PY>TZG+1BC+l)ftS5i`kGwUImATA}d>Zrv-7$D>`lzNCckRDeg~Vee=3& zybv6X_;^A$n*CN>%wDjSQZND4)4m1csWl!LxBv@QOppb%>?9@C>=Xw`lQ$+b=ZX;Q zWtnLjh}L40x>i3Lxc4fHDcJ2%xU7RqCB(=_HE{{jWvmZuM;t>n4NpZ5#y@Fjq?&{c zE=L%Pu9Jey^&tJ+Zx%ht{)bTnEgMXH%miD;24)luUDyj2p5ILf5T!hX=%%#!<~soL z&IxxfWcFQ840+a1z29Pc>$(Q)~q*>HbD02izhazlLHGEYr7jvo4H1(f#WZC zEp2|2d2q7b7V=v`=KoUS4*C=XOo|U7SHj)_f05 zf=`$hESn3mmex&4Igi=$?yCn`5qz$Mq)a(@-r^1$gw9&)C6~jt?)7xST>CdVS7qy^ zBishJ8X^}5zGfoX*$0oN>;S5TqP0E7An3$(b*7KAyvDfO_x0ck#ATQ-jkE8jBVpX! z<=?k|j2tOgg?y0T)y1+b_;&5_3wUV0c;DZQxo)U=c<8V(dN3;!SyiSMylzr zkE94KRTuZ#L{kGzu580oR_519m>V-awA+GBqh)sfq_d_yw2)l;4k~G3hJRgbb^}$( zHj!G~?U_p30gs1pA%HUyk0vqyPPm_7%gPzTLX8iC1pNBU;<1I$zTZ(FN4?jch2!ss zkVQYorkj`8muJiO*J9L%07v*6;Xf3yKiYo}^6z4g?n`tuhgXpf3T(N(aHV9jWqz|K zTGc0_5su14r4-#H=5`?Sd%1Sk+tD#(OpmCkdw0w+8|1wh+5nPRUK%7C;r27vS3&$X zg7hTST%fkq^E>A0k_>gTh1aK!HTxVimd&|u_+?tNV7yW@-MVc?J>C1i_G)7yvcY7=WUIdAHnUPH_cunvIk^W8&@p`@f(Q>^;<{!U4|wofyO(>k zze8!aPab5ZIRl2oi`!7@At2{VENvS7GfTLYJ{b^c*~UdC!G*wu$hN3sfxAG~@zz`E zKx>)ong~ZeLCMakYAD9VT$xAL2K^sF(dvHQ{RthkBD8-csHOm3hZfUx@_Hgsq9~ zSgdcm29DNP>Ux%`DpTC~4>d{fgGxtzi=XUqA1RS;&qjsX--Ukn49IIKIWp8Qp!D`U00M4~JS#)6dnvTXJj9ad*6Ia%0u0b`C+>df&6`OU=B?Kg_Ba zZ;k{lMrPc}4*m37{E}?FIRiKAK5RNeIfhanfc5%kmT@E~-^Dd`Sl*cIy`mIlMe9;O zeZnpge1lxT(CVoDtVi&|zBU1H4q$N(crQxIdf{#B$wjG>T55S|;69k0H`2JxgcWLb zyMyVt?uaf^8sicn)Fp+n2^ZFOeYtE*9k{mUAnk8nC<2kOb$t|wfq(B@pY6JTcO`fM zN;Z4Zk+0^X%;zK0|J+IMt$OMyb#{)S=<9^DL?QjnEpqu=fJ!q)GwN01`gE|IrQZ0S z!c=y1ekfSY*?>ooEh0-x4V-Tfaho)hg_-1cML?XBDZr_I#|{5 z@|-!iKYiVP0x=F9ydgK0wQXdlyI>lZU_Y`mUGqL^hQ4`$l5HZm03Q}Bh8aI=2P0x6M{Y;;B zd&sMSV>AWZA8ne4$d4r*FNsit9=Ep}!XvMbL?b+0UdO*{lSrRz<(qY0l&-j~yXl0B z*Ldb_kz&`Hz$O3dbe*kI4kraPFHcw5nP(WK0z5af{(bPB-Qe9#o2`$(u%OckrMprS znbFZdr_)sz?GkaW-P8cZj+e~-J3bCEyG^O2Oxt<&pYvT!<;iBc@yzn;`G}9?4P~!F zJ-IHna=7|k#ao5*FTTgV1*xX#5&m<^{LRHB(+37US8udzJRp3*1BRkMh}EM-gMA3PjLon|ydfiDw85 zlWqFH?qJ8+b(#yGnf4z_(=*EMA46E|7fCsQ&q4E#3hS;JVN*n)Jd3f+w=3d{VzIxk zV)ayWh9_Mog252?sXiryL{RlHrKuSugrpGFsjVf1G~ms4384y*dvjiMxBl_`HB97f z5}E&#uX|PW3BpU5J*mlgn8-~gpa77FJQcc%kG3}G0VmAPL72H~%w{*Zj3DE;PP2mN54-&5L!((9xT@0 zFz}Z@(1eQV40Q+PuRn&QS)U#QlXWx=)@K?ZD&}W34cQ6Mq*((M6Ut&E{QN48bN6l& zzQ**DsE82z3I6)>?9>R*UK$=f3x+z$VD@!Y)Bv!nVx=|@V1Rv zd6wcEFada5I!p}HARcvkVwTE&|AM)^@RP9V6Ix;6PqGepnvi16#>-6G6+kTcs>)P^ z{Cwf@BsTn#2~gVoR`^}KvNfKdr28c*hENPA2f|!u?1yodLmaC|a~d(TYIocTm|!9N zgYv5KZ+*@WYUbq8;uK{zvv&)vh8wsegg+3EPw1TS%~-^9JI+k2e<6513cUo73j~o` zMumO`L~!5v(5E~X{xVyO|5xy~(!|X&(R$0jDvi5V&YcvAw&Ms#0a{nA@iV5-7m2&%cB<5;=hdKt2VdK-oRhCYP+UUE~}i&{J)=!KQpSy$as&)ygg^bz6*%dqt5s&Zwlt;p~sCW;Ky z77afh7e(HWRU`~FUhG|&$y&q@a{NT9HrM6oR15(FT}OIisN_4dw~2j)bp6pRt&Z>c zer~6mTCr4XzPgSzGCE-Tg|o0wPpZEZ!YDB$yPDXuuPP8b;sd?a;9=Yp?SUu^G zsj5zwvyIr0JQLm%K)b`+m{q-CG+qo#b;?gq@fH)_tj?u=pAeSY~zJR75@I z;`qgnZI-J=;w5n8>Z$yYhBDw8LF<;LgaNROoUEzioC%hZBiGoDgVBG5Id&QOCXsi6Ix9K4H&i@%x+v?jmc(3A&=6`G$nyFZ>qx&mlTl+GHIq9Q`S|NWX4mC|VP zP~Fnt9lO!~qwid(6pr`t_LIHeMMNE%LuU=ooxh;nLr#nLWc5ZCu$6N&da-)4 z;8E0)lQ*JQbjkat-=tsRn3o>n-r-nHi1%fAf*n3BK*-keT^)9%rWs%Vv|HsI9~aNU z<>_?9cYLe*FEBlr#y{V&M=9ga*lj+i!X9K!WgEKsRnD1^3Q|$#;j4_8xdiZTuu;RW zawg_o;F^%LikUZq-v)|QXUE|YIw3tBb~7>~C-4b?;s&WYHbW1px}-t~D8*DXk}_`0 z+bR12zUK9&KM#kHRkNF;AC;nu&CisMU8fd);!y7zr!X~CpCf-v91h^0J@kFp{ao)B z=e8SDNc{F88u5X;^C63EfCxm6jBLnb&l)3alvJz{{{U9-(frzoNgv9fpyUE_p6^If zZM0J8UgRq57Gl-ZK&{GY^pn{kh+Xcuwiz&khX!6pA_Bb=WAgtp?a@R?8*W}L#$P;; z`IysX_Z(ig^VD?%X?kJa6+KF>jru(Is*IV&d7hDy>_&_K9e?6|Qvkm1cPvD=7JkNrH1IU*)5>r`8u3ogHW3r=?tZ+HDg+y%tpPkrkmWDB-?aCq)d; zc-EA8y)G2-Rg6S9o{$lbu%cWeVG+?6ruiDV9qy!Js^|i`iSkT`!87fCzgOj>rPdX( z-l_Rh#7l6jz4>~VDFVD|U%*eQRorP8JM#hslNrLf$J#ZUngWO<#Vl5o zd=ZCcqkBKb+~LWmXIEH}^kJ?bk$z{iiA3R1e>Rz}aXAB_1MQ~%V{GPZGLEja4kI^! zt$$4#rWB4{2BYFMuTztGFyGlHXV+^SeHB?F_a=L%xi1Y>rR13^bT+BCq{M%fE%)EL zWUlnsW~R5j(hl(Y*&lAaQAPs2%NC*Kj1cL0VKlFg_+?9mw1}{p{xw5KFk$-w; zHfmvnkyamGb)csICPRUKk-; z-!fBGm-y?&mV%(}fSh1KsM0puylb~U&nh+4#@oD~7KcFWDQw5+4WmOGDQ)0?TE)Vy zEHm`IKtOanNwSkCmVP$H#I}^|8DB?0l=_aC#TQKO+h-Axl%B>qLlafPVuFInlcAKK za;_CX`yAZUO9Q>ZgiVKPE&U#>;xE`oLmMDFqRd;Eg%V8e1F3e4@MoIl6I|}6h%Kzl z=X2ozE+D{d)3aPW$gU<6)Bf>K=05$*x9a70f|5m%UWsQFqAMzW&r1;8Fw=F4KVHpv zmXQ}a4=Ftz-|<|D+NyX0sU?x|As%B>n)z(W0EsingK)dW;@b1KHpXG}*vuDWniZPUN47D(OEH z@i_$tzdi|*p^9PwsQ_^rDu*Kzbg~($f&4OC--rEzZ|dDvXJ0Y-UxWqH(V1KWo9M3I zdx$28UHG<27F~H0x7QGxtV{-lHzquwq@1itiVlU|U}fZ!R9h8AhK@*1`)d#?DH(n; z1293nFw_IK#nk$Vny2~--rO%JoHbhVVrZ9nc=FsfReD>3B6?N?*m6baV-cwDuwLSh zu&+L{Ns3kiz2P40jW#qiy(2{P0$UU#H_+Ox0ZXdjX{MPU-?=2p;{VO9qHmVI6g4d6 zWy*&Y8+gQC-@g1Iy&aju9+yyELz=wl2WG=4HAt;5RwTCctOuF~+kJbgtcCPWpUB0V zOJR7~wl>Ij9>RV<6*iNVq(|R>Uy6n?^{raZy8btorcc5QcddJpL;LCP2K6^5`3*5j zflN`1V5)fkAlJEj>*aGN%zr{CJxkNFE&RghL8*W{)OMY^kA?0)Yl0Q zj`Z$W?AK_g`Zw^@z?^IS%(&@1s4 z($CL`s^#^ge8RIMzhZvN`_bUZ$rQ29!tUm-gyuT+e#N0b- zH)P{UjbS*o44kcT4Sv}(A$RY@B;=8J0WF44Vn%dS@4CKW`0CpHaMFAYe(4w_b?XFZHG%sTf=(ee2)3y}$^pe1A6w5?NsINZT zo&V%|t7s`4cg#mEI=;kn8Tu=1*RuO<9`WEDSq}eK;#^{@z=TJ1ts}d;Ii8Bk=kqK* zMO}rUR;q}D7~Twlo&L1|$~1w?u!ETEyjFp1yrFh0m~$81f{J1QPD-+O4F>gq`I16N z6&ehHX-^ke;H)O>_9!2Eda%5hP(8?UQQzt6Oby2;MYi-trIG1=PrheCImmeH=2cn) z#axw7?Qjq&>DTLCa;cDn)-&rITbbO>;mh|Sn;DLvs!O21A{#ky1h+btld5y?ju4O>h-6FeE^23Zx$1O5;t{T(R9LgBwA zHd5b-q#WV%;h)}A{qR%iF1>#lkwdUl)b`n}&c^urM~a}iorcd~nfY=jI{t-->b(;@ zo0w34ldG_Gq(XI(NV!= zY|8W3wk9B*sy7@`TdT6m$9oji=doOHNzbvR@0N`Hm+rSf2M* zwl@3Le(39VSnH^`-d0zwZs2Gl z5)QzTvCShbReE<{9uztgs-lp|?5aShbBv7f@B)6Wr@5V$5HRxqpquek<6qIANMnsJHV9d;iGn@A|)ghB;*_sYA{L#swDbwsLY}V_#-T!Sv|%L$M({ zlPhOYt!fsGHeFJWX=4=j=ASGyz-#LQ^Zm%HI9c-E)?asG)4|ok1pa$flfIO(HNBAu z$_o=V%L{oT8GX=pZ{SARgs+R)M|J8~_R@9lIVjBZbp|x6?PC4RSB4YLlDB8KYQawZ zB?kFBG{koGY`?rOZmaWuQW=c8n`CTO&sUp#6;P`m`%B?onFYx$^B`dF0f&bn;-i^* z5U2g-Ix3&X#4w8^>iEJF`P>w`s0> z5c2KXqs575-6d{lj703%drC{xspC>>ZnRrTL`B}2gqfsMCB29L?7~Vmpvw-UI;DT+i0hg6<4Ik#26W9K{29`$oRt ztY%dMWSR>;R*fqJ=;aeej!kV3CX>?Bb{LoZDo?+4Y9QIi?t<4t)%Jlj1+O0WZGdGW znm6P;(wS-^^krskIH>D<7j_eU3+E{e)zeQx^z-6m$sL`@HQ)b3)jLN=_C#%?GqE|b zolG#XZD*29Y)owXOl;e>Cbn%S6Wg|v+rRg{-@5nvhvje?W&D>p8cdb<@)wB zDv_fI{}AcPgS;Kiqjx*UO?;&2$Im(lyc@4IUIUrg?Hx#L-zS8PdXZDw0ey7K(hjMd zoBwecG~;vF8fNJOoU}eMB7bjP(8A91cokl%9FPtF!DxAOde!uKPdpsS$VjFIdSo0K zrcQ@;HnL9>{f(L2|7t`Zl8lwu%{TbNM&%pMY422GJ{NA&KhmKIzfMfA<#6fgqn{w& zvBD|e>g~R(h_M9U(^l^__yep1r^e~pKLlLEp zRU$^#8RB65!^oYTKf%;fU>6SHHMt;4lO}Bcg}d-eFHf8n3=Qo$!u1ND{q^5R@Nxd( zDoARRvj2FQT~C{LpMAIZcnmh(u6qa4DSXcBsMuA3AS;{LVta6++_+IXzPs;*fU8$X z-kA!g{FQ}vC`+0!{d$K?&U86(R7Y5MTRPdm3>h)-uRMqMUnPVCU;J4BbpA-D=dn1d z;*kbOi4ofp@yLMzad^2->DLs^n08%G-1uh4X|5-@6$0+%>o@Va+Q$leqJICXaIr38 z=Bjy=slq z?0iO&A3L1#gQ-_|wt6>EiTuFDra?O25W7lAsa~NFP1lfI>SL=y!+0e-#YRZ+z=0#z za0R}ZxH>1GSF^-`gR$s1fOscQIP$7*JqD0fZkx{^;qQ0_WbSLE!XCO>mQBk@oSU*H z7*$yihBoUN)+zbkj*was!hQq4_jaEk^X>8t<8|mJjmBp*w)MyN%jAfaKvEPXqd1SC?OM4WWEG1D>`Kx$r{;BP%y;a20rHy)GacN>cCiNy! zISb7hx8IrA-ZV689IzPXuhAqQp1Bd<1X6Q*UIt#@4jxa>+4dLw-Rw?n$uF5f?8h?_ zLl@ag9Wi?olT><149;(HT&zxP?e)?1z zRu(FfvqCogANvWQ%pm$)hHWCbO)tUKq=Boym2d|CZ{KiBCZs` z7Ink2|3Iru1?~4GS1@xEf5uDB<(_zxhtVxObaU|BQ`(hUH+Qp8=^+q=0e)oBc)XD|FGTfdZrp0?}JNn5C0OZ2?DHDIQPH(uRq0W4{<^b?o0BUsdt>uOD$1Sm@h z@#3bQ>jX{V3!{sgpbf>*<^S93(~&WXX2Sa;CuF8Uf&;R8qy6u?gL$XWh-Lwh@XQx= zw(T1Jx1|7Ff41HEePRMu0^eczZmhBtB}Kcgl?SK9_83uIqM~BAc6-{a;ZS0hw}fa z7jEivSNV_cfWwz^Y7x`ho5!bqtqxF)NqCKbbu`1cL8YUm!rx2xR}6m3mfOKUqb)c1 z0aPo20`BEB4N_GVEa1RRyBlXKtSRfOW-BPmL{Bz~1c2t&WK+P&`}J7_5O$x=#$IZt z6y1v2R4ev8mR8K!QV7WxfNhtF{zjr}b<##e7{~_Pm$&~6j;p?tH$vF&mANUSxegOZ z^bWySNK+_ej)5y)%U-SUFXir5YUH0&{B;1kC~e1gkXXDYY1FnIeKL2BWpn2Yx1e|b zh*hj6!CyZpmm98d{TO;USWtfbI*AXUa&}G1mut4-r3>~fph&2pyK#6GaArU}i>QIy zPtO4<<$I99=XFd7axaoN%n=$_O z!lE}#ow_Zh+*`uRdKBzNBR5M5C47| z$?}W$vCVvRnTy@#(Coj$5;q!^joAW@dR(}t^flL*Q zl^-VW#pP$^0s`;1*&v#aq3gTb?eb4D419q9eK)EteR{46)`v#!U?1(rKQ{ZvS0GBS z*?+gvz2)U3rQ;nBC>3~1JqtZA#$LQLI9a36c#x=m`U8EFcP@r$ z@2&qcD{`?5?{HDu&Ql<`Uux^qaPwTLYXxOFm$^%loYE(@2A)TDkt%aVE$I2jJ>1J& z_o(wd9KTioXOJxFz;BW9Z-dmbF*IGaEQ9@cM)yoH6GU|%U!qON-3s?#)Pq>tvf5QX zTE`eF-`)g-^wAssH)eF(3yK;2-|0fNrJ_NxjLuWFBmD0D6|8PEedcS3)G=c;aB%Vz z|9(tIbLd_2Poi53Kn#;6jK0m=jKesV$kJV_5}%Jlw!uwQ;z!p_0?1@e-`dImO%!_J;$G^V`kY?`0)!C|aHUES zMsKio@&QcfYm&smMYBOLJtie&2|=}eU$fUNq!dniroTShMO}g%+VshSo7RDtX+&)fiSC`!%L9Fq%P# zZXZEFMW$#sIt2?=9D_BbiQ8?rxde&MC*EFh1Jk-LIZT%hIGl#ySh9YLD24iY4*H;1t#>#$tTyw-X`@X-`R^8`>ee(-DGv3vf{ zJNr(bJeIG;V3)3@cmyeMo_fvGuH>-gSp8aJAQmh4g<Ni@20>9l{EAYGVr{H=K*fU z(|kndgs)N&)a9kSD2-g`qSWQMPq6w@De?4YLY9UafIO!Y+gFl~{M{<_DT*pKkR3Qq^5Pci|T>I4+kstBr&mg=X<|vAc2SrxH@L-TM zKVX)|fnEeUmaxj_cZJK(>*_eHh!=bO`+YDXsHNz9!qP4V@qYyrt3yhb%wtA0DP8g+ zfhe*d>;Iw&udGkW$zJBkhAND3q9j zLF9`^k+)_Fm~_vd?V|iDZ<7vbM-Ciji`=Apf5(Q`->8&x*Ueo5Dm52aaCJ$H2Ku`8 zKp@>9CY$;pnXq}t6qK;AD}US^{Iu^ir7>jFxErEO%bnd~HCK3V%F7Lzk!Sa{%GmK#POuTZ#yM?}AvCj2`lfV>LH5aEy zd16cCARbMUY7z13ejXnf&?cbM6kOrv0lnUES}nGEpN@h3Ep3_b``Ba!n=9DdIT$s~Rr*qW&K!AUf zy%%0UfnK*|h)-3@c|Wu6LQ3YCMjQ4Jo4ncl{Zy>(;@Ki259L-JlN9%3uKv}*?-!oZ zMfiPoI_cy1p=`wOf#Zbwt3@V?*_3*7Sq;{~_j|4dyt2#dUD~4NC7r@12r}maZewVX zp&2WZn}iTagq;`W33_7(xE_)SGr;EW7G2q#$fO@FV?Yj3P8KRnZ}*?l7F1F5+<5_=E)>8!a_)2;JEAGzTvMx zg+Gur4RC4u9kHZ&_M7D*uME0vADV}mUf4&gDCxMHn$FY*oS;zXpOsY4X#j3X8T%R` z&R=9R19PdKG9>!?OQ2zi?s#swUH1qe-g@=`Lcg?k8rgm}FFz*bWYhW0*YRAK^R>Bwo?o z7M9Zv$<(swR<*kPlE{nsO9Jd^*Twv%$p6bagGcC4_u#anmaC4JG*X2Zd4B=x5Man! zchB68DM2<@Q3Z9eo(^$&@|YK?{V&~#=b?W-s-u5@agv9fp&x1Gsfs?5XH*aYIb+i{ z*-XQZ76Fl`k@B+r>xdfrOjetB0XaEg)LdX_m#5vC&Z$go_3D|UM<-Czgg_Ugpmjqv z0{qU#Kgr^j*%EPv?MbFotEt5{bF=?qN7FES3frlbG#U}!Z;<1bqTd0-EfsmrHy_;G^8^snpTGm#tlbBjbwvO|=K^s(ue`>2~<68}Cp_vzdPl}^G&T`AwT^X*2 z%#yUuUjC|EmY&{2PgaqvbDQOs`GK=@>~rYed#B0-URNsKP^U=Yys+d%szY@##W$QE zNGywY^-pcsU@4kO{R$1tA@)PGrtM&3S!a`O4Tl23gkTM@7%D0l{~c~EUL>}|w0e5$ zBAWuH2g|4I92qunR6aBNBdiwA6t*KixC6D3F^qy65hux6)e8&5OiM5ycAgSmXSn2V zwcb?=Vq~$4LjZHsTdUK@q7Ptq6Z9~2m4$Y={hk9iq!vLftA>Z&;kx(j+Q=EqLfD*o zxxKBQj!GKfET+0-2vqJ7cgJ_en#7{Tni0kmhVF;;>uZx)YlhV(gE~R-4`hG4P}+y+ zYWZS;3(t64|4%IwJcZ zChi%6#6=`Pog%#5&+U+?i*z*zF;?YDP5IGFsJyGu?MtJTdJjeokvYc(57AwcMMJGS zcF+k>f2U!DJ0xgS=wRWMj|QFT&r|Cku;4pIuD0yZP+{H zSX<<1AS%%MimN>6Sa+4=2vNl^6CcJsttzbD~GP5uv+9!Uf9q4dz~=9 zvcQ`IjbC}PQ=-4*l}x5k!YYE4w_DgU5+CLOXI5dAb}>djI&foc5B%8NX-$UdKFim; zSq{UMWN7y8i9u6hfHleQcFoL7Xr}mxx%T?^67vn_SXB|KodfNL&K~zbjz*b)su6;7 zkn!-wmXle&<3owFPHr=Q~FL zt%<}vSccLZy@@1}Dvnkvy*ctHeiLfMF1z1M^zZo#6m|1Hd%T((R$uhZ1{U(Xs*FP^ zyeeOxabMxp4DXAA^93;7VX%wDj%TBS9Fy;RI(1Fe=YE0nW$Ug>s0FjBry9 zy>=Sz?5ep?Uv+*8qEj=hr8w;cfLdwKJ&k%oLfs5c@nvb<^7Iu%Mz|g0x}Xf2nfn1{KcQtx(a{3jU_|Q;Hm(t zdLJL_uSBcKTG#yIrtduP@D1jC9lowzjQF3l%pR}1$JJd7z?%>L2XFg3koYr7Z;RP#VSUlpZEoB|5p{Z%vm0{sTuJU$Bm>lIm&w zR|KtM6~XYJ8Zr=03Rm2I9`XzEZ~rdbeKTxCrReP%cW-6c(2h8eCBUGV{WQeCw5?2i zdckwNZ>uw6j~{h`^F_<7&pP8=hqG?ayX(E8w8Q)+j=JaScK$5GOpB@9Bu52hi-{({r>awKqYZ^=kaPcAe)%E5 zm-*rIvKgPL=b2IF*sxIdNFuxZI9p5dw*2vaN>p6E`8<;Oc?}es;%cU?d@S@o)0h%X z))b69|J3FOI1BmjdE;@$fABc2jklE}Jam0Rr6EuG#@+Jc^c5>V5L--wp$gq$o-&at zbU<7}=J_R0#-T6+*fB;BvRWs3KQM|ap{P(8t@*a&BtoF(E-bk^pAn1rTF6lt&nbd- z(>L{3wCsmME}r%@d0e6ipT2p69)PHFgj(3IUY#SAd5yQHuFJu3W;qL1FXMm?79cPY`grlJ01033)t&LtRO|V`*r5HmBz42b1G?l>I zl6l{Z>s(I|P)H5UH^cp-m>JsR0GzCXI0kX}(O%>$NIy;flYoK&DcTp^L6MxAfTAhc zqE`DS$E*{C1=ab1juwh!Q{5&do}{%WV&K(DnNxC z2?`TNM+xQV08Q*aJfB zh3{4}m|qs^T*QBH%)I}BV_K-4N~7|LpvOz%7kCrbge;_lWI@`*s7Dzf!4yEoa*}$8 z_aEdCPoI;MY=aPoN6Vr8J%A{Iq{?q8(W#W{kP%V?Zm~nLN)$zwJf;v8oD*ka$!0sq zy9l!i6`|g5r5|-$epzB+>WQ4wb;B96AS_=g)vq1FDHt|A5Z-XlrRKYcHzc{rf5nmo z?jStb1u3TO$S``Lw`wRjU)>57=ok6;Tze6gA;+?!6CwHEF@Gm#h%k^ar6Qn^^TNY8 zIns!Mpjuj36nY@!=sPhQ2tdl2G>``Zp&E{;RP0mUMPS>J+LPZ!BtxrUcM_07mbUw5 z6pF4>5f7)*zlY#OrcqQCRDE5Js45Fjw#vfbVQr6%W#KJS12u+AqhcQoU(f=RmKldj zrh%h|v@gM>m#F>Azbrp;EniEK?ggf4*EOm4K!bz7XB8@m@sR{I3ncNr$ry(C8?d)x^ofTH(2e zjRGK4CZ(21Lpo$@KzkSnqL?1j0h&5I#F)m+4oNK$tuR)O7=fDNLU{+sr20C z{k|DYojo)##_(_q+F!YhyvnIpSR9gQ;TYN>xj+I-fwV`rq@4kRb~7uWiUemY>k`Lu z!Z{3H6&4UrTbHPyqZ~D!{8xNWER7uHm$82lxQjVY=gO97{E@6J&Va3o?U!YMpdkbX z!Xuu6@Q7g|Jz~W(EZi3$`ClrgR&^M86-)^Tzm}Lfa*GBD!j``zJ|rJ)k18evMC;c_ z%niS+8CsIcfLGDt`G0vPccmqW&cis~$p~pE*chpaqXd4_g*c!lc|h$~lid^OqZ0R$}Wbnb}tA8>X5XD~*x8Oq1aiwgMTQ zAFG$ZFodfiNqc z|1(1yx!UFVEh}t>i_o94`F-m7Jez1;D*c&3A?pd-+8@r{q%$4_RlIKd@62^yGVwNU z8_?i04pR#7ZtaZwE9fjI#^_`R~6s1ogZ+>t3g=CAtk8l-fFL7ik)B zJh>ttP!8oJPaB}ytR)q^J4YAuLX9oLop+lwei*s3-;TXu!y49d#LpXb87v)$??&P+ zt&eM|>ADh7EnBs*0RL2p;^(>KR$4l}3OzO|LxICP{yK*sj2yjp^I?ImxW{ngL@4JUBtH z6+;pSN;cT`LZ6Pky@?jF<5lu|o+QxLngFJ^jWGL%-FOuky$_J*W0Mwbj#>@3O)e|O z$UpS)uyw54{x0sMTx0Pc?Mom5Ltes1O&28hjT(@d)3~$WfJ%qMpt09CE!Y$f>Prd79hj4S# z<5I6z<@VyvyDAT|^Hv4-(uz$*c{b*FM0nq`tMhi>&gaVTdtfz|I~x}^70hYB{@~JX zkU-(z%+ovCLB!b?AHKsIO=+T=R}wMjmh#(m-qp7$W^24&JX`iupMR0g%@?J5hiaz< z=Qr)MG9sB#$P8VmTc&Wp$D2yFq2q(j^@|pyz_eI2CG8`jX4@vk#_11C?a!4tROc4? z$cMLzbKse=x;%jK^GlDuo=-}*V)W&C-xNklLmtAT>T8kxpza_M$6tv9KZVk#_h>@5 z8^m49hZ?alVJ7;;$W4=ui1p?19}iYOVegZ?2;0+Z`tA0+t?BN->FC&G`@N^76@DJ{ zu9w`<>sSS}_1CT+wyoELf3>c!gyboAX}%zn7p38Odr9^M%$jT{^X&_ebHa|jha(q*EX{Zr)O2a^-I)_iXGlG8)Z%~h0q%}`Kp1q@ch>ud^COVv~^osDfiDvX_i z{B#azx5uGOFBXoBuV2%3ejz;kcU@yuS}oD``Pde&f)KrVy@Y*r*<~L0ZR%rFo~hne zOpWfAmsaaf){9Kvp>DA;cG((Bd;e#g@$wCi{{N%=#?6ET-6d%FwgA})#K6D(3S|RLIzs9A zHWCn2H*L29jvO}YguhvR)1faOMjrC}HP4nP&kXX?Qf~!x;mXDwVlG!Vp~u*(TW^jL zI?j)3H|N?4pYM(67IxaPn^?%E&#>;5xQJV-%%9rP8r8P$ed;ELlFtutxgnvV7gG-Z zH@qcqhxqX5Qrn^XUYrU|FMW{}Ep z=^|W9e2a$Jg{xfj8&D~ckseA zBnA)cZekU>upIMT6*}7|+XAnyK=$bt0n6VE?4{#BhUE(fd-nHXz|S$Y1TN)6%h>*1 z*`AE#J(&F`=_QKJO%9!muGAO0VU7p&aVN$U78y|NM zZNRrr!t)aG*Me=bt=oVu_;+?WI>$vI+b?@ITOXh)9^uBX|m9*1F{eh)1VZH++ zs?toEYYDluAEIOIrL;-OmIvpdlsNv46b1&ea^C|P9!IoYey9}elX1oUg4zd6Td1m% zTiXGfFPGFU`osC$j8q&Joe zt^?u+uQx*T@?no{?enIcpRH4nW5FsaP&8fpgCUc77(|XjklnT#`wB6b+9J&;_{C_h zVK-2^2B>!831P28y%K;YQG!uV^*Vi%8u|!g*HWwVs;}_Ju(DhV+hwlj5h-RPljz&# zEc>LYUzl&Mn4cLE1N8e$L^AW+Bw9hIY1q)0Mz?KVnvA(bK3NngG;9;Vp-Kc7@lyR( znyt294CiKXYK(MNM!DmYyPNrQn+R;xgA3}%Pf!~C-d6l9MhF0s0f*78EVdqB0IFh3 zG+2f#m9?}!OoUqm5?#~SLV1n(vU0*29bZW_hQ3kB^H-L+4Z7xj`O)-|vb~v>Fg5kB zV6yMV3_6|#X0f*a*xY6g=XX>*XUS^j^E$${;*umYlL^|SW2WSa3JbD$Ot8;)$vDY_ zH_4!CU3q@X;LHM#&X#fTIq+B==mFjO7OXvu@?YebLXddyXHb-mrTw8OS0s6PsTsl6;sQpaPRX%FkA=YD|MAnlsy zQ9trk?P_Wl_>8a0=6$@^UrIUzJ(w<%=8tMZXf$7`LSg}{PfJa<9}h`qNVKUO;<@;b zUuPYT1C^`o%{ANd-Yp1fT*Ouuxcd;%@NHuzK{uj4!Z~`bI7UN)s`D(kqP=0W!t@K>jwDL#T?DJLWIU@a01CCoReo{T_%KvE7@P! zH38n3`Ar}uaPRnH9V_MTTM2GI#q*eaXl3|vJw}aly5WlAOy?p~JOS?{W@&^2@?@uc zBQ>|eYn790;KRb@0=vtodI^unoXvz4^wA3AKh*bY+-m3icC+f5_1qOYmY_-S<mStgi|YXgyn@v=Q=JCW-|L_d(AO$r+e`0%sWBLBaI26c*6HHguydN zAUEkuR21@+FR!N;ekS9UPWK^fl}H4O;QEXhU1H)D*Wk@D_$Fk(h>_%PBIHt?ig51& z@ALUb&T~hiorZtV4HBP{r5X5RJvJ9X*C-{ zlBdve*fX(=@ynK_I6;#j_V8Z8J+wd8-+~dO{<#&E4EUPMzG$y(HNGG;G($#Hlj}hQ zpN;v^JFY?`%UWI<(l$s0HfGjUmqg)t*Ejk;4cQ@u)vyjZQ-(eJY8{0JvI* zrD?yYj0*!SnR$`+H|i2bBo3JZxnd-Nbp(70(24mshL!=Hek(rVQy(xwPM@l@X%qf= z#oY+>%uRwBxT!*^@Mm(axZA z(d?iLTs$WNhU>lTi9*ZhZ-o(5fSZVWnA*8ibiY#g14BhIy*GRP(pDJ?*qB^95whz| zC&dWnMmhuR6`SJs5e1~T^ge131`X}I26BxoY$5`(ct_Qep|`wEuxsdaz1@I|Tk=+7 zKt83=%9MP*m3*1$0gE6d9$kND@^~>r+E%A8t143;LBLKjIqE$=giA~mpm*DyJb zTPY;(yB9od%%$mw3u8Qq7tFfi(ym>?)|)}jDq3L7 zwX<~&ma!yBlP?@eQBGja+5x?;`i+batqScKcM#nhcMwlDSuA*W1O?sUc!f-iW|u}D zN8!4R?>JW7VrC=ox`3khDcQUK7q0&!3ndwlmA-pju|D^1dWM^(ZT#9IM_W=I!6Dsn zHq^$p2v_Je=F?6D;qB6lhKqf#WjY(V)>mdqFS@<61#+xS%`esX_?RIkH^h$ zQ}V~s1ubyMKc7pe6unER%=c4StNI!o#+$WUA0!obq!8tKOMA*63M33m#XJ?VM72ma z9&4jRdg&(mjaP27?#`w-oD*8M6fJ=%4xP2}bA`C+NMjj!v`Q=T-Jr`8^yp;fSJM?3 z{x*LDeZ$$OyZce3K}zpSetO8~>>&b8XDPy3q72%UzOa2YtzAy`zGT*il>K5yfuvWGZJL$UO-(m611)*PD&UTA!F5TA4lPD6Gq09{hWV zw?!vze(Sbqac`-*p!JadR-GYpTcjnZ52po5@zQDX2l;zV$50G^&3kbP%lLDRY%Syz zdvB`|7ZvuHZa!5f7i^w50|%|g<>}5B~WG+ln3M0Zi z*_!bN2w!T5N8liH!-CVI-XnSII~jj^Z6&w<%FJsh%+<9g8f zoZ`9+98~C!m#tm}I3$KloR6by&zI#Q{E`7-uXXj=30Q#Wmfff7xHvm6=YoAbpu417 zDo};rQZLA>tL2*RAT6kiSlX_m z#Gqi3h&dO)jfp!jB7b$4T2e1GBi&Foa(PIv$PoVsL{AcvCO^6Uz4?*Xe z6gMPkHlT^Wd0Bu$#YcKlFJl%Pox>VS%qT|=qh0p}l!rOo3iP!s1Go7|t~SXcPmE_O zUP{xSJRXcAfJ7mdh%5E2*H@w6_fVSB9vo?hf@YBX%x4fFfa6(n2)>038|ExKhI)-iJ*qqsO(LSm{PjU7UyI6HkfBu zA8|E;D_D3h%`Xb4L&Z=p6((&lPm^w^9W9Ei!)gA!z$y`v0EE)%pMB_llrYpDG3&5BJ<*-WYT7 zdeP60x$oFon>J1FPJMnEO%_f@mHLC;#PfoS4-PQ>UtS^Y)u`QORPRT%C+MKDokB^l zaH!g0;~IC^S{!0QKi+>1mU``9U2Z{44_KjM8V+MiSp;{iyh+j2wPAFs1WD9As=h_$zLC z+}PD+^U?BrNvZq)CSt(^C1N4TX{v#++TFbDvg%w-{(Q$J0Fd?Ab*b<8Pk%+xH<-s4 z5I4YJ``xVm=(6d29m)ot<_-bHI=z>PuC8RIK&;#MaE!SAdGY*(QR%~-RGVwr&z-k7 znsdw_H!>iHH#gb+4x7a_g0^CMr*N9bLkht1<;PDv9s@&sZ5O!)h%HGsPouJ1(c%)$$EC@k49 zkJ<1I%2^y_Z=ZwAZFy&jF6=Xi=n}s?Z|m6ne6RJQ9trO#dff(7`r53t^GgQzrOlPJ z!Mah{pR6H1r-8SaOYTNeHgR@!e0-eFGtBI#F{A-MC)LBqg^NSy6XZI%q<(riau?y? z^bJpkT2Xp`0MEC2AMD(Rgr4iW<+;eyhipF4N&or-@8jJJnN3Zu8MR~;h(uU?Cr+La z#gbCRGjRQ*#hB4{9q_m|5<*v5O!ZS){>;{EZ1YZXLd#fp8w7@k=fWf*9DYX~+J*PV z!m4)LvGn8dAoFX?iufRF{xQ->-EhHRE0H>2xrdP%2_!d(fY*CbZsnD+k7t8DlOJPR z&V7WfjEBQNvdsM^d)AN4V9UA}*Yz+k7A!8KeYX=lG+x!);KRM-Ixxjwzc3PC<0bQh zG*B#$#<8y>(rp~tU)jTWaHH)0F_pNKthF@X!zEO)W+5;(sG`DTU`oD~eKojyLW!f#-zqkFsPp+&+XTQ>-JNz9UX}w(Q=SGV>&0+bV9bA5T zIX`F|*;&S~y!4E@kmsD zG^;@SvcN=^-e)BjGb=EY9>Wd{!UfL8s~l!qtFw&d4}w}MIkx+-YHs(uVTF^G!iBr+ zSb%riWVYVh{Kh!0O4fXI*$EtT>E~K+Tw73?R;TY5DZ76@aDE3hO$N=e_Jt=hG?}Fb z4D~Et&6!MI@dL4$MIN9`M3KFMx9d0*3ALEthN1)Jv;|YPP$}A^O5%I}2nd;J<&}u?3L~Z40{RT1#!^|8qYqi(Ffq2q zuo@CuCVA3bpUU-)s~B4!Q7?ptZR0Mb3c#BK8Athk`u7& zjAT_dC3SOMUNL2xvuA<~m%RnNCDDY`yxHASNVk8GuQez5kz#AHWjay6z zR@8qIAcj zC&Tas-m7VSyP`QeoJ?S|7`#_S(^NIsZMCGxT+$Th$LKwG^7-vAJ}43mQ2p}EQ(4r+ zybWkgYiBgEL?=bHUlEWIk)ic5N6A_sgfa*{eC2w1dg$k~!)&M$!a`3M*K)M?@9TZ( zh2n!0HvE9QTqsl+UTE}Ot(sa;5=H%*kraP4enrX6k};qnGKWNwkt2von`oU^$0nZx zIxsl1jQay2GSVWit`G+bIAQ^b!B4_Wobh~?YNIpZ4SaBkWj802GJL$|6F&Aur~d{G zjn(Cb0A>Z0`8^(XEj$OOJWy3PsG32|(>!W1r%1@5XFV-nj`uf*#(P)N?t4k!pX@zT z=vl4;#>G(uN))Q%7KtqOIrMZixnnQxjeVgLim{vZxS#~LM3VX!OC5ESnK00r!^RbSL?OAmR#j>kowDH z;$eoBrzF_;g-*8jTx!_m>(<8S87?cAcNN)+s5MAlvp&1Y6E;eO#|Kx_|s|5=!{X zV1tD%=Nd^g8S%C7X+l;)>M+TqX|Mlh$~jU)IU)_5V#A{R@01f^Qi(!$n{Gp6-vF&2 zUefu?QsVg{DD`Ee!jJm6?*?F(#$bFN43CAK^Po|DWA++f0d)0%bnBD$n+i%_-7|%x$_xCknP@GH9;iw}0I_p2L_;|1h{?;!bs2~lGo#2KD7(%J!rL6xR_Ipb?}UISXZaOdCbdkszTCFtqiHM5PEzapHN(GK;5(fYpOxNGf$UE zh)C)bAFCB~_lUckpq?O)4A&|vxj<<94HW+#rxVs)E}oDMH2JkHyPWA!%#BppZ`Tx=tS3?%bu4kZp>@4VI+ z7d?Xai$&>Wv&^YH-+>@DmTT6gdH$wW`m^dIHYyPT5tgS*a3+OV)>;DW-l;PlDuA;g zDjHO$ez3c0n;{?+851+gj>=?~nwBcwpF_enC*B`22xcv6OdTD9aDW=yb2ieuf)5Rn z5K&{0gt*POu@APIHD)VFp?2lPzu8$vX zY#X<_(+buG<9C+&hVukX?DQekZs=RucsI5zvAH5lZNL#=%Dc8)t0s~?(q}9cFU$JS z)~5|*@p;ZA_Sa3wqwJNvw%tCu?;9n6ll?Sr5*!&D_Wi!09hD_OtEAKdyp|Ip8IGn7 zQA^Z!=ZLr6L>=4VKWd=6h6@26jG-Sw{|{I17+6Wru4_*)v7HGgwrwX9+qP}3iS3Cd zwry)-+nCr|F~2qM-urxKpC1cdT~%FOT~BxQQ&rb}e8(um^wCco0xg%)-ISQZ=d}KC z-te+>%gado>*^K`S#H~!$bb>u06R&al@-&oD;~vTcwUh6a)C~8Z=L7I&z*?rA?T1< zJl*()&hemQhZOFyisObFO&&&vco$F31f^2}vp^D~L__Bdc7Ga8TVIsQ&JCfk)Gyl& zk8QsmClRhhls3mpJhwzXI7%3qr2wDMX^f=*dF@EugT*@oF#WH$4g#CF{pO3;x5#%0 zrMp~xp<1CpePoSXDsTQ=p(y{fo0aE!4dRneXlZ`BSwf$st<}x-$rFwVPbw`EYGpF= zRnkkYk9T6wqHjo-DUc-4=JJ38^i*YR(E&;RXYBR5u$FmO%F>3H;ZCOG#}wRf@D4!v zyE1jLFtz=a{}pIa+}k6{Ws5%Zc$?dUJPdU@))p6mb$G}1<7-VAQC#3nhry=@PHn-$ z;uH3dA8uS643Ns!ZSL|kRsHlmzT8|CF)k4$zEyP!1k{UT%!NO!ydDqE{tg4)PEvCO z-{3pmS@1vJ(U0b~2NWKEJCUgbuxJB*OjaS1Z(5H!I&3;8)K_q}HK7$POSfuwNmi$X zQ#KZ><0d*fyzA@dXuyrk0xrAX4zB;osDg7M_1p;)*s6o~rHc^AMrKu4pm~OPTU0>< z)L?@fQwo^5$g^tUWO8-rahIeU^}2?uwhES|hm>?$|0`ef2VjHzeftJr$tq|Mb1ff= zF1oHy>$}2_HP$adpSw7KkEiFo5(T&DWcZ6<=5S>k_S2T2d0ARjmKb^%ilTZhfG0_OM+d6o<4u<4|la_CVSue(Oto+Vl|37GBwFE`IJB=XJ;{Tf`AcJqxRCzeo!G<{J&3YwhUg`t9 zI-b!LeuI35oqkAxCJM4gDt2mhC@ZcmoHq{zz2#lF?BI!+GUrR0l<))d%^I#MKTeUP z>eavz$Z@8Vt`9Yj9EAI1IAzg!Iq%k+#nY+oS;dMJsV%>;^?;iyiHPS6j*pt!frtkH z2$GLeeTZ1d;MzBZr@!bnz+i&6qLfco^%+)Ewk&Sn+Pw*A|4`oY$kld*rN3F zw-_MLO~>~)(F0yrB~#*Cx72m`9D!wY)BKrl>||zUODtwFB8#uy*S(M}kt9Um0JMT* z*f|?>(@Ja-0Rc&FA{)1`K-Wa>uq}aRjd-I4FQF6$rpYfzxXDswrLl>6v&hgf%VX0s zrcQb8VhJH+wk`Rz&&aH<=D%Fkzkt&(L6-!)0S3Fvv_DH6?Z%&}unU z5iLo}Z(7?}H?hA%!tH!OD@~3|QHbF?u}SqsD;XMBhvrGd7ic7b%gP4#6VFb-2lvtq z#NIQ@g84+Kb2$vJr9H~R;REM@8v^t&!oLsezR%f(KlW0xeQ(I`fHlDU1UNDsA5`Y- zoy{R%xCGLZ8Lwj)czUPpM!{Idsp*e96J0pYDO3AJh)1t))(OL6eDF=F2CO)Ac`~bz zh%6))EDi7f%x@s9=G}jKXJh#ITQVj8teIux8t!t`Hjax87M+2!XR(;k?r?i=2o|JL z#>`H93@v6tZ1V?$Af9Uo6;S4MypM0CDHVXSN&uq`pJ~T$oim1r-l;*d^TR`%D^vqk z$C6ajIuB9~@mFpIfBa?fh%9JSXAHJ!a?JIjT-xGCcdGi2(}Dq1o=dHO;M$#NBE}u! z^$|cvLJvJxALIn?j+1{QPF=`F_~6M6n|z3GEf=B|!>-3Tc|UBQ8KBoD?^=ZvA62!Q z5+!bR%5lghZsy>Hq=k3KEvGw-C$PlF^EA~TdAUqZ|1?x#o?w3B4yS~R4#z$>o3vm= zC!h5$>Kz{SB=RCFE~2?rf3`%HzBTL^ie)_9&?wtzV;7GfetSc?PtFg@-&OLmbCDMoUA^|$CtKKnQGPV2@j~}_ zVsw$y=BBR>9LU!Vn9i2LS0ofWdE>x{2LFbi*iz+tzR+^D%EG##Q8z|By>hoP|wVQ!MW@zAR(fO+NP}!OYar2las7 zZzjs1%?pz)+-Ty;CIcME1?e?XAL>fD}eZ< zbDcAB)_kUcVQwP48tO#Sw=b5P{32Y-&t*B=M^a?lM<;<|_evLT>{V**vGcBSt$N@Z zeE2ggfV8kHrSVcs-~8W)8zp_=1yl26Alxc$oZU5#SD3EH9%QtAn3Y)}k=2Fmr3EdY z#e0{X-K9$g9a(UUijg!9$wvO6f#+&vR?~;-D^W!cTW(X;#aidebPwGl)aufLc%lpHNMVmgykWQQ&fDzBA!Q65%b9t#<13T1H3}^Q~#0aAS zZu6{SJW!AX{^O;-HuA&~M!dV3sr_#|6V{l4E{;4iiuN-H;5Y9M&G|j7Tf*VJ!jGDl z){X{zUP6nDIW}AFkc|v)`V!s0*)FmG<@63I@_CWtW(@dXQ+=y$zs2=syO`ERu%yj8 z00yjKR^K53a|1(M-?FdZ;k~!U8@w_L9uk9{{CIZ!_abqqoZPbq)KW55@XAnr$XKzj zu*jqdCer2{&>LS8!6;13LLLunf%F4J$wx8Lx#R<#_-}l{k~ei^gg zO=lP)7+vEo!+trwD7-k~d5@@UNxA^`23@m z-GWkb0@mMoD0Alo%&97Ee-|7c5M80^;XJVsq9U_G7=FU+azsBcL$UKC4(zPx$BGD1 z-<-)Iq+DD&x+_1Ke0#x&2p+$=yrx%LF8ubstPkdFekLOkORmR42?B;C*ToUJ$s_mDGO7W^%gQHnNZ}KW~F+yD1$-@t4&iPlKbs+0kMx2qZo?|Aeph5L!D^A3>X-A%2 zGlJ7s-5|@ET;U+7X_yTB_`f`zC!e=n_d8#CNy3NY z5z-&eivoLlLd)yisibg!D`i$Q3!iVw3^Wg?-iME1!{03KmmX8gvGLHrkW;&`@n`|t zA!uF9e#gK8^_H=7zA@X3gkU0=ze5myykmRNi?Jtl(Y}gR0$9${yrp}4l)45qDgxbg z+zP-*ZYKFgzA8{PAb#sK&kog3!L^9qPA}0aOY1k4>vQ3Ee2SgMG5U??&nV{Pa)w** zJWguxJfXzr2rZ%c7&?WoMc|L#=LpyoDg1Z-me;?(CniitUySQWa|}zVv)DD>Un7EI zQQ|tDm3Qeor}%8*UPvpjJ`?9^*G!QUIDg}u& zyqo0b$14ae2~EDg>F~Kuz@$i6{*fU*YF8L8+>X=a#G_RtlB?qXRI8$lgOKAk*3*T- zAX8olz5A=)gUEl|?{!?E=j{$Sjq@;I^jLFM$c8d0u!~Oq(dz+7oU`&Jx()O1fPTxq zuDX6#T+8b!0Md1XajQ&GzjN_i%J3?zy!TuQyqP`jK~oidFLL2Hc1<1e{$2U_Djx>3 z0$qaZ3z-@G!#mjRmq_Ru2U!nf(zUrg_XSR6Av#5H8t-8%wl;46s$+0JC(D|t$?+dG zBd(W}AHD2YTzPYV#w9ngSdQmnf`Ja6VX({c$D6c-rE|W??C0V93}>cZ)T&UdzKF<@e#0xAkOC z*n>ya4|%%klpF26`akqpk~dt#W>mv&_N+NIF6+-8Fj4*`&NfE z#=X@!NzFS}x79G+9j6}wg-nOwHGz&y9{9>&)m=vkiZIl zVGEQN&J;i(DqTl}hbzs3bB;Pc!K}bi&cjq3he)>ps?b?NR8UMqd##2I<88Uj>IWt;$LKW8 zIjkiCX?(wKY>8@`UEHv8ya8@l4lFOpxZP9D<>MSJM=a}RBvdRX7wJ!#a&*h{*<&yD zTA7cZnQzd>Rp4;3DW9R>1!)CkUD>bsLY`&8Qz)eJLzyp)n8FqD7{jQS-%dtCzE-oD z>*;8dTH*KvT7$_XtM)rZS9j9;vEt7M&%0j&LSkSf?0qHDeG#*u+`h?b(ZKAz!%Ux0 zEj7DwL2;}~ThlwL9B}pOIdEul&i>BwIX&BK3~G`4hC$)HNw=2enEn_)pr6$v(PL<0 zmk_$zz>KFf8o>mHht5@86ksv@a|*wh8i~k*84h<590~@gIzxJlMNFf~+LGx`&|I$z zNSJd7LVT(rZACUO5+CJixd>!-G`41XYAwJ`v_1uMcZAniYwqJ(ffVgQG`GfwZY|q@ zHW|`ta=1UP%W$6gNo08WgDNs)VRoqH?u4fQ-0B|r7^A6q@FzoYTBOG3+dL!SJ$v%- zbPJ?SLx^FxXJ{h!9bLAN6#3D8FMNX!;Jm_f%VkHvoi@3(amc-nw({zLLHnIuI`y1Y z8#XIGj&2f;3GUP}2jo+RLB5-dW?IzcS!(W0$;DEdq)*VpMKHLdNb%>DrIn(d(rfIC z7Q;zL;OOJwa$@I^RU`8yrQZ>#sQ*{~0<`)8xtP5#oXM+(n_LwS7vyAD#rS~68J_R( zYw+^W*i-~ca;gVR26?14%d0i{Be^&$#$7eph%5aEPtOBT{#ns`U=$^STn}JCN+QD(8Yz z(_eQqA;TW;BCor6R^cuscAgd5Jo{0#0>UA|fYB+t4nu@}HPRrj#gQHTin>0Y5y(9?Qk6ZfUbzDS z9M-9FKZObj_ZceTjX%d8itLGC2^H@Wi%+gAmEVXsX&b^)HCz-F7;6xx7plTy*5WUZ z%YN z%++GP>lUv8a+G6|1o6^Z6gbsJ4AF`ek2?L#ShKCQ&r_q#Q4c@QCC^D#O2?~08MUOc zoQJyb;ZejeJzc&`Y8Cm4TvLMttzqQc+00jIrr-5l8T%QQ$R0oKhN4$(Ogs*uJjta+ zg~9tQ7-5ZZTs#zjd_XdQOHYa6bpm;>sQYTxcAOQeH_bex5U=Kv)p*!NUk?B610pdn_<}kM9_|(`H)2G)23~qhQWN z;h+?}!u@$^Np2|&mE*LSAN`*Dw*lTLJSR8$Xr)BqcYL>VJAx6mWWxhZwcmipM2fMW zXGPI*Kmg3=(>(I_=M(KZhwdfS4_#;z#QjVOxY!W^oQ#Cqwqj#4YkaBJ=SoJRW+ zzH;)|AnP`vbwN-kq3_p{yr-SKA_khhJ?{mVy-*b~2($WELaIXcq$n1K%`$bC!9cP^ zI473K0$Ms#o z)AsB{yS6}{#PY-7JAThgFXB`08CJU=#;nc{0z6u9icFMchi$%{f_Mxo^oIVcw5Y3+ zFx~ho6^4bQ!1tM}6M3u)cBVL&Vt0K-`%8!JZQeF#h1T=<_q4)B7YVDg+el4-777#kUGHM@qQ6RjU-l`nqesCn%#{px{NQr@ZHLzQj#zMjsuuB&!i<=| z4TBJoRKgwLDE$ylrcXlnxKq?bGdLHpr;4J}cF?<)`BNQ{{Zjadb9s>b5K|Il7!y1YjXcC<8DCCY*biUFg%sxd$LU!XyK>? zgJaoR-^dq<*lPPOS0(_>Pi0!Gd){(_G0_4>6;)_O8`X~o_$q>E*xW5Ch7aS0t^3vT zIzm?+Z)`?YM&HY}E*Gn#e;jM+()u(@!^ z8eJ7*l%1{D=mIf+N4uWNim|D~SK+^xDL;w8W~!*;l;kg7xt`2g(W)v7uX?mUogs9Y z3$?*3A5Z&!jbA1`2Z)qxkDt~QbeT%y0_Cv*S)73sif!HARq&*fQC*XhIY{p$l`tRN z*Z@7IelqePzf_wN!rwEtUHdu+L{C@)xGJ{-u+;Bxk^6wkR9{*#N@EuNk_3l5G;Ct= z;0Dw_hLbJ>T)Tf$LFl1ex(9dUQ&t@DZR-({&t27G;aiU<30F=iw3~oq5WMHnoGYF; zi_lvm&$tdc|H23{oL2i70<75*qMc! zhGV*=P*3=sf}U#*=-&q2ojkaQO&L z99X^EJE{!I%orG6VLAC572J zH&BHi708_l$hwgWlHT*pzs$TquX%ojKCl%0fGn?|`G#S0f%Wzmz7KeA|L6u8vDc!@ zazJe9+;Mk6`_%8Hb>#&yM(+I2@d%sq)(@D!t=_Zo7*8J3e*CXd?atr$HVf~Y>?7~% zu|4-si6acqU|+-jssWn zgT&kx!isDK!cz+>F>6$CC~{%_hZvqHV?A$YvL6HJ?#W0urO=v~zdt|0Rlr^m*Uz5dLiO6q z#!Eoe@;`cd?mFs8d7II$A-{OYaqw?<5}n*@Dd8*tfuH=_Biu^)!?fM`5zE+9k?BE` zBc2_BEg7Hfb$d2(qHfjA?LdLx@2~pW9KqYG(}JH)z|AV6jZ30W7nj`JveJVRidY5i z*IHU~WPxY2mrJ1BspvFmdh+vpIye1cLqp{`;FW-_h7f}M$d4rynR7L$lp9_Qa#p8u zJ)G|jtrI&Oj%0AF8I_5?XrViTiisW(iDn%pO`T|t<4ZpK;Z95H&=WDGaj=a2_iwTt zHD<57oM{jHi9)@NsW{Dy{y|m_gLb6tdr3BS>-^q3DtDj=^G;dg)UaZIRjSrww$^t# z{kFue>ElsA^p?dE-JqYni|Di%koDcKIA0;#100(9e_pd|emP53cqV4&*hLdxDNYox zyhd#XL1Op>xw-2LQgKfaY69g!u9kY5j!uF> z^0N^GvQVg{PlDKRT|^@fqJxws72_8QC4hXAq_})$7C%0%D-e>nwdFb_bhA1k5JTqK z80&J5jut^Y1Zh7Sc@qT3=}Lszp8)1W;vc6YH`WFUaS(5>fBlLvS&j}WGZICA}KTr<30ttCySyakmg!KcIaY2wwEuX;uo%>$~s^5&It=C^MVq9xX z!Gvdh#Ro$=axH_)b}%7%3;r-{d=)2^Rr{CZFhe}o4kq$YCt3-Fj5^d|AaMpEqmq8Rz#x`9%i3?GAlI*h!nTd-^cT+jD!euD*LN;_6;Jp;EPN6W>qeNgcgE-| z*%#qIA+*GnkZGr&g1a73{6-QU_!}6B5A!X7mlA|Fy5SA42+u|3@B9}uOUeNX(hyb@ zo(?C}YfKHe62bw1>Vm{lER+fy`U3`X7Ib}B(l7!@Ni4sk0zg?t*n{cv7ziaMJvNOx1@!djm?-@?)uEg%R`i%f>ajE6qk(EAl_o;eyUpph6{ zQf&ITj++X`l~-8G6W$xk+nvObNfBCEO&e{NRf5mBR*I7#A4sARUW(hr9Il0X`#(6U zEzOF+;O~j=7JXlR$RgANAo!!AssF)|d_}&3Xg}456`=ns4CZDdH9rf>!J)mes7|av z1fZyn@KGI-TOsQlwH={py2nuvp@>QciF*&nBzJ=wS1(4#LyMB^SZ8xfXRm1>ydmk5J5688fV%oKd|Apr01; zuU10sBLe8oDV^4Sf9SmMHMrodQ~2PjBLgZZDX3s{A>bG?zj8M`!((#BvqJG!gN_Ue z;sfI*RZju2oMI3tLmG%JTJ;p2Ah-v%l~qtskB8I;O&QW3;$eho?1?R?6Hb{RZ!pxNj%zMFaTlCn3x8BDjZisc@dgk6u&cVbTS;bI!A0{WCS

    fHaLy?m*s(f_4I7J!i8n+r7`k*nMW!s%$-pH+tg7@m%tElb=K?zz z?;*_pqG$nhEB_m#RW!>=^WPXPbLWUxA)Mf-2g&Ku|Hf#+{0F0D{{LgNlt36Q*T(?q zvS#tgQWYim(|Fd?1@RqX(=WpPUm^KvQDL#Ge`cfZTZ6!IEHufqka;r9B#sz&2xD6J zB%p7(iG8fQN>e6@*M7`eY*SW{8MaN(IObZAKQd65f&g4Opo)g`9`Yc0WE{bD6}w|B z)uNVa)lQcFP6acf2&(of3Fc()?}Wq&1L}9tsAbw2k(p}P;{K5eK|=jqnwDojiT_&D z+vEI9<=Ym-0Z6BigM+A9*4J&IBmLkXl(h#Tw7gKcMkIbVl9_`j5?_QMsXGKNF|KoN({W)oGXSns(7&?|*NxU=W0k3E`WH*G9ejuh zKBbnRfA{m{_UGNO;M=u_HSop}NVLt1R*8J_itN>keXN+J)K%3RE1mtxgdO_!+wf1lC_wQ?gmQ0cjUL7Ql`9S2m*MlE;(Y*XBEp0qrZ^ zu1DUIEU|X?k=41 zt^ii3*LuF{{n~?oSX{rY)fnqx#{@#4*M{1P@m+V#1=jOBn~}5mXI}w zsXL&dxrHkjYs~jDdGq0SBTKd!HL8t^Q9Z*O)|tOv*5KR8P_epqI}_*nt!Mw#U{wsI z{cA?DSJ_wzE3j;ZBI>h7TKD-ga(nG_`CiN8OU`b*a(nIi<(Rhou}Or@Svhj$#hJXLxq)>L4Zvwp zS!4b67h-nKiRT1oHe#`?BtLuADXc>hVs^(Uws#-Td;=kqxn0;I7qu+M06!t8-t?1d zF(pge-X2A4k6lA-&XD`!UZMb|&r+~lWC)W0zp+_PHqGD2p4yshcB5BOmGQVrr*NY` zm&*#pwO>QJc(h;NA~30!`mh3x4FJiOHt?`yN%wyo%rgBmC$C~@j28( zZtFN*DWK=sQ(j|U^8PtUr8j!t&TTz;M`M$oQQ_OQBeC~Q_sz$L;^hzIOTYu<(A2As z4EmGbj?3@!S4aUvTKon<0u4XHX^l;YG(IC_J2(ylHb_ONqTvGQa*{iGCk&?D??_ zUrV$oM6XS|jU_4D%*$0yP(MPcdblEOII??;e!Ifiv|_MBe|;(01({NVttCU(wWsxP zz~BDMxZGGYzqRw$IUw%H@A6t8nRH%$H9^;)LMNj`F3Y*Bj=}z>cfjZ}u_lJ{)uT+u zb@t)wGKznQh+)Rm=(Y;CTN|T!uibAdJOelR{@BsgO&Xhx_3+_^Bi`PaCg-z)If3W@sMTXea05Bxya#2%cx)fT3{%*wT6X=v%Y8L zwd;jfnA3!q2-q~UE$t^%IcG)*7JOa(o=O4?YgtX&=8>rbD{TRz3BDDO!=pZ+JzeeO-MI zPxkYp%v(>i^)PB8IBJSn0fjfSQXjrNQJ&|>dGHa4~OT(G}fPQ_{;85$N8yss5LuVx+1Q86izvbp3;4H zsxE)52BAndNlN(dwG`eS*RnTWH*6&F(9b@XKbD?r!L=p{#td}7@RxHJv_w3qh;|P0 zSB?XKTL!+53sBNPpzL@O-m$$sMvLc=)Q-{bhgLG+A1eqSmY^uIk*gf!1r5YwmV{z8 zpR|7Q+lT90A7d7+4#4U$UJX$>BYB8JmoT15plDUAT24vN z-&JZGa|}G6h-Kiz>wtCWXIcZ1q+3`UsSe;s-e6*VI%3EIogRUG)L6v+if?P{n<8I2 z)qwCTE96aI!?954r zU^JjR(syEsdFtw8IVtn=q(^cF)pA;$gtEo-@^(^Oefgp-^DW~kOJH^A{*W})(E^|_ zRIz&C==QgO2%GTs6nM36DO>#u z+}E(n9s~8CYh$xccK5O@=Ynrr3aGC}!`sa*N5=O@Pe6b`a<=n7{{}{CoFLv4K*oWr zE#V(B&bF7^SMX=R&nAA3&eZ!g2%KwUWM%hM#&0IW51+#l@v=jb=H_MErzc7f^CC^k z1}wP967j+;iA7hK?{C`kfYB53BK)8Z13>HRjXeEqYR7wi@26Z2(Uq;P@dHKZ>p50x zqWrVKX`^LTH2KWhAg_&D=jRb%xT9waBsY~4x5}VYmbTlqG(@L=6wjAB^Y{jw?%DPO zmSVeoJ_0uN!WGHM1!rf0Q$BW=P4`jGk)t1uN4JT7Mo>FPVD5k9gTl1Ge4f>W%Xvz? ziibHfGHtiP6a$UXU3^9RRN=})ehGhGK4J%T_R#D~^qeeGG!*7KColnctRdArp)$>w zqhg%;g+($pjAhsI{71`w=_wJ#mbH3FfJ;dZ}Fs4=ds zz{ZB2S0-aRe{tU`-9ieYnub7dcKD+xF6pfwRrJB7I`0rFb)mk_5r1O-@=h@?fh48t zwlGIvk!)owEyvX&5kChQeI?*&bR8~9f!a{^*#|8~C*cfVd`-DLUYR3cpqF!#b!?Pb z8-wHiQdh*w*UZ*S{3wB-=301kk1hG?MIc8{G1DWJmFJ=D!pY+iCb;#r15ziuNL>%4 zNMTRf8^!^S-*|=@kuiWojwMRX+n9jt^qu`rTa2%i%p7y9-F_LsXJ&M`F6N7#5`I9= zRiM6eEjqpwqne!%Qr{HbB5iH>EnlymJuw9h&jN4>*O>iQtUl_Yi8b0(<3@#dU=5nY z$obfDp_hQ@MW{FL(O9^kj@Q-Fux}U&Dswlja(4y#C7!x*g}pXc6arorv2P&cx1n{o zr4IzBGmJ3=JRci?>HlQ^5(Rkg{BRQ`((J#2D<@Bwp~fwzcDWfb^9R0XamaAcM>D2w zJ)JneM*sTH)A2$%c{a#ls zQa)D5blH9!(1VLoS|f|P1`^cO*k&4n7o3=hI-?(tBFR#>ZGD#|vkc!lys0XcNAxaWDqb0Nv1M85{DXEAoxN45h4Oh2uPzkQtWwUhOz&)I|^Ae=Vu)2 z0KgBR3P%p^czqufkf201>nU7ibOKG>NyOIib)=FJSmC0A+Nd5qX)0Y%ysFf@>A(7T z+r0X$@cB!w`$q1&A6Kl9A9rf*k@SkL(41huT#)?bMDX+PG~j8Es0cz)om$e{`9~FY z`$M}fEzv3e^kX)S`Ul6|56nmP>J}e{766Z4l}r=QB&iC6gsd=%7lNK!8)-YVqm;S9{&+B!i@5>{bkel<3xaV8l8eOOS?5AaVPdk^*xm-n2@qDO9y9NQA^^2S4E#W#xD0pKPKk?{BR zsp{QrhdZ(UbkmPf>+KI2IZ78T)oC9y5}RH4EOo5G`=z$YL0X*hQ0Ke3Y@}o}`@Rlb z)lRdR(2F!c9%9B1un*nq^ZsC!ACa-zRvlaIaDbIsyZUwK6Ns=4EqA4qCrV zdR&$+sFceUS(+L2Dp87pt(9bZANs}Z23!^({I>Tqy6)%`ef@&JCWLz`v;n=$)Ry1G z2DvifA60FsryX5#ITBlK$sH|i)Q=lemwZXVox2kmUO+4F2}CTU0@w$?<PP#5VmPcq{=CD z`J50*a!yD+2sr(pT;6@boEc(~#yulM-e6-vpfp$Ihp--iNE@r7klk>1Mj`wz!(Q=! zlC(SvkB47H<#xIMFs7G|UCqO1l6Y*Z`fS2;?R#72NNx2Rt-Po!q)i+ap;XHKYK}nV z{eu;0XM;Q?qv_t5J)0A=STW}2Q*5}-6D*+hcwNt+++Qb?A$6idp^U*oW&yNAr%p;0 z(q5G-gd_q`DhHaF+C*`mD|T6yEZUQZUnD5QbVOiKdf}iKN2tQ$h@?>{2O^Sgjnb%t@@3XS*`&LUeV_TM+gJ~3%~e}43`zOn9WG3!FV{lOMlZ~H9OzjIR56>HXo zR_KjtmiRRsgmgKTbK}39)jiKN_ZmDuJB_^nx!)apuu(>%m2$cbQsi>K(nf|YQwDH2Nfq)CRomAf+9b=cs==@SFT^H;Oz%N|ui1FvEVb0-0OAd{W z(4;D!ITlKb2_3gDd+G$e^+ColdbVS%BVOkITjdQH5n@pAGAGRnPfVpZs+GPio z5EdiWQiEH4Lx%ZN8X}X1jKp7-0pB}Fj@dv16TuF=h(b!X1ka*z!d^2bBfD5KpE0dB=^{ny?JAiwm(1Y>!wCPx zgahx1PJMuBdBy&zp5dl(Tb&AV%ztuLRecssJO%d#!Vc;0+WyFRdh^_p_1|VZ@=LgQ zkB9Qg69*wERs*V@e>r*h=^U2%sSQ zlM{v4fkBx`FE^~u^Q}WPBAU^xjrL2XYrL|p8@&8)m?6NRE`dvdR9&-LS$_ZjRPiJm z>Af21RB2>Yqavj0lg<@X=QxmWmxNytQjXxX!-LgC?t&zC~LI>>w;EC~R-4MLfz+MoBGyLkCk~#o|Y{WOr_cwI=FI<&tO9I$e zWMO=M)839Q67f2_ePn*f17YO9s!&_icuo>cHbo&IE#>dw1z`xSQpgy>Dq$~|5a>$_ zSKYu$r~)shsSLCl&k=P`djuq!`ni7LG!l|hfzPS0x0LT<`{%JcZrG|u& zCPyF)Z+={rZg~eWIg3W^WW(3uRK41hRFtH-$1U-1iA~jY#fKipELNCK9NUWez4%TA zq;A($uG&wCeYi!;G^zFH-va0V#EdnkAv*PFA|1A3EB(wjqkK>nwLD+BY}(x0^# z!P;OP)T8EgU=Ib@{ilmd(t-kkNpPZNEL&E*z3_$=@xa`*jKX@&TPf#bJjyGnj|teq z;f^f^ThN!65HaycDbH)Ww7uA3;FuF5RalazFl_woD4}9sRJ4dHZUgOG>;7l(?I(#Q z%{8Yc?+9xeFA>ttZZMEZsv##5PF!qu7mP@j&?$kC3J_R~biY|eX!Bw{v6WC^-a~yu z-T^p^wqi@vIo~2;jJnIKsN%XKPgCDIcvlCJK>Hzv7wvq%_L=@xc4Mh@Ev3%MwQHjC zJnApf+wlU*U&#Aq7sMEH#l3&MU&ULf)!A&%*Z)!BnE@7@C^B4RkhoKfQPL}lKFDW5 zEnfml2RMA2dI0sNr>yd$BXU^#j-^GWyy|DXZdE+R`+qgEaN6@z_S(tWPWzx+;`#?< zXBTh?+NKX-#vm;5;B~U=55m~FJ4)tkMIbX1Y_nY6<&}gPoRJ)=2^$}pab+nRFv=l+ z6b`B6$?|jzK;=(sah53H0?S@l&q^9vR^R%v0G@J%Nf!OI$C;cv)XOz?;R=iEZQ|YS zT7p{nXU#;w6P29G?-lwt6YM#I0*4ROHFWV51y2`97yUOlo+-?!duS|mhgV4)GOJzE zolIjHG2}l*GqJ&}Vka$R5xE$TZ=^P6&Nq;X1jv%>-2&?Nyl#d{)LVAQVi0+fwS!5R z0Y#ZLrPq|lk-IQ&zNy?^lX6S}Jk9l4_&@vCy~7-_54?VMYzWD!x|SZ%YZF#jac)0* zTOP7;w^$*|Ucu9a#fCZ$p0^y#WXFFr%KUO-V^eWC82tz`KnPLxZ~hcgsXnL7oW=1u znfyQ%f0e|)Aabk)HQgm{(mefMJzq9 z_#*xB{e!{cu~n`~ga0qE6U0jy#XQ@VPbb#Cr_#`)nd1Y?1N(mCT9L)}%A-CtRi4Hj zp@r=KnB?Me@0P|mIeA|gWn%B2IkjwCVje0ap@IB#Ah)#hf;L7ec%2A%%*>1~e!?j~ zl~iBXoFGJk_g@s#r1dZAxdhIUEq$|TVrYMv-1dL%xcY!JLfF@v`DM3+t7?j#F0>d> zTwVXM>~=qyL-_fA75Diz{QgqY;qakw=J;82Pt?NKJ^HM&K5>s2&6?2%ggH3wQ`O{Z zOjq#TAy}0yZu73p!~@YhRX*G(Anp~Vpuji9l!~K^1Bxr$vR9Cdq(YQ=e zb$NBj&g`kuz-&jZ2IlLvqA_So_o8#hTNA1x{&s!6iHMfDMNNzrpq3>B7oUS|pE_Vowh1DUaPAlPAXnO^6whjIe z0(l4ojwu~18<+iOgJY}5CE^q(tEv{k-uQa8ck-}$$5Ul~5~rIhsmZO4rS#RRExl%{*5$McR3{xOI% zSGeyFwx>vgRUzVpYER>bB!Jy-%T!PS#pC|Of!RDrH?VlWa^Tx0QHQ=uhIw7;Pkmkn zXL2Wo+%CQQmfU^4WH=}h`XZDPJ9^frE^*WP&D&o@PG_pJ#fKZW)aSO;{8~@}{-JB% ziM;JFb9eEOdD-}-pDr1E6*HAB!3PMaa7D}TQZ1z= zkZ!Zx3_(1y?VOuD`ez=$*p|sbF4x#U?J3P$ykGi*F#(j?Fs16e=T~@4 zp3{qh*bo6fEGA)u>wl_fo=SXX)-qui>dm%0QjzkZf&gp=5ugXnpvYqhD!x7q1k!Q# zF9d(rJ06IU0F3a+KX85bHwv*uCI`^Kp^*T+^i@v5J>6khHhK|Aqflj=l zE9Z&=Z=vSH!Zam3PM1SpKPpXE`-o`0_k16j$38iFTfubK?<<xcc^kQ2^0FWF%En-r9n+U2gl#R55JTO(yi+Li$1Kr7E zFWLS=mRH}MMHX6#PocPEdOG& zoMDc55imnkp@T=ySM3P;EX$+`960 zWfdHwWGk=Bj^L0BK8OyJ;KZ@duAvr3_*m;}HmO$Za9_^;r1R5`e>bLeX z-*Ogu`c`G3GcA$dH7osLgw0nGPa5@QaFQ5hO%nw?awWCj9)v*JpYyO#%N%W~F0 zcpE7-LM1Oym$rz)EOeYO!j?+jt#mGjC`GS?!sd5dV;V)_3|hhswd{DV9W~o&jQPG^ zLS$0%SbjvtKEe&$bfpg^^~88c09m6f+!0~VU(;KpQCDh`HPcxd8NXgVL3^5p48UZ< zp|Ck4WCk32+oL{`b)R}~=dBiB@E7=&UU3B<9poFAE4rS&t8|{x#;O*d8t0eo9@x1W z*CSJ9A(yH1q-{I%#NLU*Z;Gu1Rc|ub#-zc{?5hGLf%TNr|iM%eA#`uWaF~ zn<4&fYVHTTJY!JWyeI`uYqtgw`e$f1)-=&98a%bR#(;dnE<_ZhHO+@FJ88}4M69gH zBEQX3UJLXLx<1I(5OT!mRislYDn~9YEo7e)$9W0xRldS{M|}8wdevto7Z2abc)N9d zI8#8fUtGSY?g#X*)~59Wv4{X7Iqrb%x2xF8hhNAn#pr(MdC7Gcx^+v?_uwls!0y{S zX7JX>+lL$c*JPPxKt#%xROH`cR58oS0;ua8yQdQnTG8AO;mPD(?~rpEg??Fzm_ee4 z+}=yS4-mvx=0Wazu!#tn+XtvHng54nb~45I55vQvW#;2DH5b*A;FZk{Yjca;<|koDt5x-v;bRTFAD|n zJetd4Pni?k7Nr0~Tm~hH;*-#-{H119 zuE^Uc;7u9z;xF3$-<%WJN2JHZ=`}rzgDu_}qV^?=e{mN7kl!UkGFX!8gSdF(dDR@7 z+{l9GN3=w=I^)V{`37L5v^Th|f#i*DXdKpLdqx-08m(?41dRYUW;hP_I)XIO7*>st zEc^tbddw<3k-qJJ@NE%O;jV{OC#_m ze_h*yDkZMmVzjle)a(wC&u#29wB}0n3i(E1MSa&446Ir0)lO=>42nu&<6O-oSV7`B zDfFzn}nXTbP+tY)}kO4tY8)#Jt{#!$?=M(o0w# z>wMpy`e*dYy=~*r_ZKcrqoxm0s3|C~J&O-9WFL_|jIy+aj!hBi_BRfnIzX)Zi#bll z8^?Rwo3m%z=Q@lT?-Rp6D*tFfP_fQ51lP<$g=3t}6<2_irv4hMzSyp$n?YaTxGJ4x3Jvzi$xY2r+UG3GBUZ@-G z4S{MzQmUZ8SDJRQe9+TQg9yTGgS^!-)~R zD)Lf1#;O43V5_PVAtLjvbt^{BfoE2HRaqC-D%9*{Bx|u*6oW$~8@(HJ;VOM)Gf)W& zx`=4vZ51)vp~FrAZTE_29g(h`Z1KPfE<4ZKk*@7d@lrL?@5zgERdlWP{n-eY%D@@) z{J2c_ZN`LDmNsD4$#xa&9W*weKEvjwP6+GNZ5m+t7Pzy83_j35G9c=<9SyyPCaTXI z^k>!-mq#pHHP;WD=MfQc;ocYA+QYG9dZ4cmrBE*#K~XI$N~AOL!KMqA_EI>hYrA#6 zsTU`87DCsSzGJr5xk-GN0b_X#XB@q70|#9 zB?s8hiU-b#b(Ymhsrz$CpkrE#gpy&dg8v!~;1WR9H>v$TtI6Y)pmJG9_2>(Tr~pr2 zhjZ1bmZvFTqC)FTSpaJbC&?8@%ikXcGI{rc8z`7@;G1q*&*8epowIHzg-X}Bnrp7q z3PCv?ZX%D3*%&g?rGB^fNz3C#Gi$vw%z%uod6(9&Y4QLH<7MfwVtLP^B%KZ5OB5Ls zyp_Ab+uEL2Nr3O41#=`+dca6s{1r=FOwlC>h(~YJn%vax1Q6_! z;^Ic@rFzZ>w>mDoz6Y-+n-lR|D$_HFyJbcdQ$Ja}F( zC+65clg%l6Orwh+m2#Aeitw`+6QCLWia&XZ*A~%*DPCQ*&gn)=WsN-uywmVf>9bn4 ziW{bfT!D;SFqeI51h|*WYY}o>tDst2F--~R;JM4G$SsCXwvkm&M{o;P&Aji~98)VO zoLxSz6E4#StwMIa(t8^Ip3M+3hDJB%5%}nY)xzWNK#BJ8#m;NRkzkXG0k9OxT;k`$ z8#1Hm^OLicPKg+5sqE7?{9GLr*zN?hQC=46O7(4t~=P-VWC0@^)-8+-)iBr2z)fJ@1n7T!;?Zw zgVN%{B}Q_&{8|W;^sk?tah`}5c3sF?tltF3gS2yGa}j674%0S`h|-|C)0~ZozC+cd zwHXuf0{9IJu(5=e+B<=zQBP;|a4AicRz%jtyI8kO8_r=ydM2_aM&nB}7FVG#wS7oe zw*GMyqE&@#f$e$Ju+*I*zfFhtwHqF3=>E-BlpImWLVzBLa_~0H&N$4aDt&o4$T2IP z;h{m<(lubiws>9)h*fzsWX=nim5OyyWa|xexhM0{OVC)u5&(LEm41@h))C)roLb>VAPQ>S%U#D(i!?8V5!I8o7F@a0 zsP5O`WAiD?BABrvH9n?j*Apw0vkjXVpL52H0I>+DDU5hW&*eBMV9uA37iRayGV5eP z@M*L<+6e5eUN+-@ylWnVega#Pd5O zb}8pIK0o1v<5BoCzyCk?%z`MB=cSVLN(eq zviY}EH~FCGoZkIGrKEsMs5ba?()b>*5QO&$xE>O@%)7YiT6T!!Lu|0PmyaL%apykv zr4v5IyfO6?vY~0P+R%<0vbL6i+B|so9Xw6GeC71#gqs7QnfaXiMM9)ev!`w4%q{(xrW%rY%lHK8IOi&;k#wN<>zWvxk|Kgx}7oU z3%M~mUe^;XPQ?p;5d;rhd!Ba;w2atU-JI4F1^>_4ba8P;)kFiu_1gANSZuXV&$LLj zvNx%_&uhF1kv)!X6jw5j2q$TPkHJ!r#YE77W=PP0OjPYg;{-vY@T7o9 zQl}-$oF;&vop+s4qm}j=_9iZ^RV-_BrJ?zd#x~5OXAYRMnb@Lc|6uEDV;yH4i}nrS zakB-lU&^7c9A^xRm{LlW%8_(<&&eq&(}2HyxVc3*m~iMMf_|pYAc|WlJ8e*uq15HF z01MD4YmvLbKElrn6M}{=mJe}sAi##kJrbHXH%t&Hj-P>fHlewEC98Cd&-R_(yct9$ zOq+KfxQ>GKHb3zO-S@+h=~I)CPrm(X*^G=rPS$wM`DkWV?PY1ues~jh`^E6*l{CXm z>ZvB&;p+1<0l60!*YC(T7>2i^RPzf|^acPYF;2hyrW^-xs-~4;O88_?iqUo=G!JJ~ zg?evHV4OE)T3Ba6Y!l3=LR$$_NlTL*4&)rF(RKkekE9%x^FLav?ssG5rMsa&Ps4=? zT~zmZuE)ofW*)!pLaDcgO$)CjW}R(T*~p~Y3gAb(f`>2kh!A}lp7^RRepg2qmjD`} zQlMjv@91Mh#b}7XW^*NJA2h+3XowY-r?8FE^)FAPALJnI{{GAnnKL6knZkBZTPT5b zejN`ZFr}vskD5jPxwp{?^LUY>ZXK|T1H!#W}txX5w=sG>FHR1&xd;T;BT$bmE zKaa{GPN%B#dz-m~XPb4I3#D?pgLtuhHG^a<`xSx15h=D_u{lnAd+kZ57s6G+hhs`UH93|cIU)1c>D9Zm8&6_Wrx`H=NlaS_&du0 zYtU;EA6w*_NY?%7>qUkGUwgK0qho7E?Op zzSx{1v536tTwvN4tbXg5l$Akg#D16&Z-? z0Ta^;9rHv=N0KOHTNZtpf1@cE=R0z=^T)hTAAHW+lOxIN-m7H=fj?=i3-y3Jh0R%x znQmjsLLz3o_y9kTwl**SHQT51rIMTe5(#VEGl_;jP7?t>%<8@Q>AIacWGbE_e5*Tf z8|c-^SzBu|Kat6xq}{HKX-JrovK++6k+3#UyhJk?IDD=Tq3madY1ySsUQsWn{t<4i z8;K*$%k$=!s9I^|i(rQe(>}%+y zAmJ1tK-l?RNk2lm*Zk{Ae+h{?HHVKz#*{-#NxG8BCCu>OOXW>NQzs?ME2k`VYWPE# zFTTY8r6G~ru?$Is6Y7HO>9rmvtOA|YNe2c8F_7Z|h$oQo?Fcs9>eDBeVXEFj7KKs7 z9CCoYx_uY#Tj&3{*|v7|L}c+!%WVh3}~Bjo0>llroQNxA`~j zZM%o-zeX`?r;_SZqiFensn^h(P~CR28F??w(`$4YN=JXAj4-&K<=NUoQg|xsv&BTt#9-u(& zP`ki4m#XTp(NpE3XEO2Cb6@eCQh!a8S$#cW z#k!C-wK1}q`^ov6kQUj#Eia#~DL`q8#5&prP zbx-C{iMRU_!DQ=4=*wvgho%Y;)$)CM2)vp_+MoOWCW0y=n${18iQOvZKm`AP$7;z^ zj3XLP7`}R=d$#H0dJ3*l!_}1*Vh&5NHca}}&6zndrk>^H<^f+-vSDreZpbdi z&8P0mw?xfadVMp=ktjJS_8s_lKcc7FG~PSms+5;OU}x^tfQhTHw;u=oN5%oL(KjqHL z?k=F?&C6p-`p*}rR}lx!Nu1I!AR*++w7s*YR5^|lrWAtqX?F#7A=?OeG1=tz zw@|G?8`Y7}wy@#{U5Yk@FcG+5+Cs=nN^#ZnC`_|Gm6Wq%s2?@I#IP`?wATRQETSG# zNDG4hCRNjaK9sR?9rDL>2uGJeU_M#O_{K57gma!b+x#FB^m?$*m3p!gr@ewQ#uzn> zAmn~Ikn~_+ItUTfF^IJ0zZA)MNR*LrJe za6$Vw1V~p$h7K~GXfUX=({xY)%fl!gvOi^rcx6mi5yb5T{xde~8i~}YxF|pVQ z1PL(V^ioDrGXx~msfO%cBk5=Zj;tv#fx1W#R4=_m9|oo+G!(hxShFF2C57E9lp1f3 z*WpFf3A>VwQ0S*%+W8kOI{=0Pf{N%YI~5Z>f(sjdy+@RE4#GvH69iWt6@~zonWnQ8 z=35eS=ImA@yzKR~NeLVy^GdOwg(hJk{Wga8RYwEaD;4=J94_Cyhm;A=G<_Vx@>Tka zwzjN5?xz_Y^A;Bzy`wnbhy!Nif$Q2%ejd|#v~+51KKIH)&^3&%nSu2W3d_5 z&Z1X1r_k;ch)7Lu4;e8-ybL*r{dY+*#seaP)6q|neX&Bb5P@=U(UyYBQ|kC?+BR0$ ze^pa7_Y`BA+sYK#7Vlk}RP#?=hn`!@%VmH2QN* z^j{JRL1b^njhNE*t3fQB*b%y~CmZ^1({3K(EI7S7y2>$`K6M|6ZC} z{gM>e=Su!pQ`A5J12W<+Mf;-s!4cBgA-iQ|gmE3;U}Z$>98$8C{55d=3Jc5tTo}&~ zcF~x#K6w(x=hk$ih&%^op+O_wP!Hw1WIrz3flS4Ho@uxQ4nsRG+aNgVzj_%bTKp0t zpL~^njET&;Nlt`Rk`1PwTqS`cM_JwPGhe0W5M&0B%paDu%f_~HQu!~-W3r+_GjB3p zo$3qU0mTxe{17o5HUj|RFYOBLpf{~3l`6vt`&Fs)OhD{MuH!RDOIUW*Uov-jk7J}@$Emc6~m(KrY zkqfGb_(BSE*YAdHs9cp2^4~H(0z~^Ip>dp~W^wj-0bjhNW}EWKNy2N%E+pnSattbv z68-c3QUZ~Mtf64>W29y+JP05YkVb>X`0&-|y{cmXI65>AGXKc4A&$<^HKzKQiizfB zvf3Lm9TQe#ElfD%S|p!pFGX{6r6`4E&6iLR!!v(Iz+xsp)|~tS84X|*8uR}~eARC= z1aUx`Rq%nuF=2A$7fHx>r^dMLv1aAeeF$BiIqJF`60|O9BSaWAD~%zI6`Ipe6Y)QZ z^w2vhUr_AzJ1UnoDx&&HT0GZRopflg6%0WL6Z{2>xh>E9cWT3bi1Xfn)*J^t$06@r z<4VMT2<$fGP9T4BR!BD*kOP=+r-Denbi{yTo|vc>8)U>BQyXbW%%&$)Z2kT>C60GP z$Bhb&7)LqJ4H0ZrX1hQBk}1(qIi4$Z6C;wd{+bX}SE@s?iBO26fN_r(MW_+S8uGlr z@`_B+k(lKza3KCpCF+IAz#f|8$hpT$3zaAZDK?`{`L9}&)BveU3iH%34Ns1xDFj7` zWT%!gs+r^*P7QX?)*ZFK8}FcqO4@3k&$YGf6DU2D9$5YCv%h>7yrM$*Sw9OQ^$QH{ z(p^eKMBm=uvH^6H66x;TRaXqnjIO2eG_!L3mpg!-mrIe4>zCcPYyGC9x0}n}UUTT3 z-Q}y@WxBPoG(uk@bpQau(!Ok?UjgUW6c1QY$(t0GiBtBBQi{!4|@_eMPk;AG_OH1^Sy7Nh+; zpp(wdYERGZmib6Zb54Cf8Lz^_otLl^Z%Iw=rW0>XiF~&8Td6hB*|*%jr$_&BhFDn7 zLucFj@HCxZw%d2(&fV)SYy8oqa1Y4GDPy@a=uW2xXt@u;tBvA$d6UYfoZn9p-#z4{ zLf`BT$RXDUWkrEbIs`d5E7R;NKsufs?sP)Vo5`fyOpt}*t*+NpSPqUp@xPJ|+r12; z2O)fYty@cNFFSB?#m}p*rQTAg-u6*g^jr;~M>V>>2j>f(@w-0y`>OXf&x^J*ES+_p z@ADj>tS<2Hqai8lwsj9)x7wy#I;SZCU;g{y#F zHvO8sS+&g?KyNJ%9S1++mwla{A#TdQIgI-zx>yRUS0tk-VGXh)2e%cE#KMfG6f76_ z-h$x6JBNQ7e6s{snb)B&z8Y7q9=+|n}BDZ5^MV%}qH2O(RK026PMhG?1sjQopcA#I>+HiRRx=Ja zCid8FU9(_6rpWzGLn8NC#XXm0wg(`QyMZn7W~;|?h8~pg!rU}Swj{JTkEGsyfVlTl zCA?EOygSVm-lOo!CC?PO4pZ@Rv>uS$vpb05fe5c6Tn_1gT%j3?@sxWXIzi7MQa0@e zK`C!jgzI~}BhROzl}4xD<+9DuQNAy_(8WDIIo=b@z&Kyjyk}yMY&LZCpMW~<%o)dF z!J2@zFut~qF9d$uCvR-EVp|7Z`asb2gty3!;F!-r{FP&j{)d0hw#0D$y^@OJ>`3wP zR@(IaB*}xCN^Wm!ZG9@>CAh2}g>T4xN)_R-J4$kOkJbeXY8b+JL0I{`|E;DL(+r|)U zDy#Xk!C{;u=e?))!85%4BVAmI7sdYWkRLeTN%bU)W;WNICk}sppNaE)!5KMY0Pmul z@#&eNHw>WHwp9Lkt*qlbpLAHjcBCrZD9I{G^rwj79vX|jA zi1I}Jkwo0d4Ekh~5dg=&kls)Vj0*4$_*YjO=EAAKFM8d$#9P z_{-CeH<5FPpkqg4yi11e9-IiyU7sC2arSNQ^5%xT%Ijux>8k$*V!`lCeOU|@d^cjh z$e5)VQeIf)G-=Fx*}gi`&we{01GQeBb$;CG+dU2Ln#~~|rwE6w=?$MMo3 zuAhKFSI ztCC&;Hn_RNsa{J9WA_Heao#0&T;pExRq*3@Hs9WT5FZ%`FetuXO}TlsdiEv^Y=WD% zzdq)AbnjZQ_%uy)+HwvAf1F*vVEz3ejl!&<80=Z=*z2_EoUWu(lzbiDNyR>9hs%Q>>4?eQ@h^ z*KI8Nm|-djlV(*=@p21KdTc&O(Nrltx#@YF{L)>u?V^ zHXb3)sfP@&9S=mmmzvil4U8zaBtYJ`p>Eo;VnciY%U>!)mmgQ?;s15 zYAA9Jex9)LI}@cyfAO%qy5b+hLMczr7jVhp6>W7c*0vmzNb=2*7Dy28kjSs$ z;~)&TeXCo_()wD2FR22-^i>%1#mz(>`08LK=m8r%o4+=T|K8<^OC5 znBVE>uCK{?hQE(n8-HE-7Q4+a9cmaQv1OxZuh302WB+HFfCmW>(t>*Mvx$x~D6D}u z2pQh;IOXLpj7v&G{=-oz&+c2{^j?s_anPprE5l8#rG$OT9xusFquA|GeA<_=&cQSP zw1gj@Sky~JJ*9a6&8{4oucW<{`^0v~l9XWjsTJ#16u$Uci5$5p6Kb-moZ|W^zx+0% z_n=E+wF1uFY^2fw*y9;pirq@y%3M+xZQn{5i%sZ(STFlzcSU{T1zw{Mw+ zJ1(0{Xh@vN=c-1MF6m@$W?M~m8?DSdI}t2&pYdm6#azj(XuPqr`Ev&81o9WXJGu-? zI7Li*JT4d%Zr^Aew(l8RDQd*Rc9aNT*@6nOCQ=)Yujah7{V9qP7eo6o1z_t!mM%Xf zot8%^pj-q27RwoptAeoc3kL~~jIsG=4B|*3m&B|g;EmL6qq(!iam>-pYAJ~Y*GAWw^ZCkr7RSkfq;7~PQi7B(sZkj56bu1P{g>x zOe?#MlnDCCe*!KKD>^uD)@){>#<8?n^u+>_vD|?7vWr-E&seG*$WB&9$;@eIM{Itv9?DWw-{ zC>c)^kxg;#Uiu(nc)Lq{Qwbn2@Kf4^LMD_uWuQy3ZK(HNj5Gh0h5E!DnDa2|(%0&OyfmQ${TA{pyBUkusS0PCVJ2Q3z7C`z-Dgy6Gx{a?jr)dkvS(7H(&SHU_?{?5>XBw_rr z7x})!^jzcDGREuT4Mh%0(@3n+91Y#@36N=Yic<`IiYC^&6KyF>(oT2G(per^C!92M znbvva#?~hg)&@|IM1;`quK*;^E1nouM|bR-Qq$4kaKS5&iAJiKQ+=C>E_1w)1bOjMS)Mibf)p^VK(u1{@ zNb$X1Oz9+wD(3$gX76>ju{@r!pJ$5x&nSC-gN!nG&v*c)E@%?`s$~pTQJth&*n04O z@?WLW!(!<>b8txNpA_anOGhOc8C>W6J3tSjFEspiuloBBVT{#Ln3Z9yt~e&e{C?Jq#!O@Xp_mwig`w^j74iN)7Y-*h$&Lja94qn%#S#4B_u>BusD1$ zj^5hp=pJwdZSNk=+cjz+NN@g5i5ceWHWc9b=bBgZZ-^AJ*nB>%y`k%n%iOescsE1w=chali*V}F z7Gm}EUztvV)_v8iJLLC6$;?y8Pr8=3*^pFT}<_f=)K`~Z_kl2+UiE!cCFUGY2osr;IY5A?2foqu?lCCps@tv3O(fc z3+KtNaMO$}RY|A-f7WeT4A~RselN2P{r~my=%vKZ!}5Gh`p?JsUpkEk@;j|wzVmaT ztkbp)_7H?P>^=f~3528L(D8cVrQw5u!qNzP;rUHr@0K<(dRc~Mt<_OAU$u9+4r)`t zJU_%w`#En?L?HyErb0n(Q(#&T++d?=x22<`m|sc;*s zy*{9eOft7bx z%l;Ai75XplJT%I^PubPC9p1gvl?{dLy7Dk5Gy2DPMxpG1ptncHnDuwMpO@HmoFN*-h==YAne39L~|U(m>rX*o6)(5h{3;L_VimvxW=ib|JlOrMH%_dH}jX$oo3{> zi`s0dz3%Oox9XqYgtCovUUm*u^9O+x*U+JTr;pRf<$-iNRepUo^ajsAQ8z^u2&r}s zhtfOB+-Z9r6S=QfyecOdg4-`uR@>NgO+g|rM z=?sYI_cf~mJDGu%IJMJvQf9Npv-L*}P{gIMV=7S;a!^xx2bvXrS=>o3!C@a1(4z0T zXuOi?(_ZmQ2H@`yHI3!MFC}>?6GR%|oGsaie)}vR`f__~=ms~gAawDgL1JzyLWzWv z5W9I4?lz(^!_J-e;fvCS%DF*PyXLP>ARWL;9LoI^Nm9tn9$pghr97EN&lhN4+@QuV z;St?+{BJw4Ks2@P8%M5pZ!}Czo@V=@QV~K78XX;OB;|OsJ{y*BM??YsX)_d=9qF$Z zU|g9?HNmeJENx{uO({(I_NsFUWR+XW0!9*pN#A^dv*_hWr&wqoOZx@v_w9ZXxg~&I zagGs(L{X+7$YowKRtOYW$<)z+4}W4M8I3<$uF#Xm?-7L!#sk{&cm-hrG%Ds_rhTgil zpa7fND$AcI4kCNuS^{?_xn4mBi-2Kbv3AnSOK_KqxV7z_ZHrGDtZ!<;*v$HJgrNo|~Jka^Q(et8}e9$bW%s_WOlZ6L?JdMyT*^ZWZHFC@&css|l%f z)5$x`K}8QY?ZGXQsTNbS`H-_uv<68?ok3O`vkK1JS*M4CjD>l3dHy$*KR`m!qykzD z5Dzm##GtdJ{C2piAv~fmQ|!!|Yk+(?!2DXe7D&W%u0Mpg)h6@N#neW7@)};XJGyqy zLm+(K%bInO^*x$tYP^+GN`^-L-}nO?v=^#jR|5!@z{jBOBZ$P^0E@V=;Q$XM?1>a* z^obf}bRGYa?a${8jejq!a)2U8n2{#|p^}QmXW{M01FmN^;xXFf;ZrgXhD(srptJ#s6MKG=%QX+R`KR-0|D}G6G;mbgKTuo#*>` zS@{)sj>^p5X$m!O@JP2DhLNGW2;AKGl~)X-FkJQ6`k@27-#=+ zaS2#XsBLzlCBwRMLx3UUZoI=fvc)Bp2=4BiPr%LD&GLy!W8US;MSo3Eq>Zh^E7jf7 ziXa`5t;|7LBTwx;%mmbcCH#1T^i<0ANv8ta?@$)-aZ(y%zvVHKHG^;@hw6%1-Ue7H z2wMA$pNiK#=(|Xf)f5T>ec*EMhD)ml5%7J>oai~I=ZWZ>v#@`U==hc&x(2JC zpQ%prJ$vb>$=CJ1tRTgJIKDiN63m}==nK-*RnWk0z{({_UpF&g$1!zqf z-o2xH<`ez555QuD`+;E}@2fdvO)iS}GFNSRSZt0z({nz$yIW14qG7d6SiWtn*w8}J z>T(t?XrjC0ER$gRzY;U-T04x>_IiZewZS~esaIF6t>76qvZ6N6Vn7d27sF3U^6C{hi2ebwZV20s6WE0N zN3H)A626U!7@U;NRQ5Tc|KTVtTgF)q|LDuTF%Fw?1M%L11u`$yZQa?_{ie{ZV9I7j zkZl5&vpV63vXqVVxs4!rnm1Gbdh%vc&*6;dLM$?KFGj%%P`tR6MS03Y=-* z0Q834;4H*d8l^^2Qw9j8wP2+w_gu^^)Y-4Q@riW#fu6r6UFbW(X8du}XoG+8+zwnt z`g#3_FuLE`FL!V!yK^bEBfJ-{tLNpt6Y$jf&4UEQMhtS^zv|mct87k0?I?JgM-QGgg)X~Xes@z;B*LtWj1*gBRxN`UZhdKD$CnJ0TXyhQrS7O_@9%Xz)ABzyiDa<@vo5cK)`WvQ0Waj; z*7~dNDekRL*`v8M!|MuDLn+U2aGRvJO|FVzgJHWJ)n!gY#90W|2YrKPg#yFXOqaWvAeRVejZq%ZyU5T zWs*zLBAPs}YDu0Z_E1%9yvQ*-0}xENNX+`Sbf-^Cu5Qi&)2WwqB+N51lvdWco&7X7 zM_OEqXN9giJ`^&(KU_RbsOLyE-JtAl{mNGKU1!`MfDLA0u^e(#z-9K?EZQjY_Q{<+ z30Y4A56IK?vzFo(4xyWu_x@3MY_DN2g>PoykmvnLm+Eo^?%pWIRJ%GD2CN~w)$zql zB5fZ>F`t8!R9xPU8&P%GMp9BTO@ZOmo9FrXEuP@&s>x$*O<;X}g*mAhgB0XPz5Yn9 zW;U7H3hSj>MuM{t!zMeD`id#Bp2nzK&1uHVffgV~>YyT8(RbX1CO)MtBE4*t#k)#;E<~HM3$Cn6GQe4n6k@R;SEgSH*(CHE8@@nH( zQ0cGi(legJqxuwIx8dcOtyd<`S?$}(QFq<1o*lVjYg72X+Y`SBsDm#2Hfv~Xc59ti zI4;W#?RK~uax`(7sXk8L#-*PTfp-?Z-;ABw*Jf4go8ULi{xxO;Mkp;ShTX)}1BcdM z*-7k~Ty43Hr;%Iof8a||8gczIT+Q@dqnQnB-x?-n+Z}dI084CoZXPybAqp{DdX_g1`HtM4$;Au5z z?Q4k1#RVH5SGv`m@xuLQ_0^T5^r~=J0lwo257MOWcA_K(kYzeJh3Rtz%}UI858-xt zQ}#JuYcro0gV6|c%H0Sk{d{^mT_+=r+C3#(0I2nmGx850$+jqY%ULlY@xnh^bn&WK z%A8_+`;?KEIr49QI+qOKB;4$l!V^2KV)r?2aj{MT&?#vr;E9(=qWQ-8ZU%gNbf}yW z76Mz1T@LIBAx&0IE$C@x7Au(vfzfAfzpdBAWeq$BXt{0hsM+7wNICg;PkKUJ*z#L{ z7>k=<0^|V4Q$WuA${HT#Ej1D9tjvaIw!N*(%h6zGeBBEmg9x?DZkgfL0yv7=xEdDd z{0cpIpicIPM! zL`V=cVjjp!$?tD0#)nPJoqm`FGJ&!OZ@c#wGyr;pIkvZBmGUeMSK#bH5U|(WmG}&& zNO)D8`U+t)zA6CE|G(}pf^aN6Wh%CePs^QL0&Gx402f^8JSt&ivOV8Mick!+UPpXVg-eD!zfR@?TeN% zoqo{dgp5>O^KX1Bq%)Yt##*eYnVsU$gFyx@PgD8(qD+2j>+EcoF@=;+rvwAQhM2B? z_Il@+=?$kpRmizwa}@;&RD#5zjjS)gmyQ-PV^gU1Jw-@2WT+!d*; zc2+5FfkH{I*1>qMjvX8i@sM|X7;GE)SK2Zwo*TEPT@pDT>$}qW zhgT;@KE6IyNGBWDprRC!(X)}zO>B1OvP0F#=hPj)FvI}?IaWLCHX$J|gnQnj4|8`x z>XH(QPW5t7y&PRFZ2rxRFjL}O=_u9FT=AxKuTE~)5sqP;Gv93CDkCJa#_~hhxE(vE zmj?gO1bM%lL8ojJ^B%k0O<#B7aq9fYi`3L_n-|BI?~ z4z8qmO*T$8w#~D#ZQHiB(Z;rI+xP76y>+YZA5&AOduFZll#X`f7V)^TbCX6qH-y>qrDY(&|{1_ZtZI=<+6Z(-l~K8_rp z=Tbx-i~DHF13|k#{NA^Bxlvp#4-DftVHQ=>y!ggSzjs$Ti0rsX<0+gzWz(1IO*Z!c z4be;|g}0ktP;A4lII%3KJA$`@MvZHwMmCbX3a+^|x)NWqWY5j}=A)){QJnjL6}=Z1 z`wM&myBk^5uTi4)&G{y>O3484a0nnl71!u&YsE&Y-n*ochUgIs!S$)I-hukW?mY`2 z!)3%JO2$(hrh7Wpu_hbN+I_o9WqDe8hX{qWlbFcY8X<7zWGrwrdzEY12hi-q$I zGV6A|`N#9aw>!`WO2W{uX7!sSCW+Z0x0eDY&+(=>CGa7v(qKl)z)vV zOM9#zuRz3C-lzXQ=INE=9|O7nKN%P8Wg7xcEbq(eqr)$`txUg3e-ZEs9T>CVLV&TP zz_eD3$gJY5J_Eyi%Laaq|hbAAvKiwEp9(y&sGd2hX z2)G=n8W;Q_Khd+1VfIrH#Cbds)66dektL}4(EVhffQqyx4a#eTf*S-ryd8r5w>pYr z_7@$z@T8QiWa_pC$o3I}#GhPz?N||@^(js%xisY#g7Ujw))6rhxrn=I5{;KgJT<@K zm>~t6Yl66;E(%cInlFD*aZBJ(Sy|LiU&Iig`_d9Kc8N%2^Ed?k+UnkY$+>-O->YJk z(T?=B2I@K-ZspG6KxSD{x!sAe?63VsM~-B!iLX{1s*v@j#zUqTAt2E);?#yKiRFS5J9CqEKhBelaA4^V+Pvon(3EUNMy=lEOs&3=EbxBpTM_v`e}jAFJQf=&h& z`OY}ad`(EVYi{o~rE-itxoddGVM8%+I0GjMHzy2JrSLP?YigjALennC!|(5Q3Q_w9Z4#Cq>n zt8$~8x%>BCPmhihf$cMs)iJHDYE-a=0iq8awPI&Y0iGH8u3B@t2x@Ad++829E4&qr zIMCz+TRKjX&;0fli(Jl~i)6*4g;L4mKKFRZF;)0^K=1q0a^g>=RNhsMv4;b^P54bJ z;>|0b`-=pQU&(YQqxOP7LSFQMFZadSK$}p1`iZXw#xZvdgUvnE04uOfmfa`8`|$H) z&q33X_nlU_^pRFTw!|y7JJF_67t_#DIYQRU-wIa3^t@M|>~N=sVNnXh%LL-orLCyY zuT;JEK#rmuR3}-eeF-WL#8P+O%C_Ij#&${_X{Lj!+aDvp$~&!P&LaD77b zbbQb;Dyo4nVdBM^vV`}^BP%NDUUN~KvQ)llU|=Asum7@+67)1kagNtV_A^>+a&U=> zF!+rSsDL<^I)K1SZaMp0RTIyd1VGfQ>rDb~SiEYlgj61{of=3ad=@QpnuM;Nsk8Ko zXGCgRa2fFyVTQpa@4QtfGkrXSB}g~c#n9Aye?c$6mY>%AweHZls7xP@P$1R3_-9@> zytbXOeWsynh`W87`Hko>gcXaSKg?@HwO&`fkS??E-Y3_QhibQi5J8jYxOu2mG=dxm zLrWo%Um(;-q*b(zRlB-Vm9c3P=kZv;skRxucc3AGAz`2*|62Hz_z@xMU5n|}EOsuP z?y3da<{sW`tazD4u?j6qJ5W(4zdBBV8{8{kOF1Yalgvwrajxj>VcYsFC{5$RnS1n1 z1UI0U)e^%&lm?EdR@;U)BJhrJ^+g$o6R7zOc6=X+cBJfN)r5C`gf!{nr==^~3`^vQ zjK$oDFdl|69%RlFT#Iq3_@x~pK|#XC5-eV;FLd^cJWQDXh`hOy5jw%E&yZN$3>#fv z!8ES*1G`h+1shIdi&*9;43{Wsp{=S!uLb@dM@y>%-qsGM(t>aU?qQ)xk%0wp7riBi-*o25`G_@3{wJn7(u7bieu&<2qxb(H}#TV)%Gux!>s)DpoD8P5k>6}^PXVhZ&bIwsCq9if)BLz2Oa=otwXt!AA- z+xc~N=~qOFvE&pg2$y5SZNdPA;jFXrlPPMrmXe+~i%o7t#I1Zlb;|od;iHD%pZh%| zs_%Wg&ZgY3!bu1#|HggqcH3oM5W5obD10KXY@O&kP~Ia=JSu%(QlVR!eoa^2b4(dx zE$joQS-td47BBCew4kbei0QkHz@?od*XeZD+a1e8TliMM#n4{S^^#Tn%00O zxvOerc-Q!%Ssx`@KE0NpybohMbDjgL5&S|%czDCeOZR-XrfqRVH&N8Kh=o+voJ3AS zc{kQAV=Py^(}>G6@{Z#-(heo~c!e-9HF)DpP~{C00V_L>?f#^L>2(z2Nfk8hbY2z3 zt7v7r9G5E2(cmZjy_h}dEi~m6v?=_H&B)JuhXbVVJTdoAje}8qXqd(VaItSGrc?VD zpqqZDx8}*1GU*wmxL{j=+gz3~n|&5BL$?P!{T9L3rukP`Wy7(Z@PB1#6>#k8xLTG-3^K0z_gv|uYbKa>-a-uHeoce|764p(bMYb%mdc@!OG->t>vZ{UwoHYcWW<9n~AQ| zhLKLKch+p{F&}9i0C4kcyAF&g7IjeRPm^%JkW=3{YBwF}Iwh9`gj7l5))$GixoRLa zRjOwfV(=ToZYTw98Pydt)*jNcb!DWyxFk$pyR^Ebr0^Rz{5kT(w9iwb9}RH+U;HAw zK;i1FDNx1P!V)fv`aRF_LWT6N(#J2$DiEf{GZw2mV#RMp(vg8}8OKFlT&p0iR4p5Gw=cg4`)M`btqqxo)|ZF5dB4SRhUFCbZhKKk>p@I>dAK~e21Cz_g2C9 zoH6!}aq;D%Oe}Qg#`59%T%-K7F+E(Ng)#K9BY${z)S5e!J~yNPBh}>gmH+Gyp>UF% z>k^x#QFV;L{mvt?Zr4j7UkB~T;Dob6KY%&kPnJR|%=a5m_5f&6k@fEIewfWkyh&WF z5N!I1Nk$+D5=3!$**WwfHJtT-IL2JD!6bKU4nxi8LX4n5CaRcvQXjtY0Q6S&#pMJL zeGCfq`y-(i<1tfLDE}M(5~>U!i^_2lr#FbGPIzjT#MPL0MoRtDH|0Pto1p3sL^P)e z97|sR0D7l`M+-m+sF51hUaEwIG^Ve1Hw@5gwKu%)l-AkvC0w4`tg2zxI%3LqB}7g- zCovfJaave%4z*@Q++19n+u826oi?9z zCFGW8Hf~VjZv$xeBe|UKWTH7?nKHeS)XQY7dG=FaD?aZ%CrVOA5E(DlJagD?FN!?H z?oDuk!?U(e{lrjlOzTgHzSJmSo9Qbi%JxmYEm;C+-X2G)3&D>q8{Wz}GdnzdXr>bF z+I&4y?4a2gTM5hWrd(KPYsdOr{l!y}f1`J!sktML22r5Ps|F0k7XD|J0?Heh3!phW zn&TIbB?Tb$>u$=j!_c>Qh~%!((RDg)sOygPEu9b9zMF{bjH)i|XR*z@%Ejh{8PF#Q z^moSO+!cC^WZX8;-ze7qe@&!@j4c6ZP2^+sk>i(HhAuc9@CAJ9m`;jocy$sXB;`q2 z0J)*@;isWsSK2@pt|tYx9a61q?EAG6aX3R=Sf0ktA?CK)H;R80D|h#dEGpWL@kUG1 zK0#7`xfKNB${U*~@e~xA{^cJiqRQsKH4%W84M{#9HQ67$o!QDj;>IiGmn~DW!hpgf zKRHG-c|l^IbluJPm|I)oVhBh~rT3v#s)P#E>A|g?H!gRGpczeN0zq&!VbAW~PB6G1 zTD-Z5f$x8)UUsG{qnRrUfK+j8gyg8)`Mi1H!`${rA&fnvZC z>vk^as@_*fI3f1^Z zBfd-9Ts7cTHAgLE-h-1QaW z83P_-u`TZgrjf8M0gjHG)kljUb+XxWodsDl9wp}EziQ(#7+COnLI8{@X`zI3okT;5B44cKIp z6Oz;P8q6eunWctAkBm7)^2z7#AQ`0+_FIe^si^BqD7_k zFE(m--)1z!!!;-kQ<#6%sOe6%ED+kUW@E|QT4!h-llavGX)w6@N-=m=H>WtVWmARt zQyrFjkaQLqSbJ7on?GOl`O}ata*%CoV`cUZwurFy>VCb74E%Wh*m8OHTrcS>b$?&} zc2=T5gtSJ}&g>u(stZY(7?z)_?p1Q+kCdOgC5l#X53OL9v*NK%2Qh*exVxsv;kMqS zZLqnMvH6PzXeHpEE6PRGYjqVMOb>M)#FDqJh$DalKh&Q4Ep$wA;>433LtsX;91eOb zGXkh26UtTJW+7-yt5T7pAxn4Jy@VHJed}&%caO(onH}M` zH93q^u|Obb!e>$63kPV;Z**2Xfpq?}yylXMQ)L7X^y(}(WF-&)6HenBp;PL$XPMz_ zxG_BXQ`EP$i_sv7vkM zE~xDA(bCaf@=b70_e^%elCzhGVW~*zu^y+9I^lX z+M%ZJA2xCHd?y#JTF2SB=OgwNd-x6R@N?61i>U^tsw^3<-Oo;=z5<_ioon3NfYqmMo*kmvZ)DWAbk}RoKaRZ+IpK+6f#=y0utW{2 z$73yNQ}z7Eu}jG@V%m9xNF#QP%lr>#K6-G>H!qVmfEPLg7uVsMXdr!ST(+=RO z64*f^>W@KZ8-RMJSc_K>_XeKDSdgs~@Ti{$o+^vT40s#4?YB~*(w?x~tJsw*;CyGI zIIqTIjQcq{Uan$Wx;OZBQqfxC?G6~XDna|ddC%suKlrd<==?ZKI1`jLwcme3a!1h2 zBrkt)Ngn9KrvoB)6LZz`5LNP`en2&EBG0g#Hr5;*Vg8u#y_GPZ#7F_$;rgf|j&fY)RNgJJZ8vBc2uhfRlB1i zC4B-loFZWBkv@ukh=&c8c<&!|oaSCTFw`Sm5 z`O&TsRm#}Y?`$+d=M`f2`A+P#K3UbQ+TfB~p-*6O#jB$yP8ff|Zl(?_n5_9QrjrY4 zf{CU_m6s_t_+#NbKZ7D`%fulT<#CS*HU^c;bg!5yZEe|H0LYwFq%v*S7QQFwTBEX2VwD>l1%PxZjvw`G-07Tlyq!fzcP(HV`1Ow z8Jrkdsj7Rm8?A*-ocmY5QP;~Nfcgjy!=6*4<;nb>pYhrlyZL!)+>@!zep*8ii3`x! zQ62-qx_;~w807`l?-SJ zzm2-&6N{)GUd?aJJ{zrL&MO z1k_V)VhV~@J(<7*-LcOMFj{&u;ob4A4AK!!&T{VxMob+=D!)G5|H9mW3XJt9x!UFF zAS5{Y^82Lcx;^2&2kfy2f=JPZB)7z0mr~^yOSP#PPI_P?L&Gp$goupOo)2_<5+3QI zZ)&r?s&I7q(a#E;p%rFBrE+g8p*$I|3<0W%=H}>V{7)B7pwI0}fQ+x*NFh|7m%W=d z4N=NI_z(Ep^OK!`(Q_kt2!K2eF|z5}&7(fWYm1qj!1->_VnN^znlVbsPENiw7=0AF z*;8hECZjaUaPKwmST=#{N^;P9=IgUAk+%99bbW^p^6>ID^g;{)`!{q<$s& zBnUt_A5-CBgRDbv`k-~$5QE@0)eXytz21Q3tZVEbaNAHIh;`cPmd zs$s{OPEX4W`QDA|XVT-Hx9pJJ*OZLa zw-jG;^b6W~WnDnj|M~^5S)2BPwnp+uyB!ThiqCfQi(AYR2ld9SK|C~A z2)<*xUQBg~Aa=rtSmiY=m{L9fle<>o-27(^067ZB{_>RzAGqkW*W0G&?3wAN6dm>};k(3Qblcx#^HW8uIl zI`EJCLBLf`i897E*rYDG9L;)*7kcTG$ss>so2gL54>UHT?ZLPGv~(_AAbPO*svLo1 z8S9J3Zk(Dmw;k;F_@RAwAD&CoHnoklcAzKnWh(O@p86t;$qmFezP_(NLv9Dtx3zW< zzlRaF6=^U_L~i~7_e#tg$NUrvL={-{ zUOsM8_+|1N@w~&Mu)X|kr?jqq?R5Hn;vj3Q1$2Qjbfeik-;DZmi#+w-DI?CIV>$dn z+qk3|e~k1wp|h|XG}7aMO(D+A*G?Xy-S(YP4td&Sg+v=|F2A@hKmm?bKEZpB>jQTR zW25yy@v&q0AYAo~*m?q5o+S!H?ii0i*&zDHJN=UED8Ae0V}Yew`IKj{#R+p&%F+-$awz-b^yUGT0pC-<(ml1h9r#5JP=Q94Jv3m zwD_WZ!OilPs=M5F=EbLLU}L4-vO#m(hoaXjR7$?FaIH=-bttfEOz|0fc?YM;-7vmxVzq7(hjXEB$it6S`x+>6x2CH2F7YA2*@wVlQF`^X`gI@7hw#Q=k(=&_IU6%`02q z%2h+g)TK1mu5%quQ1b8}QfQp3Fjw*jclS?BObCCuV7Od0SMzWu((WIb+vkNCks?8+l+4y=GiH9S=4`#@;1N<3%`Q;) zD3j+iX1ja`Pntbvg+PK`B`gAPc^W)qS?f_?pK=lEOQwwZ7Vd#h8dn*(G8dX zXouE>yjTO-p)qYBK|vwLRRp;b(}lM5^OP^=jIUOra>Fbag7KCErC3ZDBsFqR`$PwgeB(PhCPFLET!Uxf{)gnRh>K=2(hJlzOx;#BFXVWY3~||mJ}f@V*KS+@Tv>R^ z74)U_EMv7w0PCOIF+^kp#!7U?m8RhBtD8!tHCv$JcBsK>5zN&sgjLR}*4OYq=3G^O z%dt%j{QAP-ftLF`JPUP_kNq70%%i*_>(RZ)IYbfi?#t5ENJIL8DY~_h+4RHmQ)Y2` zlZ=L(i{4fxSwqMZtl<&!jN_MAS(Zj&* zb*UR}Boy%qP*b4Iog(OjrK5f)a^e-l{x|$lE`*wiO^kleB=8E)It)hYh(%hXQ*73R z4uZmFx^TBCb76cPd>;UKtj$cebL?b2x+e2=&q{j4pVpNGj9S|tB()9G$akgj&Ke!ateTC1qytd7X9-ic7JpRxlvlh02#`Uq6sq|P?!tWpHAA|g6pXY#_d-EN9SxT3 zU~~LCdp16#uM1nT5_?R__|0S);GUl~;yM>P3db2So+LI{e@=hzvkFsrpX z8+Qw9x*T`=-5nk=Bm^sv5Xa=1;Yf}eVOQ`oE}gJ+azpfwRPPrN+tUkf^a!mM742#& z`uh6-BawD0G#|Tp14y!;p?so_}mp&Du`uM-5UM-1s^&7kKMqYs|Tr zFk7>33u@K3yr~+5ghsfzLLyEv%es#6^)e}R_zr%3hS>WGX;U1r?3JO{YudF8z^V$o zA$yB92R9_hSH6Zc&Zt~)_5Z$ zO!qdAHjA-Zb||Fb(Y^>ra@#eKEGp3H&3pG*PsYchaxsp`RZ!sVZmTHmP+^kEM@qdj~J`0@5ali+gJrQa9`r9m$`)L(6#K0LG zYCA{!K_{8C@q}mwoYX;eP{EqyC)F6xA?p85j?nR zHi^SmaBww+Dn*pPFBgUwC`ZuQZ|ATi-f~GjZGPW5jr@|`;!&8H#88_`jbiD&0<0|> zX<@Bco3$_@R|yQ2QI_KR{b7?K*R|UvaRh{#xi&%UFv_ju#%>W}AelCcljSv;y&_~x zlHYHPBaS6lNGq))I%kZfILtlOU#nA=s0d3sA~jG2f12`_$h7I4c;gria)q&{t3doD zQJQeOQm6XArF710Fcc=$Bw(=Hpj=9lHF7B0h5c}i0GWDSeHuDv64Q=jU7?)QL{Spc ztk2Rh->m2FU+H1VjUaBk+jD;BrSb|1k>I0T(SYD~G;U}h>=6Zsr#70OA z-JDOEV}_O7nSeqMgvG`f$5zqq2M-f>tu_J^n)VVK5NpXXD=6IpA($f2+CdjYvZ;z4 zz|y4ICi&WkD6(xDM38BNP7bK430Oeec{T6^`oLT#QYTmp|M0++Xxv^g~+MZV!2AxNm@YAI^Z~E z7zc=2XRbkk)Fm)|m7Wq13X6wH?O||7@!bd{uHztnT4I1lm1o*uPK^d5B1O_)2tva( zn4gG!|D`o;Cxp$9&{*zX7?PD6Dn)@bBM_tBZzU@_3C<}gJM;}2a>h@R0F^&~;NTzO zi-HuD@krxnIkdm`JE5fNdR#~rka-8yUo7nyBNN*@FeGgn&p#zGw;Kr(4mu<^oJ*>+MI-PxvDI2>U$VYoF%=99k@RDW!l46q%Fd=!j z$*63H|Dx->R-nOnn0RM{AYhSo2QjQwq(Q8;sUS+-v|q+_RGT!x5l}-`vc<1p8E{}n z?tz8A4;wtinjVc6&k|wun`B!9#0!(51=ZYI+tCf>UBn79nLWiF0~X#tJYMY{-GKwT zhd937zr+X*lz6}I$@af6V9(e?;gSQ=m{ac1z?Z`UV8DE>@+;|JjquR`OL?aKt{B_d zQ>@^8APS*PGZ2>y%-5#45rp>Q6{60A;t$VkLkF2YFad-|qsrq9IbI9MLhaO`i28S8 zq?3f05xZn1H61Qrkr<1kwiBz#F&WO^D#K~R>Ddvg5CvG9-e7_!3kiXAJ8OBRdp}uZ@+e?7_@z78T-xZ|~R3=6^GxGiZ*k4wE#2C@qS;MxpN!CZg>Fh;Dq%CV3f{=bL zkbLm4R=nUKR^K_S8(Iv9eR)3Uf$Y0KlXE~p0JX}6nu26Lydzer{_N-<1h2E&07#b% z_GC2MAS7gkE*WYd9AwXoGLJA3g6pdM?4Lx6q&v1}(jPIUKxS*S7a?SD4-c*}X#2k( z?HFYsKYd3*XTjy(1+arEqMo4r5fpzgG{^R4q?#i6#P+|QrCO!V+h85d?5T!}Pqe@- zgTS4w5C*~^lTt@Z!h1N9SyE9jfOEEXAYi7SAE={GJXM6rdx}pui1ms!keId*sP259 zaGhK;B~~vw z3lTzxAO#%?BxPt63hnPx^=PqnsPIR)QdLx-pp>uNDuU96L5?ONG?|m3N-sQ_v(_(b zBQz;((!eAP#t)?bYXU;1I;5-a^yoTV8VDEVm|nsCcS804^ve*EF#7aMOY{pUKTnRS zlx%^8x~m{@Qxzi7inZ$n8CHV=>c3zAb;m3vb=6P^e)>ovkawErX-pgtJbr32{p->y zHX!e;XLU#tn4!eP{mX8qd#S#i{(0s{9-OO_E+UDLIU;Q1$-VL4xu=7BAMn?Jzlw4 zB_?-yZFp*PSej~Eu?`5HsDs7I!t^kvcAA7+v84McKn$IeQzz?UmZ4|QRx&he=t!}} zi407cL~R*3qw@HD7X#5~EJl7Gq4fRzG#DmbsoCK${_Ch^oxRRTQ{%Lvn%|vtV)mX>7=j z55?HTE)2ao#Q|85o5dMF2uNz0GFTB>+`hW-R@;n`a3jQgMs0;Nhmkt2{i2tlE zxa;11xGW%}x2oHuf0ue-FiyVM*g98OYSb+7I&c6(8(WvyG63alF)-qZP$(@RU)wsN zXhyE;@0|}iB=MWBtazn#HQUpHwfL=d_qzrX-&cNCjkV8NU0Wy6Ye_df`!0KIyVlz5 zS=89>S#*qukqx3roThGyS3v^>_?xpkh@}ZEPAt6jVk@?1^`cFz{cn;ND@^yhlTEBO zrD>*-X%qou|-J80sPHFuK6Brs{J#8(Fc&IJ3Iy-D3lL2Zrv;~D=G*bt zhXDK5x$y$BHBlpzKah7paizoh>>U4E&~OXMU~4|LVP*Sx4w$5E=P~=lM`4QH#Lbp` zE_&Oj(&nj2 z=->MFuI8<*q{#!8otqC_lh%i!=U1j`>nET6wxI!-7FA;C3u>bB=q)VbU5Ci}YD?Uo z9}@zH_ZKy~wPDsrkDX=VISk_@t?gadUQcH{Xgg@bHuX`qiHC z(wwn=vqd4eK3e9zd6b`jelciw1XzXew&JbbzwH>C2r(jNh%ky{N!behSFHhImTNqHY8rZ4V-F-)BM3QLesk4tEBUbv@ z@N+^~mM_Zvd@jZRe66+>vsFfgU^0agO+MDinWpw9%_ML5T(tj>*Kz0O#kL8{j)`O5 z(Q*8$`s(U(23|y6tKgN=Iv3~8r|Ro#>EiQ6CGE1>%(Q6RblxjVkDhmDc~{$Tiju?6 zY<$9uX5d#IM0mY5vy9E;)z$-YFdFXSOc+ z#~re?6ueZ=MDmxHv*tlz5d4&uL;MvDz_RuN?Mp3odb}sL1o%o}6Yre)G!&@eyfecYR9$}=<_Yh*KRhoI|PQ$6R6Wgrq2~*ZX;fw z-DVk}zjyr|=Tfj(J4XF`#5_Xz`@~ViI>Y-is+x8slaEJ6a@K~-D#Lqf<8y=hob|&1(8y6`}Igw{Q09C21t`L(m#Kwfg1yS?rKk`-mO*T0X~> zXmJR4>dt?A8{WCdVNRF~wcuX+@QvY!C|GQJT)e7Udv9H@jsEsN3$W=ehi$5hfkZ#l zm(GA#ta(n&GGbhLYs!S!ZH2okw!L1C<&cd3+#r6k;^2C`EL^K<;#2$A^S)islJw=p zS(kz4^AEyo>GHvH%I@mDke-IRU3Gjl^E0O=zK?Y=FRztA(5>b^(|*mnsNCpuw>HyS zA(J-xnBGAx;Y4#b3ZNPOLpzVFF`TLLgzK|G>eQAcH6>GtfQ>wLb7_O|G3Wi;QlaLfBpz;Vs-y`B`yNj zH~w!Xp=}>Dlfaf-aDYz&Jg?pM)*yz!xiTPbtK)f(vp!q;_*7Ru9QqqlF;*tvu)rUg zG4>)%s*D(yM_eB+afs@* zw556Whe~Gi8d;LQTVh{Us9s+agLcQ?Ts^{c37WKv78-;_YvR`f-7-aPw1ow4x`A)! z+wG4YO3}dA!@gKpRpnbfC#UXP-E;}-_q+^)I$~mN-8!bRFJ5RhEVl%6&WcIUoNlTg3T_Oq#gZr{21r)DzW4y^BcbLc)*rj zA#ybjFmMcFA~CW7HJLVoS?2(Q33V_D!R#Kj()*1W4Ez-Ya+Su44TFperC~@PU--W} zei7h@?A-gMW~UfFS$RehytNg1LimkspJHqJLJCo|f%Z^jdM;a({Wi)7`~0+iKFTMp zxs=1g2&by8(V6w=Jp$#Fq3tNs%KCbHUHIoJah&Tu==(!NoX3cOe|CI*ms1Q z|Ca|D1w0EZ+$?&i3*WIgl91O7M3MsD|0|`B^WP%4A}sWyZpn!$-pb|3s&)Ni54w^h z(Mb7WMY+^)3BYYRG4au|>1_wk+gW{plGyRmU4=JCNx>{55Qx@BnHM{L>k^Y&>MnAIHhqIsFm=`qh^6T^L` zYI=XJChKA9dU1`tv{8QU-po<&Ia&CCas75h{%TR@qeIN)Jlqe-dlZfAgxz{1izfW0 zawVHa4-%V2+o2(h)5_1fn@gw*hVg|_1{!5+uK$)W&@NUUEs!*m?E)!vg%Z_pqXS&5 zN=)Ds$RQnIkv68Ha%s(mrff(!#6T5&i-ZoisTS>3b(0;lZ>ef8*rGwXAesbbJm&6+ zEx9T>NfYoYC^5JL9?kUjc>p7scW7HLPoMeBSd%Y4_hCZOjXW?$`Ir;zQ-VjCCPe;uTx9Zhp8q z)(LeBock6)v%}=MEg*l@xoxpnbK}(mSUt)=-}daL6q-1veM|nL^V#7yk{o?UQ zmUgxKrqOvC9Gc#V+l1-mn&ss_t;xt>%3F!QUPol9lOBcw;|TOF!A`MXvDr_zzo~{b zVR5sZFNl!{%+qb)J^31Obyf3Uxg@NY6E&#@BuNWu3D4i;?nqWxuYdHG3Tkfqwvl0L z9ZR83_YyDiUoU6H_nV#qeaR#(er)99_oWTadtMH8P-+AK`i~j9lqH&!$+t}F$q{D# ziX1xznN8wUt6Q#47$>-u6Rz*X@nEv$9ZT_fybiaP_X`1>( z^j2}@BBVDa%w6HxHkdt82sNg}Iz(~y z9*-7dCK=S9xtuV0;0Kil%6aNjs9oKN(a#nsjNyZy9*P)8ThS-bUQLG-*V7&aT$GKB zmlyMD?2YAVe}FQvE@agdB|228(tf zuO-cs<940xw-^*l5A|u_UMn@9+3K14TNgUHiUN4B1J2_iPu{u;S9PeQn<= z(sZod(XK5<9x6e)lX9B8Wwuc0X7?6Q!3&lzUzB?!io8OM^_wcmk|w+t>29=sdp=-p z;hTQS!K*Iw-q6dLT-;F8-uFxP1nFF-PgD`l$lWh`o|~-OokwoSuaNU?v)Vq+@P&?M ziQg`)04dfZ)aFpRlbvI12Ft(uyEOj6jm%9XI-pXtV+DudB)`&s^xLsR^%JyX&EwxP z)pqIsuDuPo-IJu}C&bU&vVcVD65pB~CL1`8;oRpZ1FJCC?z|0I+3&eI6ZV?k?2vm@ zlXj4LWV*Z4V_QMmh$$F>4*)HMYul<=pfJ`q1d`sqC~I#=m~2WTGosThrS$X;LJF|y zDiSP^K0)B4pM&A=a(_2Hhd*rXKGFnrUZomlU;juruO=c|c~BF;KO~coL!nuBZWwor zagwF=gMv%nPy4#;$GQCCnk7Y$g7UlUiTETBsk{ynKe&f1{aUOs&8qaQ zWGmi0yxjbkQeKD*whU;&rg_GzGe5>g*|57Qf5yUC&5R1FBlUp)I0< zk}u#TxT`?@Y+k$0vj)>6C46Q&xmBSCQz28xZjMm$2dTusdSC$m>#X7^l4|T$4f^kC zS&B6$tPr_-=)o!R8bUMj4X%fK`i#Nl@X^Y<0_tgf@{s(1jl9|s?u!B z$RL(*!-ar#K)NVD5c`}Gf0@9qi`fY((tVl1gQLgu=w(C1>BVV)Z&p{$NtN??CofKQ z-#opwq+uZ9ueLe8=i+_krPx~UT?BxG;} znJx1(-N&9*rp31T8CnMi^9Rh#|Dw8m7U^V0MBAUtq9^vo1%qz|_T!mH{3#r6Nf zy5j?(1)dtWDyQjrU#81LKk;)kpx-?3FiLjJw6oSQc?2A&^2qaGbEW(V;l3?tviC&D5|>yXbEgvUwHvF z$~j=a(kE*6|Me^K`%v1TDk1m4e2`o53o$qpdo6;!-lyPtM!8A?LYv-e`MNAVJh;KB zAU}}$8@@w*VV2j67YEGi|%;K;gRQ-3BJQ%O!V*pMSC1 z)xl#`i8s%y_T{KtXCA-JV^)jjWYt;*aDabk^>X14|Yk}e;;?z_^g`XETXdIpWZUPLnv~-*LG2NhUI5E{>rZ+-FgrZw87{Nz86g?;Ov2>hgd#Q?&Ji|$O<$-a1B$YuAr@xxol&QeSl+MD*wFBaNk z-4xhde_mSmg%kb7A3|M)uyL$0RWu{F_VJPV_>7aR!p>68z}!2XHFoLD%2~83N)I9- z4fZgcN@bqJu(|Y!FJF5Nrr3r|1 zN%}N)ESnu{B2lfB`XVn7uz zSHY?QQQ23lRL^dPVxGI~7>OTc`V=zo5+eMS4hl_(>EqTYHfhkLD#EF;n|`qGmfUd) z_W1V{{G3^V&D7GoS9kJ>lmv&V0)HBM zAK0;Br*$qaD%?~k=9>ktEU?xq6wQ$BrPhs7 zSs^;_qi#gDTcMe8U)=90pRSwJ*YRv@Z4Yyjys}VSK8%dqiu9oOuMA%`&1MACbIPPR zDgv|DMTS1@aC`p4i`rsT@8fs7rsk_!*}1#n>Wp&>LuEta626C}6lo91qg0RM&+$zz z1_X^uI{C)Tz_*4$gEr}w6}O0q7` z%@kIpC0Mu3+eiHgxrKMRRcL)R8)8^n|5W7%?)GNz$oD0q=}5r8O?-uj?W=^u&61ZTHsvE*--Kd z;N#p?4Wl!X>o-p zyxvItopn2qOARz+OU5F}X z6qjFp(BxrHBN6yT8FZYVV1Y z5mA)F>2r!Og*KQ&ta2jD5JB$%^TJ)FBzrH;!tNt2EqY)G(aw(KW*r-Rh|3i&w;(04 z_EH5YYu_~8_# zsMNw?992-a=Dyc4pBo&W5RP-c-6Zel=>UDNVpEb}=_6gM@_R51F!ujH#MX9Vf zUTc?JGSSlJXD(JWfDr6?X$#C?>KK&YhSfFJs>pE9vpxA$RZJ?lVc(f?{UjPv*U7vy z)7zrr2MI~mvC5D&$Vm0fmx>LjH!!BXEA&J0gd_#D4x<^b^1_?UbbRLk`)Qs28lp2o zlp``DWe4E@UlEBosBs)m^lkMEvj+2y7)5HYTgm1xb^pcK2j1fqynnu+ZP>mWcKYcM z6`bGFX6W$xJs2mT>9n3(f92@-7s5b*)iyN-@7iIn*9xq1P#m{kmtM;=xp+GT%@;r2 z87$d9I?!a^28}*%kbvghW+0)`WQb^8I50kR_`#O<`@pd@t~uKgbkTM13Ng?;Ayomb zS}4Y=?+{F8Lc}=07)Ua!iR!rKiYZDBIHHcwkN+dZNgRf;302Q@y^y(^@Ns5J(!$mD z4$LB3h4bmwSqXoLOIU-kR55pw?PI|6eML$u-I5%`@{dY6B5?8Mhxj=kWk6qePK@c- zg}(ol1SgY>Q_f~J1Eux!?ojeOHiz=9BpG@X4k8!EG)d$=&?w*BAFK`8n!G<93j&5~ z~IbLn;?zNo$`W><6H z)8HB1fF{-B_Qiv7nZORgefb-atxT8RYRn=Vx+%IXS{h7)Snwq^HLDR~q_r6mJA9!X zC3-`BkWO6SB0h9aB|Lx6p)a?b|G*_3W`t|KxwAXwqFuNDnXAkN=vS4t_cE~G=oVI$ zi}sRZW@Z^BES)OdDlPur#|v`)+#{MvF39Q@n}lEGfq!@a-Jo&QlZGI+#oqy~Pamsu z4hD%9QMuu4|6Zb;Gsq-Q@X3P{PW#|_?GTKr5(sqDBKkrcxpxJk!$Pe4$?nMzTV&x* zSf)o_CoQnxG_0=y<$rZa>05AEh-K>Xi|_V(f9i7gW@E&g3Y1chdU=UA*62~H8#coH z=thKJnZpgkKoIZmLaZV-gcH6fqLE&V8@L81kRgU{)cr?9-I2rR12 zA0i!tmMh`mv0Xq%*6lK3`A>*$O(2{p!A8zNC10CY*#e-;o-aL`EBEFrS?}Yx>$B*8 z-WZ}V&dShAG;N}6uLKF@_st#bOSqn(9qmmY)Kb8mr@yV8CPwG06!GuQsqDoG82X4& zUo?-#26f8*ap2CpxQp8zDIsN4!;pXHK-9g*Q)>LMS<}lORTD`Rlu_Lf-PxT-Op6jt z16NI-&I~+8ZN`;>_1j$H=2$LZ{4m^Cif{IT5Gn_gU64tyPL?O8>q z7L3?;5V<+maQJq&a6$wzfC!B&c2R43yh*QStYUHevnUgOCr4}GbU=!c z5q;mbY<34>-RXK{cu(d8Z-3cScw=`vc$4RVM%15TLnW|Q9+$>!HzEf$_We>5;#h7j za|u9gsD2c0-Ttl?rm0Wu9ebjP^@d?tFw)fTDCYpVXnq;|pm>r0dVVOD4&74O?bVWn zGG;Orz3|yl{&FfW<*JgqEAy?o=$ft$R3hvLrObvMA;*jQy9Lith;DBrtZgBc7h4f$ z?&tGDHMW3Ra%SZ>yh>EYhcu3!g83j>fSVaFu6Rq(06RK$NrtL}dhQ8}lFd#OJ03v1ta5wfPZycJfqGlEjU7Mn#9FzV`EbVwWFSu40fE0ovca z(73DV=_uz@N_4sfAUck?mJUqQhssN_jP`KnZZ|d_nU}+?DA(m--!40qdrDQ4(Ly{` z`Wf3UR=t{o+#VxX2he8C?&-9Z_$q`h-Y7Xg3U6f;-r+D0bQEgW*bo@c1Yu_&{;*uI z&Y!8L;7gsSTFlzp24&fvP@jMfffgGxBzpKl1QgHIKLP*W4QXJMUwwvk?GcsLYR=f3 zk#%W`R(CU@#p!493G;=1wWrUWIX53lmL%2jGVPQsY^T$*l0a@%TsHmUZ>b&;7lLxz z1u__U6`YGY0vHdB_kArDX#L>kU*@tdmtie5anvVx8dJmW#<1yoz{d?M7T7a6sLX$0 zf@ZTib;{#fx2G+&#@bIROPRJ5FH)*=;(Z#`i&P7$UY1_}rOK*r(FJU0b-RBxcCrpJ&L4)VrmUkHFeG zOGduP@;*=(4+((5A`IvYsa=dcCW(<#fyGMbL#lk+BcX=iJ;E`P-7^kD(_!{@w!g8yT zbJka&ulTvDn7SWjWoElVhV8483xmf{lIZ`0O&$4wrLkFN^mi6#DCSGj@&Oq_gS|YbzEmEb_W+v-*L@b^%Kdsiq?3mO9V zIrG6b@w{jJ<-Tq%yh&$X&X{Dob-JC*7^m32XW~$dh7UH)D-?0xDN;&~-JSUtueTYo z$0?&>7JI-+9T-e6)yCM6%^UIc0tx(M3`PdnlH*$QLb)a{!xvu?$LzKeM-C=H@vI~L zC5K}-{uQ*gkm}UmNOn=-YE0i(lIRFrea{KDd( zfB5a#G0cB}E{m{pg`HVi2Zck@UcBVjyF#-M=pmFF6-AP^MVy}z)hQt`=9`{nf38pg zi+F^&DRG7Dna}W;V9LuW$9!HhXpW0dipJ*Xe#PUh*u>zAm``!=e<0&M&2`HjZ+ zws>8Szol8v#F=LSjE}r#%y&kI{ zVtQXI4)X6_LwLZ@Jy*!k-B(f@O!pPox;?1VYEi;J;1mc9UXt>y`=7Y3kNsO5*DKQ~ zi)JVE6zhzhovJu6l6f1Ue~Qyba(X|c@FM8yB_X-P8*2bcbRLeTBnWvBif(J=Xu8~6 zNptW#M2ThjflcweC3v|8|IMy+V%nNi26xdj{!9DWZX>7d!tJ80$?Z220m;(iP1Vk) z<4WMVm%=cN1k=&wP}Wp2dQT;!T>P{ROrpdk)My& zzYIa#9lNvXg~UkkH#%s1dHo?j-m(!bb+d};#WQhZ_HA4ka_vO_LrT`iwfdi4b$=94 zD~#Ib|BIwkPbd1M$;m&DnJA0>O5XJw2&w92OC@vk4ljGw{YMyN=Dus-*kP zR8o+dnbtUAe;(*=E}Ss|jb1EA3pMOEpA2bjlOhi%<8i*Xq*_kwm1_Gg8-iI0h zQ*que&q-%!AbOb2Mj~{O0SeLX=7bqpptd0wCG7Vfwv#%F%8~4-MgI3m(F7n;;MU;n zA?eH8p@QYuePQUomq=xzV5<0jg;?1ire};5T2m1!yB!X{4T>lS)j2D04Th**_l({3!~Kxv$z; zv9J0qD(NRt>n%gvz?YX@tbb4EfX?nE{#*oOM$h3Pe*M5X$-*`Ls6vxD@U*mZ8Cg;t zLoUJ-f7+txA6nz7;)!&kDoTmPW%2}xG3Vjx9I$uPPwv_NdL5-N?- zLhfHSw9r&R6u@H=jNl?oS3D)T)uxhw%J4RFfd2Pk&5cL=olT>eHr|N&&pe!NGIYqC^En+B*VeCL%sCRBqh3Ej1ZLngzo0hQH3X9@Zv1p&lJnp4 z#x7?Wi9<~O`s0S6tfxx^jD${pW7w6Z3gzU3=U77&GL$2}3Fyb;bn)#&`H5b3@SmlS zv!x%yg!;_*_?5-oJ$cOqS0{Vp+1^vR+6?RJN{}x|)`LDLb_=Ry7{_Yt+G!nb=Lu+V-JSoDt13IOU&B zXf0l0x%>Hfuc1LGSsQV7{`D><&$9%lD)ta(ft55T@{M^@b**#g2w^+!WP%y{Y3n?A zf;`=kP?U9vMg1ZveII5qJgo2b>eOv$*MvU+_d@D6fegtL`Aw9E>#Ju+2l)}dw=(Xe z32g33;RWv-`NyYr8X#VJen%)=K?z&TlbIpS=EgLIHu*lU{r%i7iQUuKpk0NhRt6+h zto(8|WMiIt=?)eHW91l)snbVt{Ifn6%QTa+HmYR#WAysJvqs=S$01T`y?NbtpB4cy zs#Sz@h}2-;ihA{S9cb#cnB64v(S#gcj8i%sRdJGqko%0#Eq@mvPK|DUemcE#+Y@G^ z3v4Zh3$(kC5A0reN+rNc=!1Q%e0}7~?jT~C-DsaB*4!Xp?4qg-5YoN+oHzu6AA`s2 zo?I~39*=S1TtW)6CTn z+gq6#F%;a81ooT0|If59FH401CGPl-IVU)@s;%Pf^Mh0U>n~lGYnj)-?&oVsv=mP7 z?vL0*Vj+4-vJ`3(*kd`RiV&7syF{X)dEdaBrqvC$uW**>Cb}d_Q z{?N((sGv5n##XdGH$&x@Pmhk`uJ~7p!l;-g6}yP%Npigzr`6W+8? z0E`2q+vX&-?{WKSaJlz(YQ~(5)0@oko1FEmO(e+dY0#-68g5Nz!rD}*etErA7?awK ztmAYu7>iA?-3Gx=R_*-YH!{#DNxOf4v@UK9|0-aICs9WsuYRztbZ4YZmz7mcY}Pp{ zTICdsgicvjJbQYIMHlB6<+4O^K@-;2&r+ZMh2^_bNrC- zK=TQfr-M*w%L0<*)7tC|B{KF27knwG%7ROzV6f8-_m?X$$*^udX=moTZ?XqO7&AjM?y3stVd?c)`R*4|7A!KO4em zky7lPlZ*F|HG~cm*b{)G2n_Eb2>SswGd?xg#Vd>gW?NNrr{bAxWS zjaeG)AnBu5>5>z;v8^_-c2_eo>0^jV`}bs`ISpNd-_VM|Pmese5sd!v(Z|L&LEf3- z1bTDg?l#iID?CmPuH5Ep?W;wHZ7GN@$;3NLLVE9+6CDH9nSdGcDo*NvZ(4B|HN?LD zlBf>Ub{pTtR3Wmgs28Q006Ypc_rj0TjXVflt%28>tpYE0KUk%qZ)!zrrad&K$p7^*q z;K%DfpV6Js)dC`vpAjePDtxfLAwdM}zoYEqz0o1G3Zz4rymkZ9$L6SzABMr)-TS;r zFE9?%gEl8YBahoX6U)5?S&kSZ!du#6+CSQ|+r^_kBW&<41YmSDWX=tGTQ_z-e+W;Q zJ)8cH63#fd?vHeb*oaq z#SZny-EmbN*k3LXG`6?my8%%Mo#f3AfoV8#FR>Qxn8 z$tiNrRJ?tope;)*ORi2>!L1+ti$$g4=ybJ60NnUVcL2{R$l5kl@M7Skdy?E7OOR-A z+yRPamj6YwJHxINA)<@_T_i=pK1sZ3<%n-5~dxL2P0gv?*@r63J>$5orPZ?xWx8QY4CC z3AphaOQ@;G;^M|2dNA?ktP4FHJdPA9gXP!K1(Xz>RDcriUO1NB@O5rK&wFpv+BIQ-WiEL0G=DpL}zkb)~UOVhf zczSnj9Wr2iG)CIkv#VM*Um$mJ7kSb0ON2Q@v(u*>BChUzTR9}7o233#1CLdx+|dq| z^4a+$e4td86BrqtBPOV$|7&F>+HJ}19Fy+XW-5_7 zvrMVFD?W8YYicgZ!&ljLx)i{dLMv>lafn3$(fqq2=8ZKpV-V?lC-yr6iBoQh^vWr- zWQ*9mCN*=&8ezed(y!ppc$qcp8{;|gn#E~~Sad4pQ7&d{8)~hdk$O0MfNqMHPZRgd z_#A#<6mL$vFZr!kF!#?r-h~60^KuKWnoP*)`5ke1((Ktu(}iO@123Ss4B_x?K!;%cz7F85oIXOg7)iKpX?= z*tx;{q)VQIcQzB*aIPJRDx@nu3{x3vv=%qU3%jK#9N&T zIELch8AX7W)ahCI#1b1Zn7b@vamU3VPC+ehz5U6Nin$$Pc|D}M(sC0-W>WY(c8N{kPLJQN(Z^CNzq+h&_-!_i+}Wi-*NTbS@;_h$uv zaaw+xG0x7jVXRbd!E(tW)#6j{D2rR<-&6-@En5^5%_KJ)fp8_bg*n z%e48Z3}t&$d9QDuUsn6P_i6WVSdGb-gR~>|=Q&&R{#$-Ns@-lN_*0trt6PXVYU1WA zklncp;!fb^&EX>M`sDdF<;^+$_&k8eZi~x(Z2QIOb@z1hNv5fvl-vpO(EnFl&jzFj z?gZ^W32c<#w)L;6Jio5KY-&zFjYbOerPIu{-f03~2B_@w#pfmVwFV!UK51Lp#YCHL z7y8pl*ocG&K_0kzR8UD*7#RwbG=_)(MKB>~-@uCS-S z@Jia2Jf~sIyt|z$2;tVsVM}AQ{y@(QV|z$!2Sz)c48(h(Bb$&S%NA51J{iu#atyiU zvXe*7ij&xH6;rS&Lek6a)pgBw!_Q-x>Tgj!`GrTKoL4c;nJt?H)ncozG{E$lr1iby zTNBIWoueLVD$NvB^&}7}SM;aqp+1G)7VkpA|A7u}S_h`$wf0L@iR^Q?b{jFhkLy<= z#Zi%UZ5ui(BbPei2(RuuS2p4{b*p;ves6318urWuW1j0XJtr5|H^!I;E($3m(l&jT zIt#XSyS%&e2f(CzXE(~2e-60U%CF-q*Xf@cmK8(Zwz?T`!s-R@-=-6vKI{Bm^I-kS zaRUj9wRFs+!;g>$4D?3?1GL4GZNu$ySwbsEn_;g2omMTg_Hg&-6gfhz@IxMlm1s(1 zHJhZ*F!5^Vy(^3Vu>uYkqb`;iXN6xh z8D8zOp`0!045p2%W)O`yVIa+vqK<0d`eV$zmVe04t$L-ri0&5E+J+JgI#Y{wu=sU*!1@@YrVor(RIx8FNsIYxh>+Us~Ai;wMDGY`6~&w_3Jf+t<|wiTZ}NAA;#oL*mR6DP}d@K>nB}&dVGv|Tgcb_EsPeCT8q5u@g^mn;TNqe z9$q;St_o$ILn1{mDQLe1s=CTh)h&UlE)P_7?UQT1YS}sFCCc?MX#WQ+{znE17UDGf zt*@)xW;@jNt?E;UIh5M>>RWL?T1AY*=sQ8D!X2Wxba)*aAE}9F9pN^Eyz5RGB08_%d;o}>3hG&)PWj+n z5O|2zC-57zh9!f7$lh}2=UIq%x&$cklUR>dWQaR?gtrJOfWEsQ%buJi({Jd$qF5Of z9ND<3TeBAbpBH;~7OnH#RsS`(A|;SN?K5-JUb{+TAVwt|NWE?8Xkai%FN4xvRouOHw>Gd8%w}-LXvS_Q!(Cj5WKd>>QYD=&A|CPvFD=R5a-X&xD-BAb7L3+r0XS(8z;?RAIo z1{S;#3_3Q{E6*w1Q3xlG~@_Fo*cQ>=6%xj=_2 zoX%wRyWpJAK>JoXalWIy~ZJ2jJDHL-I+E^YH%|p zvnXrYbnxQEAx(gLP2IGf)%HOiY)NHnPW%8Lw$FO2rPgWMH1Z_rsEX$I5>=!@bj%w|8`+w@#9x_>tzk%nezn7Gq1G|qHFR?;0FI4G!^8Ca)8UrPvQpXrtDV4gR^{9D9$e6Q@(Yr$Rja}MvH8rO1$xms zmC2!c)^HEAhZU^PnNbaNDs?QvyB$4%+)IS;>RP44{){&oR|Rm!UohzYnJ?v*aX0N- zyuqD7OG#F+c7wuW0IUD~vA^GP4wfB%{Nc;MGw((g-V?mZL3)>IL+xUZiuY?@Y%I$l ztHR2ne32%tbRA09!u<2fvEFsr{V^fVQ=7D~KJn9JqFrDjQX}ZGG=B4uRyhPHOj8Oe zHKC9Yfc@*nTH`SKF#6@yr-O7kE9>&oyoQ_K;;et)B@#>S_pd4I`!TJo{il={a;W-D zpj};RAB*~YvJu45xAWuv_9)}>R}H1IK{(9ZcB*Z}=ftJa+vB*FPHbLfkaD^8@=CP)+kJ2=2w;(k0oE& zdi$t*ygeK5%=Y-7?@d6z$G=IC0WJt`Ce51Q60S4F`d91c-J2fK;AsO(*`U0x3p!|xinIQ$QGKcjr{`t?bErR(GX?ipLoZ?9&4hGYC3>HLSp z*|458h1rakRLcfBhT%;z>O~;}U}P`p^aH8_$QVQ5;H$}C5N&si8a-%PsiYYo9PLMnuUHB0oxN&b-J}vPxdg@a(1tzvwofI)*7Lulir{vGg^?xu) z4xd5fFqBDApFznmJ4v)0AQPDLq;L)p1<>IMC}JL)9>&k))t77a%WIGl)CqU|bM(9} z^Z;JoMko}ApJz4)8kHFUB!}~|KWk~f+EdY?xlH_AZqc*GZ~4v7&zG-RNl)<1oQp+9 zV60-ptqiQ=Ll|4B8h1u`@YtWRSwn&P8FR_S*|F2bee2Z|bH0F1k#VrSxJvIlr?4HGjDR+q#o$okNfY* zZI=yOo@IBXBSckP&s~_uCswDXrcw4ImH)hiop(H)l~#71z5Q@kT`$U1j%1pMdXV6w zd^EM&5<1LUFCW`HTuN|^>pdj(MtXWLO`=$p+*y95-6kbZJ2nl59@t|*Ye~2eVLg-1P~IObh-%54FaS>SY716sKsT{*f|nm_N;an^sGF1Xtc1Ujm)KTCLr|&3&gsc}Rc=-GYmNL}*G10gFrbj&~@N zjjoBxG%$}Mv@6(W{P=h$42~4TpsZ{t;$#f@4r=vER z{?U-VRb^O`=DB7vRC1-+NiUnO(%xx!?lqqbi2*rq~e=|QLM=u=4A0=K@X&H(XrNXv-Bth!`cthPVLYIb)o zM$1w;b~Ceu&aqwV5a|_M+WNzo1NSN7U5JDH0#I8{ns|5}EXKyG*+;V!dW#YrHmB{m zgj}wca$;rA5NgNHT*%uvc@|Fb_ORRP(Bj@T5L5E>mWE<;5)Y*m-E7val$+As%GVXV z&>{8E1GXdPxZNBkc~2wQb+fFkw|V&FspsBA2U=@(x?Nc#O`bZcJ{;mMvgJZ7jO`u~ zoLL>mh<&C+t6_Xu24*Wl?bT(u<-R*D=nA=?QBz>AlINK9)qGQjcfBF7$2Hfc7Lil0E7pam&Gl?G})FK(UF(4W@ zzLLuhZN!QNxsEw~OwNd9mOrdM*I5IZdGuMj^7R9$LZzWR`AXZQw7Jfjyp=P(RMjnz z*jl@@&E`T+=jdo!kJyKEl=aOWa&TPQ*)!Jq6yE4VT=#mfe|p?s-W!z%(G#ih?atX! zApJ6W*I|u8pK}`C0e;cYJ2Iao-%EScN;hL^D{_8?u{GC8E>3KcY|>~}g0H`ifZt@J z>?@U4$)yOYMMh#no~A%BF7|D}Q8q$Nv9Z!$;=Ms4)i~bYG&Pnz@id|skcm>Nq-_z& zo#PlA)oQEBj@)LmD?~)jdZLEDGG|_OfHM^nR1V3KsN0Jhvbxi(wkW@><#hHXu`%BK zxuCUKf7_#`;{4e_annGTSi+iZ35{@<^LW5jw$-i-HGNLpsN$W(d}b|Vk|yH=QoMO{ zoejH+6_%z6mxMqmQe9Q#NO9Q?3A;MSDRHSN{y_-_wExvFY{?p{m%o&FSaWO&Q1@v~ z@1G{{;Z~2fGJU51RO<1$Ls?zoXG83qtxuW%@G3_2Q~vOCcxwu=P=ygUrsa?7cWl_C zuumT-14w^G(iy{9zmq!99+kC?ax>&NnyQ=S0$(v-{|cVX#<@3wX=Plv%o+z#hfg724ensS|M);PQ)Gm<(2=u);EfYctk@H8&t97z z#T5ze4S0V#L8X1YwCn0qwpiP!cd;6uF*zcvc`y8+;*|);m3)FGD8r1d zNm9n4J|oTN{Z==VQVo$j0VZW>Z&7$tjbJDoYXx|`AVrWXn(;; zlN(Gjo1420@RssHw8o}}k5~$8UH@iA&Y6(V%M#<1Pfxe0PvAax+Ybw=7otQHdUR8f zRT$MMX~T!AO=8L-x<Q<=Kw4 z!=AMoa#}C}T+kDGc_a$=-pS-tTl(z`ypP*jFn_wLUg0UtJZmKJ zlT6U}>u4)hlYx z_cPxZIpduzm2##yiq9@b2;y!0T)b#xO0=XESt@skpl|}9z)Bt&HM>|`KH`-~_mhJX z16pFwPMwqYZ6d6e1l=z37EW4Ik=mU8lvq8Mb1Hg zsBF(l^%RKFE@=sEcq)x_LB#PXotC!N~c&a5^gH+|F^TkMFBCQRZwXs$Qo&z>WJ!wZ8d- zm?O&#>-AhJ2eqLj>VgbJ(aHIFDgI{nnHlBHiA%jlf2~>*?+}&)on%=||JVv#^bDcZ zk`3yj&x z(;oU~ymgnEaVM#%j_nX&TruH~m=5U*qxAEa znfPRF>S5Aczx2R^eLkY(+bP;(@>2@^O~(Y?{oX?qm22$g+&=gwpNlHWW|`7ep$S(= zNs0j`UZi8Q{J{kuIOYW)gtK9)|FyJk>}4k1$FbKk?`d(GKUq#J_xj8=sZ3TI6`~H= zwfPKm+Vfc{w(Q=>K8CTYZo8SYD%eY>A{JPEP5qQFHF|R*Ux;gNrOht)L4QV$wFD9& zAe+bNzIAWLT1ilEnKq)o94COq!&JKBymsa~W4d+S`d6?9M<^3uCfqMEx7qu0@z%^@ z4#v#kKA0(>%^=aZ%IIL&6~iGs=;3tD8(Hn)@%Gj6h#xHve3<<627yEn+P<7YPBQb} z%IlZbm7a8LYC92(^wOex6UtxR=l`fqTHRwt$>g{pY5*6y=haS|MSYZI!>_-T`fbo+ z){Fd9e8{Q;ue1P{KXnI|ZF)jr>%}{LWVEBo54Ttr^mwW zn~}}2FYMa`2H-4~hZggz1)5R++E%gTr%I$87hyqV*bjPg&y;#YrEV>#Nt=)SdWW;< z7D*@G667(uB2eNQbSwsAl#pz5ja$T)2X&ZDS*W>%H3kMPXQFfPMlgfft;#lO#y9N0 zu~Y=>@yIr&wOZ^72HSL`Rds)7bg%FSDS#396*84O@JRi>md;hO|Gfeb+h7rOPZXc) zNK{jMpJL~KeO2zEqte96)}U=6mv=KR^&a0XOx4H$dztlFh>e_#&SYK*{FQSemjNZT z-GC&_SOFn9g0zT&^N}#!*g&gK(fYehr)l1~cg-NgRFnHtah$}!La-|djo@0+cE|BR zFumv*PA^T@Ij3-I;!s)kX^M*Q(2!_M@~)BZ{YCurSW2{5CX@F{A^O55+TYvXJ6bP) zuYzAPBk))_zVx3 zB_`39@nsY_qTS%}ALkBcdz%(y-{h-}Xsy$}{!K*^DSWGohHv3?Ym&ycVEs8eh=6-_abx3;b1%(q zqOzzM<7NztDwI|7!G}(Bs5F*!vNmcfIttVB+ia1nGP+#(O^ETQHikWOg!fP7xrg(U z{AmJaREdA7wS9^lnvw?8nUg>&ZEJt|8rd1=cILHebFdJ*D#YueD{>QzB-W7Gl zxs>C?y?vngJhHu)7@*+39&wM;RJ??t8lXCuX*nhJpHk-a&gEO;+m7|i@sL9VXv@X+9a?oo=@PV*&nWMfmu(d?rrMgFyK zCS(Op!K(*g^QY+SoiFb36jqpc_1V6Ec0Z1g<7ntaJdZMX@%wkCkSdVZA81|VA>RaW zuCkf*qWU1!v#vAWo9aSY4=Nf1+YHu?ob3F)+aKThx4q%Ew=CC8Boro=)1Xv?I(iMo z^-6&Q#dBC|g%;(0%fYNFLAq&KPmxGCF70;u)H8s!2TvqN<8~>Iw|D*RTEq7L!__;6 zR~9sFqZ8Y#0F<2hX_o@Rd{Q9Wpm&f~;>7THS*WvPtgm!@JVE_R%3?J_TI1!%Wwk35VW~gZyvrxqcUa?z7Rg=~vfXo|~M~ z6)G-&jZNbL0Kee8dru1i(ed@Nw36UZo#E5(X{qE@zl?>`Aut0Au6sWDu92C|$$Nf3 z|Gf|HUPBjO`Wf&UiKv$ECWOKcK^&eP_-C|EWvgNr+lgxq50?{HRKzpY5iOOF@tW~VL(V=dd-XUW z;pI;DrdbOctll;;`l+EA7jOmB-=!x_N5Uf~?QsGM*YAPuF|XOzZgPV8JNWWpaQ0L8xlLw_bdeIc8~Dw0LPh8ZZmO*>(Q-ezpDEu!gTntQP-_e z&;7HDvX&Pwf9}Z7o7@8@?|_MTug&L|H{VDnU0*NWr$Ow6$Wh|~gEj$Y-_eDk^CW(c zWn|0AfS1FwYerK4OA){(^cy{1BA8;QWkE$@Vm#uW#!5bxobtd)0+}WP^1t zjk3n&`F_wc?nm@8>mk31gG|ba=V`9b?FP~(s>zw=;xdKIkeIKl>iK}fQU{~5#?(2g zS$8Z&$oW<^E|xv;26(=PC64S;Nwp z)^K#iKhMcC!D62X@M4o zNgB<9&^~JA_NF1v6LYY9wgJMWn(HdYw3l%n;IzMO{Wt~XBDe`)E{h%NcHv)k*tPDq z)}rk*&73*wj&I%PY6Z9u?P(>h=~(x;ewX0!^Hu9w90ct|ZH9LYyYW4vT){!;PL+S@ zkn-2~*3$4J-DuI}m!TW{W17~~_a)qo$65513wX~ROJSexmEoQSSBO@Y`@E9*u%P1q zT9p{y0mMKv6{iip+S3S2s{jmt^d=2df=pWU;sM^` zD*hnl05j=a34z{+1L6wc>S`xSS+6LT?y+X9E0?cN&#@v#Jn64hiZbq-hg+^amQoJq zD@7Sru;jG9$EpWE@XO9y{d*2KnM9t?I}XnI4UZXSYVZAT%l&$ssy%unHkpi{Csv$7 z6}_5s`R!T(0KnRI$z_lt+t<&f^P{X_i$C3=)TFZYJA#SdF_wwTjp%z31J!XuT!DNb zf#QP`VvT;Vy}PLI$2$^4G4_vG+X6n%x(T-_F+fivCIqyd{SYjpxn=taprPMYa#-xnD& z4!tWiqcq$UYerRpR9%382pVCas3Seny<49ugYuScMS!aFN_HYPL~`S00Rg9hPc&+%z=p`VT@8h0ghh7GLM8$PBDwz>TtQ|DZNXmRk3d;3~ z>I`n%HOEL=G|Ncp%w-}b9_^j?{!^#;^=H4aRzX!O&)^&sX}k{oqvJ3ik(A?pH$62R z26vG@60i-%K~Rp2tdC|T5d_8`UEy@=&yJzxNaT(#Mj`kRR!Ev{*T$fl?EpNMq9Snt zMMLZwmtU`GE_;Lz8&DAj?NA8NB_Scu%ew^i-p7uT1dZ*DZ5Q#FhE1~hmOlg&DPwxn?@$uhe&nPKl`%c!LwYeR4ykd0uPZj z8`pt~-*4{S)f0`|Sq2W5uE3dtzpAgvI8Nq(R-da9V}yk!6`2=z6bbOPH?!ln5+mwm z3sqiF#f_`fdi(6EvdVQzXo3%bN?}S}Qtepw^c%NZRb$*QdtgBo1cd7e?F>36UZq&2 zyi2`jtVi|A+pN578tjShd)lmouDopgYjOP=;q?5%{Ed))hM9LDuyzk(`XeRZ79hWe z%-L}f8x;Dok+EAe@clKV3GkNeN=$0!D*+qD%h8;NE34yMTF>PL|K~QePGF^ZF6ZIs z*cHqL?26h2?PG6!fWrr(*Ml`dtB!@b!}_N3v8zw6+jfCsZ6~NBm>ivyM7n<9WU1Da zG>1!~rGn~+MB{Fm-l?#CT3G4ks?m&P>+o@mJNG@vZ`Eo1!Hd#BU+5lF5KnD9qHof@Qyg>@XJryAr zJUB#qZQz*L2Ci)kEnv^8Fp5s2BLfjZw!<}t&@~To+%ZFHqeWcjdi&t4dOl$S%Hq>N z#J@CT-|^MBjJN?&kQ$HLA5xE*X)1s&Vj7{gMAVT@jiuIP&1z*Y5a-y=zH_hbj<_kd znmr13e{UBJu>N9mvN*QjXsK&_SPiL1W2A9BA4>{!zggw%ujD@_beKnr5>t(SW2AYS zRq27F&oJT%8JP4kZ9Q5kAcSk%o?-e&myiH3S~h;l;Qxt;v_or-t*`x;nH6g8*Ily; zB)m8V0cWD}=_aPdMQR_EtBiDo*q4c-@lM4<<^Mp~npc)J)-0B{1BXVfG?zy7pI=E@K z9CS|aa$LtW&ItPYZq*#SP*jKO=Xq(EA$6Rxf_s5y=Gh<-x&~DJR3{LBY$UMo-D3hv zaEW?sfTLLOObG+puGT+lPfW2gf_{#4BMO6+7P=bj7rk8FF?19++BC`!6xX6VWc+pa zByB3FO>Pi$o710(MX5rzo%>?Is3@#cJn@QhaX&20rDnBj?+5>BsI~;oOK(43O$?sD zHM9nJP}5jphReomUzwHr`;?j-_pF02#3>Sz0Jo`{W)gP~OZT-`GAA1Ewkv3eHs>-k zmyq;a!g^^EBXr?(NRaA)D|P%-BKP@$2viZ_WN;y{IGZ8!zLF)mKRW9r%A1AE2J;d5 z?gUrZ5-;s`K|bV6rgR}D0rf?w{~>@~oKU@W8467UL##nqpDv*rMy&oY-T<$?%kk*~ z$m}RrW$7$?)Q=UGs6gG>pSS;ex^I#xnDE^dkG3P9u6E{K8+B|*9x(##A=)$D1zQ~} zTpDN&ok8IWuS~gL^Z*+ z_r#I#m>LI1#}(epXRS`?wVv>FT40<4fNDh5==rBo&_29y9;$~pAcw6pB7?26%^L30 z#FBo{<^f75tb~7unUfhp=qTp*w}fCJAt>gL;syo_6)E?hxL~AmJG4z3CKtL;lfEVq z%BI_u+4AJFz1BJ`YiPkX}97c!G3fp591Y`)OsP=4xl*EAc@F z)U2Q;0{XB_7)m~jaFE}e&7km=Ba+b8>4S?FS)sSJCE~Frh|wd>kiY(zDS7=dBW7&F zb<~Rt_(M?`YZ9+9QNZ0Cg9y|uz<-s?z7j~#XO6=y*N%1OqW`Zh25ZTnA!el|%Kt?V zn6Otn#V)@iHARznd~>1ND8$Y%?Z5x_hrUxBf^ukjcb+HtIVE%M-CpKUkg)`Lx*{3bO z6}Ow#gcvU!&8pUxG4F3w;}sVQO)sy5hQw0FYpJO|?%i)&?aMR<)cw)d5s}s}H4ovm zq=QIk9XX0x(P5j7w<=mAD=$CN{uMx-%_F!S9bDt ziavThvmMep?E2}5Wi0@BmFJ-{1KrYxqQd1y_Q&2Lo*29UuIsW|Di`K4ngkTA3QMe> z*E1qR!2Oj^1B_MjeemzA_cw_|aM5u7AuqP}k#Kx+LA|?U)R4U0XGgn^6 zwx6p&mmd3UIjG?=WQ2Ju^Js!<1=+Nmth#&NjSpwxUfW-(67m3~?H+x@7DK&?Z)np; zgKLduMJj`ppb#m(4PTF%VRizw^e<5U#k?jvrp%DH9PPp2@V@Dw7P-F0;bl`^HZf1x zCkyGseU}&~?vL zy1RT#38^7*RgV90Z*HG+mm=JmwD2MFf@}TN|L_Tnt(7kZE_lib3X?olzop-k^CW;S zxeYRNFf}Py{u8?2dCp8uoNh+f43m=Cw7X8TeY0sC9ug2r=O&m>N~oE6^v2VAKyW_u zoTJUBuLbB~G(--g@wKkYWp44nKXdV*ck8`Kl)O(&dq29AeID6%I#k|Kkla~-dlE;| zufW=Z*DfiZ$h_3mx%W8Pjl0!QoZgugI(J>B=w_A}CUCvN;oFOw^O-5s@*73jSRnB0 zI6Cy5O#;9`vE1L;uMMdD^{gY9AsqHJ;~(}sC=zY`eXqlU8M&9xi+dje@nsinWnLC4 z-+NP^Qjru~`^mb*{?{0K$0qzKx+-nRa%DPdE$?`35Pa}8X<~55^B=gTo6Z(GLv2io zZ1;TbDxL<$xl|Jz&1I8uz5Qtdt~RYzyc55$lmuYLmnn3&fdOFcBR@Rop4I}HpRzO( zV9rCyyDsJX9yq#10I^3mJQILtu8-}w>7&e7EI9v)xpCky~1*V~I0(M~tk!U#(5K-85r-5#Ar=XJ0J#^8wO*)us$#WqW4(PM4; zOb1ZmQ4#{LUna_xzXz-x)4H-~$T~;!$t%CpktHTg!rcksP6Nuw!AH>A3d~j`y~-G8 zsn#O)ala6OXSE^}MunWpk_039+Q|Sf1&K&6Bin+;rDyuy@2pxoCnH12F>->|EEeMerI`p* zUz#KSIZdQZ#U*r4hP^8#w%!sMqelo8BkOI6kO`m@T*dH zpp0`*V|qN>Z`|WtzMMZel4WS+ZFgZuW#qUECNB@;SOcEhD@d>6N1iTILH}sO7Qp2s zYU4$1^o0>|n4pof*R5DZZFBT9>mw{~638dLgq)#+5I9yW84L6!a9FgCpgsnf{y!^m zU4-g6g9jt9dl6>}!+z%;_`n$>Xj^x~6V>i%y0{~#7bgdf(J+#_J4D|YL&0eusZo1H zMPw7`wkMX!2uZtmG*96A%l$orAK$x)D)+`2{&{YMtiL1=jj|;i$|2yy^M*35b+l}i z@TD(;ikE+3^sY?r7x#xp^YB=W-+rItHu>40)(T=~6$a!ib_}`cdLHFq zXUU?N(UEJlk2ysfN8zPZN$u@=7mU?TH4IA*qA=)-mGy}=U}4}Hz`bhxtKd~~L67D0 zL9H)E(DF*_m{F5u>w@tj#VaP`Y{UETHWKtqr6mr2xc?Yb`RJQS0x}ZrbYg4WXVW*v z#EhQ|ek`g+v1wCpZ=J8g^6$Vcy>lLjRiE?9h+e?ZUkX8j9@_<|Y7M0K*ZpTvk z`BIhybICObv8&TsKt(av4$;?rewiU)Te0_Y`$Jc%`P=TzOZ1ZTrpx67u9VYlx)gS0 zU_8}>(uuN7YO6HFdH&=kXv++vr+7m43bRvo&ZGDRPX8B$AS?<;U19XYthi0{J0q$x zcwl)66ky!U%jI03SBsC8^=eB__uvO;(>>F*p67C8 zvd0Y;gvbY&_N4JV^OfRrKt*vu{MLFV-xw!=4AvVs#@>)3YQv<3N};TMG4>(~o>hYi zUO-DZpkaz*_kt6Yy^8W;uR$E)rA!O-_e&G4|WuIZZB<8-diYSX|4E; z7P)DLdRG)ws>Vs{PU8T{-&Nx4^nT&6+fe@zulp_tCOZH?a%yR!S>9Znha zu<&IReKC*!^fgmQ1{GCVpFp0y*WOsw5`w6}GY?LcRX);I_+fUYg zi?;6TjDG?i1es#~HR8XPMNwJZ7-NADA}#pYY5qEjR7_F+Q45M>FZF`YmUe{vf#aK& zE_}(b-hntjK7>6A5Hks7AveIDC~H;ogck2V`bCj9PFvP=n8I7&4(`>G98=o+iDd%I z;rl=NVw5cLjX^A_nI#%!6 zGKlR%=gZR%U8nx!(T|CGEd+2vJGkF5<{Q{-K74uGME*P}3N-cO{b0+KYd5op;kV*G!Hb;SSOIrn%mvuj|`Z@xtxiLvf|A>({75 z-Rq%8o!aEOv!@5NXd=qbJ?eiqo0>zMJ{-U;HID}dL7AVCnPK2U)A|zx zwtT$xJ8X=33@JMH6hK*GOPyRo@|F=Dn;;c-O>@_^iDo>Bn?O5SY1eg9Lh6bJ5*T-~ zF8G!FJ z7)S;0GzkBTs!@NgT$*IGvfu&@94NL^*py5>sJZ*QZ{o_Nsmh}=Ga-)eWLgt`ei zRc#-#;piX}q?_c4u{U3b$0I&a7q(?!OAX`hQ?mLqXlq;L5Z-3>QoAAn-2L4(k%PW2 z8&g!eE?ckz8j#*+?~WE3tV@hj4J$o*)fcO@>%Lg7B00*SEn)!C3T6^$PH#aGcM}7l=K_!omYe- zj*XgDrwqYv4A(*mcxNdx$aD-q?O%X}M!7LXzb(YhJCK;TZjKk1w1s6Vp5p| zcdQ1TqMxx{|5qIBoRs?Ih z3)A=Jc?m(D(iV7e0fsv#FQW7V+``5CLsBt`;8Dl|bNx8oWW%g6gKTfED3QVC7n9o0RZa?t9u(<;$t~dHq9_s8Ci!kskH92RBvo!X`XnJj6-L;`@%C67jJW zP4v16tv3Z-8 zCM{0ke1_kE&g6(x$>7_JrSX)|z_{Zm{uu(9Ik8TY3DS4&)Jiq>4gFmrgMTx5YE??U zN})Hj&w%4)YDq-v)Yr)I1VhnZGm!;mp(iS5fuA)OuR=f0&0S0+pUSLgHFqx(?4Yio`J3V$mNXvbdk^+SQjN&|;fx zSjRrt;vtX}RT6jragb^F;#3j0ci4?#B*xUkWk2YWhB4=1_|ILzblXK<7C?T|V(dw^ z2~TT3TM?JozU58K2|*1x*cf{84CHiH`8t&O6to@+{cIHuxMpjAWg=P%cr8Xyv=NAf z&F9Y}1jmtIW$-{T4h8b3_TjWQZ~>demW$pGIt|@faRI%asV80N(}oKGGQH+B2kgoO zZ6N~bLIWC?_Y$BX93_S_v=U()Tb3t>;7R*%P!`0up@A1C)le^hw5mFcxnR;^|9N29 z8L^&pFvXpWP!4)IFNpFwXa%HiNql5IgBe)DvSk^!GHKTh0P2W^x~cG^1}F$Wx?sju zEv>P<$O>@ew>$b7vENM|Ppi(!+`p0o$e>Ria0^yP;EBEz`gm=!yl$IvJh# zN7?ZQn~q8fj5`c?Ju%vDj0P^P zLqOvVP%Z$gp|d6w=^}UQe;3rZe^`jLz&B?@bh>&i75C%BA_E1d1Y#&iE}(Ij^^CMF z79FhlhdF#+ht?Q^WeaAm`u-1#MF$3%pfz9*Q3tS{aSay;^l6iWW6gn1Q#Vu&flQOa z&;f^sRS`uUYI@m#IFXx|yZB8<74-tqk|PAX6F?@bjCv8LJ)BS++?YWL+A7+ZVNE;s zfdm1Lg;&sr!?7T?e{vI(b*d^2nbhpx#1v@JWQ0IbE=An7dJi$<9k^RGdlM6sUQWK+ z{14cWuJ{n?wm$$*iT*M=823tbV14}OZq@X_uO8hVLlH!tGHswn$Gb$K+SX6D@x>)T z7_Xy5W~mhZZ+LQIJ*i!74`d*PZeHSH15l$fQ^yH{R*yJIom@S`j+DBg^NhVBQa2H2 zyqPz!3V+P-u2uncEelBQ?73{JP*1$DhvQ$Nm2i3kFJyAD(~sjW_H;d4<$+w&VrarC z0wh-TTm~_qg)v79fn&Of$yV1yy#OF0GXmersZlKwEbp-&T3x!1Z+=+DKHS1@vIZ53 zzu379_#zf;iQGoWN!u#GyOL2XwgYVDzpWi;xhM8bd}ZW{f9z3mu44k<|8lq*k5x6> zX>VPGy z`43Kj6v_Mt8R^S!+$4ZTf%^yE&cAQ#=R!?gQ@*#qL$a|loJ|99k{?8AmOhR7X4;R7{9PA$-nL*8tE%6K z2j3ZageiXKg0F!jJ2iW1u$B&pIRM55S}+;(yd2~MNUOVeiN4;p+Ix8f1h0Y)9^3Qb zdSegb4t)JSp8&oBy{^Z%9}c6MfVZj6+TL=IdMz%%o&WUhzo(AvtI_vPuZ7Lr#vE?Q zXI~!$IG{PSV?j4=;ZfM58*)cr1!;Sy>RKa?E8Rv9$sik`&%@YBa=sqdp_=f1fZr;k z2g&TGX-^3|nu&M+wP+uzb^LMHk-z`;+3HY>;s2_j2VgfeTU=>mTQYxVC_dNX^2;{# z2!8y?S{cCK7qXp4D{1kzo0etk@zi_!6m3eZ@kuFkzkC9&Cj(=jy@qa_0((&Z2^*t-K ze;PrY+L(lk1F39mU-a`Bkcj(6_*~06e9KYj$G(Z;c5#2P+MH)0Si*4RK2jvtC!oaa zCQ&@$e|;s;Y)acMi^OYW2(&<&czi>p+0me!K-S&f&$puFXC!64$_({-9U5-5SwiKXfU-gq z&%?}J>gZqN?I2XBG9(!+?xD1lX7rs(eo|$bN6RtZp#B-I+e13I;>Q_FoQ1KyVT@`y zkVGCDbw)t)lWDoXW^_ET8rucikX*`f1bRo5Ls?O!-UcR$pUst}0(%%h8$z|49A4Xd zMU6ZUvfP-qtR}v$XaLR~$mnt%pri?0V+r9`M zG&+E`kJuYqXDGEH6$lo}a<$o50l`9`Nv5bgFC9oG*bp|7*>sZ+W?|U`q0G6LEWrhe1yA;CaJ-!Ap}9Zg5yOM68`;;8GpXv zOJS2`G)1iu?Iik!y$})gV_XVd!S$RAe~5e(I%1Xmx>}i;w5%R4fS)=2;=w7JOcBaF z%Ud?ZGfYI1y$UTf=nAuVH8#Lna@iw0lTE&6HBMh7%10~TX3E>9@Eh$HHgA{pJI+Va z9@ZL0Gxj36aNQ?Iy%rLNru+>#16AC-4rh}Av@4Xyrw@4J=K_4b58j174Pzk?pTzr* z+n;)(LF1bV;I~3%@p3KQK;y7!aY-Ezk?K_?UTGyYa^fcx7z`KQNCAR;>K>t{d{hg& zAg)ef{P(1)0`)OuZs(JVPFX{HQF`gLAN1#e1HU@fYX~e33m2`tCF365f@P|%Q7y0w zW*}>`*w{mJ3;~t3gV+2T?uZ`Py(EsYMc|NON#xS$h#mg0zbSsJ_roA*Xa&ti<|U$t zVrL)-)*Jo;ISA;sMLMe#p+|<83QCZpdRjSBroNs1oz0#C0w;eb5`d0J+h$n>_}+W} z_EJQJP$%X6ThNBI`}!N|z0_&rEpD@`QCl~5qo(kH^BO>}>+yncXL}FX9@>%5PnCy~ zJ+q2u-MC_7p*xROZD(&8dgJB&H*!7CVcrr)&}mVQr<>8VtfIK7X**q+*MN&}5jjZM zm89=Ar$H345CT$ALV7TljOX_7ztvO()cOKxxY*3!)rE;BDx`_x5o%E zky#FmutXvTN(e-VjqAz5AHl<Zu3WnQvq8cFk~u~0q8G#t|yCbuFr(?E6~AaYLq%>M7kW^^t4rDK8{x;iNgK}x@*bF=W5{<_-DeJZcYW7;+h*~gm zJXba1RnpnmPfjOoV1cf7|aNSU65Mm7pLq?!sRcjfJ!Nt_d%` zfRbRBZJDvAzv(;`*c_!{DyG(!=YL}nhhZfbGjN|rLFAoLdDV&7{Ayy$w-&P2h&jk< z4BJ@>*XbX=5KQ;sd<}N*@oR-5MdtE;YPGNCF-o7Cb3TbR>>aD#TXatuq3C*?EcedNqOx|7~Nh|gn`5&yWu1@v^4&^errucX!JakVsS%UaOKK#jlwZtr$% zU#q82^xMI?6pWoY3`ILUX|84!14q1(yeKmn(^Ik2<%UiCxF`Q*?jI?QSnQbZ8xC*$ zG8dXIN-F7($eg^MH$NaVbjAF{@UX>xd4lrL21v4$vcWeiQPOCA0s~Wc^g-c)Y4r{C=GQx{h9??|58)G5lWp z?)h-;Ul9MhF2)h74wyIgjJI$$dN7`Ck{BAhHIfFCh6I^Y`Zz#z7K^w@g$vprjW~Gy zL%1?KIdU|g7f49?N6{iCji5h~$--s}Jbc1Pl_9n0Uy}3;To%xC=;siLBR|l~9ecNw z=4V_`YHP`YHO3KlpZ0&fhANI9wX@;YFP24rwKX>=Ibn(dIu{p1JcIe>a;zLR;rb8y zS?*#$vZZwf^cPv?#GYDYGxYX5icOm0l?(q3*f;Jhu|XIQ$#ivG^8UAs&`YdAm6s&cP(=F}hOz z7(qPKcz}1x6G<6XsUq8%bK~0T7Ij~w+?dgnv#HG=<%1RpR*YS7H)qN^V&cr<)Qcan zppoTs=)jfoFTDv6$k{P9&L=LRAW)SPHRi`A%f9iX!Aj!kKaLI+o?W z(5SiHgX#OT6+F4D3KXCq+pa0MMLAvU(z22)15((Q9CBeTmzuJF?(wz*(@U?|_nfHp zSyPOOR!V6$S;VGU1z%cwyam0B<<-bMD?UBvt!G@)v4RP1I2f=x9n=Vst6D%@`EpCx zVi(0*uxNy>?oK1)$yGu35le_ZI2C`7BL|Az*ocP6GD(OIJ?$2gaMrO6L3)I(8qI&= z0seyy@rv4-xQ4BY0hc?@rEj^|CY`UB*d~3sS5yd2d(Uh`dFw0Y5zoBZ5;2X3Rvd;l zIMG2PvmzU=ka(m-I5XU6{JF{hfDjOmKrD4lR2=o6?U9Bp99x7qYRiGA)`Ay7cEimX^ z2De%$aIMEJu(kkB?}CruMY^_;kIpc_4XK?_BSt&_X#NGw82%%4X69@2Nt0T1JkJn8 z`Y1pBgXecIQ}{y+@~xK-_wNSB8JNr!a>IFEas#;BD+FNvrh!9NCLF5AphNC`A|%xlUDVC8wDBmry6<~IVLZ7$T zIIg&7akW*3?uu@pgxWQ2Y3)DSNrq;@bx!$f&QLFRk>yx*#wOJ|@JX@z-O=iAaJ1R* z{cWV%T>5!af0;EjH*>W*el$14w z{d1#^$f={hWB{Pg08X?~M`Jhf6^2^d(yQ>Ny>8U(KTVsBOttw3fHW;(ER?rWS3cb(uXT-fR{k~8$Ka1`)Hk=c=VYw*CJk)(;5V1}MQ z)9K!H@UN9hg6fHpBoTNFhdsAT%)IAoO1!6Qv&%BE$io0wMc0u=7{`lQQk&w16xM|^ z@0P}`WagXjA1FsFf@_i1sy|+tE=GLUA?E!m> z8O+#7-a!97_mM>-Yna{6D%@CUozlzo497uvExhEQ?IHJf({UQC%;gn&JoK~J%qiS3F7$wK?58cr4F}^*@YcRGWeU~uH zEkwX|6W+E%t2dKAkDtXIO(^QBL(Wq%6};)|vAazC9cI1{@26m6=S_Zc!m0{W`b1ql zU;wf$Ca%I`661=%CA3@NRrAW)T!evrD2zbeuCbuXx6JS6U*S`Jkj?eaID%_;?e)X85Rz#qGbZds? zIc0_tEeyZSkAx+TGCb&W9YYUg#rE3KQDOHV5rJB7m;8;rSN85NV_apbOW06GBhxi| zFFel}3$@hq^j4H-5n=^u?@gF1xu0|Z@Ddw(@KWH<9!(=e56OJ{1Q!maBwN}B;G7JR z`=9;aiVgik_hIT=m$Q9(!f6_Y zTXMJEK2>!aQkUPqTtr4o%3xH9^lHQv+N%8IAXb05YCO(GU^J!ZoKC$^@8Kosi|w{Q zN~+EJa=2pk-nA>Dn{~6kK3*g1hT*zcux>-E|b0<4kH(HytIl+c0=(O-7%*CeRNS zi0NaX{m%y4KfkG8ZsvUMrAVXGZxHMY8(Hj6R7D`;`lHPGgX&%l05b?F+8xADKl>r1 zb_>4WD#57Zi4;N6ewa@) z7d(Z8GM2Z@Fo&#|?^gFdFJAeF?a6*CL3oL4XCh>LdW-Tn6pp!GoaT45e}*&tjmJAI z$+)px9Awt-ry0b0VKALt&iy0Au3-T<&7t1WqUTM(0hsl^aS+ux4T2?@-(p0A0F)NJ z>9$tuHSzanz?=)KQozE`^Omi?-9B|8vkkm=rn6Gc4ZIm zxi*6!MJc%pyZ7V{YMJf3vPVn&iSzDuHeZ+ibv_dIq5(4p@cL2hh+oI(itnex!58*U zF*W?n)D`}U8bu9+c0~jELh1UwqI*rYAE_C*@lQlB@cIX+|FFwQ!);RN^7$+Mm7Bw@ zh2D+Z6e|m)Ac*frPJLUv&^H4D3SqD(aUQKt$-ePn5^f0Rn`?0JPTn zDEu@K0Q>)Kjna-M=W_P1HB_E~Oc{Lt5duPg?OE@CtHT!%$ni0oyVcCZ5hS_(jU>tJ z{?dE$ z*0JD!Ge>*b1Nug9a@5ikU-T8iNd%p(SsrjQx=1CjbcVPmdphS2_4a z3v8>A{R$tD&d|#(%H0@YHTZmOPn{@WnALY)a)U4bF*J!7mdJ}TNwZhMPj?(62yh08 z$<-jZ4|@rdN0w*o@e|jiv;;f52f7FA->w;f5lY=mu~(&%#z(S6_uE@?ts<0)kZ6dp z1Y0Tj(&&znLmqQ33uEs-Q48iX<_G4SbL%b#R`~eR+0dx^rUXy z$Um`7-<3hT@F@BMdkvJR^t1|$kttIzC1|jd6v%!*eo{lwNhP2k2(xG1Lqq^fx$s~pkWFBE_HW3}b7L$OtX|oWA6URA)zOz97 zzn$c(S)ZN|hmQp~y;q15NoG~pyL#9{<+CHDX?NlsIeE_Sy%7AkR22F=FY8T4^%uPO zI+i3+d$IKYu!Jh-e`I_sP){&eAn@sR8_k%q82U%ht-WD`dzNG*_^;qtgk!Xae_nh3!vD%4@$l(Dlt28t`XFN6+D~@spCXNUS zTdz(o`P}d0I(k|zTXG8yxUOS}Qad^-pWa5wJtq)zJtgb~??d*sF%#{sY@Z*795<+- z^?Y$qc$7Cjleyo5#Zr4W(K-1T7$oV!%n78A0AKer|FNkFAJLezJlncw03LA0W~n)q z7KV2&2>^aXr>gVETWZs|9Rm+J&91RHtvL4!pRS4xx8u)z-b)33TQpPlGtd?^eXw9& z9n=Io=4MO8e`h=+Us(1MtDNKM8r+78U}C}Qt>co8(F9WoJP7Qe8X7rQ5Zdr8rEDuo zl$-KaFW_|6S7z(a6$i`h8K5c$;WceD>=?JGNi}sgM%};+-d!#nPXv^}6{_z#hx+v8 zFLA{C(@9*3xV<}>$%v_Wi8n9O4b!YZ5#jz;YsVo`b0$5MC(nAACFjdB{Pkz_)6_vK zt!qhsQxpQcJ%3llUA6iq;4_1OFr`-~;%fu248<=AY>hAJUMezIH-|Lk?RW(M_ujKA zr;(VN4p9@%?G>yXY&Tp<8;%~Vc*#-*q*O7bwRxuBVmVo?3HwlJa88#xJJz9%?Z#Q6 zn3W`yaubnt^JT8E)_SUG?@ z7h@e)CFRv(6UX&w@3tJmPJG^9#pc6{YUXyCXK6L)+i9~T^(4QR+m2R+1+P&P^&Wom z8MGxOk{`%1SsR&JfT;YX?1BDs=|j>8K9vlPN%=-m$7&OlK*2DF=@o#KVC%@RD+4fn zmmw{L{+qF-kZ1(+>0FkK_2_TC<5kW>b${~9k@!(l#sMX{qDcEQ>d9sB-`CP%j5Jnx zjaYMNCY(h3a*J5-R~nMMseo;gx9-r2n11lj;g`RF0$cLyj8(P<_je23>02z_xJ@%rAF)1 zpD4<+%tOk9yj_ok)SzV=ulnq^8Vk>b#u8foe*nz4DPc4nSE}YF9VeZOGfQ=ut2wiE zsM~oDvCHB8u*Er*Y=N3?;fivHM4a$Lv8+_tkA@}zi0Sm~wu@$a?UI(jM87Bn7Yqm# znNBoRATaj3tzeex_hwky_G-kbU@vXa?Q&kcwyN`1$d*ts5VHGSf0uc{VU1P zYzG1D>bwxRYH zx?C=>l!#8w(8}U>DAS7k*}lS82HY&yz2rDr`%D>ScoCfGG;W1ZsPjf`>gf1*1OUsk zd$Tfh9sorUM+6ZXVRiPN41|Aib%DVvgiJDH`gmL?V%b_@1my|>_ccK?m?Y&#T%H;-!@n0Fgz>B1DjL1`v3EY%{5|##xA~gESr&=2Poj=C%j|hVj*M86f%=QWJc(oQB{Ll zn4bFeMd1`!FG>t>vT^F?npm+x#PMPqz|c)gjrnyFDdI%*3ZK%K7i9_|3h=}l69G~1 zp9A+V^A4jMY(AXl*KC1Hu?lbE~NSoQy@`;N=&{%OU% z#L%t{EHVZx68qnw@fg$v#0hMBBcTWWXK3m{mjP~hgyxR$ z=m3+$hE&3!W~T$hz4dgmf$9Tcc+aNs(;{a-f!ET56|4~DGdpX1?Yw^U(jxSlUhN0J;IT;Uyi*I#_@ZnjY94X!BEwp{J9nXc&V4eUbuZ~GQ0T8`y zj!;dp3f6hK?Gs5Z6INZoi?|4+#kXLA%H*N?wUW2E5 ze{^H&`ft34%8RW~UQPDfZI9nhH4&2!q1;BDbL@A|k=|#6W)x2=ezkHb7gHPoj672F z*;KUZA#zFnUQAMqoaIsjBE$^$ zH7P7+>0tkmtLM3ZiY;*R@Ywhb$+6Vwuvx}u47sM|Gd{k#4OCv2=^(wmg>w0$s-wHL zC#>-%5f)gig~D+5Sy}>G=oeS!LPzJYL8s6pafMS1_EohOz6YfeU?8^$JsdYwaZL_M zHcbV3+wy_G%lnUEznmWjf(ik9C(A&V$^VC|cZ{wqXc};1V`AI3HL-2mwsT@koJ?%n zb~3Riwrv}8&-;Ggch_C_$64pc?sK|!ckk+|-A`4mb8e2p>hsL(Zr(^BXf;oq90@A; z73R>LljRMghP^?hRb=8XfzGD^vhX=!6aoL*g#6#>(t5J+`2Z_h5q;ZV4|(x@-;G3o z4gXi6%&AKN9-t#1$9(ZPu^kw|Tn4&#u$H~JaKn81s6!dS6R28Vywo4z`O>~}=2iyl zenv3ObH4DA4Qv3SFjtz!DAzX_*uDqBd?1wwuo3BkwZF1Gjoh+kR-eAn9K}I^t_I-& zvE3-&hH9$?03C;?|2htL9b)@h@;ztNF0MYjdqPOz$BjE?z3+@*jz1w7l{6>iUun-BSaP9c&mw2IcAf1V+CoV2I-nh$&pJJP_uv6vXW=b z#(3&Nx9eqx)srI4oDj)*Kg(U-^RQXd+1fEr(hs8X`VKE9TPTFI&dEN^3mhXRv8>mR z0Z{q>CJ2o!!9G=7>=QmX{3M7)Y`eab22A*BLG=A4^)-d_vXldbW*ei1bcO%zYFS}t zDMv6nA@T)F)gSdTpF(6yi_Wt^cYb4&^2~uAOVe*92kMaeV~j*=BYXtC)8%q^-H~|t zKWm~yXqd_%V0cd-!ay3r;Ycy3(3`Xmp!_E3Tz2i0hviRHMt+LT=m)iP-hK^=r*jKv6=_?Fd7yJ!Y#b01JgPIy1?|?&1;xkI;D`K}&jN1K&KVOP zlWfAcCUDYqH))n&99hU^`*~mh2lNm(cFj99oegMe##xYK1BF2P~iAYvi(gl zg>DPbG#M-85My3vq9e5w`Hi5FR>-tWRx@wQ%q1K1->ldxTY$z#1F02`o1QAc8jG8Cs1uWQ?J% z<@UAq{;Z&Z*6TG&R_GhhKoanuqs-Y3WZIHQF3m6SE3-;C5aU#TV2U2pa*uN?VM4FZfLi&?Bts@PIh^+#*rkK68(rG2AvD z7kZHX_r?qIHtQCkY^zh2d>A|K3)#d01BNsl`&Rfo@ey<6SyJpJ!8e(a>WejglU`oV zQelivp(@tEP+wwfPP{*wj!n28J$**OY=}gb0R;hV@%%0U^n8A)Xrz&>9;3CX=Hu&t zfikDn7UGiteg<;`IdT(vqkdte`RWlYM=-v$&riQg!dQ!z^EMX*GS~zRAC3i|g)b@0 z3o;%%KFR<=uJ4Pb)NRRTAO0SpPcJFi*Y}l+=%>d#o&f&eS|(m`9{BDRJ-S4r^}XpO zdfeI*`z^oGNAn1gb_l;c((~e#Q>AEp@TXl2HYF|qf*2mzLPGukFIP)h-hhAcgBf`C zZ9eZ&6DL(&N2ZL{XDwcB2OpvYlebG#(`Q5uiYIq&@6WVtCw*TCSxf;?vg6eX5y;S7 z=zEOlki(}G<TisnemPN{g)TyXiK-AD?i3}dr zAXcw{JiW!Z1jtA>sc*!C%&)Mbtpcf8fCbfQ7(`cxWg^*By>1c~kmDTJH-nvAWylRr zGHMfxVkBQ>D2fs@#_3v;08*UGnc`@P*=N{{E@2p(%Y^#UP8aNLohS}HzbnbxDWWV< z7%{pCMadDWR_(_-fq!8Bi-COAoXOjSRuv4b>QpAOzOW1TqV^5>jF26)`GbN zy8=oNMuN46iqJGxLF@h)THH<}Eg|9sWX~~R?Tg9nk=|ZI5~h@m9cbMH*|rgYIBKQ{ z1UK8aY6f_&c4>GDL=%qR4df2BXtQ?O6eo#u8ZbA{mzo1OlFc62Vc$KxUTDQ`sFPHgJ;G6@;C&O%sTpzwt$DKvPP|rJ4tb9{_pi33tcQA}`3`+-n8>i-`~hx#v+ z9#^oO0tXCYQzu877fceFAF`1Pvdn-&on)B;O?;$Bl?<|c)S3k%&%&svb6~Ugx8$hM zXzt_%;S`X$EC(pb;+eA!*?(L>i!oXqTxaW zHXL%|P2l3${txQwLu4|hxrft|C%#{PTg}efo6z4h&p)K&5C%lW$x$W$^Q8g=Rj0s# zK@yymT22*zW5$btq&Rq}CCPwYSsjp><%7X;*u%Ng7kkz8k_h|&PHE)%txO*4sJGb+u(OG8IH-L_JB5r`bU2? zZV+8CWTtw^?m4Fyhf8qME{CWS3jMBKtzmgL=uG-$F_6ff{-GxZ#!aT#3dHmo+pX3Z@kbB=n>n73x3aR*=txQ%k(Dq2{6MCJ za8(pe@f@&)-aRMvcaXy-b>wExvW?Z2zU2k+0!9lU{RjRg0O^L4Hnch?y$=^<%j`6# z7?+B4YT+v&g+=ooEXbe=7X*^VO+REiBpFvBnl-4kfyAp)d{tr z@a3uxd6~%`tH$t%zqH=jUpfh4mGPoBo9QtC617Q zYdp?|)VZISyauQlJs*FVt_E68NiA)wIbl{r-qEncf`w+ST4f~!I<;VNF^$RDkAzve zuGFu`!p|m%YoK1@E>TS&%mxE@AAHbR0BP2LhF(;$Aqnp`W>9S3h&{Mivw;-tHl`?Q z2<0}$lpUywja6uX;J7&KoGy5_IF88?L%udMKLL>U*U_#X>#nyHd{SRNHu%>dh|nLq z-nv@g?lCu45EnlR9S`BxDu`AufN}fkdtFg)iA>sUSaZ^SeFxy}vHwz>76kD7Kk)b8 z4o8++Qk^iKs(Ziht_5`g^k&>X|*8A~V>a5tY!@()|Q4^n5h2Y>SHjAsqgI`8JPKL=>FO7b<%Mr@tXT`a|Zc@`M~|;sms;Z z)6?Ol%+;3~|0QiDugF*u0pT>H-Wh?x1r!cm4(0k*U8(A@LzYB51oTNn}h}SnTv%j=n;e3*N2t{Y+F0X zPo87hDaY7jE?|PfWko<%6bGCFSLuAokJii_hDOX=zqXbkov|*4`*|{t5TwI;Sx`pPL8>m??N&eltYKA)Qx-ShRMo616-i4Ng)Uq*G$ zLKrk@2NgmBRpb6&7YJvqPO4Ghcwzsp&e5KJ{gUtM-c5 zh%`E{TmZMDem|qWQTW&B`wC9(gBp0*lO~5A(~5U{lHEm{;)tQWS3sf^?aUR$AX``M z@%8e$_tcPXaJ#O2HH`kw%hOA2kYP#qNfEp^MDq5(RP68jEBBGx?{VSfDMVI*}Z9CvaS&x)9c0k9Sx!tPgnI7)3|~-*E%t;`l+tKAD#{1+r9Ji;9ioan&hQiV3VhxZV>&J@JyQ$-3i=EQ zn+^S%C%Q(hFwue$?&c=z|K}KP7Qy;{H+X-DZ!*Gf=`tl zll*>(?-TNSA;r3Tefj6lts>e{@jZ*zxuZq5R8(B2TxQWHklrqq6$$#v-d{N=$`JVP zlaCbbTG?cdR^L_5Q!WN&Nr8133;tXsL9DC&k*oftYlvVTRVqQbn*02=Uzu2fj(-vC zbt;ifEIAz}#d*$n->ME^Bn1gM9`nyv51`$U{zx@w0&B4P<9919E=|vg3NTL>@fNB5 z+~DKVx&-W5#yl(a)9XT8#0@ZCKeEujTh003d2z@9UsREI%ZEohti7JN#Y9pVw3=f& zmzRl)ZH$7ve;;>c0K)~e#lo1_3AsmR*!3%Q%cpG&Q;)jKWs5%moW>XG)w1awg^dhf z59_9V?H#}P?i{dvc29y>OZ84he@OLv<2%8La@!U4t3*;Oypm;=#7^D6xv_M0o|~r6 zwd}E3<46Gw?BCTp#JU|l=gnJPg(BAxv2@345jp3dS4-;Vo8{A2TSZTduwq+;Th|EA zeQDa&X6fTj<{ig?8wGmK4+e_O{qEFx@`d|@ynxSzynmbW(LN+Kjr@dOT}YQqt|Kcu4g^ zc9-2rg9jgT3PNgo+{hpv3!V}-`I^5Fx~}$&ZaK&Ih1ht;qQN?|m}z;8gw^sw#rZBb z9Xerf+ruje*u~=@h%LJZd#e1BlZ}Z(K)q{`%9NqJ5o<=}9W zb3=nycH`Bx3>kbcS1Qx2Qv0+5F-2C+2Dw!L!~4~dL1`&tNULMEZbP`@5USAjFu|3D zk<`Du=J07qV=UHa($(wun)Az{jw?*<{ycW^O+v|sDr1*3&UvLwl99>Z zv-r#&U3J2A-H;v<%$V*p^l(Ns6I5T_(Kz(Rk;XO){m1-r`a0- z_@XigZL2Vb7YH>Fmo?Q^drWfuH!Eg#4D=2E=xjYSdLALHS-j+ac^EjB)i8b8Hz#Yd zJCG=JY(Pqq|87B=&+arb5Tcn$X1xf1fRE)p^0HsU%QUHI)nHAw4R!^#>*NpPol;Rc*XvjrpfG zKf{%ow!)g~@yr%lmh1qkeftVJbVMfeHv>XM!;0@ZQfuz%lUmaxN^7&C8fRYt&w5P_ zF*N0}7z9f-;&{Vj?o^>Qo_+_x(3MC^PEV?#A4b%%0E&O2#(iRK z<}C%-8wnSc0q{A9n{3>8{m_=++?}uoRx=lx)KLm$jUi11PCj#H8RP8P68wzwcL5~4 zcoHFZIQEaAzhF8^@tMRD zKnSfzI{&`LRP^ydf{+2&0j^if%fVg~`XCnE3KNB-jxr+3=xm8xT42beg%2vqWIA)Y z_gLZRu|d=J&o4NCd^BSI$p7qhPYq7|NgJGPK<~>{rNjms+c*DGAPFjnSbuq|1iz~q zAN)5zi&{gcc<-sbLG?w3j@sX|4{6E)-Z-zOAU9*no+79h_pPV!74U^X25wf|{OEJN zg@oKQxm@)JxJxSbz!!#mH>L(>bGu(DD6jn5-l-cq=KT0TKzy2taiD{BLwEA&xa_GG znGPyt6E0;(xl|5R1h?b;&t|zr!M(85#}%|Fqczk_WZw=~WJSTVW~e^jBM@zJkTH?;2yN<#elux4vWgTToO~ zfURhQ7VHZm+d%nQK_l^zkPAtGS1d#Ha&@-=v%icGvOxb=YHM_WSTpe6&J;*j?4>?e@pHFJ%~MGBpDxAcQ?1HMX>wFTLpM+gqk{eE#U+0d8qElAnf3tp9#E`6fLheu;ZvqF!QB9s1Z z^@Bel)4vC>mOI`@;>RUI3F3Udx(5LI4rT}1!CCho1#u+GGA6V(idwvMyaxX9GoH!x z3{n>|3(MqSQSo%p5tQ1G;351Dq;l7YRquFH@N?^AG_iVI}u< zKTO81Kd11KmL9FspRl=}MGB9&DHipe%xE8Xr0XsoSW{|EZyMBfm#lgHS`U92JY^3Y zyWK36Vxi{xR4k5=4uC%v(+iMxUeBN^)e0Fe1UH?XrDc)ph~h8yuM{FO9r@TjD7w%n zs(QZCLG2r~g^k;#aMNXof};SATI9~Q8Ar?qnFr|4G_HSLBVMYOgkIOka4OG{3h;>= z+gx5-{H#mZHF9IvWy;s6yIA$FQ7D10Yfx24AJ%~%Xu|*VY}u8z0OjU(;G(!6~H^=E{p3N z@P|j8`t^@MGk1QNU@actc4XFi1n;Fs{P$vN_l1~gd4<0D!>NB{o@=3T=%JUwD zeFnkILk+#9r;TOBpv_n*)wm_NNa*8o#SjugWpi~&1=(yNdct>5>)TW?xPZC3{a61m z-!3>;ZX^XA08TWZHq+bF%WVu-Fj4FumA4|f0u;cJHbtX}E9AYo036F|wK@S7W1Whf z@qh49#xL#~x21Se5!RCq#_0@LEhmqgciJ*BKNb2o&ry_`?`=of2D!3%2o5F!-%OAD zHL)x6F^k4uIYe7{sMA>TQItHU+W{54`<$0nyEp z(E%vj>h=8E-8c{3ip?w|{rwm2+DJsIwDj$e_jGg89nRCWl&>R$XY@E-D$$#xEOOWG zqzi%y4Sxreb!YxgV&{XAD8e|C&2F3d`h`c2qOzDi`Fm>t7vF_(+nI{rEN@z4pdfx@ z${_fS0C;S~iCU$APM#D37j%Agtisz8hko#bR5B`wYffCWSPYt^1wR{C~z~3tP3}C{MUyQl6H?ZlJkzqE5@v3 z{Ok1s3aU#M@t(W7En#&@+P4=$!Tkc2=OpSjk9)H>Q%=;CWrPQYq4p|gZOSws{KCb4 z^1!~UP2(x>0Qa8s{ny<$t*|UJbHc6@eor3{TZ66KPz#ph8QDL(@CecA+A~!qD^yZr zfWd~;=q56^Dp<(wNa_x3u5mJpwFks>uglQ2#b)+~MYl(BhFm=VLFrqm6dLE6<6-3}F8)|!`l7~?a=y#;8*f*<3? z1F>|2JTv2dGs0CXzo%LmQHcwlyCpfGbdsqu4!g^TL*3T*fN!2JV?gdd|Vwm1$i+XjQekhSqE7Zo>#Kq){YG{$7O`vuJci^~1JH&CasJY4V8 zT8v^gaEYwdbew}Pr9nn{_%Gms^M}6!cvqfnEU{X-u;T`d5TeoEkIeGm)r5of$yV7< zrzB3DfcHQLXfXlY{5)$k+{iAIB6dVNh?v0(V8KzmHtYbDnU7(}0yQx- zVbSQvCB*UrGt)VlQc!lIX))q;`Juqnx#+7!;W%`6w4g;#yhIg(V#2?_oAYJH*O5%7 z<%rj>h5|JN3vwvq5xrYg@kV%EyhlaDXUV>QxBijdPw}EP+2F$TBv`+Ho}ZQPSV@qB za~nyh_Vm3Qa@dAM93}(|4{M{&wz+Xy!u+9Lm{a9-T$JU?@7A9&jc1Vrv(U$7z9+7B z^(&;#kL!I`qX_itObHm$fcbSse5#-jgam#BNj@tpoYjIV+}vIg1v*jedcw~VkYx-w(w&EXalE<)CSgGj`-*@B)gd=c3_;%S!vc%8HlSYyI zw_Y836>O5h{7EyH)%OGl<+Sl3X-nweEUm^d9QqQ~7p#TyX(;ra2sLW@P%fE_WJmI8 z)>f{T#O3JTk$)$S_P~^ujzH}?`Sb0opCvN!IS*GAuddwLw@#o#t3C4E?8U7W(w)?; zG|%q&+`Se<*?2br784xpA@XC+MJP|%cCjTmWarmy(DEM17Rtg!nQT%=KNdIP8B?lc z0+kk=A%H|s>Jl<8H7}f-+ZWWYu7G5mCmG_gAH$`f5kExa`%o_5W384Pt%}cH!ap+u zL<#y(bmcvKSRT!5?E6}42$%LSRb#K`H^LSaUhzEw*fiw;vLuj)A@f%z)#3@WqGf-p zMH1Ca0yp<#6)fvK6D%6%CKG5O)EI(%4pH#-1~ZDxs#R4RSkB8&u|3q#djjk&`{Be* z50xW{z~ldrx2lLWkc`%p7wNqpB1@V46-JGIBmQI%7bFziZyxf*eN&DPT;C#F+2PqE z)aaakOr_uh2;j6nr4}BHh@~$EBxE5HU(Q5iu%+4%@Qi z$0V||Y3K@9BVvhdIN|jFA!=3$t4}o)I&>`$Wb(g0vClsAR0yT5cP%=~ncax_0$4ls zU#|hq-;j6&KmB9{6?bnlx`{5|7NJcHd?l2(v~dZA8E0Tsf6X3!bXVkdI-)tMOG^cIXRiCRi#MK}+S_!8l#kH=78-Y>!x`-@yrR^zSy~N;4OvH%(pJ z>l{@g?K__L;do00DTCb2?dyn-RvWztK&FK4__MV)b!Nzc!CsB5HGWof)S`U!q;l5G zp}t*l{>C75)HxMGV}8<^R1lr%nm!K@5=C;|7^G75_^ZGOFd7KKj@k6(|k9wJ{$pNul4+q zQNij8dj=}$fmdH`cS^svAny58P&BUk$X4}BE+VowyHA3I_OpwZ7A_Z1qN>0@hGx(~ zRgtGLN;e;>wts`D1{{~v9$n!-Arb^5r^Us&`+PV0Xc?p}*s)<8rID2+E#n|{%=0Bh zeP5NFB>}VqOnlB(7iI9(NyUUnXyqKBoN=85F3`rh9#4ytZJ3l@)o1;Uq0E|cm1uH@U!y$ z%*?w{6G9gvThUR+dfM3e{;+{z*|_TyT4r8!6#^N=s!^;55TYnqxe;hrhI?26aos>Wn*Z( zKD^%VZx;qTA=2`mnQ*?r{R4cMjbX>nc8QYpfob$hNAvd!7b_8iM(Ag7o5Dx?diX!j z_Ue#70{~JMuot){UTQKI!xe``2k7UC|2{Sh34482Cf{Gv`h>Ehlt?(fA1v-HNZ*f0 zv}kwFv*$q!VV0v|h5rnwz}iV)q@I2vgb$x(-#>yde|5cbgk`eq8W$XrSk8}YV_`X} z3j3~s2!K+77!r2tBypi#t_+uCwkC_#r^Vi1-2!$GgRLxm5^(3&l5c2MwiVMyrHG~r z^=h3Ct_r*FZ>k)qL0C#WY1;?&kbmJG(;C-887}zHmSqSl4-n+iVmtMDS<0$=xac7} zY-u=2nnQY~+XNRUEW?&o!Z6rVMG$K^MTkQpH?s*yA)Z~1zdS0oyo)c&H0Z0F*@OEl zrvfTvXou=T2bu=x8_@OC5O)h5KqLpC+N>}*%V)y@wS<=Yh5pR0Pu$6=W=V-l2U0>~ z+j!anfhJENF-zdLKNu5$H-cCNtmn)I%y!)Pkp`<}_Lc2gT1I0k9^k$t@D0>8sg|n}EA!))5GdmGkmSide2Rsir;O7_9mmki+ zBc=b7SU4~O7W}^wAN;SxoBtn)6Ym}#g*?E=1(PMYBP9AJ)|)Y%C{U}Sl~om@lA#p< z4_QP+^Qdn0bAE5Q)D@G5zbT-(%9pxEiTe2cUPgDm?mYi}--sQJJ`4f?eYNk+wTFP( zDs4?kINQ84v zUpchf6L)IXd6Q)e%Ve_>LV&iX7aT7DXlBgAOE%I@+Y^EA5Dr)ML@KU(ql{Ywyn8CO6!tqYFZ6IS2w=p3#C+zW{#tSyr)>qCzr-tncdtP<5J?t zT%@c3TR-ajM(?g7Qn5%R$L7FVX4h7{ZRC?2gWS|usBgJ^!?$Lxe3mPNVvbRRjxT-b zESYUb7SX4M(&<7YwM2d=Zvdb&g=s7KLwjK%b&hhibX>lDi!?{pV7~M5`DG!5<-#QC z*W%{mIVMpGndkE)c#Ft=vi&0N9sJ&6-+T8Z-2gBs zO8RP|>#dx$>|2fRzG{rRT@uOKqKe;!3PE`rjw)}M#o zxz$I9WER_zgTFruBA5X$#~zQ*ICUeF;U?fNM0YKhzc$uWK6^)U(H^%|@h`tBgHwEN zR0{*gs8fo!*>X)XohG~su)Femj^NQB37r>xgFG3;eunSMzvrrN##tz49Ta&T1>MDb;@_tGw0ZWN`A7emBEa~ zb|;&_a6+#Rp&F2gkgh^+$z>ndJwPylc@A#qL~3txMsc#liE`h&oM_|l&XD&FS?m|9 zx*WB;3z8E@koN&Zi9{Dc)yWnK>AqK;iX#5|lmpC)!x|Wbt8}L~2`P8ZHhg}|XnjW&~I_O=1o$`t1SLgIgHW0?iSG6Mci_S(gsX5Dn2mEFJ)x_IYG z{`mWOI3gM!SsKtAi?CYs-I}r_QtWeRIK<*oe{sRp=kE_7aIBeH7{Tl8|dMw(Kd5(fs^;$b>)-k zR=SNwtX5-SOub@Z3dmhsoRJxxd-y8WBYix*0HUG4qM;_Z^%lEI>z|(yd6M<@Er+RG1n{>irA=h z7p7UdB3;1y=bk-?5#5vJDxT!C`)eL$=uCQ=Pc|*hS=OALX6)~jWsd-!abC)1A9j=u|;5pvwhZ!_WHfuu1d?4BgnHPlOGU0V@~pn z)vl!hGi+{|9%Y(bizYPP?BV;uaDwt0`AiTGZt>GBfBU6_&^@a!LfOtu6?3q2mF81x zvjctMGEET#ZsK&~TtugVfo|xHwGH`2e&7NmeBj5`81D5|q1prf^wvR}AiitA8Y*v% zj!2DmyU;{YuEsj>&=TeSrE=XTWT6DhDOjQbDh+Us)T6B-0G|`;Y&(pf)?B!wB>r68 zr`t`QC3R$G%xx>jK|YRO{QS3=-oLFNA4hc*F?S${O2D)w1qLd!;Z=gF$vP72sGKE= zt}ARsQK_ka?3e!pyJ5hki5rPO5``2APztF&A~OC{W6sL)lpje=jj~@Z4o0*IE}pOm zsO`=omFM{qwMsf#v#gAu9n4csDSdX9PnmJVr?1tQ_jJkgP#bw`uTI?jL7`4*m6w+5 z91%?`Y7Bv~AZY7{|0>2T~K z+h+SU)#3?g7ddc3#I|bG8Miu5FPBc|cp)}lR()$8GUFev2s9)_S4QBKZ!cW7RhQ54 zEkn#4gLDyR_@Rjo4y}8V{KNCHWr_e)T>L%D#fE<8r($qkkRfX?rNAElxy4GRkCIq( zS{=eIr{Aq>;_EIUb#SrA(UzLd;bLBr)@s!Xk=rsrwZ_c5N*+Ot!34`XuY|mPj`6^pZi9(+CJ721 zt&`rN(eOyiQ!V$6A z9SGj$Ae0Qk3q4ai-8P*0bP8-<#%suQoC9Jky4HxV=ri-mhOf1T9QZkO?DwC~Y{^T!s3=1)eVQm1+w|4`^A(@R@zMP7((^X!JmtVh9Fkb5J2C6Btipr1f zN!@-$7t(|j#hDPmwN`UQCesuL3iAj6=@C_x4|i?(MQq;`kil*~^(?ww;?V&S#m`3q$7m7? z2WQYPBh?g*=yp}wvO=MJl(;FtiSgUs;#0hK+v%(r!MIp=-BIIA4czvIV=UA~Tq^j> zr)WT-xF)lSmsJ*kL%`rD(zOkX|LE|i3X^!afJIAik?#=tDb6`*KGgRr(nMZ>TBi9T zr(gJnvfCLMT{+_Ua0{SWEeh;Yv(6Xg>Yx(tDXfwEvJtCdNEc1Cy0W#YLVxo?0#m9Neob%Q_txL z&U790&zb`dutG>>Y&5s0ouabeRnHSNiIysbN{{v-VF~i9FalKvB9tygmy597Fu@_B#Fbg-dFZe z&@7-HPXzUU4Pd!a`B>0ra{WF;V8$%0u15)#3ox4#0J2)*KH|=Omeo_#l=^0g>Pv=SBfI^ZOku}asxYMj&pRBvPj~kmV2;x_$aCyKH*I&vVDL(;2gE&B+w^-+i7YY z&9TW;`83jAbKD|i=uG<|rDO!dM!;ek9zLfE*b&i)c*hh(CSB}N?5-z+kj0JhT01#d z;@#{18@g^MEFGP*A#B>j1a^{~Weh;w9e>J^$}uSnsK3?;zIT5lUp-^a&{I4Pc{J!p zsI4fzIwaSc^zixF-sF<8JHdqtJQq)KMRp+0`o0bEmGVBSX;m*SI{HUSm}JFU$Sw&F zsNb+A*%IOIz$~WA7EE`^6(Qf8WcEj{p#M|>oI#o?|4tQ@iN?}ysn4;EEbK#Pm{zHvMD^9f-EfxrAj zA#b6(ao}Vw`(6yCz-c5q4q1=&J8f|k!H)&7MHN13z4-*>dJ6U~geAp7%Q(C8i>(a1 zt47X4iNA=XIH1pK@u!(K5o6`pQ!3KuJvZ3EffV;@(+Y}*GD=qFJEoqmytD5CIJE`+ z%JO@LNq)UkI{oDedRdM~k0>>IQ`$)&TI8C9PWKYpi#gX)MgA2T+zV7Lh|d4Fk5VzP z044KvaG&%0n=@`kn3`{gw%^d(bM=V!@vW*@8tyKRm9nm{cBa|Fy@IK(;$${9po_8Z zXMlY3*8^>a`le;9+yKzrfcIOk=`W@_slvUyy)woAVL-aiHL{YNteUwpMQU9U)qp~T zvob~hAOOS#=DBgNPzGpE0^f`LcWNIzlqq`e8q$K}#Zv^kVn?HCCpG+YE0}WPYMNg7 zbh&5D`2f;c+dIPY@^CU8H*@fx*87Q-Z*2q`DDY z4&!+$^CK9u;okp9@1nqW&mZ6*F<3}cwSQnT?NZ%&UUVxYbWik@DfZ-bXcX>|U}|oR zCb`?F7~O>hsJhI_u_hb*AS}vo%9VEQEhY2`qCSV*FUN{R?g4rdO!a>GSiwYp;RSVP zY50J0ny~-JccwlK>lbE%5NwzHC92YOe?0(yyqFhoi(#a57t`e+(p`$x*AG`;q1+?G zMe6>G#4#SVQ#lUY8NUX0i#j5r9F|E^W^u8{9R`5zCc2xC2Q-(}l`d;^ej~eszX@+e z`u!}=aoXm=(^K4X16N)|98%``LDU(99^r5~(RBfJ%wGI40RAE6;I}9rsp)obf^b+LZnw^LaR-A!aS9}Q@plMRzp=zG5u`7xK>#c6x>YXFpTh?((8dV@y_c1(qwZ4q*8|erYdB+&ks}>zCd>Y1&jV1AGWzA*pUPC##lOCG^O-o%fe$STBK3_pxEX zE1TZukx<8t&=HvxqIc*v&hsUh5D%d7Lor6suP`nbaO(9K>h^t_QzpuLeM{i`I>VB4 zvXVCaO6MlxXTR4B=-DlY>C>q3ZqAzD!##CAa-Fhg+nJlr0j{U_^~bhaH!*($Z%fZ5 zR;(t-|W#ghZ(4j3r5S{N)?|A z6pvego4oIve+J*rE29fLM7Ou$;BUf<#&UfR()&+na9`jvRr_Yw1s&bph8)T4KsZ%4h$Q$$@}DX z7~f5A|FomNi!fcntv!yJ!&X1>2S@LnU;6;{>yP8Ut1!P{jAbhBB9Ix$?Ms{f1E!eG zFC&6Yfpvu(Zv8WrSNsGev(AOG&9v)MH2YV;=1Sx1V*^^x)zJK66aj|lvx!htbogk_ zAJ3M?E`#>9iRZd;eXQY{_zbRJTqHeT){r5E=>>7?!@4R*d`+$@0195~A6Q02tLbV?7B{P(X zs92ZFwn0XmV+`E_M~1XZM({Td7~llJ8HD^7;+n7r20qNERVV*>FxhtRDidBV-0i75 zW$$Yc>*@Eg5*EsN=5@t2f|YNHnttG^lPAcR{8RI(mg4r|fwO#$EMSGV#>IWZm4R;I z+%5NF^XvWT)DKCQs#4Q?*OpeFdDAAm^B%vAb6f{mK(EfvOOhIAS7aOn8t`QF+ou$9 zg3X1eMv2vhPo7YP($qPFP|IdAlL$mUc*`W2$%%>dPq|fOQ7MUFXgE9MdbAfR={3DR z<+$cIv_N&7fVbn-RS$-jt&}JSk!fQM?cH?8I^GMm$aZFhOOGfl6#eT#h&dj;3+Sg} zUt!?@p9Di~q|A}GhM?|eB48h)w?AXjo329NSLG3}j4625(44aYmNe_*l8BA`J_Bbs zP2z4m>L9xGRl{ue(PEve3695A>}P}0Z; z%*-XTv-z6DQ)-e@p0FR@GUgUDt*QXIkACoF_B?J(v3~>V{ICDIx6qYdw_25Tl!V8e8&5-{mibCXyu8A(6{T=(Yhy0)d&(%Kq z2`1UVNagYyG?b|r?>D=+d2sBAY4$ykW=l2sk;U1F#Y~S~=4@|I-Zkk!Q`Jkv)Ktq& z#Zj}*HSrSV|F2qS+f-$(i-_id_x{Xm$Li5`47CnxrNZjmp%9e5Ar|75UkG@46JE8UC6e2 zm6~pEH|WNL@&zPUg8E8U8q>4VY95ojD0<&lSa!}VS2cB^d){;xDq}tGC6S*z(#2`R zA=S1McP|T@xt&Ukw00Ws|D8^ugQ?}!S8NqiCOoZ$b8_RW6Q+SqU3VVxF)j~!Cf{uO z-BVu@gqG&mQlE9&Kys-OM{f(X9Sb*p6t8*Kssz?0J4!QoJGUk3`NjFrS8HD)il|Z+ zsE;BrUVL@b`pjr3`+=X+XhIR4DEvPQOWC7GWX?(<@}{X|1Eg^3jJs*rwLRWR=r1kY?_#mfX*0#o{mTIo?ry1mQI`mr`n8xL=-YQ>XjF!rm zTFkg&^3M%bIW=>Har_<-0CpnQlar)_76YX0jpJ=(P64#R9&lr`gmw^?Ta$8YG zGCFX&`>6*qX?aB=)&PS{mnlm2QUG!dv5U7j9G-}Hi_~$F?#zni)&Si}%l~G_hUzC} z)iYd~foUtas^S$0zR<)f8yods$i{zN=B<*_x*;4N?5SV;Qi^m>Nf8|I!F9<_P&l+@ zo))_vEP?p^ydINwrSBJpB!(IgSlo-807Q+M^rP<+GT$g==`8AJFT zs;lf@kM@f9lGbnz)%{Jl^S)m8pA~Ddb`naRZ86ts_+*z6bABR~lx%tDcw6}9SR_y4 zmH#bk37oyCBko`)j*^}UAFur072~CPkJj=HSbl2*$g72|gG)U`Q4+LIe>ZD>dcgCTfS8q+U5}-F z(z4Nft0WLNo5%9_GW=qYLvTyhq>wqsl96clPzL)&DEh^gi*C@0dISOmG zeru|-^u+LKXHIz8sZ3!7z54lcTe6r_>N^W*) zLWDo~hL;z5$o4b^&_kzGGhiEd!$L==TVU$Z8b8qQaxuRBNMH6}pdG~*QAs6a7oWlk zSd+LY>ocL&Ku@o}18>r}HWU8;UDLUdl2ntobmk?c^OsrG*O7V$n=7-^y+7#kStG!gN4g>Gw zwQ`NYEyS_SJ*PTKhT80X$hsKGPB9^#ofk_gVNBLKkRN=vGsz2a!}m&MSUI6=88*A= z3=Q{ddUV;hweDVZ7d2e#nR(J2UO`)zTN5vO0tvyTbbWe`Tx68N^Y-3vaOdGKnLfE< zDGBDq;ckRpIjDr_`7(pM_hGIDdw-_lL~AVhLg8gksK%)ft2w>Xw;&yJ4jPN*GkI9D( zT=Ql--f+)JX?#3TXmo4#!hF2EMHm>)Q5^(pBrLPl{|#)SJ)k3|4LGN!PKs~SxVx2& zc%{n^ig!dmaecDCyo?~pVqYD#`*^;3_Hf_ZOJ#2NwPD28o@qbcE?X&JW>6dNi?BPm zG_)Sleq{IJdpQ-MM_EmtrOMf(TN**!GD_tkxu<)7I~2ulcXFL+3wgTU`5tJcHq>qu zWTcQi(=4fzThsb%k4sLgzG6KE70+5i=j+w*aK`?_TSNIxi6PhFbEQ#VO4$;ExCJ<` zsriC~_SlNmDU8jCBepQN+FO5r&LyAOw*>{_+22_f8bIQ0JJ;CQX8#N0dbCGhiy|s? z*OxuQMatPVwT~-8oKmA&FXkxIC&{yvd?gt=;>8Z*Nia5YrN>tN`**gL23s`_y)#k# zIYX{2w#OL)UAN=OMA zbJh~M^|CA>&8prMF(6!k>RWvIR2E1T>7Gq)e(WCd1T$1Y3e8!Zfp07s1XtD$7!IYKty`zjs8f~^zEk3#`xQbQk%{G&_2mIh>r zOtqsZP5c6{Qil`GW3^cagRTB6VMPWaF}}ySyoiiU68F&@7l(?m4GkVfGOqLcH=vGV z(iPqNNxTSZWVz(3fTWf8v~tP6a~I>VRQug6hU}5&arwXus0c0EgmX5caGLDXw2I`KTWe zstu@YYMu+Z+hsJGsVbVl^!>M=bN8lUC7b!m+(0(tYd(Ve>EG1vdpl@B`=r z;S}G*rcz6wt92SV2-z8dsU2mj$xn$Ab(mp|I(+d=0k>}yf zg(Sdt(Y!#N5k^?&ymN7L!4B|((GOzyKP2O~u2P8M^vj&+u*Mk3OK*|8YmMw>0a^I} zA%@@h6XCkJ@U_EBuU3^5$hBp)w800jp9e;2!O0LyN2TV367rj>U3UtQlPYJxh@ zsm~iQ&|xe^A=-Ml$T`Nd>@X0_N}D4jHHZ$oT44M`gs5R#Gdi-(ewiFToN7lWpma z2aLHbVgxRH&IfzRCUmiY`;bTrG-O3^w15f%b~0oX6#+%=r z9Y&pRgJIxlmDFK=Aj09|1C6olN(W;8K>W!)?D&1$sIk=qI~eWJrk}-s+(?wCnheCF zjg>+KzwwnIm~o9;JL;1Rg0ne`Kq}DGi1uO9`kUXxXqaGZWb4j#KvlGlLO(O`vLWm{X#-)A#e`-iz83c>pxbJhtEldOb6p<@D}+F-I`?cJt&&bzbm9+ zjT@JHh*{?>DMp$`1>r17o-g`aI07Vt_!G8#9|#eimiVgx%N;uN3@PwH#4^DaXm`V= z<-zL`nV52>wjl@^R2x*CS+t6!liga;PyCwMR64|Whu^>d33>N@tb)YE6q{Sy{WZNG zR;=3oE70K#o$mN#Nf6r;in%}sSldbnu#}%R3_vBV?+yLvNO!|ub1e}eehr@qV_SZH zpjcb*`bW6&=nl01E0Syv-6h(-*MFoUl3IRHdz^Si#XJzs+nk&+RT5MJ_Y>C!CPOF4 zRW7Il92-S1Pb|#^Jc=k_%#`nqu!9fP=-D#hGK{Yr` zfQIf3Bb;HYAdD09$i#(*Bc;iYhD&2pI3q@&blbWErS!7Eh*S*FLc@AsaQ!85S+NB);$gx@^Icv4X9)i-{$?w(jMGlax>$IOWsAQ^rGR2xr{ z8Z!{Up};pQgGSj@jOr0)CZ zxY-ao(%!Ia0pKZ?f(3q}lka`HfyL>ZsPZhcnO7sfC3**G$Iv4`09+fub3(@TrzHnV@8*OC)x)xRte}es^!6J|-@{L$P ze|jnP8L_kyZ5$~;N3+0C^hOLVQ?Uz#O*l0Sm@&&;s{DKU?_;1SDwHIEUZndLE0a4| zss!>T<>wnz@FF|aH~61`Tg^bgHZa9TCY4;5CO9J|;r<0UW?0C7hWxwopF?1wbuaiQ zpPK)gqT22N%FqK+fbm;8;^8D)14;OY0r#CkyMrRC>~tzi=>G_VSk9GyPgUWHM1Nvi zf|rn3|HfWM{02y{X1n|3ic!4`xV?@n<7isaHvGft7}51id*y#Jq9n>WL19Q*LWYQS zDFA}7gWn#A3I7D2v5p_S9=yig;%J1em2L_mCT200pw=nHaVD^#PpZFIdb2bIOach1 zKXGv}c?;1LK2q9wpOg>r@Shm;xTt9UPr8GNyT^*$1EfT}YL=^C~563`6 zu~wtuxj&yxIbB(mqt;Jm#&Y|63!zAur8k3A)Y8>IymXDEygs}%i?==^37x;#UyjwI zN*<(ndF>(b0G5oqICZt+T&ftv`JYxYe`mvzkvV z&fU$e-XtW{6Wt_fy;t<^#j`Q278TmruVQ+}nf%t+kOw=JW+VGrV3@qkNpdWGZg`iF zlFg~E@c_mx3YR%Bcj675+LJfQ9oAZZ#8Fiv$5QYybA7pP$Lpa+pZli8EDRKu*-W^tbjs+rR~&)n68T0*z4p!56gN{ z9vi8q2C|wwk>a;Lt}nO0?jH3}V1L-i#agfET78CbAX_ zP9r5`&#G_Dn{ODi($!k&+EN^m7W05Jx0D_H+r`&++Y%8@{c^? zUYMMHRO3I*Vf))yf|bUcrg@UR^0~?OlaJFt*u}$4P=d8!b3$4iEtiFlo;(TY{W{xT8k z_-G#%{tW>lM2hF8IiyUWNAffZMxaLdJi@*`_^SDKbX+Q*SCNS^TK%C^4V>q;qgkLBJiVeBHJ zq^NA|72Oa^$E}tOg+AOu# zFqQLvD?+yK<@KxYWrk+F=9M3QFXeOOk?l<-%m(v@8q-2q6?8$ zn@#A`a5%i3)aI84_uXHy)VzeAuAH;9ds~{`-Q0yt0;9kuzDto!3R^M z#)fVyfqA0W^|)w6$j(Tx)-!)~BZ_tHcO3qvg}ggJJFV4^B^l&Pm1(q=j|iWgJ8Syu zRS*)zCa4-mrPkc68O7T0WlY<&a69OtaSb!*Lz_H7srixW?C-yvbei6WQFb=Pf&4)g zx9)|S3fen*n`o*#uhqhRY!|Jku z${Ee1Z2iMWOqbJ%RZ)&+{fW+tw(u}-{+SE^ltHt$PhJqi-f}%HF$LW+W6aXFE)iv} zdWA`wTs1~4lfM}pO{X%sJ*?Cokr)@RO{axjTq(M<6 z@d|{h@g~;csO!c0@{eY8`dm6eL7Sbw{?ZjYlS0IF zCx!N}|Fp54lz(%u)33K4E>`NTkL;34$!>8+#igOV1}<`Cx*3Jx%i+j+%l`(GmC0)Rq#1^&v`Xs;Cz|JMfby0e}XNMMGSyZ@Lgks(1TKD`x0Tw}Vf%n5S>3&J~>X!=e5 zlF2c-jHxQ&;q&WgX_?_92SZ7tOKZ4>JnyvgNY8}nYSb!qkq8OD*X@jWw-4q@zd?zG z>!!~nmvG%|&Cs;2k|`^g*kI)T`dXM{cljmcrM~i4M(0Pfu*#(>=&oi!id(Dry?@m6 ziVg&9XeJm?y25yJdMIvv2yr4ZV{+C?8IRM)Kll3`i4r2&nh3r4&v89O4V&Grc?ax&$M(aF zh>h!1^AOi6%bq$2RD1-4|D}aJ%x8dOkNdh|mwm&L z-AjD+Is6@4Qc|P$!V{P4JYhRgn!W{b)buja=}E-UZS#kdF@~-(GyPyP+?`LowkuzR z#Gk!Ut^iofwIX>Jv;hEhMY?&?*%M>!WWud{3@y@8QrsjF46dV(!E&tWNu9Q`8s$>w9v`b*W`hgr|2gc8FZ)dw?&>19 z%|n|k|ALvy)z;7W3a*M2E|U)%-51r>5Nj>`yZ7(T3ahL$gCx0r>}HTX-t`XpwEkw< zGI&`j=TphsHot0H4qq{BJI1rYq|e_ntO_|tm=}}Y4X9%xaiZ(A4sXk)CFte)mC^ga zTIEw_=ihv>->Hduge zS0!T7On7;@+l)u267ySE2dnGv_hRg%&|;d4=$4kC9LC&M?x)wmi)?t|1XU+gw_UgV z3?=iy$~1kf zw8YI!90%NHg!n(`s)hJhxLv&NQYsm?SH?9yu0x@LXygo#Tgdkv`-q4*#bdp!HC>!L?*K38zkAJe{etfV>5;8;tsb-vImZgQ!>I`V7jiHBPGjE`EmdGe2< zOxdFm9{H6D(dNzu>w~{7b_bm;zr2RN6=bDcd%v{iL!RqIM?y=qyXl>b;7VP|G2PC^ z1Yyg=>S`wlypS%ZM)mkE*%CT^@lS)C>^Wu-_iLl_<$iySRFV7)Q%R5!g%cC{TLxbm z5yzXg4>>U}-ceM#=79aPpiBpkE@31Lc7m;06b|-CB@qJ5gx)8IpkVZguimQI8)}iL zf-=(QO^~8^x~>{iFdqCT1&km2G}3;SJql5zlo|!RiJ2gyg{B@(*t}X=r|<%4d6SQV zu2COP`Bw5ad%>CJpU@>GY1_8F_4aE&^$y-j!Grw-w0M!#ZGz{Sup7QysRc;PXdbr0 zGQI8d7rlAId=ZeNg#oKi=-`O}tFM*%mZs!q8NbzpHTIsTRy?CIxw8+CMu5aDI3oAYOvDvFJCcfe!&4e3MIGWGW(7kT76@eO}d;5X^XE z)|)rbBzfY0w;}r3I^ya2Nf559eGSAISDY6>cx$$$-U`L35h8^ccN?L8!-M}8R{Uj8 zu7d7eL19N-=4>cC?HmETuAk}Lppk|Hp$vB(^?WEh2N!R!>kMf8!;h>Dwj@hlP7O5j zpPYDpomSXL@VA=Yzu`eOF^KY9J+~?jQ0n40Y?i;_1UD6GN#L6_tbFo6M~Bo%1%=zr$bC*~+8{jn011Bj@+*&cLb;HSYik!F zk%sXfh@vu890ujWW8i}euB4+A+dUVIRwXy+L zxGo?a(qHaZ;lxo~IyosyE81oyYbxBH*=m|*MCEXjfAF;=#`Yovt+Dw%WL{O){nI@V zE5EEsjEOjXES9X`P9KLw@|4l4)(Mb+&Xtu6aWSh5om2-@Sx)ewC;Fm zXGq0wOtEx6JNa2lcGOCTev>YS>LJpS!Aw9s5NYXAl&d}+@&tbi{|GHWq!oY+`jWi)JC^k0aoZu9m9_U$7SlhZWmlrU!f0v&>2wN(+M5E`KM}ctM+-2oh{8-?K8nlGes=@v{&e2N;=WY4scsu2`tt0R`lvSw|(j3Lj3L1>^v<%DP9KWcH6y zA;`w%#aPRrcNO9P(QGTSZ{ zQuMvsz8Z035P@c6+^PLI0V|H4M4bApTLu zE<14Vd}^2Bu>AsjSnK(m1`%1HT|C%%m*uhb!ijONbTf#=TrZ4tI3<5$$x*zjQ^_fI z!YBRJ&bs;_P&fn8I+k?BOx~%|e11lI=g>=R&e5_zV!~WF>WbgVYY-u#k;^Ws09_}d zH{tJH{Ltqg=Scp(Eyi_N=8V;LNA zqC9-K?{=G?F8U+vL@k4I8C(!YFdiK);+Bi11=%?z9wral+g~o*%YF7^*=}Mf*u9UQ zH_X`&S{$Wn!1GaVWt>}gx9v~Q?2zZf8LtR_YA^Z=VLUOiplU(G2RA{6MC^xC{<)2( zR{cx+1era{_~RzJ2uLFM$y2F}$;p#dQLv7?Y@LpMc1)Dd;JC&9j*-np!LCO>Y14b@ z0&CfI#H^+-X-HMPu6`!MJoqAd>8P{{HrjO7)H>+(=_WFp$qLL zVawH-K7PzoQ9#7WT~UD2AWm!}`3a|F%6Qo>2KE&y{Qe~qi~erzdEE82>7u%Ib;S-A zR75?-Om%^tO)K#u?+xD>T}{v};^Wj4bdeC4(TV6MfDe1^s?*)J=Z};}*uqS`nnh~< zfGjH61S4k>R_}Qh>Mul&k9GHh$byoabXLQ-^m1$TF3l7IuDR&-ie1kp4V6jD^giqp zTgMNJ4(?D~4@V#qms9U~ROC{z*6WL3<<$jt>cy=3#ZL2Gu%f$`GoQ=&rHTj;aXUrd zLhubw5LQDfSsf@00V^PHvY6l`d0;3Q(_(f-&E ztt2Mrgq(UDz8mhcm zb+f?@P;?~RUS`7Ac|ha)HSsb%^Wem*b)$Yvi>1nIod$BVNdO1=bfqf`d&SeGE=^G! z$l4>zio05YBMDsTENce*FAE z)%QEkcILKem?y6$y;euyF8*|DK0(!YaX{K+oB{W^0h&lc?g&BR{VEmp#CPbSl|G`h z5cooRn4n)m?{@WT(?b6~O*z|#d2DK>Ey1_np`bA3y0tr|IR0UNoI;BAYKomJQksTe z=|VL`s$MLT26|=RmgAHTY45qYVZEWwP!8kNQp$l(sRe&?OZ13#cN;RTf?#mOy{J)^Eo~>|XXa)<20|qL7K7 zJx;cTiRy37xjv=6Gs_*64l zo(ppe?^7fDLu)y8RYH(pw$o)p1)+4Xg(ghBbL_>U)6iC*YP?$03#)>|uwQe)t8Jf^84<{URR(bu^{+fCuk)vK|t zUKeOO@!(5dF1N{Wk#WQ#kPFqCs^JztS}dq%7bhsXSYA1H;9=*cJ5Ne~;$pw`ZFq;K z_o|7)LBUJER$igLejqWUvBYv@KakwKu2skR$&CEHL6o|bqvdf7TH$2cVkrdS3$vq3 zNrPs*!9II9<^`8HHfol;G&IATTXZF|kN5b@%W%yZ3iYamwJnh#{nI2A7O z9eY}0Q2ZwPTJ{W%b?R0v(;qd1RmC0im5G-T@t3RP!*-jYU|XG-Lxms4IxAjn2fR50 zcp{@_&=K%uRBdG2%VG+EqzyUWr92&NPi=cKJX~I8-=#FPzgAtNYcGGDd-;w|7ax0@ z{Tc^dhdhd7)V$fYbbF^!bosDm^}~Q+^)-G_Pvbd71jl5%)#XHKMS~jB{AXFux%PQ9 z!e_7j5yQxEfi124sAYe(ym;Ii9XmE~Ruh%2|{FWh2=|0|-fv^4NBN2UXvv(}&vsrT84mbHq*v*-QC2w;H zZt?0@eIX6^7dxl?mzSL0A@Ny#r8=VuwG*Cc$jxcutG+Im`@*`D$6Bu~f-2*U1w+bs zVun_=-qr?C^+}eS!xXMxDq394XMM%?exn3!O@nMN+w7T*kKuoN7Cg%oS4>J1BYGZ9 zpHPhq{VacT-ksjuhZR4(03nM=J$aY?`O?3|?;t0CD9itBzx}UvPH3}Jg`BzB$`365 zzY@}=ud58! z$SDT^C1=w84@!k#r$$OLGYmx|hOJZXt)j-{1TJ=Y9*7uupVjd)oADV+9%z(NVr03Nh z@~QxSNyu0+Yyu=)`0oX|BF%l?jRUFe)uVc!bI>BqTlxO+;g-PzIt>x7aPa%i8i%H0 z_Jn>PLS2O*RqYoNrrt6B&1eI4@>i8-qPq6`l?C3(!e`4wTeE2akV?E>pG7_W;t2;$I!r_UE$z1uX#w#l7~Q`3Gad?m4`2z}E9 zqz#DYDSU7t*r7kLaq2x+wT|o2Gu-SK9ubso=KlsRBQGL+$Npc61(y20b z2;_01VfC*p^owR~3PO{!$KUKqZrk^~Kpi&;mVWi45=UYeoVghYHe79J5~sV>SGxKQ zbEgR%6eL%f$DJHdv<)x-2uI;J7@QX6b2=DgdZuWuG70*?ea(Oxz@`u{@g|(-=9kcD ze`Fhjc?_8V9f;I*f$_7A`sb^BOgXnK=5)yE-`202yA%}CUW#K2G|avEnKr@o0a>oF9*&x=}@*0`zc&FvDn`f1Q1;Q%&7el5cY8stS*9q;8%uE$lSOmhE2bo^?c6# zP7LsjDXeJg7I!*BPG*u4nJMyiF|2pQwQpxWx)~P4Tj?%^3;jd;6V6tWLPm;(fkz|6 zeku_p00v!LYAXv0LrOsp(UHs?ve5)Ar&j16oZlU>ch&z6-E-~6;BlOTRr~6h3j5mU zw^e>W0nau@5=e*&JKymKf$%B(PZgkR!USwp2;$ilpZ_rd;QS;r7rOw+z^;FAeke%3 zGMkuc*n5#*-wT|9K&3wbzwi&v4>TICeyrFt3ZZT!%7~o;RoLT_+Tdcd=pFZrpmC_B zIGk5ET5BKo_Kbc1pozUlGQw~Wo`I0fLPh46@u6-35GuMT(8wB?jQ&T!1ah=NcjzbJ zLJ?UO_{|1fc$$1JV0SDc(smd}EZ)Hh^&KPr>-(Rv`yHV@p~GliJ8HVd&C4$kyy>zG zRCi)9DG(fbv={M0HS*cnAX7r4k&x+6n#qbIal-rD?&~FmnjN$Y=AVH&wLjm8yr;Nq zPP%`dUo5v1dp=HC^}e6aC>&ax8Zq>h@7XAOx+oj9u`}2;|0=cFI?CO^jvNeWeDb3VS9;b7_-Ao@19LtIuGuJ&ybmQ z3BdP)IN{q}Dm=I8dl5!8dQ_KdHO9;Fc#6uhKe0_b`na&IM_m$QEnPw6-Pth1WsfwM z#P0ed4p06>Y1}tp86LDUA5BWL*Ihn8XixDgvsI^+h|Lm{wk z^<2tk@7PkIZEd$?blUDh=hfboRmk=98Xbcd4|l@!lXz#SMP*k<+i5h%8V+`yn9FQVcXtn{)g z@LI19?vUJPrd~Il*1Io^rm<~P<%2D~S0r-Ozrl)YF)b|3H`YPMGQ=LQ%U6!zUsRYb zQ{lq*4&ew!lRP2ry_jR&6G^I=;+HS@wTUTDfx2M-N_mkcH}B3`x1I?Y4{nhkvUy@1J~+-`VgE8W%ICpEtg0&-VvgnvGjs z3-5_uv4ncMS6r>%eppeNZrs^9RLgbxmU#Jqz0Kz9+rY)^^>$U%QIJ0coP1=7H=)RU ztde9ni0{P=by8M&9v6G;s1}n6X`Ov~ znS_Rw_j3ZW6&yHwPBM~+HLRJjI%U8xOy`@%0ljQ!o?aJ#W_RhKA3 zC~t1+l=Q*gS{vb$tfLdMzRi1L#;)r=e~$hLw>RU}V~II7e@s-+D0{o3daD0NFL|%W z)mM_+HKV~oW=+rba=-Vr!u&}b;f0^+EY7mGAgumAd>$8|VrJ`U+Q0hBeBXSzs|=}qsU`7zPL=&u{$e&`C;r$6LG^qy z>LbJW8Xum|o^H{n?fuxyT3r@(I$qzXVdASJ>J}nn_VxB+m}ck5ge}XqeX;Au-btJb z*OhOX`Y7+f;oarHWE?`rsUd#K>i$T3!G%E3!ir~@W#}gy;_2&qevOa91&Tt|-CyHc z7kzh2U9a^Puf3Zd*G1}EsIzxWc+Aa)6>pg>;+AkW+$Gmx7*sK)N()GCz`(bj^TJsJ0)%5k{ z0opYy{*dkUFa#kV<>BG4eJKt(%}@1lzu=_QcbqxulRD^2XW$CBcQH{K*BMT!M!%u- zMH*Qb7Nhh@ip1Ys&X2tJ4Id$Dhnb_#6z2L&^mOa|YCg5Ps<=$vPbX8bJ?XjR?7-1( zJM7DAH_A0<*Cap|@bgk^{)4-qDOT1F3pS3lUF8YQMJ05tRYDz`>838~yCqZZjlQ%W z(+mqXRBTop1nKyGL}Rp|O6XI_VZ$rn_ucX^q+n5sC(+e#=%vSw<9L7$C}Zb5GJHau zS_xg0b?#%BU1;;V>d4;%2pISUp=xh~|KxwUMQW|jzP#}u>{J0!IV1QLDK{bl%Ss0F zcgUtbx16ZR&H>84t8o3}vO}NsB{NC6l-NPz7_1t>Wb2~N*+VKokrb}ZAEdqBqb7d| z{u%9*?-Kks)Ng-cjVrdv0*gv&m{S_+Z)yY7T6f5c(^hKObLMRIR>*aNy*Z!?x)7vw zHk2mfp0{n$nbrr;N);kJcyxUpO(@Yk2_0f~$FCC57*uMWgq|viR!}21a_4*Z5kBpk z&eosoHSj;Ib3i@jwVY^fmVD*FnOKzO8JaRL4uT4GO5sD(7f5g+dLQ5; zj@C7HB*yzGDuD?@BdR~Dr_9aXSM}&>>_M~)0f5-sE@8#J!?W1_8I8a^Ub@56?Xk>5BSARIQ8ZjnK>9J3gK zyN8$#yDVf}93Dia;qFBF@BI+!w=|A2&gv?GA$!D}#{eiX6AJwQQT3HkaWq|+!QI`R zU_pYrdywD`fndP~4?4KJ4X(jGxI=Ka;2zuw?ri7%&e^m3W2UF8t4pqR-@0?_>B7al zj!LyKfQ4Z277 zBV5;_0=$mN@H-6=?PHFn0qx3a;zBYcS;^FItUf1wp@V@%nuLa4Gf)7$&%OEnB(^-u zC|}HQnmo%|%zNm7?EZxEl3n`iC_)gmBQ0Rw_31QbZ5} zl)o(vq$UfG0IVM@2P|BKYXKA;JPZP&rL~-HzwoB&79Ui^e_@@Y)K1@b_-0sei;g7|@dDfTZ1W#0O}si%qDRuD_=o zN&_%Pf@Q|BE!Fn@Y-P0PggSL=|h?F&@A#GFwRN#nDG7}XR^jeri{JmxoLnQwW zo`83nkSP5DviVM}u4L%z4$IuSlynH)DHiww+GK@3!4|Fx4NCjHb>m%rWPAK)&T?*e zIDZ@2?gGE=Mw-okeudwAC~H|(S6mO80tA1fmLOLRdpW6cR=qE4(SCQ6m;{0YIZJEp$$2q{u2j_1q-V+Q& z=u^v6>n(R!v~dl-qd3Vx3KW03JyeUvoyQAlSV*3xn%1 zH?;EqV(-MjV6wMxd}Jn>>R96Wm^`%tCxI1((cfTo4JT&Lfzimm9$Q#B#e8b@X-*?) z+L(y!zehj?5?u{s2l2^o71Y2wyp|b3a#KXQW>K-BIOV7&K3*Dv*PdaHNv}Pam}#XL zntb~?fF?JawYshNU6CcLMV;VBn6DwEgdYNa*U3QLgx(<-q7^2=!)z`Z(4;Ky_Q?-w*K3A+OjZLX`oVD)<2W@4a&*JxuFS6F$ z47~5oRnFi3c4Aciq_?CpaCkJS?>#$|@FJj~2sb~MWAL(!^k~YOJ&SK&nPBCGr}AMs zCft~7oK=0iu97%o7Bvh%U#IXDSez#l^#Wts+ukiXF2))Ze$pD!@*p{>p7piH594*a z9GyNBW!0j+nHSKcqCYvTsU=vUo=S1Xxc#OtzT%S7AYIY0yVQEAUs+r$SpG1VO(>q> zFsAkGK>K87)vDcTyFKt>IeB5a{npFMmMlMX+dG{+;qh>f3*xXCG_llqWf3*HlFeW0 zG-zZSdO7=&@q|!mdmdjcH`XrrOLVEyQBjD5CEW50yY%U0XJ3JFC|8hG%dFa@`v&-K z5Zqb>ArU5H19!g7-hm&la)3RB^PTx=7NWaQzu8~ypJXWs>}}KUPjU{36wi8R&Y_OZ zz)e!6;Bwy9FTMl}W?!1>FMGHc*{}^hI5W+9DDRK%?+P9c20Q50O!96hjk>QSmF)lU z5)~uD(EHJQMA3g6rM!K`w(+`kw}Cc;#a2qYc$B}u0~T(@;!jX%`^TMDciO_WbD{HF z(`eGFnl;@BL2dr*^@huFPq?CZmQe;)ZR^&LyH4EemGU#0!)FyWGbRca;)#1KX-D;D zkp3GJaMsCKq{GQ=g=DF=ONK+aeFe`;T1|1URg<1@;Ll928rhYgKSgyFAK<;z%8e=r ze9LdZ^@o$+a_YQlePT)4c9+Sk4-_K{Zbr^s2v2RmMoqU3cao94a>AtNijD33vrfPF zM&rwMJI7qCRj_tltq@e^9xm&yHs=kcf}%X^M(A9J1+B-0@r6^ac&5K(+$7qlW5!I2 zKQ?G~nl06YqpwJ1$wTzL*p2P9um4bx9AlD!3w)wtqF;{6%_7T~t;i-{^gK1WV`4l&Q}?w|#ijL=e{ByC`M7I;`2egz+|}<{jH_%PGLf zBlO8RgYCCtSdKAN{@t|xS7535gBOWcMfUI=UPtrJfI!e6D+)Hm`o(Cs#vzm087KTv?&2 zKFtQ?5*Twrx2w&5D~okXnDGtb&G9`3PaHwMX1q3c0Gk5=HhTeF?udRNMm3AHS&e!g zSR{GkgwI)WoFM@})gLn%O+)Zyk1+vRK<$q9IenS>!>)!g_=FwEYx%f=71Y-^T`Bn_ zEwvTRT*@GXp+4dEUU^n&fBi%mrZ(ltr93}b)d68|tG<4jVcoL0EdkjMAt>Hu?@ufz zMP2`W)l;c}ovT$jpNjO4Nm7!w-sOlU1R%9zAtS=b86A9fd(cymuWgl2cykEH(&R;Z zmVMgp^}}%R^3p~Z(q)spl%1~JxYF;-G;04nnEmDBZ<8D_#|R$SjKWuzsn340Q?%xm z=ZngAwQ{h*hmOU)xrNHLiM4T&#?+^4mZz`(B&9Z8GhW6EKocjY8=-wb<~dbPgAd1iBp4f0-OELYHf?Rsfjshqs>W*d#^vi^I16$UfCiU9hpFCk#6FUDQFYrOo{wZq*c75`qgh zFD+3%)i{Uu(l;u$X`9<8vOGLZ$oH)Zl#`u|GEKFq-FKp{&VC#}jz4uazCjVxej#bR zxg+i36@YeNF0akTmo4f1K%Q=?viI_>4NJQ2<=2Ae#H`ZJpMxeB!ZK;5g-IdD?h{`Q zA^IY1be<|XLfLmhk2kHKh`#MU@yOOx4mJ9hJ*Qy3f-Paa;30C6r#v*7BCB2-SEKtj z^H)l+dViB;xRbC;CcCy8b_zOCo1id6tWL{Z5-2k0Y9AB(IY+(O-I}KuIvFv(%xsJU5lu&8k z(*ERd{xsY4#_!K6=9Q8boG@PFu(A57;faH_3(dja?L{M@sW{27MCDcym%ELWoIn7w z!t(0z(6-uN59IwuR2eG;>wuX@ELKKs+fw$;oNL`ge2r^5j$c*;cTbV1pI&ZlwpdVE?NT7YScHY z@I&6N5g?yr$*7>gau5euGHXmo6|pDHf%NifTd!%LcFqFiK$c7$stqC}N9G8gbPg%N zkit(+;|BE#QVfCiI!ss)&~M;RiJP}1VK_+x2-uv}c_J3kW$Z|r^L$`GXF@icZl4K}5e0S)(3XCfZ0 z+gUYtQU{@Lf}L;Gm8d;z`0I7PaZpQI_SFKe%RboT*AqB(cTy`Tw&z0A_Dwu5o4wAu z&6MB1-^Gk|(ZsH&NEiiUb5^9H;hXJ`EuH zjAE!+`13fgm+ab{L}3l}uDcbr6h9xa1cRrbk0OtmAawKV$jBg+MJ;0dw#jxSiltl< zYbI3-5r^8e#$=)gjBq`%ccAMG1&ovTwiuGL6hbqVBHmf1h-!_)ZjC1njp#p>k#&yb)GS zq-ee)d78rO!M3SMkTSBL2g8x=`#c&8emFKB_DA{<1O=D=PPF)WCFOj6cmME7ePHHJ zCwt}6Hke|e%M8^!rRD5e7*`-xvV|K`e*R-4w&hGCbfO-|P`eXMlK)TCef{Nej61R9tw!W%$&QiJnBXOzgo;l&%(D$2oZ2MBaDVxKt@g=3 zdN(@PX_~Y6WVjLsw(B-PEb28WL;qHbrM+YT8j0m;!;)kC{$7e3xxN-1?KiioCJ#r- zkGWv88z|q>XBHp#2f>uUc%~697Q9u_(R^N1n<(Xu5Fj8mSV@-JsnqaU(zEZ?O8Y3b zH1PY+K~-AR1t-k^&V(kPIstCk3!z@NpWt5F)b-* zN08b*SB9cHTxJSp%1<(UR8qPz9GtJBzeVT6I);v_9NE2@Um(%PK`^&f%BcjItd$+b zxjt8OHQRr31Ruz1f8uBnQL^B^YRekNUr5XDf7u#Jw~etQG^&2G&(!H>7;<-y8iz-e zH%n)U`oJUQ2E_b^ZI*OnZ<-F z7=cHJE?BF7$iFK&KUF>#)@aQ#zQJizBsfMy_iO`v{~CL~SYfm<%vb^+Ub{6f zNAgmsSo5KFv(b0oaGV4?Mou7Ogd_*~Q7FJy- zWgh5|2dA-4R2|=4Q6BG6e&eepR< z-U-#KPJIt8ao=#5$W8|P%%_|tQ4+U2-!LFdnJKLI)U;ugS&}$Vz$`g}R21fn0BgsO z23cHHW~;v)G?RCc?&`rEw5MnL6mb-f$E)IH)R1C@2StS20Ll zCYGj5f^m((&1&007?iogfA>8xTb)*E{Kl|gv8w3yI+_iu6meTg({7>H*df~LK!Kp* ztdR<@o+Y?mP_k^9qVbH7_;&3)D{wR0+eq^v3Y+~s?B8F&U)C1YhBs~n$s7TNz?F0;=_$CbvloQxL+`OblEw5p_HGi}5Lo-*Y04_&qgm>_W zAD!F0WGMc`q_CdUj!PN6g=fV?eR+Y9*LIc0b|YMA!cEPBb74i7!P)h2E4lTpj&^)v zF?%oaN)1a!)UV#n{W{TK&tgz$e-9~>p^|^hy@q51o6V_C=V9*&D?k#Ot;^xZpzpw? zla9E&ksZ^e${{2D@_DhDF`t2)5{^G5rp%U|0sDcWXGLZRAB*+FK_wuV8!R0nQFoL0 zxcHKY)Pve(*y>y%&u#jx57)nRZgv~$tL?EQWxoiWvg(}M&7}GUmV}&e*Ylp;_7@23 zZGL=hCZf5o@0lT%tX$!1L^N7pSAGHeh0mQR)1a2feA}g3H*K^5sU1MW_OH4{Cq`lw zNk*%)uO=lFTDt4h8O9`>x><2BD;Mig?1$MxoK*&Fq=I6rBojH43cnWi)>?Ft(!rcf zF}*LCz2=yg#(`_S}lS>WxK6kMGtapLc*ZY@t~&&RQqcYe$8 z-;cQL4tuYj9W)iCkEwkZ<}7a6+MiLT+Sm*G-6sz}=yojGRZz3#P^fv$!^c#5!Fnu zurJ8wl%<(AjuIPr7G|F^n}Dp0W0or^f!%z{t()uqL-=q%88QympWZ>NG&><`# zf4yuJU)kbFTJFF zC7irU7w>{{MZQR8=u3N{7*eB5Wz6K>^Y{1upSQ1}d~NRi<9DuMMK26s?`x5+{%|A@ zT0RK(nR$ey{@6zn^|{U0*yv4VnZ=Ujbhl5fd<<7iGPWfn3zcWzD4F9fnu|GKh=I$g zoh%`KUiB<98%ieYdLrooe__BjdBm?8cAl-Vg_H6(5#G_C3x4VM3dO(7Sv96Uv`R{l zg>n1F!WW}5+*cSOjv!IDAC|g1r0PO8k(7WLN!-$t&o)t#NBR5D6|qw2NdGcJY*Y*$ z^5ogq3efMGWakal67|gqy93p}A8d5YWHER#^DvSmcl%i5PS|8K;6bUJamP!6k-DZ% z7PgwikTRa5AJv4;7=|H#>;L+_*HitL!X-c1iks_3V!{@G`P~|yB4nwJXhv313u#ST2GIEFta2{cZEHU!4KcE;Vg75o2)w=wki-O{_a zD!*f4BtkkxYyBoSU7FaQ(yITMYs#23D?g4_I?%9XcRCv}Q=E~nY+HD^ZRh4aemiS= zg`?DbztgysZW=jrYM4Dx`b7?Ef%s**NZn?pkVTmy#YF0YR0Iq|N`RQ-MflaYn}?aO zo=hBu?aT1ZR8KPpG;xn75vos*4Fdan{9V%|IZBTC?gpHK9@XlBI@Q`xEZnjryFS82 zLVXM}gMPj{5KbBv&FIgG?7Z>ARIKxy)}8+e9~Xl3xGYNEhcJ zOWj@C8f%~}Gb!&vf}uof#9BfhjA&l)u}t=lu%s@GYQe~xP5R@lL+sn@-Jmg8q^gUo z^9Azz@qXp;3e7>A>gvrLTRb0AAk0s3aQC+Q>6vmR=~q2F#*Fgp$2{{kk7a`Wy+7y| z+WSS|m17?}d)DgT<1Je$BW%Pi!}SiHTT1DT4OkLrgRy~%oy(4OQcJ^W0AKWSn*TI(D}OZ;2a2hMt{Kn{zC4yxO(+x-1NuK5%jzE z?~xtv9F?)AN;GA{MI}6P$4$tsI8zM|C3g50!QZ$2d2n`Ddz9>DqBOYXu6U;Q9HxX7 zzLyCyxgR$;O(Hjf&!HW1QC5Yv|E7Mjh(IVaHqZ&+Y*sqkEU5dHHkozx^?7HjE|@}d zWXr9UkuXUx{8DglpF(0ig1}}uU~=W`r)_~~irqu|_?bxe9fq%vnoR?|O#|v=m z|2aqbJ;#YWVoZHoSr^$~E-D~j4e8L<(BeE^YM1sBJZSX}1ez0RWMGWuPW;8`FX=Ub zvaEJ-Hh&_O8QIA;wrS)^wQm^MpqhB;IqcQf&g^+x%V=P-h%VllBRlyhK1Y|Q2$uh> zc6!=`O@|mBs70^-O?LG>`&l5*yMF;RPIT>Kdn*T~4JaOE2?rD5_)BJe7o zv09xR5k)8hO3aW0b;~hZ$XVKZa>1jU^dlaAk*iUJrB-G8ZhRq{v*f=pKN!SGbc~-4 zy*ptv);zDKCO?S$W7a?pYuI0=7U_fwse7@r}j+KUjSfpl!|rx*q!O>+OeF-`2X9RTyYbQ(rH zT&a_(!&@n8Y~A&>pxn)+ehF@04>Ng8eztc_r?W6@zdQcbAJ z#+Nbp^2L*9;2qpna^0|~ldTOgNbjJlDeo%JLIM%42OxS({Yl;A9~A&{xm{w$AOWcY z+6V?n7!>-43h@Qeq7@mSg#FcRTH%5rF77$r!pxuP%d@;9q>MsM__mtVuC3J~sb4x-OPV3*8|Ux@56nXBC^#2iuQ`sekvgbE?%;Ma)4Tg^Y_R3&}xJ zJ}iYC8w{UR+l%VP=#d6-c&31bpAgwplVm+6=~8@4mw)Q}V4Kk6%`GeaaNlv>g^KualSqbCvVyMH&UMY&4c;q3#%J_ZTkzR?Vovj~T>>r-h)1In zgzt4(SA6C-FEIS!_|MeX+gA!r_>AAV+&9hrhHr>WDYflVgo-AiVvqFIk?DK3+rr$( zh51b;{cj*`hR6Z`K1&H7{yF2(=W6VqTQ!XnGO%dyly2JB3O60RUwq~_+Paxt{UOVi zXymJj@4(vjMiw~@F3-(>@}4UW-G6-*9(i{B8T+`49q?#7zM!mfl*nhC zkwF!Eh3|HBL3yFF+?_Fa8akf!)@s|oGyT)s8NaAKbuX<55B`mPPH0dkrGe%_!?(_> zVvf94wMy(anqLtuxb1ex4np`@%oqsqyOxPu0-}&OUTeI8C#yGjx z_XQ6QQbU-WmY#)$337TYqvK*&UpOQPNi-}_B?7XvCi`*`;@1o~X{ztj?lJ{cN}FvtJ5nnhw5yWM;$+(ixEbfJ}2!&W_!^grEt zRCB2n^T+o|rM>Mq!CyRnLs0O!H#0r2f@~R);ecO)ZrMJz5~{1NQ;42-o^-=8It*q& zzqT0~yNNW%1qGbp2*zNUEh9vsV-1l^dA&ao4thCXJELfOJGs20@*sF8f$Aki{XUgT zq00a1`RS!;ZBpgHcp1!n$*{sLOOR`jNU!CZdCBnD zJGHw*UDZbjOy zTKhI-#21GTveS0Z=&YqZ9$oFa3c`d-gujy}KAUjtx^#v;)wR-}p#@T(on|lIvpb@= z(x0D;w!e*Tyz)bQOvos}K9UHLBEe;Xf#~vHy+xGTnd*ju;Z2lrPUet%PM9tIHRzEW)blOJF#aH&mKN(Ab&sC2yP4mqpa2qEW z2})Pr%(oB{g2!(s$2g^9<`z*ghz&JDR%a1&iH_qlXc=D~Neo^J^m9Se`&fKgu98|+690}_ETS{DY{(0C|ov`*R zb##@4;y}+MQkdBa7_Zpm)T!J#^@zNGosRQfCECsQdl%-1;+klD4hOZNy}vS_h)8V% zd<33BK?CE_KASn1QQA zS5DAucD5b5S&>~qHAPPKeqIOd=XJU+T2Oy}fyQ|_GXZUci3jfq-aq;tvu8}lgkd4j zQ`G4cMK3gpAhxTEM+Y+KexE_~_|{h}-#N)z-d2gj<-neYxRHo`xyMNbtQj~Rbc#Uq zOv!|xL?IAUGF_-k$X`=3ap+e}2$vaIC=R${-?2llj(&gqC3n<(he;P$5}q(4qlH?4 zT$z#4fpN?}bn;tlJ9bp!M=3MN894JobR*B0GhZ9e+jh7%2CO3{Y)ry=sb1`iJ%x1vbURnkdmG5x&M82o$u@&%e0J zDS|kbg9fXI{)EF5$juVoeppS#F+3fRL&Xm-RVYHKOKT7%;!K4))nGwPR0pk1^H=CMvu>y zJ;IC8mt2_=tMeml^8@J45qZ^^9dc$)MhKp>li>7bBG+6QrCWG7Yxf5>dME9E7`&J z2wJG0$AxLhO_K25!5;eCct|bd^i9m;0C^~y@4eF)ZWwtBv=hw?60pYwT{uN6v=f+S zMh^cTr(DDdX-De^lA#Fy&bA~(%wB4_AW|%-dT5hQ#*&pwsujpdQmgmFq4~h$LcnG> zA}qRr(%30<$z5&V>ooj}lk}-$C}U-hvCt14kGr3@^(28>4>uNj-6VyJ4ip~`(WhMR zE<=I#n++r1FbyDq>OrEC@d-p>Lj=P<44j8!bOfZk-gP;pUE`Kkbe$G1l#P zKa_hDyH(`JjP80b z+IOBq&K6EixlFlIYIqjA!4vG-)dxQvLAn!l^K}q%bLNgpue_JpUhPNSnv`}SMg!kB z82$u=(*MP8W-ZAMA@`}mXyDU~$ym}Rtl;x2?Xe|4{R$@hNLXknq@!0y!x00`{ zA>Eb7S#)MTwFS>@-MH)7#q)9|#_jd+yx2?R;PEp>XW7-0@a(fKM@$+g^@M|p4;eF? zg^0k*UgGS-*7f`I%jpM-&Yr!3uE0Wz`KI25VlLcdMqGc>@sgDYp?MHz9s{oMe0yd0 zAz{J1Qh)bhs!mH~H`qGuZUs6@>&J>6oD8!i4sz7I?W_Y6azR}`CUTT=vA8`mNZ<*3 zL5(kKSBU{6pj}Msz(}tQnQQjBdatbQV8{S!mAOC75Or(?l0@;!|CWt=vwZgya_Lyd)8@Hm&$I#PuZR8!K)2TCK#75IVO}C*UIU z9_DVsV&xZVzI#O4y0$pf6XjJzIQwEYJTjQ39|7J3tIFR$eEYKL25n2lxXK##VWhC8 zO{}pb_!sLGD_svOrov~|e)h;uTAI@wBnfir*s>BHk$S0QNOyAb1LT*|5l(4d8V8cn z2z=Z9AL)9k7^VC;x4}&On`!(XDri$(FMOT?N%K!f9qD>1U@kDRPvBwCfziI(QV3Y{ z+iHU3JTj4k9ke4Q>kW~p`APG2O?BjJQ1p|bn~?gIm3;feRY|IsAwd<6>rD9f8ZoQnyzKFth+xrBI}3iWF!=CAl&L{p}Sg(@$sf z4JgycN&huML=#a+yJ%=)zyKQEkudluMB`fqj{F8?)#%sE0Ox0c62?5t*Zw&*U+-Ny zFD0u2R4x{~iw>0|t(ZX)v>1&^86%S0;e%$auJ@&;UYgH-ltiC#hZ{~i92gw7pBBgp1+L8XK4vWy`JN36%CkV+; zrZ+sEkOm2t(bLqA(^EFwJk`(g`j9>#u#^`2NKI~&$S2(m3wsqGmB4K)Z9(l=0cz63 zl%PlageIIy%M3c3pI44$kR3tlBiImDwwu$_wl%@T9ZMo#Z!@jhmYOfMgocru1?l@h zlzn~kkHpu;I(uP1pV z3zVR?I1{%Sur|OGoFJ5@i>OER&#z?JpEp~8VcJw)yWy%Oay03*;8_M6( z$6=X@hj?&cb0aI806C5eFr$8f;PB*CSc@cIf`6luH%&`0NqNW^iiWjZrDFpGC>Y3b z#Ljet6ajQdsT~72gQ-`s^HFY{#3STi(GT;oHI~J~(QBPx{Qre?E zaaJwD{q>+Z;Z-CncIdfQA}5&mx`|GYmE_q4DFKBC$vmYHg6rS&jRtJy>va=BNP+9R z_~rm*KI}2(A9gRTqtFJJ`EjOKyVLcY1!<|v)d-ez13wK|Lr7sVcRzk^hDqO5QUP$?6@PV6reS4MP3S<6X^yh~$=ai9ZKD+05jx)%w&UUD_CIVKA#o za@0+fear5P55-8>yhSzOhwN41Ka22)6WEs9BCinT$&YI*s1LSwNkP_?&_m6JWWUA}L=p zI;CE*1I8EHX2&9pl8GB*)%uE@?TCs+3OC6&uL?W_5)}Y_s>qje_yE$X?Hkb-uQUDL zngm<7YFxCMx){RVMn_tfC_Fz0IpWcwNZz)@E|eF#F(p`{~xw7mt>l>`+5s z&yqP#%2ORP2V!CHL+l_q>cd;~oAKIx2i{;rUxz(@&DE=-qkW0DcaHDX9}O=8@0N8fiN&<;c(slr0-oQ#c(pgU9srPk?$(r;3Edv&Blz#%hf~w z`P**tndqkY*eXG5^{MNswwEi0)%jq#;QIc}u2;hX#{S*pIfd^$o50jWE#HZ_*QBGn zhvDgN=-p$a;l_E)MweIr@eX2)?~8Dq>ao|x?%Y!y!FliXa5dYcr{i6AyZ2i)n0;FC z?bZQf$qVl+SWe)q^CstQyN+1rDR!}qoJ|Qx{ew9P%=?qQdm>7s`O&UJqvz^88+`Y2 z2l?(yMh?E#-@c>Hu6pr#JIT*7HaJ}{4m#a>^<6yLvTnI!BhozQTG^Hi_$F#UHyC|v zr49aSRtF)C?4_t;u3qqX@Oa|&7Qv+~Y;w=NaeeT5=9xbz^6g!Gy>K5Gkff=y*>)v{ zK+)Y5ol5VfV9>vuEe}~Qoco+)T!sG~T@Zy*Y=_or{@-gVqYLnwn){a&527d~jS8-) z-Rh{&CKvOI7IxWpc~G0FqNTXqKS!ZYM71!NS-6f`?Le_sJt~95e`P0(8m#_$Bp3`f zwti;g7cNXP1G!&e09&Jei|914Ge&-<0JcW`=@_w;L3s8v!$3h`x2)e}k z=u_6+@~ZXm`(0e~r{3XR#;1JLKsK0@T;rw?)KEx4cdhv{eT z;d?Y-=U~k?yV{O{RdKL(1jz~RNrG)uO;L1V5D?`3o$owY%3|@8!yaVxD;2CN>={YV zZEgJ3(jH@b`-fBW&&0ph5noDovI~&p`a|IC9ywer`oCQ4;$9~Ou65t<5kO3r9BU3k zTu8tUY@cF`4*^d z7o;hmqF4AqVBV#dmwOyk|D_lV5wPROPQTJra(5{?L@$srLFNj>l8NqP)vw#8tUiQ~ zFoUY2+-ymK-=HcQ_^LwKX$di4U-L>P}>6wxeU6Ovviy;*Gjn&)YYStZn zhOE?FnF86Gx3~wFzr_?7@)25B&_q@vLOWK_gj@=kvRBi2HO}{uXIjf7)a!# zS4d`URsTec(~1aEg;cqdX+f<(;J%Z|fh&DF?4KkY*qOP|q{IS6nYI+;@+p63j^)1r z5nqaL;ajVnQ$4cI!F$8adZr<=h3^wTX*gCCmW(BJ&}8l+ilkO>pe$dTF;vsRU+I~G zcsWL60+o1;6e}1YQ1-hPtkX*MHv7j6L+2(h;_0vv!#?)0aY^;|)e$5jec~ZkU_^^N zqecsbr*8!>db)+6XW4|3Gvvr%70 z9d`p!o!k!KNEN@QqezwW0aX!=k94Tbnty0044%cK`RbCzFpCO4UxFu)u%Wt4g?K!b z6KAfURH3!0Oh2Va<(9c25(OZ-%$X?3!;TzPRN_hHR!u8Yc=^q%5`4<0!z!^6$~40C zZ$(U%h?*ik(%Y@1g?6o!mq?ll2^lvsmxnzvH6Tl*gm$$SK74cA(*n$Mhf~6CS?WS&jqwem1Ka$mjc+NWXn;g6sT1RXm{Y; z!w=S}ixlz#=b14H>uF6Xq3`g$srdB_p0iOj;|1H`L<@}aQ&+HIvlN)s-o>*AOEk9u%{g5t18daBL9ls@o1FX~4X zHB=LVgNMF!TOqnB$OGNi0$ZfRM}?T|2hvI~XH&J9IdBwRzcye3ICDx~3@qV%detZi zu=M}{-G?wSeGGg8Dd5(xM*rO;mr_p)Z6_Y73nE}oM>lcoA+Y*Q()}j@kx)strg@Xq zge!=#0N@)*;3z;%+0+P$9d-bK4$J^e7U?(b@^c>f41lZ~Mxb&cWKS=`qX#%>G1W{d zu8u5Ya`1B?Q~Xarli!pJd^k$gJBe8$TGsHXT%s7p?*L>RLtOJFG9?!*A(xJLpBOAH zYcn(=8WcSf&_q7}`yQ8iUML?NMkm^Ivgmbr>JWO>M67REK_Lfug+owa3CZgkd2Ihy zdO09QiYffl1aB&>b`#X2FJ?8M#|DRvnGT!*GN=c-uWi!7B&H6;gGPA9qNWs<@0L(A&Q#3+oG4HkV>Bya2e7wiGz z<+Crr*@T|haTgL`#rj;%`WS{!y*d{}%k|jM2q6iW{>I4Eo1FF5i_)0>jaa0tB`6}C z9Ew*8DHgBTd$8ivnpmJjC%scr--B3nFC)1z*1sc0nC1rQ^aOTQe$7IpY8%! zH#sAfD{ujLIeasP55T;ZE$C7KT&$v^0zfQK29WAL9vF-FNi%}{CRy~-0eNFxl}>G! zmMT(WHbN%d*ZPl4VPb|D$fEc?a`4o-AU5EPLLv^Jo{H|lCI1Ccg+ov`07A!;yM+P}hQu3p z?;kXsofwjTum9u}d_^KKh5>)AxZDpS%Bdhn6HZk61_p_8ja(2-nAlQKBU8B85-c)7 zJzP#tSLNm_x;H$+oi4!iGz)MTEI_bnJwP%uwp;)ao3sr%h1GtSvlR74i^bXF70sS? z+--Sb1n>`mbUmYjHi0rBc)b`Vi~oZz#n(M9Qf<)x;OQ7i4$81_Xt55yb#DgL`At~8 zN<;wYbEs|_|HJ?)5GDJafMf-#GSDr4uY8ZLm?cP%re6eYis*Tq4iMF4+~8pYSubj= zfFI4`ZJA_`J^_daQANH%5%3xO1c^!TNjICCj93f+7#+Z{iA{~qsqu~w+%FXDwtoO{ zw;nU6Bq=Me3f^A^ti%XX`2-eUg$~C0GlPhTP_5tJ2jasXv@pHjgEquLG*AfQ*$?cF z748Wfx2l?!qn_dp?5?DQw&O%J07gdydj=cNl~-1Y34qg~YLZ3$GeQ^;xA%NuQXl#t z)n6zGz;>a?TB&h8&4koyY>P0mN(#GB5P#Bo_J3$|AfNYrXcz*$lpNmxy)k{J|95s( ze<}mC4TAk5F)-^!!d{NcYjvJDuBS+SjhNf`>l3TM@HM+x+#mRZF&aHjYhD!LqlBp6 z`Qnz@w<-Tj6F23j{{ZJcs!>nP%YyR?_QWj?gy6o=F936x(M1Lz=N1B1 z@FHiq0o`JuvVKQ7K$UJ(+kBVxfY=1^!oH7Bnw{(*>J}Qwp9X*o6xsi$Gu>M9z~h9G zi4HL6NzqgPfzCB-HjB?T@>ny3|D~Yq-uwm6Fh#_&9n_5l?zXJ?G?XA0fH+P8n6F9I zzyU?-`dS=R){_V595^_50%SB1$sSEWH>%vUQir8iLlNP(0$zG7ulvH1fx>ASMAG_6 zcEWUBOyJDl3uPTzM6wk28(O{1Jku}$JeR~MM{?vBx|^12hQ(kbz7>FY&!VFWOl^}B zw&ef}j5zXhX|p8e5j6=F2=;B{a5IF)JH_0w|4@80ut94CUux%TQj$c3;^2PKU)Be$Ob%&cmjUG8FpI^ zjp+cwNe^`WVUzPKeqlG12nrHdSOX|5vIwqZ<+OhwOk+8t?0{d8`C4UbwjN6ek+bE1UJMqO^|YTGr?0-Ah`?K>Eu`=t{#=;! zzY(KdA(_MHNMHX1Xx(EuZAI~KzE#ESi6lLi_f}LOa4s)&{7w*28lp(=dqjVlfXRzt zacsw3ariGX@X0@EESR>K7{gj5XszZK@1#CW8G!8tE=8mO8unx zu^w!DyA?XS0QP#Zfm1zG>$st58>N@5|Nypb4lY(sP@QtJMU3$&G=2ISQ};f>*;*`?eB*EC%(}4!IL;5vG-&97h#jL9uKd7X+*9KH>z1Z z)cx|MH_DV>IvvT2Cf&i0XDZ-V=h)990ZienI3oMI)zw|%kGq}^FU=;qydZ~T;rlZS z?wo~<+M-^t~cxH7U1~V6WgIhfH}lvxA(yzp(Qbjgf9f5<(&2SYCBf5?Ea}{X(-wH+FG=-8**(7X zpIir>>+65)5Y!(pOs5eP_Y!!n53jWQbNrC&#P2W%C`K}44q_fL_tS6D1zY@cFpM&8 zQa^PZj8yeXt-%FBcE49I*vv}@E?11+S-nsE^Q|LkbosTbMA!0&kad~Gn7698e#!24 z9&g#q#V0$i{X!0Tw734~*Y+Jrv_#^36gCw2*F4^9&87gaqT&@UZ*B9*r^hzWNl&(> z;i_k|uE#_ zEJFc>KG3sT_Hm889Z2AhVlb1E;^ixHVKL|in~+a=1t@{6X48bnGArV6jnar^+)njjGKrM z)C-1L?8okxaEly~;!!U@V1aWkpo*M&*wxs&AU5PVp#jNWnq{eF3zPR_yLx=HcazaU z1sk;qC(;t%?0zSNXi2G@P6ebnn{j@0F^Lf0jj9|<>eakPoK>e=|L}7h!Z(zT8R&uX z2XtkXqI>64MCbq(X(w%eIXJO~whqKmm>kz~v8y39SNcC>y>(bzKlI>@LyJR;OAE!_ zT?z$?ySux)UR;V59o((ByK8ZGD@6x)mv{Qz=lAaJv;R%*O>UBt$Bvu*UQt6fIb9T~JiAXh_bnFRezRz8- z{?e4b=tA{tEMjXQ&`D@T%HIY|`n z_%M-Nk*mqnqxqRNI6QRdkF+OHFipePD=y|G(&S$I>XR~s+E*354$nqwEVZ>k7&%e_>-Gm zPipa8W#M&kj64BsI`U zBU66s2auB?ijv<3S!?MJ<<2`yJ2B&Hb?W$8F`W7ZN9F~STpii;t!tBNRf?o!@?4t1 z|CV0%b`9@Yb0WTb_rEK&?E6v4<5UlBib|rL7;(nG(0j}xZvy5jJJhXK3skB)FE|j= zI8oQ@$5!>t;|#aOMUJc$(g_QZVFnZtW{OgwQ8WmbqP8l+ETi>-hD zUTitP$;P0POw!gQ%U&A2EWd%pv5N)&OJQOB$iE}`Q79rZPZ;2Qb+cFGiq z{U_8aj4$o8G{-=~pig#h+c@4{AzThInPv|536V%dgNqEZ>?);}pZWxMjDB*TwMFrn zKX#fUNGg_KYT&6rq@sNNIT1(-&g8+}UlWgJMcX>Yx-GWpp{Ck~M|lQ99ZO%HR1YKfx=dZX*C+mtJH&V)17CM$s03V*6BPuB@Us4s5;omv9g zsn^FF0l^}1@3d6ckD~QL*yI^P-kP2+M7iL^qDz(hr}pxL`UB$SnM+Z7M%#95@6EC( z%j1dnBXZf<)k$CJtwY;AH}aG%HzLOW*x;F>LLXVpx^dV-DCkQbq6B@Ojqit+E(WB* zN9?0(n(jc&IK$_-7{oDN#v3i}$X}h6mD0=gx%3G)=r$~8J_2xjTH!9`$_C>Wt$)eT zZNA2!bKLOmzV!|a;T}C6e;^Rh2>5PbyMv(To6QSL!J@AYQzoC1FLKU+Wq5qS4#?S1 zT(#S{8W#B6vS-I8=j7@ff*D+Q=7YmhDU++~ z#1}RS1;wT1Vu_YtYs8k<-nINZu~p>Esh~-B)^gkPyJ~`PEMA#xi1t7=>i9OH?qcn7My{T2S$1*9;qbPHhBSTmJWydI%t1^17+Ju^qI} z`nThnUc&5`uJ>J*p!6?Y-|aH|xmo!#OHWbH!uhCZLKffGu9M0QMU5U4Aif*eIFf-??S1b61RMH%%6m69`!mw+XySc`tq|Ie|dpHd5biwP1oDnWjBx(@_R(K3R}t;rnM<#@g95^t$>*NNGaUP zeDc>Q#a-dZ7=8cMcRY3uBKc)AyM@c@)B{IkeA(P~%+1tPIt%rLr&L~Z4Mnwk-w}zt znsRg@)~cu{uOCfS-1&r^!?h(9Z+UYL!w|IXqv8tj*=|de2OS_VS)*;WxnT<*2AQ)6 zvRP16Mh%V_Dz_4^&X27IP6yOY?pPSK!J`Y0#ioRvQm#k*wuMcmbg#7)9)m;C+UJ(( zHEK4ij-`wHtrhwVcRoJcVGlKS({D?sn$^y$kDFJuk#f6_0e;Pm2SCGmHn@cPY?9(g zme1g}U2nWo55OQu<09_FOJH$%#C& zZZX4+7zh1Wm~~6Ur2MI;#>M>sQPbLp*TWGyRipT^aR;{&%V&+Vfim0Uyize*8QaOHVJ$efGgQefuDsOueD}cZ^VymX5xVw7hCB@jYgypIJmtF@4&ybV}NjUu;{2eAT_Em0i~ll7NF00F-d;okoJ86g+XxlU| zjVm+hY4mv;)x9dDy^_p}COXokdM#SjWfpa^<5+XL7Rgpc%s(Su4pGLaX|d2bgJcVm5r^@^WF7M+5^-H zVB`LX`L(*oX8Q87h>Wj2ae3f7-|E=y?zPJox9=`SbHtM@WG5xEzMHqD`VtR3OelN% z?aV2*sb~KT>cL4*L$R&>_G+iPvDOH;6Cd9Rr%R%nbmVqu+~$^i z3~)zNrFg-O#CPTQavwv$Nm;3S;!l^r!#2FokoK+OUwgeu5ZcT1&*w%Gar_@Z6wHlx zI+Ye-p;l{zx?Ss*=HcWwauu$AN=pH*Xp27JtH{MUsf77G>G532theb*o194#qDPkY z>wDk65oQkVMa79V(7=eyF+IiyV%jX+^izyETc=3`<`rub8oRiMF-NF2v;Jm?M>leg z7;mN?@hAe_*5y%1PRnFWFH(D^0|9GQTUI@@3+E-VIt;avPhs;7a3CbP**3}9PH7u! zYFn#=gHu~n-xqI<`jh}E-L98d&d1Z$H(HUhPsH2klb%dTM&L^*wQ9ELq_668@ay{%x4Yj*f^M&i?h2;v`xXlpF^9k-YJ$j z{3>tGp^t>$6eMz1b7rfv(I~_HCGimSajFl`1CjfLd_;|E1*P6sD5Xa`g%#jQ+J2UL zCd*|EHqkPiZBRH%FCYdDBzz8PpDF1>j^?M)+JeUot>UOnP9`P>GQXWAiGM`#caA%J z3WL>v)_7)KC*zd-J(-A5HFvQ!yR}Ms_6Aud(f_SXve(yjRsiSD>Q41xhKJaKtPn(* z6T`r4lPb=jl)jgM+dl8tFJ73j9a%HF3DX#RL_ zNa{ILbqZSr@@F3hu)mfmCq;a38e_@8oq$JbmHT!B|5MKxs^V+h71>otbTT+p&}?qz z*_@%#9mbL)cNIf>8IvzMA7}T9-=;n#;R@F6^yc_Gd12_WIC&ff`2|T`$SEoHt)|#A znY`I~ufcoPY_z$^1sw%wZa+znoW#0*$nuhIE*ebzvT%?zP(K^6C6(vk-+6A<{PBaN z@821571m1ca*MdwTx{jA9#9Z`Zuk{eqmlu2y)8Ey=W@7xP%16xqt5kd5DT{Lil>z1 z!&RWHb%D&MjyQwZoeGkZP9izUZY;Z)MXtpN-S=Yn-AXAG5vYS-eknU?Oer~0V-?J+ zoL1l{$XZ!$0POyf;H}q}m)JK8uwf(V{&Lo&3-mgWaYBFfGMjit?zS*a;l4{7uZ-(B z@-pI?!hZ&Mz0FPv-MLV3h)GFbpc?l_P4kHN_{28Wr$47VV6%yN7U{Ene2$pr-+ldM zU-&MB>H{yev7|WP%`LClakfcheOk2fXx;Fo1j&a_fOB;lCsKUa4s}J;M=XpW>D&87 z^i9Bha;8a*;tS3G7u77mWJN|(C;_Wqsb=};QCeD29j9#TpL%9dYqv_oVutXg1sc=a zzml>YZ-@GZy0LkPWPhn&YRx~&oDbuATT$iJM)_ zvCVMoYf8tAZl&wyHoqWJ{wI_Dh}X;7N72TeaDYO~YQ>hi)Sge<^{8IGPT)xS2uzYP z)?DbRoP0sY_LohQ)`h^ulz2&X!TLunjN+5W??1!``9*osyr#+_7I~Q&^Y!nHxldwx z6btj!Jih5#%%PopB(N~TK5_ZO{YmzxdbE3=rSgGN$AH9_x%^2BP*wh{NOp`qQj-ex zua9sfin|1$%v8uJkArd)`#P1m4dhMPRrSRQtqW=EzNFRaizchS4;JgCjESS)u`F-J zuw@gz6$Dw-%IRIXE_*uXltiZA?YcNm@*HT!2Wy>Pe)<#*l^@Mx_0i(&_=-_6|HGf{ zT->4I&A8{U;EyDVRBR2&y&A3|GZQp(4gHQ(1=F1ukj0}0C7^i@b9l$XRlLoIIJ23T zm~ufWLAi~hybw#xbVYCthQ3y;li03Q2ghNt4Si6i-gLk5mM?wde$YMQ8?_3XrT#l$ zhS710AK9~$9?RshO08-{FRfu$5R~Dom!!~8nIh4`{{l*GZS-B!<&!wcm=Z^Kk9oY| ztI&2cpS;FD1Ja&R+wh+_+=VB<+qx$(4IyenKoj^T_b zL975rDkFH|e9?pV9tWihLvG+_JY9xbs<39stmEiM0(*$?4VrVSi+|T3+lLZ%d6&zvtS7%Hbj8mfl@?zUpZbe%6D`)k-H89R|YAUCS>$yIVkRoiG z-DM$E+9IR33;LE)u~pRa*_)g&c)EAE8{lW9$RmkX#N>sks`!oi7zHJMB}R~^%iO~4 zwawW081q3T$$D-hoi5Qwd)SA!rW^Lev7EM@@6_mrq&KM`S#Hm2l-mO@FT*vM`(jY| z>9fXGI4C58_zU2Zj!(jXbX;Ug=a;!d&G5H1ttam}Kb=&SMi1R{@&c&4D4tbPn_MjXz}**y za)(=v#0$<&f=!4jug89Kd!HGzX$j}FHj2enP#DQg2%^p;W(Q!1Tlz>bd0w3Yxc8I~P87^)xMf9-i_|ICYZK62M!7gI zaT$&b*+lfTvm1W-1pnRW^ewIXZ4z$Ac}qaxmM*r*-U;|+r})E7(5<=Lk(68%{%4X3 zVlC2EeSj_TOxR$>&+@{_(bo&n{bqMa6|+Sj zvsBCWd0$TpQ=6p0m8B68C_qKB&7!yML}*Ps6EC5R7p{f14f~p;Kh|30_5kmMLq&e~ zKJkaF!WS7V86`C}*q*Y^|njN(D1p^nT3&^zfOXv>q=ib1Zkj65HhUL6;;85Sjwe@#>75b@c!lh|a zXDvQcUICvG?NgXWP+O`|-WN;uiv;)iF0=RTTbUe7(Vvs;hvKko(qv_ahuKGI$~Rm; zKR@QJ5Am}-LX_UMETt(VK|iPpacqUz_jbxzq&=QjNBgo#Uhe`xLAk{EY@2{;@$N;{ z+nvK#vBJ_@{p$NpS2^%d;$IqCb04o~a8Hr4lURzl-^uUXxHcuc7x}J$rpa7lnRmd| zx&8xDkJ4}UVui#An5r;o!X;Rpu9u4dPSa_m2a~?XHc^H`JFD+f*n>LHL)j#qZ)ck? zxB7nfZ1oQpm**fRWV15)+tCC*hR^sx5$JnX;bPF)Df{{I^#acmPWKT!^e0aD!!uu_EF+G~5KPUm} zjW4wFukN!ntC#QC9+`q&3Nf&=0^fQGOgYkg4Mm9@U6{c zEYoSN=aNh+V;xUkCegmZPPf0!KQm9G`|C`|pp8FS(Y}_vRs>ljtdgGwEIa>-TxC~0 zACBs$gB#r@Tw5ECd(=zOGZ$}HR+fRL$6s;{w*hN1bh^3prdkOq#AE2gsua!QwxbKd&xsFOJbGXCms*J32G}x^zzSN_l`T0%J7=CGk z(_+5%{QQ|#zL=UtHezD>R-U{o(8eNdF2ULD8+AL_q@Ex=g_I7&Gl`yYEN2O@xG^-v zS#qb_Fy^V@^bT7ohpSeL^SgVoKU&LqMopt#XCSqduQhbWXoc_zxm=fyT1(jfxFSf8 z-g6V&pRE?UqnMWme;~9i?M7trkDb_b^Ks*$kl(i@x$8QfoKvD?5FbCS*?IgWA$6VC zV>FZ=Hmw=xikAr#>r7WKC*J{4XTbe7I>ZyLYrRKLFpkjSU#89Tvr%|uspr=ji-$Aw z=acg*jyKutk9r+`OqKkg8}IA0!d54)kIlZ_t9&HNhHwXKkupaW51XhK8k0K$Y6qU4 zA#`GC3sX@PyPk^IDb8qa*~2LMWDORRS~zK9tycqy4m)rv{@o!};!8m63YR@af1>(* z6`{wsNQQn}@>qtzMU3XpBFFjMJL_ms_HRxG>k}n!bHs0zJBvIIZhup8f6CkawKskY zjL4c3ami!U`)C!I(Wr1EY0afDiSFVcY$}WQkc8%O^b^5pHcfRATYYM#C5SJO=6 zIp=OHLL9sN4F|&f?sX6Fvb`!q_)5BX&Sfl}13TlUo4@=Dg(hx~i^XYPZ_#~y37-qG75yql(X5k@e94y7 zSQ&-6f2ry@^BBad*NKzb;$xm*N^fx2K9Zp3KrftXO5TawdBp%6!+f%KA(l%dlgyg( z%0`Yr%K#TNo!+tC)!$}jlQbK1dO4nsM-yhY@$c3xRp%Q`ePFX+bcAB0QlB8`xOEvp zYW!x-5n5RPwMgv&FUg%qe2+LRF1ZyhDa#D;~Jy~F(rWr4X zgEUW+G%@c{UpBX2LF-zM?#433dpa-1A+1j0Vh^CS`$Tc9jA*=C7TK!HPHk1S+K{0c z!%rUc_KN>>U*kXB=W8=<#=amE{*p3#P}schYB$~tY_3;k);g0DmCYxymGZe`EvR*L za#eTf8&*OQR~Fio=DHHLSnD1Uw9ti2hb@>EwJqrHm){*!Wu`gb#C|*+!T*@aH$4B! zyWb%VM1R)rW^J?}cV{5*C3i1meq72Mw@}x18Sw()>{?CC3#paRnX9;*k}N`=dB@^} zP{;$4`vGwOtB9TdQ^fi*242$+iAcBqCkY6ra7$3+ZYeK%t)T=xdM&B9;OTlwhL;+sZsnX6;74 z7$3(za7aowm&8WP>mGZ=z`NTa9qH8?I2gq}@>@63Yw^DX_0((x)|C4e*^74!UfqXu zM^D=SS5DPxMrnHczE!2=CY;jy3@el1Hn2Cv|5ShR@gU=d#J67Ax$?C}q|ZsR>R?Tv z@)lA!KGhCWQXrslWZ|aa()zpWEz%2Cv#y@r(`ys(y14mro=qR!%MZ3CeDnYnmB*b} zDL#lyvYH>24!@JnwPl+N4s~9}K5SB4I;DNTw&3m~Xl_B@Kx3K{c3^>^Gi;%ReGsl9 zUsU!^Rm)Q`P1W1zeZQyQ!SCF)gM?92lh$NKSDa@*GPf_v8sU$S3%M&O77vUy zU7adhm;++hJ@j+DpEk8jNshF9=c&zFM6na8>&bX@dAE8iF+egc&3U>pe~S6YkC|2M zZ0#ri0%TBpZFU|VUA|On{DO>o>!~E+DbHVQI!f-ufmq;EnOd&PII870F2F*sPfY~U zbylHl(c;jTVDa{`eNZ!=m~Y6aOwMyL*(MCs{}y|WK|4Q|AEBllnzXxYfvCr9=4~7A zI;@!faqyU9oVDHNNzOLFdZPdVPot}epRJ=&2B=z^F>giT?_=%PFq<#ZX1H5B`RWWc z6`AL)tbzd5+Diks%Yz?~#wn5n9{z@6xm(B$fqfjfqLmWkUvMd2E**WBOKbeoHo|PA zEKT`8f^>qin8WeWmKCT#8i3BRJm*!2tZmO4r)6t9h0gIcyW;R<`8A0KWimnm*!kKc zLe=Z1CYV~-&k&ucZZI4quy-4D#54}($lnDo=yiwAJ@_|TV3en*-5aI71tddz>VP&WL2J3+O+$f8tJj7aKQQxsh=@i2*d;Z zXSOnF34~!8bJ`;MvTLf?P|iVsfVQ}yBq~9?rSr(d&$s^7nouXcVDHTwBjnV)TTcB< z+|*m5TH-QG*zCEP1ZM|xg?8BJ2=fW3UuHLUIXQ$FHVfk&FkQ4}iteXjpD1y{7r?_S zOmuH-gd!yfer_^`dpt#zH<0^QF5jaogcN{e3pko-XE8Wa=>ros=etkP^Xc@hsE*Buf=$84 z&z_}qvJL%AqRzpDynhwz20kO%rQVw-V?E;(%9Md(N8QLBIpmFS)48Zy=_6(Htx<>z zO2`Fp$ZAEwoh{ZzH>fy3Ik{@G!T8W(I_36~&zYPx_Qr?eJRyo!>ehi@pE8K>V&&G# z6q`1-yzHwY68N*)>%XrPBO-}v@<+dI6jdbI>`S_kGP{ey`gLye3y;#LxCiRmi?{A9 zSoU=0w{%yiUf9A1t$)Zaw`C2y3+ z;*@eCrv!KFgDYWy23|W(n-@baCLX|Hg5@5u%o0TDmnA`9Nus#_-W;cADWLAo<>bc` zcsP|w)J5mkK&_2a+OaC^WRN2M^ZHANIbuJQ1b#P5KP=l3i0Y(M2Rc;Jr48QU*3@^( zGb)ep$+&j0zSXtV6y-*MJt^&sl^RU}abR}mn?D`&^nwnkf^X73$H$uASBsy`Xok*-7L;5s!hv>F5O}RL`><_|*5%pjDdf8II z__bJSK$bo5dp^m#EKa%1XFn`P@5b{4EbFajTsJqjK`7@6G3|&m_Z(jnPP3;z_V$#G zhgM`Cb15)_a#lXqIo*%#jVCxE81NyUU)KC&zsF3l2s6jcT^)QeJmGa|cg*o=YB}>p znBK_B%k|a~Vh!))u^93(tTp^RLp<4DiQ3SF;VBFJ1^>(rna)>eLmtI_@PCtwIr&t7 z0%7ROGB@h$E-J)Qsw`f&U(*@*WP(WXxIjk8H>`2{rQ`M%yWb`YwJ7fA##ljw4T9B& zdpEA%+zj)FT>Vacgle`sK=x{?*3E{ze3mqR{jWHq`!_=m2#KoK@0kL-CioQamdir) zl8phE6IN&9A;5viZucUwLs6Mo_*G_Liy))Tn( zb+s%u5QAN2 zql;u)+K#rPYOkirHa$0yfUzR@JRhvUyAS3v&kCCgSr5Lb2v%r?Czn^7xI@qF_|}GT zsHy+xm0@iRtKDq`tLsjJknU4si?h7(!HJ5_&NVSZ3TwjQY|}M@~YuKwuG~T;=yVebv^p_+r$p4^cd65l0oeu0fMz6GJFD zEIRM54~*I=doYg;MvSG7PYjEvy_YOq(D2wDS8@Ur1L_9*G2IS6#tm2t^`cE1Yql71 zv<^%OoOXs0i|# zjySoC>S@2m*#HvlM0{kio}_(Se=Xy~EbRLCZ%utxa-rK(N7h#O2j9dzXjNRD3TgOg ziAyv<{Cr;Axs$6}ZiTabJcE^ma|E-J%L;lI7JpTZ_7kGl9!$vD?yMUejXp*{eVN^9 zAXjhjG@TbwraSYE_bs6Trpajb&khpZZ^XQ+g~i+xm^N%v*slGTnazJUmhjkdQB-cS z^0cP03^pATe+z4gKMWFNkb=VntIjYU%+mQWE(h3cMe?ega@@PB;9TQ(AV0$TM)#JB zLynpI=uVkGx+rEJNGri+W_>H9b75^*;8w8yV}8we>3&@*P!^{NSlOMmnr?#X{SE~@ zjam}V*iM)EG$snh>)j*X?oP5ZjU!&JEaF7R&e>m1Qr5{vJ!kea+^7-{)~5C|IIii9 zG(rU>>=i7_5P20@`qxX!7F|^q_VGH7oMC-Wpv%Pg>hN!W^USM*ftWYcS6Hh z-t3@EvjetLHS4Qo+hLYPZh+t(8GWjs#qrEO(s@B^8iWCq-uLqQn@s4z(Sw--byHjW z8A)D*n}MR_)??;CAd8(>0!E8`)krXZk9^H7j0*GXtVKs3wpZ>5$k$5E*yY-wo#ebg zk&oYU2Th(JRqR5Im`ZJ#m*29~#bf6BKYaz9@b@I#ZdD=58whyG99sZ8=e2WBTarvY z^9-g#dTG@sH*kJgp~Ycy7~^~i#PP}Ynle*YqHbX=8EuJ4RNHX(zaIJPKpbiUZR7^l z=La#K)lf;;RR_Ra6r!Fp4tGcIh}@Y0z@vwQ(;YFt=K9eBa6V- z-`6R~#aLVidKj|9pIx#A^Jn2nkgOf?4@NYkRA^MZ3KY&tB2JC<5}fcdYbjJU+{<{@ zGc)L(X3E7+GI)lB=wN zjp1>Mbz*EpngCsaMTBIE)EmAeHG>(@u(H6upNt>(W{U67ggrYJ;l|9(LR#@r@NKoy zx-VeXR%XarDd1B$s65h|TZk4rwG&0d!|f73!h}OkBwiE-Xdal=7E;Z&Fcu;+RY-@# z9ay|8{6->PWW299(6A<6G!?JjqG9@JQ0$}8$8yZcOp@r=G;laQtgg4zK-HSIZ-!P# zel1}K_;O`7{cpLrS^lrgBRY=uf=4hFsi~DcSh8aO~Es8}aUqugVZcCOd^E zEjV4gZADiGm@3}st!$g(d50ZP)p^E*V@OENI~9?ZoYclECt<1^I_sGYKA4a2j2_== z@o8Um@bzf=+)CEM+xqShj+CTTR>E{05~m4#pz5thegvcJy=ePIPwC}4A(mZ6xT#2) z&i<6MYe&J@fijnA-8-OS{NR28lP5~kqN?J^oY4zlKg|oZ+cV<+jCXB9R;1xkmhMP) zWE?fthDW6im?t$<_P}kwL>~1#fr7sM@Tt$|!_redtq_zmeTkg)d^Sic*boR2T2!}JfsV{XFwIyN+LRZ8t^YW@Y>pymIBWu1B)6Ns9sPhvT%?lxZuTwHtGgIh%eu z;U*Dz>x|$1?@J!&4~eyO6C-%e_p6)vx?S$w7*1Hz5xPhhH$9rvrbpCY-PSb+K*$Jx zNok@}?-_$xN6P<`ztjP2=p=g2VL*%{WvBt2`w2H}0|JWNK6HNmBFUJwO=jlk5G;an z7-CdA7~58!l1%2H&A%st-hi1E9Zx{hR`g8kKO@3bXY_}qBDaa~-BtpcHQ4M+{!4>@ zkKW_Ur_j68&v4;>Z&B!)s=R<_>s+V1+ZkE8CDHY1X66ir48Z|L01o^61|DyD+lh&T z%sOW;XE!xtXB9?Lcef%mcefR~2+A81GTNpKyLlEeXE*V^iH!uV4sFx1Z)|*vakO+r zeik%0%%x($OkC-p3|Z*BS76=#emSvs%T=%41;vU4Vr|DNQf3aCNi4t!b@`G?h51t% zO0sTM0L@;8*q&XcFWIf_x!u-P=h55juH`a?iaXmSPl5&WPMUT@9vwlMCLdcMXX2nL z$J>k1IVas`qS>K%cPFyR9by=aCOc1nUAn4j8;+&WG3b^W5-Y^L{;dD{r>G8FW{am4 zImgeV@DCn}_}ZMB00N$d5qH0X1J&%stpDj4aE#x2us|bBe0Gq#xTOKI_f`t-CF#ZW1AakgY>_`0zQ!)uVBz=f6JQ zt|?fN*nzc2q>5(Or2Y@Ihzx4t=)@W6DmbX_R>`#?3~%Im$2uW8;z zUHa8TWd|oP?$ncw^S-SH<%8lm@ev_N6po8FO0V*u7#4>Agx9QSUdAh34!%C}%1>1;!mu zPn-9-8QRjrcUZF`ql?>}hpOC>YbYWp?-m-5GQZ7FfEL6xPebM(+86F-4g~>iTi?@8 zbrUbWlj?RFEpgtngP@v6HrJ@N>dEDwg`c}#MLgOr`d6cN>5Dc3Hab`M@91CI;q_Ad zOTE5YuJ0c%&x`(oUsO=^>+BT1K7jb8#&io>C+sEq`4(!?I2(ek! zfJ~huvrdZ%aeF%q%-)<)|`T8A}U#{@2>{n)Dm7MOHq&w>&CCLjh^T zEO}1uvG)Dh?VA(qhK=nqo3^B-=F7dGjq($A*iRbjpDt;`CaCV+l#f?;>C{bCN5k@j zpJwlcmD@j%eiSE9e6xQEKttx6yL6ow1Kp*u+UgdXXye<1K+glj>~L}qsK}s;sSnsq z5`)C%Z~z<6|HV@44^d-(ATRhhZuNG6*koMX9`LhC3@G}!M(V6ol1zg?gU z55uT1+CbcPQzuFy%lKO_^_>%A+LAr`=>dj{mYdtkMJ9M!44wgt{h_y;N10KN1{O2a zB8(-_A*$r{`uKD`vTV~jA}2g;9>5NP5}`2t^>L>xV{$(YSM}%Gr!08pBOhQkc3{!Ev+Vv8Ht6#h@gczZe~S79 z;_!!vD<0zT=imw|;qMbP5^B^?TFh!#o zFki^qTgipIlb00D(4W&i^x{}54l(_#My`-&$N_>Zn+&5{ z%FwoBN>IGq1HgF5ZdnlpKfN-{XRX@)w0m*A4c^E0{ok;T|5zRU5LU;Vz8`OgS22Xu zFx7G5o`I z9F&LPybl;qH#EsoAMfMLUn?BB$oi$OKcyjZ-Mi3 za;z#Q%=8lNL!A$m>%deyWzJ1fpUW*K^qrl}v@^^cWbj?FDnN_4Xe}mmJqC-5#|nRR z2#<>*iTE$0uq?ZsnqvI_Kbr@4i6>iPSy@WDd!)eJ9@3<9N*ma}7#9K337i|`c9-Fk zzd->ue4f-Hz%&ODemC&q)xyi#H?gbKHl;b#fbdNA$Da0~lmM{4!2cVjNR`E?MYeL$WNh z6SmcS#iF7-!bjx*=kw!21MDwY2)_D^m=!pXLSG}Sa^k}dgKRSIuMh#>`;QEv@#!BK zLK_O996P`(84|i+_6mUin`RP>m&?)LFrpm+|5qy^m^v4=zd_Fw5?HY?#)3o}|BCbh zSP|AKu1kW1oW&2wy7`FukZVL>L5b2VlJq|p^4ki3d}1h(GYY6j`YXtA+>*Nxl= zrJ}~Z1k(6q$86Eq4dWOTDKa*N_BXU7s{8L}#v&q-xhayr;?dKkkazjAUzu^y9gU|% z{s@0Gki_F7sxz3%!79My{$$Il`JNc?_YNuflni5ueXdm<0%eH}rEL)LlM}WE-Z=t; z3$_+sI~)TyhnNB<92w&>u;rUfIi_;qRNM!R@X6``4>xiBSQhd29R`dM z3(zt@MG*g>kTQSzCz#|5c^FGVq zGt>y{$kf*wFbcB=|Dyhe2K#L`f^3Qf8AF!Jy5ir{OdkxgFz7tXDC*jN7)KW9q{D#v z6dfd4gsjic->5W@p=8bdn<3;GU>wRZfNc2BBVfx@51I#JSEOjH2EdwItkcg0;3~Ih=MAvk)1)*Uj8#5!qNwY$L3*BrU zZM?5QP*()ck!>5-Ie(vQ%aD%xcxbY##ZTYNpJ3h{&IG znBo86x3h>x49MW*15CeR`0Mccr2=3*%vg%&AYU8s5P473&DNY20||)P;6jph!bC`f3TOV6RT_fcCeYccR`*@BrE${Al0yei7?~ygev$YSEMljU4=E>i3bXI1UIx zBanOVS(=DQknUOz8;raF$qVfU2^A)5+N-{rIw%!I18PgpAfQ<=_!C63*|p3&&fRPl zn@9nD(33X)+sO3Y|8NTnPQ(!D-2K^_{ekK~fBnr;WUS&s z+)AOg#0>(f-*wW~2rt1Q;TFJW^>kJkyw>L;!QN>a1vICsg~Q>5r*BpKlNmE_kCwkV zr>J`%4b&tAK#vufYS1CBG2zIwvr;Xb z9MYz>K-u3QfCUkC?ay`|Iry!-co75s@HmX7RNU1N`~oUE`_+3oBxFl zD6s!&6;TWv6aKy{v7uxIR>vO&nAIQ9!=rWMUt1^k!x+N;FX>$q zhI|EO?;zs=Mpg1Zg? zMoDGKvA1q$I9#k8DD$Z(Y#0fstgmdJrRm?%*ZaAQ!SIWs6EM{%I8kBf{C{51AzhQko1Hy4mWb z{1=2%>(nG$;nQ+uze<(BX5`9hLIys*0dz2A5Y!n!Z~g107(0280yCNw8iju97lS}o zkh8Mu0kw;h;scODDr%|-Q2}*7nMELTlid$UJy0Pb zr=Kv0=O`oNT9Bc%Z28#%DySPvClL}sP7$w9{13iafs!5VA9`B4D0#!#L==+XBpnp& zZWttxljArXCj-Sc%p|q7#>gOiRsaLRzb;fFZ^3p>Z=Io!|OARxMh{ zx4T!J37A4K3q1VWQ}zo%oS7+89PzW;Sth34Y;8o<)hcEq(< zyz#w;m&}dH67eyn6!@}8;<2@&8u%CYMnJ5fQpuPep2F#rOQ`)}6yV$!43h|1B-cat z7~enlU&OD!JG)rs6m6&JovO6`nBTd%gp#lw*7bV6*!5C@h!1beOFi!0j-q#uQm=Pl z_i(g*xzSOUeX%&6^xExlzESwNo25aJ1ndgqWS9DMg2a5v=*8^3 zZkI;2ObfeqQ?*wXc2IBXv=4KfFv&m;?iC7Vk-rM0hs3fe{#00Lr5{?e9lVIzi(}?; z*0E3DoF$&6)AGI@A9)X?rB=3uq>+cm8Ui}Zh(#SlA0%acEKso9YK97n%Jagam&~6t z(bIYv4%#&1zzGKASqfHON{4m@h^UB}t>rWD(96?44m zVZh~t{MvfUJHNZlfMCg-jI`h$M9*knI?kq=T)Jlm=vdE2SA8anDYY~#|Dh+MM9`PM z>7uEaZhYvd%CSGv#IfPIjnr7yk=PXX@co6Me%?Vn!%||M@s?X@#d+hMC*Mg21LssH z7s5g|3uj3UkC@8nTnqMK7AYy`dbf;e^*MQL2AA%$$mAOGb{U#yddY85Y&XKIrNiEs z8#J#}fXl42-cXS3%qHttbBsjh5yv?qO%9pYJZ)bPlY20r-|*vZRQgO}JomyyOK=SRmWS3EfYk*I-4uq&W-5yWVlk+sIleI8=2?EzD{#l zJhG$VvG3;RV1@0kLtRlH!abW44FZb6NmZu7OQ`bE_xPc$uLuMYYA+;MNgXVdY*N#86w)&0nwzRu}){o>3ly&ppKf zP#HqC!pD+zt;(2}!m=B`C(QBL`~T>A=jgn?FMKd;(%5M1#%#>SZfrERtv5EBHnwfs zHkzcdZ9AEp&-XX8*34S-*M0AK51+I5zUMjn0OcHO)ozNuuBjohJY{!I5*ux9BY9-{ttTVE z5x#zOp_tWHj!F*>IOJ{MM{szYd0Vj!vFc(G;J~+$ZMGV+Z1psj5%u)YRTEKXe$8(9 zQ;>J+BtFQW0H5yDiWy5Pq=QO*p8LIXL)skOq(W6>PlnOPA+Dwss_3NPBz#RE&8aUi z8;V%2GY)--y%UYKV`$_K353Sd4OE%guJgn7Gm9ek3W}<#t830(&-I3MNN6oYF@u z^%VGm-rLsm#zb&o3FiG7E$-6ZBDONBc5APn)K(+yDHT_ zcl#Io3;Qwk2(M+(ZM0@1G3EUT?m+34SbM^+J>vRDRdxdIF|%MYh6 zB?=sUx~`|0xnj9YsF0(Fhuc@nSt@e)_$s4^BMvLlMt^b}cgoUL8Q&jZ!Fa2s+c|@Z zl+)sw3?|*D>3BV1zHprjzjnAMqua-f4V)JeQYEk%HGK~XBKNxqHqk%md16ENY40d{2;&++38bY`2aX; zs#kz#?H$4!K^@~_30eBg*6+%d@&P~4h<4gE3=z>m`E8k4L9w@Yqb!rIqG!rCiphru z>lXJZRKXKf0>Wo^f@^P{uGZ?tRNwpI!*2xoxqoN)+uvxumNT!&5u!tTix)nA1@C-d zUd_^P&rco4d4=GnL`$lUbjndwRLX|P#Tq3la=K2^dij~v3;V+x_^6Dwi&ZCpW-Mfq zDE{$MFx027*gVV{D7jI!OmBDi@x6fjK+?y4&J#CJ>nSaV2_^4l{4{zMx3`N4A zai{8k9EU?r(r6tmG}U;Q*I>`u={J7hjpayh(7v9ARx(HO;5Mx~2~OUoyQN@FRe2|; zEm-H@^SnHz3JQbYuAk4}Zh}GiXc}7AmIxHdJsTs4K6lQ=dmCZWnYTP=7sH#bD_#%j z7oXR|GKp{LpNV&;2sHZNu>5bWbkxu3?2$foLvpTqh(NNr5$S;ClC8GfX48pHeLgqh zdaYTh3})h(2}@Djo~SCM|E9PGtj9qwBztQzG60%>co&FaNo^UGEC$jGN(I#OdMZOs zd{K^Ur3o>e-7l*lXvuQtFXg(|*3DYRsKj|W;I@%HJ!*x%sLp%3!IKxCL4s{9ajBZA zOp9SliP@mZR0#ZKD7TEEyX`ftN)B5 zcq)lBfwm*VY^p_N8T31QkKg8)=Y~n?L>8o_oD1UmNPq%@I!RSMX#PdaC%?x1W(FRqp2KCAsA! zKqbpY6z25SF4->=6*0>vYrOb*YUMRaQDjz){H`ohOE!Obqd{8u%Q{E66qDz!_G{Zu z|B8p*<}!J%@gFvJoN(nlt*JyU4UF6UZM+L3oOuiNq%yb(sPPX45x!7Y{FSh@$16$o zSA}1(l>FCM9>{Bp+n!mS$nfjWKWmgIrD1PI$zjp+FD~Bl?W(GU=QEC}r|4s+ zXa1_D65?h`kytU|YdoD%J{HAYR!JhSoyFF6*K(?}$CZI>bObwv`JBjS621yzW6cn7 zf{BTB`kozD^dhDgX)vxhNyo6ODL*7hM{pqCfYmlO$FCmXM9!?5O9S%5F1s7ZqtNP= z&W(I}cq8468FyBWe>mXDz0mT*Gb(LqC$|Q-y?&o%#`9PsN=B*mNjDdau~^`B0A_U5 zxx`$>fCKbU$*aDWg#2e)31*Z}@_|2i!MpLoY;0ygiRWRx%4^)?*(<;Tn?4;Yo7Ohd zj8lh3^7`oazNu#kA|l;kvfq!p&3po(Mz6l4!{AY>oo4f>0r4i8hD)=kJv-T6qDu1v zdG%9H-LTDGnidh)VYn>ETk5=Bu(*Zwvi6txin-ubhv@QfG(R^ix-UqjV1uJg7U9Rgb6wchouj z?}Jf0((>`as9{uRKK+^HX+)jp{YQb#<3?(>D93RNhAN9`%biX7!po}>N(nA!mz5qw z(K_O&dl0jaUHRRP=ZjJ6)&Bjrf<9RWvw!&XN%xMeuJW>{vO5{cXia!k3t@{Z-5VDE z4SboktT&po(D^LL@-btBT=n9gH#N`2@!*mw(zr$HrsJxVC#spB@?TaEAr6Bp%zHLz zIab5=D~oXaq1)XU3Sqbf@O9`tv#3l#I)Jp|jKoX-_mvi|JKP~za$>o@)LoS*t3jMD z;4ltlZ(l8|smRgcI~PfPyTBu=tF}|}(HQH0wNs*0b>25$6!TFN*f+JsI}b{jHcP@6 z&+h-UhcwC@XDqKKG2018%@ac1DUxKKZPX!u{4iY@@F!{}Hc2Z6*5-b!0o2A3_wO4hEw#GuBA?4mZ3;C{H&m~Gx)jK682>5 zYZ`WRt?e}P@y|~e{rR|Z#jBL#gPVh#&*wG;q!5TD2MLiIOP^k9J1>+ud0(g{zq!9@ z^<>sLmW7)(br5E!RbmVu)le+|y2$|-8x@cRHD2`Sit2ClYa}2-zN-P|1g-ICSJ_UI}%+8iSU66%uuPCZAbm ziapeP_FESu{+1=^y`KRN#7?4s*vD6#$dyT>>W_iR!1fm^+&%>Zkv4X zrfr~R3R**9`}`|~%2 zg>W1RGa)V_+p(oLZ|v}xsDVMC3oC5G(y6W{AKN0aQmNUIg~e4)>@4GB5eX%ptK59t zXt4J3IL$H5(%iMP*WUWUC2-|-L$Hs*;po6VP*n~Vzex~gX6~?)t!^1>hL)o(wa@(N z9)-^_g-N1%+5PszHMa3+Z9<-&qqjM28q$7Txt+(FgD=sj>OCpzQJRvsTwBbox3})d zB>`l{4BEgw|4gNFJl|2_tpj9*PW>@l4Ac1ox{1Frl6ZAT$FqR-$?E;PQj)6J$Wt)K zA6%<-s}m53e8Yri0+;S91}PmIF6Ju1>xkq{(&%X=^BkW5-$G{xqp5AcjuGI5dpK*c;aOT&EBx3=G=7_!p9!YJS`8KuD zhrxHqAxsFz|2gVl4hZxiK&<~?=Mnj^^@sDQ7Ce9J73>qF`n=RH#^4=jDD{hMo>u8Z zO-R~zP!|!|cK6VTftu^&Ndx$4mPSkIVj{NS%^?G|F0PM3I za|x5`#~`X>H@V~v*$ERCn92mbyxuH}w-<$UzMmgPMmJOpWFB02?zgieFFlEJiLSmm zIk*pZ!1fL$hMf@0QOK7wJ?Xte8`P|ubsqev`0yV29k%@gyhq)D_ec})9^Ko$f?~|u z-W7vKgOo-XgqHPP42^C^WjF%(IrW8~N8@?1JxeW9E74D0u&pu&U3>fF(< zOHe0OPaBs6W?e}FlWc3DLh;c0P=Q&TzXO0zgk96Nt_#8(@Tve_2f(XhQ!65oig5q| zpC|h%{3Diw#utUaCh9K~)gZx@I0DKo*#s#2+GwGwAmE_{_$r#X)XDyR_iy5Yrl>Ls zvZbNu)~@O1C=JkuztEI&-zQJ-wPl8Tnlx8P=~y@EhQ7f0BT6__njRyz<=6FPO>xJs zkK59cf^f*HZq{F@D}-^Uw`K@3IciY(mm6`dq?iMVrm#tA8>TxksP>zr1L=~W$*~HS zJ8^9kJ7pLQ%Q8N>Kn|jj3%6D*3=5BG-m)=C4ZN-c#nN}9L<2N;;+ny6>}UU>HBG83 zL8AvxvgDY6F+voob_x#EOG0}n@v&~aMxR)upDlW21sG&6C*glBZKf^hupHXo6g>7I+sleKezJQZb5x4iD zlQ?|(E4_zK;`nJ^x&W1gb&5Zn_ZM!~F2!|NsMw~5=;UtLH<_xDqt!^4(EKU_wEfh5l&(h52>D?F4O!&Q7Ze7A1FN@BF=*iHXXhdr!Ha_X zBZcA`1pes=>>*JG5+}5Y*$s$OM7E*FLZnZOpF9l!CDxEmaSaq1D>___qn{%!A%rK_(Y7hj8@lp0_`V2u`kT;2RkSMS)81Vo&%yWP8gawIZrb45kQDBMA(}A$f z!zd?da6dZ+O(!~EK~C&c5yGKJJkl^os6fZz-!5Rj0}wA1$KX(3EZYy%!2EzWQ9=nT z@HhWkbwT2n;P@9f84TVoNdP4>%lMaYXs9nRFdqPh98##qfS{pz+{K401^YL;yMT;O z0^;!@!0>p7rG20g=`P?TOCU4^iP^sPJHiTgZRK-Wfcqw~DU?8J5EJjU{(gaTP`&6< zrXU2~cy7op1$SUC5{*7Vq$KrUB|t+!h^OzUfuU|x3(>%65NCCd|2`6u_}2X=az~90 z1?A5oUMviV#ng>@*u&SC(v#v56CR3<=$cZVLR`T8aWaDPZA6LEYHN}k`K z=yW9*IDJ7Dpkb_I;xr7s&WuAiZ66UaKz!~1Fj^WxV1jj|6w*LhkC^!-zo5Yke2hO* zl|z0=;6LzZ0AUEtkczyY;NZm;3@SmtsQh65odYU+7WOp7wQLzh4y_^W|Dih8eM zC@;!CuqO)8HaM8#p@{X4 zSZt)&hxsB8`>k~eCb+_k4wQz_`itf}Ay_C+f=D9-FqLgde>KHIWt}g@+GC?xjrm{T zMX|2-IH1_beTyI@u)fy|O`x4kxQe1fkYIdY&{F+|_@yp0U|vYT;1%;1A>WHw7@jb} zh}o>;h9JWrvjFn}yb$CocR_-AL)}ONu=Wj=1G?|a-!lQ|Fn%nQBsUb;Ob#G*P+-J2 z2Wf!Npl{Gi^8Vry1(wkcrPahjB!Ge4Xh;u$@O?r25nQx0GF2Plb;Jl@u!vkhDq>X~w%?r(*A<8+*|B zjA;QFbE9_DAW)caO3WkxdFtBxP#ps+G~!-tI-Hau;|(G)tUk;TFu_PVX&(?YAvAB7 zPZ$g=4qX+{Fk)i-pH3f20zt=^7dUnxc|{8j3)|ez+3M^2i$^kk4-5)n&Ei8dA*<#? z0UhVi0kpqs!!d#8I}kBBQW+IaP;iKR7Xus&HkLdOwyP7x_jSudMFQXN^|vvQjEN4hEVyF)^TR3XEV(G_<0vOioo`&-Hb38h~M7tT1MWf2eCp!iANPuI!&1 z6BN7xQHp&1X?!Vt%13 zT2$Cjc_bi4!;tO=ieh;AVff&_(XC>~y6D`a7b@bRQ z^fTvHL?)RbpE}l$=U7=R4p|71hlMT+nkTh?IYe&qx!?XQhM3rF9Zd~-&r3(BxBPRM zjm8J{a#=WQ`+m{e`FeZ*9yI;p#{YT>-xsd8npl~E1*IupTKz4n%cCX7R##*FGS%)l zyhiW+d2Z>ZosyUxRIHIC;U)M{!CSV z&wds-@F2s7e_E5IeN_Nf9hI*sr1`}uQR9|C5Bxf@`IbNs6w>)}5%PY3{)V5CIk`!Z z-m9@`8#Ot~#aq67?=bGd+BSMUwS7P%^?GmhO(w4M<&qKfGMgEEu7EXlaKS~p`l)VWt$OFSZDTZl^pj&0mD-}y?yQ#9 zfx|_`w#V@wEFZlcQr*#~&$q411A^8EPg<=$vYVrczwQXMRV+$7+l1fum$Gs1>)7y{ z5hII5!bozgUl0*VvD??IL`(nQ7b zN5YUFC72DJo1M2+0Hxz>BK#N$+xFfrcGRDVA^erv!6l*P8 zGvn)lsWqgnwl$hd2;qM(gWXj+r41S3R^{u4v8&92*)=dhIn&Vox??-^X_9%A!U^LC zi8aE|>@B%u7_1uLt(P9`^ZJk@M~5u^VQOd9vBR*&SMLto45@eXbtFcw}dUyP%YU)Mq7`sL(`RHQb_%+;K$WQ z2Y&DtVxvla`$^BMw;2&`!62S_kCu^B>z(tfPFk-AwnkZU!}+-C7`MSJ2zeMy%xv1Z zPMUV4UL_$a;@;7z_8t&*z#XLzv_L< zqq>#kE7#pywLdjAX~&>FK=EH zoR$|!@FssgTnzn4Fy?};P6|0`lW#TX-&tJzTgOa#H+#dTp8`sW9wX60c1$XuET3nm zJUE`_UQKTH!mF<_bBO5M6_+TsD3bPq=2&U zx|nPF`M^C!SZVOdM#*tOarSHPrcx$=*Hkh$|)eSV{EqV`-zFOLcBbbQJeQ zjaxxK?ep(06;zO+TJ-fDw{?a=2c*ooy6*ObEzZNNqk}l!(6yyh?rK2XyOO@uDPOmU z*oKXpPRtg0cziK+0Q0}X7_}5uf&?_#HD_15$#axs7s-K>6O_dck~GVoiwe$7Nh)8O z^_%B-Ph`q+X08OXYsQ2RdYNv%rkP@HKU-MdtBrVb;#`9i;#WQwPlSv#!R!i9$#kRj ztQ(?D%(%3Ul>pb^il5!qJx|kPf4{E|dM}^xQmda%2x6RAD`5{#z3sl;!+eeA&TD;4 zrNZ)`8V0W((n&Cz4KB`<)3nqSFH`*TSDLG5RE$-jz5%|tVCsN6b8Wf^?h}9DeA<^o z$uG4vH1h<~N)@MNfsK4-EP3EmhkKcMKEiHc_t^kGnZ5fC8bZhY{J_}6%jOZ58F zDmf}(*glAUvK|Q|$?>!CRfTCQ?ZzoV&s+5lsvG_sh}Q+FgVVf`_Upi<+fhr#tfl0+ z+gUv$oXVt1#c9UQ%9pR=^|Wg|GzA2=9YPAnO-#-(+z%V((hh3~xmmr9Wrn9JE?~b2 zWSY6}Z{_Dfj9(pj+>J^+xkBaF6$CIX4W8{)c+&TVJCIzN?q0W#mZ6Jn(?y9U3VFsT zrjz^EK*)~f_H#O$)Yjmk{KuD$rDFZfA*e3OJNt@h({+UFxc5KUIsWN?wzeKtL8O0hxcc=E8g^Z~_pu&;ZLI0(Lz_VV|yUqp2)$OY0RU zI{Y$0_?eT?`%P)r>eWs&-i%N7FU_lQL4*Aj$R~v#>1Gk$x-DuzUYvsX{4%p{L~NOE z38gukVE-y^uoT(w#0sr!vQ+BdV^-BkeW6pPmLnG)ttmE@C6c{R%QuCv;5Pf*`qnY? z-V`opb=E?5+U-|1%N;aC%e@(7OBcd!&x|6cJF|)S+S}g$I}T9te+6@aMh42FJfafF zwcNTd+${$>5Ebh742H{9+kF1znAW<@<=jV`B=kO06?BHjEmnfoiY{k|g4hJRzagrXPY-*Ju}H7uu_tnXURvcxBG;kDHqFuc2H z0NHR=B=7=zZ^AG?J1{-Ok{E!0EGv3A=1}Eb&5O@COmK^`2csVzfjk{}g92vM^nUY( z#vQ>HZ}`HE>Wc$nwGP-3;g0#+62(X#j)p;r{NWGEsZqW%Cg51sxl zEgsCO@Wnhm&j!%yV~&|%v^Pg?$aR&8dH6yV`+4+2_F+cPBX*H_`Gr0|!c?N9rJ@CX zchs4<)v19w=c!c2uSK( zk={I2tf@xL^;(vrSh#W&nq%>`UwWfe5i^uR`sM#xM7Cv`)M@AZywQI8dDD<4UO`zh z=VRaD(BQ*aj>lJsl)J9bXkX*g@*&nl2iNRJ_42w9S*(^SO8I6t>lIK{tYHguFJ@86 zx5~vFbs$+kE$5sN_V6|1-tv^_0YFcdL^>#KcQR9M22R9Fv_ zRc1FUxMh@&5AXjc&Lz0<8n-g51H(^;Pn=VxjTUQSnb4Ws3OT}d&Pw@KbL$ieOUWTd zoBPL93#W@>(rKE-YHC_{sl5*P@Dhs+8 z6)7V#(qR+DKd9z{TN7-D+Me7^=gFLvpJFBy4(bh$rVYl}OdeOMGdq8|^mwqskqH)N zdf8y>WOUBupfF3{{d+n$q_o_|sfAPrzboonHIONV%4bdUXwem0j`ng@R~K#Bj=&kXACNsp-nyTf}ck=OELo%n*TLBCil*@L9X+fK#wOh zGhXFt1o~B~E`zgP5|mtQomQ4v5d-OcXFzG2tNVP?FC$L%(?ta-;5mrN!<4Y>y*F$S zOSKLB^f6^8gJyr zq+(R&R)Y1Qc<3NRj-aP0be`gmDFs}wxwCV-Ws=da0MbS zXq(jjbQq?l)(h*Qjhtq1LTcogrOUGG#qmJK%7p&x1FJt$d;>vpN@JP|oyKm`opq(r zRcwtF=`%owgI2B4m1kP(y9U4eJH3eV==U(T=5fgE6P>;?J3J-G0&oAo^k7>svwdc0 z`Ji@B30vpjR->Ux${<_1OTjbcFPjjr=KDXl-YABE$W@-T0nl&b73ntypMg`Up zW4ApY-FDQ0-sJSA2Y#QbtN%erb)_V%lwR8I_ z9oF3^(U=0wZmDObsl5wZ8sK`u{ZLp??Ok!yJJG`?{VD5@&FHU3shfin9&%6;FfN++FXe25Jj(hB z8m&)s!l7h|p}m`2hsl4+PcPq-6sM}4jL%Q3->l>_JM0MF{HFC_HeRQFEQPOFyG*rh zRXMq{op;4gaaLkCUSCTYy~UYqtaI_?mA75E^~}Sf+qvVr&D@x1_leXm;P9Kl^S4Ql zR7>CR@Uqfi+^?<=Q+h17k-v%ov4-MXQ*XsgSKPVQ=PMmwipfWZ5pcM&=zuT8BJ`}? zwBGNQwZ4j4tm)L~>9X_jmo=Sg_;9AX=MDONAxe?EH)XC-f?Ri&_|YB_MXK6nMnOM61GADr{SbXW?&Q&YKYe#L>4``Cx#<`JpFL#r&5oct? zQ;ToC=TK<1I}V#2RA=z?AmBW=KR8gIZ08-)I#T<_^25U~={3(&TKvXo%D zO3AGD%-^S&Cr|H_Y-x+qlI=d;CXddto9wGj3Ge2CwB}dV(;sQYGK6uT~ zm$9K?`~U}SS|jG>ZbW}e?DS(_=o}c?wHhMR73?>4SJvv00ljZs!4Ano-YdDR1v$ce zdYu-)^}mbI;3{0HF$uOa+)nodf`^&x7oV**&W4B?M#w>l?0QojP*6hM@q#}rVezk8 z8)@gZk!LMoN_`7Eig&(+9f+`t2W#X!lzYFq%kk}OWDm`oKHG>jeFtIlug91L(mCVX zKbIBzyz93*ksEQbU)g(2Ja*X69>p)nIzdQ^Jqea(Nc? z<|m3R?Uv^1;^zB%9t)c+NrW7aP7C*xxj*j(IXGBA_t)i7#<#9(tRhKa^UUYAOI~bU z&o)c#-}BnYw>^ggG$uCv2SJ(>R8{y!2@&GoQvt%Cpx&3F0{WoJJZwt zVjnXDVq}PF`tqEZAf|hA5h2Y=@8|}4ieYoe{sU@DR}v7*R1^?1mBdr{Gp?q*q_W+} z7CxOG02mf`88pxe;}v2fSUYxVWAA3oyGiG&0Ex%BJ3 zo122}nw_Z}Y?~f_q~ty9vr7Jo8cXu0hRN$E!AY2&%toPGp?PA3)-P-&m*jgtxT4!Z z<2{|SxHl%y`>}Uk^2T1oUv|TrIeHM}8OIcL&(wnRd%y6#d8v)MQHUQxHkL`*6I#dN z@2!DPYdr8T>GjTJig##y_ttr)KUbK(-~Gk+h~+R?KVOkC=lw*{&i*Ko$fl+HOtAW= z_xbXw;d%24f`~|&5w=2pxvUi-{tq1CdO zYUyz}eBI?&QnWV$j71iBCrw&4l!ET;@zDPi#+;ksPfGpTmrd=fSly35Y4mZ`yTyxr zLyL2r_I9l#RSQ9?Hg#n+*HzFYSmuR~bVNzQZ9ywWjv?2ccCT{tiNsVL2N z(%CiEcBi+UITfun*Xq&1ZjEo8#>f~ftvmJEMBRsaV!W%X_NjMbFV2}m`9ckj7O>NU z_=u@BcdPu)ezNX79H&b3tM&^r=jnF7J~HD@-x zz14Bc*wZbChnAS;o67<`&Pe7vpyY}I`3ltnlNe?s!t>RFHpD*ucG7d-zJ@Lo*?*_V3N`@kpH*cHwl&S z2*mXNTCtHPAG0HY*>`?R{S+C<@!lz8K8IEX=?`y!Yfga@lDuTj(4G|pPn5Y{t7EL@ z%+p{B-tA{T=QQUS$I9}`Ldu$c_JH#6Xui{_yY=_EN|kV8J-tI9X!ywM=E(%4~M zybtF6aXC|7&nr~P?csV|ULK1%hy>zVQZ+mVb3wok`r?1Qq+ z)Y_A+^%tm=*7H8@es&_u3C}Ui2*Z(8+)nU+rus={2yc9CUXDuZpvcBeNi)L*`h9i3F@%!Q zvSdd>MJy;6-o*h|iYUg1B(`WSaEtUUnj?gQ$e9ICE}SQ6phMsY8={v zBh#8sjKXx9J9Qk50wO3N)8y%RASlQUBt>B&pfB8xSpUh*4TFSAc0qmPlSW8(Nj>P| zbva#tVnGct{b1y>a*!)e^0Y4uCGMBUh5=Pltt<@zu@H(+18cM$$^{SWq(pbg3Hjq- z7}Me_@IrA24b@Uim5s{$og*X#6RL&FIU9{xh+}~X1FB^aRO1ZpXG16pD=ITZZ*K(c zXCvergNoabuab?)+}q%E3 zE7*vMo`MSRlo~`%jM?H=_9IF?+p^jP+OJ}FO{7KnKr`Yy=T`^`MoGahPCQmn5Dk2Y z6aoC*OL3;CQBlJhp?}H%u)u|3gn(F$45Ec~VkHFmq|tvCk64uXD&8}V(ux9LV%GX2 zIxv^SrJfqrN&0w~QwuG6FPS)wY}2gzySh+TL?aE96)giHG*km7HZ}@AB1!3YF0|<2 z-?v4?RsC2Y64?0k?AqEp5YYp6l`7!f(>a@4q&jwNMl_<(ehlcFBs0+B!Ug}8XW$AA z;tt+0t7gTH>SyT)|SSX99%HGeH{tvu@@e9IZHE9jBa0DbecCl}Ezh4-w zM5-b&vuK098MXcvDJByeR4@`PfD9#rBDk=yJ{{2QhZ8z%1i@lG6#4i#Uq*By`~|UJ z<+f-H%!RY-sWkqCC;92NUZ=1Rqp!WEkKn}~64H&)9+57c5AUFyV^L^eNdcfstpoI226ATn- z*f2H!OB@&w#*L!X`#Um|c^mbQXv<-oFot1JWa>2DANBa3ZAeh?0B)Jnc;gu4vdPmR zOzn%>F=ExvFg^*%N(N#;r)+5g5t;3+SChcYQ3_f10T94A2~g zEVvX8h?RF3hsB7)kp*D1S3gR11&Hb z(0~rKa<^LmS`vLRwa>w(dva)vCNOuy)W~)c4m9J3!2Cq_Pa~}4mbn&9QahHeNh6H2 ziRM!Us_YMxCQ5v5a(I`$V{9poDppFKY(P5Dkr-IOd4y@T6i^OK3jUC4RI$!5P_K4P z3^mRGW~4b)eatwI50hNt@RN%w+%`XW_k`D>xVG6!nH{Aw(vYf`N;*^xCJcamdaN>t zQq>5~MU^HPs4EXGCX5=&0Xsf`l8fpWesV={9x}rm_1NNn$(6}rxFY=%LrIiQxdx_2 zV@yEzq|nVf9O4U>g<~d%r(@#jlnnvfWrsq(f^}Hu3@L6bG21!+KJ#P@o{9=jebh8m zL}@}o;Dv{^g85WIJVk)xhWd-&9#mZW@wa`kmf|m{Km@f`bU2iV?;JEXs*u7&fZRq> zCO9Pf%6G`5V)WfN*U@1aC1FD<lE?wU7-9jT zwVrsi@Qf@=I6wTT`-1H^HQ18T1D5*W3jcQ1W6w5oLUqA%nkAJxIN`ZE4FOdo6!b03AdIEqkGS%)@ z#v}*t?(WZEd?|y**H-=_kh}F0Fe!$^1{BzqRC&v;>eYgwJz$ND4Ip-LGv>L>+XSu60pSmPa8=bR1?pr2`E8% z#8bO0w3}U%ngqghLu@Yy{F48B7@VwEu^zzQ+BRuesy8k9eAejg5vAEMMeJpT_AC3j z=?|3klNyjyKsx~W&t>}1*!l@r6``zU`iS_I;LLjd6f~rl$N>Tcz?@29^!UMmoA(0- zJ~tJo_lwU!r1Gh3KWKu^h?$?FP)L7M!Kw~Xu*$9;n?trMXDKow^ReP*Js!3Iq=}?Z z7M?l3g6Yc`j`8PBrk63rGFhRl(J7^}9UvcCxJ`XFh&=3SQo{$_O3J|A3s&7+z*MsS zk&2~%NH#`qpQ~aW6)tPTwJ|}E5AhdFD5X<1(mhGO2OmNJEuY>MX1P2ocO5r1ZE@b& zxwpH)>HF*%d=3diB_`Vuv7DA9bHw-|00NN)P516DMm?6FH|k}IOZ1+PKfKo70|Tsw z-BvxX>p7yL(dWWhqRu>nJM|8)vW`=FwRIW%=?Cps30_`@H`H}5I;x#P0lv2P@lkFk zL%9i&e`iOajXFmjZk;DLC-TBxG9swvIHV4vn0aK*xIr(wohovRo7pC|z;$X%OKG}u z@2gf`z21M`Qe!8>;+<)F??=aauTKlhyJHNDMDDlcKiAs@yw5!^AkW6sNq@)tET_%- zaM(JEC30^yMhKu6UM6>~4R{Z-wm5`s{koraSNJ&q%8=){+;e?-_Bhj7@iH~doUDnL z`0JsQgV#y#v8HAUFOccgDvjj2d4^1+Q*CMgyb-_rScj}vdew$(d%K3&@NK&E)GH&? z{pszD?O2G2IA+K5rj^yk)>DK=CigLTJ0#Iom!D%-D=f!yvSyKl{~_IGAr_C0yM`r6 z$=3TE^sLiJxthP$TDksu)u=|{ZjqVchN(-GxuoP{K{WY-B!9YW8)huvBRj|;xiqS4 zm&loe7l`krjZ)$oQu9_I{kQ5ZTKdHQnxVHJ>9+UEJ$l_Kf0yUFxrbrEHK}Rr{8imu zQ+MIq)5>+iL3iSM=`rHk*~Zy@^*U`*Ne#&z^mtaEk$AOy#pm>Zs5rAfzSvN=Sw^@& zxYnVay7hfDVKR|2DQ2-k^69Cj9M@#Uy?-aZLCu@4bKm4hI)2YWH^sDUzY<3F23OYZ z@h#p{C-r`AZ=KrMWxd+nRlQEiV~=0jxI0ksDqZmT;o567o^`#SZ^X_Z>JEZ?0Wfg6mdZ(j9;?Yuoq~zZ z^plRS@Gxdoh?=(QEj)`O(0%yB?A*wSGENUKhL{`a`4}b#^n9Kho}095G+&07xCL;|XP4vl_Pbm! zcONgNwsgGi|8lNhik4wdv#%GCd#niTj|KP?1SdH&QC4$_N58z{iRHk=ipY;^ugB-Ql{UG zif_;3$M4h^0>2<^35Ajbcyyj})Dn@)<=f*osBEqW*g#p2gNP(VZ-Xo6mRGTs z{a*VH<#hASVp#m+gZ!nG-fy$tNIF!-5G-xz%3ZkbO&jN{iU+rnpBd}sCki_r7GGcr zhkP=h%g*0WmAoI0Dp?O8Zp!_?X1S(6bGUk&$+*AHO6!IkQ+4Vi5_)r(d0a%Tu_?<| z$|uZA+VNI)E_~i=3lv!Qzeq*&(fS#+Y&d>x4c-Y}rFXPGcYS)3yB>Zo5a^V?QAXs* z$^o@ki&}m!5Tv{$gxJ%A;Q9G-TQj$=qf#r%!0qKS@r{I#5WG2&fRqpyT0S%M*X;l1 zH{?hOv%x`}|8Mp!TZuQA9CZJJsSP91+93cYB*>!bZ-gEx?(2s;wiS+6+nmugY~u6A zYg;>9v1d%Avq&f+Vc^%XvmByRShCJtSkjX6cJOd-Ir*-6rDWNj;KciC_i(vUkg}iK z$l>^~?*8f)>RiGXq8ZI6Tl{Su>#6#Q-TnMKInH*RQe*|;`_tjY>n12s?^qBMbY2PK z_qyJpa(%g8M>2(L!Ki;L4LdJP^X7a?qDoA|eC{Q=E#6NaL-AP)M0ZNK*rOAEdDath ze2AX>!+2e7(Dtm&yk7V(@{-oq`cq5Tz((ixC`ankn?=Q$Aj2F}bCSVuDh<-+zU;rs z&2f!jfN+Nxw%M;ywZdj1Ed~@NX8yq8(uUex)24#}pT;u#s58FT2ckbBT3W*h(B)AZrnTf-iBoq(^;fWWTBp8WEmcmFNsD|XxayWnMXl80y zE7VKk844keZFN#?G^g=ZU<5(&!x~`Ck}77w@>BG4(BQ*U{f0pn4+yJAjsRz!{}(Qi zh_I^JhJq9hHlv903u5&Xo}aHZypE)}AAJe&B*b#CUWE47Dr=kuU*&%;_*!`phq4P!NYlKsAB>A*51;IFY*dnb2*msWzZL`m?3yJF|gruOlDt|$C{q<*P zX#DXKbPT8(aL5>d)P@ECoWZ8A2N<5CBCk&-_~t&Um;Q+M1=#EaFd~_D$;Jm47d~+S z28abSGd>Ma_~R@>U&Xtoy@G)Zv29gg|Cwm707GY11_olzFW(b_9H8(KDJ*q`^dsn9 zVi`D77@L}gpz&3sHg$&~{Bs|}BO;u-r+*c1042%kL`T6xStVIhvoV(eV7LV62E(8n`QAvQ|na085 z=S}?_q`Z=!l6{j&m!ZR?t4`q)5!K)O#t))|%0__mnf!wyl)EMmqUvcRl1Ovk>6$i7 zV};6qp(Pzl;SJDR1L#tm7pyHQmB8;h9Uw^u#P5=izh`FK0A}Ze8e!D<^{Q`*|6`bI zb@B(mN}&PYWq_;CiE_*2CYJ`wnAAl~;0Va2HmS<)W748W6ri@u3eiO1h%vQz&V#FI#~M2#j=B1!uX zDrfQ^mBal%R8FOAi2Q`k7(pIjZwV|&0LP-|1f~v7=rFw`@*rHqfHOcz|5USTv7)nv zMyAIy1B_{4Vkl8+3>%N#>jFZ5nesOsbOj=$8kKp&eGdHUP*ZaGw@=W1mV;fnzFiH5 z8y_O#M+I(7OG#!k2pbVu@ltHxvm{aMh?u6iF{ zfEEb`JAPoYs0o0^hp5(UCN|^Q4w5#_MgcQfD9(b+ijRq+%sSq!TEg31o$NIAY#5_{D

      5(waV-vo;#%C@WsxGqDPH8@(&Fw?iaQi{cRgsa zZ~MIO@80{}KbAccW+szNlHJM9BuO-1@;5Dc?m!P-3%YQxyhHD}mp3Izv`k+@%3UJvnTuThqTXO6aioOL1L*=@0oBtiPa^g7L9PU+bkYz72tov?q@sg(HQZK)_TF~}xf$X`<;_O$0&4lB8 zA$ZhktIs?9yqs~|)T{hfb$(F_Yw4a_^z3R2Sg}qCak4>I_Y>tc)i=ELO3Lu59_{P@ zwT0X@S3iZ*BWKgY(isu#q%uSwm2g)bC|Aw z7%B)EmNkTkTnx3nxP1lqvxW&r`s4g!8~^wv*Dd&Oh0b0+vwlS~Tzh(MU3=NU`q=_B z@9U58J8ZGVq%ZBb-i-BOq;BmFkh2mzWGbg_DSk-PVfDh~U}`c}QCMd4+GJp>F3hxj z^a$t?Vu3(XT$y)7ww-#fLLWZPjxe$Ko!-ToFW&C?5c6X0B<<8*FboTf^;9?f7A@P; zTRd=!#rK1Q9GZ%7c?cN&kj%iaPf!8S!gG%a_rjqm3ch1!sSSO4tRfejl$^rm&hPbV z7#c?1$HHIkZW=qi`I-!(qpXlKu&)<)iCesp_4195uEx*TdsFV_%ur;K>}>*&_YlYp zt2;XrH;mrr8dRUS`1+tP(!0oHV@l4SdQIRBd(S!5WeGWm^p;l{tF+E2oXgl@Wb7wx8@~zAgv@IC`}Eyjs?w z-s=YMMN3rbbnA@A&HRfb?&YrzO^SQ@7B}s=79dL<4c_H+^PN9}WJTAY%X2QKp)0UhD8~QZ%R^ITC z*k|x8zBS-7m3I$dEWY7*7V7u?>FMm7UHu1<^n|bodD77G_@L_RZRy{sRM*N2W4;p! zaQ&V_ke2q_CC2c+d~zBn60v>s4%n=puf@n{!ty?J7O$kioJ@vf`9`cALjA})X9GZ1 zmWH3S6a8^2T2j+{6Qw_TnM{;q@7~0FLaSac{$vNgSQNESxh1u^D`k(<-h%mCNs6z% zhipKhVl>O?n3U37Z_u;c-ZxyBKAEG)UP!y50nvXru64iM(+=2_JR{h$t%#+m@D{!# z_U+e(RC^+573=pHEN5%ml^f9P>uzF``u5X`T*bED)!#^dl~fS6JF`8T&phz>!>c1W z=l3Y+E9)deYgNVc|cPiS-R=* z{kz3*h6;N;ZgSgX{J0G4k;locF-`+4N;IbhDNG z{;|44!uIoMVl6QwAj3-1FA=;x;6!c8vgI{QJM=lcW})1nY)uudHy34|itG)4%_7JK z>}_*^nvrHD>7`gl*=8}Qx=hdpe&x0=8G_RK{k+wkpZI4h3umL(wClr`E26{n{{pk$ z!NIOEAOaBT5X@c|8V+#~6R$Rp@2Lp`|lw_{9fQoVvYNx%L(T+##BS z_ar91n{D78-{F-5SAkrh_&I$Juw}38oi*AQ;#>a7=rI15qy9vg1-G(;MT>GGcrHb1 zJ*)M1d3_~8#jnD8l~kq{5^|%X`)mg--;R%Lv8{z=RrhdH%BmK2+kqM;GCS^R8@pSr$DZQU1|_@czg)XQjSbh83SmM9b}z6EKqhoC)re%S zlC2ADSG^dk{QK0ry;3r@dW`KTYfkauLrQ>K>wM*p)se62R5w_~_C5TU8EYe*)=}>l zg1awI0m5wZ&ZlAY7Pu2@Y8iS9`&-9Tp$Zk}dv`6{xh1+K!{gDsqseTV@`asqr_k=X zVI?F$_nGzQ>`fGY?&uM4*?9vUD;#E-bE@%|O*Ms%hW+L3_YR-1V4FzQ`n}X)^e{8C zbl7{zkzym+xEh&2-w3Tybmuk^@o`3XH+0V%QdMx7g-oPz6( zE4uVA@WJsYZ`WM=`eEsGt*mjnA}V`s$#KKY`tFzwIN=SxCEi4VcD}&RbcB!p&!TsV zhwQ)1y15r5gg`ODBP|8Gv5skvuTG^046NZDd)7*!f}Ek8$np3ZzM=(Z+9yJTX|7*& z6mlg8KL)hS;t6r$qN#P<9M50KU%i;AsE^S|1E6R0b}K9WV~JKH-={|-uP3j)sU-O- zhE;sg`%H$^2PyA&oU`Kl%WvCUX;)sZ+-^@+usk21G=Sx#XgPtEH#+YT899(;CWK#J zrae84+KLC4!L2(huW(sDUB4vu-}MvuMfWaV{NS zV0d~x=@s7|)ercjF0wNw4wqeEbm<3KNLa3SJ`D3o`o5@U5U;#7VBz&~D{JgSu4DIJ zMo@Rha{(Npvh?NOH(QxpnGBh+7QEss|7^KHKA1ANd#tx$aGK-F-H}o=lSZ<-*!F?% z>5CiQD9$F-fcov8$EH=0Dv`%eWt3J2de1jeMVZJKV7QI+{k)$~LRtz>&h$k9RqI!Y z_C|q?)n7^?Lv@8nCaCv|S*zQAd?*f99xffk&eA~tV5=J?>FE{i+R6c|>|76bs&5O3 zPAQ4)?248Yy!uGRwYn%}I8HyfEM+;&yxMRo=DYAJ4)wD2tWKnM zU?;Jp<0+1JIgZQ;!5_rDv@SW|zV{KR3rPKWAD=q}7HDgp31FlbYWE3XrPT*y#Kk6) zlp4Y#5Tt9J)xd(?BxOH})pvij#cw&*%2iFK2;8H+drlDp6LqSQ{e0wYs*!w#;$qW> zgkUvY7w-Ou&*y{Nes*NNn~C{efFBrBnv2$}lH#36q1*BSjY`-ZloC!0wz|OzyF^}u z`lnb9Q;-A?N>ZW37z1{R?cj7ZqH&iXM=3rAoV$JCBohd${qz|D=Z`xrKM2ApNTwIZ zJ8UtIL<(wQZBD{P`QuK*7!=I>=UO8Z1V!u*vA}h9aRk3+LTNMe1C(__#Fhe=%0D64 z!y~;WLRfqkq1US~RzYhFQ#lW(y>M=96e6}_HED+k=Pq6%KSD8}q}az8597|Uqnd|= zSdu|+24YPdR^v#8aaX6Namqmzt7$|<2ti8BjR_8HSioa(ld_5`$w`5;=epCa4n?u& zLeUGNw$kgGk8Gv}O7z4QB3Y4M|E6wOl^R1mOlbi%a16Kwdb=sQMf*lr%FzOor*d z0) zl86Oh$ATB#my#oei6)Z|6Uu|~2eHux#frFVvp_6|#UesHC~y*cAo#TaGXX{db0Shu zLr!mA8X7^&J8k`HM0TPuUk-X~b|RXprq8U#++P?JKs((T+qkx{xoWUqnTlW}^5I_3Q8?Ei zg_UZfp^Orx)(^l+NCpP=Fk+*je9-4W#3q7MEFlHe zV3Gvbv0#1)8(2^3g7rl}C@B6nzC`(TC$J(8z>V_f+9}`E)|rC)_jUmSrW-Sb)i;oZ zl!Co`-ED!}IS813{=r+8G_SVAtoHfMslyTwu*EN=kOf0Lsc8U=tuD)R>wE-EMH<*3 z14is~LO-IXJh2>mxNxS!;Bh-fUBkhk@vg6iufS;6flVc5rX+VGn@9`?1S7Bl{?^G| z8({l+V{m?0P$VMj#T*pa<=4BUNaG7I6iDvSxya0GQ24SkDb35)yDZLSewzJ@b&c@0 zA`R{ieKqYHfK;8>voA{D5;#uctZWn{W-!7a2MS3vU0oNfNXSpMDT+*JgW=$iu^(cD zitaiLM8J#48oLC|Rqb12#K4=d8*wy}buO|81W**S7F~0=l5!O-N#@Z5l9CFd;j_Bq zBJudUEXP8Afx>v5;@pO=b6s_O zf(u86G^6xuQLJ;}OMY}|Ci6og2T40$=ei4of)o6iZ2v7nosywklUEfXZDN7Mog6Ox zG9xy9#>P(~gdq#nraYEA^qZ5n(A!5bj-F6(o>(#|KT@bRcIo}&7Q5iTu>ci0XK&SE zAkD!q+!0yE?V56XJ^?ireyVWcd&LE`7RBP66w-wLJ`?G5<+tJ%*~U$g)q$fzLEZIW zLNrQRE9`xn?sX6}#t-E7VoVUyzNfVXEfNT$2^_;_%Acc9oihZF!3u`7 z-?S3v0_6ELCus8&cwe>ft1c9Ag=Pz4TrOV3c5~}hBYSl~R*ujK=QZE>y zMngljC2lDac>dNFHp^R|9^`-wJ1DFB$t_i!LE1e;R^s5FWhu3+n@?UgbLhm-VC~Gn=&vN z&J~k3*!#L->&ii5OW?L9kZFNk?QlWMfnB%?Fc}+~vOht?ROMvv9*j(#@R|>9o|ypM zpBrUcN=|O)Gn|O?_gNckLt@;lZ}Hu21laa(NyIFg5_NsG9mLlo>jOuO{~G=qT$tQv z;2j2>IR~H)V$IrMT__Nz2&bffmENV`&{d|pynd}xfo+X#c>Y0oaQk!ohyq_e9-o*c z>?EhvPn{fAeM6|#gwFc4ImnDnOt2Y@AR4_46T)SDQjji8y2<(5WJL#%nkgMLk{qt9 zN*+)y{xJ;|EI58dI)Qb=OXWV5!~w)}9DWH&9|%qmRw90clSRnNeP{!T<_jsWfeUI8 zAj}6Vuxb*zNcFgUMCW_WWQHZ=5@HMoXGR;%-Y0oblW9u>X5Ucf8!H}s%QJ=a0lpaJIzEKDN$g$9Kd=8YDxo{}LfL5uzxBiWB0ZShu7OqVf2Lco*t#u&$KZK*b=c<;`G1N2lIpMNEXym^zy&);s1IB6JD=usno! z`5TSPl?9A4X+30;T=CcafH`Bj*S!@p&4upN*Ivr~W77d`BXAT^G;kuAw~|-0Dy{W! z?_!kMG;oGZ&9G`Y%fH&dRB`%Veqqh1qj{OJpDBo*a-GcU?N;P5t4Ko$ZXA{9?hL)?3|cQ?^4X>n6Zb zNCM*c{CCvo1-NM>%Z-LtNra`tQeTmVnZqI=NbibC7qNywTHi}9PRyKw_On5e^%YvdHulpp1$j|F2dfiD2PVf7LdB~PDmhd>IU3GI-K{HHd~<4gh_En^ha5eNg|iavT+?IQSoLRE zRD4kQp^c!&z^0z3t-E00aL~}fvzwGy>LDm`Z;JDM}B`TaPR(JOh z*m<_J7mUxN)5o;#{`pb1_P3R+M58};em~v^k04u7)-~-eR`E04szhiohG-+qw_g43 zvw1oe0(;CFMA>P0gLd9V7|*He5_hB^>mcp{+h7`?QJ^=uIR;-*`=S5VXG9Wh4Em#1 zktwZ9Gy5ht406%UL*j6NZS&6e?WFS9lm?NHYjc(x8c&G+7b1qU4mR6k6Ny7Q$r!u1 zXr9NbI@N_iouO8_J}at1&Si8L97m7K`s+NINp-D<);)YFxuuzpkkJe+BG_g z3qrj-xrV)5g+BmnJ!Ll4Y?Lv6u`1d_$5UShQAIi1&aUr#HVKAXWDIy!9r3aLEcFJT z`+WM?WX+@M==jT<&Y>JP`P!j*u~Ms~(P%pvSX{MuV<>!^cME4xjqKo5lje??o#kKl z9=(XtrY%{GRC{_XQ=>CM>2{&4Sp}DOkMVPa1A?hA3g~t)-_%Qck(~dl+v(@fplQk1 zwue~JhqYHZ>R_j7K}s&7&JnJK$@T5IVEe%40aesS|9fMb()pJ{_iCr?d3*(}@};qN zfTyjma*8=GFO#dwyG9M!9c#OqH|A!3+Y*zh1+~?z)$CRhrgqqA%3>w-bs$-sXRB?Evsux3t$4| zPh#nIsqaLr9|8frDxtoeER_>QX6FWa$UtK2+Ur>+<$ex1%5q$=3sp# zp^PL_G5;w3$8Dqaeg4PHTlLVp?oO}U*P`Ca?_YjA*hI3um3_ISbmlds+hgGk!vowJ ztHc=}ZR62ih_*B8hlyG(KRguxgEt>uF2^nyh~5i0o?UuNR`SS~o>z*qf)#IPqllzc z3{K8wI?d#M(ZN@~ViRdoe%YkOb+M(hdA|PYZ)wRsem@qDKDXG@->v2K1_|knpV;&| zQ=28+_e-0hZmnQ6zsPY=oE6bp0KH)f+z!rx&`R{nQ5W-=m7&6bDJ?VKf=XlR?hGXl zm({{=*8hV(S)A3+{QrYq%S`Txk*(}QTf*_D7Wwt9kN$=a=kuS$_{jH&-an}7n`Zuk zo-Ui?q%a)MH0$z{>yhf`@ehn&XG)|lD`U3bS+y~iGXdMvp-Jqc_9>hL-qK98(+Ud` z*)E!?zUyFY**Ji?+3v9y_snsNTg3Ts$-*o1n)v zee!&Z0jzde_T~Xz{e9~gU!lZxiRuzgk!ZSJAxZL%@h%4#A6MJO|IoLI@6)x5H^{cY zL)5JY&$hQ0oQPZI=nH>QAvHUF6<^h3vw17*Ufh>}+jFq2#Q7(dsp+_+AgY&ECs zH^!Eo;@v;}`1Q$zJA3bOBlliva_<5kturre9Eke!=ljs&l;lxx4)rca8^y>C$9(VW za2^5icfk3C`X|ZHAt`kGv5*3Y)amB|r2zr#ahoWr#e46ruBA{PigGtsGB4F!HGNsC z($B5w3c2Ub40x=py&0Wfhgxh=dkcVJj}I?>(QxN=i4W#m{qI%|i3@&pA~&C(iFfem z&jR%H$2OvluHqRFB9<0u|u}&?UTW8`S49Uu2a=#JN?xvl^$DJ1pYvjHfEk@ zXH73c{RCLoq!tHzDgXNUkvlww)+xp^dfb)6i`2%BgCVcUdL22!M#K0_mWPS%{k}*< z{Zl=ci#qJ#-f0Qu6z-dUQ>et6ji&?%U~QKFKab#xx<{E8HJpGPE#|X@zgMT{t*_eP z-ZTl&(ul~fHquuGM0gKPX8d4hdo>$S@zY%KG3 z2o+khleh>$Osdv#;p0ThXJpyFD*Up#C)(I}C?T5n({+ZXX<2E)NqFS<00~A?orppz zwCcObbi=H-4lQ!BcuN1#(#|>g?{$JRW!N!78}m~p3(bQOf7*)!JY*0_}!Eo@EOrMAac*12X& z?PWTgWy(UGvwD6i+|$`Sf=8K&p#jz(NLhrgkt*XpXaNh0u#MV1&#|slyN`adC+|Z# z8xKD^zCBV=sw_0!>X|lgj-QcjsWn>F%F13G^;$ekXklG52{D$e22Uu5ub>269+k&k z>=K(iu$SwWIbPm#dTOjSo{g%VeOdI*UDroXcJ99eGuwlJ1Xt>3zAi-OjXq)t0`*QTRhcDUYVaX}jL)M7N+w*Tlmd zv8<;5wsBmuRz6?sRjxf7qz0&vaRXc6+c@xY28cdg^*lX7SMXmHR+nFdUYtUR zY{$>Yrn;8xC{0DTDMzCkmxZ8R`)`i&L~lfW^sjm$#uqc1&9gVBFLzBnl`o&fnc}h1 z`dPLSZk|V36AftRPS5fz9yDV3lehP?0W#_tnpQ1*`T}!%tom|;KeP5wUal`?KubmV zOUsS-Ld`90laKte6WMY&lZv08?Kb3Gk9?>;&Pk-fa>N#;2sLC>glvDU0g9s^M~3%= zLz#MOVr|s!AR;mD&LD3fH;RX1{^RpGLJe}H^UlxD&MQ5)MH8w1j+-s20S12Ndwf8_ z&fB=ZbNx}c)YmUB$S%J`*HO(KQm-c7VmEfH{@dKf`G0M0%TkJ?ZcGR}dt&-)*ToP3 z!2E(qp&?!!_OXYBvpddhZBa-~@u0b{5(OZ}oLuQM$+?Gw*3`!~NIdHQQb`W3Kgh5T zGW$B-J@^ib(#)48eOGT1^>@8p$x3&z)0*Q`dL(b_XoY$Y@w8-~+NMb`q$+s6#Q~n6 zD_WjwtAn?$*Xq2qseX>-uIhC>$@D}whR*>n*DG{b9-OyEFHW9CdCfmg95MYwe_O4z zUpsSlf2dzu4i%i4k0$)h_TITGlXW$jbD;AtsRia*wR26Wfx>4`dyHE5OKIi~@oH{q zu1UhjX5h(UZgs7GmsXT!EmDa=c>(DA{*GlNNSu9iSDe+}IdS}6LZptpP$+%VNDj?( z(M`n^Fmt3m@;^4ma?uYt)ccq3K)hjLd}^jc+=u8pSA@~&w=A1W{7thW?bcJ>6?%R9 z{N+zV+&kuUhD+_Ac>lTKMR-)69JEGmVuA~+V_3|?2WGHbP9}r7lfCQ<0IlZeu)?fe z3D*3C5y7d2?^;tUA1W`S63DhwF6g0Y6+9Mav|C1TSBxv*Wg)eXO8eVzB*LsS)~(Xv zZ7fxL*ebS{o`~Rk6vL@1m8lhn2m=v;E(xhiSx_O3Mj;EK zf`W(4WY^S3$*a(66M_p((npk$dcKvDcx@Zvn4>7N>P&OZAs403tmzz zk)ZD!90=0jk-EJtQT*+B!Oa!?h*V|0`i^;X8tikec{yL)(~j~>zei5k-89oPrZGhr;Np&8 zH25eXx=K0?VT%LQiqR#;p~*QEN&4KlWijZDnmDsEXCXzw^?^<5%ZN5S3FihEi2Ms5 zN-9f@9b70GPG7V0g_aqIVWef$I7g!XvHZaQ_D>a#YwmI$SmA~StiZuX_Y(&BQ_ja= zbqy3k#cm>Lc-yF-L~hh&h`4_~RyB0ZMY3TJroovoF#?3POwr{{3Vq9{=1d*&9QadX z-%)oZB-ET!6?HL+Y$nuD7GRKmmhx*jIrieqi-mGbX?!cV6Jb34XolNGgCUs1C8F^Y zB!7k;PO$bdpAy;6f>gMy)VM69BaX?1{X2KRH6y_hg;QmTaYcA{NZvQ<)4qO?2iHz_ z)s6g2z@+aOstZ2>MirNgdbfU+fjA~|KCB0aHDem_$5;KUo5tK12#5kC(H2xlwv1_L zjW$Hu3O9Ka$mP3NJnz&s<9oWTD0Hg7qs~f1eR9Sp7^T(Lzd$62ablB}MwF=~ z#M4?vlz}hGoY7$CD^|tz44MoqEu#nznY6<}00cFIChaa(nNH#I7hWd@lVHl!O1=H0 z-o1<(!vvyo$>k;#fe&y|Z9|l(#eJ=%5Bu*nr!lpS9$V^#_GK5Hx}pj03sM)m2`+9p z>i-tZ@=J|br<>^wkaIVjlqE4yFt%gGLGsR*81hkagUB@hfv(P_)w==xRBqc1u8Dlc zcDO77tZ=4PxLkp=d?XU=?@*_vqTp&WOwk)WtlS`ULs-m59NZ5oU^n075c!3^?84oF zXdH}*NPVNiC%U%FV30|pP?e@YDrqZ6ywmWLU*oQW=`7!L(nqnc4o;^Wcuq zWKRUbiQIzsJtO@ zlOdEB+%nX7jo+p`a$H>Who-I@g21fiC+H#?`{P7P>l!yGU!uRLoZ1ig8G&W zl))GV8UXCnv{Zfof1S%`jiC!?oePq77m4b(t3EQM>kv4e1}_5}3j^Um_M6aPPZgQ~ zWn#G3R12kwaIoOhr)?43x2JD$qgh5iDIuDoy{*tjgKVrBI={d`HrA_c7}NC3LqDi> zFAv#)ve&rj7TMTk*)iq$j|m-@vg*!nR)M3Won^3gyV^fA8|}TejEKoUq#)v_^*ZIZ zl(ojr`n@{FwG_87^)^*A!LPofHV6{vJLByu&a!bY2abL4P@DuU4d~UU6SFinM+KGF zXG*SDr)IgoKv>Y7KX zv^!YtUFP5IJ2;1kiOKc)w8)GCj7*$3f@sZn=F(wF9>2)T@+f=O&QM2+%YsPt9%6}HZKC}z$pd8yvRb%M4sxKnnJG(wrx?<4!oIBZjN{G?u z{R81)$wH)~uSbipiH6S_;)ki5f}5vQk| ze}nt*x)z*-lt-oR7?dmyc~;PxL{ZTLXq;-i%Uxwe4g;rjM&&aaX07?xL-MTRHFnF2 z|9FK{7rp3!w=k=o$(x^BOW!)ojXPqFkc60yk|iBEiQ2uGmMq31VNp{lr!yE+mCh_^ z+Xb67**Rv#NRVOd)Qg+L^_P!H-1p1a=df;E$DlE*nz=xD!KjEBkb-m}Y2ZL`U-1Tx zp(`PWtAz~#ltwhWPj7KYSQZGt-wN*X0|_~`+U1)~gF}71EXmX_lJH1cykg>(SBk2E zRNdh1$9H*g>Djp0PwQMV6Vgi34IW?;rfjx5WW89wm_MITsp+)^YZ^Z(o?6 zuppD?haj8XXF;sMdhNEExwu-lez-3?KLvWHNrhk%%EN zf}gG6AT(H^OcgK?SQh~+#xw=ZAE(&A^?#`S8%Y{Ty$%Az#6?Zh<&9s;yM>NT)N`F+ z-hT!Hy%y9~oydAdG|pEdJ!Hkq1JrluzDe_<;+8;Kehv^k`Z4%d{Yff8MlQ&)^;(1t zb5NbQ-d4=RLDbTrp#0+fr^L}i|4e}nqg2U1&_Y{TiLpbe96aV-^jNtjD56AVa3oG( zU+Yn4=PLs+Gi%YM+6m?|w&^E&hZ2hvVvDIFR zL4)L`{2Ob^srn*1#5|7~k)P8qB`Zb_v@jAX<}`dgmTh47QdA{LIb{O_GTw%Au$Tf@ zT|a4+XzKFOha%Av36sl4X3?|EjgpfaJ)8p1>ueYahUuA@I4f^P(1>{IH}>D)7CzyW z9{DsJapaz+&fOY~19Z8I&9(PZf$1oZDAA-@8ariTDe!O*fA8=;xDe=l{f%bB!Y!9h z#SjZ&v;EBupC{z;AWAgg`d-xPSL$9X5Fqb+*?NA^O5eKTmn8ff&+1mKV!nr|`1WqB zXA*a7?P>2R_2s4ogC;RD@ntuPH)4U61Q-8usnYn@q$lQ)z}FkP^1b;(7q6Yio3r1y zC42KWg>_pO0&ZW@TBrsve*FDi`kSyi-F%l9ud6@lJ6y0m%^j<>c2{`7TRwV9b}(+TvE3( z%Cq^#TP_Ie=`!fWd~p3*>sITSnC)@0u+66AK+w^i*=VzYGx1!ig*{c<`q1t$TN6)`Y`8cNN$_tug4321s!|s%eI7y z(C*oijo!GKxKGvCcK)KrPFjT+bWF&fJhEG0xp(+up)+7lFgWQJX z@4k&FTkQtujKUpGqlhhfX0!}Bu2RsOv#H(i&c+x|o};Sm8ifGa>D9M||zgsuvo_%9L!+-Bu2-P|=8#98m3GOgLxumfaEHBG-iR_Fl7r~VURce>u!c^%KB zuBUV4VF8MgmkxMP&eM?Bh6kq*g(oVjAJ+BrQ1_B{tt=g?^bMB_{LoNy4Rub-n|eH40&j zQE-)JKj(>R!sg-fk#Drc);+_iN@-~2x2?J%>+kjzJ#$HXgOfd;4&q21Hq`oLW4ph} zVV*8~KRgfk(F~#K2Y#9j^p#K@-xmak@B`LvbvqRO<`E!B2o=JXS%|ly5%3HeVYJa# zyol{$670(*c|Y&8N+DrvJaUn@l6ZXCDPc7^+(Swv;VsY!+0Mzi>Rl6kImR+VSDX`Xo;%=;m&e+#Fz)~h*7Aie7eFwrf-cEpsJfE@4R2cbWfRH9YaE;JcS_C>3e0XrFCL zthkX|2=TKYA6D+D4=8g!Dm{8?&pE093a)Kp)w@jfAKicbv@hCtHJQvH6r{?`f>J%mmfVAQ|e zQKn80yXI~%m1g5%uNe93V9cmL>EJ0$b$k}GmaSf6t+kGF-6!P{jSQLlVZV6oSxrxu z1iV(8RBS`JCE<~dO#T6dB@+GF8m(rC{&)P_Frpm>b`wJslH;XhG>H5$0^D2z9*2hly32YZd-WOfigbx-+i=)nL zu+B)oCb}JU=wG#wy~q9zL4Uld;GTEGeLNIdZc1s04Qv`~5kbRecP=(b-X207=2_Ph zr)p=pTMoKX`fxt>{qi7iyYU?aFZ89Ls*ag!B{=?*-`KY47j$dl>5D#j62Rrz$^Jl+ zxY+&c=aK1hNLt3&#`BD_+~!7D&Tkop!KX*H=PBj7@b7HfVsV*EkV56yi?(k*0zXz9 z?V>N=#f2Q{oY7aRSJay~>BYFv3nUc@&+~myG4(~dSMbf0X1$SM{iyDH)JP-?YSDoM zozW7sCe^Wg&4$GH&<3b{1w3d^`CQLsSL-c&GEG%pCV9Y@Utj}witN1>PSt1}qK$2i zzPIPSL?38i5XVIS^D)@qtdfb{n?N+{2F0BP4^2`8R8FIy1wAcwwp7^R23;Q>!;at| zHnfL>{&{9&&mH#UkTfu2y+u_V6H=@t5v zb}WI)9oEkR)r@g<&E!m`yG=r9d_9^Q)@!k!o~L5zEf?(C5~KbUfb!g!SkadSK8WgB z*nIC7&kbU1$qml-u489FYGz(L8{^4wxJTvijbR~s(Zu7`OSqfb`W{>TPBnJbTU28q%gL z)jtgH?i*7xF0gpL(7*D(PNJoJCxZ(7%?*JDJ@*8AtY!2zovGUiN~?SJ;xif46xYjY>|ch`tJ7PLf*ILc zV^#paBcAqztN5t8>5<%7=UW1L`p5fU2 z$&>51hQ65cfU@>W1U1Ocz~cDKI+NQYhaezf_4rH8qCFhaslHUZ>ndOBc^E!gRO}F~ z(>aZ_J)}6#bMBI&)5vR;mEf38C@}m=PGH+Vzql-a&2s~c2Atn^EUar5;@LJgz--QY z#w4s=_j9kHe=q;xtsmqpQyGfZewDN;vPmNdf!N@qye zlg%eUn{s_uEwPqO>RWwTev0?Znqli)OcsNRa*2y>$NO-WrNBCdyQL_R=5n?jN@VKOV6{m96_EhS}K_UNS8*?h>kUroJ(~#FSL5yS@J?3nla}Vd`eVSS!7b20Zr~g{wdL z_pJD(-hE2N*cq7qx=Ti(?F<#QRq?-^3kRN#?jIb_R798kFV}eIAIO#0R?klg6BPU* zkGW5n+~wb9Z#-X2tta<@mzg9yX>TiMxyViO#ue4`kz$^PZiJ5X>6#CE=!QUB4MQmU1Vej8E8qoRACD!qdZ^${s+$ejkqyWH z^#wpz!Ew6}r(?V_tv1O1_5l_J{&%$p zmGBo5rw+78fw3%4S;_)48H6K@j}cVQPtQvm53=2N7mY7u7T8Hr^`gZl9lSCF`GLbZ zdGq7Qq}uFigm6ahwRxMiB+gaVg1(!@ZYvJ*Td193W5Ab}i^UjGYoufA58DX|LOY^n z)eMCAInR@&F;1B;jje*-vmzMj0%kn>zwsj@yONBwx!+wS#D|QZuQ~fyb8_^l1Pef8 ziO&i-Ijtx&C4Z2UVgBMYaUtnbF#SP`ZTayP+s?%XbmIYX3Le4l2gD16M#7EG`0-B* z&XmKP_cQ{D2ZiUl=}B;UaD++J@^LDZUqnP6?aQrU^vaWmSh%Hk3dpOcl_cx0x14^9 z<}VxnM&C)Z=FeOG1pnZ(QrBTJrpni&ayaAq8-uJ~K#C%NfaKl9H-uW~NHaw+Bjv|U zEvHIFZ24EOuretxS~>E&M!{A~+4hZwdt!s7RQk%7Qg-&3*r3

      ULg_b7i3`~q%O15MUS_=au9DjPf$pv z7qH++ocKX5PWKrzs1lhe&CLW>Z%lEZ?h^^(Plv9?U%!)%;Kn@oOnyse1Z01PUI2xr z>c}yl7YUh`aW?0PTPwAKK3l@h^J6T4eh>epOLB5hZL( zeb?Q=&C9^bE%%j*ed3$NulqSmk0p&`HBlrPz>yj8CH6uw@mTP=3jJhc`f`N3Q zld$t@Z%h?SVZQH-vb#s$q%FS56>-PbysLEW`@?jVWJcoNV5U4qk6o*}Ws09nE2r9b zM{S%Q;B=W%&0#(w5c)RX4cJtl*2z`sQ>tY~kj(&siCYuh_< zBUJw}7N&RjC=9y|KmGB`Td~g7nA+!|Pk!q^@JGpiAa-YRRRmwBf9Yr~rEzROnXx}3 z3{l8H7MZR9@P=IH?PsDVB(nhQdCM1# ziO00!*2jvj%P|h$X-7PkBk@?6Hd-lrLmc8QjE2;l;sV{`T~ctJSJ!S=GkJy*mG?fj zG~+UF$w}kML0GAByl3@BpVS6njshUF)u^a2zlpY0BaNuY0&U}dcBRjJ)paf^*UznL zK)b&d!Pr19PZd-JRvMU ziM`Qt#lR{cDPPmj`4N#h(|X*Yj~Z{sMp24je2O4M8HPyiwpjnW0j&k=j3EF~KZgvB zM2(!&eVJ7^Hd{((l@u+>-Fo z{-bgDE+Oxe=(d6L=ka==KjT{I-SwZMPKAau{+UTfp(V5uzqaNSsRQyRU?F^pOJ!`; zPDLwhC3y8Jy@C00Y1OngR40Nk?kpl#GcAy9Irmbb(d|<6{x$5cMB7p$&Vjem!+raI zhQtjt7x_}vkxO3<1+VNFlm18@t*3_j^HK#jn zGrU=wwD2fkaI;6VmK6@&LA%3FsR{A%8D_0$%H@ptx$CWB9{eG&5NdT_xIDPf+CX@- zTrtUV_Nw9L+IIeqgtuup$-I+y`LIHD0XEMd-Lct}f-m%$8^t%nJMH>ZYvG_YYt20W zhvPx((aNg>7-sx^HBaeUZF{hNyj99ntmQzgJ|Kl7mhsW(4up~pU6dKqlj%ZB~7j^{DH ze``jqBMb>UKT&!84U5sM?ix(BU)1w^>I_1{x2F3`n(3@6De$H3pfiq3IV2g=`Q0Rc zPt)61<$rOK0)QJaN|KW1&1 z&UK{7Wf|awY5h1jzD~=}Pr_)pbT9NCwlg$nO}&TzJR5+llf1sUN^_Y-!z1={?V-#q zT6v^SB}-iGM@D_kjBaqx?lxLNGD)xT2-h!Qh=opZB^2}3ZPiU8H%=KC>76ZxccOb- zr)9Q^f>J^JLN1W{h_erdmdo^7tl|%w3)87Y zJQMTgYGUf} zo0(YY)=l?(7^KdM4v-8TW)|GBo!8ga(1l$xlrsAvf zDgTG7w~mUlcfy8o*A{mv6ev*K-Mu))i(7H0z~b(t^MHY&?yS8{K@ZCJW z^M2>N?;o(6oFtRXOeVYc=9&u?kETC%*|P&u>0q%FFTVa(fsxeGN=`>y?u?U%nAg~o zB?c=6-}O%Ix^-*a8{;`vmyNS*<8=FQx&H(1@hhXJ=B|;8o~`TYP;_MlHPq+K6LSk~ zPEi!_zBd&U$GNZnhHbTA>Vv?&QCX}L{cm-rI^1ZtzZmLcM-JeHtbFt`O zgP>ctbAqMR77DSh)~cJomqS&R-SkOOOi={9d=$brL4OHnRvxjn4bmIFZjOd(C815A zze0J%obAH8nX%KP86p!D#>-5lETMHCpb+_rD*G=QNGE}z&`y1c3R7b0Q?BmtD|MdM zRt(_(0Pm4>G@R_VeJ2gPY>8Yrg|fu7ZK`?(oT|lS6%D+qMFYnOeKeYCD#lamZ+ae8 zucic%kdK4i4I!nT-~c9 ztV_v&j^9K}=vWy~hM;-qL=mQ-rRgY=(nm=c*HjBN!-ds_BYaGeDXjJ4@RLM3I;sdK zDI%ERt>R8Wo8cA0(2%mLaG=;6rc<9sdR#gF9Zn^FQi!1 zFKsA;%t>fV4xJBS^RXqDTmXW3GkP3brgBg_dK%k;R8Tw3DNVG5aZ=LjG2~V$6;QgA zyb-N=Zi)<#%%`;wHW^HONb;Ml%2Au#PwdHl;Y-Rzh#nERii&jVdWr<_LRxnP1cJRb zN+l5t_)Jxj>%*jW9At#@%5>_wp}p~d3b095FaUi7^#QAK=-nKiD~8(s45N|3!IqP* zH`G%^I-+aFOqLD>@Qb-%nL<$Q^%Rw1EJ{f-1KLY%T4*1jTjUm{SCezWgXuH~j+7sb z@Zd{mlLTqqY&pp2^tDsaAjoWtP@`VkpP_@uhHxcC9s7AS2y$BRtn2`i5!+1Z9U#R# zEfdKd=%<4G(l0xPAUHv`*OrCM;-$9opc7A!hXf#U1Oet>MIs}9Q^aIrxZP!+ zNt@DzBsYT&6%9LiS^s6BfeuB4lD1J)N--2PJTkbi0hPq+;%UPd(E7b8(v`4T3hD>F zjB96+OCTU&3lssR{--o^3ELc&EJSonDS*4>@rS@deQ96i;R#$^A}3IXE0Q2eNe`lna$dcm*+lxlQ^@Tjk5^`f zb%!O^g%OM>tr*qIjts(oK`vg?MM*5f;SkRt7aS&i^<_X5LwpPT=uC4WJ>X-;HxvZp zAyddqfRfhZ znvDT?fb3^tYpcngkSJ_T0Fy-Olbs?H)Nd3vVkonNZ2aXd0A3=!4#)+T9sdykFMg%P zvcUqtiv(ecq=-VH)C|lnL9jUFaA1;iA$@>~3rJ)A!w?wyB!SIJG6IJhE(~mEq4Tac zAOufi6)7+*1g8FAfJQ;&Z!JP$iU+hm58(hiKy5C9bzW)#45Kb!WD-;|Nd%wzzOY#2 z95aqe8GI&kiA@8%;0F9|mS~AZGz?-0asjkE{?ilC1<_j(=n`!mg@j*`vrz*qN|i$h z3V;_Gi_VY$U1WtlzrhD}_4+k&h7ANM^b|CY*-tLej}kUKAleu7B8sp>8W5yVLNPPogruvlUZ#rDulUk} zLzwNQ#mTrF;5XSMVIxLY5aL+8H-p$4bH(d#qd-9uwny@|0D4hYNs~-{E?BQrrmz|@ z6!SmyBC?s>P{>3z;wE5cp++1mb|7-#q7YXjdsvJ5C~zQ8lCsL7b93Q%$hlkhq4fm= z@I{j-avT7@s3-}{A!?-0h&>mP4*FjkYw4K2IIIW==7}Ua0;Ie*rcGiV4TJ!G6%FB} zMR)BF9=EO4P^O#Y4SoqEj<3;-fFaP4oRE`S3oGOC_~9gx0$3Ggq>+f&Pu1%2(3Jp5 zpZ9b<0)YKdrHxnS#tCO?o2{!%2SFboHQ4-TeC<48T0u;vJO zH-L>Q)KA07q=@v>9Q2Rzr6~RG@FgmegmBPqOW4?!G671<;#On^lonDHo@L~bVn?3{ z-a3`@DXg1ax@)Op^`2Msf~+5 zZta35pfdhb6;qVND#_eSq~WwH8r_t%VP}TAh%SsV*fB-_rhe1A(TBn`NoqfY5!@dN zQ|A^_q{FA<0eP?@h)HAGzl{c>6*OGbbc4Gm1R5>{w7B4X3F-PE`mr6lGijtym!c=A z4U-QSAZ=C&*yN$G&ay0IV3*iuwtQmS;7(I2)NOqTky7-;(6EOLhh`si9C5WrX#f}iWA<$tsXx)==qm(yxB}#wmvfB0J--hCtrl#ShV=%op~(~zT3Z58 z?f37I5&#MBe1Qp(VX?eKBIMUd&e(;GpHet3iF&O;@T=3n5u^`k;GlPJvJq4Fjvf#> zz5Z~|0mt>nszEwKO9uz%y0t5U9=^x#Zr(rP6B|c7Gr_4$@NECrB5K9Qn_*OgG+Fwc zRP5_6X?6x@dxa&&xbJs~>r{b{&OHyO&VhH_N|)RBo9jKMoCX06>*8%z*druZ{v5i} ztQdEoArb0;lG9D+xqjy{GyDC1=LFBo59^iBK=#c7s=&MNl(`E}zdpK(RsD{q4n4TA zqVA>^`Hl1k$J!so#>iTvGTlW=uMQ)-u$-;J1mgAD&#w@hhXou4B^Ek>Q_9*fvCmjV z(_K~T;PqIPJs(uNpBxQb4gEvB+c4tLQqh13+OM_XI!+NetqSN2Z1ncpJI8(o&0atZ z(UV6+Gad8%p49R7a&D@FC*G-kr6Cv`;V?`7K&I9u&2{a+?o{uJSDe$)PG3ON0e zSqF2puL3t4HIKlVI00yHR;*rVk4B+^c-Jihlnn} z?u6`Hz7@kn;%|jSIS6@QHKSQFDhN-cgny@{7fg;kc z%1&}(e`+?@e_SF!jooGYxiJd2jDuUr;qNqMVppAo_dwiL>|9eWCz>>;@^}1Hh`_7o zRYEN9S8ihOb%l?H@w;8p|4xzjkPB7!Am2EeoFXIVnri!j$rTuYbynFxtHh6JAj+6F z(|_9t*oR}ttNbZBPwnp?XrIWWL1Iw?Ew+)7MDgAK^)Q6!EsYbc5`0sx{ZGa<@B#T{R%tp*HAKLy02!eFO9&tt3<$Y)C{{dc0}lX- z82{k|MyE9dF`bS0Q(QZ&v1@PON(mtC|!eQj* zm(Z8aEw*(KL$UVvfAPhH2>$DnU8X$rq6AgyRd9fXMr3JhE1SWAOe{&!1S+F}CCjD5 zuA_qERn#8_g$|Lfo8$GTd+Na3{+_FFOpAQTu&KlRY};S&!S$$~q9;$QgcBBGq2QkQ z#fZ;;Kq)_N91?rF%L4mMwY17^$==UeZv+J+jEk4$ZTr*2?1SFz!EBjkT$P3UWBRN6uU2nl59TrgR7ko=#pfWwbZj-KxmcGnmGh*{(;J93#G-NuZB zf#^~%myGytJX)#F+S<9Mseg-t>hwt)R8-gJu39dVF12;)Tyk&xYS$N^a#(Lm1Lr6m ztmr8xcGE$}nNO%z^pDM4nYy>$NKiD`g*u(1tGIjohrAbflC;`S*}%=+rSqE-HzuNDXtjaG&Bdwwbi` z!F^>@i0XH25$w_hb+tE?r;?rfJm#{@YHzxb!02q@yZ4`)8uaSsWq$QwLVow}^@C6g zauh09=3DR22$Od_KNv_G{pPZYPn{Db6nm#PFEcx3a1fb{VTYbD-^9K`|~^X$k>gOg0v^}cJI)#JxTeek7iW6KYX;U|!wx9c~C z&o{Z>?XmTI9c4Q8!+Pps5lsz?6S`aM8wGXN3qFG1%#w+G&(Lm?opW+_$3CbTQmang zA5K`VviCUVa>ewool_5RnkFnUZW=mw7M@JMq~JBo?NdH&*?o$&5}p2nY30}5S>Qdp zt=D+GGS#`^kcve<)UqIAH{}OPV70Ui{bk|qoV_4yUw`fI=&iYyxUR&N2wyv1$+v0j zis7Gf(AP{=9&z@pRd}E5D6qq*{I6bawX;8dF2Co4mWXfVdY;lO#2QV@Ae(eZUe9s# zE6Ry=GQyyv#aM1p2mTo9pc6m6G2br4?9FF=Pp$MO&i7Rf%9@Ilo%d@ObHNTv`iy0Mp zOn=A_73El=A-B=~X2+d-hL6r%{>x1U!=uPaGA9sA^!Fc*e+Vm6tA4N5_`6!0lv*fI zA&1_6p9J2)tOg7Z^%JVgKsU!<$j7mmo18hDm1s>BE=VJ}wdp+KTZB%YTzK;ZyWCZ{ z7EwnJzYzy6CGvFI1kQFW|1Ee+1m($5@e6g}U;FT3!e3l=_&R$m+u`k;gVCZ4eu0}{ z;-j+|dofv=mOb;YDI_7!q(6%&ah?4uU(JI`D1UGcgxb%&|F9GQ3I&mP6)%g1x#!J2 z#0`@e{EqRk`5CX7F4sZ-m;8^Y^5xr(DvFrbGm>r|gf*e(g#l$dwUEDlk#c;{w^~e! zW1;S1+?0Pt;+#{MdFBHqLYFtj5SgW<-<HRk9+EdL zZgmk}oLG0r0y?SLE>fV>nqMB0a=y`gDwJHOcX8dNs~0lfvJcrxqxj<)=8{=~ z*rM^fc6SV>P13qzTXXyOt=Kh!IJVQccJ7_&`&?T!SJDYJWq>BP>uF0(Iy_=?FAF>z zBb}Iv!|M$qS0ihQ0XY6y&Dn9eAivdRpPFDneV&GouW4)c2`I|WW6;wETDnc3?c4Ha zLhb51`8s}5r*UynM~VUJJul)!mup{+{vD2^Mfc2D{l#H|yj4s4rsLju#85|nupP?p zCbK)1+=5&Alt`gDt|tBL{XAKr=7}|H-b57hmZJ@kiClg01OU3jyRZ4-DE!!6ew5KK zE?H*`XMM@<3y9afyKx4!seRGscqC81&OHbJdOIlT3!f>EL(O)X*@c?&;zfHl>@wp4 z(?oYl3sODNsf=o`K7VD27GX+t@Gl-kG)|z%qnEG5fmhCh` znk{cG`)3CIWQB@kM3HE}Wt_ypX zI0>;T=z*Z2>`5-Z$Mv~S<3}l`qVfuw8GkGBHMA@`P%IP+>@E4 zys!Vbhx9<}O}>!U(~*NC#)_6;tN^zvJ>SM!#&tkD|t-J|%hA#^1VOM+XfIlzQ#E)8o;x-(b31%zV{Hs@8&1XY!DJ6Ew_)IppR6QNieLUoMG}WmdP-iz=dP(+_>1>(d%(|I@kss(B0T61}B=cvQq`)Lp;!g#Bm2 zUXz)p*3JnQj=duVXdS}z_{{{l63zc&19`Q$TT5Ln?_B#1M>rI94l}mH_+XZI8`+3! zN-#G|-X_y^$5StrL-1z)&~%x8kIw1aD;Tt1=2>JVjK%Sq+jDoS!LGMTHDL_2Pa(>_ zw)jaN?0!}4>93GFI;FY-EkpO7=uOJ@;BAMuVjsSM?lN`?!Hp&hVop1|w3*~Ww-4OB z+PwpU(2Z1+PZzO2xwqipt_^LPoMn*K6?gfq89Azy1yua8+`jHu1J6|Gtn(o@3 z8_8}lxC@1YaNQx~gF02w??+yvkx6Cqitta;jm6x`0dG9?Mr#EFH$}dfwvS|B*)pv2i zUsJk#gfz!KT`8h_?%nLwBIt1`{;9Kj`k<{XN)9yN`EByJ(d_J+6ZH>>nUzn5XXZds zQgA_0tc2eO&sgR-H0z?U&)g`rHiM^dER;mdXEMw=G&7%``rP9Y1=oC+)QHJcEw{jK z!1cq=c9vDQ+{ryzEb0~8-j_3_v%JZ0{WQOsv(yyDX0mjG5%y+Xnyd?TsG4IvpzP;` zTr%#i*Ifp6v!hf{r90@~pQQIcG_Cv4<13Y_2GhOB)&2PNS1q_U%ziU@D|c*O@z7d0 zu&@n7n8-1HUO61tv3}@(-%BX^)wl0{qjq1QP_<{eKd9x8kz8kb;E(UKGl2olx&mJZ z>~FVgE*^*E8H(OY&$VB&wD(9RS~cKj9B(RC<+&@My6as*XwtudP?>%*3;4-l_D?O{ z8@TdrDv|nqUW*tK>KT}l=vw%-MA1?)WL-+Z59#4wrXNktkJ^tt<$4qn8Z-9v$?Q1d z$SFHobge%e+OPen!H&4{bDZl~2Vw}Dch@@^{jip5=C0>49VX}%R8aZ0zkjd-nzL7S zB0Su02g=&kIcA^+4Dtd%<7jRb!6$9;>2kRrB)gW8CMG zV}JA8wJ-JpqFDUR)!S`9H$5)M!HB6;&Vn}_%1y*`K9DMpz%wMzb$9S%sn`0vpCoa> zt?P0wW6j#H@E(lteX)B1BM#3a;pN2k^Yf)F`?UseRVo$a_5NAb(WeVJ=k$g6E9^+-!1|1KI-xNKI;oELB3@2V8-Fr%~C#zXcnnQ<>wsueWa#`Z@8K zxu=Gxm3xE7(y8L%@xcZeROBF2-|ll&tG4Z}&0qbc{gz}mX+u$xu+{Gqw!6bolDNju zk6-%GRg0APVOf(zoB|W{LqYt+dxBoh`+t8&K}Y+gQ5-9H6jgoJKplLC+1o)46;M|y zK1L(QfQx*Ky2{7DPNGKnnu)`~3E3pnVs^M-c61)Qs)6l=V1;^Pp(~J@5H+@J6ydfI z#d+6JYej`ddCB5*s`Lz5NcNbRxYfW1fg-5(q0fQr#d}ncfI-OumFCck5O~r1vHl?QupX9au?|Ihk+W*7fsqwAL z@g6$^zH?mqLuGn@Rp=Qdg9isMRt^&rjaZs-;5wDcS8m5(c2!G(akkc`V?Xl+EMwktq6T zS$^@t`rNM3PU$4uh6Mx+Sey|6ZZkjDQrMucx9?x12%KSWO z$>xQ5KhZU^saint)JZ0R{wBkt7T3CUjJe{Uah)X-^(w;mEf-&dcuc?UqxBVOkx(xZ zcNwsEQJbbz{iA(l(T>N~i@X6PGm z+8D}*GE9T;v9}h!#mn!|YRbRWea0#}JpYfv+bNJK5!7An`sqOemT>J=8g_VJj5afJ zmgv$wGfdi5*eIXZ{n3f~@88l~7FgVGO)uGI!GPI)9~Rwjxi;zkB5J@dM*uyPV|Os+JEnLl!I=y0F4 zvpN)=_cv|FDX(jy`p|zK6Dm5-Ra+MmG&Sdl@pqaO@(sDUNvh{YY9GUol-$dqwdju^ z_|G{AR$V-ZUTh9&qumN1JYtnw3Z|lI(?3%T>~flxbPV%w#BU1f!}I-jdWl(84L-~I zjC6gx{t51|!cZ=>`R^GhO)atKp^g=TUV9~zzEk;uzo(7NH~a6x1=r82f==mq9)kjB z!;ha`JPZQ7bM*>b(y0~A{yv;0_-_B4-h~8!+`Pz3hn{8x$y9$W@=?|)eF4#GXXXDc zN-GBOh)wz+OS>S)lv1A0QKwm0$%`C(rd;KyJN`0Xa4^hxWLme+Hb`yjHjRU83mNCEg)(<@utxj6Qbh^9AG-@{7JSF3>* z1`s9rgA*+|xP9BTR~wq@$+T@u@-1`G)>`-FI6_X(wng zIk`dh505=?o}iQs=Xvd~MG%-Wkd9K{8}w+Vx4y12d-|hP3cqHiv(DTma53xHdd;}B z(Nz1pFly{nn=Sw5A-f%Jc-b5-HQkl8b29*$o-;t+ZWjM`wuJI@J`m>tya4CD4)Cuq1b%TP#^))H z)OxA%3;PBTTe73E9FR_xMC(dU_)GMMx6s&%g?&Xp4cS8^tEEZ8w!Qlf#&2Sz0>vkE zG0@l!?9d_nA5tSNoMKo>r-c2h;LrkGkAEzTW(Xm2{n09MDhM*KL^)|}t`g|V%ni6oazj04iH?*z!drD+~Mgkbs+DVXbQNWc&*l*$1W6sQLyik4Kh6$9^^WA#b@ zyrcPE(HoqP?3WGLd5hirPeznT($ZT(fl2PsfE0j8_eX~GL@Ry-$pq3&T%h*AR~3ng z19??sFjRq-NYfvZnP&C|5efYRV3suZ7sAmcnV-Z{+y?8hz4%j&Nr!g`A^G8Bi!3yg zg#1a|D8d#xcn5w2Mm`8`a@Au1cPKfD8itMJgo|+97K&R$ z&mdq~?53y@Bd$~0S0UOfy;StR1wk}6eAo0&JoZFwDeWkhuiL+|gTG4=^MLSWqyXGJ z>z3Thi!R`S1D2d%<$XBKl+0wsANs5{F{Gps5X7eqq}~iw8GQ_+cL=rYnvSQkuU+Yj ztoh~-2$5>BU;J`;NFU&6k_I@EW`YeVWmXg_NLz%yApe%QaA^{vMPODNh!4vyO`egL zEIc;C*J{J+Ma?O@24R>V8@b`V=8B6Au3#0QwO#>Olpt8HF6NB zwE#NXKtLp|%?g7lFiU}u%p}Dhq~4X^T7z>-Cv&y%3^%t!GDjE`o12vM2eEfp@!3)h z#u1F$JCCM*kn+>8b}Fo`BPkN%nHcn zm-54Sx>s?+2dN=GG(dyP@cdnTWa4x=SjF7}uts(i&Q#?U)IJ)3(AH0G&=BBY^4pi) z_;H|r!`DbdGkM+GazS(zXMk>3+JURB)Wl{lm)BsR9+|6A4z?eVq=JtDM-NC+Beac! zzYRzVV29rWY`ZlIz;dnt8m99BNfLyqR`9A639(U>c8#j+#7`2Lz?cuA5`B3eZG{me z`(_P{#NpiSIobWJt0HFYjjpgh{s#D>`g|oykG7zOzenZx$0f;)HGdg&o-lU8n4~-_ z7~Qx1cziK`X@0jor)^0vYh)tFPFk}Vr%lhE!n>z-2RPb#%r;Utc~gyPaU^C&oFl;pNS9j!>@O@W?@5vOBwjn%@sR+dGis3*nN&6jOq zGig0FlWvPd-|h&*>_2kkp6u3D$*Gk?g3STNN7K7s#kQSQO8<$>3$i+Qv?Ji~< zC%0nrHWM;!=`g=h-tYQ+I*a+MB=1Xj>e7}=1f`?9X4RHQ=y2Ei2iZJ6n=d-l7u_H% z=17R~(~49%+neeq$ltY{OX5Mw`zH;Dyt;rXDYLHFSVs)Z?;UdnUMCMfo}7%0F0X(u zOAkV&XYJ*sPM!`EgxtQ;w}zgPu=xfd5y~%VkAdxhzM+wn7psH03=tVw7{$lgnwCtL95EqBVUBioEFS*eAee z1^=mvP(CsCZ1V47S6`Yf6ZbTC0hHCe1E`YxUngo-=CE0POgiTJGqjd#`T9A}8pC@^ zYC7mkYrUoe7)*r?P0K{3z6uLhRgDm3*EaXrdO2g3DUbX*T>Cl6kUZLTQVnYUQYz@Z z4&G)RQL5iBt0yKJI(6ayC9*Om}xmBtLB{ znKT=ihF!BZuu<8dPD-AVBXKVDqD6eW32U7C%%iKXjd$Nqbo^JQ2 zG<{DMc5Xg#vu7>VUK&|z@yl5|P{OhfSxl`)gXSE%2lZ-?Qel;_LqYaOW^al*|4+?{ ziFqD-5!vNZw%skKL~N*$9!o2~1)NDm4NV!}X_(otbz?KL|FHgT;f%SB=fI)3r0)oO z6?4(hl3}NJA7Gl$l{Ey?#kz^pUA7wzZ0c4?)I@NbGIX4q%a>@c&CPQ(vz$Mv#(V(h zdDhsNPApNiEM1B`%$QmT691Yk3s~y;HS%`3zKM62h@kfCWgDyJ{fy#4s-o?_WAj7p z7%d~Cp{OqF2W7_!&V~HW#%rr3rvl|=ePgd?fq-VKg#k=*{yAMxVal_|oQ%<^pb8)> zgYe#E9h_RIC;2j|%C|jarYEBBIU#x9V@n)pyX?#?D7QWvMfaSn}@c{baN|4)PVRxl;erAsE-AWbUj0 z)0dmGt9qY_xRp2?-^~B`8rwqn>2oH(>I~b!quoU4Np7UJ&%YIN!V=lp!zRLljmvM$ zp%QO5?YF1WpqqHYl(^ql$x+saUn3^+TYS!?icGl4rvnv#rip_HH0M29`3c9bMt24H zU1l3j{+k?rS9N-kTQ9Rb;q>0Ks5Haj{Djv}Z*Lw_!@$V@roiTS$hq-GqlNp{wT0XH zd)+%HXQS5Zsg|mrqd>U#)?1j9;a|QN!tj3E==i7U;I1m|FB^@aaB}W|$Co%2m4H8^ z3wQmjS1`~vpKf3R=ALh}xG2bLWwm2U?(`c!$cRp~CehkV3;f@yOvYTNt` zPx!MBr}p~-wC!VsO$hdLog5Yz1`_k2NAvz|BxiJ~UaU5JIn*KVR|NjH%*n)W2s|k# z(T<3zYx=cpTIOv?c+P&p4hc@+)<50FtufJGl>l+LDq|g;ke=IHwRr(qfF<0-jIG{H z@%1$G8S)3_coK*5U9zJ%?$z!)4_*&(w-{qBeQSu7H0b8kBqtyYW}pevHPUQRqtOpi3d&G>N=`8W20?e_tHA0+mv_B zTXf+r+^d&5U(LkDJ;`xl6k^dau&w*CqpiyauT^b%@8|Tc122fG;^-I9`U0ZK18X@? z3%T*XtEEBM8v2bJ#B?<9 zEsuPf(|T50KNw8|{e^($>l}&S?sI-IEoM8e-u}FL=QtPWsB3dJZ|%8v+UB5V0*H7qej3XBf-b2iC%-b>l}MjsA^a5S7v97#`=?zMf9Y$7SR|WcG`rPAKE(2`JrP zi|J#JWe#`3w#>rf+APH*dBN}TW;>}y>f;rP3>=Q4hDVB;{T@UN+~2C8~dBb zicP4S9AAH@&T}MQ@m!qfK5oeC0<{R~Hax$pQl(K{Fb1pctzpsEu1z|<59Ymf2mtds zpqn*2{o`|3w-R;-{x0X%+qe9-L0N|DRvq6uPsaBByu%$;JsR`sO1z$9+3c5bTvRxp z`ZONa*)QI^1-~b3(o$)bzWn5RDN^M;bs24YRJIrpTPQPedGbs#%a$EzRNN?>a3&5S zauDKo&CHh>U@rbp@b=+fT2b7GX|2et_q%yVZfo@)M)!9+MbqocNvOeAuAl<@qBIn; z1rrrP(e!7Jl1|N|iFAW#4=8Y_M(x=It!2{u-=D*0Ba-u;#|I>X;F~hk_V26DqqxKg zlM(g*MoD#Hmo2%WU9%I*Ljhmt<>_`?MO#g%;ugq*R=FfR?Q-rr{JPb_Hkj09&}A!Z z(+?|)R7wxTtP}Rl{@86FMf4r6*W#PcndUQbTNAn8ZXc^*f?C^$2b-~etlp7|5aafF zpETuvUsRr8G^an?#*Hcsk9+JIQwh77T{8 zQb_Cm2RvD6r22#a0*F5`+&$c^%p5U%mQIZU;0eFm>b%~SA6)ufARICF*vD+BkHyRL zAjJ3WmtNy#meSiVz>`dWq(-iiDrZy0u1tJ;Cr?Z5KS`uk{O^WG z56h=P1qZjB%kJ7NWp{;5oHljt3i&)&h>y34Jq6tXzih5AZl6Vs)h7*R?%oUiTl1|O z4{d&`&Mh_viM9DpbO)Jj9l!Ak(i)sL&iq#{4#)Tqe`7=Wvq_@Wy)tvcCI{^|WlSa0 zH*PY-=P#hvN3Pjh+|qU|BRTTrubtCcgjsh&(fxQIyv_co5-#!0reQJ(vL@GI3^=kH{=Xj)B}zUh zO~OrPYI8-B;Y*}8NCE}RNgAM4wh__Mt6(145)cwLjp}02Jf+49^qY} zavYldU!lA(fw!U0l%>?-@&^h?pE7}3%s(|`2AvEZH0ZN(Aefh4)`QFILdY^?sfeuJ zbUB5_()(=_hk-C?R^RYl1zhcv8nq#u$W@kzc7`_GybnoNAwnx7DOBDTyH(fs9jFqn zmRIrO)e>CoHH$J!kV8qlqB^`$PUr>`1m38;F&*e5NH0Q%31Rnv>e&J>gKsL~YKFHn zFc1u!Yf`m?h}2fl_O{^WL%$;#x&$eoFjm4jaa1$|QlPR>8(Y*?S{C{WpI+o)3=`=u zz41$L6_H&^R3$lxaa%cUp&-{nw2C)2Na=8`=(b4Mg{q9owe)aoogqHNg{m74P$Gm$ zM!e?2SHXOt-;v#;gK{Jn0boimvYk9IjHHwa2RKUMm6(njrK04ZA6q3!MQ0pZd&guUU;#3GUKCD6rt8bE`X zBb0`*@GrQP{QjUR22nZskgaGFyvRC~p*r}899Q;wC?upU zXv*V{hPdw;G(uvXlS&OCcKfy{u>@jG;9=`H!ygq(ES@Vpzh9@UIZZA z>Ws_~0l+M4{fvOH-vmfZ8{9sLtPp^2>!S;B-@NEI5uL$+6G+0}#XxRBs zj0D6RG{U5OK#e3S7zzC$lX0QX$$(E4kpmh-E`oyI%0pcX&5A-;6j_3fLka(iWD>KC zU?w1ni*B}_HUpC-< z#CvoqYf@fvw&x7P@M0wk!+`$hJ}N z8zmgz<6fHsL?ssr96(2(^1dPn4h8E@!Yv(yp%bI>^?%X?#j?PWOK!@k!!Lw&vs5Ng z5U>}%z*cHLJ>dYbm0NvH_!Sjy8DKM5U+F3$|G_E&T+82@dr9r(+Wz=m!B_K%dJ}q; zeW44|>UqqB{$SXrt`Q{`bQb+6G0KB6yUJ@xYqfqCWDEElL2MLo47@IO0kCDN;6pKo z5QIuV_n0HjK@%Jc8j66kA)*ko0)$tlq`5Eq?*E`x=JYeFJwnk>MYa#c(qz{lLcp?`y z6tEI`@5W2P2o4v$3=Sj|I%o?ZTS6ynCsarzeE<{-BU)g8D1crORALFjEMOhmEq0e+ z@cXZg(U@XpGBoK1>&s*aLaD02cY;rHuyyr;`YemzamtV0zehQ!f_gx zmyLdvkA5KnSm;>ps>`tFbhK^8SJ6XAfF#yQU`!5*3M~U{v3q+r!ozZ z(<~AJe+ow@jf*X!lZ8@QM!aR7MKwZko9t7mMa_a<#TWvICH8ty$MF5dOTF(#;%^O;Tx7lKewn$c^iKSo)c$R~8KR<2k?r z;X)l=b~I8LIw`KuWox|0>%wadv>A~fSWqoIYd6t_IL17{S%st@$QUZ&04}o^G?4Uz z9Ifr`3vbzfs#LcEHo;_8BF8&mDEc90sp;SeCSnB_3Vl8MN2PlQwXNOZLfy79PVRBEvOg8*PIdqVgjJ=rK-BSrr7kK#B)z zV`=wpNKFvmu`+SAs@q+VveY&JV=d{MF%kz-vyg;gp5ls05B_&v+0qLn!1;3UG|~Xa zU$8GGfJ>9EL9&GilLUndE>q_@n$VIg;JrmQec-)q$Ki)%^)$qY-Y2Ck10;i&HrP(VxhFqAyGZ z$o83t&-eoM@CjQG51N3Jzj%WGOoYH>q|}47006=Oo-ZN^9}P|TmqI-NM9KUP0>+SH zS3yU*AjODH*@i0!4@1)d6h=_PkxJfcL%T}@gcnjW{ud)PPKRv6p-M8eG69iGO(V*T z9tc&M%>0BNMCpWES_?cp002z^qN5HUuH4qThsDdrupI(pa`^ZYAmfr`BLjxu&Hhlq zeaA}o^A!a^FeY0P07?R)Qc*b|3~F;{3w5O-3s!RLivzgCHeVwR;{%mDF9+OUp=LeN zkCJ#P=lH@#+eQGc0=359v;#sK(Fgs^Y3iiC&!21B5|%K#rQkm ze&)yOR8K^~;nR{sh=eMKNRSOce}5yrju1DxbxNxPr8%44(r2nTa6g>xK3`vK_pHq& zNO=#OMKSL!X@rl_3b^~m`97zJenw8EI)yrS20e^>a}T5Chjj#$C}RdZZy$nRGb|rm zXZ2rzY^^95Z`>6T=6RaR+x{8s2tLFcRbkB?FVR42AYQCmt)U*re!9 z)$1?yHlo=xB+6?Exr4Xj{?GfMWAHC16*CAIbier?$b95t@-sw*QjEA%1mB^r$3#Ox zy_RtClI1-pQb*T=#{KmCZ%3^SfhzOO!x!V8Y3GCd4=Uimo(+qvxZ3w6|3q194|ifZ zG9;ffxCp0>Nl^F$O*uLYZn&!~9KiK!((~&}yPV-493K5UyccGsW`%~Ph_uz(=9WMc z)mCZ8UK!UmczP?l&VE$jHqqrr<$IWl$x^e>li~KK$9Kisg~HX%l6x-G1K-#960Da4 zjQX~3U`_Y^6`G;<2G@^&Dr%mtkWWFC$l1SDM&s#Qf~R1%Z=$0ppNoH@wKG2{z<*yY zJ3oiKwVD@5FB!=}={o$p@x$4J-4p`^?rsFrXO~p-IrljrYsJrA8aUZKEpbEqAWq0c zhEKemT4!sEXa3gX`tZz?t&lp} zEr(8ghpd47Z_C94VIjiHA?(uI&lFmVMpnv(lqS*gdXw)G17G8Omz(}>utWrkp4t!g z)hST%e2?9JYOA#$NMVNSsL1jpQ-UTlb1>qtBE8I!Te54;*hA#2W=}uQJbg0AQtD~_ zg}y0@HimtRiX8^YdO!2!gB#Y7blWIXaz<3O!>L7{)^brp+vcX5 zk^y~#-)!ZIYsc<+yCpZ(GIN?B;BnMe!J*pY5h`vFM4I28Ft7T`J0{4Q`;{MdqJ2BD zV!wRG+DvAroWR=bfsI*1@0pd))o;&_Lr9s7EY2oX>h3>QgWtcS%$Pi`3=R;#SMMvv zrd^rtB_MZM?;-x#B}l-18Gvyp692Jer9(4(w&{uOb652(kNoc3gO~Xi5E`@L3tbc*GeEAfzOgz82(qkJVl<8QatZsu!TvQXu(?gU0tdv_5YSx4ME^9^~NEM3W|+K08q z%DG=D*WI@MXcQc?o;U3?BxEc(pA(UOKGUwV7m^xGUkSw}C7TqR1aT~ReY{q+b%~~b z!&I=3PsNH;5Qp0rX{9e-P}Je`59bfeZ1%ywP3Afd_F4?3APo0Vq88so1Qf`BIqvo2 zsFB=2gcHTOq_EF=OxkO8f826t=URWBmAL~t-5px#p!tn1?`(tLc-l(!@P=H_icK>l zsGxoCjg@igsPBC44ydc-;+1^))}7D%&h@78G;IS`S|7&GL;lc)2WUdG(>oa_!z@oHq=%|ec)cOTQCabvG=W8@i?d(c}{ zV;dsbbI-kjJYzAyAEO!5m-CT<2!gfe3qUZ`3I%{NH&DE{FR+AAe;K}Gk9rL+wKr?1UB6?Gas z;QhuTtPQVo#_~|lxmj5gb5;|VbR2)_c9rY@kE?%WL?|ZQHiZj*Z)&?{D3^?)(1Hy?X6)&OT@Fs$E^R&+}B_-B|OyPy+_r!3uK# zR+#`99`-w2z+AVfQ2JyL?pU~RhU*??iMCh|PDfBVEB<_r7Ivd3Vk50D zTg@wSpaanXbSJ&x6YH{iWqu2U?Cc4IEQLK{@^1A}wf#vi?rGI)OCHW|FOqXwRH1$@ z7NGyrFmLDm==h@x<4muf0*~=ZBy6NU&WF8XUd4*Jx!CU^{3B+U|^#~L11F$fM+A1?v7pPbSU@(zktHN?lD~)Vj|5L;n zC23_=M<+7n&MxI4ZnUfX!gxK;onv$(MFrBMH+j+1^d;u!>usSeQ%k*LCa80-CdO2C zbzF`{n20eiv@c}p;41PX5L(^+Dc$_A@&qnd(_xMn+gdMwK|x7WR8btO^-dev7pg-+ z*>*=3ptf*lF7dj{St~w-O!ggj_8+_LQuRTWoVMHkDy+JK5;m3+leR7t?un6@gL74s9-1zXBg8$+*1|b27V^M3JwbG%TTj;o+iw5)s~9 z)@O{&UfxyB0iOgNdjoF6(AHQy-OWt)wLSF;piOGDZidB&i{fCaZ|3fL;&eMDYNK4; zj_9Q0S<72&zhfYCLaBipyGcvURN>6+R~d7$uL$I{o2gCQ&$ROxr0$`+HShJhjP)UK zF-$*qRMY7eL|AnS+Byk$CRD#*iO#lkPxI4%iEIEU10xYFZMb#<`-X#(I9nVl_tW|b zzy+Uv=9+X}!QFvuE z+hxE55O1~r&6%ez6?x}}r*u`wP~Kc(((*!TWvbZvu&@u@FuVy0-5_$7LSxIMau7Gs zeD7Efw6g@@${Ox1L`fNf5|>8qrK%VgtMt^5;Egy zUkAk|6_pbt<~Wv$#!dUuQj@gUfSmLu2QJpX!~b%y-HoSZ7DZ(JlsWo)qzk?;K$o*T z^=B%Fvt=0#eNoepf_JP<>k07z{>5jlgEa{!kSWX8T4pBA08@w7V6zLGEp?y_yMw6G z386^-o%0B@C4>Nj4$yPd&6trtvIg#!)_aX(EHV4{MsJIY<`ZQ_%Fvi4_9z-Fg86Z3 z$dPm#9Sz+`Qf1miZ;Op4cj6BK!qKeRPI-pi4&TKJqfe()i`g%xaYf&Gt(^=Jp+=7M z{VL{a8;$pexg~9j&A(y4Pi#GYVZf}R|N9#}Xu>s+u(H>_Sl>ibpeWuD{M2DFocyj| z*{_!84u+$-q&P0NyYt|t=O*H&CjE9n7dG>AO}O72D9Ce{pS8Mg&sgLGaOcjnalg#8 zWki}sc{|Y&rQnuZU+-xn1OLD0sVk~0*vDl)oJSDd3aG!MWG&|W@XNI8yWFC$FyRDh zc&+KRECVMhi8m286clewxml{C$_aZd@yN1Gl_ymEGe5M;1nojuyeL;8?^1Q7 zJJAprvAFpPx0?2jET3e!des<@uP-k-53>2NH@R8cuGo$jQ08Ivey1N~8ENfNoVB}7 ztjFI|Rp40t_KWM~n=hA_j(%t^b;-iVxzCdB*iNn8U1B}KJEiUY{z3i2vgMT7UAlLY zHHnX)|Ku`2BaaR`@6+oRf*{djqW7`(qC#qWZ$@q6_reqW1MS^Nd0OlXOr}$b{M~D1 zi=ZtNf%-&2UujFd76EgS7L^oxd0HNcx_r^x8OzU#qAmA{2EzZ}DGQ0fxmEB&YEzqf zEbiDAi%YY}t09)B)4H$vVYLd@r5)e|K;e}en`f1_bmCP;WV-Apuor%*KA6cy;I%ed zsA|s1&gep% z^KoKXjB=Z<)jG7{aMakxEaCXB&M3<{2*K~zmo0}5X`hfzsiMqPHqRef-=Pj%8mRZx z>xF!am*)ALuozdp0md_fEV!Y1KYYx&y6DBAE2KdizeGT0#eXS($F>Wsi4*D9gt@oD z4Z*bQcLl##rgcyGvYp(d_jo%4czW$S?N+C*?NgY!S9Va-Ywf$z$L?v%n$|Cx1*h!o z&zMCRHHWX+?n$;sI>31lBM&NO>x+CppHlGg7+%e-@9NB!39s3SR8_>^<}w0no4N%h zSRN1e>sQK60qGF#Wdf#VLHE=kBb4-N%hQc#j4|piu?a1RwbbsC%u_i)mU&C@9JQYS zI)RVHl%aPwDj)n2=g9#vMebgcK*xC;XqR{V&rj#1R{7rf82pQO9l4kK9Sm7Iua%Wt zm0Kn51_j$yWJM2cmCBb;H?mqg)9-wzOJ-(c9iDb9d|ji=Hkqd0n+vsqSy^Q&2di_A z5x1ChidU}J3#l8|%ReRnPKK1c#A}P_`L~gF#77-!24*Tutv2o5Dpir5_0F(2znIvw z(IhbmV-r4K_4#*Gjc^x@0%8fM2lT~_>N1n_OWKGZ7w8f z1}|NEO1e*{HxKnmJ&P{6jjUOlC*%7X!*sHu_WP7El~w=(e7Fl~XWG`Wh>;T_u93EF z+YWc2Icftr5B;A_cauDw0wR*co4&Brza)a={S=5M1CB;RgD50sYAtsC4V!r^i{fn; zKHg6(pAxm^Q0bm9#!4;~PB=M1mnL9ynB@rNcnBjR_RJ0GFAZ<>qV zGdzm2rCVE`ioCBS87TMcfy}>{b%dS}O-PN+s|Wg4o@0JXc}10&1kk>lpvI^!6nZLLP3we} zz|6VsF2wT=Qo>A<-wp0ujE!xFZ?BD-)#iKhqa{J_y$T*xJQCFu&D6vX9BKl7rC~b7 zt*3woWsPmsjm^(?PVzJFwq@5d{A_zxca%1|y2pF=t4FT z_;lbsC_3C?gfbIVNgjeaQ4##9n~u-tc_Jtgq)~Gz`ocDICYw8_Fa=?z{G3q_mL%(p zbwJ(!N%Bi#gs1;VzfGhc=1>R`0RV+XORX}odC41dFwLSV(;gP@4aX#YhYp5=y1>9Q z`dSg=DN}CSI)>FaU&{qia^hqDT!jdyUA0it<0y($0+vV z{W0|v*ojd!o4H?K1C_;)Ik3l%U#Gn!!<~~^BkhpH@1P4ki?iZ zUu5upvL)o-iZ=?ZG?FU7wFSINL2uHS3-5@&KLGA_w?Q93j(K87$eVIt@jNj%)cWi> z%>TVDew-&B{R+j#!@~`%KE%WVywiITb(`vUe#3=4_psqkC!PEPgZ`VWp{Qeqvbt_$ zYRbK=tgVb{p=Jx2N&t6%i35xu@&>HZlF?!;1Gxf{jI%$o!jT4S+<7K)#tJw4`vzU6*j+L@ySU6j(Vw$p#(!VoBB+| z1*yPikl4cK>@%PyD^}QQyd0~re6~kye~-rv1G5aAEPn}aTMg%cQTm|;l%&%!DYkr& zO2;EuRwD2{obB~Q40Sx#zf&xyB-I9XW2429>;7;-h@~5~}n270B``}&DlPgK5ZA&!Jn4nuL(om6Wzsx#g#=~zQ69o9% z#)z6Z9UjQsYaL<%mHYcr(ETq zM99Y>BlPjj-En9AmdL{XUE!|(_@_T@E*158^x{lEyIk*-#heHntk_S|{sRAP^Loou z31P#vD+duAp(xv8&w}9Wod_*B*jf}yHCBSetGeN@=yR;m5CM1Sw80cR=Jm_yVCeW) zH1wIk>;Yg9q3}2$y=&oE1Wsyj%Hk^>J)8?3EHzk!W5&HyduE8#@}i_`)mOBn@fY=K z&;d3>z0f*u(N7BGZ)|>&{=olcN>B`}lSK9E&;ggE$Kv(d=9WtC`z6cj^ti> zeA7A_w;f*Kr%EsdxE3_hE8WV|Ug{m)>lTOPc(nwSrng{EtwgzOP*|&fnSjFD>2Qcd) z=?`fE!Lrum-76Fn-)#xW^*_hD@yvMvQk^R`SBzn7Lfv3UH%TQ9R*J-$I$aiiG{$8u zChq1yAO|uUIzY0}&|J`*S`rnSkHWZgIwmj^jWv%B&SmC5n!?_f*~q_t=$5tY@}mBu zDPUY1LT-;y*N#J15`ER+I_Z2chTEWRPMzYAgbq0C?oRaYb~D_DhujDVFo!t7h~xbR zK8hFDDhVAS9R43o;j1OJOWw8_)%5)@)Z;V`)?~og7oQu;)nd}l$pUItvc6{A@Kb1< z@o1Wo(IB7^GPRi#f|=y8c@6f6jT#BQ#uL(56g=jTwc_;dMs~o= zFZ#cDnML2hH?liSoRs0NW;^AA0ZV+KM}pSSeBK@-^C2)ZIW#EBqGyuUNx2t%BS}qg zKLmT2zg(A7tDw<)f7P&+GMj@<&`<@~>@+o@f)|Rf_{>4^vKAgSWYeyhY4QI^3f%vZ z6f%FYX~9ViOckf{V&;DZTtDa8!ubtiL`#T}qY~hs zf~YV%xgX#r!T&fj+L*n+uIuo9%|wL%5qz^pV|>CZKwp$`&ZbQ&)me}Jq1NyZnJ-UH z3=TE{0tx{K^{t$m0jvXlp~DSeMKV?Wt^p?svMpp+v%RNDhdO$VJ;XW zQr9E17X(Yuk>8?6i3-8%VkOvNTSV9jY@0S_(vSN%-=fhWKCSV zVnfF06|skso-&p!+%YFqgOlo;;+6zccBo;J$+fTQQqn9ckoc@E!&93=(>Yp;#K1bE zg3b10YH{2f_IGH7`fK8^jt#7b35 zs0gGO#eu5j!{l~Ps`ubF+aGWzmjRf*6s0qa%mN?eDVjw{lho|&ReJof-8Ha&h=$4Lr~H) z!OqCg3x}QfiQP4e^KVVqhP>Ck`-^YOK4a+HPa-=^GuV6 zVWDDzubrW8wXEA&KLXcfn@lI>fn%l*)Xc*`< z(C2SolH7dlq8NHVsVkZbLwWY#J)8n$_H{gdxCjD(QwQBOx?Mg?bLWxQui0IRJ(xo& zbF6?Vh34m%_k=9qtDvrD3R{)e3vrsqY|~M4b!46(bB@_qV!l1@My#YR1TY z5veV}8gMSNVs2WFif>46Ua2tFWr_OI$~*p)yq(2rE+Hy`Jk;z1qN?F96BjtThZniK zfcsdk4CIdbvjNx7-_lE(vW03yc&c}!k9Wx*5rtEmOUL4LFR|RDCEyJ}bmkZ+Q|i>0 z1~f{gc%I1>`|3^dOWE}b*3s&N}G zW%AzGAtq*bn(T+cPmZ)#qq|ol513Okq8>g56bTVMmQJaanf74}N+-g3R zAh;`?cvSyv^#WW=!M#b6UCEw=*nhR0IC?aQkHWs>i4WduGhy3ncm80!ap;mBf*l=+ z`*V#`CHeV1>qT|Q%Ytw(d5E6vdZE1FN%BU8dg7(`&5ubBVNcac(c8)2SC86tvl89< zokMo^@M0w8WiEmLs$F#7<8SuL$@coJ&qa{T>`|96#yMbsKh{~kVfz}Kkiz?Mr-5U2 zp3(d6BYIWab73fZ62KLSy-ksMa1Kb>{kZ)c|Hn41@s<;~>64YkZz*LWGiIQ4^Fvoq zO%iG#x%S+*gA+?_cT6nLH29pahmrAUY}h4BCwmL;X$=B^QXQS&Hnsce^M3MXhWybN zW%!}K@o8E(V=7(eBiGQv$`Z&SvkO?DU5Zf-#$dCdUIrIEGV#`&1fpv-zn<^|xyeL* z^2~`lFHETiQ8#yCYHC%>KJ}@;%{CJ}j98JAG0jCFjCgRX@#PIYHz{IdNmV0UKOcQM z9fsKbU!WLtOq>G&;QD{SiZj4Gb4j=V@yrGMi#>$=B_Y_#2_B07l#Y)j?ni_Z9Epp=oPdZvJ8$2rsDv68t$#iiWrO@$ zoK+@nXU5Wb-lp39TB2M_1;Vs1z0;Jff#;8;aDYFC(JBh8tzMr^MPMe~$NOZbfpfO|w$&kCmysh68SbZ6NWvcNoH(PMZ>wQMIONJx!1!tZdueIHrj z;aq|gKe)ewBS*|qu-hy~eFBagbD(q3HpRGF|09&Lvge=+3Uiq)fq&Nw0#?C<_8J^A zOmNdPF}R5idPW?rvE+9SmS8Vu!zw0JW9p$gPM~cpD;=B-+BNAcl?d0KCOHne%ftrQ z^P^I-0rSUys#%08PBSh*LySxhn1on8A#R*HgGtbf%aPJR#0~9sRAeTI`~p%^=vE|7 zNQgD;)`VC{9aWJmXrPl08Kng7o(H?yPbp_%;|F+j|M*RE9BoKZ0y^oMU$*1qdTB^L zV!vhsGOu&Ip#v&4umdtZKZ=sR3f%_atD_FXoWDMaLP*u^0;d85ae=owWZ*2OHe#5} z7&}a}&{ATB;DFCR@7WCA1+izw$ApO%+<41~lS2q0bsJ6F3J%Fk_8=j2sDbgiWVD*R z<^E8lf19PD5s?B)6h!{Xy4&TRvaq8w(H?Y9D_v%QhkWdgS`nU;L#$5+8yf1>5BC2G zu%NKs5buw3)vN1JuO0p{;%bMp((iOni}v?{nf7QXLX*HZ0~TUxB6HdP>FNFN!9kJG zqJO}BwTRCgIqH)#BJ6-`+Y@y~NZ^VJ=K@6xS;)xdqx`!YcXtAr{IIPw&ScPp`Y;kv zk$;m&GZ=GF@0tg|0JCkyEHSJGFrZ8d0~4we0v2Z^FmvT4WESZ> zdL-5w>;?M=MagwfPLC#l$N1+YUmE*7x*kD>tD5bGkpmn$*r+ia{+P`|N6&Zp$|oD) znC)+9-grlW57f06vj!(npsWIRetE&jKcpKwWF$_oVcb%F zjg`CA2?Lp`yx83&DSm@zu>ctAAV$hDZ|?vPxe^!@rP@7Ny!9RC0vzpP!Qy~-On>bc z2Y=-oORiT&Jyt)Y%RQ}TTSK4>&NDPu1+F=W(E}zZ$q1o^^2}s3;$iy1)y~PD@ECDx z1EEN{o0o4xva!N~qD1%1G1pze>aGZWoZMI8zrj&2LsPUKap1|_4nmC$%uY6>M*wFE z5cZ0)>6xNUu2ye-70*%K*fmQkDMoT##xp$?<&H-r)ocduA5aDzc7f|?ytXR10If0onD_67n2`MIXDQdEP4@7y{;Rj zmHjVbw7O~mZ+zhaydsmq(bhG%YuuPGmOsmfRo|jD(0WD2cRRqxDH3J=)7KcayG49k z5+59Tdn~RpM8!6+oYk@aSF0RYvV_NZ{%|B}3ef1b%`k9uDSo{@ThRM*D}W=rEFb*^ zj||o-O5rp$&;O+_j87R?K=*Rv@7Ai{>%Cv_^aY>^@Adt>Z_0h^^ZH%r?XJ&&b}S5B zsoYnp=Tyw=G2V7fXS^|WIq#Zv4GrKyNkklB;Lzyi(mxOeX#2d1tCBSrb055nrh6!; zgAD0|40%AcCy6*XmZp_5k9xl1E$X8He}}E>zP;Uq^Lk*KzfMjqynpm5le z2Vk#Fo$sGbv4>u> zmYq_kz_K};Ex1C6#|b!K)5foZLVX(m;O6~|tIEEvHdCt8m}P7e4qz`7Jq0AJ8J-+9 zyi7fNMYl|rjR{4S=K-hQ`h5C``*cCeI=b2S@YJ80I>4wZqR~%%RFr+&vlOsvwg8b# zt~^sq)Muw_Se?C=@#8nYKNXRD-W>_q=N{)e^O(%Xbg5d{jUAn5B5|ecneCGRaH4$` ziVnDMajEm^v&7`6vCl1IUa=JU4>%h2j|jUA!)abG_uMj5<1*=yYliOM=!??dCjWM( zSa%GL^Hk_ojXE7Ve|+fDSav)-^P0Zf9MGNdWQCd7#sCOMo91^;o^=P03No6W#+UDX zob@u!*ofwbZmsaEFbt0sl4C^yFU%MA@_v;M2r;$n6K{UD;QU*PnLJy&O+8X;5trVX zDrW|MPko>*6hDF~Ct@3!MeB5sdjzQ5DK0kuL9HthIgZeeCKI_!rE{C_9zhex#cmz$ zc0`1cv9`f`*iiP|P%)+VaIFsXTppj6#B+-x*b@~GA~SZ6B4`x!d|d$8;D9r~5y`wZ z+rBWnN~|fSUaPV1GO#_kG)1|$8I&^|Z4RY!Y5TP2zQd!<@pv6JNhr46*jxj7?9NJG zn>UX7n?32?-3EMJ4%}PU2AB^#SB9EqQ8WmxPR)F?^&H&`$7bx;uzl;b#Cew%eF|#PY7gR6GFEIj-&v%?2|Zp98dp+nNBYr3*QV*Td>4wzMQ` z@t=@Eyqr^U_AJG?XAI;O>zu`NV)UR!)*W42Q-hcmB>6_J5?;_v@y;fv;NxPewV86s zq&v!j;Gn^whyDF`yGOm0*4)(Ac?Y6QKw|cPD`%ZEuBbiBJA7%x6$~r0(Ws}9oOg-M zdIm3@N`9R;fN3XN)3N|=TQiF1>2;u>fn&7((@IO&QvpA7+mq7EPNbOpMmcCAKa@=` zc6C)RpJR;cRJoDLq->Q;r9t-H40g3B>X>Zre1BKm7OSHbX-Qt(y`#^LP_A+!)8U+m z%=C4jr=bx<bYP`31AN2HGXX6Rgl*OUq70l|+jmozD7tFgqYv=Br5s#G zIdlguCPx>Uj&HGsj;HzDu5;X@uXFDDu)@+>wYH8nYxw34ifv(BE1#ciA7Zy#FKF9x z_OiJ`Un@EezWe%BH0h$yEVewE#^iR+1njlXQLZTZHxY8P??h*V3NNpQcc6F$qAU+u zCa2;6XuO{ri(BUpY;8@3exdR2=%~GK!x?0q{4zsW04x&XY7DO|T?ejQw>j#WxhL+d z<2=_Y^|udJ0k=AAL8I%P$eFd4HS~@vg4{jcBUIugp0Fzxh7~3*80Pgs*U21OW{sVO z^|gV}@2y%>RZBcW_VvTfhWa=4dc*?DpcVsw0oq3vxV{>EyH-jWtD^0n;@hyKXI~cl)pa z81m^dI=MK0VlHysWc<|IsGGIs&FiS^%`xA&F%L{}I+MJIAO2@Tt&#A%YAlsbRL%lY z?>?(x-UXmPfXds}mhl@>OX&qYNZ)>FX;SWf8)2cdtdk=}DLeOhxY;5sW4e0b&bIeV zWpI2`(ffV0Bu()-LCDD<6wVLCSOs{T+WRb21(zATdfC(a{CzA~k$0BeDYLhh*Qq#E zyIW&;bN2DjtDe%Jb_n+NYOjA=f2oRXyZ16;jb~eI6No+6)NVJBGn=eLdTi{Sa+gX{ z9sL|iQRFf>i)H=prm*Q$v3D)o2K*0D{VjQu>WFC;;*C~#;5kv1~xl^~Zce!z+#T|c5eR^)@ z{KGA-7qLfBBT4S$SjZ7cWv^w)(>buK@eAlZ_UR4O1(Buhne=~w@7pUl@P%LpX1#-} zz0%8awlkkKK*L=ble9V)zA00bQ+@($pc03qsOw5!aODZ&hYCtR5`IcT;o-3TP}xLy zc}&j#grWeV=DHvHy}LZ#W@@&}OP$3*eRBEwbCZ$VJ{ zej7T;wJ77td}2Otxvc0;%``)8{6)~c+R9-GVO!`U0O;{SOa%E64+MS?CqWzm89s>( zAT)r{pTrFiOUa@nRS<2-HzX944`F<#s;ljMiGJETx6T)I!^t8guOxySzVAh#&!;{2 zPg1NmAP)oy1wiQSC~HMra!{rrKIY8l>n#P@k0EnizoZ}PmAn-&D|gG zu9DX&nXu)1`l)X&n)1#)>e6JC9xfV^sPSsL-ke`)mBZDG1T14My_ zE6up@tW+WOgM}UkbD8X+(1k@M*v^aBobHc)Hn+c$&e_ zj*fMGZ7C$5u{-enYyy4W87%l_txL&fOTA=Pq8{7@h+qAh z0V*$UeSiJO{N^S@Pr zb;D=6VdS1;im~h??h1;PMTn~Gdi_}bAl2W;(JcC#^qqkR`763&q_XCDkwkt99+U}Q zx{~nAzIL`aw&%!Hvgpb>PDuXVKYxYb=m56DRTOsE_qfTaynaW+Yad%5uU^kxIrmcO z)OO-XglZlv+KP+Q`>wn95eOX-+pqV9la`dUM@1cbl}c?j#l@!~u zlthS-Yg=#8MqCE|dO12KM*VHO)DJfm5#j=#dJbrGIv?r-J@Ws$OSK5 z{1)z19fC-V3FL+-_!35YCw4$aD@9YK^OnDCES&3ULCi1^RgJ+Srz(fOc5b^KZ^xL> zkVzt;#g+)UM@DCLpVq&@1c( zTRl#KO8G-$Q!mU$X}h~>g*LA|3>5!t@H?>&cx@#q=}?1nr~+3*N`nA@WPEYqe2qYR z>V4{nDc7(j`z&qyMZ4b+BggoEQ*9m8;*&E9tQgR-R}I1R;>&C$h~B~E?sNoLa8G{A z!Hfne$s+L56YMJ3xYp$bI5=Hz4)+MhbJ1WW1qE1Gn3IB8OyMv=+KoG?<@K&GxizzR z;e%X=i{k9bxBbHPL7xCYnBHqYVO7wy@LiHTQh)y%wn==FBeq_1Ve`qO)bZIjax&?z z!V;pxg+nJ7<=k-I!PR5#XnYw=EF-zO*`fK58oStvqTcjWn=es<8|A-%R&*rz#B$b& zGYo@Og{5RJnu`YzrGJ!RYl_H64yl$LjC@sog^K#XqAc z(!hC;K!EYdPitg!TIP}J48e@{>AQFFt+;29G|BVn?-B!c;h}-w-x9*2YKAD8mi5F& z%<|Go8%ii%0dHl8U|hbF(go9rLx)y>@Yl86RnWsijGN`ctggG)r0eNq;+;*^k*es1dYD(X zZ0&@A-7v-Nt-kcjI=(#Mza)(t{Gd@=jV;aqC^=C+X(&Z=Jb@$Huu?Ca^g##1xjcm7kk6I5)QNR5}Tm@|NU3 zYb~=Mji()^%9~ScQO-;K+xH@eNz?r25vr<45a%^f%OrmtLbj(0<9dvx>nr3kukr|3tTAe2u}D~duA6OI*u zEZ;~jAxwZI@Fb*A#)2QLO=9pQS`Yx2p@vp!t4+hNZ$3i}9ohpB8nGBrtGqV!U1EE? zoQzr^)HpM;IBW3QOia7sm~x1tNRS~o;jEuonr_%D+BphVX=U3^n4f=IZ;f5fNftaM zxEh>l8KVE+bn9+5^tXWMNRYBbFOGwJvLofb9iUq-n36S0yz;~Pj>^0MpklSnp+6C0 zy)9!eIG7-iyxZ-=78P#HAVY5FgGdMdSkVWmX#a`HxkpE%iOT2TacA9*hDp>(m#}}x5qnM* zv8uxlmmQ_bm~Q|@svLq#I!<;Zp?!-Hv9rjl%CR0&>}!fz`XeVF$5!fMn<;fZEwklj z)V>{)?Hs3Z>DW(Q($Zem(3iE!BXd=^E6xs@U;i1|kU_6(Q+9>KB+y_&GR)xj`Mi~5n3kP`Ip!B zP!v-0{QkYTtvuQeva2j=2_sHBR|ZMBcr48$68FIXS@66p!Axoh@5;2Kfmn^OTqhaVwyz zy4;v(=$B=5srJrOK!=W;@K$|%p2Xnj78C8l}BMwu_1 z%_>_kL9_KaUu;xePuDb$=bIc6f;ejA4tRfUxhaK85L5~Q0FS4#vvVS^K{rwRN6RRk z+Ei@?5EKenP96U|aL8vXWM0XH@bZnAJ4zWZ7USl9MIwbMyV)b4|njFZ2j)mG?t1VS9?II#o+FOGlf9rk! z{mNA_w)0w30H6Uf!)|690QY7w5ONtBc$fsT4;mi(lwCwOR*x%Z+_#f*caN4+at-s~ z9=}WWKVL$O{>vwJkn|m|*vKtk%gH*IrGtmbP-gzYS^1#nIMG(d^r$Sk|4M(Mj){23 zftiWfeVqR#bYT5|LQ;U&iSdP10nH?bVd?)*O{mp_+&ps-={)wYv*ZKmff0dmfI432NErd2my)*-(G%T zLpn1}=!NPxAsHkjQ6K9!oVw8on5Qkv7_b{l!G_{+LgZG=}me(jvQJBU>owd}$tf zpwe-Xl8IN9FrC=5qJY@AuhrLDe$a)tF2JcT9+YkQqDxHZpK7upnXnyc@9?RYR-ZWJ%&>Uibd;yGH~R+Q zkMpbl%fz65fP+{f5qakiP9IE`e{>2H!mZOFeYu6qou|LFm_Nvubp9uD<%X1a#9veG zm8n^tx7>-@R9y5qXX4v`zS+f-CHMWs+pZ{~gQS)P9wPah-pxBbTX@_JAp8ZIGi zv`u@wv&cvFn$6gvaD%VmFB4N^L?giRZQi)EAmls+A-b(DzUW#0s|TC?1|jyliF~X7 z2FJyZO0C2+QbbnA}TqXCL6-$F_zS z<3r>r{B5i#F;EW0xUXFlPaFRRy?L!`MA& z?W?G4rq8vG3%L=ha1YU!!dwP5L;6^sD zWG%UErj@--<@<|wOaWZg-xSH$hyhd=E5)?gyXSA=B1!jXB^nlw$fTojKc^X~sGCaw3fbN(w`DN2Q;Sd?k&uwAn zBg3X|>|HW;8?Gn6kiqVP1v(1>6; zA17?b4g$eBOjl?1D&1ZyN?LqE%p~Qt{@5g2^i-n}0uZ$rws=}93gta-3}VrporWS) z2+hskIwd%^rbn@KXKk`8ENtn`c-yfKcGr-II}^5&%x}+CFWd&D)0m`Gw3?q4FP^T6 z35gQ%p_DTX*CFg7;SrX`=~LmKlWN*i5tgd570p|=n0GcEP0J%9!+!?|`d&q?4WpFib`|t#CLSNzHATt0*bV4?(# z28b?$%&iE*$T2GR3VXtF;0?=+bBD+J`wNmEE>u!_DDXy-E;1Y9aXbLoTX(p-{%3)R zz4BjZc-u5h?Ec(l)7g;tGwS9bZhO)4f`(#Ns^DPGXMEn7OLkmIeg9%3eFkTD^`%GX&(a(h-*ig+)?sW6(BKFasyxH53r9&HlKVGx&H}BF8(@ zb*$tF6A8{n22?QuR=%11!>2nxM%Dijou-S34B;WXb?N|NIToy%#tkJ=BBqqV3pJ1~ z7LOevhWcDAHvOR#hbqZNf9{Wv*Ii+CGD|KIp#pH>zK%q;@1S8sm#;W&zFwF*&c14JThPsrzAQ7SAv(HUKBK#^u9L3B(hvJpjasV54jsW5J5*_ey*I%SX zJ^uF%<87c>br1}{Ih3W|7;2DTlDHfZ6-U1$Wxy}^tpuAd;6LM4?^WZu`PR;Kw#2m4 zg(Ycc=96*Z9`0rxbz`B>}FXepBxRg;H$`Ypp?~s!RbBdZ$b_T{|&4)?~#Hh(NZnR6v%#r4orKk1Z(l_V^ zOZvj|(1-Ni2CzYsw^oT8+{qTL0+fA ztC%lQ5`?D`ac??6eFyT^rqZH=Xs-qyfUTbeed?|FYkfLH(#4we4( zJ)W;8zVEx|2S4rv65tTl_*K#$NrYd?tlGCCHDII_Dd@twFKOwko&TC+x-8dP5p9ES zpnId@wb^UFgz>Ampw(-=(EI}c?T7{G((!A6(yeZ5gY+-sSInZut(}U;e2Lr=HD8=H zkkyMe_-!$wLMg3d)Wt23q9SN!z50FO$zFJ2mWO%hiA2~$mtYTu1TK(g0(KpWg)~)` zi~b+&Jw%|ppzyWXAMo8e#5*Tpr2)Jo)sdErFzcEl86yQcQJ4jS!dHMvSlUf5MQzG7 z?FILH2<4Nno?0-Ze3Q7VoqF3e#UxR+M(JGS>EDiAhdYf6) z)}TRP`60`a`x(XCn85P0a197$7#;-{b&N&z*B2L}=ny#Z1)7Dm9Yg*Bn;5dHB#I)X z?r>!T5CIytOob`~`zBU!)J&VZgNsB5RNUpE4AmLMZz+oVDl&?nep1H z2u2a!BydX}FV*)I)_aNEo=*_y^vDIvx&uy2z~#tpOgqR)-mY*FK97%nIw?uYK>L}F zCA6?Wh*S4g%XLDyh8c8gH_|AZibHcoTw}(pNMZ~mp!Pv$SI+MHizutq-Iq7&<;>o< zh*!TzqhodXjWll*deUT;J5xwi+~TM8rSP(1{$}2&#{W@m)|y_pPRkT>c7osX2^rn@ znUxcs`zy%!$MiD%Q$Q{UeM7zqUbg37k``_^u*H2eXyW*8o5S#XM}vf0O0oPYexk`5 z-I3B`mWHu?V$H|!#S2+0RJpX*;OU|XPR6jX+t#vp;O7R(i|D})O(o- z?6-q+9AfJj=H#lQj{9L%jSKoh9C8FR(mB!8C9(nr`OZDkG$|pFD?i>ZW>OzA2ABF1 zdL!&#<*7N%oPTqF6r?|J)<>-%k``EGHvEA~v$~{Ic|34O{umWK|G<6{w7OEAh^qN1 z5VSy_)1p`I)-X4{Q$u_hTBC_{%m)r)3oG}z%=E^)zwbCXR4dX`>n;!27><^O6Jq(U zAlJ_%jfIPPb_ROAFcN)PMNxT7cyohIXJn22(iuQBg)-?s9q?M-c zvjma~Sm7FK9^C_gAVlUEQyp8fL{$7X@BrCoS35~*=svyt?NM*xYYu5*_R(j?tk^FD zobVdOccr3g!HS^mHmCrGO2?>{&KuCu896A>1`|ZzRtiL4;;5#I8AN~B75&hn<%?G~h#0eYG+LNO2l+nki>d%mj_m~j z8!zV|iJX_Sx!M*dmNlg}+vh(%GTXlg1L0cCz-?m$8N~2C07fx;0a_ zixv;Fxw6|sce3i-_gxL-J=IhfgCu^Gk(-Cr6!DtP{i7Yy^8Hkrm#|0^nL5qBW^z}( zd=UrCkG$y^cNjbnw9K}VT7{sDP^|~xY4a3=ue+Yg0B>{1P}WU2)1t(QDe1pQununN z_eZeZUxC;0w>*Wg7r`)P_ek_79f(4Ki1vFQM_)+_H^oJP-efo1*GW^ z?I}`>|GUQ~;v|BKpZoXePnUnJXkOx4lQ)ZdciE;_iVNy6++jLX1O?bi3AiGt+KM-4YQyLUK#9!yoEd40{EX+!e-c_PTLYnE)3p!!c z$UmbwSEe~vPlazWlRK@}F%wF_9@dcP#|YzS3N=LN%S~DRP79er8>N+W*``?aB<0%Q z>{sYAoHF(60aTlhUPI@g#O}2l7qmyL{5>u>JiD!~cAPpVx~J6C`8W}OYb3w6_rZ}unOoc~L6JZs?%)i2$lHmTfZgbGxl_ooO?s>(j%QCqexjsI9mH%egu z#0Nnqyf#(etv^pGvq<4E7-<4*?j**u@BB~ z=68FG2@geF{eHrPMe$Hs0R`#$9lXFMTpq`r#P=Ui17pRee?vz6XN<{ zKyXThLzv~zF|2K7dc8gFQ{D#*_%IL2e_n}`V2{WYoV)=)IxM|iO1iign6mnUUS{W% zJvtqWlKKL7AV}1-QO#cbt}2b9T_Jv!sqi$YtFL2+Zyku8DTtk#k1beu2s$y%+8|P< z?rpakg;CQdx6+;PeR&E)Mh_YvzxXrF^x4{Ef5{0*2L=JE4wLAwDwp+RK&s%ao<9~X zb7Nc{-7(!d4!Q`d;Z9mIj2aI+{<(_;F-E%_w>btq#7hjt$pilK4Qvs?b%o6uT~(2? zmuhPK*8{BZd01_tX*U~^>IW6y(m-q$Rw?jeR2I4SC&TOP1F7f5tPw-LAD}pOC|kEZ z#C=_zL$!r?koK50!jZLiiqF054vO({-KgN_dz9*ovwB;kNfb@u^?M}}T{SbEyI2>q z#4kvV8qN2IOIJ5R%Ap+}_5vTg3BRleTxk(>2za>2labFkZdSvbc{BFW?|?K_$(I-rb z#75`T_+n2KsK#Hy!85l&PpUAM{UN=e$_t#9zrl;{s!U0L8Bibl6z3?c18(7Pb3%`! z#vd?S6JPOcxYhr#yji7t+5AWF8y;1N@%TpQNAwjOme5o#PUihPkWz0TEJv;b7?rEh zF0Tgr2exhpngcH#iA)MXuB2H-xv76q9M2!yz?*XKueNrAH-_!|-jn*+?%GECQZA~8 z-3I|(Ba`lR^E9R2&x`PiKUYhN;(+(tF^#i_^Xh7HH5c30%YX3pdHT?%Ys zcv%_f0k(RhrG=;>&@?os5EuP^ERW}598B?%69)_i^XT1?Tfqq;*b?VYQEP&bUTBWX64tCKuKXVJ@o*;z*L5ofdSM6is(5{0`c z^4G2Mi>&iYR#3Kqh?Ny>GVmLweSHGeefEI=FD93P#6^g$fm0h&%-a`{}lSI@^ zj3sJB@OERXa7L*oOeDJc;+~Oyep8#ky0|Us{Oqo68nwm0Y%*VZ>*!DP^U*ZjwWuz2 z(2kxSO|;+?)ZO#+Ywg)Dw&9cf%#LyT)i#gb-S@iw=ZA-g4&E~dxd_r%Pp>_RmC_nf zwFf_s7QYdE1BRrbt$qXIU*`+sDcht4AIt478XJY^-(HdJ11>qQaxFasgx1=M5WI@$ z=%iU)^tXOl|52oal435|(Aoqy;p~(ZZ-G6kR<$;{Kuk+3P_fb%_AMXrP|xJ(*a(Dg z{4_A}PQG&$^;%D9jyS+7`x0*(LX``#Vq+Fft0wpq{ zVceG@D!I%ilTrjk&&JOk#E{==EokbBsD4i4vC0RpC3lQq@%)M@ z2O62xih;&o))ZqsW2T)mNTEiE;HV!35YsD+d zb4@;WFstKWm3PKbG=%ee_IENOdX`+%{2Z(&ocOf8i6#4WLSmNgtQ8Y!^;Ssp$hwu9 zainpxx!(>G8MTGj7+FqLgsd4MqxTfz4+RcXhnOHhRcu766{erb^@lvMFgd-Wd~y=T zIt3ceS1I5ml3b2t_cq0s#|(y2B2v%^vPC416D=d6B_{-{MDQ9^UuB|kOQ17#pJUKg zO9{0k7b7Nxn|Y*kgMyq~oq{877NsOtavm?x?$EU!pROxHDQ+H*GBeIzMfE$ZT0TfW zVw;Al)q{?O3M1~*-hV@Bj?1W8VPhmikv}!U4N5VIafSO%guxW+in)L=Suo1g%FwxGN#Lw}GQ~CoS9>LyL)y?$LuvQCi>BlIB zV%Wkz5Ze?VAhJ=(YN#AWqk2EgKuxB_I3;svk(}0cmX>PJsn~5eaiZkLa1D7(Ji{p;z;l6yQrK;aYq;)bz+GITrlK zm{5Intbbn_i>D+Fsn(>nH+PVUdt#(ACHOzmN}I-ls8m}IqF{4p1SOdIKX^+QC{wtw zrG1k4f`lkkqM`vvWF>IxCyUT8_W5@8AS<@|=mGI%8TD+PIQny@IWbfIaDKAne5q}^ z^H`E&U4T2X5)^uyx+M9ZwvCJ9spjjx^>SJYnKsDs8pw07Ytc=|u4fMZK-ux2A_FoD z2$jh2O4G?1B9(w}4L5a7FexZ$@oz=#|((hPWd0)dRdaw2+6o9{sTUXT=>GvQ~ZR?V@j^a>(tNR|wn z3L;HJ&hKuSoVJ3S$4lxO#cLdh?~HAI#O8k09YAkHbMT8SaP09OOy z{V}+Qkiw$54433oLGcGfYDu2%nia_Emc_$3x(YKJt&?bC z82c$Mm^gDL`6$2`-&0*RqPY!WMG~5p zY|NWk9!d2B+RBYJQI-fbSIxhP0nt+sd<57a2|b`vPa~!yGrd{p*cl9&)MTJ`=AvAj z@ftvzVQ_uBH+2;-zN~Ty?F`KU^3h{9rOxO~2$gHC0C^9^B@_c*DqU*Z`n+nlt$_?E z04Z#6yoU@B!Lw_)j`9o4Ts!&M%c}5`t>u7<(nBL6;9_|%A|U`~G9~M(mIl)?F29Q= z{?8RZiH|_2zoF6)1~gT-IwFAXrmj8XF3a^sailXc}1m;%zBhddaA&LE*{9Ue_3AzXPqtWf#^popHWL zUeL40L51f0w$4cmbZ)}sWgSs;7z(p;TdG@*L!L^M(!%;jut0m7b!nVRjV06DII{Py z*V7tRf8m67*ph%lSY(Hvt43gicC0B}fL}bISwB-V+B(QeP2zeH!b&Y%#|POO2Sp_! zIm3vV01m`@H@>3dYGC1TdP92L5AmhK0f@z0b;P52v=U8`Al{q$(-`|QY+m}Fey_tt zr|{FM-tRoU=)rN)f758(A5_VQ$Lq$Mxh{4-4K_?0wwglw=F!tPJoVulhgbUKC2dAd zDc6YBBan0E@M1Jii2l{(bequT!zn8V8o|hNWQO2`L zFA(VQX!Uf8XxL4#oYVVn-HkBUZtMQRQ=c8wcL!|R*O|(lNnV=r~c$Mj{#ek4?-zPx7OR4r` z>%}uJ#qIntv;ez(&Zau1TKV#-;ovE*K-|^v-ShOK+tkwW!_skH&3=CSj*sA(WM@r)E0eO`h)-?dFa%#*SKr*aHCODz zKKJa8wUB}4z;-Ryb)%`V?jEhnQg!VKpV|W-4PR*Cf2dZ6_1mmL?T>9R%Vy4wkR71U z*D1i>zjIH|>p<6KN8Xfv$e+^ZfXe&fa3PSVzkR{6cJ1+#d-cjoZ^QQ8+$c}Zh*t!X&SH7tBKZW>2|z+*d$U;?NY;2 zHI|Xqw9L$oZ|SlYVtE&CmCY?!<{+b*j}!%zJ9eIlt~jpr(|4HcxgD{Kr*omltnNg2#?tbUP!Xq9JbS3W@snN@tyzuj0?GxABgPu9i3So^11^YqB{+Sd2C{K<;<7J@h$@ZdYvwFMYSeEv19G-mxOX zdHy2!1}kw-@;Rbq?4zyd{pA+%PhH~ncTR^J=WQ~CE$oS zjCm0(PNT6w|NPW7^p-rQA8e|$OwMPRRyHs%$pvkwYZ$7OX+lKX5=0|_e2L3!O@r&HRW zmZr)%8T5V}y%qPrO!_*Uf^Sk>qkp_OyZVfEBlM4C1pOmZrbaJid)xrQv;PrZRuM?G z3;H`*Y9gS*lQh7~R`#=k#vSgpqvMqWeCJi#)~DRZGB^~u4z35Y37`an^vqA)ZDX?R zV+jSEOce1*x=LxdZH&CF)=6oK_zrrT3lv>bkQg%57YURuQ#fskYA)H2#n%Z4!A%>MK1e@$qwIlRBNv%R5{!8j9Y&d)^N{8X1WW{GkOpmrNxqq zYxhz}bA(gztTzcL|CQ`Y9xgilyMAhje_Xs4kPm7Ev)b9%a_II+Z=#~UR)n&e9AmbL zf?1Sw`MZdzrAeiuW^~{55*~}&iX~jNy(83Id6dKjdx)tcj+8)10Yuav*kI3|`Q&5A zWTKKD=-6G)Otpw9J^$R()t7yNyIlTXLfy9!&+(_|jpU+Rh6iXZhKZjv9jyWd{m+AA zC!cZEG$ys@O#-zaEd%j|&F~sXyU5}~mX@G9)rTPsM^}+KT)j-HfYn2HCJ#ee{%u<8 z;#idGcmWB$SsEEFb~|hIf-oni1gl5ox#@aU438XVGg9FJG@kr0=-=v7ut*w z`nfzYyf?KQ=?DPgP=Cai1XPf~x2E`Z_*zuOcs}{OPIPxy`P;~|_1^Gb1_N)BH3np7 zxS>@7^Xx~B&eGi|<}0I;^s(Jp4~=$-;x;EEIt9vqAN;QkH|sWg2ffF)W|OX&SL+8+Yw;~(^!P`LW-w| zM-aJ*saNDrA; z9F@oeT@UL4io)Q9Zh$q2#K0{irpAdx#<&b_AK)HQM?&P9-0lKEZbEZ#!oa2LK;Mhhj6lp(@JpKp z)xkjkSSgWqL7U0|4{MaSo}IR`B5-XCnw>7 zi)v3?t#8KDCpcI(mljp^^1HmM8HLy6c$3fdr$QY>c}QC=zP?^#SR81az}7+}2rjfr*rRS#dSub-a!lci ziOHDKNsAKuD^T`)<6kRLc5@? z;bl`u>vI$>XQFADI*4mv`k2vgn|w?V6MXli0Luh2XX=}EAPD?iKM=tS;4oPy1M~XV z1y4W&;1Hdge9liW{VEbzLj+@|`s7%WRFG&OR-Izl+&+Qg#PIrF&fj1xBKWdoFrP{2 zr`RTN03-@77}gsuM>)B*7eKm8)o$qJG%m&_f?pNUvBzj&Z?5`%&-BfV4gT8+9DrVh z;|&*c14z6TUs-kAzj2g!~96y0gH#AFG%Z6O5PK;Bh1hau7atYK2 zg#hr=8_q6P&6GVw>iP^;H_!@4yy`C>@W)M_xqezXhmKzpSt#WDAsryTdrxx4kb5L1 z7WsH+Z%Y#!J%F4lF1ZhKf)F|QE_tW$1(ywq73j!#OSFk%fiQ=U%oRc`MNV%9X;oLk z#E-U_~y_|HdQ&`9Y6RG4_IuvA%;Z1<&;FUZCv@8ElY&SN* z4NK0~6rFLH6K)BCCCH3?WdUxf)Skp=xJ{H4;xs_&c7dD0G!T=Uj3EH+nn8DURh(Y@ z`AOLTXlFQoH#vYMJW}LYF|t5#Up#rEu-YHZrJxszuOtIcMSutrKjT*qHHD11xzJ{; ztL0CWpU{(q?BW2hn=@S8s2VW%d{lx3cL*~5AS^Z(KDRA1B{8Wl)iYScIw&Zg#@UoP zksGqNRKi+@0peK)J0tMq6Cnsu@*Q(7$P(|!mqR zhiTRr-SRO|)=vji7>9+T>AUG?!v7f`?b4`-*ng*au z*g^kON>xk+*!)3UcEo$x3EDjE8O|Y~LDw!SjKpt7YXtO{LbgoCJNPdz@PfTQtI(lq zZDq!hECoF&%{ntx~qU=_@=MS!*36l5=?eJLX(3=e6PpmI4&= zZbCeu?s(!m)Hut3fS3DQKgg*A6O29=m`!|wnuY;&9%X&<6yzRs9L1kuukiUrTYuhf zGyj3k2_c7bAOm+6ZooYw>jzp{r$JN)HBabeNU90Yf=sm-PBB7TE8aonyy23%%%yrc zBXdI)9U<~z6aI7;BK0;x{N@6dKF9`u%6S8zauO0W5L09cm{=UZ03QHU4q}ole)9!- znh8d%75swrQyQ?C_hG#;SjeGqfzIMMoA?ZzT7beJVz5{vpQEG!=#vmr5)z>d^%+BF zpD;jqIe-XV{)3W(3j(0z>cv)bi!u78H}NgM&8}S}65suazEv4s$_zJwwI#;4%x zG6BQG>@WnIKT~63!^?7xVm~9x6vgAm_U>n()CIIF2S-i`Z3d_Cp^6)7vUoybuUd#V@SID52?M8u z$=tl=c0A*s`JcTF(qI`W6F;4R0u^nMuP|W$gG0QpG~KykbwZehG%x`Ov8V#{b35uu zBpCOPPuN_zj?Vm}g?^O7=DK>K9=@Z>=&W}eb8?P5<8_&>6_pg4B`+^`a?RtmT zUA||Bu8MCY_m_?vcPUasm)cg>FWI8)#s6MF8~$&kz|o*cVsb%=sCtiiGPmDkDW@lW zX;;6_>T4_DQ3YCu_ay(sQ=i`r`3Y?O+j%*=ncV`xPFQ40qcPby$?EkzuYf-gPvXvha38S&y-kP zD9`oF|G*oINKwnCfL<0JJjiIc!bmwlU8B=+(rbg<)wdlD_^|%KH4W{cB->;!odAaA zPE-FHS2*++*EXY8W4}l^F96bD&fY|_ocK2wcMOdiZT@pNFktES3!Lg#C*j)qyZHc6 zOZgiQ^+IJ3PY%X6n&hV;t2b5ELgHDkC8L_D$igla0jTZtHT>&}RAv(A%`o^XtPgqB z8|<(pOka*A%fK4}cP9m}ZXUrI;&P-V$e|&1Ct{1|vo5b!8E0~&!cay787%UolTba@ z8L#rB@sOWe;uJ_RASouTa1eh?F>REDwGS@(LPocbn~Aji>dZEFn2(fe-e(h)%ji)g z4Tb9gC2Rm6M#?FXii1{ojo!BOo9S#M4Z1nN2GqlvlTZxeOMc#fa|Jv1FX}$d zfVHLrOiP&dn4ZMZrTfMe9EazVIHI)ZGM;Jum(E00X7AH;cWT)iS#7ftsGTHz({91z zR3_I(HS9;{(ZWn8e%`w}&CdO)A&{5|0R+lE8o@ctp~kU)c^4oz25 zZ!GZM6>1>@dzZ5F_F9ak#Ar+nD)X29ftHj2TD7Vh|E*<2cE()w-kezZiTt0127KXJ zPgiaEL+*6WkD!K1`W+gh@<~ZwffpzNr4RGr%CtWQblR2(;ExzK{0I*0d|C9rI{bgR zl0|0B*LI({qnZwlHs|j?zQWCN6ULb~yd)nI7%nz4x)ng#P~??_Pa7P*c<*6Ac8YeI zqScdkB5@n~N&V3tS-fTMD&)d7TF=)e-**wN1w}Hf^)o&)_ej{j(XU*|ulbPJn0aCg zsZQI7ZnFtD+o#{nc0u<1)qATm_rs|DF+4>?ImJ6L>R>URV0cv~`_K5hpY@88!anbT z%xrePGEYpv^VQl6Ny-lb^zn;h-eMLZ+mfaTi0QjX#MDyg>Z+2$xcG|tY;}md*w*OV zK~N}Pa#ZH?SWeRh7G|{fcCJdUq6)s1K-nEf^35moAFNW~v4dViVx)THW~}`pd`A4; z;<~@%vNROLg?f>87P-G+a#V6Vd3HFGmuMQtzV83KaYCNu8DzpeyePIm2;Jeu|2BhV zVQ(;|w8bDRs1IY*4QJwrI4N%|-E)}zdI0QqY7)}?`mE|1kav={Svk{Y0Q(0{)E8;H z%|VAL@?XRH_Nlcv&GG!&njHrptBc9}XMHaHH5)(Q)9dh)(5&=a3I1`g!>N`2cxyl_ z8A6)@UtU7XdD?)L9>M7!>BLG+VDIr&Z>h#T+d*^d7lp(2_Av#^S?*`@OG{4qlsnLt zVMe@;Oy-HK%@b{lPmg7)-B&YsbA7m02M0U$;0?znJE(|&IJ=($SHM;Ze(6r-ykiM* z{2;{?>R+F^@G^shDZ7uvj@F2CT63$&;Sw7wyzVrFGctvH3tk2NfR1k6Jd zYPWt~S=jsWqt%<3xxM_QDV$?=m8cn%w7+gx>P@<0NNqEqol)~7QsrUcY*xI|-t0@X zD9dehR?^DRgWC>+ChS+Rl+DSvk$J9B^|sG&?6=971*F``a)G}-4YnzxtUchWM5oPz zIM$mZ=ZW*CA5MkGa>_R2z9L!@H z367qX_0x5yzLc6t8>uS(+$Z<>LpM=7l0SZAlS@_fBCOzxR~O2%U~K$q)UNm$Z#R-W zv1M$W$DkRZ-ej9!u|PqI*8Ni?`tH;EPVHcXYe2&NX1o0Ty+q7W(fM4{u1N9z*Es8T zBi8FHnVN5C@Kt z6X2F@sdJYn%nP-s_infh_OUz^wr0IFimbx@+@aI*#T9&ZzZ`9W7xeg=a(;<9oS5HK zz0}VY*iGhU%%Cu3KzpV6=ir#7mP4!Qw-Dzjs=b)vsKjLVGmU(~;cOTO`C0lAiLiw{ z6lG7Fb#3_N^4q5#;``$Ltj)f>aEaAJ(~yHYK=ZxXLvysJRq-|B2l2XqP+b_9c`QB~ zNB33BUu+ZR&lUIc9-9UXZB)Phm>FS9ffYPR!xw=Q_!bPea}0XE$Z>ibTg+%lf>{|o z6hh`dwhb?+6-ZuyC011c^;nB$?Skyy)`sq?E~;y-%30WkhwgR`D|wWhc2ej*Q>2E1Y%=IK4%Jk9n9Knty5Uyajw!pt z6TS{BjP_0qg*lGii@~=WWAbNzdkwIC9eVdUwLp_Wz=2yVb=sd#G*ukh&hZ ztz$zQ44|=W*FTAN{~KU=c&zSvj(=S=6yRYd6d*gCgSYPa-b<(&lvDCo_RPV30UJyT zNkYvh1vSSJU+S@?0&X;KyCrExhAr|dgdDdX|V+&O?bA> zw^w&RKSF*!kootaYb{0M^WnIyz_S+{r8J0iJaQ%raylty`JUJoEzFCpM9isha5^Ur ze}>#q&Z78=prl+Q_g@CfZ#ucNKY7 zk89}&qu)udWspX)&?0G+rE}ugd4Ic)Wk{zMjJ{_ZDEu<&dM>m3ghyi~L~~NxF}As`e<@H#CxSP+dItFJfIP_&VgILXs?bqdCfuvh8v4LC(-7 zRbBVU+X&R+`!(G~u0zOhZSKfAYkWQbu2K)=A*M|6-;Qw2P^~#0*y^7y!V;m8m625K_<1mC8+kMiA>a zr~(FwB1)5{GFPJpvW9j#SKNe~4&7DEmw>Ugk7%S?v}_c)rx8`Y^*+q4INLy@K~lYk#5 zUzb}Aj4tZh+)0w=L67m~3^&snl~&Zwo3X3tekk}kk4G;KpK+%}>L_ZUws=JO*B<$C zH%c@Ux+|~|p$x)*PmJwHCnAm>?Yh-VyhB%&@A`5>OV$~vHiI^3%m}w8z4I4vu+4wg zO5=YHwl!;$ra?mTW+>{ClB#12D<}H@8DKXii}7zQ!GDmttvM0;H?^T*&Z}$hk-^p8 zehUM9gKDdsF~Z>anK)Ug;ily0o9NuVitAT-`r%CybWx$_>%y{wUkkUTy`bU!@{AwI zL_{Fb9udF0^Bw3H5lca-Qq$-JJwi^OJjqL{BGSV*QPA7@1HAC};WLmAUvaVC=Qoi1 zeb<#?j*P?0x7=b|khe1s#i#4voP!Xo;Ov*AM|nF%S50}5ev*rDWlmgg!z;To$F}hc zGiC_3l`z``CF~o)`M#-+qk1AWf3Qo);VP1~Uk7=GwET#JPlVBF9~(+`OX1 zrEo~y_OA4Ya`BVK-IxhxRnRzaY;_J*&}NuPbp#L#JG%+^eMR^>)>pGxNK;_-M~fJ` z!;!9~e=T(mg11B0qAQALv-zSLvq-6&3F}?3s%B3)J0{RX{B<9 ztY?Xs2Cy3gW%dCxL5aJNa+Np?v1gFdcb~(h2wleL_35 zIfCN~TlWk*jds&OAX&C_2_C)D?;2#77-%3uOL#}US=`qZ4r@ z1_d)bVNC;pU&boXJsHXK&>_@sf5XHfks*29{B?+)@|XD2tycn1}Uf%0HbZp@Lo;1paOK zxi6$%P9kDKf(BbR4)~Si=QcX9T9Gi#8mOQ?b6env!?fFCR8T=#cq}d=QK&9im){9P z5HCi_3M&95Z@w-vC=VqLiTG)PBfZ^fDkzU?If?XXxFfx55h~0IyOKCLjG%TNcycvs zXpg)}Ev%sSN&GDwUF+ju5Uy)j^YmhACKaaju}ep3bYXSNq8!CEj@&B3DHMwu39)w{ zZtrNcz*929JSvVq`$Fb!7L&2)6$87&77NR#ApOs@%|F~E^=%|0q;iuvGe(LT zAj5eDBg{7yI?KTvf%Kg3yIb(svWHs5M~L8J!_CW60sbYegpHf@TFZKh$N~%w`+M6p z7&tS69r|9mENKD^4A!Scv_9_J*24&DCShWU44g?E=}hED!9&ervXO&X4#sKRWHII< z?%fV%4V;-?LpH>KEICBL!Ci%o4d=1|14PW6b)7-DYy`8KA2=d_#!vXxMli8uDNS0= zxNO3|tg+frWN^GUVqAA(T z3~mXWW@}dluD*!8kIWbr6B;wIbrXqa6&j}eh^nLD1n*MXiL zLOT#7ByXqx8|FLxZJ--ro?Cnt$1nU}QkWKG9zHS}ZYON0Wz~)PHbfCn$^h638*%0v z16xGSsYCA4OG*wkn*xXo0Q}jmBjegh1OYQ2V@N-(n~GbHjH<~JS?fghQUOeRG!Dyz zzmlNxA$Qr_$A%I`OaZYiPS2-*{Azk2C-xIL$y(ehGM-McU*{a(R1Yx}~uG%q=bS(-_l4K({mu)Ex|)LrxIK#u)M{@JVbd zm@#k)BaU63!m{Du#aA5nJWGmJ3-~C9Glsns&?lBhZ1wHJa>T+xIzZk2dYWj#y)Z_$ z(ov%U9lrr`Kl*79I;wB}7tz3%6{y6&@$Y;$$KS4noT=m}R!qN9Tt0-!;Uf!35?Ro@ z1Wtjfpu+$gUJUvP>jYV#8}St;q}Pgzlv#1imefeVNAbgL`WZei8(o;}fk~0qeHRCdYbb7g!#!@cu&>U^RbYo3Xz@ z`T?H_oHyg$VQG8-P6f`v#k(`S_iX)GX8xskxW+J3$IX~CBKaFfVHJF>e3+OnIvnm7 z@|k{HwpKEz46bf8GSK*l_cZ=Q79u4Ax-RO&x|n5z(KnRWq^(Fg@I~D9nAC>6`iM~O`0-FYzYObB^UubLH6z|EHPTK zKh1{fJA`#^^;xzq^vMD)>D<}IBRE8MUSj>+n6nl%eFG?6&7xZ7*dT--unR;PH9ZD| zsuA&HW5_9Pf`vy=ywn@uzreXp|5U7j&+5C$OXL+gKnWSBpvI(&xybpi!}_>nTJ4IA(>*_!E#9-iX1E+)xTKQH)H3Uk82th_J6tl9%r=^OA5Rv>9$`nNvIsH7-jc||R zHSH}In(i6g7shS0*;v@S89cMeiB|*M>O7hne=4$EihN>2z+EQwgX?ch1DH7@ElULH zhl4V~gaDX9Z`Zq_^f3hKL09KA$=mAJ;oBq41_NufACuSyiH!v!(0##xEPzEu!UdE! zoC-G&n3$d6BY=Knph@|@oRBfYXo_=uP350JFuMRYVWxW%X|oYxnd_Z*4(V9%_e}S> zVTf5kPZ8Hz6A}<%3cpy3>|w%?Yam3B$vOd7@CN}2*B!E; z2*hDVjaiWc_>q>tDOKIn_qnL9Rp0B1KU%s%1Djn$-v%H>BzG)<`_YpU_4wu>B{iZh1N~Z zNGU)?4dV8&?coZft{XxJFhPA*GuEWfV~%rH~gY>2D|y+ZF+0+fkIk z@3Czx7YoJ^Hp&p=aM=&V+`&L-`{%g+AHKj-8^Fsku^@1ASlR8-cgEnYJcmaAY?ZUs zSDtc3s2JY8y1MgV)%@e5f??f(wsV;7Uec}_lBousUFn|c!VwU%dkMz6f7EmtDooX}@@ zrL8beJkpw-mV=PWn~A_eMqffy%MceA8E7KRik5Qpa*xCF0@*Kq>2|UL(e9K>L{>K095Ghb z->mYv3HX(t4B2b!EjWdSFCkKwWJBNz{$rg{ zcrRaN%Jr&!?%VWb$1~~_6zZnRGr_cjhTxIBr$fOJ>JS;!_LIG2ewBOb$$f7F)0HrM zkhYs@8~@0;VD#{1ON~$XYuQGcPQg{81V*-)KiRXK1<6;m5iW{~$E8}#=0!AGW_slz zZ?!_*D>J0kPvzh>6bv@J0~-m3Pe~Z>N-H)d z9HOdz5FFO=vve<31||BUwA|r%7U$yFgm2nRnpkXSygkop8@MLxEQ{k(mEaj>ts1nnw~K`g&~r9w+6jj$H&;}4UoKd3 zAwc}j3+t|iujMIcpRuY?hFrizap}ql3(2no%l0mMjrpY2m%6D?f3gi99jr51 zBTJ28(<hl4H<(N(2|Gh#6$fLhWiIzqzuJ;d% zA|}0^LY?)()|@KM)N_Mjo6HM$6A}wcH8k0(6XXRledD5znwG5mMCQ*}5AnEbNR8sv zbf2GMK_Jm_kd@zg2QG_UppRe0WZR1KD3TtGJ(t5Q({sdFLZd|V$11ghA{@mu$?xhu zYLVyKen)qejJIIzD6JQkkEE0$b(aeh)pN|q!#iL4B8orNt53a6dfP;qb=SBqi+l&W zNUo81Jhq)`o~_P8Xu@+#e7~CRM)z=4x9pBb1M$tmK73W-;PP7l6W2C!#C*GrVP|*u zQ$!)&CpX}UzvtAg%BNniV3c`W0!PSlmQXRNvU}sCEg@d~q=-ph`sS-fr zSqmSSR>H@UY{{`I3czk&_6Z@ZX?JMJSFVu!CbNXeAAz$)OKRG-(iH$#0QcL|n=Wi? z7o5K}y6*OpB}!o7(}pJlxdV!{+YCc(-?+oo9V)??F5wtx zV4=LJd9kc-Hl~3$hrs?DwC84O$@dkdI;UCH$z{#glK)56SI5QCEbZb1cXtQ`3GVK0 z!QI_8I1KI(Ah^4`ySoN=3l70u0(akYzVn@XfA^2w+3lIB?t1#Enx2{Ns%n7)mQk`W z7Zt|wEn8Yyl!9A(j=pYbQErQi3BSQhRcagLKRewxVh$XM-T*?DJI+i&b zKK#hC(ppAz2=O_?km>doXX*+l1mWCQ;roD5)=X)(J*FADlESRHsbDfzA{cMM8vBYUEW z$OVr^a$7rjn4vWVjhw3>DVYCA`4`qUY#m36OxU6KSnUJ94_$2o5mrp1*~Y0%=#!I_JMv zT<#AdYPUVXswM8iDrWcyIKQc zn6kc9y8N6{uM(C;P-T;sL3YgF>vy3~>AMn?g%!COms?fT>#f#=MA?W8%_ctH@8r>2 zo4t_iqKc)LAtL5#*L1}HHKeJoXp>asrblHq!gAX5*nJ$T@E$AMV8(;b;2`kX>vbUe zhpy{9g95cEO;p zwe+iUf4jc%i+WqV=5PaxTQYK+8FPKQ*|>8No%WR1+9a`e1yWO03WeZ|G(%>~QoU(O zVc8DFxjo|mPjZPRMTTPXL;NitmUAXyR`{gR+HA4f&#F9Le||+I#~BsKPE!;>UrUx% zmpQql74NH(5`M{m6>RE(n>rq>cQyV_b|p+}+9d5+Ov7ULIoX`1T$koFpqTz}+C361 z&g-BTE_W|)1)%PdWt<9a|E-=C+vk2v% z@<~fvQnKA@ZB>wnIN^=Z?`*w5zysV1*JIPscwq5BBm4@M&5lqC647yeUUa#(Jfe*Z zlI!YM+~az@iBqep`o(Gj*VSq~Mac+L9+pG$9!7DVbasN@pgsjPIZgYG=3L0Rmc^LHg&e}f^gEwC;|D4B5W0C z2{TLz0j3R_tXbKHg})q76N)4@_bWgOe>}mXBHScO0WzKqQh}~8NOoqvWPrPYc0F;R^I&B1xQ&M{g4C6aH;TqOs@2)5r*u z$R2yvHK#&`EKprC|0?I~hr8?^_o^Y;27GVaUf0JM!7hUNum-RZ-xs6J-WRpaD)czt zD)e44_g=hTaGKP`mXdjBIlm@#N=lmFz5TctMI74X%lyC!-S9EUPUjp*ei6t#TW|yO zO+6D_Qmnako`_};qIXeAiHz4QylA7TS={|9VG*NgO@usva3Vj1rOWaPud5k75IqFb z8jny>*?_7NJqzG+23_M`912p~O)HUOIJA31Et_c?3(nTpwzHrr{2N=UV+E4~AHCK4DJ2NkIjLwF8Cy^@ zU~EQi)X3{&Z8Df5Q{G5K9Z#2wnlmWM7>O{oHV+bm14yjXudo_a)n+wn*=ZE1sH@Cg zqSZO~nhyTER&q7j!9r#h-#QUY(h~b&U)ef$6OAn{7C#KbJ=AOjp%KK-vihkMjUDt>$PGw$ z=w-*>NkCKUUSwVGfqCsHeUKs74p@rG-u%}N)n*7#sKFiLF1ptANjjUDhShFauv=qI zm+qroo>jhuB0M@J+h&uF(x*NjyaB8}yn?{jSIiEJonowb6zM*vJirc)Q%1nt&O}z%K{pPPOHB%^z}zs;Rp^P-V+rJjnuDNTFw2nj2NHH`ntv@p;REq zLfiUtRLQ9`aP)XbtK=&|=N}>=^QK~AxA6CPg}@oJ*qty~#OW^^R9@FsVTuP$#>^*Z z&A_)*{XJbFMM?IWzHj;?!rgsFC3&XJO}a2D2}Rr}`e_BaSqT4l1tX?{zLFbfF4HG8 zD%7BO_~vo0R_cF^l=s;Br%ctg95SmO^o&iZ&D%;Tvb@btCjUI*QrxlddjXppUYk?F zed8lT!{gkVF&WWlFL2rutS=m6waft7&MFzi!2HAVJMWt}SNayxU4L8-t9)Th@Nvl+ z9}`mFY6n`eifT|*J^gugZ-^C4E9(?|wj_6Dy#S$cBy;huIa9Gw!4+~tfLo0%G=m&# zZ>b$i7z9OvFLjXO5OAl0=?)5&)fF3Z1Uy_ZrmI&79;A$SQ7M^ zvmabko5XyTauLaJ=7P|C)z?2Ic!JKRERAlso|iMo%>9D4>(e1p7Yp*kpJ}7yP1yf+ z%{qRo4BaypcN;_ph3~pEETy7>ov(MX`clSn_Z;%F#!Y#gh3={5Nyid}XiKqM&MT(3 ze6IsSzsf4A_<-I~p#}{^$HD??daOR$0vzxI2$msi$5b`zW2TCQZyW{l*1uQs7eK$i z;+iL=*L7wWsWq>CH&HLsLvSs3Rb}X2)}n00mf5rX)M0kv zq?(@5TG0w-<6W5MQuQ_TaS|TGDyckobI>%DJS{iw1Z4Jbuvc6YIz+5VcAPuCZR

    `>pM9LfSlkm3Or{%i#rGV|Oz7M;}P@q`Ui z!pXfpE0DVNVydU7I&LIeqhEAiP|3p6mAF-PKMJDUaRw5xZv##rU%tk0pLpFYX9iw@ zgWFHgiz=t)HTMb5^`XZ$ui%c)L{E0#?x$P7J9agQ0@FV{5sp94Asj79J~R1njfd^p zYM|%A4faT!s9}n`agBe;OA4B~8xNijpGSb_2X-qZPz||fi*w}#LvIRva3_D<7&&hD zkCg8j&c~1(49IaKIW}}?45x!02h9Aq+3h)&e759y$MR$eQ}mf$zZAG4c<$|*_M~H+ zol9FYrK2ItJ}cqVE9oxD7!evttIApVs z8b~(3=U)v`H)si56LhmtAXMOL9hWEt7DNjXb=r_Er^|L{PUp+gd-1V&9X8LJdl&w(Rj_?aa|lG^nv; zzQ6tCQgp*SYxT1BHS9U>@$aGf20!*S6A(5@Aoy#S=Kuj~9~d#8!Sz25E^M)PBN}NE zU^LRd3@Y{$W+j<(bMT6{Y2dyU-KMnZVz3Ffgw6o#VVd30F0X$+qx zpDl9pI*8$`ZP9oAfv`l^ItXT?dpk$GxxC#uO(QdP-!r}ZJFWBk=9{+kMsQ?V|C;3SU9oW}s$K#MW>B zRagU$8%6o~vq9zILb#p^F&d&XFiN5H>ObyTvD_V8R|$lBFLo#C9> zQBcOwz-?AzqNiTA`IdKi8{8r9$|tiKVWsO!0-HtiYil69K)o}UGtwY+uGC|>q zZ{K|g{OuX-p`cwj8*4m9R(N7DVFCg#M_GB!!_zO>@MAeB){nD_se|^HPy8t~jgnpn zHF?P#YRsU>ma9t9v<8?u_}qeKf5m~hI=(E;Z1vQEd5iXLyu!D${wpZs>-3%vK@Phi z<9{!Pi}WCQN!k2KjsQ?zekMh%tv4HZt=HG_2WNc9D=}YVWFLOH`B?d+uV~6rQC{I) zh)s&5t>>FCWC*p#6evff0?Ooixg7b9Q>ASz*S9`0pArV}RmwU(TYtpueiY{be5tj; z`>t0%#uzvxu;xv^IVo8$hJqFdTEu7#>L{tJRn*H+iS9%2!>?Gc zZ*+E z6ZiLusqp61m%NLrvUa0QF0 zMEladm(dNwr}X1#u0k)LDx=bCdzmQ7chl$;g9Tbiq<`T{-(7e0Z`8r=i`qXn{vBJQ zxT%)bNArxTuU2Kv3~Td1Kxm4hH%U3rb9Gj7fK#*?RllJ1_t6|`^28l{nKEIVd9Jh) z10^+J!sl@yXij#HJ!Xa^>#VG-*j4QdzB>uY%#JS!*`buqqB)|mu#4qAlC-ymtW%qg^6~mK09-T`pkC-YYTGrMgvbGW<XLC9&eci3?KS=zlB8QfTewFIW=?jR~x*N@|QJXbL z{yljFUjCB2Gx3f8%5@N&QzYbn`ip`oN`CNZOGozF-(0~p9&#iFw#XyfQsc`N>u&O) z))~xE+R~}F70EgF_l0j+6XSLl^tL7ODUmT6-^ka69Q!+wz556<;4Dw(=?z?%I_L+kk6N80fk?p(fnZtW^^?@FJ zL2k85S9ST<7dbM~Ik~V_kEBMH1PgN{%txOE?VD()@psNvt+r(S_7{TuQPu#+8K^BH z5=!J)!`C>AQWSJ~*mq#S)=`4yhqYxA^|zh$-T>QhlyjxuwF?_tF%B8&e#F7^0pBl* zyF#4K8b0nKR);6O>GwG7T|%7Fh$a(ijUd#-X_Cn62&giIwko(3?l{z1G+*9R59@{#nnXo7Eway|XU+X6} zPU50E%W!cjPE%D_-25kr`4ryHX+{mC-TaSX-l>ySM5rzmQs4Ut>A28CuVNrP3ZvL?r~&O*!HtW5VmKFD;uVwmxPbvEpk%R^%d{M!T5t-JtNb=wY%<%leTYO z^AC4RuNA@Ob4>1D9OBVc*|~e9QH>0z25c3KSVv)(kAy@2y;~jII@Q2ucRB z1b{9_*1jzF&E=ypA|KtQD`)8fln&u>OPh--IftB#Z8}VsupsfEtJ-?of>tdh$$1mI{wf?&+fY#TlZ(eUabzbZo*reW2dO zJ$uS;QAPrfR`u5rHf|!7S&4qrwjCfnUY#akZ`}B(gPCs2#D<%ni&Z~(M1%1?0A zbP?n2zhC~;$zHR_kY;qQkf+k`aqe;Yp>ac7Q`tqiB&lP6CBD+= z?zOb1uDuGj{7|#eT~+KbFa7I}M<>AO)M9o-N$|e54U>!>v@u;EK$K2#%mGA1W`^aY z{W<(aGLrQiMS)hsDQWSioOrK1#d5iqBL4Rx!4dmy-oO!JNg-vW-2N8<1gRj{sRPbj zz38Ka64+pAB=IVSdw8w`(!hQx;Tm6PoqyxrTDe_AE0vlu5mRQ?!2|~+hb9fZ!nm_f zqhHVl)f#1{`8w@(Yk=ZqbW7%U+6&6@Y+TUAiuLmcPvZO#ON|KQu?4fM`RW69u);0> zE6DlK>Ko#TTVm}t3;aD2>$>FbS|J${`>hmKtYl3_^Q^c7&dtXs3h9@f$(D?)8M`f$ zvntS?dBiP={gxf1=I<^bVkwZlWvQJh_P4(48AlfXYA$`T&ONrg{rm0k=}C4~YHL!& ze4Luqh>rJ^G0p8xUlK`%*3Z4aWRLAnjbf}pr%SE{tpfi9T7+wSj_gN@__oq3ZicxO!`cKm7$^@|OF(&U>pY6&kA+w* zbzq_>++iRnCYogbnmJk)1WlDWfY7j)Nyk8vjJ=sHU_&WQc!C@BL6;m~yy{2I2^HDQ z#TXd@&$%U|DGr_jzxAX{48V@FFtlJH$B=1Cw)}oYCZ)NFeK2p{ z)iH2kq0NFY?RI5JcfiA2dH1FLsZ_Vr=xqyu!aAGTT(u_Ihc4eHipUm)@p(3pFPQz4 z>MaIaS)#2zMcpu}7_2a=oqm*ay1Pjf46oQNEPo?#_|24Zawpw-l>xr54;36G(srku z9{$WcZM7*!D{!$fD%sa9X1sHrLe^tKZvKW`Q6gK7xce<}{1W5($kmJ9y|70&Hx}PY zpZ5Uw2P@H+l;N-4ncWRg`q<^kz%@?w_r*S=%ue-EnG!rRk018^^J$lBgQAdi@CP)I z0z7FzIlq@OhP_Br*P&s(5{lr%K_qmkgx>oy{rwb4&imiXnUA;Ey%PhJ?YA6fP^J$B zpl5eoe#{qVw=a_O`>eb{>v-`TtEWxPmoGXgwhrrmF1Knep709ThlHf}D=l38J)Hr* z3lS8&sW3fL$cub=faIZ?rgL57d0yqzDFXy6Qt>2EM zMMaErsg0sj`6di>u}zJMcP`o0F?>sN%CTiXO$aH`(?w{HEw_afOQ-#B>yp`ywtG$L zFa|+G#n2J$Kw1lM_b%ZTrrCw*R}+(Kg1wcMPRT6e+2xg;rznI@NSs#gLY3h>Pk900 zhuHa#H`_)%QO{u+CBd^69@%2u*SESqic_9Kg`Nj%w~!xjPV%@j+@6r`o6}BJL)kwD zV|fh(6^ChJXrRhVtWUY3pku_ zHhDcPZfdBVi_9w|=1*V@FyOrb-O*G9?$o?~40JHyb7Ahre_+6Gs9!8Of`oFHbci^D zz;d}hfkg*__10z>hKts=oPS1KSL1g0qX)X(sl_mN+ZqX2Z$IDS4B0P$C69;%elUn$_cH|mK-H7jFBlTv9$eUW>$W@N@{wIw`f?q8bx zqsTVR?tcmeEd8dk*KS;U151RFG#4PALQ4!AZTPZqd@-`~|0@~z`A(~NWVRh#QhNFy zu%@Mfq>|fuhkljaP8AHoiqEI3ZI_968lF6iuh@Jcp4>O8)4zv;y9V;Hd;bBZV|?Cf zwq>X6n@jb3ok)ImRldud!O=-als2v{{5b< zFtJs3s`ohNv8^nxkYo_;T=D&uH}x>+VY|P;U0uK}>~ZR${UM>UB@? zYR8VNROyz0(B{3VLTP}R_b>C7$|eB=aT9;(Chw+7w(ogZ#_9EE`^9B6BtfQp6=G@3 z9^IHpRB+IBGr4KyxAx}Zl9YQs4ODYen zG9u#3!zSVv9Bg6)WgC4fm4&F}JiYU`oZtEStN82ai8{zr($5$ZoojFL&v3qNpR}!e zkvZ6zyZ8`0raMHndqf>2S=fT}n$fv2idR^u?cM@7Wi;h59hg$U{CBDT|51NW-7~ z<{wXku8pOP*{URRvkf$HWygk<28TU@k8xwc&P||3PfXw%KMj-H3Lr{srHQBfyw8Kd z?Fpj>GvY(P!i|I4Xo3b^f4{PJJm^Sh%6C{s+zXVe^~?xIV96vN{TT^DD41)CnIivu zQ^Dt)^G!F_3rh`1GYRI)lc1m|`&bGIxYc+gM2BSe>3>oIie zu{b`C#eM6aa7U)b)#|Vjv(HNjj zh?Q^yn9C7kL%)A}(vS=RzGHS4%ZgO8%RFf;|CgrUFAetAmOVz6GG1`T4!kW=&@*@e z4&`p)-woGq%TxmO?Hwh54Zd3o2!5K>=ZY=K;bP;B=#RPYiAqLeh%0%;(e_AH7Dh$z z`Tb^X%tju`Oemk=_=_+8+-zbLnN)%q{0BAF4zX@1Q@BWh5$>=MQnX3j0U|DX8kw9w zMIxNXAj@P(`*^DI_dU6DUfHrx?uf^IU}~-FHS<(F{`_gRp56~W(`AYxZ@0x_QEJq| z7m20{e&?ndZXD)w=C*K#jFum)%>yJjtzV67MDVAd-V1S*hOq!QdLYw;1E&&}Ez((T zcrX!Gd~E@0Nc-nO?E!q%gs*E5vA;u=_%8_WUg4BB;5R@IoSv!=@hqf3VfUa9-)jN zm-FJ*^j#%%mMeGd&r-DtBY}d+^V3*RG?w? z^jp1wPfpa(ajYquT_BG>!|%r8;BeR0uZbjP>O7<* znN`4HdphI`aA?rg;54Aqg)&b-%HePeKl~H&lQFCrjwHBzZ-7RzF8#WXo`28^1o0rY zV+jHLS?6FVk}(21OoNl@B@^=2KVY|kz^30Ru18&Z=4rV68ttPN3KZQPGE~o~WGb3j z`=d))w3*x3>3u`J-b1$6iC`8liN;NO`gLUQqx! z394{3o1$&hR@p{kjK=hZ2w**w~<5w4h|e!Kr$To zfu8W0+=c%e> z5B2x8pzs5lq69VH-Mr!TV0Rgo*)yYh=_k|&CsB`prQow=l6!_F6-FSU)1FysA*KvQ z>Ah*pQoqCd{ms>nun+H@S6^V^Cr&?XPrP#3*!Xea0k-qN$NT+E*k$(qXO54zk1&4b z@ybI$I&nint`C7Aa86yEqUh0Q;?aP(FqN%thUdWL3snYXQa_q;5nBc$XcFS%Jc{7o ztGyqC4-@aZfB;;cG+RRv#V4a8Qhz^)WWS?OIVD^0Z6V14>==&QGN52F{~!P(98HNa`` z?z|B?o*^xJ(15gRYrP)T^I0D~N(;_%;L%oAM`^On!8)5V*4-_E!FqjgwMwu{Y>SPq zhyx}&A*7_VzA4sIxE`ptS<23-_T*6%uX8vodu&frRR6feiRCz;VGBy}+N;XQcM47X zI1nb_AET~94DUg=r^ueT|`^?TF(B-$)3$-KSC{87_L#zQaK*CxR7QcuRT=OOV_O~!An zl=KgkoPegg{%;Hw*Wiq)-7zB$%)+A27~cpYMP;SE=V*}J>}Zg%;gly6U8?#qGpuxe z`8+LI(Jx!|rztO~dl(RxIeeI_RBH7tS<_MJn{me7saO&#k09CR;Z2qmS?R*kh$n^!rT>!;# zzJnPOgMPJ*hcB)SXDo)l$ZYpwVLK*Wg#84~9q=SiNx5Uaa%z}(RB)a=c>K0I-Zm<+ ztic8|-c$xG@5@VkUQUrg|3YCL)+11xMLB!yBoRbkg*1kN{OyL`sGfj~*s|6_~+O}O^F9Egj2639wkf<*hf4A)1y&nm0XVA8R=bPK-rDNQ;Po_G5P<`aZ5TH_YLP?a@p8wMt7$SO+IhZiO$D)r^WF51iJMiPiz-61ir<8i-Kf^84*!P7~D zOxPy@M7d>)))XwDulc5Ejo%WcWW;!=-)-Wnb>(EjmmAp*9<{_oIl7TKdkTHrJBc>2 za0e3ah3?{-pb#*q243vJ2!|8+Guxw9`yo!IPXrm_a^}K>A`K`96EDrqfswaVO`-;; zg5!$9?3S}I*$itnI%LU#u^32e6q%5+27~53bexuZec?e5k zz{t)Q{A>a|>;jGRSh;DEjPVQ#jAWU1O03mnd9QX&3wTZ?aqGslIQ>N9lgtS@voDM$ zzrYR4D>1*{EYHNh^O9+SE^f&b0mMv?ctnT zs&PuyX|_g~k!MN?Q|29+eP*<)Oe@ub!XlZY7fkxc&CX~_G}%Wu$d3`9c)o&L0Br4Z z+VX+rv7&6j3vQ2KTu4!=@&$TMBev$WAru8phnfeFm?aiq!zZBVDcDW{ME+{cdKQc2 z<7Z$qUK-|>`INjQ3NxA4lhvDCy<3bykMZ~(?No=7o2i_wDlsrYSQn*W?>_|NEFDqs zX3XfMCAqn1=~fFdhWMmC>+|T502)ZEcLx`bxs#``!hB}a15$D%9bT*yH3N;}0#@1x zPWIiT{Wb(zW%>CV*NL-*#_6SA5%!ct1C5db*769>K33&@4`J$>jPw#6{SvA}6jc|k zzu&*}@D!wbV0>cSWhS?h0PIymq z%A5pvm*pZ)fI>TtWo7~RxCP#xZ-G8OGfqVamvCiE;z#R|A5_XQM2Sjf8Q~g%8qnY~ zI^18&w)WmsBg93TQX4g3sbi+ZttZySz}$b%>SM0?d*e^o#Fw(g21}f=uI<|#SI?L1 zis_(YnZfG9b3?1>%n+hg-7wqrRtVJaZ#BZk8kUIz-ZQsoQe}DvWf8bV2U_CdD!#ylzgwFl-DfjEBe*I_yDFD0C5YJ84=`?O-8-iur!?U0#eJ$lpUCv;`LSE8sx z#da3PFTGxgM|x&4^m}b%MV;Q34+ks^k7?r(NmcEcB<5fzA9vuOk~+loQOynEZXY34 z^qYPL($?=hgNTm`D{&nq3Z|=c_Fbv>W01o-XLs2n<4vMG5>akpPJ=uL;Pc7%{B_W% zDs0ZuDDvYtc?fSL!Z^9-p4HUhbB`hV4nia~_TJi9CJz4IwqyU{&s9aiSohu2nGO;*oLs^gm6 z*3)YE$jjW>13*MaRu<$q3zOh;T{XCA;+Ui0%Cf@lwm)6$zqvpba?Rf!#VhrvAAoo^ z8BOc8b~YiPaNulUtEOs!>!(mS;hBTXBRz4N@QyRKvZIp3a~C@|^|6-K1K(j=D>A$a z;n;Dmmv|B@a@x<*95-zoTmGe2qBs!YR?Egy2N~;$%0;eyV6ukf@Y4CGH z$T4sAG-`!H;Qw~Y3&jsMXn;X{?D^0Ncb6(+M`TB+v~`IaW#Y=^Fhq^aztcy#EFN2k zf+Gr@b?`sz%OEz%oo*OmrU4%z#wwqK={&t%+s);7gp#FS^F~e%0F>Ljj_$Layz;?v z@<_@S}510fG)=Re@^cE0>S;BbM!k=O~R z_Am+y!g2c#1G*B+*B3h&^A)(ZYDDiF##P}ZB}^Rgs&2s7x-zzQE;jFA z1_*Xzhyv9(Hr^1+JCPk{3EZ?fG3eKx9dB8;&_-`&{2z;uNMXk31Kh zwF_Att!e&^fyW9T263B|Y8swq*I?&gZ3_q4C2TfZ+mFf~DX&EkT4L>tw<*0j(`NHQ z>usC!xqDw{WV<-e@SMHvJA9=pc0J81fKk;u#d8dj_;s}|tuQJLZ8$0CKp*jz=e7K- z={c3puLrj!#9~>_W}oXI?v_NOyf| zky@VljMjDE3UNI3nq2A~@+LU4zq`+r6WJc=weAr64)GTYD7Jjb=vk?!2t;UF1)3YS zZ6`cGGEZ68(n5|>bE4MKHZ6dy+gv$?XDV7XVks{SFP!ZsE*0FYt=Pxe$t|*hA$6zM z-^_oA{;-dEN2(<}hTR75>e-U>99{IWs4K+7aPw>gF~tf#iv|7BN}l)p!`B|rAy^(X z)iy>JHa2{y=)YUVjW{btGQlK zuyGpYmqxwQt6Z(7uQRRossQ>VxvfW@nihM@N!p;5KIBmNuH1VUWKB25Vr&X$S22b3 z@8(S?3S%gaMqmE!Ct?Wu3N1O0&yUUx^VGk|vo8xwRWHqM-D{ma|E@fUE}6~x&g>I> zI4%EnUc@v0%rlqV#%0GnLl>sLJUd@xWzz(f5mj^KLyuQYd*}RFB@=j?-Zg{2Nf8N2 z>hq;5i!;b8Cd=yLW7zWB-}hwv#-wDBiob2Lac;IIjT_t!J3u{AGEI`$K4J_(@1h^c zuZU~ssnf}R(Na4(+vK9SHF2p|ZnTSeWxtE*sC%J>>Y29_CxVba>;!nUa^XxE8SOfW;HZnM3YTpv}D^RaErwu9L>` zN#I6;qC&tJXl8{HSmf~=w6(~c4!TgepfKm9=vi}UTxgkc>(*s=Kz*JugQDLuD?hfh zqYL?Va;c&uxrN2ykyl}R1%XKkhpZ|~)XVd?s8W^M6{pk{gDq6?)klLt7slP7?tGMS zFC~}%yjVrCBMq!O9^pZ|`L$oe`8r$u{N_nc;h3<>pvt-1dXtXCKUsMd6vQq-Fc;xZ!W+iKh-MC6rs{wdobC*Kr1P{o$}_NxM`&lYXie77ELqQzC@m0;sU(I1CwkwFlQ?pE<#fB7or z@7?9L45T^UzvtYtmy?_TT-*Yn03fc;W=3}K9&6{BIzKjs(L%P5G$tFs=k`77M zNMm<9p*Wy$rQ%@EEk_uYA-EYq8Q;?P|2Q)8=|7`Ohc@Mg+Gdj}x@#<#S#ylU2K3Ct zd}ue9HC?ciC_12AA{*VXc~t%OU8 z@dX<;j8CxfDh{tH2#L6Y0P`5XSdbNG&1=@S;hM`R1o*tZ%Esjz%>0)1isW6dlBL}? zpVvOM*5;)TjQuA{i-1zXwo6Vg2bEf<&ZwQQakw3ULW|DV)TEB=J|TfZOYKFUNq@y8 z+igQQ8q7Ny>Ivr(AV@HRis<1+|SnxLWD**mWAlJj)<#lUHPRq?~s7(ut&7twrj$ED~C-fE($f_irSGhAKiv z;(!2O$L??@!fN&apgplxIPSDpL_+LDYoP~?)|G6H7?3w(O%Ze)kIC1nNq>n4M>64j znd~p2U7m%AQ$M+cWNRDz0EU0=ka774+&EP-_@Bn*}ek>@U9S&)`B{@7_%NZw|BHxm$ z0~Hgh{mE^Yn>;eKflf_0H^XM)bqQUm(Fm^JMGSKaJ{SwC-LgWYw>kGW6=^MfX{&#( zC09K;pQPCAmFW~FRP(4Y&S7A_miSNzeXeD&chjd&k>;_H2rk02jw-Vt;ieIKsR)sw z8P5OI0hrr)BzzZJNY++ zpYXFgOrZl9-gzVS#eQ887xTdehCWKk3+Do|jGt(a@wN)0)P<*wMFv8eNG+L*@(E!B zu`%$gN#o=#pSqhqLm|z?1@H9|2atNfL+B+)?{c9BVza(Wg3!T}cwI_BW%H>=7!e+T z$ddu_NBJl2Ej44Ddhp)P83tregmh|f?yMs@Izz|U;ODOfDcFb;TxTItdias} zU#t?g5umDKG0>L+vxoEp9SJ|53h9PW!tqn=p^cFbxXSd2RmOc|l`z3Q6UigPrA zKgKJV)f4`m82%o$6PQgIsCmHk3uq8iumb7y8xHh`H8i~~PzYz6!Q3po#@|#U7Ls2! znhiuLV+P|J>>qq+YdD~z8qi)bp#$s_=)*Fdkm9F5FGM@-8!JGE4Gl(U zKE`{<3Vyb@Lxf}m8TJfMMJYsga%fu_by(+!9y&E2O^l@p}<7=CTkt*O)k^}p1Ykh&+2Sm~@_N>Ymz9eYrxEa=J|qFX8A;S|2XI483@ z<@l3Yn4C(wvRNm$CA7nsBD9w?K&%D^f~YzTFwx?$vfyz~K=*+fo9V>h27*?+4@5(Y zwtUfk%sAGs!-LUs!qdZ?fpR5e_drh@Q--SkO3w z(b=l^!V{>l7_4p3%ma4~pmVq>q(L5NG@%EsM=6fgi>4jKCQ($->IUwDl=K^dQ7!3B zIpN$Wk*GA?!2PqN@u*Qgu&ER#pf^hok#b{HHKBKQXr^0 zJ~-+@a;DVdp9_ek5?5?w_9B-#Ht5QNb_?=c*-CU|RfvxfGG)!;Q>7|u2&ZwZrwbu_ zy?_~*a6dE@e+4LYM6rMN?miz#yzsFz!7dlA7tBGv1RCg@%G{aGOC4dgn+f`^ zk~~96I9HaFZX_UkajqjZuIw1kC;#6Yu|Ed!tjC`&4U`(R;~ksc(CcG^K}4IO4LpK} z(30$j#<`2m7%C+FW%n-&1)?+BoC%M$?8Hhz4L_8g+*iM=Y}N;XJY%`>51F&&xscgD zNlpDjm??3@vtvBGGVP4WOiw9tfuUky(p@U-H5gKVeMUD$OAB_~CkHY&uRJ~Q=-ab2XiySw{czQ6nY<<)Molgwn2nH<~mA%v9v zIFiIQNoa*KBZvD@Hu^*+su|HO0VngF#EKcAI6gn%VQRQLRRwgLwQ8$* zBi&xxT7g+CM+Hmn4&2`WXT1#uevi|$25K28yWPSsm|_CK@xnjCLzP3^Rx0bR8(ANz z35J`hfSSyfBa3!0K_)mBe6Ndc(rZ2N^3ToS>GJNPB9zsDY-Low{cl2WpD~px0a$C5 z%$Ui9ob#ec;XcC)7iWJg$T?w{z7SWCY+_ovz^awy-jK}?i?eJZ{e}IGi+E z71J#~a&}Z+oV+A)mGN^>p_+!(spi~%lTY;~Wi*bB^&soGW}j(J-JDD=I(H|DH4e>P z?Ka+H44NOGeI@{WnatZbH~JRx^@0Ib0Xx=@6{I9nwEnMu^E1gk z5@RQo?daWfU3BF(dj|ZKz4@ZdZ0qkPZO${!o3VT_BDno;y;~lG85^d4FkkHqPVOe_ zNnQN7~?vr(lZ-WGN>sh za-=UM8S*YOvkX`p&FS~kzayQ>V_Xd3W^nRX*eq;{KRj&a90~99R}jx(A-%Hhy?$)W zD8NaM@#(#uQEU_}yPGKXpUs6;YP|GE%jqi#ngG0C-s|{(7dBbM`nsfGd#t{8<@mlm4ZQ3A8L&Ukz>2aBnQ~s9pqiaA@V32uLMAJky6~#m0E3Tc zbhX&19JKlO`$JX={5{+jHP?CkmvdM^S;9a&op6Iy>&(=K3-U_rMK&1%eja|cun|wI z20)XpFk>gM>TOR$?x-^(H@?{*`eo~Sl96K_aaTk5tTBaa)vN8A3QR&qN+X+W^4!~3 z|5|#^x1wS#q`oYCmKdwOb$@Zu=(f`R7~K$ehO+~bhwVL&0{8joV-W4pExat>S_}@J zmJM$z^$8tu|IF!X+jFMi4%?mOYcsy|xELys$wMMIR_s$YHyR_J?lQ!7ZHWv?N z`1E>QuYB*DrS-1P0_`#^I@l&8ojWUGn4E7_B$Phc!-61>V-%N~`KuJu*<25n0^9v! zjfGc>mmbQ+eMt0T?_4jwV=zR#dIq{wY7eoFUeALzTdih-fhxp z_i6VbYE99_mD64pYuQrxN1%a7L$Ue~Urv8i?8H(UC=3=YnG9a5+1_vPToXJx2JRD2}CRbc94ISKV2N>#m?voePKJ(`78Sr>)H6iPY>MB*cC&jhp zsfBAtOGNIyV@v9w%@i1yCZ;~DgYt6O4YSU9LykGjsS{6=X@B1(VLmGJ=@@nHT(K> zeIS9hUHBmEu;*n`_GLDKC0}v$#nWs9+l~@ptsh#Ql*}6XDO4CU?JNpAQhh($q}jwc z>bH9Wy+4FR1}|G1DW4PACQN-2mn`xv%D7u46fp*dO?y2TuhSwXlOnxG;&)UeI*zn7 zyf_2!LB{-P_4>v*R#HbgqRKgbMu#F?+`&>aT!Le5BvQNf76+Y#NFG*t9?cq$P;DM} z+vwADt`=o}W~sV-9DAX*cBHx*vygf11mfPiBdC$Dtg8FSHxZmgiN~YRbC&tu#HghL z=pWDYh{dsv2fY-UZ!eVi4bWcyF z%X}qv-P;dQ5=3j%mI-&xsmEg`{E*uqxIA7}M4aiJevoQdk%FnCG`j=UlWl)CHw6W| zTF3T&B0F<-758|UAzd>u|5boc+~$`l2VaIbXGpfWGNDy-<^$4MZY&hyzBehJ&1RG; z;3ij8Ee^Wh+nc;=iuFZ}j30~jlgQKa{pf#0B~ld&)hG0qFFl}&7mCT_Nkj=HzF|-k0xscRT>U=z6qj-?~!5WpdQt% zeQn?p#+WUCW3CAzH-R1b%mgX{7b4_Xf1dR^+DrXa^h`~uT3RC7 zCFU-D)MVmCtKf|J;R?zkY&iu}?spy;_XjGI$Eo$S7ce~s)3dTxtdn(Od#`tbO=q6!d&tL-M< z;1qn$d?!7fCSE;yyq@J4(ip@)L%PCS*x9<4CcaSGI05#T63T(u;Pk)@_Wa|j-26Rv zt9!#QQDqkWPrh`-Ppi8hdMfXswFm_HJx10^ACv3qu(&xSuo`JtB?d`D{&|1N5~3Du zSrT95=k&)ovGmFR*ToEYmc#&4yS2a2TV$5Ai;o%8f~BkY6pppL?-$~`lkL*5?VYkq zb7c#+TZDnz-HxY%3_Jz0fTm5S1^&&=+bw0dVFsnXBx6(dHZCtLVSQOU{ARo{$`_f& z{E+VNHFZA;nDROAt!jcMGl%xP;Ty3{qYBUp>^n)LQ3zF;%Oq*$KFkAATn|usko*6j zif_3#Y+Zqu0tL1<=v`98(~E|N+fLt5R@>MxC(1KRG(x9qGv3P*I%HkV{vzno-U5vE*H>^hL^_aXXkbcU$oIjPxl~}-ArW_Zd--OO-@+BT!{B+X;^m-+1r_SGm zD4(PAkhw>-f9dE<=j04{*xYB7gE$QujJzf|Tc$&-pt4jDbLR)Dk$33xd=a_Mwsp*- zhSTbvj)w#@PS02O+Xru_+}8Hv=-U5SyDDv4On&myVsT-xb6)0q)f)!8)w<6p;?HU= zDy}v(MN34E{aNv3+Kvk1GF}%qORp@yiW+h)l9Bv@A$EQ7<7x=Q-hm`|IzZB#SXg6$qt7DM>9Mo83+yWG_-YKHFI5MNLh+nfB$hHb_s7BM zs&w?Q3l|I(pi8>gt`$_qk_X;_lglJzmbA|GVv?!|U0SidRYdf$NGxr4-1e<;=d%Yd9FPBVa-f3w5PT;Rb7< z$Cp8S45SZS!ZACP%kMU{0ru8o4l9pG|1y^~uIGz+Tc$T%)Li`I7pJ%g{L6RQiG3$v zl@`|Wa|$R*o|4sPFDVR?fxm{U2SOJ6$%j^b-pXovQ|3%0=ymleA1q3Fr0dw_o%$mT zG|vXFL>@oMB&YHzV%YAYLEf?@?MgC2>>xA-u7C%4h;|pR@at0D$C6ibt()LGLzfWO z;_3`Je^-j)o+4geo+@M6aZY1iYb$l2Go&iz$=i(hV}8!c*9##IM>2VVb^07YzA}YB zN1K-=F%k$R9}By5cX}N7+kLxDA!r>(5N*eJ!TRSkonp|l(EIi?WzP~<&Dy6(`J>8H zv+ff>kw$Z4DQFP-A1R{tA2{t?U!J*1Ki07E0up$=NfFDIXB4dH#hf(Q{!(V^-Ng(W+R5?+NDZbZY8Q_3%KJJb~m z=1i`CipwcW-jfKM`p-D)-IojKUL6SvJj$g3r49I!4- zay;Ab8H-4G;nODbFL;(86235^V=8((@`zN4Bez=0T@-@)c7 zRMA3e#JtE8O*VFE8|+TF**c+-eq+Lxvy}N%Uf6(mvApRfhsAx5t3|WGqUMu+eYaf+ zP~>bh@cc!oS&VN##GbWD@8Lz?4EJbHH8;H2mH!yOS$dIDlQ|6mq^!7hCKO;=y%zXt z5ip>=qMB$?S2f67AI*Dk8w_Gx53Hb>q;QDq$1=)xV%sDN^ExOd^}iQKxS$MjLVQXD z5&USik+I08mJGcp*G-Z9P?>vm?>YmUvM~W-MtnLJwm&%dzpM}XNstx{!2bWcoua2# zLEIGYH(N385>R{p3{8N*HE0{xN=-i5Vq65!Bsk+%AEuV1eDvyb%KUhx zN?q=-?f1T8gn~_Yw@*_XejHPzf&+6!>N{j+VwoM8`)SSD`)N@S0#F+{y>w{gTv-{gzXNvd!WcM53FYM}BT7QHFCilKrG!%$Lih_IMF)z# zi8-f5(TGjHkEZ+&6fNA={|1V7J5dr+rm!d?Sr7PSrg!8bGMV{pVRzu&DFpDb6JOPs zIBf)6VD*03&Y~hQiVJS7xXN6!-hO656oQXrOREz3a_r0bUDB5iDzS<{L^G?d?mPSj z(eYI~Jb5xP+$4tyR>QVYO4vs>4j_#Z#Y*q2N5c~G5fT2zecm@G71eeqGhvFuQ(VGy zfv#l$aX1kWrIvo146ot|lts;eAVt?G&j}YqmoSqkn8-FlY{O^AA)x1D9FxGti9(T) zUhyRYPA8H*7^XqOzu)3SX=KEC$nDtEnqr`=)^RNv3kVnNM!?iy+<`sH4RsK@DgC<8H{#Vm7uaN&VRt?@9<#=(mUb1A4NDltA7!q{DNmPH-=!FNdq=|@csin z(=kCxfg3%#5FKh#9C%^GLBszQu+`%K<4DU2j0^q8duC=!S?~OaYxqmjSu_MyAm}kX zMiT`}!6JZ%4IV0e49ckw8zJ8?wMY9uzH>M|)cBfVr6F=8G>S-ODhw1FIxRyVj8j!6 zjtVIh8iEDH7eBjPeEK1<*{24I8YGdR+wl<>NTU=MehxlBhBkb&5{h$k4IqHPz%?N^ zjowhsgYi7*AMlt6upuKA(yZPIY&De4=0W%M>-?+q3&|upv7RZs2U9kn`$v+cX#YXj zFI1C23(ctr9`s)chJkw65CZEA=arZyxgA^xj#Hoot-1RD7|m2Mu=XG(t~l!`_-w+@ znDjtDIU<}qdykXm8lieAH)IOUc_@sTJ2`%|QO3ZA^J!9|$TOXx5@N{WReeS*;S9%R z8b>Xei2H-O;Z_Ot7czQqC6S3KlX+#>i(ovwr#V&+dq1>5%>ex;i0NT;shd#QM#cLB zkkR|{7Y~uQ!$d}oKwz*;>gnc8nD{%AVi65z1F&K~U=qZ$&&D7yWWEd1VKZ~l62>%t z63(blOA?~+bn^|pH7bSu4p~x%Q0qO~0Twg4Aa?S#w14@sDhMg10vu!jo{-TShMB5( zn-4Pl0LqwdXmBM$sR=}n*H0RfI4(X_M<)>u>L2OV1AYu5jTB6nTt;Q=ct{yg>k`^) zghz|mmkC zyzX)0StBgv2DJJTIum5C_Mt2kIgVjRGDFs}O`y|x(cmnWMby!9AWOLf`Wuc3bf)a{ zw|lfs!UWPJ$ee!?aWqB_;J6!FgB0py=)$X@#thv<-UNi6ieY9cVHaDQeoCm@$zLQ`(Vd@nM<)FHT^)3MDB4IC`Z!#90QsDzjQyeS?~}w z^XPC1F?d|q=v3oH<@h_vIE~`a)MIX7v~Zv@KP8x^sMGp)!;b!%u_Qn-9ffj~*CYq* z5CR}^l>xmLQ~3*8%`SZPOoZdJ+sCNh0C>DHcRHR*2?YqiIo&IGJQTv=E~BE~{>CYj zHuDj0o)DLbet?`60VVRAU?(caU>__KERUt?8}&K0oeH98ERI@gRFj714BrrfmRBrYJ`YPYjemkhz#S6Ec&k@PY+&wh=LxIwPatArNRDNce}0MVUc{4gEK~4hlT3W%@>t#-{uNS;cBV?XLvl01JxkPDrGq z4vnTmpwCB;Evl2e5)L1--Hg&F5OBeO1n@Be!V&BG4KI$*ZpkCBu8Fd@DOvwz{?J@x#2ml(AULv(Wj?yITXfAet8KmYLBaPc`hJsU|G7DgDZ4?%9|qEsXi z5zhbihCJAHzg%GXlO8LWX5fYz9t_*!|9EnCun0iTKKq5Ak%K&agr2}Q@ZZ&{i{B&j zpt7&igxr7B!zaq)n7zC^sd37C{5Y{?gbYe?$NWJ5`f&oqL08D(cyRZa<5ttEzTT|x zu-#5rJzHRKd#q70iS8fxOF@=Ri;3NC>wwVI^o5?DS+#jWg)eY)2WqLxDbfFXrA3TF z$_T`#?a$91Ug%Af_+NJPHvl`AEZp?l=E@A0`h`Ts6s_s$BqiPspUv)%Lc&M>I31oQ z8re%Y95DF_%=nkQ+ud*Z7;e?L+L{!KwN0DiyA`_~QyK5Y*Uqn*6RJvqCiv{toWjnRwB@>@ptJ0F=hA4`0D$O7OlokG-%T#!`IZ-`j-&VzMTj8tP&YY&Y0 z<8n=GW!y|d{&SMgiIZg3HZg{vA0hZMSzmhfcFyYHPx~V5w-U&^v4W1ou(}yRA&+Dj zU&PU?-5xx>obE?{+D1%b&2if;j`vgka-F~Y`$-*n2)lSz-D*V1o=-}}ISf3M4{iO6H zdX=&&?%oUX2Fx3zH&;r3%Ju>NJ(*sIkKURhzoVTmk~c-Lg5jk{p!Fo`biEc(*I-@4 z?`Mk6*!igEHXa)((&l0pbSNl)&VmLQrsG6MHZYJKw0d%R0i!`>B(Jz;5&cZhoZDF* z0(*Ud4qa=1b!cIlef$jW{U=nC^3Q@#YJ8DL+V|&}_}b#=S(?+(L=3pYp8f5KBaZaC zy86+DxCZ=BzmFndRWM2lvXtzw^ne_cz6pF}sI&#R{Kh7f z{y5tijax;c&g&eL1*$8eAvfrLz8*<^gUp z^(!v{u+0PeLwUcVn#T3Aq2n|#`DBH(agVdqY@7Uf|8m1H{^y2aQ*suEP+wt>8HN7Z zni?OKbie$%S&>b&&9ReU^6fhE9nXfFf6pU_KAmm{Dh8`SZ(k)JGV8eG_V|Na!giNE z>-o5KmM65fW{?gm4n>je%$Bn_y<%%k+EtHz^wpMqxa(H0e#;o%)CnA*Qx5hn9yR;v!OqOkM%+=)%8At9i&k$o!GfNdZOk zk`~j3UAT2ZlEP(eYWswF&Jry#tTE)FVEuB^i_xprvN@JA($EC|t1y$DLax6C`n*J+ zOAHy8XtLh>rT3GRHzg|P>P;oJ+l4g2)i~1&y$R+Dp~$(XLCx2>7P#tPTaM}%d@s5xg}q*lr!`I?Sm&_#x`5=^wFUf^oRyD ziLs9fpQ=A>@rZUTO!P!48s*f)w1VOwDY*)k(gH}FLMjtlU&v(yGPy1&FueBciIen+6ckaYnR~0Pc;};~N>{^UL9-A$<(_Jg!pBBqr z*eXDQ_XE|XWHB$T)o0S=LRCy9{rD$8;N5Qx#tTzs3TC~p9qgvgFTrfg_QF!@rznRl^9T$-0+x{*n^{tKMAK<;RaVf(u+y4=EU_Z8FUW}o-@ zLJH$#RBW5STq}xR^&02)4PIUl*Arh1{`Z&mvm+1+G+;LvV!=VC699!_u9Br!pdinY z(3YAbyc$h+iB(jhlOB%{_x+363XiCMLdtF&D*G0Q^z~)tGAH?|xK3Z*TL5@Gdk*5C z7SLO6|GWciUOtPL7A?5^-mWTAvmR}D(e&f@Iu+|7*rYEa(DQp*zh6HLJtaGOS=cP* z)6ns|!Wa6kcGFgCi}Y&w`f@hfZK3qCMb>fOpAvrp!o@olKPbwkvp~3fL~;3>)$1ES zWcd2Pozi*&qJ(xxSv>){K)MA2bK)@IA3RrMF1@gepJ%{dEie{`R6QKR*N zrxjz$)Fo~f_{!uz&s}y0x6Ks>*8dWmE3rejQ)2*pVl-`rYus)f8nXL0j&^P_>P={y z8C_~>GKt*>?K$n+vp`ap>WR1cUaYrq^ZJq=hhBoI9%&=aY|=XYOncrOvBQTk+q_6) zH%!7S{!M}<7A^6<1?aoa*zTV6ikYr~!9VaY3deQY7nA4PeMi3E>fej6oL-B> zq%K8}^Suu9#Layy$ViCq4Vn67kZwvT9=y%y6bdtly+<8t(K8*5Kr%+P81Nuxl7l^a z!HQPLq{&wd<4OxoqlyIsI1b&uiO{gzu`KgL-ynDUtUIfH*WtQBywEWL_ov3y7I$DR z3A6OFjFjt&o41^ltHUdJM}sJXHgnkcL}{s-y3J|OYrROw^blc%|CD4$-`zfwXDd3+Y1lDK$n%{b7DuBSx= zJZ{`}JUXX_Ok(UdeXfKb(qD9aaIqe{T*n1G3&`|j_s_Bm`kKq!MuJm278s#+*p=an zRB^=n9*1~cQfy0hmtdO|8zd~G;4PEC*<28`tC&dv9J{bfqD6ia|;X6 zP75)O%Tl1j+0c7>{{;Q>={_)*#s0wKswkoh3 z?th-Bzv@aJ7;3=46Yh0e+^^4ARpS4rHk7iXDe$Sq$R})8DsPJH740&Wxh$qxvxsp=#xL+BDP5zr?kd#@r>;fJ8^W0N%D#PO2qlgWGk-M zfNe#l&vlDpT6sbm>&suj;`5Z&&pJ8Qhh8wZN%K3Z}{ej%G6IrQJ~1^)S?MU6J+k>Qb43&PP@*d*#+#i9syYpt5#xSL3;HqvB}u zFg0~08PC4dY{4budV@y6eQ9F$7+yI@a4}MKMnkZS*O=MQhjA7-ShW|7?VTT;l1~>q z*4Qy}ueIPN;$CIZpRC2-hP3l(3LUv&Xx0IHtb}kaRdt|^y60XQf-?Z``nykX{?HU> z)!5zMt%`IA_H>pdX+ylhfm#JT-+3R`#+AHUfTNH za;_QN2?Y6QRRV#lUUDYgS&!3#_U*B*rz@AL_btZE#~x398)_+seu~46yEnsU+fTKC z{sY>pe!HH7U%Y;X>qK*_;5|!m8R<*D!`(PBj@+4u{tXHye zXsL6p%Qaq9$Lk}g{qBObJJFc5r`~3wxwuqtv~!j#1z6ryOMR`Gp0EJC9(ILufV-3P zr`S;N%Ww?-^XAhs`=opkEm^s1(vWaCO}*SI3> zd>m(=y!mI}VCNB`ozy~(zyGE5m=T^-X>*d1?k7v|TP}|t;d#IP9PGvTe^dFrIzZCT z|8m-UK8tymCbm|DEzPeQcF^prL~Mc1?dKD6sc^Z_bDY8D`^$Z7VUsR8^^<8=yPv+R ziy|;HL8vjdZku(d6+ zns_(FPFOm$i)EIVE$z@ANq%0;1&CLlj!VR;nD>#XE@-qwc&457T!8zu(fGSEPJ<$+jNuim(7=;8J5qyG*}%&%=Z#oqsy-wGyO{@ z7^1ZKX|uFp__lM`>*aY#IJ)9!C8g4F1=fdK?%coFY8cnrccXY~w2{c@!#SKmPZ-?VzNsn!Us!=fg2&CfGjt z=yK{SJS)4uli%;gV#+ZO!pX*LPa^*ji;VFv%vn;Cym7AgBXt^6D#`meA9j4bH<7Aszy=~?pb>UN$6$9>cjo|%@y}@ z`8%c87mR7Kb-Di?zU@GhYr+6AOifP9w;EU40dl^=0bTIaqcU;a^;^(z17~>-%l3BO zwo$F;yN_@`(xL{8rM?QEd`2Nd({6b9!b#W_6^3KVo_4dc)?uLYWPp70MQ)USDFX$k9$W|aPLQ}2qa-5c8nwV z69<%Q33A>ef6yjD*wTbaPgcg&VdrF?CzOPIC&F}-#)eN<&j6;*dqZJoh(0S*|FlwA zAvJh{QLvHS(aa-yGMD3Zk3BfcXxP8opyDRP5m%ml*EAA zui(R_j8K zIzhno3WiR-_?>{|hg;Pz5E-tZUR)38df$@HoN*y!dNTE45^_#c3YWCJV7~+Vpn?jMGvQrZ{UIm~6@sc)!Gb1JlY{gSUBEzN0F`5O zm6gB)b2mZ<*G>r|bV+Y+#>@?Y*~3c7Lh#uk1ZSdTdxfzJmuG7A=o`8O}i^m^RB;6xE9bE@F)ng z&5&^B1t6A`qobDdpzKA>u-3Lhma=L8dj+@yzK@L?$Uix@hTcPF5xc?%q%V4rsN?{$p24|%3UJNpn2j0|KkeWHAIMy5}ne}(F}}#$3*zC(U|iNH6#PFAoYk_ zs}mwyF|a=WO*%)+={h@j%WtJ>*wQdLG}4SH5lH{s936UfIxQ;Ya@D^-B1>7Bpa5J! z3bKpJh7z4m@Th8MWKUvHR4$wt^N7^U$#CKXK^IEIG zLAddfT7wE}HSgILAt}Z;StLUd5>kyL+8aG zBs}BHG0`YD)<0tpnJYt9pDF-+=#M*k-B?rpcIGc5=iUE>&$scS3#S!3I( zn)A1a0{UIUkdzKA7DOffY*sQlxh-G}Zk5bh?U}O&Tobp{pj~(&6iwyZLvXJe)NxuQ zJQv-UfZuVXQYfO*!Y_v#bamDx7Xb&Fmiu6MtnLiGCM|g!LGX!@2RP@^V3cMJwl;uy7 z*6~}vvmzzj8dh;x0WK~bme$D|&*)Qvc4A(Cleob}>OXNuIAh4!bkq;eP1rU3Lv*rv{vx{L>6{gKn#u`r@ErP@bFS7`cX#sG0L1dN?iJU<>oF2nxVky)aG1-ICaA`B zH@=}iBY5xZpx)ib+>CkF1fd8H)(+mB@HFnbw{M=A4{?NsE|=D@NlZBjH6Z@>U-~rF z5tXgZiNhvfm1*y@GL&hZw>*5C0%8IE&GVDxGC@tr!nw(|&rnmv2C8M`^n!N0pE>NZ zNyUeBPg^>CZ$p9Q$w@WuYNh@2D9~kMyKmR&-7VJK?&SsRdTh3kgT0qpc575f7A*a` zVQa2&x5T^1@mEPpiK*8*l$otPk0;`r>S91i_)eUsmr~>5l-gruu(`nQVQE2IIA!If z`(pm4YFxa%mUP|=sEQwP-ktc>&^F(gikY3vvfQ1gf4IV`)g^FT{Vn*C_jA_o6cQ(7 zUn{FFLZv#comvvWp8s2Z9sd#`b?ridl^vtO&op~Q7K%P6IJiRi+y>^e^u;W>6{@ed zRV;hs4nHl7z@0gZ;_$Ub+8bQoM)guwyq9wIgspwny0b090f(7OvVNJ-ejf#lyn^FJ zjBJqY;vo(T>9xgY%)d$B6+@Bp5CPqw2E-epaSFGkE6aC+%^$)>k(}SzKeW}|f6R+r z_!uUV@>`^<;@^pu0#xIPS21GznqpVJ@z7`p@OtCX@f=QcIh4*o^Acfs77 znyaHf8m=ATe}H~nSt;$39omI`?&6U>y`HVfZ&kY}B+R}ue|@hyLrH3Je3Vu)Sla9{ zKfj8F=Hd~eWyw=Fv zymRT6FXmsWYa!H2C!1izsZFQ#Y2V~2D-B8aSww9pQZ}|Piz3^H4*sIyI{kkgoI*!k zy}Hg~>N-^*9ZRx&m0yo2bmXNr|!M0BgK=EA$)3bU#k@bhMRdxuRV&UXlsTRiH(`Z z@#~=~&FMQ~P9oAI^I>q+ARC0gNh}vg|QN&t%U&)O_qQpI^*OGpzqbg8f)P z&VD0l${{*g@TbF=pbUFUz@xJ}ahG)I*gPwmB0c7k2(>ls9KZG*&Z0JbRzGIeGtv54 zB%&`AMk6oX1k6Xlyw&Q?2YH5~gm1Ya@$g|XE?%2*U;2eMca83!3a%JB*ZOanZko*M zX-cy2kA}Mwtjnz;D28SVg_4esh3jn7va`Jx(L4GJ4(=wed1lX>fahqV`I|L|Y<8iF zi&()&)lWb0(~7(^#^%3;IUz6qx!Rm!*W`>V5u3T`+S|`Tup})F2|^#axZmkwNIrn! zYyai(8BcH`>D}{CG*<3}4xi^(9>tcfEfX5$ebe`YarFjT;q0n8gRrPx$M`COG3RLRRJy5+J9Oq_tFg*q zO*WNyW7ZT5TylKCq*BuZ`=~jqx6{5*0L8P$$F-03uWcqP?_vG$&4SDO{kWeZvRE3w zNTpJoTNX-Rp-~P$S`#yA8+k5LcfIuKG^@!KYKk{dGNf(n%k(HG+Z8u|p!F@;8y-_~ zZFFvw5RzfsodGR&XUt~|zJ@TKcKU{onH#$6C;8Ro+AZ1x&a_gHi`P)-XxL>(Xl4M1 z>uuMh7u0;jp_jtdwE2Yu<&wMgOO@6mxS1|=HV`EYc6G$c zg~h{?1HaD*mv-?5<(iCZ&P|Ay*yHE8bj`sVkY+9YZQAayKQq6f9iz&UTr%Hu8=NH^ z6#TBk`{@N3Czu#o8L*10aa^=*Ww_(R@!~|*$V&IOjk4VRt5rlXMrr4H_;qkLZBXDl z*}dWkCFR?hKL6X9{w)?S!jYWB82l#2C#gN&MfT;`7kHF!dWL#h}Ok zqMU@AvnGxwB-t5v^!YUWi;A zV`&W)dlEy;G{lOh!O*Pzd*&w*1Kq+^kr~P3$i@9|6gu5`A4t`clbYfHPd>>$fko4*ZHHu`@iIt$@(8YwHHT^jf< z*N~MC*v3J;?NqexFDO=2eTtoH60I%qTXO>M@E`Gr&iWmT*!)ku$nmBs7I&iqbt$TETt>U0}B?z{}xV5hA@ABR>+&W;r7XYIyXsQ zyj|U!?i+kZ+;l2MfwpM};1F1pTe?q!TE?24Uo4jsm6XGCS#^Z87aU%AJs9p2&vp9OUqnP z&OSuVf_}|$Riv{_kzq9neQ+In*H&&v{C2VDH&0BeOIq_^noUR?(fLu1I&p*$F;-KRjb;5ziCZ z_48ue9uTj{UCP+J-;n!F29YVuwKJ++>MbcEQ<4@UQIfh}j@7^ICf{ZHQ;wr;dMEca zPj@0uhjIvHy+3URBI>VxyYttj|K!D}5iz4boaE#;({QQ#*mB*{yxF0DUN21wmiK#} zl%~fh4w3$pl^Yy4C^Yn2(NV(;%Yt1tnAR8vWFW)_aLkb+129d#?L$ zI-UQ_JNe^M>2UjaW=FgQ7|?&mcMAPJQlB;#Wt2!I_{jG2IiksSb3i`NIuGc}ja3SK zKo{8S{{D%_jMP;W(MrD(y&L}UW9B)0+t1Dd$G}Nh=9JQ@74|h2Ejmr53cAHAbRd`J zNGmiq(~V$6E3}Jhw&v|%yiY4M?Sg4-)P823Aa9??pc?)0BEJS5E!~6f@OQ@CYP6es zdTYF!sZB+8ZdFp69Zg^L{G=Cm)je{Wj09g6V|a01bc+mKYyH#?Z+3OTrWC&GrDtHZ z%q~x?YoJ4JzYmGZ(Di2g*ztNUFy{vfI53-UAToJ#ogWA-5rX%7cK7Ytl|zu7p}$KU5ZO_cW2@5de-y2 zd+)Qq^Zm$@OzzytB$-Sm$z1kvq4(}E`YSHKDp-tTYIP}Rs~usiaQyip0~+6f+82(_%z%wNMNa%U%U&Bt zeu2=YRVPty7;GAN>wx+atVb-X{2@k~5L17KnpR$hny*~9_urWTyoaZo7;Y3WG zrz_w_vM-A$v(hFjD>CLfv5lT`O`_JAeVmz|{oA-+{+6nN4vol2{FLT<=yUFnma@N6 z^D#Anq4*e+Fwz6O`B{L-zcy38V*`}JJ1pdo7Q}7T7Yumd2B0(Av1guRrr`h~e=HKg z6Vjq$xgK&WZ#zL^5pf&2XGwbythu5Sam%9;ai9K|ve&;m2)s>z-(6ju6)GBvUtppt zR0NFILR_fyjcI$HB*a^u%{RU(Ihy(dMltTXvx{05tpu0t1g)F|{hV&S{EUJjr+O^m zh!(Un0S9$?>!vt!bY8Ir7RI(K+hcM}Tu0fLP@|r)yP2RbLaAYQ!!nUaLlLp7eQB{; z0+1li@k5o|=u@7FWyP(GyN)4N)tjsAd2L%)a_b5-+s8-F1-X`s1(&Mll;3T;azY82 zEUWF-J*w`~sijj+DehsjHa524<5EtrNvK6V09<1@UsINiT@wB(VrqGNWDEIo=?csP z+6w7dwiyf_Q-uKJ6P-BQ-$lEEH*0YdnQO)x$G-7F+3X5r2T-V5u}ocqKUVcIp5xii-936o2tqkMLn zJ~19G)&i9~8}Z)0KI}VA$2HPV+x_JF(ES(c_aD9Im@u6yn~Lrh+}Wk$cSxVse;AzO zUDl@-6!zU7g;)jBt?>6}6<~jbD}%)(#TWz2;82COV)+2JGNYDUxB!RN4DdQ?MqpM+ z8LD2|5vqutTI&o6`PP}_-_;=4set1jY_KGbBYKhnOJe>gou;|&x208}m;}K~TWp>f zk+25A#j8xj?pZQ~TUvP&3;j?vk~Y=eYvbp_>`0s13EIh714#Ts!l1zGj_-E|=g zi|>EJ;3FswT@d&$;;xcx*S9ZG5cGgV8!?Nyme?3TeQ>o4oM(+ZxgN`z`of zi+vcn^($59{jf68X9x>Yl1pR3llYi9*N#OR6vi0mXVXpOqA(Mc_KKhqi~!TmpqO`N zLdlztyK%ucD7%wgMPC@n)rddedhb`Fa;}I|vhZ!g2A@V^@K~(j3p%L!);=(zLO`SG z(Hl|twj0~a_Z|RhbAx2qr1>8R*qmuSL%!a(!^Ioo!YYZZJ`xIpSUxxtDK6S^5N4dX zhOgV;6x=6I*E2Y!Po9%0z@@*!K?c@E9^3wxA=B8Cht-`NrUXlC3)#;_!uwS2zok2m z+wfS3#>`qgZBw^T12$#2r(gI`rJdYP+wgiWMZm5awE&PjL`Raa20~o&4!({~I*3Nk zi0T#42-@I~I{xQB(x?1$A4V-6%YTcXADl+MPn<;f{)_vc5OnXull_U*t4Xw7PmG9Tv9Uot0{&;B zjGHnQtfMh|zLEjmUn+xKIUN<{3#0?;EI~ZT9s&QDdvqQZhkV4e1iroAOwE@EewaPn zbTRDjO$!RDU*B$!ZRTXdwm^4<_B(m^l4i?S@n=qDwsCaYw;AN#TGaYL_Mszc)#$C_ z$KDd9NLTB`iA2G}^8s%0OKx`p@ysv7cy;v zD|xuJJSBL%_e5fMQFT6E9!rkh^h`R0%|3j6KSM>pc8D|L;eV!{_MIt)pUcN^sM|S1 z%{{p1V_dptxDtCog|!eg*YDZt4YYq|P3jg5{PPNa3SeH1M!4?eI2!|w`Bw`$pT@=i zM+@l^4Ez}I^pObIor$vTx~GrxcM8ZEf!a7pmX0uBj9uFv^IgBl0|gIth1h!?c=&KC z`>aoc-j}yQwK)JPCgDbd?<(a~+Od z06bU?JE-r}SpRxK4pTiL{JNT?0CM!AnZ`ZKBDSv0lH6NN~WH`P=I3)PS`B zQ+GyDD%>}zw0;o-seZI(4qSVNE44NB$7J46zE_>hd*5i>JQ?FZyeRrS8ro#vsyxO_ z#6e8bHXGVYazRkCzr|ep@pwXe8Y5g_2xu~R81Nf^x5p<|7w6)^Ui;93QH6iYoQXjC zE22SOCJ-7$7q{IZB=@wZl6XEHnBO=ONr$Wz%0=~jYL={}D)1x$Gjd5+ohyyL^Dkqy zybumFh=Qae2HSSGitwwiQ)wq5Hcrhc_y5)Hu%2I;rSg>G_;oVGo<>970nAL7?5#aM zn9pfViZC1~1{#Omm+Qr=On8-3{zrR1yW4M{N07((Exka=k zvl52q%rQMasWd#MX-Z?POvae=;wNW#ICZxlO^+=!a5?Tw5^?eXAUN8*Ux)PTs=0S3 zugG(;Qyq=M+|`QX`$TAzZLQ*xcTJbtG;zifrTDwO5O9Qo8J07-UgeLRoF#wdEV#%I z`%pSF9)FxGul9FJ@BnhaM2n^_pfacIEtF7V!Qr%u+k5?Kw)*JB5(p4S<95(edb;`e z+-w;43C_&^2iVCh@No(Q0k}a$atz@3f9^>;oVLXKJyc)1{Iu+MK*P~DN|X;g9W$?o zL;!o)Iqh2XI{L~*{6VZosZybaF~4sAq9`D8(7St&nlV7PV2nu{$ri`{_EMPlVdhYj zDHr*Eb-UZQNpwIPvTyxT)AOMq4DfNZlBHb2AdbrMouC2$hkjiD_-jiTFrn~=pSyUd z8{qZ0yE9!ZPk}UMnp0$d+8g0lifpD9BmdTZYvGc!c6a?=tQEvE$6>+&-3{N}D*gwu29M zP`D)!&w2>x9(sc*ykN$1E6B*#D{K6*!@E*rnJVDc+tGmQxG~FESH?MKgpi10|$K*?z zuNRBwkr~`gKP4wpHD}a<2aZ9t$Kogg1b<(a&_qI|Ae0@8Ucop|!il3^0==VDzqrt} zv{9O?FIPOvIL?*$ml8!RUZs*0Xz9+{DponU)aue(H{$n+h0|hvY2}t?r`^Qcv+1a$B! zy*{~&mHZx^DN)y}X)$=q-2Ku2d&_(C?W%qAT?-#*uoLAKVF*Ur788Dbf;VLZ3;d zZFhwA!`S(Nnr*V`G>!_}B3%8FK1nnwc&k3UdRnuSL5^It6XOldEcX5pIl@rvtEpZN zz(INvV*u#S7ipbl%vl4YUZ9Au(gmRpUvq2E7d6vBe!tPHRXpmt{^S@+xwT=N)8#_T zZ1W&eT!&6`1Ss5R^6?GJL6&T*_k1VA5;Z&e?|#rKKcagBSm7MrqtFHxYyF0C=3sDl z!Cr0Aw~#E7Y#Z`2BqYFOm_ZVxl^}_lxv33&Qq#8dETZUmEbZd#d*$Q&AFjp`BZ zTYkhQJLAat_%|7gcq$3#(78tNri*eGLm94Z&I}fg>EQ`R!7yuoCf`dg70;M<`6FsLzO4EV zGGG@I2^HndKBZQ&7*UeipUT4A<{veo=Gh|{G84_mMog?2PpTOjWf2Axz^}|CwV!Q( z?aU+;0O3V~=ehN-W%biF3jKZWiZhnsrmYwCWQQY^9gKTKkqdhP=nBROoau`k&`N6v zG33w16m+a$wc}_tcha#3`7M z(10~eYi1hr0=fIfHwY_UOSzJnw6Wtc`+$({3a@4wVWES?DniD zal?9=}>tf8( zjquQf8|c$JB%H%>bDz3mv8GSn|TEh{r}h*_iq8Bea66sRQRx{w~d z{>ar5+UtYCV!)Rd_>;8iQ|gLgLeQoC%1+k8(F>ozr>3AN%uN(mrWU$Fvm1mEg_$4a zZ){@l$BJwVxg)}x?w!_ua{Eo-VV|kwgB#94CkLR#X}9^b)Q1$sXrk-XU(IvwS_Q#o zNVvcXujJP88NyI!;S*YlNYfb6U>^w#1)~#sA8h%t2_@SVZT{SyGTKNdEpc9 zOpEy0Ud4BG+>jeFYxhR`5TKV%h6dW0gn+(^rJ=ZzZcZpzv=p^*P9WR1D9c4j#4Oxb zD#3GtrOQH#WgOaos<=;cr>wSG`zVn#0FaK%7vLNk$7NZB>3rK~n{H^3kY<(oCZE$i zH#vFBKecJzx7p$GbzPO;kc?>EqOP z^osUB+~9JjC0HtSoF<}-EDXH|Y%CR8TWi_rHqB2wnby&NnQZ>TJ!=rb58uagp#A=; zDMbrx9WKdGz0HK!fIhJG7-4D0I;pmB0GJ2y%n z`rZ293Lq4g#sr+bcMuEf^wb2tVGSPZ@lZA*(2UW!KHGD3F%!WC=5t!LL2wkBbc%Da z8(W2Dr~9PE))7Ps@p!h~-*oO2K4H~3i~=uH`0DCCq-I}-_4%1`00vx#D1leO<-stG ziZ9V>Scj!TcJxGH3RXloga?ZBHI04)OoS0w^sgR4fICV0FhEc^_E}U3 zd#jT#!-|>pP?oD%i1xX)qFd?q!RqDhsWSRR{{&(;y1(aaSWw`*9Ma5a)axBa46Wp5 z6HVtcyw*#6a?~1UC^f{bvC680IjpDH)_43!%QY@5J4e7UMw~CJdF@2?`|Zi5?*mNB zUAB?=Qa0kM4#IIkzpVkHQSXn%4^DBvo3LWQ`_0(q$Ft}2P#^b)#cEzq6C4JcAn9=CC-|TvwFb+ z5uxrIIoRQwKW`wG0aj%1n4z@*pB|XYpBbiK2l(XB+uTT2-nFw4?%B2eqW&^pr|rIK z35XP|#%BeRB-*f~9}Ufu+;%W@REi!onB<(ehuQ!b6*BWZ4Rcyb@472Q&-M!!#?dQk zpt~m<35&^cfERyja6B)wfD$=Mjpvh`xoG#Q_BJ*}Uxa)jL-b53tCK@<)MAviD3@6> z;tw=D(-$YX@k=io(wu3#znUxD9>gzvYFeS&D%GW&lL`)H#%fiu5thc|Jp54kitGkp zf}aGGk2O?H>5d9`*#zsf$#O!tKyR*+6jr5>J0Ui^Gc}=**gK!s@*Tfg#QG(`gSv8|)_HQ&Lk_k}+6e zhT`rtP7PMXS@t4sw?Ap}nRGgUM6v9`>eK_cZ`{Ph6*h}@^~kmpKxsC9>dIV4*t~KY zEzkS=cg!^)RC8xH=_WncfPPfYu<`I@!lCFYr-TRJp)uX`E)G-m?ly7I#M_&5=m*RMCucRVLrGyv9aKYp z7dNkRclzC3!gUM(@w74Fp)^AA&=cU$lMRHRH)x}%DTBI<1sc_ibqLTrx*O#G-~7M% zhX7$HHz(xOT`Jyd`O2~l##u+IFRyd=R=r9I-GBcZ*Etp|^WW)&PK3_9Xlr&T3-=Mh z90lL@L2wTN?gl!5D9d;>-?VWxl&beq_ZB^QnE+4VSN+3DaN%yPW54;w0Cy7{K!xs0 z@&DH2o{69AiPIoft}6`~Z|EmV%x3`Mt677tJrChIDaX3h_;k>6=<}C5`F~m?Hp1Vn zituu_t0hbL;xbY@d-myZ}qrJpq6Lq_KaMEd+ zU!&9JLXOT(Cz0s1x(wclEZ+mAWFd`nirQh-N_;_rN~N z8PS-ONxn+@@OC`LO#H>zvJ#((JAe}!Orx~TO7D8teP7tn<(*N{x&{2$>WHj1*Pinx z-q=IV=i)?a&9ec1=FacJW<_&q33(kULIZErRoHpACsZl;jx6SecY0t4kV` zrqIjCFP}&!&#(%5wp7WG{wy@jLiXg3>ikjouVrg{PHA~5HaW3Cyg6Xw>KS!%VKn8H z&u*c>m}E7mpmC$7VE25MGGM69t^MI(-V_gv+9_h9vF=^7K+pBiwG)u&{%cRqz|-k+ z>tGt5%N}nK4a#RXU)zX3y(?>URt{g#+eOs^b}f{M{epC?~FfL8mF0i16Ow5FVuO z|7zMulH@+k>o{#i-pO&;TR}zZLj+x9!s=LS=KZUK)pBt=CCa)GIm_`2%GOW8MABJd zkKP@kq;i&-$ZX-YDY3pK&q(_>5$h|hKVe1}5-gM|hS)gP0P)lZC<~A{W&I+vO!#M^ z3-_NR^DvAM3O~txf^>pyYARKxD=Sf^^A@MU1RF~PU<;k&AE>2AV@~;>cYLIjxpbXZ zf3@B8oV;LcGU~cBdf7D0&9CD#iYJ*S0WoliD`{T}V8jHE)0A@SkDl|`{9bvZIc03J zqf{_{cXL+a0+>hKJ>?~amF2h}G-;;r93^c+xU&N!aw!^=rtxl7Izr=#ZQ^SQDaqjG z24#M(X|`A**FrOJHayTQ4A1w(#eMOw+Ybs$rOc-4xO1TKHPLS<8L!)QkeoIQC7#foO{w6B^> zW%BT*BKBfXnP(GNAZD~W&eZ;ls7Ui>QKGWFlHTgEZwVp(NgKp!bBk*HdYtBkC^WqH{dw?jwxF6dXwkfo9iQKwmi5x%&*0Uz2x`LL-vAYLHUN7)`hAo-C#|o|&s9oSX zG~9mg(3wc?ldE_j^6Y^Ivf-q zS*)+R=Ps-)2A}cEuY?k0XEbTs5~#r+zrtyz(46)PdnJ8-!Tz(t#~?QKf8rtbnll08 zn2NOFAxMxRH@MRxj-x9}LI!AXpx_J|#fKW%q(?&MM}PwtEIK@5r9e2ebNqS@hQISi zkW^5Abqnt;``hWs(k5FqfSbV_q~`7wPnw8K-j!X4AAR8{bUT-%>n#YIFa5;O-*Hd0 z6SDZtQ?xs~Zq?BM3WOOUoisdjzSodHBP5zU^tD1j(df_uHO$B+dj6fzVsH~@NOu+y4pT|F7%uM2eB5TD>eWQrZbUEv&R zVJKx&d+&`)#Qj(nj3*!)MKmGNP(vKSRFD5zpsS=%YCRE7#dhrp`={KcA9|edHh3z| z27pWe!_ii}=NaB$&#I}9rSGkMxQtCH_IcuYC~T-hze+E$`jqp7`E7|q<-t(4RL`h$ z5ZMsm>}w);1{Ff0?uRjJ!L}&!$+yE=bi#X+OW)+6>;yg@1hqCx&vkpbqsPoq^-)_C zVX(X5-<3}2o)>nEXGJx!dT@mi3QMYd{a%1hC%L0f%{O~z=`#Tm$3pDIi0doVG)1nT zOl4teC{#(1M6B?OT>mo`|6_E_nfW6rv=xg6jW1*=J0w*w?2#zz^Nir=;m5>HB}5c!-In*PmR z+z+KZ&s+g{#PGMdc?=P1jIWPxZ_Q=7aQ!ngU#Gyg=jpwCnKxi)xi=|+>VT#oTUjaY z)V>8w8zB6bMU$L4rM#aHPtb*x*iCG*=_WoQtPis!KCw4L0}ch+ z<*S68+Nc=rs&W4Qh-#d;yf?~$phO1j7VOPFS74e=)qlNn8Rs4*sNdbZnq^k-`#lq) zM77|N$)NXg-PSlMbOl;Rt#76mTZno!v>vPgT%(Rr9D@1h2R&B>7zzy1b zH4qt1`|C1a*|hxE!4kw3DKN-(6H%RlSI=Qv^m&+wgJBLjq|qtLX{^|!D?|_{g|l@v zLC{AxhUo9}>d<=Y$5{6VjJ$~!ur?+J9r!FkaspugfA*ZB=y?;sdrl>w0F{#$$aHvq zc8?4LZTI3<7M4CC_14TA)y}E<4`ME{(xliQt+v3Ejg!E0Id?Nc`oeI>Ol29|v_c|^ zx0iza56N!RmI4y>*70#K0x7abJkZfisB%EjOG%KhCBdSR5CAVE>y%c zxPEZ>^0K<`+@bwr{pyYs7xgy+s{l=5qa)qZVM~bj7U1IsBxLI=Yiu{Ix#XYSv1%_h%)`9r(Ut={jq!pMg2 zyFdYH5>3DpJbO$8+L7}cN-{ca0>{<%VwTf4i4$1yS2K%YzU;@P-9dU|U#qi_ha*_T z-jOx;ZgGA5yezgthn~t`tf^~q`0-OH&NfNac`u4Np=z7D5j|KJj#7oymCdMNEao$h zaBe>X?+zAPN}<%^$0NiW8?0&>>5>gm zOM=7)x5Pma)>Fk8(nBVCAjix7gM3qd751hNWGM9U0(kR_3XuC187s}Vw*xGuqye&a z3(QW6-;HvI?)>o+iDkvIxEHvqr5}<+tYxo4Xv7b~HoBvL)*2Mdj=M>oj{A8=8tWbY z$sG{hI@V*PRAre!QG9}XnuWPR`^>}-;RCXiLKHmB!ltXRD~BY9J%z#C(~Yhck;5+9i;S)b~|3=#v$t{$KidX4)2_e@(WWWLOo9)2p44SjT}FWk^i zd~8332ytP7Nk5Q&z+yb<+jYi-(n5%aI|e88EL2R)ZAUQRs-5}t(ZYG#sU4Z&$1eoU4McK1;k8M-;r$iO z=vw3G`PI<8{mHgYrTdeXh5=v8F=7xWy26=$7IB-ER5HP~Eyu(0YiPe*##3Nn+BPHl zpPiihD1hP}SvqJa0BIJWLy;t@Eui?>CLLQg-Q!TTx$Sq8SzfVhdhvQX z(!&0ozuw+x;In-t6PzhpsJvYLbXU zQD;CUH*<^k1Mg6a@t*-uGh@?FjTA9w^=a?f`bcN`_{?eAy9#Fl2ANwT4cul{vEejzWqkn}ga(a6r~#yEJ`NSf z-p?#9BoXvG=BvnjUy-^zLKD0I)h3(wHk%wrg-R2z+Ej`j{uZj7gw2eeOX7BX$D3!S4Bd@aC;knLzK@1vUenARgwS4i-&h9!C4%xkAqI&kG7uI4*hy#~S*2 z)D@L}kmn=&y(@Br@zV`4+WU|g_4+?q#|DH}6nPO~jFRm(bsEdA*?KYn8*bpOm%kH3 zI_FTE%X$|RmW08Pq!iX7ag#jRtAaJJB7XF{Up6 z?zK$0wiVaHQ*~u~-R!&iR=i7G7rBs-Tp&MjM>nA%Tq(aeSwdkj7fcOo8(DbrI(YIks|>Ur7bhP*<0fY& zz7jBl82>SP@M?WD@O>99NOwud+1>BhKkJa-1RdvS7N1zCy8y@JNxlNo&CML*JilJb z!HhwBbbb=LuERY=UU4^-_)tORJ~idwfReNf+&QC z#=OQdyucs^|G(GRj`$9ZG2LCDJ;VKz=_MM%Js-0YM@JU0nMqr&8C0tJuXQaeW3?DzvO&eKXtFZ zN1jK{8I`Mk>pL;q)d`aL<~65z^PR5>duGNe?s1HXIVFquvZCX=9zL!7lyu3CPXr+P z+=Fn!=9WZm^CwJRP<$(pi!5&>1k>)C({=M`*6~>HdLjqkkuo{FscAz>qG5E%57OYy z>*%UTFd8-`eZ^;Ws3&`+xT7#W!MQ`N^y^C(f3i+som$#ta)WK_c=%RG4&eO=`0?88 zUhd5rC9KW&=zh1W(Hk$r|Ho%7Lop-jLlcf-eu27I&#xo~f`u ztfZ=6Q0-C`&G6u>9d%pHldqY53e7;B$oZAt{HM9%NX9x*i1KcCZ$Sz?DxHE5sARBh z#EH2x3#uh6zrhb8TFah||733~dIV{negzm2xOahwAjL`qiIiy)Pn|#A5A|%1*>4-%q(Mj+Ap{!yq;II{27k zmof?V#mj#34PyW%Jv;+XjG@g|R_yye!*Yn?Xa_pZwj)AQr7yQ`kXf!bAnPcbDs(ma zhap^XZB{WX_{5N0cv!qO5+s_VN@!Ze>+E<*pE;H~4xx#Y&r zzJqv9OZ~k;t*orlG&x-45I%!!6K?_F^RiE`_DL}fdm0zg%T-{6pej{-Ys2BglOkR- zHbCC5K`H-K3he&R?+I6_uRm9Zk&EUQMha155{O6j2!HnpDmV_*!U#N{_VSP&_35aI za)alhi(9Kl-5j(CQ^D9jU!_h}N^LfOYWW%P5j2FM{!vx)F+GF7RTt`XnQ=UVAE+5` z*y_e!5PHbN??e$N_a=p&2{oOv+l0(N3;_@#8SrckP&@V?2-6UIlO6{dga#gRo4lgl;@ty}oe(haV6M zffW4{mA_$hkrm?>Jg&+FW0x2>n;(MnE{}%3RY5QKl9$co|7~9_U2$_^DxGQYRygJ< zh3Jqg`xNFXgWq+P600mZcD4Ik7T^EV2~VlXNESgNoo-EnwW%tUB~bnI2BpRl{1-|b z)M+|Hpn8B1v*5;mF-a+b?h$aiOQ8|8*+p4;+<_ua2IkFFsA-Merg&H&wmXlfahO(4 z4{F9ouJ2(;3G#oa;kM-NG+;^)w!7y%k+f|}`l=6BU3V3Bm&0%W^(RG%<4T@(EURX= z{ZyK3>ck6Jn6Xvt38xOLNBHf~onLs4Qr{AzslI)!P0O9$2Q(q3ZCl@W>$1Z7adY(j-Zy z08Nafiv1Tcz+EYp*_gXWeo$?TeE`TN#W{u!^to!^|JJ+ehYe78)>R<6Ysb4vzBROY zb=+}1&vpQKlFS75S%a@NsKw$R-`?0cZ zj2MRB{tQW@N&xF*>|wd(Y?gGhzPibbx6IaTZSDRO*!3>MZWUiO->AWZN%L9#N{;Fs zzqpV5-AF0}muR~XR{O|=G*|b?W7ix>=8a;cX-5jZ z>Z6kCJnw^9Fm9_xy(9(jHp@Q-}EX?z9Ko zo4@tGliO_K&hy#w8!zL(UO#OK`GxK3#rfm~WTHiAhEv(UYAphy$`?n_@He)2c@4Ti zEufq)g;z}MD20fmROS92xvhSIXa>}TcNfs<0DPJmxaHZh#=+~GM)n#V0uPV!6;wr9ScrE`!8Pi3WND}|-U+F7~i`2dqH zy!gAtU=-vK6uR}Z@i4@hudk`+#%53Z%>TFr;?W9J^3U%diEDLuXVpkU2pc-+jM=nV z0`j|gH(R;1ymAEk_;d+YO1^i{!i9Ro38kd;(p|r33?98Ps@=ROl&9o0&c|>5@Uno0 zk5CjxaIe9!$&B-dZ{6O?zDviA2-`J@8lbRrBChCWk8)C|CiN*qWqtedti; z3jXjG@6=?Uo|{P2y6wZPj8;6NNl;l?t=5-%Xh-&?CibjmYdb{$YI^`EY_w481r@5( zsbqjaoGP?On+%ltAiM7q#B%Y-zkfwB+NI1aI`jGI=hjteh6pCNVK-_X?*B!mn{~GP zi#fZgnVeGHX+qb3QfEKFRN>R4mWIN$J~XaT)zZT95l-qvTV#{05msqinbbeeCgPEq z2&`+>G%4x%30!B1qeTPoM%(LIZ+eqnVJWqcNh-V+VfgQgcK`>5ID5-wj!NT?@lPrJ z#@!&Glp@#pq~1gqzm7n-yPnq`l-p<*zdZXM1EF z!AFU-0)_q;4VG^V-+l{`rqV;SYP8s{oyBO@zCG={E+%sKoof~FH@@#RAJMw)F#_HI zTVVk1|6qIaYm*!SxOo3R#-Xfr2Z9l|fz2na%jKUwCnpOqH7G`X_O5%j&RjXMgF#v~{bX zZ`;!mmHhZYPPWkB0l>lCtb)B7eu{1;ls`4cYa~n&88+#SL%SPO{dz~ zVTyzBdJ-#Q#)xesF;nDf>*EeX#&!2AbUHH;WFd;FQ|JRXmM8~%z%Yr_q#d#GYzcr? zD!`INmdKCz^Q^87etS6F>`Go;+)t~h(o;y1mAb-~xSy8wL|-8CE5owgQ4#Y6_vlbi z&LWVOrF$BHq$@KONL#}WSqN+A-=a2+`DAIpaVjn=-H#Y?(>6=e(LK#m zFaDm<{mld??*kTFp+<$U68m~KFMuqeXN-KnrsSm>2`wU2fHlKH!p|Pgd`viqWge3W z2#9qIxwW`Ydp6FW@xg%LKfZMS6yd(3;2@JaJTTG`&CO85rb9({tq;i~nHpzoW&(c} zz~zO1ZKI5>AemyMjF3w*)+_s38IIdj*jzu>=DjPl(~mCi^qRay9TJRGX6F@%BydY!LMImU9zE}j@3)>ZFZBRER5d7dUXi0RGb+YWbi?&MO}mR^Sai1F%Lp?@{EoJ$Oo(leV_3CQxlvZ!PytL- zKgjg)W*Im%zDXmC)JZ~p6XAk&K!xx8w2enAb4P2)h03&U5mHKb)HCtOmLDj>O&8TO zLH0qj-!o~FABOp*?(54&HO;o=29U0bmk@BU5bR7rfLIGJ3dXf>g5Q_n!85VY5Y5%I zW`3DYaO8;ll1K1WIttnt{OXM|lp0Qb0XSG&L~Lvn0z^{we`w+(-s&hzCQ;(S@Ud9* zOiU)9rA^zk6hs^wmK>c>nRxKnlEK9QYV4qF2Nsa3DbPswPMdf@t%Pk^)`9?;k}cqG zJIQk!Ih8tMoNGyE(i6df^vuzI_=-^0|8ONUX15Zn}p*V7$}}IiZ$*A;)p6ZsE-=j zANyNsbl$X+3DuxHL~ulWYAw5zG`dx4bPj7#5DHRCf=IaB=RcD;vw+*EpFK_6+ks5} zDJ#leh0!_N5t6Vlb;uN2@i8NhIy(>%t_U_FB!XYJhaYjt7ZL(RJV?aIbT8{U7+|-J z@{oR)T74Uw)V>NIAnS7-C5>zq8yv@p`S!yswHoqIuO!WuMfBhT28BY}a`#uJM;&vt z@?c2eu?pG(aFaX*qmd!KM(1H=1d3qWVe8-?Xo<+G^#uW$&Tqe6;Qgg;(@|mrb5J`4>1ANp`cLbPEGWx1hW^S@I7-%RnN#j;mEpBWafpg; zr8_#JGAyNmn3L>{EEwFyv``MI2=pZ&+(R`Nz^yXQKrLBgWD)#bwJjhE)uE6c*44#< zENx8Qhfe0#4B}}8#(^J1V3yahw7%t91;CNY4QUv!t4t9>r|*v>%_H+q9jeG^`9Bkp z#-3!lHT5PuE#R@Yv-Qt!)hkj|xFuXvbV;ef8urPw2+Uw(3kiA5He+xkdpfwX3RtcB z&@jKu$;eHYbgT-Zq7meDM+Zy>^Dk&=>abee5%jbAn<0$0UgC{f(m;5Lfq))2qb(f~ zBYqY~sDSgHo~WO<5pr1}_Bi%~g;n1~(NM_r&lG7ybTQhDThgG4gurqJCqrhx?o*C{ zLIy@ZcfcG28e2tFK#5L`vAO=Yd7=&kmvFK~n^fF9!(e+H_d&8+NvHsZ6Yf0x&@889 zRW&gCVaZ5MmvFU8>DPNE01R8ix1SzTL+NXdFSio0k-pt}{%T4VR6HC%X4d zRBZplGxqe%WJe>51z38h0DIFcvNk0Cn@$li9y)iahh%VT0nS=9uu%^0u>!$dj-x0d zz~rw-mE6)?`x~k&TlWqb5EO-|yo4*L7VN108l7D#F3N{8Nqi=L$zEl|29{Bdja9!bLRKbpgsrKlXXZoY*{qO zYSZ`m<(sIKIXJPesLzM;oknvZk`l;3qcG@;T-K-8I-!{v%^b*GOT%m!bBm zT(Q$+;7LB>CbbXmX}(tAmHUBH=?risf>VuEfQLXiSE$Ue`YVFaH;Ny0{?Np%4?rL) zIT;|i5G?c0v|GZlUZY3T(U4v%zEdGa;lh>-3r9Ifqw}I?{I&mjLrHe^?c1{8 z>N{&Yg4lbY_YQVuB|ub8xWn29sa+WN;`$`Z?t{+v+r`p4HcLs)WQ^(i+x?qxHwGvh zTl;)0g7@W~P~9{3hWO(VunR^mE_TT*4tgkTp0(Mz$!fNJI=>hg6VgvfGet7^aE|Vt z6s9M#7-OBBY<7Ixej8W1xgTXaa4mM=lm5h)Da?ouDb13ymT?U;I)vft&@b5vG*OW& zeL^_WDFs!VpKhD$o%>*?W@k?L(M@(qw^UeoRm9IM?5KJlcrXb9^cz6>?;>77nx3lX zFG|wm-^p=gDXGAZX7{(A}e2gsf@UyU5n_c zzNgHCArPk8!tSD}Nr#x=0U=o@dq8f4VUWS&LE3O#^w-M}1KUyNTNAaeR#$_SF;7iA zzme@iZ14EWC+6c**K@U2hZpOn?0t1p3x9Or3}Uz1(RLj`u=pCjb1BJT5L7f6HG|#_ z{?h>3u6vz(j>1zCymJP0=VGsJyqVwbkQD)VTU-7QTW=W^R}-|021syscPF@eaEIUy z!QEXaK#<@*xCeK4cXxMp8(h!4-??XVr0d*g*L}upDuNC_t=zfqFh#dhc1e|M&f3D z9WD!fTP(Qep9*|kXsUpMIALsqMeP%5RgWLanRrlJpS(jD3 zcbn)0ZPV)L{IB^PRSA^BxygMh?R7nO2fe1|T3l3#nZlJWgftsZ@^D_CoqiZ*9o~dx z6Qy z{jOKlaNLF)$e2(LIMBLp?J|5Dc|E~hx{_PNuDodV_Q`N&`@BEUxyh}F^783;Ypper zy0cOyFuPdBetkZDTVHqwJmmo@PnR(TE{^%#x5yvVDHa`2E(Qb-Wcph_F08kF?=L+# zTZr}6^vCRGjA%G)I zmle?rf$jjNoPxZzN4Y|kLocYUx}gUaoTl;}z{N_tAv5}I5aoW2f=yeN?1;sUz5JtU z36;J=Mwzbz!%gR(hoe~GyECT2B+&T0;G@d-WPtS7wX=v}T>l91%lj39i2{IMy zwOdQOG3ag5mf!(}j-P&OM{n$JFz%V_x{v1*H_c)?2}+nEcII~Ij56pfnbGnoG?hE~ zyH)6#KD~_TfPtUB>%wKMx>0yNZU;``IM|W7S-n(v*k6}megJ_A79YYCRBY-?hGK0# z0fvg!9RuA}m{3(o^S9|1KBXCZj3sXGxljjV6 zP}+>9(Suj#OeLlahT7n?9mR$MwXQ~DkcC(Xy5#5Rtj?j*A+uM#A#2(F#?|5H zQ^3Dk2R~imcaQHk4=A6!LBs(cYJohZRdw0^p0(S=AL0xj-zS9p%CO&WtU-V|)b|rK z?C%}T+Dwz_qn=m>js6DQ{|+X{w$9qNB)6(hw=VR{{Z)s;Z`c5`1~1#$*$q!GA>v)1 zQ=gB)bA?^^HkA_~>91;t6|bLNKTj2Pdwc0L3_kpa7%HyZ?KKfUzf5sbqQa=XL!IygQB}#wfHu6Z!h`3WS@VegMGZ8j0{}- z?`=QGiu4%3&HMk^_iyOw#+WoA`Tx&F!qn~>=r zU_bcLOo@{-c!tzxGIfsU&jl25m@;vRwlzmjSDD?Pyo@O>oA@2so#&mGJawqLW1+C0 zP=<0VEyabN(w`{K z-1(^ON5hr{e?9)dPbHr5;JdljP)MZ)e?E+%AYkWzjI&rwIy)-T#~L6Q*&W}%7iF@@ z|CsH2Ld*FX=uMsEsB$Unx6<)>vu7y$dCg!wTC{g*NWz2jAOi3N^4pT)0Zts`WCd@n zBh?!7IZ%s2D38hDSWKmr`Yhgp@CEj`a9e$|ScOeWLovJe!cJN3epSYX^y6#j+*J>>A6gCsdWSf^ zeyJuMfERPdM}iSUzxxU61qjxVlxuC4eK^MBwY|xo;iCP`AemmdeHWVy(e&N*1jIL< zjby=cbsSG%UXCs*RrETh)b(};np!v+r5hHO<{QT>0B$P8YF0OQgCn+f-LNx1rg2)cwd&0%(?JQ9I3pjWe;3a0v?o&2jT68yaqHk|436wcYj&VTIi;pRTv}Rcj6XTIZT_? z(;I0GOs*ZuA|UF9sGTt!&Y1Y` zt7k-OY>n2wOtLcucP-MTmmWwUc%7M+sGek6R;QgOMws098^SpoOPHU$MW{}_QyWv+ zTdmYw{H&nmFP5`ft}dt74en|0uP)`IUx~0DNc~BJUHH#OgKP>-x$r}fKQZ{}G49-J z{wQK4wO=T?{)E2r{5SlCI97d$Tn(<$66(cX5wOah)B(Z}Na8>$0C*oV6#962taT%r zsOwuY@m|U2h4;-4=gLwS(^~Z?;xhf%^g1lA(@K<^>|a2ol#1?|IUJ6%e^%(1>mv}! z>)}*#wiQEF%+Pfj|MA_oG)~vOT48u6dFJH&*Ob#AS+*kQeG&rkS@+l%l&AZ+`pXJBth-2gBKZcG23vAay~8F%8R zBc|@Rxs=ufpz5PK1f>wp?_0ZB>*YZXKgXI;krpvB9H9VmYYgsqvI7xIb_^ zqg%u9LxxqgVgOjflQM_~ire(de4wrQ>QBW3U6TUk=pj-o1q|ltYQD=a+)PemO<;*V z?u%xW?Zq%WODt;Zt9F+MAz=B4sIS&oef&<3;9ixDamq2DgkpY% zI-0arxKZuTTqGhE<%uofW{Et*p@kkKf5-%d{;^?7WdXDwQh$9EG9xn^thOJ#iKKpk zD^$&0EuF=)g9;#RD7>guIJ4P_U$+&j0zUdWAjgz+4-=qTMP^h2meq3?j97Y|Y zG%tYYSFN?iDu}NKVh)}7bo_aYO@pt9o8ByZQL_79Z#ZxN=79~nY^2S)r(DJfH zN$2H|Jb*e&8(B9E2;8V0^oC~Wkph{HGWDN{IuZlAWtKO#SZc194 zm8;GjD`r%0=i4Ti^9JZ)H?<^!G%wF0)l|xECpBikea;#HGjH+C6(xFx3c?w&#~rwH zt?N}qTG4p=OIfS`k5#JRrrCURqsU~5*`9$CAMl2~FcLrg8u~oU`5NLL_d z@!zIpNpE=$vC2Vd4-vbN<~nWkVBz5^eyTDwRO*@IpU!YaBw?(f$jzJx$;XA=*=C979{6@lA8zM7t--92_noqLy$y3S;qj;_WfxNZ4gB0(%(g4yD zm+VPo!u@YpA>PelauEcz_xXJiPS0q&>VP4O56&2(d#s`8RRcu`0fU=J-o3B-{J$pm zTcnl(d`90&2wj&oPtZq?z)*}seh`W| z#A7M+PoRP4@*Pw{ovG{+GV@2qO9N0?m8aULG{6e&nubSMGoaqwW{dv+-zO@ZxfDqn zK{CpbshgHF{o5~3-}|i9#_~qkJNst@1dHm>q%Ejj$jm-oSw4wgi0&tzP0N)3G}@pj zVK1x(m~HI~OgaC;owc#pNg`YxROs6Qz3(spszP~!p>6E{}@gyfK*qGODC*@M;mwTVm{($g~5^ zOSXMyR2iktkR_3N5~C&yE5iGF#uv>(F@%>eAvf?27ms1qz2V6~W*$|E8qk^Sjy7U| z2>b?VZeQq-sbiQk7?hPAu{p;)))nJrV@XE6jza;0{J#!V#DM43sFBSSi}BbFQ6J(e z&q0B93^SO1osBN(g_H>V&T6P}9{Xo+MY)FoO6%ynKdfc7t1 z=h}KUyKGhh!xrQ@LOl+&-U<9lFBYGafis_I&575YJ6oyqW`nbSS};* z5oq*U^}R>c`@U)LmT;fcmeYt8aQ`YE@#jQI)AtTq(4a26v(UdBD|AXm;C`<5C3$H# zqd#Hzg%Hp4SMA2Np&WD*W%y95`dt(8iQRw-EVNr5%Z{^L;{N)CP7}tV627ri^iWUjTg9rjJqEmwdr%=Xw=$bt#f7DPI z24_wmRJgLbWZj@@qO|~^hajrRbHS6%WIl8@9}f%Ts%W+q4uOV0bi@Brj3-!ntsedU1L383!t7N!07E0#X>a zJ=?k*)Xn-Jr4_tC7-`X9&|f`vXd;>s%$n|0)tBO&FPq9LaH1~WXXb4I`ZwvSbH2~V zm-8H3LoM8#7w<8EHq|<>(wB)6t4Z-Ig$ehHcW@T9ohwBJ)s!x7PCKMeaAvcQHr2Td z==IFBL&xpS`T8R`kD@}}=w^P-iNAv#B~}PPk0Nt+c>R3pPc}M>ZdOYaGLO&Ph>p19 zJGs<=Kexc1A5&x3NCMmPy4$2n6gziNn4+Ou2NYY2o1*Q%?yePmwVsj6Cw$aF>>#By zHwH(zF0wM@&lPgeU6CkENRUqxPRi6TjlFuj>v0Qjs4nt$3MJ8920i*zZV}#9nk;=jX94MQx`maEAu3Xy&@iE|Q zbl3>XHAXx%YueqvqX@a6#()hNRer-mQ!#>{Iy!DEqtwGx43?aIbZ$5!##k~nApPC5 zy>URt;lD?;icKN_-V`AruRkGR)(7kbIumEDE! z0~>85$Xmn!f1&ZM7$dm?OuoyWh!9-y<0m{1&t+xScWw|mE_D8;5$KTh2= z!PXO{&|*~i%NE=4EfqcN2v03SEa>|`_y2r+^l&49SY86Q;dPH@lrf-ShXY1NVze`f z%BC?!=KPnEyHPt;@AY|8)wc&0Lv9~6fh*R@<+BR_S1`A|-lL9h*~psRNyBWD?uO1$ z$%9~J$K%)oKDTcZ)$8gGBldD5%Gt%lyPws;-;WOLDf{7LHo@;%9n+J`&h?~1z% zjV8dNSE*mjCyDxJf^t&w>=RCN*;2+4BS~~v46bXsWKCd8Bbv?8d`ZH6eEMz^O8B0} z+ctgrt%I;}fzUI*qcrc5%t>gFDh=4_APZ`~?m0zRA|cxZ_B&+F(v>x>1qNe_zN?~un=Tn2eLBow^dC1SI9y? zH9aqs86&=*NB&0%5GM0#-yjRmikGFjUGI_~&?s)0?mL-dlszqcYh#MrK|0^^ZkUX_ zW~2;NvaUSPeBlccb4h@vl52-8P4%>oSCccRp5;w9puL8zbH#CYHfB$G&K+TF{aMdj!Cq>@i zl5duDKZe$>B%MY&Qy3n|C13;~?4`_oJG5(ng#`uA8&RNEUzpLJSym5V?W_M<8?ng^ zhF(+rg&^JS9=j~c1hFAviop2Q74G6E7#kC1+D9LEx>hqI5`-%X>W~|35HKwT zKYNJ3q&NI;%FNMflrM~ZGZKvFOwf~u)r|v2d57!tEWt>&Em`NIgBn1(UOO|7G?wve zGaRgI)YmFVNPUW4Fv=zwa#i*()-shd$T3J z`K2Mi{!I?T#Bm0Y%~Y4fgXztjqB{Tg{y){N7eQT!N!PDW$PWjLkGa&)d8dhwjnjsJ zfnU@;NC;hQoV?L}yax>R;@}@+L8v$?q|>*g{a6KzRAlnG*pL;JqI%K+Kl*;*Rzs@% zM%@*K|B4Td0fw8#953@uU^%{OCc2E=!-L>TQ*B+Op4^}5HEt8@{g`@ zAMcV?ybRT1VA%1$`chihkRdB@@hVAUIoW&-86|Ue5UC@f1R=@pz-aq->R>0_01f(& ze6Y;}V!mGkZa@f4C<`(^Hmte|DmZ2_>!FMR=|-^A^%(+GSA+sCgNw~rzkFosS6CbX z#Y`9&77w$-r2r%0GPpzQ1Sax0HE1ULcqVD?XsFB3cudFf7E~dtnryd`^5wle)qbRl z{q~V@7Qx8qYpmrE0e9q)eZ%aMQ4A-#fL!a&NI=oD+=n_LTqj$6VebP2tTtgl9ShU<7AoxTNBjwDk|Hiu|U;#v*z zz}L{3^yBSW((aK?m80)~O;BY2AT-2UXtcx>qk3^Y<_{DiGT?#RfB*|{?Pw?@oxT_9 zPppc!sP{)3R32fsLG*sXh~Vug-piT>|V4#sx1VbXqdbCoVTmK5McjC>~p zIjD(yqM;7E50(c0XvEkFWb_K@R2c4xw}4#-k8qE1B65g;%U|{2qA+9ADbkf>C9njVQElC1m9ZZq=@fO8R>4C1KV&g&#P8xOAe!b=9e;E2j(-!0d%htL% z_u$|mmqY^*YEUg)K1H9Qod%6*+`vkKtS1;fjJ>@Uj9gaMWMCSTO~&dgcZy`>Hm!n1 zX;IAfkZsO@9=pIdh^H*cEBiON_?eU|hn0qns~gfVAE2d_2~wM;Cm1t~T^!3;su0~` z0Zt$nd$*hq4y-2ZD4Tzd3HVPBlaYPfMI11#q1fwRS!c&!fTfxIDUZ>)(~lR9_g^0+ z3>Yv4K}k0+$2skm4;~v!g-~4t64!niPk>P0G|M_C?Ou?05inr+cn8Sp^eR{!xLs+oR`L^E-Gs)1SXMP%pHRrDLW_ESiLc~;5`*e1mVxh820 z(l>RjUP9!Mx7gfREX0i!l@r0eH!@4@o@@*@^t-!rCX3jM`cnvo#dmZH23S+=F1Rhn z-ADs^a2q9Hjl~9!tO(-Op9ckQO(`tCm4NC2QGYY_s7FBiV2Dm6gV+A#lw(X_aV`RX zrayHG$_%WMy?@va^Ee&qN$P)XBsR`F{DYTJL=7gyk)A#|$`i)E+C&LfW)%O!!By`5 zf{h`8Dv3aZ22=~Rl|(003*uo}kyQa)uuI5F3=7crSe9tXj2Yhsute}%EqnufZ531j z57Gza{=|GV3!z$6`!SGO`v2hhB7qT5Kl||*RfC;4ZX=Vez<7Ra3!ol_Z0fjY7oJVY zC4PH%9LH-B9gc}!Axrs&1FQ>L(w0XC9s{ajaW0gyCKCRDWt*`DcF%HOo596GX^F^Om(1d{XkZ5C;xw)U_s)sA8R5P*h_ydNo?>cS^?yGo z4nLxJf}$NiCDR%t|CH?kW0A!s{t*nX%H-q9$=W=UPE3aXYDUo(cMO-2eTpH zmb?8A+D{DTGJ)6PizRrFv*UZ1g4Ij0HZBa_*MbG`>=R9Fj7+eP$DrcImBbTaYV03g zc*J@QE|N<9g{*f$d%gC{*eMH>7nc%J*Fhf3pV9~ zXHr$FNdQ;0r47W61bd3J4a;o0&xI%~5)&bnV~!w7eViPh@*BWfJltb4@xu)vXqYn( z9Xw!*(C*zM;1SMG5R zDQ;Hx7HZDNb+6iX_Xdm=0xRtr& z^uo)!sd%OBRp2cT^0Y2>n9RNjf)(89S?J0HWG|h3MDliZ88AEeTNpU33$+=1`U1A} zn2$689X{_zeQyc9womukjdM0dsZ(~WM>kO1;SG!*w<|^2z8@QfjJIVkw@J*1(1gK4 zIx(bcwwaxeGJp=i2hE846}x+tMmB(?$NLe(q3y!cXZ#;#x{n9w3Ps7PG|b<-yymYi zCpLlLeZuDAmGkW40f>h4TFc|vHA=k-Co?Lc^6>S(?&#Q@*zgoo-WP5E_S|vUrc>sS zwPho!d@o!Y{hmhrsjG7qw4(WRWofq{DR{QKO9ae50EFCBJe*1*sG1CcLr@SW>kBx( zk2~PK$gO2aL*SMO6UA%keG$-9uvp-yQ<(ZmToqLz_ zYrI>Q+#&}i_JoToXJI~mn=kHZtbk@4^BJv@ZeZx^(3bQrDRL^zuqRZ#E z`}>lM3HFkvBc)fqByE)2DPENe;8AdP#L^Vbm5?qk3Hle#?D=Y2Lk1U9;}BiVEtFqS!B(;DwJc7^UKw$B6FuVXw5;m z{q_0s>1<~}_)ufBYA74<31n7pU%wcjIRjsywOYJ?JI!uMZkzh(3}otl#=%YdzSZ$* z{MvlF%GUVN#xeP<4-%Myo9ZH%?8=_9C>~455&}xPTu&rCw`>?Fk!8JoEDSv#h+Q=U zkb7&;j+Vnf6FwJjLkx*WSwk{X7G1nu4cMw)-{aX;(xx&N8&!+yKCA9i@6)Pw(s#1n z)sF5#cM#ySq;n4!ngFwTfy8=rxdl92B@7Tdo^YHlkwZJa4b-DkHh0cFzCfTiDFV4*UlEn8t)|YKkF+halEiT)yrs*ChV&JIasLrtn=9jz9iW zn2VethPf`<9=I7xN(LC3116-jD|nnq1b(Iq87i(S3F#bc=yN2%iG+9_nWYq9%3>7X zn?^16ZoR)f-}RjoVRT*PXSJgWJ@L~erIklAY59w8-fT^M3Uv6yCN#euF&D9;=}0#S zI~@C&RH%8VtjXZ^m;wY+c_h+PAf8HskZKZkDlx(SfuU;Pt^m^fGQdmTLw@QW(+t;N z(N&%-1uz5RqdA|Ki#VC>0O?(C-8<_{axH5^BlU4mg5T=Y=ddi2WQ=7Id6q&j z8VUt#xbyTCG<}P$x;Ym@^-t?nTt}<_R#~^^`6+1fEN~>Tf{Da56e93`sVQVwU*hN{ z^&ktOU!4WLIY_qFrE%*r)9D{K$*tthj=>K-^a`({zXGO zyl=t4`<1~#%|2Kpu?V@+ncFxgPeBmqxE$WY9Y`%Ir&_dUnul}Pg60JGCyL9Z{EtLU zH28n9cB@}XBC6Gw96fI_J*>5+?BD6A%wC*`;+HnC!WUxtLJVL^AEJg)VMQfwg4nnG z1!OoSl2o5vt?U$(u>O_Pj}~7EeRz657NGzDZ#!*W37>uf*&jCsuqRg&uRf!{zWpWm zx2U3wZSx$x-eKZ?)r^y9{&)%N_bKc_^6A1zbkAFUuLcw3`aO2lOymk(Wyj!Zo%K=Z z9P=pKkWi-nak72vq4IDZfoD4Aacfwj%y<^F1E+y$NdsuEuj34RU~)HN{qeBT^mzk- zD3`?HO?(V|i4-X#?I`45yxd^jQQu;1^Kjo{1zqxAe!F_YalE*EbloEVi+_izVAZObOgBxV;uYS|ItknaTTxjPHqk`o`-9*@Ala;*gsO zQx7z6HVa=wbYh-gp{A9A_u+3i#90ht-dF3cnVWEo6jV{bUPiyY05OG5jr0eCSvz3k6Ir+D_bUo>pyV8aRDe&y)xnFC z3`d2(f;VlB20Hxg8QQjzFPi`dsJg=>#eI$o=+`Cc8`yr_Xp3LYY9zJ5v6* zwkv`5A27_hp!m1r8-@e5a48DYME=gaPywoMJV|~_4Lm>JTWx%tnfAN4NM3wt4&;OY z*)Gpik0Y)un%hs#tkT#*=g?c^Llw>diX~ZAyG^gF_2UJ?6Fe`A1u1~1WHrecYDGqx zl4!n(yYqOj;opgWXf|#x!5x+(Vw6-cpF=*D5y+)Xsqkte%ks<52G(A7{1pw^v{bWE zFoIh!kN%mvCiGinom||8#W)u4gwZ`{Oa9)Ef|KXL~zgrP1`C{w~jKmjyH%NA<~ zZlp=JNEM{2mxaBE-NLWP%pnj0f7GxPat0j3)T(4xyDp?4S4cwuE`Az*iX4kj6#-^H z!e_&G?ol6w9|i3Tyywk&bCm!AoAGTGZId=Y&T46RkTc3^0N21ET^Hx9DF60VhtC#D zf?g8+m$Rz8WR=Pg``PvfHk;aiU!?#E}US-shn!JfCR2LNDT+{THjF?2ZH?!(V`}5u6=b=TZ zaS93YXY*y$B1&8=sJMqpor%%^Q!Y4lm1MHqtIA~$pZi6x13ju^j6!e%d~S%=gE8N1 zUWe9H&O(K5Az=MElbi*Rdk7ksPuEdV+{^ULABj;8EJ~}DO$SyuXHNwP#XRrPb>$Ks zfqZSE=kVmDK2@Ss`E&il_-e8dY3=R{&jyj2Jc7=EiW>fp&h^kuuF(UOx&&{tH#l@Y za$e*-x7&s&{EcdiK6_tL{m_jZM~EkxAp6tUAxw^AXkqvY>Z|~9{lEFgg7=FEI*2QT zR(7@%!-BSdpt*web?ZEo+)D>fp^NjZLc?p;$$&h`?IftE4wzg?pe?3G36jTOK$Fk!|jKo!-z3s@SHjE_zHrRD(ra1r7H-RFDrk-#n%c(+F#~Ho zgTUdci$f|la}jzMP-@EnXvn>rUtTdGYS(1rCHidkS5^{CaWTJ3iQ zQB}>~AFPP}w*msLZPSlp^pbi|K!cYjF85uPDZUBqqc){BkCGcxsWO^LTsHbePssw; zPN|MhcP9^jgD0hbUmk`RFlc7#vuiu902R|o9RWQhEKTj+95SkDm4B4;#c+*^^K<)- zQ6;r1vmj{F$!toMEE0ZT66N*vkny#r(WuxKM!vZrL)^L|qiF+-y1k}{gI`>oV8v(1 zP^Ch@5E4St28!99w(*G@&R+GAk)t$eOc3+*Yp)B`ujvl|(=hkhU~ntu)%WNb=s8p< za0Ciwkg5UHM;0ciw+M!*61oza44n25~$-IhQUxc5v@#H$7MTy07qoJl3&R#7b|7SioZW`NLT_dZ_ zT_g@lncS?rqb_hg0FgSF{hwEaEvzEhhd2*!2?x}qW!STo_m4KLQJ7i286V->};0d|D8PUs8U$ABV~cv_LvZMZxcnxRks57o(aUXfrVW6`n}qk zDn3VcCP&jL`2A&0iJaL^@8Pd{O7ZFsQr`npmN$}9x&DHZ2L_J%Oj$&d=Jvi zb|~7we-5W@-Z05(SDiQVS`u=(LfBLW2SnT`p?8JO+jyE4B-N72oO_esIIkE-`r^FM zsB2NBUTS^mHRi|Go9BI#|G06Heuy_`MJ7W{!dT0sW;Yf9x|R@8MgP-M9WAko95}WV_Sg5lCdAwyq|BrIwTG-A6+g&c zc_yu_Z0a$Ysq78E4PGx<$LuWtwR1>mA((-IIix(`@O5oDq|A^)Zou;#QW6MvAYv|f zg>%Mjv~;)Yh%tawM?ZPv>DCm_UNy*+mvjvjo!ca?h|&gLk|s=#wp$y^9Awt_Eza5- z!xhRtAgi*{$|-NzTrLT(X0|OMp36V}!lKAbQy%TPBR{{(T=MaltwTmOSmEXGF0~o& zFKQTfH<9qeMc(8?3C#j~`YHBk8Y#482Yla4NDNV!@nk$$HZ>HqI@$S2FthaOdD)%P zQsmM1tqEXxKTUN07|FN6C$~f8?zFFYXk_yD1dFXH2*raw0&^-#J7;-gX|c`W^JC~r z=&eDRLgB~@pAl$t;SuiEtLWR$+Tbi!lMeC8D+Rmo3Y?hovbOdj12p)BjTe{R0Afip z1}atxg2jF}hA4!SqED(hJ36eda%COW^ZkI$@>%9dHnFHN-NC}-&1Q8SiMnWSP9R~o zSQ`o}2wHYHZ=psOAAkx(+wI0f-e`SLLqLHTtyF#5c(BWG2H3X?X(g5Fr+0sMf^UO- z`Qa2A8nM%(wFjY>_fI_O(S22o8t~>w(*Jr-SNXRk^rN7514DmEwUzL)rPWzt)De9t zAn7ZbXJ5R7hRO!5?#PZksN$aD@Tom2KaDdexDu0#5Y%X&$({EU9c;*#<(|ZvqG!LT zv|8a)P)1}hrVMWR{i)cGN#?l?dvZTgDEsEv{s_~SJ+pjSVIPr9s=q}A04>W))xmc! zc7=>7@8W__i}207CWhBIcA_Z%Co-6*#{||>A{H7@mw<_=orSn8jb{44v z|HK*utFs*Hv2YW{%2u2G(`Kz zroT!BuYH>(`12Dq-svg+P*Iwa24pW$G~AIII&ILpG-JdW?wUha4~i!)j9#o>-mk$Vo%saseqZ#6RF;0jUf? zQ^?b4wC010(dOrc60bjR$Lm>N*T?Lv{&5 z2^TlxMJlu23!Z3(;lF(mOe2TJTFbdvk3-eCg%`H@YOdP&^?*Y4&5_G z*7WbxQUmT@C3w$7KI@*W1xHS^yr_(uiCxMZJJ}}Nh+DVTD00}o!_sW|<*;Oy&hMeD|riA;)?38n0F(cRFB=+MJfCoD$-(a4FQ=-_8 z!c^9~Ews_%6>HR}>5ZvbC6TZO#{6Pv#VRWa;XFtVd~n%RDr`DwA3q3M-VEelmYUUP z(>^{>%A?PLH3yiOO|gZfg5MxGfRkn5qqla}3?R=WBsAA>pM0iO*B$=N!6!w5J*9f- zW!Bh8bin=1`JHbCx`b?jw7%Ay zW&}5KvP}}NZyQNp7@D)2H(!eMd+_@teqBgtS4YN&>&qBiHp<9%BYiPM6j`ed9zc?> ztCpzXc30Q?^W8>*&SI$W=esMkXfWnG$o$5f^kt4t%X0fPV-~UVOF0fk;Gdvi>}8cj z#+hd{#E7|;eRtz(WO&o+Rvp&93F8L$mUu-)7=&JJgw?gd=_se(?Xi(EDlhhKe|^1D zGk#v=henYOB5Fk@!V7t@Z^TLYPJr%ZN7pT1u`fr2b4#DP9!{P0Yv-jol4HbD0`eux zgP4(C_cBsv^8K_TdthD=zkn-CA7?aZHYt0H|8u~_cT^+(#1Z{ zFn@DjUJ%^>p|HkmeP36+&}xbDiSWxHQyspOh+|i?clRVESxtut@Dj3<=Yl&)l|FB* zx1MXRt#FXEGblzRQd9##93Iq7H~qv#-79sCfA9ObDU5jd-uEk>iDKx7HNh3h;HX4* zrUMtQw74qol>!MM(3Zqk=e|r~%krlB@2EUqilY$-cM=IZhpv@~p09aN3p;^zTFgPWZdZAgMnS-sYn@E(7s~{^PrG~7E`<=Z{fw$`` zO(`U;SXe-QOC&xat%7t5`C@MB2_J5?la^%3+E?s~F0j%FDcXKZP5 zt~GsNR7EQB6@dmBeOgPvGGETK7Kl?%Y60L^@^kO1 zk>nbrx!NgGvR7u3Z){XpTUoDj(;_9RUY}92&9g|jXvR3!aLymyAHorEjznjz~oUSi+rE+S;*wcLO2qnbJxlr4WZ7_kSvK-h*WnP zsPYQC@m2Vb*ar4^{Q^{Uu{)rFLwVoQVat7&=f)+D$7za|O-A8h14qDA;eKtZb2}hj z&IW@VFCrVzBZf@7SUZ!lX#z|1LLJ9wj?0L}L-3C#JfgN%v9Wo;__LYHUMsTjfgi`0 z;MMZRv=Ps7L6>v1JMxr0!IP3a`5udKf0PoHYls<7sRyYUf@GpiM+d;zY8mx|bKIil zIKEpsDX7$qoe)zPUwxrMwOEhz-n0onyMXiFP*}v=$np$g;-9GN}S|hldv|C_P zp3M8D#o2keH;xwWm>Zymuq2;p^wnA6H(HzLqB{<0roHu^zD#_0hjeX~tn{%MB^KGo zrz|{o54i|VcJK8KhXPongOa}rM*0f)d}B)MN0UezrH%R$eH%CBBy`KGC>Ez$pgguV zBqekdisC1Lme>26qEw!FgVs4Q#y=XgGv&0KrAql9$2fm4iPK-Vc(g^rVExG2RUmqT zZqx6}X~~6|fZA^x+#@GKLBJgDdGhYd^K~b^W+Pd}QbXOX24J#ve7;;bd>p)z{LQ+F zc^J!wO28&- zS?%`p%lUmiH^VL46)<=0%||kJk`!PjRQv4#32M1Bx5?;B*9RVe=lGfGOVd+q{UXTZ z-xB1T%(gEsDgXvv%|k>$IB->Q0kN!=H+cza1v2FV}}@y#$vg%G8$06OF@LFWYe$9W-<#TH3%7-ow0F z`hO)3^{HSVnov34+A42&X0!96-)Z-VZ5I&bBN-=SO@AeH4@x`6`^N5l%|I;oCuQZc zT@_$2lKBF%u-rvYw+xo_3n~HRP4`u|c`?1AcYr{I`450gu{} zR)EL*4yMeK=WFwzvw!p8E?nWS+224Hh5tqd?VMJ$OBB)dpkV$mC1(=1KD{yLy#v{= z-`kKehkmkA_p*$ge;?8Yq0L79Wi|$~FOQG>u-1X{&7@=uNJGaELj`s}EX zCC4^ZN+L`#bV<3V`Ml#>{7u2`ZyO7ouEp7F);~n>8&&crmeDi6nG1F0XVve0vg<|->4*fCyn{xlYw)TfNSIhab8&l?$WYB2toX7?9AD6+L zy$3)6Kv07ePu-NV6}|%a(P?(pOGuaA-^0KkEigbh9(fT0&xMc}3I^Zm}%nxVb$y4Jb}%9Np_ z=I8o-x5BID%QriMJD5}HOv0RYO2MCf~}y8D*pmM}ibI~K(HjEMDd zPJYo4@u}cKhj;|HU7o`V#SaR%$;s~P_#LBr>u&8$m zd*n_6O1r2>m^br^(%=3)ppAAoLAy9)^z1{iI}@JU?QQay9FT8Ma#Ki>r;U1DMS*B& z`2i8o1Sm*wF9hSCU5EinEMG6(dwXjG`L!68U;FmlI|qWO7d@}dg5aD^gAYt_F1~08 zhTqHz6#tAd|MFo>uK|VsJpsiu^^LdK)m5tu`bVyRkxffc?WLbViO~1-u?!pjYmbUY z8_Y*r?`k*yLQ+P<87ZMtx3~7n5ApV2MD+kZkNcI$qow9YCX}o*wq@HLZeiWP4s;%S zkOe!ok9FX>q%F*CCvUvrW!aIlE%j${uVKQDIh#UiE$PC8uyThM^4SOegCZu9e&~tI zZg_t7c(gu-r{yL!*Jrhe{FJnbNHYia9~Vv!{C1HJv0OAEAl4vcBHE$*lWjpwST{g6 zjA1v@_$z1qCU$*OOzyfCO9}x3bV4&OFSN?qpBhpP@TW7i=GO*G0?4$pxo&SWtreX; zis!1`3B`UOL9n5#2TVnebUuD7Vjx|%7Ce1N}n*!O(SNQuwFk7cN<&jh`GUcU>DXlK;v&^MGt8E}Ifm?E{}n=b2qBw{ro+ts46H`;IElBGW74(Mo-gi@~-7wjtor6zg{(z+aB^9t~4hPGu}-?#04qxK_b0; z;ZELl=jqyJoKjJ*Cv?AKx_uIR+NJVkzk+mlgdS+&6do)Cr%lzCyo}oGXA!zuG{2R( zpb@eUoUO3(laSYH{tZa~x77n+au9m{n`aTMNk=%09HE0NboU)&ol!p%=N(ob%XV@_ z*xb@_nJOPd=B%oDWVZFcxccj;xVire6fP8ZcNwe{*W&IiR@~j)T?Q-KLW>QqZGqx8 zxD|IR?(Xh>!}I;!wch*w5wa#B$?=@M^ErF>?JuZ${60?hP0>#LFg~PZJ)G~zd+}f} zk))(`medjO2ho`!UGIJ0<%b^6{qbsZ2g^kbW6~g%D938>|wG^gRa(Ko-|&p>GgXE_EX1m)TJC=|CxtKe{({OXktbyqekwp0v7KWOPA zy0l&>x}ewRQ3pNK@mI%f(KYv@M95!~uV8wQ z8wH_qg-^~Yj1Qlx#%VgunfZXW-eFzGvk6X!BbVJUA;6u1(K>axs;vn%S@SCFt^PO6 zj_r76?8K{pHnVE0*(rs`QkD$tj%d`0-i3TIp-xGCOWoVC%wv)gi4SZ}GGC>*lPPLN``KmwlW=YMdD(xr6??H!mO zS+5%fDIimY+ID+*G+~ZqIVAz);3Zm7@`y$k|OoeC!CtqbJ7q1V&B zEllZlOLwn3-|PAwXRa$$nldQL<@NE$FA|mnInLd_{V2F#$*Rt*#&i8Gj(*HvG=gtD zE%!`xn??@fm*k4K9ZqKSpOSckP7S{yqkZ-IS1gRLJ*>iTeph$kPkQiC!_WLzgGFMH zBhErf{@$;PTgE7!oh(6c-)Lf7f|0QMu}bOL;28N@ESiAq5&=D1(plm`n_uq@r^RgQ zkd;r2t`zycr`J7x3;(Hck)W(J>F;;Px3nF^agx`a zMV`5hvT!6;c;zXXjq&X6Ug(ec0#`!%U&(O~UHnw5$1F*^t2@HMxvYWqkNMIIQ8gKD zx+FuHr~?;Qj*|0>sT_ppP5Go}-_vw)J@PHqWqw5YwX=m1b0?V$+GVszdp&!7TYC`;eX|wT#RQ(})O?6n~ zEh0xEDl1v3NfqHQawW9wff$@J1-^&I4XFntIOVwMG-Hw)`Wr=m1TGf8+O(?GTWGsj8c8hff+`FEm+`4b6 zD*ZxeAsXXEWKU+-3+^y5{ac5~ehcfY4U3>h=4q#2VrxMaNiLp2?%IFUwOV-kgj+T( z&)y1Y>ja6YlS&iB#TVA1#NnB@skoQTux48;!p)c&?JMrJBAlO#aM4C!*o~PueobwR zEl1i~Ue9bj>kVu2BKnO-7|MU#WRlkS;*_QDR0j%Lz%u(h#NEi`1X1Y%5rEm|7HW%H z=Kc;ylT@zsDlJ^nUF3W36O39lyx{?JP(HrsZ{`_#`yKCoJZJxv{R#$`oq?Hv~2!=6Dz1%MNQ9{#gX5wLCZDrk=wmv7L9)v1zasx0+Xu%#EHW$vVaMf(5^0SkBBCnWSTmKJwfx%8G6g#;y6a zWNh$JbjW)XS+-*<{!W%zv0cg~aKnX^5qRr<^~jxBI;~)3v{VL1t99WWEaNB6%N7!4 z!Nsh7WGBUwiVgn9!yy!f4{ZN8`k8xAKvvps9>&CpT?50NEj}-M$)0yYR}eqkMTQ2H zFD197^}5G5)wC^?IB?(flZJLavB9TOqNWrJZj-4gE>Q*c@^S|644umNB)GmUa~(L+ zCHc17C<*RJVpm)u&N3#k7GQ9$tHABCG|oMS-FL7vCrMIp}8fj>LyZL!?_69o= z+6aoGnhPy&nNDq8_tj7#)HmBhl29_KwLy(Wxf{#uU26;rGEcUfXA*G>nO5npDErP%I-f`+J^RVt%~4M*k#Zl$|3iostras>3D zBsASPzY~I1-tloZ_{B_>O)nC;;se?NU46C74`;Jf+=IWV19fd<30jlgMUWsb{!TD` zK(J? zS)9UG!YkCna0MZllYQDjC353R>|iv;j13qfzKA4h)M)%Uo*(Y<9g!^T+&lEM>vk=Z#Wo8FhKf}0r$SRKOvpp+0`V&)BoCtF`k#0pCRrts8 zN-a8Ws~2gCGrvKfz>E3*8}x+3!^Dz$|I66P7Ss43`NvT<=E%90ePsA@T6r=jDCIi|e|em)jCJ3GBZeKO zc~tzYotu?&E@nN5Za;_-Z1?dqA9_Q8@n;rnJW^*R?3JHC{Kbm`!cgEr+V9_V*k9tj zPTr8=0XPARwepqdmFSH^H&=c{<2i*;onD{?V^#;J$V=(yBR^V`^3i^I;_>{f)kJVG z>J}*7{^WVOdiPdv)_yg*Nv=QtUoU2pS^MvI_>2@bPlI|HzCz$E+8({{9l@f4aX%$p zx-Tjx_mi1qt%kocL3(Qf+@ay`1SZbZg}92DEVI01o&sh5MVHSG>m1p|KHnE~*h@0G z=CvCei+no3^e!^_wB0$)E(IC%x^r8SH9o*Acd|ldywHoT>FyHzWrF2Un16!^IwK&g zr4ioaC}P9ItR*5WbMV|fI-B{^Ji_$?4J72>1iv6AfO#O;@kDrae+EEgZ~y=7r!w`N zXnTKrS$WVp)d{ja4}=MWp|zU^0+vh3ft8~HAivqbwLYeP%!iAcm=ZlrFDZ!;-ufj>m`j^ERBr&!2`F7Rgp90|ip3daw7+^HN{BMwJn>BlPnJ z_kM>{C7LSAxAa5Nrb%`5>5KBGHN^FSLdt=~muh>JjWO0wMmevN#86g1 zl9xX}r703^+|*wc3yUT8KS|=SKQ(lnHRe`$a0>G1KX-)Ts)KdU zMxHu)_3hZj#oKGTyMfi3wP4!nxWaI+--!V?g|S}Czn?m+sH_yw#Kmcsf%oHHt(@iR z6KjZaFrU^3Bz2a?J-o=DAa}J;v1!eN7TDmjjnDv0V}8NNcrA2T140*Hcvu6ijCdO6 z3(*b5OA@%oWqdk$ZA1fQgehQ!*xXK@Sk8f+D$W;=F^h?V4@mBk&fozopV@G{Bz+TM zd&z$3(Dr0vi3!FKhf5Lb@6@>8Hu1c~brpv+J`xcq^7PN<0osvd!g_TE!_tLfcP}6BpftH%I6GQJ%by*y#_DyV^7R5_t(07l% zn?Oie7ZMqh|B7D9(A$2Ueloy!b&fb+JV)M9i!(xUT+XwE2@fa*Mw1mifF%KG_CtbN zq)8xO{s?1%k3;h2!lId4gYr0*!&$JM4pZ%o<^ux9rXqZER>lw@m;>v&ulV0C-E_R=`MUNvDe)P zIg*SH4t(HPhWLNS?Gc=tKOcBqT?vjXl**GG ziHt3=@ASU>n!@vG-IxIxu1y`ZOU$9z_8x22l3PDFCaXceHh?ZJD>q8~BiYXYkO)H) z2ZgX3+V?8*P7*9Rmrv`byTsU}nFzs-bjS?LAz2M1-{SeS3*Yw7*L3Aum3Sw1Q=15Q znq%TT1u%d)ui)pfv${{y;!?I@L1VlK0l zkgW`vg@sxVja8S*6b_>A_FJ4XaS-Wu=We|*F3Lh#8!X><590%h|E;o=^Hv9qePf_Q z2h?W&aBiXQ61SWrc43ckWh42+hh*L1RaZes$GA+}-$&8pSak(q0#7e_+X6IsjDc`@ zv0-fmU3}^lH7bZsFfl1u3d5ie;|J`INm!|3pg_9!fF?2O|LX(~$eI6^DEc}=^9;j6 z1B`H|Uw%9vtZ(=YLAf}}_di1-Z(RvWrXM18D)`FQnE?sl_w}0S`Yin7q3u(-tI^dU zt158r7W(Gb?pOvO1sL#JLNNR^TEBC|a}IQr7)L@f);yI4`APeTp9!K7g3H)+=7ubO z3&RcRE{lyw7%vxyedn6HS3w~8fSUL-31%*`%=U{IPu^-Y6Ud5BL(>y-2Tx1&QIPZe zOXFcG0~696BSqZDPs@>g#1v|;b-=GPH%P}9v{`uAC$-7EshdbnoLuwv*%&`4g9F`` z#hC@EUQ_Nz=pT)KQtS^2Es!=Ga(pmC_&k#jO`av1hbu`JOh;$!Br=Q~6u4`l4!1%8 zHZv%?CKCY&&g*9)eHB2qu3n8y;fUAu8{_QiU=(b?=IFc%jpwCy?V;w- zLx zg2U9kzR{D^B>XY1jS8V+5bV!9=G3kP3^Gh`P!1;CTHuL3p9Yj1rH0KXb>zwVh@TF= zA_Ut@bO4QVWOt=RVV=g7fD5I}8`V`Np(UB`dv%Hn6VPae1f=%_HWfx-8KP*YtlW)| zfZBntWkjLvqXLVX0eO`77)S)pRO)uSBqW78%&W#dZg*?V3GbW8rEi0(vyfsAVn~a81#!VuezxLY}Yj=J%DO3Mk1dCwp(@VY;ce5`r zmRe=T^Wpd=XB;xW$J!NG)H@@%{HnTSKQT!_Rp(_^-cb+SOD}# zcDtyz!t#}x7LxCBtxjDA!WAS&SM!ISa9t6|=^p6+G1JlN3kD+3eFZvpP!=5=8!%u& zX78~`kSz;=r_lLX&_f>Xu_(YpCS1Nf(dvTf(HRySNp}n)EV3O5RSARKFi1FMncW_5 z*^9}0q(?XZRd|vR3cpRxL||~8j2WLl+-xPH6=DQ(NtysuyPC2EJ#W6%qc)ujJ1LB6 zNEJ;&%c8Pzd^{hgZ;!Gf32luYG0;Xsh~+f%KG0arX<6))F7dTrf@^HC`Zxy$Vu!j@ zeNwx4wc{TQZJU_FqbKU;ayJgcXmT94DI0{hi#xODOSvtZY1+{g9#e<}1&Rh*V09d^ zZjX<|c_w}}dWIg{3aH*{|H{C;Zape(4FG#zt*n4=j?&x4BI^n|joLU${uo6#8TP^u zf?^qCeE7W&?r3{jz{(PHPqc^0$=QZ!XHCD3sxW$&><*7V)HP*iWR1+H%>+gSgME!; z>mH)O0=&Pnmd>Jj3*ttrW!8u(a89yZ6n&pWd7WM^bpMrjUG%}|?Q97-$D~mPzI2|v zoJM@GZT@*8SS0N$-Xn4E=}$RvsmCsBQ|Ub$iR+hm0NXa~&1=9{y46=J&mYo1`N8I1 z=<8PPjN6cM+vcTIByf0@) zF(VmO4Z^=B1p~DL57)npCf0FzsZiI(jS%3w;q`EEuDkrLXRZ2+msGG<-Pj^S?G$@X z$2p0Y2`m>ilzDNa9cZl{);L$9jI3lim~Ti`1Pv@j=iYNQ9coY5RC~B~f2&39T3$w6 z?`aK_HrgPO5N;E}YTCYZAp!@G`7aRd4SqNH%4fE-FJML(me~;3vD^&xD=j(5vwIRk zT!p64St1u_q?A7~Zm{7XI_{~mJjOmIa=4@Nk`=FHSrOL%YrRCxb z-nT@`iO6iCa$S<`_uZAR9NO7tM9Qqa?d!%!Oc~n@F0a~12fZ6BFg^>6i44in+ z&O)w*?2qIR9!O@g8o|peZYXn!HHH@l)6V>+hTCOFZ`alAZl?_zeY4Bf03Xw;%lWu_ z5Ah*W?`C59XH=F*N#7pW384U+qQvVAy1PL~6n`DV7tQ1u*Xud$2J}1I_9j_ow+Cdu zbh<>BWOn7TQ7d#^SR35?s-)#W4rdX+A2-{MO+(Af!#i6q4q(7Ha5m+Dr?)J?DkjqB zi~}-xVLb_7H}ZAF;!`$6+ zFa5hf5%`RPC^zB3RgoT@#*Sq^Y5&JJZ2FBb1S6#xHlIn$Icpn=&5kjPHn87P)4QAN z`IBQg6~L~~YlCgRHyO}pecPS;J$~r(O>X738oj(*&~Aok5~TN(N|g}nD_~j1 zf9M9)EdC}wZu1tQ(ZSQe5AsILb(lEKQ9qFHxq}C$Ssy@q7vmJv#g|ZTt?~;yuJv^T^AArs8WZhLDVq0JF?|Qw-k?WMIPLbH-b+ON&<4+w?#e+Tns0;CtR+NUUVvm$(ZDcn%e(AH)nD~z8(;9s)K*iCr|7T7 zjd<`h$?~UtM%)NK(~``xrpyZH83ji`x{|!lo_pH9hgm8r&)00GfQp5(jiVGLQEnnA zhU-nT+eY&fuJsfbcM<8BN`xmuq0OMnKO6^;U%=hx2tGs2Mmqm03?K2cW5GWrCp`z* z3sGt8;KGefB}|{cim3v}I=ReLAR^M~u{$vH+JakarU+MC=~%KJS1HT&4Bp(*tq5I} zo`I?%(@ZQ3E!X(3#|PH>$6o#_p}+L=>WfZPZ!gJxvtY6&=i;)W1%C%hTL!uaVjdi( z`)FI8SbcUqu=z+h{eCp&)In)-Zp(!4JTWl4?t%E_ zF`fDVTy}gNJG1Y*@wYTP!b8z#HU;A8mC*WM>2Ikwx2?Wx1T-AzWTlcj-K064tMutQqIbL;pl21yus~5JrY#lI4e-jeM46>GI?ZiEos0lOi_VAA#?|iI z1BU=dj`B}-WSd3uf8G2^eh3ArX6!Y!Jsv;sf)ABn6jn@mF}ba)&eC9dV&=rmwezK$z1;Vbv~j^vW|%^zk&km&M+N~RQsu18ogxw!W?(T?Hc-9$m`t%x>nr8 ztPlm%q2Tl6rLRCYXyn-ED4MLnhrH9>Dki-(%&WIDV#)l%i%{79@itt$!OiVZLi0dnx3TKdk;v+bLdv%so2! zw+2Ld{1J}OrSMBrwQB`m_3kfhwxD90eN|K9XuQ8&dWc}7Z1t&lu!~dkD1+Yb1|X?j zx764py;#4rKJ2e0)CIc683nvJzssj9K4?p;7u`DS%#ZVN?bm@CiT)J15=tN*qV(K` z%baSKx2OQ$30h;^+zQ=s8Zq@Wjly39L=O|Kz}Rz*DXJs92#bJUs+dkrw%3#SlKALR zJB#WQ6AHpUj3YU23(b}?n?%Mb?-zeVg_1}wHhsjIUi}gQ_Eh(bUO{|s&0*37i^9T>_ zxc&C)n#{|*YWTo+LUj&BY6JRDI%UF~@6|8mSz6{wKL{<2EzOpG7=Sl0S<2S&0**Q9 z`c_C*{rja@M>ag)d6B$a@{qhdRD+};9xR9YsVoz>}!QVzZZu{4{$b zRcdu-1}A0bs00G(rrWJysZh=9GsD7+6BK?ogHzDk&tt~_U5Y@D#qJ=CT@;6f{(EW0 zb@6sr;-p`NE;wj!kqfxfQE9!IRDqhn%zUNaWqbMVpvwlAx*KZ&E!G#KS_&;+r-X~^ z2doYa5S2T8@E>|-M3~@WSqZ?25IK>pzo z@vDsCK#1E>jl_~N(Xa7oQzumI0e_i~8eM4FY2Uu;V|_<6_)SJ_dyBTT?*6c;1nu16pZ4st*>_!0}NmlvV{X(tzWCyHxl`Ui!47$$0tN$yRE zAF7cxGLpkjQ1`n#4pc82Cn=M zZ}_`+*nCJ2Vy4)|9N5CB+~2h!S@WVykX0lkG`>!6awHre8^Za#(|%?{BnPMxiZUg7TF_KX{STGuL!wt%s+Mw7hM5u5Sx$$~ zSc0S)dD`Di4AG>%g>ae5$p1Odv4{*MWNIJ=7?y-cQeu9ycL9z<-Xjm$w&UF zKvff9p>h)Q57Or21Urp;{m%1WU$-WNaOO*&uL|UHGRS zfA>nIkOfJM6sFR`%8HK`rcU7hgsHsBH$(E3K@BefdDi2?6I!*7Rj+?`RP+X2+Buu#X23p>VZY=RP;9 zFG2|dpw3osFO@o8J@8&0E;c%AY89|9+~vFksu^E+V?%n?m>c#dT_v^JIG2d@>pz_B zNsCWBvWIH_$mM!llvk&@S<=I*xx6ilNR;IXk9-{_g~!A>Ix@82>=BNRDf&ZYPL%eF zbEKS4@Bw`1e*>O6Xa4uNId?7OkQo2 zJ%G~Fwg8<=FQ*i_n>-K=yt`X@|2O@j6YT%VXTSJzuh_m|$rQ@fl{H3DZEzN$HL;d- zj;kuz+}o}7a(BCJlm!`)IYgTy{&XmB1s@&J|D_#kX2466CNb3O!<<;xP2JKe939z-9AVV zl=RGZ+28?-JaXY#_}^N+zxh5_8*Ny!v!gtRPPq1usP6W8_Ul>Z=xjp~pn@@kMh1=*Ygh1d1#$9ggkk-iZexU^}eO6->8^7%-Usqeei(I@MX`a?$(v{WYixg zyTFaV*Ud-ZO!&fQu=nh2cJln@>29j~!wHHn^hYyzLbq*&Z@m2=MihLu)AqPUa-;9g zW9+;a)fPOuuytc!9wS`4<@M*{W^%6VuGX>sbFtCiOcAEg&@k$b86 z-L$!Jo_5pI%jTn9mH*_r5(9+8LY*r|{j-gnFRto}g-i9b$~-t>QXM{!6?7&WV+h@^eN&-Xh{V{ z&~!H6Nx?}|m@1iq{&wSIeJ9fyd+o(ql9{6ggMHnP1=Z;-rpY>JtdxCdtH$pRHqYUv!cIw#jNMARPDeLry-b{}TD;vz~QX$Ig>(a|6vbr?ihE_Jy8hM+h`IcdD zzFR1r?+n*($^bemH#?<+? z#K8f3Q?@ueJg{h4>4?!#jj`lnMcD}67-{v0HHg)doj)UO+$a;0^r}%)S{kuFJhVjj zku-88E0y$GoQpWFuQrkw-S#dmB0PAQAopT02sMCytI0YquNIx(tC+a|g`)xfshqiz zS$yCxl$|}7?MNnbSumIqp22#e)$rJYF9{Us9~=N3cFjo>u42HKZypnRbs}? zFG$Md-dkygk2&@nFGm_91YAWP-CP9UAgZ>CR zXHBy^->HyH?rbuzeLqZsZH0pUWZ|Y}o(hejwH~w;l;r9wClpkXd}eG~ed8mShna`A zD}r-VB8?Fa7G3v413_gYvzZBVxkJ;?x<)il)L+Nv&&eNT1+!BZum5Bwtr(MM+Ox+g z@uWn|{MN4~{RXUiN-&72a;vgyK&1a)0wpqtkL!Dg{j$<+Mn$E-X8%i{e+^$JE$zHt zuptW9R7)lz-_~Q+cayi7Jed9iO?7s+x4}_S7#yqnIF^Ayv~=kq^4D-T&CMNOBecEt zDfiUCxqe=Ii(1&r%W;qts&af6^iv-PmO8YL0lG&Ix%>8lxArzI)zc$0(-|jmUdw(6 z58QqO>l^`FV2|V*%-1XXXr6|W&PR{2U6z@SDwlk_a7%Y#vzvW8ADVPmyER)B4<5Pe ztgnCoN5Y520hd9mrW^g4hr2-EI(^X_%Feac=nAs}I-VC(;SA`kMOKT#{Brr0ckYfc zTfyW-RbdUr{*90D;&tD{{>HIy1tPaTGmC#sv^V$$tc6`*cMqv>)BEV9B~`hTo=-jy zkW1~a&E@@a;n$NgU0!K5D{rr>u$C>NIe%N%Wnr^bfZ-IlC~&YON!EC%o*@kXs6txw z{IqE*rDTjpY5jl{R$OoJRdeASFsH`Hf%>RtPVuk!rwHqrZV$}|9KJ}34s z@o7ANJm?teKh)9N(6y;k)zyg=54f%q4Sc>Y?{wVpSz7b=Te=4;%8{y790=^ zLZ>K_fl$)vyJlfGT~CFbww6c9^ZxmAn4Fun)RSSA9-Ly7rPMg>e^B>Q>2>P=Y{az-TeH)gV>@}e zz{Y!VCemF?Chu3?Ht=XX^;nZF91F2YgYdrDuab2re>t~!YNaSiQT{kg-*af6k_oGK z2nEwS`mJ3zV(YPfQ$AQZQ=f`si>jlUx|Uct`uz8vE7|tj>_UD)z+n=!h%B+ERPe-t zH={a)7Qd@WA45+cilZD?xusJ8j&XkX%k@fs?bH!vU z9He>{_(lSTOLNq?nS+@ZWQ@kvIM+RwXm8zoHhSZg@X_*nw~(oamgKjrWHEf73-*my zVu6~KM)i65?8GbUrDn5W+LvW7@MdtS+{^KgPphvlSNcolOu1L3Qti&?!2o47+u^!E zqk!~gFDlcoE&~i;8Lg9-Gw+*=CGg7J&Htzc-;@8BS^xuD0vjh@D{U7EO)n2G%SQ~m zpa0!EDf+*13oZX~3zcn)zy8N9C|d#CLbtysq~rO5GKb&4cc&k6r^~S%P?mC{X5Vv* zV4M!%8;;wZ=ezXk`)8A~W3jS(Fy9wly;Cau%(+4G<+ayv7uwSp57gG62U&k3zIX?l_koul z3#)Xvwj!z!%Yl^uP!UJv?&E>|&ElZ~L7CJH#YIYiW)XSlMIuZd+sz%TJR(eH>Ej@! zT;p_l?(n8uYcBHS35qmKLznUqMWl_Og4wg1`br-`DA~44j+e{tc8)IIg%pcP?4rPG zWV@on!fGk=sblrsADiJ}?IL79LLqAz{^w;SLH9_ZqH#OFx#HiP6rIO zuc=|bV2&xa$^z5ePvY(>VGfKsT_}_$>ADUmunP)a#UaM&W(t5hc8E9DaePj?3iBE& za^r76iF^s?KlSjRjHcnrV=PnfF#TiFX43yoi5sVO08QD_O8hle;>KEUY`*sduyXR^ zVkqvU_HeLJ7I%CB6#FQYb5_XxkrPH+kja_RDxgkSwSgb|8TM2owT^e`>p5kvh z_43tGPVX7rL00~|hQMd`Bp?PQ>!q+SIO|Rf6%g-zd){L3S!}#SKpY4zz&d>ogb}>= z#=+W^q16X+JAUf$3f1EvkF%mA5Fa*DEC^FNJ|RSSP845q&#)gBK-kgI|3lv$fU&U- zlGlH*{7-Zr_Gj)DW>^Ox=43@16$QZO{)5u5_}s@5&j663{oxWE#1aEpr4V3(?Kp;@ zQworSD{$LFcclTCy{54#24L<=K!SV^UL0PS#@BtEu}>$`y8e^^j-@LFKoMgSQk?)L zf{ng%ogA5iO`L~Bc1wdLr3`%KHC2U+jm-HX^$1M<--VAu>!jemrRW2g+;UVM&<9VK z$1|hYf}f~DBJ&S0UFH1|2H6riY0Zt!N$Ja@1 zMim8U1_RMW4a$I0yUd(xAMp*=U}|I(Cdkn%Ps#bKSzv%2-dJI)^CA`|ig zx=0<`4?r=WOBdi{$O~{^lc2PK3#?tm%bk#Uzvr383$t-PHGf@xlNF(?y3?i>#a zeLClVuCS{&UG&$0z>@R#^^6E*St&UnXY}{=&IFr7=Y))oAi#ZFAK^|VegIIYoostPV0KQk3Uu+Uve(79Rv-A+mA)|L_|>{^K{U z{>N`X{>N`nQziW1@+~T=56;+{ZPCJ7Slh^d_0Wd4e3I@)-(<#Rsh%H(H3)Ae8Sf*` z{0_+?uqcg~=#>p8V@IpdRnStmL>lMa# zM*tUs4-d4P43(`ySVVy9aQp@6lCuJ7K#d@i@){C!CKcsrmg496X`l|FIf2mtUj*kJV6Mb)iIxaUOr(CB{E_9drG$g7b5% z=(H^XZEaF#r!|&c;#!=E0q5+(L|eUoUj^`Mb20eyl?>o8BoMG@^?~3J9LUp!7!EHU z%_|*}lQH#PVl-z_>K#Bq&{faB(jEBbT>t551D&cm-j5JDH6*KpJ~B)}d~}s&8{&Qh zqJeBIi{ip?L2i~s>4>&psR-#m*Z-p;M7s;bL2HKgH69QuG9nW2q<`MXu8u`A9jvVM zsO@P3aOYItXaz^2wGHK673#)HpkecSgeze)DlBY9#=^0ObL>XSc_YS@{s8O^vD-$+lRG)0f(G;N% zjekrRO?8w69{ewRd09N!+ncY6qpkModeA3q?5K|T;py;*&1>c5Zn*97abu-$aN%hQ z{4CbJFL}R4wE(S4ap0h>Rn_Y3!KQX@JxzJ#LciJ88Zlt?o-}`lG zDRVByLE1XPFYek_Pia^rIkFb&Us3j`dEi(wVjEbMz%T^EI+Q%IOMj@kXf5Qj(HeTE zo>Va244(FTZ|{&-eAJwdY4+snlD=hnq=q^dcxcyCzv$^XsMs>AwEM8*ltsB)C9Kp+ zZ4qHW^t>DxQuoFyoUWY(ZJVf~na$u7KzOKbfq(CFI5 zX!+!ND|C*+$7dPbevEN)G;g+j6+2_PP!N&d1YX9AIf^*`vVZ>kw-TXD^l7W0?eVJI zj?Z&^F0AL*%_DmAGP%g;wQofMblp-<_nGIScdJ}<)>2>ZxPQgHrbX|>Lc5x-$;i;T z*Y6l(X0i!B0fE(~c2xf&nt#cSVbYm?*?+`yWvkJs!lceMt0AnG!c7MiV&?bLEHmQ3 z1`IYF#eHdY%~-H5F(SI14>&iqlO#2)dD?50#n5+qkS@y-Y-ev}d>gUmybC@!Zy;UB z9nkD5LLU6APATHcH)<5 za3dP{I7zvJ#ub%tilAqIJ-?kGG;UkJ0B&CAE&o@_#NZIP^TbkX?edA)MZ2GsJV@PP z<#da7aXYErr|xMx$-!|8!6~Nt*PUjWOnSYa^;X2xLL7|~Sx0qKMqXDZbqNb2_gpC0QFWxj|4Icrn?0sQ8D9`wm zrwGc;okMcW2W4bYq`N^pM?qdKB}IYy9hSci5)L6xM0H*Fr#CJyMR@^h>ZU}QQY_4p z)@@QpoJhL5hYts^zKWk?$LEel!CyWYVE>wQChvN-ukUdj7t~o^wQv5dNx#r1rY=fa z4lM^=I-Bs?mD69Y*I7-QG-u64oC(a&z;Gwm$JYK>;WO;L|N3^CXB%GsevzW7&PY3U z`d8PuKXpP7g<-WZEg%CrPNK5fGq1)(l7hfHPJ{+OrA zBNxRRVCf$YQ#rHNlQNWqFD@TVthk51&olbRK5|lgvT(7|kO7q?^=aAI@}Bdmhk`{R z5eQU9+9N{+zU5!g6@jLf-CJ@-YBy9RD-d>k7}l|auDjyD>UADGgQCk}B?vev)TVeu z5)#N#L=kqO&1`FP^hWY8`%k3#f8%PCt}^$_f)VjcVLl#=U9CSThln6jF_}IsE<_lf zpvFB#wv@WEC?@}6-m*L7Uocmb6fQHFCh%9btJW5XCA7P1KwR3$YnZ96Kg3uOK0x;< zmp@$IMtiCgTK_#T2O~yJ2eVVVf4w$&z_Y;ySPHA}q#sxoz;jiPKn4-1s9?MxM~GBJ z;J6scG_!hqKRf=mi-T=;we>Fh$=GbL+nAQi7zqnq;C;hmb<~7iSX=9AB>z5VD!T0saaiLt&PiH&YK|7<$OQN?Dj5!Qe?BbWnR`ERof zRg4W21AWE41wwn*4 zBQF~Q(|S-BZ=V}5MdsZZ*m4ZpI*!b2*deBNke9F+D$>0LUbB31zvmVOMRW@@dHWfg z4@<=r3w}G&c>{f}d%^$0HuzvsZp#e3c<;ul$d#d?eS=gDroEAvepZsceZWBIf9o#< zmLhD)91@;gf3RY4@q=#>zU+L4*cGs}4EAdOp=0oEx`|a;l9#v0k3DX;E6bjm#CTMp zbb2tq&^0;{3EtsUC8D_|yZ?7o)Xc@vn_PHIw1hMkQ?GdDXwJlI zH}Mb?tmXrq^LoB{fq9m6ru?7x0OV#24;`|CLbVU(`2R*?D90`K{AUlhP1f$-_Pi1V zYLB((Y=CotBa-_b%H4DjlPESqM=9DS>*~qZGmmgzMA4%MNs7t$T&aq;OB#HVR_I3L7Pv3ZUSo^?y#wYR%UYQ?DX5lapO%P4 z-_BYYrxc<+lT)@eFrJ)%x7Qu}w$cjJ?Mh~(7sFNzzD&~jdn778ievLW7-J7r8HFuK za$uF>108QT8;gjg@s*8OCLiU94lp!f?*izHv3|$ z9qd>=0U$+|E5?amVs#q0e>)h0F3I43O4N1AfQ%P5K2HQMA*zd0z(dK~2pT?{EO6Mv z*i?}7LFFLHdsLWIjMN4s!XLRcKFVT>sdB(aiOD(rKox$wM#3O>W#|B$g@6|*Ku8bt z(R^uy^o$TOSRzu`e`yfpc|tYt?(q~gh%fDfzWz_t*l-1D09tZlQBWH=bDRG`-iqW) z^U%r(K#H}@tjv)kBpdcElHjL~wY>b#!p!*9!VG~hukV)le6p&K0BsoI9jhvgWOZ;9 zlU$}Lh(j7`Y|UZ3PL0pb4Hu5U1j0u8@4Te3E?~Sfk~lD6Sg1b)1`GIL`}Mk-&cxc<75A@rH*BsPfKOEutS|W3z8i))pI$|UuXNKY{2eRg z8^_J3hsldfPO0G1mBpR>f2exPur|6jY`0j86Wra4OK~q&ij?B+1oz?)99k&WLU4)~ zcXy{ng1ftGaofZ5?r+PFWRgtQ%w*Xy>&|_h7bl8%j?x=yGIaXDSRg?mb1eVA1ch!O z81lecm$jXM;~&OoNli8&7OUQCr`QFfA(U6_=X{Mgo&$;w$s9BNs1Dl2l$M8>qxloa zp-2f3{YJ1Z(u+UkkrgqmkmpJN%sHkd-#}c-^-YKP?m(i#DGv39xU}*e(pRL$ z%$Pjf;t&M!k5SA@z~9dhDU>(u>g{qNxtpkR`HVoun- z05`Caf3Z{(;6y>R(<8uTC+0Wfv<8A9VWDzBFr=Uq2!;p~K-g#3!J8g9dzoiEI4$Ua z+0rTTi+99~fV*A-D;*Fd#FpQyl3l?i^{an?oOLV3{U_b^~ngsDe5kh(2~d zG^@j>ai65ahoeP@=8%Z-MynvOIP1l`EFw74ymQ3&Now!4d!I2QkU!+m(<#GX47Rcu z1{xdE9Rhu2nV0A~W z+3G&k(u^T`7AX?{MPuJ@DkpLxAQCx?i4H^}g*i`Isr=SIGrsKI_&oC)7%#+SnvCXD z!yyiMizSFnVnAT5njznXI6y^Ai4?zQrg4&v!JLQ?LA7-?DA}1_!|RkAGSu0l=+HSN z|H$f=V+=;eNo7VhCvHc1xk@c&K46f2rD6bnK%d6G0)Ityd{}bO4JzeFQwFGVRk=pd z%V$Bl1hpwhO}t)H*_Ax(Qd~e8EeXW|yu%VFqA#G?LC~w?l zANzh$#g+;*$U~40qwegpCk!j9$DN$w*k*}klobSkH}Wh%OPQt76k!Tq)JjMRymgno z+yeX@j~X-x0pBu$ARr+khN+1RUznv^dR=p|1pVDl^M^O^ZwS$TRq)s_psoGBA%3S8 z4tU#%0p?|$u!f*YCV9l5;K+AIH#!&s4NScLvYp)!U~17-Hf11OdecRvKPe7;CI=)W z$wmTa^w-RRu_6PJi9I%;8|J8Y=~^G-hJOAMnW~y!L@;Rr{%MW8CczzGyar4FQz4;| z>K!mpV6fY(+R0C3rSoNJcVFEfp z@O&vcG|~=u4Xs$C05oIJqcsX)h#f;n@G^32MsJj2H*B^D6djgX`5j0tQ9^$!Q@09c zdpD*_>OMUV;&H^_w{=qiyaE%8SuM>eN`YI0Ui5{Ms~zdfyTX71=el*PPyH8HyUYQ% z$&vJA4Bi3%Vrgq-Xy5fQ{c7{|qY54C-kSSjw>m>>g0XlPY!C?j%N}6z54g2BFa-Up8x5(a zeyYp%-B1@tW%t5tMj(k(T=a6S(`01jG{f)|X>W;mW=GTxKOds%w|9PamfEjke49;Y z>j|r}>x%Y=E#mK?M$(j`Z_75f$*CTF&f{Vr)R@WDT4}wzi@8p5({e;etz24~BCT7{ ztLwU7pntlm0di$sJD0bhJ9vJH#&=7*3Cnj+lHB$;e%HeuE57$fGCc3Qx`|u3l~2Fi z4({;VrNiuR4wh1nFOreWPQbUp=>4nRtHZFf)r=^)3dJ83)2_v2F{Mtek@PE zLq26~jwLHPFhNSj@|K4i53G?ji#ENR&APAcUMYGXYy~&Y{l&C&oVIFQl}!W9dMe3Q z%>0$bjRXw-I?6GVcS&w$usmf3&E*qsmD0ir0PG=YPBweMD}dBZ*7Ba1gPt70rxC z6h{soFtK{?a)BMN8mydfF9WJRQJqeyczJ9Qb>W(ndUNh;`TL5h&C6yYXNhvw6GSei zwKg_!MGQ+yEeE6=GACslZ4h@cFJB+o?4@~}*3)L`dV)q2M>ZGSHs0*vy}C{x2ffHe zysagTo3_Q&9|lFcf4u$e;uaiZeQzq8^Hj*AcYh$ZwacDVwH z?-}#{czLAK+oSs+Y2z{s#(yLzv{k?LMilH5n+v`95^uP^@Q=joTt<0jj8`06*sMIB zcW0enmO?xy1A58v#qI|$_{6!N-W%qKyTq`^(4sW11Q0z^C+vf-7wbMWG5^(wH~icB zVf-V$s18hJcXFGQFdcHvNL`!^tbjPsrW^%NpZ^3JDf}j?P^9holrdf?!=W$dFowoU z`%j0(@_W+dHgQhb8*t8%{OV3=S{k{|?A{=tX zwf=A4>07z|mfpv*y*WBEGoo|X=;pC(#o63&dDoRv?$Ohg)(%~ye^%K%+H?4`pf*Qw z;T58af|husR=7%$KOI+bkM}f%_ILOKsn@Yn=E8{dhPO;MV@BS){RS8Nr`K5fbKT#9 z&z%=$b6MLr;!{5$sWH<($R6u`w|&N9P&mvd@aOtNw79qJxvN514mmQgtrh+Jt*&R{ zaZ<6zcZ`O_U1jSB8RKR=o~!g@j2_Kirw6u4B$U-(&r!5_je3!)=|WBi4>q3ElzKB~ zK5|h$o&{-2eN`C|x=%Nwe0_sOsBN%PuJ-MT%KY#GZxzf3S*bfGRrik^a1>&@w_N<= zh-rW7NSW|(i^Oe&vo1dHMSQH@U$ORf7SWzNjQr_`e&g{^X4aPNbI-=tdgd3*V^u%B zmMNbQGHhSR`#k-0p?DgaR%9KWi5Bj8*tGU5Mf=KYi0M-~GB-U)cH(6tmXY|EqpoG! zJ9)<7D-81d8u8?)j{kqz{#vBK8k6_`x5hNkiP_|f_lFt9!4Q&$?_ZH1mGp}S&q34A z_>4Ou{RY(Yw)5;tj&7f4kuxL}{;F$gG~2dXyjR}CmEjI@K4*%g4TrR2pHh}1U5E)3 z$4sb%8)2pi;;u}mB0nRP8DakAB8+moBI2D`Mx%^Y_GCbWKv5;~lExIAJsvJyZq`mO z;MzSTx%wL~j+sJ!4n-KZcH*o@JU`vRy2F1MKit4pFnM@?rr10SVXWAig@~Y95Y3RK zKJNWOKx1$Z>rf#t$r2_$wxPbkf&@9lJBFBa^?4B7lhc^caBfxh3!~m?$MP7zesI-a zcKi3l9B+#cseY?rEAS&!s=x%~x$oK?NATyTD}pjJZ;;M0;cwIN{wmz9@PAbB3Lh-I z#Xewl|G`+#mDziDp-f+M74r+1I=n;W4U2Y#O#mC1VY8}M5OumuvK5~pSLBORUh_Ly z?V7(k%nJJ)2Jep0cJV~|Dv>HH0nuNZVv{u^;=t6rF+_{(jdTFRIb1(nWnPVWM<&ud zhI?;#CqqLB^_jJ{ZKME$GTWQx>_=lQqSr{;a6)6~^}4Nwskt!pKk;mU3}I}m4BtsH#NA~sgLTmo3;v7AB+ zk?5RwjB*80$KlGH#5)kn-0J&~BQ2`M|FzE=pkf*g~O37z2SorhZK%*1Z-3Eem z`63H$$Y&`jMBCHvv%Wd}E3@E9g1Tj=%hQ#9*mGMh<~fF0TAb-GOq9=-#X@@!%E>;` z>Py+%;raYw{)=r=kI>2H1=aN@_d2g%BUmdD0}iofd$`RLr3j55yXYEC7m4Ym@$yfe z?;eewuj&~TUDnB@iQWbqaX#s~I-ENKER@QnpsQ-I&MXd&a=BfA!2WToSqd7tA-iQcl|%C5K1Y=5CxtaK?|Qe!_ZT%rOC zxgtNZHuAi!5VPSljzSyg*b=Z?dAiv-5qoUKAa&=elH5GrT}&tbGgq`Mc?nlCs#M5? zN3De_XNpV6Eyd?*Z9mDow&*Y-viQ?tEjd(z_mV`Iq?aaA0()V+LwAEG44wXFfkDd4 z3g_8H?#uBeQ(bUM#A0H+pO5OMic+X4C7(3r-tP_Ob78s3GT%&@oe411o{HK9qUYp3 zty}O9Tfk&uas0@WRIEPWVB_3UkP_|>aS#5q1Tjh_Q5fUfFfs!jWI-3KY@00~B<7r8 zUn-tT=9zGn70BHnWb(IJ9U<0?ppipeb-+rY!bV0cIBPC=G!WUiICqwB#%W?eJ@hM;0O@xuu^{Ed7dy?w0k|TrDj}4FQkx_NI6-Qjw zb`ZIAYOYqz(^MX^$y1Ym5d=AaZ+Lq%L!+47UlaMu5e<9s+bYJGVmfJdBiz_0A!K?; zgrdt{qdfZ!MxI@Uxcs&G{Obp`ShA`lnx={1ddhl){bI?QfHX8RE)UR(&nDwnkG9A z-1)ni(ZZa9wNLdS=c}i=(a(oA5rrc%LB9WuMp~% zFbz|EDz)V|i}YC<#ehQe*#@mGikP6?9&R+$+XFV>2W*O{JAuiAh@H{zVf)k(TXMSV z7uJ6w+2-B78XJ`o@#?<(@cB6 zN~8BuM#=uzTkl!NG(+pc*xxUz?3Krgf`_tC{T|`KA2+7{@Ja@P*aa{Ug1Yw%ces8#-p zS7)1w?=50s460oLs#L%EoV@<}rwrk5;&7PB3^$<^a+3@Cx*O{2sHoJ<(O;=M1MwAi z)7&sUoiw*~T_Ob_8Pn$>(@)rL+5bRfjJZ@f8#W!-_%zTmHcYGI6*nq@tR3qfp37XB zuEH<=Gv>+D>MN*)$q2fw-Z^vJ;Sq@Q!!7nC{7oYL98Os*!A8`p%N<*5@Pz!C7Z=Q8 zW`c}veVybZF?&9$e+_XMJj*W94!VS-?(iQh<~$kW$Sph|!}7!k*~V!UZbNSe={Bns zu7oTT%#0u3kf|29?!C1@(ESp%njVeendmuAGln_duG~)|nEs7=C~wyUA(@^ou}Q6h zqU3IBRk_u>VK#A|=-qo;U-l-M;zEvA(_gN?oE+7v(FMMMgWF2AUDeZa>D2tEozjcD zevRXYR=Rp;LVj9~{54gLGtB2q_gqpZN5Lz%eofGNJ9HNG2f` z+G@BLsnNRY)KgTN>1`rL9=nS=b4~YZKrgIk;Cf=|h4g;(!iz?+TEYsd0LfYC{WNM& z;Q`4oKA$U?paas&UqQZ8=cm5dtP|O=DTOR*>HyZofh?W_2i8NCw6dX5qKb@UI0`LL z$9X;m>+>z(pL(??_xG-4Mp7soB`UnZs3ECMDb=xOo3#E?_F&j?BvoBN=Qk%GXNmOv z7r6CSi1%J$X2oIx`L4;MK6ci|a1Ead1Pmc&}S%aG2NBZ_>J&0Ap%%XSb~ z%kUpI;&mkx=CSa{YCVp0s@nby9 z3tJa)Q#$ln-48{$*KT~YdysREyb~T2t@W#4qV6zK%bLxv{m%7c>D3+{sjc5p2<@)F zbwjKT>I8ByzD+f;UIsf+Ry&dg7YZlVYVPA*-DXw zKOXhAJs=8MmDPn8hdXqBuYg5Mq{w!VPA=I^CZw45L{;&s8r<^sQj;hMZGc7%KaXqi zY|j@_um7#U7jtz1FC<0_EZPALwp5aXj&Vrkrah|uAJ6?YDQ^1`Zg4{T7l?|Hk~cGz z876$j(gN=aDoo^E1|PXj%1Hy1`sgHCLqGOaX418w2)rR@CLxQo;qOmp%U>&MBjU~) zr$XDuWQI7tU<9+`+-V{#y_;a0CS1>n&-iNH%8PK?l8*UU_oqrxm*-vT_XMNk%@zm9 zJzbT=2h+0hlnE_e&bf2r;A^(JBQ*99c`O`+&sD3vHY1EM>w7yw=~(( z>`jAPkAJ#CK=mq7A*{pRG=Nhv|5;tu@8*8b=(*|P?!x)*=yVN&=$X2bpXuRi5TW#p zABPus+&@Tl8fz?;@I+>a9!`|IK3a-T?kwrnw~2P0w;)to&Y=$4yDc+_Z$1cy=@LNK&zpqUK=M$F% zL>@?P2Y&&1{&jOIUE4b)tvBu1i)&czU@b=4@0>>xq$mmIWEc^UpQ0?`ndi6SER_oRwDk(X}N2H?Ka`ImLs|p^rQ59ARu)*Nsf06D^_*k^T zZjiXVR1a)V1eyxr73WplmXYb-BCB|rQ)I&ECOA-{R#7njbTNZC&*bH9IjaXWp{1g# zMzjFGMUFK%6=qNct^eKsgOOSSFMT{{X0Ib>SZj6$1)oS?6Dmf9D29u*K>&OM+ zHe0s7UXH+@WW1Qr>0c$kAZZfQ?q3zH28G^_2))J{s^-h8g&^il$8}5!;WQ-kjgukS zuKfN&mn(wdl>gtl2J&|&FF4nT_YH~(cd#4PEXN_$ip(m@*A81jd9(~dDNiI3oh4Hj zk}HQ>E3F(#2_F&_aeT%U@Fjb%@^v(ipltGqidSMBKlocTcjBMwkQ-9_ho5#ni*kGg zM{HIrjIH~W-^vxXA|aoqz`5t&e!?t9+cny=T~d4MSC^~FFChh0)b&5Enhc&t4&8S# zC+D>}e4X>l#U*Sf>R{vzjkLT-xY-WJdgPO(7=e|gt~SqxS+9naC3bk}Emyjotcgd` z21z8-cmB52%oWMU4W*ynb}4BWQSQ-@b15*Br;(Vg-ybc-%Uk_eop48#{@Y`an7hmr zn9X^texMltVGmLn7uFD1f(mCdU`@G!CqQ-bU?|x7h26BEq^)S^C;?mk+o+4Mj=6ak z^1DSKO>BthwGy!bo5Zl3a^p_u`$4#pE~7DmpiObTd3Z63fPW^3t;1{FbG?Ia%&hdsn}B z9VWe$RcC0MpQ|DH6!-eC6+=mayU92Vs)d=&{wTl3^V(gb6kWAjq&10XY6d7ukIWp*`aJZf&XgwBaEKHgd${F8|JyqYSw(iEXHrhlhj1muhwb8{s$>*ZaB z$z5(=Di~t>v_!{ zehGj!EkbH_yIA?-D#D)q;1_fyM~M9R1+h!svINuLnwkQ_7}(H))}x1m%#yrKQhy!; z?|hq%XzEQEQBMa_<|Z!qtHluY*~yoovk?X%&nU-SpWPFHV()M%h;a;jW?IqMDUyh_ z7;7uDrak7gr`Y0-du327Q_4NVIq3?m$lxgF!@tu#IwU~mAikb&DLiqGS@Q2m+lUuYqou{h7vDXjJj7TWyU&%M-ksHUj?DV%*d=C{u!>PpLf0$O0 z+bRwD-N@#O$AKX4Zh0`Ib)U}KwV_PVweGig^|~C?w}=pwY@!i{3hEAtAXZ-5@BE+P z1ydg$$TYPe!-`8pm7!N|l_z){Ix#1)WOd{~0^qx+nPRrq7^};ho2}E!*u>MziNVy` z8#zNGEc!&Ej2v<~1DliSey$P@OJ+jUk2)=h@#{AS1>Gqctwvczs-o-QW}|`e6{q; zdObWEnV)Y-?b_~ywG}MC2tBw#f98 zq!PC&@)OFMOQwn^k{z@#ufK`P(oibe6u&y{wOB+0#bO{K5#`mBuUN2&NHf82X8TNl z)9*kkV~*i^80Mvg17wd%Hwd`rB+HYj2j?i* zypd@|pXF5Kzoo{T(}mPWgc`=3M*YkkW;SxhX7?LGbyX`wNOR^={7_+wioH5?llhnI zbckEDgf3}#)u%lheazCeD&Ck6;gp7MmJQT`isFuj44j>SsEv}1I9ul{D4F&>Z@htm zLXd$=^8gufcHChLGm5+I!548|Zs}A=92K`*nAJ9sCeC4(W?o0>duLpnMIk&woCsMO z*Em6LY1$uO)NmGqda1jRvUP&jX$YuDCR(?p;Kx{hH6Rm4$fo?wr<=7%5Rh(=;2l?w z7>c7#xl9hcq6ZCoGs}daNmm~$nMb3KMG^OY!a2m`WXEf;aHdW{hslep%GA7q((tm8 zLySY|XyMjr@LrLiFvQ0jL)R8%fV@R`_TnM9(Sb$71jOde6V?nG30j||zhtkzA66!w zC{zrpfizc%=gcAu;lPa@PS|X(*r4lgonO`H8#lxo*L9peS~0)+KJ-a?or)svl_-5D zd*p{W0aS^>gohlu*;4eJ|MsVm(Ktg!E9I?#^UmmDn^Bz8?6Kp#X>a2^ZJrGQ4iJsY z!)1xXq#xA-KSD%KU1x$SVy4I#C!noBL(LwFn8B65M@Zdi-{E9Jn6X7Cax^Y%C9b~d5w}VGh z#I$mN(?EfnON(hVYAmU@4E^E@9hH6vyoedEEYk-=)M^N!;i`@aPBG3K5tb5Wr4JQ@ zzEbpc`9y3f z23khtfKs`U(zv1_VG3lYCF-Cux};JneQ7iimIQC<;MKXs7=l#p67$#qCqkS5KN;qK!mqUW_b!aPKwjNhbBne^zy-r~M8>YVzjC7QJbtyRA%EAE!%pKUz`LPZUqVNW zf(?Kw)aguKKDp?blmli00#gN=&M0NnWQbxdRth3YhqU;i4J%wrZc1INCkJ`&whPU&p706bj zo`yes;9Q_;Kt^(seGW^i5f-=zSf$bJAXZ|3>m0y?)ur&Eg0w_UdM2>ii$I<(`t`_e z+e>?s>wcl`bcp%+6S3LPoNLQ!btwF6hyCbKxUNFg(|fqiUN|NvS(tj90EtKrc>Ys- zwD~dR(Z^L{6$ocDFlB=D({6*nY?4l6R-Urm6Tpu<&zk*1e?n`5&3;FjF?Om79C)ru zo(vXrK1hF~!lmO^pRtXX;-F{iBMUGj-_BQ(xcqP|G7f1%NT^EP)z~(E*0yv@d!k z^~5T%f7NWP^(nfz>G4VjvAgt@<7mk{P+7E*DW3#TL!Q&G44F_Y5kk;7PNV+1sNx*D zgV?i?GE{Yb_rSq)!C^&ovq!2u$_~Nc(wKZ;?B=+J1CzGgyEp-3P`oBEWQ4sVAcA(l zq>;OC_f{ZMz31U)k}O=85?PIsyhMXgWGbO~KITSOwU>={dS57bfQALd{rfSleHgft z^&?$$061q$^$6e@89Ws!Zjm&Gy{sdD*W2Sy@$8(^6#Ej9|b2s8fPFe#C#@Q|cTdlu-fC^ZHgGxSQ7 zS`Plv2`Vl|O=NyN53x1C;=lB7^0uJ496DHlkgYs#L3)sN^5mk`qJ}Cy#q7#l)G?GT zEgz>|WG^gy;7|42yYk1#`B$^#+T5R4eA4tZnd@+6lX z^n!9Il{mE|>5_i7EN@fmCgAu#1P%w)X!GFfB4xyZ2Z+EuAGC-`UcYQ4RE!B3)16?_%LE7fwcLA>}$f)67M5C~^x(N8Ti54{h{8_G3 zeeSd7lV{V&lMm&xJ(h}MyWoD;kz*-;6XkTV`IslGa3WW(*vtxv=E*7M2|qnMHOM!R2Rdj&^=c z=U)sVu-l#%z!c~-ySKfSnh%K|{54|c`|#hvD_2@GV#jblkN2>a@0A~S+8*8g zkKONd79wMHpC1WVZN{Mg%L#U|FtJCqfIg1my{X@lpiYH@yb8PRxJm^EEWkRASG`40s__~t4zDSACowSDM%FivuJlxCmLu}mM zmzHjNLhkO47n+@!tecvixRakdcNUsIg^kB^+_v>nPw(3_bCh9@d>1oDH<9NGsa%9y zA0H1kJ02h2=Y?iPnH55|mIY73H+9SYfR2}+9*>KgRVWrYmm!yrOSnkGGWO4j1J`B> zBP-3ZVO-Ighch0P7;H-BLKhb!WLeco9v*v#Mo(}lOCI_p05-&8V=4bzBVUM3l+mja zTqiOs^ry!5Ckw3=amA@&lL3<^dt^;@do_%Yxww5_UBUHDH`I`yE+!{7M2C^gMmmq6 z#}LuWBkX?8Nv?uH_itt-riIo`gSw_<7oW^BN?F=Ry!VSHk~2@LNOds@w?!}u*=B1S zmK$6)+KL;C|6Yu=O#85u*k-35`KE|mE}p zZd#?Sb8F?v-c-xU-v8%JccP>Ia}uO)GH(lF(be2W#&<1*7PsyXsWnjAY6h><^Nb5Vf74-=(iB!BpR|lIeZa7?jH`N0%V))O=eie4MIt|`~Z4LMW8i6 zVn&O@CB$_U!weP3Sz9e0z!`bZpZlU?evgue3Oo6j}N14b64?gun?~a+CI^O?&Kw_l+NDc9DlaQ?*JzV z#qvB^DFf2+pMZ2c`uX=zV1}T|i*#J{+)qDN4v>x;N>UwQp8^$v!Q}ZOn*UEaK6+~A zc*c}swoJtxE(iD+Z2YDgrLT`1T2loUJ%54PNwO8WLM4dFPG*c4TB~e^QZf-qLFzYW zLtY#V3Ta+S>DQvWp-YbGV^AXl0&;yN9dpc>Y(ZH(AP0CM_C-Mc15MT9U(`RfY(N)2 z{7zcG0X}G(gry$Q{xdln`g7$xSw@y$6{CXhOdKW&37e|p8NLmbW#a9adwdQ1K z0dU=h(z5|M?8A`^goDP)9IJr)4d7`200(~^RGUU-#EGU@0cHjO_QMk`X#2hVTW2aO zv0pD4)&XIZJ|6+&19V9`%m-}bY=9wW!Oe^#Co$?v_xz&rG;up*1L$&$gmD5^+Eo9k z&s{)VG3W4wALuaK#6UM1tX+tXAN3@odWb#*$kRySAh^i7;Z>sJ0ysyE9bfEv# z=cXy{*q~VgUj0!Sn6I^s0rM}gl_{{l28+(TlElpRdj=-XAXlBjhYn~KGZ8m}Ned=) zikV1@cJaL;7#^?^z^`P&jpbSYUDy+t5gHK!G#@Pvz$p_&i*tdhyd@%~oTJ6lU5V_$ z9;=Q;@r9FwaS~J}l8*718smMX%?9^CO~i@t5w6lup{U8o6ukIA+Oh-fOKLR6ea@l>kX&l? zyCv=@kOB3DW=8+JB@ilCM@an^^g;5iBNdp7`xqCrIh5!x4d}At{?lb=0lMs1B|z|v zw25Bu)>H=S+$Bi`!A}lJn@dSflBC;2kNHF6__DDE6zm_B32Yk?-^9lEd{dMfF}2nx z8Q{z#KYhdasxF-M@8?xrY^N_jY)Hpa21rrfRoBXvQ#siq14z4BK13knc;N+x@a0!= z@XOwu;%Y5md|+ucgOE1g+)*&H&0n??km_nHO=dMWdJq;!8!0MQ$l3`w4pm(Us z5yYZ}`@xCSn93!a`Q|=>Ag49d0pcG$>i{rrXazXL0CDSPB#;;_2QcRT@Gbr-dFwcP zTrirZ23k1Y4buK&5o<@vU;USKK!-+;p*FR*?$SxJ0p2Ci&f|qlM*);V5&Q_;^$Q}_ z6-ET=N(~W-SX9QRe&W${)BK7cnB({On<{qrzsicbVly4hh^z_)nma&;8VCiU zn3%knP~1jBLO2pAOCupAIFm1_;&?15`JIZX5m=sv7`!EX%o- zP9Ll8Vgl}ugIYbIRlpIm3bg+KI&exxoHsexRPVmw0}Af5KQzvG|Dsd|QE>`#&`o8+ zj9-72t|8bg31QG&&JRXFS4jm@fDH*)xcRS!c+xYbA^mkZDtJGy<#HW17K3Pi9m6tD z+EP@cly*k8ap5*PIyi_)^L5=df6c-L!j>1;8gn~uALjoR+gBTnnBQ8)m>*UGNVgNQ z+ra~I$nC9oVOMHF^Yg>cyPsNT6Iy@Vn?ucgBFGCx>6+Iu%X_+6Zbgr;oZKwX%byOO zhT9EhApZyIW(&qg4aa-f7)w~iDra($+e*Vcai2wgsv!0C!^b?n@^sruA}w_VtR0Ic z5m3)gKMQP<7pwU>l zVxx?K%Tz$ecq?wbs=m|ygVa8N$EZH5dm}3OX`4h1-(h9$!74I~|BTDgLUDy<@FcI> zECy?#6!Z0|Hr+YN4oHqPlBB9R`dF6KGULmco6hDMW*>|)Kl z+ZXG3v~(@ndK)=+!tfaEy|g}5p+sj2tTd+%ROG%k#p#gvY3zKi1NGflldGI0SzG7d|l3EhR| zp%+2Q?k%ffwF$knK0d}#CpL!1OLO*T;@f-ddS9t$m#3;Pha9Vqv#oeefQLt0^M75Z znQ6Z0+}Ff#e+j?t-Po{u8#bWUkr14~&N1@C3-zkpg)n_vW*fVx@EtLWI_=yDZ|!y? z6O$FllNre83R{SrRYjiT3g>M^r{>){5aGT*IfPAkjeU9uU25di9*eA<-`+>Ft-P$8 zBlq#?TJqJ;hihG`dKAIfRp^;t2Q~oJ&H&kd`{gm>T)*xOXut`j^fcV5Yo?l6?0{Qh z$dNB?NL^%|A1blSnii#$_53SnwA6ry$&aS2=Fq8|PLmpsl<0mr0_q5Oc#JgT*F*T(7u`*2G%N^Z^;&_(WN4Zj;qS6)jsP+E`r5VM zalW0HGi2-P3Qk%1?mr{?@+e253k~zd3bHe#X zo7&B=H;KT$tB#4bi%CF_L-C9|O6Zu=(*6g%2|H7?MR8wSo zGH2B^kAXO9js?}Vn`Tbate7Q{fzwUWAlhDutV$%!7wXBwxZNS^r`it4-UlC(;NgM^ zue`B(EoNWu%2?exnPtQCJN*7H-#46Z@3ZurF1@+xjqF7AWBuk`WFaLxC-&)PK(cdf zL7Xp3?VhvcaGSo+9}TnFtgV4jbl75jpT_g-zK;A=lCAg1&-E(K1L)hEAEJEKZ_KON zM4p&d8chj4SAVDPt*10)&`d}^WK$*0No^@l*rRwpy9GnMmqZN=C}q7DJSG&<4Q+TE zyY^1M3AcQXF6;5UNr&_kPSV8r0HkU5;(kr%Zb}tXkro`xlPfpRyfSvqcA_bzDVOQq ztmrxuZ!gIMA4}-t-TB$Pg|!1AhqxeVNuX=%=GVRu@8rKo3qC|mO1q2e5sBe zC-_T-)VhqQ6Z&(LRMQu$n{tq~a9N%=j=eQA!i`?~xcW?#6Zj=5(Fi+-d$)u78{FJQ(;>jU)^~wVY~bTSmIrld#w1m0wJN} zAJ3Jd8!MS@UY+%@1QBSx`_!G)N;JCED4V0xW$^U{>1Y1?2a->+U4&OpOT|}F-cef9 z-u^lNo-oSLA;_*5@0ug|8|J?v8VxT)wZFCEThuu`@Y%M9X7gO@F$uX|S523`tY#1D zKe=gmEho=-dxY96xmBl^*MIuAGHaM%Cp?*2-};*pBJkXd_JFFt+Ur_mT0Ri<@wL!% zTrozcY;$ERA72!@mtj+CUPIN9u9rvMl!aWRo_k{mWbb-?{{Apv?ZhSFr0gPw{JNO$ zr<>2t!J#nlNMCR&4#e}ZsCAvgb>H#zQoLI4IM5<9bEHmbWf{ZlH`f9m{4KA(8ktE3 ziVUUhxb*_lbN%vdQ_;)p+*;q&^fI7lZVR6K5+UD?OkJ;(VVQi-56AHBv1q;}4`z@8 zE#i(lHvwXu6(j|k>YQ=+fc2?M5exL=}s! zAm1Wxf7NXaxfK;oC8Y@1Z2u1Y=xVDt)30>`b3HR?nWh-%vnm{_Pd*C3Bn*+5W z*LV23q(sVXloIa)j;u-BQX_@y1L5pEsWs|b#%76pHZo66VoOY`)T72)4hh(sKX!aOcy%LYVQad#+~Nn&<|(yE<+b=AROAZ1qj*e(pbLZq_cCcm2K9R=`}l zt=C@OrnKA)Lg^FO!pkYXhCD;uu7{V5P7beY`wNA%^jfdQLYVIjb@@Wt>)YF(w~hzp z#2fG1A2yDY5!k}#pKR8znZcCDenUS#j$qy&8SJaUc#^3fs?ZpBOV*YQ!*2N7gSJme zGZ~Gx?R!118;#pkDv3AvUoD`!;U;vp-_KCGZ#_=wF9zzP`u*in4={sZho26zFV>wp zaJ+vgisZhJKb8&ujT2n1&A%R=8vhg!K-A|p!c{gMI-*cV1tsVCKuq)BwtTuK)U zOYtVT8x5ZQapXMuL(c)|)j8}005V|xdNlUZ*>J6U8inX7+ntN=`542Fivqmrjpl)K z-Zh_~;|dnG9d!MGLJOjXXOgNwpu0wEr&g>aX`Cv!v@cOH%*B8d$VNjU-9)!*N%nD5 zDyXaxSP9f4eq*B=Wh+D-K1FHDYoekeZt^Vogprx0=l25VBhka&i_g-FB<$*>4&Yt9 zA^QAl!I&0QVV}ja$5bJMziDW^aB3TehE#{qO%RK^5N#IerdBw5q+K@J}_c8qy~8; zbd12PPE^21;47dZ9R(%r1Db8#9fl&z_q1z4pE1!fwnhMOTcrORX96zX$!?adj?qt$ zm|5UkX#fmR{Jm(?Z~Q}6X%T&Mv@inGAq4@>8qk>&P+L9SG1c^@R!r~lx+KNmJ6~A* z=nSDw(&%h-|Kxz$v62O9hl`iD5q0gCY2YV1AY{g_TH}>QC_gAAaC0l&?P!X_U}~kF zw)=JL$E!G*k5RM4r8(cMlOi%9WBKVI%&>Tgfsb&VFsq5lNC5D*z81vpPhg{Up@1#k zjr#+HX-+B6YRbp34i3bn%QquJfVY-Jmg|98{SO96Lk9?J(L{v-9sOjW`V`yO8)8}t zF74c8Z0jSkw`hEfs$N!^$e}VZ&)Fgrdexf$o>Q$ z%S_q%*T6M!j3KnZCNK%8?kI#DiH;bfEr$ASGI3tAjuF2lUY?I4dyw&D%2SoFh2w^f;~~_@8`ezp28asGQ^9Z>XW`M zb04=mk|Au0bLL64MF+(E(SZOuz`nl&C`}GQP=S|PG+Cv=b>dO}f`W<@5W8mcMGF3N z>*)8WR13KoImrkgqh57(gwsFy*1;o9csFe^0^TR05->9a}=)j0_@6)k)(YceoSR}Cc`r`34y2aai{5BGX0XIM}^)c^SA-VYk5Joo&tTk z6R=E3ez8oTYJCxo|5VUs8TQNmROH~y^H+T`Na!#M!u^GsO#U^9RbS$?8mICEzGSshv>3QY}0g?m0-3w_@a9Ba$^o2Bt%Z(%+ ztOELP6SI3yc!(|}^@!%6iAqqGXe3oJa*J1MblbdR_y2$06V9p?I6l5e`Tqwp-1GjH{D0B) zmQis;>)LIA03oQx4sim})P#_NQr{kB~k_ zOR&|*nn8VEFG)nyV*Py&{h^)I1G=Xt_tMr@PbOI4dE$6VeLlUN$2-*fuvBofQjnR{ z1|e8;OZY?Z35pMvY;X%t=`X{jEWX}=Ha?IYt?MW{#+RqJG4)WaiqYr}j*Rwdb~H(n{WmXBu^9LHi$ zfzgi+>*4n9%i8ibM}2cx>m9G>k8@OjCjAa=er2iY`JD^%a;`zJD2)o7qosxbi1VRL zQaB{v7@Ex()7hE zffpvT0(iUmC)|{2)pBAmMXI|PSC!2l@qW=sJayW$zIeV|+>&d}OgwEW&jc1TNK{83 zJXg;hTNwvZqBiFY3HQvq#_*O+HSJAxe7eS#N#`5wLq}})U*c~(HE#7ggqd(JJhg?A z!`1s%O{hZ4j?#|z-#Q-0D%MfANG33_OW)QlQ*Fybz~Oz9i8DTP>$yGj!5tEi@`8BM zi&Ppl(%JL5&>{X725eLoCSdO-{E5x7yxKgI3^i3P)qYW1$%*Y?RDD|}OoOq(c~P{S z?3INv&bCXt&s?1S$vd)s*Z+jUg17)bOam1X30d%c&Kvc@Y(#aX6?7WXb#_rK<+R-( zD%WypbphhCQF4B2T;Jt5*FwGY?1Pe1FwSIGc*d(pnw^=9SU0CRWhkWjH&o0n1J zW%1)=onn{4skdkw@br(`l(4;7WyItB&G{7f$;sN<+NNK-ZT%BZAD6+wiR=^AOewp> zqNait-d8GkcUsEl5zvdV5u0+5b2ijAI!7Dc zLqstvmMK>HLLu=nI6_}jM`aoR-$92G${Hx%g%1gJK!sl}J}}|SoHgl4b>8Nc**}5Y zV->9oM(WKh%i2f_*(Q4VeRe#b^J@2LlG_W+)1Cs0bl3n?O`<8sx>r)4XIBq7l94S zI|BrK4TH?wwK2^6?6KNjO2L~U0kJEkU`L*&rRnCn*aDXXW}gh?J{;7hG7F%P_KA%I zG|?e#*@Puo2DYRxuzr7I(R;<2q(dmCAz%hNHX)OQiUP5ll6ihLc)v}xY9(WCe}GXB4%X%@DFS^ z9n|OepfNMDZ-h~&_|rQ#gCiH!hQ5GLis9}9IoLZA6y^1%1|l*iGXy$x2VPU5-?Fgo zo18|^UQfoRHiE+G9rULz5t;;9v{Lg75<}Eod}eajKYO1!E$ZI5$9%anPsm+XRF*AB zox0ww*bk0V)FUJ*&3rYVIDI^_Wj#Qug(8r!t#f|aEM9_SgA6!nv}v~|tk73kAl$hq z>5W}G*rHM$O&!(`AOjC|FlU+dLP6SswZEhA8X}vukyFbR3hsoXjAPZC+L8!!+de z6I}i3@-+_E;R;C+ICx!ku|DuZ*x@xmCZD z&WNiRInSnM;HUHiNFXg@5~n|~uzuDt`l(XKNBI2G)+a!*kQJYz#Hs7U{o=qP9J$?c z+DG+j`~2*1=|0HToHovel!c{v#I?+#W|W#x<0vww2;@EeKpyU3s>F9-E7tbtC12*28FK`37rgND!+m3S{q@T_O2UMcc^Ow4CEY{zgBm@gQX z7Y}OW1_o($BILs4_ZpFGzTfiVkF)wYUts0`4QS#)XEu6a2W42JK%ls7hg0^hzKN2>r>WcKq0Le;E9_5hRpkkcKrQPfT@wUpx8K z`O_CiXa(I7swO4mI(-3}YVk|%qcp4?W@Bs;V#ti|{g2T~C_5$g$U>1$Sa58iKKX_T zA)*r0%8AtHJq#!gN-1dgW?w)OA+qq3Arq`w2;5&BRrP~Tm61<0e^q?zeJg&`fB8fI z$tpY6uin4vcaxwE4OQyGca+%V{L!E9aKB*vZrb^59%q=9^C|edUZr%O5bU0e6;!Gz zt!3}eSS)(4FMEo)<(n9Y#D7?y73r0rv_`0)olGuJ!-zImkC}R;VfBa)#Ge|;;l<)M zIrE__QQn{Z{y3&dmwYJN*6&fHReGx zFo0|zMTCL5t(ByPAUm=wI3V1WB{~!-4WB02%@Qu%SXW}#y4CjGp}8^5yD;Ui*vTcV zS1u6ryW<9dIPVpw$eWMnnBLWE%+))>^?QWtl#J{9B&gq{7>2EOYJc;>q?ch|J54^W}xOABY2Yx3q8$>YG}v zg;FmFi!*{3dR)6Vd4kLEfjfbH)HnBtS_2g!st^@EMX3EF1;;9)HcXO?w@5bE*FTv( zP``xVUu<7#_FNO)IC7or+xc~yih76B=l8fqq6gx7?cv>Q4#!L^?2~u?puBR1xr`X{ z8UPJXMn`@6op?N513WOS>B(FujPGma%J9>yFS%0^wO^@gTD~?CN1p^$5sRhx@cro{ ztw_~;zIaUUJI=To--_aSA(H*hDN?C+>!_h=ep!jE#m&E~R}&?<+$WSPy)rdAV_=>8cGq#;gl{-K z4Q^2etX%sifqw6fsE5OcmcEQM(uv=)x7T;Bax!-_MhStQ7WN*$wOy0V`e!-gF^HyK zn}pu1RtApSz1qvJtSUTS``i7iTa3#`W^_z3-L>a$AHt@lEz>-BqVG)``g=|%Fh`qyQ|HUQmdGMIQI&BZ)u@Rj| zn0`O$Ugn~@vHnta?rc)aMB>ehJqu}hdOhpZ-#43SlUP^i`+Ke%?ynT6^M3WP#2j@z z4A-b~fL!~DegOUPPRk+;u9Q}*Ge;~pHXk?vH~8?XBJ$m`XoREYFrE$$eP#$ZH;vT* zuXvPOhjuT|@hOinMQWv;@vL^wv}D_x9RY1+-C#XoX1Mc818B#=m7M=}QMDvAicDLO zi6PavZJ4OMA5CRq7Kwu(eVC}9%v&pKO&+-s5Tl;2@M0L;$rN;lfqF=SPnCI;9J`}0 z)oY&ZSIS>puF%j)jb2h4Jc@CYvzG$cuSt` zTR|)`s#Z?4m%W7RwIGtZ+D+kQ$@a+oDo{m^DqnH(QaX6INKaepRNFS#%rO?gv=(My zUcHrOVx9SdD$S|e(dZ+ewDR#c!QEm&VXQtaSndh!MiJnql>Lvsl}s{1Ki>H zR`6yqFG4a^;GY?FCFk=473WPiL-ZRDN+UDj>>J5EUG4&J+bFtVlSvre2%KkBup8B& zPjt_@CDr{(Utr=n-mHlRzJV)XNXWkIXX8cV#OR3O`PEWEQhYZ1^WS{mysJ6(dTUKj zt~?TOcXkmY=V395Zs^BMXlr7|J{OvsOGc3wE(;$|XS6mVM*=5zyO(;+dHQZ41E!Q4 z-t=XHLiVr{g2=U{{RB=N2dm66%hkhtbI{dLU;mH%7qc9kgjqUp(PbXMt7<^4>WrVW z{8M3Xvu?^*M+!t%I)YzAGoW)O=`jzAs@HMeE*B>mO4*HJ8}!@Va4Thqm>~!!w)%K! z^^O7{0)G-lBy9Sjlw4P`LfMiqyiI>n=*i`L8PeL=IOh^Kf}gOlr;_mZa&O=2ISD%-<{b$LhsQy>SBQk{=C0TcS-ch(+%~g|+@dX4t&n#^`E3Y)R2*t9 zomq-kPR$|z#Ou_`6`~6`KfZOfCQ5SzWk0U1Hc}|Zuh@sxmvP%2=KXMYrtoXJ32+bw zR#g#EQK#Qd_qiBs=1L^>%jp`FwB)GaRlaw!_)|Y**Pe$3HTa z=p!nsWH85dTW)p^+4R|_2Gx<&sQLr;niD&3Z4QP~W7jAhchMsOz}cm8uO788(LOwn z@L}m_1qg7aE&<%*Wm`t;ZYqT5pY#_OlB>3;I3(kF&t57?W$`;^w!#txA}9J{2G(yJ zK*cN0JQ5`<^HmAMFW|aU^#sVPhuyIi7s`sJl&XX}@lkzApV;zymBT#32^xTi^b~8i z)t+)d#r2(>^iV_&8KYTeCr38B#u0fBkQm4{Psb5=+$k@AHtC%0 z7A>00*|_}4TSDY+y7Z6ms+U;Zw&)RmOw75?r&UTWAVZ zoj)Ew33MQc`xv5=)ahzSkfO`23*PTYnR%XQ86vA~3)bx%r14$FJ*M zrVIUtec-l<=s|yZ;x>9~Y@pkQ8JluFV4GKf$TM|z$Z)Glv28XY=OtH#LYvgoI;4)( zO1!M1zi)eZCM=z=3~7bGpv=n5MXWW7fV#HT1YIx>kCN)F}bC+sLTj|F3s96;OKzJS2XMRt)lrmwy+F#;34vPJpZb4GL6gpE!qyC&ke#H zXZY>niz}}a$+&8qjZHei_pcEk3;eq1n{>imT_-}O-vG?Nz2y0Fhzlb+>JrJQZh2aM z^QJh3G{sKj5T8B`T_=#~fN4fXX32dMOu@_ZK6LfD0oYTn8s6{{a75kj>8C^`uo@W4 z&$=(KI7;Mp_}{)pc{))%5&#pI2M!N3mJPZeGNrP&4{P18n6=lMpW3`#k15L4T|Hkz zNX#?&S&1z>Qi_%-JBPOqcSih{CC54*<0;(Ab)rA2+{zwt5A1s`!P8n@}XuV5)Ngt;bDx~RuH z)xi+Fy$bk*YGeNQbqQA>86u1o+y6hH(5Ruzr$Sd@0*Wqd2^NW z{b)NqeM`{=^h_{w3p2$`7izqc@KLFrlT;sgNdF#FuJ;Q)#TpuO@h2M0x=ySZ;;CHU(Z$7LCBZ*c(%< z;$8zYOd;Rlx9GvsR!h{7oTz-3vwH$3P~>DkyG_Y0Ao z(4+h{M$6)bUC|#OEvpdXMHDVL4Yk&-bE!aLnBc zRabL)a%Gnnu~AO=sm&w z2Am)Uhfi%9e^5FSZ&`RZRB>BV?i2(c%m`-}#G%+0X)F5q4XD86a98{WcDPLB16}=u zVDh>6?RO0>tiKNa&0q@tlH=?YhWQGktJK-92cC4$?yRjci=iKu+sUrSlz7xGU|h6l z5?&DySg1VN2#O?L(K~~|Um?aL9}rsWT4h5a9^II;*|Td2QQ777hJ?yk>I&8%9y}ts z3o$KNI^rgod}5&z?PL%BQT)~ZM)-wm$)^5vg|jrFxiz-daa4&Tg+%wkAQJ{2hZmAdQ6su z_|(;(B#wmh>w+qD)ZZd?)N3y9Z2s!C$xFf{8F30cUjz%h9?GrSeM3WjRy!h($aUta}V&^|U)o(0q0N9rh60Q2Vv0 zg}6H-A8K3K_0tVYldNkg^=>H1j*sa#i3$=a{J4&sGA%t+l3;pD??lK&)+l!7TBN>E ztJ}&PzjGWf3R|5u5@sc3G{kwcbl5dHtSXp*sq6c3 z_|qq^N?h47sc&0hs9G{~}m%}7k(5Xz>z)Q;f5q>Bv9*lSK9k(b{2)6>V zpQC_#DMWG9vt2to_}>D$=Y|(oA*3%$3i>lxVm|y--%z1uJ(A{NL;$2sK9sner2vj^ zsu&XOTHr22MWMJ67+EuZ-8)@YdKM)BWtt#`bg0sPfz+VfbFS?ECr z0V+^Atf7M^b8(3%^qGxglqPZGCf4*9nse;d?K$k3ov?mI)qwd+rws)e8;b$DT-fX0 zr0J>tG@HkVtpXCk3X4nH?4RxjbILj8#bsA!v#m^{5ivV`zlWuMS4(X*T1{xjif$*^ z@fZG?aK=LY75vRV*%H~f%(HByMq^Tbvrb@O-uNqF*$2*StEAG)dBXhFZ&&OcjuF(> zDVZy|Ip34loBV+QOxd2*X>+TVGHY(iv_DN&@L>LHgn%-?SkygRRyzS-B+{ggvV@h1eQFJ(xqF%PxKIyw`SUC!g2Z2n ze+!h{IGt<0vFB==HeWi8Sb7)RCjodl2E6lU?DYCzj=#X)&tLXn4*Vt%UR20ry}2vJ z5S(*uuNbVOJ<6Df|8i&bz2BC0Ji5oKk{?vwsUR8Jos`%<$jwnms*7)GY2vD<@|UBm z`4A$`6cCGppUa&zr6@9)T?Vq5lgNlfzP7TcyL3=`8!cTNuW_}G5QILMz2$bBVa*{o z28&H8;)?;lL$}3yiTA8*f~MD)W=6x|P6{do$@lt;PHML~tuYe`Bv+9dz8`)lN|Z&P zEOZj%0f^IsZk?V(ILkCr@MR0*%bc<}|3q|{4_vHeY=<<=IfiO09$%I(KFKS2T9{{l z-U5=^Xh99AK+_4Iy?piEwYDa0xQcSf>Yu&E77!41?-v07n>1oQ^Zd%66tKhOV}<3B zPcGr@>mD{8?rqd?ZXO#?vc@wOnMry}O}1XB%@h2dvAJi@)qos? zTHkeHLm2+K2DzUU68%nMLl_wFlXZoP9;tRJ;j?(MwO!hBzwg}~YpAqh$z^#x^UTbt z1R~&IDcK>n%rv}5ueTR&-Dob!UU_+y;KD>Rj?Z&&%({ZoicaGJZ&3>)bycjPjw#Ml zxrQJp5yhF+l{h7X2^YTzHPA$i@ccTGp6apUsz#B8_ir960B(t?Q?|CStTOYXdUZ zM;ez`>C4Y9ixm+W?3@GzrY}AXBGM1-Ng3~5=IQ3P<-Z10ZxTJ>${-QceleUxuo>NL zA-O4z|`Uk+%P`uFkU{$l&?}4(nPH;sXpM2|yX&#rWV9pre z;?$0tjc+&l%-1L46NDKG zsW9alNs!?x0jmhuq;W0@=u>G{+%emZIk;*U9jiSNM-VVQ1twyKc@d^NG)L=?{g?u39JvA5>x>CN41aWiU+; zn;L^p@RxK#yO+^;hTErB_R?<_Up#Q$k#m1=-;PbJ{S}mdjPE1uR_hTI0Jjtwr|=Ec z7`L#01*>`z$*oiN(ijG9fEk!);% zSPt9!YPR54F=Q)qG2We41(V2(QYD)>uidos#p-lw>8}x`L5ZXT9)>E46Akfr`ld7UF?SSCM zvtHzxv81No&*Bm7dSnZ0bIK;r(Z^FswCXzRC3ay0zuFbWQ$TXrDaC+?XMVxHn_69nU_poMo*M>z$}=iAH*MQQ%_mJcy{q5A zx&BKGODba>D@TN3*F1Lv!(&la{iQso;+cv2qN&qyXJI~$>ygYzdW7qVjUq19%lP35 zn~$VMMjsg!_6NdlL(9TrVsNuH>=P+l5j0kqp`6BpU?j=Xkn@c4daAl7Yq!mIUpceu z(!*ur210q40ojYH$m^5zihL+Y=Ks$s=RD7n6^pDJR#<(al@xXDN*RiGC`48{YeM?)l5 zn0=F+bWrKpe-LBC3sSS_PRBp=o6Sy=XX7Y+=K3?24I~UHvV6?Z@AYMPJ$FK!^3~AK zzABOp;?`K~z0R0~it69|aQxqOp_=nH4CZE2+XwL`x*o0!6<<3SV0nH)(#U z7GvrxD@?qbeEZp;5C%NMrQl+nS8Q+$=b7y2(H$PG!l>JHYMlQiJnSmC*~Eo?9nSYV zCJkWrYYlYRF}u0k}%;tlb*r8rfjVFQmKG)X(#CVsM-0B|dsKnOftF=zIW%B;_{-sFvvgiu9UjJ^~ z#4gOxPHqbbfA#Ba7KR|tp6n;@4`lFNps!t64YWl{9CQ{DI@b;wifE{{dWkgKx{@B1 zLCZ;G8$jlI0if*1m7LRi z((5t<3t-Y0$8KCdvRgMgJ2=uZM85qBejOlU7^Y+J*wi+`Vc@~MOj zAMCw85v{Uqre*gu*NvO)SLAqk=`oR#;*I8~@id{+wO(BK{r7o1Tn!iUJPsm*27v9W z;19aW8;C`nZQtLY7-!M_y-~~r#Gbl;zK5qq6Pq60EHr-Z`eX78^@f>npjS232q&H@ ziJAgOMei4oE75>%#oLHNV&g?;=77Fwo}J&mq3{Fz%zQqNw;B^ z}f5s!wZjz1KBF@Bxcmln^m7z+{uc|Y0W*zE5*CULyo-(u>m%>ll)GS# zmWCFlIu=qsh$KjVv?|vEoc)g@5m-+BA4%fc+sozE zS&1t9ua}9pHR7hf4n-p!i4Q&ueOvq#sbWWE%dcY$QReZXL7et3L!)*{Jb5hl=+f;-C+N9adm{R`Gjz7URP}c-h1eLZzDwq#7TYb z(%IA0b$xD!L1?IH1*Mht2jcvk`N{}9Ke?>C(`&pKxuK)mG1HA8c?X=3;exq(9`9@F zBw$U%4(ms_Fld5Z39QsK96@&{YPs!abf+z3b8>``$IiN zUg@Vw(cYXNAf(l)AhdrL!!Ah0af4V2gfS^=LKv$=T3z~%6%D=09V?Ga``23K-`G4I z(PpfJdW-Lzjqjr~a(sUtK&bEcR-QzXkpFWPVBK*RT%I*{zW=fwsD#b!a@kmb=nS0z z_(TXqB7{2)p;WY`3qzdDrEC8Fq#)*dC((!X1)8i)l;IjF&@=bbY=Ku%h|?iIZMd=o zyi0$uKBT=8j$bQj+l|kyR z1A}c%rFtjn>b}O4Z<&Q?e}GJ(7POpzhXA~9Zn|wvr$-mRl13XwxBo_qrh;~`RrV2T z**`250!M6YL4PMAqy48u42pGDLR&Bh6NYFMO|Wrsn|yPaS4%_%?Y>zyHbTsa$jPA) zli$CjLI{j9_!INr6AGQ6=B0?8u?G}cZ;41$Ge}n;ulSa=-59aC+ z2*d;i6H;lNwb6o%C6gsTPmPKIS7H0d$WqcJzn${~1rlL=UON#vj*qA`TMk z7R@8VBN*0(WC`HDL~bz{m=y+7|07MJW+1iIEB^&ef({^{$=CmaCQ3B_K$E2Nf1pWs zPXq8zq(~)<@&Az~bP&?y3lhD_e@GL2vE{{BCJ1SQu=&T(@9#g-q(~zCA8En}Ax$28 zJHgo>;+Vd1%Z~OYN%&G3eEE73J~=6Z|8>(e{P0s?K;9R$OGUvDR!D*&1OfOT&*G6J z0)#WE`449T6lW8}o!1N^W9;J1`3ibqb;m$#idMfNJI(I{1izWsq7wQ5kLdhKMn($5 zr$1Dj4hKJ9>EqYEj|d!)&_aa-{dSc1i2n-InF%zNqB$u{-b5j?HHHqtnhSa&M!+!<*e62^aH)8Gor5KV$TdP5mX9ivR ziy^Fm;if;mkC+c-%xf|yf=-aXpsU-jAA)~)@ctdqLR0@X&J-lX5Td3tKhN~<{e2RV zotApRTHWwr6JqOJT#kcS^n^$GSzQukZum_SBYLri{8Np4x@L_xEX@4FEOKjUDnYG9ff=84beTjy!BtIa6z+8)L5O*@(Cm{Q?5@aUHzp+KS zAP@=7KVzZMs2OCxd{du+#25-{phH40{+SdD2P<>a2jMZ_tt&^^Le`Ge!N*suhjhB@x2z^Fl(K?kK6ik6=5F6DI zq`e_mIun_A2SD9dPA5O&<5sGm1qLi6#!zsEu2IiqMPinu70HoFVTe8nzbNyU4c1Ax zr~xaiAKftrM9#>w&CmxqnJLgkg!1)FSMtgs+knSK+ zJvH%T5Y~w>I|)yfmxj1AiP2yo>w_(uBMZGe)hhy&>6u7p6c_H`tc-?@Lo|u3j~sCS zu!#StD6efX<8J-a6M_ODUchlP2gPo`^aL>t$b1Nou_m1tlEJVT-3nE#&5Wjy18bnH z8KUxRK!dEBw+QoY;etB;SB!=&6XU|XFUS8#k_8A!GRdm`k9#;s=Ell}xp)L7+20Fn zqx5G(RFfzSw_cm3Y#STdllS<@sF2H$CD(6BhGx`2(Z&PdIXoyT7jg{X{IdJ`Tq;)a zzch-<-5U63m=TKJVX2e(#q1D`V(tG;qgX1riz0O3fKNt*EfCxeBdTP;EUOA z3*B63AC;;x2nw>xP75)eTHp&~8PWK_Wm0`)fi#awdQ$xlNkVI*LW@&g4vw z-skQ?b|rD!Z!W8z3ALEwwxR`fM2S%l)dubt01{c)KS5AKM@ED!U^ywN47p|8U?r>s zWnQq55sixZUenRAL~vHn1mwUI0Nv=CQ*Rztq1PEGZ-JtB(wRw;{kp8&I*F2_?2AtlbVYaSy$G5ugdL0{II@hITLe=_3 zx|d$l?z}^DA~a)*@)ZSCAhbTmLyp?w>?X~ZbsM#>-Mtoh6n3$THPUBL2~a2Cdy>_E zBvBbt`$g)~o?*q)#Q?u?9fBV%4>+kagte zT#64;Hi=F8$$0ZZf}ZnM45nW1c-mXt@Aqm*V*3g^;)ApNWCGU^N=v6=Z@^Tra@b~T z?sGC#67PAj9VYOyYlS`F0RTJ7ZWKBdkvC_Z6D@{(1QnHDx0!dZT)GBVcOk3mm|-Ja zIulinOFp?H+NQ~P^kff(SImb?PLD%_)SK7SiAmd>L;h7Gcb8q-w%B23vL#@n`Gj3I z(hh?3lH*nFcGk>>%yMPf`8G{^&W!Swt^M^XsRnmjY%uxWb^*T>uun+rZQ#;8dG$1s z_No87&li(62U)bi@p#OVzk`pt4>3J^=*zrQ84W&9@}sG`&7QA$V`DSOLcGx`ZxN)( z_GeXLN_(jJ=QGaQP%@v_FxjyJFjPVh1U_xeA_uxTb*vyh8{2}Z>gN#s}*hW zsGw(Kq-Wh<(vVa+0Hc_GaucIQWLxAb-)|C^_S5;qrhSU%jVM!xmW)8gG97IjVqQm{ zm6NRC)XBRDzTsOLUJV=LjKcjB$wN6(ACKMF?S7!0@NKPp@%f_P3nOa)wN9?B8?E{Z zoMUMIl4x6fF5qcc<6yPfIg+>l-#WhEG~x9YIUl2TkG;VcQ{HOysjt{!@x5OGa zj_O8tYN!$O_wOs#w|P%rmN*4mF<-h0@?!QQTUrEU%Oz>`CWj} z-CfUP!i`K+J)NtzfDXX-GI+Wot&p{`1SgHmM!?3+jjPL9P3@2idji z=^7kS5lVO9rgp5_Be7iBE2bmvZ`l^D!nNt|?=^&z=q4u#wU1Y<{HkGc-*|Aw`JU%B zEX^ZEYOty@(gs)Y@6*JU*?fK-alqYR4=t`AEr{iuspjH zzG`ysJr{|kdX)D(uDP~0U<{vTr@XODKTmA#%sy3PRc;w}(bE4aZPIh$#BS(+E=gxR zUCcAvbFR}AWnuKi=Fy)RSU*g^v#ouQh0}ZEQQZH&b!b>Tmgh&u#Ip1j`?H+z6a|r^ zM9OnNvv%T4HdAhe{`q4@6m~@$7&XNGK1YnTO0akU*}&(*iEQ`FlpFuv_;JBUGu~BS z%po^5?z@$tdF=jy(Z|h>0=pwn7aTe!NWPNn7-0S1r3$lJ>QRIP=sx=u8#PdMPsRMc zuzsA0$omu_p9KZOc~2rmJAOdzJOiI*U2p6>IE582`w`uPXH{2Ul<(~NVzws;{oWik znD$%Q9yz`Fy}0a5$m-{Uf4suKJ~_xIs-sS&DFth`Qa5v1`&aO{2d57!q{b{&bBtaDFua4hCn!ZV#-#d2()lH!r$1WQ&}C_nqVy zbUz#Fh!4Nn1h0t6hX*C`xk1^lt~F?n!Qf~a7O{7jU+a@Q8>0LXCgKr^Y!40$#K-0F z@7FIbv*PY}usAGuVz?X=0{}-wziW*TmckXJYovijIwmE3;=aSbMb2_@b%@siey_Lb z^cjDvB>GNLivtn%9-PiHoC!ze=V%qQGx1)WprW zzOd9LQ?PzJ(Xgjt^nZd3$9tF^7FfzYd^1yE+R-btIt?aTcp)0h$^|^AP?KJWO4Wo` znBZ=unzK0`2AyY+FAp}kH*TK}7F>6(d?W^H%6cb8kUdx_>*h;rs#YY8_`nS-Y8m$N zD_ip$;!F4gMLOG`^3=w$Y~-m2@=bg2b62%|jTLFgoL0WCy*!`o>-v~$hFo{?1d!$f z{_s-2nlA37JoaeLaY+q`fVlb}sF}_rITE^Y8Jk=ONybETWcwLiR#$*xlnqd5s!n)~=6112tsifX~@- z7z>gKzk8j?xMH$ZqY8G_XH{Qlhzq;eT2ISTDk1&C9>{8;$sFdV zj?)#>t$*RqyKFD;JCKLpk-DX;qvl#WB$zVn{wApj$h2G6f80kn&;gpuxcSejXH^&e zk{GZeXz9c`#*M`zor^EEv0E-2Ks%tbCDN%3{GI7eeVQ)?$tXTeFe6JGV6RvB;bqwzq(vU&G~7R>;OXQxth1(qkir?zhv&4m|Fm~qoP z=}`@#u~`tOa{i?@H&K+gEz63gUF#8P+nL=poIbsuvG0eBXAN{s|9x_rjSLtkf#$BHfi5+@z zcwr)?3b|2P4A zJLsU0Fi<}oss(p`)#x+$SDzdA;J~Cobw?0yAlGMKJ>q+$?h)H`ptrGMyHHeDg8Z&^ zk2U_rS!VA6>LQpCKmF^BeNAHiobN^kG~=PjnRhD;LrCYpUsJ z;?{UX(fwjjiVO+EwDp2@l2KRLtrD<^eZzV$op81V>=*D(T%!0iIaVzA#C%MT*akhwef!=WX0R1@ zfDd)P3935VyL7#5>M%x9P2raQh)ZB*u&I6U{!>tr9H2_6@0O~ zfvmIy5Tc2bzjsu0vyIF|g%-ezCh(mSAkz*4qmCYYZgn$qv>k%PU8WIK5JNk2J2_1> z3L~ZOogI)QpqrZ0X14|{i&#Ii9f|ar@5sTUBH2-%3^np`CyQ2$-1LqTj!O+H$IB5n z4a?wI(rCi(jPi>+oy&=#sBAeJXu-LSELt zJK2*>I3ABQ&R-`BVAyyB^%y zu~a7Z>vx{q$nSP}7=oOu}w!K&x)cmAGuk$qx zpLUhGh59_{~;_aKEv|<1@b}->YVV z_;-0tCp)M=KS}-Jq%Wo!-cMpD%~^H8I4?qd2T6GCOX~E@FGn!wqS-hJmIY^QA=88-#XZ@|lp7`&aBr;XJ-Su;k&i zRJ=To=dWZX=R`6e`LabM|F}*VIRkJ68uE>jZ<>_~F_okR@DtJBNfY+%Z-!v}>A8nY zzip(gMA+pgMkH~1;C6UMKtTBd^zTdYo|s|bo=G)5oRe^p!WEN4P3VInHX_I}3`DNQ zqC=LU9I^~{Cnm*ZAMH}F@c@PjR)UBKLKlTonaLk~iY#Of&cEIf(U$#0)t}w%6s^@9 zQme+J6K*{lg5H;BzY%@P(^|t6e*94JnANUdAFULqhwv{es86;J?^cn>2Uq*ZMsR_ zTm4DXak|5y93twpcKt`t?1}ykZspx zS^nRh#oE-C$%ylD@NvdkNWl$w>vle>>FxaE|HIffMpx23d&ipC6JuiAwkF2JnApZ7 z>1blxnIsc?Vsm2Kwr#xU`Qxs8zr7#MT77!$-m9zX*QLFyHfwzm&hgC6vfRTC-DVoo z=@ftZO3;T*z3+Q*BobetdsB_EWAI7=C*~0<^{5;smp8!=?_!JcO z)-18*r^PXt*qT)So*}?4^C;E&Ub}RyJo&L9{Y-`19E94=7862D4!Rpf?VxBJcU*E7Mo=-1WY{a8-G}uUp;tR=L$0w0#?J zni2QDUG2G&sr7XQOkS-bbH?(FKRm$ro2o4+3c{N0x^~d>zj8|>0{V>0Ls+(FkhfsR zV6XR^yXaX&hE&+C%lLhyi_4OCoVaS9CJr;LpCB<5&b$ZL9?3NzH{iVDINjUT)C%Uh zTUJ_#@I=Py&8C+K6$#103XQu|Lz=X;RjlV=OtaQ5b8Eq4W-08><|$b`YN+eaPJ^$< z?U-E=(#XQW3%_2q0IqImAtY{Yfu81&tGDMpUE->I#J+d+ISUJY=uwG5;S%`AY|k`x zv--}8PbsIm#?XI73I32$mofn>MXa4q?;+a(M<4ebsdJ;eoWYw zWKngJPQ;lc=iplZUe0yf^3I6~ZNZ*=rHf$+W{{y`>$7=3 zp|H?yIhPF#b?i$Ep%mC7|K0B>POv#&cxO=`YxmWAIdf23BX}y>-AMYAM)9rJEQV!{ zvPFxWe)wm#cK)j!&9B8#-;*)XxgS`6INnbhJD(OV-UA5l=e(b+a71=eIG4Xw6jv*1 zzOG|oxpn4u(sFc)tF1o8ui6H9FSY(LSdsbZy*M=poca!RYzV$YsSd2sg_L1>0VqRs z9VUu(XZT@=?UaHT6Exk)EayR($D9wQcTBgfueE)h*q_|DD|y|7s`i`+mmWG~(Nr1< zM^a2ns{4zIn*El4ML83DF^?~d;&ES_qt`hT;#CU7hyOy36USAXX&b$PZ!m1X+hLooFbtj(ue;8!Hm;wp(P z;3;xS%DdVveX-cmE)v!+yk5etyz=TNO|ka`UwA}RMosRys$C~w|^1Z#5KUXGwkU+-MS=d8+h{Z;jpVvK4M*l7nO&3qH)NeEi3BJdm7X|@N6|P6laTKsTmjYtr6F6>>SK5P8;252YCG6<8`Jd@kDsq!< zq6dOWzgPkb(P^~-Cq~kw2QqQuI)v#HCLYqoX5+c@q@s2@4*ymClCZVk&>?y}trZQv zjSbZ=gr0xhPs19rP*|1AC;%utCHHw4H^{|U&{ixFrp!>a0#D-!tiB5PzmAYCe~JMu*`r3GA5CUU&qB}}^r0@Pb`VG44lXh*HF z+A@{!GH4jIJu@t{;hvBP_2RkBvCSFEJH1W9;Yz5+83Q78qKBr!1)bp6fcO|dh?Vgg|pIv*5 zDv5kU7JY4BJ9`5-B@QKKHgWbN1gVl?v#U}^!s*PK2Qb*)I&`%!-g~2HlP)HoP_Nu- zr;hrAOU^G%TJmZ49)X|4*GRGj*HI!}3mFkTL*OAg(L=e^DCxh%e+T`+Pr02STbQ;d zClV`bmHy4BlS${=cn|Ic<_b2>#YoeE=+KB2x?^a$;=fd1a?RN#0fO|4q1nM1rGJFi z+42}^e7sFrmh!%`R|}=AdEg^5+a7g-HFFvCrO?MG4x|o~Q(#+zPv-3A?OVcrYlKEg zlKH1)l~}UsuO9+-z~}QbN~|Hi!N0cJ$VRl|>KmHDb8NI>1_Avum&tZgd>i%r2G_hC zQ}s$?&Cf5#)n1YuS90xFlGE~IQdQqIZ@h<2W}$ATwB+oh0{N)uyX+CM3C-%k1koGt z5j{Ztjv?N56M-yjjy$aP^g8)}=0K?Nl9V_g0#k!hm`HBdRwp4)b+rrdNzxL?FLh=D z;|(Y^AJMO%y+=plU6&JxZ|se1W4~lior8E3)@NSkxgL*L|Jhc&ulwfn6ZA-)vm&?L zy5~}BERK3shM@t4#zgV)D#m!cyZ$}nZh?I7H!3OM+ATGXs}#9b8;p2pCCV+iZ6?p1 zl&O?Q6EGkJjXwm9PjJ@;jh9eApj^}pn`0~GeF(bQ%}Q>E_2f{;c?)g>>ttDU|K}y7 z*X`1s%`KSN#_Y~3S0NS34zLZ5zBSapB{~9Eb*_Bx5Ct)Gsu?y@0cGD5xQHWS{$G*} zs6Fa#I~ACQBpb^cOKu}H+oj;+`Y*taELv4B_bo=$GRr!u5X;QfoX(-m^UgqG1QGbp z%)FqP$3Qdxi@=x$A3hjz`jxishVTEvsPv*;HCs>?PFq%W@qf_)#5>>Tke{~wk7U_w z-nOj9mw@Q%oA`xd&mqBfTzX{-v`)5SK2F@_pGd0*=IMg zZ1ohbk~!Pqnpw3*`h^Pj8vCk|h5O&TSSe0S-kP%O`uaHn+~xR%Ph!Q@s+@xjCqu^+ z+V~4me*oG7KVE@2@JF5g{20jWdvP93*^IwOO(M2ll$4eDU%}mvTt2CCW|A@DSc|V~ zBcRVDE1S}4|D$M2XSNzcNS1@EkRicaxS@1bkWs+g)z@)XZ()qqKyKv1nyHpTs|9s- zD~ZH1NydZtdpZ7hE&-aI!2F z<1Q8tKYnrlh*0v+pVzTq!wmCFvQ|uNwJ^NRb7>1)-M{Rf@yn;jmRq%Ah$jXN-pdM6 z0OV`xfv_;fjIKAMJu|x^^b5oWTRK(USn|vM=aJZA7Mzv|9n<|Z=bzwXIFXxjm6K_| zO-UjI2k?VP@ME=rN!@UfmRsF~61jvy@Gj?BA3P?lADS+ad zfVtaTM#lkMTXC&S_qkA^ID5qJJX`p{8C>+$>K7#Q)2=7((>T@v;vlxW!>DVIUXRs& zeIF+({5+O#Pw7Z9jc_7fP$2(@h?-`4
      8rDrK?b&>_H7@BRY z6n|u`j3K%bJyFGi!ayG8LcI;OC#+xM;m;mWhv}KhuYuJQ5n%=4wDhqfeORYR)|>t% zQ-<>9VCOPWaAMUQh%=u7rJbm51yjuVNVfV5&Mg0kbw(9f@-cHo^Z2{GMR!R-vT~ZS z8lL==QojAG<|w?A1CFHjF%g!g>twreaIAv`HBT&01rFlBH7zL~MA4fb`&2{PJel`i zi#*dZ4_@UtS=%i>i`t*KFMANn;4*sEPeuy?9L>y=bmrh9>*E7}YE$1(FW+*vrckF* zrYn7u<<9Lk^ry3yxfJ60#17_|@ZaM%8zNZli~(?Dw(6i~^bAyr1DE;e8}7YnqwBj+ zm_AG1%7tEBC1c$>_VkGzFjN1kUiwQ{+#Us-5JPMHPu_Z1*pDsi)a7aa0B`dI2Vl8r z`Yu3Bt8?&e5VYp@qEU{xM2Q#p-n&uZs}JZ0N`F3ew8M>(p#{sJc|6i`BORGXkLZVT4{!}p;$^C{6zxV?SeIXaINUE|NO*`{~oHL9`7Tgg(=op*6Q|mWHvyEpPM-Tp`ca(3?R>>r0qxX z5N&5Hc*~n_>YEhyjMvJ?+7?N;%eQgmTBT>Vj4w#0jho!u3BSL0z3sX^;-0JM&5I&- zkWwCP)@YFxud8R8Tf3^9z#nM6CqV<@&Ydp{!rDqx=m|;Oyie3bkHgr#a15R=r0!K1 zem7#g7T|N|Mierzi)e)O|3$IVyIUj^T%F2Y7b!{U^E4U-K(Ry~V@g&4^f1g7;lfRT2GI{(?23oRT1Q&$G+32q$pC zaMg=wHBQbBuV6wl`d(+S3jCFxclM3BKOyUPP6MRES_?1(XRTEb^#AJ1vJftV){{b- zCz}&Vv%pedIQAHuPHu8bKu5JtLa8jF!+nANL8_VI{>re^T?(!^GF%@roBk!nLYgW* zNgAwae)p9Fo#g9Il0G@O^ekswM_#=Tp=s`~UV2OyT!QKdvFiG$p8=H!pP=>ZQRfxd z>u-QBn70v_r^Afh6GRAuUM%M!5USXF23Fi!IEQqU(4&IchI%e~0b6W|PB!*}9S__F zZRY$M;Z8B)UVl9^FL6ix=oqMREDPiSR!omb?(5X8C@tz5XVjGteo3F$!Ro~5df_0b zuuzB;G$~fL|3(0c*cU9a7Q@5^cfeLH<9ZI|b^0*jc>}eOG+!C~>QZ!FGi*|BgcZVMxgu5hSU_D>zD?aR zGkygxqKP;Ttf4(Venkr{=$2PtwOt-4vyrdfX+dL;%^vacnx8bn_Q`dRu!SFiaCuN7 ze`TCH==JyhG{1kMMrO{iPP)b-xZ;dqiQLh=A|kXeE5T!!2Nk01>1xkCsgN@97wTwu zrBC8Mv2fH*iCe-d!R}`w0GXDR)x{F^ZH;*Q1+`1?FNo>Fls^|+Uo0=UjIWZj@M~^o zG%-euPLBuIDF^I{d*vQa$KuHJc?`GvYc}t6gw9TkphhVz=O08jh1B_mHhl9(JYe~y` znU!1|;TjrhNXyE4g3Bwp;7%yhmpxg(-$it$hG53uWp;3r>GF${62H`fMMl3hgZsT; zz)aG>LEwN((vqzfgZJ=;{W2O9n}rMug@jgv5Cb0+!)yxWj*r{YbBu-K1Wm@tzU40X zB!+N7w*3}N2r~M>e);3vF;lNV;Z+v?C8L-s5rg%JH<2Vvrc(2kY5h*HedcIn1{f4D z0NYSzS5lk-d8rrqq%MT+rdE$ufars^?3>w^|NUSsVkP8ZoGB5HbY_hdT!)A=<{8O- zp4~KMR+(3Y=<`gtr&}#C(KPY6Oa=;>1t_L9W0^u}iar98J{8o-$ecn&m3<;60xK$H z20`zZv4;%&o=u@9uKKTc5^AR+^UeSPD zC2QGtXn?xFm^Qi6)MMF5hkD2%#corwgCH*322E0`g8-a*-wn*f4%T6!SePK7!Zvlq zpBD7{j}u{Q2kPa`GJ-bbm3STc_G00^^~!Uhqgw;YD<|&A=$tp7@dtN5mR!?3^HOL> z<_tHr<&8R;dWUP%EkDC6?^5;p=OEexK_X#UI*Wq4RL6l(KM@hFk9e?U#WA^u9Y|=l zfBoBe5*T{A;995&!&SPNx|)IP%d`WE8+&-dM$r<_4Pcm}WxVRg zSAbI>chqkrJ{9;GnP~KKUy-`zg{T2V0QXJ=r6KW1DG1j=?zOQp(GLAH0@0|$rD0#| zJvCZzR7raoY;C&WY~Tg=?3X0tI*?~qLx=L4XKQ$6ZNJHMqVLwB9@X&@Qi>%>65#+w z$ictx%&{vg0(4fOL@P1aFz^cIcnjIrO6(_o328z641OHwyD6{b0tb0+aeAAVc#e(+ zEo8|32>xGYtTmh(DKJ0#9Ebg^4WLx5#JhqJY8vP>CK-W$zfho;Z{bp*!ankG>c=NW zQ&gn-S=Z~-g@LC_ceY?_i&(%fHy;MQ$tl39MuiJR z8Ey4=M$Tj_+F%~PztfRi>X`rJV1N}IEr$Atz&wq$B}t4r9|nUYR+&d6ts(!Eiw;O1 zixA~?Y4*icBVL3DidRp~j@Qb-_#PxM(dST>{XjbjKEjbBcI_O3PVsVs9dAyU+}wg{ z&@sDaPrdtbAsX^?tHlBdg}p9>vgfjI$)8E%B8rl6ZM--?EFl6u{u$!xcG@7X@fMOX z>+1#6h=o_$MoWf`aDHVz{I*@(Tm%5a-|xx}9=2Z8{PB-bPmH1@G|QI>Aq{qSBuKR5 zOLtLUhiN)Q>S+lpbjyyUyhLip-Ijj6Z6ryMq0v}pPTy2DFBuId9$^?US)*!U%OkPJ zGHn&bqu@BO?Fqz!%+5}3@M2hdu@}a-|BT#5cq#fNagitFOl%$GIqOE=03e0z6g#MV zL`nWB-o2~r-(JIm&3AAJ)n0F2n44N;dMZyj$dNY~4927R?k^}{k2X7Woq<}gKO5rr zhDk124W3jIo)gd9c~3|R-ZU?U~9aMVEaK(R{lClh4tp1$`p@USFs;EywjYL?*6K zhqrP_Sm@^~E`AN%bKG{#S~4TMf<1u4^f^}7A%*ZNfzqi8_L%eXAdBu+92mjb{*jgb zyd>4~T{(B>yhhB`I_q4KewPY#OeR{dMTz{EomLC}A`0anjsVR)Gk^OS8=;8Gs%(c)o1AT9dJl5{5hN7+Q9Ig8GXQ3<7N9q#eBwAr@Yb= z@M|5VaqtQ!jOfd>NItT&Ktj@8a)DGy5UnqM2;|M?4 z6oPF$o$54QQA%$Ph4 zPBrUS_2^I1KdQM338b2>S4IuK$*Ski^j;bRdM&0~?QW0{ zdM(|#u&XUDY`+uFSEVqUQMh*mx3gYI(3()r#Ln{t2j7C^tnddah6kiH>p&K&DTdoA z2ZV)xg}SY#?^-iV6c;s5w?^NhnkL>{`*jpeg?grsYBI-tcb=L-iviEw=k%K~PqxlN z4LM)ubmwGRwa_xNx7+Al<3;j%XsKEaajzcZC`7b0&JIf1D@6&As4X!}x(2|1r`H zL#U-k8^4q)uj%{v0k5+Dio*U8foj-*jjTm6&{StV6{=Q)AeT5bIs4tK zbV5~7%xEpIdVP}TgE7o&yvLabbGKj>HU4e!-LmY_Hj{^Yb2DAPuvV=Xrl3vY;Lm7xJ0(%jt()5Urv6D?93O~i-LLSSdF?)g z60oqigan)CStS2p*2Ur9%IDwV1ZV#am+v#~2OYF8CBiCQ|4U-xzUjjeBQXL?mGK)t z@gddEEKRwbx)=H_%y|8r;R#?tMY3}5+TFUj?(MeeJ*)D-x(b@@tWr!(Yuw=5?ccL!b`R-Tc)Nm4w(t(O2Gq^rCz(pHHBh%6JA zIL{beTcs{Qjynl7 zr!KUv7>zq?)T(j!ZlPB-Q$L|UZNJlH*tuIY(9L*=9=t1PJb7TOBT<-%Viw6T;PIe< zRhJz>jFKjYRi$*QG{`Zi8vUc+c=vmPBTe&po!$gUACgvPmTJKRmz$+Cg(dvfuU^Z5 zhd(_kpm-Ew5ZpzCll4*Ne0!ZD^WZ}>_3-qBmd+1fwqHb*D286(zj0D#D$rI^L$vUt z_~QH1bJX;mXVGGgQ93c}>mB}+Dfg74hl6H{!qF2?kT>i zqOG6ZhEOo5H?zK-XPUl79H&ls;RSGf+aN(|flNjdGW;WAHTvrBa>sWE*|i|~iHJDl z>*iNI8w4f@FM#hv?@$VdMvhsTr=BxXUcqy-%}Az+QRoEH^2*vK>+o4WfBq_D8m+#z z@ge-?;{$d;Yci##8&rY&yiHmM39$U1ogbNFRV)2ie;=Od>KIYYI?lbp{QaRE16@?V zaG?H@z-f5Z=bT{3w0k~yaF>zI%l?b8U<>N6JQ>dzGuXS8<-8vq96ivrF+uimi(a%Y zRkr8h0x*UX-)0f3N*XUeJcWJBZ8mnGsT)hdHN z(cOC4~RJt){ zC`{h&)B_s8Tv6Xp6H&}uK}h=om)ejzEC`mzpcDQA7s`1e0xHDyI<&-@B3TxzgaDt) zwutqClK=5}TN_XQhnxtB;j$Dd#RDo~A$da!aKk4r1usEj$ZPfWg{!mIbZKbisb8qF;{ z$2=KM=5g8ieDS(sr4aj)FKY(}c}Yez+M| zNo_)2ELj~-%3miE|_$iY7 zEA|R{`*o|NBG-a*ln@%%1@pu%!&C+vNbP;tJ#@`b_9M-^Q8$TX%w4 z_YM&f2f#R0^BS-}#a{4zBCjZrX&^EpLAO`&eUSiqxc0K&wX$dhhH3SyyUyW}-K~j< zxno;|lzsjfB(-ET=+vb(0NnNUt^dP~>peefCU%!K-`E_t{eS zwy*%3tJIle4)=yn`(wRD9#hxt2Lo4UQ0Em42Y_I^zR*sT{mAvx>+#i$<A|(d18o>~fIv zswVhCwLXYuui*nv6ysC+r!5x}E$DcEwMKI^eBBqR*C;!R_evu&9`E5j46a5<_B`32 zcYt7`c4cG0BLArub|NRgsE+Gq4poQZ{(wsbUha1I0&k7>in2|8Tj8-ZCS%4n5XVl3 zVqJH5M&Z$EEh9lMllP?*h=iCzy}G=RZQW9OcfDt-%EP zwWNPyP(rPC1-4%fd)~bmV1PU0_yv@D;OK_w;Da=X?q1u{=fOVx{P9l6eDd?*h~}V| zedU3DcKym_!Nlt~yz}c4wVP(X^!LLEl+RJ$T67|w+njDc(tg>jSJfNwE<|~j&>f`T z)SZspZ`ZObYJ0M9S3;k>^(3$!MOa_);G~%dY(Dc;{k2Rp&)0a}aeBQK5otNi0Xj8P z9u7pGB5%mO&p&FVOZcLQ zv3=J!smY3rcJQ_{?rxR~Szb~2Crlrv047l+@1rOA$iisLkklOhsw!*F-78~VJ7Yb( zm;L^nd3?u?r8_gX&CKKP-4cA3SS{3@Z%c zm(;*n#jFSd`Q(onn)AQeIw7-Y-z|QAX@t#5DhphMNexww%9Pcteqq zW7>>0nNG4ha1}i=n{j3VAvJK66f>tK8!l8`Gy5ZE4B{!!zF_l)PffWdk2IpF;~>#_y)VNtzG&S!dJ%Xkd0ZM zpi%X8dl%9H%M&g?9VKJ2ictk3*^K3umIvXvCanT1M>6g3Xax6H%@NRQn{ClH^-tFJxO93s@7*6; zu_5k6bvMpXQ8B;e^pJDb3XDsI zRBBk4LCZ_xz1-!3k{p$s#zQetxNM#)e1fyZ(iXI&Ysi7Cf>H{BB=zS#&dEoP58mwfd?D6Di9}W zip|Y*ip>lmFKFNTH;zeR&opJO{rdam{RyDH!JV!gyR&=j8+~GUfcU77 zh4s*6r-Z@(EBRnr{R>}WG1=b|+OL=8_;mw?l8J();orH{unJtI%g(pJ0z&k$epHu| zfgV?Biq3GE*Qy&l$P2Ga(|}a!E#G>dQIj}gey*Sw$Pbqa$q{?kQXBgf-`jq?2tN{W ztffX?ssMyhd%OpibMBWr&kkN;CY!kQCiZpB^}oNr&Eb4_$n`jVGv+gj6OJJxbr_=# zyqL9iw;H`mC9-(~VYVFpwL6RrWfl*pmfK^8l7);%D5(zMnm4A*#Q9q>;BXXQ-n~ zFDtHvtNLmRI$3Ul=lx~Y<{I3annG(V>_#u@ysZ+xrLIsupy#sSg8#%6kNS49ipE3Z ztnsL7a_YEk_>!8GKeM@>>)*F0_*F&g8Q(l8OMAFrP{fmRvd@|$*O76N4#Rf^YQx(2 z=RMFp?r5Z+_k)od#VFGuy+qi*HNw%H;!dAZW+#<%J@>)Kzdyn|Viz}&@8ko0BX6GJ z1&L@ka?IcX!}xBTVnmIGqSvz?pb~N%MT?Mb4re<#{h_9qcl?b`X;a_W>2sIMUGC`W zU^3J+p;68>?)WzAWQX{I>2dIh_mQSpb2<>)Mj4A&)!C~#r@frzsyP6JoVea1!Z(U1 zH1^f@B30p11 z@Z|ECaV1$VjY^+*tV7Jp?}!>CMQ2hlB%9N`DIp5CbJf*r*gRBsMHtK5)JAhaS^=S? zHE+ud>kACr$B&|aipNy+Nw^Rk7{)Dyd9c9K``W2#PS~t%$ggw}b+cs5zRAeD&pbZ* zspI}+K~mYL;!iz_Zu?1E%lj~37!H3yk?iTe9+3$V?0`7yh1h_{akM4R?(8%BdwlVs zr>2XVa1q0t=a1ZcW)$;yQl>&1r3p|+1PxW^FcLj+>T-y`u&F|8S=XmEyv+P;(|On{7&uhW3Ca9yy2?98O#uJp%h&(J0%!zPX&GpbX$A;*7%R zAL`g3x3$AcM%xXD_i+I$blFAdg?GO(O|U;d45u!a+3C{Rq7yD4X zt*{ez>^nCWPl7<}R6u`Bw{_P9+7)E;1-V`JgS-9X9fSmEZ4yB0bCKsdyDt58%AHuu zUc6&GE)tj2mr8zckhEHosnNi2r0hl<(H@@VIbEHxD8{x#sHV$o@*8OE&~!*t+J}Zg zo1|+(kZMKD*^~uWElnN|SkD#j=F6n^2+@o>@hTr)nv%k7!$+BN`0LMOMCBo@jDVo+ z^_yDx8ktIaearT?ZlJ$J!WTy(r%vtU*RmsQPH`b!^cVK|%CeR{@=}hf<7k(I6O*P6 zA?Mk!iO;Tf>GidHgCoH974}rwxy{ITWuJ_+&1RzSC`gypSef^vQRQOC??1Z{zI-LP zL3ateMCV=0YGKpPRiRIPP2(XPJa$Xx_HS4|i}9>rJPrLJ&UMTV6J5x7cri5k6{(68 z9A6rvvf8vX%h~&(M~qE&Sv?= z-5h7_Q(4sAT!L16Eug3K{!z&=5&n4|&U`Qn^X_}T{)lVlki{W>kWrI}{At;*cfAA> zqTWLKzem%?Q(yWtGA?)hv8pqZ^rTVbA(K28H&{RBR1e)cn!RY(30TKEX6_>Ms48ZA z(k!!5h;B3QAXTwG)!wC&7D3$e?Ox5Ke0-2Lf!`-Jkud>9MeA-dGj3nxLS|v6vnE@z zG_ileK1T+IQF#`i>fqncsHsJwWOy`8$!>;kQ}uyE&naH|@#e@`Q^r%e78~)?tX1bW z{oUs;UUvH{v8b%loHR|IhfIcrd9A%Sf|uI%TzlLD?o9E6YLryO3TO?W4YOJv8epOL)-*Rxg^jjqkExF zmK~Et2QN|I%*0R97*5i3^g)boTTqM{jZ^e)TJ!^)P70I9?Dx%Ah6~f>lLyubdcwW0 zp$oCE_RVfC#WA9JdnHfgnS$-hyO3NBBcIF5pe%fVCh7+|R{9Y9zL)X_U8dMxq_-}K zvWjco=xf_aHW6MFwDR`Z@yACnfpi8mVkIgMufZ(*)Xm)~cP#xc5Wc~AC(|`H4`A)c zisH^8lvRMAzF3nQIF*1^SHn*^i-MS6ke`wLcOY+jp5a%cdE(BgwJh^dCKGZqd7GkJ zT_v>ukR5%>ptXp)FGTRC!(ocV0s`E9u|OGTC`RNs`cF)jgY(U=%+Wmg9wezc*wH^N z8ru^1lchwi@J#aKicWg{Hpqlh_NR+h@zq=US(|>zEaaXmn~m;0=Q1jC>+4*8UU*zO z_|e?%C)ChI;N_KYANJyB=e5U$^RGLP2}^%9p~*`d_x4UdY6sM9 zog*buZ_lXND14(7BGW$|8>p`{B|NPRjq+phOdJ*piK3sN+es-r%%$PK%Ks7(gGR>& zl4yMZLi%l`IE7w*P>?t zy0+CqJ61G0zut*V6X{~FbW4p4wZ3N*P$HgQ06*Is{`TF9!sORVywxG~z%Zq{e}s3kTZ&YWP{wID{mo>GEC)yaQ^^&Y{74y`HvyVQs->eJ zjEV<&vaKBaRLoNLp^fUJkDFO{$1T$)-Nmvqix&bJLvI+JdTo!UrpHl1xY{ky?A{hC zi1nJGQr#pT=%TxbF!p=kkxO9Y`frSZ@7;atd$qTZghFEls|mJcLI_5@?%C zj?yB+-u07 z=}haz1eE5XRN|~%-GeHoFP{4>^IQW5@|uhoPI(-fKYotkvu5!C>Ej5$c^!2rxU_F- zcvo}|0mz%h3zmhwCxRZ92hTy+D3>3jfxF>4L~DBuKF^HzKBM0Id%_78Az89IMg;j( zb*F4df>{xV*PT4XNUX%6%S`*e5oc0Edlu{gbqY+B#s_JmOoNJ39`B};iaU);Q{p9; zvQ9Oxr!v0e!qRke);jB`s0PhfJp6iI^sFgaYyy9IoSjlom@~-{KWr4p4sxa!4Ncou zAn=sf^DVw;^bcZ0p=MLgJ;G0PZ012CKe-b@ro_UKvB7S9psX@ZYyG=Ca1Dk`6dK_A zKS^TUmFV3DG@pyARAT0_?W`_iKinnUaXD0Te=y|h$%^DxR{XB<4@gi0OREx{^rJLF z?pl-P0(1%N2v;5nl>pdiU<3Spg2r&%(|We|^6qlQpRH_X%?o`97}#kHtQ+-WDEGYl zSHunbDH_~?G%h6@kqiO&;D0?p&2H3Z9cgyG2N#Ab?8Yw=gZF>~IzPM~-{B&KUY|F5 zgOCaemvhwR7Z<66o@>A#F7Lns*x>a&NOq~dKtfjha3bMN8!@(>9t%r%#Fs^emDR}P zx$KzL8S09h7gSfqQw@+gBClc52!lM6C=etp|BhgNR;=-B*Let-MlZlBtR9!F5b!uI zE~x#TMVmy?jO;k;dvZ+ukZ8V2gS_9(a#FX%*`Mhd=yK=a>BMuH2@htibP>x@pe&TO zyUa6{^tLrZ>Wo^?oufmztJ!B(fwe5){RDdbn~9u{>qY~msSf!Nz$cx4!Gqvx)1&LV zh=LifM0(oz;|T!ycC~?G@b2~aO5qk$bgz8P`G?$b6wAqqjnB_}c=W4a4h`bg!2vPw zepQr%Ae7mg=FE5{v@4x;>2RbCnN9b)7eslvdT{gYNqE7dve0F7rv!2OmL_Y!Nvtws zHE@1od=t@JR*M)BS!xlVKwYF*5%v}``Xu|9<2hIt9SMNi4A@VKLXa;>{>l&<4l9j7Yt9-qTT!0nLD^|8DG*(=aQ(dar17@bfi#ZaE2E@r0eprdU2JdnEoO zAQIu`-%_oVum75IGVReOXikNW$IE$u0d4#M&%`>a>a(T2A_pEcE(yNRTiP42{_QSH zv8C?Um%hwQv&~FdS@c`u^G_p-2p`3JMWZd_3TeP-!>Ck;<}vkl#9lCEHubtHMk6CH zZtIFX$sv^{lT8{MrhRS-auX8#VFR4aaYiJ3xgxukdgVjXpR*hXx7>1-KI=2cvMkuh<}M}> zQ*%pSfNq3E~R*e$f&2u9Bc&F|joX`B02z^iDYbd?2D;eB8k$v(=xl7Lj$ zKfV9w?<24A4SS+I|5#+^X%43bA+%|v2i`K$wiTj>naJ&~u=wxT(0ZUITdNI;0>gbK z&N@ZLM1foGnt`aOtdQ4kfZ2j%8^~cCFmy6cmtOFR{ygqsXv~AibjOnArTf5Q&FM_m zAl-FhXF~y1D7TIuP?5a4P`8cES>w2(;M&Yg#mKVrs(zY%5{6scM6`I!$ttPc9q5eX zJtiUXP~xoj8g2vUG7l_O4E(9}&ZTQ)CR(_(%lb5!%5=@VC)i1pOhH?KiZeXN6JOT6 zN?#Cn(=j1RqCg}5*?eX?+8APjOP#c)4g&mIqZ46WuULG97QZO<&pK_W>+8;h&?_i` zTYhZmJH%r_)F@Y&a2ENpF{$^FCcmF057Zj&pJ6u&y% zX-GBc(@rW|C+Zsyf{pI_CT&`WM6o&5EzzBT3VG@ik*IEKmw= zu5|qYsSb;jnca+kSLH7> zY-U_DS{g3tU*S^^ev}7MegbEk$UOu?lMU)?o_T;Rd)oPmx30h`jbTGnE2ay&hsRg;tpP6# z7-`o`{K8NV%AJf$-M&oTg-l>^=FTLzh%#=`sEZuY!ocvy;VZP>R|EF+AE2sCDzfN*9_;= zTC1;@?{=| zE1Ca~s<)1cqj|!Gvp58o;O-8=-GjTky9d|B-6aq_xVyU(++7xTm*8;s{oQl!cfLP% zdZ%Yvs_LnpGt=EqwLyh>@{-Lv{Bqk@(*L4As^I=wy#qAQyJDDszjHSV?@rs<)+O(T zu3gU;I1^@Sp^h}v8pT{XEyevIjUOHXLPv=!lufu?bUo*J&-+f%#;2HIUh(g=b}PR# z@szUn{uhknA`x1#de`AA*}6}(f6eUh4}i>c$n{)1&j;@7?{F3!)`F7s{p`F=%NAAx z*74XCnQ&m5R}A)x7$CPKU@cUjj$}{|AQsTZQThmV!VEZ-1vr((ZbKAgy4Z(N^*1_~ z#jis}lxXl=F@H}tenZ{<2GAL4beT&33Q!=1*dP-=N=KiPdE9}_J%B{=K;)jgj1Kgu zoK7LZDLH7_5r+Kbbx_zn{vyjQRML1xdB#-1V+Yie{e6K#+WYp?z8_8Gw0+C@{r82o z;!2QR$lg}hY{W?5@e)s*S2Ni%+Co!*-clQHdRw2Au#@W^wrsy@t^^plSS)7JJ z_Ltm4ZCSS?+Ha2BcylC^trvG)(QFpe1c5*_cSev-(ai!5@UbYrWBbH0fqX@C;9bKu zthjt~Xk)|^Ufoa-z&W{8>x)z`i{X`-qr2T8pxKPr7pmAfdiE@55-Hmmc+w(yF`-g5 zD@R{Y_%d_8ynKF5*T$BV8EXEJW_ldz6&q<*TjHGgOTu7@b32wRC)4&Lhm(sWLjag@ z!HxlO=j`EO9Dk*{QnC8{^wR$?!`Za;~iYkAqyY>^KZVg zdS0cPu5unmlyyn$YWJU-Jf3#-1`1$)i5om<3d(*oNhayrS{XbZJ3H=`eFF|Pma6C( zr-1Jc)$mGUdr5wr!tlOZYIck`st(Xk`4m(0`HbIlwa0tf8GRPg5FvXseHKT z)pTp){2#nLEme$$lf1=I(Acm)wup8+qf8S;n!vQXA2Scu=4TRD{(QH?MTrJt>o@yT zpSl8aFTU9Co^i=s2S_g1S5Aa8&Lap&z2 z^^9`r#sU?08e!9Z*X_TbZH@|P3D10eR-;mJf;b^;Ay!`AbiekEUXS7&)x7kTb#Clr zW{6tw_O#Z~1%UgJJCkSpAgAhvdhwDcR1l|m*>RL4 z9oL1;1^dE2uU3Cle7?Z&_1gLCA^4d=_$|n*q>zoPKw}*f#{=K|PHrT!)28uTn>&Bc@w9>&n~^uynKt3C zAkqM=was%U=bT^Xb*U6@QUCH+GUSC?a=IW^xG7JYj56q_YM7_RpwodZDv1vGR1+<+ zQ}eM9!vU`TpbqgZI4Wh`i+_xnOf}CT0~W_Zc7|WaTFK>2#B>cx@smr~`&e?Mby$lz z^3sbtox-e~G?gx;=J4gW+-$}PGldRn)q^XIwhPrCy#S`B1q!v-|F|bgLanYeFr;7p zL=n!DZ$akB9Dr&IdU=2>u1B{&iToUk8wyH#0sUMrL)la*E&tTNBr8C0eL6P#V$E*W zAAK~?bqT13x6f|f!E%g^uzPw&f-GkB!1KSX3bxUM>A_QpC?B7ITC}TRXOy~R7 zS!24zZLaZ>F0=!?Q&EH$e+@612y{DRenx-s7ioh7Z zy0r)=vQWUgyro#7G%talbzQG#o1YsG(`nzrcJ;~*wkBRlwZ}Q!LN*^iKcCh&6;U`_ zUwhuKHsdhlOL#w+6Q@T~CO|HDLWAiQp|7AT6MP-KRffk;_jXX+t0GFH=N|YY=IMcA z-}vt#1s9(*L@8-$5r_m0F|-8s#`8(c!Y`43)B%AGQ*DiDq`1KLHc?68JlzRNFfBU# z=zskCg{PQM%|-2}hGCd18rbzgz0KZqKft$`s#4O;R1NWgS+VUCY5dSs{;XG;p?$?_ zXKV+vOWX5!{`bGif|_LVW^9qJzsSn~dYtT=)!bAO4i?2-Ii~Vw74p=}SsH04((o%4 z>vdCllqL=k4qt_gm8IE&lm;=YO9BHB*o&mUn=#nCN}UnZ-@B?=LotXr)mKEq>V(`) zhsKI>l%SW4!yS$;qYgg)N{veocWL}a0W-zw?bZg7VyYk`!ywGFq(TWZ78%Vv4Sj$q znu0@9@MsXK7~(=Fe-bIdZE2})vYjPRq>00Qq?MLTLgozcPJ<>TBL$x7m>8Yk_&GDh z!~PTXiVUn9c@FOH;($2{FgO@UP%cv#a$mF%wzmn%%Y^Q($l{kXr-^xzk4G*Se-E_j7x7% z=X)(YzS4t$#GlX!WTg)6gRC<8{4X7khdCt!5eoZUA{DEX!&6U?@NfTUIv(T*!PL@x*sqOYuN8lLA*yyh(34@WBGj=2 zwDLS!d!i5-PyzXj^f9o(|GSQsw+q%C`$PFD>Q@RNR2Swq2Gm$ZWs~igIUhIaI^n^g z!dj!i2-#9}NK2-O{9s5jCiz8Vm}AJp8gL``q!eZJT6rkxJ%hd6MjvF}5Z@vkpo-{2 zXmEU0Ot$4})K6r3A^gPiz-=TRQsz^GtMX887sU$xV}uTQloE^%g@`XFFQdub8$hSV z0Yt#86}C}2a494ePO>QgKo-toav)Areo@Au!JaU59tQYX z|MaBa4tTOsYY&nLfY(NXg(jGBsaxV{-JTXUWj4R4LPSOGvL9L~t zw8=JsE0#$BfrQ&Hh!4qEIvX__qkzU5DmQ3YM6|0k9306`LkSdQ9I_IXAz(k?wX_Wn zD?b+s=1LI(tRR7+>0j<>XqYw#L*gvFWh$F0O!ZOK`rNpU==+7aOZ4=TFip$hEO#){3 zLwi5+(I)6TuY0VtdiXIykcJX);Cw0#p;2H~!W9ZDjRNkA^ipxS|I31biO4^s0Xy%# zuKKl6091ZjeGmXWuucXsON`N`_V;=AducTSA|lHVbSYqH-;DKH_KSB(K z0|N@=UdRI&$zLMt^TR^OU~n*q%JN|$W8lxyaJVfi!McONVe2j;gM_3Al0$;0M65;G zF6)-={}P#3X+~)rAg)9YHrk+WEXTY>Z%ScU2s#XoY=wpW zxZ?Dr)R0d~$y*9mCr)~s(%(#(%C-JGR_<3CZU2JD&UQANH{Q4tIY@! z@W$j#=+XtFD8U|@HcuUSV^r(UfrSh^fqbTEJ_4Zau?3qUS|pZz56$TKUxjQSq{_#C z!}eC^TxtxY1xS(|69zbyldd@%45`9t{@1Ecc-D+@517I*jvJ0cLTM|bsf5Ym2_8WM zc(&i^zB>tr)QW@UCo~dBM4!r%K9Ly)>|~pr^#gYF7o}W=0WJvt`PhVK6&NQjvqjb5 za!tiQLcSxzQP=$6WU=Hg4oOOis@WT}WvAhkW+>3P?^WGwI{-JH0UdHL=#gHKo8;(D z#AI9V#vkk-BuDfrnohlXqaNU4y$K4eWanNz-CtneSDBmyi^7;OhsFO@E)HzU4I5=z z=RUy6+n970j*+v7c?T3PYA0xc-y9a^D$V8h`Lf@SFgtje7rj3TDvEhZ>|PwM}>Uf;yj#@>9u5kc7OgW~yZuSAf@8sx*FQiP^^+a*0i%i? z@7sR7psu#FWD~pUg1ryW3j#dFgYReE`M68Yxq#A!US%1G=~BPLk&P+4%@>KKr*E!t zZMfa_NBx{zh5g3N&s;N~&$rPcO72{=>*=@v!LOqT-u&|6wXYvQ@S?8ahE9XemxJni z4(K|C==OiiQsZ>E&xK$8JX8EX-_t->{x1j1h94I~9~foN^&PJ@z|{kJV_Tso4gZg; zSLV-;#f)>1-R^3cCWTx09JWE_UshskY#c9nsQWjD+qZN)%(@2?RU$!Y4YjPK|*Cq|2THCQ`%|GaJcnb z-^alZ_n7{VEzYUemOabjN220syJFL$O$T0!coSL65x;anQ{&-co|o5~u~FyYJtpqX zRN~*~Zi&ljtuR-|tiT^zi;3Z4RBX3fJl7kpJ9pKF5&p`+Q_nxQ^8>y+o?U)fEks%R zrxtBEj{*!7E-!W{)m>%^eVD~xR>sYM1VSLgtKop@^^)fmA6of>&N*%VYdo&Z;E~-Y zUpodF$QT^BW^OIAa&`$m0Nm-+mTQ)C%Ix5$>34zsG*@$yOoiu*>I8wM)H^-y7c zhL=Ue^-NTRYNVwrj%yR>G!l9;79e|lHy*>`H<|bQg7v3aOr+@c(-E8bJ%=efE|(uI zt5yGMtkLxDP7VVbZr|Dz9%Zk&{#7i>TXynk+B1GM*yR2C^P=O@UAIGLI&2G6cr% z2{6f&KNHF(>EUJ2llnHVt~ag@Xf0ggEZsfLVb0xo)ehEGG8=0)ubWxZ)IG%?r*Bbh z`{EsKq&kb;sNuo*uuKg@Zzkm3q{lTx?2eG(%JrPRa-q~F2n1~M8-K! zUA#*oI}C71@=oz|%{X_T{Oz}gOOqPm9YF;Fk9RmjUhf@qgU7Fg*q!nF_ijOUMgG)e zi6b5G#m(s&_uTfT@-JcqnG_4LHIlf5Lj{DQ7TECOXr5i+9c1A7o4NQ ztG^M?n&Kf`9&>l;&qWZN@KhawZS#@dW}wH)b(G( z8C*cX^SJUiQ5YZ60pjNvwEaWBb!|+`)ZFA`vF0wR>KDsgN-bD?LD|~j_gAS+YQdAC z%4Z5O4~N-tY0IDW+7o9&|IGfGXT)JBdNYUT%H(CF{g#W^&4?_O$u`{=}W`lFy> zu|uhAxOajq_WQG^;rc@Q+ZO$eZZ?}?6jE6jP-pjOV|ckjuZi?UDQ7bNC5sIh+QMW?50}Ju=kNJwBTg{xIKOv+XJ<@WB|UHHpL+c70AC zP@}nv)zyenG5C<>pcDE250B#sRS4U$)BEPfg-7RYUyh&pEjhDuS3A0CPeHlk!Kt}8 zIEFEfv0}*@8}?JWLv>|uaB-0Y^-sK1LwzsJTa`&~H_BrFf>8g4EL+N(G3UJa@&S6U z%|hf?N35X_S>l@8RQloK>ZGBOy=7T)PJFvKPz*CX-Dm{ z3i`UnKi5@OE%^uA5&> z8kT_FwM9?CNF)X+t;z7!uQjv8Q&e%eqZgWd$)KfPv%9KKD6jWG$3M08`JzA@;PbOR zx_?67NK@FRNl&tMPx7Os@Tm7`4-YEiFtOX4t()*eZhOTy2LB%^)ulSG*|eLx-=N0f z%f|IS`RVy4?~yU6h3Fb|GqW4Nvo8ZRz3qSQ9)|2XC#F2{B$m!Mr|i7Htj?xe7Jzy@ z{={fb<8EZ$G8-P^gA`giFNAnZfsBvqb~!>k9UzM{A>Y3}WnsuQFWF~a=RG?cK&?uO zv>)ovC(AEi09Dn?U4oM(#?Y~ns?ym z`B@v{;a0CpoN|7{=ZCZ1ydt0I#1MOpvA;rPF8@Tl7a7{xw0-4Z-R=qr-g;gByG8lF znE9jVY6H#7_$S~cqdZOIlN}??h?VR)trkKM5g3^r9zqu=tlp+vH3)FF(rhdV(qZxy zRH)zl2EdLun56hO#^(Mve=X)dIh~}40CL^f5gCS5CRQQOK&X^BCLXn+701qEJB7v^ zpB8||Ta&gGT>FS~aWll9p{e>2zbYmkL#sn}Buo=dK^bgUw>RZ#3(?r&(Xc35wJ@r1 z1iWlVpUZL(_=AG(=m@fzqeT-@qAzWB+^(OKcl`d;uESQWYQ!|-TpQG@tdw=}Sggya z5q+S7`>1>88Y)#TlS+OAy+kOGKOT{E$Tr8n#ktH9HOzC;ZQZ(mo0mSk5$(A-@V5Hz z@v!f0_^jJRN_%><{cr=;$i011T+H6 z5;HnhvsvsrHdfqGDRK>|C;sWC$R_7gnUuS>SqCfmoD6-aS?t|KK>&GFQQE99DOOq! z8`&WgI}Z;}S{XYT5io$=20mll$Q!{*IG86vIknvkX(r zJ5{bvJEQTmZ>*GG$uS5e<0CE0KxK@zwd3LLWI0(UpSkE=EbuegpeM&p&*UFfSjYLd zv?PURrqf2Nsu;?dwIM!R_0HFkl6mHmPl209(`H#Ux?<0gCLn9{G7rTx$35Za>j+4( z2RIYm{`&fvJw;)K!SNv>3G&#obtyS9ZI(DcN*!n!VM2gt7=RUA>4)sZ5T&BhEtv)0h{8xF?#g4fX6D}iCjJu!|Em% z<^&AT93OML;OSQPAJE3v#*ZJ%BjMP`hgKGa^{~am{x)!}nafKf}l6n|%qKp~Uom5r#}L zvXW{Ua#4uBGpD$I7FSM8cHvLJzdlHLPm0OdCiqrkv)O5NR^3M+JNdwFRPcu0q^R5R zWnQudm#9Bxx4UJ5FbdEbg!{!%L4=v=5FXj)2H3WA(T{o_rQAUX!^VW6Cr`Tk#_5Tl@YK!_9hM zgM;QI-yhk1cCyGAe%9t+m8I)HMTw5@t81<6r?-B2&qUC6lq=B_ASlq_|rEJuyfNwl-EZ|%Jv(#(g`$k zt}SHEPu5)iw_Y1MzSI(XNmanwFuIv+oGI8%6}N_rGLJy6Z~y5m)W^Q5``rU&4yf>6 zdA45~ji?x$Hm-?ZZ&jI_VaCsGb zWT%DWLm2WqOgn-PjDo$b-V|O4YdNBNf1dYGx?27XZlks8B zL-4~j1$w~gf@E#+%e~zE;@vYr6Yu;?l0p2vci!@I6XXo7t8h3EZ3|k`$tcz;s(?p> zHCeFcuj+uzHesjTV_L%O$feyamuFyjwknOup=$GlS8cV} zK-d+%LCO4V)Wv|AX;J-~J@C5=32gLJ(KhWW{PHgy_@-vk&k_0*nxa#L;9gpPJ$-aE zPXk}NablW8IZjfp#uKg?^%b`3aoXf?8g>df68-bZe@rNS)f?WTt?NJ0oVW-=0^{8U zHo4<3?)yEaysFqKd6wU}$gc4d{iCoGdd6Q6lS9AIlLLxJYk6m>QGvFEc0x;i9k>Pa zT^uX7TQEmnI)0-pdGX|58?o>ozs!H&lkaoZ4;KY+%3v3q1wZWkGSA?5+sZC~JZVce z3We0w;F-Ikr}sCscJ~x&iWu@XQ7VZzJKbr+mjZ^rwaY0du(X^wxNr&85jo-4qV>~9&yXk<+ zsn>XR^y`N?Thnz{$*lP02@_%BYi#{7CIiW5S)Hn>y|Ke&(jBn=D-&IN*Y7ZOcH>d$ zGX^hHeZ3gPRlHGr**pFAZj33bm@fBN;y?&TRLL#4PT21<1g!Bdq>eL06v%tL>F_O4 z7FTu44q(=*OOm*Kw5M7kil7qr_su7^CN)_?$p)FVZbb;~N!XKi+j!hYR*Ryv;^mV5 z(pdQzpf_W3@iovZNZN-jOjq_boR6|eEQ7Dwk`azKgDY9t>pqnVYgH zF9y3xd@DYYF<3Bg{wt+x&Ei{1&q@94KDP5Ez-mmcD{;^bfdCHw)cQ+yjZ%iE4Tv`_ zj&Eqd8OvrJVwwl4gK~>5@f|e@p$S;_0%*?{2vA+`WC8ZFGCN&Z*;U$JkSgb^3psS` z8BI&<4!n?}34pzDi`7K7YoU$OOw4*e`(I39E>SgMpm$e+PjTA1yX*8n0wPUs%?G`R zgIi5SPL_}mrjC98L*uV?m^Xt-ZPAkBD-U-AQ}xYA-gR+QW7_ozpLzS$jTEGkxb$>J zFxG;)y+EQ6I0#5s1~{6Xu`p7^2sTWNb4Wg@S5M9>^$e#RWGYo#6fg9Pb4a~f#qEJ> zQZzrXRkx~4WcT>4e0bJj8d`VO@Xuep$5(N<6q6jbto%ox)T)E9Pr{^_NB2&C>PU`B zjuN4Zt0uGW#1t#pKC+U79v%_xxd zLPtVvRl!EC5MI1=Fh`rpcCka{T=ST2owRd5lOZo}UG}F7o6E_Vf_I-gzpt5UplL9h zq#MOdJ4^qf+Qu*yEldnk{>7ARB)9E{N=(Int@d|uO~3*QAqJqwV$pB=79<|wHlxS_ z13X8IxhWK$^6JNJYF{EENVT#=+zw)eAbvKH8r-NqyBfxsRbh_Z!1glTeKm`jj%2^6 z_6uTVN1>IQamT;L`log2-3{#{9{;5i^x4>#C`MXWHT+A>2wcZXKp`{par+ z3vMYW;)|EI>4{p(C*;w&l*FyGiAuzvObkgSgX9!T!}yvUzepT_bIotx2gu~J2jItf z1(hjZA!dbu8(&~nX=CXxZcTGhIa%>aM{#2uWP^8jev6x-B#let&Xpi1;bO+c+Ru;9-pOk0)hmc{?E=^ z_#BNEql{c8wdON`)2QDIl<9R+zQ-b`GIn6aINb| z{bAAW?;CT_obz8nUd?&W3HD4yX4r988D1|re28MxxV_F3V=Pd5A*9==!dtlQa4!f= z(eOppaAH@tqLIBz&Coe|%|)rCiDAiGYhj%4Fj2;EEMcU*d%MBh@EV&ehbjJ_{R{lEO8sRm6@^*TRt5=L!2W=V{IK?Q<11f7hHzaTIl)YPJpBspi3p3K%RC4 z&LQ4b1UBBz$;NCA^h0Sk_AUpkFe6nv0n&}hR;kuZ#Qrdse{buS{q?`AuCpI=_FspP z(?qlUJ9L*yoZ9+QE7-j5UaDrZ;)CbN-eP6hTkeLf&_2R^*psM?UwbDO9=OrN*v5Ep&#~0?>ahN2^R7=M+r3k0`Nf)`I@_UJ zxf4Gx8;gM<8K2Or0!I5U2I*B*h&4$E&ia`{AZ>4-Xh>iv1khna*f?9f6sHz-@(UiX zVB7H7K3qp{^v8d~ZyS;I3rhezl0{aWrgDI350OpoPyki}Qpvhin$_g-Q++_)o2FWsQfU02wl3nPYGIp{vlVN`NkyLzJ zJ{EO6>B|AG4T(48bx|)ZKD_O;{6c$}b4A>S)8l#f1 zTpT1{hg{tsgM9a%<;&HS$`U-LncTqwm1%M&-8&f*9nvvMV#jSc-Qy?yCDS_e>fN6R z!}Fxa%Q0lf4aICt1k?M#o%`Uy=YUL2_+#g1fPm-Uk*Q+$4#jGvf7@PkEx)#N3fluM zTL+K$brkpqgCW?=>B~;__JKb44H$93w!Ko8P=4 z2naB)Nqz_D-WSv=V5lK_!f1S%4&sRZ10c^2gygmV=Pn(9ltaqv8D_=h{ukF^^~RRi zNff_p+V^Nr-ap@*_3&?H2|cA5@fRN|2K}3c!kJz&_eJ92S#fXVS^A1|sw z#bXE*nMW}Fm{6Q|a3$#(HEu?@M>2aS!j#R~cm`X#VnJNHViC?ce8?FAS$js+yc$ls z+X%ZNpx~1i?f%y3vSy0;^Y-t9CO;-fA3OgU;r>k%t}__b(;XNW6a9U(h!Lw%2t5_Q zB&vTO1OMmST=sx>fhj*;oziA!cJOlImXPr_kleert=k{PMml{wC9W|K!V9G+RB&TZiyMrmeJO zFEk-Qk_`F-i3I2Y-l?3@QJ#Y9`JFw0B{8fy4R@N8H4Yu4$$sL$mnFJmZX*#%E7Mlg zLHOEJs$*_BG}zqUOHxGr#=WELV8w!KuD^dj5duLpP+JV-cXZ7K_qU-PYoD(0ZAC)e zgdv^-$hkstIVGL?z{hBP(C6)2so3eLdU2e$^X&W=Kj3Fus#{%Y*0Tf3GGp@6EAf5& zGRg#Fv{ci?nT}=XG)n7*3hRbf{+@0f0E;LV}e6l`e=)6rk|}DGpWE&6g4}I>;Em(N>h*`I|Xp0^|W%~ z0%tl610Vr6!}y+oLl#{y5ELu0*|Wbp{|@s`eU50q;)Ctq+!0lUxs(&UN*}7F}N_Kdjs7+pG;Av%GAkL_`#YsXEQ*T%uuwdNR=VcM%r4$=k?1bfbWYC2<eI@60G) zh4AtPOJMV+tOU>^W7%+hJdu(Tu`x3rKuKF0M0jG(rifRA*`%c<`aTez9 z#k71_n`#tHa~e%`^%P2Vdmv+J`C4~L;Y0#e=_wcJW*=@Ql+k-wuxs&5gaGzYJ-Y~lL|Lot8r1$`e;2X#n+=DjlS$FYEQ-2~Fd zFpC9EMneYsvgSwk>pVE<)<0bWdQUZ@*IWhx*do*WoRq)b>OcRgT>w$Uqu~Zkg8##l zm|1@an~d>E5Db7VKva@9>((q$DpMoHmLv*oTg@T>3A+Nv>a+8z~(!aal z4~SQw@An?apgB>jwk7tI@cMsnawOsW4^E5sbs3}!m02y?;p>g>a$>8fw53~IAiuk- z&j-y$zvf$;mN7Z9H2|iK%CNLGipr1os1)TM^D)oia{q^xRt2(iNB~z_kqVh20F?Hi zLRJVcOv_Lu6NLKv<>qV4hAJ5jfFMoF{^oa>+@9Xch1qb+KQENQn$ZQnNIEFX0mn2{ zbuv>xRhp|hnGS$DZCaho9cbt;DIe^UrS6P|>A0YoRYLl*<$b`=a% z@ZPEWefPc!AMj4!$ron}aRIjEbsOhu>K0i8P%`VnWAIT9LG7{h)|hXo1Y>}r06au6 za=z9AmymO_)wzTrDD&?j=j#YA`olzwLj}w|nv-|;xvln4hU5l`x0*OES>7?rQqa>z zftXc^{hd_bnLUQ~2GHW2n@#na>i335EL*cz;lAyP@8U3I*?nI^#*zH2*DC$nS&n|MRNFHnioXj2*i2hm=pNUc0(18nkK%N0pvC@m z3)PTgv}#>S8%OH&UNc?ofy|SMJaxgPB)6}_$n)uXqB>_6PQb&F_<0oxYK>M&dN`!B zZH3y|ouiIQA148$<8qPzdSEJKa^%VP{20@>ZU;)>a4KntDWu-QGS1 z)$-~@AwRX+KEuBpRlF&SEk)^ph9QPTw&Q-ZCZk&W^_I3Xq{TR#k#_w8^P~ zlzmOGwzU;Z=6JdD&4VR_OLzwvhGC;Gz!;TifueNs4|Q>{ z*zD7YCDleNA4#H(pWeX`)W>=owDd!kZmEx)$e>%BPae@u8K?gl;9}qgKrVOLNE|Q({3KoE4_(EMrh1Sc|<7`zqo;BmRVRYqT4pE7MkQTf{d6f1we? zoe|l~_b7$7;IF#1DeyN#<7BJVheTUxKyx;yK6Uz-DC9P)G28SqQ1m(>^W~0}tM3jq zhC6m=>W0q@!{JFSa79KpDNj(C_Gz&KD9jI}Zz(VB{d(o0^bV=Q&>6oSB>KurM=%%= z8jQn&I37$8)MeixMb;II{3VDyj$1|h){*hy{c7l6_84n~hy5OFQ(u)HhA zC3?|HS(*bTGy*4uQ!Qzr$0f8xEijzXtA>-p=A{W-wN?pE1H#SM)tN$mOS{smPedQR zSN02_eH@I<=rwMUZQdcrRq08kM3!PW3*8IclAp&`(2L`a;%`=F0=slefV%Ik+49mu0Cj;$2sSG0 z!%ogGF1GUTUGESGUxk%>}aPbc)V2C?lQv&}&M0A1q*U`$8mW z6}qZ%@bl|tHprb3on{4f*GdfH3NIEDynXp~CMAzL% zT7-ELF1#-n`#&HeN*R<(9 z3r~s-Ss6L!FO=-KmnEK3YV|dRRB2-{q!hyPx@838=B*V7dxpVN_p8>T<8^Qc5|5+K z{+r0chuYZVM`|#GUUczcEJy!MrRZ4ulknT+6#*N?fY1ghO$(h(msr#a(rW*EsHX`2 zkr%1Hz&}>FW^>A+qM%hNk1S82x3Gee06rE#}Xv!SyuvZ*>}3c$H-b^j11szh$zJBxBU0&m&as?lx> z>)3o0t7O$TzSGZ@KVf&^{}M zc_FuLWQnnb10EcHtpB{k#ax1FmTno`e~YzH;ve|^KsUJOuEFKAc6Fq`RvkkYI@~!p z1hprv*XAiy#{WFEjWJ}CJOx{$=Z-PucyqcUgHn}ttmHGOd-fh5NGfdDzlcbeEiCol>U2f2scb%{#7;#xzYPzc$0wl+e z=y-e_Z@sLy@ZLT7R0A(f&s-vRABLcwMaoM}#`<^$pN&h}C67byoP&!S=L}AUI;q)9 zaMps=Adez_$CPw8A*jt=ntq8STKd~-&CGTOMm@9vqQSp`@)Z(lFo$@ZAeWX`&h{`D zDn8j-%H8nGMk~%=SzF72$sW%>vPJWzBy0;0-F58l&9y8$;Oc5q8`PD+vpd|4Kh9P3 zbXS)vQeR?j1;9H|XVV1`m#+6Ir#?K|6!>WVeGJI*Z)6T?@J(oXzVHZLM?gMQ(^@*wk=-x&|d+kWj zXF1w06Ll6ahEBRsnxkb4L&4tlt%pA-faec#kdh%skcqM0KanvzG~ktltV@uyM{F{OA zsQt`9I(FIV<}N!SCeYbP=XMsv{*2baU$i*Yhpo3fh{7KO;fsZ1)Q<^1pPfJj-^Yqqy#-u@9M>d=PUSmrGVE6K^ zaXgxFd`#q8&AUpG(&_1}+e4hXW1jesr+QCG#~% z;tdb#zphhZ>U+_sm)d_Oa(p$+4Xo{uIM#o|CeYie78x<3*&pwFJgQ>8O zf~QrhXAfL82QX!Tbwyj|x>UBYcbMKnL)%@W9zY=P+w*lxa8_^8kCT7IYS4D+pMVVP>A<8qPPl;*u||@gF$n#^r9($&5!{RWmFlQKT=DBBJ;`47qLedr@gQqD zrM9>L>t-fBSYh_p<8wDCaTkUkBEsz0s^DN3VOFeyv~UsMB*Vca8bit(DF+(OEHRS0mR}^9d00Kl7tTAgRUrsLN^Q8syaa_%yn4KjfkI@8N&#!aCFuV z8e$W(ewWQIz+r5dHUVx^t!tOVF2td^&IGFaqP{qvE$T6us4{DsTzaVD zq8?C^RoJ%?ZxGPeiKR;efP0h*rhtF;RhuZ1QaesMX|@l+V~>hchFDxCARo0D%Y-d_=Dn$vd09K3m#VVn1`y;13s@b#fmD zcYJppYkEhCJxgB>EF@{F)20qV6cyyJJkK=!ITBppK%&Hu3pXZ`qDCc5AY;82mW#-& zo#+sjuJA0}qly{{O~zzts|gbgp2L_n5`?}*q&h1$CK6Zb|0>lTgwzkuvugId`d_g~ z=^FxMi3V{@u*q7;_7EVN<(N{a3M^Z52{3I%X6z&eu~dcsOE{!5viexCzI_!+k*b|<~k{sZGGZVn`-_+p`3bVY9+Uq3> zB=H8TL5>P*WCx8M`&tMHJ_|H<{ofsmQ&D?)rhzjQVEm+aem_(;Afcp-3!bNj@mEe_ zArdLrOOc9^f)H2xkuN!gL#Qo1;CUazYL7Y6r-lyaUM4)lHq8E>FKm=K>lDi5efV?n zR)$DG3?q1#+v!!8o|QYF3L$Qp8JtAf;MrG0?8}XHmJwmP2g|z)qmtH`E7=|$7EE7$t`0F z%6X9QCtxY`f`vIrcA}c{ECrR~=Sc45Zf9jw!hR#7Qt;EE9uKD^!2~)msKY-)c>lQK z8*+xapP+{6h7g(djnW=HfVl_8uo_{Gpn+u%KmqG=0$iQmTkH&w@KpMFIv65nN=`%Q32eUR2;d&(oD`Zc{Kd66V($seGIsm}c9EB) zR5PZ;fB%Q8w+e`(YobMQC%8KVx8M*w5Fj`qxCVE3Yur7+-~GQTmcX~nG|r�V4cw zxb0Ys{YF+Zl;geh%#FGTi1DP!(ejd`AId)t4!kSO`i)ouWuhRiY#m@N-ccKctCgyZ z*N&yaHOK?PV>Z&?8y;pc(jPP->Tp5~@tlq&ts8vQR()lPia`KBrDj9jdn%|w^>Y#| zo~Y1qY0zFSlomLp`70&c{cGXmaR|!#6-Qq zX;q^29T-csn`UF)R zG$`NIKL&`^n;3&;K+aWmAR)e5v&^UgK<0^3%aG-Kg$)Q~M*SYo$;I|emX4quBluIp|I*&FJ`!0IiAQ(nLVPUeBQ`$E(QYHZyDp&xM{~AgtBQ(rYte{ zoHBU&1F{P>OA_Nh?GgE8{;x@z6QwdAS7`x0jC}skRl5y|ACYM=LfO;$a8`xzZ#Lnv z?GYslREU4qiFfGL9tXIXhCpLC_L=Gfs3O*R=Cq~Y?849AcKFA+-q&k`)`hrqgMXZo zlF$sSqUARaP}V10~*7Tiajlty5^W18g_M5}dZu-FatC27Yb zEVi1g-@i$xZkYxe;P;u$rg`UFnHCNe5l`0IOIbUtBKCY97G(0baOK9N`$=m@?(!0) ziV|faahiBX^vUJ!;?chCb!XAuas;EO8)!F%VZ*=AhFsWE8v~7x>tGhOSBJa%cUPrR zce?DN&D9w;Htw$a1UPwm*>IJ|eRIuG^mWqmq1B7ROKe|5hoGM?DhxcpiYXSYPY>%3 zay<&b!|Ki10Ajjq52ZPmY1dmhS(Aj+)Ia}NlLo%ekclrR-OZ2u>%3>JJdirg#rAI` zZr3u6ZasIofGU=swMobFAQK$nz{c;KH^~WNhSY!SHq05zMY8dtq!waFTq=awli(C3 z$T1`wb*#h;r^*F!rL|I+dL>M8v9YeYLgv&xNHZ$&M2D)0mx`-5mdsq_zE;?<=tej$ zmw8zCU6y;;UMSDc2oOBp&JADgE}PB-T^c^xdkWxwCrY0>_2lX3dGS<-8vB=hL&BcHubTK>?P z#8?Xv{A^sJIF<9NceJ0CC8>9_t1x#L?R&)GV*>(hjZ)d8c9?1`_lj!1y4h-3kDrmsI;j85dTm>C_Wo z`MLQ-nUp?9E>X@Vd9XTY@EQbwwg;(BWr_$G+t@klYw2b!R5!z&!dlRQ-o$;I!$UGVy9zwpzc!+rFbZqci2fF> zN>=sqF`<|zXCuyfLSd}bXYno}`QvWJmxLijQ;2jJ^?5N5PS!nzz&C~GbFP6m10>{x zx26P*C#5*4A*uXnW^%J!!1~<6PvYF|H0+?SD|yi(KteU!z1Oc?L%dt2DdD3hj&%z16*h24Jb`YE2mYQV?(T%FTOqO8(b@ zb0Z941D4iW8;;JXJKH9GTA%_)kAb3-sBQU9$$it_4PJ}fXZMEB;I|J|10y3L)uK96 zV=BAc#G~N1>I`%5gHZPET#EW48;QlDsfgp}d&)FN-c_ldA#eH2vi0bJd!R1CGoE`~Ea{?u zp-@|7RkO0ictG&mB>R`l6*+kaE8%$bvRZQLAKw!6)4i$41aFdNS7eHc8vD1J<9&K- zQ{!BtuNu<48v#Z7*|7wKqO{%OnkG}F)3H^OoGBl&^|Pz-v68G=%kDwfQ0szksj6CW z^@4(#j~gxOvyYz5wLp8yWuI3;8LwMO)90~oY37JUZAERKH--polNhenQ9gWyx7J6Y z1y`2+6;Ez`{Pp%EWOXE8ZFkx8jZbci%t~Xr%le4Qo>KIE8>jipv z!nUhfktyuL(`cdSyTtuFJ@g-nymzRDJbXuXlgwj5@BVBb+l@V5u(1ENu=icGN}5bO z)@`~Vk#+x6U*-WoT)+%ug-xLcp&&j}T}aX|eAHWNyvuB6KN39Ln@-yDGoV5pwpbOa zd!n%U79{m&Ap1Ds+_^SlB#k!Ed39=?Q}I5?HO6UO9+LuE&ArBPmwy#MO}US_2W8J{ zJ<_`EaV(KaXD+am_o5xA+eImm(<&mj`pExrV_y^zZ2^YIYCHx;D?i2YRgl|PPH$pX zKVjeO38b6{MD z7r*Jg*8%!RpbsaBFsdtgTi{w0qY=y(=;iuv<>q~+3TeonpPo6;8a#CJVR4F;Gj7pr}u|Fo9%A&_%xyif1J%B@6V%$3t9T4t$IXN>HBU9zIrE{xF6BC7f&Q|CVchP z?E-R}3bkg8hhDgovUa%TRY?VblxL?beAx)>^i|tD&l~1PL?v$Id3udZ7W%mn&d`fx z7GnmAUBrvTrzHKPrsCAlE0Uc0|Dqx|e7$0~X#hMn47X zmU_YKz|n8X%e1nsXcONNJ*6$=Cuas%MV$6lZ3Vw)277{~==ilQN2iY04(#9nV2vNm zvipl*FthIXmeTn73zKZa%htRZ#%Y*Mr=?!a@29^_#QP;&7;(bYhC4@H`TM)qXp&K| z6kceAyU~)}_t5T(TfzeD7$JZ1r*rsWsbchsEGmY?-rf`BR8`Zxpqf#x)Q#CcwpM+J z`2Ec?wMF3gau}sn4VTqSz}?%o77&w5WMd{o$l@#FimO_SyF3Wyqj@X{eXhKuVf6A$ z@It=k8u@#SzF4lkobpoRYU9eYfbL!Q*@@%eR!QgN$8k4{D}9MShm?E(I*xnN5)Mw%5@2cI8#ev<@3MEUGihw=~(llmw`?Z8-_oa?AwDLq}~)&yvb?@CWehZtv-ud z$#cH_U&g7gp41CqCBXlGmgg*`xGmnq-qUNw1EG$A4FLNcF=3oHLNz4on)uzjDB&;W z8V{e3^%kAy;@aEe!LW!lFScgkIt(|7<+NPL1`Sa(K>@?OaO~54{$>U7va&U^fJnB8 zkk8}0H?#`ovl!p*Mfux&kxUs_?-MC>NR5E9^1A+wgSDkS*gniqTnWOVP4_Vj17V*_ z!*+I7G*ePJ*0@nm(YLcs3ZV{hH@nRh6e6BZ-FJ7_w;1Lq=}`+WNdu?GvZJC+@u3{C z>PKN=bD=48oLTp#=CR{i!_6fwHx(~XBPV=p=xj>6Rp)l9y}BeHc={@!W{~;ca3cV( z!Yh7r)3+F^uFix`sq8u^Wki3zbYt%aJMOg1m$CUF73$7E5~s-CHdtGeAwuYmitRDt zPz%<&Tm?Nv9yo&cnXDs3CcSz`W|9regAD1 zZ5Q&{U$3AXrh~=5a_E$v-Q3fT33veI@xS$rXdI3=`MS;K%7{59*H>2cD-LMg=YQ;4 z6WI578!Gj6ZiQPHD!iJiyIZ#!m1eQaB#au4_otgq_owCK90U-0R^;Q7P~BL|`EG<; z)4`q7>b>kkToqjEvy|E~Y7E@J#{`XmEW=R7_vS?v-Ro>C^j-qNd;K+0x4=J1m1lUm zCy)B!oi;l=5N1V5?cY**)6d;*%>bQh3UHbs(Gpv&?t^ESz{?8E*{UMr`uf8gxo}<6xkt7N{K` zkW{`doQ-adO55uam)FhZSasd!5m3jQq^dfgnRWr zj`{WPqet5)sQFQQ9)D0OyCVH00G&K=UqEMQI;uG6_SJLgCl_mapIX2NA5gBu-|8^zQcjDiBQyjBv9Ju1OhP|1koB0)8b0xpNBmH9E2E%vmPK?m2~M*{e{zD&td z2k1Jib9Kx)x+WbwxJ46lIJi1ENA@LnOEN56taqg8LfXG7D91;#tx%C%oLQ*N8jzNC zrPwKvo8Vxdy!Zj&=f^*urllusfm!e{QCsP#_PD=if zW-cZ_Pz*B1Mja+Sf#k->jO1cmemYg zL%bU%R~FQ2QV`)K1ABbBjS6?dm z$2CJHWVm)*Owe1a(2Rs+gG$V{muKF_U0aSj&c)3U*&#lMh+U-_gS?kk6x8E{Mn^dv z)d9LRrED(1OG#m3uLNe_r$}M(r~ZUxWMW0$BjO_G&@xGV^VNk~1L-GG{zQ}-(S<9e zOoIdbRrG{`W@O+URs1u3C%iD~+e#*f@8$slg{qiGbp!QlZG(PWsvlg?JjSGWl?*uXT*C_RkWLvY zCSl1x1QT4^t6)bbs^f|7U;?v4hUb|;fV$!a(Bzp%2Vmm;bH@gW8M3ReG#FN9C@X$A z62ZehfrqO~h78makP}XTfVJh%Is;ub+zW~gFkbk?uZ-aoXOMOY9ys^_X7$Qck_0ZDc4bFc0pltzb#Tr}cZSeYn)m!6#Vc6II;Bhb=K&mH z6M`1#UNus~+zZw2F=9)*!9*5kvYR7YmRX?(y{oLx;jvO9Ml5QecNJMrjR2z3f*}Yv z(omUu$TOqB=owXM4w*VYF@7o?c)P`tqTU;crn&$PIKUWs59G1Hm*YWe5LCt>A>CEd zzx_KrL);qJQA@QZE@rsMUjhya$pbh3{rI$aPfT$7#PmFKIAUN}$ucsQj3c$(+rKO^ z1tQ=zb|W?an8Jw6ah7RdE)pdNX#(+|>XdqmS@@~Ut_pr(XovFiS0-j)a_NdjHYCJz z(M9w!BAKMMNBsNYHAny-z!po1Z<1)+Ag-mh^m|z;SD=WpZg~Q}GEpwkhJ>#=l4L-O zTAQvmqqpw*O9kj9O|fxL1Hny>iOPvAAg3#(2Uk}dF3Cz|_Et%&bc+t+lTCsISQv;h zA(?QYu<1ez% z!Q6*sKh^$Can4u}whJvX0-R1M={T_&S++K+s-JcMN@a&iXcU2b(>x?nBH?^fC)IeA zo|(8EeYGm5ynN7DBn#xBAGqh#~VzxddIVj>9A9Hc#g{ff=DKp~vJ!ODQ- z(t1hlU~X&?$`4g;5GF zHac5epcoR%N=OW>iH$i~DXUiJI;l2DGqu)6F~d1M-+mG$3I@JJE#nTycQ1B(nPhcj(PyBaK2-PD&}6@ zp5&TXkpGq@Xi>}X6T0!QqKS$ZG9ojRIl`Y9aC7R))Th>aMaS55$_?i5`?S(c9AquPb69pkqlNo=;Np5uDswC=J#&|v9NDiN$p&1 z-WE@-`1@pn9_7!Ybiv8yQlPPzuzu`mTXs%xdbVIj4iX_EwkWo-5)F^H`u90lm>l1G z|6Oc^-QC$Aadjhpo^(Te&9uh#BW+J-XM+YSFZU&5ui|)ZLZVNzMSp>!mWZ6TPj!o| zZx?i{Ce5b&Bgc}{6K2JI;QY&Bj?>P#EU_e0w~?o9)(inaceMZ2e9Y~#oo)8ysF&AsW}itXLQ_tG;4oy>O!#_wet0TK z^yf)(qqmhgb2(r6k{ia0joQ5MUG;P`vyF9L^Rdq^a`SP4FZEi}lV;30b4~?GSc>iG z`Q~xhV%Uj|Mgntqf6Hm7@PdMU6ssUhrRmpq=(7oJ=`}|Z+Cs%o~--1a;6RvD^OhB9zAlaecGI|W5)=9=Zy;BaS{KxuVc-y z?vs%{$$ru4U~t2N*e0Q^=EyGHu#;VH>tWmC{lfE2jjrfO-SvB=sAY$t)0m*=8>eTB zM~zWbyLI0AE~hM@C23z;XJd)q;6T}Y*sCn0VjcKGc1*l`@4mn9CwyG*$QbuicH>yuihzMtCRW9 zw?_Sw?1c(6g~^r$PrJK0&-=Czg5VaJ@OmO+W>+s#dY|_^BNHG$6I}RVt|`E5zPTlv0*~+gv(v81{RT3)a^PWF zpUJWdukhx}P|P$rn%0twIlIJ2Eh`96-oiNBCRvTVR+l{eQs(yQCKBxoPre#n=iPA~ z$5zMfIudOiH8%seFz0``nL*YB|djePY=5Q^|iTFaix% z7LPcsO3oidh1F#uNxUvm&CHb^Pe;sZq#w*^WIb(NZmPZs1RRg_x`~8bHxX1H>*oAz zW{=*QX`FAs(upbZ6;>BalSfavGnhXf+$6=n(q0*DN)!}6Irttm#X9(NW9-Tep7Ure`YH{U8jh?-3+oV|#V%&d`3OB59Yq^sJuJPCV z(^L%uWvthOt2r3yEY({kM zvh>aB=6CtrV&?VcA7=}`)&g1jvoj`SbL9qgQham2;%&+O<`<9C#tm=EC9CU{%?|%m zRNvg{zIO)33c1`bv&tG)8k`PK8(q{q=hJ5Y@5`Y5Y2#J<+=`V&#$bBAEsbdV)$<8V zJ2ZiZ>x;^ft-51`7=(SmXT*`a%ec~3qwsH>jF{OY;{ngWEfAC6=9Y!cvZ~~q#)tau zu=WjsS;}hnv2SB!mYo%vIdt0KcUvU`{jf)z%ObxK?XvKc9k*}cfB;G3cbA-zR(^^I z<{JlO#a5E7EML9>L2o{x&7^^PLG@;F5%koTAnbRL`YxmMfkUi}AgsdOCPRUJgto>=Hbuo6z z^InMUReLY?@|N5>@ysXPvjqTln|6bK1MD?G!if_5P9cT6-}3ywk9Sah5aP+=6{AV%fNo;-)A(We#2|?PucBZITO3aPT`8)R~?*X z+ugnhHZOuN5vM5sD?!~;;n4i&F6M+#-m0X4y*SoBd=_X)*`Hxn}ADt9Ah7* z=xB=34($vUj-Ia3mS=2&-BMBcm`3s5Wn!rI{qyy4wVt=Eb^rFQ^LwGiY%`MCoOXjh ziq1_f3sbtW=gkhpIgsv=S*_prVHm0>Q&S3=Pg_b;uXKSk^?#l3uK>2~{;^kc7(M?R zd1jjNrjv(mHHw9j*4@{yT|f(VmCw+;{vCOwFq`EVc@f9`qr2#k&+gEQ>mC@WuQhsk z>qez;Xm9_rC(>Hqz4xQ9q9VMyNP4F?k9J?bEmW6SnuA%0<&}+3;e+?o458HUBf8J!^GsvH zHyvWZRhBaa;Dw^UFdS034gN)|oj~mj^Z(Q<(^H6}X-sIHt@v3Dy?gcuOUV8ECK~pNpG*HJ1dW5ygCAXGEYOWG6J?Wc0S*TQ$&m zFhF)=EZo68!Js(xYvYoOJwA9EUlW};+!f4$=;jaYw}sLs8OZ^yV|6Su#Jk8>ei5DC z-%eleJ#J^4fu-|X=W97$@VVZ;%vr96CwYMONci<}tbNt@c7<){<@B{lF!4K^?8`_% z8--EL$;v}Rs-fmlf3q@#SjQMjgpps_8KKk)`l+Hl&#cScM%Tt_7Q4Qgx7S9`XB~f4 z`FBmA8I|$4=q<2Ik<`|1bwJntcC}K)<%+|(iq|KSFH&Lx60x^wPHrA|$1 zZ=d>&|Bb^JX_s8P<1Ht>pA}Xmrm`+yjPe0UGL-QNZkxO|mdH{(EO`0d zrM2b0P0P>cHI>k}?OS!Af_0;^-qSk8!MV>&2mUI@Pi+d87mpr)=lV&1NYN3=NJB}} zy|yE-9tjrb7`!>5PPMU34R2sSe`6%>Gh{Vb>61XYb0jl0ijKk<-70-Va+sF(4{|k@ zm#f=BW5osj>S#?%4`$H5#gSU}Z|?OX&}LON+MpUsjUBy#_JVSS+WAFr_=GST+ralH zk{`-^@#hM15EDIo&`QZW?uqQIS&Q)L;V8x_h8gMi2LOqjhuOO$4orA@r~KA8*$t5a z{t{P_9PBH*Twh$zdicoD8Vc>gTbYX_PY`oP1wHbBrXc#I_o)YS9rNs_tjrrwJ#Vsq zpBVa!pQ;h2Ta1l{8QfjF-d_(Brpjr`M>0w+OZ%6Iz>tEe3v?N{L?sw`Gt||uRdVA7 z)%gw(gxJcpXRXq(e+&G-XWr$&Wcz>y*hC<< zwzD8O;bhGpu0@m(BJoRB=wjE7XXgG20u^A`(Vh5tPfvi>NmSB%r4whGOz3NLfM!3M zA;TN7qc!BiHwc7R`XRXyH%C5qAqEBzgA@n>!xemNATMTC9o27EahGwH5Er&yl@D41 zMrLf68967VI=@Kdh>mGO=3Tvj6N^8JO=`gFRDbiS-|eRT>qGZyI3P-P`m*b7Y~x4J z1`v26tQ*&^=tx)J4QL$oGOuqWUm({O%4tLcx9zv0&%2FoJS^NB(&l^%l^;&dKfA6w zoc}q$*ZAp3P~H=T5_0i$s#|=VCo-YeVpK7(-^ZKusqpLZ3lW`QlDPn|TZTT8_VV;7 z`uc(aV4CNl4F_YC7P+j%iB8;!FTKNE85kVwC1@H5>gyLgWd6vmBmlKhBsjF?<{G3E z+1)uhSscttT%22;Olw4y%`g>i`WKy_Yd%FiO6G0Sz>=~>&UeHw(rZ&>=L??I0jL#l zqg4{5fz`HO*gI5{ak}yVJ|r9vx1MA@t~{I6wZ#QTHm&SS8zf;4#CJIB>n~5;_a86{ zJu{a+GHo)nIQLw#Miy7$_DZ3qAI6Mv|Ip%KY*>i{%lNs!@@&p=2%C9*^h$ntaQJ>p z(|Y6~8hc2wckS1-qtJPsiA6%+^Z|J@;!OnOC-x}=s&`ld7!rz>dD#^YE8Q zN1xMoZ3J7|%>A=+?K9;S+beO0mVdwX?RHzl9RsR1b~isI117JJC>T4LeQ_OQ)5IS7 zct#&o#Q7&5p^2ZwiFa&YNu^*LS@>33Ph;#N?_S98*jcWZi!ElDfhwx*_w{X-iU%CF|-=)cOXJ zCy4~AzN7A%!R6!6FGo8rk_;KWAv?hpxfZbWv5Ld){rq^N58MCa$8?k1d95}b%b~G0anG5N@pqbriSV}LZLHIiX1WB< z;9#}Y^;IZ8RzmCCH2SCr#WBNi@#!HEF~7m7i3)#VtjL{8{hA59Rl0p`c+Y?t3R&_E zvX}A$lA@$MV6)fKNyPItg&Z3z`TreI_S^pSooT|9c&6uDsZZIKq@#{JdHko4VT{or ze>Xad>FVmBO$MC4HG!8E3NhDr5w*@7VuqSSJ<0jSKz*`%ys(g%;XK;GA*INs_(4t% z$_K8gN}6nbBr9km#1stgN<krbMs9$ zUu-2^xS&w?Ib-_>VHeXhp*oFz1XY-{7i}!rT0ojcQQz61d!RPK_}@ApGz6QC1a+e* z6sM`vHio-5yHM_wGi0)-!krx*!M{lClT>ZKT?fr7MIGpkNyS#sIfyJj#<}u8K=NtI z=O^)9?uZu%=Z6FBvi<<)5700xwTh>vTFj0*`)aFI6Hmkc$r9$cz#}`|eo2WiqODM8 zo^Fuy+)vPVYq?~O6+*av<{%S|hV*1mb3sEx?lP#=q3t0`nbe|utD;XkqJF_7uzq^( zKRkmOc?eD;N3t~{F$gN=qBJfFnW=Q2M#D(d3xv0cLXBPv@%Fo$6Wb^tJ(<)#gqw%+ zyk~!wxmi6RBv+Nr+|^H5=|}SY}w1ikuz(qgxbzTn57P%zQH>J&W2K zyf%I|br8C}OQ}-k_lD_k$oz!>6`rM zW56J%ti5KF#?;Ux&tggSSX2j3(_RrG;@mc~K1KC=%6{qC$rYd6V;1LhK%PB2q}?N6 zqiZK~gTVL^MYmR4Cwm%6yaZ2mpx$p#B{?1_KaawaIX)b~9ku|`{@E|bFT2OfWsSo4m;l|2-w z{bBZ8EEH$(qP%U&zy4kAv`_1BWM?OkU7z4QqBUEVvFD|4YK5MDm>|T{yp}hm8@E+b zu!IozcbP4Ea%vF|MHf-mQE&a5Cnc69%CV|0qA%{Or_VW?%~>|{=%hs6hk!$W=5l5q ztA8*D%}ryu74{*3EtBuWV*l;%ix0yFc&uE;}C!^;uTBGD?}o9oYQ?G!D6 zjY}W(X{X37V>+$$Y1`Hn@N^WIL#-8w6@4CsudAlYFyR!DOBq7WuI#Z8zQl(ziUg2H zDn;CB45)IC{w%A$V!}{a!&!?|LLun=NWB08+zA``?^PKPo%LlmF;gezPO4Aw_!E2K zXSwa1Q7v1o$S5tR8Fq;B5UFAHN+PvrseJYpKkcX|RekLfL+e`7%ee|8m92wR2}R*x zxIk9!*Iaig40n_YxpnwnFi=m4+qP6BPFp>~l11vOT7BjQIr5MdYSRm~u_-F_?xT^f4>OW%(VR-Xi^;_&&{D@p=m9rYf?Ong2)6$e!PH2rWcuUPfR24jjO|ysb z`tt#sbsfZ-YV!~43#0fMZBAZ7z=y*+R*nwg)mZT}T7i+)HT2U8C)e)QHP0#Q`LzIy zd&cUkGm#LOTTJN_MjuXSS`_Qwz5~L45gT{sON>|6vg2|F@~@J9DzA}m39Gi1(($SCjTon>Q2F9R|Kn!-{dZB(RJs!2$Ek3^c~;QN z(m@nESj=H!!o|E^v1|!1!@ZM@7MN%gMz`SV=l*EwCY*ja-IUAe`aL%yw~wfh(L_4r zPdIflmNb*KPa&r)E|c-2{~uY3wJQ5DzCQF5Pdwh(Notk+Z=)!PBFwsAy?3KxJ?|m0 zH$2Eit8UoG`FfeDHv*Y{9Q5PH<&GO#pK6k`gp^{oX31Oqn2J}Hsa(2$X#lIVF5ORp zf-7IwoYTU%OK&H0{?PI&;g8gw38TMxpt5PD8NcgA>?R?pcJ&GLu$|~lkVAx2U58(; zqqJ}y@OlXLyp5jpb7afR^-)|fEbcn|EFW2Yg6H0X*xjo##FQ|`=vbUTDI$&`OVO!x z+?YM^<8uR-+d9oV5+-cu8GZ%Z16xyq}ZbLTn)8s)=gmxsOkhdqDj!Ds!K$)?CvdF4;6=>7rQ% zT>gBAHMEV5P6m}0vc<4Wao>2ZmAbHU@ZpONlo^)tR&-YY7YcY$;D1+@>`UKK10%Pa z47*9l5^OhO5=yYxop<*20Cw`+T136|aktogRc%>^Es}J^017d#BqH0sH+>})Btoe& zgDVWe!s59dupzJ*m;@D)5gVOzBE7KV(&zpT#*+xQjCIm5#7sg^U(TT%x1cw=VB?X5 z=4x-Zpl9G_0N<(RLEpT=GpmIX<-TVPvc%<&c1<56~4 zu^Ff-cwfiF<&&$LZ5rB|+ z5zK%r|0$7~;ETd43PIkcPTp6Z4V?Y)d!u`6XL0Wd=Z5(E zTtGxr(V1#~SV?p8ue5W3J7oKa&m&I+KyysWUiq%P7T6Vl8XjeyCwXpUld}P{m){V- ziTz=DEdi*Zika+!7sDgKlxCx3(}jxY2+{LaVguzU>xJvA{{(7oKY^k?odSXWPHIeI zQwk7nOF|^U@It`2vl$?CipkiX?kV!Qt~Tbzu)u~qa0munLLcdIJ9Z7f=ps zpvcI@9^(;zVqExtmX;kmMlk=|prZX2CQ?Y5|4eNC|1;{|cH({MZOM$B6z|j3r}W8i zu3{!_rgWLSLMjb6g_Rr)o5u(RR4zYoH5ygzNZthS9bnFL(^tj$+*$>3{VCeg!Xv{& z$poba<9M!|#IOQBMyX~(`Qp+uX+`H8eDV0z!zU<zg^iMJk6NREQ) zcf{&I(8x*>?dQDRO`MVT?ZzD_MALdYY0vES$!Cr0QZARcCg9a&^LYt%OnmExMCH&K z)2Rl3?O>0+V_mn9^uA!+C3J^&>skP*1E)8uQI5#5jbbV%2r44jY}K7n;t{S_SRZPW zoZUZwhx$$DJnyx$L0;rTBl`qNa72XLam%H%m(zKMz(Z7-`DI8y<;u#SK~v+Hz?~eI z);&Sm*)OZ^cO7L8a^89U-@di~>(i87riG zcO{#|KpuT8LH=E20G2-()jGkrPMJEd1GXmt@t^%6{13W<{eGR(_PcWxO52^xISi0m-4WVD5{^2Ez;+&D<4DSJOo6-J!6Grihv<&r_EFr)}^jB4v zBxeA|Cl7dCt@-N?_`IG1qA!;ew_(7t?=4We)c)qRVSTYA@%go`*ifMAvf4cqh`BvG zSG9H6H>a&Hm)Vb!l@)Q;DS!Dgi(^~N{XV11`fYvvHW7XBDukev8UxxGLSIU4iHK&o z$j)|#0D+WJlL0N0OwmFnx5Gh_qV6s&eqN`L*y-7^wx^9Ul_G7whXE|6nD__;^OA0a zH84lPo8Y*k=82qKH^;(cwXZY}UDEVKlUD_fZE5<1h!F`p?Ys^D+*XlaVGYqpH2b-! zB4His(7O?SI(-J6a2zNKHO9MH&Jo+x(WFABV{CI*K$>){f$kb}V~2GN>BK`XemYzF=6HKJZ*>%26Dwx!e_s#b=g2&CVz0e(UHXjrZ?#Rw1Y!V$maONnYNbnvTHh3N9`S?>oNWBM=J~w)nP956 zJ>ajY+<~0I>*s>DrgCrAa|2OT`L(qn;fCkmgMi>2CfbYnan?D3JsOVy!Wg2^<(NhM z#I1dE+^VD{{Y=WaXX!<=w7}TfzAC}W^Fmh>AA?&nrw`l^VN9rAf6h|@6;BQC*k;BF zZ2{^->Wbn_ZmTA}RnD_m#oV>+>YBRSWiB9>!r)0S5^Lud8Lhi=UViqr0nwziTR zZ=!d5b2c^PG3#%-e|9&B+f!=`?V6JEnjKCVWJp z#QlY52(w4#KENW_4CgU7%Vs2+z4hb(-vmjph&l&;3F$q@d$ZJN&!>4_zV#fS9HUAz zscCn8x-Z+UNO}6JT|v8?-PV48-lxDbmSe}hb7tW2FzUAZT9N#|bCIsG+|Ij@A*g_{$fVW&kd|}G{$aq8K-9)r8 zKV9s7I$IOwk>eEQr)WCF;mvn_1ljAe56=$WK>I4^bwQ;cY`sR!GDp=6P&GKxEVByX zZabpIZHt)ms!upy`=qmP#)X;GVaSD8=CJ#&H@Rht9yG+ZAqITnU_Yg&F}H^8GAj@htP>Zx^_|S4cb?1I zuWu%kcS$skrNyXS=?donZ7wxqixVxM%B91Z*?sa1$eIW2OG(~bce!iit**u!8x)_c z_e(UKtV=LSfWG(KLy<=^e*V*M*9(s%vddIi@YI2OtTTt%$vwfE&;-oxba@X=#pmW|Xp;Hgk8=(4~7&=dGS;}4Ni>;8V! zVv^TESEMvt@cQthf{IvPuuZCA&)$xYv#PlB=Y9i*uQtJ-P5%?AdkH z7-e6hynAabLrclESK%$MfcV~Yli93{c%%Yg3~rxC z6Tqb38m`WAq41~U(KCP?Lj-cL%UFm?Ffhw9 zy5iqS&d(0ZXxA*VErXO}{qw2ZMnQV$gj+5tw6w$#;G}}N_hWMMdIq~o=;8K*08H!- zS1{NqkCG1^yqg>PV2rn;BXs8kW)(|P&^-pGuCBOY6sy~Wt^>D$gX09g19zx5Ehq0xmzrw$T>g@Tb+A)rq z3f9bRa@nQ(^+qDU6TXm?koeC?KMaiCm0);Dcy2DaJ|kjis8`Pq%JFR`B&Iu}gNcu2 zhUQco>v^??7F2zu!LSmjSlAdEm;+KmPhQp$;PIFt4&&qyDq9IW02G;#g@qGdmv}Es zt_-MY-Mqa^N&gy_;Gha6mnS;>uhgMZy%7n7G{~4*S3Tib6N0}qLnH2pd>4?{K@w)L z8zUw7Bi#!Nb531Icf5D(!?BefJhdJxJDh84{(xd+*g9~XOnp=~l#7XPh+LBusCfn3j#vM4HpuCbpGCp!ra;D!qipBxUZDyHoh zWxTCsgJD$8L|eYa3$kc_!0tcw*L`>kF0VjprCrfP#7tmLui|pV5C5FrQ2+&-PTL-H zs1e-v+Kh_yUsLy!5?zKMU+FQ6$5ZVwRqKLVcS6&lddtxv8C_R6{X3-tI)8%&%UoKS z0mE{~Xe!lF1E~Ff>yYP&w6zk!;c;f+#=r~a&%+mz%n=>4LU@?SDFB&Ih0ycS6~81Y zGaMZzaDQ_VtKl(oA`8k9b>o!5gAF1$=kQ6vksq<(`N(j?A4TJD_D0J0joOUJ4^wiw zNkuV!;QQC?tBHS)qKm54UCc_b8Zr9VR|gVBGc*&v$_h@9w?NIk{CevgVBOuJMm@r7 z>6%MI#8+M0M+0{Jn9u_kbIuJ7oUe- z5B220Rka@D(#&hDG>DyI91)Gp4B-l#^$ujK|!<55q*r6 z<^RpK7`Y8j&t%WYpG|g)6`2HGD!;jYK_-~Vi2&}Uz>MwkABn@SVry$gu()ngBX6ll z;YIV!WHsUuK$d2?#2Ht);Q)$}prE5e6)U@fUeXvVQ3-MRVfS=Drckm)Ao=OoRsD zPzf-fN+tiBJ7@_dpTNW#rC&}kgW2Yh)*0@IlBy3rg3AoeLDoC1!QmUw*o>jn5rL!8 zH3R2~)?jNCJkjCOA`uC{|~* z4o*rbGb)fnPJ++&uVch!YRHIw>cli(K-8D0ly2camDcDdIjos~Nns_Y1}1;l(tBVr zH=^PA8?IZi+ok$@))EnjR_k?J@v-?Klp?@e)~zoVb0RL{#D)q8IT)wT z6or>Y@4Yh=EJ;{8cTWh}c0nUbHm#J{e2UDMSk9&p^)=UdedUC#H&b%}t1st^qA&YO zxEt5qBdhI3D|+qaA?9?6E$j2dKi1Q}UAD{7n`bBznV#m1@S9s+ynKxzVPiYxlh>MJ zIy{_8j4Ol;&Az%mK8UV#wyM|g-G@BN+|uG6Kg;i~)4He+lWe$KxBMTf-Z{FG=8OBC z*vZ6BCdtIMZQGvMoH#kLZQHgnv29xu+sQri{N8)legEin&N`>Ns(M#f*REQ7f4=Y* zNu>OqJ%`L*fQt6{vD5di`RvCw%c&PTz;>JVeCE7n`C-Pg%Vo7O?$R10g#K${y-j9= z5#g%*mJ8c3<0nTAH}^9A9!62!LV;L_ZU25b{J-(D2v|z_~4qY5wRs9Ux1iUrd_MUUE9MU5i(*;y^fELRuzz z`-~_LH)U-y)u!RAE#?z($f1qv;!9b%<<)INu^Ayj>STi;SY#1f_ZZ^fySGHeFa1&M z@HyJQigWs1oa3Y`FDar`)Kho1+3yEmm`kJGP_}Jws|{*{ccS*1Hcx>Fpt`cGl5;J( zE^!WJ^BG}wULlj{ox@H!e8LQI7wZ(vr}v*D8kJGxiHIcX&J+0LX!k!?)Q*_zXM?wf z^>RAQ+Lt^+ldi5+6ynFel3<1B&hE0Ar!j#m&sJ_ak0-x@jLEi7rIH>?LDm`+j7j5N zcoZG_Cw4#;GbuMSU>!qjd>n&ZiiI$tNjJNx@PJ*&?(wsyY?E{M(FbhhX{kJfx?EQc zf2<>Va=YwG?#VIm8RfD#!so*lPb`VKn5QO6oA03=SCjLIWldR~Q=caN?~541vDrGb zF8w9K%?D2atRbIeXGjX_$P~COJkoHyrQ|PX&2jub0GDBjukPCsp0(RlqY1prkJtBFAD>~Pk0~A}Xr4W$`BXDx3->QJ`Wl-@ z#^H_d(YLpb`JnGFZT4FeB#uFj{M&6un0oAG9~_!rgR3KHGk4b6s21D~8WQP{9w(K; z?=#vV&nt`VE#9N@`G$O6%`WA%1m`~F(JFg&{cA8?fO!AG5Il=@Wq6Y?+xOs;6~mD0 z6~kec$FQB)O@fWKD0~-+v3;V>6i@Y#y726>;}T0=uV?IoS83E|8QC4>(`NiUlhWkd zkkRH*M=j$QqHgWx3*OYf>S2J9vtyqmpBAYOZOriGE1fLZ&GoYfZoBQvQ@hp&=6$xi zMz6~h!11`(7T<(&Sy89m?#a@!t!xGT)p6%qdJMNg$}xy1F)%SuzU@bIaZ1d?bN6H0 z(!9oJ-qfdsn6r-Dn>|VWeA%5m=S``Q@O!S1u-8INCOLP5Cw3Er!1m_ zXH$kZnTlR~^*fWxW@>sx5c!k60|60@3=hU7R&+m&V+cu&V`8#;2Fn6Je_E11n4Sv? zDcv_maOrQMEy;nCuj_bVft6s9=d^gz)Bqn93L;^*#8}3t51%$+7h(H-m)O`Y3Md%t zu`cNm4bka^J7&6i07q-+W+P~U`9+FL9KGz$9gCm*5wXitu#OI8k16Jh0btN4MXRU4 zW!|fQWn)S9TcJY>&(bOK)NQ>pXupq^s&)(e`z_`Xs>V7T-3Dp`wk>qe_R;2)%fexf zRqf;&sZIIgmcHAv?5FsL)21y?t#gUuhu&U~yi4%PRT3keNW`X45BqHk-P2po$2wv6 z%U$<2sm|v3bz$?6h*RS_8bI^ZJG<|8Sxvg;^ZkhMtM%(NWPN^`z2j9y;{TBQZ|Xaxz&%BJc{YBZq% zclsxDgYj3Opqme1roCjqHu!Y?)nhXO<#IVIlzxr+?!oRu{q5*7&pcaS59=*z=(A#d z#>yL4x=C#LICtvI0v4nUTxNt!rz|0tu z5=cEjbJxmOgO2yMya`}cp%78tWaA@^1J3-aW7PY@X!$ zW*!IwBDCQN4Jtqdh{|2+!>KCT{<^7svv^vM&VEvaqc1}8LCQ_6{jOW90{VFWG)&(? zZznkNK@Ye@l%Pnk1Z?fx4QVNO{uwVtUDbCb3pYn)hUasswX|1<>j%6-)sJQ?Dw!u; za_(`H^~PF34cx5yx1)(H!lv+LxqV5@ancki(@N#@!7~X1K-~klQo=-oQO~5zub?tv z3V)6v`S@uW3R7`A+$1>>b76`%QDDYaeOIQ9%1;rJN|_zf7bd5Z3y9%{k`P0xP3SX) z`*pyf;ok3oyCK5qVxN?OY(=HDc$Wx&_f(z!C^7?TZ7FpeROj|YC4GdqW1?Yo8m?^h z?U9RfX933+KxY%H+91%8Z0oi?2ahBKdcbCbhKyi4JBM(g)!w^8TngLxMKFYMQ)Nvw zEVwm?aH*Bvt73*`*S~2oZlSboBQM}zRRU97)E25^5qt`7oGuU zzc4L2;YLUJNxb)x=-t})AjB@uZ5k{k!7z}(&x;gH0EL0WT_ibbWo$1cM3ynoiVRwB z@UBe^Ua=D#)QK`ra?;J3*C?Yy5<{s@y@pc0rWM@C*k0!b)O-J(^&MFjhF7EARcm0< zUp*Xa=9$zK>Ey00^j|^g7ymmYuAXt`bjt#n9ga_QV9A?gX(y3YQs^icYpYEX5X=li zawNw17a|;Fq^LeCBhq|v&YbfvWj>`F{7_l47^B-c6IVf0Pp~8VsKF%}_J$W8$#Cx& zu4{r!q7jsO8+KiBzA7*M9rEWu#39K*g)24f<~1FmA;Nl?CMgTbBG4{>7b3BiwBq%k5+?8d`{u zf`)S8UiO&Rg9Q}gn=!UviL}*O>38uFDPaZ6uhZqtlx?5)*AhD)F{&KIjxVoRl=r9? z`+%k6F0s#9@S-radHj`5Betu7DsH9ich|4e9BDZcslS{o%ZT=KEUk~(kXCpLH3PET%|@mw^RR!p6h#Zafd554-106?cqYHUD?j^K=RiS_}dS!TFl~ltWyUX%n2X&x(PeRK4qQZRB|*^b{4n_W%#SHU-0yJ zh1D9>2nc2604YuN_vig#yD!y(=iW_1#LHboeq?^s&+h3JK{e)1iYN__fGGpH_J9rA z)>SA`94HHqjuw>3eu!LmJKHBU55ppC`-w5|K&AF(KnPREF-OZA2z~GfFckLi{kO~X z!6`hy0gCO0FDjKT<)%yz(6eOjWcG<>KQlv1d#U*g=vd>gDce#d$Uys0bt}OC29;4= z_9%knrtl174(yHv+=-^-?X(GqWc^J33BP~`@Q7}xbwV0=UJ!8zCajaJImTU%TrB%D zctm;W(ta2e%_*KAKA_4(~0a*arv`m#qAc?lo>;cu@#96Fn*t)rReFbYcS**IF+E>UG@ z(p_$A>?!gV+lk8JeFA#%&H01_si({_1HgDV=6OylX;nE|ZP`Lf>BuwelC*}UTV3u> zn%^lCi?3?SG;{gY>&Z=8oAtv3+GQ={YUIU$YOrxV>7kC|N5#!DpV3UT@l=~Oe*O$5 z_erL^veDL&1x+@Y=@Q2lc5_9-U=??{<%i^9Yf5*US`G$|6(oV?5Q>)iIu8uEraMJ?h8(iZxh( zUz8!>ty+H%(c9*aiM>HXC|q-;+yww{H$sTSIl6SlW0ExbJ-@ zs1bM7pX0R>;NFc|QJJW4pv@v$uXnWS^M3J zit}TkojQ776Ynrt3szJpAUIMD@QKC6=z!(50YQRx#LtUo?qox&J>pP%8~ni38t!P! zkkEl_^lv)lDZZ*m%lTvZ2jW32^yfhn}klXSne6UJOJW+nhMDti;M;fSzk zwETUm%>#$i?i!9-0+pOJuQLgD@ow$cB)q&{E5j09`oaR}5}MvRXK4)k;*TS?Micbw z(dtsTP@E0pPjNBzr`<;q&o8uhA9wRCu<+jvrC2Ip&Zv0ivlAjh(O+Go-URU8+vhO0 z`cxIOXF2gUP7F?T6+Z$Nh|u{t;|?{XtkjFevzfZ=nIxCLpmllA{t9lp(wC7Y5TZ@6r)t6FD)M3Mhal8n+SE2701?lM|w1&Z~VVlKr9>)-< zGhmnifup^MWAIc29)IkLI~tbl_XK8a%r5oH&}0&H2rN6m>s}9=AJHH_Hi05sV|L$h zLC?-TVim-6_OU8v6{?}#bmH^fQyp@j)9^C}r((Og&V#mvQH-DW(ez;)MHy*a#rt=C z5AX8avqhUk9ah;!orzPAPU;VW?G5u`qfg7I=C%tx3KuA?AH(0i?`cPEeul4XN=&5;!w zks8Xg<=H79*_-d{fzMmF)#2CE-Q;$)WfzFIrGRf=16d%ft*<^%=n#v_l70U4&C&)0 zfy-u#VO{RiIH}U01#;)sJ8w5)-q$TcE0yA#$SxY&%F8Zcy0KV+Ed92i6M~b7xU?6^ z+JVkkK`oHNM&RfA-y8Hl z3+3HrUn`3$SNWw(STL71ToSR6BnT5yl`gG+i3nvL1ED?~vuhjjho%Oh_f(8r);!&#RQTj{~-px0_E@CqVDC(~gGHfD_Z@E_TxtwJG#gLlON+}l8QQg|r>;NStQRyl z9c(>dx5Tk#hVN;|*(H-c-c%qSc038aSh1QXA!jjhjY-r{v>Ff(GRe@2hSI%!1_S1a z;1O*^5Lyc$C@G2@YRwlxf8P^-&zq0lC%B%gP-5?A>=}ZNx3oYzwUN4DUVFAWSs0za zHtHjVOe1K)xcgmN1UHCS^{%*yV0Vk>*(o(m$tGKM*3qrjZ&mIZ2UYKzcut)XRSc@YjFb)PnsfdmCoe`ob6~Kd0Xa>UE@p&GkG9OaxWu2YgHp6KXvB z@1@6QXqQGVlGKUTL;itH`l?8Oy$xCK`Sf_+Z~3@Cz8wD&jD6!T*`{;zzyLTFt7pJA zh>U1^I$&Ky`a7EAxp*eYV_CWJNr-Y`+4~S+Blb2q!YvfJo(>7`!>dA>x<6v-K~lq* zp+zzFStiVm5ek!&AqLD7(Ux0BTHE8^F*x#Sxb25DGAKsl>m1q+q=u_Kbn+mC@%PFJ zho3CenU!MNJ6w@nL(1&zaR379lp&OPX5LBgg)M%n;`s~EH`F;E9MbwQ%-|6qo)lkm z9b6DRwa~QcwBz0rK@n-`N^Q58gis{j66u$CGU@ZrFq`z>b4n6-@kx_+7bU*zkj3OY zk4&31!qbXb9v;v8DRAaN$Dtnys*}#>VJjJY+T6IRedlw+X1wnEbq)wSV*M#StBZXs zHd-wFIrESA)App_cA+(^5MN)vHK*D^1tssd%*in4Y;Ib5JqZ9srizSu+EtYT@|642>p#%0F zj21g!yvP8kZq*tl!e~Q(A7HwV5mYni>2&a-ts{j*FZ?|qYA%e?a+{it(D#s!sEIvf zLN=@Y$%s~X=mnE}4xEJ)xB~YW$*y&P6)}o}6e`ja#3X0j(nSkrN6#xW^;ty{ z@ZiUZ4qfRHAu8rHD$RvC)6;9lYMBeS&0z)Cu3j!S1QSKNg8H*4@jBt{L9w(nq|&FG zbOBEM*g40;4+G)(BmkQT~4%zw}Ss;p0; z@jW)XYt9kv(5WVg?L+UNu4pzCV zZu<*_&c!ulwv!00rFx0j1{A=+`G4*2=t|rDY>WH1zhiB{0Swvr@1B=Juq3id2&#E>H;)TPV2yxZ>ia)0^=K)L~#T~ z9C?KbblU=!yVN!#kyQjW`_eB7WO63v=4lw5z9m zYqupzIJ#Ia5=VI|F@<=Ix+|vP&sjYZPm!v+0B1E1iy$ zPQO5`TE$8xzWHnDN36j{XOMRN@6Nve{r$-n`BIZP$EM3wZj;tzvGLUX+= z`k2$LsW;KX^9&?H3y5Uh=B*1kBEPMN1P8w7l3K|271>YUM4B>UIx8HQvy%sAkF)KlsEO1_ zeB4{VfszL};aReJ@oZvyC9vczdN(|%lg>WN-3WCdZKl%yWgQh5h#wvM_4tZbVyIGZ zW$7v9p0V#~Rbk_PZ!{%y#+%XRYX0I{`edxtM(1vQq5FI=t2u`yUM#_NPzITD`(r^| z{*{|@UJMEXhlm0{v*%>#zW7ItBqwN=rJZG08`V1CS^Jr$vqa70?91x4|ApQ2w)(81WGxGFb?ww(aQP|N_j6V@TYA7>riv$DO?zI=!fM5 z1xCQ{H*|89%$Stm;5{6|;Eu-OUAb{yq^k2eANuMC1ftx9vSwfy=30|Q;)bcEau;D= zg3pBT1Rm&L`zgIMy+|?yq@k{nF04a{unG02y`)e%#jPNYwr@2-F@}9f?0tcHT(NeU zvp*z27gdm#ouz&^w}X`Ml}wZ`Fj1i3MAZOJ%(n$*yS_zULhKkW2q5-uu{qQK84K&p z`af!!O`d)cgghO1TR~RqP%?DngZ|B169Jt++&d3!X23e-^WCGw9i%957p^Jv4dhZi z;vqrwhVB)Q1Ltv%0y$lej{_g}X-kCd_`2S*+AA3cnnDYq{)WHw-xA`^svOz@G}QJM zBBz9*gA})z_IhUtbL8U=d>a}%T-ji1{F%7qOJenuA^i4B{D%w4GB+4sK7pHG`ekYq zX-hrAv7}5kqS1TJ+5;3rZacP};wX|DNN za&?&9$@VJwr~NFOMngae;Sj$mqcoRQ*;H>S;^hm3r=Pv1(u;8(fEf39g{^O)s07xR z!&)91Xu`b-40t>+{T&u0gS!y5-Y1f=gwCXVqBxstFeQGhi<>}=ICu!VK6`s|_^S<) zL83AncX|Q{E6|i*LGo)6^0kf$dr{;UG2>!PxYh9rsJTO0HYdZE5?YQl5X-Qw}gHyR_p>J$jrprSpA>+N7s^7SF!<+P zK#UE#SGYLN`COc8tjguH#Bnqttc^U99YLCdEcWCIycvK%NFK|uz>5mY{^f7`+mG=p z_yMhFYUZ)=Tv?$HD83+Np)saAJfg@oIAtzrH!sV);fs**#at$ti*4ABkPnMurc_-= z^OoeKO|0)sdgstd;{pzkY=!+w;>ul7I;P$re4C_AGRR<=_e?b@y}9@Bb2FnumMvh9 zt5H7_EV}^Tl)Yvt`vWu}N3UU5a3O!ZV*Accf8(jd4JBH^9eSTI2zW{BWqM8{%9MSv zeNJKAmk9v*XIdH@j04??*RL*v|aMC3oTg;8h7M;EF-FIPK5?k54{pG~w^dmLjM#@3oZ{=A z{`LV-?%($9cu^o^9DfMVU%AugkYvW*2jw{^$(YQP2Q3|Dnf^KJm>O6L?8lwaY@&=? z6)>VPL3-|P43`8qQmYBCz)P}N5$8~n(Ug`E6@P;aH^eo7U;oyxJr#iGTL28g^h=rt zXYck~`952mxon7g6^e$X>;AM(E){H1nBN2N6@DoOB@}?De*8-mf`ePJtl9lck>A3k zZe0m2sEpgJTnfddBAMr}ohwviF4g zJVEk{zVF+Y(mDvOnio40qbXg%D(!=|oXELNM+3j7B36gMm3!cZXiya115 zFWtQ$+M+dWbmu``#e|4PnSn0V9{vc7s+WT{a2EQ8gamr<{oF>F9J~@ZL|zC61Vl0% z^@fQ$jRuHtD8dp6pI7PeLc34@sLuiXv>}L5QCL?z9uD_sBDT4$ree&M^D}k5V$-AX zdP*<*jkvSRNqE0!^$WkrJ@K#JeAuT>AvHxiZi7S*D*-qYX&P&yl7f}KS5!s4;tPe3 z+Fg2DWqOAgSeOuBv}nD#?o3eK>agfYIUHG^cHlxvSKRro7hV%YrcrdV%{~I&kBWzy zUe*>D$D}Q(E7=9R#QBVMf9jj)++XE&I+s@xrC;@GLK6>m{&AId&9SZMU_5wQZCcRh znI#by4hyO`8D#}m{G%BQh1cgKM&e$HT|^{CVWJs}6bwp?Q24>J1|K|ROJ;&cVaj5z zJiEmwz&HXHDM(zP*+ zX%zv0P_o`7nUKb&;!BX~Hqt^i1m0vWf0@J5C!R=;Y?Dd;WWfE`&e6<9Ri4iD)4W*| zFy@Fuf14y{{d!MfO)n?5*wRmZ3QAXk2y1feZZ~3fpGEbs1~29?VO)=?eYu#M&x2^( zhie;eh&==-6__cJPJCdw#t~A`Lghs8WjC3_&)1VrfY8qZMWovF5@Y5gpEj+*my@B8 z{1V~vxsbVS2!QG7-mRasJCI*I;zL{?UM^lWsSHn`5Ra2g7}w%cr-bC>MDDybWfgVg z*brl+ljW&{DLrOe|9Zz&foGjU8m_6q8iS#?cyCPi89~R_ZavTAiXO_Tdu^NLB)uLs z;WTGwczcyBpLlV$ArJ}Mj1UhSxsQI$*-k+z~r%y2fs8(`03jqiSoz6gG55m z!78Zy-Hqq<)G#%EE~2n8(@gS2DEE%yg$1T}z;`x&I^oB}*2K5Wu5=I%TOkf}rbc#T za%tZpR6qdt7Xvd`RvqcpgV*Zs&8M{wcGc`Z_F_j(o9@(-s9vWJf`mJ$0T;fSw7w|_ zlzvHxn4)NEXeO+)K|2dwqi-^6_45Zs`D%~(HCwI;b#0TMe8QF4X^O2d>GHJGHRcCt z3_JI~R@EEAWsz8x7S^VCxeS&HdJ$3=L7x{2egGP!dE0gG$#}!9Z5w)~zgL)SpVzLCeA*- zRVaS9HmLFo_G}iUf#A2#pGu5BB?J(8x_@Uc^4U)njsO1_)QPwJyTA#MsCGtx&u}(d z3N`UhuX~n=<%G;e)LZ}Qm*6sNcQAw=iBdLvWosiN0gnOzMC_-wNVe+%2iKR%H!5M&+*LxPE-^DO7f~g zW0$Y#5lEMCwczQ;o%-XZ!az&ktT)Yo|qco{dLMOzQ#18GYjHy z&FarNt~#?c4S0Q#2Yfm$CWFTmMB8&DqVw7CEJJ#-cv(JY?kW?H!kQ1Sp9uXfpi?skd}|H7zPk%&+-<-uvnKk?(fe3K+=+E0i2T zFsk^$*R0eR{-S?DT81=H8(15i{s^~>mAIB`pTVEN;dIdHARhdiWHnK>=;RUiv_x|M zm-pxp%4eM}S6ybw4Z0HdoU8m{pFEUaPJRNb=$ybG%$O)e_JPR1 z`m`Sh`!!-uz&(bsTtTz8hI8Wemvt+5jM|CxS|!NmEuVRR>J)Lsh-^)?ggx27Hfd?r z!cv}3Dnt-bshlZ=;)G&#$EX1EhYUF@@>!6>FDhQ&X40={C+#IVcW=Up#dW6Wr@SN% z!z{rFGrjoLWbi{LnB$P#)0MqxM$?U93_ZJ(xW3E7ga4RjD|I_1CryRV*3brl9R8Wg z-b?R0K59R|yH*YpB%;CyO>XJyF_^DzWzXyfcN50e+xr1~36`W)02%=>;>u6z37=BQ zgx&u(7{F~t8%ZKj*z6f+7V`&M{#uG+fMMDmyi{46`cRz}Ys?CnsBj znXjx+$+E7CJlK#O?Fw}W&4xL>dROeJtSFQpg^ zMwExe0V?9W%Sk?ds{jRH%H_(meTE*D-Wq_caueRyW1hw<_2@jDUTU^<{l+Rk>js9% zss)p!AVe24+WF9n4~^C100L$wek1*-YZjmG=TBs+BuEk^FTXWOOw+;YWQ})f5N8C| zrlt}ZRZK>PvHydX?DBz%)HMQT%xkJGU0d3hK(+K2!-~C>a7!D}I9trIpc4+$#~A_r zq06e~S*B2d5$`4-v$z%~zd32Bd)*>@A8Z~CsE=MkS?G<}p7{PSq?Uu5o72 zY1IU{a|VyxBZDI6krDT$c1qu`jo#VW?X`?*z(?f#`_qQT#*cItgCeI8#)Odxd1H?m zJI$QERb32{s!1$%Rsv&oOkecW8QkyRarX0DSv3Tz9l)8(Kh)7;hnT&rvfRA%_|O@= z&3sqJ9AxS~OJ3Yr*Nz3>!PMb(_qU#$_|8)T?tlpX{`TqhwKK$phWg||_GvhiEYX}w zi)M}~MOZzt(W>nd-wei~2eh^!UdGVIs@J&lkY{?ky^QP%{HJs<4L#bU$Mn4?g616< zQAH9R2f(Ha2W>;^2l5eu)1^<+nkDa9r+30N)K`C*V_zrhyL-`$8xgRaHxCyB5$v&>O-{^Uyi6)0LNH7qQ#5upa47wyLU zVR=Vxg~V6Fhk&yKepRHy&paSYQbk92=!6HT0LtJYmF4<04!eeXs;_AG2<6)PS1z38 zly8ZB0N(h+eGOgcNV^>X4zlL1i|~sLbX4Wa-AE2k@jYaBJnl$sT%+UW;hur1B;O;@ zo_tlS6RCi&2Ls7^R%ZxBsLNCPT45O&5-l#T5DeiG4%T}}`ebpdN-?RIf?&DByyWUY zKybA+w+>8UywoxdrBr0r-ohF;kF>ny&vcx>9Wt*&i+U|? zwb%17e5`nMn%tgl@p%_)Ei}!Ax(l$CLv;}>`Awjc*Y4R1&2X;i?)K~5{m4yRNpv5% z!V%~SnOcGYDSVPvl^-d$%NihYC3T<`0DFd|T?L5fDq^iF-~0tw=q(Mw2s7#*tSHo2 ze>*flid3q;&FLQHWppc3*FtV2j!Si#LTt9u5RFZpn!~7H|DE)fmc*jK`!5X%m#m2sm%# z;y?va1Gk|JEO~~o_k&a9*75b0%8_!4goQ(sQGGT~M7aEeZTzG*5d{ut_5TL6u(z4n9B@FRYq2@$bjzC& zw`R+z+FWeFncbR@hqhk|KLa#=QFkx-(wKGE(9L>TopFFzLgXYCp@fIdeT}Ac7QvfP4F(-uh_9Ae7 zxxo(-Kk##0)xso0YrV2|95lI^JNrj}xrz`eYvp3q3a_ToMM2qxOiy;6xj_85gt!Zn zDp%}-9%VqE?IRR4BS!S2=eDovdqpIZ&b0bXo9dQ!qL4U zR}Nyk)3X5Cf#$WH0U=9I!b91F;2p#ni=#$pi{_b)2u71AH|1HB8|8WKPktW)y8qLK z#^Ub+{9y<}+hMVRx|6d$7H1El;jBF|ZbUe~t?1U1A;zs1qaZ+r3rqdK3tTTG7DUs< z_YjE>*OKutgLIfMy*;&+7>D<2;1*_1A@E%z*F;2Sv_-dRC`ixW!5KYgv(atW=G$P| zRiL+8%v4u@cj!<)x9Tb(59imw&Ci?$;kibhxp2}w*Xl~a^rxpn%((nyuo0*93Zg_0 z|F3=XbRhuXW^+nZs?p6dM7}eIe>C@yYzH2?cd%~!dyU03nYOj#AJBglG?6R*uYy`# zHsWYeeavF%K5e35{QY*_Xt-|C5n3b9k;$M4;c7QaZ%KLh>foc~JBHe?8#}=B>AwC5 z>fSDD5l5ev!l7QGS1u9mkV8g`aJ2$C42Hb2Vr!VAi=g& zez-tXnC$XKBQgrfLe812KE4afnU0PAaKW80q9VuSYGlpHbMVbeWop`WJe$aq(RGtBY&fCu1PE$!^xV(F;l))~Ss^-^ z#xoK1N}syH)y1~Fowg(DY2H`L0RTyzS^d&kxO`uj=`jvee!*KD55aTe4=)1SjslP- zvvv|)SE%G7=TZDkXGR0^nX*72GdMM^RfAO$7i{%=zEMeUoePgzaUPzenY=srX}Q3%yKm zk92YrDlbVr{UiJZgA5kRpyfB_@EUj>BGVFTaW@wH_mnqPJWdK^ywmX*5(suUZkfVg z9{=vFuc8jSQgYfUsCxmF$jszt^m(CT_9&vMlR5b8uk3+7moXJBS@q$!paFgpc{HfE zk;{@^-b+uIHux&!bm5`SklX)tScbx0$O-a*^FTXOc21}p1= z>u5Gbkw=U#QQp2x=lnU$Cclwp*doW04lZB&;D^ohbmkfWQG~;NpbBAgF)vwDSJAPC z&^|!-$@Bn)-Hj5fPP;$9%!sZ{KzlQ+#WN)(qej>k3umcPs^_=n z*oP?QZ|(r}JP1k`a0Fw-Mncv8kC%4G5QUow>`}w``=%ib+4so~NcvkHkN7pm$ znmX#DDs{KlXyn}ws~h!ov|Hm}2oU2a2;782(%m3iF17z63HiLFj6VCt2=fc*B_@cGvl7FK5Nkb?oX8v!am*y|nh@Yu|FkusFLH`P zqkSj3@JIb`;MA}x{Tn!rB2r~rcT-LxUaUc`z%Eee_K99``O!Dp1JI6!*0a4`Y6x)> zfj^vC)#OIPA`q>u&5OyXZMsG@YcG60X#2yYDwX^?OX_J%sjI1^uAb<(36jyS|3m!R z)DN%sRGIY}Y$z21*25&vxySK|Zj9B{81p2)Ii$B z!Wzz3e%LlKvN1!} zdbVhZr!YP95gwEXpfCj!Q(rzL8HiH)zh9;$U&YUz#-(O&T%tj6Cyw_ zd>y#*+*q2FY5Ov9Pf#_Dd^0qT2i*03shJoCSla za){lS`9R9x1y_Dz@ZH`LtxZF=M`8iJU5JOq_8pQ-|$aO)rUMeWE06D}A zS-`{n!S25Yfs0>Mq>aTsE<;64m1W`1F+6@tkN|P7Mjo21=N|3wiS9b8{ZB(NMb^M_ zAU9T3w|n^QlIN80H;+vo)zjPyaMza>jGUb>wxx=^Y4eg5M=4tVd>%~FM2m8AnGX(B zHuNNYfj1A7{TNHh;l*F!#DD{i3z5ACa_yQY$#d|_g@Nr~?)3w@onyxa4)B@yT9Sad zG&s40Vcu1THn~?*c)CyY_?Irzg!)!cyLWAJ3kbI1tarXF!rQBs&i6n31F{^3yC!{u zls=g0pWn%mO}O7OcOAiutlc5hU#X%H=(UDjW%^q&@p_o3Q3~0M9V8N>u@U|FWkExt zQG(CT4==oqSe?EDg_$VnebfG6f$5W}VfBxhyvo3376NWc=juHvY^uj91PAd{tKHvK zOzW;G-#_?Cq@Gh|ufLEnVWgDv3D@&#|6g`krgdGCT;Yj`mOIcRPerwbE+zwkAda zM-Q7sO=VFi+Pu*`hg(%KMh$#vL8%fl7F3)?Gtpl@JYJs9$Gul}B(k)DOY5^VLuG)K z(k_m^=+C<=0A6=z3nkvyO-_Fr6m3lVXXC_28(PFL)-8)t{!i9^auun+ZHNL|H-~ zW6K2u8pWxM2|?zwLnx#JEbK%c_&|%jjXgFA^81}ND&C^D4Y?eFdUErM${Tj?i1V{n zE8>xVN@m`C+#*LxjDPps%ocx_ngUgPSy=Nais6H}o9=+F1`TtdfL5VR!GHj-4#uN` zHn!1_0sy%m=Btk+--5Dr@`8cP0}OvXfm~cqG#o?7O*APbAn#)(NJ=Bn7O3Vdz}~db z?km6^MHSdb?A#Cq6yloX3@4MSoos@xss&%)&{qGxf|0Jx3*AgwRQaP;bf5q_1%A`t zC`@ByrmD9csLdo6P773HYJ-`qh2LBgLW>0j=qd$SYWUeU%mFj=X&j9OeGoPjuy2=)h}?x*6v0YZ8LxF_y~6yK~+_<|pBaVAc%aozT+ymR^Int!l@Q?(9wdOQ8)@qQ z5GITwK!ge7?k=#T##AN6KEJ%dz!0FW94Y~j<2wn5ObCcc4$R9Nm4${vhYKVIHdR_S ze|o=DzyrCj_W~8aCqgteFi+9p*UzI<- zP&*EnfbL|^tPY{6I`NvBhY@a9;L)#;O3etx2gBk=9bP})cZnDw4iq1;7+OWaT<-5g z$h6M@O*~RyLHUSoNN0Cs={5q=uyrd{H2xuN=47z*>e(AL1 zP|#hoZUR~ilhn~~y?qhB0xb(#KzkPORV>b~7*&DypsB(4t?wFM&lPx(i`-l-j z3vn<3KO{7PoCqEU7;tNC3^+P$b|WSW6wuY+AaM{s>yjGa(BsCSTiHuNhoMIUS|0)e=N6quiDeC2i2t%F49dxuEnhxC}4kXz(6S0$ro%4fde4SX)Wc$Z6VFOhM zhqFyafKrd~tH^_a1zipeh%o4#^7;@ug>)G*CU*uBBL;d!e;SyXn@j>9uK{Nza5xvS z714h*lbhrY|7Z5ruCPHG9kDfKG5>q3CJ; zS%+-x|G`XZr&%dGe%GXI7ryQAKV- zgy(~Swt|BE1iTPn|Hh1w=YeD({mPkJY^jQ@K-n{Y9w6(^nvDm+3E)@%jH#!ACey4g z+eN8Y5DB~UqHTc+$1)b~Tcl*yJ!U5LgRl+Wk*WHR789$mAly3D5>8y7$$t?}U|qy% z`#%9MA;>@6tb2mWLHUz%k|6%`QyAV2x{~u! z@&yEHk5V;j38N_lN&Bvv&iAZUE$Gim5XixHP(3Y!NAuOPuVtB2{qsZwjjwIx(=$<& zOc#*5W2!YLOYm9IkI&Nr-vo0Z43%P_zd>PnbbQh{?Cg}xUL*X1vx%qb)B2s*m!dz1;z-OuJJr`RalL7*30x=PP#}`OW7$NYR z+G7^xqVa~@%W+5f{AN&dp!HURtMx+pWRdi9{1a5uSBor>Md@%nGbx%B#&zQ_0^NZ-KJB{RH#=_P4C$tw}znNJl4^>|o<;0rl^-xrGn zluTaBm`6~1rX_8sr9T5FvfKjEX`2xQca8spFFDdE8)AEnP{-(*zGT(S{p?I=anhfo zi-wHc?Lts`JzL+1R_{1&?`$@4OnyRt*jPCK%>V(bRqbjf)cmT-*UDY1{^{%}g-Wc# zFZ--mG7d@DUs;5s<}lOel5%~X$6vrnA_y5wIrkeoHof_ynFi2tfb>l0-XBModlwsT z_p6m3(i$6?NWhmczxvkKd7Ue3+u}!)Un09ISF{ZtGokX90$;Qn` zgKXOEa$x;NP?+<(>0{mv&l`vyEBrM@Mf}n>~s6!V8_@*5Gk%5 z!8+mB?fP21+^1e7;Dq;CNTN(;?Vf<+O90V^1M~U4kRGO{e1@1{;9RRM&4a+>_(kW_ z8_~Pnng4L)LwB;y-tPKKud6o?Ig^cXJb|N7Ot>w?htqdapl5F7BqhfY(Sef*&g6_2 zo}h{!`Fy87HluRt#oFcEtU)T`NsMRoVcLV7yJ;8SfrD2LVl+}v`eIG1svc^OuHP7gi4uNl}@ah;CnBevhQUwi|W%%o0v zJdC$)z8#T%96bLPSgcJy36|JE(hZ#4)+Ul~t862DT_GpiGAQXm{l-A9Df6gl^4(M!i?k3T^=1G4<%Hky>}*c9b++u6#N;Kn@aXx?Js@rU0 zVXJPZCh%gt!C*u6>fu{VW9jBc{6pH}8*SQ&JH7U2p!AK3r{_DIRkaRF{@;Y~!kIkF zv-UfMn;k048R`1(YzolW-=7obEUz81I8`FW6e_p- z4U9^M3zsuG+|n{Xr1%Drw&@9F|G|g{PCn89<)Br zpIVgAu{@}M_Co!TBUI;$(l^c^pJ%>95eXCYfB)#*1~vx)YaciSwNhS4y%dNnf(;Pm zIoQDZpdu=pZQ&l;>^5(9o0G3PZr;J8JUV%*T5DQw-0XK8wFNw$%SCQ1!hJl60G28@ z*1(_P*qJBASGbv1cjAPyGH^O%0|}C~-qg3s)TZ8oF@y(`^n4YaplvBQ=Z^D)M$ZmC zT6?^p{wGmhnxmVf=v;vcQq?{3{4Bjfi63Ezq)C$#}Hr`Ut6 zIFbhMy*PLV%Xync8x&qI!K|LQ8X>!xoH zUQ9!o@s*=kYkQTeE=JNvj-mctr{@P-&b;;qpyZ4d%DsM%@fu42L zq2908wuXlf1pyoKr4u7 z2Jth|&9Rito6VDDz{x7M%2=@{(lQifG6{a7x}CuQPyy+tR0D9I68RMVVzAm%6&O zm-;!sE~tB7Cb7*NE#yfd8a}S;uywErbek)+gldrAeS55n9Di{hAQ)sJhY$!p z4NU=Vp90ShSax*;3s$tjBp!S-q0nqPdfDmH$|~C4_-927k3)wh%x~@lFF)N(V&#Kx zS!3KDLt~P$Srx*0`$nV-=>G1z-8SLf&pRg@WFSQw%k!$A9-YH=>RLUWIc}TYEI%Cp z6`;I8%;u_SAYW|236SM~xijD|N8vYKd3F5CKuFs0`VtO7s>P88B8&P0&T-AOy6|Xh zEZXovM7<&AQd`*S8sYrKym}>>RHH21Ip);F6jo4=<#AG4yv$jA^yc>J_DD2TDZAbi zdJEWnQ5eV6$JHMxz$=wkKh{!fkjNz7{3Qz+C@Mu##Qkx6?jH zRj~yL=l5|55feI~DB)xz>(Qd4A7S|m;T0mq)}=n57H-FK>4nrT*t|MXk>jAq4=<_= zSp3gD5BTPa7zox$vhr*vj~eGx$`V^ahnKArD4Y>o0G&Y;FhN)SQmfJFs$2vD>aYHRz=Nk?XUu$X@SFm5+HGA~ap

      PUh#^0dh z?-xSK5g0(oqC3H5QXO0y6Jn}l!KllmFxXWhKu-I(e4f%h@Q8nmWr;=>z_rb?`B_c{ zNAb|JT7>X?E|%+Ll^4Kavw`LKKur4y0mRYe3XhnOEn9rF`ecz ziFs|l3A>%FY<7VmY-raUR)KH*1HoNOkH}4$h$;UR==0})$`eUZ`cHY*Mt4!>M=eG2 zSe|utHV6@4`_I%dGSWY(SUL zw=`UQ)_{1y34$|4e5;2ur7X-$X=3&u@V*5u618GG^WjQb*go%t{aWm&TCwnGI$4zs zJ(l#NfbC``S3FfstT| z5FlSnwhC2E`Boy%w$@TnVA$YC+UAFsxo!xtpZTCFXJuwsDvB^SnQ-WK(uo~BQG+Zk zUF3eOh?U4!DM$Sb^AA30B&{)T?*Y`n#H>r#3xAvyE1xwtf3{(GoWCVB)~f;0L(ud9 zKbqmE5)|QL>NK=OO`7x`@un$K3HoI|Q{e3<-BFplNLJIG4@Nj*ikjUbR-|SgIra1D z7`y?p;J4cD#q{t2^HNwDV2L^ZB6!@zC-GODsNZHaIf#Do&2Y}ne0Wq5auIxn`+Ij7 zdCD8Dr5F#;xOo^HJ;~z}m{&iJIOU=jiuiuX6e{hu4X-4H1%WJQZqo*p0Q!NY0po*DCI-k%hOhJ#hIKsoK{i!r0~ty* zkk1-+Dzf(h2-H0&Mw*}(OfS=s`(o#l32|WHv#HNYY?RX-xbPiKkw5?Y^d5|mr%Gh- zGJ4Ih-6KO&>f6aNm3N1hS{=@w_*CqQZDAwNyVjl-GpM@RFRGvyMCieS=fBM;FjxrYjInfl82)8 z{oGP2#R=o6(||^Z0f@kMsjs@m{c~e{ z-}l5K{VOg`^0mgaRVR~=XeYiTn_tC9F?6&i>9JQI(J24=W$C=88Uj~yPe{UB@I5>k zB<{5nb0x0ZSd=aUCM_Yv!9}{P#=G3(Il%-l$lkfRv{oy`j>mxQ7oXM;ijvcSa}zp~ zSEzu4gP3tWw%0xuMuh{asd_SH7ADG6|Bh`CKyWad{1Qm|;U*#nlR`XTezU@!?=B>_ ze0`~2N&QsCf%;3;JQPr$!KWA;b<$91Fj}X_vrD5$Slo2>RlZRbG3+T^!KtY}wBgjD z?VP~j(oaQhkU!$+a4lI9h~YrH{;mdNVbvkXJ}P*9zpc711A_|GnQv%S=Afbn-Mk7P z1-|wWgI==7gSaai1nabVWPTVAjjEQ#+jE@RLp3(Xbh6bs?Q*Z^B3!T4%$Em{rfIbq zH&>M>g$H7H0yHJy8&ND@&8Uo|t_o5+rNE>(*5y;A8CR2Ru&qOuGZq@cGT+5>Uc#irg^9FfA9PbyMAaPl!g*LBt@A{Gy4ef z($yqRctw)Jjqk~SBiB?ieT##7w~4xO<*c7yV*|Nubm*~DFofKKeCKiob2jLVZ@I?E zkjQ8u9uudw+y|^2KAb}0-p39XPJauP<&mxE<@tr`@qWguVU(28B>aWpq%Wg-j^swW z{Rj==)bzwl*ozoo=SAFY|FGt#mn=b)WJ<+Jes5W!UA&TO-S8o4ut(g7FA0C9gQWea zGb`w|XqW)5T1nU+p^QTA&pd^4Os$oppv3F}S7=o_AjU z{+5b6Yk~ySF5?sa%Fh&Z)>**avC`}i$VT*d){I(;IF^f~-JTCs@hA^fQ9{@xPRsaW zOuXdH8*}V)r~6Q;;?1ppb?xJw!STpT3!&7La(MCUu3Zn_kW@_*5xbqoPU3CI`T}F6 z?<D zZyJ0%m2=Kvo~B@jboWIZ=DI1)bll(D2hF~K^XUjlSL3Z0n_f53 z%IJD`leZ;>aIf$1nadSAlMpW#V-VxKtIlT=Tr^|T(X^4vMe^M_eoe7J8@ z*1wU?|8)K~1QvqK&jHrgY=>ZDQ_gj+Cn+aC3fiUYPnvzUd@E%L?-B8?nV`1yPh_3> zHB&Q5N}T>)_`@hX*!#d&tl*{X@rmsWqUkm`R;Jxe{`Ls6QC!x%B>0w>OqwC*p&~$G zg8B4{NEHgwuK-<{_GHiB|L3c8ak^_tdymcw~=-3o9=4?udFav)28}EIaZzh`>A3d!31gRXbkg zS`%Cce~yC*jD=OWK3@8J$JY*mlOVK#=XWB7HJqLR)-{7iN1qog(>l9HBv13>Gx9=H zMG<1=@X9+OyHT>~mMw8RvDcR^utb*JJB2E(jO@^V|3>5MdUr>jbQOIonl;eRwzlZg z{OM-X6?nk|#6g|TNjtDjUe2k@WwbO>!}Kx}iNj2(9Ao?KPH{yn%EvX`vmp&Kj4%j5P_Bdc1;kRMa zx{T)9ea^2&?T@4M!W*caH`%rp3Rbq{^yWHcSSarNV0sgrTxItO8sEnqtg7H4dM6#q z$u1SAQPIe&NPMw$zyxt4(H{9I@35}Y?t%I89|jHVB!AGt(+X|h-{LgQ3db~*NZ(pt z94P z7{eG!Q|nBAUsIGY7>etCH?86HSeURi<3;TI)!{L(13mt}1 zQ@<8rg_Q6F>{RVr+U1QP@Lpf~U;l_vDu6%uS5}Y$9RLgH_+@t77WF4|$Zq7e_Mgu; zxmB_LYzvP$2vrjwP|8NNsXvUA@QX3}gMTwG96CE==v`H(;3H5^!o9vo_k8%p{)2Sn z))UC=NW8WNiIl4jpH%7S%S3%E*Ue`@v^zr&0LsMB=d|>=lUcz0w zvpF!JEXhsMI$+aq#IE`Vg0T}%{dMUs!Oq{)>S6zc!90Iy)Ileox$mW+LRVq&)XO|t z?5eWgG&FhF_H1*-k)HX&GVPYv9Jo`duD5J@RcU->u=x7dlH$(QJec}HsMUBokAaWU zgPIu+ks7NRfl$YFPqVtVpszEF?&x=a)}t2zU)g0Zu5Kyc>(*7SRV2Gm1DZ4j%5C zU6=X3vP(ET;4CP+3|7MNL)mRUt<8qRC_dQXS9$V&E*|LvIcG-ft*~**N~)1LqbpE( z6v>yaaX~o7hm@nvT+6)CmiUEj;lPEWrD(Dv^pBPr6#(keHCd3m8;QwnlH|# zi@mE>*HD>*)l;~m;Pb+^YkL{M(DCyE1*WC(!h!U0;vjS@fj{aeYyZK^A9WGEqQW-| z!t|--ZTtYFh4lt^O;IPGRL743J!N`fp-{W39JCQUI9kDM$2+rdb8{iW(mi0i@2}&A zxt;FkyFns>_ovF2U&qH4(dvwQ7{{n>U~P%H38k^{VdFm-c2k4%L;#B%NCtw*b3=O$ z^cXRGcVDy!!*q%v_p3iA1q$3Mw1;Z&Bv`AsSo~J$C>y2FC+2u*ib?}T69Zr^rC(1m z%IdUUCJXZn&e|Nl?kW_OSfQQ(J|FQg5bE?W zRT%@y!#&BZ-yt!!woHtfmHutp_igB(D=sAF>&1L1P1hU#+vxUg8$p+&JZJSpK9WSl zril2|*k8qMblRaLF426Q1FO-#eLO;$Vds49_0Wj>W{83<1x_xCll=o|u{$?~DN-cB z^X7WKi5vtR`gXSy$kII!L?YuU8Ti|rdcnhP6k~|;JA_NZ&fKLl`ZP8Py4$fKOP_)a z>Uscf+)4`ZcAv09QO2B8mcL^^R(ERFQyjWWUKn|&ISAygt| z5?#%(vg1t9ao1&&Dzg|##&Z(<)$E_Y&VsSWUDs8r+bCb6pX5t0D3k-GJA0R4{6N;M z07gjzn$v&9O1~fiD6wtwHD}plX>5OMmn8k8D1^rmRZU5zWCAB2!w=cmLIDc@HzzW; z^~t;uEy9G7M75?RDU5D~ZycZ#762;{(1-zuwFnGV9alCu{nj0+s??J4UmA%dKE}Xa z%_tlF_-Ipw3L4B0qrRRSGz!T~B&&Q0RfS3n&Oe^v#CHEr8Kqm#7fHYUKb85%YX4gq zk=MHaRwmIRz6btpl;#^+@j!mhf0d68D3NcGhgPkpM)DZi)$q?{t>OhIxx5iP!bBQ_ z|J!bq%6kY%G6{-*i=&5;1?i=9A6Sd8KUK1ryEla=orgs$7B*LZ(+ueP|5zmW<2Jju z8rW{p62%oAki(~q;J{jS|5FPygfAeA&noywMPuZWe^u=G|Dj@C)qm$;-HAzJ2lx?R zagfi$^jTqJG2{Yy!fkcv8uNmT^S;~m#lOP%?wE0Q3dx60yh-PM_Y8`85G6G_%Y>O? zY2xpvD#f5dS!@7$WV(5?fMd`PXbR=XmjBb3VI6hh`O=*`G968pFZIyA|L@jh+eB#0 zHO8=bl`U!8vozbNK_Y>z>}f$T@H#PkLu6aa&rM{p6@J_=6!dzzvi;5ZV z73b~!&hV6Xj^p8ndf?g?HRA~s9Ku|Eh+p*UAAIAk}Mn= zqv49UaRdr8hEntuWmh>g4O^3MtbuVgB3KU-6?}Stt~|7QxRe&^uPZs=rJ3=V?tMsT z>#U2|e};}HV*CN8jgCA#Z79Ya<+6tm1kDwY=jSr?&D>5Pe^>}h|AEJx_{LBB<1o78d4B5{A7tt|JIlKPc|?SoTV>bnqV~ zzIzQ08ZCmJYtMMcDp(o}pFyQzZ8bY)Cf!^(JMbnMuIc%}BglenS&TC)+I=luZ(8lo zNH@EF6yBJF9nE^QUAT`lx?bvfz6>>9&ZE*WZ)*`Y-GfkdCxP6q@*9zkSWlP}3*mta z#ld~96Sb{Z>%U!MZMSjI`F5Zu_pQD-APWC{xUhZMZro2f;bYXvavhbydJ1a8{yD;> zjLiac$`H2^=l0u6;6CziQbbgiW`odymmdLK7xDBQ(vSnxy8qqyiPNI}7Yo2CssstkyzA|Te98+cVG3Mbs5 zizocNze67&@qclL-4z>2bz))FGY4YNA&-QdlD=S2fT41Ci6?(Xjy+hx*5xq+1 z4{b6Ho8+v`5LW*Ypmf&8(fM+Rj$zuFF{AFt;v8hjeKcRiDLIXBfWCPl1;6#o@fc}w~JE9^=Xn3Br_5sXSt zv+?3n`#xX_wZNwKc(HoA41mci_RQ#8oN?9kBJ zLG0kx%{)aFWz+Fmk>5z3d~t`mV81v4Y%*QcuJ{xz)&G$gWK3k8xPCG~91owK4(FUZ z6Ig29EBLg&4P6^Knt2<;QtI(&@0GpRUhNigB+y-al}}Ko%XL%%OM}+QXe~cuEh!%* zX?K_5Zn?0*I8R$E)$@o2C`s#|R^l+0F7BX$bgNjl(7>M~-_KhrIQQa8jT>LSZzQkP za*(L`CAz#R;u*+G>S#UJX3J}OvCydV_v7JgS?c%sj9XEE=3BlXl>AGb>$R@eibNtD zH*m?CcMTy?2~JjV<~GM`c8v8CQC7KN*>|n=ypS3=*dE*nH?~Mu7wZ*sA>*au%|qjN z_qfzrdA%7sef0Z@Bm<&ecQo$nLkg>0xUIv!Wp|3BYNN~2wM5qa9KZiNO{DxtD}VA7 zKf~L>gW6-7(@h->QTYk-tirPN)$zpW6~cFa73##Tk9=E;viY2<=k-GHu&h|(UmQIF58xO? zT*8D1B+#+_+i>Lt4E*?xjo1l;4T*b;o5v_N0}e}e=-+<7-%o9K^Z~^qqO_wpcc9tf z?8|FtTMvk3O|$(2fH^07_kw!VV zYar}{e8KnaD{+GOzXbZumz%xY%2}ZN9B@N|zAawhk@rh}K;WTYKJ8Z2`}^zL?Hd5v z?coKefF(MYef)t+z0R)ujnNufS_=cg=V9(|@FZo7FyPrncD-6GjYA1`hJxf6FC$uKSCGO-;Ue|$uWscf*97i%jZUcq- zRQ_C(t3D|H*@4OX``;(A42tFVDpfuQuu+q>%R=IyaPsp9DBs@cL%Huf~q5Biemkj@xYc zCJH*0SY~Gh|HiNB59~T?j3sWLiA_eBG6)^<2c}#_h&ZruXlGpLaukI_-Qo=#<}mO# zhdM7SP1eX_UD^BNC@(T=i8m|fzrne!EDc8NE}EQNu7sHVN~?~tKTV!~B`+tS>z-HZ z2F{LkU+Sb2=X+0|5XVFvbOsDw7x%gUp4PFn+1xr#%l9aE z6<+w#~s62u5+xATVkDRX(>VhU5LGiBg=ko;iEzJYi{!izx>S01DZ+j4Sg z*#tiC&2GLkTMg^1X}Cn`*I)%_01>os1&;%91=2ydn%Prt->vZ6s~&yBLH60;wo0=J z(=LoA(HrO(BG1%g0e2BZZuTJ4SNbb#Oddn+xw@TvCH&-&a!t%`2#*2R;r3NKt{D1ofFwK z+)v!uJ#7h?CQQT)GUo5h#5S;Hre-~d4xVIo2p0(xe$(+R`hELDM{#tH1y30GS-+2^ zEsm*BjXAP>3KahI&F5vRn6L<4(n*;CDA>X_At-R`6L8UNuzj@+KV8FV-RS)Lj_*8M%j zlFH0vv5`tfbB{~JHA9);d&uDOx#&7T6(LolJnZW~uRlP>!)e<0Kq*QmH$A^N1(o#& zhwCG|31hnqD@`k?kcnMBM9Pd4I(~T-&bQP71*AIZCkGu)ukKDjC_6cEz96 z0UVZzo*&^yUz#z>e;OS4I)Jk|=BKq-XDG(Swq@d-j_K%D#3tmw>6UlZw-XW5uH3~i z1XK<5fEx!g;7lj|2ClwlQveQ@j0_)_6Ad}}@ly;dtB$_A9TF2KxUQ+WBv&p7AoCg*RMC*Wn=97Ccop%+ z9$5D1wu8;o^1RBX35?-z6kdeH-wkme37BX020|*qi$MFL7|sben$OJi9#ggO#qL^~rUa&}%~JB(k!(Xqv1NUK zte!V#uJXA6U9SBMff{4O-@}SXx7Z95LnhE?_63f~6>-XFp=1gaIe1GZ@F2W6Y-_(& z_=krmW1=^d7oDQPD%jvzQ|XSi!|PfxV}uNSHavh z8H{wAy_qPX9?sZ(vmdFZGejhgSLNu5a6Qb`#HtPfrWg}aNu5)~G(9Ng7@^}5w=7iZ zHrki4S*N)l++Tl-^G>7m&tPH@n7t@IYUm1XmWg_fm~o2KNp>y?X)(-;@SxWen{t$K3nta=ne{mbmx^eSHH>=^9eN zRXbWhYLKn*Ujb=sz#u~9n6mWLrW7m{3!YT*Q2@T$Y&^^2W_TkVfx@N!O~LnNx#Yo* zp!O7ltL*bP0xTwk{0_|7$Op}?wc4y^Vz%<=nDHv9#-18*V>CKQX8fl? zRD?nck7UZ-%_4shPHvE!OO{m*2ILJ8u23M+j;7`w!;6I?%7c5Mk-qkv3r8aqWvMl5 zJot~2+`>EQRL^ihAt1~$i2WGjo`8z73ao4T_$m00ikKQT+_)PoybOk$h?70LHmu@I zOT#R{VljyQ8AG0sie;s|dg3`cfn(0-tdySWyz*>M@}aS(1>86<@^TvIrCJo&SB$%` zR#8GhCC+|)^D|Y`XxDd#1yYHpTtH1+DULlJ^UICr8$PB(sBJsO27Qr0WwPFP27eWK z1%1y}F7Rq@aqGn;&n&+3?&J#p$L^ZwuriZaZ}sLkaknUDLfT1V4k9WA(*W_zU4fs8 z%CYs8r`}q{YW~|(%HGUOh(gu&;CDr7M=KU_LvG=k z(8@3FaUoku?tYFDgc5k!{+Q3O@wTYUOq*oC^alp~Dj-c(9w|`pMl694gahL-7?^U` z&FfS~l*{7Ti9Hr#1#cZM0h_8@;xu-10@<}n*jV#pGys_=%lReF2qa4gJD2|a?R?H%Kc;-v(c}M{o9jBlb?fs(RR5BO zl!@zRFXOnh%_2)kGP$ChRCp?pMcG^;0U*SC+K-lIKxSq)CG_d<7%%Y+av#OlcUc7* zjt3FnY!}5BVXqzxX_sLLJDlQajRNA7Oa>NyWQ`X5;?1bhmIi1Cz~G{xhGq#v&Q0#% zbl1`;gX@_USu&Vgbq^stKQ+hIRk!!khTXtExL5XLKx((jl1Q$jXWY#np=^-7?m133 zD1xFN)d#J4Ytgfbo4RXfg}r1r4U#dP>(_q69kWg75|D2Crm4K-2muMhhtLYQp#z!(mfeM+XGkn>eMP`87sZUkOruqhYu8s^R$`ea=C`I z>Qh>n;O7 zczA;JFu{z8rzukrf&384giD`B5 z2REEEkP2=xw4Dz*jYFk}W17JQc+fsng&%r@rDWcv3ys8e)!EIO>r18}%%cia2}o z$_BWmBtVaQ;KP&ER_-_1ufU0uV6ZdwuXM`eb|Uz@6<{GlpfEbL=07#SDO#T(O<^&r zRq-X`HiBQ!g~_s^?5Y~0fjjanCJ_hjZ})v%_IyFczf~=+0A@J}2J&f}-dtWcZ>hGx z_j4@hv_{54Jw2t7(>Tw&Jm@Nzy(Hua|DF+0l}#vqk)b=eD&O15>wTpq`~ot>GqsAr zr3KtP8fB}Gs=D=jIiL_|la7LL7}wM+znE8IshrOlu|BK0QQ^zh*f_gr-3vDfPVVv@ zoD~_$v&#|iZV!%IS!rRi3mPFO+u3U+42(WqG=G9HV?D*l? zJD}}_O{tzaC`n=Vg!3{YVzGkv8L7=UXdqqT;XPUJC>~nUW8W3{{8~ng6BZgeB}%=Q z1`|3g*y-^G;-q5UrXFeXH5$R8Z88?$O43Q7ThLr&Ugw!~wH~~ePW;&t&NjbTu4Nip z^J4ZL>bS~AYE$spC46LVc46l6jAQ9C4X4VtLuUnY21TpYLwqPmY#9rg_hmOG>krje zK#~Rp*7N;De&2WC@OP%DfHZvQGK6(;KP3eC8WUpKRw2?%D66Sx|D%j`52F|_`0!|h zD*$|W3MzZ0k}!`1*`D8UOvc-7uY%y~BS3m`EiT30o%XlhZ=Icw%uH<74I#$rt!0s< z%>4UwZxcjgPwzy=4lS_^YS>xAfw7BG<9Ny?It3a*vOyN$k?HqZ7NHK%O+`G`3M(uB zQLmn&$9I)#c{2}To=28rP*V=#{_vrhPjq=Lqn1-+bEKk)VJpLe(sF_BX8u~;8_G&U zt)4Ky=0aRSO)7l0v)C6Yku*CS#4J5MF~@5hZ)BWox@?qQ(!lQW3XLo|jdkLO#-UtN zveb3dvBVLeQ`uDxGNv z(}2-rE#*T!E3rTcl;4FaLW_MG6}eWToP8{%{_$%$b)wT7xSnt>g8{hyapJ=MdR++dgA&Cty!`F$y3}2oj5Tq5iY95k3*@1pELJte5YqO66+n zlA=kWLo&JvRM%BH`0e)cG)Z2hG7T4Akjj}5#NkyFYMZ1t9|uD{yv};{JnbLlwYmIc z2AeUbclcZ^AQ?9~p#Izh)P8}#F$ARupSK?K)-vh!rJs@qmnW8izhk{-bgPRbB7{yt@z*J^hY5No+af<7#=#% zIBGW08!NoC&{Oze;ctz!+UKj}3)D{cHq!_Ok{4NAc31tb|?eGnxCRa4Mvob4o^+P2PIk|(yO)~-9+ePa?QuYRB zbUgoJ_J^pKd0z>Ao+umSgBFX!a?S+|;pB(&1GW?hRq|pc9_V$TY z7gz0r?JCD$4K*_xr4@M1KJ}z}vOl{)%4^in^VwtaM|?58&L^Ig9S}z5_N@Gp{bhD} zSzNXzz)yy>Y0(~}BsQ=rFzn+81#Y!-PTDPO;nNJekV<0Y6~!zmDOC}Q3bf2LcGzY$ zvn4Sk3DJIn$1z3w~)GApOgR4LLLXbI+AM6F0zFbm2$CiNDKy5Hq#`p{nKL zYBG5q^#lQbZ#u1rVBsrbf((U76@2#lnUu?M-85 z1#b)Lem~QiU(9jTUsAqDX!t{1vaMd~zFX`0Cwu|g#D_j{TK=K@B`o1@xw$j|FQP2} zE#ZAs6RhA(6_zp~vkuutO9j5~W1EaTf^W=zg6R$Q@SRRi3N(XCk7>gRoGi_P{RMQ} zN|z6*(0|N!kJXv-x`m{c35PYJrA1>u4lep#;yd)u=P=FCrh-g-y`ZP;b8s|13*qGq zlAWu&aWAotoE1O7^}`kH;RS#9>E0MVw48INz*-{4`8gDbE?T)!gsS|7KQ+|9vT1*% zcmc1zm+M}!B2Iof=m1YEUJ$4)DRjFMy{yga zZN*A>Z}{~;Y2Df5iC2ZHcLymx9q`@qJF8*qdAKVNH;|9=Fu@>G0#vGz-z>*)gm+%j zE~>WLBaD&qlfRssh@j3;)6-p$^^dP|99f8+sLAxV((R8pNbxLD+6YV4mDW192Fa^0 zRr;_Vn7nXI3FveuxG*B$$yO;{#DQGZ07S6O_6MhisTP69nxHH-02U0jX~jYRn?+kp-Or~@K_ zSKgujW3w~)jzz}Rw80nhpyi;=V3na_g9hFw-A*e_d=Pl#&tRf9&bpIR?3U1hO93eM9~9)VT1c{yRs!n(kSt*T5b9AOl~E(1}zS zqta{Tdfo25ywA76$UFw*coj&aL1FywjJ$&qP|pM*Dbfzh<4?U@^B#YTn92{X)d;I{ zxQ;d~xqlLd{n4#L3$7M8Kv+EVGP{^iNR4Y5%@+(`%@7Sl5zegBM`%4&LYB0XyE!^K zFdHWC>XF6CLpNbXU;K_?f0kp$bs|FOg9 zvnk()jhKGd1XuS)S>pjiO)`3$O%5T@m775+$rcyt{MM3Nk^=`3xe~bQ7sUPpjUN2M zN!SU_-9E(#(2^Sfi!@eu!uCT!w*cN>1Wo5ME-#CN|OwM^bV?)!iBiE-Sntc`Un7=?}G?#jx6s>7P${< zrhc$>WaFJ|Sr$skpNPtI+;Wc2rdO`WlPh>Nitg@=Ff@niA%%_@C9z~RSEtH_ z0jfInwjC_D@0KA%Q zGxMGCV=Cs=AP2bS?{39IIGjpq+H-d|>_Jy5a5Jp)xw%<(KFM=--Iwviaho{pu? zE0IPzlc-ly{EbMZqGdRKetHIeD8G2fARHJ%!ulrw)iJJr(9sB>a63XTbNf29fmLx_ zws{DAHARJUNZI0J2kgs&s#7~@~5c;?9n+jkWxCkb9C3F{$0$|d&{2xEG|`HFT4 z)7#2%pPqp)y(|7Sy`DDt;t~2fKgh&z&_O7ZjfR)ffv>ULbVB~N8tf_bb)WsTlin(9 zbWAA`3Gx|nsF=Om#9 z_0y83>|>_9%V3|C_wz|BkB%8Y6O>xFctv^|aSx`1i3PyS4;^T@!El|HHHGxbwct8uJpXva3T)yIv zoAu+LQG~$dP8Y02WE?~DGdLx)69`!r^cK*SBp-UTh_2Vg(|_Wok_y-U*v?RnCXeu< zj#H+|b|61Tl{tjzw>%+_Ily-Px*h*{Q zF7&pwZ>!3sH5t$!syVN$fU6;is!TRyjNNG`RdAtZ*dU=Kn4nwL{i9qq|ETa5Qro=6 zf+hG(&#Y_Q<(k|dyLsZR19=n@-t4xIY`Y*imBzavtCc@>B33T1$-oTICRvo_#zk-7 zeI~u6f8<)45(ZdQjS#_XEw~pO8prc>G}T?fl*Kh(Ga}PxCzDUL(M((3?@_8S$)7*i z;QtQv2FB-e_VN+tr1Y%sZ4|blW{W(A7D*PfzT~WG+lJ zUx3_%9>8pQ-UCEA{tBR@V;y} zl;kpPDN>^Rq*1pud2o_-AAj>y$Q4QNC`TWdD=K-w$OXis*yJ^l;PL2fiU{!j_htX( z_3+`Se|Pz1>Ty4Ofo%=HFvm2Q@2Gs3OpaqT^+6_oL5I>R5CSlK)UgK;pn*W%4Fiz@ zM7hO(c*|=}vXG&*TSA2_DK&znD2%CwGIlaZ*E#amb`F2+u8>5fvK1;)}*f z*$lmg%cad1#i80?OUDAuM^COZmidT;z7UgQeLIBxwOBOBxb->1s2G`1wuyWTmP?rY zZ_&DvZ?B4mg*Mh^F)4C#4yf34#t^TlOqns(-IEn)WGg)gU$axuM>j0OB{Whbe+%OW z)m(HE+>}@dhe+zdMTF~EufV_m zg4STUJSkxKeO3p574s&$%aj1JrDD^hp3C5Nes!DYtq}Itfz+snO< z{7F%#Q?PMH+tp6nEq0obRmL5gu0n=svVDQqFMhG)#az>zNHmhrbCzk+2+d~3Usz)gP@kfDKUX?VnazF9y8{kz!TdGdm5?1^E6n31{1a(Ar!7U zVQsu9!Y&!7{cda*)H&OUOgVvym^5)1mz7{h+eCdJ16SDYu8rTOlI}k`?5-^WxDX=> zsXS;Qev|0aNcW!wwhdkk6Ac5KnE&5R`|eRg(|4hv3DsRG2mDP*q9^kDs1aMhu+aV6 zu99zW^J7M|JPhLjiS^5ef%jheD*wZ{MgO?wnahB843_tq1N(lqP9U51`j`>5%jWsFK%V|1Xn=o`)<6EgdjBt`{=<{4`}#4ECv*#< zPizHOC-vbAtQQ^qzdT>zRPZtp{Xuv_+8y^u@&V_J{d{ab^()6zw5?qg#^=74A)dEs zRCTC#byodt-D9`lGjLnHj%psZSNU%Bgqd_Xv^BVb>L@m1cC;wB06!i3o7=z2%R;}U zFk-Syf2qamgc?M&;)Pj z<`1bD=~-(PlSdx_-%ZFY0&U|V2i2ZsRTpwoiF+B~P9bkzX5@M1;%{lTmsW2$Yx&vy z4d9KsG(T{HX&>H8Hoo!nmT$bwAtm)3^^U#&J!?IhuwAI_!OL+s^tskA^BwkNDu1i3 z`?(|~Ylg_2Ql2|uVCbi1eEI5fyXow!0Afk`-uzO#@}P{XgO_LRO%D~f)X$}mDPnN* zKHOEAsq6M^+Vx1=|^&WPzD+; z!_j^8*`F+YcnYI?+5M86fM+7GM7oRrUPSw0Np_m*^bI*Z*oq7lK*~d25lw9Z0*3BZ zF^tkk?Cv(vsWJV537UN-iNqP#rC1>x%S z{pI1Xr0is>{4xUUi|;dlXPx`!g*<}dx;!IA?w#tg^`Z_A{QSlQpRKyz>+kbZ#q$2V zlQ)*%G_)A1ev2C!0u$%>NmOtj;(*V;=}Vq-J}QcUm$%bk;Ay~X{>hF1aWCg{U$!0f zOn_h~zqw(C@r`@nWeTR37u@jI1AMxYH5nmjbh@K8nFWBAzsw(-^ws|AHw@j=MDJV! z5400s@9GjFRjM^}sRs9>q*86Um^7Z-$!U1KPu3pj2gpXM)y~SovKiQCG)(xmwLFRs0aAZXaBgs} zw`dCo+Y>;Hh{f-OEZp_d$Ejc$iX%BHx`zOG{|Tbs;7QrV*u~&?V|-FHbDiCopvg&Q z)bQ>(%?S;3cQE)v5}mzmTu3YzfBT?Z$~g#Er?07;M7NJYFo`e1n`9GAkZX}*vf@Gy z3-&Ba0tW)7{pRUz95PG79>0&b01g`0$^0Oqp*w(i_#-8z*%YB90LJ&92Ok5=VKMFk|c>EsBA=#U~z&g45|7K*kv(nH0>lciFTv36?Nvl1~fe&ne%EX5H z;MDFpNH-F)qVaRpu6ceCbeKw3&f_D*`6S`3K|w>o`1rvXI^hqN$cHg>6!h66H{cnJ z0*&>7*pH$BbSN-L?%0hEQ!r*3hthbO0jr1au;@nYl&RAs5)j4T*NK$^7t9J0OyQie z^f1k$cF`NPVbOQl%_C0y#1jXs!&3=81zkjD6?lTcaxmMu%RtI`Al>B>F#=R+2(qOl zDT->4#&Y8mvsAWuf=GAUvEx(Y+{)Pj9|6)qiXtX*Y0?8#9)h?*5FL^mDbfQqvl}`= z5ErvUJ%Y-lbEvRu9E6fU$Hp}Q!y;O|qN(9cml&vToAiyM1+;smnjZK?HnmI` zZ1ad10?r-`qitP=+-Q}D%qLo0&&tSo}1;&KCFnI+*;K)mvIsa?@Ru%(XS4JosZDuSp_Rvb|f3(ZcBnnJX&Daq) z;f{ga#|#Eb(u zj9vo?J3~$GJcyn!|IKK(0StEZ3GTZdGbA}XL`DTUY6HBdLhxC_ypfaS4}58>$j$BV z7W6J1MhwzcqdH8GNaXCM ziNh4A%(jWc@wGom3rSeDNSp=;MS@F!QlpPR88%>?I3FYSo(P031P=(Cgs7NYoak<# zi3nICkcIOQ3_rq5Ebg-IY`So{m5xr2N~%!mNf#JSxi z85n$QnMJ=`6iO5NI~+e;9~5b;6=WVgBdnL{5&9WA?E|(0aViKTV&X=TjM&C;ODF{;sog_jx2_zn}rTh#jcU!!Ded^!*e42}plC^hU^Ei<-f zWpqk&`bC^~YT19o@|HM7LHzq11P)sx#uqF+ZpjWHVvw6OA_qq;abf}rE0O3wIaJi9 ze!;)PX>kl4*h`qR3*3h%AGhRurk+0JJz#qdLj+xkNST7UK6NetQy+ee!ixE_km=oIY-_0|^r!gs)i-SN+k%&?1*Cj@RGIHpPi z1{}f{{(~Bu8x;_d%$a9JQWmtDRhXqtq!)yh^RR(Et4zf(Gm0dLBzm=cq|<5Z?{Cr; z3QM1CK@dGQW=@qjH&rNTf@H7s@xyB8}Nk9!lWbH75m9~sb9R$kY zstGp@HvA&a^sKZq_$k8Qqa<+vn1}t3Au~qW%Lx*Q@4(h+o@IY9*hL)q4;X@2yCXfh zMYe$&DT7o((dwn~-C!Ex+`)<>X0rW+*&L}Mv>M3MX>T(it`|^d|8Skv6DCBJ13g8+ zEDpoLiFcE9wHSgKBFh~#3I4{#zlcLmDfLgMDdAl^osbg5nWh2bUL|Z;uBaAf%q6)- z$U4LY@+As(kUf;-PNyVM9z_-;4qj$#S+?w`uwFCLyBfrx?KrS{z{SUb-Gn8#7S+`K zPX{-5X4EK9SbDvU++AVRRv@jWOigNkpdwVeqnEh=%VS$*tw@u%5YcKGi$d+2BuJ|_ zNU@43$^h<&(@A)&j44;iG6x@W|HC9yl(HNW~VnnS5#Xk@zQK30u6?Y3UYyOEU}3L~-IQzdd6z(DwKUXC&N8 zTN1`65`sDSqr-8;n}z?Ofnn<;T#up5Ed>k&xj}v4QUE0-5CNzXi#QK>VMSYHxi66j zj9S385^q!473RH1u>f}2igf-_(AD&%Y)#?>QNmU+#{&eD(yW?1fqTQM@}EIfW2Bp(G72t#3U3X|lDuqnXcgT5eS!D^F!CoX&`HboWF1zdj{B}d&@ zk3wL)co7wZhr`kPhWmmL{2zCAS;L$h-GPjXFa-HQmM?N+2UJVj78EckVL|wC3rq;$ zH>2&~*7-F17-EPZtKT*1Ne+oK#HtCL%L{E}~DK7cxC-euXqk^}V;-T@(cTfY-&M8tF zmONmKkuL46l(tmXE))!tUsAXso<1m&1A$fPXu(>QBVJmx&^ut;;Gn-8l@J8iW=H*A zgt#M<=_4j53PGlw73wd-a%L&{Zf2=5xk zli#6?C81^!lBm6G#d)JS;n^GyH$f(sfPXBsADWoSn%CJJschkJ_&%b-hrFcS@)b0B zxtEvj(iO($jpto%JOoh+DA5C`V-QnPPCL{}z`^=oZy}~6uyc@a(ul0H{RM8TsLPgC z(#wg2^84N{k^4WFfVWi;Py%{#KKFfjYi=g|zb2L(xX!JS8zrsU^8^@b`B*l7iMa_fDLz5_lYUJ_$TGXI~m}y`Cqum4+5P-$|e&^pE4+ z69^NIQIM9Y-j1$MpxJS^>y$mMer)&XL&rbl0K}nRgYx)3X94%%KCX^malahf37!JC zHxDoMvX7zZKNC;x?gHzEe^X%8(DrOKLkK-`7%hngRG|2NcIJl_hrn#x%A}`wd_H#z zeO^8FUt5n+{`sL(cswISC+m_NH{o)AojR-9>Q>gFA{2jbDXtn2VBBB*Dj-3qpAYyf zsijOcJPS#ORsn?6KSnPn3>fRyZy%I=G@a?*zWn4F!L^I63XUf4@um9au7~$Vt&-vQay($>gEG12+%SF zhsJFSd)4~#kLQ$8@Nr~?_^;4uNzker(chfZd)&X+egPIo?LSo2r|#*Sgr2S_bY9nU zo__VN&5CMXlvcI0YO2rYoxjb!W{wo2Rt0!iZ1puwbkAI-&D6UM%!J+>$_;H6`|ML$ z7QU7Fs5106+-%mCR%Yq8pW3MZI)hT|ggMg^ci}tJ6=<)h4Y?zO+l%>LHi;$HWv<+g7@fPeDr zr|p(<#e!H~9uwrrh4{!Cts+jgGArj_7|_;$ImY1J6gjK^UTpjz92S&OU2qO#-4ZdrMw}1nH-j|}Xe`mB9;6LwUlus=CdH+qh2x@&}@B!MS@!Hd%(Y>8Ls6Eh`FAfiXada`RiPZ6B(gtu5Jf93|j zz1OUix2Rj9YN*U`GGr(<7s5}_57w@_7!Zc`!%V2S_9v+Qd#)n*_CaTyS8`ta8b@pW z^`Q;jC;49jSzj>l+C+Jl7pI*W4V%fJ*)Jh`z}ohQ6xEv>!l$*MuQ(RyI%~hs{O8%2 z>S4jN)5p56&`*ih&8Ysjy?CMbzdIWU=wB2$t}pNbOnY}r?c&~KS)ic#={r7TzdtDp`pPorK`7pLBDd0B5=mkX;43y_Q&PQE443NwJDJCJNG1Z;^|&|FIN;>#7el4GKT5fiyQX+06bnRmx;>vY6e196cF4 zOnlY{7bo%W{Z#*`=6Jvmp7OxSxJ2*ww}y&oy^|~rJ}Hc=QiMLFhRd59^zizg6q?vh zLVb6Ur)4AqA7Na)(_sVN$WEruM&V)CmEfyxKTiS56Zu6cNb@vSnEy?A%hUVFTW;}p zOZ<;XRc~#NS)R1ny!Xzpu zjtd{uU)5IBK6hg-wZ6hl*s=Rb?WKs|*WmADar=z$hk$@@TxD(N;?zbU@n=7390XJQ&2x7y*kc#9ah;rCR0bG$;oWerd-rCxN;4%FIjJp75{W@enLY1D zB3Opc>EO?g?(700tqMq{e5Gx zz0NgvILGs?PB?!|oa&Hl+UPTM=$?wI<93Nt{MDjH0X)86Z?wc&9RNFoFIM0}@f!hL{(uP-Geu?nJH^{qL_?7)yF1JnC zCfDJja^X%(Us^u)$S_dVYKy)dT})}p8l2SvA0utqH$~ZSChYO?1>eZPi=Jnk(hBt$ zjKIu}`}^3V8rr0II*qbbC4J5Id?Im@kmta6*qH1Ljacuxz~kr??dtprcl>th-rD@K zIO_nI?Ji?7tfVHGPJ*R=$@bYRhfXO?FPJ|sfch#rCq9AmFPDOLHJ4K{{n4ot)C(k@$ye7$orH>}k# z@5U_k*_4S6+ByuToKBj^G|3I0F!+tjiaDNw%e{m9es$rVSaGcW(7oSl8;&Z4G9P~9KjQx~0=Q+I zb05k6510P_?SAZnl>u4z;vd(GQne`G^SzZxoBL++&h(BYY-;}|?7Sm9ZcW~hfAJ74 zyK*l4wU;)Q6e?=g;L%RqI+1c?g+;7$l3FRmb#E;JH4hkZzLEmpuE}a&69~K?`-q$x z{)pU8#Yr~U3$4^^o$c|ie;brKv~ zPwS#qzALu(=8TUu=>AFxvCXv@WqLIFZB7Hf!^4P+D1U=jKC0Sl0#{6jR}d~(+sIYT zZKz|aR5|876rsMah(I|>_5BQ`G2r)7zJz-t!*@SE*GvH&{5(U=*wOcN&dn*2gRUC8{eQ z9x`o+J-rn+JmaBlx;2dhFx}Mbz~9uIth9SLi$tpuD|NU;q`t?9b2Y@dq2zXKJhw8O zvsZk6E_pqLu740+r!K&xfa|+crV}76I>-$3z&x7m7JR;&Zi;Ej8QXgjXj$^*TJ5~j zBF9Z~;M2RC(frBmROU%%>03>|8_muc@MG^SfH%$%?)?V#`7S^TfR4e%lh{?d#n*)| z#JifB?<9p~|0DBb2~eH=9K-VPmkrH&N{*&XDBZJK#D+R;->q+x%&H4RpI14ZITQX7SQG$_d$vDX-N{Swp-TMxxLNALZUg=MvIg z8&bkPl4UaP8XWrExFZ-ORxNw7Yaed%>d}t0JT8l8o8wcjJB^LEBCEmnH3Qu)a%oPC zws73;aeFI_WLvM~atL1AUi9rI;Y}}p-=_UKiafiF2#W-WB$;TxT-DatMGt5c>Ri?n z>Buv6J>1u+$gc7Y+_@e+V|a;rS8H_4xbc~kO4{X!-2^VGLj)kTfh*W<)j6b?a(8gL z%i`N6)`_b){4=X$Pl5>0kkw&q*_rEvJwKie6CS9ijn>Sf^|HoN)TBrlO9bS0kKB{NSwxwxy z=7)%?)1<_D5(UF$ft4@vrsP?sB#7p?IAia&chrV!YvMkB!n`x$Tt2mfwzs0|8WtRk zrDGtzRj+fd&iLnAaymEZfw+y8jJIuW`_3#fKbmx#4Pyu$#WHdG4u7ae6caK|l&u_l z_SCue3dULtQ^^BV4cg*P;$Cg8yWP+mV!-yx4+Yxy-C4RCYND)fQmn||-9BTG341(V zPPV*k-{QS{#P5!eEc{$&xsENoGN=4E{R(ZTmiWC86pCA#55qHruMZfxM&`R~LS#P- z^0@-`G*p;DzkX8j!ip9GIt?WkQUhImgi)i-jl;LN?$-bUo^H<-+vL*iM{7=AAezk; zDV)6f$h3#T3qgOAGrv~d9=C|{zHZ}J`#&B}-=CH|zhYmXPp^;rx9=Y%W<5TV7_Y&~ zyTMOqXSjE$Q+`}@_dbj=ZFW6H9NVQP>r5_rK7H4Y&3mDD)D>Rbxkhcy0skIhDS~O< zXz9aisci=6FZL8Y&HcS&;5qC01!nG(lt5lD^bsF!`*qY0w;)<^g0an$z`H7BX8~g` z5G+_-^?7viqoPE<&F!&DY}LfBmCs(I-izrsmfH@(cFTBqXxf9fL9b|&)!P!&U)J%U z0|j_X@Pn0QX$AziQ$Cos<$Fud+Wqn+jRCwSD07z98+p(zfw z=K2ZZq^-!+zq~_M@oZE3RG&FSN#9P5iXu5#hIiAURxlhSjh_|!#W>eFbl~PIXHa%n zV8iwJB=GYuVLHjGG&&xvN8a?4;_gwE5|wAktAN3n%EBU49XMfoz2dXPicO|!5}<|2 zR<)+m1Qcg6pWWF2ZPW#YG_W6X5*y@&Tvi&ax6@8Z67V;D!)^uFy|JQooT_G-2KgzR%h}4 z=E$o4+)BkN;>#N$e1%%VxCJ>P9~tw02H;hTtOJo_TD!qx;>9L~V7c*_LC_M8V>6Kk zV}C^bOdJD|IacSDQ1P8^i8_pw(%l###%eFV5F9OHkO{h)nM4$N^7#9?nwqYP(yB>L{9UMNR|QXf_a3( zN8=yek2nh|<6DMt7Oxio!XyMW<;a20r%ZgMjq=XD);O*wI zf~7LOj$T#Z^@2wc{I(*y;|(b;&#YBp=F!ktSQMiZ*8=1*XyQIcj&l~`BxTp18F99b zNyAeXb%rxvulsh#;T_JA(Ux`AU=@fIeh5Sjsk5ufIZqVFv6lZ{Bn_o?uAZt=o?_i|9vWl zXc~HBtwMebxv^kt1L$1Z#(lM{gIaB;8#Y|@>|v?I^}9!FTzaci_L&OUF3L?;-7lY} zTtywn>|m_^@&fQgUnddJY?0$_O&&t*V3HYVaRwwI3)p?~&D%QWO_(}HYg*CYF4vJd zsKq~P42^V=ZHL#@G0VKQtZr=?EK)D63IDdpd2l!esn^Y%L1g~2ZrB5>)1>%?T#<~G-!2>S){4!qP9tK>NNPSXLNgH+z&ufcplmhz!MNTM%9mir(f7g zI+vv%c}ByJDMX&aqrV(m;|du2F&5VvouTs<)>MZe&MKlZ)9dz0`EyRI#B z(}I5(8vr=%ig1o$Ur`#%vRb${uTeV8@seQ`WC`H?q$I3xOtRNnkx$Z(?UAXtjP~Kc z$$nN>#}endJ=Vodju9Zpc4u4AP6=9~_itZ|gDOmYD85YSoKK-d8y`-!o*FiRGQ?XM zYGJ9iX0Z{G$d|h#0;WriK(6TvoA7UWVihMkDFfs{UzIhd{fTMs9Ia`qF;E4&c*pe| z6C2F*@BJ) zM>HL}^vKzLz;1CIpz8j-M^^VcCzWNMK<~nwYzxVA(0Zq4+sd4Cm8ecA40$EXOC!h< zy%C^2uZ7XZgG9hJl2`iaFE?>35L;L`0j~a{t1%+$aUQBXs^zP2t-2dEbj}>d5`akT z^fU45&S-6rBi^}<(Nr^~3$x&nnplw+fW#Rqrk%;u>%#KhfNVWsLy6M-Nk#mCi-MEoNxiLIK8AX68KonqIY{a$5CB>+Xo*uTIRjC*beKy~m(#r~xp3 zPgFHir1cp^u177yX0SzIr*F&b=>P%Nu<|YILjye_T`)&vK_is_8*(yi*J+m-d%A>Mi?Dsb&46}*dqf-|2jn$i42N!a zK2q5TU(=?r*WUOdta^8|{oDTT2zIRQ9_gqoJXRu3V^t2thk~a^wsDyxsuFUi@FN3* z9Ow3GDk-nZ?pC^Z1{oQk_w8msLg=$~SyYON=%zUC>e+9k39TRc{nO2DnCz4B)-!}C zn#gW!Z8tnpC}Nq)cv))Qb`>YrnkC@vLSJ-?*>F6q$+ttZVB1mGDA$cY!HNsj_L~*{ zoHSJti&j2+oMnmB;}j+*cc^pcwOJUV7D4>*^ewK}9i&2y7osH~hKCRT9`q<>^x{zIDylLmgDsc|FHv! zVyUnN@QJB5U!p(W_||ogBeN^BUMBsBX2zv)+uA27J5)^NS+Z?>yw>kQ7?NV?73H;+ z_qxUO+GErMK4gyol_t(K2D|(xawjFxb2$-M$Wa?HoJ~n~ErNMzoVd#9zkwuf9WLxL zrv%J4e=9I&%la}fcoZyGm^ETd+3;gAa%75`e^eml`f$BtxLF<2aK|CKEs}Y3ECOE< zP(HBQLmoTwN<1$8S^bb>@@u)MPgc@VYO>ZVN}@jf7Ec~<8W<+4ZqKn8OY?DtzLkYo z49G^m)Us?F$y|JD6FKKJz!kgmXUtovMPZT5kE3Jrgoyu6uT^h)9v3QA%ZndeQtX75 zh1evL$;Zj0WSMWdc11G-LuBQ$~7Q;wadhkwOr4+6vTnEXwM)}iMuJ}){cu3?K&3kDHf}J zhpDp`q2{u&|9qetf+&=A+0tk?w~Ac8Ny+>Jz)vZy853&*w$ zW2?HeH@}-GW2-ru=d}Do40)nvv3@^ z(HT2)158mBjdjZNv#QeEKb^LafTrCi8k81WVhZ_k^qAX_iJk(DWW-3WZ`qrc1nDsO@L$Bkdj zgl|NMe~TN3PJ3Zr^ZruW!C@}PkJ7)PdhZMg2RxU8*RLIE;*VuWUs zea?4}t0DL23yUg$4KX+}JP1`Entk-9r{p`(Ake2UCbvz_U;=X6 zR3}{R6o0!Hy4|xBW(HfG%j2LCxZ!3Ib@gO?oXg=lfl_clV9hyqROZF)LWW}(53Pf9 z7=IzIB8E$cF^4naC=-tkrT~b~IoA;_xNv=_;EodV&VHjb{3Za+w%)=HqoJ{~o~!b2 z!XoGBbCxU(LPwOC>zp?`#`>e@gKhttM26^hNW{{c<8w60;}3#{B-*kGk!T%f0?D|If$t?!ETm?l0<;ulBukhIB=j0PAe)_!ax+ z%%NDYY5Eh*JsA&9A{7-2ohd)#aveUXmS2@+`5jqo0r*nI^&K!Tr8HTbe@-Vx;m#%7>Vs zqrKrxpxH1qT=408ZX--GshJS<4lG8heqcWG17LDF?mVscB9*&q>krmiZ@k%p90wpc z>jec?3I`8zSUyag394dCf`S~_chBhPnS|~!|Nfy?fJN@mx!(d%yY1~eorzAvsLhPN zgc%HV?5dShmt(pfnVUXWcPnKbEi+<4KynRpXjj0i6npKy$J_Tn2k{q!P44-KQU zZdD}O2q>=YYQY7J*JP>|pS5(FVq6?SJCzotzbR$!*S@Wkz))sMN64ho#A zqVsQX@)qyZ)8zw@xK1hHWvM6^D`7G{$RnAa4i-6&I#RU}Xr2h#InesQ=Py$oT`K1u z<~Rvlg_o#ew@nX5F)aGA7PD>FCr)QKmur&W2SS!YU#ekE&}~cJ{kX@*r}$;SrUpx( zx zJ77*!199z1n6}-wCBNrF^CCd&P-pdY>*Bz+uAexZA?8!@25fE1^~F2LA2gpcPVc{+ zG_wn0y??Q?Z3P_q9%&Ue(b4UcJ{-sua8!d?nW7D6uZ=hnsweP7&KJ9B>X!G}+ua#> z)!s;9Wdr=aVcs+T$sx@u;j|H_17O&jr~=E-su`D!%EX0)aS>)`Q1f%LbOL>Ok%Yk9 z5}K{qDeMV<;b`g{mV%-q<&6xbQ}e??ixRD5ZT+O;3^l(}c{h@^ZR$3#zT6BNAlwZP zj7Q%zp|oKMp=@n>)-6|M3YSF@xfJ4h7r$|79Z+vEV}QryKfAvf>f=*s@UV~qc`?e9 zqu z$9~1QZ;P&FUL0XL$ayrwTdSXxDo)T*HKBno*p{h32woi$cewd|qp}Xz+rW8Bm0*Q= zouWO1fd23fyG`rNWTnoz!|Xb>LnojGT)<3kNi11rbL6?JNN{DuB5mZ7`Ia`*_&_$f zyIox%6zY0qFG`LGO969Xx?gFGc-+6>VraZ64fPD&RbyZRCIYhEXYSyD8G5somv zg{(Ud{zpO#Kv|Rxa688JqgXH)&b$pEnnyJ|3UB`lCT%cTF2dMDVO?cVwuncHVe`34 zQml9PKz?VVQgyxmgDv2eqx))#AKod1bs97)VxeG8ZcVjE9rB1@0~%X?ng^|Op;<9n z&+1Yf2DRlk&sY|rdHlCx!~6sG@5uY)f&#};(`f!V8~5VrQ4!}PtZrIvB`hm@*P z-;qJ)^c*B_Us!%$RxVKzpSDDmA8z-32lYu-C`dkj6Nslgskj4(hc;fbD@$byDC!IG z1bR5Otg86ePJq5fM@TLbJ@K;fR7-^^obvwx1I>B#6@c-F_Lc2L-+syZw5_4rh+sQ9 z|IuKqKlu4R-RAzY48Cu|UE)DxcLQwoaHPW)i0Rf8qKE)c`uhOT7|=g8&1*eo&9=mWA^g)Pa@SM%WWai@ zWa{X^1HIBdxjF54tiK}NzJkj1O=^bfiAB^O1t&Y2S)b`Sc`B1E9T6}0d*vZnMNCp} z@nBzA{sFve{|Vbb{%_cZ*nh${WD8o8Jy)upZ|UV_l%zq1aS>Vz;#a-Mc5@wJE$az#B1y@NT00sq-{Yo8_X?xV#9gQY@seGruh;YabK}0%UQB1`R`Qezc7hS&#gvC zhe?}r8PA;ha7sLNx}17Rr4Jb?A_XPqQog>fMR2NLx{m3#8x%U#RK*JQZc>M-SIqh- zDiRuW8FkVvA2OQGAV27~jJ-=iuRaKege9_l@&HsD^|I_7fK1^piMt+P_(y~${!6+j zU2C9?%<^f9bjE}pze}cLzmOFx5$VC7-Sizs#dWM89Z1ohm8-qCxrq9&yRrWFTSZ{N z%?=Ur*L|!Cr{JjY&NlUHNFTWW$?wwFC=5k-g8;Ony!8F|cKE3mgI}(eulVVX^`~!9 zNce?$%(JQP0D;fz;ioU>=PO?qp>R^g8$mt~_6zw6&3xq1#8p^jKKL8DL2s8ynKdtt z1&kV_X=6l-F6z<)KM*atIm-03A1KJl3u(^Z#;AWTLSEW~yM^b0$f-BeoYEUZwc49! zbA$N)J{k^`QZzsz$h|5O=EHlnuQOa$j<=S@ERAhK2B_KJ?eX?2PQ!(EM=TMQ4+fqL zkQd;au^zxtYm&e<4MsPa-Lyjf+&yaZsukjG;Jvgq zMYBQBNjhMfpqu8O@A!NJnHUqlNp+j8g(*9CWZX|zq^Td{IrP*SKiP2ZCru}_Pds;# zY?|V60hr=%hZtcEyIoRT=o#f}4BA-1fOUglUZ8q$d47YQ4s3(<5YdF_#kZ_88$z{I z`)SbiT^t=7idzL?Z{d*yIi;oac$8IJULb?&kD1buY16c}%COQIPF64fmTY6Hb53DK zof<3KJTbj<={)5xuVt%4^Pcr@R~%2=OBjZ*OaPW-)Ajp1eJhQ9y)l#0E!WZ~_}17B z)63!`E!$ORU?}-!ArnR^cGqu%$R{(Llr*Vzz4U5q&7XZ2T4%$vAu1lJ#TAHK!?Fr7mFswZ1)yR(9*hG)UqU?rB4zuv1TlhR*Y|Exmt}iM@!vV z4Gosn!opfxE@hbanmfNp`Z~#V1>{{v1=BVqlxM_c3NFK& z)d-TZ3npCF#R05=D&OK#g=s*X&LqQE7+@TwU&OF$r3G!d5R0VR%d0?X4vRdsV9Ez>;q_T$Mkv|93L%A2OGukvTZl!N;Pk%fy%yC! z4@(kXD77E!y|RG<-|&p565lY+9e}wtR*-70Z}P2S4sd{dr=yB>id6O>!^bcs5rK!GFl zewIX^+XY0hW+ue+rJk2Q;j42`RSDATvfa zd@76J_N&qDXpJ1#KrAmt0}bJ8T9TPdKT ze%Ne?h=nu?3oiT1VcB?#;{)VWPj_dnp`7Xal0K-sd0wY4;IAJ-tf)m_1u{o`+R6~g zWinxwa=iK=H<3LXJsnJai0b+VQqFD>hO-rCTK(=}d>^51ij5Opb+^*}DN83wk~Rfl zP=WhF?v?vtork{A-{)HW(j1!f<=SyW(wk&vgRtmpwu%Z{s1}sME&(y&`Dy+Toj>u* zGHOIpdPFGwPw17h(VVMNN|f!WuOL_iI{$c%{{)c%{~?Y*?T*BbI;VPc-;Ix(j%^ON zqPyIv&E7w(R@sPFh-#q}q0<&E+R$nv2-D%dr#{r%PHb0UE?d7vAjKmvvz`t8OjG%!22sKH@jjhPtI16+C!T^m~; z5tQ%eIjPM$Bf_8v-2cbbR|dz?1KXOJnHghdW@g8ZIp&y|*=vfKnHgecW@cu`?3iiI zF~7}s>)s!)YHN3-k~FQ>>6T_zIt`Ah2G{0+AA)>nd)hinE5X%^t>zfkpsWP&aiEq8 zy}`tk=ms4Imv&3QKKDdqETD2IYzZZTRuI%jDJu8GVZ2Gc{)(5(8a&Tz);SL6SSQ&R zObuZl8a2=nVLBK0ILAC*@-j|>fCbwTRUj^J~$#% zl8xguZXBa_?NM=YTTjQC5lIJtH!mKppMFP;*T`PS5zWU@bj>ttp8TDCDB_xmSO4tq zIcd-P>a~BsPo&d%zq_$XR*Hwr>&J}ZqQm6HD`F?7r|{p^cAwc>ICQU}8@W3gvEC9Y zgFa_{ufO#!-!7YTPUE(PXtUc9d{W_UevU~L$H%A$DAHz60YgK5Whw%!;jQG^_N-w>i~>?%5!@!}&YZLwgR37!~H`mYovt%*_1WZc@| zbafE(=GA0ndR$F#+JV!sx|X>%G}Q>&Nion`lkN}{yy=0gsuF!$umN>@j4k&YYxNbS z?YOt)fpzz6&te#~fJImDTr&3zlw;$|yYFSgZr$DKI8|>#63(A$au4N5QE7M1@0}@o zE(TZBnVfBik^=2|&6x7<#O(`iY%K9I4_&M$)oimq1e^_S>QgR1thrUMU|Dr|(EAqP zWcxCcCAV}$2`;RAVJMN^7;L~$QbQ}rnI9k&4_r-1wAez>0eEh7|7IVli}PRMe#Af9 z7OBZs2&hdAuLHyVx*N&LY(Vx)SYJy@iB2zBB;tR8>F)l{`;O0QSYC4#8?oS+uW!gr zM=)59fE*p2A5)Ofg_>Hn5YK(jQyZRG2k)g;o@$p$)h9+6637izo%BMgvt((TRf&~{S zYc?ik$wFSOv`0)YidvD8Avp4 z&$^PG`bVUS=a?b%!6%0>d54334BlMtp4HU+`Qxi>mCQM8Uq`o7wXCK#>xwj5Abs#o z&e^gtpJNQh_Lyk{%B$P=2H>C+3wq%yJeR(FpI zwLk!_i>WS9iNnbvwfJu*X&;1XM7Gw#XKT#x#mwaf&s0QbnnzB`tV8?_h>ZT-Y)2&Qz?CCt^m}0t4B)oF+)tL zPd6oqwAa&Lm66bISwG*#;%PG2beSnFCBV*{YS8+ko#crSac700(y4&3iV!DibDt3B zpyaViimBE9&bPxFV=ziP`uL3Qe$nz^m^;VkukV9xwc(cKfB=oh- z&vW*TjNkNYiPd_7%nn~18v(q7zYi{n8y=DU>9(%=X6df*eJ519V8d6UGJrGmKb$v! zSQKVUU%a;b*;#)8v!-DnuK%L~_gSvWA4k z0aNv4sL5IKUfygam#_)K#BqB+rGxW?=XquWfcN_xey{9=7zUmR-4&yYxAdbHFI|j> zhEr-ECs(=7$=uwT-CiDGJj6P=bO!r~L-k1lkZ6@J@dsAP=qmJE4Z7R0w16D_kb)WS zf|qs+>)7iqPrrwyWiCYA7fh{lPp>QbTH@|lDNNRKY%YgIBe&RvqMIYZWO9PT5*gF% z5i5r5C#~C_)T=3&Z=Rfi!7`Yh9&BXjUFc0Jo}4Ffj#kl0)wRH1TYqesgs3PG43u_v zSHMQMQ6qkpEBW!v(paC#C;^JU66m*~dNXjI@s^ivxb$4!lTVITk4=10TMwmfIAgt0 z#$G3%nUtYW(B0E58~;VhWLegGUuz z2bPiIJb+vm#R=}QC1Q-f$;$hyo7u_`No)DXLLNT{HC%>cSn;Z9dCO@#Vx~k_AqnsKdA%vW z$PW_Rz^ZS60U6I1(2o{oQTe9u*J7d+_$PJOHRAH?ODxG3t> zZW2-Z{YDxAC=8o-!IBlJS1T;4yTbcpet{k|g+u+iwxrIaufdxhoUxRZx_i+Ch6)}L z5YShYv75M_*Fy48N_JWernXtr;aH-($Vr zpK+O<=7<;BpDeC3$d4CAG#*KITvx9iH?|#%1_kW^M-LISKf(i@#?P&Qwt^ys@Vv*{ z#uP<5dmBUJZMvBjaRcxKv}p=DGv~1Oo;-DbY_QmzQ*IPkru-o=pJIvC{*Q~mSjmv1`>x;3PA~bqhg4uXT4mF3$1X@JfDmUweJ*c za1eQw{V~uUhtBGyYOmh)> zAN+(cJj>l2&;Jt{=78C&8dTVG{rj68vN6SM9PFrvI^&(h^ZstbQFgy&6p&#s10p?y zqc^)K^$^~t6~?Q)NjDp6AcOk6WE(uKo;41FL^Qp~GE)LtZxDvplm}+&X>Kg%7q%i9 zfEpQb?I$=d!3fVW%x32e$WG1BxRV>pcl?79D^6iW{svIP5Y+xE?Y1{EbnK#tF_nFT z;6cZTA&gn1f8#)wm|-;Z9eh!%Y=uRM(3(#ZquwbkRyfj_z;WtHv82r!KsdJ8(5Nbz z6dZs*qv?o^o`D_WAY_MbE3xkz59(G1l%$fgrSTv#omlRO4)+=Nne4I}IW|fB8%WS) z2L%jD(GKV-!cu*f5HbvOT0*+O?8oOkEK0EuF;o5PN}zn)kpo?3>*~a)f#!+vx5Xu$uP-WPKb!JajTv2stY-P1a5aW&vCQumFaOWVdSvlH&?7Tac6&*!>^@;jroH|~_m7WI4RWnl1N zag-Eyv5IPgH})dGt%U*3;rOb@6L~;(&Z=J8HIMqqUgsMot!A#d+JfRf+`7^>$ zyOW8^0H0nqnUjC-^rY8FU;!M)Sy4ZYKV?)ommDvSZ0ofdf2sk`F6rY-~WzE{mmnCNSfAa20DtAvX>?RV0Q32tWNff zIqOT~Y5L-iV7Lq1*0h7v`Nk`DAc-6K_2yA4H|Dq$hH2+x!qYj@Dfy(_{s70d$swP^ z-J-9{fzfQt3wkhWAe0w=rR8SpFG^fZ7ed<;VF)s|-I*6)GlCTKY!>L1IcbyXwG(GM z(9ELS6EWJG)d$NOSeav$jV0B>PrUj8#LA)TKaM085jApF{H<_u&McnQoQx|sda_@E zBYfi}>`_>TUhK}Fm)o|Hxvxl_VAxDF#7>}no&u{j8#`U-*dTQ3y+8_Oo z4zvuhacwBThne0fE7UB((9Gu}@k(k`uOkieI`2}vZLRxFd8>$5<{+imu4Ad!{qp)W zPczlfBllj)c+?D&T)F$Wtl`;U9oE7s^)AQPCbrS*RrAU&g3qt>+nz%datEONZ8jyM ziheM15m`l&3|nYVILCP4>yKm^fcIxTX_~0<+j+h(nw0H)0385-uV&jyw1~S$>h<}5 zA)W2P65}9SRyaKyt}d+t{9j&o4E;ZDj6VQ}z=uzC0aE`AK-d1o$~X&2H;Zjb<(BgO zN1_scZvtU&^Q*WxxE{0W-S@hC>LU1EicByRCod zh%KH>M5+(rfAHg#LSa=-fJ7pcNBXx6+QZ^=J#>R!{ogf)tsS@p6*~a;6IGVZpC{08 z3+hUNPCQeM4ql2?!SmbEV>CtP_(zm1|bI}X|ku;^K~>UBAQ>u z-}b>@Y7dzoSkk;CSh6M=+IW-7h|C0JOQ~gBjLNsP>CPVxv|h3z5?i;pnScS4ERJ%{*sZlXDWo*%GOWW1`Ze-aWsGsK*V#5hb=F;nal$$A(#D!^NY8d`u(BRYe^qq zL@|%DZgSc>H6%Nwk-ppHl_0bAodG;Q?+rTBuU4tWMmBZHYFJ1f5rYZEEU4J zt8>bO*d6EvWKYTEAUbtM$;QMXI@jqzTsm7sRp>v+1Gln+Fk~AB48Kr|eQ)SD)Pxno z$zPE7I;Kht=rzH55h;_idU;KULKQVt#IfqD1u;cMz#!SAV>kQr{*5BVnON#U zLD-TcS;*XAv2$tyAklX~vSOtBE}x_s6#;6lL`&k=c@jaH%YP+`l*BMdQFBe_67|KH z^5te^Il%>K9jOum4u3RQ>Og3RPRCDzPr}CVhVOkV)i?SR;CTn1|1_AvP4Kj z%>p047K6_^>Kb6=g%=Pg)>`T$Lc~1i7PI9CPAL>75Lp6yBmtSC5;Eu1H*%a^oMKIk zjsbruZ4zJvZRYd(z^&g@I2nNf8~L?T1dg`5Pd_`5e95>b!Z~->`tI~1UJ|gQXMtlB@Y;`#pSp$MlO$J$g@LFc)pv=;Y`{QPceyA|Bm5dpg?&iUUyz%SG_H2t2TlOeksRvx{Q8wBcWCB0ZC*eE0ES497a-=%_?_$`H01(8 z5{na<^shrpU)He|+JXZytoj;*z2O&3_aKbBihgL#4d;suN)iAsf>V$nh`22i(=HGY zz+ww3Bq4FbNs>og@It|!5@U6FMd_51Z$)uP&|Ye&I)l=&IngvCU_hzZj|9s;=a9QJ z&rn!SHbB%V6Cx^{$Qe~91THuMVX zL-?1jAymQq;dJdL24DbAe^~Tq zg1+TIH*@oVJ5L48K;Dt`*1&`I7ijLAstWxam5{;6om=QPS0 z+mx^{jY5KkaY@~|57-4KpC6Cpgy+;DnBeCXEgQxKe>&z2(ZL}3D^j-iGMw307dnh) z)mImIo)!X&60b&Es1pb&$ykyI>I(ArUMf7tfVyA(5uCg06!s~g5@e^1QU;eOhi_aSGG%#pBZ}iYXzal|z$uh7} zL3f<^=WkfI)oSqhAu~@(lHwo|ZX?>-NkU@#4iCFRU3}GeW+^^dheBW!1tPXk#rkz(ST_1cGBhUV!DM&;X zH2(|a%c9A?vNMpNpgBxQ0{#Jwxi}gm>JXvAKh@rI+c1He_H?ITj5g+BvOxGRv##9W z`!r;(F{-2;sN^e97bK=9zMAydAhN}Qh*T#8YVa1!Ulm)>_^oaU25LWUxRTz>UYk`#s%iw2$nb>zHIN0!1v+AEoSpR01M5_kCLa9hkz(IS80;z_vz){c`<#H+dK7WGku+(TlkD~u~ zhdwY;e9-8DERfoN7yN5p{XY!>{~;5yu!n8~+p{m8bsN+Vmq^VCPFPUN84cu3$U6A` z&1e>7)SVD{(3!i1AiHsiT!`l#fTZ|~4ZwYXh?|fv(ud=h-FO0b=|K;@fwsi3&R;kp3ZvBlkvw6omAsJ4A$>jnv|3!llTDnTkPa>_6jOw_SJ8Om z;y@$|ZP~lzsUZ7b;@)KXDzrP8QOiV{4V>hoi79Mr+BPNeRSq?ySv)Q1i}?%evm9 z8)LapOr1@#bDc-s+IZONrIdP|K@-&b)l1qrvUQU%63)U76QagFF_QwB6oF;bI3v-w zBpv^<6nrnclYBXm_ro&4Yn(a9>>gj<;3B5KwC_D%HYwodiNk;Y$s$f=K!)jWhCc>3 zrd`rne^sx+I!__BWv9Q%hM3L$z6s?R+X)4Up`{9%lF(vZ_h6d(Op}@uB&1^b!h&G_ zR**kCHw(mwk#<>jm*J#cT`oo_rvkc-Su*jrpQ&ss{TVz(gSZ=hF!S4eaJrhXYYYcQ zrbvhGZ9ISj_P*-zs)lX8&iBqQkSwJ_oC&EJ>INt3XX5v0tzC}>(v0542xrmrLXvOK zM9m}DkKGhA9Sk}M9hV6rzh82--}P#Gs$O_+DTf`tbs3cd99Hw@lo6mik>Di_dDW>7 z6?D|2*-YR=1^mHL+9TY9F*E&2P?9vgV5e*3$wvY70VUdAOr3kFi60%Q4J)#fI?V=i zGlnu2+u10FVCUn%cn6y1hq8XQXpHuc{02n;cbG7PTy<}p@W#D-ysO~rN`H*^56;H> z&1ahR`pEc{KRX&p zfE_wbWsb5Puw&w6U@?8=_I9(DN%km?%g9#W623*o$>;p0#;qY!#M9P-Z@MF|B%rYg zLKOBg#wW68X5wRe>NHRg`j;#SP}-W@uh5roZmxAS#3WU6VHvECXS{2kgjI456Glqj zojPXSQSPr^qnY<%W-rq7sjsv4N)#oSRsQRlA&r1xl{nS_aR{Ce7|!&FGjP)2*@ICX zg34WyIrYyb&eznD2kuYt)ZtXdZ^&^cKM-|YGr2|!-W~6N3xwIKNCLRuKpU=!o1jl2 zN!UcSP4QwEt&^z@_PES92wU=_dqZa=TnMI^5Q8&-5C4QZNd3um*br#b>19?866$#a z&`=k~tn!8L=Zb{$#t4GV1kKs&*By zW`K_T>e8*fZqR(3c&5MD}B2>G*)h@ zN$XVo<-F0_!f(hOW#KntIX|_I#$rC3m&RftQfqI{z7d+dq7T0g{=n@qGnKzrn>_*o`@ojL-__P9rAb5Ts~Njp&N+f2l~z+!vA>LnIkm zW_@#tr^gI#XO3}9u>)x8tU`?7X;E#X)X2G-U92Q;2BNmF zZcecH1!zRyO3d0}yv`@q;*XP;w7~p}ciL7X7F9LdB;*>rhzBq{l;0Y%63w7+%C=d6 zsV$tgxv=hgKA0H#J(v=KqfAxF&0Dacab|GvpEz0|ajHS$+PMX#+;WN5g;faxC#fM)}>y<~S6$a;+%&AWo+~kum!g5kKWNAd~>g6;}6u;S1M0 zZau_ntj`!&eM}@;Y&F5VAa1=_FFc%Y*tMALIU(EW8^N&LuWJ59aZcad_~S8PtKsF# ze1Et8sHNNUIu~=jvC^H~2OBanBePa4yK7(>tqNG!A=vM>5;}Q)6nz~$sQfJfybFUl zcF<0-d4Km=En1L%Q?vjQRqeq0*_G+3i9~gk9z2u;Gv8q8a8XK}owiT@)l z7&V}?pRptxK1&5jNnO|A_s^n?#PvgiKuy%kMnj0znXjXs>^c2{88f@N05c7zI;Y{J z(<=BhaQkYrln49u%hmHA{62rj4}xmUQBtrcNpu0w{eJ4cQUDqRKrj$%saZ5ro+ zvChcXmH=c|n64Qu?OP2SetANz6nR4A*320Xx!}-6@|IFn_gH>zOV2P^IXh5Z+L^{bC&<9v#N;ga$4A3}(jPxqM#wpoQ!Zy&{xtEz7y$K#e(g zyqTbNld4G*CceglypCg~zn{X@vks2f-21=j&9)A%8$Vd;M9DnmVP^euhd64EbirOB zD(&@@cCP$MvF>J!V$L~x6txin5FAox4RC4%_R*w%l4gXqhHeR~iO-w>88)x*g>MB0 zhAO-VVWyuckGC(4DI|JJO7i|ruaExDdxP0|^iii5OE?g#hb>QDYCU&8I6n5V<7%8} zI-H8-8!%6aOcBzZXwsJ*Q=7~-ua?L~cvhQro@p)MR#GY>+-M&8upq{#sGOhpai85w6n1KuHopmE2>yiF;f)<-D zj+>HJoK?cH!yjAFXx8*3oVBws(E$vly+Ypc>hh}BTJjoTm?>vGSV03XV-I6FR2Ju- zH4lJS^e^DLuQd4%AIn%_8znl(+RZ-zf9+=?+4l}E|jfIfcf2;CF55hkDo%njW{dAmz&O&(B{&xWF zi=8;?Yvdl$u|ua~5OR|JdSLyL#n7JGee9nZrfW;S@_k`IDCv6Y-CF0q_ey#e4Zrjz zFaHWt$01ddNhZ)|q_58hMuM8yPDq|ov2})D-ReMc_03KcsoVGax14_0z^X!@I%YjQ zm;e+evlK7G*d`i~G4y#^N(Xe`RA$&Q7Fg3OShg~du_q>%qZI`Aj2~FksNKAaeB*}pW zkk4?k!kqH3cfgGqy?+yw9rZjnRM%1Kf}gPbH5=aptBHz5kC&Hfam{~)T^C8lCN+I# zzL}REw!0Lu}(5B!3E)VS1z(DN&#fsQ)f4BjH& zHd3hzRAoLWHuaang_;z*K8<7EDOdXd!2iO`W4XN`-EiD7Iu+xnS)q5((U$T{?R+m` z(wtqxFe9eCgsVj@Ev%s4`L*_aYwyVu*SzM^p?MLB-ME-_mX$?W=IKq}Z!TwI8Zz-b zBs>~CZcHLOdI=KDYr%@c&YTrE-#VxE$3}}R)TNma8FTpe=bx&HEpKyxa=-blVI!-r z(FUOXp+VB~%lO1S$*+Z$m$P7)c=|=t!VY3Q!xy-OgS*a?C{2~Azm1eYXB8+`CJMRMYZNb019m5*v+U^7Z&(d_MV;~62C`5K_ zWCA@6G5NfAeAy^Xw{G1}h8XG2bB#x1m6f$goA53@%iuj1-D}S~c)EFEpO{5FTfqI{ zh%Jg#qW&n1@(?_9uc@$mAhz&pfj;TYx??@6^3ffY#}s6fVA_XeSM$ zX`>3!v~BHVfj)3Rf-zi5ixn|!=NHHH@&PcOVT%+ujkWU~?rB~e_3ou(Vd6+;cy^n# z$clW@8RJmI4AR(q+vy^!^@AhobSv;Fv*2OKroN;Mqfo;g9H9`H)a?o|N zQTnNUjM+nz!TR}XPR7;alwQXr_Qw$#Zf(b<&Pu&M{+RAPLBL>13S>Q z4Io%2rCB~|&$KfBwEfW*G5YP(rxVXAi*h{%oX6_TxPIOZrDQWc6;t0$VlvRVoskwA zv-R52K>{G8#6gHxd#@J8YfOL{%~CmL-ojo9(_!b~rVoF*=(g*&1%KVMNG`n*6N28S zaQPB&xEFDOuz@!1V5Q~mJ1G9^`EhuCbTm=Nhjg(TnZM?QDGd>R>tLtOTKDWis5X-h z9R7jP;wLnJ5Pv_E2i6Sg73B|}d{^VJ7zVQz<6wZ*#^mkWby7e;7_44!yllL-X3lrOXi0(sVFL?!W*|Y8xQgJF3HoZgdcV5RGl+DBCe|| z=EZ;Ef2f4no%0l#Z|DYX*V#SJ)Ol8W&L0!k;>n=W69;wsOkf)#yhKWjXO6lYTorS1 z+n%q+cD;4zjXyy46ShRKpn7a>ZTJJ0CmqDzd>z*|4<3|jjbqO4%tH>i%aZM+(KQrn z4s2JH`@`98fDz2Ek)%u{q=|8Tyu`k#n4~howclJFic6QbWiPi7?N7duBpLKC>Y+l} z(hSF8J|7Ak%#5#g?H1G6HD0o;p$LGDCb6q&YQA#S24+ z=HTX@D4_}EDm}uKS;hGd<7&rPS@tkt(AxsZu8n`rA#=bEo%C)sJ37|Q&}pl$QhLZA z6r})@MpHRC#=LvH_}bVSoX-jn{)3&nDx>8r@oN4#6I*W^p(J8o#PnCwYaaYwyeHSy zDyQcad|pf~g7I+c4H|VDFnR3Re^TmWLPCoTu(IcFE%S4*ANifu!@-k9s0aGK1$W)a zCcLSua+rznl%5slG5kH78-ir8h_9+?mf7NA&h83ZxyQ@LB2b>s!wV>I?Y0y{CMI$H zInbUiE|ABI;vyGV+1h*&dL9u(w%axGgJwfm``>FJuhg`D!Rbk(meX!6&cKZCmpbZ`)tzOigO z6JjXprRVhzGq`M13`uZdTC91mv+No1=gpHnwJN^;+oTjEiW672vW;re7Ha#r+Y9RE z^gpt?9V^jy3c#>?ml5+0ZqW_fl<*WPT$#dH zdK?veBBPb*FS{N0B`VU^rPk=6MB}p_I%}IkeqVR5pxO66X$p9%zfU0E_?(2#jg@c8beeSQ%*oyc)u)&mrw@nTwexT^}_MCpy6TYg(C=xTbr&)GYfXPkZT zE!D%t@RdmYbJ6y=6G+Xc@@tS;!DbGnSv~ww7Qdy}wh2H{Wboo(T=ahEtb-kI)t+B? zYH>I%Olf8O3!U5Biw3OHDl8#Yz^aVElM+bQf~9q-o|=l$)%q_iq_3c zP9@{`xd4F!?;N1M8~9R&oG{?Ze+q}ryAS*`AZEClF?M@vwPI;7v$7P|{CQp#t$Drc zqR-%s%bvFLhms!Zhh^o#{~W_5J*13)00fF^w12H00(Y|1YAOrTW%d=GF;zf!43yk< z+jkPoz+*b;5`Bj&z#OMfBz`(F>Z7iiPf~BaUPhszN@IV;vZIlqpj)TG3WF0qF^7w# zhmw8#YfCZ}MgL3>n+BFh6?M{WI`y@UY%bMnGh>~Acx@|d-MT>2I&;z6T?3xp9MB@{ zb&c1*-K9AP1vQ$FeQ&>$eJ8&fJkGo{Kg3&27mSIZGsMm-k92Wa$J4lM(yYy#a#P0@ zmj*^>{cGf11q==B4X%&3S9I9%+v4w}5m1;9qo94cJ2@8}f|e2NkNw)#9L&Ab(4J-&MvdB9c&&*9Tcv-w-J%CY)*%5xI&)zl>rwgCM*BjrPj z0F#7b30H&m(ud;)E*4;(fPmHySn6|=LTKOdQ9imyDp+!ZN!Sc6Xjc2<3tNi5z>|f^ z=C~uJ7Aeo{9o0QmgS&=b$O@T0@HAnf1c-RUF9O!A+Ha3wX8*&*)!EG0F70&=3qFnc zl=AHVi**cQF{Elw=vl3uTMuyg>kkGxOO@NQ*L`u-76@*8Atqn$`;}#G`xDg`YWxRO z#(0%QWpkfmk#q?tMyC<0K{S>6tyo{Li2PqeR%ZlqZwr#6+As%LHm|Ij6&CmpmcPCN zmLkuVDITcviZoF8`@w0(X$&)>NPybaL5HwUzTJ1>vvI_|U_iWD`S`?1&@j#|_~-k1 zURYl4A1acM=iV?%w29)AJRZm1dd&*h@=K~{(FQ|Q8s&K!bG)~eKA1In$3?_Jz$;|k z_*H^?BD22Bn1>={lG6e>pKy_}Eb=haK)@%-iecu>2Y6^!agH$?G>a{qys{p4O!BsA zWnM2)ac1F{#?&5NJ-)AfIg#vVVJwEIBJa<4dH%15*JP_Kqk|&C@VmfyUvDULsX1=> z>Jo@hCWC}QhR56|xc9$1sD>YYY4+!oP5{Ht+jGN@7cFNrT?*(W?qqIjv>9e==*PTX zy_iPW2GOYk#aoriTcPrt$@g6@^&0%yx{R&P`Y3VS1{L%U@;p zB8)pvatC{=d6RZpZ!dIcUQ7`B!c;hUNvUL9h`B*u`{g)Fo^o1C4LspFFD|ltxbRCU zSIWjG3~9@Kudm@!;GJVVKW>V$s|f(V=z3{AyNKkg;ujdDvwGUtp%yw5KV6@n{KHeu zFIH6)aKTnWIGO%s)8*xcOH7F+S|5^?u~8kGQ*0Wi8grbS4c1dR@UrI9sa;C@tF>jd z-o&dFt0v|TPud$S>RWd$#w!H=t5--|ssl>&Pzh;kPLeT4?gTm7UM7R)i`szT$m?u= zkMtaGP7=A+OPorA3YoTr4j2;4-<%}m-p5ehR2GQLyk++jZE`R9MJnj84!v)04tYBA zwQ13kUMxnJI86w0T9oHx2WxDUG}4EqaIFN*Oww8u4HTb= z?|lcPhh^u9Cf!L`l{EAux3xxK1AMfKA_03L$S@7giK%?D!`W%H`ZWNnl?0`GX@Zu+ zx0%IDGMeM&61)a{Lhew`+jrd8OGI2|C8Rxk{Q{lA3zI8*y<#h(P_-yqNSz-bBj_PU zS}Tj-4=C~G5?e)~dU`Nw%BA>m6gubtmPHS@Gazk>+g_bp%x%N^vg9o6$g6C?ukljN zs)((aDX;&{1bj2X9Uo8?jm~>#jE3}%z`=K}w+07_T1RaHg<-nJ((i`nK-`6t5ze+} zJMN+UbHYK1=bqDM{__WM?OI5 zH%LMR*zt-956I_qCW=GNhs9$k-HMeR$#9lh|6BaDXjPsP8GQ!rMZFj3>Hd z9!uK)@Yjr-cXZGR6yGe_>DNK30vx>+ts!7!kKp02lI90&7pY8kLpBn=4vPE3@nsGA zgdTV-)Duu6^UcdvtuJ_@nftcZQopl&j)?qYTN4JrlBfRm6n)R#E&&JZ-|SY zox69yVkQsQ$;H-YIsB#(#hw~5E{?m?p@nJ!XBi9j^-QHgxPE}VwXalFw@dO7iBovY zMG}e326oAI2)31(_t2-n0ou?;^u=iBY>Di$Z+dslMv86Wy6Euq0dv1(||1^p{jrEn>2v#47_`7rFo z7yIY0JfrtF``RloqxB!=N7x&^i-pgY!@{NeQ^gvKOu3!_A+Y>gfnZ=WmDHp3ovCfrn- zkkopuX$#99?pT-!KBqaEsPTqyK7DSOO zQcx#<0B2x|%R&$(EDlQKX9k5#3t<4Uf3SN+$ zS8wx+WpuLI`=nD`y_~g>Z!_e#{x0q2Ms0k}a87STazQf~Iii-kW?POFZpj75#Tm$g zt624f87jgejzuIORIo884{@HI+nwUz^yJb|PN>Sf8x?{iMfE@qS5Pg*;n@cC%U84* zfMRX5d+hRhpdyvcyF^lz+j(iB_WM+5VY`OJfepYisd;OAC0cs;4sF@>E~eLCHa2f4 z<9~j&Zci#RMdqZ^|LYCM>Zz>?iaFRS5uWr=5$xpflgaL|c&`WLTc6iF8_Fvdvsy3F z2&Xp1RK)NQbx?FY0ylcnE{zEQV`?7@{Q&g#J0hJkn#N=yp0EB(w$ih`q+*AqDvwk= zsfbC?y{M--t;rb?+qDCJ^#B^~VE&0^=QJyx0oIQRn!ZEym-7+L6qmfp<-SpcM0PK! zV#S=%#ZszLBLT);a85oO|_1$F?g2?4If{%1SAoqbWP6f4O zJ{|ve1p&UVx|mY2?38wn<|W9={~2u7Z4I^DwtDwVKV;fS67r;|htk8<(Yn=CtRM66 zXhY$jPO9@SU#nUpbrj(3dksySNzVxcEV5Ly%J_;#iQm>gGu-n=nr@{mmOcc9VMAk0 z8lz&Wle7r$?G=%M(E!CES~IJ!)dNtvaZ*~L2Lrgb#V7nk^J;|;bsKIA4|G)y(Mop5 z62Ss<+a-cyPO?9m*-FxWQsj$r6%COV2uc~Ts-WXd{ZImtd3hbsLl7dUps%&zvti7a zX0Osibi(0VscO=H&Z|Qu=Qge6{Mt1xxiq^GDiLpe9wHS!DFR5=^vSus?sv>Hn7C;N zay0#PTVFFEbp^h2Z5d?z#%(JZGsr7toaJoAh|9?ECzDZsy4pYvZA-d*5_+1^s<*pM z)j$|n3&vY|J0u5Vgk)L^jwXU-2pcX!FC8pFt#f9oCXZxj7RR3YUOxg8Mr5or#LatB zK8^~`D>WwkjTr#t{PAVO6D^1kRh+d^j{@W*^bW)<>0)3DoLo#aB(t2ifn!F@hHu1Az(F6)T@*6LFh){uj-P!~FhlWK3vqL2;iS=g!?TVl1tLzzv?sAP-MmvCum!lP?_GL%4s&oN3I#rF2 z+Q?IateL?7-AZ*s^*=Nu**KcJ{2v+&rfN>h4c>P<@siz>3}8BJJg!Yxa&TfU50`{P z-e0&3-39XTvTqui$&1Lt?iQqWHqfR(6rk6Rvbf|TjMbGmTy%{EFc#cPyI2yuQUC;= zY!P#bY0q?Iaul}SK_|>8_Y${~wfw12g6wtG;MI8^tjgk+L;bX^t}^e3V2j=jE4Vfj z^!=x3eI5r4YcAWJo~w5B`dJh)#3uSUb3x!Aic}Q5H+NvZu+b_L64{Cg#xGjI=X!|2 zhM&QMMvMvx;r%434m3g(#zXPMDS!?35jfih@t~}#c%#%PbT$|aQzcE=LC^DD_8-#G zA&vAqF;(%*U#d3xw4U~o#N%__ieTA{IK6}-Le1>C5;eub&#rEYj_uWdig1J_v09;* za<*`ji~S@DXXsd=D;|wNBaRI#Favcw*445(3dSO|-$_kVIpH4UiR^-r{~uTH9OcRH zg$+*Iwr$(Cd)l^bcYmfaZQI85v~AnAZQI-P{q3H8cmK#qom5pSxk@T|axWlc4ZIgQ zQvqbJlQdQxI1JZ+ot<;srr>vqBMK9FJ{=cBW6!rcb|akG-5LSq!Y94PnUmpV&dJh~ z&8FbB1)21Mmq6#KCVs@fAlJ6GCR9z|s}nf$@iowk?ki!Ai{gp|XcjW1RVBJ_hd*Bx z4uVRqqB)~|<|L6f;u?4E@i+kTvHT51cNJI~S?pbPpj{bSGcDH=SNt{1TBX%8O!(Iq z4PA#s{bu4|>f|`>qcbF;!w0HCrl@_6b9C>!A|W!o_Gi-8&!-2_zfJU?-_I+0K2Vcy z-2)*)bBPu{xCS^ab8?UzKB>7m`brt6$}wfZdxjmWZwFau*b|$;EB640{eMH*585Zo zn-v|2K+D)s_`R%t@50pb>Sz)4qgYnNa}2)L`gzikdFv!#u4-gtzYpo)AU?*|`gJ}{ z=KWQb#NM@dhW_LT($!^iPq^ZG1xa;&o*2{hbtx_DV$7nAN=mFNV_fKzBgM;(>pRYzgrH+U& z{Q*n>?e?_WSi$`S&hDjJLw*ciwyaetTj%)LXHyCnr8UDH);Rt5+V^#JPr1cks) z&{gEy=zyBSwWErrM`H3w0#XK_r8}vss2DBNd;UuMaS4i)Zsf;&vU0q3rb%6CJRSUf z0in}sp-%|g+vm%gT)sZvwQsM7JX~dXlzw}Vn46ry!7M0^gFrEUzl9B+N^SQbGkaG7 z-y0oZ_H=gLtE9V;`N|%ct7i4LL(_+-5IqxA@Bu3;Q2$IajytFgr9GU^kX(Q2KWU8y zJ133+dxoc^W1@TQtl4%)dlsU0sM0WSv^|cjd4dO%8^RC``0T9j9p1bvCz~^Mq4Frd zEMVTXgS|Rm7iFe7wD_c19}BuDS$g&Z{*o3 zHZam&n%mNLKF7~HSPwSRR(K%4HpkDi-F)569w+hJd04#PG@4R1t!g}IDNK9L7O&rC#=7ZXX5C9IM{oZRO!sN$(eY7Ps9gTlg#P0`~)C8D8I1?2;DN5Zqb?!0HoFn3< z+7piy^A8esu&*CudcRYcM!(~G)PIm100G$f`Jw-}Tn6p2dXXg;gWL9fgynDZ~Y%n-6@S?MYXlN25x zkOL3kd0!H$oLWFwN!7W{YM6wZSyag1>It19p?d@W3>^82 z;#xT^QisA4KWjZAG0IULv_?oW%7Fo>-yl=X&U*QO#H|0M+KFYfotB!&+o2Z&3we^>aGVz`7X1*wd=Zpk+qgG zBlrooB}?^o`4exeUG6PPVTg@9IF}H4%W1RfUJKm#;Eg^&-=9;R4N}E6bcKKlv02OL zH@JU!#iBPDu&#OF#?z19B|@NbE5zg0(76=FO++R@`fwk6;h%o!GeaC{dTh|fxWh%} z0NZ$i(`{g4MAL#+2#F3kBd)}{uq+D z)J2H}3Ua)~qq>JpPmECe2h#pZ+(wlQu=9@!_+{&;3WEpLC># z7IrOM+lb~eK2JN&W&nfP1?i$(C^rI9Y(ST}kJjifI(InGZovW}Jmh7?voMsP1qocd z$?#FZF1?ueZ+go-5UxF$25it)wFJoh@!J@5u4$IDKZbC?njt<{=0TRRDV6YenAAR7 z+PL9nzLV1X4wTqElbCS8x<+ltT)5%l)e%zPO)f-!>;PLM%+3`}(VZp42E>YyIdP&! zNvf5D`_t8Gpt%dp*a#1x=?l(aUKafkRAkNg={TUP$l9A&_xnQFQz%O2;P4_i#4t)6DKY(r)0A{j5?EBlD_>&r7*A6(_~sbPca_pVu#^<> zUCBS!{ND0Z%)gtxU|exTGtzY`#9{Q;ZG zb1?~x7z}tr+Wz|^6`WbSbjN8`^I5yl-`V>Npy_>WWE56N9Xx12B`1s%`5A`Ry5MB$d1}5;?wO*) z07@*2kty`Igk_%;?$Qop*&Wq4`)BUh=Y0#pYkbmxj`*qwA*iJz2p5dMV-B#;q{)ed zrNumLYfgjDs51428_zrTfk(o4>mu+=FH>G$||`f~qbk zIeCp)R{kA5Ty}9h5ld8b@;bG!KPohHhl$M^@fbNFsX>PuA{I9ZEiE+jw@ySYabKca zH$gdYEFYNA1Xv{)&=N9LEmIz~V@l^RBsM@$*_+HxbUw0JUOteM(4)DLhv>(MS{M!z zTSRbP47h(~gQn)FDKP&qbHyBCEflGzsZg*d6QV6DE)t8D5)Fb@FsFto83(ahv!CLw zxaedmsacs2;n=&}cNJU(Nji&!(*sC}VBd|Ikrs=<8P>dC(E1i(R4vUB(^y&@E6;dz zj@UZM`p8u~^yArs2K=bZ8OWJ$lQ#=I8Xzk=Njzc^*3E8anv0Ia0z(lsLe zXK|tJACXB)WmRAZA`nRAO2O&6{WymKv}u+A9r%BSNO}P;V44hv%z^YCcJ$|&*fCaO zL~VS=bRBBi#kU+}lbOs}eiLE*+Y(GEm8)t3Vx^9;d@^eZ6Q)_7DUH8^GKD0N{*7*JuSsw8-omY3c3ZW2~xlR!A4V1nB|ol$UBg9KbRQgEbmlvPl)d76ByoCpHF; zOJI-K7J zjof0-&o9?w-*N3PrT{N6MK2!Q??VuM_p6KnyQUtV?RUdx{bdH%wMAam z{jVI~*8!E@xHnF|``E7sscL$2;hy~yTYZ^LS$;5Q4*_8}o9VYgr(d4}SNxx6FklaQ zkM{dDxfM1=GHsDQRW}~CSbO8%(#oTbdc~dV7k7@m$xsO;tfW(We0wJuV`1m>UDnlsj~20+O2b^ zCKW=ft|SHe0{E-VNWOs>UcpRi!lwp4oSnu^}R)P zEj|JYdjKv|gn7x6qpwVQvxixBAq zpY4Nf!|T3YCGDl_!qUmO5?INNYegRi9l+z7zEDQn7(&W7ZXI1~Oz^~R9k6eHWfGEdJk_Ei532>p;ve(fZC1NjH3YmoH0ggG zY<=>>OjF?zD2$tVj(8uKQmpkozudcwF5b3WzbL=iHVl}Rl-np>r)PU|5F zrYv_xwzh7P!+5A=`_`^)k}EHy|6Si%zGpuyZnomB8!Kl^1mk;I8(e*81VnY5+2XwI zzGdL1_|@(#Jv7RBwr(a135hL%&bl`}f@c9#eXii)v-fs*96qeokt-`lv;AU?!8Y?isl6Z~qrMQvB>ZF{~&;Z4x^yRFX72~Wl z)n1du;EdX#ote~)9^KeAQ!Ok{Ml!OH-VxbMIB93*?b^^5XXB7S(+%(Cu}Bz0h?jI0 ztz{gz1V^@v$wn@$n(2gA3>xc4F1)WdN+!iO9Zut0YgQWr%y9N(&pnREt(mf$4qJwG z&8!b}Dz;P)I7T7`KDP}e8WRs1q?hcTL4vbbnogTLjl^+FZynJCZigp+$T-Chc72`1 z0G=PNtg$yYLlBJTX9yD6EEj#>HYWqnv#MO>dG~sm* zMpjx>me@&qHPZ+e9-kcfqQv8R?A)fXqr)>@QWpaO_((OGI^VbvFru5$)wqitM2U+2 zFce}RIi5o_Zw!GPfdWzE4(>Q}?$?UPs-Wpw@H&sEOGg@aJNg`7SKUk3wbyCJYkQ;B z{h7^iShW64J~Z8mBe7-n5m^B@cSjQhX;-JFmydyq5}5ZN^n^Tf6;pcR=(ZWqJGm$Q zY1AfwnIpwP3r0ZL?YRwOyj{7-cs`%H1ZK&c8;<>4KRI^231%v6M2QEu%Hgo|A zlCXC&G)507&U;Qa$<5q!4g6Gw3=-{A zU<6HJotX4#dtT6Hw+F7?W9{m5rI0G{L`5I(Q|2*0cg-@&>N!svxDx_Tcv}I-5qg#< z$NR1sh#kvHDiOR_=;7W(OP!(No0o@yN-F9jC%=6*Ma)_P=wpQ^IM7eMsO4Kj;!t4h z-7?GO&l(r<7w?Mt-30s~!ah!bw?@D=<&2b*`%Y_}-+&tAX>#)$9@(Qd3SY6~I-0K~FBJ|G z`LjHZ?n)He&GncSJaI2d7(0ru6k7Oz8sCY`t!^5w*r!C$i7_0hvX>ADoJ=-^5O4WyWun;nrU)8dk))Y>~O!x6J1ljd8gIvHZ^9dY|` zyL~!*ay*@TynsW+QekADWb>)}-X-lxz$uAhV2$O{ZoQLs9dZNE7tqjmH0BXs+YFA( zEInkuJk8y6P4*mLzy%>P%0)VHuQplb?$>5Y5u1N>N+3wPK;l6od*lZU1?2{D{}X|R90Qj_zkr#vHZ7gHHEasI56}V{X@Q>O(GAl^wV4I4 z@A};Y+?-{(HmP{HMh?E*qhIF0Iul@gI+W<=WVov1VQk=*Ql{mR7t@g=+iWhLKPY9| zN_{5}IpqX$ik}=Y>>3Mp*}VI*u-#O8=2(ke=H8lH03|!;>{V`aWmINagZaMcF?3NE zt_sTdImJas{2N0jckOAzmHtmf>G695`=0Oh{cojC*+vq?(S_%-{E?#N+B6D{L`_?# zP8jy27!qN2Nq5cYqLr4$WqX{_+{tC06+C(P^e|jU?#Y*B)D_mRyV(J&#dG>?v& z!gyx}fKG&KPC0V?O>5Lf_V~yd6sF4ajkspVB2oD)+oN0?WgpKX6HTL*c85#Wp%VKh zCiA!b$%DbnB}u-EUS6(Y@+Y~>tMd%bt(7)Nxtxo5Nh>I9|7x#@B z?vkjxu1T?koUP8*(NL8=0Q&j!={B^pcBSEClYLBn`2{w}qQsh@*vI)vac|CPvBy(x zQ%^`O`Y7%T*U@t1q|CmI$?0w#S;usOtuTu_9skCP$8=0Z-Jw2a?#Pm)n$3Qj%XQF+ zB4o2!@!k{*S_(}sbQXP>0-`b_7j6DtqV&_%Wvh%NLT&HJXSRmJP(32uhOvu=L2vfrYBM8^{ zub9c}nlWF+#`zx|^8qGSlJH$GheGsV9feCWxd<_Y?Ff@b0=zCUS*Vl!n>9!SS0^9K zmJ~XSqbvNmf>%8uoBkL-lq`|0=wPkr0J>ivm2dODXC9p}TAWl_?tH(LdIhUDuOW|L z9zLwyYaoc;ssvg==n|9D_24b}u|fVqSb^iE_#QKc8W5*S`v{nI_J*EZvuh0MH_n zxBP$>vgoS*!!|wSAJ4hh<+riSID?GD{Z|z%RC|{cI&Rkm7gy+j;hX7K&V_4YcV8hWEXPOqFSm)oW;v2+&3GXDANN{UEdT*`re2avmoiEWhdlWfn)03&6OstUIrY@TBduHiDN*(~_Rd2C$ zU<7yG!_!8PUX$Bm+>F6U(=>M7q8^%sEq)h_DtkTO)=$~8b^KNV2C}3xJiSXwm&`f; zZ5ak8%n82f^O_3$Qg^^ZQ`h&eoEVXLKra}6a4tNZt9XM~H55?IiZds0+wa_t$?42F zQuwD5cCM1y13?3#qvH7sb~i4F<`mE195sZ)BtSyJO9 z%n>lC?rfn6wPcmtj|!om9ZaglcK6FHhX!TlrcRWwo3t=3+#qm>8Gk(NazV?nSi`pi<`1E(4I11-eN1C7WkV_(E94FIbjR z9nmwMG)u}%1_sRsf@X#NU8u+#dvlvjX+Wb}&~DN3gOvFzveN<4@F$iq>OGKGKQ&qC z`Hl4ZRd!@e<$VUsZ!q?2>`3rkvpG!sHddRB2P5}5p7~eI*@wtu5R`e0*p(wAUy_)n zc0HCoz0+>gb&@iDxfkP|?d(o~#<0Dr_sUpnXF)qt>Nlx5yvOq;{v?q^2^;bew*ID2 zFB)K_G%B>kP(TFa-27@1$KX}vkt)a$Ru5&6!j6z6XXmEkq0NVGbKE{o!;MWY3mjt%wh*@l|&eWr!PjLSSegpQG9AjSMdOt29oYfJ34!o_9Hj|x)6qk z3^0)j4`>WenuomDUCt{zfDZ*Ls=Z9(#Ux;eD?=M`i1;fB(<#M0ex9~ph!em_PrLs^ z?>SaNfo8G@i{PYkKY{Pb`NhPy!DwKfeCuG=wb=4pb>CBtZQ$|VN38Z}qXpSId4IVI z=PW`)Y6KP#9S+Hci~R{EJfu}$o`@v`JH8GM225d9Hr)Q=aQ7NhLye1j9GLJ9ZZ(!* zwJk0@-g{snPTMqRye6@NEQ3bsb6{Td+UeS=^?<}85qfw5=Ib~$f|7k}zSpRD8)bA` z4sO(I@CN|TV;z#G3#KDHiDXNKK&a&X@UrkQ(e@XxtU{4srA?El>NO3MhWTTadv<7e zexU7RD#v}R>!B~^a@QVm`U|s@&)AKL*;kkqXc@B8aR*M|i_udrh_7kC^+#RpD}NXM zo_&6BM;}&$O*uRf_ZNHedu&%4;nbEGmeHOP5!B@qL*hjr9SW&3t=ir&IRQy=Mo)!VUazJ^KBqpG7ET&E_nal2_eBU?)3`UOIc&Ia?qr!%jdPq z9PcVP$xG%`q^R4o01?P4p1-_6Y)q#r9XFo&B+k~FAXT^!QYvI5yk0JLw})fam$~~% zHOvfNCpT^I$#_+;tgmB+E?VjHD+CA0F9zt8+i6tfrVawqR-lxq18T&S5F%0}z|FTi z$X!kt(CWDV+(9mf#(c%Zy4Jp8K1k9{&@#5g7C*SMjTps=p|`b4oO8W@Np~|;f!*uJ}&NdNcSe^X#M{>QMhkG7_g5*!X-Z*#Nk8 zU0!=(pgL#rTs;a)jzmH(;@C7{5R*;;k$$$L;F8vI4ag0NqxFEw9!UR2T>rddXhZn= zJUr|2dqu*%zDt27CG`e;8Dpd-@XNWMATlH6nDby@9^sqqa;|+`Um$GxJ>jKYfGYVD z1bT`17HssCJH~WK4vFVM8M(|E^OuxO48 ztI72hPEd>fmZP#@s}%Zn8Fh!#u23#vXNHQ$Co(4p*RO*s`3!4BBDVe!Yn8ptUJe?6 z)NDPBCs2*6^_T&;`J%5pJ|f6G{SEhsUT#FR7G=YK&uJs4jt*xYK_krb$PQBT*R&5z zY-rkb(%_CL}xas0G(44 z(H=g}s~eYjrl9l#U1zd>hg63y-CsmjQV|FQCs>1TgMR{S>-3ndf+CD-7?UIoBF%c1 ziU?=;z~Qxivf^4e4-sDA?}U>it-lS%<*V`+%3ZJK>|ru=P~e6Yn?2~NP2&~0Mg4NE zspCBt!n8kc1!JXcqucfp;7d)$6e7{kVwx83-GyGlp{6HpZLAI*Mi$K(9twvjmXRn` z_IbYVE9nA!)m0M1M~4LR@%A3=Y=ed<00}58VCy%BVx__D2t=RFElctB1oYOVn|dis zGe%#BsCST9;7Se?abpTGMnI~G9QT}pp_0oB?pVbIX|m`MYa9U;5@bObkikPfH8cDB ziz`)SKqw}9{TL{Pxc9jE(Hp06SDsx4p(rg^6X=at8KkSU73ScLyB3r$ldDA2piCRhySjk zH5Tw~BESiN+@_J1`euovX3<}{!0A|s8gbp=*maELBurc3)L_-{spBcf5$^}dsv*U@ z{T~5=+k%*Tcuyp_31x)VXT34`s+@(ojn=2nH?t+3|wdeMg zX(C7W2Zi}`kko(PMv{!|KtoemID!Jgl_V@Yt{_qEqo+BQBvKdLU4ycf_^lP` z2BF=Hq7g~O5A*v?C8{C5*|H5vYSH5etIJJ($k@>)JYm1yRdzOVtEjj3y zOd_v6-v-NxZmv{HR*kb_5Dc)H{q(p1R;+ogbX;bFC3P1gY}1kM72Kci^FNGmsJE(Z zK3oZhOuM+IW<*y(uf7~wRDQ_H2>4u>~F_L9b%~Jw= zreTAsd%FNsp@(3^+gWZzgm1UOo>-Zao=hRjWw8D+NWmj5Axr=^@}}PoRP&fF)$@bN zebK#$Gaii6M?M+dLQq9diCC0l&@yg0FG70*hg z1xp!J1!*>xX0}A3&pPF44rh_)KJtA`&mDE0cU*Ab#qAe{aD&6TcG|GjAQ@9XQ=iu% zC-A2p|EjeC37>m_ByeX%7ZBT+k>vXWRczLk5nxne{`b3{NIl zld`W{cBo7jZ|<00G~Q{46jFV=T2(~ljtZwLpnvypn$fAN>B&&S8Xy`_t`2EHdS)b7 z$GV_~5N?A8M#nga2Fh0uDPt&&=S~}ohUkW9SF;SzT!i<5mH>dKRG=jS*OXNMnVkzG z;-0o#$g+5f}d@S)(0tXS(4H*GKDJb)QXCZ+@7jDezX9 z$EOvSF%`KAi@jqxdWT#BvIi?%oIsbbc<6_x$X?!AV4xg26j9+n4XYQJM?pFgY#VZ2 z2PCCxb3~((ec$g#k?=U-+mU2tE4#vGf+G97L4%Nn4LO$IkCOc?PgKWIfTE`%Onyy0 zbv0drv>FJ(e>=oC3mrLQr60U~4wH>j_q*fXKvk!3CeUY6ssP0I(juyu{2<;S)j`S$ z&gxb#w0ZFJ`XL7Jb~yL+;Z~+}M48b92pxsQBTJRUMhqUgFS9!BdwK$VzTCf6z3s$o zgnWe&J^^66Dw|tfzIUu@V1Rk@c%R4?#_=5iy+1{` z4KgJyl45c}PT>9b#9bv{Bp6p*M3!9*lA|uW$#uEh9M0TL7fUU~r{*Ydhox?VKxD_O zr33u$?HNNhZMLCp3|t8VO_T1q6+#aX5RQrtC6}#3`+1vx4{V9NrZKb^N*N^wZpY@( z{EmO1jXmv~HX^ulyzPa6rZsT`G~x+LB=1Aqfemmm?jCVp|A8z+q1Mi$(nyx}pAs71 z{IkHdBYpr|O8sC_1}sxVy$iBAKVXcH7EUFkLR$jW9>d{RL$`10F~_k5iBDYR5*6lx z@^XN!qoos;WI2chzYZ^dQN<1HQ^(7jg-Nwx(6yqWsOxF$w1H$aOmYya!!UbTa=1oAEy#5g6!2f+dpSQ{$Ih=B1a`Fyv9*Ty zp*&6FCbMx{&^5WlP%Y4H6qI!8w64wbv0kU}Q|8%UI@(^&z&(3jI@awkj_B<3J z1-O5wxqR?_Jn0*#zdfhMYn`mX9sv!X0g5GSG^?A-;u0(c`UiRQLk=7{q^BW>s7i|j_zfNQy@l6IayKw`_@%&!ELD z{6#bPE`;Zh8m0v-{3oL|f!bX-EPwN{_!I*9xjg-I0W5(3dLl%SoHDM3H?PLjMdC5I zF3@?&{*X}m1$+RH!U1GGbwI=H4;8nt$hhOj64JyR62%_L=%&VztCv)dCTYHJV?I-1EjR*LR?5li8GWrxfYY0RXp^nM>z@^ryS`35 z<~-0gcIMp6LNu-c4!cWWbt=1tbveU2M>LYru8tt*E}43mKBRbosaCEt>pO1!W;K0! zS!%m%A7+Fa$)b`B$9yeO@-w(W$v%VIW;5?1MTCtHCI~7Q2pYF44uO-SWVbUehtmK` z8}lUGr&slc6MbGF%!o(t6MU89eDu|E6EY!F@0cwo@>%~xzPRL59%rT9X_}`XptEHn zWuM(%`Q`z9QLZ{t*-yDCO>tx1_FpwU6WU|tOgiiBhcY+mP2cz^!kca3+uYZ9*q*lU zB*g^w6XzWC!2>1bs8*^kNem!UZ*?z8xV!1}tq-YtQH%f7Au-tmQdWjJQQZ3s(s0RN zlU*yG=znI=SX}j+XqKAMneE+l*BMYc!=R0SN5R6b0C9dhmMIwPkLOg`j%&_NI~W9V ziye5o2R}{NKE~7<1A3bTf03Q3ugm2iYTBxyTyoU4y48900eroIuB5_$ly&{=xAGvU z!In3ULSfwc3q?(I7i0StiUwRKO)aom8ucWQ)`+iwnEXtwPaY}jkQCd?YVk8uydpZ% zM!!wMqfv66^n6$COcA3=@=AL>KRkWrQTB9JUXR$d1*?|~&ae)2(0UN9$*C^tjc>r2 zc;dNNyU=q;65#Bg|MQpTNFd`58v?9sXgPZm)Kf-_Z|Py9RIhS89%Syb6 z8zb6R(uMX5!#g`@8CWNC!X6Dvi>Aj~=9E5e>Q)oOt@o{|55wMu`tII4hv*;!*?H#; zbA#^Z;+PA6r}1rPM@i1^^QTMEuHhT7$Xq9gATWbvHo#lqfYe{7N(KmszU!3Uet#T5 z{T`0L?h}}S&PPh2$I#KiFoyqdGMB>Cn=jxyQ(&n-$(e9mnZhzf;b$-ME>Ew4L)K$J z*+1LFo@5`!D%Jew+5uxXH|gnP?ETY6J(3VdkR8-^?d&G3=kx5#Bm)2H|2-l8eU=OozYV_jeYA0(*3wu` zY+KKf5BU@jS#Qu|Ai||EHiR+GqswthRx&gWprn#BOCuh?{LXy${7(?ln&}c0#)hOj zlDnAaYG|9&RN4c1tJ#rq*`PlA2rY&(yGTXFDT_R!%yYBX727rELPNUVz7cbT(xEJU zL!6q6+=Fmy>4})1+FVv*92$jR;Gi%zH{$JCnxPK^^<;203PMJow%>v|n2y%STxvtG&r? zB(Um1SPLQn$4yy+sh;EMoK8x!V%Miz`vMGr3gTaB`4!1E|hCo3R0v#h-jgOa$)rSSOaNY%%5QW;zZx4KhgU2l^>(#q~@})LPFDmNS8Pr$W|5a zn_>=Vq0Xv-oF}qKZm5v0S{}-Qx&MKViN_88fsP030vSCQ2>+ZB%U201E}@n5Lt2wP zryZxjq(PGbx5cC|r$KK3`K2JHL*oH=UZpUkLlXk|rYNRE8v?zh)TTrG6JL;Qv*b&t zmIG&TA%xIu0_SmE6`*qxvL5X?zy;Le!*4yMsAfPD0M}nNxn)4Vf&jfWIp#pu0$FDY z)bbs+eSD)*j_k9?tO`Iq0=n_gc( zb_VqQ-glm=KE;Xj1n@uiyazWOCZ{6i>onxb>DXvaD!WeH znSUYjL=wE<6FmDNPwiawxe!?POD)bqzWde{Q$01@o5^Z9IWQa{x#YSsxQ%bC^a%X8G_Fqc zQCI4WOvgg%W{Z5b(4m(EbBOP6DfUI1kf-)*%{U98=n5)5h@zPJ7-r}4Qq*Z8R^Jod zC{iY%Hk(uyapQ#F3S1WKld{;wR(=rm1%WhdGQjI=pLdopblf!)D%XJ0x{94wV>C0wqitm^zGioG8l$tFA ze`k=xr7Os9nUaX;$+dAGM5qgNyev3)j=YVA(P)YDr~WA&z-g0;GvH!6+C6Gt)7{|s(kpe#By8~ zQ@~ULxlZiT zY!tcE#_}V}@aBz#R!J`7v)4A)iC0R_HL_^0bHJ&Oag*HnOl6vU303-*+5)Q-4TVl( z(c3+sP=X3z`nz0&0mJ@EP7UiZW)ZW?2ngKz0yRb_L@6xH?dFYjL0K!w&JF$drXJP3 zxxolso7_puB)}Z6#M`_p>w|fJGB&}^S?{l(x#^voG()AWoELYIW2Cz?r3}(<$s3L-ryOfu=z5)vw2yWle1*x@a4> zfMC(Kf2gm@!*QCSozy9td(_N|-9BK&@C>?9xC~s!$@%Phz)1AKIN+@fW%skMJ-CA~ zHEpKQCRetd1Fsbx(@e04zgjyaw9v(;cKMcX(8$Ee{aOXc=!~LTlXso;p`&l-Ioq>i z9SMO(z5fK9>IPGb+B#ZK?Rw#7>uHm;LdI?R_j{g{BUvN5){H1#BaS4x_dIxBFIw3p z6+TqHIeS*6XOGz+mzvUZ3st#sXYUZl+5D z{*H2w)4X(LWc#bqfpLWdKLW9BWHc2qq=-m<`*yl`$>6n5IIi3I&^T)lUWC{$z);MSeF}kKf>403%?yY>Tss>gQtsZ)Py& z5<%0;$I{vK;F%fC*X6cwH>VF-*I0>mD_ZtOVQ>v!zABdV#fB;xIV1JX3>}n5;YFBp zpY=E!+5)IaO7d5VeLg-_q*a@fe^ErTHz_#h2&^Us{*kST3vPlFE%U(%Rr4eej-CBO zU+5`WY{=m+SuC!rqbD^pasVpF(&c0H9Rh`m;R-74{;bfK@Ov6Vcsi%C^)mh6?2O&t zf^L)?(e*$NkJvZ=#+thUCA-85j0g)OEyV;(tLw#1Ll$?tgXU4} zSL2;Hwt6F5vNxPE=Uukz9`>Kn&)VTh61f=e(V`wWaT^&|+~OVWcPLRBjrL^en{1@s zXSdIjj4QMWy|=tampJ^WLvEWCL=YrvO!=PR>#Q@Y5cNlVBkWj4c&ah8J_)$w6cxvS zkgkuhn5xft0c6dk-5@8!I)0*@VD42x;*saB0X2rt`|B7$``g3O-bqtm#8)F5E`aC5 zXY9h6>#0R2`oWOVx>#M1&c8On9@vxOO5Y^_bxc>X!lr^1qw1Hms(if6(bZ9`v4hR< zos7yMZX9}7`<2Pp47wAssCj+7m;TmsguWp0CMjzdGxW6TL3T*ZN`c(XS?e8|97x&%o;*h)9eY%iq{D;ih`jlXA z{Cd`hV+A>=A>=2Ud3+z!T&{2;E|X=D-(>j+9~_gyzW$3FMtL>d*2&%@UzPwRx3}f_ zV4%JKcd^0%hpzAG!PGX1-5$YVj(MDyr)U310!dJPWp6sF{nsbP_}zxk|GggxFHO1zjB!&B zcV*hK2M&I1grFpSATwd$J@`d{lPpJyV+sI$XTU@x61^Jtd$oMBrTE=+V%H{l4cI$c zllR^!P~E&JKq3c)bi5*h{87pppao-HpX~QFHg`F+F~#GxDM8ns$p8EgYa{H^qXe}) zH^uO^?%N7M^z`-a>Mkgprt)X5Lt$|1c6#}P8i=8>-qMu$8JspX}Xl&x-*aa%a78WlP#pIs6cS? z@OXJ1E{Bb+uR(BVB5IXVDdJDH&1rD7+=hV-vI>}2KcsQOvsPo=9-;jyc#Pb}4!t|Y zpi2GUqm#b5&BeJwMffkz$l%2v(-)oq-u)Ry>T+$Yn4iuTB*6%_{SL(&f9e%~(kTY| zl+=pg3~UFnOQ*DA;Rk^hDAQ#b6=>5ZZpK}6&S&uBvXjfyh;T1oOdz1IPVOr9u_dM#+T;j(%Y7vX z$3;MGiFKKbC;T-dr>8n8_9t#cVSfd87V}MgKGc zeerxzoyOJ(FET#N&O7-UyliqIMOFSAdDBl7#g<2#D1suxA|}5I%~9GH)M!9<#5|#s z36)mVr~r9E2-yW%;M!2Lmoz4v`0Ep=y-Y z4KWhJTq&HPGk-3qmzmzH7M|F>i{(4H3(gz1darFoOyUuN$!P<7Hg@P}%Aj>*{*w9L z(Jy_zzg~XqBFc5>pp>-($pJ4pYG75KC~fV#+?P)k{1vGB8@#%XL%KaZjRhx8#Pule z+$-?ulNot+^Dpm(V6oFsDAQ+>8dX`xR*QToQT$y|{CVAciJ0#`F-=@W>fdlO)yD}1 zqTX2mR#Gn75&BV6H-!aF%E+kCF%@z%K#Z6(&LW-06Q1aE5z_)QW57`*V3z?^tAN$O zebWsKtEUx?E~E}3YD#taJHIXH1%ZHRB4LV)kVm6XYs_HB!g@@GROpjwQI%!OA;&6l z2kxX+d__!WG-c+@ysx6L>C>S6rN!T}VoBXoKXF+nj&#_Vn61RLfqjdI6TlSd; z4xzQ1zU$a1iKI!^``}WDwG1`Z`PRpc3SRF)S--V!Y zv7IWS^!3EaWZhfcUUUTUaG-=?z#+tf-3Ws-xYH5^D|l_B41q}F&SMSwGkR0dhOJdG)T&gyr0-1?_w4NlB> z_&gkh=4a@&0hCt^`I%j@ia`RzL#;gsajtPZxpU$0=UBWePw8$%mp4RG?Q)ZJUlb}% z+9Z2(i$3K0Rp)ci+b5+hx=o%!OZzVZMx{OIlrBgpvjm!pVc&>QE{uA;U$$r>-L7UV zzH(3wPExE8x4zD!Peds*EFOX#^+~B*c}PO_rQlAi0{$wO@-=U(oth51rMIAD$#t+5 z=y8nMd*+ymdUMaDUsM|jKVFc9upu5zX!$O!&C!nfqa$HGxUh)BgNA80Wio~YYdWiQ zA1KMdCU(vKYebPhmY*JpMy}8<6p}`Cq)3}j0!c@?HQMcikI&JO&u2|5LJ`NDtu8|m z6u6rJ5zGDkP_h_`y1y#BIce$y0V(^A&*lrJey6{b2XiP2n>cjQC z<4YpJ)rEZg%h!1XZ=)~u&3Kb2Cj8o!akJg3RkzL?)jT$fO%4Ol^E>sq%k0iYJra`% z5-ON)C{nqCB9%>jB_7m*Kd>|L0?9=o_)U;AVAu(K#PMW?czU5^ zElfGsQMd<-*1$K&m}hxDwF{p=amEmze4Z(h5rmkHX&p7Pp?eni#YEq>*<^-hozDcG zGYJcfGfB|&)Hfm{lfdxSTDIuJ;BYRc`g=v261=G0Q>;FyeJebPrz@ExVxAL%a4uC7G$Inl)?dMtYHS%v`b!d(n3wPZw zKW<{?-30M(8x!wPjjmVJ|bShe;)3fo4vRe(%l`3i3F) zD}eBL3=B8p#yLs{uB2WO<#JxWcmH<_qE_YU-9&v4w7E7Pc*0EfArC)$*bvUAoC98N zp7CvBtd?y?$MuqSp4rKog@7{xaQsZK-KwC-sFKy$njL$`Ou{(oPF(r z{pAx?1}aCN%rK5xP4Ik|f!M}&JC#2+j!is4^@ zM)+c5U|V#BG=wK#x+IPvKSnt8Mk5pHpo$NFEM?EtiO8n?S|js+Hs$>6MgKPC2ClW~ zXGD0W?eSj{={JO?U#kP$4FQnm=Brs7!|52AC#0N6sxZ!oM0nC8U)fZvidRveIdpbX z%!5W8T#_Nqe-8C9f8kcnktL-`=?%f^df-Ir4eq%|Ofre`B_f92oes`6`AndVqQ!Cx z&0&$?%U7KY>RPwuM~WVvLK84=g7loD1M|9 z0vFAOZpQqZycr$I{anC}sVeu^s1a_2!sMX1lD7??;dVP!w*(pod5`3h==@JOp6ZwI zkuFO)uk{jnOy-0I;285&H?}%s=xyGA>$ov3{Y-V`o36z6EQ7N(MUxa;j{88*-Q1`$ zoEJDeH*itWcpXibutW4XCQn@qUrR}`$!Y18+WXMcUILU!y2yFYQr6#3e2q97m9@v4 z9vWGsY;ExrZ?ZHfSRh4zZ`!gyxToaH95^`!3t0?5+CW4mdzTXb1U-E!d3Pip{iR!h z^5x%f?s9KT#Q`I&ownlcGvuo?199OW8}GIjpBhm|C>aiaQ@vxtFOo2E3Z_BTx?38t zMjZiYHHdhmtZ&+(g*$D{o~|0xw%-KV4;VdaL?AQ6>}Jz-VommdjGH^69#<$M{HL-B zit!T$qrK0kM^}w4eSND3D0R4_nQL%38&9idG$W4w>1)xN8q=j&Kt_}$h0Yx?>whWA zMi5bib=Dj(8Ks5*u?^xFr~d zD$C?M9x;><_|=2#J5%mIcue39v5<)qF~6*UdhC!V6&8jm$Tv2(G|XOo%bjsF4UoWB zygPCNg7Xfr3ggkFrv@GTBUD)>5o(OL@D zt-U?0WeD(FWTrQ;@c83`BXRfR0q}+T4MOYw;*-H)_CZM0xH9nfZ{}o%_w>Da=LJ3- z7cAe{swC&3^va^{ujVrVi1)8S2O4~QNj=xT*!y=j<25kCiD--FE9HV30E7yd;*QyM ze#3n;g0TMy(R30RR1{QrJ_vDw=)IL&i^#V%;H>e`1)RQIzkF+P=a<$=4sye>UQst? zQT10=3?^%EDr0tNr7Z6Fjn4dcK<%(rZiaA~qVYl1tFcpppMe;x}{Tj2ix#NjE7w!Etvf z_1}q|@oanuZMRVaH0FAp$NX~oAH9m;~F24B(Gu>)kSPmm^ zQC+y7D@*PBXsEh=SjMC|yWbfb;b-LowGhg;ZM|B9`Bz2`4sKMfC_Z}j#3rT0D8#gqsAEr zhM0z$hDOs*Erx3sTtFQ3fU88?MSY=M$vnYokW zFJ(5PBdjSJFz~_H$v{8TH)mdH&-HenLoJCaH|wG4B*_`M2iO3V5JU8G^kf6|$ddAO zBQ0^#O7l#(sS=8)VuNpR8rXO{U!`RRvu-3JozlG3kHjQkd3J}tQ1?{Qi~Dozk|q;f zjb-4dV~p`VbqXbj)%)^RQl+|rk%;zQ`)}z^X!>E;STU z5z($nfIeoYJafXKgLivPeg7vvmqi=iMjOZIlkIf`W?K^z0A6{paQ7jmZA2WE5Yb|e zH>Ak}EYyGKCLxMb7Of=(@0Mc#>2Sj(<&&jR!YsJmA@tH~-j583<|q=^^>1iaQT6WdrW0ga9^N2clR#3G2no6#UdzF|9YY&I zXC;ux)g$oS`fulHgZ-8&KtS<70PjnNssrz*55pO$%VS-f+ASFp_{{C8C1y+DP=2djH_tuI8CN6@^Kb42MFNf zcz_rdH`CNAO7QJGtS$Wf8d;e)II~as_U<}EjIuz;ENE-le;UgE(E~n-XQd9Zp<2DO z5w(O&=zdO20WuondIoqmTnXAz=&XUfb8&h=cb(>&5{7Vz zKJID@ah6gC{lEH4-9r=QspQ6l_<2r?v`JH4^Bp8=9NGz?G>Uu565wS6HNv*?G`p8K zx_-2PPiUUigPhY9j)eg{BOy7T5#B9mzkm+ML2|ie1ld8d;~pf9(K6-$raeqYkR=mt zmAfDKib700EW{lFEG!nDsqXPp6`D(hpz7dzB~U%gZ?#!%o`WWh70JE>{T;U{XzKo;gONF4?er$}glY&6O> z(t^*S@e&%NhrJtre6bB=5u#=ERDh+-`QM=5EVwGM;1f=1bZg+_PJariPKB}1bl1S3 zCoIxf0!_L(w9S~P)1)6hrW>HLrh~F%ccjUhn-3AQVqkg(B>Fg5+L=M|@*dQyJs}L7 z?Y#GGeB4e^nd;L63LY2%!cKP_(1M`o8D$kUD-#^}n~`~}@bic9zfGHY9E>>ZY;FIM^!e0&gW`{Y4x3ssV)POt)m&dAtASJ8udMN~_ApxDz*MwS21d&V)Gmjcbp zrRO{TY?W(=Khtvo%X0-809$k(>UO+IP;K&p1B!M%93(V>LCbK7%LB3Upg+W*q(E0| zQ2Y;)C>8AS@Ox2y|z3hj> zv#egn%uZYv?Ry+RTO<2n@wH5Nz0<>$e_QVFb=_>i=~*o=9?E6o=VjBGeuPjbyfOM~ zDEi?0a_y$iGhiHO;Crt)YW%CEztjEkZMkdHc4Y#$m!#`)@BaOETx{1ub3$+X%coU)LZ+$^D{0R$NTe;{6+T;&&mzuD)Kbvr^BO^G&R~_gg?#p858MA-mb_BP!sz zDn;{E`0(l0BC2WfVPnB?d|cejJ`R^r`*VGvx+M%f4sd+Py5GjP#e%1a_2J|3NQWo<@wU1Rg*mP=-=*01zJf;{CyGDFHDoDF>|)p>{uA!00o+=IHXvOI z?rlgI?DrmtQEGL~IK>7z1`UJ?3H!$M^iXUDILFqcqv!P0YnXJU+E}TlCf+DPE=7nU zAPDU#+Bt-hIg$R5kEf6gOf2V5n6{bN8NZUB^e%pr(49{rO*b{FW73!W`at*#bBmrh z5n53c@Gg=qKF#?6W^*%j`Y*)LIBSM$5Htnt+*_jVnbFl2e-G)cP7cjdy}~r)Q|WY0 zQ@N+Sep#s?aaxQ^&p^k{pc#g?2jz1z0az0oS6Fgl3J}|WaR$Iv8*z=+kA+Ve;wDy3 zNzPy+VSuaqf2%i)4=?kbb-|LR*6Xe)fN!4Cqorgbxbb}H%6;z)g#izPNA6`1<~PTK zoJ86igB;$F!=tqz&*&4{^b>#^4wMIH(kD>KsD+YZh8**Jdpf?l_)gmSdi|Q+4L}jj zLizNX?9mcFdPIfc%|k*f42IgYt(GWnT=L%NoA2w2BmHbG=;1d56W-+`K(lS&%W$-2 z)~?#9i)`#P=JeIhl+q6f*fd;|jcPUKv{iS!1*)`85I;Bb#kGh!l?hCJm#N@ULHlFY z@w+NwoM5OxRrJV$NcinJO!#x36)?|}B;niptRz~3eA^(D%Y-?WPZfW7+ra&|rUmsO zIZj%OK#W}982~o$QFG3&w>o!l;AeWa_H}&nJABqvRC59Ejb;n#0C888h>-v zmWfU~TBylB@9oq6#~g_xkJ_7K7Eh(k5YuieluB@u%8q$2|E>39hQM_n4M1N}O`jqr zpUAS#`)=Tyf9=}%%T3i|@Ox>kO;4$Ot6b@H4Oe1<5kz?wB#?;1fDeE_5gq zLt3XSDVBI1=Z>v$E4z2;1#^lUw~Y&~^>7*13)0veXTsI}t-(<-#9*@lA+h(?7;3rcXBaT^v6uN4Ma?dR~(BWF6B*lU!;1bC}F4|H)=G!lsCh1k|FAT0VNyT*@LOucx zB^kN$VaCf48uEZ{F0IoF7lq|$>T5DP0^L{$8+qDM3A%VK9!^h}{`o@x?`hZ(D3Cq7 zk3+KESx$aAq1fLCJ5ka*Y1+a_3w!WS_ImL|1k%Ge=DS^=7 zYI~CGf6KnlaZ)Z8@Z^UK-@0iscHSq{hj9+6B2)7RKM4YhovDbyD}e*fRGgCHf2mzj z#}j3B$tvke6-yomPosf)lU8M=f^gIiFF5BrDVmy$vWgm-++8~)?jehg?)Q8<2!Oqx z2l?B-wc1V&=NEQ{T7beXR3resO9$usY%lPSMkDX2Z_9U!Sc}d3lwY$oAeG-U;fep9RDrRG*)^edn$a@e$eeeU=YP8&cWMZzh zaT@d5eTS{(tj*qRN)d|p@*mfPBPAwSOcqiXD>WmZ?5e+8mPT3V2xuKXsNet_CU>^H zZCue;iYh>Hu1vjY%)3(IS}G@8ZeG9`SE>{_&2G|lAgu^s&X^9x9BIvVSHK|@_A@E| znH0X-NHY9{8^)!nGcpViQaE^})@!v)eoiE=-_nWV^G>1@(L)S9c-wE3)8rQPc84%eh!I%Kh;QCwCh+TSNc~2L##{=#E*m%>BE5Lk`6Vg zNTpB({soyY>Y%ay*bDjj6y%u~wECxRsLTLDo1=2_<{SGjl#_|3r(2WLG zlNIEfPo!ra?xN`c{7-jpj6E%4IpCFM363Z;xjiDK2mDtK>EMG({Ek=f4Al=z^ZiKu zp00|!k_|m-Rd|+hQAokFhkp6`g-#;szT&%i1!mJe4Igr!-6mGmOsWJHcG9K|dZk@@ zvo}mS^YDH^Wv?#E>b&!t=xbcUiiiw}i>h|5*k4b@dz{w-(mghUB12|Y81&r7x~>pD z)f21vQmnr>?D@++GHsHHX~?qwK)LW8Z8UXrrMYhL=mNf6*U3Cr3{O-@LOru14yHNl zuKaC@@C%&%74M?#Ghb^@9&kVu zVDa^j7i_UQ02ju79=GC~frrDFjBia+#}s$0TrGC?l7~W6VH;|kqU(cXh6II!)+-NL zWqo`CC33(f?$|Bex~Ipss`x5aYW;!CS;=F+4c~7?6ZH=>XZ&9a!e<0+sqqmZQzv@` zFg}H1Gsn}?SX-TnPIwE84yJU$n>anbZl(AmtF;R7p0 z=N|FGM;U_iRwM?=de`1~B`cVg;9&LlQa9O!vQV8&?VBEi&{-Li9Os3*spy{`=2DCj zj9`D+Z2(j@@R|Ry#;cmPTrz9-5&r{@v|LDkMo_46()LQvq5be+Ytd@0wMug@z*CC; z++%tmTQ4m+Oj}B3Th5G2yI70qHm&t@Rg?Wm3g%_|n^=bV6OTNn@xV6+*-Ooz`T;60c#*@r72AMLz?c z4B278RO09Gz(>jSNUcMqK+{4Az0~N^gV6HE$;Q!u4zz|D=)I|t#B=nfK$Y*-R;&U^ zKaVriulXA|q{P`~-sA;*-x`FDPx7|`BNoX&9IdlE_6NRZxKxqk+94s8}0xUFSIWPai%U=GD6@ zmpJ9K^^=CXg(x`NE|SP5-a=xGe%O3UP7FLkLCktb-9Hnm6{P~8zrG-GlkYcxArYdWM}CB9Wn^0$?_}#b2NljlkjJC z((D|p=Pan7H{#=a4cRUs$qq@_V;dgZ-(KQ`2F>T44WEF;tOeOCkhYJLne$m<#UnKwTba z!M8VXSwc$*E*FEv2RlX_U`mEztX?=m=C!xo%yRNhbWP}J)yw+g;DYj_(U09z_HKyb zjIFQvGJ1sZ>rxrnaD2SfHzoI6L#!c{s}U{NLc@zXP`V>DN9Jj5w0$6E-a*Rtx_QVF z5gr~YHP$a(Xml3r9Gnzh`M<7VdBTU^lu~IEptcV?msb>NJbyUCZu1CK=CSQR8TST6 zOY@iHu4y59%UClDwe%hC2{l1vZD%l#8WaOei@Kyd7J&smRIGppZJ_~dX&F)cDGV+eH{y4*j4UQE%pPr+L2`bV zqD1%3L)V|m>3Kh6hYe_p@r!AHZKx&yM>z12JaS|Yp0gGcWR`KMZoU5GVXu|YWi`z~ z;;VR6q*cnnHVol+YcTO6P&*CViP~MgUZrOZWf0vL1jdzfd47flCb2- z$2tDw+E^0mxTZV6$45UXD7z98oQBcn9dd!xLR`46MOQclUF zp0@H(D?m|iNU)0hz7*O|dYfbR+M+Z;yKNhyOBr>hQ@Ba3_QsFd=XlTIx988Bsq(T( zfjd?*denognS%s_G~l!^6%{xE@WGdg6YGAHUS=I9`#a-x~Eu2G~MN4b+WZ#DL(%xFb4s9V)ILyqW=e`%&rAZ78wZFG~6NUa^GK zPr?XM_>M^&s&ErK@t72~_DBujJlw=V{Uvp|q^NH)=^^5A1I%ArOogep0SuA!!#D=~)P|lx93#X~X?UF!p z;>5N%|GHZ?f7CsSS&*R#*y>Nkhr3O9oh6j=6<{Fr8@SasbgR7jGMdtf4nz!~V&Lso zEyxHcm;~;oxe9mgh@FsCWS~RR1gyuP_YJGPq)A|qh?+GV>kn~tk?=<_MfIcHpOSt; zy6{~99SK`7n*ae+Gf?2%K;=*>3IIF?-o*GIgb);Oc}Oy=7NHx<^Yio4EM(JPmh52?)kQp44K!}X>`V+?y;)9LQeXce&5^sGwgvsU<>c(Y4ipeaMC&cJ+i z1&{lH%htxMknek|{q&lgKH$~idHd$pv_rVqUQ0H%{r7xp$heR({aI_LpY-eT%|VCl z{>vvNmY=HtS< zT6Jv2>1i7yl!7w2R|!~k!y^DdcB1%9EK7bRJ+5U@*x54wVZyogQXRb~96JV@6KokKIaUn=m$#WHWeR%T%by zR9i9EBEaj%l>fjOTj6vk@3CtzJH!_8v1RNo0%7zp609JCB|kEntq)KMbO51wi{#3^ z3~quWAUNC03x&L=a*`zwRFJL!A_yAQC2)D|bWjtp51MT$!xFc+kL+A2)MX&11Vz%mA25Me{CAX6>pr!gG`7IVjz zOa!`K<$^HbLfl|%4@ociX@;$GKBRwqQmJ>z7MR7n5lANs|8&A5LW!>n1$!S3bp%3} zwd5nW9Q@S@pYy4fY?1PBtsMO&X^P=c2yozm1t9SM!gx$fpNdl4;p!nKK)9bK8j_Ph zajZX8CI^lkgE)hoPuZrA2gL8-q7!vK3<45cu`oOaQ;YP1p_<_PLi9Y;olAYG!_3)g zBDTmLJU7~wVjMlxkI8C?`v~F>rLcRpucFZj)nuyq;mMVlugWLrD0nnWC}p^q9X$pk zrI>K=i_&p1ouR|bq6ZoNFWtkgB6D&u_95mGU_L>m4q|Vd7m|uV<2Mz`1wqQ}b4oe(~Jq~^WWR<^` zHbtJV!AzEHp!G~|;m`By%D^Pjn`I+saH&)PP{)2NHRoyOXmP+*Dh6p#VkSXVVFyMT zgPU7_ih?)_lNyy!knxK;D8X++euAzPi~kF9Mgy2fo_4nuA^@(E zYUvzJR~3=RniwTQ8O&T2^kQ-vn7Q?&d^s6Jh7!Bpo}@nqgBd7p0p)SLTaZww@Ij1F zx7H|ce=L&RN{km9x#lAlrzcK33Roq|mxUO3l|4z3x`su~WGD~^)E2+x1_26j7f@RY z(u0y3ZGU6@&0JioWR(+sY@b{Jf4IJFwOKBJ7Tyv8VV7kx?TJiZNrgewZ!jThaQZAm*zOtv^)WpTol>%4w3`pP{WZy!|gGe`{qDM zPh$l>mMY*1YGlgBmal9J%)H*78Dv!`|KZA3z77-!c56}nhaYSHsnG*IK|v4VIP7W_ z(G_4P7CJ;Ic=&kopS3{-gkr%3qG2fIlrYX>wFZ*%gX&Ug5Sqm5QmyERUr?c;aKDNK zaA+3+BDRjMqEn7lKsM0;aA65BzcWOp{_|hP=N{s}jE_8Mjo`xlzl@KNo=mk)MI`9y z^2LTaGSGSgio`e`gKF^gU)H{|$Tl!@?*49V%|*#@R8WC}O$dMrMuZnQMd_8G@8%F? zNe4}*+MjkY09spyB$QN`xh4u%#uM)yldC+(%NT=y)ATpK2ITASy zW%5d8AXGlg{0ZIp6J?^Ba;8hHZsS{X>pMmr{J)CpP_C3^*wV>#K~A1g4hq`t{tloZ z5&i3*LodK`sDkW38Z->ztb6u0P?6*=KoO*?2{Q^FL$t&VWl&U+isZHF34 z{J54K@@J^7B{R&Q8p&_>i|)XN{LYCsK<)O!t2XPpP*t@ZmOeoJ5M#r)z5V$k{j%%% zL8tOyeReF{c!btj2qqD)O$FFWFP+?D>_q|N0D9+=4dsts=*@J|^}e41GM-O> z(5J4Q>jkg=mhP{jL#G?h#uf|gEsB9@%~Y;wiTE# zp&v+6|JWNAh3SW8oD?Zi2$P>ou)c4Qo$crOl3fhSsBPu2d(_?rM-JFG1hGv0I6D}h zAE(*hg?+I4Jf06fh1M-{EK6<{E%^)xDfc9%hH_@Ay9AHfpne5|KZW$vc9-LJ1D+ux z;1B;g{`f*%r*sh?o-n5_9^p<{x)!g>zjPNj{VHY*TPuAW%7&oE4)IhNc#ovf!Q?R@ z9qWf@$_En|$woJc4|<3BWzK;rb3hn)A7&e={qhY_Lj?-dLcdR_7OTGo7MF}&(rWRN ztw&-WdMwgrdL%_RE4ILd!~AIAB32M#xx$be-2;J;BD+KYJPGWj5(sV;6RO|0(Dq2$lae-NA`881Qls2)KRgjd zkQ1hOyeD42#BZDd?+h_p-5d(OrvIW$E>}g8Uv_-48S0V8?x;>;EkqM7c6q-w@cS4w z_|%?hK$=_@+L2bmoTj*WjGI)&5Win5f|M2iW`YobNeoaUM&=29Io^9(F2NHidRS2) z9&nDX;B$X&`#qtc8LlFfi90Fddvu&JryjeQK4xq4(UrBAIwWWE2VTxsKflFHx4T)Z zk!q7!oi@!Rg{$GK#04kG-x)&dl;`+Pn+wKKL)`?*;Wx*fj4PkmFYNtAadojN4>JSR zsSsPlp`rllWUdW`(3{gXrr#6Bz7yHPDSu?F#u;SpZd9od7R__}`KPQ?c!%xFcz>8G zKH3N+d`ykyz<;|zaE7kSZS@Rm6>LYKszGc#qCtda+y$->LXp+hG7?uPR_#9k0|2$<4r5n;zxOyn_ryH@+H4yUfHqi#Y1xedDVTP#AK)3us<_ zbbt3C!GCQz{8XXw*5p4Bkv!s2VLT$32?0 z@=ax5Xr|(8_vrlI+dvR9_owddV>tT@0fS4oa*NanobM8m9AVT@K6qj&{*gIrfddf0 z=)sDgm|7tllDM3+-md-mBI)=vBBnLn#7e!Ul)UWmeL-5Sw3bzYwV@4% zP(f9)nay#vN@Uzezw)E{B>gp`bQNHX@VFMSDvQ4m+yisYM{h#!yg)AFCZ;UR?t&RV z0pudw)g}FoMEK`;c9%Y1IQD{8>e-|8{M1kkqY5fc%Te2&i2`gQ)K?nxytNAST6E%?pXNQ+7!Bte4w8uNPCEygGysY0E;!+o z!7R$Y<7p>eDwsfOtcJSfxeN6#dxHcmW7(KVo=KQ!F=a=uT;kSxj2;#*_5#Ny z)V16J)S{ms1@-tDY)Lt+SUIrtE^8jwtG`m*t^yEzf(^2E{BURm!-@sjopnfkkhK}! zR7OuRyX#{Mr!Jhkpw)vY0swRMe`ru84dIL+aC;CuOa%}=M4OA|Fc}2$D3~g4J&^Q* z+l0vVo7)|H$YUvSh#T&G6jsOms=P;}I*Pt8$N{c{ZU;A-1Z{}|sdWt&NEf^pBniIp zSeL}Otn|MdFzg?`ch)i1TU9A!w%~jlD`=n}6Y* zNX=~3-e4enBni2MNX^B`o!YP1eBcN+XaHBQ(=N*1F_SotN^EXL}HeM zIP)a;89Fz=hvg1j@@ec}`1DoNRy*{6mQptbX>UxDG`iv=v`>zF3;$D^9EdaDOMB=X z%alb#G!3LZgq6V-7K4}5ae|{1Q!DDFYvWD!hQ60PK7JF3CD?5|2xi8> zK8xJJO?}gxs?H6}^=B1xWCO@ayhF7A@G!dS#ere8vOIBh`*LQ+OZO&naVB-k=Q~#V zZH%c8EyGO^H~rV-dAT>+tUtQOM6Mw;2miNyywQe=3hO#pmM|7~fV0780(8MbNDcSuB^bXKm>#2F1-w1*3b(GP*MbuO(g`vgVa9=P_O zrHZA9k2cJU%xk{0CCJ6FDts|9j%^!g4tqHL!)15rrO1)Jhj@J6P>qd9EF1Wx%tjX1 z@0JYiat?%)Yg3w;tGTT!CvN>%AVhr&Q}d}9xR60*0EnaBae+LZm>913`LyrmtFB{P zLXt`v!o*F1o$T}c%#{yA7>Kn^F^2b8vnL7{rDpMcfPpz7W0udN|4%*Eb?!h-@1ID# zlDpJtHbK0e24dpMtbsoIMb5`fb-Zo-x8s@R z2zNk1=l=B@DtY^E9>zJr>qo?po!Bozp@&rJv`I24YpHSi#y^k4)qYlq9vBGUDXi^f zszdhuMol;yBGaeoP}Dh=i#Ch^-At20Ff}-2FHlqG6;NZt z`c|)#g(4hnmhP90a#~!p9Bb;mUA%td@?`YC?Tx!Jts)AaryTa7riG%PUa1)3`0WT% zOhR14~mrKivv z8R!LeA>xJa3U$PzZX&(ki}#PNA>(-mpT> zgR|ZGZnt6oKP>~#vZ*MT{%^m1p1%FIeevZ34cY9!L%!WE)&)1&4%1^b0S*E+vZ=lU zGEY``i~o11aO2(&48hHZ9<8ffzAi>B;wIAV>~?!HI@o@1ui1WHpV?0WBM-i-cUqI) zN5zCRWz!`SIxNZ6+Xt{g2U0b&($8)rZJzf0f%?3x;Is~f ze(H>|nro&Lf|Lgl>#18SM+ASTl1(+ILoA>SB)y8|nIkwxf!+Y%02r=5>O=yt1fq=* zT-@m#To=fpTluk;@cu{4;NY5qQH?ox$;fdr{Z&5A{b$d;R#?*UJz}oW3dFN54 zuaQ#c+s7&7JYf1aUonETS4|Bv?8>awP-qXq%Pv~+d~80SU^oJ87hdpa#Xeb~Zmty> za&Y}Ulmi8N6ZE7nB+Cv<`X8WaKN@Lvsu%b(*nlk$*e*AbzmbLxKFFoH8^hXv7@p-cX?Nfr0*MmFeC*5i9)48u zCYfG80mPFMs%6f|&UD*mexbw-B+)91x*l7q&VP~aMHSiSW?r{``6^HLf67#6hwTl@ zz|)H=Pq!z1w-Jh-9Q%Le>_vt5PulcyvmJ_6^IERNvy{#4K?WCkvYvse8hww*=r=?~u6XU;2XQ#@Wc`SFRqysa)bwrs=Q2 zvR=s_do5MAS=w31#BiQWHV3icf8xY2pBjr#tLtsv0Bi-vv?N98$%ZVboQ;er(2=iRCeG_g6_$)@j19tU&S+sWy3%&x5w%n+ zd*DLueTtFd*ued5*@PVuQ2lAr2h{cN^@SPjk&@hCZT0&|JU{k9YHg!wkTo-Hgws62 zZ~fN7B{v|Gz(XsLRokquRu|YSxMJ*}<7PG}tDYuHoJ>#lnA7SyPo*uSumX5}sSMH= zIe*LYAF~_2D+uUOrWG<^JX5Awr5c&RspnVAvGnM`L38hakDadQkQ4EUmRD)2P%CqS2#HH%BDlBr%h8l8q#h3Jj8sp!Ptu z_k`1QWbhmdL;SkCL#e&pFIUq?EX9yvebTNGkX+zU3b~W=up(DuC$!AaJFQhSAY#}X zAY8hYHWksxg6RY0bc+?joDxZnO)vE{trdsz4390o<)nQ5!<`JiD}ehMzF)5J2ioUy zj=Ocb-m(9qfK=sT3K`(P%dW~1{L3D0pO+GsX9XAkKZW{j6U5t0*PE4lj!%i}df-|B z8Oi0lUJgnAqU!cPTW^>4-_}bt3Pxe>h4<$Cn_t${rAMjF^Bf|}V((eq3AuWoIDwAn z3nfQ*i^UKIAM;eHjUd*m1>hog^<54+FNZ}Yvp@A{;gVc}#63H?yI>dMn4pH;qDN$o z2bW?{DJr|rgwu@a%0oX5s`lAIuPjVqDHloev%bonLoankjh<6=%+ZC9dB{bW%FFJC22%ms7>SV#FmSV4n0C9pd^op+SKw5O zB9ozM#eSK5klo*6TJyw)^Q70LwtUIDG4=5yx$mcCau_R=!^5A@_2F#H-o1)5ihiN3 z#};;xpk0^C7qj4KmB9uSI{2bOfb&x{+9W=C|9kVxx>CELy9*#K2}vu4=v~x+tw>2i z)Tr$J`~mt7%Ecu+^2XeKflR6{efO~e>wqmTbQ%B^ILlLn=L1<83}+k^2nEyB;7Z2Z z4H@Xj+nnWwxUdmkC|^p%PIy*;(3&Wz_(GGw4rSK?BGyU(5o_JZQaE4(HK~0?DDM;JVVzV5T&EYya?Sk!(Su zK&;JBxlqqH))#Lcx$25{jx;2I7o7S2@OIUt)&KfCtb0#}0)a*%sE5_sC8^XimvggY zlM>B^L9rtXn!`0cqfX>7x6u9NfyB+h@AZDzq5B0n6{w<+27t4T&d}AFUgJF0m6c95 z8Sa8DaieVLy1~MZNJ1g-*lAJitsyF~qHmbR1<8COd9JCeitS(z%Eq#d4k0iMu1tFd zyb^L1CUlku)dhb@m4;(`7!lbS97SC%tLO*8>|Pbx!5seKwUL>kbyKK1@iu_;PD%AUuh593W$)v zbi?w8Gg(UODeZ~kBVKzmikd9_g~F>TYQS^@4Z)0q2^%RTvrcVupXUd z$;iymX2Xt0>H+uPuU?YzR@NGu6Eo2Q^A*xw3AK{xQ*$#iEoP8_M)-P*64BQI5#&?l zZ0*X)$?Y`3iEzfKP^VfK6PuV4h1&yYG`CYzAT70=57zw;QB)_8v7^gN_Ml9#q0>9_4dd3GjQ0kKiH$;wU2i2^V_mp+Gmq@xhcYZ z(Mt=7$eY~O8LPIQtlFPMRBHIhu8Rs99@H4zIF2-z8|n?0Gbc4!T(PjFl;E!Nm!W^Z z0X*eG)jY8bcvE_@T%jU1g)DKED1lwZL>X)p%!644pIApH30YZ{_FGNKIM|&Ssis^E z;os*Ubs^~wM98P6W^v1cu31UzzOus#WLhG{up#{M6cpBLx<4pwQ&yJ|Pp-@>`l(5L z(vXm{GfY(FiEp(VhLIs^RTZx$`#pee1o#)uD7!V^PBORQEE-eO$$n4CX-$Ket*Dt4 zL*usyj1_cyFSAp88!3jUl_p9O_(TqhWYPnq9E0LytTzH70rp<*k^iHRx zk~hVJ2eA#%aOpsQPyFV{g((^1pUq`o2O{GD|Mj183VzXXV^s;gWIYa`@|KaKEaHjm zem_d_8fo>c1xA)l6edQenzgI5m9fFBo$9tSv*Pz3S$9~Upnef1Ve8p&hhShng-zLw zj=HT`7T&{7$!;QYiRw9gXU-;@HrtJwe05FIV+d>=WNTT4BOmS^B52nBpWF;ej47L7 z?iJaRmG_>y473xEsB7##C)z42b+ex1K;-<5_nF{6X$YqtB2;rz(N872?xIDQ<5_fM zWh^9eC}h|>^vzOl%{o{&4OZ-;Ea`^M{JMnhr>Bb#j|TySE{*7F=ijdRH5*E@j-xtY zhsvo!3Q7)L-A_BQFPnbrO5GP5uS!J?AHL77FZ((J*IM7eF!5yPWQDuOVM7Kber#xfUsDBe1;}SC4 z-1DUZa$DJ1`WyB~Jtf#TbH!C%ZtK^_b{=)QZFS@-wx2gcYwBVZ8K}DeWF8fy%g39E z8nY>i?eRCSaRmVltBHpig|6@Ywlk_ zSOo?<%0+}C4j=uTWAbUBW@)*|-$&Uq;-q`eUn|km19(qS#dtw0e{*){Vsu3+)(M`f`svF$01&;O`v-ynz?pBId$H z_EW-{_t8ODQ*~hd<&|qRuiSD<9m9Y+6;skzY(6chDoytm2gJ!fCMi!dGfiicF~)@? zMu(;_1SVq5&ufmDMf`1U{HDVXGA9Aojz=Thr_f?J`q-$rFGf|HbG=2HP>Cctb(W1H zm!}fj3CP%1q$x5hK$XW@uOQ*(U2Dn0!QqzKj!6vNKE1Qm$#t=Pl(J;&o#>k734Iok z{qSLvoEO*&j1AZdj17T4GRBtLZN5C}%5fUaY@Uy^n(V?(dT;DL5X)b`)8j;}q0CjH63) zN0&8a{m+Mbv{8f*1P&cuz2ZE`Ag)m~0(B6s|G;CnkI-qC@y}cDBqL~7Q(cNuIrRWO^tlM2k5CJxsp@CEF_ zMev1IrZKM;34;8OYj|w}lu7;4xV=NxUZbN2`s(0H8=ShV2T@vtlQ)~WTK!xY;mYLa z@3dxiAW|XOg%oTi!?Bh8N3uo+oFj`cY;b{dz=q`B=H`|jmwm4nDQkf!h4pWs#t*r4 z0fE|Ym38k$)@THT`bF5a5{cMOYOzAq*tH(h7t4*XvC_SVxp#kM;6qTtY5G0k!=*J; z?S1}n(#YX7YcLFKlG0v;PG;V>HkCaXDx!hm|0pVnIv;T##G6}C7MEyhv}5Pd(*Q&| z>-W^J37qWF>CW7YK@`9JMVKQqP}mBV-vW<}bq_C0IF9s98+xJ8&!vtscr?zyDV2B> zR^x~KkPwis@4eHoM$^k^^Il{ErY;j1p7m7rr-}PK0aw!pk;_sJJ$X>{Fnlti`Dz<7QzWWxv=e>WV8HOGm9yk;}?2V4nQ^~(`ePosS6=cBt z{<^kxcVFqRr zDlR@940 zR-T4_K-@2V6Z=opmDDHQD1_#Y779uTfa8A+YV^LwuC}51K2%?lz%qw!LPqdoN;BIV zMnEE9TF!(vF0?Ucg15eX2%`vzBiVWGDeRt}5B}=a7R=}FpV|KHNH$~e_s0KHiG@Nm zY$N^c()C|v;U`h4G!^* z61jJ;W^!7NfmEJk)9PHmg``3Vlknf~=O^c>%-w!Zcg>rm_x5XVFU+cRrRD)inmgVD z&7uT_Nso3{-vGo6F}_@|X7%Tin=!xFsrU1Xb|rV^If6W&_|mAbUg***SE&VfQ!JVO zE2%9-8ts~441C`+yWsCvh^~EOYwk-<`t*4W>6~sLLdD)p-Z2Wa(g*cvoo+m$M;G%) zr-Mco-khG_OZD8yoa-#-h*N5wr(2v3RJNQm`Prero5UQ}S z(TE)Dg@m{*DuW=ekrANB@FIgLU5c$2an!5u&B_-{9eStCRiSP)%Ke_Nj~qT87n}1t zDbT_P9bd&^nRLKjT+IMh`gYv9Fhh`t5MzUz#*aiE$)h&ev}?{dgZr!PIFD> z++5*8*dKy}JW5jWgKEC)qCfxx>r8#^rceXhX;$u`-~|IiOO5QMkOwnL0H~z+nl$+ix4?o*DuPTrVadGnX`@3Z?ypkfpr#GY>Uu$XEx%>O-Iq*_%6DzE zmfO-FTTV_YBNr8s-ZY)h#A4Kw1bB9E2#;bH7l2uNLfCJ~iuf z3iM+_vxcL^X$S|!KoWOFgo1uV^CA1c+}f@MUIc3y*Gs*P>+;&{ATXhX+Znc7A4@2? zfAZRUFyMB$Vgq3*4umBEo^O=^1>9B~FCwi4gDXQGhDLjx_{(rx$YHRRcw$uIL{ z-;&*Hg$U};MvHIKdlr<&s-yz&21 zroQ$UkTR9<#xG#|=qr-E^P-|9>sNlfA#dWd@r5_0S1HxshFUOi{^&tHz&V-HUNf=i zD}`W{PWKz?yR;wbbL3nU&b7!}13zX>J~L;4Rm??fTlne(m^9b6&8bpCgVC8K9cj&o zEoQ;rOb%?B+fu~@YH)3&YpW4kI9hSxXexl}{%3N4sVf6dt|3QaKy=8SBx20LMwi)gnK~J$mO|t$Ok5i2(=^JX3%Hsh;n_WZNm5Jc&8kDR z7dQUvRRbIj(f+4~{{;hdl8R&IMVEh;Ze`Fs0@XBe29_Anc22+#R!z=Sa|Ym zj0}slx|vq+ssym@8x>!6?*0|e3$m)x*NA{Av zxX~kh^3rp<`=?a$-k%0$b(9haiKy*>p9~<@ji_{XIJ()cvvAQQ8^XU8UCMd2W5@mI-4C zCkxY?d-oSgPZ%>oN=fAMmnBiJk#oAQk+`m?HI*HsYRdcfU9^s}4@9!SK^wi=>^{>- zPikw|mP9U7aLeI~JlbpPq`wXMcEgq0vRl{bxHFM^_Gc;*ZsU$$mT{+{7ZFpwGzN!h zLm}oKu0uWFmA+N0E)cH-_@h4sHZU6T1!7E^5^dA; zzBRY>q;` z~eu#GZ)`+)znYa(hfCiII9hDa8^YtkXr4)b@sA4MBw^;zw}*7S6*8 zh04G!V6R<8w5?ev&E2tEP%iWDiOfFFK-Q#Xjw*Uo6*x1Rn!3>44BQi3;n5K~Dd_Q$ zh!|fiX}fnKLrq~H6IjII;M=&XUtO5RdL#idH9k|d!|1vZZAqO1;49&e2x<8E=Jy)8Kd-22~P7 z-}?Y*Dwj(%3v>WUhTdr%?Yux?dlZD27b!m(oM@aI~@De zC!^N{M+cgIU?hk8giFzAoyL(8zLF))GXKY|(Ynoqp%oGt4U43J82E|piUsPeU2@MX zbdcDzk%1bxP3|2PTxERGf|5}*#Rj@|Y8#DL1PvH}R~G=eu=OyPjINWRZGou3^Trt8 z=t(BW=S*h+{U&*>ouMcq!#po1V}``BLXr5TuJ5_5GJc?9x6VcSyC2)wpRW53!^}3r zA>3p>F2@Y_v?;VHb1=>P&UkTR+NxfgJu+x~+k{Bm(Wt-{rs11CGIM&(Zay3l7gQ=s z_4;H?#0vmiCFBNmc9z`v9I|MYH2Dl%#U`Iey5j^w#U?x#o@|mrl0!Q4AN_ceju{b$ zUGuKU>QepkS7^2`aALJ(34D4)3;?htz2PA_F|3m z2bT?Xf_j8T%Rv5nuzt{$q&ED;l?G!mo@J*D6JTOicK02PJiJ+dpood?9J*NT4IbwY z!|9n0?S~O%G=g+(zuo7F`zIKL5Hi@aH9Z|^(`4*k%LZo3kIM$p%t8`qPHmwV7F3Vq z-N0xYo_q-y1gjLkRL>_k7`e}%=&Ax+HT#Tnd#T_;CHZ4YqRYR zij<%nSQFusc4BH6;$F+#uQL~MMTAY^95ZW2m3(GmXz};h#KQ5O&u1WT0fZK!;8Iwo ze?27u6v3JurkQKQnWwxy4EB0kXH^yL`iADhc~f(8re*IWg16r4pp7k6o70vop| zm}x24A)2AhJ46-QWZs{5>NSNR%djLM>@wq;M2Wsr=GoM!XDF7pH(hiW?Os^p(bk91fK%7#4ZYQs?#Nn=mxKT>?0sj`17e zi1gp!m5I$q9Nv4=?iMwcr{M~cSydZG9;uy1+*5o5TDk$eB8&ou z>P_PYkEmRz(n$651cC$m#slf%B&FTB>HlKoKA@N1yZ5A&YWFX$w(E(3>wLy+=W#@1 zdy#Al$d)=T%PZWj;1N9R0n8S3C{0}X4i}Z;+G;njSQz}6@cC!zHTm6S3=R^lYYoP& ze}DpQ1Hy@#HV7w#3q?$_1+bjb7WSFpliDM>j=eD7^?uj;GL7qDmhR}CZAddkQepOS z$8HxD*5zngCdx1LK%Y?8L4#K(3|}J$L;r2|I^hfNpsv$#xCQ31?-4ncD9~6FJpHI= zFz?mAQw~PXoZlp-Gl?ADGSjPdFWD!^_>aP&?+`TG3C=2Vo=-xIqg3cblg#2C%AwBT-v``Mwe(!+^un~l_o7J} z?BJ7Y9)Yw=!9p0&3^aUp4)O{yRxegR4vrqUala3tCdhgBe_1zE3uZt8JHPy|@#9y$ z>fNSzzYD{eDKOD`4{9UCnhlS@({WHY|H6;L$SKeb_Px z4osBa3l6Fzef$6KNqmC`|z` zL**sJC9afu8=-XwkutWMY*$89j3{;92o?%KmL~+DyNL+H4sQ{M`1p=9LH~_yBi%5v zVC+TrYn;nQm6cW;e8$>gR^Ysg&V^c1zx^R`Vb)T;#sedQyGnl)pl0=Hr8H|>9p7G- z2nv6P&`z#xt3JWpqvyKDlqr}DD-0zv;g_Y_EY=XZh=w>%V6FITQd8UxDf1C{Gv(K9 zI(JH7NPTYp=CU#0cO!x-*!l72aLOY7Cm;R_azJ`sHYOJnEErkDSTR1qTlQu>7DhOy zMl=TL)#Cz7*NzN!_Ol7t@2lb1PzS%q8x#OE6FhD*HWkE0NptXh7Y8+RRd1azN+v_;V-r!}C$_UCNfJ18po8GZ_ud4uAR4qa>Ii^vK!f zsTeb?_es;OyB@I5>Pyx0p6kl|KKdU%t_+0~ioLF`p_p4*#-ILzT?%f!oeUzOU3@V( zxLq9wV-8FmuwV}RdikCNY-)W?)aXt8ZmKM0S%>UoH(FxMosnEG>Xo(~ls_qj`9@Za zZHcK`+|cj8bExcTV>a5pm4fe>{ym*WQmUM2X3S8cb(AeFlOeDokHwjgp~ETh+yAVP zRo&@l-J(KHXkyE{*ame~{FU64b2rcoM96eT=Q?d5d-g)-lS!$3{2jv?xWY5`XBJ0fpyd)4m1z(2={j(kM* z_Uw{ld}Ag1LnISvUB+74$e;yW@Mf}M*WV5J@&)cs7GfUCsvlZor+oSDoMnD{VkWq^4f9gx9B>}NJkb`z5rz*TXQ-O zRa7=yO3v^JmWs`IMy-SQ;dk#7EbFmFt@efTWac98vfza4j9ZrF$0R^;*j3`1ia1o0 z2k;JYi!}bK@+e|*5sgMf|B6FJQOOZVWKz^*i`k~nj;R&=^O_Q0?X!NSL-jtVi`3CWfJUtR>-bOG5L-$j-nO;}lNC7cif!J$8|Pd=#``j<0~ ziN1t@fYLknR53p!b5i|EUXTYy-vQER447qBrH2J5z_@B+rJ~X2JS}$8E%$_~#A~MV z_wPWJEN_G&J_t=u(W)f1@h{MY97|uCG)qS;&E&B@MWGGZ;P6DT7Kn_oHL>`!##l8v zj{O$-JvKTM$4wY4W>~+QX&gNnTqkG|A8yq{BM@U`3}RixDd@vx38*oB957lC)-pk? zj56**1ei=f#*3DYRxx&T+zgq|kogQ^Vd2GPF)ZFTZHZR7DHOnA;k+PtcN~j9{1(M~ zGLLMJZPl-g86$Q@baJk8OjSd=Wx z7b>2+IZ$-}ad9EisXIs^3{dv`x@TpyvD1+V2<+WD?VpFH|M^`1TFqWkuruTQOnDqm zVjCfmZm-JC%EMv2iP8V4h<8#>t+}RIe2f0m1)hO+OcN@pPiQ`EOPA~Wwv5xaBhb>m zKd#*kN9H-mnxE*&tzp`=Duv>y48A&!P1(GPhOd}>nH{13-Ov(sDYaG!PhzSz&lpu5S`@wVlKW+w$#<$I zVw}%D>Eb=XJ;a3B?6T)_?e8Fucd~T30HRr)G8~J@NebChbLfVA^}2`YP2YC{jWhEe z*+bZzYp-TjF&nulKS>fSHUy3EN~=T;XfAuYJmE&oK!wyP9%Dnpd-bPbTS8kQ(`AT| zp%!36!+gdn&0-FPa0O42pv1O{@r9%}g(Adfh0nr9p&_wgsaQzXMlc_G{0l}k1n5EF z#PihVXZ`X^t#DZqLmbyvH=VnNntbGCG)iEDwUtpgg=Va-#&J*CamBx^?nQt|VTWP} zGCa3~)h#H?aw$k4fSxKj>^f0jDU#A8T%=uJP~OxPDAZK2?ko*k$@^jgNt9O=9war* zPDqcStFHJJv0g;yo2{cJfrZDf&j8Y(YC8VAcChWP@fTHkRMa=bMR*(VL!IobydqUj z?uuk2gQ5e>isH8C96IwvwW@R#qeJ>$-}EnP^cm0BFB*yETk1s2&pPwp%_Uav>dSy% z_r6E(9fITOk|?5lyjo;>8^g~T_VoCQ7fQa3mGl*`p}bLSzr2Den3XvS0|CTc&pnA& z_v#mLRBYd0?`_N^s|!0vYYlSVzy9v0UZ+-h_Tk1$cFY*Qq@|G4C8vO~`RL2i5dC&+ z>WP~+ng_q@i>A-Y{1yTKLSJ2gG|i-@K50~G1!sYo+|M*PgvR*F+MrXawr!q=JYK*Q zYrKoA?P0T!qM?$}_)Y%2tqF*#C@nacT&a7W_OuQE+d_<6W7oeRP)^NZZD_ZJP~%^W zg^N>}QN}pkigmd(44oM2QA`3hu8Jq)IjgIuH1oY#kLT;Jju1BaY-}}uCWP{iTaV>e zes_h%J-#L(Z*-%dW~8}DCB5T)vEJF(c7rZOP=?`Cat3Q(c8%{l4(Zt$!N()JR3Gpn z`Tw-fCC6A<(ikMa#BbPmxpz!HEeFq-u3t1V_2!%k<|{x~s{;w2_bF4?)+lg+xe4OM z>i8qtLIb2b2=U?hOdHH#SHsf7nUmFdOzXY*zneF%-x_4mAS5x-JvWLT6Uyj1(6W^{pX>EP|AJLG?p6|wv0J@vO7$bRN z0=e3`rNZbnRiuZ}fj?8IBPyot15vhh@-qs$hlg}+qixgXRgCN;bk8q6)E50g zd}9+`RqovFS-KZZvd^DhfD$`7x_sADr)BjY-nZZ@2rGp7ZdmNDB$w03U(-qBVDh`I z9K;$~;|xQHbeQuWm_qFMths?7(bANk#B^4S8YX%n2xP2k^F&phQi~^$QmpyAEn~ZF&uh^7Ej#f#jXc=BdL22>b1C61CkQ2eeJ*a8I1G+g1hhk4S(*xPLW)6) zcCu7Bq|pct{y}?EtN}|}tidIJ1UwH9G$`!FArwY%tbt=ILan3(kpQz)&5{^r02XbX zR3?%VanG|g_|H*D;_384nV+8)J`9Gd8=%p!a0>)`KP?>BOes!3RDv-ml<;s*8~G_g zX!Gd{efwmiq!vp8^sE#-x_&xYp@Ns2k@>OZ2Y{rR1tc7CMKi}yBB|^?L?d3$!YTJl zrI2`cABj#3(apJLamR9aBP-j7wB$P8x*o5}3&ev{Y$-*i*H0?6t9EBz?VK9jXr{$$ z91!D9p{=nkyzrN#^<3!DQnEH{2l$ao+gr4zXxl2u>LL$+W{;sl;8*8s#!YHE z(TU5{Z@UoAW7=IOH!!>nr=o6AU;=X@ZBP-7ONF4<&+SrDW19^`6kNw()>P4%8CA|i zTI_e+F|9eawCd7tEPO+`37|2Eo#mXaxM!vn-}u*XRxH=M4t*7Gg}ly(7O_jKXp>vV zhTWrf{e@)Sz)k!mjh4~i?T<%@x}go3$hAN0E(pQSV-nu#l7|$-_M({>`M_4jJ0FvS z`EW{n*zX{Gw3qy9gg?9NI0@YYX(a_LS^X*1vaLU_eNC=?1c*Kw8Ajo`D33IPGxc!= znMccOvJ+0JJGv=a!+d8JgRQR95tg|kI}=VzK-X%I30nV6j_3RTNDllbeLF>VK3uhg z4BKOs|NoVJI|adi7pu+z+naJ($rF&#bjYI}9cs2*3j^nBW%1EWkT+hXY)!a)PuL~9 zmoUUJ->+*Fy`L~Cq0mz8lKSm#hkReFPQ(H(%3{Xz;hnG#s!%l2UF9-#&9zz&f@rP_p40!Vl_;^|)!jsY>AdGJk=h6mdcT+FI-bK` zaEe97u<@KlR@fL24SNochV9@hiAI>w<}V4^&D?ig^&-Axp+=rhz*${7Jl;&)Yi{B9 zGq?>+nSG{+DoY`Uts@;+`^KG_;u;?!-~toPTVzM&E}%SBhz(=q-P56w7PB*nDS%qP z=W+HM^zCeS(ulZ~JuN%n>!?%BD%s5T%tEu9HG)widIZl~-pi-OKz_^VqV)rBfB335!Q(C0PW&Caj;^lTr#+P@g5*sC1gZ{o*J<%1r8NfMwsve(V>Q?@GnwDK& z{;P{`__PM#vbNktQ&%i-xLKS2TS4n%uI8a0hL%0NH2BLNZROhJ4{K8nVIgPgSLy{l zf7QgydLP!Rcpf{ZDVuINw)Ie==AVK9ex!oUCz0<9Ljz&^?(VlF_~NJg8K21hq8sh;F6d+$9HJfO>vn zK1q?z3Ab@H#!8;v_2%#IDt-R!Tf1rZ_H;qlepcybvZgg39@%5DXb!H#=%c0NZ>C-E zP@sutRf%`Ry@|t}ZLF7BHV>@}#}D`xMExt|Uijg&0rxJzuSiC%lw}nSMSAVkN|HaM za+PCo3+3mmf@{^3pLB6y!0y9}iazS>)o{H7>G^sU7&`$e$HKGPh9lF^2N3&SjM4L4 zIaF?nb*9-$)DPb|otb546x0+RFup!P+ZT4=2C+%To=@y3iMp!C^)%P%cX9DS-@R$g z+vwYx)nH+y$|@4Qo)eG#0hLWJlnNErRAo6q%~op4YA2dQ>Aj zl`s7=FIA`LebFf{Ug)sliK@NhS=hF0bHv@O<=Om1$Gq_lvct}<1Yi+N*Qv1~QY!)k z-$|k+m!7pyv!xd>wX>944P|qKwX2!_$v=_s%bZm;sV>u<+#Dxw)N&KyLfh*ce;vG$ zg>*GQPHX>jqJdw0DPtu5lWVvrW_Pa~w)SQ}`Lju^IZxa}d25B96-?zQ731ASN2^=g zp~00c%az|IxTT)>C!+mjA?6h|T=Evc#eSG+^x-s#ArsfqVkgBMg0$J_Es=vD3f5?T z*7;}2vSo0SVqWMA%S6s*o(^`GfLQ$)wEs+Y(@(|vN*M1nbLNX_hD>$u5c6fom6F*? zPC8#0Dt^U!%%rtSoxsVT{Y!>|QuQt@kViuR?*u-@PVXvg>>q|(4sU?LlpoK^zhDs2 zyRxf^ezBOAs!&R;pfLSu;;)=IZ}lY+b=x&_Ch{O0`rJ&u&}mge`Nvfb3vmY0lUPAq z>gd80X0+j1qrY$G!>r%64X-rcL7Nr3f%RjTg+ z1)jibcFs88V^$Z6y9-B6Fj|BfxhcBM4_)J^u#;DJy0pj7ea-ToPveb=3G;EuImr(C zH;nzGWAFC>_vU!+f5js@IH0fs2S`N-`&%JdA#tVS0>v49ER;g${34tX0i|OBUUkE8x1Op9na&R-f9-RFYSNA_C5Bj1+s}JZs@cHiF}}ceW#W5 zAL;n}XeFGTb+<^3_KF?$pdgZK&5FfL>iESvI6!zIBbbzQdN0+D7XqL$RAV**iBB+O zm`SJa<|FZqq1U%ml~E6&4JDFUP}bx0)ld&Z&}FeezbO)VpevS)G_WqFw`AgAO{~-^ z^b9?m3#wR^VesI35iK}J=y{p47*PFWF7@^0q|*~QuUj}_$ffH9)kvyzdhWSNEexD#%1yCTsYD%USOlsRW)d^OPZVNMwbR+dW zP5FytIBd4`0gR+jO-O^-N2ZCId@dzYrlpGQCd<4%WpfT;bmnx_oC3%n9pi;gZiZ8S|(C z(m0^Av41b7sc?XlCpH8H-js&mGdq`S!Ak|Sm74lc^?9wsSZly<}-x`H!26ov?G+it#H4Rg`DtoDWV7_ z@--T4ehKOHpnOCh8c1Fy1P{JG!or))2qscMg`>iKs7=)n3fVz3j|Yr-p)5>(p(?XW7T{E{{a*AZ-6q2V-DOG(|F@*)R0xjgPzMzC z2p+}@`!cDRbQ;8h2Ra^7uFnT)sVPzeZ(mE;L?swP00BgUhkBU6WO9`f!Oz;LRPLB- z;d`D4f{DmIq4N+=P&QmC-cD(lMEZ{`)|d=B!b6=f=@uYBn3HUqOmDg#)e6Lf=e4j{ zFqn_12n~y#0}0tidr(O_tNW~e31slA z&+zd-gn?#OT~Omj7h-_a6D+wIt}Z+!x&y%frLJ3y+*=FFiSLxbjQMBxg+>}`cHoqq z%wk6Ug4}#YT0fqlREGmo{|kgx0Tm6bz5qN^0u;~52~N2^sYM!*7ARX{C>&62Rp`H~ zgWSn!p)~exRKv|b;$6K;P@^bEY6HK&6$?nn#+4I{=tTW~frR8akrN`DF4ftUKPHS* zI4tLdGsA#qQU&87FN@HQ4`Oi-CA4@f>O&Q<%q?(`|FEgUUP!)lN$8aVtnDz;{6@XG{0$+^y zQIR;;#hMr17O!02wQz_9`3ngQ1sr@e0b(Hu}^g7!HcZ!i#frivpR2te$@4a10XD_grAP2ot|dfr<;cRI(u1=gpBs zjdkHk^m(?jb%yDG!XQOwp#_=2_c@V~Vw<5mr*KE}!r7{!VKfG%v3ib~P;%v&`_AZK zA@4@L-zkca{-Y=O5xh6OfkJ`L7G=3xWO{MzOgyE1Gr+UctgMK$kinp=z3Ak#0jUZ% zo3rG@Ajk()m1N{;)Ckyt+M`A15WPW>?^07Om)M|7 z8$bsQA)df^S2Y7HtcyT58VH3>8lt**=NLFe&)8pfGU`^8LqW`V3Yf^U(5Mvp!qfGH zaiGc^;z|7a2lKzw&rySzCc^sSXV__|zeG&4(`eNuWX{xQIlh4GxIW6(3zVu`8Dya2 zWnXGZ6KB{TJ^pJK)(S{Y0=eYnfaHX;WZ(R~+z2)W$ZdM1pmpSv#xY8_Yz5@Zq@jR- z8W9v}D>7wSS=#5Hvp0sQA(E>nhf3cHDtO~J4en`n-eypb(ky`y41olmU<&Gunsf&U zn{q9LAxX zB})T}ptM^VM5Va_Z>^b@!wKcjpn^@$Hg*3yv}^@&+_xIYbb!vy>o7c>=H}bNRn80@ zPSgYM%D8|7mNv02FY5{NHaEjA{nmCqJRaAt`cp~PVyF+>M`aPF&S`5j)2JH!I!IiX z@1;&&MV5T#lr~B>iPksn)<1I^jygVm-5gZvd|lrjt{~1JKzSds^KJ;;AQJF8sy*|O z8ouh1nxc|>@!-ureQ`B#K?%#$J(lObwJc8bqJ8Y7LZ=ki+wPucp9LQpc{?_*(X2<#+rW3eRf1wofcJe*%LIK%#e8UU4iTL5ciL(!PkJXBbI$-HrGN*b zJGO1xwmGpT$;9@=_Lt{<&#C&(pT4`gy4Jn=+N<~8y>P9+mrcLV7DJC;GlclR3G#x> zrTTsff9F+Re-6#4Lmn{Amand&4His*VDm~x3 zN7dT;KrsXk81$^0j(v0g3e{iQe;k)2cw*fLedm8Aw(NMm1&|CryP+R?gE?Z)jud@U zBdb3N)jwJlN4E4S%_jC+*m_TZu{aNf)mnkKr}x;c&#OUEPG0DdpRRhJ4KL5;Zqvcf zpG*=*2|lmQ{<5y0jl_|i0#py*+K%37|HV?y7*7lWgfW6$t^ckGQ|F1WZ$T4Z_p}uC zHbIv@wZ$)hdhZMW(Nwj}57YH(fX|`)D^7Wc?z8>y_R_4wcLz&wju_i?nfd&90hbf% zB%FT?2nn=&9GRFK#i;BlqMSvC4$g%3HQBEbgoRF@Wv>wNt=J=H`yRh-&Y3BO&3t}* zk8p%;m!aR#aBaLZRxRp)~#EOF1R~}~vCb*5$ zIXu`#^XvGf^$>!4y#^mXp0`8PZXb`erSK>bMW=$5+aARn*yc#7`cMtIisOp<&}J~+ zwuZ_(C0GHUPke@n{N#Tr#M{i{?1>@3YY-)4?6H!{Ny^+v&UF+z}ukJP@L?Ed&MdyJ_XsK~nSi)d(`e6i!iHi!% zZ0Vh!b>O*~>H3Q%Z|QLt_0RrdbEFoa0F{SF?Xn~dP~Gt4>mLTYPejSLSrAzYVBfwh zw+jH*xpFTnR%+6aR|yZp`hbzq3F~VLhS6P={jFSgC7}}*=487~#>Em^QIMaL+8?)W z6G*zOK!_0R10jZ0jKks3p9upw%*aXsfUMO$sh(c0#jR>4UVz zZ|h?RLu(89CK3}+Sb}{W?2yaOD3P%v<-*myVBSa;Ojwpb&=j z_bsW9OI$i!>@Z`>^I#}?DAuCo2dysHrH6v}s(&2?+JA?`Tk{8U$<bW5=e(S~s!RtLm2x=9H*$q9eFQe<2Jn!`=6e1Ay{ zzg*czFEh>4-0RJLs(NIerov+1=j>nS%$LW=R_XAI`+^aAU+~PaCjU5xouV+$OU;$# zo;TNunQV-9HA@f3%D5^&-Fo&gl_9(pm(a74d}@-ONmgKR55K<>)0wQdDRZvzJ~}G6 zcxVzB0t&OEZ9ivPgG^U}AcpW^YgLS73O1PK8r#DHvT>st`VDxhq%+S7I@>>4r;Mkh zW@X+56X-M9aOGBY|CAH`H#sX%Zy@5EaG0zWnMk5Tgj4RE8mW&arO(@wbcG^nq!qun zInS_JohzKYd*Kp9A^WGaWFz!n9%#Gr$S_^fJQmDU!4>_;9rIZPwsDQ%0jM9M{@B0s6RR}QlL(EUqR}oLbp+>%ckG6hoKodIBcB{;to}?u!y9o5USTLLa zVYcR3;op8I`=K|kF6E_zcBTF!lyI$n8nF&*_8Xs#1Ph0-MxpdpN~iM=<{wM-}aWKU9j`i2YKCZ=Hw zX3j$q<3|V4X}yaoip;KsF3zdVFiCPflr=la4#q`0(|}s6v80wnYu1`6DNeW-+TYkm z>dJ3AV@`Vx5t^vVTFTMX6)cfOcNaFN7ICX=Y22%FJhStY9B15D%*beN5(zIDaY

      zBaJA^|9FLw2 z>aB~OTV0s=sD0nwJ(`ju6-4v1c{Jh0 zzutr%JX`uZdyF+oJ|ip@m>NdT?7d>s?3gVsXxG1^UPQjV;$rGC0bl=T+UH-`y0 zEDY;CdY+puWJ^b!`RzRA(nYMYePo)^eaaZ%zbK8|^Vc&n$PL^aszk>=-Vhw_CJQUo z0-QgY=|M#Klo3&(t9UT+TqR<0nilw@Q^x;C$6=zys9_MYG0vlCKG-M}%ihvqml30O zUNvIqCiG=`bN-Lo#qI^wOmxy#Nh=J{v|hE!XzvkxcfO-m&C!m(De=Q%T*&F-wz+?P zB**_?bvwn72l6fvlW83F8)A#WdgL%B0tt6nt6WS~drx8>*g>CmADt4s0_;EPev$5- z5U&W)ToAg(O*ihhj3oMEMuc+DKk{)Pb_Q93^vkame{kPnj$J$p)bCII=os+Bh55l8w zwLN(v5pzo+5!Vn#xg?LRRxY*Nxf6$~A6I6X=6>IAgjcDQW9Hkg6^k>K zdD}m*YnZLEa*!dNPIk7;s@B2df`^IpjbWeHJ9`wi$+Qzkry$1e$m@93H7nB~oEOi) zC{f`~`Dlvx<9bxE`x8GE7n)KL^fuKJno_KY7#Xh>6O{QXVxmomPT4e-KL5*H`6XbtIw;k{ zo4SukX@T-~e$xB-em9|b^t`-~`6-mDi$sY78k*{gL}>+K2e##xx`#w*hi`dn8F`dQ zPmQ!NycgRS)PzU-uDS~B%=<>irrID=l7r5r#vxNKLW>wZY(VrRq}rfRN?@gCI#{+Q zF?k_28V>|}OIaAy)Svm=r~XEv425u4eHu?yMWrMK9Zq#crL+XyOWi`HWC2}IMMa~O zg#2cmk{gq%hek;Wk;*X>n;L>fsRdk~5KoUWzg2~DS=77_8x%up|A_=$XOpr zBfAI@$U5Nb5GOsX^e;y7z0B1A7Lcz-au-gGR(E(bQ#WVKzn>l0@M{-hOVEpr2;J-2 zFxZaY@pZ4zzw;5}jm4+-`1rtUP1dupD@I#leOn6wKEazUE>cmiV9{GM(J4KlfC)PS zF075^A9tR9O5TDXqLCCt;8F=Pw9so0TvW+|jhhG?Rf}(~Y zBW(+UN1nwY5i*!MdeM5JDtRx;3Xn!@_cRMFuEEb1ZEUeYo&cPBr7dI-zZ#4gKy1!L-_o<6X5afd6a?B3OnfA%S^%0l~xkY^!r&toCcF}?4eq7+KvQd zzOpGUWuP)hp;U(Cn8n{+y$s3le0~{(LuI3@eWS0UPI)dON;9}vw8l(jBd58N+~t$F zZj+N)@(s%M$KpX#tUpK^71bbI-YJl{)3?|N_um=jJpAx`V3-FBX93|74=i>%*y10c zIkQ@R)M@6zP>Qrs;d>!LI-K+pp#SNU<8%Z;ojzu^eUKEzq0!)_wljZT5P7UZfh39M~Oyyh_OI z6}udlE$v>MI>!Q?1Mm6;AQ$C53vDL-2;H%5Fr}|btFw>AHg>V6M6w>KGSBNVwO=HK zqL-M=la<8{_egR`%@?p*YKtNBF~yw3)VR;txh_ga&PZ(c3exn2qbYZ7;fi`2j)#)LK}MZ+abA8G!S+RY4Z;3_f9l%oUC!wC zPfPEp!^)8>!huqH(AGzW{;1|wY;TJ(q{piLn?=BvcAj)@kGhbB&1C%h! z2D#J5A`&el)#A_bb@Lo~uq)I<*DEhsFy0N`TeH*c_63=xozWORvt0IW9kU-f@6Kkj z)Cm#kt1TQ~jVYC_CjV(^7~ytN#d2mu*$!zn^qmflCH)|^*q~fRz4_v(+W*bVls4y) zSQiCo|FRMIdqIFP0!o#s?7Wc%ex7E%cbwBZ!gLJb7F@ROtPwToU*z~|)uniwZ#nvp zJom5s)dHtC4|k>%9lix@L&n$7oYz7djpQRO&Ea;%d2ZhR@U|0-KKeOd`)!v2VjmkxeIrI)yy+aZEr!uZZV6(c^OD>#(Q}ii)I8=i3t`y>N9k zg{kQ#p%bZHtnDDmJ~>lx{lA|uGP^4~9i!@r$0b3>!7L#dnX-8jvG45>(qfUpDf&Mc zRHV@@iZF7Fm&PAqXNqtoHvHL<+6gQbF5%pU#1CFx`2VyVuOu~?{PeYV_PU#XL^cPK z)W=|H%0yS$6AjF@=U8D2XQAIE=-=OeWm|)aDvOoGzC?B28kUXG|tSLB8VVjV0&d$VLM>RY85uQ{wSout_#hN^aS{XUqd6M@K86O>^0nPe_&J&pcP#->MUIkO zPy%VU+Oe#>%8X82PnCyAr8@?_nqlR_I*`!l2P=YX>A!<>ro+p7$9oDf7i{UyF6z!) zl8WQLs4+Rk6V2Q*y|c{P1A@!D$8rNiF--J5M3TgAPA<7)S%qH`dH$0KIDCmzaCBL( z-4-OX5JbF^{z;jIJr%;~Z?l%LuD8=J{xC-FKucg?04&5PG!3K|Si9`2Bi1G)`o6uF z=5BrP+8!Sd^NjsN7+QQ~wiRsmJ&>ZBpk@eeFu=ePKQOr6GCj!I$Yj2g)Ir+^^YOIb zb#}i!d(Q>F`#!rI_qqXGfQ2Qp!K)&68H=ay6o#9(C$1_}#TA2UODt@$(hv!2PDiX8 z%8gT3zo!O`@jLA1tee@Pe44Fb4Uh0BSkEuRK=cWecJVNU#Y0j&(*ePKWIUG?sie>lz#;{Sw(lS!@4}g(~q7Qmh-mb7g7J-*yTr~I=)@FRdj6BayHx^eY)Y?$NV2^ z7So@$UuUTwvlvjV@MM&2paARt>#~%MeQSyDeJo9L_M83M85kpdxh%a_s($tf1qe)9 zlsH@BTk~xZ>xiqEC|}w&dye!y#kxJdQPltTtdF3R*$p4;6@+`rT@LUd&RSI5P%Jf2 z$l^hdO(918AbxstQi*9dENWB~W;^e`+8KkL3EBo!K+7=Lv}rGLe0>Dpf4w{hEqCUn z?X7z}QUoPUh8cGEvkjqtyxwn>+UrB?DSm#OyFiJAtGyqw>()l2qSY+Rtw=qTCL%GU z{lx_{z|&;e8kDDp_`F7*o${0?OdYlhw}S^BpLIzw8J@+6>;9Ri1xc$)@5T+6l1t27GYOkjEvnumaXKO`M%Qu-6Z z_H#6W$%6g_Oi~(p5SrPKA4A&Q34iI1lJBB?}24yKBW+Qypp-;>}cqvDPi`%kpdvkVkSe~-;3FP53=NYT;HNU>X+7FUs@af z|Fr&hW_)g)h)fZ64R8aNmQmJZ`d@>G^KH^$0j?h!wU!Hqf7Ez_^zvW0j?pH;srGP{ z3}{oG94!5AUziK*rUh~TSYH5$um~KRSpFkb&YFb*Ov>0-89r>kKZg^#PB{j6Q-QaL z^(Wox+>Y9lQ-h(s2BIN6+DyADrDXp+mqqJOz zD8Q;rRvgi_~_i3cQN+%`eA^wy8Kf--*S4Z(yp}2^bHPK*h!SCk1U>PC#H+Fb{ zmmLbg5G~%Ln(BkSgu%{Xrpl45td!W7*XMTm^5bpK-~(38mpk|4p7Cfv@XS7!RCZUt z|E)GDZo3JQ2(?ktu6<;haOdhOz+7U1c$BJ+N_>m?lD9CZ1~)UAz@= zfEVq4$#}k=Y%Q_FjZHuAf8#h>A@{rp^G*kfjce?uCU1m#&6;-&FFDWDU-YUqXeRo? zVe$(dy+2zoKOY`@f9xqCtqIrsyqxFy@i+Iu9{eaBJ4yZHl`?mse>B1Q#?f}co_rp9 zEj$fBxAJ8ViqfB7(RLzr9lEGcMR0iSE88?knjsojH$G*xn1$Ln<5J=6{C8bPR4)_Y zjvUKzez4Q3{S+l{yazXN~IU9!J*=|4sL0pX~QdA*^4%LRJBdz(^I9#!p+Hl`{pMSWBn(i8w z{AywGA@ZI#8^|o-hVztD4mk1+afpbX+lUwidk{Y1{*Nu4mIsj;%g}%4n@h8j$u2Ia67%I_9A_nk!Q{^&m9ZAb}jCwjCfBJ zZDcCKGFbXqK$~rJBw6Wm<{CS#mF&t3LiY<3*WJ~S-fSNBIqIvQcH{&Vp`qytH+_#Z zUs`}7i>T6|45MICMFpq6PA2iE#uS}V$z9DTSR1veXGF6x0xoLwwb)Tb-FlGKe7$C6 z0vbAM3L$aI*vF+|#>D`TES*w<;ctGT6nO_Aq2B4z=`%|x^FgqG&VJds7qsn1@i98B zAre7g*C)#;!~HIG`EOd0`B4i)kgDhn1OC^@CSitgUz_=nk!j-2fpFXu9y~crSES)wBNoG0HWTp~uyg^SjJ%Yph395p<7p+$3jK7u39R|g1_3$X|?i=C0%bVPBAzp94* zjI`mzqo)ke$Xrr-WH{09yzqp-d?EdIT&GS1Mwxdw?kBJ3s;Mi^JwuaI6WPnocxIbd z6(d(HqPIuT(dez-n&gG+7# zAh;yxsemHrN5q)WU_S+7BYg0kng^y|lGpItX!NR3ZS~CXx85y=SY~6S5smizt$ZA9 zgT->mYgBFKBep_~Pa~Qd=e?vG`kp^rkL{LV2r+<%Fz#Os9tOJ!;f=D)-&Prg!{g06N;FzRpl5-MV z0@jZ}s_Cp#AvvIbs#5Ic@|7>WV!y^gB#O|4lV(i_Em-R%S14={RYl}{xq1|av)S1< z{TsCYdZ3j0v3^nv#HE>dGkw4VSpb=NvN^{-Bignuj_L20v#~Iz9KTZstCUQ1##IDI z9FR7#Z4zwh3-M%IlSS62%F9=5@Sj8`!j7reKxG1Rb(VrkP32B;ga+>k+{W%B+%Giq zBZq^P5$Si-VG)@#9dYhd4fJwgMTx(&MPKK$ccu?EGGx}H_`k3iC~W#!27~_NfM?3p z`Q2=If!`#%&6*_p#eA-66fB+ycwZbre+3nu#xCD~$}0%URM_r4gC=PCOP9BM`lfZ9 z%+bN-^CibV9N-MD9Yhze3Tv86TbTboeR>^grs%S9%JeIYsom3~bb{ zzj~HovM0?^M&S*Mt=@OyqibJfVff*6vh1Z{dh%%Q+FMbj^YWlx+pJOxxcV$+b?4aM zc60tz5Or}6?0NQzF&9R^N8||pcp;j6^vs98_4JXAF6ziXTv+cT?4TD^;Ax$yU~WJ{pfRpZ&E7GV4@Q-KgEHXk z@RoBA`X0L}T38D+hpQ9r%L(=CZuMq09>62joKfT@oSpgE2R1d@?#scXxv;@>gf-} zsowv*7ooU=!Ru~;(A6R~!Ab~|GO0@Qy#a3Lzu=H;0|z-okR5_IRG$CI)QdZR*4YN6 zUh9VZ67-a*cd`N!wz|n}wdo`UpYci?pnQMlG%w~|X!Y^-6v`wQ=kt2Vy6$ZxuLMv2 zEbb(zx=Qzu9Fi{fa>;s^F~nI;M_OV9cyQM_AVpjYnibC&8o@ABn;$F*?Icve*LO!8 zlV_Olc!eT;IJxU*Ky#{#^EDYNPl)Sh%=m}C%ZCj+fUg4(Q(5EY*b(4Of6W8YUkSE7 z?huCu$}N3Ubx@j$oiGTJpk`vipG&)-Q3(QnHJYDy`Fw3iUA~!9%hlxc?fK@~az(V5 zt=ZZ>8CCOc6#I9QsG@*m;F+i~Oyc_`uX}B5r-pe|L$~#1=db+{;lH4|nD7 z=CNW$j;jD`5X%Tu(AZylR#Gx-;RlPY-Uv4rZp@ynEJG?=MiS<5fQ|<)rAN3EvqrR? z-2s=2R6~n>?5IH}kX;oCs!P1g!S;*|5B);xy2d;wxXW%j6S>j(zNI(@%CVH zGmN!$YMtAL&QX`ql=b2}CB1b$JMD`+GCO)aG#JpH$N%_?k6FZfh$plKGLH z=;(N}=@qHwUvyt6B&h8B^u^?2ORT-<>GwZ)E+?rswh#+rj(!{cvrXa1xr66tDkIUS z5Q>=_?U>+MHvXyH@i>D1FDNs%ob&X79&R2)nEiw!9q);ytm0yUOvtbk@8lMeA)HHE;OCv(C&09oHrQeUw-x7 zbJN<}sD;m;hVw}o#)JCX4Vg~9tStX-2&cw0c5}dvn(&(fuzTEOvGEWNnql_f-R1ie zzx=Fe+Opryn>Qe!0*k7U>?(3iAOXkdQ5+s=a`|G+r=gnmI29-G zvCvR8m)VzJpb`%snF(33W`H?uii2VLwzd)|I)urrzQWi%gI;)gck|M*=o2mDZ4SNV zk7vtS61N)_TCBbl+rQ(JQqou3JXDdq4pLO)v`_j(X-;uuuvx1=q_R7+11qjK@Ze`w zkQtwmaTi!7Of?f*V`W(tPn5UTmxyJvIWi!LnU%DD!f)LCLf7eY#s_M4u{P;Vd=~Pq zYGOd#+YT{yvq$Y(t$u#5=D6@^7im6D(DvlazrbGlqk_hmZ8Gx9?#Jk13#<)?ZR#}Z zMUbjf?nGeP-(Q8))B_jApA5|?LPGOKP`&KQOeKO@TJQ^b=@vUtC2ii##+(*M1105e zXU;AWU_52Bt2$l|5N&{m;FA>u_rL3N)a|n33y!b4>d{5Xa?8o`%kO*6-k$QB8SACf zdhA!H)Knwwa~x5luGQ9>+t(7y%vL*e%U^YP0(QiNG5bW>?y`pb%4dAfK9uY!A-iyW ztYaof1!bDr#B-Vu4x#>)eMt^&3T>PY&b9v544r6gV4WgPWm*7NC_^6vRDL|Fm1`2; zpla8T?QYD?Dix8!vym-(te*aSmu-_xcJDsap7MREE&T*lZ}g@ndOqqLLdKQ@Rlav~ zz)O}bBg08v^a(^%#za0gwHKh1XV*T*BYXkU;w&DQMCBx)-U7#ZEu%*}bbE(JcG zziqt-{>#HKSq>nsk80ZEhv9Sr0n3%YVWNVM~FWj z1Npmd>YzQ0*4nOSbyG_?DXjq&e`FPZFHE9cwTmJc34{7Q)1PimPe^)^2Wqwxg|m6< zf$Df_53ugM+p6VQhhHqSqFK6{=PsWNILh|JTX;ASVJBH56*Z;>neY&!HsRLS`}G`b zi~a-#V6@u}9wRl2m@zePS(s$|F(1jsl%ppIk`%s#<{dU{W z|A5UgA|GHjA|g$<1L-!3bHZx{U5~Ao2I86J#RF4+RDKSO$kaeOZ)Gg^E#!2rY?iKzAif=g@i#_9*+?aBx!QKmvNT$;l5~@8aN$$Mj%h zLj5u6#|1u@^ZBkfu4U*i`M38&Y2uqKZ-wQAY$(h0(%uyJd+j&E8NSk3rRF&N%bmnC zm90%DhQ3>#0$uB^0dGbS%fbd3LO)Sq2%hNaQF(#2pD)&(^&8&i;# z{evB^*UiuzNj-5{yl0qqH&a?MA29-G5IPu_k>A6Jc=S zvc-P4!Pbuh|2ew$V4SYNTO@tU`=HDFx_4oqJ@fd>#?@ode(BJ~RaC;t?^V*4j9NXm zRS9-n5K;}fBNAu5Ew&u^orS^2-0uu1qRs@>qnpQUy^2!!$Ktykhow?F^v-LOIR%@6 z^ao`j5pG0#S*}NqK4f{#SPM3sTU)lh(@9}~y^#T}oN~Qyi?9GSW|hY%>u|MK<(fuA zc?x9Xuy}7r8n2znnZRwPZ7!d;2;`=&H^$Kz-VxDKBIFG0CRg}x75e!>ljAxY!-!{h z!@2=^T(Aj9q7g&WwD{FbpAJSf!>1;Bp7QlT`2|{4y(*|t8B@D|1qoaJTS%8FqLa7W zKgfVAGcb|D>>jagwxTZNFP7Lu72}>Aq-a0pxt+oD;Q*uBb6o<1m0CkFkKQUA?3Hu( zD93mmm{>H<_QyKOzbc@Mc_I#vD4Z({?$vc?5^ZzI;VmcTbzKZ5RuD`td$q2L`;(lI zqe04=?ri4o?qzAUGrxW%vBsSvdnNhXIHdtu;|XM4KSJ!y_-RjiRalZj5Tr)o62LLR z=gG}}#hub1gIY4YCA7hw{FFg8d{KAvfzn15>KnzpzOF*ssAGs6u#9(uZ{+wTTRC-; zR2RCUU63AnJ?Ti$D7_2vo!Q~6>wTP}msMH~M(&y&0{Y`;`aaq4d*-urOS{NP_R}Ho z!)Z&xw6$NA_U3FlR3t9A;#{;>vf_ngZeHykZe>#iS$<)~ROLD(V>~w-a*qAo#}7i9 z>5T?9LHEhu_8^Xqy6*?BLrxP$v6r^VtSfz4jR2O-*##Y0Njjb1FRi z6YLwY)PE;I%=5VK#}jhC+=_?#wa!M%|2@K|vbW8i^_@nZWbAG(LkR5xamTgnKs{g? zt-3p*nCI@grMmx9tJJ}4oo24N2;KnLu2z0mnM1Y2Dt5F;X_m8)O}KYkrmzNX`!3^+ z8BzJDhF6)EyK$GuiVM-I_KGEMDxsxgi++r1Q%=<^P2P}>End%4v@Zr0Nvl)_+Qyq` zL?&INYgQwi?A=t1N~M;lkFL^9RV>-wqf@Deu5nJ46OsF5s1VZoWGKJ;7Ac}tMEmac zJpT!7@+(sP>b@{mvNU)MO`!^euCY%Qb4oiiCW|B|X*heBFfF3+u%~P1H&JGK_F8i` z`y4+?m130>CMxQYu64tHRrM6IRzOR|6{*E0kc^chwJ2n$Rc9QDHhf)7DpHS4pc$)- zX^~FQWK8TZH*4lBidN7q&+{;1E@4?@eO@^!L=urKiwxhSGws9^I?zFjWFL-0B;WxYNFmY_-!O%Bi7Yop(% z2V>e}zt;Qu`@`KUy7}}_<(@RfC&K8Z;y4R-l*>?n`(?W}w1|HuA7xuY?R-ecwJB?AGAqIz>i&M8 zN)0;i2W&mPI8UUXWG1O(z``>QegC{!TQKN(e>xw{^$mEqo;W`d>~&z`o91{5qn}1> z0;u2NLKS;$0XqZ&hu9G>+n$)->zrRTJAJPZ1gyzB;l6>1I=d^yXW+y7I+}&ZdY21Xg{ycLwi3*1w%@_o!=ml92;97Gtt4O1+scKY_PYp z2Cw0I?XQ-HUkQNNWzSW5f?o!y)Ar%mIh7y!+lvOv@ww-ld#-EU(WC&UPI7&Fe9bS( z417*SE=6$KRj2&#P90&vW7xj{#uOpa&0%QKw%|1{QWB z@fppdR_}}Y;&%)i{#R&c9G9z})J@qfI@?#TyP+aL|LEaEy}F`XWuz?y=&=1=f4?53 z)s42qu($!+n_VYa`zoJ%)%-obzk@)z_C6$Qt%9Ik`_Pme>A^W2ih_*mzeBB4rgp zw6G_KVpj*5OR|hE?vLPC-Vnzmh+)R|yY_X>BS z-(NMWS^!}Y=nl4QoI8wwX$4%lzkkWzT1Q-v8YZlx$0yzXK=dT?Vy|?5osz8L+vm;1sk|lmfthZedPIm($3Wwr zJJ#UJ1FLeBcG^5HG?7|S?p?2wk9L{Fd9h`|H9rMUYZSHI0Q#=2d)*#|MD5pC-Fm-5 zn{l1$DhhoRz_IAyNQhHA_^jS6?+&)V>KWGw+BgX7wM2RggoDnP3rj7}Lx=kHuz@Lb zH%}x|TKSZaO&3aBUBHqM`*NVajtoNqnZPq$Hx8|8*w_I=0;bP zwf@7rH*RctXKsv78dOz|Mb4!sOM%T}H|e*3?}mH|fMYCVv1U03b{OJcLU`n4jFo`f zA$B}>K7B-_0XTY+4(4cKWluq7BBVq85DPmz&7C9^i9pi+euRT;EmgmS2)VkJX^Gm; za==Kp%h;ro;Q`5(RWh$upTNBFpkr1je$Zj6F z-n?b8mM8HcV;&k{G7d$nw(`RG5r-1gV)KCojLMEE9AlAboVq;z#e<_814&X)?F-7u zpiEBFVP1?i1GPey2M0N>f6SiE*G3h7_@lfV#A^m7Q(B&v7rUeyzM?wuK~x$|^EE1m zu_RTVv)+b6klA{jIVfZ#k=qw3Xu>%+{Xw%_zjBYQ{jQo7DI8<&KWNGDoYvCw*D|62 zp4ka6(CfVH>F&4q(8W6~*>mSCTSHbuxtl8AIP7tA0q9hCJ-B}rD2Pk~^>LT&-VX#& zvMQP1%N=o;V8fOJkitWCEDnrBBr8-;?4-cgzbSPu`8egd_$N;f|Mn_^_ZA{WOBF7N zYinyLHG5}mrvEo~=gWh{oIM*)XVT#XBxx#1zP}WI2NzhoWhtgUD-s!6N2K!Qs3vg^ zoq#zT2`AXLH<=rIEQFi#%4BKEn4RYGRDFZiZdL1H_X)^9O|5zdbkf|8Ph>y{^14zg z6@O5v7V|m(@-$yjpRg9j@NK-hw;b-KZ{29@8WAbak?8zFHLP7uH z`FzZBtmxm?8qU~zB+hz7g51`%-?)pDOcM-d{NFh)p1xd1OrG4XoqUioA!I)nGNke+ zO==a%4VY%~6cpAxTf?J)AUP~7bH^m^(-3CgsJ6KTWEsNf>4FCLlsCRUz;J+k>k?Bm zE_{QaMjuQGDWoNI0QmEEwD`93Gt5}m^ZXTp`>n1`L1xdSay#aEyT9R}9donwMVtvK zq10KS6Be7{Y1I~!-Jx}sY!W_);MoQSeZCJyc(>tGh66H+QLc`+jZ&bqE6rkNbQb1X zxE6Op{}xZO=Of{GP%e!IFxb;Ua7hV~>$S;AH|y zYc3r*6@a6Llrh_7c-dJ!fQo31pSqwfjhSM3Knh*;_f!>ew|)%9AU8m{YVHhgXeTW; z5Z~eg4BCVnqfMVFa2d*hPg6;or0)X#DOmWD3f*pF?aZjC7I!f zQ`(Y{_6M(&yb94vLz+KEt0j|{^1G=!vxQ10)uxwC5WE|IgebQ8;f~WZT2sown5hmet$5b0)@j6e`yqJKA= zpXY~)8+eE1I3E&=ToR5Oy1}0h!Ol^f4Ig^iCM*f52OUgjGES!{@df`Jfs zP(x8wZ1?dvH2_+DFm=axD1YBuf6(1cfv4-0c*0DZ;bD~y{GOox-h$a1y$XRd5tYDP zwiUL&zyVE2wztatv$lqJFn^5;G*ybTs^h|Tc#$r-x~jv|SEoA=Rtb`Tx0JqOTHAZH z3c7b$BfB|8_>*wXX;7oIq4J1vU$eB5FmWVSagILoqy#K!nZ*>rmt=(gKoAkM>j#-% z`N$D!U(|vqKI5-OZbx{-(j9Y2c7FCG!N(G{hyqpRu&k%;JaZhLA}ubHlk6r}9P9R;MRmKP4Bruyq}QPyEe z-`02=ieMiMFF}0zjtpOW`5b6E8!)2yNAK?~^v%Ga4&H-%vcRX>+N8KR%J}u7 zqu!QNi;K>#Z0P(yvU2$7gLP?`;jgQmP91mCYnWHTAZQc_7?kRD%@ z!UIuE8*v8<=492A9Hd;Y+qJdjsVrxU#rsdsCJcW^%O(u3)!)s@_idO~WxzqfS_?78 z4U-!-rUb7UQWEm<5-O&pI0sa6oEiDOel|BCW|Mwy?hCW+xu`YKokB<*WU!+D%*AqW z2AXvK%UmQXDvq#7%29sN%B;q#CAPR4rxkq*kp2P+f?Ds(GH5uec;|jmN$UnBt^Obk zmRZ&y9F~c$P)MP7n*jnSZPS9c?;rli&96ZkT2?6Q)Tudq+8J8voZ{A*AOv<`b z*eSQ?d}ruV4jFv+vu`N$m*odYD|s z8lIamt8H}Pc-B|4lEQikh&S$nZu@_Vu21B41ZcY=mg~6&;APjmlSq5nd(KB#qc@)Y zL*6LEvO54i{{lkai4jjGK|=9f^@8K_!+RRfk)3>{y8s_(<-7G7Z4963Rt)hOZngYl z#OLL_W0CD*8c#_T`4`M+<)$_m@mdKdbPONcMP-bQnp3PTwoYjAUW1^5wI77yb8AT5 zFyfbgcC|2k{7YdXYOd5oF*at^F~kkFD-bNYe(D06VRe;1?_%;Y#A@(&Eqp*@nB;7c zidqRhFcUV*d(f5eS`k^6EM8BPUb@j_6gg@`=h={uA&as9@xc@yxh;yEIQJAQd5+}6 z$=Ltyg_6Mr`xZRUmte(OXN6F_D6Ztmk&r2LVqF;{auT9Gx+Ze+g>t^j7s^VWYx&s1 zCqT9~KYa23N7h${#St{?;_kuS76|SZ+%-sWcX#)}-EDCVAq2Mo!686!4eqW%gUj8V zbHDT4=iDE#Oi$5WRsB|V_v};^+XZgO3|@g9QW?pQScxN410ERSUkzj1|Fb!83HWQH3-h;KYX{Ry?x`7ZXr?q4#*y^tI29 z9Q#nVotp0B{NU&()eo%=Qtnd5?1w|N?XTEgxd~?JT`kD@J30qIF0u^*az)aHtq&Xd z6-YfxH@?t+3BcW*cA{o(x0#;2&PRs4HqQecm6JJd*vZvPL3JTdHDwnEvnR27BCy&h zDc<|pEG*QvEu;4qq1Hq7i1uC)yLjmnG_AZ*?a2a_rN)} z$pzaw{{#B0Q%|K$WA%Nja`Qt|$!(S4d-^nx$3vB>;;9*^>arGHDDPd!>{~Ue=~RrQ?DM z?n;}a{>Vy`Cb?L?43HgBa9qf9Onsw)d|80LxID6Fv>kfm?XuMo@)5pBRD1R=H1DDl zOX$M;Bth*CH!TOb8m3Um*9{#OznYo6)GWpKjd+z~U!i^zy6FDB``%H&acJFDe!DB& zcY3Ux*r+_f^iQVulvrt2Gdo6xH)?<=-4vr$UCZ2Wn1#YH(%YI(S(u-jl_MxTc)XCv zDR-TikH9Efh-(=6=r_^^N|uur545sm>q4V$$mKKVfnILCm0XLSN=3<2?h4j7FEE(e zg#)a5itTqX)nO7znz@>-3z>7h+Ni={z~MB#%*`7Z{cxyB15GSfv9|_;>4*Eni?9P( zjpD=I0mTWFX;0Sgl`nmmKbBFgIxejEGADKm&y;0%v~YwDhv6`b!MQ3{f@?PFy~*5% z@OG+~>o8!H#HU22;xLww_noS;UkDp4x|M2+@t;(!(nRQXEku`MINR-}H&EM?Q*nIb zarhen9E9inV?((&q=-rM2rbDB6Mjm~ywVQyiCPnNjsrdx@1ugxo(ieHwQZT_@{J@9 zghNjgQpBzTa8NhKypXyH#+LjwrLO%GS4{8HTPr}`P(uf+EoZwJS0RJwzE&U#_a}{p zcZaFfi1SBsF;V&-Q|eS#q>gKAFCA>apE{y~;m?izhI|9Pox+NLu4CXnJ~R9= zpi17E6%XB(sI6+SC$5V4`pqOiGoYiI863Wvf zfCZ{F_tSV`IldOj)_Czyzcl1vBMwhi;? zHOn==v~jq=@t><_dl;G%<&PXo^>0vLy2g0H0y*K`Y`@%ZcXwKi;XY3G05#r9uQ72# z;yTeR!;L1L-0)G7u`WMxhBPhk<32WAY#1|IE@> zLWrV$RC|`8x@Awu2**St$Z>;_gtz=Rk(?}1W<2ct;0+!_^XLr{#bDv?;r8G03>M(G zDO~uL5^Yc|G{E=20~&U}V|PKGOuIw5LvpahL2vuKqXpAWz#x$BvX|yhSk6bEJp-TR z)GShPew!sV&0@^QdEKS|^1EbekW;|@@ag^zJ?u?)IJ$Yl#+O{AFi1qrOrtd?2<~cQ z>-t)r&@69TrZAs&M$c+(iCvMf6fl5NLn`@9||PyO(6m zYCYhbp1!?YozJ$*${apybQiEfQVV9h5h4FAQ;#ofNt2zd>5Q%_0v`@g$Fb;&>&ArN4FO2OilC22*s`81F9se-pw^u@*|g3n4J!^LW1L{ zw8QF3N&>FS=7;vFsq8-_VSqU9Oza;L$=SIny+fjAn?tEuV&Z8cZrR;b+Q(Zgul1=I zJzfuL$*^E1N^%8G?&$0hI@hdd62X+wNSR#=Z~RDuro)3R`@Bxayj~y4tnfjF4NYSm zk6RgqlIDF4ynJEmZVe0G6eiXfBhTAN#U7c~@9Rr^s7^W>_2sOMdNQ%h&rYOwoWlb0;Dz zirptfX~Jd+0Xn!HD5|~My8R6OW1;36)#kw`EV(m$QBf=Zogkp~Qe6#m#@w ztE-)CW{ck+;G=t>Z8c-VphzAMX3dRC{=6_Lr;=D&{j0pTR`rCJ!0Jb=XTyA;3TATm zZl438;DuLKIGe+6UD+q3-*n>;sgI7}ERC-?(W0}UUr1S%wUg_hP4%}S}KK#so zu(cg70xaIK>50=q_0j9VS+$X9qluxSd-xW-WwFr&GiUMHz+3Wp<`c(MfN=l) ziC_eZhuo8Hd7Z2Ru6zG`ZyY)K&4w>tF_`DM%!rcj)(xIUz!GV^bPtYXbX-i1Dg;8*{6^I_j7$0131&V>z27j;yl_Qs3IUhu0t4Fhe zPpm_wHA3!2kIiCEq2_i{hKdk7HWh-wOzkU4->ef#PLgBbb(%=(&M zvb~|`{Yv}_pybJwe%&7RTU1NBdExF#k~)lXUi812aY@;r{=DeJ()r!p?;JV7(lDqt z#^myap0UHgsmhz^;X?LiL>1d;2fqff03hzf94O{1S$_6X=Pq9Q!)EjT?2W5pYr9Z_ zq)@FrnO;XOyLt}2aQYrW^X-RPUC6^mzzx~%X}YqrPFd{~S15Vk%0n~E5Dx_&tTyMm zs*<$j+*bn|sJqR@r)M0J4Y94gNi}(qpOFQ`nv+KS?_OUp308sU|Jj{@AE$6pzz)u! z-8p_`vq?UAl2oeYo&Uzo==lP;O3=AHe z^p?HPF!|KM6m%u<2@+@(b0uX_1v}mL-seE+$J5a4)s?YeMOR?a@aoG;HzvIXxAyNhP|{N%lEt}1d>ZraR2$Hi=fk)%1kM zTso91U&@t_|Nd3^-2jiAX|#}Nc)28{%V#WH48+7#!{q~{PcfNtTXLHhHM@Zra>V9J zmS7r*nJlUi5ky*Lix&}CIAvCy<%8g&_ZFotVpHkL-`h!%Lqo~&FpzRs1T6|-Q>~2C zzthU)r1792(gNcH{l~ZboU|BPmAYebS+< z0jWF@LtzTnM==tk{%nR;sI3z-$gSR{iKeXK>a}IYS^$=+e2^Qk7T`Z|<42#QD(aes zwAM%ss3k|V7R1g%dbrc_mBN^LB*ZlqhkWEU48qvLlDBAKe@371O@N>2i_w=h6#9uS z#w<-B^fMt6a^JO7x)BdQnj}y?0Kqq!B&{ArF}SryXTTookWTFvgb!s_S!qLcTPim*84)xFRWSOntrX~DwPboRn+M-MtTdoVe=?ElSE+~Cd`Q-0V^?080SS?Tu zc!qLV1V#A}c2TiVVt>#|rCwCzocuyyW=$S6>xKEN4kdA0I_{)th>eTapbaw?L6_krDSkA9H9-kP;J~pUV|`|<1Rn8! zjWW2g0F>shEef5-Kq!_CrrqMZHZ!U=>AlW*-Mz)CGi}_d&>& z>1JR~=7sLZa}BZP#bc@64Yux)s^!OM4XkVZYGF=#F}4l;{)jLhx;M3Yo1gRo4WFb6 zG9GFkkX*vj!=)dpMv91VY$C6xvn@6hElb4Qr$lcp7lTJSg*I=KQH8ecSqIgJrwLWi zOZ;g@=X4kA1yLG*Gg}g?QUGH!yFV)x0>?NX33mvrvWP(t)bzD5=@R|aHo27l*M_J_ z18I{mOy6Y@x(c5Xf#}L-uwG?KhZ3my71>6`bmFDaM6HCvORa)FERz;o&3Y znpQ&aKOXENt+z>Zv-1Ah0MHPh7ody4=n!*b1{bZ zTwcG3ylkK00a?_<{UOsPbb+>%s2Q{(DRJs5`NWY7^8h#Ja+=N{atP4Wm zwJt_iQ4LgGc2y(9hrOO_jSO zfwlqg(IhA!*ns43%7}x$|7ojNS$`o2K1>fs8yqm1E-^7O3#G4UM$|!Yp#-IoKv}5< z*4`&T2_nSAaN{GzUFL4{!EB8f_KC9% z+Xvr0CT9n#px7N1LfGP?PKwBm#5_$8nd!{DbV6R}Np|Yr^Iu>lQe71SQ1THFDf7}J zz9TRPyEwAcnowz9_d=6AmZ2H*IBYLT`MC|+;Q0mGI`e^4GA@Z0hEW@qy4Hs6KBgFZP(TPqrb>dCsWc;K2yxtI^MNUe?|j+@6q)iVa)c1h&BHL zuiB|U8HUKwP7G%rl1T-Bx{F(^bY%{xZZ6q2-Y(lIUKy!E_mJM{8j1B^;{^z&nAg76 zc@K#GF&b_!1E$wAsKR&pWl2@XAEsgTMO@<>HvCN1uO|?f6FlM=`r9+weW~R$$bE`X zF@>hI!3_4N>z_vGh3g!WJbHijs_~Kt7EYv&jC9@y$m1D7sQ8$VU;wEEn97>lyX_c0 zP;+Gm?XP#vPEW}-S)90C-e+BG`wmtW5yD&DNmhjTV z7R@?KW0-**tG$ujPI|VVg_DoFVKP|BU-Ivl$Nx`{NWZbaE~vR&360PiC9oX|MTK(MDvqaZd|ApCvSPrU6LYM_<>Z#`f)8W#rpp?<7MHtz zo;3Btk!~N_`1XX77rf#|{0I!s4hB3&%pS=udIe zZ4j>?C(7nc;+|x>Gz0%Yij>Ir&N(O)X=wuiIS0AN!sX5JJ}B2OO^^+98)<`C-)jX+ z)x+w3eE`!Ww}2m!XV-~aD!^jRx)R;+;AeAfR%{eE6h*eAN20dz{9*2Pg42^|$d{*a zq+Q>*`oxySyCy8s{~(CxFL_OE3r$mmY|Vx~kZWp`R9kz-m;01?Fzo4?-MnfJDXI(% zJ<9LSW8O`_2JG~+Z|Ix{*3<@vYQO01e~KB+Tic-#i{bN1{anb@*#jplXqNTn@WRR+0=1bl_PYWZy9CG7#^o46kieJj`Qg6Yn`2tn495%m z&i4oCZO!_E)6H=;x7T>x^K6ft*{A40=fUQ)VJDFw3$@2uF4cxlu;6T7%<#Bc14O7+aTC8DMKY*LLUfmQdY)pj^Ac)Va>&cl{X^jlUOj$~~~? z(0uZ@Ko-e4%+fH|;#!_~UG1b8gKpf-qhI>W?KM&R-Mt}l2hch9M3kZbxS2UN9weM- zWSoOpdu|W-1tu*Ut|4zl9_#={8>LS#Ry*k5>sA)FB4^UcJH;^rI*JQ+{P(f$c-EJ} zCbktMU0zWSD_f5Zx5Lp}uRkUF=MDWbdP|BU@f-A{!v{5;=jWO5+CP=&zlSR4BLZm=@JK z3MAdEyQq~OmR7!WuzG_*fBi3Ru!tjXICjJiNV{JwkMyt+4V3Ie|9rGtS(E?d-!EnF z^P)~B>0FqHw_J%Rb&fjF5{|5J%g|-pF>+9jpEja6RQWn0D908w+MH8=8R<3t*W#R0 zxpS8ztO3shIX4OrR<>Q009{v{cxm~GziK3QgLhq4XpnfFBLb4vXd7BlVG2 zrlfD$IfR_d@@JLu_lr^QCeN;a1UfG$-p~n%%xbc(buOaZvOfGBtDLF6USVX@{JSQj z=1ksv^{^F@G#>bIKmP^M`Kb0WmNqxE{(Q~!#OsWC|NSYD+tRYa-3`Uv{kgHJxGC>O z_g*3wR}b7zTDx-eN0+t7HK+x)koylb!TfwRmhmxmBKn@HrKuC!M%O)7 zIwMt@!j@TH4J1K|oiQ>2Fw0@0v9yW(`%amlu)JZe=Fx?Upk^BA%6vGZe3+Nq;_ z*m&rhTH3#rjl*W4e3xtuxWsXoUEtoZ@wF;aqx7NpZ}s0rmOVu%W({eG=x}ux*dL+kfE9 zP&eRN`s5x`3hX{(-uz_$9p7#2b-P*ZtQJ_?YrrT9y0(J;y>j4RVSBH$tAbYl$r^{= z)%FG8JN?v&KcZyuU33wYEsM&8{(Z;J-P*UP-eGCdxc7#rTJsSUAG202UoebXbpqc# zZ5C%@vl$LD&(B#rPVqg>rWK=e0ivKOqGHWSsiTN2^^&KC7;wyx9(T`=@ot{ zi6L?N)=%}0JE=6H7V+CQ7M$B*v)^uO+lQcDAfu&FRgN2e=N2QR#8Y?9nISdk6=h&U zoHp>atey|P4}WQmkL$tn2tk)6Mc0oWLnLW@9$)CX-TKuGRUiJs zW!(8Bdj!ckeiu<^@-K6DOTV)TTY6t;l#|)h6g|8RlXwom) zMW3|go}s?B18uVEhqmfDAjpDumZI<{Yq)GZ_4;2j_@V6Dnt(Ub3)i!-^P%THPLXa& zA{Bqj(>7b9GRJ#MCgM+Zb~rXvkloEuf|)@QI>m zYwhk$GaFwfNEhpwnq=;Fbg%)X+Xm-t+^wejeh*cHk}6W+S)D$srZchGcX0V{?Lmre z(sc(?Rc3JmS~hq!aP!5d@Mnp;UH2^3V|Q1`&!NAvL6+B7w96_4?_iM!vEkyO)Ny-I z|1{MPRPfCC+Bk-<-Yil#%#(xVV?lg~g>MAaVHDr~J1!_E78DH+@bLe?-^MoQDJPM( z;7Q-TFj+bFSf(Z=CBel*ZzmB>Fe1Ydx+F(%$8^-cTU^>bIH>!fH+$V{KmK#x`2@E)vQpRf9l8e4o7 z`9z-&ZVE{9oju>)WlU<{88~sWMV+<09BB;k2JpFi-VY&0jlOIlYPSi#uF)@cJSxfO zX1o~Wb`2S^8?*?Ky?vX)pwet_ez_CB6j@UAM%ydX*@%r0W}N=LMFD0>0Z{{OzK`45 zv5TWxEIchy(jB7DMbW|=6hST-l{-msJ^%*6`vbp5zEEr2EmmB(#3ZMBt$SX*VO<6o z>E`JLl)UfrX3Ti#<<;hv)jhVm>I*ROk-o$B@G|}WI4JQlDxJ)DA=3p_$nY}$#S-%< zdAEX6x-jL!3OJBI)rM)9;DM;2U(@pm8?J(O-y}k2r>m++x_3NoGUsDce87IjQ9}$J zjjQtsD&Lid?eSs<+oL_plDf)-HrVj;q}4}MajN!@)xzOwv*BuKv&Lz1k&(R=YkbL| z*{ySl>==-};@;gzgc_=+{K6J6Ur5bOHSwM?Awx(b7#2bY^|I;;{Q#0p7G&PVP!pWa z3n|Ih>Dyx~TeMb>OV|90Tv;w}B5E^hk!Fjx z4aC?}{8Ry(cWGq->UGkJhO*A?*4PiWZd2`72wj5dTHs^Ea>OrZK(<1K;-l)V5x-!h zUF5;4f&3!uO3Z|rZjg>1Q==pvW(7gyZZotTd;4-=^ zflE}70tA)B+Cba*Lb+n2K(Sy_*3ddK#q{7#!%Qi_Y*XVx5hF)pFww#zV-XZXP06vR zK-l&;VEu+sgzX}2i4iQbfBTJg5d;uS$3i8XrfBX%*;pjC8P#W+fVHr+Hi?$ZqxGPz z2TWR{@q@L-3_uvcT4<3>!v@zOTPHRg!7^3=dkTNFEUlP|eBG#pIxPkU71bLAJWOjg zWGo0%zlN!B5b@%|sox`eb!H!4Clknfr|{q3%M6{HVGlwP zJ!wBFmOLA^E1^*7ke?dPDMo5?G`^2kBz+2h)>j&29%c@o!FX9E{G%_qWz2&p2;+wd z(p4kuMzSz{(hNOZe&*q+>Enbi?H4eU@#0kqkmsIRpR6ELy@Q;=Z&s66P70YCw|1Qj z(}0N2k^gQV+Um;JDYixr=yP5HgH!98+rifEr#ld`G#*2t_0Lhe$E2%U5e7a37v zM%Ny$N=gHHc71V(7JaNTo}ytA9s*&Ij1{wnDWSJmX&3*_=cJk}JYh+8p-g^#p~jJo zu%17>hsa;$8{NE$GIi+%k41>4OF3M0D0wOZGTY`gSP;ub?9`O6`+y{f&2lk@;7Kn5U9hy7l$xG!$YLhY z(#KV@Aie$dBL48~3oY3&R_P?lgq>D1=9nFwi*%h>V-8j84|F3g0de^YJ<3)jd>7sY zHjQ;CYb7srZ2;#KABmM3IxmGuUlZq)cvc>pc{9F_iP8Dz^S8#|5G!gXH{$@O+-k{- zGdc%1>Ji-`BlG7fik1`~5HuRd8^ShXX#bXGKfy8xhvBFBDpB=I!$pg1GsXtm`ZrZ; zs!5Bu3pUGU6)!)n1auxYhi=s`e*Rp0D>Hc|k-gg}ZBlIBe-81A9F?DM*5;haj?)TfS8`u^#%gJ^(@ zUjN7Pc&Oozj^pXgc$teT@RpJcEwMbr7a{aYGX!%T^ZhJZ>&-@lBbbJnU}&fS6MQ3O zuu}V(TpGefp$q2}W+gJGk@`S^g2c)z7Q$usCHCj^CK1nUWU2?P`-=@rh;@^RE9ku( zC8YKs{G?v!X35k=d}ukuZ;b!`sle(>ft==|_QuO6e`^X6H#JU<6uqFCQyV`Vt~~-= zqbx%U5FtUF#iX2@+CQ`@>|uzXx{;*t6ASe>R2soe)~!OSB!*d&jzNIkh`<|{Y67;> zih(WQp^#+$#qASWNR4j+p-m!u;&X{4OL-yTwnq=IJOgK;W3fVT#}iBd5fy5y4^?Q# zY5)RIvhX;Y5bITD4Tu$0b4h680H?R?^{FeHx+kR-KcOeTuBJfvD78xAH^EBPl7zt6 zFPg)lhs)}-oiihUoP}9{f>J5emaapSvYc4!a-2S|g|6dZgthwuq^cn5WU@5GC0Kn^ zNhd0RFJ(^QhbfRA{^z{Wgdt+|a0NBWk;cm;-!N)fz!Y4rNNpqeXbhg)Ky2Au{e201 zK}5u1HS|PZq>eAD4L+JmRH{j)7Nn@4%I(;sM&oFW*OPnc?O{c*wdcc>A-S8+t$5VS z`_${LCJq>jaD%Tbg0@zPp~rE2<>1$B5I!(_)F>MCvgd6asG_^xA^LLWjxz6ja?sK> zZa6u%?RTv7Wo{sbsYjdW}k9F3V*aBR| z5_Uc*@Aw@p&sKM~;%(!BSlE)(6#PEoUHfl&?Z#f8w9UB(i8%eSv?}3hJXbOTUiND@ z0-nwSuNvA{)^DFCgE$p=^zCF$$H<1B+OO>+k<-rtYPv+O-)-KL{^p5I!2UMy z_Pp}MIo}dhQ+Q%3x-mg6lHOeyXjIc}pJ@M4`E{tlkZ^Md8gH=Fe2%|mbRCziikE5V zDaiBHYzPx|^)o5PE%;6&H&-dpsh(H9Iq%0qfD|2jQpalR>q}}W|n;Bc~pM%dyy988gRX0)taXjN8rpzd(8^DMS4Icps7wx@0U_Auhn z^}-Fje%OsG|Kea=b;(g44g8>+jX*qOpFdZ8`kOo3rPp7T1q^R1IUEpn^X;oFz}^br z0)tY8Nx2b|@T`s{&x7MF{TDCLW%f|_f%oHmfn&Hkwr#5ctR=e-ELE%oL^p1=*J($- z-Kt#=9wK7-`(VSNcUQGd4HC2F^c+`VRxh1vr+?K`JAaN(mQTLc0dFnP2Eh8A&)DXL2=eYo+zEIT4Y+OW4&nln<%3w@ur0k{{`;I^nh)BB1~PegJHUVK z;F0R;qyEe^v4MJ1pWo`SmFQ@G(Kdej@y%Z^nA^tlFIZ_Xjv~y0Bl}pquUnMy-ndEO zXI5wn<`ASPImKrrR^w_4&S%k!>+4=P?9|y_QCcR4c*ZYLMJ1{VcCbYpeY)lrKKFaq zTTlHeh#jJ|G@L6m+=GLYnP0>hlNYM-tvJRZ#T#Q@wR*exYSJJ8<;+=R_U-F1smzDdn;v$1Ytp2>L zYDjuZ(WH;oN2sXV1O6nsZ3tSe?6DpL9Kwols_}AOXqA&iTk$y zgs3~1usOj)dPPo~kQ$~2N}`EfinhwKk{{zrPP;XMJFIf;U)7AmgPn7!rv|As3IBUG zG3&!B^~HqSHPhLRs6%O0d|aDHe}qCoomv-d#ew!$5g#_7WO(8B>B+WN@$t!#PH`TE zMKbnVeLO^CgF#<c@Y=*zT#t{ zNRfnY^(aUklK9E?!XL7!yR;QBzB7sb=8bBgxyw#ZG$b&}|B-Zylced}ub4q4K^~Xp z!d(t+^cSFW+~yf$#70Ey080BjeOgu98WEemW7r1Gx{V3)C zWRTy?CGPZX^_l#G=E@*h7@cF~J?#BV{1>n)K zrde@zIq_5V%g5c!eJ1$$FvTZBkwz!zK~DvyG6%Z37U1Q!7I-4T9$~0LG*3_)xG#3* zptBjeS|Yk3^FtPSDkC*}kY(F5(5czuY*;PN+_=R)V**6gg&FuZax+i72Il?dpCp(l zMlIJ8rK70z-^uQFH1W~ zw7!raRuA3_CtLmed=$4&d;52b6&1XH2)So_jEz?mYI`#zYQ-IgD)PWKo5m(btInU+ z46@d*J+zIVP69hio0sYj0;0;U8|pC|F;4C|9x=;yVie1hKP1jw z;xG!k!jQuo#C<5r{HEAH_wC`U?hV1#v>anqPm_v5*T8#xCQD?9PsE=?%`~V$N*+6n%ZT=HWV%pqTmZ@1%zd6%X^qHbq)(NARKG@Z+R-aJZ65OCkidgA11RFM- z{t1zwJ)7NadTR27IZ^u)8(8Eshys!X!IQs%$G3GkJz~plnv!qfis&ZdA)a;JeEjch zOX2I)22ZXK;scWC@scPIgrU%TfK&+h+{*qeyl$qv%!%B4l+^25l{tUoLXsvNIYorfcf{t#Y>TDR&4;1v)mc^(}U z@ZWh?ro)Hhvfkoh^d5!549ANGg`XCdUEcjU{Sq$UJdO!XgRv}4b=`}>2Bg}S{(jh% zzUkw)xp5cDGFdkv_LyjdT&LfCWp7D2yqu_kKBDt`Gak@Fv!3UQ8T(`o z)Q;KNmAooQ&}1(9ZP2$gh4PX-`?@{se4_g8PN()tf`q^Oi4F&c^cj%4i&tH;~h8QcXx~EJ%uBI zF`PAjxv^@m7EWI!SKb3ROUp!=FNKS8rrsvTS|nP&_0KOt6^-ZdS<38Z!`Lg~p=Ioc zP$movV7cdONg`qfVpa?5lTdjt;i(H#b}#pyJZhNKBK487}{MMpl9!|9KAfcF2RL?{`A^h7QQsa*PQH$D^#@TLBV$eLWK51!FGD7B-zJ zqy?4hgdaiT{S!P{8`lAyWsjGTLQc1j5eQEny%Lh)a0uf|3c^M<3|tYHCYDF2DeJy; zmj+)&bdJVe)Q+BVGNu)+b+jjp>=robEjg11(p07cb=4n9d*O6n~g%dMu^~^@2q95pLu!escKG8uIKY;kvDg{60mA^1NdR7q2_AArjxDpy%-EZK3*C{* z-mxZV88^tZXBS6t9wv=`-aJA|3%xl7T=*vX+O?Ycb47Bih#0MrjOXhNhP8&6=GW+*D6ygJBS&d0XoZUZE4K>Y~7YYyDT*}eHCQm+k3fM z!8~U>c-#YVVU*5NuH5SSd7ag~ou|&+dH$_Vi9GqHK~(d#P^}k2KZ|{K{&TV!Do^$V z-|Tlu z!}JmPQK(XalVMoRb@`gP?P#80OrsG8 z*PTpygfrRcv<}deygAwX0`!1^&2gd-`?QV${zJH`>8Z;O&6{X*>rzBzk0f_?dt`(? zKD_)rMzoOdgelIO+d&Gmt$`7G!&WOOzzi7bYc3z_AKMy}M)ee0C&$~Pf+s4?04jNh zbgE3gS1L2E1o+2@{+uZunej9QQ?ngwtmK^k4y`y}TM+u{LvLK4*#ewb#;us1XZ`M1 zlw7Tb@8)h|{HA?XqpsF7HZJpG^+!_=`5?{hmiNt$-eOMeDFqM(hx;fiYVjgdP>&57 zjV@uxtf-c2I3GA1Tp~vk-jq#DP+za&Q4DeJg@i@N$uPLCmlc;F56T=k*n{m^8{HZ4 z_WM=!ax2IDU7sbe*a19+nJ&ZUlF;pu{PWhkVI0#`=xZ2~{d~1?H%o4PuC=!Cl6PZy zN^+THOO&&HJtJMH?!Ue?d^kw{^2#?%)sDk9N!4lYGL=eCy3{@-#J_aMdG2F8Fy5gU zL?e38e7@_5(ju_D*`do=D3iE9?C06~9@%PPt4bw+EUM9US04~qMJ%pP;#l9m2(GN2 zN%)b(X+FVaz`I;i8PnupR(&x#yMVFGyZaldk)NhHI~be94V{%ARE$2 zmEJ~wN_hP9EgGW-HE#`PqrMEB1>w615+Xi3hf{->F9qw&LGNtQ9|F-;dCmid!P&#d z5vr&Jy!Gag(*w=F)5E#BEJp4?4U?<;DRJrGATaUU`S@s@m@nMDo&?+>?1kT5ygZn= zN#`|>wK~^#!Rj?;nzr~Cs!QYw+_%f{ejamlt{wE>s1rCAp_>tcA<`}s@YuH@h46kuzKyJwhXau$wWJzA~~5Mo+gD^Y;68- zIsYmCKXT@p6PO6reuuD9NUVeXA36Vt$v0HP@t4>ho2E?cRne45kz)oN)NBQ-GW z|6|-c&d-Zi%T%v0X6^H?;#k0R&}_0zge(e$rJQZY#$3SME37bg8c+)X&)IldIgSRW zImbyD(uvjnG&HhTphYqTLh^zd7zOqR%cBid5wbQ>;LloNBoVSy{F!4~3F z(tq3u7v#Br+-XH1`mtx(pULqCcjCv%I+5Rg6=3DF#$oKebRG2~dAGW}bI)D($mefX zEW)&aRsF#?j5sWfn8M+Fc+lh{FT%S|dEBi}t%xkEO;ovQ_pK9=4n>qfaWkpt;)l8V z4IIg72|#b21KJn5iExf&+#L&ZE6B+*XDmF$J@R!eHNo(CJQ=++N<25M+6lb_c1h4S zH%eJMRr>bp$7AwY-(&I`VX5B>D-3*ypAfQDV+~G z>-^qZ>mPab{cc4tq^9D`1Ez88i>a6esxI!&_0g}*+x%mw7ugE-9}Kq4bAO~K_7Qc8 zr^&E)abqQtv-C8l4j3X@HgZl z(-5G)2>o*LP}_l2S6SfaR#klbkYpsVihnBtfAhjM!tu?DFQ674xbw%(h>p zthh{fi;KaC8YOW)(OL>458f)E3vv;kPL(n%`WIoFIfeY`uLW)QGPo!{2#YyMKswAQ zDQgZp>9Vg#vY017S^(u{nFkKzA$fvN=+X#P;)mje%=Jy9o*s~UwEWMza%NNv15pVQ z9PHKPXp?yl`G1ER^q61ikx~}_SJPtDKkg?cRZVF7?&b~!VkU%GT`?t^iQ^NWv&pp{ zd3UdHO5282(44N`_3K&zm;Bs{eqr0oXS|}mgc*V@<0|AEg5byJ-AlQYsXclGH#?53 zPjS6-McLdKTEF?5vp^6h{ePuwnKL5*xE_!@4^H#+(#j2;K7XS3lq|pCxW{A@GTz1e z3jYqS>_mt$+QfBx%*5ffwU*<1UEflh@u*DMhbg%&$2~ltm%RcbLkn)Fy%VMK8~eMW z;tXUB&G?>34LH8f)LA^1ID@_4bR-!$OR4a({~P3F$+4_`^g>NP7rj*&!`L?3Y+j{Q znAegFs&B@xo+A*A`P!JLuybCZ`JKhZqL>g?BG4lFP>Im26|vU0)HM8pzw}B(-ucY^ z_M-YfWW9A<95LJXi@UqKLveR0ZpF2DaV@TkySux#Xp6fPE$;5_?u9el_xrr(IiK^# zE}NOzA;WDM!{MvVj_@j~% zBBHO%Hp@*ZHKboX5zYo-{2VP~1d{k1NJxP(nkfRmW28|@ zPLVN%mY`tXJH#jPj`C5a06tq@7a#5RcwhblnJMExUG{NiG-{Y=f!+;!#rg?@git-p7NZPi#w)cxrvgv*qqx^?~bA&%f@5hx_{6$t=tI=aznf z?1HIPJ9r9v&4%Z{5zt1btP`N*p};>7y`T&rCv+xuff?USY1N7g!J;Y8`x8}w!r{_JCFBm-9yF4W+T0N;EF{q0On7QAHDeT*R`E5hC z9G1UshrR0cp$hXMw*I(YgIcNb>&QK6l13F4+ZpT_^-@97ueklphGjo;as4e)mQ>BP zxGcu+1efl)nYR_j@ufue4d&tf=fKPSf1a(UJvUMxfjIwv3o20YeD7SSIlO_$GPzVV zV)b_~`C7?hzybxQ-4}MAS>16vlv)q_?gQ%ak?f>kZ2MtuCc(j=s9{EhPZe|pO-U*1 z#s2u>{lP8L0Nf&oA0+(Gg<2%SxE}4+RlsJ5x zt4F|MdS;@gj8sV^7vL84lK^f}2wi6d>Ob5f?c2+Zh|-3jnrZIa)!(DQ$mJgcUBf$m zq!3HAh{i>zbd3XWO4pb59oe*N>ILv_T=*4YqwF!>{#(iP9`r_zw z!YJ=oD+0<9kIl+qpKZ&bg^WeN3zSR52vRIDhk4~Ig?W)J6iDH7eE+U^?gtuED+ ziEfIf(Gj5#QMc8P1-!-KKsJx{aICf^Ht}h56d-;}qQuaH5C1g=E{lnD!~I`^bN_!4 zoLKFVsEsD$gPH_Y@M-!3~3JR?&xs3i2BcZ!ceUhE)BNAA5*5?%F7l1{)98$=?$IlPuFCqYc4wAWWWC&STbtU7uc>yL&29eSp+cjXu z2*O`(3fhB^hF}ChK4NgjGy&S{R<;g*mz+7<>SrxfIHILSB@A?U7M&T8DTpSmsE`?a zyHqA}OBCB^c%6X>ecN0HAYPYkqs;j!ibFKM$OqJCtT6-pqd8b(Z=h>5y{N6^*UhyI zh#^fE@XlOt%MX+VA~>*+8J?Ni_J=t?`zje8%(OPsi>WLJF@80DT*3gxl7Oq2O4=wm z3L)1FIB#E^IA9$$G6e|CBKX}Z71BcrM+jgNwGkiJtA{jkF(0cw5@7Bh_@=1i2kr_B z_d%0EhC0|pK^LNHevaG&7)(3?(+_}jrCJ*W@pDie;s-`2Y~EG%2>?Me^FIz2fdv30 z4x;TGFPR-!WKwUhJkNhAPIAP^z3yoc3X`Z4z`sJ^L=`f(dqs*mN#gojIzE_u0p>#` z`)^0Kf=wBfG6CQYkE9{i2hyoP-TxiHNWV3Tt}uymj%Y(L90M>XQK1PRK#p#zU;$d- zbT{{cTh%px$wU$idXhB&z)Ava|K>sjFir+ArxzqPWw4Q5%3q{K!vDP0S8`@uN&7n|@B zfsJ{A7C)#pFNGpIJ0~#C#ob~&6c;A#Nh;uA=wUM7h4m%}Y`^2?Jq)G@qZpnApXC9T zGEy!SZy-A+@g~x5N_t~FSi!z*?#Qif)&E0rhVsSusc4hgL4-1HLrmB*=;{xHPxwa| zuo1Do7&)m#4DfDd^n=lF;Z*_@r*#!z$0ZU6xAuo_c;u3L{uYf;MR+JovptENO~71> z+HDn_sPxhpj^alI6wA;h%an4Y*Z;vdjk!yU>lO!`Y;_Z$J%F9stV1C^_G?Q&%-%^vyqI7!97E-`sUn>Dn_ zYzOoKFw+($m~k3nB7Z|k1%xUX6d3kF1^1#;gaGP{YJO-$m-9ioYE8NW5Z{D;4{1z4 z_oTtkU}u04T_(ip0~pcC^;6DNq|`!>JQBx!*%M#?jQ^M11bv{Jwf_seXY$>j8k(8{6U;(5rSh{`ZLwWGYB8&$SN8uUH~9vu>D(y6 z#(3u~xp0Pb!8VnQ1L~o{J}^-Tum=Qrd)8T{I)Ks)Eda%80vKXIsLc{Q2~z}CTTcs9 zPxl=_z%i?+innO{^AMFb5Fj4-NR~mF)iT3G?L))*<4dX9pw=R7ipo*(fQ{xq8vt23 zhDw@H#6b6&{3~6I0psnXTPg%Zvrg%_@r4GK1#Qa%oj$$J!mS`lB*%JotWcI z(sDeg@j?2rmb?jZSp6}gzrWO%P|brjfu@1~FQtj}zbH+=`Y{N>sBDJvI>%`SH2vWx zU{Vq!lokQ9phTbIhd!QVpT8SF^aM&aPrr9_aJGL8NxHuxx5B%BTk`$N2O>1$on}3> zN2n(KBmp1gB7T)afVm||Z5HDg%)(Ml1qoIGMjLDk0r8TFUlfRi-5hu=yFh4;(x}KJ zhjUViF#&*2BnntN9PkOU@0t`J;3TBx%ZHa!7|mD%D)m+3185~u2^~1Tl1-SPCj5VB zO%;OjYLpFOZ9-}^Fng@h_!A+n2TY?GP%-&K;gT^>_irc` zc{YH-Ol1lw2VA5%7w{tRiA(Z+$8JJ!`Fp_kfmB4~mP|K?kK8N}kNOH#0Z?4$yKF`k zykn}q3WdX63S4s;a92=^_l=t3_fW=xqx&~Z*|&1KaRV6by`orD%;So8ruF+D7xN8f zGu@EEVYX9xA%;POUf`r9%4lz(&h>ghKqWOWkhL})iu z0UwX5v|W$P)EJ}J|CBbyn5B5PQqtk)l4atsia9OxP3<^hP#)3vMsCTvLZqu`<9wN< zMEc*Ax40&irG^TKgOajx8^hwn)0*hIt&Kue3!TWZ_BhwSfn8Gs6mp0IWx2CE)_8P<> zlc}|{n||kYjKfUw&_y)x`-I65^1$|soa6I~50}@r8MPZUZM!410Q~XnVW%@YWy_@d z882Vw)49XOzoQM9n#06V4q=ywv;}#J-iPRmJmxEX(B(gf%$_cm$97GAufpph-=G15 zooZ(Di_dj57~{s~>GB0xA{|z7Md%rL$tV0ajMraN1XtR7f|THl5cy zC`?=m5i?IC1#+wE**W72mJuA7<}R_ine2}41Of$-PYg%jJI4>#P7}CdITS}|4}RLl zW!D7sgV_C~EPgZ)KYZDV<{#CPO}lXwC)H)KA@a8F=z4kLXFPfz@IfZ$LPyZsu5s;D z!aCW1(#?U}7#pVAuX7}u@il`*6)tK)*FJGV=S)Kri2&yhYc!D|hoX!q-9bnNNR5dr-dWfEr z-6mUkq8gS^Tc_DASo`&>AWHM4CC~a-`WA(SK!4!7Uk=A7*zu_&Zx$?v4UQ=}feO~8 zWm&hK-OP&kcx%`1!*}rxVhYtMG$cM)2Cf%YGl%i~_^C%kdTxO=U!^^_8dx+*8Et;G z?0~*rxV}gg!CLV!I%~aIIGt(W5p;F(9wJZwkv%l4SQw#OuqJ%*Zgo1+(rF-_sIqN{ zYfV|?`bp?_l5|3>$#Wiwtzf5*hdUpp#r2rh8cWOb*4D7RCI62-_HT=v=XUcVY3dIv z^~z-$Hn;}cI+q;xMkkJ251h!1QaJ%8#ebkkcMtX9`#@x0PXjuwE~@bpOwX^mU%$bZ z&ccEh{X&|;W{q}>y%&dugY+@Y3VbX8ps!pv+u|*(c`!v3F3tM>7agI zFfmT*{K`svNU%3z+P3dRG1!Y?1^_`pX_wUcV$v#_!txmCgH7NG!#gxVcu@uLU zEwvEd-y9;0ggoF77`&((i9WQSb2F=}KJG`|`KOOCZIkrQH)e;}xE?(h^I%TQ+*dW- zHD}gDyOk5RsknLaugVLFJX2Yk<9MT*!2QTZJ$lY8ybd+RNlJG6oHt-!t>Ob_Jf7{c z+*a{VqC!CoWH^Zs3mr>u)lqWZqeLqF!Ol9b*4vw`XIf?DrCXRRugJk(jv+uH3 z*HeThJ%iZNT2-G3#1z>YW>x+tNCxB@nQljqt202lYwZMow7Tr`Vr~OtC^uX2k9yUkBfseW_wR7QkYAJq?5h? zj}{lFzpGPCCOIG$igC}ajV6i_g^S?VpYgxYp$M|)Nw)SL#^EjGr$q)%I>^Rs;(N*| zGicm@`*i-KMZip&FZvC`akU{2xTw7S&r}}L7*ytsD zZEQwgo=n}87CFNU0TjE#xYEP-y|u|@G+3SO7|zGD%L%TN#pPC^ru?QAw=5Zs*2U4b zbC;7o1g?V-fhGCeo2C#){D)iWtXA zrDD3cUj?h61VQdSJE`+!Ax)ZA%Z9u#)*L$X_97`N#kM}nB%&*l=7+)O4fRc}d)+)@954+MLhbfU5)WfX4((Ut!3RmOJ)Zz=$|+lLmYhgYi=9WE7~CCAwe+-D*m$h;K00$E z=zN%4OOczXaZWrVs%#lIOzghUGtWpTwGOGl+gz~lVG@aM?kH$qi~PMF(h-^}z@@Gr z+0bhPDl1_scANZ+*rt4Fo}e~j_8Z@XJQw>$T*G+im+G?Z&h|i%4yUVZBD=I}Kf&LcHcPIC|2Ac!}D(T?2eSf}^C%^!&fwnhfpKtJxzU zZ+u&Os>_<5U#~L^*p&LpmVYr)6xTE@H zNc8Fcn2U&bl1g9BfWL(ABA;bY-NM2_@%GVDxM#*sE1fDkIj$0-xG1RdLgC>a96c!l zS`;N!^o6=`PK{-ML*32JP?|sv5Npq!s5gU&6_Zq2mMDonP%73@PS6}YH|MLEh`tZ0ZKd>URzJW z*SXCvS3-kb+D(`(q<6r)UOca3Uy@|}*Dm<_RUa#?>&7^)N7V;T>a7&q@GGRfOOw-@ zX7nF%u>JDt#m+yyg;2t!$?gkl6_56ei0focvn8WSG0)e@O|`7p31$7OCwr@uIYSd% zkD}Sy_scH#?#GhX5gh2h%Rp-kEO$xKXY(76|02#YH4BeZu!UP}lp`H$LbX8Sb<}GW z*J`u3u%h=qjwh4H|(^Q8E9JeK4;kHEid|*MRhb+IG1j0un!%0CcjliOqh`k zqK}2Hj+V)dsq<&`1{t*s_al^_cO`HJSnz7AoPH5`_Sz!8ARsI}V1h=MpH}@u@@mvl z#xjjFBb0wGRq@(%^f_FFc~o{*Ri%?(ShU1nQF*=ZSIb6M3P9FdnfAY6BX3Owuz=b_&udQ%lRto z%QNqw^v}BKkA0ALQMgTn9XX9bhXtnXdIL?M?!NC9xnBM6#&J9n2F=^QcL+>^7*mwyw>?a*pdbFsZ_}i{M5dc5<2%UVc%HhdR&FZTHpg zQ8r2?PaaD6m8P{%f=n~(?~i`Sm}h@U?0|==U{By-D;&D>eBzBBI}xaxGT%Zib>8xp z#ne-pna__gstT(Dk8D$x3n$21qf8}zzq)Hs4@^2qz6AmVHH+d7gPD3d{c8aQRRHqr zaaU?R|F$+)VEcwrUpL31Dz9M8j`D)Du72v}j$fF1x+Zf^n5XUEX@;IK<@)FHkuA^t zV?A`A#Pi6AC2yaT;~?<~r;wt#dDxJMnS9MmKdUj_cQp6<`v+ME3}!?m-x0nNmi@Xz zY~gX^sS{sNa982HM?)Kh{E^x{(%GU8g+WL9pOaEgaIdjiC^paaWiuV;BbvS6w?Xy2 zk7U_szOvFKXcI#7%U$OQ6~fpDk-?+JBc_Sru;{-DSGp&n(hG<%BfdlaX3Qy+z>v+e zoZ=zWD>>um(ZgsbjqLCJngzQSc{ktvdT7=GOdAga+1M4^Y=<9-`>o038Mc1Lx@$t6CHnMQ!nR-CAsbGmRt0PkA0?}*w!)+DC#K5{wc4nNmp7w&Z70$s z$-rsQ_V_=edebt3v#ICJf8DFam_{_&nY$Hb)zDi&>iZNbv{qf8llw+^GbaAkIQ#fHJmYPIqL;A(i_NA+!rt|3p*j@AK`6f>J zz))%9wTb%W_V3f6js3;S)8Xz{*PFj5N$yY0_opZLcS*B~VtK{(2(2=$(e3A(Le&=P zAYuFZYb8}4&$a_?@xUIBtZBCT*mP!_TX=J}`j4AH1~ndNol^S|_E3`KIrwd|EQK{J zMbE7GLASV%e`g&Xe7ml0rb~1e>QXWO*Z12Uq!v(94B@WbdF82->TqXh{nV(ovy1IZx=9B8)`L_jE89Q!-T~I@Rz4>G%>f5wi z!^QpLpJOX&${!BOcF&@|ubwuVN9i_gTF#x!?+2UZ;jekv$SuQ7q)CRcBb>}0n&$KN zg~QFdp8h{Bul@|r+10zjoH|*Rp!>Cpz3;N5YPPEFK(ZN^Rm62eb&ULEGgci1dGk0d z^@L2dPS~vUg^>3)wcn)F4L`(XU*KvcBOuwF*FsDfDh13DkXCeisgV|TTc<2A)-vtS z|KoF!Bq{2O(tVgN;YBig+U?!Txo~z2E_3>Vvn9y{)Xw1AzJw2V8gQ#xE@8)271X1x z*~5~KsXqLo9&fIL6Y)OSFiDVLw7yD0mLSoV6;ZOR2l`*D#*;0o*qu4tS<(UqS1~<9 zlMVdZoXb6)_g;7~+xkTxw~e`gDB*-r)U><>ge@>c7xf zTF_hnSaV(~kzi!?W7=)v2?-eG_M}7uTMbF+` zX|Uk@lu?SJ4C^w4dmOasX-6GD-nl;6>I>koFtPFtzZBU@tF0u&0jWpgS7EsiZh(Ye z9Uss9&%S;cbvkbsKp>~)pwM=x4dvb5*Z}dh^T7|qb-g?u(snO6mG8?)CG!_!nwFty z{!*95U&tA0MTnt$M0qH_NPf9z1dXVPT)Q_Ktlxwp-6KbMt7qIhQWC_tVaG~Q_`$}c zleXIHBG#m{s-(=b+2!Brq$p$5Cp`$DAwfp2+)(A{Z z!t;a6M+Lzah}jhJoVK??7!MhZZLY!l92wQdLb!LJ`COhO&{W~nMf2LBr(butZ&V(d zN}`;=zVTIqNd0?G_j2f?N??wQd8|2w1KkIt9edN~Gj)nI%R}%jW-WcbBow$4^qVFd zYdX&m<^`nWI6HXl{6_>F)ol0sO`{R))fi?5MP|wOR2K(XZrT zOrv6P6F1k%5aCg~fC3lof;|zS`DGATg-?iEX7yvfRUlz{I_5rVX$ z1S#Yx)=iZ?eyqRx4E8yfqEW9qesrWI&B5NyXYaL$fsFb~Sl{-k&F3>->B+G^0xVU% zpMp2KRz+UK=ajy+o>N97Gvr}ksmZr=+4_s9xx4{PC zEe(rISZKhjLO)O!vYv={am|iv#(FiUK5uMHK~`cHRdZr=u7X?Le(W<1{jKutcp}UI z@ZF3%ZX)Q2NO%Peg{={H!e~&qB?C|yB=0qRw=!H8G+F`pr@eg2KzDu$-W29iNwKQQ z?(7&>0pgxN<`|{U=UJO5>9`{dKPXWtR46`7|MG(pLX8-`89p89!wKimjrXQ|QXEXs z6hEu+)pU^2pLXPfi{~Ce7BK&j;egg^zX^b%T}Q-sO{|$z>cIw)VktPvY!oZ~sHF5d z%W$-T)~eTX45>h+a&$H_<3+%L=4n=A4Po5)v&H>ik29 zjIPN{tp7v(*%oR z7C(`@+x`PV?&&Wh6e4?VL$}Fn;*3d?O1WFVcb#hUoJ&_MyuLE1Q5d&Q`YQb!QQM}D zO|bgpi%X*57i;$l%7j%sNp-R%%$n~ALvhrY5+>tM5zdhIav@5a^9Y1qYC>GrRa=ea z=K|M+)+eu})6C12wk4w7bsAOA_}hZFNtP`GIdM0R&jOC|YNpwIRViYiEqanHd?gSP#`RVzl{q63#9t)b&HtSU{py_EM{g)C}Z?~mQt z!liX9YZY+e7tT4EIEbc>VI#x2(OEMR-0a65-iV8s@&j(=AXhcUfjBhK`yOcGx!7DO>L3 ziZ-mdkezjF>WtMRnlp+TkhJ@*3}QHG9t)>eGPc?y$~t?nuzO3klNVF*@I?6aTJxe( zXQJf^_ko-ma5M>+9j1K0UC|;S2GSQn>AVi+i+C>&^-^99_~q!QtNm0vR^AyjF43l@ z(3vecEx`=6c21?@7M^jWV4R$=+lqZ%Y>bS7UuQaAEmZ!>mcX{@DVO+NV^5c%G|+8@ z0d)1sgywd}FH-XKT`|ssB#7ynO|bM|DpWVRnm34sWx;Z76uiSkpK7buCsAKM5wf%X z3`J~r4GCjKm-?|$(%m}+_vp4I=ID3rb{7v1mR!B`_sI^JFNHGJ?Q7c9;`-04)(d!u z@S{XWrdG~f`zH6LDtPwB#t7~BA)fs)0ZWzi_=@9+slQL5r`G>u=h@iT zihKQ+6RYf2k5!O+zXsCZ0Y`Q6&ka;q792%*R9@q3@p zchW7)&EMS*dE-i#+V&G7eeWc~+qR^*-QRrNh_0N^ci8T3ns=Wm8gLmFuuHPjTNg$_ z#Wq)HT-yQG;i=5g{YHy02!>#8meE2?(XdKtUm*j(Q(9)oaMu&TF_DkYPVe~Ye?+tautG z#i~o%Lyb=NPM@FlPmR~DwSr5Nubpi`N}8v?C26807!@?1)Sky@9?V*nBC{k#96${` z)Z&LO-mduf^CRDtW)ey^^s=gE%_(;e$9-)Dk_vvF;@wPt*_L~>SMLxz`;^YD)gvkV zes`A!@|AY`roMy%#<3^N8z%zqay#nyRW<3&m9RnQR|m1EJ#%ksh(Of%1cwbDDDCL) z0U67$Z)C<(v%QGkNp)W03Gn4%9xiHnQ}Me?D-g`ALB|PAmU?ILxeH-t)I_f{m_0Ux zyN$a$D@mV&bgu#<2}3UT;tYNNoww0IRmkdVW4zl%agP^>%z98CwYu=AeU3WkRYb_{ z7AMsD4c>w_rABHJZcVl1@}Q`Y1F9+1L)V%WSV1yGXClXFn75>biPY+?tWF{_OshI| zZG!oXfXMh@+QbppK}*NdXUDPeF=G(#Z^F`$=5v#bpbWS!2u_iJMqpb2y{7{-E+G8 zR^)&d8#~mXhlxHx>y)6?;zcx1DTh!ljx!t8^V_o9u(Jt- zUn41W%bK<&bW1-46F29Ye2UCxa#xWlRu~sh=t{NpX$4I{YQBt?KC0y$1wAwJP^f_~ zz7gO2LzKJO|A}`B9<1yY8b}{CPie4=G|X5+<7RH@ft{Y!+a|upPCa?r4c*0Zw%|p| z)eI=dOeQjd7k1&bs*XDf8F@iF>saV=LF&2T`LAYhbtGPm&nmN=6(D`SN!)|BzTJ~O z6OtA7Qo@G>QSMh(+x%Taw*N;HT`f*T@#h!9)Iz(^a1pG2=M1#mDuv4zozVx_k*8MD zq{@_9-8>4%*E_1~*fP|kJcc5kjhwfKt~}8DS@Wxt$BiNV>{Z-e6LA${-;p8u68aF@ z8y&=hodtNHNeD#7px(06{z4(YYBL?$23pYt%bjUG>))3Vao88yGq`Fs=?+86G6o~f%Tw85>?r}l_AB_kc<7w9O z+hdXs)b25(phgO& zDqdBJQ-2e2@cD6x7WsG*YHev9{})(?W*I96^p5HT(uDr+Q<9t$>T^g4UiP$!GI3zJ zG#jzbMGPD?vYxQ>Wvj1Vc9lL?6Ay?q9QdPVQkw1>6XRgZDiuEq3y0v?A4%|s&5or* zKwWdd7F4&%s81Bao zMQ@T}8v+*%p3wu!!UVWGI}@nP%1gMW>5mPVZ8Ya{#@Ai1Fy<&A$fV@?SfY8DgP4ko@7&GZGr};K?GJ#T?f!@9SpD? zC%qVC=sMLEK;VBHI!!BVNQ(`^I;4ZZ}l(BOkp z)`zxedNNjY>)RyyV=Q;;pJ=428&$_}(}+RuFB3uKPr~f;=TsF#IOlMPuH~;DkLIQ-W}RkP-vf2xdNY|!wJdtiAL|(5d8~?N0H@dWuf4b&sfstV?}b zb+uIk>R@ht^%KC05(K0^5>WPl={7x^N`O!}Sj>Pzh$telIFM2^+*06tNO;IbWywG` z0cQ~3@mLAE$6K%sDhy&iU+A%07da5742Bo zk#QP*$MT0nM#OIZ$d|N|b-$v_{%BxRrx3W0KK;Y!0W3K`d2fU?+F_rER8-HPZ zXx%19v=ucNY--{cF?|Gvk5qkBK72KYu0 z3dS^>Hl#Q;J~%JaBNF92Az+2Me>~c!O^&1v41Y*O*YeL+x+Xmq+E;Kn&M;8hp5OBr8eL|=3ii%BWqL#XFZNc+&6ilc$!SZw}=|4P+Eic|5(kHZ_ zw5S;L;UMCgFgJ|l&2-?fkE15VRzP_a`oX)O&^&u**X6sxg^OC^(ttjPt%u?g${xHI z4V`67BuP$hDrSKvtpkB_ncG*HhxEFpT)+{=FUf5YE1E zVyXcx!rzQX4!SKYeJR1hAoG^|16V-i{u8#BDnonxm-qwz82)_$6Ra?mNq|$%2WU?E zH%!69s(+tkvXCh4vl=N{7KA*$rn(7q88yiX;eVJRKrSaNw-o)L8ID&IUMC1eSyNB#4qs+j)lqMOQuQz zHx=^GV1OC`c>y^g zV-g>Dkc}M-n?r6A=ub%E5*j|N0w~*UMxGYc1DGmx2F@e682vp42q9JYQ1&38&u58k0<{<;bEGXVhW}~@y?SZH;o{2r z5u+&dmvg{cB6YiwQMqpr)JOrNtcgR^nQ=BTORQpw#j`{Mu`$@SaU~=(p}phry;QGZ z^0tcJ$kLSic=YXQ$IYGG+uM1_q<*uD87*kq?ldcF5#Mx2o&xvr>%`Q#FNe|h6QD`LQ)2Bc|I@ab*&PSx! zpFqIVKdX!%hCY{oj&dyc*JI%*sQ2MNc2Jveo4<|dK)=a=u`lQnrx4l)rUuHo-!X49 zdA8Ar;}NSE*)^ZzF&TOj%uEy-iy7!BfzTm9m=uN_lB5Olt(5C04rIlhgX>1`wqRY7 zFM{)dNlJ7Nyw&*!vqA~-lzQ-dc$LzMKl}>+wox}%? zqECwWkBNhY$gi*%+d}=P07SBOx{B^aIE0VTQNV5r49HocTR@-&=C3CMkpl4 z%{bi43_x5c>1Z|w1!ksl?*vX*F4Wc&;`+ceSOT5r=af(2#OCjCom4O)bRV3U`;XX> z?gf+vC)_8G*d4G0r=Ez(&W`RAs)goH88~q{@^J-DlpMKkx5bo{alO=}PQA`hyJW4- zpIc5K(BpJ4nVGqH@1G^Rs36uah@@qKe^E(KBK`%+t@gtE68HCK8}%j+Dv03$yDP57$U8(@#{zH}hGMz%&+*WU#2(WwcfynCZcZaG;++6jS9jsfLtTpe zhI=ch^|+XU@NjwW#oD3{@*Cl7RLF#WT#nuR^9)Gn?eT*4Oy&OU2X7NBSHN&y`@hc2 z-2>|}dFMLL31_aDBPRRABb@J1UC(7U3PYJRaO1SYP%pQ#VHY~`gY(aC%RizYT-NeZ zzcnz}i10o5+BKJe&#exX+^BK%e9DtJBQqQm(Sg|O(khFVAH{vhQ3e5bHRWuK}^Nc7^$C68ZtcMJJ&l>fT0kS zBL%(zh+vEMQ;*HA%kTN`g_VhD(z zzzx$J5D=Nc<b-%9#G6XgyxtCpn66-tGJZ}-sgrm#w=*#{t%`X0lXxuVyx}AdE^?H%B zm%Tq9!=`Nc_WeQRHU0D~;wNc*C!kg5(+bDKd0ux1gW0z>< z2bS8$Lm21wF2)0=PU`i~aBXDZh^2stdN{>t}YiB|Ce{l=D$NQ4zwIg6gD z!XlNg&rHE4?b&xqDdl%nTDC=6xvj_{W{ToEEkjmz8J@(FVQo?>VS=jcGn*$|@}i7Y zR(Wxji9Tc7JYHcbq@r40xtVHixtYnwtMRTuV=#EEky&L)-*b)A{Vt1|K@Sso#S;|& zv$J$z-TO^QETB+rb&N7c2gmp9R8t7E%gtov&sTbd&ZREpHp{hDB?9A0*Osd^B^$PX zFmI5OhS+n-pZ+~GgMP0}ZV;brwD7w9Tg<4=u1Y$U9`$JL-~)5;u{X%I>6}os=O+F{ z{2;XS=d1Ga>YsKj=8an_8`c(DR4fP3h3xtE;+?652cH1#ps~|*5^QGE1Jyw1*h{YM zb~Wu0Z@r*n?%yV%C4$pp+QCTRoV(NMa~;Q5KE03Y=aWpwvb+%?xO)ru6QnrJ^B{g63`Ho{f6f9;iO_oB4mJdgr)GocLY5I@z|{&9<@Go4wh# zJ7Lpi+qSjYwq2WT*LKf-zQ6ms_x^FJnb(||c|UJVqi6oZ?_zYxpv2g@)GMZLwT;K^ zb0rT1Qo-H~H%W%*rgx+~?^_tM-qxc9sPR)<4EG}Dmtsk+f~<#Q%?Cz-u}#8u;Q4or zsij#*kIcto%_l|y8I5m$x+F7N&y;vIX^`>#LFlaE%S)^S1~Y)O&CdS^o;=6EW|(xY z0tTX##M^4BG|+^1{l5vXtzt7Y-^pm*pGkq$|D(6PTJE#axaNRq;{hylgeoRe`I%;O#?+1X2ug0hADc)jQ2&4AVvM>Ag>=gn0%;}`IRzA4$HaC0u^$JG>np|DGF5SfJVRQ) z*MW7bqZKJ1d}DDj)`oK^#H8vHCN$QQJ1 zNlrY!(D?Q|K3CLCs3FLFS$e`fREe;PcTmAd-6h(qz9En03R~cmeMU&rry8@x)5FHarzki9sncBqK-eo8&~tXkc+E)h&4^m);^%s?Kd3^ z)Gm4PRS&;)aCK`;XE;Y@ugCEhA#OV7|8BgCIIb)(d z16E2eI6IzAISS^S*^G}so%oqT>`+AjB#9LV@+_6 zoY>ElWuYis+Ll$pWv+ip7z0QY4`-|sQOtJ&yoN{Q*T7{k-2LYUY;apnz4FGqg)OT) z>;@L?)wQhi4f#;OihN%#m{|oTxx)Q#U;1!ger-Nqfk$usdIAeIFPW_}_hcwpEPLtU z2l^#vK%(1$p`Z2ol7L~_H+2G{Wd%~{mY-nQqAgD7R|SOGJyB5Qr$RXeNXM_h$h|6= zput39pk@L7xxSWuFsQL+?SL@K3$XlfK7R`%PI?_z-PW}wa53j1K-eKyMJ2~0ZAe#;*{AXpq{kUO9EN?>0-v>D)vp~SwL&A&(CSvMKF zE+F^@iLjZ9fl)SGIlAV-RuR9-zwbluRI}I8Wo~bLYx;nF?x1nbw!P}%r4 zU^<~GAjj#JfJeHje631?QSYLi-{p2OXIWvY!H6Bx5>VKLv5Ry5f~c`y%6c?kO0nN0q3Nlrmq zgX#{qKmXeru1b*3WqAeYP2R7pb2z`BrTJj)k820k&~5oJ0XO-I(FiKG+NU(992je; zB-U?o=EGVPDW*zbr>34%8)*V7c(na2O?U>|_yWD0|2*n=-@#&cmQc}!;9LMT0DxSj;v@N9(a|y_vykoM(8lA9-BBsFXDE+EVp4?9yYOGG2vqFS~cKpv5g9a%t z4eG-2aGQXqtqx69L4${5XA-&}W=T!|A_y4vdP+8O&@GwoLuuGh|G=qxbTUAp1yE_F@5h#wb4$NTADCp6mgB^lP&VJ{BIJKs z1#HF6O;)Xnv2hp8x+H{1$SyHhnndB>HLX<1X>1#zL%e=UZXw#Y4lxDCY5oifGQ43T z6focO`mTE+XS>$M-`&6Hw)N&C7*!C8T47)-6y=>DJ}$~_v%PLQ*Y2q~ZdX2B(_>q+ z;ArtgpYKsj9j@}t{`h$`kb`J~)f1*c4mbrCpUq{1Lv5lQ>r!in&~QIvKpMZ=S6NbJ zPnkw+CM~1LcWIa`&6LGgk=jp>!R27Q=(uY|5UTY*G5;{BN}k>3NMNF#sT(h~XsN*x z4+{ncfjRZ!a=n{i!mhH_(v)!3)Rj~6Og+fkqN8JlH$~C0yzMG<&YuTAe}fuz*w!t$^6#t zU~1oH@}ka)6-%ZK^ZhV>wR%HwI8Smg-nShCNB4(b#L_gML5+me*$9&Ixy{ffmXkBeD^?<svbKt(?-gLu}rKs=_4Rm8cG$&8deAh}7 z!)>oEy!~clzy`Bvtkr>|l3;o=%8s8aMa#6xG30^|clsPBn=zgHqU#krYNm;r9KWq5NH3u2|dP&(s zz1Mhdj-vMRg|r?C_YBvPFB?EWPsqVGUAG*-74l907^p(&=NpFBnauS^>Zo61Q?B2V zqEOUO6-kwmad~@D`I44V<7`oPKpF4nERLQT2qZvrcsuy|fK6)S|A15r0;z`+1X87= z1PG+s3)zw5sp1+x9B>ZecR}KsJ?gvEm`PkXFVLL`@ffKCC*js7l{qhp5{yf|A5B2x zUfB*1+l5~2F z9Ni$bgoj-4hc!Qb)pMxhq4XVgXtz$BJsDixFF?{-x7;aGfbwnMQHpWS>W+CZ3j5S- zJ{}%g?!g{!Xc|vsyu$s~HoXX>^ek^7jC|Sbp3x0W4@@uZdK2=ZJ-zxYp=S7Hb$fTx z`NoyOJ(5uMbU$UQEfkD;thF`^B_qX+9}T0pSKTK4v0*n(L#LSyr}H-%?y6+_^lJ5C z7hzl}Bx`t?FaN|q`yFSw#Bec&bH+CBp3pU_E)Xq2m-||L(Rw6r%S}w&9X0ioKu@K5 zmA83)=faKA7+Eur<+MJ4WssTvv5AM-rY-lvd`|{&q}ay3A79LVQ9kXny|OX$V;LHy zJ(l+KFG(laN(!1L9%f4!66H8JknR6|r0zmb-hO{1u5-Djv;n-~?hRmZY|w7&!E{E1 z$m|~_AeA_la@so;`6=`$9zPms5|>9SZTrBu5EU=eYhWg3V$v~U5WgT9{Mo(y9G6L~ zJjT+x_xx}@E`l_hQZSzK?Jtv$AI}Q+z_~o)@Huo!yuu4E&=tQ?eJIf4VkfJKmKf;E z`|k4mB78J#6I!Y&cT?KL612?oMUn7T>J#{Jv^(EPyl|7#O{8#aaa#TngM0+q_TsVf znQV4>d)T>+^+gMbnC-fCL9M7Nu1}jgn-w0!0prNC81RISj}1Xpp9RX6s0Z8$nx{)8$CSR%L@( zzC2&dAPev$-O~IEpM`!1>p-t3p>GnEGu$!dGr~8MB+Ykqt#jMUt?* zD>js;u|VF zDUOrSLS)DBCa*E&TI1a_%lwvm@g}?}*(+H)IStBlq|c8yy{|ReTE`XsF>pv%sX!Yt z=y$y#g4{~2;AC$Z3ZKf3m|4CnW0zu0dZ$;8#h&!8Yqu?&1iZ`#Kilk7!d&{-tv92< z+5D%@Cl=Z#L5ahy;gLz#{}eye8B^BR8FMnpYyGcr)664tp9U<1(ejTaDW-eI2{vAY z8MHH#qDiPGf)j}=$@EzURv^j28?z$7=;A<%X~C}$hZW^6a>I!IEE?lQipz;>4kXL} zSKTwq?3R1}CjOzyfIo~}?Mkqxgka4`alA$q{k>YMV)m)?K`P;)JDz^C(X7lHxJu6p zaWD7B#=Ks^6H*=E%!z;x7K5&8vu{!~E(mP=bd7DJ6J>(Ss(@qOvkk7RVCLkGg7nJ=jIc>c0;98}DXI>T*xD z*NY~5W{?OgQ2|sdGW41(zv&`oQEWbu39=Gi_^_xMSUsj{W9S5E1Nc_>&_X44BUIgs z#e$|f7w7tm`4{4SC0Y^ka42%BguxMXQdXmo4P-F|Ft1UL<5v-gIaz+ymnna*QD1VP z$y5(0m)xYdJ^<8XaP1#XIZ|rswgV&am>wWzz8G*6pC3+9@r+bs?~vKT8kSWl8&tDN zx)=i^5MTo&S|A*>B0M0#7M{tVu}O0|Ynw&@;Ybep$KzlCX&Q=KVI#nP3p$EPv%en| z2tb5$98b~)sAq&NWB&mB3VIq~Ev^A6M7}aeN@zr>fI%<-8mccUs0_j=+`lsWxXK1B zJ;E1cpnB5+M#vGw9{qs~H^L?;&nX`M0b#B`;OU`p!wgayM*wl)MOscI2D!-oz)=qW zfDwYAe?{;sbm-bpm{9{JEaG5Thj;4t1$%@c>#3oz0f-CXz;B5?px0!u0I09ZzC zM0z0TYdF8z8LoxRFvQ{l{9zfj>XE@_H2u5x1^k7Lt8n(jp#w!f?~v3Y%4G7quFJ2Mm!3hl7mE&-^wc>fmiM6a<817N!Om+D@GaEsPdvZm)s#11UX6Z$c!d20bcj!YTns zK65deQEz{LO7E|OSO}2pJioM}9$ZXWWh0a)c6wrrjNdx89}%DQ#J z!V~kj;>2v4m9!mSP*7*csj&CpQD=;9%0Z48X(AR$7x!pFO9VM1BlbY+<%g5F5 z_s3TG4l+QzOA4$MwBIn5xE=p869qiuLaU8ODIvk~u`KIM0)VOdO6BlcV5El{|5eLt z@DEO+TK!vMQedv@v5YbTtdyE_8SPJ3bPxZJAAjl2QqX&7doGEQM5CoT;$v@Cq^Y#UVg)wRs05eNBk2Qm>!s&bT&BHPZ-OxFZqoppto19$o}_HhqUErjV7Zc_Mr^37k~G_Q;dXW)6>S0D3&vV; zHGp9LwT()k5eC`cZ%wk7RxCv z?f4Z8%uw0GEvrnSmpp-4$hSe3=8!NAE98jE4Ugu}j&iG%$O20O=j zs`&N?_B@53Vzw%|$1e^BUDBW%6hcrx@aRB>PZ$f21`Zqc7ZfdyA7_60XzYWq(k`1L z^!Fz_ARWRY1(Hr={u^2v=9P89%>t-esX>mJnV*O*NlJ>{{ipZ`n1QPLnA`5L%dl`P z?W7b-4*=9AYX-QF_QnJvuWcu`I~xGJ7YAgVX&mR&Wyp|`Qi~vv0{mw!Nd5%|e)V#8 zP+fxBzv!gQdJ-~K(SHdG`vhWYkfWmJ5Q+hbHSBhp+Pequ`yQLBto!9%775Ve ziaR-6`YZiLXAypdfYVLmRJV%ebx9xowIeVAx zF<(UTvM4w=R*6>sR4}xXK4?%g`)He{>iR6)> z+&k|Kd(Uw5_9;6N05hq%^s4G_MP$)un=P-zQE6L@Q{`=NnqZ5{YZ%71lS1nBtQG%i znZTTJT<4f!GACu%JpI{*q=15p&=kAS`k|j)!J3C1kjI^2KAKoAB*J+lauMkE<;h6# z{_Ie&BI``Ex1jo(VC=1SBl|r>cW_d4rmV*N=FdiOMtfAsANA$3e&tXXdyikz^J_lt z+C|d|C|DoE?U;ho-zKP3B;N;kDTA9WhewI^{R&}hd7^UR`LlAi415Fix{|ZN4lMOD zeW3ABO?(uKiNF=)JF=T~^wELfG-8A(k(unK?sj%9ab+_&dX`2fh})5~7>;O_Xu}FI z5<)2g{K)e)B{~^2-RY%OLJE36Mb{&@TzG0u)Et*68fJ^L&XAV%WXF}X*#XZx@lq;t zO)-n#ML{88@aA^>Kz^l>Mp?2jbpDdwD>aqD^V@I)zhQE&T=ol}tuL^CvC-$z=k>Nf zMdZKg_WxWiiQE^n{zBI=7_wvWKGS}(K^ zb>x9BT9S+SqwE5X7RVC^);jWY$(Q@&dfyY(6QtZLOT4{j9hq@Pnfy}R?nORyn?+Rzocwa>LJF*#yu@_6d8Dx7`m)eB&7e}6 z{M`;7`|WjOTTt!kp)5EjqY$|zG_C?(sPRTS^w>Rf-6!bX*E;GtAME=5^m8>ha5=G+ zlx!4%eXw0qlz7^DQ)RyVK3N;iyn!?Bh<7CXU}r{bxjx9$lwjTIrmB9&!(VZAwZ$3y5J~|@hmZ| z`a}29xJVG0jZ;n1xpmC3wPe{bT z*aSwMJ}WOOE)UwT+2iFK-n=b&T)d89;cP@Us$g4KA0bT}7$y zof2n1x2>qq*`2NEzf|PmWZQdq8keyhw7>LW&6^M9(>9nNF>p5~ml&zp4b}u^-6Y?5 zY*~^EbOP!*6@eE!judySWp-zYU*Tp_;DH)@iFMv!b|TePv_JWGYj!ih}y~>ek7RNYMD>c>$vGL3S66=_6qATlLI9l z-XK{jSZ(bpDQ#7DAO?mceXZG!h&(KxKCwksLyBP;0Ie~AZ{ zsL5p7BlXh%n($J7^1eFyiY+r%0?+f^ri*j?$9Kn^V-%obNhzWr z$^phuI3QxFifYE7|9i!rZ?@5aZ&GgHI<$@@XDw z&Etd1DIY6EeZku;vR>m~yWeht4*86Uj82ekOAthhSF{g1`s(pj8Z#cP{;jnj(7IzBNNDTFj(u%g@E@&#% zS2nPm`k5EugL3Ggs_pPyQgEI&6tcQ9bqbgigMD=_n8ql3W6#1qWKw{?$z`a#UK#df zUwsQ)e8dwkU8%FPt|HqWoSGbzUjI_a0W}PH4Q*qIChspIUSAZ3r|Ph@OA4gAP&jZs94{hWKq)|V`X*wL~T`~&qFnBq!t60?Qx1ix$v4gE~91z z{?wH*xm5@R;!oZpchTw>MC)crFkYRqu+)s4LjXaGayYBMHR?Ik{{83#`I1VyPN{qceXcF!2eCPaJ8!03vo|pi#~E*C{cH z-l;fj`g67naFd#UOR=fQ+WLD8+>w{h(8-3fz0AQ?8Kd|`#nL5Bc3-NUP)*|O(KJnv z;I`deCKkOwUBr)JmH4)n`Syh+sUKY9-n6&MZz>-QiXVw?In^!WIxX$yEt5Y3x|{FH zf9{rJbdCQE$nJ&Cl%Rb0{j(QpE#(KjgLq%823-HvDv%Eju(4*crtBx$=kQ=xeKr?t zPbu5Nwwq;&hOqwmL+cg&rHO{f+n&N(d{0f~^?+fr$dqW}NpPt&Ez>E|c&O%S*WjMwT~ z?)gU+g|}|SDJGj=?|jnPrfxo64x?t|YY2wd4%Zgmun#^-inddPW7YC)yYf1MQzls@ zuJXYO8eTFi-{M=WX$5|AVr?-3;r9v0E9jSN+P`|;#vOM^dVR~A$7mW|F6D=3W{rV} z+$d%~tEQT&zoG6?-Bt4c-;29nQLowXQ48f1e?_wR7?VCb1h_i|v_J&PT|r5W1z)q0 zwp!`<>@fg^l0v-msxUgZvX;1=PDt;j50cW1xY^i#-5 zoPb}o4Y2*K^RG`^!aztk;}vI`=Wik^oQUZ&*98}qS=Gg?C*lbp`DF2;qNl2Tp$%_a zZ9$1q3`0kbP^_ZR#1q>z-(I6vaHi}0M_jh0jc)eVDs(Sqy=Mc(iVvIXi-7%j-3uem z9#wM|(_O|Hsu^He1RnIT-`M9T6uEl9!~b0WGNPp{0|)0$L8Pa|1x~Jo6H%d;Lqez> zNHn3t4CGZ=C_**qKKo=!;-ESNcyvmiYk3a+Xw2ml_5J!SMLAi@&6`;gpwMboB8s$K zMk0?&mDVYiF{&h!T8|}%jOH_A02@sMiR$ge`gFLOc=Z*A3M_tr-0KS0Sxy(#A|mV2 zOtS#c4&>lt0KGVN0rVkZq$3+dJUh7$fp~l^3Y-#lK-3m#^5yfXcHu}r|E5=kH_uQ$ zR>?ZT%8d^F=*FLF*rdsjEc=!Ja-ts!jM7zg`%zE)+YHsT61yTk)!_B-;XR)aeDlFN z4fDx_*WbJFA)G`iw{^yQ@3YY@hi30V5|B9K@q#xe`1y%t`-&z?l6x*+FoCmhQ3SLk zs@1JZPrgSeo3NidY53hH#?VJJ-d|P1!R!9A3t`X=if->MyzAm?5|HRn(6mS-cWggG z8?Tpz^)U@pfKDro7N>|T!(yZaGf;r;AzeMLYOmbakkY!d05pE|Gp zf_Dx){`7l2b8t8NN&NZh)7m59Sn;|n<)KeI_#D?;fMK})1alIm0*(jiXVudYn4yOH ze&Oy<=@qI%?twc`Y>xvAsN}fA)z6}y6Ek3#-7O)zY8NKz3w9PIG|ex74aniGo!GHU zg1Dmovw%LPtnArpBzz-L43w{brfUXXqzoDm>YG`tl`-VnPN>orX_F9C4UybHAL7rmXVLNr1P70R*3^J6ITRk=B=HL2f$BIG^r%wgDw zavYv^tH^-5LWI^Nb_kr`XJ%pI5kA>}?Je||XF77Y5c5j{U?@ebI=O5%I`a|5a8L&? zi34)*nIU5l?bJoCr#5BBVUOalDlYwi+>R0LIiR(A!jWK_ar`mV=Q6-N;-xyxbu=sB z+Y)7Dl?rEOt59sP7FpIz8`YE1N0a{)IfXh;)dJ`z~9g(ic;^8%7u%HVcbY@<~Vn{L3-C z0A8i-Y{)Ao;A9k*iEsC1y5D`_I*UwX4pH(PzAOl>_pydDRI}oSFXbcgHsjV-TrlSC zr8q?S`#WC6Y{H6s%vQ|0W^vD~1!8P>kWSbVYK}F#0seUq+mH$K2A5Fx%S(!W`7ZpP zC!A2i@YMX7;|<}>MvOz+&fIhp&@nrdCTU15IMg%dX8){D(j%;Q8!XD(Y-6bGbLr2s#33!h&`h)q^mm~evc1${ipVp!j^3Q&7v8=- zK`MzVjbvG0GSo*#+bQzi3dG~X&Y#SObN1nIEBW-;a|%+01@-TaLisp1K=~Ga#A(i3 z#vTjuC-hxZWODrPt+zkLJu34;MC*|;VX4$bk!p3RhkqIn8WnuYGcy!JmK(v7C?aP|x{Aro+wBPiP1oh$}!0`)W;C0rdBJ$oWk%6 zGA;aYBF~^907j&l)i&H!B5&nw1-ek&)2z+pV>aBRy;8$;GqLn}1^8Ri@9T9{J>)Nb zsY_MUaAvB4t8SaWjq-ghsyYVKIiimXPMXgOO>T&FNAP@KSpA`+6w=vbmmUNv1$63b z{Y4ex*v_EwIR>Z*DkN<7m2}w{xR!6UX9Wj-jOLBSQorq8CY}}yvyEi;^tMBep9XJr{bEeuKJk{1~4b#ZB|%!{_$A)g5<5_=d5EsV>En zqJg;*QOt`=@(mJ;$@msCC2+L%)-}Z|g=KKgm*C+iCeFbs@z&{E%bV$?ZgfTGP-<_} z&G!4|P7gcZCBbuuO@VvgUu6t-is}NUI@x=c z>zYvdcJ0ViV0DvJxG@Q!9-z&jq5;UU)||F>SYUuRkCugcTte=-H45j>LY0z(BZ?ZQ zMJE96BYV>9>p(PRx!9&+J|&y5%7k;C1&T~|x_T3u@6;w14PV8Re_qjW~+`Z&* zx+r@+(KG*aF8EhJ_2$nM`Vj*0EK^tN_*pZs;IN1M zp?ISW?n)CTdEOt<(-h=ttCSQ%$LrM9X}qV^$QSXjTvXJ)n8Fl?zkZ7A*qqtj#>p20 zt6223tf_v#QjrX-G>4?wfB;lqMQOhofV)Q`8e!g<%?$zp6(M1Ia1K z6v5lvBba!yw`LNn88y?U!Zha;J2QWAo)9Z6;vgfM5BU@Y1=Z--7+1!MeLo|=@K!EX z5}z-j;h|xmN0nl5K26Bic|4M>OwfbYBF}HD7m_jmHOinSs6iW#bvdpmMi1Nv!ema4^nNFL`ke%nGtqRwKGSVog z2B3Sy)jfI=8y#nj!{To958R6^26{DN!5&vK{muXwok%Jq(C}_Jdpc@2h>q$Gm2n;Y zC?a=3cRsbC5SrTeTyS$^lIpxQ1tc~|FFwy5GfcB6Xi+>Je zjrZp53^V^q)LNqN)`JC(t9pk02<KzP&0T7GNJ#Wyl0W}#jf2pXgt5=ub#tk8b>6}T(OUCCqVhBDFJ0qJ!1O9b5H60K zB#MW~ES5uVkO*oZJX>RpD9`;Aj^YWz^#l%6^qNv%5dcqoz&|VU&ha#s3BCAKqBQ{_ zvSmD&K8Jiyt-R3jA*k`9Oj9_W$=Fp>z$!a9r1&Mn?l!ij%&- z1c}Xf$Pp{Ch(8$8;Y`i%69gSx>A#<;VH@P+6~Fd%em_9R;xABi%b1Bt_@T8?Jp=^; zfpga&0*&~81R9k&irtwD=)Ru3TbR$?I}hWdLtoA8jXXx|9BEDxN%9pUfJUYpsE@Sj}hVlo_GuVf; zi?4sD7e?<4)lIB8o{7l=($OIYF_q+|5S~NAG(B(3Av+Qh{ub#1n2EQ+dL(B2WWl&t z^JG|jju;8)iaXEuE%WjyiF9PDaIXgM;PB=UaHvE=B2>eOZbI|2GO$D>P+hq1DM>fu zuGK!!E)gYH4?|i{CoZi#0T+$(r>RdjD2-d02eq-!Az+|2k4OwWpfsEiYj^wc>Cm{n zJj))Uixj}!M{tq5R2bm{up7CE@6Y#9y1yGe`1)2(+lvDpR8EB5#{52P-{ZRKZlo!k zV+4PHpv$j!G)Q^>hY!6t{yW1Aa}N+@o$I?WHI9T2v#GUqU?`Kez4fnd=_!G+2AgBUuQ-9c!xwV=^ z#N|8%JLslq;i6IR+o_m@ zui`IDEU+8x_D~YRoUV_*SKFT-B%fd~@4G&)SMD-+Pd_A|5$cm*LS5nhdKD$w=8({- z3+}N!p9wCoPxV&#N@nS#WBn*DX2>C{0!(C`RT%s(3V&z--hC<9Khb#=^D=n7-TP_f(W!7Wp1egm6(!Cm!VEaFL$>IH`5U3s(-I;o)s zy;-2kNF5~>Gu5Ih<9|}Z3%8V1M8#{!yWYTm_pCu5H;ZFU2K9Q@?PG+!`t)7LiOde{ zBJ>>30k!(@7sCZ?;XR=R9xYLSMuYdpCIO5Zec(8mlcTFmSbl=17F6$ikL*!P47!%> zWqFm+)#=vcQg-(wBpNf^`l+JDh+Y!N7Cs@-?sf@?qbYe@5Ic4d2`&zWbh~zs7Oi!M zY4u*|TAfQo^1T)721q?BtjK%Q^$b}7pPRd#RU7Z z%pfn_QL>|qlxws;x@_jpxVetBQ<< z!^B4^7E$DwE0OENCb!5cQpC!~W7`b_QZ6c^*uf>fU=Ft_%6m}oq)7ekdDs&i9PiH> zd)8d~^3~2q^P5$fbiP=qzGEg|a!=X49C^b+b!WSMc;?@3?vxu(7Lzr)t%p(7Y2FIw zXOEDl%c8BX)XtmjQ*3t)&;S^7szV(pA94OLY%Fbq=sIiR<$@(5Q_Cfx|p^ zR2?_5vR|g0J|OS3JR$F#wJ=g0U_&FK7&ut;^9OuF5DuL)Q>VYMVqdL!Gv^$M*>YGM zHYq(uu?i7Pv}Qcw-!XI$>yNpKB$U(D+($kop@}(H_WpRrBGy!o>t^` zvAN3VWV8*AKAd~IZqg2A?_#oMZ8MxbZ|p4|_Oz0rtv}(XkU>?yT`?Gx8B6sT1hCG@ zeWZFUFgEAf#Xcn+NKQY^Daial#5qs#I3iCN@fg3yI5$5)J9qblVGv$->g;n-q&AT?|h&`KkhKm43?Ui%&s+VuHvBisrJLK7aFVxvXH|}F* z??uyFkm>3H7JidhCCu~tA=Xr4ksnduJv@#htK=&CgFmVwnOrL%zGtQ&KL`iH^hdAb zB^JgO_t;nToHoA=IuFlQpawU<48gH43;M7)IsJ=_iwD$jn+9yA3M=be+ zMa1A|kGa+;xlyf0K)n#Iy3*(Wqq`m)le5;KxF|ZK^5c>$P=QOpgr1wH`B(1a6696t zG{ic?jLa=mZW2R`pd%_%@#(h=3H$Lv(=~<$OZQ>uw`xWQn_J*<{j2J>jLMsF+d} z>z*9Wa8Dk=;X2SzJu$++Y(w>Flf)YbO|G+ zllQ;`1(eYiJ|V0(1*mlN7G zH5Y~id%`UWj5Cs~xp+wG}ZFvH-Oky9~U@ca0>oL@fD^| z6KnF((+tEKmCZ3OgXTk2xt1khcctgpa_``HK#>63^JeIqU%|*lurG{up!Ff*K2%Ow zd#7NIgWV|TVb=Z>422)PVKRN(^H4NEv3-|Yn8d=d}H9cj4}Mr=R>L0#pjQ+|nk z2b1yjxdayj)w7$0ubs+fvx0j{cqi+_$Dd%|UV`Gj+3K{qY1Iq9xfQx?qopulug$i# zVvvFjiW^!C-0z;Pb^^x}^$y1x2Q%Yz-Hr3ktUpKG+o;>aUR}G<9-(()OE;4j_Iy88 zTm`u(rzcYpRJWAA?#g&Vteg0Cg;vvtcyI6>VscLg1>K~F2uc#Aq&t0x4B(RyzIDzF za~Sp&^uk@o@s@RnkSX(S4;3K-m$A8E9tAo2i7rv-Kg=o7W-8UhrG>s}C=vHDK`{;D zv<}-Qm=)TgL-F4Ccfgh0>V6TFnf@AI^mwsp{F12RZFOCV8_U@>sdihHg0km#3_UE9k4(j@S0GLECg!LdBekJ%d@p$=jZYOvQOng`v|xlKw|;X3)8= zsfQwlcV8RN($~(Q8`f&6U|ucoEFzRe!u+Q2y_7%z3gyNQ*4MHkXsfnb5yuR#3|KUe zkXdV12K&A$Z6k-`{cq@1L!zNX7q4hz!{dmDd#2D0$8vvgrGDSsu+oi*_Y`c%;ig$E zPp#judY2~jebnp}*}Dt?Bh_U`Ng`AGt+?*Rtn%A2QyEn*yQ;tau}l6!*Ue{uB|z-=@^+hEL&nVFrK8DeILV`gS% zW|G-4Lu|{;7<0_b%*-G&Gvn#~zW=W7u1ZpE?Pz9apWc3^r+211n}BDt!@(`+vJV2E zsXx9b1GW?ynH9Tw24o-U8Ee!FdcA5aB5}p0aZw3m=i29fMg~eT4c_nCk4E-w%m-xx z3>!i!f62IWo}UlbFW+mC|&Z_}doJF$R;8ZwRGSsK3eDef=-_ok(KjGXN-jmbV8P+`3wZaq;=<%9*g3?4-x2OZO ze{RGvT?f~;iE)n&LgvW>V`$rlJNruRAY=3%dbe?jP3midboOVSHoQnV0F5KC6%o-E z$g&Z&g4?p(rWxEQ@4Eq*ht|D*-BGZTCrRtkJ0f#}9n4o>5=yeLu{;6L7E5Jd*+ER) zuahptO{*n^gRRW5`)J4^mXkZFjc*99N8yBnc!HxY=-kQKGT&s**L-X%;&~cMJek-| zznJ^623Y!%&p&RTL_Cnh_1jCk_iuP@QEp;0aPp02_3)@STS4^gs0 zjCZ*dEA=OX-Ca#f7Jz86^SHTsMPnDz_cxaum0{&US3FyR+joQW-#>_#Y-`U}X9r!X z(4T8uQUTdezu;W9Vh7s2eg(>PwLFC-yqEH|L27vpE$xfw6sV?&3s@`|CS1k}OdJ2)ZHrg9I($pLqOI9O-j zBLW;w!`lnI#q#(%TiWJc)z-#wc!q80`iCt}#k*A8V@C;g{>?meJnXY^9vYzEZxI+p zY%a~+0Wn&H>5I)E_(_$1g9T(RJ>$xGY>b zi|w9wIw`Uhx<;snI|keI(sis>6x~9+-NiD%?zr-%BI5OE_0vNV!R}#Nu{!yJ4}YOq zyz{wVVcrdMUTs!prEMlJK0fvJaynJQfa1{HfyKpue^^> zfA(QKuK^!k(`u(7)I1JH-rS450{N}_4&@YR1Nc7{SII&AC9_Lqeug?wg2Ox{T`q1Z z&E0n4p|@IT8#eHVzQL}ZxW)G-l)&eK@3t!XizeX(?P{y@h7m3*gInhNdW2WTjxw=3 zo^xpzQf)1mK{>&W8bpg@d8^x?WI>;qRCQ)(2y>E>p89rnwV@^|TMYTt69E>|= zHMh3jd%pzYQ%4t&&LoF?Ao1;LSHA|?rI#4osRk{!3(gEJ8ac>`p541XQ4)8@gyWqD z6+98NI}Y-4<0-ok5iLL_)CQt)=aa|G^8moXIg5{U&RUa;0B1RbK zXy;OB+rTDDK7Yt=r>vv1Cz+GDnr&IQcp%FABIZyTKW;?atV@JxnV-*GwnBo6Px>r| zsgAD+mjhDs=-^Jt`!I4v`freg?A?nRMHd-)3r}fP!J4_oU z#gqU7d$Q5udu-35tDP?~N3yqe_0k;o$!$_pO%FLv#=5WdiFw@F%A?z*YtMz!T#DQ{ zU(?_t!Sbt7&;-1oy!H7RnC=UJV*sx>;gw(2KXhT0wdp<-APz8Q$8_miG(iJ3 zaz&i!Use@EOvKpi4|%U@F^TGzAbm*d*1VBH=k(Z3u0u_f_PXX`80;;Mi#!q~GE#5Irzj9IKZ2jP}5J=T)$@J#hrCL97EW)HMjO$-~JLq$<>if0gvR= z@XQ!XWUJvR1aaqoi2)qp)A9oB{5z=F>Fy_Ky95B^65Dkn3`+T-)L3`$gYD%6-#d__3eTT_D1$?p+EwYaE|Hnpc-byoLCjm$O(hQsY#YJneb`jX%bgEhvzAzZ0 znzyO>duk9_EplVc-Tzw4@)uq4Vcn#t1xtI3zR(1qF3}(tN`ni=I$SbVkRTT7^?EtK z4m_`6qja<8f^g(uApeo#%nux6nFCL2ru!a$H0ZYW>o$t3Cf!l0dgAo-*1?uKRO5=|7g6!p`Sr)-AUnWk zZW*x7In80A1ensnh2cbrwN?JAake@Y)Aa=G>}STG_#Umr`vhE+{K%iUteRLb=z2O? z)$K62vaxY_M<}eWifOLg6}0n5?|PCGy2y$|FmwN#ne$6PS@0RL$$vI+NHzJ-32QRN z3G>vNJ&^pQY0hO?kVmQ_%IM>5&fw!^LkO^f10=KHwM=be#TmoA{9b9c(-}AifoqIs45`p{qSj!N!q7p+FEYcPJ!N`-9Z! zeXk0dJQamCFtqFnu9>=0`L!k57ivpmn`ZX#P?t>xvJYY=JSABae=op#C=TL`t^=;` zs|V6fWipz0`uzFt1t-_4n$&3zCCNm}xO<*32bgp+e!6j4=NQ&^mfo!Oqv|uF0C-o=P?y(`{z?+A zJajs^Y>P#Dm517Hd=_pAn3*>fm#i#5yl>#I#HegJ5S1oR6SS)TIxj#*@6%->hYN!z zZ*ertX?&F1tp}OZC0JbwtVoyR9<2l!dc%9#{260WER77LB}cfVKgeL~B&E}!W9XXN zsPS{r&q1lS(8$Qs32mvtCrkl+!qtm300V!~Vl~aEQVBu*|05Foiu=}-+24^4_jI0{i(CKP zUB*Rz;8tR=7H^+#+{_&V|6uj(&p*V2KJ%uSsWHW+0+g+I#g!rgIFDIi`pVX^tCzj|sB76b**(~;Nn95} z+TYlBTN@8Xxeusmnk5q2Eq}8B==x(v*fY2c5yA&JP?JfPMxv>Xxe9#r%F%@Lh?g## zFfB&E3F$O-Mq$?@EjuQP>Iq_QMCse|EBykPgi*Q`s7pd-%!ByE@_3J)YBRXVw^?8DhmmDrCWQnW=BT8QYjWw9V-(DksYI;CQ3HXY|umDoZomo zTU#0|P8UvRe<1E5WvN99+?}D!;1d*t=;;Uz!(WL=22gs$;EYzEQVY8bS=|;|hM&iZ~Sn$6Kj4rOnb`<*w!G-5X z*1ZuZ;szfS(8HM@fNt*^+;{$8dp8T6ofUqxvE?K8S`R^^i97&3mq09IWuX$T4Xo|p z-(P+nNLssP@-b&5UCBGN(pu1FKl;zf@#G7nbGxY|eXG9%=V+vfgg3-O@6PH{Bo3;y zqoE*!k$`p$7Igg&lT%3Y>xJv>Gsu>Rp7XEGpkPF3qAZQXJG>u9WZPj1kg)tp^|{3? z(>%0=TL{g01%Lp;XePAni>_Q=Xp!!1e5G!9uGXF{_y5J$z+ka68y{9uVpL3l!=1zw z`iYFPJFrbD0dvtgm|(Uj(<5H#E&^*TL)m=@%85<_75TjrykQ0vgHyFti@9 zVs2j^8uOw9l1d=#UB%3@B-(s8UxcN6UBGy%0<8WIpxYh!`I~ED$h`2)y9EJ!B*O*V z4Uzwrq?{d{>9@mTA?;aSgag{3f=|APLqJ7Cf}aB9WVioUFOQ-ANcT$oF~^4x9ENw? zwx3N*ulzydBzf2#9IY%x#NDPPxpyt`ZJ*FADIbRpnrjqZF$ujJEdKzb{00p;LkGf9 zcquP}ZAmWGMXma=!%EbUey+#B_5NHB==JL!I7pODdaD~&a(l4IiAiDBopzcdS7QWO zB$Vaq{=Y*1k{Aj6gJ8m<^J66+fdDHV*uxCs2{E^V*MSRxZsC8^&|=RR8FUm z65tc)sx>tlH`xF~_RFXQasFT1C4krOcFE!MtCRFGF>B^vC- zp_dCg=a$fut;JOtN0e?`hO`p=xZHUBY$#&V0udpb&5ILbnlj-WGX0p`H1HkL^F5@% zv~5mxj+vKXyuww{SBz^@pBlBLMQXW82CSX3S5W<9R*jIX&`Rrk15e~I9K zN}fsQtC}K4!X7TVnGfq&6SQ5z{ytR*eMu8nY#&06FXx^jrth3m1f$hA#_naI!E+K) zbj9^j0ow9^JU94kYZ-Hi2Rz;>SpfX`;fjuUW^d!}ymBoxW~Y*<*e8!|NaPLFqi2Ka z9VQ2qh ztF+2ZJ$_ket@i$235j~LE)8%O$HYe=Rw?V<1e%9zo}HQArKj9t0~R?R=8J)kblDlY zn`Vi0)OeXWbO6VVPMYmO2w@!RPepgjcy`Ik&EZ%DGZq zUH#zKta^`Yc@?g7-v<<-tjzD_YKff`^7ccL&OiKn@sW%7ij@l3*`;s()p~REcaTYN zRi1_YVMiKGQnro>0l*%r|EH{D!U{tpmHPvTLZHR?rLT-0Wlq96ug$jIgaQgsn`J`; zd?gRh8|_pn^U7Wt3KYj_cY?$vocgJgYxbex0*A`{#ir47t`CJD?ZzKQ_yTl3Q*R$U zC4oS{%AZ-TXqGFtrH22?N3cEqc-M3JyYf8&V5&pq=YBji6~TAAbHTH&enD=IHX zN~@AhP~B3gWV%Kuiqj8YfpuTDp%|D`lE9??u-`TL+Ao6Znh~&c(uf>J*@!k#`9obm zn&PNArB=`z@PK)0T%}6H1cRB56PVwY)%my*Sru6y1#4OvwGpuHyhf&I<05qC>FeFW zoXu%QGQQUiy92c*_Sc3Wv#Y>Fs$hWg&?&6-u6RnYqKFW5z4NCSg=S)QZ5V(Fk>A7q ze52LcY!y*JLYYXx>r?(c=IcdFsxWa^?sj0)!DeYXKx~F#t~a{E=OQ^|&QOY~(ydkP z6&(}l*Iq~c1oQ;@P&%1xa%kVz@i_nRdZs|~S3+ncIXhxKD2 zqokQt4EI&shmG)z0ZtFzyjPt=pC|t2N;9N_Lq)*c!BF<5>;qy4UI|dp^Wx>Nfv-Q?W3Mts-U8s26Z9;HOc=Vv%h( zrhsIYOd!D@G95i7O9L@rLUx$S$`8Vx5O(SIGRsQznZ?e1j_sK267R-K(*{ytXb^Nd*V~@Y6(rMrXI#K*FM`T zfS2}CB9XuJ=Uap$LBMr@XLoX3?@0<@)egZl%^Th7ehBw9(+HW&N`TJa!C_tL>V(5z zu9`EO|4SafgoY}iVGk|h&35|QQstesi29f4KX z1g@pJQM7;k)DUO)AV9p`yCS)IB{QSj4#cv8Nf0K){G<0;$?a@OmmIlotjTx0U(~8k zr>Nbaq^sn*&*lF;FYYrP66i^$BCW+%FZxbrjl!`=%Soq8g%=W3vc3MOOs+3b`^Q{J zK%F^bsB@8@1%;pWNy)kfkH@$;7&gX z;5w-toGkP6*Er3TrYqaCaGTane_Z)~)Q_U9Mx|djCxgjnwGd|y2823am9+h;nu)CkI=Z{y49I<8tIF`(yPK&=OW^qSR z2>C-<9Ju@&E>bnxp(Sb&m1dcL$MP0xlL5`{MbrSs_&loVBIaQvsO=5c2 z6XcEiUjEhKWNCmKfWJ=Vdrp*xy7guOW!=}?uN)_I(M!KoaQA~8ndG@UnCcl@o;_uk zb5jn3z@Y&>^OXW3i_T(ii6|~v4wb!QLW&FjhrbXL=ZqrftaMHDNsX{Q#S|uV{zBC> z#f+UhQtn#?5N;@HSuGDRvE@K zIk|J$sz}=JiSlc@S~~)baUmK4C>42{C83cx>KXURf+Qt-)-Jlu{}lbVwn)wU50A_K z+G;E=;HJF#kJ3+J7l~Ke{E7rB`oFvHI~zA>??U)-;kpCIzZ2>Rc&zyI=7Z zw3kWAMgssS_~8*Ssn%!7qL=j9tgTFsf6!dUD4J~{Zu^pmhyN3eZpLZ9<^j&yeB)TI z$?xzZ)`Rutl{dR}MdwR^XnNlJHKu1HUf&Qm3fn$+%dwN?U5d`#Fm~Da68*hFHMwMx z0tWihO z0gy8!>Z2gnDD8AylzdSz=w%20xxP{1P@8kneFM(k$6H_+x~Uq6F&G2*`Rdt(8Kg&q z+G6!cRAGKunPPxAF_?VSYrEF8-aeAD^Y*4R@&wujXCbsOxC?fYj@Y*!;&;IXBn z?9hhKF-}Ns;Aj!T*oL#itx$hB6E|tm0dRkd%#d9BXPF#xIW~^sS?c4e&Up@x^d6MY~os+mPP^z<;^#Fe^YT<6Rs=nwqYB;=) z?Leh+ToDTULSXqjx0@A;cDzP*kWHMA`#U%9zlT;yvg3o=v$`UFy5tFjcG`H+DeXnzdRL)J-b^%p-JH{Oa{5U4r<~*jAl@vbk8=4Uv>bi&X-zqG- z&DFYNuG9n2-M- z_{*ul3VPph8NM)!s0Q$gBIwMDDD%;u+TUFrmll#E8{1su?V>}>9&Iz@;kb999R{JB+{!g{ZR!=ioXqFJQatgD3ZzI>g#eQnkQ$&z(*{@XxJw z2*e&Xq7%&R14CKifjJ3Gqis9*q5R}l$d=pwS*&>x04FjlR|K%_E{Inu{*SW$^PO9cy#wV_2i~E!=HwEuD0QbB+C!;Qt-UfEc+o#N`(M*k0 z3oX=L0@9qez-nvn9$)?0JtLXN-AU(fp2eg2BFXRE9*um57(L@}KeFwt3@@fKE)fE& zYZ`Do2?WEuZ(JX0a1Xm|9oA&Lcpe#ihED89-CCTCA0iPfF1z?$a`0~2&JW>w8tY)e zMlVYyATAZh?Yg0-g5N0G%VNz!we~@;mAddyrv?_kAmjxz46I zu17dSoW+ag3;#4rUj>~1sfRq@*u8_`H{CGWQxTAcK{X2@&a zT-3B~D+MM(u!N$d$i@=9O=1G)cL%jZh%+44?hOhwd+*3(&d|ZIKnXH@LyS>a1gbZ9 zaPU8~F`aQ#;hIQ@3v<@)iLb(D8+vEgP3L>P#_3kv#-Z1%9SU=~TJ*kWz(e4r34>bN`w^=fJ|9YzgP^e#mzvW^`Ce%KIif9TNgJQ8 zohNA`tLkMz7nxg_LS_R{sJujVbk0E?%990@sX0w+r?2@Gw5s z@1Q?3EbBbnf3skGosRuxK}(nV9ad)}aG=6igP8ZqXurK9AjbnC<8#QMf5CwQ!1j#G zI=l^HDMwYMg-C*GN=QKT?Du`shJMG&+2F$OzZ z;~L$3JDAkGIYCdD4zZUI^I&gLvhya0PF+wG?bxU@(Eui!1*ui{%)q9QWfi(;Oya%4 zkC>Q=`RvNk%P2fBrsF?y&k&m`-KQzm}w4x5|G2#Q_K8QD;qz?WRydK@5#^dr; z3-ri^3|}(#nv<&^U|(SNEtHu1y>z$>Vxz)*_~{@t*wikYINB!kYNnT@hiiK3zgo1% z1H4-@=xekGFQe1%g8h)S_Yat)mN-a|8*%h7SyTFJ(d9UH!?a!@8>|K>QzzsYh5k#I z_qDTBCQ`lm-W^tsfU!Wysl)zR;q&d*pz|GW{R?bVxce9z&CvCIb{f>^*N%^Br;`l8 z`sblgT-S$h)0_Lt!RPSZg};u!;FbG#XL^b!zX}ry-n-t)jO`hE)g%CxNjb!*iS2YA10zhcl*3y=2jI65X{*M#J z!mXOxKk#~31N%vo?n-?(A@>>X3sz`kR}@Gp9oKb@7<#Ie(YqsJPnrly2;Q9`mglaw zE!sp%2T+DC&->WQO?87GoeTxHlgd573f%m#bsFbx={m>T4Lrj27d=j0B=QF7StIZ7 z@;%+#G*Fp+{^4;HwwW#D1a3-Jmbqa7Qc2Hf55p(g-8)ZaRY%9TE-Mtna4DB{bUv<` z{nRvW_Ut=Io9uDg8uja;7HZ?4QY4{Ite=8m2bXvQM~6?2`17!S|vDc zU5e%X0$Mb|M)T-(=4ah660kukTgU`P=@U|wSvsU!%M)m+&qL__Y7SNC<9F{ZcyHw^-((Sp=$n84(+r9b zgjmn6^&86Zv$jy2*Un`Usr+%1LKlRPW*CX|3M+AS18KEd75yIa7Vev6;UUK+X_ZLK z{l>Ju$jMi?5H=%A%lSg&u<89d0ep6o>{L?ewH*f`|Dm^tPGN`k;%8AEWjzqz5^<-+ z*d+g9Sxi~GC#ru`Kl5>paEFW+`NnIee~$fgKJev6`PR5_|Cn?L6~Np68PFu*O~nQQ zc)a|)x+MjWn@ULP%ClNsqQI$r*w#`P z|4%|xmTUj*uJQ=qsSiK;RytFW_3g+DfJqs?HO{Q&jsUzZDO_mJ|ao)B)Q`Ig(Zt5ZPg`#E0&$h>|X<)xEl{RFTFObZSiXMU)DC3=s#k_M>uu zFafUmQE>wvg+8w4asa^4N8?E#wdbQLo(4vH-KLZ497lVbCW+m?RY*r6g(P*|7nbBFRP#5i7P z2+@q5$uI=1sbeC)H~cE?G}h0bgK!?AT%N*CNt2~&AFyf+Re{6X-;~zbzqe$JPI5OY z1~`=^=~Cv)-=Z_#VY`;DsyH&}SRPEfm0brQ2<%UCV$@G_5z+ZtPc;n6oc@XlQK@^I zoCGMVC`&hxAVSh^l{S5Y_Kpc{kYL&Ry!&|VdK2v^+Qx-JrFr7*DgP=cdZoI<6}xNn zhDsvw!Z_!UF#FWEMrZx?^i;7y3}P0kEQ|Kq94L%JH>bxU8ck8k5pt)2huoeTKnkrS!WdodSedd z3->j=T0-!^r)n{q)TZ@n;TKMPw?n?;pa|xfto5D|d?% zXN`A=28%+awCt24WE+NUuA}3yG~O=Tc$;NIOfGS1T;nX~C2zq$cMso9$A;^z`nmnG zAKJ|#46sR&C%J*;I|VMa(|hYNs08zbd#zP2?*G!?&+A@Ky5jgY;R9+5;4M0SNj%fADh3!Qxo&2s=a0II+uQrl#W z2k~kn(wmODHqL=UUlpHj&SRn7VHRp%c3TIoUWz3>}Rn8Jt z(U}k_>7)Oo#QY-D@{}O8kcsLIlo&3C6UV)nlvkjSQ??6u2L;1f248d%X1Z3~;zxPH z3x8cDV_mKsVtGwoy&vGvo-kz+^~M*I4}B{sz*%MA+mXvjq&Mrx=-!fPer6=j{9CvYNkF3D|#l+dIii_^o`B1nYPFUn~3K9 zG>c=h)zDb%k5T7tG0hEOOWe`uhmp^-3l4`9uQ@|sSROEjy+^x6fs3@6WSD$aS%JpY z^johHx0z4;RVGPpspQTcn;%Cr^JjjO)GKNTofx-&elNnysS6hE6<`@nJ`K`68w;!mupuzU8m7N356Mm^itQ5dzEp zDtadBC~KiRiQ+9_uA=;<4!E(Z-6lY#S^a~~m=5@*luwOS;yt^)A{|cL+drZQ?Hhuo10KRJa-@A>ek7u6TVsOi%aG!2q7DC*J;qT5>YdDMg1Hs{Qt ziI(7rmXHq4SSyHo=e9BjCy?9mM~e%Ajzzve5)8smSC?*By|v@U!q&J&1Tx3Y0@K{-bAp?1T&%rBH@1p zV21u-W0dFh6ghM66|EOZM#|qAtzhM>y4V4(*S(b~LGuh5Y>$BGu&II{6neQ!_7F>s$1sgK7RT+>QN%n8A4DP>Kmmu3&Ixh%4=iRfa3buWM>%OR+ z@-{|8$Vd2Ao*;Cjdj|1mdhSz#D{7c^+IG`65Tg13(y6X?3W(E%(5 zG!Ha(P#?a=b!c*nn=BQ4??>U&vVLDNHzjc+OzQD!aR!a_ttKsd(vVKd5$G7p!LR&i z{#T0NJ}y`BD+b3!)X7?bMjr{GEI|{1B}&Rk3m#7jX@U{D&4S^QqLSL?rId`7=`vH3 zV5cgnIWgoXZul~=w3UC|J7G(8&A_oI?~j{KGHE9b<&4{YGqu`mqk;t$p}@6PtX$MC zDP7RVT6RT9?0pZ6nX;6xwqUtE3}ec=Oq(Jp`UzA+l+5f`()IIQxkCw58!868)BqLW zv0S~m4<^c~L^r%5ioMh%1T{zoY};g0L-5r>D>z27vX@I_JM z{N|V0DFXc~)@+3ZDOc&r(!)--Fs9m%{OO4o&t5$E53nD4KB!BCoP|3V%C9JzgDn~< z-)}*-yF&?rnp3)<7yXHncjhNxI*=p0dr8bUag~dOXTM8TBRHZlu)RBsV_&;RrA@{x zM54|&dxu?(l{TTBWGGa^1}j3r$fYZ?n-DE<0V>CgyWff{J@^fZh)wiXv8FF@1m9>w z7ut}&Q#{whTYf05`5G??s1gCYE)G9?Nkj|3#cUPx&S~vvt2*n5CwC0+zaKKuV!HmF z;>m$1G~~>nVe(9W{D)lCs9WY4Ef9im5N%YZ8OMY57ec?I@U1r^I#9KThgkP^N7BAN zd{sBwM2phGcW2y+SZS6ed^4LB)rrb!-?vl8b^3(0-n^9J5v@i5p*@==Cc7D$kpw%f z@;=-HA1~g%WBf&VMuq}FmF-c;+STtM^*mW173!&-A|GdDzi2ipEzY8(8$h%!X=*Sl9 zN~wKBeI1)2vsy_;}6F;!B&-PJiHVbv9LteSqtpB$+P**YTYIJ)t{OFt#Y zr)$5IC_=?5Xe=8CDkvU!b&d~Ong>U0j4Abr0_$<*09&5Lv#-8lhq7JW1Epbun*%&9 zx+=-HGFr#`)f5$Be_gW-QhhFUTG!{Ab~eUk>;`@-&}S-E7h9A4l*x9GOt>Ex=HUS4 zWTo8CDwx@_7;NU%tfJkythzq+{3MX@96rYvlFEqR<82VRf;*D^8zQ}@^vI#D!-El4 zf%Z=f?^_{CP(t&v$j1ocO_K3uVm2^sKc4rS#}_Z>IH`4mPbi%|an1jojI%~k=|O^{ zLB&N=Q2@fQ`&yvgq4A{RgX?EsD89$Lj7&{|UzTRAEIj;iFADx1?H+bp{F=bfIrMjb zI5whdi{SIlTIP~cTR^`<$d|kDyRYBl!^r9zVjOBXh78iwOl$#DgU9JE-Xd;Y5@Jjd zgTBl!r?=g6P*YzQ>g_G-C`D3{|9KQr&%XEz7KlHV8c0?$T2Xz@ND4EW!Y3IdlD zkof?CWGXbY^E3$Xf9jXWUocqC6aENy*T+dqU6Aw2hD)sFyrIk~sbIsW#;V_Z?0KZd zZq5oCPiHD$zJgfUsv{fTM=U_adkqNUyK4O(xpAG}GO9h$+Y!GV=8-8joFu?NSB0t5 zz?<4>(n3OR*e*O!cAN7-{=kB61t;Qz2n5()Xjz8fyUN_;lT9md{|)NKL7$?~r8_4P zgAY?XYBbdo$z5aHz(G4|BoJk<5N(neh1{ucQVOw772_Ij3lip%cA(HDYMqgVhXXWy znYF=*m-Gpb5$W7W<>^4*(nbA3hW_7@DA94TwPdo?dL|Rv6T+xRe$9@1it6 z2WQaQlE7eDwkgI&7m&Mef{z>STS*!5e`X|*B~k8L9-yhC9qm*iKBg^WFtR`Xx(&od6jkV_`L5YbOf>XRC1{&^AV6kv)Mir7xoAG$Cy5bQ)0F#{! zEoquGz#zV44KUyuTb72??srcs#?6B7d^{*OC?}6ZEE+ho%Z3Mdx1_}*7*z~$M2iz< z5dc>iDMX76%G;0ppn-R#AF~wFMmV>0h6foM22Ov639M?OSmd8XENnwV5$vqFYNP4J zLW&8*a&SwA%&+G5M#Ml(s7O zOkMTUg+Q&qDFf0=2eIB5*hTV*#8BW1Ey#&rgiHp!!FZ#HONk@;r-W0J6MZ`o7PXT> z@RuB6M__wx}3{hZ&JEdb|um^jBZ*rvr6QA@CH@ z!n>|0(14FMt#J?__3HJ&H4Gri@(2f8YO!=Ns6wJ2gdSBuEe>@6Sfpx@r zuZF#fd^Rm8qc&C)%M8JNke5K3`>Ia4))6MqcA!_He%qqRnRJHy&33UsLMcoZ79QsU z5>n5h5_~-?Y@N=?9M%^t_@4t)(k388`12yK-`e&AQ<_k}{yV1$RYV8xIsz3X-2LOP zF-^1TdbH{6H|T$Xp%xHfI|o#18v#yP9tMFGQS z$KCwj@sCZkynrlpRw_ES*sKXadfG4<5g(;-`ZV&;|RqW=v?CsG~KbAhpB8+rq(uFG7sxi5=g` zvLJC3wreiyHinQGhz2@w6@|f|a_w_sSFrU1Yq2@Gbj!ExF@`yF7(iOMur@jj{*5u2 zHSSp|K6}|qFwh8vimoL#4gE#!D9ps-TZ9n;q}B}=_|JeqYo56~U4A!zAvYk-W+@le4 z4vjDKb1IFvtpjXvvXUJQEutOd5g=E>f}<3>C-Jt>GTetI`5hh68JF?(n54OD*in0> zMRE!EXpN6*>b!8I;D7c_;&uKfbmFEHFoTiMf}gP0VdJrx8g^1D$flVKv7*F10GXqs z(-#Cj6VtzFv0*u^Y<4tKaBQbPU(w#8@yDyk@ZnJaOq0GK3r5g({@fEjv4WULu1&*l zX{J`xkZ-!tLjICNKf(NOJ|@ad;J2!=+)M`K+IA$iOQHMDMpz$ zvbeK?2MMzU7=pl>-4GNCzLP1mmQt`h|0#QkqP4C|f;&BxduELdvQWIpPh7jIJ1~7E zqrkeV3$rr^6U@Q!)S&%-jD>fuuKX3VM%L&@!`A_K&)gcECBJ}AmOH;=*jD0 zISqp87$|SiJ;Y#ai5Ef~w?%}t!9&-@5&1(+U`|59-@3A8twM^2l70?&hV_1tHE3u= z4GX7R$nkk2-8b880`(H7Yj(o~Fo1(s5rVrGJxnt2KesIsCNhGAft4ktd$9h4;4CFI zgb=gkrNhwvg9Tp!Ao#cFAxi|v4N+w<-3mov7&pMWbtQCXzMr-G_5*4TwGe~IJrMg zKW#XC{gET|xpcj6fXb{-qFyeZ_@sp&P>bT|0DZY{3C@AA;PS=J%W*>mPY`&fWA{?PYdq>@??!bY!d#5WVZIkh`@kKz-uS$u$iyEB`fdFlY`vSU}n=aL1+ zCnsWPtKqN^Q5KtlfZErqI;lTE1q$6*{NE!EKT*vyL-= z0MZ`E9z0IDdc4aXS0@JFCWgxv4!Q10EYIBr^og0)`pnHZ?3Ow$h29~3J4T;lm2hNs z=e-X+>^oY|CR?62-lPxStXDSz7tN;OWCl}VNG*?e9I^K$9c=z4lvfSDS* zJEyvhXj?zHHP$(4G@@!6aiT)~bGur?IFR9a+fsWt)087om>G8juveXAMAe~-w78h&R%8D2lxIkAf7XDYrj9Ccu}?Aw39x)RHS;c* zGC#(xXL4@LH?%3Xu|ZF|KB>{tCTK6D(UjWpJFp&kBeLsvEx{pA_IXoUn}ZEQR&|TM z3BO`%vu>2%?!g*|-o`GP$F3c7qeG%*@#Vp%+tbDCy-<=}JOkx+AOY}WV%QD&wl_8Gu6-`MApAz?CjcK^WcFm-t3P`)vXdv%s^ zOJpG-xWtP3Sk;flb9QND+=-l-BUL%eosH__UYmH!lc{iX|E9xtjw-Q~qtbg3I`#ry zRK7I@-d8t`h1v8Yok|7@n4?C3uDSjL!~fD?W(q>|R`5$-HcHOvv`8rzeovbBMSsTr|A_iIa>2HI_2=V@3;vQ98tGz zpQ8ISBnRlkBZv+B$fAM=ydU4q9WVU>Y;ubr6%D4dn`B}RWHydA8CrZEJ{rhZli=kY z8hmi;8Rl}UzMFjGXHGVL8{eLdU^xr_b;zB?*uyDk8~_5Hm$jp#fV4*5J~~>O)QrE^Nm*ANXBxw z%?lhsh+A$f-|{7R6qsWltcWKRg2F^BSsi=6SytvCXRPQc{!ChUKa1VAfty3}=)h{v z*x;$LD7~PvJNR95ekN#ZDJF(+-S_E{ZSW=7DrJZRU!@YY7N7_UV=pkWru`A&E#f(p zrfB#;L1&U&XVk}-83UE3n#q!?@BJz2xoZIblSmroD|8dPD!RPb+F%zJlvk>kuSR@= zqXge)&Jf-= zu}K^6r46Gu3vlhp5Ds(13Mxz#&PmUUDMsA1A^@>8IL*MYRijxQq%&ETA4Bd6hiwyt zf}8A5XL2mJg2wGUHIx#Ma?aK#I-lbu_)bJo`d}pcD>cyVl2Y#*`#hSXfQ>Bs7Uk1w zH^De%j~p}n<$=#R49!ja&{9bKpVV61u7_&Rg+4K&Y~0&h-gQ6 z${w$*`F&rOKOU2=%Iv5p7CwQHZTh$R3teO-YR~cunywria(Is@VWVI_*e!&(Wm!W9 z7RywL*IWP3j01tnQ3k8l?Fo)JM-CA}ra;vnVuW%U?F$^e?|*wGvKG-r$R#H@^`_P5 zU{%Ba+J+iF|g(TL3OudnX@?aL-sb04M#+pfyIt7JUi3D-Z!Iq zGmDIZHJQ#9gkh{yMevmrB6a`m?V|5^p~<1^<2WP7D9Hmj*JYprZ|AUg$`z?-65`UU zY}iW+x~u^aw|t^tJAAnKKR)slp>Qw6?*LL`l@&7aF#a#D-Z8qe?+F|1*y`Bo*tTtU zj1D@sedDBK->8$0ZQHhO+t%FQ|D9R0X4bm<9)37y@2Y*Oo~L$IQE2~&YgM=Bkqc1cVKq{n_- z6IPtp*sYJ}ji)V5G3>#oy^FrHHMw|FzahbP z24pIJx{+mtr!b;r_@RgwTK_Xjp7v1^Jg4G~>f5^$v0yb~kIsoVR_$VkqngV+IS%Rg znWM!blEWWEysDp|nmF6XJts(krDJozwax{z4@maRjvIHe%A3LYNL}Hs(<@4GdvRFv z_*FuUp{2w^l$JUnZ_-=a-P?_%ns9E09sHv_dPM%)v34PG;D z1K=MkCFEZ9sw%Yu(|SD2CBbn8y#iAXEN}+6w$`yq7ea~eH%{0E1YQ`y*_14 zi6S^X53{?yF?hn@$V>@wll+hHLjJW!5S=AMJ4XMA=KB0dxc{M}V*cUA;832q)i@1G z3~Kr%SeJdKiz^5DV?1U<-GefQ!ie98{y=lEv0USj|K%YQBSFS7vWS7L$fz^MQgACx zO~CxnrWwI%G3+pLhRryn`9svBtBcFe|Fqp_W#A;haZr8C(f;-u6zFFM=;!$X;OfZc z9C%Xem|fGdi+!4>@km*g>q(tU&NMByeR0slC)6cdvtOcf%5#5^^i-N49KlV-f8>0m z_Z_a|H1(WBJIu$0lolL7q=39AF*9!Yg$CXxwxTxbGCOP8>XN3FVVf-cwf3h)d04$# z2P5XYc`6jIP-b&n@GFEL^4^j^fRB-npcW$6(rSW)L6r?7)G_D6#mYgB1RYv&eh%57l&^F*gn&d|)uU91Jw8)uyioWihY8XIxnh2Lr9lM>( z;80LHs7w+Mg6vkOXVI`-FAEsr*uLfOO10ls?)BZ#5y7|1zol{zmwtOCQs-1bjpEhs zyNxZT)iGVL2l%{Q2+7X6f$=iE-hKjc3Mdo69D!v8lx<*LK=VRMeYBAjQ3QSFzaHuvOZI7^Y($v(Cw)^iO^F_BZc zp`JF5)Wwwo(r@Jme7=3k3BQ&KW#%MBZT_h%c^G!{N9R%^QxGrg z2$SPJMNE5t{MQmUS?DSj*i+>R;wHfP9yo2QM4HCh{lbJmrCn*S1E9$#n~YEY5Eg+d#O! zWEXdJAbX(2I%5`o;{#Sy2Qa3bajiN+ekuGLUH#o#qSd?zy+v>Z>dfq}x z4_e*J4OLpK@Pv5WR|vAHsidV$)ZRVM>*& z>!op2qRZX#sWfrxUT{ZX18pghkpGF@gK>KeV0wXAgB6uL6&&5Tk`kO=T}vK|fe~Wy zJ%=5ZyHT@bN)9dQOP~>@SHe7l>(Xoe7iuAgG!jWr%Gnwbj3MXhUZkQJB2abf$7x4f zA`VGCx)B5VV53xSy4H|mpW7GqGk4g~akx9aQCRbJ> zAU});`?KEgBVwyi-ggef!WCWyHMz#{JhjVjIDEZalLR28@m{e$%*+9_3;ptNYU$M6 zKbceSex`9Mhf$Q~@M+?I#s z^W=Vny`TFEY&R?id<~be3&s-0zL)PSpn}D~oXoYFA=bIeZd$c^0Q#^rpdwYfq5i_V zESooAYkkO$kXE#i8c1V`ek2EKKIfBGBYuUd8>besLSz*cuyJYo;uV#|Dn;h77zVYH zlio!t;{S>`p*vtPl_;~ul&!G zx;%9=;MbOa{4MnPS(#6(QaM{QwnwD&T`6y{w2b^VuC+ZZpE{+D@a0K&=*!AQtfFEc zRC46zuqeZk+LG6sH+3AadpD;*EoM0a^jX_QwFbC0Y+z}^97z&0hcf5m^lI6CeI6W6 zaRJ(D&g2lpaEDaKDx5b_MjG@IN!Ker-rfxDJ6oLlJl>YRI$Egmc*-6O|L75`Iel_+ zk?YDSHVJL^bJnxRpNym6-!-RmmAE_#eL<&VR|U)->#>I#+9g1!sD2Osmb;+*h-PWA z!Uv#2g%U@sxFr9T?#yV59dDFQr~Zh>%rH3wqNe1eH!sLZbW{nUz;g>?7Ou$P#m{hR zg@xX769xM1%cLvuUe&a!zg)fgjuyh-(u4z6Rt$mP)&yGI*XjEc9hf$O(wi1Mb*A*=TnK3Y^u;~5gkD-2uHT6o8{L=MR%OUSeDJD?^ zs-)pl>TyM;mWoOd1_bY8^h5M?gfPv+27Bj|thD-&!nv0$(%ox^AfNkKDvJC&OA;qB zkNGMY4#?tBLZX8;6}aulj+dG#=Qa=_IYYZ9A(=*^_P{_rhW?=kf?21peSu^AI3!?C zz;k{aJ_&awDlm~5J&}Qswtp7EG*=)9IO=uU7JN2j~Mzej>jY5yzW0iC)eqqP4s459y)4-VsH<_pLM@nJ}{hjDDPsC{Yv z=`%4AsY!6lmQo5($oKT(pwTD6k9XK%IMxo|Cx;KtTJfn*O)~lc0STuBLfMm?LHtwU zsyL7-*L=PcJAgdboOJFQ3Q_=p2a^SeKf|`#O${z3K4k$x3X)-580Y|h+dsy=6uD-I zlz)ST8%cJU4TMQ_Ez3Yd6cLQjc#Qi=82l!6j|iir0OCz;LZyZOtyxrn5a!T1ID3&P z(Y#CG1U3dS=FD5vu(nI-BU;_DgWe8(v9=3!^C(cTfQXmn7xrXeri5r*1pcsg)cqSI zBu`xlv16V}owO`1(lDjVPYUpr;6MaT;Yo*5GBZ=MM_?8LJ1+naCN7~rN?vr**z)K2 zFmpcPHK;aKVWYYX!%Wcb7CEZznooGph}SydU-Y zkQXS-nYZ1G8OL_o6t3vqn*|Tg*bc>$H!K3WPLH`RD+2hZi&GR{DmH1u5C=tc;71!BT&4P1Cwol?@#V=`3g=I50YZirzq^yvLXCyUcSBP}^qoVJdU z4_@<<=L_pKNO&(J!jFofSNto|Oz-KvGqh1rkGfX*J0obPO&)hS|? zMR?kJRMx?2?SJ}}yp{>lS_vv}7(B=yL!fv8+lFvK8<8oT_|k@wVQt)?V<0&`#t(ps zZ|?Z9b`FpNTuNjr!kvZ=*5$-2B5ge|>&B7HVHzJyH7_-u<`_4d{=XZZ>&rpfh)5d( znhPi}W^@poG(^$a?4da5T$DgOOiCNQnJHs=n!8`%Z{4%4LLk^M^;9Au-Vqi7(&^*# zO8fWgj0_=#E3~LOT-j&7NqJkqj5MJMhVqtgdkwDZn7db$p%z^VW=YlON{E6SHxnxFDG0NN4N4zex~wBmQPs z!elzdj2qRK+GS-pOw=U~e|RcnV?JCst?TwkwB&7m+`)FgiTi4PhIp|w8OclY-~~W0 zzeBh@@#we;p9j=ZpUi>(icQif^TYD5BT5oFKe@sQ%vew66-o0Ixpj$|3KemG9rs?K$&m9H9&kuKG}Gy?j#S=w&0i57cc>{ z7qZXDRAan-~El+mHK!2EBI8Evp_I_)&DyJZzTKS0 z4^_+qG@700s`l)phq^`-B00G5nLoG%YH$2j*DN@ubcsm2b)B0~RP(rk$^=+fFPYG9 z0n=A$`+7Lk`V)3-zyw>b?~b_V`fii)E`;W1e{{_STqr;mGuIt>sMO)*%s{%nJ-;KL zOKiqs!hMElMTkM2j`fl12NAv|aPUO$iC|1)huwZ^&9KX}W9zx8?PdzucEIiHk1I0j z5YtGY2SGG_O$#SJj~?-QFTwb;AWU^LV0q1$JhjCU{~pSBq^Mg==za#d~UC^;kuqk+XFI z-R9*c_;Qy3crK?Z9bB^N zmK_@lWW#h_?&FJhxnp~fV|z3(r*71LGU&$yKFQr@v^qOWH>du)P*o|!oXvogAqVgl zpW&Qw5sUG*O_CiE=w~$hdDU@hy;O}gHRcS8l5=<2MeHl;MP@C0H<{Etv~0VE%BP>d zLl9c>9TB1Y<&}`wQk9tk@Vg^i+7uwyShJHB4-GZ3!?QBqVxOPfkK8}y-d z2d?NyV4uD4Yq(Qwk!Wp{mTMt+%De;GDwF4@Cbtv3KSO9$8b{ckGM>Cf^eEoJX z!QMvo+QNNvy1(+tgC}@`i`|Z}oRiZb~ru zEbBZ&Su3Esp+i8dP#v9Lbc9uGG@enLT{+7WKy&G8`js`r2K;ULuaymOv~7CqE)I29 zQlrF<%eAxt#usT@wWf|(m;d@e;QF`+a5)7mC5YSyy;>Ix$g!rP-Xfwq&2}@jRLKr1e~U zFAr*EW1kW3BUkY?k0`S?6B@(T5CQaJXO&%IUs`GbTGEMV-+;KHw5*^PWm2nfs%o>=Y>~ms103Hxuvna3wGp^EEBDnqAOEjyl=l6vBO3nz zBCS<89UU3mv9Xu_>j><8M}Zft+2>1e`#ta~%IJz67>Xkw&tQu>$rDf7CK=0^-%8QQ zN`0eskyQlr0&MFBN;95qFnJ#&Lr^i;Fy^!zYupr`Lao@2J&Rnz zC+(ZR4!>umVqdF8)?W}*9wy{|NGr5>94S2{7V`E2)n(^m=o+(o8Zgee;3Mh;8YlHV zM?bk0e4fOs=E;AgiMTjxI$I35d2}uB-yM0|jn&8`Pu#{-37S;(SD7W(z&_)tjjK3PJEmqHNk@PGC-i5M7@BvW z=BycQ?WVieTY)_Qk|+GTl68GEYfSy}qdPwp_gkb_i7UoyNyclPkKEM23l&@4!;abU z7tR4Xv&kt&pU?Xq-ncFR>yvA+pWn_r#M^DV(QWcdD+}Ud5b|Yjh~Yc07! zndV#LMCD^=!;0UCV77MRN2c^+tOn(BRs`mXC1~e|F3y0+TDg2R5|)^B-9vv>-J@+I z+Y_j{+c#CLJPe{YDP-tJ)>_tCx3qD#Y0M0Gb)q&dCEBAk0=D$GZS}Srdfo6MKZ5mK zsxTY4;0(~}i4C6;QhoI|t%n8MF4Mz(^$V@L1(~i9ps%~cl>l#)S5>=?2k2F!dJpZa z-fy^TqSx!8)svlYMt?iLLiE?}+|w$4y3}M%{VeBufu?-~3FAI^Re>=N z#@kM~mV3&@dz9vHw_J~!i+6@D+eM`zK%`zL&)VJdO|n$hfOdUXVq!Tb4_2w|hWGE! zPUM+t+g{}oftQ5e5(>>s^F0Jb;8_orCRdRO@qWdmL zifGYh1>OIN7*1wfmk9X7@N-lH5s#2y(vJX8&217QXe{;)vzC_DEa{b88o|^wf9r z>Tn}HK^dFSu@fIRzv@u<`Xmnh?(zv_d7{Jwq7PCY1DO9m$eF&3JpmV1=Tp_Ov;Xuu z5wWYvvhzs^1wu{|~xo1Ff2Gv()3)150KQoLNTy9|s&<*CP` zf{$fK=f5UPt99#!3yXl*i5p^P!mMAWy?(VUl_tnhR<=Ur4si5sEqp01mDbI?@yZOa*Q=yQQyMr4Wm(YS8n7SW%$*3350!m_F z*CFLY^L`aXpN3b9x{5zjLeKmcuF=Aluf%SC%(BZ%$K(PC%|k)_;Z&Eu9pNq*w>|Go zdRl-tW6*<1j3MtZA?&pF*8LCW_Yr)hMb$RE8nN{DVfU~DMn1eH-enVC%-+^nn>R*4eTqrQVUkO4se@Gc#?I+y*BjTD z0p1dCVek!jsAHe1RkxMBotUuo)G-}*gJzU-yWS%8 z-{Qq3``nrqW3yS9y1JF+V3Db8x;GCQ`3WQ59xydPw1V2+BJEXjU%iO;zrscbsj3Yc zN$$KM8A=Y15*V*yxXCs;W9{ZT*-V4q#i`r9fBR0k?H-WJ9~)_js)2KE(TLrq9MUc} z+DJFGX(9a>-|pv(* z63Pysfn}M>N}7x8`i%sU^)ScMQrj7*wav3=N1v!z_M?64G967K?b)We5XrD#MJv!4 zcsoYP4&rR7#wk6)Xn;B6l=1*wXW%7+=PqsY`37CzkAh-b`9i2$4=WSZF?O~}&T8_T z)mj?TMxOHV;SvEu%mmDuG)a{pp7lJG4nF&IuaWw@O!+xWW~4eBPT@l5KT?jR&71|T z`IDST;Pz%%4F_C4^9arR6(#?g)}KmfvT5l`GP$1o*4N6Q1LU05qyPt4Ij1(wnmmQxH+|=Yg{(i zHggSFf$@LIKRgyx&_zQOJ5h+j2jWN|B1{7)<{CQkDg(wi@FFCKZmdYMbcENaI|R>@ zW<|ENgehINx9GDyZ$mI#16j^4_R6ode1Siev6Z9F>-Gp}O}_zD$)y=B7RT*hBc)$GdSSIdRGkXuX&95JDMgdql4BtsoX& zS|GROt?RF0lfPu4+IOc9N>yDSO8Srj=}kj!**uJz2m($JqWksY^Y zzdMIS_hNqk$z)4vZYvZpgr}U=Frd{?v)t4m$@)4kr&_zh8&721k5Int?z$u@(b*8B zaspAyW;zVGjI%g7O6^!+ciqR8e)~RF_|n_q;T?*UTAfirz^x`{1jv3Gml<}YX-}3w zY<9tke2Br^%y{h$#A})LT>04;?rn9PZkbs-uV#H%xRp(}_PgGzYVn3yWAXb~Hz+`C zb5)sbSABkG!&g3mANB-efY|-U_oq3G-q^K)hFvs(ZS@bX6%KaIMSWf~I{p4di+y0& z(?RB+j(W5jpJYYK`kAHalD(oGEr_w}(R2cbkd9wzsnfj1VH&TZTS)fr{Er?7Sux8$ z8tAWdjOVgW^?TxB?_*?5;%y02fef|eP%XnTOR`oz(pWT&X{=?nMPcL`-BM$*&z`_e z=P+VGd3&r@0P)t~6`atv6v-o_(BAHc1Cud>Jmc;;!fkC%$R zAbsbYf6eK%`CN)9a_Q_KF zOecB|GbARREuTt0gCAus(5al0mE8UpPdUT=C;`lRGV?ZU(1JV!19y!o^i1Zy6n3k7>4${)C7c8VOER(>5DbhBwv$ zMp?>@kL5{OgC(Bk9k^4+25mg7eA&ySur@!rwfltEk|Osi7wnt`5YW^K4)#mrWoJun!D0Zh*K42b|1W$$RttsNPPNBGJs4Vq?enX-Pvd zs!_$DJzO5kk8go z4yc>c9cy;sZJWOx__fZO9u~uLFt4F~mSQ;R@R6XTM+rYB>i=|m(ma61Z&sVSOK$W5 zn==|V6Ng=TUe3MG{yJ9(i5!qUhvF zMUYjdm=TV3(7s(dj6U&`XR6y6{8!f6PhZXeAWMKVvQ74_sv=uRIYXDoqXVKKMJESV zN8t92_p>&?#QUZ|fumGkn3fv3=!9Q%Uf z5z?Tt{QM5d-fFK3p?Vd$Bh#f1EA>tkq3e44?wrD={y}9?e9)s~prQL5E2x^?D*gh! zTrNh`8QypF`_&rSF?6FH%RFB!P4EkQv_3_F6h*(Io!zwtpj0_K&`F8qxf6(h==ZrD ziSsT$Nfj*!JM9extW`wx3wS!>@`&=sGYLz~F6<$8UW3VvlODT3BE~=vA-+#U>^eL6 z-j^-#OcvTjdxefJeB1qJV0~W|P5N>MyhUn)VR(Brz0Y|p>4voD^t)o9I~-MyOzH7l zKnB!2Pj&(qAi`vSE`cxSHF(ZMfU*ZNGX|%WeFA;;*qT~_8%`cw5xmJJ9#N`C79Vs- z7YmX3LK(#IpAl@}JWVC&H*vE9X)p|FhnnK^tPr)x_tMW_-rOwqnG}~lduId_FBHcN zHL`J_KTx2IskbkONp9e1=3wmM{^)mX9J@o1=m5ZCyYG}bEhArHyhJ5wA+wmSN67b% z)-zAlP&J`+30$Y?C&0MXb2yIiQUj&T^=78r%hGwtuiMzNU{wa){QVTtd0UO&i z-pL<~L{Qc6Zl3mX2P8e-NmK4@KlDLRyYgypD6vm`LoD<&?sk^fKb#t3aXm{zCnA0| zPXoLT(FyZYO71jqmS$-4UtBLjcgdWyEx$c_9Hq96X3rgdntZ;Ies+P8*i^%K4MmD{ zWR*b{))H15>aq^_cZ@XX z{!YbpTcjICjZ}djRE;jjmA_RRnd(0i<|}z!Oc-Uwu7xZ`60ydz8itX3q#5*N3!C%2 zwGaJB8mU%fL^mQ}kg7z*f@V7UHpY~2^CSpA)3CLQYG~4U@Nh)`PG)mEiBXeI{DtDm zy$cMWrpIXFU!wE{2V)27@^Fy=7Ioqb>E#e$<95O>Gif^J;SFTIh-0J;h|{D9H|Ex= zrSdi_KO;uCanODQNsUs8eEBh)2=xrp1RwwPOb76O_c=wt0yPcuE z%F0cXhh^=jVgi}0%IU%tRMz!apC?y_il8+27yVOj#Z*keD4#O21(bAvJcJavVXDuk zr>?9{@03K3*E1nSbFw7q27scHB9nN*Lt^b9_sjj<2>!0J79Hj;cJD%d2eE^FI9#G! z*a!_ruA)3G0m;@^+ODOlTEGSgsayd=}-I!mOhLT)<_ir4pooOdC7!Y?TrZkUZno?3suQe^Ht#VpK@3&5wbxgUt9fK2JRpMe0hIBz z-f(fIm{IEM4#Tq|KB4Qm(VQZHPQjXG?)dh6{76eL7$D2gLBHP8znD^}n) z=lViu;+T+hGx&q?K-L7%t#dJh%xFnO_4<;dmkhv1?WZfi9PwUNp0sie_PR3q8_b0& zv9Rd_{DRv28Ru>M>9t6V?LK)LE=`F&`QsaP(D@pyvJJUE=uz$9p`BngHmjqBljLAD zTLQGyK;65Qj|fSSi=9Urfw{`z(Dw!notczhe{Mq3 z6!dfkU1@Bw)r~ob1M7hBOBh+iW*gca3DF@LKb!;8_SEz9(6Fl z2Oluwk$cgOlMZ^^Ki@!c*VWne%;Z)B7$2&Q)?_r&tO`5&h_>Q}I8NS05=+vMx|hn| zf&1%}QebL8`VC5E0EKIsaLht)=)dB^;Q;~Q%S0?yL}U6p>w)l`c~U=`aRIxM(5K7m zWo*~m-j&~%ckbQZ%e~OQf0!BP@8iN)`u5)3`stQcE=)LDsBWwR(VeGa{DLH;v8WO?WOD#&FIY zI-2RpP(Qi+%hTe6BI!-id-R|9=g~&#<*R6RS&PJro(inGoEmb!F+3UFuf15tE9r5~ z4u7$XziV6Z0Mbeon8%4fpZmH#h72Q&vNi~&3^L1d1dd^X^a;3ojrSw`Y+mInnT9_@ zT(=2Gd7${j7^*TL7yx7M?ITl}Y@eB@I-QXq_@U*v$=dbCd{EB!eHe>a??^)*0l*3L zRLlk*5nh|9ef)Gwv^;tR-Zn0%yX#Hwm-$c6f4k_lo|C!1)dEsgB z&d2qVzDN`FvhvPQO`Y!+^{x=PhHE}6A{${W~=rtJM)5@5mE+E zglYE%t&1V-YW-I*5-5UpaMhbD)qZNTX?49`!A^4vqf|etwNwB=6}s8UZ8g zgeT%VK+!3tWe2<0(iCmMAK!^=&-z3fJrr$0ElzIbWqybKkmPF2)t&pLO2^6)qeP~{ z8P4{d!$r~&&qwr{6iRD3cA z9a@7Z5%lx}eH-@sn_QHBvwU0QZBzVLvv6%&%NwiXmu!AdX)g?}!laiB4bGb%W`+R1 zN*xY-XS|LK<5{n*s%|R_Ny1DnZ%&i6+JDObqTMv;=-Q9Kycd@Sxty->PXSMzY3^N~ zn+51@T{UeDX-a~Z{QFntmuM6id7k7CneJUHnz7z;o5(J|i2v|%bOx;01H(enzNf8Wt zBVEQ9d;EfZ^%ILb^}7>bet{t)aQyHuy40Nl26bLu3O+>J-t<)NbXU%A@biDidHCva z`)KHo-zBHfQ&9U!9OP`r7eeRE+IVJ`#<_@w!ldBU zbK$lvKawSWmQ~|U`$%5x+v^#kHm&>RNlaQz`o2SVS5TDt4$xpGkUWx) zX7_%2ml-@C3Qp8J% z3of3DAhizf8v`&pvZEKir`-yu)n%}!vG00}`bgzsJsrFR>t%gqHRJ<_IK#xP*rP$0 zzXgafuOTLjleAwCr^5riUAdbz!b=$^{RRx(Cavd%2*7~;9V-T8jXB1wa7<$@FaBaBKIHc4DYfiKaV?S}1ssafr zbQ}!%D3ugWtB>le{$5zEj5NeFRqALRA8&Z^l>IOm`vrccm(p~oq&jw0RZiHV$9+FW zIu_o2K@aTqS_iO}UNi4f=aJ4p%C$~`w+Kc?S)1_7mgeOGHOwrfGE#g!7NlsiPOrn` zikNJFXh?AxzCP5ouCtrfjLj;Ix9_86KQt}FF@>qdS-Gid9WQ4`;yL~`gf$R{TjZa? zad*NH07^4?s_62F0KWP0&=}l1SaoBDP*^%y%B`nijsn)qfwgyVj^sSyD|%epR<{}} z1u2p<$A5-)2tNF~LMQ+7BX!Ypa}4`SOa z=pJbTJ=l>{cIuPgaABJVs))OndRK3HeRH>bI#K zUBVzTjDioova7&-5B%0Fu=9|T5KybsX?NAxn9GAqsjpNwtgi;w=l0Or)-XLyVzLg` z7SqlrE3p$oA7n<#>XDe@dXF)zo+ri6(7~Mty?*CO_fzg}ryi|fq}E{cwibCi%NT58 zOl`v-hODYWCQ>ZfI8*)_4(gMZ_vu#sy>`2|4a^JMDo)!AVAAgvq?t2oAtWD2v#I}r)j^Du0BT7<$o85&@JySs8 z;c+AQKq?=Bd3z_1uRu6E3Y$`90m@vVcT>vw5ton*nnTE0a!DB8NvxuvuPcRNQ!2Fu zw**9u6-%s(LIZ-|m7RZ6v314EeI{IHD5BR1bo~#iB1=P;a6{OlnY=mBOvu$zU+5US zDjcLcI$4BVbV?@is>%h}Rl3|;P9K8HAPq#eWPLGjFBFv%FwAX^;9 zol2}U z=y)6xX|3j4`P1{RgLktj;HFC$tsU#%q}a8YZy@zi?wDGl0l=s4l!C@>!`2IHvrJ%> zwA`W;uRsX07>g8FO?WG#IwDY-yhu2ko>82E9n&ml&m=Q;Nu+8zcO(>`sY;1qZz50; z@-&~-!PqrW^G9V}LTb*@s@q45%Wc9K6Bot*KVL6JSNs@qzwU;Z`Og-Yyl{(y*i-2C z5$BT|N&$c}qyp%BAikDU_|Aaz9&{%=7@Kys?MkMt9;xVJT~F8~Q*c~nm~n+O4)?se z0q%O&2>fs@-dM1rdrA0(_ONY9uvF2c6Sg^5UbvaAP|#OGV82Ue(b#|tr6fimP|;Vm z0s1JB4-vFKVepp04N?)M_AxCAQ{FF`$1_|l_ zGw6>!8MSd)CX)hI;FfZxF^1Qno@lDv(dUR z>eIMc9M}tzZtl0-dn6Ola4G;miZUr&Q}|kOz>IP7MeG8N2XSK_`8~tA{V3H!fczpF zu9?>WtoH@nb!bLz()O_v&6Ak^V=l;EIkTV@I&%ic>EsYUJlFo)<_q-h1eZVAGxT*> zXTa@0duGN4LI(vgsM_FQ&WP|pdy<&WnH>eMf3WGR^X`9{ekn|3pNmV2@kAgK&vDi7 z&FQpK-wbnM*wpZC2_$H*0qmJ!9u1%7CgV;o-ZJJ}QaVrGS6RkvY2upFw_NG84Anj#^N2rP zd|)e%8xipBJ!-ALm@UMeH4>9({IxrG=0gY4lk?5$H_O676AIf&F^rxJa#;)e5z#IH zzF;U*K_h^BK#8Vc#MRw{eXOHedS+zAGHrU$P|O^osAsI;X>Hq)aKq(d8z7^&6~4zL7%Noj@)=y3$-TlowQ^mi#~_R(st3RQJ@b z`AGVN6T#PWXI>vIrgqpW!J{Zim6Z|iGueuP3)1SDm*OTNpT2Lz^~nZOq~6&Jn+m-a zow&_+AS)skq7qn#(Bjgtfee)`LE!7wU58FOaA-eF{7OF>q&OD&r1J)Lqz}*TCI`&8 zproTUo6=E~>F`2p+h&3doH^n6?u&k+8(wnI9{<A*3jz7-iRs@Rwrp9Mex~5HkqlQjzY%^ zS_xOo#jUnPO_QR3ol~R_Gp@MB_U~LZ3~znh488-3PW*zD(JKyk>DoU_lm9q0EF47* zO_crIIvy7`FZ(;5!M9&IsojQNtl6~aQ1a(TzRbZUZj~;|w*{odzRP1P(s9^euQN77$2A zG;3V|wMAvE>A~ik4&ET^bX^$2(VI8*Qw;@uyCpr)xT4_@WK1PY#3FlR?N3JY65}zVG zmK735eGuHWU6#vPsQs`z+`Wq9={x~xu|#^gT{CWbB0gN_hkd5ggOXQ!U_UR@3aeej z-;KQ#xmzCt>Klskj|-1E&K@HYR?E-=c17;a(USPh;zLnh_41luz$JIP54L<%3dV&v zs{~3~)ziH`?r8h_&PHDBno{Wn={tC&Fd3fpv^Lg#o*l``-2wP$Z!^UF`S-VY1`Z+*nCO_fQT>%qyR|A-zJ^T8~sl0Vfr9yW-x zzFwx70AFi!@3C|4Ut;e9A10q`NJ`kGOA7tudJGj@O`J0dC_clKyGwt#34^`=FS5Ql zzLMbEGq!C`Y+DoC)+CwOc5W~+Cbn(c&cse8wrwYS=l9<3zR&I-7hPR_s*b)@-F;4# zDLN_-QfXxXe)=Co`NpUF^6=FU&|zi3zVuOPRl1a8=jmjNADvAe-a#J!R-YJyWIPZv zD7u`2R*OeoB)%OuS;CRaRL<0%C$KoR1(oeiX&JXHAwHv}sxl;zLCPC*s#d;(Ms(5i z{>=bG2nGL-zMM;zXvd0zD%PWMIQx>bm%+<*@h<+#{t=8YL;$A}PcIB766WbeA04{t zkheu#z+WGgFw@$p#_Iigr!z*(zWG@rE&q*E9NXwVfi=OP@==E;V;r^{CHV8H@pDG{ zxk6mHqci3DhLRJ|6Xw~qZ(8HO0R>c?97LDeG%;W zM|EzksPhKnlb5qNXba>Pc2R{nhU3~}P3oD#=yC>KL>mL(vzvRsq8Quxze^<+Cb`B7$FjWS&lqAI)cENfn#6*!b)w>gNW?D^L=<1wY+uaBTu$J(sJaG&j%mI`pYt zC>Qlb9_0P==7PkRnX3c z5>St9Uq;OX$f9+Ejdh;s4BM5a~&e{!P|HreI=xXflBqz_Ww4}=c z_pTrS%_b&AbBlQ=;Au^FC%}Zzy(jw>p5n#!cb3UbI`5-T1@}tG z=rmb(n>2Df9*M!1?}DeyVO>O2#g;$xWxcI6O82<}lE*(m+pe_*Uq+VvBeH>Qj|P~x%J@K{+s_%oHb=reBU;VC=RB0)o+U1J%< z8pDfcyjE{G8LB!mcWmui2Pbx7(}kBNKs-7u^C(*pMmaeYS2$RfY1 zq%IszUQp`$>kktmAp}Qe1>Tx9iqSj6DHRjkJShQo2zK_mdaJkUs8l2(sd+#57L`%O zo@Bt535nL{COp&$UyI7_1(??pGuHn!KXXz*K8{6(MroXg$ep7*wf|(BojHkqpcT&UokmkbXDENR5?&| z<}3@DN$E+}>!+0iw^smAp~uEeI8(cy&Mqn3y5xv0Vo#Lcz`@vfQmkHqFNHK0>_HU}k&0L&}$tqq_W`w@oT@~1jCytw`Yd)<{fOa%+sEW^{Q7FGlrNy80 zZBM)Z>ZvawJ&Ml<;0R?2=1jzX?^^9vyCuGP@o}=0qWFtJ96{_el{hY%&yRw8ChTGd zv&oY{^m*g+dUtX~)h&d{^$pKNMFClC2`NBkB7o;O;Ol+QzT}G7k{KEBmO}Uj+${wx zh3}1$6Ng6}PsRn`iCvVM&AvhbEyISoB~Dz`fHx)ljdBLGC`IR;(h{&?3@P4&5wRUX zKVOo-Bnq40-5zhq>!dZRPZRigWN0*exjA4)h@L@pc1M$|Od6c)!0nKDKF1;{JfcMw zOdc@M5&xTq#4?H{Ni=5l1BX8tJf5=tGZi%OwlUuX2`2qJCmb|{yb^}@AJBFBmDW-R z;TfA*(h-7K_P6{-3K4)xYq`XZe_@-)@gAyVNFk(-7yq+=kV@wb9Q3!U`Q23T_+)}f z7D<+8Qzt=<-^MrNeY4z$*Uy-pn%rc5MK0?n%%maDPo&V*fx#a-!I1g!$fLCMu}MFu z*|A_`gELjNNUA9mNAUdp-G0zB;lU3!fy&g>3hQN58I!|=jBx|dGl#((vnC^wNZ=jy znZ->4S{d6CF|oqVWYiEKwZqQJxT7I=z3h`nonn_pa{s~se~uD4u%z&r*LB2WIk}I3 z|KZ8)FkM0G(_W^IBYcfp=9GDL`WhksV~qmkIrE7aj(kl2wy zoWsEn$|L1g0)Q1Uq*(|`!RW7XF|a%kC`Ivt!RO3$+2>J787c#H;0h;ut;MlXknvhY z6^ukW5qh$vl(8X#i$Ur!^`%g-bF`eDpzkuX}KfO3-q-ix%6wsE!ZYlp#%7`ES9$>7EI z4z;2o`*lEC{|OH~&>P4FuW&0+OoYtuTDtTo(I}kM$pc`sKhC3Ofply-jCpKayL`j& zWX-%DM^=q(A3mk)2(ZE=0`~qR0bLFxDSZFk!dl@~5DZN%e+%ZHBLB`q$tFt!OadDH zhw@9|QKHF|^kyMR@YcIf+AKUm zFU&qR#UrloZ!tLTHYNo=3qvFh?2R306dgea!TxHNO zYkJ38sE9HPcqZUZ!>##nAnX7f967Dvp+HEI>QXQeL?}vJpt_BD&5O=JER?t_w2?sY z=-sb@T?qbY9-{`E`5_?HK#-=n(>0C<&qORKud|I?DXHuQ>0n04tT&4VlJ3fA5d!Z2 z@5m&e7753%k^#vdYJ3}G0Mr)(URV)mUoe!I13MrVO9P)4^eBL36FfreNbuY~N~$4; zT$8>)N=teaF0qmcPZB0ACnW@EJ7VUWhI*Ji5Q}5(A@m?B(3so_F=+0AbEz@bDDZ3} z1^gigl0*pjdle&4;8B4g29{KY|4u|}FIz@LbM?Nzd9PRv4pORb?SkpLDAsn`5D3jU zOBiThe3dab0pJ>ejT5NuT`U|@ab17&W{3hDB#6@=(&@Up{^nsGi9b;1T^vF%4EsPQ znenUYX~6-6^!^UwnEvLe(KMFyZVuOlPaU;z}(90H@ChK?W6ah*`;ew|ZcTA}t7n*&5 zUuG;n3Ov(@2y@Z_WI7Z2mo+`g5_mtREoe5+Z?8ls&}k0=9qmMsZ{S$M9!fyPhp|`z z1-GBy>O^5%?W2 zN3#mX?+oc%QVMoGf%#ri_ZM{4I_W?UnLp?eYRJK38@G{*FPb8#h+5a2QOR0Yy(4s~5M%(83MeA>_x%Phd+rB(3?d{%n88jyZr} zgrYz@2F4wsD2<-pzK_UHN|2z@DT&x)vi23Hgm8uqqdFOor0{hHF!M7>| z7<~T<9a0odkUpUGXNr`?*OTpmnhSzlW7vXbzJNe116hCo1k$a7ao?eG7nXu;BjAaS zMaY3<-lV6Yi9qz?vQyH!kptUfp#a(>HmA1s_|QIxEZl$Uyr|XJlLf`P`3uJO_i7g# zR6*98fwXE!9jYzn|BVJ=-)oYns1sfS1969gFJu65_$NG&R!yy2|2(&d4H#iI1lLBq zNJs!YyWY6M^$+R7e;2_+RsRNBOn7{KVkAhWvvky=7B?|1uc-)>Ba0S06F0~NbG(kX zzbOc`iiQ(-FGBehW(O*WISd*)u!C4P8OB^dCJKHg0BPjGj0MVV`{0vQm~nBxjAD`j zI{=oKl%&T!nz>5I(E-X0Uz;p4&S4hNntHn$1(gY@z&H;?GYMhsSXloCf8)mQB(_o! z1y~?v4%zwj@%a8`oyV29K=gcF#!JbVhQkB6rSE`b217If!PM@1X1zGp5M2giqf^@2iZqUC~^ALG^lFX9)S z9?Y-%S$q9D%L0FmKyDE<+@F>u>_Bk@?}3GgqG!o|jeyAYZ+zO%s*i{7K*j<hxCS8W0p=_utD0({ z9$26m8o-J;X8(K=U`#Ep9UI=u_Qxa%GVPBy1PUarEmWom!O*K@u6C5a1H%VeKcz4b zW_uf8dVw%*Zvpa)t{!AsDa{oK0h2%!0rs(!-ZBK-1B;Dc4XB{Q{luho82-pMv40KB zv;_ktr^`Ky~jf5>W>jAmZjHgf7t!9xFn1`cLAaLPa?90Zb*)*<)@LV?h14?({| zN5=~55u&JuAPJVeqnbawd!_(oDh`!^OD~;P1?!Nkr>wDg+6~%T0@Oh*j;X0Q;E>Eb z8{3Ueci)z&=rU47+)?Lz=EdT0;Fp({U?<<9W{J>J7Q5Lh>JKPxKZhs=URdV@r9WGK zf**$^=uCyquC9@1_X4@sWinI9Zq?OQpZ6#CAAt8qt{&ht6-KYa`MTg`X*YD^cbjXtxf(wN4$=FLyIE-RLr*>BW7*&p-| zZtev3R*#xC8;-X&x_eC5jr!ti6f>DG0UtZvd8Fy(v{6*5^7ES9NuI14nY(`spp|T^ z|1kJAHr_efd8fiFp8Z_}JRT)AH@enbbr%v{p7_3X;oiBIS)XLopK8wM5Pm9z2F8k? zX6Bq$J5$-7hJW;Gcx9fAu?aA=KLrrfu?S5k@lPQdU_4l=zIf=%5?oo_IxfaDx8%#P zOy9;bnl~nPJ|-_zrzx=25OSH)>##4ovgqFN>YCQL>a;8{m>;|uTMrg3u2_6-QuoMi z91+sBsI~wEtJ%biCU0F$VSJz@Z@%NcmI=TT)d+`R+`=OW+q$5tep|QfzeCWpRBd67 zzA{othef2ze3JxCs0l9bd~~mPQ|T6UR`JAAtp^$XEu@~J2SX(cAkx?NInVOmH4=D4 zf*m95a;9z?57q29viuaKh348|ad~nHjC4mBARO@3OP`x78K8T?K6rsjlsq~2Za=C- zcyj-CaduIGWIfmmySqX``xcjvNLR=KD61rLy4#wf^HJl*K-#k=?-&{>kJW&fU}U~; zl|Y97RW?H-ut$~)n1ji=S*o{lATLI-vU|fPzwjovhP`WfcJ5n8(dWhHeq&9-(hni) z%u#l^%Lj9GW%&qzb~&D$6j8aWJSRx78IL9U^PV9{#7VU>)a1ZI8ggK+B$@jiPx`y3uISjxaDR=y!OVk`7Bngf-2&+ge2DNvFhU zdLh%I&w68=__CUiG6hS82RfQ^0!t+cc
        ?|FY55vmk!Rv6vuXU*}%f}ya1Tg%_| zE?AvyUtWZH&j#@t`MFh0&k@RFo=0!^SMM@Skk4J2O_fZdg>}hQCBWX2C`W3$6MK?R z&&W>s;>hc#EHed^*R_ufO5LkZxo+lnxlT3@iXMN2KP=T$cLr1%yE6NFS+x|rfT>|9 zM}F6R*51*Avh}3Q7k>OrPHMV6s&fkUU0N;j7=1Rp7s!3JoC)`zeoE?2ds(yzgOq4~vACvgOauoCMvhQ( z?s(#OM(!kirXSF!6`$QREn1VA19nG7oC$IcyuTWKk{@fw=au9x*(ls6beNKS zUzV4-3g}sR{7HH1mMEjg-bh}Zpb~pfc>ZUcA2q3pO$LUNs>mWFGx5A6x5A6{jYdzK zf-%W;&{YMlJ~NTf)3UzQ=Hj35C`~oxG7{}dZ}@yO66S*Ybr+L2=P3`eJU-c{5SV67QHiH**qZ5aV%_06&~N-)JL`0V!{p`KTNKXa#6qp~9Gc9M z8O;q2l5&EfD811h7UV|2>lX?4i`(_huBrF8Oj7-;3F8gMb zHiQ^5`?~hIlB?_MH232~Et~odqKH(!iLjmmfs+B<9D%z{9w>s8t0@(~oQYL{yWEJE ztc3I5QI1XuQ=7OGAAw36o&;}$xpytQlabn%pKi;0+^Az@XuJA4KJ^M4!)ec@uZpfU z^8N)FStLNKZ=42NeK9_|`DQOPfo-^t7Nv6xm9!f>#+40&X8evErQoTU#vuW5lyZ2* zk7#bUNsIlIcIaqBvDvt^Kav0)&0Q63Nj(UB#rXB~o4JG(%JDIsqw`05Z=oo9v$kU} zO41yH58IIXPID#({neF7TWZ;AhTqFYjs|EoQ1YI1ynA)MwGTsp$@+Qpsa_%C5=?TvNuhQf?Nb9CMkU~5~7_O$JYlHW|@fOSDXnvSIm9x@N8-@ z#`djnTo{nQh6hP8se}NVvB*hsy9uxYWr|wESrheLkXv_;(g?(KSZ4ucbr^!W*@`#A zg$G^wf?B%YK8lFuY*}rO<$_u17l4a*SFHu<9}p@MW=*#^FO1pU50>D}>y7D=t42Da zH;q!27TEmG?a6#D`WeR-$IIJunD;y^u>4m!!)LFopyjbss@($6RjPcy;0I`tWb>82 zTLf;73}*8xku!O1{IuF6ugR3hmbEwE0G0RP^^S7{Si8@;qO<1&?+U5PzhrzL#*LhHFV6Ez1|IYoPC^8~K0M8`0mOGw%`Xf05ib;i~-;O7fuZETBLZxh=e#}Sz6 z>={@ksu^+dw%6hZGV1m$QF~jp^kj^0q_7(vm~8GO{IzEn4@Q1tv0f%xjpp|I#Q^jC z)Mn-(*JFe)=yl^g_L+L@*mYEpA++LYC{{(XumdUAOX94`A)-2+h~UEXA@3KI}2gxm2cSenf6c_N95) zyl5V-lYB2?d!OhiS+GA5YoRK5XM8nrr+O{;+v3QO6RCKy&lZcA8`7Y!BB1&;Pg8q# z`ts}}4Jb2*AI9LikL5|sY6I_4whK*{1=>x#0y_YOf4}WK#(-=^XH19uCcrRBcdSKa zq*{QE&~$BZ1l;b}r_z#0|`Tr)|Hn*-1fSnprV zLILmPo4p5jO1eUuCxvwY`&`JMdYZ zF~3OWsAdxxqdH2k`JJigV?{*lwlQzA&80cLZXGSqG)X0$a%U;}e>yqYkxbE4k^CI% z^-RBY=o9gvuJ3uGV=A~f<2{;;SlBX|qM&{M;8Ni7 zr$!mW5F0x38p>XJFmgHJJvpY0w0N{GyBwZw#yB0G_$wDhOtcKeocJMF@0=?^R#N`R zYS3AUm3U>y{BvG>RU%eb^H zqt=969X>U0u(ob?|P4PZtDQKvs^+ai(JPs zn65-gH1EK`23ehtvgs!tj?9Z3N*?&DSKuC*nvzvfMeZu~;^yJ3FWg^c7Z^}{AB(TY zZ$kW^cRABv&u;_IcPDRO&DH$x{GT5o9Vt+X099Kg#~?k&-arqv0I#YmG9hWGzrmen)4HRe-m{EYc3-Q+MERmdN3ED{93AWd;Bl`#~Sn4 zFqMzR4xD4}kec?#__DtV@cA7d7?m1&@%BWGvgj|RD!WOcyCwnbi(=||=+bgZZr(Jw ze#WUcX;6jBb0&7gFBf;({BiCOH?_vTcy!j4KpCoZ&-H`DynL?09J+nEzv_vNK+Fu*VtEWN^zN-dZAR>tyaPm2k(j3 zgue&EwB*dXI1~+VmCez#3;9mYe#8~kS+5~B1ZfiL*U@>ChD^P!-y=ce-y#EjD>%HY zAuskG?L7Rb`+mOIaR(x~YF@FR>mD$>-*S8Q7lG1C9c9-Pf%;FJL2MD};P*a5)u?n; za;(v_e&VL9`I$7Y!2U+`ghRc|m-|o|{3FQcTE^aGr|)!Z?!0}ZQytvqtMd&O#jJ=i zI@%4r2$Wk78dl(==8yyAHL&yE;42r5UDn+6J*AT+IO7~C>{wLHh=|U=6uGsbe`MZC zXCJ0GVo~AAukD^@*gZq-T9uyv*w|q`(s$$lA(St-?IF_iZV0dVeJL1L5ip4*_*@Z~ zpK)hofScFVK<}EBx|J4wsWFM6Kqu=qL za1sinVpkIb?Hq&Zn?VKi{0fT#gcoPL>H7xaDu#O}LF@~_gyKOhi(~Z*x$_K|>*9aeLwI(8D$df3C@IqnN~geA zD9og0TXdcsN{VlL!n3eK+Su5Q*U;3QsJ(vyVj!9yU_21;_J74l#>xUB*OPEcElQ7U z=?A%(vG8`MshzF4&kIPLEr&{@;Wx!ZdP)6oStV`vplnxLxApPC?WkmXN|xv`+GwIy zn;k{gI2oBGMEtE`z@1=>@v&QNP5l2i$rpF*w{}K19=PInZ_ptOsY8@73QWf6#7*Zk zdjP-E&)>91Hzx&66kO_wHRV!yPdg)uq4uA*pVLCVPl~ra#J@woJX0VDfF89KO8jL_ zCz>0QpSk*~0A;2dDalto^-JLU(v<+qA%ZiXVx#v0mve0e1irg*0m4VMbM|Wa zycSf>%GBHh*|}XYr$SWR`vkN@5!#ZI$npgLLRP)2yV&iQJ%>9O_ogFp4bm^x<);}3 zVSSd`4My^pK-J8V50#hIbuaJNR?r9?Br?Z896zI^-qEp%ihNM+92&hD@p)k-%M(&0p7Cj3+Se5*=A_a`Evm^|FZX3uiT%-XrAo$-SDHl~}yhQi#x^k0xBBrAGF-wRtt!9_pTk~`>r;Ff+ zpcsIm-k3GFnL3?PzcDI`hhG_2K$q0ARa}ZZ`sjOR&wEuR8%_aO`c23tc79VkXQ};4 zuUX!%aC`(I$=8^y-PpI;r0c+y(6P-Ssy0Bsymx3741$Yd4hpEe#@_>2?O0cpwpyU* zIF`4SeVL&_AOk3%GtjsPZ&krY@WA<_v~DdZlGG{u844mi`SWY*Vt%R+XgfA_E)POu z3LLcZ#(UBbQc41l(0BwbL`elLOc;R1LerB}H^A}qN|q9Xp5Ypb$JzVOT3U;2#K(*5 z21loTeiG22;bj@jj2Vg_Nn}Ulz_|0*EbK(V>C2c$AnH74AR`*=^Kkr&+0~Gbe&`ww zEiS%YNFSY%90`IxNak3m!6rh3=HV}#riI#_u9m3;Ow~;~LFH{fcaHu{mJ{FFf5iWN z5e3_dhX`I?6JT#~3Xz|}_}DEnN^SZ#@yn%KB%EP!aVKgxR#tNhr11uEaFz?DrW+Ka zkIP@^9x)NxH^{NfHdOUUR=FY3fQAgNdv<#pKP>29=rqT|(<#2Z{9;ZkHic@fJusFR zUNsjWC}{AAsP1EYB6t9Q(Zi9-_Skb+Xl3vgDi3Jb&#~TeSx*~ncU`(%r%y33J417$ zZ*U6#?J8V*qA9=T&iUd>#9au;(bQ&if9!NYEhx?UsG1L?!Q~DVo+deVR(JDqzm(wF zI6jP_8ReZk(aByC8}gD8CWtavQjV#bPY4HmDUD+r{7za{A&yy1=SlW`IUgI5l*-Qj z(P&P$RTkC3XaaA=Iu_cJQMX~Lru7@tQ|`d~+q@M@xTdaWW1d&e&03yw9*4X0DXq6F z=c(~|Ma&Pu&d!!Gv|;`f(O>#S38%!|^K&67(P6jEI7vZLGrF#T zU$ySPhA*Qa2Q&>whMCDauZD>X=3n0sP9`v-i$0xE4e^DP6`9J2_Zatyw|w79o@%Yi zv+tZ@Zx;f@i6)@%taiT7K90_BCe%~6_>OET9Ld=lJ%z7%8~0l~*=8Fi#5lS)2Ci4x z>IZHJrnzr&iwQxFzN*paO^x^6QwhFTLE~?~{Jv_nGz1c>EVPB`5$^rM6gf8;t zX7Yf@B4yAA<_$FkSN;R{mIQ2YKY0aS^{jA0`j?m#^Ec{lw-ZUNWJL4!lvwiw?ad=U zMCp!ET$8T+0RJLXC`750QB48yQw~dJFmA=z^ilkk9ezwJHO5KIVZ>7^bd?pri$8aq zvQ8_|r_FXT$JAtt{t#Db{crPD-B?u+`GsVzR<7bz6lSqwFGyl=z|#aYZ|cC}kXJ@) zDJ@k`D-U+6zy*63*zn(&YKws>_J;;N=jB$`g68@1HwGQr${Y#g`cNBQL2L_*bJzDy zdx%kzbiC`cKbB7P+5vw>g95ooVm4>ChdASmn@sj=ZlGdIZlLPZd%!3=j~FR^E&ZS+#?RJc7dN&~k|f63bODBkzxO|>-PK>zgUAXX zU+R8)2jy?vFaG6=UvThd^)ZvmzmjUdl3o}hq^arIBlHeM+69h{CD(5kcm4aDS|fBj z-m=Nu*1C_#yO|LIJanmnt=vxsr+gjGB0H|o5M0wFdz`2(18Xl?m;;M*^|A#yd~B08 z_v&7DPKPgQ6(9@ zjZmI4&pee+8Cwqty~&pARrdEa-u^SvNjTC@NCw^m_6zNdN}kULRGMQ&Yp;hNuv#OW zthULxP%3EgPTL6Htjb4`w_b-0M$QVfOK_k*!Ji)7lA-I@>mo;PBREqMO~*+qZ`OBP zy?y_11l*{z-r30(o`7X%8Q~ZB)2|~W(@s^rp0+EfVeRhs-?eL)Ij-&LJ*b17&6}WH z`S+NRXLagQZE&t}Z)625GdfWGw2W3P9MAK-SQSYebYwGu4|~MC7EvP{araIM#0Vrf-*)!_f=}$nk;t3dgQF7!6ZMU8QW#+j< z=N$duD9?NWfA}|*l|$o3>TrZ61po`)%h9)d*tTT3IOQwRKg&g?pCDNx1pf0w7Gonw z)ni~zFj$+{#_T8u3&$OQ^uvwFqwYJqysz8MI-X*TEce97Eh&gQBRhlT3x})sK?OM+ zN|`ml9NGcuI0h^sVESHIFFLUJO?k(XqCd@URDkif8*U}FyJ-Z10_zc6iC&sWm4(>I z24yyPJOJ@8WkuEf4y|iJ(3ej!nQw^~cn;Lh)ztC~U18S>2YU08;w&ouVc77SRAdkV zQxcN-SMc)-4IJ~YXpP7@LWrFh2yR|^+rHm5?qC2uOtlJe&>tv2?gx6gma3W60v)bG z)wLIU*tb@?T-vZ@ZV~htJ!_aa$&e_vk|1eU!np6P99Uv+RAxJZA?_>+3E+C@ke2FE zosUy_hhjNAUh10RMF z@gfT+S+G(-N>#V~NA1;Z!JuzS3Y~f(fB}zaL8j%di7#nJ$^`Khe+ok{Ih`_W8Bx%S z-(kb9I8V$1u~E0pQ4!kiqHdC>J*$geQ)!*{;4+IzQ)xa1YE1#W$&TT=V10`UJi$8$ zS)^K20Izc%XR@?$ozb)IuZ27({4>o?oP;xjf|G|@J8hwZ=Ifx+y*sTj3Fuwp35k}_lOwrdiBe^SefzXR&QLa(?TiH17+!X0nn zu+^Ao0p$+ZbZ*zE`lIll9f=N^dX31QbLzwqGoG1@ZQjz*vOPw@-YGZVTW)$Ry-;kDLRB%#cvAr#nu7jYUg@iltC{+NJoKf$2#JT*( zFzJDrEX@NPfR0eQBFzZ@d?t2oZqXpklK?UctJ16b3KZ+te59N74mcX~6y+M3_h`KW zwq&;Mx)yjira3M(aiGdLm_Lxf6I@Iq=>Tnn%sIQ~+@yN`Z^6^MW9v@o2*jiQ`DV zi_G@9D#K^M@AFr2Df^Z?W9F5dvL%P*9dt9k5{}22)O65$nczEG#*85cpnVnW#qQ7DGSx_( zczmMU$@nOlX=Y(qrw!siTYG)P(&X>dXk(uiKS3Nbgg{SOg3Jv35GxooopudUrPqE` z1{aqIdZ0^x0f1vLp#5l+@~ z^4gst?7TIeiTk!Q4a>1!?bN!8op9=|jGfy+=`zn1@H<`+FDbgIk0u2B>ifF984rB` zMiSMRPA1ZG1+^Imh=~Tc!z6`2L0~Y~gq1J`@bljuz*!Lx%Bl2JoP=mEP+@ezgFZ#n zQ@cHiWET2!$|bwreIx~0f#kk9%C>nfA`<){$D6#D3+sJA*` zV}%aFz=dwawCGx*q(0y_*_&vJNcj`-(u!JU{KzJw!syN32lc@n|FwZ9C27#mQ4F+P zK&qqd2tqJL7P^DaIugxW{Pn}$Q#wlma8uvBg}gYlw%K3e6#)-8{?Vo zczsOOLC{7rp!XE1CH{(SyogR*3?2ZS=80#kMrxkK880p}Y&PP0ADcrNjv6@KMO>cHv#h~4hh;>mj>n)kDnFT9 zQQaIsxqB*vIvuc*?n!8ZPqo&*R)5WkRM)OUbu>3@=(zT!Nk*5m}ufKU6PaI=cyule>VSV6#OM6)Wg5hI(RORFulUSNRf5x zykI%2gDacc6zRTH{`}s;r1*7nzg%+rk$Qoa6hR|sZ3~##bwwIY!FX+Ze_JyIE*Ui& z>Ge6jm17{SggNvTs2@o9>+>Ch5L3ys2C>&XaMIW$(ZNLxOmqH~;)OZT@y1Nv(+ljc zMN{i`a}+37WHUno)+JA6-p(uAAfFxxHqRbH#u^cHrleovx-bm3xyGxg z7*{O=18?IH0E||Mu>c4A%%h{9JS$1$k+ zK5%Ht42vwWvC*60K3_(1a=L*LUZ3|JTVL6Q@6WIIIa_q5hKWu&Cr4sJHTMY^0T1>y zCsb+^-ml?N9VzKkYmXBP)2T~2I_Yw)6)$fKbH5&=x{sV*-cNe60q@Ht#D3p0Ao7LE z8Xy3Yr-yU5zcA!5lG7}0!>AZ}OOO{Y%c(Uy>6|pl9pWxMp+l?$WkhWFXrsNVC~Dhf z+`4g3oA9PO)e4fQtxp6+!?}FCwcEN744ckEx~2CbDyA>4ZoSEcWqXnn{4!MKt&YZ~HPK@=2Y+tru_i?C4%t>_oZ@m~p?e_s%qnxDK@>K*E4EoNX<&X&vWjZ}LKBgwI z{pR1RF@3CNa&l+zvHtc}OeFAj*#WqMs+r!ub#A9np|h$BCJAja(Y|GZFODwF5D&MN zq6*b`z*+TH!KyXgFR&cKv(t;zSSl)psWK!VtB&J4Sm7i@SToYcopM=?a=OqF7f=E6 zkoU~{(K$r@dga45ytVR$yOAnRXNdiO#Z>w1)j`eXiT$qA zNmhpnTeYVlumz>WnP*^R+)ycOjc9(wR5Wx422mnub3qf~-xP#d;uQ@(W<7Rrouh)m zRI=-k+$@z=Yr07!=M@6hs_r>gYLq1C$1BeT&bt>LCY7mOK)o7qa?el-ySy~_9=M&x zEv3asV%D!ABWK)vw99CZ3FvnA@X1@~BxrM%@8!!Fei?pkl66hbfSo5jG>ziEs&;)f zp(jo0z?@d<;IAqfe4LlT!62OV|m>SaQPX8ibR)@$3`tH%Zd9cg#-5fQs&Vd!!Iz9)>sa~Sjsr& zWt$U8N~z{=PZg~@S)#$GSB=`PHzpy^pqGMQ^M1E7Ci=mN6$V7oi*E>P>O9Dgc3ut4 zKCoYaE22j(>3CV-!kQ5t)>>YG-2-AlrVZAhBPCL z{S>QX(uqpCG#7Jkjj5-pIkI$r7?S@v{I2|tguO}IwQmvRTzc%d>WvvZW|Vt52+{#( z#E5?Sc-1SL|2t8ShrG-?_TGRafTo(;nCiS`l|F||S1iNxMTdXZJms{X6k8UEb**9x$>3s{WtuQ(#m9&sTH z=Z7X~+&G0R)fAE)RjGI4y#lZ)k&GeJBWPsEXZjzLwSOS5`$YSUkKK4x<_)2DV*vBT z*^hR_m=RNmwKeg7%+*{kuaDhx&k)0})RRxhT(Z`F7*b7`0gG>rJ#$b06=U+-kX#Q! zbkK(DF~agYdb$XTY!@^>(MJ4|OU%&$_t_~!fLD}HHj0Da4k`(p?0q9kI?iXw2dfQ4(2H6ZVSVb5f`W^^=&n%Vq0rsCRLQye zv->+)j`D0OWaj4~$Mp79W`+rmhWXa|7V%rrm_t35zt-w31;@IS<{f-K;YeosntI+w4v764NHr}kP2J4IEHN(Qi-$1g7=mxU1`UitsSLY|TIu+&C)1CUqtlPs&vmSoB& zam@Q!Zkf)WdQ1I3r5>j92gxP%q=hQ#W-W(54tTX+eP03jj(s19ZDx|hs)u?^DNk4X zDsBYqZu-fSVg@Shc5ti7KX#qQT|JK#F8c}}6{sS5dcPagl|FGd$oj5UISIS*Hi;4RKw$WSy2J4`ssYPTa!BkEE7CKkayxx>-<@iAOx)-!0=1S}=@h;b@Efos7ysA=CUu3Y1C_j_A)L23lFweJWdNY&G zwP(O!%CMadFZ+#M$55FOI3}xw?%b)WtmRYtuZRO5qveDL5{wY zmC|_o=4nAqLRtj9o=A~cUUYe7BFu*jiNr6K86JR^CaNX4PkI_8#$IegstAsR$sz-R z(MIh+vgdEV8YEV`u(0W?NOU;3HM^hv)BjrdyWkJHO&z+BNw*eMmh$B%`-U~FdZ{vO z{62F)2DQSBF>;6gyXD`R?H@ryKg}mLpFs!@b)DI^*y}D*Y2M-lF1ukz z9Q_eZWsjQ^J#BN8bmvzqs(#@$Cr>s=sl7j0?4|r}(baN6=}T@z zu&Goxk%He?)V?uhJA=!4wbgnjO)M!KZ`nx?@Y~EZhwF4*Th((zZm(~eCO3G(QyJpi zhMa6JVw6`UQqp{tYPQ|OHV7tJ`qj* z59kpyoR!4ck1Dy?k8JYGvZy9`gzioEVv$b@S`LRi`mQd`4O%E)n{83)78aU0(q93( zMOjOPmeP#|W1Oj#6b$m(OEOJ0gYfBUvKxlTxq-=G&^mCPcM#veigJAdlXHJ>Q#3ZE z!nYJtqblbX_XcGAr3`wUX%8wYe#~yV>^-Jf_Jt&FbnKZLci-)k&>ONp@7%8mxfeRDZM zq?9PP+k1xS=1x`H@2Y^%q5N>vPr#M^1#B@Ax!bM`+e6FPt@!}aLoZOhNficwHgDWi zL7iArKvkwVa#lwE&Aj)fD@aVt`{gv8lJM#^lVWPM0EkBmo4NuV`wQ8A!Ct2U7o|mT zbU(XR{uf{099?JEJs8`KZL6`(#72nhXM(|hsIt-1~99j27k3KFqHCL052mN_oySd4m{gXZr~G3cnv3e zKs6syB3-dCJC^s&m~RpGjf?=lsaUcfLTx+K1yQXr{w)=Ea^1Bje}6Ylz~ z`jta%c;2#aD>sOV^^rj!5t2A85mM9x*}BDN{OdI9I=oPckqYfqH17FUAP)Q4QN|=b zlkRy9J9%4$^I9SaO-izOkZWhFQqtenVn0Br4;}(Z9|%*Lr0z~5 z8MzZ=5tNF$)=jz}U85RMs;W&BD|`(S+y{yR)un}vhEv|4(N@>A{7F0ECJ2o>cJ@0sxBe*TqL$l*@{P zlBrM?bJ@f1vHM_kSH__smfgIiITra8mmi$sKFO_7ZjNomlNiFklrp5 zneUsoP#ek>T~kK+Vj?ON7>BoCz0h8n_3?Deb)d61zTcFWZjqC&jceSRWj}DsWH&)a z7?zcFc@KneKa>)6?vlpTH)SDaEF)hHA-sb~&#R2>aP{3>mt2ahpK3E*n9Clo9J=v- z3a617-HRXRIj+6{%<(%+4~Zwgu?66sku;a_1*im>+H{}1LtAb6@av*eC>I~w5b}IR zk4*{g*WV$x38_J$p-TnxBC;v*#T=QOfIW7fmcM4X5SDaZt_>&6?&0X&L z4IHF%=`!A~TJ5K2)-zkCdY;uYQ7SnpBd$-{9?a!X79}JBQf=2VJ=0DRv8@`5b-b=L z0#C>{6M0|{QC2~jEJ$=j@xDUB+0i&S$OO1kp`vw&M%)JI!1?wvbjg?&`u29wp~}fj zqM<^zpmVhr_iFv8I~~x4ET#7S489p0i*^mW7%lJ8U99LS@2y9vHJri8qYSZ5N%LLy zJi@n-0ELi)BDa>Lg-0ZbK{qFzIOeJLZDs=oDrI#@dG=ev*nkmF>qrnxHOoJDDv?o< z&Df|r&H)W$;MsF~&I))HpTrhe261Hq{3O|9BE1|n2oBtN<~fPrMy7~)(uf;y!^Be> z;L&%BAb0d%VMJ@O5RNN^V;cOmOfjK`GghCR0NuDfHwC_##}!dGzX&^y?XzC^8uM`` z?%;C!Dw%hfgAmNHs1@aQdf5Y>p5o9lXf*|X;GG5e1Zf#fgdF=SkroPZ2Y??#O#OG< zN%B0Y8Se<25;ZtpCp#{HmX1pg+v1U4FC^>C85~+aF0`#CqcA;~>GY|;eDgle2aGhV z$7P8dxYa&3&}hhn&-F&X&GJ1|$U1*D$k{>n%GT+2yBOZQTjI313}3umIO;HKEBksq z>UFm1U9RaewvKKvGVykA@OM59oK7DDcpy*q{IOI+QgO*y#ttjy!~d~)NNd1&%nK7+T}5=x zRtkczss`NQL-risXuPGqxJR>>7=Up#@dmV_otjszIioqs{53r2on#U&xn=F02 zWJ}}r#bcYUqi0yL@rXIP!k@-@zQN2?>4qHoF}y^VR!1p0x9;D8*GFo`pQ%dlB@;tPV0z z@AcUVrJM&7j{Lz-g-B7*$EYljUSTrR9GK354=UcxRn$<+K&Z~(I|4fc+@6Avk-ONm zWORPzu#op{WqDfq2czr+!si>x%rrdiaSIh(i_1t%fa)XH%*LTO9qSHcOxgbvir^SX zCW3Ed`hs$hm;~e`s$?eFzbwi*0_s}O(G=tG$z-So5SQ7@03!Rswz!1=MR9iNJ439( zL>#(1pG)7{r7$Te?xFZ0y2kY)wh&wI&^bp^GY>&& zPhz;{@Eq0g$pd3b+>Y2?Nr6DN1Q-@X*MOL8y>?lj#p7$Nbh#(&UDhV=H=s06dTWIF zj(PrB?VBTYW4$z}X+`q6Kx%99ao{w?Wu!(*12}894Ocb6Fhut|^a@Y+0-8e|iBkf6&_Woi6D3e9VrUB*^Pc zhMA+wR&>&a>3ZlPtq9VAdlg=xf1hB)I126PG+!6herzD(McKO*o0VHiZ%>~}#iy+} zE0HSdIpdl|Cm(tvEpl;TL7G8e5FU_xrqCqkKqilo%U*Yg$ff3Klrtz4VLIB%`LFf& z(|6QE%13E^iY0Gephun6?@r|0(aUQX)bfsp0UF;9g$Ysl_xmD+iLiQ1qXv?t4&6O9waAO+-Z~&kWJa)m?F$vA>E?mN3$2D1Ran@@OudP!XJz6 zD7Agi?Fft=U8v+D)u4C$vG~M$i$Edj;X=S5KE131mk#dm{6zZaypgUg2=nw!5Eq2^ zszVd#PbW-=WxNnqz!$j-pSCp+!s_F3C6IE#SEnFj{u<@h!`dt+RmYU7Yg3tb>yE=G zwQPRURB{;k{^Xt=a(WaHe9SMs9jMd}$~(Q%0q%(~5jhHlKE2Wf$nj{HFouks5Fiw! zaGmH}C@MRZ{NKIAd>SkUhq>e~=xj#Zh zKel;%`N6tX@gWpytF8V3o@zVH`$xx*q~AIdjhZ@Z>$2?00IRZbtVu}i?xkZMPz8#9E9+&{X;s%1*AyNp1glvR_2lu96X}xy4=u)> zam7`jrK~97ml11BySgX8uAbKVSJx+HP>D#Tqd1u;Q{|@nb~TK;I;WR%z%s2ae+M#Rp?;MoX{BQ{hU&z3{VgIRXQ!^G zmLGd!S)l@#4W<*QvqeCKfu+OyNSsjE=QL#??)?HXbWLc8a0Pmlk2@&*W771?E`J4p zwBLIPuiu+vc3~>%I+rL^5%^xr_3Xf#F~5D~8vIpH<9yXCPAdMA_2N`ZWuA5BbQ663 zqWrHozK{lTNQK=4>E7MsZyp9CXE_ir{OEOzM_fF z86&FVE*cng8j8mqH}JGU@QwTmF~>^J@z7x%9VLM888(?MfN&OHrI!%QD^u2sl3qhikgt zfJ0(bKCm&Wces00KecPL_-~!ErRy_52U;S;02crK8&L3N#QqKg#}>>~k95Y0FthE* zJktC3XwGZV9t>RVgwLHFfQwlpC7MgQjo(-2Oz^3JNCj+}AvSeWDr=g7H%(FS9^69} z_X(T+>r%qOR%P%B4-j%GMu)-7!%YUNNOgw{*Sg2hN~AQ>rd8BwakEJ?VUA<#N=7k6 z4zzx4fX+gCrNSy73j1NLyu0v!r^a2jec7+`$d};f1;1wjb|sLQ`VXL+JTO~vDj zi_mUyu{g(%`!_-ZTyE|roO(;B(3|%b3|&u0aVv;sx-RpeBS_7~YhLHyz_q8WEH^~6 z%Pm@7qI=nak-`{}$d_3GK93{z&Vz0_wR zA@}6id1(PuOYQFZx6qm{UpxpxEcIT<3x#Lpu=v=wlokBTgQz{NI_b!&!R{r)a+uw3KakL~ueSz~C~xF+8b{>|rjN&_QKszATq#c{$Xg zE$X`t421(6PNJPkYq*M>QmLtuF?W&D>EA{76!P!7i6~A1X-NOL;^g0b$zg@PfAH%7 zf#SfvoGxp2Tx+5wUO2Js#xxyDl}?zO^#u07xCx z>@2VArl;C*k9q zd^;5qo5-f|{`(d#V1Gsbzyp0f4Ul%M;~Y}Qy3f*Vj$d@kV%s*f?T=<_T#<>&#Cc;Q z7uh>mxUS6;FGcNpD{3?SGyDPvvyOiNMXBNMKq6){T^_!Y`v7J1&tgLzzu>!@vG=RR zt!$(q6rERozbG4&{cX6BP*60hIk)PQ!jlf=}I={3~B!{cS%v`C6@g>?W zi;IaEYuj{LDgtNoiNVn_Xd;Z)b3m!+@<|M?j3Xzph(lXdR`H&e`lTS~XQR+8BhbzX zSV}dZYffXlF*5P4y!+}l%tJ(GJN&hGPg~(%l6oUXqqQ{;-x}q_y&C4kC2;Ix%QT1u zh~&g^ExmwU{j)l-vDL8h=X~kKfTp>J>YJyo4PbNnGU7r!7P`)N4!wS5NmuwcLTmU1 zXxLA_)7le;KbRJeRaO$&`hd2rO!NSqNc`ntaEeTkR4;D!-|2SizmkrBaV(?ZDJzw7+Jj! zBYH#I@sh~18wPZ!EA)Jz?eHq33!mvaCasp#ZV9hE;x&H2bUgk3-Il;abvD@9&2e8; zpU+V7P|3L~l{|}FL|4e(oW4XYS`sk{{|E9>yF2fh&Loq2@;U>3EqA#_&7N&|pTCe>BPk9<4j`bINNhNT>MiaM2!C5Gt~7SjehZ@jF~fitz-5-7OMb0A3Tb~{5z z7F29|QYWDH2%-_P67)o9xDUb-CY8Xo0XAebiZ$sNu6nOt&i@)gtt+tZyIIbw4Uv-( z`z@RwTl0$!rR$ePM9_9EQRa*QDEqLY=4NLnhmqfxn6JItTF8jC4TwiRqnd>?G{q~7 zu4GiR9JAnq({#DxZb$(&QK`N%a@l1NSU(w9_cO7S>^-ytA8NzB2JVy}U2EEE#mZNk zp77dJ;*=cA@OJi;IVT|X1*CuulY;IU)IY0f|5>0-k^!FjmD~ns4z{#okU@R<)Zo~Z zuJ>QC=Ipf13f7H>?|M`0gZRw{AX$hRliUG5cx=DdcT0n=OrDMfAgG&tYqtE!QEyCuhSyEY0X-ji@(s%-7gS=UzD|T5<)xWj~V~Nbp_(Hf=+Cr%3&>^oDU;( zb9=2xh+BRKnen8 zTSu;KhEpN2uMIIb%euEz;mJln<6v1b4qz$o%v?9mZuB%o$|@AL?c zCSmt>^%JM6nyJj>uU;79UOf7wCNIK_g>pQq&>gYJ*~V4v4F`!sX3#>lfz zFS1S=k(>k(=?tl}W0~3ok<;wCa0A%o{$S>vK4mf+hN|EP$1vOi8=4MX6si(=agB4R z4fvEFbWJW1G%&||k&lnAF2Xzn-TIwqqgkMj%B`y79F8!}%}QMam#WnW0J~0MO^sRA zX_?bu15Nf1tOSU*xd#E5^OMtxR|1{<;O2&0JC935aSmE&zNgUbZ`LG9>jjmiyi?w| z4pjI}6$^6|%3+#KSEr%3xpvGCFlD5ppe2N`I;)gO!oN?E8gijpZ=j6y#8vp2KAjo? z)kS4|2ei21;J!+!UNIfN09TP3qZrAgXvf&>YRQ$#BnK?ppB_re*ta9DJ_bF!bH#MG z$@jrOlKbc5@|d>&96oJ-uD|sp(EWM#dAYj!!FHDOahdbwTNp77rC3oBTxjl!$NgZ) z02L8Z-pK&fWi4bLQXYL+6Tuy~O%_{N&yD*vx1F$;d3W-(V})L)D09){_}e|C-gW`_ z@%G2`eB7s}H0eoe=I>Ybc+VQl^TLw*L9wgIp+DDQM1QVF1l`gGbg6jYk%IxhSv2)z zQr?WxVDx}u)cu)Y+`Oo~f*wu54mH<9G5y4rzn&Z<61xOq0L#&jJ7gq7mZz+<`f~ur zYuA^iO&26KS(TEub7|cur-L(@Hk0`qY2_T<3hq*0$ju3tS|u8+2Dm(^+7Cq;chB(V zVWmxfcSem^_dQ}%7q-Q_RBlA}#nP9of{k?n@dDpyKnsO@Vj=AAqvfY*o}6?64P*TN z3|3?@cV{{pi>4MFP7~zN=b3v2P4H+V4JzOD2lCbDevkHq$K$xd{mcDt0L%R`^eg>9 z-pk7f?A9L}Om7*FbwrGfc71Hx$cmT6&3d}jxX|4J*EIJeps4K>rh4N^uAg;qN3k`Glkd6S!pG$EFL?cFLTrtlYD<7Z89S2V9 zHXT$ok$l@87|-`p-IN$f2)9m%B+yQ_O0(QioiukdSg(jrxKU{E6 z3cZ}7v_!HaGp7I>ziM$C@$JGVgD_w!O@ zYbiqPLFTNU?8$U6gYcvJX?lk0P^NMW)0PW`{8+kb5nb#!n4qWDiY4}pXn$S z=Hxu?uk#*WijSZ-$x1mDJLzZ@=0E=bzb%Y)k~H3__}3t)6PN+tw|=$Mz~#zo?njut z&(E)byn0lUaFqW@M*ud??e1~i0T{mRJn&`flfa(j{xIRG%uP7jSnWH;oxDqYnuW+S zW;?!*JFWGS$aI#323WIA%WO%0iBW`3xZh&pop@J%Lu$|lA$mtcf2=nkMEB`3ARXd< zFkt~UbFeY0@P3ozZ)`uPVHEOp<%5$UBaI~oyNCccH4cYr=4&L)dlmMw3t=oP?tMgK}2{Lw^UlJC>S_Z zFM<@&^SN`CaD6!%AMr%{)KMi(Og&hMlYvK;*TWtoeP#^rgz)ZYq(k?w;ek6QS>pIH zsk=Eq=UYzhp=o*+z^1IuCs_y)cAa~7%ttrF0+;kdUrkX{CVcgwHUGvzmC07=%k(Q?!Kwa;Y#Iez z&Q^|3kTg7VbBeynS$5sor+H{CjfLiWMU2$_z*I8R0D?4Yq-VQB&x%=cb(mWrx_L5cv9gj7jsKb4cu@MC1m}AcLbaCj2l8`@2XcOdyrrVjft{h5&^UR%eY*YQp( zVxsLV_Wa1d*5-{G_I(LaPLuZEoMUe4j=*9C#`%U>brzOjiDI0B7_81&Z$OthU>K}V zm#7dRb-r`0kPc)yGDl3tYQFVi;t(-QgtuzS#FYWJvuh1OkG|V(~y?GAr2)M*HP@=Yl`%nvFu%}+rl9=4chlGPl)kgm6r(^BN&pV2M z-Ytd7Q;}-UJu`R!5Qpj#nsU9q9ZnTqopHo^)gE7>#CoJ^Xj#m;;Iw)8u`-FcCKdZG zAS^KVI<9U@--&$l5N{h}lC<@@b=5>#k%MqfT1liN^P4?|>16wT5eFXU{5N{XT|6D# zj9_Q$?d>@2aT_6#oxBr&k#jK3-OzMeaxmf&ZVYp=Nuq=yAhXqpuZX5;js*BtzVfpz z?U+NP@YYXt_W>HXVs;~lh~$rS&2OT2JmDFHz3Hc*8+UZ^p@!DDW?sDzto-?i{q3P8 z+FRyc*UWj$B^=zJORQa$T_+sY+vZ*}qxVaT1l-fV(+@2#f>qU3V#j5f_Gd?d=S{E- zDl9I*#b)oZ0Z1hy*JcRRb?b=D$hOEY`8UG3Ax-zPaKQEC#}Nl+p}~Ovs0{z;@9uh3 z0k#J3)#vV|@(JRHT>4m5JtvF{lGinolCs<@!|!%AYDlxjx}G>1diq&i36a4R9f4B5 zl8;MHIi|Lro=0Be+;l#DbAvtv{u3iQl^6m)TmiHemPqIflZ^;_8vS2BC=j?J#%k;; ze-_o4g&k?k&7XOM^HThNHQr0ve{p$zwIY?8@D_CQjX_;oo(;J<kD4t zMFSvyOm3wn6U{CWoNh^yEgGJa9B53O+!&q*Q^CRGw~)ZuTc2*NhZk0XPuURM*m)A8 zR-&(s*bqE3>$rOg%OC?m+x`Xpp8}58_l&5LAsO9SRVH#5r+Cvdm1H_`PAYrw&0B>( z{CeU0H#GI@Ukh35OaU4@OrbjGB z?}}M)PiPYy^c$z4LofHS$0X+S9h!FST1*s*b1+OrOK>-Q&<*|CygRg1VeP4p2XIDV zP$Vs;QiDk)qdHwe{<|-8bXAWo=~T?Hux(d%92vE0);o<}q%wzRkZd$2xf?3*F5pJ6V)+ zW%qqws;~Nj0OM8!(FgOBCG(*^x~k^k0wC#%VbZ z*UFxdVInJMqss!|VQ>)(A5G8+8Mp4&o@@Q)|nVH{UR2q`HfouY52)+#~}g-3XPz zD9Pz!cGkiLzKD9*IZ!5spsmQq#7KQh90>G6hhsa#cp>Zn47rC+WcuqFC85dl)6**G z)JpyudwBZhY#chG+d7O6Bh!S{k|}tdRY>rGXx-xw4g;AM0b}YF%7H!(oUP~( zX&bkpHR$HiXMaZ#>R#dB?t6THkr1yvYe&NK3A4v95&Mc+DuE;-K7>Os}1EmyXW4$_IWFb`gRyDKyQZ3NrRBA>&y z57MDRd@VbAcaWsI50YFP*M0z3Hy_B-zTyG;Ru}Bhd&a-mVe0Z=0Fyn+k{Zy3CvWX# z67kMEj)BIS)30xVOgqNa6j%xxc@avafldGzVEN3rIXXzL4=K(#BH(o) zKRNV&c?&<E3T& z-Ny~#k5|PhL)epTEWVfua&=Ik`KFgAW+Cs#B)GRp7cNj&UbuLM+E4WH4tuS?M&7m9 z32P~qk}T`A(NW#M=9LuLf8OsBeLmlxPb-Yur`dmM=)B#p-`*kiY{6XFD?hwAbk9Z_ zjN&v@C*|q=fD<$XV3mPQF)BmiZ*fmsDEoyS6@4kD?~r1*$mEb{>d*^JG&lNL@ho1x zARQRZeI2C=Is{C^z;xLT_IG;EAX^hN=Bns^xEW$ZG;!bABlS?C-|?cM! z=+(&1H&S z9P^k%`8AnEHS#4#z#%5eVQzAfk5Ytem z>Qqm8+qaJZCoAP*?dgn{#YVQu(@D;EtlN!9mUZJcGD z+yvrX`1|ACzd!roc4B(8-*C8X!07(G(2OV#Zxy?Q`qcezpb79mYm zNix4J?gvYw{OAGI%lw4bGL>Xv$L z>dk*nW2Z}SKQFTqvo`>Z&1z%)uS>7%FSuCzcxecB8UbS+TK5VTpB1^U%RYmg2cLBY zxeDU9#TFj{mplfzu3PK%%gfa+7`ZqQ+#ZiV!Luxt>;DOTlE(2wiQF=8M+E~4V9S4~ zhI}!W(FX=QAu_WrbuFu_yB!kTW=bbQFf;8wE3>?42EEE}sVLG)h3_;d{*}$P1}JA4KOL`&7lBzyPAim%`89rbn1N|kvPvaE<4V4 zy1hBQqgil{k;9?rM%tSj5~ca}=XhIaa??6Lv5q4=G*5mOEWv~v23d?jfQW3bjnbS! z_&af6%^^0ZoXWR0LQ*s~ImmK+vV6;CMttymi^thj6A1LlI_yCI!nX81Bvc&W0h#?T z!a}oqGsGh>7TO{d&EGAw>scW{PL3~^RN9mqI>!k$*3F%?&-UENsb0nA0gm>+V$Q917b`KGQJD`A0I zcvw9aAy!;o76S`$RpeYb!+|&p-TB3EJHzoq$~fdYC5V%WJpjFv|8%7&JS$AHYyQ=KBtEv>gd+l&DFMvJ7a$1? zuZ4gl2ZM4-zyU=hi5TO=GnkE<5gq=sHegX- z3_yyETGL1afL~BiU)({9NMyOki50OL2ET1UMu#$|NFO*Dvgwe65s3C$G<#hAQ!gSy z3<+AI0b5BGDxe*MO&(A+N{I(-;$$j>jQ|D_=~(jsq=3X}q!-wMoArba7!lF? zS|F`vQ22d-T#M=uQU%Q;@lu_m&1XIC+a1&qvY2}N1qKZ>>FK})6gXrg!ADGF5z+70 z%FBY7<5UZe=id(giokIj2j7x zMONRgnBH~9c*%D|zJqvaXI2asNHHd(y{X~ZF z#;VCZQ3T@-Yn(7WJU;Lrcd;puCN~g&KU~)(!w9Z*+y~ua-3)3Yk*}$(r*WoJeMnoAR9?eEh8M1r@jhMV}&8tzRox(l2(Rd#Ss$PO%TerlcfO?HKsU`!~i6(;DG=ZAJpfFghDz4MBt9b zEO8tWNF-2EFiBu0^7CIl-U%t7%y2*_I=~vT0%R!}LWEWk;M^g=OyOUF_F@%?;9B7H z&US7quycKVCP0*QC`84G6gge*-n6+?E!XzP{#rZBopDh^d5aaYio`PumBVQJ_Kl&m@>$nzs?Cj2NPp* z3Yn7_Zb%a6vr2!&;~{duQ%9tLnv!{>V1SvDVFN|^z@c20g$2|FlN2V-1O9|wj2S49 zn-EY`TVOo!uzX^=pe|5xfI4!rFT&=DtYoa=Fg!sc zGBF_{zaie51P4dfa{3xt2Bf}(ct$(l8Z@9mB$8hCC%K(iZ3ZwhY>?1092n5R+S0*f z3+LNG20(++m~U7q>`6dm?W$9a5F?>@aOvcrfQ+UN#=vkyL5UIpfQT-cC5{b2ywh81 zj}X_xkb5S^_jO{UaKOb9vu;S6A-5s`M}JDrz=@sL0AMwq0rIapPyzMnJqfL-!se|q zjI1yVA!PBvvJg4Dj2M6EGOJ+?6urO#X-cf1?^?f-G&ewU#Kp#csW%Aexp*!W0c*j| z0$DjkKn#G*fZ>Uv4#fboHK7D=f?*lhp-GUngUFJe%Ya0h!C70z0m6bskkN3l7ArkTl1 ztyP50S3Ot+LKMJ3;aa{IRDnXEPc7}Wvl^x{3`6FPmK!zWV);O6x*>qIiQl1S^_k-o z(W7y(Jk#^yeF370zz>8JG<|I%z0+#}5sxMXke~#9CQ0r5+F^ZP7z7S-Cd$%4Q<&;Y z*~K0-RbNAXm)d8BGcZ3!tcdBJ@%_8o(gfbTq4d)0ax)GHMlsE5pQGDwfha$N;6SSX zcJ`l@N7Qs_n<;G2Lh7(35vr#2B9Mm*WUA4hGF`Uj1NYp8sbzLr)W3aY>i=B7+)n~} z08bZJ-JkH4FT02L%gE{eS;x=2+_}5(CyE#iURnX?H*&3fVITI!Jg=1aekSi}246OJ zIUj2qUw`*3n9=Cv~`-|?fiKk0bX+M{~#szmKaR@3Dsj!jnbnV zv7dz{;M?}rIsoN#Gfoi2mIHupIr#+ej&+<;Z-3Tab|;F>H_pPV(0gvsaQh%=PjfWq zGg#XmtU5@I%QNYcS-Z9@``G#H>8^VeAIyi+C;gVFZnkXVM#o~+i z2s|;i5zN%>7-u)@JOy90rkR^P$%5N_;pdK+{LB-sf`wd6?TKehZNf}NyEF#Ize?=S ztHm62i*bQ9mb|d5810SulUsx7lYi5%703O3L*0lX=xZz9fx1_yF?mzD?B6n~7{nY?9m^0S zl!%8L?N?q2-71OBiB&&5@3(nZ!sHf_aC8cr?cOZ0kU!XtfHCHkZsi2kV%%!-E=9M0 z_>mX;KcMLUx9qIKdcVrK z$okQicQl#-wBzr+0(6S)$N4Rb@;hnD>2>B9#LK`2Fu@HCXqBg|ot2+JBt~iM$8ZoZ6-Ib-pi4Zj-;TWtGg7aO3{y__nYULPi1}!?g~su^0A;J0348l(c+~we0tIXoaT6KD zBu{UlC(d_4^^hUxe_%Ex__!?o@wOrw@`p+;w!>@sIZxR=&ioPS^Z~i=`-Q=u(~hf8xwLa1DpFCc(KY&djbz--HgyfP zvWK=ct{Lx^xbFT#a!h^D->1xxAN13z-$Z?3{rPny> z-H|j!Un(h3^Rx_KDlgEQG;}{IHo%*p@8|SqyTFZCK<0DZvm?{#VJQ|DodDK5$Mc({ zPq(boUD;^8XT~9sxs94#B(X1}Bb>;Zf*vpW_^+w*J|$CkH%3b`_pf7tN8&u&EyCqK zYU51}NVkgtE-{MEmh#E$p9{zpY~d^ z5>vT$c3U})ZbM_=9{$jdz)AhcUcX#1nm?p^*Htg|4xeEkifQ^deFD6G5dF!==9iP5 zZ{?IzdK+>_V)Of69>R*-J(bWkQJH1lnRlop{vmg7&&BJUN8 z`nMXTW}!D8=?*`=@(jfY_Aj)K$3*|=yCtP+i7xbwRZDp#=d2wsV4J1jwSKrEn;GTY z+g!ww-yz*Q8CGy|+kmnyBEE<1_kCBEV9$i?YW1r5NMD%V&tqd1M9+I8ZcqwoYP
    1A(jsT5@Ew#QxJZl09ty0^R~g}2&fN#44>@`B`)7?&9B@^{VgCNkt(yRLGj zrUg6itJ)$rzyxwVfRE0%^x&5-_QA8+U~Aba7RhkP!8>^#r8XI27Y<2(nO^LXFWTP9 z^ApThif7Mr`MmWPhvAZ)z*K{*PO+8*orn`ZiQ{Gy3%V4!-Px(&l|wD> zre{qt_`T3sv+p=+WJz zo6U@j*^Hc}T^v13$C(B56_*FAog5d;6GnfQ!?92LzM>I&egZ#C4_c%U6%npP#XN`92}P=^edq;O95w(IC981 zXt=4z1mlX0h=~T5?govVVk9w}?l3560z!J$2$kN`rVtOE2d1eV>!qBw9)5t+hi2kN zzWGT09cfQHcjgZ`I@4n7+LxW(Y|%wV*~Mm}pQmwzrA=g2k-v{uF+04s1s=W0NL+I& z>8DGhyA5u|PH}=?g@^Ww+ZfAV<};D9pZAL*Ta5%wx%56GOKxEUNQZ7_7se>FRtPzM z*KfVESa9>x%hY7=B9O0n+}#3n=fZ{{-OYKN-gEHZQM02_Vnl7y3E$nhB}9kE1!iJ& zV|DdYVGYyG8`=`a-jHw~o#vdhd>BgU6-?x?Nk?rd%c3R6-kj%5#?!sGKL5a1!S%;Wwhlhvk6G|ae@`CGZc$;B zfd?ELk4K(yG}0Co`C8xGfjDn#sui@xZC_tgCvR)H5_jvI0&i=xq<3p({E6~wvgk6< zoQ*c=dcXYFoB^%b6uOl6t9KsQrsH+qMwWa4N7IKvCfG$xaXVv8{uDh^Pax|(`&T2< z%3xWTn>4F1JM`ehWoZCrDbc3wk=$WbBvl$W+ApW7y$^l%&G(wiBN zdiA0J%Z5(TT;qCzm37ry>X>kjnww}`DlH;W+la4Fb8Hk7ljXwWGA_s%Np||yk%2u3 zS7>|=`qKrW7OXAM-Jk0_)q|1_%{I?AyucYL?w6_OXIoKnCtvT z!=_bBQ9HEvg--|Qjhg$#>}FVcYEF==(iHsZWWI)8TntC!H0@vKV6xnr+kNKO=%8sT|9B-fa*J5554(HEXys|FM(t%!b#a+IV$h~%eqZpj8Y5VW%3eubOJ}~Q zr0c7!%5}y0PAt^ux)Q9t0ayy@-~2oln>tOc+*ayZYqVXfz72_;=pL+uzt5Cg2Zs%f z+daIUsV$?%aBr^=ocCBQx&mB!dSYL@C0ZEVJI}nTFV2^h#@nj4nu3Z^CBTzMo5psf z_55s|CLlPSJeTz=S$UeVbhp0ASgedokMr}0PnpqrC!0u+IO!E-1CF%sNcHZ|m2T@96!>l8$9lIFKJ4PhrSqF7fMz09bbnpOLN(_0PtSKM%jFswrnPLwZbo}h z>>)sbZE||8wX1gPnH#s|4N#I%YTPQuyuMsC-=R^de*G8+h^2do+9kD6_G%q3o#%c= zg+v`3PKJjeYXVeHCv45ze##rAiKXa!COQZPRyoyn%eojl$4uK+h29CrhFuzKS&@J< zuttif?+2%}WUuKM<>+2IDI1U4GsICft^o3OzgRLFS0nWQo+H=AIPV`fluR>Nr)#F& z8=}T4bEfkuQ;^X(WTaxaYSwMJ9db}BvMSni(@)DiNnEn;`(+4++CAMwbx~{B!&Z1Z zll9dAFvlr)_%;U35Y$pzy?cBqtf|}{?mN`!KyI5D_i^M7wH9${JpX_=EP1GJnQZt;HceFB zAEU{o<^rq*H%8ZLxGzH0R-aDSJ`ni2*P9p5vwFue=A^gi+VK^+KTlOsa}~c<2PF+G z!kbCIRWS>GtxF8(k*zW;$oO#l!zW;VQ|0NWJ6#+Hj3zP3sOovDqkTIlkL}5^0zhlp;q+LonXyp0! z{?gU|2}X@7a*q@{J~B`mguYeMaY5P#7}-{U-VcdW_jZpaCWgS+o2?*DPFy3lh^{q^ zz8}dG#P{QRcga8YW$TwY4HBd+ZUWTOwi}j(@XSq5e{y$vs)`VP-i_}DgC7>W#zFfK zR;s=JjK)ACM|`^hQ4-4vH@dz90Z&xfDZmQ-yyhiO;xDRHWZZNXbC-=Sqn0I(tg*mW z7Nt?de!gn$#(w_LGhW8omA%A#b5hS3EP&32$gsTRx+x5~@$2UfLxl`%F#{~XVyUc$ zj1T;x&VDpYO;Y-HqUmKxhFcusEKn395Xu-$03}G2jW(MB>!!S-xz@aky<$1whc}_= zNw_oYP81zsp)w^ix1b=(`4M3lT<>Y;=v3^KSGtxBCRDYWc^W!zL(L}2y~~Ct-<;vL zqkh6XkCe0MH>TQt`u9IPd|y{@*PrjlSNU1^`gwZv zWLme@F((xs6o_`MtRxjI;4V2f)#G>3R_~6SNaucX-Yp95a$Y4beN}sT`1AgE)s&CM zgNh^10My;7Fe%+;BJ2gLPvH{*65A#CrQsB;Bs+%+Eg|fL~2!#Udp7>GS_cCG@DC!u_ zQh4PBezvIc6TZ*QioU9BW3@}bQ$r8kelXP0lF4QfHsay!U?UV;4LE14-k5G3Ix+>w$iFOJ&Hb!dUT4{Jms|aDiF{wCvp{a@SNtsd{oAQP> zS(-5%*& zbApweR(2vZKSG(#Z)AE{Jkq&sy-D<2P?=RRz~WsE(^B9yj z&%v78L&=|-BGman+dn9ZOS7G4>VqOEbJy%s z2N#kJ7cK${!;%?zxwc~%{F?UcA7+(!N?W5)8Dzrx4YK<$hz8r{F>R}GEAu%BI@IZA z-hHA>pwHgc{r&+N;$nF*!=SC2qcD=n2Np%AP!T-|kbh>h(We33$ZJfLh3}X7E`$!k zgg!HF1AIc`WTQ z*5c$zEa8wXJ(laE?0sdRiuuxQ5D5W6F1wvTI|?H*sb|?3;p84`G$Ut~vKeYw>Yq?)po+*TL;`MH zmO>mpzm2@OsJ7WR#pLlW9-nztG8o$jMy0Nmw|i*Uem~Xp7fidZGD&ad%?NH8F%J7D)O@cf?7x0eJmX_-KQ0yg%&)LxYxF5%1+FjV~$m_}Dc@Aw2-WYxx0 zS68a|7eV~1k}7hlrDlj>Mzb)@{Q2UtS= zWKrJDa=UzZApj@K$Gr`ISx36>5vm{6xw*l;7%9%YE?u0k`PyF(G-gw3qNz9ESNvU> z%cO$U&}#dnX-HOkhlgK&!}glLMrVoa!nK3)D`9`a-gz~K!5YrrI~B|kP2%Kb zzN*2Dgy5EnrkJ0GUv65L>(4Xh*1?iyiRSeE<0I`*Ow3bskw#b|FBd0VfcwCWy2~p6 z3<=EFJVQ?XqCT#uIX9Bq(^}-_Yqpmghp{Uh*R#epJ~Z7QmhPT|4xOtk?<^Y{nu%N5 zYmNmk-9t-HZ0+nrzkomqKo|bEb@KG-lbWa$cgQPW?r6070qr$)hor4u!y?nkYSZh6 zsjAh!<|{Mu3hY14=D*_-UWrKYy6AZjT3PJT4T~@|^Kbu?8%9fCcf0J1tA6rurx+PHF? zS5BfJ=dpaVQ#03VY14p zf68HhPpGuKQym@58adMTs=L|=WYjd>DXE)hYOUcd9LKktE}b8nL;K8~V8Wcs!QJVh zBs@GE$bm*umS!K?2b8kqyG(~dnap)M*doKMImgE=TqjL)eTCUJtAv|L5r!S`!z{M8 z(kb)LT_L~|{0cMB!cmEy%wY|A^#$fE{9EiByYxR5GXyzeZnIy!1_^xQM<=9yGJX{w z+P7h%visgK{~KD#@W9Y!UH19d-ls2|lKfj^5S=`m+^nMxVKrb%o1t5%%xEA`L0a@o z+Ys?ooP!Ygh403pf_h0#uWKzXFJw7>lZ_(0iTt3QN(tna*ZLA|c1+9~)^J&q*?l%X zZbo^lPka(|X7lZj+OnlbVnxv#tr|laG~D@iZNSuxfx6ZDv;8F!s}SXut2rM~ZRpfc zn?98^Kc@dRsvVFX6U{alz$CKqaTwsM`+2`=l4Er>pdt%D4b#mbx<0aoe|={;V83V5 z_YMrGhdMDbxabxI+z!TNO3ZwClhZ%gt14$?%`||XE zgPOQkNimw-bw#Co&*Z3OQylMi*_E#2+fV~kBEKMq8S{uck^?$>K>-0WMM|t^=ExdDo#?Y#UuY1(j2=rn!pe4>{ zw#O=-m8F<7eQ?ZwoD4`GY8r*HL(u2ku2LsB8Jrqq*r~0}75Ek_@=ahf2yR*vH;O>f zRDo#khJ8b>_zKVhe0VG+_YL!OZEK<7PkZq7++A)3@%&TH6w9NP1s3mOS=If>QbsT6OFWi&)gqL zM$QBm>Ka^)`n}BskNXrZboc`t;cW=1ZbMpYvDc!p=Wa&66*F~wPS1=XY$H41H^^yB&@?*IHKHSo#I8LFCK!F@81?EDu5i!+OJXNDZ1id7w%?KoMNCk3NaZ z{b^a;Gd1v?{No}`X_z{cR9(NhfKr=aq5ba2$_d?T=AJS;ahW=L$&-w#-Ze3onJ{;- z(8>EP=5?mp_C})tDaORXD#4cP>xMSXo8TEEQEBmSo{&40Ft#v@wz+2$7ya+-k%ed? z%(&Dl0)Dd^_ZJPW*SOBX06VXb|7>hfR^M4FY2(!)8Oeczsd3cRQ*fZ$H}P7LdvEF= zYjA~;>qV&?LVJ9&qtaj76tDv;liiMW_FhvW*Pc!;=JkZ0o~9k{cg}Y^2#zm6J7Btu z^7nhMYK9U@Qy3Ft`Q>L`tuiED>&U4;-DV0pAYKRGOtNDm*u^ zsms*-e%$O*{KRSM$Ktv04W4S2vbfFImDU=_W8%nel~lg$qeV&mgEU4T{3l#Kc)|d6 zWVbA@hve64z07wW9wo(><~9(B|4Fy4OzY+T!8%|j&E0aC$ivrlIeEM7+td8_0Nqx} zSMSS{9rEP8f*B{Mce=pXC>*)mAd|7P?~CR5o$ zLvez%c(_Ob_p-nG@Vdw!gab&MtqQJ`YtD}kUwgX92bq#a#!?PXT?o%_=2T}v^!{{ zBjqE`cvgv9ZIb%ldp{f#SNU96Ev`c7lw$n5JM$@aO&Jc6gYT0vD zNnT>3D^${swD!kgQr|le>8rT2psqadsv8?bI&w>T{PE{)K!C^utz^YP1dEqO>GJca z$8E&p%~DW%E@z#W*y$XO(7s*bo&$(gexc1Vru@0#=z)Y-k?v`}X8;fqs~%I7E%LrH zcJ2E?pUinp(!XdeCG>m&7J4~QSOvLdP;moyaZkhOJ)g$5-Z#n1;zz%mL1bnkM_rOE zD_mz;!}Fka#T0Xn(@0FkE3a`56tZi|Zj`1-n2}fsli3s=7Fk>tIa=qcHqO|rzvm3zy``j1!aeH`~v{#tSZHDD^+|&Hu zFHN3xu~P`2Mp`$Hq?#J>G)}0LxtV!+BQ8@gP?c*gFfOe612JLBY2-Ckq~oQ7-ea;a zXy14nHfnvDsGb`=r_LRzbB@R}qPhYg#1xmSk>3Y*KhG-_SvfX_?so;!xBS#!lvn+@ zJj%&+^Ccp5RGfS&!a3$SU_OUzavi%7cpI zQm&2ia%vHjDPo75v#R$nSMRspq*47$h=E!83Huw(x-~u7FqL{9s@&1dZ~=i$z|PFh z&Z^!Ed}1>64*Pi!o+6Bl!NvAOo^*pQ&?NL5gWv15TQ5PFNVq2ud!K?e*yB^1*nfDn z+`D7&S?is$@ytO-=t-!-14DSBq*_9bgishau8$s``Z)Ecr!bbxr3H`aV19b{%-95n z*l-?lII_L&vv)m*_`yM>P-pDzdI7HDeT+K}gO9yICEr28jiK( zmcVtEBLQkixj7?ao=a*J$Ti8M=<=T=WlswYVCk~T3A{0EL>2MhA^u)j&5TLE3}A{$ zr~a*d=VS0yAUD=YLnthrk3x@xuc>LQcO5qr()dDhDrxUn`VXe)^rhk85V2ehXm69s z{l9~lq-*K!T&xx&V7uFqS8Bs)TV_lCe}|xbCI7h#kWb2Tf<1l*NgIbvZ{fWolJpc^ zgo?9y0tkolalx1H^axD?6xcD;|sUzwF_s(~I==KB^@jr^=ya;9`#A8aNumOThJ?B8xa#epDA zM}Ttvr|VDIAV?b#Ajki<{7=LC`IprdTlqeWsU9?`_oneH$bXZ=A@jbJ{cjV%|9DpC zWkSYGOs`Mof8F}BAOkjmlr?nv^i_u$Sa*`qTg0Agqe5XVPn8p ze0~b;cs?TaePTOaO>nVcsen19FHlyVP$&87(gZgODnEFB`nE-qL};1+!Xl3CRklpb z1@P5P#4LGsg>daW(%P+o8_FZLkj!VAm2YbzYoX8kl%2vw zXqCuO%gwm#h|n}x>c(^C-YkgESAah(KNwej zN0^%<77qyV){I|-_8oP770o4uFCR}E$ys>3R6&5av1({Op`r)Yjm zA63ty-XHDb_Z^&HV|~#|Ibr73r3%&GKJkWb{0>RhjVBCqfuymmxZ+h=9`>=5oyvUsAP~76C8`Q2= zdSbm~tpfx4uq>HMgUofoM3sJX2jmle;c!DdQK8L;=gwacPBWs953BB#|VhQm{9wT{qd z?TAIgC5t#}2S7%4xJLPH2qnD*iB_P&C>#{*J7aSWgsf?Lcy8!rqo=@&&y;~UD^A$8 zuF;&2M%;KCeia#^SS=v=Yrets4cb1O?T^o|x=!HbsPXT^ed!nK{v5VJY3D6YD=gwB z7GJ1_R&AtHDO@HZHs>SZk(h|US)w|c400E3lB?Yb-jK#W~`=&6C6S@gMu`V+a$vyr`+&tbehBK*9*G`O|ut z!;e#HvBj1mx&5@(gh^9YRTa;{OLBtK5{jq55^D_KjFE&?VWu8r8wH;TI6Fl`JJr>e z^bP9I(tz6u?d#{|GdmgkMo9_8=${E28bXPbjNK{~bm$$XX&Bp3AkH$<+Nmnn%`oKx zijq-Q{?!ll4+H~&OuE5XH0YHMVuS#)38H-Hw}5E_NjhF0l!!V&xG}sNBaM*@!-_WL z(BsF()%T2*uu|bgx6F-L=|Nt%)vxthV~(;k;eec+YeocJ&GOvR7iGuS^rXOgq-%v(<2ybvuefZtsB~sg1iQXq}uByZt z-X0dUo3X&xJ&sYuqeNauQO3g++p#3~YC}_6CCPNoplmQ#!{_Q#H@@xZqJV29pw3;0 zOa?CC8M}T%f&7YyOY;@hK8Qtgg7mo|Ra&kjtE?=G&jyXB2wQrWWhtLS+PflmzO65$ z%PRL68tT}~Gz4rZe@InD^6_U}C2iTYqoHb{$uuk_*-^=G^laKyNol|H&Sc-1A+=J7 zvW3&O99lMHI2nu`fyQ5{-U{50Zp_LDJP zZ{VbFiRzr4$M1IYF!)Q~C_uBcWn7#3tSzo&1t-CCK%Yi}ei90;NTGP~F#?{B?TAEb zl}&s;t1gC;}C zs2yrdKNG>>*?CXCw9_OOK|o_NZ0F!nv9tdx{J3m%H270w{{$IIqpPuPPNMA<-cnL- zGt^nNHqY8y$T?iXNuc2iqLrn_x*_W|2WGx=apX-2MoV0@Ky6E&?pN&}$*nI3 za1{z>o0U#HcEi8rc@`%jb3@Cx)>l2A@Q5XW~_{dh#AtxVTuaL zM8QobT|p+F&?KgB%zVKVP^REYzc<|UoWfo#SjP#Q`r!9=A%R#eQDlHQm>QLUmi|Ll z-EA`Du>Pe>9UrBC==?Na7@gk}64O6mr%(Cxs=1j}0UE0}Dl~VkOF#OAuS1S+?dNvQ zKXqg@H=rPK%6y17`Qd6Og||!p;n8-0at_Z}!<$XZndmxlLWUqtc*e04 z05vB~i9Lblr6-4IgMJ7KJFW-%P}r3u_@PHKr? z)xj3GXtDJDx67evQ+mOw{M-?gf>&-rS-#f)%t8+}C!x`ke>$s2ry|)dWEKhoGW`Ep zNx$N+wPDe?#$+6NVeD)iY5~?DpIK@*{X+gBwe2VEP@9+voNG8n-;zQQ)hy$(sNcHW z4BLSL9&aoEp#vjo*hF6Llmbq>AS$Cgk@9d>13h2Z*7;hx zS9Gma`v{JIH)^a2CkyW~aX%6ovP&pc^w1x=;2FyOJw`=|wJ{6H4cwkny{QJmWKiGR;Kr|p>+=ot#zr^`;0zPOuGHe1UeJ-H=t zJ~Vwt``Bp=A**1)id6r6hUY|PDI)6R`zAo_^5WhCeSSj}wfzKMVy^vCTk^9!_4n23 z^FcbRk0kv7=tQjL*MlE{p>haXCeJ6+Rh(K*w!-&^ah?uhFjI`hPt)wztC^&)_v7Oo zPfzwQ*H^0m-8QMOz^ivpg$CJ?6MQuS>%Gl~X$(sr>kA+Fot3*-QBsO`Ja!|)H3~pg z@))JzQ@orveuk>M1k{j9f~VB!hU)QsD_#zjcn z>Y0fS@l3h5t%7^x(LH;7=>4EJj%Ve*gg9DEY?gR@Osu0B6r=FQ z^0T^d=O;8Rw#N2UQ@N^{ree*xUB^`T-rpUsQ1?qdAf**H%m$q*Dj#SNe?18@NN$Y_ z0d!VF^&YTd_{CKJ8}{w5^B!vpO{O|H^%tNMJz2IN5vQiOrCEG`t;_m0&5#8zjtZ~K zYROC#@U=MrC>HV)QdHappP#OVGklbIai^3o==d6c&N&*V)U*D zILm7|a>|Fj{tlD~4wOajoX5L=)#84VZ||9NTli4G^m_TU-68aRZbW6qDzoy`$=h;g z%*G=^>s#gE67+jZx?>f2pD;Sj_^E$ffv2&r39n2Pf=$wst%eyhM=7h-k`2R5X#Fuc zjk$3ZNRVb((XwrUxHhXU6Q3kn&|iQIoSeX1y*+&6?JEsIkf2oJz3U}gSawwoIVnzq zZ#-b=J|`PF_Ff|GCL~>MYXjvnf|G>Phil%M&@kF6X#IxqR=3Cb3i$=B=PM=$qgJft zEx&@TRb9bG(egyJjUghpGL|Z)!eoha*nQBkH>{VC(V;n;=j-cGg#)UEAktz0Y~}07 zh;C5jeLwvd10>kOgOlpp;uKk(v|BPOxjh{2IfN2??BFxuZAb`@3I_W{tT96HViP>? zA)u}eMKU!AGVS(kL-dco_HgnByNexGn}(czM2vBrssx0aR;o{4S^O_IZNoKzl_8Pj z=bwq(9A75ShEQ6Ly+cxfF7FT@JH3U^o!I;#qS~#PR#howjKRJXU7d}V_ty2CSMdtl zS7#MOeJ;4zDO92ZMn_NSPS+%uQ5u+ULXLI`uw+zC_u}^? zDSU|NzAZ)~;Y4#c3=sWUnTY65#TYXNM({2iJjf3_BZAYMT*L&bIzWQI#nWrrJQ@ zwtr5;@LCDAJ1{T28V-emtz4(A?6!5f;TF-%6|q)AsT?QX!m`J*4Exo?+~HqCSoCnV zdvsB|J!sN|h0YfWUwQ;t;!k%Kn3c``a$?Z^NGZwfmy{s&k<~LyKpP>+Dwy)F6_Bp#goie@%+= z|7Gt1rLo0-*?Xs40?xWO=p+&UI}ecgVuG;WX8(zbY=fh|zwEd5KNB94e6!x8x+TrV z8uexB%N0#GC$NG{UD#G9&C`c&z%wwv{(7ESJw2qgHfkixepO@bWeFjCGTu;ltF3AV z?xl-7**v7qXM*h#Z%>aG=q#gbi`eZ!nntTj*t+haQ$OoHKo7-_V#_OYB$$|IU6v>O zlM1#@wjC`lnUk$IzlYlAe2VTgiZ{TNA9~I%Tund^1#;tcChc{!w%C_u1;95C2BYlj z`3yn?S(9+~a}58d!mT2Kg7i0Fmy)H?A?dI50s`i3i<(6B>Sg1ZCvEDb$EB{e&wo^p z+u6bdb(GoLDIN8zS(OBKH6gIlQ=BP-&a&(86=k(Lg;BVLTGqP585vj^2lJL%t9~`b ztwsCar0C!MTvasJlTeUOM*%W3BNn;Dpy(Nqw$P4k_yovS)OhF`kD|JpA>znuZu$ls z&!T6z1q6L$mfA~+S+;f^TVht-J(oL7Ag}7eY~w|&%%(mv&4+{eQ@Nk{r)72e6h@D2 zjlr#64H*^vN&+ig&*yujFDF6|>Qf+Vr03`Gmj}>Qw-EAk)YUEF1TewFTEFZH;mqlT z$%g0W^jI~&%S>!)nDpH>-Zgz?WyBSi4r;8T*bc*JqqD?B9;Y;J&?}tHn zKb>O1F!R2P*-aobkNgEuIyubv92(B z_k*E7Q!{U2`F83fqR;x0`n=RqWxc@a7;M_53i9Ef)<<_S*xg%rr`&t`LN++ zfseT6u(j1%S$z%HmszDgo(?%Keh9YwUwI;qUlJBr*LAZQfc)&<`;SW@OV%sw=>oZG zLnPTS%a5k}^VZ9lzxH>@1a|vWAMB71R3$1yG7z`0T!~Fa$&k5oXK$yP?%vhX50;xi zAiY!(TG_vK-3DN;6UZ7gUBmekA;-3;m&IR$wztYk* z2&j<-ER)UbS4uEXYPto}2M(WgWSS8Ui(qGQbRloaY*)bl_VI2AY38)o7EOtZt@rJy z_tg7T>cE@~7b{hH6W?oqYO-tcv_>aF=;G^N8zgM|WqJWFc?Eh#H=lt)XYrykv=3=+ zQOhTQmlEedvw87Tfb6$Y7hPEckX{xwK2#mZBa50CNKz{yw0HbUSnr=LS^E2-&bqKx zVIqD?!XA=?V~_0HdC~M2H1{a45J3Uq$@Gi;%aids1Baw6f!DJ$J@tvMXAJT!-3aGY zdu|Ua*&#%k1p}6yQ3Wl^am3t`)OX3#YcyH!Vh7A*qzZ_&v+^i*RF5~HC@$ZZga|wX zLj?^HP;Wjy!>S*{e=Vf$_N$v>7W0`9RT8>Pt0J`*r@z_QZIW!91cjP_ z-@hRJ{V!?`O(I6I(Hs?{3!=<_M#3_4MZ+J!QS412+fjLNdZIcg)p6AVfZD^kh##W2n+iiREjU~pfGHZafy5b|gU-0k&Kf=Wo9 zV2a^h{Ytuo=Ad=(C1=d7G6|jn1^3X`{{y9i2m#$)O}~Hn#v=;Tc*X%O;!7>1(!is` z7%j#mquQc%G91SZHsz;JQTx_@Oeh_xtJ>4pG_D;oZOrM2u~;xk59j&NuQV}di*KZj zX!zY#1|awpE3oCqHe_t18pe~g%7Bex%d;^mrI^EwRgby~3CM=XY(;{2IDWW{L%V#j z9Pt({TA~%lPPhL^(PxB-$Yu61gqL4Iu5)f8v|dJA*|5cYwcUn68hHucS&a8NATPB@ zuSKE<`?ik0j=B{=7TeTI(^d52^e=8R01nly0OEG>qt#r=tjJJtr^Rqlj^Uq#Ts-dK{jnUVtoRLu)*-$D1cTgBk${k6@+OAXMHsE=8{<8=m!xJ9slb> z=UOF7MgjqG|Fxx`$xpl>vIWABquH$fZ(TX82$S$se(=Sq*&T#nDGskHm< zgwOMq2hL7Ahxu20-M|^T?vI&<7|5`5c`jD^ea~~e*WVePs&q#|via1!=)_KD|mEwRkm&8Js24BH{FBp5&;)AeS zi*-bS2lGrtFY89v+X&e*XJ7(m$)emo>)wxRiY7cgtJp`U7fWL*dc-fw7HWH*Ti?}m|&a$3&G4;lwYJfQ!61vocx1_bCSO;CO#JyrSQBWq{aAe4IQrp z>c2d%X(Fo!dUh}iQKpGyVw?D-Te&2iZ)@Cc7bKeVSSR=^ab|A#C-@bg`yu;c)Bn!~ zaH$XK#5Cugd`Dc}1{Ern>Ux%^N#5R%3+cDRFjId0<>8`X) z*&Ss1Lc!&_8$Okb!9D`PwjGpf`-?dE#cd+39l&)5B~LKtaUJ?!MO#R*ymt>v;M!By z{B5E7m)fSa-LgfkWDT&_)f^WErU<@kGx}y8RI7DE(01Z=JA=qmUj1meRWd?3sIN); z%Ln0cv(0K+unVsJ0jnNobIV3(fXA8)$v(q5{f;-y(dv4`Vu&>jTMmS&_h^I3q-&ds zN7Z}NwFH@_2(==AqlUBjxU}I8QPg@rQBJ>f80>K>ATq`= zaS2K&q~>JN(9K8wd4uSw{D1&qu?>S1srmbbF|;h=!p!YR=NTIJo#y_#gWLvt=%_q` z9t)}2$*pi{!*fRb*-M{xn^b=c=PFTM=3~`*N6n!!G;0eM>lHtrfRu}kEqQ9q;?}mfwG+=|`2SF86 zOF>zIWQwVYarxkX$a`9|OdCekKF-a92D_pc#{}-iKtM4yA=Ef1wV2xFZ#>e8?5dEr zAP1+$oWXHGHgoIo=hJ;3!V`ClQn`*w3E7rL7_*KfYtNmZ+HqSPi%12k`YA?EQx*1& zltgK7J69hI4Fb*#xnQVJAHKpDXo&b;n;H^(+G_h^&*R?hoaFiC$GPV_z;zscv6t?G zX$d2=Z$IVEQ%_m3c2YA6<{hH@vzvef{)}uwTV~sNe>3i)U-9XWPo0BkwhyrYjSFw& zfk5XE)xV6mW#%?`wK1eq&)iB|2uGM{+Ut&)!nI~=T0-G$(R0z*DPaw;YS6m&qNgZp zC|Gr9dT#%DZvk5RMO6#s)(|sDbqxh|1_~aga)%OVcp0WDf`Z~}C>*6Cc?*DV_HZAJ z?yf62s(c3Y7;U{SkARkmn~Gm&+47SU@!_rRm{Ly zpVum&%k+!B@3$oeFMp~(8?#Hu8lNDtV+-cs9|Om|n7+HGT8EP`w9IxuUf)PS5(sVL zSb`O`h8?!^-hF3TXmUffW+WsFEU%zh4|sX;xiw@#ap_qMiJq1jcpsJXnJ;*jRzAx< z>Qvin>HPq)oPdj0i;|b>2VlW2es;hEfCh`T@$ZXwped>rD1cK?5Xs5e(Zs+8$$e>7 zYuNTv1NQ2?#?_LaMLTJyurQ_id$ahFuYOSQ-z4)b>@=bJ?|~1XGf~%{nx__o@o_th z>4vKs=`w3F(p#MeM_Qj>FEyFZ0&5;B+vziL$I_(Smc;^uCT{n{cydwrnp2bxA5CA~mzv%^9mNrc(^ftNG77ejU+uOK9K!TEo}0aIsquuK z9@cjxBdUuZe##CSabHFgp5?Q$nv9!+wDRlc!g^ zcpJU&6X$ehEL~^$YWpl^%=i73Z|UkO+Yy72{_$!DDk=oHMM^M9Z${~)DcO~P9W80o zX4w5nS%xYJWlBSO8uJH&kkCanH$!qlKSKCjxP4zEHYSM@c-VZfk&}?xA zkg0+}TW%m3`;uIShJgGqYRtR_bpm?@>aO-{SKd3!l|a}-H0$~@QTwU z{Z{K7=$ub)xsEL^fmWWh+Z_Y{E3#(EQcje zf8Tb4JoY7mvmxl-X|9X+YTxEDZp6s@=HQ_4=ExLt%(Xv)=4^K2M$ z8rdcmk^@eKT5vIsWd-<}laE2H&Sv`ztj>8SiI0yca($1oD`n0dN!ffx6;9U-0Eoq90re_Qg<9Ls6JD#o|9|4h22E#pxHe7{tr^Al1JSj_g%Py`k84T59 z+U@D9lc~K2sb0YfL%UeZPwzg5FwO>9g9Q6+Z?KmW=ISK**Z?_Gr^2ep6HgYW{BiSY zx_Q>RyyfmPgfd26x2L#I{Mg7Ssa|Ch81hMXy5Uo-ZM{56Eo>D}%q57-my4t{ygK8 zSdby3p}est)=h^vV6@%^s(0mtJccD%6>+&eZGe=?no-p!I_|`Zi4%e4#pI-)7@KQt$5C?3JyeB}1B_WUg zLUMiz2$%;++Vrgdas7eA*#OtR?CDR@-Zv*&979J|ZhTiQqn)f=ahp zc(;v83fx^te7$to#PF#qeuvLAY?QXr6i_T``zow#(-y4X#d_dFpSEK%jvoKtE~xPv1ocLUpiB{lVU8gFx#ECvxXA6uat5(* zO%FK+gcvu?jzHTkC|KQ}4vR|IhEw;Glg7V|96Wu}6)K!8tod!_QHz+o%(rCo7-FyA zl@W{BY`6&Ge3OWU#ZOtnRm+7dNkZ=hILk{lYQOS{*SFM0;9C_AWet7#==*Vn)u1Ox zA|Wv$(v#NW3GUE_poKAvaMWF~U=S{?SwJOEH400CPF1`Gl6wRX@cK$~H`sPZWoZt9 zCUv&Ma2|7xqul^`Hr+P(D72zc_jxtz*qO{p*=6BZpLB@X6b}PSbH2@S-k*R%gnBu6 zC7r*l!i`FSu2R+FaQ2Hd4IPay8Ax+TN_^31#V-><<9A5UKM>E zIDTfUR?BL-Q|@W9pWKC$O0zrO|MX`v9VOm8g*(8B{Cy2#;gNoWjSiY^c^X{ff zp&nNrs9y7UEH6h+)smZ1`CvSVF(?)AYfq0DoR~nD6P;{7=)%W9&i*^xQCM`Pg3*R| zgAAis(W8?b>_~@95Je zjgOB-quz2=8SctAg>Tf_^V(7Imn*5_Yt&*8DShJJfayX%dkY^WY+s3r82$30$3O!i z|H_ASCX70k$iW!6_j5b@O#a1^ZH@3z@t1So+d+pHtJP4?^o^V3UybDrOI|4n=_dk< zQ|L1h0E5oX%!jv_^O||*T<3|UEvh@wDCdnD)&eTA$zkJ<|r4?8B zp2D;jEcy%h-a26scb1ymUK>=5_4az>unFsTog}j&ks> z699Ht@b(&$ea_R}`_%;u4wfMLu zFl*jCQSMIO6AOm5#CxtkxTI;_Uc-vE6RA9E-KVj%0v8aU!J}m4R-JyUFm0Ql)irPa zeD9}W9#k`e?wuU%l!n>-ZK7Lgori3|J71{WC}i3yipiusX-!_g_zA~gPS=;UimyIo z`iMPE(@oTPX)WQMM>Be}ccO=yphyuZI2PPu*VnQnyK~e=V$9DgYm^=QYuvU0-P!Ji zt+F9BfZAYNX#QoR@(GVd#4)Kpt-2gpR!g2#;I3M7TEq_WEn^5>qFeEHLyQdD~Fp8`p&)3Vz>8KEgL zE}rSFlmvFp)E*Ut+u5`?_xk_*h+Dy9jE;33iGfB&iCKU}4SsvPp0Q$gJ23lLO2ho- zomVd&Og2uorGI;LgPB`<-M*jhA{tj7;UHqbJ_>sDyq&Dr>S>%&dVIA83#qS>+PrLfi`%Q8*k5 zv&jO$*``8IOWYY`oRU3!J3;RK2+q<2{cPfLj?lUHcWE!7N0{7MtO5`B;Fc7vA|R3P zE%ebl;OLiKYQ?ibU%C3|^}$Yi#xGvwcm7`#&{*TMtzZE+A2%PT%Z3dlo1D?s(tMmZ z!Yk@qv|{y3JZA-LE6zH!KAHK;vFe(Z9?swDio7Bit}I)GR2S>>i&k|yMxReDAAd$~ z7gp*rU2oQ1gN$gk0Up}9XZrr{zghKRcprwK#RzEGd(D5@n@yvUGkGS-56}>2-sPYf z&Y9~IF#j?JdI6Y{vFU0?8fo5xl#t-l()6js?q?AW#)IO|n+={V&u=negq}fAu+-R~ zgDt9kfbD;OlkMop#r$rJYn!hqtnrV#e};Phpzk$zt~xcbJxI=*l1q_J%$ zjcq55?Z!?T+s=vEm<=1-cGB3kZQJkZ?~i-$`(eJ!IWv1^X+L|e}2E1%QI#I1DG3tZhu-BCr6nN4I;S-ddhDYJLe?+lS19P4m4tjzCk3CpS ze&xPDyP*18HOb0dJ0&ir1Rmm{y}>8HeX&i?>Vzq zAt1>&8j>sVRpI>NXbJq4Cfw6gbz5f2n-y(? z+>)c%Q|CcRwda`kCR(<-D!$lEX7ho(U1hEajfS0{?xi?aQo`{DKj5+>(Qvz9nTgI4 zwEb3@38z^PHlc`6*7I0?dMQHSqM-OdITwBK|4ZGN{lrZi%Me3+M|r&BsNi{3|qVX~6)$V>4~Nz9*K?Ql3h3Rtv&VQ-`{ z_r?9Pz?#LLUu5je$604;F#yS{Ska;UrIRH$OK-TQEpU;YK1N2MkU~+km|G2?PXHX{ zU}?T*H!W?DoJa+YuapdMCi(8;BFe8l61|qOjzHz5c*RT}7qExHb0W|Sq2XRI2@gzJ zaMOc1_+nP~YaoI_stX^>r4++wja6y9=H(UEkRMNM&=&CnGL10VM?*EAq?CsP_~06o z;`23Sfs_8Fp(aFX82mEvZa)HilB%;neIza>qJi(zcGMd|strIjne#X;fQMt0i#Ak( z+v-TE9kv~u$P6Hg$t>Q{xc4yuN-W;k?VqX)oWY2mq~%^u*K*7=3)ymq6gWW z0}a4`bixS*__t1w#ftxV1)vQ7{R)F7M5-8kWn`B_{}@N(9YG5(Z`SWip=k*Wh(>q0 z@VZBzGw>%GgWl?5h^q;io*xoU&Aeg?sl6DM(esQZyFWjwBc|DJW-Blz{#5GIp5$x;N6>0KiucS|+RA&Cfk&)$1X!>OtN-{$eAL`Q(hPo8Y5 zN>zKU91@&TIL5RP@Yh{yS0^RhV11vS|K+Iw7NDm9U6qKBXr20b`!G-VuUDNI@Zv#=T zg^&4Gt!`>UdD>p1=T6>j)D_JFAE^a$*^W9!u09GSbL{?DZc=0)^ashSNYTYQz^4G{ zowdg5DYOTg{<||VWpF_#C(+~8Rmnhcxt-lO&hydQ>%2I)IE-d|y%~akwG8)c{7%@? zslgrdU4ZJXxfUQPcLEP&bb8bZ30_pznlkun<5oS^5?(s45n0uPV*k=?xmn)P(mT>) z^I0OlVNB#dV*`UpRH^Zz;My**SzZu71A&JG(5+xjai-k%9)Q;mh$$@X26!0)I_}O`q z1&qGa55PIt!96|@#(0Ajs_yXvpSk$YZ5HqowMxWDk!Yn+?JUoL@(HJ4=N@%h{n@*| zZ&XX17TRf(fu+<89Qbc}YGol^C^Y?0Pgq9R1Lq;6l!M{i|+j&*p1qjq5B&UA@Hf zH$f4b!(iWJj=`5UYMb>E{zUjL7PGQvv(jyuB;@T!BiS}ddYkNmWtw3|6Q5?0odufC zh2ord%Q&sCn6Ixg4ey@njADv}4L}n6|Os1+$&)A zmt0S2xBK2~z*EfU%jt@4hgi~a-e#_v-S#=fH@-KGa!r^1=)v&7w zPc13`X}xdfM9ut}0JG_Yb03_yiXXbrB@*RII$FHhHdkAz7o)mCp{&*}nme{h{mb90 zjg0p9#thme7O-gzZP>DHNsWe4)VkA!LkVU{MZr;5q6#~aM?2rd2a92Fip}NIzgMXZs zH%?|jp`UU$+_A-fHm3g(bG7bmgCgY#Udgudk?YT|nb2SZ z;*Yhkb$VOD-}e<<0{UHks%V3k$-{kO16m6ebtp`p+4RoG6;7cT=0hjcSHcI{oZjiCe>SEg0d|$Fk`Y5)#AW`Y~PzhmW0BNekU;{4$JGDM`u-Zq-kck89{p6 z06>rc%O}?YFObp-I;p}Ua{!Gx`aNp|Zsgn;-ATZY`4B9XmHuDq@&>Bwf3$VmBZeyr zWfG+@nRSbCx?g|elX3fO(kW5KGkM!`;FG=DKE<-A;>)?qr+78Xg-g(?bMOH!h(J!B zY)<09N<^_Lz4-c7aSKq??VtU{E=VYRj2`H0X!k+^!fGK6_8Y-KwME0?OVZdc5Pl6P z2zemf^FMlz!xn;cUunr&1=ocn6&3Z_c$1^NF84;-y-ka|V>TYAJUF`lwHy5k>mU%t zQn~9+I?oe9DN0UM+I7I!a+JXit&&o86g^`gwF5EUl3dt!1XzPCcr(lt5L@FR9m17I zeoUxDLm`fv`f)Hb#RnG7LtQxW&zz;7;gS2EzJCnWgt`I)YM3z`5!EcZgZyv z6ZYu@3A9?mX=lzfodcYp{SyC`aP%R*-8c03d2|Vgdviry^mF?YJjy)FV^<__*f|mW z63Q!a$i$)c9>4?1qax8)qK8#QxVtf86s0Yq9m#M0bq~ZSbnNwyRLb7ks9AW_w()kq z&N=U$jOt^RiNY}#78Ux(yN4l01>1_f{?9bOmt9!n?Xr??(@`{4hj^n8TslK>`FLqyn z8mF`-0yqK_ag>ed{I!U+{DA2vDPd&Hyx#NwR=F5s{ly-&4$o)(^r>HBA-{7;J|AO% z)Nnd<2yLbFcXD=MCD*bxcbj~U|Aq01eM-r!Oat4i zzvwa&2$ruO*DI(bxS-!d4$*IcBPcfTqHoECmq~%r*DCRl%8|{=;WwlhmMyD(H)9Z zp|-$`U=!>c8*=v6I=eV>Zu9{3{zkCNPeqOuE8{4kjGL!g*u?_GMHAblg_+6>{3fCI zA2U4S1{umRz!djr6y&10F-Btmc=8eYet|0vnLUtRkNHbCmpDi&tJ7bPPsb*!rZM{2 z?b(a%|5xV*KfAHI`e**wv4~SG+>W$83Sz<7>7Vi}qlOr1bE1hUcH?7mN3co{DP;hR z@DEF$^kC4rV4Js!yYVc(kzT>AP;$Y(K*tM1#x&SRM+4nE%Sb#1Ac_Hu%f^s@#gNAg z=6$$q)^3~NtV!lna{6P=VmDa+1ZPrW#dCqFg2*I6_0i|) ztTT%pT9>b?+4|x#9g8t%%f#LlZcE z6^9W9%50RPHKhV-ip_2L{rDSts($7Zt48x^4^0NfE3QkDau={HiU!$MxbTux_rJWU z9g;q{^2UPN6A&{5(T@@2u=Nd>H>6jElMRDq55h)ubAY7{8yz6WZW;O;b+odg$BcuC zVasqCipxY>y1si{Z+oRZ;)(vsSHqs<>w^@JyfHq=dBl;V(`><1GnsfHtJluQtT#>9 zO{nKO+P3dTE=+RAN*;^ljbZv`8EJFdJj>L5T4}z}_OIj)=cTAC9pwF>aN> z9v+UyK58hYTPwE}tAFdvpSs-m$k+1QiPLr#uzQ)d{ZYY<5SYLiWj-MNWRb@*KAmk{V@Y@!%2zoIMgjZJ;3Z7}@>!4NK$ zDyy}D2FxHO+{qt(M|T%mY=TYoU~vyjMx!}##Pg>d`JG_n!rAUTKZ;H$neQdF{1M>z zirwD_ZXhcQa^MUCETdTo35Nj`J7U<+;sw=&hq!J~P?&$my(upu=65qv9!n9~$XwQT zYwVhju?v6Wl#>U~A$fum7AXbc%Ez!bhJX#idawFTKQ##(OMZWz%9s?PnTv-{`l-Fnb_(Ph;^yDRJABh?43v%RylI_2x z=4Z|~NFp*Yxa`%oqC~0UoCUONNwZ=exV}@P-ok1(Q{hPxA|1*Ogg0w1d4?2dO z)D_}$a(f*dyvol|Q->UcMxF+iKLCg=ub66ru?M$B=1z%=A68Qi9S3{ZsrZ$Y;f*&R zK#-%OmaUmPof`Kq{3w6=AYTO(+PXOq@tGnT{5=H77_f7g8rha*q%^EgegXd1i#rjsZo;qTos-dmxD0Fc<0H{L8*T)xx%;K$Ej90`aZ-925*3 z36$0L?*L#Vod5zQ+W!J2aPIt<1gMr(Z+<8Ib*Yyk$QC@_=vRBz>{+Aez+Dzda67uo z=XwgN%Y4okfX0DX$!+Znp3l#HA&co2viR96RhRB`XntDzfVFTXh_ z>=+q(J^Ww4fw9g@R{=-0L+5hO>(=y&4NJyd_PQ4@KTh}D4Oi-ukhA@zhWC-MHj`w7 zX<=tol$z!~^*)lUU?q6$Se?p* z15$=|G?J{K)H{?kSf{5Z0_hMt4JnJfCk~G5niVM$m76&ud)bxrUtE;lG{9@yAvQ-3 z0I^M}^dxr7O-A^)Oq~FN6?a;DpaJ2<1@#SZPYY~SOhJW3wqVSCSw;gc{+em+iS2;% zcAjYC-}%ZK5&G?Hc};F33zs85UycLHD$`-)H^R#8Yl=#k8H~HB0dL*o`|`#){ADyX z!pTf-6O&ivxd9=Omf)vts}mx66+EC*#&QDvTl}#+p|}@dt`Mfsqcg*7k()qq5La29 zr{G7M3bb~uVe96Y^m5$ z>+0Zl@Pl(wBX|611$-bgZH~vS9~GwJu-+ILfPfowvRWVq-$DC8hirQD0TAC?TL!`@^IFV_s`~;pK|1jj zxJc%-CUV5Q7n%`%@oTUT@IwU^+knLnTiq`Ew+9j%3bhJ){BcaLGozr(%r62AD5v<< zGc6!CcaXUQJO%raXD7rf@0ZrsId(gPknIkadxMp@#-L>{S+JmQeI)c?2)$MCKt z`@l9PMMqLXCwi{lKU3`N*GRy-cp>j}hGlbp@fRhcsB1R_UmZLWJL=_{Cpb@ZzPJjo z)Rw6e71e%aU<|7hP!In%u6A4X{AyLIp6x{nD9do&5}Cte$hzE$Cn7#Jcl%(KH60c> zredVi#?!eMtFY!~?Zb|8=T@$@MsX#mOv`@D0@VS9(evs1 zZANc8l02E2v;B_0rI7r<;KQ5W9xyW!pzkTI+cr`2;Q(h)s1A z;r6~0E9FK7hLOSi4`AMR_fEPQm^s9Lt(V%6`(nFkIqjR3@-~c_@z_|(yLo7T*BHTQ zLVsLz>HOiV`Mp&Q@HU-CQLrHaN>M}|#NIuH{in@wk7;Kg+IvS=nV{0*cY!c{CZ)7G zPvQ#iaXln<-}{~#B{~=R4__E2x|-k144@&aP*jlEe$3q-pf~&8JHLLyDUe{AXTV_^~`vgJy z>vt=A&^18vaw~f?aU~^D%GMWD>RfChHD?>5Jkn++x&XLdWF`&#fC?MZ=4u*sP|gk^ z>~wSULmPYl$T=)@(zYT&qa2MG-(_9JV}p}`NJHS)k-U;6 z$-{ajyDw7unoOA8pUj#nM|HBxAl|Gm3j5y0)>qiU>j{nCz+xP$g1Vwg$Kg6(Uup?i zh;%>&M_7uA*6d#HrM(1q_JhnZOIcHM@V9WLno0n=JF(XBJ-9|U8453hSx2p?aDt|u zEzG&`9qFCn+lx`jMY(J!*4&X=t2DZ~)#kp~mRxpOU-|=896fuZTlz&v+S5sb1no$v z1@><>GM4KPjO~+}*`}|+ocd|L7jvkq^)i4H;zlU_roK;T5tPW+QKi$GBK7bm#A(i~ z`OC>;E3-R@kIr?E&jOtGSI2Wr4*G|YsjV`r^Z)Lv);fBUsP3_Tkktoam4>#H>@ zrTuud41JU>Uux;Cta0YqgVrkV)`TLG-p~X*iz+?6nl0n{gnG7&^`UON06w)+Bsi5v zhj^h@M~l7_qS4P0B1YCSB#bX}lPS1^>SSDf;mR0~Z=jCMukXV21O`icWK%t^oaXW zSR`*U+0f8xtQf33sZJ(Q zGH(1F?*Pe9NdSA^XLH^)FHRhNnYLl5Iw9(|A*bb0xE+%MwEk!<&aGCuHzy~0x|;Gh z2Zz7lQcnX1vcxEXvZ(f{lUjmJMhL;uCig`x7NhygP-`V=H^;OU=N}mWK%rsV#5}u!Jb^v)ArjZv0#;(; z#njG+%3KoBO#tKJ@3}cm9cUF{ISbNZny81&!z$37+@$6P0!lDT7FPEc&DJYQ6Fk2)vPpSE)!_S-58hb;8A zIumDK0kfY0Ga)Y;BYMRmNr@aL!RD|8@*g5#Cu*%5ir>f!_91@Pw@)2G2**WEiAz~1 zN;~2f9*Bu$RKwMLfz$$iOSc+(>p`T$u;HkG+wuqTrBon^C0MHyK<3)I^G?qB30WjS za@4pjf6^(MIFqqTYHW{e#Ui5N#d8ZI(F@ytK^s3L} zsPcvBvniqi@O(CseunNLf-@zi5I?Z{+t>ns6*lg?BdtFYS8brrMovLSbV^HHI&@=I zzifWoeX@vuJN$>W{$DxpCbmE9Qjj62&Ow<|Q24ko0FPBib)W@Lz97P2WetDRE*4;! zeg`A*bE|YF1|{u%#zYz1T*nQUmzG#+cKETGyWFS9LXu(kNQlOgXG6Td3eS87#K}NU z^WL_9T;0tkXtc{IoQ8sbCi(h$&iGzW(_CidY05&g^qDdCk`^eYeXGE-s>l3zK2%Tu zc)eT$!Z#n481D9!s=u%=Q-!2aUd_K=KSl4ec`dRX#=4A69+#Ot*VWr>l z15j54KCku=8Wc5XF?P)U%;$Cx+1nMPPyoNSHW-QK=_E>pptEhM}yuqF>BesB(c&4O&cSr79MD|FNYaMo`wOnpTH zw8TRiDF6eN-l^Ok(r{@XWCS_#B(Uu+6|PjrxJl>71vP_Su#NksfG3S5CxfKo^e?LY zTQ@x=JRB?4XV=(ul)pF=t^ zYT9^K?;Nw*ITa;xi~zvLgXqWJ`}d{Tlh)^=)qv=(}=_gTuje(5@*kW`{hzg*eg<)bC zl#{JVB3p*j)30$rX+2C`Z-RdV8!Cc0uOwrXj%_Y6+p|s5GJtK;P>CUEm4c)Z;?MZ) zN3X9bY9uM1Q$2BRPmczNYUWrKt;|7+cI+7=fFoj$+6aYIV~cas_m=4M-lwKJL0fQU zvMAxT`1q0by}Z}X_row?aTB0we2GirdEUzO{i}*odP@y;ArVAxs11c(ohAjV)4QTl zC^|1Zt1lkr8Emf-4x|BgX|J?Jq!k6@J_Wp#t{7aRO;4LoA3nSFS5ZUAUfQq`mX1IKLp9Vg~b(s`x5qX_$DcO+6kayeLQt%#qRu7%*z zR=tv{03y>F3tkK1n2mN3D$k^t4_TvL?0f%3>mpKdP@XPS#hK)fnc2!zNZbc0kU@lt zhpid*W?(zhu6O^mg^e8kN7RPLzMpKiN~G@l*#rP(+ueOjLnJ`31x&?r*Wr7pq48w7 zB{dd~Ma;IR+94^IX=$0+4@^B_$RJJUxrwx_)zgAYvqh!#l>~NpeqO9zW^G-5vbHN! zrr)Gd(i=fXo~~6Xo!Pqhl%8T);oGSdm02A$iz(Gz^=8g{50=}nzr^OPMbyn2*1s(x z=wn;}dtX#*A>#qCa|=`}!UM+%(Onvj-Z3MsCzb_Gi-AKs+kO}Xb|2r@KGsH@gq2T- z*^eo!PY#`|-SvF<&7YcFnlz+O^X_McZvi8*2~+9i*jf6u%ZXRPkT z$y|lnMevT3Dd5I%HOxB`&ecYxv*lNO+lVQa>Vt35Bn`d)VFRzFF^<<`M&6~@m5Mr) z#?Txa*Oa%mmVSP7O2jz3w7FpG;@d$)-BOv=3a)OE>E6y43)MV|Mvn9-<&*i7?$dlX zf1)!YEdbT5BwY~yv2uS`+RBrlfdl%$yX7!X6!)%9*E zuo5BSS^4g2?r@xL{lpHh%GEbDH<2N8WXhC@@dqG%s@55ldC+-!x<<2|@_X9e&7Y+W zDH?;(g?Vqzv7v#^u+Tv{BxyP?^NX_3f*cu6dd|IUgoIQX7I{M?bT$kJ+`R=7>(Ra1 z0zGL6|BzB7IsjB-)^*-O<>%u2)n%)2d=j-Z0>~*-kK>9@j_sW zVLd?K&fa*Jultt?@j?)5lHKyB5&Qi%FOmpELo7R1+z5vok`fi;{cz;$aHhc2rKDgy zlMnzfmMR6T6|6C}E+G1N4|h;hDKO8>Z6v2YDaoamh-JXtq%EyAa%hJ?wl^VvCE%=o zSOxl#7=DsVcik6~{z9uIfjRX(D2!x01As8Ly+$N)KVbz=Bp1!OAJ&CGsiY;%Wp0zM z9PxU;C90o~NWYJceo`*d3Pv~~tu<_Uvftw8Za0OAE9v9D)rVRTFuR*|5wEP=o03U``pjcB#9v8s1&s@tc+IGy$(E zj6Z%jxDRbjRj-ZUkeC?#aFynOG|kLUGBmf2&iSEJIWHS4^tGWfemV}X{Sp?tpgx)U zK18#y;1{`@ID8Lz!Obyob3Sm~0uud;Es-l|9J~r=T_M zL}el=?>ZF|`O?vIo-LktCB}@Tv~|CQuWLgfWrH*EegwQCtPz0n#Ih1=!3w%~eNY3(qg6DI_8*}Rmi0-5lR?uwYrXBo@O4P({k+hI{Q zz*`UC@p1#OXm$TEdA|;6g6n;K%0`)MP%abbNLAaBsa;;-W;caoe7gcC;ppZx(?J{p zMP%R+H@@SYns zjI<8e%2myA#CR!)2ZjPc^30FLI&QPi)SSw!I3;(ObVk4z>UelPlA^`Y zjZqpo{0!&(q*KkzNMK9@{zKIrCauaG#BIgNm0euEGTA54UU=|C2Yisu<^E^+ADJZ; z{}dbP5P3jVN=J(7_aP1)7uOX8+jTCr?MlpUC|-yh|7(krf$H($#Rx|MCkD^1Owx3x zhZvlb6C9jOJpLs@dw^%d*?M^{3u&1X3Vz+(JZmivr)M?4!M){jo94NxgMkY}fN^rj z{I|)IwWFQ~zxgtg%OCeW-9%<}3B~62zI?AU>+q&XYB;{$yi3sW8v| zGFWU31p_35YeH`FA9jgvAyHox+${JD<`0+^iY9(LkM7#`7}H?+5!_esRu~(oPO@2 z`5?j=1K^GIMgV7d%;TJ7bcWHR{-q;SDaAKwIL@k4B6T&a(~qsC?h@AXeyq4I^qH^l zN^|pwP`c+=rF@b#$2g5hE*Q^3CMG)If?HhRfiA?bFDu)>tHS~dzKB(yl(a`qAhKf| zca8%4%uZU6>-}(((wr|$l#)`&{IbE`vYWW5veD0LItXCVO|N;`%|0@4i+Bf{zEkVD z7$y$$TGb9lbafC%XhyW1E=`{B^rzAi3k_6tcArkXy0q1b(rEyC^ zYiokX4bnr33>gT5{bbwsO_Y^ey~|U5yviKj?pV$3IMs~p(=rcxZZAM-3|0Qb(dMTj zj3gLNiU*(?npX?6p>COzPT%6&w73z^MCu9Z$_zvQvb@c*?yl2yzbzEM0SOIp5BXgU zm^^+doQgwte+dy!h&%q^uGrVcA<~j2((FjL9%{jpQSyt5D{sCXD#x;m6F(@`2sN4f zqM0MBiiD;!BA$v2Z~^;uYwi^yoe30W?=HWEIb}dMFmeeXHs||903(-nJ{E6cW6Pg? zK9cSRElDbFC1?k^QKMh+0e-piW+Sj#D~pOcoM1msP5o9aF@{JqRzprr4ffZ1lK!o8 z-*tE-1bSKBSmBOGmpZw@vvsAD{%Q{S>rwQ{dhTeCYL1J$I9AO7S(uDW0Y`?&I)G<4 zH)D{qv4~ZdGu081eNmRo=Cj(JDARS7!xcSa8M74_+c!=fFwuYE&J z%m`ero_R|-4L)pZ#Cp%%kM8@Oc}ssoy4?1u70u-vtm$iVnL7!Vi8o3vAV&EU@`0BM zsotnFUjmPbqN452;7k2Ftnx3WG!XskAAkI;%!-Yzj*Y&A<-!n0Q~0^Fg61#Df~4S_y z3p<$d#XLla4wtR3#8bv0-GK*}XcobElc-_9j3wF6W$O)_Qe_Sfpj)Q3EVVzmdlfTL<(|u9HMxh;)h?jOiO^6 z7(?&R16*gP2DlZko*k7pV;!3#Lw#q1@6mh=%ZJhmwKIL z@Xd`BO@VJ>zC0i9WmZZzTCL(`B)B!GKW2RL9PZ)ucYNRY$nee+rMKry7wM&@fpkZ@qI)~+~pD2 z;x6@nRaD~h6{6FJPiA=<5hiN(%+-(gQS zoaZseKYK8iwWHmKQXZO4rgw`ZA4wh!vY5Bn{0FAeK^@B$>lx&J_RvxGnzXEkF*zAP zYxAl@ingzp;7Jy0K8)%zqqiOKh_*&W|KcWlP{>m+{Uzim2LF<~Z2~k(i`tTR&CW4) z$00n@lVY|01E*@8$b|2-_s{-^Zz5iE+}V`!^~}Dc7u0s1kG(UTjGOTj1VUxek^-lF zvB%MMEXZsd_w5bu-tAS6LxJ9QY-tDpY_IOsSZCCu&eJy%?vXcZzDi&0s>R2YlxV4k z*Nn;0EX16|T-MEMA{O!orFK}t0Da&6ZckDhhNF3W)>=14RCgMM>`@UE65_56Hx}0V z`c=C4+C6!5l{7t;j+ehFEAFE>k&*$f*0_$>mH6QbSi93XDB|l6aa}fEHo7@L6z?M8 zBineCsT(-~zkQ^+{zSY5Me3Ppb0wys^Ce022Y=u8$oJpNISt`flv^V+9na*2-AILPrf(3;UgR>v>P0jHMmb3f%7t1GDiAgu z36ti*vRIIBztLHouo;G)1b6Y5?yF#Cv{tNX&27ga6{REy29r|4ThU7knAqxzOou}= z@t}a(iX-eHm)nR?l2$tcF1AKEk*!G6Mm#P>MRTN8P0!sfM1Nd!JGi6F1dF(7e=MeD zXM!L-3kxT0BDF=rj&8S~ccAgWH0;@x;3p;~)2J~{!&doJ%|+NX!P|CY=ofA|9j~+y zz)G)g|DGezYk;Tb2=05xQ6>{Co|lFbFlXChLLwFu6{_LIXKU*P{Aan*_7mCi3lJ}j zLbEStM2fklB)(Kkk~Da@{ch)-akNj9IQqDYzP{28t*fnU!5Fd8Yai@9sT64%f69#X zn4z!C*?p{J6wGam%tv}}DV%uTrg(&SNhb8!>%%^6If3MNM3ej4?6jJr(!bfwem>v6 z;0uW1Xw?Or7!CNJG9bR|GiXg@XxV3+q3I7xMorNFMrav#z>p7tjgO%v_N7>}Cp_`f z9zTuO;bHi3NGAQNQoBGOGPQlDw6`P?dh4d2PX(p?m5r(^r@{w8m)93p{*_HEiadW% z=_AT0bm75a-A~9w=!`IOZczqt(HkPIRnXGxSt+lJbWDx3YT{2ZSmE0@_K&@1Uc6yx| zN1Ly5bUy0oTNmmTQhp8U=c_gan6O-3uQKf;^h$62QjgJ(Q?w-jblBJ58z9a5U|a>4 zY}Wx8Ey$JZ2}|z2;>-7|c*=-Tc#p;x@Z_vt`gEzs)y!c2|VGb+qBF9Fb_@Nw|P*xB~%* zF+Nqm&q7BAktszL-7}{Alz*>m306G~|VfVQ-B^AG;>BVE$%}SdqD{51- z8at+oAt?vLn{~X)i@nBe#`xrb$%DI!jln+3nuazbk5J>;zz+FzR|(vU9d`LWgpF$7 zaX_rIUakroBn%4!N7Qw%{0Gmg2xsXtBOU_I?*ir!aqN{Wtz0%c&$W8xv^QR)BQJnq zmp4fljhEl~tqmt+Q7!V@>P99M$ni3EahonW8zj%i1i4 z4s4YUqUC_d^4H!Rv}MiMEXmrz+w(ac*-G8+WjTiucLV!RwycnOkKWYgi7qFs<0n)r z&gRA*YCO~iQ>D>0-FMCybf4GLPf&0dhV+064k-cX8&qwu~J(&wGr_*Ot09LG#&9Cp5f0yOd>hoA8uBAaT!O*aK;Ut6q-nC zHH7OT5B6kTF8uRJ7dB?8(NFyBc5$@p^B###Nn3IjDi#<< zj{@Y-Hm-y7SFmuY8j%Aq0ew8RLMd=54RK-Ui>Ht6tAo(0O~A+bx`OQC`|(wFRgmI? zIKai2B7On}5mv8;PX3zU{P6<&_1NvMomb*wBd3E`_bXjPZz6_>rO z?0B8~B4(QX@)!_v`T5+OB=rCxvtU9S8AART+_Bn`SIH#q6pY)4;d~SkwY1LX^D$Is5VIBGNJbU56Jcx#FB7N_3H z+J8OH`l-dZ*xUZJx+aE1wOCkAGP3#o;K-cUM1JUz6!Y?z$wuu##M2rMskB7$#ltL7 zd^?d?nVV;Bn8-vkK*ZAM%+LjsU=i6o~eNP2HlW~t;Wb+C!F2us1*p}z!k9*KU{`;d#u0Vmaro@I~rc{fRQ@&}V(Voxi z>}HqmBY~(M4GNvuP$m~cQWfMXeF{KLkzTKGX|LZ~f!vq;45kd1``RCKrIbB4%aLtu zpI+@fGPuG$p|Z~>-6<>$shHXKqI}|XK~7i3cQuzw{7$mKl(|z;yB11?wAJTJe}kIr zC<4vr7ssFRwAgF&-23e*C7PXV6QJx$wH30|=awUVcRa5ed)sHbyZ)n3abQI( zJb6)FArn;cfs;^-mIih}8Y{9;gZ(JhY)DR}2?CvcNFzD1bWgq7FyCK}3Hcg3)V$gE z9~Rs}VdsR0_YOWa@^q=QOF`nygG03(eO;}EGT#&ibOQc}{%sVD%915s4CoLiX= zWO@|{)EvE{A5+arg!LEhJhwSKTkfV{Vxm3WC=zg&R}}n;;Bq!6Ud%U!1^pug+Gv3n z5K(W>jr8oVS&oqx4^gWV*44N8g7a6EBVU*}fK{NFTe-DD#^mH;c(AbzST z73d~p24Vd@#vX26yCA)ULDBd>3N-fT)|TB``Bb1Z4%Oi0%AQtq=k)muGK#boV>7st zB@q(aM)7-sf#Qr)OeG)=JW{tQhGqTaGOy=22KE7Xgq z8j70Q5-%DOUlC$|{rIS|JQ;Uu>iYEkJY^hwZt6|{luF)edQPDn(+kpR3QSZ*OM>E> zQs44s&2&ArMV38k74maiC+@xuN6*tc#VF-Irq??<8G)6&Q zwXxovh}+a9$dAZvyY(Nd;qDS7692W&k*nLn%+^D^9nV>9Pv zZtCB}G8=;SWNy+W;6uc##~S>gM$qa{iH}S@WH)!InfGlldoVlA6;fb`Z7t*CjgF?F^Fs-ov zkpo)G_xggvg>aiuKV`~1F4VNe`7l*i7GaD6e$(+|RH(z&Q}QT@(&1R&|dWH)H%LIG~Y}nV5^O z5X5KecT10gB?O`nnw23xiMdb~ExE)@<8LAldCybZhPhj^x?Vk+JQFpt|BtP=jH)A8 z+D3y1m*5`U-QC^Y2^QR42X}XO2_D=b1b26L2*KU&&N=V*uJ5jUf6SUaJ-w^CyPm3+ z>8{c?D;WMknl>|ND0-xj8|vIX<;N^+fY1teHF3++t|ZoYg|!6TIqFP!MZ&LQlexP1 zuzS8Cb7$wHPkjk%WN3~ZMdDbRW=KPY12pmleR^3cpFt73{W1AY58ByX-4gV+W)Wle zixgK3XX9^=WY!yL>^(BqvY-;=3(WiUJIHcSyG%Jl^J+^nGyO4H0h#*-MP{@DKZ#TT=Zb6|5NV{ zow8p2>bY+}nEulpgMNygSmjWFW`;DY^EVRJ5Ul7&xfI>q&#SToi@B&T4A)xaq*fz| z7h5IF)s0U|hq?E%IBdFrhi4J1uEzp|g9klibFFBv4XR|r*`<}FR9y!Cb=Y_K-TW01 zS1{{FaB$FK;dgkZO#1(YM2rgbcc0MtLvh)Rq3S#GFSz4p-W8QBhbr)s2Tp~ljE!#_ z5#95a>xzq?6)GP&bt_=6Dwh^@Pb4O)_Yxv%pV9EH$pKWd29gYN&(R)};t0c~_^}Q` zhFwmHvK9+FxmOW{k2hmDB)Slg7wt2?Hb1=XMzkKihFjh{{`urqBQ}k1JegKTW6lbv z>XSk%FV%;MTO^Y!8a@>JcmCD_n!~9x_{3U7{G)X8nLd6YRekd7<}}t2b{WxyjWQ*} zWvIvwI2_flU_3>9{>~}=8F|KGe;t?6^Op-!1P$=6Xr`W~ZEaHssRB!z@APSz^vXAV z&vL{{xQ*hy(kkev7{QX$R_Uln0G3rM61dofooy}uqT3h}D-Z&j8v9cIY-nz-e!FvM zvce=6*wtiQT|JIDKwSe=w3ozpbKDWr(pGjKKC~y4rS}GC9xJaubE?t<8OsQ}uf38n zR~aK36fN4w+^LBSJ+f8FE#!WGW}Uk_o)ROoXtQe5OetOYj%LROS`=@9xd|?g2Y36q zH2=BvcDE0*TUp#KQlEC3aMqIRT+^p_&nMLZG0lFx$Ym~*KCv|d+vJCD5n)L*M2FE_ z*2GCyE{5xRQ%A;Yl4H;muJPk?#?h>zZa-}Y<%|X!=~Z?p=52qTE$km0eB;JaS6yM~ zcqX)ceiCG8n8p3iHmNjdC@Pc|cm}FCFo5&_H5Jm4wZ|Jl1xrgLN zAYDK{n>$GY1Z3&Ia~0wS+fbn4^lQJ%ei$=lGgf6&tnT#+rYIS*8Q-OW(4peri~+#(-}WRxBERHS4ZTLlp8&vmCH&#oauZ@a)LT6WzJtrE;;D>KuDMX#38AwX8Q*4s|M zxwbB#ZtcU4@SPdzuz0FGfstVLhiNE$w6lG+bjH>D(1YOn?U#wPMP@1*r04Zp`oe=z zJ2Bo-<<2^;x)x}7#gAH<9)_!t@Uyelz7bHasl>5JbLbL1 zrr|eMpCs^#&5sBh7YYt75q7^1DGeePG{~jC!TMrIN2lyd)r)1U4+teJ+l5@$!^o%{ zg2Ikrw@BEb>BaR5MKfQhj~HylWLiv$DSML?Vfh%!e3{z!Wb2bsVmKKiC@8ts$~5nQ zs7z|CUIA9}fl;Pvr3SVj8QEwps0Uh^4nhpeZi2LC{5tLM7Z?}r-v!tA+h-hTrPBR$FwFuQ-GZizUI}u=8uPc_n1epW}(-EY{r@iJWw^u?)YXL}9JtJ{zKh0~g^2 z-&SEcf1vJtG&HFQ4yJ~42x};Wi7vg@Zpv%#Fu64i)yEnTtK&YHv~FJ7dnucM>dt(6-)Sf4QNUS) zb}0FNA^ep4)Z>?A^2Jbg*03S(1zPI0^6}EaHc9y8!FIX)>ce`W`qJ3LV71cjnQKR5 zZ)UU>MaM14UR-O~=Ffh`-FDs@fYs0tE+IwaPr73wFSf>z=xH(r5d{WvikuYm1;`p0 zlcYltDqpPHOf8_|rdQ)gIu>QLw3avG*~Nca#h^(ks+04~n_)1NJQB`}EpnQ!!~F@* zSLn~O%7tW+WS>j5dB+{?F_-J~Hrm5#qU9<)mx&o~+sdLt}=g2}hgEzSC$gxrl`f)7BC)few)z=~)qu^Jp*R^y}@7 zRUxfyUtGAiT#>C@9m<>qZqguO=p$>a{E08e&;)hjBSlu`pw$j zGEO#XftQ_kbF}0_$RxaMRe6bHDmCO4aPYft?{jpn4>#uzTX}*2us&{B+VNq;zUGr5 zXmI7C&hmjF4OQn!y1Rx=w{u5-rMdF0dQA`sLm&Ak=JS?ZE__t6cEXYBi<@%396UXb z3hh3Y6-_sW3}e-2zfTNxZxK-E$;LkvX#cPYiqwH(rnu*Rt|^XWv+*n7*d>fI@^M|{ zromCIq#6U{2v+!8i*Dm9s0XGjVl| z(cV=EkbqL?`o+9T{4k=dDcqWOHOfBunXcdJpq^17yWniEsXzP3rR!EZD~^UAsMxyS z`lWf?V6%PobEgU^sLbF?@9+Fu#P~C`p|xzOTu-|Pr!hmgD3o30FIM5}DV<#C8gU-? z3tZ$Sa}Op3z?E9?(iSn_&rWF@SrPi=HY0zos+DE;k4^Hmw6 z1Np*yg4+!$@L7O-WqV&FL03Wuz8#+KBmT2ic9p?(w*%FF3i>CgpCI>O}w0gpHeEd%@sPL@+9aSgy2qj-1Au9M;D6tI8Vi(ADIu)QVW(2T^ZTYFf@Je6X;}e|Jun>KV8E~^mbG_33qSd`qb545{rR7RSrK8w%v zY*{@UI(bP`4{aMvZYcu1<>b$IRv$lq1BFXl3LFf~-e3A;-J)cr%U;panwhDQfVZ`i zsj?65l#3yov>$46SK`(tn6=JQ-Hp?X2U}YoUe6omT|d%#-Y-r>f@#Xnw(i}PqKKr! zOtH?~rRFpdm^pk7UZ{B*u=lz+J{iI`N5Sd*hKjCfzKe?e4%t^Yzk2Nhp5B;%Y1TAW zaL3nn$@7Q+7r!xewUociDI3h+pmizCNO8EsA$RMudERSnzt(_hg61d@lLAB-Fbe3L ze%Y}5{t4u73!|?P>(|FCo-tyhwYNp@88R~_^80a-qN@QsEmOJ!MtlU`HD*LJJOBOiDLGZTz7-hw7i}?zlWEe*PEW# z$2`W{p@UmPK`JzD>Z9cA$j!O355K3UEj#Z98P_D#jcWdB^$U<|B#fnp8_quqr-;1M zm9SBZD^9fnn%(Om0%hKv2lLhUp`5Bu$^z5g7CyNrU6=T4=BgeWC;R}{lI@Yk_0)V{ zn#9-N=0JXnZiHxx%fSRkx6j#17z960SFo5yFaPsm5wzvShWX!#p@G)qwiYM*x3-O? z3FAreS{SdQU|LHjxI=k$Sp5U*rgW#U#oU1$qZ8mY<26qrwOOw~)u3w5@6Io0VR!gz zy~L{wSB%&ul810Zbv1AjHTnpf`Fr)=2aPLax60-M@6smFw#x?HvL9YYJ^9JxHhP!I zho8KOe*P1J!o)t=vIlP-%K5(_=p%^zTH>nw_NOA#h*au$&la7fjEoe;E;h>H65T?r z-feFV9V%)P2n0a@HC+(a;L z7zc$x;ppw`*&BRUw|?P$nnS^qPBjoVrs<`B>}+G(vv5i?GuCqP+~hlO>i*|p?2a)_ zTZqaYctY!LxARam!^E~HAIN*ZoFjUFl$4?;CZpknKS5+PB5s*lbDv}3Yq_nF%*v;JLINq4|O?LV(dIcE zC_I5+kRx*B@Xh~Riu_t|62xWkG|3amqwsrDM`q7TmjZ@3o&T4`-RFjNIRrJfxts6T z%kn+xsd5-*qeS!Dwpun!@}3WW-`4PKb#(?r*ABI|cP&m`pEZ?hXP3(zrj#jjpiSZ| zrHgqZcx3`dv}i^-36$B~eudPLPA7atwv#4w|kcMPbu{)0sstjLx?Xw{)$NswZ?_4prwr29O;!KlI^x7vN%Ok=?pNn65 zH|9XC8?E1Q+%HldDFVf7f-vfn;F!V468jK!0^7(+c_W@Gei%i^rD94jamP1?^;F@8 zZr>zr`i)4y=yqVCNVPeZ40!ER1U}vsnP?rg&Ab5f(4YlHs{;CUNbkI8r0UrjorHA( zb0sk)4acX2A->I(ydCEQI_+65A%q5&S9IlvwQWSVV#~MD5;N*o>{z>*eSp8o5X?N! z_9QSOfvGp8c^DMuTqGLFP*Y2n+(>h`$J&;c8CGLZrU${DxrTII4BEIVJHyW#&40rN zOV9%;pJ2szm2DK0!;2xs&7S`B7X@SqUQ3%pdLk{_?ejQ;>le7Z+(Pbczl`XXs;Z~G z-cDsJd@Q?lGjrnbm_7UPGoT%O;aN}9m&9C>6D$k+PC&_kSMHXHfzk_m$SRA6O##s& zLrTrjmX^Y6xIZ!jhgI%2euyrUuQxm*H;`hFcJ&ED4btwH_%<~DIieD}#gQVUUA!c; zT`D02r?pkhh4%JgvISmXS9w+}y)S1lvL?{XF-4FRnI#&yrc)SKNI6gs6sBj0>->7Ja-z$K!eQ z7d}Q1eMCdFtTTIj2wU6;@!M!#L(wA!nclC&5;Z3ETA`o)D*F0R-x@Y$K{3d_jmoMk zRYyrgBP@Sc@14XBG6%lG?6J9+%3Hb)SRTA6i(eJ{hbYP1zn?SdVqw{dr;MTJenL5tB5<=q@khnlT%Z`W|4q(!)%+4m#RKR{J#Zrwq z@BwF|n?#$ao(h#vDVI5WNkKAN>4>z&XQn7Z-(!(sj@^S&{bF$>CqbRM2Pz+{is{+- z9dCq+gL;`zN@*ky@B_3UtWeA+S>oZhq2pdRUE9`0R6qaXo7232aSu%)x+d$P-#IfZb zvGps~mC;!UwO7aH8;03CcFJaN>n+mY3~olD5HB#xt3`N1K*z6QDnD_@e}mMm(`>5h zX7n27iZrV~srKU>;cP2Y*uWz*7{9!82NLBkD(^l z{-&E8Rqx9$M};NF2(7uMQ14Br7Bh2Kc)amH_&crr7)9enWOd3L98ZYlr>pPqWv#wR zyPF8EyIqj-5JyqAI#R7OSN@O#CW&Ee?h|TLovwED#*DlrkFkCm@jmWdkqZpdJz*;> zf1PFT0Y>YJHzi!jl>$fZ-ZyOSZfBrhZ?m*d*4ur&AWF9z@F&%6{(y8U+Q_N)B{Z$2 zaV#}uEZJG!F!;)@@m2NoNrl|db*nks?qR?-3BUPdv(Yw1W;1Q=_o=^xo^*tZOQ$94 zrD-hkiz;0fq%YCL;EJ1~8tql6H+xg3?SNDh5L1RiM&hW0G1@lSu8uzNPK;jZM&baM7PP+xAYyFo_u~ab=Ic8PvkXg zm2)?_r(DUQ7+ZA(O%v3cDJLj>VnBoYrFtc*RHcnlJX7UV1CL6tP;arUvwLGT<1%hd32qUFj1kW$W zcTc^cuPkw?1ZE?g`U>RP2$bGQsw7Vq&g*OOJyyHm5SOjln_+cBnN*uZmg9=PBgR<7MT&IEc+@j@NRW9U_-4JH|M$roygmxIR!gw3?ak`m} zmENV;x2ZF<1H2ZA8KxEK{D-}WmhUr*ra4Pc;=12=lg7f+QrKF8^I+TS_EVHxyK$zuGw_1o~0iq*4z+1y9{r3>fBEipIBLENZYd!LR zA=|6U+qx;QAZy;yvf648;SHr2`tLC>9j9gI28J-kKV5zNdH&723n8O9tsA1>C{^xXb98 z>#g$aS?K;pAeN_eKwP71s)2{*(!AaltL{-Hkqt3fB1MqV@bjML3)e|AtLEyA=`(gjQ| z=G+eX!rJ=mPS{Y%`c$z2vGDXJK0Qr7rjehj`F1NKZ1SJw0eCI^Ir6(FtpHp#SPI;F z3>aM`?-O|Ow>2^h>q402IkN&T+S5(5SkvS49b?wgES&G&yJt1y-sP5njix+i1!H`0 zM-b;k>K%1f1-9Z8y$A)joh+($Ng(9YxHh=}+goPFjL=Mh4IlV9|LLNU00NH*T-=6X z>kBP3Q`^lu;7?Z2FMg_pX1yvKK+YzK#%fog%pHU`G~!lJXK|G@{vMUx$I~A3l}ueh zmwo*0aP;);(Z^x>cfsPi_h%iiw{-Uq^fc4z(o5QFhF{{FP+VeSa0BR}dx)7>r%TNw z7jP@|0?PHcT+Ea69UO4?p0^{=WAxv*M|&~H22?Q`Qi5&4>3TnRI=A-e1Ja`nz*muM zE$_*`KL?)m((Ju|Ct9zYlU&!UFz#K;Az<{wB?~nxxdE9Sn6_PJd{b0@^;L#v*JB1n zt>ASex3k9-hb|8qdUCtK6G^#L(a@@H;XC8L|4a+awz-!VIkyvJNK8N&G^Q%+5Bmqg zU17{md!Xy)3RMU|>YcO(ZB&yqL z9L)E`TI(dJ~udjD1F z5T>}OtPrs}41{L0?kpzA^$G19| zAoj`VB$wz@7-{XXKZ$fHFU8g9rXlxJ(u7Un|daNBjXN1uA$@vn(>9gA= z6G9M`CYXC$f|llt+Ej}Xc8ZJ~j(RGwfEPZ)A7{s##0ULTdqs=;uKKn2HCrMf&z74< zYJ^o>O+PNlr0C!Iw%n~u$6$;WGeeR0c(h7P76CzkFnp(Odj4{Z@+Ay3{XSS!s6}X( zL#Ie&c%U*oewEJlfBIATJN}3~hZOW}`T?vD<-H@)AP(O>H`&)s`c$N3d*hSygs3FX zuKtEB&ZN_eFKvW_ijfks(x3M6cQl?J;@#c939-?4e&4? zR|7hu1W2I4HbW153TV(|e1MgL z3^KVbO69o!;I4(-Q$ckz^kdi%2lI)xFP@!+8xAM6a5D8k@ZGI84k?+R(;g%P}gQ8&h*M&Mbh?mv?)hbR7dFPLyfF-!1 z^9G+0TTM}!+Ngv+Wlk53KuU~Ec$&E&U(*A``Is_7dCTO=R(>0wpgyG*>XccqQu7`C zr5dGof-w@j`lo+`HH_0^|0q|NUsvzU17NnV5w0%rM>JOe!~cxev?aqTiF|oJYs^O3 zjV!O%3KHGwvBY9hk!A2>Ff$6B5Gqkv1mWRV{6%@_4jjR3C7bcP-}}Nwh3Y;D zOy#7_bzx-yAZR%%7gVZ+f!c#cI9z?}e=3Aicvh|IN+?#Xv)dd``!Ra?|A3Y#=mr;LRoOZTRs0; zXwd-)`3snl)6sF(j0gbY6@BUQwBAb_l&20|;{CL?C({m<&gRXg05 zB%;f}nwK9z`QaA8Q7yxz&A$bX|6_+A@G-pqXbO78TG5N^c2Fn8Jf}@4m(+b)7^)

    1@E?!+V_xGqHR97#Z@VFqxTIK;xz(oX}O}KAUb?KvO4Vm^_^tW$`0luMrF(zPe_G za+#yW#ndH`$xlwSvrZ2`a*`>st|Sj%8<>~YDF&o07HbN}L9UVP&9wHb5k#AZ_fh_K zMs%i#qk7Vg{db{C@miz%hdej=T`Sh(P30cS}ZPE;J>1n zO4R*%8`tf9-yKj3gWa|bDbamN%56y$ z2~yiJ>l|`Lun7Q)fP>Fe_1nhbdttpKH^ytoUp4=n)jG+sJVom$wrlI%9#HR}u$r_* z8WO4*Z0Xt=*(vlr-Ri#e0j06e+UesNM4u92z-nxFn0`HPWQ8HwrDAB5gg?lYM zf^0lrA?)Ar#-B|*Ux&)VdiY+Cg7ge^ut&L4bqI5AQ2eB74l*Hk2oI(N-|sK`ywm2@ zsptUU3DGLoAV{XjS()wiHXc7bF)`pXu@2$^ZbE2kmos#se|W)yHDu;twrq!(Dcb~w zdJU?DPIlbVCv^I+p6)S1Gl_pJh?N@W>z-xBglBj{Z9orR(EGRnrR*Gisez?Uk26B~ zmbR#Aog!*%wl({wBefQ*yV!`3na%jGcfh_Tn=O0XQaH!;n$~HPH`|nb@4@K^rNa>O zfCVv2Pl^-&aWzs=(iS7C4}Aa2cVVT40kuvrVNJ=JpTtzBnee^-`8Dn{`re;Ttm7dU z=|2B?4xYn9nZH}WgwsT{Wnzx3xw?%LIlg&@iV{7-3&(kxg!w0sL&)c-hifkn2Byb&rOT}#Zo6c8T zm=I4lKYuTYjczuDYQSi$zHHh7;BjnegKdT2RynZO9MS^Y5l1^+8o3kq_-a zAEk4uNa6YOnT*U_m=9%r?J@*6fJqXQOm+k-afd;@LL{$x9xUfd))`c)9C6g?j6Fe( zL;tC4^I-bVqh7}^?WD*>5!{=B`Bh=Rg203~J_SjFN)86sLi_`7`x3CWzhcUSFTu{} z>$4#1aBL+0A#2CU5*9WigK}Jm^wD09ltCX`gTJZe_14ZbK{_3Phe=RJ78hQupQ(;3F~V_ zO#J6TJ$ifxFk;grhtL=O#-=Iy`QQI)N^MM$kc+r!B0;il5#ECax7F6ersy*-&O<}A z517^q>POV{|97L8B76-u!QBKectS)tgcpWVB zr$YG-eHh!Ug>~rgyJ13iKpukrc7qVAH968F-Oo}N5QxettNOw6P_1gTQ0B>7{{2Z) z$hZy-#s@Q;4ODR~cV-Uzkzt4u-+E9QMU!GZ2uR}zL6a7JT9c5=(OfixrE>n0;YHv7 zkrbo)*M7mjL86-yDJJS8ew4c}ijl|BU=hl{G!;?;I1jSvKmRFRjZS3zZ64jti6$95 zB|>qD_}K^3iDuA%frZ$W?O$4W017ByJrV*45VC9>dL%Z3#}Ja{7O5RXITAmO*CUva;NE1SH@_{6(c?d!n=g(}mY$%?-v(6OGeAZX`fA0%0O<2=pyu*u$ zY3+r~nN=QeP>$uA{h}j)&@Sq!l z9f)e*HVBsH%zdK&a(G0ux|yQ6P zE^yM=a$z~aNSb#WdGgb6Mxe!gU=0R%3vRg+Qvr@AX)o}-e(9M0b34apK5UdmTa;Fi zg@g`}giwJ2dE5cL|1RfxkJ%5=+gCjYiz?+Pu_^Ua8<*M_#D+&Rx>^r&JIH3v3!WrQ z$cc%=R0|8Du3{T9gE=Xc-vMWTJ340_GGpg?W*85a$0R{38%kJv(H=x%8mD1D3S7Ui*^IO}j+U0149sU> z{bn;vc1$-Dz3_Rp)EM0gmZiu8G!wN8oG_hRk-?wF**ld4fdK~^WD|Hye4>;aDUaze zu-7j!j}elBQn>OP)EsC*G6`{wWOf0jGqRyr&?G}AvAeNB0Ml5mz(tv_Hp2(~UObFR zBo#F;=k9Z4wMorvN;Z9i0f**95)w9#mIHw@bP79TolXjh&+>99e)Rcp%* z{UweD&b&-3GPYR^y-le63Xc*@j*%)W8VohWXLLKE?FRh+s&1lQ1V~G@Q!*(bmDB8^ z`xACp)f6<)d(D67#pJ9b z0D1OhooB8GK=^YC{awA6My2~7>J11x7@)?3g5z`vm^vPZ0ksoIt3YZ~)L{INkS5JP zd)WkOLdn@@-q!q&cyzBVNGx_ylT!E&DDn6p!ER_oDfeMMMq`w_a$xY#nlSxQ^}&Ti zKaUP-CPkrI=ZQLn`8LTD4WBns4j7%XG5A1Nd4Q!r4pA$EsjsG3$Uy8H>S5-GB+W z1Iq?tsxdk|UKYm5aar8FZ`za3Ehk2wct&r&hs8L<$6gRF<(((^Z}9=Ij$X0fvIq8r zprk_n;?M`q*GYig&DA2;7csmkD1!W}f9V?c9lOGaPLy9X6cl{DJjw%}HyD9|Ov60F z_qQQOxgGu2D}CHcDDaB9inK4S0rtjS&lDwN)~g*3jxitCi?bdpik+Q<`UXio>$6u* zE(qQ=wbW_2>*v@(r`CXg!9*al-NW%=j}K;z2M zd0|q{od?H^<2m8$#DDO2zg`9k9?W!6P+pkabtN1P8fMKkIkTzi7dP6Q{ZM%~w>_$y z_C_@0XEZ-KnEwu#A3uH4!1 z77wRK=10&OG;-vm>Af~t+gW}63^ls&ntXDxMoC%R2#jt{S7gh()Bmk5u}IiFjF6)1h`t>gcwKt+zEx%SrS2=^y5natrUSrroeV zS{i5VF+f9zS>m%t+5rJV7dC_}3omgIi62LBg=skXukcZpaio(NEcLbg&DoaP1 ze>6g@MTYZ@Y8nPZw#3+ifJUUX1n!9+Vp{HNQr#RU90}JuowN)m^t?o z4B%QFq*d`C3;B9oX88VO*rNWfii0O;_w)iGn3o$VtN0`>u=V)&`wBM2Ivv)Ew*as& z*$Xg-G_nr8C2UWxRp3-?^-u5_rtk<%8`#Y?J(ANW(xFAhKs1c- zsHVFpV)6yhwFtU4VPsv)LbB|

    ba}1;Vj979wTkf3I-$=zZ?8T|L)F7-@*7-apv{=* zFJYd1j}6V0?1<#~FVBU#5_*0Df7zgR4Ny9C2OO{2fBEH#bmH{oZNruNHa~^m0dx%j&-&IDXHmD$kl)4S zLAsvZG9#~%VJB3ND}{aG@QUvN67bq+tH05%{>2A7yVFk9t@=RRjd~ERC^bn}6nozl zzstv~On-CQsqu;`WR>^(zTk%idP{OG31H;k-5bQ^bTC7iaC41Rv` zOSR)2YBHUYIe!#j-8bxzbviSy*CRMP)XiT|a$;}V$rm{re5m764+lSbrhth*G_?tI zr^oCp>vslCe?h(|(tMBk&a}q}Z(m=&2u56ppC?;;Erl{q;7PA?c7eVx&U8$_lnz_t zB0G7iYQW)nWfUn?_%tNZZp~kBXuHI97+StH+FN-yI*(cpbP^#urP#a1$yB_7a=@JJ zcidG-va6Ksbv+*!lq^(-0gI6~+kU)6Z(d92qQ}+*?bci4EpdkK7osyO1!ZI2sj~NZ z^<88~$h@p_Hp~oL9d8fm2Ah4^7lI6YZJTp?)O2U~J@r$;Z>@S+soqSAFZ?)1i!XE? zK4l|ID|!aZUv%~C-l~#s>FM;EmMcs3)@9$&mJ^>0K5Z4m>czpioV^w zDxS5JP;vEa=MUwjbv?EZaptF$nOP7xiu^qnV+qwFkBM!*CWbd}Eu31~`wVtJMn{{d zM#ow=Qa!y@av=t{o_P<}_{d9g3}21b>9s3nY?1CZe*KU<=rgdk6L8vPw7*`Z$f!Ep z935G+8y)R@;L=VnX)!RTVgUo+%4#pO0Y#zU|R!n~cMq`}14 z#~r_+1vw;X34T=YytAv%>WN(`V^+R0E>B{u)cu7Ud!2t5RqngW`~$z;`-#} zYU9nThWUkx@$9Bnkkc4!sgA+fxzn)iKqsZ~6$AGZ`*D8x2jLe_cIxHEMCW|OsX0~~ zyZ6XDNr3SMN+=pOjI3&l*X#Zf{=K9L_Z|g``mK6-Z}hZt`9v)4@MQH7zti*k;V1}} zgsdzGkkVMjR+mE-7B5JihZZskZWtWCyqqiRa|fO8_W-0MAgM(WkYz0CvtLRKl>Q}gmR)8_xk$i z-UG%m!aoXoaKj$wQZ}A0^INR=F*1~yGZ{P>?1ONT2)n0eX$WS%ow zK#GAO^%_k}S=hcfK$?P5me>ORmqQQFYMLusNJC^`8^tdeGhu6Iw&J>JFzM<32^tbE zRn*=H2LdN}_sJiaBZtj$;sy}(gq@p?7@n7QC`h}eVzt#uvsj?&C{>Vvt74#f45uMT z_A211qZ%FbZ%;k|*wNt@s*|T$QWyDk({S|F%`KsQ+;Ai*vv$WG+jMYf+5L=SU&FKu zt0eIEYe7#VrrPse9)3LlzTF5YabgVnnyn)h+cW1q^T(!g~L%+|Jv7o z;_H!qUP`-Tq;3oYus`Lf!`<|ALm#q-gUg^Yk4hl&liLvfoLC}4#!hwB9~&mhIlXHO z-Ej%Lz1i7A4s-AMxa_#-ej=23^5A=YOY?H1`U=74^O~0HNc9~6Uc&4@E{6n>%sJtj zV7HJ;J_*JRXCyzvdNSta1msQqSi8n?ESo8fCw)XJK|Zp^d)(kp;dtb2cC2_uxFggZ z99{A~Qye)6?-9h%d49ahU4_1&K8y9ylfsh4<2)8>uS0yd^C^*!>vp8`+E{etwZ}*r zLQNI$35Fat4mAN{QsUc}$+l@q`33Ry0?QY-T@Hgr*df0PXHou&z2mtrVhvrA!P7r4e-km>7_XIKTbwbkA7b61?5M8Z z`6|Z{ictnctbN`K+(%oW5s*>D_-4_w1ob8|}L6*3h>|Xomp?FsTRyPdEaLK`spvm%z za;8r>NT))jUaJ0?Yce<;QN=U9N?jNyG7pJHNE-wA9W2UQ;A4wOGjA0F?U1L0E_;

    (OFzcK}0j4%pGGR2W+?SrK-h^3S=!#bFp)n;4%pArv{E*ywDx-Ng6nGt8yY4r(?no7V zR^QaV?&7*uTcteAu=7-tP=+qsuP5(K4?YC5X3>u@hP9S0_I7%a!@irN3r{L%Rteat z%Ma2$W%)(6=P@meFLE91eGG;6I}quphzfw^K`#>y+aZOEN0t6Xd^?jb`c$9{Gp7z8 zI_xN?SyWN|5{^I~5Vp&9&D7}(l0)KZsyn_SQUEZm|MZ0S*mzv ze9Kmbhq}jnRg}pL$iotO^j6bsCIM_b@yJ0QNs#`)(s9YR_7*EIE=uQXEB+9N7`IJ> z=p$G(tGJbSjQhg7>mnwU#0kWMBA!o_Pgwm@qcDU!79 zSjPa&qH0eh6qwH~?C+ra1MK-Uc;t*gT*7Pf9FpmyOq4L^s=4GCB?lja5(@G=CeF6E zQ4>lN5;a@(gubP4d+c;b75`iJ`xr>e`Y=Y;CyCz#U$}R|OSN7`OL=mDp#8Kos#Qqe=FLvK5AY?5p@Dd99Ik6Rdf_8(wSx6G*OFOgdf98e??$E)N zZf};_V-tx7a|`I-BX0N>%H{nDxt~HjjDBm$R%5jF)0*HU|FChMb2JaQT^!hUhA%Cp z12_M>jOEQrP))1_OjM>$<$=Du9voH_9lw?n>7~A1Ze!Klv|E-bo#)XRCDoI2`9FfmG(x1 z{a&d+_Lm@{p35Q213g!!WlTK+By)~a1E}wH9UbxJ?qB=BRH!<)GldN7|GxxNB zFwA*7d)q0%*KDQh=mbf-V`K9#0h+#nDzv$&Z=6ePi}g!|zSoy3B~-NA9R24@>{o9V z_8e{YH^aZJva`ssS!*W|rCt|aSH?jGx=9NB8pfP}0-DXm^OSO@{K-(l!`~5V$tx|* zq=c;_&#MKGooZKM(XZS2zx@N*F0Ntpu3cJ*#V@~XYd}^~tV8{1aIuXcD8;}Hj%hn{ z%I88Tin#^#4!V3%r~i6~*JD#*7+(l|Y(a>y?wBvigRqinC!6gtQZou$PWg}9NBvj5 z{5U{@l$GkH?^VkEe63E^p{d$oOikBrQh;b<|CpwAZO`9QKF&PWnNsiCwdKf5;xUU> zP7io5Wy~pNCVL@1ZtfkzNNszoQ#)h?@=YPfKZpny&C-(iZgM9kn?jF9o1Zkk)NOy` zDjdCAoWP@!=?d5$$D#nN-6=^BW(=-FKSs_EO=Yn7 zNX>8Ul9O5{dY1OVrA1D5^$K=!$)l>@2BX6E$TAqtFkp5|t=g&)xmht3Yt^WiEW4_R z%HL>OB3>&BhjIDl&}I#k8?(A~+$9rn?G;0(lF1HZi(hiZ^fwc(LwU~~-G_-cCZ_;D zxSrZPEQ*Ik&xCJi%dj*q3(cOnMbk+R~0SCt<6)bB@D^UH7vON0*h)H&&A5RS$aC;Tw>lJv*)UDzWinv-5TG-xp_3E zY(Fv^fG-0y!kiiCT@5S)A4U=g@Ed{OtHonDmWa;Y3fU0JyeQZ%GU$R}gu$u*4_j{; z7T2=04MTun0fGgByIXK4xVyUqcXt?^;2wepg1fuBI}Gk_gWDkQ?ERc`edovbw`NUu zuhm^$cU5=QZQhF>Q`4jXNhxI(QQBwtGyrqpEqvd}XCDH+Va;qOCTA~CbM(jI53-p> zx98G4Le;168<@`4`tyG*Q`oD!XSK5l1V4S^6sxB_bP7swS7qMWT|u<%&TsM#TIi{k zm@?jKB;Nr$@*2|GIoZKFbgK4KadfW_a@kN_v4)hBq z;{OQ4G8H1+o01a|%NG0&`#?yHB(vDAh-Yf8LBpLTH_(Nf9pbtO z?EH$V4_+I?MK?VUV*Gc+yB1s2-5mL=kXK9rbUJTJW=_j&IvaT&LYCyD0HKqVweH62 z8tQq8q2Fl_wEbuQVRz5IcVpK-oWow)>f4gpTVH_rQ|7dplq52q7dn&MWjsMhNj5y; z%p--z7kT?y#j)Lzzl^XwhPy?iC!5W}A}MFDlby?Jck<70Yz{9sFj6vf#*vJ#pA$k6j;xxwpr8jqV?nR$LCPE(4%lj&G7-F*rRcH7>APH} zq5;mcHmyoe#hZx>`Q<{2{pakCB9>vjKEt9RvZ6gorQB=m;!`r3D&orX4*-nQtG_t+ zvurQ+-kMw6P_nDJu%(9!V-=D_?$TnL*=)kbi3s<^`;d}LpvTbBr=bG?NMuqO%|bl}atqtRzi1&HFT_U_=93)zB)#ngbRMZ;b6zuS0%WNjUz^4PRu2V#e@ol+oAq{J8@Tkf6!epiTQKCu^oF;? zmps-sSkde~^vFCTw13-Ij7|a1N!WKeA)T&qvdxY4Q_BV%$m28;c+UK6@85#*=VcWc zfg6Dpzn=qNy=x;J;?U(^Dp38A@FZEK^nJ*UGYIFQDgUXVlptvly@7xSjo@!43Dr6iPFSha4TDaY^uHH)^ z{~--^jkqnl=lmc=MhCZ)RuO{(a4-ignfyv1SD3$8_XhTE@J`S#4=;+;I6p2r!!KiD z&aFuKFF!Vl<8>;NNK|j$B$p&)HVB=3-`o^5SRlGNdJ^ZOAzgKu%W!DE{iu;X5M*vT zW^$a9-8{yYh)I`B?dW)=mDa&QDo;%Jqf{Hw=C(uytMU@HR0nt<36JQA=q0f`g~@L9=*Rj&7wb zqqI0Cf|&=(>(93-VvVQ75&(0NqXEEWt91}Au1aO7ZnJyqK0irjw8-}LtIo>PV~RK6 zc;R=!#PV&OVp9uanzPM&#+-e}fo5y70n;P3YH7tnOEZLY24u{lGR%hc8^1r&@-^1> zMA$w#!dfU$5RNv%SyaO`1MJSbT8nD>bBoYZMjEG=qBGY%oJA9{H;2Q6?f9FU*`spx zt&VAlNJVdhe~Qyy)%ypTbv%UsOD&!bpy7o9u>Egp@wwhuEO`_5`YC-qsuAiYTDK)h zEOl62#Q7(qZiz4J9OMq{5`*{eiUts42{`RKYep61%%FLn8F`|PR|+hUYoH}og%-r&*E6;fQfSq%V7HxR86*|zII zj4DLrFVMf)_UHHRnwJNbh>W>d^+rF&4(_`@c>nUifW`l1|Di7ewjysOM}54MLd`{( z*p8%x7)>E5Yz>zbT?msY&Dp*?i;B{fsRH-VJJ{M>pRSDnimUekvMvVA?~}N_Q^ft-O+))cNR~R_hh! zc9Y)xLY#bJoco&Ctp*lXyx3S%!jtFr!&=Q^!BqOvd-B?4KdMH>(|;f~vPRb&)o?;Ek=1N=unH(!m&a|kJUImHzX#rTp|DTp7rYbP zwM!rir-tJ`$s*Br24#A&uJ}lEgleq~uo`yoAxvVy?XC1w<)HA)Q3M9*iu_Yk@?v*; zqO0@mq{;z6#sg9a&*|FJOXqvt&oUO_9kNool=0ri(x34LMb@-+X}eb~6#)kqP#Q+o z=}jQ?BSqP^Q-Ie>f-ax^FNSSJ;O8&IO7t(_#|z@{?#x^Il*PDM%O+N7{86als2Zwo z$KekCj|Zy`_(}5u$G4yF@_-Qrf{k0x>py9X2cjc1IP^BF_M=CEd(U6T(kW9BXEbeI z2M<{}4U=jpF>Mkl9X1I~s&Bp@u$0ldii|s!H_f^!O90U8Yjjk){$?%i9!Gj^Sc~q`rNoQq&xYk_pd@Qi+9VOW=@3$bG>ZnOq}$-9o3{#TMC?D+>1Y!A zr3}zd5??<&8X&}vQ41XFGubFh1CwKxvLcd`y$94^ETDNXZaty$w5NgW0&-N6WUC>b zqZR^{2mok&t;?0ljrXUqafwyr97HdY*K`H9WOVQft&d4wKNctt71oaB_6Z;hr$N|L0=>S< zl@>@-c;M$E>D<~J%`VSfvTY|zNwaOuw&DrMn*hQ!UQHk+etjkd3@RieCRAMjsr}x? zw1ymN=+wclGpZU}uWnu(MW(@yerx_qRIADM{S?6mo^mRs;x594D)8*?;o8AiAD-$c z0CYu>n7W_ay}*5|UGH_~Sk%;y5v?5FaNdZ|_Q$V*1`o$=0u?#u$9}XoURk@}X{K$@ z2mn@-I(%6}JIr73`Rb$oDjqwoc{93+m@sn!Z6FtWYE&n)8fTQMM#yQ0rLyV*QJGKk z6fqiQ(RR`^qCd3d6 zP>bSJO7%SYV4P+=Q>?8p5K(k0E$6Cokpby*M(N@R=4!Y`M_n1*P#N}W%-svgkm7S~ z!dfmf^HUJ=h;;9(6v<9ic0T6;A03)knGb+J=$4HmkurElB_>Fdn6UW{wAP4APSc&q zr1Etbseq)-)9)7~#@z~J)ToLRJJyF(K7=MM>k5^_f`PHcV{#Aa<_>m#&Wnh&0Kfz) zqa3y^sEW6NTYr516Ib*BSFM@#Qnx-GALlPal=;@L#%q{t4U(ByLPgih#fh~=Aj&$Q z03v`QQ1utvc+QEh4K?z))U-%-d2gdQ%Ba%s+TOb{|2<_1L$l)o!GQ%v(m_LCxhQd! zLUFuqU?`FOKtSKM;@RO(5zKk88lX{EEUzZ;YYA7B)TnN0MruJZgR+;T8?d0D{NFvw zQAaG1>64?&7YJMJNuz6QMPVj9_v(6xG5PpQyM9GS<+8ngAx;>XJkNHova^a5Vu}ug zn(}e2C$C4JG2s0XM+HUB>6ceRWoS3-gilLe36JhXv)bgIGdol1G`=CMO1YTB9B(M!tBkCUi(w2-DrkL^Fbi%g z&R3}Jg^UbM84=ZHMgqXN-*NA!ry!eHQ?PfQ5Fs%cv&mIdX2I@4bnw~1=xCspDtx!0twL^4Z1c^Zf~v=&R48*t3GH?9UEIGW$2KfauVlwkeFao~WRd8ZP~P*bnX|45YW_NDL(rEpuyouU3t^t(`37Y?THscF$ItX|wg- z<<@66sJ6wNVtHZIHM|i00uWh@#e1cU(JcLDYhtF9oAHH<`CfgTmWN=*j{=suCZ0l4(HVJo!D4fZ12BQAyfVr)ko|{(31tWxZ zD%76RRcEN?H0O&gYc2#Eru65Qi!RrNy(p(fBY}aj(=|Y@R^e~PjhorC^Df8i2Mw_e zLs}nZD$u}|`=6haY&Mc}SKmC%;S%~j`F?V$6G!Dn&!UoQaJ5fGg%c!;^*y^Bl#EC4 zg?){WvqZy4ggVLX2L$}!LWa=8E0D$JpIv^5AweheI05yJHNr1OzKZ|!hao-FS( z#?K#8uAX&76hTFWZ%m}$=5K>YucH0jA zDQ|_~6+1yV9CiMhzbQ&p0y&XP*xo`pI@exbvZpGCU)Di~Dug%%dHk!oW$;Wg;$gBp zTgk^PBapKGR4_U%OWWN8&{KOy6dFWs&(Ju0J^|73%K(zUx)(ubpqbGjRCp0o&j_*P zr9Af&kTesV=5CD@{?R)yT~=RFVn~s?ZL6o0HTIDmx>|OLv?$ubMCImo&(>3MGK{=} zBIZHDL22lA@|uwAu40Ns9ikDrhFoh>O*l^Cl4DIzbps) zOkp8F2f&Mc6|677=O5%FI^5(7aievLeBhJ<5)b(?Tpi1|CO_i#m=0gbVOpLf%vniw zN3^jM;OD~Y(IjG8AIG;ji_yYhrnM1Xe69Kh1nh29%!Fdl3bWWy2t_lLuZXRr9N zqP`GgyJn3RoD+0QpbJA3pGl@2-5+f_b~w-hFw;)$T9wEfeAQjkSXy z>dh-ojP(;*>aH-N4S ze;bC0x*WK+$2rXhZArAft!qza&ad$|0sOhIXGDSY{FvMmL8CDlyMecpC)5qVtSur9 z_e9;bt;IaL@KqdNz5XHK@1m*F@^RgU_n2-tu-lBkfX?pj zK3|9`nHe7#xDe=xi|bT0R)u$MT0<9{#wMS9&xokDE6pG9*F+up>o-dua)3`?0hmCx z;Lp#ADK0B|Gi!+wl*A<46-~&8g`B?|a|Stlu!la;mUGjg6N_Um7T{FusG>E;+0>#4 zVO|us6JGxGPLdsJ`MdHb?8=SNhlhm8DihgYp_QI!3ZY0DpAzFF)NrQIP&9QiJ1hsW zC{S$$T9fs&lg%+hjcA$wRqR?A7vO(@ACSYRyu_dYHL|wa6M30lzrM&fo=?AhX{mXH z?^nD57sYULT!`1kwSkafB`eEkhO~8bO$TlD*Vk)2RMoS6#^XixPIuN9n9z52p%$_i zTGaL#&x}Q?j24r{HA-_F^9efhE}Q&*?Yd|#G`s#YP#c%}4%hwaJ@ZssyE>g-FgPDu9@Rp5_sk=4jzN6$yo3Hh9BpL;oDG9b{*m7mH3!xU+n4 z) z{P#>-)ho>)oO9>2a7S5jzra;R`WCz64H#rW?8qIrGv!pbJ(Y$xHQ zf%isI-8~591%!UzBYuiVk;IaI+ZynWN61cp_HoAA4HX6Kn8ljBMAUqX-%nU-exex^ z;J57GXna!!;A|!6zJ#^3y3A{S)H?TyP5EuZ+PTq^6kWA3i5e$mt0;O~BEIW4LpS-@ z5Z<<&a~~{gyXnYP|8jff86bJ=pstpM00o(r6K?r`giOA2Znt`y;z0&o9|frRhyrl z>YB2yx~{F-CF1hZevB?FJD=v<&x!=6?-C>#J4x($!`IX|Dm={ z<$j<-Y4S{_@&1syTt`g|_yVJ~s1t8!JA#Z5za753V%IT`r}gv>EosX7m0D}O^x_0B z*9X3C-6e6rNG#h3w#qCA<@Kqe;624CRmECi`{{OUu1e8-#K{kGBVk);ZqqQw*T6Z3 zspt^zmr^9-9nWg5mQ5!0G??-uNZ$W#Xi5>__q<8{=3D7MGPswhnN#6rAJJHd(Guc! zAoTtSo&$BR4Di3dzGoXqO;cIF*KwNB|M-+SGl@KZ2M1qM zQi`eac6B{KaC=yKQ1RtDIaoI{YKFIeDg-=0!M7ECFfG$I5W+1yLjP4j09rw)xToa4 zl`s3(mcCsBdjyZEwe8CEhTwO_Kd9Y@MW#5Zr%+Kf-wA>`?5NF_Dj~)@V}tCIVej}P zpy-vd{iceP%21a-ImE%Sagr|M(R|k;Ri7%R@kPjR7#G1R zR0>GnVDhOd9ho2SBCcI@wGaFeQ=P61P=5TxzJcF1f2N91d~{y>K!=po_kBGA8Wmfm zK~Kfw{Zl6e@o+;XqJrv!#Ej1ZY~iDnhOFDIQos}v=Z7*KC}MsrhL84=v~woM>a=JA zbSDpa9zMk?E|qUJBBj~NGc9ewz`(*P8lR$4NL}#bwGTsh#vFh1TpZx5V8jiT0rv{x zJxw1^6h1i?$CvIWwqjbqH>u8dsNX7Z1k#dbQ0`;Eqru?{u;0>`CD6%+OaB`lIH?LP!@8hSIq0-dCNC_haC!1*Eq^^&05{kqAorVS!fyhdl(3b z(fU@EZW+S_Qd4oOA=;#U_T0HX0{BLDH;rzT(M(g$I+8AM^hhegJ(e5MSC_(F_Nexl zZ~3L^xT4FVMYbB;+6$>$Pc8^)NG-6@@p^bW3QXU+FZ-xtSJKEIe&Jq3DEo??<-^ZS zMC09d))5)xfijrz!79H@y`ThJY^Lx+VXjf4S!z%dHBhLs#BN#@QHgBxacjvXp%OSxRw4bYI$z zbLaBnE|m%n^j?320@MT`li|^Io;z2I1`+QkjLB4$oa82vUIn!$ji;uTrbYK1Y8a7 zNr_5J_`Y@L0z^uG$(|@=zWxfIj1ue>WqUnouL}D$h z;s!IKW#M$FP5{puN@d;6R;?Re(`_~lwr()=Y8ET`D*WG@0Iz)y@3eds?fdKegJPmW zV~s@zd7OtPhP|2#6&#)$wEa1ST>!6Fujl3KjVwYR@roJ7l#drGHs!i)y~rS?)>%%F zilJMVWyb2t50f1Mt%@w_=MlTfbC0GAwsc^&-ZHS28T(xZ`(+8%^ig1=@=Rs3{m zF=vK%x+&mKz4Y{dh z95DQ2ChgAX<1NCk{DMUJ(8@nzEU_2&kE@GrO-?l~h_U3K0G2~@a zYy&gQk^dFZ>h#d2>_NO24?f8XDh<{~NSeeO*Z-@~L*%qXmLUlv<<9M&ES-Q5EJ!h& z0%k_+<*VxO0i?xcT@=K=aWZ{bt_->OlBkBssFLVhKc`f*SCwSyu3SN*xy;{()_P!C z#n{W%V^wgH>O<%tvZ0f#N0l}iVyKbK_+gpc7stswdv#hjunxj*Yyh} z~KxsH{k+QR?1gEYIOvhAMjlLlHyxMRnt) z+3Y%#rM0ysp65L4Lo1Y*Z)39QN)Mcjj*7wnDv=WFRK4}mT$QbN87>sbtfA3>e?Vv? z*(WV}6xDfn0jxW=DMB!`Me>L9ut`*1{=aKfq`N=2hA9 zCEgvtoB9r$$Dqge{Z6)+pG}^yD{cbW-Qm%D3z2kj;F71TSRgQjaS)sy><%|5TMDC4 z;}TJmYM-e@;|a5Kgo*@u5sTG63|BeB9%cAJMnVU5=hV?3zDyS+;UixqeP2V)S^Q!?Cv) z1Wc-?tss-Zb&v1TgsOs5IQERbrR(q8wQr z4dRCGfq{~M|Bicm(K{`M$p<|HG_&IJGJ+qBiTM$p_C--%WXF-b_tDG+5?+Bx;w#p2*KN>DB zA}M6Ky31Waqb=7F+gfV%O1Op&4mb!3Lqj>*Jf2`ecD*$w!K%}*G&8LO6kWNqg2IY2 z#63*`vVNxlNf`_?^{Ly%kaF{Z$Tla6LY`Y>F{KY}D4{?!;(<>uP||FN`l(aMXEfET zd!jjt%yvP!_0kblNzTH07nYZbds@Xsjk{aKjvSBh1Yu@a8aQ?6cHd>~$Gnjgqc~b( zgWoxwE4?qLV&s`L1s>tmP~M<5g8}7mt*r6IGmCsa)w@m4o^s6X4 z{j{C4`~uVAw@YJb(-i%!61GOXjS>Z8n8>O7t6A+gx_*M`i(g3aO$3(*6g0{NNUP!Y z5zl{g2bE}Iq+y6)6ajZlvt-JD*BP-wRomO5$?a&ZB(;>|F!S@B^M`zYd{B_49>XofqA)bIjdF9*0H3o(*YN zNjoR!%?y^x)-Ll79mf1}q|C-~pNyECN?ov+gU#P3X2sCx-v9x8^ewi&g?Z@0K;`ld z+w~WC;kLa!E=ghTtHSQa%1|kO^$b_o-RB_pqpMgr+DP0ch&)DezpiEXUS~VU3NXG>itmV5m8M^iJEwmkW45!e=OQN->blsA1)h5gS{vaO8vZ+HvOPSsS9H)03MTuwPE&E9L=(* zr8n>ZW<#oo!ab<;o^(Q)IG;z+yNz`#x^-Fxd4hwEU6R16@+#|qM%hxZ!J~+0@mAZ? zfX#ssvXWvBK$%m@FP``lB^w1{dpsP<0QM$+d&Dpo32~Rs^=OgcK^T;SV4H%_13c_> z@>q7@qk>B^4g1hN^hAo_cb7rhcvR2oFp9=m66M^i10?u#G*2KT_FG_ne^K|UHAkK6 zRc#un1xd#G`vkdOnLzB2&x1l~iQCsW!(Nn|K>KZvWjgcn%Hj=qH@ z+V^-9n=ND&k5>}u@RE4yNu%Fyx^|BBVj%um)9p;|u!7;aFM-6s;1>f@~g?7&tH<9I!&EX3+xzR_3N*ZE6b6Muvf-> z;QB9N)K)C#s3yYVv@GPsIUh{qE%(~0T7*sD$02eVEsFqmvl$KMaTgG}b7kNLPJsrk zLlo_|8K{UzoHz&wmhAh^x0S%B0hF~kQIV);syRbm3ka{q%5W~jca)LeZT%UD0Ry;G zUs1Bk`9ob0w{-}>Zu0#a+WX@ZMNP_=h@bZm`q-c-L5rBE|LlZ@zkwVLMZ|u_f-~K9 z7o1pK&5e;Bo4xG^@KU@d0$yfWfNxe_7eBfMSM+q0Z0@|k4XBe@kX;b^LVx%I&n3#@>*doej zjwsOxN*AJk4V_aHba(SAl#%u>yc5EG)W#!*P8ggBP^cM*Tk9l|nQGjQ zD%)8QTk;rkE~=0xC?&H*63{UG1uFR`&85orce#Gy|3HmeO6cR4o+b*t!#(mQicg6| z?(Eq&6U2v-yLVYONlwF!I12060O!-@mqq{zSLp`oEh%X)U=B!UTZ z3o;xT16WOj>e~@0)}4nG%8mwc`TUcG&<`ozG;^|t$xKRZ6mvjc=pxv8z-prh;Z=Kn zGEo17riMXq1ts*}?Kc1JnA-v8C%-!9R zKHLAc0wGN?=8O}|Ua%8?9s(Td1RmP{KG@aoN>_8f_7Z(N-$BiMHK{$O;JHvAD)5wV z>^*HUP5>sUG0O{im^&{Pd)sM2MAYf+3UMJi03!u8>`i*pV;Ql>W<6y`R!DxbiUz0!7hZ0+H`-@EX_MnWXArf3R9f4=*r2+wE zjf-3ZnrG=PbRHzW+#nSh192iMA%0!yfBm}b{FleHIDgPSN?s-G+E5N8gYKQ=j_iGC z43Kt?kLq>B*+meArqL$G5;~Nfi^|mFSx{YdW#oAYl<`oZ!O|1i-oiiv!K!2MrKy9v zDU$`aFxqPxcp)1s@1~4L1QJ}T5_fY*Z`-|$Nz?q=Mk2h3{N_9*QLA=b7tQpU#0&M) z;P+qjoyG>SK>cSV)pT2_A>9oNk70voK-t2!bmyDk*V6{Wf%=X7oz)8N|TuV|fA%j+Lk ztu_}e@C(XL77S8d59A*ifG*0NOB7-5kQJ+MiaY(Hcgtg=R}UXyR8rF6W80JdJco7x z^U`ri1z!Kz-CHJTv?`{**zoG>lV_aS=CjYD|A5{UcD%qu$qDE; zuHN$g&BTpb?Zs+OECX|blY{?&W$>#W9Nl}0v7(bLm7f^pMs;e;`-fW&9yk0Ls&7lH zpLA)pFzh%l60b07gGCMpQ~sR)YvEYm6q{Vt+6&OjI8MyYQ_!CS5Nad(lvgV(ASao9 zT`^u5a+G*LyStDEU9=@$RiAPJlFjW_4TVv}-iUy~2>dZEIG{Q$iH`koLJRp*lrULd zw|XdyHa62r9}6J_xIWnaW>V}Lcqrg^|Lq@K?2m$eyifh?mDgoVX~(<3gI8%_&fa8sbA(ZcJ(sfP-CwnCOkK5*_(B^`A(t*b4D9?PuCNsTwORq#4 z`{H^XUrF`FjOZr<8S_419rW+rhpzh+$k(LS#Ie76SjJ-4wQbx1zz)1(siqDpSWk`5}e2>Ngyj9F7RleG9q`OHb2jO-P2QsU2W)j6hsU@5Xt6v? z9k*zALR|x6_tr8=%{#io@BrE@gkA<^h1@1W3Ir z?uqRl{M!y0Rr<@VFH)$#;r29$oT-CFCYcC-HT+fZB=}YE;2}s<5CsE$;NM^A+il`7 z22@;p6t8`vv2&=py69ECwEO{mQy0S^x0t4D@LB4fPIK>zwqw>Na%>upayN*F`;S=R zbgOwkEzZ4>jc78WINfXJ#>7AVclh;7r+!qND4==@9A0h#lNgP10=Zh#4mLIc;8#&)fGA@r6TGHFyVLQ<& zTaMs`w&<0MGv-+~=|t8`H4OqtxS_j`U=Tb+f>^eh*gp|M&3}KZqGm4zUV8rsTOQ*y zM)>dqEpb7f>Q4CUrc`ES@mw=)9DIuVkJ$2F(ie<)DD z--&hPv|TuhFo;_47gNrGkex=~{u5s9ern?sH7P({&T5xrCl+@MECdP5DbQN2D?A2> ziMYi66P3e)M}gY?18pR|ApFmX5w|6j`XthYH^c#jVCvLhNcsL;pe54&KC$0?_kjy( ziw(H-N0dxs+cf8s4iIt4PTVL;YuCD`T4g#L5IRL%PDCTpNBULVl3N9ao1iNYr%WkT zW15-?FfJ+7e}g9?^!9m*e8ZT4gN#@t}Fb1f#b|5*g>vrv`i{trSVLoVha16~JM&Eow9C;E&MNO|P}jU~B` z-4~lxITQ?J6tt7r`~QPI&CkwUbRG802}AV--dw%)g6NXh6W9C%gx(-X!TX)TakgO$RhIOKR>F0amK4 zm^iYkRz*YDLv15NcL0vhZ(4b<3VAujJHS?qD#^FURAW&MD0Lo6nbHcTjOsz?G=fc% zEA&^n1!<msk$PvnZ^M1bS-;7&U zP%insle9P}XK)zLpE|Ah0-6E{`Mnw_o*aX^G9d@EWTmh8XIN(p^Fu6@ILB2*ibY4o zp`$)_pSwQWQ{n#zmz0cgEO1SazQ<=zB0Q))#M}xz`w_%dVBbBFY{%}xsBYqDUpvZd zX-E9WLJ59rjP{5Y0KeKJEH9W^t417+ zr%kYbWF`f8$Ja=rz!T%$y0eC#&Rxoz=|f(;GB=WjLI)A)E5azOkHH@5l=gpDn>JpZ z!%h*@(-?PU1N&cEg zc$e;)usLB+@I^^J!c`$6-L!U&SAywg;(@w?O7^We8Z-vVwmr7+(t#6kp1e8+D;8C~ zUxOXq&R4q<=>6ZFpFtin+OKCD0$}M3TQ}ZpiUR__2l$oi+q%L*K4*(Bb&7|kIs;JJ_9p7-kRlikF?;RxDTD5ZK*99LI^3n zb(qbLb!YBK{3NF+r>H|P?{wS?Ha;GXh=UI3N?Bz8W=$b$;V*XAP5<3itD&-oUEhwq zo&gXNx}Kdq^_6(N#&nqP^U=IlS+7S&w@n9ugnj zTv5Il9UuBUXSU_|zV<;?3DN&>Ky=8+6-j+;rICY$8#NS4m1?6QK)4zY)++!{7Ny#@ z(Rcw)LB&>oJ}H{957fWpGs@FhO}ihDfJa*RZJf2(=ku`U8QyQ|UkftOYtl8G=(a1q zsZ7*7gOMVmwfk&t1w=}(}_|$G#CE-jN^pcEhzngc~(Yoa;zT8EPNwhs2Ay? z5moxn1M0XWyw|aE)m4eb7P6bqlxMWp-vOhumgdY)K5F*{>VeG3hl(S#>rb@ZM@7G8 zXOMm{{`Bxil7Kms4IJ#Z&Cj{OifK4n_otgDDC?^FyjZ8~dUm_z^XJ$Ja-I!WiJ(42 zwWNu7x?Ifb?tLksbk}^=Q5pnr+apXfGNdfG_`aDi7YsstBT9h`Wh<)A>ze8A3V^j0 z6`&d{&KU52J^fAlTmU`hdev-OY6iMj%RO3x0@FcWR(;4GZ6myOL+R1LERb1bxd#0{ z1>^2^G?tL~1udl`_p)O&DAf&%=&P|It@6~besUl@S~7zmgKt%>)Yx}9L|uSg^(D{< zpTQcs{YH}o|M8Dg(s|yA0zlXhX#-SJyrXsJXC@}lk@%wt{;*7kD79TtKA*IdM+0C; zsH|9Zu(aKCUYb5c2~x%Ekil@zf9vGU%Vso_tVBhH&lI5Z%1IwiET_t9^j|jGPNn6- zwGnQA7&EVi=_0`K?J&%X{IT$m(&No36Pxui%sfPC2udwJ(0cWA15{_nr2n86x*l^H z0fGxC&ZHp1>TGB;Nd^DC)ZN6Yd)a1}Fn?N5U4*VR_Ll~z4X_y-ZnJLwm(b689z&Kz z)q%Yp;36eA+aSLJ$oOl2Sio0dt`Mbm8tNNGD|y(4`87bqtv`z3L6|51ik)1vKYN)% z5cr>ElEj*|@twX{peSJ}5cxmmM?vy84+FsSPl(;ktwOzmcLVbZxH z*Vn&eo3=E=rn}(AZ29%2ro4-B38lfCZQs_pY~ir+^HkJXn;m)30$*}QW7^W<#sLSv z;o|w|uYe~HwyN=Hn;cEoG5MZ~gJ#k{y6shEL4Xpey6RHgD%+Uv5xQlMDu2W7chi69 zEm8~IpLiM6@csH?>3jVxh`phHnKALeprS0j*V_c{v`BT<&5z$T;#&t#u^8ynE9%6QJV?iZxAsNqnhP$l!I#0fPwcl0$-iY;Q!ISKjL|8>`v=&n; zqhxUIqjI_6EX)>c!XoL36O7PZ%8(>4H3P!VMLQwUDy_dG;}UM%s9hwG`*I9BQaXWL z|9T#lpp+(k`F*<3D@$?|VKj=1)2Gq&`0@pJa7c$0cpNQIFk7(I_vN&4+(;_9;`CvB zN$I{fS%8Uuv}@@L8?eH~#?(f4HCx^jI9iOx*gD~4`Pz1tfqrFK0bXkys?Y`8&$Fm} z$s|_}V{~JF;h98=mPwizWuW@qpz*nG>_7gQoW6{(yeUy^`u7rqVWSJ3u6iESV>Wwd*dr&`%)p-Ea5+Ivi-t4rMKlnd!+@eki8vz4S0wyG?JR z?nO4I{VPs1soU+xHx(0Kx|V>VDKCOuIGh+oER#$wVdsP^TeWcf9NIlV%4~xoWJa*K z9hJ9I2t-Ww6D)}xm5*RdLm*Z2>VHQN3;xiEL zEBp>4%_eJw#J?`M$3?X>*;eEsSwPTRp5lzmj&btTkxiM`uqz;bB=)`(48>Fb5!|;+ z3nZ52nS|bFagB%3=}WN4mh|VndfhzAUaos;gMF01n&(Uc1)K5f-1)SV1QZxLi)76(MUDaZkE4ic6L(xNg+cKxFG zYFpC5nNfRalv6C#_b%dn1L==HDL1VbvYU#u4+}rvu==^u&JfT~3;i@yXg^cT2RRy` z*B2(=C+V*#{V|@68oU1S3+2Jvnf-*>jeL@C{m=?uX77#+2dBQFD%T=cv9II;H=?!g~c1O#2 zaDrisXXq(eVk^+8lYES05)DYu4c{)yp0!99J_*miy&Q7HOMIEO#^}Z^WLNA;yY366 zd<)$jibk^G3q=ux_8mM8uS9$c4Wbc1?(7rbpfAwzPJsj@p>~d7J~*rdi&f80ZY1PQG7kHGhb7w5!Eo8lr)yGz?}$eu9~r8mZju+vPOr17Ia4=Zw4>IP zt5bjKC=tV0kRc{!1D>P~)bwM*a9H`<4=^vu?a<8j;7BQR@GWoh9hYD!Ll5+7`_bX^ z>hzgVyYlLl-@vS*ZM64M3O5#U>_y~pti7DKO*=oLKK*OoTW`1*51t^pg~HU7j|cbP zkzccc@MkD^UXIM|F#M2G-1`viXzE8lm1QjJ-=o6b4QjmSxMjGtdNdnsm?Vr127Hnd zt8a`uwfCGmB)cjUkb;#(IbVN)vo6)#Z11|%xM;>pATxZ#cK#d7K+^Dl^V&C=>FtVR zR6Y7_s&0zUM`HB#z)grOJEN9ssLEpj==I`#-iP9W$-3!W+l&fD-BRv>U>@O#W>(E? z+N_#q`v2&9%cwe*Eou~kLvRfm+%32V4esv2-Q5~@OCS*3HMqM=@Zj$5?)El0=icu= z`>|n++P$l*s#n*tIaftH=jCW^SE;FLltt0WD(nFj12?1yYX(N(_)YWFgv2Azc_KrU zi!pT3RYkGcCtt7%mbXSy8?!`?DRZ(DND(qYS87MnsY@NQ#D|($XW(dj&H$Ozf3s3G zxB5nYzg~Gs5%8FMjC_8G)BS#@NW@=t^|GDO{%NR_Z`%N$=T`_`%4XD1zi?Q!qYyL) zKrtJTYl5wZEw?V+V0i+t?kzWgQJ&%u(RC;gDMVWiQP7DZ<$Y(ywbvzgjB_mOuHD!S zmoy*Dz%Iw68gbFqQ2o5b!yi;&)g`nv8E88iuaJ!#H|Qa#^@tlTWe2v2hTmbmj?hD_ zz8EZJmpLffp<;_NBMq|tUEq)ya0O6-S~G{snZ&g@5B|AU8TEzHlyYPaUAUK#<~XO{ z43aM&%JVx6W#jWFyto(qXM9ko&XDc5GCF99X7e49zKG9wSRAEKBV`CbpN;^ zF7#i`-RXd@UCZi!S@?DJz+uVxolhkTjQw3Az1tG>0bV^8fmP-wB7n1mAIQ6GCU2YR zmMkwzCxF2zx>fKEi#Km%>rf|&*wn!YRYLh#H=oO$`u$2GNRvCML6Ev$eYO-z)~AV^ zc!O2Ee_QpvWNsgKDz9{2fn7>Y+;|LseDU~CwX;{t!&gP;{HN`7rEJa_KUgtqPvqQ!Y zf&9bji1eq$ zrr{mvY4(=LQrHciCDeY3{cTp`Au9C<*1PtO2^!mXF&1e9rNkP&Gq1>De=VB>GSMVE zD-EVIPsfOBJGY~rKzq(Z>=+swiAplD{|kS@7fAtjs~69-`4&dM0zMNOA|7|@RnK{# zM;SPqJ4@$u!6tPdc9SjZMm!xy0PUS)NTs~c+Gpx(Kh!^>a>5>?^Fn(=ej}#Sr?+1F z5*GR{ky-j<5|7t3;X71y3$s&&kNyf92qlyPtSCB^7Z-N}n3;a z@rRpahbh=IVB2ff?>ElhMa4k=4j?%r9{B(~Qk^#4*Nj$0pFX;GOSPgBGJexsr}y&7 zlfD|@cRzN!(wLdJmoCK+j{a~y6o%}ZkDA+^wwW?q>!jTxlo`)7-74dYR~)UWc>t|_ zS@!d1B58qISZ>yUqq&uy@K~X203%C@bwUNX`xAbis6FgVoqa2&O)<#Gy#}dc5n+I5 zmghG6&C2aBzQ^(i@AZhXZWk?SvaQd`#WQ1Cux{X+G=3HP;@S0Bm$KuK_X>TRUO&pi ztCctQQ}|YTQECy~`>q&EOLpc1Z;0_qciggzH-%?G@6!!}oGh-;?8b;7f6IAFqK3xN z6SLz5f7uNBIbCDkp(TOKqNn=M9pDyVzKdx50r~ql)4hC^dLneAbMI{eTy$iX;~cL*!I{nW;f*!&nN9r-Zau3f zNjs~rVm*$wzZ##{3U;(EvoC4dphPJtL7UB587j%6M1NjdyuHSc>X_yy9l$YQ9G3tG z;UITkO516dZF?J-7Sns(e-?N-Ki?(F7;R5&d(qo`o@Cr5vc0=0KD$xD_mlofDx=fe zj2dPCR2YfZ8Vb=ytlI7b;B09SIWPoAQS6ueCP)I#>L*J)Kg#=lN>1dmO=Ob6Dr8*WH=aq;Of< zB69g5e7BfK6&2(z>-=?>`)R}y?=e1cI40Ed(e~!t?XltWh@Sc&hGeA=ZL#S7bzO-; zt}B%nTuS**307XWsjD}S{9@gY^*q~NyqKH4vrQ7nPS;hrLu1XrH`JwZ6>ACJtT=+u z?IushjT!>RDSQ31ro(YkDpkDhBfyW|3FDhi>_M&&xqzW6jL zU7`AfTSQN(k}}f6>L`B z7Cj6ahUKU}h4Zzt;I$m98}Q3yk@;pf%@Rnxuf-Jz0=SKzTMWZ=3O_97TbJ`E{4_1I z{9ZHtB!w>(iB_-bepT5+HDaDz-V8gT3(zr7i%s%Yw=g6jn;;LVzVEn~b~8A1pkrE7 zw$FnR1yAXM&igv`a~rcW6ox}VfWDj^t06-=JTeCqqn|=pSeTX9R)WTvjR%MBw|v{b zy4j2Y`E8Q5Vh~4`0(Zf^IsZL&t%4=5_h!VP75}Hn(Z%nHjv@CZ&3-AM5-CE}#$)>u zbajjH4&6IyWUh-;5nEyy1BeYDIW~S+Q&pm(FNSQ1dB-mEau>w&;P+d_hEk#6+Z#1> z{HvZ_b`zz>NJ^z40 zi(HUs4)bA=n#!O5C6!DS$th|r>)?E3M?iNiMW1Fhml;3R(|B|r*szX?S}M5=_#STS zJCx-~Y^gBi{I!sAYQg&o5$z&=d_?M8V2@n*U!~1%vB_~Hl9p8Mekhnyns_m|z36|_ zUp3NTC6FFaWy|<+&AMMx_`ZcG7RnYbxvGGeL~;e!M+-`zm(s4ArBPif@dcgg49kA2 zw1f5=NQ2|o0m$wV4ZJANj<@e$F2!g{C5Yfxa#KHG*) z$+>4TH*r`;T>1zR0si<`A?z?BmS1Bh3Q`Iuq~)TBzD;px$I_M9*J%-99^`k9&3EMK zhmW89l1faM2lvM>1q^PqGF~Nk{IJ~3?hx&`HCza`vewB)n~_Xe7ZjUrLO%P2yn`Wx zZ$T3V#7pqeK=5~X5d0nICKC(R>Ma0~-QgDrveI*U-mK#>1a7pFMws4psA8 z-1Bm;Ne;wtj{|(bQeGOE*D=0YyA?UBdsryT&CC3`;b)c?2l9kWiO)8A%cKu33<%F!2Shjajdjb!?#()^0y{#lJ-tlFa{Nq@ zf!kNP<|s)SWw1PT3K2+F=pzEFmo*vuJvzrJrE6J}W4628IDA3FUm}g*VWqm=D7pHN zScem#&&RIkvY%2dO#^op4wcY%v?Dbm4}IG{w+Xxw8PK3v{&NPJ>p0au!1}+1c9y+$ zV(7RWmOWp?eXuf>FH#_}u+Jn71$`=A`Fz1X`0QypN-?s%Q+;{$CH<5XiB4x?>g;^o zQ0D41yz5v-b+c1;KNbp<<9DXj!X-Ay_W-C7~7xl!k(|6F4|vM z$Jo6ufd?!KL#5;ar1^QP?>TZ$=BIHeuI-nGr*ZSgKBo0``mO@Z&9y&lPjVja>UFr> zZ{sSoQdXZw`Rdxbp|8ANZV$^}kGB)`@X|JTgMI*weaQo&aiLAa&t}@g_iWAXpNi(9 z8mh<0T;{Aj}vjGE-n6R3QZzXnMVW@6DTTFa7^rV zR=Er;uBx9FxR09Ll(Rn!U>fiXSbsx46YZ4MS3y{NeQ=#(y&FxVAI2+v3*81O^R;H*k(;$q;*#m5PW;ua z`JbvAO-RBN-=eWUK;IYNk(;+=6al(gCK>Y6Aazs>zZ~$t-?}OG$%~<|YqMSY}N4o44Y-S^$DdqjWZ$&z-=)dait?ghA@{#5%pIUKr z+RL0=zcJBTf#h^0+>J_?N0~AK&vRu)G%&>9B}aWgDXHWkfT?~@{k-rt@w5#8@s4|Z z4T{GSkeZzuE8TnkkN%#1)8C*N{-3J~5Pyv1gTmhq6|b*AHzD*wR^|io$BOs#3jf}_ z=q)-gi`)iNOqkHB1&Zt!%=9(pj>>_zQO&`Yfa2}9fD-dURt6G?sU`O#+3@-n6Vy}q z-{FRUXjA_V_n+QDQ~3XB+b9^28-L(Gg;KvacX;Cvo<3njLXRdEiuQRP7x0K$(|WXL zWdBe1pnLpg{O4gi6fN$}gG+?0;;a;&k2VN>FOTuejg%R0Z>15kAVR z{8?FlyMP?w@A#FNaXB-#VP@R-8}tjIPHz>I?MoioK7oEWP}v=@%0?d}wNgOg06G1Z z7l|$|P;)#wT62^c+5CQ66viK90lXPSU#2I2ak)61)#vZn4?IpmCIqJD>!%$)p{+&u z=e)7uJlin>{F=|P52UZZj!%WJ9H&VBP4$4*SF}GGi4f**mPbWD{Qn5hTd@D%$=oIU zPjd*&*uTwZD+tF3hhkHzhSe9$v=Lrt< zDhmFUNIn0~=$S8|q3L@o7ro_Ph*bc&^1ZonHv!M(NqwOao^v1+2Sn3H(#j)%hk zowhH84i*Szr$n}f9y&wN)UH>r?|N9>OBg=nH$A8;^ zN1Fd>j5$+EEZF-;I2hpGgya9c8igJnfWS18?p|DRrfeHG9q0_rBM3VE(R^RHi!cXAi43NpJx97Dc(Z%C5Q&b85uinZ5TCYq{R z{nXlB%LgFkC2xCoKV%(U-+x3qzvTNB!jE&EZ;rwOR6~@K&|E%0-w@RiH9Z zKXhMhf9%e%Xo$OaA;#uaj)wL`Xj4c(SA?OJ%Wgwz*;F$!?GjYGbBwXn%qA9&M@(MG zJcWyB_P7$)y-<}ASu1Fq3veMp-jek{-zo zaaW&cRmTFD%=8T4@}r4GOFK|(rjdS!@Xg&thtGu#L^8>t$O2iw0)|c%Ez=?=0{-F{_x3QNW=V3pALH0);Ls^~v zSHovMrAw=Y61Cr4g@h+tKKF-=uh;GMhCQYhJ6!1i4`uaB6LP?1*S780of}}v<9nynn`5WHG(9^c%$f7s{+QOFZ3P1)`)wvf(1+rIcs+VD4-3^4&X+PZG z5*_YV=K%TNF3Xg`y3A*b+g~pAUhnl@pd9=f`ijUc`fITTc*5$dCl$WE>UunuhTPUl zmoS(0HIpB-54d7|&^`EM(z~q962Jn8ysv+0yVfBasBUF)*H7~52zeM!Hlqx}Ikf!lgq?+y*9qsyA5 z_5nOP-!9P99aL=d=d7O&(yU*@zx0Naq9A5%aeXV))~u1R(^-a}mdO{iEp?`!{r$@c62n zb~yILn35PTUms(;3z5I$upo6Z7odcNlEh#liKx0wz7b#hZV0yl&Wn9DvelRo`xSC~ zUInDflsq8)1(jOP^uc^)H8JDH-aX1@fb=5Snr?|?A4_BR;T|i+qDRemB>A*PyReTq z(h+Ao(ZxCgc=d0AH)R_}{Fd@C-nH)>;iop!m^@Te$}cG9QbzB+xFgRkHM>{NboZi? z5c@GsDz^IlMOG=GQ;HNTP;-PgOqSQFv~lan$woJ8pmw;f=G$$ zL6r?|Gbw)M;Ls}8DC@X6_R?m7zCDB+2J+H^V_RZy8|i|~6yf<`Ihis@B+WRRAIW~u zSSWvV+L<$lt8Subi_rNJV_EU$D%(yHI-8~RB>2lg=IlH`9J^PjFkkwHvmK5D>*Iyf zACLt_Y)Y+vQu@(=KL0)`=X6LSG;zPa(UbX0vN~O)lrimH34w%l2VO_Qcnf}3#>TM( zhykV)flD@kyWIUpn1x&E1xc?)%Kc4=QBHozh!O1}t5r4S*xcX@49v$1%&(cWT~YiW z0qIa^MB%b*LUGmKvK43p0`i2}9cn=kUr}Lt1xe;W5GFzXz*XjW6fE?O>K)R z*((-a*4zDDej`~*@v9ZF7y2rp^oc=izUE3%l^AB)gZao(8BhDtZ3fS30;1>`4v{^5 z>K06#$5(}MWr3a?Gu$C%RiZpI+>xznfS7?q7L{>fAZcpd%4R( zr-sVu8A5*b@GvVhEvRth@Vgb>zqO`d!XoUEEd0cwK}p&Z5U&3h2-goHT?O9|imHBO zdj6i!%#*=d(Ke(7UlN0muQ|a2sl;>FhKTmPPJU~m9^+N{@O_op#Vc7Xn&r~b#j{_{ z4*)&t1is|Jj}TJT){Sy`BijP_3EzO5{|*U4dTjFv_X#C$$)Ic~A6_nAXmJWzsdXSO z<}e#fGS`W7E;ppeH$9#kv9ANZB9H~dUbn=9R+Zn*Ud!ize+%#2b60eQ2#hfOD8)YR zyB)VU<&J8H8l;cKZN>bmbNs9>uaa8Jr4R>u!a3wdF+1Kc;tt=IU;~WFW_4%;L6~B$ zi06{Aw-w!hn}R53ny~ij5s=Jp!t$EzyZZK_lH-+1DDy!vwE?c z7%NcGF#mZT-Lyd_fZP&7TEiBP=wOP?re-chvVDPdGiQz^xyvTrP&9(_ z+=90a&_l=>vJC~lVB>r6hnlanTD`<`3oahu>dK8ycGGwOh*ci!vhqMzlJ9+osWSty zX`N}0IZ!f#o)5UsPLD&9-Rh_${jA%in>Y>t=Rr7$RKp%UjDhG;QTujcO6GZ+2bl2AA~Q`Q z8q zNx;tJyp8A8p&TdTS>=8(o(G&HRvIwCMBCb&@^$9$xRktJnmuzy?;A;{lkX^ROg@C0 zwY9T8f7EAEM3zJplwEWPR`F|4dY8T|fudiR2PVj)m|<4MvS$dx`%~!&;%>L7a~&ZW zmW7ox?Hi3>1_rhy9|AI1uptyeejz^}LIjhI;N!nmNx(kXJ=57xHy|`DCx9pKrowv4 zpqbKCIo3(h&W+yj{K0mClyRQuoRr@E7m{)DIE9Rq)c7!p6ziy2y5;_j8wPxhGUp#O z`*k=;3`vlZNhn0VKDDSj2hEa>F(s`X zwL-y`+(>?7k)Z4@k2wpfk>TR5Y_o}ceuV5r0cQ$^_02N`)dsGs`x*-NKjzmg@w@i( zYP#Ow?F!X4Ps2%2R-J}TbuIX;snPuY$r`{H#;~Q&TTDHs$Z;QP&J<=KXgm5TTk7QP z0}r)A65XQWMv5khF$$VueIYU$wue)R=z|sLy|lx&CoBI4=>3Ko5w1`Z?}=YC@R-4I z5Ls$DD)!t;wxT>IW`>B7Zam3Uz%TKf3HxR|XV6^QwQ8(%H+^P&dxudn1T2iNJAZ5B zXy@j?3r1&lOxp+6uy+ z^GEvRi3o|3Z_29GxzgCE&5rEINQ>3b3YVYP!WxT@c#!diDg}enfRcJ{Dfd;s5Q~ zxBHzZ^^4!i9YY3aB!u=`t^X0XX6ww3JkzPK(G+dt=xNp{63=2!5;%ksW9FcyRDmG zOY5DNQ4X~=;vyJa$PF938`=M&6*yzqp6R^3&-@tg7b6?S?yvhI)hXrVy!<*T-OJ$| ze?R(+6Fq0%yZ|$Y#P> zEO-LDQt*-Ah~EPg%u~l3rzSRFLbHj$%AUaN&mm%AeVA%oFCj|y3-%uos+q0Dcn==y zhko-X?YbJd_ruuCujBHb`byqE(_+}H)Gp|#-_uq1bsv7N;~UBI@mZONY^YriKIZfL z;@#QhvwlY5{pXsZ{SeW2!~x4i=@##MTZe`9$)oI0EuuD{;q>Xc2WqwPOZ zAzwVXB!4Ov@tc`S?Y|ejjJyl7lS~obvl~kM(WsfMmO6r&>?SPMDldJ;dHDo5V+37V zbT-w|p_#9Vm7%=_Rppn4z?n|A!PH&keK{eu7J(^UBn8pqZIsrpj3IA``A%J=`?Gm( zd3MK&d;iDRKA5kjLIv~F3y=4lvIjKj-n}n5jfr@vKP{@b8;{AbY@o^;e*w+wRqi!3 zL?NlA1lr>>Wh&j$0S>1d?hB`NerOYY2Z zpoJh+-fagRJAWF{?c5m&i7bJdyE^+%TX1>}KVmzb8$lBI2|;^OR)P(v9w-P&1KqOk zxPM;U`hAX$t3fY0sY#Y=cHKt}plYdSZas{I=oSxQ;pa@&$QTBa&&>LdYe|Dk zlxhAmmOSLU51ZAr1f%7ZE?Eg!V>4!#EI|Po&UZ6InIik&f^TdtS=E&u<5wTPdR2^Z z>m`M?a#`nlkBzOU3Ov%gv=1du-<__%1YNW6-CpY6kKN~!?E2ZRpdb=N;Tm*l0sNpN zH5OQ|PaH1z!`a43~-Bhk2V;{MNiid2IQzN?nABT4~lkz zpd}O_<5t6jIXC%cz1kGx$sdfw;RNTdFxuu%mbVWv`W_Vhiq4-8GW-tNox-7Map^;* z+h+b3Im^Ehmp^Z1x%S+$Epdi^kCsV;prparP$e-`I6|^--6gJg3>0|+zNC63>do|V zRd-Q)pjT?{*LcJU4PmJE=lFo1?G;GVmpMZa-eHCh;Zuu8+B>lSSHY#P)PnAXkSunnyx~Mt2Du%(4X|PLta3 zrPGe&^u$2)Qb2_=C)&I!30acVhd9+iPu3Y@l#2Y7c5pJ_5^N+74gUO-lJhhwcS{NS z1yv=ELtsTVsHDsERbGe1gQEV=A`E+6)|AV4bbsG%#I7Dt#!gR8FI(YWeoQ*d%j02R zir>ug#(Svd>h)o#>h{?tqU9pH7Hphz>h!qfrwA&5YlEZ|80^^x7Q!>I*6CtK%DN%G zhgAMvI7~>)iUmA0f1o&=Il-&$Hz_00u+PpMDbC-^ zcZQ}TIQbolkZj2ZDFSns{l|Wf85Oli$t=v@#Aa~4N?1^EkX>i z)*&yyyB4fJV^&B&=T05xnt3bCGD45?rGD>B<{!PS^_{wKUut1QzC?g1Z3 zt@|VO7~K5sgm~gng7vq*T)=E{yr0O*HvVkx`vpoW3S%%sMd*rLAy9UBhFyB_GbZTs zj|kp#Q+L}w(cMB+T(>m4wm7D_rXeSWtDNMy9a2>VH}r7yYV~(7D{?Q{@BRc?s81-O zDCVxf-9(8zyZOv) z9fmgU;{!|(-p1uc2=F~KL~VG)Ugh;<*0$aB$|jyXCv@dvOS*oX8AJ)coi%y4q8xPo zblv7g?Z9SSe*)KSs|jRT1e zZ~ep%91tn~Grl*dwyT6fHVW=y!P2`c1slNtY+O}PAf|6-Vgm~ovmQ*l5o%)t>mw>P zz+Y8wm7oA}rrgnj&2LLQjm51}Ifhp76b|sJ>cJ;Bh(E04KSSx}+}$wOhw)bB(b1b8 zvr}W}ZXjrQ%7nA<<>#(r+*d59)>T0Z+I{dHH)Pe`N9YRN|HI^jJq58$e!+HH>EyO$ zS>{NOh*bP%haofv#M0qL_!deq^m{Y~Xm$eKJHyL|_(IB4W}(G@$ejH)om$KN!X)(Urj{qsW*w|L27V*8VN_DJeO!j|(X1 zbX;U196%AplDw(8Fm~0mOB+9Bxm$n|qa@y0(}b6vkk(zBAd@{dM7RY7@{WPG0%1NH zcAJhNjHiL2Z{}A`?LS)XzxMi2kfLIo*TYf$+~RNqGRV_(6E=OcPO*F4T8{$3Mz7Ne zU_EfR%&K^xJ*uV^e%oxhd_!)3i(?yDhiDm6KilM8F6`2>UL1eDR#fQVincLQZAhDF zqWwUwSO!QYy$0L7d5bOxB^1q2!PF*y<2uPlSSnLS^?UzpX~-1K+rpdprz}_Fyw6sy z8_%obKD|hgOUH(XmhJVkzFHDDb-uOn%QnWYJk^`wd&h`N$-Bqa%i@y+#lDD`{cWZ z>>UNS#iMzkb|fZW)-h{=Nm5|HfK6p5N8O85fbZ+?L8~K?C2t4QGfsrD0vnDNG(5-e z1UChv^X>*(pT6oL1{62~Nu!R?`oFd;-(1vLFT*)oGwO@@>K~9T$pNf*lIrSw)WGuU zx;>mdvBIl@)58uLopp`zGP2(-!w!fVthvQoVNy1bQuylK+)K);XVZK3E8#T#j-X|u z;949{ca2qcYDoK-FT`H|`GGrYX2?2Wbw&DUZCg@d6{~t-ZO%VQ&CqPk;~B}QggUkD zgQ?9(AEqgC)wz|st0z#%7+gE$y-jZQPS!8U_Mo<{n|}44XLh0`t5G{Ex_1h@nk zgs!3tPx+q+2!<^GlRH46JnzMP^rbpSVzT?{FnD0PM9;Z#YSVRsUGz%C+H`Y1dN0i1 z8J0kHLAGytLdZ$v+nz6NHYtM$OxR~9Ga@vCYr%X&G^pCo$&jE~Rgp$psr|?CjG16J zdfHr-yPB&x*2(Ulw9RPm`=G=|e@xu$f19r|`Y@fa2;ADV)szG^v3H*JY6T87-*?dR zNp6o$5&wxxbAJ(PWU(#aFk%MnCf4-Ju%+^Lraj|nm<)c9WJ1G!H(5LZ+ z-Bb56BE$OeoM6m0a3vd99ohA;5a>}yOB-0qmwCER9TlQJzrXYZ+>^F6=JfHbJe>p` zwTu(v0UqppixAslTS|FOR>%p#@AJFSQM(s4HPgAXf4g*GE}~*T_=)J#)W}s5Tq!u+ zUj0!zuoJT`$`d8Y{_WO*xsCcy2?ev$J`a$;mepDSW7KWZ1F`aIA~4`7^WD`A7z)x# zs_$6fLSisDwasT{gKnEHy8c73*dtXY>j5-*M_3YfxmGX5=P<0mUte63tsf+CIa^2O za9wYQM{wyN{)U`|_|$1n)w{W9{Rff?(b>9{4*pySX-BF7H}(fpV+)}UMA(yszq$~| zM|5S-<*E>${J!FlZJ=0LD?xlx5Jmhg@{bAO&h#-38OR3zki>X*U&g~O>wEy5hb(1{ zpG@58!l*B*Zl5xVTWT?_;!PdD|BW&JHC+>xz@*l1j|l=v?byW_~AFF}`kniq+~IXPNuylhQSqZSC! zamhmOgZ#BVM%!ea0b+{rRDpdrSz4L=dsv*m5NkVH*g!7$(mQ)6gn#QL)ZCg86674p zvBbQz0bbL*507o*WwgA0jGwD8KP`DR)$4V4j|QI*Fu7gsyJ7cSJBQE@bdPx^sa@Xo z7g=W2{2mr$P{A9%0azUSEVG)ANq)LQH~3YK>_hT7089KFEQN`)T*)(t)`>m4_C6&H zuD$)r^^>gV$GmmxOG>_tIZgrlR;eV;>&vvZb;I~3d78f>Yt{}1pLlfVbK55MrWegu zO{Rul3fIHs7qN=awJ8Ep!ueT?8#}XEp~=3amk-QoBc|V9OQrXqMJeUXvL7##JY-SI zr@dQM0qTEpwF*m;2I|Ih19ts!C-u-d)$LQSFJiAFN1#=G009-9g*Z7U=eA~7Wp(VTNzvNT@Nux{tNu~`F?`MDW0$M6v2Sc?qSHm*vGn0 zmy`>QqO;o@jE6;fRhHdUB=Vs|9CTA4Aep3xTHB8srtF@gsQw$}D9xzD9L-ZaI!mYVg>XyWJt}s-W~-3&VYKiuWFWWW=fX0a9^-v@fl0i% zry{n933gsLzagToxxAk_OM&O`n10(_xWaW|E#<` zkM$(r`61Eof$9_RaCqe9POV)@hu#s2@l<{9^?bIByz2eR$EBw)c|*vLS_`%c=k6C1 zfc$wTo7b3Vqd~y7JesBK(!tN#|lk#!u=NPbG ztSfL)E(b9g$g0p^S>2$5#=rs=-3Gow=2#ml{jvNLL3Q~X*#5i*Cc7?G> zrx|p@e~<>}F@(_mi4P%Qs;ybyRa@P4$K5n(Xl9DEOL!N%J$%lGdwhy1aix9*-orKykVd3`%lQ<$-0Bxa(^BiQEr5cSS8?bI}0y7OF^}FXV(eBn>8c844 zT?zC(^yNo}%p_xE^^+YFJfl@&HENKk?Z+wy5%leYNO7%*bgVClwa-Eg*NZZro&%^W~1d1h2 zqjwjN%21-5sXnNZgJZUhtQ2SJ*T~YEQzJ1GTp&z^(Bdl;3gE%_j^a+o{!aUK@4xZK z6p$o;Tp~ag5}Z{uHOByt(!_K+8gB9Z51|XDb{Ur(io-1asd>Z-*0=^QKWGtq*!&3t)W)vb zKs%xbv$F*RIj8-&&tgvuWOeqboj|+gb6bA~k?}Xg^Y#nI_=RAcFrc0~uxGBTBh`)o1SC3Kf@i zOua4&qqGf!e4*oUOp}fXiDP`$jIGd_GVi2n#2Rzhp&yX#KJzXH@cWIupMfx`MtSOI z^kpM~cWO|ehImvKFGMq+K&53#aoB6;p1RFKIY)fq(Y0aXYX5DZ$&>_{PDl!1J2Je~ zeYQ%k&D{Ff#ZTc1H-q~A$JN7JVmLgPE@xck+;;Y;N(DVyiYYw}S7W~UV_?Ve^r>ohnLqgXg|^j4ig`0r3A8#T8ucptfU@xdTNEmXG9ai~c%l7nM zvH7DDR6DTmCBSeB?GH{>R0IXV#(2reWup_~XB}kGu zrK+4~41a`aHOB~q!$uTS7wEd1Q5C|wSEzs~lOo|)7{oo=pelV_KiirbB~oLoMS?6CpC+-&oA z1HD}xS(7bcAA!y5qhjMg77AzLdegl5iD`r3Z5!>lWl;q~=Dn@VyQxws3ppfH8cWQm z$;qX>Qvc0Au@}9poM=ExhiG`lr6@b{^vC{6c8>h$8GY^jcWm#L#4v$uPIVR5qEVSM zNUOYfQ(}xP=Ggqq!1ibc=~Sf2CDFBS%zw8jvlEi+)DKJB`8`eH`5tY0q&*@vtTp`Q%+{PVAlvk zjAr{!FQI-c?x8_(HNwkAWLO7^802E3b_Uz;iB4pwqve^VZ^_0Lq(W4M1zQ|W*~WF4 z&pZHo`Fz~wUt&eYegdl9GuJs64F)|0+$)LaM?Qv3FEEZ5Ll9nAb9L7N4RnSH4PTEy z`I2}!4ji6%fPSG6Qj&}l$0(49zr;=?;4nv+897*NJ%XAZCft)WJ1Pq#KP}sn!Q4_g zdz~lVbbD*InM-ppqfy>#Qw`9f!7eWimB{X(&pvf;R#9V{X&?U$O_bT0V7rzj%(mZ@ zz0L9b1Tm=2ZHZOu(vCE)2`BY-T3&9uyA>Y&{r|i{k%9cpxw`bmWZ?d!cXZJE(SIC z-KHx4*19TxZUII}{?0?X#{Jx{7TaI7r_+Oi?pPN0&#Jm5?&_R;S_dgwUh}FxS!0!E-<#1CI%T~-TIUBIao6gb6F4jp65Br?@i$S3`irpHb*9!3 z8{k9HHwV{HV^&J+V3E7#LDJJ95ia>@DR*ClVvlHF@XK$RB#IlKz2ykEk z5-+(+%36rJ^ijvn^g1{2Z`I)AiyZniXS zJe6J+kE3)MRE_=qWy6c1*msm^&;qJ;zb)U^BEeuhu|1X+lYBBztz8<&t99b5d~X+o z{*#Jy#YJ0h;;gFK`Cf@+iz{T>9YB<*Y|dCjY(7rm1v3~I?dr8|fHbXNM@!X?`ob#V z>_-DjzrMk)ja)D$D2Vjpv%{$iQ4@+Dj)Fss)aUQ=0y~(liNoY+;Wx~jj`?v57PNZE z3-1-?0@y`P&NC5J#zn^BV66LOiS+y8ZM#)ah)DS_F0q_Dh}h4Ntn^)70QldHrJaS( zzVDPQXzdM517}goM`ea8uiu5yczInisw%g3DYCIq{A*F?>l={ggX z0a|g_KvcP)rGBuLVA~wYI)KFv7ql(yOfgo+&|(ZBl}?Gh*2H~-+-Dct_ck`t#x;lh zg_Unx?pD%6NCR1|!w~`u_Oxq>QbX&w zrl5Kb*N=MuVrtzU4?tSn4!-v(UZ?rhV*k88MS+9OKvf6D8*9OR13?sKwG`NVS8-JEm0R4{MMa({W>yGbpsrx4xJCP3GOA&~LY z)e6{VRG{LraHC|+7X$WhGf_O`@lPYTo6}0uj5d*czu))rG60g5`Jrni)FhnNrX)s` z))ZzA?sS&nnJg&q@z|;|3gU|5`>2!{sMiu$HJ4xH7cfwNvWq%JmkCMQ_y%y?aK55! zxA>+Dv0V8i_h7Y6$4nd0*3iY8Ijh z)KaccPJvoGJ^|F{`eUo^>gs-S3&epiPZuJaR|`**-wTQ|OwY>BuVbm*S|je2^kNw$ zO|~ENFFdVpHBAub8l+d|T8D3nUEMu*N-!rVC_TsLX9EcPjU@TMLjM}VO-wwyVcvM( z)-e|dN}N~G(};$%t0B~=Ci4m_5q4F`F7Q=SICXn6-vH-<<;#IH+XF$xvrNuPP-5a> zpYnUKVYQ79s*I`p3r~>8!ali=J_h}8D{YB;S0#AyQ+@{T*YG=MbMK{c?bo7qd@{D* zN`#47nZr&K)-818Kh!d4wAv4^sWt_?irUIzvi8ph6+OS`T50#!^v_>xx*Z2G+h0E@ z{^(Dzbh!g0Yt?sMClh<)y-k;~TA#`UqL9^rJlJiGPi1&r) zL8~1Z?_Q?(yq5k5^DpLU7lL1So8$f*h?FR#yn;3?`xLl(y-^@Rq$u#grzNwt zHA|CGrAVc5Mz4jM^7R?na9bDY-^1UGzgoj5^4?Ow)u+N!XMuyW{I{$iJOEuWquK4L zA%&&i5y3Y+<#hjVUBTD^GCih&!Q^z@MkuWSRke1bPdJ^}kssrRzsvc*c$4n~oxjNg z_tMoQnp=VsM7FN@37<-Z(?1PVi9_jfzO;hQp(Xo2Hq(zNs-TiZ z$O}Q?`#ca4jRizRyWZMDOFPl0EX>QZ!VJ;3#+%mqD!)AltQEVWL%+d4Q=88zRb`q< z_e2+#uCFAhjQPt~E1`VGZKftMIS-gZ;DHCcPo_Q1&X`7 zyA~*3-1Xq@F2#$xOL2E7?(Xg`H}rj<=iYCvkF|0ROu}TcGqW>E_W!pl!)Mi+py;pYN}k!gk-eTSm?b_;fc);_{6Q$q0BGuxxTq$WO2gSR#g)s1dvq z_ZflQ=|Nvr69cOzeMjalH8_Pr@>iu1!e4HmtlzHMkJv#@7n_27XY{9+K3qLbbB+duK#Oj9vy$FUwcrmWx-#tc-qs!OyZ%}jXSNl{24>uXDNAOv@jSkymsK$)_>+WY1hhDM~C>K$i_b7Ua zN1E~@;w%&>Rmr6cgBb7EL>Q8=>2N>v=Z{r`&Mtzvg?V9dj2MA1f!+5L8@>7|J%`Js zo{Ykbp5KEj#~8+jkQ&Bfmf|N>41#7!eK&v=E#~8&RHY(LS`kroWZEN0yP6y2-D*;9 zGg*WgFA1Vh&zi=K`Dioa#;xX9_2j&gpKTA@cicemQ@aoB_fyiVZkDrH`J%YUw#)IM zGZ8+eA0=I*FUvZcj=ALJ1<4x(tnk18jEjLuMt<^h~A%L#yCvJPO z&rJZ?<-rJLMx2C0Ihr>Os5qNp*S%IO?jP~BKlSrvfL<>So`(;P-jrr}UhG~kBLA=j zSnSnuBrt`2si~-sT+jJzI3+&iCZ;fbc6Og^lF8yYRMQq%!7L{5A$5yAQ+e9744TR@ z``9E;AtYdN`$@x0Iac(Pvw;qcT)_vtr+ytIzX-FBJN z+9fmZA#kD0$v|fArhS`N%=rZi-aGK{I{;8%R0{!AiSTR!S1MU{@mx3|04LJ3sF;!4 z<`U`O%9>p3KXC4npYw7sezgY~=@nC-2ME3bVR;Q~a5V#}uzI-opmKe#Bm^K- z&kAaC+#a;~i~tNoCXN5iF$N)si|3xm)J<#wyBJBr22S9n-Cz+6nX_(kzL$@P4guH#Ym>z^<#$`bQpBae934u>G7WYpw**EVfAD{w|YPHedW6usS`J8O^ZVaBhfTn{K2w`QRj%T2{-E=Ye`X6*&7kt%GhCWM=oth^g@c}X zXrB~SVxoCznfw9MBtI10AsYWzoBCM3t$AjO;ho`Bgl*M zoi1XuO_=&#W+JwhJw^P!9mF$>dKFdnlM6iKqZuQps#6_d^PkPj$YlU!DPc$vpe!v1 z@TE!sO(f_@Jgyp9UCiMB>6wq+j=v=qU`okt|BV8myG}Xp|94B@7ozaP=Jgjne6C+7$0d0H)NvCKf*fH+7}EMusTKvk#wLqlje7sL2?^>OOR zJYk(;IjP5VnJWG;*09vVG>=7^tjYF}Y^u)EbUpfX0y=s9vCuSViznnsr<} zt#y9DsOf(jR=v|e0O7LgG>as=^>feXGVzI|fd`}+&0wyEw58r|x)l)>tOqA2AP-z! zLLg|&v2uHm@|r+}jywEF>)Z8|>RLzTjoP)b_0!c7@!LIJ<)#+@Lnx{!AgMoz1Y>(w zM*ba)BywQY3p1p2;e-3z`kg*vkUS#>k zuNQQecX(d3XIpPwkze!TUFrFlwshei2`72@H9#T)o?QB= zhDrVwIX$~4zs3Cx8FJCTXdNS*{FVr9%;~u=*70{?NL^kI#CZsxn4^&AzaXjXIc{Aa>5z!25F?(bIDURA2ZIK?5YZtSOwk9HlJ1shE8p>eTQ00 zKZdi=Gm*BZt8XdhNs(QpObm?>v?^}+G zCX=fy{+ST9fHu&MImIJ>0}e4KUiOONkIQu;Dv>;d`mI&BhJr_N=iY!SnQD&VLENypK3~HwmX|d9E02Jn zA=8wNw1;Lt69#Mq@K`c+BSD|4Dh72a$RB{?{7oL=r;9H4242Wd2a}iJ{)hA;c7VQo zbvRX!=KpGNfS$BiAUD*K@G8TFI|MHAs4bXoyV5z3>hGPFTq|oTZoqbmzjx^*i06=; zhLdFcySh69K{!OQ87&}toiaE#jj<&bi-OhH@M%Iu9z^Vb9!Diiu+c~gt+-Zd8W&8} z2)DUU`QKiZmR6bC(JZyfNU67XZyleFo3s+{LJr0~)$#Hy&Bt=j2mF%ZmBDbdhs+WT z63^tDisD3DInSk=A;_Sc8x6XAqGZYBOkQy(J{2b<-!VGKH5#^U{*;wmiG-#NQ2^RK z65a)mE1YazS^B(wf}2*lXxDjGfzCL0eqiCq&zuU8#|$2AyeOBvIa-T~r*t(4X=>yD zHv321>h6Rv)x2up`vnEKADcI$gwC23@N@?0No3y(4(rkRy341nZ3W!yz_TQK#19Y#I7fN9#HTfR>`^2cYw$s%@y|U<(|OO?(};~S z991Jg;%hVMYg-Y3*ym>a$nxuu^$QU)ga5p?k_$~-D(w0YFUG|qh%0r1t2B4jwwjS#g#`!Qprq2)Ea#Sx0RYX zsK)Ve;mmEL=ko5UrQf&?1@Mg+*yLb+y|CU(XkbA4(|SZ~a(+zhaIpXF!%w}ijmfu? z^5*)wFPg&D8K5aAR>$EZ_@ibaEek3OG*=rYM@s`8cky|nmbMP|;!<6*otH)XNNTAI zKZ1lUYRkkc06<409FzMICX%To7Mg<93(ywj0vcTm<0o~gwDI>)tAdX(Ib=xxE1&Ya zfg<>DO;$uitb6p>Wf|LSpNd`-R7T@48L0~br4Z)?G4(CcgM#wjEYU^B4%X^|KJL1< zmQRx7b~)V9SG@j}PS5jah4|`qE+zr+~T_!Y)D_I^f< zzfesP*T5J}=iV!;_SM#O1T|JOwLWp=mc8M?w-~XXCvGH&Q&rg_Ed{lRct$s(jH}aq zGsp%^`sX9eCDVTptjJ_kXf7c~?sK|kV6CHC&b)lIE>5vdo%ZfIuSEIDNR*Pc_qqr5 zet#pJDlf42XGLDU9^J^n8Uo(9z>RWb7_FXv{z0Bu5{#b)S$^(Qh1SaCqnWR;vHAmc z(VNJoWei~yhnl$Jbo;8E2A%BN{)X{qRo2`N{L|^gL;>3=-m;F*L6R>I{@GkRpNe4- zv|0M5rqvy;W64=m9M&nVn1ob(n4a3ue57>80aZd4Ns-0o-?W`hd;E>hw8hGw4zFSS07F1|G~xUaYK)11efV6GEE?9s z@Am7MFK>8lH1Bu1Xp(o|+VBx(^WB(m2%vv}#4d31E{n{|HOewBz5TrhTMdMy+sZE> zV#GgU?hW~Op4)XOezOgF4TDX~i~2Sa>+GqVX4t6YvZ)&Z8;;{^f2?BMmrR;ZbR6y& ztn7t|g}Dog@=D(1dxk6iIE&);R21Co+!uGxVIL$-ZmUsHlbTPOi)l=Ya?=Nbx`c}U zYy{qGQ$CTzOqf0cv8)zUVJ?Wqs1==bW8UmwT1$+ZKGbT^YX2F)!7$iGXR%@_=ZoaJ z)fq9i&4oOfiEEth@@!Ls7!Mf;x7j}{udb*DT*4KgUBkZ?ZJ@Mg@!`UA8?&F|T!_-f z&$9=g2odG-ivI}rm6rmAaZ;hmZ!>lKjQrQ-`%wkw_E<#uHiZ1bZX;%QKKo55D)7rJ zeF@j^(TK@eRN_}Q?tClH<7BF(b3@fhm3^ed_zSkdGV03!jlqQeC6!CP2nsQb7Q4`d zR)Ga!P4afk%wmJ0Kige^{Hl}~>GV-=`B)NbQOUEH7pMre-S`(}Hlb`B=VhE?s__cN z2x)5l*LV}P;2;M#&4dK2o+1q+8T?OZc(scYWuAyeq_v&2{;W9QYUuBy5FuLz6H72{ zm83M~U2F~ul?z`3Yn|iu@-;qwN-zl9Q%^P|VbAUbw{j279qQ-zHP+Jp8#a$Mq^MkR zW040?VuA9cl&o>WF_A$~$ubCVZpwk+DX3yh%q`Uj6s%+hPthZV$kn*Hc+=pv2tZHb8y!Q!y5GV*5ii)Uc!3?^Xxm2>K zN!U2JqjtPOY-cz)M@Tz;vCFqvBLb;oub^q;&}NLc*O<30m3r}I1nro9Tafy5vUxHY zlghf@^D^(yU+h+dm3#9Y{n+W1j_14_Uj+h(rR)y0&Jh@J_xbm?LwDkE`^lB2^brez zxP|8k`{NHB>+j3CDOWcABVlTL^S~|gK&w-jv*aD}fElHrkAqH?Xvp>sNWkpXn_z-j zsh}&F6>Qn}+rMkZ6!ibNHuw_Y$)IZ{>pEe30?hWH+n2*uZVPedBRU~<3tkZSV#3c6&am@0r(@ntyBV6EF zn4#hVsfLz~*rSs`8#3C zX)ukIi|J1xwjp7$T191C;*E%&ADoSjY(-L;O&Lac({$I+3-?2RSPdt)jMACAGu_5AhqEIT!UM_X#t&359@&W4A6oWEXjz*L z)rpy@(^~xYp6U?t6H6f{m5sY*5(5wMpGJ`{g02@GA-8TY6Jq! z-*s_BKL}280FA}cnuQ$4fXB4VRPXDF!i`gSUm_Gtr`&j$qkw@s)%kfZf~*bfOZa*; zhzhKevm8}fuRbi$3%8Kg_*2n)8_ zrt)=uz(6PW{`wWXF^~KoDp5L|KfwY9$jkL_F8$O48}XRt>I;e+DfrD6B@@nT;Taf% z8~ahzSX=@u=o*T%PKf6JXBaA?mF7_p0xV+^md$~Eq_zK$5G7EwJ#Qo?EScW$j+k{2 zUR7pIz!7733+F0%uO#4RKbMcoLr1fgw&&lZjLYRm&P2v`HO42;@PcS>9+^s{mJzK# zDXb-c`2MzEQ?#>~=XDmmO+*OV{@tNFFS)){dwf-}Y_*qDok%v5*x8^W*(z>g*>OJ5 zJ6ZLjSX*Az`je1yQnBNnXSZ;3gB!w?J#8&!{Xjq0XvsTDuSiS(vZvNv%QuA`A6JP( z#eC@#`1XCdht)_=y;@YFUXH_(Jfu6GMOCX4eyE_q9)U!TUa{k=f`Xx4cd!jcOCMrQ z-q!=?3j@NnzD3+}*PGqS!*~9l#XJA+?3GydZ=}foL~X)Qd^rFy{=fXc6HTcof(F#K zyNZ2#Fk1}|bQI{|&4>-{%>e{R8-T1*w>2yt45U%|eNTUD=q6g?<9JT*R7^)F5SFNi%cgvbvzq^R++ zW)vWbhONE5jkWH6Qf}+kABpxy$FL-jQ|l2^KHz=lPY(?n8?fO~?Vh-@15{P!?V?QN z zc^&4P$*~Xei_IZ?B;Wez%y7k>(8**r>!EY8j@&`D!_0l(jbR?tbqTfj(7eg4hpwF~ zCVgqXgQIP5GC7BN;;Ey54VT(=g&WRW6;NNDOLF5F;I4-bsJ9jN`* zwKE%B3v*&^^m}?Yc!9ummB6;4q`3?1<(_mS4vdcWx zQ0v1Q^cE@ihQnRcmA5S3fOSPx5O@=AZxS9^baC6?!1sEME)%i7gK{e1n`H^BN(A#; zW-S4}4Z$|n%n?sbDVk)h?!Cj&A?qH41tY;%JuKKAtjY?=Z&PR77woy|B_LKvN2t7`P(4QoiIuBBU1z%t3 z|MnrYUlt)Zx-=OFo1Yhr67NoeQuz2-Ik*aBIKU#Gm~;|8PJ9;1qWOUH6D2cUa{?>q z@XixOjq4E*M{{5O;3(UtkudoANi3dX;DWZf^;5OiUhad@Ds^lQ-|BC@2Xr=&{cRQ zuq}A`h&>x1$&`(Rpw`M?<>4>Rg@}0H!5Q@>OaFfHpxzQSjS)*Q<1GyAlE&P z3PWeiuKvTC+HrS2TcwTB8PuJ|yGK;9s1!M>cyvoYYQm=E9!S$yb~za_e~ja7bTn8+ zB&HoPoMyx~e$m}rgn^(C`zpEu=T zW$%CD+ ztE2>C8zJ*ur8ZK9{WXT!$Z%vdi(zCm1IntHtpZ^%wDahnsU%|)H(AWMTE57#qv4k= zHhr=L4ib7v2WhPP4wO9f$?iu|2F0WAAL|IIMzXoB>QxU{31KYQZ0;#t8yeAUfCwcW zitIQ23s>K-72iV?$L1-9Cw$B>3%+d24#~|}vKm#rBwCzx9JKVEkZG{*3pKOl#1p-b zN+q;xIuT-j=m&~wQy(H^DnYoiXUnRHG}RUhT;=Gb_)6^0GLaQ~VoH;k%DOLTJ7T{n=k0CY zvA+$2BR=T=QZM~_TdG5b$dTaeeeEgg?zlmAcRncrT>vU+7F>SrSdFc=#fzfj4XSMv zkH$)pkz3R8N=WB+5@D4nuT-~Fw-8{NO4ED0?cN&yL`4b{ck)X~T68z2gG2+Yl0X_% zoJZuv`}+EHwHLK@ZRB#F*+H~3e0>pG5EgsDAdLCl18Sr0BmK^fVHL2J5ee zl$Ij9)Af93BT<=J<2^;&>#1!4Lr7INTh|WFFZpjELdi%z@^!9Y?~)^4KN%7%SF^8F zdZpd$Rg}`H@+4393SS>*Kgbq3W$? zm7PBj=X3{dma+A+Y?43}cH@BAp5EqDQMtyHK{Nk1`)XQ>42LDLjmT(e>pllULP9ec zjzI;9jDg#^W#!Ucf5VgAtP79Kk%BF#YZq?3D7`sfi72D0$V)7*UBG4ilF~*CoI`0h z@`HixXkV**2~VPPX!LNudHUaqQ1C%QB~fowkaLKy+n93!Z17vgj}}a3kyG3c-}ar< zUrA9Jxzty#c-3jQ^T3>8&iXmBXeGx}PF?zMI`pOTqs7ND{ur{b_r~v5R_@%PAYv0t z)amCzA?!J+x4@u}SYw%pGQGwdGlHg&q=w}uBk^eR&-JnlS_!X<2x%>;Z?2CG0*J*4;J@)l0O15$-lq(z4$5_ zce8RIp!`HT0iLWQukNsNE}8FkFKyF)t|wPjlcu7T5kU(#godqJ=^lPg(IXNEozLLr zzq|=?B%>>_nzNQOg&CIKKY?cHslDKhl9=x((Hd+RzVv@c`c);02%6E6i6U=`X+2V# zUhtlJeg%W}JU=bnXgyxU>F|!=Q7(~cE5xq6dxOB2X2NBl%8xHAPx&I3E2_cp1)BU4 ziu^tyPY>hesVx7Eq97^W?&Ims^UZZsoMw*R*=-o+EBedx){iZ;8n&-3KN=e29flYb z3Pdc7XnkhsS2apDhe3R6vLKF^vmy^Z<3GZA2B8d^_%$x+LYH~|USHl`AMU2kbZ>HW zUtd852yn$Y^`NCQ0Xi=X!dRW!iX0W~YUbH|85Yl8`R>394;~Q{EW?&L=yjS-Cj|ki zM(@8f)n0%9hJRO&*ObbT1GC7Rj;$kGC^K%$KH!YUCyD-E!wxE;UQP=-$E_83c7u2O z`ZbC@4Z#S$mhB?E?*vZ=^<=1q#pNS9S7w9Bd0EtnMqjcpU2fM>6a`C|IRAch8P!MU~4;>Bd_ zgm@{@VnBD$rU+yZP|&zXql(^&6{Oabuq00M(p~xfoC5%7#2xpH=hdX9nTrwhy7qPk z2nz`uBNf*mdNb8r?f-jnI4Y#g;9nh-}7JWVT$^4w#(10i>(={ z-gPBEpGOuL7Zb@;#W)BK z9Yd_Fh%Piyb~t@r_s%-#u9hnaC87-G`UYe?$jQJzlwBdxMjm`BJf12B*FmGe*d}#5 zSMaU?SN*pu&-e&v(kX_q9mf0p+8_HAnYRkr+u9GFj>0^-srErZ>Vs~)w2!4Z9q8Hn z%V41QWQ?LBdq`0NvEMwkZ#7gp8$Q_<0I3iqrtO7Rin_R_%$HM?1+r?zj9tpvVN!!gl4)@3{pPMw_~8wtO;>!+1-m&`>ec z@xSYlDvTHI0~nq&{;7VWOchK|DHLaO5P+H%=3$#o=j6U8jJ?xeFj0YO{!xNe(EYwA zLz_5UfFex{9MdhJ-BT0O(nKmKxRDC^Cw7OVf zrfG{WwBRb|3`H)lnoG4YH?GuN+3EBd+3-+y!8y1HB4p30F?WXDk7vSV@dI~w371i( zlCw@_AtRzq?&TNUBN?aEQgz9f*8(No90|vbT;13Mwu+hU@2jq5dcdRB$Cb0UN9(uO zEl@jXf+1;Y%}ahLc6RK`4yI?m+}qXV6litU*i63CHL%dC%;(fiuT6%}_JzA$p-k6$ z-bYhLy>=|o;-;y7SZAMe#X?IqeSpo9xsGQD=J8`$y2&H0W#q|XeEsP((XXSHrkUpi z^ZVsb!i~2u=6`0`m1XAY7iQ`8EN(aWBV-vsq^LBFqHE^UStqS~;dKv<6(Ow5hAQfoPGxkh&&7@P z?ih^VUC?Yy@3?WTLygua<}*w(I{M~UCh}xL%C@Sh*3Tijuy)pKvW868!IV)Cofuw& z!VeiecqnGn+Hjx?jBU|=T5@HgoEB@tG#(&!%?m4WSxf23BjTvwH?!zYC1Imab~-W~ zK7enW?%ZxVeJ#Dl;e>uuOqFgE&vZIL7120E)k09^tUnTdsR&7vQJIW9{NlM81;okl zy&hF)Wx9k=PeoZ}W*+RFpw+eeBj{Lw>RyTHfrq++b5#kRC3h-0#A|IwbC;MEYej1e zcYF{9mKuGvmLYKBmURUe8rOft6}1SlnD)K32(hs(%)A;Q7A5FxNN&8@60?OVKh+~k zL_Cs|NJVAZ;n;*jkSOG&&x6AlBmWQ5MCPP52HyhQNeP70f_OnV`110r9u&VV&-X{e zA#-}eBR_La>VA{+B4db_aaA$|^xB>IcHYk?X#RmzVL?OO+64}xNymDPW6rx!lTo|d zw_iCgK?ajy$L)UN#2J|h9Apxwv`rmmm3&p5$jl(xL{X9utS1*~P?w$I$I04J;UD+f ziR2=XYmvuu6L$!m*QrJE00MGZPT+m;x`6`theR!}uW{jHe@vbDo> z^N$B1vvaFQQ%$V4UBTJT?onTq^GN=X8a-KAL9sY=Hd7}Q44(BI!4bM9uQFyfu<1O0 z$hF{2q2I87p#4Ar%CtuM{ox?jx_G$5)8s`EDejuzQ<6Gel6TMN5oAOYWe=e{@l(?* zpEpO`vjge|)#T7mIE%Lyxd{1?b1q)#u7W5R@}%^8xFMDdJZrp=xgUQg&T5z zz5dafnbm|Qp3mf9<}k)q6rPuu&84Dt@ zn4b@%-s9BPsPO#5%ZP3^RBCr!#Oj)Mrm2*;G#xA zQ5~`Cbc!lHJAG;nZ%o}R-Rvd(mQPtoz(&KQWBvSe@)2aOo#gbgxLe;gQKwV2`Q+F( zGVS#}{fwzBTyL-Muw_9j?Xy;U4SHP*eNxpV$3kyxIts-sMT6-f848_xwS@#8y)rzQ zsDwPl@B^eNwcPR@Cw}TM`rXNsjI6HW0Ok?hVRE=)_%Ky3`zB zG>k2`foiCFogK;6&O?{Cgk(JQ9WISxWdp2#jnaL5iCx+w&0noJdT#PmWN9gMYj+pt zJb&@%#~0LgICoT?|I5HDPZbud6oiEq5pd)EM_yIm{XqHQ(?qTR5YHj)2L^oPT8jhT z&2kh2nPUNi-?n9rm^-&$saySQ4+z7_@ilVz-9b;kohx}Kxzyd`2i{NnE}=(5>6@aH z{&SFHq5AuTLy>bjNzDgt2i2DM4701mylCtw8X4n8O+9A^5sf%T%m2NN=$ylZ&8R~f+~SA z-L)!-mJhTfMXPFvn_ir~@UK{Xk+M3ojw07E=CaysDUhSz zB+ht+(U(!tU)2HIDrNY#Lu=vm?BcXvOVu4j+@HWO;h@&ZvcU)}$Ize_mp-GxPyF+L zK(@Hi6CMew^;5Am;SWV33gf*KtOPHMf2cAf1)#BfS=qwim&h(n_F3sCLh8`h(<^+9qG?{38B z`VLo;xNcZJs+#}`7zLxlx!D8Lcd=MuMc*gkZXB%9;2O0oSg%JvP$b2n$H z_LT`#$fY&vV)1!0DUgF?J$`qlk6Lx4haza$ijb$2R10Of{Y{YQaqJmp`omgg)nPUg zo2y}=AL5_?n+BLNDBGpm4m$S5XwfQUwR*-Ll}2rIS}?SfXqj7`;m$pr!sszW7snxn z6gov6uKiIFyoC64g7n~Y=hRSF2L`dos?A)EsIXj_$vgak8OaC~DZL$EmniM092x0k zGOwfhT+jU-(apL$u!Bp}(g%I3X^G{LEGUkx^PGQHv5%JCY($f&oQ5d*$2@M9)xsc) z4D2X8JA1y?;mthQOd6Ur_zxN$zDvgI0D+e~GwNAkWR~$nBZstj&m@l6?B<}b(PS&* z8(QZpV7Tax%|}~7hP;zU{Vg={gQRLMq*wGE zBCAmB!aeeV&#G%#sX5o0s@pmOK>?!URWpd}y($))ng~+UKR5~BCvVEzI^JO|2sR#A z|4s$j8MtRT+8KcIs-Iq7jcY+TeI4G`=?$dsEwcyRwYtR;lN{)-&U_C4jC#4moGGW7 z=SO1<>Rb#k55T$jne#1;;9&I?9&VbgHwyxt%GTglk#iaL@zuT)+Ta+9b%Xk^ z4bBw}iFwKnwCfJ8e(W=IG%5%Q=*=EYdm>ea@whl9IAiO+gogCeE#tDv3MoSNp)W`; zrKKDo$qksM&94MA;fu6ijusu!w-Td|(lT+{L1^XJ)|1|8-yhv`YIQuW*$TCO&DN!% zvETgIjxDq5n)+|I z2C;7&lnQ07dK-S3)3mb)s%O{pYju5DuGmX01Qi_1D`ZuPO;bo+T|1Uui%RzadC4*$ z1xiYqm##$5HD2UK3PtrfNoOxujAz01b?jhf1qCvDyrm#7pT{i2js>aG06DcBVgA2t zkVs>sHnZ<<`|@uye%%VgRE5#gP#olD+_s$IY=qG>=bt%E+DG4>|NeX&eXy0rEv>OU z3}rK;kJjG@d+K}{NA9kkgNVSxKi~^mE~P+5tG1L~7f_sqr{qvRjf20|f39Mr%^dj4 zcs$IzHnY(N#Ba*R6_!B*bNi}edct$x*iLH6NcD7$thSMT)drE4mi2y@wWHHUdgi{i znQDpO>@vt%Im^7FA~?qC{`!HW_f_nW?n}Zr#wx(lDu9z_YQ86d1D#842l|;X$$l|9-qWey)c@L0-8v7SyG`(7LKj=INwyNlHLCosKOHzA) z-=MX5=T)T)l57jf`@?{lI&wsjvC@*F4ayw2VfX6eB#O89Um9o+YWb7KPjqauA4AOf zL9QuPk}_@{=TM4sR<8-RzXBosN0)_)Z6TUb(B-E^Jhi)3$Ce{I!V8&qNLcEk ztG!og$eCibwf*d?pOroh_0BQt6qBp9n-5m=q5K7xJJ^p+m%;t2+r^+^4Jc(Ohn5#Kq2j+w;J-Hv3mvf%l)4=V(kv{JhObfw_eR0y* zOeQ3#`SnZ6AqV(pzA)W}<_`tRsur!Y;Am5u)fH5=6}cwavO!-#P{}o-KunW0{%%Fq zkV=P+HO8zAOWl>_D?Hn<)MoGi=TlThJJ!`-lJRHr2aBhb?qBHR6gSKUp7aMy^~tTuXTGTV@SJ8+Fs{<7;#)buY>mvw<0ZsC+V|eN zG7N!OT>L!yS0M8!nC&E>$Ev8Q_4Cob&0Ve>OsAw6IK|cgfA-+9a*qd? z!DXwl@fyrC&9bP%`IOJ~&rM!o!{_egG-p1R@CS(OXEN zv-h55eLFuas*FV{-qe}O$4>|mxR(U(y<|>SU~<%z+MoWy9Pz}U z<#uh0F7yYJ7SJ`)a2%_tfujHQgmDU=J;)Wo6AdScy(T1Phb4GwOa-sY$6os?<}@yv z&GbDu;EGz9zYBv-H4i_j%(CJPuJ}$F;-1?zX7)MYFJ@%(`}_fiIfZYDgQH+N1M(&4 zOv4O@b+Z*hL7Tqk_^asf=>Ru55g=1HH$PkOjyZcJ$Ug9d3BMbB%0Pt^3W$G{qKjN! z3IDE7^VS&=(scalNQ5nNN`Q3#fF(i8Bdg@Z7VQ_G;GC2y`o$JJlPw8R?8_BMk%olN zJr;jxxVn`yaeKApr_tw9A~%K0Q?$WTyMYgm2Cf`7vUZt0HK1@~r%#7k#x>ivnGb@p zvhg#NYA|=@EqSV6&}ld4FvnSbCpP9vU0#PO_7O}%jxIgZZSKen%s#3%bl9ug8^$L~ zl{Vlv*F`B*MME^I4}2iV#FioeP0aEFe?MxAy(g<#P_%cK!?IgHg~`nJb^K+Z+58w# zP?*7`6Y>MStgYSH{w+^z>F)=xrJ1dt+P8bo)faqqptmfLkyj{@qpSQ@?|BauNkcoF zW?sV@_m0VI|7AaDxC&QqRh5xPE7gKeL)Wy@tFO%Z`C99x+lC#)elFIYfJ(YM0t3Ah zCNx)lemSAqo=JFSb@$t{ZIr&b#i;eU*WVoHbtX_t_kPJ6yehRZ?kXZ2#i zullUpgYlE*1<524i7%|s1#d9y=iW&Q%gpFW@e*H-k_dKL5tG6tzrca6Xm)A&dx3}D z!BE0+SleL~DL}SCUfMLS7Fx5o=}x{iIb%oD0W!1mD zc(2c^muhfM)OouYMAmD3&-dT+37#63(&%3iDu{_aGVCJg3;OZ$?cnkPX3Q)+Ldek-wpcge)n5K)k-q2pJYMCp^lwaD-m5XY>O*B z-SWJVo1V+=CVnBOix0B}7yUxaPYj`%KaZ6%Fa2p>s$Ge{QN_{R8N0BtHrlDRb` zin%rH&h{)Fk+KF#?c! z!{5MVlq8#U$sTDjl$%7e%?bz=-ngu{}P0u!eWeqdNG_s2BY$N!mG-I1YE5Rea=4t;C zbM&}m)sf?E3jg{Q(ns85=wWfcPP(stJPEc9YExSUMcHzr0}i%X(^OeNepdCU)jO-a zrc>7)40mN36x>P;d)OR2g#dhR3Wrx>IktxA3dqm>Ah1HB zX>dM=q%e)38w+JxhBPc$AL20o=Pz&JX_=X@LVeI+m2`a-73`t0UaU=0a5IMnD*HaT zIGilMIDxbPz7PM>W-&Y=oMi}nHD)c{dEI${e?3$eR&;nhW*^pRtU`m}LKimEq2Qv1 zfIK!@XqOHXmz)9c9|0`E9p5o~K6JJQFvNrTb0|hnJ9YBHJAbjvJ&uJZq|5HfEcMMQ zR{>#sNY{8(jDg^-K|-K`9pc=7Y9@!tt=nLS63~G0asMEogX{6QgIR>iPrqUP!W)C5ZnUyssBme6TQLQ zC5P0dMZ%&*YP$iCl3Ets==*yRmq5t{!GHJTCwlDco14I0PFgrj3#+ouoFj&*>NEB$ zs5_v6-*oJ$5FEyTmz$uRgz9MH+`{?-sGu{f!-o&t=NhPaK{~W!gOmk3m=E5!*~iG? zgpNp%oYDl9oskxV68M{>5I+vvf@l{?F$b35*~4H1TfrZwArL(UCj~N?N;M~FOr208 zUZ2~eFO`+drZNH2R}UT*_@j>=+_xSV3Hz|igkDWW?eZM=7mn~c$uY!*gt8&G$8ItS za3hHf`d>T6_Tyy? zAZ-UntA-~yPcg~U09G%HU|5F?pci>6`#|toG|4HWOy5k}P2gGvpGcQ1)4{!br1%7$9{CL2QF`@Ac9VY5) zAswje%$e%<;NY1L7&V1E(D&irz6-Czp5t0{zyQ0x_0c7nV1-ezfvdz#lb|6zF~`I> zg@iOhumJi=J^zNF*8Rt~+pZS~k3f)Le=$j+mR5i`zkEZrCNS7(WIwk+@m^sr!KrzV zd+hK**`lu=33IS@n7CMD_>jMUUBD}PE5~?3@6)Oqc@EI36R5Ex{KTUDSl%q4CM7M8 z;^4^GXoIz1I>Vs6>^+8(28{os?=~B76S!4OP(b^}ofO#-90Hd(Fxfy^%+GWfK$%`O z)o!eroDa(HO=t%!aMw(4ev`6ma!Nc_1XAo7=pj)Tm2bY)sL6C9%d}3kfMj2j)P{k? zREyLG7~=3gFdx34E1ife2Up@MrT_9}Cvj=yOh@tlK?Ce$G>7y?A=+ua+gM@92!gkc zsZ1%_iI>_{AzEMWqp(pYDw84QjLSOHKxe3=mH&th=!N9HY4e|qOGv1OUuAkCVAH=! z(F49_6E=qgeW?mRS*16^33^D)0%*Iwslp(Igp~M$p0nl!7KP#>(WT_%-6wWIseN$jl*oe$xs3M8bX6sssO zh?GAo0_DBt0b7(ykqt#$1A0afj(0E`1czmuOYOKa^n>H6QtY4Twx5>w4W#FXaw}1+_(e8XI;jnLm#&KM3fT1+TiOP=Vk*Hll3tV$J zm$iTq(N_prm+#~@i*KYgAO4lXF$;-P>Plk30(QuaN}GSZW;@$v1OBAP(z^?=(L%xy zx^JNr8=1|g`;Q5^nj+`8)YuAxGUpnh$G7hz8g9`6*o|}zFjO@{L3N?N(!S#p{UQIp z#I|4IIE4sNU(kOhqG6Or>gD_l{O1PXx`yF>t8wA6n>$P#c3S|y47dltkvJr(tb30u zk_xGyOw%odNm}`iD;7yWA>Du6QY`@nmLH}M1QK|xpeo9A8ATWYYq!a<_{@UxJ}o}O zrIJT8AqZA3CsryI3=&?=#C8R8q`15BT!ZUdsq9vlNk=tsM(dL0!f|SVoaFKwT`Jw$B{2lSBU@F3Ilyjxu-&#S{` z0a|@{T5BvA_UbCQLth0o&vsee%+(5vB$chuw@X-0khDHk^aClVGfYnJM%B-jIPklS z?nc^QFDgLKQ<+ZV*JlSCX|rKw{TZk%FU}fo1gUSd$pc6A15>_;VJ)rgqbL4%%z@JO zuVWWXVWlJOaAv0k4JtvmSC?K7<#jWBpuMJXdW1i1t*tFvBU8MQtE)`)t9tWGXYH+{ znNLqDZ;iE0k!NN&_8I-v2l9L4C(fkAUunuC+-ICE`sqEFv0Bqw)wp`OoVX)w>xBCC zMzu8iPMw#kdG$7!dnO4U>li%pnF!4^i|L)YAu}bL~XV$y8_v^Oyb{fe(Uy8hST7D?^ zlN00fN@x$6}>s_DJoBMAM(cUO~uTKxJ3`hlneT9dPn>Jn!Lr#>oo7ZzEV{j$DUPCOOxK79o)wQiyA8@N*|vHgnd`samIAN$jLhCL z#7C-LPj|m8x7Y167sxN!+I#@vQK3Ih;VVnK*U!lO#&)CosMqGl4HK{KulI(|*W86^ z)BwSNtJ!Tw-wWDY4_d_>3*ow^YKRiBo3zj#oWwDCiuu~6Z*(^Evh*by-+~jRS^!0@ zBZRrNu`_s#Q)nfmLyuq*t?2v93@3HjLg1O@xp`e+J;=~;9qJ*08k?CLLde&v=OO8| z+m-M2m}+dEwsdkyuR*<%3x&+m?>*#n9RK7lDd>%nt7)y{mu6Gla%F2hQs*Xcsy)bz52-oXwV^~eY>ma;8z;rhFx?mED|(ZVh|_SnrL+~05E%jz#(?F!62 zfjcxm}Wp=eM2SmuI&he)Xe&)tws=o0j`K zjB(bJrq}CFW86_!xb1kKJu+dKgl!4=?KWPL6}Jgr_H6EJ$C#Yo+_vL%shR}c$e3sW zeoI-b{T>=>M((7Ys`MRst+5C@PQN!k*;5P|9hEm_6l?GJh6Zj=S&w~S$M4{iWt3Uc z+0*ItGEchh3UTa~li)Ad^|e;~;555!a+Q!AAAz5Zj;I-@R4vx~`x9h%9d+GtZu=M` z_Uto?el@M~w!_%J-qIsF&xifItl)icKff%u!7s$!HoaSSG{>I|iZ@W+g|9HKCkh^N z6Z<(%12;p45%#iA6TBBd70Pmk6K%8G=6w^|bIC(cPf@Ujb*t?qh5dA#`Arp?*TgUN$Z^+ z_RhleMVec1Xo`I27_{`{A*cn5JPdR3`%tKl3C7WvSjv~Oj8cgMQ z@SA-jFTHv_9nJ_FFy1{5raK5A7mP3_IR zy~dAEy_uPjReO6}cv>DE;WDL2yMMO;>PA@?CSa`AJ~arJ_pvaIxj$}wwqG)ab2^f! zKd=fT{|nflI#_YX-J`oQi@qXIc0As#gT1~8wzJ+4Xn5wal{y6n3nt%(0)p9M{QLeW z!g#ax?il$;3uq{izPL{V{#1So6BJL|BIo!UULv7xai|5#CK*@6LzMEn6;__GC5s73&~14<+TGe&@_1zKU(r z&sP;(s~&N%bevfyuqL{6OC8g$yzW@h?(768`g0l!K3A*p*%6OpbJ#!kACF$1=q(ZT z$8BDO<1Ho?aMHKz&(jBZKQ4*!czV41+&|qJPRtUOuss|8jK9oTJr@zFm*W{Ifqfi& zlY`aX2Ad?Ksc!yalKHgTzUY75cOAvrnw_ovm0L~oQbA(9q(wizu&n#5+uTrHZvU-zNSzB@CD?l85WqV^B-CA(A?7hxTsHN3`{2I$uurzolfZPE0 zJ}am?Z?MRId(SjDoZ5otcyV>TJF*O`w=Ps*kIdZpf*&JzS*g97RR>Zby$t5u@8^6M zYj<2RjXb_-$Qsm$hIySfMs(rA4R$q9v)Gb1w+MN!;dZ$6QS5}LULU5OEmv%J7@3@Gi)k?j-|%{!ep{~|@tt#< z^hhZ^E1B5SQoCsse6TIfy(ie-RrXvqibd`9DTsXC!xm(<84R$Q)t$f(5h?eVFXeCoS9*-=cc++FA{^wXfC6c&zk=i&Vx1v<{s<%@e9 zCQZ0K`0KmlDQM!c_WWjXKfP_ftkEd8P)^VR5)(RwWwz~;ZzW}JZiBV6K9S=;t=?q{ z;X9jH$JnCxiQiZ0v~>3cFufC>JAv=h`@Il~{F&3j^ul3W0g`TgU zftT%GMPY$8Kfi|)V2N;3c-_yVzj9u*^40e)^sRHoAi?%#wDsK<)%*Rblivcm0Y8n^ zsPXJ@>{sUT4(N2wreasMm3(IK&EU-K-Lud63>*8H;A!ca30!kH@$=2u{oVC8WyjfQ zFJ&WU?I#J{nR8=9`$Z>?6Ewc0yYrCf-PRkM9zA>Pts*zwM`;$I6J7eTA52?}oA~a2BCtPdkhpoBasQ z3!Y47-Cffn>h>{-tPPwR`-{UJ#k|yYPk}eoPj+R@{}ZGI(gz1=vHt&pv~)G2DVihw zCiImjU+A5=jgB*qN;Q+9IX$Z3E&qI(0mex8t154$rt16n??Zd2cB!=IxyODDuP5=}k&H3nQMH+N9!JR1W;8GYw;`nk ze{+j9$-zvzZ7^%DF&yM|JfjfH*Vp2!$enQS5?CTBg<*n5P)KxHZ$lnRa_17NsR#+K z1Nfgx-dXE_%ABdnsJH!LTrF}_r@TD=KVlOwVU%byq%^;23%7(4ANx_MOOlF5(2{`q zhGtXo3N3Nm+Zj~h%#P>V`_7k{$~QSRKc1|&D^WPytg%q@s}%}#d}-(cvUA%RbkB!A zfeQs5FS48Kf26r}Z=wKwhIaE;pi9iE;mJoWgO|eObQAsYY3a`+f|%raQ!iFA?2_Ap ztC^tBm6OyyM01Lmc-7mjt@l@$IdH;~@WM})GnuFNc4^a3;o1$!ov*gs z5b}^okI7m|N3yS=rK}|}VXt2KZf9K0%;oY3>CVvd2>7-r9s7khs*G=GfI_1C?p-S{ zs6{u2w%ltQkmnno}>FDzTO6Jk}~=wB@ru=ktYL0ePQt2-uiMC zV`_V&=?A?0Wqv#Mb|7sz3ccFV%tO_JKIGJzIQ!)qsyMqDzr7Tty`i_>VAfe#d@57A zyNUkpBsOLxOW=EFNIVq2fu%cg|cl7u`Jm7RA$4blOxVq3A45-3d*^TaAbzD1Qzl6AJE!^)}y7uuLUi5jX`FC9lb*uA;7X#FZH&A8&G<`+7!H`c$-H z{?@%Pm6M_Biz8S)y%Kl4-@bE%I^U^eN%3hdebpSttYVsm#EC4IY}Y*vrwtCrH#Jicax%C?10tJG{(jb9}5;W?00xH zmKrkA?7(gg>NcgN1y&z*-h|80N$oEetA&tx9E*SYu3ZXf?Xwz~{^@8olvdxxHLkJvm$0KA_g%YBu_Nf9*HU!CnL zLRse%udH!VqntQqLQB8jJ_?rc%C3>oL6pgVe4I0O!WuH(s2I|HrKKQDn*6V;Qoo4d4g-4nAZ6r&hHhyo~Xll!3LAa zU`X&?$4&8^W-}?Rt3EF(S8pU!Z#dtOj7^}Ki%yYl^fD+;(6(4V0gIo5p=Y<|7~U}t zL;?(duwF&xMr>A7wkpAhERZNcK0Q4?2s?4%VSb|_hHZ+@6#17*QRf9hoe9a#2eO(e zwJH9M?bDXeJU} zHbW7TOlXnJXKZO_i;O<>l6|K9+Rp651yJz59m<8!s@|RjbS_(lR5hWsyrX^Ev0$EcRHmAk7rZ!B_a$-k`PGIh zekMv%N;%zi$Dy88F*5+>Q^XJ?2$V!-S3uB%9Z~++ zgE8(;*G;+IWf%r^dEaecR1Hh$Ch0o}k;JJu8nbmEJ-xK8|~6L0WOMtBP^FKO2z_BKgWrn}EM}w};)A z@$`%jJ`X!p&`%mLZ#ns9nJrM1G*qCaz1jZ!RZSU$Ko2c-&V-T>2t^w4M@-7f8nIm? zF{ai`oHOk5AvLfCp@zHAC28S_kC;U+D_Q7^eIHN=WOapT(&mZ*r!PiU#WvXO*%;vd zY)zIr;+fUb)oU=M%x|^i4NU09-Keq1tg~YD?LDpX%1e~g*pQB@Nc0H2KJzjg+MsJ( z$zS1C=uED0kD5d6KwHBf$QaBMxIMP+;WM6vzEBMwS!eZdQ7TsZX+SrzpIer~;=#}l z`Oe}t7#BDZ%l^Q<7WRGg4koaH>sbDP<*7I46vJox&bIT7e&;()DPUP~$57vAdI#c< z2gN+;4QG2_U4{ITJa*>Zaf`QwvH6g-<0e0Mxp;)?Gd-KoQ6fu+1G@KNBH5gQ0p5K1K;*yFwa&?&oEuqBbw`zO9VW)U`{*%^m(A zJO}34+%NP%hWmHq;+2N)yO;!hg0azsv*1;rFKk(j1{l4cjaL41rE$gH`0cASC)8GG^CRV7)bYZ_~mSPIBxPF0+?CJ4En4ncbkLpFkVI5k$L%f6PY(Q z*R_=bM6*%uvmd;mS8fD}zhht7r`PbN;_?a{WL%3qQ?{GK@%j0{` z33W97D!Uz6+Z$$0b5l7~C04C{fm-kF9Wcb1Sz4hxb1`S_5!{rmJJd0V5cDabc0>Fn z0|@QQIE+|Fq+g*$JqzBDFdc+7xJsP5S2r5^wby3eQZHdU)1NeRxj%}az(zH!HL1Rz zq7%@aO%aOK zPYo(Em_Dj9nF5BW5PHtnf=An2+;!(No!H9qL5i=(h$?_cEggF0J~wjHYAa1igq(@{YJI}n8fEj`c? z`yA6E?e5{Vzr}b|spg1qHm!Fl67s-@x!(D}`OQc2l+^rLD(zhLQu?_=q@OtPbh(7b zzT5g+Tfv+IVA}bcZD+VS;qM{GuH6^;BfZz2a)yhIJMp;S7;Pab_^2Wi3L`#`37d~uDQ;KK_14&tbQ=-TBRlCMyEZn}#YExc zReRD~W;7#xjs$OaGKEr01Qh7wgJ%MK4wTXGT;l7)S*I?E1Zj@6rUtz+7Sn5iKWL@q zCN333ld@fhr!~PgSQ+UM^L=a?d62bUz4!j_H|L}63RG8P*w8Cq-nO%c6i0t7>lwfh==}GIA0?-bff9f#_>-zT;@qR_*>Lb5|P!vD(HRjNO z*Qj8KYMc}Hh!K)IZq#hTjaip&OZXyadMp5@&J#H#a2e;qXhf=7Td)CD5cVptqIY+9 zj%9<)l?rYZ z-w{;Gz+s3Q=J?8;`V$x4QR)6Dh7nkG$C2OcP~EZk?%k(+%Bu$+QAtWl+R~Pc<=4ZO z(r$d2lqtQ%PmgupdaY2O9K}ut0qd#x4qBVW??Nk|5(=M%0^wdOmRkx+PtyqoSlX0a z;iSstxcSZHpD!`U3z!C!I8YrB2ufh{aV~-e7GwtT_&!=;g)tcalIG8>kVBgSFPlak z9<{4i3$rW`+nt_lLow1oU{!Kt+^e#&1Ae>YLOcGPD&t9<1oZT}bm~W> zrL-Scar{bfVI&AD@R6KM3(kZ5J0FtgN^RawvvnMjR)9FT)ub8Kp%W1X_9zRO$ieX{#Sn_csO2t)z99i;bG@m&3S~ax^bIuRN~;0*lJjK=m6MrZ zo+|E~r_`+6+|Q%q`dxnGZ&tCB#<5puyAv$BRGVDo##&Lm=MxV16Xe^9o5bg^N1rkxGl|zf9#v5^a~x zhCB|a7@{hwp5M>At&Yyy?9X$2YK*mm7ZPtvqmlz_KK$jrBx*b}<88_^aoamv+Uh>j z;^1!$@aCFQ>7e88G=N50kvMA0mQrl;kGG23`r6av&yR~Gi!cE=Qg7#~(XOfyD04W3 z1p2eLrQoZa6#hCDgOv1}>?)C*rkaFk+!2ss<*HLQp~2zl?e6+?zCzy5RMOm5>R+4M z<=b%#-P5NMQHXFE=HJ=PO@8m3rDJJ_`xL1tF&=ptWys^p6|Z816Vkggdu6kCdvS+C z5Td(eOsaF0GmsAuHZ~yjCVeGVHGuNK10UBC*r4#kDAqLiX+KR{NRkwBH|Lfc};K_AA{$ooaU$#q){>5L9joOOaYVM$?l}AB4 z9aUq{h@cBC7YcbQ0Vs-z&JOrKTje78Wl7`@5`6|U!V(gXG==VP%v6OT5_GQ-4-Qsu z+HdlHJ4~=|Gk|@YKH~u43#!ML0-FMQ@vq%2I4FDl7vq9TP}1_dt0A9?57Ss#%Q=G$ zY7j0L1_~v+i1oO)N1XZx^nAr^+eMCMGKjUEp0B3alehoOffN1(j^V3MyXziTeT#fr4B1q$%X{#vbAZ#tDIm3pNh49^_yfWr)11M zN!p%M@j2B#l=-Cmzh#{N$59&Lk&59@t}+x2@~y*ZE@{5Baoy?iGQJf1qR3n)-FfoJ zdJYD`xP}ASA7H6C&RXqLwa*FlkL>0PTAt4%GxfNO40b@FqSf(_`ErjcpG@@>pb99q zXq`C2S*@k9E%z_VtN_7rnpITEjh7(znnRslOXDx-C8jr9B?*ZQA}ghjpLO7>WI zs0qaIk>+;WbM7V`PrrVah|wZqf4?_NtIIcOoH4N&=hD5!sf!OutCiQ1ZRx!Xl2Df6 zt~aAeX7BAz$6Y%KSGFk}T7upC^8n#ZHJ{?**M*E+CfYb1OeWTy5B_H`b}=BBw?M%O zatD@YesJEp*F4GOtQ}^;WHqQg()C$~`0jH`qDH^#_*dXO9dp@tu40p!j~h3Y)UK(D zu4bK`Na?b^vE4}PxbT9Sf91X;DujCN7kARybFQh7@2ToJI;%bAsW?5esEuC>3)4SC zG^CC0XN{u1CVlf;wD)TeXE@aOwlKoAKVUtfWH+&L#uW4HNpZLNq3QBVz^n27G4S@N_!B$3k_HF`_2#_Iv4_0s@U(4lK4tE)?Y8t! zXm|H+mRnc+3}KG`f<-srp&LSK?t{v1m4%5TMe34gcgD?x#OSr_^AqNRYKLdLGsq1F zR}HBfruUM3O9Fa?5(?#^PX2d+=%a~(QXWA<&5XiEavIdWHL!{_5k}x%60H1(hLSrk zqBBY%mzPlJELXMr06GGNZ&|M)ZrflV`PkIKenh#eeKlPJd+K+3n(w7mh!QFNv6I6^ z@*QU2l~|$JYSNxKl~|$5A1UGO{U2E+Z+@j_cRFLya--jzYj3sa`QK40o9D!+tgTYq z(>A_5Yj`J7c>td|!^UIXjj)t%k~pMrK+vUKmXdxTeC*AH1KE|2N2`jBMkKF2c@2B8?*q;p&ou`(?|9%cJOjqUj>MR4NvP54V zMV^Ero~RDJR{fB4$(A0`9!uE7)P&T&Kdy(~&CDKG7_iW^hZiOio_O$o_oXrCUpHY4(uO!gZ@$5A;nbi*U+LY(iial8UC-;V#kMVO zUXSHAHru&|)y#crp$M;02R|0&<{*gl#khh_FAr`Z2%8n?G~+!pK6a*dS4w+b|FKUV zO@^~;LC2oXdru{Z&I@hktquF$PCwY1_IHLGq#9HB+2>>IJzNgGDkd%(O7f}n-j!k- z?}3Rx178fkjEhNgO;&_K%bd&3bJ8ZCwFjKXwZVC23dTKGcs#8Sy2PpYRg)IeqMbkwi}8xkeVi zLNo0XmE%r8PD0;Q+6_56HZXpn>00_Ckqf{ZiAOOa$6@{{5R}Kl4@G$+jVJl3;Rqs~ z8QYZ-BgV`Y<$F3CJ%EV(95fI9{?p;9wpkD*LGiNTUIj_Ndjuy=n34>n@#R9es%;lc zPt_B7xT8?kUqmpD45OM!CSZ8%OV>A%=HMM}_;U2bppD@{S?TtvwSv--e;N12-~b~? zzw*Xna5C(qBJvES(w_~blQ*-;%=|xx9DeIH<0Cj8=$kT>|7d$^;?g3ZzO#sAr7YPT zQXrTb;3?-_qfp91(QK<^=;hnUCM(aA_s2(~&RmDlc6V_~{SMYi-O02=+Dz2ZM1s2Z z=c!(MG9w3h>q-1*ig}vThupu~e8WKRz=`?pR6i+XM0ebq)88RXi*a$`Xgh6 z7-pI7nBqZ{;j9iheJG2ryZDsU#!}IRRsVy4*OFd%$tb%+YA=N`j&~?_ut6sGx{lys zMI(0W#i(xI^Pyx9!vf-S*Yh9%X+de^zy&;ch%}L6cNk(4uhjH8q(S=jk`01dM?Q?} z;Mx)E;s{}QZQ%& zBXjlhFE)osAa$RpLckgmrhCxyd9CDFbF#|1+;j$h?&VX}pcd0cjQR-JMw+^`sLkyx zt#p%~$DQTk@z!RS0)_t836%0q^`H-n)B z+R#En?G5@u&S99yLYZG2&s9z^nq zOj1cK*Ou$4oqnc~=tsNifyXcN{qyYJ3h$vstv0&OT3>hkg0UD@Fob+Dh--=HnZp!fpNWd7Yr^WR|eeHqDeYY~G zv4hA>LyY}rO0c_Kq2Ol6)(j?_O#CAKDJc5SlrR>ZB*hz6l(AA>WC*O~e%UlPikOVH zS4Sv-MpAXY*X)vtpFnh_?yU3{jnZ(3zh<^?&r&OyN=CdT<4xXX7UtDYce=n zYcX<01NFyK(?>NDj1inx-}`^N{oyLVltN@V{hAr&v(&a1>!y$CQ7rrEc40PC65Y$K?L$!q?Kz){kv%bV9^^5W4Nm z<7&>!nve+5cs`_csftC%Y-`MDCUxbP9tNWJdVu|hj1Boy6a?`nE)Ga?L-R7WiX`OX ziz=w$?tv``+;j^=GB;A^b|i_xgqj>WzUur8rzxx|cCM~p+{RslY|BvC=<07yMdSr($KzI$g4Gvw=n77k`LGd~K4svkPgIf@`*;7t>kk&g zU=vV)vkh%BU-o(p>vr*7x_XrEeeX38Y8EN|T~6OEus4n-KmnsVDL;x55d=Yqhi3%I z%AysZoRdN-)&25g>Nf*2VuBZL#93^J@Lf7i0Iu9WE$wu_hY z$vF*)B3V=UilT0Tc(Ru2gD#$H;GkPz7&%W6^85f(BBet!CEzu&>rD*OGsm?|J{oK2 zUW^CpTIGc$3N<6`syJhuLTg}THORdfbHIqIuN^99(cIr_e=>^;~C<>gYfUK|bKhL_N_E zZ4{*H!~+;i=H}W&%C=8!Pe)zw2y~n)^t3702nh8fS1m8{P?sN}SMe2>&DloEsj#6W z79|n`=9^(9<{8K_07=!W_BYTU`Ks49U*=9-W`1`TMFam)(wZK8h%IR*&jB=b$+yED z#FMIa(&bScLVRP3ovfNQPr*MwqT!w!+|0V5<|r|6FcNL^5Ya~7RK&>N2?|%8SnIv` z2{6kq(n>A*Y#{>s^Hgc|@ zTB>!d)k~|Vepup1_tb|Od9U7vIfeeX`0DC2+FfeB0#CBWOs8)niI+tB10H8p^Da4B z5$k{33yr+tiI+bhZC#cu(46$`e}zq(l99Bd7Ba`oi)BeA&4^L&s^IuY;6}D#Nd3|7 z_vkNI%KZpdeqeLVz-bP{1b;p$s|Q`1xZ%S5lOf?K0L}d^#>a@^C$4zBacFEn1Q%o5xcUO z0Z#K|iOk*R_r%yP1~3FbKnc&dE^#+L$|XZH+eE6B-F-lAS;XEE)4 zY(IOZ(kP(paej1sqY|I4Fi?}Cz>Oea4<$SjnG+Y99QI^XKdDc@X5Knw7O+2`|NE>V z<%YA2!#~c|WRg~Id`?9oIkh1wI|p5*qMiSld~?AAF?7sL#tO-le7~&tWz#A{?}ARY%y!o?CS+TgK_( z71v5B>5V{ngWBvnpKH;kph2#$?BYdYTJP11;?G ze-O1LI3&390z3T?w28ndW(amx6eog{Hh66!`A-c3OJhHgKb4Po_Gd(gXKjuHzq|H} zyC^G*Uoxo`Gv{_lONn34g1<>jA{v5LV`!OSX0`Qx-bI5x$I^NLikJ@+m`&f^48@dw zoQbA+n_|}t(AR{=<72Zv`w$H$9HS}e*cfoQdJJcte)QgVp-ihAT;Dw~EcXvCa-N1b zPUJ4eytHabSXc@=^Nl=fV>D0d9#yYU-E9bIv=x=G*?v5DlWapcxH}sZRT_qJGVHl$ z(Rm;WVXxdI$t9l!sA&j!)khH4w-17H(#xZ#?|Jy5;Kpzr6{b{HJtbfP$lZ?6?v;C% zWNC*O@XSQyGtu1tqrEIQ;gcgzp~(7QV>;2!EBpVg!LqUT0;@ zKMb$ZF?$sMS=|{oPj4e-lAO-Io;_TeJ_NDeghv&iQ6wTCR94h4VCs(nO(ae6qgj?N0lH6WjTgx z17AbW`4sE;YtEyb>{X7&&-fFlT7@nI7VkMR#rXdWpie&5f$ClJ@MJ5eWU7h_D?7xHoCZS@LLyJXk35KUuj@@o%05AHS3_T_>^aS|Bb_s zbRUtTV?fA}2~vUv@*UIjJijmV$R0>00|VlWubHM7G8JqQyOG$-{Z|8_?BUe|Mzf6U zV_2hx2`tus4ng9=ah4gdZ`|Pp?+8?rC1^O*2CyN%iFf$8_L=N!4NNFYtuyPH5$`>B zc)c^sNoUET&8znO!17B% z+QswJnZO)4v=E_QFyEnOujb`hSmaZ=)Bgk%>?hD3LU4hm5@|^R3&tUAv8#_CZ5~*3 z*$ZULBNLh59{mCyMcG=}>ev|?eOj zFtIqUJ!`6Nd{!Z9sbjwM~OQ)=feb%pZY>7ZAhXDCa7=j@O^8gF(lDN}bzTeH>=C(2`}_ z|7rDLCd11eee|$r%P0KEQvn8$K*v5LT|ef}JF%*FWRdY8^fmt$Rr(u}obeG12Pm5) zp|LK#)$>RChakz+{;+vW22lo5qZbFKHEiitul$D=DM}}cZXgw>RM&`Z$l1vio#b+A zsgIiE@*?JdTl(CWVZ;RCYFr`HRR!T1Uo9S(ZRdof?VoLjp!o}zE8A{lfHvl5ONkey z)xyt~#erP#9iQVcoPQOk#ee$Hq>1=2W+LSJIr~WLc^)vO=qzJRA}sE#$2q25VuAV7Q2L zzGz&&j}YCS3I)B3G$P?7uKw@8B*oU8VL!$h-e<^Qear~i%fRRr(e-^oUL5%lkZqAD z4j|l!1)HatRr{G2OcbeNmk7*es@DAl=6R4W^yhpoh%eKaLOhY&IJWDf6KrH(GSw|!XRfFnH9CbNe4GMNMa{S6x^cA zWm@x3U&y^Q7@b5czM|@Lz#TbZVf+UG`DO;H^uoXe?EcX_*gPm545CFy1d#(;7^o8e z7xw|K64K7)zXDX|lnyM_A~bff~)Gp;f~@IEx;s? z-oG|;B*n5e-@(^>7x^;x5dZ^0E;&lU%5hc>Yy7%{SmHYihJ;WxE6#$k7k^U%$1TJ( z$2}I1ghynQ2gJ-Dl>dTH??GZzh$?Z3Y=+f$nF~!uvynW=9Zkt7ha@7Q(Fo9?%|_Bv zf<;-aM!Ac4fm?f?@E`KS!3X+3A@&&Gt!G8y}e7a!4CCeb&14Nby5&~p@jA_Ve zVg7>^xFdj>A01%#12aFu8ZL0}PBE`hFK}UqN?}A-=`hKl16nZc!IrAc%Ga;8!LFae z|4#z?kBWg!h;zpYPM~Zb3>?6Wm<61QWe4y5h$5Y&Js@kR(( zLTtf;)3MGU8VLFgMr@=>mxGi9C@=vXp1*p(@IP^Ft5Fw;5}+~YEdK*}l>RFsE_Rd$ z<{&MVB{*sR(9f4U=J;vzQCg37sEP?D_aDe(Th40Rf0P8aRLzOpB;*kGUt1!?jT-Qv zOf@@c9m&6#r&EH!c4Gu5^N-1qUXa_5e8BKzRSuQ}j#kM|9K|TUL}vcKgP$4m8q%O$ z9X-eLa@ZBV)Penm7j&pXOTxW3kBb~o0}u0E4ua3vuQsku@_@k%N2eO=AcEAJ(LuzV z)mR-|n*A8V^eCHs5i$QCu!GeXB&7G< z_Zu(&L+sNOFO<+WQcE%T(Q$MZuc5OjAp_|HLnd&VO29X@y^x^EEtNvAHB$>4T=p43Ugf0Wgzd!T93F3l%3T&{H zV0KdBhpbOKPGGwj{jIi2`m@C)58TkK9H-efI3cm!Ts0?jpCqzUU$FhvLfP_x?KvHU zsYXiy$^bC1K#FR#@DLgxO*L8qAY!;&9qiV~>hJ^(XfYTyU`y7jiR%U9FfdCRxH0)g z2k0MZxsX31G>%AULqZ|U-)*%ZvXt5m1W%aES2f^c3qdAjfHg3BLu(u|!KRt?nTO3M zDI-!EY(gbPD#K$JxXh(cC^er*C}}WpDX{gV;R$esw!g)LubIeI0jjYcz$qX+tV70Y zDrI&Vd(BdA>a5Tbb{W9d3hTXRT1#6+;r(jeiu)sKTIFQY(XD?|X=2&Bg>nO15wN)b zlq}9*jX=+@T;(OV#7>;;cikJWldwxs$B#cZ5v!NfQGN+ZrBlCs>5W$GeA-`s+nZm1 zN6dTNyt}Dful}G2FmJYkJXo8(CVE2a@v3Q@`!a|<1qD?UqIYV^-(I*IE6)c9L4fz$ zCUI8Bd(N1~;@-%&l-9QKWSzhm_P=M)nnI%p&dt5Odt%+@JN(wV zd57sU`pPOFyPD&twDR)uN;jXZ*sRQ)-@;cbDLj0Kwh8Lx2z@I1KLY?he7--3NDf-ud6p zxzBsnIUjoUtTny5rlxl9uDxs5?-KNt9Ihj{lR9Ln{3BDL9NVgII=;VjOICsFG`XaE zAm|190NosPb2N3tk%G3R1AXymIu`Zwd)hqlm8x#}BZHX%enGp{VfG8lQCRq_ zn+$JlVVSW!2DZ(NE%15kKYQEExLt4>-gT32AUyL2Lw?vT4teWz0E& z4Bfmls#DXoUN>}Qj~eCjI~{CY+MBUZoq^F@+oFW=h`{-2N=R*;hg)E# z<88_`CAp8U@R0oocR1}E(;ivA<@;AfYUB%GE-KAazuLjbaEm+c!&tAWra^VQJH}-!CoIwLa zF|n!!K91Dz8uegw$R+CQ(ttnyITO;-YG@cJ@}A6ss~if7DnZA9}Ox12j9_e8Wk65`{T53(lX3FPIFo{h%r^~=xFHT!ZuV^!W4|G_+$DHl*-YzJ5&e*&Bfm)aN zAN^CDbcotZEXnf!ShvF;Ss|WY(e}T7`;Li4!B>Ksly?cYISN0cr_F@zIHzo2XNknr zb~(#dH8YuJ73Y`qba~S}YzQJeaQ(06Xs0LEJ6xNtpToZsozK-wUo)-e)mYehe0YH*4~k(2yy;kr z;vW4Qh$xM%12T2yKBCRh7L@clw4*kslN7PM=4KqdRbalAmq=(mQ#Ydz%^NP{;AinlKT zgvYD<;kMqr3A@NZTW`^;HnlqDv*mn+e8sjy^F8x8P=-t;UBlCI5{CkXW*TrqtwAX6 zNwhV>d%sk9vd44H_Due&21H!W_Q&|Y`J?yW(FezA98oA zLD_`yErA~k;`uI&qwe^jtoHu*k1YNHNcvCXX{f{RpQ_53lRIM@-Y!0-IC*qE*vT^x z@U+B5qb+ymMsi=JVL1_RBJDkD3?6&L7EA^95Db^lhGLe@$`__4~+2 z?_vy1YrD36U0CE1GJN)i|% zC&_PDSSd+q!Zj81WvvQcx1%-5plgA0*(o9IZl1;CF@rk_Gw%+i9@+%kBXKrFnWqlj zUFt6Wav1-g5l*lBs`$g+8$7&CsjmYa;_G%nnL61PKLftL0Z{?yu_E|=-wyk<`7fIj z-jFZm*)|E^k@~em`g-4hBcKLB^x{R26!r>_JBUplYL;CndYtY|N8>hoSs`f#TN zsNemxYVNtrg*&HNPm*(d=pI&kG@mzbDPZ7d?__pB7752N)uGsY%OmUll6%7ZKks;7 zD2K#1pJe>*^CXZDbsvGBwklR&UdbtSuP=|Ee63mth1X`j>+!@y-I~SrC2jRb=fLq4T;CNVe6YcL6{q7|9Ee?a~)X!;oFR@2| zTR_EH^V~8jt8hL0Y;7##NAJZHF5^O>GmwJ3JsUJ91|aXIF*{8l?&9yva7}}xoG$0k za9$K~nJwBSeFOgz)RL?IE-_A(8-We`H(f4XWJ8(Ohmv1bw&%~RQ zp_E&3bKg*sv8&I4eP*`-=@v62zhBr)q6A{R2qC6k_SMBlUj8Mei)sdICoL>y#Gj%K!R%U@V`xUWuse2qLZwr5#mF7V>tJ+fIg^+9A8%4$?-_O)s{4PNV2W(~^`~6dZWyrMBortk%$z9;>>3yIS^WdxahB#=TN$#eXX4$sTN;MOVl4SSJ|g z8!qXjY_l^n)D~mHDCZRLixZ(~g@gg^kNwmtKuddo9!B%<-$6puN8(L{e?w?8$&=28 z7qU`$o(w5k{Z$#!e#avh?7=Y@{F7twX&;JBO7h}a*HcK=U5fNO_obJ$3t50Kmd;z& zEs5FLyIBnxvtd5_BQf-K!2cLh<@-EySGOF{0^8H9xjbj)s10Fshd~`Pmj&_asRC;B z4`FnYr?>G09JF=1O(>pm>&wouKWcUu-M?b)5vQqpQI=hL{QdVwx+#_r+sSa5WJi`n zDP51DO*)qv^8c7p3j3;w2@cqL`#eV&dZ*^L_{|rnuJt=-K%VydNuCr0)6Yg9P?>By zx~L6)oe34*4X%d|`q}|4L4J}-m0EfUp~G%ReOXge^s}!2{C273Q;wdKmlnAvi2ST~ zZcYuXYT8h@g_iT@cpjbi#z7e#D!O*e&wO$I!zxr&FW!HGr^56uf3{s7J$)@T*)$n3 zujk75p&~_MQXORR>x*aSH212#kV!x4z-ESQS`E&vP-s}99l8UTKO>pjhmG!xXPwb0 zN9_J>P4tll#mvn88%A(^iuIkeKRMmHRe|f^sB-<>x{|O1{^Y4%id?bH3VnM3QezM= zbTsk~cP=FNf4O}%VNa~5u^yzC6FM2G!B;H>uu$BxC>Ua2JFuN4WX83@;+CQo(seTU z7}~@npgQe$Lhha-?(&5%&gWF5OF(Q+2%KrYZ#1dR)JQ$tXC+16{4Ns(89z7SWR<@ zSB-a+;u?huI61z=W}I~>@tw`^B#OPM3cuA?dWIAE zj-!IN7-rxJyjBVlz_aW)^5Zumu90d`jF6a(79W6`BAPN?SXBo#oH@kn_?=* z|4Aa3l|iXA9RD9GP5)oNv;U|xaS>1N;899#7th;|%b7ZV{`K7-OuCe}eDC=tTxn`b zM0!=2(;}U$BNL#e<%^GR$~s7fuXPxk4Xj%}8aa9WSH-IY&G!lm7J(j}>HyF=Fu7Mi zOIVQD7P1+)x}!D)%E(p%V&{gmVan24Yc&5&cL)i;oE!k@_pga3*zuvD^ja>nOTOTp zra+;K4&deLpn=6ptpIpEn@;-3l-t*_zwfu##zm`WRKsKn_&9kEwX?#WOLm%dLWK<9 zZV8RCPT8!g^YxKO+?i1*%LB|J>_6Amk%hP+K`4{&Ql|KJsG|Y0nx$Hc&TPpLf~9Y& z$QwtWKS&D{;pFfsbCv13Xt2ir3N`I}ORG2HQe=Fr>9mqleTWOcq2Vtx*-`6w+LR5J zeJT!yl-#9ZO|hG}e%ZbLFWP(zU+B8ASI2PdRX-JxQz{+H1mq02Z7rl z43Fob!p+&oS6_e(zxz8T;X#GI2b+~pQnRkq$l|Nr{ZQ|w?rv4v!$p#rUDPvP?CuM} z{??{zq_wGSuw*5O<~;-0273AwpHDK$OFG3CeAh|@POk(J0>e-wO@Z*6rwhhh4Wo_~ zBWVI$Ly}(q$+w6k?%iJpUq>e0g@-&^o_C#uSX>($_4hg;>G~B_~G zIn_gj0Ni{n2jSBnYY)jAyfb{1wX|BLv$$EPRyj}FM{_xAzvI_6=EiUAx0MH*<)6mo z@xR3Lr(*=c0{*Eo3K0C4)3c7Zp1U{1aT#HtKv)C+zKehQ3(Jj8BRx1W_`1;AESdrRLb(6J&Ob3DQj=Nhwo z1MUS$oP+H&u|nutT9#0UX5w1#q&P8Wv0pKIcmdTWKv%v^IOJ6>Mlgp|d=BC?<-dGd+ewLf#Naqw%?KRh@sLqB~MecSGlEB{Io1Zd$nlL#6| zPvV&;tFM^nbGFEfHYk~$dLDhfJ%LlP8* z;p_CI%7VdZ2$vp9aiV*9mfcp&8MoYxP(?7g)a{}2TWcqsF= zVxn4yMK)X~!V0fv^(B1ycvR%Q2o==Qz0=jG0=EB=p2T_kUi~rC$7|L;OztxMVg525 zdl7f6RxNIj^EGZM#T3L@hyA-By^;NRKWL)!C0nGdz!Y>7Bb$PgFo>qo^nj>(LYrdC z>o*yK7pK-jKB;xlsMOBnnhVTH2EB8vHeOhxuldky;DUy zPTce<;<>gwM}Hc7@lb}NJLK~BPLHn%C@vhKd({%GS_7g2?tq8a$hXOsMCU}|^qjf9 z!m;az)@RKSA<}WEVB&berFWOneh%W3{+TRQ_V$*chBESzxzI#P`~&@oRV`sh^OmFVufr}$ zzVmW^&t-s*?7J>OcB0zbFyEzDe&BVFQh*A2iD_BOSreOY#)MIT&BwGIyDH)RpF~=8*wi_Qwz72#jlFj>ub8qQhamVf4gM@%T z{UrT#r#R6A7lMZu`w$+fCZ|YX-r_h>$wP7kVgz8^ENaP^`$^gqRMfikicUt`GkQT> zsBqMyyUA=+UUm%73%Rh>7j(ZUjy2;X6nW8e3zN&?fQW61)H4UwJ^Wqv zs~h~Qx>S42Oxyjz1r{NH89ObKFI*@v=~q;IVQs>V;I#EVQYDkQ?JRVYmS!4KSi4Ok z5Ca`!8?FRlI48hBx|F7Uk&P+cwXbY})=O5S1iVcBFiWQJ3 zrnUyb5@Z>g8ajvd=IwEI_sR@g&s$T-440gi-?h-hJBX$S@nkDaQ!c)SE=vT!Y@8HG_;SyNQwP)qt-q9oPHM z?nZ;KO=CNB5KK9xCjY#sanr0FY*Xu$4?}o$S>K0ypf}{r%-s3IMUB8`Fz8RI;@=vwE^$%|cjye}(X8a`Jn#lh zl?Z!lnc1fghf<#ckWo+7d!cfkvs@6#VmOmhPM_mVoSeHYK;fg1ef;s|@_edS{9V}MpW8+#=*&18q3g`sP|7|*&ys;-bQ z@S_eGYnYJLoQsM9x7Nu5+h0vFhLZE+Ukbd?r1;Mktk{@&hShXooz1FbeBol5Uv;9D z)U9?b@IE*Rhf`Rfn#YO2N)O~G*tnn{N%`-yBKg<5!K9H#mI-)|F&^E+hg0AQF47FL zqyk!{9GeNMBPJ&(40m3mO61J2K_&3(_mEd&1Kw_?3S*IJ;alxFp~bhN*y?a5o?`*XbWrF zDa*@+X!A(SstB(WhDgl19K$?$r~Q*YDd8e+>5xLiUvqs@;}t179p?3S7SU$TPK{jX z2wlrI2VNu$mvW28gZVMZ#=BA|=a+GXqne1U(PIa?%+c&sm_ye*>_?!VA*oWCw177T z*%NM=vdAwOreBBzr5rLNMw}|p1HHLg3MOkPG_k`dNY%A2%fp=~yWhpmF|1LK`S^IxNM|Oe9w~5NqcDB|(fy=S1yW+q|fY z3qN#13NvNti{QlJMY7}PBDf<78kL9nF;c8sJtnbAzqij z#fCZKR#dd=_nqL+&0tV$oI*eE@Gkx0^pFXWRg0T7C-HkvJr?(y?kGT-nkK|)pK_w`x>x=2y%(Lo zE47phU6qKQ2fRx&CJZ2*+1n{d=eTRzq?$>tj)`qGnBV)q4dwTW6fj&w2=w#4FWg>M z**d0K{hyWu>T0I~rQ>+${ggCwsfC3kPYNuUs#xN*5xhR?WUBTL-s@I_*o?(P-hZH$ zss*u4929+YfD8HLfR+?aAw`!X!9j1f5b7fPjWP*%k6n!~(NcxV*HhSVd5nlMcVTPF zk!&Bz@7edHOkBpXsjK8Xj^t2*V*lB{%?|Ah*{i3$>t+nH`TRiLOIy8Horw`9(Lfah^(cVcFw4AT( zGOh-kwl*xaUpPm4;US&a>a~3BGqW#(wNYNN+vw!fjIfczPv5`$?M@bd6VSH{YW@~S zx(^xT*`mYuSNrlMX+mD=@FR5}fBFyspTCol#@r)foHu1UM2gQ-?l=KX8YhMN4yO&h zn1=Y5NF9?N8KLI>$5JN=R|?&x4w>3|^@$?jav|2-$cf@ednlHB=f~chZ(d1hYSK&; zWTKm;;a?b7q6CuOV1K52fP4NXA}x3u?;%GC0#v2>EhF!weSF4!OHZ%1p9IT~Q$0S| zYwZVW9WxA`HSIx$l%hO-u$*o4TZ{=S%db9=kXDUUkd7)QzI&}WrL=$58R3^%XBh)j z8#zA>Fqm?+JeQ*o)+0W>n|Hh!_US*j!4qnHa!Ms#O#MKb}qteCU~QDp@B56CwJ$d5d9{esw&otbP0%JNXGKs8K1_GtYJ zoaPKFTDGyx@kp(i;*GbWk>YV{uMqabPu{1(AYc|}{S?{av%1`^yGhFy;Rp1&H`)Yo zL+<8aC8K8ATfHrQao&^|J)klYujcBBiy8r4#M%ss1dOY?<5l&PEkjLqC*debLYgo32I^;L|qHS3sXiNcX>O&MlW~Y}SpB@n=VPnoKu0$Ri3B9B>wbHWgZZoNM1& zD6a-mv9C^R?){R2y?u8}iDQ%`ZY#ODel=MKJz}@X2W1#6{V*??y)beDg zY203nb2~yJB*aLmT~mF4Mg`{LHTqu#{W(ry=jx_GYMd-HlY!`ys^%8YSG@d02Guds zTj{u?rPWp4Lg^|tskJ^9t4%`Tv3a{|bqdS_{CLo_V6W|{3TV4cL*|1s?2H;blZNbD zheIsIa}azmDv2u#Kb&7`!dM`g4~1n8`3G}-5aN$9;@TKGg15t=4yn(MY)ukr^%3Q8 z?s(`&!MrIYMB;w`B%~H8g0>Wvu*Udwm``yeUh@wN$BnGEr3acG&{D<@bUO+;#q|Z# zhK{b-zd8nJ0tVqW`|VyUKG{z{j236Sw;V{c%1_N7hD`Klqgo3p78@G@k``aCP1q5( z###C(h)?gSDqR-UP=>ouD2II*X`6ivRP!5x@fsMLAq$1+t zVOq8#YVEG?TzIMax_4|!3Hcqf)EezK=QiJ;%u7+udhV?(yc_V9eR)|r z)q}#{kf3a9R(1w%?*dW37X$Bff#lwYfmymipMm!7weU#B>X{w--Ygq_Jrs{Tt{;I3 zuTGjg6|a6?dUrH+2zb1@8g)+FGwV*zH5Nj=RJY&R%zGcS*?Um!gQf$_))yvJ44ASb zeAIlGVD{7#QW9Y7c<>CaG3W^7#-_4cI@d)e|H6jb5p8S=_!IpM;C9)b_`f>}l&3b> z5i#oyaW?MN8nqCbA4meZcUn@?YolouJdKdCwxH?d?FzdmbGK#pW7XLrMu<_mZSwP0 z^8G?v^%f69Fi%FKiY9G^L(VYY^apD2S6|vpO+~9JZ>V0dgRqWx(uNxMh7VcJZC--t z*p3gifvbMk~QDFlH}+6Ok-Phg5sj?+UxN?2K`5A*en)Tquda0Ls(FhJ5)1QR2UDE* zD`QTW{g3|>Jbth89qmt!AeqoH6fP(D4zNI5AgK+$?8X_2rXI6T1DvwJcGwsnywQ0U zV7Df`GXFHU(VkuC;{8X#K=2z^9BN0rAn|6sxzhBGLUQgQaYHjrisWMP|9h@yXfwrC zZqo~|T9m#N9Hk^sS|bD77Kn3RG;<)Sz*uaa@J;Jysz`gI~oSmi?(f5otJ z>76akvPwsR1l6emDlvMqZlLs^I)*bd%Itjme^RB+v4i!{MhUBKuA~TcKqE{Uj<(;I zpBHGFAwfRlamB#Bj#j6>L8!O&;2_U6?M0I={rycZ?S}CdmP4X48Rzbur@e|a4c4>Q zRxD9Z+{524)iF7$VezJP$6Sl1)7DIAG5VIH+`DamIc=a{oA=YsyW`f)D!KoxLb?Tk z4SO;owV|J(>mNE!$KmrZ3-80%4}Oj~9?LOUhP&3#1?k=jnaRmHXlZZl4%LN)f{qh~ zbyL%Rz!YpKrN`jlZ69>cti=zSvZ3TylS>G3OOZPUuJ&_H(@@r~KqxE^u#hLiQFv{!&v(vWu*or#ZP{IsC8ud$KR zTk*|h3%4s4Xq}uXoc0xKE4rY*%l{S{3|k?8SG;>zJppp^Yl+jN8mZF_cWMPK znfuDS)(y#49rF3jI@8(acRVIjTr7WVMWtCt0YXhl7m<4*Ks`F-@iqX#7+Xj`Wb2hk z3)O04N)(02K%OdE?N6iB!$010Ss{;K;HjTDlDnkEqq_}dpCx$asjdShlWQX6Txmb}mzf^neKq}*_ z|2X1%6?cd&1``}~V4>McD<5pUPWiWLD8L=^$y?3w*F8oQ@10#E@Un776d091G+NHQ zpk!$?odZ?Db~m(WxzT51E9}wiw@*l>YNDYp2mE zH8yDNbJ)4RgFhEmdha}@mlM&`-%|i++55J*OV#?*_cPzwf{AM?Aa#NCFYK5uf((ruR ze3vRqmEj?mfnv^ggYDf@yR$KJ0d1+_tOIy^K@%ohL<8pyftUfm`zNWlR5MX#{lM3M z%qT^R6RlE%Mdo6Bu`0?p-p9qtXPe%=2vd@=%O6*NYj7vjCH1NM3C-NXFq4DD=Unah zYsu5Ac{D!HU!~@cxx%!`I2YFPo=~3jsQkmrz=~GhLOTiOQyppErrfr6(u+~IVA)Ez zM$}wlO=3R(9v1?D2ezq@Q;x!>r0BWpi?N_n?`E&yP&(8Ry0hZY>#anNT9^0G4>s5d zuAlp(zQVB$l*&I@jKX3RP`UD`=2`x+)f^=U@98Ky0~EvJ+{dfvxv$iYtxrEA1}sjA zAISsCEJ%rB9HkcezBB4|#HE8y%g)n|cXxs9L@RZEA0VwjZ7S2dcFEQi=iAq>9A4UK z8j_B?ZRq>o#0lRXPfv{2Ui6ov9#sVevU@P*oUR|0kPtNcq7A*XM-F4>XQ7&tA6p(x z>+B10tX<|F97~kH-3(f-&s6FLSIjwruX6er`t}Y+=#Cwj`@Wc~)Pd`i4s8azXt-epx#d(;Q11W zQBmv?r5g;Fn0fMDrj}QRBqn+CB^VW-v?l$l)qzc{?)}k;ZBB=Gs@fQgJ9OHQTtsyG z+Ps_&nk8z00MD>aHNOwU@<}f`!yTX$Z zOE}Ed6#70+O4qCeSd=`}?4oYNm|kG$`QE**uD`0bK3V+Un}i8Zh`jewTyN@`zq07V zFalUEyt^~bKm2Liy4?C#v!!0WANe2BnA+V_!HrN%7y;Q(^{|#Vn8l{XI{ZH{>m8U zlx9gl&!=rQjN(<9T;1tFs)0UBIMaNeXW@j?SHv8Q05=eJu`Y8Ujk5?sR;n@x>Yrh_5`1PrLYz#1~4`&DcQ*VL8xhS;p4u43DXJa<%vXV=8O>rk@Ybsg%)=etUEp|!R;a66c z^&E*1?H5Gz@7oQk+F~~?1W;j~&%ndupttuK;Nc0-B>+6aw@4k*g~blve`*xn%ruGF z7fuRKIyVzdLpFY7=;_#g7Vp{Sj+QKTiTn3sZa&F!=^!aL-fFK-lGHz-6cM~kU11Vi ze`LTj#7a1b#7%i%8%N&j*;8heU; zGyYI22Iwq+cf+yMCHD}H`TEWDXQeN$m>z#Zm?RF1WCh9S@6jK(^Y~Uv2lxh>C|{%k zr$?)`YUElBa}?RL6>Y4#Rs1a(u+OC8KH6GKfWy{)NPtp?k1N<`f?g6Pf7~n(O+u=* zs+-OKPMP?Og&05nNmckA=sTGyIK*cfVh_9?xdUgfvJvA0(im>^W2Ee|No(Oq-`4m+ zj^Z?@n+whGf=pNa5Q#+=rWh1E1Zw53+<=lyDxN};w3IC=S)>e9A)EeWRH=z1wK-#w zS^oq}EO}G}7?a=Fzx}KlI%DuR6|9UY%qAGb8RhvjyZozFH>bNUVv@fme)>u+)iuR7 zVgNAcFY<6Yd{06z>DGxmi$ka%-3k7d#Hvf+E#YpS`sB;qY=U+v<^Fuk%8Th1lkPet z*TO+eaRpT^dK*9Vk#}_aQYJiabtRQ{%;oGxl4qwBcW}FKwsdh|DXw-e%|zPl3s+?t zeiNw2xP9b)GLS!&Hr6-RONi>=QGudl)d2J|kj8s02$4xQaMk-x{?m(KN97<0s*FKi z*m|caKPVL1{96Nz;K_Tl!JG$uKPTw;yK-ttj>c)~1VNQnUKX1s*=5&9j^|JtL zu-P(>0&@ZzJ~+pI>6Lk{5JW8&{^RT4Mj2W?f%CFq#U*);TkLw+>oi}M=ktM}ASI~%jSUzag73rbZKbrk0*GAx9q($j) zLmf!;L4LhZi?TG8pb;9We8pfI@;p_T9q6g(EBSB`U_X=>N95hKaHIHRFniVw;hMfiR z!U&Oog=Rq(@4tWxW&;U}n=hhyle%{Vx>gO?|t~$Z8!zOhQ&8GpPenb3m zoPTUiFjAbfd_?htu61#4yl!e5o4v|3SoY_Y_bd{2EnA=Wf;J><^3-ZOu_N;=-{|=` zo;8RJ(%BWV?5!P(7vm`;t>46!;aHwibz2>jL7K8m!!2;T^?9<*Mz1kpo#No3v%1y%eC1>uO|P8_m$)oH-x*obl`SRxy@}9IV3rJ39o^ZW)PJoLMnjQ^n-HpAK`x4`BPqfI zY%>P4>yCG#%=Q=GH_gMSnl>y3+sL&}t2Z@XzVAtr;loS!r(leFD*fW#<3&`8FqI*9 z3>`NwG+rT?&)AEjvEWlGw(+hMPp(wSgjE7j90ox#RYsBro=Py&SE+C`9f@BDRV%Om zrteYxudxCDS({&a>|EgYg$1p80MfwhV27yfi0Eu3nj3( z#zMsgJO9Hcckehv@5#(r)VB3Cx&h-vNM=jr*c!oAA%TDQUwqS}TGh#+f=zQ<^aAE8_z7h{r zIG`<@5hbf88QeF4EE`MKJaBnR*DQC({QbI>`BimmA0F%tdoU$(8ku`XDnlU0ojRn2 zEq{kHXYlKw{?>>{akzNT9!v2K`G{oGC143#nK~qAv*l615xb7mGira;J|stx0o*&O z^Ur!~|Hq6hQQFs5x(Gw5guY3gQTgrtARt$k$iURooyZ{18_eTni2Fw8=n^p8=ICNc zcGo}oghur@hfoQ^5SsG@f5hzQqW8oSk@JK5r6DBeDabXFr&-iCG)IU*?REA$rZ_MH zTmT&1E(E0y!HYMrNi6aCWjW8Ixql_kU-9bmCr7S_#!;VKq7YpCw08D}R<{XdY&zbO z*0=#R-+Hau42+GDK%oBl(eRakt2?R^jg8^?wA68^^t@X=qmxEx1K)_E<0!Cy@A;Qrs5Tk`f)P0{W16%&h{rdKcT;9&&ZDmL3n-Ru27v@Qh19bV>nRSIsu zMgApA+UfWCnwLxRAEPj53alW-iiZ)tQL>Yk2?)zPLPfVeLPfVu`&bGpXxThc(&x|+ zUzHypyr%rlC+W{lv+)%^e(B|B0i$k!P=NXI0;mX-)7G8uOaN{-0zjLm77#!AVVHV{ z`0eS2v;Ymw3Elne{=|hwEJ@?Zd={Nul{isjW^Ub=*HfGb$vRK$S*($u_Ktmp(6~Ep zD%#`DnPW(FNyAOxy41zOE!+$YrI5&9yDZ@9*`KXJ2yR}r)Q>kSvLS!>BvrnW!6 zxbN3oF*eBbl}VNt8bwaXT*Wx_Y@Z41zv)YUK35=9!XuqPT z_yhye$k5b>G@U+bt`)AqH{|Q{HP#dU;ry>(mqAd>Hl@W>&@r;$>lJfZPhWohQMssgvXnBJT4kpDq^&Nk^qf1_i8HuqhAnZ(IA1Wn!H(WYNb z*>b!WD7azw8*d7yvz67}^%M|)Di)wPrzbFyz0EVcQMqT8l#29)rgLdMm7P3(x-C&q zBEHaw7}R3D~VGYD8zCsu#&jZl-8a)bfNj;w3v1LH`AeCrUxSuSvc?16})_ddz{r$e+ z!B16E<9z}XDSu?>QOBU4N3J9e4-JJ3uAjwMO~ zSlYfmtnNB|FmGx~cyFqPUMtz6lhA-!YA*yU<91*L(XnRq@&y@RouJ?u*1@^tH26 zBEK+>P40MP-iY`E(S9&s{iq7jkvRkQ_R!ATOG8&AQyL-@+1mo@M}kNEWZuK7@u6Zj z4()rxRy$6J@_zS%bz*#+==r3!729PcBB+h>@f!zOV9ERURc0ccczEbsu%BcsDQv%@ zvC|oV^g_rNK7IVonu)KU{HZq?%2eXVSJ6_ul8)1ld2>CR_QT%$87ot_Z-&H{Z?HrE7>gII4Y zK6*fLo#CW$uGN3Ho3Z#C3G4^vQrU#?gC=ag8z~VTF_aio#ebSc&-+IvcKjW_t>Q=9 zHG7oH^wO7Wa)oV;Pv46hy8WV-fI$6!65*X>O^jbOyD;=rCx-{E)1MDiD`dV~4=Ny5 zg@B5&CW=1bN?4otE5$>pXS8V3^U)bP#uJ{^8+Qla1e$hehVu20-^5HT2;}p0!rLCs zoS}LL-Y9SE>O>pXuBEe4+5XB&YSn|kTSVqrO5`a{B{iaIt|ourMx#WK+~ibAIUf0@^^ zre=#(s5pv77*cn;GNAP>8(#zKpq|A+8QUn5@~w4d%>1y*WY4J@;RBmk;^MhasFhj4 zeXA0$qPh;cbuQbJK#jT1nkUbQfqbZ7~ zZ)G-&aV4weouwTr9ur}7wKkO~dXhT7#!|^*ebt#8A)S^`Sj);L4nobHe6(uD<+$-j zH0{9t?hqv|1l<=V>L`;dYCtjO9AkPmq7r;X4;07Lxlj!`b2t_Lqf>V0(qHx`V3uDc zCi#_6lpqzI{3C7LV!I-XlB=K#tgd2e{v94cRv^AQULWoA|L4u-)aA-I8}I33Nmf>5Oa7(au)^#U=ueYa$BuehOIlE_HH0L&p(n4-lD^EVb@1qK zWv+{zp~Gn&6xtQ@rS>>Ue+TlJURvol7C8)MHm+38w4fY5JVYYgv&;E_Jsg|!LJ|H$ zA)#1$NGsVPf+6xIaK}I#8d0nEfq{tAM&g!m1VsN8$DGv$%O)4SRDW|#)S^2tz}nhh z8*8{&ADrT{nME!t@gvtW!!hlL5h?9~C*ecgY~@(m>UQJZQ(l%~!I#cKiV5#zYMDfa zHT3*a#)3U^U{@f&l_QAYi*GsPv$L9+x#B{DC+U?ZZO5uJmO>VeNW@Yv|d;HDz<@UUXQk`OqZz7coVI+rs87Ym{*f z`3~9%`f|W;naA!Y26LXA+@DywbZ&GD6k8VI#D;p2*g#6|9Aq`YFEigPY9t9$u4BHA zbgffMvc)!fIY5muU~Id5Aai8C}(20xXyMhZ_d)<#va z>^&o%E9;GaPgjWULkG|>_!opcB4K`W78N>x_&aD!Xv+Z!{f)WI$BzA^zM%hBQ4@lB zbPaX>4 z31)lX)U2XK1sBNn$f%90OKV_=ddUj#`$!_#nBK!yks*M`rQVyM976+7cW4}##X?X; z5@%Pn_Gxr~Yk$s^Y%Z{dem$P2S&#}1U6RV%>&}rQL}TdWW;b!F#|P+U&A=XEy9vX+ zRMF%6ye9rmaP&&S)y@t@W0c~E8Ixzn7BEDlNpE5EvR__f zNK*y|VWuv=ne$g*G@p4Px?X*KcVm-ApCN3tj?8+avsf|VR#=`Z!ks4VK6jC&Y{ zzS)KNbkb{XclKee@*N=U`5bMKU4v2q`So{CUuhdAVE05a!yV1$`+je>MjzItJ+eO=G**=io%=p9_x>$G@p4Vx2 zxv=f)AY4ye?OOS>XW?qK`pv4v2>1QK!d7N7ewwJKgE$c!Tv&@M7xqW^6rUgE3T@%*OAC`n`k}>}QY&d7y=7D#!Ll}tySr;}cXxMpcMI-1I0PrS z2MH3~AwY0SS9oK}*^90y`3V zM+I-AoPYCX0uG1-Oz1v0@$acp4Oh{a(A@i+5lUT@!VXl18P}Zlkud-UH)H>rElFbO z7O(wF9h7Ss6dN)9Dnad6l5nNt4yUu{py=RcbRI{q!`T(FnkBNIeOWh;{MDp#g}3;m z{!G)g20!@k+zHJtl*EqE9u!KHc6~lN6{JFJ5+ZI_Zoa_cYBH<8Wl!A6?k-k& zi@a~5omRO7R0TbcN~Z#BqG`ABhO}=)tAq*>LeviI@{Rv=T?%%Ub5gwTA+6mIulZ!J zGs9$-vPkwLtmwZw)*sLn>|bk-YVNPES z|1uJ&qw$3wmuhMYx*l_%ck<+wdvv^JV-mq!KFnTn@+ceuu8wSDV$x3(Q^ZSu;jz{ zul~b5cwSI-k3<@>v#Muc(eU|~SaLAIH{oNvFXoj-R{{Z;{)4&Hu2Y70i(BtE;9YRX z^>%$dVob|y$^(wxj*g$loU^zw4&HSLgCEug#omF($7Qp#ku6p7w`7F%SKc>|!8NUj z-rMfkHye!Jd*+{Sh#OmZd9S7Vy+V9lfj)q*iw_@poo92V*Mi?L--nSan^c|>`0h!5 zh#2F3h0#M&{K^W6v7yH-8Nq2Y+ns{kV6EIm5>m&J)ROY=J^vXSX1hZq5W@F02-K!Z z0bp1X!gKF0^tb*`Lr<1rll_obcr=0Cl!v`r)<&}~82U?5WeQqqp1HKKuvAj6#|XF# z(3rHY=Q(;Ap#3#@2VVuuKCg7LL!a@RaCLDydR#Sjoa^Xw|QYZ zVviEl)Zvn^+sdXOuTOVI%RFWckoW}gsNP=3B)4FjQFmDpHbS~DG43VYchs)dpJ{omr7=3R#4oZ0wQVieyHf%C!*}AQO@Q$)9X+;dU*Q_sP z87=&F?fAJsPOD$n`Y_#!_hP$qM>9a#*qCcT9<*a<-gep3Aw2!TGj@a+@Wt6my;(38 zGE~grJk-6uXGdny^K@phaB|d-Mfp2lMri=Wx3|o>zr4IP@)A&@a5bLxaT2}RkNzrK z`dx*E4MqCG8NxybJ>84iO zeR@H&x1Tf3g2UXOVUhOKBHW3c8O-$4Zi@J>vFbnjr6qq2UWBB)gc7ZwW=k(h5hPYr z(zaDrxBl|;juz7-BuiyUa8nM?vB$dEc%RQ1NzaNc2!xmSb+PvyzI`x1tFa#kr+wm< zp%U`{E>}+Lt;Ox}Vg%poJ;3W4eKk^On36JY`e-_Uf*KYn?B%=qynvlO{VtWn+BSJs zNHb2G!oky)RQ65lE2F|R^^X7OLzZw}dXuzRp;`2DSVH7#SCIAt;*}sj$LEL)ep}Zd z#r!M!d=xGN_&EXWZqE;(EMW3t@#0zi0Gu%|_QUwt$6CaEDakz#(M>)i|%6GAt$(`2mEGt)>Fl@AfMGYxTL9qEK1D#P3v(baXx*qEh zgx~&-U4JnzH_w;<8wcQ$CE8?t`#fwcp@EEQ(!p?3W1{iUx|<;Hd}&^K=|d=D^z+X^ z{U6hdUj@f-rY2^mRTLZX*PXh%$Eqsl(jsw#Pa~MQTCqT_+xQ;BdU88?`!8j;JQ_aw}sN(6oNKyPf)E2T(ePTC1Vs{qpeg@R}?(>n%L26bg_~;&~W)oRhndcPT$k zyh(h^bYdx6+FYhvJ#^5!_tNCSs^t^VS`qe6jFlOLyK~W^hMh@mZ=f)opS21su~+{U z8_vhm)Ss20bD-_R6q0n2Z7EbL6Rcy6lNj z`3?CuZ7ODm&rOpY>%KO2juksEMtIpJlUswDdknsIS@Ou0kZ**ghNX)_vHK)#mQ0a1 z8^6!@&)-xgKQ`91gRT2m`^TWGc|e|jL~@_B#)Y(602N?e|Kb~^r&mYpcWFduB<007 zqeR8Tt#&XEt3vOZewD#GUT zsXVAdfXz+Ma&tYo@JXw_3yvYSz^D85H!Nq?UY{ALvBlD2AUkzb{P!f3>X$BQem*La zr?qye@eDx8B*1T!e1fL2_fUzw$Ne#Z*zT>68o`1YXp(N>GfDrPDnRM}HD7FelrN}w ztH-+&!<@&1|V-s6Zdl?}E{?L|Y#S+6I8fqQ!Hu z9Glk*v3K79N=c!rJ69_k*Jf6MT1va)aF)&N^am#3{dl}4p8Bdw`Pt4a6N^`Mng|hb z`mMCkQR4R~23e}63cbW+b&@&06EqIT+U5@E3XYu?pz5hyR}es>nb#QWo_*1Hkn z?1X>M8^nV1q#XP}zXh7@cX=%|dvHCYlQMI7S9KoTT3PG)DQXHQ`04%aVT(NEHEWSP zB&+h3!3|P4i|~y>1h}XWds*y#v-3>IvR=Z!;(cPcvHEjpGq^jM6<2U{eYkp{^_qVa z0|-4e-WqQH=rwzX+2Y&y(z`ecf8DjaH{H3ilTQ7ZQL|8cn{^Te-$fHwj?7)NkfM;iakvQk+c@%6@)O=7U-E$UGkB*?oBPHUkq`V^ zpC>qu+_84=e$e)^DA33o8$2&A-N|5WE!ENdY-o2ybU$AFxpyyf@BJx8%EPM_y}bD> zyGpP}6q7<}d>kk@(W@bYx8}<<<6g`AoBL;{X`*f#{>&;-Q{jgDt+8>boMvpGJS^*3 z?ud24=c_>8C7gU#a{sGl7m7EncGpd@q8|K;Ir{eC}CK%Dxmhy7zO2YtdPOGU5Ga_^8eb1?9cIF{tzFeef`Yr zgHMY)%UX8;&d@ppw!Bg!9Qem0pUoM%$S(SNq%#ld#=4TKLL=7Yji2!h%-l|&c)Mqf z3mp#F7*C`5Y_I&@x@RNX4K9>kiS4@0?q{7dyQjZ690a~e_b$sdznNyMoJvlCV8@W`U{$21j#}IoN!j+Jr0GJ zqBRIOc05CZ<WR=4|%e4j<{IC4VuyM+7M)ccr+fGd`i#TrY zWO%EGU9?U#wcU6(<(}QT6FhDo^YhuJrVFOF+{fnx5WO|`BCmT#hAN!6CCwnIcz*c-)%=L;ZpBno&Gt zvq8}6vxmj_%oS;pYsKEFqyP^=`~%aDivdHLeZIzof{@~|GB!Fr%~3;slPj%Ps_bM?}cMf3ecT0E%u|3C?vLt|chHdqsK z<0d}!5Y?t@+PZ4glKSiU;Ve@Kz!m0e4#kK8&d1UF*Qig5DTqrd6x!jhy3Fq+4rdFN#^ba)7vWNLe<>@kb zY5^1^44M>N9A{t?(93Fta^ymxFyj34Blg^I`g&;NeK^Y!up1>K;vyl<0xFTSnseel31yS63F6of# z{^gG@Yiym+>LWA`G(sPNI7D=yr6k%7V|Ntq6pDMnCF($sK?IhO6R`0skw~Gc=P23jHO44^`wz}RmUJ_AOrj1+ z%V>#^H^UphK(2uJupcC7FKSM9KAV-WR6W?)po2GKGy$VK@i;3+I+t}Pm$DO|MUu>d zJ~}Bnzpr;~WPutEMXm&FIR*D4Lz(DcNY+P*4TZ7Os1=VaH&z+xP^{;j6a~<=_(zag zAewUrqW)y6FC_WALCDa-5ENjTUs6z1^iL2AQpR3=+h%RYfCd{bC}GeIbGP9#2hTAG z|FWJW766*V$gQE(I@%?%RTYUCM)>O&d)+8X^&6M?E>q-TiLL_~{hHDQh`@=-G3= zu$xx@`>^N3`{TO10~?3Sdte7!vqjNgk-|)T(=YY28SV9bcA#_Yn?pzCm({0EtV#*3 zBvC;_>3y=DYL6d5RWM7);nT2T#L5LLq|e%bBakA7aQpS{vWd;3GWj(?3CH5RnyHmV zZXv(OGx|+gC-=N1_cLhnar%?ZXYGz6x((Ox{$hPO)^=B>T$elU+ZhTj1VWwkLRae< z4&+{8uEnJj(kIf%V<(y1B$gaq(=s}m$L2Fq!(%)-4$6n)ToqaofF8QmR;48BB1$Oc z0q|U|QNQm{VOcBb4hTcMj|$Ds#Hr*_zS^9b{yqN7=CP%DptSia-F*ZzL4GsykQ*x+ zUUVXc>0Vc2lwsr ztFY62ymL#|M@&xwA%|i!eizK0>JwLeGvEx=P-bIBE84d`H#(zcA0!^&p0VYH?`olf zT9u^J=ZwsLKvxpw0Ml2@=jv)<^s4qu6!gd8tWHSm469iB z)@HwGbbWI!Wj=q|E--#Kv4pNx_2bUA*PLQm2dU+-n`HI2OFjwC5Z99tJ6Dq z!W=@)M$yhtqeXlnPlvdoTlnD-htK!(9dbDQH!Rc%j$TcX_I=rk0m0LNww$TLF&QuqOU&?OZ@G{V&7cmX zC{jO{+OI}+uUtGwN|!UB*aVWuh5h1xqGd?pdJ$^~<%|$dd1sY8o?~8gK$>&3~MF94-9Z;;ycyuqsN| z%rDC7xlER$6?gqglEo{#?*CzeXN{abx$Au+5u{L0!tlMQ3v~P_!RAI~C?q~=u%RH< zS6+~UVCE9DTgj!EM^_hW!~f1ricYqQ1|Lub|5~QB>747eYFYVl2f9_W^ zf96iqr%LQ#i#WY@AN#Sl3%}+o{KulNow%d14G&mbuKX>!J#mMLzXl&?{@h2tDmoF- zMjoq9t4L(`vt#qShBVGca`%>3NY@2unYo|ZTZbWHH~~)v9z^5=1ePv}FT}L1{pOq2 z_nT}<1BjRPr-hu{JgrM;KC|tzCL|Z9KdNhMZT5H=eb76a0*8i?!l?9_FDg#R_B4Fd zs-uAIg;01y`@K0MzPQ+u4d}WPQ;7f>DwRPztIlAJgQF$`py&q{pdYl_ z(68v%)PfEqi7rw&4OCq>dQjC{g8MQ~oq+DZAL=k`Mc~pz?|#;M^oJcTofWKx97yBl zV$~17P@#w19C8$zzent>x4d6k`&`6~jXqqhi0>bBf?IwVj*g*j{(>*cnkXCYem zglNkYNV{K35=?jtC0ei|wT!yP{Pc?(w=nj_Hd21xhI6{9bfDX-HZJ1gp0y5G6E|h zMu5!A9(B(dS#Tuv@B=okYFL<>siI3?B4UsK41@0nZELkc--AP9ondu^pbY zY>dr)Jp%1&Sp(M#Mpr`4+|BzxZ2(J(xepFS>+&_#_TPX*g}K!DLOWer{Ohv_H1Nj3 zNv;Gw;nK$h^U_WM7-BC*>ihYhgzwe-7=kmk%)qQNDEvA#Ki_ce=EsHqTT=2pMm}kz z8X^<)OvQVBTU%0o8@hc707U`*FGiIiu#hb4}}wjAxE!s{Sw}1#?Rvo7^661N`tz1zZau|f}c$fdsWeS zMgJbmDM^H9eyq}4dDwHn2Q(RCJy-J3E4iR&?2%eqX+W3oKUv!JRxoDQ3O6==N0GOx zl3KG=8&mq11^6z&So#3QlBBtt%73whh$#b$m`eP~``=^@5zFJUU`suULSps$?SL#- z=`dD!aEAvTK8Aej3wR@g8ZLzXVNr~p_Q-j??8g0OKxZ!ys4~@kmDeuWxBP^fo`!SE zhtw*+rH6hvsdS&mGwfCTW>?os;1!fnwmI(TP?9_Omvn`j&6bbu#b-BSxiY3t%d6jv zPxz31TXZilM8;T>UeR1C+h4(k*VO>C$`3df3g6XQys!W3q!^YNzoC?Yf-BUn~ zp0G2291gFu`Fb;+w@W76aNtL~R(t~li;7cq;R{3FvO#QD1HTR$ouS+qd`KBz2q3TA zgMl0C3*ChwAGBIZiA0m8wUgVm@r;Hc`M-*>y;#7^;nEXiMb5dUhjUMl&PnLg@aYdX zQHG#Ewu0JVWYyIx+TXSK#rESL6<0KN)aIH$%enm(%04wWNyJuKqx??Hhy#iH*5TUM zC0tL0e-uV#@A&Qfp!Qou$ZbLWi-}uV=XyH5Y)Igy+kRR7`R#gtY-rwKAv3)1K5Oqf z9^Fr1Wq&yGFBNV2aE(A4&6@(P$ZFg&IptMjF2mTF`R}e?)v|(Lts00=>HzJpT5{UT&xjRoKJp~ z*=X`uuJZCcrjb(#jD7amZHKsAoFfBvma$oMUmW4H%>>e&jN$^HL#YYyy7ERIVcgc+ zKGX*GLbwuVgNIfxP;uS=##Y+8ObtzjVg0(1;Bgg)O)FJ&lOZNy>?e=%rvm+2<2~Oa zer(NWkh6)ZZZs%VGvi$#^PWAJlB}2{F3RF*dJsFnw)lT3u_B~ z$O^);huqCkv>+$KI{Ro?(}y5^UqTIPYK26iBn8DuuEPepw&gXvxR*VPSdI!;eK+q{ zqs^wQ;#?Jjlyvnhux{yKkcgyFfilk{-v z+Rk$1i&KIzM{lYx3b9g4tkw3=x!5Nn7_u*UDj*MiiJn^9!MQD>n1KZTa*L?=8*xl- zo?pJ`;8L`4NV@Q zGA@*GjJZdhdHi12i-10V>enHYE0gA#t1n?ri+*WgfrgndtQe?xGj^oUedF4M{6#+b ziP4>RR=bI>7-@k8uf5!S^zY)rGElcuZ zNFSb59&m=2B=X8ldxlzc{5#!ma)i7VU_kD4*wrIbSl?tKOaKUx;OkN-FElL^j-n8* zze~Y0OM2GS+MHm@RKpwRi0oR%h+}@ld(g^c+od0zHQE4gbvl!;Yjxg(kgmqpClu+U z`nTXReZ%ZTa&%C^@i0aEXKJhLGkf+3PlRh8M_u6>>|~BwcoizSGx=ddR#}I^^>pE~l65M!wy80#d=hXf~-0FS6 zb4QFNlYFo_HelnjYwcR^QOCyQq5@C*4)6U9lyO=Tv+@H)X(!WonM+9+wp> zGQjj|>5)t4%kROcthb+Q(q@HEe+K)exn_^o7EUg{SZ-0G8d0oDg-q|{4(7Jq9y8@X z+TB+a3>sWFg^VOB?hyv5ee*m0x+%aaQ!gP@Sz)e&S3=71Fwj~o%P|@UFmFYmlDZJwt?bMCVZU^1XdgkIW3WURK?#~y^g4AIV!Q| zUJ+QIv=vd5@iplBRL7dbK`38RH#K-^jg0dT`oU&9D@(qu-#IAH zhw-i;=26kO(@XJ8NoB*V!s+K&7hsASBhpkAVEMD%x#!Px;U>(XcbQR5GI%uL-paEz z?*q?0zx=luGIsH4B<=C`htQclL;F@2TwJ84<%Rb?xFfi!*~83VuC(|>3&vaadBCwO z=KKu#Jxj;f^*8raGWziH@~2EB=9{1O3(8$(>63vbB`%{(Jfv~X> z^w&7kkZ>!V*vG){z)5tuckR;Q7&?eItF&_uoP>)uO~}gHWAEN`WWY3cD`Zsn$GiR% zn;TYqhKNScMq%sK>wIWC@QzL-Qjir!&y3qXK+HG;2{i27S_X6YaP&brJZrS zY+J0ZNRP9AuQ!tJu`6o?rp?60inRO7_6z1y_K4CY{X!)iKi)vclV)ab$58+|7pgmn zRb2fDpfBW?CUrGsVfwfw_V#wQVaJtF54;y;aWUq8b9^rWZx*{B`4Mm)y%#}#eVok3 zioSwx0rR+!T9w+R3G-Ut8vd@g&$8eM=2Mui$S3Obw? zIf}$nd||I?ArnDCtEF@RQbEgyeVjT8MxpuBPRBL&hiMltB=`^0VJGf~bn>}c1jzzd zv1(R|qX(%hqN#|Z1?Z!sa_9L2m=_EqR$mXf6Qae)J+_S+^z(S|Vjc67buGeb;2I^Z zfUpKyVyY}RBP>M_DoJ0{2$Xwm%sdk_#xia75P}s2YhoccUaS%?gT{bkYzqcH=2s1s@2Cgi{Z zLk7jDhJPUPccgfUkcW7Pq#r=2o4kp(QL(QWMS4yKHOG`Bn%O%3@QnfLq4noaioCMA3Q`8}klN!at zmNe4P|GSwG(?u7qqVxaIR8K}hgr!`qS$oEIoNbb`ZxA%s0G^boEV#FrctjAi`+b2)-? zOBM)jA*lb{r0nanz{Nwx3+=E(g5ZY9=67Vqz(32!`2{&=?xq`00>Lfqat=mE{DX6b zDa;qj00I^dh&c=qdN3sLd%na%2}|9K#py!WWrl(oAtC0NQ zHaw^=l$OzXaovM#nRhE4>)S4#6HyEN-F<1#)Iv&H$OD zkIN&}4Gc&@@eWHC@I|GZ1I9(dVQGc}VS;rZ6v90c^3W|M4A_)U=^5#>kh5Qc!7PCA z!le+SditSu08Wthfd?trHtdXHgOIb^(0l({)186=>|}yA1H+Kh?AhFm$dQSmZq*Iq zzhTUN=~H}!iey@Vnl;}l%kG6P?C%R+(x-4aAp93bZ2hXi4#$CN@oy8>@THD??)wa6oGe1lMR*s$vPs02{)X>BHqnWX%vN zIyb0O77VH-6bQN~SYW{x;$LZ85bF%g4&r)gSbV~BC?=#eBbNP8$jd%-{0-8j{~m&# zhXuDG5q3tEF-jkNVR z7YbG>7*Wh4uK&5Z`J4!bQWPaUHYb@|w5g)uIslRHKQUqtMj}G()EL87okJaH&j zvi(u(2KX*(y+8LhO2Kv_SjTzjiO2-_e1Du$TquWNZ7d#icBw0z^c-Vwl@#p2P@VZ= zCIkjGFGN2$p5#mPYACFVY){EifRP!>#hugA2g!epY5NuIP_gcDC4zl~=dge#lpI(z zcn0kGe2}%D2cX=wNdDQh{9{HsHN;F1Z`=;tmz>#Ebu5sW8$^Ews(L7w{Rl%CHN@FrF8? zKtY}T7ekzCu=t@am;wDl19dQ_qWqbbz_F?t$3ChH-9EkC=nLU0P7A7cC|3&uQy4TQ zG;^q16s#W}0!Cdn)CGzJs~}iMOYLuG7?B;7vWO&*esHNh2QqzJ>S>&5#G!WmRxR~l zL1qZv+JBatHr$3Nge_|3q{I%jOBrRv<^(_BpS~^zK+I4iVZB1nF~f*=w7p^t$b$VC zsjnHLFP`W>PA3EQBgSU1#_KQ$dNr_q(Gw;AVhJUs6xb16;>xD>;I<9q1;7lxesKG? zrC_-eaBmqZVUEZOZVJAN%Do0mzi7;V6ryf;a++6Kzq$D#c4SxVg~DMm>P~^-R_Nae zZG`xKBVEz08y$UI4KiSG8bjYQIKvgnSQ{vA$M!YbC!&LKBlEXvYEO2X&=g$XG1hhu!&+_*V=W@!j~7%zyRo=H-l|zE9cUyJg0X; z-CqrP_J;TkyfSxx?Yf{0g5AAlHp+c)Dj+tvW3q-_288i#J@)}3#srQX7kXLR>ED7ax*mz6T4psRKDsy65al6t(e!ii-qbjnt%KN zAze^eE306#C)6V!;57TSqJ1fzD5~7&HkffVHRP|7q4baa7hxk&s!)iySl_ivnsgk$ z-s|JL={sfYb8Ak_P@dCP_WJI*8H*Z_3_%_ZeH(u-AN7aYZy6&G8{}_SF~IA6@2_?d z2F4+DV3A*Xc6#?<=KO7W=;n#--6Wfl+KVHXh&l~n^#*pSVy{cICq z9zQ%sjczY6w+4;gW_(37I<0pX&mYkcTn~C1MQFY5-DfNoch`t5`LRH~9V8{WVpr2X zmHb(yZl8omNq=l*K9(SdBn3O5_fq6Na`qOn32d-~pgm@MvQ4FA5j<8Tv#EZ^+FPIQ z3@_OJIQc!*?(LO)i*(9a7a-6gay#K`;R$A1xd)VZx+${4LKtzfrUe*}AbGRgE+h!E z<^&nxRQNYx#%Vq^hlUXdOx@IY%o7<1y^~j2UTavVIVx~{;tLa5QayI^N!9rvhBxk* z#P9L&XxJxaihL04rc0is7BdS!lmE$gQYP{ps%SQ=j)al~xVgM|-5G@zJrB1`@;uzo zKw!wh><@@w7{UZXoYI$1>uBkkuj4oI{Wp$RsaTUsCl zxtJU6$RhRkz9Ypc6z+tr=y1gEqiJwBViIX8DU15haLiL5EGU3k2mES_QH&qI?aul!IVVUm^vY zY>rDZhDrqGN8M5fNpftDG01lz7dF;v`^Zq{nj`HG7o8E_(LxNc=h{CdIL~%_CK*++ zH%m*RzUyk#L=>L%EUDiXeVOWm70%4ru8g;y=tKkPhy)vYxjiBb@vN1*)C2t>Icshe zc>9a-GVV1L$LEn#22SHLuQ0tR|6)7@HK;4;dN=G(MW(k|%k^vWrWl!*Omv3DZ}Mc?kl1dC^_#)N9{xf#cLCFWFjK^fVtsK$#rY;8)8}+pN zWpzGeC21t5<)R3hlba}7W$iw--m+cM%2%~a!u#ApStI)(4;>ycqByOZDWlFJg=q$U z4=WPw@59dG4tOu?``xqaJKSRsKWT{Hwy`iE@;63qFw!e2;(0&gW`Loa+Sa!t;N|&p zkX-Ija5lX`BAeB0O7T*T3(tO!nTd-f(zJZGKK!@ zv*z-1_6l-&$GoN~H>vvlZ`X6^tjSanfI>v*hU&6z#Rww!lvwta2-LeATBx>M*TXQ`@9%Ym0i za|Wja*@?-dp2=NNTzXFR&u`}+&#%5f=FJn9f?#DgZvUCQb8%FA4Wke6aYx+Wm4sH3TE&tCnnudBdu7&#wZPoX!G>>#E z9IiPNSK8hw7e<|<^)lkn;+EN?b?9g~P{94vbyN55z6Z zyv#=9qZm27E7_Zi41n2WDRv-W>oJi)G)b>OW>A!Zc#_+O$?eC@TH_3giTUu>naghL zUqZ_yx_$^fCDy->M;63)6o#C!L-DpK0W)rmZT7g#)CEYq5M3c`D0)F^4o0Z zaP{2>Im@czo@+x%>ZQcKI;=m0>sF)+%?Wc~O->htXI52j~+tgf$X-dX| z+Vjn>3*mM}iWqs8-|^U?TYfdQvit~q-+117twJfL8!b{*MR*`py}Lo_HCym~35rZs zSguGjDcn8(O!i|9AF&r7cu9v_SAMo_PIbONG9+T~oUP5F-kV^URQUXMjE(*soRs$h zz8pQHlsc0?Mog_x&A9mEq0P~RYZTvNPj+Dfa&{)$GnvI+8PiSg-n>eOPlnP2c9DS1 zTX*<--=E(vC_7?$Dg@25+Db9e+>ygn%%sC>nbB76sz*5$)vpSJDlDp;(`=_|xq1(2 zwP;>GL1}E>F=p18LP3Mvlh3`E-upMI9a37Jfrxw8CrKW@>l*AvdAIh^&<20`kq8W& zaE(v+f!Djdt!_F}xs@y^2}W};eY=$eV;N*tJAx!54J3jcN-IVQu&dS1BgNPGwanG9H52-IA3U>me_*#FQCxA&;_Fl^J7!!wTT_7^EgfmQ{p){>D%% z{MP;AH@s*t?oW`K-1YDv8PGMVbYYvEwS9w*y#1M)eGd5DRIIufblFo2mQ#5=*#1v`~{I`7T`k53~Y2^cAC;TMu|8N27jfMSPJ|*{&Ukg=+UZ8ntLg?!_1c?V3TlueM71K*!`;h$65I+;tw8 zW}3UfjO?}_n1GUaXHQ3%cZdq^&;n+J7rU%7VU{1>ijV^;6z?oEGw~nLJTvz}0ZGm; ztUINPoo$bNX4Kz6%||)es^y2S$yNb_T)ugJWk9_1YaA^r^IW0NQGMu3J33O~OK`S3 z6NK4_qOh4u#ZPk=OEU5TH1_zuppQKr(a4cV;*v86t$B1?_D@+i*8*?u;?2C*r^5%4 zav5z(dhPVV5m;Px-JglJjDJ1g7w$de?^U?meLoWmVIh0!g=xIZtz-K@cAM8d;1#O< z^i8iOo-M_^VmJcQ;+qTIzH-GNqE~=QoN0{5r^6c&w&Y8_bS^cgBs{b5c}S6NefDf) zWC4b31kdltSvM_Cz|D{t@ewp5RfbCbyXM3hXFl)qVUvlbuojm)eFZGrQ+wc+3ouGUQ0 zwH$I1q#Gq>`e(p_hNgWK{O!BoiwDAOZPt{BOMwU!LO-`3$cr9w^y2<_HiqxM?*Xhj z8r_F<`BpLNoYd4xtz3qrmhFd2bKJWWC)DuW*;r)STGDM@3p#C9=WL#kNWpS#<~34; zvnbmIg^V@Y4jXxsVO>TUwgy~EY{O@{xugcE?ZXI2;2@EtFPf`he`8Fe;SP1Jmfd2% z6JGBJF$YzNf`G3^Vo|_!3y~`4oW`x+aFjaRqR?qre=7Iaqd0hHh$Icsz6f4r2Irg` z+sHd^lgqGjL>F~()}t0p6eLWSnxnWo9ute72ysxYb1@p!ZRxdp^zu9=J3qkP|D(%L zY%J|QupZ3OvPMJ%lZE^zmc=x5;3*jUQK^NoP<)2u>LkA}`d_;3bpQK*>9$)&_qG;W zWextyqjyLQ1-d4ai;``=JluBm{&+`Jxg0#YIB(Ba@~+t2bbuQ$OycNQ*y&U3F5Ors zmPW+Pi6}anzwFXK@8psH zc)T+boCu$R;w$#G;D&L4A;Soi_j^dd>uW_=P^ovTJ(udeB)xbQT?Tcs(1^nS+?T`hiu^$DQvQ)%!E%La|{ z^SDFdXmAJph9~^vb>z)bp!5sQ!@#@vCHyIO3xCF9n;U7bWotPvAm51!%J_^f<9m0K zUw#+$bU}V6we7L-yi;&u&GhlmkEq6<-CZ!ibmW3Ry~*+VvHHREN6E)jrm^y>_+~m* z+P0j6V2&6bt+aC3NCrL{REMqmwXMa3YGl-xgYSlEeY#KFQe9x~<~KSl4ZJ62GVEE+ z$enfc?o=|@vlC`LYLW7m)zCN4*X(OF8_Is6*CVX%$^E5`)!Nznr*Dm*_VhnN=rbNb zyW)1f9=%;fn#25Uuua3-*RqZ$=tWH?7SC17-JUaT(V`u(o3X8}u*i0n^VF3vcser@ zEjRkz9|GnD*HttXas}2onE7e1Y(63VD@FS!HC|JGJCQ{`J_m7~WvgDXmz^~SxdO-G z79H=@@SQF#OZIq{UpN;P7T6JHR|XUTPR;P(%2FD{)izhQp0*R|&pP>`RG=a|Ay1Yg z!R3Q*1*s0sjmP?RAIyAcQyIBla-=_O;t$m!vQ601(T*8&&+<7*wosfGlT?;!*KO3_ zI;W|4huHc1#Ctl@@RUh>ei?2Hh;^={t@v!OCUB;o#s5mRHKbQML(odGnEPDnibkkn;zPmkmsb{AMy2TC73l75|Sgc=y`t?Us zNceJhXEA*jP~EIV7E3aHHWSpRYZ7d_poc}+ZE7c-u}MIJ^7uv$IGDGacr7>e#U{x` z(PGqf*}j&c@Y)ZCf?6lVt-uBlwwqXVC~DeSfslO|W2m}kRf#B}$!QDx4cXyXgaCg_>65QQgg1dWgcl#FE zd!KXe`QCfqAM5GoS!=H9S!2u^Roy*%mc}m9xny50HJ>o{&Sj!$8u*hLw(>D4TrYi8 z5B>0X&+NVc{sN=cs&MK$!$;>~^(n2Z#9bFu4z@3N28lc;bvCQJ9`s>4X-R9n_yc{%o6>DDrH#_!jZOExqq6wy-W{ z9b;w*0DnZz1t0Dn0v?uy7<0DxDy$`Sb#p3vM>MRhFcqXAVU@MmK*=QZ3~8)6zPM}w zL>S2#dy28^Q=MAkSB+;wj;}92ENj{IbzGTxfF|p+^zDcS3)^W@{#iU&ANwskx*zr$SWkbfTsycG_!VjV5dzN=BlORA zxkthJI{}yWRB?pZZv#Q~nZHyYTqvIH214x6durGXKT6T0QCyELw2iTLQ1Oil0^Ihi z*(xL~G$$KrZZy+PznyHjVd2@av37!wYmX_eKQ-mM&~WUJEE4t@(dfUt9Tz3ZIFEf2 zIuk{CCf%TYz>GR*3Vqmj4}OujlEJu(h}uIGAy_x!Xvn^x!Pr4MwzP%@(+_3CIZY=&hF^+}{c&qy0po@t_#v1fZGq3x|{e1xW%VgF`Swl~Js z4ce25m;oBHVVh}hHn-Cr$glI~sc3C8s&}_`3n=_`Fp__7g~mDMP!wRkC6Sd9obSLu zhI)od-7zVyW~K8j=As6yrZ-%!3ogRYJ>LORYlC>+c9}1i3iTHu&D&H3xLx%c8IuET zL9Rg=p9<4~*h>gdqGdFZ&Jj-S;#%*ZJ))Hdo1T&oiXE+P&8k!@U^@224L_obYO0~9 z*)w9`G67Vn2JU;+Bo2<<=QvG+yS39+Ic{dSa0-WyGt#tV&fIt3_r9V|PN*5aEAb6R zTvia4l42o0ML~Ojor4YgoVbx0eb=)E=4aZj&Lzx86HhnY3q#=lh4}|$BLg%r3}D*vo^>^FeAiFv3qunP%_?{9rPofy-ul#I9J=h zeI%fLC|Y4Nk!id^A~x1mz}?YR!E95RSx{lY+K`1Rbe)PccQe?SEcX{vnVyUrfnzmz zuD%3kX?=S1dHD{K;)HAEY<`Xg!!Lb_#;in5MTI2o*}R<1WmN~RvpB+%Pfb8h>Y>RP zH1`q<3571ke!#3C9%-xaz1ZrOW_$qZ_AWxF269bMj|mn+4>^-PWxv1WHd9|mQ6{pa zDk)Ac#9+;_)b7UvC8zqFOYdGiJ9Cd-HB{7R!qw z8=0&xF_MBkW?Zwx43-M1lRg44?Zp;6v*{klh|;GtO`7^Ktur06*7DY8jhIC)@#?&M zolPJu%+MVMiWB3|-SZNxgQV7SNDzTh7{|lO9Z&cepWoD*Ung1TLn1D=6=)ld2N4vw z&cO@N^A9#XA)y#MyxqiVks$^@2F%RnO1)j;iy_SVam+c&0l219be=T8fli$9p+qCn zAe>4o%0Nr3g(PV+IDt6n!k|u!Q5p4uBTc83G(H9?@LH$-b4bJd0=`ALgMl}uN8$_} zWA*l66#p#QrotxUz;UeOFxzAje1OVZ=Z%Oq9m$;f{^`8rD!7ZX@?Z4=RYfwEd7J@P z8kmJ_Uzfk`n`dckSxiC#H*3jV(MRtG>eujQi`XX95vkPId>fLkJ0q8z## z4av0NurPL9VKA)+zu9H?m*{TjpXcSb_A_8;9jP|1*C+HKN}$%J!~|SF?f$OX+bhhU zJnB@xRYeM$q-dFVpkc}BR91_fbPC&Xs$wUiwx{JjzHwBl`T|XqrM9J`c;#YL+=V`4 zVpWiSDk!tY!&X+1UZOPBUDMwaPdUNJUBz#slHHIQ9Basli*8$%l?B>N2Wg&=ETw3` z7a!d2Yw`G!oHXa-R5ZZm=1voahg9?ZYmV_JOBa_Hy*@TaYnlz3=q0P|Szqd}ZZzG` z67$rj%oH@&Uir;Bex$2Y2Gn{pl4V-rJd3+fA-IRJIMkD&&+68$6NBts+>JK+PRf%z z9RY!sQ6Xt|zJ|$XI$MPnu9kVU5goGbiCi-7+FIEcSC`HZi?YDm##@V+#~OZA4^NS) z9<&)R*y!{}88YRV=DmiKpLoKXEIyaFP{weB;u3K)ldDgcb!Dr-ED#^AuqCRxZ*MQs zNoZ-NB)7ryNGNk(Hu!tQ`KImV`SO6S@3^ij<>ft5M4MwOGWg{aQXHd- zwxtGcLp~~qQ`L4S2`Xwcu*coisALbsMYP}r*ILQlfxN6!+Xm(YMU)2b=cZM!4>Ql< zp=q8i?Pe14cd?;Yq+BKX)VW@_9{D4&(qZ$D;}1qTfP~_yys`VsT|yJz>A6p%Y$7Tk7CMvOO|>4v;hT4 zybE0hz(XQoSc&8WIFfqlTTy4sthVQH?Lg~cgW*oLP&)1$?_(PS zGFdjL7Jkbp^)VDXRZ_x^@DiTE;RJ~h)@lpQ6&Eu&OljW6MtlOANHWsjVL@xrPwf!Odk z4r!15onOs9C^sshVM?wWc%L>@MG_z^NOd2LC+^VDIb3n~02SosCb&*2x9ZAbDyhj2 zh)6~ZwazFN%&Q^SGwX$tw;O|T`3uv0b4G&9=T9^_Wj5V45V{FosQLYqh;kS=rOi6B zAfL@)iTjg;&K{(pwkc(i%(Ijmj=aCHkf#x*Ie&8qIXir(feE*n0k`w}d$rT6aUqnx zyb~OsD~nKEHuylfs`L7-gJEB{vbZ(3FKfM3 zZ;D%fBr|X@AJ2Tp61T31Kn z7MU356ftlQbQ=SeDR38jai=+c;y%c-@Em$ui~ClFtn`(B+bZ_pt@^F2C;6kP^@9ic-DZ%&Jo%_+S)1vdSg~IvuAKb^z$hO3;^qjofeN zgizP2zM;Kt;`$I+If-CruW`D+g!-3vz#sRpMH^mGwdy^u{zbVe8m)^YUWWCzJ5I4F zp!WNvb^lFpo^4{vW+mIeh}fidTi9znF#JUsIoHwM(h`M>r&U&v{^U&<($%F%cuFt7 z)p2YyCtD2TkO(1`__tB;8MqL&Hzz~`2wWtATlH(xQGa{$A6W55`{%W}{$WkpAmPH8 zl8`$mf3IvswHT>7?766Cwwrb zBtqC4uoUG6F^$Yr-|>k*0l^exv=X;`nIgtWO}IysU=BJj5Pbs^A{MOKqgQ6*0~(|^ zQ3e4YOFo2#tmyfDPUK((R)1J^)iOIQF(W8L_ksrJJ_%j^7DaNk#icfH?@}#E06V0p zAE?~nOF-MxS)c67z{6w7lSyZ@bKBuzS=$#^^{nPNIpD!C;#nkkI?oaYU2lgCdZtOx zH6m-qi}C~jpGqDw?y{!xxR;WbZakuw?Y5HN#U(FT=&R(J?g_n3Iz6|TaB|^SG|5$T z9m*6e)ZJ=0+(S5%(xs=YZNw?f|1DTtQ;b}d)UOFUc+cP_V2{bWN;1tl%LGTDZwt-3 zEaUv9iozI-t%)DA$>jI0BUxKXCKgx2$k$H3jG6gmz>5fwEwU;c*T zSD>@2_L;B(_zL^}p5>Bw*pxn+t6i$_6GBHGPBd4d9lA{wjvosK{8KZDb90wW_<0@B zjC9{R(Bd-cU$dKoQvpWq2{lqtN*I z;X6;QLc;0XcgNLlry0|h@jMazbf=Vt^+Rf44cdAmY{zfXrxSNfx1y_85tQOK+D_qm zlru)Wyuhi7PSmNJ!Y4B38aH;Ywr?AN5Ig2(vh;D#22)66=511+xmmvKYGlQ}dz7kA zky7}mHHNFUr}2C+RtdeEz|Xe94DqF-=PPI@5-GhB!#FXoivb$)gTCM5b6ucFRoVIY z@z{eLB?8hCnX7tVdEY4Yh(oejH3E5FQ6DJt{GzPbq83g`zx4)X)!2I5V;(;V__}I0 z^z6Spt;kN(rtW#^d|Om@&?^Ls8h^Pwm;CL5oY^{P%>7e$08Jij!=hyWO`=RO?It#) zeSoBCn`7QpGD3pc74mz&;~%rfR%tQApyJ3UOAI(O&NJ(#`LKgEOn@Hc(l8KtTM_b; zvyP*e1d0ATV|&-5w>e~G&Bc3Tpue`88j0)HP(X(!OumJIgUGA3idm;-%8JCwl(|@s zMmkB9#xZ1PErFkYgILSh7{qfxP;s3-4RzF5!R|x>em0pd;-*p^g|+EVggRyz$)Y$d z62gT`Do3VY*QxFvHF(6{`ToyZ17D}6O83Qbb}U`;HPpF{E!5Kb!%BC71slrLTQRCh(G(PDu+=!-mrH{JX`(|?qQzt#joBeHy6+0W0;xBM3 zCm(vJ@v+gx22g?WSj#CwK*R0CeshDT>=AaSSAPEfLggKXQ^zh?Kj-Nuji!6&k2=G% zZBq|cY|6*f_4698X&lANM*A6`KVzhC7iXVHgl!&serz8Gnk>^w7VGHO3b)a*@J*>7 zbTeQC(v^y&bo4kX^YNg^PA@`@^*n>-;Jh@OhnvvzcSmO zF%Id-Y~hX}1JpXjv5a(ehjO9nqBmq(A55!K=E82NuGZjkMu@rPu!p&4dP-`)Wo_&0 zao9KNI7N;aRCycnS?jiV?=-Qg4?b~(~lKRWv73A(d53*8L2R#oZ$Xz6SXrH_WbQxZJB>!_b0~J2?iEU^FmE`mLI*# zEgVlkmW0?gW{2-8&Hcz5yDG1oT%Xbd~7rLY9h)xRDKc^72owsGe$JHF?kn zDTzQi`h3av9CU^mlrf=}bHU-!K(ZH@-TO=cB3HpYv> zfwi;XM4eLes<_gbRrgJdvO&@k5z=W5wc3DXR1*L+NMBjzZ6@+GOPOnj7U2n>U36$}XAIcQD2z`cN?vDPXU zk6>rXWMP6#FO(csJ@%k8fs>rb_JZeuvBwS-N2Jfk4iqfk^A|_VONCrI6ww_K7UZ*z z!K3wJ<5~^5A@8G=xrc56_`q+kxmLL>t>f1s#+rCFTLawbuuPv5E|Wu>Q7~;P6tQgP z^rgPYn-AhJj{`z3(jx6c&bP%_L^f>mhHPjO)m{oiq3BooO2kB6gjiVqsDFSLVyvVf z#G3zmR78f_^xae{Hn@yF48_>GK2{LVcUd#yo-lh&uCrShCA+J*ysfCau2T)^5=Cuj zX}CT_`6{a@*-{$0cdl0Yb>6+30s4)!CUHD;l{S6z$*6H7XKP^`E%)l^DBeyZ{H z#2z%iVWP6!k~H!2i3mF}QCFtu_EVq-=uAo*u%!@IrW`@(9%f}`yqh1v@VtvB#9w(j zZDgnG8H#y;cT+4JABny};~|yqU1}^6{*@O_B7}p)H|oNg*CkycIz7R>P%Qh4IC&Ou z#ol1{VK(o=V81dSVnmT3W~QwYn~IQ+QiKah)x%U{3;{t-Y8Ncc;aq;KT+9X>o`b=;sX=g6q zJm3Ulj9&+)(0K&~;oaOn@!{c75qhZ@O3?bCYGteK))75PRQ6F(c^L7B9owenY?AEN z{iZb|(J@fmbcJ25Jsa!EHq>I!+k9bl{5ZD%w(FZC+Ykz$i`q?OwX}CTZe8M+cgeJk zwMOxiLPwMSq3l<64GuPqT>}!>)Uy-Y4+0l&Mry}lHktdTGslD44{!p>8B7$+_J%;Q z1DQro{o7YpOb?xmzeSS?Lh;wf;(Hb*8_+Zi!3nH~ERdUxOBmi9@A-NZJq`WdQo>gx zpy594ZM=6eTUM!)3yF4*=^O2|7A2Y}N*V8GO4$mmj-@H1dMgg8*DklW*%0QEGK-J5 zW*c8JyMgc})kQS4zSQu^9o7xKuCZb08a;sB`n$AG!s^T#Ro|!mp=4Daw_sZ{duArFtKSqs`P)YpkzzDX=eo4;_h7+~ zko4ym?ZeogWW2wyb!b}zuhG@w+=gf}UtWA`yVWDj3PWAF`K8s9J-Bmebm++Bzt7x; zCirAuIaZPSQHwy2FhE)Bdz@%{&mj3)c^(!ZZJO%jvtMbI_z*X4GMJN3+SX14AGISS z8swW7o27vTsdW0j%Uc-}>b>qO&5_FOu~pwvmOq8Qo-tl|ZR4hjQEkcisZKwhtRgHx z8-CiFRb-#~aTaq=!0El6dX&A(dH0zMMPp^=FTbC?k`=h;jl^|xeQ@=l5BnkTIovR| z`PBcjB=QuB@mm?+jgpfahQ7$a+W4Clc|Fyv3aw*(D5X>EF7H`PDAqqdye+Gs@SdHs zLY>ig?e%PX;pzzQ&Ia%1%+5`3vlG{G^w&r8O9u+R7BAvBlYQN3s$bPUxXeda(<6vclNoON*?tB^&L%xIW`J(L z{U6n#M@S*W4ERTNLc1_LDe0^*U!Gy|Js{2MQ*DSliZc?f4i z4-jALmTRRpI&QSG2IP$Ye2@8)4rN$Jc< z-=}iEY+H~JFv!ZN)8WHFxFPQ_W5(d>$k2QM$sc?S?w^}zVV%jKX=sI%L*vm34+i5T z4zePFn4?YY=_^+)CyjOEa%F477QR+X2$g*Pc4x9j^8mih88Z0V>HX&{1oPx)GH$^^`(Ms?jUy&wa{NH^AV!Zys=L~St>3`OL1ATd^T=fg^opZ117ac+8 z#YRVfdV+OTx%E@fy=3K)CR=9l#$_Y6XH#|KDqn&m*}Avd$m!Hj(uXqSAT*&4pt>_7>u+Wo6=(kY* zXfI=mG*Z&Y-wS7-VSg??*D#Je=Qe27=G_r5qggi0nJ)9)KD6x*i=S#$Yd!IwT-=s} za;=v}BuXL}n?JT-yM}TbpYHjouE-?pSfCl}C#-67K{ePEwmUWp%IlQAgVra`$w+uW22Zm0$C8C?UzaDV$IApb#C-HgWc z+fFUGpG!L6p#B|vNlsf?`NwCy`71@xflq{C{!Om|L}ChiAVj2Nm%$&!dO#z8Rjfq= zpODodyzd*_Ps89-koM!Nrh_119$gt9Q znW=&as9cyiPFca`RJLZ)@b)3q#i7EVpT>dlK11|ZF}I7>jf#O2BrShk0uz$WqejJ8 zutDpCu9dm_#ajz@Rm*{wk2+`R?j7Fa#~X4j$NT-t17TbjCv=QKHAm66QKK&@e0_@~ z<<;jjT1cor2NATG_uCktwkh%MYF$qXxm;kibdrb4$hLTnV?cLbT4_v#v9U=3lw#3l zha#(BPRIK2E%s@NzQ!MZ1)F6WNG|CL>SN%|sVdEQzkVSXiq<*ugJwFVNQf?PTulF1 z1KT&1R^GUCsQd{3`1$Ews|qV(5u=XF&DQ4?$x&((p3a}p`Nz2WT2pFxSS1EF8$8To z?p;*yb&_s{Pr79-w5))mb~&+|tqaTgskG3dXZA)A;;@C{%2kx&&4N#<=-%99A1d!D zTS4)bFWHf0y5PGRb=(MXc-!YZO}liRx50NyTNbgQpQ{G#-h2%RD3;i5$zox8`#$uO zjn3O{4qd6e`E&2# z2b3Lxw9wOjx2Kg#+h`CzMuv{uCyp#Q%o!gq*OTDm<2Eohhp=NTt4Iz%(P1+-`7v}i ziVzCdrxm>9aQRUk#tq|68h9DS0QCbCTy@an3)&I{`F+#N2?1GWa5}2bgpMi z{%z+JalM|FPA^%7kNu@orkdcyQ@JA*C*t7S!=RTuD|#fS*~6%p;H=J1LFdSk^XWiD z#}7x&qrMugd$SkkbZ|OA(Ti6uVCaqySybQfGIqx$Tk8cBKI*wWQL*!In318Hm62lb zm@+VH@lmIpJoX5?-A!b9QE>wwG4YXX*6Uhcw6b04m`YMrwVy*mEFX~{9Lm0M zs1l6{8TWC1X_G6dU!c=2&J$;P%6)F}T2H>eb>o?xX&oz}TD5B=7YR#OuqsY0TSeLK z*uK-B!PmjiFxVnwSD^W^mzG_<{Oh>d%};B5aUI80D30}04P5JDh#O! z-QjN_5Y9haR(q*JMqa#pE;4p&EOIkrMh%GU4^%liPD(H3{Nj1fnZsdzdpFY#%;Ut_ zi;ri};mhF5s^!va9^sST8oPLMH{>Y5u=d!W4enalagfEtF)VPtNmK0L%AdT8xXIU+ zec_mXP_(5qO|#>~(Jy(Q*Ntliz}T1a0gqny#~tLJ&rfanRG7)qG<-2s_E;r$6aQ4U z-=|q^Y%(P~AWm_a)^d2#f5n4L_iOB0)-9A;peA;$ouy?;RJ$I=kE**j7E zZ0?2)Ru9}!dF-MfUW;>JfNKLoK-*(qLmSDBtCe{8^dqu0SWD*Z4GERa`-5W_dEVUI zcq0arl3~3HP<}0Jrr_Elg}}!`IC_!b#B80Lqt2{_!X>EsGZB4aA-z;ONn~C!V_C~h z^kg$z3N-RJ4AYH3ZZf85qP&labK8O!YXy16x|n`uj?6DN_*rkO2&I zl^Qg!5i&$=jCjM^nUq2>{M{OE=Kru>mty>H z>vVDaFF^-Vgu{$5Jc0qLG;i@4#lf%lq^wZ6)5Rs^^IE0-rfrq=GHaCIS5r@gOBS;r^n53J;NZgX*E70<9~13_@O$A;|hPtOF_`_d6w_QB~yu7UFkR zQcrhW;V|mky>-^vR`r9onCpMMWPWYx1 zz$VamQxX6^3{B~0A8vbf0_cDGt?838=x`;)!s7iR&L&q}CGFbB5+5AVql>W{*i5<< z_PYXABcP5MV|uF_-TuEhR(Af6W0n7R$AGz4&umBs7{Et}`5bh1VMYEEudXD6KY009 z;a0J168t&=A$EtF9Ko?kMLExne>Q@zxVM;1OMxhpgRSQ)kdzW{1W!^z42w|FMaaY zK3QbOLc_2i!QH3wbXn)Stsqt6pEmAU>QfzkDc((iz>bwwoF59>h%CzSG;>5*Dp+%* zynq?fV^A|ZQcAuL`0Y2rf9o{Zn9)EWrQp9qKIhq#3LUCs1$W#W!~hqCxx4)>;_Dlt_IFSpYP6WHBMjA)!Z+1%mR<>Yu{rp zAvdcC_`8|80~bRnZI2}xCfb`?(2+1oen_T9bi_~aS- z;G70u3sMKllM}s%=ZX{VMvWLlM@O>f?o;jV)|2^B13K^tB?TfG5sD;=y&JKWTdWC; zdXEAyoRjv_gTw?9Ddq=u6I=tGX72|@%XHFB^B77oW$guLz63Ibm#m2$i`Mw+pQ-sL zt?*s8wOq>?;X})2+BnOMM(@yc!`}%)b?`?sP@14aSm`PB)=XrwUZY|EOd@sm#(|J_ zi{k1j0SE2<$fWj`xsTN-8wgZrKuH`-YbOU7^}@ZE*(jX_wtLrprC@e_2(r~0N?QSY zil(ASNhrO>=Gm>C;{7?xEZk;I=@l`jtZ=n~N?J2r_G$qh*eDeTtV>4NsM`Q?6v9qG zDiAtmC*n0s^aX?{r2_l^@&Vm95JNXULnE!F&4obVQg04@Ll8yY)O!(Qr|NyUdmULl zWqIUcIc9v#;YA31yv_`ao?vPSye%cl=MdE(n(q68V>OHNujHy9aH^{~$EVVp%^dMv<-J0iC*fLdd&q9wb7F@gC zMJjAh(j_f2*F5a!@i>`xeZQh~x&?{b)OHiItKzB^j5SsY5Gb3rbXU_?*tvlYSWv`# zv1 z)9h-o!C4jRvD`xKsPH4YNnY_gXYZ1~=D^ zHNfPQDfbe%Z z+BO#s!P`T!>)aJKEUkr9ZYjGQWKS5fW{42uxHHBDx*N@8p{HK?NF8&ItK6%r&0PA? z@dvl|+R;YM2==m!MtI4c%ONSkA14`A-Oi^BH}JJ@k{M{x-}_WTFdJ&KYjkYwR4PK? z@dNo9s~SW$r4cSUS|{LLd&%cM>Mui1=qy7j zfb@c0&%^H+oG$MTRmNc$aMl7TMCZ}lyMRUpelH);KRQcfBb#9vV=3Rf^Zu~trr@i5 z(2%L^iBrG#T19?;aY}jf(4GveW{(Kn8lWp~?)$D2`WGHF5xZ;b&n(xg&xx~GJCFzO zI=QLaf=@qVn!Fi~K=gG*`CPpTq5C$s1?;=2^=F-_PYj|R$2dpu&~Z3ETz?HA*JYf@ zkh1OX<=D*{ye-J})w6Rj9?N^3Yj-bQ4w*Bn59oUO^Y3HteTfv`AyVmQ_{u;4wkxKe zWVVk}88e|xC&h*AarL;KS|{T??4B(R>(krmSA(C zi+-<5Fh3axy4GZwu35MADO1eZ(%rI2Q=8En&ak8Lm+uyb`F%Hxn@;Qcs3&;Go((BC zc!!Sa!vr)D;xj%@Wx)|+O5}hRVi!bl>(MtH{J4k`2mcwBuO{-PCs4?^@fJ@}vi|S3 z7py*2U=o>>eyj$`CL;sUaCazu)Q9BkAAR{sFri9`iBW6}{;#7s5R1+`d+c+S`&r6& z7Pk%_FP^pAfmIB43w&-5)q`&(C=X{kYgjwC<*_Uxa_k!#>w$`v;6U=A#CpTCgzpa< z74L0w^5)-#kcjUCkcPM8I*|Sj?fi+;Wgqrfes_apjStmN21V)Z`Y_x7nO z)wB4tL&}S$;+0(<;5ifbytW>qz9-8Tx!GQ77csgm#q>y(v{$9QsaN#e@FWG~DnP=A zW#>6P(r;lx0j1XmHui9fb-(j>nNgU_ejF$vQwPg4BTmD(++DATv7h5u4(0UHy~TfV zH(O0UJ5lCMPadb70SaG8eqB%ZC^;&f&wms8Oiur@s*`UVA+34xEdffwq@C%a)YE#8 zxa9icNdwg>d`zc=4m~vq*T)E&G2!FSUQKsx0j=YZ1}q|Dq4+uu_wP0(to7~ds;#B&OZwEg}s3dHC4KW6qpic;d zn)-Dy#;@F$c>NAahU}uDkbTU5FT3wHPfz$Ulr{4RCSMe}jTV->U|=G{xC?8hKBPRP zEG{bBp04>@G4H-FRRPj8VhZ98pT{lrh*5qLIdwLKJ}r-0)obakEuKG@FrV04Mx-wC zCge&qS>>&`j&C`K?aMgQV`f{6rcZM+Ju=KP+N!){+P^`+Nv=tp?R> z8U7+0uw>ED%C$s}h8M?4kD%RUG}QFJ3_Lj=UB>UOo=DI&!$VErh@jj9m^uEFiD}It zE9!=*a8>3a;^DM_r@^q|W6b=y?dMej^NbfOgN8KvroP?8vG77m7) zi<7Csr92R%PsuU*8NJ8j3`3uKkrFD`~=`Nr}B;HA~!_!d&0=YTNVOX+W71W5mm2 zTYxd60|Uzo+e_Los^}y|?!b(ir@YjpC@z}CZGRc!e9yr4@8Wm2LiF3h+bA{=IO|Zo z14eA#ri?qO=X+o}=2EHnskL~`@Lu5W`VSo+X~=g*Lg@ix(hO>jG6Y?@$4BNq9Wsmf z^rq~Zo_S6V6wjgvR^Nd}JhLA|<)F<~# zmVGP8m{F!x?^iePF*?qije}KaBC}*XQ$qWViG%PrIz?mhRm@=8?fAAIO!Qg{WeAFi z2Fe2sDB%E5tN5U_sl}k2^ivn&sDJ)cs2tKFwoefu8l96d$r%k7B329aiDC=s|6z+L zI>Et|R2fX%jyZ7M0okkZ;a|o!#E`;i_pDgM#=;6^=XtPg0N5#idOS403}TRPcZ)* zXwh5~7UqM3h0;{zPX~#8`2Y6+T>xBf zasyveWTzNW{}%>bi0x;bXd$QxlVTd@mH&q^m2;FfBzOBN8;GKnnE6Kt1E8J(dpAK(FNg?6LSFS3>6L-)xVYb0vVGM}^8PA5#4f z0k`yb!>{coh5Tt31ab99EBL?E=wC8NW_E@N&3CXHBKpMZ{;lQGj zVlR2smjU4a%8#KfGpc`-*h%Qx+Iqpvs)^uxxjzlydp=rye(HPi%Hd1Le}491SOIK< zy!=1620!IzX83vSJTrOSW%Omd*jx78bp|wyOAXDBWXN1HT`gt&&OhO(TmAS{m9PXn zCS|D|K8n1Nta>9TWuBF|fLhonbdS41);TG}`YvH!f{zfONFCRbqs7mb6$@CO6lAz) z`tZg-vV!AnLM0E+n_(pxa4i=f2B)a~-MeX6#*{l0r4XJP=j$jvnJ*8HWm-SX(x4F| z4zy=Z^nZ9Oq{*CB#3iOm@jW#(hEyvpyTklqsd&*c+21=qY}rW7_E7VCIiury?gO4I zOHW7l?(jzerKyXy%SYI!>L=?}062DO$f?QO)ZRNWzUR_PU$kGy-EWo5Ex=dZZ+qOM z1MV*}`17Rc+ce%9ihW*hkaR>(IwEv$lvZIs8TCEzU2gidag4aMa`X zv%|5=9P{1muY8I-TO0U-NUkn{V>q9F5RxUDLurMnz`vnfx?5j{D@~CsnOAr))UkAb zXNfVrGBNC|WAnxDhIw~1HcaN>ib-exHcu&*H_3LMj48Zj&$YsNnyjxjNNq31bRVgC zf~@YwH1A7>lu6i6-XwVf1%E#=EGX0R*Z75rVnicQ*!iokXi?sZC;76ZzzyULZQRP5 zgNx3^c(CVgb)wmlLHrd}a9G&Rd3ZS_U)q`4#J5EOM_RfguqIDmSDEMXi~# z53z2T zs#U0`ed>MA5IhKl83#{)05dE;R*cd7ZP4`FNc|clt-@3DS60sHYCu9+jH|Bna7Qsl ztIWba3FW43v?zVrEu9MBqPk_8;-SB@ag4a@N@&YMMBGeh!x^-0dzrWhmMiU$N!>kt zsCY~^rPN}DDD_H$;BS{^pdvYrQ zjjg*7^15ecu677JC*?@}ry|jGjNV!<6$7k7lcrd1D!S>XSi*X_Mdk3oCZeL&uJQI833yB1E3dK#vCu~(kWHRausg0l3T7BH5#UM-Nak|13eTKDDH5FW{vZ@$$Z8Xbnl z6CP=>kDL|ljlLonJuK=l!Ecu;s&=Vu;x)g&f?A6W?G}b_T)U=G-I^l#<`F0ULr?0O zB08!+vbJN?i_Ff4?>p6ws>-3vQ?!|mp@7<3Mnw}vaaM~;onVB4i>@(9C3)ca2o-dF-+NFC8Xe*7?l92^4O9Xnbqnq- z5cvC=^ua(p`~Jf-;Z}fUorTk{+Y}4}*RuFc!cb4z7jBOiFGGUC2`%YB*`=^>^R*Ks zq9^Qx>FUo?B^SR4WV~T^L!h9Rps)$=(--6|C8(w@z=*$N04t1?Hv4t=X4q=Q7iZ-1 zt%Cu1kuux%T0ao|`N2VY-`S*rbnU?kzwY-pm@bI)?NY+kbpH@|1k1;*eSjGq!nWETd9!q&ycX}@ z3H;t)lpBmt^Hle}yXqP6B6f~1_quq$wlPBWt&2;MaKtZLl8X8Cj_SMe%0;jX7tpiO z%T^{gc;|o#>J0&}zuzsUKjrAoo2^QiGX^vQ-hXDAvktQ3?GdUG_p>W1>oU&yb1=Qw z+-G`*R_ikNEb&t5gDAE&y)Ah5&?Fo+0kzDyQB4AwixRV0BI}8dN%*2G19^8!uctsI zYbTfari!eC(9zzc4F(udl7an=*M(Z@>8X~;%82Wl$-Baw3d>QDLPYsl?X z^0f`n$EK6%?sFV<$yk5>&ky+xMT)=#S zu(yt?V_6o5ae@bTOMt+}T|&@6a1RpPU4z@kT@oN{+%no*Vp8#oXpX;SU21`s=E=MBKJ{+#(sM~m7m9OJDu|^H zYK!RUwEnhP9lI#TQ3<*HC~O2~0H!4|d-@XF_a}CB;atZ(gz6pJ5QbWCW69ZP9)Aql zmf!LQ4?VIw_iY!=<(05Z<9MUxyne7u3Bzo^;@UavU~<3reaM0-52-hPB}abP0L%1| zH*+K)fSo>JxKfFyE9(tUNY>h6E(|9|woL(g?;QVkFup0Y>rR=+qoNsX2tOw)^VCY( z8XC7e9ddk}=ZZSmoLR*zFxkvO^IavZUSel%`2+VV&zLv2u8Ow!G!MfcCpnqb@GCP^ z!FmA~Ej_cypi6NbO(99;3z*zJShF&Jegs_mHxhFvC;})8j!S5O-SsH*beHnM`gpKz z?>n{JY`#*tanK0Py@&-bgRP;5bu;+o1((@D_3lJdSF=H*uRZnK)b0X(1MVs(EF+R{ zY^_^u53+vKuiIuvK31BxGhaw_oKKzaH-{lvtg9-7O`6c3y&_q)b($v}pEEjv5;HMT z=8Em2qvdm=-vR^Ar{!u?HdSmH^JRl5U0@VY77#A|iiDnUI1Hw|uv?DYeoOx#etVyN zel@iNw%8ZJRd4lxnd)n>At(Bviz~1q=vNe+iu_X10SdG3(dYrgoVc|O%cMVUM**W* zgNYtU_nRz0y2%5kC~U^xBbU7zC@qrjvKo3dDe&cL0IkHWj`D!R2(#i)>?x}8QR!AY zeg95q9!qQ94cujS*;OVI?y%Is(St;^^9Td&eg~;pbfIehsW<&PyB=lJDv}=Vp&>y^6W7m#bm5CQ{Qd zY>Mu^F7NVNtmez~iQyaEP0?3Ren5;4o$TRqFpuQHB7$8lC}EJTWrP~dL@(S*Z;2*e zSOYbo_EKK9P=lExc^IJAEL^mptOB!l>#bbXnLA9lgN&J7G4H6{Z`Em$mE zhj_V|9@yIXL|~GA%Ibo94T#-U7&w3%8Fb9w(;yKM1gVX3bY)BHE9hDYzL`aT5 z*b%_#uAJ~=FNYCS0snw(x=n_&1MAq#Z>$-juSqv#ez9*KaWhxkt~BB0ekCsW-7IDJ z3=y4)BqTV67>R+dezBEGq}3aC70!+Ig?pwhE9cr7U!HDNu`)xVyxr(E}6b$O815ieZaheB}J6 z`xlW2IkIZcrC#a%EQ0;`P*zfZ3Ee%KOgsuvSt;$@(F)kz-E&FYv+}wEUw9T{8XPpi zZpYO7Tk3o-ndvISgduF0f?fT&xZB>Frd95|8o(X~LMHl%$!3ifMXgywO77Py-EQZT z3l9wM$Dg)NPV8=vwp;E)jEh*KhuV(Qyy_`sIX4iAfB$}`H92W|oK^o_k3(8gP{@}yxh6K`@nL4-Nv2YjfxGbJ`aCvNpAuL% z@OHW5=n@`ZslXCaY?Opd8e^!^_axpX*(R5AkKq1!zze*h6Mh6kA)&&;_gCUg!WzP+ z#!mgQGXlI4+N$BqK|VH5k2hDLD?WAc9`|=of`Y1Ivw1V%{bQ4Yxi{%5DK=%(kUo|5 z%^9_eu_yOmEWQVdvqc^3Hj@pvC{f(;c&S0nx2b-f~Jf4V0f zAXyZrZBDvLi8hs)Ng|=pO}e+~Gi+}_;KD@-dh{Y|dqE23OnnjjA*twjk9=4mFOL2C z(BBIP23wB5DmZaB0^uVa)U(ZTl;*12>Ax}oaqym<7 z>74Nl@bNIO;}3f=dNp4jCj(oZ*@}?`hx6E!d4Uc4QRZwatOOtA_NYfWiP!Ole$jLV zNPj2hfvlB-UZJb5cpsd?FeT-sP%}bA4TW(@kv52t`Ft3jiE3#A9dM=WyjyO#!X1SbngQ~_NH`ha2e(}@>9?I z>ANRMiwPs)>DYA;$mafXJ1CsCZ3=@p}HDsrk9|D3C04j>{tfF3YzYUS)_Fxq`8RY&$Jg@0406O#1LjDqX z91i+(y|2(MW~U(m(jkcPYMgj~F%2vj&u`5LM2O|K^H?tN|9|9V3Etu`c?^?&w`oZi z={P@N>c}mV&Jj_e?N;{BIg03;!1l5Ns1+T)5BUkhCfg1^Dc7!1UMs zvo24{sc+PN0|LLy7HXUpkv@paoIoxE0~IXy6lud8J0SnWD~kFyCt?n8cOC^$f4S9P zZTy+@T>t-9qk(K=EaKZ(NsA~R8T~{xK*i6p7$dkt{kO^p##?~@skrSwDsINrWMjC* zh+Jx)|4)|u(^m=>3R;@}MTPZHTK%HFA?G(6BZiR=8iBR^^-66|H-^iDPD?+*4>IcZ z+Ohpt?C-6CbTEBg$G%Sx@Xajc6ZEUEpz!?#vT-xf(#Lb0M5-|4EzhtHUS% zJXeU^-I5tm?;1{e!j_+KNQPGUCw#=Bf_^7<{0&#=+Mqc5K825;KZgQl2eZ8*7Lc8Q z5Z2yR+~_%;x-aBIJnV`5%}8;tGPawaVbg{5qF59Brn76~+H|o+kvN|tecgDFoj+OV zL1$4y6LchtxgFQw&B~?Z=y9RvIHD|A*8X%|NcnUq{P=_5ddEgc*xY)zTBvY`^*njE zUc2>43_NT7+dKL6^3HRZWft71mnxiDpL6#SB=PV|=V=!UeA`9&^n$}S;Km6*!4fXV zlQR)4@!j#;u2b}T{Jo32DAudtS4=I}R6073i)YD+*5BBxBM8sdXU~Um%Jslrqo=hs zvjYZ?sT+4D^3)p#3K$}RqXsi1?S%}cB);z5()k$!`55GO{Z(}=*$ZK`3>Gfd7=G^Q z2cSvJimgxZA`w&NUlpF&rK}7OWZr-Y5e2)Y0g-1iYZ#ubiH^vnFMqknD)1*gGdiTl zMmHziFpX0oq%$z}s*OXxy}sW!mGG-ZZmM(RYE9{kRPY;tCAm<434(M&Yhz5F54u^U^%K z{G~<2X;z&kPD%RB(2gy+BQ#6>kr+~wed%7Xwuw!7T%FmYPfzN3*Q*Psp6z|t*2Ij= zT{oSh>U!JNeEbg+SfjG~-iHzk67!0=_u5Hi$E{L69NexWywHOnE+kf%S4kVB3;@?EUn^mObr<@H_%|gWw!*5@t z#J2Tnb=Xeo*&XswqhEGpeFsb-buJNa1<|bWsjdoAPXx~^S2VupmfJJ@O0DY~Jn_J< zw|1;!%e0?lc}pU4n^%Ws4}L4H$7Q2`$^&=XqK(073@;>kmV^Eyhlv% z-JGbVw_kc}UirdiAU}|>iTZgl#9ZRSp>L@uL&s`(-|Kfp8Di@pU(?`)Zgh2ik}z{gKm5`-oL0-&epTZln=-x0fEJF91$e0%CDZhg?V;1`kNXQ+(JhJL%T z`Ev1$&I*o4VhRCl^N#?g5WG+AdKZShI+iNw8q()YM}#)r@3c!ieb@HC?;U6}CVIb5 zOMrAG*zP){E)15{jaep3z}M7FZI{wyGn=`736vHcV)p7SS&>1IDVbI@80n- zT}?DyU8vRyiwIMH_B6MKv!4$fsPaM9sX6u&AC#jFk8n~M!|A_JC%v^5X3^q4zg|byjNPTREpLQR})-5$VHT6oBA7M&$pGTOsWO1Xdx$=N>h!F|E)N z3Oi(yR@w}t*TR~6ONia9oO(I?Cv`M|i*6FQ_=8+owu5Ut7`=Sa3WAD(ut#s26apP1 zf)ZUwqM&{B-$@MAxZ6u|NO}dA8{=Y+C->tp-mllwuM|28(H&b>!&4a2KQ+$LzNq9wwo9P2e8EBP2NtOcIoAd>Kl`M zIP;7AD!9sqgr%0EBL%Z?Mnm3Dk|b4BKU^XMfDLFwL8&F zu`io*G1rFwQJDOR)krtaIQwO&z2^LO6aMzx)e{_dFNQU8a#t*OoPMUqj-5g|nBd4{ z`p23s{)t#U)kH&0f}<+Rsu6HilAA1Nr%w10EE5FtVHDQk7r7d?*ElZK1m76r zf$=ffKx76p_%xweI}%m@HDk!_94~gOF3xLYZDG@@KZ5uABmnnSqsd_B>8%@%0OKR8 zGfth4If@ltz9ioydl(m$tJwh&42uAgpLqQ8n978o=Q5b~q;pUiQK2-k)%azgmRqRd zBN6^IQdiEr0a5orKeZ;<9g(>+qkfyZ`8P)RUrRmHNczpGF``gCjQV6A&BDhATWf^m zuH!RryW}4GffXN$LV5h=dmWaEIi8=6)Qqb}z*ULB-MjsrE9+am3AFQ8^0;%EIEBs?~wwuWZNu87nebJWjn zJ&KPWx^%AKaww~IHi#iPQ~{Uf0#5M`xh~0Ads8Wbo<|iBVN_YZU^JoM{E3VX4DK&E zy2O5=2YT~851L}XY$9HAEd0|VvF%8=YOw+j*2L5oH>Bm#hfW@{9qTwXgc2wv;4!!N zNfuHTlh=Y|4yVB79=9}xGvTMcyc)z8tzH+L1y{(!dOq3}FTa1uI7FFCFXpEl1oL@3 zbn_*8vn##<&wq^0c+@)0sXJ@KUen&Mv0G&$=e170YEL;X6|Q^Bq>UTFhM#Q;7lr%U;kO+kv9VHEk|DKGh^Rms zQ9#ISCESqN3+(FtFGO#F#iCb6ty1s^`?8g5U6D!6JIi%yw(f$L%|mu&v19Ycl?v`F z3Z)!{E2e^}1j->>Tfw^|X6bFqq#M260boN8(D<*?Bu7kAumgK22H%j-8N(b2Fu(I?h6Uq&^@;2U-|O~IJ`Yl6@XWR^(o zvO9{rt5$YRZ{yi$zCfNY{;hRt=w?;^c}=U}iP_DDjs)%#Z@DL|PN^p>*-QynO%hku zS6*Q-wH`(V6Fy&UXMz4j+;{DIvu6$c2;Y@sWk7_`-%oAf&d$_s6H!Dm_xBV?tC-|^ zy`|LCa)fcWM7_nvUWsv~kmC!#@OSjfOi^$MA?D8PEQJsANeV6FBeYOy0WFrH)N2`^ z^P*tpBaopPclG%?X$T9;nn=QP1}~t~o^&(HAZBQ5?NSJEb1gh(<7UyD`6&;XA8tlnOyNyyb=Q<*?KV5w$t;e- zQwIFib>KSj4ksZ76A?e3|8G0s_|dD2or9D0sH6_5Wr>PZb6@JDkCfA@NWSc1VAG1P?|tEZ*=7!kbWo3E+=v5Faoe4n>)x z!W4nS;#rqt`TD)=`BYagyRlflwGi?1 z9)ana?qG+9(^Di~?f$-kNxT}xPH%+}A`#ur_U8*O5XJ3U5kQ!j^gG^J{!=$ zWe#W}C(`|ljXoHxr$z~}wmmu|E!N)#pTBk;Su(eqZ_!=%{xtPqs zw5-371!%pEgpq4}F&ATw?FX!1$9@luJRE|*wYvYH;RDr^(y#D@ukg8c`gjkXr_RjG ztd*y!SM`M~#Fl$QJf`cl)m`r{Rx7oOGJ4Y-T4C{xK&!=6%X&VNftsmr7wJfjQ<%?P zTVb<^M|lm>dL;mm)r?WzRXp)kCo>^_6OK9}U=YmCVhz))+=OTF zc3&jRVFq>;aa7>twd)LQp5{#{{4f3K5dj#@DH!y?BR+lZyj-)i&dV{( zKoGqO(NA@4(-`d~)ANzaJ(P&vCXX zrhK$59`>^5uQOQMYos9NQ#@NzsN~?K{88O%vzxZ@WE#GYH0)$+@2HM>i=fk-MCJf? z&vzG}bQm+QrHG*yX>P|x44XX+gOeIh2JXKobBhf8lsjOm?SP&b>G~cv$qBoXG?xCk zeH8fUgvZ-Go5NoG&4Km)xvLdEUyFlRxrUyybTlh!9jGM#%?A zx!~6y+fV9XyF`84LA8^wz4WnFEwCZyhia||JBcW_XoEW{=AK>gtoyI_zHB1M>n!-W ze62n1`FcOJTqc!_q0`Fdq1gqA=y85W+5FzGk`M@k>AET zc$_a0IBaDdM;F^gFgfHBOjBYHxgD0%2*afq1<279zs0 z6aPW-y$MDy4T0;OyGTz76Lod2(BUm7^kF~F;ffs24f15ILaerA#%uChbw=87b&{ zv!T;4d=wWbc*FJMJSLu-$$QF~PwTbq6k=%#{Jf@T-&uq@3`8Muf%GE7QNVNzZYYx5?u6{GAv%)d#FAoz8eFVgsZeHIlcLH{-6RC6r(;>RBq`tOo(u8ac>Vz74XjY{t&--+M$i=GnTacL`e<7=d>5#y1B-}(LPr{n06ut?7MUY}$HkX6$$^YY!r_Kaf-)!Z=o*2q zJoe>XX(B%=vkZbh7tSXG8It-U^IsGn$5988p+##E^;uc`$GM4oN@HmsFaXAt{>8Z1 zfRLfpZ{4t91eAyjfJXLYHJs4G;5@(k+^>F1ery6)1OP}{8UWH0fba_Z%uTwAZb1;M zl#Che4YjGroJGS{w?8){n+}QAk?Jt8`;94gZ*B%Zk(5?U2iZ%S9)|F)+ze`? z+)1f+I|&?>X2gr3X$x>dw|}^R)DIq}(<1YvQ~G#`pxw>rkG-fA)9B-W5xfm&VbM}ZcvvP z$^lf2j}|m`0apU1{JdEi9bUO{d;pW0>)oUC{PIA#qkc{Vr3F5C)dp(~5!G2Kh>@tz z2{xIX0wm$|$UzP3O!Ve8zS-a{j08?OS2@7cl#3&32*PfmH*z38^G5CszPTuW-~vCh zeO6k>ir6y*tCrSKkCYdxl<22r5q>n-4WVF!t*As_Jn`I=;4hIgNJ-H}C7)g!@Z)(kLDh@a{=FJ!k^p~nw?6_!`JuuK zs(y8FKPmP!6A8KxU@5I_)f1iAVKXg~XDn%II6)q!qDWAqFBZA0VMa)@R%cm>*?gL& zw7fY<9T$Odya35`;lBaF5kPr?suMUh`%RxU4LbobS&Gz7NvpP5v?9W9J!}!}w~+MB|I>T+ zu2lvG#zySvD1!9bZht4F2LYfH{|-V0`ojS6dFnS&ulM|s#P~V@b2-BfoM^=#q&s&{pm5sv*D|Ca`)5pWTm|D*03yqeo;^ zH3w68ya8e^+=TA0fKn%`amT^od=dss;JZLX-6<&x>o=f=A3JClOvGvq5*AaOFYKNT zq3y|l49l62l!NHF@E$Qj#q(%4B0%d%GgZB5VJZp?gqTNV?r3|&c`7p2IX>0P7C$Ap z1LdR_l)#}*NXg&h_`Yz60NwmcRt9bC-@QFf2NN)aJ*8?()Gu7eqvQDe{PNy2M<|W9 zJ1MI>;qGZgBpm`e=9#F(lMYZ|XvXXaqgbVGDoU4~;ZIq}^owSS^CUOw0e66SPWcB| zj9V6kR%gK%#f(#?VI8%|90idT7}R*cxj~H0SsB@!JI@_VsT0u5cjD$+vSdZ(#RfsZ z=)M%!@*^%)X;h_H`uU-fT`fRXSqCT_p8Ew2g9#w;nYeH4Hj?kUqSO{rBb*YWHF^tA zEay=(629r6<36|Qu*U`WS7{wF;YE}yhINyp@~B86K=Y!QPs9+o$ecKriPq6%s`|i2 z?zzQdz{oRPWPV*Gv)*ojKtoH<$U%I8E-Wog_WZ+bNnMxhGk8UhGY50}tMearnPUT88& zb=nIyTqIu`BBHnS#S>coa>xk2cZcN6d8%&E-SVx^?>A&2HNtau9<~BC!^EFd0xVc6Eb$_}$8F@+ zTXVO|D(W~WD&5ib=8gvk+Hle01D=&I6YA`8nN2oN5@ISBUv@Hk&|}ajqe#k*_U+2U zHWNi*6)TR_)mA2IP?gd7R_T3}%e@7k-zjlc(YB;$KTvJqeNZ~&5qU=T4J9hHej_0B z0rA0mZC4sJkAn`H2SX0aMp<$?!&D1L`zw*5>YHDi9Vj@Ebb@=oClLGI0qf68vtYdB zj`Emz{?QlT!d;v5hri^(lD?_GueRPR5f-}Npv?5WU3l17Ic~kBgmgZvP(EEo+1ra9 z(XCI~)_68$1a9D_b9v=gvv*3?JT*M^VttNww&Mr)T|5060@Ez4otb39PcCC95lvj~ zz_U{nz$^8^+l(t@#aJ_1#|Eo|q9gZO8G{^YgYX3(8ijrTD5&^OX5`zvCyVrDk(*Rt&AZ3pROF4p zE^4E&iw-j$9}Tvg-wh^f>fx4+VX&{KA^(K-L6&1t6NmE`d19GVb9J6ll3hP; z=K?c>#53+Fn;ojnIp%WBv!F9q*=;GWDa=HZhAJA{8aeni+GXuHeAk{h<9~z8O+t<) zL8#zrTFWOBff#oLpyp(13?vkce}kqn{|@6Lc+erT><|26T;E{U&%Sk-n5VkXhaKz3 zia|zf_X*qGTsoU=Deg^By|zlkGjLKty56rUZJnx36acupdyw*jAeBiu1_ zKWdXvKl|EYV#2E!31Pwlh{H4p1MIAL%(ss1U@UDC!bL>GwB-L!c0d*;f#Zix*~f@~j>Mt!Cgx$>kuKJ}I$4e@ zWizDGFH}kNVxE->{4K3-C(i)nF8l1C;_4~dS59q1L(?L2XQV7KSmR$c7bt<~ZMiz+ zFd5PA75QVLyn8$8WP9#^)Mj&zyS!&R>1=y0Pd93YlDQw?#;@AHn8w6_r&XYR7Ifk& zD}&valZiH2Gl|CU8p)U_m<=?dcq06JAT6;SlQi<|x`=!DRia6-Zq;Ve{|2{CBvW0s z>nABli~UP6mhgrF#dvNWIiLmAu~34ok!Pkl82pQ=vywu_6SG7&Tt+cH!h}VZg@n!r zBpM%tjOT%eCV#58b0q+@GK!bO@Q8py7Ad7rq`nE_?K6A5u6h31(Bv&Lbziw7Ef2uf znBf2qYiSnOM7)!H|Nqeif>Z!O*f3afsOowLj{ERDAVzn?$|lBA|1}TVc10Z-^MHe~ zvZsv!F}=uoxooy9EQr=N_WvBzJ?uu3vMw(4sKF>_y7?Kd)Ulg@@YQ$LvC+aP}qN{ zJ!!%VZS)^X&Asv&h~1amW#aLI@~lzrGMp_?^d-H)B};FATpL*@q;&fAaUF7FIZ$_v z`KBf>J%!?6GS}JFy}+kA-aQAGaOTMNn2$Vf$ko<#pIyT9*K7a>I7&#yk*IZX{59$9 zAvhf!E#C1tqT$ty%NFTmxvFb7PF!M9v}4O^xiI93P4(_oY{n%UzrZi(5cBL{-QL|s z=*E$X=a>9phGo{+`Rc3lG;XJ>5Q3vtCpNG3+s3in9cV#|PMS8Bk@rJk#nZ*g)drK| zZ$Uv*>r=3gjN;1Lj@P{)ENAg&TT2}zO7M6X|%92tQ>?oMwk`$Ekrp+ z*btT-g1!hMfvtgz#0WdWjzC0Wg$ZFtAytbYKjcV;!Mv8+WXMXau;GigBof7WXl4~8 zdkGW`s|8_Q29d%ZLS&agtgtQ+uVqj_>}SZqS7BFJSxEB=2!g0+Exb|zd5ROJgPnwc zS3wSV;SkY!dFUMqF+b*9q8#Pyex`3SO@sAEJg_I!%7pdJ zJgi*vPL4j_xfOw82yL8|p5oY|#xg8%>46d{dijvuKHF=p4!4;4 zM>cf^CDPh+(Suaw8r$l1m~dpmtDb+$a^~iiwOJDN*hr1N?6tCDqxs%4K~wzrQ^SsE z8lZI0l$To*?M;i|AJw`N;_oP-DQbI!pY4;UG|skt?bBxUnB81d?mwTOFW#T8e^oo> zx|rj@9Q8w39vVYn*;Xg|BFB>i`w5!ph@enWw=y9XI4L$5=lDMM{9L=%yXh&o*GgiC09I+{jO5*^$COK#9q|n z9pGhQHz;vA$0ONbaT`&Fson=&JUOS09>#@FwvT%MJgcy+2;7O3wC+BC!}{a2f_?>$ zu{JBn+*7##!KpXg*=%iYTY^J2vm-ee%fOj)1L^`j-SW0mcFqKmPZnbi4Mkq?`T%RdT84|4(co9ZREah9k%5bKefHTK0bjii1Kd-d>vUv9Im}C0y_>Qi9gA!57R2^A7ebHAc#Kbi(N7nSfx1KK(QQ~u@ z@2%v(7cavIR8YSBIohx9x)S!jfwF>ckgtJspKFOo@udWnVK%%fLUX0^YK^HP_Lw$M5B!BWIF+_=m-liX)FFBbps>I+BFo~d2J9D*Xg70sDyn$9oMF>hK zC&mWv?gg`XM4(tFP0}mT0iz!vKXyROaPKxDYdgTU5iAJGACNj+^D4yf4@eO1P7#v% z2gFOd{Ckv!1%Da2?_j`sTz6bHe3#b29p}nv2u~4m`Ug14vdueq9xskURUPTgQC{Ho z3s)qL6-*WBUgm_*i1nSYuAlHaM#4MLWs=sP*j7o2jw>7f>w0X4EyLEhWWNG&HbBv@ zdi9UdK3!Y?sfsULGjH!;Z1?fhaiDi|S$eB_Fg8G0Dt|&Z+Spfeo?tXNRnr<WolD9Gql2LfTYj8REGFSAN{9-F@e;ig1>)lr(d+ei9AjZ zb<08Dh6@G<9lyDDJ_*be zJc8799S8IopW^uz=U5;lRkX06SNx^duyVes-qD*Vf;{CR8)P zA-M(p5fvarK=>o@M&dXi47miU0WP#s;8-`hQal_@CGDp{s77cOUMf`Su?S7YqX-S; z9JUI;#K$%cJL56P=zLk9LVVjStw@g}FTdB+U{J4u<`Bn^Xg<1JfDAfsFPQhhlGB5u zpc{h+_tfffutD%y8CnL6#5zyq{UZ9XnqhH390Wm!Euz}6^Y!pL+Wl(3yfnQ2D6M1Q z6)umh0sF#w%=!}AMo7a1(|KV=(kWI4kn%LgfYB5p!T(weBA$S9r4J%;vwS+`gk z*bOc_3l^(a#Rzz{Wq&X982q}6SUmRuzpZTAC+F$QTNuuwAZ=uk>qV7mq|wrk1s`k6 z#@>i_g6MMscE)UxM%Y;Th^V8CUq;pxuuYlwavJMkq2VS?S?UiNd!h$8Zg2i-o} z^7U@}7q-?BgswapG${go3C6o88Xv3&NGyn2ypG3H8jWgZ248;Q!-B*%N8M$Th7`+g zB^Pp5q~Cnq>}2oL<>%8Y-gFD16 zjj1R%vX0_kWU9W)ovLf#T+wCH$8Y2+__ndVZcNtnwS;^N)cZ#!dQeq#T3>p1uOeEt z_tVq3rh-+Aos~fD>l*~hN=lP3cdftyoQqC0N>X$gaY9>%boIV(r!U^o3WeL_QE&WN zbxlkN3=!1tQ%__l{6(dyMio!47VAh{`Z3 z_3~Tnc}5&V)~*5Wg1*M{%9mp|HUTPLdOq`bY0+F%_1L5VQ0~*BOV_mPpG5lUNfG|H zwSq_CNnJTHCuRgk3H8%doj$Fifl>NjxB7T;xNCx!Wd_71joo3yOEG=n&D+7vreA)4 z2Nk{xJdzB7WF&ZA91w5`=4s7j41JZ=5bLKBN9%D{VtJuNVBYD)Y|_jvCmugo_5!cZ ztBWma4mPF;&BgwB^F_~B)5RG&#E=z3awWO;z3DP99z;EBf9IL}DNZ?J#azO=@G zZH)7J**>e@aAE;A#=^nn*oL26=DwgSe8t(lc0IwFI3lLoUZ7cKMY%L3Wyb9^wL`{(@jV8epRh|V;c(Q{7@yjb-VUFMWY}Fo z3H&Z9uaUqgE@i~)!!l^H-uZe2jkhS_q+2UHcppR?D~Fgl z)~hex^mhRb%Wo+8QsV>q8VuMTBkz{;-r$87&|SP!X82kLPLnBy)-O~fc)IF;VsP;l z2Ynr}ms%2Yh_eXWa;85ejZkgdJ+bOZFsgPRpu8XjVO@}_)PrB9snG=)h2pej^IfE3 zR!pcy$g57?W)vm-nh{pYcW&8e_R4oI=B#aWk@MW*=qM7L`?4J}nLybeL1WAt=vPGqT`vF=NFtQZwRe z94E-{W0&B+(uqV(%|~XJ)>e4Ul%2T9$ zo`!Izqg4=a__`Wb@s6iCrd9#@TE{mz&p%0=qXk#K&UW<_j+W0dP4 z`1=j%F=k*U81a(Yo&!@pp+>cH!^-X_2?x=B8B3KubGmi*SVTjmp+rpnoxvoO==#1# zy{vpbt8xt8V!uUyLpF$(eElsv6R#@B`$r_QQB!$-Tt%@rtI`{@>B%vRi1js^g94L3 zOyB%5Wr5@`ez32DELnZ}a|Pcxr!sRRDb2`;vr*C{fkUoP3f8!|gJ95ZQMi&C>>&oF zwdj{yq8BK=0X?6XvESe^BdF5aiZOx_@=-$CxjJ4Z>G(b$!|t(s=vTc+)4_!= zzvq$DOZA}!ICu`}9XA(kg|4x8Qu|#}yB>E4zB^^(rI~oRzef|zkt*PhuH|kWC^WMmV-Y9#8d4y1pmU81k*cMuea(Jxu|S>vqE&-Ufigxn+a2m zz?n%D%8qUenNX57AhAM`J2J3(ZgXySV%UGElw)1~hi0D-Plj;ECU9P++TJ&MW9nXw z8Xs0F+(kbK3!MbS_-5>3l0QVmUHl5fHHr;`>VYm@`^p&_7U|@nMYB~RgP5usn&dr3|>0Oe?{)F#8f<5H@OR#6JKhzA2 z8koZLM1T(mj=K<+`w(19?$b>D_;TG!?tkL57T-%E>#5uft1RW7X{%3^DWqO_m6|b94$g6XZ1M=Y; zcS^bw1xWHah=KW-w?li)dIQ0}w6hGiSwqb?b+wG)srHRKz$su>>wKYr+dTW$+9aTU z*mN0kd=9eVWQ0Uf)}4&hRch=KC78b?*k1Oy37DwTKMk00^j<~G-w>Q8m+8Z&^@)Pf zw?}Z7p!0Hs#9V;LVf7)U7a(GAq+k+4KK}R7`ggzV9>yc6v{Unala(8EQa+AA{}3e* z!75Ck#`hJrZ1;3*WHtmn?bka&Bm!!U+UE7M+{PDAsAk>^-padqAbBGlo^T<~!8_{_4#CDtK#%ox+RSt%i-h*RB z*efhwR)^NXU%^n_xZo8GqOChOrE{;WuqHbZM}Ug@9kaRZtHO0UaSpoL1f>8 z?Av^^!dEIuj#=F z?O2{9;A7=sr#LTuc4_%otH zA5pCWK766E(Uy+?B!}(s4qTLa-a;c>?zd_bL`mzq-NJ~@KQ`<^aJiF~UjTS>{q;|% zh1Ja{hzdJ<37g4A>&{xy&{Sc^pPu_-{*&CDqxO&8yD7QpjOrV@snBM@L@0|*+KRV; zo%Qb~CG_Qw>AbfoAF3Z7)jI4U4u~W~@;mq<-sErF6XOhK<8ugc4sM;lVw=rHCuY;k zVPw9d9jYSz4ZPz8S)ro18e?GNZOc3SlDze!G)w- zk&8g;jcEkHT}&JwCHicnUdcZ%oibY)y3#DZrX}|JMaVE?qE&h+}r;T##7 zP;su#a&FoVmftLKUDPCo5OIL0zJur2wi*FaV9Zd9L?U&ZgHHAQc3Uw=T%1KZJVKl> z$uId*z$=>HT(lj`nmRc;R4EwrELN~N?2DufG%tryBO;yrExHp@;|w5L>o{9*<6*@( z{cA6Ww-vHJqr9*7(M&*lU!5%ejNkZu6+k{(6dIykvQC(6hMaA}XqvWB7I(J=g1cL=puyeU-5r9nxRc=S?(R--hd^+5hv3e)_w)Wb z=g;(ZPfN*F)w9zz-H{pqOJY_%H6-EN2(^B|EWc4(f)SU|lUHgx904)FD>cvV3jyFL z^%jmm8W5Z+08bDL5KNtbCm;pzr#9JtsRt zT$rzYl(=AN#I;lLf<8$NjaLjYO3o9Mno5C^?QGMG_0T-$axRLW!%aq52U+OI=V$f~Qs-mGNH zK8PLsNCq?znk4Lx!y!~I6!|L#wr*7YXOP=ulx_MDdeU{B5T1AmUQU(Z?!I$4+&h8S z$kp0bvuERzBG;v?QeyLeC4h{Uss>en`t#=<(Fo-}cr@frV~tPM1U3Dpd3ft(YjH70M> zf|srC6u_~%1P0a*VJBt8?U)B9HY-J^6qtVT<^T?6UNxtHM#ga&={ns>Rk8WN#%??* z=n)7@PQxoO?h&d>;*2~rY{5UzP#U%-opGv|`^#H`IId*;MkpRo4 zNi7-n`15;Ep(_Ia9;!EeBt_u1$qXJpAxcnmbeN@{r!JVcGcpaAF+WPV-{P+W9L&C< zVDq06cS82$@~vfrNBEI_gZme9rj0&OqvN$-yu2mULT_G)@U#!O)FkGF4wMpZi|cE| zAk|BP~~X!(GXoClVFz@@?fdInU-KO}P*U`dgF5v>wn31!y-*7;gh z5L8aAo-E@ivS%0x9uhlL&W>cvI~>ozPpMD9)G)-3%`24!Qpo>WY=cqKBHVTjIm444 zo?zq=VB-OhZx`#?HpK80dyCTr&blw3rxKQ=i%=zwS z>}a!%WA-awSFO9yBK!b)M;0IvEzM6zDt`z=6b@zLHIgSrt zahQQ#&qefn^-~NH^h4j73io;2BJqE}+nEu1x}Ix<^6_E50^Q01MpB#od`avFE+z2< zU*F3}E}zHd!Y4Mrm^>bOfu8O+hZGI`U7p_6K~5dN&;-4GJR3q`41~PyTvOu!4A`JW z4$=!PQ%8dCkB9J5V&vz~*iXZar*52)sKIVW+`6+5S!ahbU(a0s&s`NCJm1_$$(YR^ zW4EtB8OO#}b6MDp+n3#`gB9+X-sins5UHj?SI66ZrRLtjfWO~+>shprevg+kL(UJO z0Ry>ZRPPN1Lg;)RV+{R?7lXJYnh+4@W8yo_+H0-zHp^qUU19Cww?s$Pla(t6H2EEy zPQSMkL$0-Zv`*9{NH+Mkmj&PQCezHigMjpBQ!IuofzZMWH?WAz_VOM-&_uI9Op%MW(=UPAeI zPZ2Aft;pgY(B~pJ-9AEv3nP(7KOWn{5!SAzI&Zz7pIik#dfxE_NgO#_JssCh&mJVt z?W>g6{7vj~`H6dlxXh|*Q~mB+c07%fto0@&6F;u+Q(qsgAFuoj5-~1&2>4qmjnk* zIi75Bevhw>a3y=pNCsQ{rVt;IY6Ji69cm}{+y6?*G}hoB-io${5sK^O2YE?t_E69ijn5sK-c~TL(c|x zm`C^lKI$ix#nGCbTjVVY{vP zZ0|dyNz_#u`;fU&`~kDO5tjn*4rug^)^=07yrPzH6VKgEB_)eSbcw=d-$9J`tIJYU z9*HD2n|g^sq6uh~?vFA5QH+E6pjC;M;Y&o-!I;ws2ExripdHsuesZ=ye*9Npln0zh zxg7H&1p)ivIC!@s#*cNqUS6O{2)Um9Vtj7QO#V++FP^A!b|k)ELki5rQ2H^m%4z&V z4D=T4nw#3EP{C=wF>VWq6Ba?wnv&Q878ya2NX=tQWsM*r1qvZOa(Su_DBcXZq-2jP z1@ufitJe56C1SoCL5DeQ)w%MVBLaE<(+umaQHKJhBd(IMaBM?7{~~DP0$;BAZ`qc? z==4*8(~TJ1m+;CPIL(nn zK!o7UEg8hzgk+YM^-ohxh>XM7hFg-YZ>sV3AFCuAHgwRoDYs<2y2-}(jRUL&ZDh$f z66Qc^%Z87RGrGt?{}VjI0pmt4cDIPXP!w53 z!Xd0Q&15wR5K$eK*a^s^%d`t8LI|>eQpI-_p0&%5V}qld>Y+82j>GO>p(Tpr#Ou3> zgNhWTtDF9}Pr<=FL|E%2{3nAjhL_ZOYz`E|8`V!^MrwLXi<=vV_LHWU6o#$eClqR> zNZPvU?zgSQ2mgMbdYzUoCvJp{mY7y3OarEqs%c=I+9+=*%&yK2XA1;*1QI0+0n%VI zK%%xzSTD00lOlq{-7;uii?pUuI}+23tOlvXiV=N@in0L_Y0#aDJ`mC=$~QS`UJFE8 z^Qe(d4rlF$EK@~l$;+akZ5r4Fn6Gw+whneR0RM*H)nLODu0$9;$JT|Q&a|SnWkl!J zLDn@6Y@4H@vWPp{m1Ea1MnK1FFT?x_zio?2Ca$hU>fpjle~3w5DqjQ*4oOcrul^nM zHee=I=p?*q7mdpo7mP0k(~KjP2?|__ViJ?e1S})U1~tJ%RHw-XwZX(yFMkhegSaTF z7uE|nri1r`?WwZP>l_#nE)ymQPI?IEA#4aMHHcjT*{rHSWBNr%;YL`}nlwlV6aXx0Wt~^fmWg(d2HdhTbIN{)aZ6+6pS@ibcC9tS=Th%Q<7y)6&B0Brvir#Jiu}1jS zI?ytLSbPp~dy>zn?Z2_k^kyO9Af~{%VMyaItiEdEG!Upi6M#ZI{`LB^zTV=Md`#A7+o)D4#83e>7>D0jG^uxtq@_=s& zZg+tRs7G}}ge#IaplkEY1L7tYHC+4A3%7yo(Jrjkh7p|$>NgHpvvrQ8X}#d4eWGAZ zIqV>U;(tRrBXy~Rl?WqIs)cktiF2&L2D6>c@Kjj8jId~%>{9dCRXGUD$I)vz45Sq;rq;?QN3?&de!OB#{1L5OQ?TR_$`1T+}Y4$wgi zi;z6G7(7L3-?bm`=y1{@c=j^V8-m~iIJD%{b|oOP`b}j1a}y>FDifiu0aP?F#pGBJ zmV(JuYG!ps*+ytZtk(vXwGWWm91wc8l(%6g1%t5=oO`M0P&D|U-)i5e9H8@nC44%u zLqRaO;3)HJBk7{S*uJ%96cv(Ks#}Ypq9m7kh}IDkGJTZFDJun=Hl-A0Zc6eBNwGX1QRCFXqJUb! zA&(upbs#KN1G&Ug-a^4DM-v7#23P@`HW<6AX>_Lw0hWOtsn(3>cpQ1yW{}&AdBAE6 zDZ+$=GME5hLTQN8Mm0a)4&(85nasbO^v6WnHf-!9}c3o3;qw zfpT-bl8LJR0}2jZZv_H|C)lD3lZX5oIU`csbj)byWiAcIGYr@yV!BhEE$n1IgLlnH zK-$J`wGD)Ihyr&!_N_P}x(yAN@i)%ROY+K{asAdSz z3@bg14#icbyTm-xEV60TY8YQ1a9Ay=FE9=Ow&CB9{L!fBV6k2!i!ghEeSnF2#U*-3 z+pz=!QCB(ljfF=jj3;b-qsmxpUn73qs-_&k6Bm#Po*3HFESQ`iW=v?s=|;u2f&29` zBGiyGq`wkgCHsJb$^{_kj3Ib<&{B)x_ho4K|7+(7R#hDWdJWiDh*~a!#m@~kG25{> zUwl$MWu$Aypd9eLotdag-wtNOH4-fT9Fg`=aG5SYT_6-bbjooen0HwP8Pv=GORabt zA6093XRc#AUXHxgb-{lcVIoIh^Fa_y9}K?RFM0PbIozv`zo>7gxPR+>9A?g>vV6XsC~o<` zqap8RzD|Jr`XVj`U(iUPicIWiwI*+ebw@O<+=kkIefr%_^=98scm&YiOkMXFUXGV2 z2XFqW3BmJ)+l|$U9$37&9>4x({FIFzRy_rpA+b)wa|gYY5QuD+Y~gZ+HxU4?z9XFt zJlt2a2FhXGU~d*wr9)hKjvxwV+VP_+r}d5D2z4|7N0Rxw_!`ir`D zfpY^x=|TqoGH4-(ScBOa{w~aL%{SeLM(vps&lKzJFZj;c;Rk*`37M@q)W1TLYnA>z z_P)KdfZlC`5hbhGx*%tuK6)*m*>pjz=c*I0+ge-v7Yt0boQK&3GLN!`WK0)}SMx7k4sUCgE7bE(uJ+-zKr&ea!HI{K51Y*Tv5v8crt0_AA6n); zwKe~s-%B{fZPyF7Qp=j6>MGnxT9oMKPiN6~4a*N(G)vzczI0?UmlKx<$v=SFDkxAF zamg($X$Jau{3HAYZ)G zZsF27?!iJXiN3`>l^lfi{$&dE6;S}u6^UFYTj9dk;prV01Cb>!Roh^b+Uy^a!7X)P zj8%a78?3LfvI&lbI=SK^7u(++Z1HXj$WCdQi`x@1dq3sZw{xw-wGee)2e^EVfBgc7 z>n&Q112c0GKNFh>c3`1&OM;RY74iJ#wx}Fs+W`p*CD%W)GiUJH_LGP}TO~<%;Rg@e zjBwt4IwN7(--?}zTwv1ZuY6CAjd%TwY}bN_>;L?$Y5C(FWBpw=nSS4Pp`B2%P^hX^ z?KTjV&A5=k<4jq_<9W8F=xWdF_}JvGKr+8v)z6V8jz~wRR%h4Gbnt$5Z1|w6dIXJ> zO*Qf@>2T^k^Nb?n=^04|bUkAp&XX&DcnaCIHw5XMoY(RElH(}8M#N3UCHZ+Xza{kk zy!H6?$&Y<&&%L#4^ju?E9R!Q?S$XWjiaU44mi_H^=i(MO__u^El;iyzN_1kz1GHQp z=AkbWfO2zt#O3X1$?*MOVwv#rtMSEvU@tRA4f6Br(Nav(s+zw@svI`M7eH;R4K{-d z0MMGcfx|!oxJrG;VK@gQrk>(56oCtW;eiwXR8D+`U0Eyxcgpe!d+&3VnKVe7Zc}fS7I~3=c_i zuP^N5CVJJvh12Z0<7E!V2vs{jl;d@;r@Ny_rdNZ{KU zos6#?>(IUVl5=RNL2ahyXuJJZ+fHIxHOpJ!4|Uc66zy+ZP^}-m%+PwzTF1eodiJ_~ zj94Rz;B(IpKqR#ZH7}2!fKNQ}FaLXW)VfQ;AOQ(t{r`MuuP6PBq7|p-O!Jti@9R3A z(X23$BIFU~8t}hmv4yWH%nkAN@1OBk@r*b1xYE^^+C-Dc3;ORk(T+Q7ZAtqE+n<`4 zLP7DO@N?f9NkE(3Tao>1ZmkBCPd>hzS4||oP2-(@oWTepVQr7>$SR1%0FaG&QDg%egzkRQh(V44Y22??SC%}9N(kSqZ1KuSLS*bE zYtV3hqc=Uc3Y62rGE^ycb4Fpn?zu}4f>6G+^PmV`Wf2w3b1Vl+FxoTl!g6iSItFLb z9--E_aG1!8S9%jC7WZ6rSSvycNM#OldB!lU?`xM#@dg0Oo8xPEVnJacgi%0+!X2G6 z`~}DhiH@CjDGs6^NOUSJvE;CWX9rT6O(Z9Xreb-BJYs03V!qaEqt0=^+=4sfEu4}w zF>L8|{@y+f%?VZ)MvCyh-NJ`0N=X~L5u>V}j^#m|{f3QcP>;{>vAMlp%T^OrqY5pS zwYAmKfd3oEcly4T>jA3$csXPd^1sC@>k_#5xYvPyelju;>LV4K<&vo`{(jfuCh4%r z=D}~;dI|r2ef7T9%VI9z}J1{2{tH={lY`VoDnagToqCOZk7zrXz@E7S7%gT#?NS;CP%Hi#;Rl7IcYoO#MA zS3YHyV11lP)EaVI43GG?*-3)dLmt-I<}mANcPd`!C-U5f(h6@s55U{EF&L`%D;x{)xdu>9Owujq5ANn@7$J zk-=1vUMiqGpRf2^SZ|8rKQWy&gFh!td20VQpus#=e}*>CbT^At(K)j-`1LlHRfw}j z5F)y|^VbxL20AJi6BNdtUvoHpr6sZC$uF~}!CqvOWGd*Cw;$0DANV6c-&%eZ)!8qd z@#T_NoSxid(rT|Zp8~J6|Cpc=+Wb3OVF7W~ggv1SFRaF9*%qv(@-&f!3%7}!xUF}N z#UDTJgOY?`*g{+^>q*EP`muYjrU1mi%=a4;-uB_UAZi?3d+ZVo%wBgy#9LBz9w}7) z8tFXz>Q|$xJv8D`#c}%Nvntb_dC&l_ zVo4J(4xFICH@ZiQ1ub1hj_!$%l9Fbltr@seJ!3o93f)7IiR1(qP%cxq;yX*q;lRC) zu?~#P`>G&R?GV9U>ynM3SPSOW(;NK|;ZTc)#(t`c04f=qcj6nWvlRI)AeKm?EKVv> z;gNL`GM~3K6p5Z2PUJTZ$bz+m(uvCO<-mz`wUn8jjfU;{7FZSYwJur+<#JasIDLuR zL_iDwY*!JhFj`0+WF}EXXQ|%H@UL`()51v^Xf5~(u^$nFbA}|TQm`ttL!o+qrJ(js zfu6m&<3ahh0x0Fk7#`E;nyVSgoazq45!wTvjp*0Bh)mdTzM7gzq>_Xx=DditR>XIg zh}Gj1LdsxfcJOJsc9q2?@+3jH)tUKCfH_~(FpF3ak}0$g+ktM3 z5lwc3OtUcZr=w#Wxtc6!k6+Bq^Ilt_zMcE%S2#Q~+AjxIP9Sy4mm}2+BQDt0e zp6R_oK}!OLDyK3~%z4q^l+liaeC`o!XnL|891NR( z2y!f3Q7?C6f;xz9bu4$~N46cd?zaqVOA_m@eM&8xuC#1Ye*V-WFulOx zWxj9*Ej}OHzcKKw(TQU35PVYC!YL7}n6jr_07L>vLcVX$d&s!lX0#8R#r%|!X!LOV zA)y*mqVCG)c32!oBnXwl>3(hush_p#9WoEJg0oefa2_$zE5}#A@Cd@ej8rd<{*G)E z#}=Gi5BoEl2t{%PmX{?8STnEuyy{&rGB-{Hy5G2_o@gJ*+>RlipR33zz2iPBUoURN z?T3F(cZi+q=(Ve`m*~(cpZDU;PWfY9TvPMs%WcI5+icWEW9px8SRK3UzGT_z`POr% zeLoG;Tkuopm+RH*Px|_KTwoOM<0VKPmQ_+wE2kO#TOzyS)5Gm| zFtAk~|D%zg>e9S0YZvJ&ZeB%_CNfD7_e1Gf^6x_B6>9IN|J!})`_tOxUl2~woBi8C zSSbzJtzx=ZT+-K|@17d-gk>HlMrT=<>tTN9NZDwqM$8Pj;13x+m>JwbXiAv=Y=JX< z&<-^dC-&1uGI|*w@NK`IEljjf`^StHIM6zt@+5z_r%Qv6guv5rqwr4EJmp}rk>&5XC1H{=oB2UYs;%rE+Nd_ok?z- zw@MxIP|&E2!bzebN1XPv3U)Nzh06U`4cmXew@p<$?c~Wmvn%pVzOY;a-q-dA-WHU1 z)jn&X@aJ#jt}O(EK)*(wqsb9W392r5KI#Qqf97HRP$Ki*TZGm_(Hjv;3Ai&iqBq&S zll(gOONqdPq3oIOp4w=B zo9KXb*eul|EV_QnrhiLH26${~OX6L>N<<`n1}1ZZv&z$7K#RQswH=jxor} zkw5-hI4J+srncZ1w?Sepg8Og|Gg;xv5$54A>~u&P;?00p2DFp1|Hh3Z2HVKS_8QeC zY}Q2uCJmMgWbq$qmlnu}4#Tfj^k)0`T3&k&!(zN1PKliud-OVUx9oo!GIL4)fKjSw z2FZeB9sC3SA*ZMNAV)l+RBX2y1%lXKQL?4((si&1L4HW|IVSlRQNOHNw)oaxuK~t! z1-96pE6izOoh-x2g-9d4o*Hh)^_1SMc+orDy)LEJpiLcIjq2P`&q+AjKZJDbxjynE zTFm|w+XI?6_lvENhdzrekPjE%$w=B!-+Cgk6yUyB7N5bj? z5}i_Rs5hi9TU^W)XOta<0x5&zqnDG-;hznp@2HN|i> z+akTAitvoUq;$&X$CKafz%*_5`+IL@4z{`a-jfn_Z#=y0U`glyV9B7_*ItFA6yLdAWO#M-1_a{=f{T$!&H7? z)6MfY?z{U{2bgpVZ|ZY_sr@B^Erd1bI- zS$;w+zlgN7fcBX!bDmY~nq+hrO`-t2$%#j*LVZ@#0Px$yXU6F-fYLrvP-aV7NyQ<6_rf zBB-ya_ZO3I`J;oiazZA2dUk zmRv80Iv%iIs8B}?8F+Y_V%xGYkCca+>u$i{mq+4Mqh2jx!LYA4iWt1v1hC1t7e@@v z^!k5HY*Ck74EQUCpNKl1+{gb+6B7DS9Lr{A7uAC_2Et`$F_)ZNVYBG(Gb}foG%y1t z{=3s*2ZgoAazwB3dcoFk%rwFmkwYPJ?M>&)j{;x&YnDgT&!BU|Zh$ftiA1W?%_sdF z6Wr&;XO?~8SZyQ;-|bZ%C^{WD(Nu7TOyK5CtXnV8^V&@D9VXj2R@TR|{Vr`a!@MKc z!pqBQYY6U)Mcs5@YOz#~;qruK^**7Ixu#u>Ky;fCFj9^Gcy8za5w)A8Rmvd`(fP*= zF^}x>Ecah;cwRPpK|+9uOyu!-)qUWuq=I@{BJ z1O*BO^3b*=J(6krXv}%Kc$w&_q)^K^apE`^qqz~|&{F3^R`h%iCV?;gAhzTwM3A{E zYwCx=exGe!lgcWXEXAf?!BRk?JQ9s(x4GMwOk~%&sI*#&Dcz-9%Xa}-wmB266np%o zof{KO(f`MnGeATl$-;@K$n@gFXha~b3bL&`2OqH3Gl3X}2mEnohgBts6Elr7(Q`GR zYFL4*c=gzva3cFU>j+{JogqI>7t7FOhvNNF%pNg;6JwYetD?&!r#`M_ZX`Xc;PL*% z%dF0hCb3sOA1+!^jP=6bS6PAvuNFX9u^d>wWD;@DreWS9^@tVPi`X)udrKJC(9+b(z+WZ+tTHrq{;t2=mz?< zSREUt0OjOGT$ocj6hd$_WDtY@uVkR8qcesRAW~PWSijMG`mzM3+b6=a#d+sVed?v^ zZc?tL=SL(>6%p&rX_C#tk|D1V#3t)aiYBUtG$ zyzrh4iQPF`$;983KEJEk2W!R0%i@)g)8=dp#WPRDwx@i_okaG&n+7X9d{vFYpUEF8 zos*6It2*&vkftHVup*2)yXg0LJI<(cbUUt^u9=f_>@FFOm6@yG|LS|)#WBgve|2no zl%Z`UkfQmFG~2n+X0%P|XZEsQ3=1P&N-C1Mt&?DVY@!aos54EC zSbE3($i-BLxu(1P0vQpjy>$k^wcr`LZha#4R8gQyET>-Yo%9@C1s&_}@DmgAq5H;H5v3pst%~68BmIvk z5_pfOW9KjqnUieg3TRJ!4o+Ij|D>|L$dg>~YY`6&^M)}%2vY1~-1$BS-wMsF0YhwO^kezQ}4A^2ZsK&zz-(M zA1&~T6j~vNrjUFb1ejD~^(TegW>{yNku>8B>b{{j9?q%z<*hhE@#QUNrub1}e&@tB zwZ2q8{$Co+_Q|^cF_w2mz-v!Vtp^mYdq%cn=$G6i0IqE(7 zb+fEEWdYg+1g8dhi!A){{J^ueO7@ci7$K6x8mlg-lb-Ot?C;waMT8XpdVayCNTo*7 zV{P@I11-L1NnOdQIIsi}VLA4)4335XIjk{_HHjwX1FoE66j@R**S)11W%jr1B;zMTOK(w(j?9&3riLmP?Md(aj z^3|3ChFYlM&Xh8Uu=i>ZSoFc_HzmN04GI%gQB$;jTn)YQfnTSCc90ktQ+b~5#K-&F zomvmNYji(Gg7wLmqirx=M=VJ!U%vc- zYaI&5na`;RyCTOb0ZtPa`bRGRMa*ujZ!m{q_=sP7RMD+>#Gad$;{~B2T5hcY=wjxU z6MuX+f> zU3kG!u843jf4yNw5SFO)!%1$83pik;G*`nzbcf8cOKgn8A2){mwO2D<6pj1ls}~V5 z{O!E2`+xY*2$hQPok*4MH*nt4?tec>W!-cFF0S{ugI^a|s*{rZw!6~amfuIx0}a}_ z-F2&w@kojQ@n5*&e`R20-MF+o#;9fGH^v~vmhldW{!i@`hJEZe#W7>SD%lV;Yi9e= z`9uV5KYdgd+pPL$M)qk4uIdnd&;q}O_EnFvd?)>YallK114E(qHEv@_97a!jU*GFl-fTh91 ze#RK|AsDY-6;+@$*VM7r5ZKa>3%sZ2V5cYF95vGz-}?6PIeDun`!TCiOSM7L+xz-& z`il*C+h=akH%$Yf%^~kHfpDEmAHJf+R9!J}#Q2Bv<3RSC|HVJ0?8@p*ACli>uLe4} zA-$=epqI=pP zc_jn&a{F&Q+u*>3n_uvhdEbS5JnB+FAkpFSj=Z;RzB21lpLSkA-y7T7cIN7id}H%O zeDX^__J)2$JB9nu^akC|p#sb9MYhJS`8vqfa$HRF!uJi^s+Q2|lGLMHjondU)AgBL z;zO8-exOMQwO%}Ky=VbV;1^f&lQqS3rRRK9!si~^;N{;f5x65i%w*y#_QLV6mQWZX zcerPQ!={4yzc3+7JWtwK~|vf{34c@H`?56(_Z!~HwiQ8YnvJAtlQua zxRwut1Ie6p;&gM%6>;{l+g$24_tKXwAToStj_3mn2(O z(&JMyC8VH+o>zPnsl=qzw;nj93DB32KbVF z#Me+w2`^QYTSZsGSkx9mn<`;M^rdLQMd_{ys?`f~Wp>iYn?cZ|ZLK>lr_fUab zG2&_XX4VV@$@t085q4rGA=42*Z5Ri{o?_B|NbDNXBS80Zl3oMZV)c>XS2cLnmGA_S znsv`)Fa(3K661NKUWHBAG)&2Taoa?OU65UcNty5?DSlgu*`a~~`AvEhbdCGOcy}H% z*e~`)s(CyCK9_BejXFBygpAK|0TF|Xf*`n_onXl4otr5nZ#J?Hb)gn%wYU>qZYg`)b0UNqF!wCI&>}u)U*^4f*=K~ z30SBT{Hz47CC!|ty>3ufr^IEwjCNSE+ZBv9XY#rHM5?4An74M$Pp;!-!}fI!bJg&H_E?)W9S01c5(4G#@~jv^hXodB^U2 z#HAc_$h4~3SD~D!88$gUIc7{`YHZFFZ@F(W66bVFG51IZyT;1^aI^eIISvg9tISH} zGV{?G&~74J9r|w4aXHG^W-(^ zIWvIAPxgv3<~x>qfCNSs3R|YJP=U)(T5Q1HUDtgYEcCN}T3$rAlumAEB=leEDf)Pxo|(-usoi@vgo5KQRPv)#CB~qiPHT+n3d$JMVVOkGbXx$dClo>a$ihBLs?qTvfXGIG58)_rp;{sg=f&5|syDO8PHYd`C9iq$hpgol7ziv(@opU$Apis<(%< z#){=2AVYP1oCg4Dtz3J*EgNi?S7VWK0hRq=Nsagpr|mS#B%4$IM9lrW?FycUWKXQC z_BEd5TB^X3uz{A69gdOa8`SY(PY7;jFkidV{m{$K&h_<&EGA*{xChT=jRdj zT4jPCcS!}?fu+x3Xf#~aC={z7Ke4E!xz2f=v;Q!L(&N#R;?~&WXYWr-oAo=ffNx4q z%J^_G3kTYP^l0$D&r{iqMY0}yCp9O2CI8B0S4fEVv~=GOUpr?$KmMkI-d=LSajf$j zAV1KKQ5*M3H1~4=61rseSeIQ_tjob&Ny}NP$;Nx}1NG&b!shE2yvLfs7N6qtdsCb1 zt;emmk*}`Rznq`&(HgdLny3$7)^a}{N`*eXzG^15`At-!bW8def?OX9?HoL2i778c zQKUOLzS=v>&vC9QLjA*lGd63pI7xD@EY? zd30uFBm6w-%utK3Ox`Y8D5>19{GJ^Wj-%vPM*qRbm)dIu&=0l-Nt|hw! zzbSRJ{pUT)RLQnUqHfV2#dt*k*IHG!Tm&H+hWBMh zc=j>2aYcpW*S&K}#GU6Fs+S`!&kt*=UUsD}E^l{T#EJ(O@iR9cZYkZ4F@|lRiB9rD zg?P5jT+{Apj0B7J+yk`Rqvwq6kuzf(QF2=K@=)sa6ijvK#kEx+A5p2TrNHog$6wp7 z(-+q$ zbZ7FGzaQSfW%3hs$d-t*)H@?u$i9Yw4)!?gz+wYquif}}sx9m=nVMyO2}Od-nWBcT zCPv%``F50d+Qco(xDn3$OL}`&;`hrVLE~}s@3<$<99iO3Na9om(O>_9HZ*w7N+!g= zCY8o|0$VTb*yhx~39%6V9omxL@!aw5)!BJMP5o>O-4j2$(&X7>Pe4=SaVXGh;cm^K zt7}mvhPpg>57leo8xbtTbKH_rPjcL+A7|NjUAFhuBX=vzjk=lgR73z(DZ^Ymxebr1cKc@i!33sOX1U>kW0T~FtD8Rk^}eN6XEJ*c1o#P9()ITeT0t2) zEn1GtRr66%6mmcrdfl_;GN2zflKfgGtG{UuZQj&K%wlbsA=|Z9m?k-*_HwGcboszJ z*Pc(1$`nqP!mF`aSvM0I7257(a0q{;J~xrNSL0=JWFxK!K0hht^#KOweZbKu*`v34 z=B+dOJ)t5CjohacWTtt2^GZta&3}U%Ouc$zZmnHeRgOBGVbTf&F@O!OJ() zei7TnwntQ5CBQzcw@RshuUp))tZAZu&hSsir1G-mw>G!_d1d~wiD9g+drQV~MRqRU z>*?-Q$#Sn#w_)`%D0~96Zt_`h`^fO%2pog^e{6jPR2|)tF7EE`kl^kFcMA|4f(3UE zBtYX5Ah<*D1b24{PH=bk;I6Ov@0vSzX5Lz?!|CeUrC(J;_wKzJu6b3{>fX!A~9^tB+nSaMG_ts3LH7g8$s z^Ax;@N@MHe1Fp8eyEOmW-`>=(mj8S3(+93@C309G z{9vV%w^99feFle5$M`Zo2j@8&-D3{P6p}u$(CrtkGA#3*Gpz7cS%13Hna;psX|j^h zlov2T7>oFgXo^N1f2^)gs_%2rU|{&iw{PT4#-c`1)Z5LOd%WIDZVfz-aoRUzueDm zz86^{2Y|MRM*#8rLuQo7(&^%^n9mWEPczixInzSIzH@@$%Eq5J7*MF?z$)ztFH;XlQzTL{t45WcUkEc1Fz@VJtN z&_B(M^k!ndS5oWfG5vC?M~kBMJi!Oe|09MSD_vE#H-a~bHk zbj$azk=Xxoymd+{p;b32*TtHdod2u0v!9l;A9`Zz0iQBeZ&HFyI~&m0s*u8?Oc{cK1SUCTU5<)8X#+YBdAvSN0^=4~un{aqUbz&(}x!QmeuS_7TJ!W?`_u zw%ae=s--02rI-gp8NUDqX^Ab~UZn3n#cMq3cPV`nHqde%E1;NrWq_sX;fa^k@u0y(*?=LaJN5*@FyJ zy<<$g`yl7@m@yE2ygg@pCs?z7u*3A?{)I;CIcxlu-(ezRmd74wx^VB~&AemXQPM*{ zyug{fK%T69^t!A^9~^R0o#a(>DdYzt&bfcOd?e#3QF_+5U=Z9)&9qLyc4@K2J8bC^ zS`ixPbGsq?GO{vzyp8cQx+#5E7{|rYVop_2AnIcDt}%3O_0o9k;sWs^fOL1+X`PSw z%GRUy!A{fb@#O{D4KpPv`|%5Q(xVRJq1FFAbzU)%C4XO{)X#KGKSzDZ`>23uD<)W4K3`%|`Ge*wiba?R0QLBW0E1HU zWZ3g=|8kussD9tRS@u-qG)YB|krWt0|K;#rBomzZUwf){zcvaXkBB@DtH8XbDANAu z@x=vM{0H!O#W{na7Cit=*JX&Uzq zTGLnIhUAQNvV#JNG;|XhRl@o$EE4pKU^#2>nNMQypt$tQU zAzteSF4V<+qR8AwL+AWs#B(ei5oW0{GDIGHT@?(6qXF?LvJaWfQmdMGt8EMpg+o>5 zbQ6c&E14>obA7=`%CSPcwL+kl^k+X|KsHSC#U>7afUQ_fVUjc^JeBDwKxp^K9{(OQ z;11_ZIMs{)^%aI&oXTt=6gJ||w7pU_w7a#ero5SdkuC6LnFLz7J5kB?DY{cGsybC! zs>DMO?Qgj{QTj-zii8p(sj|mQ-ZW%y!tf?Hi>}CA7^agz-@)*Dq#MCiJ87BdOX@ir zJXe$_)w0sZcfa&Q>bjNy@p5I}S(AK*`#QtJG2g;{kUpT0?}V-^Hc?7v*QAWS9sglw zEjX--!YA8-AQ)5_x;fTqEfQE5>U^pR&VK3}3qlR)M1KQMkah_p7_UIjF2Ik*vr@5& zc9Si{2BrfWOh>%Sm0wHRv*Z|*?YUn89;MOzB@TH%q73Es3=F{Qb?S#=u@bJL){B`z z*RZ(>!$~q6?a5K1>|iEtpNo+l9KAO^VDlG<57GFcZpPCO&|f zxW1~ocI$xui5rR{kLfr@`Syrj&E>tFFaSUW5!&bs$R^FyfzyI}%BUp0eO@N_{}`@# zpZ!f*rA)X1Zhir+30TMW!;8dBYi46S8;)Yem=61BM=R{_J$nBx$K3C%?%n`;QGWiB zfksbUa3*?-t;Zz`&7Y1xp9C(iuvE6rE|z&5m3c(8|M2aeI$(Sa9KMlB$cys zEms|_A&JCP|LyzMp}n6`tBO2ya^BwR<5gO_&y|LjnyZ;?A`S5b=0?U_^I;~*T>T{X z-b(j;yDl%Qa!X-_%qf<{LviZbu)FGaK$=JxUcAMXGxpNrgyCLISkwa0UfUsQ`}R1A-;hxs7-bcCxe(kj)8LlfZv72`QG>MR7CW|*VeWn?c+=c^*D6R6 z?rA9YtFd@GV<&!Q^e9UGqX=0wV}=9^B)24i-R1X0%eUrM)j#Pb#h6v=djgesEL^l| z@{&JH|1dRC;p$6j|2Tesfbtk>JK>~!v42bcqA<6;()&-YC( zCH&AgAibDajFFMEGtMNx_0c+RrBF}yF}fnCUW$XvlI3>Ke~jsSM^t~k)_s3g+pSF9 z@=5u<8+&Yvlc!h*w5r-kXMBA4SDz35xV zF0PNh7dRGd*ci#5)vWvl{O_vO$^y_4Onf2<1))px^V;gV)1bG;<+3a~aMA;m-;#ei zC=VbDAcd2a?wZ^&q$#LW%QjnU%9+dV<&f_7)kVeeW=t$}ECDJcyg6zdpV_kPLL-#p zeg~7-Sc!ns^o<*p1?Va@F+FzI7U&YC(41Th3`=-{isNkSJ`>^~Zt~LL!+5yieVKI% zLb1l)@!SJmRSrgvn?KF%kF7z=Us-{U)#k@=$kUYlz5?th0`i;OgSM9puUk@u!z?0- z4_=Dh61lBA`SB& zz;!g9z^&ob!M@81q@UI`7a*~LW6Syj!MD&mu*c= zqJh_b31Bq7p|92ZMw}X3@Q23o?HpabsVj~FEHxxHX1e|%GpTT;DnY*gC8;;x`dS>S zQ+$P`t^zQXk0=3qGiT55gcDJ*cdU?!TI-L8IFgRWN69`f;_{uL4rNIT=V8iHQ5E&A zv3z1;0$LxE%urZv!b1pV>87b`su0hX&ho^ROw-NaW>q%#JcGQwb|xRod+W}<<9m|2 znGfMbx}mhgoXF;cUbT7ZzvoTz&8g!I60nHzgi3)!nm!GMBn@#4R3w;gyRF3C%9iOF z0`kUfPcs-v{;WXQRb9GBk_vNAlD~<(Sv^#I8P@#ix%Qsv5B8pc^3?G0BT-g*x_AQ6 zGfYvr%ja-45n#H`=VC1s5PF3t-YLd1rv^oob5Un~kkp7zVvgc~=qQN7L-3vTBQOFQBlN`8S_7VXlwhQt%mDmtB8^HvUMWSMf6H za?Kl2%i%xFK|Lw$%);FJpCV9ALinfnF6FI){Jr;PD z5)+gr(dfrGkm!wflvYm0>lG9T;>f~O5R*!vm2skZi{icGig7VFkm90VX|~pugC1&P zM)c^5_0!BIWzVt1xh5U1#_@$M$1FWvIiW96sCXUKJN|2DmPUi<_d9Mlp)9P1@G8cI zA{Yac`}{1K&Zxmm;UU89zK{ciM&7O6}KBV$IU~W`lG44E9vrmL3C)8PZC3z!;W%wXvEh zv92rD!I(hTU{;gC-n&3w9A2i_bQpxa6fUVsR}K?%xF(u*bsMDJOy9UQZn|T@2QvI+$+j_7^^>>v^)d0cB ztdCmnclC!RIc65i=WJ?hKI>siX2FZBU0NTl4J^TT9Hs%2*_EZtzV2!?#}2e5^$_2g zErsh^$IyV5>D>nExvWN_DAPrfpX5oF7R__);WkmM!}DAsFb&KX#L?@H%tzd${X5NC zwoE(`79VbNxX%8JR_B#cx~ySr^e#=|)=-B~l=DxkZ;xXh$M*Kqr+1gUQLNFjIKLhFxQLZ}GwRUS^B(&e z9a%ERSh+s^vy85GVRtr69@XE$)3tE2lU!ybtl!Z|oeUMsot zlOuk!zYz9w+I}&cM|@OVO=BVTNFPKlX%mt*H)ml?@cKDglW36r9gFTu=8^>wlcR(> zaKZQDm=b_CMo3Y9HR-zcsX=a=0~Nfu6*mztx}bd~D{*&R*+>QzW{kG@ct>J1U6Q7TZYs^29wGeX)062CiFo zB@A1B{+PYwt-o#&)w>jX-||i%lVVpY74W7at3WuLC{F2L`3_Xq=m@~a-)(&Bm&sH? zzSO{0i#kC<^_+~cKgF`q!|fi_B2(-xE8>o}uqzG2UcO2{$&>zw&eCFPDhZQr$&Ee# zZu<Kef$R?~Te<29XXx$o2FWW+Ulm2kso>E!Y4~acJ2Z=h(f&-m&+-Sw8_y;kOv4U=rjrE zq#5tuRWv;n9Sny>u_=zc*$rOtM*@rt;dzrr&+T0P8}P5Xr%Jjcqd< zq$lNV%`#7M`%<}Wn~2+PMOylE-b8o+TO(% zh`jQH597kLbQL}{%$~G}BnXJn;$55XPb32=#@-mMwMrYKv8sP8Y#~oe3QxGkV|8Pp z@qRFIRag0gUz~vO@wpEzCEy(2oLhXzYgk7uCX%!LiUUQZ!P> zG>D-l>>wrf3wx$W-*JGD^lpBLjK_6@Z(&hM1fRWf>U^yPwdWn1A^zh-J>1LCioP=o z{e3yB2ynMO@HQ#9 z+T@QXD};tm-CrbaWv^rTS4Ol$*5fCsg}gzhePpp??b%_RGTf*dZ1bWN%8rPQSRA4w zvF@Cyjo1Cev0g<`ovk4vZrBfy_^-A}s$+kI@7u;2WYH`BRB;gO%&7RYg}z~7nSmM~ z_35!nxYtmf{V(zSM@4P&R-L7u@Y2jLrzQRgCun4DJ=;zMF#8kh=X@KKk-op*zbgW1 z%`!?2-Oyo+5~bWosgqZ^W#BsfxV_YVjDr)M9yEmm$J6ZnQB7U7EhYC_jOE+CXbTW3+nMD=vv2M$YjI3va*J1g?q7-X$_ogevdZ-Q)51hQh9q7Jp+p2Vu`rp@LAiZ&rhgAIGCEDD5Fop?(%XZy z*7`V^t*p{0;|WcIn$_@8`ccU&yN=Bt8ZdSNE_yb0q zm<7ZD^YD*Q(T_B3a%sjwQ;}Ac*f9`ppPb?}yI~5#TQV)ERCpUn-mGI~*^6Ii{ucLb zqW>z0DHdfsFlJ5#X;;l${gYZ;uLfySEz3^2?ZR&%}|6sNw;ti_x>d8snh|PYXk+LG9nb#x&*PG6f&0Xq$4?n9hSzm?un90+BgV z!}>Skv_+*QKC=dgA#kM1frpM_(h{6ze-vR3OtLiT*8L-b%^8$*(Lh70YD9Ob`Yq`M zBcwqqc|-XA(Flk|<$x0H#fUOxMfFfv=;)|3v+v}5u$W~ne^P|K7l%argF|zcBHJ&G94N5j?pFDfc33W6YJr}h^ytjs_tEFz-hnpgk!(%+Oxh)ZkRn?1}6&MzJ~q5 z?#+8lMAXudlv)y5OUrjNDG47i3&MY~slozxD5Wwf9 z1oBWa`pS~gqa9YaW>i$1w*BkaZZV^_4Aq{rAzs1hdv8$TQ@ukQ_);RB`YrI#EjdU7 z*eN8dGPp?4?oc97K_Ivx6J>)wWX@wH%60qs2}n+q=xs!gvTdZG;E7F!>ka3XuSNgq zkQPiy5Ccf5WY^XL@Ir{xO&SN*1d%goo+ubI`2$2FhuqT{CS-5?1UqH zrktm5mFUb!CI~&${~2~6yUvOE_AsXF&A7i8up@MkLJ;UhcQGC(M;KvB;g3T`2g2hw z!E5PlaqORaZgG07g7J>>+Mx;+!2~U2&l}J$lM#l72fbX68SQ}F1$pr|MR{X<>jvJ_ z=?hg6!o`_0P?Z-(cm0)w88mlv15?SVb}Om3#reBFEwEiiSi(1i12j_#Fb@UQ)%%u$ zIn%>%jk5&h!?vXbLY;%FQd-cNu!b54ri@(mTZFE#S@8*-6Xx(Xr^p7&rd$fYn@Hj1 zJfTkU4Cu&!L9R;S?O&_5&MFp51N|?DN7&|c&cRUWnx4whP-JA6 zMt}{;jWjqe&Ik|_keHj-Y4&ps_PFo_sUMZ&2J|m$Sjm*eN|r?hF36tR!Vo4>6rU8y zxT;cQ>nm}a}H|k=n>NqTMmB&S&PtQJ}X|R2|_C1XWnatqzR=A!SYj3kt-TRNi3_Mn@Yn; zEFf=mD#DohC1lP(edNTtEs16-t{Kc*M(8)^n6sLzP$B2$q$&0r z>7&Hxu<}u)tjmoYiLppHv&E$>`I-ig-Nd<5Q)C!NCxciUGCEyF%MUv9dh{xq1I}jIBtn~SP-P^A11wBZ!c0T^AIBRJ&Ix~H zp>ksC%!i@V*|e3E97@1t5=45zbtk>Twzqjek!8U<)CfcPOyryph4u9cSXvnuOih(3 z#mI?_jaguWx$+9;0FAgQBD47tJ@Ymxo&Y7Mx-7JP6rKdIJlG}`atC6er@*yI9OED-RjwN|W;Dw=xf08RGyL`Xokmd zbujcDQ?MExHV5V%%Kh9xpd#poa9kT8DG(qKHzPuo))R^&tmlJhhOPFB)=?@fgVZq5 z`9K`uao9VQ1RdbDpAyo0VKMhx6fpe(J5P1;xI{)67`P=e_~DD0WW0 zh;T2u;$Vwnrq7x`?{3?BTi*Aeakv%RLx)n3j zR3s%vuHWJo`wePH$@{)cEDI{1l@ z#oQMhTY5b?M*#idHGw)#{lNFe^!aVkg7Ushkr%nd=a-A7eDisC7$$tz$1(Ogz!9s# zijC`T(y;Au=f=>K>SK}K=g)Q`@HlN6^oIc%db^sy%SDpm)1d=!@wxp0I^y=}FbR0! z?po)Yf~ABY!$sLKTQBW?)A_@D!|=VxfJG+Lam|m5_sVV;tiM+2Z-8Cu>syB# z;LY!c*3Bm?tDQ^1{g^AomWwX{_fa7F?O*Ea^sjwCtk;yijSPX?Ohe#hRYuW<*f+wZ z${yj*%U}&~7xMb^C}Wb!btm#I3HvK!D)71e<$MS~;@Q+Qc(|}MH?SuKtNr=0N0K@h ziEBNgy%f1kRW2lLkA)6=Jqz|Hqx#HISrw}xL0=S0a#fPjZ4*UBNq!BHpZqxE!llh# zc-60UheH;K6NM1sd1k`mOI7Mz4H5e0^*=v&Bf*6^q|c|uR{Q8QHPoJ_h&(q#pMgm& zodKBe)!HDp#`w2~5A6moj;-Yyn#Y7wk8XN;G{jF!sqG0&=Qm}YL^%(mRbRW}UHK|u z_se~5Slb^QUUKP9XKyDNpFJM$&bZs^-g>=nU;jq27v{!IpgCTw;!6T61kYH7GYo&wcZ| zyn)`jjE&1jM8c(d591{6kDoC0MYT}Rw%tBqRyCJ=&{gKe^WRMu^vZBkYIX(JDk-cq zN+(7R(mHUCjNB<9=f$%{=fyj}&!>22t*>%e^cs#SZMKofpsutlb!t!RJ>Vp_QiZnm zM7F5!^N;G%=z2{|kt1QR&w6J>fY&_x<5Qo=M%1G%%!9t*M9+8$DZi!L7*(wsy}YB%23|fy#IcZ z@bESIWDjw`7VS%Q%olO!sB2)bY+0^<-c@Gyq=d3YA$B{BmdbMQ-k!1)HTx*|)G61r zd)1dZh_$X8mf15Y(Z16;Xwaun<9a*1E4*Y2x%P+@e>9m%!L3a#(w|Czr{+Lr4|!4I zcCo2-p!|btQ9SG)wXzABNL1RVJln3~cMe1jGxbFCA0z;B)NF=Ap95f)nV>Ow*A~%C zFFB!Av&{@D$X*&FB1ED!c$@Aa#wSHTEsLpiZ)L#sm5bFkcX4sODiThq-;b=tvS0^xa~Qdo zm{m7&I6S+Zk+mW3-YOoL{}X6&lh-197aRUA-Qx|b=F#Ge#O;25oR08l97_S65I+{7 zwSaO&&OZKp=vrOlbc_8F`hIcAj^fA+{CRkK_b0`dpv>8BRTPZ!)4yXl^UGOhHEkm$ z6Fu>aHT^Ipi&4#me6BqZJmfO_7%UIsk4}~&2Dw=XiO|be)R#fPFr~-4=#!EaL@LVvb31LZf0ppmcP%J&%t#(ADulUZ_4%iEjzy#AuZv4 z$w1xLo0*n7xc?^)V2!!X?x4xEH4$_O^I1{}LytFz<#9dobqP@CZ_U1>oe<8Rqt&t7 zV;)B*ZaQw_=t-O)6macm6e~(+lvqrXeR!*9*s4>)aT&Z9f_kOU=s{?~Z?`uGxeHh5 z{6%74q2%2cNV$a%JeP@keW*Pi&XtwP1*oKgYfBUw$_{V6)xv67tBlmX!&6Cs`sY;S ztro_zp+`{Fw)F`Y+9Vei2{Z+)B^*M*Q}$BbO`c_!h54NfwJ@_r8c6FOttpe1Wtk-g zLh|rjWtyP23NFD8?8FmN9 zjDIvG=mzIR$uc|dNOW1YD=@>jSUWj-2Q}jKK1@yM&tOSM`x%9Ov?i4AWw=|P%84K$ z2JF$2T+DX(-q(7Gxv$_nRb-b2eF**zio^ivd;idbL3%;g;h@ae?AK_3N1J}?_bXY)#l*jn2Bf9ck5^I`1v#=w9&@y`aMU8oP? z+k)AMA{s0$NXOMJ`=Ah@VeORNS%lNoJSEOzgD9aaS|LywvE9W2+?>^P!F@*+;gw35 zOye6-W!6$Bc0lqOleOlb@2@=D?JaQrLfv;)xE*G_rPLWkI8geN!`bq&ksVAfbx333 zcBuIl^DCX1j+me4d5Hkb*%lvb?W0O$3;nGabz!aPE0l;qC`FR&<|Psr#qh$4nA7k+ z4fbcB?E;|uvIvr$+(i7;n0grSM7_m$R$-emIjZKqgfb<208i4Hus7G|Ka+hb#~1qn zs3gQb_TLzO@j9i4+vi1PukB94|A%7yWm$5G&e31!W?N&oE}zu-wWQHp#v?D;aUQ+y zjsC-u9OC^?Z*T8_%TDRqegT}h1 z$Jr~{MoN*hRpz6T3cNylBq6)I#TBqIv0=LR4P!R@cR}ei z_wZcOEQZ>GryOg1%b@>Cz^5sWc(30DQiQLiK?0Tr*cFzEYEh)f*}*RJ+7kXN{E@F+ zhM?B+pLQUd0QL#CS5A!o&6@Njh>=!kDg$qf@Kv`ov&1+$(S0^GnOfo3)y*%FpE%6l zt*`R}w-2k&$C-Q4!)Y=^86;*k2I}o60$Li659Rel!Hl7hXv}?`sSlKC&Mo>Kqat=m z6(NiwkfZgdA&e)GkT&&eVT_}Ykh4h@;f%yknX^fM!Wr!$C+meG7=OYd8Fp?3?d-GB zKi}3L#V{sAL0TsT#WT92lv|9JHWZ7_R`a~{)x#$+c0fXrzpo!iWNd>%*XlyH3iRen z=UeX?M}4%aPfTHqhlY$wV$5KShwQ8G$Y6wlh5S(8lfwuD1v!&6m7q0Cn{ z?T2MQo=pIIajwrrNc+p*ljksZ;U4d1$K!ewL;mnVu02TmI^wOczreIi`~5G6m%B`G z&1#Xhw#V(E^5=S`>qA3>=S|X8VU(3;2ThjQ6blXPz~pQ8qj4;@}+8C(%q969}!x=LQMb5oZZ zsb5H}kK5&r_O9d@;qAG@ulw{6<|P9cAudHf>S zqs8W_s+|B-6Qe`Rs%*`Q>a$#0!e6a=`xTg%HX;JX0Oj}O?~n9(J}NEP z>i?~KST*jR9Zh<_=gH-H=$1W$k8GydgIAMyEy-TE^cNr>VHJs=?rh$ig;(WC9ooG% z`wDR-7Alr{ec1kj@AWcO_^-{n)PFMWCE3TLq5*$DDn(H@#g0YWA#NPC!W~!9obgX8cE&QcL)cT*p0&W*?Il9odLkbcsolsivF{8}UZxdz#z8u) zzUU0GdWdmbp18ck2IVGUP{>SDC=)#ek-1?i41r4rpAFpyk+-e6=tD-h(X%bHBfsh5 zh zYou}5x>{_`5Y`tKFXN2Z>306*9km_Y>G}z?*t-AuQfJ36hx*JuC3JgEVLh=&!ZVeq zG`=c`P~>^P53GsN3_@wM@bReJ=ks>>`%2UMq>=~cBb29yR6FH9AFHIw^V}qN7JzBj znK)Ht8(gfHUcW*pc<9sJf{$T2I@sVJ(Amm#?`sMTPVNbGR{XcGS!<&NdKca&@_)Mf z{I}TtVTGkWMx%|{yBf{zNWHv#?hEtNs_DS2;g{v2&7!YuKlgH*nXdB>9ThVFpv|v5 zW3@$Nf5q?aN^19picuu5LecnDrU1%#SJTx@==JspSy6OCD{)`gW!mN`z zqD^>Fy!T#_75@?ChYvZ~v0MW!#2g6`y|iW#Ik4k=2q|%#$H6v7GbwoHGNdLL%0+u! zSrTU!)zcY^IQEgrahyIE!$0TjtLwS%mA))G807Mf>SI0C#EDDW@Z@9~?3)6Nb~b@; z=Z5;MwBJ6dEpJpjaxIjP@8vhiYF8|2U2Q#y&GzqfN(J}tC`KXitJQ@vQ4*o3nnZ5E z0zv(iO(o^+<;U;l@`3^oR9$i&no>(t+vaUwN+RxEQ!;xcJ=+vk7vC?-JjU;+*wpnt>sImlmp@48?`Q_1mwq`tUDdp<;-C{ST-B>#yAvhYQ9J zU#d)luWn%p_#gadAz+zDQ=W&g>;W?VP&Pf@k~Mrqx{ueMFO6`wSJl7jrst z8Jj=%6{ifbTD1;>*Zjg0D5NBic_TdUT?y@2%UF999dO1Z&wWslf`Y*!)@~? z%KoF_>4N#>+zqM6Dv+c?<7r%j1}#O!#JTP|v}XH-ciyBS?Ya1OnT0jpQ# z914v;U+NO;Je)nmlD}|u1YhB+>wEa6vkv(77 zJKjZ(^ljb9@+5~0e*A(mrB(04VZi7x;;>?i<@53vpH^cR*=0BCx?Jfg&CJ|#KYm8x*wiAh4zP)-#&@h7DtM?YWI{a3x6#iG+~^#r6oHK_kLC* ze^%{*JJ=6-bPWI^SW3|;KVFJWd8F-laxkrxjo#3;^g6lGDJpQB-a z8NORCdET>KxhrAP{V>i&`is~|ViNsHM%MLEwHcdFNQ(Q4d-4^OhbIGK**FjHP?69_%O;`y9`#-EyXKY2yGdZyBg+et5RrK)BGLsEa(eXTAUbIFoG z%Ct^a^^HOS+)2$_A%sUPc^BphGk9A2A~?8r4;&bO-xK0yOm03#C@-#Q@E;%fv)8i!(Hv*`zZAJDM^$qQIDCyFjGPFiDJ3??S)&ec3jwcK zQJf2raFbi-xupZ>Ajg5;WST{MA-@)&2T;z87VM>yu_$d%Gw@f)s_ljdJX5R)u*c) z;Pz2O1@LUstGCzvacNm&6OMG~?8*0OK9$F3(>nT1nwXAmaveZU^|j}tgh#;p$3qhfR#h*-zm^r$ z!w|s}QfuvZBBugMol4yt&tPhQ|C&e~B>z1?J|JklO8P71Lb78*fjnk#j>%d|>rSA_ z;@U2GwJ7xBsl{T?9g6>OymZeao*enyUNe@yKWNYN(!8 z>(Y>e*!G#=#t+5(^juPJ&anlu)>2pLIcOa#>u?&1V0u<@4k~ZB#5zl*1GUfY`bL4r zle+CMNiP+QQ55^TjHG@3cioInHha4^{P=HW;lGt5`xJE8DA!)ynF%a@5$-apZAI;m{W%M14yH7yk=n%k@6xYP43)MbSf6~O52?+p&!1-sW z{>MKw0~XnR0b=(wicfh{`N5^_2~m6z3%kE~U^U*VFDUWiPaU53NDM|A7F|6`JVOyY zCsZO|KhO56rJWI@vCPt)OzpmiKLiKe7oSnOQ1-l$nq)d>{N*E&d#_=@01WAs$=xXY z`N-vlYyht3v$(ClU)7>1YrrDeh0~eGJUygdA=FU#QnrY_&yO2dwupCyTsXseKmO3O zWqH4T$UT_(0>2={nKXWift{q%%6I^9^Zt+hMm~OYV5*Pto-H49fvCTGg49QlHF?wD zc2s8EA?oiP-K%NfTJ3mk20Z^T;Z2i5Yc|h|fg+qE7)-FX?l0OfCXH39x@zqLRxKY5 zoxjM@_pKejH$3ra{h)BUJ^7SG_5A+v@r%VKRy8mCl0|((yelwxqxwtA#*8U&hGj*k zc;iU~Xnfc|CjWf-l>8Sf;T!#mjot8u8`?lzaNDn!=ewI`2lA_&6>GfV*6k~eEvAMM#v4h>NBgrHO9@?DB2Q@MRVTkIZncGxO+T}I-*1_d z#52rJ{+6SQf$|8PJU=FltghmIPI02lr`@$QInp-;N0X#AFa{04|O4+0Sz7a`1+HgqCg609NBZ+d`;*0N(Fp7hIdjI@8gPM_n_ zEn=eiuk97*d#^3J{1z8~=?+77GWd7Dq^#~A zRG>4(dy<(7JJkPrarq+zE`Cci zV@*&kOAk$9hi=qPB7=YJitZcmJB<@{M^C3ddM{SRnvuPVfE)uGFF^xyLC4ZsPBdpt zKqDmsb%94R@^{>-;A=Ks>r5KlWMVrcD1D(}AW{rD3|d2!mY=!+COOS0G7HisZb0n- zp#o1wj0tvz?zGl72*L&%K~E*Df+wI7wm~vEO>7s~ie6&ZMInfcrZ7c=mYyVo12y3VC;mFz$xyB9nEm=^~lbB2_9Uv>0Sxp|43p?fr zlzxY$><86;61a$;*k)OuaM@ColaY}eA#?Y)0$xo}`Xm_x<|$2V(;u#+XG`3X&@1>7 zJHrzO4m+<5C zz%jou2tH~vGz=n+`p=;EQqMf%jQ(TM?`q=tMJ@Zu%vv{8V0UtGVLo(N^poj?BJB-p zJ2t#(tDI2?gAO!j;?r02tHdMmiNHe^moTpo-+&;?hMI^2V@4MzzEMHJwHXb7$_~eX z$nWDOVwU{_sqOzLZ~pvT@7;+gOl;BWrp_>Z?Q6<@ zL}S6VB1&IQB5O1ZiVhU`eEjuKU-najq>Qoqk^9gjliweKFUi#8Nl1 zmv%@1KjHRZYCz%AM=)=}U%f9hxYZD?(%K`SrmR`yux`Im-xX8Z1egS-2w~E_VJrH3 z3eI1U`jAXUoWDBP)VM1&sNcu}3>DM9ov;B3rVxeT zu(Mc=@)Cj=g+&z76;4IUSgO}=BprSo(GoI)9~~|U^Z+6N8L-UW{R=5X^UCwv666UO zvHYW$Eaovrh=Cp0vMy#Js`&l21eEb+oX7dI#G@{P`Zn2kcW6rbjpUml&~;U^?68$f zVC(2G8q{TTTJd%IiOFoGZ6ZNfl@h|(!{TbEiLHSW{!lo+DaeCWvI}Zi?=-hOFrvYQ z#-#xC7c$neuxg`uh31ACQM|#TD0ah1bY_P%v`m?iWvCgY)ixG`yD%w`%{4;jkWi3+ z_8k&M)72ihqTm!=MfB_r7-5r(&;`pax&5D`F?l+9u=9vw;F${Tp_InI#_WQ}h8c__ zTTMl5xERM@4J5S{hzw6t1=hcSxnJYnxmpxlMmA>4D>8LOwWH5!mJxbngF1A{gZxtA zQ;bh>0u%Jnd2*#JK(LNr80LaalDK0H3P;o;)By+XFBv%Hh5&@-9tw-zD~A_M2@UST zV36lG41qDizpz+XGGH#fMqaNAex

    Ch9y4of=Q#gK?+dvflceRX0ab=Ud^|+IMF9ZPpKs|8%c;X1m=1=O>-p z`uk6s5e<>Gh#tl)P}|=#7T0Ih(&O@x*OeYmNxPK1wAlqSY_|Qy{PaG*yPEgJ_uFZz zBZb-{4=URcvagXCT?{ch_@KyO@6Y+T#@Jr}y)> z<|BWas>w!?wrwY)D!xn*1K`MJ{ZWjda1Q&tG_f{va>w^J18VTI>!nxK?T{bPi{^Xh zeiJ(}mYKyMzo;-HlIMU{;EhWIeV;rTNUVTH@TuWHzoZo@EZT2r3=0h**YCuMVZhR1 z#;s<+VkIx+KYLPkEG%l!Kw%GTXP?FzL&$k!<B(n{2fTfmcIPB!SnnP3TJ0WK^y=g4ZZ$ledP%8?dVf=mAOI7@U3Z?b-imVBE4g zyl^3tYtLB`$a(=)P+>X}HRlCkB8IJ#1N=IYHQG`b!UrvMmEk&u(d%;sG%$8F{gu>x zwyq3P0ow5%7`veI%27lp!617J@vdaOcH=DC5;f~mp_zsd?XpzosCP>z;SyFLUClv7EH33)_loK&nI{i2f0$k47P z)_L3bJ}Op%;@F@3P1ajQCGv-PpFfFnC(YDLL-Kb<@3W&QR{rFX30bcVOW^~?E5^i?y05J-bB|#XwBlbS^Yz)?-w*(;CPJxX#xi{dby_({D>ZpLhabYY+jrO9Ipd%NVCa7 zP?0ZCD%q2b@~S8oZ5NylL#zXCLsaJYK^%#W4nsWH)Q*52W(GnX$=})n!1%JqQIMC& z-p363zOJCH`Jsnm6fbOhqx4`eTC%##-M-!+iXwcJvbPidofQ;l#8Zpkv+haMg zp^N4q=7TENVD(1eRnQm~YVZN&RyS4$;AFkl!8^nnJ*zz33Z7t@wX2f4k~JAbEur8J zVpTRk=FV*>L~H&q_tBSkfJ}up&n1DkZwcc9j_T(0V5uYy5ggQD&-sWz%7^d*UTqH6K zH4S#^C@pP8P{l!PfF+KdnuEkh>^}vK?$M@<`jh_Sh%4Kv7&zGz38uRg;z>oC&<22p zSD0?if%GhjzI9X^gmx(At@2n;NChl|^yo@Ba8m-U9r1@=VBj5ik0_}Cb8wp}*{B3C znc*%Zh(dlR7G%a+`=E$2HYtRASO=ni#AvG)?+K>j>`2((^(#yZLfv3U;@?vb(~iL& zX)`FZP&e=my;vCoKuDo|XOCkCP;(e3I#I$Lf(LNKmhD6;o>ALRWK8>{Qo*?NXRR($?=$=4vK>e8Mf+%G*5r!3dYORMA@HIm9 zo+lM3P#gsSXC;&gHfVYw!(?`7deWT=NN}L9PFd8I4}eTrA*lhO17MIt+=iGr>FqDF zXR#A`MFZ5-dY&rKu%09&flYA?>1fEQv){-q2|MOw%#ZWH*t>6RMI&wwXve8}|^?S^+!xvp12!C3&PPjeC2fDIGC^vMnb74>o%u z7ohT*Xi>!fngi&j6Cj9s?Z|;Sj2>n!vYE9b-nwj+Z6W5hg#`rHok%u>I1ULc34xZ_ zp86v~VBVF7WK>iU<)V%z$sO7##R|yw4g9$3B(X>EA-$Xv4v%%xCNP2FvD9Ox1{Bc* z&?oEFhLNC{?lJ5?OdJX4cd+~h*1G+fFG4T2b2S0hggTpkVXHrYY0Di=FpoUaR0JgY zjvi*}@hZ}lOG042>`(>czdy31nMV!d=H0?EYI{@hII9AL0+%bG8m}nHQJ~<3=A?jz zCjPTF7{OyGT4gf>c8a)F1DMme|GFlZbJ8Ry1lc{)+vp%!=`>hP%Uk0FHUd30Y(7ySM$*bIcM(sFS;crNiMX={o74^I9tB z(ro<>Uf%c9_MEQwFYol5y~R^|{o3c%G!Fi-Ro?VEk0ez+qQ3YNhuL#eobFG%{lK?(Uo0qfDypfN9CdK z{dLNXZ@Rf%-ic?@$I{x=KIxB(=mX*`(^xe9kayMRuJ)+n~n@&I`krHwF@wCPzDXU zb1%PoZVbT{xTG-BZpZKp*sWdD0oF)8eIB?cRjWGB*=oe9*A`tqhH#e`-pqDNr^#yJ zN#{_;v~D<0ufCH~XsDZS^Xx=efk3|Ksi)P|d*K!M*Lv!~4G6 zL3h8u**;zRvbMWS&ig+9_KRjYi?{pp!9Lde>nNxEggTQVCN-l8|NCYX_wI4qwY16I z<~}v3$cuNn8)q^E@_xQnyD8s_bb*z)u|!A+}dXd3pBtd8*~*ar(FJ#=YF z)a01&dl#7&!E}gkqx6g?n63`U&ByqwXXE&D+A2O-+T%HYW}?F8|1L-3dFUEI0ONMJ z?00y{&*PP{oLIrnrPNz0*tr1K0yzA5<^+l4P`D@g;iVcIbvcQo`%8CW^|RSlZQaNJI`Bl0z}P%rZ-Kr1>JOcxhe zVPf~#!?$)SpDCV`-gcN6gx}R5trssD^jbqj@SAu`+uV`kCWzK5imxZ=T7z__1kxsL zbO#d7-<{U#G!^M~iz}kv|G6fViJd8*RgTd-F&bAZsMlXS9fs$IIJKeaFDhabvy6lz z1i}#hu$&71uY^?PBPqEhz%O{>DREj;QES>e3p0zn7y*htL=b*F_}}&>P;8l&IYY^Z zlr=NK9&o8OcME^uwp|&C^F=x383Xv(EzaO6uue*~JNAT1Q-XA){0%c1EZchivi+C` zyWSDRDUNoNaQkV?qPvq-45Pz*Y`A2p$w)cy&srAKqWlz8EGn0B20*0s+iKvb)|3;r zFr9u!Z5~|br78j$nQqMUt-GMJs=$#P{!0TsSPLZZVJoDce2ZHqNve%+3-v}BtSN7+ z1;rlhdau(p+VHIf?>YpmdEoumk#Q}1{dk(ND;I@=7$0;WI1hFn4?omtW!U? zFv^3+l&Oa~CAcGgRl&3Iyc5TKhyuNdS0HUBObJd21Hlu5@5+24%YF&;j;^%b=ua}eK z41@BsvTP5YL)0D|VPr*&|8Yi&cuUK858&MbC>+rnZF|rsB_^B;B;XZii_&%a&Dofh z7cr`J_iFd+OT7tmc&hWJ5tihh!>QtG9c48a^&Dgu$w28+EzMlvF5nWH_Dv`4S7aD( zO3_=>xBqaL@k+pe-q+}LgY|R2MRWGMO37Wc-osi$mP5E~Km-R8&PnfDt#6i;bgP$-qriF%S$C6&@bHHb7OX$O(ZoE<6S4aTOjC zCZZ;sUwIXdl6}Ls#5lHmLU6p2+0mQ|>Bg=xaynV8C?azYu*XOX+>~_Nna|LO%f;gQ zc~Ntx*tHRR>=u$*b~GHxKIhmPSHN)Y>6u|s*xR+Wf|s8c9Zw@xj|*<$+BygW5L5Lf z!RDW~&F6Cc^21X-rNu~8W$LUU)~Aef!7uoyOg(Rk>Z;pzWYwMuuW6k@-DnIMxKTBx z6k1){5X0^%r&38ytRflddwXq7JE<4zXk$E11b&f?W@-&Q4<$2MsHaJJd3eI3&AR+7 z({7buBB@9!P?3l>=nfGns9ewvV8z)e;AF|g5~7hbN1#^+GnVURcb)T0O}6#3=(LW| ze5tvWo}cghhgPgAZnv1RCFYLkbM=|Y_x{)<`vzgF zJg#e#5o}WK2zPKiS*MGDeqrA@w6fq?w76y-U-=-~BX z^exiJ>V*8t;`w2P&CnXq48pLSMdne+q6^D;0-A@nu$%6YU0$Xi7hYQ8tRaCIuti?I zXz_Q-Azn_HMr<{TcyZizs1$OFIB9+~EkrAhHq@xC^srHBOjpOcwn*zNP8m;cVgH|} zi|SU#R9fLxQNDXEZ#z~a;D#Xq|6>`aaRM%1ZCn@rHFpmm=$*?-P`qIHAl+>tt+?ZUgDpK-T=;4;Ux(*?e@RhmitOVd{? zfoUuD2D&kg*0t2S-zh;!XRz~`Q#Qw|Yrr}CYgM-Osc>X`+NLc4FvU!>QIY&Qcc)-C zMA0+HR8YaxMjDJT@Fy$6H1;urBAC*#h@yV{XF_QoJB(pv<7Dr40`59Hxb!=)@;bdq z%&2SBh;jS&Q+(hY4a+jA`Z`K0JrPGcDKE~AiY4v4DdygfwP)jhKlw*$D^bG27Jmvm`HyxsPo)pszQz z(dU$O3iJ0wO4}yoq+!YoV@_~zC_%t;@IAbLri+I6_-xiYASYDw=i>c2^$yc{kJwN`2QBm9n6dU0tDn!{^48 z3#o;%C2|VTLbXv}BhjOz&Z6-Pmb+Txlw>BXM!4tJfxrV zt40yeOGWb^%K&r5Zn+LZvJy-jG+i2=U;%h|k)IYyb?gK~T&Gkyd3qoC+9-7_X5z@Q z4Q;P@f+*9XZCTgBUIde;Ky~RP{BJK8#v)UvRa!esC(i?38@o}Y<;mLWDlpm(T1ce( ze)n$Q@Ba0iYkoMMD+efBF5pzlPIf4rC9)+;6qmHHLW9L@Ppb3C728DqU<~-$>T&+- zgeARsGm4|du1?5OVDC9kn|n>@42B_eB!JY=W3fd(#(>yr(Yt$yh?TB*C=pg`-{<9r z(*@UGYdWOJ0rf5#=2yit>F556O>SIsFNW6EHX!FSxI7le=uTD_KFl$_LF+%mI0*PC|AN~Yr(C>*%%xtIW07JKyN)<4_<(;>B_Os#Dh5 z+Ww`O*B-yTH}>%B!5#TJs9l#lxBujx%9NB}PXYf%&H2fFm?P*R7Q6oP@cHfKmrfnXO{OVl{$ zwGhut;wpyY3!Vkd4bFE}VbJ>z%jT9Y25Sxv0>{>(xi>Ir{|9@Qx4FoFWpL*dK7O;z zTLU~G^5gC3C>cH83TvgQW@PSIW!ZVGgnOoMu<#oVtu4Wn4ngr)HgD33VXpFGVqMp~ z7Dg{H)2~i)PZ5PlkRTujpoK}Ql5IB?W3AeH3yNVjUaqo`kt>1!i89UTx#c>N(|vJp z2p0r}Cd_Q$`K@5Vm}j41U(K{)IO8Gv%m9#k!(0%aWw<%T8DXHa#t^xfmYA$JjOKnX zF_ZnpaRsMh0v?ib6`2XEo8R4^f@Uc(bI8$?a7VLgkTszuu9!KExsl~M2Ue+ab`5Sw zdy18Dv79Nh&N6)RZ!n%N)Khloha!-0*z1J<85#0hTpYsPN9A`fa%XQ;B;W6|-c&$Q z01g**ORr>a?+q4w>~dWtH!KPSYASVVPnP|hCMK{@ZwbTxx#{q765ovH4&rPjwyVgE zpg1_ioU0yFp~&&ChiKm za|~5!nnrR~wC^!Tq-gw!>#b&b%zV`K=U+x=;Lsa+nchtr=FiJVmE8Tmef`TNi~v(v zmB}yGj|FX@P%06+Gouu{wKHffkZBo(kC?I|7UxF#=8%};Q^UDiMLTc>oHDMzgzK#l zy1x02Hchxa-emZx-wr`%C;Y-**t^E4dgxtI1l#d%9-Rq3H30gKSkA~~k)K)5NJXS= z*v&b@re8IWtr5qp=O(Ak-g7?^xIxX6&rsAuM9blh1>P$3N>kvOvyWC8aNAwl+WBcE~I z$8ATv2~6yWBqyqj%axzLUjr9}Wl7{)mrYir++RoBBXt6tQ!Y%*)u%Gt8COYV6dWh& zcv<8fy+ zJ_&O<=U)SsUVVJ^`kwaa(=){K&Nh$fwAe@(2(<0;@pSZ@%_+a5ZLkHXYjZSq9n;ri zdPwr|8Uf{hEn77Enh#UxUzDC?dD=UBzk1_oA*}YA;Lr>j=~nHKZtWXMq#UqJ&+CYz zyDG{*@|8~4l9S|5W=Gcb-6mme%&usbOi>5AFm{Td_P>GwSw+ z?3Ij~ik4kA2~wVn>UuAQnXT|1Wn-@yt+W6a8K*zjY-@kw0V}A+qR$qT&fVnVxl1zJ z$*}@^+@TRoMpIsSm7gU}hS0u9^Y@S)c~GCCIS<3&V#9|X)aEwM4wNO>*>J8f;brLC z=HG@|>mnph%IixM`ej9vF^Nk+GGBz^m1tZeA=vPv{>WvlU%eO`cj(2ts|7O@xp>S! zJN+o)|00?C8E{j3YBQJ2WEc_TM#5}dW9*=Fqh^}z{j>5rQq-38uS!0eKvp#(j71>m z+yN~}eGygUd34;a{Y?U?`=fmXoR@n@*4=Jlx5UPkd*w90ucbHP5O~u`vXP%J$+4Pm zxMQCuBmjf2Atb9whf44q$<@6Y3(w{%5KjcMl5pfs6@ZBgx{$tmD4^LyC>k2jy*(Mn z?JS`Tx<$NVrCYTb6)qlU2;jUq#;`yR+8W6he)QoI~08C7jJ{&>MvxW=%hJOtItbGe85VPDI`!m1oyzCf`+mr|&u?H9S8&|HW2*qt*)yrCb7-mJqRCO{v+)}o+yEVaf)cy@Trzb|2qMGeb;Wu6!*ZIw z#g_VWmUHyeMr)j2qji0n!Wm~)Xc^_By^o-loxoyVYRM>%+0~#klwewI%Bb&%Gykmk zDltLJ!_GzU97o-%*{oIVZ@XVNC`$s_Fo3^**~JW~w9YNmHj%sP*A%9ssJ^UJ^vg^m zBhX>BOaNpcH>-OkiIHrg@gmZXU*@0;s>tlHjH5KDvDP%lCCUKG=fW2 zwTk$K_4`93T_1UPP@bKi;rTM-;8}G@E^f--^T&=&2 zH2+eSm`Jwe7c(V@g9yT>DVvDD8~H$C$&3p-POHTGAtZ5^9m2weZ61&| zXfEp{4=m-9GZWs_+?k+UiJG}~t5-ZVrrP5VbU%B))KEZ?i!5DgYvbWuv5y&gq%g8h zkyw3wZ7{2$WL@>puc7;!qp`>X^d;Db9;h3en%adXzTBVGddpNnjTw|2nN~(9B)(Z5k#OdQ*H;hcdDdfW6*`&X&|6 z<`!va{0iYD&4SP}ZlmgDQ%|CH5@AcDaOH6;PvxM=v6*j9;y&KPw49}}Y|WafId*N+ zF#1WR&ZRB3)KD(DYZn`0A{S2E208Z+VLW^U{Eo>oJ6UYKIq|6CK$0(kL%-f1QH_s* zNJ~B{Msn8Hlx=Z<_FvIBfEZ0gkiIG23z?%JKm>g5rtD8V07K#)62l7}Jd(W#ktEGz zBclmJi|O=n^cqw|*Dr(C?WI(9g^;o(j4#YQM4X8rDC|Dv4x<&#+v@1%@ zp}8@t1^9?l^u}rj{LLYj(^3TU@9pgSIH^S+g(xLpiUh`WB_Vu0fG^bSv%3sCg@a~u zn9|}-q-<+D>H)GKhQu6O7k1>o3R$m=xdS9`Y?x|Ocdv6b{_M*2(NSUTYgu+Z;WKTa zuY|8FV5ugZIiDk(#Ea);9eRe)E;%1(OL;TjQO6-#ua0jk1LiOX*>#~u!x0iO8 zC2#H^MnthCaq266Rw~ocgRND}jd`fSX6)7o9G4#mohCF)p;`FPbFAdbE|?IINRcnh&F)FOdub^BbSChW@I9P( zAb|pros3%ff+?f8XhRu|t1Aw~9vhbrjBhGVRe1@Q@XXS%XpqEy*O8O=jP*;BE}sd+ zt{EuS@J647^`I2xjlC*vj&Q~KBk+dI!qBga;YMfvNrM4nO$r&*<@3qgo(Q@SMB(R& z+{YcB5?xpw@boROJHcX}4I#Qdpa_e_Du$ze^=wS-kwFva}R7@~aw|4^*F_zk+5%DZy6%-rxeQ-2+jhf$}q z-vo6R&*MI-UXgP=} zj&S~#m-1e75u|>#8^yyN?6@F`$w13+1ruHWoO;Z6u_4uj&%(MsOPAV8xlv8`n1h&Q zih0T%I`N(dk3K^D`sZ(YsSSTRt&!@3vZXA#2!V!sUpdTEAMZ(FuMANj%>Z6N_9t{9 zqyOKFs3=RnejKw09t7Eo5j+d#Z!u)i^=&a+hs^f1rzZb=TIFL9`yE0{8dNW>x8xe+ zM#=yD?~f|I{%<>*NWI_mWjBIki8DEa;v*}TRB_wRwpTOVHMW~S4Zs;dOs43_?Wn`r1c>QLtzm#oBC0ad4#Y>WDu&S_c5o)?8OvTPcHjdut zNhaeWpdVt*?nT74rs0j|HcsiQg)jp%n{P!3+w@w*Ffo}-EMLtm-{>mWnKi^>%ZCJm}O@W3Z0Ad-**7x_TlkkBdO+~wL- zb3F<>WUBWwQ;)B)ja^B5dVhPAwcilvi4sMejum#`QKgb!^OS$YpAg?-(&CZn`EmFh zKM72U)zO@P30Wj+5A1n1LS(c;9N*>IPEl&~EGgq}I=x!Cb04$W7&&M*I0yHFzI$!Y z6$=<%6`pSD$i=$6BUB*IvLni+w<7s;R*ZT7oRpCcI)?L-%QyUi5`kS#JOyDVMi;&Z zw6Zw7rnX}hSKp(fkUwtthfOD&&u^>qTYyVPn&|qG;(D);S;25h*N<9LhtiSgUG>DZ z-}qO&5O#1``*o`ug{`}^qX`g1iRb3wA>I1iL5}YCeg9wrx zqeo~M)uu;<1%{))vR|(0EA1yTp?1(miE9~rJ2CYmKtQMsIXYorKv{x#)yMM{9fmhMV2+iL(0s{xJamzFGFeGk}lmZ23f<>zkg?h(>c)0Q(1@ zgqV#k+=A89jMQ(uGMw&q7LfB)X_6c^pC^gq6zFxc+wy6#>HUlUdP9pxEI9r%#>^DT zie~E1l9fOWmC4e~ka53T2dF4k!@q(NDeANzfL6ZnSik@uz3<0q%Jz_Fgt&63q(nOO zGYjM}B%xu^->f&kDw%#sZ`v((4F5&2A{_pPFm{$hZUm=eFe}unTXMS)gi<+C3!7b@ zaIdmNSEvg@>y-c`r9Vzs7r6ms-N=)>-M&wMt}3QMDdDivlk__kwH5<*DwPl|04)u) z#r!O~L$h}x5H5#6u$y@brD7y#99j)U`!aguk-B#n+LHg!Nqgs%RQ{J?6oX4@0^%q! z?SF(nM3lgpAf#BVRYrzIbG1A~Jf+v|VjIPP%N_-hi&4f1>VT`n(=F7U3VRV-Va%J z?T`B{`oG4Wrh6*vxIm9(o>ywyBX;!QrFE&zPU+U1)vYfY&E30GU)WE=%#6q_=UNzl8e(qB@z3|+n3?h1aW78F}qa^c7->V(O z7Z?KfdsGayoEmvBjeuccr5Zk~?S)c8>_!H5s*+#z=xcV9gkGHs#pu=GA31D^Wo0!& zCb$?;zf31_>>3N*b(zJPjc&fJArrKXk6p3cq&ww64Xc$z%3eyiq{*V*+s8@mE}=PC zbA$Pb@<$o(Zf&x>0@J`Ta`<-u;Ss z$X(PdRB^X$yjg&~?bx^(Rbf`J2N5PBB9&a!|Ob4+>wuk#i*dm+| z?+WwZE1yG$wV_czezs;)6W5_^g|<%S5QqC5g^gJ)d=xsx!8z<}1H`CgH`$uaVEvtln-OA=V)%uq$xk zQ)9{Yopg`sq(S{#5s6@tj?4 z^vw;}z-r1n$yMC}Jw%NOab0_B{_ZdI(7@BR#~C6x*C zlSAox=0**AKo4~|Z(o=9Wmkk{yk7C{hL{?&VwODS)cWUIKDg5>28d-|g^jF7bL28ycP3~)X zeFjQw;36~|Qu{W-=Kw-vwW;cWoLLcoqkCc;g{bRmD!?N~85GR@*}7XQdrb?kU!CWG zzyDj{_h_0(vsl=C%{(D(Xigq}ItS4j$?ezt08H+8Tg7nu$k#}=6nv(j$^N@anJMN^ z({$%e9`Q4D+G_wiDa-LzlDvx$C(lEAe8>p0$^Hv81x({u7CFL>vZ;dq^9&=>RxQ!r zr$EM5M&Ke?26r<~@~{kLTImulq}(t_eDl&%;t&2T_Yu-no$B9X&5B`U7_htM=2A7O zUIP-2ZEXQj#imn1`ncJ=nXNKU;)#|gv@Wdbu*~@4;!n;V^_S9-PZ7;QK{%%MSi{Lc3`&ol%{Ax!xi7C(fjG_IIDvsN?fri zwl8Cb5Tr#M3G#eFq|=*JkK|_1rPj>|bJk-nV;=98Z2rSg6IkwgRiKWUqT+ioROxQ2 z^n0l#Lr+sRU5hQC9(3gzg=)F)>?o#_n=!rh#SI4T*3sH?QY4|NTVS|3slu%3v^7VU z3$XuL6PcXBo(~*vqEM4aO;x<)CyLgBc^Zx_4wbgY8pO3ykbClk4@30SdliO_8?|dR zj9hjiogHNwjC$2e#ji(Sj6M`JC2FACP5`UE7fqw185x0U*yt$|GC2Zd*4dBz7{ezKNhT4017+kpISO$WG0FUNxnNhC0*>6x6?5-zC+S(^;7>c3au^;gMLivCQY*P0h*XWX*Gzc#O{ z>1;?g!--(LMT&(vBx#0OD9sIpGa#-ENXSn6th#-urXp?uxpe&wvvJ}I>4T+j1*}MP z?-n2XgmhQ_O!{x3h8K7-FVUX_mVbV*xmuTw82hX^X8RhkOMfxFi}!F84h6NO=aA5; z(;n460)e@9X(Sb+j-RT*$E1jKj#OLYm~JEow|of39c&HkL+`0Y0oa$~+PZI!4I!62 z(hEk9FF?W4rwGX-Ex2;}tPjp%K#1l;%vbhFA5D!cVYLPihGgk+txN3~DbTdE2@C6) zzQ=lVgibrO;wx^~hpDqRrR=obj2MYIXbe(91hT)*rIFj|OFe^ztW2Acbt&K8<21Ow zwUAjs4!Rev+?!N)Hptt9#yQQyg{kQ>5{LH_SpjICPY&>0gqj$0F`c7vKp;Mh+S)-Z zJL!-NT)88sk*HXWXJ#f!KH1WuVnlo^^!O~n<4Bh728O*~P1=hF0B=HNns?d7r87Z8 z_(>bwDP?88{9@tsm-+m0dFoc7$q=*VYJ?VQC7LOuEdXq2O8i(bwWcLV@Pm0?^QU)t zXBn|j^TDh%juW*6qi$c8g37I?S4dZw8w5H04CVs~E??<=n=@_=~^b zqC+5)eY)FqxlhcvO;A-4aq{zX5~m|@qPFS1r# zySAehotIg~uoN$-5Rzt*@;E~y6#=7-e)~C4|E78m9)o@D%xseu5BEb!C}F((<_H2>Y)-KnhC8FfukFP%DMpl{@TZ+~&NX{Y$g;|kw%G>@Zu;LBq9 z9X=5!2kob|nQZ6|`U-S{Ds{t zrsv111I)2t_L1OC*XvJ)Db6gaeqLUZArJ8kG%#3x-&w&oz^U1n_w!ct46gOHZMmBH zeL-0xaAdc&G-9%d@j-O0&99v_a#lg4a=&b6vg>41kXtufU9}EG@?Z?dzww-P*IW3q z^touKygWSbPOr>~G%(ne;_t+x z2yHP_XoY*VA5$NGP)xlQ7qmZb-ruc{1FsI)ub%gpKzBrseh-m(B!e(RgW{K@eIEAM z=2sj)w-;7O$_&PQ#g}}r*zZlNx|JxRv)?2qcVUOqZ~zmGMdaY~>ZUB3+(;lM2Y|(O zCGoo!5bylwGSP02&Fvh*JIz8<(&MpDY(XQVNu9l_4U(2<^+md=LGu2JwNMfi{y=%M zfJ1p}n|+(ic+e{ct2Zm$_KVLVTmEppY6+!r6hp8?u2`1qCyK_8(+SE9V%}vw6$XZr z1U*S071xF3GF9&||61GFD(O{hb;@+ft5(MA#7!rGitZlyCwhw;ndb;mwth3o68~fV z@z;tYko;_;d55!z1n*-CMzULF>v~(^q;Y%YF*|{`?Yvd+30YO8LcG*Zp%nW|6J|b! ziV(PGWFD6uQdE!@^<7unobO~bPU*Kg-N{Md<`ksyiNv>K7n|4fH#ldKEO?dR7is&< zTfgzRYX`#Q6~D=pUE4&D__lhQdnWaUuiVse29+;2oVj$B;qr?&{Jcprs0wn)$E^zd zJZbfP>NeB9z6W~e!z`+&b}nx!>O2hL7pNAyg`4ENqYnA1%;ldMoBPop;YZ6u^{dU9d_yvdVL1(HHr%jOi=!HIN?d+wg5`(mBpYnCKAJNY(iU^XD z9uJI?Dy;B3Ns8e76jxB7)Hc%Ib>{v;oaI#aCr0=hRq(9KdmVQ81P)*L&qK`r#q-rDV)4iJG8ghLT0 zV75DiO;Z)zx>&wvIpK9?)0*rcxw6%wpl_FB$B5H7;3ce%zBKHPV!Jpm4hN(Z?6tvW zT&Lerc@FI_h-h=G$oO89nguft5LY zP)mqs1?D?MJo{Mbc-AQ|-Q8fy3q5pV##=mU91Z)Gby~xDE0podXk0T)=lWJgLzW2# z3ykcpH|G$R6fI?uV-Cd%&j7p^3YQ1_gOdAEn!1Tf$)>*vygSZTKhI;4w9T|YUSN|2 z<(Z^nyU}2qbtjqen$g@<9mI7S@^2~X4n^NBXA>KjNl-R<^byH#l0xsOT+5KGK>6V8 zQTDQOwQ`J+fEsaIMS9vWXQR8O^z~&<`T5;;nRMGCPcWD6JfnRz8St^Cuh0ou^ggA0 z{yOh_PT`z?B*EE!wk@MZxvM=@&gFOU+bc>%KM}aJqxQu#%O3ZDsViwbjahXo2n?@Y z2fP-eF={ze?|wy9s%t9t^qW~RAVzwURD`poLr4y>$ak!7qeq}<%VXfhRzmq;TwY# zrQb~+-|uwtQ*&-K@Zgl3e=dDu9p5#`8$%LXa+vjS(>dQ58)9M_vS`UKd|A=-Fe{zz zwoBVnbDN9v!_siHT@u;pYoz5^9DNBiMI;+)m)`abz+F5&(*@2_O6}xbGVMaB&K7IP zUn|F6d>JI4jfVL+TYe)5F71^rkR~n_wlrnbZZ<3i`hKaV!dqs*9~If|;Uko%m=tCw{LMJ!?E z%`K9<2vP4BK}NnvTHT0kevejqkIeg(T)MjSE>;1MpA$WS0w!C}mGO0t%8t(*x+83i zrpkkbZJxR>ch;gCQ`G%0wAOECq{e*d8oCB_pFj_GzWtg$OI2hszpqYXJ&Xn@hWC^T zo>n8byaZo~P#lqR|8x4g-kH7(5?GEtX>{>9uQ=HMkkrSEfQ2tFTCOMN;AC@(Bo&+Bo_V-#2mO*YZ*(cZRg$G3 zDEM;8rZARgcN_x!7Ut{gp=|5eC25`&kXd`z9b!)T{I!?vi=VWdI4yh2KG4x2__BKl zWNzIs{23grxjNH?r=}$HzoAI_G=8zZ{&su4jKw@U4m_)P7t%Pme2fyu2qnI?Do{X~SL)pRe@= zM`}_#l8M@rr6l*wrUKNb0HneLyt0mi3r_J;pBmpNU(J{PiXmpJ^%2WDjux%7)&Pb3 z9JO|CAAS`lxap{t4YdmH)%<`r-`B%+@p_Z}K{~bbfzsOPwR;m8;I${~?Jrm`hraK& zzd33Bk$i1+z*b)05>NYAyI{ubW!vC-;jxaj7k!Nm##{YE%~*#%aOFbGh#B&zqFc3g z-ypD0)GXctw}j3e^t_rp-@R&HIzy85XuLSXuqYtGP~}|=_B){}sqJGh?UlP5z{qLS zJ5y?=Z%badp4VX)5@)}`cS$?i@3a$Y-ZOpBYo&MgeJ&DjyKI@X@VnioETk^BFb;&i zX9>20Q_%4H{X<|HSeL#CCnM~|zX(<4)1CNsI)g+*Ni7$WnOT~5@+W)TWX+`l)UnF=%MI(()J#;M)%FtO^DLg6FBNkkJC5v zs|z*VjmICqCB^k0%0&%bXBameD{L|qFX+BQL~{yjN8B8)Xh{iVc@8qs_ZQ=Wug4wp zul*oy4|)oSLy&>T`$2Hd2sR=`+e#IC8ol}wonKUY8~X>gp92O7;w2y3iZsIaOuj_x zxGT&YdgC?WA&U=4Ary^rR)OdZp`5sv-9)nV55Okrl~;H#x2G+E5#CXB>w>nH!pl+` zM|MpF^aN&>!Xbk^3Q&=&PnUm+l=PLMsm-g%4nHS)v>(xYb58)Gt;0%%3^Q5eWruh* zr)C(jW0$`$H`RVv`%8|HV83oJi!wF6>a6~QxT%OvhKXZhLuphUp&z!mZ;7F6;S+_$ z9z)lMa0FNbS*8!1rhZ(|R?G6TRf$7EU5T6~tc?g{{Q7qcwkkB(4SbDD#VpaA{^Hl}_L&*5GL3 z&46>m$*L-QN(M_3a-a%9i9rT>Nns%(me5sE#ZF-U1vbknttY1vJZj{D2E=io20y=2 zBfM5cAj$ca5Ryr=_N{I4kLU!CNc)1jDOgs<+4ind%uZfLnEX?Z!^Q&=y>K@0H877* z<>{GY3|haLa#$2;{ah6Ny;44Gc3Op?~FX>$R^FN#&EbO|qIqTehVs!Dm zJX(^$8)=;>g00c|aNbr+jiRG)BsDlD0fv!daPJ5q?PI=iVR;v4XJNJLm}dAT?ru^P zPbk&+@!0vD)6uFDPEZM*8-TPXfzFR86+KuHZ+LV46>N*TrlxuJ9zi=~Q9k8-g_o7U~x>ZtSAu)^dscxHa^ceZXUe#?EPdbEtdNn+$)@+%KPZ7pr8 zG1mIUkYQIyTU;!Dygp@so`;y@$(ENMH^W1ty7HGLT`$uBM&vmZGobFnng=q<~ZTKx7l}{6halWh@F#%X9kIa5j7}#j}F74R|%d`lg~hHAQ}xM z?(V$w(|v1*cBTdP{|u8aXVId^!{GT7#PW}B|M7y!s^N35!^RT`y`ewqtFJI_C{qE=guH|RcrS=R2{YL@+IOhMDKmVORTop{C zQTWbWQM9h_xC~e<=CATs9<|PYrMqm=YgWGfz{ox)uQ%?)0CV4MFm0fQw9y9Q$oD(u zwp7xitk+hZ%W?Cf26DLzI^;uVr!fdx_}mGZRvEn*zgK<{cPaIEk$xZZXkj<)7-D)g z=MEj_-01)5M3<27?``{8+c^?^Zzk_P{(mm+^UBTO z)qADzU%dmncbUMuUM`;F(FkY_GCsZAp2ziJ^}TuZd-Jd3S&}yD|Iv%||Mh*!y_)F% zar}@a-1z8UH)uH@IV?}`c9#cD;!o=r_8c8rMC5F-W$ig zH&(8A514)70zMn;B_@>9j#xsp-VGI0wykh8cuJm${y$r$o$rmkKbek{%Ktk9@VMT* zlhOS{mSYT4ieYqfEebwsPvZrfejLoO;b*y0uJ=r#S1tc%qFIwkn{svBZ`{~!!k~^W z`u8b2YX|Xy$%)1@07)lVAOrP%Ug37V$$0Pe-u>)<+`Ad(HGOAc^zOaw4nLdSq6#6E z(mny+umsi-y6YC^pIXgZtLL+dx63D@Hz-$#62__5Uk!e#^`mSyyk)%Rpci~~<-8=9 z2QCZ@tE7jc#v-=aqpJdCHxU~OSvGf28ArU86#G3;`_V@Ssi=VAy4^CKB}K_%oVrHd zD@xsRW@#2?wuElFTtCfk!w6SjnSRiU6|IR%-Bhj$@9tRi(K-2JhBs{b`OoaFy@ywzK14T zmLe)Z!#FWe!(!$TVPa^bdqNmv~Ydw9-%E=-5seMVy>YfwB74Gm)A?a!>JIr~g zh=kyg)%OI&%tB2)`3~B($z%Ei8ofGJw?*ZMxeqy93OoQ;_$`07M zau~q|HPV4ybT~TH0hI;mvAz+euCpd^>hZs&(*-Bkh#Dk|4$Zif66$T^ER4y|c-kn# z45{{~%Ezj?d@iUX@+G}R@XcrQajgZkNU~ss9K5*YyBfC99x;fA!Z07{!S~+XqC>#< z2Y6WHiWq%K3A#XsjN)`jL#_TumYw&A67OPhZbPGZ>KowmYD>TBlIu6oL7!dZ=mcGb zvcyBW$Z(-frmAI{vKnVA|K!M+wW}+PC=m*|p;_Dwq^=zoaVIW+q21~@YlkzTFXIf7 zr~?K^Ce+)~ZC_C1?Yrr}s~WQXV4(o~CMqE_xuPId+ICc(1Gud7lAm>k%?#m_g8Mun z7}yx_%M+9|zK=d3rur`0O0Sh%oo@s=f~T z>OOW~%wRE}4NDmoGBHMf&@F(iY1awJCZm8c1+DBuPAF(G!2V=P2_1zUHjo4MKHFdf z^*Mb@cPM3?|8_FW{`tuf#pdM?1wz#n)%#yqtYFM);zCQ)y!qpHou@PPX;6e^jpyid z!=vM{6pYjBU?EYSz^cazNF+kl-#=KDVJ!Wp7>yA395gB|B8BvR^)3Z-rRLXegIHt+ zSO532kcK^-q_MEcU!5y(k@?yFP(=ET(xAcCnAm4Wb{9JaKN4K;E`csK*<5Jy9!hcTF_YleGG&T$TyJQ0(rXsMXp9i zp6s)U?>XoykUkjV1mqb+|KmO9=5`Q09Rw-pQ!u^Tr)!VknSvfP4>M}*=&}Nqa}X$) zo*%*qG#gA`K;nZOk;fGJ8)dI)_OqX5;J zD}5W~*(FUo#Tjb(^H<&XSw`asb3<9PsR|8VbCHY8mYr5lfvnnfa`cBCA+nQ7LKxvVLvF{ zkXM4avGn6W_rrtrqEpp5aKH0jo8?TB}t(uP%7fM z2Ez;cw%@-sG$V*qrm%J!j3bvP2x+Li`%*5dZ_VMjuYFfEbzzik;Wp2W&eCdzr`o8! zPr(4Im{aB^&^5+uEnK2qDf-&#__MMXOOr8gYGrxZ+06Rfi{p){>YP(omE+Rs_sfHue*7IC z$_yTI|DB?bdHbQ5B0hMPnDXp*gMeY3*q0vX1x48q6u_qF&!A9gE&Q~h)k{!z5amG8 zBlh7H4}t&dAC6Nx?i+K35G6bLpq8W??-A`|O&ZawpvZt*q{X7HU*M$-Qv+7Rz^-5% zok*mh@3g(aemG<(mBs_|iefU~h>^R@hTsF}SsRsM4duAWUQm@u7Ou<{f_TlmJ&oJS zBvcG3Pk}Ynfs!tj)p})RA7aw`TtYr|+kV#N`Ub3pMttQR=s)x-MD>8Nx`0~=;x1g#5j7;4C2?4_Edxs$SJJ&dZ8q}CYyU5k2PPbM(x*uRrU zuEx4-vQfK}fcKJOhfNq9;q07LGw(=^B_YnmOl(wu#7AFa6Z9of5&_DJ@kxD>I^h1I z=B~_G&?u#GTkddK4MqcxXw+g}?EL1~C`w;}vA%$GCY3BD>UTpZ#9H-=$3Gr$`3roj@IK4@mFt7oymKY;=1a&$m`zV=Yz#r z0O`WQH)TLuvpXe1Xfb6szb@LgE#XkZxf8TKWsVE%IpU)#xiPQA3+d(xJzeuEgx(YvUu>u4cymQV4<6`8V1oX!Cv+^UO}QFLpymV zH|`@4A%M+eY398t5l*`sbI+Fv`FZxlT!Fe5ni_1CDlFf;8!F}ELW&vji=tnwL?&HT zJBqkwCRkkDun_Hbl*6!L?RYcnT?0D#}F8L z=O*f0Y}3%^p>Li_d&I#=#j0iag~=w~saF9Ie(-S#kYt7v1WSqrd<|EXqIg+Tt^0KG zfn~EVGw+Hw{nq%h`fc9(avXVBOh2xSalJ3PBzW0@hLZblW_MDxZRLQw+HdwG+lhwC z0UHZ3xvIBJI%T4xv*qrOteuS>lSS@}<&H#k9o(69q9UK0D2oY`ia)ZZ-?tkc?Zu`6 zK1e-_32GqY`R&l*@TfF(PyA0u3E7`MaWb7A?lmeFLPmKS`LA^l#H6N1!;vE$nVwW* zcsF$im?h0gO!?eXsMV8OBTSHg>XCu$s z!~ui6lEBQSU(WBV*Mr=Mjf&PGeyxumu%BlB=d6JiR|*?XG+k+BuFoNue3VV)F^==k zo6>O3R}25yuG28BIURzf$#8Akys*?4%z`@VC?2)bgZWyYL+>9FR%u5PktOL7NSo$O zvl0A~gL?8p?&h?e2oWJ&ePtE(AzjiH{Mvr)&T8iNq@K~_h4x86E5nuOIm?a2NsIK8 z!S6kE5jL#2D& zq7&}xv+hs``Lm7GI@#vA{oBt#qP!@g#D;ZVCOgg@5y&gTI}r(_<*D?);C1aU+e`MtUJ8d0V5PTZS<4eQa>(&i^Sy^|kcagBH#t%~vk3Qh7%Ur6z zjyb^cVhz&Nyl6Aia>MU(PY&aOqqtlWB>ep zKJT<>W8rHpIkE(x4-CC+2_M`GL?j@U3p(rc$P4+rl4b}_0|NYc@F;kC>hu>^W)>g z`LOl!B=;?Y=W%*Z3xMW$>v887a<@X4r;R!rDTT2q($2*`V zv<>$kSojMFI)VN{|7(MbPnJIOIIJpzZ~V{7Z=Y#{ui`{8{{e-~yb4}e5Q+ESpqicq zK%+-TMTfehkWOAqFaMAf3F<}3ehK;>q~L2^^y7u zOzzKvbQ0-_fpx;yJCe+Ef31~fo^!&WUyjVA8g@nq7uatvS41BHZ}j2E`3F_(v%KBE>H&a`^2=u_;BAmjn5Q8Q|2+_eOH2ZYT;a*ds*f(UyuyFFb&XsorT13G zlaRMNue(T-7%{W)yuxqr7(4uh{JMX!4`k^Yw=hsx<<=P?P@qfA-xmtLUGH~1!&Ep} zlSmWmWxLZ~+L6soYnray4{%(DBOB>!r+CXh+g#l_KePIHbHm;gj#Fo0b%3W;+5|vW zH(+4>OathZW4Z7pQK{0TP(rpmakbuZvLJP>QM3TBQx~Wf_^}oKd1OAed z-sKc}M!a1ob%UunD^UOFd>DY6eopU+-bAlV%h-;i@UT5juTTsKooid(4hKx{e5+#? zhJ5A;`5#>Q*)IQISQ+;sv|P=EO;ONAe3vvIXJR@aF+pLEc6xIj4)Fq*3W5kOSxDP9 zI9#@%$)2b7q;-|%KGV6KD+$W^E*nAK#FSHUW21S|3@y{>+xpBRlL&PD?U)UstPtWP zNji)B6R5Pp zbx5DJM?5F?9+eQ@Mw$hX9#(K#{jGA+_CXi!wG)15lh5c|Y*!3mJYEzKoVI&>B6Xz9 z9KU{H^~pRSJ2XDXJ#dl-uX+mbR!yysUwdRbWgS-Je9U;WK70@HEbPc~dVdZ03c@}9 zcvNf~pV>Q15FAGh)o-HX)IlM^BG2O>IyBNbod&gH2KE`>%I*ScpkbBd`hAeI4a+OH zE*>TH3(B>}(0tTci=z)3Yknj(cxzvEiDUOprC9Ke_r0RC`lIG>hDt`&i>m&K`4QO3 zw!?nY2dSvcd(ER`bk0uyK70z)d40lishlINC5ok${WQ<;i6-st?F)gfAlc)|85VD* zkJU{MfkX`LixE)U@~tPwn`ZdAUiXxgnjPnbBPiK)w%fjgK*7-IU<-t_Bx{)kngA&G=WdTtyEA*DyfYK0;>ht-Iz{ghPFT0pgwMI8xxXpjoit&7QJZFZ)pdv8UcxH}f!a9Cs4u#+Kmk#A`5J4c zmskus47f9N45m^pbe0u8C|;2uO56Vq4W{79^kWIbpPZ!{hwvgaW&S-xct8$?zS;%nfqQKJA-` z%5e+Lj@(OsX-ci@sgOwFGql3~N zej}>F|6<$geY9&r<^;41B!je1CFWmwIPX@mc>qSQ80_N2=xrsVO2wc0IHf%A$f9@c z1jD;-B=~81Hd@3?X+0N&|GWFNRfzGnI0*~?O#4)o$K`i;9*eDTZ*3ISKB`LARQ@H#c4evdphUtU4Q?j^7H-)k43LuMY1i)8y>T!4;?HE&i@$pN4D;d z7EB&`&yPr^Z2Q*@?;954IZjUNH4{>UUK;;DN@>9acxeBj6Wxbg_>aepjryz$7n+_M zWv5=6d%T~FHN%va`v=MW*I%UCWgMSYsD4OyZO?^$-k)h0tn?I*b5gP6nCCi6h$=pgN2>Wl@?=)LazLFxuACscd*>!Wp>i~yUH9Nn;yST!73ZF^>v@39gB6JJZ7TRbWr=Z z0O-O0p#;gs=%WLY>e9}lzu@!B`>S>v=x&C)ky<(*PIsE#uWjIduvqiV+;yD{4_DzD zs>Pj?)iV1IVh>Wb(!4ZTL8(irJos%2RE#EQDWeFKRiw=4Y)8Jb!0hEH91YPRx6Lw& zz-kqyT354~$_W>rs?HHrdc4{cY*c*Qc{rA3GY5T_&X%$YQi}LI1p7@NVHRodS2h}% zn?4hkc|7X~y*Svh5bm24S%$VqSxt^5N#e(c=c(xV2xO~ntr%R_?lsQqo308QU`SU) z2uYhabe1rK@PkboVESVh;gro|WJiJ zuUJzhG#utqKHb*EcIiW@g#`jtMa>pRXNN_y>On>24o64B7_vR5(jEiDzxysTqlZg+ zJp-DmY2unP1s-(04ng0?&CvRxKmi)Wv zA}T{+_>K6q-LTh?a&~>~5oQPmWDxQ(Z*GK`Q9O)>%cRO#7v<*G7b>Kvuh%q*u}wP0 zTTfd>YtvSA_OY`9WYrygaEMPCli^+2EeblyLBq}UCSyqoO%HW)wz$G8K)7wQfzerU zez**ApiH^eVjoXdw^zVm1s@xpa=~O-#q*|p|Pj~Y=CRw~Mx^$FZLk8y=XcDS# zAW;lv#bMoSL>mv`Ipz`&cwv`9*}f4Nvt4xCV+$j*!4m)Y8qgw*YM+f9<+3@lqg@yG zeL6DDcDht)ZdHkXy&}qlGNP&&(MFr#G>j!+T1H3ord{?!_x;3HA0T}E*~vB(qcru9 zMMp>8%7ah-^%-ZVJI<^=uwe(LKPDD=D{}jZt#&yV*U)Z2_CP+^QMZIQ?Z#=5Am&S2B&IS*naLic;RC^c%r&vV|ff}cu_b@WLXhmo> ze-uiYQp^u~=MX)aU4~Kpf26&2P#w$GJ`BNv6Ck(*g1c*Q5AN>4Ex0of++BjZ6WkpF z1b25f?iw6^JLjDH-gB$I|Gp}wYBPIw_pE0<&+1-1J>4ACC%g0pnzK}&Q50>jrfB*z zytZQU0Adw54-TG(UD{8lI_FXet+CCrzpC!)7Xli?uP-_f4W@L@u-={NqeW%wJ8IT5 zYzvDk{9G=!#(2Bjhq+@?l?P1;o`PODg?9=4JBmGKQB>r+EF0!^b^V_^sSWM-T@?L@ zc*0gPvdvQ+%FvfsXLpnDLcB(mTRHXnyy=%Tph@$jlZ2jZJiga}#Knk=Rd6g#t!&RK zKcwiLn7dI~keF0bsg#h)J-+ESXeH}eH-bMPQk%mVUAM3^Vm)`#VKmC0+J8&X07 z5ADoMg;jN08JjALH zCMtcCfH_kjL~TC6*c}jXL!=tf*Ai5t0n96euvQTMw2am$w`w=5{&DfsrSy~OW%|z+ z1_8qZtjv)~uR9G1hv`zwy=CJJ3vIm_8@|gV?AtK+><*?i{|7{45yBwFd><3s1=W;p z-C$gu#Bg@C`WWZ(GUmL=8=PK+$~UC4c3@zJkWO3v0E2J!2N`RY~(wwRb6NLE7JVzR)i9-I+Z)sP}jsD&IUh@q}d;P_@&A)Vq4|Ce8)*(bm` z*;Y%-E;Ol)v1=olk@CuBqt$irOkY=1Z9+jb0(t$LO^zc~)r{0(cG zWJ_kee>w>K99@1p4wbCFEkDl|f^{1bmS+6}Z(|*vFS(iEnS}) z`T&s?$c11X#;%#1gluDDXb%v^0`Ht4RukUP8+8#9^SUIovJ4}?GG+t6ve-bER25T) z4Co&&GUm1BB<)YnX_r+eivYhweAe)n8oe`K%RXWi!kC-bviZnwws5ld_q=B8?^=&~-y zYCYYI$A<4=_?I7eG~Ea`uMihy(v_DtxdmeO7E0-g2gro<@7XP;~?bqhdDKSSz z2X6vV1(rF7WD!n)kI{1+S{##}tD}y{3^+Xkx)0%+6oUF&zM5X1EZ+*V-(*J}sRg2L8RPkoVFr{< zwVK}Rlg#5_?uGUJ;MzOrhwQ5OC3)M*@I@q+ly1metZ|+&iu=ALq{@No+u9CLb1^n_ z|1Lj3Ea6v3Riqu6WBnRzt5|b!>p}`iT6Hy@OSvB%3rB)je~_?>B|V86Zy%|#aTlra zf1+w=#7WA8McT1yASyAgl&$!x01N+KamaYD59kwM;6bHTL$iiS&p7TSk{Nwu(IN8# zfPyMYVu$8M%9B^y8v#J~kC$HH$(VyJ7g9bFe~!m^Hw?Slay%v}B5DCO(HVLzkKU~9 zG&E!he6KiS=9U5GJF-sWk#P0|_v)Z;a26*Y)I5K-X&mug8AVbyDDN=G@BIvSzV~L8 zzsy^yd;6R7+(@6MaW4YJomQJsznsj8s(D!xb+{wM#|KGr71{{B=j@EJS5Pc}Fcmd`Yv)yGaM zwU2onAH(M->eYY5aE708DS^stAj~QoAPHQ|J`m$zBp}ZGROc z{>D%d&D9_Ym}{7bd%p67fv?8Vw}JY)-U6K}Qgwq2{`_~IYpg4(%&p(C1UtT8*-&k- znSuFxxGnnB75T1${X@rCoF#Jf`BHTg)@Uea$M>;Y0TWgc73}U{^jMh>)%+Zao_enyS{q>hIrSjW@)EZx6QUl-5h@MR?If0_Tgf3 zlil4SCR=MO-??~3uFE$$g`=m36`depYhhZQTU|5SI}28oNIiI}R;h53BQlf@%PAkM zy58`)Wu4u02o{Bu>b2MFi@E=3bm6a^U#eHXvN?IYz#~T?@^Z_`t*29UGCu zJmaq&-1`(dy%Gl$VHy;zDmP&$+DReitC=S6^G5!JV?mNGbZ94$L>kH#bCx0%NS7%D zU2%vNRds$LK@QTPz)!Z@aEhuSbx`yJc3Oo8%=3%vHUe1P;+E_)^IZt0rG?v>v5U2= zB~3KrKHr9teKH;(ORO^`xzNhYhkb{Y6S*Trlbw?PCPIp)>zp67M)0k|j!x=CMGwv$ zdo3ovM=WK~-673k+JyH3R_-04UoO%jzsJXTD^xE)8l2F7J493%_8=^NT8nC= z1|Ekf5OPVG1;F`gfv&ly8V{{IHmz8k@x`r~Nx;FR+2b}QZC*=a8BC_}v(ql-1QB-*at2I)Uc3_iua5pyD@{;|Y7{j2*HMu&JFOu2mlSnJ zC;#&XlRf3vjG^F;W!+U^Ju*CaykO_8Rx%+xMW- z*Bg(71;*<0%#fGMMa87+9DNp4wkf+-;`q3=$qM$alrHAB4ah)tsQhas;jWwnHE zQT45E5q0Fb94njAwi2t_@}|bDg=njsBiq%V4lBi_HBY3oSNDdae8!wdwUU~mPXX1> zgssR20#0H0A&np73Fr%48L>x>A>-40A~srhdY|WxMygAJ@emj9UGq6s>!QPtzl)Dp ze|H?!=3PY^7e_8PH7V6BBKMZ^e_Xoxp7$R^r_IVi_>+50oH$~xt!3k8pI5W8q>}Y> z^*aANGhZtlr}^lkwDao9g9nJy(IRQ;UYk7V?-Z8in^Fm_XTmcg1-w6DxXhaHV-}6-Ksk3#QN7#NSH=!~OtA8Jqc$!Xx zR>24CnCFC?s7Q@$FL0Q4^9)s^W?B_DW$NtHa17n`B^gA zcy-fG=pN8K$n9_$4Wt#6LMj7he7OnbCm-gV@f0R3L}}&Ciw2EJ#|x)51~_x4FXY5q zX&S6}=)rGs&*v_`Wbll>2ZhPmm6u=J^TbLX(tXkC5*Au>Vnb037K=+F!K=>JlFAA$ zhKxtt3AYGARUFc6q7 z3Oso09yCz+ce-AuHF~&Rr>Vw|d3{^8vZvH`Y)$|gsyEj5@0_F|7GRoBYsd9&%&%S^ zoRhaTT(triHvF_*kl<+R+P;yo- z!T~?a+`2{j!xb z9p%HiaCnFD&YR;##*2Y3jwTtK_<#|p^ogECDNtU> zYh6rRpFqJ`A#;eFHd$gBkx=IKg?RmfFu8gM6QePqnjRVwjcIf%&6hbGB5Kq64L%gK zWO8v0Jtfcqc_q*XL0wQ_V7FSCyv~3lb?TGB-!v`o9n^@JC}}B|?>3FZTp)PB36B72 zAUrDd`JGvU(fw~v;C^7I6Wg$P9Ne|1fzUNDGZMqv_i z9GAo7(OUYqw3W$rov-(goiEQ>{p4Om46hHiF>Xu)HZc&pb^;;YK8;zy@~=LRPmRO3 z4R!Qs(2&86=}q*pkdOzB3@!9(kdX3?fvxnEP>>Rh6&>{B(9rUm>vqY$z4WBO9Un!ip)%-8Hh8**7}JsPF4d4(qb{Upmq}n+@L|na)2v z)(ecoIu?JGdl+B&looo9;@qU!yWFmts((r-Nf zW&)=>D>i>^!OubK7exa%NY*SwY+}o$m7$9L)IrEcgHc9mT*yG6`nN;*r5=7^D-t$3 zml&RfR)ZP?B1FFO=G*C4$ZT~4mA@ZxTmGcq2iX31vEb3DWl5BdN9w0H$|7?Bq(1@H zFCifVDmMbQZkQc)f>OIiAKLU zN2lowaEr2WBvP)1&jPgeM`Pi(y{Z8nIw$S*cIF*zQQjl@U(8Q$e+EE{!T@QH-3gM< zFLz#hc$6<^_l=jIaKcka1EG{A;1KZpg?=si>=ku-^N>MtJbn^OzDi4xjUw7_5=92Z zBU2L#c=J6yy?`F|UoRNLAhP;;Q>3O8{S5eue}<%<{J|a=ihR!y(Dc435sMz-q6zc^Mf>STF~Sm^kVJW z$a0rMi*N2EuX9h}RS(2i*<}@@Naq>u`bt@mo5yX6-*tyr>-l}5O};Xqs=*!2GQGE30(_vrGj!RDT?thR_ z03!jk<|LH$j03CO(PUi=GbUif{0SiB|vChM{ z@%|u=NV0)8>b;uE{IxGpq=yO&!0i1I1ZhRhJpyPJJpaSD(Scx}ekKe_eK{y+WVv%Jq24@xy5);}CP@{F1 z02zSxn!jaC!}brswRMTj{<3LS5;Wia9)5UFu?P5EJxY?V*UxWYZtZ2m)r&lZyZk4~ zNn*~`W!^#`rQ;QSdL9!R(h;g%wWm&z={JalE|q;Q!9n#yOORdRBCBDCaSW4-QOP@1 zD)g9j3gc9?V=BKa;Z^XSG|+&-^JBp@2ZFUOinurE-~}Jcbw#s-JT#ra8-W@%6|hVj zV}q9&(_LWyUjEKb{bjd+R>}IJ75d6Fj2vU)k;=n~YZjxnG*E+TTm8eGexgvsgrh@x z*XUy&iyv3`>|O0QF0A-BZdI;^PfE(_OjqA#3!4Z+Vdq*uq_rdpZ}Sjaw7reHE(4ZT z**0uckOZYwnxN*eVLtq931*Pam9t==I$X3>50A9*GtaPGv(4|hWR+T4fZf)~9)o#q zN}nVKn8q7l$~wQ-B@4rtgy%qPs@H2#J5KfZo?V$5EFXA2xOZTRLrw0P5pnUIPbHdNnhDX0v24s#Mv5ie+?e6T0uIA{8 zGEUzT4bLoH&m8wavRntQm*PzN!ia~E@9~?SoNZ~IX<}$6h zgKgM8BiM#D?FKoED^=ABH-*`t%rJQZLPD#Q8?TLggT^<;5w>uYVUr-*J_Ia^@707h zKrajw*a~IXXOPhiL(*^zV`?UZrJ6ifW~)Y{ZPZ>=H`VQwR_V>wel~;|y=FMfsiZMY zs9s3VVuTES-?v?6*~|Rp!Kd2L)z<9&(WWybyjamyA+lvhf$lX7=PJbfKy#ZZUmLAq z&c2?WN*Q(5mq`5Q^f+qnj(Th&37+4L411?n zf&yAMW=X(#Y-?>3nE!LaO1%N^-x3JquET(cW}l9< zvR0jvMTlQ7!RIRj0&@X(#fO`a+gKOY73W|-ExsOU0e$_{p84#0f=ve-^{Vy(YusF^ z1irSLB~QI*BJfW4!|$(H*UNY5-%;0Gt zCIkJzcaDiE+I~3t0Pu@}96s}E29K9bdlGg)h(|l$k-m5wox>>l6BRkI%@xMn+Sezl z@3Cj8Q$S3E+)Z*BuQSytHdglBO)?#XLauwg(;IeX-B0!s;Ww_`^uF(-wu3+BKJZu4 z2{OUNIksjKmW`S;1bnwKgKcP~^z+B_A}WDU|bORMhXh#1)cfy=oh1B^UG%iuB<8Z$e$fF`f=?C zpLOs)cgQ>gKKV&|9c(9XJPpxT%!hWXiJhR_j3fQjSLxtkZER)lQy&X6jT&m^ z$2+Jm22(gkEg+?NBIS>x=Z4}mqglPJ$w%B*(MIwmhPeyolzqP9q0fFss!eH)_DVg8 zt_3|lK@Gx^ZFVsn3&D#fwVpKBA>&QAn*eBuy8|Ivc#QrLk}H{ioSq19Q_Oxlr3(e6 zi>WI^;jBg-bNwP%lEvrJ@0XS>`zhw;V~GTR2r1sg*_#_im^y0s0fWNeO?!x86&F|k znkUs|(8gj-49J{pAqJg-Ibx9X+f~bcd%*@@mHPv?7rqa&W>%jz?8Z;nNp5K>X2m4I z_|BroO$SlL-Iv>{S^q;o@tIbk6lvk7AT_tV+#6Cywfj0;wDNgSnY=SWw~|;GnsXqU z|Kca4WKMNX_4#>^V^dx)eMq-JEZchWiO}EgeA77sEYkM!qMV~82ZSE!1Wvw$McF2{ z*ZiGYj0H9;eD3)fz~qO;;aL$K=+vFViwHN|nl z6dnfokkA%hJbKW=NCB*~B~u{=nmbn1#21f!kESh|4iUQ_?|)ShDE)NQ$u@xT2POlD zHl$-SYw?csTnhwSJjXr{JT z`23yslw~lwA(W(0@0m-Rf@(O#f*R?SPBeuyI*H6m@8Uw=%)!_r6hchH=}C{77~Fqd ze@KdKFDDOf#|m!1G^_z0S7xZJt^@Aq{FBa5r%pAJFG46Wk|C$)k0IHTPp9aKfvb(} z{;zuI_^?P^zk09vr+p4Ey2f7Nl*nVtRWZq(Z`T~#9*Lrh%tA+v66dy(?+iP}uh-Xc z9)Q8`)CC0ok3Nr}4S{#KYCux^=qIZ)v3U+BBWd6gy{=`GYC$)zDhJ z?q(+hov#DqcCVKwuRfsl=tVhuAk#Q(JyJ7iFpVH?4|A9I^_KYc_lX^lV)61~_jn z8;9-mKdG&fJaIw0Yy~(qx*chsPqQ9P z)sbO%-JL#f>!9e24d>^OXHe!cJfA(j!0qe-iz_nrS~{u8*{cMtz%klxts^EN6-JEl zELu61lb0+da8w-aqh)FZn9g(aAazxXq>QgA-jP%D`7L_pW;tBb9GDS`wddu5AP9H^ z?vDxj^y8);aSFd+S-p3yoc2j=6He;Gi*u{X5Qp?pKBuc1f;rdALuW(FEciv1%oB+c z-_lI}TqmBGW_%k>sC0iF6$QiC10_)z=d+|}5a!~9<7*tO!p|!K1b@Tc%*n%+5;&nU zm*(a{0pAKu*4kwChLG#VfyvT%y!tOAGs_@s4Bp5$PlX#|28oCp8R8`7AKE0zw`^0U z_JyVj{=aHsjQ5%QpPK%zNF8kXzbgX%smXasJ|6p5)3ycp0S!VqTML<=Dub^pUSPK0 zIo2T#omLJUytmYyyLWE5@qBcK;{CN;R3AgGm7E^MQ+m9l(9ZV6y|EeCAj)82?C#Kb zb$Ee2vP1X`0$$)aVyMW~fzDw<>*|tchY}tU6W)DDdVe4bf>t(&4EPJVc=W2WjuWnf zj}Hw)qt%ZCC?#GV5(A{2hs!AO{JC~zgoLmg3nYo-W0N@(l@ATQ`O*8!G!g@lTrQG3 z)4V)bk0$Fb>Ay+5mu19P^zz=&Mw(Lo7svGT7Z(g&f>xh@ZUsE{@0bEUr_9am z1iUQZg3BGunP6NRHSBp@mUVJCeyU~#`(Uv8SLM>E{ZQ+&Y-0>Xk6b)N9!19B8)Jr$ z+tdVKU2})@b6Z&&?13M|y#Dvc=>&*R!tuQUu2xFC+)m(9N6gN)6*jO_2`JjM73f;+Idcmh(*AYsRX3_5-A3q{Qsbx8sMwzEzK?Y;A=>7 zxio1A5d~(`F##dM^P%<-*8x;V0oA{8*lA4guS2~{+S)V8ZS(lU7=w@hLE_5g>ci&h zNuh)N@xwm`E{p@qqxL;u3s3&#Kmj|>0r)dp&ct}*y?=Zy<}+zal;766O2#fD`kX-l zqn4`kt&0Y`i&s{-YmD7J=G;g2U(|r{`7vnU^T=M3PQder0A_n&DE3kbDBJYo_qP}R zqDp(bv7f#~tBH<=wGf{2N+X@xOTt)(4_2 zxQt3Er~f*yi;<06#;ubgF<#^^H-RaL@D~Mdt`$ z|4(!m0NCb_{b~P0H#|GA>Wtb-{zrBFX<*gi*!_>{cHA7n7=uQCEfb&oCA%6a-fXt5 zKjCTbWEYIXvh2>*!p)z+0QPouR%03{z_l@LX)p&YhGH)lIg~)aXU+BxIJPvD17pOz zd6x$n1mRD)tDhv@fmYnDFHe8L5cJ_ccl`ew2DYoX$L7~e`17=Hd0+wqU7oU^yM8?U z;oAN%4d=iqF_>0=81z)i$Sd;@(oz23U>z*nc{uzhA~BW`5W@Y5Nb+a<8pp}ri}p(r z*Cq$IMQu$lj}%>>^B54y9U$ALsi03j=YjH3C#hPvU0(mW{#+f8kit7eJn;{QfqzK+ zlqeo7MVzbX^lzS7I)Q^4-cBCw?#kIbw1x#6`TsH4(kbPd1W)Y0_lx+Vl$Qstso3HF z+LqvNoiqDX2O?}?QBhD||3h=DNR(-Q;k?DWK{{}g0+dIIv&j9WIdO9HJB)bG z%ZY8Fp-1-b)V1l4?pnTy6t&nIJ8#@7rQjE4wc7pjQ8mhnR{k{df6Mr?tlk5RIQZoM z(0A@IGM?X{BJ*E5uGarC%L_<8`qq26jqDMh@e0qp{lWSTu3e7&E4IxZ*XF8Ck;_%r zD+b`C2A2J#eq9zgyf^geh?)8!J%KF4kI=eF?&CG*%d7bq+WB*L!<#*?E*4gWm!0%+1ReA*g zcsARzWw}B70!pH8GA}-S0i{(Bi;_i*h;)Z$&B<|$5{|+B7|Y3T@FKWDDKOO1m|p9k z{v^-wsB?+6GCpl2tLOMGJV2@Pt4M*@x3vjEzx9rSW};UlCN$*{NGg+7Z;__v%fgLa zPMml&WRQ-0TEF#@$QcDT%k#RcrM)ol`Ha^xwGA<#_3V-O_ny46kW_Owu!oM3xNp}Q zrd2?$n2cU7LnlC4T9l-bXI8?I?WHjXJQsDo+`isds?Jr~`xFQ;R!-tPJnmV!?Eq=- zQ5%V`ZzHSL5AJ0Ic(V(ueJ)G(KG?@=748dHb$}>>ndu2_@0MLX8xR8Z11vaUg%}udmkM#Sq(iQlXX2knq%7q;cIJYwb<*<@ zShrO~Tu~|YKjUrh2qTkn&s;>fNvS5}dC<5b-}l5`HT2?+HsoXJk%qO261c;2oukve zVa)ORC4CL&K4><@fY}$dYD|vgJbeJ~=AQq#Is}2Juk})C=X#|rf3gc;(^dx;&zL+F zvL2Hx>bd9n@_Z55kFA`GMWrz+JuEwI#GBs3(cGMGYbT!5B^?OG_zpWMTg(tMN&W); zNwF>8gJ#0K!uU1^{ddd3bwJxEg#ryxnCPulw@~iqsmxudkng`{W2}x(t$q${=lh+D z65d2vi;g8wpda!)DQ^QZ?kw&HU&W6M-u()tio>ucqudabt9rW)b_e$#cYqu@c*CN1 zn9$`ZX+G@5vh|S;xnZ7tmP?$DkDp%RB2NPsO;VI6a3!u_J}JOH`)wMlMdkJS_Rrrr zD$BgluIq?qG2I+DVlV64vy`-jSJQ=ElDWmms!_3X>jL;BEUMoSB0-d&*@-xx~ZRdtl1h9@N< zK9_5Kw};i-)zBui&s|rWUlHw`zu)va5pGwNX1AJ3mGMH(j^@y=7~Hl>QY&qshpX^JRF?y%?_xItq2JcAOBV1>{Bu@kL z6JNAGIsZt)`zfFqPiVowW)W_i`a_F%w%(Q1itoeeas_vZ7?(eqAoJq0;s# zW2df2)SpWpIyrOdVfjXS3`y^re35QdFZsbl#`ASjFHzr<3dAVFt!(C#hzH>2;_*?~ z(Qkd4CK$w+-|VL-MbbKK8pKhc8N>u+LQJsmzY37=c@N@$Wyy-rceKDt=AP1+v@@qA z&b~8wYw*MZUF8)G>G-yxW;2=OtC%+~dgtbFOn^DgUUxEyyCl18wqCyc_=`zMUb3~x ztwgZ+=8f4SOC4WtrHJijw?#7%+TDRU+GoNpa24_?m8nS}T#3 zHRFk0+IPXU0wfgg1BnTnFZ@JOjQxsdUlVB~^Phj)kkExpo6pF^zG{r-M@tqsmPv=czNo|nPUh96k z;Kr)$aJsUj+Ur~COF>sD08lesbO$wYg(&K{G`neY#VrVXAC zT9Yx`nh1_INv-rUXA$ZFr#OCMCih|!CrAPM=!BI346z|-O9an+1g6<^>{#o8g!=@|l1aq{n5gzWmtA)sI5q+Q2?iB}s&XeKn$o+V_}{Mn zpjn6#SVhU^GD>}n#>v~?hVP}iwDi@-8ZXq>IEd(Itm}1rwNNly*TsCb;igr^uN(3>wTuRp7*{orDXl^|wU@-1p@sAz^4idBb>NIi5vg!25uXKZ z$bnj!SpAG1+zdx)-4haoC1Ha4g0J=jbixrq_O|-IOhvyF`fEANK)vxUITkb06;jAs zp$)d2Q%Tyd{mv6vkC%BV4iwDc$O1}h_z1ecx?K|X+AZgT2zbY)&x87{2*=DX$?My^ zL}P#Z(yo1E5QPpG)S}AD<-f}-KASIg;R5m~>Stz2b0xjI-ru~#KIzx(OEQdsdWBgc-7NFp5Y?p|hi3t!%3@PP_r> zrYb1B)l_x>CgKyMQA1(|o9H&`@0Afm8E<+TOp{VWSPLZWt|oXyA)~3n?q$vZ3#vm$ z+j})G*&I6WH^ywmk?v3h2FPs|0(dVCTWk@hU*iZFyH*scgUx9P_K@AKc4R?YTv`b@ z$ep^@8{(4?mZGS50)mZ?IQNU_19_XlrDouGKE)fa(`eh|@psrX5j~Pb~ zil|0ST;|ismbpxR!8_$lF006aPx6kIC5RH32!{$>zeF}8D~F6g4K&2y!XW*aWE`fx zBC*x4;Ml@3l(WbaC+uVK_3{*d@fbXT( zTv^^lTmLjcA&#_Vbud+x-lm{uU^vKJ(TFX=@reB}eMlK!igpa|F~7Z^Te+xj{zFIb zW8v4=-(1M%yIxh1ZVOL8%T56Zj}(*gdo}nL9Ur->)9frh7@3M}zI}vL*YeUlE~S&h zcqh8#r?f@@w>(>V!ecG0QK)iI;8-|XO=N{nf>)!~&A*mO@750cmd`*!a}N9pK;g!o zj3H>1{W|O*7{?q9-4ppZH_Z&MZNRy#HR?3VYq-zc_`XZ!#w<}d76iZ-H~GZ#GoE&H zT9n=uw#_DbZ9&+<>SVyBcjCu?kUjj0;l5jwU&!NB7X04w9yY8-3eTROt1Iy)A>@h~ zYI#Vis_A^qtnrV~FVfh$?qu-{?$MEU(X35+?WQ({(!Qmw8^{Q=MO?k4v3=TRE!#DJ zp3VyDp3HM7g!4||0I>Llm4U+|?P)tiUIu;{T9kN^pRpsdDO*)nh*JHoO;=>M;J)XX zQcjm)AXM=CHOWA%KtO|ko9V%yENJ{^O1Rfsad0ac{T@YBt;r1)iv-+AqVmi1PWQ>L zDYb8B-3(v94^0;CQh94b^t+&?_GyuEmM86o(|%NspmH4qVAVHt91ZzE9laUgMVqS} ztKa#7;bhaO>$@I3-}-K>(>!{a`jA_j)w~FL{v=^zq37!>@7WS{+MQaGH}6hEo`K5= z=BCPJM~1_4HH$7Ud9h^?wAx8R*91=pH}aU_x?Cu2X$E>{cgmmsf)Fn`YNs5p7zw!% ze`&@R?xi!JXqYXKxm2<~eAdzRrgYxl1%W%_1i}GF8@anWFxIt1VS{Pw*Cq;MzHoSt z03ERd&a)7@aT#Q@U@HU`J5R6>Z{UCJj$Wd6e|S2Xfe8f+c?;-)mJFpuuci!|yy4%m zyTQj_^n=wqdr_`>FPtnqZJpbq9Q)P)49*fgHm&^FTQ_Lzsa&xkuARxvFQM-GlWLo9 z5J<%c#FjQIcCo`3Bqi?^^7m205-zv{P@>mlITB}#6!WGQAbx1!|4h3zS0rVRa<%&E zB&WL2x$(9^Vhqod-*IMkBD3ViSoYUm;Y5sR5yI)M&&+#YX9gsBPp&ETXWv#!;N3j3 zW(t-))5kz!)y)7n{o83I>jWPYZRcjo*Zp2w`m)%?3Q)XYb`ruBW)iMz35vjd&+$5A zNWWr-#5=A-W(lKR3X?--&zECM5%CnB`b>dIQ)E^g8`-qa$ykC>+KV12UvpD?P1Y|f zs#(P*esZ39{*Jv?QWiSomaATDzX#gZm0Dd(6ZR_$`KbAR?QH;7pcPmzv=9CPf!*Z0 zq|RtsqL^IaTybiDdLF=ET@ReGo@xE+j;);DMaQ0?tQG3QBoJlnMNy7`%+kG~$kNz@ zS#TX#HQ^hRYS%uaTl?o6w9D1)d@o3=b2No6Y+(;v;aO$N>f%oZTAUY7%ZtIQ<||#$ z$r#155-w-Mp2@FAk-`dt+X;muWfHRUIAcMu6@E*a>+HcmEqvR;4^P3b>ANaZ((%Ox z)|eN5mRPe;7C4i1Y>^r=<<=97<<>YwP0ns|_6~&w3>@zf5|Otw7OC0-A?QE1_1jk_ zMh+b$t8t)Old}?Y9x5SkW$7GUw{e%axIF5Oj7T^X{Gu#&qB-}9@C7BNWgtBD@T#}M z(Wcu-q0$Hf8YK`!=I=M46d+T?-U~7-!VEDdK=M_2DX85V1SU^Ran`=|N1uU8_~rxQ z2T_aDVED8gdrVVXNeV|(pCvrToc~Va%}j`!SX}c_-fAdGri;@j~pMF`@2>wa5!*T(e6%(=bxMfo97u% zgmOetpqN9)>ZrbnM2*a{2#LB|4%@@zSs~*M)KHo>aI@zdYQOc^$nUvl6(**94zTsj6 zv%<-1NL_&7%Ab`eN)F4a%=7ZXGE=d6V+D}M)pO}>?R6yDK;d=H?Co1bZM~9ZKEqFU zG3BrBxHAutVwX%YttE=cK9aSqF2UVt4{zDphI1!`ppJE{CrpadE0qgST`eIp*eM~B zJP9?;dH88$^jt#Fi7O|@c9a6YnI~&UnCPjn*tP_ zH!Eh`<#IdZGa5wdC7ZV+0MUdoM1T5>_v2*2X6+6Z-rJPSSHvtFmZBKX7e*D?hY3E7 z&EwA=8vR`u*dxE1Wx*guF%D(PPj(Sp`e7psK`5wf zOWB1+A{K77?e!?5(%g(#_VTN|XG5`Uc;oK8aj{RKzv-&q6M&{J}Gu zhGSo<^I`d@>#FhXzqkf-p7oK6TVkFy=o33WBp&;0yLcNHei4p5#vMKTBrksf@@Fe* z@R0MdNq9d>kIY^oc3zUl4P<4BBB%BH*FW8V5!n&5QZYwq%5CnaJ?J7u!yGCyM|q)2 zRo*kUZ|?2g`eh_VkHt>I2B$Nr1Df@$dK-(^-#SU)_&~$9Cub1FUSr1gYEL;DOH7>K z%z8A_sn3&IncSH_SDPkw~Gu4wiS%7d;e#xX3*+XlXk zg5}bFmvHsok-44QjHly@Q#}(&$?ey5n6eZ-qh6k{d)NCtc0H-LSbkLs{9>Nx5|f#o z&I=QpB;r$YQotXJ>cAH1{l_A06#Q@L9Y`nc_4GGQ-`ao75es^f4N{*i|A_IR+=^zg z!)r02gOhf9sI`0c+~bYjC09;q9xZ&G){<_UWU?#kRj{Id2wfUMk!J=k6udmq-+*GH zB|=a?w;6bEuBh^DN2DT0pt$}gb|QUqFD{Uw`v=sex*#sgir%unM`jucp5eGd=X|=I z8Ka-dF-EqH%5(VU@EFG#TIEjpPEkV~7RSy@Dr@8OUR_qpMwDs32W1LbeZcn_461BX z!u!Q08OiVBRye<{BekkAks}Kgk_XGv#)M9f;92ce40#R59%F`JpTe82=mFf|(}1gI z^X0P4{!jI;+P?$2z275mf8XLR!dr^}UAXc=c&A++DvauET95&-#eS|NkeZnLku{V^ zbf?sAvg%NH6O&}4rM1beSvvgL(l9_=4AqyG&%CV$gYHdyj@M_@jp!*TeelZ6!Fw@9 z)}Jk_ixnrKHa?@`0hMe1Vj(k3YqF>*)9MF6Y_wOr0`iGw+PT9kr@L63t3`LGEueu| zA^}}a6EYpX7Nwv!?&>gU66olCP)NRrV#XFs&whq{Z5xcPdZ}|{)K%ig zv{=`MPege(FS0XXls*6DuW`EBEDY#*@G)@USzSD#2Jk;~3q4I{Vf^&Gfy@&FkJ3%< zLA!r`%{0oE8J*S_>r*64MvX>wJ@VK*`I$RUlk5B_;}*F*=vMi?(`}Zqb9vk=Y;D{l zGLaV1)F)y6(cAOI!Ro%E(=nKEtWzgY)!KF*qGH_6N17ISi}$#lXes`vdFuD$Z6?A( z$=kJlPat`K9K1jG43rn89aAQ(X-KEHHltyo`VV^%*hrg_t2q|x1Xloi>|-W2-UfDs z3m0?N1qpTkfwHD!83=Lp-k?|uCzxhGg-^jyPqxM9!+XR%QY zH^tR;8K{_P=8i5}hj5ScUE-b>N>>BksX0(d=zx7&L*i<`m$uO)Ew`2fptFjMZrxzPVRX0l{ODW3&Yu2Q?tuQD7R?qpR#_4C_S zW;DDUw7bxx<+aZ>x!St2StVyi6M^y!lJ3%O25ewwhgFd0IYg4^pnd>JDo`llIed(J zW46IcE;pxKfmhIWHmqoS%iWC}Q1q8y>^VH7*t0ozy@f&dePHoJ~ z1Hs*T?=(N5XBO#FZm*fS*HUr+WcA8U?J+9tWR1ruk;jWF^4SdREKQ|~+Pjd$+s;Ah zQofZX`#LsFLZTZ0%JyO3b))ch4#nZCVY^ea-1B{!;?7)m zzS?o@%5sNMqj5gj~m$%ZFq0CgPmLEy1K1l${M{+8a^1}<7e|T zf#MmfMg?rgD^V$lto!ivnt4A-vfy*VSiU=eIYh81d{?AN>iqxM`pd97maYvKMS@!h z8ay~bgA?2d7TkgccXw$dxVyW%`@}7{LvVL@3$SOh)_Tvk&pAJut7lU*Jx5hn)p*8T zqb6JNf{C|v!BZ{c_EufLd|3r170G*nS;<2mB`Fi^Lkc=d73qDPIcXrdk;Y|yBTS*M zF?+N?DBDhmz?{mz@oko9nWdPmb*2RqRd6-J3_84$G0y=9{#Ky?W1h&xys`pwed{wQ zU6!j71FFWEWexaf__aTF(cGCXKf32_Yj{ZNXFy^cL|^CXDbBllB?2?h`e5eiJ@;f@ zY3xZVyENx&8@k~x=?Tnq1ZQhUeVIkzTK}Sgp!d%GHdaQyCxBzIkDk7`6rNC^y|z}f z0KrB>bs)ih7Sd^XPYX>BM?aXqXz?E(#{7-SGoDX2$A`Zz%rhR?g)#5_&xNV(8*A|aq#vOj~%9E zQj*iYS?kP)-|Og%82J7X#al-bI(gMBg*z=$ zXUn`>6;lb0+6=-bAF@{zS{FcPWeRIe(}Uys5|-)lNnhJUF2U^WIIEnC^(kMYto=^d zy(V}S2ZDs~w2qz7<)|JI zhY+xn$1RqNu>Ch#AjId=d;7v03qJU>_s6+t+mc=S8DAav^&(2dKDHr@BUfD5Z95Lg4f z9!xFi%$y8zp{Ns@(V0_%l>Z!h)_`EUY=bseQ3U?G;Ff+fhF1AW!wK$6=00N%9m z>{wukO|=X(Hh1}Qh3#)tE1c?uh5C4M{tl`N{sM2H&5`XB)kAvW3td8au9Z)5G;i!# ztS64}P+KmM%iWJtG_Ib?6BtXy$upC3S5$z|q4dCTRs9iz(rC)VU2C0TbjwtiuRd!T z@@as>ZE_}>oDUG~T~py(V5y0_jR|q{Sh=sb&kT zd-d_V>xo(R)O&ykNvGUJ1+0dchRjd`1$n`znmNuj4o&vSP_qh&I2CdvpEo70Q5i>s zLxmLRh~E)D3l{V|>W_#TwM^!S;V+w(~CGnCmb@0GuzX%?R=F_=({PmeDxn| z(n}mUw(TC(3>{g}D!30-Xwp`J27A_J2g9V#ctogHw+kzzajkn4XSt~PUvG%i+SPc` z@BF?IY+BQ1{GQqfa2ILF8yg8DLYYC&L|VZ*rTS)AVuLrF=>DPW`?`!+Lry(7s)GuS z>Il;?Ic)X*4eAKfR1~4+-~SWTLHitc85LO3`~B`3pMcZN$<+b?E>#|*7z()tY8bt4=Cej&M}_*ESC? z;D+y`MUyHbrh5)%lRv2Q-P-FUBUI3`bXDVREjW+)wC3uQPwm0UBM_jbWo@wG2+#8-g z67@J~^y&ZdK;pER@xKErgP%5k>icti&lcSvNkDTAdm)LorABNPXhX(EhhZR#F!-M! z8VTERd416Ml!5V}YJGQ72DrT~t5FB8cu#=Ab=3HkhV^-83swbuB!R4GG`!7kIW^eS z)j!Ti$5+jL`kUH&z_Z)Jm=<}ZY!bO%`7Ff56k<9dGRPfapB#SbiG5X6Cl_#r-^4!= zUJDBd)pC^0e`8uJcmyL~-aIb5U*_yl8W#)l$RD2Z4|^xS=DEYQhtN?Wt^nl-K{H>n zB_~=lu0+Bt6xg+L>-v)v%y}*?85;5u8Y8Ifh-~^?d$SwKu&edScNEj$0L(oyd!>C%ENU03N{%&5vO7I1L}6Iow2~p&n2lbC%=f087Ys?dxwG3-58D4&pAJx zI^ttR{}@30qH7kYATkT|#)qd`X+5(cL!Ph@*RL?`s8TP_<&^EwFH zimq!s5>I|0jDG^zW}IPZb8{TLa4T|8c?3OyU@`-K#5M1FpxA9DHf$npPG)8c0xqjs$wtMSGUt~HS=J;gn=&6r9bzSvQ=XEoh3+bPSnfnDz#3$` zkk3;P*&WtuQV_O(Jy?U}d-Pl0BO}`aBPEjy34fZ)I>5L2)6@UoAYdaw6$+PUypKhO zD}EWcwQRf`X>w+sRi1Izcm!R|+$sdt9u;Hkkzx1+P*rbvR z8NRBB$Y*%TD)bz4Eq-n8==k2q?U;pd{eh6YLM`n;yopP3ZgsJF8WPCbTKd`w2YN{- zRht^VV}{v+WAVspPb!AH97G<4ip-9aL|Knl5YEx`I6Nm{@o&k4eTED%gU~F7w3UZe zd&7pDyE@~|<(Z64QeMMxhI;{wIp(LDc z%6fART?W%zR>C57k*F1zr0#C9C4yB+k(uc*zahOTQ`~>K^4Y~=yvP`s8gSSs-iy{s z(XR}3+`H%&=W%LTKX5F`xPfkm3ZhHA7J&N^&j8jSVfY|?ebw_=FcpuW2&P-khwJ1n zuAzNLxAniE8KJARc*AMn+(SV9qjU9GY5qJebx0_hiD<1gZ6_jJnv!y(;eVy$rD*r` zjx4yoGZU^oAY1eX-06k1`EwIm(Vz{JziTpYf?i`+*-;?a#zGMjU1bPe?We@DP)Bb< zT>atP;EI>O2Dxlk?7LxPs~NB^)`1}x?-F+r2-UkF2-LOht{fpSPQXjLKK?E8pHM2n zSr;$qIjfbqE6(fne2~ps9EHb1f4K_0=6Kc<_xCz$fbAZih71Gs&W&SJbVog2E1d?} zC%LvA0_z}EykNZzKkm;wu&Y+h1+WPYCeuOPf@Fx+VK9G$u*@m=`&`!Ud+A)X@XBu) z;P|m}Ftv%uMpiUxCEE|R-bDjk>t^D*oi|@I-PdTaEJ-8gaQTEt5sWlOCy|ezYYy(6 zC{t?z+STtvy=mL?Y)T~Am~*L=PNUMB`9~gXHQn#?i3I0I986-Px&?(0t$)CV3V2ax z#=O1HCC9{QyD&UBZ?bYWEiN@dhe4nrAfMT&he8ikTR`4gNl=%Nz2^oI+hp(VeMwZ$ zyZK&@*DKD>V%jrT$C&DLIx8bygRw$DcN6g&@F&4a?i|JOE=}cv2;^qlY)R=poe;2P zj1ySCWUn!JO64LQ_fFu>?j!}EZwC*-rTX$$A+{8(y$yZXl7y?`Q4-z!Xsr>g{>E9E z#-8$5ac3C8iE;uX4<3vyG#?xb0cULwqpOgyO_o$uSgz|-)zw;?yL2kANUOVZAo8>0 z?+T2r0k*h3dj0wUGq^3NFsfT9x`7jBiNyoK7bgXCDsNX?uktjA2t{gVG@oh_wx23& zf?aq;W|Th4qvT98aNm);RG5@mg7Hg?-X%_|A&oJ$`=uasKN!j$@0?TI?afH@OY)hv zLdIC9dOWLJn-iQ#%KzB?=8Tc~1;Ay?edty-)B3#Z%H7c^t z!p0A^+zJltXS@k|4)1W;1BgvY7}36I-+8?mpkt{kB{3W4I<4!dC4Du}v4C`g~>N7G+rx5uS1 zL1ItI|8cuj@g6Z3*X(U1R_o~J6y{O8vr|l&1dRHUZ?nfQ_kNCr=d=WV>v?2q-0_cj zyvI!!_1UcLXP>P=fRlN3e{$AN4^r0dTd*MaT}c$l2NUs9p7W>pM)=6kce3`6#7^s- zgvXueJWE*{aYg$3iK5BEZ}a?^sNwVuI(dES_&GW^YkU3v8i__LD_~iEH9UV*6jH zfvNaQIO_4H>{IW4S9+RRG_X8~4l_qfU{d*?&8^J69b`MIjPHK32`KSR*@5Fdzxs~g z?Ym!dCtbJCZY&)#C_~Z>`QPm6u{QoL==mZ&!$?;QZD;~#;yK$Dqe7ROM9myd+3um4xHz{?M%wI`^w8v5A(4!3Lk>OLoImzk4=iLYa^? z;%RNAKSg_Et-6H!bMHG|)oSJ(@p*@*c=sgkS7!AdRsE0YMtE8U(#lp-pGS}C)c0-L z*M24gF)g3!g;QnG#nV56iec$Px~n{j6tCeNC6Dugd+=;zRZkTBNP>kyxw70Kw}0aM zjgz>$e~N*=r+L8C}vu`*dd_@p=K z#nmGpTa-fe;;EXkRrV-hrX+$G`N=hXXnaW;kMVU!ZO31q;{G<;pL1>F2o8vC&fD!P zF%7(=bv}nI+_cT{@{LC0#QHkptY$5!i2cy1-I^`e9XT+c}Sfcq)bu;Rq$AaC|yV zFO@s!x>MBe9)H6J2l(i4-|f6QPVcyCX6dhhHk^LIQGASra@ zJX?SaX4jQ;**LLq1AhDyDdxmdomp4< zudDP^biH>xMcz3#bRYRG&H&C~G?kN4Qp6Ui(|DYJb*|_q2kt9jvs>3Zevx2O0Fiz? zaXhF9Fazk`ayr>0uD$Y?h&U*|qEWPQXcUnzS-Z9p)SRe~z2JWEHYoQLYZW9O`mWd( zBCWC{uEDv88I{)WEO1ftHH+6>YrAEs9nNf*5iVn>)h z3)~C{-U%@H8lET`9C{(DNHJ zv>qzNo>U&ZW`X48?w+sC1Gis*1*iJ@rx)F18GQIB4JSvZ^sUwE)U6zUtKFL^d^emg zwCO~+d=>@noyPKVglkhc4d%GL6+~H!H-40ShAMF-A;G??5!t}z1NKxfEEPCn?Aog~ z<){8b@cIz4MEhTP5UdV5rH>t(Q)gDPBrOw|(T(T5u453n-D=i*io+pxahV0%g)ObW zM&39S9rF@rBHlYSV1+Yrr;QuhRp;$K)7S{;vcd5bSMShsqGVe%)8W%i z;hHr_(E)o#vzG`ZW987A>EGZuZ>#%Aa}@X-tqAY03NCheHR2?~w|F@lQNdZ-eS~bR z2;rh1I}Y}nj;QXdenlfox)-HRGMHtA*9I%lX>d#i1RpzFM?Ff+Wb0^-2Q)cd$qW$q z`&wb5wg_sfh5a4hXHXvfS~ea;$Lj;Sp{tVsjbIe4e5jBXdCq;Y4Fz*=(IP#td#g`9 zQq1dl8{8w!Z=mDnQkJUIQ6`G9FM=V?61Y8-7V^eL#^2FHifnU6@7%*V^uz|7eXU`p z`dZ=bj`_yW5o}szk3@U{;+-P3>PV>QDx8#Ukm0B}4RIEyJv`GG0TkVpqwZhI0kEg8 zC`uN-z&Apr08_tcMyNX*v5mOQwm&DOhCf{}Qlidh?lIe%cs+=oYnk%1AQaW!kEm<- z5j-;588Y=^{BYp{wX8eYJUsa{%@Yn>X)k-z+CoRvY**&dpvp;h;56>|y@%Uu;6Ypr zPPIk|=C(yD>7}oF*Vvh*|EW-L3vk|qRbBnu^shj5)`x=D5z$1G*UziH-0Xps6d9SN zkmescfMvXqV%NDLY474pxCo|q>>7IP+qAXl5ZAyVGWBb?FGz4gdJJ-3eMH0AS4ks! zPtFhj#fmw75i|In`}X(p;#qujh8K$X&pMJZQsFG0YX{^G0E;;^F`_X_x>E7;ptR2y z^HZI+T)DUU=~3<{D&B9B>hQ}*i(jpt?1n_NQ|ah%%1iArr%j-sDJgVrURv2FUC$=@ z#i99ER}x%1LJsiy7tU|fZX`KYn8!eAANRmsX>_YOKAojLoYYnjn$poP-l9>m6#rZF z(BOEKNB?*fV9R6Kx8Ic`lZC>ub|JgGMv#Cu6_xRWKt` zi~P-VlOV2gCs>ZIGPuWnial+Z)rrt7U`ZS1D4xk~rsBeTqIoC7-9#hE3kc9$qiK+I(gj%J0?9H1BkdssMKi2% zW6c5gB4|ee%}cq~$ilGcM;jJmD{>~3r#pdO`*l{{*Vmy1)BPSSO~CR@EKZ=Muy@j#>Ei;E z09gBXtm{&JUHHrM43+CGwJo4c1$>_<2J<}V%WiJQ@<_E>*O z`Ebxp&9ez)+7GlcbXFYjY=#$RL_LgUv-fZy%&ou znB-qK&F{+__(SQD96*Tv;=mZ)MaIVEH(j>^I6?23{E2f|srg%C4$mUqhnef_p-o}o z?iFi>W`>6Ofke=i$&X>RMu{rII%a-1A#&o*%KM zva)Ld!GZzlp6_Qn_KUn5CApU8#%= zYq(>}P%QDbC7>ZrrxCIP|X?;Qa4X1WROicZ<1-;In zB>E!!3F~$8Qy-w8q|o3lP*rY>N?i+2_Bso_&Cl2Q@AS})4$0`&5PUZey0L#4AF+5a z;v-Z{;DRo^c-oG_g5uIZ3k?a7rD-7(0z^i5Nq=Tvt0_XfeQfdm7~WSq@$3mKIBXdW zNGTJfjHp+CNBRMKsl8b`MOa!*fL4DFa0*t%Y#vnnd7& zo*ekLvEHWED-piAlE8A1=0(^_+?+Bfw=P{2&6^93ylB#Rc|`5bsEiL*hS%gY=X<1~ z@Hw(lr2#W8RSEprN_FifBGJ3vv?=DG7*skaL9i0HyB?Xt<;aJf$jx(p0G*wO9g2sQ z0$pJe@n6`FBjqTq9d@)CBS}9T0MkOi@)!H<0XWmsk}uX@wEkugMo z0S|DzJACyoeBS!A>jFKpIpDSq4-kli!L^gUsAXjMK-sS4>vl!B0zAb2i}5)B595*2 z(&5RG`2UCTIRC|XwBuW{!7QwhdneY(e=|tyW>w9dYf%$ombFnuVRwyke(zg}7{%3j z*P)&IW6vkZz_N9P1V2L_OFoQ`$=rzIcx$?N6GR=*jU9MyZ!}z3c!x?KO*tG?m=3~ z9BK68(s@~?lW($S7+c+d#?tNUd1E?vVheSSW&;ZgWB8Ue!47_Zg?qfKBn2=%!D519 zuvG}cwQhY;X7_+oJwBJN9BfW#sS?P}g6x%tCe+3a#`bShP#VQXS}=n{)MyXpQpGyQNSS2*Oo7AbyO##E#Z1AaL#)dM-p*&rX-2{jiE0% z9X7`FYZ{d|Q6nORkN{tl#L)-(*!&_ho~z`oiu{T&0n8h)$LiNl%iTrF^nR%D8sdeT zSEM8qVUknlZIsMkCd>^&^8oTcaXf(*K}l98_qFe$Zft%cqaK0r4v1AHcTL3peRLaG zKk;brz+wIBn@E}PG9PMDdSUbYG}(SMBIOP$p9g{}@IPp&aLy+l^$-37^;j?0+6GQ_ zy6JD9q;^Bk@`qZwa-^9dd}Bby3I&lmtN#V?UeZXKzz3)7TBxXh!{xy^!e%7+^J*y? zEOWL%Cxi3AviJC!`L>5%X3trg- zylO?n&01)_MkuOKp|esuZ`%QyjyD5+c0t2PmC1^qUYJ97 z=cvIO!}Ge$E}KhrJTF;)r!Bk}-5M@w_VaX2*{Zsbu_w44+<^Y26v(L7(`kDH!Bs)b z+D=m|B&#gF-DHRS1@&o1NvsB2E?JrBT$5KI=Lqf{JS&nO{r~_}$)kbSy~ws9MO3C5 z&h?G+>p_Qm{!(dM{cU`A==gxl0Up40P&phJ18F}Rr#32*;iPSZ!cp14RL>g0J&|SC zuJ)?Bw>Q0WXo{&@N<$6b;7@pcNq^Z=qz+OV34aNUAn!f70oXu0IvFK4e2^UHQd<~0 zMM_(9zvB6obb+nmwZ6f8`jg)$)+0JYHA;L=Eak6!zdkkdE(O5X^ftii2G>m6Xklw4 zMlTBT;ig3T`#)Cryy7%A{p7a{DqBe#k`0d1y#tw?gdZi|>Ki`v0Y;#8Z%D=1V zlW2?IjM2D+$IuQ5F#o?3bS_1ZH`{uiRqh)@5A8fd(ZN>b#p`vbCE&az=|N+e)p9$) z0>!)%qcSIlVMrS(J1dWu3{0S!wH`(d>WcIuXvY{Fii^H_|b^@*2&slfhGgPCZ#${$ z)3t3nB?d0yH^#+VlvoZ>nu-Q$gR%I- z&y4I?cpaqrCGTg2=%JtQnqGwvW3*r8p#wB#m6hTyY2Me!GXw;Qg0qI+MPtFyvNVX#lm!!Znnd%7CefL)B@?l}+lS zX@LLb-WsPZa1+r}zVr?=@L>_PCcc9v6bp!j+;5yK^ z)bX^z0sKD6Od?wJv|9r%LsbSJ%gSd1OpX}~_j@pb9yXl_g*e`c2*521v$Ji|&q?${ zEdK)!<9O3or;P7fv3b~1ljd0UUU!(&DpIhBW|(o*W-3xId)C17IKMZ=$zDNVu)KWb zXZ2Wzx;1c~!KBRy1rHv{52c_sR=`EZtrfiNQfuNGmW!dijg=U+5`jZ)&%tGsevXS_ zl%Qb0(cEogjBv=d8L-_Vd+gF%iJ*6*8%SR}wQl_N*u64GoMgX;@3D8~?w0e_y0Hs} zeN`^yQ(!sd-L)T*)YOpKU5St8oI*76*uO5aRql;aw-1umX~w=OfNk`*8=g;`n zQQhqfr}-H{C!_uS%{l^-4c{d7=f&!EUt_})ji7>Wg|sO+ncszHH)|62i;*X!J{fxS z+YoXp5bJyE%?xak|2lL^(bzW(X~*W)s(Q|Ebv&v|Qw)YRp3z~BoPp60VsBnGOh7vi z^~UJQ!R$QR#{ep-BgCHAMqBFMe)2<$4CpKwm6c`a>f$MWrD~ z<_kQG&|vfBz)+B#7{vu?MQdcf7E^xpzJ~U=Yi^HkC^?YRylNk#*EP6}i=7X_XBUIw z>`y}{)&RWibr67<+6$3I4-+IxStnQss4svx>+SsLBSOKz<6oo^? zw0=9s@oDdVBT^OqEoWEpyPEmma<+CES6;Fj9dA1J$a{QaXEdDE;-Kz3zcBqWlqE6% zKUUGE=FOjPpBrQEtFyb!v-O;Y2~KCguOb##t7s>AKAe_j{HNHq=3gWIEw-^OIQGQ# zB@Os#JN_jAhN`&!lqtdY{^u9=Us$qZEUV*R{xSOhc~&o3#Q&d1-6Q|VrTU`wp3b;% zJ8gZQlWW|SpGr|}#47?$x9f{p`KW=0$T}I-g03p~S1$Zi@_o&R|5V1_n~v^5(|+KI zizY7Z<6jdNZpW>I%Z>gi_rFR5m+K#N9c$$>mCaBQtW{%m2BvJd|K>pN$?+E zy*Sm<$~+{;8V(TZ0?htpDFN_;36Bf7RgDHqYKln!{&$ z`S<)b?{urnw8aBNX}lxT4E(f?hR15##dTEvuQ}!)Yo^Q2CKKcTuQBFryW$x&9XRam|U{NKA(0Z zw0x8wAKfvQAazw9XIVP3p-o&V1UR&p#@_T8Wnx&@*oxm=F5C>v1ZvD#@@2<6Y2X~I zJf$~S@_TNajH7+A9+q`n@HosF%Pz|TM$NLFNR7fdn@#2%w=#N>QY?ophg0SWH5!=b zK!tEVdwoWk?hE**v){|c%Hw26v(=xlb{;>u2|40=xk{LQ6GdX;qzr|QI&yLoXezxV zU9aGP*T;}K0hQ0qqlIrryE3D(y z#Pgw*j6`+>?IoB)(z6*0sRw6(TkvUDaQvd=G_TH1aigg%i{Y8WzS(fTn5!JU44k}v zAQg8Yy@*@=J-e9LYIjyvgyOSe>C@g#D_>BY&m*#4Xq=%ChrA*3Cgy07es*X(6r+g( zy|aezJU1)jjJ#>|yYu~oCVv(mcQe>I350jW#Z-kl@)g9nqzcS*q!c~C+e|eA-!>~! zg_@7xW0fRKhPD2RT)|hq7|vWNN9}rpj3Sw_;$( zLG;YQqzUhJ0c_n>r+Wa%8?t_-4GdF$OkYx6TrvO{a35`3q2AtCju`xkaZB`qr zTXrU$oKA-bqqZEZSx-?jUM2$d+HosrD2RY|NP;kQE~~8z0UksM z3Q^~;b;yxXqkFMe=h&qe{TeFa0mb5K@Q3Gk2?mzi0k zM8Q9j;?5(pyTrp%#1tb1ZuESM3lmI3@1^?e5uqz$wS+91ufEq1$>$E;URWkUH0hL` z^}Olq5!$dLd<#^G2q|9Ux6DS$qqDuomXFngkD^2E(&h+D$wCy9nZW;19bDkFDlWrX zViy|1uynnVOPM_0au=CGai$m=ad9LrRoo{tsepNrz_+qJ^g1A4^EEN?_xKr37r~9D zbf~V_lYi4;c&840;YAV}wD!clhE?O6a_1tQWpvK(LRVkfT|8MUNf4O3=_Ywr1JGP`skt-CCd#-TdEf}+`kI5@yeLM9U zhe2$Q;CzH@>1@5q7P(D~qG7-Rpo~uhNx>^J&ISpBg2)}d%<*~5a7EFMX{TQ_bG3Rk zHb)8`mfI88B;BxbSl*mnlo+j7VBXT}Q>vf)SyKr#>=&st)rUA*qbJ(^R^~tB@=BfeR*6b?!7n)4X+F?Mn)s9s^1vWFlA3xJ! ziRn30h&(gWJXn-u%k|L+AQ-6qVbqF`C0^gl^d1YN!#*P{WHG;v}6K~yReQkIn7so6qF2RUq zaHq9d|h)tL+WT-V0%nw}kbdoFTLX;OkM=I&1s)il#Kb7!QQ1=-e% z;+&;LiDh@_VvTKh-ZQXRc}F)wWEp<>!L>))bpZ4WlC+ z?hG_tqhs-fJ(#_+(Vx8wFG*G#mzS%>Fo9)4n~hVbvoW}LUGmvpb^?>L?_n{?11(5( z%}^6{8$hX?5M8tHu`?o=kg3`AOmdRbIXDKsbJjfdeS3VCC+?wXEvjMJFNsZkH!@{_#PJHl`Z2_=0Kx@k#5?Y!V<7e$Zg-NZ66C|xsgiwE~b-weY zJ4n5FR!gC2dw+pL<%Xds_w#!5wTQ*=%2~TW z*BvBIJLCCjFbO&c`;f|m_!_qq&gB$;YHJHr+P4g`p3Lw72)8>){h*T4vv-qJB}qxtEf36Cg7oi-G`_ zIv+AJx!{Mi(%x-6?fFZ|BXO zj9u+V`pO##9LI!^F*0)nep1hm#xZnD@2-_5Nm`_szx3lKp>yd%fM#TZB#7%nblx>X z1?l#|YP$&6O9?}Dxm{H6oqb2g2Ce__!AXJ$(5>#aP<&!xtg5okuNA3x%I8jOidci|BzQM6~ zpj-s(QS_}XH!FHqQoNMvV8B}I?j9*%)|M~*qOpDMzoy+cS+mM zi)0=tOq0sB1HpBzOq^in6aQYT;^sDvkH{4DGZGO+n)gNc4m_d(y3a-;3S2AFKkPZ1 zZ=a9=K1QnyctaEF!@AX6C?1L)Z{ipNKJX(c?SoiWTLf!V$6*5CWgwl>~9f>v`es@CQ;Fe&=>2))JQmh7t7oG_5z(y=Mt;f04> za&ijvxmgGNIrL09LWQg5QRdzKJ~Bd=H5w9Y;r^LDKD$}79&*?dXnx8Z6F+u&C8XCm zD+?5i{pM8vlXSIC!Wr0c;RCwOu}|7BH3M33&W2o(fyi2lh#W;ZLv@i*S*}U7k)5ZJz;ntB5h~fdD9{gPg`lA!OxtNxPZIHNfOH0lx9(>ByRYptrHLt0-B(@uT$ zPum(+2|?5WXuY4jNWjiOu1EuT4CVcy`-LEh|9;L_jVR22G-%+HK|1r4Wthj=9Ml0F z4(Dp)YSO~Sy+;$Uw!(n=WK6_NRlOs#!^5f{kkCj6`lP~5NbWgwh=sN3jl=qw(8?Vp z;KK(6_XrQ-u8sOds51j5cje%|Y5Nv$F>b^SL0b32+rmRRz6D@+Nk-@y;kOc;jrQ7u z&_W(m)M8CQV)-ehC}-|O)GSRuDW*DCS)0Rpn!ZPoKSgX`RPYGbe|hTKI^uS?1pl*v zgj8N4`D>Tn$t`r_Nb%s~3pM_8mu$2qk1nM#5c%fpc9K*1!ka)f zh1%2rwVWUhlxio{ge|{e)I%?|m_2>jUR!cge7p?|QN%S7#&1w>6w*m26}0mWbMoBi zQY(ds&V9w!>^Tx~sO1Q4^IAHS-AT|*5O0J_a`}GVyzSnMCp^ETWm|0z({( zfc88UwJ*|-!iG!eruE}Z{qZ(iNcnB3bzh_)790Um8_2^zO##m+q-qe$coHNdc*{Hv zDG|(6zE07lKu&YCcYh{~ce`H`>Ks4vIRRf8@#^K4SHfI^krF?q;YBF>mBVqcdIh)kzYWeT9oUoPYXT6vK>(bbbpYG&fuVhWpis75gD z0#8jV6pi&d?YT4+?v_UtVGwyl30yy(kKx7rMDBU~@Kv68+mxYldC;p9N%GD{R2?AA z=~V2EF8rSx#77!SVafBnE_FzD5eLrJS8;x=Rd^0--0YuQ$$LqEe!z{tMs97ZTvHH1 z6aFwvYxpMHfzUE3Ze;=~?@dTg7YafPNIK4~34a+R*)8xf+Pf?UVP()?&FDuF%do2G)$7}ML z112mP{T;i_An#&c&77r6t4)YwN7^0cWo1`%rX!T@Um`5rcNr9z(-{2sq`={P{8doO zO=o#!MD?mGk%3Jr(i`q1d540sShEN;#(D@%kOQ=hiG;Nd7qDY4UHBwcjlN`>Ncrghbtsf*f+y z7!UOafHQ=?6AJur0sP`2?uGWv?aizm`q2(o)H{K zC#%z~H~I$37|&Nkmu?14J@S#{M6U$RCTRpZ7zzg1C5xEBahWHgsL9{G&5&jgI&5TV zb_sv&7}?&$@@hA-lehDsIwQw%DM4%QtmXL$BNC0|jl@7QrU?<;2~$LD2YDmN(5Xb6 z&>iba4PLqj1Bo+AvRTF}@kUDKgg05U_oa{H&kd1utnDr|o*c$|MN zNkDl2nE1)tJ;%NI$kWH(VD)*l+u92~W_$A|vq#g$z9p>4{OaInk;03r5=N?tFU;xh z92R2P$m8hoF}J?GoSwXctqFZ&&?>#ZjqyFXI44EIB^#GH<6V)Hfk3i=&1C)#Ts1uO zfhbgsHl_Cm0lE}RGhlTy+~1RSgt72tav$KdXaI>kJFmX^oIN)~6Zn&5-r=@%Wkd`0H3Rg_1N1jsz{-GYL>`_~3%;X}AJX8>-g zH56TD>U3YJsE|+P+knmZ@AlLX^e=U$jH)8tE(9E_&7;| zuquL&9mBsYct|E6*baI$X{xPHt%Ms#r#=^3@5Jw22$d&w=b1xu^?M|-HhC)+9}Z3Q zGgNWEnWF$I1cc5BE=9m5Kq`_{475GrB1#>Cd%ja9gU6U>qh9@0kLN+*0|6XP$k;&9 z=giQPn|CLl-Lam(o06wq>PslMRPR7sQozoKzwRPctk7c&p%)vt=s4tM^cS?LxV2fc zh7_EJ4SOtkwOo{nd%j)<|8$6p8=)4|qbUbg|ZMpL`7@u*+3UXmC0XJqo%=yhP zmER6q*MOI`SI?It9ip#*`~4|UWETl=Kks0vT1#48K9(~t(HUf=M$x(ITIsI{@mapr z8OXiyVDZ6;)ASUTQ8xeyTdGHCPB@meZm7ra8Llp>I1M;1c&ggOCCRwnH~blrz80bO zF!psUzM<VQg#hITY_N8s?vZLeLZ=`j$= z0|LjzF%=!hFvc9+J1)MJcG^qnLgaV1igWY@jZc`)M(q`Qj*U|8DUW|IMB(=|bu*A({b=o;mAw(ZX+8T;Jm{fu zQ+Btf!W%nb51f=`9vv;Yz1Z=WdY!n}pE*Txe9Jt#yZJDdxPdp#*S@iL^K`I$sZ;l` z*r2U1dAVcKa&qw{ws9rVK9;+c@%LLqV$J%&)>*1GJL?i{s$Jq=bHhU#zM+* zR^s2w?fki`6k#gFyVYG#A{!v!=owiVN~!6}p5-GaQc z8dNe1gEsXMJO2-5Ul|uy)9e}CLU4EY!QB%ixVr_1;O=~Mr%*&mM!m7WS(9#ePHc_!vyQ56Oxi(_qPMuNU*3FSYS<$k~uicI!wXb81{ziU+US}VB z@wXX@@D1AEp2Au?*I({3{W@+vOUCCkfoJV#TZw+GEJWQKE1jKhC#M6AuREu2x1Anw zTy;F$uXDX%wQ-TvtIi)$U1=|#pvPix$f%kBa_Sn}**M42+arRN;mdol>pGq3{Z=fl zcLhI+1niVvStG{7tlYUFIb%4sPixFKYlec`^l<2z=^SSwsF}l0EvVnDV)*Y@fQaGq zs~KWqbvz5*3KAh!F4c&z5_(_6?5VyitK#_;v)OU;1$?tULISmgSh1aSB(LCgcGb~= zV4(}!dmW$t@TS~quG&cq9P8UOuH_^6M|G@r+{0G5@Y4j)KWiSHh@YM8w7vLab*Ye3 zxWWaLC^f@F1(ech(IcAq-LWGhBDn@By*40x?@$Ce{y@hCa@F$2)A+LaxEqM)5ZRO| zh~*IZU_^8y?9*=K2a53)kONeDvt)6byQLQkHPZus^SCr?e5x8_r-ch(kr6`lkXdv& zp)|gSUHjv!hQ6OH)(8jNLZcDS=^JQY3_uKDl8d9XxqrWQ=mKe-UyO7Fy>}=x%P+?fl{~U|5U{-LaOxP#NmXg zd|cTX2X(@&n$B@yS$b16{)kO}l<2{Mt-(O;JYm5Qr{a`|=R21s56=n|1DU8&$A;&G zNW4Pso3?wup-}=hCPQEH&zCO&lQeJv_K-Oi8b+T?h zWyYsOP7EM7RcwiNV#FYU(=0>~6DA+KA%Z|c!dnl_>XQ)6`?Q~0E*&LFz(_#;*%KFi ze@`_MqS}psLSH0d)9awm#7M$XA;0m^ubGqe`*iI;PJ~0zVM;@afE0+lX9HBozv%tY zc9i)=(DxIBKB!48gotQHR9!;;-R^VKm#8e@)`m(GLMwE z&N6#p>vO|sDJd$WH^F1;^PxCf9N{rKkXvF4RxlvC!XN{Lp!lh@l7Es<#w7me=F<7j zxeEBz7Lc*!Pz-4|Ej3{WrQR~c2db}&jjNih(~%FRvb=<&#H7)T{~U)}imoX60kX}) z;pE8+92_JdRg+l%Tg;R~bR~m%-WllwId>FJYIH`ya=LbW?oZ(@G{bkcO5zFSzw0SB z52-=2n)qbE2sskT^}$~RpcYs-B(ZbHdO-@PV#A%7=rr?zS!wZ{BR?FuX6#Kmy+TxE zlXNjzY!r^!KCxM5J}L`+nK`n$_fF>~Gz-T~{+M1=RF>Egb4-Y4#T);yqQ#&NnemevPkxZ=K)$3?f|mI_)9z1Y07n$YCJSpbo8`MSVJ4OK@AH)lRhO5)-0pGqi~~ zEtO?z&>?lzn1=i;he`iVad^^dblOs0tt{~%!8TDwpjboBW;f1v&i=+o86T-}XUQ&z zVOqNKm-Gf?>_+NAM9Ab8i7&7-dJ7%VtMZ*Ql=ZKbd@4`-Cf29{hUi2&0{bqIeo*Js zkk4Lx%vq~|`i2Ye9r8Xc5#ME<}f?m?+AF zpCS~Ct0l+w)l`TMzjHp$N`mYJNDx(gB0e`c!d*vGYyE&sUWxiCdN5!tyjNwClim_X za-SeEU3-XSUuQ`DsT*gqHqaIxB3IB~BP!cj?+cU{pV-9e{imSXdxhfc1odqY(f~(|nY^VWOKuA(E$1ZJMf-}x$+rw`>)gb? zJJ#dzW_x94SH%yY<^&pd(AG`E7$LP3gI>`GofD+i)n!Uk{#?QvZq(#nwUj-- z#@9u1Y++~r$r39br8Mat<#x-yVdcbtzT0V#wDlS*+~*l z8Oa3GZBS;=-C22zhhD4K3vjjX!Z$WxgWwN>L*^qe`hw=e2rkg8x4O?hHht}ETXVelc@V1nW07rc5={8qm0PD2uFe6>=%GT+D0msxCgt7Nmh2W;u^n5yHxu|L_J z)?Z3XOZV?cSoxJLz0arG8I`x@^MQY(@Lt|7_re$Id0t;PUDUMaklym*Gt8YH-c|ER zwuB%vT7)O7m4koAMkjoG@TpoRqPO0Dru2o%q=4&gYPYyeL4D?kJDpvP zD9i2oYL~qdhRUL_9#C-ib?R$vZO8DeZR1lEHqS~kolkFho8CBwF7wE?&cwW>e~*CN zky%!O8;8=ia9VndrG0IkqJh_P>cmSHA<-vSw+z+-Hv#;U;9K9m#)>i?Z-x-hPdcJ0 z-g%*ManHU3BmTSve$V=Df_$UBTXLlRzKX{!F9exy=fg z6BO>I-mWZ(4k39g0eyWpB7nF(>*y%ek(vf)jr0tKOCq zMe}ltH{Md9?K;p-hGlT3FppSR zH>SJ(ykS$KF^}jH%yW#(@t81Y{7RL6@g^XK#o<&iU4i4dC6puGu1J^rYE`>&fF2LH zEpcqS8nVK6)(tsx3!N}#te>;mpee>)h-6d`1nwUXa&hxz?XeTE8X1W{((QO~tbO^^ z{Ir5KL$lhZAoT(cU0VNCXwm7J_|m_6wKqIS?04b#>daTPp;bEYxz6(Whr>YgzS+i@ zB;6Ai1)B{drxc+bnT+7Lr0GWJ?x#)XVvFYIVKIX(eQ7e;6<-)mhZvk8VH$W-{ja;4f-yu|cX~ z;CqsA_Iq28>EU(C@#i-M{ua|E-X#z74YO?U=Issnt@dHLY| ziQH5#!m#{!rSXj=(eLfcK8@b#L^<)9g8c1Td&H0k3ub!#64etzsU4opuBSscDVaP) z$aZ_gj)MLC8i87rwvVha(7~i;JeM~WJefY)vsLuhE3XiHt3i_e>;YZ=b8jP)=^y-g z?`UnWO(16s>o4m=10tJNi_RZV*3q*w|f@0TUWXLRy`GXBY~_NdI!PC?MbfsGHIh%veRaylK#kke!ixb`dQ@)14-0A znDZT{yHyEhz&*oDe;S59Z^q&?tpwU_K+OBAzaQ+j{OWcmss=f#e4vFnel8cSiA`d8$Hc`X6?JCcXfC6114CD{3HSdX6V|li#Yg9iNRYUge*k<%=hqiXwacfAykch^e#R;(4 zNZanp8B!@bH``;x%)I1sSv}v=t@`y|{2~m}t0k(%cwKUhO{qg9Ej>DD1#l>(<*vf} zUs@8;;&k4sqpjO9`%U6v8AT3(bYrx8S_@Gl9gYWBz0bAe5vBOUPZz4n!GfN~Nc)OG z5KK8#?2hnmE&g?fOsTzx+~%mh(j9u$04nR975Dz{jWnJ`PU&G z^4+g73oPx!;ThRY9ZbHK0tEaXszyg)<(PJr#TECO12aZVowGq_SU4>)EY`1JLnCa1KuJLaj683%`&PzH?Gfg#&$O7XmekY&Zhg->zK6SAxrK$ew% z-HwyM{hIoB9`CiA=Wd*x+$C1hkZcScqvjU8|r%R!ck?JMkg3Ci&ceIK&f%G*_#>z2^xBa2g+9hFYNc9fj70;52m$?(jMbz$b z)weV#Y|lC_We@gp;&EQ+iK>m~1sbKrbl~0ovE6xmg#11VhqME#+qj4f6gv2b_)9y+ z_ZC{o-mD)=<1;pv*VbPkr*%JcK2Jb3-TQTZ)P6nIRA9ktk=izQ+<)3Ucp;Qy)JK#OU`q zHwOPkc~{JZ`jutUie>E-IMBE?az25+(3%tSW7?|`Mp>2|_K1D_o5Az*y+|AXx9_cI zZ>Z9kToGT%EUntbVe4VMQ3WFWh~?3tesI{{8}pPcpGTt*y(Zpfc!!zc zTia25^>xo1#~P~dF0`~*FEt}s==(txq^~m@YKiN`QTKkLsp_IY5;*@|(K(kMHut4F zZ(SmrR`yco8S++Hla}^bzDL!QZpx=X1rBCYKjY@s{vFdh&JQz8CUe1#g35Bt{$6)<6uYNRX@e%B{)u$~Bf* zxFFdjD#*86v5!@%I)QtO1+JMn9}M_Cg?VS!xbNunmuJS#+@#0-;!KWj2s5gR$eMd1 zQWVj1qw_cjFsL&=*dOc`Pg*xp8jaw8W#)f>gV5f(0I2y@ArQwOF!=b=?VCL2?Xd zaUKr9W^)E5OV~hXMb-M->TAB(Yt+aCl@dQD*`;iv)qVi4k8ooG4e!o90IrqrdV#p| zF81(|@Pf{_yfRLI!+}Q5e(+%XcL%-uW4vHSxb-qrqsOeIc4F7S_@J^8x=FfqyN3O| zMDOjFcD*ueKA>ARBX`<-fK2P|RoDcXh`(7YT;6DSN_b3opp{CrZS>Z4tiUpvA4xmm z3!X4{42}1WQ_7LQj8?5Ckr1*pcaV25r?<4h&I`Yv)i~c6x9O_igYbmRE%wvf)1u(_s5K& zsO;H`-KqH)cNMoJk?ysNjlLcgizufF|wfvi$ z&%!646u1pfj6a$%%1n3o!BM6uqrg5|H<_@aR**TrDzq2SZL{$8>)uB-jMk#i&B8wA zBitkEHnBEDJ%Bbmvpe)&A^!(ZLJn0`(+CE)J?bbW=uvE6s=n6p!)jWL8oXh7u zU&QJ0aC=bC>PVdeTz`eRHynU ziX+A)#etajLp7ExlyttTHQK|tJa~NVRtF8b72C}vnGa+ghhHE@{k1Pdnon{RRW42Y1*y$Pa&2)e`Y7RL6o-0zN4lN+u47)j+Y!)4 zXo99FM!JIIQP&!Fg=Pq>K&bZ(kL>F;q43qq9VK3LA~-v8o5rp!OD5+{IS;I359&%p zoY&BGNEcD?O1@5yhrK?zF*UkLZ6AO#1dDbR@*A?%yD|>_pPWOv9>z8*?Zgz`p#>X8 z{lbV@Z-4R_ei8zkjMg1^Q<@tZsCCq=gA%jXS6(vR)HT`)#=Wmz73X}ObA~{;+$0nR zqp`zo45o2;K#Q0|)f~C%rv+t7PXq3+?6mNG50COdgguFDupl24K%CX&{sMu(erlrsNRXE=tmx{6B z4WETRhUB=OiWGOhyS%UQCes1ltdy*FXgrLuc%2SDs(!b)b1*NZU1O0W+r{l2bHE;6 z#69aSTGTrm$3$5D}PKGb(OyXZO_P)EM#*{|2ZEQARR9)G()-(Bcr zh83p+RLvrOHYQGRTR~2F?j^Qw)U_(9udCi=O&yDY@%_| z@GI6NB}p7Nyb5i|se=Nmj#%eM&%jXiT$ekRO7<&4GD-yq%HJNVF;@?;5Bq;U9-I)b z#1b{$7#QV(p$ok_--Ui_aSFOFur|pNixjc4^ti0yX>org6W%#@hHP(3FT2e`Uwlk< z9i*6e=_jbB3hCs1|5}@XVUsy^$>%2^L_*Kb7`=xE^^E2zOcG4d&tQK&B|}+mK2L&L z8_Yfo_b!B7S{7M+>|&&6D?4lg0od*oh%Xz%E#1#Y7s+pzl-(8kdNxuS)@UiUf3Z** zM!=)nzzCEoPzX^EmKm=X^cTQK!dET8A2^o=DH#KBpb$Xj#sDtTI2`<`Or9R*!wWBD z6W@~Lp`c~uKlS;c&xC-Fx=NO2HBtQiU!2+Txx$ zCln!`D&jrf7=XOT_PxjVw7_a?x?1Iow|tK+zORkJoXvgXC9_H3(HkJeN8ouob0_Ne z)&oQfv0POxIi*h`G<-Ga_JBXL^z6dN!JthBWo&V?n98zlBd_NF*>%yTGdN1Fc3f-o z)dZWz)G0M7N)y`#KM8AO41k>6fyk@-lX|mwe^}`YxKP@oAo;rHYJ9cRDpbDH#`fJs zcSO=p!u69SJBiYgO|JF|)cWFOF%u2VhXAP~by9DmY>|DY2A7+wXv?r96YnCAm26{N zz*W?H#wG;K&2XR4kG9#&f5k&dVMWfT`Vz7lFeg z+PFm@%j)`66MrqKoD^W_<^QVLJ2Q*c|87{u8cIJ8#1^#1Z&IM<=T3eQf8wh*OQFrO#Y z%Clk05}*br7h(PB`|Wa9q2)o6H2`!g4WBZG=XsekggyxSbvNeiCdETZs5MBqY^DDL zBfPxa0|o><`>r*BS8v8^G! zV$09S9}bd8(8uu@lbYrqMnU{JawO+=ZQ)ZAL>XvKI@6=XrQ>cHp9w@_>q}iL@vs1O zw;5oz9myS$+mGCRuFMF*1V4ep+V5+6W1=K;qjc2`r9tY#lbaW94vghI;1(vX&RFjg z6&QrB;6J`#+GWH7wynsm$rh@U;lAV}mtDdL!?NNjotU4Ag9w(RrmdzAR&cqt6r^Ti z6ghH93Xm-rJ^77r83wB@GfIsgpEM*3da^8Fjdo}Hf{I=)R*B`)#WsMNyL?|sBi&5rv{ei@_4r7$ILgPB^aDyMo9mND%LxLNm& z*XCqK>itR*E#Yh9KjY9uD*E_nOf%#qCKbZ2w5A+p9_cgbRaprg20!w%8yVlJJkhD& z+iII?yq^KL%keh0h>L)xECAR*O`U3+2@=L!e7afduZPze(ig@4m9)8}%kkw+-wAha zi==)T$4}+?+u6@y4ONg=1m76=*eOf9Cq<&xpMAAkFA=IZe(u-i7$YvorYGG>HrCQ- zl~>Th86Cv*@m-~1EDui#yp!y+OkC+zv^acbsQyr`6*Zn`!bR{J-Tkx%ykeM;JMVAS z|9zzI+{xAPvh_Ctp_9d<&zkyGFi?gD478f@82xjt_s3Tko%33bV#o@_k} zaurX*xQk3TD--FgmjM|X&{TVyJ%RhNK9#I<Xgj;zP|9tf|bL)_C_1?MMCm z_;PTLMQ=4F#4SSW`Gg-a?VSwkq(@5yh$b9rmkO7vVqz_Vt%;vFfneJ?)N~7-N1|d@ zzo?JYqcRA`*7~#S!+0$sXrFI%*7K(r*R3h(1QM;L*_K3AN=)EL1|okN_(}^rD4aXA z{E(}tm6nXYXzb2a-&|()O02OpA8!v@Uwg8f^=d8aQI$!IpDwd!Dvrj^TnN)HLeTsY z--+)={pX=m;zFC74yZ+y?5J}JHAwJvJbLN{ig7kNxkRx)qOXgGD=XJm90#Lp-1mYV zGf()u3un0{Rh_xA7Ibja;=^tq_GzsWIuHYii2~t4pFgH|RV`>0avC!_L2=O8`>i_W zU|-SRbjr~A0pum|L~qYx7B#}&{KeBFJvP-y>(_9~#Wx^hiVEo?lqh>v-&AZ|1m+rU&-uVR z5Atckir;Wn@s@g}TFO%I(Oil?!SPCb4X+?HVpwCTYOh406ub^zy^XYFVnAbVz;@rJ|cJ3CUao@0)*+Z_+qmWFFFK>2p}l^5 zLGB@gSq-dNaI|<{^2tDL8Qeua@#6x{%b%oaccEUzv;``yXUGnd)c*k9Q3!-b4TX^xe0XM=x|u*~bB z9TSS(NG`o?v=2|{&e!8fNc3LlnTpP*sYW2keA6vN+i{kh5*gCxL0_(XQDGf+7L z78az-0@_HHpAEIvFU{U5t`Vmn-sYs6s;#9sH_M54l2%O=9Jg#X%Uhl&3eiN@(10;s zK}OHCmHXCp-yWskee_dO<9<9zMwk+d)$yFXATM`2ns1Q?y&29MY{WX*pjO1KI>adW z^?JG3mdrE=FH+mV&0H1&cVJYWa*NU59h|cgC_EQ(Czkw1`o&I;FZ1?;p)Fm9lfbBq z%RE&A?0bA2+Wskyav+Q($zbznpjCzH+1dG9n1DBEaQa?j-_iaoQ0^S6PgXdGK5HwC z=bB#??C`xMisf)Nu(0UpLLNa%`b3X?+DVL-9KIO6X+*@t|7wNe(EvT5v}V| z=%+V%|ApTIef0=dFA9P`55R=gG`%pnG?a+;LKTExg8>y)1I=@Q`dn z;2|E<#*+O;M9Oz0_q34$Gt={^Kjx*jwz2W%?R#%D5MO5g9w@*ZE3fOi!pCw^UU22E zdueeEzG06Wd68u)_kF6;`Jg*kS)P(GR7sE5{&^||`>GJLdFEy=@ygA=eC{Fp!@74o z-DyzB1&E*YNBN(1_^s|Vl8}+sl6)C$ZgAEIa#D5wm-KR;a4=&Ri$;Smd{VIc0kOdo z%oNsds4ab6Bp`_@4j@0U6{f4a5sUCB^fItJ#Ak(o7=s%;^B~i7D6`TEyJya&miFEG z<7hq)7~FE)9*m)PYKD@}Nd7vb)y#dK^1ckjZk;WGJjDQ<)x;NeTT*bf$-{o|5qov9 z?TT!JC;UivFB`#r6w=np_Wr!^B33Wz4@QF? z^ZB81ty>(pG_e|n)DIeo+9xy?zlRIaK!T7oMA3tv$4FKr#>J(W-WPgbqV{R}_Aa=9 zGb}_hg-awZ=x{cr?nT)6VARR@>JA1+*H{i8DIN5}5?%7mlZF|8@u-_4V!QjJ1Yu^F zxZBsypcpp*zML(| zQl2n-05Vd3`8BJ`b+4(4J@VJTL>3|hmq$VPyL+5#ixd{uNQ#jM%>- z8VCvbDUzBz2~pch{v$TB@NI1D%3wGc9|LV# zCw=YkzjIxs2qUwyfss5!jE8G7eJ}K(Z05`Ktw*pq$3V!<%$sdvcQPC1eCuDrpn5j| z3mT2Q&m>&;=f$>hqCb3aeV{>C0HX@Ct^3FO+Z>c&Bjv>;wi4(+^;PCyNQ@79jg2uV zW5#=O1h}c~fJ)i|F523`GTT>tzZ7F2WU-RRiSg#YQmh04(51R{HM)Nxhii2Q2DAe} zBTfKXlt=P^iD{q7fnJ;dtkUUq=O^NLh<}yfEaLCo{68x}Rh3~#nG_W>VrNbjE6CUd z!1kH@W8=Rwb<{>1tESwBiTnQ8%{aB!$(Z85d6w3ub%BWLzj^*gRP)kX|MI-&wvGkD zaRsn^a5DZe6j5G91DW|FU&>@R04p$1jXk&OzE{CDw(uVU{}&A_5;)OvK`^L#h=nLE z>8Kn4_q)WT6F-{o(tB$`EjA^7FTBgsA~`tUmn&Yfj+YL7#xKX$PrIvU7H9p1C&VIk zPY-`!wX&3fH|v>PE5&ZWll6491CLWUc|J4q=<4-&JX6Q_XRg!jC-NJI&bjc57uZ@? zOLq?z$+|ZSSO;8350r>UlCZApVN)}3lq84YX@G_TU^l!UZt_+bHA5)to8_j#=7t z5c0b%uS2_54ixlI#SQqJNUoe8b?8n-z`fRO?N|;a6u(gDPRj=0!k>t-!1Mjzj8e2v z>kc}YRWmVui`Qs$w9z;$t9uw+O1WCKY!rOb+kH$L{mhitd?d@mHrVha97J8B-zlar zz%ab#7H|m@WZSX<<`oC3sy3Y6JFa>&|&T2t=)0&QM^ zCkq+K@r1DC-f8*WH;L6gphgPG=G1?(Nh_@I$v~h^qrxbs?259fl?>&S#BAoJLcBr4 zomp801)F{U8hW=dn%+A;$fSAp-u)!mdH&G&&BTR}@< z?u9B=D>~(D`x3*4AOww<ELVW*HCHO3VimB0UWAW&HEMKR!$fc$(gxKsnI*9hwvbI%I5S~&#*o_tviAXCO>s5 z!^$0CM_MN~;BBU_)U*`}sA2v}gI)Uy7@6*ROuEyg$14;TWUzIdw!Xxpu?Vuexe{pY zNbj+J)rjUjTzgc+w)c|@1X>FME*>)RpdaUAcuV|U0!N$@vHc&h8t$~TJGn&U@j8?) zewl?+n)?WUq6VFUF+?k+CDf?s9gXUi>O1JcS;qLmFhj7JL0Qce0!@&2yxU z(cb<)BCbWoOocl6!wokcC^E7G-JVOLTfOhX9=45|-*rVJo7*fmm%&z%!?UvcE#lSVe`Wfr4IEM#LwT!2iFt0(Z2)<57uOkSl|sA-h$5tvg{S& ze)^NHL?)V1T0bh>QR(;PE?AjfoZ8?C+i-*2PSvR+NKI_xz9|J)38 z`Cb|(ER<#yt?Jso44VSeP2LZA&e$?8G2hQ+pP_XUzxv^4-`W2N+Z?Mjk+){7UeJW6 zG>iehJ)fN4C}eccIlKw`Zhjn)%Y3~V1-me?8+akB$qVoK-#k&=6@yYo_fCLz8?i6f zx3|nIcfbeav^alwS&Duk{0`AX#BMnZM3|}c2a!Da_CkEPZgHU5ksTS-jBe?jfkcS4 zo$`|O?^)B~r+48kN!WK7=r_}WVq&v;R@Qi1=yqKt5I6x1tr?_$aw~pRPaOt1G}O#I zCq;7@1VJ!$^!gVxKwKmCyG~2)36k=4Sr7Foob;Zdu7QkH_~J)jOXt1qD!S}Aw93Pf zA8^_y{Uap8?2M8Rnc7K0EQiqLf|}eh#wsLGjOW&hmV8oyec%OAtfP?P3j{Kdjx5d! zsbWEj3CC!`jf6zbvT)~OVl<;@euM%FHN+XhOM(gn?_odC4+q_Vjb}1=PjI=dBY_f%3lyXUe1!TG zMS`XEU7$ehOQcoTr0VZpN%}8Vi0_Fs#W2z3^@E{9Lw|cJqwhQCL=^W-A~yX@g!%NT zSxysuKW{^(j50LTTcUs%pYYHaGKnLMh>Z6Hhf{rJUo3~t9Whw&bvc-1`Pk~rJevZ= z=FiVxtk~b9nzK<5_fnzDD*?rG=n}U?o zd2pg~?XVQY*oR{J1vH`ADi`4<@pb|_;gniztI=yI5?Z0YB#5{WiHVx>wlIB8i$3l| z1l*^__cCt%o`_E4fW$=)(Iq-=TH4m{L$C^U2Cn9VmEX*?x&yKa1X&=hNO)6ilJRt^ zPkF&GqD0L~KuElES_c1dv`e^iza!^ud{kkyvE^}o1*Ew)Is_8*&WQ_vuvI(i*8A+*ZMW#QC9LNGB+^_& zKmr$4Vvl%P*Tec3E3{D1XDqTX5ciU3J0i!$qf-|o%HIR$kzzlMa zBPwGe7RgirOo4E`BNzx;pa2^QENs{cBm}&!z|5G}kZIK8XcIavh%$C}Nm76LY-wda z29Z>L1~#M}!(HY8-d(C~7h>J@dwHpHg~I04pCMJroL<@AzF6kpP~j5tj%3JW!qmVS zY0w4Oc6C8i)e<%-3N!_cMh29}CP{^m$x8i2j_fYgtDZ{)CrD+|0tx+}GMgGPcX@X~ zDZl|III^C;Kd3yd*!v0lo0F1wvQ~gi&+j>ze3)kINhh z-7pt%@qiJ!U8A3~O7?efS8cg6lN`TTjyfPiTvTLGl=AQK6eBztpRV!9?M+JED$Y<_ zS-z^;Kfy_XVhhD;y|c!a+lJ&6#5jVckIoR&=2|4sUi1jJu_{Ctym645TLKYia_ch?YVj;05(h z;Cn*MVJ$_$)p^Q~9DB>;^@0VtC~DIuI8d4DBB}=mp_XHECE7Hh084*irrY{jlT-kP=cr zh%otUqRe$5!abLnq{~2j5(g8+Jii_oK-{H2d^R;92aae^+~5n7J3LA5D-Lfd4vJQz z(Z~5}M-1e9oxXE@aq=VWrp>@?r)o0@+o2&*R$UWKDgRuA>J!8wczCCV%I|gT+W(q; z$|@;jB7~(Wh&_Sm-_s!L-b#8D@%#lRqpF(&qx)W$gukqO(C_a2rYW9xUEOo-P1ex3 zb7M{SOHDS~YcWyTP*;DUI`Y~05R^9})vN{TsQECkoOV+?8NkzCDjdQ$gfNBOD8es?4dQ-QbDiLa zq0rr@ZjIQ5*selDK^3=~y}O6Q#V6H?(gSS%(dZ z&WEPceyN8SBT?18SD&Z{&ZMoqeYt|eA!*7ycE{9SuFyo^&bQ;zi|r{A8xh~7I*=N< z;Pc*w`u3E@JWxy@hVvNmj%W#X#Eo`^fmkYmy`|@u+tmRC;LHuMi@MAezm|N5uz^kg zqw~w|(X*k^`8Kg}a|NsZ3VhGS^VWS@HE&!-rvqQ;Ouc5sQFUu|fw`}FYIXy`g7fLa zmG#5u%SE|M>&vP@XUFquveQP!_Gy2UBk`Gz{`u~p4Jqru%vd)&*@CgJedg2lO$8W8 zKkdZfPhvb4=fv^RRK#46Wh;kIjqDS!QT{D#AgtaX@8WeWF(fS48JIdQLUdd7^rL9| zw%43Bcz#m5$GA-tl4Ap0@AQh6j=mIn-0eYfMW}nRc6$9IyCQO*C&njU5pq8D66z6+ zR*B8^Dw(0T&$I90rvXx_yB4{5#O4(sew@mt?C&mo5Xm&jyZAHdu$_De!s+*5V?vUyOtsmU6yGZgIYkXe^37<4i2aQXwZ){gCk=NL@qNFqz5|TzDQtmjn?3ON0m#1=IhJ;O? z3+g>8ks@F$qT=Ss}O^S!Q znLEBY!p3x-Om`VWm`x;JYnkn(qqsY=f-e z3gA$oB;>b!7v$l8$JRf;W3@)-^mvjz*(Ov?TT01%UAQpmzI?c>h0m|=hWwe_Jx<)2u1tnXvGSn*`${|1;@yVi(bz3 zE{{={^!rA;bq^pO(m>}77WitQRLhT}jQRq@j4_?CBgj|oQNy$t`xIe8q9sfpcOFaBdPp#{kJQB2UK{82A6v6+@Dikd z^gsO%3YPZm$7^fj+oLTlshIA-7A}UZM*VwnJ-~&HQ6P1~RooF^JkLy~wkBVtNjkdC;A8$`d zmo``5zQc9^iHxc84LH6$2raand|eF-Yl@ZjwltvtrMQPDZO0H?Efkd1`LBVkZP8lO z257VkMY9Th)C?=wuV&t$cEw2}|ApjJL;?~%K=Fd=QUHQL{{Q)x`@}%Ofu=EO?MTat znCi^8IR3H{tv0iGX_^Cy_2`(>(d(!|oo7CS+S?>C%XaLXV%IE?NLLdUAv`1{QxAqnMRPzT$ z3$W-inNC@q{K>3m6nTB@>DeIj_orVNum$~6m%mW4F~zNP`P`wsKXCb0DJtUo@)Pgo ze%k>p+bRD<^X6^ef!A%BwV(dza$5;)isBG5*@Cv^M94^c`7vuU_k znk!(0rK~v%(|HE0JWF=+M@B zjO|4LzQNoJb|44Pmm5SJg&|ZLL-&sMc2iSek-eLxrdW-RrfL3;Ztp(Kjuo5^v-nXS-Cj`~14~(hAqi6k^wG)OjlB8W1FF>y zF(=YJKx+DpKS?$43`~3fj;G)3tD0=W)f5{MY*}vQEIbh7sI1(aCw$4ONao|0hDPkE ziCK7dA~Z%eqF&nsV;YJ4WX96A0!W9n-pFuB;hj{BYSMs_@Y@!>b}V2H!w$W6W=WN( z_c+72#~h;uB`XQj4x>hnU4u*~A9$RP= z#qjV{@*Ojda%L!s|3%tc2gT9t|GL3Fc+da|65NBkyC%51Yw$oLK@x(y69^LA-95P5 zpuuHu*V}pb{++w;K2^6))%jzXo}Qky*4Gw2)BRabu7#5@GA}ryYS94{xiPy6EfpfQ zu}P#j+JqmMjPF?s)Ku^<0ea9S^J$P5#Gl?*YhR;(x8xcZndTcqMVr;E2zXE@`GQV20y+-7 z4*#TWBLc_fh@QD10_XPSq51;sBicA-)DFuPo%vs{BsH|a0Tig^gkf;1ybFKNTrE2M z8|j~&rhKtr+(yR%i@@kg2jhVs{)NgDm4^WU{66}nWeN<+G||4YeU}NIOM*Ej6&Ay- z1R5F@76P)K1s5Wh3Xn(?ErOR_ScqYQID>m2E<>R9BWg2e@ny0ru>hO6LFOzI21zs&31GRR zq>Mt+7%t-{R~S*ThK431)i@6xtxZt!>s`sJelb|p7Rq9VU6c72gkVsFv^20N<|||~ zXYiY$ebjYmW{L~u)pkOm*2oG18->9y0y$%#aN4vKH)UG-ovHX-G9NAA5a3rQgohE| zNQViB6QNp}2`2bkPujL%_o_y9!yP*#1u6 zTZM#bRi#-{rbV0mJ7&}dd<%`fjus(^pqMkwQfrso(`LR7O9Q4N;HrAqA2zUnO^u{l ztAt)49Q+*HyL>kURI5tQ8L*~I*~Jb}@vumzV?d7$ynwvwqQc-}1}2+e5o)rt^FizP zy19~6n+Qq>1xguII@o>Az)$I}1Y?PK8i!M(J;JrWh2U3h_2a+HP9~?#b{qGz2?~2% zlVy&HH_o^8tuqidQQx(W;fouNUG`(<0)+*+STvF@NHuT9mEeXYQm`i?@&u$yu~%=N+WNe_P(s$qHBljfx1)Gu z^rG-LKlqY}k4!PEMz2azLn0$AkB&@1Z{zgWCndVtXCg0R!b1KYz&=iG6Xc%u7Gl?T z=<8glT2mtOBBL8Vc0uID&=oF;`)*bc%RT~>%tm3E!US^<%yk%vM9Dhp4}J#60-Qjs zIVSwLmyB?&sE_|e^q(~y2^`5!L0{tTP8u5x4S|a>28B$p+GhEx zN-Y>~ld8h)3KhL*7`5ssznJsb?ba-cKe3kJ;ZI}AYW|8-64h>kjmCK+#)T>;V5(HUT8nQe{$yQ``$=$l#~ zuo91M&JRDH)PD$e-e*+t`VA(`g_FcGg&Fz6=P|HP7&NQJzu;ERl;E)oDa* zBpKl$FgV_PReAoQFYb`{EEnKl;9cYoP~pd=H;KS3!49XG4aMp>Q^6}{fPoG3`vlG! z+wflU!-xP|K_Ol(UDU35Hw_~U>~6KiZ_;c)XzD#fVhU@(MKw|vh5zoG{(U)r*ql(Y zd@d9&bAs@B5g4}gKJ~P-6NaBzf~ZIc=%|xp72+@fhUQ=z)>eb25yOx$-Y=+#zyt{E zg8L%4O3L7Ajabd4gTTTFN(V=X0MA7;@BJ7a~=>Y{=M%>L~HD{lmVN(!s)Gy}BySB!DGMFt669^7bkds>rZVU^9Y)7L2i{A-Jas4WlD4 zMj1>Mr2O!&2oG5VC@doU%*KECW2?W{(0q%>N(_Yq1D4!hm9dSC&_fP(K*LcX8)=Us zNlWnr|Mw6qz~%3}VsbeM&W(ijW)hKD9abC=WWCkF4l{0b5{d6@mbzj)bJ%vjrhA#= z3BK3OMLCsM*w?fe6?%wcK~JxC=E#Sd@d1599W?;LKw#4ekArI;)Hb+f{#|RO<7T@# zv}(ifsJ>08-WLjm_C}pmxcmy>74o~D>YjUk?00VEF6=}=H}GKsO^`{DVTh}>@rI*d<( zufpm3*b%+&WHWtDG7IKz_TFt{U>91$J9grx8MGM?NC@qmm5ttMozrF+@*hdJRG^cZ1jb8i3$Z+ZEumI*|s0-uLL zeUU!4JGZy1HTJjV_1yvn=AnF(inb;_qW!v+<)zlN_cRhz-{|A*&>`$*P1I^$Dbr+Se>*3T$E!4@z9*-1jppYfs-K98t1@@o&xtOw>Gn|x;d z0^(mjuE^5r>rb z3>9xRSQls~;vAISc}4C!@CWM0W_xapo0spjg$L?W@*p@qP(;HS)j>#%Q)4h!)2h7w z=fWrTh#i?8k6|81j)S0@tWl0g(|jmB?@PV5(GpAd{=<6>WHEkzVeHwA`!W`Ip=maD zh9d^+7+)_k*6A8g*X70;0NK#ChbbIdU5NC{{oeXd-@YN1IK?XtgJ}xxTs zgUrulwI|ht^!f+6Gb~1P&F!9#2KB)z%=fgA0S7}GnSvE19b|X9wDdl5^TWQcpIU?T z3j_4mm41!pmCZ-Yjb)X}grto(5clI_dkwuH6BrO;YOb@eLA zz#BhOcTq;)>e(@UlNxWYXn9plr5RCo7W7z-g!ecK)=8a-H;(cZIob#9%^{6x@b^(V zd6@5C@6|Bt*8lt|naAey`KT_Ta;$AOAUq+!R`eBw&=#qWD?njI_<4zX)TmKINIk3W zKIuN*cJBS0D>p^+GvGHQIhvfxM8H75=}NL%O5X}DA>8AAO4zPDsjnZhon6mzfM>Zn zLsxG@)5dLZt?xEj%TO=*r|GOsZp8mx08NBr#QWfv_l(1RuG*(=Ud^xb^5!51U9aL> z&S*#ce$J89^IHyG`p+d2DnUx#WW zWYzaUPa4l~W7j63@Ku_I9Z`&FWTPKmBKv>jt?0BNQM~mE;u$!Sv&_I#EDmFah_OUb zQsL$p-0!CW4?E=TkKtO6;R~_y1wwI=!*?{7caZ^x!&h??nugC?dxp<<>vLJ;S>U>m zcYtDKRJ-8wXJG4$WYjc1Qk8iu>JIv;^o(BFi$y$~KT%W5)bVBtPG=A;LH|DKQdAb- zZO%X^3Sy2Pv!^?x`rb>pLB7VabnZGIb5;7@dwO(a$gh8r_{^`LQfT6iaV>27Qh_T} z+Y-V^mA#_GMOOK{yAM8|MUk7l;b2690OS7la}oLLQlLKbk5*(&!|nCf#|_`;UVB?t zxWWF#B~NVVfihz6`&s|v1Iw+@&@BY~>PJsEi**mQS~J}z9|2$@qg_KJLDNk-yU%E6 zo!ie_>nsO_+2oANXp8A5b_LrSuYaF1rh)+{jFiF(qQWd3iXFP=%k0xBxHtkuf9$w= zm^eEB-@wm$OTU@z5W_9!kNh$!3oGZv?i1e)GkWiDsYN3?N4p&#E-L!WGR_W|J2p?` zjZ8aSUqob)%_o| zZ3sqgX0%(<3^5AX=Dlvf24?@=06_SJI8S&&DzZ_4#6@!uZ|DI-<2mty1TGWK>fxf} z-#wezB*3NqNinQ#Tu-X4Z9ILu$nW=+IrXHt-cz`p>Ob1#@LNVoR$%yFrjo?D^_Abh zh--=N==0xsK`bm-!KQ8b(1gjF0xOi1gslub6pdiC4?^a=qO+@7cQm0nMD2Xx*XQzq z#6cOMt2cYb|F-M*deVP1QSi`&#`+uWKl>RhZ+;O+7rhiadQXzmxK6Oifx(5GdX;Hd z8*cHi&$u$if?|X2PUg2!5c>Y#hK3r#0{>+x6${n>gw9T3mahE>R^g|J-k7f7sXV8= zpJak<^~GC=kKYV)>S=McCwDusifP69NnRFi37hsmgJOHY_}jpXy&d@fY2YLW=5LTF z9@G8*$C&9VKj)oCjEN=SWT@$%Yc*3hD!fNq<4fB6uG&zRyKXE7Z`^R@8z#T6P z7^Huk_wOM6%)$kO^p7zquyjj)d@Co#T-*ruSOT2?&Mq|yYyDBX!&~aqcFvI^;Q!m`wkF(v z2PvfeAMgD~ilZ2C{&y;*=p6h&`&S|T+xY*(1O@*8GIXo{N5(a`gll(swyo=iWX<(M zkv`{!rsb)hpX@(zClMC>pSbfr{BM?ez4>oPpNd8R^GYm>t89)Zi{)bBmfrV=a@nf95sRaP zHsGbotJtxkR5|JB|M|=lz{V|h!`f?uHX3wMX0Pc!WG-AA0G%VPQ^ zmoM($MkKFtUCHS`Msk= zx`EyMd`y;2kvwQ)FSjh-w59aAax$kfbWZTU0sED}C9u3NYC#<ljy||wb1zD z@$j~5_hnfV?BiW4{3k<=OZ&XCex_TebgK*Y>1uFTW19K_-feQE`5x*1?&-l7F5EpX zed2MO!iO__$4H`$X!=fPF24Y@QBD25!1IsC2Z1GrCZSs;!u~@8-O;n^9EL}!G1p1W z7EUw4;J1i_Ri}JKpOEQe-!3Jen&|{9hn@O(!}kR++oun~OCs9!QipBbRS|tp`nQVo zTLd(S&su&ztS)GCx_fFjh3dK98+*VFV?GEb&ol`TWF;lg``YJ zZ4smsCe<6R=@kWbfA+;mUR5qW*VQcF3EPU&2C%5b(_@-3I#(W>-0Nox(r*u*VK{y_ zQT}t&-zOJyV|#Eb3A67#V!dc3GYSj+xqEDeXy?xEGg`Jcm-(0E>na1Yp}vEw zZ8JHpZvwM}?duHtu9di38L$ql%@hpe(5VJxTPP|}u0C`qce8Q^v=Tq*AA6}%# z(;_|WED2I@bk;xXIprXzQg?gd4mso<#h+mXw0@ZXONo+J{oiZTK=pN_sOn4ojt$wy zU`p`a2r39EMjgJVC-Df85DtivdE4ZlvvXCsKMBA5r6&7fxv8jm2gj&&cX_{@DkeuJ z#!!FJ>D}p=hd+P-_x8(fM&p4W?`J`ob$dSDmpBjH51$3CSU%SbHaA;+L4gr#Imdzr z{67$jmIlAqkq53JQ|mk3QqB($Q5pXJUCfL7F&5dxb8+l zxXjrncdTfyd^P>ris5Gr)m2i^*SCv5(Sx!`=Ck>T9HfkI#sHD`+T<0mdVD)F$H_E^ zs=Fe@j#h+f;&kJLH>=AR*(t~5lb`Zb-rTNa!DX0^!C=J)um-pje^#yLXPS(e=o-fV|03&2S-q%mZx$#CvBmF*0Rp#Sd zfwS38kh%j)qtoxr*-`p@l$Vdf$88T|pWKtpN-s4!t=u`^xakp(f>My#^1=!ysbHU0 z*2V5gqG~I$^9oN3XQIO#*^yKX?>M<1wL@IcsAAlpOEEeOqu8N`3vk(_2Vje3#=Pd8 z@9ET!myvc7uX>`oqK=&7PNxyiydd>#pGfbxXr|e$hB^BxUvp&eZ`ZYD%JY4BYWD7l z>J(3F^LV%KTC@|lG*523>ug$0Ha!}>bHO)RIdb>2QuauE_WDg$Xc2DHRjeYDgE=pH zF7B*0iEq{3v)|oQRF*bjQ6~VGaE((un*H%bxpl(KpOlS1L|S~NO7~lMnCY3?(@i}i zA4W~GaNwpmjN3^s8$gSM7LSrlO(L)MQXHP?_1LGjK5ET&EIty)FWZi#GT-ag8^7z) zmm##jXw29R)L+y4P{74}EW-|nIZSOW|0*_}DC1h&Gn}bcY)&fPC;*P#qbDG1=LDOQ zql1JMFP(T|BP2K~NmbhDkZ5O=p~2)eu?S&1=oX)sO{OH27HDadDHMOw*XCU$PrQ>V zvd9rGR%Qo({j|el*I@rc$BSZh)6mqHrwg{?ia>w$qi%hRjO zIgNg9W}A_Ii>a|+56$_$WCs%V4it)TB%>5mKAAhRPwtJulj?3 z9v>UN8DEkKxXKN1*0r^vBSmByj2@ZjTK0X?3({kvXgYCJ(ziI`qoJoTR_HV(WN|ud zLO#QEMp3Wm_VSA4PXRABJv?X^u-oIHI zr+OVr%sr5jcFo&7d2N#B>3G?1lQgY4d(7~wuIVcRCHk@ut%I5ZNy=|(j^i(_bIZ>m zNuN3bM5;)D5~4jG3`tF2rUVLUi>Z!TN;4nKymZU{1@NqF*bpJ;GQ7{`HvK5Ausu&4 zb977{@csSqcSY72hI`6Hth99i_^~T-k?4_LjYlc>&ffN1NfHcA!IpKS+kR$qTHRLRTiUamnBd5?IvZ}X=PaqkBZ zO!yEB00i`Wdx4vC<*et2IUM_UEKxTBar}ZA!4IQm#!ibpb_esV~ges)}at8Cr!nW%&YdS5o|3XzvEn7YU)Fm_8Mnx`AQr) zS7D5!y~O(Hxps1U((y*mo1-g+$SCA@X|Y6P)%%Wh9?W#a@@h+*lspTlAiNTX8ZSw3 z?e5vWZ(oF%5-HM9S#QJvS=rU|toSHGN0(wks^Dl6V+%78tWa^1bPIC|%u~{O3o{uE zbz&T;l=$;2f;Tv1Xxx zZ4@E{qtk8OnFP5j=9B5xY>;?~0SmF=88<^x?(61l_9YXeIo;TeUgGatf#4nXzXX?` z)&nZFV5j0JMUDMao5ND5q$qQ{4sG^i=P$Nj^aEMAWGWy8lD?~GiO*ya%@mI#HF&y? zpR)lM^`P0$F4E^sE_J%R#PmH+c90)FH1+nw1Cg`0&fIq=v8gMwh8{$wJGW3omUAzM z6Fwj2N*$Y(6>)caDSAtoV!=GlN&o8~p1ald+Rt=y8 z1r3Q*Z6s|I=G~S-%FJ48!CAP`WO6^o`G0AYq zUqmv~k{l3Zg)hk@^*`V_dE~2+NNO>ZASS`$aDJOLpj+c{Vari8h;pLPv2eBhWL$xZ zx4bNNJWuK&ceDGEEN%TF=c|TwJpIH3gsx4x_+Q>5?MHkFL@Dis883>~)%*&OGTlwg z{n3NZBjW@e?)A`=_0gB1@S+d-(c_ z^_hx<-&>ly8$G=H9a&5q)*VY7D+e~cs;v-i3?vIUvagv5Wz_&Xqo$%Q%{3pR&zSpc}0hbo5zo;^bW|B__b2v<65>h8K zD}cEyC%r_C@0~lv@fz2yz}5^CZpM&^cHCSmN~l#6t_e5TFS2>PhEhL*U$FF3pD#|e zWcIxle{bOQTRCKoR}kj_C&d>{e0RyQ&2#YIyT>a#i$P>#(^ZU6mArSObW&N|Ph094 zeHX~nox&tH6K(C++oo@W=cG;v<;6XI=)l7DUVrN!9c7R7rc+z9MOP0wXr#gcBlEl2 zj}4`q5XSB_`^5FnK{do45j>)M0Rz)@%NCX2#l%U*bM0T{&Js8ILhP!^`Za$1%_{r4 z1ypW`U2qCfG0)3a%c=HtO8=b8rc~H~=d#KiO#HWqDOYJ|Eiq^^#++8l!U#YakwUfX{d7fZ9~+rlhY@@uw|jJNHH^+VP6`VmkE$D!K*tkFiqq-($&~1u6IO z%F=M<*=K)L|50i`DU%)+#j2xDv8WN0wOBgMBb%q==53y_b&E9EiJOIHVE=5Mma=|7 zRXr5Lu(61Ip#!V&s_!@v+UoR1;^(LHs;sm3Jd4<|WHUc!7=epNXZxs}P_39r_*zZj zyGKrFG;ONeBhAq4?)8PYp55iwbEqDpjPfX6<%u1ta|m}ZPq#LTqE)m-AmX}$4FvCx zC_hZ9nyhXZE}1@6x_r;~;OW-CxwsX~6Xf+~)adH_XZ*Q9ZEl0G>R$rfPAS~D8j75@ zJ9Gr5?^gZ80bkbuZkGUE=SmS}aoeS|Wu^u#{>4a6Ua03A0?04XEt9xNP1nkdB35QD z=+~>3R-6q>8nSrs4njC%e~8E;n_Z zfJ#T^6E0>a4rZxmLq12v78LxAAgFBYhF=m+rT!TaCdp-UW(ZX6OLc{F|Fu-t?9!Gb z&wLTkhKHb=v1Nf+*N|9GVbm<}{k*)D>?-l%;A2Zfb-Cs_msA@UFGR6nuIML3l_fs$ z$sdgi*WU;ot`fTm;T8cb#S{F*aZNbnvRT2W}ttWzxqov>e9 zv?_2(%%n@h4>!?iFK-eIUSSg=v}YI?KYOmK1LWBN*IBgTjLrfN1@uQ{v6-`C!`sX9 zvvbK?1k2jHgPZHs&i?gxe&9L$QxBV|BjjBWeo5~0XXB{bV)x8l@t+>FpG7qMM64bB zgl;YKVAA0B;jo2Kg)wi}?*)>6^TYUDkopahSz|h=)6jpQp`&r`SF^eO{k$$+d^d2kZ(8qcK>uL1qd8>aa%|{s2Fav^usuLe( zu7I!NUo{h+J{6$^GFy_nZ(9xX95ocZUgNB^?eilK?yV^6uL^ z>Zjr?r-OP+(f8l=iy~mX-g)ym@2v=w9y4OzSJ*?|gX*uddI1ETw`aIqnMjVf3{>UhZ(JQVt4!hjCDVrTS z)gM8JZyjGwNQo&#b1!vpTmqtwZQ2M|N1C|2i){`vbRT`5c1rGml#dR`!O!#)@82Dl z4h|8WBGD|DspD|aUZ`bQI;oL+lZ7v(WU&nUaTvx|RX;;9ho{q41A@+li1PZ?^A#Jn z8L_Y>94pBv*&lJNw%Kw5Wh(1U;T1~z@7|akJ|ZT7+r{scUc*w@0It8uDJgVZU14D+ z7WL3V!%!!-O|X%}>O?|G{{e26=qgKWQAz|^_wz>~Weu$QxX4l%@r`~1 zoAO~eBAj@grDxlJGy#{D!_pr#cHzogK!p{oTubKR?HF`^b&J*c@jr1}(##-#sO_E* zfd;;*^Br&qvuPWI;t2|3L%vUedRB3?w^E*%%eyWguy&=o4k}5KCh!PJ0Qfaii7)o_ z+C8Y`#%VhCpeXc1ap58fCsXh~j)W>CtA{ey8Sud0kHzi51dG&;EzgxECHp9ClR zvr3_=*+r04J0)2Rt*Lz26&bx5Zv{nW3|~b?1)d8B0y1w!FhOM_+?lVQs>nnMuc#;m z3DyZMD1xH(!~w0Q0!6eW6DOvB30#&V6mO+PCPb0lN9km$Bt@}eC_Qz#f9ipponJMd z4w+yiIh4VD*;Yd0TB6zEb@cFd9P~#B@O4D^1Xy?xB8ifl$h4{Ty?IFkMZDgF{q6pU5=%d2~GeIRDntLs*(hEqPpY7 zS194EzlaW20A-Hl@H{E#pbQEs5YdAs$dApVRcKmH&-8WSilteLkzFx#w`BnTtxcaD zy2(G1RvZvCCTPkvTSQ?TX7;S@Bs%t1wgeUAZ<#6Xf#SAJTzaQ$ONIA_;C7FDC4;yh z$lt=}IiycQwMYds_Ybqld19DA^r9s`&p5}BZxv|hV5ayetvI74*o#1siF%Ss1ug-w zkBuQVW+$v;H&_u16Zpjv2E>cyfu3?bc)KOPOVmm(u_m*t&8YAhMs&>N_s7F6nv3te zYkzkVxl+&|RIbhkhCxwyO;N)zlD?!?CSTx~w5z^Z7Zss^Bo~7^$B-{*b-P4QuY>R3 zU7#b4{ng^xhsua#LsCjXAzvggh2jV{TyXq_A=|R@JS*@E%rS-uKlcwyPsdjQlz*SX zQ78RB#rV=}GJ4J2|0i_3PuA?r8~gbzJ^hTokR@b`}X(UkbjfA-1z>IyL$eTyQKGX zDaJ3`zLn~|S_`tDLPV%^RiXZdK{VSd^5IoFHiwj2EfSMBY0G?4`4a^pkc(FoC_*5O zMZ&(I1j#O;cbJbUm~YjLHY>2tng2~KTNf8D*^9Bsh|5&XH)7K7t)s$0%sb?stpG|k zk;5=R#F+Uv)!+^;&6q;-p6?*3E8{PzE58~QBy~Oh2dV3>{@YJMO3TKaHPB}qsiYs* zL`GeDO98M165PJ+f~c-h*smQRs;lXLM|H)x;B7K`u#nb!^3UWa#+E#bWUu{sf#)JM zMup9T>Mb=EUq*ou1|@$jKF%Sn>g12703jSQJD*} zU7&OqLx?7}LXjp4x`nm4BOo(jsd+xSlfB~|=%c{Q zPU+2m;9Ox(2=5sXP&E5l-sr|St)uR0i=Ke~uY0>5h~_P2{sx?~|IO^GDuVsX>>>i+ zt)HQFcR};k0CZUXmiQ-!Yp_l-TaZbuu%cuCzF$x8GXE{p_=BZ-O!a=wfbyv|KcYd8 z60&_NP8bobd~<29#46J-a+$dLpE zUgdO^4?@v0#mUIMdOb|4!&>SJP9EgLn=&5wC1P%`=c&DsYvArl8F=DQ^aRhwqRIhn zw=@!=6Obl78jRTzTb)~bb^GvzNzi`ocVqu`38!6GSZNiG zXhdL3Z+FL)Cl{>3x43_L6{kz~;gA`PoJ8!IjsT}SVMs!fmv#Z8_?9cd0U>fD?$zqT z;u$qA44YlA5{bdgc@F-HGX8?28kcK-+M9xF$fKaUdkl5W-oxAR_+$K3FB=Jqkm#?s3No4u0^fKkY3Rkw}fzMnJnxZup-Wa0C!OI6*23Ni#6tmJzt z5?dGT3a=3@8Y%mI@w{jceHr5_4D~z-LR%~TuLX; z*X?Wfq8t|A<}69a72oG05N#G}P9ubEl{q*STCh*%C28PSl|f!1eA=irGMBZTMEEu?wfaX|L)sJC*FqIX#>HWDG?yp`6>MJ7qIUqzo!@;s@gs@Ke> zCHLNA<3@-hT73ztXoGbwGs506&`^_03ij=#N9adG7R`g?Y)l~$(GAC~087SmshqRiNwyT1L@rl<0g z*O?rutcey;++(K*d|T4%_maOLAbaXICe!LB_DQR6EA}0M6JIDIu@)jLvERP@om{*; z_UY`Uq5E8Ula;;8VpAWq$wrUAhDo@kP#8LkpY_{%Q-$l$#dp|sYC8C>?@ANX-9YNw zo>E9onxKh8QAB=TyNT?%a|>py-O7>C*Pqtzx%Ks*rr952f!)B?TOwCdoZHFZg`=$M zd(C01(C$CAG1O5cF*{SEhe1r6k9tQIbqOukrr5UTSL%Kvan96rL}LWd`9nO?4J`4- zDhNgn^~i2%TdNzjhY%F1tDDIJ)$R6pe{{ENA-=~6k~Xi;h`Ret1YysX&M>MM-P za(FO3Ki8m`E7<;Mwp4E^Ok`i1pw?K`ucv)Cyj$CccHqE%L<+tC?P+YN+g|R>UFmRj zT}QK&P@`ys?1A^@DJUsqk(m2vm~$`3fx{T8@i`` zlh0ITxq6ZG5;AD~J0t&Pb_eTY_0?2b`_l8{aa8-mXOE}Li|uytV~_Ss;OQbMiAL%9 zt`cS?6)Ua!TuI)BWT zZ|uQB=1sd@$m|nm(%jZ3I4Xh={ryszQlBqim|XAfm;i0wl@exQuVArgwGsw@zVyg9 zx&PMLd%}<0DXhOn-hp6H+BZWs6}LU#@|l8kAqvnq@dS*43b$blUS{$|)xhD}dpfDl zMTpJ4g7X2T&U7~)$VOcoHS()nwxLVCvpe=ntd6%UQ8%*tbH^=J4nBc|$KBzBn8cSi ztXufxiGmwnJK{A3$|ShOvKV*VB<#Bu1zGkGCh|P);*s^Q6YJ-e(?dd@`k{3W9!T?3gxfD4tKoW@%~-FReOHq)lP`u@jZO7gmUSK4-x zAZzI`u(Qh8{aAO+=~s7+Im8=SZ+Kgt^jLQL_&DC*$ZM!$@A9zd(pk>6ZFIi?Thll0hNs3ve zBO)AK_kDo@!=G8X?yFrc*ztnvN|gTBLk?F`#2;n~pdROmg^)KGtCa(DXRN?b3A`s) z&>o<=XlMGYwe#>8mMn^j@(^8S&m(x3I?XFmPxA4?ye$4ER^wHRiCrrmL*jHD*_XB`?OsE6+>0Op(p-~6n1_;4oy2 zFKx{jM?`#ocJ^(KDidFGZb>yidIoIHi?lV?@lBtFNm2xBOYUS3t^ktNR<^e}KhnqA z7lFmO+V^a9NYCeMn58i|f_qDpY5?KSw7@GF+ylzMYN5A0G0gBqvM9|Wow`0*x742B zT_%}RX}!oLS>24O{`~9>`=QeFo$C%+?mn!eCJK28K_NBQC^zB?+juLYGvauK5PL#p zR34C7rFg=c?)5fzF>C1}A6+(z_WR~H-49?`Iz+Ga1iUF1Ek+o;Ygn%qqG?DK*>2?4 z4WGv!WV&zo(Go=hs^J2fF)2q>qpzHUyvT7IPM1k2-x3erJ`{iT)yL&uLsZAf6op|z zBMA&lef#QKYx_P+Nlny>>G$Wmsl~)>dKsOM@v6cP7q=J7$H2q#nD7I>&h4Jd9fa~7 zjNkplXYVhh8u0eH(>j4JHqDO`WkSx!w~^yf&*vvo0CST37PA&$=y&rZ>_>%|XWNXL z4v${g`7Wq?MyuJt_s?7==TqWwNj;@zRzvMOlLW4DG~f3KS0V1Ry!hNQ7l@151hd}l z_g+N9R5?NGQu~j>&+B8r%?7#8F~d2nZ!Ga_sCxv{+tpjgp!r6D?p2&pT4CjRSLUQa z{!PjRUc*n!mh!$pUo@W!(dTzb&GCH9c?P;GaSYHNJ!$V_wS6C*$+=zZ+jkQb9Llqo zO_d7t0JFK9*Vy*Xuk<0$*st>D98gKA((i8t_{FNiWu6L+MgW4Pw`!@k?Z-0*7{u>KM|R~l&EeU14qj7$jNSU_#sac_{~_+ zsqDWxDcpdY2)+JltW#LOU+eG@7dPIObC5e2m>r{Uwu6}hT&iW- ziSa(PK>SKwOTjPA@|0ljPUJ6aF45+D4unj$bV8ji7wG+W<{>p<#Id&P2Js8I#R=T4 zzH$r^I9wOBNu)hqMr&J-+YOJEFN03KKhbzYh7&_{aRzmgQ`hCU%eiwA0w%x7YVUl{ zRBcd^iF?|a563|K?^!dIizQX0ZgCQF%_F*nGM*6f0<}0=4Cd& zfmp=bhQR)!qsezDKmTo%>ql1Jp3!xa6@rWU35DK;O>v`0_SXY-(S}#iM;_kpJr9Pw zcL4Mf_I(`AFUGXKj}4w3wJhfFp-pd$=~sJf!cPibLeI_f%5yCTl|rXD%g&q;rb`9n5ZVC(2g>Tli{Fz@kkR<}&XXPG>U=8&V zC^FY>R>h?0)(pEGGv0Oxyjn+^HTp(S_zXC~6n;@4qn~wvJ=PtZ1nptP)f*KP-@J)O@5rJdB(~dYm@>y z3W%Z3HbI&3nldsB@WihrkXQ$&Q%?AOv$YSz^G2w?xJK_Defo2Lpf$k4?1B8$B8JrZ z=NK&>`*z`=(Wsor$B&xIv2c~R7b}Cp*aa~J#|O{RE%B9+0@iJg-Z7&`Bc3GVYZ_+V z_w*{Hj=r38^pUfLJVr?lCl)#DybRzKE_BJF98P@A1*a2j_MbV2YFvxw95?lxc|z)* zVtP9s+24JZ8LK;CZj=aFZtbb{y>NfN+Ejx{+tAveBU?i;ztY*X7@b*}kWFui^N8bB014Rs1eM`uj=$hEu`0!$rXb_Unf z+`Oy7RGI4Zv_8!VrAf;{XZ(1!zP)uVIAP46OIeuvMFTQ|O3GaFB8#$H&$h95N6O02 zPuB;+&meAhZm;%OosDVMSZ!SZ~8Pth2B8P)eMw%1D@0QQB)a{7~* zk84iu$25dnM%!Uzg-_i`DtN~gCdJ0zO-h`*Im4;tsVD@pG^<=bGY_^i$yym`=fnmL z*uK0fr`D4H_>>VeBEV|wbCfrJPVeFppBb9CxmjoR0@n;LXX>7ABKr36!<_tWdi^`P ziZZKGT$^NBGJGX$kwI_fFF^8+qqq#G#Wjo2n!-=j$nxIlKIJ}o;u?rmLQAIw0`e&M zQ0hAm6RWBf5zW)5AF@Db>E2qN1(`UMWO3 z8%95%!|)I-ue9IIC(9(c8LYAAE+)HL^~+8Ah)FcOgpfNVT;Kt|Hg$U8=j}_5?Z5-p z(k~s>LFirxgsw&R^e+e2v&k+an!5}? z@Ntx6^2S}{DFMwfMlN!w(hW;2UL+3D|QJGnz z;!LLSMuw+qTv&vg>Ag%bG!F#_;A*wBJV~3@Ea_+-w~K7*I{d^Z4mO=@N_o63#khucmE=ch_|Ct_5<98rH2ku zUtCPpd7a3Hk2+E4e@SiO(i^~4Z_J@{Pgo-d-@^Zo6YI?!G;ZCrN}s{jHB5b$Y0Mlf z=QdgZoaFXxbjm=Zp=Aw&#|aG_?7z{p2(Vjr5s9OW_vaI}o<}m#@LtpC!=%?uqBGE; zRjz!|BsbWBE+H1AVA<=2KYz6_B89~cO;kFlD>cQluM_V(jJ#4YS0-~N2+v=+iluH) zdr&8c@M9zx9WAc{&#{Vw?at2HcWgVWg;@kpmQI|l16jf}e4N0<#pbMI>pS&b)zTnM zUn%*MYEvJ^$hNttuLnbRT zv}mrK3#Cs}5^Wj$x|jx+@2Tp?P>o7yrX31G1ePk{aAK5_i%}M@61Hv7eQR&GO}U13 zi)NW<#tIpPnuQc>md@@C&l=(aU;VoyOug*hTjSa|r!%k8(Qk>ko*mD^bRK8cK+==M z=qhVCR|Fv)80lNOn-K4v|em?f&J3)G}3#XG+=c7WX zN4(`YLY{BgZqoOt1SvA;F-R@sorMEtWHWS{xit^*+0~w4 zyEN);f;t{(oo(1hhuG2^>$_h=nq5k5)N!~&%^j`^IH1^}k@L=>-jjDgdLw#gs!(b( z1w**lAwNiDU6A0LThW((K?>?iD2civRWX7Iqk_`}xx{jXMk_(i&e~>nl7_41rv{qi zFhI_xk|N|wnvejN{R7RX8$(JX&-?lQ1Patyv>X$#{bJm{B1uh0qO!IB(GjebIZz)= zEN3`#l_Vz=l6hA;?ys{Rz!ANQpzx=lJzGQo7tTq@)N9$oMad-sd-V93?)2lb3Q~mP zc7wO19crDdS^~ioi8@58W1ej35P~7fj84PmJ+klcsyzvyD|oh+yePfgrv*O*7MsQn z6AZzP+9Z2HjXh!Y`p4B1WD}sFeEnyddk_xVo!GK@qV2L>~Sd1mBJkck9S1p^)( z8Cf202=YUD68xw*bc(2rE|o8 zxM4XxRM(vJBIvF*+PReDX)8P^X{SI5hcnVgBWUt()=3EPWtEKn@HGfZKu8_NK?JYUU6dNDO^fB%PLH z?j(?pezB=pzuslD^ml!BI-bydJwba4Q&RUtQU>}p+cg`emk5$MB$Zt~Q zGlYHAv1LNw(LFm*V798UI78NGA=uDCE8oAg{94y(I5A*`q2HxP9+@!Qq0~j~;EYWI zCH2WG0sdxVqQcuCNhkam;TVy>QM#K*qfPRs$ivkTwoJ`UlN;v?nc}Tnf*PY=Wh5~? z#4I+49|Flvpc|V*>(4Ly;P;w~niZZ;`F=_)2DJP+`u2DsQB8kYNT5MKOmW!U#FH6{ zcY}lwV$wJ5ef9Is%EsON4daT4 znbAM179txH8$MVY`4{u>h(XAdXmWiMBZOLC?G^$%+ZKnmMsXDDF5Ka|n*O}ySwA9Q z1i%kYRAHE?)7Ef2)7A-}aaPcVFo$*3lGjrzgRIsWHQ`}QGoT9;<{+#`VL*F=bdp4Q z+kvK7jxPraEBCLtOjSd^Li-S0R%0NjRC*9=IF_sF0Xqg&6UAbW!C9`SGHRuYU?-R@ zO~>SJAFV}YgbB%VxmRWSE7G@edqJVDPk`?qx9%~)(!iU;@);7_bgXIZOFP+a`eH{> z!l24%suN1jyD_H}giNtE&wx~7v*uB}khL;SM^~xsIQxw6!O*!*V@8^Sk!V>tvAQE8 zm1w*AtRb_%)pf?y;IsV~^(kd&l6x1U&5b7aC=3S7DX|C4vu+b$qWfFJN5j;bSpZ_a zwvDJ{V%&kSUOuR7t|0+kL&|#{#Tqn# z<;Aq7)WSB>XBUBR6E3tjN@H6JVotQnfi_)4b>LbU&D|8wf@VX}-BKXW^BBZT(h{t7Oui^Vqy zn9-ih6V0$Dg8vEraSWy&+8|)2!&POCeloYI9U*XhbCR!->*PK%OEbe73ACvfSXTI9 ztjUd9feNS-SS~g5ufF}S|41im4R+)+hsu6z8$myhHoxK8U6|(*W6>n_I_c!A$^1r+ z?sZV7;^y2QJDM`lUp9n6VFgxa(yys2i%4P28ux+E8vh9WL;9dUPaCYSlK?Hnl9oSd z=*7KR59x>t*6|mP2p^BMbTS0dy**vKF%6J?;9{1$e^!^bCQgJ~k%yluVJ)<)D9t9$ zYKRKcK@pi089zaRijfVRGEidMW2U?Y`s^?;C$y+`BWxWKjugMzU>*(_lGw-48FK$@%A$CcFssOl(5A$5Za2Pd@v}29kRR_nbL#tA9j<++| zu8VG=-MozxUBi^_G<3k$5}11Y>Q~=dR7iGXO+4VK!VOmq2i`3;^Z2!&(5!sO7=KJ~ zZ8_bQ)d4$D{BGLliFTdrb~_XeIMNXbB&Cx{1`^*?F#atby;XbSlWDc^z-;38XWzHA)M7D0N+GLARm66@AvhR;(U+hL`bpuD9j zrI^OC|DDJv`rnpo%1InRQeiHV6KJ2wNyLxzW0+ z6EVHdTIMXgkdpJ0Iwz91?Qs5b8pLy>wCq&YJ>;61Cx%{=`Exx1Pv;?%{<~KY*tzm{ z`w(#BhdR!G4eG zUwT5g+L+ldyF&Z|H;z(OH3@P7{s-c0BaZQVM1Nz=+?iSnt3V(4v>VXM2=Je^G2Tw= zMySGK?X$OqPfEtrI%zAoxdbgHU&qY3WoSClSbpEGO-P;IPUQ$WQro=3G^K-%EE7S5 zI||lyV{(WwCcXN|vx0OiJLQ*&hu9J%0nuL~G*|vbPDe08a&Y@G? z+1s7a3`I!gXaxmrG`&%TMWe8LY1Mo{^UJ zdY3}1tu+yOyb8-=57|ZP%lhH2@MPxmG;?zE0z$~M`a-<3fE_*^QJP#?No46$jM;w% z#pVqQTXHQY{yZu3h99f!4WFiZff48__8RgCJwdlqVcUG&O$DpY^;TBU@HIy#Khh7i z^gN+uxnXkg0`xWCxtx98c&?gKrHpbm?d)zW%sm+OdzjffeyZVjVBE~W;@=te_>n^m zl`hK}@pu9l_5JGdrhjnQGv;RMz_tEm>&8$ZLnqO6RzPkE3JtkG)-sv77K25A6CO&M zJm-^QQ+exa+)+JIda*Lc)Jeq<1?#+}6Z6%=>s__+03(0eAcV1*QVbgoFRs66?tqdE z_%2s)&~hlsli8y&U=h)~<9ZtD`pP9`H%`pZNgD%LniY}AAO`L%Y$c1U=d~Ov{%5Cz zn3JAfh6Hi+ci7h63m}%>cNZ1~pz2>!_-z8**vz(^cxL!YD)Iyg%~uVpgo4OUx%ZNi zp5DW2%&H5z)6S^(df{$`bhW*OqfY^%1=OR+Rnn_OdU4ozrwCMEIM&FK=}xEnKBp=@ z05JT<5a=A39*rZ2!*xu8#ig>#2jZ$xOYOOHN9um?VY1NzfeGbfsZB2d*srGy} z>7e6V6QLRI%h*HGngNnQK4f=e0a%Ltv*TZ0VUXyX0a&+r!G`_n;lPN1xP~#eb_tkT ze~KPATD^DkmWr4+#9tN^RWqT>9NjvcDu6X-yv(iB2Db(H@7Ee(Y#p4@`%m$BY6xm? zs%v%b_g&JnEt*XXHz3T7j)7YlZz_FI;{7uWW4s#OW+h_wK~(N8gGZ_G(7UzUUJ@my ztoSE0)zA$;w=enjQhslbF?OB~j=g?b#lwV^KycVpZYNwyd)HWlLNGqd@?Wue_yW!# z=_5D8d%iC<{nh$#YoGsNF<+~0KAfUrzX5SUm;-lRy;FH)h3fse*S<~p@l|l*`wi3! z_pkB0ZMa;MQ;F6S8t#vtlg#y#q4h_cAr3|JO!w8id)!By>$D|^A+!CMcq=g_ zDD8R$J!j;rHuIbc&Gw>KV2>B3ZAySO)-&utm21#V_S|1Qo-{4md6{_ud`Cv-$Z zP@1#Vh|mW0OY0o&*SwC|OoOT=Ej{=$KO`g0?~HZ zs%kCY4Mr33DQ`$-{&M?#8)3E`bJkMbpH#PfM};77U7=jWI=5%k1Y5rr~U*xivw8VV01SbFG%7 zyIH<(feld~3RzFGR8}s0cZZ`JzSxZT{?{0y3lT^B8a)ym$H{p zp`G;gfXQ;5{k=#(Ics;m8Y5IKTz~|rprkp9V!m`%h5#!xQ*2wTr*Ua*h%CRa(Y4eX zD88mSvH=m%qM8LXBO}=qLHhfdpXUwBiUgV?mcf9DcohmZBQsojg#KYk{fiz5gcrrg zNZ1l`$%Hih*?hq*CJv!NV!&k`yqvmb!0imS8G!PJ?X(LS4)vB+YvIoE#}*pZAfVdT zT(^CgEz$q7Or?9e%38BLh@QQ<$&0N+ZL#_PfNOV?N$%nb4N{M0@ zBPCBY%`21Q@&t(wr<4E_a*t3y!G!WDBv>r*E(^6k<)e;Nm4tL1N=cbo{rOY4OL1Vf zgG&*pie|ha0Rogb+|iM8#tnC2<~n(fFU`X^(utKPJz=&qp!%z+^!(TwT z9{X~3O9APgIbO;N3^EBoR!~2J76F+qds#(Wd*EC2kaG<>kS$cXyGQgNc2GJHIzr z&2g-RQ=+pa&;g@`NYO!ggOUHl)y)0o+?qdvgUQ$laad@O%KxE)Si=}&?!TRiLP3_u z!@bj?8~g|s>kmuAV1`B#jT{KdV&qC!50-q!Gy<}M2$KHG3Q8^30kVSN5q~=0Hmn3| z{*rpe%ufAnPw*z7gjT@_%^%?$s~$}V2{u;%0G>UE(NG$w%tsKB05WmV#i4~bBo_Qx zSZRUpiWwt;j#;b>Lv{p%>fh5R+Nf_9IYbjgybC-mp_0gjtpbp>ZyE+j)Sw}KlSe53 z(UQD{fVYPf8h|ok(e=S{xO-}XHcB8=i=j##eYSCR!2^NoP1z5)F0L| zR};>q1!XWsr>iGQu3+w)QvhG0G}H$yEWm{Q38aD)P56lXzG2pjL62ZEW)i5qAp%CH zNe!qaJ{6XEVe%C_2jWUF`K6Qm>48X<@}jV&4Io1ZA^<7+-$4n8R*8os^Y^nEH|!&<3KhPf*v7Ix{n|RL=w3nITLB# zG_aU+|HG+Zy_XO;5P24;Pfb2!&T0kO8^1@MTuKUZ#S)tS0|pgq;xmtn?S$+1PS)@4 zoUz%nvIq+9U^&<$)2yV`=uvF;Oi8%@nd~M+rPlS{PiuzL|&&+CLZ%ktq;QM3+vp5e_YVnl-!xQ8V2_IdtX^0_fCE-9a5DgDU_SX32{Tav8MBM5 zRKQ6eRIv$-DZ%{Dp4z`G23QbL8CC?){&6#!Vo?zAOct9y5CG@Fh{XC27{pt4_750D zruP4ULBx{Q#RRdWfd2r4JSo|LWArCLHwJQ!=v|7iS2QI1fx77k;fN${veB-%l7E4L zvD8=q0)vO?t)(o!VuSs_q|%f#B>lMwDfEMG4WGYYj~GblDiHk#9IBZ8 zg$@SxC+-FvnCyzw232rRVNzwygOjDos@P|>%x5Wr$ix_cdZjjDq(2*CP~wBrx!Ma9 zebc!cKvxH+fs9gM8sw+~Yek@(Pfba2o;7HVLc!C*b9%|c|8o$Z`1s#=pmln}_1gd9 zfq<)KvjI?4?K?DSs04JIMjN;k3{9s0KzOfoH7x}SsJG(P|M7v6cYb04IIa7qM}`L9Kw87+L> z-I9I7(1SAtl<_IRq>kv`aJr*LXu9^y>tpzx0ffDL+%RNlHQY$xQobfb{2Sl;2Lr!2 zQnKMR<%C;4(qoWwKCgh!z3Vam*c|kI0{r=LpH8xumc)E%VCh=-NA25Q&9?9TV@9`P zM$7Q#b~hX$Ue}nOuWIp(m=p=$fu*_Pz64B$_}o!kt4ATg8qY#YT*&i-^VZ>B;tT$X zvZh;;r>o1waEs>-Ta!F`k~n0!p}06_o&T@hSBKZVYjmG)csB-%aKSs+=*JZAx9#}dZ=Y}H6mVVP`+~>eQ<>R6^_+mMsm@J{t$lLFhweDv z+J+B1Uf!Dlnfyj$i>wIatkRk_dQ0bzhp#1Xu``pyrX9DR_HDMl?~mud_aQzpw~wEE zbi42DfAe-#PH)IvI$md-S8ZJ1au~&ow=tI-cJwpqw61#ko{e`-9rJhVYPO|3`dqds zuX}RVd4}i4$b^Sqi$3Y76f*LS-(3>nr}{h_2~C6mUR_?^Joe_G&(`m_(&@wKiaxyz zycN^QOqp~&S2h!$MxSVFmb<9%QC?-_<}PuWi5GKF7eUOB>VLwe|P5skhqUGUS@X!^s#s zpkB108~5A*N6Vc{d^;+uOK8NlUxZ>+)IZtFQuSe*RM~F4>HR@gv5lPKN#xdZ2XH6w z1y+6^eS#-;MqbXI{!zB(UZh3ec$uA@6V1!3&GM0doud0_oL>0bEe9vc17?YOe%&n3 zxg;EH7d4IRRphBSn*I-)=o)P`*!gQVJz9^e^y^)DAD!>+Q%Wr&ec87!kQ6N>`YKSp z6li36YEab_R%H66Z-Af__#gB{`r8$y$-(@Gn%+K|349%?(}3H@cSze*Qg@D&zh32z)XYIy&{m|4J&=5D5Xyz2ohb@B^RNGeezsiJ(`Hiz#Rj2SY!`IIUy z-~B~mwAmZ|=9(P(3sww)P~>{z{&{`=THf%6ty3$9Vo0UysfF_OW23!@E>-R$mlS#TQq>o3H91~K z+3UF}$J({8kN5L#TaQMRz{xssEI8&N=>(qF8o=jy&ez?~qglL5=$C@Yf{Rk}OaMEN zb1`;4b_d(Rd8{dIryVx0j$7WF-rMb*7sRimTO^VDsGnVI(!MKkS6-xe@t>Nmdgewy zeNV9joz&T?T?X{R9rA83JvZuf1D_7gli47q=uhbutnM(XN7Y@%PM$UAc@*59b>kE} znJ^_%+&lZ;=nHdTJLxlY2l^f&oB@C#ww*FRxHy}AJ3aHU_~hZE)BSpKWS#DbrIu5E zu_BEFJ>TCl#f_K*4i>oCMZXKJ3P5K8UUPl$ie)D(CEcL7^;PiHf6xsWf~(b1ZEH$B zXZUou`CJ~L5X``%HfIYGh@$2=0`Rix($)^F7V0wO3%Wsd5D`Xram$2eE&$ZSXh{dy zIb5Du(^~R14aYbc#m$erWZHLL{7OE{>!3Fg%6~cG_|)AHhM`gsW+v|+6RhmNW7QD_ zn=Qcgq=gEMgO_-_(dJ^s6RdLbLLPh%)>U1H`#9G7d>!w8*ZR#Gp;bH>NP8si7XrQ( zf2vfttgF3q`=|Amwey#*S012zaVxB=)#K5zI1TZ{hy9$iVPOSTB5YnM5w95t zeGixTuIdVyd$>}a-=nZq9aiLompA!EXTc%v)5@mTL_`cX`^!3JlJdSWs!$ovc%^SEzEbT+HPBgSut}|di0Ma#(c)M2trnyC z;-=YTKN23L#LK3CV5Gost!}iIQl3O#o#Bt+6EfK)NS;229+R&2RKWEI+w^qbgA1JW z6Y@?K7xBxo)1i|^Js_uNN9qOCFDeQ?aJzN`92uvJKUoFTewWqMH zUZAxF28U-y^Uklp#P3}CNKlHZ}uq+ayOJ= zl~XmOv1{g1jhlV|qSv!rg4fqr8v@$5sLq_eS1T4BIZ`CzJ)}q$Ynac$pW~a2bGXui zbNw{GHFaGtcmbu=+AIE8;#9Esfjr`Bn(GC6PMqXR!uO^MeDt|6v9U=k)7`w1CJ^+Z zq3Lnke%6G`?b$R**onnf`yc}Pq6>ydKWcDtxaz?vc6{(s;&9oFc@Sn(EfAGnMXUo< z_eRVV%k1QJh4rI&7c0IAV3EsF3-zW(YMR~*mATYM$^#b1l69p^B4ZS{zUv!zxXb}2 z`O<_^O?R;lqmpiZl{mZP%OBCUdeKaV_+#s3VM}H7^4jYyPC*+nXtx@tskRtev~#Qe#|C*o?;zhr zV<#h{27kZBq)arItxPabwaNr%e%4NLeOE70e>1O_tzs z+YQrUEtzvrEkUSjTQq&Fx1c<8K7+ej|+y7M~RZFJVJ~Bj1)m zd(~#BXdQeON?Bup1rZIl8&Og-zo@*LMM+{ct?MFk28zqUkw~VtYzA`$Uk|vE+<<9s zro<^o&%Cn=I0);QBdLQW3(#OKGgSH97(1sp3BI!#euGV{6AwqaAExbkK1{`u2wfGA zLvhS_(EmU@%g_V^QqG~=xf$S&MS^rBbjEdQoVG$JQ=KQmgY?i=n0y6%R0TSw6iV?M3qZ z`JD}Irw=q7B2;~y{O871aUZ_d2IBU9ml69>uFbXGujwwSMO<&Z3ii~~;iuR@|Gotc za(1T}DuD>_M`hlD{%X$e7VdHq95#dkyLoPAiOW>IEbIbxbWumn0~UDUo}Kx`Xyq3& zs)1@(;pLzog;v8Q(RcumA~2od>IV*YBbF#74k1=Mm5~K9y@KdXZ!FyKvRp`t&tJ}% za}I4hZ)0@@YA^QIV!(b<=cg`zGmYjKn!8}V&&A5GeUDXR;ZA296%Cn>uFs!0$Nv2F zxjJj@=@SU6E{Bmkv1Lj#tib*ON@1KB9Rnes>kW7 z0yM~aaT5QZuP&YUHtbXJTeI4V-lQpMvudIK*PqVSjtwdfy zpc%^)utW<)O`%)H)hG_z@rp9=Tp=8&SfsX;bX*;km7>46mEqrD>kcX*l@? zJjsam+AxWQqC&;Rbvc0zATnG%oxS}np71j$@Kb34Sy+V=AtZza5g?S@LfSVsLX=iT zdw>V_+`u@lHehZ{lqvAitf!YllFv2mqm*!SQef-DTUTihIDtnxdxNJpgD9;vWOY@wBP`U}Ek=VQzHVSQk>P!3l zj=c$i_J$<0=c0QPr0_fAG)(+SM@sDf9iTO0glx3`*EXY|G^3?w(j7JFK!AQIJ?`kEn(sqD2lXDu; zT%bvu#xm}}yW3UEM+x1y0{WbNRPMRar23{$A#-BeX~a7u3 z)j6XF-Gz((tKOL=+uDdR>&UsxMu-q_FTQugtHkbM>l8bytzu|xq=LE}r&40sRj!8g z>P3>&<@!M)W|lb1VFBYSU}Av^zreA?%=qddazd_{&6PLKcwcV1_--lgyd!O%9nI#< zgZQd}yGwB6s~@Z@3Yv%N%BlIPuJPlP>NF&vPUVGsuZnt8)Lv8g-Lzk%c!T9p5=h5!T#dno^?{bT~qofID`a zvzPmwLxg7g&B-ikDMxFI{{jZwWqJAeYz`-T@6Fi)LEgw(x*_R?7B9=c6@cu5e~H-{ z@i%g6uW`{qfnYA&^5*{Sbd7FJ>m0HMH~3FWHiD7YZ|AAmzLg~t%Y+(5k47_Nyi3e9 zTx9bLj=Hg-0^SUmn7`Kl{qSp0_`3J+Q9kj>ZlYv%6ru4O8Aa@Fh9)Ds-;9TS!Im;q(|;iPP@bo;wm5b|wcZ4O4?zHzRaBB!Kd2yPSz_M&Dc{g?pg z;as30KoG<&m+GSY4(KNIiGnfrkZ*HWQ|Cgd1pI0zJRC~r7uAnMTyjfk_-;0%Ir_Bp zh#SR?XnHCH^+q-A!OPMVacDk35u%?Mb$7HF<2tiMS;Btxt^#;xyK9>pcA`5#>oKAW ziTueWELr3k6NX?~J|B`%81|`#>+hS3RXaC$&J94~@nztqp2G`4U>8TAsDs#TvR^la zo9FtYu?EUM7}S();IU>q48`+GiHaEHLcCQ8k|MMjwwKc$Q4Hf^9BZOc}G*oH5 zmlAi5Z7A<#_!Jw7ZihVMkD+%eDy%pJkrnkWQtA$%FrW3vv+;>QR#Xhzv68Q~g;(g+ zI7v|x_eS@cZrhMrp#u?#HlN|zg6C9PDZLq9&D(nxdxfj*1V7zgFZ4F@5nnR~|`5G6!KfX53-oOi_lZka8<0+5PU#r`*6DK=#95?>BVIao9R8(*)v;#FgngypoIlYUb|XpC`}>1$U!H5T{=a< zm`Oa$ImsleBq%b$i!_ll;ld-5CFIs|$5CdS>KlYJVeno9$IgapsnQ!WqYK!iPH_6Y z#I;vAJsY*_T+kpLNp1n+%@3L^Jxa3O>hv+dAxN_Tc^Ya!UyG6fk;fW>uG)b}>@Tu5 z`%DtzPw5D-7}2=Mjk$Ofk<=7Bx%G64A^u z6-AQ!-(?R(Ba>Zv;b=31&3+?!om3CB5GtZf^{--IEsNoe95f3e-A zakLX|JHdX%K~qyCxXj2sKehTybF7E-3R~3s5LE42OLLzF#mt|l?HcyA2K{c3l;ahV zY26?*PuPX---I433+|j>7N-H5uZP3@VbQl%Jr=LWzL9N^Z@RBFmKAJcto@?{Fz%F5 z<|1LA_@@MOO(Q^^vA-kjEJB4JX^E~Chr0z@PRY$X9UAycc|!MOjZ`n9DPp0jKWj(7 zaH_`4C1O05!DW-QEt*spEMb1xRwO=8;HE5_Z6uWtDYN0S5#la6{?8fLx$#&Cm{ZoR z)T;^@w|IIC2`28MI@@^oLy^EbAnn48q?D#qS4pMfga%vaz2Q-+hd#+(sUZsnhy6U{ zj4~4dKgx7XM8hI4=$c_kE7`O!aV~J*;}JC|hq|bXDQDIh$4gWr8Gj|Mp z)*kO@v?*1bBb?;^-g{jl*6G8POo%S|++<@T$M0KH%1<24$oRt<)589`_%ZSFH;3rb z2$gR?wRFrYi(UZf8K%6D04;ovCz=#{__9JKtgb{v6kPYF3CKsvdoui$cvuIRcP zcA0#hR#pZoSKMxE<^l=sZGN{$rJ?sv$JVq1(%~8{7vpD1HeufAx#^n$K>2=Rw#=Db zp?uqUTVx+z8 zYbwp8ta5?5DROkWM41((Y;)DVfG0Ie) z79kPMSntkUz&YA2mAxtxA9Iu_q#oJ4<^XgyLtv)VfR1@@=(5ZyYg3VyYQ}CQuxi;P z)4bX&spcK2%H^;rI=Xg=_6w~vS9 z)+tDf#Ncxo*wZ_XvIH87nvx)gVoKK-+G?P3CNUfb&_A61DJF$mntZbh%jJ9_ z-&(9?pXeDopwHIgo~er*{l3Pk4gpaMFS0xcS15=FkKM#mgqamVEZlrsC$VOUS8WV_ zR@`TehL1%rY8$tlXyh+K%XO>A1uxzQ)9f`1Af`-G4coFA6#EREWU<( zK=67IYZpvvMzZUYejx-(me&Xq$_h@(5=-)ey|nJJxlX9tB63n6SfUetAxjkvYdd(7 zm-ITAI{$W)57%m*$Cg5KVGkt!R#2oawz3f*|u-83OTi>zC5bw{Zm4pmo*R{ zL;=?qIV$o>r-ma#;=3#cdhuMK!_w&uLc=wugBUxQO^4E(-i&eSq;NZJ0yjey$Sb=XOgGkx z&UHktG&XPg!RwGK*iCILDnvKx`2IBA#t>E^ZY9f58~j$&=pbKb6K{BYpbHRW)w(sN zr}0jDp3C;KeSYwKf5b#ZdN6sX&Yt_-y@@nNf63m7#QHedHYqHr@t50?O;CUPxkDuO zOML-ahLw|7f1v*xwy1%?hh`!(E}{tmojLCQ?S6a9-O%=2EZqq0(lr31+8YVMkv?B-!uXuLA`u-j>vP<2;g?_S%};OC zRx00&s+Is><)^b@3OL>y@(ArWua9v^dj3)R!*jONm-D5RkdmjBpP|QAHZ6eA*e$1D zIZ!+`Ae8#~H#s$WUjp>3s5d<{#hK{ACjk!JTu2@WKLA$nN7T1%`NwSY^KX0K9g}m& z-Ca-2k=g}PNm4;jesKqA{1|E$oxLR;qrdoxdD4zD&OT8dm#B$8s^b%9@cIN`SHey~ zmh?ku>7b>@_zqzH|2IB#>}c2>eRA~jj=?w9-^u)8K^>MftaalbvDAA6@d{_Nd@vzz zj=sKA)~{A7TQ_^M%>6bY=)#cZnxwm{)d&$~8&yPP{&@s5cQ1k>+P6d4&bdc|9%tm#j8V6Kw9yrM>!U6nr)b>6S>BbRjEXH zpw;ztT6i?7@E5k^(2ZZ-ma;6Jmr#!K?Pi|7g#YvT82{@%rCXtyUq|li(IgulfHuiD zPd@c9ybl0&Be*WX_sx$i$S}RGf=8r8SxDQVCqL{n=B=9r(SwdokkjqMlyQ*7j=%0@ z@laOEmItX=l_d*Wfn(p0*GyB7TDV}6im?;aS_R?#j^bBSVoq*zgb@7#-Q38^4W_j^ zVjGw?iZ&~j-mtfZxp>{ilCD<-i1MUu4NFg6zVe?CJGQejya%=kUJJRTUw36k0hW`o zzDYu!kMNQyV`WN6!&fKgvb4T>JtXX{1wlOZ$MCS|hqUwEMiPb0qM^S4?^r zwLcN=nSHY9KHpWUs{kPyEfAh1dd`=pXv3-SNi(rV+G@wSISYR>i(~Qu@~$}2IZhwz z^cI=+6t8K?Ug25NonK+s4f5R0#9v)&E-!e>HHw~(^$Wv(<}-zQ5g@Ttr<}pR&2ByP zCKYb83Uc(=Mb%4{XSFLWtZA1p!%yu-vkT3O&H7i*k1fgIt^N*Gro0^;ho{-3-#M2K z9pBRq7D8lZN-IcPQf9jVq!q`$lO()Chnpmad`w!#pqhtsaZ;#x%A85td`DOtW2X%+ zx{9>~!!xXot4;0xB4l%$(!Hp^_H2Kxw=gX5iL6*j+|IH9zo&~xp0DG$-Tr*|=zhOp zez5(V_4ObrBK^&> zE>@X1Zbg=FSO4^17vj(EVjmb;uY2XxoNEgIm#Va@<)+RHCSHEulC6pte=!-wQw&#U zvihm2wLca6;g2&AtNb`(61O(5(SZ@F%Yy`lv=NY#fuNAd04t36oS$zskD`ZmgW4gk z*2~kCJaBNKQ}t6z_011v<@A&9Z@r2~>eixHcH%yHvyOgh)%*_pI%Dpu@S%B=sVtb{ zCRU(zfpvy?7wzTV<)T-AHW4xCw|EQ#=*-j1lzwM>K1Z(%a2{pT8{yOhCXV#E@RTfVCo;*7v@dw(q(! zNxfMX9i`4Dz6UhlfqFu4f#}KW%A&@&GW{dd1M`X zpBuHiap@>COOq*_doT#f23ywg*o@>D^wLeh!BYEueITl^v<|;oxE^B7rbaHx9lG+S z_3bm{RX{tLzH|fUZooc1dbna-abYP}xY600aZpw^$=1Mc@`i?`2GeNq)2jk=9v8}9 zi)}_60MoWvfGHc;E*>3+KTB5w8)$z)(34^#%M!EV8xrX-;iC>!pOifE)owtEhmun* z6;pqK^Aoa&jYxpe-kS>Wor$&vOqNyL_gz?$CGko+=CM~nD~Se+-CI#`{A#|b{TuO9 zKtCD;mk_9BB%5nIvy7C^Rr-VNEHcaR!xI1+nwxjFE`XI0G#irgx_GpjKm%d*xE1Zp8Xs12jLx z;`&MMruiL$3u8S3sb454-#}d*v;&2(ltm%=!fQ;EQixm9McT6)ig1$g!$+u34j}Jb zX)dejcdR((Wf9O0ohaeUM+6*+&w%P;jx*l zC{70O=xQL>B2ZNDiA573kn?3Tx|-{ATeQLfC#~Q9QUasCSXa#I01zw=k-R1ylOyy% zc)7j@hCN+a(Z~gv2XTH&8Z}dh0avYuj?kcpoJ)lj9pk_w^+7j%6UV*a-}p;2j8a5~ z#~{81s@O?*!lBWl5Bsy*8pC3`FCxaJQhC3XR!|s z!NRo2OA#xBj|R4I4*EoDHr& z;FAZTkWC}-CDoSA?(+?!mL6ncZ7RssL7Xv{Ub}~OkdFeefa%!4@=z*oX$eK^DhI;B zjvX33L^@-1W$$fl{a}Qf%xFl^r(J&mV^D5$wLgSUb3lVX_wXV8ZMr5(WzOKg)+ekJ z|CmwTxlMyqPz+>BRn4s?aJ9{@y)o#G{dqHi|NQkD^k*o0`QW&FeC;iO^tHn#Y@;Hb zNP3yR(E=7gid*g4Du@=eTEAe+r{+H?TTC<6+PmK3_E(xC7OXNz<7d%6mAv*Tlcq_5 zD{8=6Sxbdbt3aMnEg@l-b+)34LYNuLE2+yw&GsWik@b5yQs~=gr7g{kz+DRk*nxz( zQiPDe3kDiYZ><7Ua4$XQzaIiYLJVkmNE6sh`&0m|rF#LwXQB@=yi&9KQ?vlf>46q1 zFtqN^OFF^RN|-~tHsNEdL3;cWjQYk-!^Tc_(9D4e&-~)%4t!90MyJfmxR|JKN1U{Z zIJub8a?L0`J=`GR+aQgss#78BEGbZ(-^OEX4URV6(h(Y`{P<{dgN z9CZ5r(A`dqA6eYwdh6U#En#pWn2r0?k~Gt;B@!keXEQ9n_6G= zHziY1#$z+=P=8re1KE=LFhbjQRc(K5f3X12s%5Ct_Gg}4i&x(Emj5ilBG-J8>H9dx zV+Lh64GVB(cj;174p_4zl7hLK*c<#to)hC~+l-yf9zE2iX~C&f!g~(>`;PU2=7a^~ z&DgJvJm><++N7Tkvs4>=!`;ZVDm?hH<1(R6DM{CCfzP8Pvm%BI^3fs75n(fhw&^cm zue&)q?Ne>MS&J3Lx9sT^5&oW=%?|qh4MDp#G4J>^fN3ELDuroG#uWiq?nU0Iyi9BU z2SsaQPj3;})>`XGU0Waperw{+cRuh;pu6iqy^P zmBrSr`b|rgi^)r4jLyo4O%+3Jdl13lE5Ho=+r93(mGc>G$A|`s=KDtMVdA?+7(QFB z=ANDrJpftD1(jfb6L<;0{c}yFooNjA$j#_8?X>2o&O$La5L~aDMk<3qb8pCxgpltE z?{>0`@m6h1qjTV!54iRxmcor+82MhbAu$sO*+FGOpVBNoKvxCP4y!1M_R}{Cmw!8_ zV1Tv^FZETE&WSh5j+94elk0Sh#f$k~6nY6B2@b&T!OaK%ZG>(LTZ@q<4`nGQ4rTe9 z0D`Tm(1;%uf~`v`upD*3?@?<;*Ndkr=IZubF6Er=joyWv`v}eLmd7{3}DlA6ziX%i&N6V`Pqw#61P=6D}Y?al;uJAiApQLZIwe|EUetYp!7jWkdi%n!sT%fw%$x1!VkehNLt%jX{-k<4#(e z68zk?v^E;Cm5t%Yp~p-fd4cc5ZqrxQS6vWPE^3f79P7ECzM8$lIJ>fay!IDv^^K0q z4>Uq&V@48&v;es_1Te@#(7`b4|FM_^Y(3&<^|;9<3j$u#LX9|bN)CQF?OuSaNyU9% zUDuDY_p{A(eV=Ov#m9SIGn|e`TEBjb%q4X^M+$5%iR5;!7`QC3_(Hjq}u;TECyA^+npD_u1-RO-W&B=6TW`4>+d4=@i!8c#jI*lt_RG_ z+GdJe>sjdJo`FS*y^l{Fr_m;;l16nUD{1yfNB>RD){`4FQJz6`;whLd<>fDGi`kFW z85WUj4!)HRRa`M{k>lQjYs%kd;s-lTIgp#Lc9=S6pc~AfO{gGB^!a*Qildr&$D&mM zQmbn4a=^L@HiXN|vY4xMK=h=g*NbIEhuPO-PB9xem3YLalqI6QcJmWJFken@xhmye z-BsG3K{tgb1-SR7n#19AxTAfU@4eWv7ic6@5cOW_2+(&a;k{sAhGxfxKBA}#&h7!#-A5! z!b#?{b{asDcR}`q&ZUNHtX;(REW}o;bc|&r!L!0i{s)C@+bI%mfmBZ~rSElngcRB% z9s=+k7p=GV!^F-ZnfS9FyazB0jTMxCl%l=Q72B-;wDS$^&wbws?N-NbCjNum-OjV} zGL{0p@4qT90JxLjom$|`&Ysivb+1O0ef%*o;l1e6?Qe+-$ZL*di{#}Ptlof^B4y%4 zoi2^UjAy%XHCpgk%F}`740ovj!`agSM`K;6xHW}$sQ8uIKuVLH1!BcIj z3!ElY-7Tm%(GU>2Sf&klzgnw4z7N7@$@MuV%i5y9(7bX z-6~*!oXxvaD|fgcC($%c)?XSnlm2Nslq`yW4F9?}ZD zaM0>ZKpN(GROuO~ne|6ae1UEe*SYqO|Gb`Xvo+~_43n{UA$~LcQ2@`Vl!|+{o|4}8 z$Bu9tuVRZSr)a3j?vvafIYmbRz1c?^-+>*Y;U}rWG|~~$2R&Ahqwid1Oi%6G2Wsy@ zvPAI zQFbYc&mYjl-W*9e574YJar50!kW0!XM{w7|ya!W>{U6*va&Luz8W(YubSX;AA4r25 zyA9zL`!sKV>}R?1qqHoc;!3S18^SB~?cV@;5U>QVc(CWM*nv;wXg5CvHR7WS<`1S!eGK6qfLBvFHqS$#ENU#s;rpj^oK zDEo^7A@hgCtcIL-ZKh_l2EgFrutOptr`C(sq#%Pnrc?wFIQ)vPu+$u15+8NE@Nnr- ztLlu8s=Xqfk6hU|gN|UW*%X^$8+W4^+97k#t(W;V*?AT~ql9d9I|ErF1kJ&jabz#XE! zvm{Z{$e#Z|L}hVd6*<;JqvNXxT~9T%;)F*_DQN^M1AFTwjC|4@g`IwLAJ>jTglHpj zOO_O)NNpdtwIE&|K*N=R!+9F#L$#V9FDjBrW~}JzALISi=A<+s<36mdE1mW%DdY0Ls(?Tq3)$yGm6>} zD*~H4TwLF1;OzNnh>?aTs5Ikkngth*s4%l$$Q1gfk9)D~Q<0@F?Ob3RN3IX~e3 zbc8TOq5|7hAgp_5NI!hO^U3<~d!zsg6gaX2qPnxD_MK05sy}z}XRp5~E8f(fR^=W| z*6(@y7t_M7-Gi3T^+i=RkbKaWs^<*FS;|_)*GHmv&2d?ENep9rWEHUg7J|aW?&=t~ zR?bH_1$Z5(E(FfmM}F?03WvEOv_R^b?mz>CBDbE$RF2%L90SW=V^|-i52aWWQU#*g zjymdcIuf)w*5`sGk9e2&K8%!SyyS^yCx=pJVuXf(kQ}9!&LJ8I%?t4@&eLWg#_3e7zL?n$f z7`ZB(&75OQB-D)I;?MAvutNZa4`?>l`1nlYU-AW*oU0Ux91nwBWl9$8TXHR*t-q(R z0|wK(6?qw`)8Z!T*Zc1q*RR=l2~z@Guq^2ennt;EmiAFeX%}Byb5_T3XRkU_uGp=Zo{2})GJdksVOQ5L z>h{ofi@>q7`T9UL7bkWBZHiyQtB&*VRBknx$*c z=0M;VmDpU+VGGZVn>>uwb-1Oy%1G0o-LS{^A2(&aSkqxFof{)QDxhiu<#pCW`yR~( zu$`w{Bj%xZE?FWWnF5^Fp_x%V{*J4T>(FXdM7mz0=DOnj-m54bH7bG+`ohFsJBO;h z2M)}ak8LjW2Xm+|8sK3kD1h{imuNa5t=lH<({To}mz`Lbx7P!oF;R0ZpFHMTV!OPM1k{CJ_y4%Y2RBNk{6r~0-9`ti}Jf$Apl>2Np$Ba6M!X2r@b4^%Jdl66mEb>oO9}!aN z_yRodiFnJis5_jj>z3;2k_Y!Pz6M@0Gp2+&O-J+DZF3B7iQWQ%mr(du`+=8GpS`-3 za}A|Gat!yEDG`T$y<|pu9a|usAErzWD~H=LT8+p1G6AT`g&pq40SFF@HsZ`QN3_qi zrpodkuJv3HUJcU3nVyfPNSb<7T-w@u*I(K)AdS5=5Kk8gK4B_U(dSWdaeuT`fYelk z`gL_QE#z`_2sl{O%9PVvZe}h6JS-#tc9RZ>S##o1f8dSN%s&n}81cQ)SG&!6(CjFc z4W6m#P>3i40QiIvHM%;nufI*V65aR6uXi%n2qPSQpsDfAx8M3yAfHPw%mf(3@#B+j z6WVpURbg*_F{P0Fasi_10Xz`((~M=As4%pp{Hjvg1jq$#%>XZge)@S=|CH@l%QEeQ z1LSQ8S&%xPzTBh!NT44{Bt>Fl3%O2p&HppmZ@#~qEHe3qnj+|)#BpP^6q|uJ&Nq~p z_Z&iOn_a-qW~9WBn6yT`k`(-L`Oj9-OIPF5Py!SUA;nXoh>AFaz7pgovAR65Kuq*- z!0WC+>si&KY{5sc!cBA&q-YAdFNoJ}d;r0gDrl0qIWmz3{rK{0_%bkiO`Owl05>d-|{)bKQ^)M*o|_rTgL(pJ^f!~4T)Bqtyv zH~s|R+~f6dIEQ*_ZTE=_u2+FS-B_-|fwDTqgq1pQaptSz^KcKTMNElIXnY7mJLT8* zqxPe$EF2m`e9pxjgH<7StQm}sYBPty9V7xXJ6^x8ilBq0nb0ltrQ2yII@x+N;w}}M z=byJ87z$)yy&TqQ(YNl;Mf8o(9~zbHKU$v%spdL@`Jr0wT0V)7eAudJMIwA99T%;* zY!wPG7n3caFwgnPvz>=o(QDNqsa!^1oL~_3SxT`Ob1AY3Sp`+xTHMcN*d74kNG@XZ zm$zx2icALpj(;aGcl6}rwp$W9=c>!jOI9 zNapjU5}3-AXy|15e+?**QPt z(EcZbiG9fa_B1D`?|-Kye|04IdbcAJ8TtKY?XfwJs#!gU@+3Jj$ow(1#2eupB2 z3-1Kz0=5RHkaU^Zj~Ct4;Fg5o4fVn{E;}-U*t3AEiclZ>T?QL~(t+9q24K`5SPL#Z z9)qLsxYU>DA-7i@8cVw&?C_g){iHN54RGzS6g5YjrDoO1EG=u)8RK9+W&W%!M0@_cen^hYd ztHgSHbGf)B0htfaBC4Lz1Er*d;Jzj`hs;S3_qefb6Da+FgyriH#~+r%*LUzN++@n! zO+=w&wFmGU;pp#Rgb(3G4A-7;5f0fY!bwJdw+-@>ksFgzkF^Wikh1j_;W8F8gFMDG zc9tk~w&g{UbY8;jOUSTtDptqsL+{~)IYRkN6M(t_7Y)Ng3E*7()t|6DJqA4J-w2;b zJ~#vQ1H5-UVu1-KX7@{{zK0_Fi$T(7j1&`s5L`p=`CFs!>sbGOG5-MA)VC5;%&*LS z;lnWVR6n+(#dhXlNMX{6oBYyg@4x1}WQH1ZLEH}*&KXfcpOX>>PJA3tdgZkuup8ow z(;={Yaa1xkH6uHo0)Y)^a}GI52%X}$f8o+QN0s=((J#P2X;DNs$PLGteMU4&LWN}C z2R9NrPc^U|9kOFN_YGywXZg{o4NV_cZvpA4Aw4^xity^=wPTkD8z7tck!*oI5q{8c z#t6Hz^6Z_^Xq7##k~UPW2Y5DA5~`rY!(XDZoLQcbbMOO9PJa9k8kQa{?ukpeweH4h zW|+sSAo#vJXY*?FM#ztA^0E}xf#3eaq&}jmob9I4${gdOz@$ywSf1Z~=nJjAatP}t zT!#|8NRq}=s(t8_|B(1EYmg*W-fv<2FQ!J=DJsBAN~v@73Q&M>rX6hRcO+-$rywL% zUI2Rv0by1~xD?x;Fn=5ExNW)aY4?H_3)aQL<(@7L?u#V3V)<7HB)E*(%s}D$d-Js4 zYD|OxGKv5DNHW5ILEl6aMpk=*xA9BW0mx}m2Xh|NTiXwUU6c#rn-TEW08J*BZO2KY zJn*C+JmRkyMhxMV4^JQ;iV5AcoP1O3Wx`cofO<*>z41HYT8$W#?wRE?wU#5Yga${S z01bfBf}Bp0s|*!{X+-CJ@?awy0LieGUcl*JAb7gDuL z^LsBf^aUw%;6m)IwDZ*GS?TB!Ily0CN-8deV;)3$-M!1tPkR z-iWBlCme;%2cGZLAOy>(o!WTaJ%c~s6yGsr{lIirQpd;=kaBNLXzL;W_!|p>4LQYh zD3-MO@kNoz)SPGpd0~gFRk7VK`FTXEboxlKyW{y3wCjE|;O(N@;2`d31hD3xZeb!| zrFb?w_SvnzWBi)X@GP<^Q4VOD| zq7jp0W^8ACZn8C_s4bF7(^nL6=!}!Xp67^mM!ml{lMH~ui;?sBWw*Q2pI7m$OQs@K z6Ddp3#=HE}%V3_RrexzPEC9%cOvy8WwFU4}&Yf)g%I%hC169f4A*9+4fV4O0Jq{8RAm^v)Uc2AFmMRz~rQV1_p~OVf!V_@MviV zdR<{>V10lf*$p$oUEhIg&v@1$WGDlxPE>Jm&~t5NcY7w+@u}^l2G9we!z06ZvSM?} zf(P0lbMvHBYHh)R-ZAwkE9 z5b{TE*oA)^I7OZpyr$j`W;Cc}+R9cl#^dAn*I zGK>V4x-!)5h#5JsZ+1C6*t9${ZIh%OD_+0W)A+l!BAvND11uDoB$@OKs(kM<1$I@r zMmkSacQ0ueKfkd`udw`NaWV@nbpX&{T&i`*^%r!^4!K;YtO+uyHZe|lJ&iSXT&_KS zt`wC^==QZp**HuF&`en;`E&+@BP)o89wTWlpVtJy@#WHYwq2)84jUg7(4M3bYnaQT z_Agcx+?i`y0f13iwEeqh`lp5>nD)-wemN1{kbG%qn?yfF;{z_ zXf~``vIq>r%F(@XOV;Kg4$@sxToi181pm~hf%c%LSMbPIu%2{8u;nl7`6#`!oWG$1 z5JsSR9DYH!MTqetwu1Tg%cW8l6y@>b{F;q2AD<9NMJx(3ON-TE`tn8HU~dl`R^Vop zFCgkk!z-W{zlfg+HXkZ9sJU(pfRZntAE*EJ$Q{sRk6=}fUqcAymR=|a}%=zmNOjF8^cL!Ly2+HF$%tJ$Vh=FDLqzS3TE1|fBSq4#L9p6 z1Ingt=`x`MekSd1<@B61uXYkH%HXDoGNQ=h{A|`rb~~6wEuv#Mk3@n^^#!z2 zWXW(bi#wh;S^pyQ0OPk`SvDV_*sPsFTT{pB1sESg0B}ukdiae4c%XFFnBBos2!aV5 zlxF407rhAD*Vpeb+UqWYv|zW|jptb7RF74>Mw|s0+>!Zt=-i!Z?*^(sa1*pc!K={j zkv4|2HwpFCm*9;YxhMuWi`19kXQg|dcZxR~U{>;`Z_6vzA(D&Q|Iyf*_10hf$zTv5 zf6_Y%F!AP`hSW<^B=E^>5!3HTC5yEc{7NA|y@Z!v8sky(NwGKya_Eq(vu$M6Ceiy~ z&+EY_=9QWbtlmu@(fPYnaMY~5%YthumW4JHc}k3zel?g~$r9un`xZ=9E)u)135~hymJ>bpqeD1pP|VV=PBIe1xO4 z&4VZ|_c8*^1I;whdS38(R$){sVUX43*&{4!?cOv^J|POX#8z^VrM^gOE0-ErDH} z{*T`MOxmq1e$KnF0wcTZy_a_u**d4`cxfjOhL1O?4x=Fz7F{-!*M7S?{9ZO8>r@sU z!!}&A-%i|`&@tG`XxBQiq>L_C@o`Q`ecz@5-IBj;c#4N%c`a9Cyk-5%Y>Wg>cY~63 zRVK|CVl0NC?J}u3W$Hzqo7N*(Nn`g$Je+@)7D^8y%ZN@g+0o!Y>F!Mr?tdb1;up_h zjm39U=>HvA^>ReL8w6&;2G$lH0L$@EW_C$;B-@ zC3$q>q$QS1NOPoYc0RQ&h0wsdP)0O%l~(K~vFQjCthF@2;{z_G+9Kbk5RE+6J%qNo zyj{f{V`jETTS$AAiczQ8Gh2&NCtcfbt8&aNC$5JV1T+DCWSa*R&C>+e*%MB5^%c#d z!VG)KH4F>96iLmJHLHSl*69|B4ZtKjJJ3o|WxQP-KDgEKfGs)U9E?1e!&hTmG9*|3 z6MKn$S2cV8^r_l;Q&(nu4JA!VG?Yo1nvS~Fn(HhOG@ecgRetlT^@#oJ~ zf}*B1@3Y(3k48w8lc1BlQ#fHro(5L9QJSM1bpQk!*76DgHfzU3a+jYA)sWB{LSrJ_ zUy$aBU=mGOJ4G;qY=~FMr`e3B$jMmL=ye>QIEqrI&!W&lzW0S zZ=!my24`i-wj|~k^Cc?7JC-;}+=rxNXCv8ft<|un3yMzq@|kJMCLn_*TIC~A7H3Bi z3~@v(s6UcNtxu5xT46|$S!Z0%;Ums1-I2q`AX3{5QZYh%b*Lt7Ii>AT;m3%&n)9=;=TtK(Q@TS zSVeX(AMwJUywmePMN}ry7`HZIjt>1}onj`ZDYHK{Zk&JvnL2pqCHo>AM;Eu=LXpVBLaixQm)Ryoj~T zKjZCwfM?OpcCjdHab85vK1g!fnR|+&O$i$UHZ|>ev+~GUGM81bMSAd);IfClkHI0W zVxdZAmg6j^u4CkeHAXcRClVC~0n#7@6Xzj9OL0?&D(VC2wCBpFmIs|3LeoSNw4DmfkfX}*RL0vXl6psJH&t|3OB*Xfx6v=CLYz+$Spp={R$l->JkI~nh9_|P_*Bm{X$ zcdf?Pnb|SiVQgKAhkEyXmO1bgUa|xkQ25P#3M7YqkO4)HeGz2>8Bj_kRw0^B>Hv@d zRTL)F`}*GoG!hFp_;=AI1g(Hy!loTys2z*MUjhb;5@q1k2N6?udF{}(Vb#=pWWZ1h zfN+dWwe5D(R^D=qPu;>VGIDgp4oD$6@*>IFp*;76bv5wN(Iqs(CbU(!D!i%2%H98Q zR2O$pIO@~U8jZqb<~y-Nrw_XVxP~wcj@_pMLhCTspJE#5R;U(O0)#}ty4;y1hGqK8mxSM!5K@|ty zsv^YV#BN98xke6CBiz@}d8Pp+UT($qU9#)Mrakms-j9%Wci zNBjJ6T1NFG`U)D(HIGSReYS(QR`&#*Ba$}+DlQt`=6+3ZoT3jpjsK(Z05P9t9rTtW z@9Uuo!Q5vRs^(00!15izFPA`lK+R)t@XqK(cM{sy9ZriQ$GL~F8Qm8=VCb6uzMqN} z@p*I;$x0zp>Q}5nHl7q^Mn4^+bqrlGF(C0#10qum+I14d1N=uxLl#>cKM9vEiL4&7nQeB6c z(!ej(2J3~LS51DfB^G*+{Xe?^DPCbP+Hq7TkW9?Am+3o=KRb<+U#9pIb@EfkeMwkd7(U-s`zaouJ{~WWs>tsDTJc z_+1k(#>|w3O)$_ObT3*22H2NGY-7|=L>a1ZrLFlpE-fdm*^-F{Fd`A{#IeSVN(=*U z+5Qxf2xWq6QUu0OuE+U+>L0>n^HL4%O!se;*E#mC;5xO z=#%IlVzP&<^;3@k4bU;PcwtZOoTvU5_ZE4suIU1a0@aFM_lmygaRPISIk`iblq}&YA-hRktM4mdBNtS z&*4F<^A*xn>wf$;5E{xmWIjkR^yv`I84bD?_UNeU3} zs4yBtuLh{NWMPZ{n;jGq*)4X(4gEXPv$#JkNt+hKpW-FSJNW;l6Xcd?m7;%H!> zt*g|?H3l;p)$X-24Zf^6@WV|N_MExg&}0Q)oBjLq`D%;(P31pk=Y^9gyHUhLkA^4-ylTm`cs58S^pC-?qKLpu zY9ZJ4jsF=^Y9aqUq!_~zKKn-!E%39SMUln|44f+vvIWI}!u)ay z|Gjn^_l^^bGe&pvN6V4lW06Dw^~SL4nkBzp==L0iRJqqW<~RC^8ZWYpVILNCo8^>E z{K2{|L~Fl&1IbQy+^<-`7Ti8Q-s0n+r0Jdu!NqW{l`UwFgCXXZ|Mf!@ktr|m_;hsE z19o3EiU?NtvGXSim)H5c< zKL|rv@yF|w?h97Vv?%r>5A|2}JuZ}0b~c@D@P+%70iQXAJKEtbp*RCy3$nn7t}zsk zI=SdjEaEEx?E!j30qdW@zJ+~U_VO?@{4_KMr0xAN9Xzg|{A*5aqS72Sdn-E=iUi*Q z>AEvhOeM+5&9VRMSU^2uEqIu0nd)$yE++)OD1QM`T#~lrdO)c+9;~$-8_ZD>Zax6n zj6DLSK2t2L0OJp6ZxoJh16Z!pXt8i&zilwXB#35 zObN+%`TTZac(6|7VQ8YzJ`oZZLffiPW>5UEDQ^bJFSEW-yfF3yo&kAA`Y<9NuOR#g z?WzVG&l|xFBEAjSlTD1NP{OS}_*-K-JTA4{V6sWQB)j^x@sq!K2B=e=gJEIAp(HWw zCGq5E(YDoG4YFj3dfa)Y%|n(ga0 zB7WHS2b#l`G-cThzD`!x_HUF{YtU1M7*Kj8+I&XYY*MTG2n2k8dzF5>bihmyuGbqt z&64cM*y(PhyI~UKWtE$D@rSW}&9FjXzr6fC3;5E-yL5MVGUX-kqVe*_A6Vl1O3!Cl zLP$3gCgH%Qe5C#ZLcm@*>iFs z(+o^RB(9#6P|U*^@Mma0W+>?qsojly7^v+CNBG|PdiieL|>uXU{%!}7i? zJKCXl;{BA-tnzK?8>Fa4Fv&lucTWeVUT_r-?tdp}PxNHp6SQ4_6SOw>{$RlZo*uL3 z`m-D`%!VeY>I-^Z+qk?u%m z`sykvM)mjVkMr!6ZIwwHLCG9SU`j2NHm{cjFmfF5c6nV|+RdMGHfUQ~rY3ixWn)5F z?IP8c{AYY;ZSC#xdL=4%`pV$#;#%SZgZf3cVX5Js4B1Rx(1qHOqT+-yV#?j(M}Nv? zIgSC8xLEuR>jOT#3h(3}X6$MF{NR9Gz05jg+I=mKEq(c1Ml=+5^XgK<>7b@taBm16 zu)I8x2U}jQWFG4U4WfW$j>ILyd}oPtFBh}?!h&4IE4yc{@C^rYUMs;h?{6zb&aM-_ z$FnA6mqpY2=A0eNX!0v+Zl0~AfwEL2K5DDSp&pzB=W+;FBX)M|sXmFncSZsBWgQF1 zC0Qch^B*bXI4Nf9bcupI>j~%`IQoBQ(LsJdzVUr*2EN$X$;(sz0VHHsduUJXj7j*j zXQgNh9de8DP>3cv(-6yMtUcc+ms(D4Zl=X0L_QX`RhF!GAih2f=H+%hZ8^N%FRi`A zT0dNz95AiXnKh~~PQ-m7&+rFyPsDvYy#O8Dyi?zN{iLpJ^e8`jGI~j*=zV?dr#?Ke z^B7&c!+RB{wcT*k>fda9Dkd1XGis)f?c4RL4LaKfJoCH`(TiuKJQ6 zn8wQCAGz@)e*2uGlJ^L`^sI5N`1bS+D$ad5C%b{HdzEXBKmD+>sT%}v%Gbvbcfeh- zGN_cO*k4`+=4MsceD>{}Ij~VSwZ6Mv!?667p)9y;GGm_`s?m{}%EZuOj4%ClNa<6( zRM!Z;$ca`3yO_q7?}~cLV3*VKx|SLGaOIlLk!oW{{K~W}cjl)s6Svu)^HXBZwkX^E zb_hxJJlo;-8Rt^^RPLSt;UR8D%M$7{7|Su2g(=K+X|GA+S$X&VelIcyL z)CuHuh%cDnc*}5CzqAgfTk!`y8?lDQ>RC8PtGo=24a~O3F9t0D$PXyjdDqX3Qq)Wxa@b@Pj1bP8*d%Me z{0a*8gT;5yDovCJOm+n$tNyyqOS&bpJ+STS50?Ll1ah&?QS5G!TWTBvIcYd5hl_+{}gPG(6!BmQ_pj*_jU35nvJs;mV`dqZ+%LhuEOVE$ZkZ9vsx2Y zbw3>a{)6ro_+eqkdg(D(Sl2z3?zYw3j1q8p>oeA4-mYT@m~skjDq(zdvDx5>34rGt z*Tj0%R!x%2G-kE$6x_OGdyQbrbWV2n3>Y`LcRvq-DAXEA>0H-rlS1f1nCPW1D_-h~ zuK0ALh{t^>U10_aCkP4^wu_%p9O`CUYUYZh ziVY&nQ-(M*zAvH>Q0`$iWf}f7^-_1Iax<$e^k+dFAnjHeWG6$t7ewn1Z?854(;JT0#6x(V z#cEpZn>=spo~}%^SXzpoxl0D^roVEKl9p2O+}f?1r0?5L_(TNB!xfr9+hSrkdl#Cl zg))W$GEUPv(`a$O=JROua!`<#mj2WF;BRXJ^uO?vZ(oZIb|LE_eFmMU%cS1WF7{x= z(dr?Igy@ls)Gvat4g#e3r1e`&p=1l$Uy4ZmI*5q%Tgv6d$KmfIBAuv(Xo835234p! zEV)S%n8i6tO8v!K1fZbkcD!`EJkhd`ehL>6`=LhuKYgos7pZ*$c=)Y03s;~8 z%iRD__e7yzc@bjY-#-mB*^r$V>k^DE|j_Z2lkr z7xk?=5QR#g#n`W1B*F5ak8!b8z|L0C>Fnl+kfVqIrC2bGFzJ8wN}EW9sKPKSF@8!FB!su`Lb%^4HWBmj zUm5|41Cqg!RoM^6pSbwFiXV^R*6Ra4{1=^1PFNNJ)ZRVBWWw)M`$wFcI{78G3So~~ zF#e^Vb{=sP5(|*GxbWXiKG>>)RQ$WiT2u3&rS5eAzr?@D(tL8t0@AG>;&1W4O_R>< zaKY)9l_%e6>v0N~+{CF#fWvQGLuvV6(ruEK>jM(+%zv8*pWsHL2{IU)|Mggu*#WaS z+{#`|@BP^AE8oqDPMCLworb409mR%x%kGyy>&|q} z(O#A<;j*#sCag?trk3+_k@~AYH;?N!y1rz=e z-ArSss=DL@At$-F!$Sn=GZN@VvF=){|qqkD7qIvjtc`N&y=VA@JUY5tQZ_)64QDv6cb{4nwwV0N@W zsxCi+1X(cvDY3yHjc(J4R`K ze~|MNXxX(ubkaDo)8vAC3zg{g_f&g!cS}2i1kloW?mJJjIQF`dfk*vuKD0#5_5!XY zQexh#_vR?!+7CVwu!jM&>afQdvxy(*FZpIc48hr-hdF$39~S%hUp`;$Zn z)Sa?I&EiUSjLZ{V{H4Kt_ycBNe;I53R~SPn%~nvpW=TO2j+53RB!g3JfENGI>tvU@ zL~mN5y8k5Xc$aNGKiWkdkf%B*9&C>Ofp;cpt803#b<>Ha;zj4)*cz+6bkwhWEkm)+ znWUbc&{?Xa)2tC`?#e0o6k5@We9q99KLz~vXh|J}B&V{rP9P@5Jw#KHr$bsDa2!0m zB$QbbzYn-4YGzCJhnem3cA&e&YmT)vQEV_n8LBcfdtfk-6y-+&K;qAY()fw1MDmZd zT2<-M7{5PLc>G@R&T{9uonODyB~8&SjT%EjFYQMx$eTx83-WV|4+%N96)8pM!Bfpj zxV5Odvwlw*8{x+)%iDDBR#Xg_LNgndexfCCJPhG^)RL)~NRE?Xva}(|FO-B}^d?{b z1DP)o*mOHYJmhN{2Qa;zC(}|j@r&~&Hz-~n`YQLvTO&!lh#qz7%w{xlv38ss+*PkA;# z)sBW;U>ruKzb5g{3NuN(gAk~g&{vGYWLYO`1&r)LOb*3}0$k+fLMd#y;MgXuoJ*N7 znN%bX% zqlskTdo3O5tX)5%?lTv?^@|%}LA=WKK872i-qQPETVew4n;IUvASQ8Xx=I*<`k0k{ z@l+xlf@{~$kr?rg4qB^|2nbGB%su@u_BK{%JZwPn(jfJiGFY?=7TDEqFtsp48v@YR zlzLF1S6Q?=+w|2AA++vv2~vzn`0m6Wb>w5BAS2W=k7VtpdMKmOmK(R8PI><>1&=#P zMj9HWxs{=Uv_h;_re?2;Gm-x44w?v^UVElc?+-LdOia(CD^0R2*d|nYq=)>N4NJ75 z9zYAKwHVfKB&UYYfuDWK(An6h?+n?(*CJG#T$@P%{+n&Ul!pj;A6`e?78A@fA{ZH` zw@0IOWCqH&_2@v(CANct*A5}sO_OSuEGd$5g5|C;`QW9Yma-=|`<|aXoa;65ntyC> zpk>en#a60aRBH-;%-p19*23cxH7{)aWb%}vW=!K@IAyQyY05nd=d!Iw}&n{-@WR%FnvVNEU7F{SR{S~7#^nZ2W03J5EL1aiXSwS`=F}m7>PwtZnR#uc8iJa55{dPqisxyyW!a!L0ER{fuSk$~Cxw!9#G_3-2mX&;@c7yR0wO zK-(#;Y@tF{FUsqb$H&b4SZ6jrA*? z58JrhH7J?dLRrf~QZ(Zl!B5xPzPYfF>3^~=>=<_U6jm)OX84IGDC9ET3S-lAC5B|2 z)VZmUVzFV8Qa20G)EBawejm(!1|T!T*amRRiMW9|FEJZJrnrF0f0ghmEX(#r0+4a` z2D^79zY_Bq;+z~*PAP*w$&Tt@v3l?tOoc(8R5g;oFZLOKq(+DeL_^>T(b?xFTBMg) zH)IKS!5P4BZ8mxOV;ql~i4>xg+$W4-1BC?y{m4Po1*rRvL4&mpN-L%*M3>fIMR(csr7a%WRCzQKTyCjJyJ> zUVc2ASh}j&uF^VC`hSY7t?;qu)@diUk2I8j(EKXj_De$cE=M$EQzg~)9#^Ebri5_fCh!&9%LDH(>*pJmWvHCj|F=|Q7&5N_PSx7 z>Pc*eMnfjMukLjq>k;# zSMX=fZ2xYPC2$giHduRPJO`chQ1PT>Qqoe>(Mz;6Sa#eQJ+g|ZlHV*86W#>49a({d!LF2hRdl7(GInip~v#cp4QuE|cY-!Ku z-cMfAm~T5SVj?f7Jd$E3S<&UI&??+L;@{!9$RnUfZFu0QcUG#jF*ZZno)5vHs!Hpq z=~U$5SZAQHROJI$05eeOn0#fRHHI8=?195tJu(0I3J3cvZ|x_{FZmSW2Mi4v)7Y@P661IrlOfaO+&7r|BQRb zZd`arMRp+jn<&&90fmq%)tzWJpf3!5I|WpKW>h`p_WvwsBm={<_pltT--cq=hb7drqhMtb?v*GSfz*W zP$$YfR5FQVgP7~V4tekxj0bVz>k&-eHvWuae($tj_ovOgq1iGDu|GG> zpFKOuHtUT?)NXZ=8kDBZ)~Hp@0uPIixJIIwDa* znmX0`1_^2(Lv1*OafjDqZxxPAINHZq%l1LSoQ^d7xb`_Xx%W5m;xa`pt}3^i12F7_ z9Z1~r{jl?9PJ%Vdy+r}d%TE(%mb91$<%-e5D$BoJ#mYCnuEio%z>vafAq`>=GE+ES z98HoZk_D>b8O+WWtSLC4we_2hIJU(unHr`Nrc7#Ond?+Y{$tYPP4S z)n(5TC0)6#^mR5tH;VdUbKUUuhZa0Zk{$u9_JI?UPort?rEOP%-gG2|mQ$yzk9Qe< zc^QBe87gC*NrL}T(4`uY-&txj0r0S8{wenfvDQaMwJ&f6;)v9%xq((q0*Bg~D-X~T zi1My z0XV71A)rrCxiln07S3s`Z1}b7K`7;-m*CfazrL$*-5Erp*?uB%VEPDzBIU8{Kqx}= zDffc<>ApVtXe)5bg;%psK3aQj_2{ArMvU5wOSjbOmq(Ck7mnwAcjIdZ5C{a43Y@eP zbP2#NKIS{DG&M2MN_4mRuzl6!;)FhPg!JyJcpC{QsN#iNX?*LSRI8cp2Cm&i~lj1#tKCoMWNF2gpxK)AF`RbF_SpUbFhkfd%ry5mOut$CdMPgQ~TKYHm0`cQUsxg41zarkFSz>vLL zG8rkKgDNNvt(7Q$~fr3!^GPwc>i;@`v&&hB(Ec$X7IM9B7W3{41O7gC8d*MJ-X zmi7Ndn6*&Nk7uW9ZFaObK}L^o19kG^W+72??OQkk;{4LtN$6F4xJ z!{Wj2rXUs!DvD93X_%Wp6Ih<6ZVyyvN{|n>EFzu2k5dfTX-pQwO(2GEjxl`~t9T<>P|#rX9Za31APNtkA-bFSj&10!~hHG&n(zOmm~ZV z*#^`Qu(E&!YXvOWC}6=<01JkRm_h^{K=N+D!n=EPpe9ahB<=IVywnCtPeH#Tz?PJ6w?)GwfmA2X@(hH)@0T4 zseT1#_-Dltms?k+!P4L(dxm2Y?&nvgu9Ck8lnDOQ42)7uDRwo~RT{{a=h%aB&?VF` z3lW=Z`ipfqs-8|{ke3B-%5r*Mh3cL)gk`p5xDz%4f*T7Vb&R+%`-x9{nmbqX;YsWS zu8uh@F{%?F9zC|~7n8&{>(s~dd&altgQTvvv%fddMHjD=G}q73vm15~cQQ^D_AmJI zOAX9bUwbRC6HQ882~*stHT0^zF}J?C2qINk+v_vG&n~s zrkX^Bx`?KXO&M)n3|oPx^r=;-oUd!J1lcI7cGv+hv$RneSATDR`pufJysitQppSH(4F z1*Kmeghe?mA@4@Ws~E&GXRT!)PkN>g$RT*PYv>I>We0^Y9*+={Ba%pQla3R-_=_`frB^rR z6F5erK%;RmrVK+(K7p`swp-nTTMnvv^-*OHtVL@3B{3vZXF1b}_w1>;5@HV**`ZTC zJb=G;Y3!jz@cE$!H&-;J)sY+DRrGtm$M%isjdQ%bnKnm8P5Aii{SQ*0 z;H~RS*CRH_wvVILO}#ZtyWIM_R?0$Lw+1;bDH-nvQ`b_} zO;@Y5RCJxl*ZftT-{>3kCe8Xt#9352cT1tGKr;FEN=Tc1mDB_C5xwa{9AgnUi0j|z zga-8$yA>uxpZl*5u%&Tv#UGTQG-`4W*O#F`R~w>)*4&gpF24vespJ}yH`M9Pe~vOy zCP9ggVpxO}H2(z}&XcAd+I-r|@jC4mqnY<9VB5HQT5Pc}qQDi+>i9!#IO5Z9g4)Al z_iZA^4cX}JrtE1R^m1Ts+ zpnKvYwk4FzFpm?TmTs;LH~)0NK7Sm{7Z>;QB$UiibhogkAgHCgyu{!p|N2@KC=mtF? z?bo~fr?)^(LWZ|>`k`|(?^31P4Q7$kFvaGA|BLuG~*?w|h3tD82@6K|5 zeo1ya87hmO+m(}isM!|S#Kb`q_MzDGP>NDxE@Iyb{KGI%3Lo1eyA`Rn6s_RK(XjCJ zY1#W#NV6?8@M=(cpQZ4@rr?{*%-MrHsrX(x+dk{70_f2@6fc0?d$Cmld8o{ZOAgnu zi*fB(bwXUU8T}uY%MU@b< ziuTEqil0oDvj`)uQ&8=7NqX4^rNEf&v4(HvepnRSSXZe%0)9*f_n^<&QyPxO*o{@< zfnk^Y3$zRMaxH5$Fcpa$l7x;updrAaqWJHv*JGS-zOPU-kGFJ& zi>iw%d%N7z*W^w;;zU?64zZj9a<&k>k2S&iMWC>dRFB6*M%#P(3;W4iVG^NV<8Oy~ zNrODmKINAYo<1gTOzTrQK(LdS1uE(iW7m*=d*t*_152*a)t97?sad3x6y|TWganQLqw$^--j_*6V)~rqTj0-O8bP{cs&e+6p z<~BiZ@inm7VfD2aTmcc|2*Z6?bfngFa7f@)GK=G>ZWS-5njy);j4hb%k8HYqIaZZy zRgT)mU!pD)^VkW2P<&BdIu%7x9MKnt(Q{vL;-y)r|J*p*6oA6we+?gA)76dMZFK}V z_?aicbAN1*InebJ1 zrB;U=jv=11kn;NECHj`sk>bQa{kSkX$q4dDDZ)rBJBx;X<$rnJ8z`XuX`t#&?|a3a zrUTN8AC70PbAjUFguYl!*Lyn{8qLyseF_rH3QL>eD@xaktZ_vs?8j^V?y>jwdeEi! zx>c64zwq|Bk;GYQQDOCD|KyflH1!p~E=`WBI90%?#Bfd0*H?O7VLsS^uKR1i8k=OE zAxymfXz(!EN}yxvK>@%)Y`_|?xQ{w;wF&Bd+Wf#Jlt#F7Aw1p4Br+-@kUCsATj;C7UQGv9^ zp|)5r_r~Hwr!`I7)i0UDsPuk0O1;E{)y}AXpOoseMU2mozmlNJ{Nx=$^6gCyl+rN= zSDsJdTSC%M<;s9K=9e)2UQV0BfwGE7B-P2G!mVa5e6%$>lbjBetga$}fEgcEiU^Gb|w zT2RET#;k;q?V%35i)yu`FhRL68r?19+e~W9gah6jPk4!CAp;kGPj2;>n+ivJdT0+; z6M2|$M){pdoE#ls5;rFY5mLbW2a^r$Mjrt}AFoMdR|ZctCnqd`_b=2yULpj@$a&*L zsnO+y6V1g53qpJS`9f|`jsTI3=fwFJf{oASM$aS|IMm1m$+=#=Z(Z}BtqX25P9@+K z#mI2}=AlZ}nhx2Mtig*D%+D*oVGEI=$c3Prlo60qApr@;;>8OV=AGWK4Qb7bL0e@0 z^iC)g3ozq00gb_opGqMY$gx3dW@7pzP{4(3bLWGkBsGsLk$)nx0c$_`BosmgQYuPd zJ)XjDmIcIjTR?3p_;%}OQxE1-kGG`x;Qt)2IPHVT2Po7D(Nxqub4BUVHH9;a#0d+j zr?V}hKu3h=Dy{&ohTpn3Kuj@QKt^p__!{p@a6iz@l`SNIVkFl+GZElNf%{>^^R1hh z*z}zaoNek8nWx^JaxNOWqe8yJ`Zp0MVCTy3JEs)etWhQAp?QKLR(Tf{JT)!Du^t6UDVi*3aTlZZ{Y$^I)K zO!<0f4M3R5WKg&OpyR(H4x3N-kBBM0ry9MB81#>f_vB3eD`OehE4-Qi-X<-WTnM&z zk*Ed`w=nH--+KULm(c%th@O9RO(f=_gb5gOYyIoSy4K?HGyDaZPX3=hTQ3be-Bj-m zCFQY?5LPVeL@YD7`0|4W}T=p_j;ULKsjQRt4&-z}j4SCf2yWHX-q zl0vf?HIR1?DckG@)vrjaber|H2v`k%E)kl=|0-Wq-RVL0A$l$0 zzaFI9&zVl z6Z54>;pu2|LGprOve^ybV#A7I5P2W{c>jXHK^bS?39x(y6)gUJv0;Tn!(sE&@9O`0 zwlYq?6a4hq2kXkT{D_CSKZspf$Dmg?%r zIzT|zGji({0&MkwG9UXsc|3$dP&ys!`1m_4OZ;$CM^>VZ((q?$o%Z#9B2fjBZ- zgnhJ4$*pKFuHh`jwfTq*(6W-{Aag5%@rBZRJZXd_L)(XOLf>n~x4Q#*-1WGWjqR2D zCN|zj53lf~s+%Y40fZMRH*cwYA%SnAua_%=&v$NJ=&{?)n_L!-hKKhHyih_Zrm|+8 zq?>M8PDzX&A3?+95|fbL_I`m6D^>>U0jVyB)-O%dBcsXs;#*gZx|6hxI%Nu*U2CrN zKX_{CpD;1jDsIyt!9zn^mnn!a_?>A?IezG4rSB;2jQu3B6~D#^T*@)M@<2!Jj?bF; zw1#S}p3MQ!xERmi9>dXLtzZ&~l{ zps5hZ#2tj~Vx?NHo}zJ@Ad9FRF1Ncbub}R*yOTer)fj{mkj(^^*G;qvK|q6U=@*>S zN`#V-Bvs<;n$w5Po|BmPhzcDfj7Ki9C4vVe?vY+r74}7BbJs$*xto&(ipDMrGh^2F z`;9X+Zv%WIUXslY^_)amqXw0oQpaua3c^58!l0jiOl0lpidE2=; zS+G0BIuVK6yyF5sca90VBX!;85qXBvGbPso*3YLn_nCj3Ls86uOyB}DI%Gd|YBXp` zt~DR>`yVu)kT%q2bbE_4Duf^~a2;r=kOhJd>>>xjcO_up0yHA&k!&B3@sY71=ZmL5 zktORJBv9!r%0?cRep5Df*(LG0mX@zofQk*Z!1?k=8|QywOoyhi}Z+eX8Cr4fsbzpnTV4XbL^YsBJE>$14&DO+Y`V+}|;)XKlX&AYf~Th)Tf3JN5| zw4W9^HX|p$Y;_Y@K`A1=bO62cbCteMrr9({qGryy-`cyvSiWVzSY7-C4|LNV=;4yu zkuk2$+mT!ke;Qxged;exqMY(B z2*(n+`q)ZbUD6}rD$Qj5cKAZFh?dOQ{8W;tZ>`1COR2Tp)S6RNGlj>(PN2few#K>kWdE<0Xuw>JYgclLa0Mv%I+sM8hPLBYzSfCu6p2lme4f( zJw5`NUMTqO&*TVL@B0F_)nfx+`5I;>%PC6!3U_ne5CxBiCMY1luxWGTN_Ux2W-v*K zF#;NK<&|&5EEi^9&_ta~Of;eGwsO-k7uHU>g8FoWNO z=4T+)o<`dnag_ZhZ5lPGJC{Nkr=D)_9%-UAVnS@CW3VwII;+Kg#9bi{Enx|lk!d}(g z&GriJvC3t2_laqG^?ZqKxpOTgi+|MT@+3gj@0&Z^=usps4ZBr+W3=rD2JcFo|JisV zjkWCUv3V8?jFkvYnstHd>z7?+7o0Cob|Z@$vO5vHDRXWwQnRE7)adu1))UE*5&2Bs z^l3cpqsKj3j8=i|#arHXSFv(s9{NT_7oVIwPXT%MziZ5`JLncN$B!Kl1uGxQJ^8y) zuPRv7Lj1F|lfIhylJg6wKG|?zT-vV=Gv0_&-`roUF174{E(>v7f8M)1Snzi-|7u>n zb&tar1y8qG*ujEN11<_O(K@OaA`RmwaQMB$-g)a@{Lz!I9>t6As)vE_%!#zM54!-| zLA*dBvQaOZ%hfCB0{{c!W50203oWOA;c4~FhsuomG2YPB?^{WdwXmUh^t5PcclVOV z9>=1(J8w6M`#C&1INI@3`T}!r!r_Mnt}pC=HDqz`7Lgm!$8AJFx}@Og=nu>6megfseIwuBVNYpVq#tRlBE{T|O~=JW1ySauc1a}FQ|rRB zd?UZNA8ad|6WX7ppY*!xftp;#-OObj!dB%FAW&vi+a)e}*Cf6@H8I+41Fh(D_HdW~(=&KiMr(JjdI7@ftRRuE_0N<2CRd=-ATer{ zM4TJUM*zjOMZdf3{B$YTPVzb0j`)XLxAqe1bnD@SKNH7;3WbW89T}tku4&7|0hZNi z!ghLOuLnQqd&uMB)?C2wzEPTYDTHC&`^wgaWOh1iegnME2n8{bSo{V5yu>AZXszO|K!cKl*FsMrW0 zzl3yJY38Xqa8^QM{k@skL=fT&7*%(O|J*btCTc)o_gJB~rhpa?*d(75#-r&tGb)m_x| z-OJviTQ&cR9^v+-eW1)zth){aEw~HC!z|e(o_xN%EC1`fklp#j7`h?8KYczlou2Bu ze_fRE&E;O;tp06|*X05= zka9E2s}#R>sl^s&tRK^cpWwBM(W?Y1?5`8f1u8otLWj@PGkUy03K7xr*{{g`=P&Bd zkQ)=Ya`fx@nP-LWZSVxJtY1JohhRjzbX^MIls1xzhud{;?46&`k{Ab5vIgxoG*&>( z=MS#5oqWeDnfYayP%HAPZ7rV0UpAfHyiElZ3lqHWe)=#wzm}}%phkZMd-N!aB5Q9j zc0VcJVhf;2=M#KsGs#Usk*r=Kk{c$;ij1oZCLMLw8g+_0xFaH`xy9!7Lq`&5p=bs> z2yJFep;Jp-vZtj&vfdQGws>%9p-uxWjG;s(@3F-otsRTjvjd=>%fY?n9bCt9WpB0{ z=eB~t#9h`buUK9jUyt~ebgB+_5HIWWWRvNMTf5F-2+OoRR(B@~Q|FMrKypE;9yAi3 z{G2+yAj+atR5XD^FNXmazq^erNpmVJb1MNADj9xrNtZqB2cwTNy8@B{T;b=kY$ zw_T}BA66pJFNJ0|Ki66};+}ip#+IpDMJA}pQS4y?{bLwKh+sPj;0DrjIq$Kq!w8sK zC4yah0gJ=*)Z`O2q>kKkKPaT(`Eg>B-`wCrT>tqg>Z|5_o>bH?T-nq|Dyk7}zHJHKU<0RrW(7ZbYjA7{<@QpOIw&xTeK& z>8v*wzT^aJe@n3ROo%fxl2lUOvas~NE%?KnE#POlI3aj+HjDAg49Vr+cry&Fj z;+XUDNysG1)9OBfVnm4TP=~sKm|{#L@5al9a1i;bXVY+XtgtVS9X%2q@USEZe*(E+ zVgOS-2M3s9ZH_K#S?xvfOo2Tkfs=hsPE&mjN`jEsOzIbrI+B?)faT+Lar;wN76Xz=ZmN2JArqCKV+2+;(C=U z^ReG?t{+>yE37BtHm@$*=#n=azAGyKTF(zu;gwC3%<9VQr|C#kE6v?VvZ{(S9DEtj zg$5-OAH*2<`d=lK{Qi4-s&q!=6WAbR*K@pj^YP$G>6wTL$`D0{+n?zZ#7fDzY3^_O z4zhd{2gm4gYLRIk({Kj9Ha+r#rbw*GXIdO|J1Vd<%^0h9H!6Xam1iYs>}|Mmm}#e_ zp<384;?iRXjluBl%6w2=49zL3At6#Ah5Cm2xeyC$yp>Nn%{uH1{W%hsfO^WuOsTY4 z{e?O=>ZR2Ei|FW)>;iLj6Ycb2J|TGalsdn$))a{piW*qZDomNC zR<>$pskki^M%dS`L2;Vk*-Nz6gc!Am9f|UCjR!K0b?Y zNI-|}mzF|=)|SGbu(+!DwjM$_XiP@&&a#%lZq_$v!j z;rp{d5Szy3_5gB{vM(*rjzq9MD?1Rjci(aT?QUFUWs`~X)MkpjtkUtg#2T{aYPFtD z69XV5be%fFLcp-F~Ov!jn0n*E!Cz(4e;Z zSFVe5x`pXFnemALFm+IB2RG`6szgGP=mSssG~dEZ$_%KZS#;E-u|c$-8ck=NKt_U3 z&NZXdI1=y63G42nfbf@I@@ko8s9-k9Qqk%Ld2$^QadMsiNf$^pcb7Qpakwrif?9Ff zCdqNL5*$;`jtoDTtEKI&9{-+*zP-QV_Ep&*nq^^;-?hX}VexX4XndN>P;^BW_`DZW zlm;??3vR{F+u-Bdv98~hSEU)|j%lEX2cIB|^6cw=tlp<)o`4CH)w8$w@GwP^DR3KW z{^34^rb<(nfX>?<`5{U%Iy1h;8@2pwK0~Wi19y=F&RENxXmifG&_j2U2%Pd3!Jn7C zJHKX?(`kmuQW6OaMm2)}S4hdci@IM@$ZwE*1~uf^0T8VkmC#M?Hgq0J;!qGFaCTFz zf`#jdyhD?69R6)<^_r(MyvfcUOUD%%R!=)^Dqae{KWVSXf9&dN05QUv^h8!s+DV_l zt*ytoGORAIcJy|<&1LlRKWuLNa2T5FSU+Wjzn|9Y;I+Ra4=X|gT~-e}9P|$Pa*Fuy z2@-m@weZHhiEf;8GwXSA9>)y(dZL*MwmiD3G}YByh}=2^2W5A0(+&sU!wm4yQnPOK z$hLb)I1upi&!(tBh&Xr$ z9~Ow)&D9J}CyJm3dT(h!wiDVb1!!siNdmPKu1=K%2OHX#=zHJwM6M<2J`b3Y>z}x| zSvz>mchARq%#Vqsb-4MhfQ~1??Jj$|BEcE1jdpCFDG4?o9{=|AdT^KUu6uB{6LLqh zrR!&I=A96Rfa~xhLvr!`ii=MxPjjOR`jy&QHe|>m2)b4dI3f%g&JQf?tov*==B*B5 zdUX6O^fUNFIh&4wlEQnGn>OQ+lgp;_-{=n(hXD)39^F@cZxf~1_S3CosN!==h57R= znHJ}rC0fPUI{kE;;u`IA8_M$8gc{F!h+DqY8S7Q|Rx8D;?WLNhdD2B;#pt}g4%aFL z2&7O9(V53Bj4Oj*DB>@wN$ z4y1lonHKPXX|F8W1qO|L>FL#`fy9agJ+Io;Q?uS~Qwka}P2^9g)nBxr(qJh}9{!$;UG)u5L?}&nHjo`4S?a(Z@xB zM#ZTQGar-Xu6qQ@x|Ro>&L`Df%aFV08v(X_k-bubE&8AS;S#=fxJEs4Z4XQLeR0PF zCS~{e3u`0vR5Jq2`08#Si(TAF+Z3D=iI3z7fiGqx4aZ$b5nO6lB?5v=BZrkx1?Bz0KL|5s8c zeQUeQY=3M$?;JCW+xc~VJ-D?U`}cSA@$|Mq0qgzp@pWG3b>Nvvx!w%q{KWZ$6Xegw(Ihfx&PJ1Q2sm8!XF#1+KU8l!LMmtV!dc zob`dNTc!Bkvwfg%6D2&ONFOcoTA#LGK#D^{nH!G!b^T(-sXS^QIV_rjJkrMm9$kF-RfCm1FmyPw2xM=A#Rb_F4h`$^F=7jQl_v~&cdO8S0~v(-6uMBA$=@AU+fNt1kTtQD1BZtqV+AU^M>>NxSM2S^RiS}IW6R1Y0y zyEoaXnV{Y}U+=LV?f0vxV!ia+`V&%r(Zq=)ga3In6im&e7A^^(HNRw-q@U30Bwho>TR_-FI zz~PLbb-Q(2MeAn78F+@WZeovW+#~iXQCRED=Q=g*dK0WL%WV1&%Hpi;{~r{x1`G-z zYjFeyg&fv_6+FCvBkmJ<(f`8I?uCFbd0^6QtB|em|M@1k2}cp{-DBeFVm^L)x7^!o ztcH{kU<#{?fI36Q>f@!>TU11lPc0AdT7U6=Jcv%}(tSPXogA`BdS|DRwl@9*u+wD99#Xz;2);S~ z?ZfIQE&@GY>;=(il`X%1O|4B-mJJ&zGAZX=vcxA9yc)V-)S^!;)#t9r($%YFq;D8u zl-90Vo4ps*eZ5=|e7RKwy|R9JdKum85}-B>1gWgk?4iBnO`exlGP=H$+q_In>+8Rj zHk3!-GJ^ZkTEmT=m|F|--j@iT{Ix%xw4$;0)i`OoSvtm~%_?axVbLvTIo?oF)Hu0n zc%89(#S?hDpS^z*m<@3WUN4#*K|(OZr}BExS;$j$&4C$wU2IapS7o#s*8c)c(L7KL z31YBU5q6k6@p&LuyVNnE&RTHN|AJ&ljQO-l>CM6Jeec8CpZ!U287MpfqSHHQZ%$q{ z`*RKJ+bSlh*X>b-)ZN7W?0OjnA;%H!+!Gyu#7z_*Q6-`_1x(D=P_FyD1AF5MAIzt1 z2yuCac4K5jusMPA9`2p-{GPI{Jmdr!EqwjTsPW%+Q5H7KcmaGCn zR$=*wN>c#xe6oE)<)|b%q?~{%g!5G9iUd5HJs->{!H0 z5Kq0A$t;l0$Rv&Ds!gvIGz&CxC3|9h2%F0lt(K^5|9V3w|IPE4v&>seR1C|^>7>xC zC09<)7s;a7{k2?k%YYIWSi03{hlO5v&d)($e9eSYSPuzOXVVkX_s&Xl^|=RYD7EPT z$bmFJf~_dCoEOu;qiWYO&cFgB<)i?>J7QR8(w}Pg)%^B5;(&jb1D~jRH)NwU7PUL~ z(v z;pmX??UnKEaSbHGV?9lIiAL58toD zHlYf9wRjckJx`}AuF7x!7bVP6Uj+xtHox*R;S;)wr}mxbX~4FQ<(pv^nzHEdGj+lK zC)KaHU5)NA%87iUw!%k0ZkbO6^qe(UQUuPRi1?)eJw2hz2@$MUxSg?76TOD+@J<1%85x;%l_mkYsk8D zaC=!|%oh%%ux-wpdG0lQJHdm1&O_z;487fvWE9yU3iKdS#h_>fkxxqW&H3e>1mb{; z_W|87!QH%|e_C&U-<#oysJL;vPOCp93lzF&h%)}T3MuV3zJ~kC5lTpSa?Ul;zP@pG z>r4a5KGxX5@e9uK#7_=I@cyX7h_58-u2T^uN;QzHU=fCtnW`tjNT-Iy=g^Rbxf|}t z)1*f=Vy}gZIZXpEASQZ;v(Er+f)HVd2`qX6j=CNhFGvJ|BC2zX{c2d5r!

    1M5vo1v!(Z14Cm?=9MmP zMdt#cXQDdey|6gXx)1pFyy+GgkeU{rj{P7 zyC%D)wjPS@Q(L@)U$zuW)RHZ2J!b3q26?M%U{vRJV4vMM!4N^M$G^cBS6neYZPn}` z?0^nfcUV^b3pcLzql%2Rt!zjaN?GPkarRA|Jhjv*#Xx}nCPZ99n*vs4sX5!i#(6M? zf4Mz>H%`YS9czz!RqG~$wq!SjdYq;Ke3bjiSb)kbKXmeDP&K4xofk7^zazKEQcE(n z;49t*T&C({$T!gUgjfo`*|bb*{lag$nkF7afLV@8l|0YtwUYiH)7&3YO{>z9p7F8j z+HPr9E$9id)EN^`6=$_LKMdt|fA&YcMXmT>g^NUf>D!(GiA?fB=KC}{4y&t{w3;xh z^`>R1lmRm&Ug`@y8z@7zL(7xNa`xpIt)?|}UQoll6u<`MD0Q`Kly@7tO`wg18>v-a zhZhStfA>N|rR`;l*XG<^lM_#{Y_{_$>&o!RA6_!UF1j{id`b|6qqQV+QWll6F;ksU zMhqxS`&VG17w7++AzJv9dUOc>YcDUHJs#p7GZ3U{uczZZ<}>pIJdBQO$*w@>HBcK6<+4IYVpSem*vAz<&@zZ~b~BQ(397wkX9Ge`Ac z<@Umk_W&?JCj!E8+E|)0!EY-3@_vo$<5&LNnzG0rll&>Y%4z3O1lU0Cea23RH}iQrrr|p2RFvpF9-@ixTmuiGO=>6Ll#qJg zEDElVJ)w@N2Y-}_iliUxH8qg?Td&7_3{TJ_#jey&(yR8t??4d1@4`&4=iKbMZdIgT zduMZtHgy9Sou%9V>HJsqX=+!HDc#U&OJFb%EaXJO7>N(yAitXcbvYN!HI!7i2qdf? zq4?_@v%YzaMIz(FYF$=hqh=1uX=$g(;_m#&=I?Y zaIW6LfQzgS*E%4uBh94tiBl!&NhL4l0~Us<5`h69cI#>?y*GJRiqu4o$ahD&RUzv4 z$^lh^n5K?K(6uuWTOtiUHM3)AySIu*G9k5yr$NGH`y2*)r?sP&&+}bMi&j6oRCkqKtusF zTBOR}#Z8%m_=*gXJHE+qEvh%qa&Xug)9pS&m+7Eu0MBS7k@_HK?^Wo!7!&WFbsy#% zsfpV2Kf%s-bI;idmy>f;(n6tg41Rg^Q~$xsfpUdUYpC6v;33EWB~Y|ou{EOihsf?- z{@KG2%AyfYd5N?Le=>3oGBV>r}JU06pMX2YLwLZi+o#t#Ww_0I6Lh z@yj->1R3xw0Jt>_R#&g4%!5rrw0IQR?gH$%F0}IC1($>w1u(1AzOgC{UM}?Qj07DjO7%EI zE!bN{CH;}ffg*ByEx?>gpc!E|qM*p=nWIdoH3%*@)vXf3Vw*lE?hJy@0j;{q#4Bu^7dC3tQ&Y=boii>WOi!gC>4LR}y=x9A^R458X z{iuA%lnCo|+h?tP$$IzXtIfO5HDFjw15%Q|-@68Js?C34`+e<; z4cGZRP6t_Ym#e=2RU78`RkU%p#+2w1OyuIfnwj6D+_=HS-`OhHeDHA`$#KGNPDLe%b$~h zGn8{Xcd#(8C6kkohOEI}@ZmW6;3v~hPVzg2m(hyXA9|2T?xuf0l43~Qbi+?;(k|Tt zz-ueQV+lq_(pBtlB77Hb$@$NM&E<22Qm?&FIQ}8=$C;kI4VGLb$W#(YV8(M`4uoa@ z)ZfJBrb>Pk=UfLD=agBL9!Sqkbv=)#tC^oEUvD&c>=tCc9v*CXV*Gi2C_()}7ChfU z8Akh)`3zt$>Ft!dr`BltYoyv!VOD-E~OJ&8cmq6~IZaH7BMUrx5@Bk!VCUNu;{; z&E1A(E0y5n4z+Im=S%7jRlONI)RAF?Uc>1T%Rt*F1%^-h9gdGU#kgzDV5!(PxF!e`8l_4i zCRbfz?YDbdK!qWGI|2dV5p=LwH`}MXm$h1dQ%=ouC9eIM*rWI(foFZnlX}vkE8-sq zT5bxyco|&|LGkUF~dKdqWQld-1B-5uvS%Diesa65C& zg5R)2DkqFthaG(@a8F%rB%_Qxzmna>TGLJW$yrYqI$2{bmJ@ogxFGUR&>hVoxOu|* zR9NE#g%T5M|MUdZI*-8oVkFc`NMW!yXlf4PKEwccdN8ez)boUT=1?V7(E(y;c31iF z+qFTCggJTo_%YOqr)*>G{czQr!u|z$dMl*;J4`vdL$<1=Ros9tRUVpX_G-hTWX~0W z@`~{Ild01mZlgfVx!V;e%1)pBP6KvhaS$}%TpEq*Qaij^>;LVsPg&pt?c9UyuiB%4=Daj0AM@j|vCJ!WwyltnwD0)|2`I5u&OXe2IFNyY>= zDnyRhkeCq|<5pf%5Mp&oTqN$rpBCoLMr7ki5W^_aVXjlChF0d9~JAtFvT1x>(o z32k9KTk*|||L7bpN(tM$&Jj?;bVj6m>V4U^ZVYhT4&-3{mbhRuxZY-5fTHJr@P_w) z*m}#bxRz~e7?cM+tkRnqLgDRRva{%ux`XwDKM1xrO0UvI zx0S6xgwg2u#zz<0!Oj1g|4Uad`b7&E{5zNt``M|g`Hon9=-k*T;iR&u2bQ%Qhyu(% z=F)l8d_7$#2Q+MU{@uGdcY?mc!iQtnI67Z9)p=W)BcexJrR~o!bbLtDejKIQD43@N zZgf++2fiw$fHtMUCa5yI&a9HBuZ`)K;+M3w3O0Plj!tFfWN*Z#&p%4U7>|d87Kre% zvkwQz`Y<9EVg+sUST?lZ$K{iv=o2mR`(r*nWSrZbKbEYdp1C08N~M2lK3Dp^q;=VfAN!*#Zj}R6 zm(AbY@sieu3tC0l1fv(U%74dn(zA4T<1EOiu*j%>p0fYMUUoujEtdU$4&xUl`C0LY zulbv8%hVU3>=j62%k*t%|G)+Wa;O6uw2A9v&W#N1&g^rrPnzd(wAi%m61|Jbv+TqG z7=N8EmxX*J)D4h7N+*FWZnTM&jzjU+$?}@r>d$1+sSuSu*0H7ao&E*=ETZuR@miva zi}7ZqNvOP?NJTEIO8a@?()HPDU}Ns$0kr%sAb09pw3dbXNW!dcjqb~1^AP>->hEnf zu8#Mxz8gQ;1J<*n{2O_YezOvJu~y8U_nx=|I_rXS2Zx~Zekf9k&v#c=8R%E$D_|Ng z2|^S3FSa;J{Pv4Nf-m~^ti@k*JHOv#C7;eN5dRjbs!#2|3`d2pTn$++{IQ6Y=c#WO zI2WjnboEjnaGJYGGBr6JQASVgwBt-vni5pJ@zDI6{kqEF{G#0pV1<#A8Se+o#A0ZX zR7??e@{DwwD?x{{HTTZ5xevnC%gVJ#oIBbnE$xLY$7Y~=AzYctG{-GRjK;1RW+Dg> z+yA=$JEJ!myWNzqysNSG%im1N2Qo(6qj>Pl#@vR(uxo&U&R)$cNkG{9H%WRPaWsZ1 ziz`X_Nd;5M<&F}~5Jnn586}%(j^xAb>&?4Qc*-NJO}nGx3Z48hVpo?F4@RLcqC%bg z3*3E2CAc|t1iCU*+n`;`NyG2lS`d{)ZFO$Z<1Y^nSB)hvzI3~THeuYcto;@y#a3rj zVOvolo=h*lug6P-d^mgWp2lCiy@~=;3mQPqYS>whQjS-&a9h?7@<{!dC8PvG3#AS%beI#0UtDLO-sIC%Zq(j2x~yEu zkmhgB`qkctrFdyR`{+MYTY=2!ou*xk*;G`Gt3yr(bFC$jHrH_ESf+mu3`?Si#2*OIlEMGnPQP!$$~%U>N#eCnOcL6`Km2xea$E%vuVCKim~>i z$w<3mmEt69LT&Y91a!>QLF+8aPlTV~cgM8pMv=_{JnD*sf#2+K(B@>eE8%ZPvJiSt zg`+Ob9?|U{XHRAvlX?s*N;vOrjB%-C8EbqN6#07tLAqCn2+aO3$L^}{xCi5=_jgUq zFM=8|2`>4YyXA{g!$SSu6$Ujt-L}2F<^F9~%pJn7Sowh^u|U3ELE_FzdP7>*^Pxq8 z3;!XLZdk1MQA#^E%ure>kfJQN zwb#M#Vt0)Gj?nklU{~<)LX1j!W11TNdkOo??`t|q zl?1?iMSB!vRW&$fvEO=`dT}XXqEeK@<|#;l?yMpX%3&@bKA_m17Du)RJ_J(UR^qZU z^wG$@8m7^>PlOMXeC7(1RWy_LS&$SMvvT^yd|a#Il5jNi8OWc18({_%8hb5N;05*& z3=CiCSDP^7!i*d;2`N<+;oSJMDfF3?W6fyQMfSd-SSvU?Y6-ATcy16ILmSviBpU4T zGp*L(**a}TUa87o%e9oZ3sFuXk>n)8C;rD;W%R!uRoIqai@p8Fz%7~oKgAZhlPgT_ z&yu4VLJ4nrdaF^1`B+~ofy$Q@CPz8+f?%4u-(~WBbCd z#-|8zc6Uu@Z~uqMeAg$CNN|Y%JGELOiQp6lFC5qNh2^c7`4JJ;&m)Z1q0iJkxD8=@ zJ`?=6l0S9up%TxWIj)QRw=ZAj1I|i8p>YT(iT`J&=z7E#%6I&k-v@MV6#OmQy*-d$ zP!v73w4rMt@_YU>^@J7LNIs3`ClD`ls7|%^Oa7eRzx`|cVNDhPz5M<5_xW6K{~E-+ zf?oLQ=aqiJPg1CVrUd9ebHdV#dBS{KiSl()lxi(d{AW_c*`9v(8haS~a4kPdR=;iX z{W{_vGmKSXAl>tN2iSVBfBC%$>OGKqw0a{%SlOyGTX8ItAz?tG6=iHbex8K4yX~H4 zyI?RbCv%;D_G7GGy@25+i(W&pGj&97eN0a53`APT)#;TXQ0RVOYEnM#a63H<9qjjI zJOl@;MZaD5>e|yP%}mQqGZpv8%52k^L9dx!sO7;$w?R%~+2K@acg7akHzsuZ7G8PQ z%(o7}2SZ#F0zfNG;}BChYI24;w(fXadaa{g%fMIT6R-P_-*s&YE}2!9p5j-M&p3s> zptD64{KHB9(0pHKN4VJ*y&Tl9sw=4GD~h;bQZbhe$cimmC@n1CZ}q>kBiV||%vC}V zj^0sH0sg4k0AC7=5*+S#^Ypx@Sm$vCQcr5VQDyfM`rNn`erdn$#Ap)2R!M1Z9O(H~ zVfi$Rw@re*BXo|r%CY|H@&TVImmV9W--({O7nZf9ryN2?_HpVf$Lj3a><^_>VNi!C zOz`5yaI}WYyaqw_Vq=EO`tnp5FeJB5YeAZm+GAvZ<-ASxB`;-H0r&oP4HsHYN4s z@i(Vhp+j{ZCH{IRHb(FKr@;6saN>2D2+BCFZa+@82LAl8%*>|!^{pqa$&b$> zPqqVf=Scc)qxWsvNnKy*;%M}yqIIS<*CGavXBj%sn8#gefi!`N#?8%^T=lb61siXA zs+$5?5L?FjL8O|8RA1kI5Z4t+=fYMOD;&^j4m|6Y8jEcqi-8k-zzQy~u(h?*&=pC| z%BdP%j=VoOZy|idPwR{+8SnTY`J**)NIS=k63wovBk|}*%e@RR?{uNf+Y!^vjqWo# z{4$@^(OI*ZqG+DIG_chC7{-q37PhGGNYl61-)&N$fk=Or{^0QNOs^3*U}CTRT3h))A7<_Xj^ zHHf(b;yHPK(QiDBHHR>I-@f_#Ys~?Ets42c z>Uv*2d3Q)ZdZv_&QYq~YCxR-Dt!gQj^ciJa>tu?Vg!D)yAK8zocMToovyH6T$G&L9 z^XJ&fdE4mu+?a;L(5~3Cnf9U@U(Ax}=Pdjr8F<%JbLF}dlY<;T1h^+QB(PALL;0dIHQWpdg z_|ruw%wm+x@*Q%a4HFYyqxR2jv6(-T2({{_C?uQOwVm87^cZ;_*&*FeTYlT?plF^x zbjej%J-0E2EK1O%c{?4PAGbcLkLY%DPu>#dB&b*zEJwPBphEqPA;kPy14z3F z8EBBZwHu@0Y>F;s`@FZ27SPvae{QrX7mVJ)6qcf{gulRvzy`(6D+VR*VV{iV#1qQ>C zFnuLgm^_6Ot87gAp9P;L2g)ERKLA{Ao$5S>_}5CVD7i#=!LUBt4EaxsU_0#s4`dBN zP%EiL+Q=-8RGy=umjnb-w@T4!5qVoZ$2#HH2TaR6+e(zcorL}8VfH3Tk4)tFx}_o1 zE_;aBKiH714~;L8bnF5V51qpG!j~6-m@0GiVtA7u#^Xsv{tNrw9czZFE@GHUvHVkW zOCixnyt!8>B0MOE?wN^by{M>+?pHoyS#imbV)gXuEn8o8JSqNnHBArjwgl2}+^DG9 ze7(k2XCb~T4vJEYQxyQ(N4DhDd_D8KA@Ak8trMdb`!BHih$r>N-cqO@(1GA{XEQCU zJFOGp0$})nrh2en=s{Qpv#NcIg@J-v zJTwHSOJ{i9vYnZye0ei52+DQCmk#Km(p(kfuo4nU8sWb{(2qzu*6zM~>#c0IZ!S`c zmGr@d>sy}kb>M4+Y6p6BJ+iV&YQWb3{FwTQB}FO4YRUraiE6E{8gvHXLC-^288n<~ z?Kxm7`x*}H13`nFUT-XwPWe7w663!E>3ZZ)TeO(NvVi{K8tw`&KP$DA$xJedapo#| zICZUT@^lhSUpuorlSr z0^|SBbSnFZ{}JJgpQAmE<_hNDD&HX$LZ=fiuE?f%2OE}4=8eNG10jdBi7j|eSn=(o z4RMFss|B-nCUOeP=t=| z^>(`}9|t05hN}hn+H`6V-rTloxI&P#kv=yxr37EHTp@kSOq`PL1r!UDCj>4&1I{aE z06x;$LjW0Lrn+vKQnvMO(0OPgBlq;>7v?}wZ714p_$4N>u&VD zAzkWd?SuDzI;l9s_I5^D<-2=JpZ#^Qbm;wvbq%WF@a)l9ND*lEz!fj%8@1<|^x=j_u-VhSBKHpP5%4;f)TG%!U^&DRjHiu@^6pV!TLcLmj8rG~~oLpb%*c_i@D{g!AVcrwLbnnERAux?MK{;A!(L2x#*UD>a(QP77^ zF7P8u0$$;|6uziBU0PqTQ06{yHkzzOB0*cgw>!X(|c7Hs^ep`+g>GFXptJ+q5Fb)J+4b2glLfG}wLubKsn~?`FM>mx^<5 z{i6EZxGNyeH5KL2-0#*XWIL9q%mVOWVeJX2^tVT|CkR|zU^rX`U}1|?E8^B}eqodI z<5hB4jta^huB-u5SN-3!;bkd69NV9^$8d!ErJ{^jCyj9jxc;CCuw=1uB!f*JnM&7_^e=>^h_x=T>|ca$UawBzQeRW%7!E9iM`d zNd1T6TqBL6(Ma1{KcX%8nl+0pIqkX^b9WmBtpZvCyAQ2NSPnHwSRjY_po7tNnnQOQ zX{)7V=yN9m6BX>fvZ@7ft-QWTi?ITR*TAHfg&{e_Xm9*4)X_?hRK)%V>WuWjc4lQ) zPKB;O0;g3R!m;(ySEvfNrvi4O8(k#;|S`&y{||N8(8EB z7z-U_*AhuSH+-yl72*eR8pul+v$a?Bog4rR(uks{b`JDX0V4U5p594bt#bNQa(>x@ z*2vps{V#}*b#|&S{UUrS&8)Isk6nYF>L6rRPS15m*dLMguwvewgMF3|>z@_IVsCyP zagHzcI%Eu843w$S(A8aCC!R$gY@{~ya7!x{;#1D8T?x#lid$+I!A;a+k1!_&G&zfX zwa*uBTdKt0g*sO(pkG{0Grf2nz3;3Hrm;qf983Tl;Y#MoyPyKn3%}U}8odGOpQE|jS8ykd>-(C66%;0zE*BGh1pPs0LKgiF1W!Aj6yVDdp;va(bMp@c|By`P{ z#iVh0+gAe%-&Q+_&ZF$rma-TLa<~dw&GUbZI=%huq~dM$;<=AdNt(^~-MCLZ9-~Fyyxm83Zv?kk0}M+qqm6PE zcFHj)s>WE1M)z+Ewh{t#NU!OT&DLz=nlIq(oZGlKA=y|H4ZW#V`lro8K!@#UuyUffKcjI{M-qbCzb7CH%!RIoz0i7jsHHpuxDc6Lsyn8{G3 z!@iI-J00M-&Z}VGy8|~s032=&?^36;M{2tWeb0ABY3aDK+tGaTv6b&uPHPBPHuQ2= zYGprha}fy+5y8#M_!SZ@_zOGxcW2(G=P$U&y5N1PZ%-rY<>NA7LZRGeW1u~l{)fR# zQP|d3sKs72@H6!|eH;Cmdy=~CdZ0BKAF zrVF*eE3Nm3)ssPiJreeE=?yEARGcpR4;MO!T=>d`di{qB1p$nyD^LnxOpE>pV>%dH z2ymf5DY~JuZ-UQE2Agym(hDA+lagk zfO-du{s*CFaw_{u=w1Cw=)G3U3rdZXMVSPMv%jDVXkCfPebd#QQ?C!R03yPEevL-R zD-hgY_a~D2`+)y4y?@*NziWY={EYwF6y^U6p(_zzBJuKtvssW+ zk98{!?x=rgUZcieXfxN*DbPtPukimelrQ-0D}4vYHyc~})#@!%`pwSJO>`SqU^#K1 zAZ2m^k(%C|up!I!SiD!bJ34%tCjt@-rw)NZ=F+j-z-&zx0`)dR%_G;VMbuaXSykV{C@Z0$=d+CMW%q7QLMAF+N$#G6Lr;6oxFXGMus&mw8O zgG}K92h>gekcfV2?1WEtoYAR!Dg0=SHY*N?7uy)ACI$XOnf#yzEl3LCCf}Ek;Gf&> z7JB#A<|iB8C?j8z8a0^htM)#BRl;1@Va%RQ-9VUiwXV8qwE%fp1ik-mJ|vNVK2Vg* z5=+KXCATCE|IXI}i*`6dkWN|IPHszGCcM{BnV!!L8G^;d@Q?E+rTic+1%C-c zyZ*Xj6$Yb#{DhQ6ClG#f(l(#P{$wwDKfA?23oMwaiOX7CvcoIA_HQYVCof}tD8%NJ zTZduor=WCg$e{^2{joW+s>P;IpQ%UyvSdhy1cy5Y=Q}_nk|F(gZW@A}j#DBfK}5JW zOy^_#OW(o%FZvD=pzju?WIZE}Jg>zvB*NyX+C!x1jtm7k8rTh!z+QErbAY;Q7e zw)~k4R^}$&durp!p?WlLc-J-}>HkdE_$YhKbEL=>T@y@vH?=f`fJ}M|4tzS_l=dihYs@ z{Sg^F*%gw(w6dlEtF&uF04x~;xHk%y9c9&hfVcg-xf`!;zMjTQ`(d7?B;3sQlBV2h zFeWMn|6Wz{koUe6M~VkuJ%x;tcYTRJAX(J z^j_8AJ`l?*3-U^W;0oR?f6$b<3T&1$mj93%azXadDYFfr>PAOTDzdiCPS;O~g+>J9KB1}v zIuDtb#foxc@<}l3H`Z43*{*dQM*==Wb2SwmcAmX5o-<0{=|}m4w|Sp0Rp7RFD6%(E zLFD`?g@;JQG{1f@&2Gy<%bsG@5sh>T)pg0@ZmD@-WNF7R;+-%=ZuynpI9rk<+PoQ#_9;v#b zjyZa0mP+%BqdjRQhmyvzp@K|p+m`kV1!HZ>T!q$l3{Avpv2t7nR@Q97*ysfnPXD;E zhNSSdE5@ac{s6g-i;n8O_GzuAOBnHOftTpelpNvE15waN^r4_mc*t zeHX2u7GG%*TVOXI#D1{0^yh|GWA`m{Dg-!Jn&tyDi4yTA8^m48ni_v_SkLtRg~PNJ zu)`26{HsQu~U;&7C^ zkcG%ri0W?qYIiP;nNErbGzg^8^}SzB^YWv!liEyo@_IM$i!>eGxs>wz$LC!V5a|Bd zf<3wl^wRm77Wb?5vxW7Dt~sF-zSxghXq`4z+8LGKXH!vlu#z+5pLSL|5Gg+}zB8eq zz}++eJ#25^g6=mBe&3Y{DSZ=aZ-2T)+1%UUhT)18oFaKRX5QQejg56mHWFT5xoiF= z-mN8N1Yw}g)}~goy||^0XB>5mZ6C7cV(W~qPBl9U3Ndh&I3Jwe?Su3|4=6F@H3Wh5 z4ZE6FF?P2cZb*7%-Cl=x_4eCHtzK)j^UoR8%w61q%Y1emVlEx;OU``KyaUI?8YrJI zmc+iE9rBzLxL^u_lJ^F2G38I4#M!LEC!R2L*Oxw2-lPs=Ma7h~kRzHD3^~53njsSU zJzYo>E0(S{jyp+9fIh7M-Hyd5QGl)W%!N9LK z0U8|l>bx;#L5b-PWk=i44i;pzW)5R+z0w^qj!`K^5|R(cAenUFSeP)gFzni)EJu)B zQP6^xB2i$aEzbJ9#P+Xy@Aa{ib@881K3dE@*=ffUH6wl8(UfTu?fA;3ho#K3Uy!cZ z8RnIQY^tjv?hIZ+GGTUu9cj#YC0>Xj`t#+gW>J33suN=)%8Kyr9lYo_3PBBmGH4P{ zVLo1@R~DA4fB-~#bOj(%K%B=VB1$?$ni$CKTZmvcM8!iuDV_Z!h-Xwn4Q%EwTD@iN z_Zp`_K@gNkO!oIlvq>d%J$cmq`9T3~yjz|d+5x`nylKmXLWw+~NX9QMx_UAx*tuz& zbC=XBGZ%lyLla0Rj0&0hBu;L?%nN1!&CkYA0k#5)LiRoscDV{H5q|}bgu*BLCw2XxmZxAa@Mx@Ry_ORPoK)@=WQn@KnOWF zL;&IVcNkouTN!!1x~B?){^^?%4p8v|t*5?A{6D=?y*_N%JHiC22{^eOQFp<`F2F$S z?E!><_o^F_-%B!k0EG+WeRHF$r;?_zj)YyN19!z=Au|Bg`2?i(x`9HB9@;MPpMUs* zauG83X%8UWD0sbwFAIYHzkQ)a>b4OFa5?XFMw`+G=DEJhyv~2R2>^3oH+z0x`rwV* zTVCsK;QIhy48$neIfY*hfkN2)jJ!ktXTUrsL{jPQ_1Jo36qIMGK#&s?2szk99(l0^ zR_khVeQb`8zb>`68#SP?_URl*2*qdcZ1BmGF#FED!|5jYf&(;qO7`9UAvg_?WE<=)vgii zp*?^{fZ}(&*_cKYzhq;p?dF!%TXbi5Jv)aa0F^R#Yh>!BaC zJZ%;7 zZM=Q`Fy$h#tX)}1KkG+trl`w<({{J}t+_D&RuDxA)=d+x&Jw3y$Y^c3-7o9AD&~dy znOQ}cBwxCkg9g%PLIhWgzAB8IvN)Mfyc5FNR^raz1!N!<@JoP{rvYKV%zBLp&bSLT zdrU(TP!3i27q)qRkI5}m)RMh#W_d8~9^z3tGO!1~JcE?qE~?>y zl{9DS^=hn5pI%fTDw5~Zj*WmFo2b$N0=am&p&nbW_r5Sj0KCG+0w|#AfeIhAlwbsL ztw&VC?|Ts-dE$2RZsB^lnR-z7nujCPM@db2hM&pa(jX;*<~{7IIeMU3bY=3UUG90gd(5cASmp zsj$Y9FJg0v7G*&kkNU3jIj$wVG%zO_qFZ+OMq9Sasymk(;r%DUmF_H2f%Wz4Ge4R> z)s@1pCNHVuNCuS}%=Gt@78CAC;5aCQX`H6}h7qK}s%Y=qT!LUIogLM1x(=Bl)gYkc zF`)UrAWZKOjq#bg2HddHO@|oeGa-t7aDGj-2JdP_C#shY2<-tAsG<~s1kp2m8q^b( z8>D)=?Xya_RcmN}NumboCG!(Bp{k?WSOZXIROP#Jv;vb6&2z93Xjs21iN}2i}#Ih^*Zua@V2Q9Oo(6 zCv#Z840quePboX#?Gc|YIlw3%5mAia=}+s-4C&^O_5Y+HEYHO~-?bdbgP!ug=RmhBe<}JgBc}L_}WM{`6W~e1qSj=^IH)dpKTc4MLqRkERIsLj_IH$YE zm7jw-tz5fv>@xD0bGiXYA4)&h&9reI+e0ray+Sx9>-k`X)@gT1uJBfe7 zA_T{4IH(5HDn8GnK=c#4d2U*@==K5Ih+E7C4MrDu5wgSU9;Y}4O@`wa*BVDTumnhG zw@OF835CimMsbRA5SMKbu|tEwY=nc1)(HkTw-9-q9(uth1Xu}=eQicUY`Rcm!<9AbT__wX+6Xow|sDfMS!f(IW`WYWfhPYO*t?x=|%oe5OOzmM?_0&K&(ylhW>Q z1k>eZE}1o?ep85L-wWb!))j^C3Qr9_I0d01QS1?=`LJYjXyjiFNGHM_}v%A(14 zyOji#a!aKN(A^r6S(PpLQWaC&m({yR_@^+6fVg1^3-3IktPZba*& zP~eoQU2t9pO=tROlQPElP>Pny0s}?h#D}YR0Qgf zmC)RmF6V{G4CE<<70*o&rL#P^0?wQ92>^!;h1FT2u1b%3Raps*3$yYo;aC~o)4+s= zV0C$;8J8^QTmv{n;7}x#_tKXMsJ1j}p}WGOWNTjwB~i8c)JcR~KwNFW?uXZv)2@ZU zkU~+r?0e09_;P$V?^ys1JypPh08;b6u*6(|k8*t6OJ?kB;SF-HsKdz6D|lk&KB|W7 zenkm{rlstwyMg9jku4rX@Ui+A^=ogXQy!UcI3`t8iw+ysO1FO?AYZ6houZ?udj*!e z5y8dkpS7+1i@CncC9LgHDj*>9uZngjDD?J$*uTOc(EHy8_9FA461J~tb)zA=?)-t3 zN;p;I-4n7oScD?V+a06OF;|#s`z?&z*3DCa0ec6ScIwi=8c;1!$Syk-HN7cb9k+^2Rp zYh6gwXiv)??(Fa2R|Fw1L^_vI5kB=CjD5g>yBU){mEq`KThZRT_;obLvu1mD#iz18 z!DL0nH2%wYl^B%tARm}Xa+unvM(XhqVa@muX|397U=I2M9W%MF;!4M!AF0qBX%o4m zN7}CaoC1M04tNL0#DXwXh4bfO%IAg8Y*K>Db9(h7z(N87pokhA_uaBhdl}Qab-xgg z*;xYhh_93i%J5d#*>p7m`}!%03|DlHgC!U_br`!um2T#x8T(5I)JKcw9f)qR3JH7& zO+(qxgthwg+SvDC$>!P%eR3xiC>*f)8Pd6YI_IC{()bR=mZ`8>mb8RJI9M49BaBd? zzRCy6E(U`*Sg}auz7x=y;FS5P7e)YEJ?JcaeQHc(zvbY3uNiHJ5wo6^`}o?(oH>S9ISzr_FkrYgShMEU1JT=)o`K? z9~DtltJ}yn7TJYlq6i1kD~gI6%Ca?rYJ-Fk*u?<~e#>H38lC<5K?4m+Pzpwxto@us zA9b$;;TFD!*MQdkd{>RoPapjd@DN)%|4uno|pw+-0I+5ARhRVWt% z5OID?Z-h9ei4zKM$9ZM4_v!192evDM9MhQ zkuQ;?earJc!jGomDvJah`vQaLbu<8Fjb353>2@iviNRYkkqXk+hmZoHbon73oNOb( zzWKtSJGn@k1*zIH^kXs*v6a7WEi_T@|MB)a@#QChzA`}Mt2Xxz6?ZA!MfC=cFA3`3 z!nSYOgs-cQ%Ce$Q;&GfLEa{sp_W8*k=Wpp}f~uVN^iol%ZebqqR9Jlvh}XzmQ5>XN z5L^?OT96K4RDkK`8uzficBtXp0s=BL=5|YHm>%ehM=6LGpMcY;m*Zm7t09WL?EDD~ z=+!=mSE#buS5!1hU0=Ety#d(lGVd90j+WTl3e|hFGHK01v9QBzYgS2Dz?y zKCz7~IS~ZpvJOY(4i4_h5SSgxQGRZh2&ukm4-WZ4?h*S1<93rwzhg2tcXdO9tN(qQ zZcArpP80&6uiaq(D&V?-Dd2j;7p+mT}IUruJGKg zNSPmB77(>2rkhvXh9W_(ay++U>Kp+N;zFk2kz&|g+@|2)A)){L)T@5P?Z z#Ac71(nG)S+W1~85al2nudS?0XL`?`VG>efggu*X?3Kc%b5eYBKZ0cH00-l4YtIc$ z4zN~JJXkM&fdP}7rs??=PjSY^B!)h>C;2AXOlkuNTS6&9`{Vmq5TO8h_Q58i#PpGG zK{zXlAiP$o>pC`y^X}6f0C|5?#v&)Iq-_A${ zA(Lm_#yK#Xa3t&K7o02oeyKw*h;F* zU9ue&rHl7%k~*vJ1O_Ywm6ahl+z1Zz6;aqO9fV3&Od1?c3q*N@Go6vBKs(Ic#jf?w zPhzvvodeI)w1QLhkX1I$$FWy>iBdP$J;^9_9yk)v%~u(fv+7Q;%PK?sAg9qE4wH8G zv!6#FpBL+n&D^(CcM1w=LHagdy-7L<;g|Td^@T13&7}(T-3>leR)0BNO<4P6(~jH# z8cqHdaFQ*jj`3+7F<}j{Ny-6+aL)EXFEZ*)X3{bRciQ_jy6CJKl1%rRGMBV9-9*X+ z{8lInVb*Ru!w(KH>Dkb)sVUshVr^Bw61AO$+E_QiW#%@*{{WzL92NIs%QwMh%}(}@ zY|DB5egZ^mU;HutxMnY}$m<_2UZBm^{O&o*%#s$3hwU`3ZzR|;m3!HT`$a2k11!AK zuTE5Iem|l|`sWjWI~6Nm+dEmYqXb1l zp%hYH1OZK_{4yEfVB>MJZzv+^KNXjjTf(vxrU8;Yq_527U!VOe0dZeE_pMle1}SLk zCpAB$57yaVTq|}|3!JI^^U(i#=Z~+aCB?@_P=soA@@dn*@3^F zC_vSzs&QcBBrN&VZLuq7LBIAc`(!<}@bz?I)E(mYnze7vG!rL2=a^Saoq5;i>|H}Un;w=t68)Oh z2Mx&TgJ1+EcKgSP_lB_KIbk_$0jplu57bzRy z-^xpCuB|5o!x6h-MSI6i_l_N=g-X$s!jS{SJm5Ypn8X~>&a5&TAu@jZOu}!~pOFch zqd|Q#IP@g43mUDZ`LxTerSFT=DG`~$d_69I`rQ$Ccdlr3Ww_}mJKCg^j3cC0L`AK* zc0aoxdEudcKid`I*Au=)Ma^BeXKu^Na4Ar1bOl~Lk4rcvyy0eeW!T5`6zWyjL*}}1 zmhXPAaW8xPIC(nUrbi#9cN(qpLl3|Ez>>XGS+)x3G})6w?9=L#k*(zZrGkg4Qqowl(}_TC?tK6 z3UGMLX7ND4`a>J_aOLk?xM7>zTo7l;skXDZJTqC~FX7us@|X}dGTpI;tD0VV?Iq=w zYs7%pbqbC2Y*xHR;$&=IFdA+vh%}%VS~CC~9LN+|0O5#;0BGC;IvYg~Is|!ZpW>b? zi3!W>1_t;`ZZ8SUOB%oH$L?M%V3c`oyxqC*k80*$V?h}2FrP|AI=JTp!9Xz2Abrgp z-KC|qb#Y=cP|A$p<4J>6y^$F(tAe8ciI68D-0WMc!A7z`AMlz}UHQ54T1N0;efMI< zofGDTapxjm5GeDDY)9yv|CIkO;7=m9=D(R0j-5=YZcYT>5P^Ncx2H_MG&u&YgGcV_Mj9&}Ry(xLbEAu@WGRiM6%FT8Jt`VsODuos z`aSQNA5SQ>b*7xV*?q?TfET_AJB;>=(6vj}dm? z5|dbOb-tok;30q3Vh8c=Hjpcf&E@7nBy(bHU31lBW2Ef}&(bs|;j6GHu<3|*fNdQC zi(efg5-C?6RyKP@7a5$ws8e=)-US@k_4LMDA@tG^t!_wYi$p*dYr;O z$uib$8RdC5#jXG^}Zx_H!kI{48pdj$!TVxtafqI!T1Gc?I> zjcsznq1VWbNfY#2YkI{f!XDJUVxZr%VuRt-_;U|JOvBaWJ+$^iXm2J#JM!5+0mbI+?g$7T7#}KT8^K}Q7lP5Zw$m6IhqWyEFC$%vXc=6V#Tj(7E(%0 zl&X-uJ>vS>mCHcL)dY#B>aJ4M>3zpT+Ys$zXU#DW9~J)vfv_NRRH3~>tLKsS%HXh9 zQcW@ct-`%{S5x^CxpZX$_~wDk+ZZYI5^1~R5R4Hb$vjjRh%kQ;kfftqlib}6(1$|2 z=nfCCII#?|PpAPhDO*AzE0O;fo-5od#abFmNGkt6Lnvr8vG7Yc+}4V_Luq+zN1-p| zxkh^l>HJ8m?3|hnb}YXvia-89VJNq-e|jaE(ZQbb7`@uGWfr{Ow*9$f=a3J#KU00@ zvk$qt4oI<@zfx77v#!Izykhl*q2?z1x8&Trk+oDg8t0FxFOeq8pOb8tQKak2F-y&T z32#S9tdk?2Zm)=YWL`!e&bFpbzqicwF?0&quRhli2EnpBFEj{=pML(E=jk)9##I-;!)|WK4&MNCH^9^m9(z^%-@*86u>-OHh z!+zs#!0^u8dR{8Q-W?x1bpWb^=Bp3g4(wj%sLtAK5uLZzrxtyR_O$2w7x4ZeC$qo# zZ=(oU_EUdxBc;i$aJ>PQT7b)(`+>tCc~sWC?VNAL7xqUKx|){XFB<3?c|qY$A0CCL zs;jj#sc*A$9hWwbr;c>Q{Z65EL9^GnD*KRYxP>Wt^@C7h6{VA?Z|m6S+i%uhp{a3u z*kfvv%8L`+F;mfaQsQ>Rq-0Smh;KO+6WVv1LLEfEz3y_wT2>`N0-mHkXOgrjnHAAY z^Qxl6Q=pf-$90rbC-lM2m(%qRSd3~ZFFVByW__4#)uc4GY8=X5xpw#aqau;gD%S`l z+x8eGmbu@#7nVV^+VM0$AB?iB*c7;^F8T<%)d7ub(6V+r4hQAU6WhHTEUtcu- zywA*E<$S@G)jGTc*+baSeu0Y`T|HP-7JOdZ>cp_~Y1kx4JyE#*Wn*tA`LNjje0x6H z8FxpUE67P8H^{7n?seI)gH8U7nOuL|py5SUlY_VLbb6~R(NH^sP!iqAZ1&ANiK$WY z5l`or0_$JJW~)YU6(!?+Z8*A^{Wytq@`i)(RrX9K0U7uZN~Z*g}m z?(XjHQ2bl;KIb|2`~3lS_OOzfB$KSWfvpdON8(BIob=y(ccfqdsb8)p z-k)x;(@bwgM$!-Y>@$NN_w@x{O0KDJR)z|=co7dS7R=3RDmxz(_ElD!FIqiJCJ9;R z8+&bZD=aU=ma1{N%6^>e8gt!gG+7K=uWYU!wb*$5hR>_p)^lot;yEx1SN}*tz1tFD z46A%Te4wD){D&CyW`n9X`Z}5xgs3aH`yfq_ym>$}U@ZGnXH{s~H1Z66mg+>#%IeN7 zY;mGgyMElDa!-i*2NWx3$LUSJP7|TfsXrhESf>LHc zTUK0|z{Hr10}~fX_qk|f%`1bwrc*mnOi52}INFD($6#O1L7H~$wqOtMG=1OD z6DVPaTV0Dbh6SXfaI|++7I3w9!UfJNY!*X#YLy$DpGTUtP5w|sfF8Z+$vV@>7IUif zsj#UcL_YcC(hcNZ$=>nKtQz!;EW)w9_j|c^n_{o;4Wk>lOUYG`amRAurf0KA&}z^g z+X--1DtO^7eK8;g)hQy!TdVkSkJ3dI*?l(z03q%wR^E!=F<6H&-uEvDM8{4|QO32< z@?ew$p#E3+|2aS8}!49r3$#{5goReWy^>R7&Q}+`k$Kf*F$DHXZu6J4#bYDI{~KZ*ul!K z{FelH-U64xQKAQ_s!0jypbf?DQd5CV$JhV0m-SA4Q#GkVY&9ppQ>ApVKO`B>!t?eE z4G)Aq{t?j-fcue=cbc=^VPm)t8wwsLo?NB=4IEPT64s{PMTE7IU#{~7Ki1u4CgTie zMI4(7e|4tJRKtdx0EE}HFvOcYTW!Pe!^P&PR3#Qj z6HD*!Y2_lgw|H{fJ_Wy$W8;*BB9$+_zoY#WkM@p-x=k*4e%~VMHI@$)asu|@7SQHv z*A|SYc#eu`x%>5Bn|jTU)$hHpq>ylu1*M`_O=6K)E$DFq{J;U$Apj%xD!_=X&K?|B z3r0Z+Z>1zM0{Du#_E}zuz_X9Ph<3%5^#$Sgv)xujq8v3eIZ(l}QOwo4Vh_KYDPca`8`RR-?gg9l#doA{-L=9l2)`|MrR8MN7}9nH6v{ zv)@s(yYi^hOA}FQkG;U27*SbMO2sJcYG^V+4_pD6PZ+ zg;s`y$jeP?uRdnq&pyvl`1STI1z-tgLb9t*_8w2^ua|lO4IN(DX}O4Et|4&sUIY5) zaZim^e`+UH36D&;(jJ{?ABb{88IzLcFLh_8-|Ume3?6Osey)2dY=Rrn3#;ON@w^e4 z9KAb|KfSbLe)r^^a~S5UP0warVEw8I~Cnc4#?%Z zKnv_`sNJ7>!ec9>W$B?36dr3`yShq{6VvHsnB3x2j`mEiDrHiCST^Q>V(}s)OdQ^R0150_Bfga}xzVhM}dIe;t%^b`s z@TNEFE*i_ubsvivuMXE>qfaWw>hx}tjBLQkR4f!AjV#BBd@;cd+e#`if|E%d+bE|( zB{=DDAXCN-2X+pbL4>cL_7HGiKT~UX1)YHO^}StTafA8ZuFF+dchbk|+UFd2kYl>b zZ5~3RZx}+gsv#Yo24O`msy_IFG69sP=*)QfE&CYc=S~4HX94-t%n1!8A=8=T+;ibK zUWA7jo622UWP0%w0T!WV;UY<=)h!qB9vT}D@P4P}u;F@CKUsF=_%QRLmt zJvHO*@a02CTceZR41c%?gi))_Sykh4GDGU0u#k8Aijf`LL66>BXyAUFuVH*R4jdi50Wz*YPI^^O zOc4XgMk%2kkWqrT{!73M4O=gLT(d=FEcgihE$t8bF@<(IfAhh5r~GZ3OT@P64)3{a z>WM}kXc~jSWFjMahqfS#A!jnRGGh$^9cibo?A4S}M1R{{6E8;m>q>bnjWIBWnPx`ONnw|@& zFT&DHbnYjW#1kT3_b{7V>5D2z6?EVQJc;dagRCdLRI~>GD1o(&j4P2&kOV!+V}FI*(v&RhLJOJT0dcJj;;1W&n?_PQqWKQ zP;slz5t|9qX`Bu*w;`K{Yd&wVZ?5=u^(2kuF*|)xcyuVwL(jZyW>H)fKEx0&jx&){iJb2HtE%QPT-v z4E)*)u%59$Xx~VCU+t2I{-~cBJoQF(bY10~wV9~7wPtR0CNb;XP#gW$Fi(_$RA$%c zG1Az0In%IX3H`KF1g?J1VuLROyVIYA%R8kuK9`O@LZkDhfIS+G`8pTO!@%+Zk_l|h zz(S&t7NBNJbuY+1{3UJMb5(GaMN3?=>K0qbwVZ;!uG?jV0qA%$pV(cnnZglt~ale-t+VB_T= zQTQ2IIT2a+IXYaRqGchr)%}3&$4=5SCxvMN%^NP^OP`Ohw3aA$Wv$Adw+-ki;O9`1#-_QuIXDz2Th%+B@T2b2{;@X)xd@JBWWfUIS9GUfknkG( z-Ccc4&Ag`Pr!J__xL};|G9imr3TdG3mkmquW78~U(GqU{PH9iLCnF_uXzVt(BB7)o zF2E!%^>=T!pou|psD*>S*6{g4DFxplVkhRAlcc&TpJ%EjpSjNoh#M1Q-H3UuIB;wv zY)@l0r4?d)8I&E3c^p?E?R?~CBcfZ`8ye+;vIUz2>RD`Yh0jn71gL<&Lv9Ndtb0PE!xUM|-hgn}})dL@pVb z%C$fP<57}~S0}%qiV2)QUtjY+-V{!0pgESvUXXwQbjgeK+v39d_|cuj3VBM+NZ9Iu z-qXmLKH?MyBItP;K)BYTtiFf%yPy{rHv$X#wHIuCQj~$C@SE##{rB%qV`G+Tu(zrW zF0s%qkAC@6lQ&Z-v=W+Qwh!rnI3Ot68V_rS9nm+eke(JC{%92jmbJ=RT^*Z!Eh{)^ za|B%-a5>oc+%DCW@u6^)M|uk6yqP=kWj)xDQI6~GXTp#(N+kW#PeozPjX2_{DjG~v zof{pugQIDWKK=cSv+bQYpW>f*{?ic23Ho(oe&Xy*lS8^%wAx>kBy%K7SFmf;6o1za zTGM~lj`zP_*A7P0J=IE$d;&6U&~V&?YPDNS7wsuy<4~nco`O<<+glC-vZDn;pQ7A~$0nY`y+xn> z&50-?e2ecpg?~6DcYX++xxoMO-hjjHDx35U_7)N?-AEap{%n%Ipt?;@B$HE6xxCUm zuTU#@t&C#%3+Jm{d&@2eY3YH%irFr|_3f*ymqVsFP-CH#qsA0-vCP=(a-k65r&( zR_64;(VZ2(%iTwPPdvIEGessu;}^+-7>n;)7xAX&($8QS-f$g|qD4FAr77gEo?no1 z&!19xbsqS?%S1kE)q1u*=_LlUet6-3tX#Vz^fo+Gc74q2xJ%J)iD+4dRL)ge;?Zww z=6X>nP+9pFvQ8_WlGbFf6oht>sFtjUoKY!Q=o42j)3kQ!axTU@NbBkxpZFdNhr`qs zUz`LbZ!;)wz~woOSP+|JHTw|;KKcuPb&aHHK_Z&P(xC6N;D#VC=0AspBdjcYkepy* zWj=fmK5vDwq==J{2!d^9B6smkdj!5bIphoTI$ypAO7OI6d~F){@lVGT%6o1K5CK+_ z8Y8ir!a5as;nni={veltzKHr5{U@1XWNQiaoH$5~{G)K5ul6H_=hqZV-*(4FtcEi~ zED1xEp|Z4Owcxrr^~k#R`5}9H>&kCMa;6MH&a`jgJFvSMOg<%qsxHP}QlX37Tzs88 zYY<6@iZA~YhVGz~-noCgeY`!L0M@-(A0;qql>8!!oua-}Im%CI8hsgpc4#Y+?z<&3 z{}?%V%}V?ZDp2Qui@1b+$Kl9mzZh)@14ft9ZUk+&N_C{^9)6LHzEnxrUzx#!2*zIx zq&T5;^4sa78$DU=xqRf}43Fo~;xJ;G+%x-Ak@lbsPuxt)vOu&?MQoGhEc>EQziv$` z743+PacVnL)O0xc)sP@I3FnDiQVUdjOk>>uc7pySHOadCUQvi9~pB6a!47rAE z;;VRbnx??nIZCz0vy5)Hfu5iC-Smf81YVv%>3W4(c}3T4*Q9(L4zWiX3|$P%5f5w>)P@K^<;$X(ncRLlwx-x(!-cK%jp z0~x?s85K`Y!GRFd3n{DGOS};D{ZKY$3k-tjc1X>P4O5|Pbel6Rh;rU%NAlId=?56? z4&IYApU8MQS0}NvWr%ok3ZPLacsy77vvhriqzMvd^n2Onn&PMjfJZ%dY@)R;Iint) z=?FihnbDB$wd{%eboW4`i$KiR>JWCp9-Km&3<-de1ql!+DJWnvZ;Y7TWA-?}L`iOw z=9v57Q$|Mppn65o;s9S`FmIG%WzdNc+6|qTuNl8f%b_5PeBVX%H;gI76F8H@@D|*R zk>JJ5lDK#kP`U(?Yx-tH02|>@Jcm`9I2NpBZXQz)oeS2KJvac@Gb`bWk6ZbjxC@kx z+wL`Q_?4s&KnEXJe#LeIRJ#G0c};DEq^;dF4L;%YF@-Ww!rUN34Ny49%ZP6wAOM|-XSDs zouAZ^C+|L$ZEGz~mIxvR(k%c`mnk5W$))(yn=?MzI~KV!*uSNcQ%Wr!Bmx4Q0IdMz-g_i;etO{eEe1_km8)HV0;pScmK`0>z*FPK@aLY>Re{U+jWUp9 zEBgyRZVklBCk%X)tL}%62I5@oV{DX?y-npnb{Ek7Lm;4=lJ0CuJH%*CT=axkwCF3+ z!74*|uQ?#Y#6(Ep`4M+~623^_7^5E^l0RTDBdS z@?Uk;h|(>*e{iL{h!Sbrx@WZfKQ(g^B3!XEkFohFgs|9M{?D?gQ0z5Zh>$7&AT$O4E<_VZUP|~BTUa`?&QNDTHm;T(U<~G z5XB9uU)$*!fQ|SUlJrlPz$@n_@(KU{w3!G`Cl?R+SI0>z=i>1LQcBAZ|Lu3wJabUN z5rOhnen;{Wyg39Conz4JXidZRACHnByUI5Ek@^2rL}RYi&n7?i4;1wuyX9c9*X$9{ znEyXj(U@C~zsmi)E`_nHO5l0legt7FlVw6O_3RqgMCma&?E1}wfeDgrGNyx0Py!3fYa*o##7epAu7KMIe?p^ zd3Uh?Dn%=9ISxpnPotFoXVM;PgaJB9VW@FM0(TP-xXSVTU4T>JrGv^Lfi?FWXM_*5N#86Mq?8Z_OICIZ=HmK?^n=GYV zn3c2;-Z=IKuY-VD+`3wnPB}cCLj0dl$iF^eAr_mCYBc7bsrA=+xB#kFXPZgI{(EF) zVOxm5O8w7m)ELt#g9g(n#aU5#Y)`nLHKde~|4!W35&cfwb6h1C;T7@x-)2e0s$XE! z{YAw6R|n->Tz>Jef4c)X~|W#Lv1d&k><4Lgn*JOK1}rIfvf{_lbJU+2`VBJKCDq5og+ zblxND4ii?7qA&14T!1)ly^``z=J&TOOQ7+YYx!}k+ES`%5~8KGcfSt$5AI#deM%Df z3?H5jhTV^zP+)hl2V*e$wu9yd~ho$uuUOv;XyuoVKyX}iTo)P48OYFTmr_DW|Cpq6;%%`a9x|c`&QNibj+5`)BIYKcu zr{VJ|0=B1h<||_vHLvL}i%YgD!>YXNj>kH84|&cfQ47=`TKf~NE^87Sf}C>{IPZ5z zv@Kf+O^-+O2+JN@W|{FoB18dA3_h8wSu^U#oFJ6#(@@_b6!qrj z&arU{wn;|p!fWrgz8757b|DcuG1|b(^c*O0C9!~8_z?NfI47;EXIeIViK(p|OH6EH z$E+U%9AEHT$Vr0A6fCTxX^epkWL)s%x5pQO_Bnr%4v`h1svzF7QJOBxh2T=_g_wub zU9o}m2_FTTx32#7x6Mz+4}BjFXc2|ZM)P{vZXVO?z+LB7`a4 zBO_@V;{Qk{5-oR;?RztcUfCI+#mX6FsV}bnNA%!(ML)sqiAi4l_#aD6)<6P`+KbApHd<4S8?NEm zHdMYODC7_Zi(jDO=VA19=NeJxmKjZQWx*kMAG_tZe9%TQyL=ju_(EF8k;E3@Fw}pqD+w^& z$UxxfO{}}jiG;IsW`R0o{G#o#D)$WHPVF^hg~CY|_+Y`Ld-PCtM_JANPe{<;v-4rsn51h2)=`{^~pSBp}s|dcWVcMi* zxSiS7Noui+qGS#D!S57cUdgmNvz-=w@93zDy6|bSS&M7+#K3%S)Ebj*$#$7hc1MqU z#Sbf7TA?-RLuB&@h>4g)lj%`~6)G*dF`?QJeZ*1rj9%1&pL9#bc@{Go&8SMEUmefK zK!e}gEh5F4$^lH1Tw`?veT`6fb@PYG`phLk3FZK_%~=8(Bo}Uiv_>@a09yOm0`5<*V@oZ-{c)_SpFvRJv%nJ^YA#F14D23%&j7pQp+6v z&ZPXo?-qTmw{OcVyx|ZOZ*V57vMc6$5L-Z z+(m1vl(|M1lJg6pxuO?$UK!NblCUPNb7>gxEA<(()#Lt7nI>ohYjs6{$H3lY5pMu8 zDdPlzM~uTt@tdTBRXxScZ+;jdL&Vyd562%FpgYiK>PTm8Zg%yzVpo=W2%*HUPFkLq zI+l7n#0jk;@3elQ4H?XQZ|6@@K)NTT(Uf44TFf%xg>APwK_anQjD`VyWqPM!$h zz~A<<*nF%^3Rsf!-tkXGg_U7 zohT-etv^pHf7$UB9>xNFm8fn-gnO9exYx6Av4}%-Jo=u4l3u*GJ$750oAMFSi#LG? zf?lJ|6UJ}}I-*Oj(*;??m`^9mn0qG{KI$%js51Nala$J{s*IBtrj0SF1Mwx4*~S>< zoK%ey(&HC7GUK6#iej51%LO9i=e&qZq^Ahx^@5B6cV^?4NMUkNMABze4;hZFBEBni zRF8YxeIjXA7h_*s*4cH~;o1bfHg7S9IcTPymfy4f2#lSX-=0IW(7b<-)miijIJ*lM z6~V%O#-c^@Y40ABB=%0%7V{W8S`KP0-v5g1^9I_8!0ANsq?i8E;?8GatXJ5{>FD$r zwB>-HLUI#C+|P>#Lc;4Q3ta5Tujm@oM(tIUNj0iK(MspnZ8P%k?I;yhS^F~SKpL3c z&7RB0M0-`1W%TmZu;QhI<>;fm6GClk=o4B#<&9tx7w3#@?tkvXLB%k9an zV4o-F5z5U|^%x>&n+oHl<4St)k=iMYldQvf3)+K?9a*3+sArRyX@04NM`!Vuo=<&U zN!IB4PtYia;ueBUweGXp@S#>t?j8E*Q31e7eE7gQ-552mA&QhuCyTBP$1QP1+~g4w zSks3a{cg9?m&l}yb(5O+IGb&gJGOU(P;|v?pO-=C`;S4>C9SnmfODOoOzHBGXJ;?( zWc9shFMLfCi0-%hsmOI=gFbk)CqmK`HMy1YFyf`k2>we7xc^Ho>N_g z3b@o4G>kQ9rQ`-v50d76${~@Xke4Z-D;s3*>5}>`3ql&6!G)GnXL=yCDS0whJ)(wS za>at^Wd>HT_y-zSEWc4TfbOZbFLC0y|+uD0^{NZQHJJqinas9!Gg)o2Z&$ zS=OUnprgi{pTjcs`W|kB%Wa?4TB_20Gn|L}dY0GI#9J9R-5mtAw!Q~9RyTKqIB10g zTa;6~)+5%ooYFQqx^2K+cUAxPuI@8iN+_r#`iyrM0(PD=;TdIYjKxiyVKhG^%LEd( z;p5#wTuucj?Li=zt?Svg_} zLJsmCeGQ>*hlM_wI$tgBH}AHl0(k>@!10N31{*zm8oV<7qY540OMg4ga&CO?EN}z` zYX;-7Z|7AL1UrnUqskr1r?x{^jOI_HxO1*dY0cpFt52=NZa=enVtC`XjnuQ|cky>8 z+y2bc4kyui_aI3E54~mJ^CfV^+W+ z!FW8_rO#}I09{hM@*d)kIL;g&>C(b&?$ z7U0=y8^qce+NF0eMPm%eQ}yB+?Mhhy#tyZszA{vrZe-urbJw#gImCF7o;*VQ7J0x* zp+}?Jh>i`OSZd3_gOrhUwR?hqsvfFAOX!L;89mw@C!On`$GKw-nL4F+if0tR$Ae*3 zB-m^Fa>yQn1p>Xtf<^kfFI0l@;(Iy*9K%Bb&?uq=-T`plztz_fQCCpkG_ePc%L}wj z&JW7vA^pOzdl+-<0&QtzJf4+2Kh>-#m=fwe$*j`n%p2MZ%pP5`Chk_n?=nF9ra8ow zquv^OBpWd5a%L9??3fV8cX_wJrPKVmXdj|dw^X?v#F)P^{(j*e$QrRVX`wY?6rfKwX9!fkafa32R0s%rkky6M#Zf!>=-0F!sX=HHZ(}%qS&grwq5U^ zz88v6Cz@OvZkO9<=Xz|n-5|{3){N%T8^;vSkBoQ1TM(n^Dvf4)^*F;bNw`*W%_XDL zZuyk|Z2BN;^N5Ni7RGB%ZjD7@M~btyJ~_LYQ+I08=wda!{9%5C$>Q>uE_U)x9|&#JF?gVZ1{c;E56IV4OlDF2DAXO!WLwcI^sqV$$p!!EF>KJ~$?&|t2AJkS-pu3+-Q zIJe*p(X|`(TnaC~SxM_WRx4YkQ?;x=oCE2N$7x6V^$$RL)yHCjZjFsj47d{v5Ay3y z+1ypKVd{>~#$yQL(CB!7mpOg3?o$Z{zf~c!vIrBx)!iHWv790U&)wkQ@o_mtrD@~0 zWvhp4zmu-^yLiGMN_%8EMj4Ry6{CJN_BzpwPy$O&a8LtfOsf`D2%s!eCBp!T)Ul+#D3^E%t9QG3J z^N?T%7UQ8OVe5`dOiH8hsUntc5Cb5GBSRb1jTvUB!RX+GS?tqAg{|1&3h=?az9912 zffe1mC3!*^sY#qjM|DJW57G*Qz$!gybrEs=0yYFxKU=&AY8nn!c%N%O%Ud02G*d82 zM$4~9fW^7n=;v8=Td1f?-_6OLS6yeU+^e>H#8`5G(6&85>!22o-~#aY&a3JCg~wfN0VA$6>vDd0MkK+w*Us&;-!7>E_rLB+#<=c%k4|G2Dsz=P08+ zkI3$U_p()rD&;zzV0faz$Qz^qM#?v>Z|%=We*5!RBP4>9kC&qy%BgQiv|@Ixz1_=t zxmD*Beqr4D1V`IhpXbz36NGd)4%*EupUI>Z=`|9M`;A_oc40h`_tQus&8a$-MiNll z*~o_A$uV-F?VvK7N7OjaqyOME&rFclx=uNl9UdFVnO?THq#juW%^5N6&pN!?D(vgK z_HJR!H4wL*Q#h2(6BhiZ_Fek(9#ZWuGW$2`sBynJPCwc}$j66a6wrNZ@-{&{Rmkvq zb(BX`2iBxl@Tt#?&EYe!yVZ+Z3093sT8b&U>>Uu5;u;}gKP6MIzwWCYlCp=LmZ}tLtFaJ68%=HR6v;vv)mvsNoN{dmj2T8L(Q~YX;j^x#0D6^;qo|u5BQ} zpX^{l@URM`I_wxe_p}TCpd%aF?6(sx&($e47_ue7^=Ua1gL}yH-5E=wwl{d<2qXvv zyNu4g7u25m);Rp=a!zmxW$SC_x(Y*;Q80L(JF>>vN+~mw1PcBf9UztcXPL9du-s5s zy^EWr2@AK;h;)|`)=BFL7io4tDkfs!Qq7c`y{U4_STmhGx#_IseZjFkeDn-<%%lMq za~q#0=EIW-d`so`B7jeIn*<##8CKLOo^3Y|+G3(W;Dy5ZiG~Rc`>kd=)jm>>X9oV< zW~vn!&xEO+Oi_klR9?c%XBvl4tWY%2V8F%?+D}deb`^3A*hyg;v@CYk#mQ1NRh5cs zXo9lY!WHRNGcC{lw~U4kPsIkSJmZ;%#}?r*O2^CLfxyXx9J`{WJBVexy`v(x_lZqB z+xK|uEBYWS0I9jlY)<~7g*qaB0l7wb2Vu{R!ep*jEs_~))K~pUfVPEf77x0{Mml*CxMu+=U^#;J*~&K7;m9w zII<&x5rV6 zXFFqD?}YggCMHC89&UU66jTx(_ZV?Ni5>9g-vGoh{8Xu$OV^@rpS|PxlZ{&9kKA{Z z4{qA&xwfW7aj=HzW#+< z-pL>3Ajm>44bz=;=|a&VHb!wy&guZN&U|p(Z4am)=O5YPZ&(oJ;zA7|N(#t7I#eTn zPaZ7os3;%>p12Va9TlJB5D|3;+nhxL&Pce=@LHkwA^p1cSt3aN15QB*#NO}@r2qC7 z{#OwHdE~eo3@YF&{K2$F-lfGgT71t_V~n(8Rx@Ba2H$!BNLbe?Z*8b@t~_ zuA4bZZRxtYxES)%J6c4rg3-y>S_mFLL>XFUA3aiFVk$R0fe0?PsSvjmS;s*G_~#dtUo}YS7uI_c;r*v3w%)jW z0Gp3E_Rg{{%N04-!=Q z(+dxB@z;qi4DDxudogIV(QkLI5B>B9R#1)ZTlNJcw;T8T-)5qD8Cbe6T<7+ixiShW zd76lSfVaL%`QOLyCKBqcT*&!?m4m^m5JcMh^?LzA!)vqEwEpm6XL54rLVSsf!C-c1 z^Vk{a9){OfSiJs%^^M`(?8KXV2hcbru&)9>y-rqx*WD_+*LypGU--e+G1&KD5*vA$Ih37@huVHbz)KL z<5(R&b~U=*j#vAWs-uGJFQT)f#3~o_@x{2_%GaZv?Q4rdpu+Wq$>H`y^N9-E8L}d(XE#`T$K+{Kp{$%>OZE=iycWNiy?XBS?Rb zq$APnBN&_9AJ5rWzt}zy)h5c1`=dzkY-}jw1$obN)?0G2D;Reqwzc~5bzI(R9_Wod z6cW98V^Fv?-SWzSSB8@5ikm!P^X*-&!VuA2M2O3|?<+PqL8f5@_i*$UBB&Z>&t5cLg8ei5>>Y-Z7EfS`e3(16 zBoMKjOJN)Q1-!&&9@{)e)b`hCOM~S}UIak|(SN=EP>ZbiP|MIiqfUKC@A)jPjSP`m z{{Wd0P5&w6N4UGzd7O(nXq4zee+foJ1d0%@x zspkhnz;(`Z7jR%yW(C(As_OvdZ-%O4@w3)q?KJmJKg*5|&UB(nGrRlIIvAM+0-ssw zE43l;<{AAqZ@U>?&5twsY#{|^Nz0BZ#B1Yi?Wmey1*jOWIDy7jfwaRcA`#cGc$%AS z462_OFVv&!Ok+d+sXdz?GH><8i%t{?xKJt9!vmw8kJoR%UR&mUDYDZOIJ6bK*K4EN zL!D_ITHg596;^w~|JIqtzJD9F*5u)H^CuGfb846Nb&|b?B@(k96zSL(&zN9t#tWZf zW_pZzI<98?JL+p4T+ra4jAS_|!e|YO1&#^AsUG65L-9xY_x{Hp$@`DtO0Hh2DNP0ARIa($z6BrejwL>JyG_A)y; zU%xqp(tJa>{ikOu>tZA$z9$~731V_1;{f!M`O>p-SIy$P@?5cQxBF6ZJPZ03o45#; z(qu8_zk|&XBwHODb)ob^O{NwA(;N&fu{tuR$X!Pz^w>O+%nX%`&U*(e(j9cVsrBzG zM>hI?5+*SL-Roz5(f~UUHDJ{}YO)YRL2`fzbXdsc2MLibdS)^qAu*fxJ}FpC+8A#| zf?C^%FbF#OhPc&KE<`2^i)42Ydm17JousHWpEv&8T8+MFU8q>KBsw?vdfnZ1%W;fm z*fQ^I2ws4Lb%4xC``c}LNB0Yxs%gJU^qSEO2U@|2DC^8Or*=U0?33_}rR}np%Zq`? zMD61j%Z>Z^Dm3uepsLZ}(#@jGfyyXba@L>2Ebi0pV6C7F!KXJV3T6IrmjVP`8G4oQ zN=~>T2-$TSqZl3sRPM~^IAUQfX>Sd*q>G-gl?=29RYx#DEF}WDP7q>NLme4!$+euE zpdiN=bdU-{-i+@UVIYLm3Vr?Y)?h&yuR=AcmhgvAd-b)LbUFp0Y*X3x<2qN;%~l*x z2F4#D^ZjaJ*PZsZaWl>8n2+CcP4@~Am~==Rq(c;2*DcwNTv^;|ZV?neql-ar3=oSF4L!0Vc0X9*rbO_cM=j0Pq!d$aVFkLizxVxzVLUk~m zxafO{s^3iiz$`24qQ@XFPvj_~WMpak*uH^UCe+5*kIT{y$Ls81^sB~($rY;WkRUf$ z6!|=%WB^1y^=TO_o>|2r!PcU5;l{jKj4}>)E*d-5sO|gqMpw3p9>JM4i(w+~!;pwd zf-^h(JJT|9NQ8Yx$1EyxzPGS+oLk|VxiVEshP2Wj%h^_(%gD#B2Pn(gMqlC`*USXQ zI^RIe`}t(7(yp1~$}6Jx!6Ea#L2!NxWH5ti#6SXlM&Fa*d*suGirO(Q5#fP~3Yz07 zARiN7{N@Nlj8ZWuE}WSvEwek1Y0o|glSK?Ec}V~~QMXx*!XVYbftkE~xW3+R%^X1! zcL2klJ-*lj)}OI*B_8JfB$U) z-R2tb_<*nB z)*Ub-aX#eWuk@rmsQj>>R$xm}pg$+DFD8wF2k1$O5hO{z*?w7ykOZI5lfJ{Cj=}5> zK)y60x5WOz%9frR24=DsB}G+vqb8gwLm2{_9FcY&4+hftP=U_TD}e!V0rNXRwrAwS zbfL6C>M#64lc9(X6^!={1YA|(fF0B+PU33nZ(~fFTZrk$K*@CN|-PYTH*W zO{>P;kpZtTI@W%jBj(BP0&~{Ps%7`zO!&>+kMqC?ZXyO10}~CE>Bf8Atb2Wp()=-^ zT^DHVJ$AP=QzKg7r+RY`P~@eGz6VDJ)c9BoqpgV!e3;M%dQ?KSQ)~Yuo_D&oo`4mn zCW~nvSAsz&7s^+i5|@emk7lSwy%g*t2s!o_(8|GL)f4nUraFvHr872Kv*~c)Cs#$B z_E}Y2@^QFo`{6MJegZZ#S`R?-?HLvUTFLo$sPzp0#6*28W|t@gECwcQqC^6fw{$MM0e<7S zA8Eb)t6#h-4oqW<8f#DqFy57GxNvxXF@>Ge@t{B<-5TYTKnHyL)lzQ=wKHw1^El*+ z@@u*N4?#I0(7yB?EY?l41f@jusIZLbH76xts$XHhZ@>}U>_u8PV28@3s-RRkXY&nv z6*!*^2WH2IB5crnK*qF&xLwJdW~6R$v)WSe2fky#VW(GW#CpuJW#p@yX;id4`v@Sn zM-EiZWjXkEk7qH}Wpu^*>9;&O2uQ9a8cC8wVK`>i?B%BOyeVAu^{v2hX*%_;H1ud$ zUF3YTIC~IycDFd_CiwUqy!x_^CU$vuz0KTa2sOeI5enWjVG#$l350W0b2rFe<~JEI z3gCecTVI+<%F7$J9221nDq4nXWrLaJ1eiy=TYY7|TzkfUeQ(XS@`SUx6NqRipvfA~ zOv9ve?zY{s${X(R_|$(CWMUKb6e>D$G1Y0GT=ZE7Uix+br_9ojmcKy7q-yRa@;w+pX% zLjLLZogrG?YB*Yl;gBXN7VO3wfx+7JhCgN;w!bc14V6Brb;?ntsSw1__F9R$fu{*enF5!jQMdS&^peFJR zI1uSbR(dc?aJcKu<%Vxv&W`M6n3y&;c$w||Z^UhdphUmjR)Loxy) z@2($>2-*afy5%v7TdwWF4IB6UO(WsnEyK3*mZ7C~KI>U2<&NbZ!$T#Em$5plN~tB0 zrrJY|(}}ZMJA^44zca5BYooKaYjkbBORW~?583o;W7iT%3zQZZMofL2Y^<6pN~+6{2eTgEZ}$~OyKSp$Jp|e2ErW5j+mb70!J;0u z@x$87+8&1T%a>Y%$5GBv@tewxmy0rG#@t@#vv`Z&+T@jQHYi$d7bCwB)g2CMG=IBr zVOZHDwXNkEpLA^<4vCsBCd_u@r6z2i+?v+4(%+*Y^E z&1ilPg2uJbAQ(!nZ?$zzsbA3=jY?9C4(+-X^nPJ}x!FzSZdTvDb9nrHeSK)v;Jbc% zUDN!$Yju62xuAR@D$QZu7d!MsA9{^)h@`!m^qFZT3o6*Mg!*)4{E(~^6gI11qds6r zC3bVsOIS?vQa@#{F{?SaTUlTU-BR+SD%RH;*1e3g9Ys}w6qu(- zEk1%xdz~6O`8(P=hs)vbK{v4*I^DiircJ5f&a^pocmBW%oam37*rx}qOV$iaA(0on=s8L9?fWySoK%j>w0sc6_-Q6v?ySoQ>ht0k3?$+M@GF5Zx zOx5Y0s+s9N^Xms@%8&fW%K7Hqj-C%tXE%5@!DQ?wz%YMH!F`_L#r=aNf;9hr0!ZQ#5-|C)~g*;Xuo2T^fU z|H$sC*6-eRgPMjdeHk~)gIgfSZJM=wm9Mv+KZG57@Aj_yEvo7@a6v~5>oXfDu_Z1d z3fRnp=jO8Vlc)|Fxxb+ASZh3>I32~$5;Cte)3y)K-PvQgQP1(QcvvAO%Z)-_p{DMM z^BXN{W@UJv&UW+E+YE2;J>2~|asJ|{S8I@xLYO_lOr*Wp<@$D!b0|a~j+!Q1S^cr} z=>NO{O#LR9eh|p-F3NsnzAyzE6rJ?CwbJeVG<36NtlU%j6e{NBR0S3|UI}n-prt}ddQxg{8EJcUmCj^=brBGLGNirb&ROX7P2;)msSW5x!h;Vc5Lho^REOwYgH7l z8IEg9y{Bu#wpkf&hi;z9?`kbS6jpl}S(gV90X?993Zs2$?Dg5@(Sz%%Lu+H;;U#4L ze0f_gx+-EzklLI(?)36L_s>V^>(-f-JH|vu;rVJwbNF3qkQim{w#v zCVv_{?CKwosht>wWdCXi@Q}>5Ot=1M8h%fJo&S;^@*S_}y+e#yK%7PGy0{1zPl3)} zqI6W~t%s#tP#9dUf*q_m4grF>0pTY%hih#vCIjLJz5;Rj{YTGO%xrdKp`&^t;3D(u z2G-Ed@_ud%Iq8b-T-%p|P6{($^=rpheZforw}abDs9tW^n)C|vu-#sn$w$auE1<>Q+?~Via8zaacx`yq(oE^VZued zO~CTGx&a;-du^5P8PRKZ%z221)CKeDSf1m zn&MybBoAHxh*z_IO&|Q$fV=C0FZ8JDrTeRm9aL&6VI`n5k+q-ei8ydD3KNrIhWav0kwJsO9z!HJlf$KIMw3#>veFd^ z7XKxs)ZsMj4;2SalsLQ24S4m$tKtwo%xAG%tr6(6n@#a7BCyrC$*Lwo(}9fmNZ-&` z^4la+_v5%~wyuNwEzJpwvU|qs5iXClrh`Qnk|8MSfk~vS`7E)SatEYh_M`c3(es-xmJ>_IGI;Gj4aHaIGpobPO5tAB+?&x`5Dz)|G%&nz0L!E3g zPOwSnY#p+15z4zr-#T(kd>iYZ;aFmglbGA=6Cj*e34XkcIehC~^8h602qV7zdrjuv zk;8&L=`yBBUh8XY(a4W~4e89k0V-pRmNz-9QX=RbaHVfIMhSE5$9Li2V4~08ClOAP z>L8>Ch2?A)nF(sWqk6|ZZWE%IHWO`IPd;7&ehqNf_5^oGkgArIxg>J43F(g{9W|pgwK9SxH79_cgZ1ml}hwRcP)a zd%qhps3;K`8r{6Pi;@kkUVal$!@-~(nvhPzr|!iD%fP6^?f!(ZscdBZ?*+IS$Aje( z5+r+063n4w-@*5=_WE)R9)md;KpsxBR5 zvN3+ruKVY$(c}9?v7YCq_W;Au;z}o~3L7KP;lx*f`g-+v+wFdt4Yl_Qyw~v?ihnV+xTnrPaBI=?IgO6sL^Sb_;`1Mp+dT^|F!=7Gm={ z1j(9rV6lR<^A>tqX5cDs&|Jy>qCPeB8z=o>#}&BcE3O<+t{LSz$CvxT>*l!7jwJ!e zaWvdwmS3xa^rS+qF1QX@ zaLPN5v>cQw*hGNcJ8R8ho!hka)fROgvhyTu%pUI2NLjb_>dC9N{M~>jr@~+Lda2BP zZ$pYfG4oAXV3Nby>CaO0==))F>hiT$nba+|6q{owKg6FI(`zBo2-fk z5x|Ae$3alTEL$bwk@D&-xbv!K_|K4{p9I=>xi4*-D;Mb-xuJkRhC=n z)c%8W=lmO?{Gzi?w@WZ&x`D%tTd9#YqvX0FgcAgcdTaht4zIog#IrAi&(6!@PdEIm zf$+GQ>(1xfrezHqGm zp-OwCo2H@0O0g0dD{5OJQ%JZs3a92{)Ec-^ljm&uLjfk)s@xbhKTR3kBqELQvg>09 z1$eu%v*}ZUM@akXys;9d@miwJ9O%KCrH>_yAISRiON|TIq2PXfyjX$6Eou&U%%Ae_ zbCqZXK8nXiTRCPjE_J}F7h#a69f9iGFZD|oeLm2{+9e%8TJG=|c{ZT@U0~RYg0Cf8 zWLeD7oZ}H!r4Ev#{Y@0>TjNeM* zw>^he7FfQ`(XzEUL|U23+Q;K1eW()NO3-QcW*E|E#JVb}&kOiJ8Sk|I18a8)25F%< zHgu3$>NN+peoQj<$FP$N0b;Oc)hMx3kiU;ATpSE7lO#Vc3cog|EiX_Gu@kAe$UWZu zS>kDz?@g&)mgK!~C7{MpHaj)Tw;BBqD#3bzKiIo0(MIweXUk^nRXX{>e9t-1Y_m&6 z&xN>{n4Ybb<_9RY{fSH@o9HzZ&u!`PJJ%JZV*U3#vejNUI>|%uTvOMB$C%#0>$2L*N(@j~jjb5z4kb@n8!!eEJmHFaHCBa)vcD`w?0nP40 zFS-W`cjZM^YnTl5tJjP5vIO-z9BZB-UAQlZpPoR6I{;N6Z$Ga6qKm!f7v8uGbJ|5M z&Tq5OpEz0Ns$p6?=c7NR`+iB`CuoJ8(KPcs9*-d65se764L?R6MUt27F=T1yxCbnr zNUo%0*JvNkDL73CEY}>L6qsx~)zp4E!F*YE0rNHk&q0+?-FqqshOksqI8E!R>VUzr zI5tPkbO(r{K@y@P&3(}4mn3G&@Tw`&)a1*M<=gY6$~&qdp{U;~cv#|j?Px0?q6|q5 zz;QSgh;-G8Le=&V&vjBL+igeX!GcJQd(Mg6iM;p9C@j8)b0I&BMIES^!OGUq&!tLe zPlI=>*%IF>o2QUG+Fj$DiShq57Mv9p^nKh>1c1t{wHbJSj-jRe1DH3Ox1S;M%s+{* zo5vpGp2>GT+K8`c0YZOQU#i_y$tSyK1pjQ-cb7@#_a@yu3zkkbfj9b_>!G z&%X=tQZjQ9g;lJ@5^r*|F=Q8n_#?`x--#5Ql!P-CoKT05>M4;;2umxiZ>`JyOP<&@ zEP!C_gq3xiS=#Cc!fTyAydn-1405I?I4IONY?;BNZRour=p580xe!h>co$y3mNgF zF{&sy$yP=SJYuid-JD}o8{ek@Ov#j8yEeuhhG6qqiH+7ZnJP#j(cSy%i%4@!a%X1h zVdpvGaqY!kTs-jsuzb>B0g)86-vdm|ExD^jb_ATjV45N$MStRXA2XwcAS+Agqv<*L zaJ)a4ac7IWQ>XIJy><}pppUI1+gVqORJ6AGY7UjL1bDqDH#kidJ;4EBf6lC-KADmy zymKN)(IzSDIgwP0|E8Zyz?Qn%uP-%GruvM@)fbROJ=B90%#Ey#r+BUUCkum}Q1s2h z**bWp2={l1oG`1WT?=|P*n9^8(+sE47d)3zO6YkIdbuxT)=xf2!E=r#=mQHDt#z^i z&YBS}H}%T0OmoM@|Fi!&8*GH}wYzZ_vXmu}i8=Jks=b2w{x!681R?Zxe-cGXWQ**j znNpH|`Nc*V?0HJ-st~x4-v_)N4A>I?P@-$OPf#&2TN=2$Nh=p8)}A?)OI*VwkI7ZF zt+;9f*AsLZI2QYEeGY$J<_}WcETU@65T~XA71%mT%IpCIaxS?~nMo6dHU*i5EjdX) zN^9#*cjtVutz+=IWJbejBu2ht5zu#3eVMSxT~6HrN%1Op3DM3F6KE#Z^%Bv3<7gQR z-F8vo3a(6WPTBQWQ7If8t%}+@VArr2zfw~X{LU&vRkp0T;|A5{dl(sm=O2-@m*nv) z@efN9Cs=?kAto}+}XE%b)QMy`3=S(-k8hAb_y%7;()b4BuE%~KLL?=64 zMjfqI`_-@$N2cicJ+MZpD%dj~wURW18i$`}JyDZdoD%5Wm(q zbp44x+Mm_UoRo!y=@UKKh!3S(rtCm8^TDTUsKqc2D>pRBQC)gDR_gm6sY>VWc>v8= zd;N1%az*Ms*EVSrd0FZm+(<|qj(}ESWqGF(FA<%#ejSg?op+&~se^j25(C9_@0}uP z(}8lwC7a?QA>hz#6k`|=sP;P%z^jNgcfR(Qsg`=ll(;HCgqnJ`!`OUjn{o*E64!X+ zLb(hDGxU&kG=-6@Hho3}5w<((sruyO(6G4ntaxCoI}Xy9`>dz^F;FpH-m1V@itt4` zfA{G3`P^{)%d8W@o>U(AY5#Kf(Qc(EYny_<=Cj`&;RdC;88r>KZ?=72Xz^&0#mbX# z=3sTpYnAlXCC6ld^I_Amj61UTV`)_5Yi64BxE!ydjqpSx>>j{tV-8E$Jwt<4*DLgSR-;%b_1BW%pB zbMm62hfA$LngR3qcB`l?HiNJwq>H{&=wHjr-W3a8p65Im&UpIai?`%k@_^e>x6(4P5M@2t3Hf%ntB{}h2@-%Gc+&Hy`y-B$g$ zs1HFJ;lhCg$EWGbw17biHxerymit9y(`@4!@%t2UUhAj8sVQb+fVzv4{s6 zUm*NnDc|pR`+Y}BZ6iz5lNuNuw+oQeT?t9cxoTbix_%1Z^c#yQxnyI`zg;cNxA8Ej z4$gMq+tMOJh^Nj1A_++dWIoh6Uy=G5M%i1$y@I#!U(tzkJ$kD&G8lqi?u>4q#WA>lehLL94ruV))1u$w*%I<2@6z-}n z-?<9SQHecs>W;lE)h1_@``6XX;0!d*WDk{y+5`^H_zp_fi>t(#9s)t0ZVF@K0l z5eP)$6H-%p+M3uQdWpaKK%R3q87Ud%Eg09dH6js<+n1xDyO!VgM+6KO{l0>S;i>*P z9NEE?Lbt5|fgfR_vtQv0gkT^pf${62BY*8A@zhi85nLxeGjg#V;J_Vs)Ayoz6X8ns@U--fLhBb19_lD`~kyq;&x+fHIY zjoacy8~zu2> zg^DqKTd%-v!WoPSY|3b7qOy6$b-<-SfSoXXDc1hG(LD9}JhgL_^DxKU?(wOvdk&=e zuU@$--_+L^327dt0KA0JRNwi=VA?gJ#{;Hdt{^X=uOO+#E(6H8u}e@eZhQp;B>O`5 zULif_;PPeTjk#W!Ki1(I$b2#M9mIjx9NNfkJPs#B&c%+S;)YB@q)O^9!DVknJ z?g>)OF=IR8X6nFWTIVheZso;zwFyV=^K{&kCZeAVrJ(>#1H3dW*w|u!O|s-p4k;ZC zQ^?jXDzDcE$_VKQB^)vw(1%?R#ip5}A~5(mDuX)G2@&k(77@^pO#<&DkZ&&D7Sc?f zMmdLNe_=#<3V|@Fu*1NXj0860L~;XkG2$MIYz zcQfW+0SHPx09J+BpAj1B@K7rjpzxlPOQBq#n`cKo!pD-jC5bLozZokm`wPom?S--4 z>pD6K^jKk!N;fM>3?qZ3gSVhu?L{-3=}d+t;?`v)(-3RWA7Qh`O)oM%GHdma$tyh_ zyUC$ueF58S@4J=AF17sW(rp`t!`l8vo@s86bcR2D0Ajlos<&+Nc9cp&{RAq{SQ`t(~T8Kn=4&Rh-}r?Du_>4sl*5XLmj?An#^QWB0vP zHF@s+V8!^k)w4^p%l~WG&6*u*+`hb6GNJ5I&ge3#(9V;Np(UobEepN-aCkKI#y|*h z95JD}$WIWVjYS4Sic@t$eTC}YF?a^OrqI|l=`(R+#=+<*I%0Z4VN2ZMhYqHqJ ztd`73%|eg4Q<22mD>LdCc-DV1O8l`bI^Y2N|C`c3*OjhbZ$azoHn{%inO4({65ba3 zV!_f1X@UzIPZDn5$WaW(^6L|&fFhBMQW<^WvXd3{Pt&?JqptO{CINv#;O9rc8?hDU z_f4($)%Ta1H3V3TqW0Sn*Jlese;;K99*2VZYJCLxkbMK9L}AF%r#wKV&$6(m^JBC7 z?fqbjdGB?Se&-8etHyWQP?3MkZpH1>r^iPFeZdW-o>S&eFT9rgX|}r5lE%Y+VL*eI!al%rB^D zcT;^=2pPS=)TNK)SUp-k6(1U3qo~37TP?gjb>bS`0&nJ)ako`tbZQjtTH$~w&P6FW zlWvFNwVwuR+U2)9bZ?pE$i$p9J%i3uM25A10m5q72?>z%UTVouaO zCuKbd&b1QTwnV@DM(P-xue~K3aMaQ3Wmm&1Y3;utw<4ja0A`#%Tcm;k2b#?pGz+s7 z*dNz=?9IuP$VUT=R>C~y{594_wv`zc9ISJO-py)#6&8=k9K(8pJE98~psQajIDoi? zT4aNpjJ_pQ$$6<%sV#M-ZP9qqYZzVq(*T@l51u+n6XrlqnP8Apv({vPyZKjH)EIxZ z6iL;*w1Lg~PuKug(Ex!O$=|M`-F0&-2R}==(ZDmH^Lh{9ddy%lQ_r(Cjoe!|}JG&++++H}iWn)WiJaeux` zU`H1u{4wN&&4u3=~GBpZ8dvsMmJn#D++36jv!SKCS6Y~~IH zXknV#clP6g?IdPT1?Kt5GZ8DpgQn}vaMj8ZmhLHB`rp}zgYeif=>g}A8a%rY(@ep} zNwH``lnPDNKO9X)i;Xzxm2aZ%Wxcfmy=+Z&Y^3SugeHhSV2dw$Xf_m?3%24qCPEA& zHEEs`HS&TP47f^RSaoR6XcGBO+B||9M@o(OZ)aLU4ygFEXQG-=@{Y-wHPl~LqTy6+ zW@c#1w+3&@6u zFgtO9#p*b@vJW?jSPpy*X8k+wY^ys^sb-r?@NDF@&FichG7O}2eZtSmW|f~f(6?tA z$MtS!+}6I5s8A_|d8w?`xV3h%fO)5abInm437oO1<1JR;3e)!c&UH%qeq=LdL|(_M zM*2l_BT^gjL|%ddGqL$9a0RG6!}@OiMzN-tZ*lqKzXUI9G%PMx!wpr!dSdN7TQVIU z)Jq{^B{b(Z9RVFKj7I{`T6}lP*#^VnacjM zz`f?(2U>GNuhg}nmmp`xu9NWdQ0PUutW}29)3-IIR%Ce#1NuEOgjChp+k2G>G}QYz zp4)y|hQB6^)l>bzNO;mRYG~5#3U11-vMLP2Qlk=Ky9B~lCT&GeyubQN<`>W3qADAb z@eQ1wtmZp2Hsj!?#vZtc1pA4%zqZPlr^Oj$SevU|7AiWwHBUGbWV7QPjCS-5#>g2t zMY`V9#?-A^EQ|am-`b-oR-v+NFEpHLN*aeHs`CWFD`h5$CUBK}vXCyy8lSV+YXyge zqY53V&;bK9KGEf^b0FB_f_RnkTbeDo5X~f*8f4Zin;#}%;p{X5mOqHGx;<{MzpUEbXbiaK=PJ(w?`? zD?PTX$vj7G2o7dI3<k{KLl#Y|SICzdS}okc$Dm;&!M z$x=8U(?mtt63>EDBB43YSvZ8p)K3HSZeJjp?U(;t$9dju$}X{8lhI$8Bk5g~Q&M{q zibzJTj0!>SG^(6OBn`13*oHM?8tT2gEZN|>RC;Tbr}>?k?p&U4O4Z1SJ9-U=LJ#oi zl3%cCMzg0+gdG$Sb|`^5)BaUyKAUTFs}QlI@610O_09bDNzWfU9PP75k*1E;F=#(#9uS!A{1B4ifblim62Fko)$1cM_2b$*YMs7k;@~L? zsm!YWZ{!H{yoQ1LtZMlxJJCr5V~?p-k5na_-Oyo#G5qS|h)U^K_t91apboL?&+Br0 zs#f3eeT{`=vOE)vU&Ui4lHMjY>p4p z^RA&k{O1yZH>Ytk40BQn;7D4pm4e1Z4>=m3&a}IrL#p$9)2KVVimZ*`@8&VvCa~9I zZf%w%$s9k;Z6Q@JBI%{5TLG_!R%G{O_Lj5Y)_Y7s?mit-b*QB{7+ZsVfIOtKGj zqfePm5;@d~X74~%xti#X`;jI45)xd#at;;Os$E&tdiNR^tYi=x06yYh+~ex92sugj z^1zOPoe#cU#)56LfK)mD*PteH0b|AJeT;mgy&I95i-JsYY_ z0)O?b{`c!|yiG1gHe3cd+5MjW1Z#TJJNQVb%PzY@Odo7Uvu|oz+#ksC)YxA7Mje!P z9>-sdD)!cE_kxE)5>dW#r_25Nk@7gtlP_9F=Z&i3GZLHzJxCFwQ`iJSz^`#VCn51P z=)c z7#omqgb$ITKIH`v6mW|p{?pXo8EeoV&_N}32~DF-C6-`$bP^QzI_NA$kcGSKa*H|d z{5iSw5dO>s4?C_}0}nX^Ghl!5jR4}lSEmFKjWoOW?r)o*BX22SO^Xo`(n^wG(S8YkL(uPymtHrQm? z1IL2aDk2C*jM<$h90{SNZy1;Z8Egvr0xxeT)xan9_3PN(L-i%K3!Z!INDd>8t0kXf zUC#-kYxJ+ybWQt$*IUyf`m8L#p~{{uxWK~YISRPAWZoMBa=PBm?mFLRLtCyYfND;KTlN=M}su3>4@&bX_lzZFK{GaRAwo; znCj|>{Mf_2&aggI##Ay|>U@a@pp9Z9g)p2HhUw+uRW{fZ5(QSxS4D3zc1zoZJSsKx zfw1hfMNIuEWZ_)Zw!{YdO+}KEp+HU%OXpo7x7iDu+jeo{k_d1Yk^>&9MeJA3x-Au< zHc`HCm*8Q9o)7owX7po&J@R9$3UX8u5jdAWf7HoG-jQz&1!aG@a?%B$lA^MCwQffi znj;u!dAnprxrLq5`fL>eM|NIyF^~2%O6SV@g>qRkB#>aTNV-IUg87E>T*zP{a(U0JI_FQ|8JK6@jN$~2Oq zP;8LR#qw@zU$BioESL~NS?FGy%v6K5mGY(XPcN0YVGcXOOUL2^dVzmuEiEpmSt)r- z#4b~Oc(KsDZPHVO=eDNy+=`1`V#$~%!7j;2PO|klqpyj+<1B|eQhFe^Pa3?bfo&PEcJWbqUKiB@Kghzx@A9sh+{+kgyS~i$!u`2}|dFEkJ ze_jUph~ovB{T`Y(+>hZTr`g?H!Hb`#3d|&&Y;|C{?RJi9UR&lVgVRe)dO^;Pslmrw z0yb%4t{0lkDlLuhY5}0D2DZU?;o~2U4Tw;Ayo=0gTJv1zz%9)MXp+rj`YX(tVo1du z@f;zNFL_8o4;vd{=q^24qDmN3LRhd^NC7>`IUOb>ccly7-|Rgl8hDVUA znxPY8sQksMT(DIy$lnvb2xEO!R3nKW9kzbzPBhTm&68woX zWCCKG(pxb4e$-#hDa^@a!9Hn@pUt`|ZBKo4Q+S=-oyLm(tM8xn-fEL!c$tdCIdQ|7 zq@$=HW2AH~vw^(?Wt~yK7=#IqM1D`Vkb*+<$e^AJSl~oi&GJatJ+Jb9ERKgP3(q60H8d}UnZxTM)^(|F6~!mM^O&Y}dp zzG~viojnJg%Co55JgY$sGXalsfjhdFlP+>JS|E0m&na^!G6=u_K1%nI%3UZx2O+~| z#i6(X5ukxjZ#d0qsdV~VguzIyqIe(|m1+t2Dm&qehbU0#!pECbvYA8WpnehCuunJa zOe)RAZjy_gm@~Od%M#aAzsg zqf5^nA}iz_&j8C?P^DM#sF3O8InTD-xZVXN%%izY(F&Y4a-;*&b7nn zNZ0U>Jmk()3O8_yHn*LMavU}W7}=+`h;ART;Ar!*l)YY`%F_1Rsg7v;G> zdUTD`HKo2nJ?XX0^!;9WoiF!Tvf=P~Mhdbjj7De9k&>@cS0}p2QEF6SAx-*zO95P} zs%u>MWDUWrVC{D8tyL~w=Mky>s1dSrVKG}M$CF`E@XozfR<&)ZWdvVId*9^DxRz+) zw7WTNhI~5PG3N~=!#6S<ZJ8b)0%oh5FBN;WA;#$j_zzX= zsTX{TIV+%wl=IXK+7C_86z?lvYhdNztkkN7m|jJ`OPSn1%z|M^;2%GTc@VzaNDcPn zPD&B+vTUogf~I{-3p9LFw+QMUwEV^6>}35Nc}F(^;G5?bu@H&lVN#Mr2M|K*wCk!+ zy>2KY^;_KxX6di4K{%uZc47QqIHJE<=prL&Xy~5Y$ZZ$Q8!gm9np9G|KF6u-T5Yqh z?1@qDX1gshix;TXgC?5Mt_McS^Bfgqd|enZ8=B7byJE`&DvbUQviRX<4_s6bppjy$ zT4uX;kvz4_1BvcQ{&>W)5}+Rc1A9g)P!cMN>6bqO?%*jAAJWDNp`fx;QM6;z($pn9 z*~=+Xzqem=Hg`PyS&nN*W1-C|MeeA2xi{_XwR=;q*ipNaytxl^=NRud3xK|VxbF)$xO4e)JyTR7 z#QGI^eKT+^2eySbMvh)d#@A%~@K}XRO6hXAa)Kl(deHB9GFOP8mG}D~l4FdbsC`eX znYz>d?hahOH+eUc5b$SuROPGJ+PBlrYYd8J_Jg+CsQv?6>&FidN%Vkkn0}r z=PmJ!=L(3h*yRP?q3|x<$r*KoJ63Xh8;aWk^Q)%fJM1`51F}yXD@!ZdLLP5DjH`}B zr{ugY#zZ;C4J zY_}b0?TJ^^EaefYPC^S&UXeeZeLoAGFt$@_TAlEwsNnnjT(g~&h0|fxVkZ-%SRn_^ zp?!MoG0%%Xp}>Z9I+6Z!fu6gR-Ei?cU}zxP3Kn|c!y(+`@>gfL^$A_#!K?8lN$B90OpG?)3EhN0`*J>~Vs($i zUGF<nN5-}7l{W=tcN)=*mAyClS&_4&*Aa`Q%Iw_YQ7CGcE!0n zTH#WC*b%KB&=CcJQ;$nI1`AJ2(9KPEW4 z;AGz9Kh@+R;7$c48}=8mm8@Y@j!vgG(hMtb#HqcyfkYXfO1Ru`Nb)25%F!=w3ME~6 zSG{^xC5A`>C4MUaf1`hUpsvrkb}+3^m#2(AZ~DvLC|gs8F9*mswt9k|Eap#9A*s|z z|1$o~7~lx?1v|u>=P^M{mA@PGut+7;bBdKldAm(DtjG@n(iz;N;AEM6R4ZcI43I4; zHK&6k1Jq4eKrzbna?h1cKbG=IQ4n9w0#OZ;T!uztoaFf2<-$@x5t(d zk^7+b=4gn>4IeH=L)BmSTyZCg`<-mZ@5o<5STlc*f)bwD4d?$bBjZ>@< zu;L;0(uN!EH&8A=ULMtTbvGP4yickwyazAGZf#BT7@F-&TmD8^RH0RQ-kY*_XTWEed_on=3iZM%MqY7BK7692h%u;K^UeDrG8E9h)+h zVkPo;!XRWAWDOpV;CrjD8NJu&_hd1%tYjQ5^XYR-x&4-cL?0oJ!m5oJJR&o<>XyAc zLH}F={BNJwJrJ54&9ilvOQuHuc-4%U6oD?ErreIdaMKgb``r@aiqz0EgMMl)LTN?yKrZ~&iWaj){U(^Q#oFl6UwZeeR6dBYk)Jpx zqe{UwX~K38ZA zzdcLEYK@US$P5{1P1t$D?4lp7l46xjnrKvQ6b!_PBSK-W?9 z$+%Sy*L-YO_|eO+h{am3iiK{3;M7!S#eY>oqA{Z{(}LN?iZaJ>CVqIa?R6m5H$l#& z1o%$T%pWMPG;hQ>f)dvQO)hBf05f7j>LZKT9jkJba@FtX;`8{wPC|LvKq}1`ryl>} z*Wl+s2X5D^IW|ur$A-?p+aU&W&FUct9T|jp9a!oT*Z5q`!jSk}85%Qcr3)S0)K_fi zi+b~8o|+jh2Ipfdv^E^BNBRoCEm4k11Qh{iB<2h4E~$@uite>aA5yGEU~Ogk6a^<< zl-!CxTE;`Ebvgan?WR8}$L52IIIfE7D9F{W-T)@!(nM}}Yw6+?Os2}y)=ovP$0m{( zlYiFpPAA2`bgFP5!S^!Bk@1oKT1qAJnld|ewz#SJz+=JyqNx@$qb`5Vn2-vNm9FIL z4OM*+q}l#ZrY$Id+p0befJG=3oil<#(=v8Xwz=??M|WFt781AA$#XfVz>}_!X^HuD zF@k>XBr0Z@7?MfKAY)qy*!UPPf%4F5474pvut|C>_I@#}Lg}^tGE~fhNe2CXS?vpmF)S~#1>mGh{T`-1h@Hnb42l(+AyrFkWMh};Hyl$0jl ztqAh_PKS7dU7+j(H2&>SvTOXw6p7d-NruiB^%R7klVeU}~Hs(g2vdyH;;Y7p5{n8?)@8ij4o<3F|^ z6t`KY#4ZADsRgINtw~~5Dtn*UK3RUc*gk92)hFoH`&!Qc)pArT<9jVV@BFrDHXAhH z`jXm1?-RS;{rV%?4ErM5odf-pgm!j8y5MkX=lv%p{>Ib3&b?}LZLV`UEdk;#v?dRx z@3Z8`^Ip{AEC_vDuyO)YzI0}*<&dQC`INZLX)?C#t{ujWb0k! zyIblgi2Ah=PR!i{1FCV{k@un*35sdlN7aa|7ArA}R~7=FaB zV~t(3H(TEe&#;ZUrdaMgt5^7~6ZIk9>aiKV#%mOVl97C5f8j+vjrB57R@$B#X!X>3 z;5V1fuQMVDG6}+v@gi8KXT(T54sqSI1z9lzn#P(|;z|0a8ZwrQnmaKXD&N?18&~1; zbu)_(`M>?<3uSa6-xI{N+^uHQzu|=(h;iFLY(hA8fC3O`NqRDc_`kXg$ zD199$id7rLL`bu|?;=H6W^ZBq9zaUg;91{VUDY?hS?ht&>cw(uly+P^WHS=AS9o1C z63Z$Z>d#qKcs$JuTV@UlqdjRIkZ~C6TBQCvl^3C;mgCWzOMqpgL{&cye z3{A+5^Coy;Sj%Dz3$msDDwYid1Du{>9Q2h`ru$!f>x*%YdCBU$H(h>)W&_JjSu0)R zG0MplomV9<+{Y`JxA;@Z(S3%J?IU+TmX3;5snmk*rzrK+#H?~f8I>AU#^^J(@ZrK<#)5E)H-EKaLN(( z@TnaL#i%-T34MIL9xUY$hixG{e3Y}|zHz;EfWSpViyMEUE{=g9oW9#S-mzb?*v|yH1v`mv|G@`ii>3?U18-|oXFYK|NGfWN1 zp}-if?18${D~6Pb4AN5u?fu)1_?>Uwq``j`9iUhaF>u%nerzZI*dBn#BR-a%Qp$#U zMhqQ??$e+*wV%5W3LVED5>h2)r^>IU*!)X$+=0KGwklAcY6Tn&qRUS)nhV1r)+&@T z4gzh)MQWrvnClEAh~IKbP3}&|yPH$3C`b7AG`#b~IMP*?yrw?mjEg`N#73~`;6V{% z<{a~(52^r(H_x~FVXwds8z1i}qSvB?hjP zC&!=^Q79)S96@}oEEZr;puAQVA;EKjQoJ$A8LchGAa{vPQaTDMv@iz7DWeHE^8Gen zkZKX1poHg`LQ4w7`MJ1>n7OS<%_)p^THgB}P$#4W3UsN$Xl8F?5rP1?S^mc#8$J0r zidLu2rRtLUfQf@g7#2(6pv53xRtjbk;V_g9PQA9fRn6z!oJ$-z^ThE{U%icQ?AiSn zzyFaz$wx@=(3po2+3vM=wovdtWfc@@4{+C?Z^llRex>IzYb-H`zTx=#e_P=hIFm;_ zI->$5Dge)fZs`r`gF%+(`&o^2*`Lq8FKZ{=3eLc|d!)<&=9D%8yH}RjO<(TR&1KFf z&-+sewcE$gXJ%E2WmVaG6!IhgWg{<42DM%A^~2lP$N}vunVh6Q-f(F`xC-CPmOl)u z$7P_Dj14uqU`_|L0APbehp4(f^CAcZ|-Y`MyA7+cqb*ZQGtWnP6f+F($U{Ol)If+qP}r z=l%WH{czX)(!IJ@SJkQAr%qQF_J%C5IW8onkJISaV#b2`+t8d+E399bEw}{IS|dZC zZ9$K+>_H=763|M8yGPy_+N$X}u1!+S5#a%AM^gRxgAFU(wlF#Zm?jg*!MP@^U)o>} zOu{1;IwGoz&3}uzCaRnI^Cx}Wl4+}s1R!on?;HodCBU{!#=VnD2SF|BChI6-S77$KxHK~{n(Mb{7psLs$x?V-%j4Z=~d^9XSP@B@%A zo&}7kE-&gwya`~Dj~R71wZdHyj1hF3zRbIR$$JA{%jv38Fj+?lO$k{ zCAUIHJpPtzd11KlCr~%O`thIzGR_F50ku#d_CT|ngdL@Tus{M?8S=sVW19v+W*ej9 zJ&?e~gBsNS05f@U+v7n%0U%CIK@Wko!;cc$MuHYZP@znl_*<=s83XGdP!$C}=att= zMW5%L$87>y&=>FdUmC<5dg~!DYtYE_GI$gP=sfOO$b8@t_`oR)2K5=3cu*$me`Zdg zv8iB_;BBZ=Cr;VTuvL}uSV&%vT z4EN#i&Wc6nAXduU{ru1%h&k(gzzXd4AmU1Z;B|&s_7# zf@a~uBLJw^z=YYBypFg*tcHLBP;vy&52*AY0>GSD(kWv4!Dga@ zzD)E5=gGzd1clSuxX;6%GNPbLa-@69-365O*df&Vu_t8d^gbv=wJsMQHKS_EkV zNEmgB6{uxxjC6_#{S5+VRrr3dIvV|q+&?gWK#)SA5e$4$bgv^Bk%m;1nAs4GDDgE)ppv?t6^KfTG|ZzjmX&11klELZ@g z3&70Ca*TmjP-^q>|8tD`A3-m0^o*>-p!^NB?33Cgj0++3TmQ(FU@irm33}NgeEES$ zraTesAehIUMnPuu#gOSF)%mlns95}$D{sz!cC2fC8&KKz=Cqf`hdExtxy=*J~u0R8S z5?R4Q7e&X=w{qv0{EJ^gH$Ez$@W1kr@(K3tzaq(IuIDp@cnnh^*}6F&ptIW2&~@VblH39X zt^SelK*lVA>7avTVJ1+pkfQhO23XWD0jzM~%_cz{<+Mrcp!|VFWrFU+)E2>t*+p#M z2(ux$GDi*iL*h-BW5XzDI-yd?ktrGbfjb`UG6;-Y1hg`HTFm;hAp|b}=L--cfxxZF*4@AKq_k;N-`k9@jqL{pCBPbIvW=LI1j>Wth!CN@L-*nikZuWqOp1a8H$2F};DhdpWBOZy`eOqFUbMd>Fd`r% z;{rdU_F%yPbUVVSN#OrAei!>C;601dhBOdti3vzrJG zba1RhSzz32up+Npg7Iohuk4h_(-HT`0M=uWCJ{3|GwYQb^i~dptnI7q7nHDsiQ&bL zPy1b8-qg6|3ffJ_ywR8-7)Rn_FboQ6y@*4fG{+Im&RhR9wT?=v*Z5TEYX@K=_2?5W zfrdVIaW*&?!1MXCEcE%P1o&dpy}y5aAkJk51q4e9?j|Ogr3d==+!5}kcTBK9bI(uS z2i@lWV4}L7YPn8}Pw@^$HWvJTYU*UZZ&MzBYWk%e)U)6%s-;Q4%(NVGrMaeGJ>pqq z&eXV&ysxWw;GNHK7)E7D+W=_pYDC^X%&!mlaI==XICD>SJAJDdYe*vPDgN|6Wcu8z zzAxQ)_gJ3}IkH&~EZgn}aD2`%)v`p zeMl6~lVS0diD9Z!3J#jgD4D1(2U}3QPHX|1I+maS@6S#=VJ-Q2fY4z=+IRL@4@FOn z!CU*A*x~K%3xyB6;Bst+a1FD2nlSRAUaR0h0hZq{vFyNPrDUzEb7mz#H+a8%t>e)u zxmOL2g;brr@xnTiQ*QI*S=Cw?Z3j&(B!vt&ZhAC)x5#W(Ji$PW{v^08Yg|a$<^=qs zxMLfDR8~@Mw=;{k{+He8P~{;fs|8;PmI|F1v~+?DX>}mSp1GA&VGl<85P;mko3_ZQ zj8f83>G$Ya14j*BF)13wv@lB3$_k@p6_O1HwF@gB^m^u9h zy`vp(mrJ63UA4oOF8+ZR>k>WBf%WO6ip-?dMctOh-L|_j`=O_W$*8%Kzwd5LY8YHC zH5(1MQ{4*ozo*k546N>|54F;lag93D+h%E}nvsa{9{zXR*<$0&?QCz zJySfZno(XEQa0Iz&v~isOGG#$yWxK;JR^q|+rGRTJqc&eEdtYfqBzH09~ap5%;xkU zTuBv2-^?a-(9TSQ@zEfXH{e@cj=k>SM_{lt2u4MtJdYj|TpK85&s_fxSz9;Z?BWec zMV1O(@u~@JPhCEAtvfNViTM@&*T5V?dI&Pse7FD z6JmnlOKxqTN`mI;)TTYiG_h|G(9fpL=b$q6WW@mXT~94|O4lggInD)X|w z+9JX^0%QA28s;mehrO*D855c4*rHg1^K7m|c!t1opkF`7f)zwM<^^CIYHn@YLMv=? zYVHkXTqvV^u1ElHVjIfY(%TO;oGh%VOIKwwa)|Tw_6kaZW@S7_6fjE*tJtuO#y_)( z6X@a^3FvO_1{%8H2VjEYNdkJoRB6Q>$vC6IIO5&kNew>bX3sm#P~&Bg7M5un_RlkJ zSR?2l-(Pjn0|x7hfMbs8Q}V!-L9x_jt@g=d#v!Ld7ACq6N=;`5d$T&=+V7;hRIB~& zJZcg*r?)BVM?9M=#lrj*PRUX1IuOE;wo(4*6oazrES=d|7FPsM)lvHs(P)#y6ehij zAju-$&0Zb98FK2 zPiMB)dvqd>@&=0KL&ofLEH!c|bhhhQ&JT#b`f0yf#i+O*pD){xP zHHn*6qItW1*10@-^)=V(G+hzTxswk1qR_<`9^kTv1AKjEcGbL>n4mfoQTNV&zBx)Y z)k`S7&s6@w?cAbzfB5};+Uhu zUgP|d769iPcWed;hQyL%xO zJ3XFasJFem;$_p*vrJOMRKAH`aL_ykRej9{7;~;aKutT$YySff3BQ)W(Ws8hf;LjKdE zoWE59r^78aUVd{;;IL!h2~)saMgTCj?~b~+{rv)@rhRy3lw#*^RYLYt#Zi^9xLxwl z*x4F}?g2pN`MSgkv=<=Nob=B<9Ji#FJ3-wHuT97DDM5MA%KOqsO_YN7?Z7X?D4gP~Jt{@cTU~>=2NDl3-=P ziq_0VvaIm$DIqJDQwMRpLXo)6NH=A^oxjuI&s9nk@^Sh)<%#)G1OJ@T{v4a$RHn_mlrsnaje6mPHzLPo2z9r1&|ME`a&~)fDb9Br zq{q(YH+F>ky{HxSeh|Jw(eaZaWz<|x0WM8>BQf*`th)7SS4lnB`T6uRXJq>t?>^XN z#gR_xhwqn%;#nDQHvhFw8~&1;({UToaMO!PJbB|aW7N8=APUzTJz`J~+qUga8UUW4 zM`z~*`J9J9&D|qb={g)hQ{xc(AnoGeDP=U=@*Dv08Wz}HZw!lS{*o;8_3bds9Pan} z;3NCmC-QxB93XZ{a_;k$hhArMAkM#_swA>gGn;*NZP>hT(viqTsrPX=6}?5&d{v(6xYW!NqZitXMuc=wkLL|NFE^rdEF6zFN;aRNxMPru1HQLrqm+e6N4a z%gk2PAue)P>p=Yw!Ydj<#d88HCO8^6JO>MVEjDk*D4G^JfJF!6>8$AHzwGx^*{@!z zqF{-gwoB0}V*nhsK5?g_o3Hz4mDA}2I!V{lIskcP?=$DrXYjqAzu5C7_Z`Zd9#nR_ z9vt-86vsW|obCYYic%>M1F-0Eh;8c%GaAdNTC2+T z=T}QfsR0{nU7DOOvx-7Y=;3u~UMh+hqxYOIaivKte83q5wA)NLALt(>*GHpHXysXg z;oej)X@+I-nY ze{1E5m>zF8*aUxH*XctO5uZWZ(PugR3-2P+8Yn7Vl*!2ap2vP?nr0L~4s^DRfU>zj8j9p~H?9j7P#aJUzlF#hTH zm%pA8vriK6^!7A$x8eR(i$>v~Z_D!vsJU7`V{(9<)NHu&pzl{}H}|~JAd)%vTn^Bm zuMo&FL_>L|o50HtZlH~?{;`%W%kG%63^y84eF?9kl-Na}QEliBGfmt8?wKwfDAzXI zo0(ztJiade>n`Rm`Sta0rNjF)h<2mDS)wHrQWv(8Q30LspoAF{TEq|&EmS-Y`Z4M+ zBP1jfGi7WCv55Z?xLCdooH+Q)b%;_+aeS8?9`WyWF7NJ|1kwlHb-dhDf(8zoDr!>2 zC0RtF=I=o*1ea2yBv~i`0^?1SzP2S|me79*(9B=Q?$5BAbf-7<){2A#PngF3irK*? zdJF>=Ab!cLrtE)tN*GOn9BEPDd1CLUHv89|Fxi3Cz$n`7aO8euGN2$nCW_)9R4+^J z><`t3;@7A@0(Hd4&)1@-uK7%lG>QrT0DPD7DaM-TqSpDw!%JCJ+gZmNQc7jF&5Yox zY+gQmvq@btN+OSv=~ZS`XA9)sv<05+xwm4I6EhQHoamo__jKuX91sRCRg@VKJ}{LT z3>8W!AMqja%Gfb_wzwetVwOyb7TTTom{&zE3jN9xC=z1KL z(;-Sz6VGd;g$Rz^ulJTBPTA!1YB6SH%Dy$+RQC0x%$VD+??~PImEaED`RkOHH~*Pq zj84lZqg#D-c4_6x2~2fZFIO^&)a>}{J}5NxP?pk1St|P zKYCTC)8HrV?&*$9n<9$3^ZE=@AFYXkoX^h4@}$x;f$qw{;7EK;;U&y>Fp}15=g!{} zLSKe`sWRY$kV_8Vwn@C-w>|Ll|7aZ2e>ktMGiBP3-G!=ta6Qkz!3QxO1LQM2QnVl> zYdTi}_E%@n-D+WP?yJJ9lqMTgeEc7ILUqAmuU;}9+6gqGh0`*)kME}I%B!wRpT2pA z8Ym)$(A_(dpVnd+!|{}3(XcuBMWt6yVw;W?l-Dau$WW4Ud!Y`#b9U)|9a(Z?dpd@- z#`-DlO;~+1#cKpGM}L|9NQv@TQC>;UmG*I^D5-r`C%x18+%9(<6G>FQK8ZaZbJPA? zREXJPxx$PK4wQ8XSZ5{%#7FG@$Gi(s8!zV0(ER{`bNn5^51cNjpom`-D?etQFSA}O z9B6Sc!_*_-`T8Ka5h{grp3<8co`MJ@rP=-^9H<%$oiBl;zn29MLPD!}c z!Ub=WsuB0t<5fxh130$U_e-b4h`%3~bHDCxxy0X3Q>{0cweWJk1TBwy(`ATgT^t4N zLSo#$&Zm36KE{~_Q&%^bvjM|OEMyrd&?3mcRSv^X(jbl#iVtkjQ2SU8G^DwRQ7;o= z-9}g(>8g5ZtXrE*#D#Q(go-W_T_csOd4$+omnM8_*~vEd*xbl6p3FqDV4RcPbzhMb zlMtnhN@7eyc?v*dF`S`7z149e*B(f}1HrASUw`NLf%ft%miyCKpjg23>#ikx zIJQ0~U9;Wiuy|C`?g32aQnr{&+wLlchH(Ojq9n<-(L3pXL?=pvjidfz#2a`H-4Hvy zUG1+KTo)UNB=RwgI?_ZE{6WdgSZ5RQ@%?2YLy4%CpPFZfjS zW|GqrnjX~)hB8B9OaXxU<2h)y-whlXH0ED&2E7Nh=LrlSMD4+eRg9cY8$^ADf_uRy zD_CLH47`~z-Muz*uB^m_OY{zF{ZSG!uyge1IF5rtp8oA2Y;W(bcx7?pW1c(f8nbu@ z7oJ4rpLiz`nqbsEt&Gqy*ifAE?~FNq4A`J|aRQ&OuM%cZJRIP*Z^ly+yl40bc}|J! zb!p7=vt zQ~iq50a=uSVCz@RTt3W6E2**abZ>CI0!rn8V|kB$csd(qFvTSIc9UUrP2IqT!B8AM zOA;%nLj>6l6bt~B+yvUFLFwSBHicybqIK7cD!k6xaLLzJwPec#BlNS+ZqODRwf~PU)JV3F-h1Q)H;bq_3edWw|8GlvdfL z7wS(HU0Jl>WWPW9*bZCae@@dGIFOr{OLi0wyp=zNg;edfEXuF3$2yI~&+f$LqDFy= z;8iBld|>YW`HjML1JcC1eTnPe6Jj&5%)jN$tK8Z$VQfMf)+W_zs%;L*J$NF}ADojH z(hVk{;syu6Db+-Xe8Fc%B^8nKC%5Bv0L9icq)odqh*LqG9C^jiqVAC|!G-Q~I`Y+@ z9k79}!Z{x)d6f4-K&g&>#&(X(+Gg0@OStQi7yBTe?X?3z;(^~l?bAl5KTUJp+uFN)2v^G1 zt$4a9hN8WjKN;|(QK49!x)g%66j@d25GS4lqNM`n%MI1Xy!=zsNBWuZNX1MYf?t_2 zgBuDEgeoG-SiwEpt0d4mpj}YOrF&hbMQ@s=McUG+{o=e-bzP>1JYlL|37zEU7Y%8$ z!u3!vnc<0KMzmdsY;@CwqJy_gAAc-37nimOQiU}>rYrsotH;13d~p#hdpRhX?oYPL zhFZC|Nrk+iQ&k+`{LNk~yTGZFM-`@!DBJNxawMK#6Y9`B|#X39=LP;R-5M(a!4jDK*>WP#3<+;AN`&0{e4)mtKIOLZ!s zSs6E{Kr((d02g4a7X?&Ma880FpLFYyl}W$i8TzvI*?Uoz=k@*Lnu7Fx}jG<5&xj%rxVkKYxOW5XJoU{gG>SCTcQ|i(D zZ`xbOmGd!8TJDXLIV_2L3t(nGs_o zrq!!Dbfdm)LTrsf@cs(^0h5X~;D?`oPQyiSLl@3PYlEML$zS}I^|Y@mwT!47vK0Ue zL+%@r5hD=`_nG2?ma)(!F>5+gReQ+hCe@Wn);`6dkEw%681+SIWYm%B$D!nK?u}W3 z4Xydku)YPGAOJq_W6N$&43NAyc;k3QOr#mHO2xaN(e>MLMedk_bHO8Y-1#bOVdapT z?*t30cCL4BL=&S{f-cw>0V_{4;6qb4e-zt%YYWyIa>9RJ`$=KU7%Vrb4?+=6o6rXw z{E142$N3etPp zY1nxCtm;vL;QFa;=66?@sKzvhAAZkku|y(;>JV~z&ph6D>sEK}RiBBcNmjCf%Xaxu zGQW>HAw}7z3m|q8-Ow}ESMu*w7~D-ljkjHBMJ>wVqN&A=hMvGdPzFa9lu^O(aUehV zaB`*8Q}dJ-{&ZHa4NCJb-%@QiCD`+o78zJXVA;5{31~~@YgCl%(m(r?YBR57WKZ(m z<-U_@Q?IOLtrk9?Xm>%`PEyc*a4RUgZYS0L`5kGF3_uLu2u3gHPBxD{Ehlm?dS;%h zy(uanI$i+QETnf(f3!2LJ>UxrI*@z zKEhS*h!5OTGijP#rf{|n#q&#R>#F2gb#v*}U~Qf6-caK5g|@TnAvz!`#MGtJ>ft`` z+ytNBuqR58+0U%=9y{cz9#Yj&(;U@TfYC2F^=zO4v2=0Az)k3L_!s2LQsapbkZHjF z(4p9UP+(qk30+C3i>|T~&;`NZ6S+0&_od^urvpjtl5bF6^xWLUR7ki6(&9AFG^kK_ zVTe;{x?RF*wd3*KR0F56z5s=ouu{vtqVQbATjtzp=~U^e`rrJjUWAhpR( z#6`@8YPi0ek0UWrV>>hB6twbMaq?he(Y@5-v22pZCY18iQPC*M@EMz{I$C@f5D|Qv z{W~W=L>i$02d!$?Vz*UEVG1?WiPxV0>fvZwMm|=^_f5n{n-7d5dixvq&xbz0IhT=; zQVh4RJ`{}y%=bl^LD+|80OI+%p!yqDCX*u`)DRGr7li^9kPyz>4#0ApL?Pg1+o+A3@uq1EDB zhJq%h5Z2$73kz>J05Q&oB_;V1Z{eZeYv+4?;Xs*VGXccQ_04PQtuZ4e08S(cBQWFh zdU%tm191KEI0XBXhGXdhcR!2fs8OREV*R~m8?f%{ZXA3Cc%Qz4KpZT&GeV(E$yeqv zB`MDz(`8J$N%i@*wuD_?lFXi~3*^*@OHvWZa*J92ES>JS{<`gd27J8GvA>@-z8`}Z zi}H_!NlDOz(-zIhI!Z*R3ZFCM0*F_7o^rqH-(P4Sq9?olWnWV!zJ;og`Qybq+-i$S zNn){Fg%?Kg;JzIl69c|(OLJ|uh4s{RU$|v4!<60>Abpr_@R5?sj+11#gRaGX9J8cP z^>GPE=rf$Qs~fcrmBh-VMVN~U@FrWj@I)*SRUICnCoqiCDcz!1^C6gx1A5~9x~Isl zRo99xURkugjg|W0mpRB4ozO3FPqG(PRTfFm)Tfb0vsg1`B9-RddtKhDDs(z=)cKDT zOU3EVj922B$+Dku)@mi=f1|_tTI7Be&)T=y$!c-vi%cpY@AWAPL zPHEFuo*mq$h3;tYq{*-14~DeaUcN3^LmM4ffm`I!fUrOf3zb`@8*5g;R3c4Wywv~X zkNS7)&%Z*cX_jcVQSe58b_wYUes;TMYlr)FE)PZO?`|AK0C>!eqeU9wcR0|9 zBF(U&`$c`+rZu|7KS>fG_MmQpwaz@Fx7`leu7E{Ob6C2~Yn%$tey?0arGX-f3Q0fJfXnt?_6y`4Tl^aZJP zBbPX<6e-CumrVF*FFKE;pOmb&iI_tsFo`YL)P%xhu`#@g7y$TsIqpd*+AT`$A6539 zE46$P+~SqxZPzEFBz>7E%!442%g#1OO8SsCBuY0%w)O2uiR0%9EfI?@VKw^xT_t3M z-dcq@&hjrKFXi}0f_AY?x_s&L0lBP5}ttDqz`!B5?kwRlpwlDSlV-l&e z0^3{LcouiP0ZrsZ}PZwi>f%0=<(Ze1OLf#Qm?Tw)45M0)=foMhEOF* z&Gy_(0Pt5eU5Z1HycDdW+~373R6&b%_5Nw?ML+lS$GJW+?X`7w+XA+Y_ZlMy=K8Yd z;l~6Wg|bVB#Ifr5DIPm_#wDk5%}!qupN-$7bqC_hF6Kq@x)k}tY1Q8wRhkjR5amP- z51qnUeu1*%Qw+E6JwaU=V(}G^wQijJ9!@Z&2!L$*mu7YA&(9=5WY@bh2W_{knpRop zQLn}pPI0_bb$oMNjNeB)oB69Aa%iS17$WOl`)5{)U{_klO|(AFT8LzF0HhjC14R60 zm*28P4KdhYM{CI$YG8vrbPdc#efB&mI{7XgP!Vb@X`15jNOj`W!$4uRw^CxkFT|?5 zazIASJ3)74$zR4hF%_Hc2+%7VDv+>NC0MHBQ%IaGo;EI?8-p}GUpU=~G&F@p5tM0x zz_6|?T@7kmL~?bysvl|_g=okgm(ToqTVBJZMbzyjSs>uO`4ysUL#RB*<=(36|r%6mPUV{c*LlkA|ODPr2sm*YBQ{8kk?p{aE-cczsyT<8t1XUJMYhV{FX!9 zZ~(BaO_lwm>?9~yQVY)&xOti(_2Wpp8KU=<3(<~>tuA#ba|Kcc_H`p+Gmzy$JE_@$ zIEJlAlC<15NC6Vf#dS6+hs8mOTTLux1^LUuNZ8&{EhIm zHCoFdcY8iS#l@EWZ(SPEOr54FQ8yyFnDSL&&pM#LE~k<4s=iQKJnopAKtZ`$7$2Bn zK|#M$xgVL0Ks!>?9+{^R9XxzPg4qvU$zIK$G*Vrjm~B9>Q@5X(O+cShMV^7=QVuPp zGC)NU&B-VB^3$A>k7&1N7)Q}wHfrMs+;9bMtv|n`dO#Rq7AyM&;Igq*dgAA@^1lXy z^DpYfS}|jksk260$u~rv|7gqE%*rZ>q0W*Ki{4sLLhMhwZ@r}^n2fRPy@Tr1MpbVG zQAie{L^2`s^p6VcfA8j+_8BL~VyNoGBH`poo==E#9v9PupKX+T`TCk90Qk!gwpjpl zZtiUs2a>~F5$^?W2>Spi+@5+i1{}808-2Ytlai##-N-g+mB2s*l{^i7C4_`&(KRH7 zAy%VRkE%Afb9>^KNrUUZrA7-GEVcY`(`BI${>~W^nj3Y76_^ecWf;LIl&Q*Owt-~0 z$r<*?6IJW%L!Q71shY4TKorlAEm$U4N6hU9D(^0hXxQmt5<>Of@oME9xY-?_A!4Eg zDm#=?CB(1_EZ&gzBq>)^kN1q(2X5MvGF@I z7p=#EDGRn~@eQ9IK0c34-`el5c`QAHO+>T&u?+R!n!gMV>)AYnpME}$_>1_%|w3zM&&WUHq?%fL7v2Wb;A#C!F%bjEoPci%8#C2AU&~& z3x0pJEvI&qRx)M#E7IZecj1o(!Wy`xNJu~tWKNqb|4g82W@(8iLtU;>rp zPLR`%_V1*@f}nny{p3z1nF0a*bwH9_;bRS53+$TnUsWpnEbp)*=8wipmc~kL@o^xP zb3A%@#+(6Yf;KGSsvqwj&ofa^MIkjEQek{2RvRhKG4D4rd$|3fwe4$f038QujZ>$g z1kB6I+E4Ywlmc?Uyzi#*snd5iw4I?)0<9gbnjAnazn{;QN^6*UUtUYUv#IcCkdnXu zssF@R%m$y4M_gWlD=!8dWHM2YL+Ii!CtYzwm-ovD$Q{k_m`oe_3Hkzs(){jIr-f!} zjY{TYbGcJr3Iw~XhO9GGWfoMe>=72N!0roDbH15*0b7Ys?pB`&t|glpzGpk*fGMLd zzqb#{lj=!bx~%1&i7wdOi4cUSv3mju1yV_%yJ`C%ijbS1U+dRBpI03f9im;r`thZI zb0d!9X1yy%p8Ke&`cdNahh+WfJDb>z;)x-3e4(8e0- z=KMV31fU#Cn)g%K0tPbWasR1Tr>hMGQNb8nRYLH8`>4vYfR0&jru3-tpz7UAv@vn8 zHetyZXeY};F*Xt^HaN-k%W1ta9>(DA>z`4^((tI!m|ABWF%Vjummk*T6M$eHCM1%g zT0fc(=vb%cUU$$koqJ}drY^RSYs%Wqd&3-^0a87cim^tdRZ)L`P5{+I-v!Q-lww79AaAjG> z3}Q{dGH}hdVr4?ppJJ0o(?5h^?Lo|n$x2xj(fE2hPv|m6lZt8|qG}ubFc0_0z}jpD zg_XWQ5VGuaHz?fUZvin}L?LRd_aQsj3utV-|7ik=PS(;i#Q+aWT@({OgOTV%1JC=Y z7ileO>~d0oP$F%_J@AjUPM3RPNoCxqTt6}JuLO_wV5NN3xJSbrE6=t&Lyhf!z=i;U z#j~5|DO@QiRX<0#=l*d>j6TqdSHfzoM`{>=GYp{!`>SM|Fze`UN!~X?0TLRp5t)*k zKz0Td^lLEhBG3$SLObC%S)%QeYGgm3>75vSY>Oa5p#JvdWV6(=ufl2%8B76ap}T( zU(q4kSWq`mM}E)25sFl(7#=kOpk{&Y)n-OuqH-lCLvBjzTDBos-jILkXfr;VY+**7 z+`sTDIas&1yRh97f0cQE@OYxZ`m9nqpACRNHg?rtmVnb_rGj8jqT&OrikD^q7?HK}dmv^d8 zq|=POV{XWO?JfZN_;DyRuIwKK5YY}q@HH;t(zGWK1}yYHDc&sc_(SbegK&T5isqNf z7H#GiTfxKlpy7TMbHY9IGSRga1?a;h-3fCW?mb(}n?;FW#?&XU%PST?3BssFVE$M% zlJ&=0Lr{CrvuE`~65IZ%9sF~{3ZkO{2fVt5oHiZ2YQs<{i`p$A%U?Qv-y`eohnYQX zFhKb8N2@8K8XI(|-nOwW6iM6}>0g66h@aEi&=VJkEG{$5JziOn{V3YoT%<_{6mi6X z4ym*dEX;uTpJ)(b6~cZn&pf|63G(FFSZaf$qDDYRuv>hYSm9G=VPo-7vUaDW4r*I@p0Dx)S{p>!F*tlitw5 zn=U|$1sX4cAQDPr!YO%0ib4@6?-a{Olo5^Sddtm`E5q7DVs?~v-?#ulrv)skGtP+e;zAYW7dWYiigz>?lW(Q=0Zhir3 zf_0?&YCtxSEsRUf2B8t*yQqHNcLP-cUp>028^8+ydlcE6vN9?R(xiCJ;BklPjJ_k3r!zfEp!Lom zontK(fxnF-?WgZwT?OE7cIky-r0Lnd{rNt&rDm^$ziv2h|v)}9c)8eHG6G{r3$Cs1qo1;a8FyCAJ%0NRIEtE&L zpqJVQ&B70GFi({zN$%g2_DE;qnfMVVuUpDnz`PC;W2k(cB0MxMo7?k?n-wnPVBfco zv8aPkk{5i0oA>spi=Uj`IqNHD;uOCacei^poS!E z15*CspZr>aj-4OS=1L&-kb@X_&yGs>RrK3YurKV>+0At@4yJ`McCl35y{M)XJcdD5 z5A_=WxWjFX+LXr_;wjs!`O2( z$*1)N?Jx7Sx=rn@y~E!{scpKfbWvy?;T^ah@}_>A)T>;uNeHtr&oe<6jYnp~>FVPB zv4Lj^v(~DX_XNGHenux-DU8qc6EaW-jy;}$8aHC)waH{_w@{1ir581EehPVCWc8Qx8Lwvy1Rg_b{4zSE&~MEFX-qmjXXZm8LYZD7)r?bKUYFil8kN| zoc-zEJl9B>Z5M?LrKXZu(@&Snmdy`$0^U7(C zg*Jt29O{c}kmcyyb05n#66gt3_sHvF!f%5orYto1H|(aIyP)=|0&|lQdDrN?$&fZQ zy5aqGy|CE`-_jrcVPkbI2LI>0fD-#6`4%$j9F3pn}Pv!vtu5pa* zxgb65eH6;Zdeuh29aU4ylh~HOBU}E=*2lXcRENUR zS)Rz!o}O6eI9U6-sR7@_7P~ngJQ1V&`zmkR0v&;#qWva==4AEsUZWgSA0e|H$5_s< z{oTQBkwOJPF?zf|ICFq5-n$|oEs5dFm)>U3LI}4hLWZx^d7HfL*tfBi$!%k8rbn9k z8bFK;)(Qfp5C2&yc-`ik4Y9J+b*re%U8R4*KvkvGZM2n>A`4_s(`x0JCm?up7f^{JI}mocJfhM5;Sgi|Cg0;tX6IWYOejmSBeBEaUnVR`#J2ZHE&?vaAQQ?!Dv!Zvl z!n~RZ7;Xcb#55}i$vZy-)ECZCP#ffCSbmMRvGGm?JAp}L;lyJMObxhX#Kk1SML9At zqD(CjXOH$+V*=Qz(3%lYaI|``QNF&AslgpnXOY^_TjCK|fSbE|by*Ps?qGd_7%LE` za`A(paE&KH43VC){zc!!C*fQwNoMncg5GNn7u8Gk;_(amJ?W&;Qh7bwq@R|QthU*+ zcibOdFP|V2WsWUb!Q(>nx9=i27Fm0e#Mx$Zx{X&>Gpyn}fsAl{Nf=-gx3RZ3&;1Tz zr=I%|Y#>7!CdW6o_j_F;4^Tq@7x`oAcBlvIQ#DV4 zl@&MskoUFNQ(Pb)po>AUWvMebI3a5z*UlVA?px&kfVbxcDd91-|Cg4@n;$AeYw^L zRYAqAOuH21B4AI@#q;~?aOg9FxjL2xZ#1P~kSl+b_B6J|1chZC43NoYzqC-W>)qOI zk!B?Mlah74zEdv+fe*#pPGw6r%`3!TQH8fNz5jyrgdPJO={#7bT>|^U5dGZ9&drb3$`}OfQ4Jd`e?!rM#h5Z!T5*zs4r8v%Bj=Nt>9|$ z{@^0p7M-rC%}FM8D!>L84HrTcCfB^hU;o!Bvrdd%ylZLG1=a7f)^{p_mH@>i zX@ycOUR9j_P&=*$s6)qm3KvnwWiHra+{eR-!~&Oc4z)S$RXZ}Lflin^vvSd-j~7Qp zXxbTx;;1!R-`omJR^R3O;|F~!KJ{TwJIhjAZ&xCKy*barHo&oyZzoBT%>>caH&OW9 z%#T!Zr(K86$TGo5caody%z}~9a#zdHjJxX+BHJP_x-*^6L(@|+;3rZP%62VpsWJ;W zVwh#|2!@utj;iG=qDThXADQaxg=+}7B=x97wr#|Tj!{brNH|?XSPUN-@`;t%s`@)` z(YB~7RbSfxRKRnsxxwoQ?t3$DpO(s@VUuNil9Zq`NZlV8-wg8DuSj2<^TtqwehIGDkJ1e7Y z8rXC?cgXY}wj8^lwjw64yF1NJVplSkcs$$4>-GCunxBDNx=aeK|~gHweG zwS-UC5CnGFX2o1`z6Pa`E@OVVrc|A&`;y95lHn5FrUONUxr%n~0}GS!Kzdbc&C}=0 zgf(B-EPz(hdOcn1FGATFz+fE9_WHP8;6VLI~n!Q_EL5+NoA^@7KKl$$CtQhTq*mQu~$yp@l(rS z1-dK-OTtXiHcqcBbX<1mYI}gJRr>vmaH4c;Jrd3I%i z5RqLjF?Ksea-}t9!ak_Bcd4_%TaBG>s=4M4h~xE%2AlyiwDk< zfo&xCr~LuG8e=-W$Uw-+e15C~&UVm5uj(<#OR6tfL*3P~UpBpY zA^wSuy+0i>7BKd3uwxU^UCQ2j3RyDVoSAW}-F7Cvnm)7W(zm;!W3L>B<{F=_WvVG^LR}*+c!zq}CjGyE zaJK+1`fdm@FVdbPrvSW`= z*l_sGOPW{{&F;$ZSy6Jc?Pt0o922Vj;_Y$*QQ)#N6TE-skI8I^%2L@Uu;XzXWusJ) zeXHGiFzLI@2HE1WDgb+wFS{ylg;b=8VTwxKhI3gQ!r#SHm|nuKnKm%VbVa>Z39*9D zB>mxoo^Ec3s)gTf)ZQp5z!Hy0Bk~lpIrvd;CLw6rsBE8NF7@cz?1X{Pn~ob7`S}bC zeYHzH6jD67V9NuX&f(Y_MmTgtTgCUBcalNL^pr^Ny>SB`AD~aGW+My zFD9rOkM#iH;G#bi((xb86F`)plA8*jpf*kN6`A-mo2N~giG=oq4Ve;^PJQ?av zZS?YRZ68WcE?cq;P^A7uE4_@NWr5$l-07h!h_glt=*>oDN@;L|X@(D1Zf!7MD8-v| zGLjvt>+|o8Hd3U^TA^|n;NTW$Qf1Z2PpzjDq4$O2i#tQTnC$_(mYnz%!hY)f(diq4 z-WK>{2iaUDfW~snP6xa@*|jR*|cAjqkYt=8c`yo8cdY>xoR?+EV5AATaSoQ=(UA55>ozO zXOIMba)2-Taeohz&=*26L_EF5$2afY6pjS4H1lsRZpS6xFn>o-8_^cj98bWNn$ld~ zh6eVTWym2530r?JQiO$Ov2Eb@d+_kMkG1c5yME3_9Sc3)GDOLcyDlLn=G?JpRh7vv zoLbfK$v@3M>sGOAjM4M%)7@9W&!&Bl_fQD)sPfEYQZ4do0{4RLXtpoVfKfh@5@(au9PmR^<_Xdw$rm54|VJYiu_@=>62* zytM4k9^PjUe=x)DC=M@WYTwE_y$-zG4cT`;$NXtW?toK8s)J=i)PjtiwciW8fdI{5 zW!=&qN|og+wq}f+d$c8vp4(b;cf%G?A&jlQuKHw#-P$qY8-81k{ZI4s!zFE(Cn52}LA-C&`TY@!(tSaY$FD`IVSWHLg}*p0 zU0)l7t@tdObvLr^_-90isDP$JXz3P*VJy!%xmfJWLJ<^57?^bgd5xN2Wm=0gq|if&&fevW7aeBA7{ue#-w8EFfW*6^o@a433N)Rz(m!C1M-F>m$j z%n#hG1~P5iMKF4pe2I}Yc?2L*VpbelO{1)B+@x<0MO@SLD;>r+9!qkPf;G%05HQJP z)i9m3y;bMynAU}7vmhg4);!>&{_d?BsOBA*M=YjqJ1cKBxDe_ZCpUw4S|JZ9&v@Ko z%P}P(X6!dhCn6Ssz*DdbQC~pVhrXYgzbwF!fg19#qv)c#G2*I^9^A@jMNg{9`PrAx zj`I5)TZ|ce@v{d_Uy@ABH(oc4Phcq<##XSZB$?QUFD;w!fLQOIgD}vS;8!DrH{-~5Nz zyq586)*bq$#FNC{c?B6tI{xIT1+{|8M#4$lNE^4^ytKQ|{tnruDjkPUqs)~j`4!z@E` z(eVbc-_Vv=#5LrgEpRfws2#X`tGg6p89X=W%$Ov^AO(L|o=evfd_>4&~q=d9-RBTW^O7?sV-F^3D zHx5<+v*Y%B=14k@83g?7qWd=PM9#X%5SJQ1z*m{c1$*>zCceyvF<=oP?5l(b?ZSRx zd{KMqC_7{z(#o@!*VrbfYC1I|vl3Ub8%Z6tB=ut`P9gwZ*U!CL2@Ar68cFXI`w=yM zfuSxnMb&<)>r>{u$v}5NRafyJ-96O?HKl$Z%k9&rbLT4d1t_4c96rH|qSn4$_eIqB z;jlGSa66kK^-y>i~ zSbcHAcrZ)CsdX${s$>poS{epr3D$Q1Y+xlaJ%lATE-I+3eEn0bg8t34xJlEx!JN1y zx!reAwtFm5=>oWjJlaK#8)Zm$-gbTX*sGh|B{x}|AuBUywpL`WcN}ES`he1r-)r@y zW{OJ#sLp{1yTPd8Ajc>~i(I6BG`bK;kenBHFT)M5dT`jDF+bCq^`n~l4cl&!A2`~K zD;jduY_pnUhPkYhvUk7IW9)y-n!Z(|EJr&{mB z>GxwS6Q@cS9{Yn$=inbY*5mt8m&}OZjq2mu^?G3@#i!QAEc~o>37LA<6U%If-6{3i zv81+CG}Rsob)k(FfmOkYyf2Sl!6{}!+zSBJ^$lrS1K2SB@1*Y^TdB`or-M+kr+rU+ znrQ&sG7jcZjgKATTvS0scXMW;Ei~+bcW?vzc2!7|b576fSzz5{PR~&m6h-Q$8@PH@ zxt3d7eGfQ$7cm5tgN<&4(`vJk%O9?}gr(pvn9LI!i_MXV5E!a-Tzo$GiiYV-qyqYc zz_!W_C~XrJ&}1gYWr5_%A95a5@^Rf$>qj6DB3l>QBO_`@M0wO1^ZV*nfP0H`Xk;y} zpmdU1DTtcJ0|8;5A5k;rhx;WN`hkf5#xERds#yrXj0{3sog1RrZMBp?{RLTs^xe7 z_K^3UJzH*iIM=ay)bmFOhl#yR($IxkH5R}Z&=CanR1v0C5f3Ec-}p*mB_?G|%!q88x{rkmQikY@eeMecma z6a*1#Q~ly?uE3oLuDBaM|BJ?(olGsfkHOI_$`cHkP^V$#ZC))3b0X-1MP@l)If~2V z@7*#V@Ap|biL}jMWEDt+ zlF^J8O@F_~$`?_7o@9Yagt*(d|7}5|c6`uu>&s)m&vX1L(9I&uSIw-`*>HLs;T$1_ zctw6+nDGG6Zh*&m{`5WsbPI%yv;(K>K^KIM!M}$8^2APYXRbuX5Ie&)8+$Zg8b^fQ zVPS{em5o#-!BF=}dM)0icWDW)D|hn=g`a2(c1v{ejU>sgqYDY4e~R4e+qPC^d!yIZ zeJji~-*OhcE9onS;-E5rypRI-Zb($nw8yfVCay#2m|S zK8a)@dUPc%mL!%vIs~4Hnj4r|?_t5KKovY6g~480LVd|UHZtE-@6bw8E2zYOgvB9w zAxM_7N`Wtu_z8_fw9VVEs^h4yrvJ)M@#T>SnJ z1owc!afO#%@Ocaq>LuwMc5>CTsI@rN&VV@j{i`Rdr+b(0P*lSzg%8;EV{`RhaOz~R zP7_dV+K2zrx{lFSXWZ)7#o*FBv+pD^A;;*QTUbT7xJAcv|TDz=V>7 zwA(DFYpmH_-r&5bsh(Ac_{ey=K@S|^xTgy5trs8rF>z?FV2i&Jzh7@10BZ#1Id&PY z@@zi2CXU4Bcsdvwm-|&df7^tKTzWdi#(~jw0w&!@CVlsep>O!3>euFYvN-2Q0r4i* zC%SD$On1fEO5IrvBMB7=`wuytS-Y(85$~oGXV9Ca{%<;mv`a|(-ihdR%|8c%=*t*U zqP_@b!+2#iT$UvZPO)yO7A9)si^okc&q;Ji3Zk4^-YmwqB3HNPf_&TzbvLXCO9Az+ zYs;MKQ%|C!%3J+teWeeorPU_;$(6yf)9QBDwcq6woRW&m2a|hF;eYY6 zseQ)FqR(BPJC~zw?O)%FUFsce0Y)+jnRm$+VcdXe31&9(svgwO;hg&|xdi#tAiDc9 z_z%=4$bTKLH^gARuDZ6=fqBCSwvsoHNct=tg+iMer7$CXy~2o;i{fy&6Uk-Q45G4b z0^;t;lk-PaO3}ODC?)GV|2!b$XV`wz^#AHqpnun?fd9x-P5$RRRn@=pRL%cgp6Xw8 zDuL|(vrgstk4}aCp;P_uJk{d=B~NAjpYT-w9i2*0c<@7~0{$1Cs_}>Qul7Pqq3Vc&fn9b3?G)pJC}*aU6~&Zg(}~&=|^i;)8Lo$B!wG z&Eyj2j(a_YT)!_Zoc!REYmLq@{@NI(lUjS#;70Wi{PizWoBX{BaSiv#ZbB=o)Y_N8 z3hT`0?@=XVHHELOhoQ-F{;Qt>stZl&Z8?x+la;e`AD$Br1xl_uMY_Nj$-Y3_je6(+ zlev7XFn`4ryZQD#Rwjq28*>lxID=uH&1-GahdJ zUTDGqBbIn;7G>+`+({{Ey=UW(q+g<*OG{th3=o}YEIXevmDKk{lJ(n?33fHp z%iVHpu6HXDd#b?gOtR)Jp5`6VyO3d?=Zp!$+ndTKt@UQ5plTySCz}61bSmKgZ=UMl zAD&9*|DaRx{ck!I@L%v$S^p1D)%d8sHDO7n>)p*d z->0YLC!lL^V#e*+yLLiB=C(|#1vPJao&5dN-fAk zSDxgoM5F1@lB7)?O^x#09LIX9?owC^L1ksV4LE3RX=&->2$>*BJK$QOy-(8)$v5BL z5mjj(^u+VMQazuq8`?H8yn8LyGd%X}LgsRxCFgo|?u5F*Jt;op9SQm9iKsLm<}Gkv z;=kKrwpeM^DJYSPa+Oi> zb~YZk%2ijMTiXaWZfsb`ErRCG;8dJ+O(7TW@%DJNufpY+xlTI<(ZpSru^3W8?gmiI zOj~$=uC|%BuFYQt&OrxHXycwhR&~-w7`ovP?(EC^dhxI-Ak;|Ptp^kA(J!&;8Ga!Q))6jcLW%T=999vhoS>h6LV$( z6pg7yQY7*<#oQPtRwwc`3Dw*^U4or(I_1SVHz7MT81Y1t|A`v$ja6nZYRkR1J>F;d|xtj*u}-RgYEW>skCnp;FbEw5PLJ*axY@$F`c)p48Rh1aFo2<_|^|V7BhM*quM)m80`# zAbkAqo(36~ia&l&pu)T_$d!dq2XwruOHbyXp2iA)=P@-+ zw0vnV@m!z;427~1_{tQiC%rY!LK-tyJ*$cx8U3_&VNcr;cADZ*`lE&9`ZmwU@9}x| zHz0=Wv3Z{QypV_Hh}L&z`N>DeRwx9~iLy4P7cWnJH?ub!l^(cG$?_|^r!5TEs}}c< zYKY%s!roh?K=Lyz$Wq5rH0^NZQY)C+E`Cck_Z^(&hZv&C=XUZmUA=VO;X#v}yQ`ne z7*Y+#PB!@=NjA1aYb@zTUmcnw?EiSqzA9P)ZCXssX=!}iLd%JFw zff6NHnSj6!4QWLeTf;D~w3EFOC)X9S4xe%4T~l&6raf86YOB08W_yg<5&o)}j_x7B zBxV!zL%&KV_|$m9+G~Y)h&v^A1q?|6LG>^uyX7DFYY7r z7X@aXdRfLd+THW^DT%roKi+B_dtoDNyv5>`1B`P7yYARIMGpbg`S+(VZ&4 zoN9;0)2zs{SDiCZWQ`t<(oE`P(fKC$(l(TBUEjL`AybxVOlg{R;u3NakrPKIx2x@2 z9>N-mcCvh0!BVJ;A?A{s`IZ7{~p%>GgP^!*PtehkvtKNq=596SwbhcErE>mgF}ay+%K z(6~y?%xH1(H9wz;nc#d_R>Bz!bUX8IySOdb3T5$e2GuUGP=ITKxTRT1!6!jl(yTlP zoLL<&MG)`jbPo5RbZJ&*0J^>eNBG>BZm-lUmbsjC>m&p#&UK&*4EF4quv%|Awp;VU zbmohr|Lw{sWG?x={to@M}W7Ow1OIdqyR2uHb!_;r}X{XF?w z|Mi#qU*&fu0-E;EQODmyhe&RylP_2dnc-06&?PKxcxm(f04oAI+xCgJZj^=&c=F-n zUpT8J!nR@CJayu&tUc_BH*;%#B?O9%yF_CfQL#Nz=-fWX33g*QD|>pX*d)8q2!p1c zn$~ED`encUjk@4>55Valf0ER{ab!7ub?ODJbsV&sEFvRo!lCbNyo3Mf&(8kWjKYWv zD?TJRH)vO$l?({`r&szKB&PHU`%iqkSMH688g(}FLwDLg<*w4VUVOyh z@8W@V@b?4MAm?@TvyU=uW`5d=@XkFluJ^!q-z7`>3hvRF_53dfzaBfGslf_nR!bUL zN*WuUg*V*ZmtSiUb}AQpWi2z;AZaKOJ)EdIz@IO!4*>gik{Ht6x90aV#g3_tuW#YX z`|bq}8u$l^T%!~}8ov$4R`bV+USHMAU)OJODu}~>38=VSKQk0Q_j@={5`Nozt?oEE zw!A;bp`Ca61qwvVsYt5$RGb7^-a0h=EtdGM-5-@$!m7YN*0APkc4B96f8oP) zO7-SruPERPiutSjWYq$?2iA}rm+QhJ}2<-*f-hz zqFSk4pT9NqgJB$}0REYngQUXEZfKSGEp_fd%@Fteua>x9$PMALa1mGPKL77iM1H+!p=X@w77JUffg{3|G473hBuwM9V$;F1v_0$z zygdf=mx(I~VniF)lh&+Eh461_xCu@8=WUceMMFArT_HCDKOiaddz#lR<+CX8?L`=% z@s2#l#8(wa*cf~WT95W|5zF=1vj(yZfH>3>D*eQ?KEHLB=;^a{oBpX zNN*n`R@&J`B^55jEt&VpBi2|lFspCom-isB57$R5%yDPQGl=LtM+Cb|bOy6Ag@(lz z{FUa^O{yc=zs=VaHo7me)Kx&Qxwc;rP6-m@K`fOsfq#H|2TK8#S80eDO0Dar$JHOq>j` zo3dK;8KP1wT*elI5E9{R$V~=W z<-9zh>LEw9H9QwirRq+C{(v1A6%JAy!3lL07cPh;oAn0NA?~~s#xc@Mibze+NO}VI zX{C1W=jbI#=i;ne%)2CxWM|3SLdF`P0{g2^dt>=_GHrI2NcxQZ?3Y;ucqi8w*h!7% zD9_~r!c17BrLQXmT$*B1{j7}oE`ebT2-M*Vu6A2l+9%tcUvr&ap=OelZ*bo>MLa|s z`+c$9=D!Hv#~tJH7va<8o34alcHcJS^XSQ)m8Pw}Hb7z>M?5BIEbanezF!6aJT-Lw zcRJsxr@J74Ok#r_CRFeYIZf0(s@6THsE_|aXQro!UO&Cd6=-sGrY3_C6HF6q`6&bV`actSvZr)Z+-&B$tRF0_t^adHzkVr?Q zrrKnrgWwJNGA(-P_*pyuYk@L`76p#%AqmVPLOw#ua%&!0F1k-iC@Mj{Mt^p3cR3~g z;9G51?Ww8ygpqe(bu8hJt4mY__eZAB(bBI5TY_)$v|OmFmMEW0zg;VOQxej|*xNpz zuTF5HwMn$!4gVTjnJBLZG*C4L+>7-W?Vv%vDf@QInMTz8JaYAU80$N$%bWC-YRpQO z2dzsuNotX9w*I{8p8VB+ny`JoofUNsUwdyD6xwT6r0LAxV^-sJGnmVEM)ZZ5jpcP> zEZ{A>F^*vVY$3WoKsj(v>d>G;L+s9Hz~9{9(>b28Mi2PP-fwOTsC-ekHK{xo?sz}m zkehbMJMyTDS9E#m@80NIki*`0T9Rvf4j27Wv~Twrqi}O%7M!EQCi-*&%GA>N^2S(K zU_*43tCw6Ef={*l3KLF48(pnP?Y7|?V+~ZTY@1V(a8iy*+T-cN=n<8Zug(RxtnO|a zqm9RUys6%2ouXDWz|og+ZY_vomwuIGT5e{^QJ{PDA$bu{t0(5XV!Ryba$9NITSg#m z+$?~5T0+X43ly79w?{f)KOm2=X7F&l)02lEGUMX=-acqJIni{zh4*=$Nx{?zqFD-z zoT7vLLDI{x)jyLJ+2g&k@px`$^ekhoLU>+xvv}XH@9t-V(aJM_EXwk8r&~4-SAEq^ zDfPX+zbO5{FeydD(5mj82@_pY3KHnIbQ>+a)6KY*Es7?;dSCDEH+ksA=32suWCj7i z6pmcuPxrMb{}BYBxKYx^EE8*InasQV)RpzP4l}#G=$z4?7dYb;c@I2+ZJ25)r_HNoC`6K-6vf_ETZ?_FXrw6A;xNt%wgzb z$|V`BadXP1j5x9na$S!N^+DFw`HDwcBI$I}qa~z@{6nX2v(@d@9|wrig?(S}(q3Jb zU$4VebF=qm>&Y?uF;y)nTk-}U*v(u*R<<~eJtTzzqxWUt=@`qhl}y$`76@zrL4V!X zzMUM-{b5BzN|g1@$z$Ku+t#Nd7C#g3m|~Bjl0ErJ)RuXrun1(qR%Yw74+Dp}W;b0s z=Y-$XXIBH>?*B>btmKlj_>^lil;972bFAdy>?VVdAAHQD8E7ce-JgnANHQF(n;_Fu zU}2LoKhkVdy?|?Vc=N&U0XPdi?|Sdz6Jqi`_c-dH-1G>TEN`woCz$kLmUv}UU?`t) zXUg~BtL{WHepF>LOds_g+8^8V%Jtx-E~ZhU8B!G-y*Esp1nq>*g;X2%d-XQbjgrLZ zC(`OUM-2T{J_dyr`pHssx+dutZfqWi+Pj=E5;=~z>PlcXaxL?x03Nbt^|eRJr-|Yj zPi9>fc{UMI`Cfr3OFk$S&g+~AA0lj01;@z#-GLMLo*PqRYiXouBIEJ!pNJ~VUUWJJ z3{&iV`ag`H=srmnI@Ph*(!k6{SoDx3r;J?QatpsduEYY>Vp{uyK7~Vb?nT=JLV0(Q z2l_O{ArKC~NnyUJ0%@&a&LmeN*)ynqhW{OI+PhZt6VDNUKbRf8B3CKuByUXgMoS57vL} zZu3DD%xi@29wtPG=i)r3{4E7eP2WXeR_5!F%cOkAz)~fAQ-eS6sA{=YR))l$Ycf(5 z?IVz)k~@|UcwO+9Xh4v3MwvUaBvQ{?J1g9s!nckDxCS}zhY2=S$YU2!*F}`f*rR1y{t^I37Wr++9Ke!d?FgBzeulHj`Ss9*$%_KA*7+iUz zTz5$Csj#ofXy7sSFiyQ0%)F=ge^9AOZIo`Y|Dc-~A^+iy<|R);CPilmR4bPZnFKeB zYOKit;-#}j_XqJ=5cZEH95i-Td$sq9YHc#Ae2X2bH=T7AghqUVG57J>KW$aa9G@{N zr6Zr6B^fq7w6aUg6C5TATO&Ogx^Mq89 z9vk9^pg6qQM;+J{iYZ_=COSmUmi{c-k)~EH<`=1r)ED!Vu|Xro)41@=7#H=Wse;T8 zsJOs05=)t5JQ1On)job8gc@`vcmWIHMAV@$t!n-?+RR{r)yfK%nE+l9faPE{M|0tc zldO>&17oHUGKh{#VEv0BrMkISBH9_jJju~yfJgt?tedl(Dhp~7GoI>BXbrnQWY}s( zb}e`X-tJ@h{QLYY!VFW)iFwg)X6l>)7*106Oq2+I;iL{AWJJ|zaCvr0C!jM~o(sA_ z!nwuV`6UYba>GgSxJUdLl)Ohds-c3~ysz;KNm3-{+`!o4!04AFWxuO&V$-%ABsQI~ zauS#l^!9Sc>DI!dlY^QCZN#`hX84U~=wFA;wFZ@$Q|J~lq`k~l_9|&dx@`9dz`s5n zC-j&4mnoX0Dde4lAG%{^Jl_$;kG|@NHH`4l(Cnzd8qhQ0iYL^~={q7rbV)zX(B3xuJf|#f)s;uvZ?jZ= zO^3F*Z^!3*agc7>ly|uXri?5wkLd+8a!SpsaJyh-kbWwX8%&>jjjYV|yRmOVJ;o+z!PG( z5FXj%0H*XYUhM7tqpt8w^!f{-WF zU~asmM*I^5+bC_{1@AA#KiKHKX!MulA$xUCjuYi}f-plesnj=xTJmw7yPwaX>;2W?+Nt;*bj zrM0Xnc7@hz-t-s$VmD8|l0&ex^mPsBtbMhoU`etgBSb@Jt=Gqfx5vphLTvyzFpW&c z{vhJ44>Bb&y-w$Zh2su=wYlg;S~cE7OGc?jI}ThL&OE9?dxq}!iz4STCakaRIc5=O zG&Wm8u(7eCGp_`o`tinyhXCPaAY{;(tIY zb`fl)q3dX^ZEHxq z3%*BJjDKy6>(J=l(mZk>;()zIdA%Z*F3C^H9I;zArWWsChR zl>0@aOt2>|`r$rCj`A^b)Z;+yuuht7wyT7&dq!D_A$t>SE)Sx>5{dqjs!nge_AGV3 zOGC?NyR|#hvr6|B6z7q*qB6p^?^$*(I|`z`1=LC6&XXmsvoKVqZHU$Mt3iuclC`yt zQ{~qe%c{K(Y#n#`x&ULJwQ|gorw39_vl@YcW{vA4mi?OZKrMg8DW?TmmFuKBXhBeO zz%g=O(wF~!mA&rxUD0EW&52dqqbTS0qdS2&=-Xm#beH@Quj36tR28_+GVBs^ z)nw(i?YG+8UZW_n91%4deckVVfC+qIxeu1D4`(ldVYI_8fl4Hj&aSl&=ga}Hx-Ic< zK_fDZu0*h`1#>HLKQA{Q*F#L`2t*Hoz4lALeRb&*$8|O3hcL?{XHI79M6>uzTyF5MUTL_1SM3OOyV7PR8?swdmU_s33~F%>c?5RIq9(rUmlX1mie( z%{eewo?eojCX$Q^cg%l5=cfI3h!s7Mz~t+#gZ}G@Hmb-UL~lyE%%ZW^hIZC)!DFTJ zm`*<<-Y^`h+@THE<57!eK%$V}MFFh%a?l)sk8TT@tI-oGuc35nr~? zxW^l7!xm9%Rm)htP1LZema+J}HFNc16|<|^iMq~Q?=&mkO&pQ)1S?9IJ6>)dHwc&j zXNQvtXefJi5K=cUA*GY}pH!)Xdj~*52@DHk2`VW9`}|Ex zmc?!?5psjl8yGYK3Kr9Tg*6kCN7znPN&k>htpft^!}Lf25X|!d(KRbjNvJ-!wiUYc z=3(?$X}Okvr%Pw}#+;#2V+~O7Kr0U{=)f#3p5DM@xpwg<9KWG*>^ho&!OifbO&&Ut zKHPHN-H^+B*yU=%KGla{4alCq%d9@emK8$MQ;iFnZ)oNifxSq`4(n+CSVvu2CqMX+ zN_cmherdnKQXj?&x^+-x_}n1%*ouM2>sfw4P}7~$>t)&-2r(EvuAYh~wVgGnRzUgf zqV9sQiD)SdG=Jr>qqG(mQYbFFv5nZ9C3+S96DFU0F&!y1(tGYDx~)A~p33h;}2 zBoL7k?zs-KDaQlu%I2a=RQ%t+7>GhAC^jFF3DqKHxg8EfDct({AVeHX(q)=E%owr{ z->r@}=zAXoL+B}V_CB@CIp%)B&x^{@=opdhA<^^T)@!jJ_@WD;*rNoKMWDgIZpg}V zGV`KoT`Q!YAA{dIyr@X2W*=`5_GI#BP9Q$xrCIuVs`ehBx#sgv0p1&3BP$3G6eZ#` zGpUx7mPJ*mD}aML8h!~BGyAGlYR%2MYSXSrBeuq!`h_zazZ2>NvTY-_+aUP^6a^^s zdP9qI_5O29onko$Fbzu~Lkc^*irFYf{D8Vg5 zPhN4W(6hjC+aThDan8?L&FAI9pQK`+lL^LO3Gy;odOPmg_WCfN{4&1?N$ez-dAB35 z(MwkllHBn}7etCHL~QQmN3ZSEc*t5sC6q5V>ec0yuMK~-@dzBq*iiZ$z3`-%z}piB zqcjo1WIEnFuMxm7&>gaT#pu%~;I(&*uev26B0mCnSLVG!!D00EMpsvY?JFRB<>>RY z%y0I|e;nm~CswbdG#uB=-?h=*cqSEIH88u{E|B<1Z@LF9-PL%@_{acN=k4t)(Sd{< z!3{gOs5GMFpRF}k{DQc0oq2iHGI!ax; zJGvSG@l`ai6#L2HXu359=Sv(cFpQxy^N<_QOXR^(-N|+#{aVl!E#9DJ%rT}Atu^&GjOSDf>26CkY`T9CG9|@KXdQxMZg&~M8ZobH#_RK#`;9lj5&_?GtAqiVC`PA!A}Vhr z;#9dI&e#BdnOQGi;G?YW{3S;B{v=?_#y3*OkI2LaL5IVJwZ@+80=Vyfk?2JEgJ{|NGRzz2{}g3JutU766x@Q2Xxxn=XGm}FJ_YY%~};W zN?4Id+z~)G_{$_L>7Z6+zwO)J=_0pmgNyr)fBOrCU3ZtGLPL^#c{-LjF67`k2QI`H zyrIYp3|gMzr@NJ_yZdIK+xFagEWGF|fiI*{lyuGL@F`piU<&}xkEbjAs9w*H!uIrB zyXnjCX9v#)D&*GaiCa+LLxXS(c#G4}%P-nmh){I&J-b|c!5T#OF^Yo4$;MA=J!pB^*YZ}{EMx&x0Z!f_jhi_O5BrTXmZl14Wm zpm75H!CnQxnmKLW{s=Y;ZNHuhtSQ~E5?iz=_IW=b4?A>pvTvEK?Qis*Pu?@XxB0#v zn=1LEA$B6A%3movPWXb~;00$5*=Rg%MP)6KdSYT0Tni&M#xYuI;DtVkc>Si=asc zcSHl9GgJzhe%DxSnqmai2wDc9hs_wZ9-&6u4+<6dJHU29^F}9M%;hKXWDV3j1?lD_g(P z5)Z^h7GTc0Y|4J^p7P&yTo{c^Dm#>Dgt8YP8FYTHifZtf|DuyT|1Devjs43e9PAIK zr|d&756Sa&W_xEGSg7iQ2QU*CmVR6G5|4!@cXyJZRZ+?#6&`9tyY@%$+yO4rDakjW z?F-Mgk{n~0T=;lu{Ws{pYI1{#q*w=a#imiPGH~->N95|Y?nGw3L%Ir;EUtEZvRgh` z#*_8xEmz+(+(h(%d^d`tx(vC7L&C$PRjGLbTayVI-2_W)OrcIEnBQJ>uhEL(42SOn5mmR?h zev1FL{vu>YK=Dh9oCn$wsV~{)MoV@jW3hIyVt_PB)q^>4dk#GZ+hiw8$TlcKUjD*P z#gU~Sz8veBh-V;`Y*}kyz?*jfNo8ENY(i^~#sJ;HJDIZ=HJ4%03~bE%88c}Ch*_cq zh2)$pxgH9cvSkw_vjuxEJZGME^uXTmnz(F{!6K}&_-g6tU|2_;hIF|G>{_beDIl_& zk)E)n_Wi_qChi%rX=4kCZJigV&2N1~Rl4_Bp4|e(Rr5D9$dw}z z2dS`)S<17bDugJ*Z{n6(FFkT1oA{KjU zfra)5>L)fUG^Q*#beOO zK7Zr6>AfB1=lUT-i3&##luA-lW;HMJUZ3Wn-7Sz=n>jN+6Jdd{!`hNIjay8vKHu5% z{`9#riq7OSvr+S@!v6kCRKKeCXhR51x$wxRPG}eT3KP_R4?C%3sces!VaaC;S9|C6 z)1PhYRUnkLH&phQqm#++FGKOuDHK^If2W$I#B{++NQ>@Q1jlZ_1F1(p5@#+_6(XR# znhIu@ngwm^+ubfqm>9WM|@D9JEJX{uyqCQ-2 z&keCs5_C_9Cr})w%Nd}`g1V&{H9pgPpz(CU?tC5pdzF>@^=MLk`JCO076NfWD;H|< z(aon|;Rx|;F$&)}9)J+}B0VN#uUA2Zkal!fKX*33quot%F6I$}?L5uOnTewNrQRx* z^P1{W;3~sZ&62$&+F)?9H!)eG;5gR#HoWN;a>xIzz$|SnWprfbkTK_`jxlxU;E*If zPcsU`x}b^qTQ*OhO`YOop)qGrS_*mu1z){^-@^|_mK1cVd1LddWt&=3fao7Qq)~{vrcfX`qCpScr^bvIVB)qK4iXtf49`yiIx+IQ1 z^+{9;xy3&g=busKpf6NzeU15tvL3~sxAUf_Y1HURbzo(eictkkRplV3%pyNUVZ%G7 zqi5T~jsd?%UWW!=FUj>Q{iXY&v9o&pjGVMa2EP5n5-YO0wp`O_`u{;?jV zj0N@dGy*8b=TBFv(r~-m;^Sx5c(O+ZF5w`>-{*iL^=q5E1IBl_Oq)OSd67Z>s^ZQ{ zmYZS~_I>RQ7zeRP=^+r{qrpT5$}>O3E*3xe{SVgeGPrK1T@bt}hL|~~m?>t6nVDmX znVFeMhM1X|Ic8>N#+aEgW~M#=_q{W7cjw;O+N%9>tWq6Gt*61QqwZfLKHEShsP#Od zvzWREs&GPPG6oKRCL2%~`MuPZXj#Q1PdKhRQ2BKG0jGnDg^@3UH`(karKpsFfA`0S z`Ekde$q>p;3S(E`4~%RQZVNy+Y$(>5Au^ofUeleQyJ_+0@}Il))Y!)rjhYIk5VvKod-5V5AJC8>H z#hWD5y+*ObS7m=%n*zoh+9NmJfgv}{yz-syyVWRGuJMYqM9cws_e);#is|39(X#QI zk+>*fJ#9LNNIRK=Ul%|0QMGyF2wxOwy*bp*;cUfepBdTqI-5VM*6kSM$ZyMx}V*6!`i z*z%$4nBBUE!}Mx(GDe>zWGTlWft;2 zb9ufw%1-z5hE@qRZZBc!q!zzws#u}`UhkJ~XTcjVVO{k`gGgd!@WcxpA-Pft4SC_^ z4=KsFzXW~q%&&XQ(oWBc^kb=do90dyG{vmblPsxJznA?gY~VS8%85_U7`PI znO$XA**b#6IETqhlPBPl|3O1kQGIT@_QghmeYiiqL+gp0Dk`6QcXl8;E!)|d_Mwy*3KVe z5w~t+%aSp}|DG=pr_m8VpwacM7ABeq00f?*>AoFoW%BCy@V>f$?Ne`LBJJ#F8^4_E zwO{+yyAJ6k8jB%`N0*}r;b2V!HTksR*;<>$d_4kA!PgUF* zZvD>LjW}3I93m55%l9c=BppAKG0CLeP{V;qe2OI;7g4i2{G+upyu5aHebJ(+d><&^c;`*rbZO!q?3R|9802^zxYj|6)S z`?=9agim6{%)21;jbXNp4-#Fzj zX+0{FTJ6l%nzjpjShPH+JFs-w0lgh}OL7uIm(S^XrFAC3Mj%dbp*`u|Hp)4oqvp-I z??{(Eaaeg4{IFA(Y{5O$IMf;J-5$i{Se1UekYB%?o$P_XTGh`xy*7v+yn`NdMQ`gw zE<4$NL=*bbFmV?Nab1FtYv`REqGZ!N#x<3yUc87lT*62c+ff$B4WN0>qeIz8Lsz&= z1T}wsn>KG|uAF`IvGEL$)rLtfT78~JD~9bkQ8COG z5j7@6JXS`XLH<>bsz)~Y3AVYIW@61zFb7_3iBK~8oh zW-u*{7qNf_bZd(>0eM(Kq8;8p69K|Y3W&c&_ECp`+=QymTBKPQ}An8;s4=h#Kr!%8-e<`S(O z*!`ovvZA)eDN3It7`}17;T3@&iVm2TjXGxSak>I%9Ilm`%-LB1(43v#dFIR16}(qU zF{bj}G7>nq#+7P#Lf%Cpi~ZeWikwn{^={;A^oi$g*LmZ)VPfYknTT?JH%X7OMWlnZ zze;J#I!=B_jA~X1cA>Ofr1eL=d|SEf{Ej_a5HhgL_HyOJ`KWMSnfN;!i*H{mbtHlcLC7LL@wDfnDzTM7FG&h8QbkN8cX%C!(hq z*5Ec$U*%yP*+>_?{(e)Nh5%!~BJE49EF4!_!T8?TP4m-vd-UM zD7)j0ow3r|Iw0`^`}3Z}zdP#By1(Iklh1c4>?xvUO8SWlb3Fa69>b|_%1y5gk*e+) z5P^1P8nBWj$YlG*_@t*RblVcA6UrJOTY0%C;1!X87uWSG!|*2ZWs&=#?ZE6bLZN(w z^8u~MNS>4Il|3cyo5!EJ*A#CXT8t3!Fu$IsFWJM?r>K#Pz@;hZj3Ao3Em&YBuT?N;BkN$Iz=d0U`G z;jBc!Bhj|1HgCdZiha;|#qWn2rupw9c4_?27~h(&l)tr>y?Sd6LUOlwYTi0cQW;7* zmSt~Zirg>K1T{R{*kaTg&7T{0eIwKvr@*$-hkp-6Q>TwiJ^Z67;T0N~l-3n!2&k|; zvD+!t6)X*Z_di&!hd7z#F;#8??-$kOF_ggr7eo$zH7Wb}r76Yr(5bI2lG?y%%sU;> zEvtwjy1-So3Dw*~HQPAZpb|v)J-H!U)Mmr1u;KezC-L4vg$j{B@q5(TXC>I5VBrTJ zP|fbaqnhwJ9|Btkyx$D^&W(pJhJkZ#hZpFWbW>#&Jll0{Qg%Xlb5s0l*S*FOB4}mU z!5~)%n}{6$?*}$-O@E4O!T0M0&4RvQ+Z8dC z+&hE6eb&DvXA0As+1OrhR+yu6!ux{P1sb59u<%DCs76u7VI1_Th`GnGvZb{poV zRiChnSQK{R1?xk|j)KmrM7z46QO=voKibHuA5Se#|j4QG*|v_mHUyYF@9xiQ{nZps$1p%>YL<7mG;2tN>c{6ex@>nj1<362#_7gw0P}l3jN3gS}5# zerZRZJSn~!+g=R#k`cPOfQb;*SZUXR&7gs5K1`FYa? zbI!lb3+5M~PHwXg@}}?G*6VtURd|!Cbb&WLPn@1NjMyi#+jB39Rr(m(B(HKUdi;de z=*k6d&mHDY9RgN4)j&I8ED|SMJCE-G9W~&ut40pCe-bP4mukTJ3~@nf~v#mbKYAaIFGFSCS( z_r-8mX+$uW3{2UIp4^-}-nno9Xup6m1kYCpG7Wt@=4kihd|?msVWpngFA>y8e*}<6 zRK1Q1%-e%YitnfaA9GwHH)M}{*J0zKBKrcrtGbJZ28|x+xfL@><*AgT?$cEduLZYb zGTs2gkAgdvC+DCtH6<_GcG28Yt^P0@#!m|am%XxY{JT2t{Ax7b@}6seYJ4f~6WF#w zd2s`DhqO-H0cw8J*jMHgzqTK+D{7;^d(K?8^ENlm7e?2sVCvDvPXwU_W?&G^8U&y_ z@ezzsp*43od_p+}d(qeQXsxvA2!3Vffwu_^)$Zo@O`uedwAci#_P}2l(nT6{i?9s) zW4+^YxtyDGEYQ_p-NNw#awSeJPWi(#qnmC=mn&J)!F3BPVKR#0*Yu(H1x2qFzXSup z2Kn}5-hcCG=4=pEW*-n9jIb9GCj3aD90lsZy;K!ci?Qkw^dzEbOGreDDnO-TuIs~e zf^pKti__4-x$#idi+|me6y12aG4`sQBC7?#ez{CM-F`W2$W$Ka9!#DflBRJ|<5)4% z6i+E!^4Hq082}5q3TT<&!y!G(xe}&Qo_{<$FFptf-%ma&3#S-;G>$J$K|UBK^&Pl^ zY!FPPB&ZIrftIQ4!pD%6<$x_QN9e+5e8pun$=v!pX9?R-KLjWxJToN`AS1B%A}n!p zEl${le=~P3FH{7`SbwRdT@6jgHU)2E_cPI7oA{%LWi{ob8U(An4?^~-d(!jjXiiZv zOVW+Cx&4xq-Nzw?_VXE(aDr1Sd~2j9c8JjydPQIzn=#VFbUi?wEZ##D*m}X~@aJ1a z?}Y5{LWh3j8p3u*c{y=(zb5&-8U6Sk_kmQ?P7wXXi8=;|Se34wj&*FGh=^(`B?q0D z3p8_CF%&A0?>KPo+|xOqDAKN;&zf}+|v5u@s2W&`2Iy}U^m15(-f;78INj<;59#L7d> z6ee$uedv`PS{HWg9+v4SJTDTE5@(Z9>N!(@OS|DcFSU4#flc2asPm}}|y&9XdarAiHZC63!6rg@kj6{#;Xs|d*Gif5R zfY}R-)DG%1`MHXP7hN|xB$GY$7F?*3*#&S_EmUBe!XKs%FFnk5DI@%r<1HB4Mpcg{6$cm zmm!295mVTXAu<+(2M`I`?pg6qiwb@o!^r_uQarhlB*J(AsJ>c)%G!p;zslNZo7ji9 z?33o+;`C?R$DAI1sY$FEX6=k0Fu!iYgl#@g+Lv^A!k#x2#p)sqw-KeU`njg)OM2C_ zK*Dh}YrsNyu*4`L&^N=;lOv>5VY1Q)1v9f8*_lA&+e(d4vwb>vbvBt!n^X4#hK^A4 zTaln`<;j(nO&}4^WPE$pAik_2PqHxQRwb5NFi51n>jtxl}h()4cJW^cno zKMDdLSvB)Qca5cZ9|J1P>*B6nNt{OO^sbq4)QOFor=VEf`eXA;TP!ON@-MV?vQ4zw3x4x9FpuV`H@Jkpz&8k~v;)Wu zw1H$ybwfPvpo)&FCnUa96E?3OnYXhQrS|;2j~Omudp}J+%>|Aos5*N>j*?~SwXDSM zi{O>b?AOh>=hT4;Kp$^R}0pGa~1F}pjw3%Z5e8pD32^-v}{h(XX^1S64q3biOPwm7W zDq8MGml2n@Uf)W*qT+H2|8ginC@v3~wLo{p62Jf(4F2m>A3~eTm>1d^ecFI>C~nuU z2ONf4pnhIcFOaElp(RWPp(n=+g2oULzs-g9)t`e7DiBVt#9xC8G!$fdbj@w+UvaeT z;~b#KH|9)6by8G{rHO+7;v4XiLR!+8(#Sr;2C1b%E_ccvr4l+9aZW?_T9a>4B_2_@ zT*AfXTBU+ehrseD=Dardk2(8h-fpA4(N3fAMrUsEDH$ra`2tgC1%&rJYy%fW7l=X!8I+LY4s}W9Sik zn-~I6J50^?PdiMXa{GPXmftNeY!Bv-NSkrYMbhs^!R2s9D0zzkFjMZ!u$fEutH{d+ zmZfB@)qVnC?ya20Q`mxs_3xDZ9KCR-bPS$j>MFatDIgY#*JRLT{yOZ+q=R|uCR0uO zNHceWYe8Q$Q?fM5iF^RZjpICgz>3SuLs9l+-R>0)+cr=YJwx8q(LC}~KLl>~fpXe5 zYlm6SLMsiDS@Yz9#%ECnj<0AdkCsPE4aM7PO|wqp2LAa`NE>^zktE_YfU;|!rYF5p zdwrII5fG=5;3`|}E_=5c%_muOmJ@E)V&DUsX{SIi*tbI=J%a@`RtcY_njRW|Bxc{T z9dRF##UN8z1T)TM&Vqj~!&=!Scb4135z^_aS#ly59`hI|`E$yTU zy6+Q$@K%7FOX-)%N0NT$Q<-$K!P;DwptBK;v7j)e4GUwlzJU%bZiQlk@b%Rng->Tc zQyUJ(ZfFadZ9)nW#68$73w5%3d`_CAFRisat#CaNmx-YBS<^9N_wC@|6D+2gulOy| z6#yl3?K(0!dK+g*$eZBnrP|C#D?ZoSM*NK*7&V-eju-K51Xf-v`HxF;wIAh&xU}i` zEZle`6xXRgz| z7)lA8%Qhfu#6H92#Ng|}Ius>qvldrQ+9&{rO9fZMN3KL52M@2Y*oyPjY!&!Tu2j&d zS%|LjWOy{Z+GmH*f8-=+2g>tu{@lbJsEOCeV5F+^7Q2iFP!7gvB)KA9yUCv8gd-R( znD8AX@l3PsD;clWJMu;8iNJ70k(+yf<|`k~9JI#stuCs14R!q(dd1y!*?81`1@Q9w z(X9^=%{>{dPr?o3hVKY&IGiIk3%ej!v3M3_{jQe9t>8_#RvWy}VSik!@WkaibMCV) zg~EBTOO#bGqoWrjni5lRhm%~%GnxU80sFm~LbWsrooRXsaGrr+X_lw9c;VpMP+`);(K8C%Mp z?Y+H-@%^zDK^NI&kwns(5m1e(PrsbqO)A2LrBqgvDCr{-rcg#wOoJOmCSyt=lrUgy zlPHMY)!Vn$N|-iA?Z8SW6f@Xg{bMNLD5QA$z=84BvD>9Rq)TvTa2vwp9d$ZN$ck?I z{k#auPms50c#?shLEgXRGL7=rQ^Dd@0=h(OGTG#D+f|BgN=YZK7r?*ojd05zG+D*< zVZF-Di#--~<{aVNglhnX22qhO>F~I7 zKVpCW>*z%TRwYJu;rYOpeiPq9!}0=&OW7?x!l>`vHSsLE=tU*z-`!9r!`u7*$m)Tay&WlA{=7wrjT8Vz?x0D{`!x2CNssU zFLOm1!mmimd;DPvE3;Qww$pv)u$H1lckzjp>Bp>V!CIj%Z*5Am2vUqechNx03%bCU z?<$JD$g`e>O2Cq;FilYLB`u5r!eMe232sJ4uAhoJ+_?}x`Ff6Zhe_hLnycNu&>tbx znXS|HrogVC>*?qoo?Ao4wxRle%0)%n=Z5cvppS-hR7(<#gqz;XzOzuQM`A|SWzK>l6?$43~ROQNwX>$at1Uflgpz$ z;xkm9%sB`Zt$87KHwWo(^)u$Swmn}`(0f*s#;2XH_AD%Li}IVFcb7QD@fZ`>vgQR~abu`Cn)Z+ml3Y%l9pCoGwh z&0KH+Le@5+=v2$rHnMfc>$JG+-Q!Lj@zt+TMQ~yl4%OsdrE7Wx^0Srj{GTv7oqd<2 zD2;CEREF)!NF*$wrK6CsvdRTzB_v5DTy)2oK5=2Z5B_qXS(cIB_%0J=?O~3?H-VPH zHfB{%w2?>M4&`aN`ct4(@^XWL2Pb)9aRs9iut0D7u=PClj^#c-jtN&9TwkG=g`t9^ zwG^JMs3?Z~#_6_i7?)Y|-5}N_p{}=8Lf{!*Gs(Yw67n(TXY*Y(Ok8=Y#dxN0 z8*up@Bbj*V0KJJOhe;R`VEWHL-gTr4Mr$@<20lDvYG8--j!9p~`7#OkHw(5>$Kk@p zCA-nebe6?}A+kd=2IDxQJ5b&jLPM{ip93!!fBPdRn_AyRwr>hm#yrD)LU^R`UXa_E zk@D$HY{EAAzeQPI<(I7`e7s^?@x9>ClGia4bgupsMs4^UnEz$nP*VXp-Y&DyqOU z*Ekeg0#sWI+O3fP`dZyEs>#xwvbJRPX-hb*K2Dp?oIKi@hno{|Ph~U(TA=Y67G5RU z5*>Lsy~A3PifAR{koECQB2-i2UlsOVYi9;2f6X{ItZl_=O~a61`k&h9)K$^W8fAcn zK&ZBgU&A;m)vF}N#HCBteWDB1Ve8c^iBN6Z9ieumOOYld_IB`O9Y)0FOXtm~pV#hr zluyi>$!Uhmwi^2^QQ;Ar2=w43w_F6QQ0e{F!D~fnpzd7Ij z>Mx^~6ccg_S3CLy=UqT%E%($OW_N7lsFIQ{MX(it-3PkaA{6k+h!5ohU(+OWeexbF z=*?C3Q50(xN*Xv57BEn3Dupje$d;T@K)34rrIUaTCofezWIUD_cZ8mtyobI;+b9ZQ zM#80m8qP)f)RjCk*Uuh#3i`Wl%!O(Sl*IL&VZP$8s`@)bX)QH$vs9ySk#%qfB^MlQKCN~V+GITMPh$>1qs;|F8c+>j5Q-Alqp_7 zVL-ykZtw`U266W?f+fx z*|R|oo-wDGr6_&GkOI?K4*V=814|XOGo-kf5G=POaaj`kYI$)qz(Ql^G6FMNjh0yk zIZI|76F-d!w{9s>zcUKzSGc^dX~ZBb`3Q{Zy>1}3+kuS1&mCXW$+THeg2yS9LE8x5 z;s2GxXQPZ=LW)A4^C(#iA1+CH74wde59R2|n)8EvQU&Cs&I!+Lxw=71lsd3?-03kE&(_BU@ zOp(}QxE)0LF_2x3Ya-SpYi{8f5{33Ffc|vvPmMBeikNZ}R%)#M(tpPh z;MSxj6Lf(YP0<~y%ZQ`%N-}~Gl)5R1$*|G|7?S~5EmYd+@-I-TO+96?=m}6&IR4>! z;HHirLi>nzg9en&BaI) zdN5OF;(zm1BXFcFjZ}0;Of!HEu^S{|l92=$$DU>PB0oK@UO!~(Gr2@$RDjlg8?|o z1l2%QFu*y?jLVK~3L>-bMeW;9s(Nw1!|B%7LFu6D22&COL>Sxv~5Vy!~;y#DlIU2SZG~q;#arS z%gXOXsk-Z++3G;wvQY_z%xd5YT8c5hMBrDq8fJA1B4m27-9q3d0bbb67I0xzhZvaf zh_rq|@K}N|BtX@H_kt?l;6yDAoC`NB_6)>SvwBHC_>_ie&~H#kwhbtodg>O$l|bj6 zY5u3d&QFoRXM~lc$t7DN;O)m}+rptybY{cM5OrYUCofX)wL^!oMn^-boZLBpWL65c z-(KeVUM{!W%K{k1g6gT*O(<7ion8_-ns|5Juu3{8(WS*pBZzK;eW137O~{?WK%8O= z2lNk4yqo1~J}AF3MGHZV3f5PHdT0)KLW4uP9Cb!s0x5rW5B0NQF9(xO0x?Y^>#RG% zv1IUO1#Vjxv&;%E==t~Ut0Nk4VEL`tE1D=Xe9jNRA!6B+v1F3C;`q7QxjaE|=f1h0 zj(B+J*x~fv*~>%4^HDB`x#6|s{WkZ&@BPt-Jby4@{xGFV+wGZVNR{~1mX%F;ct=ZP zp2fr4b>PmKxoLXWl0f(D^JgAs{o&A(yz6E0ePYw4YV(ZmZ~4nOP1J5pMpXKrkLoe^ zY0Gs$olhrxlc6|5?S+Tlgp>P&s{?D$><9c%hS_-U?%$#%#Z0_M?~Y5^C!V5h@0Q_x zm%93BQSaUJqFXo3#PsWju_vLJj{+}F=P%fI9z)`V*uc=b>{A2R1tF&HZy(1lOH$s| z$)WuhD#C0n6YuyhvIq{Ao|S8sFYQ%TWO*Rc)pZ?s-kZCqr)41s>AetojWYJS75m%r z2W_w{fIMRH@J7N!OY@E*O84XTxeEB$Cyx4Yz8)&RZ4X#b@;AKfwwxu%oiFN6b!}$S zGd%_Nok&83+TSq-9jNK2&_)MeDerLU&>Nb|`)CbquQrrd82&Erie@(+x_h=RDwYO1 zOq@^3`)3!V3twm3-HT2d+>;Lzk#txv0&=i5au^z(hFmv&Zl06VX=nb9mbH0E^#8&( z)k#aO=`TCpujKoXJ5JBOs&Jh>;AUgne7f6Lm3~OyxE|9EXXEhc@wPh6RAk%av|hM< zyk59!b{!HtNB`7WZakDo+<9G4dGU}) zUVNvK&6%8jL6>dKJ~eiihJ4c@UhXkn;n*3-Uwrx!KJ>F|4XBtK=)3X&nka!quFQ+% z&B_Pr!`4ZcnmZQvwV!}<#YbVqb3?^f9=Zn}ZJgG%)2oczI!f}XTX)2bNketLW4Wm* zRw<98e)~Cv=&cWNN@_<2tFPp#@fhb9COemx=et#1>YeZ71BbGUrXT66&zody`3~3_R-Zj1TUY;#6~{V1 zBz7pyIQsyhmBAs_i`O@>YS~@dwcB%p&#!FNEq-iWonFVKcZE$U@ni_wJj)g9$S4w+S(wr2`135IxPe?j>32`9EL+yH@T0JxlIaH4`l)fX9yJy{LKwGhRJx5DNtj z!4`r}#t?poR4st@l4BlyjRs?P{UH!$rK2fZNm&N1>$-NTcpb(%z-bu4W$2IM2!c5jV>e8fes$K$>q{2y8! zVs*m1(gIiq@QR;O`;cHRQdXIof(hfFy-whFwF$z9r(&{%U!*PK%{%ATz8)$GsvfT= zvtHByLnzsEukIP6H;TPk3;l*Ht}J|`Nej`IDJ}fB<|#utsf(eHZhX!eo8gX>UiS3q zE3+5PSl_u=%=uQ!GjDU)kiUh$adV^wb`-RdL#RX^H)}$zL0}_sDj?jU*mdxZ_3~MFQwU z3W-R0ZBs+qj)h$)#YbJ1T?zP6;HJ=beu6V<@_p~NvW`x2vEboq=PrC0Z!I=LX8ZXD zxGF;IN7_*}EH3U*p&kz&-GW^xj2BHimf*TgE%E3t?FJ9>Ar7VJN4G-ywfC)W(QxGn z6;*vMT>l%gSgZJ8|YNCXlM!6&B*>}wwVg7WpdUuhX zl_44W#ZHcDMj$0)k-lXo0oyjyotq-;=P%kEz@{I}H^~TgxbEN2Ewq7rDSNWWxw!Lh zBXRLRj6~P}WF%_+*G3}nZzQqde;7Lz;^TjTB>uk{iHiTpNQ8L)$4CtOmywwIpN+)Ai~p062+Rfi_ekRF_5T+m zvHm}dM9QE4!$>Un$4K=5-;6{*_5Wog0{7D@d7&q(CpXZU{@iR7dIG7^7)ki>_A{{~6?Uq<3pcA*)^j1!N# zBqf*k-e#5V2|2uD%NhCln+P$HlA~^1sN&_`F&J)EGQARLT^si>uSiHlb*98cytc1u z{%YjfEu+~|(@YbuE?$Vv=q-G7k9dW24ii{xJhmgu^k{T*YoIOz)`^V}?ltD$Xe#Z% zfxgL}*KfO;I&g9m9`nOZ{gf{&)~iXD3~uxO@f1g<>`scvNTRl#k{MGO;Z&71TLa6E zOw{=4%SSQixHHoqI9sj`)7tEfe_9teX$euwT^A7N7uQjIB5l}yJ z6Lk4#Ej*wJx=djA8FtlB<*3J^=wi_Q6@b&^$R)2Zzms*Zy}a-ra`$Vumq=OkS92{N zujt989H#{T?oE)igD^zUocpLY7Hj~&o0V_?oAC=#6nl`Pz&i%)#Zh7^QOlD?cu^QkdLCsO!v=PwkSiF7mL}* zy8Lj1(fl8Wc7s8RO8dGPPd*<&dAF>6RpR3NIJtzaIjTqu;Oj_<1O z=nh2#?!p?$D7{R&03n~)&|%nEJYTawIzjf9Ozx)aB#$@y5qW$#*3r*yHFILFPQuQY z?Y4_9+o&HxN0~(0)lfd!mp5ou_|FuKd=fK00kX!<@0z1#sa5HE0m_|8G!F;YJvD(2 zg*vo4RXquNq5C40;=%9I*MSb#)J>=-s-;Gk`~aTs`!-ilf@al9ZWCT6+1gjc8+_o}!}o80gMsGV3PSm2!ZSV)X9wbw zAf~lFVwjQXkf+%M5NUggAivnfQcsLn9O69atPWy)l>8B{ls;^9f6?A&FuFU}i0$AA z3xVOB5`kG{fi;Dlj5zozEQMugNNC`?8&R)q1@LAuRDWt;Rl6{4rRCBT{M%2B_sZ&+ z;%;=h<~}nldW@buDUYc2skrCuo)gJ@AOdx8q{)chJEeHW@*0K|gM~xTvxNnCG}vzG zGM4ie(9l7xuUzdu>vD+X!|tthmfa3xoI5ui4wPTLK<;ILYEAaoUI3e?ioOX+ z20VD!b`#R@*PK))z&Dt8FYJG(`*RuE(>tvlCq-i`7^hFucl~pqR z)(oJpizt*P0zEHsOeMODqGM~<=;t(xI#;DQL5G|$|JWz5Y-PQ>V1>+-JShh+H9d6} z^|*eb-&mI#X^)-k)V#3yd$Rt7$+xDn4cM!6BxF^p=`g+&>gc*Pj|T9aKfI{Y!Isxq zv=;vZ7-GXmang3iWk|STNRq})ANpzqT}<`o3Z;v;g007hh#Uy;>C$A;P|zHzb2emc z3#UKiSxNs;qq{lIX*T(4rKZ^At5AhGiw|&ufyF~iE1^GP>a%_?f*`;bD05H;dN8;; zai~%+bN8H%^v2qISxFW(^@qv_+_#s$AK;jw3zDdT7wbeqbcw0K&h&*rLZ*%-4RTe( zVx5rNDeN``hmUH55I*4-Is1zpC0*GTDxpC9LmXF;?F_cndoB(+mXJRCC*v0I-kBhd zL~~kFIx|1uCqCiLFM8>i!^TH|z}T?8WEn9AncwU2M)!2jrO`io;%VRN36B3WKZ*Vv z%Z};m`SqRSd&ncZHu7TvKN3IJ2D*JY>1*RF4*w6eck0DtA5D5&Suj(t_AMx^*u+%P zpSHo&yNOfGA$3aNEcjdIdi=2t`2wuL@(vhsvJ*dbT!O?{ zRwTnAQ53{+oGnpxkDnE|R0rmQ3>?P01fKA;XNVqpxxZ4eSfDQHc;b;h8HD zXKnZMUy-Y?u>dl1y~7#Of5y|3+@!EU&vV}yD}GYdwO)DbxHOiSIvDduMw`ga1RR0y zyZAGPEqaOGJ$jfmHsmq4G!%X00SQJw=VI>;4o_bd3HBO| z)bF_Vhy4gcv{2qU^pQHs;oxDTP#BOqK{S4--{xEK=t*sr=o$umpJxpcqjS&|g1f6= z&J6Qk5daELrGge{w&kM9-#-%6hB2D8Ge}U1CCLruoBu}?MxkP{dAV}8bs(439j9WlT#HDGY_fehF zqVt#w)4>kYD*l3lkZE8TxQKall1d|HOQL94kN||L-g&m|Ia?^UsXO_D971T<0@lu+ zdaST1$z_B_F_2`qDk=G|bMaM}<}Rdcmld>!8zjgm*VOc$exCNg3X8;f$D$r0x1}V1 zHiVQ`WNRiZ42E`XK=G0rHL3otI4QLzC-r+?ZQ1#%&Evo#5~ovYw2ew^LfQ$)&+!*`n)?OyioDKs-A>vp?f+$1w_*x~4^0U^*`m8_=!=S3T zYx=MWgXP~#YTM4AOllmemQuEDV;!`valbbiaq`i&7LZYTf3N(6_66Or)_CBOEJ=%3 zG}$3bbfR~}{tr_ZCTp>Fsh|N$mkt2AT(A&k)X(;}JJOPD#bD5&g;6p3#`eW*LU=iw zoW`qHa0I`gUx&5#q`Ds)3Pa05aC;HfbKgVl^GJk@am|?El;F6N7A?caXNX7y0)K&)_I9=uI%=o0&pRF8KvXaB*DfCv zoSu`=U+m5Xbq+caE+nmH@vaZl6WVA*0us?mSW_r+XUQbW_%@52vd9ue~W6AQ`^x zRx77Pc@2E8f7nF4cysM5?Xseql&^$-Z#$lQxhUebu2HwJx`_RtSiqEVXXssWzj$vm z-PT*>MDk=Iw92}_iNB~|#CLRXkuSN3ueG`#XrY!);C|A|Xi_SXIU>i2(SnO{}W z!a%(mG52lT!ygtC`XEWp#86=os4luepH@SXs8$brKW3(_{Y#;~njgSPp3P}E61fa0 z&kTZ9b*8cKf=j#-LX`ncjfpmtCfDSO4Qv z9OVHCdCa-vwNXhsjtL?QPtzm}E|i=e@&3Lzn5HRnxF3;~XPVEJnWl~EI<&&XQ(RP_ zeiql|D55W15K?@_v>ZRXZMT+Xv zv!+QuA}DoVV7S3xES-I#>*GMK#iQkyC#3cZ4(k)N{_8syiwCey9loYc9_(uwF1WO- z&698K%_?fGMv)6^h7XIU&Y>EiMv+ny-X#6PN`ayrI~A|hMHI@oc0Z~&H_*xYopbO@ zD5H8@+AOB{Vta*JD;@3Y80IIry;KzGNj2 zOLmTLPw@AJrwWI`X2p1%w8O8NxE0|%lnGB5x4!);N_^ggOBl<}Qj0&9;3zS<$7K$! z>@xWnT++WP2BKGq3I6;Q(NkB_W3T8x#I)crOt5?LwSE)e2oekoR0;1nSzz+QaxdSI zoUT|{+^#WC_wOb62QZAqbl0W*zqq=~pg5YaVbsCh-3jjQ?k>UIg6rZA8$7tXyF>8B zgA?2#xJ!`5T@KIte&^Jw@6XCi?bJ?JPxnlB-`DN&I~JA;)6HPNrYiyqc?-(ZSCJ3& z5Wd}0_(PtBZ!f0Z3vg?|z2?`aSXNRwU9{1LhbwX3^6okQ9e$9H*Jj&**$>l4P4Ujs zD$m{W&ZFs|1$!b$?O8-z4CuMjcU|5F9a>xM`QrP9%`2ToNaMED*R-LmapM{PCqr@f zo5L{KA6OFsB(UJ6qQ%~ufo`j)*)6~Hzs)$;Nk|A4Es2tmiT+je!^E4jgl!{FIp?J1 zzrPr8Hl2ATNy;=E9MVY;sQ})g*j*>{lD=kSLL{T(w4MJ(9!XP{l!2PQ=i61i7#ZhJ znYI!4EJ!fTS)LI{or<=FVrEr8ofa#n8`Uob@itNLoDA66;tDn3lY=DFA&A2g_B7bi z4@K1#y;sp<8h(u~PjPF2^8;J?9scE+PQ4o(_#AWjUi)N=MVV_m-BK`?w`<_+5A8>K z7Plh4RdfBylTJPYc>#6erq&24x5oVO`YfDiEouk;zH+J1m=As>e}LXURW*W6YBX^G zOPBV}H!I_v4~SEl?MHEFKRV)MUT#j%Z_1t>5DqL`Mn?7sZd{3cDt6i z_uV$uvL9t8tm;2lnY;*LlFNKA?VIamUyY<>vH|#tC^dlF5P+dhV?>U(u^R{cfd}|O zHTQz5C5lp$Q8Nd{xf_SlLa)_A4#vyZf1`Rlif1Z!NN{gB&Wy~D0Z!Zmd^9nK-xo`3 zZXBCZ+2G)hzT~VA@QxMZwby=P!@WqVgX?xUL^N`2t~f4rf-0ktWbmI#;u1NDI3ZU|0>bt9GjgZ#IvwQRNtzMnG zlibVLJ>pY_g#~Vx0Lz~YpF&h&wLk#$S1$r^#L?Rwdkeepn}^&8ejYnpDP>;z(Zx>t zjMXt1V+-M2^+dp=Zlp&_2n~#8M%;40>qQjzm>2!_(t70Aa4uBVu1b1HaFjjFzuxIZ8{*G`4&_=!6gr9ONs%j8nJ)wq<*%*odw$pwZ_Z^+*_G z_!J{ZOM`Wx5DA9wG+O+tI{&XWw=NN&As2)|cGp=*%LSabu7XcLDQ41TNM0o5Iqn2hZD%A8v zW_vNA1qv7L!3J5udYkWs;@)i<{d`}V0)wY`_#+s#(26hxNam@mzDt@|AG?V9zW)7( zG-m+`Oboi!qLwqsUzfB9BY&!tiVRNX$*6QbX`mdV2(X15+EgMUYE2s)tz`eZYu1)C z;y`c{ynkHim-U)Ck=Jb}&g6BtS|tmu$0uoT_XJ4P6OT5U}& zteX%x@+)pfKl(iwxB6O2RZ|Dmx~4E-kdbXHfvWr*=;i}D6{_)}bdijG7NWyF;x_I?TIpXL4n5%-nvRK;vXE-l`rHhW-U8BhPP zg!8%kn}YLrjE8>nfh}nzl|#Q*lLGuWmlxvgN3iA`M`bSCeRqj^nh&X)hg2oocEgvp z>XfT;I+DC_Bn1a4r_fea$Vn(czhE$Z$<6-_eyWw`V zR!3L?`XeqV$CAbkwX0~oh>Z#RQ64|X9OoayIEYcN$O{!>>~JzaH8ffXUUv0+QQ>hI ztV(ufEbAJv?t_K34cRTb`4h@>0)b>B)gll|r@Hia(m$SMNPJLtO+x*bF#iFqbOc1! z#sdm7Zu4>$azkxZ!hcGde+z(8AEUIa-H>HRTwvhE%)I-lVzOxFmRh31T8x8$AyQZE z(E2(ZNgm>epF~4g?yZD}Usw8o+C2A)InZRpVc}DS+6X|G@tu}XbctdU!~^&sbAdUS-PUD0PpbA$*d>16K)V=T zx1Hi!8=k1IhlRrpbSo9hLP+6EsHrEKBWfto&I)F4mS5$Q3OGD=?}yPquE=o6MBzTT zEU%E2^k9zOTznI{pi+@3dIlm`rfH?`C(n6*SLxWePpYpws0#6;F(ulceDfTt4uv!i}6p+xI>Tk|LMe*jkw18}$>QG$z|AF$L-~Qi}lSH>k|3 zRA$wVUw7v^906g7j^Ca2TJJ4Q?6fYlf*1B^97Pkhxiv%Jqb(K8jctz@gd167>CCf5 zX6|fg6BRFx8&p(SabcI!p3nmZ$dWK;71+Sr3jUTJ|LCl%ubOA51h4O?%nejRN!N_LN~hSTO!P4N(dhYl>P@dfPV53jYh5kc=#)&-RW5!&bR zD0em^M;fOc$}cSOdD8J28!#)H94*XsI+G6O{R3~ma`iWq>m%zRT9SxUss1!n9v)MH z$artS1oIdMok9;#la+|3<@fkgnZMKvU&+t^*sGZ-w5G<@`~hm(tR|*b@f;rUz`uLf z3hCq7*3zh!?#nK-`S=irTt>8mx*TR4!c=b@GS3uSL|iTdBTgrWv{6F(@Ms;HWvO)M$~LrGS`A zzH}#OPTdn3{Rb$|zb<)xLIaXG6x+2GD5Cy_#|b4v$*B%`J0i(AM^MCg)6(-;&OVxg zvow0)>t;wiJEI3aW8(M|mblTn*YAQXWt%vFFSKlow!mj$h!lIT0sBVoz{ogP6Ybt^ zn6~m~K~Ds<-@g{}GM)VL1~Z47@D=_vWEG1T&?|XDKj-7#z)0ZV8U@u|K|*ti+E5D{ugcF^Hg$G>kD7TayLYA!l379RhughA{7JbRJT;3 zS75IqSOPe31UBHV{ZiI0cD(s};k#7hvS6^ssuN?7{NzTM6me~w0d0@%RO>?7Sa*u! z>!p58V06&xaiE5cQZ*{-r8;lQW%iycF^4i4bFxo&%k{oI)5O4siz2$W^$j3@p zn+Ifok*vMClaG@enJLl`zO3x9|6Vdq^4I?xneJA>pnue}#J3xZ>?K5l+T{z6U+D1v zhOAx#VznGRj_&mPNiCqr6YGqAr)ZlTp~xC!XHsi9xMIPr*?Q*PSplztM=TJ&fO*)Q zbgthFwL4Wj_5H-wNMko^Q5J9k>spO>9-TlV)=gfbRm;&q9U@JA_sGX4Ndk_gja_gW z&QIMIRrwOj9yCi|>^A8a7iPuM-S|*EbGZV5(z~WE_FK@QZLca5ToPx6G2@lEn9n#m zX7zgZWVM+h_H1bOZ(|?LG$YY;`m{oj?s+WjD>RqV-}a1mhpiE` zt$tRt12QGZvM;%LKp7jq#wX#gXz&C1eBlS#*Un1=Qcg~rO-V9Ah*FQ&cO&(p@3$K7 z;$Od{oLnwQ?1u-{=Jf0@b+r5g1`OoKMy16 zPdn@%zz2;-n6%6t7kDODHF6^dKokljw#_WkIPQZT(%Jo65UR97i3-p8)>JQjl2n6~ z;=Xg-7Bc-F#v>SQ^dnJ5d_Q+_8i`q%5E==+`DhI2QdWt3Up*f$Pj1S4-{0~lE?9Ri>&ZgSr=lrKrbVEE zaQMXi&LpBF$Ayj{*nyEqv_G;VveOZ0JcifZG;R6nz;!3d{8i^(6C(0Eh^l8&H=+li zNWkmE)%cc^N|tn(3GL?2uquU zT%K`>i$_BRu}z$GHIntm!(x_cg`){TODD+;G~^?pdAd`@9zcQ@kvQ((!Guc|Ul}8J zERsl;u`RRbo>bTf34&%SfNQT>PAH@>p_@U(R4U8~M|Rz`Hss%3iRX*;gOJ+O?~hIK zxJmWYWF3ZRBi?!WWO@8Lvb-_ub8Nbf4w9MeE2__D2`{J{X<^3m!F=gFWj^;nXT+8+ zTPP?=8FmdT^$N|t+E~tJc@;?b-M@Zzzup&I@~ss!{XVV2pTzlzdxOea8;RSwsFDh( z=CI=9R!~N&BB)ubtH|mMr~#xx|7ZzH7Kk@+z-9q^sSdf%L!LEVIMZFS zM><2@r3vJ(vVWfTJXv0vPq%1AA(e8OhXCrlUR<2s=gDbtq+V zV#Xs-V`O7+loUz{NbRZY0Ed2}`c$$?LQp=*2Iq~6rR()}+Bl_hx+f?ryu0S5@;0Zb zow4NhQ-_(MYJh#Vfi@Ql4Dkq_ikMB!DQGKorM)w$OJf{K(&71YL!LqY?DWIgbu)u8 zNAnwcyLj~;zKCyA2&(%)fR!9zF%*ZRJ1u^q0M2n`a@|;mrM)-U)Sy&VC4s6Vb10y8 zKk5Suc67H1ntP{%UHf$RXIg^?X!$6xgZ{7$X*EXPkh(-r$ukB!eR7a3epVSoKIOwF z(fONOpzr-#vj51LmLhF}T&8u9Wi4|)=A(|!qt=oiRGLxCBy%SafRo=4T)J&^BgE+4 znKhpVW>2jQwT*+xa+0P#l$}2BR{F=+uScAyLvoUID#uq$>b0-No4G(kMe?>I7SGr` zHG%Kej7Uwf=+1Rz_7#j!6d_@f`?64hsg;U$GIoBZB_ks;mg$p@I9%$gSlshXW088+ zbL!-*zZOLcD|Z-JG2Pi?L{^I^q?E3 zI6a+uX{A?Z#GZ?T>_i;cbT=W*z`wx$z*$wkz}eCUSu=m=VYXmdG?5xQ%EW*UfUh2Z zzaPsfzDEtnKQu!%D^8lzA*Iu-yGwa7)GuH%rk@vTnqUIXK!S#&k_|QE`myHYoYc%# zs~9|z{f{X3Dx{jNb zk+Vn0Hu44Ps`zWRk8P-!!d91P8mHfv`30Ct+gW|4wtTCt^Fhif9kZ_Zt=7g??73|g zg8{$voL)cNJ^MWeH*PvLFli{pkyrbf*)C|+`)O(DLt;TpX>D5_L3Q{^J3q@R8*`#i zY91({SPCs~?%2fIz6V0(XnIB_{ufcx%-y-KOIgD$GpqRXg5fF^9^0{T*g^xJMB+I7 zcv__V!2RH5JQnnN#_hw_25BDTX?jQAmEM@84$AR+hnIMs*_Nn}t&F-*PGW#CEStr!xlh1xTg#`AJsH*wkwRsE}KO>-8I_6^%x^K!pZ zGeU>|4U`P;dHpneEFZOoJgP0)%lPxGUI*F!Zo_z3qr*I?b}SJOY4uM3EEEVE$pmaW zns7U34(%C~P@LR?9W^lEY<1D7E&&1h+?+31#69LQ{}ni5450LQ52v?YsUa4(EKaYY zpOs)oHQTPt=+=tFz+>(>?H{IKtJ_K6(~qLaB(|c|m42}@b~|`c+do7`L?c|}gw|>pc+rGCv^2Z9k@d z$D)TWE9gCufE+pHf}Kk&+(=&kj>clcGvWjXV7gLbZS|*E=u-#Ay|gtBromhq0$Qza zXmz2F>l{e_G2VEd&$W?%Q>6Wb2>C}pA;N9`&hl9JBN+DE7PNZgg+=F@T;R?ei=vr; z&ZO7#+KLLB_S5Oc=-tIWdevQ{v!D5V)pmD*W6P7hpWDUK_kROK&IT>vUB4WfCQ~Oi zBByzXm>Z0sOBj&K#{qvUtfs+zNTt-xI=d`HtV!ITIbXnrfExN}hr(+Fd+(&K4|;&3 z70qqH=BAJYk&?Y62B8tliA*P{7w=_BK;;#ILjL?)`Qo*ImQMExrNdeKR&l+un~-l% zXiuejCY!bibK?+%y}$aBtS7uZrNWR#^ZS)BWci=*c+;wtbfze7RruAklRn;{g(C_8Ok9vH^eO0^2xa&nP!_qm(-cT$i{{Z1s+PY++d zKRgg)cJJp*_-r<5%p8Edxjx_iD z)57NX|Hn0-|9>dqrQ46i<3I>P7>mZ_p+o9yc_;|aM7WofZq^HNE2|GtiGK>Yo#S;E z`URcat#2g%V-lvgTe$3BKEOeI_%LTY^yvi<_YemPJ0B`_>5ED|_HN&uit`@^Cr*)u zSgrc)49p@-hi(JaAu6yr_31C-dW}#&+#U~pJaiUh?5+EFVM{1jN&VV1MR57d;r$-? zxI=|6`u_GXfCEphem>1$rA1XG{iQ62_uu2eHkb2gEJo5U?{8|2saWUoAcR~6#lBE3 zEKP~E?|*m1Tz{{^$7HuD2fdPr(a`>HS;_&L9(*Y4Bl z`h@rrt!KHOeumXcd_rQ{Q<7)HCbr!BsP!3a4X3r{tG^c`o^zea`ESh1%8BB-zy81y z>2Kg=suw*!( z>8tXU;q$r>2DVky&2Pu%hy0J*oBa1z>+fJ#%aHDKKifJm=1IN?c0-Gd8Bk2fDd(SGBPB z+$;@0I$@FoP98WqDR%YR!2qq7F2B^}4XKfvjyiRx))DdGx=Z<4<*La57$S2378VI~ z2y{RT2cxgG*2X@`HgD(iNg~ZWa~ObL1ZXHpCJTx{DVI5cubA}s5tgJ}^RjUJa~YK+ zgWs|Q2@t2Raf}82qMfTQAO-x%S5-FQI|r!tL>PM7JV!ngioO`PRRc+Kv*Kh827SY& zWV?ElMQLKwXDmQ)!4YbwwAZIfCW&Q_o3GK&=IuXmlqvqzMQ4V0b^!akuM5_+p9@++ z^|0C~?+E?#>zuVMGuits_9EQRJ&cDy_<8<$KfJ-OB0cIWz%96@L5fZqmwJ^~TFmXUR2ZdB6 z7k_;C8GUmL{?Ox0swPp<8984xHraW*&XA75w%DKuuO@uj;dr$qBV``6%qB4o#kAnk zBY}#YA&0HZso(o!xE>UDwZ01_`50tq14qD0fJ&>5%VFnzb+2*LIW(gPS_&hy1U3F) zzomQ|g@8vIfB{y7aL7W@>~?*LhC(aw{t_AerAp><4dOc|toQ}I4&>Znf}%aF47)hW zu`ZJ!G2MmuT7jb52FXQtQbU>y#{PE)Cgmsl z{ZoZsUlEG?f;V!~K2aU2%Obl%mHe-fly3M8}Z363X8Lh2lM<<(pjU{Q&!fc^?Xi z5imu72a4Yjj9lu=1;DW5|0p<;+t z4HfK72vZc;{y;{4#O)(tMiw%zNP&e1?y^J_tEN)q17ef>n=#xz^?#Nl`-E1UsP&`vbpBGr&GlHIt!s4LF{w-GMT zcSHX5J}7A>I#mM^Ih0Y^%)dMXD-hffn;anl$}06Yg;PZ3-K+SAKEJ7k35+P4^J@RF z>FeytnXYC@*RJZ~He=0{Iy1WCKcLcfsLeJnBzlK6`TR(7XA2fDZzQ*_9x*kHmUQO( zhA&H3ZQqR&uCmx3CBZb9!x$XffQT9($PgF}`T-PXLDo)EVH1?CTe6Y?bf+$&xLz4cZhrB0jeaa~E-vJn3bVmVdDtF2jTD=eTm8ZnPv(IQPxS zPvd)d{1PVEA8aSG&0OfO7t7t+U_Q$5mIN-iv9lU_Sa@RH$RhM&L1wkhmp3-k{@x{* z*;ws_C!SfqM`bRUJn=a@O5NdK*U21i>*eVdX5Hv}&TH8F_0FJijCC|hVSHU%Bj=A{ zNognTeMOk3k{wZ&eoQAor|7uWx=(JtYUgM{gIl&dB#*Y%h%I4=^yq(7M#KMA83h#B z2Hctn>TlfU9rop8K2^rA=o-V4Vmr($705hs1v1`-gQ1VWnBTlVT#DxJ*n(L~8rc%W zba^4E-CddZiRsRC<=pt%P=`0ZN*ppEvg5yAOVOIu1WRtkMQx#idWaohGy};f@CGcR4qYy3vq<~uar8a%>Ao*HFrTQY=PVjgpbbVo?~RH{yAUI#DDF z$c+P$;-21)0kRDWcE+0?=b=lQ^?{d~K%7xdEy50`PnWSeNt{4~WK<6i*}3th4j(0# z#00@aFhsazh34X(2pn#-La)A8Xy#W&Y^C)*L?qBDa9 zf*Rly{7+?^Dw{3%R2f;tTz=~YC-cX`G6%0?77;~l?Fz6&B=n46c<`j7P7neGCB*d$ zFgVKRup^Z8e2h-(K<0d}NBSJnQn^rS|8D~;cd=PkxKHl)_DZy2BR691u-TJh>$w=(IrHD-%s7OE5x4IM;r zu5$Qx2(@RBqMvH^aR6uJ>1GUQZ_znfP*ZX}>?jE?N={u+W~tEH-4|7ZJ(vFO3(Sb(TIVtpM7?0dRiw1Im#q|j?#|Jr?UO%6khZgJx@KAWyQo=D2#;5j zy!*c@qvkA&f%Pg2d&+q(yM^kKeyg_Obt_|t0V`?CN+M9eQTJ?Vi9y-AeyoPusD$?G zP|sIw`x$#ltJ;MV=@r$tR)mgX`)FnJhlCcFV!q5zm607AlWwuVavzvRQ#3rc+Qbsa z;^aaEbro^F-k9qR2$Zn2Rqo2Cqj1Yv-lX;V3?XZly=qAJ`OwR^{bk`g;ouOB|HoPY z=Jq>|j|9-{BC+bKH8~4HW$a81Dn8!do1@y}0~dyH-!>=cTY@_Yl#_KT4RuC>9lJBF zX(;xHV`o$lfN19@Y`P*5tiC`9tfM-Ivnv6H9{R~x>OXznDFM#gW3SeI6&mD$pOuk&^fPs{ANhF8u>6g<*Ac?`-oS}o zl(Jy?9=w#h#7F~`GT3lVTX@~dYgXsw84-N><~mjX)#*HTdDrVFCM&3gx1_co)Xf?v zFSP76wYR`;thfdBmqKXaJm_lE+5zLjJ*_$5gfs+F$ zZs>RDA4-X6ls#h=EWE0eu$_yb-jzvSD5sQgDXW~&8j)3?F7`7TqYm4qbhMO6Itml3 zgpa!q!&qOH4pV;elmB&XF7v%BmUZRpqOQ031RLG6K!O>VA2p3&y+8IHJUKT=-xqbD!0EuQl*lc!TmQv#KmXL}r+4pZG2WQw(rWXTNiBiz6|~oN(jv7P9too#$aF?C1>YP$)rKH z6SQ}ERB;J8L`)2)2q2)fB#UH&UUMtjn`?9rxQVptv>Gz@a7p2LdzY>Bty9%J?cEOAQxkS_ZfwJ+n96vntQ=} z5|`V`8t@|p2eYg4u^#AiKPUyGFbD7G33J{fP{@-dRW6fb)^1Em4C-~at}LExzSQm! zXjdGzASoR7NX2NqlDfcZyi2orjpc#-k=}YN2~$2{rYM1> zi+n{n12(kEgf>{&C001X7ha(QG-?eSzDWil7J>)_yGtc3Dc}nyA-~gD<&mf-$g3*n zHiO;{)g#-N&iXLEfQ$Dl+oUqQ5~{AlzAxL2j2qTmiUHiRXR=hqf8zr46DgbG>KaoH z2}|7?R?nZ*T??Xf4#F+5AR;db43V3rH=fsF1xS-27r`m;1`=S_=iTVAb33i)i>mH} z-z2?K;MHCRti0kgLRGokJuLh42SX1{9wM0LmFhB~mAkb<&@h)smnNlc$RYA2XQVVG zq|D(2g>m6Vi7%E(GI-N15q4vdhy-y?u~;t zTeyn~@aJpQZ=3_>pb<^J+?WIvHE(6T`KN2$2*pwYU_{Q=F*EEEG;6B4j4Snd(f0U) z6po0=xP-+mUD~*FIij3>Mk+*yhp#z`g~S+F7!|Erj)rpxyW51sGRH!5sJ8j(N|8o3 z&F_=&al6b^*g>o(P-tBuBZhQ>ND#NYEhc zC=gB#_~j7$tL@_IBt(jV_rZk+6(L%PT9SP?`FQFdQev3h7EI&v6OdiY-Z!6)<#&|p zmURwzmREg6`JYPDq5#?47f@ZO8i5G5m4`4A_=2c47!)?&IU5m$Jw*@E4f_=?_HffZ z#fZ(D*k|7mNr;)WM;h*7&*bAgUi2-Dc$488_>R2X8ibyh=vxw=!L1;MPcskHQWt$a zxQz!I2EH8dy?%~7eOx|}1d;{*b@8&@cg2Nb9)i;H7P0LK{|OD2`0U)bv1Ydy@WW7V zh0@L?bidIP4}Hsa5+=pJMc+-KDA;cQuPdvh$mH{pfzD8q2s%rv|mZyCDX@~U7v0ow;i8>zXu z8G7&746{iD@)GC z&{qw@aJ=XeJZWoZ*U0o3CfN628wPYayPX2Y)s#`w0@$F#%K84W0c0dIt){cl%nhc| z4h2;~KwFH{*^YW7RK#viJ$T@Op6qyL9Rq7H+Rc#^E3&?+r#|cl&5@;xeNi_1fKg_4 z*aV6ajOs)Cy!IS~jD&52fsQA$Fg_Fp@xHc)Fqo2YCC1#&US;5^8*4@F8c0>71Y>0} z<`yrCo&XdB&&uk(gusso5*i)1t;TCq^YN8imxhf*WX%5ca^ddl1Z8bgQG^$S>ER92 z)k#F_wnkTfWi>@~P>S;$;sphe!LAV3`?S{b&tX;%y>A)3(4 z`XLG?I8EP2h>@dAn+Uqs)s7k`7|{S2Su%dfN#n1Pfl|Fy3| zSvIioFMI1!P+&zaoOscw;^jpbqs=#V@AUWfH=iol^h_>N$ZOPqf?dt5o9hihaWnN= za(?%C4~dCivA|zD4Jvd7JDn(|{WZ+o@(UE!!JuV;4P70iw>kHS+v{E2Vy6q?sKEsf z&X<=jIOMhCrfnr!*{M#m=mp!eU?;bfuICZ#A2A>J*tXdZ44WSM`>%Wu;q>J9yH1*S z8Z=|ja6>qK?Z1Y+bLg^(cvO8O$?eh{~aS4C$yzp|~sr+1WlSL6J4Rf2Llgj-6h zACws5m(4RFvJ7uCsoEB#)vBXxI?f2>4a0fkdQ{XQRB&|vy_Yt#8>^+D+6?_F?PB}2 zK49KOHXBH|rq!G4;T+S5!(;Ay|EbRo)W#{j}53dFwflzyL<# z0;g?!A4G>35;Z{*R!ngd)#t#@vhAcFk@kc{B)~^0<-U0=Q}{*CbFsKwKk(9X{=^p# zsy!Ou5c@C?{J;6%F7wu}Kx4*|P+IX9Z*^6#&y*#{c z2!?(j`f8TP(;{}ZoWP7%!{(@uG0&dYNpB%nOxN+^zAZ$qb*9%J*;B0B()(m;*ayh; zTZVxQOo7u!Uxp>m-p0u;@$AO0wyvd6U85p8%1^Jls$8=&9lZsB3_y`dCz^FuDDf#pDh{=c$s<|xJ!@#6lEqzdyxflQWcrU+y+80({4CZq=1%?g;AcHe1pZy@2&Jo2x?KgD7z24fOKhL<|-t5rPKv@J3&K zt6A2D?Z4jxALV=2Z~pyy27CrzNJ+bCEsIVQ=PNdV$`3=zlZwwp&s{}tITH17fL$7f zbwgfLjSL@GNH!wA$SJ{kq{yOYQ9+mL&=f((%uhT;#J;gskUQkA{~U?Z+hho_f%N6x zSP*Kg%<#}s-C?-A7^t(j>NxN}Tje4gC{0&g@f=+;c;dy$O;>$ssM^p`$~L;3OkQE< z^CWTMGw!o??}q?v=e6OEQfOUBwT=<8@m-4AZLA_tyrD@=Vw#)n054xagz4TJO|WXv z;0g|ORa&$xL{N1h4kD!9X7~N(U+t1<0g#Xz3)Sd|(KC}v z$-!d0M|3P|!H#v(Heu8&hlk4IrUsz(DvFh~l*ZuSxES#ih8*tEUSILk3JpTIVS=1u zxeUY#44RN8e<5%D`-&(RbC;N^sNt6VuF1ME&@@>K%r=xzL^^HPiK^k z>ofxtydatGEecP`ST`^O52{Fkl9X&$)J8up+EO!=Mn<_~D<#G!{Fj&&ES6qPUa@Um zA&b|Yj>0d45AR)OP-PUx&KcIdR%DXP|Q0WygTQBji5eecsNZbI;sFJ zys|p_aaz`3#)wZ)Geu~~02=Zu4XznxxXehTQj8L$6b2=`nRN^*-Z&eAsJRl{S7IgV zAoO&|;C%M76Fi8Z+P$4%mO$L@YLC*;{GCWWc(_J1AeB}FVe)0uC=BK}`vgQ#GhHa< zj&;lmCJuB52?pkDaQ={SFghyDKQY5n>d&JNQ_@6Zlc=*LGE%L_%;FDKAwLPAGkw~H zfx|ZLItku#79Y~iebbooHJGTcOzh=cFhML&p`V{)3a#qMXQbEu`vp$InF8Ns)1VwD z3{eov4h1eiZ6B&KK&?M0KlU>g5#BxdjQ=dgE&W~$o*bwVZ-XAlvs64(gv?1muIr8Q zSqA#m!D4OAEb2Wm`Li!-@Up|x>XzF`@PTP|E)8kfSDeFQ=>3WRy^SG48XX47lbfFE zF@Y@BWB!!L!&{Ib#X~~=9oE%CALU^({53TF6HL`Fx@QgTeS!$NA)@^g8oDEQwu*e_ z96I+W5cieI<5}hN1k(gQu&GFYZqlW>aR$oV;(jG25T*1rP)~p@i9X{rxBjaMHn;lw zpAibu;~_TGg3^)1!iKKHfWzwx&W*i8DkWMWNY0(XhVJ;>l=vgJFqNAT-W_XR9)oFx zzzi?d$<%t#!0GcJEEqB!CfSm4V3xQ;2~vz_cBzW}YHGNpWZ`m3<4+cVvq0*pQi1#% z91{KQ_Y^z>Ub+$*B{h&|X<`t$$kbX&38zEt7bitoXRsKaGOm3)GAg<8V3bndRO17U zwnfGq=}$PU9}VT?cSZy&j`zR2(ctE(Kc6O$Y)ZY|w%95K2ToilMi=iWNzzFU!aDNtsp8STActNyebgE&}enVn8!^ZC^ zL_56&C*0%zfYIS85d6?*Q5ixskZb&E>bG5xH#IP%vV-BI^r`wz-L`FIKC6cS=PC0s zTtJ>s%LjsoIg5GsNNmPCtKmasDS{C!{v-dnUpwd5=S71iaDzSTvGR8Xi7K@CyR~~d z4>TGXP&4U?44&A~;Ya_}aVAq}@vil)(mCSXkC?k+NBF>DoET|w3Up$_v#0)PyWf4% z#aEn!q@Sm;?25_Qek_7cvs3i(xoPvi=1d>EU+t=iaAYj_hZryBCWZbbr#^Mff0C$L z6~KjaRdX?1;4Fs6<14Wo?C0eocG;BmD}D6>8;Q0?^8!7TWf6X-;*lUFno#=lHCy*j z?V}#^#HS*2^}^d{7M0^66ij`EgM8urQb(^&Gnyc7A`RmK&9VX9J@B zR&pF3njWq*YazlDg*sIGZ0X$dZ8!rDE%YS#h(&K~N*UnY<%Ne7>h`RKl;Gk1!Y8B+ zMa6u6sX|8`nfAV|BKJv=ZJ-!1En6S5@i?2%z+(i&W%Hld>Y$IhrVd3-gb3gGoWYX) z61abUII;S|P<8V?V)$>cx!C!1JW#L=+P~o?up^#)V#r*@%$yccO;wKe8ERn};I*fy z$I|a^J#gLeZQQUe%>B3pOY5cWvkQEGpIkQSeuAs@@mqbn;l{f3O*Yv|k-W^q#3DPi zvq`*>zskOTq-}R3O>PxI$j)Cm{CoCxGmY!S+dg#Egd5=OFD~4ACqI>)56s~)@bwP_ zmjr4&17yuQu^L5tD_Idh=VkB1$k&s-_kfQMzZ*}&pXWl*=46s{=|OxwtAvnj8{fHl zNs;hwVkL2BL)h*eR6d9L0KmulPOvsqLztOWbLtUCFKXmNF;o0@<`(Bix9K%|%uxNe zxN++NV<)^W){&RHH}AYLqp1ux5=)UI_s!Bg7pEu!V#*Rcm7eWa-}Uy3la;jtw<&|w zV9}|g2{7(@f8joXn=RNytA4{?HG7NJV9F%TT=nK@x3g6Adcup??WA*lPE~Pj>J8H= zy~kkHvpjtfhl3uttXduy_wLGV9^o{Gn~}t{D8x-Ma;moY=x?W|f9ZItU_3l`l-t6k zJ~fD+bKy@NK!eJ z?p8lGqS7l8pcqi=l5)>hsPn2_I^yA{eLzQb+6oNa3RobTpP5*e5Et_xkm~`F~4%TnJULLXnJE;WApLYf+Z$QF}8Ul-J zdxoBf<9n_Nw{~F1Bu+*yZPuEnjU|2_FDqG=7|ucE2rZ{BQw;x3OLL`@17v zUJU;`mF|DblGs!YAyYm9(i@q~EnhF#%IK9|A1y!mPPy%RjZ}?wFFb2C&q( zB;HEA=j%avI&ZocmE1-{hul+PSAS~E2U|A0ffCI|e+Ohx}<1ntHi_uXjWaQ$Z0b>OT@eO2pc)%V=U&1mS4ON$}N!qbKnSQU&zw!FC?{582 z^BE8wo4yP#n>Y)!7VbuK@ZS*(Ge~Y3kcX?APg0uaU=8K8j+yk4zDS#JekYXe;JSBqO;s^~S?? zRXD6-dJh0wr1;d3gAY7+BZwAN1@z`wHpMxd@mqmHug~C**EZnuxv2PA+sgnjpfJTt z^?E#+0vJOiSx8c|okjp*jlCg6$uoU9$!T{J^H)HU_h59=uSAH&`Xw(0_ClVxHH8dt z>WK0Sjf|bJ;SuT20pl-)KfS z6Q7b@>`8VD{3Ep-v)1J85M9ANfFr091y3U^ZBc5m(jLRzT^+r5eDhjhU9kMF_ex@6 zyI{qzWSwxfLi+!3_08dtJwdy%Z9Cc6ww;Z3W82&qlZ|cLwr$(C&5d>E_kH)Dd;gg8 z%+u3zs^9Le>OOV4>irn<67CdQAJEtd>G6Sg6n{O(qk0eiau(jP8xWgGjwS_$$ zZPkq-2OP_IeCMHD2V!W!&i3H|Bn5F>d}ULA7<1jkdw(u6Q>dLUXq&fgb&klVn*l;4 zrjb#%HEDDpPhtoe?Nvk6#R&WEB%^5N!g)_w(L5JkD~qa*&EkJAKbmWyLt~ETgQ9sY zB)Ob>ZVBo(Zf0$#e zB0xMdX7v>j)e#aDK1bd4FC;zVK+e2mia0hho-4To-?GMx)r9dpJ6o6#3sweo=H;Yl z^&erS>}Mwzl1BvsJ0(YBo)oA}i&kE4pqSs8%k0^h2)%W4ivn6kmGkdP?374>+OMtr z8lu*+t%^Q=m#|zaz`*)Y6pLd}HY*foLjbqhIw~hS1JPyA*VAJQ;I)MXcN_6)*ZAh` z%acpKk0oH{$|g6X4Kcn4=FfB5vvoP_!nD57o$nN>s}+uo&G~1#_0D>O(}bs0IR$Ex(M?VwIq>rXa1kfI zs8Vqy;Qn1$d`HjSglbU!mAZ}Wf+omryZnxeNJQM3)83#b4yzIfA$;U&O0q8BqBhfEeWsvqZzUL*A+->K&(1j|Ra(!YXM z^Ak<^Z1BR7=gCtiyHW~GS+1%X@O=8%T0DdH(Bvo1!EP&f?EKOh*t!GQO$}Sv7IMkR zf1W|bB0}_|;D%XZgD}a}%d48T%NOf1%#A}EgVY?_y`Ly!+nezlt_uDTZVxoE)5Igl+4m9lzjX%Ol=N*O&phqwn!b4 z^tDJ;8$Fp!4188?;i$HpS+tE6n2xty)cwI|F_jJH9i3z62QG3``M|Rg2)n_5zP%2=8Zu*0_>W_g49BtyL; zR?~$i|I{^PgmE8Pr>;NrASx-T`BeNOdFUyd82H}4$Tm+kZ+4|+kL9&(3`fCYRwPp# z+6PO0-f3qREmmAgXoN6{$g=_#hRbVy+K7*qXB2_E==4kz6)1vM5H=)lY#F14B7er+ z4BewuYwFw-yyJxjSj7RML|+l8k7o`gl8TWW%=9!`jLyqND!9Zc#27pAWa=j(PDCkP z>u6y}iY!|%WF;EN9}H|t=i%2YpDUZ#iB>8cNkY1%V_MTE_0c|8&rNf_IMWV2faOXc z+i{B7LvX^DJ%SKAMXF2EKUn4e8uECKlw+GvCIXQBNF60 z+b^5Hhn@;|?kCQWTzh5pgpK%V7;%;OcFX}AR&H2ubhA6p&rlOP=DET>>~_(Ul#1g4 zr@=9c?Uu6uKtsD^X=8I@$?P_C)JZL$yxU^JaeDq9>jh@#lHq8C2nSErbak2#80^;b zAx@u@9t*on3dpENjzrg1o?WT}yu%_d1n`hbn%@{R2cE}7^cJzY1g3Fl@j4vef-~-K zvsJ2A#jenPOjN4aB}jo`8+H}^-+2CV3V|o|@^z&00631k6{FL$k5U=YwM=5ss=F5W^=soVbNVy`VJ2z^q*-BR}dV_c>aX=N!uk%jk z+G?d$0r_waN4Q?CQfy3oqe`sqa0+>i)cJX(R1AFhjxbzfmPL5-SZzTDtYFaC@RjI( zhrQfXKn*q~vYB@dRty!nVVUFdy4$XWBgerQa<}}C$ej3xyvJDkX=<%4fgQvp$F%Ez z`~M~-?v3+*s9dwzHHvBTL1`S0*gg+Jyw`KZhhTCH|4yb`?NBI2Sa>RjR5cd(TlP=d z(?f&}nm@97xT6kmp@GaxpBnd}LHOv#0K-_KEBYC1-2wfpI+99D$y~hBi=Io|>S`iR z9AHXs82(gL;9J@#cAUF^gN$cX<=C*#4l23tuveO~W5QB>OrhF66JD?-gJYGyZ^IPy1)Z4%f4w7P|Dw2NVHl*2i1@#frI#muU9b2tllf#iMpnIp_Lg>UQ4!|r2 zf-}8UpRDZ5oTe;P1ELB#E}Ra_IdF4pTdSbz!~G{yRgL|zxe0nHXMjOyvaiU18S_5D zac4!7L&<@C)*_g%u6z(Na7#}Zw63P2I1fjz;HBfKx)tQq5 z`>i2v)L|UUWG=htf@_yiq&7c4w9RnYoKcz|>rCyZzKR*dxbVVxaKgQMX)C)+91atN zk`Hi_PN3479_bY(h1I4MD}#OBC7X4EM`66Z%QqVVnvJ{d6ip3Hmx&I4cL0rcvSfxUQl(r>AX~pC12Tw-WoAL=F=bzU zMQ9${i3wE>f^%V@GQ;$TNC_|Or6wjts@yI5+7(HatZ=uN0b@my=mrM@KZTH`8j z6*{kpc(vjMbj_x8 zPiHqg;sW6$OzvEJcFy~UpR_Eb7#09{#dn%AWGCDR{E6H{7h-Bn)w2h`__C)PP+2&< zMi5G`$ZB|5S;=K+N=p0<2VBT9hSo^`(R3Y2y~QP+;kdu55fjvp_ONliZR(ic-Aker z# zqj~d06q&#dW0ExFde-S z2C$)bjf)jq>GCib`yhFKc>!XlQ@7NEDO<8?P0D6}h*E02x`9$^LZ%zU*N-KU%4`op zg;LlXk`s~BHNr;4C21rLjmorV4z3Crl{@0Rb~AvYrddQf(4VW|tZ)+r3w99Hgqj`0 zmT>?a<8};o6K?Q&I8OAUx=`YU(OIVy>#!4mume4SsDJ#2Iv4OCY?c3Dm;MJ^4G4Q& z@6gt^U+*#k_4jIocZc4T9sv%2(`tn1bFy#%9-8=!$>Q2Tn#zmBbjZVJ7(~!ogha5_ zl%5WTJBwEww#UVSKMCq|?V z2!1_U#yx?DcE&BiyOB6%Hu+Aq`U3$plp;fR!E6^_tk`N9OQQOAkz?G$ULt@@#4y`9 zE>G)$02@+o()mzg+ip(D(;#J7_HC<8&e-up0l~q5I3$m9&p)chITb3sWQo-}Fuj8hX|RYi30JAOlf#i3}#9kYbNTAPHR!+kwuSE)&3#HQq9LZ1>o19EMM8vU)A@}0SER? zi+oF)>d}YZ2~;Zgz!jo`7=Zyf6;NeBsH4w6ubK#a>;P&OpES6v91pl1D(iG_!In&| zJEBQxkpQg8QKEtiR&q*m;Pbgh7(-f|e-%S&98d`-rSo)|%p{``vSlZw%e>$xrC(}a z_FQ_oj3ld_1P3E8|8%3V)yLJ3IFg4GD`5aYV)bPgW83wrkk60ZWfMUeLc zUZXZ%c3p@CHRcY{_XEN(Z~T$(@!0#I`68<$k>Mmcd!aSM6z)W}m#JPznCfW-M_VqI zUUqwT%Yu;MwzT`9=>GWCF+!cTVMkbCVqM`98NXS*ZHzd_ zD=A`?;1Zc%^m~Ox7K;;DC3LeRng!VD7dR1G<<-WC@{b9;*~Q3v;3M+CbZ272-=Ax& ztC_TBs9`=TD$Ow_I}HR1az!E@BLyUhb!KKad*0>S2fT+qhOLmX0s5+E=&wiO?{1{@ zK**%@zzLXEOO3PUS34?u*^|aGiD-A%3g;MC{N#~wfr<^soT{7{7C-th7<4~7@y4Zv zwf>B@4_1uHOdG|`89I%M9sTyKEvrQ!p?NHdgu}ry2wVJ#jCs-*Z>Jn4%)epqnur{lz1S@3->N6bD1Nt&!j|@1|odE2Q;J z{r%ClE7ojTBa95RPJSUk>r^KOv`(|6KWe3r#5ldy@SriZNIKIrRE6%Qn}r2P@&pWb z5ls2ShBq7oT?1uE<@^3J{YCZnAJ>vQj*cvLP6O%B0RVEmS^P~zAUqq*K~P#`^$BEl z3OYycZfW~BoH6xqQh!uXp^*7l@8?s~N9O3@{ET2ZpB!jLb*PQ~!ace_#aF`SQuF$F zPM6JrVU%wKV0Zp!&kX*vXM_LQGm}x-&OqDIjZNSsqH>(`aO2skd9RnGe3%pCt!0pN z6EM#=9ppS8T@hM7u~Y~ z?R4leQvdR!HgiM0_GK?U&W0VhS>L?cI}^N7$W=<^`O`$_EL8`SoU7WFw`Ofk-}Xf3 zV3#)2kETwSlcUb~a(pIu*X>}OMOF34XMN|2))N)jTcdN3KYEQP^(27Xn);J^gJVc9 zMtHo&Rp+*mQ)4g2K3A~bU+D#kM|ztYwljmk-W_H7vEBn6qCA@m8B#ZL+D;%jHu^>& zsb_R^HS>1@hCq@4^p0;6(?;Ejb$O1k)z_k$83U-P#T{I7A zZ^S0Z%vrIuur!OShbPEZcoem;*ADnmy}HA#W<|Zu*Bs3hMIvMve&_vp!`T|H;)dp`6Y+!P+@dcbPHkJI3Xs6MR-d z0N9IFwVOZC-pF}z&QQ?G*U+>6J`l)Ihcsw3eb8{gKEjx{ zFDKUh_4W8H^o7F?7TFI{7JAVLyR+qZ2?($_pb%EG6b$BsnrADtxD#potBK+=?So<) z`Jfo_Nup=N;a(T7=7V5M?_O7YZ)|Z;>JL(S20bTfRvvLgegLzo!2srGEORaNn1h>=0Z6Q-9$vE3Qy3e5?EShI`j803cW9 z&uV$FQz?`TH-5Figm9hW_R{~SsEC7ky2Xpa{wCda3%L62u1 zYW8;h+kDtJ6!6wW!aVFT+^ezQnB-YNXi-DgP$$6q;_%|PEnmcG_%ARUbpb@`9< zX&hoGR|a=SX%Zg$t|gjqFI&f=6@OI(4kHQ4SBlbOh3j&)H_sS5`sw5wR7wAM=6~Jj zqU@|dh7q

    -I#*$lss$#ww}tnf5|LED3eruOU`nzs{~az5F+GlL}3FapRaPZzY(T< zQ<1+trOIZR?zbYyFcvXXEGS#^hhO;2{)BAou^G8b^>|Nx`Fz~2@U1(ECC(;7+1k^U zs!c|m@5G5gE-8udb`BigPMZR3y=`Lfws1GdkJ!4{mfs|8Pd>F4w3%_2IJ+PGpu(@8 zPc^K05H}2wU;G680!UpKU(!5!kYCO~|BZhZpuVxk4!t9%#PG6`!W=vc`2vX!Bv6Jb=|y02NUs#T29C4* zL8>N@cPJL+NdE3OkT_3U3WdLbernY7Ojb;qYl$$oGRCC!;zzGJp@5|&FU@Cp43X={ z%s9km36x2cL<wy*fR8z!`lmg=7mwU zvIqZ!hBga&?D`$eiXQuokP5Od5TeBD4651SN4e%2sR zqLd|m)-1r+2rwIwcG{-dz-i^lgv}|YAebQicrn|k`HS7cCy$TD3;vDQYoZ{QAT2-o zp;E}V-6^i%4{CtyM5JpVSyUsIwC<4S^I2b@#_==GNSJ$?uDIO#3IMMvfw zrM91wDG5B=5j7>UF)gr4mIi7d8nB9{#~fj;v=4xB?~oYQnl-e1CU?uJFmB|s8PczP zQS=JL6C}x2QmppzhZK}pNS0Dj5|&79YK9`aAyFJKhiFlpw|@GdXc%%bVv@T1fvqwP zdvd5vYJCY?1OixLxc+h=KTs5|#0TDBEL4*b2s0{c(o_^fpfZcTJtj7rp0*<=E|*&7 z!Xv=`xTZMW8(kVJRMdgANB(PnR=xVIao=l5-;Y;7A61H_^=qrGtWT@po7YE%V0MgV zqF+VtP#RQf%#CNz$|iGg0GF*eA*ogqT= z-Mc;rfCydhH%9%yv_H|(KWed$6SNIAKwmB@Wg zH`vlF+b%z0*I;U3zPLlpc59$4Wv*A?_l~2_oW|pC=5YK4j&l1;jnCrjBF&e)zq(xE z{AM_K2vLSU0V7cCkMxKG$fQ+CQ@sGXr!A(})U;K5DCyW55zQe)>ZS@K9r$D>5lup1 zltTXChDcb{IX<5n@k#@0Ma(TJb&e4Z6gp?6{p~7<&dhkNVE@hEdj0#WTnNEsC&Y1D zJK-}EOs*!9SG2?>LvkfX*-pa5)za=dgzGD3jJnmE5Lf$Cr@7QMcIJ+BSKxI`FNKt0QUXncV3Dh2yPa=pV1f#;`j zmbu(*ddbx65HH9-h^XHwiCLWGk`F@nEajN>thB*lL&JhbIOz2?xa6oQ1mMLr#n$1Bv#Wpp+vvo}nz#25z3`kI&*X7H z>MBiBUMGjeFiBJm9;y+!4744}6fv4G);x78OBNmdV?)hD7^@*|gtLlsQDr2pP^3o7 zOTz)hedKRus8R`6G8|1CLTW4VGbNVb+0?cs4(rH!>$je*hwagjn8T*gqw>xSkC?Sp zxo?oPhBZ3YOTX*$O?z+4y7zMgjNdNOn;N{g>Q{)Y7j(-uW6??XT+lWI#^^!Go!-BWY3oz|K;3a!(F^wcaPUcROdvfL-cFiL(zjNxh#@S!q2DJ}^PiD9}0i2*z3Djg%MY7En6jVYa>Ah{S(e*6!ip1LEt zo;pi-R8)YTZtzMn+VIL=6Y-W6p zLs7W?U$nY!;BqWz_&okbqTOaz9X%y>XdQK{^xg{TZ<|BPuwjmf1f2A$Xulp}C7 zpZ<3+Q%ejMHJ^`ySKNf9RrP+LF*PXSa>D1*0GdC>2pB$UlssUI@^TuFfI&yd05`Vmhd1Nl?RlwE;6s)Lx|{e>0`^Uyi<#=k{^Dyhp8 z?H6|n)GN^>v7AJSt##}u00t@Q1Q4S~AEaHK5zIwMTz|m4w+3w3ogpPfwVn7>Q-2}8U}d1ZWiv#@ z)~U%a7v+_iiviiw;-`c0pceI)HYK|8qaUeYUw*yVAb+RmEno&cSmzABz@8i!%W5>l zQbno?JEa2N_)BI0>=zR{M$4Y9sY#T((v~dMRUz@Fx)Hf$o0&*Vik3xB*};-%j0`hE z5{jMU{gxI38f)xxDXPl9^hLtx65C#&EIXf`tG~7}j`DOkL2@cNA6G~vvKxl4sT9fw z?ATz)_~7>bE{^5i-d4>}L_FV{U{J*z-Cgq#ULgH+9K$^W+(1AnqH8tolvX}Cw+Cff z7u0i9Y34}9z}>?I81%Mz)+)Q^eOTHcB{!zqeKIN#ys^+Es=aJ2lp!$*LG)a_*bJO9-AvDZq$ zv;*k$#nj??7|YyQQ1HE`@4V{$c@9r8sqw*(81w-bZ&x?!727%H6-!`Bzpk~5-W1OZ z#`8CY(*rrc?oKEy@n=gIa(A5~KjAE0bNc!Fy?}}i7wcIQD)u`^0RJ$9&c>tL&%cfw zkFXcd00mJvdWu5vXgCHz8Ke(rtZp3oP6q7dWDPle76kI%=lW%)=4f$H6@I;Q}!U6Mm1q%u$pi~ z-%#J2&JHJ>{@J(x@DiwDa(h||`$*<(nAOg^byqs=d$chf=x!Cr*Raa^@^L=YGIA}dHhVtiu@ zxT2NI5?U%s-8>MuOoHE8MsfZ+`RYICY9H!9-1R$JtncAc&;1~(rL!-+oV}dx`wlzB zM$<@L&5W~tBb1oqaLqY?8CTf`FG7!*MzRi&Wb2=qX{$c zUKSZ1(ct!nv7j(fj?`Ckg1f+F-Xm@YP*gNb3b+1tyRYIsoi|i6LE@uqn#9m8YC*1& z`Ilk^c8ZISoA=MzWISK?-QhGGxIuMfR{V<9n(N64fprta7;07^P67HS^GeT@9>k^$OlIL}q*$aWp4|Q?937GQCqw)qf0Lk?0 z0sJOQ`OP$b*51B{73Ww+$|4&jt=5M^r|TUqry?nhUkGwwcEG43Wc+om)lS!p&*v5a4Q=0n@_@*RIzxhANumSy)1hT&rN z!Whfv0opH3(p+W_zTbPir$(ywd}eCgtLr0ZCi8gHT;lc$ z;K(t;$%1@Rx%VgOl}`6jb2$s^#J>|gC;6N;DfE%{S~IxGEplcNRC^B6YJ;IYo-*dx zXci{uV){`2I#D;i$^Q6NLnlV!JF8~%<4_}nF9u;qAmem&Z}>ZKE!;3&50F_ej}?%2 za%j_D#ZvK^1~wfGYqdRuQfDlyts7!vyWzp5$ZJ&+DSEwZDrlsXq%YRx%SJ%i~% zd2*TEG_zt>LUyB~lusS-=eD(5qcVh-Z2kgr|LpD`LubgQlif!d#TlS=VuVRpj!DG$ zOlYllK0|V7zejwoTj2Z1`ssQZ|KGvqV@1S*^WNjo+1p~K>dsBTt?8S~H++hd0jm$@ z`b(DoEt1S=ZC3D^)h;xiizz2z?!OfR!IOUiuO=?j&N11qBp1qjaPlXu$I2`Ymb_TA zLQ^#JJO9Ro_w)$7)W20p_j&~OX6cMdPFMF0x;)SHUY>`w9jL{vE@FJY#T;Kb5AY-%|rs| z5qk}xrzJz$)@$F{_62}r>U8pD4Ibwly?jnVV6L9+GT9_iitft^tAyr8vEvnFazOPT z#e7}e*nj)t?;zX!0)fF`4Ar6wxg3j9+%^3GypPn_@8~P{9j$zKBC;ysm47g-9IXU6 zS)=je23`9FV(WRxb5K9c+c9kf=U%)14-B~w3TwlRN_tB zZVN}XWA_4WOqI0VUf(u0o`pW{2lT(5kPV+#_O5aOcpp{Tgko=3k0`xkB6m0&^N$>W zEb`H|B=83TU^cq@iQgLvNItinaRoCsf9~|Gi1!~?uR{!diFD7ACz{4?^o(~Na9Ym3 zRsn@P%_)wgT_I;~58DAeZ(r%tA%gR$udGjVH0>UeAeaUHc0 zBA>eU>-V9D1m^QLBVZYizciJ3lu&v*9v*)t^*I8c3mf8aT_EwG&4ys6y+iXlgltb6 z&HLO9M0(W4|3V)4nj%C2&{>0AsSQIW|4G2YvQO>YVQ#xd)hZNutZdW#5q@O7 ztY-$Q43{NE?>;-&vpzBwP-JORY)p&BWkgSNAS4mjXYW8MgN|z)u**j7mZ- zzD`XliLG@yon6p5qlpD{S^%%wvQt1fi*2{FuCUS^ecER;fYr)}woJfyd1@6so`L$}NcV#M;+~*!*;ZSut(l>l_^&#l zqG89Pn3DXU4L+_DcbE+PC2i{frzkb`y!bYt(Io#@ebE+T8cz=( z-}6Qca?0UM0?vEJIcmg$NsDq)#6xk99ZN^H_2pb?FF=zRG)^bZ(o8JvRugN<3RWI zN_FRt@BMqY{HY)a0DoYM9lkon7$|yvTk3q{nF19ns$SWA=9Eoya)~2;=v4L6pY!Rx z2=iSv(l2GE{ZkP-%JJ~ZHXDzq7d8QB0i@JW6$W_@_gKNCF7>;Mt9^z*ghs!vMt%<) zkKo3i_>pLQp;agQu}=F}mCn#B(QJ&aDxknDQdi1)VX$-_kZo62ucy7W;vLl?FJ18* zhRG~pBf)c=)HsT4tHw5Spn$5AhCFl1q7@<;+@QW2U^_}fXt9{7UV4v6L%%hMB9^h^ zwu>RgTudtI;R)#t)wNC|<)42E{aWbHPi$>%%NY&SS4G}iz8Gh;nEiC#=A9XN)ojcEKjTLO|ABoEh=>rvQ2 z-E$dN!tj$eo3NWn(#m#Y$yheon_8G7XLLc`YU?#1?uGQSLU_aj+Mj5%Cuj3!Lts!t zWlsR=4Wrn^oAp?bh?(-t=h0@wE5SNF7P>-wa97Yku<8sXMlH{!GDEEAU7&`~-N1Ba zAc;r3@734UasrsvZ~5hoh3IGwhpuKnq<&`^nA_^T)rz@gWsjU7(AO*PQjmC9@Is)3 z`+64eyNU5aD~oo#RQR0=wtM5|s;{&9Jr2hRb3gfN-w^Y4Qly{2R<|V74E~9y2Oe6u zXDY$d79#lWhcsS?agda8HxZ&8IuB5m zM%uc-jkb~lzi4VozDGECSRN7qNIlxSwsEM~Cn1PoQV^4#`|!G1Y8N~NAO;r2xSvpo zR6xbYaYC3|bd5_v0r7CDg;;wa-P5rpi)biZ&EnbM@PBAbQDlO~(L! zP8ZtP$QyW<<&GulJY2&McfB`)s}fL3I%5-FeP&-jx~GOj%?$ZcfBu}&{~^Kj#5Ywj zt%Jz-4v_lSL=!D;IIek-fp*fdROWMaRZceJ)4v|ds%2@b;MHx<{Gg)$16Tds!g{4k zUPm;@^%PZX0v35Id+>%3J2P!H@-` zv?F*&N{vKhsae9P2~4x48uAYTYmYwdLT7@$?G1lj0x^HN0fX?n;HJyCAr=atOQ)%Q zUR)j06gs^J9z!iYy>Y+YSTV<8IwSY6yCKX@t!*)DX^!^JZ#*vVA@F{iM778?CqKW# z4nI-Z(w={QLaA1_e_`5C^IgjC+aQNhp*e>$my^?DW|(8e6CtNUAxcZw53Wzcj+&eM z;DnBHBQSRr?_fvURSxeLNdYn7kmWf-W(Ct(=D?x;LlHZ(*=gG^K9``cr@<_ip8A5L zN6#)K0=EV6d>FZo-N!YJ&_l_>#e%Wny|SG3zB0AZtG@HfI3kC-maMNHF$bI@JWj)7 zu0MFjOR(oHEHw!t3$I7{4jr7%m?JaASAf>Hzp2fF%{#I(Hg*Ph+_V&M8pa`qKkq@K zF;M+n(XnYWtolzrr<38E^>1<_|4l#FYK(~#nnFR-+qZ#O{Lvyx`T}c_+5-8PY`@ds zL+uCn-4Aq`)PPx~@OvKj5FTnMgNJQJ0?>fo=ekO>E!DY0;_l&?>WP+pl4i`c7=5K0 zMYSB2h~JTb`PGFabbV4lvr0(Bi!VMwYbh{>`2K+DKSGJuR6Gz{K_#RdfCOaUC;(!& za7v|n_>Wyy<3h@f(soM#f$^+c5@*VE7QeOq+1E=p(R-UrM$X28bLvcuaSyy8{|NZs zBHs`6`)>k+c6PzYoc@Tvq9};TriP!O|0VPlrE8x=XBc77Hy6mp*!f1w(i9Qrz)5Vb z3`&(wtz`#f)Kc0IY#!?8K=$c#vogYu!se-AESZwIq~P$eaKpJ4SO|S%(_mzzC~vZ1 zq>N~?p8tPQDLR@l>N>=&zi4FWz1L%cm?71+omJv(_Hh5_L`?&e5aOiVr9e)pVPgvj$pIVSIq5?)6E zls8Cy)B}+ONJN^XV3uvAP4xgt>)Vi>H(*+$j}yx7n*cSU-UcBOG@6LMI^aH+^y};C zVIqW_miyylCq;yJTz6^5Q|}omQ8!^%gRYT}qH{0l;#UCN&+3eUqrPRO>lb30-Znx>cbmgfi6effsSW~NM^}v~ z?la{h1EGa7yF-KHQI(!`9+ycK)U(Q>lntKa3uRtq*8VAqD!m_`_Z_->Etc(ST%&dYQ@V@;<6<>&Ln**ZElg%JT8AMG zqr&Q&Euc&&RNCePdoDpLo z)+V@j%rBVzJ(3RKbnKjp| zyHuvpi)je3hsAS++9a%LPDsRdbV_!k9x=5U%I_63vmu-jg?)DowpNSwhg`AQavknu zW;L46wlmbUZ@4z*8Bw4zx#$`I3qSff&Z0S=c(EVM5mMH(-&K4U2pjO@W_HwJV7xW= zb1Jo~M0vqRq%9cI|A~BIa~A8S$+UiuNdiet&HGkFxH%Xe>(fH3@K%`7dS;2X6 z)j8l;kn@ZFgUzn3v5VgEc${%t`{+kjw&rRQXPg=f>GZ$Ny@544DzlSqvdaG4N=nc4 z?l)C<_~I8obc5B5;&&rZsG3aU8vBmY&&3`WFv%}!_{&-zkuA5FvYl`nr4oKR1_1`)JZ7;;SB}6&P*qv7X{B?I7-ns@ zg31cZRDGJJlS7?J-P-lpcx&_qF7ZBn5~DKHy=9!C!q{ly65+_?8EYBLk?yJt^*R|a zo!3uTg8S9;6E{d@^OWWPhzKq*;#xMN$IQ^dD@;RRQ&QI|yVo@Mb$>G3>?M^|y|Nw@ zzD~UVF^%ssD)5z&swnhV1wJo%rxgA?*tAt?VV!C=l1B%{s)XBZ@}2!vy`+Zgl;^?v z0Oq*!*SxYW9DB!U}v{h&Phw# zVhr!A#ujBqRqk$T>J02u!~q*+n^x8YUzrms+ltv1b(ThiiyKu|$^)hQ&gUsXWAjay zPddz?$~s+Xwhv8C4;GdzE>B;8Vj(;J27e8+8u)bJ+WAyV=R+rvkybR08KYsv@{(C> z#&}gAtdG8IHEnYrMjjd`Z_Yy(k=q61ymJ}h^!wfGfz?{!qAI;wc}P_Gn7|tzrc?qM zYrADMWk99TkjraZ4tQdjzf(vpXFh#72-IUn*No%8J4|^6HG!If)q7e%1xxg@RV!7Zt+0gCb!y+6g5w;w9e5d-hs<4G`~6-PpQgwvN^!Y1b< z2!b#6PYVB>`WK0xF7TTTvwq!Sx=(Cke55n-_-SfDVQ3+KI77C+(-bK+y!gvc%oR}o z!UhPgg|!RJ6@0r~RB330crv5bEV6FZCYRYe6kT_DkKJ0G?J__GjVYw5j`XQJE5xct zvEwyAPVzt4DuAcVo;ps3sVO3!*o_hn=AjbXIiKK`hn{I-AlH~J%B!*+69kh7EW{^L zMFPw&WG^_lKzI^|v9^XFyGnqbW^}|z7+j;xtToeEkW;Pt zVFb8^;|j20vF9D<$cU-pxBmI+>m6gn_oMB&_~ML*eq?0z+8_D(4g~Uah*rAQBPn3XXs+|u{-jC1Q2a)QTCFHeKo%^V!X~enZU-=}LQ6KM* zB?DY7uFPCQpRTPXxpk$F`uAe@RZ8mn1_4uvZ$J&lOUJ3YI6@xX+I1F8IPpU>6fGf5 z_arUCD>94;`FSlyXjJLj{!AO=>ahLhno=bGkH82}Rq$u7CV{Bq{Lg-fSiP9SmwYC| z4b`QJ&JP`zgYJmditz!-&P6YVO6&ZJD{q@EU{EpV1?CVkXLGfp2TYv3{?bhsl%>Ow zmLikW8Dd0KI$PU6$@DpoT0vcDE`hGm8Bfn7seujVr!$rOKhmKo0$tKA0$rhJsAqc4 zRK-$&`$*mJi@=O*y}^y_>p{7$mHu|B_VwwJ8t|(LBzCseK>+Ryen6AA52xf;FZU%L zm7}w^wL;ua(LTHl0lvEdNgK7hW5%qH8-T&3UKbQ$WRu7*UP6m}Jm*Nb{(#b<6Cd$H zQ-Y;UDHD{wmHHTARm-~e2#YIyB~#+R#cS1x0Q>cKEbD*zS_OktyS6+bh;GQlS__C#n+SE6 z70RLuYJoaQ=>;HM)jP1M^g`hu9)wF5%A(+4UNyE`g|O0!c}@iIKQXPeD2s^Ao{0YK zq})Xj{OiFOnEHkS>%s96P$C=BZq|@_w*LezP#TBA_=a?H)zF=P69fk(D6lqLpe!mx zThRfpq;!G

    Tv{+>oNDCMu8NE42>YW1LvPTdt*$6sF3FZ)H~Qb5ny!!~XnB!UbuI z0kMvy&ao0Vi&c}mox(+r`vZXPzNgBuq8xjGQwilL%xph|B?}@-Y#B@OpihkH9LJ6N zo!5qR8i~9FMAn2SA#9%fZJ7-&*bt4iOhSE;d-Lf}5J|PR{mjo~wq$EZm`LxREYVVG2t`lz@q?_PO~3kHNmA0&?vPaIUl?LS}ErG#v@p z=~2oHMU=RxY9c*Sv8BVp4|ebW{?$*Uh;)lzzn7(uqyQzOC7%;BkBqJ?H01XlPUQ?g zFrbBn==eo)i))$vF9M6`!ab{ew5T{U$&A9;6~aMM9E3Ci42(`AS^62P6Y>} z`RPbNBxpP+32aTvejtYR-x-}KNk@YCO;-+U!!Q$5UGy9B{@tkGMv%xEEO=S*Nu+wv zU_o@newlNr4N#5&Ki*=(8E?~mgf0<4dmpE%Y5|8Mo?0y(QqZ_`tx`k@d#BpOG_=Mq zu#yLW^fJjdUkU8MNeP+l{WxgR_fj6D7kQ(cQW2$<3I^ybM`Tmp14Fi9Wwm%#B3@&H z-&2mg=7Pe&nPCc!QLO>*eGGm?jp;u_L0m;)nmPvZx4!^PWGhu=o}?6C?zd<+NY30F z5D=)~L)hOM;a#>IBQ>WsP(fn^oFPXDVCr?2-2kBUErDaVNi& zT2)D?wQ(wdg5WW#E#Pwucl21kL2?Xt>;9WA@uVswrP{bvz=5WdEcve;bhag_VBW`Z z>WKSLl`Ax7o4~qV%KwQT@Qhd?ft3E8KLe5lS;4DIuPzdusa zjp>kGk?#8cR~96^St6XvCi6*6h?o%+8{vwa7? zQO<|*N9e%(e@4rx*mWTw7IV?$;J^?-ZpEdh>PvF(Car*qgVhpehBZKjsah`_W~eNC zh(^ee`=Ew?M9&|M+Aq?<69-4TT)&_LLu|{jpyKRsx-k6o`!Etdy4|)uVbmN-L^gfV z`jaj}@}GqN(Zq@jq%xCMvAGQxBZn_HbD=T|J%k@{l+)JqHQF$~V7eS?{Jk&sqQieRoJ2YevBXVvorydPm3{{V1gJKzBAw>Mkj7a~;k=$A; zTzpX$TT9(PWDx~8IBf>hoR3NJNAIotO;%*_CqqbdDtg`GWca`uaRbY&Z9YujluR>R zY=k3$as67{hbTSz`E;}O3SPa{UW<8pYviL`&Ld5np@1<6D5DU@Pr9pS1 zp?$bhT5=g9j2g%Udno=dr)JCw-IthAsgYfp2PP?t=Lq_4OT?8QAI%Oe{u>GOi)Ek9 zFnvQsl;ws$KcM&}Es2U-{x0x*hsh{{39%gmWdqo_UsJC?Zus!x4>y%I)^#Pm&}ESP z{c%d+PM(Ih$Fg+3@MF+L4OVJ>gd9{YXJV&MaoBZm;_G^Kn0*!xQ3Rz;JU9YlgN&E- zJj@C`i3uariV#qs>|7)QVAfYYYpY%{sfaHICCA*-^kdv99F&^5aQY68F~kH}!N?+h z_*9?epM-5b4&T9Y8dS^`Ew~To`3{$mJd>VRe^Q>{WlIE)pi&MeuIsHkGMrhR7VC!K z@9R%Z^xbBaR6^WZ(fxo=a0_3R_xc!|V|MtyxspxDd4`bcfdB(Uktp18^{I4`biQ7a zPnlRhH?`Y(leIqT6fz~dG@dej(ABpx-XG3ZMg88<87_BTw?sGD&y~;n+V7p&TD_-y z!{`ZF=&qH<&v$MezbtnQp8J`)ch$BNE}>6#WeA=fS!7qc{b=9p-)~;+T%cVhch#+czkd7b{%XLi>vM= z;lKE^vZxoKXb&$ZnzN$Qf5e*}&vCx`$5?^3JFj7)?-%=BFGWP>YAe#-U!T4_smdqw zkcwgfb3U{3I|>^^`n9o_=}v-Mvo~1;MlfSL_g)>=3|N-VfU zIaX+-xNFSs!sB}&)%#$*AwlyTMQaV}H8T+LiPNwQsfG^>oPr1Gse8b$G_@od7rHL6 z95~+NbU>!z%rafdVB1Pw`K+*|@OmgU#BUxs+3R1Oi!tV3!xaa8q8!t*lj84$l0j~f zYf*y3QfJWBY%xDO!wQ@Gti6GDy?{fXnjbmG!NOIGG>hO3P-PJd)s}nX5>NWB$WSfu z^Om`=znYhB^Dy_tyY4CLiX*3|pLTK`Nq4?r%Uf%xUx|DLU4D>+9yLRWr-VtIPK! zlsc_wJ{_&DWlR?(Ub0mUSfc1%dcjADL~z37F1wk<5ON!vpfCt?Jv~&Il*h$k-!JoQ z9T-t#Tv$4rO{P=fePuGZ(Jvgb_rraZ@PVP8xz{3Ht?NPTNLf3n4c5-9vf9=UWuaR;E^Q~7i zO0<*paQ!HJKTkC5dxnzvFF;KZ?!i-`Z9e9ePA3UVQje7}g zBJB{aUyE?rT<^qWN0o^qNXoO_N{CK$slL})Q{-ILbbbOk>A-0~;X_n@a?=Ox)OBMn zEH?N33gWaQSp#*E$Kdp)7kVvc5SVd91_E#q79VFV43ih1 zC)G|CT7PAo85heoR=inrhRMwl+oVHJ#5y@en3CzaKIoYO$DUV|BK}VD>WGpm$C6%usz1({?SII_ zUl*-!z%-`j;w2}}7vQiqR+831meU`k6JVSqh0IgO9S4E(o4Hnn3 z%gU=0%|Bgpa8`+r+DcHw*@2$Xu-sa(TXb(tU27SKY7D$zx`%~Yx7T)7a^N&+Tc(1$ z@ws4q@@%+=^MR+#2tcdg648z8Z|X7-9N4eLG4Lb{`s-rar|r^y(on73#C@PAeBUZZ zbXQNX>CWyg`X@H)gl}E6Lk>H>g6xldWUhaSn&cy)ly4IqrGIfr{SaR8=f`WIbFJP; zzxGa_9`3{I`TgVi2bC8lkw<~ys!H#yLWj-O8wZyyuV_-1SwPAswzpB%-e3A|9-&?( zY>34pbBfgeP7`M;KmXBLV?)|)tl+l2KCIke{{CO=<@FuKDXsrJY1(>$ioQ+BU2FR+ zjlyVk*tFWpY&mxXPA{~axnQxrFK4~tS zZ&dYF4>@V`f97espwCA4KYd^YU#ci)Sn#`XD>}ctP_X03_57-Hi3&8IH=4+h&%Qo7 z_8$$9C;jSDIFzD4aHz;X_lT$fi6v99s}E~=lH?d|3dAfZZw8UQZ&Z6}+m@7YH6s`A zS)Tv9>h%ga`w`x{Xn5=Q>DqhAq^3s+8CtrjfsL)Pm5{&9b!18~Q> zaxNFn0V*mQKh@|}tWK355AGVCyT@Hfty&LypJ_L88;1Pr=-vMGs9$j>d=rX7?yavo zYvUgqpm4jIDOEZvPrM)cH#X~hK2@alB{6iJPm%wPrDZSoO?k4z9NzSlq*&Hg$6wfZ z(J}cBtsd+CWAk8C1#f$A<*)u@du?RM=(_;}-X0;9NYb6Atv9pwuL8lg6)i&_9=IRP5Ok=^eI9l*8SQrLr^2EJLGakx=WB5eP{^&P-EJ|!`q;GjM7m; z2dl4u&?@@eEUle$qv&;ztS_(5{bwrxK3npQJmCkbC|a|1KidF zgWKsa_X zn#^cU4|d2pN<5lpCeKRoBmp^jptv>WigdqISdv}49#e<0F4$D-_gU$$EL;J$R80>r zb|siLDbO0bzL8mXD7M3nXP_d-o&B8~hKWn&ojV~8Jbm30mv5g6n(Xne@4AE<--b1< zz336^%`~j^TrsCQ|JMGt+xJN9Ct6__xlXZ&&AZ!Lj!Yp2^9|?u)g6F`y>P_ciz5r3 z?#SM+*6)E+^)`3;y~djjsYIaiK0YyFVhM@|&EaKpR(;3rK?`_kzxKZnE)b?;WGu{KS;ZBzoq=kCMZ6 zn@|vk&p^MhACufaU#@c;Qh105bsxT-E|`JmR=Y>@5==Q9^%{8mZs;TTe=C|gA=QZ|$o1U1rz+Fc*4~*&bk`X0aP;F0w!`v))6y>i>Gvpp_^rz$G@IBn?f0n(IT3d%|$+HH1hGB z%yu7|m>WLd1D-;Fsb1^IE5zyMr)|Nqj)>rEK`qFpBMV%Qt3KWoJzi^ZSR`?*zf z#mU@b?{^32|K7YqlgKCWwIw9U4u+ggjM&hJ_qARTxfDv|AiVg>Yyr~KllbMyo^9{$ z&%RVyDX+_ixsGoHA~}xVJXYk37ZP!@*g^@P3ri2_sDUU6s{JhNOsv=SEgC+5WHRr;x#L>N_f;Nn3=o1WJYMQ3@8Y zMSAV}Z!cTYazg#BBI-k(>!LK%j^mIG0^QB z!b7LOyW8l(#_z`}lqJ)1l=Z!^YlFj+F|n-aHHFR&L=7E*cmJo0W@a+Y!bFLN++J9? zywU@|i`Uq5;N`I7ZxC^BkY~u$x?IoU+U1Ga9^h+lg=gCSEDKCNxt{rBo#8;ml#05a zR(D1}ypc-yY?8S)omBhXzIKieO_M#p4LvU{RbQFja}6LL5v_~HNO-3UqkHoWt+$*h zzbVfu7r&97KHqk+JN9m_jz!tsM;^KgM2QavfDGYc7RQ`aHmgC9w{@oX(;&g~GiQ!e z!1L-}k)vbkmTg+47M<_&Couf;!`^yli?@46s)v+WeE6p+5xzpd{nex{f3tPFUmJ7$ zti1uJWFj|MpdWL|m^(KEul?o%#Zd&o+p#nK<}kxyRu)aPEU!#i3Ye)zt$*cRXu=oI zqC6MfpRvJHD<>P&OLwL0aE>=6cav=OfKP08IE|k&`dx3X6o-v{faf-<%%4j8=JSI4 zJ?s8LjRYN4U9jz(Kx$!>i8q{S(~wH?5z`O4e3V}^>DYv+Xr~=}!f`v{6hCjkBlc7H zK_HZE(eTRDNdN&-)0Fa1BmdlnH^8LL1^7MJKcbGW-Xa-gGBVv zH!=3vQ$(N#^gVnz_8U~O`nWAlOt;m_qcTca+b5!a(c1TZwZdY&P`Guz#r>SZrVq0MOvUd*FdNeeX*6;*{m^8a~4tj z%joi@$TSmlFlm*L1)SykTi6H5{q}s$>|uHrjqF-AHWnRFq9)dO_+x!}IFszd7I;fJ&uB1Mcb;W?Oer_SLD^JVpwcg$AwT0x_Klj(?M*8!aC%lg*ALmEu z7rr&u>&ka9x4=9NxCJz3^?e;*`wg3(T3gL@JILcGk%lqxw5k>1oxi$v)Oefspxope zScAuY-2V2M7pV7Mi>V}Sh9{E5j_=67oTwnZ~Uw3r>I3NDpIRg*f?0cX}0C3<@J2s+Z+C{zau;f?O zaCMwUnWePi@jXMWT9@s#0xP;r^EG+Di2s{cCtz+)eiK z4RkNK1Pp||p&bS`ey-N?=DPO_=l{=Zj}ZM6j&}VCXAeEkZB)!FrgLuh=`@~KNO~UH z@UKviAs{2FQB2K`kTORild5h-FiQ^-iLypED%ML_Rd%b$C%RoNkM)Zp zQQ#ccd>5blyR7mr#R)w5;sIAeT#G@ej7nP){Tu2K90=c^_jcbyVx`66uFjC%nM|aL z;{qfs`1JI43S6X%Iw&w_6%?sPg#V4n;(t~PY{H^3k|)4b-1>2K8vndtv&_fTl_=i& zei~YeIgH;eZ)VY{%lMxCvMY|nJUL=1KMr7{jaD$||3r|l*=y0xi;WKYD|>VQQW>4y z>fE-N7yUR*cah)t4PSVpR9*aZUoGN0IimuMCHvb9wg@gkR2R-M9Z4>lS)i6)K?U>? z)Y?xuIRXdxZbnZTY=ee&t!@vAa#*D+bH+m4FZbXL$KM8!O_~zy10`O9=bt^>3A}+z zY#b~SDv3iWd@`F3DtA@R@772V^DOBz;{+coo~-R0@+`gt2PCVs@L!PpqQI~p15CLvmcoYa`Lvy@+~ z#%PZksZ2fX&n1cKl3Q!hOhII!>R$kc@UU;HYiuF@AxVYDsQGr7M(o@`jqrijCOBgT zIuUGRF+Ee`v}}oRm@erLcJfGLxkT=NL7Dy?`$CsIy6MiF)J8Qrk)N@q^uhDYU0de+ zj!M)B=f~!5HjSH^+1r08Q*|bDZ!M#4o5y=rA5NC#Y=7kUL|M7yW?i@IFsA}wiZ5Bg z&11WakU#Lp3nebpai%~G8livfXbs7lQD0A>3wfpqV;0v4Rnv_4@5c>&?zd6_k35Uhr1G^_EhIIgR-|d% z{is1j?T!wJu!8-x$d!dQ=xHP%TmdbpgxiWP3Q>JO^vqh)65^mprtg}Nt9S<`usGUA z6}>ibG;*chL8KPi;vNO)gp@XfN38w-Lis}bXZXJgq6W$6T-QsG1+QVo;=i-RFR!A( zvCzjl`{4c3pQ|>72F(LAYFp%Ty@77>>NaLc|DZ*v$7Pq4t*O$Y)su?GWv^oN1`#IM z3osFt7)8YqCqi0+6O+Gw6sq(m)N+h1AZ>8kvCOoG%e#7%W`r#8rK0(JMb8m>5RE_h zNto)&FyvsUkX%X&-7;{{kEPdTP%y7hK1~nF7EAm_Yen*tFxVGB=7{<3O1Q(GyI-cX zp3+r{cw-@{4BfG(3P0c7CvRxBZ@Dhs2+JRQjpkJybUoYeN3u^+zu0#QI$joaTc`>p zDBjL&G_bWV(t}ZA@x%UNR0aKjFV2BSO%-) z!ln0db(SWO#u9)w)3r(%^h8OA(1)U-(#J~sPFNB!;*z^-?mN#Is#HuEZ%(#gJc6;~ zrYe{4yE-Vrbda!8nB+>&^6)U#EF`(aG>{uNJAwH(OpEO>Fk?>WKq3a}cSo6$LmISb zG-(xVI40@}Bv~1g4*py%XPK5P`3iZvIMi=DuP;M~ThSbY*reRyMhU2ii5%11a^vW7 zis-dQ>WG`@20Bj}=vFB?An0yB;NW@a%+i~rRix>d5|&^c4~VINv{|3&L8=me+2X#| znT8^N(E~K|6FzTWOJ&ggC01w9*H98HWlDCwV_>~5kZg{(P|MfXt*09kF4SzwUXl7v z`4!HiBsr{ZS$b4rVLSQb=)iOjhq0(Q3qw(F<%_G9`!|MSPtJ)v`OCKSK4hq&^zyIL z6PlKdd(7B}8yKGUo=VG(*@CXMr{B0M zj&By-zj{F}NW&q|@-|CuVMG$+=D)=_9>)=D2!uttc3_(onn*RKCVT3n#PE25p%^4H zMqq-Nx{y(O8)H;zk^S>WJh(xGVXRk{^B*|Bfrd?_Q8md zk;Pf>&VPO8N}HIsQsdf?&p?Q=%y1MRgqBw}6N0-)^?7Fc`;?A8I1!!+=UJYY{aZoL zO}&Mj9^#Kg_A$gCE_OT!PmB#h$Umm;#}L3Dgb5@F)-Sbi-3rYGm=M*;1>`?HC`gTe zHb+n|LpahBCc}DG!bCwBDt5a;8Zw4rbdMo)XhUwWm+C>V$`qJG8dBMt`~=x{xo1a8*Fzad^?nN>b1IytYP@8~qBoAot-vnzT|M{-Yf6;XiKbltArKA>hT^ zYV^^ilrj|*&RAl4_v>Td{&hxJ>6(E)rAf5veM2OtIPSfWkM~b9BV2PC&q)G18U^>{~iuJ%M znlFV&{Gp`WQ91<87CGS~U|#>e-9$}_N;e<+Hk!{vT*_2edt%QE!Ny%u!hm6HmkoJ( z8H)fb>ToQKDts($_{&KrKGe=o=E54TL_2TTc#5xSSMx$;gprmTB95Hfe8y_+6QTD6Tk83yALa*on1QzqUCb z%qEM@R>@;AdBwv zQ=}s)lPp$H5cYof0!$IAm;|vD*r_w0=VpJ8zph3Tb>+XV2AZ!VWW->kp1l2JIF(r8 zj%bKQ#I2Z#k!@5CcPI3yZJg0%oy%@}uaX-52b;8SM8WSj;@*!i%Ya*m9Q%bc;W<6y z zQt8t~l`ADs!v1LUdzD)dvAR&Q`d;@|4>^f!G#8Cd1L zLV_n`uE)48Ri?+V9Z9N(Vja||AdL?6E_H?~Vib5-;#0pMS>mT&{lR#!dDNC|BDKs!-eU*NWg*%a_jL)S0b7c@uTRRq-?!HDg?B0xc}zr}!21euar;{|Y<- zSIUxrb(`OFrk-SeUw;9gr&tds*d!a)%$9wu?L6p$1pcxpoxo17vpaIz)SFf`uIoA$ z>BA_nv|#sAGZsw2(GWRkkft>xuzo;2oEC1z2h<1s57cM<2lXodL4D2#)I-r(?wINZ ze;_?fJ{^?3)3~kH`$vEd0qBnN?gS%Q{Yvd=xDW-S%MBTsMM=hTktF4?pWS|8ZdF1_ zhSx1(=X1^3|D@CY#vqo|c)9;2N%)=~NiBVZS1id6nh{A&k3EW9Ub&_PL5;GIK|F~m z8aIS)qJe;X^zcCkJO48WX%O9a{uFv;7lrYUz}!Yk_DtX}vT4Oi20YzlowiU6@}JGU z^7653)Dk2klOl~S8V+DH#g&WqzTv}E6qzY=YPo$BSQtIL|G#-8wXSJJNYhJ;f|)aG z@u~+r4#KVN&y7aIR)6CNSi0h7bXFm~bBzYAP&7zJ>b8v~#o7{s_4ayiuD)Yb8&AJ> z86(UY&30T&umS%JYi1Cc!_D+f$u%F)qe2+o_1m3$fKZ4eDoOlzUXqxQVE5}6l91;C zXb~q-p8y_yVucp1KWO{we&e^-NcId3_h2>PW&6p%idqJa+;i{kP!9b~i+t5`47qmbiZy4g=((DCGH2>JdxdWaxrG7F4r!)2+i?=` zl3*bZt7x~;z0sS`{iDJO5y(gCVOoLb7S)L+o{({K@f=Rj#T)}+N(laf;cj9Icz8qy zUQADk>>?S%!uCI^f6qFyT)OsbK71YXR$dK;_U|lqfz&u8_P^SRIHooL9Yum$ek=tq zH!4;P6<&3N3KUN-^#J7#jOBzsM=hk6ZQuaAN8TCMdEH$D`3&L>qx?qryM}zHb%<;E zrG@PH4PEArGD4}|qXAov51txJ679*DuR|~Ftz7rkdco9#Oov50L zU!)ok24Zw4$){!;PUNd}2uaUut8S;|44>R^z;kN3@LYy^%mB*>CThNVj&3h2C@S^Y z`_MD#c|%JAAfDt4Cpj?Ni_!_yuQ-y%u_y7bWmJ3>;ZP7|a&7&cZ`7s2zqEiO8E(Hv z!6f&b=igOU`AZQ(`!`FAg(u#nS<8=(e1lcZOKb++^@)Y4K04Cs{-7*VDIU2&lG3U8 z4MSPpIMVZuMS!{QT_DjIfxKfem|47{+3c0qBtqLH+i~}6g?T6utpV-+V!4@P_8ED+ z$ka6*l$UuH_I3jCp2KI3u51&8Jd`FIVkEDTPfcytRGz`7i3Ds)~$@dM)J0dOZk+(C|HC@*O5t!V;0=(sO) zw;0O{q#e<;nD;Ue*p@O=9yRLEFc?XJq;n!n*ZFWmut->#zbk%~-^Zob+eLQ6`g7oF z?kn@{wArYs6xx!q5Fxb{hRSN( zDK*OO6p&F$Am2l|Y;TAV=VmrO-p>(z2frs3Zds*(3-r*T9n9^ZM4)!YMu~-p{w3-?uhE=m3Pew5UH(e3T&3>>;wZ!8)yFhaXV` znnXIb$gXU8lEKPF!R0oVf69T=p%8y)7z!&)w1+b-{?&|(N>!u8x4#HQ5A@rUEoejR z{c%`~5iy`K)Us)+!Md@S?Ij_;N{w|G88oEn+LRT_{G~jCiL0+atZzymtV@Umq<6(4 z8G-%j`{dcu0XXI><8_$or%b&+Rx0`xDTJ$nK3B!XF1YK0+JVTA?82=`Ddok~R3-Pj zVN|4JGk>~v_94+D4PQ}3aY(o3b|4QfH-8Te?K~VDoc(q){xSE*dN;Y+bcptBGErhy5B7Sc9FxH;I6%Og&8B#|y}ESAJ!xanW>7rOmUAA^zkRQL zDts$qdQNlhRy9!X{L#nb(Bh$|Ll_&MqVb}yh#dJ?ctVocWm#;yukq(2CEt03%?e1@ zDP$oL0c_l=6c8BIZ-kQ=?Yp~YV>>twSCMz$&%mU@Op zznL9Q8;0C$q~Q|F?*cVjuXii|&?Ets^_g#EMcLL_t@D;PKJ5lJERIIk>erkevbi5b zz$}Hz;z_+e5}u!eo@{$D*+#B^*5S5q(eBDtWvK2B3z`{mdZ9{_Gb?1v2vz>A2K%2o zAo^XEw-rVDe|7#uwg22JCHvFhWj$G&CLnODQc21I|zZ{}T0-aM>3v`gE$$>b;dw`{Kq zflCe2jVZ%_nE49#!Ubn)<}CM*b{E~yv$z71*=} z;54#F_9d>uSo9#ZaM@r#1lJ52SL)##K)e2@nalkhmuX&qD}S&wq<*xa)+95}uYSs= zj9%O6yKzR2CfS^2K)s@QhWeR0QjkVEW;()3Q_7Fr{+!Tm0e6g6@Cp5a zj-6>EDt=3AWvrjhzETBOyaM4))Dw5HIk0jrNW~+9!|Nd*)c@q3bFB?3US53fD6;lg z0X(cH&+1-)f3sYxEM4tfmiHfO{njfa3Y!M$7Mv5&vp*%<^L>7xM{w#3F1Lv!pGRiN z8b_L!LjN=_$A>sE|Fh~6vl1{}0mIpK%Ee~>yq(IdK;m&vq;jdzpB03rJeW2$xra*G{FPYHyyH(a`t*%IUMB6a==;W+OmE+~#Qmp9*ZpFiX5i>m!I7Ey> z+CLZT4b`FyB?}i>u&NI{T6g_y)Y~aGdmQC-w?dOr|KYThhWr(#FYmD^JdqbtmM@#v zS#Et$67JA54ONkQ#2%na`)y(xvX8`ddlL~&;2)l}lYpK$n=86lLqQ#&f;!F!!kyzL z2dtLF{^$2{OG~uv#xE2Ki9x=ZN!+2X<=FvdbXP%p}dy+B(=|foy|QF6c<|m zVuogT_5Yw+Oux3X3B5p>`+am(7sUb4^OTBvx)z6WPQ@LVt5eP3azfbu8DR6{3jhmQ z&oZI@PT;2-$&`&9M?8@cgAC{`LGT%mCerynY0|H!WqdwH+P|TFIKu{IN?E`@AbYEY z-#hN=d(g~N47;;o&W5PfQ#4bsZH#G@@}qRSfz{RrRWBIXP5aN0i_K*|pM5Q`Vr94A zCM{-D=6*YlZ@NP$zD9j*07l^Paqm_C^~1fpbAqr(9n7+$2g!vlT2OH3F#Lt!#Dp6y zFeMbz{scnc8ywNIX4{QS5GIX!rh07;GOtx+vW%w4sB{^+xv6J)PfGMW>!&-7q?-8c zq-a#bFbeBawG2K(lkvg}Z{28N5ujnO7KcOtX`L zydb^Ld}t-G?4dzi5YlTCkx_$Aeg$f<>a*D%b)z(r(tkI&Tm-Z;pT>X{lOWtjy?29K z>sOD3>?R#%?xy=;0P7eES>>zk_2sL_SZ_~f5+BUs7U$(^QV53~e62IBdf%5)Mb8Q4 zFw=APErr8*bnGG~JEz`WIM&QuX012XM>^zEk))9MNK6(iQ8`Z)wU0}*Ooe;|L4{Ji zzwHe0rC}{_!@k$H5AxX(%MgCA<*fG@LT@<)3}d&(*+X=%=(LR{_n&=j*IgI(=6B?r zkFv|72i-|qElt2c+C`h`uEnok4Q_))&|N{9E!Lx72sVrWx>`I%1&LCa6c7muJ8u8D zzmx*-!^)Vlhlqj4a|_No{^Hj#xF-H!t|p#ON&fH%m;RYven~cq&fGL?-&l5y%REJ} zZ}7j_;JF6hQRaKi)-5&WRT6k)7qn#?IwAd?hcf%D0QI{>Rq*VR${->nHu_eTc}zJP z-de~#p$wpTA@&cIu<0XzpZ*sPs~l4vYmLKN<3ni|8;v0I%i+h|Uf<}$SlZf|-h2OJ zD?%fs8~#Smng466Zf%WYn+%a2l}VGm%~LG&Prpd>H0$+?z@*{f`)C4omeu=Q zLAc`cw}jrOc9yIBRgL7<9BvjKb^E@VgB^4^=?vnJPwuFm*)nooZ(g0l&dzd6&sff; z5ni855*;}s4dUWWJ(45#!!^aCXn+&H#M(}9h9)6ZJ^6z(5ToiJByduy;|?ri5DUh7 z6~gScA;);jVK~j^*BeJnRakw5;2-sv0f!dUP}-ac|LAng3Nn&^F-# z@oLu%&*U=x_V@sT>g|}eVwu-&fqlt>haf+u|*s9W``_wJ# zknrVl+jS^E;`VBSZbRsaRx;*rB+d#uCn{b9Pt#L(xbW4j*F^Y00|n6WD5~METo#$F zL!x6q&4+Sa2#l`bMT+PNiw`}v-HUQAqVcfG_Wn`YFnL9+`cGn7qB4sA;s$rj)C6oS z40J2=4KEp6@Y4hx-+DHK4=McCF4K+ZmSTFSlKy&r4IEq*|wz>NOZz!0gDT*zx|w<-ycYghP~zZ zZcku)Rzsm^NHGhHjI-B?PSqzCI{vmGpWnMZq6$r&hD572>%DuA2`Kur{brXJvRQ^M zlw)2_ITSiHySw!s3+svsDg7iwiy+G)r1Rz^C+2oqv2HJ%+Xqmo%Uj(~cz@?Cap|~a zSH@8{R()=a5=~I@JN{2?SNzBpMmqnv;AoP~5t6ft=bXYb@%~e$8Pi4xlaizAP*SXU z#vgdkRM>>vKh{`e-rGE$%kf<}i<+W?j^ftql0_QOc(1763AY93&`z^7zUwJ<^oF=4 zrb01}2lVC)#{ovvuy4FLA}Bbd3Lz5RmiZv$Im6T<wH zYgR{Jh6s3l?08%AsVK{G4bix-FbwG#YT)H@^d^eBP!mt?i~qaaz5n=Kmj6eJr^NOA zR)5OT=yy_8Bc}&YEuom(4h%eIr4^6&&m^DkC!pAdCw{tmg3wj$BxP>;Ity5|34_wz!>FU!bG7 zqK)*yvkm8q38XqiAVOhV&4e&3)Tcvnz5=;2pQ+W8%+xyXiz9i$P0|vE`>y>*JYnCS zp|1et0;fs+g6efg&?YN6Q%L!>9R6EK>?Z3d(y^SL>#d&E{`6zH6zwN*22xG=I6w>O znFu zmk?$rNo)mjD?}z+0=1Wj6b!x{S=5@WX8D}Y9py_=NkfyMDmFPXa05KK*FqJ}vCO(W znPfUiL$eNXVXVm4ojsj4kCm_*QFXmMRs)v401?akgEQN`gBMC{&lfzjYc}KY{MVPM zN9PnKP!H@oTt_&$l3rkUmTCg=ys)ezD|o9 zuTYz#so`utaYgnU^N-~@F@(O`NudT+?g*C>%`q%z%Z6-rdD6b8zrwNdKaRt1{an@h zI&GdxI8VLB$1K8*$e*tp!wiqI)g7r9r}{T|HdkSo_J0nLPO(iyU;u>S72U`%Q;@5* z%}uHA=7{}2G84rHC|bb8eO=rZYO{#Pf7G76E!7ijF-YkJHF%vaDr?vteXJ4ddD(Qk z@;qsz+{4>$w}*}S`LjXIx@6Bf2`^hS{*eWMWhn$>CA~iR?Eqn zteNro!qdQ9oHaejcnr8x%{FBGG^fK|?U!B6--Q{AFO-N;UsfseEmkagMxy7ur+%pK zBw!$E+U=Ju6*=5?FrVD1=jy}cFF^0SI*{kmNL5kuNxFi7B&d;*yeWJcmD-P^qVM>L zUIPQ57{X6;`Mwho;Z5ZeUyw}y0WH=c5~o4>4Pn~Xh|_5qfxLMJusLSpNuoVlUsZ1? zaiHRM`}h1;;cWHkXvMr4q{Uco-q-r@xbO=JBc~c>-vIx+>g}0{ZfQxl*G0J82B<8J z=hA`@Q@6367Y+c=MZiAqD}LhDaK{ufwWHM)^rr~o#W|kynh8o zqZYgk%+k_qh#h_fv_;Vvg_U#9FW9b2X^Ic->bg`q?Yi@u&>E8n^vtcz#rTc9P*DrJ z*?A0NYnDT&pKTCiJ!|AUk~~S$nv@g~<#g=#jP>%9VyplXTe;Q}Tai7*vy5Ngv*zGZ zKa0oc>UYI|E0ndeesO3qqLo!nluwKs+ySwjwWj8N~`s1%)`2_BC$eshCVkO5QZfqB3auWDoC8eHzi&GouD$ zGV;vHKK?v$OdO!TVJDfXNvs@q+s6GaKzwR9<~m{cSH{y%njQ^ym^elGo&oH5d7vW_ z!Y(;fG#?jJ@GYOeR27vzhFf-rqG&@4cje~LSf>~e7}J3oT`JB~RO^S&TjT6yhXY=R zVXLx^q-(2HW=EuhPaI7CLFFKD#lQnysGrK0N-RO*UA*Q{U(eVDR--Cjq%Vt-^EC^v z&i2h+XQyNHYW}*l)i6PzUE<$LF@|JqvqM=ct9hz#HL+1;h&4fO?Rg%>?4(GSkB26i zBH82L)HjKgMwBRmT8?HHN)L6GB0_ z3Fv%~yj2D<=-&1rehoD!Y_ezDZad#U!td_icEgLZItoc&W* zPlYdy5Xvx+lbx_W6`rCIgrW!$rIx-ys0+=*QZ-v57krW9C-#l<6MJqtWHC(P38jf8 z418}D{we4kLSq0K--|h_5%k@$#y~UlQZ>OAUg_- zY+TU%QT7~6>c~5EsY8O&9Zm9vPaUeFUGoC6loq&C%@gW>fW%AGSE{J)UZh zlFEMK;T@~*%bQ6c(#+vsl^F(wU~CmgIf_6Y-#Prf3V{8SGH}EC?)f-1_VD^C8tFrP z08!0$kIma<2SF$rcz?Lv>m$I){9u)TAW2ct=%$N-h%j9S8TMV3{mIEh|H!!xL@?SwUJIi^NCFQ zroQ;TC}&v`M#c>pTzzDkeUxp{)4?9T-AAp;`#Z!3|61p+DW=w0w+<%B-u<4gnwu@U zIUr$>a3sj#m8B2{eLu?2_H#%=I)j?}IT|3(LAC=Ngv91=12P|x&A0jm`T33*M#r%$ z>_uTZ9UA8N!WNV_z=4A#7eT?d`@J{+Q5n=dz~P1ELotnmmd=^ocos)ckdc<_`+f{k z9ON)TBeXG!kVPK#Ch2?sx}DSfXOKf35^}d0eVBs|61Xvc3W&UFC+?mUkrsW^8+bCi zt;acuPyrGY$F*aix!kAS`1n(YeYFTTaf97oMjl%7<%5 zUFF1?0>AzbSLYZX$rJVajcwbuZ95y=-q_e=VsnFuvGK;XH@0m%+1Pjf&;8u{;(61k z>8`Fi_3P8!HC5kZ*$o0niU{;GQ-QC`b5AUh?0}(Hj?|L(z_2Tpy|f;j$0pB7-qQ0n z?3txviP;ixL2!T#(N3p-$Y!N+Y#6W~7QMwE*H5gaFcL%}uH(>5KI|tYY%Xuev`NV1|Zz(LV3KZFGf&Fb4u=luttY) zRy^7B*pCi11xM5-UwK2>{=B*L+U9z!j^d%z`~@|dSc{&p?{p~V`?vVH;D7;RZ#oyQ(p?TQdasY(9tU(VykRRdme$C3&!l&*E{`GSjENjTaH` z?Tzo&d;0HA3WJveUjhL-YUfqx@N@{zl%~#1f+fXt&V>pvSZx;hAO;OiFen;^61u4+ zj<~L+fZ_7-?x_HChP%$XT=SUnkPjutGti1lBq|w}WK<-J$HMeGCTNbVg7wQ;+B$O( zN`!t*kwIk+fveHnnTO456>(5WNw`9!38A)9F0Q@8zT}hnmZc0hWje)>4fI>Ufnb3C0-sRd zU@OKfGrS+u62bpz@vlM*<>D?qzp+4%@V**WyXyl4oA4k(v7wsqRSeiYDH`C^@pG!x zn~B8vAzo~c06=uUoTqf2TZ|P_I_3ibH@z9 z7HDkTt?N)v{!HW^|13gw8>1$JwS& zuOJ#8@6DkX-vJtFZ-rcfq@1wH0gj>9lsy(aK$4a9{2o(L^u7fxJxM7rqjq;Dc$}5E zbVu+2Ti0}o9?$@j?yjCYlYPXLjeP=ED{|)}B$`j^6X=Y@iS^58?d-H4!eH3uqxTl@ z7HuSII2pP9ZPzOlETDQKPdLJ1 zEX`#kW1QsXq1Ak*Z;~k1nBf{!qsxH+v1Bb1F>aGaHpPq7CUw?kGaD|vlfKCyn;AW+ zb%$Q>a#q#h0D@XkwjU~n8WvjY$O|AE{}B;xP$eh^^9uuL{bg(U;S=#nb{qajJlb0_5* z|1|bFRq&Z1V~i{k=zDb_#fx?84f!W{De;Gf{Nm}R#~S}gD%|%6X$3?#hP@qg=B}tb zuGMYwHFa@2sGvP*k_N<)2zRjTaXo;w-xFOMt8ee8#P2Q)lW^)SXwd;AX+p^V5vsW( z3dmx@*$t%&gHy6zLwPqzd|MLpC$fW;N_OucvP#8Qup=^|s1(0bnIhzz=6}$ zH~tZm+MiGk=3TnP74!vg!^x*>lf7<4KI#Qzx#%@PG0^PQcp5T6=l$dG+W)jX7G^7% z_N-m%OG)5H?1WcW9vwPRDv?x~Yb1JK+j)f!U8VcOwSt4IQUiewZqAfe^k?~M;_%l+ zytW9*p8WoP!!(L+cP?A#c6>qc^qt+8!v@?PIvMiP3eH>jiZ&WxArTTx?9GfoC{9zK zSAL!I^E|Q9I~Hp+tP&c1qnJBYCdRvCXPKL%Y+8!hWfDBC{91=;uzN^PQ%p_RX4tuX z_WEV0^`9HZ8brK0zV(!ZtA`i!{a@=ExNSQBsW9$8*bE{+ebZ{rm948uDNDk0{ZzdU z;aTz)qH3jsnnGUyzZR=FB1<%xSlrI?1S>EaT~J%oSW*^DPcd8IJWFvQCgUliCW|m( zLLP-qiiik4vD|NkR=41jgL7V`$AI*knqU6P)3KH%R+<>p({XYB>j9?%(-7;+j<$%B`eN$uG#kb)WJ^+9optfXDwCzOahPL{aJNlJ($GT0~`Q zwF2as%@}_H;6GyP>kn=A;Uq{=YobZQ84$4UNN4rhztKQg?g zKy&@wS>4;EXMpLTk?$B&8BF?DaZk@A^BWnLe5pSG80`fm2MAG?`dQTe`rj#KNo|zi zmkB<8C1){?T3s3`9Jubmk*6y7&uN(8tu?J>_nhYBeeY*?RzCA@($U%@C_Is1giySg zs$+EB5h&eBVfQ}u9_}1;7NBCFc#I+qj&QF_Ky|>ilHJ;pim0YD;%?6_PhpP}v@{mg z9Ad2kRIcX$PPnD5(^0jq)AVP>r#zsOr6oKzrAo=4Qv&883*~#1KCdW-2!`S`JBpQ< zY=^?re;D3f#JXnwIBHAnD4r1HJ&+yOU&Oa|*5A|)I$n(s&Z`jPsHoie?ba>u%ELou zx2W=fPRcot98oV4f`TD=$tjv+zWWhbY$cBis8RH4?VzTtkAm)uwsNQscW(lc7N16@ zg!pfEHd`4chn{;#Fji}o&P+Wrr9uB1kCajvU5`wF=vV9XNx3=L_B*6mFDGj8Vyc{yb-CJ=^InnZ+UJsrKN#C1s#xpWW*c5Xy# zMo^85oN%tv2x%v3N>%1BL$%U3>ruKW6Pc(3X8UGVF)A%zY17Ddgn_+egD`Hw5TzE$4W3*m6{}G2DMYSg=I$L$JYIRO=*RufVZ`w2i zBWwZ6!D_jMqyypX@8JSGDY^vBsiKJU;}krd;iWIli*Ya&W44Ma9wK?3{yCVd{bhyeAQUNGW1IYea$L_< zK#j(IxjaIUJd8i!G-dqFDo7U4kYCt?!EUzD`a)@&|1ffPm~09WTjLgBY3kublDbob zgRS`mE!1JQwb!t-Y^p7l<}`cuDE;ShdggqbrMX#-r1r!6EWHQ(eowuY zo!@n<&DE?QXf8~deoO99e{@LlqhslB!LuezgL0+-X6i_DPTFzq0Sk`7v)}<|yZe7B zX+cgm&7(f+UUZAg)NRfHvyeGPIhcWSqmK@fmGLp|El9~NRI>nTu+{2Rr}+k&oQQ|a zpg0;evH7f0%FyR-4R@y68E(F9)d+UJ9o6AY z(h5es!@IH5w4*4!wEWk3KZltO;}*u3-{5(2P)3!Ewy1@Z_rD-N5QC5}|G_!=;8tu%KOtXaGti!A|(H8cJ&29u;axTVFY z1ot{(*%xr2?VS#vP(vfPT)Mbcmj~0EA=l*MD=*XKVkp>838@$|$Go5iz$ z&7T%H+YD;FKlDNYSF|34cSkQg&ujZ>ytfsfYz6bsYlzV z0T47E)1Ch8A5Q9BMaLl#)peowWV4@_`f$Lr_>tXHLW1X;_5= z9K`Ld)*x7~AX-vsmb$o`51Um*QgBJ8LVy#6$(mkFU6c*00}=f?Ys8!0b7#J08H5_ z39)>;MG6F11EeZd)RDDXHAu+z)jtk0-~Kh_fpcSmcHn%$f*h}OZ9?(f75@DuondN2 zNUcTO+_R;Hbyr9^0SDh?&qReEpQ+-G4i;@$Vs!i-?)6!oN8u?Y&Yy()YLv0}y{sXma`eVtaEYodVQ$WSbw zpqK}Z8F|x&Iy8hl@IDi&NUUW*n$%?dPIYe9B!+&Z0=SzhfC~^8#hFKj3Sy={AU6o+ zL{QS4o5e`nD$-DNT>&?eoWfU@N{WMJ+uo~~r&p(0wrBMGO2byw1b^t5^}O@R<; zP()yWwcvQ{GE^O!weqMB7UeeIkrK_{mV2DcYuwz>PjK+hmvWyQu?n9v9V^L27uva2B6kjI+Oj0%_9@}F4bsa!_De~29KMG zq-Y?vCQJjaE{PDHhC$6N4kjUCa#9QaE68Mz9Fvt3lKK~@T2~uV^QJbC23li51qB;M zSdi@}Uf5n}5)wj+bTHxJzA4qDGl$Hu^v`%_Y?2iw)@?hx9D<{6Pg_#99slol<;G9_jam4}5_gLYaP-oT@NO1#r*Z}Fg z5<^JH=Aa0K_GjJrf}>RUfN&ZuGD5(JaN^uwd&RzKb{<*9VOD6!xdznu;JjILAqJ3v z$SHqAiHr{%ZB;-zBegzQiTHw*h%e83(;%(_-~j!+OHS?d z{XnR^3uKpRtE+u@@J(`kWPyErGhTIPj@R#zav7jnC4~Q%p$4OY7^!}pGaA#gZg~m? zeQ4g~iw$VDzbrH?_7ynDI8`8ZcA+Hw(|nIznil7!575FVG8VmQm=pYK;5aya0wD)0 z^WUnN9@ZTX27nzD=%B&2tLDN1olH%Zh{Py}0Ba%OuPH{lUgzA0Eke;91N#-7hqfaO z(y93rDjdivU7BL~094#RMyOAvp^m1%c9%0&@yd zt3bs=7?49_T){I1raGEf|JA<)*=0^b@#vTBH3NE)JA^<*YNv{5Z3Eu}g(D{@_|&g< zXbU1^O`M?0{T*`5T8?1)zp+4Q10hm?^iW*`pEb2KYJ3hFo66|ZdTia#x5HP}LkcKCZ49vAqTaghvVPWlI zph3ze!u7^V>^|1QDIkc?a;ebQN<<8W)vmyxPh|Zs#fSXiJL*YhSo)YH;9Gaze50<| z5qYB4-%!MTGg5j4&xu%p^0N@2DKfQ{D-j39eFf+uQ@E5M=VF1^1GnjX5!;ah@~;Y{ zk#Km!Q>_Yyr_i29mg%6@b+KVfR`?}|^N$l`wv58GYOMxQAaji`r{|E8GwA+th4~u_ zs?U_=f|SWQ89LW6U_v%GGkw%!!(N#mB(W)*?QBfQdL$T}g20^FZn9sV!&8FJAVsa< zX)??6)^ecq%Y*!9th(g9skIwZB5Hhi&g{=7P=g3KE`l7ckeV9m$zzh#*laBa2{m}j zu9fhD>aSZ8SV9BF!2T(l4EoT*T@WIe0DdlL;-%0577#E*G*Jz5smRPrKXy}ifU5VSDKf*rodh<-dG-^OL?R`YpT&f*YxAr-?q($>nx6&d1d9a1w|J;9wNily&XDl`7wPD49W}(iU?}%g7zGwl^ zyobzIt^@%~*|XjMiPbbqS1fSN^qdj(68 zHPSzxPFtHlAD3Brp5Gs~%OvbzjZ2ps%%=ek9Zil2XR0h7##4ER zB*sGpjp`ZQ&FgACf*sfQsp=Z1tr^Bfsl=tN83n&i2M-q`)MaDkk_PX(OZB zLSKZVKe###eIF&9egH2IUoX*ZD+0PGlhV&a{D>aDxD!qQ2WUM2ed67$L;J0;cAxks z97^2b1fGB-MnWUdK>1sTohKIF(huPWG_Uo5(hmRk=hi8&tixvn^xjMCuCGP79nSC* zTj8h2N`=i$J-;S-Zv*tmQn{H1xJ?$SA3y%>kz`uDYLa_xRRe$II(#K*z9j!WskI`# z<*lo@<<dsGp@|xa>_e;3%#b0>Sv=p&vwVS)f;bM!aftHU&gvYt* z>z)I$d^Pz)TSS>P55V~^=IJTE+XQ7<#FCZd>izMcjn*s6r(${$;nl9Cw?DNC7((k)5r;C=0lw}T z<9J=Y?iuEp+lfih(x0{4#jc=)l0DUX)@rA;SE{N-ou zRfm2v#U#$k{?jn4^}2VL&~7}kW4C>mk=}F$Z!=1&+rI%m)6+(WRP*d7|ISjWJpb-@ z9R#jy@K(nU8k%kYml`N{=&4jm$rtARz`Fp~!T`;+xo}S0`?O{LF75qY zulndhgM)|J|?_ zv4Q!Aj-KLSFE-NmbdeUdb!mYj4DGBtl!bvKcbF2Zr}N_`CB_f<+~a~X$AGA`^Yrsu z95YTjy8cJOI$dww?d65S*!4P2gPsX9MmGtD(Vx6r7ZMOHPuVUnZ!G8Dshq%|QVz@( zgDZA@a4>FQ>kTMkcD~p=sXtx2VZLaLaCV{4)VO0%(HF^y>hHe=%#@Zf(JeO3SH3dn z*1RoFyhRS4#W%+S&|lV66ifVthfQz3FAw5T-#->ll~g_%Is>|3C1TY#PAZZm^~NhZ z@U7s?QxHhu#ZoYXGtZr_fj!2b{l{1F%&K5@z_9yXh$QoEbZqbtR|m9d&7dP zp9e=AYFEb%fDc7!@F#N5>6Gi`hi1qdb_ z9P8@a_Hdr?=l$LE>=$Hc_|Fh+7}p;n#!hrK4A<5WhVkxSYP*>T%kOvG!VFZM*1KJ$ zJy7^a`;NF2?G3uTQ4$w|v6!6(JWvfYP5*=7q;Hd>T8e(|w4`lFuz9 zg(N7W%hO88Pp>_o=KnlljQA%=kW1#6;1x41O( zD>Slmo&Kh#ki`MN6puzKR^ok6q4RW{L;q-TS4=e(NWQBp>1f8|uy+lPJhZC=DQOjInx00x%=w_q&S@BM*P6dZ- zE865(Z43iSxLjEC8I?ujw~CTXsOS8qI|^*>pFDSko338W@5{?R1%i?Uq$-R0qvixl zY}PY$hfYTM!H!8A*&TO;zPS(@RXvMxXKXHA0J?KUf76@qDU_6p|E`rKj{E7{8IOTF zPQ!s+?Pl>AV1P4OjhMMFFP`@dwPjwfbfr!Urajh)#?WJgS;UH@nYE`q#XBo5M(6S2 z`+W+vq;UrBLqWwWe)?qW<$M2TFzgYw2He2IlP56rigc$8&RmAyJ05NAzECng8*TJd z7C>|uv%s98QZ%r#CMtP@x2c{1?^Pb#Sh z7UOf^^w3s_)oic6D*0=hKYspivL3fI)bBZ@>D#U}y$%QJEKQcr93ncT;Keq>Wh9G@6sxt8#qO~iLnVrLh6;tvRqxy8O!SZG?4Cni$j9<2hIMCx?|=KPP|k}}MZyyRX| z|EQD`j*@x1zIg@13m5+YD=c&NI*2Tbnm6b7^i@n~kRePe(RvW#6CysaGmxkV z$xG!kQT00~r8_24I=YwmBb1WdATopBOjKk_*7e_HbY;U+<9sapx6y-DgLjt^}e2~NjUE(gSkrfW^p zS8KfgF*T@)e6bq~OPg&CM7sR#!bN7x!GI=QxwfRI!d20n^wcQYY?J!HeGXlAXm%f@ z6(6B#>%Z*OmD;e$V49`9VRc-*{!`k)XxB?t^!ntZHr$X5H%|6wA--C*yenfvpgL6d zEM$HxM;h?2!n?pY^gU4P$_e07+|B*jA0hE%Vn46!ppU(u4-lyyd2sLQh$2f%k*boz z7!qSwafvXKn0ZL_d)O{{%hh|i;bW=!sFTXOmBe0&KYpXiUp{Vte*dr{W8E| zqHwratlT^=9W?q;(l10ASJk{#AVZTs;=O6lkE|rMSo~7(70Q ztXoT?UuX=av^fOFkXoD$wzFUKrBS8O<}>Nl!5Ti-_yR(uR|&6B$^3cmW#fTc8xCJo zf;enZvg4Phgh(5jj1r*eHnD-yk+LF#XRiu{=+Xu7Lh3&YbC|YM{6Z2~mG;U%^~&#v zq#w4D5RUiWevH@VGq@GB`xk|A<-N%$UC3dlnT8w=LZYo;OywpS$AsOZ zOakSBCeY}aoeA(A5|{~F$^@&c78+Gv(xN9TB(Wh9fZmJB+HCTtEV3yjoolYLkUo|) zR(CtYJs1NZKJya)$2nVPs8}ui6Y2yU^M|#&j!@saGtUCGVzp}3+4Ute+@{#~LMdE< zIny=OB?w&)$mAotZ4XoBlsLKztG~n65nCi6Y&SK zVap5u>cF91iCEjHMoQXnPBvUyCbpr&acna4d7zYH>KVMUPl!asVxV7ocupi%W(?57 zFj&eG<_pcIJCc%Br;i+M-4@(obUbb(?mY=FD*c;EgpC<{P zGHMw+>Lf9jD{EE=>(`cO*uCNd{Nm{6 z)>ZJyXDFolPR#yF=r6N-)$T#LJ5 zv68q_-c%M2*K{w7aE-=4$KIHf$QXIG{dZ3!!l+{;SV8U8V9p=gP`SNOe=1;Tf3&3* z9P)nJO6Z$46$O}7MPhxX}WH7n8EqU~EE5LPNUT0!6gTKArG3Z$d zvRmHxmuIt8|GljmARLB@!$drj?Ww<2zYr;H7=?QWkCs8LEi%CO>~Jz_^SIkE8^gW3 z#$}{sI0oLlvhx8Zx9PVT>r)a+%pdb<#mD5+2}z_(5YE#rs{fweG3Dl)ZBY?*8j-|M zWA+!@?k$7W1@`lfzwjpiPIR(Y(+R~W=#)nnAVJ&PfW6Dn3mM%dIyKI{#$u_bxMo-B&t5UF`~Cv}zel>ndSS>=rcI zM{Vs2=0JU*owy|pB_OL8%270ZU;Zq-HF%wx6&{UX6{P7`pHr_wg6K3h zkQp+;uwWxVns;_gfJzR6(LGw!g4Np*Z&{3wFn@RXTo&8kd+YWXLDQj4v?)`nI>lSp z_Vb1BQ>IL4g!P32OdAy6w53Ji0&pQ4b`tCL`c?W59G^2{&J>QwRI?*;CrIla>IsW< zt3qdJ1iq+G)aRaWPm+&UApPyASE2o<*lES{V9a0(r~ALAf$i_?1T1i!~nR?l=TnXrDQrBn|f#g793?t`!+zWmEyT7CJ_8p zmfqxcwAIn)jMmbX<&{yg%X;05Zv<}g>HS?lU*-FLM4?KMIl_H;rUk}5-()_TKXDXU zsIbD92%5jV@Eo|mykG)ACJ%iW`ovAERp!1tHW2-lbr-lJEOVv*Q6>1?(<4I`_Qfdj zfbuEqhv@^RckvyQm$+5tyP9K`Q1sYK>Wna+S1Y zAdO(&2WS}E@}nmMti28N=^Rs+73+}JvMrP#xu0avhLYM!d7S8Up)suNa)0P~rl*-9KKR*)Ugs58Z^J3C8UgQj&R^;_RNC?yvM%| z%rxM3K|NYv%|ic_Zx-jJRSYWuIwYZBov!1 zK7s`beK2Q_@u^>A7H6EBZ>vG6Fg=@&0y@1Cv-d<7N`EF()rJQI8ws14hXChR_Z?fkimuukNN1l1`m-=J^u*~~5HlpiPnQQqy$8}ICAgz4? zI?b;aSt{*QQFaVKwHC8bU7CZdSC5w+9z>J1W%hWUkE6Df(XPv1VPz3NZ%m=K$rVlj^F@xx|?ze#Ynm9 z2l}3lj*t4e`*?#qU2+GTHS?LfvTbbg?F3-1^&9?)hjnUNAqk>@E>UA&&abrum|VeO z>JfF0QSKSHG%2*l1*o~rZ2z{k!f*_ z_?#I2^hXcgga($D-$Qd|3)02@S}+c-_HviQ$19*b`IUr7SANH5hlM|Y8 zua}oPo$}5644*YYps)Xl&;R`tgyR1aT!WbN`3gBMl{0^bqqCk&mL2#=@KU&?oTEJi zc&-aYabnkVyPfeB)#;(_*i5b40wDIKJ9mc zDarT(ND!`#KUz5&E@r`OjNZN`EFy1IBGG$EjLq2X7+u!ny9!|VN5<@DLIBgdP_7(U z9{nc}uHnDo&sdLD?s<{>?}LNn@wQPFp-dM@b(~{`#Py%3hDF;dm5+uhmV9>gRa)^R8i_!YXm9Ksso5>4Rm?wYg|>>&f;2?j7RAf^5Ly9jlH@XJT| z{qQCs1hB+N_OMWnmGKOXS4Jpe@zt#k+wOVJ58J^V&n zZaSvNoN|-!et&3!Q(YCuUpx)Jt|6voV&<~O=a^s|!1w-qy#0AklJ^xo8PG=f`547U zW^_=B)5MCYE(<6~-HFEAzb;!PaxC?_zmLyu=BQFiw{?m=}0Ggn7=}2Y&JY z{6xR7ZwPCctM)By7VF`Eijl0=whrg4jE1a-0YFy1V|miLkSVij|82_D_Fa zL$QqF_Je8DyjR@vO9`d`l%}2E*Pwf{2wn3)bM04GwyRVKP0+-H1<(AeCwPs^0RTL zB^;Ts<;Ej=1#_HwVRYoUX>S~2oT5ef-M9>;aU>OYJyITMM^Boy6?EDg-tzV%O8}M2 zL&nX&=qI4W<4Dc8{L;N=;R0XDs%i3CkTl5bN#C8hDVzTX6w1ms;+?(}0lUwM!vKPt zWtbI)Ym&H?Qj(nNRuqJEPdh=wTS2H%ex>(>GQoQ)Q$!+#Cs zoii5jjV^yip8hRhjwzL>eP*sD+WrwNw${u!DvANHhgmb*+W9(^b{qAua_O;mQLk#g z#s@Ip5A|-Ln+Kn?*Lh*nR7F1`QyV3(+GkSD+v7?a3|n>Ek?UJ453c#{+h?44o8|Z~ z+aGkbR9F2%1Nv%azzwuNlE{$@wIurOWIK%B9g z1-0{R3WqC1?>Z zWc4LM%AFd?Qx1KWdfZl6W%cb3H^Mo)S^UPs7K;G!&-^BX#Kg55fx8G}CPD3K#OXm! zR*m^i{meHAiPMtHN)*Wa*MRclf>VQLhS$z5l0ach_9@*a;dy9n`;SNuW|Sh@*8wuM z+GgHjg7eUv&|Vf)E^;zs*VXr-XeF23Ohrw>wpVwSVM0^>4)?>qg3yeXbN7KOzG&`? zMLI|4Vyq;d_&t>6O!>=miX;F&SvnkKbO?O#9tt1}5(gHcjY$hDGXJuINkweD=E0D` zO*dF&FqX5!0_}|-&;*GC6VTb>td+s770c0hjlUGo)4X_)MQSQ0so>WL3Nw4H&tMfZ zA347NIN%AEQGnz^udWkLQ2y;JnpOCfPDC#8sQCuZQeQ`_0gp5f@cG{H#hko8_^sn) ze0{K%!w8%ua>ZBtJ$T!p9UzAj+H>1IyzH*qso_n%qZ9GvxB^$B4PgArJd4>z+9yFm z;}iucan^7IQup9Nt(wP1CaL#qJSd!cvR8dN#aWM z`HPYY=4coHf#jw(xJb_WQQu;J(4v1pQ(s0oN{$V8^2lf*WP-5=DKdrtK{%X?*1vTm zWy^3yDNzPnOJ5f#>Ef_87vO%C&1mZ=m6TDEBWsLOgq$741o{#x6a^O5btcR7GBbZ3 zo{RO7D;X1p0Cep0}%CxZcOro)E3yCrL&|{(}U4{UgAP6AZxygxOGii?S=2>;w^y=u>;?6raC{ zT1fD#0x(kc0+v1V|39ecz97m-J6f;=mq<{fuCCt=D%00@@I*q=&XVIcI-o^CxP-cn zAp9-H_~Kkv&O}}wth&DuJNl`p5;`lXp5fM1jr;%Oleny&Q&LpE$NJj*0j%ikwt+Y1 z#+jLiZ<8Ok9t_JxIp(Y~(J^c!&arf?h}EcdQc$t2gr@jMB_#i%=hE_I4p3LASxVpK zP!pD6lc)akKRJLha+OA|FaqN4M7VvAmk}5M1tm)t2Aly(t4Iy z3$CO_!{uCBvp}jQpS66*$oJ8vY)83f#*2auslFe&)`^>gZuhcQxitEV4>tz!+d-%` zdM|h^NB)gpU`{R51l#bUU>d+<<;@O(pIE*c23)@>5Wci#TVO?ZQUa@(Ew2(ct&dU% zYFRoV`ptvu`&@DKe0SxghYkAFvf=HYalZtbLED%`X>);PO93_YrV9PWCFv3Kwa!l< z^SVRx+{al_Z$Y=^w$-X*l|Fp_oM(SVZK8mHMZt|H8$67df*= zpD&R7DiNU1$|*b@kOjCMgr{?9r{b-L=po(Y&*sSP*QCEpn6E(kgU#G=exNnYHuR_!l-ozK?rnWxoB#x`a`)2+Xetoz$kH?f zM|lRD0Z{fcB}{{4Ongs@4p@;_)LBYvN;XJ`K+qX4Hb-u{FtY{GqjW{z^IX&TVYK;( zbam;quHrVDj=9Up<2EYj;5!c?(O=~D_^YHR~ai0UrOGaY_1%V-fN@Hr~T8U)Q*|;slOhf)y;bgb}9#p(dn z6!yA4I4pur=a6O{AIZZ)`=VD>ZnaW5TBQwgQxPdR0suia2z6zF`wN?{;R1`>ldHIc zS7o=X;i?0v#wjVWxKo+32XULzeu;2%;m*IYUsemKivK33KNYkmyulS?SwFzn@ac7k zhSV_(v9N|NuWcaliS_E2Adn$`x<*c4Ed^g(@e|9z-(wI2MshhL_z^<{&w8_{nfFAj zvNn%h0Vp1NB!00oGYlK0sh9Bo>Tb6@vPwUgPvMp9eRD{EwjGm%YbTV+SG@NY?o@Sw zD`7la>OPt2myA}Y_VnKSA1c!SgCZFv-();X^?zVP;eyWli#)v#(y9(utQIpj$P|5OUP4g~M$%GYI`N(K>;Sl~a%fD_t?u419O!mc5&?sCh%vra$|5oy0) zH7&4E0psw*Wn((ggDJS`K$iV^e{gnq<5%Lil>Yudl<{Qa2XXHnM9X=}o-S;$2fQ#| z^9-JC(wMxDu7;i#X~C3n0DShS6QANol}w-867NQloX3hkJY1Vesa|!m`0nnHW%`(h ze-@b337@@>R74BN(k`R8r`OT&H4M6q+jN!pZtb&ESD4KuTbwiQo&#CYX z2G1ui<_BN_dzyia(TQx{LFj}sR64lkToIk-??NGue#5m72vyLPTLR%Mi9=_}kejx^ z0&EU!fR$)i5-D(v{S%SqM8xmnrvmTG1yWx}IQUV0%)Xx7$HkUSi{0ZBI5evCj|}73 z+YO@?SdW^A>)Ogkk=KR%7a1nM@WwK#HTE2uoXYO2md?JJNjvIX3`k0xD<(iURsKeY zotH5R@5E*k`_QMIP_3@|s)K*rY^kMug_G4gkQ;}ClFDB7ONVy-Kqzpto)r->+Yy8} z+86c~N_-OFUQD?4Q`O`7e%b{D;Bb%twhf*gTW{(Nbk+yYc8(CKt)_Ysk`t!A4DK$9 zuqV)5t!keI-a++;v`au*d&694}zmx*8a}N_QL`E*ML0Hlad)Jy@$RlaRg@Z zm%KA2n2`-&fp5jmJ+k-I8B{N$}h+=v7>JS=T%Cs@O9IXa-(dwseKIYKdzxliFooH~Bv!)XJ6qC&|j`KMH> zWz#cszW;(V?kI1p-Grl`^xH!-L)%`I@{y{v;6q#;%F?S=VpsDN-=fuM62{Zv7;AZ( z=C2QTW(S#sLLUFa@xPunt9L|}EZSpN7Z|(77Eo&cx^n(`qI{nY3GLh}91S2daYp%b z_q`hbjksS9F^6bo@NiWSz=lh-#bT&ff24nwfez&XNG9>S!{br`Mo$|(`gk9=^gu31 z?duEG89sLGJt=39cM?6WawYlcj{zirsJ}=|>}nDwg}LA}OQ=aZ)V%%=Rc{@YHxq3S z1I69l-R;4lXmKs>?(Pl&iWeyETHM{;-Cc@1#l6_ad++*wYu$hHWadd`GRfKJWKH($ zqwpiYG1a|tf36~~uUYY#v! zaI3M$aS*cN`nIw@N=-OR){b~sEi>cNMxWJx;hk8>k8_V-4{MCn^>W<*6(UDCqY7;HGssyER$-1Xzb zxH!-0A}`Jsp}sxEC^}x0g*?17s#5?lJv+W}b!ur>k!Rl(i}ch@+TFaMF;CvTX-tc! z^RIop%z{!WLWZ?u7MHn|B3H%vI57eDQaqdcQY&+>2guu39ZQRxcgm^%Ho7IQ0WvEk zXZ1JkHl)*r|1oyk2Kn6O&|dBKo%}QR5ACUFA$#&S7WU`YN%fO+_1Mh{lxH9$_7A|C z>o@v5j&gOf_H%0Q?VP}T-erfW{^Zui1?<_MAh_A|C5JgN!SSSgW{3sc1pCW`CcvY4 z8bPF)h-F*%qdDTk0X=I@y45sc61>Z2e}V?HpFqFWRri(_Hyx8Fhh!e(#KF5g!;ys< zcWSBG@lfMssM%7YAN$MM+)B9gZ}MC7#n46C=p1mNrvbql8#k%ehU)EmH+5Sl@(0hec#<4zY&lL8 zKoSNzMsE1i;WhB@)fm??9@8|f%hI@js%0lrE|o(Uug&-U{$T!52>3Yae*bg*a(i?0 z%K^tPBi-&g2YSYCS)9eAdD1@TmF?@az02~(pX+wyW%3r63w+(n-phBd=hqaKvRF`{ zZdp5D?PWXmkid9NlwqJwMvMm*Z2{64#=PyOebH4<-;>A;TPb9(9Oa`3t z4BCwiKuc5&pjbyq9Kpw3Nf`;qH(L@%h{&2|j~zuKuzgCJnu_KXnYg6U)0I|uNy`dQ zpyyK;FU}`6u|dG%X{*X)qirt&hzv(1r-8%J^;6>riLWEfS&@ie!@saP>-Q6%&C8Tl z><2p}V@Za6x|bHx?4vjS%M zjV9(}SgfqMSXs!f<)(seatGMctJ@w+mqZFYIUuQ2Gi;HF=15tcFhvodFK;6OMq%?^ z>pR|=BLNSj`VT^T)$1er*MJ!x`RK^4drBjb<*T>?oM9oX!ieLrYV^RTTuuD6C z&Rs$;J<>vwm^oL+dGg}v7>wXU@wz#2?Lri^obnYYhq=o-f-pd)jj`=`;@VotVdV-Ru^?x&Nur-@HBel!{OVZWN|#x2GIHSiEHQR zD=Og;aLme?qixkdKF<&M>R}XB?#%JBTp1bXYE^{fARqM!mtnBBBF##CxoAlQ8fB}) zY?Emf!WB#h=gf*o&am6;Dj&gT6PRh&BjmSPU&rZV-$rv8{CHofmGRzh^QI27P0%ph z>8-~`SA>x{3s%S00^L zcN3 z?T-{!PL^o~w7^j6gxH+Q^vkvYWj^%97da#mA z*uu$XPD=314bF!jz*5<7;f)9XE1-yY+z-A4Q}birY38236xX8!FHG-JIY@bX<7=f> zQlANz?8-v4jN5^s+0IwJN@YY5n-^F1mx7_LFrP7ept>t_o#Y@tc|xZ0?n7_)BUSdV zR|#Rg-Jz3r%+W1cwsqDwg|=kt4KK0F_CZ&QG^ZC)WQHqg#+9BcS0=mUBhgMxjr(7a z%XVsJk#6Rx^w9It^0D+gM%bq{?FKK@4HCDAbN)q!suh91A?>v8>}2c*;fb02Nd}u? zjywJJfu<2kO4vQ~a_bH$PX87M`$Nu@MlMbIbGgy|F4b%k_oe_C?X5kxA`-qHv$8}R z>#-Z_)M=9MKNm^Uz>umdX>j(+IwdpkRHIQP>-_1pbx8z|oQm!=xxMW;3tLFbIR~_1 zhQ%5sMwRHtpKF}TBfWf5x~}D_xh`y8H!qpsfuWaRa8s1D#C*6sH_5TkIQOvnF<;wK zIiDle5l7}!DzmAxH%WZ8rKU2@YE)=<1k7Mbp?hWS3ma_Uh>sK5^BvLH(qVob-1lnfbX~*~g&Hf`{^~UO;|L0) zv_KVVlV&fL9rA^pY?etMbk`u-636aFHu{&ojUG3XFM=|)r8qU+|301uuA*!`Diln| z=38~Hwvk#g z9({LT(_fb>ZaIy|xt)Z!DCOTMPg><#R0*r>$Y4tsP0%lT?;B_5Tty-@rS6m~pANfE zb2Eq`@klFk-)_ok745|;*>DSR&GGSJt+o+T5w2jb*}qGHPTQ;UudmKqFkBb{e0IRX zV?tCYc)uJGhT=3ML&Yum=!8c9vk#dF`oN4FC(n8RmTs`>hT7RLb>BoQD|Bo*sb-2`D0=fre} zG5EGbqk1j?iq@qljr^gpjiPPrvKzMQc&CXhZ04*f@~~~5Xeur5 zEusZf(bveatdr^U@(r8k(l%YwZEb$u`+$|&72T&we-~F__PH`%X5LcIP(KeEGA&KA z$0qO&?AYQ=SWfqlcnN3*D4;ukB35hKPlAnbbjSuoTwG)TsYN$s=c#NUV+0WiR?vTJPsf*+4Ja)V}^Pr^68E4QGGE zl@s3EzOmOKRAB>^A5S&ja65W*KGG?2!%yRKT10@q5M(CmO!~e9#FsBs$48TZzx;3p z{IhtNOq;rzkH$k^Qd52{7Kt#`SmL2;b8b3#P0TEJbegxi4aaW2{>#TYV?KqsAFDp= zOwV0g#D6Xsp=9&OVR!J&8lpFr`JGtpk7d?ABE(g)jui|c^bZTuCfq4T>K}vWdLKI5 z3~c0kPcuXX=LCc%aILV)4}o7~X&3eG;LEW6GW{<3b|8!^?>Lc0$9ur*FAjL}%L+la?#|bDh`uyWH@@&< zVCVc1=OFl2g3sqh+mf6TaF&8VE7(nt0pRkJAUyu%1JA?bfPUZY6vGbK=NH-EiG8`v zrhP=7@ZG@cznhCF2!-zVN3-o1WsSYhG(a0VsOHi^R8%v6W3M75?NyNabOfsv&wfVclUJ-sv3J>HyIs09hYpK>#1&dEpL`6qNpZDrx#7BE8+@_#IP8qJTgm&i zJlC4V^_+h0v3BZ_-FkQVDWrJU+@3E*}-}0k)|mKM^fg5nf9KDnS5z%uhLWO{n$E_`k!4Jfe4YjiZgs9slI877gtpU!$5L zQ$3=y|9%5|^6a_Uj6u*5A8&ZBhaB^pAuD9BK&A!t$kTyXwS^|KQ3nlwky$D?e`C6} zE%Z6FLUq8QX{5;tX`b+}p$(0lT~_K!;jd^rGmUP?tLyX&H`(}`=!z$K-X+B>FqWSPWYjXMqkE7#ptj|=OX*poq{xHStg3L&w&vntzjO8-oqzCgBehhzo z`+TPZ2PZt4kRgmtXRNe<^@PG-s=%G=N)cfKk!ts@`LE;C{3m<-QUr=|r6n_E$I$ay zb!w=KjP{=!OHN)*4V2%R{i2c*EeN=k$66 zl31RB+jxSTx8h=Wa$mPo+L=Ja*gkD(t&s^R)x4jw#af_UiQ*2XKTT69mrNik>t%Q& zGo7F=(sHeqd?cT=b*q!hc&l}J^0ids@LO^gc^At~yx{`4jJt-}-OQ^@@vXt7FeuEB z1fr>+z!QCgRR>^XwX(rk16&TOnq|7)%sGfMuF-%NBd0HutwLWi8dUFVUXlqkKq^IsTws7hSLNPaf>tG;ZV3O>p`H%Kn}B#EmQAeW zl;ZN>SjA~(KY`sCc~sDmLktit5>_&ipmXdC{bD(?G=Y+xY-cG+&(Fg8%Sv>r&VidX z6bmPCWEXg6PS*XYxbj$eIx|-KpjL#iK2<*pcv;nn%2tPT77&NlrmMHr|;AS=5OX$fbfrqcLX&@53_SeEos?NZcPwv3r( zovm9I&Tg9CrnXOz&}|Ox#n8iNcPxuGgGFse?2>-;z;8NuOihKG^C2K3qEc#}e8n6L zbV2WOHsCF_t|#ig&|kKzH~jhDCjrH77z|UqP<}QCV>9Oi=a+xRIR`7YAzOb&BqJvi z)o#A?3rj{ti%K;Ki4mgudOJb4^1FnkRcBKe10oFP1KNevoagQHhCc&EBU(Hfx4%ck zR;uiV^LLer2aI3C?&LX-V2hv0-ldn7fcy37V?R|n?jcx68^8K@L38XWcXzbd{DQvo+vL*w(qL!3Dd#IUJ9j$k1R#lPch4de?*`cAj2ush-%|R^q_23_56yK#4|R&25LlEpJze60H`gaq-qTeVYrxS7JfOmij4nDIiSHQ!zMOhRD!}K|6dYUltSvT3MusNJJ&4V3BFZoU7 zI3>W1dZTFej3F`i?en~J)R}kpDVqs&C0^xwSempzF==-83YfC><0_~Yeml2;X0#4m z^L&04M{=N4r4yOcv_Y{td4AXjhDxw_6h($)rtK#EY+tn?3L9nDGfc~LS5I39J0yy+ zpHCDrd=S2AbLuh}RkB6uQ&g}G|J431Q}<6E0YS#M2LkuO{CSH}I6oLXzt+lcHCn5G zh)&lgNoj4Q-KIQU9bNplv$%hY+%+wmjc*asKkZ`3c#(N{KMWdDY2K-5fWtWeGY3SP z@wOg#?!M5jssipOqeOu5<;;wSQc;oYpK?UgiaS^q!w9NH+(whOBQ_rBJjPzPd$Vre@D!ag|lzLpk!EpI)W zlb}s}4W6IwDBj@37uGJBwoNWhHkWI?a|3tTD@BhTL;=9H z6NyA6+{=b?{7{E+x11rcVLO5fV|rCyE7M@Yp3E^w;l@6T z(k#uHpQWe!(f32bO-d=n3QnqQBkk``3ty|Vt>2E?Uq)am;hcg+We*zcGG(;Mu6~qE zd121c|GYz0g;~U$Syv(ghlebDOArBw$Y86J>TW(@7vdmyq(&dCFS)@^r2=b|$yTZ% z7vrGwD(_+hDat4?^p_G$yMDA?=3X#BxS5LNCM%2y;Vs17_a$)X12Asuh|c<`dk!`q zl&X^ZAqP^wiSNtOVOSEAg(q?I=e@|Ro2!Tpr6t$XiXt|W*Unt53;oQttF(Yu;!a`F zE!8OwB%?YZjxV&$fE_JJa(ar-HVh89=n^_>Z{h?*9KE5Zx?lzJ6xgOL!a;`T0`9@-o zWut)?WB$a4`M0A%4jFv|wv1L{F8#i>{Oa#cgm83d8IfP%Oz#)ZI#Sie<-rQI=^ErU z3BGT_p=>XfcTRiVTvMddtLs&luiVi8WLqlFQ=bqr9A%jC0!rTx+t-2UAaO97Oz1Y9 zOy0ZDr!d89o$o^|F5pIBok#{wbpo2c%Wz@=PYK6af_Tsbh=>LJPP>I!;25KRkJrV& zgx+3npUh~$N^XbtL^B>4g_K?;!9u64#&Xz*Z2FH*-cUxS&jOp3O8IVi6Jn6I%2`gl zJrzRTnSG~{Z?6R>hL5agE}~F|Jp(fH!bnoOJ1zc|R3L1r_3vN@BE^3#Y~uF~_{N}o zD7HfBAjh5FmvCKJr7@e96uCJ1BX&)eni_qGQM^@5^H}$wb28}a($7>EJJv{)lb~tz z+ZZ#OyRjqYUzu6|XA*o|IHv!Z`%UrU1ib*<@tvP(Q*Xf%4j*9*IaurWh$i&ihinW3 zwEpHLQavl5>#e)2Q>@d6%`}ck4W6S0>A(L2n zjICw(dar*P#X7vpx4naIzkBEM2!p0*L}n3 z5fLOojm^Tg?3R&GXM$GF12b{`wLfZ0stu(_wXS>9<;H6mqsVJ1RVZlRd|!(EFR8$Q z&C`<*=FU8${L?7rPBe3SgwnrIZj1BLT^A=Y#G$r#3&oWZu2NAcUptkSzjnsXQjnMN zQRGYRPPD5oW4vVB@2e?#>;r{=^vvYNGrWnrksDa}XBG@0-hWj z7C=h7sY>K0=n~hln7Qw#VDWO?lqJTzKW-WQwHN$?m$;9E*}`S*D4^hXZO8ccyByLnK^V&DwH7~USo%GgOBdmp;{-l(LR1dwqzPup z;9TidVIET2im_EcWT|vrYP&$YBg|-W!dMP77@^MLI8v)nw+jzJB{GX*!kvHuvy_>m zZ`c4o$@eJbP2N7VE4m@S!Xpk^rW_C6D<;jT(I}|j)?g)MjInB8gz*r97qxU`HA$I! z#4mNgj9W!Wzk;yCZ3LpSYlL+Z5UMM83b6eK`(Ovtl`FFaYXM-j z?<(Ek=dJMNzb1qZr^aaR`5a^ahT)brBC0%NpeOQ|Z}X{sv_lY1ft68T=Dc%Ts2O9I zz6`=4pd!UgU`!hYSYDY*gRrF#G$#gh11$N#1|yijW>GJo6g59f5Q7n|V6)prQRa-O zIJdoW6Hws*G&fen5vwpq*1(tZdazm7x+QcM@ZTrREeh?#9XMkm4=$r`XbT!eu^(|8_a1Yr>J zd)VjW2s3JMV8RZ7&LNE03oz~tqW*l!XFsS+h({2T_apXt_P#*-lS|{;P&S%LQ-(?b z5QN!L-w=5EkHaaEOad)%=OcNL<*0fg+9?@(Kv7o5AvMBlu!uCf5YuuKjMb)r7Cql2 z31Kz_HEl^(aS;SS$E5Kwy@aTYqo~71pQqPuvSNp4>;#85f=$ak{MXh(FS?edaiB%& zb?hj4=!szxb!`w-x)BF{e3D29GJq}2!v?jDCt(s5HHe5k+f7pkHq98MdB_uBf$btQ z`FWpq;r=V&TJwF{IKq}f9ea3n&n~$OVGrnMT+t^KLRw?@nFMYEW;Q{?-~tIN!~emj z^iWt5&y>$3&>UAXj?#>A8*z{JzrX8|QKvLXE4~C{*nnqig?R%~KLRY`e^E>0O_=sT zz&-{;?fyfB_%TAAv6upLk0~ zL^BF(!OKso#S`8@%%@m_5U9s%qbLIV{P|$R2K9I&NvCM7lh6QaU$i)VKd+|(8df0+ z%8~jR;gB25BK2>{z$Y@mgD_;lGJ7?kKh3FX&@~PD{GB+y>3X9joLtXl!p+)w&?ftadDMQsbQ&Yn22`@0>TI`;* zTVcl`2*BwJ>ZcWMPe5&>vO)FWF-jyvMZsiBPeo0T3Tz`{V}x&A1%Nc=VxpjS`)Cq$ znW14cf79UMq42n{(Zt8aF+tS8$m5#+NXl;%UV;R(2%%gpOp4gL5(bTO;txS+fxtG< zu~%Wi!7La>9%N|aW3Polu8maw{a+?$7JFH-Q~WkaZ~)4rpKwp4R@(iVrWUF-lw?1= z*p3@I6}YS4{8dd2s;|X2Y`;b<8%Lfnev4U z`ZTW0ywPM{%27~viAZp~ z5ZebC%n9_*Lwm=D4O6KN_+HgFwCW?V|_8A)xcwRW#Rt6XdoQYrGcer&aWH zM0}!ih906)hj{#GBX^A+RY@n37N=bQ|B*Nj0J?LdtlijDJVQ_1c0pr{Wc@L?5@g6gDn)wXSy&} zaK-?~CY)tN!+Bc}^Oc-CQvIKn9#D;V|EC{0u9)np52yXf69X&oQ{v?_v@nY*#*aq# zfL^V3c~GMRsCeV!B0ft{yFBDqhyX7uwnhwlY!o6iNRu3|63r3YjykQ`*%55V>N9>| zcgg|m>^MG$Z>WAo2+m;CDSK=sv~r`!Q^gD<&1L7SPtO5Q{Pgj$`>&Y+R>4L;^0HrwW;}!e% z;;Ps0r5ATSFYb^Zo6-n?C2yyqWfYd$OC{@Qy zSN(mx0E=0&w}qB5Q*#%y*@@e;y5e-pT9a~Ug1(KJ?4LOWy>+`A7>91Vo5VUjjp}3C z1^0j2mlf5ug4|~_a^CB6#nlJQfOCoVgKk*P>G$F>5^J5Y+n=0?S`clR)w}O5y~&sX z>u*N2MC-9%Tv?+DtMS8D?M=~YKr!M*8AR*B7qw^ZI?(?4jUsb;8vBdhWel>x>`82$ zgB(=yS2U%9KSqgBai~Vb4)Fkcd^kT8tTXBlZtIGgmpnM#)7KUreRuuU=58uy>%NMPHvsUL4t$Q)p@jRab9)CF z<0?;elejJjA3S!!3%}|R6m0K(2W;iJOe0~hN@V_4+_ztLzbpd=<^;v8f?2tbDm-8J z?w^|2oXr`1qoQcq(R89F%Tw4e&S;5+EX(MhZ%jl!p4&pUv|T!IEV?c*1`yQ8hYG__tO`ZIPKPFL7~Z${%! zyV03)@ePCzka&CBOpm8`HFQdqd0Sy8T%&UQD5B`vgC5uw?QI3*~=3w zhF8q9yZ$QF$*KRfezvMo$Iy=${Q}}~slYm>)i}BpP|1+0q}I(#;ty-gNWjn=SK@S) zpERkY=FC&5I1RQ$j`n-ZR;UPn%=q0h^)_Ne_Vu}gl4eRa@-M}Z2y;2t+QVInv*_ZW zrvwZM^q)SY^0wTuO7XIo-Rx{L8^1C$?l!_j$juaG?dV);wHBXee7Cb>;j1#A%!R-$}rx?U?gqr>ZnP1ba+*6l?6aZ}IQFFLhK_$R=U!p6A)C zz%+M_%VkNvwq7TC0oik$3{M_Rwks30QvxnTT?dp$-Ve@gey1h-Cd2iphS@fS%#$le zN#%%}i?Js5m!4mJ+h|ZajxSX26SeiVx>UlVU5^%75B>3MvpoJSOiEKl5jbS}OOU_- zCW(_52~$D|53o}ERdr_XUisq5zAL5BQ7#t=RiYiTOYIxCXjw@}nGCBeVc3wMFuE7J z9PQ>6o|D-YlubATM$ab+*A$cI)kF}gZiSDA*4Ri6({m}p#tWLDdqZt9$tG2-RD5ID z{fGHp_#J1=ldV(mhn#Hd9z#(4lNUBHEFDnmupFi#fFY>p)5W|2?1sExzLGxHwGt(I z|I6)fUJMz=7S`R5eZZd7s^O|G_=9iyAnmeMn7X%$ZiS-u&d8dMQ@G1lql3MLVj)|j zxBY03@LsDEb(!oebRE<&3`ug68122dv~{M)}1uIR%lg>?RiC$xGF=oZ}YG61BfB zT_RI8@^z9NCGEtghjd$4TWhz`ooMbb-HBCRwk&WK+MgYz?`EY079IU1*U^I49y>iy z)AN36o%7Xbu5?p3XNI1wsJqrl znvY$wx&$}Xf!45@5%Jh{h;LaA3{w6f5L1>@bboagYN_`d*G||BDoqsTNXi?(8ZCY;h1yVH@w7sqMbfMQzDh9*MP!+Zc*LAXX zf6Ti)*7h3XQux(JW7?$@XQIDBDBk)E2k6$PciUdvbNZ_*C{-)9y~o$i|pi zOz-p4s3G`C4$gawTi#CMeEpT=p2|T@p>j--4J3betGE=?8Dap^qbJ1}@2pCZ>;5cx zwsO#vSNvH-E8qiTMVdKe{z~{rpx-Q9iK%AEZ#L#1wx^&qoMmBeSEEZ|fi@hH;r-Gu zKhs(pb}H#mq3d2VLfzpCipnaJUYQy#PhuV9h>Qq-E*&+^o+J`IAWQlAr>eaUn%wF@ zEt0S~{qU&)iMSaUBdB}jh*r@UK2si@=hNqPiBS19)zN5FtRgnD+pZ$6z6Hr*f-7Kh z8msCd?DFs?(A54^U^`uEHgz{-V5Y(E8#3&=l=>L=tbR}=z*FAP&L4El) z?W>O!d%+3&V|i0uBZgI4Jdwp~TjkshzYv|pW5{6$*C1J1qIWlfhSkuxXb0#Q2qVw$k=!nE9)^*x`E8TFLU zEa_n8_GaChh{#Nm`y+Bq*MylHG%aMuJ-%F0o~TAqt*josVOFf|_SGq_Qc=rI-b*Vk z#oZ%`6U*-OncZkrXqG+Mxm%XYIia6MTGO91ki`ywC^Kx0k8#$@qmVsCul_f+P`L2} zHg*a_&VX3>J5tsZj+DFmS6g*jA*Aq#-&4!<0(}7SPHQ&R5lonW6xAu5q(+h3PAb*- z0uw{0G>Z24nDX3Jrf$_H#azX;zx)AwV?nj`tCEGZTfERxgdd7%JTjgO5`_&epBRsP z$OuY`j~s{tAc+~LKClwIz2(EWS<_E3u>DRy;!vrZ5J0!JLd%V#jq#8qM8nrsD#TFx zgxyO0S6_^^S9XEnF~C63i?4CDU?L=$a@gDVg2C2nb$0KZYaTd#JpMlxrocn;_Y+?$fzA3ZFhe%SK)(sg_+YNxwK2! zNXe+*YziH1TA9E3634gd*{srgr*zSh$N=YY*P1Yb@l8`bXo!lWBkIrXv9Ir`txI~o z%A32B!^e-_^X5R6RT9>$-vnSm<7o5kBrVu!=dT-;p5ML>TB?iPZypGK^I3%Z{*A+V zxlPJG8uhiKZeyBu>h#ygQ;Lw^<8n%;Jctmun+Ax1=M$&b`<;vrk-T5sF+zW??lwl= zN+Wa~Q_X&b84MQ^`C+BF-!cD2lt@nBfKuZtxvJV#UWNLNxjRsA_OFhAfZ8Bs{|LV` zRF)f~arDzn5|pAl_}~^t{ygWa|4IK`Y?u{nEwA;t`Tt}8kaWpKggq!^15h&B*RT~l zU)V2)^CiRZZ2s(a;L#T+xF8(?)FhD;RQ2qD7ijR^qKE1aSJ)i91>F?mTUul-(PMGL~DA@;$DLl|Y9Y zN2(o2As$$RLluGETK;(tX7VWp<9DK$HWSM3*(LH_66g6VF&mP#M6LWKt7T^qKW+Um z*ZR^XdfnciG1Q z8e3GRTIlq3aq`M#`k3S`{s*TrCqnh?_U$>ZDFfx_2Gno`kxMVk84m*UB&<#S8EnVTPADiYP%q-7*_;k&%-hwP530cY=V?yQOVN{vxo5}hiIGSlb5DRNv@?MEwJcdW@tcdsS>?W!{e|&&7^vHerU-JBn5~v9h7_}$lM(v!|m_SK2j}xzh zh5a%RZcLd%8uK5E9=CC^YX$u8t57U?hR!30#k^*usTNaJb!20QF^Vk}&<+0n3l%cX z1G~9DWpX(hb82Ao1~miN%c&+f|K!~8w%^mn!j3o)#e&7kxa2SOQvGX=9q`|-ZH|PnM1Jxbg z8wndN7TPC!jjcJ1B;lX$DZ*{(l=!}d)O6k(TjOZMCQsw=y=qMg#{*ksdyYx?wAGt{ z;sM}h*O&b;;8*Vs5*kZ>_~nyYD)i9GA@mmGVwe8~R2flaJat2tu`kWnSM2y;H38u= z0Oq2LKeuL%PqJ)`Xr1#gSOC(;FyuRX3B$dX3wObG*_fx>jZ;dttP8%|_$DA5wERW< z3~l;ct_Cz3sFmL&!9bCP@U_Lozf-n7D<8OER6WyM_0m|X?<5xg!)srZew!e&N16Fk zAn$?OG2T?F7gu|j)hpT(6{;3de`b-tO1kOf%&rok&q^X082OxRFAEE6ZoOE zPeVuT^$e@K)ZRo}vFRC?+M5Qo*+DdE;@T%UClS`gsG&9Rk@gUD%zNkBQS6XCa}HeV znUJ)($Tdsq1q$o$*k2J5eJ8_^3Yp8g3@@&mu&pRZ>zEW>4Sm|$N8vgKg;GR&^!h6g z02P9@P463{^O_~Ab*74`HOcRp(Y7Zf5?{?Y#N@dgt+Jq9rWnZ*lK)aK5BCodzf zwtdM{{`F1ak#%w&32%j`3+7+)jj)cuY=maWNec6h-DbM)({A##gCOG{!Je_ zB|)0ePk_DqB!THN#bx;%H(0*D-#;4muwZKxKct)A>NFJ$-!Fqd&YS;lju)uO#BO?W z7aVbcRSix5gR{=DR76vDL9&dy^oOyiNuq#Il(f3DC)g&{Gyy{1`T8^6AovUP$I26g z+WpwDE8;Ux9opFm&zK8oNk3lMp;KmsHcnT#4Rs4u)Ta}Pxaeu{^L*(Wv^3o1NJjZ@!>**%MFOCxY;c1eY>jm# zU&m08aX)k{TP75bVQ26N#{{;o4h!E6UREa{k3T!a!o30A>w}xCzd>44RK<>(Riv`K z<@+~{KP10^<3HmyjP#NJd?}f~V8N&YG0^S!P>rP2{=q0_JOU^@o z_GQJfj)IetIhY)YC6b_;BMx2K!}}7&!fb5Z;3Y>T=+~F!G4oh)o2a0@WYDTY(><-} z?&SPGUVWHpo@zK#6CyPcA|z3)iYl%o6cE66xBGOY^F(K@nhgN1H3pGfp0398oYpKG zP=R>+!${A#<;`g>R{n)h@lDJPN&OM~2QK zzsySWuU%7o_8 zYsrEe4?<_9XryO}GfZM)Gi&p8*;)D`i&|d5Q1)61Ni+{sTpsE&|8#SL5@deTX>(&+ zAT;W~O=jGqon@cQz)N2it>UF-PdN)r) zNJ`9ayXBcDtt{nw^5v5eqjIV3aUwT09Wm@732I;Tv*Wn^xvKHG+wJGZQE#)pEaCDR z`gd@auo8$hz@O}J|F7ElW^tCV5S=B)e27V(U@}uV^9MD6uLw_(mIkfg>Z^$=2TjyX z4ST>MrZ1(eJH*B!f$S|&x#eqet3I%Vqt52RB4`adB5UV%^oaT?_ZCLNAaiT{t}y+w zYWH!#XE?Zibuh+TAk^pF!WQ0ZFn-iH9x!OIUYf#7NA{|)KN zdY_U^;H)X-H{^K0&XqqnKFrFhYtY|u>I7&A$`u%$qS^`B#uzA@Qp`J%0J|Q6GZvq z0=gAb{e^8RRn&K8VOq%V%COc`ADM~(@7vyf4z~iTSZVEH%CQy|lFHGRqL4mr-ck3* zrBz_4vC6Z75>;}Z60b>aY2N?ST{4ARUXsX|vw*TI%caW?;yEX5K4R(4^nbl|0RH`& z213lc8H>C9eybjHKcC2_pz^U}0bBltA1?1V1}F^&p|p8)NNbxKN@?7S-4tQ)WqCoa zo?)XqS?kwpPbM?>~9JKrNXB+RcDv$adk_)Y!USKvMn zFk*j8u0i8YBv<1Y$4SGI6n9pnKc@{Ku2CyPLtabk~i}BYTEv$Q#9K8iPf%<{z(@!ni zluADtigvd}y~4{LmppF16f%Bx0^qWZww-+Zd#A|c-!7b`){FG$F3ENo^;A=j7oXNo z5u?X7frUZ#(_}kSTS*OgBRH(&2zG>9qT}Q*315CI^J>L%ss6AMZ`ekat+@NYDn_?S zQ>B-3NjM+jYb?Ybd71e1J)A#qgQcyO;466dGXj1Lirk_D3UOEiV!5S!u)CeyhAWC5 zamv!_T9PF$W2yx$+*E>vZK~E8OPAswi0T@bW`986AzPPSM7UP4MOej@eq*_zD#xP| z@RNL!_FAos&)$8(nR@2ec$(|X=2u0F6f)!ckFbo2;wqJoplB@eE%=z~cv@&zg(yMQj2CSZeS)MXIVw~{aJyh#Xgt&u`6A~FJgmXy^*}cxH8>K4i30?&*kitPcFw_g_`XGXB-1EkzU`oDBEW#s_QsG!x4E&IM9B<( z+g=D6%r21I*v=}oNT^^bs^(lAq*BOPjF)BN4hIwha_PjvTui^0!b(2Qq?N=oIs9kE z5hNhzS+zc# z#%g7ghRbJ!EjJeD;WWp*_CW;=Y1ih)OJ&PVMRWF5q*miZ)Z<;+IC0={t7p#NUt+2^ zcQq{n`x$b5H1M}kUv-Qt=3dnMX`NW7HN7_dSD53zUy;d~!H)?C7302Q8TnQezZQt3 zulHHZM9}1lu$&n0ICNYdsI)Qa z(hFehD}8Dn9b;7?Bz714+w~B8mJ|!dBEF0TdiZ`#vZ*7R`0kTH6T|y>#!zUqns7@l zl~nZM34><#z`Aptvv^o(JUeh)6qDF56MoP2G=a6D*NsiMp5s)7s;m1ZS{SWK3yWw+kKjr=p?w?< zu#!7NqBAIhD-3!Quo+4}(_5QtOMz*ist-mwT2IjKK9Ytmlwf@+iHI$=wYQ~;ihTAi zZ%Mu0jI1ARsol-20zk!_pR!R=U+koZs6GUFqY=b(@2v(O)92Y8%mmpNdZ;KKS=Bw| zSU#MQZLXGA8suHjSzMi`>%fw5#FPyIcga>ozF)0xA42sz zQg2cGYI$M3jMmLmQz~shhT!cf z$hIJRKxoJ9=g1`Lj@8k6(fDQ2PjGn?Owp`u+5QH5BU;L^8)GUQWz-_&lQ|O2$hege zG)w}oUTFK;UD&g*+3@pT%YlLj(r8PxJQ7(nd;(rkisXEwaP5JSI**x^1=Wi_0jT_` zwoC2~e=yPX8@@QtG{5m0Ein0Km1CAe%N?K^7?Y(%dMjW$LLB#Nu`zr|X5cMe`k?2Q zp}H$ulfsIt3!YQEKv}?nG~tEB=Lnf=6gPA}RHoItFP{r7kL%d6rj*V^1HqM4l;6)Tx zA|6~;)y*#uJv(ltzxb{Y;SKW{hIX%>wXqNDe8o4+6)5iR?i$?PU5ZJKyxZ_s4gC&6=!}~$vlIePPVH}`cI9TjhF&O3s*{-5WgoS%?O0|4=D{(wGv91f^mflNyl0NjTseO{v) zAe$^uSJ@Pd^3|K;WO{B%$!I2KHaCOkQPGaEIjJ|*S|YckZ!O-NP}Q#RD=th7k(;=Q zU&O5SrrLKU=CjW_Tq~iiwD@Wq#s>0NVnP1O%2xJwkiP;mdFVl2`W{z2>aw`J@gKhe zBWfy5CXm2~k44<$q0r#TtR!W04QP^F>d*C`Z)2tBB)%&eUUC#lzT}Sc376@Nw!72o z{LVUyye%iKWr2gyt%4;mi>IR}dt_PFY}J@X)1c=N|2DDDH6!t&V)j9=(o9{_*JHPJ-q zov|j>+~5zxO&dOr#@aaXBegD5Kte!8+wP!%pr7l}JPknQ`|1K34rzSFrUYRuE3Y!V zPshmpCgR{px>n5#&kNnN_6w&M&?AxCtAEn%yIOF$z7XBL`%jC(Nzg8AZ^wJPn_DT% zHJPc)^J)5RoO%7kuUA351F}d-mD@nNvW#fE$HKWLs?6v{`+YCnbF;T$V`;UIxzZjYd&gzu4by|n<4xf{PC2r*9G+K5jPfT<54ZL?){<0)cS(5 zTI_;0JseQ*WM^+oorvdt{#NRdFP4*3XVo^v?WFz{tNn;0^t4G`1Qnt-%E&*$ztFeM z8E;@_Hc4>wh|5TY$a>_!WW&q)yiC^Uvl-i6i2MWduk}wie3lo~yIbk=^&HFquI-=C z8TK!q*r)P28>WO#ZPKNJkXWVcSsolRMh4+-7Ef?cRS#eM5Wp3zq+*{eJ$R)lDSMJo zVMmvJd^*Qf4wT&JsN+3Ref|zVa1I4@L1U`}GfX(tu&|6}i*MbX5LRyp+$DAhH$w#< zQcX5*HauX{QudY}Sb`*{u4fj2yv6WIM88TDTwp5h&f~Bnz5#i<2BVyR=Wd-aZ z=m)6X|8ZGF74KyuY};XP)K{PlJ<2ZpVR!istsm@#ExANMEXx3zVvQRA_omYKGHFt| zrG9i;QR){RI*+M^GZA+-Z*9yt3PMgQrArilx~h-j=6Y()hHZ z{YPhQ>CIy`Dt(89>7-NojeCH2&ix2kdTbL18PKOjBtK{Ouig&-{Awy_-E3<+V8!RTP`d_|zI|m6?*Xgm<)v0A*fJ zC~mS2h;#9!e7kUYdK9!c(z9TE<0jPfzAM-4)^GC5eP2U8{oSo`Jo2*UfnRno@DlU; zz*f$M@U0DX;AQy@RcpL`^j6Jsj~nV0k&^CDyCS3)%Bx7xk4b7_o;DucC0Bd4CsUW4 zn~1!pu465JguQjAUq!~-b4@Q>!cBB@TesFCJDY?r-#*sJc7&yNX829Y4wrWgyS-ZV zA0L1}`(M%nnWZsXk6hWwAORNM|5F*NBX_ahg5G;kw#&UwePPSrRNBZKTnm5p;!C902iQL!qukO*cRtZ>IEQL)ZX^XZHLnv{3N< zz};sv@3j8<_3#S?%=CZ;pXSIH6&S)qeYcNR=CT5j#N zit2aSwNo^G;rhFKUPyk)q?07nLf0?+{C$e@< z@#)Z9JDE^=)d%0t_U5o@_Bo(WVxE%@A}Sz^QGk1kK>`-3ArQF|k5kHr!!dD2;Ok@# z6+FP+J)=&U0Jb8&(X5 zE#*4Zqpp&uS1wxhCaA1{^`OP^_WS!RSQNyu45}pN&1+Na!uWoL6w3T4_}&iB(wBpc zDf#w&AJ(VbD{pDEQx{WLt2iH&{$q_wIf6Im?^G`9t#;ZuSS<|0!;r@A&` zr&(rv-(rzIN7pJAy)$lKp^iGh)M1u1LoT=@h+~V%Fr54vYFb$TbF>@sUs`9J_|n8pcjX5w${!9^#lnq*eXX4iENk`fcY*Kf#e-;D^JZcXeHH@Qzj6{ ziA>6LzKv}-YN-q&26)L6c=B7{N!*uk$IIn-5&lT`PnV1sdK*(GTcaW(!{wE z8!4QRseG-abVnFLTC4$>5`tmCIm3x5qGk&B9B0z?wAq&20Wt_m)Ebkj9B7PE$e9;Gs#m z*YQVG#NUq;$m_?1CkS>rIX{7im2baYb63rN0~~@Amz+elLEPz%S{`FdlPACSZF*nh zE)>pMUtbfRJ@q;SuPKt#Q4k_y8p#8ZC%_~v?K)iz*_*B2@W4G%DZ_Ma>CnN<#ndsn zV$U*)KU0l*{Y;7zwf;NULYo?b&VJaxlG)X_O0f9?ZOADihrnF(Fuo$94qf5ztWDsgiRdbQAOKXUFtDf7D{tf>^EQ@Fx*r?oQcLgfsN;c=uFW05)~$RCuK z`x$LsGD$TEER02R)%gd1%-ag`WhtY2^wV4$(XRwyt-m-3#ShP6wf+_JeP8<{ z<<5PwEq}c`B#jI_*p{6Z&cdzU3sWu2=+ zJgh`KLMP%o!Z9L$oqNE?4tP+GyT-|8bvISpbV(K zpA|wugvDu2k!q3kl2*ev!-_!q;5$h%2aBPE&zV*Xd>~!c`AP1o->dwUo_Ed9rRHr| zzsG}ymIx{@)nr)E!2KJKXO2$k`yGc_ndx60o?An;Z5Pl)1p$#Xa)NQy*Q*3h6&BOB zBckz!65i@* z$!uCPrT5e={Kb`X_TbY!xMU_ADpKv-xO*E8)4+V_E{pk@9c%0Re8yHNWC%TC*(Uza zr#49|0p7Vm-Bs&9RCgPjv?jR#HSc>RH&`_;56-ef6Mjf+*M}A5dDw$c)5esy6d1^Ab zk#TrdE?x%--CQq-0@D1`r`}`L`eFoO^zHm&8!xWsbBk@WMc74d5uSem`uG_L{I3ia zHLcpVfv_>@uXdH9Eiy(S+|&#-ON1jfg(UD&3^g@mtbA>E1a@Ei1~+wU5q(@(=n%=- z@eFh*<^htk-(FNFSuC4IqvdE|NRV|%)4BhXv|VNhuwj+24O~z#ClplL zCP96RLyD|y4!W_DuF&cW>d( zC|zu2M-0iL5(zc5^`#u_X5H_O@zY{Ui>(laW?NnM(8#ewemv(BF>cAnmEro~F`XL8 zb=5XZ)Dz4q8`~EET(6Rja$^Z-|Ms`n;L!TIc!HnEB%xjr+>H(DuskuHOzCG z&L+83Xvl2$LRxD%MJpNnG33XV6c_wtOxYm`;C(&3Hu{~4>gPq0K|_@&)B+hDcqfW;x- zVAx;7*;5f_^wRqk^V;L}rsT@#)jC&C7-Cw(oo|t36da>QMhitA(^@FQ-ZfhO%QAqT zyJEQfjhxo5$lREEK(pA(;yta-$uSx5Qo-VXP;I5Q@6iYi>Xpbd6~7Yb#bA^NIc}-lk;vS<>ph!t3>{LS!m&p$ENlArJ0Gq9?rZ9SlT>jDa6l_{A^R zc`Ju?9xG zsi#n?h-o-02~P=9kEv12;}{p@rYc)JR(I61$-QR{;pom9 zkhBQp6dP`I47*W6BoP{mZRQ&1Xw^MSJU`mh2ymnH3EZF1$yYnSZ?XTFJNzmbt~hi` zK)^Beu00;Ml97}Vmg>|t(B9n7i0o#6k!010@|R!Z7?iHrt zbG3Ic1!ig?0-%Jgy_`IVy_TsjlDN^x(Vv^^eq-yh!6%5>zW{rcf=l;l8IJEI=SE(- zu><&JPICqozMHSDj^Q-yU#`Yh3<+c5@fLtYbclz43{EPm=QrJbm}$2p zRL}nq@e>49DA!sUUU^k%pFF+p+$bTe4$?>m zxAOS>u)b8q^x!WPzg2Q=;{}YmeJen0{slo?dd(;1n!IXJroTQS2_qIujZN!qB8fz> z4@3WZ@$Xz1GF@#EBy-pnw8M8R0Y3Q#W(BMcM|Du*+W2GmF-rX&FH1>ji0|o zK2(R7QmC^87piwB1%6Hby0S2ViJ1Pm?#qc zelt)NJ&08W(`&o!jF&k&!OAoPOXq)cS@_v>smeyC_&ziC(_%xOQyYm9`<|1eULJq{ z?wc-Le*Ust=b^x4Kg`mUdN)@Y?u?{g1zxSuKDo(mqdaEK@r%7;;l;oW-xOa-H_cPm z)SdPzihbM8i>A-;5|6NSXQ*>Fk4%{n!!IT`w@(JlrDv54c~lDpHSmAi2FZ+Ohi~me zJ2&1L2WM)GNq8c37GL@H2Q@8-5Pmx31;bO8|%)D0H%EloQl;0GLeA zXX%?hTaOtZ|Ck|`*w-h(9t*WJh?z9XllCHGdl;sjoAUV>9?j7UxZdOy-$Lhjn4(3Y zW9*^0$)x$0aZN++2WVzLby1Mcu|0@-CHR zSdn#6-1xm00P0iP%z29bcBaHl>S5J`OXJ4y>I~cO5f=DN4x)JgmfBp5m{ z%HO$WIvh^vRUv+#= zbLLxI{#**iidgo?(e+vv8R8q<>WU+&>%Pxa`>*7T;FZEFI3K#{&nD|BNt)M( zFqR3(`;@sUE*`(8y#*#mWG+g)Y4gh-rmG4%|7bC)*M*;1-;nvS{Un3Ju3`P|)qqt0 zOpRz|TL*;FC`_FS8L@pwqD2`;ecZuXSav=x?twG;4WKEF(cQ5f}g^pC4WwxYl`10Xd|(QQqS8{$1ce_FrGfi zeb&DyR~_p+dCl35KpK{WN=($CbL`d|*Z0Cq>IDGx%r*iowf>V#uOp)JP`n-2=~kv+J$chaX1R+u<1vMgZ{YXJx-Y(}(0hdhE_c9jU9z(Daw z)>eWOH5K0Qzt%c>+w|JPOlPhfE>I|&6%+XRJ;mvRG3>NJKJfYqnoDir> zU`n0|?_CKjZh|q@XL4!L2{hRn_>&L+W&hR*dwRR?*`uD%*!0N7t>$#-#H()J=Ag45 z@rmB$4lA+a^8N@=_}U$IwD`#K?gl}8kG9-fr`qx!fSO<>N$+dut(@MN?WHo3Y%!~a zm7>NTG{?niO-+qH%*do;)DjXKo9%oriFRcoAHx9QEMIPxzJrk1F%grCmjl(Q+?4-; zC~(3T_wS7v?DV==_CtX4{|q?(o5Kv`ikxW7dj-g{KPnW=_IaNDb47%ZkXV8Rzg5Wf zeDhhlC%iwnK%{0*rZW?&5b9V%Y(j4SRybN@IM6 zRy;(QB7S}gvP1-YU6_O0U#^x0;gMq%m_DSrB{T@!#*oNN4c0eC#IF-(LP%T6gahqi z)93I7z2J5TT9JMZBhs5Pr#^Td9&SE?ud<$P5(%QrTBu&IwI1pb#|$O%O)M$L>v`~9 z|0WXy$`7YT(XZ2o`MH-cEmj=2GS}VyT1n=;baO0LSgKBs@Wlw%+BfPZZjctD_{j&O zKHjVCZOV~~GwM(X{&wSl;Zxq??O?p9te z{#JfCLZsYyY7{TA>9S?t+gNyx-Aize$m<+olUQ(;E*;5y+;9mKumwjc%cV`Sx1LYXjexCtw3tN>{4R2+V@4$ugwoaX<4j!Te zHdr|oqkgU$N(}VC7xV)-Id#V?wFU?9h`%tQw*w$X0GY*m0K&0+hGiiSLVcov`37v_>R|X7{UrNESodk zlZ}%Y+%7$xjguBUE4`1669@3dmB|iV8p0tj{sm?`5TyANiP_6M;VGb-O0;6}8YDkR#O{sTpXqd?vS z0}?ryMGye8HS!`u!$6`+bHK%07$cfOr^&xBV2;wDE<*trh?DVW5so%G zh8SpIm)g|xUlT{w|Mr_)O>CJD9YMXqD-EJZsCgy+?Oy>+84I+3#Q)3@O5Ea!KK8c! zKcI^JnPRa2d=bzGz8qn7pb-YhA<=?FqbUUw2@dWLp<={g1amS*0OR1vF#T7t?>Z&n z2F8JxW0nUQ05eS_U;+fTU2dhtkb@y_ivI_Z__TpEiXXA^+S~YD(q!7;Ia;ttG>Z@- zjZ@J3JYbfK;Dey^=hk=WXX6CM;RyqRKTgpZ!306wOO(eL*#Wf}`~aQ*6V}-KnxEh^ z+sT+tgkKpoXQ)6e#9d9NAiesNAe{)?eEWu`i{bWw>a-TZ$RRY@0E&dnLl9#@6q#Z~ zc!}h)iZ&AX4TG^xZU91HFegkO4zXCF&yoD|-C9deF*0Od;@}VUyPm zv4O4%me(Hiffr3=*qxS=ZqLO@1F$EkZDZmgnl^(}3&sHU8UvPIa31jnlYh7b4xAz* zxFd`Kz98re$`K_iP9Of{6dR~PaQD-{Sel5$azVF3CH@@ogxr_;5b*+sxGgUyY+4X# zPV8a)5Ksr+Hf|4L1X4vZAhwaDQe`BEL1G5jHmE;2Phe0W;|Ab{=m$kRh|xd+^)9F1 zIOLlt#J0SRIb|@2&d`*n^rrw>C9G5+*9I|P-nu=5&`>t;Uz5qQBw0xqx-&2zw1EPG zY5_aw2J@K}g@*Gv`XL9Xg3QHFOdv-E8tfbtT})sg+{6hHY#lRAz_6U?iU8a)tS~OE zUbC(b7+5)nLQSLmw~iJIoF6D0uw{!=qM>|e*lNreJJ{*@R1!q>k#KOJVFU1`lI~zN zVI0v^#*o3-GkR$LbuNLD8g#~So(MpjbqrH(hy(=(9t7Pe)P^IZshPjHhj2UjfM(Zu zi&Jq@G^v&cr_?{w1$>jOZiBI-2B6X5DmrOl!VCee76S%atxv1ZZdrlUPKNR;qSgZy z_`lQhtLbo(5Oy2sxf%52T84uHJp_1y{W0NJA-5SRNkM)_AAZLvh|0(bg=z#zFx+HH zWR;LPNBX27+hQB(_$Ci@#~?M0gSeZ0QzX!}Y}dqamgv)>6+;5JqwH->Dk!go9l`p? zU}*a?&r>MkAe+FmB17v<>nz_uk1WqH^rpc2!$n0>o|PMDfoKp;!)ND~oy!>t>ho3H zH|L!PhTJ0(&#*Y$e>4rY9HI2QU936-B4~fwpl3Nq_wbf1;5_cpvdFLxG(S`|B{+6P zq%ft5gZvCYf(#GPb08Y!KOY2!CS3s3ztJy8D54u|QTmvmh!y?QXO4b}L~fx1(mNXQ z63+fDlb{L*^3Yp!;qAj|^3M4KL>>;ODW> zjfC+slz_O@_207@U-~?rX?PKpE2a$Z9VH%M!KbNHO zWh7ye@fjm07om9Mek6S;Bv1bzKawDB7X1t+UlBi2P{@PB&y&v~BwyZn zbT<*-areP|m-&fZ2%SZcY}@Fx&J>pO_3>n9jRd6w#E&eMb%F@A?05xoCjvve2s+@= z^Ksu{%kL%p;v-P#)sgS@hG_2makJNl1SUDkMaCncupfY=^2MBcse6l^?p$i?c9=Zp zZeR%X^?ctrb<*Iv@vR8nc%v3DaClL9X?lqT`X3(;PJUgSDC9Bs_iWx%Id-0%u4QkL zgudA*PA@fg13g3uiEAXG;SV2f4}$<<&qtx+gMfmoj_Yn2*M{4Me7BrmhRf@^V3=u+ zeG;Do8HksGwB-M;_g}Q zVc$cnzkc-7KCjx+*fiO5Im=@4uiaW%Uge8>xQ#CmATAn2HzbB_{n_MN`{KOH1}miD*!8iJf3yQ#9~ zzzaCD@Km9{08M92{snF}>zn7n`Nf=Pe6(F<&Em9|-O`P2hrwy*lyvvBldZH+*QC&A zzFGnjCuE3-#!Z7m2hKOWrPMBW@Z={3gA$_73L-wtC7X%Hun#fsjhVo84qOj~XRn}N z$#2LhW&Ffl54*Ko7r%Eks-|uITUJHAfm{sNSxr}M1EK+i3&2g&;>cgfFb%0=1v#(@ zS6+a_`=S2x7a11q{hSJ=RBdNn)a#nYqY?sGH zI2@p2IGWwk9^VXlKOR1EToP0THuDqyvC%+CG%5d_&=Vm#LJn;7Dbe(e4 zl!4h{Yszn9Npsf?-!&fnP%1epT2o|F!zHT@{pBmbquPX~VQ5YCR$;FprRgK(K^~kk zOmw^QfJkp%RnY}HRu4AQeCJLN>7}HMiM!8o(I_S)3?9r|VuC-O8)x!G0BOFwL43Um z$0`apdnd`4B&vW@@oPOtiTf5&Y?EI8ajNHope)7X=I1CQFgl{u@Z4fH_GUF@u z#^?<k;gR_KAcNVZcvm7s=|384@D?%n0=apy1{zi! z*%R-a`j+=)ZTH3TV^#BZ5|HZbu_wFo>S~Q1*J)qG`dWgcbU@Xs{nyB;{Q|4eexGjc z+(=tD3pc)b+`)LFR@QMDdN+Kl3?seljFmb~DP4)){| zRw|k4snOg{gRGOtM%y=5Dm{%n^*`-fekP4kTz9@+#9wQ_xplH0|0vli{v9}-C|NeO z_dEM3$COe3SlHQTr?KzBS47~(5i0)r=;f;UKi0(ml&ZBR>Ne@SlMI}{xM18qw>GDu zgBB+jDswqlC+^`k@EGL&=LviG?Nb?VPXQa^mfogfh#ys#6TU!i0n+UxuNa{+ zl4{n~2w$9ClF1%%oaNsH^-=TlR8jKWxKoR7RP+}wCI`L309QG@8((}~IRWwWBo*Yn zIPU%Yj@mDBZJYjcud1!inl^XJDRduQv*b4QC-V@)6?L+>G@Hd>`br-%n@0CFX1zJu zPP&m_nL1v~G<84SS-!n&r!uPv_)>M83_kxnPDa-l@;={{%Y90w+VTkW5gv>us$m+6 z>3^w$gx`=!0&-+~H~t>Hawa_521-22%XN+5N>Cl$FlHsgnQZ+a(RWmM6?l8-LYh*23wk>BV|=V2-@r3z}JB|l@zYqYe}rs?DyKb_bwtYR%|gq|U;8qhN3VB#%t zGv#I;7S3U+b5GpLW_~TZ6FZ~P&p{o%Bvaa`9f94j2WZWHK)Dybe|j|_C^}rU_G8l` zx!$>U3mkN9c)0DsyLZk2xh9sYp|4E}J-KasR?A^5rtGOYVw^SzydBiU4v zh3th@m>?P)rOxC$iQ1WW-2Rj->A46xrJc1^6qYF**ECIB>y7m0?AI`$@OnqQ!qa;i zNWV|S0D(t}+867dN2}v)Q`ed{71}fld?zZx z$TdH*);cDwD)RH@G#zr6+=$mKY8u1bw-Slt+cyq+HZ775=D9L;Pb!E7$QHv{YpDGA zo3m=0Uh-F;XK8^XR~?@_OW`UDhHIGgFlOvBAeP!C2V20chrZ@IYc0gdd$}=nxAsoo ze!lbvFKK+-)iH9Xk^O{A>bQM9pZb?r$vQRV!&?!^jK z9p4$~nDAL@YiTi^>I@uyBbpJG>tiwLW+E#oLa7p&7kwIAKVc?B;)TNr&)#8Gnv21C zAdlo?g!;?dd0|VlpPo)iMKWK-?=}T3X#HQ2tyeH+x!i2-@BX@ydGZdwT$0heq3HM+ zkFt<-7?f@hFnV4Jh<|P_mM(;QntgsnPZs{6YkhXxo?4w&Pwapx5}!v`I+~ZcX?@{s zNn@XO{S$5TaOe(CAz2?0`%=;4YK)c3|@(bfj&cPtR+WD`0j35slK01w6$hKi=o*$@Sv(k?@Bj1XC zKk`7h`Z9XTYDjpd;so$K%eoQ>U{-mAb4V^bloJ;P!W~3)kPL74_8+&wpEOAoM4gpD zzc6WKKzud=PtRjQO+@FfEx`l8gY`3Dc#z*RgQF42#%L8Xi?Zmja$3vnH|IZbMnV;B zrSBiZT^y}tv3cs^{h)i@aoUV!JJ+@9-yGaKfzd@h<$~J_?xhA(?Q)Zyu5sczr}vKu zy8iC#V$5AlEIA$FSqi_57iJlq2kzyxLwK0Rs*1gK_U>ibUvH(wIN=CzhF;0(a*rg~ zJrthn`W6cmL*8Y=LVn=queb=ds>H{QK3$7#NVl&QIjhEZysg^-f1TnSM-J0MuZSZq zRGrBL8#TNYwdoqH;EL4hqwhQdDLZdu+weJ>Z_6 zXBx*Vn@~`W$;cPr>iR*-hDr60m1j{-y5JoPwtOBiF1F!ch|uMRT|&{6I0N3<`2f&#mz5e z18D=v5~A)8Gr_OPc|U!numxYJ^FD+O!2TTGyQMEGSIk9Ev=Fniww7CLOWH^uGa5+i z+4<^?R>jsLwy(i7bF@-(tvr`Eos9pE5_s^js#XQXA2Vk1dlVJxEaY)h)QPZ@@$~{! zPXc_GmT{1m@H{}J^peSz%z*4)|4-xyYaio`1xo*zG7YOt8EXv26s|iOan;Hz?=u?9 zl`iem8pFPI;^Gth zbTItzOglcj*TP>=(i^V|yl+FB;JD0@n78MIaZ{Oi$KaPn5vSZvwqqp5nxP;3HP>mk z;v~cK%V~Sp{;H$!h)l2?W|EaF_VH#hD(j%>6p6xfQ1mX=M_+k%SXKUy67To^`Ri2G*z&w|<=kZJ| zN;iY@f~nD(Ej^Rye|bUX@~wvNJ9c_4^<}91cFjG^5qK?KvEiE>Lp!8973exzlLPd- z1Vxzan5+5u(QLZ6?%po`60P0v`5QcRDZW_liIF_~ZJB<^#;#j)D|qs$x@>+c(mzwe zP4_+DVmf`d^<)HoqoQ79IaS-dm`zqs8q9lv{HowP90JaBwAwZ z0rh)W&&MGvCzouF=5Dr3%;>KkzWOj$nRnWnE|*bs2YpY$ z&?8`N32-S%R#X60Yxq`vSbjKwYSeX?q%~F32n$A*0ppN^BDjtA?*C!;=m{~5+6x+e zcl_>E`HCx>`Qo_GxHJV{5vl>U7)F*)46`l2dwY|$?-A>AEJGJyG;DowwzG3`c}0>h z{O0(9sQAKy+`H-YdAO*9-x_8>JI>cpg{KZfhvTAU)EM3u6~Nfh;F|9uJCAx&J%DEc||} zn#vZ5P%!lvBNGf?h46xY2tUU$s1_D3UB;EaI^d}>LLYjOunGB^V<@nbZSFZlGhkoR za}e?{KL?;~VZI9}ns!mo=Iwu@3CfO%w~@OU;k{iaUZtEgNy$5iyd@KI%6gGpkL-z< zpw@hjals#8&%M-Q<8E>Z^+y{P-lduJ@%%tLi$GZ%EVorKZJ>yQ-&^k*Jjz{0-@}`O z8_;W_ApDj4ZO)R8qm}Da5Omo3(HR{~=g(fBV}L;WXhH2I(XzNj59vG0!y9Q`C8G4L z6hyzu=_OSrTMC;OKb(5%Lwzqapw&vj-HLj4f5qCh2G0;~TNEE{B2xJ6x@`IZpfE>@ zBiXjE(Vx{_E>1IH)3JXiUKJCLLFXC0t>_qn3$@;F3R}vkV>4KxEVssKk?&9Q3N+=D z0ETyT*fB>e*@n?nQ@Kpc?n@<>GPb=;8t5qZtF%TUFK01aY%zYAQquvAR*bjpD_A2+ zGLMmKbYdov{E;>rJI7FBP0i+;=>`{bj?&faG{uzDIIU(``E@bFF753~!?T+AlkSa% znWV%lUYMz^4%$BBY;m`R9Ok~OXi7|Dz`f~WCt{o3MpoAXpF^m=E&kQ`9Ob$fL7p{b zf>G!cvUfVMqpb9wvvnZnk1b6TMV?0>=E&q*X-U}@1@VBfPysYL>Lb(o@UU9m6E6hD6pKVTTsDsC*w5>VK2`AUu+%L2HY;q$5=Z{iZT&Rc zor|^Y-D?9FDjrO2o4=?Tax5cEY^Ns$Gxb_@;Jx22*@Fas54Rd};6#w$xyk?BhdIo| zDm>u%T8DTQ5fae~?Q@PUPc!&y9?+LEq^brRF~^6F@$6^!)vgN)AirZuZtlxu8ItQW z!=GkqW6YFS&usj;#hON-ug%e}4DlQ9!UgD)D*M%Q3}vxNs!O!Ue3As6gr$NI>ldPi z*IjTu)K+^$;1VMvI?lS=iP2|jW~Eji|6p+b@w${`D!+dOPm(b?bQO5}27EKUh;2@i z`j+*?ZStd=Z_!OgLW9L@7?}&lw1{Dq_Ll5%n!5v|kJ#lDraIPKs;QEsG(rDEVER{tr$IV$;}kKjR~^nLoUFb9DLWS!lExF zH?nF$%6Sc1Yw!`GE2btG1~+1a39LebN+X5BcQ5eVB|z(-;&pk~!bubg zG|!jlP`h}AU%qx|qq+KSl~dPV05Od#&%qyG#YT!x*g`NQepN}$Dq^FWN6SsQ0eW9( zHCQQ_exBc2DU9YCt8K`=JG0r^TvsnLacp9vUBZ4_LtIsPwH%BE!hb_g>+E* zqnM4PU^36(z{{0jv)*?rsD7HiGbC+1QH%fMO@+Ga6v8?w8|r>XN=4u3!q!GeCx|)l z6B_681`TH-*18|uQtg;wwlb0mEtr+qJ5C((ezK5v!V~mbZ!B=*FO^86is!vHla8St zVA2=^;V;D^Wxv_H4VIGdygx=;hsK41%)`9b4t+rNdkn#a>nU6BYcMspc1+IKp%DLk zAsIX*QFghC!`hq~4x?`xYel*zlFr zWm%q7&JiUe6fywm=Q9=f5)D0VT2IVR=as1ER1NcE%%s25hHBaizDz-WvCDo=NB)>7 z6O>ZXiK)vP-zdSDXR^P>!EIA>-f|3WeN1J0Xb;12vU4}ueya*q9?+NP!-)8+d!X z0IPm*yfOH`uUT_)1%@hvx*J7?BW~_8`dJ zw>iYO%p)p(r)Yb>h7mN@>u~;JETq<}8G*lq&m%ZEDT%LeIOZ{YXcqD7#mGh%SNGXt zd>31jTA-WJ>1U=D(jO~#C1$0W->%-DD-HN57B~Zb;rsC#x8N%Nk^YYT{fiwA$*O^8 z5+rcRptw5-PE|Tqd`LEre!3x*8Jl+D>=%}h5j>_RYNYd8Zc8%eht~R;{WCL7m%Fd; znHyz$YMGr~^ieuY`ch;RdQfbaW4O5iTS)8XweI5SePj&hVNJ-1O@`1yQ#mhddx5Cj zqLg?F=L}O!%CWAF^R0V7`gg+Q>~dyEtxy1#dPd)*$vnrjU@z3Wg2fZos$@!$m>hSz zj+bq7o@S6@5DrBV-S{B>V@}M|0y=$E@(20P@ad0C6R_i;EoY;}Of;i_{&J(6foj3y z)^+A?M+UXXDu?JS?hTyoJO8r5oIWqYZTnuPJhy|Rq?Ou0Z1yalbv7K2-{JXQc(_1P zvZQINo6Gi?J7&zdJXvw5Uwp$WXh1 zNtF*wCoSAV7C6)EexDGo_OdBnYfo*~hQI=@-(k$y$pKa>}|V z7r(yHHc=5KcP3;p8Q^3Ql2=|jPyUsqZNem>EWK2IS$d*p~Zq1YUwU;{_A7PrsegDbB z-omn69i#sGLK5AWAoM@T4QU&@9pwK_kI!^<;&ocl{g-NIT)=)4Zo=asax@bZGb^aV zf~(w$`Y`@A)9X9>faU8#r6b-@-*gK!r#LyJkeosiMhSN*ht!D!9Kb%D5HeggKQ-$K zIrP}_H1ee_M#Fs&85nTQv7I#6nV(>*P6giRAjW|^lA)&npcI*^bxrs_+kpFHGvq>t zIrHy2UnewLkk#ez(O1Zpos0M_ZU>LP$NPs5Ta;zxG-WPQPQG7rG?B^f?m2d9N!A59t?Bp}MAeVKA>27@7VdAm?D20TJs`%vKH|2BR0 zH$e0iWnj)9I?VG}srVKgD%!_ndq?0=!;2Mh_xvAN9^$1UH@$8y20jPqMXp z2nP;`^wZzJ*#k#rarwbQLVJ9zf)%Lwb8rg7eNp4Ckdq8XzwsoTac_=o2Z)|@CoLO} z^i&`_73ecSnCQFNF3(tub5aDRl(bL)e2im7Wa|a+{5Sle7pu~;lL49{d}z*=I8^cn za5=)#cBG8U9OANE2S!>UM28y{q7SdphFI3($|rgoLXO|*t|fxO$Kb{q zp<1C%FN+F{jqOMn{DtzngDfkk!LxSkfIlJWN;THnjMX*tqExsFHC?9V0v+wHu7q{f ziH%3(u_C(zcBUuBC)D7!W6b)xF@?_8ADH0?!bNxjy$$)1m@}n`^f_uRJ9a_(q(7kg zb-7ui+ZLR|O*2^@7edGWkVk)7P|M_^YW4>^uiUDsLa>l>iD%%5j&4Qm4|S4S2JEl$ zYgxBvtMI9$+T-8E(Zw(juzMXtgOuBe>g|RlN@ZPRURv@9V|BE$#RQjZMIbXL(lx1O z)bkkVrjAf&YIa+PzFRa6BRiA${3OpQ{dMct9wEA5l#R8WMdSwk$LQs=#4_1vnlM~Eha<%9 zoGMP+oyV$D1Vq`*@ddFxktA3SP0l7tgdC*O%^?RU3$54F2w})8o^|w>AA&lIwCN{f zWlU3-@~hmIbyL6YH4BOB+QqZPsg`9$Rx?d%!fLP~KQdG33~41%{e21XWU4U!rm#|T z*Ed1>e%;in!kcF1QN2nux`o+!kt-k%)0&k-Md$H#CZe(EQZ9~RypS~s1pC<~_4`I# z-CQ1su!qC`%XxM5!bn|$lq*A=(sqz4mwcZ~k7S`4CbzYOoKdRWPl@Fg~L{0cH&*M}T#jT4NG5Aus zT>sK`9cLFO;X--QAi>qLMKE&Mc&(eOf$S7_9Ti6t^p_h*ZYH$oj=hXqPZAumZ%DN! zcdGfLpo0w=V=jddLj}XP?*Flpy8%2#+77uPmY)dWtz24@E)5o$;@v&#DHu5lP>azC zAh0UhtY;E&etp)>6?Z2tlbo@`D6ECOt$rgebVY*APceKMtV2@{qm&n>a$QlfKP&IG zG(UMMT+jeO#R7jWm#1$JAocY!&f$8>9HY2|ucs#*SY4SeVC#UnE$V6oG^N zxuPTc;`UZfnj~u$W<`*hkDb-??sCdBSQrL^hRcJ3)BKn79SXAJ!$UKNk&+yrU0CU+Br?GZeTF(tsGYJYYx_|O~i4D|v`n7&U?z8bh5 zH&hc$1xkZmPz9!EFBk*>4K16ox5wN9Ec-ya+bS zJx*fMEUgcmL7RWr+U|aH;c59?5%KJs{eFWwS99s?smG4`cqWdL>I@#N8wu`BnC~2M%|CMU7$WYXmg9 z6ym*MBx<*bxBuCA%4jN;Jv9f3aEB>~&5v}ELS89KjUD+Vl58Cj%8 z@sXOr8(GsF3ckJt886ZS+VtPXE};w9d1pj)+!l}c-z#T*h3RyVW)go& z3HmvzZdGCj#TVMb=uqr^+j%N1lp9OY!|k%MP_r4o{PBJLYYlTM)&J$iFe1`t0N6(o zksk3H)0u5I1qEZu?h5oCO*bFcaUBmrgIE>8qvvk@mT!m}kd#Ii;tzs$^w$;Sg z2^#VdcRF~FC$eAhP@M6B$*`1^sHXj(I5$QRY+bWv&awP=kp*!7Iir3|{}pH5;tEXU#PQJo*sb@MaOLx*?7p2w|;=fFGotyM)}R7ZgzE@<3q6=5ii$gazFE70}^ql z6te^_`KWHYi4L)7`mmZeqtN1)8uhEQVYk!mB=-KY8xc%>ZNerofCww-5_Bu`D6xB@ zDRXm6wmbFeg{k`#WSIsl?t`+-7fBP9k&&WW{;MY&P@5# zZY%@0;ku;OT7gmlj~Vqm12*X`u0ShK#Z4T-mFk^oXDBX64=jD1;q;(_OMY6KTQq%G zw5sRJjDQXwd(R6Xhfs;w>7+`c%rV=Cx>fMb^GDYGqAh3BO}~(8+xtYw0whIzaYXlm z2~y1rVwKqVn(L4_zJC~<6PALqL@Crf2$DI)w7E{%k~kiPN}-Uq$T(cXev*VR{zA$_W z+A0ehTPAY`NGqygH6*NvXm&!tqQV^)*oWo<5YKxH$}ysH21d{aLN#v)a$5=RW9 z2#f7dige-$3W%~Lj;IYJd<@nu*EM*uo(Jbm!quO=4c2at{M=@8?iU%knjS_qFi)&k zeZL6Yejd`we9TD{lO$w;O;mV#^IRM z?w)(lXEja{Bhu+IcfS-0^^-2sAHVkcMPX38^BR2_7#5@y!chNDRWl(SL7?*crsLle z9B9D@uLUE%Z2_|_xjMx=Te~knrB*{0T_Mk7Y@!zsEndd+Kv-A>_M5iNdY!k$(Ow>2g=NQ)U zP$&&_It5flm8=}id`}MQvpR{gh}%gFmC`n@#akMh!i>`5dtu>vNd(0-17TrG_VP$6 z7vNWC@Apf9-d94cd67Xo%qe%ozQ%X*kTi6Av3iH(g>^aN$YG2W^{Ihqv_vA-XhsN8 z-(=~MucaC5fVv4+xGXhuvt@m266eun8vNOT_0KB|{mUYm=;hQmhrBf9Hu}P)0x+NQ z8#>p)88_OM@LH;^8h!LmI3lRJVUYBP0dQFxoV8v(Y}fn`tM`n{lA>i8VSpvqo9T~s zC8L59Io*X*benv%lCCb9dFW5J>z5z|7DU-i1KRTbyEVer%YLP)9 zuOd;k%^Iz0%zHU8HZ-ScN59f6w!vA`hJ7zdkkrwa2@pJ@W+^k4(rIxj1E)5*W#ZFj)sf~3Anf&3(Gb{Ws* z=v7EGr^F*86QoUIqR-qAl)k0R+v$Y%h2r|H#`JY1_Mq<_XRQnK!O?$<-|!_V$P92< z$PCg@1lNT~AB59P^NH_2bsyt10(vnCJDm4CG9QQo_45cBfzTgLBEuEza)JwgeE!NZ zEiK@;9}J(K@EIYWvpNw%J!sw5{X+rmdw7q?gX=N>evj@z4~PV4LXg=y z5QYr*`~Sz5&U9ABcN)<fB*0oD)s~fr?0+P zg(eay8^>~7iOq~j(?hBnDF9Jck}e%k|L!dK!JhN(|GY5V6|cm;OT?4|9%4w4RkJJt zZt?N(Pr1Z_rTg)z1jwZ}#?spBB9rqCH;GyZ;~=Jj zwvWgMpMAQSC~*++`#5?b^(Sl0Et!cY<;6W$l;^h*3*XO@=fCl;vMnqPJP!oMD;u8< zlJhx=-O+QmRF8-HA52IcJ_LdHo1-0z?=@4aTGQ1koMZ<-?8?!3RR`{yBOp8MCR+*u zWm(cX?>YpF&}d$s>83>==Fggpv71uJ>pV%Br;Czx~n z%9cUeTlUf3y_Ive4MNbB%dC>2_OQX1$chjPK|-}b`6G)a6hgW_wygkn_sL3SO$V5R zzp|w0{Q|~xoh0PO5K~7yvP>DmI0+_4H|U;f(PWQwoVuYcv`=%ymO#tRuPKK7A^S=9 zy9j#+#h;vOPsq3?_Ck-Q$A@F_BiCFa?85iBY~%W@m&U-KvS{qfgYl%F#oAs`x<8~z zoY~5jF1w;~p<%Ip!#M-Y(N5)dzS0Y3h6%6L3lFz{Sg@s3SgB(AC|WwhSls@WZ>E0O z`;|UrbgEqs`SlV@l8`*qdVBWLyjFb$oA9jNvN_(2tIVAmzx9L?of6y@-813B~KMiloUzQ;6c5RbCwu zgZa^664dZYsLjvVtMZklpHGiRJGt-QSJy(iX*kxXcPWT}qD0hh$=ybt+gayMgKrV7 z2>Ho`7fFPBKx98(KK!k6)jfQYKW14^Y67?{H5d1ZH8sBi>U6B5;2s_c*};B^K|a}= zrX8a@*PWabc9OwVtZN9~IV@-HVQe{Y0%#*RM-at z5M6E2k;{#~yO0(j(BbjGK<2~C^KMf@S24W_O=deHw&v+0C6}n&VEc9zH1WMli6X5V{?0NQ6rt2zsXYr!!IOzH9U5ZS)e2_wHqO%LUbOuJUA0df zncXrC{rSwPw2;)fP2SiNofP~2dxIuF@N4lO`!cR7G^RX6s6sZLc=51=gRVGr#5S8< zgA(4CBWu|;mp_?7Kii4qbLec~$zTO1$kepX(^)=#fbi!y(tvjayca;{k$6eGsjt9N zPcwyH{b^9sJa)U&q*XF-SGdu{Gp5^d7E!wx`DqXjN@<_J&?M@>31Piv9}@4#MLA87 zY7YTys|6W#nI^tL!D(lX4VRXh08z}Iy73NWUW+h58Hy@B5x_S|FfL{*Wh>S)PySIP#+#D!V3jVX`s@2kQK9Wtx=~c%KgGct)?4H- z3=5hVXLk!$xXLPu$kA`QrTzNSStU=D65xrw^;b@J3{lW2vKu-Vzq_>0H8~apq5CT0 z)1{n8GMt0^THLMZCSPMxjB+*-)WfOvr5*O~SwmVbFoC~hkiRPYy*g^ z$O6mKZUM@P!AY}x$LRQ)Osn=QSGJK;#p%Yq%-3Q>Rb%-L>e;JGX8J31Msc$y2 zT^rxds&~9OQ7@Dj@+c90nG{#q{lY}FJ(yfS7MwM}wXUj-x5Jet>vxagWIok++O(w1gQ*U$5gZ7G>``kzVP;$2W)9MoxMy=ad_s zDwa+-S)>WUO16V@qgnZ_1-Pe$PH}P*^uZtuZ5wQ}%_^rF;q-bRV}3)F!+@f7!CN&T z2uYhaKqZNJib0PNH$VyhrD?P~LKByjGzVoU*Dd0z0fvMyV*T3qKtaRFZOJvRXp{y# zdusK(YRs>l7B3_wkR`hY?C)=#-aVD(3#Z|bO})eX5eHWwkh?ROONNlsZgx4&DGuu1 znQ0NSR*H;fi4sa_@GdyhDYoRLVkQ#60NHRH^bN|j6m#P`4Q)7BLUH-TnP{--d%%u7vA}y%a1KMq6I?Ye?WoI4Qd>~{4kl8#$FG`;1Lti(KtF~d z=VQrL${sXl;+S?4jDj(-!a9diY?VE_o_1Z?xNwOOjCEOADo36LZ!F#8AP)iDQt9f? zm9lG;ZQ^vOdp@wvhEb8KVtSu8Iuos0bADtUiKCkO`GZ~Pu z@br9IC$5<%pOg9%nnwlKaDKMU!0`1EeZg>pXWI8fYhk;unGSN+k;;Py zF++AO_WIK{n8z)Q(tEG^{yGuq*0qTfu@g4kSq_gFYz$oc761j`OUwX(Z;n1@#Hx?^ z0U4-Yt-HC(dJW%7VVrAW%LLX?+35?7N?jpG-L!Lih~J?!GLo$Or!`zYqjnx?nV!dC zl*<9LeXOgO=VEjj=c0n>A!?)6?{tO(u{|V}>$PX(JhNPMlGOtpp)I zUISjEIT5~GlnbMF<-YR z@Jly}K0i|9)(X6^>H zK#22jc;tfw-${79RV`2EdakbTe4v~g64r^lnef7i$otFdlSBA)0Tx0Lx7cIJ?$`7^ z_-k=~X+1ON!{_B4HYtjfWLV_!sAYNz&Ww?~DwWV)pGbXDZvMS>!}(T)*t>gX&z7Ht zb`}!xL_iPJPn@6E~{lj=klE*$%AEqX~ZTMBaBEnHc4lyU;hLUR+r4 z6AIz)yP-h*^YbO0<1=W_Id_%j z#t-b>Ge0$}FBykbJYPQPEjDFuOD@e-Fq8Uog5|67ZjcsV%|F>qKibT zP7GX^fc)W{Dmy>OUZmMRDR1!d)2UQ!@)|%hycVdl4bMVz4<(rVx9vP8hPzs>0gBaf(96Ov2#w3e8{8m9v8QrwSsVO-p?Hr;`)k$(G~>5DM#$*)_j z+%7eF7I48k#7waa?!)a)-|W;KK^JX9_hmL(Ix`ENadnd+?zJsjv6rAb_&uQ;GqBTf z-lPn_j;pIBkdAG`=o(_VdV{i}o+m)#9&@*}1kuzfVgldQP?_?X_#oFt-_;bCKJa~x zy|JQh72=>g-EEvddU5fv+7nGMWw^zl{dP&-%h>7U5l^P+hFrO6*7uVGIW0ggx3UxFSVVIa_;f|$w+|u2R|ciR;`YAc9{0N z>dAgsoz>35jug9BtA~7e%PCGNDS=9rspZ!Ow3quNmq%4E&IX74CJ}`)I0(cCHMmE| zp<29p#i!EUPQ<0#XygLij6eIAl>Ws2&Mz_4>Cv8gzuLfYRsnW$OJ4UeJy~<%3GNaUM!+ef!6+(_eYQRuQXcm$>Z}TE0x@1W~2^nG%^_CJ?%NAx8-SAG> zH#}(F(`Q!x3Xx}fHxlMD*y zdi%<<)Egrhk4CGa*MY#X_lo0;XM^&_45y4h1BgX$o()1#*~5FK!&c-4^#Da zL+Bmv$C7MoDkK90Srx?U=hmWGPtc?J+^maTtIA4e=Wf0AMo78k&D>giYyKLgt`PGd zPC6TvWRDxL%qWj-I|YXRF(UUnJNr6H`3cIxvuN7^J^pLzJ&*HW76$%w6sFCAVjj@*BxuY z?GaC?%#}U%FMg*-;9HZ(D2duS9jz8uw4P^4oWKNEw8I&7CV|#uxo3y{?G)}rcB(>R z!)e}MAR1r@1f4xrUVt>rW)!11fyFJ=RpEpeSTc%eu>x1$m|ON zjcIE|RwE10&bQ!Ys$Ic2%~Q_@0!#nNaJKQVKh7^^*jkmGvN61``;&}_uJo3{ew+$A zXqYj`ZzJoalkY)bIZK`(q;XonduOc0v^N(^mi@xV<>AgmEH71Qgy(a09#MJvv5JdS zVjR)qLXhN5*=i77gXl)a?BX52P0&^8mix(WQU^0?N=OTaL|YxcSnw}PkaBH!Gf zLZrNv>Y`}UqMLTX|5?8Q?|eg_m49~|^>@q$gYmc1MfVwTv!8VL7$JsK!Tfb>VCI49 z*WaxN>K_{kgeEpUUZlgF=*~Bi5RAQ7?ZyrYcS@dMRjux}@v#QYMKBDh+JZ9=8leG7 zcnE+_)cOa)!QDH;!OX!UHpX5iO8^^_H(@8Lv0v@8F`QJxzow;5g%hkDBS=&P~- zB=uk&YS;ViiL%ItZYMqjn453{YNkkwN8Y0dI3Dv%aur*)P2b+_73}WAUB7f1Ri|UR z>_J%W+=8n}JB@^p26LT@moLiA6V+_nWS@lzzo_AR&xh{&pCs?nazumEo^H6n0_box zyNg5cpXD;8A1b&%QBw)W%9DEKa;Pla`Q3R?#jRPi(rEF@I4@#15O4@Io@Vv~FG>B> zbVUZ{yzBubsc0alel$!_>Ji5qz~k&+WuP(v!#(f<27|1* zer5c&-QW%e$^QB+Td#qID~RgsBb>q$CVjM^)q;~r6vMjpS)LjnX;9IeTZH5BLz(E^ zDN1?V%VyT=-S_#apSrAX?wYFm13EWXd0J`S#%OG*OqOpbTSVuadOSS=Opfm}y{YcN zpt9sc_|3H!gmJ=w4P3|1c;E`x+=%!Ktr_O=s=aOe9sbMud)}QrOsilbS6LlARKbRs z)*n_^VR{**2_fQJX+v(BqmZ>`9>(O8q$4C2lI%69)8u^8*cx}d35TU49J+fbx5Id^Y}Qh}?3;!N-GB+Lb)quA`^ zurdd254pfhBEkyS9w#o|>%u-KE+hs9yMT2RJB`-Owa=iIIi0EQ4EvY-b!Ls$yfZmm zJas6|EiKr-sKsS&WNES1X=r4@OP>3f}O4*>SJ( zCP+d^w8=kL8vz^1OY>MbrRI}BamelY0%r{7db@eJ(RPTS7Uk?2MDw5DpC^^^F%2*A zVx*fBWQ~sbM)hlth(DGIeZk-byenSizHmHXik!hEG`Y zz9TH!q=^8}zR&03U9Xp*u6OLPCs%>D30Ro>EVj4Nw4mI{2sV7c8k}@|pYYv3@M2M^ z&jVUS449eAS`mD^c$xuXWHv{{G?|(mWV=<;bvw$g)wFg?dG?s$U4Kh5Og1W?5Ur5o zEVqVeO~=PA(59BYJi^EP+Qe97PIs|@E~D+K3_SD`hOeMO{$Lfm64)eD4D)CPi~p-; zT|vFS2zDn}pRJ75gw+4-_bgA(Q(?R6FA#q|Hh}5zB|oJzYJAL>-XE1Wsj&|lmTI=t zjW{tsRQR-Q+fDd^WTK9S0z(P;DO*ota2$o&pwBqS6L5tiI_yM*92t4l3!#n+PyE;#rrqHhQ*ao*puB z2KsW&u?#-a^mfkS42{6@{?GBR1%nO10P?!!&_j6G?n2r%sjR(kYTCTzAO#1{Y`o`? zhXB_EDLit_02jdfyMf5NCf}E_r02_!l&>sBKc(a&JSvc-Ze`=EL{B^1<8|A5)vFxa zy!ZC5*8AJ#2z|1wnbfNehn^ah8npKUzgKCJ-tlhC@^3uuV3pt4Wka;^kGHm$-u=+* zI=JVp8rXBr}3p8LqX1)1sW*%W2T&ud?=ib%@R28X!)jd`k70*K@mpNuTw@e=D7fZ_ zA&ti6!SB!5e2G4Ugvs2G#=4ac8cvqI9vZ2;fdGNQ;(p8JYs|7RyoK0_Bd$SuLN)D* zZgV)|dir~ix;uMg<3lQo(W(qm#eu3zAfm4cwDMaME|IWZ1aYDf-?>{R5-vM~U=wB; zZXRGH4qwq0zF(e@2rES$=g@J56t%+KP8oib_Kr*iDY*H$ii z6L3R_js$y<-tDFC9Ddqbxh+n~66z>rfv_fpwBArxwLaPlycaj|-*SDI6|cUIJDIp$ zi^lGZ-`X*}sg(|`+S#_fg3#^nU}x`;0^yUW_;Sd5F;$|qN?7<-Q6F4!iD9E$cwxWn1pG~n;*(I0VDQBd+yc=ndNWy* zIIph2Jo;ho{_2&HNE4+_lPghNQKy!f6k0T=7c~Y)rBP4{xTIhXg^42-92Q%DLwoGrYg>vsIcE2;j8`^jBRWI;C{Me@493kER$IEOMeJ-&V2xS?cKx`0pL-0&*+rc8Z)%1ig?)#cxt&|*hdAyB_fec>9mYV{YZ%cg zv__2=?6$^tT_9g}TI!zZubjavv7 zWZ8cekFgPKGHB!gK;5c_wr~B?(}v)~0PYRn*6IcGLkh`#$z@^V0Uv6(PUtOuH}OqVnZ8BGXfo-Ir-YMK>Ui> z{~9*>g2W)oI>3}`{fjBr?Qs)~28tvKY<)M_1onduWZ1D_XWJE3#|&HRcb6YWLh+CM zs7m96?UATiF0X?R%=tB5q*0yn#i6BZ%>(T2qvIA z&9Lof+Z0guh;UD2G~eNp9JxY2`v)MFUVi;6Ri=l~n8tFMjUFWXS$vUe(^zQVG-p!H z6bAqC8z6%#VCxHNAYS#7=X0c$)sw;I-uaRe#Vjxopy|$_;ybK0Eexw}RF!GRZH}hI z&qmYi<$C^jj>+8YV()kmy^@wB!b#&yU_zzRZ2PUG`-1_|sK(D#esW%R!7If z2hI7MOxWL3S4OQKYg4D`N%pvHiV%uqtf)OI45&J^%XQ8#$7+cQEgteJ6H3ECC$U@P zRQnea_TDfp0YCPOaNSINhj^&#(Yg@O5#Q?H}>PI<$I-FV?{!hc{GTyDs@>}O^--nE zfJ_bUl9%m`-iQqriB8f3@S&1|eBC0Kz9Wsusud&8^Q2%)vE$8Ttt|=u;Ss$o;BoWH zMes`{gEFrVWcHKj>XPTHO??7fqzqm)=Uh!{$krzNo5E0h5pewq=~d2~%`ujA&6m+KJxXAFG0i4YYYv zjc6MLc@H$-*jiF;*h74(yMXtd%e4Xl6x5H$+`g2c!Tk9y3_juF-B*d<(6tS_x0g?7 zD>X$*<|h8FYzK3`E~&9^4qd_fYbJS|ytuJjdkI7lKYxlsp;d&{#>)(W$ZDx+05LK$ z?c;B6%=x1ADCCGxl4T`g_vow@HIc1YY4h8#fdN)_=%7^zwKQ&x>-T{wRy(H%2=JNI z;Ek?FUMCwa)RzeEOS?^wU&w)uqu0mwj8i!I04-X&L(wUZciB+S(t{pU7sOR39h{n; z!T=(iE^&>x7}-e%qL^sjiJt2VKqC6cuMK8{0HK%b=nWoNS*70(caTRIhJ^*y+M|I^ zl@)F;BcY0R7=|H-{rOD&n&(K;I@ORzHW@n=EsteL=z>wx3%xj~{U@lK+o|P;ShXU# zBy=E?*eaq&OVXC2{N2a5iX zO)|aGgEED2B_*tI*nWh@@q@t+(?!4r`5+qnMu%IF5vwioC5QJYO~rmL7l(Bo1nqxP zs3Z&Jy#J{D73Fr+OI!1kvBZnFAi*eekP)OHKBrH#^pq~`S4oukeDu>WF|j;(TinFY z*gaHRGB#8z+d}gN6UkQ&Wwih1n8h^3@}e8*K_-D;1ORq9+g`nIoV{x3|E*POLoJ8r zSyqOjg|vMR#f)FVrKgDSzkZ5^+f25P~KCZK_~;6B@`Zid4MNbM6)9_R4kY(40Is#T1!;1#H1r{)fdyHf%%K$WVPt;pP$OuBYPGc zK`f+3=jDBs8LBeIpeD2A%=+8^mr|5+3c!SPmb#!dCZNu=5?rA-IxmE`RJ@|TSl$Yp zc(2YR$Hp`n1T3T*+1DZ}a3Pa^3Yciu856v$zt|AgQVzGq>S4aba2U+G;6epF%BlHe z?|6UTlQx5Lpnqy&^G?=vr%ltrxen8)ZHi7DT33E@6?yjg&MSfpBfVpuMPSZ<=Fl9S z)=u?>RQ4$kEm8Kb7Gp&eK7Lre^lJ}%z!_acEmpHSlx}w6@*s#<0+)zI$hkB)f)Ji-=etD} z83`Oor8|uz*+67-;h{${i6j+U7;D(5xwT6{xtFoGJDeIvHr= z8|fFc+Zcw!q##eS&-I(ooIP-8+!U#a-;a}@l46EoOOjuO?IqK#7x9)F(E0YMfrGD` ze-E|px$DTtChwY?E^%&SwBfCa+DJ>2t#xK&_{|!AL80&!D1n4~B=LZP?=2E&tymNg z(oz$7S!yie6M4D=3ieVH&c^jDpEmaI?`M|9p>z6=Pjhm%R#f=@35@`#%HK9sc&| zR2rZ@g*sIysjKrTRiOf>%ugTDcqq9k8XT~z`N>%YPGa9D<>;l$nNe9Oqorfbhv{bo>TMvu-y{^kzsPPeZiqrDHVV~A4t*`CxS*UXYpwsx zPz}LBY(kDUzX@lzJcQbO9l=^%MmaM`G_{P;-1Pi3-J`Rw_Uz8#%^VD2WXCjoumxT^ z+&j&HrwQuy{Bpscw1+h#oC2Q=zqX{|urQ7d;kSst;9^W`%F2Z;p2&))Rl7kCHv+Iy z%m3r?@#%6c9(cc+0G<#Vo;-zKhaMo|=fkl)EhPC^6AUHe!qtUyJ>%O=-P_Dgl9gz{COQxNw-*5NM*H#_lFq40c;rCm6;h=}%Mc^FIV$Djo z%LBF1(?)LxMt&g;&y^=zxQ$4`@qkjY{p`YJqj~=%bfJXdy8GoW%2Mwp z)Z^g!VQSw~?}Z_kwCYJU`;v$UYF)WqL}^23=-|eR-~KSozAgOawwd=?pszdDV14$^ zi|8=>wEZZ??9|t3M#~452pC*gbuvl6R2^#EVbmYZJ#bmNkT1y{UlB1l2U#4PA5_;) zVVr~+yb~G~aKlb@; zLf2&eP1<|R5=l4Vc3K8P@P4hLMT;PJ@TSr{bJ?Mh&`U>i=fQZ938)$HT%R|t5nftT z-7RgJSCll6TVBNZp5G*cLj$+z(WWkp|m@TU#w~O0b@TOi-C`TIgAhotU!j#55h7}tt zHT61`QHg0zgr;&X4HS#ci3mK1yj`J+y!tVb@1kD4pu*EwllOQ3T`Z^=@OF7hIRC&n zIcGDv02w{tHu-Qn=kw&+@t!%~I9M<(Z@$JkudcJOoxeM;RUAE?RbWQUo~@`XI)rGh z>(4##uKNGzVhi@1LEqpoyi8n7&1dpnKRNzo-_I4BdtrWKH=t=e#Q{9taMZ-x{4|X0 ze_dN|vl|>WQ-~B5sam0AN^+d&U7t`{*zJ$Y{HG5E$Pw&Inko5j?}TLX7V=Wzx%f>O zD5VBvj^`GeRP8*y?#z-n$#E)WHnu69an9MANf~1BNF-666$) z?wF$o!4GGectT4Eht|Nc#|R~iPLn%nmR(IwMa-(c<}jJ|P!6h28&fG%h^OGgU=H34 z^uk1KswK}#aoqZ~PQ^jybNPLVeeg$J8 zwRL0tU-Qkq!c0{SaX0}i2pBJ%JlFZd{ljEQ@x(=l>*YGb$s%@_-_5>%Al!g5lrrGS zIC3)*iZw)nj`dBozVg6b2@=8Z(csfZCzeydT9VwnP@spz^XU$OR7k~pnMRNs$XI+_CMlDb>ICFw#>#z4HWR! z{~dHCmnpZ{c%R`>*j+!?YYEX3l1voQ3;m0pP=(O82X3AdbUnueb&5!i;_RPgCLkeWUD9 zoM#o0wDI27e!F64`@Fg=*BqSPG}_Yj zr|OC~1AZvD(2IWk<{POI4UN3o8vbQ>=Ev?_8>4HL`(yn_+N<-;j&13kdS%zQqk?lj zs*B5#9xG4dSm*n2?7qCWL*9$~N)8?&{x30aJh+e8%>hE$MN1vDjS->{Sudvi7w2Bd z^!H??ynFXIAl-Pbp`LNuOz5ca{i?-GdH zu4Y@1$!ytybEGBqzO&jXJ(V|!$u~ywqON*~X%f{|crz?4#kOF3MvGW4o6FvNi#yu` z$mDH^JZNC)jfrN$by63pH`%49_5jT=u-xgltrS?D))1}(rCZ7%vpWl2y64$0laE%0 z3yGRG#Gnsji=@~Mnna0eofmgPKzHrW2{c~iaZDlD5>K0xN7t4|oUOEUGQ-2_Zx`O! zIKwiVaR>EPr5)?cit)RYrXj0}_i5tK3$*b2pa<^4k9Pf%AveE`dl+3xso8FOo<`!X zhRzZSN9r)tsuTdUmoS%n`}lXE!`7ra{L z_jTSF-F^k`+*e_y#eeMGjfRRz9Tnmm{jQ#eX7G6x0#CD!%0?kMJVpQzCWk) z&qownj8Hx;CX8;gq9MM(C@jrn{zLLooMi9kvhQ#+Al8@QT(w)N;8(du@o_#aHfqz?_P0i zCbqIJ+x**={n_%zPlKMFM*P%wLg7zDJYJu_moJlf4&S+|7kYH(iv$4B^K;eL%-$XW zvSFm}w;RNqkaquUCY%lYJ?E9iNFIz$Cf2|GYf`hrpCDm3p3tGSl6ikGRL;`B7u~l? z%FW!rY?SY1IXDu2UH7ZnKOWq8(Onb#0BOAN=JNXapQ`?wAUwIV+dSSl)m4&-Pa%zvQ%nYBd6hlo_ zy+&gm8h+%LA&7h?ae}O|;P%+rV)W%`!laKGIm=-5{I2T*GV=S`?f-J~?C?0LAc22z zlud~b&r$p=hA11TqL$s-@yHiu9oJxpmRk}YR&t=!>YuM4j!;SINc%}kDWmp~8Dh!{ zl0Rc$DT2_&)W7TUy}ktp0PQ%VFPr6^>;A2;&Re7DkFJksJs*%FUAoC8%y>tqT$aTh zxWc;GmkMyq*kCEfQVauYcMDaZ51`}Kx96RicAwW{T`x4@Cq8;P&!V{Q)kT$vzOWGD zV3o+bdkbVf%8z#&>^k}{4U;PZ_FyNW9lHc+8S@{$gZ7Kg)GG=nN+|o*76Y3yFZZYjh%u zzWw?24EXxABP14!jBX)SIX9OKw&(7U+)>vs9FFWBRtmDHZfV0b^pdc2r9;|;aaR~z z4#jTB4Ja*~sq!p`F2dy(0)W6`x|b9-XTg$u^XjkEJ4FWeML_$>Ayo`kbxR-jhJOp3 zAp%mZ%jKE{WG^TBFSJxG3vtH<77;z+w>RaD_p6(SfP;T;*T9A&vxD+;CQV<6Yg}Lc zri!3a4`v^3?(hFY);$Nu7PWnYPI6+~I5}~0V%xTD+eXK>ZQHg_Y}>Xud7gK^nt5mb z=&G(=)vJ2fs$RAF-oN`=Lu3xOVd`Fc$=Nr;Tpo2XOYgUTpVjkzbCqpoj(yexbc*@9 z|IRgYmFU;S0NzF(#{rY43M!6y_D#z&C#90xpNAbiACEQaDX1?#pZ+hv3BqggXQQlV zQV`4BxBw{+^f|_hYe(Ix-3GB7q_22At|-^*9eb`Y$N07GLi-#^?7d?qpKaNv{WT%a z{<55ZD}{gq>fIPNsb}0AirGiNZ1DifX~6A)<1$Tj)=7k68>nOt5sjpg$(&pCj?7(b zSEk^yNT|&h4D{8T@C#eAl}TceLs@8?T04dq5o}GI^cKxGkB_{6^395K zoUQ(oTk>uK(;0Z;{t4!QnEfEG&0(Z16Wk|XvfYa;^Vumx2u<;G|ELcKzupwTX2F08 zRAfVHNYCG~%=rEUcHm12FI2sR?)Lhi5YB<}3YJ5OkSL|W7i7&{+R$!5g8MX4S-ZLP zGU^zj|1gX6H16QjPse98`(%R$R)+l)?vOSxaY>q{Frk>{Lkv*>FTK;2P}3VIkwOX$ zcUO!f28Fw2$gv0<;{%I~$I`}oqx4L!I=UqU#jC`F^Q{+HW<-Q3h(9}OGDer=F#ksQ z;pt&e$X$2ZL93IWV>q8*r@y)X2D*;e-t1pLeGP0v{mKFR@bX^x7qt+)lf%~buJ#^a zJXg9SQ1+?9SD()fI3Ou{(iDT@^CfCU%gtkH!awTqMZTon5qhWKI{!12`j|YYYR0=; zGUKBL(P&513WYsWxTO9L)i~n=U9u*-`}0;L|Fhu^zcDA8i3_aA1^OfVGk1-kcfxbF z+M;Jie!t-9{-*Rt;5Uw0GNgp}84Zq`ZV_P&MX4iJx8Mf!b|nzCGP6loWHn_Alr1T; zEqZ{EX~@zcSCKu)SCxFoRgJ9qCpdt{7~>{sm_~w1GsO*HW%q2Qx?xiOrTzDi{z@`(r6z;Hrd*(RtNszQj+!rvwGi|M&o~qC*2n|os45_@7Fjzo7pFH?jc^-{^32*e z!kICW;R;kDAfEdCgXn3ZYvigC`b*?^WL_&Hw4ow_&eIx;fUOlGQ!F>e4C z!C0@=G53La@pfx5MXEd;L`hjJt1yMx`9k6XPYZH{SfXfq8q?s)feeKas|>o2N0YX` zFy69W6pOOcybTZI>8P`}8=8)uNv$>&5HGPdHW1O1ZwifYJ$EJ47`)DO?hq(+w(9NG#*1v5O>(Ts%$j4Vi`XJLk#`8qWk z8hUiFfrE`lno;~Kie={75IY?tc=pdla2}qC7SW>`ef6(q;!L{8d&J~s;$+J&fWfV} z+6I3s^%H%B>;Vq>j_t|-BAhF$9VedV^~&bTS~S%f$DWut`J$>b+O&RLynT%5sjV2v z8;NT6@o-L{K^gRxEfxHFsO|V#VmKA3vG!Xy2;5Y=6GU3z@N9 zu+PaTVtWR4oWHr&RjgM+HdR)#;AWk_Kw@*{PdvPZi*fC^E2OP?G}*0MZ^&?q0&cZg zz6;ro!Mz2E)34URV#W+?YaGkJI49F*t{WMZRD1&I-{$xxV){8uHtSwJfO;`D$Zth& zU8x4VK`J8=WzOcbg|KjTl00W5^q|cunO=m!e4lYhV4#pAKJw*);}2d-UD#4BUp+UBgXVj@88uuMp^%NKpzf411;W7WMZ;mI~i4smRwv5ZZl@QPl`UnWKr?@mdSzR zi9SL`)z#%szc5;PZ&SSHM*?IyFY)?!b3D{6npC8bh5;I5_C~_V#f=fJpKHl^D;g0S zyCWIl3G&7iUqH0=c!KA~9=#kRdmF^fjy2$mRzI*6BmQBx)FeL!z-JqX2NF&8TnIx% z$L^By^E6Zlhr3Nw%^lAVWg80%>1U@MY^-_RV*8RCUBgXOa!wL9?iN`I-H+u{U+!iJ&1?XAn+kNXCR_vR z@Tc!QR9;D30y2upLp~2PTC|AGS03uLC`D&YT7+3&i4V1RR*|0)H2ZHk=ts4Yl0n<> zS#1>xTNal!r_<4lbe%Y}ke>$%uj_owwDz)&9mqAyjb42+0N&wu^+*wvj6ay&qk&@T zk=SIM1mjfI&}Ad^;_NwRnkOdd6zsTw3^?<2jV8SfhU`1%!iC8;=+WOoBXV*&qi9|L&8L?!-8-Jo{@#_SGZE72{ZCmyndg ziuzdd2^n^Pp=myVUzNk(d?e-&imxLLa?Wgh1|?C9GKRP~pO<$5#Y%3jAEmM&a@^;+ zfkBtOFntPxCg@geeYsP*e=+ZBpQ+6Fx=zs|Bij-QPy}DA;7K%4oSg57><#Nunoyp2 zolLRsfT_8lG8Z3JjbGRY}x8{|=@O@XWxS%b+y%k#ovnaiiC#ewY z1hz^Tz;>UKa!472LQ2S4AlEK_G<5eGd6m$mXUtHtp$7RXd68<8uOldllQAtVn#_~| zp#m<>e^v?%snt6q{E_1h9qk-0G70V6ArXag3CF0VRLz!3BqIC~y?~l>Nt0tX*Ff9n z^(SgrdK6n0231F<)Pct+U}?FW#zqH86zzewPtj!K^_hg!pP_xh+h}Gs9=Nz= zRVFQ^v!NZf`^pT_WKUV#1e=?okWKRSZFL<{_v3h9Wp;yNR z;EY#hS#yim_*Yfbt3YQMK<6Q1H5sqB=R1XrW6$?K`1HiIqUPm{XOyR@g`W*!DymAh z1;?A)<}aouw(hW9A*3Mxw`OXn_<$9bd}-Be52Bnz^%%lraB&MEleGB)!X^9?lDD?c zn3GqIVvCyhH!4FkM+@y<+Ubi7(zKs527MK3Hx3qOwl0RI=vF>WvtQj321Y?<3Je7k zF5p3Yidw&!PqB=L8?mqjhv%svdhT7&j8{yB;I;SlaPbf^YAsAp{n@HWRm?3ThNsD zLsxDIV#f;2nuwCsI}Ty#NO!bDAIog14Xh)tK6iY}foOjY2!|Dp8Hv4c2K7a-5 zO2^e1>xD4a0qb6%zb}ZLn`uoGP9M)T&N#IMmH~>_a%Vb2oB4BH(Y5t6+OQ4+S)N%Z z=*CylS!VJ-olp(Jah^Z8!$K<=tu{}2H{6+d)TT;G!1+2G1cNW3%869MU31^^{JkDV zx32d2T7*209Y1tnU|pOGwc!@>KLF9;B~+Vfa?A3n8S=eNE>~M;mn0BGQVXloaps*1 z$-ZW@2`CB=c^9W#rprg})?oe-`07K)97%jg=fA*>r)#OvEu*9;maRe&hsUHwtlOrV z!YopjJ^!b$%g{u(fN>WJ`y#iN40{a?1PBqtyvNY0HEvzOEUH4L-E5CEm{syVPo zW0znEHgS_d;EVWG!l$2Krr>?e&rCdec7|<2tUFj%3Nd8-E-r1AjGjkV*H}RLP}9^Y zDGj5q$+wb2-sW=?5dUDJK)DA5BoZ`z!(G}O1Dy?a90G&vJ?k)6QKE|BkNqM&crqvE z?X#||pB=Vd5WA9Vsf)gW1+>^FCx)%N{d~|F=Uj`$3CDSF(+(#&pt8%=%hu1Rc>n#f z5YBcVW1{S8ao-K0{6t6LYQGBTR``aTi+cmFsbgTtbH8Y4e5d*|QAe0}2!xgO2JWuZ zaPEXp_xE@4dyc<;zjLDHWMVvjXes2j&vy>s?Ss|9I#w)&v~_O|5U68hgd3*1Ed&KQ zVDvowyG$0~`E|_O^YwQB__TgF|4o%w)3fPQeX_~8`bqT%1|&@`+q1Fb{IWy>>!P*Q z)GH_e=CBECvW(*D(%sf#tip9GD}66G+qI;)HT8J&=km+{)PrQDX&7>(7EimYkwgyan z@a(w@r;EP!Otm~#0$1y#FGdOhPrV@(Qv0`aGF^zP@ttQJJbTC47)BXiq;Eky4V{Ac z2?OVfjZgmERij$0y`9J|ji!aqg~|BJQGfKG_t?`Eqex-*?jLaJ6TX&){_?}pyiR?0?w;bZH{vv_WLKopKA_J))DQf44PjJFyO@l^WfVr zS~QSMHbYE0nn3nxGa59n4ha^W-&i*|nI6C*vj@rgn~5Z77a_b^nom7WD-%RflQJ&Vb=xAm>~TfT)2x*8Df)mPeIl@;6U{KIHGNr9f)_$`qqd41;h}gKUI5 z$|Z(@sD$b`$17!0+iaIuv7CLba6TP%vY?fCqH7U@y=B5+#Ic>y;k;PQ;M$?ZL3PP$ zQ>|wNoPN#V1ZsX;Y=eI!)iMgkm5AvQu!49T7)(8;dO={0UzfyP06qA?x%55TP|=p< zof9zmn~gQ|`F!N#fsy8cvVJ(lxqm+yd}#K8y?tk`Rd&>tbGkUwrDbqKN);U>NU?$`S0iEk_Q^_Z`H4pN?yF_!1$+)bx&+P9N(sbPX6;GIklxg=`!3n*(XTcT}mduD@iUA$J|+2 ze=LaccV9T|-WF!wHLH_FNQYx$TE$XWl>#qie zq%~|UfN;FvR?rZe_niFJB@mJfem}ZAG-tnj^0LYTRoT+lOv$*RQz%6L@({Q6q?_E znp=6G?6p+#hVbOwwhQ;3UbJ30^S!-2yX)d9x;F^@zA@wRr2{=XNAt?AB?L}v$flv| z0Fwh@Q4P`dRy5jVb?*Lgy~MH0pJpA^A3Xfz7{T1C3AqO0g$|oAV~;CZ$${>mS*#un z+UH{#UeL+-(LSeYF5LY!$n2t&Yt>;()Mclu*>I9KEMQIvI*Pwl@u`uqzm9RZa;JVu^lMmWsR1i4Z1NlA#Z3)u*O8W_UG-%t=7VzMjW$9N zUSN2X-q6wBjsumbaQJeK|3Z_IDAEscWKe0}Iv3q$vm?d+Hkn;}z1Cb&bXjsc0t8@` z9vyYQ_Gt=J5|G9P(zL%ibmoeBsCfSJ>{$4rYz&RKrP*QXLf}5EJo!onGY^GUQu%$k zH6j~`+I{_FJZ*&$m*;qO&mr%cH?1OGT87}>(oR3qnvY2?=CODfC{pj5_}HCOTFwHr zGA$k+5l~BelRSu+^W~GaHnl?x0Zx+~j;BPVo0dchugT^@5+`8t0!3L(Qv04t@gOJf zqHjJ6{V3L1zAp<4qang0OI|bw@obEkqi>mQ6v~>QMF&huO(cez2f}t*mFp2{OS-8x zc9W@xV~UaN@#wjuQV)qv_!bCn*2Nt+?7e;^SWsbAgCtl98ZTCkX@Z${0mk(Pg(6(C zn{P9YF18B3#ICrY+pVmN%bsBDiqcWQsyzr_biaM`=ZCsamZb+!4*1?Te0z&m4aicDzCUwVL)umtw)g1yv#2Z*o7tP~w9{{If3 zt$?4ehBl5ol#F&oH8VKa^nbpC=fXz9p__?tdo6o66V3ZYFX?e*@K6I-z9)^*gu4m% zuVK~*?c?|RJNj)Ig#L^qd=+@0^SpVY*`@qVd&)MQ?q+~C9ttU#svV^%{BR(2V%)9| z3~(xsW1nBYEz(mej%qDXUnJ(bMyB_cf9mPziUS+cNs_%&8ZxZ#Hm8xsaEnWB@+zB8;#rSVbyTMp3|T~fib5nmd2uDU4`i|Cet&-UPa2;|BJl--!Ldu=U+jFKgP+L`i6^&KFjLGMJ@2~M*I83s9V=0 zyN=~&?_zxS43SBI9lywznL0q!;hhCI#x}vawNCV?IDHnC!M?P!S>$5=iJHTXTUZy%z6<@3Z&F{ z$^L(p*9il~Dob<;V*#v&z9Q&l^q*TtK$B2Y+YJmt%Vy^nA^sq|Q~pc*ru3IsC($A8 zMZDiL92s4OOs1}Pw+-ge?*hvx&XTs4W4W_g?r^i755AqrWFtwRMg85&{YlLRu|50B5Uz0hn z=z;M}q2)XUSiA9v2;@3+W_UGro32$q&t1Ib;h3WfnPZb3h5|-K*rk!-RfVHzh0!fy z$rrO9z>vFkB$u|E7BZphlNYv8AlDWVLM5~R&stsO4RG$W)YY~-!x;}nrM_G2Za=wS z+7tKuxvhozt`slky6WKrl+`@mo|@`3c1_advJby;!WZk47xOV8Fj4~1Tq)QWC%3#E zXe*ktAQP08 zi`M>8J=3c&>j!vc9W?%J9sq$#Mw^dMCXkL5j$&@OzAI#R&MatabGYC-EC@9PmKka0 zO@14O^n-9G;;a0j;|5d;?HGtK;DR++J=7x07qt_sJ&=+WgomMDa`9FQZ87OeC9@z&yfh_FkjDfTFHkf>95!$&#?LeIm&qKn+>9>Vo`&A__u@21JZB!M z+-HW)He9}WKA9VCb#ZdswNqF5EAh;HN=Xecg%$$S z2?wLnw?#$8Xa=Byxb|i_45un2Y^If9;XxOXxzmu}lbqy<3~LQf3$X~hXb(TrvO!^B zkxjrZ8`*L5=v?w}M?#ipGnZCEssmI<{ccM^W6moMVmg+$kQ%p3V!@6QW2Y{(dsM~F zA99=8mhVn-nU6vp{@qYT*JK5bhB|RuF@1dw4>U_*`vC&k`d@>VfjcUplRqZ&Fo10} zKvZ^?g4B~3M5hPm4%4Xhi4oj0)4G8UR%0fxbS)!h` zs+w(}EZG!s1G!A*WobCoKI116uG@tdCt`}rkz=md&>`JyLZy4L+ zXL*^{s{v%TghNBtn0lT6a1}}UBKQ)v5j)3hA!Qg6d^xI3O8eF5nyc<`2z&}bi0w-6 zacTrEPJYRVJiI7Ku;;7u_`?g~f%Ig->YeT2q;BwP2N&oi!@W~K?_nr!QL>$DgAxJc8hm)ifqT^;{lr8 zA9JruxkG*0FJI<)g@kt=UYh0>W>%nzqE) zq$NBpKj8;7@T1;Z`TeLSBHdbLodtXNkv@GxY7XJw+@rI9r=#ZRr-&17JR(S7HJH!C ztOC}w);#8tn~^P#QJpA)r!?0UgvjTPbtS65U##EwV@6CRem~Qz)GAm_DTzhrxYpY{ zHVfT+%w22V7|JOV0I6vMI6Gl6NvX*zd;(L{@jkRWC*DFuJ<_BHx+7B5m#@7$CxWF} zJEan2o3{?Nxx_OD@b~x|hn@ZfwOU)EM*|*z)1&j()WtZCcp~ZxKq#aU?DDHX05A~h zdG_M)jpl2w_xP6{JqZx%_2;YD4$~<|mzAoo7a_@F`o+(>TfA$U@64p;%T953#T1}P>FXFwFhXLU#pdXu+l=0}wh^AhDgt^UL^TL*#bO%GS6pw!&H-;- zF`{d=r}Sy_E*A|Ay>5#9xAHMfaU@k1fox3!#g zp7@rkPvL)h-Ps(-#)Fh$u5w!k4K7Tp;CQjMV&>qak~?N6+~sys0=2hw5a4)N64|C~ zh+o`B?SK$}%OKEXA^DAUvC6>M0+sJS*3p^~OI9J&Y^ocRMmn z#)&e0v0SH{P)zjv!*!^d01HEJC!|_O@gT|Qrfjy1+4JtCNomIcpL`&IObKUcQrqs#TXU&j&}2LI8bNRnyh<-DShL?MTMv_+u|9Bc#oOd&J_l7_`sF1# zJL79Hic#0HyeOJJU_9P5U&H(!pFbfn_YSx{TAZNu>U(XjQ(1E>4Y5)$Cw!WXl~Sn@ z_|p-v-l(@e3; z{utqaZJ;kxP(;H@l|ADZhu24eu;ed`uf2cYgLmgamibji8eMAqf%JM85#WMA<+i=fMHp6mJ3yQz-xvFRA*iwgy_NXC|p?*+E)!Y@_BU>*}hg z1Z;J%SZY=#eS+@`(9b?fNiqr6r@X2&KCNn+H>{*P`OAYv@AN{JZFi>{-G{tBrhoFi zx;)-b&=&C)4ChM9qF`VWYCzi$L*hrpB(G$r|{H{uq zhSt)2x8RE!x~{ECP9jL~L5YC2ODPN??AW@b6{3MY29jUQF*W({k6x5-6(zrV{io`1 z`V1~N_9N3rj@PChEO=@pJu%Z!otx(&-&|%@I^x5>8dRL0(Q`NO?=RP3w#qYQ6tpZ86rj(B6V{!mrPcc>tq;O6O z^WJk#gZ*`Uxp1t7vM=j{=Zb%Kcn6$C2@L4f3VTN8>)@U>=W&v$mU@Pt`fYLL(O=V6 zuSA1_tgdKjGY5RU(&AbEpYXPON+xH7Q0m*6*vX`fSm#a zwgq3f1ER2lk*&g@!;t}2Qhp)tvHyJO_=R^SrwLqUDDr-C&}b4>NON%Gx;1fiB8+t5 zcH(G);-Jw2WksTlfj?dEY~|q};YPpXGuW{(lIfDq@*!!$LQ%9Jgi1$Y(MIe-FVPu( zL#o|KA56uXks}Op)e7L6+><}37D_7F)#U~t4c=&RKCu=Y^|b+-VY(&`on@v`YCQjP zS=_Vdt>hQEp~b~%4vKt@fYQ^YhxV`i8KgoKyuH`^HSsGk-N)4~eO#0IfrP~vx0Zn9 z8xc)j1=9!`oCJfILa#qQ5T#qj$#%#wV}LA*pzIYIkPHUP=(tzNz|h3E*qKIw2HmYnGc%k&1+{ahM(3bQ zF(sV?wjpWud6+M37wM~fu*}ky!?pnDD-?AQno4JjSqM{9RlrH999yb#$LDHA;~7bHZ2W-8k|$BXgx ztof3?fZV<@5t^zg!J9}Z0(CYljung`WijtENM&`(oIZ)qOaxh`aZ-R^U<`{cFS6_- zWa&1-&^pbsmX*enYZ{GNUiD&e4-x4-!;5?tdU(dts^DzNhMog^phGn# zJtIMgU3KwXgE+xvnv3lkEr^DDUPy?bCU6{0^nrJ7rqNGi1+3(uComkx3nqQWGZpaf zMU8G1Z$h!wsAeQY@Slw-ym;_wo!DK{i#qVXE7TFdZwZS=^^bxzv zm5F;mkcEGuEz_%PJGTvC#fi{IUpC1m@FO6!VeCO6PK*p3GwV$E`YIFded)N-5uZfw zQH546?{;Hrw=+fpZ|hQTn$$G>1P~;jB})8h9|fZf2hlwa%*|4EbL;brAT}*`Qv)6~ zH}4ApP)y&hR~a_`8*sW>6* zL1#2a>l$lkFHfq?x5$sG;hf&w#SL9guD6Kmtf0vxT6S-CzqfwFveJqi|01uy;o(%I^K-Xb9&VPeLr_a?Bv;a?7|VzR z7(?gmA8h7w5FVc1M~$07x;dGSECrix`zDfTSqu#s@au}3n@il@O;@T zcX;`h2JOl9cvc72JE87H*^-p?$iKN1P=O}{#}5u-s0p|DFRC@}ip(?q9Tzt4NaC+$q;k*&or_ceVZo>8u$R+w{Bp2K}0hq z)@yBAKl0Kfe`&DQBb{djap_9Q?gqw>fyul`oI0>JSd>DNsrL6 z?bzq>-vi8Zwhgzh-F_p@#cIn+01@dC%K;0Uwy*WSHd+xp;}PHNIYXhzRJ9!EP723h zYyk0mQd@Ih+sJ9+Rx!gmh%=VqzM0V=NWLqhQmXw$vMKM}NbtFDe7vmS?WE{z7O8Ve2ZW>1*~t|MY0s>?S{%c zXTHNdqaBaesJJ-AGY;Oho!se(<`jyN()(j%mfL`1OnV$AS$j;npy!b&qLV^>PE70E z%xM~2ld(dGR`L-U@A+m)IQV+liB7*rmRXMmX>iwLSJr zv1g{Wy{{sOA+wvn0m>&$OrEg9Q2a5eOSxcGaMt$hEau|Uo?GeIQ5s%4F+vtz#kxn$ z-rj+9CHQCd)P^}Q48UkT+1wwus;y~{NF%kuOTnI})Q290 zBs7~ira`Rr*c)#r9Dp4LXVr5rY8H6{qnGEmGOAN6yF@ty0NL2h^}6*0a?KdEHUU#d zZX#wX{xcn;8i+P+XJf6C9BvKJ0)NSrXCV98Qm&^4#i<|{L(4NzWH8%Qc5en}mBgQ# z80Ze4xw-@~hHcBQ!s=9$ET9$A1fV%2hZ0?^lb%wKbesqF)jTnJWB-W3)v4J6hm3l6IXpOsr;#=($&iZE5{Lie*-uB96;$s zVEqS=43H$7$0TRFie)JZ!7*(sIDsYM1uC~v9vcasV+FE<;OsNAKM9ITdc-_#XP5HM zqIbQ3X_UKuC}eUa>*4Eb<_d~>sF%6@pP(%&|-3jkXQG|v}>1|!vPb9ci z!)IenUY*K3=WFI?2Q{KC?Ll&OAFwQ;N#RL+?*v={($7=p7I900T*Zsb)5p7K$f?{s;O1to+oXIVT1~M-X*T zlV7JepsYgVhOY$}#5s>UIKWBP7i|wTg_R0!E%zL0v9CPJ$)0JXm8>8oa=0=NG}Uy0 ziiYHzO|4LE&c;0H0T(!dOrU}CBexPI%*`4o0ZeoyPp+<3;ii||nf>BgKp zw6J-$@yX{1`K*-fTH_@B9OM3E(mcisn`mQ~Yp4&pbaLYr`%q?t>!V}l;+Wd498b+Soy87yKjj-YRa;(I zm~9=G`&TS@Jh>UrnUPE0^13k>vdvD_jSiZRWb6SJl@51s6T{&F=a#IcE43P@#`=4b zAc}IOL4$GQ+elrHZUjR|Xq7gI&}3b7S!DJ8&z@S9*Ayq&O3dMhh{7v306|jarwkiX zgr{F=c+M?J@kV0G!|OJp?h4tbXIYOQ!Y!VQ8*hiob%*11b4Sqm`7`mz`$tFo{`2_- zx7)Eh5NZ_I*Zk{{+ieLz!neHz3SA8(VZspZ?fOqIJyWGn|6t@ILD?oObtoe}82@*vV0~)ir&O?AvVsB0J+O}m=_TI_HJ9-x*bju-qpl*!Aqhx)o8Tn0 zko;_76R-?eTWhXF5r#h=v<*Jk!+N=P9sQ0I;XlY){K@LfUy~tD1-88Y;rdF8*_IuH zI*xLBx@eja68pM{1^pv7gphT+3^D(>wbBkwdSoX+_<(9OrZy+CFqGmG2sw%-TdQO{ITAT-#R_s(mC z&}o6sWhK*$^Xr~4YXb|aIgIJk_u%k)%&`%dbvJlt!`Wz=!;cmGbajB27r~i+d&c$&6Dq@vCE;u&`qDeB2ArnV)tEABh| zJ@$2g_w%&p@x~I;rF)}7X^}V7?6N>+0r&G;7pAqx-YR`nxxm0ymw9}_ng@W>ZCizt z8R~cFWiR`@WNLh{l2V6M*qd&m^@qms8Ao6wS{(g2%G&@>VYT$X+Ogj!8XXNSn)RG3 zxBU<=e-bU@6MApGQ*yPKek0bGeQPH)rmkCfM4VKC&pW2fXfgT1bV$lCH_b%K-4zMgL4ldajM_O@|%y(!i$1wkX1&L3-?Rd=6dv=E|{GqILT<5Nonrv*`H+dHBER^ zp7p~m&mPqqOPJfd%|Faab(pNh1$@h;NNi7PALW)=Bnx!d^!FK80<0Yz^cTwgL)d}q zSz~G68Tj&?D>iqnql9ULgXhqu^A`zsGCCe2eK#Uqe;LFRT};2#9Y_Y|pbgXUZL)uC z-GLyLFJXoK2Rp9@cd}yW$)cRs>stK`yyKTY3*D1kz%TN`WYcoMwgFmHq}mc6nIwrX z0;u0+xWe{F?Ch%mK*I~rq~^V-ROG1Cj|0i>z7V~um>FKSd7#e&#?UCv!w_IB1KO%e$Z#b$Bl(k-Yk=fL5CW`jjZURstj!}k! z6^d094QvpIb3|)PG8tO#Fo>=gm;czoOBHk$iv6L=9aB}ynwf0D)Ji7nwgw;ee4UHs zby@wO75_2;nj)Ea6@-)-y(i*KI7K24d(qY$3Kox#DM(hd(5;t5GQcBmb`m}M8_x?G zlEI_w*2LW&na&45C5T|_ARll{&adix3LC)FlrJD63vQN-wEU`CcDdXR`yeZ(W1S|d#Wl+3I7N23ETNuvc)5~93H!`+Uk zJxGSjNQ7uauKVbt-ppnMmo3!}MWEt_uE~6zjM3>33BQsx3fGO}K8uxXz1y=EqXf|m zSpKU8TXlKu#I}}+lF@P63uB9tadIb+zzX51N5;G5sV<`5t_lpl zmy5AuRbhw`6L2T~Y@QaC0vKo?|N~xkMz1Ni_J_Q0Ji^fz~fl=aTr>Nxs zEbZd}w-yKx_2AG1pX1VpsYTZW=Y<*6w}rpO9G0&i;q+;UY(lDIJUm1!n737WTgIOD zFDmV3&fTwmjq^r0Vyb`rDiouOMn(#I8_@9Y-9I#fB@v?&l^zGyT0W_5SGNVA1CxF_ z*GT5u>8+HC{lo%hR6Im!r(3(@9lJG zkK1jU|0JiUV|5yTwjkFkcjY}o?}?YHP3jmm;&ge#-s@El)-7}2Gd3i)Vwh3w9ynVS zE>!N_N`cUiEt?YOunxp-8>02sjhg>ZplTtH)Fo*Vd!b7FqL){#^lv!z@jy8AOLeUt zQMFW)G@}x|-;jM|j9$=C0eYw*TTeZ33_YozVvzf_H)Kx~+gKu{kyC}7IPh6nz$mFN zyZ1j;?L^Js)G9i5l7u;t+K zGfS^+0NJ}o^~Xf?v>?0Ga!U6W6v5R#Fi3&@*Z$n})`6z6_BRo&3M?4n3eQTISw|m4 zXyc!uFT;V5gMd>J#yg|bMfcFDLbpl>{J;er26{g_6LSr%9^y({t)d2L{~teHPYXF# zU!dvO@s9#aTwPipe=Usg`zx>4VRh>Ngt@(pn4p10xqhCm;F|gZ!8^o~kEO7R3_pDn zEqcaTg)eAw!P7C$peSDywLek1phV+-1HfKJDD?h=rQ82NMov2uXKpPzLN~lO_opd2 zJk&U#<8Cj@DHp~}%)neJe@vM4L2^h_f=rn7K!s;{YEn*3nD9xL3E4uu>_Fi`PcQ<)^Uf-s#0fX*5S}D|~OcnrwFBi9O!m|#lbQ-T2uZ%}L>nU>m@(OSZ=#uD~dZWLuX?eiM|% za2&djZttHKD0SPex9<8_aUQrZJkOr`w31D|c9XHKaOr$i8}>SBL6yafS%$M!^j0y6 z;tB$aANh4^Zelcen7H;E@B;-DHo-~*UxSb~0FW-KIP0ePq;V>7|@x5`fj zt02={RJ*1iTE6sgMymR4$rSWsNt@|>f+N6OfFGT}2{Fx!y!bEj5Rj6^)EZf75Vpfy zq8@J>PNpyzWXzh)pE@FGX8MANHS|8LIesfw%zngB1Y$jT#229X4eXP2jOw4lhLT?d zUx*8mictV$EoJ!e_1-s#Cu~z{U+d^N^+m;)QkWOm9!2ChDs;|Trp~GfTEWn`3Ikxw z&l?LVk%h1Uyz5_o_2rh4<~OG-hJx&0w0EzQ z>ZJ#RVhJu@A>L7!BS<+tWM6TXw$jz^h%4C z3N)4!4X(&kKib=?SB~K@Y(Phd`R(_TlHr%U4-y6AI@$Li5TQpgO$|B&iU*Lgb(!#| zk=~!tNHRaTIhhb-92CBn1Z4>$4gY5Nr|>t6y$(`u29V1n<}H-)5A;bCln38P%!b-6 zkqHFAq4yG0x{9S`5DeSh{3Jr18xPiq#DPm{7Xw8@T5f&;E($FMK^i@0(m3jYqN(_S z?UY(s(wBn>Kf%Er070&?1q%4T0H#1$zpXP;Xv1$fOyG4rPg8hZJ)N;ps!#7?5oRNm zJ{rxE=S~YW2{@$rye1)HkWE6ohEVA!w55`}FbUT&nFHYXeMPgNu4cqS|e~Gzl zj=5b+peBiyY2%i#wws(l9)su5)isMXNoq_^ta3tBLSs#?ZzfhZtY3=ai1|Sw2go+h zp^vpDS|32QGYTw73P(*tk}GRxaBRm=a}pHwmBSqB0`qLvVhT5myI8k-n!}ODB978# zbm)V4Y)$cN(19+efnzOFSU&?3e{!D~Rs)o2+9k|LqK- ze2hKA^E$wY6cn_`L8!hempY8FL5)LAc)bo&YeBX}6k>c7`k|Q-YEq&(e=x*6xmN$d zaZ-F{$UL?Du)0J116t=eg&ToJ_!LD0y*pPRZen*~yGCfW_~9IHRJVgh(OY1nJ@l z(Su&D^|u+P(RK8m0r{)V9#m&|?mPJGHQkN-myP>@Fn%9VBrxv<(~^m561$MZxy23?UFRR@Ngq+K&5 zC`EF=*k;VId><4U^V}WZTv6XgjUS#8$N(Ef)35W8xuFQBhRg|w;+NVayf){kZS(rC zLl)yP1&WuTHjv>if46BgN_|f$x$V+xoep8lNpc+Ky%q+`Ja!6V(^z8*b|Fh2&^4TH zjC;PZuF`LYdz|Bx*9m$45_F#{KB@0D&v(k7bHyzL@r@on_vL-r8BY5II~0ZiN-1yK zpRDmA+v^3r_S$aD0Hg-vcH8c8AjA}ekiH6G%yJ?!*UXTae~`sKZJg$WbiQ{YW1Wd$ zG{K+VCyD~PDR@!%IQBTjV=tpzEV*c{?&4H&S~^J^B9(0MgfROM@S)-iN^IHPy*5=~ z6o#q+b}z?=kh5lv&A5~ngX%r#EFCN66?8Q{McpcqqMCZbDm+Z8_5_`Cqo^02$_&D=$tPI&ML9VHq%t$-oQNHMfA6&X!uYVwRPo)G|I(>t?X>1S z>zwLcZtDKyxQ?VxQwdGh{}kf}lFg-*8OSNxYRX?G*y) zm=Rv{%~);+L8s3H_8EPt98<rMZA0YL5YVzl(=Uf5v*n2Ilo%t*<1CK&N3&QGuv{pEby$XV&BBx zGGmPca+L7xH9baIZ#+4|gCjK#| zf82+June4&oB8BkO;j?%#CCp|%T6UXn+BIxQV`6!8_-gi%NnU?*+YxHY6w#0b9O&x z;?%CieG+-hT9U5qTluEjt_IFy3xKHyjcc;a`c!x>Ne!pI_U{a!l`?qg!sgE{!Y|9o zwOkz$ws#R{lQ26=)M4u<63E*fMyKluf9u2QKj7MoVOm+YnYeEnn!N_j8ir;Z6>PV0 z={#hp*6pUs?L){JCWO`QwdzL7oAC5b={>%p@;bZU2)mP{nrr5{mGU(x+BZ)7@Bq!M zvSKq+-b+a>HB*>>EAyoUw@oai!%_fHH*Ld$6-*jwK*qfnZGS_9r#%v7 zH$;Qeof8%tpm|?HF^mh)>HZ53Ov`$DnZU!bVo}a1ml-`?>UyNS;Mbs&{TB^9*?-Z% zWUED+jsh!gbpHie%F_&-*G(pCeeL9;;nE zFiLrjjEwtm@Eh*jhl3KptW~*Ay*%f^TRbt}2)S~2y*r`R%!Pe@erv*5KusGBVi9$; z>EZO4Ty!YFni0tPuouw*0KyeWw}BV6h&Q)Dt+&1*Cl+%tt8^(N6{j-K`cx2+1U<*Lu+x{!)-Zj4r&7~CShkd|q|r7-KnFIAJ4 zn_q8@7;TH;!rv(m94jCQtb} zr>~o4f*uyzR%ua|a=`li>ukswYS9?ywaJuDrk| zSYSvop#)^LR-T50&pP;tbOoC*7e2f&35Soy@#`P|^3D72$?FUtpCO3vT3C>bi~|?~ zCkg=Owdqf#)VuFbf4}`U{_^v2`1SDazY_HE*Wu?Ky~`rkQy~Y@JF5J$r5a}v_#_S{ za1y~{5{?QC3n+4x$F`F=*o6Wq4+lJ^aj*-=X=OC+bVlV^cq>GNHvAfNa=@v9CkLDw zm>er=(@|i>ZF0b=EoE}RsjZt#)=1Q)bLW5)>CsXl6#wu#f0nm8i10-OKDP+GS}NpZ z*o)}$?vURh7225av!z0}@p{EnXp7>%Qz|q?qt(xD^>z@5s~2MP!gQ!6EIpiFnht?r zUMM5P7UAD69jbZE76vy{5Eb_9O7HDD@$XHCYErXK_?4dF9Y-<*zssKgAL&p_YM!A8 z$c3;|rLRWAf0;Z!&O82x^9$3YSLna?1ns3`UsnuNJY6y7S00qZPURH{GJOw2|E(%3 zP7Bpe2_*J&cxIdpI}Vp>xGUW=nC_vf7~}8N6@%%X1CR=K%gV0D7cSZZ2lav9A6dXU zhKcOgJ-KrZ)T{i#_v1nN@;(gH z;OSi-`TEpNSohNaI5RmR&j;r7Pibt(U_6E*n4DmWg7NkW9rC;0z~xW4#tj}+>7uuNVcG7&K(Y2L-SL`-L7bYf6sgn#t#K;CAMUtUt*E;%H^Rsx&$ z@&qDi|M(xZhw#&vfu}PRw@7w0J_7+Ym(Qm{7JsO-fX(Ii2QX+rg4Tk3F(fY_K!y+9 zHC?*&+F1GGpYIn;W|GXxd{x~&GoHilpth?bBgr5c5iiILGWAK}-wzu9OHNNIr zgYowC%Y(~P_C=VE{5p_RBM+r?^uPTMV(#7pk(Aa>Bz$@Bx4j(j^m#jE38DuS= zVN1a89{y7H5vZB0CPaXUkPUhZMyfGK0oNaXevlP)skiKGn7_+>Y2L3OiNf+&9ZmT8 zmxmw!`lrAC>Cb;gYks~w{KqFuz@MOz&-f%IS*9T1uY5;%=FT(CJF_@Aer|8%itHA)2O{6byiYt-}5o<@Hynd|Vn8+yrS_qFwZt;UgBpC!a2{M%jFW)Gd@rFm{l9! z>GpfI8SCHr{l(~)y*e>&5^eQ|%H!klN%&}dE*~|4USaN+Jv%WN5qt-RnPB0}vq$t^ zG0cu)UBQ=TJ25nWe(1=uwIv&~mfOgf?U-6btqdI?NhXE33f73{p&gC>TId@8jdbm$ zkjmZa8>v+|DZ9~ITV6+cYj{^<*GIekyqa}i(t7oK$2AEtTGuuO{Z_cv>C905u1#;J z0Di}&4+6p&3a|ZwgyeGHUUMD+d6z`FyYc2YGIX@tlZetVmo|yO%x^nI_G3tG3t39sdbLtgI?-ddte}kBd)6E zEgDzn`tQ-^bwn?lR|#hRGTJQH)pOHqkx6e6)P*=D>yt4jNvMwzZb%SRaxdW0o$JZ3 zAR|~*aU=^d=9$+^*3FhEsn><`{LqnQTeAb|Eaf(Gic!@fYGuaC)7qK13f73{mkvEK z7Ju_YPj78`9qDVs`x;vx?f3J7phHQmU#(>G1RcLm1eGMXv~+E6fY%86gpVL+#ODP_ ziqB^~)4wdLj(XIIbcL$t=I-r*VJS)gEiqavXA5lTLXEm|uYW2zP&;Gn>Af{>=+!*>8k;Hg^7RJUx2HEq zc_8Dm-q1sad8o?0*0`ar2HDelgB<8<>-!p8Pwn^jVvs{g>(%dkswxk%?9#Q|AivsN zwF70FCvRm4b`5YF^Q=bGua1-Obuiec7TZYNwOxH)Z3Snrm?*i~Y9oqm;iy8}|i00kM_S^wyr&k=|P0)!6maZhx=S>9M4G^?P3?vn30C z>BOd(-_ZALRHu_+Z%$o8`32?U^}O0|oWy|QhB%{Jm)|}yd4Few<)2HaE+PADt)OdN zLiechY`I!})M7X4bi-ol>h*$cVY6!8Kcw$Miu)i|B1g$HXb}7KsKclBtX~Xvog&2B zV)}4LwX#J|`_Qe5m@0WcyI6ykjsH1Xh}!nnJm{JaU_W)wNjCgL{e7xN+~c`N z4J79^yKYtM?I{Xtvw_DYwWbji6o^)=c!86RhAldnRRJK zUFADJ^z_!A*DbxazOS+M)P8@jL0(@{yC+1+ZIumN-)EHPWXUHkz1Xz#8b=V(X;-jh zUfy{TytssCV9SfUgwLPx7r$Sg>qju>dA?SDBT9S$-h9U2&k`ZJib<-L_gr!6xm=rn z=Th%XtA7}#)qL;gr;lRQMrXUW??#uax9TG~D;qweYy=!lFhNfx1>0{-P@X+2wV?|Y zLpxKO369ief*pM@!Jghsu&c2%!A`#31pD^%CTOjmg3=qh98HpS|Q^_7y#4Nj=KrcM;;>|M-XB|Md4RM>IUTPmg|5 z7*a`Q@z!`%;NHhazkdaweRPjKx}pxR=)=3 zhvlK@l4xBr61FoS*GRDavH^hmh%DSB(T?! zE~iarp?5V375-(WuJU!%bJv`XED33ovw1`Avdg>bI^rrD%5B}DW}mPA`fLr7k~BEYespk zl&h1C13@^&*vj9Zs{s_MqQ$g`)=@HaIZEsoN~g5-Hyoa8k#a(}{S`$E*yWG_cotJ@CYcP$$a%ezxMaiP zN}OS?z2VicT++uBpu_)MUQ^-xn|Gq_!-TxX4562FP+#&@|1j7-#83sb)maYQ<6=L* z9AM^C&F852s?CB?^;*?ct?ITR2|_~6>oE2Aoa-_3_^w+nbMA(1&hI;Ou8i`m<*Cv)*?2;$8a{ttX9%69>3^bmC2LT$RJ7=vK331Y8&LOS z<>aQMqa4$G+;8vJE_o-NwJPeHgZ>4z%XqX1%6!Mc7pcu9@7AuN_`BwD@@j5G<{E}| zefK(2vyW-?p-lZMwbN|{;7si8E?t8lM^`zmO^1rz>!}gxHK6xq219OT9ls1Kc zaB*CA@94v_dq?jU%;hB{-m5FBFR#c_dR%t*Qh%IHa+dt-mY$*$dS9cwg2Sho+T?50 zbKjgsetnQ#Sut5b_=UpwOJXP=UWfdfx-LL|(uGkjX|dFxP_%U*xkbW@f$R^q?8pVnU(bUAm>#FM--E_&t7{&RCzKk%J8 z)W6Gyx-JRhI@#gz2mOg9Jj~Zi!o!k85q}zePRgj?pV|hyuCwm%11+xx2=aR91vlzX z8=^RlEKzPu@C?a?gMO$R5Ot~_=@WyGByRZDC*2m>x68StES}`RedDscyR!&}F4g8h zFsaN!9~tMc_2o7}>4S z-5S-cTQS`l*Q=4;d9d3D@$z~4eNG_oJAJXF>T+H85omdZ4jy|o%H9(72@9bs)`xa~ zZy$bHvU4ki89fp(I3GH|Xy+f^e|Z1%&(+Q~yC6RDd*GRD&}*16NEgtKm#~*K7&dnp z%j0+|*h^~rn8w{tF~sLIe(tC8xHe%=bK<@kyXhZgOY_G$%vc}lG>m=FjPpc%Jf7N* zm;RSD7=N+vW3a2#KI5V^CVv8q>w5nXqnima&0>ymIz=}U$`XyMo}QcNW=Zh4plCU| zxt$3%B{>Ld)YfQaq;sJLcg`9#XR7+IOu)(;K`6D?=j15S3C1yJfU0TyT(3r z`}T9{^>c{C2rtW^w08t;Prq%8ATePU_+ zsehBFwoo%;$&@f+E%iAw*it_n^q9R2HCe}{aT?4yn}n=cGMQX%49tl%a1HxohC0%UbLrX3X?SE8qFQ1ET*ujq_LbcsxPg9<+QNHw~O>^$WMZ* za;h4d)MYB^3S$&l4dLSN!$H+N9Y3)yYIM)!X2!O5x7fEL!ncTYtso z-4RGC;paA-!GrJ?)g1Rxs8tz+Zge_aN04K@7;1QoYn4JVwv@!ooUA42wwl@XR09?3 ziaC>3=j6WuWkAJQQd)NSMarP{aiM1xINc#cS> zWBqx{=9k0$($=vg;(cdZn4`^5BY#xm)2F>D59(G7ni~=pDq=VXKq=zd2_PVwSU3cScRU= zPId}e@C~U*m|zWQFv<$;nR``tnXO8Dz?Ji2gobtN&=bE92|KQ2iD0L!BCBMm1f+~d z&1w(LGR(FjZPdDm1g%n;;SIP3*I3JnGryOLD$WTjEoqwJJdP?eZWGPtb`gashYrWV z>Ku-eja0U;nr9N>1=%YcOXOu@n+dF49C<;igLq z0OH`nQ%Rx12G4H4Y_wN`KyiF)%Rh5D?}LzL<=P_yFRjU|qf!t~#kRv{QtkwA^)QXy zl#^g5#5hVbBMI+uEN$?W(qSr3Dd(}-7Zs^lxpu&ustd6N`26d<}713Cn^KFd?-n50PM%DbqEqnR9$zBZcECuA><=Hw3frO{0HuCI<}vYmW&G$*OVi=&xv zi`Paor4(z>5LU9y~9Nr^9guN&q*gBpMf*q9c-=VeFJ*MU?MP9DQ`xWfrZKQ&0Qi-+V6Z+ zTs|dBgewzKHH?Za3bsdtD8Bv!*1xM_3T19&b98cLVVC*?HVd~Go;2nJm$~vH3xDD8 zegPT>*x7V~?8_#T1_C752V0i%awb4$|39$Bdr=~7$;UnE1u_R7+a-#uDt`P}Mbc_^ zrttRzga28{h_%jWd7gebeLYcPRJd9`1o5BX_4OnSF-~!#&rT9)Ewk=ym?ex+Ewf*ZSwWjBXv(M{PCLi#`O7b-AOHN@pZ??XU!mDA%js{Q zC>8ometJ`cf|^1Ktpr!p7=Oi#u5dfNM+~p%w;$O5oWK0n18un>N@z-hw)YiO=1qU~ zugIZ-YN#L`USV>0<#xO_KDI}Vu8i%G@|E5hYkjA->v65=J(!GY8((=s14WN}bgZ?U zhV8H?e88T-!4NxYe9v;+2mJB`dgbxa2z?sJ;`5h4d^S@acb)=GB0ffm0N#yc9zSbf z$w<)*SVd~XjSR&1^Y4HD{U82NiI0Cv-#cDA?+N%k!RzLI?EA(e-fL06OB2hg^q$Ko zo~~=}gIK|mGW~1-Xu96id+1>tH?xx(%y*3YZv5dN98yVZtl|ooTg=M15 z!h8q1<-p{Cs8miCqz%1T=Ei)bbLu-&<;6du_KU|| zD5r)BaLphFVN#m40&5QWCg6WyanQVkQ)C745NN6nf_Uu>81~a$q*Rhs))DHQG8HNA zO^HvbE|uD*^?T7jgVoh*S@%p7LGJZjkPWs)5X=yiXhj`_lqAH)&d2WBYHpg?x<6k) z3vjnK&aG_ObhePG6Q|_xc}19MWUJJ9!O7X^nNEu=4lau0;C}xc2e5x4S~G3=Bb{>} zrfKw<{6RB8G)&NrAIu+qweVcMGCUWMAoq3Kw+JN8_T z2cS=djAK+yuk^tkUq9oW<%twUe>eoz!of`DxUz!~_>D!2P{@}koBPjKG_}YYTQn4| z(Nx6~)u(GY<_Oc-vMPTk#xYyc}ffzk?WD4Uk2XRxGF_k|&dMV~sE?=Ice`Y{vUq98JcJ73XyQJB5GMt*>o0`683>iNZW% z&z2ag^uEV;JZ!Nm-J%cJzn?nDZMPbRJbR|p$`Au&?~$y zQ2vtYi{B099}RyIR(QNa0_!|B$5=Ux5jiHirYryra%ERBX)j04_at(Wx;xP00KcGe zoj5Qjc)S;LPn9z7lcLhVwg9>kvdYYL67g5&n&kmUWv;U&Y+rHJmM3v;Qtv~Y#)T$U z8_pe!dP6L9pXW583{l!j!;l!pva&=%rHxo92n=m13v_=V%v$J(Fd}jU5-U#uPQ`i~ zFg{NYRo9&_aKJUs1*aKiIAymZfqrtiuro0xR~+YinGbMvErPr ze>0~w)#Qte18qshCI3D-jSE9u^=ZZThSR7^93&CvxX4qCC2nGH?O)De4gMONwrNh{ zg--5S7NCFfVn_;1N?y!SE^N^%#q~LkDg)lseEb{cuL`gy6*$H|a+2Shk)O~Clte3D zDEhm<>a~Yp4JVqx3{(mBxDOGDeiTPcQ6jbDkm9$h-Ak9_J{$`bF{nxqCP7`BHw2%Z zmj}zGTUBI+^-86$Csc<6s?tVDcNP|y6v{gZT%~_V;is=B#fUWP;t(JM%~7d@c3A!% zCzuqijmmJ5fmGF!3J)z;t1=9 z(TMHAXvCz6AdP4dp&v^T8XGx6BbK9Kh+4$RvUkwf)Ksp*JO!i9y6-oQ|K?|XyJdaf67ZJ4gI7o=M2kzxNBhcmMb}@*8eIuN+tBF+DH|VvV_uA z?hn)#1YQnLD~7Os7>U>(j6}qm7|)d#G4`<(ArZ?l5*v9Php0t_s;<8~JdM%I zX!hJCSdd#h)p4D zJ)BGGE7lNZP%A0#(V)IA=`}6-wv?E)9xrBP2{=+(jBD$$WLeiDXezhF$z4xrrS_4A zMiMS9&p%pEyy}&h<9X<`X`*kJqNtuhi5be=e1kN8_Sa^AZHn?xE`J*^qu+^``a6;$ z&sk%4lP1++_Zb9{9fj~f>SR#3`QB@i#d~=&3X{kBfcKIPb_b`p-?N<7fm8W31+o z2gctkV83$=OW_w<4Fs!u$MC|^SbdSAd%X`t?X-zO;Q<0%cSJx%+82u*@IeP^4!JF0 zmcN1o{bw(mA1Nnay&-sPC_s`ct+rafx;NUbn*F`tI1yZ%{D07m*Y?6jsiWTC?^y_e z2&Ebv{87)&EG=q@w#BH5orSj@*hzhXgc*xJpt6u(LDDT&c@L5|c@L7Kj73`u ze4;i|M<6Hg(tjrJVbCr9hmz9iHu1q1j)|uedKgzzeP4b=it9!uy*J`wzh;ofxRq~{duBP5${k};^frW&W$WfuiH_3tjjfL+93m?mcwIx;ungeR^KOb|P_s@6SV|G*v zqr^I9oZMt0OUXf-bPnR#7!WkS%}vZC62s2D-}LTNh<{TOHVxPLCe8|qA~&6;ke${F z=t1CBG0YFqFO&~g4nr6^TCxW@-6l**?f87GJ5SC1G%3ub42R)5ef7A6M=ET`7}y}JTw{R%gwd`Png2md#s zU+W*o0k}4DL%*Xa`e5g4KXW=WUQY~`QbY`_Jbw_!H@3SWV`1iYddFH|JJUrg)0p(G zg*d#Q%c!_I`#|Y3OiH;FQWs?j+>(8cy~L00TX!6-T-1>;r&vep}Ew zE*{SlozdZWX)(#0x70Hw3R=A<9=rLBnx~hF_b&Sw-ubf?+%c+m_QZDC?+))>Gemeh z>@zi?Yg@>FJ4%4GhY08*vzKEtr$$B7)PKa#uGGP4u(uY|u9Ym!x=Fj2k~o*KvMP^f zx_C_>zA)*!P4^q*WS@-4mU}R7mE8b#clz#kAg+V1cJcOuW&?!1oh%ID)LOM8T5IZm zdIYlcIyeF)$fPy=qdALH{y>yfZp=GNSrlIn;kbLaAY@JHqlPn zlU>3nQv@b(duPRDK?9;L(KMSpGxADK(LHHj=VoIfZ%R<2D1)Tzy#26R{&Ym7rwPQv z;^|v>K)L1I_(Mq2|4x^WpLdp?dB)Pe<-qbINLT+vMf+I&w;$N2dym$S*SF6!PWOf9 z8mG@~m*!adaUX=|vil#jl=G44tI)=84EP60Qpj_i2J#&Efks`KO)u{Y4zFuEKbd^8 zIo5eZ&wOt6tR01M?zrYrF>q-*1<*gdDbjm-M4)hQj(w{ChDi8FDO`PaET5udi-Yy% z8GGUH{{ReFO_z}z6BDTbL`SM~Ia4T)1Wx3FnSuMd2=V`*E;mX+Cm)~AKeER(9uYdoi$M=`%1dKpQl)fdw+>I6ApEaKX?#kjpbm zToN%+Fg19t9)@zz000UH& z(e_tKCB32b_Sc@vyR8(CYJbr8%t|Kk3eW~tz`%f3_FXjH^RlMn$}xwa#9K+Eop%;N zLQ89M2gZ3P3B0?rfuwjP!_0-n8Yb&E&6YcO7HLqvaBk*_qWQ?&YaNpUQ0mQ$vKtZI zn5i&VRH_FpbmoA;^A? z0LKuVcY61DjD|Sj!we^VoN{h!8i%x~gEu%sf?H;+(}Lua#LkCT=^`O4)7&XI(?xxD z85Z*%$?TsiReX1no3i5fusRp40F~xLTo}ae8L%~wKd|Lm8X?@ zPO99J!|?Z(LH~~_uo?*paRaZX#9OqnX{J*OYoch)kWh@i)N3Ast_BLm5;zu6eefHrO51FWqDK* zpN!;mZ$VIcAAc6VIX>ss+IcF^VCCK>Q=ec6@C1enK|AJ1v{FQn zgv`|b-5`#LCtUT{Sc%Zy8y-U-)d zg$z>#Xbvp9&%YDf^!&Bq-Wa*Xc&)1dB}NogsP)`|w>E%}{=Bj(AhWAd3_)v0@TyK} z(1c@)ihs;%@ELTsp!F3Erl6}VBbo8%g6`iI{XWfzuL(Nq=)IT_uLKoGb+RC7Ax5-| z4nkOEXE)wQ%M6=%b=tsCYG3`i@WqBiTo7uKJM&-X%=rJ8Fj&bn*8I>I!MniAciF2ZKYLLuh z6%<)GuVv;ICbE^ge(&OS9Zu{O=#TKUC-_x=Gb0z;LmGEDi1}vRt0n0(&ueT#qM;HR z=%({qfnEge+0b_f*E9UERUoSvdT2@qij3#4u}DCpWGI#6uZ=?&p?y}!yEm!bN;B>e zyMIS$*qQKfKkO$mFXCbyE-=S7^NH0830YM-VWj}b2v+tpA~JwQsTv{cW=wC84WvkXdG9x7b zzf_Sf$XqX@sq2EvDsQ=EvL;~dWtY}jrTd2Q*Y|mU4O5lLTP%KtgGwlaOn+Hnjl4vu z$6N|Z*(Q~B@d`0C04y@eg^~K5R&H28h9IPSb!1*Gs6uG`shY}*_u0=sp6zdFa=-OL zt!b))yFIVF4`&y)O)j&)E@^Ed-njON$blAtIVptZWDeY!cv(jjbE2)Mkg5WSIHkf% z&-_~fOml%i_70xohMH8}(0`NlI2rR*Esf>G;40-Zb(SCQ!AImA2~2A448?ouZa*4pYgcXK=>tXs zN&`d5&4tWhl@f2WW6k=!)^x8kZm=o?>?MoVu8M7HK+xf^$Fi`#=6|kD*0J8lAo6>y z&McfNnnc=B4Tx`2zjYOPTUNMNhHB4}Z|AbwzqOIt1Kd(1`k*$o30F(R*Xs1y1u_lp zip#{e<)02-lKV*zhT`hB?)RP+NUkbTNE~yPD^fOh7y09wnU;h|RhLLP0UA)&G3}N7 zr6r&3j?0pZD^B%VihmDsaxF#bg5O4OUa-QO;N#g@ge#g{Uq=e4ly#0N;2clagLKB2 zcg&0__<3^Dm<}C7i;lkR^woqrUsKREbko?>8OFIlvQfP~RYqPaK7CzgA~J#F&bOf@ zEu%eMr16TqcTR*;)b6dDH=VLfNt6eEdz}}+pzbBZ9vW$<^Y`d4mY?UfMG_0g>ShN0|5*}0x7&|DpnqRZ{s_6HyKhtJT={3^Bi#@0@zBr1 zx9O!lK8N}I9{OG3;TjHn^sK{=$=@6@UkYu)_hfh#h~Q3=moJ_>Vma%Ev{3V7P>TwAZ)wh?~cU$K86 z^bD^JFMlc} zj8+QV`M3V`kJEon;d$qkZ~%_n8Bt1M&|5O01fIj+-+n%QxS)XZ&;LCQ+)!$2{5yUh zKP?Ee6v2`bXm&(+!6Wyj2H`DV*XQ-gR#zTxT}VV{8GIp~Hati|fgzH!>i_cP3_qg&!7JK_kS|pUxw4az8~zh+dLe?V22wY{osK3 zz`@>ZydKZ_o&*2!-{&uXJCp#WP$;zt0^Dm8!V%iL@?mp3Ly{%5y??(=4jw-=Qb~Cz zNN50Zg9A5$xnYWe*lRe~2@Fi-;`QztkMK+oE#t`Ppl{7UknIWl&<>w>)5mubXr~wso038)c1UyCmPWZv#=G@Lrd0ihRwnXdnCfNKRRcvL09+5@1HnGHollJ@ZT-lgv>jO|SXBAK8bk2XOJ z3hU4-dJ{p0$?oDP;$)wX3S4H9{V5VQ_=Pk&eI7A0ea2C_WVyN`+oV}pdu~DHRa;%% zEtYK_X@^1?v~=uOMqn>R^(CKB}(Is!WslO^$kcEHu%+-eP432Ti}?Lo<7nZs$+s3ORhO$(S4 z_{)yQ?sfQ{rPX=norTBlPEb{X1TzIqFU*&3SfAR+vWz1ZQFKZ+h`g#wr#z)zXzY^{o{UiXLe@q&e=2P&fJ;vJ-@zlEm(-r zlhbYU-kTK%`tYr*!WBgo-j_}N*nEN*DCA%33+f(d8RmxL5|$i#@dI~mRE!>tJuY*w zneeq_;;Zp^-KFZcg#Jt8Kfv;M@?aXN98}I;>Vqe`L<~3Alki~P0mw^M>s^|2Kg7D~ zp4ZGK>hP$6KL^5h8+EY+}?&cydWlCAE2mzVv6Bru>Ca_B=2PZX#hJ8E^zwuj)tt zovxAzkF5zANW&`aIRFQpkiEQQ#Jft|wSG%TS+zm-N&!!E_Nj5Tx`6M&4(8#-mB{Qn zcNO@qve2lqg}tbokW>Yh%5tivwo7%@w=Y2?V)EU>A(|=Y_<1u*JT^olY|%1MFXs=b z8Vc69B`>9m6E+xkBiuU6gvF`9a+uoDv9!g@N!5bpQ{N_(*MK3?siyvxy2hGhY-YWZ zD3e5!#QFg%q7cP{#>PCQ_HSx7KRHZRWL;DuTS!wYByAejPqKVg{qu&L(3IXToG&>;|t)~SW>R( zjKVjU-k;|~JJ29GR)sLjZfUJV2YmI`m-AV7+g@7nqaej#`>cx69~R~62<0juNhVsB zDVS{_Bte8B{`K*NLuIM|!U^SVh)q6Q5K;Gi@Vo_&)yN6Ba4|heOUqMsr0h+y(*s1I zacCX}RX@VlX`Z0MANu?fAE^v>2|E-uAx3LPM!tIb|6D(G6Mvr?`4El#D>JvfVfNzIE^=c*s@MzgM57i3tv1N26c1oJ%tRIKHwIm zgLBJqB9J-)Z(^fc^gu<)E_>L&g;iiW56K z4R0+rZwKBBma_WS@M6!^2^@22@M~kmS%-UoO#O%8c|oC4*(q(?-!--bNJ{@<+jPe7 z=z}rFQna2*j~_8Vf&3zpA@mL(T#&aSPbo>us||>l5A>g;1j2ojl!y69Jk>WUOa-zb z2K^;1AoE!Q8-_|RZ%>XcANr?Z-hCuZVWoqxvqKvR@hON1oMzBIK28)u?6NHs6$Ia0 zxeM~<=3l$H0=Zhh+r8#SDO2+M@I%4FB{>y(JwrQxO+~Ig>=l94YVF@lYRxMa4w>L1 ziFHI+g?zBW8>2$ZN)+jn*liIaX#@LFS(SE>3zu#-kro)uIMcqTTMR+ljGEG zj%%;h#@t=FXsweMtMDYeVScY~nRtyb|K#X#=!0F^-)x8bpc?>|R2}79aAS^a{X=Kg zgZ*`YfTX-Fk5RmBwnn_I0BwjYk;R7L+K=0fZ!W40|44i&bkj*m%{Wpr)g91s`dUYH zB(59nEMfbWjd${+vHalbMD(Q|O%8EoryFeggdU}#&51a= z7XfngjF)Hg@yI)m=>7n|aeGrkh5|H_Pn_)!)8VJ2=s(fZzitW_%SpRKfhmc{flgK{ z^w&ILz5vX@Xhz!5zlBAk<6qgj#ndXv2XHMxmrgqORE9bqt}Wk#(T+;O@ovC$NYlc&TeD zD0DU5@8}-HKm!bd%)SvxL$k0WjWJ0BOtB3A7uFYJ@)D6RtT2w>cl{@NMVZoK0w;PC zcGYG+yXXHwMaoCSAc-4*h%1oKH@iZ{5%|{iMKl`BbCjK5G+M|rj7n%1sx)PSN@yRd zGDVh5$TZgn*@Ku(Xk2O^Ew;JuEhE?iHR-D9RiH}m5djYnAqY_bJu?Ww}q*($lw1j4FgDSh`U_>WZ>sZcO_&B zd5Yyh+yMRvzfj=s|5IDkkscQtHl#EWBp7hWc%#`KA#TwFF~SjRpT>YYbA4jG;9Yfg zfH@Yw5EJx8$Qs7}BVR5RP(d>D1HxdiVf7Bkhx7gY?Oo$U2}2R6_>8~l?J*sIJwB*IU!-=G(=ziAUc0jef}`JZa&%VKc+Jwo9_*rVQl{^(gL_z|Bz zq4vf7D+%?QqE5_ujahae1PDEr=u@14Ln%Q#%Or!t7DC-(dBhgeEtMO8^%JV{dyh8( zgV^$8PN5(qzxaH}r16Ou`3p6591N>bxr9`RpHONpCILJ#vcS3qD6jvwm4zg@zda*4 zFQyQ2W<(e%lJSBrIu0!CK|J{x7+4edqs#&%?EDb-Y)zqd51iC4uw{wgqgP7^3Hx({ zIbP2{EC7a^2BclaRq=W(enK`|xgcG%X6b}F0j0Pvh@UX}i>S?#P(YHt5qE?Iv%VCi zdcx4w_frd1!Wc2HuE(Lt{)P>KNj3Q$5^SIlPKjUy44h>nX;&?_ApoYB_Ud0Mk0=a= z6vnTcoDCUJ3?WZ$Mo1we>(Q%6sAiDZDRPVjhpEaJ?hpae0nPYfLwLU*|$Z9)QNp=!T;00I_P_l zgrV3m<)qdiARPZ_mwzTvfIzCG4|p#(hCfROoUjXE)qdv*C46$yF9 z9jj2Y0UE;4l=@#bv1u@<#~O>bS&(Cf;#dB-tm_dpt|Gs=)Zx_cPIf1D7+?n}tpn7( z3@IeI!L4{YIwmY^g_{(pyM~Sb0QCv^)Dcj9dFF4Uo_>Cm!eRfUA=d|x#t`byYSMCP z5fjs|Ncj#z0N@6*v!VPb{8FDy7{F%Yxsm+@WtdGz-Ti=Mus1^)Si3F@l42mUK#h!p>UFEb#;218cGER2tZ2GfLzOss?f zGbhN^1GR?`bPWk?#&a{-7za#99a)Nk1O{vuB0DjI8;qEKM8BMe-g?ao2wqGRO0Qv4G)-V9*Bn+fQxsA1=|(-9%T(Da00hp19Rr(sxcVLWtmvbA8(MbHMI8;?l)4nl(Gk>rSG z!xB~-!to0UA(Xh1A~E?w-^$2r`T6OBKNodDg3kg;AS(hwg(R8kL%GM^%X|Ze68%W{ zXG8!>h9?Z&_#+NAc5;wP8QjF*fq~C*!Nq>9Vd0dXXT3!Fdb1t=4UE_`nYqhq7B;Q%2g)@dBs4<4hfW9v8%JJv*&}%2|F-R^B8mTB_Twuv zD@d=n!Cojl{QS%n@cs!$zuWk$kWeF*Xg37ZEy`6j=uH|iD-|t6g8Rto{=0uEPaG&O zfnu~~*JK}-JphzYMoN#B z9Gk$euH*IKgoHZcu{^BT$w`xbGSBv+6^4O)413ATkW<}Eh?nF@k;sQqWhnAi&tNle zj0L9gB9+zw-=Dv{X&V0;6pn?4-LrT4zJ)!gzB1TpDw&KAHbVCsLiDsCCSLuv3%T&+ zzhp2)5Lp*c6XetGXdK01nDD;{dVRdQoCH3O+JTpMqQjw>gMPtovE&QEB|E_u;UHrK zC7MFNO9k+amdoBMz-VXRZeoGU@&<1u(NCAKJDm{VGEt6^IlJBGI(O)_k+JFD=eoz( zF(O*bSX;pR%GmpB{TBsu#+mhM#u{PJ*+wSOVw11$-!DJoRtbZ4LOwj6uLO}cK2i_7 zGELj$`ER~uU3iDYyveLHYJu9<*|P3GpjO1c20Y#%0q^5_ZAa(o9Q>vH==?wbQdhLR zMuh?dfy2_YOz)@J%lu<@r%rn}cYG?kuvOy^23?Fmj>qtr*|DAWQ+7AoZ#$B}^BRlt z%)A7KAM4NS)pFza2uT}DD~o@z#sk$?rWTotHh$dY{)RE@%Gw)W{H4=QA5rt>+O#GG z7`?3(D(l>~6zi$gtnMn_ttjJFHx^7KZ7c#^yBl0PBXFPcIXl>J3nMvZA!lDEJ@ATA zAyRN!ih*I(TTh|}@2o2Q&&I9B4UvpY3nQSViB*P*RIjC-^>>e0{F1B=W9QjTxs6b1 znXrOP$DnHz4@LT(FfcDgbky3m@JhYQdK1*Uz)^7ng}a*@Yx;7c)1|j8+6!(xDm=jI z9X};_jq>-6^`?i&wad`lm(GqUZd=~z6aFhaQDn8w?%ABq^olAvha*VJRkJSHjMLHv z7rx2a+nK`+$>|Ek*#05obEyqewT!ciTz=h5gDMKIW)D2m;q)w1m&WBUeXEH*4|QAf zBWnbGpfz(h^$h23d}f(Xx*Z|rD-rN6f{`nvk=t;I$?hF#K&h9ZxrRR7%ehfM(7xA==R2e9tK_KxIw$7u$} zGL^2Y+T7-M?d03m2cL+BV%58^1i|($MbA}~y4T=bk3Y}?b<9YpVf)%UvjJPdzl5

    Fj~BC- z+3yRv?0JkoknS>XZGSm4=sbNe>S|xydj2pZXyjI0QXOPSObGI0;na6R4FoWB-X(B^ zTYsF53sj8(*9=nNo{_I!L{7Z{ufM{hHbVLk@*I5jhZJaa6@6H9L zT61)YZ0 zEoE{kR)rbU#Fwd)m(iG^HU>yUD(6RVIG(0Xx_N3c{=y{1b0nnV9|zj-bR4^H?JD{A zs_C8-be7@O6whx)<2AG(6V8z3aD&-Rp~vm|eVPKa_Y{+FAeKxBr;b{*HMkE$t5^<0 z>BYS6UmRLg=hzgb9j1cZUmqT-0RWNGu-VI@*{zLhp&PC%tf$Zw0szaH6hax=I&hSB zSX5rtJpQMu8O-T>s>#9ngx<0-ONJ}_pIU%5y#8<|dUIo?RpWY@8DF`f0%QvNvv2w6 zm#*)M2GfACnsLNot+0Lk-<|gfN5}#+7bu6CqJdJxQm^LGL*W!Ew<8)K zTGC|LYW4itfx`lv>KsJ=(xQS{d{G#*KFrl!WqbzrUl^}>;vQf);}3ln$ZT37EE6ni zm>sGuGG%IF>Ql5vZ1SwR7LIrGMY^AF&tJI%Gp_KBJH6l$lL5%dq5I^yXBC*|GGEVT zvE3U6i5v^fnO=BF1XtZONf2>HxD80N+eN_vA;P<$J-Ncefk0 zp_XbNjaZ|cBq~yY4;H_SgqiI^3#I3@F?ndUMJ{$U18t-%1N2%;)35-{$^4ThS`iJa zbw4Z;%mdT)%mGCrQg(~}W6UXrinh}X?RF?belLA_df29iKU=b~1!l&^ZR=IeEE)`B zlNhENCM|q7E?t@Hrq4fB)q*Ufs<3Qm_gkS9hD=kxrsAXxF*2+E{M!37gFD@AsN47U zgGFTPgF5}#Olq{SnNznIqqxuP3$@J{pgz|rXzlHK_yTY{e1B!>d21XS^ltg|bTyt5 zvkw@77u7d_#1PB2Re4h5p{IQ~{VS8cUvZjx$*9m=#HW#7?l99k=x)JhPUf1$nSUUF z6Y!%Y%QcnzviyP_-%@d9)ZS+WX`UFnWu3w!1S`(pMsd%^xhz@mlyIistSmW$+oX?5 z#%z@hvjH%=G$ZzF&VHZQHG3oO&TOCnE?WeZ!(s8hPDxw17DIlruD z{Yc2XsM&@{@6b)l-lTBJG*V9uM&2`;zC6)$1^*$!+ofJrDnEVI$n?x@Ob7GTDY4Y} zJJYpF!(97{iQJ;$%SGV`zxcbs-AEmBA)v$kS8a=%Co$O~lMA(|RIs(DkW4QByE1`8 zBpuDMZCS1mHRp7u;MwO}mgk>r>*6`_?m6hS+nipG(L13&1q+eGkso)HQAjngXPn_B zt+&f}X@~o!v^rVlg9bqkZ44T@jv9tRk!8iEz_NV4r*w_KQ0^aso-sYbN@bcXJpe3^ zHUZElan05gW+|4h_v?GdLO_yd_mM}4mt5|}UN+1&f+r?Jk%h|KFD=43!r_Z+Nu$m`%wZdxf(&_*K>AuU`po3f(CmqAdm6b_bD;)(7gp?@3Vy`3eiBVkP&ZuM?eI`Gh{lYt6^8ThbUYqJD2N~) zkH@w|N?V#;tohb28I=MglnA39g{B%Hs1021vTR>fXY_?-W_AHz33DrdO^OX~haTj~wg6Bj<0Rz%)BZ#%DvHK9|C`}7i_gB0}&Pnbs zYP+j4UY>g;Rxu_HL98;63KNc4m_hTSHO%p@KK>QUIgeo_p2*S41?b7n12 zXBghezGPVl>1r_wx0x~=fAWX|I>2@UU2K}>$|euvF{ggCpDToZDlZ+zd-Xw85ITjS z4f$W0p7tPo`NG-X|{V3`+Pqg!kF~(c$Zj zBJKqEaIB{h&(!=()Gx?Gdv5@eA@Cam@_h+9JC?v5PFxDQfYKE}Pag9gcufYP_3dR8 z(Fi&jUN4CBI$6+CD6fZ0m^IP5D`_p)L6yUvnaEMi*>*$%(YnbA+#m5Ij*Paxg}Qh` zh)86otC?ORM{#d;Ljn7j+|Bh9YA332@s~r|4t)qwZ)@Ufm>Yg;`;12FBnUo0waFPl z1WInd%MU$!szIN2Q8@Jj9g5zlI262<@(JWycf3t^Ka2o z4WMdWlO3?-Kry~Z49tTQ@wWhW>XEH@!(mWb83+cKQM6eES_;i!cz8Wo8`;8gvAfdG z_i#r9T6)c4I5I{Jqg}BokA3}atJhwZ;MiEH3h*e=DH|SRLT#f44H<9Ghm}y3pL0eI zs`s*mIiQE&_C<>}g5DZ@A9o)`fiNZmS>F?cCIFMS;LO3IIU=#qqdZ%R{ft zU?^U}@<$+Jv$ZEReb}@ATim|Ap*9OJOx;O(X|tZc-Dq(g*j8oIIEhCjun_`{E_)%s z7Hq&9q%DXp|4qrsBtDbUz_bTDoRSbhEVFtZS`+N@qx1a*q4-Fw(4@LAh zSYan|eGKx%#X1fmK?Hz??E06rpW;NES?Qswhgp>!BYR9a8%%~AL)^Z7Ct+k+RsScZ zQqI`7IIjE=3o-H#cWvWKYY%g#d?Q9d|OsN4cm#XP+%`QoVEdhz- zP~Uz@9`um}yT+!((1I0XPqnE%6><@_{wM^3UvCm ztBILEU3$q!MA({|ydrEx)7_Ff$Dm}OBJA$QG7;2#^_TssHk zE^}h7lz8kcuHc&MFwppszchC9nD<62fmbGmWVJK@AsKl<&zl57)oS=>Xk8h|tDmR9 zglT$-#2O{iM9H(m!*PZUvQVAWGe6rEk;fn9QA>UllrNMkqCG0qTG57F_4@wo(quXE zSy{)3S=J$-%pzY*v!+nTGbR5);+Cs9w0DD_PNBX#*(nK3Md4ood<;N-VWRpHGbH^c z9|2#%V9zNFi}71r_IXL9>-8a#B*<)K$HRJaOAl;}4=)n4QjnKOqFB&JhNPnyd9xPg zvPHssPmF&k$M}$yXv_;`p%+14;I|sD?%@YGQOj+kIm^#5oTEvihKVlgzoi)XTnhrW zmR0dJBj9rZ;S)8_09&{i`%I}{)-UUxwZWx5a5G^2i{Yff)BizsE%8bBhs%AJn-w{0?bT+HOWUYx+k?&^6^L|U#Ha50i|lmoThgHA(fQ~7o!6$3a)HF?Yt=5FF_CTks;?89`*Bl*(6}#h6?pA8?r@|o zk0w~MiT7D~Gyq-b;fKm|x63MlWy|Mqpy=sDa1lhI14CvP_AD2BWK(5=xChjJ`02)dWJB*E$6tuRpUe5rI0IE5}G=K5p5ySUtFG-OndTLdm&^ z^4CdpFnDS z#_un7s{0~JDwiK#pRbqg#()*&ZpY1c8G`0_#}~l<^O)Aa8_xGHs2B(&JV#nW=I_5E zjSO(T$&53Bro*p89fTWk0TDQEHY|bbB|^DCjwU3P-2?YmkJKDX4UNUYev_)4RW0$K z0qjk?&mNhQ89Q$imG_h;x&>t1huAdUMBgVix6k(Qk(m2JqIt`X%FnksR-aFg1_qB^ z__qPp9vQug;cp@=4+v2JeI+u;$=Z zCmfoiVVC1jm(+zJ*o0j_<0#GbmGKb^O6O>BUY}J?*c?_DuS4NZ7zQ`bYK@E_ne4>3 zfB9eXt0ir8h+zhBgb-x*G!_+bYtH(cvmk|9sCo$P?LTmYZL2uZ1B~gXh&LIU184PP}-m4dbHMre2P{bliDiq-?PI0!;p!S zb4Pp-cy#iq$)RISGxL~h=z@F|6B8{|NozXW{ts(V{51PQ;)zfJZ}99_GZf`hgu$V%lO8>CzK;!KFFGEo)P{n#cgS7mrAl8 zRMT)HawB0#MLO_y#*CFvlzy0Eb6x;*+QFuN1e6_AhNc%Q zzkK;OgmXE7Zp856nrGlaqx$?jcf)WB1Au5>df3Ft1EkoP>|}G3T}L1N##na2%CWtR zftDEUyN(-9pKjlm$dXtnAj zb|0?rH|U7lW>nQ~+mm2E{AusfItd#W{O|_oa|bfUzrrI?95Kr6K3Pn~@gfm7Gd(86 z_&x-a)qJgBj2+iAJ(9lo+sxh++~qb>)8n%t8y3Y7$#-IM@2kcA*>LM4kX2m#CU5u+ zAxi*x`NU0?Qyfb>BbvTxHo_6kMr|WQM-U0o9i5>bzeY_RzP{B(eukI!Na9qOagB*}Y zgMaj!^Td)*H_@2y!Qk+^roWa37ju9ssR*Xu{K>=z@$m92?y~A8DCC8gRP;nLp*Wr; z-QBc_4i9zL|CxM>PJK}kIem7@Sf+J{ErWme~XieKY zkDhaN1)TZ**CCjx)L?$}0KU2LJ{2w3Gq9P{TavsI-#fhrD7-6YMKL%ezdi#8vwwQL z=q&viV^MIoOlA)sGNoZmWc*a@+HT-Fh3%zaUuVRu%99=*KfGY1%+r!Y*;XU*8*xA}cwa zBN5N2`G(+Xoo`yHh&$J$1qBxC7 z^1|U~r%&H0oS=)V^7)BCzy>z^-xtOpIR5``JO?d!ToW+q0|nvvk${fvvZTOHeEwu0 zI3+$c(1U;<9iZU6H0-GoWs=-LjNYhr^dC-V)Y_aO{$MJS?4-N;1)82Ac z?6lEkC2q}aFh}$jmIwP}yOIO({(q&R^*$D_ADi<4`ZpT(o#`I_F9Emx@!58HiAEw5 z2i;dMJJgFm9|-MQ&u!%^pBJ4goKqf|CF9tX`38>wC+8w0P9J`^TRdJt=dQn|7POr^ zQB23Wfayp(&gYjRpFy{iG$O5Q-JjEwnW5=LP2F6sL1QbCYxr-e;@*6lL0xizC%)7i z86@6T&6(ahcxQljBu-;N82PDJ3q%s9Iv6!~>?qixX5BNuW1 zSse*6VKbWYTt+D*!)zZL3B7~DY*m=yAQk6$`ux59<*ed@U{p0X9aObe!A`5;I-_E(>v=kROK{Qb=^Ur#h>f^4h1Q7i-m=A5n6=yBNRlb`cCDw!%T~B`YYz&4YwG< zi6lS=v$%i1+HylnrYNwQ5akVU94{RkrT8 z=w(}8HVkuWF!I=B+++@E8LV+uG$C_E0W@A&s*r6E!7PvMhb@R;<|x$#hQ&iZ6wVzZd$d*vgi!2W zs*za1cz`$*@?Biv0f;gLTxQm`%rFL%(*m7hWC#4|2o=TgMvHBh+=~XS;edWq->RaG zdL+H#HiEZ=daNipi7TVUI3~Fl=Q^*oEjn!`{*Pe>2Zys6nl~uPS0sLvSt%1Mg~yIZ zD(eHX$piHmkYzVB{|JB+D!vbcC4>`-4G&=Yj}Nu)oAhdFWeSCv(V5U zu7d48y_gj>7cm?@iWOH-FCtKN*?}9ud-x7&>SW;d2`LW7Tpl`^>>$z}Bh^75cxcYb zpTr~J*0m@O;P(jS9-}3siVuQYIy*e5J2TO?Tw(7qVtL56fV)Ku`_z)BBy)V_z`&D~ zp1R5)|116PU55ANTECaF@nVx@~KQI;WKh$mffS8tKHIBA6NKntca%mJG1N&(-5FeLi zIXn+S?VScEcX$I7zP03~DEg?Ao z%OXqdcD;h}BpnKTzG93zP#63IVJ1dRVVyZ%9^1pM!=^SKg_lxBuI-632U3ekfzE>xaDdY9djL{Zms&7*zGBPou!K-T#g_6qNzem} zi3w!O$Gu5dlwZVp2lH6&e)D1)XyOYM|E&Un$^v7|sDLg1hpV>?Yb)s5g>lzHaV_pv zEO>$7-s0}=Zo%Ct1a~RL-JL>lEAC$0-A?*E@B3ZfIX{w}y|39L%O*2x&Al)~sC64e zyn(;|;d>#FOKj5r)k1EnqkvfEmS%{i#b_g2nYAc=m2G6P24+VsD~D&Pl(NDgQowUq%@f6lmb~q6kPH341!YjE22kbii_TYI|}m6TbraaRi89`7s`}p0l$O>!TV~{ zf~Z)nQ~lcxPP%2Z`$|1YN9Lr2=foO-x2GX2j$T1pd4$ z`D8H%f#d&GDn_xTZ`}stLXUlr-D=H6vBFMt%~1*Yh35; z@XWyTah{O#sI1oNxi#p)%1pZJd8VN77SX4Kw`a=l4wzPOEK zG8fMmz*fD~v^^7yt#3QcmWzYvqH}2obC7JnvJflx7={UUe(n1uJb6&Dz_qg1-g&Z` z?qD!Es?)0BOMFy6-+SW!OZQj=l&ZqBQmpU7Z$exgDp$qCT5UE5eaw4uR)47#U&`5F zrG2u)zra)deAjtpdFF~CF66P--6v$rAD6#qe$O8NTS>?C^p`KMuAh)_{n#M({F{ktSt>&Pa!n~ZIED`{ucbJ&4=~UMj_L=F#i^H0%m%H-4ejaHL2Z!d1ou^(6-BTOthZf;7P>h3} zjf&cRIh}tooxj#$)M!&Fb74|S2Okc=&vvh$NGg0$@aO#x9Q$lvzvtI+OkU*-5GJ+A zM5m&#_e#q9BN&YiPzGw=@OvHtbu(VIu7X{>E)JX(J1o}M=3u)y3zwdw2}tU%4N4aa zcUHpq3{+2*NH+YN-Fw~fPK0vVQl-vM%}=+Yx>|ZHNwY!q=bfMihqIOxzP7VL2N9^I zrxQfcTlv&goc6VuZ_gk77@Qj7U=8cf5qm5*th-bAn*Kze`hiHHo|#@n2%)$Yootrb z&;xu(Hr_2^4bM3Zh@jmF;p;#Dv9lJYO#{1Hfn#pD6|_qq9Tei&%EbSYyS&sWxqF!1 zv*@Mc+%(aon*eUrsQ0}TeqUoTIQ!)U3CV#6KRfO}5;0)oSHInfS*R?;Sd9&b z#~daNpW=3-&4F|l1X#baafRsSY8ag)*$~>KpV?C$oNFYNQucS6mYUhzv8)io*pFrR zq!dmz|B}*ymUHQm+@f1(KRqWuiLdV*dKs|y36D0IZj#{^uIHSz_CwY!6yj^o(y0a`T>O1^s+eTR0hhAvfE0vp#gFUqBsXTkr?K}{Igash3(4BF9fBwAq zv{0eD#Fo||x)IbuM)5?tE;Q!3 zzJenR*8rW3^_!Rh-el#3IF|cAo9|lr!o{8%Pt-zorq52-+-)-b=qGqStEK$%-s90! z5?4UDE)+te{qr^;Sn=86SL`4YZa#w=wqq>%#`f;@OTB2! z(p}H)lUmF#1E05p<4295UTY;a8M{atFk7)gB{gWsZMYjry6MM-GsVlmsA_dMHwBL{ z7f$E9E2~GTm$~*@e@xj~gE5O|+up-rheRw}?ZwAEQRUQ#yFF*}Pu1x>5VPxCnXPl=mrOD_ZlECH*`58b@P?R4Q;aX`?u4* zxxQ6LfBi*)#vgV%myHL}lW9uKRC^zwSqnjjTY#W3aH@&b;P@=_0vMaqWOBihQ!40E z``+jj-KI<+n*G=!8snHgiz;mCx}4Dn6BW5Lb-gMDiOGoM`A<`yQhD-*!G5?C=;X_; zJvtk3KFNd1>(y7g{jP!f#zK0dn^hh`=b)Us`2I-Wyg8YL`}rOPnbK^dtE*5!Pki)H0{|3pmT9P2}c6{!ddDh9>UqRMktKW zhu~A`>+Tz6!+7q9#)m8YHGoK35B^Htvv7V78Ox?~(~8r2Sr|X($0og}b6gbT$R?f2 zT@MuaT41{pW%o)9XHo=ht_dhtxdw#s>=owN99QQ_8tQ-!Kb$CXce2AKguAG)BagDo zb7=DCTkbsCQAa|Cj`J{Ze$3V`#SfK@_n`sifi?q}VJp4YvYihRS~~L4Zad9dLo^A!f~Z_I=&ctBRu%CiwV+-Dxp>_&4#sVS+P{fmq>OCh-Ib^o5?@H}Zcjc%r@~jsol_BH2 zXU?}YDX(oQHP>ybyVXp_qeq~bQjLKG<9cYp6oeK2DZ>rOhrDgwen+NJus+H4fw0{r z@9`|^d#=a|>8YHZ7hqbwV9nBKQah_s!#~)~HLq6?FlD&z4WhUItlt`o@%ihXlSS9O z50kBB0shLP7aHN@qH%7BTs{k31jdS8W{Py*ezW(y?~3MtUK#$0yLjg?Lgtc`(+sKv?iO#Zx@ zW@q`(bxMa^dJyaXDCtWh{QfGkacwj9zfq<}c936SGC6)kXkJLL=?4|aQDHGIYHP3@ zF@O=o!^i)B1(fRP#FI4F`sW&OOhU`odeTuaJCZPoT_p`*8&V8 z*3IfaSf+S9TZSM*e_8cGf&qy##^%lU5mgp%ykFHl8{J>Wo!zUTvK3?cW9EIY!P2Yw z3VU~R4+fnJ3kD@TgWlT&45eDj?-qzVHZ)PKF+B<0j_yjcBR?%mpasX1RuHW=_Fa&_ z1(??Pe8<%;=9F?B8X!y-jO-hoIHD1RGQ@10~IZBREsC z&7JDEvze`TLSS$Z@d$lS44GcgJSy3J4ON)v8Whb+wN@)UQKRwDX;yruEcZC!&J)EQ zructLaP>#x(=^<}PJsB(04O_a5e29)$w!L1WY`VLBjqzZ{jo?KKmW*{a=@UhJjSR$ z5db*c34B+z8n}xQTV%ew4fV>d3=~ajZc$A<*k^NKSB`kelHJHH$g`N5M2A81q&@4h zmQtXY%>&!EKNAIPiDB@?hA}l>0u#Ig-Kq30jfx2E;rhJfZ9wtZ6;O>Nhf#M_dRw1o zrbnQG%7cKJVgZc0M0-cx8ImgB=83cj^*up9?uKUW&yfS03YQOLDf`ye(1f5NpZz^7@6X${QadK->1K$$>ly#<>aphevhceh z+1L;wQ_(%Z804EImSM@A@-Y5kk=aRyMpfkH{O#HR{N4BjJi%~^C>zPwxs-^UN#kBV zV87wA$h?Fb@4b35q`#3dmw7Lkjdh4;m)W0p8@$f^h%kfY_Y`A&SP>IABOOeH&p_wV z%do*f$3V7UK!AMZxo;ExGmD#)B#xc-yJ6Ci-}}M&JLm=6{dsOybVr&BXd+%H`r*@X z654g+95wWIO3NokoZ^%TIa?E%PnxbUDCw97mPP*KA+9aXc0?>!#lA=$p>GV=rir}A za#{m6DP9@JB^wDMG6<{-N`BaPX~!RcZUw)(rQ8BX+>;hTsKeVCgy)uX)tSUM;twgvb1gZRaDgP+LyILM z!H3*9uLBS3A!07RY-#U~Hk!1Q-8mzaiMBNEGuGf0-@Zi#f}N{Edj2k_VpVYdk}8)@ z7WAw+R{q0R6{NbfIA+L$bDU;PK0@~yM$~|t}DJmBUi@d185jav1;0A|Y@J9m-BLvul769)E0gRx(fhC0@ zmfJw$=Rz)Ft^lbKulbly=hFn<)rLS~KlHt>sNPi#jw|RG91laM^mi;CMHdgQ10O*Ohr8<@3jJJ2 zw7>P#8}OX3G4(@rZ5`Hd(2ye{w%Y#&dnL?p1eN-LjH>gqO8V88-|1ap?qqqrpln1- z_GIJZxZsqg3E0o-aj?1%=Gol;Od$bR<7mQ_Ot>w+9wy%PGC#vtn*DxX`tK^ zp!vn8_34GI_jPQ#{Smq+T(>R-3|A5DFcM-zoUkC8K?84h)i~ZPn`dM+NKB8 z_VG&hbo~VN5SR7X&=^h=Xz!&?tR)BBR_Z1OusFy&H3=~JtH8L^z_UQ>tb3jfta91S zec|WFch>7Wyjkr{#c{bnX$9wBU{!J)01x@Q)Yr|p$B}TezQusYJGYYsI`mtxKIsbS zr){CgGui5r)<`|MLOWxq-#kg*I8%pR8Yf8Mw!MH5+4#SL4Q{@>QbaOxs))ZAhb;>) z?X8p-rJfslJs=3@cw@@3Zg^U}+@ei8`wUyl)~WkjA26T|d|%rcn1bKo@nno&6=y!a zzERmr(c-zz9N8mvoj}y#@XenfiqU4o2{VQ*ZsJ9Ceas0ZB{%-S?h~s6(Bki|wjF_K zQbs`QV^LHn>3)arE%A*0uT!g<^?#gNSiGPA2Thrm`@f)>eqR7Y;8YowZ(ut%h@(rd z7vkueN<=~d`{n`Az+&QnNHFRb05*6^03GsQJ0IW$o&o~kz(2(S6yVx@DrRuE1Rw}J zA`V~z+e!jD!ATMTW-wOYzvDwdKn>W*h?)-Ev_$&>dn1}MFdG;Ar!nc zIzfPd=2;W|^JJv8sME#=*R5!%KG@dKncf%+oU#YFAEHeQz5K(L6?pT>iq0YBTkEW-4P2f4c z{@@Gql;=L@CUjx?<-0~KPx%IBuWih^e2LN2l-yjh74DZkbgWs{$hC)w-Cqx!ZA0`S zPSgiS5gBXVz82OZU0kg(4tLgK2rAs`+N5-Kmv*MYT`>UOwr_LZ7UiILgNh@C3R!g8 z&0M5&&{6jMS2G7}P{4Gpq7#u&A}%gY@a#|XT^A`@1N~t=hM2d0a>KGyUY>s7H?Ki7 z9gFWuKp%J$#u)2>`ymm`V>U~Q<=gu%GfJW#4u4oZSWF;q&R={^SxxEt8=VS|7C60^ zzFMa@XrnzCZa+O>$#pY0Ac;fx*g;Vq*+FjxDq+hYpfq)a6dKSQ)ZpQOeMymVpOyfg zF$0HyXR<~&k~m9T()kVUrks<7YO(96BzPqJOD&Vo4kTz}j=5Ap{YzPQ{1gmYuIqb9 z37@GW>L#IO3VG~vp@V?OvFitrm}fc~N71RYubk~9HN{!q(P0qb6c9-N6-yrd0@C?J ztuRd=2%A)Lg2jE}L@gaYN44~((S>2fy+E-8VO%ueNc$4Nl^~uqpKCw%x-LiLFGq0z3D=r z$R+qKZWal@P4wW;R>N07+$#mLM0cvZQa284!Mo_LMpzcrJr2}?K^ci5KJ`Te74Q)!8FHWPzlRoBHRh3Mb*Exp#My0cda}!%E6~vO8 zf**)Rl6Otgq_AhVY=YDi933<{g|Qv>Bc^AYl9gTkf{5rcENYo95(K{u%nZt7CEFg% zgC7cH>`BVP)`S^QNC0jIGz^;#yTM7LR#T+HSm9h~PlZBR;XvsaMkesU*223nKvPrb zOobvjK`*O7`VU3P_CroSI7}%;S4!2eR$q=8fmzu>3_l4Lbx_(E`7@$PXC7;0iIseU zF5)H{$dsj4RF_2z1h*-_Ba(Cgm18xqB4!*|gK*JlkO*C%;u13eV}uU1io%Sw0MnZd z83PN2?msdSbXBt;M1dqg7$Y-d;dkj>kRU`LSR4dH2&E@&Z=i#Q75iE2 z-@_6ixKvFF)|zkI0S!5ve1Y&Y-gzxOFcQI3*Fgs$QEv>qyp{nNE9ht~WqgVZ3{fXB z`~XX&`yhPH0844!`j3C$BM^Aa8X)zWIQ}a_wE7iSFdVwzP=d@d7e1l{$5~8FFTgT` zRy-sTp}AQa}M1vNoU zfns1HP=7*+1_uZBqChAHZtMFujc{j88G*gUbVm|cD-%Zt@@8RpOFLCh)y zl2Ak);i-a%Q0VLZv=DL1ppZco48H&Ur5b7?20jcG(iqpg_plSx6y#2h8EYP<|Gx1T z%+w}f#U@`~ydm`8f3*)6ZSpaLpvL(g$RTwA(x$tbG@*!mopDJJ0eH-oNss~i)dY>h zdi5rCZ1P=PLx<&t$Pn0A9?hX75`02-^z8k>vWYg29co1YX7ZhM919T+8^F)Zg z1^%O(qVyErX8N!`avW?VK(hchRWk#7LQ5LYs3iECcEm^KDYSXZ5G}%iV?*c=2;l^S zxd-WM(|SKW-3KxEa79z7JCi^zS*nm>gYl$7>>-``(oaSWj~! zD{V+?%J?9oD?BnUQOk3hA!xzE#UaRR3sFLdeBy*(049OvHHGx@Bbq&gC-idv-Xi@c zf;AXetd^)3Xam&z7@LISQmDzCzfF5!knSOBdrJuiq2<%}(1c0o$*E_^$S^$3VbKgA zG+Ej#WC!c0uYFMs+HvgRS`2XefI1)vBC~|YkS5M%-`Wl^m!@s}{l(@-fFo6n=pvj> ziYA3EObF@>%w*n%x-tk+FgWO$xmI*lo=XDK)Od|Lq$zXy>^znpuFPqVAV#Q3+d+{J z(S#(GBM^BL48HU3b>iD3Y~a<3qzR-!oi2sV;%B)P?isV9ugYT<V-Fh&YFG+-Q|U{kaqtHF&)Lj}B$%n7djtH^SeK9eJS<_kR31Xf-gr8}V z{QF@i@;LZqAwnyxl{Omc6hPx`1RR8&&>fRWOB9n85G8Nu5f#wL(nLKKgb9!frCxqZ zg74l6H2=I{NsaeA1A0^4FtC9TiWNdVG$;=kxdJ^_^$TJ$%P>$r2GBUalXJ?^$|DF? z?oZIhg(z1w){`_dmc}u?{N5*Ma?6Z)Y32qcHcg{12wohJbI6OZW9&()J^^M>h%95f z-T{PPH<15zF@YKgF>0E-4vlDZXTMh z3pd@;bxxb;jGCF!!{X^ zxLV09fyom|J5X8qpjZfxY@vc6YQQJ{4y3fa58xsX{6|ZSHY7NF2rc&uF=Zi~!}f}r zatq*EMy2M9gA~2zhs;Z>a1F8$DFP{|FhE)>u?LO@DZNZ>kFl&mo?R_Q_{B zD!>AZADOEaQn6s2pV-F$3+NiFe+7+FNf0lXAF@J`(;*f@5SW&b|2mK$74ZtYiMEZj zE&?_F1u8^tg^kh{1os~+f(q3^Un{zZgoJMj=@+L7L@G0(wjc(2Qd#T!zq+U;en7aX zFpct`)>JVd49LlMsfSD~_U_t_Bs~;0aQOdTQo}V~L=qGSGM*~HXGxlcKHvfrhH!(} zlcU+8nFAcH*s2J7N{Yu@AZNI_nNJ7dK{}%4_B% zwT>LP9XiKM2U-hS@%f|wv}MmzV>5fh9o!}FdOy6l^#DDdv4LKhmakq9FXAy}(+dku z2)+2aM7G~2Z-cu@T|au2ILjoae9Ty&8XtP%{hO1s@|17UCB&Q0mfWP5QmIj@9Zr1g zq~>+=YE_}8u%~ci@~Sfns*itvym;*+QSBEsDF01#26mP!E@_AbI);BpWJAKPht28ZS<{@|J_B({xpYaN3UUSGMR4s*BB-@sk%6$!&Zdx)s`KpN@5rTC+g)pD{;xGRC8m@zvJnl-;8+V{<%v;de2%5xR&TVBOr+~@L#021};-La)P9@(p zF`?-L5O;AUhr?|x#rbHpBW=g+%vjG2Jddd?YzECY6L~4w-QD|!L$g`=XN>OFah}gY zk|}+DK&FS5GJ1<2+)IlHVclO=xq7kD4#D`cIRdA z=Nm{ppE2H;a5T}4i~C(|4@A^YAU-yvV*8}r>TNw(>%QgG%unlCS4wgM^r?#W|CFy4 z$1tX%MOysfc3}Bq>E-of0jKG`xH^0HXH2EoCfyV(qNMS^OmTV!6usQ1F5FuupK1?s z_62RE2>aqMtaa_FWlEy-x@P!qyn}-o)nY+nd&U8vw>u>f-)kx^(fet?hrfq>1TaW| z6w`zjAMXzyxqsK_w&1&$DlK@f%#JN(Mx_89>&^Bg$(`FTRgSF4pH2j8pYCR|Hd5@~ zc}v&m+Qlu%JdQ7$!TTQ1Jwj{i4(1-XhOzGV!y4X`qE@}W9eANl*It`(YdO$u3CkcB z^d|nutNTmSg%>pvO|<$iOS{R@;u*%>!&Z+~Fexm7WkmA=<#(P~8sq8%gGQQ5ngN~ww`D-E_CA<53+s|`&XlJS^rT4QzXUF3=*TI;Y5 zH!r2L;B5v>7UF=VGEAzq4S6^p?*vs3o&ZP8tCu~8l`ID|ojh3!i%*vAxhq)&OjiC+ z6R(;14s1q{c%24>R&pnz`0cFdWE zHl@HUioLt2`#Rt)+x0yRKS`YEEZu|98X}?4>CfJEg>>KQt#r} zrpA-F9KVL*@9Kq2&*8L3)CPrQUM@t0TQW@#Ow^qBGg?XRhS_O!>p6ZS} z>z7PfCp2by&tV0bvUHbUjn(H8+cA+bGtV+)n2xI#uNT76^Pl$5qZBzMSATZGiWO^RT{qiPh3nQzaxVx-V^MPxWA+4!{xm8QiP` zAP4o|9F#_n=D3m!l;jv?V&(FDX6?uuiKQ5zkjxmM3vEuBv>E1}vF|qz>=Qi43 zJUVDdF|y%0!o~eAN_F#m4o-G9b7re0bpu6bdtHwdRq9YjWbz+wiwt zn&^Z;xJ!&6O;4UL!0&0aKG@1}h=E*l zw#jGj8dvL&2{9rZ_OrjU`$rb4vo7TO&XtSRW_3DQ)3(^HhG$3Yz6j4PrHCh zf4^v3DA)=xJDkv(EwP?43=48W+Uh&!4PNiO$TaZWK~E8J%qQh&hBTht+(hqW z>mXC^K5lvp2s)BFiEC#->vS0;z?mr^pC?oN`^@r@w|!}@d?BR1L`M#$ZWoo)pwyfa z)0EZ8PvTfo@gjqf!7aCU_q}$+?bR`P_~Z^8JnH(dHNel=A9K>w+s|lFga)Oo935kEBGBJMZ&#DMS!aZIE)v0 zJIr)=pO*r+;FLZ6CJJ?<&GPxum*$(6REF2>y#C{CXgY zt`MccS%c#ojUvd?yFFOVN$^#!`b(sh53q|>$szSidP(f`FG+@*{?fu5aU~5rzU&2& zB0KLLL6GhBZD#0z{6f2po6G6&RJw5+yv?ilVaRF3H+$zc^&>;=K_`{jUV+-+!Z>Di zuknPwChRZ?fCMup=x{xKP$vVNKQY~k#md9R=D6z-()3odO0;~%G6gJmAtd|C_M%;Q z?_W9HDh0z$+g>!Yr_^@g?qAt~AF{4%>eFrh4XBG7Iblt0J?33BamB%SZxb{2N<>v( z?^pS6OZxal+eY?aLAyQOz(%iOX_9zqo~#SL!A~WyStStUBSzdgRcbm|E!I?(KpbHA z*j`s6R4p!|7i!Zyw`ORkci)({{PJYyHcRYiCmW%}!+7sj`}XzjT0Z*W!B^Pw?<7-o z{?;XeWnS|sbz9ujoqyo8KzGmI)q=~92I^nEtt7TiUtv0F|LiyT-V09SbfzzR_){t` zc@^6v21| zBP@r*Ygmny*W@$p;W=u)T}b|Q)Hy{Xn{SNQVIO)`on2>C(`$b9wbvE~d^^Kly_)GR zm3Y~m)BXg4wf8JOJat0=&hVoH&$AE;xm@TN^#b;c?X5VBY zKb4r-U-3nGds{28>g5e_HiX#g`?PWS=@1UkPSJ!uaO=%<%_1<6Um=A3{d;zp2|DJk zp)*h|LpPxL;c(cj_i-JP^s$*nvihM-!}=5XU5wV)_cOLwPa<=jj8qzUagD;%Yj}Eo zuRPHcaZ}*=7gL}`uiaFJK50|I3{6aEGiu@?sZf-0>1z0I2_@G;t9?r6nhbq-9@R|W zSnu6&tKDl#<*ym|rtS>|-xhGnZ9%S__O#6M(#+iRU;MmHNiQs3{`cVO%A4u!Jw|lE%^*g zL)m?oZz=2XWwhQh69nG1pCJ znU*xBosB-dA2;L86kSC^th*d-w~&MTbYs0Jx8~Mu$}ruY{<-thG69M1?2J2u?-Nz&TPo>(JqRzfo}S{;Po-*$tKsuD#jdmF z*ySxnkrF@HE+rR^f&^L09%JqDJf4Vj+%rxa#Kv-b2b4yF-YaiEZAa8rJUBd5-De1$ zW-obVo>-k*4mB>#F1&|vTznOt)9HSVuYKCed}ox$q3Tp6cH)1W+5?AjNsf+)%wjw} z;rFcvx+{g$nI1#=t)Em+&#k1ob>>M7{lab@k5&=(FBXxOa@ZR@h-Nwl3px9VbL;)) zCj0V(O7*=Vf9%&TXJ>XoEj7OT^3S8^ac4c`qB~>UTea8rCY^GP-~63*M}hi;RwP$! zTqt4ovx6sWa?7+|4^Lh=jxkTtWIJok{jFAKXaH{$L-UeF&n!!#4*mMru|8LOSzl5@~~r3L;ydlG34?I8yg*gnvfu zYJ9VG*E!*TdHvEOqK~@o=cs;O8sDxYFp(9haSTR!C-xUUh2(Z8AqK5npOvmv3sjs3 z8OOOCtmz{$q+|Db2h$9Yy}#X!o{a_@`o52zw^O-(Z?gtvhdnJ5P~O9IA$)9qZJ7;( z#|fppC<`_VZdXTon-vk2SCw)uG3_u{Im7x0TUIF=$%gl}l_D*5>0!3)KK=)3q9jW1 z_iy%75j~|C`(yZ!@HP-61EyGy@-G_+W$d)8V4w}WAM@{C^9Ku&cV{ul1H#Wgfgg!| zi43(i^HZWQ8D)30HZPaGK5C$@mle#U%H;RweF{_}wM}DkTtMkX{Fu@pU*>t*5mgR< z{&ku{splpj=&K}5E`sJqPs`%%;3yyp!dSqQ%N3e6Ny26x1ysk<=gOK|f{z6(3DyNgW)ZfELAveBFr3KV+4E#vGHU7|F%x3NQkd z1fucOV9_|!6GrFH=rzrP-I?US@~c2#*8o(s+6~vZ*#o6j>FWK#%CvEnZt}z}-e8UV z4*{cBa#VUwBZuz(k;P0OIie{NHS^R)ysPx^6d*x{ zi7O7fx1Hk?Ut?AB7%GQ2hi8mgJ4aAhTIw~2GmwL9kOSll#4pEwM3Nnf=y8ofT1As@ zD>O`rjl)*i`_uc)fs-;L67N)yPF%Y%kG4R!H}{h=mtXI-Q@I7PgMIx}P!Mv*b`1$eK4pRw)=z zO4S8s{BNVQ+KuOrNi?b}GNj1VpE*`^xU3r|Ks$uVRl|2Tc|3Ah6MrJb@84kMHEcXD zTB4y`&0y?@H64nNX;~DdF&J{kce1*g8$U6}bl`sZ%SQuxIU73fdhb$@p>gzeqIMc{ zbX7)Z;9KVL<3(W!<`K2y!t>Uu*5Y;H2(3-H0!V*n8;x$n!S(>BAzsZ*Zmwe-GgZ?H#d&~@?f{^9T11;KF5 zrWvu)v!1qdib! zp|pLmt786H%izQ4C5d4! z@-WVUK{(7V-d3}@NK?)# zi~6gMiL#{XZ$^XS4JCn&NUQv`X&*CmHSNImMbPTjT~{++ol#V-yXV3$ClLRpXT0d6 z?lNay8vLIXP4{J$)vYro-AFq%U5-lb?FOk*O5S^9$m+%Q=*Eh#fn~Zq6k6*0vu@k1 z^fco}L!syF!RKvBpBbv!KLwqmIX(-johWD+{eMH3cU0hA_FknNqwyR&b3y4F-*@G= zfklCwGgiSvz^|@@Cd>&m5uj*35U(e5aaxnkuXB*^`)T)2CZT19qTHS9=}U_T-=IlY zU$U+1GleXpr!13XBOEiM#!~bQE3e{TDYn0X(FzNa`mdaVMW>Bv@cRA!fv`@D$-A*m zIIMR`MOV!FiV{qeEyt1Q!xD>GMPV;8!!*fiG&L%F9R}Z)V}7!nuz<#Yr=KWAmNLob z8?`c77*ZUs4+AlBBlSn*wQeFeyPUkf$=&)FUmfyKyrYiu5qmEzN18det5`HMhu7MP zP*0d{YshZ=68>gCYnst4;~Vu2`ipaQYrr(FJb_gUVym4Pw2P*-g*OtWt+b9?>zfh_+qul z<(5c49T~Eez(b+I?b1?XO>d{pZS`Jz3>fGoKD!CaBcCXJIwh;7onM; zhn5ysLjM*hb~W@WzkE0kFQTuGTPCR~1-k>XHXLU|AJ{}Y(h zs6c(jMmfVY9z}ZF0yhMTqCrCDpl^-^+Fx%PTnrIDdN+7&%;WruQl2swFGncFU>QmB z|M@NTM4Oh+u28o=;e`ot7Y;{v`Q~QeSmAWQ+#8Q!b54zN`Tx~#4yKm9a%!a7t}V*Mz>Znhy2PrInG`b7(Q!}>2r zCHWe?4(k*Dy;PI<-^j|NWIul6#GOEVG~V$)`Z5^M6B-fDaKr#gK-H5GxFQ7Kuh} zf0(IRkS_8?_Jw>0wEU14u=!kXy3wZdCG#;8E15eGxh(p2oq!9wB%A`t_gcHE8TaeL zvttRi+;DWv>7?UX?bl^6FiB0ZW7n82)3CDdl8Z5EELYYTPQZgR=(D$yY1IFt>Yy^U z!oCMn@!bY8U_!KRlRL2Y(_%xRu;P9YwmO|;;zx*3vJG)2Z^ zj=;qU8l5%ef;Y26%PxbBaGkXX0BB-`tE(GR7TGh?#1q0UqE8&~S2oj`UOZbD6{z<9 zWxJX)gqeJYXW2JIFo0r?q)v*yd4a=wvI9yTtV0^APa`bs_I-4YQ!|gG^vzcOr}>OX z!)?%P)q)JU7+*%d586=cGtK(YTr3GP?5KIdDJfk!F(G6LZiN4sbq|Bt0X=Ir`N%56 z8U#1ZN4+tKv0N&*h-Td((bH%D15l;=sTiDZ7ttv{~YD z9Ft+$JK@${WJ7DvfTa`uQi306743GVbm5a*+C!WMqk%{s=XB_%*gL{TRt4K_+z(0T z#dG}P9F|t!xu?!f?}Bj!+U)vR@xYf|j^x#btsUYeIrQ;`pu-DP61eH)A;(nTXwgf9 z!_M`PGW{fs%-~Q; zD6d@qW!9wf!-LkO`sO{o&H5M5qyulL?dcklHFq8OQBj80&qF)1=WTOYzJJ1F7fhoc9~W$Ec+F}{!4x2a&GfpDzMhz>3*P3Ma~-poxJ zfUe)d-$*~2Eo9p&<0dD%U)Zq^!}PJIzm=svU4{3Pg9P92j{Tqf?)TntEABT+4XS_W zeb2(g_S>2KChqzzl$T#(6Im-j_8ueA4ev{>Wgt_SG=_MCx(`VK;Ok|KN(a7qpu|!6? zz7FFUbAH$tK*VLl->INO6B>a~o}ERCll(D((18;tH&PtYx;siy?Byc_ zP=1z(@9WO10YKL2%~qEKHIpzTS3z%y=6cg!O|`q+=9Eiy98NmaZ4aba0~7(K^KBM z1X)~z1&81e+&u($cPF^q$vN+Pzx(~!o#~#buCA%-k*bVh}@ldI7gi69p0c2bRxM`GTnpB0V^5~p{*i8k7} z*j+8+WLMl87e!fq8qCnFEbBZ-ic+)s-%nA3Q0yl#1;CvuDDc1Eq6GhU ztJ1AHR$j?vp1%*O4C=uA8;&~u%=z}ka4yx`8q~_!KgW{l+ejqgH zm<}H)bjTls2O(?354nA2^|tRc{|1FZ;o)Hvj)}%OLf^n~*H$y62zbB>XFNUmmRI_Z z7R1W_CX(l~`XF%Rb`jquviEH)+xPvGZ}xrFT-&u+{>;`2XP6PDHHuM{VRm^RWar|j z%Oqlhe$n|);Z63VpzNvAcqvhcMU++@-oTo_h_C0}9^~^c@lf^zwQIp${ozfopQpG9 zaaVhdIT%Jy@ldy?gS9YE4YwbM54g#-(N@ z2<)u+A&wpSRG!!*-e@l+519Dj_={IoHT|5#e-ak+cd4q+sfcMWoaGg$`!e5Ydoh6- zInsOwEP>_N0obPW3}p?g4hT+R#cLvFakfK6tu{Yg*yD~3)Zg83H11%ge{n@8h}ch6 zz1ixrjt^@E6NOK)-(dfW)^s5Vf1_%D?Fau}&z9Q*yY5IYY*-AoC_!lj3CuUDv?>SY zYhw%yu)6*;!a+l|2s|MLSaG@y0*AC?Or-=^L*l-{!xs5zn3-dCB@xleEm1yUOslHn zBd5k%m_yEm-^)2#Q*z@}shvG;aHCeSH9mLA`Kn#&BIIANm~>3b8L4Ggd1C7$s11L_ zD%m|$g@>;sZr8#ZwD{f+58pyR*G37WJ;{S_!-VV>g?kM^z5I@v4A0E79Rg5!Yzxtn zA%h4lyVgK0`$uD#z{(hgU>d^xS&{bu@|7*Nlv#DfScs-skp0ONK77NtQ(2_(k;Nwo zjMDTgeCw9 zcWwpd)MOek-{)wk1ly%q>!QZ;(@HSObxqYuX#9^yU#nF_-Wz}_0!l;k58m-5e# zwCb9??Ch0cGPX*){7z-h9MOq4^))X!I3ns}=Oh*pLwNumRcaG5!dvvf2mtfR9OOCW zPDBEumE>Y<#nh;U5XkXh(92|ERU)T39GI6!QRhnufi;ko_}De^F^<|BL6|i(EDC5O zGL3bkb24&c13<9p>A5ZF%NteN|ZuI zB1a2m0L;~%mU<<~8GkA%_~o&?_sj&hpNkKqY-VDHL#00|-7}s_PTlbNt+=T&BQ+Tt zggy`p0Pf1+E(mBU}tq{NTDXX3nhUvKasyC5mgO&4+)k$r=%co zZojuGU>#|BX*7S$(0_9NFk>dC5c$hCYqRluAXL)XMh(s2CXJd;rZz(Q8Uom7A~gmZ zRgHl5(X$IdocEhHJ=tAaP0=U>zz@1a0d|Ph*~0*YE_=dOo^36#4bw*FM08pT01Ooz zHQy$aK&a-U)g72Kwmbk7G5BBzZ&8>CnKl907`;W&pDjlV@`B;S>mox~kl8)vCGHlM;|MZ%%FP0dH#n#!|IVg=1_5{47i?NWW>fEg?(1A(`84B; zn_|#WleznU!5{hoAc(o=qQKh~M503@Gip*tabOoZyQ2cY4ZK=_N0Xxw+FkH&E=k{M zJw?B{1!9EUHB26yE1X&Zpm#}3Mp$)C*iCxU;GOf5KB>poVztZI?P)$m@4Hiz;fvFH zw=&Bk@krn3Kx*pJKb@Icyqk#AKmf)LB(0gwcLgW_HrCgmDC4g2-ItKxz=EwlAP9p)5=NM|MDlo00!JM=o=WQ1#^HVWiKf}CSY2kry36%jI33R%Mw5MujESluz+fEOsH2A z!hv>f?l4V&kcQ-y9)V6g+XvPlI8G&|EnN(Pe#X!_-UeC7?rY_d#%9&XN0(E@?|hv^ z9~dVp!~whqR>BTYzMsh*FhttYpbjuNNJVAof7|vVDq~*h94D)Hb5BQTdGGbEpoSN* z3xFepVq=l=#AXRKstN>FgvtLQgYeRN*_bfSIoCBGln28J7eJKM08}9=6J8okH95!1$mJbYGsmV_3mSY2esnErPRIvZ^7dQA!>VZg} z_ku29i;ku>z)4N24UBhB<)6RgQN^RP={t2zl$57_1vi>*{8Nhs4Tx-=BeN2~87LS$ zTuA+AAFLDw&v`+fW(a|&B|6AR6!70?Aiz)?OFKDF)j zfEpu^qh)fd=s$IP-Of5>2zhfR{f?tAAWRz$IOa=h5PqMRivUTmx9n3FwGczbZ9bd_1-lU?^2ak|k6^7vO^O+TnK zernEBIx;oI~!qV>eX+VAmOc}Pk7O5#}y zsYv$C>el1i)pjc%F&YdT-*56zzK-pFk^}3!S|r?+O9oVboRm7EWJ-SQ3P$dtb_e3r`#%{t-ORBKgE3Ma@5B}R+e^EAETn<<{b8x?%tKm z8bcb-_8YrgP?BOGmngS1I;w_oZ}bjs0v@;i97imaKb)6_v*7{+J93MsSEuy9*_OoI zuD=)wXXA6ET&Znk{>b8;j?0OjDE)2cFGux4DYYkdYZ)?b$Z+=4rVwl>6R|tr$=iRP98L9lA0KLV>cxf_9*)#C%-P^-&Na zR3;9z4z1}&Wq|Msa&i6tKyvg~;+7k*A!{8bIdH+d=NSRc;AugL2em)%uyQ3RPt6<+ zXAv@AUcr`3ie!rU9)&Ac%_n{H$E)YI7J^r#F7ha`IIn(~cOAyyV61lDfzzvv5eZaB z^@BUwgxAm>XsKW^RjWXNG%-aU3;GLn^0{&>1VTq3oVAcuj-W`#cca;ZvZq<-FZ zmC+2*|J%La;U8vK%dd!9p_WGb%M|Brvj>>WsJz5gMx(;%Kt1Bt;2SVs|0dXD5u!q8 z0-TjX^LG0Op=^#K9!xPyGPf)>DmepAJxi#DYX10s$JWyT0=6I4d}(&1_TV0h4*IqN zC#@e%eyxOb+VHH5oo1V=w0-7B<4tL4Surg$)+cbK_vh<~a9yE1cNRUu8l4MS?Dn~C zX~z%jG_*OaJT3G8bHM61$kq2+ckB#&M?7w#@)ExH(q`LN!FGt3-=PU&*xXEH%m1xz zj7qI;W2BY;VlDM?@rTu$wqjjzU%>!eW7qfc;uYkoFx-@dD2n9bzG7|n2P-)MqylC5 zBBgTJ+NvVTZdaRMwPZfEv>O}o_Xth(2*(s~9o2yO}gr3VTU6xXKYi zD*y^Q5>LY?lO=oQv2R7*e@tD;TH6K6GVHT8H5Qqs9wY?%57No*PRO)p*aH1q*8ITG z@NWQM$IITW`0J$-w<)?AF5e^H1Yf~-`*iyBxR=HmI<$irKIs;!QlIos?J8Kp(Rr&+w%`JwS`ReT&1g-{phZy!Jxunp?6P}ZrDkZ)j!siLY zE**bXYc5}oFbm5K~tUP_&)^N)x{j7 z+b_rR`y5pJWP9F@Yx~7HdJb@pZ;9I__Ku(@1U1#IJIO> zCC!CBHLYnyjO^-r3UkJB)SinVjbGow2f1m&AO`bR2sjva1QI4KcdsmmTvWYLjd_%3 zwKjOF_*&8mBW-(t6W*{w*f8*n4;2t5JH1B575;3}y6VQuwTi#4CCSUzHD=hH$J z-78bCa(aJD3AvjV-pwv}$9iTS-lYE#rfqjtgwuHpXN`r}(%jHx(U50+xLjJG8A4Iv zWoVLd8BDG(Ku=!bB^JA~nqhxv{IihVo3z|ZOu5mtA%iS>wykS*QGcmOcFdsJa07g{ z4mR3oltt24kv`aD12PW}%gSEnntw!ms64^I*v8OW$qQTGhbmd%lNJ}Z>i=!$1Msn|Eh zZ?BiA^BpL{P>|BSDltiNz~QHPsr^iGnffp&iSH)W_NX@Xr3>@ERmlsKovyOe5*>EZ zqE7ItwrW4PlJ;etE%?>#pcs}_)e_Ge#x<@DoJ*12NW{H^?L6AF5~53y`COq!Z# z{kc|&0li9I4la3g)+BoX7snh2t;^vc<=?UW0+BstzxeDJfSRD>jANzeUhS`jqBCLa zG!dBcfG5;_Ze>XVk^J|VGvvk8KMg4vCE(JSd?(?67F_`)*;Uu230O|Sag#G$oCwW1f28#n-@HZX7^{fLin!+zOTpM>IZyZTgUrvq>m1|3 z3|-zWo!DeliN?I&Pcpw8@(II*Pa7C1hQD+}5d4;o-=y7H1DbAq195`a-;xNLSW6F7 zLM+7|ETY+~8_1iWTkICvc>8@p2cRX9eNP#z$urND9c15oNqi)g#ZkA)?ah=b7Fl?7 z$Fq4ras!chHy-QicfdF^^vsa<%tNUs<+r&+kiF|yo4U!=6DddwW2ufx?Dsu>^KF(> zOQg5#4_t;Hk%w>HxgdY8VHo&wGh`Bs6V*k5#9P0d5EA%at5QE=#&9gReEe8MU9CFt z_!@O5NzzY=kGo;~#3q7>f z?RlZ3R24L1ZnkqfKO{4&o}PK4OOhz{!8~hgYVR46)hPqc5Vj;VL(aemLX+P1*Ejqs8b4xNStf2-V^OzyL$Ns~>j7QtyTO&8X71F?#~*s5Z=Lm4yW z61s;?6zr#NHc=2#Qa1v}QF;o*xznlrn`vGBza~t)gyuOC0jzC!25g;irgL`s3no{3 zK4ca+`XM-QMN3C{Su=J+cvqQs54!O+Cm;HCi)7z9pcul)S$PoE;QO{Z;W-2p=(eoP z`Fk`yp?)kqar*gtDOUZDsD4$zk~&(ymU7Om{&&#Ir)+YFhw;+~WAe=Yq9!N*@uShB zxzH+@g1p!kx2)6{xjYdJVvJ9FszTZ}h(${Gzct0TUNVMknnZAO9WO*HT4na6_~nrL zA2*ZtZSA_`-nK0MZQ$xX)SFpRn~sl^H)n_%_CPKm(NXl0w;lCBRch?fA<28!Zu(@` z+w?QqlkG3Sq+rA7tw> zM+mFP{y;D%NFw}fKe+MdC(H}nWrHpUO2~1;5}4tX^`20g*|O%HG6gR~pHr5OWs~4E(-TMC!^rOrG*M z8l>J75sde@Hp@_c3A@UCv16RHER-5X(1n9(aDl~wmlX`+ZRi{}1t}{+ao*sN_QoD5 zAJj^!;mrFUo1I@t+ox;=6_&))Xh!0Ak8yBOAe-wWZ+!dg8-4w`=7PW#UIpb-!Os>! zws8nj$wqlaP8px0%5z0bTwG!kf;C+yQOUtBnt{O(XVC(&bk#3*B#ZgVM(zAYf!y1H zN9Uj3eZ2$p4vNN&RMBT=!X<8q5wU6opaQLu@%^`P5hR(Js&Ju28jX_fw)<{rIJ)nC z=z%cNQ}%tOrThl6b?;dJ!~!9`7t}XcvIPkqt@KXX5Om(IFg;r|&d+4MWD+1PFR@ac zkTR}n9SV68m6#xzH~O&N_hFr%t{w(I0k*YpZ~Lp3hmZb1efS)6rB;^yTkCODb9L>U zhMpLexM`|6C_)o_e#tL;eM;*sMG3!Ij+IR`Q{T>}n%|fq6pqoZqyuu=GIW@^J#CPU zcXMb^VVRNqTiU?Y;TX-Iby8@Csi7)DZlP_z2IsW)JvWnP3Grm-iXsg8Hz$#vEkr-3 zBJn*U^eC1Q>5hHJ{{U@rp(J;?N)j6la9QzpPip$m;(N%s{c*)PkZbZ&N3IepqwrzJ zS!4Zgo66eXsk}iis8fE=Vw0i!6wXx;Y`XTV($E{ps=W3|AtqY_etX6Vo zcnpOdHddZszv+W_VIKLiRX)Jot-!^~(hTDydXxh;`9F61dPAd#a3bS?cp@Vc%N{bik#cT$TTA_Gg2Vy+oK%hj+ke%`GJI_i1`>6F*8Mtx zQ1y70QnpldHCAhHmjZ=NE!eZ`WWJt7Z6|7%7xZX7{JlaG#X}D#Z8`Ct0t$@^7ojY(wWrVb9WY;qP!F+dtEYIH?`7y5N^C zTb?X!x#BDWl{c;nyEy2l!*W40{jqN@@ZlugnIRO|%c0=`*dKZWLU(KhjjvHLh_X6N zQ(;@tcz@t)7Pa7$eUT})AD>v&h`tV|FsBKFtEzT9^S0Tj`Y1%k#RCb0leIYG%HpOy~+nnYX#ldyk~^oJ7ayR;U_!J_9*@n+yhdfpyDUbU#IVu z#vC?yAK_^vze5F$d(}iuuL)oZ7c(@oI<5@(0Q537FD4>PzT#q6p2Qy`KSD&_Ie09v zJU?RoNGACFpVw#@A!tnqzZyWtgI&cyiNnJ$^uJS}LjRotg|_B^Xra5?{GWhh^5}sn z&;P|QOM%MefN=jWbXhi3CKts1?+qIjik}b4h2rJ?%fQbEbwbzwZDGw)z(XerK>g7A zd=Ni$1pMWrftph-7WH+O{Igb-Cl!?eTuL zGP>B)$luHRenQ0mmzQC4!Cu>$b4TZc(gW83Rx&q?djn!~5PtLEq7 zS(lxa@>^EB34A#KmiF&RT%*9*iOntLtMlVv1V!<~Q*zKm9P-hvXq8y@_`?DJP5su! z&dyAZVFyW$k)L0<7ANEuf#7wC(P?_LpZm54db}$v4}dq0IiZ%put7KWgh^m3p-+3l z^bj)2J`w{~24zC!pKl7v&S*#(WQlKQxVc(7D^H&yrVu>qX}DWpsyO0$4?^2ou5gR1 z1<(+b0~Pl#<%{Hl%@fee^3JOzr&K=dYi`r2!%HLeqOEUhZ539sD zHzOrD`h}#@@Yy-fcxs_U(tv!uR6x7@kwOHUDq68(pUJr9)aP6}zzk5|e2`H>e6QQo7+%fO2ooYz0haOOVMwd988@Z!LSe zB%Jd)i-Syb$T6~s9xD?AH@Do8HJO}-NmLkv8tdLkw&9^>VuVJOV<4$W+aH?c3aL7A zhrkwd8(`XEMVf>tBZ~QQH$Ye6oX@3w4utR$Vc_!yGT<0PB@PWBSYgW1OGSx+_!Ov- zA6av8w^D8L?nN-@Hz#&#F4zIERJbAZ=Q+P(Rx2I6Kb zAVke{;E~lrayt}GS4PwvW2#Nn5_B_B$R~7;?i%p!74 z3&}ScXA}L2xxYOM0Y#YwD37a6pdu)z;ouFu$s$rs0d$9NSjGEn6KrCZ@OE;D_#@C; zMX&ua)vq@u7!)!*;9_3a2*6@hByRpYMqJeXlP5+6SZpt#w*{1& zh^d^H)A9u)$d#?)R^ofI+|!Egp5Ms&Lznx948-{w_2OUBrj zt{2F93kOm?5d+lH$!#Vu<_lXrC#sHkm;DLVmx1n7H*lgafDP|XKVF+OL^-MUNRo0g zLO0fc$*E;xH(GPujh7B+L4dxf3=VW(G~~7>#klswiuata*1F0;J{h5i{vY|JBM`Jc z$(p~x&Too8%OnOBea0*0z?kQIi$%ECS;T#ahQKdOHQNW1InE%7{kAh=MqUrF4LR0P zC6e;@buwUkoJEBY$ti!(`(O1TN!iEsKU#-lY8HKSRG%Y_-zb}M8BC+DyEPcN&2<-b zIY-j2^HP~PBl{v!0oNk4Bo9h*EUa#Mc3c2L;3p*Gz^EC|Ic&rT4ftTGRYizu=OB2j z8#sj?_OCN!6uLDWpgDIgc)NU8OHMp;gg*VJdjDMc=`O5lW)fT|a6#(+=oPYsRn=iG zqV+Z7o3yNAe$I=`PyLB#m46k<3NB;AiE6v ze56#fT4-5Kn+<@H_D!qI^dqX(bh9xSK+y?cp_LZpP?RhSaaLd8!WVyYcLy_8%1M30 z_H!1JiRxykv>>>Rf?=$*I5MNc{RlRx2vDA;1|oM~I$(zhh}=@`m4{IE@w~*(l8no; z+`75A4$xKRtVwG`G{+Ul?WDD2ry<~+0|bEUS{zs0N-?-~E6qJpVln#rU0N4O9r z>r1LKVi7LW>?A1-u=76aE%18`?doBpfvn9xyVO01+~%JZXUqtV_}U33@%W^0JDqlj z`MVB05UMnmi#zB-u3C#*cfIb%9-(V5UYmQE5J-w>uqCnW`^wYT`;nud*OwLh9C7{g zGv|SqkviTeGu3{LD}R2%#6Ibcjz>42tCP7k|K~9QzMj^&#tvVZjJFhCi=hJ#kf%B? zQ|gsFB23Mdt^4{bGAnU^@#NQy6X?y%-tEN1U8hRy$bfFD!e63Jj_T3@piONBxPda5uxL{pguJg%<`(_XVW)+l_lU1B(j2S|!OMza6qUgFWQ%^cW& z#tXV-5P!Lv?%~9I{Y$k6**h$@d(Uw{rMp*TWy_+9b))+7d_{@5*3p>g^)&D*B9bu0 zUG~=qBa_nP=jqgC{X@!06=t6DJAR(5doNRuGOt8M%hw&u$>VWni_1!KrS8^-uU#OW z&rdXy6W|{niYJchZQ?(FyX$AxC#r~@DgH^z5wPG*?rT#htUFWEfUrYL)91OBE<}yD`9SS4zA+Nj2=HJ|Cx%jlgX}>iiWB=xKQq3-aEcb$nC|WKkCQQ?x)o&J&9aNJ{=_pzpB$~7rtKE^q*G7 zj|r|gk`w)mdcXBiFOSHO!JGj^g8F~o9Y@XsecJt*{$CYZO{=+PLk9@1XdQ@MqfueA zB9n=PWu^5q_N%Cvdrc4d>50P_*5 zFJmQ8>qe`f!shp>Qk%lRS1M7|;d!s*0W6sO`3Kx+9?Zm5!C!pQ$H~=4f(QTJ_R_)k z!kV`}#jHQv=FVJ^xK+;m>5@N&Q!Go^)C3uo=7M$4xp0n$n6)DeITqHr(gv$!5vxv} z$_Y|`&G-)4>|psz6*xCaZK(!nvM-BH@)J6&0im-u0;~Z|F%E5cNTtA(E!Mu`p6fB< zZ_#&R=|2EEG+uHspx!7Ehl%YO9hWT(57`aQg`e!>_=SBET$d{vZJ1*hQe)uvD|}*KeYsG$3?o zQV}=c_h~NEOEuCgL~@$#(=6%)feEoABU`y-YkM`=-SFUg<;o<;u$J{MLU00{Vp#a( zzgfdj;(IdlxUPRA0LAnAYm@=$aql9)<7}_fG)UeS#prsh(^#=S ze&dSUPD~_S<3xa=Oj>b-$RcH{qZER`0(AXwrpS>D*}2kCgWpsnpW|idT?7GQM$K}> zK=xW~d{2ofJIOwLBk8o(ZeRyYWKYL{UEp=$;TQiV5dq9T*PFp#3t z)S1R^M8gJh_~EkuV`V%g;`>L`sN5WhOfuDDlK>|{>pi%U>KS-f08sc@$(lM|Ad_$lu?7Z3B1k3x^`@7K8FF5MNhRE}gdH|y7X(Z^-yMMywU$b$W-#F*>2DMVfMsmwv4+*I+KNu3*0yt;O7fMJrUz5_&r zyEc4)tXvE_+ZCL+Z0=1}#3;V$A=0vId=VR2Tesozx6kfW@_-c-c6$<>&^H-W&cs>t zCwWyEHPOiS(=6Xxze9FAP_YW69f<*%)*%LR)EJ~C=Rpu4bY|>Mxt7@}7Qg|{gyxqi z;UZJ@ak>B(03az_LwS&`>=bKf_?H&bQIuQWHVaS%709b>gMLM3{;lXG+!bcfxmpbbwC6Pf>s-X5E=@( znm&wBk7+p+u}g*mVoe5i(XcS1aUpPFAC7)21+Y3+qk?C%5Z)0s5y0y!eIMMc|Ir)6 zbi|45tQ^!?PqS_q*x5kyPar-FChGV1`ZiU)G2!XXrHRv27|0Zr70Srq+E1IZ(qs8~ zM}T+R+G`fM5C^F6d^q9@XTy7Mm=^z8|E=^9f?RJjYbhl8AG2dQPa-Kcuf8~wGcAqf zTbw%JN|-+t0b(u1;| z3x{mkNrbj&q=7+Z1pgz$zkVsmD#15!vy#_`r%rh(4!?Jh9y9x`gGM$;{P!ptf*5Eg z*@X{~JC>}KyDieX5b&Y`uI3_}&`uy2Uzcji12mQ99I56$m{yLU1}i5yUh)eI2v9Ve zPk6{~O8l}x;6{yNHz6Dsg0fF!0(llSHc|@x{}>+4VenjJ$KdIm=&qyF6+Q*wQ32U7 zp}Cg&5`^!<;l6%lwf!|&2QmBTR5-a$j3DqS2t0>aHM)&+8_0#Mb+|T?eyr9GI76K> z3P3fgq-;R|v`2ng0mOl9DV}vkj)k#U{wmC_yH6R8UCjsmUq@bS%FL0zi{ee34}w3{U!-q)(U!7 zh~Ip4HaE@8Y>~-CKkKu)F9|%3Lvlz15Zsj&eeSqiW$gVj6J|5j4J3r3a4A`UK?)y| zcnU1j3{!9fdAw7yVu0|6Ru=OlW=!$El;a5Q#|&=X=Z+4VT}O9(hmVcUzR*hi7gHZg z0n4TMY3ka_j@MQVkLt;e@vKZken?P_eA2Wq<0wySZ0>5Ac`-|BP(je|Um$K2QFp&+ z{&6$8IAzD+9dI2_UN1viAFT?0zSu+3iNM>_r7kn; zu;lzA559|kswz_tt+N|l?1UEy1+iwFkN7B~VUF%~kE4|Q_ ziHnA2;4E*i<}yYt_Li4n?53y2&V_CFURyMq(Oj?kq%munsg8Z(-s2$hLp55Qhn=$4 zH{pfui%g|GB~e9+%g4nQXj{7d%Ud)C2>Ep00%b;Z#=bB4QLCRpPz*12Res~vjIrs5 z3)O7>YBwgoso+uR4v#cQJ!clo+qzxkqp%mVUpxy(!pEp>py!Losl48?OdC ze^C~EJE0(undoSowL3g38D$%1Fg-^ZoYK?!%|A6`?)Y--xzGG)@okC)j{4rB3gpU2 zCnI%s+q|Z_{%Vhmg@5d+)D~o3&ndF)X)7DXLH2#_UFq@85bWy-f9V&M#Kk0K)a_7? zaE|EMR8M~=vw5&oQ&(PC3{@}bxR>`xKLO^jIZ@Wt%ZH4|up{CxK7Qv!bM-iv*_F3& zw=bb!(HoYkKT9KBA7{%o5#0-n0d9?J?)`QJ%Bn9qZw!ec9r3rNoIJPUx<<6CD`9nB z-^kzjdNIFh!K>;B5XW4Hbj(ntpCack{jR4H9R~dr`rCnV6;IzWqLg!5_zR*Z4zPMZ zr&I2cXYX#zDLq#gaxzLa>VX;hM+|D!~bhFmpZE^BClzVWH|FY?hn%5yJeN>#e zREZJ-xE;vxe;Vn?+CFC{KfE|Qm{#Y{xqE^P?)ix2+`YX; zeH{1u$yA$x*E~5KhszN*!d_9oJ|DCD`=TjJuf6PSSE0s%jaS5X$wblhWx8_D=s^R|-iU~a z?w&w8qi0L)cKe@+2v2>Xtl|ah$m4yD2;P2|cPC~AYzVUI+a69A%^ z6ZbmfC>5WAWefYk9w|qT+U|wy-v*2(2elo79pc{t<2YkU%?(Oq3VmNR2V(AHowpj??3ceZ`M(v+ z=G82U>_*=zFD7MxG%f$7<)W{5>6vHiIDj|v>eEPIb1}!G9a-d5#`i-%@hRn;{M$*= z_||xK((wQ**jvg*U>U77q#mbBEZU_0cYD*0!@+b$${wOP@~wMht!b~Z zxo~TgU%oIDGJbsl)}#2|m!D#KH`Dhki|F$bh0iK}N1?wn_UJFm$<5AO zfyvmvXm-$=+{f}$Db7LJ1*H9u%}h_C)$brtQ_2M~zCRPHS!Y@Thvs{D_9?RuI%R_1 z!a8!HoJmgBx!Z2O0`c}k^8;twSva!UuQ_X~5I5R{IgZ&u_ttr1FZHQQW?{qKEm83; zbIY@>Bjary;=M&BdeGyAIW7Z0n&yKLqJ5y5rL%Lt8!CFuSsp)@oO!Ho-pE-CzBaRT zthp63Nf!9TcQou+Pw}u>zH8~VCVB2|dFtTlvEbg1EAZQ3%vLp9V7GqR*1`|ppk!}{ zoMVbV?LJo|NoS9cZ;01RIs1$6BdJVBYp1|EY!&pe2gD33>eR@4V zR6R!XW;WVwwQ>g+uEoqg0?IK^d{1F-om1@7c-ijkw~6Ub*`5LySZt5)?q@JV=Q!sK z^^JZIT$Pe_xJ|%}(RxT-zsh@dujDheFPrOcoY@Q8dbaA)6@a?dw0dMG)f93Y1(~*- z?X}$f`JL2~;4Nh0Cv0>n=(@v6b@Fg>#tJ>?1-*w{jkhKFjFngAqy6=jSey$ol3Ij# z23BpsIx?KlD?TSoiVm+by2MnUjkoH~RSh>n|2{_uls&k=1*wX&KD=sW=_X4UE*r;{ zDY)2khS+cp9;X{vt_6pTuXa%3+NR7|+gH?HXgkb*&d3~QI!5m4QT$(0MG z7q~-q8g()KoHeiN+Bhe7T6jIttY?qCw<1UnDtGIdCfdE&J)sM_GK5F>Klz*zM_oci zp!gjDJWr>vMk@%X>Y*A%-_m&oJ-$#Ui=4r@B=d#q?l7P)X&6Sw3n>@!+Y1Ui$I7Nx zHsf+4Re!I0 z0K-R5vVHWYZpju#%2{jgXrHoh*vds?#z<*1*193@aG>YmSz^S>*Sp7PJCgr6?QmXhoTOENGX4nRk(~i1S{(0H6DL= z7Swe3c_kxn*(ki&@e0?5^$mKV8;uKnsshwhMTM+bmKu>54a zpP+5kz>3-NeY*db?<#)~6b9890P?o~KfbGpArK9e#|`~Ix!I^t#$iwylx66@GskF9 z*F`JS!yA&Rsw%9ffv%T25yTR55MQ>ojs)mo|`(y*Llp>gt-aA33kgr$8!q}{Gl;k zA4oF{bV|o1ZrRg)hK@KPt-g@^0ds?#=|(nsIm0oVm2L~l8axjJ@s6i2_nXP~I}ckO z9FAWmPgHNk7n**_Xt$FHaf&X`e&HpEh9l&Ymm?}Bxv&lz(T)Z z*n(tu$fS4hY#l*C=C7Tfe)R&pT!@Ige3!-?-^fp`KRV@lD*P{o8hdq`bGkqtA_UrPeQq z8K>j5H#s(%yBVYYQ6QT}T_ zE-v&kZ8Y`+L0Bf-bWThlYnH7wJw1G9IrZKLzTBUHA7Z&N?jOXwmG@WS|Im2Y< zqb%>r=~64!AD<-f^D8zr=)3F?);Z|r-H}&=;af4f0qGb$69t8md{^%igjl3$7n1Yo z=II-wMpdavhB#Wj88`l&8VBls;-k>GYJ^(^ex~o@u=|9%jEE;d-DMAUrVg~CtHnwy zkmTc8;G*wh*UqHTr-G!rGjW)}U84 zKYu}+cwZlO%C4yunK0afw&hPci-F%iYkOVNYEr~~*o#0;^VFhEw9|)}f3b4Qp zXH{6Uq2`kL`R1o?z`r8duX#PF3No<3a@jY0IPVDn1tBY5;XmN4;PpSH!R0127cirE z46S|oNduCJV>WlXGiFHJNYAB%EyFOfnn@)Rz4=9I7+TaTbffeK-QV5%YwHAe`1_Ed2xAz;UD zr_Y4h&dL?6LLxyCALuZCi{YG^yzAf4DGcm&dFu+MD~RmfIFF_v{iIMWtRP9FyRMU^ zD!pl(A4@k=-Mc}|OTn%4J;TB9eKbB<`V=XoOgs5=TP%EV)W-nJ>;Cujr5U^rm>US$ zLP6Teg6nC##e6`2wosA-M1qcAD zT!9Humo0G7IPCqr6RGqSxH72PP*E(9{5~mg34@!Q&?dqi2{+c(iD4*!C>EYWO^7%4 z{H+JLa$+v-6zqhrnkR$?Z#_-rg;`-Ge3d1|l~jb*TZ%3gaUy(mLy;%`J@)(8#(e2bhLk6sJf(3Yh?vz*7_QQ%pl(6a8?1r0BVB(M>SS$RxrCSsHu@+(fe!#qg^`1i!oKV&g zWO5X5bI$OY?3KZiMQItn#%9!4D|=7@fDzf~-K$S;JC5L2Atcwtk= zr&<{0K1c+WEFq)IrS_A+4Ck<2f=xR0m(Cwc*w!-3`C=M-eT7d|lwHk)--!_r*>Y*M zzL*fXuvNvAv`3CPQ#r%)na3yR(T!Hm{EI{k8T4GvdKXa z_cyiQTol3g!N(FRSC7xr2YR|#;7+H$6sl0JCTy98th)Bed%W6`CXiknpKpOYefFtvu)ov55o>uvUN`=4IJCL9RgjjQBF(Ynl*8T z=#U7ERskZ+60mK7(q>?;HcX3f5QPrDVHd}ne98l>7i083*%0jK(p$=4Mn=m_-YZ+oaK(9a(9b~P`48AZR*#$blfYRsQL2!KH3bf#=qDnZ8)F${&y+%|q2bO6h zPaVvag37o)Zu&2ks`I2VCZY^w+76~NrjHgGM=2|!+TOpRnTS_?#;~93M=+L_cwa5w zF@Jq}k6+(qX%63y1Xb7fP&bbb+^=V4wST8hYW#Qh#o*y6rh?*gIp#7V^$h?KHEg|o znrVA@E)i8rf;h7P&+&n^1V@7eRb_^wL+jE+iuqkLDMG^L1=dDCe=Cr&J)w}ApGMSn zms8?`E%{porS;d_)bau%wt(SHE@$be)WbN56Hs9py+BYfEn@Wg?)^n+^urSGir>Xi z{SDcSaT}puOrX|63Ejt(FST2H*ZyQNo`-xCs3M|^ZPr6A#w*Ku< zE4=j^2lJjzOZH1XqM3bXUml*Wjr^NOB?(F}7gyY85;r^-KLK9L2LO4}+x6#^rhE}7 zgzSc}ugW*{x-e5vlytt|EKfcF^5Fr zXK4j&NP0qqWYZ#w$L}3Qoq^ZmUuc|qeckJX>|ZcX>manp2l4$v5p54U6=aprjLGAP zGepsN?I+Wx){4}d0AS8tdwOSjyH)k2|8KP(!}E82(<4bogQp_Bj%f1wo8%kY;9AVd z>Eo3cM}+DHZpF=rorQgr;mH;A;ekPXG-VAnODHU-;Zhf_45OR)3KV{?)k1(#fkUg)0vEoPe?!F%#C&J&GQd4`!!3yqbtV)GUt{Z z6kCpT_6|d1U&p6Bqd#%T?bT|pyK>c}AJ#qti5-7lR^1mLqYm^&Ojzo@q>p+Fc}m{( zPIo=s`nfFaL_m3m$V&FvmH8E?XH=09Y zZVED9cAo#C{qVB?uRX*5U;Ym-`+xX9AgtQ-0-hQ2bsG(o?p+iJg6J)P1ZpfECRzy3 z637Djun2~y~2k4T+^$fUl#r?rg$oZQYiU##|*pwYf>Y~6f4Q6d6zd9_20xu!{M(oo=47M7IU z+d_VSZ-Hh(U%uOiDBNyUyHb9RUVgP9+mgpOhr58tlh zP948nyXuC~CDgVmNwsdX@GI~>x|CrR1vRjq)K>Kk`VL!4y3O?IWSeR?Y5+-2m-SET zkrocAL2Ou2UX#>z^dvNAzV)fV)en;N?ozXJv3EntFrpM()XEXBOBvKyjM5-o?TRF;%&VP$+!026b9=(W8r?D^xbAea89wQV zC!;j}4Ux6HgalJ4!ccc!as6B~B0-a&bzC(f5ilG^hSwE&53gO*E=GV+V5``IjA3r1ckb!tqb{{9&S&88}bj+UryY5x$wSF z1(CniwEAo%n?brvUGSDi1lRus3*Ipy40=Jut2U-6c^YwLz$ax^xB5|2ZbZ8Wt?peq zZjv73&rY-BbkimBwawk187le!*I7EfeVv z+1M`ZS_ytS_zhKMM$+gc>)F%D<}Km5dcBY=ag9IpBLZmOFOUo;>~@A?gGe!ax}z$U zBptj(dD!vNNg3(y%tHgugdtB8Ym&O}uV8f}o>KMW^e_8_0Rh9f=q~|v38LzSULG|o zcMW(Ps;Odc^3fCCMm=3VsjR%5O3IlBei8PG^4@PwYKCvwY>C`4r)>^uW)hmoX!~4t zHuXhd+x^n@$(PUSqH2Ou85pV9ILXFsRPHk;deJ@;0G{}lovo8)7;ww5k7qCr8Uk6z zXsBbzukD)=f$@|*&NF8b;~3Mmfx(}Vm!{|Ck0%>#*JUxxy<=y2vzC)7L1Ky^jQh6MHVb7 z)x>`_oB2M6L=UQWry6LxV)d8@8HS_CkQ*2}lXwbln%3}SqZE|4Xez!dIk6kn?{9zm z_h&?Ef-Rt4#dT!CG3QJ5EQacqM#KBv(5yHY-^kk8V~0NcwC{7wya}-jYrtV%xUGe~ z@^U`v{-NLGcVw^7A@&c>`r({5t63|WQ@Wy}S7pC1Has1#|LuVDN7TZBR_?`uu*`!8P^O_mrlb;b>$A@u5-`o0o40{J7H(cSmV$ zOSxYF1d37B5O;_H8|w+QbjVQJy0@D69(I2APtcxsd;A182D0O-v#*`vGG$q5V#E*Q zbt&$*B!b4QzkIgRUjaB~l#~J&2 zgapQfKny=QLh@PA;itg-opS9m2TWyZ$I@G1@%6zt%6go{4^>D(^7pRam)>>TD(^;) z)u%sbp-KjjU%d)=Qefy-7$@6GN<;k=4o8{?A1+^*pV*#4r#(^j_r;Y#pKpV@K&=`3 zaze?ta1m1A&@L5O`O$#dk=BY@&@J62V32P7V|d!R)g>8kA&(`K-RDWghQAhYAmaTko6Sl@BDxzykrf=<$ZOM zDNJ&S_IX0P!e?UgeqWFz%{VvKaM`Y4Tk8IpAT0Q_ZkD148_Bd)*LNik&C9!Ln(J~K zIAWE{Yu?J&&Tu(q2*1QH;S9e;;z>mU%9T#%gY4C`*#5RWm(f|+Z=@JaYqcN|7kuW= z`3W&06_=yRC)#8`0_eVi{xA z^QAK7m*j~t1OX&O=5r%Ryh3wcd(>aT3{0;#7e96)zciRb+6`j>YQcXUBdm)K_b|(K|Nn3CQ2z{JjwoLBlc6Gj2(j7+ES84X!Z6pgmK+{;-LA1;R@itQ5xC!sZ4bK|g^1V>`)L{OsTbwN3lb^J19O_K z#G*4UAG3GI&9B&5)&vAUD`gG$r0F8(v^+V?4UxF8^UkA_4q+E7)7&e}z8K442(L8X zgL24zQ>_i=Bvs?ifEe*;Hh>PXYa4d@sq9>ZIw&0UwrO^ur&fUXJ!c9!OLZT4aa46% zG_yl&)30ck{h>ENqQXOk*P>cq+Ri{Ru8{yghtN#*4S%-gz=F4Pta0q)sH_u1y$Z<& z+(=vb8ltG?_^d{}!s__QUyqT=-&JydXNwLu?GC+b@&z{!?c81MFM!4#CcYqBTPb!_ zaE=vna~PbyMxPQ(;fvP$sHHdDhE>bzx;p)IZ||<(qp}#Y5t5u(h%A4maQ!q~rH(nE zUtX=g;4t^8G8(%;J=z$BxWfq^rlmo)RUu-2RUF*9dW=;)YlmlP^a5! z*wkz|9pP_CVbn^qn+3+zZvF~5pBJ|XLR;_;pVv;$utFvbn zT5fwVg>$EhRWSF6QhTednB>OAZRtA$Q9~)*Lv6)X;Iae3LQeua`zO>k@JXHE%K08n zZ*P) z(If-;Wg@A5@%9%UYju*hWP&}<=ZPM^kNjg4%26vFtJ9aCnA!xmT?#vXJUlQMr=@y( z-B@dAsIb(jCI}%mFZ$H7`p$prxoD&Ef9O7JJ7bkZ@8*5aAj&A82hwKR)_NWRxMloW z1cBqy;6s8>6A+b{qjz|Dx#ma_o#7zcXvO4)AygdiTh5rga2B_SBvRE^4$+aTJ}m#_ zm7>d0+uot@aOjgqudGeXy!hCUXgKx&HhL>U3aor8b~`#Iq=}yfSQ#IhB+4~E`-TTv zsr7rud3BBgFu$rRBTy`zEZjXHG9%3BkT1*sYdUd2#<_$kuz5NDOWfh*_#fg9Wbsgd z7~+*EtOeRk?B5ZYAmK*>aS*#h&|F$o;U|U29t*@mIA$^4L*PyXK0`>31(=eMsE{F* zCju^z*<cS;^VAe$B%2LR5uD%V#1 z(7auW41a+qH{wvdd~H@y#bMFY9Y}(LBx6VZt?J{dI}cQdCIQi0`oPA+327P1F8p}E zbqSdqEw~4sH5X%h*|#oDB5NhtXt!0dx3ixg4q^&E#entc|9EuyBVapw8ptKdNqf!B zgE1Y_T`2l9K6H&Ru*&g)^T^AE;b=Y~G{|_&7OBUuHmRc*`N6|({z#T$!(#8EPI#@} z^}JmmhitEB)L-|GyG$jDU+Ln4AvIg7-aeXIkpMWfY^XcyjPhq4j$#;1+m2W|Fo}x5 zczWatK7)YRSi#>UipdhAD!H}Ktqt{P6RYcLd8|j=#37_)pTN~w&~4yyi+$QdxniQ3PWj;bLivdM}nevx)!(8bZ5WKZFOXF}idyVFNEjj3Dea zA=}Lp2CMAi&m}gNQb771HD&5~vLgWyN0}-^fB>5_w;l^3Ugro*6#{LQz3`Bdx7Uj% zg{4Al-wHl-$e_xf+r`ZB=f9;-c>yK#t|zuQ2(qP)f@z7HcE-(gG-zb*@d;4C1)7d+vgbfRik=NSh*nya1gIQ}P<|84 zT3zaGN(4DdgQ(Yzx~y3$LmUs(cxJb^;soQ$U>T(7!#w0X*BnY2$-cm^2dZJA23_Jq z#hQvh)~n7<8%vnSfMgVj$eW!WxDKf$&u_;^k5Nh#aD8^c*)GyeKo?Xz-qPO@*ZRA981d3qeRH z`-6X7r8|ioUDzK}H7;DrQV>I_{|2@W<_#|_?84V@RHSg}x2XR)TRtf&upM8Qi3$wf z$5nHU15oLS2U`f?;XiO9zaiKQ%u&lP1?xS3H$s*GFN))b)RxH!f3m@QRf@ozl*4pf z@E0khIsfj>SxO%cVhbrZU}5xm2s**I(DQ`meth_0JSl@b*gz{3s&YzCL1nXW2l27P zu&@YCu`zl!MID$b&y|xhSp@hf*aT^W0DxtZA9d!f4Nbb%4><8$H^d6cv0wiB*dOML z$fdQS4KQh&2T{~9lXJ`>GSq~_Pf^^g$cR~fBZyazAZYPnaUG1gAOw_3c0J6kV{tKl z!wvrC3m>=(GF|5s!#mgZ#p4V9F<*rz3p1H9#B=H1sqwimVJWJEfZyHjbZ{mBut|x6 z=uDA(t4rF+ryo<7uJgSrz7WyYj80%PaxSi$J+dU!78$)B7Isd`2nETzH@%k?tka+n z)W+Qur4K*f^IxJVUFNu`UI#SLE1Q#gTOr5tMVn$G(deu3k$U$=qJISWlk^f)`eU5> zo%AS(B%YLV%nIOvu__&~)~ga7NNyqG29Jq$7YFnP4t3gMXB-lk&1O zLncC!$csZP_LP!x44qvXAzOHpD#@2zxa;8~9!5+Cw7;7G>(b#Kj}e4+nv;K6JKZI6 zZ~p=kb|1vvVO1&_kv4puiX6_1i@oQ6gX4q{bUkFC1)`m43@Sg2_B+3uSjn}f`AiS? zN_CYm_@L`f2LR-2;>RmnfW<^<#Vz`p0qqn;F+==46TV>(lM&Y<{_nPNEprUAuhqNv zC#kKM=})MwmSY>JbX7T>Rb9Bz4A8m7#aHdrT;iDeb%onhJ>mGxt2wQ}k>W$g2QXTH z>d!6+e~muMlf~bRtf?*rquMvqM!_xwN#Gl@1bzvBmX9qa=});S1@W)^B{HH^V}&U< z3?(9zBx72CkuBg*Skz(obGg6c62+w7eO>+TAU@(N)&X7<8v(4k^t&*O@0wyG{e;xY z7O-v~M~AvGs3@&16!AQ%|E=Wyb=Kc}gO+ZuCXrFvcamd0y%CKo&JV{35C>IZ`d|zoS6{dI(iw{Vtw@ z9dL5eQ&C@2gX4b1fS}G~nrOGVub5ZK(~Pn$L~nlb#hMzUNtFe{nMu?95Vj#&H|dsh z5*w2BW8Ie)8=0k{%LQixya06n_QK+oz--R<1Sl2~IH`Wr;@v-bryZ$=W$e7b=Ndmq z1zom_{8w>YNm)+SQ})7h#Y9o*!QM?ETU7zRJ3vuv1a_%V*@Prsrx2k#vPT2&9TbMU zBy^g~Yxd*4~AkAk{UfI1vVLA5Awsw{32p-=h3W)&$sP@gc@1RqDln$N2FXNnO ztjYkG7WF2WI>&l^IspNE6VbMOsLQg}q0Qr-_NjK#Z2d4?$xw{y*-ymtMvagD-%J1) z@zET~&JT=P)_BlOuo)c6Z=s9tazy^i#Wy$AY9w%p{|<^R91*b83U+2Dsx)v6P)OEV z6B{+7|3KO=b%`eO@qbokz!60p=Wf_Og<3UXoQvlZ&TnL70Bh(E4w(cgWYO9ik{R4D|R;l9GN$1 zrYn(!&1H&@^Qo+DJWl=xz^vclIZ_UkC+Yu-!GPX49ae}-n|smD2OH4lyecdDM1-$@4`Fd#yFo73n~4* z6Tz0vmJ&e2u8-@MWB@8dPJV-9Qi%W|vGm}NO9U^XY1iQ+u3(Zmgvqf0LFdnsg#9pd>ZZKL&dUNu=Xc*k{b_@a z-&fs)1N*IgUdHS#+R`&*?^;dMs~+S5(iJ}yz`F(0_j8v|Yiq}hq0`!47a;6=f1^=U z?Kkr4PKHL5wI~tAopMGc#*Xo6uSwMJrcacoNYj3PCzY35ETC9Kd!(5%~A^whX@Qa3#0YbUy9yO+kU>oy_^ zoZO{ZMpn+AdXg`Qu%th7jO+wU8aU|OruHPY80#$(=^r6GU5O9Q^=-FU`(7Pvbh1|X zFDzs|`kpy&z`dy+Fsi->X9;+1D>gao>PZmGn*JnV5fYR}=H@*0_18WZpX{J+0C zWanqsWVXYu|$ING~*oL>jp~@))_;fltEc;!|01vlEH%h{66#mZ3C$N*W(-f77Z>xEE zokUGovt^gBksoXfpBgxSLv1rEt+zz*G$@w&L@k{2O^3VI1Ph!UZI(sY9qtJiFkspq zP7F>wet8@0h2I3MJa+Z9DPeABwk2l!b^H3I3aLywuIng#9kmXu@c;G<%zr(Go4Asr zPz8O{)&{==qRcNWaabA9wBIKM?&qaIRp3bGz2QC6xfP`IJf9@RMp^9dUGqgYRE14C zO?F-kgszSs`hdrc!3t4Pp(iizn;UQ3yZVAmdb zK0|Z7*u|J{j?P4t2yWegD)!B~re@x}`Oy9`eTHE5Au{8I&t6dw z_@gr8V)aau-$UM+1Dmwt>u#c~Z&uGwnFd{Ugbz0xq z>v?hSH5*gAD}DL%h09ad@gR2bcgH`qbmVEvyjGK=%l+3%=y!agr;;fRI$ucccsLjQ z)ks8*WZWE=rGA4hH_S-qg_}47GB4`*zV-*|xzx`N-YdyUqCV6ylj|R8V&Xo@Oelrc zXvaCEX7U2V|C5swYN)`WG)+vvCmA>M^{PETbDpQeC?Vwt{Wu}%Wr~4&(#E#v&H3i< zd93#C3knOZ5f&S4WCIwd&$4y@$yxr<&Y%8`ng;9vjPqyNeASAd#vlHZBN0LD|DPNI z|C^=XA~@I;+CoYfbn%)YpDSf&YyRI^nwK>q`jU=cPxU3TSv3ACLZ|%S2^abNrNe1P zsn>=yB%ynUF&pE?5m zzbXm5h|wg}=!|PPO;(*~y@SehvNdLNzmgnggs!sx)isV{QrCmH!^O*d%(Pun>$M#KWsH(M3B-0OMFz9 z2aVwW{n(aVbC1eC>zxb4lWpn``A(*IG9F~lU#`kwSx;Bo^*>D)P--i>^n0KFRfk?d z4@zY09HI|ls%w7=GSH1=_NV@SJThwco7~EWjP4jsV>Yo=2rm<6uNkym+Y6CWwgm!K zZ4iitE8SF|WQ>4ZRN3QqE9;XxPav(B&{F1Vsqf_Faj8!<6HbT1Q^)ADt;Nci z)G#2J{mF=>94hzA|3;kHGssB;y9HnxN6vKCC|V(EWQH{r3~u^aqgn1VcXv&zX;y4} z=*s%zz-U?Qm(gBKsAf{9AWJ>#{51rB+5dz!3t#bReRnwRX|TopVQF}0>*Sg3i9)5a zv*>;1R>4aZ%h3td6k>qV_wBX&(50tbjs{C8_oTkRdH&2vTd{WX{tVyL$rVuF_a1Qt zfAZ>N&uPXZzzWK{o)*D1{8V*hXW!waZE$gLfj)G%^QEk&`Q*1z;Du87 z*7Be866zSDS24-#Ta8IqRT~Meay`E{y{{q+r$3mM$4wq=kO@J8{$O4O5GuTuw4w@m zA9aL-Yx4eQssz}zkf!KY?17D>#3s;9OzLr=dnUsSJV7g_z`ZQ zacw80FF$re)a{hdTpqXfW(r*Ud5&6qlX+eQD~vNG$lbUzC$oFsCIRd6!WP=Eccdw1 z2|G>LgV-sa&$jk<3SNBe`gVvzgrcFF-`tlmx9u3Gv5v={pU-XzPK+1X$e*8ARNk?8 zv`$^I%0$OljZhd=nns#89kQxaVf>}zSlX^A8O9d4*#4{AcqICQk-Ee_@*0xwS9Dgc z(P2O)VH-*DDhZhnLlb!Yf>BTLaqDSGb1~Y0cre!N`}oHXhdh9xsGVzUM*U# z{mLioLxgodEv&*un>kc)2Dlq&Yk2+*2CdgCmc}O}vFy-%RV|SE5S2xMwR^uFEX{|w z#HI&|C%iTe0_6EHmrTq-12lxx4I5mh2C0H6yLRB=-rWzl2(!Hw67LPZIx<1&ksPA7 zKN19%1!I9~IbjV1YdG2Vd`V%!NK4yJ;NR{|hPtm}ygf`@T_1Myg}hVxYNaX z1>b{5N#$|Y%*KWXkk?jm#N;nw7E z%_Cd}#>#Z+!h+EZ6$L>T5c^x)wRj@A98gW@4-!qX1{P+}DSnkI71q40xH`$-*SKry z^X)V5Xvt=YjEg~02LVg$*^~{@U!Y>l#Z+aW*tGe|1Hn0;-uq}!XvrH*2$VL0!vM%Z zJs}uW(9n8qzwqfTUn(j;>eeYA@&7oOY7FT^`^K>Z6~F={%Y&jYF}by}Sbx@Bxva51 zV(qS%p}^>O_5A$WKJDTP(=m?4f&1@RVkzjNW3JQr(6DO5vbIiz@4^-0GXM`S<4*Kn zIiY3HmXQl8K_Vap&{O_M@C!w6%WGu$Aw_SaK(oNq;WrBZNhDPJXX5nqBEZ(s5ajgV z5}haHhT)@u+R|X`VaPTkT{)%gDRlrt4ua$bH65tXA}MLITM4@!V6sky$HoOu7XwMqyNC86PeQeN$1^I}jdCEDJ8?M(e;@jQ@ zik8@jz-x2{WZ!)a1;ugT$Xh9x!K)JmVqvUfBjp!Rj?t#zbz-w|QH)c7SgCSGI9nI4|jwelub^VAc9^PYnsN zhz4t2UF?+ep6iN=vU2!yLsmrQox$H`^>$EDi2k3T5Keq@6!L9KK|r?$8b3&w2zG&g zj3l==0zFIEZ?TzgQ!02+)+p5wwV3L%~dE+5b;eh>misHW74Q&Bz09BwNEW)gFwHWV%NsayC$r{PE*0 z*&!rnocHbYLDcKkmjPgRYupSFr!+~+O?LU-Ks1n-0J@Wy7EzHbQ2n$(X{<_@4t!DS z)^A8JVVT&g|73n@hp~`Bm8TZ4+v_6>fVHDrIQ0`$Tw&6DW(cDQGh)qmr}me=OvM7C z!Bbjj>1AQmdv-a^tjCMy`-XC;T|QKd1gYnU zK&y5JOv0(;tl{_oK7Y!ecpZU1vAvA;UVBM5_kcn$=(G_72GaAAQh|w1Cf4j6$GBLB zrAkj>A-%&?*6KT7OV>*FX=1s7|53|PwPdHpt*W*m%m~9jWFp2WryNt_YxuWK=PUb9 zPN$oXo!Wd>H;ogQD9F@WN)e~gbe0HP1C-?frp?3}2 z>~Fs5hI`xjcRvV;M)2PWbNyp7;LvG+uK}f5l}yXOLYbI`=26mF^hX2~s#Tg=)#Nc^ z8inxlu_r*tF$D2}n)rWiHCS=QenKzl_y1&;QiAu>18d%hu!N-;ydH2YQ&(>c_(^1E zYsZc1v3Fi9V{XkA$PaoCnZc`~334juD#Pjznq^rf6MZY7v2p`7a}q}6`6@a0XTaV( z*G-O%GD~!o)|0hV$vOC+I*O!1q$QnAvFw!p=gJ?@kos$C?Z_O96&>_b&5s>)XP`Q1 z{Zo~T$psxEnyewDja!OEUM_L8rfl<`Ax}B$>t{ji~S|F-_Z;vndPQzycqo~2{-#8eL zOmC$BDGbGbOCC_V)n(*n0K0AB;yyTbaSOa9{frfh2R5(zB&OaE1!6SgCa}7R!nXB&{8`ddmNm$X5nU*I^ z;NU^z9iFlnnR(_W!ABVNia`yeNIXVr<8;QIaT;-h$Km9Dh2cLkg)({D_l~#~nr$<0 zSf#Alf}Z1vKW5U~R>Qu;@+l@ub^uG_vt>9I@HOoj^UjQ~GwS@}c zI4(!Vk5Wh>B8=U+yLLAhwP&smawK9_?VETfk2C%5xAq=H{U5tVMW28C_7xC*I)X!p z7(MH%uC;XTm^U*E?M1Zr`EyKO-}J6^gK%MiGi2w5&-Wez&Zo{6H2>6#cQ8>4dpEhf zx9;j36E(Uv+_$-O(EW+D8X#+HvaSc@nTOxZ97BIWw?{JdiT(W5LzzrYMQZw;0?sBg z{qH9;UwqLc$Ab22+3k1iqsDJ}MVdRm_@vjX5b~bXbJEp~Zbg2#^o!nWwiLPMq7WT9 zaRky=VlJ)>KKTlM5(Y4ATdnwwPa*-YJ5m=PPZN)JsCx|>Yps^62HE3Q9|hq5QguM; zZ!5RbtHKSjb@jI4cJT2rn_s$UY}#q?`PuBF_(kyBQ?>3F8M#3?HR+(*FHe=YmaQTS z9&do?^rGOU$EU41B_;k0P4`hmY#f$atDTF3X6Bz&%m&N`tQ6F8xA2j>CoiYT zsALn3-ZBIkH=U+;d9QJp{^16M^kMXL7S2+b?#6W-BDUO=zr4fm@<$C`!WTFq-}n?W z7j@S_B5eNof&F2I-E#;ITYGQc73zWJK)RUyDPS4AT!=!n*@7hFUe2fLe1oPXrCp4CGb0Mn$%hHX@7W>|V z+mrIciS1{>9gnEdvA_jc@$85DJyw(0!l8n2~ClZhNIgR^iR{X3L|;sMrcQ=GU$}_Z5D9&_GMEk(POS zNtQ#WLwR{}`C4U=k8?KQbtv%#d$mgNy0&EhJS#ES=4iRIyzF^8=hRF0_ox1q)+*pj zXjzDiMAgz+^pB0_FBdg}jW=Q9$}sodO>HN@By`$}Nu+ThbkVJmXN^EvQxUwM#B#L?#YR_iY|~Jt(xgO%gp0 zE@xCOkPTck1NLq8m-_pIKCgH3Qk_M6Tg=5?WKm{6+E_y7?c}&M8?UmL+-KyK_nPmH zpujis9hV<*XRg5M3Y9;Rw!=^ruZU>c?nG`9`Rt#jOCE&-_OUv|&^rIOiWFO}&hiEV zwaJW|HJn&3Wh*u06ZaA`2~7r%95xK~-u?rFk_GTB#J`4hMtHu(Iy3a{xJ&v!ay>=& ztX}YMGGUG*o(!%*_V`y5<;e`&p58B9d{OJOYf2-}N*xD|zK{7@+ehJE-%dF@f0C1D zxPUetIVR%_dL$jZDd>y(^X1^jiswNU>xk#Y%yk+%`_!;ivuRx4!Pb2gfm8ZTnuUN5b&w|6xFj~HdC=g<#Q#>{A$jh4#qER3BHYi@M%vcIM+zKwYx+898 zHW>U^3WPE~pWR)iXg>_KPQE{3ovag@zNi~zg{b=3{JzTIDhn*$fc~Jn`H~d0;Vwr} zZhqnz{@Hv&VSi`Z(1j@1c`{e)erAgzf@@dETpRedP>uTIurS0?9EfX0gcTb>fv2T4Y z^#(9^ma3J|hpA>;hIhB zF+G?m@SN~Z5&Z2Gy+6nuDPu=j6D#!m5_FgJ!c*xx6Ih~XOH@yGGNktF${=Y=X-2fg z+^oxt(6^(z^XWUf&jZu_vtnsWvvAaRJ96M<0a;wXZZ<=)iDGDN3mQq$X!YBPWpVVv zY{OgG{%^Y9eJk>J=iv4!gO<#zd9|6zvL}z7;Yz?2p~>wShuELzC(fIyVGya*<5~vm~xEZT)t#5{sNQsBVSZ{d#2z7 z5PfQ(DsYDU6n#?BmwMa)l(G`uC{Cf5EBmnu7(H4@ZAEGYzS5{;` z=B1}bBl=7EGV`97!qt=S$!Ph_SRofLV69q%8ENjFZt|JOegM~A5n%fSl~Z)UZFG`<#OfaBod zfkcBkZUCtXl&KXN?RD5u?V3S6A1a|sY?tC_KY`;{&u7ut^`?HOYuVH@Z_Mi)=Dm%Q zVx3aN0dhXK#~X}OKpDn;L_arru%K%P&iZ5D#64~2OZU!&xSmxD{xoTe*&lwFXPXZ8 zS1dGv>KtWxo7cAs7i&9R0A_Z}RlM#-g_di`Amuo+}k}89u1V@=V-L- zv*~#|7!tHMPllfg^1;=TjeBYx_GG+eXtvyUt{bX?;%{cYt}q%prJt)dA4 z`|zgG)U;C*4ySoKdl*}o+)V1{<@!j)DFRbylO2{3b{MEypXxac< zTkq=jd<87=0#9Pi(MGqYA>QkXkrOG=q)erL0YW+ugbotwlrdMB7-Jt&EW(&;$r z?rB80L~mOo#a)|Z)7~i6!0VWsPdmwDmQu&g3)EEcsyZI8!2C?pU97jKY%#SF&RgM$ zr6S=)i%O`P7^d8H$f{{-Z@|tC;-Mi@`Vm!RFKuZDud-nNdf`{~*j~e_`=1@}JsVKKG>y(^S>)ht197Nk(SQ~y`+WMilYIHXO zj2pEuB`Hz!2_dT0zNXFaT4Yqy9wz!+vIFchDmw~n?0=zQtmCT9eyd!{t6Y63`A$uf zP~DIr9#P|y677D26t@DOq~_*@IA0$PF-8n2gUK=@>T7qe0p|SWx5?SJM6P}5ns6*o znUw^4)G5Jw30k`6s$;iZm(d^zW_dqe(qDsRaa9nW91O-G-1%Mm-HEfwQ_l4y26GEU z1HP`(lG=+fJjcu6R%D|){+rKR8PT&ewah29$Bcf*K6Z|(do&|i{AM3FYM>4T;hfG` z+I?4$t7$xIDk)Op1Edm<+3h%2)2KQsjabRpTSLB43tUHiyc5yKOAskHL%3N_OfKjR z1M?H|gF-MHh77_>DQF9G0Li8l3;?#RF7_nO^i+q;rBKSlZ?fYwm^VU@_ER!Q_LDAz z7t}+kuC=#1(}S+8WL@j>*=8ypVyt`=d^lSeF`lN6KFRg69SynCmZWDwrb;(P6Z~}C zyr69|eglc2QSU3Dnm!t>gT%wfUj1_zcwy8CHH#?ruW))?Q&7ij2XV^yhyjwCb$HRf zGDWUtIP$tTKZhiA634X1f0-9_ zCa-_)tEm!3Tjto2UlJlkc<-3K@>=`j2${iM{x>ab$3IZMiPp3U*uT;wxp@!r^^EK} zs#^IyCdXLsKtM$ zdQzaXFXFCWlCydP1CyKDyy?i(5A*t1;$jU;938vWJF@Z&xAgD!+nv?q2i)@UbLG%b zm#Yp&gpJ#ifARk(B9Gr3gyJWMtk*?0KL;h38xOt4qcRZZVA%ykSGR%g{;MQ?h;F2a zinT;PxymPspv>hl6yqbCWARSIdWCeB7709T(v{$*l*Qn0{l4#Rc#bm3h+;VE$OZb& znl!3?kj{FF_M$miaL z8PtxAC8vqkXjTDLOp6Rsxr`quosA@Sh-VhJpM~}nE$!0g`0u^}%GVC#(m{64e;zfj zjmp2Era^RYMoar;y!J{$<&iPd{-Ovu2q-h01cNdhQ3Ls<-gpMipHiH5oL26q+!o!_ zE|qtGz!G4k3b(X;JB{_C-pFOisy$%&C43XTQmfC(y2Mrd?stznseW1n zo(Ap>>rwN_cLQG|0J(T2{%v#+DO-TdMOeuc1$wW!gw4^=t}GXuW#4`#M(=wov`>W( z@S@b^Dd$%0=;e4WwRJzdr4aJp@k|?H;PK*fCeQPBkVy)rc-vA_+4+)Jjn9k)|DIgE zfPsTga1aC~-{)QMN^6)ki=%#AP#zBP5|w_p(HQB8GvEfzX#t$W41Sst0$4w}LR?+e zFqBU%SiYa-=$#PWF(3z6;Z1H?IT;svr70i_PTYPyfi7%&k02gdS;W-64I+uE{-%(2 zI|#8~?%k}EVuYj(siY9$n~c)fPSPWiDZBlw>b7mwIg7Yc+$a{28?Ma%y&$5|yq;+5 z$HsSIYE$`V5%{#3=uvNx^s6ua&{kwmEwo8cZlVOEqBT{pMc4J|>Tk>Uv9}cyHf=ml zkPKBaUT0o<%!Z83>1>CCSx(=O+>b~qt9p4V{e6jQux>Jk9#n!}ts)rb&XaXj;-S2~ z5>F-9&DS0$!3}KGlA`2W*o2EF9#R+* zM=m_7(sV?=3#HfgRP%`!0(exxm%%pVJX7C*FAwO)qFSr(RRbbah?q7yiyTV-U>>Pr zh06q50<&{x6OI(K)+KFo5#RMOcdbH=B)a-6E3&O%q0;tHJHExr`MvIYmk8L~zqx`P zmA`A#a%YG;Y*DSiX`fx5sg;*y{CP_?ng#Oj~ z_*Fwp?|eJ67<9;fU_E>J_ZR! zN|dV(33-$*=%=%7yt-xAAyupppZhwAjqQnp1D4*#+Ld@wH~lrP`}n_JSys&#^~NcNdLgPN7npjXH2==m0z+cO=v{R95=L@7z_^r z-2XOoFGU`epYdo%$^9G-pQ{*~ao~7sVX{oTQL$+xyJ_@Qvy$Pwdt9R2G^|@~ZjWMe zbl|<>f_ZMZc`Auf|AMix3eAk)-$49cPDQIAhHvPd` z<#wk;li(gAE(|5J9V#$99w`uaBRT~TmV|4R5LR|8U4SA@5m?nid~e^YP0yZY__gna z(JjWDBRgJlCpIF%Y7mH`tkl7t^)l(KDfKPyGw9)3+@&i9^ZHGeed`Fn5n5#r>5%c z+Plx{)vH&lwsvM^DN{XUP|_47I`-+xV8P>9jL~!pfxNOFR}Pb6Ht>b;%^kI8S`1{; z;fB&r8H=(!n2sDg4g%nq8p6s)VJ|xZQN``$HblI~@lBBlckAcym1I=?rqylki*D?D zSG@zU$(VEvCIek{3iKEqP_eke97_+Sd4a*kn^Ix5Q)Om%k4lKeokSGkEW+RHs)=-r zDbU84h+)zNt4@V5YFAIIj!I>62IjyQ^ zI_Zx|+PIs}_TMwerzPj~V~*h6JcT6mRa>v#e$mKU+wn!J(Io{p*MK*}u!Z zyH5RKRwx`_eYo6?*0n72_-uI^KgEA47u|D)R;r_VwJ6WIRrpnli?(f2cE*zEHYV%& z`*MA#UN(U^Zt9yG?^fjgE2e9*U@%)CDsQOG7y<k>=|I(44ri;oqDLM1cda{nt+ngPZ+-jri>UYs6;<#Yr)0gGj58 z7(oVd0tld6I)DXemG-k(?uZ115Bl&1z=2}u0j;18IsgO6l>smg(xL|-f)KwF5dhiP zx&Cj({9Jb}dc6hJ@3Q)cm}O!&Gl2Cw)+qxQvk<`-@Vb%yhN4DTmh_(V4;baa2+g*p zdG@~)0sOH#eiU`#g=H#Y($+jOuRbu31}r4PKQ~id9@dV>rQjXrW{jwNfxYMBQa(HR zYMYt)s8o=!*Jq@#V8Bw2AKC~u4ax7XFZXxNbKUaun-Yv2i2{%80m^;CuD!Fkjz!&D zK>ki3B1N=yho6dMRgmi7m|T^WXmqFd)@E{sWE9>emb?30)20O~fy z+ZV{+d&4k=%+*5t_eKOKvp-y)AHStCsG5{Y4&4r#l7v)&ip~HH4(@#DiPN)Ih4G^T zZ+FMV*+6qD&>tp%1~_FiA2Waz92^9)X8|}tbjgBtSO9{+>$zdUcP|=k?5_T7n2JX!+qL44nvj}0d6*ZY#Lb$Oce)`L2hD&&KU~4$&p+MPUTgBQab%? z$MMm>NoR|eSpiOwC${n50<4A~MNfBLhB$ew&dYUbCJH{T zO&ww)AcGKprlc*1k+kbu#NbPBBssgeuY4k4W`>`@<@Guy-35hW$nW}fJ!koi;WH*^ z58`lz6@$8cR~7@DYy`57!mLoH9I$Zq;7DAVYneFq;0a`97skgvJ+%&Bg4usz)i{{3 z^BxUPMaPT_~66F_6!gSV;zzR?$ za|P1!^OSVTjH6r-7~6k38H6S_klZNy^% zBT6nmQCuRU@_Bsm;JQZu z?EhSxA7M`HMiZhD?pejSo4aepsh3Pw;!Ic8R?r@VSRgKjqSRA(7(I*E`UG8xUH2>U zX`-W=>6^9@H=RzaI_mxVes4?qj9GBz(+V?rxdIVc-BY2YOSC6W+xwGgk6O=wJ@?+y z3O1%-%Ju>qvwGw!o}Fv&@@G8^-sufsyLb27q+5I=)b_FPuNW3>*9>z^1@!9mnBfdd z$7Ey^X`{!V$~coF0gBZ|q2fk*ydI*o$mKkR1>xSZw9zNuPhk(yQ18Xf8;+Nzqfv@` zmpRpWc;yYvg{h(ggY1_bg4PtXBpmTQ(1+w23=h-PhBgv|CQX=rZjqGxdIWNRI(CB0 zlD?Z})`dp|6!OjN@3hMFC~FtDj+Z2)C*q9QTb;1kEG>yHY{{yokeH^m5uhWZ-F_)3 z9j`F*prtLFqD|;B!ILxd+QOa??lq|Y(_LUfL0(LgzBbbuT)fv`Va<~rZGpSgp`Ze3 z-|7%6J;Z%_p+Jd|hEoN-XFfm2nabeYLYrf&nUIaVR9#eG! zRuSQ=&yybvje<*fXF`Jl4Sj29=y+>N6&)00&xfs2{?M zgqsz@%WbmXgig!~dAyu!ty1ZqT(vV-BK39rSw*3Yc__>YC4S85a(hWj86f%DLrc`` zk*CsN4)XY-D`@MRO>z~8VMzwl=Z_XjR>ML*QXgrY4p0*`fV<4abUa&YQ^%lUdzsD!9#c5tWaezJ7CW9Rd$!bs{6sH5_ok}Nqxo;V4Q zrjjoI{KvejhQ4|Au8gUSf-RE1>3D*6lc7^~Tq&4D6Nm5l)!_Yp#oWgIeuJ3|MlVdH3$OV2$|gUAV-uK0?WFmUiy$ z1a}Ez_pg7i5brDY{pyXlc2%E@V2R|O=iGf<-V5}aa?KtJ>0TBujkZi8hcR~PDcGYf z+S(Y(3Fd+s-F|a;P56YwH2W1+xGlNa)0wIC0=7~aYQ=Kry7?M*(q%?jY4#?uGPC{v zm_K3b9Ek}_0;`pG%*QRfS``&gX5Z?2F9=DEjj-tW%YngY6k-$_F9f&QKZ zMZSek#PB~yAAbDgne(7GiPw_&+461usL^kpkjX4^UyVJMdAj~xb980qjF|lkT>?ge zq(8l2OhWMKjh4R6{52`n-h#)js+V33O=+94C5^ayJ^aJw>=qE*hG5L*KQLH=0q~yz zX5j3g+6y*fIBpKs|0qU5-^-D7z&{nGnUv_D?O0fRP^>c*9EcwP$N|lI<9_Ny5BT6g zEa-e#AclOvFK`Y}?;ticXoU}e1}xKUz3%MJ%Z6bnZ$Mx|aymmy0GU#S2Euu@Jm@}r zwWRjE`G}>fEUdqCw;K+=-fvL=6|Ab3i7EH%?{3leeEa}M6~3E1D~@Sb0MK^GRi0A@ z0tXJ~MTgm~^h_z_R`1an6(w^<{u{z^P+<2v|`n>%BCJl!$10}<6 zr~vGKYx8-76}|wzOCmW1G}^uNq+#u3X?xEsQ5Qa&QZw= z@dgjzyuH5-Z=7~_`rU?kbd#(+fV%ksBES!?hYP{z$wT zBWH{~ygQxOGXnhDe$P-02_&eOjPQEkXXJdba9U3jbx{!R1R?qyyJu;K1}Vq_uNPg zt)9CJpX@PgzC+5IJjv>`I2gtZI9__T6;6?)fgi%FSToV7ocEe{*5Maf@bn>kjVmb& zhPoD&;X{X}HpngBb2vv^<*Rf|r$8TI02}byu%3IwFKyL=E3OD$+$Yx`jyqlYWUi=Q z9@sb25rr{1_ESKN!ULW5taUq)xNo-24*> zhl&1;w+YFdR(@^ruNDd?dg-rz27!r3r+#5>bqTcn7NPtrrE4nP7+W*GWT&*suic$_ z=-p+2rr@>x;l(6@YfPUIyhb)*T-gUMi!JM-_+ld?|5b2gkR>mVZVX9TBb* zHKJFvGwp!Lc!Sg5Zp^fxBy(vH2FOHdV$6fHd7o-qZI}oW8(2Dn`hX1er%gILryhcx zFLMUk`kttLtS^WL$hrzk zB-V!|FPQT`-uOOk$|3TDgT1za5tgF;_Y2U&3! zcljU058{ z=k)etDy@q+%P5NyLKDWQvnU(6mtXe^va!fdsBPgUJZbe+rck}4(U&+!`>~v+#v9R9 zUZskD9UHz$e*R$f9yOHVM8<`kDCKpk6?amoY7ZJ=L|~KdcX^^SD{xR>>YMzH@}%lg zQn>&A;RY+C7)lXYf!{sy@I0$zn;=UNdLrEd1Bh7BZufJ=Vc2%0gDhU zrc7>0A=*z~Apj7Om(>Y}2lG&T7&nD5$<>))*)tuwl1oXR-7&5m-Goki!G-?WA+_Fz z`To13UPDoE41kGM1Gtit2~AYP@;J3cY9osrvr(4}hL~129lpGFVI+eho5%UK#%usx z+9e~5#MK|HjqRTPmUf*D8zyO`n1O}PYDwuJLibD{?%S2L=O3Qt^s261FSDgH%- z<4{v)fk+%#N{a^$ZWL<>G>QdQ@b&ElF)KKASN@m59qQox1tn+h9zyNN=t^#;aj3*5 zY2_`e;TTFPX*C;F ztoK+}R;THcbUY#NAFy7WKOj!Y1v~XYM~!=PhOQu0%~396PQux9!~0w701R@m6nN*r zy(O)a1asGSZQ*`(8k4~|b@78pBmj88Y7nO$&ritqRL+Gdq9Vqjr`_qAKmD4K!a8@! zi1HSDcrwH(y>KUT$8v|<-r!Nfi-{rqm`UHiVqmNzMYnWP^Awj@wxh8%+%Dzv5gHq2 zA+xfqMVMuz4{sm83pxc|GJ%yXoRBTd1W#*yK>ve+U* zs;I+NzuuNF`b_u3T+`B@W}fiucsDXsMN%4_ZFY`cI#cJ{oxBGg@6z@j<*0&t$c zsYFQ^>jhI5scX-E8P(WG%mjEr?Knu8Xkbr@VQ28{z^M`mjgjpjdQ-=P0pn?i%n=Cb z5cd;6i|`*gxL^9!YZx%ajV6jY*R!n_;wU2h~gIk6eV#Iw+H(FJS&SLQC%(w+a9*_xQ zO@O5Wo#JDm0tr^^DVneSx{R|vhiDAuOG5kz;Mv5Plrgpd|AKr&(#RnmumXAd`l(== zF|93LaT&D{^bA?N!x(MTtOzQ=`Wx@R3I28i9sJOnyP}Zop6#K`ldgR#0|8W+I?QzM zgDNMu2tpn5xiY%!LHNY^;Q!+Mjd#$}Mojz1*)Gr%yTMVJ_ww&QI3K(-ir?^4+56=6 z@D3Ne{_)zq5eRFhe5+tg`4HC!upml?c`t^UlFlC4>;I84^K?)lWJ8cbkvv>UI?3IleWXcFTj6MYF6<#UsD0 z!<)$itpqPeUEtXr(zv#7&l=jUG;ct}g=I zplYFlU%xjY7~l^h5vV36P_{n1`8~E8TY;q7rZacJmT*pf`<-gYgPB~Fg|1F4%Z^E2S*i&|%G#XRCb0$)b2)y@q_n)I!#-(J;x${~h&9Wy zX1dtk9ILXRh6CQ0^OuSyT##F(;P;FCzWj-3l7~`jgA|c8x+6KtzcMW=szU;9yobjM zJZ1TD5S563#*6lX+5ZAK zTJ0lJEQ7#AoLgMjz;z9);48iZ6^xqGP7mk|Qf~Mr)?MRIkb_EzQnc9i`UAvwOoq}O z`B~9@==M0+Il1-mei}aTtrQ zj59Z8lehaeCDS^aOj-9>1VgmXOT=~Ox$EA7phJO43qOU5>w~TFWNehk z3h85^%TCA5U9)=uB#9sCZ^z@uQ~?-t(4sPaBd-i+C$_gv_IzEI-al@2ARaxr<_A}YVcJz z6UQ%Yz=QLN?Wr*YHJKAD^!szz0r%Db%+$I6hOjc-sTLi8|3_$8728LL33NcBtCpGS zvWe>#QbKRbN=w!RQ}4g%u^8|#3vtIBAxH{s7CaOZl9^i{Ys+Baz%Dxc2UD6;c>j+H zU_Jhh&1EuDa1JFU=+Cs1-<+=vyP;~QLt=yXC*$m$?_=ZRKcd&-zolze>-cfOgZm4X z19`zaPJrLrmuF8e)GE|j6_w|BUH}LFXowVwqAYh>v2=%TkO{iDCmh4KQojdWiAK*m zVQbM50?AanlzGq=2u(dhVX5Zm;pp%~S`$wU|4ZQH^pHW2d?p`~d$LeYVd0CyW?IaB#pgFuKDK&-O>uF5F}{><;tEO+lj9rt4Ekr_6`uQ@>~gS%#YqWV4L z^CHKDc4C>|OQCz`JyxAs$V15c^>z{w;xI87*u^ZM9%bXMmvYdtiv#DPBXbScf>Mj{ zz9Cn1$YrXR18Ihlb@$B&(!$k0J2||o{?P=v2MkkbtMyUKcc^F;XTo26!t)pdR2y5w z+OzskcxMthJ8u_^U`-p zXP{#s0dhxml=IdmU`T2`n1i&(`U%ZN#CMz8ZlxHQVW>J=m4C)nbRYt$GX~Yk$4+2q z@v5vZjHcY6D+pP50_E!U8>++o=w@*)AB19uex{32W)bJ|#?j0youz6bmo9cm;vRry zI9vMHuXk_vmYU_Zbw~=#h=;)oOKMSOa^#2NpFIYqFR+|A&1dr96pGw3{?bm5P8PdF z($fgQmN*j08bnGxMI1e0E4b3n1!VOU4J+Fj+pN?SQiJZC9UTTQ~JY0nP0Q&3MrwcB=NVuY2vj4%q#dH`NhRx1v* zRKT}&8xewjr?!K`?K7HN6^8CM4iG}_Z?Q(A7!>wZvwKZCsZnDOwuCZ)p*FYUQ2 zQW;j$3iK+%)WdbTP*Cf5A$-dZ(491`wNPQ0a`>u z^&;=>y^fNFP=UZo63QLL@8osM@{mz zKWf3OG_EHa%d1cQkp3`Kj@Q6bK~E3Z{N%aA(OZ#;w}Op>-FIkSsUX2#D>gl5>1a{(J8BK==qM%Gdb!UmG&pZX+c#}kpY*Tw z@0|Zc^;13-^uk+NIiUSP>OW_%11&?FT(Bqc`fda7)&{0nPEU7!uVDw=zk;&(> zS@O-w{2MfNGd_>V2y`L>0!#bo^oWz;e$*A0Bl^EbBvSL=BceDw(}0>)G3X!2dxnDk z2%M1H?otfX_mr(-^%N0WmI+zH-T(Ycp$5}ecdMw_1Jv^oogQAt*vFKJxMA;U4b z!*cSMDesqolJ@=aQPNPRLoqLyZr^?m7yZ)SuZPxMT3yzztZT3{;NKLEgSmrrY+1J=`HJ??7_!R<3YRky zi`>0nvTp~s`9oV;Xuc_@vPyAP&p)aPgQlEObi#(gP|p0_o|sV%be^s0!b9^+&#JVh z)NkKDzyp;Et^RLP1CpC$gaJv*e^w&`%mE^x+fzy+LN;#B{~5h<{>SL`^9sj*lN?ZN zC%?{TViTzIPdcObnb;iZ{{QqjMf!kF(7Yai5fp0xC;>qrKz-&p|70@uhM$Rz$t5Kf zh}{T)4s;;kM(moZPH_RF&!dP(tI^D{k0jx5EDZ#s_11K#Z(WAUcn9Xp+laFRZcOI> zDl;#Z=Mue2`ePIZDvck)|H<~q=|GXS=MzAT2~v+N^{}S6X1?(wV4z2~Oc~lvye0C* z!R>&U9txk<4w=-R*lT9)FW#9Vojf$ew3*0~0D_rd2$RG(K}KHRo}XTQCNwbyA9(V4 zH05R4kd!eqWA);fQDW!>U@jTXet-aV^?8eQXM8bgs)8IT3Q|ZS2jbA??ymOtorC(4 zPJX2B^9HUCk9K}Kmfza1+m+Wn>fY0L-UMzwU9LX98Yq9gzhBx}G+q!Kws{}jFY7J= zfUAGK8SWKLwwAC-9EYjN9$q|O<{VwpHG|^l|Im5Z8bxV@c1%^!o`-U(FCPS3`X_KU zX;z1 z`}%%dzlEX5iJO=<_==bc|E_+msBDN41FC0*V3eYmyr@1$w@x|wyJOt8MfRs8v3?jA z4Q9}_@l4fXXk{%a*kJoTH&hxVOW85p(iL$Gn-d;$pS04q!Dn%7nF3VO4_Ps>U*p(~ z`m=4Rs(i{vygnJaqYZ|n-#_y3BCLuLCkVoQ^qh9|0)^|_SxmWk(sI@2R;TZTfirE~ z6M;{yZIx9ad@(RIMu-iX0cOiaCqqBLB{ zmf&iWZT(A}R$+BCJ@JS4P*YdGRIzV*HorNjK!DD5 z_M2>}96j%Bd>Z3M`NfBpckDfUr_)fSr=vbJlk>aGqlG4%b;i?DnKZ$)7$L{I!Q+vS z3jB15p&m*54;LfpLByooC@BTZ8MSbJsVPQp*OJsD|C1vco|87KN)eH9k?*M%_}0kx0b*=#YnEA)bsq#1 zKT4QIZh1ffrT}~(OzSJO83d%}$R!Lb>!y(U4b8ox`0)L?_L%l4E|+wS2zhhQ^)_Gi z#>f{#y+X?d=a->a&dEo-<672Y)GZX-r1?Kdo_|&I?P=#RUG^4M5??~RJSy9l&8+;Ay*Aquw6dIfl{90Gbw1e_WiTd!Ko

    f$!HF6H^hVow<5CQa4%7O?fjdou>R)vLIHv`$J9Z`5~umxDNH<_2l?~ zH8K4%;^iBl+mwkO6No|JtaEdMJN(ezNu_eoSmgY0Ar9jZ;r?%&cdgD6p^kNQ@@tZ? z^P*-ZYT*Dzm8r})`k)7-HgY(J@p^_Lhh4ioGW7PX7f#J<+rikp7a(@i^sG#%b%XW9 z4O(g<|8ZCajv*$Q$KKJ|5qf1m@ytG&m+LqZm4Zg-dkE1F!i(@IN}inVFBX0-T*}j9 zEryV?5LB$7HxGOqtY~BCWCGm3;O;I(^BQ>frsmOuGm06q7R9x9Pxzz@wIHQ+b_@`g z;r}AAQxi8a1~=#bMiO!U&rygAWJCwh0U;WF${qO&1xfxBdr@;)89@Y=fGCi%#V4O+ zNKb_T+Oh-$fqrBoQUN(wxmf@IlE{^4f@aKrB$0<;MJ>z$EZ+&}LvPWBQ4M>)t*_T6LMr%YC>;$zkFZ=N5`JI}p6MvC0?pcR#S9H8;1RV2 ziz*nCh#{q>(G6pAh10rVnzvcc9q|EeLkiz!3y~W_JE9dNKO;jO*$8$1%Ia#g%L06C zagoNcQ?HRDYh7(h*fTt|TR}?s<^1O=*5|7U-Rk^peAxBdyj=H@m8lBRbAZ%#p5JDR z3o;qcI^J>goF&a~rPe+x4quzho-*zHTS*UJ&RIlmoEX)i29>*6ct!<@wtuej#JD;; zLw!jsjd7(M7UG)yk|mzjD{>(e2`sf#nHskc@zD|yF(CSY;H$2e-nkhQe@~o{#;W10 z`^qnFmyye5(6u4vif-a`b-yl@8p0_y`;_Rq-tE`yb3awx^?I95{QdCU=wZ)>HmbF* zx;i7aM$aV5LmYq$q32{#edMCiAm~Gx)rmGa`zz)U$@Oy@*lPFN+Qr0L1+ad(p%C4Q zSv8ZE7BNE;E_{Doq}MDKqk>kdFn)sf<>K_R>-_+~sNNBiPare-k&F@=k{xR6_*K!d zdEN%=u&g2Xa&iwA(_=rwk#NipYw29?9A(L=yrHV;0m{KIbrn>eqDQ9?COw{HBPs|i z=Hf1l`K?pNff9Lnx{7k``)S|!&uPT+U-shhL{Re+b{Js7npAD zs`6Vdn@jfw8sDW8(epDYd~8;YhnG7UTxK6fRh6%m^Z9Tc46}Ib@0e5~n|(Hwe+s64 zrK_ndNKrgbS1()wR`w0U+w}OR@GfZ2k<}Qw8UMm%vd^)X*U6)_0VPUdepbn0EPC~e zK9~#u)|?`e%FRKS9^t%yNqHlPcA%r2#>j6hO_6xpQV@q@dZHAyD;G}`+2V6mfu2APEWeDl(q?pQ)3zqT|T!<-47%lus3*NypR1Gq%3 z!zhfv_}DB@1L01B=UN$carzVT&R7?^aHCa9RW8gFA@TB~GAO-LoHA8L3yeRyNYUo% zP@U|TQA3jpU%jkTl44*$>Qtmm3=jUM5HuPe$p(GXFO`}T8G0!y7a=Ozjw=We<`OXY zyTz&Gz|T&OT|P5MJU~Mjv=L0c6_{teg{aV%j^oUnN%rTvR5iltlgUxvfYB9eKU?KX zfJP`SuyTa8=2rX-`Lkx7u}$hhJ*3u9czD3>#r>AYmXazhb8F=-tNPNAsNA@OWO2?M z@sTifZ&lvPI%3z>U^bcM4eexrd!gmE%2uxaLu2n;yh-etrnQ<7^-vwZ1M^1e(WhHbAu9Ez(nwH;k7-KHrxCV zd3Ch;AW;MSnx|~t_Lj1%O7&hCRvP5cVg5Odolul(UPVB~z=u&rW-9y(-xX1HEd8f% z&vZP~a15?OZ-paz)OY38>Frl|D4o8-bu9n5J)&pPd+ld)&#!cv=|0C8aAHrJ(__RU zKx`(I{x}mDp6+dRo?N#3#iZR}_xI$DU=Oco0*ik+w6$k@0lx*6PU-#b+f6d=XNt}? zWaOEqQ+LgND2CKFD9TMV4U$@eYePcDE>Xphb3BL&d`Lly`I<^N)byQNdoj3lwA9 z6O^IH--pgurPY=@GhvujmM}ocib|MH-1GYEJ>Tc*D=MD+5!Z&&!>;LmpXdCPfV!1E zu7ypDFXIw*;9M>j+<^$a$EK)ev=NN_jv>#Ejy8H)4j|O0cGJL1b0*5?{(-2lNMcTI z^J|vdKBDNRLe%^z4YP+a*W8csx((v>1W_8HaiaC?R|+p&GgEpk9YUaMEstUie_}k& zb!R@qy6NS$eet!J_~k+{F?&{n{!ZE~otDmCgJ(KiBMEr~O4^lZuj*nK4DtlezUgO} zkcEF|<7~L*o;HiO*uHX*3aYH>!<0`btptcgBfpn8gnn+L|1VDXQD2rCK*189^--Vj zCQwpux$*!HZcU`WXfsX8Y&n(}GW;y`bFVc^eQn+E`9)fFfWP-j84(yEgSu%M2(eh! z(t6^OjcuvF-#7PxbTj5XU%FVv`KDp;eg&%D^ab1%tVI6;9FRv@(3_QJW>c0lVj^3? zmhE8nP6V>9DS$CC_TQT|pXOq+6qx$HU1K#9b>so(s)oqT zNyVI{IiPS(SEzp-;0VjRAt`w~$n+X#ZRd}{J{7q^o_Sp8W+bQ_(m3yk`bt~W@^K=# zvXw|U7`2HFFNQAdjJvjYK&}38$OV=ui(lX~=R!|YVdre_2T4hmMn)(y!B{XWFtZD~ z`m~Qe_gQVT>~DK&C*-H-X^<0gdTq%Uvu?@6l()QT+e+V)A0D^g})=qN^k6`&8R)6)+UU4O5^&pV6t1L&%S-fN#mxdVZ%4 zG0V1Nxg$N{Kxz5tU(UFb0W{8;P^irb>JF3_a_CW+#%EF4BN^_U#7FU#P27X8a%MLc z5li9G66rRpprDu?pJ&Jw9-6T888^^Q4^Vr|1W1j zGZM0Y@q}-B3qYpnfHMl335zu2}tB ziwl`21l>>DEyf3*Tg|6f3E0aWz4fN(xAUFd4V+xlY!_i(w;6YRrEHWypA5_Q$tV3+XkCRb2| zuSki*RM5A}1BOj@Zn2*zJ!+VWYRu_J`+DTE;!IJN!W_E$HPmdvl*)EUQBRn(LS%R! zrM8-{xI3F$pPyZo{c)>n4(AsW)^FFiF0BXxQ?=Z)pz*W)V&H%+=#(-uBR}M~Nw{bgJz^p?>QGAVvDSqc7;>*}Dgyz6q@3pRXt)Wh60n7d2<+N`DxnZ!VKYTALA z9SPd`eHKdtM?V2)9m3UmZrU+IAu9UnWW=R!!%>Nb4xFULyQ_2+f&qTn9~w8b??5zX z4nuS%IO}lQGs`2OZW*8WiG*o)@-z>uk6_;J7E}ntPJyJur59BMR?=Oi{XYI_JQM@c-=vL>?ajtF{Bqt>me623`+FMYUXPq^y4mRm>F5C51 z$Qk%az+w&Wc{n^Mf?uO^8GAEuG23`(-wh75@NJ_J}r1GJy@6>YySEgxS z%-uOhoN8{lQV+hGu}zS2lXIzlzOIli`Ix$bJ>L1C^v&UYSuP{{NQ+9&4iv~9*F=Do z^vonBO^S~EO=DZPmgYr{AMBZ;f(b##Ufz3Jz$w1~ka`hw;PgY+r(x^|X&o7Ynkuec zO|zTs$;8Y{fH-~kjE=s*=x`xX2kqsLBZL#W2nD+baf2)PI~%u?*^`7kt5E;KPK%cG zAE(~4ml|yAw`AGU7Bo&ijpZ~*;S<)Tlyb= z*EX01FF^(#)$cYLYaeZ|uL14pu_hpzxA#hNzu0u`?2I!(Hn$gzxDNl@XsqV^CJwC; zdf~p?7h#*ImA}1T7u~;Pzn}{3Rd?keIkcE@D}S?iX{fWJ^S{#eTc1y*`<(Yb>X-vQ1kkAOCu`j013&;x z$g|;tqWwPq{n8v8N_(lgq&{Gu?U9Pbvd1P0>dDxLGXM-%z}3RzRN2Jv&j$+6$RF|% z3ik3gYmb8*!g=?5&~Hyx97J)d6~}|eOX{AFZ&1I#IYjX?8z^kaXJ`>tCo`kIGr#%* zK<#dlc)*Wq_vh1Npu&#-DP?_zj>Qz1FbmQq521F?x7U~9Ed@crFMEgGA6v(SxRn(* z-85sXq3jl|?(&k19S}8K>o?;dbVsVVx3alsJ#qy?N+|oU*PCm%pz7l6kDFnG_x;5fuNb_G|UHhL|zU8rAHGZ zc-|`pMr{0l2bRUzaMGg89Xn=(UgHj#5hUm$>B;YasjQc|RVn^7q3UNGWM!g5)WzcE z%du?76bs}>oCeb9Mz&%!|JEEuIR61CYCZfVy>o=?*_tQX^@FQQV`u1|PPU_>F5fUN zs*Ol#f3{c3VXPv>((vGv}0les9`ReD{aLr``Jav)1GD?Hm6j#LkOH z3g^!dweJntvUtLUri=<;8K%0?6%D7U=Gimi(r?0-d|JbwktV9x8-bol{Zy581Xleymo$ilTycqwy<29buR?s z-eeL2f*L5LAt%$}lTft-_T^0nxnVNIU0l0L<7`nta>CdFF4^jHY!50sZKsUQV>!qe zo*n-8Ghs^|MtTxy0Q03Y61-VR=}?F?qtv%RNNBsY_(7%AU2U~if<%4f@WMh0ksoW? zCtkuRkFJGp8S^{}_#$Tyx^5$XdCs(z!6upF-ROaJT^>T-^$bI~l{HY4#eKV$3F<~E zNy4oAoXErw249CDRfG}3(xAd-7roYkcu34FTQg`F;-Er*B{2oYL0RHTs+z-kUy^G= z(QgYk(pbU9 znZ0$4-MwA(ta}m7*fiMNpV&-s^6pFK$yR3XyOwr4@ReoT!xF6;SJ{g+7jBbcp&_>O zdSFPzk=R&o_^31EFJNP=j?zK#e`Eun*1A9W^jl!OYMkhMbJcf)JWpC-1zdPktjZy& zC3XUL*^7X~CPl4=i{fI{o)I-~y24#TgNz%A(|v(vY+Q+CN9g- z;1YeiM`8e$CuZ)qPwlYs;Rw z_F(CYO9OG?S(<7#ucZ_A>={PGuIj?zjY*kOVQw3m#tYy2?Ixt| z_a*dV0Q8b~61LU*Ybamw^@hD7zgr*zKFZfeQN)qm}Cx%;M$iaBuH z{<+p7HzxxMvF)V)f~gqjj*d83J`2TubFd#h&`qXt*1@Yx1$X!TA$}sMpp_SuxE<@Z zj4toXc?7pXNkd80eq8tI53Nf1#xT4bZQagsL|8^CgY3zwE4Y{&GC$lkwa8%-?LGac zeowVR1OW%mo*K-CNG2l3V2+^Bws zP~rEU6Z)$dE@kYvl3<1I2Rq;b?cY)%I2FVBW% zv(=L@$(BRQWNN9ofPg_wA7Kzi13c9|fTy~s2(NAJ$w|vu-o&1Nd@_Ib_aSIhzFs9; z)HigSy52pvzjh%iN_2=HJg#F-!5|M`&Vq}40g5yTUhr;Jf~S`)(CtVQeXwLA!Tj)# z)O1?#<=3Pj0PHielSrr(7fD~Tum0N11D~NQ>!E~BPy{li$cMH4gw7tN<$Xy_z^u0l zZ!30Dg>Hj~AtCY42H`j0gg@l`84ZA5Z#k_pca!E|e{GskWFI`9K({#j6B;S;!Cox) z$Y2GrR0=<`gomSByC6`m^4JXx$(5{xpy9Quq%ZhWH1P%(qc0=;Db1<^vD-!4oEg-V z%j)HMVmL1z2uQx~27xEGVn5QFSI%6WJ?I%!Znsmltd^{p<91Nhr!N5{{)0T#@XfL8 zO`BNCH17~dFTP^GA|bjWK3DyDpXM76uF7EECew1{iU8Si%jN#*ygThGSLF=4%`c=j z*L91!S2JF7H&9&xO{7W|?abs+0$!BgPvD$82smjGIhR!moSegp^7(htwXVLWs>-*~ zQ5{?lM_sKcNBDBxptKty@2u*GG}k)sZ#N19-8gjx%@x_u+YlAp5K&@?I;sNnNlBzc zw|yOc!w=EA`X(E+D(7_=&hgTm9(Z&=*Kz6a2108}_>0Jfh)~11gJCu&kOw(XbE0KA z&2@Zh+`k<=2i!Z0NQtg5bs2SSg3H?;$n!nAJAd!Wd>9O;GW0sH75n11I(*I_U;k5e z+S$n?bo?lvUNc^s=V&u&75p^)3Pq73HD^8;pvp~Wq`CCPdP)b@C2Q6OtzAGx?#Hzv zT#&2>fr=!Vg#x?uN0|wAf6D~2ZG2hdpvF?mg1Wq%9rY!!Rg9MJ@#0yI;$JEwveQrW z;4?e*4E;xIZw)cDz=F%GIvyX5l8 zm=A&&vCs)l*IP+n4P0A&hf|Ua>%{Gp0#}CviW9DkpQqe-hlBHke=c_krhSLz6W6iW z*tMNn3Wy-lebrp+2)w@L*2KJV{nU9mae6MpWyBzBBj+P|MXT7w!WhL>flX2%ny3@Z z&O-PaJ(R)mtRjasWuyUNdt0Fhhw|R0!dMEyo{nEiHbLK^v3_q&|u7jD$dHOjO zO3T3yUg6&{gr9sQEAuB!M=6*WddzQ5epB_@!GPGmbcX99)x-H)O!{!^YHH^3!WqI1 zx{QS6vfwEU8Ru#!jD<5_%RGMV&EE$rMKQKA&z~?`{2Xa0+WLuoHHaUDHt|t`P71hMeT19rXXOnr zOu=6u%b(KR31baA8ywblaqg1dqdHt0b-6^r_RFX;kPZh@LXkg3Z(I{b@Sa2Ug36b?;|# z&}AV<43(iY=@0Q33QjmaHmZyOSi(^95b&{3lOsm@)LSyIQ2tMMbc`s9I7c`LxB)vL z?AD8*KabgwNdjrIJRfV5J34UFIHi&o8f(N1ULUpBJqGOUvff?gMDmwU^;=0&>aHU6 znut^4cXzjFRrj?JF7a3%{(Ms-i^PRVlMxtt7B`*xEYB>jHWfUxWkF+wj3;yDhLTUJ~$x{pmKxD}2Z>B#+QGU#tDC%<;| zwcYj9n}KslDv4l&FmkWsPBc=7*4KD3DwD3Gh_=+JaGu>86@mAYl*&oN{PcSYxV1oC zpWt0VIhh%EZ)Mf!{&>VY-eI5Q5k136(sGv2o46GBMS!}OYHsUVR)y|>)(edh$dHEn z7q3DR)vZvE_UvK2C6;@2#n4sn^}zL-YKvQGM=mL+YotX3l2?QpUi^S4>hlz zPMj-h_C7JZ$0Qhjw7MV|!(AB41hulg^XH6(tVHPkbOZOl{%W=a3vuD% zwe8EDpH3x`e@4JV7JZ;>XP}PdP}ks(!NW%iD_Q)L_zBzLfL-GZ#7**}WF9Y5N1OqA zhy8$$6>|1DId-oUs@+Tuo5#l9`vEe7GZ192aZv-fd{iMBRb(O}EHz7iBQ3w7Uxp`3vWw-lOEPHvN|$sQ1rL*i z5yxwh#2X8&AHkF1;DOj!*#DOzChbcUX(MvL#S=OYlwDdsi3XWIocJ67rB?`z6U+VhCc$i2{$`Y zMOkv@Aua1aylZveK2~PQ5lDxp=4D7|NL|big1E~VO{jS>*OD|>mC`}pu1|MBsIV7r zI6abrLwk-9_hJssN>qb`$BTmt`K*p=@{G>+!K0AShLVc++{;(R(mltBn!3#5gO{D+ zaO2s8(Xla1 zK;Gd#=9csW#JSyd&cEGqMm_Ouhv9B^(7|^yK|qq_ z5hUx+$#+ANMEc7T#AH!O_=UZ>_=w&?M^weo5Hb=sUVIPug?Wum;aDN^#rHdxSSj*0 zXKt4%P1JLW5V=>>+f6ePda+{@LD1(Q@ZauK(8}erL*U?QBD81_H5{WlLfL76do2W! z-UwP%4$hZwj3j)tB* zjM!l@Q8hp{xwqlZAq@D+uw7}WzSde8fD%WZAkl_#vVZ^lm! z%7!6oHv%)CJgY*6UUblrl=w+sLL}{LJyC z0Z<#%5)y4cHdtAe=_ypC%0eP+=q>v1IhaJ@F@AL^*Y4nQ28bxr9^8?M;dx^K>I%4C`d`%5N@!S`PgleCHn?9Nv5^Xu z#K4q74M6_Vva%1h>z*q659(^VT@?~SqPDC5FaBx>q|5PqYnFk|r!d=W*S^2=H3>Jy{VH{)QkhcuU# zgD3>xSM-$s;8%fNOa_o-AG`luhn67&N||X6tLUACZYqoaC?e8q2@u?KH$WQUe@R!# ziU@GwYm$^=R@-OGg00&xaR%YxUuNGhYEpuzEEeBuTJJV8S_N@6@Za$lq*fPBMTbc6}!YrVPU$Kai4`0EGxAb`0d z`HQ*QmOUNd@=nAis>bidLHar&%mw^(U>*Qc;Ri?m1;j+9`rB10K%vmk+rNaPN2$}X z$YRPxL9`j8!KGIB2znY(PIf`UCJA zfSwNYH~_h-fO|xbMggcgtfqx200_(uIjxcETG&D_!EV!(^}ZOO*(C7?Wqb=%ALp_e z;Df2A-dV)HF{1)tIc@q|0FlTqAk3_LqD>*n49T10KCizJjux9p-3=Y-aDF}&1Q2xY zh!r~kme8{Xv;>fj`3e$3@J3bSbPwYtoIBdz4h{I)1hCX2Jd*(D>|0-;boZFLOsc;S zN7W@AQS{lU3Z$>qU=O6$OZbBe@*AWeY1aur@`-E~Ap<&PR29Xau9+(^`Gge&q{8lYVGzWV$8|=ABfNvFo#@JaRkVO!FWl( z%bX4=pIV)#grJM|j|V4HIOT!9n~IJ?19v8s?#>|vPbfDOKP5CH0ZZp}s48D47z)+L zy)b)7b90&5PUUMB6l&mPL}=Pr`vCBtJU&(vEVLEWCtzgbW4R$mcQDN|IOT1dz&Ve= z#QGv_9Xknwp#Vi}o3O_`0j(Pow%V)tptsLqts3nPo!`6|ZJ+}O5;g8dXEh{K@w{Xi z?e3Ga=^urDC2`98Zc2v&SeKfz4SyTu)9`P@z=$D7>I;F!u(_TYQ8XC8PkGB~bH~8^=X8D5T4}Ndw=4`u7te1Ofwskb&tR8RVWRfcjPl z4|ycC|2D-8A!rEUs1gka0flMWaao&a2eO+odkGIL0-9I9{hbnX4XTGk`;VZvcrU=d zbE-8a#)B8MbU&v9>?i9MeJ-S6o=T5q$~kO=;*YSjslq~pSp(BLbLcH0mj7_A*a!d3 zz+i2ljtr%W?!rhd%B22zTc!#X78tV)xBDQ>B1q>a|J3QoV`C`}0!QzpUYVVS!1Z|CeheZoCB0v+)0c=Ir_7 zfk|5)mjgh*JewAOTN@HU5d4MJi60;UM8rq{#&=0XRPOI5m|VrtLo(KL|f<)FN;9N1tR-OLp3J*nfu+{H%TD9 zELC;F#6_x!+sH8`meH?;X*brIm;EO*FWt!>G)|T_)GRjK#@giu5+p%h-m*HNm+P4w!Ma^sjU7Dbvtl!63n+;5SMy}VaQui3c{U$-Pz zA8#ISZRIOGZF?*+ZJ1`-h>>mQ(s@}N3enlW>~W?T$a|q7IHjs=M3bqzZyM>T;#Dp0DL>$Hx553^JO7kZ+7U^gK_}DmxyJPbzIaXp7wI zQaR%|>)SJ4>#n(JJj2Q3eoW9W-H*I&x9Wi&kM9?19MkX?t_e53Nx0X}?O2!oRPp>y z-`Xiy7FCrj(3F`o7omaM9rof}Ze=|*T)jb~ceLZVoxRthhiL=1Q zcs|1|#8PDc{=~bS&&F7r=jM8y@pcaXxh^4T!^*kL_<8=Z0a2U)(HVCazBVzXBCGMs z@=5w$)Jc1Y)=1k{9m4fG=EPYOwi(54YIL6UO9lytD)t3@Slit0^GqC`5kZTt8lgw@ zbtiW4d)ZD!M3V|=SC4^lrV!QArx|DVWi0cgg|E`(kyrkCiQ?pDA)Uvo?{RQW#Zi|~ zu(i2^KQS@2y~+EgO7pXpy23^?%!K>x)!kIX^q{u+_(u4K=dShZt>H8MW5d9gC3ai2 z%9jc?LfbUQ_Lp9-p>U_S{=L%8Rb^MltKkTT%A`u!$E|+QUi%tnf==t9ji6w~`1_1! zzjo&oeqrgx1b$r1!SW#{e^GMc)c#NS1H_G0Pq(Xg;!8n9Uw4~$zOu~5IO|=%uu7Io z#ewevH7a+br`I{R1)L6Vl8Z$?>Klr+Y8!1&V;7k>;YD|M_A|b%1*1PDkiTtAE6neJ)x^=%yKhi26)|y1dp^>WpJh`4JM3!IbSK3n(^e4aQC?6l zE0n^iu=e!gEk(Me43eSiF%JKldFOmD4HJxO-=6Uev=S@`O2xJMGwgBa^;S20OtjHR zays#p$f~~fo@gmhyU*0Iv~STImDIMkh5CFN+iG=D`8Wba|Go!b(=5qB_|5xn{*`oT zWmYW~R)pt3WVisoj@lY8!pr0webEci)w8wHULKY16_by#wEAY%5L@*7 zbKkKXnaP{Ar$l5>wTtdXYzezB9;f8q&iYh?tHU!9Nd5g4wsd=l_+LOfa8Ax719X&s zQ8AdGUZh?SH+uwX2WWta2cAoKQO<=%F>xQ;` zf+IWZR&Dv~Kh_~Qi5-hVe&*2L>ar6+XCAow0>Xpw80&=H1aD}Fc?*aqMShBAIu-o(!vK~4 z;m2XfL@C z)~7XIRYwje1z&kSMvp-wEK%d1W?p?=(Vr~($2U8@?+pwtcsV%TdE@F~@|htFr$nKI z$nw@f8!r0FY~&V4$oA8HRW205b+2biu8&tw3$2KHiIP_XW)9iEyBpK<&h{(c?izJYxZ06E!$M(_xjC+NmD8+8SgBnU+4?a!64w1YZR9B-N&s}+4y8y%L2NugR0N$j`!I=e! zci*%}2Abfb%h1V%xA~_O`6gT$Gh_Iu)Tr3>24HQ|81b&t|D3ZR=8Sr7T2fuyyQkl3 z=xY9i*pYDsmmV*1^s)Q{G>sql|#!x3W(B*^hyV5Ls!7nK5s8HZ+(rCbz8( zn#c6CZis6P<_j`$dEQGkKaJia*ZK9tapV&al~6JAWd0^C;MFbgXK)vudD&Bz+qOfO zUdJ!beai_`mZG&LlD4pA+b>$7p@5`D*Ij~1znO+kRI2#(An3kRd%^{R7bB8*y6qOq z5?qU&u@`?F@b6{8qX7?Sftx)Yw+~QdX%3}|3g@UxTVFaYgDLtr3-lkTjbDC>2z?|kgr)5 z+#p1!HkwU}G*Ujfyr4jitt`TnTNZ*VLv3l&nz$b4Knb|6eAMd|;ILb0T)pxD%`)3% zooJwjJNR67<7%?CO%I<3{!CKb^x>UW;d41LT}3&ilMfV;D}y1JF}d(n8JO$33VS18 zL(spW+t{t@x?~z@G(dfstEp3bYmODn`Nq=!60gP3S+s}F@&5@abQ9 zMYhA#$kavg&WqYSln+;tAPau{l#Ljs1+;OU8qyzxg!n)g4}YT1J=}p93jVYs@bwZqgSU0_X)S225=|3Z93hHtAX;RzRW`fkQ(Nwr zo}bsJ^i|$$Jk{Vmd$(h^gBwLA)+e3BdWG5#noL>+BQoa<$zzcRK_A9&j()&pAedcy zt9EW5Pg%ytcu*`OS`-JHgIrdt>N_PDUabuCLw8R1U)W({k0$koOo{M~Y-tHc#>0e5 zpVgs!N$9cXO=;Bm8DjFnNa$ZEnP zJRbF`vc1cyS%J~zA^*HS`)0$iS+X7__$}#b%t8N+1*<4|{O#^qT_Wyzr1X~Ta;O}S z>6-b?{(h#agYBkE3|_gdJF!dTO1v8B&%PJG2-x_##3xNmc-lBLLrP|k3pE-46$eHY z+Z~F?a|ykbFlIOt^?=_OL|>j>p=4nJz{;0#deo%4y#KDR0k-)?hyY;Pb0$@1vS}u% z=kvlRjnM(%`mGXPSHSPrKn9Tl#LCIW`M;LYfLQx@jmST;Dw6@nGPlkTJ>d3bKvW_; z384>A?&`M|;U7r(gtlIHu~T&|#E@ij9Yo4o+Z#zq`{X-*;>L z&=$ZGAmDPO;J4=d{DxZ*1+|w9E6(Eymuh|yfG9!92SW9ehE$+7sZ(6V2YG-V2Db)9 zyfz^F@eamY^N>hGb;zMjdGDxxKl# z;6FDr3oE|BX|wFD`t!mQJDHzp2$dq&r?ZwStpISHL4FZT+OtU5aplbvshvZApJgxc zG(f@t`sxbpC4ki(uZ&vu5w@_-`V@N6SPKE4LWdhQ`A;h=DG=`NCN}VDN2rj$&fZ7_ z$Ag#+Rb0S!wHV?sMHlxdaBwO(bQ_gGqIZ5Ctns^WQH;$4+cX5?s769DTco{ESrgt- zU?l0yaB(ktVUen$DceBn+(lAXM)pj;pd9Al?^-G)o9Jq7(6x0`NWK-Z3W zhG zK5FMuqBCmsNTxdTf#1du9sH zc1Q##6r|}2Xo4T_N8LEL)Rmc!G%by&F{yNCiq9Ofo91Lb^}|~GNwh-qeLKSQ^~hma z-a9!IZk;jUD(s3!L=8_4YE}nz_eA>1a=5i2+*hPS{kK;gBgRQnN|fQst5s=1eTKHD z9h;-bB0eWOdt-aokiud~0V=F)mGG(yGUWGcbpf6drFOQXD z{26#w1k@HC4-PemcfbSs(c`j9WFM&$q0 z#LdNck1~+U?vb}fxgQsrwlpEAX@5zXzLJ_K^<>)nk)k8g!gx;6692^4j5V_+=8R~U z?&k?j)<*!^v~GjX6U5qGx0A20Y-uWalG%{=`1PZca7}IZi!q^7p=-)z9R?rlZyAhw;yrt0bR8w&JtEa+|_FqZy1b)2aCTGhUlfM_p~+!jaWx({5}s_=F1 z9`tlP)|k<7+U?>lPxqA_b^tw<-S!FaV%)IPv6I!G z`8;PEy|FQV5=~sp-auv>ohVw#0ESv|2Ii~QJ@*FZFrmDkNt*I3qb2Bw0a=W{<4z2l z_95?o*KdQF@>qUO$knY{oSZg&?~fKF(Lgn37_u`}mc&b=jC?6s*xt)f+Hy~2q4_z* z-ZM-TIRN@ZrLjyDqo|P+ZM2AG2JJ29R^`xBK3T00r!a`^_XjfckWO)Bk7<)5AsEKm zk2il@lY%CLR1xvWORUrjUnlU*36GZLEald#CkDqLMOl+G^5gPuSl#FKCr5&-dC%c$ zOADP1_WIoTU>EvcVJ+!L7Nyd|GZ_{7jC3W7fIlFpqv-C7`=;{|(-7(V32NEg`w>T_ z!rvto50NNVA04MnQ6A^T&vyOtIpDVBzfMiZd2So_qpIrkU**plON4$?3QI(YQBji) zO6=KirmRi)L;eS=8TY;rht(r;tW1EaQ z0=p2D6^4P-c-R(V-XHW6H97Coh=+tdT^$+Sz{=++GrNL%Qye8vaglUqWPtRwkcwU4 zp0{S#JMF-&RE$?|yqZ6++!4tj0^&h{3h&Rpa_OOeAy*VtJMFZ?o1`E#Lv6c1;M*?0 zk2hSHZRseD!=tJ%(j>VJ^>6!3*5w770F3>}M0!x*xVxqqSy9+hbUIqKJa zLA?pz%DDfNmFbA@Hc}?k1+KLpRKbrNMebaX>O;88BTviZxf54nAhPEf1aClrlKBc~ zF+x8E-idd$)gg0p`hV z%Y&tNeGWCsu1xI#(O*TRDHd+k#L93Y$^(cSnYqe+V&6Vzy*Z*4Al<+XdV)h-n#xz(Y#*(&R zwgL6)M3HQeg*myHu3U{4j4Z#a28)JZ(S2yW==^~59-O7C?x#Za?F#TBkVr*e!M#-F zyh40STw_^6TdjQKAUD^wNxsbDzu)%doDJ`j%EwDZR6&-J?) zd)|5J;_?=9cUrul5w_i9j^%{IRq#Oasi;o{kIlrlnGx}J*0_vQ&W6hxtUef`Yf{51 zW8FH1xt8YBJ211JG8|t`%4^(ZrU}4*mt@Y=6VQI;%Nkas&*6^QJ&|mN4v}E7xs|3g z=IT*mZrj;;Qnw$hLj$Q|gZJKiH<8>C=kmM6#}3zeeM0dk{bSGnb&F_opsd0P7p|zJ zV4RGG)lG-m8oX5>UOUi+?E!9)g|H7=Lg9M4fd#jVX3-(r?qt9{&@qX+wlH1gb^eky z+T6D7^zdWlgtiKG20{|-&b=}6%lTB;X8j>+D)g4;O7Z=KeI{t~Y}EN(X1yAhwqop% zt(k|Wm*uQ#BibNI`np&FZMVo-QcY)4O05)j1zn{C6Ok-nUv1Ze6Cr}*2R{!QlT2k| zJO}%uNzEJvY6Hp5gWN7i5Jbr!V(LAw)71HU^HSe zAR?VD=@v5xwxB^gGs_LrZp$a@f~Oc6?_b}iuyo)UXV!K2y4F-Y z#?~)pawI(c)?i~SZtwn_ibRs(&^pCvbsF5g6JiH^aR~^&Gd4!^3@yZ@slzoz0#z78 zY5gXp9xJ*nOs3gX@|SOu=iJR*>dkyBziLvk@1$HoykL-Jn zAZ54HWx#RScZK4dtc?gSH#4MC9HcjMU|+tF5AVO?8Qe{?&#&52az-rWU}rqIzEsuu z6^462J`le!BhtanjDaP@j6D>ug!oS?^`e%i!4Hy#?K$NT$@@?l1^)9B9ezuGSy3Lz z`{50|;pHW_7D3#*sQzPt!jl!l-nUZ1FyG$M_0A$JZNB|HZO-hu8FkJMCD5PU3;3zH z(H7dYbe##1V|J$aI|;$sEYZ#hp`e>frrk~}lCYZAs~1TD>n2S?yQ&yVqiE>H$kw{Q zo;(R1W!YzgSLGI1%V{sXj@$K)5gU#{$dPQ$@=OGw?EK>doJ9Ud#`tODVJ9q;^+_%N*Y zd>`Pi!`L(zHR&9 z?i%b|!XKo0?vbi!*>MYMJzm*uhmGmMDoX$EbbFrE7<7RkNO<~MKUmD8rqzBU;7|Rm ztI6TtS=-t9V&`_XEPs9;q=y)#edtzvvw>2CGAL%~pma$c*qViqFgUk&+FSA<5!#Dp zxrVU-@srK)HD0TUE?j9S(2J`qG)`K3>E5utbelyCvsJ~uMco19OfwhNgIevl)mwso zFinWqFW=s0ZEml0&g#%S-C{*7mQghA2`fs-s>= zha~Ykq@VvGTBrv;wkn~FM19u~Z-f-hq)lek>Q4s*0FEUp@Tu#s0G!$N1g;jM^&yEZ7RCmsK0vR`0=tWgCV^Ty&<)(%PvGEMqI`hH zBvZRW2Rd*tM901Z*b$b_UP>a?Wg-M=vp88^33D|;L?`*% znFn79)C*ImslS+tZSU_oqDfp!Yexn9ij#V_PpMy z&^1-Y{pAZ0F4H9y(PRXd8w%1eDaK#HNpI|39{HwO=9-^Eq)#5P%Q#T=DVH2PFbR=U z2SB7!I6duM2Z1+6@`XyGYsxFI3XuQUsz493GMqy~G@KgN_-vX%YhVm_a|AnRYk$!X zqjy1Om>RaXM~3CX8EKD&1VKpLSl#79W8%T5!03L-){;IZ(Y9kVDuLO9=1R3K6naL& z8*9YM0}_liYWq7>2|_ArsUZ#XaxfrO89NfEhG!8AvWJ*;PkIghlhbq4hA=xQ`&F&}sKC16# zzk<|;eRFaMs)1A@->j}!XY;~zyT^t5dd2GW&4>re{6C7oA|t9H4TlDOrrWHxB+(M+kSlC z=8W+Ng>)-weJkrzm-HF>P9c68zVuBDhhp1w)SS})XE_pt5n2~kzKTT^ye zR=~1~F7>vl+jo>6-_wsFVn&AI;4xq*N69gd*7VR@!4KH198iF~K*Im8tR%-2$R>g( zx+IYtSIExwAQYD&6O!ZyEu6u$c?62fT z!$|%J*q$$={JSwP!>$MXZPq$8T-5;{TLP$X=vZdj{%LN0YoWP+H_!U3xoNoj4d@xD zJP~;F5UMjmny_zvh33ojjVDX!06X~@sKB6#mQ@FoOD}X36{I-+Ss)DoO)}%f-{FY% z{&r+9;pU2=KsPlqBzo;Q#%}*aiuBLw@9D!tdZA0y7GvPtG93k@^d|+re3Jq7#_7jA zp{@ps7(2-(>@-P6;=3a>3<3yfn%T=KIYb>JR;A`Vn zDoBSeesZF)-WVX>AC$sif?*kgFentcoWV{uJrlv}bbpHwwGD%r_Hn9yl3CQaF1cr} z-TnMecXQ3v)B>l?pPEf%2hY_6=xs)?G5_jqICv|7G4m0Dfdq_KgjQM+>2TS!m_)sb zwTFRft!q5EaTcg?wMxvWaREO$+1H~_E{P~7AOW!Mak^X5PdJ>?v-!t9Rs(7(Gpo2_JrrXvUfa;F$tWFRRL!XfU|j4V zed(S#b8xv=t|;KNzhp}j1^a_!8fG}SN~hs@kI`E1VPa3~WYJQzF@C!USO4ua7K@ZQ za}3`38Nbx2MU4hhBS6t5E<|R;;*wY_t^&TI-7idUXhN463KXKofyvzDLS?U7@CbV^Hu1Ah7u*?g^Id5XeUbFm*spg zV}2W_e1L#eGqvx97%lB>dPvE@Q7y8+V%28{G+iM6HOl4itfeIfY&=UO<4@Y8Orkkw47#Ssx3Y8?6qw|(lhmEc@>G|xL z116ben1s~P*+fA8H@tfFiq=!pV*qS|VU5VnOSqx%8oglWi@wBrC${To(+)nE&G)Ur z9uU{0yhBtbg^6#`D-hey_5AKt8o+UC$7vMef-oD)zN4%Io+3y~z zE#%QPHfN>`{&L;_VPVVD;eA}%cKj0-;qFORz}lu)taHDBu*WL`o3rB8t>djpZmqbr zVqNXx-TVHS@gf8jqF_!T%Km!}b86gv$+S%Un51k-?akSd$`vxeW-21K4o^YMDeh49V42}cevq0>-9m{w3cp!Wh zS}diq1U~5XrB=T4;Z0lO&;8NfkIX8zdC2w#d(tm;b~c`syPU0+v+ZhF5tN;jK}8FR z%GMW%d-jPltcs1Ed>sOVCoBOwWggAtX!P2&ZwiSns@?Tc^fVsq^&?V}uY4fRVV6+d z5)*AZcNI!UindG@&as=rv0-eCej8qv`n=(=zKnF5@jZ819ZSy3_eFfD24U&heXGV) zwnT>7eE%Aje5Z3iu{pUvJ zHM{kD4x8wBzd6wJYS;V{Zw&&$6%!zMQe4YyRn16rJUT3a)a=_Dg*E6lNu995v?$E0 z`g%Qi=yW5FUn$oMJ)YX}O$Ob5H7&fQBcNWl!WcE|kJ063g1hr`?we543Y250Nry$D zOgc-QDlY0;t=QpDA|5a=#lF9S=@hND?fEcrz1Z&EsQfxRFe~(M`|<$9=kjT&P)XVQ14r$%+qgBhK-aDduD=)2O&)anlTAu* z_oTt)vEyx0f(_dTgAzbXoQRT$N*8nY4!X5^PS3+55=nw(^R%2UZltqME@}3T2MY`? z(YI}~EiIXyi#hG?PacLh>vb&^i=o!XXS9-zC*@PfxKBSK85`G|&6QF`UhG>*b>`(J z=1xny>*XtTuJ5W3T%0PCs@==sR%D+{;@Zf-2*z2h-6v2ioB2SJdzI=lQmw=r0(owT zC*&o~u{xU%w}|G=GU<%^P-iP%0gqSitZWEZduFao8_RG3gFE}(a|DLq7|bV{<%2!z zv|G39v?COI)b;%h&r)l3Z`{T7yl)t%t%x?XA&(C%zKom@hKAlTPfPh0*TYP%9CU=n zc{Ng?4AISc`UiLEG4~m%=$&z14>G_C#}>9cvPCje&K& ziJ)mu(ld2)ot%8&?Y=`J z;Tc=)+V`|+F$rD9aF>sUo!9o7vvPX6v-JK)59C_X44*+EVPi`v`Hv$Vnav2g7hyBs z=xtew*KFH%LF0j9?y}r#>uf)qI2t^h3)a_3ysS6|pPNs8c7kf%8y{&(W)|e?ySoG) zs}LilETqS;i``zGzqjg@8*Lze81DE*{G=Yz-SH;XY`P?nhQPaE+h;CPT##?)>3eqY zTa%MIwxAcJdP_zSiEueOzXK}r_PDw|+3@y!9+_}O>?F{AS?LJeTnNhAc;7Dw8JW}d z;^}CM;?U4Kka({qJ#ZX$1zQG_X&K$n5p2>N=)W>ON`Fkj*FNU&w;%6|T$%pd*bjw% zd)9<^`}pEXCo5mUaWQ_dL3lpQ>b;QS{^}qq&<0SD5hUC)LGQ4M`pFajSv(5?pvT7`?Vy$P z@&_5Yiu3PUpDZ<$H&}57V$qAy$Lp&C?9Y$NjKdKLw?WXTKXebr)h>r+dFWy#AT{sonQ@ zpL8+9iw@fP-ABG$2IrfFRfYt-V!hpL2+2A`poFPDrb~MaT49-;8BIS_JRmaz#w1$_$3!As^^od2JCnC`{hU zs?_~3IUowkL&c>olu9c%GV-G?*3<~d}2OnIb6vS%OH24~bZ+F$n%Y(Zd!ZJvCu zPnyu?>&XkYrzC9)$e$D;407j=WRf#uW>{@p#1A>&c{-n;liFu_F~JGfljdi6zk_Wg zanJD*f&iN8(KDfUS6%Ka?u8;F%~Gm|v_l+b-2E1-0azp$FQwYJh*1K63=V1qVg=*y}a8Ar;G zmFe4o1j~<4(yA+=ks5?SEOB&Ne?}JsV+F!&K{fm?b1TX#+DC&q<4YAmxlx1FtOP6j z-UO2e3-*vS&9Oa|+K;!lXEsAR{kggAKbnZ;b#e;P!=T0UQjf>KJ!?DL8mJoE;^y!? z-7W+1znS{WUKd;v*fl`Y96Ge1w3cz&^9&t`(ds zf%J_XL(L-=j~@7mjU@>p+AvYz9LNEz4IZ>Hmcur6_vG#*5siZ@)=v}5oTTgm^6+B! z9p9))@v}}=I z-NhP!G$-rI?pt@O61C!=He7k8hIq8{LlKb|#6bcY5Rf7I_54q{UKvqz8VjUPkzR!x zc5)0uXbCGqu+wIKymfFNjNkEYPRw^Xad$Z6ug?HcS?Ka(AzM?5mXSY6k4k4rE{ou| zhpE|7A!zC|_-=9tE3@~d7?I3&c@kp8iz`r_Qdu5eu2Q-twFx!&9;}bFQ+)_`am1}W zbP=SGXfX2KFU>Fy|VlXv~DdF;Vxfo_}l!DJ*iz8Cuy^(pcX zyfJ0ywwGjv9+~<^b{hCPp@~c`j~!-Khq~|le8l2?n*MxV;)wjNk#Z@H!SWOGiSue2~sgmq7y6hAdOUcd2zVi6$c=- z2*%=c8OkL&J$qBl8|_!kAE6qO4K15f5y^!&QJ{h58v*(6qfnrI*daJ7Vgfvy=f}6 z;YxmczwTD{*|Jts&hZJ*-7Z5rihzQI44?HEe-}8X$|l)ggZlI6Alae+$?i8_uqQ>V z(~gVrn*NQ`t?Fb0ZETz%OYlE(ds=IHw z=q#Bn=lt$=9@Hu=r{HkPbuN95rW(JtX-iv7Rt=?<@;enm7ll1t8bIQSQ`~PYsmx>j zLZB=&@&A?orkoO&B_Nri^8Xb6!7M{%mrEw|AA#jhu~*mUorZ}dPKqx4N(|}&;C^Mb z_PLee0!`wsu+ew3vfS&Us&lbtZj$C?+R)mqW8z1CmhOEHq{70;blJF4%dIegMf-1? z%d%hbigN}GW+$Y-w{^~M{J{W5x+dFytqSgJ6rS-RsXotMvLsoqeiq}2`>AYP*Gp~b zk=v!^&_x)pg>6|uWxoo&>2}?fW*r=NJ}oSOY_BX+T%}MrTg6jI!YJ^Q9We#z#F`jf z5DZb7l0UrB5n(L4*YAy@Ya=L|&8wml3@m*^$QUt5e}3}x+94jmTO<(^64Cx?};lZY9l&l?+=q@NDD(FxmoR|CjBNuS2SE)YLvN#i+nmjh4jCZW0dX!wJsqwelyy;=OV4 zjf_N;5aI2zu1D)VE<}|wCsU)4h_{Vt)BNsKH35!%$+Vp;J+Mhw2g;5PFJuKB!I<^T z&1S}pCM3_G$aVq4Sm`SS$PyoYjlQz19pcC&{RPXGxF$OSa5oysRi(B}B%0;i;atD~ z`u(?GNv0<2-5t=^ah-h>P%H{8cmTCxPR-!@S`@JPLe9;8$}TG?%lwl`l>koBM{H2_ z9rhrDKjhZ+k7!W>1=2}kLC7s4Rf;8-4k%X<>78H41Z@<+En5jO`Z)qRUK*-OH5U_} zxxmv@s4gu`!b(pqjCyPUDXPm#iN6cA1cWy8kps;)dEF3D4xadZONz+oJ~Ds@o4g|6 zSI$71EnZcyNTA;quNE>uB5`}4L`P4Vyr=7)0=T!u>kOc^efOvI^AG}$fOmvu1M z_W@PT-NUz#9Sl*b458g0&)4m{%X}M@sAc6JuT6EO6Z2R`_;cv{}MXBnOL<*z_q>bt6aJiAY&_6`4HXZFl?1VmPw2 zA1Y6DUB&n?^7rBSc>*83T9XhPlJWiS0tx9rQOcF3SUjCpq)A3mP#&+;-NN}Aj*Qap zITS77q}a~=oi`UJH{Vj;-4cg{JF`qEqY}3tsD?41a@6LlF*L}@!rR#OUfR)GN{Qj7 zonvqA)P>KwKlBMv&I1bs8~lz5&dL3M{a3)MX>fpfZOm|(oZSEG!@~W)J}lh-@nHdD z1qQ+gU;ww@2nm4Ydmx1+V;7{q^bo?41AX>+fk5BAfBco{j0ixf1JGsNAUq|2m4o&F z2bwO<`V*(uj3)m0j@8MrO@$pjKnf-*6a*PoA5GE|O^l#j+gXRcyt04ivdm97CT-7v zj--=$*)?}1@Y@q*B>#N#>1F-N7O8!4m3!#DZ)i=i+1;FP)9?N8<~G;s&GoLsS#rv2 zYwxS=%Iaf-TLz%g(UXBnzz7Prr9DM@dNu++=%PVjADBjn zK?3FhY$3#;BCM>U7&G?x*($%XhB&oog2<50HK;08|*UuS@3l zP>-y;c_C&?*yq4I0RoDh_Y{()AoY^ufzoNLt|3W8FYGr@w-E~zOW zBXi80b7j4Lrd~YOVR346EP%q*_rqCXW*Kd%5r8N}I6s}t#npGzq(d*nzdpT{%C;Y_ z;1zU&_o-Lf#w-hAj5muCo9-JG-pIFSDfPu z)z2Svm|Tsd4}r-ynrKMVBRm&6)YmKdwH?hAWjxkk02ITRi{eKi0=^joZ{z{9FT%$+ zhdq(T3EnvU`51dmCuT;W;X$PH@W=fv#rzH6g>X@gs>ky#IQTrsIooT~BSI;K*X5j| z1Uzm$;#Xm{T%vVt3ee#Sh-1g0;H6nHGYeojFL5Qwf$D5g^oLl;Ia*1_;smBQw-%X? z$XU290DXrj=6VURNVhFfszE)A{9_=SEXoB04|n|}DPCT3{d~PhplS)EII9qqM2dNS z4^3bdr+E6;d|Yi%;B#l_6i{=j5PG|$kcs}c=@A&5nPvcZ&ZI)kCWdiUAUJxs#y0z5Ht4t>cD}R)MaV=QQQV0XfDRUfnjE-2Zio7D@mE z-J`1K$V3Pm-j`9TGFF62X2mTZ0iU3&w(1ocg~Eh?J7Un z;R7?uU%6c00f>Ao24d6tSHb*2s7d~^cQ04KTy4RK@EmiL8V<~luh0?Ewm^Xj9yNeV zlwyyi(C{wVHC}+$Bfn!on2JLL;x;?D_sQuO1+p(r`8_9){cSt}bLo!a|MErT93mhc zdDhgte-iaX!e{W{f^#X8@FGAdMCx>Ej#3LH=5vaHbH%R9Iz-ftc2IwryUN|Fk3U6U z)^lumig5E+?{;H`{K3=i-Kk{c0)!{WkOR8}YLa8q*J20LCgAnXHu$lrx14*yk2P97rNS-_lO&}U2h9OA1ccR3=1`vWe z*9m0Q_xms@5h_AeDpAnU2OAy~A&(#Qk!koJ66Cg1x*jw%drQnjS`nZGPBc47Zm(e4 z4N)qlT(JEFktd^?;&`Fyu(UlZtV*`B)V|2V7XezWN!_?0s;V8$|YbtSO5>HB`L zWa$5ZHF16Ux@OpwCl4L(wi-6%`}~+qal1Il#0qo8g1Pq8v&X-+wl;MUee}8~{^|$k33y$4Z5Q15c)A1t&#rh$Wm=~u_jCzwd@pYNUj==uOS|0!SriX)4JY|x z8qpR*>s*`w&mIEuPyX$O`0-0xExCSC*i4kK;g)+JvtWBO+TAQ4PcJx62RG~g*(Lk; zCsP;7p#ns$p~M9y;PR@0aRbqQkWfOferEv&P)Ond?QVGC0KYN&yqpQZz<=x;Hy7SS zlZz#N3aaq6zii7rp7YRw&DwbQ{POa3t3^&ikd!u@3h?)Y=zZO;0CkYE?VB)jrYn>XjM7kn`#$!Y4MM5k307!0u<$gspM#o@4R z%v&=|3BW7FA2Yu%P|Np|66+)^(85+kXbx7#s-iSfxc65rzUkMmq9#i=#%_chaptKI zk_0@WG6{HhQt=(s`8ioL+~I*eiC+)Z=sM)=U>H%vM*)zfqIg*|%AUa_v9lIxf8d~a zRPhBQzTxu5ynPr6LsnRt(LsgHHpve~BH_ob4acNDVmR;lWXD8WsZWajo>xpZ9wanC z=&95#4~^^)7;fT*Bn#40bt{x~`%)#!4LWJ9s9j7mlwqiIzQ`@a#1*0DrmkA3u}8Ve zs&k&I0TyEAXi1dCDlu5g`%g+vS-(*^t8?C}EyS!p5mK3w>ZIOX`xWzF$RvwszZ?zY z7l1|79DOACi0&~Aqy@NqV|fvijF~L5?I<)lz@8VP<8912hGmEq-md(43R{I?up(v2 zR#2=QG%_C+uiP4kn{gJAC<#`7!c}Ly$75320mx0j-`X>i6RU7G@D|-Py$`!5={ zbPac5!WE{~Q*|m->>w^=`xI}5HD*UR6&r{ZP-Q9PRS_E={lQl7AhN465X+XGkV zVEJJFerx?oGWNEpy{tZ{Xc`mtci1i4m<~$9I?@2xQ8L)a%Uq4%``evWz-mr*Y<<}< zU2LS&I`!7Dq?q2ZsF=tWPqX;A-7N3W3+^HzYgJqo$!*3_&(mx6T17jb!BJ_J|GM-}+`v3)Fl zJz3al@g2@-hgGJ92W7x298lg^f(F3Hku zHdvkB&J#G+#SsYGOOwm8FDVH|E(v8$4@J;F<8W#+7l}VUWy=v>3DAF8*H*1-J<04T zOKrL&G8%K6D038fH?e?nep?@;>mq@#e?}iU{FeTZy|V6aBV4nk^re{^LRwo(1tP3P z+kzj9JDFL5#5*5RW`SB_Y`a$uUlylz$nNC6yBsl^Yr-p}gCt)oPh2N6g*eoxI=>2D z7Ti6aoIXZeBBAai6>y@i&Ah;=DVRgNW2ITr)lK)JK)CzTo4=nqE?*y7ug!}x_r>Zq zLWc&+f*6~08ARH@0GoLv&sp;sX{mn~Lyz62Om2O_-GqH5lcjVRu#0hc=5)y!C4f>D$FjTOU5uc-{DHnd3I`C0{GF0W!AC!%NDkRrlw!D z$c6=<&Ag~r*A;#a_tX2~)}cl_vd|W~Dmz(#t0uJ+cAPF~AS(??P=RR9Z|=f0%$~?c zl*j|ZrkzA_7856%qa=Bh{`V`AvcJP1-_*mRYGDo@|08plS1+rFw|}$TSPN$*0{+Kb zYN6^x7(YCnA3z%JY*)`*G(N5(vVl^YxmOpm4Id#NLDn(Ep^TZ6kUm(j!tmFc+($p_ zvVY|qWn+qdJX85cA8F8TpRK}*Y#NzvrU0GC=y$g|NGxr4ZetZu%&`%hzdzewmlcdJ z>*dLLVCCcG$XzrTTMess6e22CH=u`f@>3qk2pWw$NdQafSGZfF-iNh}MI>eA+oGm! zR(a4(=>ghr1_{arkM#Y#(B4To3g3E7Gfu3WdB>af^6Y6|A4ku0>N>_*v*SxQ)llS8 zTYQL&GQLrx>UfhG3*4uPc=?RFZ}8A0iojYlOxBQgLj;Lm?_!T*?)=6sD0jQp7O4J< zk+~a!IR;pu;e}V~5dKl~*5}My+!!DfW?YlMma?W@J_lADys)mYGBiFH<2C*!efoZP z|Ef3q^5SsmF#NJ#SkUD&ulL|D2yQoa`Jg&lWqGtmL0X|aefxXUL(_TcU}+oKEclos%0Xde2=eKn5K1=mU)1gZ8 z_+l!iaJ=f{s9|(V7XS<50eW0#Nwhzhch&o;g*Slbvvx3&3 z5R^AKYYh?JXU3m{u&aGUOOec@zqEAu6@?k7vtC*@co%p>@de&jMk$(4wx;O$Zdt5l z5OV=`8I>rm4y}lG`c;*y$YRx2^)Uv>Yj*~X_GbA}&3kTNypQtBsPqK1LRK8l-j?=) z(SLYOtn=6C%oq82Ny{DtL>=@Xjz@Kbxga4PshsDQ@_H@!K6wpJK(VJZIctPh!)0IP z&BwyCZ8}(479B-Lv8V;{;%CDzvCl0^uzV_b3u&BOY>USG1hP0ETCK&K#r5VR8QnwM z$+aAoO8M4Ah`4nAonm^5^YHS6U%FY%kMjzf-ZuepPH(Zf6bp-@;%I1KSTP#339!5)W4LU8b+*> z2XAhKw9>SGNxr{h8g#z#JcUntDkYsAit*%4`xXwV7;DjX^to?Exptu#XYqTj3u&Ts z#BTFu_mUFWT;8X7a;r2b0{zG3L1fw&4h(v6) zl9PVnPP8+xD!IIFwgQ^{b6HiiJ?#@& z!WJ6ieqqeTH3gdh?ES^4gEOw9VTj=`lmwI>ZC{|^s*wFGq_`0}Gu|iib?$ zz&+l06@X%||3V*MLE-~%-gupWvTq=*zlRDB0hs>IYY7~913gCf!D|O}_JyGX_I>dB z0YBeCx7dDyjF{;kymYB3d;p-(C&-5B3l8@U7}L&%0?6KoC+EZ(*gC2?wk%TfeYdl2 zL?@AjWD?S%Q9(sv>zsqNhLG{xnL0XpIX%s&uIJC7*bS_tRlVS`BU)Q})N4O)3f|ko z8T_KyxvSAQN$`PWwAUf>IrU!vZkc@j)Y@}YgH_`Q)|Gm9YI8rAku_w zkM5KX>9t>7emE_48|vUjxfG`bXFQ7jPP09Q<-G?8zF%C9`QWebIDEG8Do?A;KO08+ z3YM6COsjlzo~(QBL-D9XVvskR93fsmN@1~3b$@X zsFFrcDpckw29qS82>3Y*iYpKQQ0r($ct|;2WdH6vIyv15d!iYFT)nE-!x_HZpo8~G z%WWQ@31-B2smfpc&V@hPpB>TLG^l{9tRSHU6IuhIZJQ@}sKCna2q3W98N+H9)OJ_c zWltsu*+vy(07|OB5$Hv1`%?@;oFR3=GZ_=Mk+gz%vydoKXhBB?1W8cJj1GwNZ17kd z2WojRJEW%e%bJ#~I_ffIn=TgQ8m5RE>hf-XCo>RsLoL%07dt;IM;!nHWAoSX51=-iBfq-We^Yr5s!p&wFalxbk^T$x+qRqV$#74S)s?}tD z*fqp1fp+3Gp$ulr8j!j|@IUaQ7{-f*nn_lAvEg0OE3tb zkSB3^b8YC?z-dYNB!JH_4k&xIP$W0?Olb0HT2466R)#czZ4WT&l4p5nZ47D?$*xC) zTWXz}I1uv88&1_#23L$mvC>F`Ba>Yk~5cXd!=K(AtB81J**K5MZOi$Ygt6JTZ|JHRM6q zX?hN0M(Rv+HN9osR@w1t7)i zzlxxO61C;EJ(1%J@X*9T#8(_eM!FQuB#8#e{m>^-E9GJY( zg!_EbZwX+(Zjz~i;MASOWqFpK@sv7H+;?C|IEz7f&!|bx1hAPXRv;WJN8ZlsB04HN zpD1b^gb!rU@jpJ3Z>JBI0Rz?g*CnTkvve zF61r&=IaWr5IEScNK~XOq;ROxG5rDAEId(KVQ|NIrmJv6f7H-n-D!wH7n$y8sLR;w zdeh=lzScJSG2*%Vy#&Ebn7M0@{$M$Sa}v z?-;muxYElYXlUs{#j+8yXq%-Y|H+8J0=F5ox;Ie|^ZYiP-i07Mg&SK;9YF*>13=fC zt`|bBAb|14PFDpD6QHLEH}ZWMe2Rv%^K|jm-*SC^TK4po(VOipFn>$n`IA z5EoV%1Xkx`hK2kgi;2L9_T7}#8Xd%j7~%sK_`|%C78YPeht9ZMV7cspdPp?GhRF9F z^j>Fl|IpKeRv`2=M~s3Nf;aY8J1RLaeuUUh%zhND8k{ju6@A{xjs*Wswn_=`MUlsB zq?R*kXJi&L%zDQ3W!mhRdRP#eeN@!2di?N=F;LuRXE>t{#FldIdZ1#xG4-^-ox^Iz z0igH8Pgj696`o|~t$BlX4(lBF1)5J9BL?(HFGzNSQnrL9O~@}XQ1>gD-Xr29CP=x< z`G~Wo)l=cjFyI;Gz_|O$qO=kthqdKkf7W8}(^F!C5XV`{pr#wv9zRZChT2DrW~n1h zPN?s)ptL}R?o|yIAt!x)YV^ zyB3eJAghtUP{6@;2|+B5_M$z70rP>?$h{8a^D)(v2Eu%(^m-Qx5kgV_xqlzl4+Pw` z5T`$21tWT4t-ah|jF*!Dnzm$7BA_xtvMGKmXY_Djp_Nhe$86I?gX+nA5Vt(wN?==E;spV-Pez@H zEgKxrgndLNRfPY9HWFK^aRaD_0<(*Qv_XRt;SO`gby#}~ft)~6V$!M$7c}az8h?R0 zgibc7A1@w?4<{zp&&%Q3OH8P!s!AUMh?N}cz~H$H%?lg}@c0YOomD{{qK4=~behe3 znhNSh2$X+>z(0lzg_9~VRn}q)5++)>a)0+RkQol=BL1iH4FDS?^Jd4t=f}Eg{&5)c zA2NW3Wubfv84Biqw1CW7Wed27O%aS)Acbwyg~ETMkQ#>rm5PR2vZhXUf=xZ z1R#%I79_JQLb%FRuFp<%YhS7W1pg3*E8V{F-T%hyB2W?ys=+_lMA$UHJ zn}pu$re}e%Y$H(^*U>gdE7<$(mErw{=}&GfqpyLJe=n~e1c&P3_mm?eYw;uGBRBZp zBVL&;6t6!|-}Md845KoxrW#bFg3%)OOtw^)o40&lC$9WqZXQe9yE~jFiS)M~PxZDP zh&WO7++GNdEXxHe=I&VdovvDY+UBw~0G2;8uIBFeZb)r6-~D~DIk%jE&#vPU52~x9 z6+pnc7xvKvmf)xFDFp*!gTR5b+Jk9!a8VAg@@#YI{&D)FNw&!2`!Q@lLw`SAuW^| zK_lOHz?N7F`x+d(c|K(bcsTRea?mU6jCI)Dz4px&XjB=hr`egXs^L|f1@v7e|9*rN z{MfxB|GZr<7`>Q-D0v_ruT+3I%(y~%%$hMi>U#ZActpvYb9!_6zQNUbiH5}HB$CVl zZT=nO+McZP3{7V1m##N1u7LVUVn>$x=u}+O59ofCNKeYYcLgO~2-Ck01d?a6vHMCZ zPsC2pQT&aKYq=P)rzCX+6#h~h zimdw+dOCqu>6gP0Tg9qLL0LOdWU{|4{3uy2CMBo62Q({P7D+E%iSpLmz^=RI(yH;r zhP{%nw!1^^*3ze>H|wspBx^+(6HXX+4rPE2DT6aFMvFOe&9w)vNdSt!Z_>n@BQHxG z2ea~NG(BgIg}dn3`_tUc^F$-r~y>p543G;==00p8k!KLDc@d*sKY0lv5 zEy)AY_RK>}{R58w`-BhC^;MVOpeD{lBrAo55T$veH!Nuk+;CRSI(Wx-QCcQw!k8Hw~$WeSd=ZE>Pw&Apwr<4 z^OoYXTnjsQm13h*9f=v`lU)><pz~a;A=F3|G(IaU`X5HDEswI{k}#P2+Pp6mFcl09sf^(g1rf zw>i8=)xFL8&e#LJ$eC9bfviO%-!sWSz2*%~B?kRAwx^V%r`C2+Ws}zL3?cvrAGG3y zVe-<{w|kr)HuPcw`K1n{1$!@nku+`xjne$~v~|)S%K!k|An-4_SG|lYqkUG3GuhT1 z_<~Ae{91qU;8D0oxpO9*~tyw0t+|TZAz|M!izU$8nto<3&R3||R!*wrd zR{=N$p7xxDWzdbYHzr*E$363|{WnQjy~chC zP>?daSffQw;>W!d7c#y!d0ECA*?1U2Ljk(ZMgUdE!<-dk=~99xk8)e%wNY^6yvK59 z-ZilQycs=m5is_v?XL}~X74cF&N{H05U`9&aWd9 zZ@ao>Ky&7^@xp{u9ld!slpu>ztHY05r}|m-C*9-pfYN`lzb-buLo16?}DR;j-VfKREQ%J3J4`|*Zpd!AwvH8Nj4yvEbd-kYUvII71*d% zu0A2z`CK;~MmCg-69D*coKA&YWJ6?7oX)MZaH$Wf4}Wf{vC5_1%tB2$ZkS0T1}^BH zP_cp(IXaqFe*bq*Pmd>G*!L=N;JCAW4nH{TA9l|@S1Yig>$``?zA+!8x2IR4a5jaM zl3#)v#(?7Q5oA&mExX36iZBNmONn?Q{y&D{S4Q?NFhu~55I`F&K4LH;U^EsV3t))S zbpX){N0NrkrYggORT%*g!h_}n`+Q^cMLYG|ierhNy>1D}&ka9LcUUZCC`@m^IvEYC z>eMUh=SwkO$zR8$z__LXD#j4+Oj}iCOo%Rv6A_ffFNmU>Gr`~G>@FI$l|cLX-j>!P zKr0mB4;>3cXeS%%6A?QG{b4IKH2@T}n5;zfa;sfN9C~>%LTe*C2~O*onV5Km_s7+v6;ja1;!+~%}%^hc`R(kYD7Xs(1>e_mS-UcX#pR{KB-4e44}+PeQL~1 z%4gmTcDUhCg~r8P;CwDmG^0anHGMjZUFw)T5K6ns4Z+5APvq){+;LAxxY-0N*&#Nx zjrE?0ot@q=I}*C{gs~ZqOc4j;{^DTB|81ccy8bSQhzrnCDv*lQ5;@eJt8*|Wdcw}? z?(_nTxjrgpf6o*k^%pM(p6Hg%)64huMq>0*AK)KFB1@^OlRk%wg=t%4nFnN+d*;+;l zgm##(jaONk3ieCd^}FN8+5^@hT4PH8Ne`JP&t_ zGHWIXTWU|1$G0e&_J8DGiKb1I9C39G`(2*BE)%BRg>vtD3N$KH&P?A(HVK{Ex+Hk_ zHOzc<5vc_XbQ^TPtl^^3c~02Vf9P$Y`-DWO>|&)&C65k>{v_v)e%eKRM=7c3X}LP!)f8nk%izZ za|)J|$6vPm#NH~!-;_6}N-kEa*oUZl++qc|VP(Bk2kuHMOKkcJ(@O4mt4kq=61ZqL zmFC-yc!W_)=E*1YcMa81SmHl{o49;LfaUC>#Y)@;hPs^E(grE>Bg{YO90I!qUn|{M zlR9#9_?iaXk9F%%rlNbZQ42j)4cO)MrAQSiBXWkWsTi(SouV^cwnMu9=p{a~DVJs) zDAM}gVJD`}tn)%@KugXDsIkPd^>RGX8kH8erHYN03k96tcMc<)xNl^zm|=Pz0S>(= z%KbGm)`KrJu;U_xk*aZlPiu`YMz^N3Ycr>0gU?viQ;T~Gl8U^)zkBn73qVfUZxD)I zMYoKtaBx|^3GNGBulPTbo1;*qUDVaRQWpo{zhk9M7=%Lf(n z_12%15k%%p{RK+ix!^S5*2{F^+)K6JPW0=_w)Wh54IOUrm!|6umrLk-z5 zk*A9gK%YILHP!Il;A}Dr+Zw>oHilRQPuh822=9oqo&RzilV3pC{?v_LO@AovJH+hV za7<+oF?UWg%+c)$xp679L(7~TWocs}ZDB!xF=%do>!QEq$fdXCILEMP9M64HOS_aZ@XN#2`*L@+W*GiBiwHtpoL9AI$xpTzemRc!7Jg=N&B(kI z6V$pO;eA?Yyh#*Bz4Yz$Ge)?koPf2_{SLTTS9wR!Kk7N6_Luy#`o{QNoXgh(!eDzj zPFq+-Fnd*9Cx+;GuTH@I@0|S+iS_yCBNo}zJAy}R;=uF3fa+chWnWdqmB5~u1Vp}Y zv!_RorIU!DIE$6#GL5O1mB90CY&rZsJ8qkV$D#;`sylJ<$a7+RtF8t%EGPq7&>k^| zUE!z-9`};7iIYUv?=F>osG?DbS9mM&XZKDAC!Wpf9bK8`h!H?46txl*n?MNWSFj+v z!bWNz*_|b^4Fz!rEHLa|xQYy*2;72nGd}R}CHvtS#*dEi9cw6<2 znSceZ8irGP&BJMdDe<%QCEukV#CA}RwpoF{Nl2p?YSY>^%+6<*(kgg{5Kk-HY~1@! z=!b8VG-Ed=GnN4DKUCF^vA8#C5sHTZ?%K}`SP5*(1?{m{mOb|dT8FX8m!Bweh6wAN zLQm`ju_#-^_{?`orKS%*^8Q}v_cSUQ`tof+_nZwF*6>51O>X2u1ngCB2}5pgw6uSD zdRQ<~ip!U%43G`d%eqF`yxt--13GyP==%}skozhko3R2uXb}(t5plro!gobZs(Hkq zM78jX_82k!Zq;AbCcPwJnma=iHs^nKadS>^pFJL0yu$v-$zs}o+I_CBjiwK=jb)ub zOUb%oH`p+KMc=>P#6cnRSvTjR5Z1|0Ej1KfR|~w$43y6fkN+;#qQE&!&yD+I;}=G1 zqSG{(@9Y;5E6Q0zaaATj>*w86yrCdbsUR}bCm9mKXS%@EF+YN~oEm2sx~4aCQ@htM z#5)pW4SYCk+E}}I#hb+f)SD*a{8Au0As;c|kT=mw;!KHz@G$yUhM-7J1Xl=w0~`Dq zFKcUwZYgNBu{KZL6mh$J!aJr57wTQUMXJe%it2#u+*ucFL7dot9u9zBiA@2( zM13N*jIxDj6^a)!?3I5oVWQHM+B;xxJt1RXiD%DrjkQD5Sx>2q%c9Jcg;T`TrXp9(>6eyX zWKtb1h+U>jt|Pp(u`421-PoZ#o>dEw;A$VYR-&WKCctWT`NAu4 zcddCFJ?Rew!KJtQlNLfia)7H?gQKk1|Hww zd?zjaU`_gPS`CQV5?T7m^_g49)HEpdQ)%BvfG!xSE;p50EC+YV&%WjvE_+h|Fye(c zpzsnb25=CA?|+mVFfQN?1_dY-0T;`E(c4@s|8+{`VgV+0^6LP9V1l%p4GvghV6HC? z6fldF&kYzs!iNUD-V-AL@{{q|0BuP@iVeu73lCf;<1+%Hl7Y0F*bxzYNDxIf3($fb zw8lvf#u#v9bbM z>#4p{(YG!HiT@z>iW{&spzb;1l!gFLcL&XVSw0l|H_bKSYz!&DQ$dYrX2zGB?Eu)6 zMcRpNs-Q;Z$q8c^F|hqQ4bNz@Ho_szq}I@xU{Ejp^!y?iHZ z^85OB(T>r<7YypNwxp|97;$v|UDuBR`Q5kw9LUGu9zrQTa1yDBo00iF7 z6p~Vt=w4Ul zVG7{&DoZ6j=PCw*3NfV)J9|m*DaicM&u>PQVHYBV^f&dB2i!`=%(hb|wJ2o&s?+{? z;fF1W9?VGUJ6TaLw>Yjy{saKZ?Rr&yz1;aC(~!wly)uFYq!%)MBjE)(Ej-#Fcy{d()M--`AKAijxn*>%e>A(+q@hA~t=a^f> z2#^<=h}qAZzZ+}aAMZ=2c$QQPD>Pht&xt=FIw`%MLjZfOin-cD5|4q2V)%`8Zq2T_={B>8g~8Oz+LhzK`1T+G4H2xG`us%;u$H8`ui5q1T;M&W-HpXDmAm ze*++}a4k!aAKwJ^kzf$JhtcjKfyO ze56~;s`Zv+WWzAL8uUY^W zq;MW*BljvQ8P7d^W*daBXeJEJ88A(aUU3Jr**96zh?;P2G2J`v)b6kHySxUPZe%Ee zDDRM`lt&RJkiid}zA`*0)XP3hY3OO&UttCtaRcZ>aKx_{(^jfmnyAG3?Hu-$p?^Nx z!=Wh{CDaLLE4q=0=~W(Jo_bcZ%l!pZT8!tRp$2)Bgm%j!vDH}p(tILVJv;i&H}#A7 zTz#4mqinC@MQcG_z2le8rbDaORUe&9mRVr_k)D#??t#@ zdfBYOw`q&)YL}5?%Q<%Pv1(LY&b;3z-}vSVT1peW`8DOo)|L1hKt6RT!yS5nMr1m{ zt*LI{ufR4%1B!2lho&MN9vALIn`&GlLd7s2X`!dgtp=!Rulp_Ap#=*GZGH*!Jh2Fj zslU4&+O&p7yrvN5{&IX!AJ}GLR&CVrOZ5=HuXq^G&yOt2etfsP>FhHyHE^3b%=%MJ z_=ae%H&(&VahUQr{g|xtHljZZa9s@D2rq7tki^yAI`GMpr~jBBT6$ch{U8sUr7pFy zdaa(SeqS#LYEz$`d?1ijue6ogBV6`(=F)cIoc8L=jwLk0zsTYhKPMjJ5$*i$mlu~e zJi?!^qcF=yDE#Z@3rb(UOnuEF!ea1cj%AtA8vjAgn>cn7Eepa9ua` z(r%0LN_UH{FH;aK*NYWg3hOJ^*yz_W9&tg%&IhGDe}lOOofGKPZe!Cw<0x6~KaVHc z)-_o5xa`<3_pj}j#Wtw->@f=C1x)4<24Lw-5ScLczK#`Ad(>Hx?Ygah+i;1>i+)=5 zA~E3WDC)t*|81N&0SKno6Er_O*dJ_!aeoi^=AHR4aZQUGrT1{i+>W(k&ufy$m%v1m z<>>+jf^q8(8Mg0?nsy=@ENV?Ta0;GD1i=`~cgdmN>2@Uj;%F9nTDkF58WCGKLKGIV z;J4^}tB^jPV0!HS{MZ>Q-MfFdJ`{wWxH-E&c>&V3KR3&a1ImWuZf1w*$PWge?^q|_ zoS};4n!T$Jf-+OJKW$BBce-4i-!%p~OT%a(Vhw5xzds$$KY8B#DSr^XrkgKYj<)&* zX&9UBDptn-gCOFt#V3)REJdDn$y?4d#;`0_z2b0JnXNn}IkwP`eK$yoOH zWliG!sWOc^`}6L}WSJVsD>z5>G#(V^PHR1i{lrlI_~2UshMGAS>AVcs%_rMR3lU_i zUVMS_@~1%?bZaFU&NDy|f_Af{08kBA*FljS+lVSopek;Tf+a}k7!0#=W{%~Ta;za% z<2`&4Ny|?649;^VZ~1GxEHNxEGF=Q8N|AP95iU9!NLUWP5TdH&QTdIYUlt4Gm>@0D z`rKS8J_lM!Lnxb|0F6UHtLPFk&_@6N*a=wvVGjw9p5`_PUuD6cMBIx>urCYj@PU#LWIwU2fySuxV4(X7K4ru|A?(R-0 z=|)-_1>e>Cem>9h`{Vsd* z>f^v>dmN6y;PH`(z(zsH<<^ulp5(Gd8)KQVm5jkWak8paHtc}`@;65MB>}dM^z5Vc zcM$j2`HKv_2clR40uI6?sJVM|C6_Zd)x6H3^ z-@tV^^TUO?@yro8b98h3HRwTK_D)mc~^qr&pl^>zl#r-9>i!$b&Sx?`y$M7nGJrW5rIlxZ06Q z$&v7$LGN%3MQzsr={tdM+485!_kPwqiqTrD$_E9s1yfr(XlA{|3e<#Iyp<|n-vS#G zZ}n#zNM54N0u-TqJPAXjsI;W>t4VUlh&q+l@fbdq7e&@W>}EL1Nz3?CwrERD1j)$@ z*{~4>^NHLrw=NGO*}AES7e7;a6qPC|s}Do=BNX#)7J z$vWl7VHMR*f7&TjJ^t_-_~yC~?U|+@%LN{XJ5CNn0tQLduJc>I;ko7MTB!ROx%}S) zm4qmn%S{(&P1Z?pcL8&QJnDwGm5pmF)rODVlWOISd&dqLHb1moBV?#hc#I+|yfSF& z=eTxQ2>4f!OB+gH%j0z=ScVnp@89t~+0#>oEX4uDgYE}p%o#6qx^-3h2{c6}7|9Bz zjHerTEgR~AYa?B2FWhP;7qN7=%LE4Mu_|mrDW8kNaX-V6FnPxTq~UZ9Jfm&Hi|tM< z0}h(sNbmA4eTdz~ZBTJm(G^=$#;1=}`7BtAGQXl+l5zzgd;Hq8njPauypk`C&ic~D zrW*?Vk8v_^{2$}2Ipd;06X4?f4`H0&t;^ZVhUMnvb^#MPrts2oAkMN#01`Yx4^&(t2PW=3gJR~PT^ln!E7Hm1kY z<2xt?`%Yr-_35q2>t}9JQA2$aH59&q(ru)?x{*Dm3Le1Wkk8b zo>kW_f+M2EeP=P%Fzbv57|3IvL8og~cOi>ZAvjskS8sMJT(4?A8a@kqGisX&Y>JYF7fVmY`?=|Gm>*P>!_-IGNMOjNZltVuDLMAg}*p5V|`Sa zdo7i)IpHeXk#zyZ<AavaYYUGkArNa+{OvcQ=`1%Ov@VzV*au}RytwI32Bq8hC2@MYNx%?T8vF_VSckH=)tFmis z4yAEziWf7jUlb`|fEm1>j96GoKI4rsvRD&^F|gpF?LeCdY{@d=3>03y{hASrV`5;Z z)GrEsF2v)Of#N;mz)sI2a{4>)KVOi|h|3Ah=&+O7WWW_;+D3Nt(+I-{VwV?&l+<0t z^Azr3PCPevY#~m;+Io2Kp9dq&5#Yao-+@@eBxGH+9p_uVGheB5La5qI_e>{w2g1h z`gP*4;cGbZ_gG^zWS0SL6?+pllvachg2u%B80){p%hY&bEws1U_ZoXbTrOnsJ&aKZ zAwFn&!{o?rMU*vXfC1Ki@-e}(%$`spcOVlW1I{~Diqa|qNIejninRy>X{-qz&iKt$ z>sMY?P$tqLljj79Ef#G4g{LQiq_bZn`+hB$PT%*wQnMHy}wXp~HLRB}9!?WMup0O?Vjb8E13xe-DfRwW?T4)G^ZO zXdf)8U$fc6NYkvE6)r^PThkY8_v)+gtfumU=svsv?0;bF%^d=QMyy)4Ku zjv&n~DD`(BmQjo#*Krf&4lIlwAK|C5L*g?A9}^IG&GZj=J%J~sFTQQeG}Wt%#q)-G zyB80OhYTG}6A)v;lG0Cy4T%Vq0|yG-%O04fvL?!Yp9?46=Y~{GIXwXAamIi!>^{b+ z;QTFNeQ+69%0Mu$cLKExf?(ate_(8#gOI;qY>&TS?1h4@06Q0ClH48;Ln#a^ehs27 z?dijJoRKqc?!nOUU#y64ss^a6?{{g*kN`NeFg6enD(P-IQP?i#iWMI^hC~oZAV*|n zXFC=x8!HPdg~dGcEn8QrFD^)ouV714j56!10*v^S_FQaCP&arbgw5AdUDby!GPfYw zP~hdN2o|9<-(Z1N8Vb%4(QS}eEq;7ofmP*_F$gk6_y@$Uql@iz`KpSPtO00mPjh=h zOzVcZUaeY7Rc@+qYZl_`5N~^cut^St>)3DU$stQU*iT432*PggHGlD#@xsL*s24{W zgtO+>%qxP_%-i3kH6!j(qm=*M{%8r#I6X#oeLD$B;#WQh*VHu213el%Tz3<>e_(wl zj?AoyPnI1O*p2l7G*WlOrn2Amf@(*O0^-_p1(n}?l04LzcpFoM{)U)R)*B0?jwkxd z^t($fA(D{G`KT%IG9kBRxR(%%dksl}8hSj#z0l1_7WsBc8*UQBXf7iO1qV6&q~6*- zR%#0iW0vhu4iD1%KhHG`NX%nSYtA!TOva0{U-42P)d-2sLzU`$cld z@G$)Dcqx!9Efc|d8YD~vQ-)O8ZjbPV7)I;kuCIIrau>ErU8Y?NUw2l4K| z`U7(Zn~YSlf&$*>><^CEtRo1&K^K%v;;Mo!+ zvxapgDEmuhohX%0fW;m1moXZKw?gh8ID2q09u;;uDg<=Tm?YYu4Y>^hvctnd&_FRB z)~d(D38JCYf$B_u%Vc_3l9E`69Zy4Tg`Rf@?m)4+7BH7L!+Qdtj=0rO??w&lFv<`) z^4u6_t;pB@feQ|afm0bKrr8PKi8>^v!Ho$qr{o3ZBlE4s^D$7>5IJ zcP9}p+%W@9h~!)fpeO9Y3{z?*0YMDPWz!xZR_qs@d$ZYYd zzxZq&b5|N)0=TvS6VyW;DZVOjpR>^fohD)m@PMSm=tE-vO4(tsx(M}c!Z5LW*j+-I zPOR*|AoF2ipsc2-L!fx@wJ0cr`qSJbb)fG})<3Ta;yAj$eirG`f9b3R1(QbN4t2)q zUW3~LXY&9^M;*ie51;)>8I)ggN|Xt%uS|TvxqtbrXSj_=KtW^lF+9fR(tTpt62S3It3(0)7!(dcI%^c+ogwfQ$pcI4 zmy{%TNGz%<5FeI%ss1VC{zw%OBxmP@lQV6g-(_i`=5m?~g$pZ{1|!Y0#KewIWIRB= z>c3`LKr$Y^_D0751_YN2Tr7KP@^csR@;WQt{`mtDR_C5nhObmc_Ktm};ECSnC2G{^ z3zXlP68}0n`m*Pi|FcDoyS1P{gj2ZV&-2gyjjrb(UK_tZzH0|Me-C|ksbBPZK5gTO zEf*LHjASKYW4w$bZQE!*<8S<>bQqZ8yAiwQX@5s@yiq*s05I;IytyAN(+@O?+n;HA(DPB7hd&YOrJ|%1{APWl zG;F5>#d#JFXFks;i(d9<8=78%M)uX*)}M!2;_6>@oWU*OR7fpMI)(DF#bp(nv5qwC zbY>(TyE+7#s3?beW)Cmlr~2TlW7efEw||yaq7mpSCtv~VDs!Ti@co2Hv^fL7Y^ z!g;{l8COJP7Kw&28ni>uJvn!sb>foNozZuKhPwDNg6wdm~?E-8E>ob%u(^; zx*wSMa`v?Op^q!N3aue-NT}(u*VKPxV8h^dG3PBX;G!6FZ*H7bP&#Nmab`ZgL0*Ga z#L=vw{Bt8`+yh3b{nwz$5AtFWZ|~3N5UYJBZm%Yx@`J&O(zYF!0LLL#@}a}ce&3gF zr+w63Rl&Dk^uCRFp}Fz1#hQ=DA0s;`ois!kIJfuz9@{%||{JYkedGTpl!P?wf4aCA@4t1sPDC5}flRk?> z8H&@+n}VY^+)O$vTHfD{4lxB&V9o=OVVGQ0!pk(pGK)@ z1>LPTHdYOuDbk`l&$5oRT4ZaC3`e+9vtK$;+Ex&%7AX_Fj^ES0SwNWuK(oXYzKwFJT>7mhZoz@P?B%>7Hx0d+l8nc%T3KOuHNO3Fy(%n+TK+;DD9GQ1+1p1p9{!&v{?cEof0d z)&iRY4zvQwW@rbU15ZXF->e*MCGLW9932$V)AUH^4jxTW>M)KRi=8?jZnJ=grqhK% zx8JGIyxNSlEk}8VNdKuV3XCF~E5krj^&4JI(u7}s1ex4NokcbhT6C?RhRJV>e-Ec+ zam3693i#$_NiB&2b<5r2FN-_Htft;XpR_7Mv*#%8By5si3YyPSO!?_Rf7EpN3jAJz zW*wTwvE5+AhoU0dm#T^<-*ksh()DA&$8LE{s?UNp!ipG0h7<}=vyH#l= zUEiZuoi6z;t*0k--KtYz6{{G4E9vdBV4AYASUw^fq?P9buQpxA}8@+uE#Ls(0VR0;o?S*``VN;Vu(7BDYTE?xls~_tj20&JR2k)l)HK+uMPm zOjPCTnlwUuOL~v$v_#}fRngh&TP5l#m|Xz(9`;UEDPSPH+O}5WePlQ@V(fSZ%|1^O zrr^)G$z%oMtg`~9LvQR6Hx$0r-?&5OJX0>|3~bS_!o~bVbFeFkf9Q4DH~R^h3F8^t z3%6*gE9)At+&;EH&5$zdwG23S&lJ8(RyI8Onhle=sqAN(s=9aKD=tOCwE8HKlYGUFX$b+=Cs)s2?6JpbzjE;nU}+H{E*4yE zD{RPQJFRxI6zR0`3@EnG75J7TFAPf%V0edG-MLvjA$`DFe&b)MXfYYOg-EF?R`NWm4XF9Q^j> z>T0K3#1i>s?0d8_U1LsgbY7yhGbiKV_i()d5Fp*&Y%oltRwlgOPO_EX`MpK^s9Bq3R^-!Z% z2KlbnbDJ5*W9b1W*Cxw@nYGu&wcXZ@0p(7|=~39GS?dMi z)GN(;&qj#fK6+VvKN$)jtvf~hGWO0y3ALY;Dd+haQxCfix&^L16qOHx``_Q&Tu@ac zE(%!i$Jt+8$lr8pn280Npa23wTwqb?0sjA&UA$Ox!;X{_J+P~*cPhL!ja7#)tb4`0 z*l(p(tiTNOXePC%b>{3(lNEnnOUch#sOvQBLS@1o&4H<_Wg`*-b zWKuqg*}#|08|FpC@LCt<24awMYA7njsqWKYYa_(hi>Hi>U=n#0p_d#zcP_@kmU^C7 z&0cThpp09-OhnA{5ZQ`f=8Rei54*>JlO(sUhnFPxU_5#7qd(iXhB_9)k)rkp)ndb> z&y|gRd!hMOuPzOc{`3lm`OrS>aQ=r+vv*f}tKO=DzE;-O*f>$Q;N(8+0{mO-Y&hm1 zCL0MYIDqbQ5p-QWXtDZj|P$D&0bdFWhv{ov$63GuPpwx39feXRWKA+OJ;;pKy=m@%)h zh$2q~=`s6V9@I%h<3-Cel|BOu58fTppENB=eXOJHg%345c!gvKkxX9%otXH(1WLx4 zv2YG~JURYs1!DN$znTcww(+trDLUv*cpqr*Iaxrn@QFZICI;|z^#K~R1MMM4wdGv` zqz-X+h<^x5_-A^3E9l-FZZWcEpVD*P@({htmj)Ux;olr@Ke*C;t0(|t0fwbz|Ln2J z*XPWRV*EDjq(Hx`5-cRdxwviV8ULd`%qA_RfN*1S1gPT|k)h3+WTXhgkI8Epb^NaI z<~YMgrAiCv-A2+ z1Q_Vb{=C%nKA7u!L$aWJAh@PvszOPK$4ZEM{c5$uI86I;%n_jn5%c{Qk)Q|6?1D`+ z*WyHn2vxSmw=ndPq53)Ta0-J40gF2;13qCotT5jx2VGBg#S(bCd8e1icJRF&yI`VI0N4MxnLv|bFmz$L1fbYP+$>OM6-WitRvG-E{Z&Gm z9;&Vi$%jfn*%^WVhtj_|WlA2N6MgVJ;6rB+uT2&`!g45O%z7#e=C+A}zB1~UbIiaT z&mrJgJbP9tOOC!PaH5tW7I!eg;-%$#h1>5|cRv`*#+{%8C!K@-9&(|Y(YpQz3H_(Zs1r8B{2i zxOhl~gN`#s&U9k@GwYtet0Gl_zo@zqA?mDL1}daC`|0}RoznvU@t8ttj_27~EF%o7 zs4rYrr{-5$J5VF~ z826JmaEtt$4r5U1j zIesD;eilq0H?k$M<{Nwcmvus0b>~Qru+RL~?ou`hY#3aP<<@rNwujgaL0`uA2pxaK z>LUSWNTfSl+9H$P*O>2){r44$vDn<=f--uh&F(kIkn9HLz80FP8GNHRZo8E3Uum-< z@O=YME^**m&;4ZsCiCk`_kRv1NLBxPFaZMadYtHNpckqTCV-cdkNf|g4SqAwOQ30~ z3cRbna0{~b=z0+vI6OixYnW`n@>MJZ;_kQ51JjPe_wYxotX7`-eKH-?&UIh0&y0WK z)3qwCwESmVm;H+?JD5K{tm$_>Isu)({U7)GGq}f^9{MDnUmA90r<$=59i0eTmvj({ zWCJ-DipXsESRYMgmSjujYkSi(VQ1ltKHR20Q)}0rx4@O^c zwzCy}cT#=A8kw_guAm^?SU7NSiWKrw3r*Gr-c90-QLugJc^{RlZTkJES-&1u^+`bB zJ}T&?kC)^?U{FEh`{_uj-FcNu>Ed5PvV-rh(Zk&PTS*z!3U-b8CtF6Hu``Gqk;7w= zVCU@mSYMM8JH}ig_t8;)-~8o#!Dw&X*kNqnth7#p4i$5#$j3w>JwvqpjusK|-Bh^W zInGjEOyL8GBh?174*uV#htYJ3G4L8?h3YEsEBM)$Eh8ZNj*Qb(suR1G-JBX>#*T)~ zmN^1tB(X`?A+~v>0{h&NhFY*gHt8JM>f|#XTcYMoTpY-6{&BkxjkS6t^vF+-zQ+Jj3gQD_-NHE7|n#m2rC{jv_Bc%Mdmq)^4h8hh@xj0H*49h`_t zupHKD)R18tszO9)S*+k1PEiWMYQ9paFb!|qdR{X}Z&Ck@OSGWEWr{K+byQvE2)Di> zPnN*ScR;wN!WQJ6Z)8v`!UA5MNrJ63RYi!ffRp}y8{vXFV<|!#&heVf>S84d`$1;7 zBrzIKsyddayo#t~Ga1Do!#PsDD!UCMJ?MW{)4@rMK04^##aY;g*!X|4j~*^BXcR73 zqLC1?TtmT2Pz{2ACGssoZ@AyN;8c-b4XcAozlaM@6~LGi(zb1Oc$X!3N6Ln{jJOdg zxjWDC-7v_^21aOq4Go`^EMi4doB}6FUDCl12DJ#`DA9vmrAVTJN=daxBO+#)U*a}g zv53;wp;_93rq98Z+_)LuoYbGNV$Tm8yk8ro_!5`NXjlsM(_%?xgY+#~h^zkM;EM4#vYInKE!aAYF3hOm@?gHWyfdNH z=Y({l7cmKqCSM)suEjwuTPnd#42Yb4f;mT1xfJl3bPoz^^-ql^7Y;wkaRZo^;t9y}KYarADIp!X$Kh-(5t_2-#YGggGw4?yi>`}&Kn*%X z2_Wnjb>(e#0`PApfFUIl##layY~cRkdcx`Xr)byH?UdF1p6}x^!(?0#G?MT@zYh=! zFN2#jk?R60t>_u$zDth+PHNurhhOip*Bo-T0BvPo+HlsBn6CcIAK4 ziZtEw@_HV~0l+<@O|JTs{jm{^kcduT4c;!KXQk||!9hQzIwq$jI9U@w?5%khUJL3a+`8!(2 zi6Rct&nD9avK`qR!p`)SAse^C3o?lxV^_q}L!wm*8d$BydUU98r=$g@ywWjS^Ix%C1b$Aoh9Pv7gGDrwV_DRfdy44z0rR_Nt|UV=vr(apYK=zT?ubeE=bq z>7tNzo`C9BtK!P(j}KJa01^lEzQ}kzAG9J+T3^GL*6~)53g$T(S0?fYlx<$Mj{Cvk zVL(0GDd9XzWn2AH<$=*9pryw1Q)Wkt6}8;0A_;q_)jPNnd+&tLpE9)Tyqy`=Pm-V= z8)tFq2S7 zY;ULGv9K0%Ud`=`FV8DQ_~eP~w2)UXFKNq8btNG$CLvK-P`i#WG9l4U6Mu zA^j`LS7g^3WBDOm7jQE&(S@@R)ZY!d734~DF8uBG2P6tFLj8m0Ww&EA>0XOK`%MaQ zOnUM7waVXzh3+gLD^tZ`P_acdv6$BScunh zU^p187GAq4Y*>wI>#LPgcdm~*z9EkwT{J`8O~>9sASM?#=i*-#)EgQ~SgN#)p@#^; z{2i7d{sRWFI40w?9ERRscF3(8mY;TgNTj|){$-UN?6u5~5{_v`B_l%D^%+gzqd2P2 zO7#g`-n-yxt!c%kE8_~bCg7k&pUxp~So{}j3rnu{{QN@ygsqMYC7}|s&lz33X)T41 zB_Ez!zy5=}j`*bB2xIL&q~b%FH?hhWUFVMo1zZBP`%DQmRd)ohrez^3IV;-zdlTR5 z6^-c$h&CU+o$%h$nAni;jk@Rop7I1@DZcBHEN#pNJjgJs-#kt>MS+A111Dwbmlr%@9{j!CGq-%@!9s7!O6;(D!0 zUhsM>2k3k6%pG8@iPcoLe4na+c?&BmHrncJi?XjVER1~a!uDkYc`?`yZ<&MS+m1QJb z8@ClJjET->DX)ebwaK?t04}pfQhvs~+Q0#lF=6m5Rx&-l)E;$E1PbYE-y+|X=DH-~ z*PhrCZ`mXcmyKOw2AW;|M8!}-mZa^YDhwMxeWw(Eh;9?0E1@Q&a^Iy+kB5b~#cq*R z-*|vY0f(W!yAj1;K$Bj=J9unjX`Mbsc?XNr(K zh80-;Q5BL9|5S-)$8=+4`)Zv{kAm*AH+ypfnXFpoGTw8~y3#vDJo&Ymz+39`=-1e< z1uQ=fzW-ENbi5!am)V&dO3KJOndN&76$tHrn35v4jWzEvrrkEvk8rF` zZY&bFD7BMFzM0um1-9zs;ssu#{?0GzP42KOpzBxrDXzK3FxTmm0WwE&5Pqc@*9Pps7S;=YX_ zF-P5GYUtOkkps5rM8Q=SC*sTUlG7Q}bS3chBkm5xWN))$GgNdsT9PrFAE|%U=;oam zd1Kk<5q~cD9>9b#V{z%STc;oxBGgJ&po*Jh;Z|HJA0Ih@mIi;Rhn6rqa#=7JP35c- zQLj20q5VhsC93)+yHico&V_S^WusVK{R;%LIJdieD6=_)9q?=DQ2RvN zX-FRRjL%KU>q639-hB8;zSFPewQn8{xg@@kLIelZa({tq0i6$|6`K>@Y3xbs)cc>oupil3Pi}y z{cN@`xSIZGzxT6y5>l+E55W;i+mPev_JUqJ`cqGGT6nK=$r@Cu@t&+)?C$4&&Xpa0 zpk*9RCsu02s5TtS{_144?Ak#`x-eBNc&FE-H{HrV(sn=`ribh)?xxYW zu9YO!a$;a_EC1UU?!tQo)1ybaWBse=EyirdSK9l}(QjIsv_>aka})Q-zIeLvulo%{ zKhBV6oL=0fpp>JAWFR-no?Cl`kRK0n!YPjF9UvlI&^D*C0S55+iD zaE~1{EDlz3>qM_2_2u|9EN~&ud~k1~Ck}r@Wwjk+aDx0Y2PX=^n<=@h|A-cFGLY+P z-y0`!?T~=s=u#Mc^T)e*?o!#c(-6s|<~4cr*AJrakuVHQVy=#c*3of3ufYXev^-Bd zD1|Dd)`%1J8K=E_oI>Q}cDhbj!dS~CsdC*SBCr}867 zZC6?JyxAEP`CUf&xkhB%;Ra$8V^U{7)hH6Vm8L!8{|Mh?a!;({Nx1+WwMBKH>{bwB zX&+8%CZNI;@kL)%=j4^C?tti6r6wIg=teeS3}$|dt#?=Vn9=FM)P>{b&9ppQ| zYhSlxYfcTraqqHKo*OutZBA&M734L{PiV6hgccAgdmo+fn{wrk^2K8iR8eHJ5NP+V zVJ-oD%gn3ku~xdjY^V}_Qfegz?NW*WebVN&(D|JBOuWA z3O)bbyFcS8bdkzI-Uy{kS+-M-W#Qh=TAQl6t}W3H)qC<48Vt}ZL%YGLx4ROx%|!EZ zU@))@YJqjHqXWYGt??JAq=jNnCT`A(#gV1!zfuG1I7bB;*VmSvkt+~&k0F;=&)Md`0DC(l; z(miGD^K3qZ&`tJhH;g(fQstv#N~mbu&h~58BSh1HHnSR+kL&8%DqE~k%4My|7KB&1 zEDQ(?(stKU0_MaUPe=htc+g-*7F_6xI>Z6G83sYc;{G4kRqp@BQ%$gev_q|0#WkQA z8jzRJFP)Ew&_qFyc4yNTQu3eU3owTU?XZJnLF;WH{Lln@NG>$O4$PT5Kysj3_FzuH z5t0pMaR75@PT)0IN6_1K&IwWq{q{Fk>^LOw%RJ;1wQ z4h`Dn1<8ZfdV)8^Tp=jXRBuQoG|KCLisn9G(a;+l&M#jO&&=x!&WFwCKgCk$Gno4~ zx+Onw{L{YR^?ZLw85GAEogU!i=i~XmKOF~j^kUZdu>SpYr2HT=dk8xwF&CC7!h0k^ zS&V75maVc>Py6&|I*CQcOlN&Z7{i=D%dK+E+VOEe1--Cn<3Q|>&%an3#HH+gi{hw} z|ub_I}#paYmLo&SloK@+3~ zOQoIQ0v~&M_x)gN040n}^v|1Yn*yKmpII6iL$X^rQs*CK@X>?ZTt>&*V2Y;ef7{Rf zer2Pim}!e2)`(L@dfti79_V-TvviTdX1VR^;#XYi=tgFi9$tQS$}Up%N2Jnnr1Lx9 zao~*1%&YjcddIU^sm*QP5%c6mw&RUe(@?gT-}v2pcXR14l2d%uZf5@~zYsGz%rDiQvhS-__OVX$ zjH1wI0S1vgw?900W;AaCO#|a=w@HQ<7y(zUT6xl&tZ8VB&H>N*o`?B!SPMoi+0!cz zE(_MI1Jm5nCa&#to}pcrTw!Qu;wfYbusO3iLrOP$dUOo#CE5AVx?l&BuA(LPHr>_* zX6-qaJ(L^%10pt_UEm=xu9yPSrEd_dB zzh-j_T-=ZB2~lC=nXqS{-}B!2^nLzjT5@9!>3hjr|3BLGUs#ij6S2A@^JOS6N3D@E zKj|-8O<-17zR%K9(*}dN6p>^}O0SQZ$MEB6knG7+gwJT0D`{NMYWEGwiz@~P4xU0k z7EdJ?po$A{O!7zEzWVAkEC0^!b)E)rgJcu#d1#8g=m|yf#mZ6@X%f-zg*W22-@f7clQ>{1tHimL0rw%w;P2c)yNtm(`dT;1seuWB? z`g@R6E1tF)Zyh?!dm&w@*zi zdt0I~*m!O6_LFNZY`4sI%J57u{$V@8G;@prc}4E9G#XOh_yf*{>&F<@rwp{AgWc@$ z7+j;ix4U!N(yK}-FMs%Fm(sW30z2vSKyK|j`tM#wLuWs?(fCTfmbH4O3ReeEk{zO; zYfy49!m!WM#spQT(Z@;1sqF{*4Tc5#G-Zpui)FQ%!Yj$%mEBiO(+Iz0&hp6kiL$Rg zrH9t`EQIw58BG^vE1PdX{95kAM$bz-RZEpWE!`F8~{13x|s< z)v?&>XSwmy*F|Cu&>Jn7<&y+DBZYTu`~H1hcR#I1lbWl2bj?|ka$Kd9tFqx9c6ox! z+<5bnWgter%opt=#4r7p$BcR53liB8Y2n`?CAx8|4`Aeqi|zI4_qLZWU)ZF)a_+Z8 z5MJ}uBir_h-{xyu`FfFEO8~_8AY}FN@)PoIMEE06OboJNXTlwkET~G)$_QIXg!p8T-yjCQD=;B{^DN7%7eaFt0 z;9J%~#AN1<5QiY85q@fz_A!bmw+aK^iOsyk3?gR3RPU9EpPTKMr4N{`b9EA=7WZH2 z58ikrn-DPg_;$&DgeY@OVo0ao8hbDasA;DLkK?CVVu#bIS2c}REtz9JDLGSnf5whe z=iAJ44L$#nO9*)w=z)fwp576 z3WfNA)Q!g8Bf|1!{Qz&a5Wao6HWIZdm0==h@3M66LMxnygE+N}?pXVPT8GFx7VVvd z^>uTYq4ZMAM29cMH7g1Ys64B?6V9oWWad2y5j}$98d|m|d9na;xpJq2gQDt&j*K0h zN{Uy$K?xG!Km!w%GOv49Sd-FcZJEe>rgM$4{_O_b(EFF+(FocR8S)-zzavcT4^BHW z1h~9j9l_0@xf`OaPdOUotlY}#NBaIoR=acOy5rHEZ#QB(*Dex6>6!I$y0TEu@#sX) z6wb@5d@F7-olgp=qV6PC9+tQZ1@HbqN#llzf znqKpI=J3SW>?5?xXD-_t)vx|k%ox}@&1=cpd5)sv+oBhb$C8ZD*<|*I zngNB%Z{KdU^*aRkAA&f-6h2TX?p-<=kw0HwcxyL<3W_W&GH*7O4KMKUE#O+Hj^#&>QXXu`l@?m z!6gF^-Y>;waFPM917tkb@^^@^(h51BMWylZs{D;9RqB07cEMV_e0^ylB@Oo@V)-@> z*ieY129Lv+-K)uJ>y>Rh4EW4Ovfn-jT09QC$_G(=m)|vxTl{#YoO<@ICK;SdnFg#W zxw<~Ot{+l+{`|!hq8#kK!Gip`HT?rW<>8NEd;)k212=$*2y1s;+UpFas5*xBtEITg zB186iQ2v+d^^ZnO`e{$IRFwy;tApTv-OAo)m0hLM@YnRr=saZh^jAD?)p)a)tX|WYo;rAQoqb$oZ z<8+MxVusx^+F|6%vh+A=BNWQ?^gk28dnlAGJ43@->E6(|s30Vgbij<1>CFs^m%g)iE2Wc7}AI_$hTUY?-eN(Rg%C$Rq75%XXIF#S zV;)6Tb`lI_(A>0z#tU1Jz#^MQWh5KXra_DkJlYq(Jd8EU1gCb)@*!xF>`xsRlK(!0 z)m~g>L2}~&--k$P{1TLvFg!Ur@()BJ2np6ahDtMn_}YueJinO88GXiqVKQSe703vs%gHS?a82ghmZjb06A8M zT0v(2f`cTZQV1=iaoUu76+y<0n1J6OM#c;bXaEyDqaQqg;T1e1tG=#-HE)r&g#NGa zuUEJCT+@Q^GH$$K#?5H4`?jNho60nknqfiy!DqcHmd~1k)@Obnd#(Oyixn%=F0pwF z^q~VO$2Amn57y^Ljc1)4BO?N0?MP(Qp!1FfW@Z z8A&%U+?-IbNHVC1qTv8|*rUI*;Ig5Oe^KxN$UfJAN`+GRuZCa?QFLeoLWmrw1L`kj z#{1gEY`JidjJmMyzkzWLut+ehV*82Yf@EcA5f5Vz83(x(gQlX6Mr6qp>4G<*i0~pb zB{qa`A&m$x`RBvIzy=GgYC%(*{noTEXGIbd+&_CDfL2#aym8R0(G znq?s5UcvY}58Yt1uA6c}p6o)$_}vjGG_KsQI7t37Wi6l#rSabi9SY}Sbt z38ICxHpkR>E68+m)GKRl2LV&&Cn?}Vh;@7U+@l;N+%SAJ@gHg!ar3#i%Rmu|pkbr_ z6=8vMpWbF2R{0PIa!ch~(ipCB^B}RU5zrDx1@*Azl^Td8JCXBd9@k~butg-ZW2G~Y z^TM+~)TEJaahn=*;k*r-iVDVJ1xJU8jtJ|Zz(b%=>oo?Fb@hagE&iFkteBC8}$)V_kbP z?t*wdE4Ckdi@UuE5lt*+59&kuJCaG*oGs7wQPOGRXMzgQ+Eij{(#K?f z;mC<=t_Mw;ny*@k<#X#iate{~#iW{l46a2nY(N!Xh7TqE@*-zTV*reEFs-AAmAl0X zCLDk56+M)69X4kG9h3M=5LtrD;0MK!Nx*z!JYAgj5Itc;W?gogn0)TTUn8!qNmFos z!8D?sBsZ z9x_ayNEVAgygwjTsp=duekeCa-i+?*JSguNGVc6j4L+6w#y*$~$!EFZr*Wb^j5Yi@ z0GeLBG0X7Z!sow2QL~-|O)I=0?xQ~9NNo~>o)4Umg87*FsinAq#QF#8!`OG=KA6uY z{O=(a)!6sQz)FcJ`aF*L;3g9(a|<{bX)9(IF{}FOJQn0pOK_bK4r6aw2lIu+t;)MM zBbvml(#b0OVRDK?^uVrI$JJv?B-#9eWBZc|xHH*hKo!An{EP_iVV6M<<{Ny>hLZ~F z=Cik&iTM;JGUd7cz`=x)lIG`g>(Y}%)AU&Z^@@%JMX*UXg>K0HGMJC%ps0vem#z@< z_D~S{VImNl~X^R`(sV5}=ix;Tt#3Eycngr;`KYUleUl81* zSD@R{t+EqYG_cx7C@rt3Amx~-bK@W}!6D;0ifwWy{p*vq1?R6JF!OpLe*)OP5&a!U zS#~93$dpP833ChBX7qCB7V3pg1YZZZOs&g*ZTnpnF&Y=Kh$Mv*%dq)9dO&Oq5HYDT zH2h4=H%5%w)M)g{KDZa$MyI&Kv_R1jFs@D`h!k>BfCi+=xC)LfcJ#yFJwTth0Nh2Z z=!pJx)Bsp8yL4OeIJ$w8)N_~F4hjw0)drtw)Q#n|51vX-()Cj>sN+H~^Z%e68q}Lp zGvf&h8xDT>Jt3sm@$K|l)!Hqs#G&QEFoV0;m%<11tgX6U#xYqk1QF)-V(=XXEhw!? z*4yMZoRlStl?j@+t{ld@kJaMCc^f?C-Cz%ZZ)1*f9?+tLl8L*wu>2>teBAY^#jX&uiFBIsh$4~&a|6aSJ5vr9#0a;6Q$YN zCW<*G+Bo1!T+&jI97WnT$rC#H^Q={jaxo>ree^xa^!an)46@Q~WVoQqu=i=xAAmPc zLtB~oTG#yJn>`=Nd`))z<@YtOhX~EhzCWXhPQ;x*`OAxsIF%BXoOrr=lu$joUyd`~ zsx2c5npO9qATMk8tlkfdM9CK}R;3opB&BUT%_@n~b-Z>kizh&{9$n5V>nd{3 zYZ@cmXpO6e-LNcrotCsqx0?O#?h}qE=Jx8}HapJ;*7ZBQc8A04*GPU{0z|}`yIFp& z96y)t-P|HvZ!O8&q|YfW4vwe!Nj{@aa%c<}#nI!2L#*`RpOQyv ztL-JDUTSTAt*(7L^U6xDa-BfdEpHAgc^TSzzxL?*^wU}x;G3VL7+;kr_3E8o19p9i z^ophw7E=zbktK=)%jmneIpn{IIot>podsPC3l|}4(je_lf?T!=^L>oMB0YdARMqOmaar?7Ty=r|NfC zEOi`NQDP=#Nwq|P=O>n7j@L5(4@BINweUKxc@Rc9M+22#2f0GftB#!)49-cNM`d#+=L1tT8?Roa2@YYp>^Q zS>Is=tLB1Mn+1TMNCpqqD^egS;G#ZM3v4 z4VU#&wOsXTCS%c2a7Gb-gamgoMw@1FaE8MYG{r>`fdAW$gGaSI$BYV}E}172g0CM~cw0wNXg7sCEfc#|zAjVCl4?%6R?Z*q*5irA$N9J>{z~tbXLZFd zXas;slkUNGuf6ot!Fdd|CR;f*AIinXOoX7AFamD{(HOc{Jteu~FjYre)DVYi4aRg; z=Yy>fz;S3SU&}gMQV}GB3&Eo(E%ct{*}ceEV#YU1dULvG-!C571Le4AYH2iEzYV$= zJCGh+dCbRtWudczc>_MysVr4~n73a{Ozy@DvP-tVQdTBe`W1H3XC zTW+N5D!u=R%OId>aPxkGMGl`H;5h1;1FZ?m?2X@|!0WrdI*;3U+-bj6 zBiY0DLz*9(#Y;NuJVAkBiyOm>V5A?zL^j9YY2-F2ztg?Lm{Ol~Eal`6#x0Y(54mkD zoIs|!YJ2bn!J?~e^Srh7ms^2RUstsSwN`;!#;;dSgip@1HymFd5Oa)j#O(~8ceP{D z0g3ge)LV+Q76-hp`iwbk$M+5?K@<~M9A2NJaIv8rYxMh{#xQJC!IPnAA`V-K&Ki_S zG#=IiUhE`~^uOt)vKroScna1uJ)B#dMI2o8e>XH^sWSN_I@t#4&upp^1_^hE6~0`0EAzJZj{aSDm0x2VLBFpX2XPo!OEg|*m-*l z>7Z%KH@`$Q2#S737i5y9QgxmOE~x%7mi{@lH2iAbu0tw+qrS7s-LS0UyHTSkqHOmI z!s8EB7g@K%OJ^cudDp*_Tk%aN?l;_z6QPFh267Euwk;1H43{5Owr3wz_i7)4faL;w z!wX7l>(vp7liNT|l%n6GhtMs~FCta>1`8#ueJVcH{#|s|ZoaTj2dW>O1V$IGBb8Or zR-T=nZ-@JCe#Jwvoi`kWL=pV(NOPOJ`{PP6&ZstbPw9IVFN%y!Y|X8COM*+P=hwPb z0)}I4pU1du)i&?-L$*HkLt`xu0A%+YY*ZZ^kw@GHb)WVW+t{TWhmNY6rg;+|M?#^L zdf)WDUh2W|t&+YeU_(m-B4U_j`qLfR;bKIp0?pza0ad*7%`Nx2 zIdCyOgc$g@g?Jxt4xXh&2?@BecbZuCoQ<(X zlvvr;zbG@tSvo2OKuZ?{%P<T{9QRCM4_wtR#Cmwq=dK6{en-Itk34$4q8_K8aTK?OxVNZXk5{ zS3Ha5R1qeLy(xiS4d-&vF@*JXSxUsP|Z<>FabC)7E@-Jjx7 zIHo**aXSXM{V5*HiHC+NG@-&OmBaHcb&7L%F(9gMU%TZW<@&edW7d51$Y(%dS{6Jm z6Tk9(3(Cn^Mi|&_$s9zS*xfe=M-mT{Qz+29KG|b4ZY_K0$$qU#?{th&2PwJj$4DX< zn;l_e-=P?q6HzoUPa`;&_h3^v4|v;yejn)R0Hy_G>(!;g6TYeB?+eJPN7KqC`SZ%w z3-HQ{3l=sfPBq1)Aa*R46w=Dp>r0IgUoMv8YRC~ZdgK_FB{V9T)19F2J#;y`h8{Dy z-Pn@hs<1K@(!)m>HA**2OaLiF7k|Z5zr1ax9sE@~MA^xVfzf4O*rPW71>+TSUj9}Z z1YjZEv*0;AQDjub-KX5}HH|C#HSJ7*66AZUWMKAaUb%&gGMY_7n!Zjlfql>>bL>>`;x<@r=r-7%%89?&8QP zPj7JT-u0#d0q+t!N3)fob)Aa%64%Ty8Q`uorujS3VC+@pB~r7d7}$5`>c8}A9eLgT zu(`2OZimYSUR-A|-Da6$xwQrL>II}zOYTFuC9)d6HAlW^%(CvRV+avlr+H?(aSv}e z-}Cy|mBMS?tQ{jx_6b~PI7D!6X|iaw=b3fpS@&3z{B2v|&>88G;{M)x$GbeY516{G zOb{H%;@99AugPt~ZKyw`0zGytrf#XXDwa4NQg|IM?I9iLtzRd(1ia(cxQj=sqnjZg zK3|Va4wVdQn)XNdZqnCxXaM%Aj%_^Ymfw6r6`eP>H>0YT$F47U-U!OkBp#T2%>T3% zBpdqDyfx3CIbxoBgxJYkeQC090RUEWa@E#e*P2oG?6?;B9zNPPRd2I}HdH;X_9B@G zDtFr(E647Fat?oM#J{8I;5{BA?LHXY*l#;@SSt}}RvFazX`Lnym&C-{WfWe}YdP(D zA1`}+GJi(9J4fwh?-zewubewlCBpZQbSCgU3Y{fbwFU39KUbQkY}NAr(qmvLB2^+c zlS%b-?$sqdZ{$2p8L-lN0n0Ye_*=aZ);aT>;%=zz(KUOsZ16!hX4J6dkJthO$>ELV z9xoJ0cpJVcH{IHJ#B_OdAUL+&?hxe7etYj-wRcAi1dinJ(?f3q!1lRsxc~7hU;s@q z$W^}n<2k6&U;)9$IR6`3A4;AW0s`->;TTP4`a`E+rq7?RA<9 z@*zwpvf=^Qd6+r=uao}VK+ci8CBAd1x}+{(oB4_I9|qZK=wof$E)>+C8fcor8ws=A zj!&Xx7)qiZc?-?tGTnkc#RC08rZfar)=l!cA4yM_(A}S~P~tE%d@h;(e7=0r+xD%x z0P?4<>)Z3(j;k5k%a|D$H1J^0I{-4oPjy_8$`B4+Il$ZF>Go1z7m{mNtga`G-<8yt z!r+jjz(UL)zX6{ghucF`$Tv?@p8}b2)AD8Sw@{Z{i-Ej>jiR_R-vNB7)cFcQCRcjU zc=(E;ZHCw%r$j$e&j|m3>$e_Qt+OZ~?b%-S2+lcYO?byHgu3dY2os@TJFXo=rL+ zO`ai|>_)i9dKWa=^G+?rc7GjJ;03Du=Enw{ALe{Kg$VdF5ZRv?crmF=1!;n{XZvvN z(qT4M*=?C+b5;je(j`A?-C3O9o7JtkW>*vGCD+;>+1*YUOmX4&r08?goZ01(V1sE| z6D8=s-2ja~ZkD=OTRihu&@j9=*^LrB-=d3FNiD9{<{kt__-aM8I!1#a*Ar zhfJRfgui#bk$q-UwK9+&71vNK|4;=mJx9Sug* zJr7T22g535KuFA236#Xt0sM>H_fgOSuYf(E4|>Q<2)7hXi=Gbj)u{AhCWj;vcQj1NHqm{iKSHAbBzh*~dcG04U^nCIl0Ev_X zHDM+R!Au4b2})#87WKw2e4r5$T>@P8%XNn-2nkx^f3_wf#iZPZ!3w4JVjQ;;P{w^k z112%(_Jp@HEWiw(sf=~Fh>KXpN{0?Xi~l=B+J7m!Gkw=`4^67?OPFY*yT_3_5McsTs^C$thNkejRMH#=?lG7_>Z! z5y@R}17ci~y9YP(Q~@gJyj7_qOz0a`u$RF6PxrXn8fi*o$c9A}UMkJHkxTy6ThGTD z`9I$repZM~jErf$@lO%OY1}c=RwIfUFp?8�$~VDlb%M$CW;6jdV2wcqpqiZH+S% z;S^R%`*hv-!~|VYWB(E{a;$U0U5dUL%k8gi5t&y?I{43-;)ILvtEdf=2;<1pMo`M} z$Oq<=nA>uvV@Q}p8vK=nG_iB244!oku}P|`_#hw@7si?JW8=?XR8u$_rs4H2V=l1w zMa*h_X2*XWJX;xV?w;WUz*OIy;Yq|SUaM>&RNs1?UUT|L#yi;zUz)bIW}hr5Ika8j z81HJQE+?J&;8h#yV{b%8X~7n(A2J(q?e*}An?!N+(QCJ~aQf#&X{JdLT>@=X!EiZg za2ouU1{IVprMH?A??5|`4_hmzpA@g4J|FkK`||tdTL;5C4n--zx9nayZ@xZRldGqi zV|AzTj10Ff?4Zep=7;X@G~oX6-^!mQmG_Z7n`BDGNF51=StjBHjt}R2c`&<`D%f}6 z>5POC`Z`6q>F&Rf6x_BpTHQNUSZDAk(A;cDBJbDEzUh7$Jf?fW(qMI$Fn+DU4%=MN z_NKR_?5MM;&3>W;h(r@=ynY$Y$=W}TXl=EXW9Rr8d?vf@a4-=(ocDzqu!4A!m%I4O#4fi&2z>r(B@_?ev$^uS$DMQvz+Me`oJ* zW!P8}Pt9m12|$l_s+9(7<^nHC$6UykRw=ZmHtBel6yLpA>#g0G+qXA%=$o?k_*I;c z+KVFgatk2Kw}Z#`Lc&Js5Gcc-L^-lqx%k-|a}jGZonpXLD3A|Kyh=~H6ek#D6LZv_ zSF!J-;N-}Sf()v_UYmb{Q9o8_oCNZisiP4&V^(=Y+aZwVx8iD}uCmu!QtCt>_iHMx z8|M*EN~%2H_u84a+dl$BmUdE_=+4%a!HdiYtpUemMKj=uX66XGva~~a(ay*`f?6o% z!H|m77O!j(UWGMu?52McR~4aS%!JWdSjzmg@YQUJMK21K5mGbpxc>hc4TVoHxh|l1 z3O;kN7)>g5`c!fm+VtFh@0lS`FwD)d=h2YaUhIuw4QY-M%9b5-U!WVyse3y`n zr^R~K9o3YS^C<>|D0t)e7I^P zm|LtdSX_ZeSaRDn9lG~%S7TD!Beff-OS;pxz@=(j+b@NgFe!x*Zm`S;I#=@B0h~lv z_ZQOx*D-8@A%vKuJh&?XHUf_mKg94@$+j~|p&V$BaO`(&kLD+ew~th2I&8|ZxTmuP zfqGgI`1YV~!7)4pb&K0Wrs?i{>ehnZZT70bARN|i@%`cqyoUA|q|bS!Qj6kKLg&oh z6i5HtT9)Fm<0Jq6zI(F2k**^k^Ac|n|9CTlK#3{aE_=!6RW1tRdGQMv(cqt=;z1}O zojAMsdVlqcfaLM<-XIpKx3Air+#P+Ap4 z20vSXqBAB>Hsk+3IZqDeuDJTG6N3%^*6**rthcJ3P4fz#v~Al9ItmzCPSJ2GMn4;j z&*vBWVn`Jwj65Z2!l_w+h16vsS989~uavcO(rHv;=oA(wnN2rA*D_vPjLpi;#{^b# zL0pSA-c#eDv)svw@&Ul|mn72+WtiOuVK^9n6bxU_FY3tiCegqSwIsNDV(2K=gmV!Q zX`u=dRgtG-9+W`LZl^D<$UAJzCltuba8D-x?#l=_Mo;6xxoN|!ea((Y;FfKQVQiXehRO6i)|rUO%S9KQdA=! zrYvj3!6V$muUE(*6h<#6#j54tBeEcm9*LWX*^Ef4*OcPTLQ+yH5w6~b>Xi;c|j;8jj?I(REV1ls`m5)?CVkY8ww?3bK*IAZmHpt zQrEObVIvyKw7eVe+{zOR)VzhO;oKVN0hH_8!B9ZGCFrd@`Dwn)@E7nY)Mb^5-qq+> zSpFO&G*5YGvmfx-A`C8TvQ^OK-7cxH{9&i zLEDYLi(Bg0fR0SpgqEN0%9GxzQf`*Pajv9H&@Y|X6E|fah4NI;kFal`t#1IyoOgL! z9vaJ2Ga|-xA;-a29=h$Bnc_DA>{C5fGZftAnJ6Nb)j}VVWyJEf{lDuZZp(fP;0kuQnO4yggrC2jbTzeUW5M z`oe)%HT+Znn1VT#F_%~m?&^RvzRF!S#q}x6LVQ*a{>}a_hA7rbbBK;J05(e9Law(d zWe0j{$N`ePDFcj}}erb`V{w#vt0ea>yUU`zs*R8{R| z-K_G+Otm=^cX9`RHBxfaA8!GMD%4+jhTcer9$R7nl}#%26a!L6fen`e=^y*3U9VQ| zO2L39EB9E>Y#c;mRBQSU=)aBIcZa(bGEA!2q4-6q3E%Khvy?@{I0Z{n++lqC$xdUb zW!S&&lBp4q2}e%6!va3UAUeK~VRr)vCWPkMrV+h?z?ea#K zDx4hySmE(^6=?DvnLO<1LPLd_rsQH^BNB681J`*g#UVm;R6lR@ydQIhq`x>R#u#=K zEkrfea3o>LAy{Nr#qSyu;4!5(rnS3SrLmJ~w6N`5wra0d)p*>`ZZDKDyS*df zoPG*DZC&;l>9^g2yC@`X;VXZ1OY75+l^U%Awj9jwt|Od#>|jC#%t)(_8HD_2*xVlY z&)2b&V2}kG4Y!&#QnB5|`P|%Ka{C&@az)APKf`*WAGyo8C{M^=z!3aAB-<+D?b^vq z3jhk1VM&^Y+4tYw!@?hN*=a2VCNnf&923kSBPQ8e7U~QYE(j~s(X&oVwksCb9sN~| zA?|iX4A_KF5-x>iB@r{zY=zzrA&dsZ{{DJ2w64zeOGX+jA`)K}*& z%-TMl~N>VDYQqK?FIJ5vzl!DEYZk2~!^(~6PvuJXNa0A1?&DFH=p zlCZ+&eL_SeGJ)CrBs7rgGMFV76+LsWH-f^;Gk*El0pTBg!3KCzmN-2I6%%+HabNQi zy$b%El!*y>7?X7ziyQb4TYx6}F?m_!Fq+`3yS*6g3PO^C=&W9hgA17lnpLJ?v&!Kvwe&atBbvLXx zWr}b2&)j#5kO~7uU#ReKe3Q>la3BaJ-`Q`^qAMODGBeM%rD7T#O$RBiNLe8m(K{6a zKB1rPn@-@&9lpD`I-8r=!vQCtP@sXsdH+i@;`|@cY|j7Ej5z-rPs{bMXg07kA0&@~ zhz?5%WN6|y0-Cf*(*q5gLDvSF_#J>>$&u;)Df$7Un?Odef3&i}**Jk26`VK#T)qz( z(mW&>_2lRia;W|<7!n9S;VzlB#|jIDb%+IxOsOUxSCAxJ)8aoPkdsvFWb}o??1hI{ z-5(}ueoY1D1T)qldEwI$-Hr?Lz+h5aBf?8VNZ6O$YVp=y$ZOLb?i zAqG@73HwF}zy^mN|2XBso~R)JM7n}>O^EGt?Z8W!Y0rgAXNo-O|4_IfZ=C%20ZF)d z7^akMk&X>n2$!KEQ#OA6)_}4x(ukor!*)yOPmjdLk0%Q0U#vv~F$qZx(~`x_?`aNG1r z3^mwzcle#=T%nP_u`NY<)8)!A@;w1s5x?}o_rgFeCyRK$GxqbZ4y8YZu7tE|Vxo1w z^1RWmlPMYZC$)z~oj?P;@sTEIG)Ei3$AG&L0GH z!bYJ2FthwW(kJJcMzMHJ7z11PG%N`dcqE0< zq#GpZ1&XK7Si?2&Q%|Ukef4S518QZMj=Oa}mbEK%sO&PzMNeF_63GIv{N;`}T6yHI z+YGMN=&tjdn`ww%d^9#%ull2383*LlHnT8tRy)e@*f=U@J7VXd@NO3z?s ze&Mq5+L0pUFAR_(BU31B(FC1Sx}&csLoB-lzIJh^Np<+Tl>xH}i7KjwT;hGk z1_Prn@K8z|cRvj9M@K$_%6W5#h#OJZn9cwJ+P?>aL;~<^ka4#KTnolPux30l4BG9l zu4e8Ep!W>A7|2J1n!(CXUpDsiKtcgU=>5nN%S8zxntxY?%QPU5vnPI(M;K?A$-{x` ziSz&Z(W7n9ND0xmJ6y$W1R_jROxuAd?J|_?eN;!7E&vf>R#&-5Q4ZhGs%L%B$C$P# z+X;EL1Mu6qaKs#tU?e6#FgU@%)^O7kV!-v(MK&QDF}g5ol#TUR?7&!-Iq~&^BSo4_ zR!A`sT2mWAXmpl5`rZL;r~Fb`URoaX-oF^+Ur5>|=;tAVSyba@wYv5~!Dq3C^Qe!z zC!Y$u_&_9oEzE!{uMd^cfShOHZ*(xfsw1feH>#sFKe%cQXbo}g2*;l|s#zzFP zi+I3eLK8Ip(UZW;fWg9_z|z<62al0#)vEpZ*J|^J6AB|YE-OYmh$=5@L#qFS{rhO} zKlLqD39li8Ua$-PxoJuNpNr9ucJ?3=cW5*`gq@E5FJMTZpf6x6CgoRN9)b!C^fe5` zoEiuqo{HX!!creM4U#HwFvYc(lIx$I{*KlwG6bF{1G-&5KlL{0OQ{YFG*C(Yjh54d zG*ogZTs}%3TpW{)<$<6fFw6%mpkjMlM3~sNzwqZ@%W>-$31MSf&*t3797tOmBbpsc zPgB(1fU~dR5`eQo@i%&AVNKlBrl_bT=Qa{z75m9Q{#vq_Y=ijm!6A`WJyWLngg}8{K^Z_Ez#=$= zPWm$m4*nZB_{yk0NM1yfUjGl`d!lHCMliU)U^S>=0 z@qt>dWA|1}Y(nZCv^=Tsgfo*7@`L;>>Znphgf@<{b}BfFqS~8?O)k3|qbD$fA~vYp z=I_Z21Z041caOv$V@tnJfao!l`=IHN257iI*T{`6t<3)!r(tJR2zYnNWynIjWt{7j zGSK?eM9XOTzN#h~nB-t=NfZAF3*)}nLbj#TYf?rH^JQu19=ve%UVO0 z_@^$3g&&1sS!a|RBy7?2_b;jLpE~s`5)`;)9F*OG82Q1;7eIEJw#fIhs9!XqT&(Vr z{p_GQls{t11RMeDuU(EGS=Oo59Ed@XTMhTT0-ui6qR@fYr-Q0;P<_Rzq;w_QweYKE zp@z}NgCc~4Xhi%98WT=WvLK1FbYg+u*`ynW&-3T|q6Bsn-yOLh-p=X*Pv z(g7i#=9>W4L4kKJDijfjIEw?q>X?}!?aLz*sW^E#!49D2N#uJ$2GE~! z<>BG*nI#2+mOCs&4N2mw6JDmqv82!|dd4H%tkT#MwY#%Sf{&LABZrjn+5YE+`-~kPgy~uBTNWQU&$Zm#CB3m^%nMDBcj~`B7;P?tG6Ody9 zb7t5IX`~@%A7dLyo^Z&pYXk3svbdYMZ$ol0!h#|tcP-i1IY1kalFHd${;RNdaOB6( zl$B>B05sr#gZ`-?dD;UL0-`nG3UdZj8?8xYVNQCq;yr_dWJUz9a#+?(5oPe#kuQNE z@G$pFiM?X1Cpsh>K^ zpvlpyRF5OXR!dKUADW|c)dJEYkP#SAtlGAG^CZFlP9|)F%Eua-bFCKq1KWR4i4HDd zFbKg^Ds%*)zu%7IY}^!$&vCZ~Y<8}QIL?N(m}y5ergXw{QDG-A}GPHgur z%1rb;R)}cxq2Lp+6-#Baz8(IvGwJI63tW#Pxm4@+`OpTi+Woyw`^BGsjiYOF{Y|;h z!^x%)MgCQ*>&)=uyqu})>4ggS`o#b7_HYuiZ6s%FZ)9e6*gK2@7xnvlmUklOX3LhZ zpU_^yt-pc)9v`%8(E~;Nk(wnQQp_G`p{#eki9@Z2$&iPqmiEyayYs8I@dC z#?S9siKqb0Mi*S38O>W5j8bn4FQd*|*Jua4uRdN256|~Uco|O5J0Bg6tB{Yor>t9t z6)_pR%d!1vL5Ch%Nt}CSm=(tFZ!-z& zm47E(KI_+ulx$DWJ_Y{{^Y=5-u>qGrrmnYRCL_Q1joD%C1Gs|>iy{5XzBo?D&8e&e z6264J$PA;0zu`{2?Dy6Jyn=~rwaG(1uD9;*+?+J_4_Hk;(;q+hrsCMkM^42AoWu-z z-&p}_wf5hH0h=6>kGUVv2CmpwZLcL7W@_gb2fuX7w^V4(_)i!YL}_P2(+$3jpPMK+ z$^O2rm?px5A(>Gk`mI3fSFmhi3)5#t=A3t_6xG~GXJxUc7u&!dn&xKEaAM{8-f^xo z`$#ejDTbtEBcYRIAzjQ@f5MFzKmAxPUzY>;KrHOHIF)CMx%b%;$RS#O2#Vh_>iFUN zwVOBRd=IGCym0=r^X(9x2tU%t;p_IEO~t@v*UOUU;494yWAb;qZw<3KEp3YuX87&Q z$88im*c+a0@_8(Z)l>H`%mH3T^{zck6tD9IrW{5oZ%nOwuw(K&veM~$!iMB+7|s+ zZ)+h6aO>x=JkJ~`JOcik9(ts-t5x4{Y$3O7aRY23jR}IB-!|h87`k*V)68b^>*icH z0F3YUS+M0kQMP>%js}$XG`kA$OSkv{EC0(6)7}&bxw!$jfzRD%otxwu6W)mchdc!Y zGb_>dsx;{i>9&`rq>1OYGA1-Jj(IUZrP7`G!X_-(i;a_3Dvb@HsR|B(f|E80ROo|y zFSn@P>ot?fuG5{T223~k)NMyUS5<-5wK}HhEu)sR~vxFF*|ZP|JueH=jdeo1qWA`0Zh zlo$NGP6~CTayDyIEajIh1pz_wj(HztqOxiI7C($REqkAe>v-lyi)&2E{8>5+B3~c9 z54ApFDF|H7$^PV|ix$6Njq7)M{uw|U0!UG$f70$|%DaSMs0eMOIBlP=Xnm`3i((NP z^T}-b6XQ%Y)=tAB@9po$dIDYP=S}8o6m{nq%5(qlW=X$@L4fr*?ER_kkgCqP%3}H4 zIdR^Tu07BF>7704QoFrDb;WPd_xcfTBwZ=Q&-|+f`x=j~Tg59AFomOK$8|pMHMC%& z$D04c<48Xxw;0K&5;Hdb<{bc5KiDq#@2MG#3s@7vsS3``1w?rhCPZcB=HmJv%|WjJ z7(;+|6Z~XA4`p$6AWR47`0RfO;*ubL@Zkd~Ci#B=pT|L`?tkS6L286>!0}0bAnz{d=~Kah2rp95Go1FEEF01I^BX8nJ7 z!V~x_4rDFY21a>A*o=|iufHIGrJa4R@seR>`P0pKV{BdFcMXv`@%fde)+;hew|3AF zkI+r4P6zswlHZncLfusiG zjm4klU-YHHWk&$YG9wcYv4;~(8J`YsuY)oc++2%xV8O;Pih6fs#;1VKC%@Z1H0I9t zcR&UiiLP?tmhdQRD4Q*}E*&{s@t3IUYG2>=FO~_@O#BQ>(%dY{aJgxmN0}>v{u^&s zmqbDz`*YR757*7l=K(Gw9#4P7pn9d%2sbK1;ZawDb?!vPKww+}I zTBsmPJU&+hKm5q0CU6+(kYrgE$Z_!Yo}P=Rgx=p=;tQ1dmWKE=jEeRgUO zQu&(TXAS{~HaX%SibD*gUHQ+2g~V6ox3y083CZ4RcMRns!wN30F6Z7|8D@ytG;Qf# z2Hu`djR0?VQ#LGa3_X`zG3%eA5c*(sFiBl}sg@~y^YW9l2^al;jjc7`MQ zf3YY=_&$PRy6EJ+xWX#hP=q2Nrm;B5OqD9?UOWNl+k+x`gMF5w>rjAc<7%+V6t~YLt*n~PV(H*3*Nc{|r~)qIf~y zVxp#^&vG}D2e`zK9`ZExJ74A`&WWjIx*-8D%OalROMkrkMzp0^IOkuPk2a&M(5kTL zqG&%UI^)-}$o8pPd#giF3ePo0+!*^_^m&Z;}$N zmytxXHKB-MhFxM@IFK++!Pf$wU*aRl%DeD1c|cBYwu6~3{F{VG$5AjWaPRk<&3Qe* z7uyoUAHOB{YLXx@=(kN=P+i|N@ttbw#?XYCm+AWZTXprgafD3xvz{7mRMr%i*G+vJ z0|d3y$XqRWJ+^UD{BHUM^Xm!H%n~=AV*LY6P$wIPZn~cj9##<5)7xH4l)LJc{seuvz|c0hr%D2H!ebnHWPwv`IBOucO74P8wNFTxa=?Yj6qu{S9``s_p!c5$eh*b4cm5#(}NY9p) zJZUgv!Tac3kia5zU^WWj*RQ#2uosbBAaK*>lZL`M){9zcta51l-8W_nid@&`B}VS= zn;Q@qV9+;Q&A6Hkk%)&2amu>wg|0DwmL-_LCA2`lm`BqC5Jv(cEa0HU zG{VqF%1Z<-H(x><#AF5AynHsd<*?`yBBQF2DBdfleA5RsXUKwtM;(N9+Ki1Q1 zaeCW$_~+}p#h))38~uRvkGc0gNIzH`4CBcQmZ%l$OCvUkukUn7QjVH+FEmF4kZ`k# zZ}cQz)$PqpHltC;wS?6G!W6z1duP`sb9+EG$@7x+(PKysHHSdz&H(emQgRUfxo5x) z8aO$HDrFgk$Ub*?SoJq82Z)*7;>c_v6TR;T!`HI)k~YgHTxKgB-;^Y(JAdl#AC9c> zqd}m9djpA5zq9ElyCk-Rr04^h?1qJ%6(xJYGOg0)ZREy2Ns|Oiy)1B84Am6F#F1tEDDw zRc#Bs45>rJlFp6adKPK+K9FY$P<{rE5f8IBZ=g6!r5Wd;J2`5Kzr1A4^X$Pu?cs6% zA>5HuadHl?fm1*$nM~nDy;muA36TiC!F%Vg$HO#Q5(hYS*XqR|a*)FgW_On(P-KT$@%`6XP2mrHbTUccGuBDfy0Ckg?uHkJ|8Nt!^fA_VdjPW;NvO1pf3jEb!*5aC!wr zp_yMHNgN!M=Z@c!@@**)F-|t#4o{BpZ)2A(R>zx4HQ?l41JGh*e_`pqU|Hk4`W3aB zwyn-;IpnfqH!P&9>L@(7-!@R_4uVlE&|th#bTa@%p|y^%N4a&?Xs8u))d9=QDK=wp z4sV?is!kVBie3?Lb?8y`skj<}lrM01(^nvdWS(Zx@A4oz5}NLz8Avnu=)30@`1Y&Y z*ZBKO@o&pRnQKpyxhdf{54 zo8u66lQ)*(>Bc?e{;ZvB7IJb%o~4s0$!%21({gpYCboh#au^|x6<;27#M5f3N4_ZI zV|=?Do*!K#4(@E(bGobl=hk-Vxk$VEbEtW^NY zzi<1iXf;Y2Nx4jBgsWU~6qVScRP)=1^5w+-IPg|j%U*e3+fz+eactpV@@@J~3J2as zJ8gwndkNY9_WE6#E>N#w*VPo0h@@aJd?)c4{)ad_PED?biZ*)aqWvAiK=m#Rzus;1 z4#6lRuDY^n5c=2_Y6=rM*;)3IhK2$Vba3_*POrEmwqbH!by9`VX4okJ6+p4<{{ua% zE{7oV9BYQ#>TSoPxQGY(^SoG)%~iW2!?1PAdC04Uv> zSlK{@f?h~;Y5lyxNVfm6n>E2zEU8>5&2jC?cQa9H?e4ajm2P2nxKV2T;I)~N?%s9) zdh2eqnT6YBkk@ao>kA0OcebW&wj2QB@$TIj!9NjL<&L}ic+V`9lMh|h#l>INYa(b! zGsLl($EhxRC7=|DMHI$0^0fl!xqJ&RN!;ek;evp5+d7R)%p$XMA4A_w2K7p#FL712 zkurB+7iiE`2Yvg$_KN)Zm@-mZM0!na?6)I)qC1k`LWL`AP*!}ZPVnia#!4lKMHn`J zi{hws^-GsuN$rz7dT`~>UP+aUNqK3Q|1eK0=^D9HfDANHRt1nz$Y zoIqt3N6LS7W%5Me8Gu|{{JucmO^}mSaR3<)xU$7h0LUWY$s|F>wn{gy@v~_HgR`4~ zUi*dRXBD~eAv8@QAzMqnItf{dE>X|e$JWFqW&+*1mHUAfD@pErwXt0dIvQXX`FddQ zjddMe+wU&_ARo(%-1J0AT4sq5fjGU(cL{BG>E3uOo^Z_Q;yU(=nPmO~@9}F9w--Bj z7Hzrk9q_s|5k`P})cMiIb0Yq(zI#y+&Yrp8WKJM0 ze_E4TEB+N$FZ;-vAqON8qs)gGa4a( zaxl%ZyGFi<4PV0l(n-}qLp(UV7BqnD!|_)EvoEDB?4 zhkQJtGWh%ZJQ_IPJ`Fg0YUTCm`^L9#MwAzEm0cTv1TYHqLjz*VnmBQw-j%q0rJY9Jo<-Aeb4xllT8CN>Va{MFsvgjTBww) zI8iab4y_Jbj%dl$9|F!5Wc@GK!X0|7HozM}Y)nx-_Q4ykTR1$dz)1C#8vB_d?rX_0 zXW~pixSsP&6>~9@bsLjDx@1I2R2ux4jCUge@nr7Jis^@odQz&u)Eu;kQ5ID)hd|;K z;`n^`TRL1vE)V^UG3r9&&|J!#dt2~)lhe-GZH%`_Zh{zEf%awfbs)e$Nd>u&P+(Z% zuC9z3{kTsXaWbj#Zw2fT|4=zQELq>4B%}=>$XVhgJVkLnfb+Lwynpdd%CQ!1qCSl^ zf(&h*x1V?8FvMqRj|EQqasv+*I zauO>uGNwv0OFm(7YS>sPg;tj&(brFw+*R^f^`WR1T6J|ocl}+*Q4xH><{b9>kgy*h zo1i*PR7YP6eCC-1%TNahhMk8ok;OI z$53y`gO%ar*YyOcP8GNX}j@QMy1X9p_qA;mZe$lkJwqP`knLsj9Jqq0|T z+NR9AukSV1yk~Qs4ZS8P1>0aKjrVPkUdZ6@ojGR&CO;;KNjE)RP_K+V7JsKI*y9H~ zqH2$97*OYrbu0>D=2s6#`E^b-c(L)eC)q{kwYfPu=(=}#4sqfnkBf2J>Iw(t;9ZEI zb7=iP5f5-%{~PhZ{ci*d0XO%5BUrfq8^OZ!Um_gOzeG47N%K#%|6{PBI{+DMVD|rO z#JOsbCITWI@&^L%_d!-0=2R(2VD}*?Orr1L{}iEsF-QCfz_>%uMw|_ef(O9~GTs1X zk3rlx&vSxtL-#>5<1b7P#4{&7;P#iR*?s+}+(Bnm~}?ejr!^!6mpm!QI{6-EGcKrsh9&t7g93TQha* z{cx&x@6&yD_mLOhoZIsvnQL5^ zhF&i&=idF?O&O#%_!9JW(_wZ)MrF>VId_uCtLe|@M^D{rsG?-sk9se0(E~K1po0S; zWaReOm-882!PKz!HxCfxp%6AC2?+O4$Q+Ut?e_(A zbtp6lxdv)G0>?C7!oxrAv5o80BKo7Tmdz&ASLo!$XLI45O~t`FoY4izM{7}a>`Go_ z^l@d!s@f3UJR4fJ+TA!CQoN`5SOh+3S1YRP%a6v?O%HyKAl$7)@Jv?|R~f)eBVl2$Fmz3U{^{^DNjrww zF{{WEpQ#A~B0Or>c8lmia^S$=Su?R8Vx+6OskoX*zml=I29k{p6M}8Yje)Vao@MaL z9E3-8@VeKG7W$l2(qDC&8Jkq4ID57^bKt7x9Itmr=pg(m8>a9h&cNad^77xZ&e*dQ z4iz(iEmJsAkZMXlmA%a83!GUhdwgg6SXgVSp)&WcH4{%iD#@9Zmgx_nDkMrHx+}=5 zWP5R=VVx6A=Mj-M^W$)`jXSxaSp-99C|QwIVoUCF!&3(9{H>d*je)X*XixmfPK_z)9bVqAfPy;Cp8uPWjXYRF-R_H>o47M^ zgTI!aN)R}9F&x@oR!CmEHe3-~M!Bf+vt5{IS(RI# zc_LE})}z%;V9~xCM=K2sqW|uO`pQ@gkp&n>^V>2xoPT)x91kmW1ylKb3t~*jSFQwn zXBS_0`8qfiMl8TXaB(815qgi9635*KndQwi0$xgyO>_ggLYHDzWPjDk9%F$A_2zIG z(z52Kou!afD2X`@{ni)G<3ex;3SB`WfIE-}Vk4q1&{AYPmV^9U;c`Mw1qjVVW)kyK z1Fx9;Bre=P(RmCMh7e<^{snw75LpjjHyD}L)0Ej68Jo(?L%&51LTRjoB(g2rIn)^u{44TI7Q){79x}SHxUYy zPMd19RM^N(hC!(But-6+E950Tv{p?0hhk1r+JT${hE@U4e5Tc=5#SL(h0)}Kc?$R zDJ%dnM@X+ypo7znA;bh z`(p?43|homcn3i`*f5U!)%-30J{myCsFY**>ryG{-lfs)@Q|16^8UIV(6r@FA-@SV z7}y3UKhpP{e1>zvy-4|7ViDifyU7&^H<~k@V$Bpjga|$hAw%l>1flq1YO)wJlm(2k zEV!+4g@jS?R31$=wB*A5sz~0DgV;fEm7e@VSfj`Tx)aA9aumO6ju;+r!sWEdt0Z@@ z$j(vFPYz-+#p#O=VFWJ z%IS!cIQ6C$Z}K@2R6uNiB}9r4dU+v~S7_ppICuy=@@zuLHz%Vv`7pgg`#)Dxo+HOc zCJZR9YeyX4;;2K6VOAV~*Oz(PUyC(Qt0W;#cAWt14DU#X1P_?J!DLXxY`$PwrC_3$ zCmT}Q!FBz8P9O+8P$Oaul=AUiM&x>?;>%#Mu?Uqlp*>3s@0EgxQ4F5(G`=*6=^fQ- zHk07G-fa!A>~KKQa3(fFXQDR)cb)Bk9CCUmr^hcHdj_YJXw6MkHyy;z#DoDF1^izP zx@A3pdvJ!wM1*rEXA$9SF?cgyH3fcdbNCOYc2+ASR#d#D+ zofv)sfr*BWAPqU|LM~zp{ABq3ohxM=m4l9eAc`QRRLd4_wCcCqZW##?xlkEcB2*2^ zecUazFsQ1FE)yh|kv>Q|9)CFQ4-*$w09g5nuX;9EPspSBGZEOJzmR>YG)*YZNEvhy zTR%EOOOOGbE|(4q211)w~P3_O>LB%z22{oyZ(nPzSoQJjKJfUu z-1$$f_qZ>p|8g#m-TL0D`(Cn~VjW0_zd5-JGekx0W+U~&95JfXPnPS*Mm^pPjeu=h zp32sRg-|k-G!uJo$mdSMRgs!>^MVk=Q+N#cb)dyN2QEorkQ^mm7fDy_!)n zxoRCAhV`P?6tF0iEzTtyUCSVgN@=1^|5C4N9-5JGIr3EIbrFyYqv+aqry^mNQgp&~ zw{+I_G6%dFPc9c+Z%wK4oO#V$n0vSSQ=+GGUxtu+T9*9T7YI^>{zKjeLqrFkf8`*0c0d!^UD7r`x~1u}0AkW`*Nk*(cU(n@Ra^r-n9* z(AO7{-{bo+i5wpq;omq-dQ@u-*$MNOT^+f7E;h+XR9n>9RnCusA;vf_wS-zOiWZD; zyHb$p#9~~_I808P2bePFX8h|Vi@pr~S=~s95A(VVDx2^ljW|1)u}j>F>Z$jf-&brp zwX;ipt35t=tPzfU;K1y7%PTvPu&CD^b&eaEKp>VfSLSsrj2R@&i-JCbTYmJ>`C)}x zGHDWbwcT@)wQF&cAUD45U+%$aYa;cs--qu78nHLIq{R4wH5TZ$kG6cYYwj2Tv z$#SVc0I|EyEq&FqbM^DoYtQxEvqSHr^~m~mp5w&ke%@|Ai;iFH>}uH$UV@bAj>d4$ zMoY^_XOu%&pc56EL&U4@`UujWPBMWjl33!K@lt2lMJHlY|AzEzl>yO0w5|ec>|_5k zFeD~&e|o8uJg>+pharbbqZ>Mb`pi!@*sUD)VO(~d22Jf?f2^#R{6qUsTFafJiw`|m z*`JrHkZ!!RCXUcm%1xJ$^igH-4RsmiV?WtiFSq(30XGeVV-i3pX_(DQD2p2ZjF3tn zsqZ1>+C@dq*p|1!)ZWCMFbk)(JNinPDhXF*%7 z2|?R^;2_fBR+z6 z8$(;tt>@B4N69-r-^$M8{zX2PlwNR)YU{KhlIp3t z?Jd8rnkY0@%Jg%rM)Sbv(9KdMXl)Dg^MD$VtXfh~KTwmqei=B79h#B(fzmX$T;${1 z$FbB~UypArdrsqev2L`+1^s>zvjv~3P)uBj+-;6rmg^v2=##QdW^ivs$~-;&{oY41 zn}4=bc^FWytV=(jX>6JKQ=OJ%T9#)7;mw)6ch@#owU%eKw=#&4rXx{4*OciNnDr|d zmT0`HpJQ2?F&1Xh-nL0gbo(#qf1^5bPx9Br>mf2<)li>YW{9?`{ z_|2&Pn@YO*_ZO6b5^RGk5{+V%d_AlZVBzP14c#Q>e!JS)4!`OEH9dUeChvZF z(rr)XvGW3^o|~_C5nLshC>7*Q^Ym?^zsje;3kFWJed-eB3wf+diOQ z?l9^h8}Cj=CPu&gjH)~8=dUfHmn2@7P_R6Blq8|#GVh_Vt8>Pihrc}@&8vDd7oj~JK+!MtD>=Y85VohX zqz;p>3glj5H`yh`&RM#(qbrcIsqKuuH8o!S=~{9KK2^5ol~=SiHI<~bdGvRa5N$k9iV=BVTb=zVG!V7y-aQESPv#?pS*R+v#wLF#g|DA6kRITs|| zJ=mF|t3k2++uUWCAq>uO?pJ$Ji(`H6R2mX1#xgUNY-HFs(;xn>qg=Rx*p533dSri| zHAXVi4Ru`1IE@xy!yR~)^BgEpF6W2*-VcW~3eudu|1fGB=BGPf<4Dz<4rB-(dq+^~ zg)O_j=W!1gm3ns}aUqdWQ=Soq?LX@pRP5E6ra;kY7yFsO4=A|Hk2++IV2CA=rgV7dE zKKzN0oL}{EWiXKCjy5)869`JuLh?plu=Xl{AyQSS8wvAo7+!2+ez(hGc~W5e=lAQ; z&?ndOOFjpvRD5T;88B_RR-iY9bi}Y@@j%yg)8hrX3bSRc?%=35l{MF?DAR~jGzdam zVT+sVP)wk`0x_WBep0lnFVYJ$QH0x?Q`FDEx(le!WH8L1iNNAL0gee&&c<)!Hu4i% z%i^t{!cKn$Rw(eM@3qC~U;I2;Ja#w?00*n~Ym}4wob?hw-?w%0!cY2k`l=A~-P>94 zfbi_par7i&eT8}9yFA9q^9u2TTHPcIXs8y6MM&qsx|m4IxGceiuf$$vA1%dL3O;5thumT60%(N5l78 zO(s9(lY1QWUFM_Cy&kG@nHA&JwWAscE-xh1FNZWJ`JG!vbPaUBZB_L|=?G~WI(GE8|)WGQIq2i{CPNUyH_!vWRdi@X~b7-hugK2{6A zmoz@xuyFWV(8cViZlG}d;d*4eWwjsMx9!r{jKx-ju*(&@Y&F8w6a=HjF$uz=Mhj8z z2jXs8P`;1#TR`6Wm61+($&1FQ7+lI_KuZY#Rknx(n74$E1vQT8>&tr<2lh zVt1vV3PichtU!ZDb->;e`i?F0@j+c{y+|{@&D%;PtK8&Ju#eK3^!r%i+sl3c;4eJm z#MrSLZ1TvUX>;TZG-;Xwt`z)l_Uhm6`<@Je0KQj``$J&9Px#s6`60BVKwRm?-Oy{! zzh2)Ox*eQ=(!i-UYqN&Kr8^5JKAqFPt()uZVun!_z4FixQwuZxr*NqK-FnaaKG4{k z5H5i6Mb{yuVgG70o`x^7Qe8bg6aKScRq*X>`$jXIFP}bO+ zxR(}BmIHlt&(9J)Jni|X|7SjbnYFFvx8x}tQyW{8q~M}^1p3^?HvVSdXeoODDXKm1 z_J;r^*#nE5w@ltQ2g57rZv{8Cs@69aL|ed=mudmcx4t{`MbgaZ+gouhZ@%$&ZM_6! zKu=;gFAYmYgW7{jZ-r}kM+`s7Eq(zg6>Z#fE&8l4Q_551DS*EqYA9I9r7wg*`OG1x zlB{dtY^jnAh-vmWBs&uFwr+f3Thru^(G_e~xVK23dVM7;pef_{A67b0#z!m!kox|= zj+0>PTzr%OIR+p9e-9PL|8FicBS>LFP+vBQ8rYHt);puaGJ;T{g#AIrc;HeUl&~jg z3sRU7qy;VP1&V|Mm!6=7vp|f{!pwh_5JBTG!b#v?-xy?}1vuHb`TsMV*ofYe192mU zfA;TGGB%J@l^5h!$j#EK`4(zt7?^o-G!@-yRu2frS2CG+MIKhk+iN|hg&+@~;^u*3 z6MZF|q7dPNY&5aAO2pLKQLEbQw$ru~K2H2o7Q8RdXpb*-iJ=5xUHh%73ff4sCn#EQ zKt~95P7-o*((>_}*UF3S-C8EF#y5bx*ZW;K5FNSGI`Z}1{1ezZxAt<49CZe~t)0qX zji}~jcMLuwTh2PwXvknILE>*2KHS$pk5Vg&4sjV$jePr}3Ncb6zBl}OaCBM#ygpwj z$F@(@DEF$@NM7zhX)yu;v`v#&%^MHaZFuGGesjHdTf~FdV_kmC6sx&=696f&=lQ|$ z)pWbFoppC_%5Q^TD_e9q($DJwb7T$8wD-vXRpwck3=9lrDb5B@U$k-=Y#(5fzG!U_ zu#ah9P;G+Yo4vL4_E>vy)&0uw@x`vbwb$pXtu-Xwap!<=TgFYo`HlHd!Tetko};5s z?E@NFnte=mAeK(qvae)QXjs5}cjO<>ei()jaDENSHpAW;Y~zE64d~%7wp=`PaCiw>QMpwrSlL<*Y`KTB1VLj>T2K4$V@}c2ex*sC zrh|3a!pi(JL1KLN7(=*9&_osYaBM_D4iuf=AWpE@=hX==>ooQ@B3b8 z&I$>`3bBI?mG@YZ(>7WBNVlLX`Is0!B0*Iz%SP+7`=E1lV)h@`eyUPH0*MV^N6#+s z_A@EQFW{{akT{wS5ik&nq;2)0bM0FH3uuX>OHLgg?GT|$N83zESlcomc-tZ zMkL5qOj4C{{I;Vb* zJ7Q_Z@-+3Ij8kk=6Z+?kdC(?@PGE}gRzBlqG5P|U?BM6F{0qOk=5r3y77iO9g|mXb z6cfXVFHl21<@&_{4pR@K&DxfEA5+P;-n#`Qv{+1KD<9JaN=8WGj9O(1p$7^}> z36;nj9eL%UT_S6WkdZB{T_9F1unLQO*vzBdy#dcoolsnu2#baQKVmzrWjo5*3EG6b z8a+J-mEu|P-z0IwpKuVBi+K1-4eSZ9BY1ytRfrV1aWYX0eKHEJJf9_sk_@UCX(&5B zZyeyGAMb_8U|3-Y=!N*oQC~gf?)6)Hz+f2J6zz_;?xtr&2g8mMaYtPBsD z1vYAY?7k5*dCiZZ6qjZ(&Pbf>oOS30Ix!(i&`2EoJA_RIk0P1qGk!Gg#tw_>*HS60 z+`>o(qp9xGGgsJ3NPf1`5uPE&>yn`>x^F=Fsz*~G{=^5(r>V#(DtIo?Sv9#ZRTO0b z1%L?ac4KGN0)uL@MWe?EwaxQR$9rX~ps)Se{-Bi@MRbyN{Oo8V@O&;3*1&u8XB`M9 z%(2;JCu=fINe@+HTk03-9>m<8hUt$%NXE`J9E1(s*jYX++JkpphAt-)vqTi%eb0a_ zmn1CM*YZ#LME(jGJMI%tN5fN*7E3vExKdAW0-j>YpEW1I@vdwqm{BKMz75OH{&`|r zLTrM9iy-Yy`O?hP#XSGo1*JDh>(Vah{V@@VL)Cd_*jo|Pwc9&0@4Rp2;188w6E?ad zEFVGz2R!!NO3*9(YCIulLvdt4`I-f=gS}Zx?zT60lHgKcklf5)?4*)B@p7ZI`xib~ zckt5tTt(N4Sh-+_XiA)}=uhWiqcU@Nd9`8Syl#|;Pl!#G5w0ComgTKzrN-iz2$M3R z6=i=c55=pt)q?V*OZmi8S8JqWo2T(O##18QyFvl@eISm6_`b`cVqWYeh651w%ZKq~ z2B&E-kdsrBmnJfU)~KR1o6|m7J?23R5SA_H63#EaSnoOPQAUGx_e`Ic$dKYa@)ooi ztQ#~6?y_;6|=~v>zq2-2R7|cqD$I&S-}JO*O}Pa&;W5R zht+$FUffN!p~`Xp72DJs-xZt{)lMemf(N<7uH~AN{YWN58z0=340hnCuw*Y!s0=(M z>A&!w76v?v52?Bho6X=F%qA5)_V2A}%4f4mzdXpyvA#ZynA@21S`xQ@=ZvYz=JrW-XV>O+qg$S1Uv^@-qiF=F)s+YV6sO#AsPZCRTGpAc#6f9klYHd88yUOO1K!0~jMx2R$6jBz!{4vB zq$lqC^i|_gy1b(WTK=^HdPIni0_v7n-t)5d(JFYdtF>T{*B1m6`S_IUI2ye+^$}3m z30u!!#PacUD7OFUxtG64pvPq#la8yB*(4`$q%CNL}CJc#{|E3bP*wdUnDsGr?A95 zT1yUFJm~&&n)~owJ5GGt=m^MM>HiZ%_%x2Y0EP%R6ji7vKzuSMbh9CZqc_78Kj$u6 zAs_m1v0cwcZ=c$m_LLZv4-T9X9NrlET*C|=#Cn@Ww9M1KNS=Mc3FM*U#lX@2Z~{D$ zDX*NZtm*r$!K)eAjhFw#ihq(_lK`pgNdDFZA9{r1L2e5qm|B(k552C)_|fmP&RLC z!o$I(1#y9Ss$*W{Uv0BV=eRWc4~k1>6MuVrOV{ z?bKl@%0hUc#Y|$oa($85yQyk_ALS+c0Ng$;-P4D>C@<0IZ!V}0FK(|jJZrmSuNQmV zOURX7g*j^^H~5AUR2YF zxr$41&*b$JTyxGJrkj#TxI5tKfl<4rk4Q<{?RlzL5G5C%?oTKrnF@{= z{^s0_M6cXH82R2@5MCm0Ky&-k!Nw6aaZ6=Ak&2EJF0+7y zaX2pJxJ|izcxA+2>IvDlg3{=vd>WN%kzo$G8YgWgH7=`Gj!KOtNR%oxbwDf8lY<4;=;Oz~*Z{$@l_VZTl(_d;XJ(>PYJ8bSH*Szh%@U;*QNsPxwDq zfGi34HCBUW{8XN_S&0gJ0*;NP39GOIb|A{oEVVa3ew9s<&;F&8c6Lit zOW~j$5Tca#s$?psB0F<6RE?s!_)ea?lQl{ELch3C&P1h^*x(VkW_n#KjPFO&{5A-C zgG__YP8ZxF*Rtz3jVp{NRAWJ+95FlEVZ>XcW2uz=l!7v*r1Besb){0~&{Zz}^gi0SjEs235pK2Nh-y5w=X1CMEYB7m<=A~5PpIY|(uOszTvmf(c5OfQH$7H~I zZ6h@5>KKEX)eSvZ#-PPzOZ-Qnm6L$PZ)-*N87?G9{w!-vp7)rXztHm_vy6Mb)lst# z3o3ET@m3+@)Vv>YKRQzM@P=V;sV}kVs-rx9DoWzx64(ZAaOx@|?=)rkLL;Bzj%rBv z!7hiGBbZ@uCy;lq46r0=sdp$mkOAs>O-02x)(A@1x)}d=OdDKA888vo zO)42Xsp-o-;BXEPYnvHhN$_qDD?< z;~R^9b|kNRI@SxC*x)2rSbKwrHhKib-_v11bMUi)E~t1_z#_Inot>PRpY31$4><7q zKhC54Y&`!KKowbFG6}2$(qRAFClm=(Ody;J3da}5_=iILn>dUn6b=Tt5ePGZgouQ{ zgIu5JF+e}EC5b`8L||8FVsCLJY8Rar~z~=p<7GX}ly!9mQA;cojWh2cU2OdC{!%#)^*bwSXhBYH{Sgx>HcFXS z0)>zH{%p@L%a?}lJm~Uvu}McoGXezCDEe*>F7xBxx{eAG$0W-qcCJ5lqbti*=82f; z!r4Y&p|_HmoUd+&Ws7FKdOTiGuZ_*1Eu`vQ2G@?FOw6j~IL*U9JYB6R8@5yjd*45? z7Dx*aHtW27;y_A5jKa+20f4nTVUw^Cz+TT?H3AiA{G9NOcW#& z29t@F_{TG6^8$dGS*;t|8-;x2v%%d10!?d%ZSUtD+8}2*X(T+kXVNpEaK1mukf3r7NQIgw@ zs~s^9NS{hqkE$Se`+zhx#^r9^tBExb1Agy~@B6kNyLA^L>i21`2bbR{;T@r8RjZqE z#y|p<`BSlf8g$cr}(lzq$Nyolt9 z`Xg15?6n$YnkULFK-ZpIZ76wzcUshr;*Jqh=ljT!Qo!s_;I+0TAU(I|Epk3rKMjo7 z65Eu(2Z)_xItrahi^>k>kg=@kWre2%(WZCSR#HpGNI&e}^0YLx$_C|EPWgUKQsuv* z_8@$^;Wd0aY6p02k4+z6FWA%XS`M$PT2_TIA(_74OUyOT5cODmG^EfxOcA z7FJg;-Wdx0&f0~gGm;XulVKXy=mq2*6Ln4Z&^(UKJP-{q%K0OATVq=jw}Gf%Egmnn zh3t2%4(<{$SGn2yo{Fow3P+0YqIVBAjhh6;i7-R1)t>3UQyAU8YUbx#7Hm0_fVo5z ztG~EJ!Bx*p<+X?V_uI&Y#yemxvB0tO8<WI9q|>8!zR$HY-enDiIp?!ERcd1g%CJ z|BR)DNxd6jpn2Dgns>{LWfZFWk#ut(RyX&714?wVr00DBLFCzK#YDQ>%ECOut1bWJ zjkhlDl{#_vVCNyz8@bTZmHfTFDy0dhc0J z>p6H!Kx%<-XRfu)@0vfcwx=^&^!1s$#Nho|6feI73aZZ5=h%O-7}4prv6aj`Ed|GV z@$Z+(E$2swT-5bbJmHDG{Vq;y{$&`}kzk2FHWmRo=q$^<6OV*PFUo{yI{FHRsi&a zeZ(t(?!YLtERq)wF|wh!3^S<=M)qUDdp;2@aXkL(ex2F9j~-jNQ$x%m9B*qJaj|X9 zEvhuA)sZTG36cXT#x=nKqhXil-Sil4m|g?XY66d{CCmsDXZr)%{Q5$w7k}`k>y9Oa zvw5xsz9t<_-^zi4F?#1_2N$WPbqGCK*W`o&$KLA6>>qtUb?S4G)Rj1ur;GZsng%^Z z?DvPfvg)qQul-|>6!f#t_=g&7tsk#Fv&^Gt(9AOzM=@`;d!;$sM6d(e9JTwdH(H-x z7n!z{+)t}|M+tSLLa;rz%ec*`yr@9rb+hDiwypAl0xI=S8w%61WIWTOggjv2(B}~- zPWO*3A-%i2nH`TUs1L=~;@Dhg7OpMvMY^*CNNVdtQCh1*QT%UU^|tNMm<`^Bv>i;5Z%tSM*r3`nfD&PsS3UPpzb-nsq*CNB4t zmi`=T0fUJ)EtK?~XWr3;X2pZR{NX)Mng@)YLsVK(1na%V}{Y3kMg~Hx`gH)5N zn{5nx#mUQFq3VL;SkTz#N8-jYWAh_U{V_?|CwY7u7OLYT_Ei=!Ew~g-irs$8w3RAn z!!oxB6lT!}jnb1KUs;y3+FO&^VC!aMe!hy#+o7W^-Gwui!665I2tEa1+VslDG7&tSBn@P%W< zs#KyY68u_dureu{DE~7!S;C#C)|L@k8#bz7m5!??+Ktw+Co9o->(tg*Shm&H!}4u} zYl(%07Hw^jhZz5ec<~Z&vU$GnMr_|`V4m-yS)*dlw!>ff{f$!xFYgHYi}KT=C@i z^{BVUyQ8t46wj;9FutoLHWV>3w4P6sefQ_0jC*H9x|!Id`bRz(S!7(l(US#1N5ZvJ zbCSheQLB_EWa>e#a0hTJC(MoS))6Exoth{5`2~E8Wn9~ikyDo=tsBv|P+N6Rdna1A zg3N8NKW%ax>;DJH)9@Myd5L^Iqe~KOksv}fi-G4@%h+hlajI6`&lI;E)BBCpa2HfT z%tqPfdea!<^Cjma>s?oJqELOQM1$ebww^XB%1u_{Yrao!cTBJ3dy#FQDVfPb<4x>? zwG5`19@HM)MuG)t_I5>A&@O0pdp$_gqvz++h${WOOz<+W$7zV*YJS=qwS(O6eH7;y znIB`ny)V!!d@BTxSq^OTPjU&h2M2p+T~UeZrU-GJ>W;N( zS%mA{XuSUo>N$e!G~?k)C4zCE>b;-6Y2fb9|#7nJNa{V1` z$@9~bD~nB5Z)0%mG7_e8pEcRtZ79rWt(Ai}x-3t!e$CL1PiH8SW7#zqp1hrt#~G=k z`+z_2Q~Hnt${6I|z^)Pglqkrnp|;_&clN^tn|#JyJvcwNQ92NcKTL0b~ZCI zx2iX0yXK#^GLd1(T<)<{JYO;(JvZr zTn;~t@+geu_`R@;foVmu+BuAAmh?cXziGv#2|uoH+ewMUYHf&4mwZji3@DEBFm=mk z5`^@;meSrY2z~$3ifh4aWpUi|POU7DiSksn@jql=^y!=#O=P(91(WUzfDuV9khE!4 zAJOK0xGw+7h=Im-XLa z2mUNMdJ5WeG1VWA?cvP!cwg&>r}2P*yI8>Q{-H1IinW0CwXfjveCVN%s7)Bn<@C32 zui+hE`y^a|`?u5QE}%M(dTUUo42qFb({j--44hN7L^I!H#v5BpCI07%_v!iY0Lu{8 zRu7{439RTJXDA1)pNks%4~~wS`96 z2(4#ad)>iQB(-_Qdui7=+!Vn;KbLswf_489YKF2|Senq#w@1n9ozkg@Ces4aBRGu==OnINR z3i8%7 z7;;c1H`si5IUw*iwx|FC=1^GwvM|OQ!ZCqPdBFH0ArBZ|G~xp*r!#rMitX-ycYlFg z=J4Nx6u3WP=nyZ&Y}Z}1w&!F+rw(l@8jXt)J0kDVh~OfulcRB7))`tvm!7;yM_|Wd zO4UsZw+f=J>t9FZQzy8SnH6pHU%cT3ie^CVX4HQqDL@O0g&!@A@f?zZ0m8CVh}cO4 z*2rGn?|0C9by?GPmIZua(1Wbcdk@ZGh`Zkm0g)DOnBG{?HxIroi7Sa6u#gA;vPL z4S{C7h*6=PY0ouwvlRL$jC$4p#uvj(^NF0Q=S+WOJK&otz45m_Nh>o@TNQs2`~l1s z(Iua?zrG$hwo$00DUE(@gbC1Fhbgy$0-!@~9Lu2JzjN3-@`@GV9hqZTnNxmuI`!NX z^R7KlSo@0Yt&9|O6~Zr8+P72tRsKjwLl4S8V4d6&f7|kI-Af4w<3~-!+zaHn>GG8aOo9V28jfvVpr zABXGCv@iE5wqsBtNH2#}YbBzzV*Xa0J_l3lE}%%_BI~<)MJf9Xdm4>-)YgL7!=P(bg&<(q%g*q5_OTZ@_{zUU9BVtfQhY)jX>^cbH}8qI@+s950Xeuhc|@^k zqN!dtM-TiDRZBQi3=R>(0+Fo;%i+CI8}hgN44!uir`V&r<{D*V7>TCOUd2kTj4Xy& zVdhw2NTjwUcoX_N#q>E?k1oao>|!niV80j` z&n&2t!p-U6; z#GczI{f#3S-_yE ziB9tix#E7QgQfX{9z7EqD3^hiY6=P!Ndu%IGgmvAq-T6!8`t+D$Eog0>|d-lY4vUO z&!Urb>?wlh9J`H|CErJdZuZ?!_FK48lu&(!^p|D`Zq3L1_y8|Q>K?UGHhh0EDA6I32!wgDZs$O+o&)VVg8`zWN%@?GiSv8y_nZOW;r94? z0mX*aiW$;O$`?+be8H1K6=2id16KSH{e*%S=a+ zz!1=I?P!veoOXf*pbb^?phoTfiS&4&0I@_3E1zXoU9i8G-KuvMvxvKhP7yMhVv@4f zv;4hF@r-bA{h4W<0~uuFB|IQlf07W2M2%2%1WDsx9HPjHmFtB7g> zFWj+iPJR~tsBG4|jU=MD)5sYuhvCrOZ@K#G2VGZ*$f|T!1N>xm=Uo6wfiKW-xRobL z9Yrt;I}`dne?^uXBWXJq-!XFzJ4Ol|7JI!Ew=!0wLkNeSn9G0=ADaalJoW+y%fYq~i%tAgOP-h{%OXYA7h1eAUzj+S2ymSMaH6Az?Mi1147u+T5v#S84i z0^t@n^v86kbtNo1a}L1iP0V(MU0MP!f$gYAqd8hseT1m7O~2qP>#;lC?t-B5#nu&$ zyJEH^>yN3jWWQg9hqD19p&7|$85lo@h z*AKm-ptTLljDx2vN;~`ZUKaGsTAEIH(}&Td1%pqvTk)IYe9Hi(TciP+yCdUVyULr7 zYXDrP+9(H=`gjt`fjM*}R`wPDoffQA|DdAG8}BbCLmceN0eMq)r{txtdTb}E?B|Uf zwz$MaslTMNwa;EI-5h^ul-VBTPnUa;=n0iQxfN5lqPB}4GSgqHzxyqP_E0$;{mv0S zq`L)$zJ}qWFFOywO5(JOjs2ns;ZrNt#cG)C%JnBa#KT)vO%q1skyHe;m!5QUE zF;jXPzq;#+P}YzN=9SHFN5~OZavPKI62wGnG@O5zy*48Prn5a~KkSt;=lXag^W$cA zQWc4Pa2eV2=e|RQ+t$eOJx1Sd#cxz_mKIS@Oyp(0!~ZHB-b+!(mFLFuu1VXg;6mc8 z3T;xjy1+HU?WVX-Tx+rMv^aLSG~FCmuJ?>=bhQoXH>+`0&IGy8u7na>hdfs#8vIxG z7?JNth(L@JfGmQd7j~y$?!6d-5)H?YHgU0VP!Z^htD`!(j1#j+{!7IZ#VV3_f!XTlBBo5ZCm2PQ^oK&!noHs!fcLSgf`U zq5>9~s}F=&nBQ=|sP^6TJW4755+*jW@%yM1;*LcKmpsqp?NbOC)IfA5`LzES-8^R)a`!oL5Jb);!-MDC07l|08HyBJDgdUTaL z>;g?KeSco`T66^v?Q5+(nZ9Xv8bk~Jn?__J1H)FU85DCg^+7MXD=Id4c980hPgO!5 zPcK>mc;S&lprwB%*a)IOB5aVb4whAhhCUVi^n0^<${4a9xipB2_e=A-EcvK}#vkI& z5(2q%#&K&|lVmWKxs$*TGRAkFs&3OnTp zXJaNRzha8aH`MhKX$kbp9)t-4)OXzA*TVjk<= zJYlb|WBRke})MY^w@41UnL`n742 z%#s6ENMK*$@2kzMiu&`AXFLY+Q*cdNZFj^{5LgDGrZF_5D2e5Kp|!LYL%kHmy50>mP{Xhb~1VzcO^hg(`sG*$1l`*dg&;}E2D`bdl-t|)K4x|KN!a1GR{f41 zsS3G~vxC5b4vAT5MbFItiQXD< z+~vC@cRPt;El~d(Utbv(N7Jm0yE_DT*93QW5AGh^3A(szkPYsE;O_3h3Be&iaCet{ z!}GlFIoJ8~{n?#unQf`=sk^7D?qk`{L}sd(k9V z%rKVdTeFYUWA|*xR4=$jjwt03!tW?&S6qp|t8N46h}edlA~=$l|k@P)JD%MG+^$J@WauulQ9? z=Ot896hov-afBKxGwbY`=9wJmGR*tisacxQ7DKkJge9-{9i82%*I($QzpSwTBA@rX z|22^017pUZlA&<&ar`I7J0Ax)NsdJioY#rT0!ES(@&Log0)+#kg^0nGazcJ-7^HL{ zPIm796PW$v-BLUb&$)kBK`xc40c-A0n<5MhN)=J9Xvvg_CA<(y$RALDt5epRR{TG= z?TxU~kCl4)l%2S)MXZSSA6&ugC#3dNcu0?ZdueE0akkR@oZ$p@k80@k?)^9~O{`;< z#ZSGODh?Au2z*&l$#2vkN}dVuUFJGZE>A$0%gCGG6`Ux-x1LYs&j>cpdt(t3vqJ1Z zxc@f3Y4J7n7a6Kq0=&iyE=j658)1i7YNS?ma`}6iVC3+j*bQkcOwM>X5f>;akqLI9@U+ql^XSciG(T~Nz-$2c1a?y0&sWM*tDUz971_Q zkhO%-deYAVYQ-h%T^&P+&fshw3GoO^^L!k>YF=Mcc7kyrlC6|y2~QivP#A=ReI54S zXW)dGL6O+-_se9kZba)&3S{r%c8WJ-*z!w6WK5d;M2PCUz+60{jhh%t?NOg46#V55 zIq7#7gG-r_>h=WMw?RL$$wE~6iy~!21G#@OA`?IVZdvM27Qm&Lkq0(qc6BNfp1 zBBVy|bWnHEe0nM*C}`I&$a=TNB_chFz@peFv2mQ1tik^`*dn|cY*JBXdQ}B zl-c-dy;rv&=%UR!US=RjZjJ&C<}u9P19Ce}SDls>k&S%|Rttd!DOth-?~V&9anOGS znK`zVWupy*znJn$zun(aSN0iQ$k7sM@VE3bvZXQ#1Z9=KKWdX?34zf}Kw@=%{^+;LPK??~4yFvwdho>Gd76iqSo&Q0In z%udDG*jJqP^CdsR9N#X=vg6d(LNArPUp=~FAxP-apgf%9-4N-Om9qiqFX)jrc8tpv z%aF}0zfIU;p-ga~BjnRL8n@^J`B@V?5|cxla>{%nF|$5V`B~{byiYKj6WQI?HucN>DWVUlhsiRbuE zdL#>)Y5tA%O%{CV!hLE^6LS)(EnRKExH5^5+-yasCdDVHzsyXqP)j64ps|AeYqQcW zS%DKfqbN->-fHg`ckv&7aj{fOaNT^Qz}^tQI74ZR42IPVy_vqoBZ?a8s)IuMuPa=5 zc`Ce{g5nA{^sRmd8k+hnMk}9ks*jUqe|gG4Hd@+jj5jUQMU-mpDuL}zxd-~F52TPY*OxT;1K#w?&aW%nnAUQA-R9HFL{`T`2?uepKHJ$ z&{HW54@k8S@}@wzhM+ND$uGaI*$Z1i$qK;(*H%1LNkmS%)ebcN?-(#oh=Ov|wB$a0 zZIHf@;%cd>P=`Rlg^l?5tyWWu&q{I?df)NoR!J~d>^EF+VZ)Nfs`93%jsSe9S<6fk z>Kbl->Xci?tZ!^-@z?L`#Z^i!GB|ZLL7UGmq7EOzvM*(kJi4)^BVD8Ol@SPBK%7a* zJalBmrJK7p0+;?{)QVGR;&&?v{VO>gxDiU(rGHo-h;4y{qiEwh_SRjQTX?Y_!gvMp236A`N3si=PjNd*`kpo@w?$OVw4 zua>2iOh6~TUrfvSVsVyRRD&*+3d-SFkMoWY&c4>TYJq2WT7M0`Mf}sw;ba^x&nRa{ zdIzyf!U!3pdexHQy^gAUbPMn1Ku(pleT}HSYo0}?!W#h9?lYgF0gT%B3+ z7Xy1@;r1$eDe4E$g&Y2>Kkqh0j!X>M$ ze^Rh+0R5u&l#>jHkMrLXRv?4(KX$>KU=Cs~Jutnz z5Gpv1m4zHk-YSa%PS+4h1#?EhGyO{+!;TF&B=~3w1%rc?_?WJT5~dJ#vEL~t6toLFmjVci-19al*5KO&`2giNGw2avW17uz*9DU+`Ak0 zJ(Dj_@TFe)L}Xd{!uv;v+In(RwWH4b&r#TgO10;qzhwFFkue$>+5t|NpU;(r_meLv z85)f;hoFo=yiZxDKG|>$D1cL;_1ubquDZC0_x17gd}}i|;^B&8ltDe3RHi;l#j(&M z7eQdM`t1fdric!hI@*mRvyy7>%)@u7p6qA#{kfptr%J z^q9(oDD6lXqCib>MHq-YDTD|kSy+wUlEX&YP z-(iq^>n}J_35Yl-{f-2qD8u9px)e~9ar#8YfmN-3_O!{tSsmT@@`KJr<5CZ{;DXT% zG%X`SlUePB=?7To@8y%LHXbIy!c>K8(IZ$m=rBM*t=Z4rQb9cMD?z>kSo4lyIstyp zJLdO&C~Y*}0I^`&YM8uExZ}lpfX$Ca-W{OuBve8Ov)tEuCnc7rZ-=L$X`-KrTv-FP zvRuf7V4r=Ug&$lAR>y^Diu{bXsh)qt5o)3n=BO}_%L>!RGV1``pq%1;Kcl;T5i>d3 z8h5lRs@s0JH$ZbIeV`N?Bf*n_xVeEP>N5fEvJv7kZbbl_q=$WDJlIE+bKTxtH?iSncY*y>l7*m% z$wHu~T+Fo7GmSxjr6tOVp=b~a6&~IrsgAM#WzrCZBwV`3vY42FX!PWxSYAwkHAf5q z(V?k4V3hx>&>djqtS2wsur3|OC=AZt366-d0rgJ1GE{{^ON_yyYh#Sy3HpiXA%%x? z;!qF|P+=&lh~+78FoYJG*t8ai05d30bRwhBJ3YOP(bwApm9GHw!%1ozh!s}Uj)4~N zEcwT)7Ey!!J)CmIfR0?Cb5azn0F{8aeLv1~Y?iV(FFj2V1{f+hH)%FDCa{P5+*u5S zFEYmQt4qCi>U@AP6nY6>J!3JB;a=A&c)$|{U@6TBa|Y_h-c*oJlSC#);yp8?s{r@; z6%?wM24qCb;KURie5b~?3k%LniqkzFtucZR4vSIknHm{Ffc;U@ceoCV|6EZM`4ONY z#kG~!07zGJRDtUxTRfog4Io3HN*9#61R{KZ*2o*5=D#GR!nF-v0I%ti!P6TV=SWij zq>V%h7c37|g1G%C&T*_D5x{g>uU-pGwf$h9R0BY&=t?p}@oax86Qe}PNJy^Jf{fta z*$9x4-UttTss3Xf8-UlRc2WOR)(^6GO8yGNw-r}}3LXS7QAXz`K^HS3xPOO^5$)kF zTXg>3LO56?2T4%ud$O!avrMPHad&gHUQ8D;9M>e0cn-`vFQD z2H8;y6$Gyh4l2(_M1op~4T&-7o!os5`-yrSYewe*2=UN=I8MufsTb#C2nJ^Jxb7|c zbGad~Kz$-7478R@qG1@;dM0fx*XYO>msTG!vEwp7>Zv=3&R=|-L$Dx$$IlPU#?++n zv|#kqBIyTOn*DLO7icvqJpK$QID0M}9ccDsBmuSnXMFaA5SN-5?;E#i{=4{WOb#kw zYp|(X9HZe242>Zn9G7wvU{)6MmizTE4VN04qHpdX6p31KKYR;hm80_rP*zTe+wZ6c z=I(MkXeD|h6yerVNEo6>RtA%BnbUp*opX-&4k%ZdTZIPTwrwsFN|}8HNQWPl_QTDs z$JNn*brnR;Z9yzxp4JA8&iEKRAV+_u0pd)lOTm%ZHwM^vy*B;{C_{B4%lDo`)Gfev zk`7r*v9$A;Np^is=A%3E`JQA@SsX<3P1pB<$BN2c&gN%Mc*HrJ?~QkW81EkH~Yk zUvh(cbv%NR=KEjKjg3DLIG#fzniPOfx;e;VSv3*O;*{(};+)Hhy*=21{9g*x#?X)$ zK~#VOb&k^0b;h3@XVdKYf{R}`8sN9p$LpIpuTR^X3>D+J(G-_xBJXZ31T_zoX?DiRmx>-g(UCfwD2a`W$847ZK|BNzP zRrkh#iZ9TLDq^SH$OiDF+AUgXVeE5GysffbbASjoJhzuF=ASQ_ikEkua3uM!s62M4 z$lAkf6z~4IbA{>WeDXw8W&`KmsTLhpKxE_pArEfRp$7<1^{m5y|2 z*89)~ng$4CKi*cH_ne%(G8|Y_*BEw-JyWH!b4!}X%<7m&8fHW=c#ePa9H4^3%IjMm zV8(x$8a&(Q5NVaTTyU8r0a8449woeG-OH$eAhTheGy!mPgNsWRf1p0cMj&pQe1Iy_ zuBF1hCrqFXr8?&#Ed=HaS*rMLBa@G`M?D5Hk75Wo1!cmH%>s?LOau5&sjPQrbxa&` zZpg+aAPh!P*QvEtlHb0rDL3`RDms5}Yw+ z0Y9q`C+W_-M3!FCvB>^%eK+{H@{r%=OQA7w(%|`WQMseCuj=i4)A#D*_cGki10FOM zq5^^LZzG(#pH4l+3HNRM?gV{fR~3I82>z~K_xJ7e)0!33>k#fX%FVra_4Efd)tgn} z?It+advigF#nG=(-OZ_h?jJKn3=_>~jQ6%qJd*|jJ2E6a-%Ty;-qN57&su{u&%Lo(gbR)3R#SvC@z)vn zqo;H-?#->05vF!+*ty{#YrhfUFmRG?Rf4oy?|YCvjFVHg^!nei*;~DW$oWIu#)B zG%MU3YA;EuqV$UnhH-GVqdGEd#my=|z%OMYyQfr(p(@8LxB2@4z6Sn^6i?7ilW)F< ze%>#FsYAK;j|68&2CYI|FRqu#!-61&bA5~T?0HgJ;}wKQZbp64N4(N0l}Z2Fg4nNj zmIMB*2`H;yoO!eez2-h=7Jp#yC;25q6F?{SjY%l{?^lZ^2cq4S)duT#d!9$OG4*qC zdpD`L?KOBJ5eD5Oi#{rdzkffbh!jwdJ%Jhj6kNH~;_=a)>n8nP9jrVNqLbePrGL(p z@o1)hX)*Pi#N8Dt-~V|+b7}2!*}=uGUx?Saa@*hVxdv;+$vtP6{;H+tMLPG=%#u@u z1yN*Jm2{xni3kIKtT1MW7I_C9et!Cw{HI^$IT>BIoC^|#Fh`)Spt2WpwWvX5X+s}`uC2UZdEq_EJ8scs$3KPtD?jb@6gTf zypM{r>3eYU?_>6Ew(Aw?f-gHKGY>86PPlQQH575q?lOGb6))S@Jcl|aa(}d|eB#Mw zO?8-}EGt8pJfiDTiFAS;QQGnBEI!s6`Nf0(DS0795S`2n>e|Hbze2^rcl-!b!!a0F>$yMcevN!OX8u|6LPkH=>PY-@ zfs*s|rCWfCvqI{QM6I?<;-G(X2RxR$zd>}hyi)(y0_mqx+fVBmvumgKTpBhs)d#$%t1M7Lvinm|H;1rFwF95gsRMUPQ!4A2t&MM&+-_@D>;B1= zfaz89`zt4l)!6&nx`wZyNDI}HqW!CCi(gH%2}`#0S=h56fvslFbro+;YO z&o>muG+XHivvO#J^B)wKr*DqXTLZP0R>1^9aM%B~0>DNsahq`5{U%vmQAYO_=X@fq z{C8UIz+ZRpV6x)2%_t(kH$(hXz)OT%Lwgq#=l~cK%Y?9$k?RLJ3|C7rzhCr3(HDhk zf*!`(#F{42X^IRBWc@}0==+ML(awlJncshulTi`v$N;pR(B{Z6qd;~Uq@Px!d!Ub@ z3c0$bj`I99Tt+B>5|>eja6EpWtB&?O&Pi24o;b01_Zr6;&)uGk3sXl34Gc}y)`pa5 z%c%~~)rE`m7n>iv8Q!6)@v(&zo(#aVe#Y|+-bozW0yj&W9}8%(Aa;-re#_Sls|gmx zclwA>rERbZ1Ji_ykB-GOSBO2 zzYx+hN+MJteZd!DXM{K7=DX+<2Ju8&`&)j+0&NP_mW{MD2Tte_^gDcn#ky7u!=b6f zTzX19_V@3;0;(9w1RQM@xxbC0<3K1^GV(P=lh1$fqs&yg1wm zh#cUJJzN4os_}Ym5fv=ac>hL|{BPFE}@!R3aA1GmQit;GNI6yeoTy zmGKb(R3<@RPrw_VR)xdw6BC5$y#{o8d)hE(-UT-?5O5u4*+9k;pP&B&L=hSi1S<{( z(i&TJu6WrJjl!JIFT%psr7(v$09a{ZW`RXsrV|yPUCS??VoEGxu0%&cZ2uovS^JF; zA2P^cV>6gFAkDnA?aP++XEV&cpkwF@+A@y#TuWNn6!S%Br~_Suh%M`i#SEa~(3n^N zblOo%#z5mf1c{0l)5Pc2ZeeChr5*hFAz8K2LRiibQ-<=ukHHK;?SLWMSk=T1-X##O z!8sRQ)Elbg^L;~=UsT?-Or3vGrJ<(fNOfS!8_wiongDte8bklPUh z8O9TPO20D`*lHm>qL)+~s^yxW0ln4m?(GAF3lKr3#st0u%uNRDQZ_ z!I`z`?-7ISO*VB!$yam%M7IdcyU7cj2s{xxR6gi4I-%*rv@NXg%&J;EcYb= zSSw5*fQfXUj{d5V*n!cho8ktPz1E^2h85ZBJblBIN&a}p6<>+`$14ben1W$>n8HKK zS9<2AVPJ#o0Q^{EVqG7Q?+z_sUZ30stl+H;N~{{LhB{mTR@7(X^af{Rdg>m)c}jPr zR*{3IZ%7NiDtzn2p_T>Gw2-`W1A+S2RJ24qObtcLf%b#iAE^>6c>(b~j?F_-OJZ2m z{Z0VH`#!GFBsLJsTXA;AWLebxbf5TEAd*8Z>HFeRMS2v8a6e1Ez>^L z2aijTPe_S{`*UEV!fKDlrfa_Rj;h)V?IjlOAk&iQUga!7NDhW#I@2z!uk~8 zG)RFwGFWkN@@sJwFnZ;}4)=3$d_wW$ld}NYf9YfA{aFTIBN(_z; zI{2S7kS&H5fSXKmDZ|kOGOdF`o!=kFZZZLfaVsw6tN?sU`T~ev0<(I2c=ntrrSm&S zt%zm$y1&ptAu-UZi-c4fK#k|vq)!rJ{E50E%Mlya<0e%|UxEP8IgTGNkA=p{AD27x z&v~Dgf#w^gwC@|d2VkZjuz&LCgZ>4T)|O(x0|wCvljWYU6Kj6d)p$RJNPjg}_=86t zz?Y;VfdKyn5(XI`3<<5=>K3!u{0V0GuDr2y)!;Lsv0T|7!li z3Bh9g>^nN$8&Ut@N?4@q&EWbBay3ckn+PVeV#DL?E}-{Ro4;E zJG3b#FTPdZoQ`ZgoBHY46}ikhi1|ox?KOSCxBk>1JGxyFv$d)=`c4S#cN?I0sX6TtjyL1m@!ZnoJqiBEAYJ`C zL&5)h@5D1#0;8k*MxuMqNAaE2i&uo(+NR&H9CHD%`DfyV&OrSqBI`Ka6^6`P;zEA1 z`{U+%k&}9I3#!Y{wgpC*rTY`lS|H3%Z*a6jaMX%~JsP)3OQm*d<=1u0cYzP@729C{#=5eH5$o`fGXTYMxUv>@oC;CQ#~ z7bG~5gvrV5zQWTSVJm{Kf0df$`wbkjQd17Atcm3t+6 zfYH~dW9f5x1;C%7Yxerg@|PPIUb)&>&P(_GH3>GM^;x$1t5)-R(&w6~XO6Apjef3i9Tu19F)b*xNNm(GqdTEJI zeD`4oc>jCm)8&a|Aab^P_!Pse*wA`g=GfjXBYlPwV#6cA3;%-^%mpU0{eBO_KUA5V@yYRUdTLJSI=FS=4tHR7`C2Gwd)~2 z+cLT88itYSwf;iLUun0g4Nbz$E^DL={SlhjQXm_$8MZyc2Hp)OxBl7|$r>+q7fKkP z($4j3diAEt$ZcNBdGR8hdi=A_w2zQweP;iDU*xmvg94Il`~#>H^;KY6u+#SFQ+W~* z;)WoVF6P}!@dA2~2MYU&=3!k~z|H4R3d3qi~dz1`X_=LciTQM4`dx=_$B|^PF+4>s=v8=U_PUL0^3>% zF+%h5a)QNX1qeX}IvvDCVq9xyYm0lr*IG=0!0s^VV1;aZVaS)dA@ksyg>{V ze0}Zi7edOAY$S6!_cLcHrLtivN}|4cst3b=<+kyNdZvI(?>b<|G`r;>642YvJb)udk2*118_S}Hi*5-OI zA$Um86wmtK9Tt7CW_n-B9Ts+C-p3x<4UNm^NL>N-lFo;ux!;EaPY|fwP|M}EtwZm7 zB@EIr=H^3dan&+IyI@gyG9~(P+{v@|lY>>uZox~3}fI8>OB)i`4`J2R_U z(2cYeMQV#~f{b|W4+msZrWlgPSqp3wqdV&)Jmct(dJz)x`faDp5e#$7KYVxS7;5n1 zXqaHR&qO8LQ_a7S1xegG*lX(OX@3DJlrHKkYC0|+pXiML+)H4o_j@7*`*{n|g2MP1 zF9mrGde}el(3*X^+U@=xyOg>xm0ejw$;4>yn;E-~Z>p2OVFF*BMl~*COKBjm*Wt5$ zeJ)!?cq8#%N5u6GL1Aae)jgX7uG9*}(-P&TMRAzn@MxgQ73sZ2?R+hbG5S(nx~#Lq zLGH~%;|}0e4mt@bET`mNmw=#6wFa9~K_7>P>U4pz#8kErYBzaRt?dVBW%{b}+!t+sJKJ%De$)Xrqm8jG8Hzg}~kXa4eWypE`K zoSd`7*s>{o?n?#UDPgxY9O#$w*L{=A;cA{KwZ7`IInVRh**kO7C%gx5pvvKEHR)yVYl@=8#q3y;hBd#uT3Z>#J}@{$2^zM0d9PFEuRKZW z;o=a)3f)npA2(&^@i6MCycW*C4(F9@8J5aYDv2=e4gp7yIA9N3(LsBuurRJ$f6bb-gxoPI2(!NVi&J2KeThSjr0qmr|WxbDaOsD))Qb3;~7FNfPG=y?y6@@utIP+Qf+uey}I$3R)g$B$J=@`NgCuV-` z;2e1)6dtjp5NK}XR_k!$_>z>6*F9-z-_ZNmJlh}^B-wlIu>Ei!h?-SicElaE8iUYpYXNx3u#MZ}nHcEG;yR zF${5Z>{5$Q`U4=2M3?B^EOlZ>Pae~8DTM%5zr*$)@SkGP%efAWXtT221K5clpl-ziqI|Sa~EW>VrkX@?#6>CN$bX5BKOu-@!_vi5Wz?abm!}~87^V_!y zbYXj89~8Zr3Mk1)D?Op$>1a92ZNi`p?ofx>;29Nbtq7gBA?CrYjU_AoR`hU1Q$-ss z98l)dyImlGEN%~VHYLhOVt8lq%m7p&uiN*}Uz`cY1I;&(E^Wj!2S_I#)z(p+-qy74 z6g6!E!crS(u%)e)I!=!Ag5GESmF+bMHnc}l%GA}nX z^UK_RHPvN)_h4D$tscoEGi7AA6Bo8q#r>H#24+{k>bj3yM|^F6`!D&@ zxU-1jFSv3F&Kmu|;8uK9Pi^jCdmgXg0_mU&6wW^P>RQ*B%(aMy26@ohKpLU*=C@ob z+QbROyUu&?nj1!Fqd7;#u^EU=@;jniXSe2g9fMnu*KNM@k?C|xGo0ME+*!_U;#+!=Uw8+)ErM`2&ii?6 zwxuYw=6d+Wy4t7-B8&oie<^`#C_fL1PYErt4ma#|`<`Y~EgTX)xoHhK8WM;v>LagA zy~XQ7+?w)a)q?j+@a8AAIxmd=|2!C|iM8V(;d?A+=jNp-Wy%8w~Vb2c!Z#C|E%e3_9i9aPYNRl8qbQ&W1TKgb)r#QC-oHdiG?dhczv#j zXG=xd?}>fcYUcQP}G5VO<1QY_(ayeDbeUBflv$j14$x)Pa-cQn2CJf4u) zY1{;hkn3we7U3%CB#J{EJ2%SbHu&X*w*esJ;+;&N*_`m9P4c##S-)W&?JDU*K>}$I zigr)8(^q1*wR*-7Cf>TKu2=U(3j1*r)Y>@>%Z=OMbmQ)G_zJ9LYfd#)hqUq)^M8eq zjKEckHeR0RI0)9?KBqB!&SP>UQCy(tQFQ2Jr-(NZg$Lsn_9_3w*e(wcA}(HdkRPIs zeO5pZrLCbK>fz!F>226D3xk{O9|f7>``E68dgNUGr9H1Sx#;oS zY$&V`_C6YX1UHp}z9|utGGyP|`SRWj3C`7rtfT0E<*#Glm_Sb$%z2FY0y;hPklL*v zUgIKUL^0W0jEjw#W4aV)urH2BbB5#gY14)}I4MS}3SooKLaK;|CjK6?iU;B=eTFR&9$%ag>row|RHvu3Rg6JAJ| zjacb_kZ5VJ>Pa0i@^f6Hc1=+O_9F>sqyO$l3r=tQkxcYy3}e+A?U(U#z&L#N`r*fu zu*9N0`zPbmxQ}1dXv^4zg|D*KrEC5Yn#7_R=Fxx z{H9Qzf_SH>_OT~+iRv$eF@@j_rU_FyTz2LH58AD;^Go6$(vV`6V6Ejc_J=F@KGJkZ z7QvgwJ=%04u7#moanc92#v!q=KkAnIUIc%4zI}SGbs;Lbt{Q*;s$(m;m&(EV=Qz*_ zGKcpy-t({?4rKiK*?KDPIKNFsTy-An9-F6JrTO9Y$^Y=`#q{sAMCJ)V2+L%C72Or3 z0QYVTKUwJU_n5!&{3exq(Dhv7L09@#rroT6{t$Fyel>`Lw`Mcy@LI+Gr}XV;NTUw% zUfDU}$HN@+ta6K7<6^rztahiopQ%qR&pfIJqm38m&mcy_C7qyqRLz2Fl=B*X=Mt&Z zQ7>M3Q#Cso-OGDZS+L9Q==v8~+h5&T`Dc&=g9$m0I79jdI`iLiBPw8cw>2f&p99_G zjTieT+e!JSPEUAegajWIA3CPW2p%6b10ijNDtxkJGW4hR=2 z0c(ZC1RBVQ1_BLCL;} zSqU~#M5hBg#t0FBa*b!EkRz>Twk3| z`lDSrQ77$NdqxFgfXA0vcG=ff$k#25P`BSi#6!mDD)0=gpX%-9&XQOZZBQm@uEx$7rFU~wYTld`|NNO8L+^l)u=6}+Sj$DI_K=&D zs8xS-E7V{Cv=-`tQTazunoC$|@mB<`&OF_$fY@Xic&T%thqK5ot?JqY)kydUp^#30 z%8W9-CEl;7VkUp9gZQdY^9D*VBL~62VsSB(hwXuUeA=!34~F!py4cD;K4#Vj(m6V9 zbPFClrX-T(ya^!qWiaY{hLlZE8W$S{gh-Yq)?3TGIcy8GJgqI@vOXNZ7x(;`{kTzjY9!p{ z!rLBq0lVCByg6w_os@37?NnJO#0Gco3yLqd18|0mlT2|GYro8tY&sg$X@W6YLD=$> zj<2Q=3$guU7j)@<~dXH18HzsJW3?eff>c_%FJy=Dc;{@ zi(J4_@OqAoXE_h*T2Pnri@7Iz#{)~a<8cNkxlNsyJ7SApc{CzyG4JK59a=U&=BuBQ z{jMhOH1tzNsxqn<^Kq_|5$NWYgel<8`Tig+28Q(FRyH!%+tyV%VPGLDnITip@uXY&}R@?1_@)KEkun6DR^KwQ7umGByFG0z?l zE$C8cspj-L>Mn}(H0dlV*x>bsX{)9%?s-gD*_$={((UUcvN`1$yAj;cj`y!2DczI< zSEXhp;+9#Aw3jqPPq=|2FXL|SC;vU$cQG+NFguj&E5W=SkTZ-RL>FBxgm?7#3fBmk zMUpk5g!rFBIqU?XqFpFT6n#fJ>S3KhfLUnn2BhW8#p8=^XcUzW(R+77)A8Mj7!+1c zuaJ%Sj}QA9nZc-DUj}@=OK!=9FDBX!g)RzP5zf=tF3^sH6&5^Nwm&4XSWYWP`QMPw zw!Tl{lSzzEhdiDMik+r!Ex;l9mF}#|8}dU3Pht#am=XrLa{u#T)`x12pJz{zppk{d zdBbfbhnAB-ZT?JY$LtiV?p)J4cW#YBdp~qSa_^2HrTLsY`XZgatee&B=pP+5qco%k zU&LH>uaSRO(pF&Q+fAF0U3cfScJ9?f>6?1K5V zn6*y?ox@;SIn#W65dI-}PS|*i%E7(cw*ILxQ-!;!;sI7OIJR!?FsU0}i zg;ZT9YOC=6^|;#QvF|uY6^!1?gLA;mKU*L1ncs{@HYTKChyj81pdxiRcUQ6w0{y+{XAj`-cuZ*Wxqlz9$kER1y8A(ycZYDxF3akUZ-3RY zLgc77S0DUCZb=wqm_ut^-R$(!P}5}2qdMyx-qmpGBuOdbYCh_-w6d^vo8z#|mqf%M zlB$>)54NdO!{!kSKPXamW;VQtLH<`JrYWx(0RpK(3M$y}1)*P_yAzqa=Xj#e*EU0#A*J_w18NXiLuh%HvR3ch?}4j=6$gkSB&7U0qP@f;EiT z-n~0@i=GO@-A2A14;bD&SQ>;rWMmj>%%(DF@7jM(_wrvZDfAw1FZ(H#0w)!R_zS5@ zSM%cj${3#mrsf}229gU*0VAvdeEl0U>HU9WCcXbp%q01g|HMpsJ0^#86l4ZZCn2DK zVNwA;$Hn9~rG^xdI;{Zk<2g+giULoh09s2ynvgHJAQez-u-1f!QTF z;tI?k7y-72hX)_8vsC*}XcRMZho_TS*?hBxhQ?l>hN|LnRpLNa&E}II3ys%bT_0|K z#*eQ2-s5SWSigL{!SeVeU+rS}vhTKRuu$jy^#eM$H1QIZo*_UPa{01D1_r&n=(%Xx zeK@k+4JfMQaAP`d0|h)iT>fb!IeEP5W)*QMc>4bPMRV^-X!hB*FurDn<7uq8+I(kX z+&A;@Yx~63+U`2ZPUp!wD0m_v0A69D!YM+;=%=dYH&vME4~3Js-W8ix;%f9h72Z`n z2Ly%l-_17M6)Uosob`5J3<5zj(e47;CJnCK`8_rh+%KAH1lcU%swVFIsIEZyV+8|+ zP4_gO{GJ1Y>_kBg#Vpoxm){TACFRYmIJ|~b&mC8E$_vCN2DL=F%UOGywOK01yk~xJ zj&@7!swl!Avw0pfWa?iYG<%JxPZi{9Y=y?cV5+67RI$dF>kueV^#Xiyy)eoB{72PIy6iu9C1+n0mCXDV1#u2jh4q zL@ScOh(r?}^3V8K$3wrVs25QQ0!RS@Hs&(PUFS&YIy)t~8U;uE^nMDWAFL5yOqvsx zrV0lsmgB+o`plG|%x}~!urUgu$dcv`*pzO(lICqZ>aye+xH$NmP&2X`j`G2VT2XKL zR7$BM#Aq}2rzq~MK{nh};y_w`x`YKP< zo^1%U`qgtL1|sg*l+g|1eVvRVO)qOFc|{Lb-7r=q)TE$EOC(<4F6MVEc+soCP5I!Z zz|FlGETAq1r3*%aY+%k86YyY>EHUJCM=}VQ|7=rtQWnVRksmZz@Tf7N3hG$Ly9gkT z-KB7gZ?eRGFD4r*YN3dM(*05C1YC$X4AN$ST+%>1CdD4EA$RPkkYZ}AKkBj@gytEZ zm{_ZLDEOY6=?m%}#evrBwJ`%?%Q9FJn&wbBd?eJP92JmBiuh4f8-!HcKu6kT#VPeR z(yQ$$U20Ti)NS>!&SP;CbeK666F@e!yGW1|1aYiooZ|~gfzFsn=dm+7#nh9Y7_1#V z^(I*5Si=qi2-?5^<*G(O=WzV00Q$1+sg`OQ5LN`1Cq8E;_ymXuje+DvTC5*?qe?38 z#!}8x5wIF8#)7!wDbl!r`^(Tob3#rM$SBaDea0gR1;j=G0e=Q+3RK`m>LPY-zfdTp z7M_ZNg^>eDJ+V1GqNf`x$Ij7t?7UYJFTY?+Zx24!XFMu}U#`P~_(G*n2e0SCSmejaH!DcG{7lFzqoj zWz_b@FxioKpFwyrP1yMmQ)U-3a?j*GhAD0Wf>b^l)bVIjk-rJ$Ig^+1dNaP=c5&8x?dgzzm=v03I+|H;@sM^nqNILy}Uoy-QW;QMi)9T$EOk z9Z4Ipk-EjeRM5rfv4%j)6_<`s^By&RD;=pR5{iV!4)#|O16%hV!E79oyRCn%k^C)d z18VwzT)hQU98ItWy12t4Ay{C82M7=rcL>2HNN{%x1a}4tf#B|*;O;Jg;10nF65K7g zyvcv>J@34C&hGZ~Y_(N?RXx*PU2PLlPV24*5e!0Z!17}Tr3i8?&Vkp=|L_#SYSF%Pt3m=xq${ zaJAnM3z>R(7alBE(lcv`Ksf))e;Nc2vHNZ{=x zJ=|B2VHbdbrg5Jn?-G-18F+^RR;jf+Ns}m;9QXfQVO!?RNutiH#Af-=u zw}GuqGRGpr1vW`mS&~9KUyQRPY0FkWzD4NziSvFnJaL!W0oz@2DEvDu;XpZ6hTJNt z&`uF;ByvEQSNrO`B~(|JQ}EA^MX*WQc*+BG$23OxtP50`4r~APy&Wq-pPxmyo0*t& zOYGkJ0i%{<36E8_?ltG1)ZpeE+;j&8Ia*vm1(g8GN_%39j1Knvn6%?B5G$p! zn=b<9HaY)QA$U_Q4?WY!`KYrSM@0yAt125*J;>VZ9@w=A)q#BNPXieQ{1YfZ}pgyyYkHEq5J6~bSlgrxwB zR(V=na~f&$=g(5WNU$^o%9wju4mb`FCxBW<>s{!C_G+nd=%9{Rjj?BQJaWxNbz#5v zr!j91m-d0)c5tqO5_MJLkN&|pzt;}Q``LooV@izcjkCi;z5v&iC0ujA;pmJR<7hG) zA~l27X5irKtuSag5`1^J!4l7n zZy%DzKfPJMR9ICazA$T;8)*=DeDr-fvUlYX6drqFd^P*K_x7?~h)Ut_Z8>oJXxDsk z_XyOAco!VqElgGY7L0uOCUVYBsdqM4kJlh1;zf1*`*@|wAbrt5q`t%FDkE*Bsixm) zR#<5NeEoc}Tat6n?x3#)fE&2)g)^*`2ayhy?|-rXtwicPvhWl(nB}!C2rR%I^1rsA zcRW$$#nN9}9v=wM9Bw7fy5H+Zl~AyW)B$6e+FPfOQDv%8nF|{2l&@QKx+!mGscL@! zfJ6Ou&fTl*?Qt(})8+=Mx&^}L?j2c3dw(`=7nZl%>GLeGD_9Ow+dNtUiJ-ct?(NpQ zv{|8+^W{BXo*B>7ERscrsJ>$<_n)3kndCS4TS^hlS9gnEdBQwL*RWwbktYQE1H=p3 z|Cw6+oAm#B^Ff%U`{&Jv^Z&g0aQ^4b2Rv-c2nB^DNi-jPgm(Kbl#yiq?VnR0IP;4n z*dRYzl59TsY#xJ`14}X#e2xxq@&14I(H~~$L{T)wd|uhtxTx_jT6;i5N3^vOJZUd= zgPB0c@5c4=&g5*KpS2&1t*|BYn5&zsxyjYEpbCmd71JnjC`EVi(uT>;qjhH;vpg|( zWy%%tef~1EJ(U#4w>?)rN|k!Ea(&}?c9U-7%qKMc2^aW2r$SZz+5$XIi=<7YZ?$az z4|sCEy}6)bXcEx?Mte76sY+drC_XCCVg3;A&+2$Oym-hHO8e6BFuOY#7%cS~a9n+a z=DFY{M*V8&^A-N=SzZ;hJ3Pi*qcdEh!hbi`;cxC11-Cd}sH1JQal)P%!2Hu9DuP(F z;AAbrdsTZ0YB(lh{&&=~e*E0d+J*E;@{Z10R6-(Td7HDN##1bL8<{N5y#VOObd&}viBRwo`II?4ziJz#Ld4YD#Wsxtv^wq=05M0Qsn}-d0aLz zLU(Rc<0Xt#S&wh?(p zl1MHTMPh|^S^-SJx1q6Zr{j2QaN)RleS-Bf!F_N9j_Bk=8%^ss4lRZ3FeZEQ{$5 z^@3KQ=yUw9vW=#_y&Gz;U5Jo+q)Nmnpg(j%KNI+kOOnwJ@GeWy>3+rD)SFa6a|C+X zepy3zv=ykM;X_Zg!~U6CQaCoye*TTSYcbq+gl_4m{-tj_+YtTBrMd$D{r&*?AVlU% z@f!DCjj#os6E9JOsYN)dKWmfT00r(ln)#pK#Ing%F#0Ce-*bi{|05WYM7M$N{%BbgNwb4quPWxX^ie{i;CJ^ORDA1Lo?=;;3|f+M$(j1~v3hk~F(|NQIF z4(Tof8l5(jQwQIHj_AJtCw6ocnk-ujvmAx3%QC_&X-W7?5gkOK4!}PO0(ow*DCg~5 zwHE=BoqVsIV3wvwB%J8Z11pMF?~uV)g1TY<>=+^M32-;>Ga{xP()m25x`1@Ps9@%a zfNZ|wyhL6o=XTy))XV6EyXTB-(F6%SU56I@zRJW#AjQvDG;bscV7ZfoLXMKh{ev9g zQe!()k}?$X|Mq}jA`9gysj^`r*OTIC?BrUoYJAii$g{9CeougAMb)A-XbqB6;Cy50 zV@D%uQ6=~SCa#*Wg6^otMiac=Nhz6N3=Iqg_@hg4-xI6TW(eZ~>VQ<92Zb{&0()Ta{-2T^a!Utg?~8_leX4qS*J z#h3**HAy$B!lGYae854R4+vtm1t#F@i_B|O<8VYlbsWTHCT0mt!$r}cM&P5-$j=r7viDOInYsef@m&>% z$ool8iNB)ym$PYU4V!)Q!Tkn%Z4a|}$$q2?>rY{MV8n??MUkBx^s|-Fs1t{gD}SOR ziiQU;F*9?36~OOO%|!tNlvz;8Fg6mr?$?sui6+48C&f2Oc$N~9K9HKi5f}nSJ<~WFeo?~@&qTDtlHm{nRFs3HjMp@l7c``E;tps99BmF)LaW=ru<}=Z}f=WUw zzA{|P#+eMc{29U(h`VP9U`b`@?(bon@~U2R_7cfTDqkyfLkbMU-O6%g6HrT;L+FAo<(JU<$v57pvr|ml&n~Y5BR6+uSUh7$1(RB%?JDQJBKQ58@Qgm*<-? z0gL{}FpyJ!(-OqIBu0%TyAmwLMnBDi6ntSRl_2OwhE?N>-;SEHMaL#}5x$@V2pTcC z!ak(Qa)3KR0+`9Oqv6){jG;6+7Sr;@WZxh$fAdVxJteW4K}W_=BHj7(&zW?A0nCbd z7QA-FAVYBUwZJzBBqM_I>5e3Y*zcZTYb-Kic?mod(@R;vp@tvS+r$^x6+~9wTe2Kv zOLV5OvtsLWaQV6mifM6GgixWhy8hV~12k*0jM)~nO%(qWO+v8%=xV?uz9(iJ&L~y( zJjdca>!7Ti_?U`meMJzWXJWKM0VtL5r0=&-CLqTzlMa~;RQcw#x@!TMr|jFH6k`#T zOJIQqR8%MOj@PJ>CneU+T(z?{z zEhFU{YG-1$C*>N#Rw_aDXDKT!?O!@bNh;C|bZL3;c(0v>IoCIj&-21@PH1ObF$UY* z$sD;KeO_6|S!IX1472K&Oj)%x9Z@QdkL4l1aB0$eCc_WSQ*= zrEA2tea9C3&LhqKaPdb;rZe<0Sq4br+?iSNGhhCk4Bha1sLH zU~{;-9qF-8d?M*_=%jD=F^<4;THjsocE6C5hoiv@VK0Hz@9CEZ`|mToDBK6OdmpTN z3aSn`PCjm`W;T@r57xrEJdH6@-4SCcO$ifGeLt1f$f^3g&Na8D6tz_OJnn^9U0}1R zWw>L>jXxv3Y`#qMUn*m>Hx8MI8?mU^^uNWfwe#$Ib|J&ZSqVhhQwsnBtP?{ zQEk4sIEuQK#p?D;Q~|e$5k>!st{Edku{r@wuzs$Dw_S;H`(ZjbFfhiRh} zUWWlGn;fP8DN{`$oyT=VP+NN&-r3S}v4_#*iJU%;*{hCiPP)8Hz7d&y$G>vFvj)?T zj|qQIrPh4ABn9*u|6Y}hVMuY*(=H8UWj=8_C!Zf5C|co!mi)8bSFzRIA>IUWI2 z@L$nCCzB~!ZZt$H(g^Q(AzAdu=Q}m6y6Icrba`Z!?2%0d3$17*>{8^Hh8Zd{I-&$z zKSr7-HtqMw9c)=8lMF=NTiY%Cp?fpQ9iL)X&IM=;O)n+6z?U1jtrw@UNl(?x5I{VUiler~JT=UP$!yOHT)_jP$ZPvk}Wdu^=lTxO1abRZ-+e8&*x<1P>) z<7xsN8-&GfgcL4U&CFFM{UVoiOu*r5u&0c{S?vmG^D<_U$JZq(g?Eg4?k<6^RcGaR z!J6dfDtgO*`2YMktS(-dPuPy|xbX7OT*3DG>zzWj_6z4~Ch2}oZ7k=o2%YIyy>dPD{8mpZwP?&3ma* zqeHhnFZSyNA&a>8m-V`WOAdFPDZd_Up1XDD*d!)|xpmpQRWUcK?_PQ=2gf=53U(v| z0QSpM_Bpo8fGDIM9Ev#3>+>fLYyNen(~oW4i;2O z4>mc4%i+7W2a7D?Hk_^vY`q`T6zZHBMqK??a!2^bT$hAC<#qsn78JWzKGwWgZLq8{ zgH>AB{i-zL5>FoSd70rcp{QSS4k_t^_tRh&_ajX?sA*fC_7?@ z$Jf>=v+3JkstbG0N9~caCTmF!>TTMy0*u}c{s{Y|S$97I*$wg!J|4NGsrYj3>E<|B8ot`$We@ z_70uCGB!|@R8i%=`~4W6acjEJP(LKKZQ-2gmSbCbDL)I{->j`JaAG}cX7}hewjZlb zQ9USO7!)&sYYO<*{H?yUsP7hl14GfOFy@x@^9U;mHl>3yc*l^HS=NJx{-VXPhElqX zbw_(a=t%yz)8dlq8n(L=n6+T*-r3`~V72ItGA+CYDmx4QGhysBjE%LP_Exg#2BNBm zVk^_}+wN;E-QvT)v5S#kqwh4c8N%6XiR9_)&^;235 zoG!~cPVlgwtDGLYbBNNvGTXn-=;fpc^S!Bdslopvw-~2q677Z$$gSYyx9zT-zZ$wr zcx#ltyqLARBaqsZVx@Kom^KwxCW?EJ&Q`+zQ(zsB^ zPfx9znz^jB<%R01p);cs8c*N#UjDPV>gRXsW9Ku%o+}~_MMV#{nX|liv0Ej=@J_tn zw@+C`(c5pR*kAm@Ez|XX2_` zVG8=^i}P8F4p<(9M+>YowieD@YrRZqapaed+Vf6c`+s#WZ7tScy)t1m^ELkXB`B@# z504HTvzz(36I{nvC#A)?S+JaEbcwa#w_wXzE614c6<%72CD4#rV5s{Xt{-o5%Q`Ku z>Dyv>e@hZS3nZrYYQG&}8mxaFz>UXbn<+{6D6#YF@`_!&t-M07Vno=Gq)q?b$i83Q zv%5cj$5M?rgo|~T^Z8A!Ii-D7O9kqQK~D~(#yois9Feq{l2m))RL#>aoncXItrjQD zxb6awp3 z(XFS-T0(A43Phf+*Tz(PdSVUOgJRu;J+^xZ5f)#@-(CE!yYbR;CAID@T>9<9ecHqm zj+vDo+m|Cge^cB}l{>wd5agRR_nSSRDss4lz|Fn1z7$|ysj9fF6Dqr69BZer9Xo1x zIqVgCSkZ{H=2+Hoo&oI^&pSj)rXXVJd$)p29=&4V8QW{H=t)MHl04e%X4w4XTQjcQ*3Z(tBP{P?%Uz_T73 z_v<|t>Xh9dn_1l`)wrdo*EepsKZta$;1W_^zh!tSXW1V^em*9lKkP{*ds+#h*Un`i zGA}!1AL{QZ7!D)2%~RkoEfY5mrS{q7@4Fg}rdR>%Z|q#MM(=|h7`B{OMlKuJ3XXxr z#|U;wUk+*tk%tE6t+j4|dmK65?d6+yF)6*5-R6VJW4`z0A1${|8{++fmL3(*JS;x+ z)IGQ~!UTHIjt^?>FMe4Z{RU=(W1@x(^UiNKM>Rdp{aDIJ$@hB=%uJr)l?1V?!c#1Q zomXYXNMeRt!aqkTbjvU^f9YCZ&*L)aa!Oqn>i6)a&p5Llmki&lKJrTzT#5n;My@QT z))z^9r^K^bu%8KNd}_uhx!eXI)e*TF|1(2Ol>fgo#E5*H|G8f!TYIL$l0k32D?oSG(4!S3t{Tvvwl# zJ9C$r+=QiC#+)2@)2r{f_BuoqrYhuOE|j(lwS|4jn0W!C8)IwtBZ`DbL`HH|T{&~n zYW0>z&g{$|Ov`sBiQ#i3JQu~EyFQD}f0FzxR{X=O_%HqkO0_d1Ca>={ReL0|ujC?> z)5OR{RG!~3?G;%ozVmIy^6Uq??E1xUgq2$5T%I{3;B2yP6u(l!@vyqm*7}~SCzLff zcQ;2=$AHEMMFE)=hn2rxR0LJS7LMC#lgua#L@GlDg0jWw$frczu@_8et`zR zT16SzopX_LAz#MTh4@D=&zE^p*_hZNiQ$x?%*Sea?`%CiUp5Ho#U!}`6$u}h7Ji-Y z?u*{FA}Qd|uPOz>FBEMY@^swhuJ2ermBdHYpI-grXvu#Z<#}xPL?w-%IeHHr$onAd zsl*GR7G@y7qo7QEV`-j66VN@MeoGOp#+lec@$LyD_ks`h3cKqsDXcJ@d3oC}dxGH| zFU+!s7p@nHE=Cv*1b-48H_eU~Mx#|=jjNZCPR&&gLW<2lSS|3Pz=$>1wCFe=!v66} ziWg=@`rHRsI#u<(Ph{zd%=c-YDBF{Pz42pjc_A^E$WMlhB_wyUV^;6Ah28j0h*)|} zdl8knAk$Fd{$hmeaFic=rDb$1&{@lZJ7PbKYtSPpDOL{`Kq;xD2`iTgzD6(msla3p z-b*NQSiv?uD=pPXsS?#C|0o}Xvc5nOk~faJ&Y$tx#J_Qrbn+eXWbZ=e_#j!EZt+)6|CsI>SAl&* z)F;$IkLE_G#E=WBB@Iy+rW0Sn?x(MZzGM{@;2;jcf}Zv08k1GFat^!D%IB?-aGG@8 zD-Ea3Arg;i--c8nV`ytC4b#c!b|Y``LoBY1qq)HPrHUc1%KxF-;`6gu5bXweMb_!o zL5(C4w?)!R?PLRKq+?Me<_~qpMUp^D@9M?C>Z$8IX|GGJ&ixwWj!Pql@Z|;>%;w~< z$B6_+mY#tZjFPlIHxzs9A?M`F*Ekuba z1V%+$gplA}{gWUR=NJC#J-Q&FswA8^ggkKQe?fHSAIhr61J8evIntb=j|3mgWzN?3iKj6taae*zJrjp zelgEP0*_BN0=v7Bp54md;)F8A66KRQ3wydI7Gy+oKjjZ3n-mM%f(1H**nKx+j9__! zoydzjN23Yx38H^k0?050_!Nhv~CEVcs$v3oH7J`UIn zQpFHW@C*{uijY5@;xAZY6y#V=u$d{VHG9}!lunwK8~U4*L`L8XhU7mX)e(ixrYz9s?HORI4#cpq{|F>g%>nS{ zmUuwJNk3BlWhNi)YRa&WAXtS&Yur!49Q}^Hh$HNg)EI-Bous|W=8;J5<}YCBRic_` z=nON6f;G5*qfrsYXeku}I5Y?RP@qR31pmH72D`^+&~$Ly&tkm&Wn?$Pm~Ce#14}2I z+?%#a7frC6V*+@e&g4j@U$EOW6bQuaFOtz*p>Qk ze>CB`qwfFxubfgIt=`zq*nxv7gwb^K1+-*7oNl^aL{29%bYQgDzm!baze-dc37Mf6 zkvHxd<(%9P&f=K1dJH-fnfNAS_2=phm0E9vx301QKjwD9j-+~ zd){-8x;o4^e20#;DlabbEzjQ^m#&HfR*F_$Ee`$$5UN7by9%j8`*}N4&LM)vul?ZL z{;T0hkBd}<06r-mZ(K5|mY91dDGNQcV-3NgGMNHw+h-;EDqU>cN(m)u4$4nk#)`Dm zfpmuuukj$U>UD}TlxlhiFEg!-wI021H_{00j3o({=?LVLoF;7_He^&2W{2u0@FN!0 zxsLAN|Kq>9*ol#dHF<{=KN*ImUgO|#o@1&~^#X_vb&<63VJO!yBkgWYTDWYi3p!TM zFI(aR1oIu48A?OaPO&)YaJ{T=MCrSPvwt__wIrIta z{7Q%Ir7z<~wBf`I^W2FNj&EcV)uucDv8P+dGjRm8Mjxoe$KgGX)$7%Sv3mL;o5~BW z4(E}mqklt5;3PE+9#DnF=;Cq4Wy75){NOvYjJ=3PNKg>xtJt>@rjthq7Q%>Kp>>c^ z(OMA3quxPUU{8=&DZVU5N|#|x5*2|H1ENduI4O?Eohf6fBzEJmbG?bNnos^n=!yi{ z5R36}nn)VRSawP@sT^WhPt+|4&5P{Q@OLT#{;RaxSnk9`&~#2R_u$}?VNfNwf{j?a z>I!(rJJFF4ej5L8tdS&N=S2j~(n49FAPNkB_h^esm7v$64y4t6-Bou4C||?UHN!S4 z#MRe%S2;Qn(Lwmv7$U6o5cyera-8_5(>}Z!fd(}e2J=Qj1OxjsBdAwNB@}66$^9(4 zOzM>6#W;=;(t<$&b_UtdS+nXykB|Zq3I-#af&zaQ-2{ZhK9Pl7;VG-6Agr-G5d4r7 z<$Z&)ss&kn*K3AoL<39jM-+T()(eh4pa}J7`&ksSaP%PvVqw75Kmk>){jaQ-o1GMB zC)k4{psrXt;B=tqgjFIx|0hxj; zVkfQjvJ(OCsjT29EXIlND5Q`x-{tujf>=;hA{dD1gtvnEB}e$t@e#y?f-yt~3Vioq z4czdb33=EclDn`Ir6p~U)8D1ZY?M(@bY5`6iP6LK>G4xC(mggYbzCkmo_)RynHJ8< zyxt--m@2ApBq&b*My`Y`N|4NFOCmeys15@L5&VyR8{?2^MKb!C?de8*`Qyy;4jLHb z=YZ=^SBF$9k86F$Pm%QZC+=5MlR;*<@#RRCV`FClzn`Sa1pE@+5OG=54yR_Z02<|`Uj!F*PI6Y~yiJn!51zUm zlx~5x%g4j|8^xYKO6qIxUL4!I8~3{by*YGVH%4SSf4uPClec{~Jw**Kr@%V9KfF8k zeX19y6lnO-pGw=OhU-1u?z0`bE93y?Lg~FNvp19HsidZ{_j9nkh{3souzYrO9c8p* zYSyJSr`C?GbMfN9ScoC?b9|7~hHm8CPlKn6S&@gEu@XHJhB7LH-_l<18mOaycs5@- zPcd4mtg++eKub@TJA0s!nc1e)@I*wmlUicSzp66PHUy<(F*F500s9CpQ|eo@25+)gtIfoaJ4;3hRvV8T?9FiGNUnq zQ`Ti{4$An1h}$aTv(1c757G324;PD#TaOO)DZ=a9;q3>z!k>BKETrSM(c>&862dN-qt5qX&+({Pffhk{LZ6kc z$G(5+aY>P)himHZ?a*Tf?*zxFyYY$XHy%4GaCPppL)I>x!E2MG(U=Xot0ln zxX8hMiWIIwj}jAGloXdI0q?8O=5`^8S-fS2BjGKZFfTLwNgTZ-`<-U;_=knPH?urD zJZi3|1OmRIxb0?*Ust&!R|~3G0T&H+U?Sm%RA^9;rQ5g0pK7;%sw?Qu=X@Lkg`i_l zUm9Sm0uZk~x9w0QalRQe`h4xk@>aH$Vtt4jRu+x1uscy6-NFI`E`+C39#)RPhxy`kp@-2~zmH!@sU%CY=!W_z35dNOf5>%CM+fRgf8qt4eBsFy zK0U*ORK49=j&zx?&D-@ll?dcV%UXHpaqT`>nQhxY-CjmLwGY=(=2g450oYN;Cr=n` zU#{@3pYYlAGT(hny!r!YYh}~#Y1oqJ&E+pM$(J|VN4X^e=(O_3&C@ZDBSZwy81Fgh z0E!{bJ|=d9T;&ci{JbBU*qaV}teV(m z6?1N&HSX+9Kt7U*M0L8xnd(c6B<*TkhjXd`p=@?v-E0lI-7 za`-l8?vZrE66q*9AqCCPu%7+oXB+s4^MTb*#$!X*y4bSjeL+hqf5U1~etCr6zE)jz z-t4^7FSFq>(?3hO+dq*zVn**LVNw>KXMrwaEzs%%UrR6(h zsJDVXvD+7BZM_$LSDk_T7VDdKmRThy!79uE*DX3aLxDS{j(V%pq8cFOVbTiclC^#7 z;y~BxruDk4j3Vy9iP0=mRgc@gxu=hgxnZ>VSKo+2Q69|c+3WP_c6q6$38t_*iFxX? zc3!xQJ1~@7tgeP_if!N?6wK5BGirM?u@Ph=7uWhug#Swd6WZInnLH|;B3Jg<8K7_v z;kB8bWtark;dDqxbk^XqsiTbe+Zi&}K9*M14_pq3vV(d9a)g=MXOj!X)gNAadFrKW z=?q`LKVzziDOqlpx98SB611`BYJocyV>YHFe9b>(DgpbWFCJLUSBTFmj4ofk6$q2P zGp7PR{Mbh*`PyfN5<7?~VQGev`zuU?v}~Ter6Rv2;vp?|b(^lJp$cf4B0gdYnt9x; zWZcrgnMa=gs_D*fR}q@7wF8AsTV%tL4On^Jd|OYZZ>9Xo>8>EM1-RL3=6Y^?RZ*Gs zM~z}*H1Rs+%ISXgA^pkVj<0RCJv$$%VPV1iP2cpgF*;9jUPl+n5{{SD?j!l~^6(ZOxzH)IN&x>m6*V$+CObP=hsqW}Dx~6zmBiST_GC<(I z*+Qr&0^)my~il#sVk0F(rlFii`uXA<%8&23^S#VOfPe$W7cXz(L`th+i4wC z>>OiE!dx+yy}#OhTdtp-u4uLf$RA+xV3Gf^OFky8a9~GsFw4pn%vdJ{-+>Mg-FSUyD!ly4On#SJ@ zz1Z{2yFb^h(|{i(Nxs-jWxgpwI}xOTr(9@ACS4f5Wlthqc5QQ3Z61R!?zr@}h5mB= zdpE;9Yz~RP$`OI|81xf295@1YE#1yqN9YO;c~44~Zc9b_v3Fb*$aW3DGHeK$Q!sgZ z!Dk}igIx-TY!MMpbL(*X5h6hYq5tz<1#n~%K; z?3ybs5+5?!h{x)wSsAZga>^MJ2Hqu*>pNu*>K0agyQbXptiC@nC0<~fkQd;Z9Gfl> zPr%x@DZaPMfMZz{733%oWE_$0(LSikWh`jT!uL&-vW9;9e(1diSl%_YEBj*DV^Vp~ zl#QH6JY$wjGOsI>bZf7xNGy9OTu&AC9wbz#zdnz5Zl$OAg62KbJigg>l2=-iem5^Y zPx688uN{GCM8${I6KnPG=sUyXZx?_{e)> zg@iD}Kyp5dMLWwOfW)qF2>edX74N6?8NQz254PEzeRHs}?Gj;KC=PdBWBJQjYlh7; z{qI|p;UZKce0jkawbmSNhP~L;6=8917HPEIc8_>oTCcl=wNWrS`E%L~#=9}b2 zPM4DyeFRhX?&_|7?2?c2p_E3&73UZHWd-E(7%yDOLNZ5pznBdUZ1U089t?<-9+tdi z(qQudB5kgBw=506@0-7Ud_Z}bNK$jJpQH6_)ULRhvBrW>sD%+dd802~Pw^%fw)%nE z?kKVtE}&~cINWyaTE$$RGT)@Wl^c<7dYIj-v*@OFc~I5JpYJ<_FW503Hua$6RPXUV zi6U;_73WRZvQy*Yx9?xheS$3ugX!rR;uSD)v|7f?w(L{S}SL9VrBjThyhoZxLG`Dw1 z2-xWjvN>pKaARt>xOdHL(s38AiDXo~Z_l(K&N^9lvYn4Fnc9rK$**5VpPT1w;65Dx zy->MbTwIuhOfK?!mpUxbJzY2Lb(yD#K zhiwm^NPpe>Jmtm}4=iBm6WjJ;fXck!4H1tg`@7p%?Ls_fs^szlIuA=*i;5epTr2hfp3}KX`?NsY9aY@L8gTan zjyHMtxG%9~xykG8x!d`M>^1+4+44^noOO$9-@%&3&r0H~Wj_lKReo}O`Pev8VG;hZ z^7xVb!5r^N@|F)(@xHHS#^5*O>yAfwWUb8IlvLASlxG7USx9V=Q1h`eTor5%t1m?& ziwMaat>>*zY?$7;9Nl>GZAXMu7qOc4G^HxD7s{nY8mcs9JZ8;2<6ha$t@WUqERBmj z)sB>zuW{@qb&T(L!a^M@PV#4yB241w_}@b%!0ijl_mor&9DH2=cc=u{|7~#K;{D&# z1G)JA_kuggD2YQmX|4l2Mo_ku7oT*H~J=7)jf0ns6 zz-2Ds`~A(6hVCcIoyX)uB5;{Y*z)7>h70Zh;TPX*;OTaI?JCMs1@Gy;qZ{Md$cMkc z#G3DR8#ms6({;$m&b7GctXZ9;T8HbfR2G2g;-?Mur^VXS~Gn_#?Zg< zWl-{!7Ge($#yUC+l*jrHGOjdv8IQK1f9(VVU6trUvKq%73;ra%Szr&MRh(GgKdL5{ zI!5s&qKH^<9&ixA4Q?EYh1t!#L2r(R*|`qNfD~vp$a>OHo`P)T#L^SF@3e(-+}CC< zP-g^vxmU;OJp?Drk~vRKsYH52&Ir#tP2`C^U=^;yWT9w?HtupUXaxJEWeM)Enh8ZL zOav<77`!2BJX3DUeAua|d0hC0cx~{ox(D-_sJTt-1|U)EKRi>y0>;3l8v;DjdOm4i z3G)5}=Xx-a>!@_pkhtmd)(zR(&;6`FY0pGWqrR}spv1J*DQ@`ppIk|*P@$y=!4y?+ z&{8n)-cj~bU~99Tif*muZm84-4!>lgId$*HHcd?bdKt}Uoh1Phe8h~sb?>JLOuWam z29J+-lw8M%<`bh1MWJShdpAY^<6!OI6x~41PEw-*gKtUh)Dok9o-#hvrlXynGF;TA zs0>XdFnjt>1+4Cm3}rcC=y+a6f64$P}HZ`Wt&o`!!nuDue}r zid2J4sv$l_h7_KPOjJP->ckAf1f%B^AXlH8vDu@^%p@qKZT;@m*Zqfy$B$_#`)&On zKn~PH05LCY_V-5L9YAZ2ffv)IId;q-it~bSd-Nex#H) z3!|~O5Tv#K+zm~zECxqqL_9DE=cD@zl5Pb4cbA4@0IbhwCjc_aWQn?t0v-K{DC3)u zpJ;~vW2`v@(FOH3Owfn}6KH0#!h?-7W_Nre^%LcV%~ki9bRu0OaUwy{(TEbj@{IOm z_TGxZ)W$<1QK0Bl#~I+gwcUsdX$1dItlG{jV5;Y7U{{5sQHLTS2RRL>977-xDA#fe zNa&n1o)Z-iL@@S`eTerchgE)}*Eq~K&k7mc{o=qX0=eMj5vU^gg&mnizgig!5;P%U zMcI#tV00{d#!ONZfL6?O3ISs~RH10pQhpt@aOijsi=w?24EAYS#uo*OKuP{>7lwt* z3Ak%cdP9R#S7ju@YM`T=TuOqyM5-@4NeRmy(3kQ3iHM*OX{=`A??>`pCQwE5#55ss z9UJRDFoVoW8$Azl0=c6bfgt`+G$HaBHhoik5-TVw8kVei!3+jnB_NRC0r(&j5R3x( zzy5~?1+16SNKs+A1_+4S$w2l$ifO4--QfL9cH@(OcU3MnK-sX}WJQML5?NK6`U8~} zj3by@5ZD28m@f*t<%>##4gVh8IW{Xi=s3R`9Tyh5bj{XeDYRE+72(n=6piB!8US+B zXHex}$Is6l3bqXw-4dxapa%)LwoA&Yd>#S8h!o@%E`W|cR0&GwFo~Tuh!rUYg=^kb zD#2$+hYCKxSPG1>Q7%cv`tmK-X-?(QMSi^LyR9R30NP|Izu!YSP zUyFur3FlXy#D-;$Tq|w7A>>?;o*KbLM~}FSHE<9WwREngRzg%t6xTw7IBR=D{Y0RF z04KwSAE1bI`!f|*8Qcf;fK?(~$PFSvz7-KpltCbG5>;ft+M$lKy+VaRDYs6+h5MUz1E*{a6Vr{T9L;R?$-GebnTp`x;a5YbfMSW1DDu^g5vBIyJF zUgI~>B+mbG%`sC>C2$1E{DGL*O9&(b?E(ZSALN$q5CPH*S&HREf}rC}PR2*0K_-zi zIk`_EqL%NYm%gGw!~-3Pz#dC);GD%yLr}W-kES^}j*~9v^c?x`I04%C5Z)$g^mM;_ z<2Ruk3e_9xf+tbtq7nT_{_yA(SwSct(#=2S`QIz9%Mb#Tt>6I{Xpd`MXf$UeC!&Wx zZL!fZ3+Wox{Q>=#?gSwGXOvT|d!vC|Ezk@7`(UNY$#7`!+A4mxHQsf%$uk|43#3>} ztNeMSM?$@_#V~^IQ-LInO7iIz%swgg7Vqh9c>;Y2pP|VRgr`o z=-6D^4g!eZj?^~TZ$LW4UIqlwD<(P+MDYRGC$o;t%MU8PX2C-;IJQNio zfyXycfeeFrGMdIP_{=X z{m{C7caI$U*XwsrZ@=g%M z;P}8D4L`q~tR#d#w5DQmr2_?#PvGFS0k&#lR7k)KITz5tyl5g5%u{Kg zP^#BA&yeA(GK#4LUqwZ|12#0Mq0lUff0E}Q2I@+~T4jz6bVxY29HBq{^>h3KbMVpP zPl}wXxXvQJ8mqT056T{9iQed-&VZyk-{^|NU?-_xh>S&bJR zCQh>!_w%Dhp!$x)yYXSLefsY8@^Qw)r0un}eYr)$ce^V}H==Ku&mw0u-~MX6Y56jt z9(d-!!8slEGyCx_3b<~dN)em??h_nPL!mm4Wmx3g;q~)C&!Oe2aq1|cRwrtqCD--4 z-GjTFkkM7I6sC_9qR>cx|M)s=k$|K+PhW{^bZNbzSTAXEr zsqVz9ZoHgb`Hx)Xg&*4g_)mFxjncH$WzNodS+{gVnHlV{naCVklVUS1bOx3TeA&OO zDt?8wuz33EX4BD$nNDBa^@-iWZx?OwDo4|F^&JbKLdPhn(t(uCFx8T%H4p_noGLxd zw{E|p$U61l`)m=`5p_+W0XRJHP4D;Jde|*^ekgUe>Iu{iRo7+d9aiVo#Mp%7?Ca`l zg}(J$FAXD-ab$L&i&HGykr-)r8ru?~*t>_cv{*uPmtHi%w|7IQ_+_ zG(#~Uo6xejDg9CX$L^9Ws^=AcspOUt_nlW&Y|b~=XPp^{s46#3+8C02oHtd@Wu|m} zFZOwTgIuupE{a{C?L^@^p9VBaFcP-RwY%wmR>3tvL+H@JI{m*&l9vx1eLjFMopHNyUP2F&Ez*EuQT;K%kSKe{aI z?y6en`fJAFofyyvoZnT~52oB@ZhKbFR?YeXf2$g}KCpWq$BL(r#{R{JDwuWO=tJ~! zN5cD>^d`Ufjn0N~LI-`HO(4JJIi6LsHW++co4Wk=+w?NGx(gkh;xDk`yw=^Ok}-=H z1qRyJI<4MkGD-zL^%E;{dAVmRdNpwdyo$M9cMFG}Y=RQ+G^KFqK;BMi`LU<*8%0fKJ)F*ZelQ%9Aqo)ldt zLf~hxPGoWSpEu|6Kin*SRRK*4Aj`X}eSy81n*#pv7p>3S0y|n~G2Q35D`4)EC~a!@ zCs&7zVi4UGaj$J<@68v_PKuf!tx5_9tJy}#*IoI%jf_7g!%g`ZgpFzR{hx38vw|o1 zg?=1_JWci;^rF-uY+j-&TN(aMIP(?=LQKHjYAp5=`$N3B`AdLxw5xPpTAbX>lX(Mu zJN;tflZ3)Kt`WR4*E(5C55;sB1?Rd`IUjoO>o;2cG$&<2(J7aak3N9icB*Y`P0 z*=f`{00p{LOdSPEE+fU%acpV9oj!xYhC(=yi%){}hFxhM3r~+aT=gT#ppDMz<_TA^ zi*6px$AmFXCV9FSVO1si(mb*Frb=t6QuDx6D@Xq0;FiGJvP@KZijzy$>3%FabQ|WZ znOzXpG-h#%Aw|w=!j8h(mB)#TwQ}hc5{2P2b`FkoQuTWEVDRdmz$aK=yD6XVt&7(L ze##E_URh}tRJWCQbd7`V>2^F)15Nk82vPRW=^X}WJ<+$t-42_v z4RouBMoNO=b)3cc_S*up_XGhE%p^V+r4T1va8}M`P+@wGT za>rbj{OX!h^UOx2pM2c-ANAuXM(Eb1S&=4LcvRaYzm7z>XOE!DH<0y*!wfT zJDsZ(QSez&U{2GWe~tcebi@6wQVVU-BE_jE}a#bzz>p}W{xi6l9kWysCX6_HRGQ8y5=K=bFw%xTSj>a#D zFJDKRteoqX<<8^U3-$qMuX=OCih}f z9_^z~i{RVfu3mPA8Y)4JXq2U2A10No^^Vy3EZLEU+$Me|SRC&)=_0lzH{Gmjq`vj0DyRufo~} z=*~b*YqyVX+&Ja4|JikS41nrhfvl}xLjlL@kpOkj)}9~|wkPbIGWXR~!m9swP;2hO zu&-@nFYX^gIa@8R?oXcyEksIhVKRFSJ2abmFvGZqT6Ndu6rrQ%mh4drl7-w64a4k= zyYP0B-qUzUAF$IMraxI6IfnZY46(~^o>r<6{^_RF@6qs{H_z_9k4YI_BL$g(e2Wze z=Go=7-E^5CnE1RN*^@2OS}UO)(uN~j^i-q7nF+boL{oZa`zK^w2~Y#I!JKQ$0>dnzKoD&9U+KWfZ$z`2~Z>Tx>o^j;Sg{TvSPCK$X+0JDB@Cg=> z^zXP!;&H9IG7`FZCQg5&Dwd>oOMaoHoGGIZkCgTrWo3s&gD*WY9t+l=^yiEPZzeaA zr}5#T#ltBn*E{?C* znl?$%(l@H;Ax%OxbG0nZ`B@YhtsU9Wn)Td`@O(()2(!~d9rR#RPF)pT=o-x#rT5B8 zE;LzyJ9Q?&mSKHcac+Y^>(z9>!fO4%-=|FIU{AytG`upDc-mcZJ08Z%Fd%x0(>F2> z342ut?rJFM(`R*rsKN)WLt{9|x>00IDowOsaZ~)3w1kNnp9o6MBCZ?lAhW-9Y7DJU zH;SOkCwZMMPGa&e?XF|cNU}F^Vqwgwkg>{Lo1qT5bdOQIa;!t(2gkPfqV9<@z|>q$ zBC?}(Dmt?_Mh174(bZPbapK0TKs&)UB9Iqxd~W!dp(KzOIq?C+SHA{L!;ytIJb?n7 zuz&evt0jRAr*ZwV+^fgexBqmuxIxi>E~l0O+jjsb?Zcm3W2aBWhHSLaqo!ZN3v_g0 zEtm%N98k~)Gx`lV+xaCb9r$iedh{MTbLSquIY03Jm1o2(wHKCHS(uD#+J4QRV-3S< zls+d@onw`Vf+qrniKbcN^W$rt3&NiGP-3zTjLIKgRdS)v6i`j>nvf>1<@ei9QQ#{{ z(+J?!t8?e=>VGq+lNLmsu-?0VVTRC6+c&pzw^om@(?<{v@jUgSs+S>cg0$7bHMN$r?WBxIWcT$ zF$~B`$syL_w#jhiWQi)_w*})8XLr{cf$#oNX$+?_ixdsR9bNp%(b|CmP)m|g(DtUB;(@+ zZ8vqF*}K!m+D1FAg=yG1NQO7Y;jT>myBa{2#rmw42VMB%lXO%3R3b@{+J-Ts0i&X) zCBg}v)o!j%?7)|fNzL~b2q6~Bc08_qz$sqVEtPgch}nRC^*Q=$PQ~N3IQOG^>Fb}H zz?Hz;S%ZZul9HlEjkq>%5(6VQg37ezKw-IFwEVIGT##9Z~`;mFjA$9 z4-KulYeftxZvnu@8X*!wKM^>qB+vmzJb_Ug(LuC9F3N}g;unOD7edDHQ^)%5g}mAw zf!P;N_ms63T^rcr#h%V|l-2dmo#yl58l^^!BD8BV=TK)K=604$gRpv)k0PftwW=1KvnF%1!vnCBzK+L8D36IISM7WdM#hX!hJLJ-UoHh5!cAh zZt`Q@{89?#tzV98-FG={Jrni^Q(F2iWqAyCG#lzG1?a!_)y({m^g&82cnL{zNUrv^ z)6YT)hyB%6;oyf)Uwbv)Zd>bm+NzJ8MO4Dp&jM#)KJ!sz`o~+;CRXLAIFa3-Io0iV z7bWRK<>ep2(t_37dh!(KG#j9_1MnRWf6T>!t7$d{tP?X}*jD?MebCQ=_Z69+%J>NQ zV8)}KRQK(5YRfNNDFD87#3->K4<_(Y8;m)+^S4N%=Pby~TW=^hT(O-baz!MnxbxNd zOZ_z%t~C2aO*neCv61EaX}Ei%x}hMN`^g9Y;M#Om%9qC^cPj;(-5#_;YbR`6_MV04 z4~gC8+e0;LT3Tu6FcvR4l*%UsGgm3ybt{0$to->cBjBfHWJVgns9o$3##q&anWEBU zfYYHRneM)AE3UIROJXn&RZ293B96@pK*Hl1S2Fc$PFp8Y_ComcS2R|jsyo{Uag z28Mq4L=LB2s-E0R3RLN^`L+af;cqa*9dKnIs%3wqLbVSP@UR14vmnFIm(=f;DFXeP zsmacty-)n8at#bPM?ALYGXl{B$Eg6>PsZsuR@3i(vW0hzRK)u*jF|YzHC6Fo zWTw-5t~jN2Z3m=ymSWL6i^F4%bB;W{iS`m+75&v(Uz=CjeGX3jKkmiFb1@CeTH+j0BE{gHT6X>t z=oDEG)U1w|`aJVG5qryl>$VcX(}B00Xn1VOEY~(Nu>M{3e8)7LKxBTPOLcDH`61m; zXAbT@WJ?xwhaQ_ zk~Qv=!1md-Ep3|XJ6x~LlQS5uj@dP%6zAmDUe#F8*38;RuE4TZP;m(%4eN9|-AsFm53$RkF54*5H3_}D}PLQx_hAaAG z5~_;XI7jo?Qn`O43B~nBV9dA@`^f^EDLB^Y!Az0w~SeZ(|9k}8e4(o z+uWrCoH>|1{?r1$B8AUrmt~2!zPZe&#y-u9rplwitkxfXaH3T8vUC9uKKR^Kny z3r2Q%wXjG;>v-Xbo(_abr5O!?+=TjDq_t_E$9jBG&LZOg3IOSxWE(u(!o7yQ?(2mA zET2=C3^YMG0ISzh{KEt2Sqr#L|Imyvr5Yw)*z9v z6G?xX)z~s>89gX-0=unvyr5ZM$3kUi>afCq>^z~1Mjc)|iLjG<4`zMjt+H};`J9Rf zNYapSAD#BM-l0+fyCfC(0M~NWMcSq06vSI=YK`*V;1k;X*y#QX9yMyWwX;N{~iTvgO zw@D6zd+M*Xm0V{0QsY5l3=I&$YJI=$L983T?S?g)a&21~Lww}*6=ky-DBq6I4J6HD z;dIBX11)oGZPPIhdCPh}*4sp4EBwIO8nWMZXiq+9eClFKA4onsA9r|G=n$;;m1j-Swa)gUX~4l*`(fN$L+Y1GL&Jgu67b7(W6QcnCrm3*5KCEC$KP4OY>? zum*cV3e!Pzva@o5>waS4fr$I4dPss;MeWDJ8zar&S$~s8tLRn7?nx%$0#N(mikgbR z`HVzq7jA%OwNa(EN9N-*wNI?M*1i3%l}19fT#%BfwoI~lws}6DVAjjudprQzy$w9P zP5>C2XLfkvbS?7%Ef#f)yvhal63ClbUGEpZ_t$@04LU`%M9j@Vt|NYSIfRAP<-fw~ zp6}lKvo;$21kzu#;yWo&VilR*-TnjE^!u}G9AY!kvlhlbzdTYEwUvtvccd_2)m$|S zdc)+@x?kp9p06z)?7WLx;eVLL6M@v`pGHQ8eZO0BntXaL-Q3uV*c-Af!e1|s;A2Iw z-0Mnd?P>dQ=nqoq`D@Z7!M&uE8`-;P>=yJodp9xvWg z?|Kbv)}2i0YJ4RAG)kD13GsbD_{o&}7(g=nrE3Z|5Tx;PSH;WxpLnsnyqypb#WWXG zZ!QURfOO2_R7eHC>H2Rw4=!_UP6Sw9W5qmFMgNdI`DKR;_D88{Vcp&jj{ zhk@%*JA^YUNT+Wzkbnk8$$ON>Z~853rJ92d~+ zi|)n5jH5BVe(HbG#zfc+V341|=+}Jy62@>TAWAqP4nO0okg%Hy~A^f<_r5kGA z5Gy5?pA{hcQ=i=3t>LH3G<1S^N-GMPD=Q2)I(q+gb z6Fn7s6K4Dl>=B%ngo0>mE0|yqGdWgRyLrpfgZe&y6ofcq6)7tG0h4_JH0gL^$oH0o zdzEx~o0SjXls}@A4_~T7M3?9zMJE|WQVvC@s?0*Mp&Ndc`~)zc)gD81@a71nvAAeQ zzF30r04Efq28e?7LrXJ232oy?n%e%tnVrLi2x;Koc>%ye`vF)eDQFs{Jk-I?g;uu_ zdYg|ZYS5Ab40spo^iS^wQ*7v#VN>jbkiwPFC?q}6 z8TfluEHtbMOLhHpq^R&LS4|)+YGptqIoH*3{qU+M;J+HsDvBE&3!1ae< zqrpL=N~NDdeCle$)jZkrr(uf*^I`!=3b^d4z~}!*=^V1(W&$O}LYP zx_CoRz`VqVi1O6Mv{VmJSU>DB62Ur5mx1g@8d5S!ATi-`{E<1X3`VfH<6)$pN;&n<`q ziSeSY3!~*pat}tNF~n$mH(Q2+q*LNWjnAz&Em8wmq1g#_I5*=9)}gx>Oy@d{i1Pkp zCQJ0((TsCH2pLRa;xp?Ba)w9I{*gk%=<=w&~*0J#z!WmpyKz|fsdi7Qb$T@FJP1gHaz?CO=(flT6a z9mexaUp^qk zV20o_5p>Z5W4AzfNkZ&WUAQB;N|py9&shRdz{8$c<53U>4Af zQPM{8Jzy}SQ2(trapf?(`>6D1A-*}{TqaPsm=&sauj+gNe-s`gn@wnQhFPtyxYr#)!f>Y(?KjWR-jLD!grH5ig@ z;;HnAvWM)41PuN^@;D><^ToRX5eh7V9~ z^ZeV)SCLK+&_wGqM?=ZPkyHE!5Q>hE-_itiXAF~{Lxt3U-G&3Luc5jc+(iE(EjgiE zGeZZj&j9%s<{uvvm=rak1>t4z(`{K^q;JmZpxM$wcuBR}_;b*L%o$!lK#M}M8(=W$ zW=YY5Q68peo0P;>A3#T?_b z#YiP~Z1#ZXumV6|9Yg*W`i~E~P$p+g*a$yQZYq6|B1z3tXvuV3MFi(M_`qNEA37*2 z%wEjp1i5wmu+BKpH8^`Q%zpd4361G&3_vg~^T@+d`RuHMLw99{@%wRsPHWBAloHL? zYXGLa4b>cYJ`7i!O6>3~dx5QzmZZ~n(fr>#A3#{HgTv6<0Q7Tk_v zr>c)QS_dZu(P#0ge4+(<;HN$ifdVVKhBaWe%cU}(14dJZBo(wKfc{Gr1!e*KuX_Jx30MXqI09(OFd*%!siN_?i>yv%7FN{v7ztT+ z)a*NQ;FZaf<8t%Aw(B#N=Me{rtxqZ3TUn#-hBTA&`^~A3&yzUdT*rJgpq= zx;=!0SFQ{ZP1C`_&mgoqQ2blBK=Fk$Ws)SdBeoGU4yIY8Teu59@7u{#UaT^7dT?K@ z5PKhKJvWnHG7pKDQSZ7*d)tpozLvKZ;>Nt(3D;NIoI9&V@VVzyj~`IF+IkbmHT>iS z0)do3KMlMCao22kNY?O8qwVhN4d}A8PI0?w91Pgr{*pX{LG6DHqL&d?5U3{omiYHh z460iHxNT2v_3ZR7t2%@Ww{Z4IosIIwO+I)Euhy-v^1j`?DsR1C^s~qPHP*cfu84{3 zveKJWxSfhHV`$W$n!9beF}g(Deb!vuya#Q0bk*+8g$gZL(I{m8ZJryeK8fraomZ-) ziOus{8$xi?-u_5YvRmrs*IBK^(Ic+&Fy*26YTfo2p#QYtLsaTFx4aeTFyQei0@J8> z-o>+5XRz%4^%sj$HY#TC^IF%U!_B3K+Qv|M?lYlB_F#`f*MmJMU|Ft<#J6NYXREO^R8_^AoH8g#UFK?QUqQ6j2vV| zyxR;Hk5kU0fDl6#k9#}2uUB)=3*CPZkSfLUXpWpaL3x6jK3tzn*cbpQ8(_fVv-!2fRQzW?v};eY*Keb`!TU z!27pP>8Kv`egl~nVRvLzRF7%kv37e+SmHvQ${p66l|Z{qDsKDqTghmRTj zawc}33ZiE}?8h{BG$kIB>)#+DwF!-Qd&CgAc^;?FrDZ_%jKo!X%~&%WG9NL*P;Br!l7lBk1Ioh#X!BZP z#Fg>uGB+f~Kbe^nw`AAqF^=bvuZ&D8Z*;aKfmm2aTZB^L3Hyq2IoeO;*T0D^{y1Pf zRCZUlck?ArKo#t>{AJ*W4?B}ZHI ziv(%BS}F19gZ}yjwK2YOhg=7eR-0edVMIJ!gf}=HeY%r48xL5ss!DO(K<`9e@5*p# z72x+eYLc(1^m9DrKD@GN^$mYd$+^A+>_Bs*(%1Mi>e`o~!-meLQ_&3s`Yj-}VN1{X zbwQOQS1{DYEU|CDt@OH0P%A_p!y^ivUqLxU`bHqGIjiaof(XwKP3V)(Jj}Xl;J-_~ z{?}*GB;evd=cQdE+k-J1wS~j|XH1V~ZgP_b6F;NO_Re_AxKSNn*gn2BlAMFyUvDF} z?jquWH8!@Os~7KwGjy*!Smzg;=ZodsO|xkPhZ3jNr>e`1(LwzPvTZC}!<+ZsLC|4v z9qrqUf0O(24cs-KSId(B6)ef=#ndaqs&zrLVE1z?L*Vg=VDbKd_4z`^C%$VK1 z{w&^duw%P+emL8MLh~IZH~GB98wJ5nr27K-Zoxb;8C(yR#TKSRv+xt-enUN$Gk@F^}(<{`5ANC;x*hc-oH%n;{-(j`N^YPqYm!XV>`es4NE70Yk3k_4FA(GvlA=^F? zZ*S{wybrh-kswv}>hF7=@B4xGCigzLgL*6(`|JFjaA+Ym7lX&sP885k#?h`MB)C)8$Hk9Gdc?R#@cw3Gz;FaR zk-%Vv^F@Oa52FnXjuBM?V!gK{k7-#Z*-+&p>Dv>B0jjB^CE1N3`PY)2`q&1#^kAjj z+ctA?aeT|r3l-AJ>1c2B#A&EMA+mM?{OB^YV_k4;cPl@ic=Q~ za_*6P8GvHStTm?8kei1rGx>kY!t!Tgsmrl;p?BIAt&}^5|FlVj&R|QME@mz(3`?qc zca&V&rGs0O&$t4v;TD9wcVlo^&N}sVu7&3eTe8x_ABpkV+p~(N1xDPz856Ee%5$H# zNi}dttrRjK%xlq*lZkMePuNrQG@|*^6z+%1o-s%Bo_a@rTPUwq8@E9XxFWrw_Ce!M z1x*)-_c4{F@sT`pkMxuEIIA8RDo>IU?aH-|^y6m_AZ}296fYk6nqYH9x<~M6&L_v% zHM1us>0>=C^|u30Wu_t*tdSY#T~F_jgBs~LFdMe1ZX-@}%O!J~V)%tn9@p2(MtsTo zW91q>F|z6Y>}=SoZbyPmD)pYO>4 z5Ux#5dg}1xKKy5s(My%K!%f^4|H=P3kjA;uY@ka+X-ao#f~sam%%>gnZgYPZ;k6a; z@TR4I_-b>%Mtqo$dh$0PpHykPty?;Sc=7l2P6QLH?e^8h^V=(Ek=IpN65QId3!-Hu zJGB<)GFQ&pPLJ=$5z1Cv@B87*Z81e_J%4pcx}+D{o@+PpxiQDarGF(HR%_0A{0p2f zZ@6*<4;t~&#`Dnyb7#lJk6Q;j!+!xh$K4EJ@KagK@AxKXingO}56l>{*GnzwHvGZg)5KLOuBjz4BuIYgUePpc zM}TS5702K^+?C;&UCC~(cNhus9S;~_bjuaE%JSeW_Aq^C3MAjDk(ms?pw%~3EE|%CL#qA#yROX&l0zR5r%kE9!U)I$ zS2>5oklj>gNNa`DgLQ7ez`2kD|B&7(;fCpj%t8+1x$7-n<}hhDe~rTl9UEteE;{*p z(pUTMU8j_dMMUgT2iq@Ooz5gUcd^3yU;?X92ky*o<+#Wpn#e0qmHen+pX>+Qd6O9f zi?5DmaAkobV#^$ePA^m-SXcKDW8pLY!=VnAgzedBd>{?#D4E(SnTjG4k&v4C06M!pvO4x$6G@N2`D=;u3RsAK*Q8u-c=H?Tm=tSR>4Ew2&><24{Vg+8eX)`^8RIl3R ztyK7f_OqpHiV{8-7Eve&*vu<0a?zj*F^}1cg{*UhHYV@=U-RGV%!Oc#1JUcSd|KPW z(UGH()R(^PP=Yl<9RnOFcN&o>pS9047CToW+fphI#-5Yj4_|!rC*xccA{Hhyxz3ue zx@H1OtI;E24CSqiXvvLuLvnwv4cI3rG6>97^}R{ss2$D8PIlq8)iTGNDP&=KE{dTQ z&5+Ufs&EC*z0T@f+p#J@Y~0DJL5cWTnQt#wB>3LdY3Isezri!~>Y%l`Qcr#JT_ql?a+ zl8|nvp=NE_Nys{LH73bqhP?k~WpqiR5MyO1mC;Iu8nPj9l0dJZUMvbG-`P%zDG^3v zO5`YGk!l$YG|-`3rL;z#M>&jW5j4NxkLp(8#%ya?Gs0)Hb@(Qw5+ZT&a3vr*2UhaDGB;O~<&#l^Z>hcJ| z_O*%&qt;<-a3)5}c`U&=It=Q}vIc z$4sg_yK?XbA2nZWh^#gVAw@&^gS!8ShC9ZeTwj{#Up4JKl9$IwN_{;pnY75yT`%VX zkKp$wb9zwDIKe$s_lICLVlQ!6c`u&bnOGliUGrizkl3Zu@62*C;3U8-RNKI;e(0*| zyJ9>Q0pWRP(0r)X?0B5Nv<(zL=CQ!z;mo^GRZo8=i5P z?2&yG-Ceg|5m&KF$x#Ts9j6g$?}lkjhGuR{g<#%~8n#|?&9ro!jZe}<0wegXWt5=EEF#V} zRZt)}smDXzh}G5Q_9D>@-@Q=(ZTN8kia9{K8)OAL2NAGxO&#W4rRQlm!#k)#_dx}~ zl09wQp9fOkYZ8jUOdsrrp^o?xq~~ftW=1}0scf_aF4@NTx4paE-yQB6fi^&oU3oo! zH{X;C<9d|xco?&9h2C?wl*00-E+D?6f$)z}exn?;?OfG(efd*>FpYay(w^(<;h0(U zxCC&A=>i=bSCgx?4ompJ-oRd_TW-fsS-3hU0t{Ig?k8r(tF(&^BS3 zZ}@+Lk!r^wsDIr0l3r^rYmRqh9x{bjF!H7Pzb}V{Kd};-?xcbw~!r2ve~!s5GojG?{ zls`t^Vekd{Lvl9FfW(s)0pU6dI&uCx>kXF$Y(oi02CY+@mBgFa_udXi=OB^bslBg` zPJ$mlS3_n*#uN~UA>$!MkKOPT;9DLa#s{V}YP(YKfU5G2Hn!7o(8 z$Y6VgkA&cA8et+3>TiM`W|AN_(Nh;>t9?8(Jm-Y4((Ox2>fjv3z(Cv8P%V z>`BP0RV*xd()K8AcB0Y6xHMoDF+_+220R>Z=Y4#AE*>Zc@oL%fd6WD!@7cE{-v0P{ z7{B#t^JRy|>)~wcBZO zxx9Rzx5<^7b(_`|=B*NKf$g<6{@ry+t&4N#S4*?AJWDgJ`J~c_06JXQnkW$itO&JB zDJJE8T-ZTPPzk}I-Re)W3qwo}2rC>GML}FAh4H`o|K2#zWaor{k!WV7=yVD0nlvgy zR1yuPatJ<47j+X!5+c#G(hOR`ZL$~z{RYMinjZKg`lAhUkaZ-^3m(Lb=>h_@q`U_g zGCII78el|2s}4rRr!dx4!)(DyU&P23?Q3e0)CJ*_(JN%J_?*5V&ZX&Nz^Atm^)EkS zmsDHwNOKO+X#L?8)cvh?<8$ht6z`UnBx)|4%KrC8ljiXGkSwH9RNNX7QX{Vl8X~xo zW{UydJm8uQ5#If)av%|e%=A2mI-otkQXIiRcND-TQglT)y5j&vL^kzAD*qry&Lu!< z0oDIf1zxVVNTdaJT`|$ayQ?AoltOQz%NoWO{>i)of;B#&3MTneQA`RB-<#D z2%@M=$;5aBjDUCJGyW&9l>%jM<>`q57znnb!g_K$@2`%Rn!u}6?DgpXoR6e-@)1b6 zU?2+CHJ0I_?d`1TJOw{xWCTTz zqkrK{%5ekg!>*mfL=b=xpAJwEFVUa-cfcZrn0Z`Kq0iU45K&wQ4ftgO`hUgw@F*ns zC~0zzL_WwUY3fQtK!RlCMrWqYoGNSk27?uQY{(5EHsdcgAk~&{{k{A*5R$5!EO=b3 zSWXSe19)0cW~~rZEE#QPZ57PFLwa;^GAQz`bMd8suH!b>Cp8}15l>g(J1(U}XM)dk z`UZIQLQn8W>Wf`r5e3r~!iXWEqT?0>JL&0M&El~I{UK!Y2{>Yl=xtZtb3( z9?6#c!NinOdM{>1tq$W}0Z;H-hQ{>6osX)zrICGW(sJ|T0xNpAnEfI3P0SI{Js7^yH;ZMY*fN-nQ=!>ZwZ0^5@;zIs*l2COSo&O0 zTFOda(Ar?J09)?;fOqkK273c>m4Mz76cQ~XIys!m2b_%pG$xDAIE-(CtG+1;7;~!w zw^ol+pE0K3C-XmbLijq~~3qZ1)YnAWw3WbuUKB^b%OWu;@hYgy$L#76;M?1Kw0(kakF30|?l- z>9wI)ezbUWjz0CsD=WaYg97n!G!&Qr6Uv4w(POi>p|62H79{01N9N= zIKW%ampbxS;ta6ifhiY#dYi!u$=&{8jEE5g$Y|rZzG=jW%rVkatm|BW2&AlXx|alq zWbnAJ@wq16(Lh4{{whO+FEmzg{!b)>+GYa$CHv{gs*&#ziqy9XEtgXkg8BE5voe9< zj0_@`X#-N7j~p0~(;P|q|7Hx$;;T?ncN=NSxR_kAm3i7iqEU_0Ji!>%tg4On;J?Ou(O+9o;W26^cft|UwIW<*8Ut;$a|WfRf>QHIoAZE& zT`X^^SjR9Ti}J0gyvKmsE6FvbY0bCl>XIQEmj(sRQ+k>s`VKNg|5BOeFk}J}o+4WA z-&_$X6|)$Uox1#MQcr9Gac-`JG+|)O^t0vRxL|Tfo6woEgwL~jpYS9LFYNsGO@}X{ zabOt$GNIbZF)nGv`<}~%SXR3!g7$N-f486RdM$7>&?mG1c5id4k7yGV=zR@#>Ulc` zZA>j+z3ujI_5P~6;SP9Qe5!A?er2tv8T$N3YxN?E#89^OK?&c$7f_59t}!62`L z!^=vkzPW}FYfaDY`L>wfcEsMBD!%6X(6-mlizwWdxYdzb>!I%0uME4M;XRF4SHd!P zQRn{tQbr%!S9URkUI)z#e;z*coKq3yfrd`tN+SG?xc|zn7P%Qd z{!}>W=|2_H`3JSD1GmE{ehL3zXv))nV%ZR9s!cu374$3bM2SXl=?uL4j9Ft8A4vDd z<9>^zb1ECDm(iivOd#i6--y3;N#wpC!%fG~zJa2&eO$9G8O6~jr%jl7{S&UffxNxW zXzkO^~ zYCF%!aE&)7RxMw~N{ThT^Cs&a49OuZhdgx+fp1rwH?5rtDgiK*z1a0jmuK-G>7mu#2mPRQ+NS%d%bkt^BCB?d->C0 z=o07HC1NiMf%vM4bM4DwMv{TwLJr*unY2?G19pl=Z&$SeDn;`@>l$iL%nk zVPP7Q#QDl~EEPP+ZlyRej|8$X4fl%;Wn@eFuNE@aQ!hV=g+H1~&EKum&OU}`YN?;~ z2if`xFXU*>N--UCFJP4tc$E*jS*)Dj+;J3om)^OnbZ(TS>%B*Rd}oMSYBo|;&{|t@ zdJ}xNkl6b^Hh%S2q@bj~6Eu;JSx2&R$MoEPn-v}Vz&#)ZT8rZZEAyen*W|GZ-oQCV zC63&yx#v;B9;F#iBzL!vc zRbCd_@YfcWZh%Q`^}UFDlo{jN51w$u7us;7T<#z1-vViyn$&M~3V1UIt9^X6R+Xt1 z+2_S9lK01>Kx?G(Kjm$z&8~C5@qa#due`iG`j#v)dxG;@-2d&7r9yukj4m7W-+!;j zpoP^Sc)%_#f+PS`%oxnB2g%0^Cewyx0r!=_!+|Aug|oqeJb++A{F$E+nv;i>9gM&y zObnX;;kj1F(gKHqY`jZcp`O~KE|UNHM&kWL5m~jcY+POQ{>R*~ti`veSo9yiG3Y%@ zF3vH(zUz#9Yo4_B$?eJM$)jbXU(aEId?2}a48#b>D{Y&xqKRxu)A8aS#~7r={eTrh zO9#z$_}-NhDDZkdBI1-y8m?+Kk-;_@X{rR$+t;gWe80~FKKfezWLWqcHbTvJEtO@SWqhEBgO5ySpDw3_OKyQu&~ z29xvnJ~qdIXvpKd?l18|r^Eng?mfHr&10k-N~amN)0X#k++|LJ#^F2;W5bGh z!^-=9vWe`=;Uw&mfd#`xz(KL!X9JcgSU3aw+4X#=fUh;j$!$+cTc{n<^qm0};{~3^ ze){)ZzDQ1lQx_;_l3tE{IvSOcw${ij|CLr7k z3V1~9uh*Q{$&-Sx8huPr*PBq}B6xQ3Tq*8@q|8hc+wD-seJkYW=3ARZecm03?;?Gn z+E$TmGe^7Pi-~V^_PdHG)+dFTi4*wo*>&O$wc7h9Ih~Ff2~~nc zPTqs-ea)Nb{CxUysAPc~L_P$acfIJEDjp4(mYfgvXp390drge#E%MvdM_8 z(RdJy8mmOjp0(_TZ*8T<5wHaR0&-1Jx!hCYmx{0%ZHR#IhlYi*@ zsaV0bs_k5U!cu-+lFWeASMj}bVp_`EYtYx9xPI+8Fg(9(gB7BLtjK;B-RFOx@S0Y8 zCC&6>gX4G7C;Q#a$V3J=wPJdU`bR3bA+ItmpPDPvv!0(yF+kyhckKpa?X2Q z?}ub}W@o0ms;g?5o$lW)a5tCr)by(iS%+Z;GuL@-Vx%|&{x7#z+7Bg?Ul#~g5lrx& z_7jrRE)KIlzUoWK=0Ak(lXx|{#(c~fn@IO46}mdpYnhCGnzYqejVsE9wMfDJXz4RU z+hOM483t*^U0Ue7?y){!1oC)5t4&s=fL%NmPg!3D@xqLdgx5I?x*|(5!{(v)>LS;f zSX~e>#BMYzeg1=WGrf;+L#SGLFPK|}7{WhNLij-}_O&GnUm)RAt&OjoRvz`1MsB<& zb>;wsP~`3FSM2II6$T$IOoMgFn!&-G0(>>5Jq#FzI0TOQ2c>v4FNWR&)8vOp^{#VLWW)6UiYh7A)WC3JxbZf~ zbtu-{HtkJad+DI-ZRaJ4n`%1*&-o&Io-GaGx5+h7wh(EyBdx|9g?l+XOVE`{OPr-PMLl#N&|Tbys5}jHKu?B&hR!pX}{n_xwQ7 zzypPQyc;(qRnui&J7;__^U7qSiaAC3!!DLf`l9jdbV6%Txv1w-_vZbTi~anrWt;DE zcg&4d*Jpw`Jwp)h5e*3?dpu{JnYHqxS5nk$Pwt(IdVdl~MMy*ca$V?0YsoTf$Pv3a zFR?mX*7G)vNtP%F7?j-bDwQ5uYUo1kW(I9~j_B{^OGR>+8SA(h#6@;=WqI>MtQ4dx zV4QV011x(>nh)kpoy2VI+w~}(wyBt~;uYg7xVh zTkEw8hpex>>E0K));L!zWT0=|h>NmoXnx{`dC^$ zI8L%w%bq%hbyfZqnr8+~9nDg7i)Sgl@Eh6rK~;&qx7FS2pf0R|WVXIev!mpGFVB!H z2qafYFH5YA4H9rh{nMnXNRe{5ByQMiFh{TWEQxo~Ph+w7BpF8%Zy{k`j%}&_4GEb~ zCav7`+=lT)&&AsH&PAG%gwZv%vH|aIh$GnL&Q8M`!3!I!X==Op&0J3GkpV?fJ>Dr@ zjruQ|qkD8pj^lMy&-4nbRKr{SCt@tE)(FFaf!4k@Ef7pYK_U%Ywbms&j_As4MTCk_ zLUO&ee#Y?D@8Tuh3Vb5Hr^ufu8~YA*PI=KAhZd)z*g@LQst7UrMU#M@1MDnDh17~Q zS;XhFNTC#?O`r3%Ce*0=DC?W!3!7i~e3&JAfecr9W0kqTHT~G`^Cp#Ej%Yh)t>@18 zVhr6VFF>6Q7g$SBC`nW~s`7}mQAPnAvI@P+*Qp^8>YV)zFH*V(9G^riMiA7O30nQd zUF79bUm?fF0~L0)oh8?_be1smgHcit@pEyZd!BG`KAng}v?zZL^l)UD4ci_Grsu?m zDe-{+gVALO_2~h1`Bcq$@*|g#3Rj#`{x-&Y^9kr@t=#OR`ot{104^Ko>|90`7P4K3 zm)bjAn$1*npJ>F1b<2ah)KgM4E6wuI-`xG}ukie|MDjWL;*XC_)(@0f+;B&M>dBze z=Q&G?A=7dE#<5-}QPtp(D6meBlK0elOZ>^KTWp$EFcWPmk!qwH#!S3~Ir%zt(6DMw zC@d%`p3~epRlzlt&#|QOuwxU7feK^Zq4|s}<9jX=bkSxEgFt>-FOt&L;6?mbm7Ko? z8jv+DnQT2DcHzJZL8WR5=*yAKe#`>KrJgq{F^E0lDnEEH1!0rXk8J<`EP>GvZZpdu z!!Cu4{Ykd{l0F+V!5ooi8|kHkPH*B{yeI_v9xx}3uth*TL~EvX`TOPGZ#?!Se`v%mgYi;E_L`6!5X1{f!hJq$V%465HTuaYNw+IwOYTOZEAfg*3pDp|+P}@k4Tkwta|%`d35WgGYW% zPJjoTVWOG?h9K(?wr^*J#<4mL8_5e4fM<_CVR%V z#QFd1mTyZXy)*0jRmxoq&vI9GyN8x zt$ceuAQ>;3;JLBAKX=`e6eRk31(HUU{E0D2rky1Fx&PTA()sZ90rB<6FGEn@(IM7z z+hybKMPz9&SyjX-j>5!l-Z=puYhy8!g;@37X5NsD-s zP9Wz(SHV@PL26e~AyM+V0`mJCnX#{}*MF^$gi6Lz1D>J*H*|`eWW)me|Fb-j|9_T8 z^7H)nI!W-9q@*4crvMmIhMO6jttgrV4pRUgr~OCi)L2Q>3GAvU$_##00_N0lD*-d< zI+R66!3m!vX~9)0qL?7v*d1O>|NDRZXLjaw7&sK$gimpPOVmQ*0nB$f`ZME^bc@9A zWcqCkx|n{d?(iSsV&<~xaZ7dZB5PoLBHl&eU$Qa8qpJ17UoU_eL@}5wuS>q0TVxm4 zD={{?{tGU`nH0 zS&Yx$Uf)K}A}z^X-$%$=p)nDGJH!6)?X2S5fbXWsL$5_(Csk2n$VTwAs;DXC2AJow zC^JaRFQh@=us48yZ-T*cbUs~Brze_ghl`MKBMvhP`C;Sj27*Ak!~X*HJDfWM2fei! z{_r0`39G?ZFqymfhe3O(1H?gd1gJwjiXW?>hq~wOK?l&wUF*4O02ylQds|*&o^*aU z8hPc*Vdpd2`)d39=3j~i zc-=bq(NKi@-+b1QzwzWYHQ7jQWNZ_@m3yCqeBZ}9{gr=vsP=OCe?jG6{x0a-cMk0j zL)y80uh93U*UOe@T&gQztFez4Qk_kTAFa+{KL!I0M07uN|wl6v1R}r5}nOqaU*dsBum*6Oaz|1Xw zmDEgB%_PT!i1spqqfx&iD9g!)CJ-w-vrEcZZpWZipP~~-D?s+SSPdrBs!d4@P4eD@ ziFI5RXO3lD{nx$PX^ZY)W}8w4N6~mO6jF$cDgPooLzWJgPJfh^Q~4&9?UJS0ckCF~ z8yFfmeDF;~y*hSrzz}PhM2$=nWKYdejSCe#>BGPS8S%N7M(&`7Bh4!6j>lh`xK?)) z%fOVh+s;0^`Wl8OMfjXKjGL;ZwFJ`g$wb{kLL(eni5^FBI<9`>MbEyflCwzjj7b1z}fRLvvq5(-3mIlxsv@dNE}Ck`3g%NW9q)R!olGFyjt8o+>C*9wOMg zezL+-muA^<0{sAW#OHeYCsSJPZl}LGw799a2V{ena;BQO#^1m<%)PeXv zBJXqyU@j2%!NuRzMZHU*$&O`nR&Ct$c2%4GlwXcu*jUtAVg`dLLZoguX_?iMu%(@6 z$sMI^3#%DWaA?LxZT1cc(*|v9l*wf&2-TMA2JZX-LAUT6FnmA%?41Z|@tc>grXR3;K(7!pzs_BX;h<#T~w0EXY@jhfekMl3b zKcP`vB+APFh#}3l8B1V+rU8ni?#(^EAHGnIa>$jN3rogqQ&No7@6XLS4? z3Ty=Wmflo#oF#;nO4h-a12z#dve(Yav^+phc$%zor}gf5?GSrKO+W**6s#+=a|A{X z=|nb5X+xKoa<6isO~TQ0lB|6@8o{5cR}=X&7pzM<@kRXXcB=F=EAGyi_kO1I4q;c~ zdBhkX)cDUp?IUBUW4Oma0Fji~g&^ilyzd(Hy;l0Cz70EFF^yV8mA={zt~S&k^^?{f zoQg~AhcAdS(kOW!lt6$RRcqCa75ivDPb(W!P4@0J#2cXORhx9evX&9cIqtPmYDsf5 z?SI|av7g3ia?h7-o7yD~q0^;Kb1UDmW168jVMhau^QIm^`gV;eNM$lTVFDcm;ImOt&4${F6$ZrsMQk=cj6CI#b*V}1RH^^ z@zaHEwV&O=Lg(oRKQqpinQIvF;2V9TJ--N>Y2oV;2DY^EHPhRE%YKk_=%viGk^RNG z@9G6JQd_mEzn;|cwE-;Prz>2`Y~$XKfa`Bd>)kRhQk{VME1eXc zA4s)_=S|P>7|QZ`HxO;^h9~@=F%S2sTkEB&E75`o zpHL|S++(g|>(CmugtH?ZTdpxo+&e>Ox6wqDh32U36Qwn-b4dxOqV$9rkLJ^|RruGE zj?#**L9Yj2N7tYE`uQ%}*;%Xo`&u`f2^)^3G@5a$y=5_t%G)O@lO}ZCr({n=2Z+9_ zpN@V{V1b%imMY>(yM-G}v?K?0Zw#2d!kS&?ltPI!Ve!ZxaldSz18c!XV-3DENoY|I z4(5%_1anfEexrP)K)GToZp}{S{7V3xnp&>fLEOVD^OBgP**0>Phqy1AD@H21J!to> zZ%#9kllD60F~6nXX*{gI% zvqGngc+=Cb{8bKtAnS0r#z~4WnJ?hhu|LZ-EuFP+j#-%-WH;@yUZY%B@rmjwVDSL+ z{P4-U!dE~ZCgn;!urZCMZOX?8G5jqq(kA}hG=f8ux%f44rRERE7R{6Ug%gOn zFL{B!2%9N5R{L$oboSVU$fyzmFVJ|C)xAk})W?a;#3*kb=0i!ZLU@z798FHKp~zly z)4FE(jmupUy!~kRSjQK1nYom}s^v?4bM;yhu^vP{x*oY$;^`s0jN;}ah9L|Rc?^UICk z_FBfEB|C+%WM#&=lNvGDGa zFZOKn;$onhlLlq0+&7HY%t$DdN_)En>(Am5xaqrfofyvhAJ3{iktiUM97Q$bE*RHt zw6Iljrw6sWt%0>uP~@Qs`HU zS;Zo3%(sc@VZl88Ce{$CByreQg&(c9dfW(T4bO!#Kj(;eik%Zn6I*-^YU<~WtJB|_ zh(hYouVN!o>XNui9l& zr&ScOEbi!O>XQ!eIW*@#sPElmVOvi=GAfB%MG|Kggpye3A>G?D&MwpTH`ZVYB>Q#f z`rigB#I7Z|c2-FpTIZ2&t8100*vB6d=Fcy!Q+}+6S>yP~lk&3z8C$eQ-!b8=D6N9| z23#Mty|I~zuY(l~iV-6763Z39;e%)RK2{I2PPxmdt6!2%gIoMJJ>-|QM1%5q z9GL`rEq3`?efkKR*qz7Ga0~np;_w+wCS3R7X_)11MA9Pfup27|!xQ0qvAz>qJTJl* zN4~>?d5>_ND49?tiDIAd0*MPXC4KajlASapT|a3n7AG;rfM;xbkakIPdGuu_RIa*P z3AVt((%P@KzLHy$@%84GI%SXV+iJkC982?zIVcJW$H?|^bw=b?e)ys8k0@+m!$=v{o2nIMCL&9`a$>&{OSYy`@nKS0kU8>n8=?C34`}{@m6t zVaptTuT(YL9(@HR&N05lwcHBcqSz>+G&CY;vq*SEX`}2JoQ-Z5t>k9A+^;G#9ZE$c z9nX^Knpyubk0exgVSJiPAWSNAYF*XULR(noRh^o@|8)67_AwEH3y5R^*1; z_~$Ph`cZkRuhj2St>s#nAMY+~XzCYXfBlmls1Q|;rx$bIW)nc2SL#xW3c5N{SkD?c z&PoTwZYS)Z9a(ggh@4}4bYCW(;$7VbrrBJWBO%t>V6TsvKABG;^~G>2MAB7-zn*2P za9vm%_bzA3`N>x!xuUkNC}hUmj$+GXc>dPNu>2OldA0tGqUOc0V6@gWh~K&pjmr|W zKcB02X!f3#=okyD8M5q?bgBo__*>p>G?W#iQbXDdq&jtWZ<35hkD{kD%|l?%o6CiYW1leYJF)0iYV<}s%GsCP%N49?7mZ`>d2r(l zkr?7TyGm5E{NH;Q17C^bsca-R0}ly=9w~9d1535VCxTzv?UcRp@9H1;oCiJ^y;jm@ zG`ngxh(JZeDiQG&R4;eup7qLd>>YbTXH)b%5TkCl)q9YiOX8jt8;@ z_xHhzV*+hD+GDx(LbF75g#IFUEVH`cLA-YO4}G1~tn1<~)@%CF!O4FP+J+JC72kgG zlJ9u)sjyk-2-rAqwmdh4rk z41es#w}g|Qx02kuh7E7+^-giN2$JJJJ)hdl-_PGkp+^5pS1V5Wf7wI)V3PweTyWPo zi#j+=MU)=I%gfLA|5+kvs1Qrt7~io_SzHTQ^xzNC17Txh>&a&G0U9B$Iy7~2L4b%WKe(A{x4K&!=R9xVj4ZWbj;8C~k;DC; zX}N6L3ur%HSb!PHOZ@#OO33>sv|vzz@+0y8D|M9xdh~sIyO{~^Agj&HRpaQdogYyA zvL7exbinocyn9|$DSGrN^Zo7k5E5lfsUFm=+?_0IconB9v^!y>JS8Ey+s>Qe54)zw zJAfi0h_J=zkr6c_WSv&S&<4iJ^Qol$S^N9m!c}CqShIO#ITv*AUc);vt0^km&hCc) z=#AK9SViQl`g0=5!!8C(d&zMlX;h=x{jcWvJpOU6iI`CY0qD$rrX&6&-;cvD?B{ip zH+ZcX#!1cM>tT}e{N%;w`kbFUk~_*5CoJ`~H}V@gX;ZgfGt=!_8V=f1UDx%!3+|G? z3{@etP?n+);D&?T>s^6{nhUg@9lptaxdrZiSqbm1cQ*p>R^SNJ5FXeluf2bA(kUM&=tSv#Kmj)bL)pNi`sOxqy@2UeD26PlTqFPrYie9i%Rb+NS zep2Woa{-A@BVTdIX+0^K!!N~afgq6s+SFb{kU zht0J{Mv3Z@9D2hXD~FgnoS zhS?}#)&%pSFL)>Y+sKRlr(DJhPx09b+9?w>u4Nk7G)~YhjXT}4`NJTGB_EcbHXL@^ zJ4N3bVcOd!6HqRT?~C4K#pk9+`-SNXnTLXtsEmo!hXQAf1c;S2(f>t0CASY7MqtJd zpcgNVxTj zFT=Fq`ceQdUAQ`w`ThLLNN1Q7_HbX3I>gP$1KbmJ$XUhz0Q)%7WtEfE|@nZT{Vb<+SVLM}=Q7kqNUgiJNSOc{GT z&QQo)ils+#;G%d5LU*{((o`zw|8{;u3k1$XvQ6SAFNcq?2?V_MtEmf0T8i>oa*th{ z`)f@;4em!Iozb9Hh$&Zy2&4`O>0U=R&p_C)LMl}QM?7*u&~)My&`NZ-dADJJ)kpQu ze~9723bD+8ncFPmSuztn(`YxU655! ziAxH=xrkR$Q&FQL2}|{PQ&o$vMp09HB3+DrtqkrnQ3&Uk@5MwC?v0X5VFpnu(v{Y+ zYgLJJN#|kw=ESf34vWs(1a*Ntg`d}FN*g)ViT4#UOBdO+pbt{GHbvb!9Cq7On1Tj% zlR#2Q4%nb--#Emcf7ZM&A5siQTV1?X$ktgorB7F7)4%DmOhp=o4 zWzVb@=j!{69l?p~7{U)4R@;Wi(uGF=0|5#hjI<6VT#I^&fCxEJOv-|7&i)e;iF_5v zvxQJ}z_Z8dxFNo%o+0aelG~15Ttw&(P=Hl%WIyyOptC68665%ZFOWHmft+>XK&u17 zBwCriiT@V??N7b0IdqNzj#O3Ri@`ccI^?!c!AR3k6Put7Ek_W%@b~Y}Kas;BkK1CUE9E$(@3IT%y#Q3HIE1-h7P)LvM!ZDpitQMEZ2VpsGvPxG4FX;=SX)*iarmmU63xWg9d|V0O<%<6d@@y06CrkzxiPuirA`Ds}K-;Mz@*szZ&CQqdFqv7(nBlL%9QK$+}0a z@s+(Ga}!O^_*a3MvMp>4Eku*+PwC@{nm9h;$tde+S->^|2zyxEkLi$`fE8m9j&xP| z9|{{J*Du7mQUvkC`vYJ}S<96jjl=c+5RqE#;e?0+$IS^M78odY(J{^thW`M~`@%9| ze`RNbi{wVUgW%Fpn}*kcbDWf<0Vkh#-Dbw|Sux|X{J3r&s z`E;emiaU1eLs+UV$%jKb?&YEVD1st!&M!!~KQQJm`lJ0I39fa@UfM_*tfB(6A6o`sQc|0}~ku?mLk z0@zeo? zW*5qwNfiGzO@ROmsKZ@QG@h9@HP|F5CrsAbftu*TjRpdOr$uFwz!R5a7!y+tCQByI zFAfN5P)L>}4Ik9RMIK=P6oO6y79%HyXGk_Vbqs=VuL>$=BvU$fa0GG?0rTguc?AAQ zUZkYP8XBnH8K4~K=;#*zIhh{~9SZIlz|SU9`?}y^x!!BwZ!Xv`32)paLx_{2tRgxyBQ5-E2`{xzV-mUjTrqJ2@Rdu z=oq*W>WGBwH~?@Kq_+aKs`*_0a##KWD2p^5o06LY(!H z(S4o@F%8m|WJbHmWTaam>o*3wgMw&}cfYrb?4o-zE26Bao7JE5v+7IaRC*jQFKWL* zlj5d5G_svRSqwA4vE(F7jRVE(r^OocOl@Fwx!7OFKF>WeCuJyyFk6nV`Ig>G2{$v~4^4GSk!5{1cwgX))#|)#>A5J=5c5 z6$Ln^;z8y7q#NfG|NZQ_=k-miz@dF<`qV6pl=zEmRzH0V1Pd%OE-#0)it~qad86^{ zm1MEBZ6@OylBcu}D9G}XDm+V|K{yyB`Zc%=%^UO5o2zs!@}se{6E@g`Xa=EeLa%lD zqM)-O+j|4qPLq>*is`JJo+Z0A>4j;|?`x>S%VQGHB}Z_R%fz2K1QFb%ER&)?vngW9 zvg-43v@XV_W9YbKGz||l+Vd(sjE@z%+Wfv9F9zK|=MjKbNDZeGat4J#Y_U-9ye|%x z4{}tF1SYK!nj>V8y*UA&;Da@t7B&tb&xe+^x0XCeDXr6_b_UeU&+HJ4Rv4*(bbsS49@P8g*D#qL zE^UjmKr*^@@ek_dH9B!wwh)Ocq$^Ru(d4m#`CB#i^WG+Ev9#DT#qcoB8zVnMAeGmE zL|RigVcoh{?|g*7NTi}@vM{^XNUjj&B2M@`dke<_HB&@+bLoCxm`{K6`Rb`nATg4C zL(7g3Y|FaB&xFwf-6z>IIxOL<;W?zd-`z8PapyF7$~2ldEzeb-u_d4x;@20aP0Hqh zt@aX4UoloIP!cft^G#*t?HdiuDWo-*qA1JP7o*{x&!>lvXB9x&mBg3x6_ChqYn@uQEESNsgzD!|?@q70;*E3Y~~;wwo6c)-LiqEw*qBpFYk|2h+dAK)jqu^8jF7~)9F0QM;huf%HNH`kI_C|E<>k@(rP&YQ?JtT?VZ2vz*YzDGazfBi~69RLnz zong6au=zXgUdI9Y|2-P?&mDw9JuEBH0_P1Rr&Var)reFc`yZ*EdLd4Pp61=ldt+=H zx0+VmGu6z@WBd2-mr8itgY_GTT-F_gpG_vKMm zNF3K4TD1sHY!~J*S`%^z{+YU5;RafaKjr|>HIzcJ#58pw7oOw!`W{T=)rYV6uY=JyZu(E8R0x@e(JE1F_Yx6EiAj%?;tsP z5;ejLVvB5FklC{3@R+u_#pewVLCvK2E?8WFk|{lWz+OC4w_y#EDyoerFJEdktqEk1Qf?_W)G z7vOMK-(8N^Zr3#{j|_Qj(>Q#zn~w}^aFO2KUNPv-JSe_uy2(PCkH&Kpb2**&L#p=5 zxS2l19TasAl>vPq6}f(VBDq%ut@3sq_2`XM_*qAG@C91Z8#NPp>dq{s4hboDBvajI zF2$83+G>5N=@0oRG*p`B#3_Pa7T7&hr%>Mq;egB~Zs^%;%ycfHR-pjkVbkb~M=LnbPzWQzUmkZf5xob0Anx%dcFQg~7t?PsKBD_A8NB8_6 zW;MmW+a|hc(oDN5T?M+t^B|PJCk@>eBXDO*RXnD6w$ZDw`czza4$-&L<@eq5vrYDY zG|lIAjx#_e@2ElLhA#^rc=guG`;2`g>Xz&7{u-A)KZYqU7%^H24;X(VAY@c{o{O5w z@MmFDbGk{0iK$2`x<0aGB;mpL&`^MvU&x^-DyrFTSWlngN-ai)@`|j3bR{Kpe$=wY z69(E=q2dDDjX7;I>f;G3C9!&@t+!Rz17jtO0LpU5m?2b=fqUQk4&S~%dO3L!Kcb(F z_0eynb*#x2UmJ=thOgf_E9hhRC0xUy`_d@UGVuw03VWcc^#|JWoXjGZQ2bZDbr|d% zYn6qx_2dTUnJp20Yk}zBa9DX}=)`!j=LfFyW5kMO{eKU+_fwbu+RU=15H=$f%383l zrh#_)G#gk`(ijcddHy?qgb@neF~mQ@aovr==7*r(N#DXtH&)7W=xqZO}Iz zaC^04b8xCbkZ>CFKkBU$Sp<@ZWEKl(+bgiq5vk7T^={q>m(+($&A61CRN;=4s9cj* zhA)H(*Wssz;!^R2T9n^P*Rz?hD}gGAYL=7PbzxLvh_o5E~uk zSCcNH9GC07gFl-)S{Shfv(Ka1lbrNBCx-6*weeab88{QsWg=u8Yjc(NTE)E1?7O^oSw=k6RDm9K?1V+IFScf!fu5Xsngg6hYqMnD81uEpUDRUdI z0>O9Bu;!9@!xym$MSYo)>1ybJd(%pTl9OY$rmq-3j27M zL-hGlu+boT2U3zC6AB7a!n!~p|K)Yf9WZES$z-U?o5tOyK@boDyMX6?*ltvn7hG>y z6(Z}<{j%O29|`M``ee_bK-KZ7&yD}SZRTN3)eDgN3i*KkOjTvW2QIR5Rn7SX}#-UAaOs!lc!dcfBV-`eL^^`PVC=eDU7N zs6Swn?ZoviR1zS`bpI4m<-D)QxHT(WP_NN*kYZC(uQ5HN&XNSG!acNF)MGTc;<3hS z147k-sy6Q1*uT+9V%KchwDYbV(8EJ{_CjwvHT8`*iFkV9d`+u3&msFX5Z3 zV1H54S9}sv5DQJ}ylF{q%8!;m3&p}#1gY>WRE?@8|B{6WO|Njco~rVHxuSI6TR6GWU}bap8b`7-C+s~sEXATx!=yJzTKR&z?OK7FqW{<>0usgI41wB zr1Lg+M<(J7bM4Zi*=s5Mfx*FJxKPLKtZG+{M@RK^l$Jb?-`Erg0vfJ1NGb$_HC?s{wDQ99;PJ(e-QJ%lfQ_cVY}`zDv<}g%h37BEPNVyi{?S z@oVR(0p~7=y#o0OBi2w8WA1fx|IMyiTO;MA^jIy;csRvS1y?r`ge2kC;~IA|?=|f- zAMxj*(RY2HqtZ_Qmq9Vn_p6!5tK-Ac_xewnp!S!WFb6hy)>FS*vI8|0z4(UPnfIxo z-HjI&u)MFRv2^xt)DXW4=UU4m6|l=EH%sr+0H@S-V?7ut`^i0VcI(yo4Ib#l7uMs- zrMx-4m@k402J5d`6+R;G?$00DfN88fv~S?g`64*r6%$b#FnJuX2Jy2zhaNc96resb zKNB*7QT;_Nz)tUYbkJPfoZu{fQ3{pvhOMR1sL22bqAwann(MABRz6%}AW=>#PRbfi zWkAS5Us7H->SvVH)m4T9E!FGyosDzh_mUx%dS0f(t(UEv%fGZEJ4d%;^lwIA$W*|n zAW!6X!hS<}P$jfbZ5uLqj^W0M< zjcB&>-B$N?L%-7sTG4D_GJLAi<+GuaPNYY@?J(#Ghnp|^gMEaF0aK<25z2SB%gjr< zKqt8AdUb+I!)t#Yy~ZufwrtaI_nF*(=YguzkJQ>q&DH%^a`y;+JK0IiHZshoVyZ{2RgJ-1#;+~9U{LBSn=zG2^H_CZgs6=&yjHZzFDXio{lLdfIq*NVkpX8{%H z2uWk7BqJsP_?NLzSL9!drl@cDke^5X;a|#I2vITMrjAT85W?ogLy4*AD@wu}@D)p8 z>CoBBStyd^!VqWn%8AkZe|%G5{Q%RS7`oG4$!=HQWG3zMvTH4Z8jJhD^yDo3fFI!^ zKody+V(z|rSgt&N--(7{0E;Q94ni+}N@PJmFc2XHR*}o7ngMtdxa=1v7~@iP?czc} zFCq08ASMt(7%c0FW{AxT@LgKBNJ1qVrSWQQfEE2#DNz8urGYZI2mXL|16V%KS3n*@ z-@}{4T-PJFSZJ*&VVq82??$z__YePqi-AUIfa%H=Lt`4)Hh{BV8Uzw=gh^u|pJW*d zws?S9Gi62i7{W@*q|s}6kTwC}scoupF#xdytu}O2d&vAka&p)f96(z^Uk#py1h%0# zs0_9NrxU=r80&M`LUJtf66*&?N;H}*QQ{)Eq%;8B3631*p8k*TQyMfRbCBUnOdla6 zJtK9BKOmUplNYebfJ||>)Sj(ruxUsZ2|(O{K*a4ZWfj*1DA9S-QgpHx5o#&Gk8Fc} z)2dxS0-%|&U(l0JM)P|D(DO&M7?caZ)_fosTI8xc8`QGRQC-4 z)nTUn;V6yFLVW{(Fw#?G2d6MOxVe{t9Ve^Btr7sM!Ss8=<4E}yz?@EB({1hQ4_F-B zg34b_zhaWtq=aJ#nYpJdhJ-&5xGaCzGG_P?4A$up{s9WTWrNS)1Nykk>Tdq0GJsmW zCoo&a;(x#@xH4HEPirwzU&{7Hbph9#PncNFQY3R>@R^aOE+&RA5?mKEY;{f0qsRbQ zl_~&x@t~`?D#wi=cKkeLsveSrjLs~Kgy8DJ@K3hG28+R{XX4%-PZ;DwwP=*)2!J$h9=HLro%JL-59;E*ztEeUaQ{nSz*I3j)^H9Qbp zlE^&Jy+lDwC;?!IC)D@=@kS1P0B{oh3u`JUyI*!AT(xV$bcYP~1J)E#pSyj}MA$m> zzjmb^q7l^sx#Rt4Pnf+xbI&QdS1=U_xU0-w#0G0{6{Jf4z$(N5SjBz*o-NVd*pk`Z z0N_yoyQHDqL$s3ffna2&lc_Sc3^r743CzTBC;O;OKC-nmiTHe%ED9twV{OT)2xU}p4=a!I53`2&*=VDXIi=M zJ6?eQJk3yRSH0#5}V8aGN{T9zv*9WZ+;R#>Qj~b_o-R20!S5L zGa+afVPT?QOY(8rCzF%_(i;mtSpN@aMVaxxIV&}rQK=jWzePL=_BH`H$G|AUE43?? znI$vk7{F}O?fkIzXOSQeTM>X3RWHU30q-@E0RIW_o&)yr*DVgwd^&?4jhIF`Va`j| z&9n$)RR?_;vpR{A_yf>AMi9bKQlm1>|AAI`(?8B~TF72$^a0KM1Fc}9ov^$#dU%s-(p{ht?WJnx#5f6^ZB9{^JzQ? zD9`BYlzJCjdNgH8hoV#TbB#>|c8o{jB<`|KSUrJXA-a2DVZ@j)kU#(rC7Z%I8R%u1 z{O$*d17{)%Vpy^7&RVqy!2dWx&9GujsdF6&urFoC=@NjK*qMNIleY&*E7&jpA+7v- zp}c2XBybIW!dorFW;P({3Kqjzboh)K^rSAcUQDSkHR; zlrJpi$hCfVeRoZTH}!;fo;3P;8ai{|>2tl3?f*b!=k@IRG{Z!g`~_5`U3opLB2pVs zT2YfSUTyR(RQqKs$=S8Pe*wUVt6{ELLkLQoIhfXfByUS7fXB)@(#K-%Wr1#m!#CD*@c@9x75UW_l zEf?YX+z4}lH3yH~ZO7ZxV?v*-xftXqcW?t)LV>m-lfTkY|B!wZ~o8QuSOXh7~hg-V@2dQRb-^Df4$m+Xnwt%gw=!>EtnSUX0>Xr+G}bh$ZfTFW$$=I*l*dTW7g@gmCr%NOh#^R^xZ`AYUMgW?@x6@;ri*5m)L#f zybE=P*wWON_~w`SL#8EgKF)-f1sBzU^W^ULigxVeYq>3#(gsu)ru?R#sk`D>lq z6nrJO>xWq)l#Z!uQTNw#pC{kadH`fly50glxcI#V5^+D96WaC)KXt}Za4}$$sx$U! zE`&&qOH980AsoUmz~9(b!@u!^4okn{?I-9+B{Jr3G@COqgu2Iy{;ztX3(sh zc&%;#l6gG)D{{ZSrbyq~mb_^Mb@TJ5TNe4ZsqudN-R{^u1$Q`7SKlSwsc1})JdO#b>h42v(r)IuRb@H z1?I%b`8U4H$@g@mE({ATe7p5OI2USGtJ9;BKnjP$4lE+)%eBesjW%Wq#zyN3hd&h# zy$AgcN6&$CDo?#S*^Kl%n|BI}&hGBLUOf8;{gf6;{TAAOylvWNmhD~DkhMChGrcnO zh3-3Ky+g@@I=b{tI7F4j?~Q(jQ6V*rX<5LTQBIuK-uu=19WIY4`d{y)Z@k`X{>dH& z86BxV3S0|bzr|~B;bad#3U_982vRMD#Azh0n6Hk24LsB$*!9hEZtarez|S4h1YYSb zpjDgdnErS<9!*-Ubn8(SigcsW=1L?F*Q#}^pV{>`>DX(m0S?DurEoC|JG7S#;6ta3 zdXFgi%=#F?-W>y#wDW8G+6xsTzfmF(iN8~0{UoTkhj-2W3q#D&ky6YqU$dHk4&Umq zmtm{hr0-M1GuFcD7CC1a0vkIzmg>)zU+)8RZ_ zu?-)F`k}m-3592>_+FESUD70jRU7SfmA(|B`ZAB3W{3VS^4k73hh7U=^%*Tgz~izP zKQB;Np4cUq{DP3ZLgmYNk=^5R)_voy!ZDx6>doxh+ZO{5?U`HacWW9<*j=$1H?uRM zzix+pZl-H370uaR?X7KX&w8Pt_7C7OzjHy`|3lSV2E?(1+oBtHm*5uM-7UDgySqbh z7~I_kCpZKT?hxEHxVyXSo$P(?d*}X`>8>v8`ns!TO;xS+t&ER5ZZmipHqooq)IY3K zHs^}lo;tV77u}fq-?P@8O77T?2r~MZ)KqooB!_)9exYS~+kYqmcdZl}QQnnby|CK> zz&+Q*j(xbQIz1*jw=&-i z7-?+tZ)|cnj+uG(s;_gl9EzLr3D4e8yMK55cv>aic$=a`H^{wx*u=sUqWFXz9I29eIKbBgowl{y|Ll(3juwW!wUFpyP~C{giW>T)0EE+IypWWn28U851$xVZG)&R}yJNjx zU!;GLk%#SJGji??L1|-Kk})-~-=#)F@|=zGU7BcK4e8G_s0^d~G~pE99;y6eG^ujg z1d#w%sVg5IF=RBR;X+j4y8B?=^0NQ%{yt&3jJVo&_1f5o%DL?wJjnV=-fB~b1m|~9 z1Ym?|Be-y`+B zwfI~<45>3(=AT}t=$)E&fB6$xH&3Zn>Yn;$ZK-sb_dKvjbLHwgVAmNKErPKfR=}>G@*i~pwCN|FFMRDO42(LWHlQ;H>a%a~0S(G)gC| zSLOcZx7gK+_w)!`LeM%IF*ot?2wH{$&L6&V&M7I;5?zE4tqx7*l~M2cM!=~C*1_d3 zwL*bx*uKhwB$dvjJYa=A~KtD1-Vf4KELz?2r`)hDX?g-ma&cP zmsw6N5@BS&rJTWVaOr5hPa!3lG&60}DQ|Zd>CELw0d{%iH*{$@XofsZlFvGb0fOQ7 z?YrZv=O0+c-a3xxPnS3EzO_ZvKS+fjO9|MVaA38-tW2Q*R#hUFRVCZ;DB&LA0OFlj z%u2GVNb7%?B}gHsa9E5Y@`U__I{YDv!#6*DaLj*LmpzLrYPN*^U#l?rsECU&}3F&pFolTd?GN>^+7@NIAae`dj z*M#FOjJudCp=oRF%7)gGYW(v{;ilyyQ@34LO_kk@s8^_w^Yru**pJI?R@N zCe6qtOBA9bDZop=&GzTf{odz?_A}l;)|Qrbm>(t^>k;7O$J%d0L}2qzbj{CliY7gw z7xi-h$%%Rjuj6QkCmfn6O2!SkSa*$J4<2_$00*zN<4n6=wBu7XGrcNZdIv3t@IBcU z?fE?Y&$Ll|)$8g z{qK@V&>t{{a`UlL?>>QI|C7>>mmg4$Pi8nv*4n7=j zU;MmQvhI3uizBDM2?^(s6g``yEzc=vvgqs}kN)#!qS-odHg;(dSw1$Z<3DrAJwUIJ z1Mm^{kGH5(^PP0F!Zp;dH%n0?nK^o*DKQ+hRS7zMHy@L1O0PV1&Q;RS^W-dP~^lUrO81n5z45h4uZ`jpEMcy4?$5OuY0b1}c>#kI+|S^$e{#BKBw`*@Lqqv%SOH1; zFTaj3VRcs=PHZJ@)D}{IAul|w_iqa^9CXZ67El#DV*WNNR-01MYK;6oZ=WSR1YImg zt}WWXtb7uHFaLX_HZ(YNw32SHvHrF~WWH&MiUcM# zZu$>40NY(d`V``ql^tcdu3$;(kSKi#yZqGdx%|+n+vk>$sd`5VJMu=_OI6l`DOs8O z@y^W#oHjm-`7! z%B)3{f27%GRH}o=SKBpByTzk7 zDEPQ8uy!iZ)l@fBSv3}9NCcwY4j} zG;azuTBN3NXqD>c^0AXld~neAlGaZbf7OgQIUykIP|b~PayRPX-?EA7ihAZ?bAu>h zogO`C`u)Mj)b+C*X9SS?i+h&AWc~6_QP7?OK@z)v*XQwi)?=(`TVXq20r*4`bU^C& zO<5DXypRd1+UF31tGG>XmDT?DGja~G6f>f>WeTAs@~~Cev-SXbeLJT+g1MPSL_Mof zzJXsCP@ZYB$*re6Ip9YJ{{*H$m6wdWW_SF*onpeIc-?kFxT@y0R6JyIm&H{qX&l|6g+TWp^3eCF# zP4!txiTnqICYhlCeJBkDojcuW%itbgu^(q6!?JuaVL`v*yf`xlE}*mNrea^AJT+QU z=wBt;Y;{%7HBxL9e$A(8Z=5k!IICJKhX0fSzopH!m?cQQ@;x|RQ1S56D~@N!G)lC4 zKVGBfyzb`U8uOcVoQ(B^?uQ@uM_F5HfgtO0=t5Z5b6D~Pe0N|>%P`E!GVgtvXk{r9 zV|Ewf+Se+tL`b@LUHWq2*d`IeoP**ZfqlX>MNVH>$Nz&oduQ2d0plANVNsMUwNlp$ zXzkXpcYU9}A?g~hL|jGiqmZ`cZO%LD{Jsam$^?s_&yf>j$psd1#~3vinYY9zdrC8~ zD{xAW`gV(g$(D-|$C#1@Td_PHX>ezY(=eK(&yBx<$aT!tXM|(i8l7DPyG2O%%iJNL zDN>{n=;gpSY|PC6x#K|Z7hf2<|ANDXpx|f$NLxs^805YquShTvm{Is&Fb8N=1UgG-21PKH zfFhWS{|h1jAN~d(iv{V^X7~|+U8SHxx=TP(ML(FZ5P+#=Ah;D#3QB8SF6aup8R4Y^ zewKsa7H2u=8t4oWIP(*fAKZZjgud9A{~z>qjyDpAFMhXSIAcj}V^gE4vIjvf<^)!d zm=MIxJ%K|i50ZxiT-yNtM3)j$WstBCt)4IbaWt&ZjUg~JM0op$0VlviBYy65`@AQE z?b=QtVk__Z-CZe;$FZosa8V8d_Nox0CuB>7REfr-L1hgPdwCIN7{(>qvf(vAaEQD{ z9g;E*>)0EDWrA4a0YK!E?0tF~dfg5QK`(#!6{XGb^~Ku>4|i`6R=VdAHcgIaF*rv8 z*-gh52Zs-a*TPH>#Im4AWOfXo!$9L|*&jwjaS~C`>g@=Jtm;5J5+f(wdL<>$<$(B# zw0pZE6Za1Q-!Y;&D2x0NQzz7+DARr6j!*owvzU9uTS+e6$|-uU1;)Ono@={@nNE{l zueTQ!Tp;;z%LpcGQO8VeA}}YE&eLKWTC!Dndn7GYFCa);r$xjEL6bQXym9LpF{a7M z-kwr20Fiil<`WSXqB-R4@v~wQC znGn!A(7f;@Xc4D~%a|;N2goXywun2{dz%<(qsaqCs^@T^U!^rFBQ8$Du*Aq87D}~Q zD`yq-Hk9b$Pd!UeeT2~m%V%CzYnR0idyc1NzSvG(qaQ;ee8wG;&O~B|Lo%I4Pm)z* zbK58L$wMpa zon|)hPJf3+4?hm78pA=tRHlpk7rhN{fS-%O#!+i)A0$<@3BKaLEG}2 z7WIC3Ys=Rm+?!_-Pfk0yFKyE#;ado2p3tBbIwV@aS}4=s{eYK^gfMWYy)GaZKtw<*OqqYE=i%cjDyCf^nlQ|=rF=ppPT{d5UpNEHMsxz)v zDZ`Bt59MWgp!}F#cCs^SOvhNNRA)8c^Gh@lU2yIg@pCTI+kM#QqG4_aZIa#!ha;vkbKP9t1d$Yh+D) zbJnK#%_7Phe(n|7pWG+V#k z?J^(QZtG7>jS}k3Od05>@EhDI-%^bDLsiP7`a)9E;3TNc%UAqxq4!tq49;7k6kBrS01ji9``Pz?|^5eC{jJ zMiCWeWQoSTKIaIZ+&zGPl2xSO+6eNX=WLDaa4C(9z;3!DY4D4icw^3?kk9p5JFy}5l+ZHYcbB&dGsW)R#}G$-foq6DhXYm= z@pWH()30>yeTsR~rK%SSqcLkp9BFO|?usstu+AF|dj?vS18RVSbxGFe!5(|51e|2} zqKCo( ztv37o)xkN0v3-E~^I-mqg1D(BhRb2W^|suB?;gIrgJO-T)|?y{ZyNqpOCLt_$?wnR zEI<4zSK)6@Ha*m{m!0ykZrjB#Vo*XJjMt(d{5(6oU(Mi}^WY~*)*n2lVN zkQ%HYuqc0R__WtNrC%GGEJJO-8n7Bo5>IY7KiQsR4nYFc!t+<==WFLwR$WE3{Y@-kBev2`Hh_Mg~-q8l&3q%*a+00 zn@GN88~cPhV%&x~U%6aJW?2)tN_sKJ@ZZf6IR)Y@)CD6K*HI+PE()>d*zbeu==S9tiQRv z9p<%rI1V1aJKZ*evvlQc@cTNWvG}E}#gb8Pfn2!0X>B+5iF-);Ur-tU$p3zz$~L!N z=IdtB=JPFnLcW{r?P!g9=y%r#uy^7a?7806wW;r8ZSAh}rO>qyN_AU1j42p@yfZ!Y z-1`>LIw(K#u2m|c56>5T8@#+1Ave^m5_rRefUM1_(rd---lG+|z_;~u6|PvNqNMjW zd7k+zyr!>YsMQiex_4!Y-DdP4C>sk12+J`r`yF2Tg^;;&bH(9mVpWxENBtx1d8q+L z2eLb8N^cPipV*F+ol}sNB}^2;9p^L#YKN8x@J0M3xF)KhYLnr;COfGhb{M`n8k@H3 z0}8ryvEe_km;UoVuqOf}%@qEU<{$=##?11ch$I^`%YWY4fFzBAf&sA-WQ<(6-eU0o0Gzy` z5YYy)AhA;yLKM$rjz==83hURPdjPa#1l(uWhkFYj++gWu7a=xDid3UeMY?)oSwfn$ zHG$H*n-d=QUmSNW*+Zc^iPSRJ6Eayy$o8#jx~C}C^bn$#BAmlB<*sgs@F-Rii9IT* zkCyki_*!y0BSLg*C>V=gi=!tEqSVWdLb7)hzf#wjY}6D+vlXAEpg>*#Ff|in*k-;>x8K8J-b}CW+yIht+J}f+s5NhZ(RhYGr`NykorUy}!%MZ(q4_OE z`Lr^Nbq(T6oZyTt^%9IIksM5SenR@684cM5wyVQ_ zd|*K`WSIWQZ1bEl!3@XQC1c)a@vp%-+7+JsAruCfdjT)}#DWBzwI{b^dohaFAIHzSzC}EXb4e5 z85n`H672{^4RKOI=P=DK;_k<|xUD2|s$y?ag&N>zE~w3pH$4Q=+y+D0yv~syB{Evz z0r@!0JQOKcnlr7y(w+E#AsOZ^858*NLb?I4iMQ<)$eJ7e2hY^5LM@KQs>@k@M7sU< zX%6P%Vzk;tk#WOCec`COfKzL~x($HwY-rb<(L-oI^_K1c!F+5eK?+YqZ*mP*k#n){ z3FQp z?^u4}C$FHtA2f+DMHwtOETt6qk&dx|zy^u6hl@P9*N>_e07D9`*GG{uAC&f^fEtN5 zYVOC$HM&}g2?FgXG2BlDB6PJCr!{6I?t-HbGsNP~RR z31yu{<@OrQxHGlhTmxep^yrN0jCMNAsiT^(zP(imI$S%qLcwO@mbxVogsNMn$Bi$K zR|Y_8&~{OU=xd~nr{a}dqeyQ(0l@Ukpw`;3;bXm{AH`JE-a3m|oVzC2@7S!ie6tQ6 zakysJw7v`t#X&!#e@R6Vz)yzvUjFIJQ|calsBtXKkUDJoTr$I3LksS4`rNURJ;Y!i zdvxD+jj{N>-?%IsSy{!4xhj>Oy`sM5yKL(s*@D!JJZ0`8EpH|N(JZoH9RMWGgv9U? z`<8YurK|VMWXoXhV6CaTM|HTgwAavCjLt$wb7*UaOv~}b1WUW-XO1oylg-(@o|w=* zC0(6{-Y@ck75lvWYs~MGsn7KBju##drB2_9b#zN&e<`5wcKY0&K000k95M{BzG0hO zs;a&iKv4@S`7tCEnJoA}?*Wz$hA#V0*{)IjF7Y;1!nB8-b+9*2()c)psPpkWbolsw z%_wrJN|VqM{_&{5J94Ob>QpQ#7|6WPt2p6w@xQm9+he^jpIaKs@ZRj$V6Fbak{ax% zNhnXFaOl@BQ(_GAKx)He@o2`^+^*T*9HDTZyTN7O<~YT;Hv8_C*a=Vsx_DOjS&hVW zs~cj=O3PXAQKxvy^9ruwB_t*~h{QHk72Sa|Sfw(`DhVu^MK23#H@c?UX2a;(kP1jM zH!wO^2WG&haN_l zjeV^}`c6}vu32k~cMoV3#OvVIa#$&}zsCGwyYO4zOd8gO`WqsX^KDJQuvumB3)9$v zrWmiu3IV<$bT3@um+XOEy`IaDDlEG(h$FRdBhZSN>HC9_HNJ0bN)l8?Xbf<$!PQ5q zRcAMs(EM%tQ~+%c}rJ`6VK+#U-YNomUT{fZlYecDC`ER5De@nzfe4Sf37!@I!e=!-9!cS5K8@HLkGNbYJ3(*WFvI6U)vHsZ@ZlqT#C2KT4_7+bze7Vy90<)NQ|Eqc=DK ztKoG(d?%gqG|_0w|Mj}POz9j$_%d?nc9YBgg*f-%tK~hQ&TdSE?`?EfL(;Qir1{Q$ zkf>;k#xY^`aeJl0QLu^l$;iMMrtCE1a{_}=fPBd-D_Rr{^Vm5MeN-AkIH7|zCYd`KW+;7zw=LQB71zQ8z^iZ zOlgiYid4%3#5Tu4I*6L`Aeq-rpnQ)NlNDw;QrD!}L(GjxRu_w(q^K);VfBDsWR5p0 zPo6V0&9ynO>=ene#bIqg(&j!DN3CKFP}KAw$l~`537|clX0QD=xOgG_Xs}Aib;oGp>X z$>1v6elVeBbd!fbjXTU+%Sv~I9tPcIQidVQ5SaAzD8yBU2@I@bzyQK_{9R$q7Zd?w z1#WwOBgSNA{STXhruex2U6uu%0MV|?eoMpupD9V)VL=BV%+TL`BSdiIz>Z+H*bK8vJH7|HYbV*MHbL3-bWGuvLH~O(n zh(G<`y&lh#jeI|E0q&AGR=Dt=^p+*W^WFm?(!sPCM!poSG{I5iO-u0(a-#|D$%Im0 zvL9e#yWdNZ^rUNo;CXS3J30J6*SnLmN93a4m{YL9E00>P4QLAscxylundF66b3pdn za)5wbk}O{>AxiG+yARH(<7VeaUsj&*&EwGeCNa0>gR&4m-e7Nt44rKX`&z5#fPf57 zD|snb#xhoUsb+48=Gz&(=A2I)@X=j_)5FWr6+b({TX52tcammN|03_0+r>Nn1}N(! zlINusIRrS{{PcP}@GA&pf=nPq2mCh2gPl~%*ZqjOW7lJ=hVtN@*#ddv?)uz@DGKCw zauB;i?GUA$A>P7b$zt(bBr@Oxx!p7CI$T;my!B|Y*s2e#S)p%XdB$6-=)2J-a^1u; zKweF)`%3g0wJ5PWexdltJO6d#%k`7MXtLSq_sDmlea@l%)E5>pruLY;3xJo-1;(-{ z1TnX^N}_T$)KIESId#VRfiZHl_5H2Xfb}BFA0Ie4Rd+wY>r1JS|KmYTe>dgoq12gm zvmG~~7W@dkSn}0-kDn3NE|zKO7nUX>C<7L^4oQX@O3x^aykB2kjEc5Wcs#{C6p0?s zeq32XTfPz9v}+;SAt(3zkp+Ctugbq-G%0E4k(oLdffn~p?MhJ&Aq(8c``J|?ln;gF zPITG9`UAE;NTEHOBt6+rz|Qr~wa-ct`BQqN9U>nD@`kkoGRsw(hBG*r$3&%5 zPl8cx>8QzzY;E$K(^3N2$|Q;qbIdhnD(NG)M9QglC}hdVQ5AhKQvlfPhn6n;n74Jp zF1oC_z$k(g+fivo#nJ+=lkEhs9k+t^u7z?-9KzeU{C}WP;L%>}jgZ)F)UdV7AbH%!(M)AeE zc!4af-zAN1P%G9t_Yy$(ho79t_H3W`@YiwaADA;vK^62|0NSS?le$qp7( zZ7`O@Mr9j1nG0a~!Ed8}n?&>@GTDr^?y&xcR)|;RktrRBKUG{0zbAr|TOHe~P^-1F zSK1wj2o#EDmj$+?`uX$zd5V;W|Kd+oVUG`qpcFSc#bv9Pd_4v@torq!##zI zOO8umT~AiF&*&ho(QWneQ-;P*)(8-|OerkZYae!c?N&&X)9nWHDE70H(sqMy?gLQz zWSi9<)GTKW7i$UNBWa`mXBd-X91oi<%;2Q6ug;e#W2YayKn~)ogh5jA&q`xD(R&|x zn6(C4u2i!7g1hg>$n5ggW{j2g?LH^`?xWlu?t_u`lra1l9SXeUrN+XKe}*aaJoyru@;S z9$sm_tnnaUx2g5fcGqqiR61kJ65THD9eMVeEF%uR)9r|00}#F-T(EKl75nOGu$&c4e^%9*6u{EHj=GskrdR{;dM= zw~is>y8RL7u~mU`64HuBDl`XvxQzVY@=TDI{L+Z-E6K@W%|1y#xi$Q%<>nM?_PFUe z`FX6p+NqE*p)Jm(L+}+vEXthb5PE$S3wl9O4xa5){8XJtdO3}82W(2<(90VB?Rs{+#M1Qmjy$;(nr7XobET!Q9~<>aEE(pRILx> z&JVOX(UI3LyP+~evrsDE#&{ZWE_=X^NbnEVb17lU7jwWwsW8-l@i{Cq(iU+k2Tpv? zmg3~@vwXNDdq{EP0rSW)7W@N8`ML4p7AK>q{CWEhql~!=lerinATmJ*;~JG;$sE;x zdEk)Y#^j6f4l_Y)ka|O3+;8<{Aau1&a__W=C>=1B;~1JrrdJIXTx0%O>7X){Lu(qm z`tcOy^bf!tlSjpZm|{Vqr(LFZLnxn{n=I%K;aZ~-CeiZd;VsL<@#7BYE#}rR^>XwC z<4G8=a1~9&%a8khUREI*NXKQ>9C!HwBitV%qtVy!s|5WwLn>-1d2MZ(CLOKzm~cBs zDgkD>u`mTyh6Wui&v05nDS8l6Dyl8Sk;F9!tOW(*rbw+L@wqBWOmSXdEswFDhm*g5H zT@4{Iz$r^c__hPDHq;^S9AQ>=m3m0Xm}0SZuz<~9rCDaGhna**kWDYk&c!{S>yQtJ zt2}rpft`!`j9M&4%1i+t$ihGJw+ky508sz!!t&6fpf21&3EygEbZiXq_S%R+p`-Yd zM;Q~fkKXLrDd6%dL#S7_WZ9xOKu%ARbv;%%M=cAIR#Eb*Lx-0n(Zrc*DkIX4GJ`ZU zk0gZun*Ay!Md{Ipg@j^#v#_aN!e@<>4 zAjS3H>Q#s;`-tcKZS6; z;&UO{qwzAKea$8?%Jr3oUdC7(AaihYhwt2dJckp-VZs- zhw?-aX23XZ^p(I(jQRRkrp;c3m8ePxeiE5nSzw=X?dU=Rrn=X$(Tt-TD(G49lhCw& z9ZZD#=6_EPbsFjP=j^dKVp--*7vpvu_tyU7HRXd?Ff3THQ1S&O#}-`m8P-gh15nRN z6o~_)Y|K4}d=hXyl??@eg=&%#N<%~5oD&7^H^c5+r+QlDNmZ2+JnKAPlX$US`BFf} zzhW-5y_lJN{4|n*G!|K@yha@{SdAp|P2@SgA?-Hv=PJXXsbvJ#D;YULC`rJ;{U+}v z!43#F?cLd;?LO4E#v&4BwOX!9JKx>CNr=@!6pBk}{)AfmAq_21!K=(z^+;w6JEJs=a{}-Uyl3+A&CX13D zh`%ft1-wSUq5|-+a{li>6Mu64Y7D1_KHk&0*!Pfj5epaoGiHOIJ27qr30un&ec}S- zqCnYO9-qpKzcw?I$o6*YOH!9n$KHkXlG^Y=86gpUFnM~e+83f&%1_BuZQ=iLd%VrT zbs?y!HXPjh+`GNanG&s@*>@{9hAm!F0WdA6_3G^MM{c07cskzf6X#v}cf7vpw+n#? z^QJB%Uu<*m3#!Wd!)k#KxAEQUez!(2uFtEV8v@GHYV!}t5Rc(FRqY|@;U}>*&o^`W zWumcPGZ>$rX?f^JG+Qf=g+8D&*9B;hDB~7YcJ+s%mU*9Mak{~^Bz^=cy&k%}0?aix zH)H;s4;PD#y=c|^T%r)VOnOi27%P_T{%PWYggv-2&AWZ8-$3FL1HS!je&?1aC{Aip zCvcb~sAiu4Y%WEmx-Sdyrk~pb0oV*dG>DacU=qbAZWe*Pn=CBc zz>T*D%7Ff}Og7AVWD*uqPIlnJLJ+|Jwm#B+JITacMUmku#_?t@ z!^0JS@-(&zO3+VfY61%$c$t|!h2NRhyY%o#6I3Cb4WikqAd)7tx%}>;n?{0rH5_^e;7==O>7GE>9YrZVch3%Bdhs<~E~+#$gxY&{Rha>sHSsoh}>V zpr8SX9QBV%5Jm#zIyin{fW5PNDDvJ0DwY{zEyGb`Z7AewkP(7Zn7w#iD4^BsNP}E= zNhFN1AO}P%guOJ8Kseh9cN4^{9)zSJ!a++{?8$=Mb@N*Xv@)t7LBRIHzd=Ly+V726LQ1L`a zLe1FW1=@M_5d_HMUzc!k3qj<@rs&~qCH5eFIS@NPL5BNp3JzHy;uakpp!J6pXa3G_ zY$f(E9~yYrC<``P#&Ia|uW~#UB-7?(dZC~MA?5UB;i5Bk)@VlrK?Tdd^_0>PqAX

    =ta;LT888igfx;^HIeQ7#zbY;MRSId4raqCsl|qzz!lR= z2M>}6=rxAw2m96^N<#v$f=ssqkxN@#(d5H_7&|G5BSXdx69xwf1E0>tn8>WeP%6k^ zf+X&)K>Tc3CRo}d+?m2Cjc=3Ll6|3|S|(r1z+r+8`0=Vq67H>@S{pq<*|)^EdWZr^ zyg}BZOeS;kgq(od0kMX;wj>T0cF@>OT(AR!!=OY`LG=PyytZ$tnG(>&x3(U@hL}vy z2ESUdXX8Y&B>jUHO69$WcsXo>J6LG>)PNQkTuzR9rXoDe=9}q`hPq_It~V_{rB`jE zKT>FEWr7+QT#M3ARfo4b!zKw6xsP)YARL7e*jH%jY3Bwqkqj#OLQrliUMwtu+TrcQ4TBjeD zxje-nsyAz{QXqst-yb^-)FbrOfuD%GbRclr6PWA8KLO&YzNf(*tD+)`_bs4UI%0NMkd~OeKmyYb%Z4tDz^^|n1-GBTgL0oS>$S#^j&MQRBU`Yb!`9!2 z=Jn$X?9u@VwjQ|6pxLYptQi~n1tjDzC_{DBVQg}}TJfn`N2YP1AC@?tl^~m}05l>X zK?G<=P^&az6tob$59sWv1&;=@(iD5=%LEIc3nWfT^bi?jlhs_m}yb zp#X3CZIYRRu(odqkYX1UOGQKMDSf zdMcdRS9nG_FrL1$Us{Q9!`czBxwY7P^kSGGy@xC%Cu4?TZKH=sFW|N-|6P z3Au3+GMBIcax|{LhxtlSKctLq)XRpDiu*SO=^~ki8CLo%@=`EXK$AV$u*#MWs#B`8 zwGR^zR~rr=FekABME*95cv5?>|bglhQ|63=hy8Z1aArBNsuB40stLkGJ(R{N>DdVga4`q zBB75MRPIsU(WhprZ3$0Vt=WJEd=4!%?r9Pd8Z%HdgLaHDoA+Rh+PS>=*+sams39^}aUTCw$9{nq=#s;fR8g8xz zR3LpPy@r{?!?>ceS@&vQ(Cmj=56dJ7F`xYMbx;6{v1BYUV`Bz43pul5$ew4F1iL>+ z@vs-~OywimNbhQXo^>NHw8wn-!<^9hb_JMQ=h_5mr3!rs4rg=s&(0}TD2nhSl08p%cJ^bcRp^8lagL!U=C_Gtz&k>?)iw*cOW#WrqF5IYtK zi!Wr3eSYUhzcr_}^yEP|ub7u8oISTIw`2Uf`E{_PjD7C-+I!5^Lov5HcJtI1Al&}J zT$*vdQT*nl6$unHKsC&&*b4eZ(z9K=1PTloXS2Wh&xaMr57S#|JQ*;SBfX#Qr~oU<>; z1qJ{-J-rflpZd;Ey3#^p3pVw&EU@&(pUVhznt-MiJl0evt1DTK+T71)G{?^qUc1}@ z#|IeA%LA$|FFVxE5K zg3N1CM)CdUG04|@yR>qm$eMY^nbL}C13*9Rbd6$)Ug-Q#%9PrB=>X%jh5Y-i@M>(b zEZ0Y)ehb~|n-vn9^duecNpaN+)T(mLW1;0H{X7B9IQsUkzvn}mRp(ke-js`?7u36% zsSjtyrh-sfrxb&&vh3;LuUL_I9Y3yUJFoP`X?tCkF^4AQ%fioTd6Qo_JOU118v(VD z7cGp+^p_sTl(F`O?nuk8va3c!Iga>6E8}DgHHlyw3L^%6fHnldW~%As7r}S0wPZZs z78#VTq_LRlbCSnzHjQ5&uB&Ao4;@4dZZBs2vOeTmD=C`h+frI?PF0B8PuxbP&Ic$N z7c2H0s5`M1sjAnAJgV9>_Md6JssWE0T8m=g=Wi`;zja^EI%__xEk_PjRz?(e534ue zFO%{-M!aM<_GgRZPhZvrc182Ab#z}GSDV)x0(TJ6Ec;gtuI849z zaP2b^#%e1+f4( zUA8FoxAvR%Bkf&u|5a!BxV`{VYVinty6HNl`>wa_`qJ)OUGd!xmg#<-Cf0KL%DeuxgjSi}k9c z>sSF@C9-|Dp6po!Lu7or4t@EQhkcMhY)R96b>2eKOGD`Vu6|zI{FWC0*rwLRWNDpR z=&nC#=SMWw=*~%_{?R$Em}AIcwtF$Z;pf)+?!p&mJBGwr>X|XAzbeb;wi@FTF5nMs zu;Md(Gi#S_!t$N{GJX^A*4JGV&8m2OyQ}K`a;nOim-ma~EpFBEHgc*@^#$_4b+Z%izBN)ajqxK1H>pk1_tiL*!r> z)>&8AA&Sbg2P#DblxD9b36D9J7{$zB!V_FXXU4l(0RSj9r+Y3|Vw}u%_H- znHlv5T@z?`S$N>KnS$Wbso6d}7f2O+J6SL5e5KEBSMF6mI|ImAyv51-33x06Kkz)R zyL@`m4mmDbXeKX6ZJXDeo0|My#L9Ii;GPeTuj^{eSKVc&x(>q4;AdK8{fRbDa8~dk zUd`s~JNay7>@L4JEk^p+8ecavwi4lOb=M|?c=l6?$+w&v)! zDA>VhIj+q#lbyu!H31>T0sC=U@;=RT8-&gMpwIjU0Q5D1)%5QxF-f?HcedtSWp@~7 zTS3rx8pv0@_+h?Q$AM3y0=^n?ZB6veU%;b-_E~c`?t52_T^3oI(z+uTj{h`rf70|XBYB#Uf;t}@zi)FnJ?SpLnve4ek!17tHacA7bl*i_q z1K_QjC;>p{@$mp)(DHv2`f3H%bbAs~j~!FpttVd0`{adW6@`3jSibVWyYry2_|TL{ z!1A;2X?nxZ=CpyZn2;71z_hBrMppRP-ALS4MSomkQA1_73RlZnqpj=yF;}{_iT!DAQ&_7x|~M^0yIMcG*&0D0v0R_ z(%P}Ivj6X?j&nWPcs&m64Ujvfdns;zA@cdzf52F>z$nqt3$@*%Ftgw@|M@g@jXOVe zJ+t*tZ{tgl5}kLuw**ez-o6@qPr15egZhlth{RF7dhqo2@$^U_YtdT~G<))S^6~&G zMPcIu937E`i2Mb%9z|Knq;O5RX^R`3XrGU2!+3YPH~o1!S~Nw70MGAE(BH%{-x098 z9CK7(%C<~dwa-?A<;hwr5rdfsE8#A5jGy8`-Vl~O8ZadeS>wG+?QpElv21)B3(B#2 z8-E|>O?GsfpQbbF&=_~X1&bqgxz%Di2e)ega0GQyFhgj8EaK|ul*rgsw1axeK~q=V zyB~f1VkmLU;+E&3tMrK2vohE@aFV(W%%q6i%}Ou{CGJ+}1_y0a7bs3S2|5zH-a@#J zp^A9Ulrx@8MZo{V*jq=%)hzGAIKka5z+l1MnGk}z6WoKl+u$z2GB^oNaCf)h?he5r zxZ5|$d(OG%ckf;6et*oGHM44WKl`cbuI}2stKe-P*spp=jLvp8lBL#AE5Y6Q+6@ug zhSO+Ewrrd`Q(dEW*!{X(*Owp$=Tp6TR9|Z1@469X(%l7b%Rs~iP1qA+KR;EH#6l}i zH2j1f@V_f_!yW4*TY_)d6ssh%qXd)(*GYfmI`FL|Swd{-!o+oecgP8&qz^dMa3uZJ zW#>R)gTUJ&P3Sy1GhX=Wd{VKKhP%`Qf_{LcVeigzImWv5(0;#P)U^*HTE)9E!l+$|QV5SX=S zUDv7{K0fH_*m~(59x1UKTsw=$MK>9f0JP89N19w*9bcpl%JM-t7MZ0_K!_uHuu_z?Is4w+7ld~udOL>=Qy{DzCV2r7RFiBrNN-pW+}<*5=g~N zhGV8IK}`>5<0QKVrCxoYYD_zenTf}ul9LK+Mia;>ib2Kjr9$9n)szNd^}7|CVat3SD(SioDWPP^C+QjPBlQer?*IeK<3K9(PdH0Z*% zz-Ppetxa-!^;`z)Rx`8UG==WdLV*x1RXmfkL6E^cBSB|9>?ju0_w_cN)uov+h{Zk`6ZAND-Exj z_)KauzfsS$2=D|jeFoh}Y=<5ffS*mq1z>dUbHK>cxY$p>H#9*(` zah(479`vRyW;u4!8??E}T(D!T-EE3zC4B{7%28JnVNbYT-Mw~B86f*%azz6AppZO8 z#U^^i9Fj1(lq@%xk=*}W3jE5g*mn2(B@VdubaQlm^|;vwlCK?DSL|3jI~o0X0ZNuv z8W^X#xTFwO}Vc2EPhxHc3jox4spp5i<06E;4OypB2*-wX@wrRgHVVfg%=VEw6 zV0(dV%;=aY#WeMyxaws&$aMi)YDLHB4*u-zw@l~;7GykYTh`J@L9RF7Vn<1gQQg^| zHD}zywhmc~K@0}Jsz8dW4# zLc(q(|U`W#Glq_+@jJH#R_Q=zlF2 zJQ$C1sh-?4{o-67X8O4LTD@MgWE>hXuO_#gmqq%6pYu0Qo#$hVn3}Emn-WniD(@2Z zZ*!5R5R&-Oq3hVhf?Y-97*VDb4Xo)lzGQuy+-)v|9ncf`UR!s9uE_V?ry)fp*P@3E zPxJgn806^urk&JKuU$S8$()kfQCQ1Wkc?2SKo_BLX*4)Ks=#l}e4{m0tO@w~^%U5<8{=ebh3#(Q(83fQuopUQ3=xp9Zkw+TVwHZddq16~*o(u7$XrUM5piL?*zX|X2qxCk04E1)4JXDyAwKCWvd2G=+e6Yrl8erWP}Mt!A89+DBw`n^Mo%2kucW|*;GDyr zGL`qxYU-HQkt;kV3I5%Z%Znh6J$-`JyqSU7*>k_1hvm! zsZoV?tP4?CdNaSMO(_)QySY`4+DVj3S)8MvOMH+Eg>t?{N6dMT{LT!4bn=UgEh4nM zS6E<*t=`P0eo71j895x^!kh+Agnxgv)i#9VcnHVAa5Xdka0~#b3Sj?-Vx(eBjS=l1 zDKnCaAI`F>8bFH5oAx`0_MZk*vf`rKcqs6QBo{SV)DscR()c_=AWE^XvAWB z!h$|#*X!gCbUn#cQJamQ5#w2@$$BWM-}aaBRN8*TE820=6Y{b3_;RPEXPv&O>_H~W zC{Oj#fKVNf;D@>sR)M+;`Os>z|55#UkEZ#M*_j)tEQ`DzbYByGc|o$k&pRMjBu3+*VG2c-)^Jr8x+Fwp{@{@T{_5N+XiI=fcN`9FK3LGUQ#6` zFNgQtE64QgZM{#=b!)3tB#pj9_6XaJ;i0-!ew|qI1#_Vhaq)s&TlY3*Aex@@pQgDA zVLF>~Ml^|pq9G%ZQ|NWX(5q#@I1Iplpq|mw`Lq@`<^O5&ZH|o~(L7j;4ffo$Wpf(^Hx*swe z(?sC>`lXRP$!c7aBY&H5ar91xCGEkpTl3wM+Fc}h@`bWba`RK>@NCVw>%_j;8TYs^ zPUd@C41-8!_$KJ z%*V59Zt0E+vqmgtf@5BojF6lXzHD`Aw-JU}&n^T&mF5#K^}wEV8pWRS=cC*Aha0!U zl_j}@xnfh^<={WFO6xj73ysD2nbLEq{a{<3x)OO}ZAsE=Q5YUML@y0&kWX=mzZYD8> z1F@0QF`;5uEI)?O%iNE9y5Mb+f}xoH;qZYI0b*%659ho!8_MT5C%cf5dg&7Q>8F$~ zhQ{ihP-d#r!G<|6q}mijQ9#AdA^jUW?uEdIRTdWpk-f^aq5&aM*7;u3EYP>d>G5%| z1z`&ZTjMp_#p5)MTZAOeHrU(~we!qU5{$}$d54p=L#G0Fdm9wTzV+YT>uR`ei6DhF z`pfiFw_j!+lKP>XOX4A%W0hj(KL)Z|l{ZJf2z%xtf9Q*E4ew`50DsSDMcw^n#-<$l z*9jzo{|g+*Q&C^zZtx4F9y9g%pbBzZI6HSnqP5j$ zQ@)luA~d;RvxV>EbG0#@!P}EE7I5Z#0JFBKe!v#HBIN6ex|W))i!1=iyq5AGA4dyu zaf$zSaRJ3=iA|3YYnLyOYCE6l96=R*g(5H=bnzV(uWLKErGh@$XcEp(Y{A?}s$i1QgkN?+La%5cU~sKu2vdcv-3vkA)^;GQ7ytf%XlG^lk?!)88Fc-5UpJF8@0ch zKk2|{vQmS6?V$K;;n{f)(f6}Q7w=f>_zgrv$785AK730G@sl9v160bg;?g>+6Fupz z$C;~m))%z#m7A}9rF?L?O?_v-JkoI@MAH6BVU`ug_Rs5$OeZ3Hg4{fu|0C<)iJo5E zuli))3IpYFXsW1nfFW09ES>0$8O|vb0`{?3%StAg*u-}4)r1wi_$opMk`#XxFA4n< zlJL2AdAR37?~<213PXAke15z)?Z!-)?#fOivx$CJ;H>1RWHl4|-UQ)u3{lTL7?N_g zFk9jN>B|UaKYOo(hRjh{@vq!r<{AFi=N*H>ir=$rS+Cbe2k~&DId}GzF72)g2Q?JJ zgEFDLegcbJ0A2>zGxbi8-5Cm#7xdF3@JpIcY?R-GxxjACnk9!^ephelIVW*{@h0CF z&i!%EXVHbnut8mW1p7#X>u;{ei6LDonEle9J8PJ|*eJR9v{LqSWsO3bA!XK1;Ge%s zTx2&G?a&KgB64~on__1mQ1qZ`;$gM>ONSdM>Z1*&f~@lP`FK2HBMh{4RA$SS zu+AeJum)g_&ZNh`mvIz+<6DmK2uTmu%;^5`^45)uua9PCPQBng`xYJ;3$bx&{GwA` z4`lF??O`9}L47Sw4uZjx{+vAIw9LV;mtgKdO7)36w;)T!j@&8TUL*?~4-LfSKA(mZ zvUs^kf4w`yNVq&dzZ$QQ90ChIUT2adp&R8L8F2~xFx(GsvmtZzyUYk{dF2N^jf0n< zfove))4`*CSKrXr_TmWHAwqE?Q(ch+p17h>>T|rk#xm;M#mZO&fid_(b(2+GmX6uX zRkbnO9~)Ddi~A?l40{Y{H=GmJIZuQ$2z1e&;sVW@XBM1fwhOg^QL%-nY9Fc1=os4{ zhuuNc8`ZJYC9ue4m3YO0Q1-N^T`ue8`O@bqBda)H;MBP6fxD&Van_ZCxI&ex zxLx{V@xzZrR@Ih)sjoIFyE`WaP72qbtJLoyhkY_Kkholw`bYUM$BVVUIuOk7jdO!~ zs~V^L7igl34fk($GIo7XRayI-C=&0pmRkWruPhLX8lXs!z`^%peJ1|>j>AvZJ+ zyKc!6zhmF6=^oye=qhnVJJ=l!+4l>&_eA|>Jj`Atm5ffuTZm~OeYZfNub$p8Ag-!5 zh3S$J!~sI(a!EHyNFb4D*7BS$TND5}P{|=}$;j7*D2dL^F*uUb@HZTKln;B1C8^!A zmJHTq=V;n3Cz`2E4vt2&02Q1MBq#7O)cd2sz;2{zq1=-PZrddbsE>S zCI-)3E87Z~;09p8ar4gIPQvM&zj_7)Heqi`wI|8ah8hsQh8mbmFf7%~wU21XR-U7UKo&2sV2Tmy>aMKHN@%(ncKAu%*Ayk5Qsp?I z!MssQ=uf}~yK!JAA2!o@OobV0sD4bf@@ce@$ALXHB*3}(MQ=P_h)$~_6JBi+!zHGm zl%KI#U-fW=9pL~KWw~fVP3sB-bH{awxHmyomc5$CwVFco!{V^?#L#8Vso^^#ngP!x z;$kTN4fA?Ee2b-gud|lxHg&PxmBm8;^VbSa>_>SQg7SGsQ>|Wh{!npN{{}}>&`EFA z`k4diWOw_{a=jsMS;TY3LX=6z&L*E#PFq6>AB+#)+0V*-_%oi^>*th z1N=}?d@AZJXPH$2oy&aH9d3|r|M#~0s@5+YNMpuo2L9r%GzLGx0jWUkkJyg5w^m#A za_;>IF!oz-Uc3ZiNzgC`u$Yf^+HIp+pJ#QpNtJx*Vo8_{Ony0Qpw4ru6{9oC6EY$R~ws0Jzqh~G}tt!+;QL2ho?o(v7)44l4h2R>5rn)?gq`#C zz|}J%qwnv|2Z8P?!Ba~(cH@wf%Bk2YT&!s=&T}ala=_7~-#L&HF5Z)dL%kRLhXEXR z=UIv@Ul|rL)_w0TL9><@k}8QW{13NMuid$zr%iTxbwADNb0iYhom<2QUw$`5+sku` zgPK7t`Blv-+U7yPOmIKY0#(xX zD>0MoFp{}x;d(1TI9c?(ov@Rq%n4c@~equRZ!Rq4O z6!UQLS827uMkd!#dF+G9U8Qm0w8(&@)0W#n5(i#%WLDC=DNu%`=r5J^k>UjV| z7FWy>P~zCo(EykfRf1khEmtw@00vEH%@$F@mZGCQ?udte$SUNCiJc!>2LAVslxl* zg4o=Y=f}y6&qay%5E2I}?6b6f37_gql%}d(R>h$^B zCDa!8b)pY?4RQ5y8m(gH*g2RT_>IrcN$2AoULs`X6S8ITq7P`JLKRwnXX%5~y%x)0 z?(@GkQNx7|6=ydjr2n~vS=t<7+*uHA-1#rmnZ})n2jpo^K;qZkC}>aC5HOm$Ji{AZ zD3FM?=ojMl`#=W_98vjogJyaqjuwHgB-S`e0TWERtzBz|bG5B^25zdBWfzyKj7cg* z3T%|*^l0E5e?DI(965S+Z1=q!{|9w7T=-CNWkbTEf4a|sbf44dmRot4Q=Tm-9)Quz zcQ>Mn+3JH&o^MS247P+?cK2m{sGMSXb0Ftg<)jAr@uUfsgS5yi$1dZ%TDiF5 zy@)QrpRDU}L$o6Ovn8QH$db^v4U8}<(*(j|H@(;sKj^t?mic@Pvc#-u_vRkA<%z+! z1QVyQtLR=}O|GYJw)P;Q+EZdZQ&Y0UFOxeZCh^+ajL+i|T&}S_X+X)}>M1xKyrIGGzam zxxBKUoC9wjd@ls-FK8|@8SW8IWJ*5?bXuh6CukZS!=IaXASaU<54kW^1ZXw?1gtJs zR8O8IKdSSE1V{KzH^g-LX-I5Im$v2yq~}kjH#C}mWi1l16aWieq3OQgrKrKBJXGtaAUu8|T2zc`le*C%kIhq6E1!Lr0A&DwOo-nGwI-23R*y62*V7Y^`&U@v zYMS`p!f|=(o;q{y5>TV0RLqJh_d)PyvPO2eoWU3f zkil&cENONbT$7FkBEXyf14sc;(m)v&27L#?px^MiVVoVlV(#{t=gs~P?cm@PlHbw@vVP8mRFOSMNoaN8;KEPgfr7=0wk;c?Q# zQ_4_+CZtn?3jI>W2la^;@=LWGru<)H`3MP*@6K*cz2-K7)6M$Bj$anTXd+-5^{_g) znyGLEhh=yQS+R(8ZMIi8p13{2RUMvHs41ryQeS6mHY41r;3DH{%3r-M?z6#WF^(>x9}Rk{qz=SZGUrydi0qYPG#6#=Z&Eo zfxGdnCRWHYZqWOAu6ZIXHWo=ZQ1o`4kk-)dZ1~%W2__c_xR0bjHwifQQ(N7bH}ud9 z*UMPYxjBSvOp(w%??v&$3}@wWVR^)HVe3hPtD>6ye&fQ5-1$ksnUbI#*mF=R?JV># z&uKPcN}<`ewQCQ$zCMyMf3^1!$gV-bMu2pY z#nV6}s#~BFao@Dwxwl%aC1q>xrh~QNX@C-}n^o%dg+$N~F&9~q;82T>(l@Jwak>R> z9OLq+t7u|lD4iICn0SE$DWZs2E;IP!3I?cL;R99Ht=t$qEI{Ria2NpCA1I8+bC(iqo`!!lFi)8CiQxVd6a0-FqX2;;n8*5>EFx7y-Pf+~HE zdUxPFraaTCZkW%0jjYHfOQDjtBB5ws!Q%3MhmKC4fC^>pGjzmeYSs(ZEMb`MU+lBP zM_@U8@N7dmA!7HwCa*OtN!keg_Th01;2&b?VjKclKJzkG2Siq+w&f+AF!$9n>o*`o z@rO!W$E<1?TurBi&{fUdGX!F1gPP%5=FgI?4_0hPXr@c45Fy)i>Yf~e&gGv~E%j9M zwS1)fMr!K|w%6jovQN)k3lX{vo992VYGQOGV~wzym?m81BwHg$8?C9GY@@d0#d06| z?Mhf5EJqIuyQbrhc!kLMi47hqV@Z3coIXAw|DE{;elJDpPH%bqnkWLbS1lh#`DxcY zSXSaR+4XG4qqyiP9{przqLS>b_`9@sIxa8!$;})qi5_!E(o)vGU&vjOjUX6*#3Mx7 z#HDbXV*3jU-@rt3Cb@^}=*_;%{19S@Xe2p)s!u5Ceg2k-kq;K9`flkL16?%mR-ptsdfEy~tW%3P zP@OwN0|YDUpp7;HF|P0B;Q47Q2goj7T4t#2KKbcbc&K|cjK;oE9g>=MAcPD|464@|+c8{NH>Ak42^X2Wt?8quPnTA}bpLY;YyU zft5C)Z<*3jyBGer@;AeX>Tks}&+T985Ei|=Y;bO>T0xwvv85_ozlG}eJddeA`W(WG zu>wAk7Ppt+4MIsIK#!mf8p@yz=1_&D;SJ_oaQT0VXX;_+21F%!uO36 z3bvTEU6U132ifu)^>Ir(iE4?hNk-#mg<+^D z&a965)4>M!WVdPK@#)i(XxffOA9K1Rb2=smgcd5y>61I(5BN zY%$DLgt)!NT9{ErQlIf5`&&88s8LK%uW_O%pB35F z$oj$TcoHJeBcD*GFiU?>W_Kn)wt0*6rCvoxJKWij-AJm+$QtJ^kxw&2A#w5ej@pa< z8Eaozb0+h6;fRb5Ct-HMsG1{(PWn^*D5Xc#y1+{{&JD*0?*|gK)Q;_#Ef^^7K{<@L6M z!tegT=l=R?_LaE$ZhlyCoX?y6;&jLUtMtp@%TFc?AeW0&5JQPd&CU)lg_xi951xC= z#HTg`QzKq}Jen^uG(;w#`%k;sF&&R4W4Sbxg)J{TzkN=M_88@p`@kQ6YF}2k42~5i zhU+Jxs4?eUlX!s{+NE!0tAYX{|Ed<_`tVVJZpqwveoJEsC++z3M4ON?ZM0VK!EUV~=nd5QDIjR@C ztm|#M$5lFB2C{BBw{QtbJXAeLyVJy|diIh*1VMyq=3{^W$Lp{Olb$h8F`=pNUH>3ic6`ld9WgM z3bzkb6PX6nAAfJF&Bf1js56-=6#weI;D_n;VyBEFkf7vT`qKU(Cre+s5vjMqZfvJ$ z{ae9++4_%nGdAXu&tuo*@OM;(!<9wwXJfgBTn>ptMRilT-s1Ai59V>m+yjTFjDW)f zJTiBTGi(bl@kQPrkvZvoStM~BOhP|!dbChLTbYtw78|s-bh-IJcjRW3vy-)tkQdWW z8H28El1Sar&XlGv8h!X z|CU$#H{eOfc_@m2f-tl7QV7=Mf`Fxhv0NwvxKcv=I;b`8q!_pTNux<`bq}>7ehrWT zrLtnhexo<3w~N*d3wgd;??9O(5k5J0mXR{b#vh2RH75#P>5Cdgkk|JOh#=Cx8m&ny zPZS2z7w4u%GN*E5=!o#M@`^o!Ake^mq(BO^Xtln%L{t>T{!R!#;BsOh1;0zA$Wja) zbo(1EP9`hp)>{C{acAOoAg{N|f3>Sa>gl9=;ij0zmwz&XXt*hD9LfcjBLz~SO{pTc zW}ZVa2}zH9Lj-$6{sPG*u8(;@;b#HN&w``_JG~XFyU>OBSskfDujd}s7*;o&^CY^@NdHa=|hO-)1@Q?|M@r0O2z9)IW$Cad*qKvtmWF& zf=!$YH%_V|-o>h~Yf8*aGxGl?MyzU5z1Uqqy|>J)F24kH5Cf-O6KOV@@p@(CAz)DoUL8_`eLU7Oe57`Ozu{HPVvyis&Lp;)4}#bYthjUnf;W z^v|w3f6WE=f86Z840K~Ulk`&X|65<$GN1-d3jYwg z2%;y$oVRCViH4P6;U-l`N{O8RrZ<4jU1sg~;FsG%+du3A*u{wDu;JFc6VTi?1|7SW zh5tns$zQhcC9_Dut*eO)@?L`5&=7#){|zvwf5ojI_DsAp^pByo(JdMxW|0y=(ms6n z-?a}(J#mYKq8O>yXAJB3$4K3?;DX4?Fr%Z^OhVrO<@>u`PraH8gh0(V{buV$hunhC z)3`3Wybl!=Vphuu@+qaUGR0=uueYG*dEm=gHmG%cJw|(jh z`--^a<4HEt+lRf54i}3SJ{*ALA!MB+Vp!I|D37WrwqNip4F`Ij@-B|vw!Qvrh zr_T(1vf&1A;u0eZdLTO{23xx9b*Fu$Lqa14ZxKp`HtvzD;<;4^ZhpZq69)kXm?S3fQBQq%8W16E7oFs>6`JQ!Ra z_kGen9a_w`c|>3T$&PGj zpJ(tpTA(pjL$xZu&UngEkfZNY6~f}SJvfsV7y*3^rlSM;qlP4|-WQi92!m&}PX^ykE(^Sy3|jBUH<*ixJ(6^#I;5q?*Z zpekDoyz>spx0MGpr6|hj!Wq;9PkeQX^Mgw(i^9mR=gQAdcdvZCGtK`zh3>!u?twTt z|K~}0NaCP4(gv*d@rslh=xHAylu-bm2I^jd6qaG9D0)dmKiCmU@RdTUDt+{av1W

    {9fXF>!#f|NA;BY3-Y=!78h+2f*3{CJ?~{eQaYNg9gp+(JqC*Q zKo_wb4WpaXDv2fwY(8efTpOgx^cvYuJADQdD}lTNyB(PyU|JGbLN|Fkzf+STw&pa| z&S_Xuz~OdlP7X(Gw41`q7_F1B4i(m3O#u+fl0O05p5J&;?qc4#MNUY*gN@Fj+M-`@ zZDFf$Q?-L#IhHU2^@`_Yv&v$&1I*(_9Z`z4b!Fg*{T1u%zSDMNnHL092#$DB-i@#O zTm2%ZP|IjDg$W*7hWcKu&#zOrVoRvq^RDzoumZ?N(vd2cM_N1ZH!el=FV~Th+T<|AWI11_rNZ2wDyv_y0vvmM4vvr{HawWjE zvujcR>5)*{WkCV36B6T)PXHs+eYT^J4KYAOj|jzJ z3?!;4{T~DnX$1hUHhG+B_0X;>0LwhSlrfo!Q1KkB#04Y)#Yt8J@a7rGVQQqhe`1D+ z!}JVD<@C5wF+c(h(pEV(5B2P&*^^TI%r{gF4ML>Sh{LPZ`sbK;{f0q*x-&NYLUW6Vm9@ z+ifASJTN^E5EVsDtHR^W2o(~w7$z9V1Ec_X0A%&uc(wkZ4UVToiGmA_i-)`;_ff^p zLnvY9-iMBsC|yPa|l5|Ty>wXOBt^)R$A~S=A9=o3zBnsI8?Nszk%p<*wardu(hkG+L(+oIPLf=K z&SELSsC~+nM{fLBgz`=7jmz@E-=jVPSrL6|)BUOl@e)xEGUzIVj(spd)dDcT|2%&b z15V(m2!uMTFCfC6+6}qQ;a9g=ve6hnW|Rd6>tqnf{+v)8y=^#Mf7!8r{`g2-F>gIZ zv8leqsGB(HugTP4T@H$y2Pw`c@|-nipYj^D+r4u;S$w3=Q9*Vbg;a!o8OZjdk}J!& z=Yt%=3wx@oa@|a|6lwvD%riFlSlXIwr`a91kKDSF&v~C#tsksCrncbBEzLj@vie%< zk#PL*Uy4|K%bu4Yj}j53!3G!`P$5Ii5w%*}KxoZ*#zgVK9SZ+oTv+`jWedy6h?0H4 zIYU|wunVV~E-iN@mK0BDBw-wkj(eEKfo*?<|prQ8?7j2gx? z!-*B~5gfn@`SJ_rprRTH4`-7G;YxOulTcHob%%$$;TY{xO^$ph}Vq{03=?|0Q9fk&fe-un}2IMuYlt`X7>8phZexMBDL zwdJKs;p*Dp6nuOQg$h}@bVv@uc}u2}%ruo(eVRvs~GS$~=eq_PJh}y?Y9h zW8fLq+}$jT`Oz@~YMPEFcD3TXM=nA^@sO-LH3>g4Le?}P!{ax)&jw{?Yg8C z(5&~QkV|zY(TRX_Rjule>~BZb#M%nOZtSTw;qeycEB}Z#Xj> z$&@NGqi*)U24EtX*1ZtxrfRe*o&(B;ug58DPaAA&u4p`Y-X55Kw3hoF#H}dY1SHA) z4u|TigB%F&oXZ`%)qupxkKQ=QhFLI2Y`#&?EIwK4vi_BdZ>Fr?URIg3U;*+M048mz z9(NK$S>kgrQ6?5G;DaOXaWlI>E<^N~#Xon>G?B`u?oE&E<9OdUO$1u`46I?jE}lG_ zn)_vxL!G}b%eP5Z>Y+l+TJ!9*p07M(PYRDz{Z-Xq$pEO2d`a9k4_og$cjDFS`pjjc zRb619fer2Ynt%b{{v=L>6h6yFEsU7CxQEmr>z>r?*6ozXWc4FZ^kf zQt9*aKn6vuub+P7dmeW;tP$L2j9{z`p&|9jRGal?}X%Nq2mHP}tA{ozcYm3=HCM)n>s$IeHlFNH&Z2 z{Oc6gd5!Zj1GC>i&=waZqOi(57H>xo(1MZFl}VwMd3h|pF*HE)Y`al9LdK8LL}yfm z`NUaWwj>&Hf8Ejj5h}6nWt*sp_e}>K$>YIh?ntBF9cF*aqoBdsh&RSfv;6LtuLFQ1 z(H6}KQoka(gK+U^O+;trl;TU-ejo2!MOgGj55V5R2>dO-0d zYqQdK;>>IoT8HjtyQ>qY^!$4gw}c_zR>o$ysvS()P~>LQi%f8*1AUhhE}{NaQWtEG z5rVU4pTkEGQ4f|ms$|L;avv6^s|l*4Dq+v$KSX~rpiK9o=o7!$tZ**?)-N!po*2X^m*OZ$GKKYMP^);n_sgA1wM^a z5+z!%`7gXY%bEnLW>SNnVFxjA{gavjg|RVSCh=AZ6K1c2wWfihYVoTH9&BTLN71mGs}RMkW})b3_>SUx3H8&#fdY zz8F1UYb_OJ6%@MT*%S$*)D_Ij%le;XJy4R=5WF1vubGdTapeya>clIG)2ckx>U-sy zHmZ{Vb+}V^FND8)toL7MWmTxSV@CMtjO=Nj;Ri(4vwIF;L3EMh9o;xEqe>LcN~!kr zsR=1NREvx?R zd?nZ}l?gF*P*|%UFKDTBq{`BN_Rt!)P&nRWmw%-k4&zD+{zm!3{nt|&O|YZs+Cb8- zgH^#76{jltB+w6J4&tp9y>-3yl_#t)#t|db8driqE3rl#a)9>|TWg88mLSy&C{MX- zE{q(xnOt^yP0FsQSo;IPY<*Wc?LZe<2H`qikDtQJvyj6BoMQSD6Hj4M$>%Rby+z0m zPwTy2XVt%L@uuAUFsrYB2cEXQ(q`SNT5PJH&7nBX5Fs{nK$C3_qyDq8v;hM5!0R7? z*v7+lOil5tM~t;R6PADS%MoN9unVQ9@({Bbn&3CgYObkaOk}+x(rWdM@O4G2$qY5C zB$Lc1C{z1VGoigIOs2nM|V0(Bk983pp3l`sHx5^ZYn`D+=|a6OQxsX85&byb!KNY^PNGlX7HVd@uc2r`GEuak{ZVt( zF>uY=Jpjzm>$M7CIV`sqq`n}^?8R{0%pFu^s)IXo0`5Gn^!lh~LeioSRvL2P!G(&m z_=D}GAb~!>!CtL-f>D>LHB`cu&=z$fX(bu$b?`vyM*`RRhD@ycXobUB<2Y&I9V6OI z&O`=AT4)K{Wkdo(XHg&11lanXysR^}#BTA`YunFk*~y7sbqgjcik=yRn1zOOavV%4 zd0&kJAiZJ8edyFTccR{eyeR%x_@hWJL|AOW$ccK#k(M)NW}cedA3kx0!_@4{+p~CS z^ab=pukLNRoT%ob-_C^#igv`HBO2?m_`5lAkOnfc_^ z3wtIF2?xfbZ2bE^!cuYn!^liYA9e@qb=FC-cQ1GSa910r2(z4M1r2 z-vHGA4FKi&*WAAt-~;bU0x8h>5|fSV|GCkxlnh`>aUc#DBn3o43rme2Q*;&Hg1!S7 z4uGR2fs|;l&&_`&Q9~e|gFi_CDNsoZ8vlLqyZ>B_hFa?S?g$H`Gf>)!C=&c44x~h$ zxw$Eo6oSfzBL!ng0VzSIHY7p+QXS>HAh>}4Lv{bs^FNw%&KQE+cBNs0c4!VNHk=5@ zAoQ}4ilRq`w2QL4?=n&R_RFNS+=Hli0w`O)2l=wq}RKj07RQG zY2km_G#FC?2nVwJ4+uwE=Sepf*gr!+borR^|FG$BpNpF@Gy11LM%g2$v0az>=jpb^ z42MO!FZ_RaOp)Hq`TbDONk!4n=1hd#@y`$_xB7eY%{hNybOPXx&1iYC$va6izj!_jwVM3DQ)510A`u*(|to2B$?Ie>&+?f z<(B&S{OK(2H0JyT5xoET4Q|N-i1^{t{^#GoZH(7T$VuVyGCqSlHr_N#{+9dc2tQCk z)+5gImGIt8OD^ap;V}+~Q_?qP4_C>B!uAVt@Vr<){)cSdIHezzki4mLr)`dOn}Nz+ zl7_`{uCv19m4D-{>iOJFD>R0x%wm?aQB>A`^i81CJ)!RhcR~?iT+R*@Xv1&Oqm+$F zCkN1mZaaXDK6|!)N|kM)4lhx2P7o;2s;cm2OayyRtotGRV88GL^!W1VJTOdC#!dG60R)_0KfhSXnr2bI)q5xY{8Q!idK~n8X#n#A(@-i4 zWW%aGiL77!H8iUW35r>&YnTvjWsnH}m zr}@0~jxXENMG^d7av3&jChdIs7518v=j}gU`c4$M58`6`A9+%C^yK3JO^$8175g>* z^5>7Rn7ePinST=Kbi=>^?%1Z6=JMw{hh8Zh*cdst;fWR(g+EPCo1K1Z_@U1sEg>Z0 zNAuTZKN}u^XcmegIbl6~9(Fe85jl7G3|8Am&a(GU=Ml3Db#sRgszMo(j6t%#BlU7~ z#Cu3revw_?i4?E*mpumLFOT0>vrDq8*_(bzT4$#JNeYYKEm9A9eH!So2QCi^y=;TX zvlzZxs~mM)yK|@>Cn_+=*Uuden=m*!S^x0bHz2Q;b$%&ByvymSK+OIKm)iROQTEnh zc{I!7U~o@xcXubay95a?!QI{A#e+M%xNETB5ZoPtli(KIJ=hN4IrrRq_u1Xwvwtx2 zPE*}gU0pKMQk9S#?vfpiU_+TIP@88JlYu;3E1nC?r4@E-%HwtlP|D}qzy;4|5eDh5 z<*0r5;>yy6?&IBa=cC|f_u$y1I4O~PScqa&XK$1?3k$3hPkj%EIq!N3tAo8$Mqn}T zG&f04+FQBO;( zUi+Cy2y`TP*YX&D{@|4%yEkq++D+L#Y})1&%!b|XL;cGLPT>$jiGxmI?$bIq>^5HX zT+{$slK1eHLKqJW2Rrc2kZ2u-f?fM=jSbFCxAaNaFfre*EUeD-(d2 z6W|wPVL}uu>W=!Pw-yYbZE?Xc)%0ZCGDn^|tp6gQ$Q4*B{C^?f-}vp>P2vE@ZrTK1 zGY}?0o8r*skYxK8{jfDabueQUJrNQ+4|j3x(A&~sDp;+Go}6D`9(eqxli&W&IQ*Ue z!9h8Xtat#tJSbJt6Cs;Y<;DoUy}qb%P=ezO0jE0sP#z1Eut2(lk80@2-n0K){09d+ zW|$;n0GQxAJu$LN+SU@VuE{FPC9VdJ0)~+nAoxgakoe6#f5VHMkwyLg9LbTn)QRYS zki7o~i4l7u&CtIq7ra#-qT~S_g9l`e1^TD|F|-g#{A5!c>D&K5FxejeFh)&>2E!T( zQwh+O8vQeJMbN?jPgtb-X9>!2qM)cf#Bwayf4kij8v-ww0KX*vi(iPQlfOsbTrO`p zc)FGz1B8pF^xL2nIbHZ42^}%cYI4Q{mg=j1ENT8nh)UBj|E(0Yj|^b4D`|y8pce;q z04Olx_3}XD?I!4ix9my$5K|lx|Av+Q2Nq7@G(=#^^!i^|r^}=KVAeQB-t!xN{@|G- z%L(47rH2NHh+F;-5ji7z4Jl*)i1JVDN5poEL?ZX@BI0v_B+CN(znyI4IqhA}c{Zd_q5w(?>0ulpGW>}Y!G;-P}lc9Z4N5O{Bv4aW~W0maBR0mFKnEIt^BLNR8hsh z$fz!RBjY~;4f>BtB|oQ(#XtO;f3R;YzllS`Kqur`y6IOU)^a$3Dawq0H+=Tr4O5;$ zV=F}Z^%--2Z~7mM`!8KRXtFx1{x=m*_#AsocbZEIRGC_lSJU%`c9S5cxigS=+FhMq z^Ql2s;{5W0$)z9i^lxBR+w1=1?Da3pn`aW5iQ5Bq5KZEq3Aak*lHp=(Us~iY!sz}|dHjbo3E+;C#2v?$fv+vwQOWMi)p*=CnVYL0N(NH(Yof(VNqol? zPKt!GHS$qCF}RhIc^wHwO;5i=Gs^{2 ziQ!!Mlw{q&>0m;w&?@8(z;DT>-J{p*}KX>ZakKN?fEdH6= ztJ?QZky8<7Uj)7M<-VQ|HKUjdGeJPE<1`Cc2(zI;=!5NDg<~Pkz|XG22Qay*AYj4v z$W2&VTxpDk&8SQ7$^qPj*p%NPm|LN^_X&Q& zfI#ie)y=gbsxL{0{pGqVkWha3Uw%494_KzLxKKQ?j zf}pek9JS3Z4D|4MU?0)p41unrNJ|}BxC z9q>lN(0_W)ztN*b5MHe0f%bWTuuyDMR3&O^4-+lJ3H2(AJed4mXOga)&Z;u!^Y~vD z!`&>%Ec2*wH@SCGbk)baFt`(FLN1CBQZ8%**`G~Wb)uCJVQ`t=Bl4EME2UDCOhs0d zcbCe4S6U3abHEV^smRcNwQ^qu(+G=!i3oD!8yet+;du)oA8CD_Nw>Qq_^r=jt;A*9 z1k*$TSu|hfo@oyVN5hUM-@cHwr(4&|(oK z;^;i}(jicZAV^hVr^il4Wdv&>cv;zbTBh4Bq_r`&+wNM(l5zuEc7^UVXvW&OTCVqd z*$8#MzBQ#GH*a`Ve84JZT_T6=yEZz4(s+sQncp<)!eR`$m$f+2zh??E1Bke3Dk$H( zLL{PRi3O1b(`^9!XdX~!asyF1MpfoDLE0l7Hf|wxe-iD{kYR7BDqD(dGySfsQio+Q zY=|StZ$k-OY3WZBtu}14Q~4qxBH}bCoJa$G7&?_9V}7bYU?xgj8IWLk&~Zw-%gPhc zTHF`w#6TbGR7vDzX+IU3y`SSa$}@_A9_LFwyNV^G$B)?NL}xux26cCcLAndldn(Ix zS4$%-zFkp-@36l{nzK15vwszr6tClu0{At2BKOC!%u>dk%?jvE5&C2Y3`cVWaKe!A zJ=TO2Yh^;fmpP3X$Q3Cyr;7N1<#77y_`CwL1W76v9yLzWI%6($$EZ3jEDur1dIWX7 z3m7#{QjqQpqb*_(_H3=n5>kTVe@8?wurWDxRr;|sMMUedB=sor4|oVw zFR(Wz^THXb1A@Y!g9FrM2qzwcRrMfXP!OmIVt_QXeGm$=~rc&kS_2!bXDy>XMe zreA=bMMh2y9j;S|>^!Otew&EN&dZE4ECHISh%RAYWfGN0TRZHcAuUy<57@n7&hhk_ zOjJ-@L7W8baqRb-gf;LGqx&`tOuYk=WrvDRh;cMA>koO<9@OgB&!}Ou789)hewh@?|@^Z-LY!_s@nVs9} z=z}k?WW*NUAf$`lhPC%g@_?@C4ube&85JOl_>U4mp|`pVh}ObVJbltrjiX;h1KUhs z6mP4{Is)ou94^@rkXG1a#{pgCDPIxcNRcv&2I4BlQA27d^yKq0K-EJS&O zmwA~S^0Io?#oi!Tw6(_vWPA{1M0M6gc#$Bsg+ifsqf`Ac#S1e+MONjR-KK4+tK_5uk|@lQ{Qac_Fkf0C+VK&z7QmUnn1JQ9lt3K` zw!RHII)+xX`DpCy#{NKO*k?XKiGPJ40{SqDcb%Cc>LbA$g@>gFFqb3z_zeV`V?_?I zmUvf~l5W5NV-aOXP`X7Xj2fJ`V_(|1WJ%)O!yY!huS)RWf+@>6k>GfPf+irby+f zZf6w@XN*Jb$g~qc#=KLNKV}0I7@0FUy;G{yFcYQD&j}P2iQaJ(Pmyc}~ z-g^8K@H`V`7WcJsTiuq>lvK0~?07fG!m_f2Z#OP0N+Y4syvkwHG||Kq%L!VGUz%pS zc0xP>n^yBO-Her$mBYxl<0hEmrV;PE=N>$f`Q*lozbaa2@~7jfPCNg`tv}y# zuRps=_Imv&{1n)@k8vTJ-9ct>my@)p5%jXzu;*aQ6=TmWlMz(p?%M|L%b783O|2DX?ntWiO{i0pXwZ4kGmbUu40!iG($En!MG>|}2pi)>8K6}7p z@~^MfL7#PW9Jno5SOUaV+$(wM(7CMSFj{Zvdt5p06?I9Nf)M?+c{?cg8Rpq{^FWsV zH##!?Z}3Ug6mvmuxN7Ot$alCajh%#cM`CtZz0kpL$$0*cV9>)VHwZJmr#d!?cM3iw z!o9tCBEATMfTsDW-sZ4ESm>7$P?#%5T6dQ2~l=2Xi z?X+TEtPO)rT&M_%Pl|A$5TX;bK<DBn{3t-}8Mil6}o=fQr~!?hX-jyGv;F&|;uJxMK6 zT^>S<3t&MZ#Ix5y^R$r7XI)LC32D~-9Qg*ER+6nhT&t^ByMq7#_xF#HNDDyPGvcB2 zePVz-V;VthGag~vJV{L^kChb0DFHjq)1!b~mCks!&>T%T_z%+<=`giR zbT32B-R0%bh6-|#W*cUac-^BIQU&sXPL$6?d<&++vuBirTig=yjJQiR4gFHPllFfH zw@D>bU9%s-FUgAgM=(|~Cjh~C>mCsx1@&=P*t?T&Om#H;FQzU^37O0+;y!R1#|{YN zlv$PHxE|wcN(-6%1`190>;Du=0%+xwZYQ8%0D&x1&LGaD3E>_xr`XcEb}=&Lha(%R zcB1+Sur+of$je5S**z8Wyg2Z`WdS=AKoC9wk{YkQ--F~jxeki`vTbb}Yh^(35$R7& z6Cu;6qlt>Qtsx$*$X2#w=*;yJFmSvd3H}EkVi;<@#JqfLFJl`A6DMAp%ob63H) zH&ZekM^X*_w`AHc8#26Uh_@k^SF=j^F_V$lmukeiOPP1Svn-Vn-U*L0J_5h2}PJBf_ z%hhbM-35`Nr7S;};8Lmd!ST7mqbJRU1PycL>hhWspG^A6@6iR5$m{qT7_%2#zvL}e z-_}CukJZZ{emrdI?NiE@t6NVRL+ss|?zWWz4vlH$sb&3{rt}+f5pM}%!4o5AS74r9 zw;F6We>e1DXtns7R6bL+-GI2!;_QIeX6F=zX~l2X@V5WPC0}}K?~_j}Pcw1<{U4?E zr=za3A?=(xFVE41t=GTFIYL`|K2HJ=9Nj=R-TQTf$;G+{|Kj3YrRJJNdI(5}M{w;g z`Z0I|#qXj%oxW>eh8ST>ysoqjij!S1%gb?!15&%v(f7OA3Rr`o-6?QojIb+&0+=jT zm<3emX+A6NF-Gk|y+jhetIsWO$d@vHkyFu~=~E4f;~{?#ie6m=6=}b6k;Bk|)jPB; zxF~|8SlqQIXF2jLs2TWCJ7|+yo|Vx!sV!+^Qa6c8E16pU`@h){%-Dm|mF81jBuJ8z zOL@un!sK(Vy3sYy)4F}z2r1;NGX&~UBL8_cHZ+!IKksKoJNvl9W`~I0HSQTv-FKiJ zGF>y5aCiz)?2&2PL+dzBI@8Hc>BQZIXJjAh6N2>H%}nNe$PyzOnY(BBJ3PdxVi3Q> zC)PSz;P1aEFx-hsIbAO>?RtFVE9yuVvViLUtp1Ge=>Ec}8F7mUvhVx*I6E`w`)q+L z-;Ca_6JRahbyP@jXRW&|twMZy1`R}I^{?3%t<;bBxa)kG^A1w;d>RA8j5-fzsHI1P zHjvv)d!rx^UFU;tzVd2`z!IWlO+tBam2$$Q0a26KG=bTc5ks;F34xQlmN_JZ%TvUg z+)#4_qW&W`pt|}mlH!6S9DyzO1IcDH`p@HL6+rBI`d4Lt zUi^`TsHgp8TK`}C82%Gwpb$fI@-U@^5p{G7`V}7TpF!cBsomw(0QCQ><+=leg}sHr zyR)3EO6d;1@1@*oDSk|`ImkLVF|7XS7l+ngXH6)$pN-J*7aMsZCRuv)7PlyKyh@FO zXLWB=8+m@2WFP;)rg>PNrryW156Uq@vtG%D=5VM^K4+H0xMplVw$%hwB{**{s%a2( zLfGpQ=k5I(`B<6oOx$A>6Sq&`ka ztZ8ev=$)W4eq@%c!C&M3XyY^NgKv@eC-CmF{7KX_FK+dt&BgWebadd~+(iVExG{v^ zIvY6yuphpCkd4-rYsQ#pDi!{{H)J3Tf)J~5t7pyhjC@|`{l+^pGnh~(D}aYTG$jie zOztTx*!$Z%0+=>Vo!d-3W!g*0&{wnmP?oz=H~v*Lq2KBf?dW$?H$&CCg;uOnG#7~N z?J)Z%Hu|f=05g9~Rtu`>Y-o=)Q-90?J$z5FuInH@{^3I!N%7}TX$tS>yB<~0K;-D)sN z`GeltXICJY#qYM}UWu4|>)?PVwvj{4rW+Q|)A4LGf?6OwPUow~9o zYw)bC8A{Ll8n^e{zbHDA*oNLrs9gadnLqHb*#=e{^J0ef%~hB|MD3$Yd?vumt3bGY zrwomkZTK0e5Vd?RY)|^`Abaq}TkEdZ0nK3XNF4~3wQTO!Ty;D9d+P3J@5vi4KjpGY zF?w`S;Y1hf2jkCc8&8%eA(VtOxTIy@ZMiNYu~*j|LUtnCwZvdqRjPTj2#Np{|9qSk z?v_3tzMYheSohx`D7hh#<{eVUaob+(9uy&xwVc_2eKgA|d1urow%?R+VVOJK-{EEd zWm=pKRWf$EouekT0G<7i2xU+tUPra}fc5Q6fM3LqOi-BLcgyUj-RzUUm{crO6V>d{ z&EHZ3^Q@n8cfZHVoiYhs9hQ9-c*w(@`b-|b^$Ai8gSOq31n`#XhU@jk?t*HiKDrip zXUhKMx0Amvmm@5EMw}W#?iwK54e9O5|FsMychw!uUaJHH!UZ+z6neOQ#FhM?$@Av@Xmw!noGm*%Ds^r4{d)OkM`_YSXwUA| z%*Zy#duZ1)!yQk8(L*PrXVCXkWpnHzjXqP1>*o#~e3b=uzoOEgxZ6Jhr8r1sR}WUE zqht&YpzU2&n@(~+xwQKlD|)VZ({*V7lGg3_KG@4eDxtxdrwX^Cg3b;Rt8u~RS=}kd zXvpugYpPe8qFqIegyWo%GydX0%0YbaiI}J{I0ztt{{^2hJ)7sF)c!Dyyg&El9c(_T$V{tL)FA4k}M zltS%`-c=+|9NGDw_VDfj*$-kBae|RM@mKirD2it(+QD6YQMpiGZo_%uF+mB-SLBdD zB7we7`bJt393G27gM?Rz07k6;VAQ(RGJ8$rxMRSP#b4PbdsbI;u{~WJv^Tb@S@X?C2v8zNF;!2`m~f&( zJ{unccliohiH}WpsZqr^VO8*lW}r`;v|MN(k29rq`ulF$0j1Hj?p%+fxog{uy3guO0sJ4@(7CK>;P{*Az^?s-GRL(>>qjlcm82r z;HY6MN++<{89WUdxVel7el$DVmPfWu5$=@YEK z8nlgH9*U72>)xap^>w06&L{s?^K0#clZP7iyTJjFvvgzYFSM55E8}9nABnUD=!qZ8 z(h{|&Pb~cMh-4e!=)QDO%se$(NhOU=OfVL8tS7*gG#o)=<$o-;$x;5^}%$jE5!leD4}>xurPyF1*C|)``6v`wKPuH@9#N*@zU(Wc{AK(sQ=uDxG;nUz1TcNxgbaS>#Q(AD*G$br`FXW3BmvWIiLA?B@*N_N;|U7a zK?*V3G2Ucqj2~IKG+dJg{h}=XCqG)Tj{zw;`S9A$6}>U$nPK(6jx1Eg2h7BE4?t|< z2!nT7HH)!?hriPZT&t>uTTwbj2o?f0SEqiuN3UpEeDoUe4Z3@%4RdyhH7U55LI+(^SdId1r(8^C>_9FMqFUgkLY^VU($QfA=T_OT(@sxnn-jX?6SB zseOOU>oy!aa3FnVwlsO+kDgZT2D?`6O|eT&+Wc%1V6HS6yx{ZDVu<_Tywl}&7!RtfIdg~SA>5xbhi=|%8Lmk&BvG85VAm%+3sWSzrPcVd% z>L(wGvlf!Zk1&KV#})ylLN?9#;i~>4B1^33%Sn}R{aUv1^lqLr=21*6>shiMTSCde z5`1~ykVO@ICrFd@#XQ){kv(ZT;>1qm1crmUVQYhL9Av>ya@Kyb)MVz_!@jYqeDazx z%DIVai5P0nRXp;zSFQL~Sw|}%-pGt8^4RHl_X5SszpBnN5j?O(K0+84GNh<~b-%Vq ztk{A!NlVo@klGG`ldd^wI$QZTa9qzYjctZP+nuL1=nLO2Nc=G8x zx0ceT?-gnKd(K{svQc@EjAP$LsTxjQ^mQ4hIOB-KlxIsyXp&Njote{Zb`4#PBYEn# zwc$bvt#@B35|BrGt~K=h0afSNG4_Pbi4Pp?NprOfoxbC-36xc<(Tl5nVWT2Up*6RN z%}dPUZu*saExDmWM9Pcqpy##*>4``C1?Lq$9BU(E*jIJnPIoIg{ZJo~#|jdK!5FEfm7SfktvM)`x})X05s`B~Lzv-dKF8 zi_hkG`$d;weW64<@0z@baaC{+6&F7*2+s6l>PIop@>qwm$UVY8537;R7R}d&1RFP>R!X+?6owjXB;1hI`_ zlGYZ#QnVe4ZbLUoeNKeWz#6Ab7(^dq59S+{>h&F=N9hUi?NuR`H$LTA@0~`*{QA1; zJJw0MZtVe{39JAyZ0Z=~^5eCTeZXI@|2j^dV5)cs@v3ufWpGkPx@;A?_^5Nw8q2D% zj~jMy{IY`eNiS1cLTRz66WsCG&Pclo<<$?)m&-O~_JZS!Ng@S(X4~6vkW!E3{otTVodRq*xRKnd*p}zT@ zohTnHqCT#Zl51XZ9cH(Dpf^=dhfJg2LJ#qFul#0cs7@Lco<)vEIKPyB$MtK$pX!{S z{j{H!+CNDyxPW=nu(@e*CZ|vu2(HJ9KX3`XyW7ed%NWYQ0}G7~ah#F#-~H;pOM`*N zy{pTBDgN*YbPy@vt*x6H-}~!mvNbj9@1mSZmU7DbunISiDOt@N6LSv#0pp0zkzN&M zH3eq1rhOF-Y&fk44=hZ1mhfk;a>Q!}%WI2L2*nw3I1m>-mMwIq<;NKkIQ2;H7p0(0 z^jxY;yY6+rW?l*;8p^0bwS4#D`2B=PL+_uP%kdYx8T4r3PHxmH^PYANvHCQ-Z;|&F zFEn*L0E$dAMr_)mUPwK})01af==z&CE`j*)a3}&xiCa`>F&pQH#HlfIR6)-Z*#arA z5%?7=yg=wkpXAdFZuLv32)*b{%6GFJicF9eltl=;B^bz2+CIn=p43It1sZd0D?BW^ zo-ummilF#C?B_=)DU_TDr7!aVjxcuX)fv;*9uP@0{ZCse)nPN+%z8tN72L0-J^qcBbiNYw%Ld(uSo1e|}njwSDZyW)zRKy>RA&%)F%nuid9mu{6H(@-n4)N0EL0 zp6aH9l;U0LY6a}?8wbfMN-JHl&(zuNV2#8@@?{XQA+bik$EdS|$U0V9fP_~9gwI!% zO)b1G91aq51th&kO72DF`gT7*?Q-c|l3@Z_cWtv)U8!Ol4cr@}OPi13I*psT404Jf`lH@ERkjtRQ__BWJ2)Q&JmqmYRC#FQp!fq0 zH64s5#1}|jqtp+v3og`+U|I!CWOX{&nisPE0rkJ*r28a(bREBSK8<54DAv!!$b7Ab z&b_}ParZR(cX9>^u&`~ay#xXpD;FmzE9qxa4puI%e|~_)3WXWLx1Yq-fuxhuys(U5 z$Rgn=aG@YG8u+`IBo(-?NZ0|q_y!bTfrSXREEcW=#}o;F1k05OSAf}yfq#&d3eSQu zN`POaWx|=@+Y(_0@Sif_EO1aRGBt=3NDA@4ws~dA$L$QJgx=jSSlfwUZWBRpB7SF# zF{*j86bXQAzfaC>b(c z7;EZdZfDoy?dcFde^&!*vJ+$D3jf}7yxtfWUhnF1Ztjcw-EJYl;A7Xb@12CCi~4dd zIos41Efn4_iqq4oNRrMd24j`C`ldOqq+lFORu#I?`)V-Hp zw&S*l>iPQf4G5gw*p(4IVKi*?!+Ll-ez5k_ZAv)OV1$#Ved;|~va`zCFPu7#$7;C= zUX0thW+_Imjag=0I_xKWa7888;EbbTj=ZM-mxFSSQic~-xboCK$=VACB=@Rn7QI%d z)y5W%-Pvl-MxTmGn}W;}-;Ay6t5f!6JT7GBiOzx6LeSV5(s528fph!rLE}pM=6=Yw zWUCiN?zDe6)0dP}fsRxI&mRmd;+OWFqdJAWl*u+qHN`$kH3Oa@C3)hU*MXaa2I-RD|}veZ*V%dD~gLpb^;MI7+ji(t?WMT3>jrH9A5cp zuI%~zT?fTa4m_*>y^Qkx(AqQq3p4%vLm?o1CV< z)i3wx1)^ygdD-=KDuGlvIY>0vBi(#L3UvLuNdyT9H1Ucd__RM+^86ACwd(oK(E(OY zLc~y{*1Ua06r?(ziC`cLieu+V$Pp!uWIppri8O$`@po_`X7Mw>hc^7Oz9RMyk_0cbUgBJBHGe~59K&?GMfhiWAm zLA<2@UbWvC9*V3hMJ+0VXiE^u)LSglO!kW$8_^Z*q=59NWJn@B4naVos`_CWa+3_Q zqNo6BuWr9sjL3OHkg0AvyljYk;|)r#`k~0={d5+PPo6G9WHQY}Duwqa$DWlDOkgFv zbY~pH<;VB|@ai!oF1=HOC*}kj4SITCp(SOTlN#!N;q_VtiADlU>^l5mMK*HUikspeHpT$(Uz}eCLdgiaCL$rWb+~DV1@l zD4M71Y)cMg$e2+>duzU02bM34GLxMh26Hp0pf#gzn2=b~C7L!PNCaHo_zkW}fjMMk zAMc=40*whi!zR219tL`XOF~bSeHXeU929L<58S z!v*Wp*E}>weY03=8)7O+n2RRH&mHIFK~lGl^e&{9rg6$x&_6syl|`q9i9aDO%Mza7;7*0A_q5~!&@3{ zj1@w#P$`bwi8TdUOb-#>TPpX@ckr_`8NO^L``aVx0cywklpmlEW=#LM? zpu&n)KuD;Xqtx*RHARe7BA^73t~pDABE9}CCOj`g%UrcBkty5bB%nK@O@z*aT>Y-p zdFI!JpsiSsBrT~0 zv^p9CI~s2kLJtOLIw)%(B!~gtl>-rwE@0mg5qf?=78;vkO zcB`TdKQWTguiTyC4M?WcFhzI9maj0D45K>{5#WLNzG|eh0J#_$P!XlJY`h?`_T3M) zX<;9$-+h#HLsX=|u7plqG;bO8oR)On-5WZA`}23u1Zi|FW9d=XCqH@bDI zRG1K;AbXKoqh^poOYBvesLMAg!CLV~`p6P7K^VqiG%13Xcv~C&a`s~5@XxfDQeu;7 zl-Q-D@n$d7Zx82*EIZDKBfc1MXtrRc$qG*NL?v5rJ{1cDrr~lP|uBHXRB|COj;TU12O<` zOALay&@T$Nfo6vh3sX-5$vJF9l5tx~6_ghs}_78|u*|8P^k+;yS0H`BaXy&XMkJ!Hu7fZH} zM|>?SYP(F2$b9RYZ{a1;6FR+*7Z&$PH1Eh5m7#UVk5r*o^0CkYcP$98pZqN7(o$1( z%_%T|_n>K)Y{;|FqAKEA&e>r7)+9Ocovs4KZ5Zz(R|1a=9-m0OBZTObvq-NbZJq^X zD>`6v#^rY3i|&7pks(ZeS1x-)evLe;Ub$m_%}8VZNRIilKHAnBCXm@4Jl=vshZh3r zor>08KpM{^)3Oniqmups5pp#WP(<+iRvbbId@w^R4haJ+n-EorU8WBkO{C7GcFFu2{1kQ5T6UR66p5vav9O3MW^l? zDoLHZ6~uu!Z|Q-U)4E8`8e$j>4zuED$Vz}S#b$}ZO0N*SY8vI}`SIyREt!QFwk5&^ zX)?!}2UJabmqA>W88sA$MoM9-WHT*G`~g#|CDn6F7xJG;>{K_y@VOT=e3E1)P_P=vYuJ?p7{m zoUiUA&Y1$yO419fI&=-69*%1KpFiQ?8srNWef+Yvypf;6cQXE7s)-rPfJpY>TtRaY8%@b-HukcMly3B9!Ye%9gjdU^f1 z8VT6~t((S4@bPYhv2a^31Dw++tOR1Q%iQBp+G}Y=acC4D|Ds!56|?wJZ!){uW}U0`4xETppsk(D~AB=j>fy{vjTPo7~5qZRe_)`Bxnax92VGAtsRG5mEi^ zP;(X=tCZukUfeZ9(DS z3@`Iq?BC?O8^w>V2y6??@Az^mpcFqaw|w{#_APtyhtwmOOSvWdvQ+Q@Y}!#DSw3vE zAM)T8>9N(fKyvWGtB6Yp-TS}Xcj|D@+kAW}Zg z$;^BtNXXKe(E7Slp8NG1DJuRN|Di_SwP@SIy1wRXTX5yk=3YDVpCWhGwqXv@4N%#88J?;n2d6*b#17|b~^AO(M!qaye z=wDp^(l^~&p?djhb;a%1*YxVPn_B`tZ5EaVDYb3QpH|gXN7y%A-9&lmZ#6V`I*trY+cCd}1^SKkwaU{YrP^1={CKkVE^2(jlp&!hb8hO+B@Wd}wEcA8^Ov8; z(Ld~t*`8P3m?sXE4z;#t2Sh8prYP3U%|Ty$w58i`S2fzNzEta8oYH@JC_Za~<-c5o z0c|~Z9>x5p;twMDsfW{#m(QIP^7p#UtDUDvA%hSHsFBJJxQ9V*Q+ zf+byTlf~N2P@BB#t5TiI9=FL_-!waqB0bLH>TuZSZMHpj!JW(a$HN{t;U16n7IStc zaR+yct?Wncqyl?w%fok%_Nt)g>@#JzOtGC%;JNz&LnCq&)|#`IA?62M;w5cT7pw-!X^Imp>mIT8SK4U)_;A?KN(u zx_&t}Kz{#)Um4iPQ}a%5f^c#S44!>#SD0ShJ`o`D51eSD-#a+#Oue!lozNM3xHlQv zI@ntBm}1?xZOWE$k|w>Ye;|OK92&cH@C{5~Y|JYEbF@2qqvchCFgawfq2q(3?Vpr> zRB(ed-d;_$R<=7cP8(Z{w;|be03cr&0g9J%Zc1RR_j9=bN1}A=f+(nB<4B zAjn?6YL9Bg;_STL+v}g{FLxt%ioB(nNC6n#8z|rJdd%5+Z=P-2KsQSm-VK#ADt<(PHGyP zGplVf#-`$<2HYqv(CTjeXVX3$Yn{3&jyyH^J|!Z}nkNyg_qZU0c{{Xe_}SjR!+4U2 z&QWS^`^3l;!8>8hhcfqD9Bkhvj0Y?HZi5ch^p+)bs&Lz!V~^SaCtj0_i%xPMPtXw&hx(}9KLABQAncu-_@LRp!0f>%#;Q6{OOOVE^-8;W34gj@dk3Viy zt|@h$2%Yk{P^T_@g?}aR7d{0WX%G^ChQ6*UwXJ(Bt-%Zs?oGCJpnhhj2)co_2^V~M zx;Q$WC^YnaJ<4r^LX|7}9XI<^pMYXVzuQDP;n;znNQ*TA50Zpm>thQL{}G6pYMb~m zk%P)4U9wXg6S<`cl2=GqWj8WU$9&s?W(`M$Z!`){5>_awtS4K77@Em(5vfNS6j2GA zbKhMCukavR&=@JCv6IK~vLY)pGS36#C9N}@rrE<;$s%wh&)G5-}Ih!;1N)EZ z`_YT(w8K=geL1T3)6%PfAbe0JJfNwMO@Q> z8%|^J)}7CE_X+@!wkCK5Y*DaL?Kw$>=Z(I@Izn4vNMn&hKuEOfo1W~#sc zHV^|D2*)~zM~4laIIH7fo)XIb4T;LWN}{H&>cg^pWpx*?%Z?uooC=Qorg5kBa7$eGC%vDD&| zT8VGSsQA?B*MX&_Hf?PM6^VvC@uJ)~J=}cq9+iKiM5Xh_sWG4hni^=F$siTBg7o&`$Vt3X5gl~5?X#_pf z+icn!^J3jI^yRoOmD&iqb1tF*n_BCbWhhwY48+Evn9{T{#=z29!@u3vBuabJKvlcn zZ%Sw~&&Zs$^NcPYv zR4QL0At1JZN zdqj(w+gQaPJMD8ZKLXj!yDRA2VuKI!Z7oh_MJ)>H$|Ws0k*t2Eg&ufiQWIIJ3cz1b zXAk|P{8Hw-)@P}1xFRQjFIZTRlrVG`RRpqumG^>Jo6s#~!LKCq3-gr>ZEp(*R)KT2 zuD)Mu-IMf6P1(T8($bY+@L4<-|B?W1NYb!@;aI6*Iy2RVYuRI?`% z+>WnQJiCy$A-irEY&CW!?}q(wVPTh9HW767?tOGkx`d|;9E_{k*y8Mxyt$lx+;%te7zHntU^J!56b1JQN_7Mc2CS=m0G@U?_H9dD95 zOIOlc$ad`tbRCsoTBCHxpmg?cmlSmzbLQ3?LM%Q$^gV^=azsdH!XC<$qO94euq{O! zvACdC@d(Q^pR=}=HKbo;dI)zu-WtqHk`RtF4Z%El-=n}ia`xOpSX8&?+ z9~WECpTevDqz_JWR7OU0x+KJq7t(fn*}aW9e)sWEV5uKZpZQ7^;yN#w%6~L*er5mv zqUxQ)BMG`c-i>Wro9xE6jg4*Fb~3TG8%(T?lMObuZQHi3JNv%xz4!V3F;7oV)pXZP zRac)rbl`zq@w%0yQ|eV$>zE&gE-O|=OgmfDN&rQCJv9I+i^mJ!ACi#e*brJ* zlu=@DCD}M!{Ug^Qh|?>MU%#*zGovWwUTb<7!U&wtiz8p^y%r^_9D!O>6zwJFtr!f>sEQ_2qOi8z%};N$kl zXV`3T2ZxN)zQOC~@}#vI-2OGjSNWX|aCV)&jDn3n57(*itU`Y&Fn^e=_yfmk3v%S% z^)Kfc5!a5Vlj4p(?$@gs9Gn+4#yAm2Jer;$xQ{LSzIZg0EvxXj_Ts%Z99GQCLdRoy z^6vVi%6~+2BU+110Q+z zXOXFSpn>3RPP;^Lw5PIm^PV+IoZ!!pTmFb!&@}S2^_XuR{#qayF(i_i zCb#lPFyG;Q{b(Mxuksb4?a(&R`8 zWh(dy-z_XOzxCvpDi7eCz-H@@?5ZPjd8tkERHxsR>4!rDF4vxVNILLr*~8bW0o#*1 z2-{5DV8xiz z5VJ(HEXd`jelOz}%77DBhl}<*{?1cInw+)-5P0yK6&_V72!Ag|`$!l?$zgzfTue9+ zUb2PlNw8zeMF#Pwx*#w4n7Sh`#n^ zBBVd34)mFuP8~&IiC6V70vo68!8|2&Fk3P`ovz{9T|F`^FAC408PB;VynPp2a`GWB zi@tXc@7)kGI+ftTPm2w-tYhAz8|+{zt|=%fLJ&KW$y3V=F*Qs5>p<5i^i+8z@I(TL z*nd|&XjdtYNOzyAFFgwTp6?MbQ*edVc4vX%Nr}+}1U~dIlZgx&gs{5IR#H_^bJI6^ zzEL+)?*iePneO}-9J~=WWb)WMSifz=UK{AmkbWdiPTd)MTLk`MV#p51Zk7hRmg-ZnhzU=r;8 zQnUZg_b!ngQEaetOz8mF?RdKR-HFa);NOHa8lU^sb=2tZ9dRT`n~0q2n)2zsMg15r z>UFEe{_tnePgyC-yQ}$_h+R8tq7q4XXwC^W5dr{GA#r5a90gixNzKpG?lFRUssG#M z=%6moz58F6CxLVEnuXRq=(mdb#S=6DBF<<^7#fsBxcI$vIri?37 zagl)Q{`$zZD6fG3D!WnHY?U5FVk9rK_Q@xCgN!g`hD{0qpKiiZ=d^}N%s}u2nEnP` znZ4^b^pBfb$O^#Hq55nK1J2n>VIGY$;3vs7S-%lL|#0iSvNdV>H}`Os3{v*q}L zwD1cFIUnSy3ntFQx8MA_EYO_R{UWZgsK*nrAsE}g+Aua-QT30vy2;M4 zCD6rw&mQP&(VGdRl{~nHUUUQz4dHV=j;jNvAaNJP$h(up;b;4Tci3)oxt;;|sOd!7 zT4%rFsg!}fY|qj+)2j6)m!WU9SRE1{&&!zliW!cq5nPK&Tm8Pr0k(S+ajDker7?? z{#J-*TH3vGTVQy>cY4PyrzfE4EIeg5B5;UOi=(3I-$|?YdlH}p(X9YQuyaos`$++k zesp`UX(z?#R6DC_|Et<*50K&WrQSd`pgVbS*uw8Pv~Ohs52NjT|HNYjy@y#9@IQ0pasQRNZ?uX0q@Vzh!vIh9KmMCM4mwcu$dsTvaBV{HfAJ>cQ-Y4byGc+m$yGcO z0?>6D6n>I2_5beT&j?xp1*QerflV`le!#tHP^gLFtYA7Ycm`Aj)tV3v$T%lx4`iPO z?GDcgh5%n?K~)%WNT7gz^MYZ(tT{mhpf4^OAp|=cC-91b7za>~O)B380{Mc$;UnA( zTzP&0V`)1w$ErV0VY(R*+}wa&91( zndAJhO$|yQ-e5Xfs9*% zjC|*h;mO@gqkoAHncv&lGU*GttU5n^pAJ?pJKlkSSB#I>_vfpe%ZdHFvBTbGzT*AM z`TFkB`PoatAkKS8zJ0kzXBoe1yM0BG)8KzO%FMbFh_|$5 z`+R%DI~apWl5+~&H9cI}WX;*LZU1nNZPHskbN{G5OxDn<0xsN?-@ooRJ{i%Tj`UX@ zF5derk4Vva?4~Q&@W*Vz^y+622qI80F>Q4ouf;Ih@t6Ox%k}{@rum#TnvYKJ?v^{< zKQ42*T@Cxr_Bx#DRINs3@E#4E7bPmFH6QOkz{W;SXJs)%FLvZJQcf&1|8{uD$QDRz zEOXeGi@ht!s>*slU;(mP{v@`&?9*6Yo&El>QdZXbcy08>#k{ZoFmy6a;o$b?WO&ZX z`(>Nt{pam&htDyfymw=vL$z}vwYtB$aGjWah)QFvNL^HKr8k|lYM!8u0XX_26?f1E zLo->ThW4DEu)R?82l=c=gYoVP`0}PW>DSi%GZ&w~dS992En0F=$htcR zV+~p-3%1b)J5lY}oCH;CO&8`HWjDtYZ3{j$wl?|U=f06bw`P@sD@DHss*|bjHSmIP z!5)5OOkB8=1g4(;`B{8ThVRGs2W=>4^w~?Sz*zug?Phf}N-!4ItO2c?3-J8j>&?K` zsk>NNYba0&IDEcu(cNsF|F}`1SkDTVck^ePX%(Oxe67{{E!mOA&z4!Z1WN$$DDRJ{!LXjbOS+GQCU_7J`ou#CS18eSHG<-r~} zeM=2TQPFbZw%7v51Wf8+c5GGM=ZGAmre<`n2S0EF>>3^3Qq(UjrUlGwKAlh&UXzN1 zt&T2Td_8n>&dfU;oRY(YpjP#roswh@<`8G<+p~$dWu~l|-g|c?A zlP)Mh7lxYY05MEXxY$B}d3Y6E8_qtv#YWs-#R&ggQ(K&c{Kf-Yw~E)5JcF{>sUt)C zWQ`E!T>BWRY0MgO4V^ID(T3ND1+d83z+vHF(w4iZct2X}%06g}UMgz;<@5dH;SU8M zFwbdc!Z_zg-Mddc<3jAFdDd-MqSpk0{6Q&R`PfKU|KMu!WqyVqM(UZEF?*ni4xcUKDH1fn zXDbptbStZkdnMLiAHeHaHThgE*C_%V?Mi1^MrK*od%2O{9+>s)XEg~ia%9LAz8U;z z&?xI$z(p0{av3A|1Gc6UWX!G?7~FY^mhs*oY5TAYJiq6E@I0TukE=&MlZ%f?(Uskw zFHg12(Y5P7Q;D3uNh+jUpzR#yd5jq51HIasZ&lY!*P7PvBL2{D@*9^w&H*SIsJxdZ zP=aJ50lf6PLCFf&}$LW%1Dm7IrA64x0YbWhVdv*K}t`yad)YbLG^ zf_^Z)e14$aHvsXz&PCbZmF-Mg;Gg&7+gtV3>cknSYN8ab+9beE#cL~Pabb6@-27b> zli1!_8z!wysY6pNhy^Z#GAML)UKMM7IPuYk%WjnAq z0r(`hwYO1Tza5reL(|WXo`W3hP(&wggJa6iNe*=$*`Ho~Ps6r1#~V8ot#f3~bt>>X z?*BebUlp@w>%}W%H~{2aG9CO`_0>m*hJVSQPJb@Rziqy|1uzJ$O7|Zvm$?8OIX_M~ zCU-jv!xkMHeiY0b>Huv?Y$-Xy2d!v)IzEh~)t=iv^lF`rzNT+}u5|ijh5@pgb*f*N zTlXIs1uwkjogExd9c*&W$7>hs)?e6DtY;JLRpwUC)@w`8>J%b%xZ>O+Z3wzY0lKS} za-Keq7@m~^%h|T#PEzao@=OuaNjP|Z;&fFZXO}OC3=fZfY%i2pEdq(Hrq8`r?SZGU zva=?`$xly@ormdwv;VAUfirOeuj65rK!y+}5baHf1c8b3zedu3KDZ*+0%v6ccGDrz z0k_J;p@2BYf}y~fcq}^L)K6Fh;OsHTE^;#Z`VGLw#>D)8m%Dz%uW_J*QqWRe0;WJ} zcP0UHJCMtx=C#m>rZwTja!{P&QLV_MY2JG3x3f=jI=Ua@{L!;#;81o$sY z39L-eZ_NY-sxSUn^Yu{xEv#@g=s#Afb5mB1;PEUNJSXI7&h|pz@M$o*_^qYtgWxb$ zIp&D*v+_-GSEPT8e_bStn{k<&VcIp#f4D)j7M&y8E5@isQAZj|Va0G>%_gFJ_}ksY zpH^}sHY|SG6O(E=Ga(l#5P?~igaGV{tftnEJDo??>x#1k9#Y# zA#104sc0B-E6rX%>VR@=6Q)}U6ko#7{T)$o++iayk@>%7fke0hfw1j2=y@2g-UPUh z-coK{{rwHez#zac#3EQL82z5*aTi*<{lYIU@s2!7KF_ep-jNBVK-lKg)au`T`Wz>e z`SADX)2&PtROxlMxX4!VI@^vBK^xu&<4M6j-l0Ju@>d90ZX$@K^}#+bUELwbBh3lA z%PxqD^p5QAjtYN>))J}V(VYXCdg9PagMFOOw?r7cam)dIVu|kd8#kwBw>B8?1L%Bc z+z=lFK5!;b^dT-w2O06-$g~oglj4B`cl)Iwzto`7=GF%{R9<|#JYHX#oEwfC#jq+P)`^A|WD!h^ zvCQ~COjH28Vpaw5zt?3<`jSvqPFXBKn|CO*8d!UE^dQ_eWH+w%Vl_0pvS&5M)ksRf zYJLmlvw$yJz`Q+f$&F=-lP(RJVlD)HY#);Nztt4fIa}g9v3)1f1~&_g7yCigGI6&g zvG+<ic{@k<|IHc>O^=moJ_88)+_o9=2$>UQ6x=h1piRo7!5uJlOM+|C_aKqJ#-uw)Y z6wn0vCIuY3rAnFK_WAn;)BGYxB_Z3;&!GYOP;VSw^Ln*(oL5*&+?QENiTu%XWKR6J z2T_dxuR>Ik^F|S_aj#o#zx27pm26#$C(lh@j+S|A{ajgB2lb~1^~mbw8a}VkWC(3M zBSMk(;^CSyEZdVSXF|WDBIqX zf3qDWmD%XV00-_e^9@xBSbcL32f>ybgrcuqs|z@Y60!^-#ceL177^ADse(0OAv*)G zC->^J#Y-`$WDxV1l|9FhUoG#I<xfwlBE0nQS z5M+AfW&1gXP1(2j`Xg)1-CG=F%(E@?wNpzO%&s9&ZaB=%!*<6oPpryoBo8jy=Ubkq zKm=axx_wt{RKywJAe&s0tC?nUH4X&4Cah*u=y3X2JPvRaG%+D*4Wy!jSfzILW=X6# zE30ExNGi%&yFM-}e?@k(M#VYAMfjOT4y?TSFr?= z6dD_r3L8SL2f4ot>;1^Vl}<0QL#TF*wr=4%2XbMY5VgnbOv!UV2Eb0*|J(#f))`dM zx7spk$#0nBk2no8C_%X98OoaVxsR(aLi)-=X_`}~_UCH2-5?5|mkklbFhd#F!aWTma#81pTw;!@2Dwx2fw>UCJXxI3c` z5Aq-+a9vXP>J&831qoi*H`uj|O`W7Pqg^%sf>{#`@o>*p{X@aqnDw$bJu( zX2ei|cfMLd&PwCOhKtml%A?9qnepUl93A^2G#U#PTYM5Cmh?ry_iAwp2pzi8Wg{jGEl-m?bpnECs_O|^BxEtME07KSk0QK4uOHGV!3=~;BWEJRV8sTwCoPRifV`$Rsy}_&;cAWZ zrFrAO89CoVQEfM(dgh^WS)+4|2+tcfb6X=JD$PM^ zFg4~=SS!{6e;={}4?bk8=NI;%9POF89|z)&3>5(8R-u0Xz>`eNL zz^ZCr1YgmXSsM0pmP<~;fZasjc=%rRe)W|y{Aes=PVeX#%EUI7`QW~zwTl%x{e#|^ z4MItk(aAgnTKu>Tj0>c!HGysiZxtEPaH5VPJnr^oicmi~`_$Pp)umJ~@rLWbhFJ3Z zU({w)@0AqkhE_fdhNrsw;8ig*vV?|oKsFdfNI;OHmW=^81$G)qEZXSU%Njtc`7>1) z*Cl&Lte~;^y@Q(=d#}39*_m{tMpKa{l6`T65X6nk-{W>*lF(bG$~50+_aD~kf%mPL zddd7me9G%mWx5W(A4>0y@6LRix?63c{ycrag`9V{IV+!eA8Z&5GM#L||2=vR=o5WB z|D{W0ANf@!o&YbJMt2K~f$vp9*iYNNO=-*B7E?2L5UOc57{)q8{|`D`R^?@kDSpv1 znHsZ|@v3(+Y^_;WBP$|tNw+h?0J2muAyEvyT0ZtOe7!a$wsXAg zf5tc`{Lnbg(geT{ArJ>X@OOjDpMHnM9a=z9G2Wu!vdq-Ha1ltTk-pZQ{pAF@yfHu> zz8=pb6MD)Hh2A3y>`TO;Meb$OVHmkD7ffmH;PwEYF2PO4L&=Et9OUv|K6(hN<-FogOPW#i+Th`DsD zbF`Fi;CnYvry(ch1iL)lmn9eh{7Z8>+@1%LNAq8Wk03XQ8f87X^Mj7XY<1+&vuR7H zo{!qaw~P#PHg)D)#H>-URu*j!+6j6L%sVAnyubc44Fv@CIW&x)v0x@R<*shmdV<{pmMdoz3{B z(0m;CLq`9e{QlE`z|ZeBOfqYC%-G+^GA4B%o1s{`qS21TplYb=RT7|)<-OeCpK-OP z1Srv6FrfY0A)uK84!jbMtpB2|54D}K+^ylyGU3o?M$J5At6@C)a^YZeOFf{#fay~%(aNo?Q-rtAEb~#t`M=(@kg6Usk1BtAS_uDZ` zNv(G1>Q?9Spf3jRNG*t-xxv(Y6!9?56($m$Pqn-)+ZKEGzjqDZn;HW?k{D{@sU=kp zIK@sWYNk`n9q$-OXh%3E8hHGT1DpZumJaoAGq+Fhy9{-$Oru6KCELWDaA?!5zdaP% zH2jFH*kf{>1{p>SdX57_jF8Rp%zMt68-Bc`^)M2{TxBS?hU`yNUnsjW;Ksp=$1|o~ zt^4T5l_-^=S;gK|%nNxPRaYpfAwE4R;@W;oh^5ELC&P!l=P=VZi?TM9E@823}%QD`+aBUks@Hwb3(Rp#2 z8JFeeK!mpb3bKLzK7QC-`yao@9s9qZY={xGb$A@zpF^WHErS7c0gy(FpJi8{IlE7G zq$Sl?<$e0Aco}<(_>!$9wm1>m*9ld(KFq^F|A*1E#L3O&FK~Z?A&v444Q0so-)xL{ z0&hln)S6JHkJfn;Zbw;LfgU4N1e&IYOVguFyPKb2$K}KK|8v)H0fj5z{_Cy@Oco-6 zXX0Z1-{Ka~Nl{D(ls+xYL`?@Yq@_Xtj=c#w1KVCfYg(urbd*5XcR?Vq8u#|B(wf4ikj&=A4S6zLL%} zl*8xbb!vCc&v?@Ab$P0Jjl_1rr(nS7ua@hne+_Hf4#4m7ilg;jHeRm&8&v08DW}2Q zJT%IvlC1e&?2#_ZP%`2Q^~5yfH|jp9H%QHx=nq^5L*&HDy(Z||$PQ~{Yp_JKUGW)P z&w<}gdn%lOnRP78`{}8)RdAvd4XrH&EXj>Oj&apH7U#pe=vmKLtE~P_6SHW(O)uS> z2J3o$A1{7o=SpYT!2?_ZF(QxvZs8C1!!1BVirPTij825PLF0Ql z{dl$b(n#TA&&dPc!f4fVjz$SLhAn&`n<%;j47c1DD5+Hu$Y2x~YQ@J3a~CfOoGSLr z2EZC2zWW+!T+mHNz!seG^Y9zF-|^3V#{`TGF?4j4$=mqUrGc7(!m%w0%P!YVldpc8 z{s9)OCwS#15@F$ILPhAJ-<3FuBb~nW#j5%R_@>!R6*HW^07~R%koddiNWNu{wXAkh zz31orf5RUQL0lP}i3_-$j$jFd{Sc&vWM}4P2X2805d#FqDi^Qx-PbG)1GLWaXv>@# z<_8-1KS_SbL?w{3sEm~*k)IlJj$rkBCcH@fOcE21pa=&D!an6J26>TW&JP~1ZodYy zTI?+Ell}sP=3K(;ry@x3_#pnr%_#Ye4t!rG7Fwbi+Bh(VFGd({KdbWP)m&(9 zPP+pXmFLKdzI7D6eM+qpF!MD%EV z$Ry2RdO1x=Z=CJSH85z+aBgIl*}behjMRl)(GHI%J06xgu-hv!2cWsGWWE)Xj3z{ft$QM7@4 z_~$di;Y`pr-b8&k3DO_~kxTN&z^25W3ttwir-DG0UB^e#C7h#tk;Opg^-HlcpzTt1 z^Y$1JZ}4$?HH&k_gAN{buMY19K*Tls+LG=7V?~Lf?nO;|WAil}b-~o?8tt~8VTqoZ zseC7SHjf;^erm$k-%-2~vG4kt41u>m1Tm{rt09VKUas`$$~F`^z~M*=>NKsCbuhhU zh?9uM+iK!8N;h5qNsUym$IJcwbZ{?GCV=~WV`*;62>u*JD`}jSAuA3yoJbT> zmg^T}20B_Sn0}=ZFvwV*?<+&Va$XOnIhi@?DLX;JxyovtJi)uYzk((1Y7;cS1XDGX zW%|8*!pG-MJV@!DUI@Y6eR(cKpkw8ln*s4Fis)N*^yA*?f&5o7z^`T^K6(pMwJU71 z$ZMAV!6lO4xF5;}W5${AtK5|gPSXbhjLw@M=~e7%gxM)JSJ|%X$07h=YJv43=2AlU zHPKQ|I5CR*c+ed5SblzR){koLA-6?WN~470+j+wX^&BNEi0K4){*odXDmJOi?Dl*Z zMqOW-ZP-+88_)weK%-=~j6W0^4LOm8seqlRRQX_mk&ttaZqrqB8u-vwdHmzlCJw4} z)RPgc&VR;v!G_84wD2<*4HJe6YQ^}DQ$q2H+sq=M4udE3j80$PJ;*0ST0R)2?Lt3X zDPviC<2J%aR1yVwYFgQ*+4b&fxTLcpaXGbXr0=J%uz#wGn~&p9*tBv zlKtWDXvB#fFt-OoEiO=!GGyPOi(~AYHoGDv>h~(^vvuL2VE*s8J6>gajmxSDTaVi@NfWXyKQz+dT(~O84_yo;79k#8^n~Kf%U^&=b=yXT==Xn?KHnii{8v?>2 z_h&7zKVwg*7GJ+U&9P-D9$75}=+xvbx}XS!-Z}nAo)SQ-(i@i&ni#5cW0`bUz57zB zI?Pwa?4pWmmpPUwSL++fGe1tfw-_8~U)&R>+pW1Y4**R?^D$ypBi0i6b*;wgq%9G* zq061lf79O~QaGd%%!E*1XCVaw;MOvwxdsXs1)77OQ6RR#e&v3z?u+Evf7@5>>31b7 zLT4^aoej$**7a=}6r<$A;ZO*NSt%}cqllx$Y&duuNNpQa=9?V;v1=5>TNFC2-=T)+ z7?5xW4QP6Nlb5ZO`IUr0E%o*zXg&#!4po)0*|S!5B}klrsb`d>zDRZe28+CtRU>%B z+n;aJdo{pCYdW4<);srkIlBEBy60RkW4-?%V(-gOnpoue&sM1FFA5Vpvf)f^Of)jc zClk^v-F)pf!)coNtK7z`+q{6WL7E2xiH8$RJ#3?%;z2Ff??24T@VG zj8R%Tc9jHnnP2;v=VB>AF!Axms3y4(;@MZcJN{Y8CJWqV^W&ZhXuDjCZgz11+nzf4 zLhhP2MJM;*ihRVIdn z5sa8uJlUB2wO-A@EzibwA=!tKKtK^!yDoF=Vfk$F`y5iQkgP&w?7&Sb1lPCT-BHb> z6ZB)9xp;O{CWe4%X`KZBld5z8@&>*yv&Ku*3n$eTac))^1g-#A(5iXDVx9rkstso? zK{XROx^^^yV|%TR8i%OyiteHV`y=)(oNORVkHEsLq5Cajw_jd+-?I5AufzkoJzT{l z(izwLjuTN3_)A#-g%8o++c9UxyX52smAE%2>k6AUI~L*{Pz#nxo7Vt^2<**;OD{>? zek0TiDl+4aX*Xuj9qDL&mbfN&D()OEG1)53ncu~=Va(tle*0PkCt|u&)P*MEfat7% z#DjRETib zr4G0ok7oBscI-9H^m)MO@{Z`qnE?>f6S>mDgcUcO@_h{1kSJk$x&1G4XtJX4_h}hz z-scJ9O1nz=62!nEIh<%gI@)hkFpO!%WZA4^9V-6$gmp*~!+|{|Id~?++*fsh>Z9%E z6;3n>Hp0%{k$E(Qezh{5!>UvGIXNzxEJ|+D;zi}j@Vym3N6rCgOBrJfa(`UYn!f)| za5sSwGp=v}N0^%F7=~HPAyEtGoK3PK%h6a?kzW?)OFqqiof`Fe zbv9}^vl_Xe^s!@ZO%sENUpGLKVclk9c)U1{%FtyrTKb_aEhBiM&}) zY#D7z2~Z!hc6|pVjbV=aczfUOU5r4iA6wUhi?T>O>;0)7uAk7D_3l++|C#2J&)2Ng zCVG?rDHZOc{M7@KfdUjeF$QhZLtm=J7)v+nYj<&5?Z&MC^Zm-|A+5NQ0uDSH?MP>B zHv*-F=uKXxL^&`8RUGDaOo{)`Cd4O8h4pV{aR2ZO_O@NX1JRSmj3^O%`VQt?4$a~k zwYEBiJa|&v?(xpUcm6d31}uiz?^V+3vp**0WE&L^g;ik&Z}gBKJ_<2q0x~~4bn7c! zKU5_XM;Olh7fg7PHY6;oy-9v*9}|5i$f_&=f(i>-f|&M{?o(*c8KHJ=&DeW=T)n$4Pd z6EC-egf2+K564y3TMp;q39DydFiiy!M($@wjpH?b{oBw zH3oInHd(cM5DS)(J=6=kDH@0Nlo*nVVu2qZ#eS#rn5zwZv`|Y{E0?{LcR>KRRKBdW zDjYxWxyVKCr@G}p&o6|S(du<_XrD1U{7VybsjsGHVsVBo@F3U}ta!{N; znCna#!9^%SZSx%xvCepvq!}P{#8-?FwJtJXMlKA~i*kx#e-fbRyyS@DSRD6ZaF=hT zshS!v7h4MK7Q|IljF)arU-M9CUC{)@2$5{UGMK@}%eAH}pQXFkU*qNl1~`z8s?lExA|7!05lrS{ZK z$G9#kv$3-F_&u0vMG*43D-%VApM}{0fw^Sv&$z4DGi<0^=LuSn$|JmGIYbe`h+y5= zANqb`GkZv6ijg&`qu1nSw2BuEA)Q@3e?!U9@Q`4tM}FE|I6{dKC@wbnlRimQT zwz))%);o0YR&-lC+dKNm^PAr{^gC5ee|_21BW|X>kJo+Q(A5}@T0B)`WZGWRUxZBzhhaS+O>us*AJ!+csze2P4A%**hwY5+SQTe z`aMcy5a`Wh3E&DIoLzS;7SJ%`mcCn_6&yHfD9_OzllNfF=JWaZa@JMj;5G_W7a!0~eXJ1yV^@ zUOo8uc_Ijx2|Wk+m42-8DGeG@FA9_NvrIypkF98Sl^(XO$C&f$FF|B@`*Yk%-J+ptfZGGMpDIzS9mgNFEUQT5Rj`DaB10I2!;elm!(k_X= zPRNuB`hDYx#LpMv16G489PgI?kcMCe(+t8@Qpi{Xq?%rn=M*biE@^HA3M)pGu(l(??^v>gw`USPXgRDOgd~5~AbFM`lNNS~BumOb22K5)cf` zE9tNFkZ%P9!hjT8M?lr|_3h)Rz~|fZp@Dyz_@1uj6I!NA{l90XRoEguUu@lQhZPr1 z`iJ|#O4X!*~m35ZdEann&%)Wf}|gXq2EY92E7FXN#o&(HgidW>3>QgcM!qJoN_rc;4Qx z2rSL+3-&9JzQ}E%%YJ#wMtbT=-o0eJCayyXKNKdv?20KgO%T<->UM-$s)OPIJcOPL zuYbxf(|xc-#am!<`X~-I-K~6!XZ|$elRzfUp##UzRPizc8|$AIs|bx{uc@`U9S+y^ zZ3B))Z|N=xbUX|LFCnFpdLDF}SPvF!2}hBu2WFWREsg4c4%lCL{PC`4op9`95upBh z@tQ&ooNR4OXyvbTYZ-`KTH84TK7zdS|MV!VL4|MXQkP5l?|)isqBsfm_udA_%0a23 zzX2f)K3JZZJuh}839o9e!ZK(BVO!@GF=I%_7&@DGrnb8lwsCuK7ag;lj&UcqH=lGO zeTgesKW0(Dvr83@+uqVI2Ys%yi(Lga9A@2a`3F)C30$x-9bh11`gZ^Z_Hbj*3Q%ce zOt90~{9Ia9=UB3yznFJ|I=4B7ESfz>aGQOzH_0qG*imXARODgtSm2-);l0F}5}{bA zgCpQ!b3`E5El`COhswxPl_FK3HBI;X#&*X}KqP)unTFE;_#l(-h5iFE{pW+M$!7ac zeB@6B5V2GWM<^Zm16v3YNY6q}01Vj0Km%kdIDBoy>brcwbm7?IAo;}5q%-V|+tvl= zMZlFx=&e-0>Cfnzpd=COT;x}Nv@EhIOb%^dimuVlwEjEfUqQZHaEAKySa{u;ZFk~V zmyWVXQt96cuR?p<_=w|j6YuNaDr0B;yH6d3LZR8?ba$#k!JLc=T_s&cp1Q90l2cnl z(BK`E>*+utM<24V+D$i5x>VB6)r0(T`Djqt;ccVB^>(vat^=+ z&~05D^n?v{o+Pj!SAQw1qb`x}D24n8v$qn34Kq7hFw_H)(|qGvQR2HYpM$8G{UK4Xz=LD#WY;?(Z<->~pRWICl#>Ow zF_;A}35-~14C|7iH8jUv6HjKTAevf|xS_?sXOi=l1vUsqNycxy`3faYI9?8{!56{- z37ik(3z34w15faUxJ9@1>A{13YxVYvH*HxCsj`7EX|;W1Jy4ROMd^xhN5|_}mL#BZ z1?ou0?&%63O%lb9SpgDmMC6=ouSfmgWh!%;94?YWGx&bfN z#AkuI1VYpR_3jDdo?h`fLrdnu{16DyXgCxN)FCQ9UqNm3urQXdWQ2VbsIm&exud4a zu#!Df#uEQPkZJaHB=m5iqKO%($oSZ>YRafbDd}Q4gI3>Lb*ghPz6TG%xYDxGc!xW9yht(@>q67D-rHjltnvTW5%Hu8n~%1KH1q?KQs2Kt*E(V`o_-}Fs&{Hx`ArUI%Z-9YFrL2S&E z=*aq_gb~dG$NQTE>EAa-G@F8iI83(5wXbTEK#Q}mg17gUHQ#$>p<%K0At74|7yc1Y z{UXQ=1|}`vzlTulT9nRQ1E3%Uf7G+pq-0#Pz6hcA{QS2W0nr8z0;Nd}SO01{4maT? zN++TYanSL>!!hXi&plz9fIy}4z6~v{4X$Jujd0~0b=%2Lk z>#|^>-sq4%R1&z*+Lh=I&EH~<=ta0#{3Y%l3P_2DP=8OxWPLYN`4gXJM&T%4y=A`a z=%|LMizKIr+9W}!3yI)Gx454b`%O}z!DxBD~M)_BZm$0iXxN#iNHz=%G&2>(fny7!;6MO^`)bjbX0k3 zh1oG#`Y{$x^hlz6-1iSN4XiE#c(#X_oHc#T^!RSr&J9 zcelme7I*i--4+`h7T3ky-5DGfcXxL_p69+d;&&syKV~MTJG!GYtMXKJ)yb1Wb5zZS zW_;3W#52q==(H_Rtlw|zreXrKn5Aus{uOj|$u~6TD_r_)O2|OXc-%G#-osh^xDNUs%6E^k{Km(ys)%r%$~gtL`50 z!Yfu9qR>yXozQ4o4h6na08aP`8|EMfp)&i?V~(<>+@}y@Y)F(v4~VLQ`ZFA?%!5BW^cj6b@@ixbP#=*I4}jCh z@fnDv%Ndbb4e|YtNvY5QAsI^+`2L2U3XOJ|{%On6Q8`b4j2iH<1tAvlK8>*uP&R+9 zU>-&5oxZHYs#N`aL{Y_>gq2HH0gB+DY1sJefk?SN(4*=%0wlp5*0Mk$PUcdK>A;+Z zIWc?NB`sOeigxzZ3T8e+cyKL1cCF?w?iJRJq9k+8yN-7g0Yo8TSFO`2F5c}!rLZ>8 z$S;4!KYp1Y)L?RMx#%yr-z2r86s&fkk25$mI`hu=CMoe#P8w`Bs7|ZqOM5d=Gz{Ku z-xN1KE+HB`oxSfs8gktxB#HuJ6zJ!lh0Z>n4Z=79Z&K@>aAe~dgu^R54 zB&cf48sRNja9MJWRr|VeXy)Sh32s8&<8sL1k`R{vY0w)$2KczosOowd+W*z=n`O|! zfWDTz-S7gCUw}tSjkv18+1K*=FeGq@{-E3&;>kXdwpC8!Xh#@i7ukz8Pf* z*cZ|H-JaB=d{+)AmVIvQXO81dnM>YC_nHY?+)Wf{r?5|V{EyEHP^#3pkNT`TI72Gs zU1|VXjKh!5dk67Xf})!@!QI3ZJMZZoPb+~@H0x#qnaR%TmAnJzA`ssFwV_pivQ6KW z&oY~;$g9TsUa*om8Ff|#X(CgdD;4P$<0^~R9XAo6+Q`>NGcxS0M%Z4_WyRAa30A#o z=Jfg!B2OvxcuWv_FA8|=W)xd@D12vsktxJ;!k?l`T`NQu5 zIg*(-2(;HZ-!9WcHse%G1)DMJ!urUi|8P>xctdw_2F1YzT%q&Z`epc}@8rn=Py}Uw zFi1{GQ@lafDT zSg_pfH@ed^b}O9@J0taX2Ex8Q2^9Js#GeY(y{cw2Uj^qCj-ByfF*F(N-Hh1c@p>^0 zdUgwD(=KZ{Uy7emI{3KS+sx~2@l4>! z`M&Er<8*2nQ|c4>UinIHN-0J>kK7r`}iI5g(c?<8|8QXd^dqI*&RY0Vvwz3 zyj0yi=c^mCCfLei@;T=N?Q+o3!m;9e7wq~4kII9|IH&)E&G%r7ItU@XSs+7+0A7 z0)e7_%o84YjyX@W-q5{(i~KGaE}iGclpn_%m z-K~Kj%fFZNlsS_VkQaa(!d~v%%ma2F3czn&zo=t?+Q2%)*n#>&&U>SaU!QiYz52~_ zqsxoL-R;@?3FBF^S6`P8;F-cr`ek@!X^1oYsgv`gJm{ecEw;EUZ*$SaW9dY;RLmhs1am_m z`scvavZM}BxQ5|V5b~c26$?~CE_le_i-BO&8-%BGBOZXLZ)OO-%OoJVz7$yX)(E{;Mm*x&Pz z(RSWh7fSu3DTvRP8t{;1(iaggn$v#8EF#A*%Ju~-OOD5UnAf}o&e~D<7}3Yms?*R$fa8U6kObJ-=$!%a+?FDHExJ(&Rsu z)9%5G6)vRGCJZ{zQdx;eAim88ZY%s{k{T2j_v!CV#n%2l8E?=fxK#6yoSM<0S5z5c zLoMMFJOaUVQs!QcJVgemP#zP_qesJVNhSG|h*<1+@_2tg?&G{VIc|LMGoyd($w2~N zkdTDSguv)7NODaCmxs^lM%TtT2_=3zzUg#L&=-?~jjQ+(R81XQEgi6jL7b7q0q)m3 zH^67>y*$%yFu9{}CCrLiGU41tz|N7FWYNNA^>X$MX%M!T(%1nIr8HIJ71++IZK!Zm zNgZ9M*)c>)ra|t9o(6l=<>}P*X?eW0q#-FO(Yh7dh6joPdET~~C^2xe#Rcts)n6Ejr@@t+>Gp{4U znyYch`>5X8F~jQvymg*9)g&_i?op=w4O1JU8q)A)1q?VRpm<_o8!*2FR&DZ82x=-c z8n)~XJuqXI^frd|F&Fh%h-60%g}AxI9caOpd9&Wiv(qyq3l0-e52=pXp_z>Rirh4n z<(A5P7+6HPSkDH#Ec|B$w<`b} zcVOdy_DB-qFGe8(k}(vy?S&}fFz;CjNBT?66oj)J^myj0c-RFr7KfuiC9`khHX)A?yl%f_w0_vSf zk^spVguH>MmM9d!0R|y7z(nj0$7e`Wzk-)zlB*>73;Q$h=-Dt1$U$H%<%RVVUi>WX zw%H)2x-%Jb%pIZ+c8INBW~LuuII1|L*Z31Ol{cQti0-0HydU%-+aftok(khUQM6Af9L-U zz134J?~+nsZ_pATvu7cin{99EZM7rr zZK$q=1S~RsyTfWX631rf$H7roO7Xd$tfgp*ZUhYgDogPB4FoL9n2mHIgr;th@P?L~ zKYQA_8B)x#a;@u|Y)jHmz6ckq=ibIQsp~`+|HO(Lt_gsV2;l&jNYwLI}7^KYe~_T@~{;(hHfYdmsKnjT3A%Y$?5dZ>fp- z73yM7EM-88p^`{1?ftHu^}?@gR)$ zpNKOV!Xa*`9dV#I!8eu%v-}rl0&+?T==kDj;W5@&1BnL_ClqH>I~#P3Z!YAC#vJ|Q zx!I5&|Sw|RV+*fa2 za$j|)$Q7;i5DcZr;+EUN^r=GG+@Fh+HKFhcCO>m1(n1~zV2JQE^>3bjFPn#2yp-Di zV!Q#^JO$V#u@8u8bB_2MCo;V2Jc=OzzUqG+C1ehN(7Z?HR7Lt>Dp#}jo}n3>mk7sO zi&CCCcc*7{hV*SalVv>=kJOoqu9sh!r<6^V%Iq=H>hG?X9JM5m2RB0&j`%mfpS%}{ zRiFu3^W^?NHBQ0XGDCHBqioJUBS$U-IXg4~y*{CfX$(KKBP)uX3PE1fVJcq6Tbd~9 zQjn-P0Il~|3bz49AEqf;RI!v}D+XE;{XkJ%W00H7+a6BJ_1>g;ekYKLYctdzt|}OTXt6kY^>FzEAvR6hN?%=N-tcnL0#a%i5o3^byA5xcq?t=@;GZ^B^>vQV# zo?sGDpKAaMq6&N=*qm3jg!NX=`<2@>X!axX(v$dZGvu;IP`Y%^@TW`9HsLkg$J>s5 zu^``=FyGr5KoOgSEg}8Auq^r^{F{f7sM2zoMZql*@zc%)B{ekC?hr>zmpnn9JbQ94 zm~kPSVi!R0ZHp1`JeKqRYEJUjD7Y2;2wp^?t|x_fXf?i%-u6c5mhQ zL*#3w&|if#~D(^FHuQFy;PMRV8NUK8M{sY@Zy`%0wm;B1?r>e4qf zE+DSC*%|T_ysK|O7H;EG2mUeT$Zsmw1t7Q%{3GA2dbIpl5qtvj|Envoj&BAAC{|$T zulb#1sF;vvsX7SMx>Ap{Q1YBFiBH^C=&Jlqo{i!2?%j$tbnqh$sJn3Eq1PFEW{Zan zarPC}bi;_Z`dHg6;|rPXusDSDU1oW}?%h&_scf&*BxD(uzM@)<$q$*8?KhGRX23Mx z5$yJb9tK!6!tn7|-Ea{nf_k|3%cU7`U@jWZZd>1%Bn=A!7rBSPJTyC@fI?*spx$OT zOomJvH7OwT$9JB^xZmdMM4_U8iNwk19FER5Z8|fkQY`-bn5o(o%h)+T<{Ky2D?@5Hn z<0Y{pG?=hq$%!WY5Mt0aRQUakrWuT^&r8h;wpCzn7hIAp-RFVsJJcv!@K#7D-6dUB zG-;x(dY6c(rZ+rN02(yyEqIu}87#|&Jcg{x!q-r2JeAEkue@PywY`UeZvb)WTSO|% zQ2i}yt8gbTrvBy7&`g84g#;1PXKg1lzkC;;B3%B^vb_DLxzn~R+m0%1yrnM#~CO?-67Gw@G<_|yc9tdg` zWv53k5pT%Y_F!S8V4@2(5&+L6y)d^>D{C1_SWib9$&eH7DGbav8Z6;{j8~T_s(0Vg3;EF0w*DR?d6=4c)wzb6ZoC&cCLqIkk$|P#OKaps zp``{_%^g0!*t`C{XnLHCl_g{YsJrgWV9$c0+knK1>V~?^nyhGx+A>k4`XK$XV#Mu2tEU!S=>b?T3N*HoKp zm{Px}%kyi&E;N7*<`X+>3+a-QEpde!fC0Zww?V~Ps6N>-(HRmfS~wi7-$d+y)#8Oe z?$??Vkg6JrG5pNKVM>kqE_3(&R<}OP!NCHJFU1jIRR(5IU<1JagKnzDPm^P7F8c%x zRC$0A@x#?m(XW!qvXiC|>`@p^nKV>bb@*(~0kw<%*5Ml-+FxOhYS zx$`{YBsKWF9O!u9PJS8g&{wxOL zW_pi*48g?vomeN}MBrmk-Md?hiyVs!NtP^v(E|u1iKd#5Q?e7q8MlQEl6J=BMxJ!t z;Rt5m)9wa1w|zdfax%yozn8&_7e@*6XICqd@Hy0$-YPu&)DfjQz;i4>SgJ92KUM#l zfA)e23dS7;6UZVy-~M;XW;d=uw}GR$t35=&s31v)eGBqnWA zbhw`1>0qT%os*N(vwjXMlX271! zc(vaITnISzL6N}afJC9mawrDJ>z+w>bE7RPjd*bLPuQuObBZL}Z1>ZZ_V8{_kwU$wmR+Y3@GjVgAZrg>}f(0gL@{!Y#h7n!Hi>ZIk>L`Qx&6Sabl*SL-JE zo|-69teKf=2zV7h;!j#o5r`yqz90dLl21+=SyStC2tgSbaEA!xdEC*uIqzP;fUX0O)Z&0 z1f_%8$muM_2K!5!(4AaRCU7*#;XY_pV^Y=!WV0sp?tQ&c7x(k5qLLM`>639J-MH+K z-pySX@v(o`tGzJmovr5>S)C(-0Lt1V*8BbFGJG(yFk zsv`@XCtH8P&gZZ?!1@1>gmY3U4_-84D%l~h9(SEY;sv^sjMWz$^D=?x*4xX{II0o zu%$0S&$I3ghmSO2Y?XzCpQ9L8t8Q*XtC2{ z-{5B}oYj3P&K0y=LLjt*SYap2pb*|Khq~Tp1wZaDY>JIuDb}hgvax5r*>=8>7F(Mw z+}vc)dFxNGYVEuo={F8*%l004vs?@yECg5>Y0bVRy8fw0S>g)D$!v_eUu(9s)59+88^X%W>x#{gjmper5W-My8Rd2 zPBcUGREd_1+9Th~VQ7a1zWzKCv}0bqX&VI)9?XMwGGFQ$S*N}BqfSa*H6GtWT{b&8 zAANi7jvnz(ZoxMmIsGJ?AJ{=@e8kKKT}sf#7eutv1TZnFk0I?>Kn1jDRF^=Md} zG(k?SA<5O?oOI7ncH%fLRBW7T|v z{}@^R!KGB;-+-_x^0N};jxHYRbOxYuC?bMVs5HmGEiQY_UQE78kP^qh2;P1cUn{}i z?f;t+$>zJ}tWSH-@?5ohb1qRcKQ^1m02Z}; z@tY3p$A&`I4i+i)@7x&$9KJkg_x!^dg;X3E1VW{4r9|P7r*ka>oY7Orp_Z&qJDbIR zop8;^t-!4l*-^>y;EOOiKmbMvQ(sZZBMJ5z1GhqIHXm2L6n=539X!}DjwW2sR|&Wh zLE<>^Gdr#r6Y#lreg%e#8^${Fg~=8Ll3|3rIMJOSOu_`N0T_UC=F&DqV5aJn-g1&b z@*BI#1^tDwgQ4N&OC&#(zeaAo!fk1Evr8rEZib6UDo_ytYlJWv<^XaJ*@}oTanXrF zO2(f~I`hxB^=FL?A2gJ3`9mz)a$v^vu!=~*!Qw=ac{0e)X$}9dTCpY;{f~zl4$QC} z@quwia$F&}2H}I{Fcv$CxR2m0Uk0K0YGS68C1lUoi3ks~uAD5<-$+!MjM!jjiJSLj zaJPo){^pXLiSqvjq(aX#`KX)<)yb|Orf}rX#T1Iy?T(ukxs;2Lq~k#%Zx<_s=o6y0 z&C}0OZ&$}L{}~I!=7`|g^n?bVhj`Ew2TJw2Z$D#^GnF(~LeE4Xm$KD+`0XLtxLhOo zB7oZ?74+S~{ykvmZ&zB~2+`m2g#UV9e?+txw7zW-INc};xI9M=E|Ch7LD=|q+nDA| zuvmz-Xy6a`<4z#PMM7qMJE3!^>*8X^Kdiy>wA4*J_QZ6-g&<$~v!qc65S#yvNP?G_ ziWbSV%hu|qh;Oxk(v(QEg%07OQ1g0c-aZ9wYPX12m$Y#GE?54{VLI=$ zZg#wn3_wejDR3!pkLz7*sN6bhevI5=l@sb#{3+*7WuD|jOlmD}#aW@pYiMCdM0LXU z#x*7ZVWwxd!OszfPe5XP>g44_LG!Ybc`NIX&bV*HjnW|pgFDd-hG3L!XOrLx|<71&R zTi`XTUEn^d+}08opHCDNmzb}x!ja;dUq-kB>DKm5gPSQilI zu-4>!s{mTtFTw55yfz(5TgGubD@P;d1*ESPJP&tQt*wShDTejHL@Fk#oa`AsjKpJ2 zX%~ikOzr-bzxy84rSL-h_0^TzPxo^1o2$=d@z4H67>S$TrD7S!=8ynF0Y1{lliK&@ z%_`C3fI*po9&oBY$>^HK(rLR2rWk`o^NI@tfmO?U2npSW*dPw89h@S`Qpd!@I6#BN zpS2XpinJ5gzmBr|=}AQG#tIo+!?_hNQ}IorcQAU)i)yG}iE}Ai&ZBp%+>;|lhCWSiux&&7G>kXb01XdhNt%aFmoe)U`o&&2>YV;=3RL^FeIuVmR>}&Xh zWF2ST)%0XLC7#VwZ=+cp{Ux?gR_kC3NH=w;Y{ny4dytd)hbn&`kjDn~*S8GA> z%|x+HswU`0h*yVI9-kdLJdVkc9_x!3gQS^;?WB<^BA;T)ti{;V3b=`TH7gcHZO*rY z`ffwYpMZT2+5+C8t~uE`t1mnB!i5hD;wwEg=r)yzL?=K~bqd@&(8|euR%C5diJOaoABQI^hC%ncD4JM9?IJLGNAY z5jdLvQnf?9Z%;oa9Q5%s;?D4{L~)F1YWTTTqS@~_L2@j8!Z`7d_sTpCd)~t}{7j>3 zX=TtJGs@QYLi}T-+OMv`#p0l~|Vt z!vgqCUG=V2K00?rpHNbR7FCdCAm^H5w=*Y%%gPFI+f}HUjt-Ca!lAdN+d0Hpv!Ivr z@k%ate}(I`@{$poO9~8A;9|odwP1#7Sa%R-iL4MY_t{og#K(2~8 zJy*_3+$BJi#JRvvh~}@$rHJAog5jo=umWQJ>dmrKg&9j!ftuMDnFlK1nYK*G@*-i& z&iYf9gBu4;x_S8T~mP}*`5uLfq?1w zINJ;t%U7RGCE8%gg{{ADcfZxU%u6s0kaKO6qK>|Y0(WeJ>rh$3C`Y22MS4auT$VBwv!E{3QRg~Jk^_O)W-HL8O#1|2sQHey90ZNh zD_f>QrU<4Jp<37Jx+Jz#uPUH!OE!gwgE&sELo+si$l^I>O!bmf#AIPSk}}ZddZ;rF2$D zfsc%hYCu6`1a}I(QNmODnv7{hQY-tA0@k7d5v&(q^Le7GrYGDv(to>r1O0PBu^x69 zjse^$P>W6epXRQF9WJF77gG2yPC2u=O+4-{a1?Q~VS^@~*Aj z3u>DM)cPiQ>Nk2hxf?eoa*T~z)nCX?xGjY2nUym;yuUiN$yg*#%4S!)V1Cld z*lk0v_s!~Nt&dS?W)@$O2JTr{zg#nb*(p0W$A8;SukE<&=l`Pexn-`wQ1tDQO?dmy z$Qe(&w@O4|x@`-O@$%Qq?{@03zSN!G%U?N-0n+%6p|yhz`jJHwBtcPjeVG@-Xj*@~ zd@h8i*r>1_e#?W<2)W3I&02U=c|Do>ah6ZYoLqm%Ws6_@kYC-%=T}n4|0Z+11k@i2 zJYvJ+WV#@WvlodStn3)F{Y$1fc}Qzyki*caOj?jU*%S&z+-QsD(?b%1c13%-bvuI$ z2Ech`r^)Bv_0aZ>8C?p$(cZFFr7*0v8wZvk?#dYcaUYShWup*^#Hkkv(k<9VWK?ks zts}$R7K_Ji5;@DYZEcbofZ+PcwAcLnp}mb~FdNHN44YmSOsHH&{F@KcoJny2cbw}# zgGljq1@$6$_R2&!YE+qze%xSnlnsCldIs|nN1_!bZtxW&KoKnRgmj&-r44}Fq*#)p zVLwMH!YoL)hb_y~r2+*cJ3R>9BkfNOOP67NJTB{Vn*5;FdpFl^N93O;%XCire+kCr zE@s6VmgO@R&^RASEcdCAY>WkuS2z+cD&kaf_k=Cf&VWz;ea{Sq56IWdK|~Hgw85KO zH7|4)lvWwrq>>>%@2i45H~xT~Ki)poVZ`ohzdeSZr0atkM9;QSPOZ-&c(U~96a=@s zOPKs2dZaJy!bI}p@Vd>~oOw;{(;H*I#zI$RX^D*>GUl0v);)6Ig=1A3{Kj&x`lc;5 zf;vB=AFRNSprtI$=N#v#3j9U1NI+||^eM6PjgR%Xe_sM)y!2gWv=;Us{$Yt<$ zm1%DW;^dS3BD*Ogx|JhT>WMf}ZHe@}HtJoqo?|Uf=7YS8E8SJhh}_PL{& zEH~I~JDM2SY&*^atGH}C>U?dMTYFC8(i-i`*F}pedC4|-KaZj>)!(U8u5#FR02$#H4;e zp%f}eNSPuB>wWSL^aBk}!I@9V>&;|qhBP$TLtCqC;T7l#4s;oI#3m9O=`DNS*M!J9 za11(inPbS7r|L$aer$vnxL#qr)_CRs6Y!Xbd)VS!59^A-?P?f*5KiORJz&^z1wh?a z5CU|3_J6i#XS?tC&a!gM_S9DB{akBemC5@N^6|>YoBlC3B zB=s?5gYi=NX(bjvX4chFlE2PBph%prgP*2Et_-KziKnI1OQLpiqvgis6{~o%w&lBg zfx?di@!}!~YK@sk;t!Z`51dH&pFn3{5mev->wovmm6O=8fz?1kRbUI75G6274h0pU zC2haP@wM|r<4~7`t!WD!N1(tp=yryKNr^-p1>~j9pfE-ELHrh4ASR=zs6UhYsbETf z^qreEGe%V64y}t3;~lbG40f7#1?8eGE(;@D<>EDAb7NY-Z4iN2+Ivxw)&`cQf4!U} zDPj2wn?yXj#Pj>C-h<@B@0}+BysbjOZO?;@CB2k5cDQ6oHbAiBgaKJ*_^%X?apKnZfF3eQOosE4-;h4~L3T+;%J4=LEnpSzHqZr++XbnjCX*`2In5y`F_#3_ zen}XNbUA)ns}Y(oJ(=y&S5gMYR=qlgR0Wr}&bmjd@prj{-iUA1WYnLEGPg#+Eic)L zuZ`unZ|oUvVh?7DeOCR}$?2MuQ11~E0*DD;q=$76&5XC1WkFb}4jLOPdn-8vf7N)6 zV#Ud9C=~X3u9vm7{t}TAK{A0BCpU9&@>ILJ#vw!pf%CBaaJ0#4AG%YxrvG9%nWXh!k0TQCP zmDg%67Qi1{FAOq9zZb~~auqq_=ufpBQfv?Lni=-|z(6NXQ*sh?5KKd}v9~$`2-X~=6dCQOkqdJ+AmY;WZnSD@oPK9*3MnDxkAN9TvgJSw zkXj5U=Q_6JEDJPXDtWZZg^6SXpP#a<1drGRZ}^jH4x1XIiT9b+I%_U*5H>93#un9E z9{ERZ~<9Gs9WL&LmLB+i+G&=uFqNkVNR&De!A|P5Q?NVskY?E1z zW7{ArwFUbt_H;8Bz#i#i?9gM`rGSp_#kPP@Dkp@eLvu|=n$t8xxfeyxYmFf@=s@Hx zB%tOz>*8WLTHCVfG<=(+C>?sID!X4C3!s|Lp=K;lQrSzgPr6FCu|d%Vjh6Sovv7A~ zIR1^uVxT_STOkItzE{#j%u0UpF>%aQGz-!5tF^#LN^WuhT8h|Rgq=PuFSoym1>CU# z85Yl=zOXP#McK?|dBw2aPN|FEgzJ_+z-*L++f+?CxZu_Dm0QX&&y^XMnc|S!`>K@4 zb)`&{AvJXS`h@Z^dg#v~y*Yqw$=~yH6Q;E~KcjH(GYZ4VaEx_(*jYLL)1}hsw1G}t z{s*oA4YQa?jyt}2E?JgYM0+JqvI9zB)(d_T_XhtaU=u8=J&`pft2U0>6GntKfx|re zsLx0;Zk>4|_ep>>1+s&NZH+#1Y{kgMod!EarYLWAtS$J!J_AAdU15L{yU_jcN9h;W z9aJc*Razy4xZj2e2+L;0KBmHNQ!>hW&P4oxAIdLe4ruMF^PZ06TXtwe96`sLl@^p8 zNHMRLASOCa8r-$I7SEHg$Af}>Rz_*A3sDu(fl&oCL4}_O9yCWGH|tz=AQ$}=4$QeP z%nr&fWf)vw?TL4-l0rfLY|0lFcjIE2KR!pN*$9x!7{3{;ctSXfS6R~VB-lW(d&VoHR0aTLa+NoSkP7~8pfCq-k9=4u0w6jORUc4ezv__A7xX&DtOv)vO?U5jsh)Drd% zo?1P`ijw(ExH6+bZm>UBn^&P`ALBa`hA7{?GeYlC4={X>@lcK>OsZme@b((d5*K|l zc9#`v)60E_7M*!n3UFYL2xgtP0^;58ewtGqql{;Mt^l1)-23F?X0j;mpY&iuvHWFy_ODtzonW>syKr75Mu|$icCp*D#it~? zFTES1sq90U0lAnl8tguPxH$rRl=zJ}_dnKVR^0J@Ku(*y$ZRwqC+FgWHefmSajn3E z9qQBi{w+t%IInkp>I<-`G~{4g;%--a>ngH$@_e*Gx&@LZ2RbA7;Kk+-J%oZ@Pb+I{ zg4SRGqaU(`W>YJDEA4Y?!gAei=J~QW_AgC38o4Z}AR0%sb*$(}AywQM^KG@vXm*3l z0V_8Cis)knhSr%2LHq7Q;8i#!Ic7#tWg(6I4Sp_Cc;%^iUrD5obh4D7{+ zr38FRnEtA8(emR4}IFFY<&2$L*&%6P<+J0gFRJ)TdG9{`6w?ypGWSa*2 zI`RwU1-ZVqLf|E7ahQi$3x1iEd{FA`z0mvPB#zjx`6FxoeCYfpYhmzWbqyI4hjfAq z(i%K|kC1JGu-SJgWM5$g+zN1J;r)`*M3qY;jB5Un6XvGFm{5PW;y#D1(uS z>y?NmW8eL9zHno`t-|&{uhAB@XMP}hyl`Hd&0?4xRYaVne&FP#VQwYoB>fR6f@rwn z5IRqUZndO6&Rn%hiE{n7&P=5;bPwiVgjO}gXjv7r7&-DlnacZ#IisUVIX^R&YX{L{ zQ8I#n+F+01kk>JlwF+a7% zK`x6qjFaZI;QYHhkiiMK#^knlJ{8!&TpB#J z3XCn2=A8<_%{>G#r<$a@VC`Fl@v>F7W8L(f=HT`}%r5b?($!(Y_~iddM~|pF_TNrq zxYFqttMf6``Z^}b6c5szMBcC^hWN&%}Bu4$9+d;Oq^|rUlU#CU4$-I%6DrHiz z)Sor_bq+UUHNzyz+@m2k#{_DtoP~klx7rJT zDQmI$0t1K4E%{~4y%Izn=6$UW_%DxX+Wt;YOG zvSnrhG8^E2l5ClQ%IeJYz<3j(A|UHF10~Qvi4g_xKdf5a|6f+^{Qt3PF>sTpSky|# z%R;^JxYO>WjpKVfuF0?Zw>B8T-wzrL*I~@>W}jY;E+{86BQ$Q}U_W4d-u+Z!TMP^8 z6opyOIxe?H;6TBfDqtlTtlHG)*`J(R!2gkIu`!%8c`veq;}dXED>yyEJbD2ik1Izg zpunr*uD6RL@L&p+n=Z}dBcjRnok8!?Xhdz;gUern?|x{R)Fgrpmd}+C2owvd4hZ3> zBA?vYx7)C;*P~Bb?M+U==>>2W@HW~~pNZesa(_8}xgy`ylKvigaRUVa7{J?!wE~L| z2(~xgUydFC{BQTXs@gb1{xx{%1o6CREjMpu9VRmAxnuzwV4;E)B}R}P*%z)o3_aZy zk?z@wkXWlsdzm08^Hmn=B*hRir*M%CMTQz^8v-K@P4A3{i_m;>Nt%>Lur9*_m~u-zO8S{cyS-+DnLMk4mB zIry>!<@XYW4&J%dw0TLt{gx|y<=4)rpW*mzr{PEoY%vFnwbTdDzGx2ik^2v&Hvf}S zo0muZNvW;ypcS7hX?Ic?)^a@97{nsa#^n3pH$a%ZsTr50Iq_^|&@aAsi;2Ptg~F`3 zT0*X9MH`{`BE9otT1Z8p*owrHot<_WP4L%jrz%3#P+4jzb%U*AEL^eclwx`iKh}b0 zH9bk$xDIhM2@~K@#eZW-0UlurW^cA5+Y;jm4-qj5N@z+M9AN_d_Ewc400}}dw>n%z zPSdP8+OSj;8l=X`g1ERaE$Cboelk>&vkJC51*3!A{D^CO03t69}|29 zJpicgHU#mAiHL+cLB3X;os|M0Dex3 z_UNIwGTGhWT$5F1a`UGw8x@{K{sN#gKC-M8CW2k0R|M%ph-zzm}?Q#oiV z<}W?^lGUnoK?h~HxX>5mQ?-BbIKTmW-jv3eTpEaD^bU4|-bf(%qJ9?V|BtJ;4vI78 z8+LJ*;;t=T+})wLyF+nZ+!v>~vrycNyF10*-QC^wqtElc=bZ2Su`|0#X78C~awqfq zUAgl6H6vp&7npLC+qH@NtP{+5+%INWcv*LN%%gX+7ME!mbdVak3HQm;Zmr}=s&J!^ zbj-mr>_*oW>_N>@Z_5r7AWJS9-Fz1ljGexTEq8o0o2~3CzupxYlfheL|5;{PSOX_Y z|Dy&2Jb+x$vNClVANCyX)%O}^H=5B9tX=MbTxS+N2-v37$2(C3!OK8aKI6*3`8V8S z=uB0N9EJ#?ShuZFHPVlbn1TuU2fVJP)Gs9_jmZA|e7p;+^fcXHX!~qWt zsM(GN{7mBK{^NdfRtIThG}&PYyfo%WiuP)~+S)&`)W23%j>RnuF;f;rj|1=sN44t^ z^bhU4NRo1? zR6H|_d|(0_zqWzlsIOtiY{G#UJ-s1SnSnZW{oJ;aA&RVmj(XjrKmlCK8iLOb=* zvIFVH{>+xKrGB9swY+Z3G27e5At9o)f>~9O2#cEP4e6n%hbTO(m#QfKhmVaX@cXTOt_HW7Evl8$C7u>@2Oo?4j1pWeEaiz@?Mc2 z4JHyjKa8CLiHk7pB9lfr@sD&chF%VrB|k9d2iM%Ln^u)#QeuVGZMZVxn;On{umc2Z zUWA)vDYXqGl+Ja59nCOB$-t1K{k_M@8Z4207G9U5;8?D=!dyRff%2{-1v(~XcCG_h z?FKLkdF#glg<4!E`1V^%FxWlkvl$yh^?onQJ{HZVItY!==Di7+#_TDy>Q8mkk-*`i zBuW+IRBpL<4sY$|$DKzuLmIxl2A^d%eCNgQa7ppuxAg+$+%H$~_$l-v))J;Ba|_gmJQheT#pl+gT^lLT(SI6`&dU(6q-Q&O!rmD#wWw(N zay#mLd!ba%$T);{a#go*xN=1bT7igt`1EFe+p{Q&ZFQN--_xzGdD9@Ym8+o*yx3#s z6@z=0qnWu}_e3ced}OM&PWUcm2FBlfdr3^U|7#;^^#?kDXoh6ldRHtC67sds{O4rF4IbxOf&DJXl}s>Im7~9$!4Rz9!T{u zCCH4{hB=p?-)Qs^IV)PUxnMHH1{KX&Dyv$}s>NdQ%ffmTnhL^H}05_H^O{ z!ubEb-6X&7<~nzwoc(k#;QuLn&z;wt9HT?_@S5XTRD6HKhAend9a)!o6yB=*PWS2y z6y3GUu7+#z|n*j+n{T9Ee6PVZR=0S zdjFWSQ>zVTa+$SR2@YV~7RDvQZt=GkfY#vn?hJ|Z%c`{t?T&U$&p9wxm6KZDC2&)W z6HYvrAm29$mEx>8ojQcB|GUFiELMg!J!kJ$X&U0 z5xrM`KAdF(Sy1B-{$$ytZXa#Oce#@7k!fEbx&gL2`_tMl#vu%pM&}=B9iHxZPeo;58|wmrc}~9l zdwYk?w*^db;Y2k>mmgd>i!QU^dTtzsb8?UW`m@%F2?ai6^)tU z^mQViA*R-4Yt`>``<9JkIp!!u2WCiTuLD97QPYJ&%xkb@%O#o>(~!e~<_uqQgG_8Y z%tw?!i50$gOD+>Rg~6>W4Lh4hcLj^iHjsei86zF?036%sy$kE|WBY;6;2MY|A>v2*t#1QdgA2K%3oW=JeG1H{UWg*o1nplh zRX|k5)4?IBEa8P#sY3&M;l;)Lg)x4gNGcu=!OIeH`y&#-b0h4xC^5?a7HQ|QaYtp^Eaj2^4YcJXln+kd7~(9%1P&CK>C)%USp;== zh>{xyhhlksg-sGv+;cFT`Ehyvx1(8Yr_OX0|6Kbye>|JPhD70r%%9vgCYh!!xCbD@&4dte)%!}dijr0xy;>WdWI^C!^>I~3OaYlpLl zG}_Y0LCjPL;X$~!9qk{{DU`u}cq|%REO}el=zp3}+;h)>1B}L?0pF_VJwp)f*q~Jw zVJ$BJxzL?QS?SAGMU7$fk|8~!AxTRiWg*xTDBCha)Rk3$ogDfn(@;e+s zVQmP9)s+~`@XfD3Q)xFj^+BF~C{JU!|RQ!%B&peIp;_;>-g*6PT`k} zFYm~oMCT(XDbU6HvFLJ=60A=&AxvOy0uBt;yGas?>*pJQY}0R+C@Kj-*3$Ct*AT7N z-r;c}L51u(knC!QZ~Mj}FH#dNQOc#`NlKL$4It|{rrySBGR5or3gP`SV1(l(|Gdpc zB^4}X_PAQuKI<5@<+HlvU$yJT|5L36^e!h8yN!t|eNhE&2B!rkubJ%aS0Tpev@B8G zLC@RK9;EIlHx0nt`;-WFEsqH!o>#j%EvgNaubn15=hvsjE{fU<b^5+8C6*|tle)XqKy(kK!u<-#*7y?+>(QrzKuzq| zHn8J)oPg!rRddCsv}7tn3wo=6TBi|~ur|^bHn)1QYUW?c*SDvwZLM9V$W-~^@~IU@Z6;ZM zhm`8Vi<|5E*OzDHC zjektr$H0tVuv#R5y|IP!8l@3=j^ai-Q?qBH%1!dY%-D~!?W4cEO%vy7b;NI*W*#RT zy*q!&{ISCVSTzq^U*VaJe0Yet5%8Y!1J}sy8nREv$28Er;>oD`n6D)?z3gPDCMqSq zJHiWLsR5OF3XMa&9)i5Rga{EjC+v%1j(pS~-$1!uLQD+r_vKja8mmQ$pCqG83)Dm> z$MElDxo5tcmJ%tJiD@AUr8cgxjd63Sla6i|2YD- zAO?M->TVw`0__GT=%k8h4Zq7~%B7j=+j_Ehzw)T2dK(LZLFv=|4PIUmD2`ho9@7t9 zurJ7P9#}+^IlsE2S%oj!6}m$qOmp$ai?N?2i1SW^tuW=sT)!OG*i^5 z>?4E;34Y&b?kB_u0sQ1?AU=5-W%Dxi_Yuu#M4li_TprQH(I}gXjJZpX%=?M)gRAYK zV0SPYsN+jq@7_j(-pV~4ug6Vx&b81Dcaryc&u4Y=HCR*ptjt!~1&T>lvuE4ORM3&9 z_qzPU*hGpL>MUU7#^qsBv zDjX@IKCXaO%YXhOvjQ2J2w{Q@b%jJhMm!`IAl9EkG$7p|A#{+3F*`C43)PUcE1EL| z5=x2#5y~MJR&HXDu?CIggQR#{%f{v5$L~8&;x-el=>?nl?h^9S!Q^F`*B6nkj{r6D zpu>zc1;JC_WvMMPJzEm=R|W64I#&HhxaC%#x}K11kyS6OAZ29&s3*Rsx zLY6RDX!AYpf<5cxupEuhXkBB%j6y}pGtu4nePJwIAYL;rIJkHR2^1{STx2}kHfCqz zc&5iTNQy`f)th}fZr?69-Ud3)*MVZ4G13<4ScAb+9C3QLMra^>=U;m9eQV~p+MIw}?3mJ61r&zWV3>=fQWfHz#c2wWq* zfA6HLvX~;Y#|`x2AA2FQaKw6hl0Ea5dR|@EcQT)RuVOv(#EXSrB+}ThUt+{*iwvI^DKPs8) zLCZ(dx_-v2Gw^AcVI+qM;X7uVlygrtP}Ayd@*F0jt@F~|-7Ro@AEiVvr*0FitCt}{ zH6)g9WLlO;^1qZgceF{XIM%$b-sJI5y2`c-0l3Jz85ymfJj%8!_yxvq`QvHe)h&G| z3kE{oI!B_Q)WgKFz~H3c-!N5YOPaLD4nrZCC)og0#%kS5;aUgV;}EZ_^QOdn&pykO0aEGN03 zye?z01*ctTfy~=EonrW^hP$8ni{|KD&w$|q71RDJUV&;vivufnW^Y7G7I5&&g_pR=%vB0&n_#UEnNH@*F7FP~$ zvUQ_&o%?wV_0l8 z{yJTrUS7PH{SG#9gor==U-xizL63+*d{3SRO4jCmnEM1X{4wsPVELa3msrVaKE)zXmTcnQK zPZm^iPy4T-7-b5AS`#BGfHX$kFpN?1-xp;1DAop~35#Qj6Qg>33hKfiY7{|&LtJ;$ zQnZ*%+Nv0wW;XVW(u}2H0ukYLZ@G0xYB{~zCd3`z9O(-mU0k(w26xrqQ#7FGf~5`A zoRqJM{~U%DH>l1{x7U}zw^tU%L*MDMzDi~CyaEWV2#(3kfir5~-;%d1d1#$? zP2yTrS#;Q^?>UyumUNPm)RfpO*eT@nB^|2+tIOcj={jcZ@neqS?e+2O=J?ffRyl}p zg6f%FXHvbo)bs@-F!|9hn`fse15goSXRK$EZe!lm2QL1~nC&2lmeC;cJ}OY^HLZ{?hkeKAiMnPZJm57CVzmmPD-y3O zaLMD!juJdh+mg$?`Neqz8!o3Z@@(gHw5ZaIz$M5VgWfsSJnQdAOU=1D(#)3MJd=?* z?R}h?IdY)5e$pQ!9kHM>Ue4-d?5&4w7onlXXrjYMe_4GN0(32hxh>~*G8re@-=ARn znEwG`W9<*|xSWibDD_niqG{OcQ7c2~4W`Ca)Xl{4 z^iIjspVLem8zg6s$=_3BNypbII)U%9?K@CRP(DO{1Tq7ELp zx29V0Dk$I%q=D8E-6{szen&!95yDwp)Lw~{$sKsn!gIYTo=2ET*y?HF>hC-}$k)!V z=?<1-NJZ}AFQ4f(OxU_BNgubi5hvm+O8%ln_WH65;#)0+vtu2FYzN~=wfa>DK_>`y zR+9b!WeE1uc4C=CzwK%}lL@?jpXs_CTr=>>GScqkL10&a^GT~`xgKhOZ4BRS*9J@Q zOcUqE1IXizRh#Uqb`Wtp0n@prQoJUsGZnfDwc zS!ilXK=#(XRT)V)mcnB|Mq92*4bPi3k*}E&BNv~65j~M&YNdLJP?ZCz>5#CK*S;TD z6DFS= zfT2Xdc!yl*UsWZSjA^Zeq#-s_DHTssgPTL0U6ToRYg);D)hq6#SLVjxbRW4GiV=jP z_1(&Hdb6Jj=exw!A4OGbcHtBzUo(yG?}~OxscyS%QfaXdZpe-d8UFB(Q_Mq^OOn*_ z0Jm`ntps^;*jb1~@Bt!vHsuj=DAYH9!Of$&HpjSO!pCA@-cuM+u9?hdiO;Z*9ee8s zy8h^#9KR5nzH@DklEJpYlF3&Ol#2UkWToG!W}rhXL(8{ba%7;}XW!(gMP!Z8kwkFH zor0AOUr2LY+)n>ww5hXQ*7QCzYMfH%1g>7Rq+>Ikd+I|j+-JXvYN;`1_+{8bFeF}H z@B}|kAFV7EtBy!xk5G9Ej%`WKa(ZG^n47h74YoisY8q_#$xl>h8j8V%@;PWcKwt27 zW+x^%hwAUVJdrX#0=p~kbd03Il+TjUM45004Nb}dXGkRnm`_bYY}&H6=DD4#=36ES zCi@BR)~*;vJbKeM(~TFVYBF^^S?*OUrZX$Vkk+jNw#mn=)FMU+E2R~&MGwAvtomF z?fmOAGJ-2xQ_CL(^t@ERMU1*BM{%b-Rw>4In2YM&k*=B}5HDg9;XV|93r6&UGnGNU zqXO$nz~=RpNT<|h|2xGLbX&l_Z?3PGjVthTNnpFFs9t;N9^XNCCAhA;4@l$b*&=UV zce5~M8C$f28-!`Ltvu!+GL((6OpRi(W4{deza}~Mrn|yfiSliVY3zQ~d9jw`bBWG5 z0LOabrKT>R61qq8d205dl#U}0nMDg*r6o%8Pghh$<8HJiVBle`r#_UjBFq<@XaL1a z-X#jb#Pl9WZmjp@Jonc9(o$4ju>|qzJn++OCBKsEp=ZMR7B<$*`l%;o`#`;?$wkJT z{ajGgDLBlp&N(;2c1MrZNQ<+O^3{1(1_OP=sDic@v3SPN?3ApVL#ni5SsPaE4KVU- zjdUt?a}U)Vfsps}nFvgDN#O&_PiLhQ6R44ylFS8k`9l~M)sqTmv)f4qSjfxmMqqkM z6;3xI=YOnJUVJ`o6$HM$lbrflS8r&QsA0{&gefhSfk{(bfBeo|f7^LHshkk}Xv*?k zYJVZ2zxGY_^?ur?H7-!!IP#O;BBs(6M@20%e~#+GqvPkCxMbb_T{w>y9Tr^mxiPq% zyhZ}bsd$f0+_~vmFAM*fxN};CuTk|3=v4WJ={5AZ2gt#|2<#__rNb zjjTWoaaH3P_URXWY_2KE*cf-5jD zH0pL&-1j>sQ?xT9nwd(0dd=fLQqzB+`=*je;Bl=>d^D<|R{O>Qzm?`ov^J#dF?IyU z@IoFNl#cn4Ik9eI-`FdT%=v_JuR40!)x2%@9(j_=r+RmPaLN8mU!q+8sdFCO&@(q6HIlmI1Avi~@RKx{N(1bNeFnT7`iSj` zW!g0HW)DW{SO+LmnUgk-I#&048-cO{9;-Qdz2J~d2qO%yLvkupuC31V<39|xT8U?n zbkllzGQzTol!FuB{`5I2^dp!$)Z^Rjce_V|^pD&<4w5S>zH=nf+GO-OSO0QM7ptbF zx9-#f<4$HCBCy%(x(W$emK;^NEwF6+LlEWUGCM`x$S2^Va`6;QT54H;aR|f-<#7KY z@I{%pwkR03rR{`-!wmf^KyEA7bLf5zV^ao%(`NU~@_BdprFN&7i^>4Z1$&)42OW>P zPKUX}9uC&(mY0NN&ecZl1wZqO2|-7MB6YD3jZgG26AXBgx+Z zD*I+F#7El@c&Fh47OZXJ_SZnE8CyZ3cR`d?$1xqt<^IS}8>@FC?D;8_>CWG^Ap6b3 z16pPuMX#=<6yGWZ#tXw4g#kh*ZaDGbi@Tp*bW21Xil}csrOu6Q?0V-q8%|OS1N6rt zPK$*d)O5O))agrlG--+PYERM%jqcB34B9%=M{$O0;T6*Kv_~V@J~;xb$JO2p&xR{{ zjW=3A0h^1%E3F7R*$g~UHDk)QQCu|6y>_I`uux6d(l>0y)4;-_rEGodmg$WTaOe87 zi2u-kAlE=4>wm~GA~O>=DHEwODJwHG=t@ph`!lO>g#n7?h9d;Y=?V3Nrr6-R{l?ry3W{(yABKV5?pgrkXFq&wRh-`w zZa@M+r}?(iWo1EMjfj|h8PZqN)WRBLwzw5p^z0w{J-uN(Q2OH8$J9*{zMY@a<9itw z>N;pjE7Jsj?^q3uxWx2qtB;QyTm_OljY~DFEu42(SAs$v+{ePU|8`c1=f+tzs#E_B zjVCDfV)&iLly(=pL%~!KaGO_Xq#?}{%c7P}UE90IOqiLKo|T?SepZ7Fk`yaIr`Ze> z#euu`Zfp)8*|;><+BzlOl7eupx*u}afdpg!dAi|Ox3Og#TawOAOTkPrW&jK@_SY4~ z%~gTK1vfnRV-4bj^}a3f0%wUh^3`+ew2MH}bAR5FyTfZFdcb>94P6V1O#^iHFKjhN zOf}{o@z(fCV792en7{0g*%r@-7IHtEXEHG>cW#Bl^d~Xm@i8Corwy&`1|H#X`E1^3 z5)^!=ha5#fQZ+8@gqcqO6%(1?NUzlC)jD%1FI&%CpM@6Q8$ZslWxl~8F88hdcW9rJ zKLb^t!7C9E84s-`=mzw8pAiQ)%l}W3s%8I;+tIhuAV-i%cO91L5EgQ$@40WW8w|$g zQJA*)UfkAj{)5B;YQm6sR9a14>Qj+wRdQ=e8Hm(BMAwHA3hab?{4~URkfhK3Q=|$i zq;q3b&Xb_M^LoGY(G2J^O)nK?r{3#7UhW2&14SH)!BoTX$}!y(KD>F~29AL8k8OzI z+~XN;3L-y-BH`u<+C=%bI)U#yw;=QG#~H!*2WN1RFx4lV()jbOQC_}ESC{+YrrpBee?Z;6XL93y%DXu4^nD^k}1(R;I1%bj->x(DfQfdvs7Zh$toT~RH?Y6#K zU?s>yiVCad@wq(&@Ezcbd5m{Ls|vFg{J#4(+ZG6Xvl=7X+j<`G1n>o3 zjVHi6vbJu}KSItY77VuE~ zuz~P?6h^V!z`S51VQ6c<2FTJ1 zu?AS7=|^3**u;ru{2%%SX5zft7~E$%^_QMy;Zkx(XW@_(F50kf`P_>ZMj5cJ5XQr8 zcm9YFdBolJHdMjThXL15`V(y7UZ^lIz;FoCWAngZm^?ByT2NPrznh|_*jLK$thy3a zYGnZj6?j-7jzkC{7e-r1wUiq=VMOJ*E=C5j>!Y*Tk zG9EWH8?4gJW^0My99_5`Ap|enpk%Ggi}GG-P1=w>^d`0)AB2Pd?Fp1*Och2E4X4WH z#}X8E5idlUV(Rg2m&jHVzPDr(x45cC29D09tNUEh)7 zxP1G!HJ+tk=n){V#OK1vO!4;b%&!!nhx8FT*I&zDeNpNt zRf;yHtojuHO|5`F@0{E5wx(wfO_H-GXsyCqwB4E)hW{xp^H>fSu!Fyr%eov!Rr>8$ zu_FFz(>=I};~9kihQg#xf8dD`R7T}Pi(w&%Fvsl07J6ArOpBi*Zx znIt>f;f=?8osO>e+{o-#%(8DAg|0ZII6Eok53gO0QEwZ1a5U@}$f4u1xN5x$v#Clj zohdg1!A&J-nN*0`x zribmhBEMO{PRJBPH;n@EnxX@y&g{8Q_fmOs zONMt|IW<~l)JXqkQ=9Y8sU14}R0_2^1gbOKWN5|nmK|G#s_PY4sC^YFvLYx}no-k! zDJ=Wtn8&N?k={DtX2yeQ{k)u`X2i?Zm@rNAs<~}GwNw%5jU3vBw4m%OSD?mqZlK9M zy^LygI`$;VDDc%*51=T`dX%%%nbqZsPq!HZ(~;#+$liqF91SqIK%Bq(60)ci3xxYa zhA=B^=m8bvJ|*h*1znrjZc9Kp3Bo11*e}C`mK1;-3>ECC#xtNwyT)BO%_WjsW#|t? zj4sxF-hN^Q$aXRQEyoY4VAkDxx^XRiyq^~OVQ^w?;VC8AEnT8zRtQoaft3s5pG>th z0i=?+#UHcR#X+Zgp{rI$eHrDR1LnY#)o|R6e|y6$ZIPQQTqXLg7BfwQFKs=0n>OD; z)5HNI-XdB*g_Me2ox6=`%_FavyNfw?mhX%pnEa@9*T(quYC@Rr>|0ZRCAXs4HbQDo zLtNnj{4JN_efmd#m~+ObYTy0sZr`IaY%y}QD;y)R1Cf~cB3%=lmr7m880e9mP_Dwi zn~kmH2WLTc%Dj9hKWZG*OXOk<#tr)rSAzM+$r$?dvw0W+%{S`A(rNB$<)iViq<%E? zU}(fw9S7sR>6o2fKLbU1O*i8NiX>Q`>df1E`O}ZT&J&_<+12PlbBmjQESc6Nz;{BH zVIa{2X6r=JAPb~4l}N+YfHy)@W+Xgp){F%ziRtsdQs9)mjK7wFQDN|4;*Wo?bfe_K zEHw+r9g}yqu%yaSd8+Q3Fs5x`@%^F$?u{0e^wk9L7&IluCNXc^x8UDg4bF4-0*~`3 zOvW{9(Di_E-<(JUr?~m)u)=G)$N{VWB_bjeqlBhW+=hU!J6V|t2ZYzffES*_D3V!7XV1Tz^g`yC;Eq&qH)c7)v0Z@~3k@(YQFmgaljigeuc zdQ0AxtUA|TXQ@K_cOWBjYQ?WyZyjl?(ilDrLB8T0>tp3}x_vFk0l$t>!JL0k z=UM>AOkrZA4toe$MPHO?!x)5GEdE~v4oegWU1CaWOvjY4pmAIn_=5c2xBz_fV`SzK zIBrF1VPaAOsBUPdsIS3fDK`x)sLgvPOQyCB#8MJ~`T-}F zWOzq2lJ0 zGG4~Fewz$6HDG*t_G3&+U%~(%l{Q{MJNbDu39%yrli6A| zEh#kYC0~9OLii(kmWot1pta5qF{;!V3fDKJeG+91nefDXl6PIfjNKCPmqg7S67Wd0 z41Qmlc1(XDxaqIl(AjQgCsZEl5We*DlZ=3V6baEGsdG+|EEG_V$xAh_f`COrq`;#+ zDFtBA)I5`AQ2!o4)XIe!hGBe@oUx2-l2>9sKa-mh8;$x{?a zJ!u6mjQgRkF`S)9bsB#mhccXLP(%FO7QZiY?$g>nLuzTVxjjaShp)5Y2^!w_MS^l;y;mbqa}J zPlJR?`Y~2z1Uqbrks0;gswGQQyAB)4B#|glDwyEHwJ=VHrmyeskoZjo$dGcS?e+9S zX+8T>wkVizQ`QU4f~eIF=(cE|3)l&or|u7o-wv;6QL_RtWCgB1BP*L!XW*^>6;p#N zWXACRVZ~JF+GJ6G>XernDwPa!Pef%X-1vDK6)-oQVOw|}OXqmMMiEt_%dn6h?3ThO z-JL(Dyc{~X6T2)%d^5QQ+p!<_J9rLbXO9)YX@!`?B%r;g_0Lv_Pz$iDz!09vvG9nfp zmwqG4)lF`sVe6+aR|LvwnTwvIKTMpicM8`<>j7a@#IG)TZTC}@=N2}) zo3LGL!v;)cMWsVS^S=Eg;Jj*bz;uh}Nw-}5I~%i@!GYM^J^Lq!hZiCN>D_-TFHl>@ z^i>pgdqA~vdHYhB8;H;OKh%RV%r6Q9GUITzCY zU-Ga2ANf}t){Q-2FE30u)3f}%w;~i6cwuwZ7NNEVwFlI>P(b@ zkV?5JP7NlzdFVk$T-u_r{?@TH^x|iph+#L~&|aPhu#36dE67hrj!#iXBJms#B09|- zb)h}5n6u>^xp4pgCI77cL;ex{BmWwwR(S^}C<9RwvXG_ozV6v4lA)#4vmAyNqMDS% zAboHw14A$E6LtoIfdu){s2_<)k2Ua&#J^=Di+v@)nz}>1#Qf6A1R0=KNnL=FCc#u_ z)~WJ}?GH>Rv6^16$&47(BO|nS20H?Fw?r_yNhq@JmZzc%jy8&K)yb}QZ2QDAyqsQV zO$8Yy%5M70#j;?sR(FfpZnB>;$K~d!Px$X_^|WIr*)>{f&BL-NV0K;S*C7dkMojU0 zR|GGowrk8>Mw*`c>h(BtF(a_5Lxp>S5Y)rZQAMKi20rg*SGP%g!pqru+;sQ(fULR> z40NwUdbq#D@!ukU6_5$4+};e%W$Z|-8vzcmHBfa{xG8Vv8HaSowgkyV*#5SQghZ!0 zbtPOuRunB+J&jPH(Z5IlpdjDvN)g3gT89Xm4=4l$cS-RF>M0&gX~zF@+5#Uipp5P35FbF3W|CHlfS&UFd)WR*Wym!V`*p zZQ&2DRE&pUyZpqK(^+lVSK{;#F&;UeMcJA>V8NMfLW-W(5dKF)h)|R^HoMfCClU(! zq;eh?o6DbcR<%VOaN=f$b5Pv#872`o-{pEd)c$`hReNm2^3;9DX72*`wmWeiEkFOZ zKNP5dI<_hfQ2Uu9l_TOKe+e7?T=h0*AG~~c9l|vo-kN!Ig)R+Tk<%~+IvL^Ma;_V( ztSU{r=6okXietes`q8jWauD0n=sNxux3(1%S%+i;#17%fU?z7rkA#ySh07fu#yd`d zzgi#1#fuW=eHg#%AKbhK#4vUg^us9~xQpn#;Y&xM`4=;je*%7ACA+mbts*}GKi;N> zv@h1*wRdk;N#Y{1He>$B?DRhP2MlGlGSkB`P4HM|V=KlCHJ)Ze7~EE2S$_B@O*h05 z&_zYR(X@;U7j>x?GNH9qK$?ZA7h=}weV5zD8ElEF4rI4-!3w;VOleC%;6blZ`UTUU zYikgr{YHgV0S}lDk&6!m)g*x`=o7j$S`dB--)4*28>g|4QlIxGi~oVd-D$`Nk61hc z?SV%RVb2A%=SL-8y?alm4?=FcOq%!u*H`$|BOWRdmwUj5jDvO@(C{)RcmVdu7i&6y zi%qTxQ+Y+N%B?oNByRejY%w8LlL9Q^7sLX+>p(Od-9|E*cS zloPWMh47YmvQ3*fmPuDgU%O$wUb7YNY71%lacR8Gb=8#W9v{Cuy-C39+TgU?ij9qHF>f90}6$%m(NOngMAs z?q0Xx%sO;XX7w*sXPF@9F`FaDVsOc?>AjrlHnTB<4KX`mq%#mMgAG8EKq(F54KL}4 zk?;x53RMsUEJ6T!T5l$z@E1;TeNpOb>(t@9#)b}$RPw=`Ed*$fu!IGV#HR%IFe^kT zPITcI@gQ-ZCTTgr)xW(bHcW4W;yb->HcIs}_RGVNC@!H;uVHfc7_-P6If$Et3y z_?lAAsbY$pdJ|Cs))&X>F9ApisVV_(9)#VNF#AZg`eTX_#fAUM2pq7;HT#A@CRIZ8 zKz>n|C_aRBPlOy~G&aMPJ-{Xqt08VdV?C zeiXM&>DtG6)3M6cWbtb=a0vODVn(l@okFqb*UrQLEt**odPu{;x1Y!)lp-OMxc{CyIVi*Yu)EZ=yxsjJlxNsRq zK5vxO;)LYESPl4_)e+_TWa%F#uRGTXssICEUEzXEGZQU)mjKxd7IDnsT7gusr{&4u zGp0K&E$je1ep|ABL^|NRr|bd`T-RqA78>`#zCq1{k{llwT8xqQzC+alkA)#g0!CZJ z5WIY@B^4y347WH|6Di5XnX%)+rCyP6+R*K9r!ST;fm{V}77k=N<-W)T%-sH#vhthQ ziWrWVWiENl+?EJYLsG5q)&05R0uwVVj&b>>F#OGl>l@tkFTnp9bkjkMEeFC^VoNQ9 z=jb|{`_1(_8!FTI$!0Tvx#kb9AS&s-? zmt6(En_j-kYiV96HHzNEcIV@D%ZOlExUv>@C}3}jyr<<3NM(wSIzjEU-kIpN^R0$^ zueODOII}U;01x%T+J@H@kW+06CZUUma`A1=6=OW>`+$M%8KrI!o}4~^u88Ge-PQ_$ zH*jG5P&UxDO~~N>l?lu9R+V?-VE=2}pmI?Ze&o^$3YXTQwxhlUHxJ!D%-?o~v&W2f zy*2d~1}Rt9s=wa!9ph+oR-9)IEY@AHQ!oq1IxCVTv=p?>Q7AwIpL{6#2i>7Q-{OH} zdb_Mg2Vzm1CX6pJygTQuHM1ga#k>9zP(UhqT!`eGdw@GEp>buqs{fnp*hf=dYrUH!A*2fDtE~$q+tZ(2!f8IU{AjK1*yEEOlwbgvUk>M zX1|O(id&9%)bb`6UgL4ZY`;}v$ECQ{4l*JH)T7KSrO+zHDRDCmtF9sEw58S!2@oR* zg-bsQHma9)wli`sMPF1kZ0C6y&u;gc_6Ks-K^=MxAyv=-*X9!qdPh`H%;SB;W4({H zB23hRZVPJXmB4Gc%P0E0@eh5@YRx}EKg3J$-MMFYi?0|sux+X2Ghre6K9aJOxOo?e z&b1Bu(Y&nnq=02k%Nzvbwxd-gufKw&f2BGw$e5uKE7IC0v#+-gi&wB_FkzEHwhHIY zpcku{s>y6<%Kcz^MM$00>2y$hNuM~*()`uMB7<@wK|addZ8ZPt;saI`=@T{oCk6qH zr3&o>**Mt#?}U-AROPouxTQklXIYT%g5qFmS@%$;x$W1J6kJrw_Q| zBxU;c<;=f}cAe*ys^sFzm{P^kr`)eE!G0ee^eGSBTJ2c^=f3NJec86p^z0+=<7=DB zf7~B0|4A2Bx%IG;HG%YQ=-{Cl?OTBtAnisWdhi&~uSTIxa1YRrCZTV@5!BYM^xL6` zqDn3iv|{+!jQwbx+K)@X!}&{P=f`uJz29)?&iQ9fY9!2wi0i-*0JC50>mM_)G4Zhm zd>lA`gH3r5W`Zw;kT)v8t3q_bjf8B40iqt~KEgXVyh@-pP5zcj(jh2}Ovy=xCs~o_ z4gZ@y(-XAH*-b$$8MFwL$%C^{q|Axx43T%{LKZmtyqjou`7iOVrS*zzbU;$0rQ{|@ zq6+K+0K-^LEW(jt9OSCPh+joPu-VxTD|3zGsXrb7t$T4`uz!wA508YQ4x}`)5=jJG zhmWeVMwCe5{-vJM3Ht@_K-{wzX#@E2e(~{|ld?5+_0^m5@mC&@pE$;qr?)e@v+E$X za>p&kw#0IsjS~iAIfamkrZ7($Lxf~&XIgBE$ue>*p}+7XL?1&21L1vnHsgZ%eJW_Ska~7b9z*O(X~yZHPkrNNy<6nTQSq|fbuUej8J&wJeTSipwHc&!N!LW zw#iFbRwgpWw0{xeINdK6-I}~Py6tB=(xiI26T+r?Izt$Zjaq@syY*T6|HITfhey_Y z(ZUnk*2J0Ew(ZHpww+Aeu`yxCwr$(C&51qH*YEG%?|JS&-RE@o>GPajyH@S0+Iy`7 zmI}hk9T(lM{FUm_0a^f&i?4(EFX(?qUTs#tAz-*R3movuy7Wsfo^3}-_$zE48(2)x<^2_5(&⪚i3(^} z_TADiNV+ZwEutx`GOI9x*v#$Z{>V$OJpN&ybxfyY^^k*>PQCs&75y7d9c{4j&)*37 z38WxF)69A0s+|OBl}`!mObV0O%c$MInS%0x2+_laEaD-i>@3wj-YNSu7pti8ktrSS zp15XW351L2-qc!vaH=$!Zm#X0iyRMn;^y^Jq8TYB9mV|#@q?emA~8QZx-G#aKALe( zCOaAH-q@%->hMPhH&OAkDbx{O-Tz(`#q1~x*v9UmyEtXulE||G<;?Yd?P&JTirb1) zs1;Jv7KNAVy3+-%a;nny`_gGZnDmW7Z=k5%#88oJYNMJ^vCxKnvUWZxHonvzXy%xr;atTu4(E`XTVe4x8lvqhb((W5;IvZ z`E@gHl4onz-`qpFs_W_~pEV8j;nfVPtgxgQ6Q*U^Jn)5y%W1;YhaP`QxYrhm2O)Qs zFHcY9aeG+;_=wEzxp6$dwMNir1Qwox67iCwF!qh|G zQ=O}d(8soMU+J7L{&FAik~QfS6-r-OoV?5gX5QY-FL%;P?GsJrrRDo|4C*4%;|7LG z72y0SLQN;~HTs2A^ocLft}nj(a9$#XqAA5|CwxaRmtZ?67KMBgeCZ@UF&f(w+S zYg?ISHfh3W{r#iOXdS*aVE;!iLt-BicYfc=@~rS19(+V(oLvdgP?xEGKs>OUt~#|z z{YW2Pq9%=%|9?of<$>=9uFJMJ;E#Y9;%To(<8FC`@@DTrFjF>iaY{2pRc7W16zHrj z@d988znFz=cr(M8d~GUpj*4s#M(se!jx~kQDIhe z0T)a8jZb^poQco1V?+05xfEpjiS+o4;06foxJN$qr;&kpmQabKA<+|!W3a6G)Yzon zhGN;S%8!6NzgkQFQ%HrISJdFOxk=EH>M}O`l5F;%$abATELBc!7UkAH>C*va^+$^M zQQw%XpLJ9G@5)G2ig`D`j`g%8y^lJUCVc9nEa})oetB8_6~q@KNr`u-+)#N)njhf4 z4BR^KzLc8^osyckprXlIyh@D_hfEj$HH$5X<&`%fnBoZ#5kalVzvsR$QOa?51U@%! z%UO<8f?YH{8D59T4BgN&IUGeM6%>Y|t8u``)z<*s!R}6Nv8+|MkD5FnaIW5&NA^o_ zYTD}(l)Bq56Cv@#a^052{ptlZMtX3@}1~N~Wl`@pfglj6i8X2@Pixsdb4t$ILE^MitO_8|I7A z8GEvL;P#MYoVZxuDK{wipjI@|nxb2-#Ae)rPxeH$eoSqS_J+CtL-Jz86`JWY_T*AL zaycZphsprw7QZnMn=TD?jlmO|zZmnUBR}844X#TNX~urKmS!!Vrf~ZYUuyz?BOZTb z`G7ajHq=49P8ORmxQ@A)>^A@b%jjv+0$gP@hhzSLCG%>+H^2UG7)qPrDz&W8ALy;f z2jY92rlOT_7AoCK!ZKWsWT}lvAkGruHy?j3TB=A2(pn5-hPc0qepDAOg!fXl%LjDY zXI-x*4)npvA>_GYxuQ{Yvi)82+-o}BgOP>sPXEv*U_$)A$)k{;Dp&(_ru_XE?`Y)d zbNZKX;p)trgITO!T?rQ-LeS~`>%9q8@SHC=7pP?`dj=w2e`d;iipG0{N${-X!(Wzd zL8NnHZ?=4iSJ0xi{v+F%T2uCA|EKR46Zc7OuIk`pVXg|4th7Cjm2gg{O#_l15UX;v z)k@`i(B;oW;+Yq~ex?96V?VKSjyJm9yO*K@A@D1fU}(eGGKNfOmpoc2fc|5- zuDKzp!qedk)(=%=nmo5Y)lWUiVzv>Mc0K&xPp}z)p0IIr_10|&TFk=ZlM()Lqj+&8 zfyM&=4yLu=`-%`Tg(UcK`F58BSC*QZaC}1dH8KWJ0%685sd)j<3XVe*gG6;eNwirK zaS;Si)k*s;J0Wo-IL`i(KRK-^$V))z;jpgK8T0=*$;Lsnp3*BVw<|RKlDbbiLKrk@ z8`TD^9&p&0H&{qF%>evW;UABx=PcN(&Bi;Si8W~oZ9lx!M0P^hmD9?<% zL4ZqiJY6UH9#3I95tRB0Hb#LS6>Jg#A(VRckXFwHzkvhY#?gpw{w)T~0u9w{wu&T; zKYqe5P+#IDg}=4}$+_i)e{ubVjkVm4uM=gxSVH{8t#@}=%qYa-pn9q&uPz&Vj}--o{P7uFz#k zc)u)zCa9oM*y(@M6W%zLyLRBal8kfph#Z85){WiJak~oK@|&f{hBKgxJ3@jwJiGX( z))aCyQV1la_92m7Ibo}@11Rp%DWORvDwb=A@>mH|9CpET37{Wwu+a)g{a{uH^d@Lx zUIB&PFDssR5*Ee^+vT$dXu)khf_q)jzqwK`e3fTz`+C1zwzL@dtt)}*-9D6{8ou2A zoxM+)g@_ar&^8B9Uv-3&G-2Kr@dM{oxyNAq0_KvmT$1Fq`0Y=!y6z|4roh1F*5WiSW@eWue^_V<3 z5sg5L5^1w{`xY;`OFIfcDy!ZsHCjbgpLFP)qi+fCQ)4GIPisq&yO~B+g|omp`pFfX z;t<-4!!;M(kwTk&8K_B5zX_{lQ}2~nzmPt3e)Mw7DMVfu{nxO1R6*!oHreU4*!Z4{ zY0aP##B@gam2_S|Cq%h3h(YC{xFJWNec{`=6HpoC>A2g^q_hVJ%P98uL~UL2BJu6p zbo(|$rNedN!lr2Ju zdl7tbG*9)GuN&GwdCcz`O&2~}4V3FW5)*Ovj?qPIBtEwyHT&5KVx(rD}1P z5EQlDM%po4n!5scwFf{U#U~oXN1*yf@-ubYJtAl0^B1>o>yxMt6kz!b=r>=5hSQIt zw&2wiUNAt!5k~7Y#7B5^9yq47GEq<8b+!Mt$0`iv?WQ|3@d>~S?!Z;R;O_!N>#*z| zR+)xF7nxJ98hWApe70x%fyHg0xu@_2I+~l|{*MQw3xEk%^^TU5twO>qP$0akzC!_8 z_xCKYz#RQwf7}X31NBEwKgob?FdM#7;(Gz&o6}gAr)QZL!HnJfu=R+p%n5T^0?jhF1?cAr*>Th0@TZZcc1_1!pR2ci(fv!-v3nv_q~^D6-> z+u``JargUudqzSX>KIi6}KS#|j2=_*qbS$9WYC(rZE!yq_H%xeHv`51< z{9U#wo>2vPP#2AGDL~;#*&*m&aE+k}orJ;feEQI~qfccvL7NY=e921EuBWomodI8Vt=Fe0e^bv&&kXra%Rj|9*DgRL+k&n~ z2U3}X9wT+%Z5Pa~tF$0_B7pXywikWB|6HpUw8)}$`=kw|=JN5yi`MBhAvB6 zp?5%rF^HR{kT#@Zh0e!x4yjAsIPB2^mBNPQSN@~jolT-D5h*)NlQWLl`5cws+w%5Fx9PJPH*AI|~~SW1s$tIjsQ3V!L|~s6PQpYt-woSedp_5Q$h^WE;T^ zwqdct`@7-c>srExd`P^r`8~v|%xqHG3mNJsdP6G3@?_jWw@g$6J|Yp`FF~}Z{r=%kUv9-dQI>Q zJ$?HtP&TBGNyR5@nvWO;GZgsmZWQXA>~{{FxCY1d27Oiz?q6BO@huJ;cJCxAd*DJ8 zflsG-wh``U+g^DSa8&p&agFD8+!?#@HF3GEC!YG(&U4 zKj>crPKH$;`0ngXOKy7Ulm+qk3WOvFA1%e-dt!jsRE={$G)+7V;PKf1sreTLg2ChA z0B?Ln)qq>$ptNC59v0UBH|PC7DqM<|`0kaO(|d5m+mCO-JRTZ09!xd};MlcwVOQrg z2G+sJhhK3qh6&LmiD}7eO9ET0lA{$*?CKsHQCspCc6`izDha`L1jB2y;RH5lY1@^ZvzpGMCY40m?@i>q?gv@ zcz~QSrMa>^7%x%ayt)MaRox^pfLDga3UySgZ)QhpAsAv%*6O?8Kj(i}BSIf9B|=|# zr|+&jA0OVNNf^D-r1Ji80oQ(?j1TWz?_WNB*Es!ElV%crGvuFV0Ajy?HGl;ap@8#0 z%Swi3h^GPJ#iDuLFV2DH^2nbiWI;9GI>uU8`|%Ou8jC99s$t00l4U_=OzGeEfon4k z?T`Um`AL~fn9ogsuDvk~%5;SvsDXn)c5Q9!wf!Y$5s9R|5$2|m+3sSuyY40#m&$(V zGPh&L0pbd2kfz&vfKVf<1Z$pb+nQlKhY^DmnZG`D(pqttzV8+6nVekD>u&PQ@0_h!yhy+3&Rh5~GG5(f zI=#Qq0DC4=G21f7W*FfzCMIV@KJVEocf>pk9bCFz>`VJ^L|-q90au~lg2>fF9CXl1 zzu_aP0m@58{Sq$Nd~V)O=y$ABoTwIzoz(}wiJb|r+ld>@L6!Ij6$ep?BhX?z1Yf7u zp32VC#kqLjboltWfx}sZ@yTY+nGiU#upd^ruVzeTeEMG8-S77+~N^G+&6P6vt#nTgt?`Gf8T?n~Z+i+77<+qBb% z$;4q__Cxb2;>C!sBX=gJbHvkZK1Wn93QFru*+{b}S}D1iLB$8K8j3azEz$8p-lps;s7a z1hM?-bX$aj*+CS(+f_Wuy4PAn8CxWajgTKBrhUh?bljIig+U}G)PTzS@^n6iUImEhkMXeLmIjgzpWK)qaF zS0#6cH_ME<#uUjgmPA2hG|>O&!@1s4smr|%i}K`eVW8`FV?N~PYp}e7lXy^R(Y>j) zGLlC!};ddM5jxEiF4Q zIG$LG;%{c{s{rluucF3`3If&j4n}ia<84<6!%QlOTh2DHrReOj=xf#@oa2@C_m9ph zLDd3?djLj*L9(ULj>UQuO5<5IUB!)s%#X^!LHDh&z>k2IwlW4sowFR3!$m|bQU$8{0{S7gB_BiUg-WnTTJ0b%cb zcRAOwPwTHE|5#Mhbil^6bL+U2(UgKntP2@6ca7gAJ5r&$v9Ro|E<*m*=H7o)e)Zz{ z13XOrELR&@42+ii2Y5~RmQ zsuyZ09MQdO*U){Z`~l=xe5qwVWW#;y%-P}QTdnSnSFGfclX!Q(+x7>(i$dZ^K!TQ| z+rb~o7`h<2mI%7?Y1=dPu$`1)en)xo0dzDmLSt3N9L!{B=k+M$``D`9bP;E&g2Eu# zE6>Hn$GAgEo1ChmsVRHwB8jRoc{SQxvsj6=hYI`BGTA+{Ix@)=T($)nX*-2<)rIXu zJMno5RhY|NuIYxL&GzSa<@I^_pR<2bD8{@h$hfQj^o4gTX9ozG#}eV6%L%oZ0*13l zk3E{H$!SIezN&Ujj(aA)5c~vp=;XGd*U^jbS*Ml8b_J%J)V)|G$9AnF>tt{c=^ZEU zJko^5(1n^k&m@r5|JdT#tV2o$&>K6SdosGkBmDTNO@Zk-lQ{GdinEb5ti{HNS%$7- z>HrcohUMb%q0&~!4KL43i@q}E0Dh~%jDIh8Q7_ZZGAVGRJ8Mrkt08xp{**Ha%R?=_ z^`*`beAA7i$Lrb`+v2FVkH_UqL=fRUL_Ccu?L#**)(mI?=Vh~uHNg1(Q@GEmU=wn$ zH(K@&Z;!Cb&!YO>U`Kxc;wajcshd=HszPmCiSS!rdP_S4i5WWpZS0s162K_-+)=!! zqKIt>y6TcI2fy>_WPQKs8EI%7gb*|=lh)-*eUC6X6Ea^cQvpxzcZ1sK)n<)Lj1lcK z6>|B{=>hh%b({>7-{b-*h_)^oGe>07`Nt(Vp^Qb;zn=R!? z-#TY0(C~b`DZr)&kHr`iKX4pOm6xFiH5b6zHii`V1p0mxssm(5RoYef?GN`q#ZR7n z9D9rPIRf*36aJ=-PKex-t>sOXxUCiUaI(_2BkiXk%~z@Wg_CPV!XMfCJ5L3)f$|4x zV~;sFvAK;s0!b>ZeV1DU2TAd6f|^yu;?iaj>O!f2DHuj2oG7+JUGZpMJib8JjJb0T zkFaE$Ei(G2m>*z46tAL85XyI#Bf9)8H&V=him`HQk+75_+ie;9Nxy1V0VtrIhvI2I zCNu2=hg&|@-DGMiX+Qk^{<05I{7g$eQHEfGAG1^+>&UqN&Vv^tEsPP6{9VWgDwFCC{4Q%jy0aKwUuJ=Lh7}FwNQ(%{jyy`9MqY zM%;3qZpT>_6I-VJ6s6Q|NHZOJo5iRM3cow~UNdn*(uoM#p#g&%W*CB1Eh zc5dq{s!v32YJ?D5DL|b%rH?0sfl~&6Do?luIIjBV%dqpqW6+%?%Y1`5wS#vhqfjR? zq2mt>?Fd%LD(P0Bt3Un|a269}YJvsjGuq33d%hpALEFuq@2j$mKT&?ZE)mdDo%XJC zRQlCJB&@rt{*C(U-Q#!Vx+3lJ^c;BJcf0fNw&Jp8k3WcdN><$(2lah3vvdIP_6#R3 zOZDEb#c|@o=lK;Mx$yh5fMpJ6GAA6#_NrZ>GuwrakpfX{plpS>AOT*NSN%z;tjV?lNd$+1gMM*;~n&X$`>IPEz#6 zq*0{e{rGRNs~whC<*Fvi?3fHka|wMXN|o_?d1FaDUBy?%t1w5OnOjtVSMAJCvz58# zNGwQtafERPs;oCn{x)e@@Tl9j$q-&dTKsJ;U6P@nC*a-@!^vaf2)nZh2Z6Ex zH)em8#d?wU?@7#D_l0}4F!xxdWi9=?3TKUXy%8Za<7z2fm4Pw791Q9JC z7s`W%WRiuOl5t&wMRU>?lhe-bN4eeeV8;9m=Jz)uxnVFR=aG7^l-RSYRPd=hW;q1o z`#(rnRHflEZ<)$eU4w?z%y{xHywaNm7(hd6xn4wdLm#=!F(Vix*$6#J#4J;Q2HEgD zGk9CSDYHf@qIoB!F<~Xr0eqs{!FpfYL^Ljo#pq5^zbOc#;4#`P4$kvu2~j(<`~Qv- z!GVw8S^jgh*aG}aWl~R#CEBW8JfX7O_XckM`^>MpU31%}#ziGoQ6&M){BV!^tJKqE zy;ED;!)IN1&82>dW3|9$cc~3P)N4_&dAus^Iw|2DP&U!DmzQl%c_NwmJvu(<2M3Ys zBv*u$r)%#0#Sy8hhz)6XiOsoiRbQ^~uc)Jt&7cdE;m>7|S8+?r@$;IO=e?hytHXJS zg1c9A8edcH5=)jj)=5xm(|?5Eoyhk=0+N$Xs=^kEKj5CH;P6y)IrF?Xzb z^wbh3{jLC}2RnElf1272(#OPa=UOx=Lbl%|aRacVxB|`~h5qe!sWkZEE+gAP{n!bD zSznG7yjt+Qkm%GlyG+29;* z+D&t!-bZ%%#`QFm8-!Q4yBvacfN#{UMa+;r$GwW($wX~UxrNW9zgJ(g2E{y-a8{*7 zcY9}qk{#a3Vz=dD`aDSGAX?z>KT-1i#+|H_+dVFmI$)z9`saB{ZW5pOd^7RuV`uNv zwttbpZ*wHt@UlWT&{7Pa$BX z{v`LH_l4GEr$3V`nYi{i>UnrY;i_R`1V4alLIP`V32+oOre8J%6sT5AKaEqRgvkZm zK07PCho*(2mUUQ)P-zp1cvO(Xp3D=?pt5L5TAWD&z;W+%J+5UfOO#pC!Z$3KBan6PGrf1(@BX5MNp$(mx~9?g@#_o zGssABH-(DtbbIT49@qQenyU+?r#{Kgyu}9?Ja7=BIBH16l;!NT7NwIA@e#J~eskP~ z2t|PEq@ncFV6?Nn_MhPIb?Iq)bSiCJq50#(#n`{vzgjNtCpFGA`RsmyyXXnpIcC2C z-ZgW2J~!1{q4Z?z4imsK#K7c(=0P&>{cU`b{j{A7Q&5iyd96O?m8eKMej@{iixd=% zQ;4k%0*c6h6JcSl{1mR3yDnW!pl)#89;%-LlgXEB(YHG#den-yk=m;a_>aBZHQgz=fwNMQnK`LXk) zSg@x;$8^ZTx!7aO@Y8T>VsEdn5}Ks-1_r)#r6b_s!@w_DJkD z=9c3RKvkL!hr;)d&iE-psDYd>!B4qRT!R`nO*TzKTgms|6k9pF+n8C&fF)ILO#D!r zxuvR&FtUAK7g^%}MsolZ#<2Xb>)QE8JNV88OphwW;-IuZi-ADzsG{oTCkPw8C>$%D z-UCUfxd2smkLDv1Gi6T?VBDh7jXCFduH7?3JW&w?lD#18c#M^Uev&&KjAtVQ2^lk2 zGA@#cvmZr=hlJZ$9Z+}RP_^qS6Qash_9I@gdbWBi_7c#rt+7p=t7f_y^y9la% z<)ogn)X&v#9OQ^%US!Jn9if-q{Nwh>>h>-6(XY-)E)a}qa(%!H9xy!}S&F@2aWR}~ zq#(H~{?O|0QVT$m?DdIMMS>Bmt9ug&82rvxGj3Zygo{gJ^>9mt*QvTaQrn-hhXi(z zeq;UTlsV415otPb4a219A#)%W^W=8WHjRU{q0H(8$$byMJeipYxdn@z-;ZE|QOK$N zjx$@p1wH?|!1eZ-XEV~~W-?&~;qz}i?M+;7j{<>0Y%^eDVDP6^$=Le)nh!xu_3cwD zPrZoZwhRxul+|>m%NLVY=F2k1+@^6WS_#kl9^*}9`{fa$LzZiQn|Dl45M@7j$hkc2 z2JhMTI0mnzf@K*LWiDRNsV8Tgn`%9wf<-}5f*)DC!!kcoJy*qJ0~VWyWlE~q6?q>s z(8#foUiksx3#WVDgH|BCe3K8*h+62B>9MfbISdxjd5h<+0^B-gx<|9dEnqu*k6l2X zH+NbOfAV!&?`y8*wqt=LW>w@{7W!UNb^niU$SNcMnbT>Va|~z1Y6Lo9#ELGcmQ9gQ z8aQMn_u)KpS!-gQTkjU#x^!X5cbo97Y-Hb?8W%7?;ES}KjKR77he}g=?Gt8m1{Py& z4ky*f1|v!$W8*%u8e@~INCQrCQ)#cVN8z@&DCD42?qH_X`f#jojtxH&24^dhR|u6Y z@Z;IzxzRgn4x+?Lm2vRY!8$)VqgJ0a7#hVZD6Cz%7omJZ{%P05vL>wGjcu0ww1_n5 za1YQo#FqD+x&jM_66xL;z|ZXlvVZ^OFaeSgIn{VKseIYP z3h&4iJUD6G%AuV+5YYkLIkZ6;U&Xb~OAT6~^iBS^I1q3wj12&dZO2b^ff*Y$u;%m> z&V-eAHugRF)$A<>D*ty1AGA?(N;)y-F9p_280Xbvr+B=9=}|&+qs^1%FNBYTb?WrT z+#xf{wRKDyA8#Yl9^Vt^re%})Vy7oeXY_6^B<8uV44f`{?ajoMMz1k913a@tM~2vO zOqj9vOAjzBaG^JrZw46Z)}5=1o$tb#h)rpNYhzMz{llDetq+Y zDGD%DckJ~wY$#MOUgQ&kT)`Z$)QfeR0Rf-oR~5~{N9i48+oGtqPkKtJuO4pt#zgcH zP6tr*2$1ehVg536>O$(82i3_9{HWCK8NGGd-qfu=Nv!@_nof#;_amV`6sS}0k;6qnl8&*$Dy zi~o9Ct)YHe0sxV%#Ux1LPXYqxf5$)3ik+8Mv+b1oGXw) z>?Ze%&TS5rKan9kd2Q3hs(+5QCBOD(JaIlMSNSgJQQN}{%v5REXDlxqD{@XTh5aqT z-Pdygod29*bHB9T@Hlekt(>~Z>a^9V;p%d4(msjzRWf<-Th~AMr&V|R*QD2XZ@fC? z={e>(R3uy0gSmgjoB%e?qJ6`hAgtaHLHxk?U<%eC<66>VVY~QrlRstUO7tpmrbg1k zt_yFk$urt<=BhePa;1j6)3wEJGx}z|lW0%D=;E<>rCR-hzyA6x=l=Z5R9~ds4cNF>EIw=w1-7D6U~)ITMO3 z@RVWMS3KJbZu3|$KTx`^#TQb3${5J8B18l57kNTswkwPBE@QUi;12M&x`-(446|gu z^f>w4k~n*cb6iAw|^jjUCmjMCgAxBXe6AYzyS;>ks`b%~Y{F_c3^>DT-7 z3n+6I%#=G)&Ao#O*-q)W0S>;EP#%saDAJ;a14$tUq)-z_ihF85cln8Wy1W|c2t?e{ z?t~?D1uHBfAvydWOQD768eoT@7ZMAulONa#Z%g3C;FH(eOu7oLYP11lJR!jmS5FyK z!{SYcKyT3a^9}MDyL%QLby!*?vdY;6`)b~nlrR#WXcW((9rQF_lxU-AC&XAhvuwn* zwSmH%Bs*_JP?%Hpz#C{-9N6w_1~7^HN<1J)6PJ({5_5`QL_F3%{}s^)Du8jl9CZjg zQ%@ZE3LBP|k%SsQfIe!p?+yl*wi*aI!^jRM2;`Yz{0`M>_7Hso8g3e7 zIK8>C_;f1KuOuTfui;F0GRN8^$Up;lSkTEZBRKd*WGF)WsaC1pQZkuWC>0eNH!R|t zurb>{$c%A5v6I+o+ERgp zN@y}7Dg{5t4P9s?L~=89aA*ufXKMXW1IY6%>X>h#AO)f*HB=@PPVroNBYNX!*^Y(f z;lcHm15`*1brPvtDHfxL3W2C^G4OCG;NWY+y1!6IIVp5&C1!4}sW*l4EVw@5Jzw6Lyxia$C*4@$HFry)FJd=eKJ40nx`pP4bs*2xw1-z_>@B%rK>+eZa4 zoKrgM1&veqW9c%XIOM)VX>9c_VPIfFR)ay|Ob2FaeTWVr9Yznu+JJ81ABdm?$|_B! zq=9uMpOD$3AH}oBQQH)rzG+zmHGSPLl}Sq4g=}ci+`kTi_QOs)JG{5-&4^TU!jFq(TNx~%Fzh$FzJpi3F_T9B9O6x*~x~3_RITc ze8YMEsM4*~2DH97C6FBq7QOmuKNLjUp5Zjdw!u;9evog`Ypo1|=E)ydcmfrsT4auD z50%h4QGvq1#h+@VExv-ue1O0qkOL z=b(JuR=MmQ+RjbhZM4}kzD^db0p5OpdHQ@ggk5hF`|%nE&T6;Z^QAbWx@mFw;(H6< znngWiJmIW^c0F8I>^DTFaHMRq$!t#FmW?-lRX)0|HvbT!Et+WJx_r`Uxjvw^iEDgH zJy}lPS@&Aso?d@<#vQ72T-mI(Xfp<0HOFY!mkbnpb|nKdjxT&2cy$yW0JGD;M2(FJ zU77EHJaS@~l4)i{VBda*l9lrZp+;(TDC7&Ddjn1xCO& zyrud&U2o=d;2clY%H(U-@5_xC8wN4=5;PMevFcGaPVz0bBb$)QeMafddgEyR6;@dt zE^{9af}ShEuWrqF06$9-Wjezm2j8^=qBBoZCr`YmfR)U-0`vEN2Tu%yLAg~wx=$A) zzZ26uyZC39-Z;VKKVz+&7F9jts_G9>_YZe#ikbN?1Ij(G6ApmqEn*EZts7jiUk;%s z#UT}oD*-*6D`g*5nl??*st?Ux5LLf@5o2)kcvRxfUWfQ7i6ue&2`rY^ngDB`q| zx|-%XyeuLMg90K7LKrHpOD6I(yXl>#72F@#Z@^{qe|{_HTIooC&uXnuNH;jfeWYDB z>_=u3njE|u)vH-s^k40?l`=Ng*n0@WHLIRGjumiqIyN}<+p>@|aND=XClu}b_I-nNo*s zopp(=L`Zw-46Eto&kxj7^fQGiGbJvsrzef`9r4cU&rXdq*9)1U>u>R1+Oq%RXWpfS zCSD=VtTfKf=0~ioTvDd(lkN}}&StjCh+HURuMQX70I1&wftg<2ZIru$o!qQq_J6Od z1^&9P-w>yx#XM6ltvhBshymi41+Ug(Gd|e&BMfU`Hm97*Y{kuCb;k<8Me@Ap*{bPwO0?mf?(B3=r=9AV@)QfKq!o^?BkvBkuGjmG^yB#x1-<)ZiJnd6Z9mKG37mtT;*Rc^aFwR= z`Xi62&w?B^ciSWL*a3a>7K`sjo}3#DPp#s0HT#}r9>kX?8-LofAn^v7De2}%2FWV# zTltxSaNaun@G5QKDr$nT6@Le5+uk^Y$Mt+c?4_Ec{Ga;peNt$2;O;3%97_d;^*aO` zXm(#WB&z-2EPrp5h5^{|E<6f!0*9jp=VAp`eF)D3%!FyOh&K{&=2RxjE6?nbct?B|LlRo7f5kh59Sa?V4_TWTqh3nZFymB0tPkCu(W?=VGWQaV$>Q=AyMm*k_i%?XnuM!R#1buM z4&}ehxYCk?oC`Zj9rmd@zKEX0Hr&VT{{HZ`mvJrh`3SuJj7Ye%;(z}apo+@0KM+Ns zW@GO}QkK^*d!?#aK~tNazpP3PcwM<&*s0dBuB(w{sbI9AkuxyrK5s!5w||Omi2{(i6+C`FCV-=jZXkX+!rgXZu|& z@N1AA?QNK}S?-v#?ftLXO>FARJ4Q2(-Th?(6Zfo0K{ZmfIDnPfhYB-~q-e>{@#}W0 z1@Nl*;x41bT168|IsCfX?ivEXR$ZPrUBYZm7hO@EU+iXNqnWs1HE!Z;OJ}Vvt~CCG zIpnsX{&RVQ>IlN@^rK3jI7b#wD?W%IDasso7Ph-sH-##tBet;+_TjNGUFmZ+B`$|~ z8$tmNH$r7LzKulAsJEPX`(SbkssfVf>^eJkjp;Pgip+D80S@ObGICBh;?^@vOlHMj zFtWJrDsVbnJ@cP7tJG8ks#m_^<;0@Va*jM;L>R6>_Tl5$RT;Vi)#XPlo3%CZvfiu< zVEg0&=nEzy3E(v1!`O=x0=$1-%Y?+@KZX_i69*CVm9K#HQ2Hsp;7K95svYRaa|!Cj zc&VK%lx}a|5KLr(S#g$h#YkhYd_=SJ%B>`YwEJ{z-uFGQL)mMiv}QNq)N7|Tv+2kd z*kL<)okMx+*Ch+;9rAu8Vb1{^-G=y`>nDmw>FU>S0B-k{oSg>7Vr>!zMiDCzg5ctx zlih=-9EXqmR-ZAnPta~w^k|5-y&o$mAH-TBsM1XPUPmQBWhj51lSV^h_9z_x(HHJ%J`yMy(d{xTB8bV4eM5-?kt1xI%9Y&cXtHq2OO)cu7C}@Sn zD7X0xAUM7_hB02!nzl?r#Xf~9v7FWrue0)S04(6yy0|l)VVl-BC0u@a#7#QTD%=*!Q*Ih;7)qj%z5S!cnY+YTjb&Q!HmxqhXf86{ITnbG|BT!wM`1Tyi-HU{8&3T?1XSD-E(BVX zLKB?licJEL-EyVyPhY$}e2d=~)?FBPpcFOE8*VTY;g#=y6=DjHi$1y|nc@NF;GUL9{!TvUm~1guVRfCAVMjy&JjpFZ#SD1zfk@odtv^r8MA9vTO@0 zJ=dfg_P9Vys{lT;ZO-C(9V73*eSF?ROb$;oPE!8q^Du3XOL7-24Lb^li8XR7!LMVa zs#ACn^&YIJ4(P&DhRv+fMU?I~%p014MSS1OA-_{gkntB^|GdO?0BxEU{<{*TTWI)90=QhQ+sbl`2yf3yIU6?f2 z#{BB$%l)cj)9jgc+3cF{gl2$zo{^9^;`D_nY>XMK8&E^vVLgl|1@)|JIPY7^>q%Iq zWXmKFgRmw)yaS)|*+-#5BbJ`ehU5J-Cf|sVcOZPzhXI~a;!_%D8v!>Y42cF zT`Rp;WwLoIODrUJiO5?T;MOF79 zgilYy)PE7!gW`^xXI6aitqOV9|ZS#{QG=(ck)F#ht9L-pW>PlXpt8Mm7)6>T@#>kH0PR=;@%39+Rj)$m%YNTfS zhk-7H6WpM=en2X};X%iD>LT~GJ`6ye>A4O3aoOv;9zcN%$&9Y|Qy>m|iQ7g$&g@HP zIJ*t``V_&e9yZ3@3X!bC7Y-~hJ(P0y5yF*&rq5Rd64iKE9!W*!1Pd?gYPmINjhjLG z`N@~_{C6ueKzU4swdPI(sKY5UM$4jc=h$p=Cx)5Fv~Bscd(qz#&LS7SEoT6g0m_h@ zz-04-(nYzLh}~`c=%=$UX(k=vlT(_yXDWM=?@EOdFm;`%x!h9_g$yh9DFjG6Xqju$ z`H^T#=H!G8uKh^LK?jM^?WQ(tMBl1W{A(y2^~2olQRVk=CiRq{W|B+VbL`nhC!2ef zW^Ct}Grjl8O&dI>R*1`M>|%( z0In|`$juPAmW9T4jU#8Dn87giMv3bX-{lfZT`tG7%g#{|G!8>we%R4!5+K=E@!{jY zNOWOON$a%&r=8dh(;1xAp03BRsxYEAH}UF$5Kio6vY!mKWb1C4fA9e;8nny;X(wSl zldSbIbNh|=3S{<1?j!UWLcv4#Tj>vAdhLs{`Rdb8w~-53Ub>30a5NF_Kh=(3NV9#r zVH+ZUDEzgcVzT0Zma)T@VTDuYDd6vF+=RI_)B7p<#?NOBkXT1SmcrJGpAOR-ZgxG{ zi6euZm+jrq?{!ujRw)Wll*X{f0=DAk!Ss4Ex9y{B{4#p!wXU{MWN-M1ZqG)vpsjqP zZ$+-9oVPzj$C3YlUw&R?{svV~vUZ?qk!dg})-XuE;{p2#GB2n!@Q??*gu8g9clr*? z^UF_vzB!l!Z?+(}1Uyc2*48O=J{<2BmVs+;=JU@$9#)$1x?T@JfHw}?Mx%|-&9754 zlE_Mu(R1!P!fgP$Y3x1=oOYd5j^OCt>pctKg*#>~*h^5hQ)>-tE8h>f{l%$Ff}s8^90GcLmQ zGfnzgA+x^F>BA@i`p>s;z-$}qY4F#^Cb{t{Bs>fZ{iEyXOeO(W>V)D=Ntzc{VgyLE zakuHI`8_v$CWzrd)wXzM4B21V`+-Mt1T*fEB=skiy&Ya_2t7Zl%y}iIO!iQQfr>w|d~BzjcpiTKC9s+AB^l>(>2|n8o#j{Qr)pg?A3EG zn4JDgWt+}PpemBMFF@|0mdoYvk*xMsbCu@Sh;(*-vti1r^t)J!`M^1LR2^PWbFKdw z+#pS@@h>d(-`>6ys^6D{-GlZPHBA^zq^vM0H}GOQcshn17^zKzgU#HsX@Ac)D-pVo zfBh-c@6o#c-CFOD^}@j)Znh&jnc~X#akHkj)8o#H2GW zW=(beU|srovnTOBH|^*2A>)?oVJbIl>T4}{#=7irNflxBt(eKXDJC-OxI#oRuYj;D zAL4UGeeASRR`9%ext@Ez-8l`)_yzU%IJJNG8l z<%6}3?k!op6&H|4aV!%RIF&5l@aiY}Fx;%+LrPdwpd-{7fJ|yv>5Fo7rXzf?Ap7;< zd%vGlz(QJ-ElnYIWnC*NUdHh7+sqNO(iN@Fa=XFcGiX!Q>S4J0P-JAs`$xVEm{(Ji zO>EIc-N;IJCWnW&v)Gz2{qB|{$29X_W^f-KGfP^%MD7$MorU7Htn-ip?Ul*>4+_c` z8AKFCn3u=L)avgSon?*ny8oFZK)-=k|2H-8E1Q@E5j01@_g}kA0h3~o^&vRff#@cj z%)nq&@fx5niZ}*P3|58+Xo@D@4g3UTr2+8qaPa-_q}z>z-6q$d>`wD+WLK?iEOwe2`wb?<>D>I^R zN2q}3-p)6|sJA1)^X-P{Xf1noc|qs=c&+>GuiWvk?{+=vZ^}Ocf2kM-9n{S;+Zvj$ z;*S@;W&-W^-gR#tGGyc$_nUwJI+@6!AD zG*^fB&{$|XWUGIW0`usIw1H~O2AP>AMxx-2f3i#K){j4NcsdsiQ-G_fqTht`3$Nwg7JD!9=fn( z0JSmt@uf!f9O?}N$>|NF7sef$Y~f~sX{E`tZhhEjeC~pLt(soD3FKWrN8~E5=z4M{ z`h9PwoznB-pHXf^gAYXnKxWXQ!-3C$EQJJo3lOH5f`RdIp5e zN*N9OJgaZfYtV77jV9oTR?+~>0WGd>tIDP^<`M1*%?hfXvn>TohVcMC4bev{cgfV(P2 z*BldpPJcY?IMCi__pNnNMz*Ial_QVxbHPDIGHr#An)fa*EuAvfLTc)HW$P!g*_L-j zh56=}`(nog&8g?frR{&d*tc`1>J`!Y7`JV+H2?iDZSV zzfCgSPmZD{1nS!hqj{2xx;CevvOkrve9_jtn$?2ugp0WkTbNRMYZZxgqeY7rw0c?2 z9;E&34qyD?ZFwH?lHr;@w5HK~PYs^-YVR6Th%T?;$Y&@1>@OW0SWM)-04VI@hRMc( z4_1G9?v$Zo^RP%ShP;lc+X_6oz=pps=un{I0$e7*;#yHeq#W|GiTY?Fv9De@dh7^%g^9eMt1OgOe0(a%0XVdML)}!ZTq*Cr@iH; zo`PJhZ)XA9ZKZvOZ@cqt22Wu9{h44p+seU9+GHr*+6^&P_8NOiT}sY4Up?7sZqA0+ zTkXyaHVCK3RlJm!?tZ4w6tpvcN8ZNA87}x!^#}S=^y4ca8s?!%HmT4i7bA_=`z!Gp zd;h2>!-1MQfk}nj0e#x*M&SzUr-=J;&52O8jmPTy_92E+fEI!NECq(t^p)xGS!L4YFLc+3?M zjDm+dK_lpAx~?FWNh~?<8hWakxGsVaGEOttIyw%L*RJEB+{9(Wr?Kki6@;h&KdC|H z&B>McnXE0x@DdA5hf=ERBQ4^_Pzh&2W&h|#B|x)|zk=~sXy4+KWz$jUtE@JMx0PQ4Q-g4W;M4}1eCTj>EXe4<`RBwfC2I7fi$Qwe3uP`^rZI<%FXoQggp?i zG^QherJ7acPzBi&k13+4`)gbG&hfLPNPDuyJt?|Z#tR{&x!!Ky^NW>ijF-V^E#k|5ayi z*d2r7v)3f_<Ih~E40 zRbZX)d~8f^;BB-_gr_zbW*N7!a!|kab>AGrK?9V#gX6*%#ir~(KozR$=@9Dp9aLDd z1JM5O(oZ>8zvjmuc0cPTE*N~3VhQ%%h0X(~G%_wrYNNW4R^Lbt67>Bim;X{ba5(sM zlEOD_tt5}4<3*?y29P#t4Kjm@Oa2v4Mbfi+w^FnAhPJV@$2OC#e*?xfY-laYKDy|L z|Hl+Y4*=3bu8e$#3=a7LO{HZ2q=vHZp10owP2_>iqb{h?~S_-KH;LYqI}T2e?EiP7N@YW`bkHA&$B0|7T~IsmNYpi>^I` z@c%Ip>D?Jdeyb03vq5@NTBd&%lIb+mqWNFH5fqdDK!lR?JLkk6Ze-!wZ=j}bj;6*< z)@jM&)En>w-1vCR-nM}|1MmqI)BRhrngahh0i7SRFAJYXC z843uwlxyj2SyduoIc=Q-M_RYM)NfAhSxO~8Nz@?@?^)c29<#mPV;$T>K=z6u;rxvq z_ux&n|M^n10U7|ovTvXPM6FrgewNlcakXvV}-O`91CK-Y7n&*g zJT!{)Cn&r$%ER-sqoGuwdp%HN*p&ReOfDE>C^^3D0a4;IwrM< zPp_t!7t>JCdt!dczWF5|jG1)3t8q>2bZuZ!U4Wuck1(qk^b0Hr>xxeb!{i1=NNHWr zz|Aa*|9lZpmt!a*O)ZBHr20%G*Np+aJWMM${4ASX^Iy$~%n#sJ$yPnX|1gu2Z-`0v zqbJOI==v6P75-;ro@U~9WqyH;cRjJaaU^^VYbh2b!Lnsm1Zad(XdAK8wnEO8Jx5eb zc7xqw?&7tuZp(KTmZcyZzQ1=bNhsBWwN?r+KHi9p6EyYuox`TXn-e!&=(VRL22MMC zfJ^)B*v0WrK}33bn@=1RhEj_PMX)s_ z6zDv}@!X4}R3)d5r#b^{46s zVxv|2s^FxMB*08v!Q7T4>CCl2uXb^~pEfoJ;&j_FAq4#yu(6~f7)f`LK!6EmlvD0N zy)?B5jg>d*v_Bzz3%}lQM^eSPX=7##6N%Gu)`X*>N|X^PN|66d#Y6r?MMg`sHOqOH z4FXH|uC-fskRLo?=Rb%KuCMk9N-57>oT`KDV@~O>pn_Qc10>+ZM zg@0wouaRQou>mx-wR>p6>sI}B6c@7;*-9?DR^+G%eLPR^Trc%nzBzS-qQmd^=DlVATT>B?HY*(Nex;Oq;o55`~htHUEjJR1$AFUW-OTZMry{H8clXzKKbn)PY2m;$7sy3K!-J>85zF1sHuE z^cB1@@&x2N3#PeniCw5Ybml7w5?DL$#NX2g0Cw1Bc1 zeGqqQIfNqPm3830;yUjV&}ft`R$zM4#}s@J9?;)ESWf8|klZO?fvBCyYuc zWfr|_M6|S(R~S)3ZpU|2B!OQE#nno}q#o`IDOu{&rJ}0FB7s?0g8g`7kCdqTj!X$z zL_q<0f}9kh#8r1g#u2P`^ZTKDU*lTD$L7!eO;D#)d)b7zosEy}8?)C(=?Vbnt+sxT zIP;jk7c!Zj6u@6j=}ITdad1=oy@42%eY`MRt`3fEiNlwuw;5+dh8_vGhiM5D2=%jD z&w}MNUX3DG%q9dfZ>spqJsL@ux`cm159I1MoinOEk<+jRku=^3k-*72Z*^zG56;#g zSTj@4yAw+dLf_KkYvTBpy>@#zy@M=y5)=|JV?Ak-LqMfj{@&YaIN`*WRbb*`7QyT* z?IBb?_4-UD~wFs zPDv`B3&3=lJd@rcBu)r_Vl(7gVQW7|0T%{?_Y~{0g9~Rt1M)bdAdiDDfociS4Yf;- z5GGB8&+MX2L=_tM)r%yI!~s?_3~f6i(@9|Sdhf2yhLV~XnJfAso*SZx<+{r*oHI|( zU)pikL$lf1Uw=sN+BztX>Zu8wFb~@&2#WgvQ2t9$h%`FAlq!!U8!XXDwPa|K#2NgY zHg9={xvRGYpBrQdET|sUpdQNhR7FxDefhBZ*F)K!l1SMezb|Y&Q;!-oxor!u?o>EXnYVb_66HKO08dk+R@KRXfaDZ(>`b8; zy=Vx!M4{yl6m-=Lpw~KC>_0W9yOR3eK5;#~AcLxKJ9lz{k(%P@%cO8Sk7<~y@st`x zm*7MZ{49zkJTudw!CYX)~tV;?~EQ1hCHVg)A56}w}{A`NYMF!a{ zh6f%M`H51D$ROl@dOn{+9q?G?H3_DSVz0ieq+2@D9n)$ek+@gSc><;IL^wbWM{9n3 z5;Sss8Mi3jsN$D-Fe{+?q^Stwnj01Wtw2AeY5YXNQGxhGkutZAevb$NH3h;hE?=(JZfXl!8#)O z*23dXe4l|K$mNN@Ol7mBTw&iA#gb-Q(3{Z2QdU+htQFWI9(Co2f#s6tzNeK=sa#jA zkxZ5}sanYT3#6@!-BppqNM8p3qpgeGC6SBW|E;Zy-MBYN@u0-kTR=nt@slv~M@+0> zMf#08!g$6;G-l}TW(4$5w>{)gcQ51+x>PbGi)=jKHzF#Cp8@rt;7_NW-$e|^z5RMlJWU=(C>wqV0y{#qaWMD0r+Uw7p<=Dr-i5P~R3%D0Z%0gw_YE!xV`c zPZ)`+OcI$uhe7H}C9J=6$tn>LNtbA{*%cI0`!C+Bd!W-4 zLwvmawH^FO8-YN7mZds15fEVihi+lt&qS2b!p9o&rH0rz60Bs*tRw}PudzpwCDE0E zTjlK|ZDCVvk=ZYik}LkR7fOf~!-*N(l|m&`4JyjlQ!z6z?3$gS2eFr;jSWdT^FMt- zECo>XAfEikOQQB5n!FyeI*a>|-xNH(2vwI{co*N%&vJ~Qr?mRoL2ubmmcjLWS-}Z| zr9};k2nGw2!GcF^A`{wH^htyZi?}A=0tM7U0=|EsSNT9bL^gr1#u%h(vQU3j4S})i z6_r%m3m)+Nje))#l`%b=$Ed;z0FTSkBVQJ$s_{u-4b4SqVIqFfMTk7XnI32lp5-O% ztn$3ksW)*YxFAv>q*b_?dE(!2zZ4m!88Xwxg?v>(y}50q(6z-p6#KQs6iLnQW+Xq? zXMyAJ^+#}9;6ugdNw4dHv1_A|MBX7y+tdqvi0C9V)7UUD_gC=0UepXg1*NqPwR-!X zc*2>I-0*d-%|5MM2Hn6Bx`)-Xg?jENg;BA$ZMMtW=YZG_1MyvbedhHTXbY9#=|rJ# zut%Msltu1R-ODMT7lU1XN3XiczWv7{gxCC+?v0Sl`kx0rk z==D08D2L+ec35x}z=i8<+Y!lw8sw@-(#Sdgh+v9+i<2nJplp= zXJk%`$g`7FL#P-*{!4x^?wH!tT^4L7XO<)CE=ef>%y|s!+rx7_0$xIMXxiyE(ap?Y zfHoSo;^r)?#w;YI4D(eihCgnKPZghWhyVdaL4Q9*)*vmxt)W?8(Cd^R z9J8hl9ucT~loi!-L@Yl|Yr#+oon^vTRIaw!an?MHu>)esNwaz@Kx5?*bm7f`?dwAP zjn{jNU`is32K*#6EijSKgd*(%u5@Y*>>9G%ZErSH?4tmZBQs+4l1&ZR+q_Qglugmb zq|MRnp{}vChStFd6$nI4442X*iEu(+uHh>}MMBHaDA{o1A?VQ6HcPugs_+!V{3GQ} zi+{DtsKK8<9jYA#mtEA|DbwDyXJHXc$ncfz-0~QC4w|1A-MD9PLtR=TZ<=$!yZnF| zrb|13@#F%W8%ls}(ue}|CBU|y0>4m01^2a$Y!S6*C_-q4fqj*NGsRmKhyg{~N?~CC z_pHU=i!xMKzsZ=TdV?`i!q?!>4=eV>O%D0~*sWXfyg>ZZ*apWyg%%2hm0Y#`7_`Q%jhnIT)FYmAgUeO_wy}x?tBDOom zS$$4^;kzZ7dY#qod5QPuCuT4V;>&$6oKQ~8+NZ9&U+cI}MR>5Z7jCyx+OoC29hS(p zz6$V!4ziI4Niw65w7NMaz_Ls{ZSn{JT{orZcU17HvUGEml|Nz1 z_AE5RxV}osTHryz|EJqr+I!_+O8-0Z%D<9=ptn3+3V2N1ANCDFji_^8oKtd1W>80BZCW>Lquit7s;wA zP{LGR6*Sk!W^2ot``xI~nt+`3+3`LP#iu2%gK?W%?AGSDY9gLD_m`8qiHmAA?wN3Z55 zPoND=_zodNBGr}P; zq*Lf(7Uk}PZh923{I#-NrxeLkTS?uv(!BB{irb$b-wugO8R4jOBvIuiW;YI2>D|BV z_}z-5C19V*bHVCG%d$>7%~a$&XS1~uz(Q};0~Pniji&NE3ZHNWVllz6^V>A1=O?$? z!_HNvN{+qG`cfmn-q=!)L+r$0ydn=D!@Q5D`Z<~C0%RKCM9sIPW8B2JE-D*f5WlqI zE7Z&QV5x7|zOX*%a8jFEx8u9Nw=A%5`Wjb#&YPG^V)D+)gtMLfH5BQy@?2Swgv?rt z&D+>x4@vBjFYBQOy9UR=Ca>CDWOw7G=eQ=-Sa(sSzWwG z?&_jlgvy@SVRbBElR$mBdWh4rqTjDCfF?8W%Kt3?;6MW{=`b}E`vjaSK_WMge&I|-;jq&VK<7x{@n@P^+n^R3mV^D6T8Cx8J50JxCuD(XDs1nd5j&c3 zv=|jyJ9TGVPO~&;hzlD3ofjeajDG3E&q#!sifCP;B*W54<5%^hePnvpMJP zU*YZSu4^Q4qV(G|vN`kex&6~>d3Qf%z5P|y4JUF~@L}c4`U;jqTW8d!1~3yD8z0;Y z*oce`!v3b1{dS)zQ4Y3^;J$u7oHtbx&oQ6` zGLub~FNIs_es#J-gU%Ogyr9H?6krZLMn7Hd&F_Y^y4Aaf328OqE$Io zGaeOHNn!8mnXX*gqa$KBAot>+MK}&tOEvL%0QE%R(51K#m9(a(AQCkd#VOEw4EjEe zh&9O|sLKokqv3!&H9flDJxs0JjzFo@+@H}G)2$WD9gwa;}##z;wj>JSZEo5 zVi0)P;6XqySprhnC$Bn5B1cK!F$y^)4>zb|<}pTLi1Aj~xVY89c}eGU6l8qq{46Xz z&@vLgb3uvJdemO%EPMnUd!P6z;;kI%CLKYK22e=A4S}kN=+tIxX3$g+-F;GYrZ#Y~ zu>bG~QNMa8;hKt4ASEQ46+pCr+zqu=DJ0}OwgMtNg5#ugP+D*+S<$9-kqmBLXl8#{ zM2t=Mq`ABlJnYv2>va&s0v@%Km>FI|0zVlIWg93~K#m3AYWY|4%?J(_5;05x1W`y$ z@5>kjK@=#$zEr9xzS2aq!An?dO43NvfagZ0{ix!!iiqJ*?3ws6BMt|vAV=0$5WHzU zYC9k$W_se&loOLJbx~50a>*&gj<_XuACk{d!VWJQvr48GZ-xw)FGWrSFKRK63d){7 zi%g6J;Jh;3V}!X>slskEFv~sSGm=#6TBa-0|M-KA;WXe7o68{4fdYky`ztt`op24C zN;&GZ6OQFkk0MH|CnTGCJ_R&H)Y+<_WA?dGP&&R%Yte9`3HVS&7^JAeC>KaeFj#VZ zVklJd??G}1;&ICcWk)Ny?N)J)lc#dR19&Y+n(2nAPGfy%zq@Q&(_8%IEX0O`BsZb{ zo77eOaj8fqCKrhjpG?;W9V8t6Qcx0i9gBKLY&QF|8l23)g!<=gM7W?-J6E-lu}6G& zGPtcje?LBhhU}z^3a#pn34sNl*Mi*^143`GCofp6fn5hQ7RZRW4p*EO+k#P-6OZ`d z#x0f(f!JG=sE*M{oQtg^h2T>OKq7LIgl!YtK+{S;uFtw5#%0*^m znT;`meb3}SG+O&JDW^1#Au!$f&hs-68uL%z4)L|Cr1A)o}ObBMd#^)vA9m$Z( zgsg!!(V`7;=P=7mCQx;m|9*Xf4T{KJg+rX+snzgo-VUO3?$MAGwC>)Wip964NEc zzk0HxeTT*!jTJ1efMx9^Qq%+{L86iZuq+Y028`_Fd8=xZThcCHOf9CGZ<#SV-&!S{ps53As6iS&zlTU^IfRm?0H^`U7=LRz4F{-z~50miMa zal8#YET|f6SdgM*vUji~--l*m4|Yq{nOYmVsrQ6rV$+s^Y8e-hLL&C!xd%YNZxt=# z_X2A{Qs2^663bZ;f&x(oPSo;=umu^{BsaBJ%RK5+EZ<-uU~vg^syL--5VwjR@hLT0 zK~m2P@*oV&c7?T2ON4`h#r5yFtR--9ah-a^$0Y%cay=gBCcw74z8RP#U;p|i}(w(;VxwOVpT5S-4k{_ zJyLX=){z<3AXO?=Zx}1(~Wnj2jK>_yHTC(L;v%N zPWq!ezvUV)^zn;?wfz@1p7!{Hx1-vSpSI7>zJ_d^S@(u4M_=nyU(bP|V&Xk;YbqOW zPn7^cprW`qiS!5GLU#Df*M*xQ5|oqJ(h)@itCi-Dq;K1AucNo?*3|acKp!5y1=+;l z+v@LYqS6!{27;nY8h&WeCmy7I`$w5N*a87Zz$$U^B=7~`r%&SbfWRTX@*hcFDH_k! zrgBOo=OW#A179?wrYr|ciZ*_~eR}6PGdN=a(=}~(IODNk#ZE*gzj2tzHX~6Ph@}=j zTOqN%BLL2GcDkR0LuCDA#kyQ=LvMBWUKzk_EQfGn**ns^@mu>jJ}%+mnPIZLaZhOd zL1+O2|R;!HaJcr7`w)>h5$z#^;;6Erf|x~eL`&^+n1RmcKeh6 zO?kTrF2TN^neIsx>cmL`aM4|DTc6midwk=rzH3Tnb@{;X5-)Hbm-6Wd(sGB_b>~Bz zUyFafvH1D&Rph*~@k;d9uAfEheC~*l@@HbsithFD3*o>wp#bm+?tRtxD;M2!i_%v` zCN}PEWb?e6y7w}~sM(EM-^*n`%58nDdy74rcDWPeKX+2p)*xy{idPbF3Z)qn7|Jb< z^)Gk^=LDj^ijjdn{%#ZXFIIMi=U@U#NsGsV3fWspX#rgSkA1o`RT3z9llw33=#PcE z{tSIkP1=}Rov~Z7wsP)-gczOvYH6`&IWxLF{Ve+a9-5}kLA_V1?!9#O#j!{sIzV0| zx!XsahI8+n_Wh%MC!1jH*Sxk{8{qZmd}hsqu9#G~{b;}Q^4SA-_*dPoLWeWp3eDcL zehpU#bzDir6lp8b98RP8;~=7y^y2+xyu(DFFU6LjepT?`jl4P4o+GTa@#Etuq1BmW z)vV=X@MB$AZPIY|84v~9GiLX-9r1{*e<=Fxh^0Y7A#>F9y@_4skZFHR59TGI^UMAv zF%X62!D7j$(U^S!9pC3Eo<2$O&gDYIvR0uQP1o;vdfLw`0!F9AiLfjvhco>_+~?k1F{(*iODQxJ*PYeI)O=C*2yS1FN8LWeMmuOfO!O)Al)UWUUNY4C!s z0r#2)VmUu8(Aj&X4)-~H!R02UETm>#;9L61lOcfeSXit8tVJFygC>O#CyAPHR;)vc zWe}?>29A1*C0sH2N69Cd%;2zHtUk!@_Hfo&xG)j*LJE|8$&iezU;NM^ z6&e^J8T{{RNsz+sSvcBgfBbg+JINAq^*q}`#pWqNSEL+5)k`|ENo3h3(DgQF>t%gg zjSE*EJ*gLvX9Lx03kq#P5U$-zI)ZK%P;lln%6;x1BQrIMDG4e|S3vt4P?sZsuY^Sl zg4j-<`k|quC=;pC`GumTsY;c_O=FmNwpi%WM~a#*p|RpTSZTq_I#mySY*13+J?_{~HSAu~mUF9ixoc`OadOh=dlsV`5WX0f4%Tm5Sxrd5{E*0MTg4;0i8Z`&_l?GO$JcC(}5sdy*3*L5TVkF zEEF!2RboZSAgS(=4G0Y*=7Z>HkIx|?CjAtOVv{y}Nl{61!LsI5FuSo+YJD7vViR~X z-{6Q8sY5n_5Fqdq;I}Oxa@HF zzX`xvVz!hhLo9`bBI<~ZyOdC9TT-~;V1|O|ZTvCCPoPL{j1Gja+GVoxko`*m8|15| z_y)8U!(+rmef)w6w!(w{nck%wu1P?yz8x1>*eS^k&`XyM{2NANSEr0Xy_$~H8H+n) zE1;N*fA#$v=hODZW@+C2g__Z7yJ4DtJ&{4@Wdj!nVbW?wHzZeO|KPXpg5XuSGH8e# z@cenel4!y|dI)3u(AC5uERmoa0Lzuq6fF?*4P%OS`cUGx?oxuFQ)NoQ#?QDk2YHWJJ@88LzA7VM1=8#x!(j$`Sd>nq#BfG!J zup`S!&m<-}{U&Lluf$Ycst*u_M=%js7~-r!|Oz>SG@B@z$+DwEF?jA@RK_QBz zD85_x$OT8W8Wq=oiAH63)_(^Jv_j#cBdAUWS&gwW6iN*`8Fw^xT4>hQFog@&ZLAJZ zRRWI$a9g9B)V#= zHV!qkhg<%PB4!t%61=YR?>i$I%D&31^R`3)IDeeHM*!N(G7HXk&v&s_mi59vtqB?- z_{*3t3D>L$*?tIWY1$mfx-@1ppYs?le~izZao@GZCr(?}tpu^Qy~KLmWUDC$&OM(# zi(ltvELESS+ZYS^2RV-r-DGNxPNS^D#t8Aad_2FIbbj1qFN6>(%C2AefgT>PHcFZsE8i`amX_j9EEX<82%nnWud=|56J1a+;%TM`8YcEJ#GbgT>##bhGeh<>V zyjBH>B5wo=neDsdRq}MAI*I5gB2E-O`M;a-4fZtdB;1KG=4Fev7hvww)h%3t;G>d? zKkuzq7?ud%oj2aEP&bg#If*PX8uMEK-avbQ;G<@~{Kk;Tg)l8j2?O=gURQ!8D z?#evFgGH~;Yr2Jbd8?y|n~z3G>G*l;{K>W9GFy2?Vmu2lqQcWX_UUvHQ=9h~P#CVF z=bQPQ&m2gyK(*IOdML-3}>)Dh=$_pIPDo3c(Z2G z`7+a)X?Z{|+VIXWgUR~P7kjts&6-Ybh`(mQi$5#^OtOeP6v;B|w6PNpc}#5gJX7)F zwKEsc>ot7?_*feZ>M!Xl@GE*s)7TgLSh;)IOM3&S(oyU8CnxxI5jizmK}$_71Sx4G zP-2xE29w@~p0AvY1y}VWHoY0F>xl7%*W>0XUlIsUs=EmJ1FE-;AMXzroo_GIhnghEhO?gm9lOBIAf(4ZpVvwJIjCln+vDR}*f`keHSZ|X7tX;h<&_1O;a zty%_+!Jc-3TX|L{<8QnAx5amC^&O}OWsT#4{TXkIMTKRi`f#0{ilzxo>`|*4f#1`J zF)t?o-m9L)8_I|G#Psz6jg9*rJO!lcH@>O?#Wyb*r`kz4*=BbX z3kmeZzdIs!7iE0!QbiD7LHnhc)hCd69uJz_arAHM=&?2vX;JK%;alqt9|g_BCRx~LU4C?O&~yU_XLN<9R>-(T^85i?hYX&NN|_M-QD%y zyzlp&d+&eFG&H+2%v5z(P0LgDRDcQ;Jk%9W#!c+8T<04}Y0ldnU}Xhz#da|(r_r_QSR)^oiIv!6mKeUa|$ z7{kr@e8kF&z2Du7|MW%Osh{LlH-uF-UVK>>A|Z`YK9m$*Ec~jh( za;mdHXW&=!ks^75!m|U1t|V%+W_7YDc_b9^R)ES!r&TCfSY)f{hW9lWZDFDe6n2C}PBt)7j1DPuggCbHj!(OFVwcVa8NE|~ z*@iLdgEM4Ohg6*YE*z}FE8(MSfBPvL02$`hp08lh^Z*g-mv&#OOz!h+cXoDdua2=G zhRW;u*UXKCNR@Z8*e+Ddv1UwKx~sY1jBHV6W@`%`w$%-T2Zm>Gy1E6SR|x+t%%tVNqo7M3!~0LVNyFz) zx+ibZs}x-tGONm0s}Q;Z1)rfp4!{{IkePT{R??gpDUdf=v`bL1bv7%}{3QNaWFqKj z04nsWYOOo4Zc=enTf}2DD&?L1jW|ED%(5=)t=}y2KgEk0RVKIAKW5^W6QAJ6rm)XR8GsH)#q+WcCCEypJ^;!w zK06~HQC33OPWmmutw$j&xJ%kLuM?;zisNA86*y z?rTK`_gdl!xlcA8Z&a>QM1KC1vrv|9uc>-#2cZZ82i+XXKV5Nsfy6Cko4PU~tjnPV zf4}*|ryM?kPvI?i!^dtyrq{Qp3jj$iM_&GS)yAv@?V=E6t0pNWu+#S?Zg{yb!y5M$ zpj*2xnA^N^f6ss`Ctu#hOGa|3VYcSRrWQkYfh0yg<|7&JRlh6CT`0=!Fn!3iI!2&q zX(Ra}xM7|+>_lhPvI^hxwkhLF<&(tKb!@fbw)Kri62G37Uzuw{OXarWHqe?DqNyJN zAttal+ZI&c+UWHuz4Wm1~s zdGdLtp=-d7mf*|lE> zrHIXo%gr#wJ&0ZPoz245(#yOuz0ZRfnai7n$qT`vK|YJ433QV?9?1>w`@}=J?KBa@ z6-hc3CwV`>XsbuKOw5qpb2%e z?7-f>lE`2}+5hZOLzmKCyP=Sya&d68|7UZW8*I`jtqWdbgJ%I-8%RJI*Yzc^z+-Kg zBw#8-i3qS08xK9e&G&yZ6nubYC`jt;tLm={NN!;he;aVtZ0ErW>rKpVY=)j%DsPmB zU^)7Nuq_f!C8nzIm5QpYR%AN(F!E9QjKzzDfMYWu2M~LIZ^Z6|_}0rJt2bM@E92Ly zU8}Ar_3h~8#o&jBZn?5{?{IVWxBZye?Eq>}qNEi}19|zl?rjm^C-8K2DMr`1A}8YU z*5_1Nm61oA$e?;rQuM3~c;2{#5D0`80goqpQHYA)_r*ZFer6Tw%Bm0v!tT$2Xez&S zddlnD#UJ111{@|)R)Ht98l;=|P;Qh;fo&n$?$4wy#?e)lgsM^;v7EbIMOz`V!179L z^9KkH^S9MtGzqJ+ytoN(`>VEWB~>()t)gU6T|Iu4Uzy>Y`$gGM%JORrG3Xj6@WMB7 zpbRSN00dw2nV4*ZC--@Cxg|6KN8Zc4Rkosn4R^ccBFpJZQvseG5}g~uXUXK>TAp_x#xPZ(-$2Y=*5bE2`KQ;)>qoqzl@nLV%ayfg z%F|Ieezj3uz#oHlMKR!{v~`xbcgQ{iB9f2^lnRX+%kQNPc);3s;-RzL>Huq1Nn|->1d)-=h3p#(A$n`r4zzZMTk>JMm<`pL zeaX&B&~M$QOqC4uahZtAc5XWpXjZm!P#Rx!84z3%y0C+NbJB^}-#$`f6>(FRU}g&& znVJw*?v*As`UEUIda`Qc!}Xoz@OJLq-;^3sx+M@8ns6mHGf@BGb)>txE7{wiloL%uuZcf zu)G-j5vflT(W(2w7qc4p7*lms+5cTPJs@aBlh!q6NEqPGmG#2kix&)p1&y# z2q=sh-@6@$j}n5jpm@LBcKea1v6MXfUWMm$*w@)>p7i^C@@z}Y_epSR*H5<10v#>i z5&5niiHqLdvPh<%JdLX&({vMVt}ng$lCB1W$v@m)KfA@Mi8oxFenI||fGGByn2ZCz zMOTqr|9kbs%VF; zIdoY{lUpF=1`j8EJ>D|Kpm!&F__1eTM8m+CGPIau5L@IXR zsoFbWsV>{5p{y{XGDWFfRxYfsNq+KclEbe1J9hpmsyeXtc3xU))cN~fuZj<v ze=$ib5ruvYpDCkzH@zx}s7O}ulZaI`V}F(gO9Ms zBr`RY*13bZaH(F|+pQb!w{Q0C6VWE7#c*E7HOExc+OhVWF5=j}SuUZ;h=8cxQ%Qwj z0&IsSVDIx(QE5s?r?MG8qJr;SkwCZxFW;Q!t8ejBL?>X+;oZ+49ECgy@Njg{*&X&T zplpEZxAk&Ag&@+OASKBK(m*G&kz(!^*W6Hg!4E+}3EUoWGH8 z8-F$z=7yCF2xTq{B#09kQfwg%!9#5oz?eb80?!s3lY`0^XNfBG$Ytl?%3{^Z$+pJ( zR12UrAhm{@Hb>%2-GKjR!GZHH_XjfEF<(KcCrJR`1Dcc>efP8nC`fi8O{YK zfzHONtT&u$)ZB0Qa+A8kd1332`Jknzu5uHTxqa;isWjjq~7w z#KvZIn7X=b{IvALF)2CfP#>Q&`x9|s$yy!-|Fv*p%aeWTMhE;?n|4BPPh})@%;~v3 zduQbHG)pB7Ux#6JqM^goSCi0${V};ikSglL-+z(@&EM8CYWOB5d@xy({~+sCD%?-p z@_nMa;Iu4~Twh%m;a7<)mw7d#OEYIOsX$Xd)EV<4{m{{Aa3aV>yEkLx~ig|!#Z=0%^ zQ){`eL2#F!T=kw|Ubr=NxDi+;5fVaqtsBw3Wa@9eH}L5j&6=*%&JdGpbs?9_$UUta zf4ezhf6~-rzR(=&-bcOBoE*}CJS*9L-uuHG5iVKHd7$vhJuAb1iV#C+%Ux`cKPtkf~< zCx70V7=B%`_38TnD(#oj&WI~B!fh`0FUWYzbv@m>|bBsUfrZe0mF=qLUASxvKe5QFaiBQX5ZARQWESE$ zduI<39%EA_?rXb9az}2jUuBo#SlkVzC#IKklT|c_HWNkZ8V`8kStB1=wV#D2=WHLc zi|~f7)qC~{Ns2Ty3;FPEhJ?|xjds}Cl}_A2orXZoDEpyu#gO-#>movWsRKfj9Sfas z3ddC9S-0RVckTSuc;1QrsVzH>iMTZe2Gn(^8(|}GZBA5gE13}FAJ11Avs{9H8`{=Q zm^%9&>!$sHhGpTEjAVWSj_zIA?p(i`<9@n(kM`tRB%_h;C@vPuV^k45+j#~F>33*f z0HB=#+_2PGbe9!FM)}=As<^ZQ{#MD=#DZ4*B<)pAOUv(B&mZ{#IYuh?X#u&m<}Ieq ze}3N?K+fwrIJSN^_9+O-lWM3MdV7W1O*yJx(H{h=LMzF9FlFc#Qx6k@4`g|SuEeBy zN-tG7i$!nOAW*)pCbU=o-iS(kO2h67BgJKks>U%!XiqHwKJ)_3n z%j_1;<6P`C##@||%}mExB9$doK(#C*1^=3V)OkOE(=dcwnrwHH8TX|1vH1s}FWlorD?I3JkOp&=Uv@_T&94()|zO}*krrJM7H0mX|(j`owm5np#u-tM7SU&SDxWJ8MFcKwvv zfQC#HSJ}bhP7k)>AOsnc%(fjmYeUvLbWYq4@)%FUG?f$mi`y0T_&mRa^1YKUVp(tZ zN*J-+ci=pfNSzS0ZWAvNVyl~drxaXxN%hwi5}#Dccc_P_waY#rRXl3A*lw117!qu` zR}u?XNVP7uev+;~2LrP*7XP?HDiPK4G~HSEI@bOBGM9+6nGY|}Bv%&Gc{OZ7)6)T4 z&(rz6iT*`qIJ>%M7u6^yh-o(m1HtZZi23%%)*{buOE1u+$AvKEPF|6=!_o)3zXEp2 z=rO!PW*8KpR{dvlCW$I%mkbSkd3;sFD+e)6ciMem%T5{SLO&TxD}_3wS?|8K!qJgL zxAqMqfDQ_-rI83P`jg6y*R`$lL91O11gkN!X{&cK3hK&#_UaMZU(YR?{i<+MoN!h* ztk>vbVLmwf8zTwD;7|Er5>t9d ziQ|R*;wE71qiOvVKlfSbK~b`*4{jm%9j`Z6`c41F%}|jsxfkklv#?Oiv7K6$BD&kq z9}2J>WW&Xcx*>+AnS^{l`fM>z_35z3q|Hf)`H_<2kTgYvHH3zLn9Wj}h!1_F+2Pg1 z%m;)BHK!R(lh&}^=M=(=t!snZo6oa@u!mI_RBC_%hE^$Vs#IuzwQSK(G&r?wujA{Kc6<8J0Rj(*7Mr{T}@$-g}@T zLWDAWd2DqR4b9LNhe1B&0UoZ1!qz&j_pb%d*Lm;gLSncE7<@)p_W_kE9nfmE6^WNY{CIv1}5rqF2J4mJ}y z$gCVzeAu!GiwsS$`6v!@NiQQTunh$vr~Pk-Lg4R~-Zt3SSe3BuDZ^*jq%`2bKWHts z=Bu@4u)xa=#D4RWBF2+_mP9#c-SXbh=Ze1UZMc*-tVI_AMV%crrT|P@2tSa?PL^^w z?wtyZw&!CA*o%WjkCzn-JY&9`s=Ak#54~9uIlWF?ii+KSXny$jINLb3yE+tB_wJGM z_3m_MKlHSTC_L}>r9cJzyH6L+&v?AI2?hs7$|T@7zI&}#8OA4u8?3&CNlN$8j|mUG zxWjAr>~U?@dIaQEtQ6s!#nD{B3+Lm6cuj#ZU0f}oA2b9Nw9s)3HgR6&e;uJ3(aC_H z;;zF^$)Q7mYvEi@u-I|iKYoy4FV1v&sB^ta9jRPwHnItmBpjV_ zSk`^F%fuqT0(TQsWSj;ay0@~Q-n7vC9lK-wE;+r!y~H#-G=^yyvO^Jgg96$>TBG{Y z5)iQ{US4XcF4i6Gn z!14MI+mBul2pf|Hn&HJy-#QF~_wt6kX>`Q$YQM`g)E})=(WNj)^n&@bTY9hB_8q=R zr!^=SlQ9F1k|C|#{Zq+C8`_x5LmXdCb2>bHGT{h{gLy~1|6^*uykQ3)de%)c2mp1bQFkag3MGbzGg0|nh3^6$;AFIh; zssfW>#&{0&)ryOT%o@PoDji}03w^bw#EH2eVIqhGnwYqt=mE$j3rcoS$(fH|v3tS( z)Hs$$Rj)7Hna8V6_v-7*s;=`nS5Vngk<%7xemQQU8TVrq=;I+VT1{`z*6YgnoJW`K z7aD|4b^2>!@|Me>Ic~$I3nqz9ZOm>ZGksf+ri+K~!RY#Ox@BHu*e5gH=np8G!D#`z zN9}fMLB^186F3o5n~@K`z56w&6F3TQb6T%&?qq{5C`duebDomUysP@+zWR zzKNECe8*jDcNK)k%kjoprC+G4&ARRQltXnWhf$~T1Hvio-YfLIKyqAHLd{RhRNp_R zy9A>86gP&qDhf)duHgPaL!nGlE6S+n#^s zs5-2?^SD5S*-hx#`(+Ft5z1B zS0H)(AGveJ+>CYNUyw%(fhHP-DURVw5=b)hxWmdKMly4xY{lON5*22hSH1CY#&hkT z23~7>_Qb>e@0q(!!#Y$e)=&S@N<+MMP@Sq!Lraa`_D9I)k?Mpds;({Uju?Xz0+b{u zr!Sv&+V3cuJ`1I5fnuIr3G~~qfJp_Cbrb-XH9D7G6}yLsv^?sS!rCQ6ks0Q3$9<4Ff0q!o%v&@<0_+rq0>i}UCC3~AaTjKmp*p&@-p`;Vo9x+Jsarw!lRYetE zO`pDezX%N2RazO*g=6GLFjk7(p=|M-q+*Wf)cq!z!sf!bnZou_rBkj|@P)oEwSbSG zrl<$eGgw*UP!I6n5IfaWKFu?usni(4mlkcGeFEs9b#h3wKj=S$s ztFCBrM&lx(Eht%TRpluPmN+CRF`~BQ#7kA5&U{Z`luuA9{m+Yt2@h`Z42?1Tg!a_# z|FcW;AIZ*{i$liGq+oxgHrRj6f37|U~)-J(piEJ&@zLc~B*9GiN z|2%Z(B|JG}@(kxc#r+k(QmD$VYfWr*imHUWAGYImJKRx*3`caQAP#uUtigtCs;RkrB_$<07hVEW~@EHW4$}_yB`IU z>D(y~pXi|Q5`37?a#HbQx0l+v`!fICJ^f0lc5wF5-7hk?{tI-Jbz@>%~=-_A1CirAaA#!lBr$hjFJ)VdM zZ0IH73HJ1qUH

    Auulykt-)EP`gAEf;I=tiPow2Tbi7!C_+bJ7ZXjbeU;4k$rS#+a%N+WRw zlo>VF4~#cYj0vp8=jufegatAB*WC35scZ)DJW4FU|DWKQz;D-Z;?k$ZhHM_q#;Cl(bMt`o#}= z%<75{%zsIy2cUbP{hHLmh=`v_d^IE}A+ZkK_#*E*^ATUZW?`+iK%cs;0uu_L7V6M| zV!x3Dv7k)7hqp>!VZ88#UKrlEkhMp80 z3Ryq!x&zZ_Vgk#oSN8{ypd`)yff2^t_6G!vAWDmmZu(H%Jv^?yG>nsMCG%g1cdAmj zvBU^sTh2MWlWcnd6b~I$5&m0Wb|FL>S=AF(Kq1UA+n>^+@$#KLw{^0rT`6k6xr+uK zG&(deg5Z<*2x2Lt=4WiDWX?dkJU9UbA~>jO!Nyk<6u`Nx>_}*eAyliIpKFp8c3!F0 zX~zxp>y&nc;Sm+qBdm9$_#ZL6uf=cXeWQ;zVQVHy;0dLcZk&OJFjkVij)Ag~M;k!3 zfOSeudGwb3&HaHd1sEA6|OxnT%5`R2$uZ{$XHuhg$888!9k4?T4#hmA`%$HgCiIZ%oyJ+ z#zuhBO`8-zL%WC6z8=JKK~Si%L+~ zTb2I{tNqO){yiz2NDo&5(|cIc1Gxvx%Sa)@TBwTXf#$i3;4Hk5zzErV3+_c%XzYlx zO8I8|O#nL*!L!_`rAG|(E~`O*uV?Dk#DDW$(XAnqHMIlDs-TU+GVz?nS~fj=;ZsP) zcp)n`0s|~Gz<_dBC+vMQBHU#pwH7p-6RcCR_!iNi6e}!0$KumSDM4yxJyc^TUYeYB zz5o{Tu8st65cD)iIW~fqrqhY(zx2}o{=zbQ3Cxg?`}`7^mK6B4>^jYFO%eM>XG2K>^bM%_j}1^KONJ) z;yo@fd$Wub({@s?Wj|&p0s>i78!3A%_|hG9Cj3)prdZ8f@+Q7VNZc075or?*J<{;) zAQ9qNG1QH0l1mEBJb&%pwnUDQ$5s#Ns54SV1U>)7t#>^fhcJ*eno*%HVVfCDu} zbiEvWP!Niqh5Iw?xrVh<8zWp)yP&_U4oa`NZUXqc^&je|rOb%?ZQ-+@?SSJ=0l&6p zN;VCh8V~`peePL3_u1Z+furA&O{+QMN|jyepG^BB25}%uH030B_6KF2n;t!t?$Mcu zWUOP-(FN(@=wwmT+uvMmI^HScjZCouGcD5;?djDq?j+st{WBG1J-TSL}E?r2&X3#h5*} zGg$fZ-AkFj-?|rp?N1&YBwzWSWjgA;Xw=#4Q#k47q$<;yeUoJ(g^vF2sygS%)|7P&X?nr=MC;?@6zJ{iWl`PKcCX&i`KLIC4hmLucsfpGhA0q zv@fQdp%&x0sE}b+MZd&LVL{N?0dvB+$@+QQt|~>ezBWXT@0zsTt|GhKM&Gtvs%ma7 z#IU9&+tj7pF={7nrBDm?X#Nrz@+)aFRRpiJ1jXwpB;R!xkK|#DiTAoe3zY}GW4*L1 zro)uk>eRkoSvI1|2(YZG9$u82^%JjJy}=QSnLIfET=mp{3e(BRFf~q#c%c5 zuu*Dq*NPLGgaS6x5kjd3gcCv!U^DS-qk{ug=_pK52q2;qj|Gc7tilFO#@6{pns2Oj zKMRX|0DB47h1lBZjYSgM!QRYRzZ()Xp*Z1n^Y$pOFF5Qr#NaPfEGXwOt*9A-a;#hX zF4kK#s5Mq0Kpv|bAnz(Fvc~#|<^HEhdqwO2)1(v#Md|TMCkurpJ83aS+rTRK*miyE zHSPx3Oie6C+1G>dM6heg)Vp?;LWo=>A}gtPdTp1W!8SfLam+LZB5JAUp2>9GKU;{A z)=}VKt~@QTGgd@TT46@9I2R(?T$AnfOM7F%Th`Bvf)v7aEdfb1^y05ePudmLjp2!& z$;Gfgl%gO#k~#<>Mo>1m0&c7V`IB9|ZWN4oYtUlLY-A`NxyxuF#pAvwG7+@%7P>RO z0+Te5N~nKb-M21eO~IXd3!TxHwCB1AG9{d~_&zU#0W5wq;- z%rTKZs7VlokX8Iu#MnQlMPBD#Nks(}Ro*{9ucN7$^_d4EXd8o}Ib%B-lzrlP66~lu zhzz1%RDkToE36B>LLV}w{I*QS8X5X@%r_Ry-uFV(zt!(r7*d)KSG zdad4j)dbkexOnEAuwhFf^NevN_vJQ7pRpOj=waXSusl6$B5T>)Q6yrRmusq+3+rxd z;P|?Sy4o$8jdmC=R);|c|B#6B`vJu!HOv0@J%1LP?GDaDNa6r!l#JJ#j=Uy@2mcSc zePiXL=E25X#`L2t-P5;)(V-r{#D>-i$2HlOGEczn&qc3~_06aG{k$?i(GiSZ(-|gR z;ag$5$ND}^uWGdYDlwT`Vi+TF#CDG?&7;M|`XQNUAkoc|Mu2Hb4bxtB?O*Q8 z>Iaxj5A_`;HQCXFUB$Eqx27lOn~-i+bU~*fL(*bJOj?~bgTl=$7n?;UXg6}p-fa$b zEza2|V{Hf;dJUNy^goBWkF*8vmD^{2$d&18LfSK{6AzBA8eJ@10@SP8cG~Z>k};Pz z;xR*K;s+Z@s#@j)z?m8QRc)W$B2?Z#IsipJ`nGntHye`kX=j%(9Su^SNc^ZYC<;L}x;|oDu6>x0-bOK0~7qpe1DV z{p@~YZ!jdqHl$D(G*sk;)$RIRm-jE<_Erx<=U}&>LO!(P63x)y#CxQfGY`o9-OW zDf1oj)jm@1aJDh8=QQCX;uZuRR(rXk=FC3{t?{&4U+2o!T_0OO{f03a*RC=7-@^N= zeEKgGUlHCQy>=kSrY!`uwRN{NyDD_o;kO0mc-7lePs!D3>3S{GJV;AhwxkSS!3tIW z4uRo-s_J}UT~JzAQa61V7q+SpUhsau$7VpXSPI>yI+P?p_ei>+3mGAw0Xc zvz5e_(!MZXH{2<|G2_+Nq$u3-aPaIIJYZA5F;nRL8MJA>61%EjbHY2frU`y)%!|HV zL=bx5!pl97#@abh9^{*#gYb}oQ`4BtTHcO|qUpx>p#5%UX5$~+ zwxYSgaQaYd8W2L=s`*dA$dDlSmZzC$gLkp5>$rxPQTTz!Z#K3{BdJxc;2$<&Hbawn z^_fXGNWWb5?$Or09M?j^528@v9Xlk~pg$UxHT0`yybpXDAUaY4i#`b71fbHK5R96d z%pa8z+E+A|6!`x{+5Rg^+J8l%J-7EZJxp9xrc8qX6Cljt2o#Xvd`Hc`iPeq#5?}ezvhGQ1 zv$y9~Z8SfVbo#WZX621iS7il*-$mQrL0cFKWVgQker0$4iQ?HChAhCXk-MckaR2eQ zj*IJqA@*}RiR=B~2qH?b0I0nQ1YbPAb)c7j*arU;lu6aAtOF?Pg(b5{%r@b7+*JTC zns#hyE7_GO5fx}Dt-fjY&f7y)Hq)wdX-&qNjlxL{?N%rg?>dbdIqjObhi8rKZCabT z*xZ|&CTWk_I+gXtlg0Aw2;D1{Gjryfe2Z!~ocS&?9?>a;JVqzoUfiC%y;gkRjBb#h zdkgh&uunt1N+cxYTA$85sc-9s1CjDRU3BT|#&h+SWBEo_<7qShokv|E7n-XEiq_7AIa){VidK6QYQ8iU@SF~9~V&`3`VEs`35cT~t|A)s1vQ@Ee|G(gG zrJZbwPSN*kc7hNJ>eH3eiz^B5wS0}`%sedGH;8AOZxLSsCEPF#_%oI)PkXb2J<1qe z!edXO)@ucq-Px}avGMazk}Lgjo}R9G5Gy*9 z=s7vTZc{=5iY}@(k*6JZ(HJGn)0i?mR3yE{{GHKR5b1glOM{X37P!D6RA+D&Ax@It z#^3`L^DhaLWPO>yxgx%(Ugn4Fr-MPTSefMhnYg^kHr_6zbCcgTu8n*DD8L@yRraTZ z(r)=ECEqs?6)t1d|H%FhSygG;rR7WIEqXOpT*$oy^n4)k=Zu5px9V}#VhZ3SmLO5Q zISnWzT0|O)bzLx{wnQ~kycyG+6d~jZ%o7i>>@LPKs$$vYkF{w46{@n z*>RU^tIA(9N!)!$h>GVo;E!NWh^clyAkF|&O9q2ol=u2HtMcx75SAWGkfky}c%R*^!^xoi*sO_tRUv=qTwZ_|B5FLxj2bCafEaH?H+ z1ukQN$1~`pM$Of7%gSdRu8ZsgV%OWAa<(oq9heV!KD!xTb_NA5Qr3E7H8yrK`l$E~ z5H7n{99UNbd-m>K42VYOKE|}*>u>oDsii8VTgh*f`LJcqembs8rESgb)r_o^-cf4- z43ky@GH;T)zScb|U8a9*@|AyWt#K}o5+uN@APPs49f$LC&Hu)feJw?$-Epglc_Z;* zFYEhvo2}r)#NKn%7bUNRx4m|?+ML*j%(CGy4BW}N0xX+mA4fWi|1hojj*ZjN-92Ee zyo_2TU%7yb5^u2EI&w5#Rkch;k6d<}06sBUA{*vb6%`4|vTw>Me|!|IkIw!9Fbg7o zWQB!rWvW5)B0gQ7G!0}Q>}$6@esw(F$Xicgx5eb8FOL(VP8AV7bIl3ROKDu7gEV~SL195U;7&=ZiF+3Anpw z#aD7{i3Vm4-f15*kc;sd=2g_CDCJdp0eyO)0Q-E-s3PbJe~H(bJuV6|SsotO7VIqRv+57E^lIf9iIE+~8+7S;ETe%a zKbNULZA!l($S-U3j_?bVebOe#p`uXasxi9p4)|$i=iD*--7R*V=r z@8z)o?42yZgYZlNow#2Zft!*g-tiZKpBfKlqz&mTKKO*AlNwsds<|6ch(2DO8NIYV z-Vg3QLV7}8W;rtagkEX`B9(0JjNS_dOuB=y!4gm?HdqWSQ3>o&h`p?_`BwQ{rR21~ zd3^Kuixh`e?pLy2u8DvMAr^w8@=gH>%R)KlLNsVdo5inE3&Y7I7E^|u+z!fn$e1xc zlAqdqMtZSxuTPJ(*94A%!;i3y6=W_#+=dPf8fpAYk4&OCEtxAW)IAP_@kWNTq+>dI zG3A>IY)E#xZvj@@Qf=KG4s07Sk(c6N7ic=KTsnZ5uKyQm9w zP2!yrAFiDesBn+9oyT9M)7D?2JP&T~>|t&=0(#ah*x#e2{ZYSlAwb0&CB$bX zlx3}E@i~9({OC1o@tS}hJK_yNU%zhPne*>afu5`?rjNkbeQ~62fKYe@o>JoX&48`e z)YZ*+fo8_X#$cR#KPpx*{BLuSJnN!gb(x$S9IuS6j{Ac2-ws|<)#+E&_Iok(jAu0d zPJaG0PJX46qZdM19w}djglE8Yk%<{^T!|7yL=+sA)7UmJVNAG@Ih)X%@No%Os~OW( z0hTBd9zFx$0hOe~!7#hcPPKM_{Y{JBKZlR-iC0FB@nBB#q~wkH%Ovad)Xzp4jtWN{FbyTZk8V9^O7NFwze=xhjZ+&v*B9kbJ1tK>m(R%{ zqZ2uPUX2aV zEi`%^3pSo2HQNnMp5<^;f^%r(LNs|G4x{Bm0E!_ZkZj9nLzj7yZIughW+v#i`~2>c{JZ)1xgQ9WNUgH6yc4Cpl(HOqUNd~ z=TA07W#=(hV}qAb$wMjmf79Z$WSfrQPPwP|KP5`EWOK6LsKJ|ihcUL|Yg^hp*4Iwl zT5YA@S^a%3I!RX%&zMipUHcn=BOqUr=NmA@@|NFSz1UuE5vx>=Z<|Mo{vZ@wYu`Mj zEgK>+PPlWe8t_)x*cndnV_XdsAYr@_z+iCHhe00oGj+Gaz4J_?=E0dW&AHDa3N6JfcIpYI62=IGig=n6b+)-Zwjh9kLbx(m#5ng;96F zdCiz2;Qf!a3&XH$8WKB<@=0mRa5L;UVjI()R0}`Y!?<$>^u+tSrZi;Ct`%R+yZw5o z=wb=hKT%10E18kwHameY&4jBP7?a=w(hDJ6xhpMryYRjwGyh8?4VkUpd}i!maxmu? zdNg=sCZVlveDr7_UapI(9gG_T_CD2BT=a}{T@y?FQxNOSiZcD6c~;(2h}r=E!axKp zXlM4><2pwWVfieUGv3HYZ=Qb8K=dEio=3C^g=Sv+xlqrA0ef-oc~HQ&-2q}0E9hWH zt{3>|$M{9?FvM*Dl#hae(Eib@f5I56Vr4&Zv3H84V%`|AS*uq3j&33S+r}4*{$>W(!3}T#+UW=Qi%3#ri6^GoA!+JvKGU7B zBSHN$wB_>el@V0NIx};k)4tk54FE}?wFao1+fB=-(QD92S6=*p{GM^OS}>Dx%kGcY zq5Y@2MBnT9{c0+WiB_o(zCGx&E%dSS9of?hve6)BjlY3!a=%!($(j7giFCb zvaqf!0X}x~R*TMynu+DDCGhXsRqN4Pzj4}n9rhVy%g(m!^x1hgxa~(BO{Zy*(rW_v z27^87VZ9JMbLuO~tc4*FWIgLAO`cv}|EksY1|)8E5_ufC0B1FVX8lpOc%`r%%nzNo!{Or=?jTpsbj>-mn z?Pu4m_7n`|l_YWJ+pbGWsx}7hlqD<0m5@HhvIAMZ<+4gWm$asm1I@=vJ+Z8y8sr$u zET<|_*ZQBP8wX(A`@*ZNJgfCx%>u8_9a`?oP?1`eCuPMQF3ZP>3p=i|`T*5dr{(Ru&xvA%HS&D;mgli&1Xux{;1`$<>JZAgm)Z`c?538@+WxUk_) zUZM%1h{lX#!~ls-lO!Kl%U2JsuaZ6l)Tg<(u*?e^Oz^vs?WOe{&5BT3IJcU2J`SeW zjo!7^qfloG?O@Q>qK|~n#!Hh=dK~Y0PS$qKBBEf+h&`DGKLK{VTkf1Pg$ByOB5 z%L#yC$*qS5v%Km#+`fFsL}mh09t`h?@T@ouhVC10qd)9wQ(tJt;8?@bWqd=;pmxU( zlpdp*jlE{Mj$qgw0rDCgu4zm|Ks|CN<;XHak97ZDS#law5-;LKmJJ)cZrCczl2N!~ zxi~%IJfq7i2`?Y(>NYLk^hr6z+(_f}_+1s<-3hjV)dHay?$NZBCY7~fd5qGVyPn>^ zcXQBp9Soow5)JFmtMelo`cy~FTY91wpw`v_eEO|{bha>nGisW+S=Jjkl!jm9>t%JP zs=h)()tFCY7ZRD!_W zpV^|HJFm`IEg|^?++Lo(FR%8c+~3>&e*ro0CMFnKb)#z|Lg+9L1 zdwuUBxP66Sfiz*8FsK_|Vqxim)YNI1+tB$|`#tLIjlcg^_}9g(t1Bb#O%Iw@ll{H- zkWsA$v!cy`#QV%Q!s1qS?4`DW|%Uk%GEBiu^0`?aPsD{@&4>lCu_FdEGVb z8-D2~iO2F5*Vr>}%l5}zje!Tv#E;6VUUpq#nWyFrqLVmfC+PRqh$4IjKg$QBYq?K1PcG$1w~OH_zT;4fi&ys~(1zahQ8m35j+%kls>%&B_;J2d3xGae zIMP#Xnn>_v26V=iPqLMd?V$nKra8Y_7md7!KS2c9u}H@=-RAAd9^REhU*F0Tw0NkG zkbJ%p<_6Vrg-c(WmyEO0!64^je%7H zK)}Eo{tXYJGb1mhfBSFooDANbSt)9k{Z2Rj>9r23TGZT1_uB3UT%~1?Y;bmG!G+)Ex)Pi_O znwxguDZk{!ar{W+td5Ip#nAlPS{Q_^1z$9Lg}Y4+-LFl;p-t-8kNMvYF_8*j?jZZ`pgGBZ2f+~_)B<=& z;+uEiQ1HO0@Ig*MILuE&66xK}!r~?2Aah3m*)L*K{#YC)=E$&N2rLivyU#Sp--*SH zJ`#7Ok*c}uhuaSQ+VS5m3$S=dI6!|O2G$WF0nQkSM9A4ZC>^%qgh;-FI%c3s>DmU6 za$tuGg8F<`81D3diAl>!=?X9mn4$nRVD&T|>unQ~Rsn~O`-$+DPhr@WG?%JwW;8}2 zBxXwCbre0FkiroiHi2Re1SJ2>k|l&a=>W>7Xt4VM%%^Ts1bK z+^bR{1@7WxP(TeRrO@j8PyX&u2AA}o^fB6^M|m16NlVeO15FhIWFIgAV}z$%VFjRT zt~!cEW>BI7>~GvCfK-LZ-Zwg$HCmKp#%NWLtDxZ2|Ab6l+1E4!{3ji*H2wwAFbXZo zTvfCh$SIg5%59+Y#ayMW{*v=NLX5aW)wW1`y!It$yIt|$D81fMizHA#RLye0_~6y* z1x&CQVk>yyZLk;+s#SxkQ`2&Vr{=r2BI||B6Fa8>J6~M}j0Q14JtKWp=Lh2>S1Sfh zaX^56eEOeoVwWxe5oNf_;f%t=`;l}V=33;mK~L&w1>ElqQ6 zg4G*D6u5e}BI$+9c~sTd*gz9N?Ey^}wEMb9QkrQ1ic6DM;lMBqb^nPgoC*^YGJp#e zFS{ueY92d36|Ez=h`ERC_`e7rmSzHWgHcFQlB4I<$6G71u`yUuzjf1nS;j?~(=suK zhOEX^GVvBx-H`|$r&v7VfN4>KS))h!Q-uQZ);e4OG?Wrm%L=_Cd5@Wks}o)ySa)y3 zIxN_aM(MTi-l${JB+3+N&Ze`TzJhVuchafYzNOsmnzFs{Y{9Z9d$!C0(%1j%Qc?Rah6lEpeFg z0>TirdWl#dDLYs%h{Sz?7Sx0Ju$0-qmAAJY(>`F*B1NQ1s&T}tV3{kN08Sm`dr`fV zF5w{|q!3U-FnH4FIEK))3g&?pr7YF57Eu7pFp*LXWGrM(p3|I!Vq#TCF-`g!WKPkL zmA)g?6N7N3JSd^pE1{5{82YtRf@Kr4hY=_#Ns~UFIqWZJ>Yv|1W(NH5b64eNy4rRX{$V^rlS81c>Qb&47-D zI#z(bXS9PrUt|Q36d@qbHlw^!&jA|+O|`n;M>=!6evCl|mH<~^bYh?ol<{RHiNoVpxXcxhNM__h z(h6*BxB|N=$z2KC>;OGZkQ?tA=>8e6ZgRw8d`j~{b-1lT6hiiA#aCfXFU{ehwe$2x zPPdmnjRnNC|`0T1jTbnB4ROyzFFl`rHCLKT@cCyuZH#4uO>|%=Xed)T2M7xnQDg zSUK|;YTAZwqAf2I>dCmbBXTO&@`gjb;nRrR z^DNaJ5uhhB5UWL^>LqM(_?sg!>)plzTzk}xjSWdk#6km;p`RzK%9%&PrEi6=+hVZD zl&D^Vw*r#AyoF;w&G)lrtAQ5-w=0y6ilVZ(#4ZIIGz2b10RDO|#^%Av&bjrfi&3S< zIoI>zCvjoMCdQ^jJD+a2g$d4K>}a&m)!~I_U*!He)CP*>pMRfQiSeEcy58x8$r)XP z`#mb+Ub?3)fsa3(HLcNE58|BIWNsE`Xr8S`h5~oq-eCg+meR|SXUr4WzOBiG?Da$^ zlLsHjtLgUY0_1}@*csj2nCfLH)3wF;=9Eq0x5>0QS4@D}FPTrz9L#%meWIWDw*1p-{{`f?OU|sNqY&D)49hW_}q#eA7*ym&~I@(xz z+ZXZzrmroeYq*Fmmo<@&y^QbunV2IQN2`XgM4WyJTJaHEawq{M2_gTh8Jv>(rUPXfgcH9KTGfpRN~f=4}5YS!%tHckS8u4Zd5M9g5rf zo`x&7y`1MpL=))U3|Dl*70(#YSEE#9z%FZ?CP4I@>U_fu|5oEwfA(HC%Jul%Gy)Kz zuCbH*x|HU=%M--ZqHVpX6asss6h z==bKHtL3v1I*f=DiezA}ZgK8HC(Ady@p|@d6wbae*5JOe<>8stM#G!;w)@qlB;=qs zTmWxJ@@|YyAup4~GurZo6uFyD=oX26KjuM-^>PqF$(;ctODS_X31cYjnSPnqy_iwo zxo01`9R)4DRs(-jv~7V|==$!JR$bk!UcS9;I}w(g0e14%nO; zvR5_%`(k|Eo3XCJPJ(1i+J^nsQA|eFfC8f-UmDZeF*K#%l_qfJ@HJCOR7F6H~}o5 zIhstqQvUcH8!T&tXzjem3{R^{Lz{Y@hTB_rHQf2h_xpi}t@O&`__{)NI8M{n?_s6n zn3w|!&{c_y-YhBA=aiI7n98B;#P#47D^ud(Y25xk)fQ!Q`LjQL`N%eum7+=up{30a z_qO)AReLq=uY_-?;<-uYW%fRbcsO9b5jM1tVTGGM=;<#Z6DxeWjS(ta(65l-@~z7d z&P6O)3D&;kY@g4EHtbO>!q5xP%1RI3LaH9&S~-tpPGfYzCJ0|ys#^ z7vG;xNffe{@X3uVmQrb>saclrKrAxxkB@>wB5!v*7yb-ypOq&PYB-Vj>|kqYgCFZP z%c0FVZk6hgNZ7fy*qM|BG!spzBa6wj$@8RoQGnq9BAq=-Zl$H=6n<-WY*9jHt~c?& z4$H=ehc&h~$?zL#)_*>pLGK8B+)wJi+dc)_Z&fHeh`PJ9c|d!YdWo~pvvsgu

    sQ+`iSk#*Ag?*`XqRXFFtIiF_z3xVPzmcpf-QMI~TA6t?H33a~ z|FM1b{cmQ0l3S<9kI!`|KM1C)?zW8mjN0G9efL0`MRdqnj7FzXp$X)0PKG{B6FJtw z;9j(SvhX!7(o30SsF77b)Pq5vx$f2VN4LbPTU9$v2+Lnu(%spbs%%uSphLV^tIz(V zNKe9t+N4C$ko^skjlxCllnB_=0b}Hqm#EJEjOTBaVtbq=Nnq$%_uU;^uE)BBjo`@x z_U3=ZC6PcCmWX$boU&sG#%n){_?Rz4`BG}{o2ks^^L_~VmK9S2v~Uh`fTM_$c5^?w z47wS;i3KokD>jMhR(K5F1yHY(&PWZ4u7>BPXJ6{9KDQ#m&GAh4oakE3^MpH$^MnPi z!hR^jy3e?|4E+fg7}=L7KC655#=6lPVIm{87K0<5oT=6aUZ7d&wvCp$UdNLk&Bye} zHR&o!KRHnoD$D~ZciOLF3VIyMe#6An z>AI>fjVj06UN}9j71(p>r-igte+a<-^}X0VAn7^2w0kao&vMjTDLyiV=cjsH>R8Bi zqNfmVg~pP*tX}DzXN&J6si|tHON)K-`CfX@!~9|GT>Xm+@cCr|@jQ2jT3K>ZVfh7b zB86Y!cfyx?!J?*Me2*z?D7eLYvYcacc*oD+_vJ?W>|QQ40R3l zFIIkLAI)j?53wo`zFnq@G8fycF*m{;`1?TsAA%gGdyjkQnG-xW!IAxrFX1N_g1bLd znO;zzHH=f4k=7W_UtEvvlHITWZ7jLot_2RWwgmg4%D?RUWLm>US|X6neTa|3kOf6^ zK}jHx1n*NPl#^8$XNwqyTZXkXn0D-x6 zZk9wmvT`ix%kQ5{R&9*q)Z^nT^%uiQ-fOtG-wr?RaxrNh zVNiMd_U$&;2zzeMCts>gZ?sMJ3_RHFO%q>#k+r$CoyA`gR+Q?rsXTdM! z*m~SbK3}|DKZicw0w;OaG|ziu4EN_g-}WEsAhrGOo!G{Q%D8ybC_hipe7$Ut*-w{j z(151t+KsORcKFr;BEYP_pf@5GKcQ_zc@F>gYS(eTuyv}P7%Vs|Cy-SiR})xV01|Vq z^L`}(9=8au03C5qsevc0!l;1txV^@d{>|5#qr)!={q|@qUw`aK#rtYjx_^PtJQMv1 z*fY%vsb_vYyu4H@N1LDL)3uHJj%0v5Qk5Uu*IO~_&7@hlc0Sg*`Rzl!Ak)g0a&Yza z(%!E*y(IBv`Bs?u16e?DEtoAO)n~YgQNC79ebv^{)yeK5pa-QGLo^LAdM-$8-_iO! z7^ADNl{Uf;)UwOI^^>mN&p_C=JKq%i^t+u0RSsC~{Jb1T$7EEs{gmE&NlUzKVk)$Z ztyg`0m$Oj@VRaPVEY%6}>ai{_*pdN{-z<<8n>qfjO`7hmd-dvMif|67f3b$1Kp)uZ zTpbP4^#&|vev6MPl3xal*M{h#hwc1q-KoR;_hCWn9S0<=dgp1Po?SU75@~60RG~k3 zBdla{jNXTk`TpT~^Tv>}&J#t1WNfm|AtS8d#r@A72>uqZ!>z_3!cKX;kkFsGzb~R< z0T$V!STNygal)~vELF7;jS6d4*YzOHXXB5WZz3vbTS9h1cD@Mc!HLV{zBY?WJaM;Q{$!&;EB0W1CgcM zXf9DQAnlK~$as$~nv0AZnS%mUJYKuM$&uO;45UqkJ)Mim5*p^7F0j&{jDjzOU=USV z^{A9RK0YhZ19V^XDg-a!DjI`ATMa+a0caIbGfC${V(w!pFPwXtEJk7;`&l*=@QXJt z1b9`4O%MGaLC5YF@OuCmDbQLFn*l(+J}M=oz@e_-2m<8b8IF7d3CJL}sn(#x$z?JB z0dx+^#dD2eA`j?{g+VPcDrlpIwiP)fC8j|ZLd3;}Sz>EOk&~E&5u}8(7oO4)?F*qN zv8X29flH(o+)eAzM&S@7{~!Jafly6|A4N>383d;Br>zG`tS)o_A;%~j1QQiQ0lBDu zl~q6j$If<-NEp27UeLUAQNN3T2y-_WkeDFx;B>HRJUj7}!!{#K1~O?`S3vHwe<(eS z2?U)-JI-Mj?Ju119K zJd?41$dLgY9G=AnYmCsSNGx#VO^i&?ND_}Cz<3MXF<24Nr`TWa7{H-LrAVHN{BzCk zEYHYDeluEtK$*XuXXe_JgeIr@X#U;1{4r$2MU`v*3!0+X7zYBpOb;^F|JSr}5=d6a z6&QbobvM?;5!KZ#MEFC|QVN8#xeo6pTX%u0N5}aqA~b#!qc=7ZUjrfB6G9IfWk3m| z? zX+90G0?6~t?*je_*Pk=VZ`$%~L^gT!bg@l|)g?I1F2eJ)W75N+`8 zAH=5jI2gpz$us=64N}cnyp@pn^?0|ZO@Mmb$Q0WGiDNgkg924ZhTb4D|;IS@FS%pbF*r zPe?!=j(f~4(}zO`hE>eNqW*9sv!j?}7%vn6iIEQ@(?(3c2rP3{VW^{MA0`H+#T)7% zh?#c7vhGTiKLF{PsfYly&mdZ9KWbmFtjL6iv?}QI7(x!R0+-;3vHN71r0S|vN9gQG z%p)w)=d7@fX7*L%Bqlsy{^4>w!HqOl(?7i3ug=9!FY;ywJqx|4=$$7*3(4`7i{y-+S5q(*A%l zx|JLR$up^sl0fSXO|u3_ow<(-g&iX?Y4Nm%(Wkc4Ph#d2@tVvIgZ=PNo(T^!&t)6v z^CI6zH_Wg=(MR-%wGsGhnvS%}kzK36`2DHn?K1mC=&PmgF&RD zNf;+ekfs$kWdt*Dst6C*fXG1%HVB+YVHT9^&(0?oT^+)JgEmrm% zs|48nAToC|%eBLD>ol@$`+EyK> z@11G6t|{JzwU&G!%*6ZxX|lPO{aI2+Ic{QXdmXUp_tZ4Hpm`#HAunHRpUp`_u)##A z6#i)6Nkz!TnbPZp6hoM^;rI2HAPaVo@%tZn*|766!N7Y%nfE;HqPvIIB2j$azBs`i zyAR1ZWkG9iBwuPz#mO1DGwg-7hot=_D!Ei&&FE*U%bGHeM~p0rEbYhC)>8@uNThj}7veg7uI!Gns}X&qw#%braONfP-< z+PEZ%d@iT=sX}?LA-0)MAz{+kqM!~w05ny(bv)klI*n4uL*V3Si z;t0UB!T54;9oT4+YQt^Tw3#ABCSYhxPi#HrtGKDua=j{jIe1{xpJSI=7H{4kgxhp7 z(8J#JO6o|Mabv0OV+RssndM`j`)oFSeEe=5f8LA7S}oMOcPV)=I{@kBUO}pA5v|V>U?&LkY9Fn^k^maAuF|YmE()OFD;yL!G)~A3X zm*9R$Sc)Phx0`dVDH&=~TSB7kkxg{Cl23s0;r7;5^G!we&klP6z@Brb)|ulr>?WY- zO>sUgXngbK%B}h@394`J_I`?kmdAP(mopzZ-axteO-5u&e^pzPWci zCaqV0$&Ki$)vJ`=*`b-Wlr8P0wdz97&6Zj;uRh<{fMR+~h_XicTG6iJHKiMbxqRC2)ql zGtUKKUGy5KC2WWEb+sHHesaw%&)a&W#JnG*Z<=aPKNA1enY*z%%$&CY!o&a_115_$ z8t;piTE>C>t#>~b$@SuVN`{I|l3o+;vxdE!-FZtI7ww`{v>Ah%->i~voZhUOC zlD7e`b5qnjwXe=VY&YBbfl2kg-mauJC%=FhLCvx2?xAWz z+}ewcmk3p#bvFCPF^KJ%tN(?Id$u9{hHGe*$JJ|9OYPN|?HPio^1uYkACO*&eLBjm zBRZ^in3QOR2uEb&<|PM^!%Fmzkun4&pw0j1-rBjr_kp=6Aa1W4xzH!B&^GR(e0uC7 zR)*t6{WCmtRp1<_!nJTTRgmAXQIdV#XrRQC*H6W9{m`t&gH){3LdMlpf8E^LTrYQ~ z0vj7yz)-uHECWj)zvsSk6EXc$85nQde5}TsclL1s_hz|-#|O}h6YAl*IU-MJ)-!&5 zDy=m6=3-MaY${sg6eIvw;fvv9%}n*1b9)tR{nFu%vw5WYAj;0&p1kz+{&LnesIyng zHv5#I^m<;)_UiSw-^z%=z1BCstxHk85u!Jzw=FfUI0c@v7?gv+`$J&iAS` zdf!pKfdeTgy-ZInAB($+xYj!6L+wfJtJB*m!e0HcCcUx-#D+#jHP=lqoww50S-i=K z!N*MdcQj|k*UdJj!~7fkgZ!7!k&&s_WwAbm4w<&Fn`^*$R`-|lkQpxbGp6f<;bpWm zpKHHKlgw{HDRG=sNHUtz+Wq3&MduZ;SsEgd<$&?G}flwTlin z@MGfd|8wQy61~JL7>Vkm^O*R#-ACx((!<5=KfTCWC2Q-tkL)w6KM*>}bakG5i~uM5 z_#WOC&H%#GRjUU_E6%wmrPohPG!^1=xq*k&eD20Icflq?X7#4G#T0?%Q8A;)_kIC; zE6?BDn1?62e!c9UDRJ&$$=elzckadL;S9Q(aUYXh@jka8?g#jaoqFF;{?cub`F5q8 zp|5xI^7R|zz7hQ8d3O9mbztJb9v}`lvc@PiLA&f&LaFatw$!@WTJ!U?ICb}Q;jn6v zkO^ITLcdo2@-Jo$cWiw--9zz}^G%Zlpl?UBRD^5a4UGpZ=o# z-)HJ89dF_G20{`6F7I?%>QLJ3$HC6T(EH1lA+|s6RrtQT9?RG!jkePnohbUmTgQ0^ zQKs7Oo1YN9J-9%}Jx6p9LYEVG9S5Tb&dv%{97e_lUipfs0DD@6L6`V9l4tdEPD9ld-7eT3JGU}QqWkkCZSznUsEyd%t)VBbNuDlB%F#(Z0d*H!vnz<)kp@B z-BilROH-GhR>L2alVfjogcAaYrBt>h$dCign$ttJ+Qrl$ezqB_Ko$dhsHaN{;s|+< z5I)ainYqONikVPdI-DFr9U4>1(ixzGkxBdK-?SWTgFNN7bPr(2o3 zee0e6(39LXfG6;Q49p7_T(j?gYtF7FF(>MK(Cg6=hTkT5@C1CAp<%VL*^XY%q@kq= zo0J6uogNQ%@9q{e^*1`62z{={+1kAagj3u78o8stm4KgFuQ?M&_oS{GM&UFzE5fV4 zeqL<6?WWCsNz|fGIpq;QC?u3C0V+ma_oi;!m<=@&O`6Gv^JUnU+I-*Zx@yOZP7gB< zg?BL;!(72VH2^Ri!|KL)CQ(!9j>9FgrH|3+p+P(R;>8wISgx!ahrdXH6`=*wD?_M# zj=^HJaa51Sby9dM#D;M)GtNpd5+&g^Azi(6j8g1n9d(E%XdLTJHR;5@=29Whm@Fq6 z${~f;ysy{8UlLrv1g^2ct*??UKkL$FEZztUNjBZOi5{%2x zTw1B4+DzG;E9p70<*)iZR#dJmSbU`YPvOoO~m{s?DTztiXaX1)S%nUwuY zt2n&4HbAUG^m`sp z8I9_Kn)8)G4>t21s7ucSISMVR@nfl0`CazSwh>fMN95T^rvu0I1zW4b6zHS_wk9d; z*deFLIM1TVi0a)M{zW1L^EK;+mEKl!scgS&uJ7{bLvy!!G^ptHf0!aBhw5z?=SyQd zt6-1QR;`f5xh?(r6gO)>m6F;rxo6)gbp6SzF+3CooXRorOx}2aT{FUI0I%DZgGE5f zoV(*1qkMQjleeT!&!lte>O{iG^goR<=^)y z`Mf0Wz7P?egZ1eUUHK<79ZePEmCQs5%=1#avH+wq{)ElGYC%T8A&g0N(wVipJT{$YctG`%Lqd?#Q<6YEM6rxMO$7gS1eom$r7$hnJ5u7E zOb|Xqu#mE~bPcJh+ZP9`kTB-5=)tj8OH%8PD7+W=rr1_3js@kN|D`i5WsR<`R0$GM zTG)jJE_##KhP43exbp<(yA5t^!mUGeyHRv&pmi&NOuEl-;R+=OZfgh9r_!!Hr5f2C z-*9laP6@@oi%xba7QlByPpn524p&gvaZ|wy2}3S6bTDR7s?~zRS{qnmj%i81 zswmq^I9GEGQN^(rdc8efO#IaTcPT$~VR}yt3C6lwb;%O8wc!w~u`v#v28p<;m4wzW z?J66>Tr>=xHjS&S$$aF5oP$MyHvd-4ktY(KSViNIs@Y5j570*|E@a3YL$h6z&yHEr z6E;ly)dISpc4&q>p}=4p@u129bAPH!+)e~kYgl=b7c+l0SptzZOvyqBDeZRUGrLT| zj5Nc(11#MiEED6$+2g_d=;G(w-#w9siK++utlAAr zOHH?Xm)}bF-vRuEw}w2cKH{VCLH$!ae!2%5o7K|`EJFhUeQq#<sJvUoo!OEpqiDSVg9)%V?!lxy0?mm&{eVi8{N-r^}{{p14bn8@sT<+Oij zaZj1cZ!UPF#RjnSangsZSnj4NP(kwN;}NG}!4X@dzX4c;nV=mhK_Q7k$bKTuBeIQS zY_#c_-#m}f8cgeqy~a|OB~@<{>HihiTls^IkNZaD4aITFJ`6&VMdmo0R_V_bv@?3! zh_eL_Ds!z{{P#7c?+@^fkjwM62Xn9Cou!zn+rN{;y68d-~RG{(_Kci%#;dOoOo%`(+0! zT1Lo65`*VlX88C?%{W);i}Wu6P$9^uNWzW31AP`+8km=I+`rSLr`8_wE8?6=372@% z6Lg71$11BBO`VB;WjBV((&mNp3+Ex&;nR_Z037QaXCHA|7$O}~c_i#l?TBB68ck0( z{*qBlolw#GPQldU#pCanqpBG(Se?IOwPntCtCbz2s?q0EgjI8i^=;G0l}ptI;=$V` zyS$dQ=fW(Hi$D;uqIIWCw<9^EV;w7-ye}xOvE_@KitB&}ObJ94-({1*M}T(qx5uVj z9zcm{n07>c;YL3)Ub2|~S8CGS?x>$!7*U^GZwWM0L!$X#ioZ||AwjnWXi8s-)e1{t zSU8|T;kEtPRA9(hS#V#TIhN&Y@jKM^@=tP9J?~fCs?}RhABSzC;_QCI6@T?}^h;Ti zd|?Yk;MrW9J@1Dg(kj?qt#e;>$gA(c zIs(ulNhKDImdn7;HKBIXlkatXOxBs4m|G|%b74Bui1I&47a9mNVyXK$>3FNA64z_?|hmY?*rhN z{?vA!RpVvelb{*O>l%0?U*>J?i6@RGsCCi*z;noV&1<+txFIT9w1=e#dPCftr+#|r z5Nyit9ajIcvi*ykTcO5i^FSM%kf2W!%)I158=Qr^xKK1p34x^vh5jEIL$<$+#l{>Z zNae^Ne?U4mFr+EnhfQ3J*To?*6M#|y`nln}L4M3pl;CIdmHq1y#2)t&6(Ft4-2gm} z9v&Y#a*Ce~L7UemdPM(;Y#5K2%lr|Io^K+=?!n!<|DjI^ep)(@V-RAOl-Bv0lsHjd zmWqcVgk@z^W*LRdE{Ns9gQD2}o+TB@#)k^}Zxa9ZD~`mD=7-WR4!<@?O+dri!Lf?; z^Eh`(7@K_k-?BYKs6>9*&#BvFJi*X|O;Sxw;l&1}Z zKgMQdz?v*^uZq5;e`J(Hbpz#BgxMj*Q}2BL_joO7{C|(v;8{6&|4;2yF5tDCsMf#d zZP#~@48Yt~VIN?|3W%@gzsySsR9X`T0t0gpsDLTVd}x5xiQPujjz{IE7NKT-Vt+EB zS-T(%niU2tn)rO|PE&ersVTXek0XUbv5{0>f%vl0C}v!|T|-DV+3Zr zPnN8Ax(Nc#-!5a&`xLAym)Qq+6~`3`~9@`yX44!o3Ol!MD6a!n`O)jv%~@j?mudD%=+o+&PPnPJM6T-l=49R~LI(3gn#pug5QJuAoN$>(8gWe!=u=>HtI6xFzKFsx`M= zWr`|hG<^n1plc46d;#qyOq|p zu+O)gYrsl0E_r3{cFEPe1TL3|MP_J!uvE z+>-|FWR<)&j{j@Cn`h^+ru5FQ7lOr(rDr?KJ zVUKV=`^dKjUrj9k>+726^JXdF2_OA}xCXY<@!CG+g&g_zd*|Ea$L^-vrJ&boIYpkV z)1+;xgG9p~iGPn$KBcSt!MUK&H}aXIdN)H}L$ALpe4f*AOOeMbhQKCvSeS3Pm)Q;U z_ILX(K(T~?Kvt$d#UDirq{Q-8q1yDqX|<QZ#%wcs zEkZtHmbpw*humA@xBLb!k&8U3Rc-MQNXI38zh(|!3=7tR?tLc%n55d#^2z{g`B8^tb{2&UI7)~e1Q2++1LW) zdj8)2nR#u@6hX|88>l?Wq1hF-avaLJl2qfopLvKLffBFZWDw0JVW#qvc0R5?YCfOr z6xVVKg*B0{l&%2jKc&|c6n0#)RuH~>>~~ZRrKoReO`PZ?^X<)}Y4F31ARkXFQd>1; zRMS&XGEkIm(+u~csDuc!(O6aEK1?#$DnGhML)6_R)#fM51@BAUunwT zCiqeB+V`v-fgOZ7dI%0!+qBrV46;hrcPVi@B+fui0j&Vm2L8@x$(IDazYM#`_Xy51 z7-y>nnUV}k7I=cUX2*;W8SD*wqfq&D4Wo8(iao7@CZi{ewC&3q$N~cfi<%Bspdy8M zS#*7n0fK^$e)r`xX;_8i_f&%TEnot_w?uB}>j48`abFNAxUpNk`?~_7S!kCLn+0f9aVK-ruz++$+Z$a1So|C~%=NlUB|pxiee)HG1F>)i`502P zmv5Hn@g7WUS(|e>&kzXA=*vFC4Zd3&61kE_X=NokdVsa3h96f@|5L0u+1CMK|TcdO#%2axt?E#dlv|70_s zaWDl)^RQ}vwJQqj~dRM?VdEZI~S#|0dAuW`l`Gm4pH z6Us-6Vt<^tcX}4!)LfXftNefei9P3r8%#Qxr31G^$F2j=1F_1eXfkbzieVY!+Qs`YLt6FvFb6e|4X=S4 zVOBQ#6pj)-H$~LyDd7`(4)N6ZKwC#Cb;_)iaVN*S`zN|g8_3I&WjG%VXgcfy4wY3n zG?Ee`r!wz4h4d36K4Iob>#w4R=aD|5o|SmRBEKzAheft)u!lu{AeLlA!lnVhTgrS- z^mF#XC0JGoG>a$*z?ynJi|A0>g43mYoh8ni4F^s zRT&J|C!4*9&QdlDJub@yM+bVf^Op^V$$4@JROU^Uar3zJ#!R80eJ0R^EVwoHV7g&V z)oQCRjMJ@l#gW+du%ZYs_Pqd61duDx*u3J60Hr(`1NdFa8fu8t@CU7qWXTPq`#?io z`)j4I9!S$>nHrqD($BPcA8QgnQ|Xj+mvtv)7*;Oh!&OFiWuJho7KT#Ex5psB4!%N7 z$VcLodhxF*`-4;FQ+miStRZXY&`^BCOQDV#gu*t_LTqDM4MW$Y3lu=PTr$m9cX7tZ zc)pOaN5eEd!*)f+I-2NvbDNkXX448IW+l6l(ZI^`Y9XLwDGs9aH8{dc3HBweynlR# zCc;LXfW?l;Rux%h0Ghg*);(IiBH6EpCEdnxb?zArB42ppZH`(c-g14q`F*`VY*?n{ za?wzr@r(oF`Ns2_u>b?$I&w#yZW*14RU_?3h72eKS~&0+FJ1%SV6IFhXAsa)EM9hLQb$0QNT8W=*%xNlBt!s5ahx+jVoDP7fzRO-HN zYYl^aL4hXs4z?bh<6`B@-gaK;E4JFf36zQ&V|BqhDT*~Lhyr*TYdRf{#CXlzzz8$A zv@UAm25)42=L&PRNo|p;8MDS1qXEU`reA4X|Fw$IH z13Fr4b;{^VhCQblPi~o|pXlD(6ODa}4y@tXm92-b|Yh= z5~)5NQ&CP`=(e#abJY)}S3GafjEQa+KSKbe*%`uMGr-8K&?Obe4C6ATClpoII(0_4 z{g;~x7&eb_%5mb2YO$K0xwwve%Do@frs!{r1pde#eP&OL-VZC?g#9ZhHtwIHL{&9f zARsO!b_VgTLz)3o7Si&&?Vg`p0ZxU6m1cILy>AuxqGbWisyKo3*qcMDmDgBmZ5%2DsXe>iR`%W-U_fV^`-Pv*f%eT0}F-axm z4z!vk3H=M+;)1GZ)9b+7jC}j_eFx3&q~VSjPBD z@;#|1Iw8NIN~}-9RSm{WxYI@;2jSt9=nMd5XDkm0+hgO;q|E7z48EpngcqFA_uIy? zECbCaA$sW>SRRhF91-sf7q!8D@P0d3Y6Ut|dYt_%fxD`crq}ib60$x{&1)|vXAkFN z-dku};P9j_%%VZ4481Ap%F+(clA@*Y?)>d4zG;OIlY&W=nQW3UsRn$T*pBr#u@3+> zc`a+N?333}Ez2GQM(Y+@m*A~bc_nkGx49j(!aMTJlZ1gkJq_?g&PZk&ad!_|)Q??d zmoW6JGNe;k5q1uXpd2WVEuVMrhcBR-3GPB;VfXB`sbY-e@U(>>h&EboG`7aTIYckoxuAGE!X z5LiT1KcY^^z?2HTDMmNVE!OuUx^t>PD0HGWC4EHpJx-J5SR_qfHEnd;|d0DP#@sM-@F#} zAa0}-NEj%YgzEsQl~w!mtdpM?{qH=D+hH4@p{jK{B{5m{YuY6%4g7*1-f*nN>2~jCLeSLj;>7SPBFvL3Hq<`ETrwT)NiFvu z@%8|U;W9Kr2xy*Ypi;~4tBazHr;N)j{CAW06Pv|8sHOmPyP9D>%tUK8=PNcv+V^f%TM;Hq*LAAf zaEWOqTdCX?uYEk0#63}!%#U;yb*ix<95qwW$Br&s*kO{XYzVtY$utQ$;DFSc%rOj` z5S|^VosVNPrd#Ja{Zz7YqR9H;o~9WrxTAo%72FKSjdv{aW1c{PsxGt#vc&BSN9M_^-%`bJhp+WmHU$FunpGCx_)tE&%@DkJ?7 z#r~seuB~!$@y9+(zV8Czi(sq-fYoK75nF5chYGPZ9x&<1`}cIVpxaU~^k5X;$>Twc z(yBSFK~V`nsk7(--fg0o(K7j){jZ1HNdJ{75kS;xG)pC=*C8Hs&b}7^eq{7xwFGU* z^NjZt4VXI^wilLYOdcwz)KvAHzdB3n?&>@EE^`pWzjZ!L>=Dd?6Xb0$K>W3Tj|Acd z2Iiq!0r%I$=m8(Nx!L|l0Z;>lc*-{9?q{t>BIBk4!{h*C6mXj8aq2WNNN|kP{EpKV z1(ks17XaDEazhWT=<~XwYm-tnv&`m`LSc2PVg`?XwV6p3(RXji@6Q1fL>-Rd7qIkG zC>IkdFju(z-K3ldNSgTqFqAP5Tm9&L07S5IPWZniK(8K$eqYw~15mG?@ft&k+f{Jn?0IcO8*2Y`oK2R~1zM+3 zgu>WQ_t!s^^TCb^h+;7a*yXy|tiC1>C*8}h5LaT5Pq$$7kTAhj-KKcq-yr}Tn6unZ zxbc0~lQ$SnU{35^FA9YEjhz%=P&cf7e1LtC;P~8%l_5!lG#hAtpV0c@O8$HpjT|4- zie`A^Qn!ceim8k9iit##sIn7-wa~DyDwGk^k^Q!vzU$M%D_@;Qy0*mUPsRp$w1&ab zeteW~ABK95rsc$pyv*n_0AB`sxaLwHJxp4J10iYk(~z1{3u|>zXr|@8;N_0xCO^|D zpT;3=hbPVk zGEkBiBlHpFb`$%*z1-bwzW;WV4^nyE2F)L?E3^m;zj}Om8rr_mkmSKSG>u@RmsFj~ zBR~#6{Y~->Ha}Tyg`Jz}>gk_1b z#$>P&p#pO#N}s?HvFf2@)q!hq$&(cgQ*R$8f@jexhN-B38UrFUtcexm**PlvNi4&$ zsfM?9%0uA4B1C{Ek=zj3%9kaBBO%VC*BlI&ciAWNJc5c>5PY+LWkKhT&T%fU__&A~ zE+7(LBSGF0t$we_m z?17M9ll63pR59RAl;A_rP;=-a1JiC>d7>{-xCKg3}O5>^yx(dFp3*~-h&B=zFUU#F_Im!lG&=sG)#Zz~j+N-swXL_Th( z9F$9M59pK_Zx5v9D{V`OZ3Z?s+i#~x8C)yy%ouBNCJzHxF+wHglwEgN4@^Yq#|iOs zU6MCXOhruuRG*CV+coHU)YTE=!?0`*rF5pGQ-0aa3qoQaV?paCSZBNX?j{I6aoTDq z*FrP)o9}4688yHCm8Salx%v-O{xQG^q8ZyU>MpzF1v>o z%w#HKR2A&XEp~Ttx@Y~Dz07cvabZZ$A~2`7H-i1+csCa42mpVx|HN^N9xScQF+py z{P8DT0`2pz%c?1)zA4%R(*|tX>%Gp}&F5i_0#1fMn-X%`A7fG57UBs!_6(4maz%Ic zse9*PEb%rdH#7+|`OoSHE^c3UBX=zAd;l9tys-xvLLTnj&X8Q)B*JDhG{<9{*(#K1ro_F{PPej7WF`836bm`FF!8U5z%}=ss(5vIo3oYGWUqxD3VT9@rH)jozQwqFJ>0(rxItxg6;m z80B;?EtCdLYjLSSO!oo|2FnQjM*LWSmoN4r?k@RaPdf)-H5(Rl8^HLdHpVk^$`s!zQC4 zqDg4cuV96m_wax3fS1wKfTBV+1%Hs&oL$@CF^k8Yd>ld$a;b*{z+RfgJ706nz4B|fN-Pt#t_sJUapBtQb)Pd< zOlbXV#%RHilz~BcZv@fM>ST&X0Rd?X#_vYgdL@VC;yHlu^&D!zn#0)u+Df!UJwFBd`sPo_jhCU<1s?dj(&JqMpXHJ;Y4O>_u^Mk^#IfCNkH zCKqd^PU^+_ogwH{CYu9B#H7rM-Tn2k(_j7KIH|ii=k;@pp2R@LllAatkI`5c2sb$U zi}s&|!s7Al{R*M(`O}(sa@8F}$e22p3so%MAkuK8n-`#7uf}b^(QUMIH+d{G0k4o! zZ7lc_qY3QfuhKQZQ@3esul1kuN*S4O;qaRO=r1)nIJ+Svp@S-G1qYgEsN za!4d;;s(p(nWZ@BxtXh79I~?{0~+(A6bL4*b*bOcl<2Y%s(^z!Yt?g2&W^uo#INy| z0#lpj)(ee>e1fla#qpZeEC=#km3fh7yBh9>O+k(pd#ukd9k$A z$V$Gx)QD(G4P6z|_ebMX7Ho5p*F*;Suu=qUYTI-dY--Ce8th`|T>n|S*{BckEA`$P z_<-1b>(pzP@mZvgZTr?0oe5w#nLcVLjqW#YIe`T3QPTW@E;hjZBSD|&eQS#sE}6a}pfYsrV|Uq3ssov&RZS4VVqLa3Zidk~#4bpvT>QJ*$7Alp z?5ca9KQ??E(nadvR5_T|<5uAioEt`#&Byq~s=w*_zoor~jns|(_p&Glz_FnXuSZ(%(u1}ajk@1J^H-qko1V_}I|nfqH`tKOS2>{0 zlNc5_Jka4uj8;A_?lH?P6qnzQVDYlMQ$i*8wy=%hmtEGb+N)YV$W=g?S&>`J_l`v`Za?seJP z8O$EGEPmL^OtJ5VZ6h5Pl3O-C8y5O4?;$wfSONq0C1J@W25%OPO;^&Xh%6DCCWuYY zFcT2Jzp;Bqo`?)a9tJ+m$C&mdnJG}hA--k*5`h`1MP*-_=bN5=CU2$(PZvkvyeOL3 zV&5i~N2<8?_rQ6G>Uz_{M-clvOSy0oS1L;(hGc!2?&Pl{6(msRmb$f3xJp49X~|4dHn29`R{P_UMD2 z=jc?pJO1H+X~j95pjl=(^dRQDE;LWfFHob6p*`rvJhAgG{#+WWsjMIVD+wi;AEB`_ zf#+sz&Z_FV4aUeX6SX{9ne;z)o( z44ycS;Bs0~hS@9Uyvb+Ak2~>SXSLD7$Funaf8XA(ABE@9%JmLG=k~tI!>6V(sJuQvV1z6DCZ-g^a2Y+f(m+_LaM8s*EzIs3( zY}q}I$d?;Ad#Nh29LmM=4ey%X=S>dABq^iekBZYMsz*=rr1r3Vp8*U8FtQCQSRT2cT& z@eyF;h`yL8*thHD_IeSQOG<>)p48$I_4cBMm0OwJ7qj2iBS}H7^o77Zqfv7Z!|H4| zyNRLu?ac0MPlfgURlS?EA-h1GeL$-!HobF#{I|MzPiha~d2Fnv=UA@mZ4Y3$QJ!B+ z|8{bn?6+t|=f0mUeepQz_j-G)x4~I>lo@OxJYTx}BK@3jBvHR2&A9qrYEhO)!>}|@ zc=q{MwRccX!C808gt#QY8gJ=$eNOOXPP4DU$cp6V)nL;4mmG0!Z{c;(bQ2Sm_0p*ND2u}*S+aPir&^9 zc1emk1RXAc{YQ!#fERe=yzE;Zgj`im?LVa44rT;x_eX~fIouc+pCZhCv-81~?1DP% zF1_}keL&iqFgd8JZl|!7GGsp5w}u5|d}3~P0e<2IIXQ<*sG@Pbx2>mLAFqhg1?gK- zSo+1=sr6ifIbywN4cJ!Bs7y+?`sIT1cuTrfq~~Unh@N{vGX2YKDzSurb&b0NBv73u zf8mv@jSRc5v}e@{3)N3D)1HIyVg+b%FR6X4)wm6z5}P8L-K3>DK8ghWLoyZUkiG;e zxB@fCQ%sDzTgf3|r!-I_LgaEz8T&Cllm-E6?aJn1bvQqKkLssUq*t8#!ew;DoE80Y zkro=r`R)UQ6Fsyqw-Yu0_9OVtP8QTG=S-Y}u;2`T4ZR*pJCLzo98hh@{s-$MMm(gC zRwE1})bvZvYNfi<&(zVJL$?p`kv={JX0Htxfro0-9gziV3I7k)Cd(ZltcAF&3NB=H z18N|Yk)n0ME{eyb1v28!u!KzbX{_RoF8)!$--(kLbm$;R77>SBt0Fr$iwPip?%M`! z+&G1wWhY(Rz0qt(LOg;Qt1W}RRBktJT$TH-+!vk%^;fT$vQk=*ULaZPAI!=4XnOv^ z{N$ZXZi)W4(^oVk;sVfNmyEqy;EZ8X%mEKB=E1~DLmp8%Y{Z!Vr4Fgm(4dq`S{!@< z;J@(YC0?cX{qDxp%C=nl*U%Gx-7tv-@9bW-L*oyYsze(9_-~xw*1fC%%j2aiqio#B zMH2emE!EJI2%fd4JP6-ZKV0s8VRo=bhOOa0su)(=v8kFAkysz_gFHFozdRZ6|KZBN z_(pB&m+ygiU^p{M=_ZxXSAU?PJUYh`l4zH8RRrXsfh^8{A53`^7o9_HK*i79D@z$?h>p+eB(|~e0-y< zi=uz-Ut2D`_knP|-cIBW7v%dYMXMDs(7m1TH(19~kUf%TK^l^mV*j_{_8NBzXm=a` zJK_OE`;7wTD#O;!W6vt2tIDMKKnT&7&K_93qiC3UAec$b94xgfMtl#N z{9oTnfkyB5lkYFAo3BHRuh(zaxjky5E37~d7;$VskG)>q=fL^uf^_wU@=cGn1zq7D zpst8&CVbMuvWq=8V5I%twYqpN)x*YRqItG`l~rZPpsbShc2;w6uOT1cQ~ugSv2}_wKraHcr6cfhBu5yAE2ui(t{*I2elPZkqV#_lx_G&e8K>yy61SfBae&kurS^LKe)T*p85w4l&B z^EtS`uHQ_lkEYkKB`gEQ0DhwV`NLlwrtE@z399;$h z!agb_DRyn-VbQ7Icn+HBL|VO}w3hZ&J_)qojf~jed4hoXzKM_XHo@kF&l7HZl6mP_ zLh+LAEn#L?ke?0vHUZm}sXu(XIr}W26aW3Sx~FHhXYBN5`_=FM;+o?dsfCD99B}eT z-w4>%KDH=@?JDbcfF|)$`A&4O=`8FL`2ldi4=p2mqAdl?=2TxU{9- z1YcB{NdzPq*479vB-gvF{RX?KltbqSzsa7qP-d}l^fUC?VvwdEF^zl~Slv9WZ|z(y z9ugKKq!26Lj7+HhWIIl2Q1{YtI%#UIiOE+wD%lc|%CGD2357mwiP6t21?@W^c^HS= zQ*&8%^a5#)G%-VME~>aWqi?)O1{cJx8XP>suG~!CO;3+4Z;Vo zD}((kz$@^+7ghUN>NmRz3n3+k0Nip4 zBvbR(<=@}zUwz7MdFskgeOrP~Ys+czSz~>S>B_}%;`exfBGMTUJoOMWC9yz8@(m7g z$-b!4#^+x3nuCq#y^GpyKpFx%gB7GVj=S^bo}jdZKV6%>zEbuLwQ2*-+g;dj-iRQ3 zv`Xw&3a~0qruXMo9;w4p8bdKZ7m?eS4Uw-JHM}S_gVCA`S##i!VA?H{VP)M664mLd zl)obI#l3xDF$u~>(#cXOoqWBP7EuW5-5Cwr#rSwrag|)sVSF&W!(4p8m)wf-^kd6NYWM4Q4XA^|IpKxo` zQ55AV)yxQucQte4yf#g72h~+jiM9fd z2^`iMgtHrBAWx!cG?UdSX*=|_SWBKY-|~=WD{IR|nWm4sq+}m6noJ8CFDk+mh3prr zi+N^Ar86tJ#RB$G;Zh?nM_Ppa3UtTEP>S`FuLjII3t#R1?8m$iH94C3I-UZBlQs{* zbe4iOo|OTgTfXf3(Xu{$T*~J?I>qQ6?S`xZhO*a;HK83KeWxn+zDfPcmOU%?yU9*} zH-b!w9cK^pHfWs2HQ%BSKFefRIVb2N>@8EJJbM^x`X zem#JPMJtl$SHXZqVO_RfYa-WtVPc6YH{V$f=SDI>s7y*f8Xc2b$@ePk7s811Rc<{~ z$!d(b0fx~_`A>_VFW!a}xv!TYdmqYK4nc1~j#~>>(og1(c+STC81g!U@7H9hpr_KH zU1ylOw9z0-ovDF{RU1qL(XM8d8+Mv#UlSBcH}xfr$F!*{(zJ*ZYai@dG!05J?EnfZ z9dtSX+T2qbYfWKm%Mjwg8Cq|b+{)?#r}?weiD%BUc+zAYQ(~p`nrF>rbCK)z*$GD2 zD0WH9L;F)_dv=DzD*gE!{Bf#C*NyI#AaT6s&x%ow$3_)e&`(LS3Ed(vnLaLE2|kQp zMeQ!AnB!U0=fSx#HN`uhanBGqm3+EvqId!DBhyHY3&^d7vw}78Cea}l2RNW`Ez8nk zXF2#3vm+R$hh=q=3%Vrbt1-P_qR_LkyO{2biWl~Vh{R+hA4Fw7E6>bnWm@dY_9AY@ z#J}~xJ3EG0>7;33$+0gWdDLjrNsuPcd~z&qd426FgXp)+wcditu< zFZ_6ubkStNd(V3Nc;1f4+5L%fd9WE%S2RM@Kv0-XHJ5LZ(K-v8TT- zfm_pwA9@ovA`+-t^*3G5~|wIz^N@yNv-lu(Tj`>DYnyw`9gZ6!X_+MJL43 zS2HYDGVmDO1hD-v?kS?6Dn~DH_%eOyHLri@zXdnplFt^Oycd(l^5yb$jikbMC?o61nCLeQ?ZS+^S^GiUGIsm6JTOu&X z0~%!o+Y1x3dAPm*E#D&%H43Pxkd(Ey?G%X!Lg1Fs39Ys_U8oT*m0-npzP2nGxG%#gicGq3()dC1^8jX6aoNW~Rp;N=sGM5R;KyR?P?g zrKcGK`cthf=}g&`Il#fb^jBxHx@5{ju7oKhAsxaG-#Hg%vzS7dOwJ5+LaL1?+F-4( zo6qSWm)hj2x+%6h^{2xJvuIUxDBwI}#Lz|YaKJ-M@S5A$;lI@)lPO9-p_L%T);WjW z6GNd1KklA5qlpd|QPs{uMC4l1jIlFX(0#DVQ?_m`OwWm*2~p=1Ro6|4Id{_A_?f4B zVpesc*u(JJ0bcwZCa8JP^{aFt0J&k$_~HrJbSAP<^216Hw-UE);PdXURIUW)i$}V@~7>S?~4892UJDJd=QJt zMw7x2%>3rVu4_>XZ{ShhT)k;pkUy81{tSef!xiaKpbyXP{NHTCo9j!zI#hw=-Vx6| z&WW0~C+*%mbCq|+=G_VR*K8|5Q2W3%fqS%>zz!bl;|n~N8)EBJRc~fOp41f4t;!+J zBi#1)rMRZc!&qhtgq49hk^x313)E>SP}DroWn4~|#?#1rH=y;rsGU4IYXoJ6{;lds zCX%SDt7Z=CpS@g)oXmG*SELborHa6ah92wHv7cnO6_*uwBCx`UhEM<$q4bNM+=<_l zPh>J>`^qA)kfLS#*r1>tQ2G{lVz5M^DWNaJ2A3oy1RN=${daIN=@pmbU381m#ujDs zmGr&?9(CFI%TJvziuQA!m!1Tk^xa!~Ju$dpFV6P``pZ|1UA8;0vjsMse`TdxRig;} zJ|mWZ9Z2kaoK#``+%*FDN|z$@BJY*nTM8oBdWEA8qz3vLc|H_7EDm&+ACSk|=hrWJ zy+s^zzvEc*f3`FHlh&FZ8fzmFBL(-nxWYAeN9G5YN8|_po4!fFlFmg+s}tAzJ>>^i z%BU@6ak*V?yj?nY^}Kg}sS_+PZi{B>GcZdJ&-SS41rV};d2V_eu?+S2We(xH;j|sZ zap(-NoxpXbG^{7wewuJz6fjr}w7p=5ley99w6-BGS{eUXUV*q`a4?w#?HAz9a8Y&V zIx{gvvZQ;4px1t*dGvrXxP{rxjEOeDJ%rhJxbqiOu9oH=ea)~TPw9dbdTyD{YAC4 z_BN!+X*Bqc$AUutkHazt6^GrEFnQz$C6ksZM|`^k&Y*S zClJ+d%civ~MlTi1!8(*v!pO~KEw!~)a24+mGf*=}CX2AlsH_5qaym|}s4$o^^`471 zfPlM=SNp%D#Rt~rND;t>jV_wT!#PMpu;Ps-`nZ+kcpe7!b@ba7ANX!CNC!<5v(PC9 zyM8bLQL|kyA10mEr>(qCKXe3_C{B=`!*xLvrTH&KiK^8=!1f_zElWfjm*;oMh(UJW zoDzzl{CHX>mhE2q(D=iVUUIM)4IdX{G^x5RQ1Yg|HQp;H39Sp=G)Dtx9iDyiDE2&L zxD1P8M?FFnG0V#eeR@HJUUJ{{>O61GP$I-FJ@X-1|y;Rfn)d*heuM-FQh%IHvpb1U7 zhj=w|$=*=3IvnAvC5nP7fOtgj0fY0uHh@EqBd{4$uRhBC6fxidNQ8+&71_A&?9`1L z5P3K+#B@Enc0#SF;ISbcNjx>z=JGi=92e1QS(m1rOl!I*UTtWy_Y+@%==t(yBQB0vsBc#p~ja;Qe$90_JN zQ;BGdPbO$$s;$J`_5UG#3OG`~Cj%Log4gDbxb}sfz3M^^%8*k1eoe>VvFm_nd&q!( z==ZHL0oPNQ;<*_ub8=Q&fN=(kHhVBtbaFf#^dJ*FU>hHl-lk-T zF$0A-o1;~X5@+KLnfPU&(a+{UQz1f?NVL~X1poY182;$B276J>t3<|>^AJDv%rgk| z?h~*IR7E$(2P8F8W73`E?1AV5l`djq%imwT0^cD|M>@LXovvQmS|CpyHGX^GJ}&F- z0y>il^mmt8E@x}AtOIVtgm=&=7suZSu1V}u{J=ADGC_dJ{XwmZs^~@CIb8K zz~%!Zn!C}PsPs?)yzeHM3TK|t1NHrXKf?&vt|fsDGx#?{<*l+lKESls$tauZ71kgRs!WF42st~<6K3t{;0hBegQ&atYruTH2mWOC{mMgkvr z=`|D%Miy|R+2y;^Z~4=4S`V~V-~^Lp;3rf(w{Z}4Hy5BE5Jo;QI-PsfA6(%e!IH3bfv?SGEK0yUh$qDbz=FJ@}(s8-irYLq);+P4S)C<9=-eKR-9@z-EP9? zn>GVa_@TBZpQTLCXBBryP+oNE7Y-aMfLfI=-J65woEmC9cd_Wy$1yabqjr+G=NiNL z6w_~y+aQ%_Hn#XX)E>1ZN(@V!LA5*?bwlj}@ex|)M-af#>2%FxCph!yv!;8U| zzjdB0ag%GYn6+*xS+h(z)*LbKa`7U>0q!VlrHVHx&%5q81G{iq}$#^H?`2C&a?CLfZ=M8MDMdg z?AiJTWH=X~sc`cbNk7LXB#>^cy^|m@+roF-F&6J)EP^%FYI}ZkIdg;=R|(*Awa4X3 zj-P_w)17QjZrFzMFsM$Up#apXdIrw`-hA;!=dIH=$_wB%|6!wZ`~wF**24RO7Br+^ zG1&GFR8)cwC5G!sCO^{}nj?Ry7BXBmi?%DT>w*Q;)Q5q3Al;#{X>4Fu+OW|z+;keY zn~iFXzIQ%zhPv8#G)+6{wi2`vXVej0Q^@jAtma+cvw1%<*A#EXcd_u1L(eM%|;bVuKqFCvv;POgO+<9gOtH8=FY;Apo;eo@hA zHb5HE*}9=jELT$@pUU1#hov8J)BGOE_I$*1_XoU6mFrv?qeJ>o&qI;mMa}TLPZyoC zwLFpWMQhsYF#+^#R>5K~PwIxjB%=beP@p9|B@6@AQJmBmi9D)Bed7Ijh z@#SsOp%GnLdfC?ls@iwo;&45yP9G{($e0fljg zHPI+;l_C{il#-=$1OO(K-miOFPdr~RrKzv@AUH!&_f+)pE^C?v_w`bq@i}9sIn`-# zJ$UDatR@9VZBX4+HH_|1?_7o8b%mxT-6M=PsL$*3Cw>xZU=jaR9+KZ_eyi+uyaDRR zEEr~}eroDa;$LOv{&o{}fh!`)B7jIy?8jJHL6@{%!#WI+2P~ z0=bRwKLShMLB*EsJ7md#v}EF=KnOx6Mj#P6=(iVAaYi6Ig?Jkf!wQxWs3Recm`W+0 z2HYnXX95zFiz5Ih{#=ey{Ck;21-h&oM4$z5eBk*XuT2=}#WS@y`{x?fO~TCmdWC>H z=!-PvWsQUehauWEQMrgS+J{QGc@ML1 zTnqBhm*z;DC=;^1GEzo`7x2$>hH^bl=l?d92y{Cn5FypABQz(#-sOoTwhO1Tr&EZn^pXT1rHG3lUn4Le#oly9} z>)O<`$-J02QzVMnh(mM~A$dTHw`Sox$bc82hcUe8zy;jolagqEZu zb*aU%CKJW1ryl6#Op3>Ao=6r$j?Ch0#)2>ki~PiD(sCAqo-!FM?8?PVm)Di*m()Y% z#ZDT*=)0Xstl$*HBzMixM~tHhc}%$kN7}ue&z-aK;9vO4MZe1rY(oudufkOMs;W#B zr`|;N{Sen}n=vq%DJ^*WjKRnOQK)QRXNH}Xj)zUt9%q99z~;*mZGUIfP6O8#;LgSC zjB?&~!p2YI+KajEpy`cMd{eXez+4{U509mF8haEU;u?|(JOkP*Q{|7W6Mr&JDtMGl zA)sEtg4foIf+~iM-UD8Y4vcW6aL>NK4dwd3w7fsA5+F=C#96W$R#f@1UAvWlzdTJ* zP7DlLTvmY2$W%CZ(eZP-YS8{t7LwzmbTwVI8MtW`_0*?8N_|6ED614k6#E=Yo>af# zx3KDC14~U4#0>^ zx)c|*96L@THq~E3ijAch2hXqB+btTS%nEwRpqEH&W~Z4H8~Z{HNh43Uoo5|}V>Y(C zF9u;N`zUCpm!v8?CNeJbTvlT%@qy%*% zuHd}&ugtA7z%MXiLVBu>lt_9#yBRg2-MWlvXTgo|ry|b^3GdgISXtmC#>NmXiz1h3Vyw93+10L#jv~ViuvHv6{3J zfxj@dtOj9sO7IsuTMfLpmf^(UqcDq|66v`TQf?iZeeD;&K)h_jsk+yGuL^jdx!eAr zpf+}~A%rE|i0LC};%6|FmW-lsdl4pvjlwe8imWpwKuh0Gw?Z4XLI^L*_PoZzCl8RK z$9n(O7Aetu%T5VunPYmM8T2XQkHg!bxYw=P?seWpN{+oU8!~Fzp}rkBhQWnS(G=XUBI3c%{^P=qr|H4F~k>>TDw2W z{IyyGf`Ae!TSe~=qUfG~A6lpr3Tosh1KU5a0RH0Aw_W*Nc@-q}%BQ`M6sZ8a4DI{& zuS3NlggMX3U?C~~mm~2q;DsrXs0@(vjtJ_@Y^+_pg@)|?=@#qoFR+v# z5BG~WDo8WCdVn@{^AQ{JclzAkUjjg7H^BPqL4OTLN|bTldM2UR!n|%=vdVlLut$h( z@e%AosfGS*$}L=p)U=)M|C;&F-DO7-in!3kjK)TJ4s~dM!e*#M!0uU0%~3}Sm$pXS z5InW#NgEeemR%{B$rMI?FNvRO}mQ8SB~v7cMN@$PO! z*sP(lbk$(S2a;=#hQ82Y&g})m{OF*aVIqWBKFoCLiO9djXbj`l-LhAI;rs7vKOGbR zqk?Zi|}j(m-e)LQnL*%9m#ONH~7b@5w0U0eSM3oW|B zN!kL&16^IBiM2p3o-(9^oFvXlghq0);Xo%q)PE0eCc_9gz0eajL8lx{uRiF0M%jyI zMIZoWySb0~{ZlgHcO?hog^!$bH|=leBXgwY`a#v$+ti9wj*s?Q#;ihgjJ3cEF&Yu0 zdCMO*9;?txmQO#&DC|6ibJt%o*wb+=0L7EOhH1=hI%UlAnX3Maw;c?d5<0!a99=Dd zo1nduvmnyxgT*Xhyf1(m!0IM~%gBcBG=5uWY7pcD2VQ342%T$?l~NCpkgmc9e^GZa8P5XsDjKn5B?a-$;*D zQ*KDF6+x2$PLJxXR(fn9jcZ@aXWau(-`TVeb5xvLc@I+ruqSj~`1Bx?xe|At7)nA* z{&QkOVkiCs_9pb@Bt5yP-bWmT{JDk{G^`RzXhq+pexsU@Ru8iV73E=sPPe`bC?StXna2s93?fu2-=?UbDt2Fsa$i z=%Zm)#6%(vgw0VInR$1jrW|0}VE3}#P5z*HUK|Z-NEGh{V%w&4xKfwX11T$L1l%zH z2$k40TtX@M1r2)0nAZ!YKXYri?#Qa_pxqpup6ep7_S>xXcHqR7cWz#Y#QJr`c{Ok7 z?QLYP0!JDgU(5J11Ya&Ic5I5hg-H!}*?g*1lTlSsZ7OGIjw66@kpYl<*Ir#eN8DpqR$45BWgK2T9z3R7Wlr6zwQ;L6hSJny1kl|R{*A6j6 za^;0l2jwl<(GCN6>65o(g9w=?aN~uHp==^A3YOy~1 zG*^97mXRtm)Y#jo}1Y*q>26D3Ayg>cJGLS&)o`T6*+V#fRr7I6a!?%C6rAsvjGt+@_VhjuTll^L^ z2GZfeXtf3EXiTe4uGS;@bH;tmLQ)g<{gm2>+u3RMElf+d<{2=L)-a;!#+GCUjnG?_ z97q^UwnW)$6$htv17uUSWO?>^z#! zQ-hWS?BL^;P1z2&p!HE-g9QT2hAm283{OUfsq06!)%tX_T2-x1pzW=*P+n7>_$2eap_+n}G&m<_NGHU9w zF5W*_5lKc~`B<_uvc6RX;|R&y>65Uis|B?dLphk|Bewzy9hm#ocJW?Zij>6`-?);o zsgW(Dtett zQ~`8gB9eU;_$boRyl^N)Vlom!@d&sPFe*l^`aDZAxGY(#7HH2SL&A$RtP4L4qEUDe zt5MF}8J$v*kYMGh?P&GzOlWo%>`aK)86Ce!W>N4j%b>OQn`bN{6gN?8p+jIF1!1d2lT}#rsP|clWG3No02kgMvEC7fBdND8_a0}fg&0uOQ#QM817D`eQLXHj4 zFKMDR*L;yG+00+>lUrH!vJ^DgE_?HcAhqg;HW0v4>C?tbG;R(_bdO;hmP2H01qAKe zOIY!%9;ziO#wp^s$1ZIohwGL>^W*k7dt!y5kFg(hL!{#(g4QYG!dAB{ZhO%=xd3wy zWM*4jIr4%Mh3A&zcrwx*zS1WA53WOaDQS|*TO)XprStsE3ie(f(s(1$1O)Rp78km) zU?WC38Fd^OetqP8#A7^*dLBvnjkqhD9mQTa)f44nX2;7Tod>}~%1fd9JQQ0u(jSXn zBon8kA>kJvQ}=2!tfZeHE>y+-^&B9$yx}b2sv#pa~ORMiEV=aKeox@bogoM^CrIjqC&rxjPN>*OA-gJTiY)Cj$-xqfEsJ zvZ=J*JHe<;GE4(Oai1zarw0*M#R}{Ric_2Rflfqfd&I)-~g^ zCE*o=CmS2`_5})6UuBRUURslT+enK;%q1C`ZPyld0m8>oDK-|urc#?Vx z9uB?rU+v)Q?93!lAjY2oL(9J@O_B;5F0Ka!5^~kQ5CZkM#S_6vfoI&}xZs;WXddxC z0Ki8eXukm*K6b%Mm=KIkp%>W#zO^smop`aFO?LY2@iovFT^={5hW<6PE zOtZ}=u-+k({+#fWM zpjXX#msoy{rzMy*2%M6xu#6f84@Mthl!=Oij-)Ag{Xm42wyor|1(!i^?3(ZA5yk~G}PlZciZE`v}D%<*0^)DBib&G?B9s=*@MDZGeQrz-_B=*j+|tIzfjwpn6e{5 z159`y6~b{(%!w+B8{PtY*t~m<^jBu6?ZZo>XpU#vop-J7aKnOoIM_Pn;)ya#!k!!) zmp&(t)~Iyv&lYQa=kNMn+;+mi@rSwAL`Jm1JV?yHQfCFdSECGjHzPps{cxye)&z7q-sOpw! zQTM^&>%nI-zL_P*VN9!GuY3cxMb*_59Zjr_UNsxDF`F;GfppEE8tm z>N|hRvAia*Zc=k_a(7irbpG5t1nN0__W7P~fK&X1hn;vo0m6_hnA-7SCT7-l-EhJE z2mpMlNlCg&$0@cUHSq5uowpttn~5$2D`k?f!BPh0HzQ9R$298mFn9C|RBpoL%4z{? z%)B~QT5HOIAC-As6j?talNVM2kh9gYU`mHZk5pq&V7R#dkli?KK<0l9kG6B-AMRv; z5E@wWrJj0;z9$)e2Lt>>I1R^Sr^FBIwP4o@ zCP}6E3ufmUB;{s)bDN(Nmkv#;(nPaVI%x%JS)pke`Whf@U9>a~>*2HH+189_p#zt~$o4tB~)gmWB;IZrv3$6-q4y zB(@6?t&tDNtG4lCDEMf8d&HLj%bD$UWTPpBYF(@;-o85*D1DQ|Y>G9bdj7az-gu9y ziewFDCJWg*KxrHfFg_zhv{u5xnaNl~o5_d@^C9`%bid=6IPcFBxH$+#k~05)$a)K? zIGUzy7SYiMQJnk>F=gVx301ukdUGl?^f(a^ z-`QP2v^{}vR$-pSp#{1a3%`(z%L|R@8}}M(&v(i^!>H&+@GYCyIV2652Y+_)pXDnW zO1?h6{@%a0F*Cr+17Y9AhQcNfM^JeG#m$pb9TC(OW3)WrmQRu<1Nk_;%A??Sys$i> zc(luz;W)?X9g@fqo2fsL23YPkY34{%^llx~@+)VAKu%Z2%T1_S<=QgA+<0JP4gH+< zW1tjo>)>F>cW#7MkP{)y8Z8j?d;Z+UHZ$MYHRo;Q&r%KxtHMMgXpdDYyRz-Z*2UyX z(_{`%_k$T^!9J62Q51Ch`J!>k;>`7{SN;g=MiITdHqfmT!j%`E-^jsQpE2Z$HaU}? zxzB=)bh-~oq9IE`x1}?RsLHRT`ijxtKE>|Qz%M`N*qpzpPJK%iSFOb?7%F7>P}{U> zq|@SKYe$>Ee?r;vcJYf~Wd3Zv{tmZW-w5y>{+5aL;y;OL3o21ekg>k7C?pT)!;3H( z1`p4_l}UL3|H)6si;8mnlb`;}6VT0s%Jet?oDc3!ZVUHMei{YDDK44o_SnKOWt^URdI5(OCb~ShiX&A$K>I?!fM2W7octKL*5sI8s`9<7I!H6Vi(%P0EnD`3z^12AXBuNQ%$Tz3V(g?jvAuk1 zMYVyE^{KR|=E@}`e-MOG(eTY(Z*g4C``vX(Q;5)Ve$)3%bQryx$lsx}`H`M1^`TaJ z+iQGWwvJY=CZD*86E9V$4TBi9{ah&b)+Ilb55ZPMhw6j^<)8NBa)bh&X64bMXiRz^ z6C_3Vo!vqT z4_;8&A>YXb%C1QFE?SkiZ>p97O6Ry{FK)kAXxJb|6;!DHpxKIO#j-VGJpGWu8|guW z<2axp)X!@>MD<~UY7bvtOXk;Sqc9_yK;3AYj$PxNsuv4wpGcEJu9;Y-ASC_B&6Evl{ z9%Z4H01yEA;hh5`O85!;AS|h6-(;{$mNHEkoBM|%f476~3XIi3JTaN`FjSVc*(CH% zXi$!)B9izL78|k&DlxobJ+UY1D!^xZGUD)SnT(Z8huKljpVVbPSw++FT2#!>RGIVZ zWIm5I7fwwV)pA6{NTgJn5!w+uFf6odk2R~}e z0|t(`#)PGaaQhlEsVS&52g>j6)#o#4F6%W!%rjqo`iww9Ix8phi3X{F?tr>qW?Ocb zm~`?~qRh4EBBc?z>6=&k%?^{nhRDRLb=J%3jLedQAEpDRT)Fn%sN?sd}OnmUcr% zv_B_KjIqYB^wnzKok0LYdN>j}M~1KUVc`9_9)ZETL&NL&kH2^2^Bp#)w9J;H|Qy` zF<}V?W-9c~of$K@wOV&__j$C{shAp-+C0LzL%fo?L#{b^f7GG!hQMu!ovq-k==wNg zPvds0p%1Q_V`ZAmKCV(>ABdBNT$uthf_!Smy6pKH@^-o+xDD+&HM2io^zoFRWPHQj zMT$ppP(4VEK=NL>Vz}sw|Rk3QF@}iM*W?BL+t7o4re(~4Hw_2 zqQf;AQA9ncgeh14M*>cOe(!;rAWhbWe3?{07)mcwf-UlsyeI{7*i`|1Df(kizPf6- zZ2q`EG9ydf5qvZ+Rfh@KtyhR3%}sRqw6Jh>sRs#Bh3fxl}P(Neql;72!CJxoP4;`nc|%fdWboX!IgBSVRLrXrx>_;s^3i6~7RPm$}V z7IL$o9XH1zdDs$7#TK9$9abU#Rgu`dcs<>|4~k`s6GjNIq>He$YtHm%Q;+uX5C~F5 zloaSu*36UeeYozxk0B2aT=pgK#UNkyK5~%1;sMp9UmBUG2!VU{5gYE@4=IGx3BnG8 zrkP;YtaY{NnttF%(`7||qMLd}DBJIv5GkGm9(Dzu=+GV#V=ojxtJAMwoJEfx7du?eva1@%!R_z@FKo zHQr2En3nj5vp<$t>yw|VK~ z2T;4JC;>gxVRpjtGDFnS@yN&FGxO!4(IY%tht%xwxu0@9;TRg3buKH`QK7urpm$YK za^Mf8urJmj#1kS@ZoGo1_`Fp5up@SI9mbfd=H({T~5UMgvH*3j5y8?^|69w zQqm~I(?S#43w&_0bGs7(rsk7%Vv?&yZT&dS6~v=l4NL0vb_ne^-~QuZ4x1l$4aVj6 za(Kmy4(ZC9e@%IWHJr}kTK`%?m^d^0>JH_A2`W|-r3cb*ihqXZ92!wTL%tWWDhY?38yPERtv%r{O zKYvj~NWed|T42=zKqj9_twC`zV9l_zvHjOh zj4{nI$5jAI$20v4l!lB9Hg)cAlb}xrhPbG3+QxVS@~h1t^Ps|Wbf!{LJx|MoM*2z1 zGTk@vsLmX5B9Q7l9X^gZs=(6Np%T3SBz{wQq%(fTQ!vk&C-;a09GH;X2qj8mAxy zdJba>=zeSBrQHu{w~0b%(7`VG9S`b%1k=QqR71%S$e%8qh1%LXT05RDL}p3;Y;AZ! za6>#05~zF~cY^GK#HeoWIQ}@4DXK%sD38R*UF-4nT%G)Ew!9{O%MV%vBIA17nTZ+x=( z3x#&c75WP@O*731{Yf`f9TP7qakTIN`(Uk09K6{S{d%dIx@}F~Tq9bRuh!=mMQ10` zP2#iPX+Uhe!!nl;mb=4sngY&q`h~rqQSvTHqm3F2^os)vx zQk|?MlYEjM_j%=IvfTn$n@2y?GWDLS76{2+I{+mFdfoQI9r$yQt3OI{S~2V=iKWRk zUL5NfewPq{!zxCtrlZ+O#8`IpmXL{VYzw28f%-W#zkSplt3}+lH3w%@)~2?=o?qwC zTRxtQS}je<6tTEnn28$YKC@UrT>ZIiUjx0ms`{ywEGyD&XU;RD^*81RdbHyJCByG! z1_i(;vo_P_@9bPG7H!VQf2^GCv@}?qqhcAQmJL$Qg~~FI&-s|VwpzY$U)TMz8)^3n z!jK>^bvb#I+mIX*a%R_da6g24G?*hjO62jI?+L-Cj_a07N@x@&hZ}hg%~l?BRUEe2 zaw&e2si-}#xj|B&pooe2deU}YTXpYO<}V3MzSK}m6jxhd9jzW~m%ycwVYM>4D&A9` z7~w~s>r9!jt&XkppJP4#zPpj;w`kVX$++QX=Izr?S)bH6_bd+0NNtJMO7UR`3l5U5geK^!X70njtI#P>cSP)1Ep$+ zqJmy-V8}s}x}yD{9-U7#Kmgl+N5Pt7wnXfI|1AE%ZcD!!G(Wa}v`N=o7 zn}E&j4?NhPRMt+x+)+US7xsec zP+egyvo3v*FvB7lTZ$E%o)!%|rF)vyK(#iL#r;(ERx-*uWJ{hvM_k9g?1nV8PrSN! zerTBGq@(8bu7#?st`TDtqsGjdggFnwm#-F`*v}Z_RvP{DDpefD8$8l>|J-sYCJP;3PC`-J^Lr}R^iFl3_19baHO#UJu+C2Y-jW*`r}r!s2wOJat1KG-(}eB zl`#zB_A0|7f)1;uIQ;}3puvYAr@-e9UZAjFz2Qd_Q7S#$3hm5U75&zO;Q z!?8ndTf9CP$69pv<_P;A6I|fxI_gKEPWg9kZZuaRSA`)8$XBCbiLJbsft6aESLVaL znfyxvYTPZ>a})k8W6xo!jrdovO4QK87SeFqh9C%_bTLHhaV)%@&K3~C&l@40yZH<< zS%h#g&K#1B7mJ^d%^YgVJU@yHCmM@%3qcC@r--~aW6f@G`AYeO5iq*N7^9GbTr$eK z^iQZp1k?h>&tL=T(DE*jLSmEImO)!O9H?_`nPvZevuR-qzfi~AgkzYKnZ%H^e~@3 zaeM-?4I<-%-i<`zfbg`0y)AwJ6vly9h})I3H+Ogk7A~HEKBbpUl|?Rxw8s~1-P}k8 zyl88f*U{B2T%2bGy<0e`k5fx@k_IgKFWV&dJb-C(v|j|kG&%aJr7#)W9o~Cx+$|@G zL&NwE#MqyUgS`}sU!4Zm;(i%<-JYwtFxX_dE)$wnBK-jN5gp-J8oj^XU7x*n)3v`p z-mf7Bew=+`)z)AU0WMLavR1v47TZzI&Klrmd)%t}EzM~GUGy%0LMM2%OwTQh zIMJ`Ie_5H!m@c|h)(jThzxg=Pn*)8C2klVbJRhpP3GJRGcjg!RVo?*5;b_>(iVF>G zPZWdZi0z*pzFoPnBX&P$YisdI9~QV{SBlzU&-?^DQ2oQmiNIiW9L&6)nsgLq1YE^w zc5|#M^&d5aU3lQh8wTLly+4ecy)Fp7o}QC-KoeeF)<54Hakx?TNCjDlTN*NP07(Oi z-o1YW96`XkYk;cn*1y0;x2WHpSHQ}Mm(<$ClGG#ZEPreU!9AC4=oSO!Bi@d$Wh>7= zu;jEZ`&g(tk39j{jA~HN8;GJq>lp0ZRI-6x=#OpsSzU_izrYl0eg3@&AePYK*v<(px- zCH@_&kbczL+iVYB0c>+PyqQ5vyVC&4sE~J*J4r{-Wh_H_u0Q9-H9C7xxm?Zqk`(Y8 zZX#pAr%lp;hl@Di>nFkswP|?oG&O!=r6K%>%&qHdQ?`jVsS-iTr=@T}1r%>kVlZ71 z2F|yMa*wJuNQlt@;d4Rt#6!sny$quK;LhtUhRqpeBR%ENgN3eyaP-X;EVPtp;zNax z2XnOEu-*b1%jd=TqPf@!_g}5q2z!BZ4c5*&O9|Lc7(qYu&kOxZU4{`5&*|DFzc^cc z)`6lwRNY%{=JNgX-8tQ!+DwInu*%!>C#}*em{bP8w=iNRUo=GSm%rEj~ z7FV&UdGMRdy49RZ0y&ma>^cot(&uci`bS(u33|_@`(aA1gv81QE={{#8+@tx=9ov? zM)sH^7{b2LYP&3$VpHigjv3xKwaF{ius+Nm$0NQ;6to6S<$v%u zrZv3&l!TfwYpe-%=_=n5HLF|?)GE63tKcw;pP~8GvoeMsQ^}4gal5vqt;$Y~M?6%Q znpx3^!~oHAkV}Jo;_=IZ=j`g!QkAbm%VtiZjq9`etT83P(ut|Q@Vud`21+zqw0rR;q%e8QseqFMI zn!*lpRt6Npw*tjXY)yk{fax%jVUF8brlXQN$OSZ5()IXig#Ao*bc9inO-6nB>%x!i zxXFQK(0nnPwGv9#R|h8BzKzYsI^n&w<{!h0hlT|mP`c6K7G+0 zFFiP=VbalAiA%D~uw~gFuT~^jj-TgakgtwnZ})knXG{$_L7P_KI0?^*cZcdr+M}wz zn>Pa6Ld%&eSu^*XAMV?4=$`ED`dEJ&0lH6lZXwb?LtNF_7mad#J{MC-PhB15 z;UX%mL=3&0vekZ*1VDHBPoS91+fq82i?wpok#y4jqr+)jZUffw?RrFi-NhMSFq4UW zT&l4qG_k3|uz^H)exxAP2AWITDTQE2{<9&XBR|}b3sLrxc~VGl{6H&<-7`S<3xm&U zbn3@g8_kt49<3f;2yYpZ;FIiLZ0Ppd_dqvf_FeUl(vt)C~(Zc$5O)-?qEEgQncw@8tGX@~D-?Sy-?i$gxVUudlix0UO2zi^R z47~z_BMzYv3c0}byI%$5Ts}Os=utcin7*kmw=xFCiaL|m97#=2G#yC^6Qd`3%p8w5 z9O}@6cYC+!0Qo*AO>(vMtL*DAO2>4Ye6;8?NMPQ}P-GUt7-F^p2nS|iwmskpXV%GP z5Xmn{7(w0E`(IcT14e5cb;xbWYAnJE(-$%dtW}R~#>GgBKZhKa(xAA<dmY;^9QQ;m$!VbYz5PI_v=a~6=h?=Z1Q}lSP7Bl$BC$>*vmS!o|+Z1p}J41LZgB%(uYQqiBWE0`L0c?S>51bGby z+azG5tI!ex1z*T=`_`bvrzgK^n=V+$6W!Vmjtx~2;>T>Q!gZiH1VcmOZ7C?T^gxWn zIS&J#7-h&R6w|Cb`#2F2Tsy2VU^-{s&TR5Wf!y(xS|1qVNig@f4y1>f&xHqgjg#h< z7qCygMr>W=u#?)VofR!gT91zy*d{%`{Q3&FA2X(VM|z2bVj(PU1hZc;ap_zYHlNV$ zH4J0sy0Cu#h-7^e4Q0g89wWOyMkTglTmcJKLH}RazJ#X!gL%uGafr8YZZ}oof6(Wwm*D2 zA(1kuSgLi{s=rLH!v@92^wu&b8U~{eoKlRCpw%LKEAS|`CyipVowOZiEQS?SVJ@4y zNAXT5P=&aW*HA_j=Gxco*}gGCP9us-b1+#;}+<^!{lA;A4O=9wmLF17)urFLG~*w zFKA>44JI||%3fXMc#*3B9o8ZHreDmgs$F6v0IzKi^Vxu|N+-v2(^%EkRiwyTb>oJg z=$1>M!OH&H(rw(Vb>0Ft7(Jq&0|?gF4kVF+tYuz+NyJFrh)XwM*)$uMr-b0T^jiwj zi6df7fES3>KQYExeT&K|e+W}&ood9-W*w#>Cu=|E_ghC668YS@Qz`t_EjAh4GG{NL zQ+wZM>VBS$bp|3EV?IS1b7W}L!c`s=5fzIohlmuU-IavZT3t&bd4@JR;H}P12db^~Z(-9F3W_z(DY8bL@Myzpm`#?a= z5s`!{l}CcW>_kkhz4Q%)9p!H-@YCc(PVp}r*`rsRwLXB@*Ql0$VEbj(9_ zs$0K9b?l@E+{XiBect_ip#QfK;i)g?E10JsXB@#YeX?nw^+y2}WO}Qhf=F-VNJmL8 z5#gHR)d7rT#O{qG(SBCydRzlPnDLNrak(W{Hy>bTsmcq??orw4oJOB5vfcPC>3#l4i_OizgtzxNq2AuW(GKasXwu|h2qQf7xBf)Cg?<nV(yDGnUY;(iu7F1rpzNkgr!p+(V)mnUQa@V*8y;6EBJ|KDl}dD9a~6|%h%c%`LCFEsZ@J@8Qq9< z9f=~Y!^3)63L6-(63M&-q1L5cLu6D<6+b@0Cn5=Oph$Pg8!V84-HbK_gDW0D5DLC; zw&eq@O^>6g%eEa3)78HQ-wEQuSP7Gr!2%1IvWge1#fSq*@9 z4Ojdk?Me{4zGMFv^IH#}F|*$Fq)UvZsK&5fZZ5@m@Mijy)~58yU~rPL#-y<*iLX1h zVHC?58mwo2?eVbhZxu*3l`#b}tZ~{G=ft<0 z;H4N5A-Pt+7!v{T%r;;sp&IX}aIldv;bJYbxrlP{JH4NtUT@B^UZ6*R?14yGmh~a> z-WF_YUa-wzYUOJkNrlCD>o8ItU~KI&EqiZ|0F%#p<07<_Tzq$VQW~cD1jRjpRm-p zJFqX}#)QIyVqpO;4UggR?VXMUO81|aO>sbPhN64mjWqv%LKeana0v*l10v%VKcT>` zaENhJH$;1Ugm`0gPJwB|0m!z;cj3q}O&+O&(u7I|TQs{oX4K-MxR)c!@&~$@B|GmI z^UcnanBkVfgZr6S-pqyK_=2V zZ`K`<$n$;q)k|w5CsIx3IB8}b-%f*#`j7HC+w;@I&i&d1y5u2vH_Zw$WQm9ax{*4f zRj!fOP;c=QM)YZ94lACK5#W{-BT;22xuSOjJ$8uRNuF70odKlEc*{^UEgQs7JT6;o z@U!gGQ|tD=0o$;S7f`dUp*7?fd7)JSkHEJ>+t*>~lioSUea&*+C>**Dqn`YyOYRV8 z=vIBU8VwaAw#%^XW8~sD=yCbgWWD5Cr-4wtU_k=G)&&|vIiqxM=4=K1U_r)p-L>x9 zu&fAH_8Y&No8{WWiC7O%ELU8`-_(eN=K%G6t<;MJF|^VI@Plufj{_aPgMWZSiCq5z zp5iNfpLT=*K^d!;@-16NpH6avO;N|)ttL`%+*XDAa=)zOjt^r%73yeFCXQ3(+2&JE zgX4_E*KF1lLp{%rkgV(IJvF5*FGuLmbc-`^&HAy_Z2 ztFQajgAah)h476#qqmyphoby1_yBWfot z&E1#-K|O((Io4`ypC)}^zvWU5!_ahVq<&l)8ViKW53gcZb-<@XfMo zV)?$gu>mcPn(LGb*H&UOq>e?k)xL!C_>_~dCQw33DK8>MU$B>u({DgoC$EGVf-|bk zotC){#!kvPea3Zza+POe;#kVrP&^+vjNLXR0n#R71uT-Q3q^c9mz;}AJSVAfxa38l{H_W|w3%wQul!4xtFjp>+@8&Dn z0$Qu)=|sxn?Yu4?kV-i8YAw>Fv6b3m@}VRd@;ndnZYLV91wxK$Ti1c7;!Dw1SYB6Q z5-7yA`-#I-H87uBs&$laf3M!vwS))@s#I^j% zl!L*fkyjSlim1>CR0W)2e)tmZoFg}{hrC|7euT$wqQyLySzL!C>MLjd#Igi+q@fT_ zn)K0wkKDghnY`k2hxCPHAM+I=IBEC`Mm=NWay_#KvxE6pg4+&VP%r-YRM_yL0q0;` z7*5~t^vVZ|UWUhm*nPrevsBm%lfFuF0FEU0@}i2ZKI%{sf)j%F$5rd@6R0`n1-fL$Oj7>)S+KMVX z==kJr4UfKPd9?N|(2eZF^*{yL#ne-JDk$o;uvV@c8_M78-Nt0Sq8ktEdIcilnylL| z7*x}7%a>|ZE6h`|*^ufXsB!1B10d3%iY+*>jNU;g5%Xx~^316A@x1@d0~82chczRV zey*w&wX0!vPjUQ#?alXT9NLV(DSMy1v{S=$MVAoPBSCwu=VIi@$T(Ri;+CjI#><5e z|Djc(a>TRm>zCTVM#CuY>64)@3+l|Uaz1W$J|6cWOez2G05@$-uek6tKi>1% z*v&u{(~L6uWgR6>EO%sLV^=PvHC!HUT4X7IbY2~Byab;rt@e||m_nY6n#akmr;Ri{ zF)X+Pl*yDy5Ru6=j9XD$>kRgOX6+(qY%~MRewFjIM2QP>m!44IC&=@X7&TVvI_o4( z?&z_h9+mUtLd=>d+muyVW{NQn}XB5nd?TDxVdp zYu37w|ES^B0RoP`{2rq4{y;EGr*?s63rJVC{$rP9stW$Ku!4@JOr~H;un5yknP5S| zQJ%ay?;ihO$%(-z>kUlR5(_gtIzxmL6Ov-s(o;D8o@%!O0}1boB(Q;+&kY2hN<$vD zD;QHwHp#V%jV~Sa@0(DlI<^2{VUAb;vF~}#Gn`~4zb}`fR581fW-`nZe7cWj9*GlP zaUD~H#@ZS3fzsQ&NQzTTI~iMyrYF(>RL5D@iW`y+aTpnrikzbVxy`HXtns2PZ$tOA zcg2bQ%wQE~{Y$z~ZfeZSFK*NO`$7twuX!@g;^#x_a2mb5+yX31XE-W9nNp)GU{+?_ zJ>Vg_AZ`>y?u}tAX#D_zY}t9Nqmhp*DwT_<9>JbenBjy{lq-I15zI2YzkQzZHEhAO z?}IgXaY;D|j^d

    FF;0(u`f7XE@(T0-&Wxzq5@S&%3H zofPvkWm@KlhB!4KVhn9UN0anBP?3z8Ix(jIr`V#1osJ2@h0D*FBBR>I)@ zJ>l7exZZiEJT+dmcfg{wgh?(}vvvogjShlyhT3Ghma_G+#EtmH7#%Gzb2mzE*uHF7 zF)V3#kqCoG!}~hey0-5R>=4JsA6T$6i~+iKtKVdB(73;hwG~D< z!E5b^bd`Iy6ICbm;Q=v}GdK8yE03XJrnme8-k|4C3wLD&MoeEDHWpW>*+y+%ejj^J zx82p+(K^4NSC@`z2aCDJQ3IBbcYxovI<43)b-+c`eP+J6Uwi(%+tJB&Jy2?@Q|!G+ zj~MMmkRFe~hwWdTfS&wV@MTB)oG8u7-?weH!X&&A@K@7|*H?ckd6d66#n90`WEsZlTg^@7Pd>a7OU`>JelF6wrX^p*e8> z1Ih9&PhK}0ytuApemSX|hctYq;gYH^6U}yT$)`+^FOtx@W<|0r;;i z>Y55pvuqgc&sw|Dvxm{AH3F)0VtHl5rRt32L4c%^(=g4Oo%g6qsoL=bQ7tkTlY+jX z>%{<0rvbx{%GJ=*QdcnaGAIG~=c6Ga-}HU=K~TWS=WftsfG9rDyN#Q4tbJ&w0PyV_ zdwTjdwd=D8txcbp@0AGvE za%QpZpU9HNdQ4I?-AC$B?z_}UXw&t~7K06aA~zC6Zd1&RyJKxUo*WZbu;k1? zRbv!skpvaM#51pdiD%LgLT!u8{3Myb9D3cj7Rsl{U@-uxj~63pBiRYF?V}GyOGy-N zxqOVZc9b$_QX{_p5An>|e~4!^h{WH@n#67l^`xu&Moe^juU>JUXRrj$5_le~B&`bo{nGQl!2KGBpWQbt!g z{e%Zg-#D)&aaw4tdH`TW{akMJCO|q%!Gby4Q+>4X019My|fH z^n;t(tU}oVKB{Ur*Hd>UU*E-rI{B9X{U-`26H5v#)LB<uQz3rI#MpxYVz-B%$|(gv6WF z4-)$K+2F$$<&zAqo@^bT9@X)+e+g*{W`5A_*FBa{5|Gm76imG7@bTEFDRI+{{`{F% zhZ1E7@jlWyIl0N_PA?tx-90u@Vc_V+e%0Jc0FCfzSy`b^_vzf{*<=T%liw$KNb6vi zs&rfX*55*02-u$RKuywi`E{89#BArYdL_v9{k`Om_N%{#xKMlg12ujd`8Mo%v>8{N z-g+@jYMgJ5Uvv#6Q&;d$Ue0J*$jfYSIgZV|`$RWh_atH-)XKxPLLA%JxeYA@rC!OY z8h8jCk(r&w`!b|Ztg={zpVgR{UIj;s$bqrBM=mR0G=TkeQl!agz2C@KdwC$ij2Wzf zUc0ab#NWa7SO|6{xCW2T8L6HQafrY4ko$NoXNwrBd)Np2CxgM2nJEFN&J|ZUf6Gw~ zE#H(vbp^L25prqYKzS<}a(`r-woH#|p8f8%I9ob@6L6KEZgzW*gZX+B87lyZfS69w z*siBR1tc!}%-!7~o1bGiS3?UyE;85K=v9s+Ss!GnOY;!h2C)H?iI3Y3v7QKufs2m* zL=j0#>@%pKVCT!@6ZU^cY--oiAj?wzUjQLQgUbdT&NXnN4~C`oo-^?_GXkM|^YOa) zu7almzejW+V7T!ptk`_i1CfM*$wR6gbasy13J4}#OD|-O{mub5PcmSm#&zkvX^lD$^%q8a}kVcBFr-bxKZPO8rSt@ z0~$3fAfliqR4I7qdNBX`3V3G0S_LZr_`l5~5ex<93Q1#-W>HJ#W~Th}U8vb#B*KQ3 zN$EX}6(}wu8<_+Hbur#jMr3wx*0Q`fHIae^8Svu^VRDyXQIPjgWV ziM~z6^8`H{8{CEz*3$JhxDt6!yi-dFnAExp-b1sU^3nwcwBZ}jwVDNKeM&I6Ejw%O zQ;~R5ocWTJMT)6wJWOA36~VNx;FwMe#(02s2;#l=k_m-Vt4)LlI_qjU+Q0dd2P30L+IjWzdZHh=IS{6ixmm__-k z6h0)+NqleHjR8*D=?ix_5go=^b`xnM`bkoG!jGs^w=`(XXrn-Cc{iL+<6o5;TRkoqhDgRdU&aRNquUg&-8*3-^}Y1nvTE_XfNEc=fx z_%HMXQ(u#?{b_~THWFkSevLR;35{KEs4Nw&jTALxtfX{W87aCwJ5#^UlhDayokh&1 zW?}Q%Cuigrlz&MfqQRkcjYVr>h&OHU-~$ma1DKpQox`pi?Xm;X$Kw$aH7 zGwVrS&eGQ&z|?Gv9Y6iNX$ocZwm;HRPA=k>n#%f$2OfzrJe1e1{L%E$Cbe|2$kG?Y zx_rbdo+PZPaRRKR`S&8AuuIkvIn*_13@dm|;j(IaYp9+BGNP{|$!89;Rtm;wMrOjZ_{&AJC zc2Ivl!(;oz18cONIJqtQ@VkW0T9TBNT@->z7+^F+A-%z27jjVWWy8HnBBAbxm zn77Qsv^c$Z__4NMY2)}VY=@N1fbGs|BUK`JqXQ$3-9{jM`c4?&z6aAIvt9*xc*hJo zQ6`W*4JK6$fB^)XKOs$GE)w|o*ZLJ`w#W=PqJYge2SesH*%OQf8zA|VKIJ*{O9`6f zjq1u%4v{uh)5nIlEV&F9QF?ECOjIq4^e@sR8R9lDHcXenl4^QQ*AaAA+M8WwK|H45 zxh9K6_lbTY`%d28YX}Gui}(fwf<-fzB&r9(NBk{s4v$D}NPQw+iX?F-r9fvy>-un~ z8lV_ulT|PHLx&ke5jT%9I)bNm)y2#0qa8K5rfL}jv`b2(3>idlBkGOj+LI+F`wIKb z3^L!|67hPYM$%-q>PIbeYn2Q0!ox!45BvOU`(&Qz<>U;D<;#+&`muD>s!r?JK0%<{ z)hQO!hw#^LANeoi^^5hgA@!LiAkdH*VaJA?CfTStn{Y-rf6SuzSUm5g1s8jK52sEM zk+9giLdm7b=U}2>=*1WWyUp>UxVVJ|_-GgTr|7td_+Ch7`d*r;>YnD04%Ymm$A=d$ zUP0DwCb>^rwg>leuPl-aJ~CE7+H{I=hnC`kWUqvto1h6|#}VQf56EoO zT0J%f>oz^9-fV2UEJs1R{iy>0N#>M=yqL~!ltHlT*isSpU_Kft73_{3dJeUuOLRgB z^xt+2hpGz4H$ERUWY?L7sABotLfeM-QsN|`GTlu0_4l3alDsv-)E(J@ux(8kwsA5Q z=NKF9!?Ox4mXqfsB!-MwRv3SV-MeIu6d^E18HRA9gKm?8xZ;E1eaROGB=L?zc=8EqN_?s6 zTG>D{D$b|=(>4oXXELP8s^wqPwWMUR!4_7;$=gzaBX7dVL@~&)R4w;|Ydec1x-Q$5 ze&cfOTcf03xXFnWidfLMkG)SfZN33pYFu(9=Ka5XRyURA28q7Lj6=hgoG*Q?d3h)|+JLrf5^nb5kqxxYLA zWT4nG{{QT;2U1eQQFY4V`2zX4-*2h%hR=$itIHJl+z`-N&x}J@w*E`)IqEog6yxRl zNIV@I3O#I&3QW*%2+Ft*j%`pTqr&+33HZ0dxMs0k0827!W3e2#zkbD!BcD3hkYBsr>jl?P zdVbjkUIwsb7tv^Ee#0<6uDsx?OOx6hY-*A~^W2mF-Cn?!@aNLqLgR;?aka3}a0 zwp0~jRPr42@oA{iNN4a&(uNw_Ft7ySuvv4KBgm^=tC(?zemI{ZY(xO?6X8 z%bq@`XULjAte6`HeOB7H#8;(B%#=##huar1OW*2dAF7e&YA4JrN&f4rl!| z*BDhcjt7}VG%?w8wqus=^rv)JqHFO+c9XEy zsV1_!M(}jld72U&dmc$O7Lop2!}I&@!iHE-+6F|gJiTb-x+Q&duvf^O(7t}2L2do# zWJ7YLv1mop%-k#bb=og1_KOuG%rPAARP6}GAu#e#2TMli*MMH-SUhtJF?eY>E@n^Q zRp=A0g0FiVUR{;y)3AyLxhM(Rip08NtjcNr%gA}Kbz`dtzcOm9aQUmkk51{2b4QDN z3ojvHgUYGdrQ#+cH_)E^CKK6H`eyUyp|WG4SwfR_gwxaPpx@{4x|l1g;}N?oYxm9? zhL%;+5xX8)aCbj0mZcDB?gM7E?2hkEZHgJ$%dB^i4O`21GQT^~=keYSuW1XXhNe1g zoqt%tx0P|BiBeq4X$zYOAQ%q$gBq)q4#do&mZzjpX)gBV{gN?1%ws5$sTwnAChFoI zYJiBrW;_OCw}iTe{nfA&o%CZpO5F}d$KRwhoTj|_mdRCT5w23J=nZPD0qzPIDuu{B zy?rgraqaUem+r;A(;B%)gKL{w?Dxf&&7TNcMZzZMuN;zXWlHS6lx)14Iia1Y-+~a; zhrj$rVY~5eZO9=KSu5a#W=4sMo`0it7R{vYC63ZcW1IIe$mBqjR?Xb>NVJDp@@XZm zvouCfi|%3LtRp?v@qC-41Oo$lms#Yb0Y#p1bL&LlAL^KCrJH)tajx|KtZMt^VSY7w zRciFZok+I&w$`ru1itBMF4tNPp$VkG4qBJ`qO#aQOY40)zIkz>gHT`$8iMAYJ4_lC z@u19mESc={F~-Jp0ih4?R}9qPS^R0V%6MU1zS7#1zXr+@^*`w2d zgK2K_qofA~yA$wYe_AOLl!TYTI1oe?uwih%ZaaIY?vR~^2Nw}rgCa0Pirg}ggiC4t z&fa_D*W1W;C!tbYq$wsIZ-=GE7=40|zkzpq4?nzVsjf-f?!3}@iJ|x|?`!x6cjcY0 zijD&zS;3L0b;t!?Vr=MNAgLOil$kBgk%waDWAsbizXPVyFE%E>DIn6D50Horab$yn zX$bVt3t;T1;rQV>Oh1l932IXm5(CF5#Kyf(bqc8;6&BM5S)W=dz3p>XR2j&6 z9`LGwUHC=@fA-nm`57l09zm*tH7m_tEr8k({~1VjIk=v&4ENA7wLT+sqp9|L`UCW| zuz{An(qrdH8B!vX2JP}Vv`(y!Q?TsZbbD~u!5mXJ!6UzuLv8_o8A5{>sV!db1_eMI zFr119%&x$bn`X9$ zk(RNLmX>kv9|OXoWpwY1CRd<<2)cKjZ#K;}?qV?&x$5kCkW|;Y%*daMFU@z*Bpyns zEFr(Ja9vo9-!hq>o<0ClRXK<7o_<;hlYAM)7qBk2lqn>s75XLAu*x6^gm6e3zCqwT zNy$)=({oArUV-}f1^!qvnSkyKD>S`5<>mqhq-9Ji4ooQz9mSX|Avexah>)q}E+M!6 z9}H1uY&T_}Z@v%U$%pHYs7XY*Arz=EMEv+Lm~Lp_Iqr(s;m5(Z8il^jEK{K^%Nf+z z9>ujfhl&a2Yl=c;;CKS` zM1KlNDl`ht)q55O7YBioE?k_D*8&UoZyGWKg0Zw*_p_G62-2TAn>KaHpKB+iNaO0O z!{FUNBZu?MWB%L_elw*wAemi#D3;-GOs1k1s6puqIaB%crNhtJY5{q)8wM`EMODdzTMe%V@omHfu@6#z%wt#cYhb0!nXmj^QvPITdqQm{4 z-4+V+Ml$1d#4rqgekK|I=4Fa%oL!*$_QedJc zfm4Q))BVO;V2xM~LIBf+epM^T3%wfGWlJ=GF_T2gr@91w|@*w#e&vdXWyW^cbjyiBh2PtMLLy;aOl z`{R25Z075vAzCbvNeZ}`I-)nU`nZy2yfRW0SxD+ivw`E<`lv&w47F=ch_0rg(>her zxTTX(bNgIzPBOH~K#!ZPG^W+E^h0!3K|bIe8WOK;u6%70qztsxU}!}~?DeA&CbS-{ zEt%bm4Su1G%?b9c_+iIuvBQoYl6j}d#^d%;XV4!NWvGE*-rCM!T?1idV#*Y}3+lx? zpM1qdINpz-b{DvhHmWNkpS*cM-r_5yp$f+Y=Q!W}#9`f5Kf*B3q9zmYMiSzoj!`P( zJug_Zrr=8;a1lBR=kN4KS&R;{7n}DRtj21si1$|A%$vM*-4#f+=u z(%ZL2UZlnvyuehN7rgOXT`Moy$r>V)g>$N6mDClXtSyJv~%jWk19x+Q)kS4)ueA$DLaw*U>G*>oHzY1@qQ`&l zDi_bKV84~_s2LHmH*#FiWGLP=Ze7_w>VhCfRd{pZnpu$2Ur%;!^6NfVmOVw6eRin< zROkE#edSmP>f`TlhujFS!!IyerB@)whjNy1%a=e!KacYMTx=M4w&Eq#I_&i zFhj7EUC-W78ROIYY|n84BugD@J0g^FEbH))A|4~VAGi*bMKv)Vy!1eZJ6KXdclfWj4hH0Z2@)h?6 zLD^r4aG*7rMVKKy=h{@7hy5HhT8HIezGU0B@d?YlZ|GB2;{#-*0VBl!1yu8nJF_gS4e$ky8*Uco3>odzA9Y(ti6tINK$oK_%(&ZT_TZ*$RwoBgpKLvOeU9Fzav zeqrZg4{r}(pbgd{_QpgaP{t}jfg15rcp}lGxKotAi?EU)MD2N$y2Rp_85IETs zn%r62LZ+h=&cEy-8nn@5Jao<^B3Sg9`boQF*I0O&^l?b_q$Vyn$%c!}Kbvz-MTV$$qo9M8^V;@pY z%}OllU?G^gW7w`aBoW%{wy~vQBqN1FEcXunwvTqr9BwiCKXbQC_seXVx zF#8ZceJMVAtHbcUI#J6_s*-nQuz1?_N|qe?+@)U0-(awDX>X6w_6NG|cb(AnY%JSU ziws%s8k)5xEQbb^WH~R~IUU1B>pz~(Rq5lzU#L7zdC1s*-wbU1<_4K*Cbay~_mDE= zuMBz=cI3+a=rUyFaEKM_lpM#9j$rjiu}#v@1;&&Ki%S}%d`OsGHoIIA-36VKO#mi_ z3IC0LdW8Ut79r9sHkc{NviH%qAnn*&VHUDBRj`Z`apdU<={)J#gf^#xO(lXcH#x&p zC*fu95RxJau|n-~2JHI8nLq2C)uR`E985^@zIpfKw6VuDsddAEOUpF%Pq9PfmU5Uz z*q)Kxz(BO{gYX2Q=fFQ04I^)`IS^j~6`Sp!3_F}0Z0!GpGCa!wf)F~!3VwuA`+zZ_ zRx<3=P^(-p8nh)7oCKwHLVE-Ko&`>W24(^=390gcAJntKu~7A_e_zt&fE}Q4k;Kf< z?i{cu^dKAf0eFBv^heG=P5hx1@3|QvJY3vd{{s=x23|a`i)x-J&98*DxPE{|zg@W~ zT5aAR(Sw20+0Wo_9E5&_TYq?JLu3d(@sY}@sQ7sB)o`(-py)+#JCUnVB!2(YXz=5M z&LkvyQbn2%@yh-7_Ix2GF*B{S28;8a^Wpx|XdSPw%G)`^U{7WvrDesT;S{^w}j?8#|ZNmMSjY>;QZzf10Fe=)N^ zSQT=3NOtJ4+tb_sXS)(Iy(HJ4E$iRn ziqm413S#Ye%uJ;*Ih(f%y2S0QzK)B|=F4rBliZlZ>rSe>?nw$t^&ccm zILvE?n$us@Z!~j9@6IAD#EJ_Esy3knTSFwh+WFTbcRlCb3NrC3(`bLq=`^9EohYZ6 zm-QhW>oo0ieKg9={e7`U!RYXlp;@;{(oPnV6xo;e;#~>KOG)E~q)V%xFW+Uqb8P2k zh*D5+(85!Uly%@aSp3)?G?hNtyTN|~awjY^QQH7Hv+6j`mpBJVMPQev|I_&tUlxH;g->jRDXl$iMp3D~0u+KK-jp;ggiq|7VwyFJVsJZRYJ~9(17{tG9*g zN1?5xIJcX*tu0ErdO0Huvp-mZ0RpxG0)Xxvz^)N|>}8qF1v*y{ZqZTV%rgPdNtA0O zw`>Wc7C7Sq`8Q1m7cRY05!+{|iH5fe-vRNA+se%zoB^E}|MNf3uu5}Ez6=y9Wj!Ni zIfvs06eavwQI5I?<>B6ccpc?ff_KDQU?z1$_-`IR(*tmT?JozgQ_}xSR3eZ_5eMOe z=8q?@TsRCI{^`_<|MaQ4X+2w_s>x^T$0IilAY6MbJV(tX+j%;T|7A=~(|Q%qPP71c z@xzG>hHz~-LEjxe@M`T#-a)X_k8|Xcf5)Jct zh}&H*g9S9^Sv<}!bZq8RodN0K{I`?=M)sNkRmv2NdP&iJd3k^?Hm*_R34)uH7Wyrg zfj$VK&9X6lgKZ*W<+m&yZHzki68dj`d|wng`Y;c73u*HCw>|v&%W$h~!SqowvD9xi z9)oCQ*w&JNncIaXzmW8LLDIGDW5T~Q_pg>L7F2{)A<4#}{4^x`s)BoS{;~J1zSGaI zfaF!a^eZyXUsPhiq#^8+5Z1#ig+Nnk-YnTpz;(Sb4d1cG1DcCNfcClo_mBcVEB+TT zcmEL6FB?R9`PUv9ho8++zGSapW^^_ z{?+#XTiGFiqxdV4|F^aypD@1N83fMR(N21X*tUHB%46wkC+`kUCB{E$G4#jhS=&dr zLnkTO7pU`}tq$d^KK)rFl^B3t3~`(02sq@iPK8{nuZ7zt;Am|l428p~lJcle_CuVK z$7a4?mHr{%;%-MxqytR@+~cuce!S;y0@-F9^nv!y`!tp=&auZ^{F z1TzPX%1CK-+dH%=v??Re`h94Wq@R^~W9|r2rIK5JOO_u;aD5{sVP5f)2v|7e#J|gR z_HKCfgYRHRYGrEQEk$$bjXafDaQ#+=MyP9rt$f&~;rVxa;@k!~<8Oz0`4nFhQhn!p&*o#Cp?$<1GSOYV)O{L&RSXc#U zV>vhtBvc92ssK~MB17FOz^Sk~P|`}U4tdM(%ppGQYjR*DFWK39$aa-%%`m0Nts1h1 zctB$-!QRNss572tkH-v9iYhP!>E@z3{r6cnG^+|60ec1ItOf^3=DquIE3j~Mw7mC; zlJsLvEz1_S?r!qB1g3;#_#{@m0_8hzcQNdo>5zu}Rc6tukpRz)oADf@F%G2zmXPoi z+7SG*{R#Gm+gkV<@C__%DD<%wOa;QUg4JM;puZczCZOeE==&xh=Dc-nauXN?3xZ5T)0@HSK=RVtX0QR0MT+p` z`;sH5VGEE$$rIYq0@eWTq-X_`0x|1(Tfz3QmeAr>us3EgW&w^5PCP4C!RpBd4^*HH zJdbHdkhNm&+yDIvVr>D zJHCyIZ{D{E#;?@o4y?FQKZP#bHp)YgyAeLk+)!!DT!r@^1S58O{_J8Gs4DJS#LO%^js6Mx8cR^x;TIT{;9>sdV zZcyTGAmY(VBr+M4IuEEjf3Cym0VcLdyXG)iwu(Ea3|AWi(eN5g~<`!>9^sWip=@ijlY ze@j8&O$j&iRxM)}n5u%4h40l9(W0VlYW|9%^|u(gfUO$|_swRfB{F|5zi2SZ6=Uox zLQTo3(J>e=UHD`Y!fKeuJZQ%NpxFnt`vc%~1W0e=PYIofu@WkkRYM<#*V9ObhfmjM zi>00qe;{{P%lB7;4=3(d(6p_&dRFcU>!Uw>-!I*AmlHhmF8SSW((Z&G|LCCp8kIO# zlr5gCvA&xyFHTFF(J+yCV$}^cizaH)8AXZ)EdoIALrLYpbAE0?%AHz^cT=P1n|jmp z5XhOtno?@s#wWC2nhM<7YDN_a%8A9cfvwn9dAz-_Jobet)X_AZVC05Jg=ChLWDingMG5Ug)3vFS_aeeud_uy4FATTsaz~d_*Vltz ztnXaWJ-FwjX&CF+-ZsU%m_vkFmUBuJmLWR3l4qPYbGfc-9tQ!E#z}Xer7%zv$KZijD zmrIg@Q&ktf1+kkpa}LRmym8D9ZFBL%_Ptu+5zFtEmk1)qyk(>y*9TOdca6)U;v5!C zYMF|&v}2^4KZ#0DjBc8=?P>!jzziTr+EG)UKu6CS-WsbDzLz8w{|W(fOB`lw?I^0o zrxt-Fn!}fa5j5uw{8lf588UuVNYTey&G>-ti2t?2WrPjva9O7raqXRPtjW2>_Qg*e z6tgFmPHT_&m^*`0qt{r4<-`}Y8qrJ$NP%L%G&N>Ukvncdsa%_8(IH@r|s-ne5 zugK{a2b_$8@9Jk#U~OA3?|aZxKf7`W84hFl0dZcLKoIKk#6`|A(l z=pi^bootx;wz$bWc?fKUv>(Kap0P*;j-Nh=yO;a)&(AI1dj-nAyAzu^9q=;M9&nrKQ*n zrr%pwO8N~ zS}2|&FBN0owI?l~Y+O;(^(GO_nxeTc5?hhUSEG&UMFx@SEYNdZq^yFY{9_mJieU!PJm-@i0TgyD^Z?31O-KJ8pv0tPlVq z^4);=nZojR!9~7QTwz_4)bn;aP@>h8uC2vQJLdO8^kyHQJ^!#iN#gRk;&lJyET`N! zvV}~{l7E(4fzq}#p~7&LE56BXYE6q`%X&N`R|+3RTO?V)Ii>8IOWWS*>{rd5hHi(Y z41C)ILJI8CNjyz^kz^}f^(;7P`m@}(@AU2HcibL-2hu@|@j&PVG;@t^C0#3(b zq$T(7@ebfH(LB7mwkt^_N{4U}Pz4BivDH_!-Dt|6=^|uk6Z?HXF^m%Oq%OlVk_Sm7 zPqN)Xv?;fT<7I02$W=^^ZCY~XW~|j<+b%a3%fYf(x03g68Q2HXN-zJZDQ)=wFnl_a z;paozSS#zWarcW$sMXJt3ih+s*@>`1O^lhGFTk_w)EZ#P3AMHC9SqC@qO&k9kK)<} z#pMOUATm59l(d@AF(ulJFPBm*i!iSNlLag{9Nj1=@Y|hHgq{ab{w0-Zy6fEo*2RzO z_4uc)j}yb#!$NlxVfJ4jH#_s*3i21sj+Ss_4gr#jxsk88hJ#{Kl%dqmLM?kYP1fnt(m`tK6JMQ=(8W|6Z?|^u%RVx;Hzp^ zTfhaP{#V*xBLi&#tnnPGsdq`jjVi@NGJQuR*Iz4FvDi3MXHEytXX6d5RE!q%3dmVk zktt_pI7xThG)YR)ap*C2xT4}X#{upkzc|x@$lr>w$;0iK2$V%vii* z8?Jw8T5d^3yVgD?anu8!vGyfN_e+p>#qmapEH+FxJggq@u>~nZU!$L$_eTNcpK|;I z6#^_=0efXFPYU~|R2bGH5!jpZLh!{iq8srkrE1JXE5PP*)77Aod|yf zjszu^GaaF{5hgHl_U2>Zl61UX!HyJN^KxVXMpeq=+<$!ACtUdZk>b*f=8!%p1FG-2 zb|z${#rX*@ZC=}xa(2(!cM2j|fjueC7yV#DkLJ2RkRe2DQ2PhYrW`1<#Y*E7YiODH z9>YxwXR9G8$cqOz`Oa2*PSjDz^38g)XR!H!+UOy(-E89MgfH5sxp5lR2!QgB+bZf} zx$ZHUJ5!RAcCQqsb!@g($XqFbXgV7O(ndFiyK42BwP_DsoUa288}LRfYkiBb)<%G$ z@BF|#uAFtax=q8`{YA6 zAHaP#h)a>pt-mXM?Z?u9tYlZ&sQr)X1+u zT0kMkG*{)SR`Y&|usBuIKrO#YKgt)@+YCZT+n$L7NB-E=l>8Rm+YCcs8>o*HK#X`a zx`w@PiDw(Aienr2FQb+whpdI9ZPk6QrX-KKM;hU&DC{ql&jNJ zP3P~-pdKu`X(b_?%JWtNRf5;Q`fbN>flx+h2kA%L1J`}TuOV#>*+heS)`4&RLMa7{ z7+9iS?`u{}-G*t-_eyHY=+oC$D+}dc>UEhU$~vzch-%S2%6>Uu0769NZWPAOQOlS2 zmSVX^IeX-1ye;PPuniIPQXUJl)TXo*6RfN|2;^FcjhuHlL8m8`)(O-6JF?CIBP$}C z1m53~71Hzee}+~I8+IikhRb=IJ=?FKq~HH-5J9y8sA1^o0N|0HIfetzAYKPW24kdb1{}=3RM7 zjl+~PuNh>rjbbI3+AKd^NClzim7Jv1dPA8;8CS0S-ICawhx5Fmj-j*tdWWR!;A9Jd zwwJ6&dOV^3c1^!1TfBe90JVOni6hQHTF?wEeh#4f?=Fl`Prz#g43ot#{k*oWV2c$d zE^;h$M3P-42A-#dYP!1X8q7)Jq};;{rNELw2}gyPklj!Jc!LQO0yugc6~IhY{$r;2 zEyVX9M;*J8(kct5(aM`DKp1y)uRPr;w$@TLekVlqiu)vOXGJA#kCR9ojb0%uZRECj zCxMQPM1zLj06LC$A^I&-B0!_f#24`CX&@vYTFig@bbr0k)(hg(*LaP}%AU^f|RqWJ6Rh-nse<^lw-d0H3i@UrCJ}Ni!HyjTZ0zBUc1nIsJ zJiJ`rw!2A1!LJME{ieE-0ugu_<>G%JRsx`hKAmSNqB%=P2EIHdu%$2h2R@*DQ0!uL z49{~^ugkEvnW`zxKlnKMNvdWaqA9k_-L^V3RS|y@N5#`(`TLO5FzQcgeBbe{`m1jh zZ}qstzK6H&pTlR&(k>sP5%05XLCPB%*2S_ zOKz87$e?BBc7b1T!}jV-q#j3FbCH{K{2p0LO8FD&@?t7?d8`s&s%fZD>Ep*HSp=IC z4uZDTw=W6gnE4^1T+=)e^(S9m_eW!mj)bzRNZBuBnkCVxXFAxUB}cKUz<#tz)^E4< z_fG#iD`>a<^xh`@U+1wpMR9KX8l4m^{QH&5Y5uJ>mWRZXYl_&5mV`+{AX3B^Xee)kQP&(pB}Cl5|F_U;v?$eT3=KiM2Jf6mP@s<{ zA@B7j>~dAW2GX;^$auE#EW4iCtwqZpaa{-|zVFQ<~by0Emb+BLeAAu3Hn$QSroI}h|qfqN8q{SBrGLeuuRDm$bAaQ z7$VwISZ=9iIVnrg2w04Stv%l5i#wl;tV9;ZAi=yg>+^3@kcoZZTHDTJXt^$& zQlEM*_kKCeq?rbaOR3kNqvKN2rg_SA$}(L|{M`k8onzF1oRc0r7>@>PzL)DzIas+1 zCk!MAIBtlnw!#w+@&mtrEtcAyA1I0*LfpmX?D@PGkrXIe6buv|)IDJ3Qq)D=avgNa z#GxzoZSGm1X$Vyw1<1V8!nP%j*F_rT1_@GRP(G+!SbX zVjuP9z~XOm!cpAdZR@l3N>HbMo}~U;9m6Z1mkZ=bSxZ}V@(J_5%<H77b5}d8e-lT-S(L-xP{dA{8wOQ>4%{G!g7z5 zLO-FEBK9+H4eDB0Kp$HPd3nDA{`+~Lp4S|#ZZlhUFS%$aZFx5nJ>eMQRL9KPN!Xa! zFF^TKaCu4C;rM&-<8>jt3$aiFh%Uvz00&#FoE^K+ghl zb1(2!Ghq0Y&ZMdH_Dn@o+Q962x8JRJUahH-32DC3tkDtGO3IK+^+L2gE{apQWvzMaV%t-}XC z??gN*n1?I6Zn=^peTF{45=15I<3RdJ{L_b@9cZT{=FcYNy1%f@pD9;S4;K6V+|@N<$-X z=Jc_azNS)LK{3Z|3tq9oM4o6|(9S&QkVMIT)C=t@l(*3&68Vs1KH!k#Li7oJhjzLH zg+^K&Ukk8+tpBVX7)0L-d+ed?2D!EHic(}BFv7*XSFugqP#0RNOk)YPc8)amj|tS2 zo>74`@??L_tYwwj7E3yJ+YtOJ@rTH1uuhZKeB=dot)OG|zLIPF?u~Bk!Wm+n>?m<> z*UyGkWbY^LBpg($2{a0zQFJ~6h_kVXpUDSu zLC&@P1W{UNV^b097?-+k6)HSn zPB^Lr?8pQQ_y1YF$Rnp0A2%}CCNEcr1_zFb4LmKZqAPj>ga-m#_ z%uwYjX8(|0K2mW=7#0M+=q_mlKtp?0Ib2MnM7mDg3Hsy2ia2m2gzS;}$WDL9sZj6q z|9=nEg$izU?N9&N&l_d?G`;b<@AX2Bj#ot-ZQYQ{0hoZi&^X2A^DmD1DMK~XjK^Gj zL{6ix-<*$EZR*ELItg~Is(Qxi zSCwMgf(lexoH}!63!|5H6)na^FPtVQ>`v(y+4D5E!}*xSoI-(DY}@?!KO`@*OTs&$ zLk@td+jL?7k7yRFMyLQZlZC|gy#F7Vzck>ie`n~nTx=Y6QRoUBa7!*6wci;`C`^g& zv%N(uETHM*+P#l+k&eFFiks%iR?eJZEtrbzs{VK;QpnncrKU__H_ijGy-IA?87H&P zS2%maJ@6UvGVZFk#=vtrHcKlCg1GI8!N~F1NNX!N)G+?@SC7&NpXsrRK>{?T6mTEQ zXQr-uOJf}RXsITW_^+@8wz2v+5+wfH-Ty2mVpUy8^d{Hsh^GI}O|sli@HT^UYL-2H z7&Lb=%@SwcQ`$zuu?A+5JHyKBGudd&(X0yiS$a!rrDKaN^@jCA__lr043hN3%NfUt z)pWVShmEe4w!3*NC~O%?27sMaT3kv8V1Ca7D{bVqrGIi<+Nh`ZvneIgWtMPFdQ-0cGZCe)ZcUvcdYpUuwWOf=N&m)BF#kzgibtSeT58}ycZ z5RPK2x;cbW70En3qb9NRz^*Z)jN$%nq26KgPHpQ}QCcQUo%B<4zM!cZ!QuST2ZNIm zpFV}(_;YF|R7pxnwgF+uWHO#lPl(^eFaDlnfjHQqG^>)z&!67t;?zJs8{1exbr2^9 zRR0W~=^p@9`96S{`nd<3Jsp&zk-_tEa=nEr9st?s0@wdW79nI?p~jM+8*bUAFMEhi zON;mgHE{S`DUmo`LO83vZQ7;(IqGXP)!xLfTcy>fW%K)(WJ=`$_PXA|+JIK!e45+S zgVT)2r_i)k;aT1;Ahbxt9L95K5yL67F%1&5%xd4~&?46n(12E<`%yS;s!EDXW%h0f zNO2fR(+CZasxspIN!Zi<`mm64YCYn~y)HAWyzsVlQ0%f$zEw~>;8V)gJlm;7nmhkV z2bql!)~oG0t62m=XA48KE_CjmD0Ba!b4kCGSY0JnEXp*AGxpOx-x=Sxj_*q}Di4Xv z2OM`awyR~D;~ZZ(m0I74Tya9lti(u@Aw2<&Ry^mQ>+O7pu|NJnbn2_cV{P*Og;8>z zZbR1L{O0YN$Z)No{{e!BX8aodB&H$cKKyW#UVsr zXjx?`evhcs8yc-l9xF%sby;mD^nN~4jDe?^?N%4!D|w&;M-n?7?sNXd9x}h(+@{|i z6%%$x?%CIF%4{QU!<#fIghY=))73QSO%{X?r*z3jZ8p_&z$r3j+B|+oj?HzO4UdUT z8Y68Cr2~&;f5qmdHsxUJ18$OIL2D3~Ow3dQ0pI6n-W=J|OC~y?-|+~GPVC3x@lu;% zBDZ;9N+zl(-jS=Xvc^FsTHK6$TZ=I7c&JwMVx8nyVAQ+otk07Xb9RojG2PJ!4J*1p zO4VoM$V`!{a4ZajV-C~Ps7%;1rg>L_FbE4G$f*p3fffSEI(pu9j3hJ?rgHY1#a$rV zVkvO^7~+~nDR94Sl$;^18guc!m)ep;U77-Rg7!^du~(|s zj1OzN#%B~S2y>aZWRmx+PosEX66~B0t9T&VSU4`)HVh4GolI97E}yD2g_L)& zAWX080-3>vsM`=xCt`}&wi9`ozP$1wQu8u>2kJ&}0$R%H(=(Qd{3g~S{EYw!^yeb* z8`1}URYIIMfz8}8Dkk`i5SSZ-1>Ry4;R*|;1?V7x(=VWs3~BdE=Qu{+dGW4Y6UOu% zTo=M;nDiZVY^Yj?9zMCsF(FK1I}t#9I!!yZ9s(g8p;z4sDhwC>k9>NaaWGP^crm>nRKX= zY=qAKKR$ui+7xk_j%BnJ!&fn z?HIVZhHQxNG92KwvNlfOFbp7XSQ6}03o|NvDJ@A(obSsZ{Urz?Rlkc4oe(G2S5+gQ zfN2aJGH&`^on&fH5B57+35fv^npm`DO*=xQ$jzK6mUx51ia z;W28FkD>cYF;|R{5>Wp}X2K>kVl5Y$g-0gJMo4XMEna!VbVfwFQaA91)Fl`P!V?B2 z;S@h}%mz>`FB9%gN1rz^qhEUt5EcK*Oo9D zeF1A+g~}q^&zqhwDPmJV*7q|CkDjp4+-t?B5@y8o5j;TV#fk3tF&Z!=SRb@h7+$dw zba{YTgq>3D>M$k{8-BV?j5d<{VFtkP=JEadwLZ@KilIiIBCZVaO?iOORzh<I*NiDZTq5ksCq3^f5*U_pk>BVrP9Palo5JEq z9)U6R+IPf3-ChWkEC=#7dO;d}WR#{`1kzLhY33Au1zPBBNQt>`anTNZQ9u2NY_B6` zf+!R0!y4DcL<_ZXc=-|W(qMrptigj37*Ik%A< zD*t8BLQyqfd){LmvMj+y^9{t=O|ZOYeepW;!ysFnQ)O|u5dq7WF@U-rda=>0!rgZe-Fal`)#)N?8TC6NRTX}jM zOtE*(fCj@Hp($dDPgMq{4Pr_~ByS`~8weTjz9#LU4nSv8Y5L#)wG`=Y3Lk6$7=s){ z2Qx}t0nJ2qMvRJKiy;GA8dkB^fsUDAxWk_PVbZfTqY0VlgBgLA5jc!Spkwq?i$YYpOFV<6g(jM zZ2QDK768+X^ZdGC(LpjcNj&;vs1*0 z_t&EV%TLE5csoKq8(FDb2;^j5Dl^R2*WCv?4ULSmz^t(D88+(XUgpsx6bbaYk zUZw0dWh){lq+)XO`l91k!NyDlCoxJ6gT)@wOQpbS{tsG4S&na9ls4mH5|*ktjWbhI z{`3wwa}GioCm^1k98)9)r#wO*bN$Ip(GJ%yJ1?a;=e4rvzHQgtmr|J>K*2?;?*rv< z@v%~bpea)^QuP6zR}Z=^Pqk0i3*-hfHvO9~e!lTMC!nsZTjtMl+k9Dc#o`PxS1WtJ9IrN;lIGU;cO7V;~nCrup}t3eFTVeJ_j<7W8r z2VL538y_L@nxyY!SdvGoOawV(91aBkKy!08H4CG74AP}$M}O$CZD-vq&IMWzu+1FX z>n|b4jH4oD6r5BsYsgU(jmHf(WVFU3!GYo=F|-3@?<|bXIb6k<4Tn(Jh!^9l7uc$Y zx8pCj{U)RjaHhTvNfw`~?)nv~^p|3-k3rrW`-wvi!tsdauHjN;<7WJuwuj#pGVad1 z-0gGm{2Zye$dYYH-THoYm&$6lUHOX%lzZf=tcjq**`53(g5%~Wh;d4{+4Fm?rGXw?2fia2Wc)Jk+} zwqs@x7^_Ds#1OPX)x4S@DBLh2J|FKL>Q)F-#-*;8(;=NDtZo3=pcOA^1s1N!k3p-S z-Nxn8XRQ3W3AWB1pIdz&ObnaT7SgO1>xp$`jT8lVsC3!fNpB_vAGUPM-ID z&u^31U5`+*Xa7 zud;F1*F~`Ujh`e(@fl;j)%RDseeksGtBFqfMBF^YUuI$7A^7I!w(Kt=>F?;OY!e-2 zkb+(&l5OYvnf5?U#EK+Tyrm z&b1Y#G%0pswb|tHsj{qP!G-MY9T1EWGF4Uisfr3^h$bPox9LbVj!!$wd>M!{_x7Mj z^*{n-Cz-p;e&nXQ>GX<@=|i$va&0u(A3qu9ja-5cx_qph^HFC&HmB7lt>G3RVjXZ3 z!GT0a#@XTVbKS2NAQGYZyn5k$#CNeji>rd|E;~`-_+dIg-|YTW6VEdlL6%VSN>ge{ z55`>XieB(qXZrv@FY4`O$XJowY+H~rNTmaXb7^i-z7~r!F@c!%ZQ@c#8=H0|9vuEnp zbLR!8G9Xq-{@GmBZV`b9l(#YJ#cfV~ZFE0($gKV8&=b_Yn9NM@y>$M{K-oOX4fxk7 zllmd6rH?>|o5MCk;c7F}RCxL!jaFv1R9rAyG0)PPGaEfO%}BqzsWlY)(0ur0?HXIJ zwshv|!CffEZ>u1#2;QJd>PHkz??pw1V}0~GFJOP##7W;wpV~j#_4j-~fd=@lL&5x;&ai|_$Y4A+UX$&%dX0#NsgYC2 zK;7E6`|mWQ4Xet^3=v74p~b$7cLaCt@ot$nm*7og*rPzUz@nl7zxVEOs`uT*QQhLr z-}YksmdxH)zW3g^$tvb_YxoE281!Lwj$CCZ^)F%Ev{}dysvUMwcB*a@klU7$G<1NQ z1BF~QjORX9 zP2X35O$2p1S+1Ny^IrJ*lksS0!E9cwxd}gi3@Q6BzVvGSZtkhE<>=BZs%ag%PwSAM z=48}Y3w6~!P^+{5+f#AJAP-z2uxSBM6EL*sWO*-FuhiLLteXRhHVs<%()XL(OtHKf z3RS$v=0oTTy`D|VBOWU@$r}Dp*S13YA8=(Bd!5Xc>UdNr2v%j964gGnFTcSsa*Pyn zbyg1dv@mvi#GI(xPaZ3RS~VRNUCne|#of^N9eW#H@wzLxfm&N#zP$wOF2MTQGLLQ? zhPAD()Is~~7~vyc$4|!7e?f`og8lz%EsPgU%mCgN#!TktRUBbgd-)^vuvLG6DRg{ z%R$O^+1pDW{1ih6%wS{uIN!K-w)oD+Db#5vZ0l@0(ZM;gp}X-yi}-dtF}o7^N$+Yu z8)ZP}RQC?iHoe#qV0Y`r$nBL^TS7a#m@{$9QN-<)wP>4XA=oG|y}##`b@~f~lb+j) zzNKJa(1mVtDQ716hj`su6LDrq=feeNyMQs^0YYhz;A#-q_19i)JIs1^U$5KX zFT>v&=u?ZyD$`+1dj3;0)2`6_Qn9LWu#y6Oobt+42io_u8H=^0WI}Ew1!8#}g8}qs z4(qbH4TWVT*D1Zhj);=W<@oaH;WG<*maQnlbvA(YFJJ-mO~fPL`TF{FaHKWlH5*>_ zYIUDQo{`2cK(-eux^A6r9;J@##UEtjmmW1?UChde&+giMyq=1Dyj=BOi4wc!(gn!N zTd=(OL|0W+XMN%In>WYIrd>gs_;|Y3d-kH6wV*^V`++g6d2NrJ_OTILgwhFHaf3UH zTy>CmyK5N#r1#~#WKO03RLbx3FAYu*XX1WYe-eTPcx%Gb6b()10cC$DMdIF!$=BB| zOYoKWW|!FZXVm zsf_G&zre(~pEUfogLqqlImKMyGy~P)t(RJw{zfIwoM~i+*$!OLHet-n6KL??zjq6G z&XT!I&!l#uU!_$nqfqwY#LWcitB`iNOAQg;%H%+sN?feRO!;LeR!KL^@HnGYU!PY> zfmCIFxW2@r|LX4B<&Ssb40!ksWPYJNwP4FC(zFC>a;Ga|D({s>?LK<}6&ln~xM?$% zvK7BrEYZpjR419!W~gLiPMruqyLu}QfZ#F+1eeetxI{i&qO}cO%CDAIGPiCoY!a9{ zQTSi5?D5Vx*i|+}iKczJ^KL({;V)w#5@t!Ym~48sX{iUya%*1Iz{E}4b}o%XTdbcr z!!JvDdI&uqCqTJ-_bbUBOz4K+TjbLfaZ_OxHJOa1{(654tF#VsZ&FSL!lGN+SsgpW z-NsO#CK`;SXuf{OYYEJib1*7P!W;a3!Q-45`wLm^poNUt`}RMi=?*1&IAAU-Cchmn z2Y|nR2N2~BaV_ICD=(!5Kh_-Gt=tG1%2!1o5y|2{+wPXOH69>wlB>UZ<=d3-dq*Z^ zKUT2u-Q00hjC(_ILUXHD`KGQtc~WtMBG^=u&3{^b@>DOmzOMY=KpPjo!pzQCv77a# zEl;nb+$!X!V2x#PBeUY2nY6*!wg$M7w(-u%L%5{l8I+-~s^UE3rjiVej=hlzNm)oo zFa6U>4R1tU>!XqAE^Rxx)Zt(cd(!7Kq_qQc52ZE*tmuGh=YsN?F6 zd_wCmo6uoJV+0}A-h`xD(A*odR_(BDL2>zxi7Q3t@R%ta=XX7Gxq7~JiX|Be9sMeFN1B7Ia zh*Cd1+9($Qu>E2grxnqm&%=w=1BP{h~ zs!QKW!)*GgOVMbylr`Ef#q-I>y;uT_`=_=Yetl}d$2{J|<3ZDj0X+}&E0D3vUQVai zH+TQ8Wpme4`Bro$nUIKR;_{heljHiuJGT`>89&$KqZb9i&qqPY@JC1EgSl>OAp5HJ z^h$O`4?M0k!Ny^P}GgyMbXq6SjsQW%<3L9(7WbUu;;o*aW&WH&Y8ZMWn%~z6^?yR(aY7+ zdQ*6QQ&>^(VqqFRb8w%g$hXzmmma+A8i1!#tvNJ{&108tW!n!s=lFr~H$0n;K;vcH z&mixzTAAf#mb$3!S6+FT>)vIwRuwMyz61i`AeX?M`(@DvPUmio7~WU0j0`X$!+U@_ zsGMtt!skx|+IztmN!w(KK2pqYAbgvdrR6<-ZB8@aZHME6d>V$*FXjD78A=| zqiYA0b+%eyAF+|ICN5t#`}sPe^~2ZGOv#y{YA?Z0r2fIqb6KmEIuBBNmS8eYfH@tI zs8K6u?`!*=cw%8N@%-SrX5K<(1Xi!B<-KQ5x9FFVed`O)+J(ZK)FLk>wRm1|?Tq}} zohneqG2$)q_CvH!ZLKUEH|sm!N(BeU7rXMu)}3{}bUzuJ(iPaMm~Iyx8wZ^f1DR!e zxDpAMuM~=9h3psht&r2eg71myTezQq18eoo-m5a5;uQI+(-A5Xe!5&ZRIbG;3bc%H zZgnU)>C15LyS$E>Tmb}9!s%kO%ead{nw&GUNDcP_NQQD*x6`9X6L7&wDHPlGy{BFr z#AB_S;%Z(6Dw?3c;jv$-H>cG(OU<6jGiw}_a{Wp3FN2T0CpNx6nHU|L@#FOYwl1si z*90f43Y0CLZtO}^j&3qWa@t4Yu&B4X`c=mp_f0pt`gS}CKgM;HO@ZFT()LvG*MyqK zpk?8ni>~%B#0kRHC(;hD%1_ttf&^Q+8wqgTja*rK5>AdT2ySA6a$Fw2mmAvRF2~)o4FSLGv9F;|#PBgC_FG7?;WL?a3!%DYBG&JT5@Ia+#YGYge zFH~J3n^azHiYhp^VpaUROFKtqeV|$=vzRmCy4xNYbwGVxg7&Az;X#N?$PG_{Op^AH zqli20+Z&&x&`7JMI-irXkl`E6SRX;TrkrP4O=8ME9r1d}uD5EN^|*we#I2V)8VqcR zYYkysUv6E?<%}q|1;jTN_r=J%wYthZsCva~Jp^CRyKP zYlZOoE7K}-t0f!ikxfU|=nCv~$b8jVMg)XlXIx6h*GpZsXXokic>c_yrm^PUWq*#v zf5Z|N&#(+85%xQhexXv9|CXM3BnF+>?xw^%C@OX;yO|4vQd-glsh@B@BqGdm7#Ya)=w?&ksPMQf z(&lg#2fXrCE10xA2C`wb32b(qJl{flQ|yGpyof40!ru{0d8g~5h!X&C$EXS1_!#H% z9TD$-%;q!C5x@&`%%OOD%NJ}JEfYZcEiP;ZGL5;L6p-NF4vD1u@Nv#@m-^Ti_=LwV zA1v;^jqLF)69IZzjv)N4QYMLdsK(;$y-j242s-(P9;x_Q2hGLvaJNmQ%SIm898Rw+ zbou*UaX2NE2}Z0i&hG#xpA1uv;h&5O>_zx*?eaffja$wc7THmr9EJLPU+AH{m4o9- z&pch{=^bBC>^ffN(&82!xrtRAO7|uOee{jI@OE!n&zSp`4iq^E6dg51(pShsQPW{( zN`>tsnxom$GebiNNnzca*#!@z)&1_9VWk-BXhO9CCyZ2j6z!2vI z;0ly)pJT7uhT>g@fgV+xC;M5t6ixhs@mlsVUKVM_Iik(Hb~ep6ht`G8P`H%kO_{H2 z^q~(_lX+zjTrA=g@%`>NU&QH~8%tgZEOgNFE_KxIENuD{+^A?7H%}VEpJq@_kY+Gu zf)+@A%-ERsU*3*UFqxZiGr_V4fMbCq;p3d=53?4J#8IO#hfa~?73*u22HS^6 z)mPlVkok2mdTmPT;R|xW*O`tU0ug$8vP?B!f2lwWcKNFbj4+YC&G4PWSWxJ#Iu;3?jf5IwQhEw29}0&}{oqZ`T7I$3#9F&f`s~nK4_EyPKttc* zhp*zax--8~e%sOB;oEc8!~DR7gJ)pN>+#*Q-p>#|;dcwMFP3d$Ve_U)|a<7;o_Vu}QgGE7{5N#*U!@F@--3(!g=M_oMp$Q^uQP860i%<|&a=&<-mbHEQ|6aHfTJDV%6j?Bop07;i-g$3 zk6u$8r}bBIr@nc?lE@4`BON~kYW5miW2AwywLj()(*$Qz2Q)U?@#;Kxzi@z(d{&(n zg7IhEC*vt|B^|J1I1pg|c*a<)*MAp<*V~YBXUr*C&FPRjPo}2UJ$uRG01&J6z)awB zT8&x>!!kZnA zJMcPrLHv35%%tOCxMC?sz2suiG~?Y2!>K};=}nD{|KR%_y_LVm` zbZ(pt`ZeV7yB#W*Uqv>S9AMd5k=lB1J4@SS#^AF}!5P)JN*mb{oc&3#JGmCxv>D-n z)1VLML)w&`VTr0!YT^eKb>L*#W)0nKPW==wl2G(SK`68khDL_`<@1FX6Jc2TPrhF! zlN(6}^uNOh@|s~gO>6z~vkLIfT*f4c7L2(Mn^BpG1%1Q`q_^G+9RcHXRY;_EJ8c-R zu0-W>onp4{Gt6T8?o;kzDIC0fPo_6|WM#T3F6U$hm}i3H>khTU4u^+Twa%Mpy#?-1 zw#(U&s)h!UY5ps0bR>vsW$23Z51h?jC+cciVWqHws^GO-MKgGPLoa!R-?R65V@exW z3D@O&$D;ITmU|*`%m5})rpH;xHd}BFbyIi{H7;bNnWo;HyhR^!3&3Zlm9CtpQClwp zaCg1BgINQoC*sfk*b)h`SDzW$KW91OL4@42lM_t9NDL8(!-r|d*}OiR^%aw;AIX2p zFc97wAjPgPbk3dDSj8yH;sw7AVp6^zwc))k9ufuX-K4(3F965}Eq8;{GaZf|Q$}|V zmtH2*J@SR(7LRrg4aI^p?;Ij^y$Pb7iQW+)Tp%i(bDfWCaOqWWZ zu#~MYrIuMIbaE&ow2VYnwYW`PbQj324JbI=Bbg>mt6Nq>B&FpfZ6HG%obhlgpMLK= zM*Wo3h=6sR+FES?_`++8!2Lp6u>egmNI5_`EaQ8LgE)Btep^AVUQ_?&%B^FsvJI&v zI#uawuulIE|1z6mP+~@5W;!?n7DoCNnz;SHI(}c+{-=B&I~!X%t2=^rdL6nra(XNi zBWd~!o_Ij|IIcKadIB$~Ac{A>cviZq4h=Pci-m>v|AKve-S|@;7k?1!3)kxbnfnU@ z_08Baz(nhl!Lk2H60h++^m;-}9ezSqkkdAlBT%h2zEU3J-B~}aj?af~`uEVIf$x)R3yyt2MFbzK&vaJeUj>)b= zdjb6L;(for+oJIWLJt!j&2({-6`M&xogx9rfLEV@kG;E5l!2#pP`MB{XtBuepMW#D z&T#QPF%e}VZlJt5rqIoip>m$=sUN=Dhh0Evq#%}FgOPZ`$N9>Z65wqX@O+!^|3;AT ze((MAijqVB>EI9WpLMwrZXC$4(jN4RIu)M_oOs-vf%Bk{x&!OtgVff&Oo)&qj!O2sS)b+ z%!Pyzi|$nTwuDW_wvkYZXih>fNvY)V{04WByW3Z&@YYm|!74PS0fWB@mrR(ne0M18 z#8+%N>u?w02FGaB)7Kr*?k|s(nKw`w?nEi~j&Xs-)_v2p6r*4(j*BR2rn8w6MaaEj zvSmn5l%+oj{pv2D>9;({vYtOs2$LJQ$|DOuuaENmpC3Whh*XKhX~2cky@|vr0shaR zVo&}bnVtd}9DZRW@!oKKkVjI3m$okhvxksE9#^{km+@}-4Oe>$uGF7I*KgcFOT@S3 zt34UeYatDC3Y#9s!(n-lHSCi+GZGuHr4~$MmD#5Em37j8W1>9=hxzUKvyz zJx?Q?l9DGzz^-T|T5YNs=?Z+Rf;O)x76ut`J(rGjzeI)rgvtRkkj5HQr7Z0o>NjF@j_i^82q=c%hghjXm?b5b~Yh z41GR(YAqaksmOK=3O@n2Q(mURi%5>x%Y;+*!gF$a{%;4PfcN-50M_E7{>~Ak zLadogqi3@&c2+81B>8gM3-Z~3J6GLQlZ5AGqqszvFaFUTP= zOYlXUE5R|DZ)CoruTs5NaRkJaEr3C~BIMPNw2Wx{N1G~A0nZXxRQfzdRES#B8!<;f zD~BGmIX7vZfNvST5hVcQT|^fjOby}UlHje^Aa@%i@7V)m#`59PLTFHGq-$({Ft1t& z7>m`3DghvV$Im%+o=87ROr5D&p6P36Z+uYOriy!)aqqMz;L}cK_AhZ$NUhfK;?GxK zoDIi=NX)Q-7;Rghysw$-ZoG(N`NM6D)6e}O*XTo4mJPG>Vu19lOytl%)kb6^X!sJu z#HONnNZ?P7G-PD;ErGD|*SbTH3JS5o%Elu{U7|}O79-_mYePO=YN0;Vyi%+U_Cc^| zKP%g!$TP5Lz1@zt0^FCJV4mE+z^pJyIrVecv~wpHZO^q`NbDGYZTmtzq8N$9kaghd zSZT%nYxr_QRTLm+iXa~irG&I3&7t(*4K5xkHBq$V{rg*NNa$R?>q=E%9Z|K6$2p{< za*!3bsdX4CX&YeXF)DFbM^%stqW+s{v)T!9OrGcjt$FzmWxU}OcnZP~bG@T3SiI_Q zKYg&2-0B8l&C9{*xk@>& z|0ADPi$puZ2u(nmZ@wH{9;EMh|5_OKm(_4MTC;5!|C#dKc$-}rHw_Nf7k&L^=eeY? zErUg%qQ4(?3l_FM*W1&Zt|Dhwyy(T_BkGSJHv~gMx4TEWwiZ;|@(V%ct`XsmZYcrn zvQxJTtx)z*0?vP}?7 zshNz9ymO!svISL({to!h!as6_U+47yhNS(kXGD+(S+G5!F+sE@T@rtdo7)h!>)JLK zXu~IwQl`aLn!fF7<5HLZwRE|004b^P+j|)sQ0SjHTQ^ktvv2n3a=`$Bm>$Zq6mP1s zZp-AnJPe=ofK?E-k`#W%JA4wBT;@ub)Cp5*u$&B{(kMl8XQ3xaRCBbz1eJ~KPwrR5 z4^{cxbw;QDX6;dG7?U_tjlBLsQ|PlwXG}tTu8hwvw7BwSuiv4>lHoHy%D#|{xKv%U z0i47VudLE$gDn=)!m75s2*L6YJ@>t-u><{#3BOGuoeb*J!_t9W4#=bTEM7tgn%sHr z!4(+NwofrMV&tAtglbF?Q-qzG8m#WO#!@2O@?w#2L78d4N33*hd^RwisQP4UK*rqS zHW27)K;94soXC1iiZ172S}ih&Ww#g51FSsoo2=L?=JJO1uT_M*1RoQD9Sm{b-EOKU zC%Z6(_cPfkTc_3;#rqfwcjPyChGOD|erDOh{wT61mcF1lzlaJJmH}LhS&aJPudR5U zUCj8`*jd_RP|#+$ZrEcM#VeRNL|KX*de+fStkq@0+vvFvSO~oL6prybMazd106d_= zEA}K}j+^IxQxdRunssJ~Z8qfaDLj@jR2-gKnxMZ}D&V!PQVM;EA%Colm`ys*H^2Rb zR}jhrAF6p$L*Kg{ddWEBf?S2%-11VzbNWAjT}(4B%Z*^q5g6_0kl4TILB%YF9ciqf z7RWgVOVALjvdRBuz#9j7mjcwg+xS&BWMNJ)EpXfLH8Z%$lxQLF-MX_M>I&3Du?MQY zFs{i}ME(31lIkkw$oD#yJn;kzWq3FzFEi;FUDSCFW7Vvb`##xf636pXtWQeVY7UaB zq7A#ziJ7bEYUf>%lFNd!>Z)|$5^yL8Rir)kM0~A_JR?|Ke*alf0SwFRbtbUI1?>t| z>VA1R!Y(*kJ1rV7q*h28n@VjM_CGAQR>Ryyk`UGKG*~XQAGhSujwilh77r3ts_pXr zVS79iVa{QQ`?DerYRxY}8scxB16J&G^-p_Z_kazuKSpk=4gjwon|Vg8R?w|05etTR zz}Oe#l%_lD>X{A*MSxG;YbBiKVq4Du3vQU(p~w*H7u*sPF>#+>;kT>$opO5lQdi%`({MW$h`IVrcbEuZ>>D`{q z$X(Gre@H~0HpMGap4}7^miFYtxrIJZyyt=L&7DiGVhMr=5Fm8mPx+lHK{1JUs9&)- zh*j5v+(A4M+uEYtYQ8Vb^FvZBT2zN7e;d#zvCWSfI2uH%SCyV+`irvmjds`Y~E7L~h`#fB)j(sjjqE~rJ7Cu=-7uBsV~*|R9nXyB_&#PNeF zO!8>Tqu4WmcR}CabTrUVw+3z_GS%Rs3?6$dw4L?e;v0N&g^5h^gFHnPy5$nZOeZle^iC&pG;k$wtI zjp%x6H_IF^O%9WUw*-!Zs1=4c{9qXvW1EO(j-7rl4#}Rg; z{8n1P;KDH{cA6E&ROJK_87F?c0WRvPdIj1CDf9|m?XJkT9=RkOiq^T5UlEft9jUEs zwv0xoI+0ZRy<8+PpS7W!-jeCr-t}W7aPm2g*zE?!|9!avJRxH1ipI4LToHnv<^>F3hrwR6EwLx0 z_S0A{RmLCJ?3za4qY}V8S~pjKc)f@4my}gth-H)lBzZU zKtZHQleA#M8X=vd+8pT2h@tbM`7KKZJ%c(4ike2{3-1?XzoJM=yf2EB@+l#tYp7(l;U5JYZZ(BPGop}fV4(Wnsb2_;SYh1YxXWx@?!dj9!0#TH5Lfbc7PVcIyYsqf+{0Ra!*_K@K_@TBdXoTWH)eRyBC4-5|R(EilV){0rT?6T+z9l3CTR7wWWf31h zbyn7e!M7l_=~1#eF%-4V5H-TLK+ULcNB}K&xbZC#3g=jYW3o}{L93lxjs;2_VdIs* z@=!vuP;pTlSXWS;+1#)3z?Mo~z}Aj2HOd1q8S{t3dcc~jP_JDSg0Q^*KxEDN*c8Sf zPH?+XGjLNfSUN5R)7_Osw}w}M#kAPH>vf0FDg?#EA+E^u^Uq=NDdJ#H!kmg9*_K?CZz$Y{0f!*rr z8aVN1PVG@rs{faY5o+NDF;HUoQOs5ODz*!=bsMCqH!RBIQVORQ;XUdOI6 zb;*r*iUK2aDL~g@*+2x4P+M)k>RBjsd?;vnP*rUdyWSC`LWi(BaF_nV^iYEy8_mIj z)4JK_8_)bW%vDL15hh}vKylI^iBE(L*=FpREzHD(%&|IrUQE5YS3HbYU!xjatyBeWn|5BpI7dmORr8d~p8A%B?fn^*Zi;}$ta^_eDyXIbIqo`LbkD3EmrCh|9J z3=PH{o_M2z$vm+~65Iv(Fu&Lhd9e%Q9FUuqCci{IrkoANo65Xm4CgV{!4~ z;dq9L6^fpU)$_$%7{7^(_@f^kQSRYe7o8A%qn7tWN17A?_ma!5=Et)v`BfW2Q~tG1 zPm=*sJ2=?+Y7>160kz)*fdTl|nW#EZntx`g8&U^@DAH%wg8jp&hBXK9rh9xVsO(k! zQmO1w-f7d^V%JBt7r4Uv7_2e>gbwj+D0Q^s=g;R zTc>Zt^(Y|#NT~cxN6PC%wwHu(2F8)Gehx&y)8S3ouCf1YhrFJ9D*g1%pX9S5kVw-E zrHX)={12ZxXC;mPwZW194DwhA2XCS#DBKytBvi7=H}B#{Qgr?|-MjyRC1|>38{h2O zROJfBO5H6LT@Ej&%gCqP6j>Hl@fScG#z-P&0|i)mV8@IM8427;8em_H!0tR z++Wd)meg{2Irc0#ckp)MC zrr{Q4)R5p6s>~dYCl2zr{wsmb1{WsX4_=1ZVx0B*@4g@fgyW@=l!5ZtGGi)E#{?i4 z|K@-t@PDug;KmrJ_ZEV2ZAgA4OYZbr2LhKz20#{hpYKfRANt}9TcsJ^VI5lJa3EW@ zo4xhf#g&aN{TVfUZn|E|F+=<^4{;~@MOmuhnn4>SgT{hzp0#P4#A z;U3j1v7IcjU4A@6pJUCKW<&O))xLch4gaC$?9U2gt}+TWjLQ{!Uy2!^hPpcKOgkBq4-8=8zHvCjE8rU6?)MxG^>4D&ak0NTGl zy4w~O1G*gLym-Awy|y7B5(9V&Bg(ny3dKL+ilVLX1NH96wN*mrEZ5xnmSyS@QX2$`U;;5%&NKSjT#ERST|) z-|LF-WoKj|EM<857vJTNf|%K*hfQCju@Ev1-eHnE-EVM-kQ01)(NaDUi5$>{b;8$& z;ud$@W=rI?d|NA4mPK=5YBl3KJ*y4)uh6!Cb16JK^dLiYe}$=Ghx9B(u9KPdDLN=#ar&GIF3tjW`5;k%KhRgDSSX z;N8e8MqBYZ6BYOy4N2_&wG1WS5ERnXmMcAQ_+9#U@~KzCIy*z92p7rIG!?x6I5VL8 zZa^ph-E&utSBfUCD~GyZ8!v&UR|qRNS*J%RGr2NaqF7DUMhkY(mElT!JCs`VDn}q{ z4ssBvvHQOH2%~@psJ~O?T;e|`Cckz1J0Ds;Hv6@e(Vs5Pxo)xQt^1`Yt^``fshitn zG;>P5N?P~qGmLq_S1eN@R=`5QC)(tAk3Ckt}t_^QY57 zv=W;h!DZ74SaD{dNWe#4#hh($UZ{*c#B?<8d@HZ?S5ut#ZP2@-$C+K6Z!WH)zg_HE zJNx&q>crNBpSYL%_`{dX0!7qCjIiW{7Q)MJ=OVB3)ISQ|;R5k&+nd8z<12@y&qj+2 zW4m^eVbdY!0r5w@L1H4UD0r>=Cb9FQH9+(dha|hSz=MM}{}Uvs-0!Y0#=pw~)|0Lb z|Ng#8Z+TL}+o9~$g1pFi| zK-#0WjaY{zWq}X)+^CPs{QS;Eob!d%^?^aFE*+@Vuc!vt<8eZq;|BM`I?{XEzWMPX zB7EEY%1v-Z#3-th$p_;Voe*1zkP2A;4UYwcWMgETqb>~+g`u`6^~kKq?BHYityH|v z{E5)d>x=lmWg*zo(GVm-Wg*zocd`(y($NUS=>VJ@|5wfNbA9FbSFWU<$Fk#FFlVhd zWl}36m}H_U1MFlZmVU&CxpRlvlBVb>gNMCKdb!50^4^VW?rflHUuE{45<=Kje-q84 zk}QJ(TW}xgJ%lbyv@b_{%F4pRnc`pW*Kf0R-f+78{asEH*z^ zn7F>$Uf;fR4~poSYxALzN^0U!ex5IH%C`ZI;e7jsl!o@262{NdOEA}Kd=WNs12lgD z=s<}tfigTYDQ63v5!N~#P*s8;{IDj^2A-X$X*Ic&2K3_AS~c+D&= zJ6Zt}uER3w9Ly0w00UeH%2|GD7}7x|6bkV=fFRZkG{^kUbqOe^B4tX82-uB`7%Fmb zCsSui8yT<-N-}n|enlo}6DDvcHB5A#IVg$7HVH}y2N-;E@a9!)Y(DZia=JO40IuM= zNJfc*X;M4#q=43dhR6=ee#Qbj69jlC(Y44(FeaI=sICCn3=6W-#<@f!2|ZM56EcWf z>ed872^J{@%D*YI&?ZdUmZ4mYbKrcx!pRk&oI+Kgjuoziv3dJJ-$XN}hN#EB>j9!p zAg>WkN`Nf~^%J3i>%qc2f=DO&niC0D3mIOg8x36)DIY0;j36am&mIPv*MvWk5IZK! z2!|X49H2+iWY~s{Af+Zxn)oYdo)U}&BrhlWWUw_bY#efkW^e{2iGC|Mv%vobpqw0( z2*7UEis%TKrwkg7WDJ;R*^Ca10R0Lajs%@VEv*KrV3@7})fK#mOo0lWmjPF?QL5kv z8cUYh5g{uMOV&QB?0&rw$3VC{h52C)FLtLR}$ctYe53&C9!&=4rxI{)=hP@;4aX+Q;KK)`K>9Y@Rt zdyyqU!V|W?fsM{m!tZfVgu2Uw_gi8cXCGs`!CcBvBJK5CURjGnz@{ak2I`}uUE%rS zdy|oiWcTj?pqQSfN(XP`kbPm4?kJr|&%}o$lVY8>*`vY9PjIWj$&wgBB>2L_Bc(-x zIf$Z?FN40@L4}LXQ~xbo#$*v4R_Iq$I0N=hDXeA46c*thM4*+d2F&e`h=9RJ+JM>Z zSXx#zAE%6W*dS=%LzYPMKuF)i`ch1giDxL+_k#n3f~#arK%D+jYGlhW6dj_$=IOUY z&Z7nyn=uomS9FAL|8F5sN1??IWh0QMl^=>&mIpIff@bnhkx?B9oY|HRg+{*0ye)77 z*&{KgQZ;BIfi*HBhB_n& zgGA!GEstCRuLtj*pacH{218Q{0OJc*p-M`;E?_75rce#- zb_j_Ja$Eik`atPu-|Al*E;QPkI3Vnqaq;~@{yau`w zekgF9>4bi?0m}fw44lAOFy3TPVS)VNfF&VNKW!*`9S~Ev7XO@>HAM`a4b2xuAdS+D z{0Y%>Y(qF`1}t3S6OJny4RfZ|5CY^+01P#-d`VOT6LPR@ksT<6C&XCoQ3){a;K9h2 zfY~`M6A)ftvs;vdW_NX=OePqxWKAD~fPF%oU>uYHYx5)vgd~JYJjMV?F9{>_7xfk1 zmsQ~RIc>JMDP`lu1h7zqRV!Okh%c5t&gbAJgIs$-vu-Oa>#+zz!CH-=K>^TzDg0pa zsiqobwq>@P%%~(l^k;Y{DL6pn?@&=X8F4`*p2aG!IMT_(?7jGuD9}gKd(=YXaci_ z#EdUGe(O7~)#T?D90ZReciKe>+p_M?HfufFO0tiYqBA2zE0H!|J^jXvh6iM2%<2!@ zcR2Jp=>R#(N;--Qn@5*Zh}Ua54)T9!Hcp@XB%G*Yd?@jYPF`Ras(IBDazAoa^}X<3 z1eO;|3X+`qQ41S>Uj)F@v-4@)#ALZftZb&4AXEJnT0VNte(s^`6qiJYPlM&ajLx$g=!2;C7iTUqToW>igVz1-!=hA%XJX#L>V3fRAgGzRwTGqIlg;^j;tM zV|nKp{_16h!|RHNqv6XB>N$3)^V;)jdgFWi*B7ec z8b4RVo{slFIXz_q9WuSoQaWv&dHkHATbp91tguaJLXLIWNe=S~r;q{XkRzxJy8;h? zTUMab@MU%ZcUi6kf;jpvb9j~*ICaCG<233c@ozi7QrvCVOX<}T**|3s9WVO&_Q%~= zYaCDfgFmTPLM;BWKmnUwJ6--l`m^V4H*tPgosEV;n%P?l+prmbGqy5f7&uwN-QWqa zR3EiC)-0u9ilgJt-aY+pZYe~k_|B)`mwWM)wCAx1$oym1KDu*e5mWb`V30L{r`ts5 zN_AW#n#FXlMGz8#)xNSma^GuePu&L6kR^25D9(XUM{rwDGh5M=TtgC_`oq)jG+n@) z?#@eR_Dum^i>fW2?(bOTdG`{E-iAA#lUc0~ZI3^zXG{}B8r+3<3rE;AC6>NAk6Jm{|mqM-SP@^Ka|NPS;ZqqHC{6UH~P)K{TBrf>WPB2bUDn z%>s`eF(O~kZaZNXt*O2~Htnp%bq#qc*57pk>bMSAwU|aX6U!WsimM1!nARHiZk`x? zR+p`X7{u2nB0GzTo|;-ovUl_=+YV0oXV}BG9VX?Swql`F>e!Kt_bXNrPuF$oR_6xh z+N}HQ`Y2PYPsH^%Q?dY4XoUxZv*}Y3j(|87$G+UPabH!gS#!7T_!Xt3+J>csou>f+ z_t4DY_v^u#FwUm9t?T7_a^Oj6wVVQm7W-1fM)%xZ=iC(2pNEo z&(w95p#aNa?%sm451Wr-ul?BN^U49BW&Og9CNn1g)xyV5GE2;Mgp0a|UG0*X&_y$N zLgU!wiL*pZus0(4(*3wL*MMWEO>xDbCRwA7-zEG0g>B8EeGW&UguhF!at2Dr6&Cb< zLkAGCeBNiG$ToV5ngjEtH{kB}*)gGWUGp?b1HiL9y(+v!@?Kq2X3BZ6S)mP}o{;o% zO-qwNS~b_GY}?RSHTAhkt0CA(zIc1fNkgzWQku-hZfOqrotk&eSu$G6uXuf=)`oQW zvwgffZn`DZ(r)xnda{&0KY7=+Z*&A7i}A0Q7Gld%PM;kBeF^l+#E7Jx_+=XE16pDG zucY+?Mv1SmA-)h)4+fD67#0mcFhbIiLib~7&du4VA?<5tHtDmQO0>a~yBQ7)rxLTd zzcE|I2l8r7V2SSS^1VGZ)}hOo&_L-Ud7!kBSYDK2d;N#biyYH3`-I-iE}L~L6T^0# zH*6x1(`ei6NBvb>o?bhbl*xwZY+6DMtM_XGZZh!e!EKUF++0=h0sIGG;>@Q5t>C>%wyKI=dUfb$BwkU_i?vI5|YhF@0tn!lwQ4qczx|2joRN& zr9Q{jLbRFat#0|nsGFzGLY^4u(>Fz;^1fb3MV#ORLhG3)pebVW7AbcXxMpcXxL? z)8{$wcb)g=_aifz%w)2&R+5$Mz3zL#b(NHvG+OO`^>a<*)SpZfXsJiq~23<364SqprlS z^=;1-&r{w1!fuf$!vjpp-hG~C+%T%FCK0(vI;MGbin27{u;D@z;|j+9*^eWO{RG&|RUz zd=y)wyx!BS0^#0*|5?tyg=n)%%FtvwVc~%7{&5vth+kOkN8-$PZBGIno#GP0D3#Ww zoLo81Kl69r5KnDB;ol7gt;aO$kH58vRIl^={9S8HbL+lag{3D`APwJEkd|iyI4xzH zCvr(vs&G=xXcosQcuFI>f9H|NsDDzF$Y^+wlvua63eD56%w?3wSadGUWBvK~YmU)u zV^WDzyQMI1LalL7iIUK}r)r>-us(`lw6s>g|F4Os@dEz&lOCbV%#J9LOI`tgv}f?2 z3gZdVD3b;ScBqNGM=fQCdyv0Y5wN_J-gHqhQ_?vbA8zNUVV_awhRl;=cT z#*6SCoPYt7^b`baYG37%vZ<{c%M!kIFi+gp05O%A`|5mVWAG=g+fiyOr-x zip={+=Z-VBM0&@0K&rTe()w zLuZO^sVj&D?;ytYSCs9jy%pjf!I>&sEu-?WT7|K0`n;}F)%qrYthtuM#2 zE?$Hj?rPSsA9m3%AZ`r(hBsV^jJg{|iFHe>m^}3Pv;X$@1R}KDaSq9BV_L~W#?56e z_2hx8B(p3rpz+!+8t~%y|EH$5L;dV952K$`<*~7Z^fo04_P|Y1j6!TeK9e2RMg5B=V zmK$zbfyY*>pQ_WjnTNa{Y0POEZ7*ji)z}jcOBrpQsa=((;EyZArzgvr@>#@Az49AY zjJ&Ql6HIL`)R*!UyYd@Q6pLpjgpaEiKbxhR8QFa{28w10THK`M`i=sDj}7+K@gwq$ z1LKuzYa>gt-yRxHd&o4idgB4}e7+hx=U(t>?}Y>txB3-ns6Sgu1q4_vo<5U1E5;Iz zGv{tArVISn{zyP_vQI&g~0n$aRs8b7B?cqR&BSTU_dlku@x~&k$fv5Am@y_kdqMj&E)v~-L4?Wcc&E))>#1LzGqtO z*JeCjD_rb*b_-%@(FfG5wpA#urj~W(uXT*8l9XZGla9&(TSMoMAlxY=*4H|WIN~q& zwl*j;QpJFrY3wGLIu#?Q&v`9_0DIE~iz`j$+b&mE^MN1whmzk;;{$kaf!`ZX`L}3S zxpteMqxxN3iz^@98!iDCK~WzRQI8wurRyyOjY6k+^10XMKwDoaI53rv_=-Ob#pq6M z>_g*3ebQi;6>$7+4g#|AWcKX{ohi3aI>=N%WQV?M?Kn@cUTYb3y@;B6=zEZG99N%f z#=ix8lg`rmTCvgCFrUw^Mfm+0_Wrr|9=R%`TKW<~;qTuwY!fVi?t6)>iI23EYdrCb zjT_y|+o-jnt(Tj^o0->;@?9}_8&S#13!+4!oIafe-?GaU#OgRow7tRVZ=Ky+76Z+c zzxGI(0)cBMy%K=p=`{AIq3vBHJzihn%k#?@rk`}pE>|tV5@???NE`Xx&s!N6-`(4C zY+x>x1r12res4+u8lauXV9H{Wffqu^K23isCkHbrzNFnqfmhMmE4z)n41@&F5SE@% zfEAtL_j!3a(sv59jT#Av!QwUUbQy%JOCn=?>(?17iJ7+GN0UJ-EmT2hRud3xbWt~<(2 z?R2-AO{;s|(g&8i6te^XrS+H=w zi1)~3ag`>wpufN3E~=8&HcwJzO+4oxz0@CZ)thpdcxrV;hfrUw zDxR>y_Bb(~Tx7TGekk{lflh#eL6TJUmt^sy2(6p*fS1i^>%^C${xg+$|##`g4ZUT)q3C`*oeqMYMVpjm(vgp`h zPgGKE0Ds*-4tjJVD=4oG7X5FjeQ0vzaus9{Uhd8edq##!h$|N_EIYTu1dmbv)LVIi zJMxQFb7Kh(jdFU<7)#b>>TiPiti^l)CkD|UNc7}BkE>fXmo2IyGl6w$Ftgj`?^6Pp zZGLJSSMYjT?;C4=zqm9Ww6dryjV8aS_~QkU(6oZf61cr@ZU>#*D63i>nh3n^a)$0w zomXpESLzB1Lf3q}0tR4>fBhF_Hp?pd^S_7$PEr<9Wzv6$1hlKKS`hy-af_4;Ko5D* z44{*oC_1o<7>*Jsryv>+l$94n1V-I_B?Q7Kf{+S7DMjD_fG+k+oGx5L9BvyfA=IUB zRYC!LW6q5aW^I0)pCpo4V&P(XMKUt8heqC{Zj;pEY7AJXBG~gg!M&X%kZ+U!1t9=W zNq~aP>D(BT4+dY~=m`P(i6%_A$7eEAvR=&I?v6cdWKF7H==!77BU*ugb!I^4+ik#O zYj(;mV9n$4Yf$1?m|=T2eILTd>!Ki&UJT5Q-D3wCx`%jru`&K z9|>cI8`3kc+k#Dnr zIQyl|hgK=)9iN7F=t?o-mhaaq7v61?gkZp= ze$_03UzK#*VEu)uPsg`h%#ZqtgvhgnK@2m)Ve}mdISF~0?!n>9aqJ`!zn@oL4SU$8 zGC2!ZGoRLkiHa_7oWYtty-TTQWihE=6y?W7(OzY9wpBe1k0Nm{p}XQ}DWXU~ z2j9`hS>(@Ri1a~gj!lNj-h&|oMCCj9MJ5ig7BZlxg+Gt07pgnzfu3Btaw~khEZA2E z@?M6}`Eb;hpT|u`Z;7Oymlr=*?fOU*88<#U>+{^^ED{r?0_DX}T(8vOy!sw2q{oi4 zaEc)VyU!@1)Fy%)rBi@{Ok582YO#BYZx9ZHrmzr%(_62l?bzh1LKh@}%65Ht!m}z4 zCTH8nCbJNPK7@#9ID75HtHr#LK~hvpxI?6d3JsZ+vQpF6lm*$<}&PFx7s4)3fVteIQevbjo}4!@mOV4qZ{ zJ5biG21VF!*GZPB9gc+o$meg32EHHXf*&)>&jT9?87LE)mvxWWeR+K8R`DOvlWP~h zEG}*z*?(E!3#|U3mgkq8|fQP-AUOQV7NT2;LvMj@cp*C zsN%j5fn6nb17OI;U`3_jXDLPEtx6+w;#P4e=1xD`;cuV6;R=NLLIS>v-QE4|mbXXm*Q@rM9}ihR6q{Th(4k*= zz3kIbuhx4XbxbNBC1#UET;PetpGWBEP5EzoL?g3|?+^t5TqxW&4b_2bH8LU8wv!^t zog-re7GyV5BhPuBZ$cuLNrOs*08~(gsh}U z%U|3e2$cwC=HuZcPeCpZy8SklK=8pm5zpCrIR_Nifx7ZLOnyzW<=mi7;&$xyW1~N) zGv8m>qvGiSU3~;{uu>WV@LZ2+sH0#1#NTp}QBXtO>|tt7UkZ{DE~5(;=X z9DzrUA&$qQ;@e}{f=gF4OxyV*6C(I!VT?zw2l=b3*^5p4y(o*{d=Gsk4!lW#S(DW& zC5x#hs;mh{Dz0DmHLUr7=asf|Ug*C%elQG%r&tp^E`~B?Uw8+q))61qpJ=u#MiVue z)1?5Sn>@atDG{O@i{dmY9%oa zhRVdk1ZDfFM4+!cREV(w@Y-iCOrLg*9R?^74O#8ehtXJWLuRe`(_3$px_mm}su^;n zxDSi#)?@)Qxz7mIFIY>p!rHKzF`O|5bXP=0T_#cy*QBslNJCZT=sOe~yZO4#@_=b6 zF^l=GO~MQ{8xks=$9NC4bcDc#Z>Jue3wCve<(LoV&Uw3ZPG9Eek^BZBtgLMsK_2Tc zA)5$I-T`+6u5F%;Cfc~?`{pf%*@1`-mwg$FQ^ezp;xOMt{5o}fQ4z`|x%e=BZK>0) z!RnXrA?!#gYG!V)XZMi+WVg1XRoC2o_vR_eSApYSW z60N4k48$X+)3!k*Bq@mPve5zj_WeiWdbHy97o23tV(hesa1faa=nxgcBpGu(nYLY> zs$1N24k=)b$mpB}{fX}lZY)@h1o9}`b?Aghgp1g%9F8T$#?cV@2FRG@0E!v>`U_1f z)lj6wC^g1>b8VSepWl)7gtQRcMGpgV4$k&sn9VzeQgY>Fc@B08@U0r()wkm_RWW+n zOOw-vhOsQ*b)u(mwk$qL^13Ds#%j0= za=4}?x4!av+>|7&LO9Jg6~^4YdzNr4i8=g9@N5Y=Wn>)~`Lbr%qydLG*g7CiNH8=u zk3S^eC9KYjsW~iQzE6vsXj_(Io^rCy2DcW9WLH<)cN3#kD(fxR2nadGSu+McYg@fa zl(W-RL}!)of*;1*$7)yZQDUFHa!Eii=^K{&jT>|=PBy!rkikonQ!60IS}XPQQ4W%F zLwVKxuv*!!;3vj}brCs){~gWWmAhMeZ3frVMQ_${EqMvMvVQg8?_ z>JN6Ui|{Leg%}I`8n8f(&@D;@wH(90s7gqIgAam@;xr*!yeY8Z5$u9!O;H~Ki$K{lFg+B z%bm?NtD26g2)YV<#dLd79Eb?eHEisHC$<-d_y5H}z)k)xl!63>sO>p$?V?nn`$pPs0` z0>#u~@&&|Jcw;(j+KVtmS}ITM-ZMMhz(FB`<|_pjm-V}hO*UDMnU^@2=<-Vlc*yi` z5Ag-JU__Zz;R?E?A?RYdlr59$Kf->?oa!)*sdkw~8TqZ`GP9_u+JUFIIv&Fw^G_2E z5xFfL7ODH#yIJMVjD2YFpt}~3HiTF~CKDdrFaR@kNak|Yfnp!9_67B5MW}1LwuUO@ zElEcUx;kZT+TI*ndo+*-I`HX8r|vK&drlfHMVl5pq1-E#5Xx%POBw0d-4IJ$v5O$UZ0$UMBLe=8-MA6r+cUc#dO z1kCV5M?boVmu>yg?o3(oOCb$}iaY8O9?bi>rBaq2S~A+#v1wxmF)7HU0JT@(h)(nl zPOX+eLfR5w3cLQHsLN(Yay>bkIzqIxn?7tel!`dvX$>J-RwoL{e1_Ux45fr^he$q` z(}?1$$YLI4E-wT#*M*E{xoX)*D|WT640y&Ke>1DA62)UWQw#~mW#fi_Xj9_-(enSS zsWEzJ+|Q62cLm@I%Kmw}XnUBr+q`b#BdY8jWG46{M+z8(!q|=_ztb z>v1Ie97Vs=i@KU_w!{WFnJgr@=~pE=sLkkKI|s<0yD<4AaeWK8M*!|t(X8@FaM@%{ zWcUu5T>3gGG73;2+xEmQ)ZbAP4(Xg`PX#T?j=l@v;gSkia zXvdT;IKN3~{YY@iypnw0W8<3v!t+T$Mc+tb-w06G&pTB_wP#joBJKra8%@pRiq)XD z?4COJKMgebZeCUbJQUQA1vX4-_YA++P&66G$~{XZQyA?tTA<0yI^HtWHLE;+H9}HY zr1j2Y>6kCd9M}hsc$u}C9dCqD;h@B$panN$4F`WL6MLL+WOYd=7V;=YmaGM!T+pXj2_27&Ak6d zGrhVlAYfOym&wb}k`3!7mi4_qskS0RDKsO~ioAu8MS;4xw~5TWGh0FFLxXKTag})# zFNmUQ_-J63^Nhz^iz-T(Q?s1P{hK?i{Jeh7sxmodV{MjOy`bY&r%Ep(a;K~o>cv&D&vs%N|@#9>V{$}JL8Pq=F-1P}{Ih47_Fb<~E zBHkmS|I(#OcbAphAdSpYVy}1Bz3q}kb?S8}wo`@L-JYw17fV{Sl3d&Mdek@vX!74a z&z101XU7jVCxmx6r?r$aO6nGdp)ISDl(<1dOR?CYrz*Oo&b@XR;iB`}klMQFVqH2e zw+5TdEph*K8N11}Z8P=!Q0kam`YAMK-@SgFhU8$a>W9)OlPFMm+thD z<<_T8Op3iIo)(vRZ&$755bD7>q&`ETozj@QmJ3z z8J7dmevOFz=dNELVlP2s2;wSiLYR>$XACUvLHTot`?g_Z2ZyPjg$eh?g8rRc=nn)0 z(fcOD9C=F-fvoDOj=P=*Mjajg7Ut6~_M}lrNakcXSb3@^es#ib0Px$1Pg{c~)fGBq znMhS&1kKfgp(!G0koPo*{>Nki;b3L|r46mD|Jp1JkjX;an)@GRe8mpV0{l-axB) zXy(*Nd4S@bp0A(4hMG&$a^`%bvY$RFnKv153vvj%EOlBzuqf_)vM~nCED8B;8S9BR z(x@T?N^_^5(}s^>hhA2AP7)xUBtmllVg#exu-m8lmDNa4tv6;G#frRKgA!OAg^Oli z?9v|FIKEDJ=cl6bsDJ&AuYyt{x^U5D5^J^wZyV--WF63c18G|~omf$(Z=$T5wn?nrATG2XbX5h|1NjepcKdUZ2PmX&$*wkzV$823KT$ z8@hI@FGD_28Fc@Bv@F`Tvdt#`6c7|cu;o(h+qp{soz<1ak(^Z$s8+K6(9mXe#(4PS zQJ#A_jNVjAHBWQhhU585*!K4o>R1BYbgFuyAy(s$*J0ud zZJ?mk?x{mxNIJb|X5taLZ!@2;$vZDB(ofQsyGIUp4YMc%xV=VMQd^oAEc5_MN{f~G zc{hsPo}>IMq=p8?_z(i#?L>*YP1=Fbn~!i19rESrM7Aw%$;r&|9=a$vE#3jdOz_Vv z{JPi<70`3VE9c!r?0fUu1TP*!Tvb184 zZ5SnWxbPwY(RG38Iuo5Phvnrkm`py_Wk`D<2Y%FgCx}fKh%EGIdP2VKoqHHCTU^eP zSZ_^!ITg0R4>CueG$CoTAv#u*h zc1>aJW!3@VLbH9&AF3~Pj2Lun(3sko*|x#(dFVlyDM7w+B62EfM?e^i6-cJbNP@`5%Jx6}J8b{q-vQn2W&;YN;4lF5EktvGwfcBy zK-BLHlt3>_(L|u5I|4O;m5uX%vG1hI#1IT(1wX!F=@K}!ZlH9b#*#*F{{$xhN2C}s z4w-f*r;M!~o}6@RO*=cmyRjTl&Sfz5C%(CHUMxP*IaF2Cm?a_l?09&qq!g@Qu#p;^ zZS8#xOta4HY;Q~L6}<5Tgt?UPhiXUj%N28Mz5uFUzI$AXP~h$+szg-~1AKlxJzvEH z5*c`%=s7O>l zy5!5+L;05|G(&@tT};D6`IlV^ zh=cjtT@7zeeA%;M1v`ZYUyqgY1S2EXM#bOecg`DC63!+N#h}}Ua5iz(1LbYX*&^skh4w2!d0;Pn zf79L*@we@*g39k{*j@UnN9W9&%;=PZK3G>8AcTW40xIccU{{lp_$6fg0FUk$yYUrA z8@z`@Io4RTBSox*od7E&Hy?s`SM(7cT(6P=ocH!kffmO10D@7hj5HQ$>G3=OJlcF7 z4jz2j&tC#0ioWgyKOs)zZIB?sLN_Op{qmkQOBJL2^2l5#XkneFU2_P*Bt*}glt4Y7 znK=haoD+irqPxa1apAM71v^0!j&rJHuc8u;H{#|=;(*?CgZ>q=@}XAD_HDGyO+Q^V4xV@fm=!hi|DtzCXIV~upn#T5O9_Qvig5;=ZXOR zKu%gr3W;lUT9|7p~AunP;ag$P0c ze1?k21@qsxOfGQ$#>%#}n+Uja`_%8KG_%1e3E}KhA1s+>*)D3Gzew=LX+qMN2&`j~ z{zXa-17l6`B?9hv2V4Epb^~LQ?-b7DCKj^jr5dP1tik|{mbhxR3gsfu5JMMc7&1MJ zDxFKTGqm7#y#zJQRi`;@7WEBzPMMcK82M7V_fz{Wm**QeberI<9JW92}Ia-l8H}D@dpAX(N(!ok?I59Hu{>@USlb&1G-Y9;K^V z^q*$JLfHh8_Hm3)c=hND(r#HriPk!6Q9M}nImojg|1$(?u9Kt>si%FzA& zotx#45U-6!%856h=x+e9=DveYEAE)~M_>Mm&XKsAl;(-2=XCXl_Xz65U03ABWEgiki=F`~bs@%cTiT&UrfXDms<;qt-&Ms;yW%b^pFiUU5EmZX#^BeP-Cqie2 z24gD5c`vr9b~UsOb4=hmv>Y}cQAm~BvYmL{XgIUusuTLEXFQ;uE3!c!coe*f%Kuvp zZ^!706FP^G3;cj^#*@F+Md;}w0glg~$B&~;z&hXB(n^xL!@z7BBB=s2D}uvw=y0s!J5^Y#5ja zCvmT~?HGB><$iVU^u9DBZ7#MeAG8Mdnk2QdTWDh0@B>^2K>U{8D~o`RAFjG2Cm)hh zy#!2??^DEwCZi7Ax2{MNO~2AI9d92C{Wrz58e1|d*DrV`o(}V2Oyc&mS7t=hW`4lHn_3)M!{}(me*&IS{jc4ye_u`>MN4f7|Q+ zzT%yG5d~0YjA4Ii{-KcScw?nsuA5c<_SF4b;`Z3FF{msZhBStzz4L9{w*!tnt5g9q zLuYWpmI1ftZE6qIfcUR-zhDGPjHWhbr#GRQ>E>G$|8Er26%+2_B}MPgY$^=hC`xT_ zhHnqgaUI+(*Q>dO)jT>+=SEsY9+<>`9O>;4^_u`0A=PJ!N!M|+IUAxzIv9GkhmjeV z^0mI)QHi!0l`v`308g3Ec<@gc+N(21wR#vN6`j4UH?mb|GxHL0uBAVI{O@iqhDith zNk~N{r;${;{CP-ur``m{0C9Qc3x$&|*@+O$+gS);PCC;0&C8>IN^Q>iNKrV3mxk@3 zq%~l>An^=ul9*>ue>*?q&*G%H0>jr<#?BOpF^t)_Psl(-{}#_a6k6uXg@XyuV;PZz7+fT>yXDN+ z^-(D6qih9lhG}-zL&|@m;B8*&`Ijt24K^bP0&(m>A4+NxBFq0r3iQ#{KF{2QyE5?J znV3(e(MDcnCF^t@*0}c2y;r5Gf=gaxT)#aUE?sSG-ENeMeqv9aHLrf~ttRXa^)*Ak zWdLyYu&+G;zv^D3clJNVlifrKFlJ;Y9Y*eJnm*T6O$3R&dFG3lflO|qxM1Nx2{%y= z0#}@lIWL-@Ho2weZ*yEB%z}ZA-ctUPiQriyK%ko_8GukzPq*)eFTdS0Kp(X~QQE_5 z_#u$9n!`L|F`}b3LeO6QcE+huYkb}ba9egzz}KKPK1*)ETIyldyjpf3{Vr&(Zi3>` zz%E$Yr1F=n1C#_l=5STKR}EiitS4s^@mf`=yq>1fd~X8H`g9sd%_HM{_&vS&N9t<=O-=+!Rz)Khg^LZID8aUJ&h;5te`c@tEm#VfX|Gb1w^UMR z-{zcvF<{zsP_&*1iROsAJ_o`87-L?Pr+PowIX4f%(y&bsS+WXJ! z|6FM5cy%*Xe+~sqWV1~XtELuSfEKTlrgdoRx5n5`?;4*!Ii9OR<}r8+XHHE5ld^3W z$;}5I6UURUdJ~W6i@YwkL@l!oK+0DQgVp!ZTcY`#zmt`Ijpf-7qUk`7o0o6N)&g^f zN_w?fJEmNKcH~p3jHhN|m*(Cv4ug*a%I|7r(-J*M#_I06 zpB0?iZk#@ojkT|?ft=|J;(7#}N#`M_(%v7BB$-xW{{<@pMJ+`!{^z*UT_lF{AL?k( z(FgU1Bn^O#^?x5@KqR6Rjpe?V2Gf&ZxmYeZh71mb_5pj8;kADLgz2HFe~#Pk@CRK# z1Vz@1Tio2nJ^kF>ED8_llYS^sh)E|xPY`~75MK!v`f(qYD;;i+9v5O*s1Fw2iw1p0 z8wh6Pn=RNFjW5&xO@}y~#3qCQqWJQ{0|YxWeYxJ<;V*TVQ}@?+yr5A7tgZ%*6~QOA zFDE~FeB8kYCO=>Hox4MnRn9Bbo;qgm`|$G3b+4z+fC)Ear;>>OI0R$U5#8!h-$FtB z8+$}kh_c@1;Ohdehkx<;C=37~}ccP1%oBbE~!% zIP-we4p^#kqV4=pa6cIdFDa*Xd9EfxI zz)EU}F#_%YB#V{9ntE<{^_8j(=*9|N-lm5%_61G$(L*xn69qkvb0liKBd&%4)`II} z(Ofy&FI4?&k{Wzb(AoGmXvE@x-ozPjsU(a#g5!`!ayf_bs1WwQ*^I7Y#7v5?gjn)Se&H5oLOLB( z%}&6T4TtW0Pkes3g&W+6g>p9Uxy|xac;auw!nNf1d ztljnS4R0jTjPW(xC(U72k&Sru1)x5lx;D{hU?4)Vrk^&`7*pJ`Ch&LXSP?F+@z)*kxc0?y^@Cjbu>$L8 zy3`$bf}VWVsyFP)4m&NFYPxI3=j?1PEr3>rBVYo>u1v_W` zPL_ZF(J9r>s_XLmJ42?n7NZI;*dkS<|KyaQ$T*Vs1R!PDrFkvH>QanH&6j$%6z)AI zQ_+IKhV9^%cl(wyDP~gc0^w@=tBOG#`Q3`H0iDY6i~=6>Ir8yyO7alf5c|=BZ;@9x zb9E(9R^q^IXI6snjmvFQ`JCDn@g!=sV}+?TWq3%a>+A$c@?Ih#IE3YTTH%6JOCevSnjjP*3YgMr%V9Ux|@_PwV6Ne}(E?su@Lh+B46&)|oz zma(g_mnd?Y5e`<%iOo~!kQInSQQ4O4G**%h6%heDw&~s<*Xxa+x8Z$!HL|U^h)##) zy_UG+Xc17w&@_!u88J`O2Qq159#nBIgO5)?+0(PVL>a z7y#d5lQNygldcy?_CJWhpGD*bFkCw(M-P(01 zrQ-v5My>mPs3!`kl}#puztNB6E|?u^WXm5NB?s#Uvu|2uSphvGz{P|{|R8= zO^2;$GM4@_>4Krl=ARK(KZgwwk<6HrBoKgHCkWa3l_~X?cMuHw&pcE1#-*I3j_n@~ zGg&qbSFHX$0&?Ap|nmI8Rh|N)$>4^~d zAQ82Eu)pCu?(M+>>E_~P8nJ1$j}crr+wKoncFQ00#d?ahd~sxE=jS%S>PQwGJ_V3| zt9CoJ_VoQ_F%i8Lmli}Pm;rof9^0ft_Rl6~{k_s)0%w~5p@1+%nkr(lA$ zI8_oYENqyXXPiR5RnL7fYYV|Ee>vdCZM!+LpUC1_R z6t_9(PuiWFn{rI=%b2FwmCj9+vCGZrb&vGeE`P)XDV2qEo?O?65gW$3`+=LTcV;F4>yf_6Y!bwZ6Ss!;LY?eHsw3wrydR106i{9^WoHMcyMnD;SF*fw z{%anw#VfZAICkDN?^n@ew{Nk?Ahii)%r9gTsE;c&VTB0Rgg))*ha~(3C%3mU%nMVU zt*1L!+uDji+&0Mg3%TlyNCXId80A)M7m-I0zzsz7@bH0R+blHK8f|8{&H3*I$Z3cHg)xLSa&(@m2@hr1woJ(OOk}+_cw-I! z#N4nen*qRzJArQkIq~~|sZRwrm1p-W41TnVHKr_xNmatfslM*oI{^Q$7(?VNN4HW# zFjnj-RTE-35~__AV?=BN1NzF5&C%3-;kG8HySW3Zmu>*)iD)ttqjKF$C`dp5??}|( z%meAC{tqpt^tC*W9R>8amTC|~<*4&EbZ%VOhR79hZYUaG_~D+>m%V;mH5}92Z(tZB z{Df}zJ7P!aY&2dAQf{`{1_$gZ6&dj9jSl#V9g9MQbRpjdjDS2yh)unM{B}(yD+@DP z(7cJ3r2WOvuI}?NE5@@#(j@ajDgbW z-DO?|U(%H0&dULR1r$=XW)|}Aycn?h9Z^a`e_(2ji(OUNts@*H|{Hbmlxvte;0k%tsu#(`ghm zO;^55sjGNKak;2r9CeC-^XWB(75VK!LO~l+(bJ*H4KG}b22FebeOjz<0n1;En2Psh z7IShjr}z-w1pU@O@vRo2srlyvDSZMBBi@7P)-nYy9xh8!<&f21#B(E2i%{plH81dh zOnotZ;E;1#^EpSqj3u*V%*T(atifnj7`kA8|B+gy#h0bE#`aU*WbhNN7s)wRe2dXa zl{s(~*KGKLX^Wi=5d9@+#T!iW>#a-z*@`F_u%zbi`^P5>yGwG|)MUQ~D&;ZyZ`z3c z5uQtKoh>8Jcp*NSBKl5W)CM6mKNq`!JS>ZyOMG9HKKTh44`v-AhF8xN9P;6&xF%Nz z?&3Z^d{>kc>w=VGccRLT>?)Y^-ESGqoFYRA$_~G4zwEA9fPcXFYte5-8WqtPX!V{- za+Zf!b|u_zy@SWgt1qx({B|0>Uh@#p!NJFb=Zw}>an#qYbl=daL>~2|Lexc<-uIzD zMiUU{Z+L;L37_i9aQj4Xv5ypT#A!9|FqLiv2CG%QU;|7;S8F>?>%@zB{QIf02TUT2 z(YTIu90r0C0=3TO$C-7)_+*nXhqIJ*Eu_f#F`g!Ha#kcYnr&hRebDlw?yKTg3hWbq zk=nijReznJt(FC{X#`K0mol$3muF@V$3>DPe7XWI0|JQR6RB>bTOd5 zJ2f*AJGPmT9GoBaW0dYvHOn^7iz8cSd1tlvWuLKQpS%_Wa4RAoJO*i5-RYEg&yGx`5fZ2W zS9qRuhB2%t3PREeOp-73V zKBHuqY3=#5XX5$A_OcoGoXICym14G>9ZxXuPUv0UDMo(~9G|VAGnD5s;G8*GR{P-8 z45?uZ6)Bi08Wh4wmZT@#`Q%P79rInWBCu@JsUAm>VDPzgH!>{z0jR-+7;rENbV!q? z(^P$xpKU|+D& zTQWQ^MHbUVH8Rcr9iO7B&4XM(Yq*Y_f&4zGv=9TPM|keeV1F*OlmGp7vr_QWo!A$2 zbOS)Wy^UV&MmNe(17y5hicTuZ;Vod+)v$06hTdEb;^BBT%l;}tH?zB0Rn=^J|g zSGK8RU8{O{EtbaAX-08I^wu~wXtBU{J`zuNz(-)S_t)1rg>Z>&i>c;lqa6*|LyvN- z-sWE1qu+epyyOZF)|vI@@C8Ou_#wH*x!n|8@_J;|=m5R=m_iPwmYp-QacU>iH(7xdjZaNlgOZqn z{?1;h0RA7)g_u(XUL|L?^As*-8Buryp;|5ca zgP6!j1gr50{O0K^$DJKSR&ko*Ms06R-9M#m(=(?5mOl>H>Py8=etdeaIfTyf6n2$T z3VOwNki_5*UdEtwa*pZX4LD@P?uKMJuj`lx19k=&5I@1de$S72bm`mHsZY3Agpg!w z$UQ8yf~a+M&Kic7VD3TGx>PC_cPG^}xx)%v-Q~aUW_*yIwd`#v1n*HrTIjc&qGaR3 zUGpvn$IopC)=eLK6TF@%{kIGg=KJ9zUC%}8X5Lsze|E9<7X%W)$VR6JYOMMo5c~`h z1E@>w_GwJ#%r9We-;i(*+d4lo;xeH9LeGoFf}Uh~VFDBmPkWa3syy?IVbkwb$4aME zu8iNS+e<}uvh}TGZ!sE|$*GgznA);)BYH za25hXhKtKAL!UBXoHmguc=Rp4HXo9$0?u@C!U#jC&m=iuPou@*FI|hel};4-$IBNC zNZNa7<{bTA>Rh&vB4Sjs8i?Dtf5eo;z~y_E&t+cI*qkZ3h`+Vl{9YH%R=P~;m*73s zl|_R6_3HU+PQ8r@cKf!9Hi+_xQpVhhF7lp--6AT=^Y zQ$^*O9)Vj!L^j=kbzb^HG2^g%;UW9j=+-U3z5$W%A?V-@Ewe?Q#o?z!sID(!vEI6LLjr;#f|vGt zGB4r8qr+lV(%m!iQH%uY28@NH*He|phUB(v%m3l)ETiIRwtgSnA-H=WxVyW%yKAuE z&IEUt0fIZh-Q9x>?i$=7xZiosdCz^<`Ec)tTGc((U2D2_)n3)RtA2kyWsFxOVi4hZ z2$B?U2MW!!@0ICkFVZJqmMsAy;I{Q?>0p<7^D+oWN$zk1M}*dtOvmXD{PHlU)R>#w z_p{5(>EUD|b!N#o(u&XpTQ#a|cnIXy^YB>lKPm)JQM<|^^!eF@-@^x?4`xJdFr}~} zV6ulvxQHGk296VK*#+REslU)U42x)pDBJAT_ZeyD9`#3D|llDStxaQ z7UZkjrVf-X0_&&Nu8-O_@0Z;*QowWML7TASyFdMy(wCW{0hvg+XV~XWd0NiwIZnU4 zfx|6lB7gHiR%7NRtnBb(B1Ym7fz4)T=QxhV<}Hg~wnmMyS_1L65dh$Ts`9G_$#`ct zAN5S~h~MR|1RQ&f>uH1^bwGRuNXA;Y;k~{(Mw-u-X`_}ysovKXxpV8y+V|suw~I$| z#$p!9Qpr-4pY$$C!`X(yfd2Whqc-!3f+9n*SHf6Fxsk0xkr8v;^8xD#8+NBsyrLy9 zCILPyD9FW#hGVuo3?PIqS2r#mE;X^jH%rTIqJ<~Fi%J;x?XTN0*<2;fKH+@r{>|ru z)M%aEGL!JQmmmzqTMC<_=?L0N%2IEhG+sV?9=%q;$xOWxmvZVzjDUO^u}zU30gWpk z{lFs9VXPt0jB1Fu-`Us4CDW7k@1U3XevS&3dpSc<@$m9&ETDKfiC2az3zV8KGcU0c z^LTJ^zOnUwT@4K^6eNjP0v?rVho)m^{VOt_f)ah0sFYK4uo9yU$ z|Nh`giLp^Gfmr^sMdfl;rdD9!#;jf-<}$Y7`F*Xx&_!}?y-uo$?E+?r+r!yeN(u=M z?pYF{PO=JN5}ooSZVmLu*NDjTp&ETIxTyW41m_?U&F$m z8@mfA`l+c)w+7LYED;{LUyyRuvAk+xt!?qADFc{g{3QD_M;mG{OlzzvenE7SXMN*H zOYaAg$UHNZdaTzpNk7)0isSWjh%_TKB4*(pXgU^b(7iI76F%LJ0o7YM>a3f9@Lxue zjC89=bj9Nx*z-q69Kbq3AEp45+N@91 z3gy4g&%fx|m4zzxJ>?2_KD}QMuNBwxcW&U*rDY}OMEO(+gx=AR_jp-8k+gV8G8!ey zYhTrRfnKtWTCEf9=#bOOj_F&ufa4|^P>tH(KSj^?7r5b2MZM6UnW(}>0Ob#3nn8du zlRBaDmqraE#6oo3-m5 z-xQ8+-;C^V>#A4aa>@~g+c@G2mixO81P*!SGI#dLw*J-jR&@HJztQm~Mna4N<~crK9Q=L@5Lh*D42W42Cf-BGyw?;gY$?Vi+MT`dJG(Ch zONU4Ce9nuNUgJ+`reUz*D0!f9h!sJGs&*(+leV5aQ8~~cp6dKHP?6!ut_3`LG>==T z3g=B*lq&lSn?+4Y=kAt~SU6F~m&L0U{(oD8$SzOg!h7RqGeD0YLa}i??k<+g0j`1f zQdFJz#1-Y-Y7>U0X}9&QuPf4_DXSvm@Z?Xq$3&C$GQPiW`^S*oT03xG`Dx$XW#w1aZ!03Aq_LK3xeR4)`Vo%b7=N`c!d96xZw_feEh{bMl%F{VXrKNG z53&sKEs-qemjX=sg>tfaxe&|ubCP$**>-6<-sa=8s)v$A;Iy-hJ~hS@`R1-aWUZZO zX~T=268||T81gUwND2ul{_)Sgs$Ar~3ix%kBF)(h+(Usi^_yjtdD8tH zWBi`D)SYwguKMt8qfsdpK0dCO1TFbtqey&agv&^YY(UE+c`!x#l zf;G}*oE!v3iJT(TkYsRRk9Cif&Q}l(&9LfR8jrRH1^&5vy8oA|6?uB95Y|LiK8q;R zq)#gO{D8Oer1mH8k2RraTyE|Us>SA9G*az#L!2l1cY)H6O_KrvGey1}i(EVC9uj8ic4Bia+oS?M#f!8;d&)Z^=f|H7ut$5{t91%kCR^;}jg z=UmhE+dA(vAFkw_>mR>!o*9AI=vYVJv!xn`C>!Iiu(d|`dqrG?UiT}n>iW2bLG_}3 z5(74b2DW|3+gl zK__Yu$C9gxnReCsW7uQl02bmk^5MS|J2KBvYbiZ}uu764E;Q~d86;SN(hi4RO zeVe?O*g?uub%TH8wd2)T>qAyoHlOHSV6}o%LUs?JgD$*Bkpz=M(YyT_3vWo`0(0^- znijD}%=XXzZ16k|W(@A{WH*oQ)(oZ19`BEXbA6e%WyPLcx$+5o?<~cX*#afS-W54o z&T8W7IVbH4-B75OiJ+U@I|UwNoafh9%^mW)71Em_=D8=BRah8g?3yOAA~!58%+A;| zNa1`yBb$(m9~#j?M{OVGi9^2B5%vlcR{V-WhXT~ab`T!nWteXa9U(nXvp`mz5vTEV zX~wd)boV7j{+yc!hPKgRUh~fnt~U&)FmB&_%FW6{jE>T{7hi`zS(rCW2*i}S+;Dpq z@Wx96R2amq8EDL?gub%`v~iZu6GK_Ox`%E65}U*+&EPE1U1ku5(DFhgLm_A@_v7_+ zgtO4oh>55AyTPT%eEpTKWut7G^a;&Ubot#j_frj4QXfx&!}|-(s6HXrar`IQqOnh3 zr-u~AlX3$E9`GmBbNd8uI#|*k4Ow#@)=_gF!R1i6f61=~(7)28%tkG=GU)o9!3f@3Q+tE(Q^m6t{|ON^sp z{6eP8_j%Lqcn&ZEc%Dy|=l3&SJ4w9(Lbeqb&p%J6a1Sj@>1yoF5%$cHK2<^lH|I;x zz)-OZvR$IZcnxMqC?gFIi}3EYn^gTujYC+0pM3Dx?Kjs+xq>HAt@QRDIf|FeJqfZ( z=3S|9&!1y!k^)4S7=GTjTWMgiR(HAhJ6IqiO*IXXT-b^2JzA7u0xvIWONsIbAmM>+ z%tvvQK`5u=T>Xg*SB85P5AsjgO)o`U3;q3bXL)kWh8@U+PLpXW+7Uo(*vd=12?dLp zL|I9>8m?zs!Gp@Rfw2YaseTW&erDC*9v%1WosE#C*zuIj99rwz=YXM!vqy zHy9wgC%Uz%V|ctCS3z3FcfUXGDj#09OLN+3QWNo1-bAXV|M|qCv0w3YytlCrWL|n` zx%unO_k?tvCCuESEZmu?(@je#LW>*R52;Ya3~lTNJfTFHya{#p=IDtB9M?-xxJy~c z{yI1xDyb}-esWsKduLljIG^^eWlHTY;#NGdNi?NpIA&WwLp27ui~Z_!5cZWUjkn(j zKi0Q-f}Xlfxwb4lZMWFBUCFePRp&dD{l*XCxW-g=AA3A~KWk;fbErVE z)W?E}v1Br=X=!0<1=(Neemksg@@t2K^!UeCpG?Se&5uE7(pYd6zqu5AY7lAA1X& z=_JPlmgfKO&XU9snQuV-0&yDPKpH7JKyWVCR5&a^K-Ym zw>N_s3)e?~$%8)nmq5vl6F!WU-hZQL4||`!BE>;`Cr78Dnv;`r%zbwjdK)pMc-uz89W6R4&ubi>nZBJbfxCH_f%*Y1SLa zf!gcz@pk*R1s|X?8pQweF_Ix<$ATKBo9%dtWuD`FLhKo?xF>v&Crs{a1SGWEZ7~zF zC0M%q832Hj=fRxdfe59_XXC#oAhaFb>M6AHos2=4?G@!wUzNYe3CI!w(7?(eH3aoY zwtChE2E!NbH9!DpYDBtX50y%>i5ztEkY|^%*I843#20Gd31Z4kPKS2G@Kr7A_Bwra z0}GO%hI4WXLyW2~5UtK?( zUwXhC zuBq;GGbUj4KJ%l`Ft8UmtgYIo+`brFukqN@?OrDWtg2*-G;vV8`2@;XH1g6}3;zUa z<;WRW6@pyXtqVj#mm0HX_NfnKx~~h;1}A33j{er8`>5{ULIAB-4cH)7Ec7uH0g<)| zYuxC{{M6XW?bJm3?FP>>Rvcv)&CQ1FN~z}$Gn(zdjEtGI;ylgm(-@qas7uUltnNo6 z`IR!oaWy8wb6iM}w$_hzn;smSSG9<$dpm`$n62JWE#&wwHZ$*>jWz(3nx>vG-18b% zob#IFiblYYGNAZPOy@vFc=75JOd^O0&(5a!joz#HjquUz1$+3nvO)4g%-v6)Su2IvAL#)K5Je51}8~IZ9H6TqZw^NfY^|d0~{($7(p{667DIjsg{-s zgdJsBZxc#oZv%qHXcU)m@{QT2f9!~zlE^<_Q&aw-;~;WSU-b?wd#2UQ4E~`&UAKkB zB{!!8G`mKhqq^zN%RmD1`9~dUavBN%54XC~`mOa9LVZ|sD(31ySUPKB->RuvS_fS@ z!xR7`Rt;z{CY9n2d;uH8+W=00ccnpAa$0y$+t<`8|2 zLM-!2RZajD0-&P-=U$GDia}a4$Idi)<-VnqarRLy@~~~%lT@z|KaUu|rWW1tP2xKWw~lO;Waf6g*y&qclvcuI>l@vRxkiYXgP9 zcCA)ZFc2YMdcw?Y;YIP3vBj+MyQNLYt3Q=yra}hr^SZ6c+4rKR&w+=GE{XxofHQ#p zs((};g~>pBH0nq7Z?8DnI~K{JI9V#9C1ZAK({0TL8M|0t?e<*qVJe0lPvEKDUDWlOQ!AEcNfwuT$b32 z+w@-bSO|W;WIt39*zpdTzh9A@X=njX?;yq-*{$$_ey{oK0 zl8`>l8Eopgh#EJ3t2HL4{y``@~w&pD7U%-@x7FMQE>B^!%wSXvSOY zBaH@iu-}@@NDP3g9@Lp$=nVxlA8Q06(K~_7;2ByOar7(8`m&ycnv|n2@Uaz=_PYc# z@}k}w@r1DEHd0ydhS4V51Zj%=g~@vXF(RbAGm(yYfIYEQ+>$;d&W3==vwNJwkJcm% zedr4_qmnkx1T77*C5HZ-UGJO2+YVQvukROsSO4}-*^s}qbu7r8`g#INg|{z4+<10u zG;0^{5W8pZ5RGhYf3!~HglOXv5W5%%2ro zM3c-bL_Qy2i-Ia>TRpt};uDAIENLJ*6|lv&H?K_yf4eqjN1$&NjyjP?Ns@%|9baJI zrO>?|KWVl0n!lgST0ARe;;`?`|LA>K@{6NC9AY)HQ{@7r9HSDmm6bu>>8~SaCjL5H z^S_CwiI!xS`fBwhur;??CpJfurkpmWV*!S^MFKR$7<%j{&S}JK`wQY1OpHy_Tge(E z<}jRHm(v1ESLx+T=~k$}FWZDEco8$5zg{nT*y&~wR{EA@!HyGSf*V&pS2Nl<+KWL9HlR2Af1Bc{muo&CDuOgu2*hACbXtz)k%%-r1mfbW)ObplZncEy-U&xvE%XU?MKSWBFVh6E$Fyy`9OB||cScyX$F!Ai2(e1g zg?11?y-a0=y0XhyGT`{rX^9HrvG$br18?YaN-!hh!e9;#^T2Qr&?2}Gr%+G{e^GZw zB;)`GZkM+0b{u)voqpD|T1;ukC>0Y`xrN|MB%f%>ybL5`G`gp&Im z1BXrxQ8SMd;@LU66HXWw3g6ir-klf>G}gZW>U)ZpHrVoDKioF`5|#mxa wa_`*? zR;A$QAA9_hBB?bk<*j>S$nA@Z(6i`GoV4cwk@SJIgJ-TTS#v3v3jwHD4)U(Z1PA$Y z3q=JS-~F%)-Hlxx$MbW;Oxp;nsR!snvEGbOf?JPg5q#3bW5OhdCRR!_3kx%O-F9ez z{SD$wOoxqltDtY#4-6MlIPn?JS`Xn>l4>(oMxiz0uY3U^ash6O>kQ_gb)K^0&c&W;SDoMd>~LqQ(v? zgOCthq@Ff3Tc8?kIFbH-ybhcrMaPR20;!8NV0<&3tMH9$Hzg)1!Cp*8QTf%Tcx>rB zmi-310Ire<6B=2Em6FB7h?lz7e=K#kNtC4ZTV;&-x(@jQrB>|PGHKhW^r+<^1t~A~ z8_pBW#R*JzKt@-SO+Jt6h}FGfB^>i5ItAV|x5gBkLbsCv8CSdd+Hk<$GYNS(deXx+ zAjrLxbk*JtgSEtbZJ4(xh)iOGxygp|_nPxC!})RE#7^dRxQEl42GL9x)gDWMuY6Ru z@k5#zr=P8Iuw_5q`2r=R6yXcHyf5?z6l5qWx5=JVMtJoKrbY|`HrUX0K`9Wii}(%M$( z$d0X5BSQ5a*dL2Kj!oH$=SPI6flOszc6 zQq3GH;TTWRE74>dX>1?l8&@$%Ix0)6A`hd*J2D+AfBNF>`Q~?Oc#c1GDf4%J`j`|*}Y6Z7fKF3rn#n;aTl|S zyoT8wglL_x6Zb3Ks9+>=amIEmJfuU9cXIvKm!l?Lx=t$=cOmeo*=0mc6Tz-#mvuL( zv9Tr-;*jkZZx41jtAZn|q}-qaFw*DpZzaHj0ctd*v~v8vvXMdTE_z-*-|l~9V<^~> z^CaAC&oXwU$*u2C1pM-lDRZQwRXH&T=HDZccCgR&fgL&Yxc+R9wmftLA*!xUJ>a0_ z%)sqcvp_Hdb+3mG9g|+nH9X~81#fTcQlm*JN7Qopn`W|?mYKBf{8!{FAhDx*RSm!H zI4Uzdz_%KH^Mp}*BNJ1~E`)Xj?YyT_QN+XT%)4BI^`uM6f&qJA|zZ%jg` zCbD6g7Mh{#*D}0@BqcK9nQf}#4d!t&7L*N7%dCE0RYa2ZUz;U=A~fB>qfl!>cIH7} zvs49T%hR$`Y(TAF_=`;=Ac3^*^w;Fu50$`+FMiNB(;F$!*yds|fo>9IWW^hd8Y=1S zPVMza;;pI%LbqH>4s>zwXdy&WA#iH9Z~aiA-4U7~0cVoz4wcf59TbnGwU<#T zUOlne(7yusYbufBvlACdd_;W-Pq(wRp~s;-j1t8zns1^$pOtzV0XEva>eO*lEmma< z(KLr}W`pldn(#@JJkSd+fbN__{2owg3p)sVYSH4pSq_!_Tqf>OdBv9sqt+4*mR~TX zB(_Tm~M96ad9uDafD?R9E*3#oP^`))^#mXxszETaD*Cc&Yciy{T6CP0vR zo?q8qHd-t>C_A?d0Vqh>GgFr4Z{4#&YJQws9%*K{%j{BS<|*zO+q&xN%TeB^sou;w z+2OMygkLbY8n94?@Zb9sb1h=2<+y5jPf;N7rHd;qs^0i8QAAyW-g1&))mTtJDXFua zl*L3pC(qSu6Gm@hx}sYO;?7Pho{O+phIBpf%D-@NG}ooZ07{q=^K1B0F)~d2Mbvgf zdPxyo&-VEpDmQXdbpL7xZ3J*1>OX%k`tjf~lopeKaZ+rc4!;i(K0bhQ=ntUPjz{~t zDX`c2GqCVwFroA{e`A?zG1$ih`jj%$1nm3V`)m+A?T^g^;%wU!?i0vn#L~E;jnWL8 zudnl?HTQ)i01s}hw-l>MN3B<_^P4GWo;CbTcU0t$KS8#J1kZzmZgWy7$Zs_&;R5@O zvFE@0F;2EL>Mmv<+Q|7YuP*8-j3y2BsVRM+_Bd`&Q9hSV@s(TpUA)MvjnUk+D`)&2 zoiq>iEYF9qLPm8~I9VU`$R#j32q(gwakInG@|j5+SBdCcg`6u>_B2Yp(w$jdxl`!%Ur?XYMA{C8oNU?{g6QNP*IARk zjkN+HX~t0Ci^??Mp$3LT15-qJ$P$tmJdlbU6dIXUv+|FtVHo;8A`tH>DYkU`G1v~d z_*$?`4&LWnQxOJc<9_<8*;4-e?aIFP9{a^6xA2xnK3$-~Jl9rkaX6D{T2s?6YzU>g zCaRl3Tgl1HYl(_XOo}q?$EfXb3$#Q&-^k~MZw-URZFq5RSsfhGr-pw3J6j-33A*iL z+=QJe#Z0*R5>lW=hd2em|6gkm-gz7Pcy0V34i`4in!g}eQE9ytkjm;`fTVWmg3f8)6P^Pf%_*OCKSP^>#bJxJ1HH*EAR*$K8q~|LJ(gpha=i? zE^!~w!yodZLvi(-ir^jgf8PUhbw7dTcGyXlAdS6r6d&KCE&)v0gmL9Sw+m!->RdE* zAw$TsHUjn1vB;imt-})5YyQ>M$!n@2kZAf%`bp9-7HHwI{?(&|KC5M)F{b!VN>+#s zzYLc8wINz-uVz*!4Bl_O@iLuTDTDB)4>Q(T$)Ndb3RLGFh>P@)|7b#q&VUh@A_iAR z;R~`PLV@Wr8%57g0f={QVdV%e%YHX%H3i*XZ?)j<3i)ZP*pJhXPe(I*z?}g)OrU9* z_%VQomGi$ofnh3v!Mh;OoR6lx(nTM}3_%4O24vg1$M4(S*!Bfx!5{XH$R$IiTSy%k1`Uv0%rXWbBuH^+jJx%Rf zPc#h+BMRLEI!l#M(aWcZ#dOv!Ns-2b18B&CrZ$`l3Ob3O(UN3jtB}Mlq!4py?KbkE zwiSH{&t$TtJ!L|=g>!h!+b2$bW@agv$18;p!Eaz3NFA*1ydwLz0B!XA8&n|!~ z1cO5tIY`w9&1x(2!^hJ;ChdZL)Dhv|gE+z}3>E}via0!jCRjlHI33RY()s(EA zWTl1)WRw+v_XHXSh_aBh%7-~J8ht_i_1|oi;y6hC`XB~iFEJmDfXgpA;z@|e6?&OZ zLB2@FHVE+MMPx%Ieym8Iwp{eclEtWdF=!j~@NQj6@Ou+C!l}H|?4(DgFoE_W-9TeH zG-8(5?iOgQ$q_xt19%#Ou_<1dK&CcBi?|;JiT`1o_&XucWO@gU5wlD zvP6ZBJwyKq=47aT)|h6mm&WZ1$_kALLjqSN7Nbjr3e70NVIWFIICBNW<{~BoY&@hz z@N;BT9+7V^=GkAm5 z$T#j}GOgcXZewgJHAVZefCpT}6aYi~18osC%}6kXT_RKa^U)tBvzxRS0oEoEopYWw z*TWbXAVcGe%3FwBmlaut@2oLYq5%Hyh1D2vJ~)^d)no~ZGObrQw+z%L=qO?!dtp8M z-?d2)K_S*)tPN8!4H)opYW5pA&F&){F_<{rpabs*Aqp}Z(>&X!zKy}d`%dBf1)N97 zisp^;u^>W&=kSC~2%P4?4{@e10AdPoEnoHiL8+8tZU*HHDQzKWi-61yg<%jdHwgzl z9K}Fan+zDz|71AWMG(hk_ZbNddzzP&R%5%Z{kkd*d#c|xQ49omMMbv>RKD*pjAoo0 zmvsha)h#l-1Ug#q(q_T%4x9)5CLG0oPs3BslAEJtx*iJtV4}^Yc3tW?q+h+mY95&fe33*Q z`9M2fL?(>&U`(RMx#;+3IA#wQcC)b4uZi4jF2fXnIvF`o60lI z&e!4#?y1UP56uBDBl}OWKDO&}R8Ad*rnP!v!%0DU?w>ibgzwC#t9;<$&KFHcZDK?` zED1WBujPx4&Vi^91tW)!g=Va7E7`^|A`1(wIUfzceM3QTNXbzWA8~vXvI(@+4DJh@`8wLpg{7Nr0RcmJb_TtC>2|LxYL45Z$iZYLcsb+u?qKE&@ zwmZI;(TbZD$|8*Dh%sosK?>pybg9%_=y*5f$;EK_(0-m*Yp7LVSK+4zM*2Y=4qN|Y(ZQ;4;q^ZTqUSDcR zaO>jfD&T0pN!oh-S^ov#c(IW$@DOl_=|DgHyX~suHbB3F`pn>_*zWHI!cAG6!%J-o zsMBP($E9Vfqt$IU{!&ReS8dco)kjD-xt@4Hc`ru!<{-ey%L(tCv<@?`&v?ZlcWZIJ z0=voAw5cl@-&ZKsqXSj&u)giAkHk6i;y~@5pke5{K_!3BhK~@S(YghY#SF6&a6Xd* z>2w;_JJkN7GKlv^MYGHcwGn{>{l2x|Q7>62b-v8UKpS?aG zogEwC^>ncRrtEPtrakDu3)~?+E9fllgi1?kVM{l6@)tH1TkG&Z>%IiM9*+Rt9(oL1 zHeGpzg@Gfr-G2cGp*>s+Bpa4x4}43R4;^TBZn_e;oN}v4UTHQ2g^(LELm|(2*eiu! zn~S&NR82kj6+Ii*4xGygeeR-z-6NuAgrtW0x}T18b}vAbJ>nY3=e!c3lSblg^_K>9&A2#vo%Og|U-egO7Ug3L-Qn|Rgub9=$BN?N0xHPe0^$&TqUTf0|6J&=xiD|9Ej}pBTDeBI275SfzPo0rx@pvmp~>I!nfJ5;G+W2bTynPfgJ99hyF=&r;HcUB zd`y5U=01M;cp$6h%<9}(5)&=Ir*?QOwNqlOZ!>{OySbj*x25W)KFy_kMyXz^MaMIs zNZqLP;Q2;8-!vTTzUwJOe5UU!L~^cwIzsS})4s6*kJo+)@|I zIjk=7696yw*7~*3cbvt=OU}4Oau>Awe-c=cB34{^PROtl~%IV?T?-N z+3}=ZOJRqfEO7&UVTc@$&r|7>i-9xMEj@X~jPiX}QsGARM4}7s=>aa>>1S-Xmw(bh zp?PeFaQy3V8QvPZ6pX(hwr|OBpQBdCIp7j6{C}_8e9j-vFLk_sprS*i@~8LFGHk-M z-YNFnTxe+R-t6|^Z=YaB$lN;7&xt=c>=ziS`>uR5Gjb>D;MAjb@>bdCS)KB1=7!qm z}8pc1FNr?3M{Jr5Q^+I%|6P z`A}E;Osg}$#NcL%xWw5x35D5Z0k}I-(q0&&%Fg5{r3EwhxGTMe!@YiZ_2Q04ddQnK z@zXm_;^c0!i(3po&U<^0)AyX8u3VdWJi7%L`p1K|33?!2ZaZH$10HS%6_$8vEX&!D zKeFO_HdZ$-fB<&a*V^s#mcz#HJcnD=04t>#uc%iceXvRS!7!ci*9#ufXJ04v|?GFf`?J0`zh8_;vkKd-JN9J-@hx zwlC2AvA;#EjDGzzz*gIkyz+4V9CRf=ap=;tzr6C?PTliO6F?v&jCM&16kO~9a)ZRVAv}OiAaQ(T;SY5Pg)IAVTmOe1U48IOv~HgqkA3ZdmC<1Rdy@t@_vvJ zPYrP=>Nh%OE}KK)4>;$-ci^>N3?{I<6CABz;o<$SXoZ2i6D2oB_o?;~5g8HA7Bn){ zPYVnS=AVkN@ChbpF7c_+)XTDeKk6j8NF_ZQs_yB9&hSXaNLMU0>vFzO@wmJ`Vf+V> zG;%z*a}&s3VQ%M*xdYg}JPiKVLLOe9p%mBc*O?&mPX;o;&x3^UfcTdIQ1}+wj`t~5 zLzcdE{3kIMluaIDpI+A2*Xy;N4Fo*l_xr=07|coa1=5NuZ}4YhN}0*lKc=h7aQhic ziFlC41Ulrr2#!+Zk04{Rj6HlXA<3RS(2*1$3RHxIWjr%86ql9Ha<%3BRI>9BJzAYO zG0IaZg6>M`wl_@&Fn}hprS{sEWU+M!$3zWvQ;^*(*FLaZq7eXGW4>FLN?@$K=xZ4N1q+8u?L`4$D~J~6^LeX#CbXn*P@A3plbudLFt z^4y=MCzwiX)6NdrLrs$G-r#63A`zyaLopJG7SuGdcX;>$fTgX)+F*^uLA!l>Lk`m* z&uH9RaXiLUl*qW+O>`}liKQAo3KFFt)LGL0LcgSt%svO zLCZzG?Dqcv+<~@UgBtvJNCUcdh~}%>+ay7g+4Cet(1Dx!;c0VV#t!2>Iw)Ng3E1+% z8}N9T#2?c{plK*FVrU|R8a^lfrxCCDNHv-OQ3(a6bRD*W67jKWT|O{uDc>iUt0kAq zAlJK%HyO|H;4Wv&?iN`#yU9{a=h8vrFt_{Zg!B>+$rs%@+^^SYcv|$`#1hY+pt-lK zSjO%NnN)~9OFHB2rtIcDjkQ#AJgu;8$HsF2=LxRd8C z<39sXxUS4w(RVpd&6603>t_kikmN)<6#S)g9$G-znVfe<1Y{gcZ*4u(V6x5;*f4b# zw>=r+ao;K~V~Ker+2+xX@y&t`pEOF=YT^Ngd%nQEdad*bEb$9Q3Z|Sz`Itc zdtd74wL{O~JT#VbtKracjhzr6*>nuph^pIfSnq}Vbj{hG40Ej-8x4A=Sy3+<5Ht+n zqcux|X*#FJA-KyxV0bK+jvcY5Jd@-gGNK19qYt4~lRa!7UO=%w%=W3+dR@1nRo z1Vlb?WJ%l+{RTpWWm?LMhmJPG#VD9JfDb6OES?3p-28ZaUjwB6*|UFovJc!nC4S$` zoqVF~mU|6tc#3dXr#d47Ouo^+or~udG-(sRFgcW{GmBa0KBA3pOMY%u{Mu^4zw9o0 z*{CX)%#i5FF#}!0vorTBBq@ut;UnA8WDWH|_)-!$6@Mz~vlEg$;F#345M%1ET#m({ zl3WdtF;-&8JP)zUDj06Z?-F;9LOZ}lTi^)TP1){Ld$1pDv5NjV@2DIr?5ZZ6T7SHc)CeF;>rXe5xLFM9eh^r~K(5fqcX;NDjAu2~78AdqbVrbg{wC7uX^p zOS$T{4*JnzdnIKCdD?KBfYIf6*>K)|8_k7=!J2qR%KF28&F1ux1gkrD*0ppG&g}%? zEc({D{)J*ZFWG-RKGV4$|F}D{h1D|=5s2pjN`EN8%i%5%O6)w(J37jmYuG1JS zs%8b}Zxbj+ZC}|jWUGF6NPOp0vz6p;!qDF8oPl=~u)^a*a<-pwz3o;`d)Wg-te206 zNv6phIW=`2DvSy*>TCk=ktQyr;a5M8lh2DRB z26S-yJ4}B3)Pte}`KPHoBvjMJ`z>cqTNwK^?l)Kd$+-;DH29lZ_3pR#*K0w1aT@Fr z>doCH@2WooQFHbF#@Ua}CiellS`>=P)?ACb2GiboYz`fw{IVrxppG2vnzsHJZ4|g! zFfFB(uOWAywGGWRt9P)Y$wc->o~<${oD#ex*u2jsFfKbYiJEmRDd<(WjYeCAiON^`?F~%)gF%^mr!vgM1FHv!;LmZBDzDSH zXV*KfIFeW?zuMmpwzr3)jG*HPw&X*^SuKGIq^AeMGWjKs{ff}q&l2Y&F5!SYfQ5wu zdN{Ec`C`UlH$472sao7C+hc_jHlGwUoqU@~?G%uBlD!~A3E^#??D+j;^@P`!#UXmE!%LVwJ)1(+}JE&y@#)E7{cR{19 zmae`jL=KnT*^Ak@Mwei16`@5wjj5!w;RAnQ6H=|OvH>Oj)BR}qqUG(uz=6<|{FeCX zWmnZ-?YP-oKT!qqH;Zf)zqg?Dlow`4gojE{+1pa@AcxNNzPm5$9_J}E0T5=DHA(5h6g9 zKph`>fI4@)v~~m`ckOlJz7+5;xycNOV)K;|5POTXa^hLjM)UV7+nenu#bxE?GGIIZ zJL@A~-Bq?F3mj_XQ|$EbIVWJJ6faKh%KZ+z0Q)}PL1S+_Zh@8G-T2a0=SSe#a1#6a zt1}t}8(SPk3<%@X*3Rs%^8}hcTU25eDJY6VXVPG@L z&YWcU=P-u5Mp2Qltva9jh5L4>?;*^s6EL@rE#vn5ZGGj}oUxQhnfvrPDeJh(&bZ8w z4?L%l)P>WTTR6Ccu(@%jB zA&X~H*&p+pmVKMk--z$;DMk+k@z~MRXnh_z6F00F7i7Sb1LjId)wsZIC({yny? zOb*8LG517_}k6_vN!*r|ZEyW(BI&_Cjgz|1}IQK0v(I0GF9X`x z#S!n0{uW1l1c8`6nNZ51fBx~m4h8`-T-uaV;3&+AL#9yr_^oH(gmW+6eIDZZg@m!W zznH5jJxDB~2FgtYavtS;yxm-SZV6ADTztIucv@?4Xf3=`#ozeDTU@e#^0HHudl24w zVoOo!gTHqD8mG9PO0frcBQ|l&fszRuW$!QT5Sf-Cry)QkfKj>U>{ltEQsV$%aCFjp z8$-#M$CRIalOT)52N(U|NW6PN{FG@>+gJmUM{7}N^U3Bn^_pQUblys98Th36D8V0v zY_gliK~^L)nKKGD;oy&Hk}m)F$EmXbqKJyGqRDP4)<;X1P40NJ z>v7ffp2zP7=0OipQiC;slzaZJy}r*Mn+v_FWjgvC*dkPQ`gZ{glQN9hYE^p+60|jX ze}yRviIW6_d^Z_t^Ni}ECK#_Cm%bYK`cXUv=P;y$;vfS9xRaT){CqZ8bHtZ_$6JW7 zUEu@LDCh$rwZy1>%8DhsC&WO8vTu|^Bu2MJ$DUUY;0dn6*8eG%CcYdg53vd{_;s8b z+yUHzvGEreZhi(xF=%)I^nd}zEK|QGvzs|2Hmf$%$6Yl(P4orfG1!;P7Qn&3`bkD+ZxVXJc0-(I!rc6P6J$T+Ei^E+9lH1c>t%| zTK3UY6;vXjdpEKrUjZv?^Rj>$I>AFMSMWSF6t#bK zNdt!I{*5U#SEV%=GYqbLe2*2J=m_H?#Fsn>3~fd55NT+t%98#b0=z;~W-=~YvE4}e zfN3=2?dr(LPy|^6c4#yL2t|%mgzespx>&`#)G6)xD~);~$| zrBKiaa>K_!<#rk9RJ*Nyl1Lq6Pp7y8ww(s_#H<%vvY}DXQr)+mKqe&S^WD-T0@cw2 z8r%ms>|dE64e=Bi0{a4|%VpkXKql>rd8il&oJNa}$Kac;Q5BB|4JPsoy$I^xP0qGJ$C z>)t^yxJpryO4D}v6^z+|!H4#cvzyC7xYuokgDaa7+k=P3u<}ofsqLDc?+gL@Xdzg( z;8`me(HMMes^Rjpvly@^GlX{ z$X`(raIR7$Fv_3-C|4$|#QXvE_UHL%InoVd@l!r%UrKP%Z_qwA zT#FkVbT6^*r1jn4B75t!|D0_;6EY(Q$%1dM+wv+eUvZRg8vm`>IuO$LuMnMq2DlC? zf_6DHNH|d=fD+kzwzg1*p~No^=nc+=XeJ*lE&+f!3`@y93q2uqI3{-Q^jNXYo0~o_E+xI?^g;fUZp9MF{g^LQw6~=JiE9C_*X<2 z?PzGX!CPFtb+8PRYO`8Ui%9PESoUyPAbAqAutf3ju7|_j)J&Xvq&dA`^UGU?-;|3?z+}McNI?as&JrdNvF?b>Nd&urVt^lN? z*J!~DKowH5<;FII!pPtt4|ZnPtY_j27cnBC1L&+cChxvuCxW)KSKQ>uK5Q{Ml zI)duW<^&i}r-8s1N=}E#0qz!7me2sQ4q_!5h(8d+zFNBcrn>!-Sv-I|tt(cKwE7*V zJ9NyJ1X-X@3ho~jRt9j8V~SaU4_JqS*~`l3;)q$wX6ACl6Lwn)9hXC+Oyj>S5r90J z5)VWaAc2=&&Ic?b6bc3eO1Cf?L1rgFz~q-8T~KRjY|3h_C~kwcfeGE{;#Nl@m)zLh z6UJrb#b6G~gCMA?`I2p~?j znhER$!6l1)n7RsN59xvv1o3VuZu#w>+ni!3sknhtVEl}nE$F^DkkYRp=A5Fio&zyQ z)ELM(SGq_AbO1~abYB>uuPMJGwmG-eTt49hAc?47WU6(evz_dpsk>=Zn?c@E2iL2R zittYeg7ys?EuRB{F}N25#;ly$e-xoRKCJrBUL*AXHRc+jw+)t+>uC&b=E!)sgl3iz>{s)lNTbKimKx>gx5r{x%pdV!mTl~8b57&3FEUaOn zd7HDCx(w8@oYw@N;3Gx^lW`_ux%#UwXY=JzfP|&hdYk z%m({!-wJ(v!CH4i0lH?6`lB7x8m5bQ30a9W8ei=_G8?eO)<)7sxB4>xwgyWa)MP4d z=R38}Iu}lDg|iMbKMqjn&y0n(ntHp#ZdnY)Zf=QZ9?oh>5 zU)UK#*^Pkpu!5pCaJO{;ZTmdbr#gHfw#QgCb-*yIlW82JHOl~3nHfQzU2 z+xr1FuanF>f^)M0d>_>*fK})3ZZp%xCW901o=;XQo({(uDH7@jUQkG}x z`YojE&{Zh$`trFw*;uA-$>)7k2dl|w{g>tKmJ?^{I%TwjKwBcf&)Pxz+q*M^qf5uh zY<$$>G@9W~kUL&7oAtM6W2T5DoZI2nTk)jZIkS%TShCstj%8C?Y?0-WP}Cnc1N7!G z696ia#{OBlYgn;qa3{8 zMnq-x*^{`HrSP2+efl`4*lgw?93ZrzFn+w^Pg4m(qOB!{_w3J$7p`J*;*Ys^n(_bf zh4Y%4`_Ler58lDwPDm6M`r}*N_2b+qkl|LM1mG=39yIc|yI(~&BI70fb+z6u7p7&Q z!9jO$K61KJ|NXRx$!b*nWQ*TZz6~+g>hH@RyrX?fOh*FEf#YQKhc<+4SL06W;NkB4 zF3|eCf{tF+d24sA>dsz)6Fn@pJ5yrEnBZFNryPNOO>QHLjnNmjoL+kvao zR{j=pLWSowwr{0nifl+vGz}L1RN)>S)u8;>Q6deyKwF00o-?%#_bhvwhMA2tKK{s= z+$?_;o_4Az*GDW9?HrT2-KEvVc{(u#Lx8A*vqXbFJaJS`d{votVaE?cL4>UlO4d1l z(V`DV*)ApkXoA*p}aR2J&80M6xO_ z!6g3P{C|)$Ut)aNXb9VY&yI)hgPC28jTtJ_87etRzx}YRITgXC{ftUX!SCyX6!3uLwi#v7pw2; zY|2qdA$BegPEA4QO}aOe>ZMH)?E##=mmouH{dM#0xOB}2N>mdVL)&zd^dP|kc;=vs z4CaN4B&Bhp#Pn>+9zLC;iyOH~)TkR%if0#bY4$9=p>`n$T4Z>tL!wi=N#0T4(+$Es z=zr9=oRTjk+-Ek)?-XgS;u;iofWkYvx04LfzTfo6CsQw-nKb39H{D)q8kQc_Xf`*WjA*{Qh^JCS}sn396KEBbgNWPYm4^4$%m!|{d=@a+n|#GI2n z$&RMql%!pYHWZO(#4?wjIIZCaB9HCA!6JlL5~RZ*@PCU6r~a^|j#eR3DAj)>v&Ubw@ zeQP{ndeoxE9hPa{77E~d{hium1i#Yq%bOSbW>P8CKtRW>y=gi$p~=6zwIj`v;EA4H z|Et3&YCravi>}#^cJ1kZtXc0mM{}`W9}#-maFXxTv)E!|JL*bnxXR4%pVGkJdPMC# z)3<$44(1S-I9Oh5E>zwk4zL5jA>cjh*vL=kV{PKP8+8Da(WBJGjw3Q{qk^o>PySo~ zDj>D57eNhk9uYH=27EB`NMWw27kC`EkO;-5%vmlLdVEo5&lc<4PK<=_@=reS^F*&A1;{*+JZ-JmUd67K>#5P3s#Lx%9a0epqAN@D}Ee7G5?d`nsBd%wR-dAG*tf zQky!?wgWKf*LgERWo1u!V!vQ^@-I4vZ%ZBEXO<}Ha1o_bKinl`hkYQvyT}o@6VhDH zHvPG=(Q2Y3+YFA(+EyuRQE`lDvN3Hb{@s+f>wyQzcev1yr3Qzup&}#4IgQkFS8p~x zg)8PRpv+!$5ErY6;(7I=gtdWnWYc?N3nWbG7L3O6iWdZnNH7xCD zB0CPy#@qf8N{Y8tIVC92F8s9$Z^Q7b0cHuKY-komZa}>Q_b1iVU&G7QstuGUaWD+$>m0_{;hxgpoafTAxF zI)K+)$;r9F%6bhH9(Tq=)1o1x<9ZFYx5A#7ZI=d*o7i805RP6oGqf_{dp*}!Uv}H> z9Ni;qtF8PC*}_ z648y&7(JCX2=g%Wzc>iwHMeLf|Gi~}IS%*-b_VX}M}|w496_(jB3n zOCJ-WRr@=qd8ivrm01{D^wEwo=DV4`5^p_s&7<)C(h*yxa;x)0C`PplsaU2 zUJ2UCqj)t0QD7w?ua0gYASB_8=GE`m&azxv?}9ed-`w^8Q4uvs1^u_(ng69C!WJt* zi(RAdHmndEcxqnhRB<&F~7DSe7UWUA(SWKB`{!NuGYzjlg9-;QLuV2nqz@-4>u zkc}naz#3t&3S$sxeO{WviqXmqo|)i9{5g<9C@FHg)|4iG3HASZe!K`%>dkrt@JH0B9LVyMJJiOS>peqj*)^0Pn&u4ef&|KAm;agtI`Lm=Yk-j zUAU|y-XV7>t3j3o>fudW%X;CxK@(4UxImcEiwD+1PQgx~kz#k1cSn8c z9%G*ur$Z^~N_(`v^`@56IiA3FeNvUY1^1sHKX zZj`lwcBK9C>PPbJ>sA_o92#Za_tW|10T4U>PWoBIFcE19w`ZC=##(k|#5b^C(u3gi zj6GB&^c$V+Ho#o5`n8Q-G}?ptunmZH2;}qqh!yFmZg{I5`6yOzUrNiqb``aDgIWLcpeTdRuWWGafzRg=f zlM0zXmNLdLOb+KCmR1fgf*$_Q21oIpjDhxTYq!omsRHg7Po6aj9`BEzSj3UD|2M*) z$-)1N@W%sm{w`+&r1>jB2jJl0{QnlAO%Sfc5;a}>b(;EjV?~)?gW*8-|1{-e4NQQB zpc?M8vt45?19SNxmHj=Dw>+0_OIurycWL+gTluRg;lm$)e~6bjUb1%7$<+5d_eXo$ z(7t-TE~+cq7vD7-S_83zGZ8$Kc39E}lyq6x1eM8L3L8@Pw>)c@LYY+ z4?w+X*p#fWp4#md5x0<)VjzCyc+*_rz4+EB{VuUfngal4<6KXynRpHVI3)O%x6GmZ zf_>!%!5xq5SkMsSmYTX`t^!ii_wNLgS2{(yGM7s|fP*H3WGW&-hSAVJ zZ_G)jv*>*XZJT~Cl5ekd{PhSw<+_m5=~=SfMwqF2Pp`+`U@a?i>Cignu*ok%d3dT_ z9-h^{Vw&_i;dYLbr;kGg9x$k3{_BBXy2zxuWQS8q`u8S%)@ce7<)m5IkRNMIEWBIi zC?Dn7@Dl-W7*djpLrm22x7MEl-w_lNyE^Y3<{kBMW#YOtAd(=DFpj<&)Dpv5k;Mbj zcqb>T=UG-oEf*t@1xk_)ya{LoB`E?R%_^~~rVB1g>cODKGrctK(5fsuhYc057Jt*f zV|>q`3E$0TAmr1?^%gGP7ZPD?<|B4>V!=Dm-`)%4t{ed#l;f4}iSTnvU)oBSKT;Hq zps`$gp6H;WbKIhT9|R+gHMet_j_B&*GGpc_o3u+4$L(v^f?cf@4&+B%3N`}V{eoC* zyBAvyft5Jk{X-;=Q5l#FYcIr1(Msk$c>En~9YK;N>p+iVFE9@#U>YHapt`S=O$WNc zCo<8UUG*TRHg+TNS&x2ni6DExVnRX~v!|HlIg`I}&{n79EVLvwg&uSb!}ZZ3-4f+w zZ_^Ui8Xtdf1M1aZtq)uoWL*P%^%s(qiVBx{WkwXL{4yRl1*|nuW3xI2-RiNeJ8TQh zI7%y-OihbrUXmiq|zYb3n*!AenHVPavXL?a{_DK3zyV)hJ=o?<>Ms=?Ny|lcm z*1)Cr&KX8er9?2}ql^-x@rUH(`i}ly^gQ#~2nx+f@hm0BD32A}D#8KiXBEa;p(}$f z33TNTaF#o(SIv@vW@XKLnRL3|4yjsIVY>}-{h2BIp-^f4EgW^J$<0R_(hZ#!wnA93 zP(LsbUeEX^Xf8p^Mv2&|-&N(%7{Q~TMYUu~NTypbvUj5xst1H_9(hQf`e`mOqj6_&mWkb2%0}metwd9}432 z{?ILO&6K;v`KnxMR`+AR;(qRXqLC75ajCZ4qO0>1qo4ZWH&pr(Y?vI)UpTBBe&ns0 zh{Ofb`n>N8ZCIoT9Ze!U7|{1-qsa6sS%WutYtX~9krDUHI?@S5@ohB5vQ~1=ib=CcfOV!4c@+Wp6*^M7yPP* zzixj^og~g}2+8>(>QJ8#zY z(;0147-}T9BYi6Cmu{jSb|AWl_2i{Wdlt8Va=^4>GR}%4_JA_}iJWEWzoA&Ks=lzv=C{mzgn4)j)qq-%)T= zF{G)Th>6w*h~4tp5n4Un{QjFlCn)Xx7&xc>Enl_9N_;ghT|9eBAkp>|gG=LATJjyS zJz8NzBmY}?T$bp^fn!5dO2*xtSIW82+@ZqTYexYEZ_3A6g*v(der}UOO}wW+%NDY! z*WtIX@Bu^!a+ibRE|pI#XlnL9HDLgh&6u%R^L^m$05+aWlrgwlsFMo)=!8B z!HMm!czfS^XO)r6E%lhErHz7>(=%ZF*L2D9;2GJ*AkO(v%Inb$lh_$RVWFJMbAK_4N1A8m*4x<v0b{-laUG zXe?xkEhn4DIZ67nWjH&!{YXnQkBkN`;L6R03eeBPq;Q#TD=MU4iFDBZY6xUrffH$o zv)G6<+t`rC+}I$CA^6tj$KA7~r`oQJQZ`e?x?z|>Xf)G=_p{D>h=$>5xYL3SkK+RM zgjgsIqozrb#l6ChFW)+t#QZ0WL&)PG^Yt{8$;fHJj#H$r>}+gs0E%)YRrldWvq4Km zHUP^he}p}%Cy*iFr(@4XPjHifi4E-^{|bdRem`UZ_cyL5{m9GxYevry`81CvOdsn) z$5m&~y~B!d-iwt8MfJ2B7U!BiO>Mwkx9rRa&kPUj8_DnAX^I{X!oQulW;c9|laL@x+hu$8b}59Ib1y~TgPGRSvQB_*RT8h!nO>}LGdly3Byn~JP^ zls&Tem@op$L1C8$Oh=UDm9sazoeIzpZE(^(hr>HUu0$)psoKGR6v2&ngbR)lHZi}K5XisGsc>F0|vH&mZ9pH zyet_>QsA*d)cnmS#-xSikH&9wrZOv@$}A#75yHkDB39V|q8@g{1M6_uTkG~bO&P1a zUfxv_hfwhT86r9yM5I?{~vV(rINJ*+Z9EU%f`={1sLJ@nZDB_Soffhj)aR4Cg zyfQDwpGnf2Ji5ks1xuzhQ-Wk@b*ZX1 zgp+UM99g&QM9bDTtUC=n6g8p0lA&G4in!;TZ=osz`v$Sh&u0Zb*Q{9KDI|MwanYU z5Kc{C>2~Dh?jR66WbZ%#BhYL8*x0irz#)YCFR|lTpagmm8K$jZ!}*0IW&nZnEy21w zXH=zmHkbIgGE}o3DMGm(>}C?U{)htQcT7(m;y6Hl(jDjp#MSvJ678dLM>a;^Mc1xD ztNU;gplk=xWlrJeo_CRj(yT2Lcy}$O^0WIvuPq59$+_#E7xFbrf?f{wICP|(LPlSz zQ&~%crzT8?r>1`1-Yk_{BEWfV?Ys@u^&T&=h-VsSP{^MYK5}C9^;x07m#j0h(!EBTMV{w)5) zjR^V^=trI#P~NEA>O*;xqX0Zlq4vl}!>}z7XTqd#4ZHbb$ZC zAEDDOALedbU+vVN7C($+p8o22V9o88P+hzc=-iKn2{c8O#QHB8I0Od>^%fY`Ktwc2 zdLSm2BsSnoz+wCK8T*i5Oz7nU32uz&TLz8mbiNpS!EaN5-6XBND$WAj2C@QEY} zc%?Zv?!Z~}ef+LE>3rCwe*rU@@(V1%Wm;a|vJ3k2@O`ZdSdJx00)7bu1xTfYcp3v< zVM*cufJR;K7h50CppVf9^zhTz-rDDfuvsr#A-CCRPh8N}`IBJ$-qusq-z&;(#~Z~l zbe!!tIG^Ax$C?<@niv`1q3Cm^OZi(w-mW1)AdII`+LMTHm2U*@8sZdK(+9e9^3Ow_ z&Z15KXVISwmV@qT$OZq?5pS1ib252e zBx5MoKZsq(({Wg~#;G5>sz1QMTS83QP)_~>s$pV&9+kt-IVzhNE||Hn3R=NHr=ozV zuqu&+2df>560MO0(<$KqBDshaI{sKcpa@^;cR`B`JmnnlN3f#N7{Eju3PLXceOS?( zmm;rQ$d5i*aSI~7Rq>a_-|}mZ)XqA~!EiR_ijW!(Bi9eT3voH>B$2GHq-)r-{q1n! zaX~@5;J=|ufqGWcmkT8ZO#3E>QXa<6*!$)Ln$B{eW(?)N7BPTQqN^cH3Bc+vuUxX> zLHl*5_uiDX@1_cD%YZ}|b${a9S~44(Z6zm;67x{WPS8ht6`rqB6_Id;{4Z%*5C;cX3nXBc7G>__*g zD=CS!5(6tBRsoS)*a92IeT-OoHL*Py z`Nrk+ZLYW@- znHv7{QZQi0$KUSu9o^WBP@os}RD=O&@wpg%e3nl&hx9>`URUj#FgG4R+}{!UuE#%t zgr`!iH@OW5J!TU^BhHv@o{H_nF=2T{cZX$`NtPfYFafXz9C1nT(G}tw^jIpTF24%Z zC|IXjLZ>U%L1cQXuv;ou-1?+iN-21y2Kvz^@Eek__j@+-d^W$ly^wYiAjxc1Xcwq|U6ILcB@09=ffXAVT5UCPfg! z{jvgkRP1S+@wv`6O&KwzgG+;ArWK9CHX}dGpN4o*Zq+2#sEHnOf~~I4LuvwOUL3aQ zgdPvgP~tj@@ZgKSJ`3B#%rr}65r4Qe)O%Y*Z zjbW7!5?L zIyLKN4v24<HzK&S%J|{o5 zKzLmq#(i2$C&5^~wzxQAdB_u)t6^M-%TD#V&}-fN*S9-kR68;+1-(J&#EI(YfENQG z3)zO9Q}A_Svcv5nP^KLcDTA`FxQ;VBxh&U(pti8bP6#Z4)2biyHTL_7Taeh<*AQo^ zdNNABsJT$=7vD^gRrDu~wnDhN8pvunIwHs%7~77aVDDvS)Lyv}?oa?2kp$o!DOPo; zu<1TK+Ca=?;9i8tAJ>T0k_mywU1K zAAP!e2ysRsK5p}4+%6F%<$Ridg)rNl7wC#Vt+%%EM)+}KY(jRf9nzGjrUv7%ulQkDsIfYLk5wFP%*&3w z(&!1FD9;!xYcrFoCFHM{LHCGIX5Wymma!sdb#~nNUaqJ)2_Yj)!5NYRQ#iM~x1dcd zzFX=Lbo%%nMrJ+UKr;6xLst>N%b+o#lieDg?pliSXgZJ*-q!XuInI@BoINX!f7vbn znsTb{SZDulNi)LqvGeb*csLf^@{B;w3nca3e^e=qWCDMPp@LG>Wa5i&6ewWRR}6HD z&ivzRm)0vRTY0#Q&{G`9Ktstj1I%v96@-tr3S>j@hberJ`=Sj-y9#hBpxQ2BBz3)7 zc8p}Iu}++llegiVllWzTrbc5fLw-({=CWPlN&+doz&X<%ufdhn@A~#C-v7W{{Cxe* z_pn;Sghe)FIEi0BQ;m75r#8(gk28r7kK~fbS)#&A&wAL#^Y87T=ozHq4?G9XmKb&8 zds&IANN4$o)0pDZWjMLnqv*%rTl`?Czpe(s|`-vy|TqgZ2!$5PH zK_0JU!>8B*e`~Vfj13bFakt1-ety7|BHXk&Zap)9fEgQOJ!*81nM@^Ekh9i0YV`o* zfu;}`=C^J1<`hw}>V{{(y$y)yU@}m`9>)X7Y9gmh#q&d0oDRSm6Hmf41fEx@vAiYB zR;0fL9~Wwy+2H~RvpsWbn92xBRGXdHSMx=25Xw4YY#9C(H^S$Jqe;7SteHIBfg$57 zTmzHC1j!?^gA0tdVtza2fw_JfBSd60Q4ItkGSzHN#Bfx%JrN4qq+99T&DZ?vBjC|Z za8g!Xx?<n(>t8RCUQDQo!;>WE?b zh5E_9+^Y3zT+$DYm$>^^E&tp<#+{-jTcqHa(K~p9E`j2-8L@6k283%MG;18aTP^G3>JpAWM<)INM`A$rQQ}2D38nwaC=>)D}0Pyv90S|ZgHTJ|R{3x@)b&B)n zDiN~oqUZ<^p}Rpmg2V_yHb!JvWA3R|ncX?37y$FEguz-{_J0O*I+{ikM>GpbiAPT# z9^ckqsd>vD=FCQwH5Qc;gq7il(u7>CiCYQo{|RAlxrX^sl}|W5)Rp5Kyb|*As=$}* zag`Vy3~)L5{p$ntg#`8z5MrYd!PsMdf{l7KpCQ99!&_?TXr3|!Y=CI8 z=VKr`D{yX}kz~3=TSPXRZrZX@c;{0d;S2jcDE2uVt5Qc*ddPJ8_pHQFu)gtYkHm_w zDS3%)!#*dUXBR!0pg0>alUkHA9Lr}5hqgoM? z2O}Ob0Iy7-a4XQBx;`O+NEDJf5T5}+OA1L!z!K@_)z-(|Qagq$5O-zb!Y+5nDFxF* zsG$gj2T3?_6;Fd9Oo>v7MrLNxfZGZ7p)NUMuj&ff+KZ$!N1Y*sxEqJ5C;wf@7)v() z4xjn-N_g7!e)1%rF|`m=6O~NowxqrHaIL5|>*u6^FY28Ev>VQ=;1S$K&FYHm&4_$2 zAV&U6YVQLWBE@uHPcAs4L}0{jA;qfIQsrPixFJc7ilr(?xGWOc(Bcfq%YB*_#G+sY zI}v%GC>TqP=Q_yumP2Ay(ZH6CS#qjxC6CStL(TmExZp@1=7r?7(}ie6dqz5}!%f^- zSUYEC_6#_C!^{PjhQvZ(+FO)coQw_ukceKD%$PBwzCO3(*rs$1OPBQjB+4;SzVo1Z z!wO_2gGlS(&mIraQ0r3y;K9DD*+o}Fec(H0g>;Q3Pq2BrOMf~<+v(V^Johm6rDQZj zv#W?YB%+G*Bt9&@B%(q>v%?5^<+)GJ7(dGQ85{-j?}V%P=Jg2yksrv2%T9h(GTi_{EyMvk4GbbtQ+m`75qBrA-C(=M{twWlkH~31jgYg zrIbI3S~XSoGvx@v-Ph@JgdKmTK06z+p{0CxxO|HKrH1}yr3n`c{WI|ETz>ALClh>C z^x#dA!dGZLzf6|&__?v9UqN4c0pEFxV^#2=ayE>OzfJ#`BOAtBoD@U>V^I=&68{LE zf%R=r7drf;dNbp_%jaXLkgtS+^;@l~qY5vfTqvDQ9TXjdQbAzKGS7?dT4J;2^n?|J z>Pq7Yrr1s2nl5oeM}XrMWLMYN zlVGny&75ZENS%ksN66#ulv>LWAz%BU;*&%WYC8d!fL2-X@tzkGN-D$G;i8nEWy|&b zJ$6jHtf+-w`H~qK-&;8%A@K!t3U&W-)%c7~z+aLOb5&2mOeL;mv)Bd~c7!vR&h;+A z*v~oZUI3mV{E&}JpMB6y5CGhR1mnPjcJ@NT#&H!zdE*+4%?O-18rxXfP#sFbAA7N` zEv18-a*{pUy&`xp$&>>$pS1&IFeJg~`S?KQ6Gzxk#JIe41Ks0Ccx_p(Sw@AINa^n6 z{RGyPRaE1Z3b76ILy=wC4UO%EVkOUcsy|FtO8S^ddT0zoxSsMI>HxyAq9mFy8k>qQ z?OZm#{6UvP(!UTztoQgAQ;I3R+p*joqoBHoJFT=69?K-kG01N^YemOJ%lTgUHkHAh8dKQ{$sg`I-M~AA#%T(BAHuz)1U>7} z72nL_WmbmSz}_qQs+z;6P@o* zwNPcH?mcu2f0h7a8=X+=mVxQHBS7o4dzYk$6z~Ilz=dLGqt~4U8uC1>&!BaZI+<(H zln%)~Lm|-q6+QKMO!Y*7*7)D%5-ck%6Bxk*`u**huDfIlO4o9RAq!YUdl%*F4Uy1I zMyNA6DJ=X9pohq!g6L3Ip<040MnMa|pNp@p)U1>_;2{o4sAy7A9pA3#-((U+;+bat z$ad9pTrD`y53uV=G76K@u>)n&9Y{m{j$<^ru|gPy=w9;X@>2S3{k6fMe&Rmr$KFS| zicVeBX=yC;N@NMRpIUYnf}hfMXeW(Rt_}KkcHQqV0I7JMcKst;>Yy95>6JJP6nn%# zr%3ed*p&bJQ(6U|d}0d$dhBWLhLvoc_mb*%kOx-ek7=GFRpx8RvT_%73OviAxRRro zwjKGpj-p3*v4F4eW9225+UI#EO5s5nVfatSo6FRn4qQjWT3jO$QLL62|0yh6=QvvU zASS?AD$}vh()(LEb*r;JMw7}CDF?nm@q-nZS&17*yQToX@&dG&I5tbRFB?U>J{>VK z=dwU`tCf6s_oG;e3tg%qv?DBzJgrB8szA$@*PO;VX zoeGjZo}F#b&1p%m(l(6QJ5zDv3e1}IQ=)B1e98BEg8WBHE+spNf--LKxrNk#k#iP& zVrZJx$+Ta$5fWWwHX5VIFx**!L#D6vkXg)-$uS5B3g}T22o-P2!N`)v+nbCgiy44@ z$2nBt7BAklNuyMx z$-q|RXf4iIHYEWpMu)m*UO`4L3)OOx^h0C9q;uAxd{?DNVKW)U6^7sMgRxHEOr(&e z5*X?xFJJUsQCKx>cA? zjmH)3M2C@knE0-;@jN-f9PVfzXSiF!9ty^YZI&&S6epCQhM9JGoMz!q|RKZE9njBmHB^Vu`n|)Zs|g&l|glm_gnxpEwoG7 z$T(|&0?O)1H-+yPH=B%LV($9t?^V|oPpCo82gZh0w68N_eX~=`J^JpJp1XC8z{#C(z<+Rw ze}6wafGPcWsQr!8S$CRvHN^oelkNJ`U~o8zKj>mB^s+J2->XcW^&rJJ!&ksf#|*Oc5yyp=vEeJpIyC(njnu4PG+1i0XHoClZjfpT^j-ufi*I)U~+peY2H``6fi&n{-oFdzztsG!nYWT(}Pb7M&2 ze^pMKVaz%PG1Y^^F)lh?c~8w7w0G|74?%HAqN{t+uRUMNH5aHOIjyM5z)9kGRMMbD;W6qGY9 z=v;Qxd)H~?h!Uv*w}1sxxTP}Oxj?aFH!@=ZVmQ7r4sj6KHJS?SS7ObPKc*>$kLPNM zR9Q>jNG<+^DSI-jT^&KVE`sung>uvQxflTRm|k(&>be7Qve_liZ}6EAHt!(4zt-?9KSPiLhPug?YplYggLLvm{6Z99W3q3}oEGVyrmYn?b84tRpMP_pt z`?te{8?srEj#EfG-;Zo}W8|O-t}3Ov2%P+;uc%{i&|Ls}@`15CS#ImRn%u=!8lvZV zdY-Y}3h&LClTh|QALxh)q2Ah;Uba`2eU~}@i$3L5XvV1Ol!zuwAMdgjspD-yr0kud zeuO8sCCMR=nNBfVWlxnvJC~(}$@t&N!cv~249|^TaG1$D=2coZgCqyA<%t)pm)oe~ z3mj({5Vir3ux~OA$+8T6HNZ+@x7mAZxkJrwJq36p-VONlJ(F&R6|vH!-Xjz>M3+9g zQKfoo30Nc6Gp)|QbtcCm02E7{@P`x00WW5K?wo(=#5qbGq{fP&jwBlLFr35QG5KCx_=pPf6huAN_-j?XcdFTTabcFs z8ae^;izY>QNPm=`@z>&VH=21nE$XU=n-kkGzp0hn z>8f^#GjGY2)c>Sx$JO#>+tJcoiYMrD)K~$TdU0h8=Yipz0J+Nc+@j29;lZ%gaBhv! zjYM@_#(J}`MSJj7YGEVSJ?+9U1!$z@wFPLRzr;PHn%QI&Ixg;vn~d^%@rgLsf}Z3y zY^s#w4pD)-a*{XoQ@t+t4%kB9+2LZc|H@hlhvw;=Dz$w_gpmF96&g!|@IE&(pw1f& z;c_f9!%{aGcatLBw4Y#M@V{rCI7Pbn2I-a-Y$j&^O-j5|rCM*)0yMhdYsUc~M`fMj zJjPv;@dVv(s9*#d!lt5(+4fuxrlaquHFi?=nqBW)z{O=0%Y_UfIAH9|M2>7m@eW~% z_Py%6l^!z83qFg>E3$SW;q=AXV`n|?hOUf@uRllb&nvu_S45LYG1njheTJfdl&G&J8injsTj3z6J=#ehf{0VDN33vtuBDhBWpVkKkkch@xA zX?%3xuQils3TJ)Nkf2+5y;RGhh7QoW{=qc$2cdT!orI)2olaZEt*b&2-MeGMjd$;R zl3kYx>LVxJ-~Pc>p?UT>PTp4KVf+!_Y~4VuSzC807dJ@#)?h}%vTpnqhd)WiXQ^$g zWG6_4eexD!ZSbxZnfd_Y(^j90nE4^!HC@tM85V%>M)6IyYg)xdj{5;P+J zX07C}SDKa!vaM(3BLS<|h^D3BdFlG))xA#J1cJ*Mrz+HK*JHyLXFrRpQtsL|Ig!DB zg_3z{XfJ~0uT=n^soKcj`z>IoSsS>7I&+jmq{Nv!#&zQMqB|27(5ZdSd}E>unASOw zzZvO0f1zjbBFpcag#ez2-@S=|3)@OJuw|-pm2Ln=@;;Ky!MIe3^&Yex)r{*h zwjwd_j_R?9?xM^WD58jqEU>?M*PG9?IwjE*qIEWmtq0gj+YapOy; zPo>8_qKtCd2NGl)Hy_LE=lm@u-gMV(hlHfuJ}J)pKUBSQd|c1>_}_+&)tGJ6*tTsu zjcsci+etUJZJUj48{63aZQrl&=a1hXv-jS;ckb+*nKLtc=5fw*x$uqk*KS}^ACqIH z$Ks4z@)U7mBiEW(eEB&bc7zId)T{Yf%8I^ao~SoJ@APYh*SC~ve`{y*`F!T`r=Chi zbv>GT*M>|JcD77ys_aq4PHV!0-+z>?zoLv);tQ(!GV+$SoMu&yF!k5Vn&Vzj z&cSF72df`yr&i^kQOs@d)%~$2KG(N*$<6+Y$JO&rr#rGqP?=u`NaveG(&foKdfUgW zUm+g)+9IUeLX=)#>&xQuF)T zS*TVStZhq4m|IboZ4!j!OS82{=#-q371}@l)YA3l7Ux4mqo>}*TPe@O50-oA5-wjD z!8o6`y16SsCO>ThOsWj!^GAAS$6ieX;Dhm8b4jwil@60(VwXul<7?iF?Z*1r^XZAm zezBinqK@UcGT~hiUi(;!g|vIKFq?hI+FQd6IEk*7dVC@HI>=m6xGZKi{>vSWn^}1XejyAdD_bzlg zFU*${>bEF{QDEQ92{(?3E_^Sbw(kR*em$h+zrnN(UtbqXl@|(2ZWP&NCaD}&4dJNM zk2l)&!K{t}l--@OEFueHmWB%u=hz=mwulp}$}G3FM>e_G!=s6V4t3kC56U8%ycba& zeb~6yneGrg_Jp-!*%MX(yPX%73uURfc~ihrFdeC7^3edEthl1yB9lMZiq92@pAZJ615!R4!I z>vxJ=a?_=eQENyfQ7I{HZq z0UrN%IB=*~(Zz8l&bLT9%Z?{T zzU6(VCiQ?M{IoLBY1FgKWv9rws#?Q?~h`#U6GK z4tFI-Zjc%VqvlGE2?{b(i8s0Vze}1SIrMF%U3e@r=}j7>rw&z1m-M>0)H{09V(7R2 zn%N-_?|i!Zt8cg62C8!XLYh%NbjX$ zXaO<9^L1z=C2&`@tyC_Uh)8s+6E1BzeiNK7G-I5sw|2@ZTRzUaQf3{^)UB@h^4@-6 zpAyq9w!v}MJvpXQ_pZ~w#B|afQ|7jzhQgF=Hr@9Wd7XcHY}HF{DmkANH^Xz03eXfp zn#?fz%qEea4?T|;L8xJL7bjv0W0{e-#2E}a9zw3765eViai~>YHVjQn%8EEx&TfhEJr>!>)C{g|EN7FiqVntrf zw0~UbG>}A}ZZI~tW~qza>Mdg|Y?abXh(xeGvz=+o1UNRSbx8lsv;%vRA_BDGNJzp% z{M)xARp(bv__JX!o%r#U$nrTym-$bi@LYeDxO6+zi~ri?z0HV&8Kbxe<)KVSec(`i z$1Iys2BdF=1micBz%g>t{(p&zhh-8XO_KIE;%sp&dX}ajlbK)TjqhMg&Xx&}a7aLe z=Ef7iglD%{(FZN}*h~Tk;R3J5Z2iWWg-D}}cw|I>YFPBmH~{hl)a1h`GCwd`fuJJ0gPq<;Ez*K1*~8g#k%U|t1GA%UePjyOJK_( z0ro&xh)D4*#;|%GofZbvw{{@>6En+B2C3}I`2N${!()zMq&cy6jG?d@3^oF^|G%W- z_TS$G+OPkwk&VXxHFCtAVE0qdTvN92l~_<-`rRiUUB%FxDNznkF2KfV>U;Ae^IuOc zI998(dH3C-9ekPn>Pl;}JU<4uedd6J;hzE9AgI zvyJnsI-NMY~41H*qmH&m1H z=U5Pi-Uk!*rpiLls{(NSvCE=*;3VMw*Hmg+=PIS6%m^jaWB-2m>a%#)Q`FrVxP_2% zkDI!zr&@iH(2vfS@%6FS#~u_Y&ArAN4+msqZqxHhx-&}o8{vz*V8fmq zVj$1{j4+({_Ys~eCMe*kfoa`-$CYbGp3Qt9Dbw{IqHg5!RJ3xw&Qa|91Y^ny>s>>H zgkTR`C7}JO8lEvRCCfLwTZ2ff*zl!EJ$hS~;xqPYMh}9m{B}?wl=){lGOX2%+tTU7 zAZVAjKd%6AEl1H6z|BMc{$D?A8t{&hxE225Jc@3>-fbRk;P-Tj-kk{3HozdT(Kv81 zDEs?yuy~4PdABff?t&^rEzVSTioU)JaGh|D=^(X6Ll52^HFmU`zIk(PImTWey;I+sn_mfMa^|Z|hJQ|A5~&>2d&~?1Q;` z@u{m$bjJPcYsRME4Hcz{bW<|j>D8<+_5vz{q6zy_fa5{^;9zOaG?QPja5(zzMitecLr-Yf zClwyOXGjaY%u{64TcOIR`ukPBMbH6jT6DMd#)TgkVSlYF?4{^1A@vzWpm29gN{r9b zHMEzq2VJagq5d?SpXbX^PJNa}JAl0=JD!|2rRSMdeUv642(*mVoY>)HARoGxhR@4o z`n7-{qb@*CJEPUV$(2;>2wzD@mNWPwhfFBHR*!9`ZNbVm#{g@zkV+)BY9U-FgERO^ z8(ACYLpig-4pRo-B*Qz|jJ|4lSA3Y}aTd9Q4WK$j5}-aKN3K9A@kms`h9s;>-*FQQn#3*LWMqvDo)O@ZoamkjTl$ z-RN-*z>VHi9z>i2YR{-u7>tHh-5h0HUW#qE}YuS1q@khqqhWC&YVY9zfAiF&ratgQ`dJhvoTipTT7nqigO(5{a}sb0v^h8||GK5qkZ5-+f59P7LaaloH++?SPxa zWlhkOMgRZJBx269_H~Cr*eO`W*lf>K7zSb#ZB+8#9EPVV0m>?`bh=03YHJgj_R^FY zY^`tFDN~Q7SO@-g+XYP4dR_q0A+UWHY~XE2=HN+_pp#Vn5voj$S?z44Gc(FI`kl=` zuT~l3bv~^g=T}~VGwACAzZfQzPOcgjbm|jY)mB)LYB_J8`eMrVl21Hc!rt$pkd#!^PEOF{)wXpTEG~Mq`(J4A6(fHwld1cC^Nat*sJS1%Bk=BwIi-m{$fK5K4 zWptAkE<=68-B51|HvAvTi0oV9+i$E2X3K~E$~Eq&I9d1jGXlv~J!W{$W=w;v%<@8B z=kYvFVhuX=`rhlev01U$!zht2o|vcB^Azi%NXoD3*2s`SLFmdI^6{#H>^t%~lxdFp z3q=sj!aZM`V(^v4=!ZH5idL&003KY6bbXt~Ck+yQu(5rYeH9Lli+uWJgS)X|Q@h@` zb(NP{cw62iM7Z4mVgSlTq{p_urAwo7b3iV;5m7T)q+MqX5q+BAXlbNNCtSF;tjF!i zQps|=@*Fte4(;d;q{N#XKF(>3!woAzOrFP=AVuND* zJ&iuZ4o85fy_1tCQq6cInULty21p$e z7d~9_A+lyu&Y$fLg7)pQFzV*7R&*52W=Pwpo^n^dFXJ~*_L9sd&haYeH;8#2d+rcA zQ}^x4$Td*Q?zUezs-Bn>&Sq$xRm&#MAojj{g4h^))(u2w)x9zY9D1_GN;p5E1zGTp ztIrTTTy0t8b+Z^{-ISD3-uN)zImaJex@%IOuehK*4!B^S|6t5d?N-a2^12IP&u*?U zNEImF38T+$ZZk-}$Ooy(b>-Z|eFtP7R(km`Z8DT!aaZazJ{sx!sge6_l?@oAB?coK zTo#nW3$QcXTU~Mint+&`vbG~FBy2aEMcD|D@DYkP8J7Ebvac_g^L zidk{-u(yUX-!pfpvvE^U*4xB{n7=_^V)Cb9lLf*~ch%MhmD@|wXrrb2S zI(YX;%=}~7F#_*~Za*7!vl*Ex`a_@}?5DZ_3kQ?$*-a9M0H?u^bSSnk--Lr?ovQr8 z6e>w-_LTN%!TPA|JA2){-lvLDElKdoD`))L`sPEr&(H|Eq-aX@k2JvH3W{d2omQf~<; z$9X!#p1d!=s%F)6jej;j_`$WI+n>}90X!e()un^iyjA^1;w@aq-(V8Hrd#Il^2U$} zRr{a%>7>%#TCF!9%WBEZopHVzW?I=9GIUkmqqyFma0g!yL@C(|HtVP9X-Kr6UwM-bvTnIy&ArB3TQgMc01C3^ zc2CFljA?MVn+t^q=eJ#&dod9Q*WuR*I3ym9T~qhL{tE?rNZC&|21mZe5rm44fFFBZ zj6|}*e1|$+CwFd?9MN4fG~;_`c^8A5Cl(OYDbA3P?USk2N0OMf8~F_3l*C8j+O27K zzfF7--nyvDJaWUCznwPr_WGIS0S2cnikcBum1t(D3mAh8iEv8^KP&NxY6Upeh#yn}E@F+8IF`V@m~FdplwtkWUkB!cIF+T3|`>^A~#vH-lDsx$%WhPFu2Yir?mc zX+RR~JzJAEL^PKFdQU-|TyZ<43zZ?jP-RY7(7(e_RbDD(^N~212bA_+F_G0oSUICD z2JV)n_Pv-Cv^H&eL)udMBYplo6Wo2Oc+&Jhi9Uabbq7({&|Y z+Rxh2DyolqNVMdYywd(-9m|Yo(LUnh{y=-ZW{qfQ^`E_0lS<^($GIV9l-^Nb$?@#A z;2}{XS8$)zd-lZYkBfeys!X8B$dj+NO@fkm?^6$5CX3e)QZK#%f zMva+9YW-|{BC&`A_LkY1>@-j-hs17)5&8KpR@IL{CR~T4H;>84nwU)`&Ea2=HLxAx zuU5U#>qtdJYI&jtOD_~o0jEhHfOdccA^TGKg{jl&S$uwBk?8!V z$nX-TAwyYyLRa%LTU3`bz6JcSaL>2h&YldS9*FuWX-EEq4aDR2ke3Cf?A?Jmi&sw^ z2iJ+OmHFw?lKVWUM!9whq`%rEJlOszpE|O5$n;8N3?sM;aQ0ca)op?8zYCcehaq3& za3>Hm0kNd#bAIQJ9o$@mmKAz7$w}BNhORCrUq8gZT9^o9A0fbr*vC1IHUuolIFUa# zPKMwuI$yMqpgrDoJ=9x`tk_3xgc`rsM^w4TxOZ>$G0LJSkLx+tYzaPS>T|K3H1yq{ zFxlc4WH8wxg^uhOE-i7x;af1sY<$Bl02|iy0jh~A3hCZ9C?38J!k7!R%A2FatEJpVC0ElYFXJty_E6X(I>NZ#A({t)j#lDBn7^=?*k7LTGsO_RynX7tHsjHm4n$3%N=XIvO3`33~Xg zU^6FGO;X%kTVPh^HSV-%@?#K}hPIe`6mWrt?ceD>U!abN$bD7?r&E%zGlF|c(|b3W zwVUhURnMPC0H9eqVOR`r}-07!n6kS0(H{Zg-1%Sel zWF&C0PcNzTpKbUAwW_!{1K8D@iWi!0i(;%er zK@!8pVf$-Qzq*EG?gG|@J;UJZvnd0a)Ct18tu(iUQ3W4;7$R(IttvzWdU17oSZ zgUG!*Yow}-@4gZKd0+c3P`mtuB|}T4B{^^lhLp-LU`^xjB-B*%ull_!uSV>3F1D!r z)(C0&PMdA(Zwqy?FpD1=E_u1|xvfI2;z&9`S{;lR+?BJzKI$hc85DPIfPN0xa1PD6 znVs~^@rfNyf|RVxF(h60jYgPXNR39&Ye}AN!8vLtxN}OIBdIRcoEqr9GlnBnwjmg>T>fX%40yyx;InYuW@UU*Quw+$90#=4I`PlRW)DE|1%E@ zZE)mw_fDuNKc|x}GXaXb{mb2`)KRqVrXeRM*jg3TY#MvwnGY>Tn~yUWWur5w4JKD>^HdoO%3TJB8ODA!L`8vRmbneVyP34QyHn*V4iWyK765V7exI)MwY~)K6rR#{ zvOTMVgWFsDuVi93p|OPahPM;lL3vr4{DIs*^RU41$K~}mocY@NF#|K&hd{&+{8A~f z2}go;*6WFo{S@8}q+PM~qh$NYwnHs$?XkKSA7Oz=rWrAl*(r3LtHKWk*cRZfSQpM0Hb8ZBxK?i+#K+ zuq`nFxLf|X%m4>QAB8@~jD_z*AfZ4V5=LqNQA8l21uO~hNl|nW*r*_i2Apn3#RukSh{6M*mBHUlD*khp zRu@G8qN#`u0jHF}mn0Klr)3yb(ci!|Wl>t-A63yd;F1dXMx~l)Gca9Ml|Oj&yJkT^v_>8-mrfs zvT|C47llFdpZQ7#v`CHPB z*pQa(BvP5K@s;f*Hd}gMrcw_LphA7WqB^q8Uvgq>^4%15zzlN+bAGKv#^nXKtpMSe z@DN%$l@AaQdgg%}_n-Qfa-nO$WM)^iVsO~Fwq4Pv8mzWW(Q12i4~DNKNIBCI=wmMuZ81!JlcdhWY?Ouz|l%kJ%E737o;`*P{jI zz~|o1V1}emK}^bV^UD0h!R<-EG204+VV#CTt-$<^I1$p;JyvL*R(5?D0kRnBGHyP}GFr@}!_s4%!d8ibde+1>D@3NseI}Y+&K%&!w!Q40g zZla;n^-aWd?53I{pM?7Ie+hCFC4uEws~Ud|eTxXf**5S(VoHp235{mf^K zjPviyA%aUV9ea#>8Uf1285N)YGn+A!B{@_bE}T0AFlmeA#MRz3qcbEW6)~IfI%+%@Ah|=FbqWiS_+5<6&GOLj9h5+cCOsX$+m@QaPx@yX+ zy+PEw;-V9)`uQrTE$UF~2w!YyAgaLi{^Efe=VVyY8HSGrCe0_Rpu+x-G!GGHBeot^ zqQzRk4=%*IetFdNv!BIUgS^n{x48Ym5JZp>2{l4Y7%pk)bKvi9$m)Oh#Rm|VP`=xV z?nj9kHNgWQv=;6EcctW{1;)ygh9RYfWiUyL{gcPDRV8@b2*%=RB^x;-QBZb- zE0M1k1X5L-u{sTrh?bK~n?ix<^rDmB7fPfJ@#`h$zZ;2PCk@EkfvZte4^Qw1_uf@p zh$I~>b$Iak#COZsKU(8IS}w8nqv*W>n4EF-DULK?9W%=WYjQ?oz2J8TvVFvx;2e@^ zx)L=s)Z^baQD7ZVrBsdy${4f?-lLeORc}l(d4q+3#)i#_V*$_O+mgq)zrkR3__!tj zcr=;95yA$KZ$iC;sSLNYxLWXN?5K;tG?l5&d=x*qYYsA3zJeMQvM>xPnXce;{eC>SHpjR^ z^x$EezFgT;7`2U+6hcCHDu-Z!7W}CTuD|e?Y`5 zFvOJq9R%WEDEAS$zduvX(~^_v5_SjKi1!84Jq>`s7U=Yf+4$`;+FIudJkiRkR?>h>|1Uyrbd^feERgG%61>F5h0V==L8l z?H~<&KTE6-Tr%wot(mp>WL>q<5naAn>TLt{7ZY65T2g0MGeFnbHDb;DJ*m#w!~4X>M%hL>uT5Gasw1u_3n;K+ivIzR2=7x7j-c;fz{ zxkbzic0l#~#Ommw`|cv<9*1?g{r3HDw@pJxAbT~`OpJ3i`O%v<-dgce`=5Jv zA3sQrm*>?W*UjzkMlH=+=^VGLoxPZ`)y?TOllPCj-CY6!u3k%*bt63ou^*iuw-@c% z0!TBBB>+ZqN6X??B+c5e6JGe!)-H)SlsYRQ!`7e2YA!)r#rX5V5x4iz4^vidh` z`MpLg(eZ)d;!?zl$UuXq%iR7++xF7;xz!Mvy`vp&({Hf{bY%_PFz>aXtpU$-K*r_S z@uZLMF<`4Nv2H3c+Gy#Vd^7fKxna0;Z|(GYk8}KBlbx&O{Ke)Yj^c%|_?oeaubcRV zcK`t^Ne{Xo80wFsC&Q!gqBRTTdK>eune?H(Ic8w-Bt_QQ>4q>> z>t(Msj=(t5M}nbg#_fT`8H?8S3@EM#3zV?wfCD>zSzpUDx;MIJ*{75b0h9EGd+W#b zC(ZmWpQ$Q8o|nhh&ZisZSZ`U~v%!qZyMC+C6e34B^*6TW%&0+fGZwx|3ZikZ)3)@g z(2G$YY!PN-?UhSEWVN{(nd~hnO*9+qZPXK8B$Sn&;S=H3GD{myNQKrlYj5t8FJU&aI4@W>r%Wp(+U?(?%^W#(VUj-8L{`=c8# z?{vhC6eBsD;X{wK!>!*e^vF&J8IjT`>1K@$$;vuV3qMQM(8rejHe7V-wSv)YI^}>( zZRlq*PGQC5dYoChM<&DJ+m7T*)$>GC0PWg4P@x{Sp_O2(Y)~$8Sh$Rj@ z=&aJv5pCv>q=t-HA(Mr8>B$}Q+gut6Z2*(27uLY>6h_fttabxSqJ8pJ`^`QGz|&0L zFxK5~;yr+(>s)S89c+^8@z+T7l=WFWN^fXqv7<6kDmIa7)(t0PEvbj<6yp$Az)E!LID9%YVX&u)4i5+*t$- z;Py%1_uzn{iwl7DkeDv^2ML;TK&E9@+lgYEB6(%(U~^iVH)Upu*Ffy3LK*U0=U z;;US@BNzNjHWR1+ot39#`vHGCX!_V;c0R6Z3cY>`Iik>j4T-D@r*Xx*~zHP@3dx#N)7 z;Q;8*Sk~-`i}Y~ujxW1{&-*wi_`$T}{pp5Er%J2;=t#xO5i%tCFv#;TExqgGx)L;t zumyT{XrXIexYblWYeCiZ%qF-H7YWGmT|1h-MkERQ#q;V0N*{ZzIegXklAQ> z;7z8tN~>zRfy%0Vr_7W(8 z+Qsv^K8dxo?h`r|M>afKHSc|nerST;T0KMW@PytloqMZBmSKNCX1|8idWemb9l*PWRhT|WFNT|3S?2*#Q)nOlO1k%1ajQ#4St_;1W<&lmxkL?_<-C%Hk z;~c-Qh)L1*Tr#4m?2Rf!=&rh5b}goPpCu9u_hpD!LOV_aAz<6hx5q55CNr21%5*Oc zabs*W+|YjVWdm_U2rP4EN!0z3Ae>b1>i+UN1`BwH^T~PhnlL%nwR-DdFB}N zlUs=$AbFsu%viZ;vt}%~n(54u)N)WWSN^gyG$F7Yck%dFXY7n@?GkkzR-2ZLwrHcz zLm<41?hRk!$gW9;093w1@pZ-SIpZ0b|M%WH$bxOca@ASRuJO^wrrQ4E8?r_jQq!jG zB`bjaxvrMNa!LLOlwfnJY8KKsQd8w=*H5}cgJ4#%XKLj>faHp}MW^Cvy`=ZN+>R*Z zoh3ZkxPLi~+A&hE@d8@x0%>2eAqP@744)3VVbnHFwaZ1^*UWsav@OoPK$2Q2U~AmC z+dOw+lU$gl_!!->fOWKKHznP|kF8V-IR%_R(wnbk3N`Yf-3^aFdn3u$zt4N&|4!wf zI%e;m8p|qv@VgTpwVyaf>t0ONm)G0(NbR~;}2VnH}bqx22Omu%WiIT)v>b;V25H_E^-sj zR?@nfLYF^C5VkBG%x&P*Gt(Y8UJJXghANFT98FqKbJw}A7Hj>Z>( z*Qrlw{%4<=A#*_-*dhjN{jg6g33~kG=4RVyX40nauGa$lBd;pjYYz#X!>#vy(`=9DV--7mUrY|x)`pK{c}aZV z%=?4T_olZaQif;KY|p{k51xM48zkPN7u<(47)xv`@5Nog@$DtMKuzm)g^!{ex%YRM zyGzo3AKD{MTvv7~{(}%mr!XfnKbHjkp?sHr zsOu*{$bS$YU(Scom~zxYvf_))BXVIMeTU31*rLe+bbQ|Nb+8yZ8M|ba+_C9v5`x&8 zxnZ@S)U6ra!HHtr3`EI?WcXAt3pKB;ncwKLw=}#{y_5Z|%3TP7vhcCoOV4HqV$^>*$tMtYs1s#SL|wJxtPhU2uJq>*~0?6q;FQ;q7qdHWo}?ovF=*s>~>Qp znZkVasz4W2Mm<5pP>`@aHSa51m#~PGW18>5TW(3fK`Oiqg?Qi8AOQwOd0T>c-d-Kw zNXFKQ7fk9(tJGh#g4h{0V7Qw|isBb6@sW_5RRQ`Z`MToK+lgV}=5tcJY6W3G!xw9w zy&%(x&8{NX;=0d+%W8nBEW5R&(my*(b*dlM>0yI8QHyCGY<_z`G(^5cZp~kEWW1`1 zro`kJ6MWVc(vhN*op#HuEY2SmakW0gAB=LvpJgXi;cD+=1r4(5=%{WK1Q(kerZ89Q z2~_XEjO+FJ;b|8JO|qdYtgroc*085qV$#aXDkjvZXj{}w)aw8gxnwmT-}_s&vC03i zEXj*Ptx%NzZo2^dT-yDKbsI4hK+%FNninYXtH*lKm=6%((K} zeU@_Q{k#gbrqwFIWSt$S(_wShl`!+`XE?i|n_ka!%HTW-j3m*m_;~wu6XXfnk2!=19;3$5Ge~*~*S^X9q zzm1fBGJi5LYr5kR_GNZ*BW2xJq%p<{i_c;NfzC9R-|Gj!)61AQgx)KI^mkog{>?s> zty?q^^1)1f&(ci)j?67Bf#)slb!A@YNqq!S!~U2dH>dWsx}F&W0aub3N?>)KIkZ88 z0jHCU?P|NYf<&ny)sKuK-LQ|TVb2UWmGk|XC6y$ z1ck}&UC#&4(y=w`O6yQ}IZ)k7UHbRtwcnL)-FK``O21nLe3LF#C?`VF&mKywnb`W+$us2y-HU@FpEHTe z^#^)Fq}%R=s9MNAxnsW}88aX~I7f?|s6ipY->MCrFw654)YlvGA@(XG=1H={C)fa? z<|^+2iiwBTXW)H0Gx={T3tWnRFJ@Kij#AVqs}>E~T4|H#ejcvxo9-hT2XrLY<2R~x^%$)vrp@UDv>~H{St%KI6~vM0`Iz`qC&w@ z#T)$X1by0x^<;x*gU>(78z*W{&R{duAeo{7%pdo`@IlCF0p<UVm@B;VN#Nbr9X-vBnl$hy;1gf;!e5_oqI)v!IxFqF326MDX zE*xa$JFlsO+OIKoIrm>Q4$Q!|BKwq`F|j6P9WOl zcddU@Q!fMw9q`djv=(^c3f_*|j{AZSTyO`6?HzLi?=@9>h^7Kd+`-#c@^#Gk047FG zE`EOa|F`$$u{r^qu-j)x9KP^_@9wb@lOhu%!O4j%iaaZnGuw7`Cvmcj=OijE75+`Dr0_yENc z`?b930r@8Ti8&U%xP#Im@yhL^%<4&L|Ph842YG+8Hhgkml3gr|(?xcR0IByD*u zy=PgDpH$E0iRM~z%#){=m|Tfu-&D^^V&Lv%UC&oTb&gU7_v2akzxtbUYX4HnL)=s9jlRLI&w?R6UsUz>v z7XCXH+ZE`--y@?qND>A1{cF_jWuaGXjuRbh^tF|-1bdtS3+2Xp7LrWc5I%3kpHsG! zM(gMn5`WI#&J?;U8m4R%yn1ABJk37YO4xohsvAGlJh=(Fo8G|ZB5y@u(U^Q+WvvwfwTrOZ5tRjE0cKMzM_w3?6J0~S{K`zm^JSSzz<6kpJ#fed% zU46GwijCpc)sns zze|s9I;U4A8t#WI{tRt*D{!KX1d&gEd@d$J@fv?>J6?rJw_V9HPjewKY%--8IjE=LXj?g@Bg=gLgPd2$xvAKj=pKhZ6h zx$40Flwfk%k*FoxW7ST-6j5$JH~mNF2T)#r&kk!%`PL>2oA<@iijsz~_vGd3A>7<$ zh@Q$8P=1ys|0f9R`&96dD9Cfxy7Cua5j)U<82GZSkU!JYg#4b;jzT_0DZg?e(Rb1RpL*`QvNlgVQ4=*I7BXQkh+< zjgE4wwij$sd8(cN#;pL4|64XYb}?H4#XUu-pg36B*??VsqC`r!MxPY&%~_7cAz{q6 z2kBgsITj#wr#>K^Q>G-7U3M4M%*tRK493WnR1TRc>r!O zTgQu85B{zBCOzvFLEk_DNCyxl{>%fE1Bl{(&IVcnLR=GJ{IvM%{qV_D_xmkKLEt0m{`KDL`Jx+V zBQ(kyZzCxZ<*^+3B}#*cA9747cjp3hIs34Ku$djY^$1`fH6Z9_=|{-n@yY%TI(^`? zCpvy(n`LVicz-)-{@{GOYo1$5L=s!dWn}cCev1)d+aRV)R{@IA)JD86+K&kStf9zn zIM-;0F`~Xo&}^tt+I>=uAB57&`Lh>H(`IMx*xLPvR=%{gz@HnWt~BMULjA1MJ@^C1 zTS!7Fw48f z%qIRsdY*1j;bN;p0N5Qa`W;Z+{eHLganoId;~{s5pnr{LV4$D)Wz)Rl!}q@T0uI%{J0@4+>co+X+QA?e(EQ(Kc|D9-v+f_y`{;F*E zPlV^Ph{f1%>GXXp!Se2br#U3Y{%nH2;vPm{p}pj}j}4CP-^{$qbq)~JT?+e7V9O@; zAKii05u*Blm*XUUVYGOWpzqu-7QS42^@CeLCNG2HKZ9GpG+H?VtV6Xy9&7;&XbdrE zynb2Jb`krEAzQLa0^iO9l4!opyS5lM=9KNpHe0}-R=A*i#z-V!!HnhlqzBJFZ2!3u^{kHHfd0hxSdL#2)3KNaLW9HoBt`Djx>c=mw`|s|-&>k@o!3qlQF)-JYyPWP2FY zhDX@9GoAs*Nmp&CiW6zNDqWJv2yL;x2z{|WXy4m0?cLq}Mn6}w`Lj~eUMax)OF)&X zHQ@i1jt(vzoc^zLKC!-2=?{bNy>P0UvST$8Ob5I>W1aDe?Fg|!_GPmXcm#V-amCcO zd?`8_mOnP3GoXVN1|;)fQTQxVqbJiD_M5YG$*M*c$un<=!`gOc^w9&eavXgjs{W)= zMH8g}bP~m2&%_vNzW~5+rwz%Buj%1OZI~=~a;07g9%2i0sdoDrWD5;ar8lK{lXM+l)WUgLKTl5)3s(}|FC4feA^|LN`r3F=Shp{-h zVg|2O*4MNhPF)6Lpomv?f{|N4Id!8Z((3aZ zSKvT_MCmhXHDCl+tPJI6+qtZ|pki}%@Cik2Nk^j*%T+ZwOUWNs-T8ekdg`C`DoYV+ zj!GQ)5eR%(e?{~YD+}lgUUND7MdKps507ty}PJoZgNeoWv@9JRafg|S~IG^6@G?ES+aK1f4HCG z?AESo%|!wIe^lLLa3o*YIPBfnwzJ{J+1O4twr$&-U}JOQY;4=s#|B*URhe^ufSNVHDHjnaNxi@}x-41lvl33EShwy#DyG zTHDsY880j<%#CT)`}L}Vzdu*={TrAEl@zyL=WvbIBgz1*1yS*8_vB9zhp!KEveImg zF8pV?^UV>fPw66!{5l3G1Vj=G6VRrl6)XcsNswy5mr*qxKb z>D-MwwqjY@Jkn(qPJ?C2Mtb_j&zFgee4gM9nNgadi>7)pjB_n!CCWpNlbtUweUdaU zS5$avpL~Gzefif&ScW4P21$;}7*0Grmd^K~UYt)W+BLOG3Z)|Zh_(J-fc!StRwiNMrrOjIDWME;;3fySr!US5Y4ox0B|rNF>wajt z`fwbn^ojdGRaMo?U(8t z-5LP&&`tB`A1EUe_{HJF>kAjhc>P58-JZQm=DQ5uUw5s4n!dOBvP<5yt-G%*Wn0US z;LPRB>csqknxlvu=t+@(8mE_Ft#g-3DNoj(V@}^h;C-*v@AH~3{8PugFR)Y;X`t?< z@|2Quizi=I=eZ44_y60hT8&WE(aks10I=4U|7Z;9FRIWM|GWIIK+Q2ArWwV?URKr$ zal_{UcgL)C;#n!aCP_4RpZZa7T+M`lL@H-(&F_BAFoOk9_Q}*M0)hl=DMZg5&3{?c+O?{Nwi^inDsYf#lK#Yu7DGRn=rtPv@uKn54&9 z=lA@T&4?ZGx#dZ}3u9mnSR2-$jGRw?-HXUBS=_pTXL*_|u-;~k8sI9iA<)hV-ntS9 zu999)O%W5_RPcUHl1M-RPP4>qc;}%@=f9U^zZD_xT^-RtBe_1R+}OiwVg7MwKaWRr z@h+=(=(Rr%ukXN&smx7wZ)P}g3s~IF(oFa0JDtiYX+A2Y( zfiaSz^SyqHdK}YmM}K>p^v-m!8*-+`%)> zXnOo_x4$ZblRFtFWT$(30e>(8T+L!@5anVf3+|GAR*!bC1i^9hm8ZDS9hG< z_)THkkXbE+O?PFc3R|onoqCN?`uKVCh3rH+qD#SfPi=lML<%Qw@&qb&gBLZ>zsRBU z)97AuzfUwS!{W9~>&E4pUR=cG&T#6Uaz9ls%wJ_0W@crpgdgN~4J2_w;Fn;!1%!lb zaEL-}HVu{ocBNM^NFwH-e}!5g6Ba0zjwQ?!dE*0F2Q#{))2%eU+gS(cd8-RH*Av}h zl~2gVrI4;G zEN@Ep)~V!;IXA};z|j1UXi$FUZ4)EoLL@F+N}%KMsA;+PwfFat5952lpup1Z$Zoe` zET5NPL84AnbWZN`(JF!JJBLl3#Ld=u$VCL;E2QKi^2^^WFooC|EKvGOW)RRX=Z*0- zQMFR_Z2!=oJJ`+7z&D&Z8$XDR>9zlt@LI=d!jl*YaYbiK78P zZrdfmLEf3H(X^Ah_R@kSao%gSY#1x6AvSf{!iT=|7l_`9H2CxMW`Jh|HOO0tf-M=OcfFSs$GOb>ZC(9K3i_Z#+n?+ zUZKw)J7-$A?q}1+xPE38;XIeQP}7f8DA6EBoV`1iJ2U>r@A&7#mOH-T<}sli*?Qfr zTQllmLQ(tiRJ~>feYb@AUoWSdxb|&F%Q21Ikl+)B*y=SpR+X%=j4p}k*L6%lP6f|> zjEBzYAxEaJ)u_00bNkMDM}4v7w)fKtU1^Eo{E}()I6`|9H~p;^pWMl*F%vud^|XMM zvNVm{^m(<;`%} zNpsZ_5&TYx!GwCbJ4)~4R|cTh@J&T@Q6{}tZUG6stouoP0?!R|QtU$9)0TA?>9Y)LUWRAes=lGQ!)FnTP5xvi6!2Jz=y8##gAs@w{(ejwX zZc{h>IcLUU)BM%&U$YmF7BLK29H2%Hs63mm`u?kI7(Sd+>$YirYM6lywd0dzaP1XM zyy$h65xGWkm8maX6T?k*aUqaX85-OW1K+Eljd>od{`^$tRAXH&Z%yLfDyh zW>qe|>c(`D*=d4tbaRh7)U60hY$8_@Q1*xf(GX)z>@v>d1i24sCRZx>{4o+ zf77B|2G`|sP5U}9FwkxE?wLP&D}(2r-~)q5i&Y*A-qdRlL1%4KK_KU_u1NnA+1+vOe-qaM=X^zv04%KR|KIiLLZx20ekO#@ zBidVV=L_-}bXZlefFeiZvVrf8IOuDZf1}}ZViOxoVOj)rIKn?@y3K)fW%R%Gf1(s5 zQ9!lxrREEvRIR)y^t+!*>_L*(Ct5iB$DtM41f!wk-r?O7aeBlW$xj__cBI~Rnji;K z10?CX0ZYY?UOoMR|iVSIeJc z7vL;%^0;GHl7kn!*z#|J%O&e;^-0}+8IyTH-Az`NWzPuX0o%C~Odx_B z6GySAkiI^tx4$~D#^1Ip_z?y8Ki&t@SZ*vo(0T!(Q&aN)n6aZ=9x+(wHsOio0uynFGsGqos`sa{?(8m4)To@#hqF0M z6bhA#oVjUze6oE>>i(9)u*YF4LJg*P95BC&9=ws!Z95FGuN`DT$`djKbawvw-|k`P z=m9@tF|I6*jYTH?aj&;5Ukfv?h<9B8l}2h5U3jAv`$}-BxpOrzyt6XfoY&oHXPihrG7-|?wCkb6Shot?~qlbA3UK@JRaGlF80$>%IFxMrLte&Q=%3FFa-5^ zns+f{B7X=HzQDv-8%bMFR4}1ifWG6`bA0V#xir;UjbI53O0V(&f1=&ouA%Eeo{m8! zSR9OB#5IR5q}AK`h(LG90`yC0u#H{qxDUQ@W5lvp?g&7O&svb8TrJCp1C#tSJyW?1 z0^-5g-Iov73e#fWt{)M}*O#Y7}7q{)8Xh$f{}^`0_0Lo5sr!%dDhYktt>geNnQDK~e{MdqwsA+^tJvHi}(z*U#2 zUwWAmxZuN)cRg+*MXG?KBmS@KHJllXC|iOP?bqyJGx!%T^sm0G?eej zzr+_U$$E&NW>xZ7=rY}2<->h@43_nq-tw;Bt~Tv zdZAA{W_8OBilXhkC*rSn{e>gl3x_Ul(yAE!9cRgIXXKo_1-)=w9{%-2Vs6akU}InVpWCJroh!KRjYbg&K%x(vq^9;aF7|YmO;cG z(}*Wf85Z%@>lb9Ok^97XQm&x-_URTe)zd;ZJ&j) zbLK*irxQt!exc&HuSMWKBP;5Tx&hUK)0?=)iTvb-OXjG>jGD!F#AQW3lYv6Mp~WVK zWduIH;40Z-;=z6@;w&(@k?JhoTMyY{cF@5d>?;q5WFwNVgc#PoRP@>0`PcAEBTbQi zyzQ4|taqxZyc+sKX((zpEO9aYGG;Yov%B<`TQM`Mf2+u9$Xe79wl1)9>TY;=@51UCF1398H`SzVyZ*i^gzQhP8RKh>{?ac9Fi#VH;k{jQ@tw3=r z+=L>)WjsFgr!*XJpEBZKZ=C4p``d5P5~2JVaa}W6Q6rMtYFpfgc+NJKu%v7PSWNbm zo5-*zvF3qS3MD-A6SlP}X^dfH@=M~;3s2mtVwRt^I7i2n3hWtFxoMOD8KtVVG$vJM9)B&;DBHy2`AvO9-ktTz zCv)s?1hoF}8U0}PO3Do%?L>GY*J)9A<5Au#YiRWh(m3uRrA+4&F`s#?!0T6yKIBph zjTf>V@(qD@N6ASTRWBbI^&)8a-5&TICY>Z5l2=v+38$7u+!;03-bPc4J%Qf|s#WS5 z5J#ucV*^HnRI@3?F^OkZMAmA&okg;SJ7KOhllv!qd~cF&GyUgp<5Z_Ut46W0q_kz=}v)`4!LQ_;7B!`WpwrY!9jqsaJ-!dK6*9 zY^X7ZN5+&ja&>(%4u0|Bi|#+f|GKZs_r^sfzpMi&Ok}OFzJVf@IVW(nnoun(Kuy22 zx={^K`jx?>%xYNaPfP3hbR=f3{Y2_~n_zhV5cBZJ=mcJ0rG~vEt?aZ6u3_>?Bibxf zg_CBncclx#li@f_jKY!g84Zvy$$}zSx$=BlRf2k`NIr?bEZK!$g%5w&Jr?iz|fjP!)*KVrx`RTaNe@fC7 zWh3Flm%nXIwN6NX%Fzb>61dZBoNCoQ0o23Anm9DW&2?&x{`sA~Wl4#`Y?TBZa3Jg@ z)>|#lPgH~(@cr1t_Ng$Hhh(0At+~AeSGo zmrHum2O|@h6%qwTYj{6^k~U-wU8PJp0s@a-c=*aBh@@&r1TmiUPoOG|@@iFHl9C*QX*{le~Bk{6L7*kSF!wB?Oxp5>K^yi7D2 z)+W3xVPfL>N=WZiFz-+VDCA5Sls4{U;~p28*xP09|8=I}oLR%yu%nd40ZnBtwpk0+ zL1>90JM)Jw*H+NfLuS9IeX~|b?@rE4j?dh;2fjm$9EmBwV@*sOg%f1~u<@z7+$7NCPL)Cy zd*2gONwnx1O+6gYSu%QXA)2@;hINE1@JvuJkYMT5Wvo~N$uL$aOZ;8;(W#HaY9#Tw zTfj#XI%0HpNJu?gsH2sbp^7?X6omDIkv@EA-Z8gPOv{--WjvDpg4(|F9#NjKWAdmm zbZNyMhxWhj3211+FXe|ch2omO-aeZ*D(%%vPIJraCgW+!@m-vjUKIDK+5yL7^qG4u zyMWYVznvOXgI<(M#s&qaep-j8h?I9AF}VBQ+(J1DR<&voZsNO|7YT z3(tB6?k&6WST_`-BT=z(e?|n37W#XYJKu7ROu(Bgfz9>yw~865DOx(LQR`YSpTh~% za1YY>d-xT3M;33Hj_5hD_ZJ_J2`h0Wb#j}jY~|vHx{Kk3$~pLO)Oj~E^kFh+A`6|m zfgF1N3V^LP0}|20{{FTOGsI?>KA8hK~woEq%jw^Se*WDx}CHv{Rw~iAvnU0nn&PC*1q0{U# zt1YTF-p#N)+$J)j5tM2rq&Ws#gzkrtF>p6YdO*R1mIvAUqST<5@WJ&2Y|>&afhh;1 ziJ6E?U5)V*QO<>;4dkUdlnBO~>{%y+vgsH5H-;Q)Nqs^Gx^7AsdeT8fUcwIfuAD!{ zW+tt>3}5vMfhE%-NP3t{tlVlfCX3|-n>|B?;0h!*2NWN-^_Z5Vl;2JgPY`{5Tvh)) z#{g&oiaB(-M6>xaJHBZ6_Em=D{zeE51x;VFX$7|ystv_%<^_8i3E}QQkO>E=!fKt6 zDQF>38T_|7K~(2j3ku`Yha{GExNUP^g+$d@q=1(6I4@>4wXuIN5kdU*6{LAS}&TFv_zmwLp+} zl?k^%1nbF<;Js&xu2W04mQLJvjgffk&YQ4q6}`xQ4^;zUF0%Oy&lpBe;Zp`=0AsWN zy*|Xx7lH-gpzzXa7*cbh?)EDa{oj8P@O$S3U)8NWA&mNz^uHmS*tAS|!_W5}+2RNq z6s`@-UVfQmJJfvlv&De5vWU(~JVty+dtjnwu7Bq=}?lNoLr681Rx9oO}RF^$y0c`z~Rw<_pW4REL*%uOqSbC1AhxZCWQ!VQ)r$n$< z1ry?rz_AA~i+ghgwMc6F%G>nD{8iuY3&~&3I7w&lSTpop*^x<#@F+Kq)Gio~Vx|`j2 zJz16}G}#Y)t&lW9X+gImxld1fge=Y|j^PnD%X!ntcw2=5v)2sbHF1NzHUrDH=*>|N zsA-%Di?XX2T&0E*p^Yt_!T$xIwuR}xI%_a=!{TjjA2cy#g2d7hW)Nuq15~O4rRVGN z|E^WXqawf!SG+QFGnd4CYj81(h70#ZNpzP2AoE$O zwor$Ai@9p2!(P^eKTcq$&2GtCPe4$#*5{($E}QJvH#B7t>0o%zU#On0Nzd#{k2)>= za*p3)k+Rv(`0=C;N9pU11xNY8zy|30c{5v;^o8SxXBNwSDWk332S9O#uOI$6&W-eP z=#MM8s$(JN6IYP#p{nq3MiKvY5;Wf+>LoQ{M%eFt{2k0wg`m{kBau@<+82gJ@~$}j zIt4F8g=9qtiZNCxk13#G@z|3qwc6mknO-f(N9yum#>Z#Y(O#JU(!*Q43uKJlb8EpK zT;~}Sf&;16llm?O8Z`pQFE*CvTwv*qH2y(Ov5i-Qezo^kvp# zg6S+J>F9%4VH{`a0Sa>YBp2lk%NPht%(jP54|C)bhi9u&{@fz90Ruob67d!Y;IYec zZ{n1r@GKzm!Q$;Ayx5Y$m3CK=Y3mZ$-=ttgBf0+@8s5xq^XVHh^1s}(47_xK3~(=| zg~`l}tda7Ec1ABT@fb}d)>T1Hg9XpwYAxOjLSN$6SJr3tI_NDbb@KEriWNLLfdeZ7 z6-vz{wL7M+nH85;2gLpV<~DTp1_>U+AoVPb=Q3iSo8Ru|H?q)$g(*CnC~dylHJV$l1CRBcb4?^^ zG=Ip4P70-~sZh=Zdbe{|O}atY^TxkH>LCDeZ?GZH$Fri@1!$k?@~T9Tax78*tBYo53A zD!ZBEYo>R8bSsuOQLF4v4qyZ5P6|ah^|i7#V9W592aq7$Cu? zBvgLE^%ZWaoq=y?k4sRXgae-P>t7Gh>YO{_i~am%mE0+*nY%IKm4zz@_IWQreCao3 z5`tP+px08uDfc33?3HJ#k#U)BnNt%LW!$4o zfdtcU^4k5c)c*7F_6h)kp-))fU+*Wrta9bMkpwP|btzw--jN-_00}lS-BIMMg8SiL z$!SMh6{4t4P@=2;16<%NnVmQa7SA08(pbUP0(%Q?53zFmUy44dpN>0^<|DIrD*~Xf z2N4d#%g=DQNgD&KY#&&|Pt31r3=%}^_aque1#5DbKjg*I{U z5J&_=uyt*eGVJil?BDM`Hhk*KJnD!>%QQXkGNqu9S>)DR9H*j3Mhe=mo}avjzpPwB zwX{cXKA%4>m)b8Cl)g@Urm?@0m#W=!38bXE_TR9OYXNHNYrc*T+d42=VbNcseKuV{=r0TaBFc;S36?KTod?p;Xdv2$fIzY898+A0wf4aNDzcT zsSI%<1jHlJd-J!%P?H#0JaB^*aUIQ8{rDy09Q@A}LMHO=hWlF{1^HDK8HtwC1&B;4 zbX(9D!w6esFbVLtc)-~Qm0)9^NdcSF@}WXus-)jdSVF-pnn?EPyrY%TKF<^EX*k%f zcJ~XmEN^X(u^_x^)2eQlxa)vt(7*D5vRf)t#DV;ASCw=oZvQaN1#&%liv>IE;lNa} zm2ben)FmnuP)6Dgg;7wBy|6c2kx6_A>HOJ19)&z-r@!EmI-}7aP^LXyIFM?wT^@!u zDZ+7G3j8i9LjS*x!NJDJDhKU6w`>B*GQ&TNLL#Rp3h#ipyf{pN`ktn|r9SLm zHnf5CB#=#rgIJeJf7jw{cHkk~!rT;5j(-SCwn&ps{3t4$R^%Ze<$?r7HQDdLvw`Kt zVvuY9!%lDjT50A^(YTP9cUa1S%$p=p67!g^(vg5{uGnBqh&rN|F1>h(nF=mFkQRh` zO+qq_NbP}vatuYTBlMR7fBO1tb61fSTM9M4Ki>kPy$a-gpsk7RUsL1tGMGXJ*p0L4 z0Z}k9^lt9c!p(RBRh($>hxf`p?@u^LQwv+gFcGreuPTQ5a5b|inE*OkQj{Z z3$x<#k-aBT|7Rc}{*Qsw8WKkPoBtVU7-KW=?+eoZaglI9E>Zx=ZXYHJ$O}IKp&bZE zH2>ow>HUw3l$G~CE|M6KAn*q~00v}JNi+U0i3AHGk@)|DNF)?iVqv8KaG|^Ji0UXK zP^|B5%@80_2}N|fhd6-53&hJ%CjM}MfS8cjjRiqgzoM$Vr3FDElGy)ZRzm0SzofHwMam6mzsL1Vj@g zBDTv6i+;M6I>=Q?#}V5mIR}T;tQdm0ADab0;hFN0 z&VnJ3nGe87PJy_O!i`O(`z3>%>-<9{f9lnQgJ1=9d@iag5dLA zXi8X4tl~f%be+@TKpg=bnV&UTpfjRl{ZvK)^mun_OhzB$Zf1yr3gB*P2L-B-$eQFZ zKP;{Ou>`*L3gP1~GODZ#PNtr_{3nVjI_$uX;MV?<0G);bH;}nc2>l0^^JoKdJW9bX zloJ-2XO2IKdDA@^Hy&GLreqd)9jvY@6;QDQnFruVMheo1X#Yne(ik&!`1Vt>V&qkDu%!@xko09M(gQ+|5WmNQ zDIvSKqBxS}nz^_>!tDlZ?^wADLnvj2;lr}+)u)1floVO0L%9vDUGxBFlp*MZ0{@F- zJTjn!j+4~vzQ77uD}lhE0KjxHv?}%!$k)WPD?nG2 z5|$!)VHUt3q8DwkA0_u2G&-e`!ywcCWKziG%Ym(_h~}lBup|`IsX3urnMF?0IFOhx zFS-9`=LEuoP^KDtR7r2)NhP7);ARqYRxVJ>W)=o&gSspH9fl$I{`ezUcu#yh%Q$vE z2pPE>oA)s|iY?YF-BaWFEXX(h*LCqAL1tSos5AW?9r{SL>~|4R`fCMw%7Z5^Wk zto9-Q4AhH>?j?nIQ80AQUxcTeLIWek^UYa1tU+~+9i%ZzaS3jS#&8~+J#&o(8k?J* zsGPsNQaUT?U|?MMF6lvlR=%pR7Vaf9UZJ#2Wco}|1^Yayc|&PP5*>BWyJH7 z4(aOcYK2QY+j6&t-(F{xc8%Hhh}Y@kSJzP6g~zU4&eL%0i_EYk=j9Yfb~oUqP!@ga z)5nlYulcF8((irhP5<-avRMDp?_w_FIL+$$ZSe|Z7Xsck%MHoI;LmpLF?jHqfP<8g zGxE!`w|jkNqnVgQS89V*(r)nuF;sfVYig+qZ;9gznwGYv)LE^SQn6=675}*0o!AFG zRqRUj&&=*s_S#$y-8;0C87E%c6gyabOYKbyj?R6~uU=jrW-N!0!Ob0me-81PSN-fh z$0C(WvIWTBe9Q$EKOwHzk(T{_>i2_kx5uuhSJ5$m#Uu;jSBV-XPYZ3)aK)tcdwnSe zd^~l_*Y0Lc9XX#6dHC)ecv9#^B6qQ==z2wkseWi^L|4LpQMC|hRRmbBuYN_!H~9{= zy6t=w`RmdH2RrFfV0pNE+Z+zQ%6H+vx~X$I9RaEv|D4s=8QuX4N$_9IPUaaU4FBkn zBmBhW*{Y<~Kf7u4-@e*BEMJwj{{5a>@x1*Sn~Ne|RaJvaWB#E0$kD6ScB6dLeFC5@ z_C93+nx`0VW%8|W4m^RxCZ#d6no!}MbU7bKj!Dg-Vi9JgmO+1HZjaYx0BuJOuhu;5 z8-N~K41$W4p`I&WvwdFx{7#uqOJmL0rQ*wJh)DYd`NDOPDNx;gBcrQakn51OrZF1m~qZJ+^k7I*~8IZeJ>ZY;;_%8yIcJQl5JMW z9QEks+VZ5o7CFBFZ7OuyB!Ff3XB^am(rw7$t2JcZ<~v(8{`0S_Wh;x5^F_^e62Pra zG_r(u=UfHF4km+^6Nxn$X{)hxV`^jnl*gaO?@cbz-qNzsm)d5w2JqP2-L;3O zsRx{`a`-;HGrgVqr}y}tVim#4mekXg{aEJ zhNoy}<3%ioxl<}3UTVVJfY^^69C>^us!6~PsBF&R6T=w!BJdYl<|h|CfgA_J-puvq z7t80WkF4(Qh$p^9)-?ZZLBSu!LT9A#svQ&D3;WAp~c)Mku9ws(Xnf)-95|1uEDW8bpdk?mC)HQS#t}c z-Uf9G^afP3V)6kjpy z`CK)Eqc{L~vUZ^I1`5{WB9yyhbv~TUY4%Rg>#~FUG)eCStp4$H`dsBVZ~JKtpv2rD zYoOcHY4+`&uEV?1KJ;_9IJv?rv8ykdi>vMCz<1(b3F;{WOjTR1W$;Yd4OntD)oHGI zrX}lC91{?muGz8G^Hi%PFXkTHAe;=59-NM!c+54?<(`1|$yvG0N&X~G=PH*9#cG~8 zHLNxOUyvfW!>8Y5j@JBDjELXOF<${z%6i_h?3A7C;BaS&+Bbj8%82x2=V7x3jM(Jz z9GkEcn3@3qO5p!#F-o{)Ej2=;pF3bWRf@KK@I-7?{MN<-G(SGXB1WUEm7G4iaxl_N zWK$-u4>Nop(PCsXoKN*5k;SWxq?*_$lXVCx_s@oyC5ltHE8efDdmMb$XH1coP~7al zjs#lstoPkk65*Zbc}>_D787aEBU)k|-6hFg@Mup18aGXvYD_Ob%;52(o%gf=09)7U zZA;`N+V~W|A{I%sx#0bsD-Y(uLS2d4ranKrgALLHKR(y7%d3YnQ>m62P&D@KC_<*& z9i92xN*SNy6}YM9Qk%?-oUt6Qt=2M!oNdDgRG9%XV^r5Xnt({G>qY;;W=orkw-&wn z(oG%UgmvutZogT+U4D3>u%))y4flhK;5-G;Y}x)1@>Q4KzM^|Y_;sgrDK1-VSn8Ix zGruv^&6o2F+uQ2P+@qkvcQua5j&b9`XjHu2-m%tXZvIV|Zl&au)ovG$F_13*$))xC zNmiBV)KF87MhP(uecj?1ALEfDeYw8gin}`V#6%%$V_SlPRsvKLLcvf5kGR3}fmsHkYl{OITH8Zk04xlmT(i;sZ zbK8Q!(W;ebYQC-I%B^tiLgTaY;C~y;%GAD$fA-2|Y>!?Nba!ZsJI~c)YolLV7YusV z|B@CzVHxVKcsH&Zr-S!hMQdj291B%*zWHPUy0AsA>E~)L3UHh|MiO1W2u_p^a@_aG z@zwqlWXl>nM=lp@>3r0q^A2W@s>=bauUv(%+_kQ{33RAmrogl-CSUk-2lJ^fT?D*x z9i<9T^v^cJ1HH&yj|>y%Ew3uar2o|$78BN2a6PP?gI-J5g?rSt?sCrfV7feI#(!$} zoCI>rcF#dxw9e`x?TD~2=$=K}buL?+(z6cu6;Q7_E9e`qJ#7i*o^|$qplbsVHyF)I zBkVk%{@Cr%S3!656%p;xOT>|>K9oKnQ^#zVb!Z9 z%VS%u@0sxN+#r8pY|lR5xal=@FP>pvYw0yN{&tbRS#y!mEE{RfaplsR&MC8S1k}y- ziu6sPRl#rMyAv%r>2(lzhnE9nSM*Oj4ds6geq4RsZ}C}xtvX|Q3CklBwaV7#yzO-d zoWC=8@98Rijhnp%WHY>&=RjEs>|As$@11)jAJ~8GuiAMj?ZH;vS#s#j)w50Cw4Y7qO!4qj%oI%~k@;C{ z{!H=YsC>5M^4FUHe_J`QR+|kSh|?m90lcOZ69zh1Nm>C%TSTdWz%Oi60Kr(y9{cTO z^)*+I!?WKvMDPp~G!w>*2_zJfUZVAMH3q(3xrDD_te^Z5Nz~F!JbcUNth_1G7@Ded zi;-frWWn7W2%q%{sMc9Cx16BAV{Qc_m6i-fu;-lX7Z;QeoZ^-l399gh6is*5akL?7 z>~9!>)ITBEhPSej1c?0j0MAF!=mQE?6}N%YES8?g8B&P9EN7e~17tA549M za|#DjzdiJ52A|_$#YzhNmSdq$!j!+`LiknnpiPHwmtjME-M|Z?^Yw#n+1BTX?6F~t zV_?phH>amVLXy6*Y;QUGDbBo!kt~%As8`Yld}iKb;K3#ef=|L+0xWk#aprnZgI5)V z*)oK1nSV48G6_V*4@joGiaW@%M*1G1Ml%nrEV~aO3qgw_fxT71?&W>QM{>eiOW8qT z+JpKqWBPH>3P#p8XOJo;?L!n;;Mcd21d7SWK1$*4D_-f;YhZ>Vp*6BBVp*?8I96#0 zcw3ofooWbqSQ9Q!1593<6`|_%`W%-6dGm5mXpdO3avx;O9a1fi^S|Q@*;r|ZhzRn| z;p$AW{=dig?4H(h&sFSWduREJkZdwuKBGnmHOKP(XRTmEqYm|@kMrJ|&&y{Irz3BA zjYFx5+8BWfoBMe9-dk*F^H#^(>2Nh5P;oOhGzUOTZF);iEcdsy6!RZ5DGv00Qn&Nv zrr`$9VT8HO6%uAKfOzZ6SB`L5t1xP}B6kv<+@+dlh48mqj^c)S(&;0+OU_B11Y*33 z6okcM_~MCHIJvP5ZeOe8_r6th)4Pm-ew!^`Yf`dWDb_(u}w|OUzlG|0uWmc_s zaU|fo%z+<*43KEm*X)=-|7lC}B>L*;0S@_|Z&=Z{tMp^9$L5J#IcPTB1+P9q0lG{P zYV>_)jkxRMl7~D^o@%ns>elJtU|?_8GHi*`@2u{4s}uU51k)AEB|qiwQ|41oqk_qIk?c)`7$y8_M%fbIB=JRVKJ$ zrsE*v&gso>&Jb%ZUuYjb=Z684SZ#}=8v-MIt<{m?lNF}#;bwSirOVJFPajXMQC#?6 z1aE4}TLJRf9P-Dw_0!$q9}?>tyAKMh#W(eFCBK8ZvEs%5$oDK@q=OU9arRT!{2c^z zz1!mkvuyVJhFEtQqV{l#!v8F4eS0Bw8#V$qApqMD=THF92}8?rOZ&4d!sf1J@-j8h z1H;jEo$P?LW=kTSgtrqs^nH*iQP(kgtK)xTIeE(~MGoG<6zLmwp?hwex%$Ub$D@en zNwSrWH_?M!BbRTahqLj>{7-)BGa6vk-2&#LjNYja!7!xt2bCtj==*hxObw2B1Nd6# z$N9>?S24ASyvx2+OFHc_(-!%7nPK){yJ^cAz(?_$B;5t=@}!>7Fy-vchRF~&NeMp$ zd{>a#nIJ0o%-~MJS1?rvU`9lBQNRD z@04Zy?Vo=WMiC+{{OSMbEXpOKR!2roVEU&zt~0bP|7dfV=lq_oN85|ZHngSK$ummd zJ;ze#UHpbX+%|Pgo6W3lP$_SZlbvxfiK<1tjn52QtG5-~E}m13x4F1AI~ZmTX%(Nx zi*1~FF$n3SlJIH!2x%l?v%LY3l>OupUM8vL#@lX~|CN_I{hSdK9cp-W7#-w9MkMC# zh{l63GK9+b&H+C6_d7n+QM`PO8?yhl# zbU|ZSb;Tv8Kl6a;4j|yq=G>B={wL^W`gdt&s_*KDru770!ndb8ow^_ZFV++}Phcry z`*tP5;LphxJXXpWOwaI~InG-h9-xL86_o(bWqehHpDJ(ry^T_^x95p%ewd@HLT)Oh z`Wnyq`4Oi!8NW?b7Lf275vf)oiV118c0dAO8GENoG%sM!Hj*ymM1~_eg^a5eWAM5t zrqyYELV7DhnHg9_tZ4)YKDL`1 zH-*1yt1YG(BP;d^LCOx-&lnKH&uc6Y)9H&?az2r*m`do*)1-mzvJUy1y}A(hMbY<$ z>RA^1`<*C*F4sm0tltNgZnqH&|8iu%(i%u_^c@MeScZ&#mh%Xp*(RG<_yzBADFaO zq;r&=x!b6T+SpbYDjFDcYqb93pfO>36wZ=U^FyJXVfir_S>iI{C!MBLmq7|`!4dYI z6>*zM@`gjH4;u!6eaH4Mjp`16HlO7yOU4x&OR|~sFWYO!I~Dy~uNsq(qsg%KMOr+o zdZ1w)T$BLeA68MR34fjEz#duZVqc+@YCkm4YVXbz^eAZay$MEF1ZKzU!X7V_7R|PjP(aFltMIK$W6L0$7#S$FH`X7}HBj+2=H4}055bYR$ zAKG5)4UK*U^y3)h(yOBS-RYT<>A_6t{WI28)Hp^;S#}f4&7+v~W7BS0j(oF5D_pw| z)Ssm4TnmZDP6oftNd((%b8AW9szkesmK>vet=&!&nYKE!0=LF&`~z;0gM`$N2%n3< z*rfvpU|M5%$sR>eB}GlI%5be`P|h63%r_+%db6zokhS!!8Z{WgjX5~FlY{a7NcBE`^HFx3{W3?PE0;HE`0C1;=GJ6#n@=U|n@r!A6>tTP! zZ!t5dmmWmWw=0%gmW4U^3`QbIUdL=`JJTzXD%D+io{A??iYWh^mvbxUUez;xp{$m7 z21m2G=ca|IY!17cg!)*u@pt$aDB&D{$ibPFLncj-3T*M^)eS@fk4GrRO+^Z)3oEB_|LEz2=7{o3p0X+$j!UJ)+GI50q_%*iVxbP}!EEA`1 zC&1dQGA|Q?{az>7ARChz&tsoD<7=>Yx>xRe#=cr0UU{Y0L4Og9yVf40?|VK#6lKta zTh?KNE64A!-kurMTn?jg2W>uVu!b52}i*n+9?qFHSvx%`cDx^z-nUCd}5#^7xo4OhAA%{0sP{23jVgj$yyUmQE zYxodGxK%>@9s_}~bs;t>7Pi_Y!J2fGBZ4(2=zI}J@BXlbhteHBn z5P$fo%E0UTMw??wcu1vXf%OR}S*0~wb|l<6u_j1|;JT}V^V&A8Y|Dpc{^bcTB5bXd z7Jgb8)e>FAHPKBFXJf$_Yml+bP**KH?oxihC{MX9N@zW2Tc7VHue?uWb7kQPcWWo+ zTXY6sbS6t98PhaqSGx6LnRH3x;acXkk-~wD8KCgRqRL%AXjT2)QG->mLWRi2<LU69Y0pq72Qm3UU5$j z$^_32qRkf3n4LYLRK;)HZjkDRW*_2ZmkyI*DKOmfIgl*~47MXa?W7jnu&qm973MTu zHAz4CQf(7>z-8~0!be*p6YttXAn?H-vkyT5(pQ<4vtjx8*Kdh2UU9~e#s8$hwPOOB ztt%uM(fnlbWVfIYW!!%Q)#R9R%#BbF9$7;Rmu&8z?9b?sTn~S1Mi)9Ys@&}SQ7u;1 z$Io~H8!k7g*G74@Fj3L)?c(KBo82!rQCSqU??1rsPjdAVY5-`|rsAmUmbrCxz|y|UmQqmx2QwM#N0aTdHbB7~ zbC}=lH{wRMe1623%;D8b6wcJA@&4sh+mV2&AMq5p#qZk$fGZEU z^#he#CB6a&CdF-l%*2xLsLbsD+X}J5WNP4SKxK6ndLY%7cqj0F z<9{9?34mzZpon2_o1g$h?jkpLL9xir9^mkycsRH?fHC{x-vCkD9Ru!AIF1S70`+X(T0Dt+;csug z6>K!;)> z_~+@T=i|{KMso*aXGn&af0e1)u~F-_FU^NxD;!NZ(sMS$PSD~29%{dwLGmO+ck zSio_|)Hko4nd!UBX(4{U+dRJew|*u?Z1x2%wa@#aalibfmMJNGIscDq8eZv=j^(iV zO<}IASSOKqWYLzuHIJ2JOb&Mu?2UPh;={k8whNAzkr&AqwvJ_g&8*RK+AZZ3v-V6D zFiw%lx&^%cPW^#i*=KwW^suf%PqQtik_1%gd1WLP`!5frMseQz(#BsGuhNA>peb@Cw8-JBLq&H{?xayB1F8+=+X@Ppubm_+=0(!YkqedyWjj=lh#mXw#Zq{N5=)ByqB|lHQ4bSZLA#szJ;>39$u?RY` zx#_u`>zr~RdEsH!{~ktcIdT^JAxq2Pjkgnk{|tjte&8XoS{OQK6P~f`oP8xgWq&Dv zLWaXjk}(I8iOv)le)(61OKl3sf&57c@~9^+ot~!*0ZT5w(yMssL@u3fl=X@tBr4uI_5Q@PS)C#7ZA{9aP2ZC7(x-bdUP;f6c1i}CkBfOv(Uj#lX z_7{4h9a3t{jxd-fy0Qo*HRHgR*&>qE=wamHRQ)1>a4fnO8g&7iZU_vcz=E>@+k8dBCBbtWmZnEt0_&*+Nyvcu_sc(V`zWv? zYy!7mmy81}@or&yU2sV7GP8bw#13`9<_`zY>sq^<8@lw?hi60fHOAhK0lU?|(H0pnp?= zK$4?`9yS8E9P0f9A-!ybbFLE&{kxY+s@F-l)=&gUjumklj5)-gfK5M&5C;kLz96{c*9hxYe#u^hxU0_6g8p#4W$r)Hmt_d&%LLgirn&5e(X_DAMg(2)f zOv_FD&>w}E4v186ByfB+tQ8p<(%eexg+!lYNreoe!0mO?+`^Tt;Q9xfqi9eg*tFb( zj3Ys6Nic(GZy&7K^k)=5Jide6%{&h~-`gIBYp^&#+mX`~hR$=%Y=9 zIRePE<{DE|H<K~lCA$tt` z&fzl~vT=}}lC|+bkWON9z;gEsgdE2}ryCJSe4{Y|x4@Coawh0uI|bWDM+k8XaO~9% zuvp3^%oXcl8?BU*Kg^hU|8<8`%mbudfN9$yA@t~D!%j)*L*6ai zie-eje(-6-&QTfqFZ5awf`nTWR^MO2*ouu>f@;AgGhu>cCqXQf12P+RNGR+WXh+Fs zgi!~uDdrXB@1T}o;21R_wh+5mxj|jkmZO3;0nh9`i`nA>v#8}&KUP0M_ zXY!yxfiSlR3qn|e;C2D$CQk*mhLs;069b#6JSCSZ;@N{sPYLJW4>@JX!ULi}Y(cG& zePhP}3UAQgfLkygkeiw^7oHoUXdC{9phKZ*g3!VM({1~nM_Wn%gaphGC&mMm_UAVR zZC(kp@t+uyV?knRwy0)p^`JLyaq-Vg(1i$sP+a7NFV&Un;ggxiiwvdB55h!eO~nqD zhzb(uK~(&4f>MLH^*dCq3O2R(E(=s`3o&V+1VmTS&l&&a6i3DXsS|2Q2&muNG!*|3 z?3mP+rH?DKs{ka7N+igs#fseE2e6?y92Z(+(Vl*n#G4IZQ(QCyH9m-eiq1;pc;JM8 zOquX&Ebf5^%p5K|C}H$om`#Qkq?(Q}?|2loN`-i+y3Ei$xOe!Wzt`PwACPEb9#3x}Bl5Wso~Vr)Pdet@~4tjhO^&mM3nZ1~?` z7Bevz1X5txB5dDeLCTRVv}ysKz5NA`saDB~3RSn{86q1R8VZ{iiC=73?H^gYtB>sU zT?RuZIf{Jtu(|TUhgNq|2A zvp52%U=hIT!f1kRg9w6NQy4^hJ#5^qN1#4OYn5t#gL9gV+2V${LL~LE`U*Zx;*8GP z3hoJ$_X}jL^kAH^pn>W-6~t-$2!a;hzF`DdBn-oSNdw~#<`+F92D3nwy7~aO#DXBv zrR@%>K|=-cD5%<1-T;IV8HsKJv?m~JCu=(L>Xkz^$DoCAeG{hpfh!b zyrM54_(vDP&h;Q+?cKE<33^Csps+z>M~2E*<3Dix{V}R#^3a(QW}#1CIpqttL`L>V z<-ia~bjt=g2>&#w#vt(Lml>7fVSBtj#^$A{dOvohs zlOXaLRKa3pEl+=*q0syD=aj{g`fe0CO%cTxM`?O@dRj>7_%mmmkE0AgX6P%{)BDG0 z6pQP58(6&Q2ly1Xsh#ojYPWe>+dc40(q3TO&N_!usB__%%Sem(a9h*5QQ^S>`Q zr+S1dUaTp0sj%ooKO+}eI*KHAMfz-}Hu%J@zneD`HUeT-Qb?LN^L7uiH0u z-Me|#NqVCfRMzPqF2ov7U~0u)x%$@S+Py=D35iyw03U`mA27F_zAu-Dm!I#)?U&;< z3cCTEX)vAyVH}n5iP$tub`Jmz#k|VmGK(xd+$F$szrn}Vu+Wl`okEoL;1|pkstTv4 z);l53g|Wa3^sd|YM?@1-}b)9;VgPhEFZQ0&z;#N=cAjet<1z`M#Oo`_> zDkE7MfwX9cD0XJ@s2{E@!M}r>B%`gDmDEIM0XK%wp+ZRN_$x^n*>dOX!vm+VD3gt- zICMR`B7kaES6b$wWI9!`X6vIl5>DKiY$t62egh%IpkB>M+3LJGzcmAur^zdx+RNR( zsy@?!;^=d=3+y)pvCC&h7rqP_9pm`v>1TKb>anjvHR8^P-D^JyI@-9bFV2Lt?@Qf**{_?hN8y@Gvd78I}s?f7I zXIoUsMEC1Fl^qA031V8#QK58H)$#j$fbd!dSR%l8Zb*eueZIXV!AU$J?{sP{mrh^B`E za#`{U*3JR}l|o%sHcqSizMW+D%OqYo?dk%^DXu`bd?#rFhU}9K+(xx`R<u+Z(v9@XihP826@#5S0si>|F*r`_tD{#MV^8Ypxn77 zWze_p8>zi}8PaXQw4HqYXz`Xg_NbhNK$vtM=x={>mR6MC8S+CR*=c--fR<(g-_ zI;T>MWueOH%aawqiR*VF;81IAt+Tm{n!R4iD~S-uVgB&4%o9=CllF@imZ58$8fN-1 z{uTmZyrUoCEbb)KBef5xk{|AAWXE)&C7Q$10e>b~{LBGbP|Y2Y!9+9zpm(0*+f_%R zM}*)>A?NxML&o(&#~1E6*)|}XrXKd~oMYpa*J7?DNn36aw0*RpdYKc!<~$N@)2-)|-|TZrT*rMqb=AF_1D&Z*wc|Kw z-2D-3!V+w9oP|O#;TLCS&dv74KAn^Iw`{>re=d3aTPk_2TvoFJi)+#+bk6bYF#FU) zo-tRJg>QlqWV?=2w^qAlS#-rFAB74=$1gX860(OjYKfMIH3<^{dbNf_nep>*`{W*4 zhB+B;r9rbRCHnLEvaWr(Bq~bJUtvC@v!ROfbrc=kL$AoRhc$Bx%gRm6Ibm^r*@Y(% z?T^$Z=D0Bk8Om()yLLZ>s##ICJS_M-{f8xGiW0nJf(Xd9;?QBTsSLsx^{DVV|Jnvw zqsA&C+>kDEXkU&4{^Au843RqYt2q4fXZ7)Jbx*3WdJr#kcSo<{oG51CPZ_>VE}WeB z5ppb}26GM`%fszbNvlzsg)k1?UD19Vj$_-Q@qE#7&|X~bdlef$aMgQ+<+RR?uX|u^ zs+U4IO0P!Som546=%!teyCUtJI9N}0kjXWdRQ^@plx9>4Z~}PCeq_5(JF3kpSIta5 zXQ#-Vt5g`SryO@s!}zQ6BuLru&QBvK%lY*DV|YRDqFhm~F$Xpqn9jl2;ng+9T=-S- zzN?c){kfR_p)sGEF7~-_s&V%D*R0h;J)wCdg1%L)*;(9U^h$EJl&FfN8_n=R z(1aM4q2&*IfS7@g!2G5+kK))_u@v3iMkp4LU+ufM+aIQ1xfjg=i~Evz&3(+Sg}=T2 zL_er&Rq3%5#u|F_X-C}6->seAWW%jTHx;tdg!q@s&Eu*(sF~jRcS}HfX3VcJ#)!wl zk^NGY5yIS9QBUI)U;XUk71$iFJ=-xQoArtg9CLS71XSLrokV&R|J=-eff$2ME3M@m zj!d%kEtgwLX~y+B;j*bHvs9Tr6|h1lH%~bq_0=cBl7L_dr!mQHr-sA-OzX z2Nw&-Wzs_ABW36j%T>;QsVzX2A*$bFV-l-kz5g(}y%=@xbD<{^-QiOU0tqo zGWjAZ129jnIJT0u^xT##{40B0phGc3JBMG&m=;SXd$T01F`r>GHKW?qs7Gk@wRgXz zixpxbYA$-G^c5)Ui9|8`mnwt7|Lv+XgGiIR^A4qg{FlqLfgmWr!p`MuGVFa9Vz-^V z!ltMEwwl;QDbAElVtcV3O!l|q%JT$f#eJ9Qa)39H-PLR3rR=kx5nz*a4IynxczQ9R z8|q=ohGOZ@DSi!*^H$XLJHEms0aN}oD6s**FIb*Ml^tW2XlCLRhyVS?ofq`CnLlow{=SOkJeo?(+f}Be}HmPA=fz#kGI`$k}1BM$EtzWa=c@yHM~>ZV8lcAz|n4? z_25)EbVR&iq4jW&naCm}t7pTscFE)(<#cgxq+_$tc%2kDEy$A>aM;p&2i%ZdU6g6aF{lpYhLC%X+}~(4$g%O+zx4_V>htjCCz&tGrnOmh{}2h_?>2!X zsb)NT1)ZF?KeUpBiyUb60jylet}W2Y$YWPXv|=wd;TJ3y9fP*FDqH0n<@0U%vRy&C+w~tjadm<_yj0l7z`4-M=SRxjQN@ z&0pkIp3il4GA6F+oId8OR~!r$+sMW7rSeB68?{F@IryfE*Qd`HinAEteD#YO6wqZP97sC##8V*uz0POG!?5q)28%8 zlDT*qniln~{+paRc^dw2J-B|T4748H5r_H*NH6-^t|mVh?%t0qq?+D;YA~H(ZCRxgg{o*#Je^9B5%qF>mI&8+=c}UP1?l{+s*{*(g?#GRagn7zl^;y@ zTmVtufda6NLhP?v3R2~AJ{$9b%gH^|kVxJ4YLKy0&NDDfZDPZ9nv) zg*aVa8@2+cLtaZZ>i}G&RR2Wrv%X|IWCG+|xm+L|k2UfFa~x$b;yt_5kYCR1xVvj= z{MOAGJlo|k!DL+uj%TP*MxFDCpk2&8WndXrgfoQVZsV8=LBUR`H<>@2vP(5z1Qh(} z>U3|&HJH}2He!#n;_hMt-H|u&jxF?8TpIrV&{#b15YUescLh+Usyq1^b$9SKWmhA} zu4-2wC&n&$MHZJvhAcapMa)vd$Frzw=p!#%Rq5Q@q*!U+>y%4v*3pZH^GPAz8A2=D z!?5U0jZAo%h1%>1UQ)#~Vu!KsZdJQ8FUn!Amk$Pg)zXo~`NLKy$j>br93EhYRN-bl#6IR{SV2kL96m`H zuReyxEgud8z4)dHX(pq}?ld3ruH3%iy2XT%HRRsO1lwTRylnreE-^b^P+jV~9Zdl^ zbQs;tek+`(K|ik`K1>sm%rX1G$=W}Is7&=~FZd+}i*QMQi@jxORqkv9y3Om*^D6DS zVLX!M1Zexupe#Oc(*C8=n*XLB{I|nxeQbb=&5GJG&_Ge0)O|LNBK`5dK~jnWaNK~& zizpN7Q`ddl&Rzh}z~0FCv`a3SYTzVqWr6%l4IvBeFfx+>X>Zr8FvGdl$%F8hR!SbS zy7~>mYbzM-iZOC4U-|JPZ3`0crAi+9Qm9tPrT2B|Hp27@GwL%P$=^`)=H3M3=Y07D z@y~>Uw2&g+(z}t6y|*f)FQbd0&E(|xI@MoBW0x-Fq&cJduI=6S^U;4+vdVuMZS=m7 zm%fO;i3r&XwEM)MAdhEvG81(+@wKHSFKqV`ofXE-mgH+_ICP&%-dP+$TtmJ(B3$4h zszVmi&e0j}0%zl5IvRic)pGokq9Q&{URa}Vcp@(m)8nF|N9!5oo(+SreGe-|NorYO z80$r&X|Kif!7?|P`IU717lO;G38EN?sCkDKd}JLin`l<&T8qB{e%1IFS}qEvTVA-R zV`gvIh|eBeGajQ~`=_CWwselKygFWGns=h099ii}3oxTT{?5J`k+5f(Aodl>DSdtP zSYL78V_~o$gxeur@ssVT3=&|iq@hT|O7+HGe z|L4H>=$$hO(yp!raJ>I~)oRryZ2_TeVio)SVv|?Rb@Ob3LN26E3)~>zI8ajInc*wH z61^~V|1x9eZeE$;s$smMxxG3k%05cUyLYy(6v|$|Inkl)msbmvtph#TBGNFXko^tF zP_Y%)A4@&G1A!g--3jw|3us9mt`kjP)-?5t0dw-CJb6cM02}h&GCuXn)5+1I20>Uj znW=R1agX%X5aPd$%aOI=8G5uBe(BYvERy*M}nEom_OMkopix0 z_y150slR{dHt&D+&@l_8imhC3OLFU;mRf~@e>&3e^!aNImnE}epF4b{ed1Gen?W;sz1Tl7*sLM1~S zOt|pMg;Zu)KK*a#4@Hid099%&OW^qT#n3Sm==T3zplDkP^&7R;+p0<7y3{|pS%eTA zfgn;lK}SlV?(s?Wk&9WW;A>Pi|{y(gA*e zY`1lxP%TdTq^|1*A-RnpCcuNnjR()|(%{6Iq_?q<@m29`=?Bp7)Jwc{95V{=_yfq| z=9R7bNZTLrYb>jBvg$ZS+bFF~2t6RDz_AtZ-5YS)LwD{1Sem4x&!CkV zD=>1~50fys59%#&T3rCU9abvutAbiy3|$U7z3FT3ZInlcsj~TQ553HZ#@$k7W(mGL z`eqwH5~QH5qNrh zW4|TST5Nhu(G0u9J$1PXP}*&219@N?9$K=A-IYA`SmFi|ir@9gnA9S7(-`|Ach#bc zL+oxBb$p2vf6X}{4{w-EURP_kg+=h91hh&aroP)^6cNi2S82D5H;hEc|9eQ82#$*> zdilo)BtpwTxS9}2)VQ}m%kpg#z6^_*+fwM=(D1nW+_J{TJ5eiOyw(K^Y?=0#hH15G zUu}4Fc9z2Ls&WjwlwPHi76RLvZ~e3Fe>RlvCpqhg8*Hp>lLf3jRy%j}&hp(hAfH%v zzje)LUnNRrcf=T+s-v8B8y4f+7#_^0tr@o+Gkns4oLpqdvCsYFdUi~BJ&m7TwPSz` zXfS9$=OnmIE7Q6G6rnJMVvLuK+#b%h4RF}t{r&1W-(v%c|E$-*-TX}hS#=x!7} zT}f6s1s!xrK>7XU!umP5G?qX>=LvBQe_8Z*J`@CDvXLbUa50o?v2UKHX;mUbsq$w{ zMc@K$+;R#Mdq|LIH)9)Im48n}!e1Qeo_?489A86+EUekg)I_-U($jZF39`$yzL0gXHgnWnq<+!b^VY&Q!IOPXr4 zMcK=kT4&=-28s9oGh4@>W_gwIawMNjMC)&3y0?ckLpZmkuT^naNYqW%gHcyS9?EI-M0!e zKUZ{!IogLxP_PdJ5vuL#bK|)$E%6#gVx@CSD;1q zdf^}&6H~_;Tl4om{#)&z_@{Xwa&l7!k<)@iW7D{jVflK-X`c3eiJS5%UAM5_LNA;r zu&w0Z#KKJ(7F|~dyYX|tzA}2XIa_K$LNE8JsI8>2zq_62b&9owQ>5ikPyeZev_vw}TD(JbvXeroJ%~RKLZ;~mkOxr$ zDWR+N*+7Ktku21xMN;msondHltzt6X_+YjE37ag~_`P2yy{U7-xz!ss@It@H-ElE8 zk7j)}80wQCY26#O*>0uiX#XC-5u{h^^VjuiXtgMv%eEYvuTHkzENxZCTceYJpCNv4 z{xqvMpzx;AzlfZZ{4~!#Z~005gvfhs>HLqrQn-XcBgi{nR0$t#{vU{o{&%=P$T+c; zON7jv$_C??jPjV@V=K)e>!~HkY+{R_mtdX0C5)NzFmwbz!+JmS@|eT}DsEh)@HSb-S}b}aH;tuE$n`;eOY+a2bZLd ziV!~h(*W@{>0pGNeW7@c40z93ym)^6R7sVTTznQB()+BHCi`u%pQAr@tOC{tgI~uq z?A(J*uob`aK^gspcRw)+!B7IpaPzb#(i zEWqnFRAmS@HsCb|1u-HU8w=b2-RZ>wWHG=6Mfha{&T_)h1F;Y#5`le7ICQ`{M2S4$ zDS`w7&~F(BABvNmjTtzbLW2por+c9{w0V99M}$fE-AH19Scwff)D@n+YNh9GSK)g- z{fIHaWUgkes;2m8yOv6r(#A*o({~hc2tS5A?VoQU6 z$M-om0NB1g?L9Q9n%%!s>Sswdmh~HHBBdt`3*`W^1;4!>3L$R_t>$|@4Fia?ODs#QpMj9e;W(8((%-X}lp2@87E^l>MfJWIk6ljtYSmxbH_!BU721~zuyvCR0(kx2rXC&- z9*%-qH#{9oTislnmh4bY`c8c?cbCb$h}_MtTRK4z*Ou>G4oj=IB9lB?N9(7H1gQb- zFD%G=3$1?jZvyehqxWtm%6A8ncP0;3x$!U^DJ&?JzvK;a?<_$g-=fnb@W0vqMQ@C!|Ke>=rm-3sdQ~~buj7Z+a&4*h% z(H9p$yc%+Pr=<^XKK(#bGexjlTd%$v9(hFKUF6;~mFWvER*_mh>~ojWcbP$&P43VD zmzB_j)Aa^FZ*Z8#V0Scb4+n|YL7Lei#+G-Ty$6%p;#V~45(89$PN-hKmURGAM2cE| zclYL;#%UICuxZ>@(fvCF^ga8)9X0p`^cCmBQSYO;Ul% z)%p>dwE>fn2RTLy+&xxnCJw;E9PZ}v%sB9YKWDsn$%DgPpmAlh*qwg7`t;|4gNpzb zwwaa7_FAev-_RhK(u1Fn?uWBiQ}o$U(68P8n!^FXkuXS>vD*Z5apoJ>*Y$MYJC)_C zikom^z!MOV5&7~Z)0aMn^{t_Q^H}xSYv(p?x>(}lj{SoOw$SbC5zKwU9M2*K*h6w{5S)u_iLOU?O>CSUHM z&OX>QhG6@~Saap4#DfpYTE4Y3v;zen8YxAn!Ltm5o{a9vT1cpI!Q4D=wq*jh@);Ir6&Y;#d~2UA|Eh$FUL6d)BJqaUVYAf zp<-{nL~GOnUw@H%?G@gD%Ub>XSTc4bmOo#A)J(0DDgQxtS7tRfJ*5MmgYJ2U?FA3} zvuO_y}v@^-Cn1JaO`D9@RJ0?AF_k7?pcDdV?JS%N3C6WDFYq#Bs{eIeN zth|8M_r@7fLjkZB4|!5f`R-9nWZz5#Sj|!aWCZ(X1aEM_rkt0lsjE4}^M2}5miGxiZzdeWKv@U^kYCg+z_$)ot%!y$h5*%)#!y6OC7 z2JFXtem>0vv&qWy&340surA7u*{F6e*sho*ou8c}dOrZRXutM)ht%Jm3L^Dn*%)RwO&&_bCie4&+Hqq8C??`wqgBMgY^)7k?tw(S0e_j zT-p2!T`i`}fGlLX>xG!Z6i+K>jg>hbop-+BGe4Gb%u7DgX5}-$Nv9dLZ(+jwglgN% zCZj1Zn-S2s+JHy)&4=fb)w>&yjFfS-YOroQxyBt;0cIYdouv+)$;6Z*d!nh@mh*~8 zlS}f&+|`7fo783nWieX9a;}6=V+jHH-(v;XO!61BI=mL;fJ3-WCi9n@PS~TV@u;`b z#|t7d2ejWgY11iAE{XwF^At^~`yoF=8Fxhiit{@ZrBfeogV+AakwpY59T-=`>rzRt z$~9gh>>38QX-Vi-{@z*wo7n+f(Nw>m)iiwld^lh1KnF<<3t5zF&PbfrZs-2U+y7-{ zTFgmmqo=}=Ue$Du#n5j@jTqTG(**h_UgF0mGKXgSH9BOs=z z-gh~D#RF!qUR*x&SQ*T{o%;Y3Xp3d&_13hGUVRkWSXtcI*IzSTZ93o2r)Aq;erAUz zUOJ3bjWC|k#-H_PSZLh*4DklUt49NbR;|~xzaJj9I-tlI=_wORJIxTIo_*OsS>C$C!CIdn6|v>(I!?PPmIU2D|n)ODmQ?(BB+x zQ+MM`?{#UewDCzF;%Us`{{Q>TBR>yp(7m0yWp^$BTrM=e|9;VqS6?=tU;K3UN?&a< zY$9uaQSMj$fea;E7v4q8;XD#I4&sD4JgM`Q|IGC6#vf#=^+=B#j1L>Tr&98p+5QV7 zJbKRbFWN*hp#@UsW|YmL?>}8Y47Oyr)UTtIN_fp=D!_!aZ!7*tv2{LaA~-uZdr`C7 zILPn#gz?hIC+Ins#VcUzQt&Z>7gDq@WHN6Red25Cym6jWbaO5mKK1$KKzW5Mw`KmAy{~3sG=ZrID1aC<#4{ZK zDqz~3lr}wC&Gp%pzLe4{Wcw>FEmU*AqQLF=YpP&Y142@Vf|9n2*S88*K+WVX|Ez6Y zpjoo0nX!Eo9pgGe@noD0Jcofk4fhe!xi#^=YAO2J`uz*-#97p#7-rRKKnja27%<15l z#-z~**;V%e9p6NYOx6DT{d6{KyR4U`4b2bgbP-@RWPuOD| zAiND=sNXRSgoK~XA-WU4bf^cQ+uC0ulsKT}RKRzW@$+=s54+irTdW~SLcTi@!=0Y7 z6j_`65q9FB)FMsivq@QA7_D`1t6$@41Y+J~ee;Z+F_J zRWl0vp8{c$Na=DN$5bahbd`Z-gk=~W(^9|_@9h}7{qkQ$6~2pe7gHJxdJQYn_^yk3 zwKFLMl^0n9GY)bZn{r#tEP=~;bY9CrvC8@Y^=?ddK$8iMP}t2u{f_6J8`cIi@w80m zN$n8~si)1&e&|X|)k9gUfLAH+(xmF))QQ=nU4zI0D*nAttiCdTQ3gO!sCez@P@jIB z{_SRr6BmO?Z}|Jd{1Z=xl3sqO56dLm?)XKm|F^FP5s-+_rj2D zv=rQH$rzFjwR&fN?b;iG-CsZ=pz3KTp}yv0@$_p9bz+*hl)L#r3L)ZSUX0)7q5F6i15@lyyfIP^ZdnD|ly%D*@5zb3B!7`cxA zYF`gI6+ZBX3b=_ zPc9^RkV*Musx!QCh70;F+un7y^&&%`RiDWx6~GS$sCEmV z7Hp@{$1SCax0 zWnWHNzmnX)jR`2S;)n9$0+-(aBeH-{mT7#%^Um-t03T z{?j~Q()CAFbq?Rh|BPtWRJY^DO>IH5G*Pu|H<^#G*R~D+U)e4U1t5G^%S~1I+T&6? z|KE*@$3c|l%fZ@$V5aJh-R+0YMMjin2fL4PV*Aa=N}m=#;-+ehrRWQ2C%~tVz4%uT z5|)prwa<~RGaw$Ngr&qG1~J!1j9A9%;{k%BLWYJ8^|@$@Mn9J!3`%Q#b-vogaL(=l zl!4Gvsn~AIO0FFq92+=4=49~{$ zf4u~=0a33=wf}u4=XRpe1NW#T(t(LFNc6y&HbE$06*VZ^LM4F+L_{UR2XM0Ru>Zea zf#u@~c$~v7-|1dDdiJhfAyJ{uyv?ysqqncYAU(ImK(Q-i$A>DIKA!!9Qix5}&0HH7 z<}3qo?Htr3y1v7tpErq-cQN#H07THDL*_u{5x;G z#yHwCFKmF)9$&u#;!!-h|GqzFW#*LU)UmYg`PgJ-k}h9OAxJ$N}V1}bAg(u+<=qw6)Fl#Dx839rXi%Pfg;~(bcz~|oq=P^O)4U& zXz{?+_ZlHxZOJewNO(S-+c8FXUi&AHq-sBt%2=(J>M)bT{PiFeh_u9%P$La^h&{X+ zl4@^WQG1n1rqqyv$~XtkzQVO>_vONfXz5fw!b7=bAwB$oh?q$dF9F8U;WC;fW*C+) zla$~GsW2u=ttI54(^W{VDLK!QSmL+-)t0ct??l0aviq{5zyb_tLmT>G`|WpCO$Lm} z`krMIgvk2WI&?N$;q~NL6%sVJZA}X6KM`#!LwO=fT(3XBxz<6;7S z1vNo;soQ?bwF|7ll$KnBH=#TDsoX5O62)M;5ZX`=BcdlwO?&WjlsvLj`-mDQB3?b1 zn}o$CHy?^bmkjAAdHKCE3y?IjT2}igVCqS^5>%mF8OqiCS%|^8$6{%=9}mim@Xk*+ zF?hCsM1va5!HN!*Mk+GN;Sev=}2WgM5NT!9z*b z<6>z{KueOz@sx`w0RtV?{>zwAICJAnVnqrMqk=9&K~b$emQ4c%{~FR_jVcpSY8Ksv zhk&!g)uomXn}!2Y>0*5Ypcy)9Lhl3!??llETSBGUvcsM1Oi3K`!XX8_XzvBgMEqs3 zL|vfp=i8?hwG;>WqC$p?J=%^2Ay5^R2k$F+S0Ym_Y%$fp9n~moIrUlsjSM&G#jOj% zAiO`ma!|}t9Htry`3w!NpcvHE-U4)P{*VKRYpLMh_C2w2l>pEa1A7%v$h=r^@^c_{ zNYd~nI)MI>htAFI*LNMw`epYUJFmj%zzDgp_#lRWYnX?r8Qu`taB(a;H;xQMFC!+L zZOSGZN?|5VAi9aP63n%tDZvBx4J7C7Pa zbrj%xK=)~d%4O84kT!*Mg}a2G(u20eR?+N<^dmr(;uUd5t48}$%)HmQC91Z^yti*l zo8!nj@(Ui69wA~C4uUJ?Ew=XGfGM1_RFH}<_ijZ|2wMz{eFcf(9hMYTD{PUPHNOMn z8rB*5?>?|X?%=1DVjyb4Akq;%)QuoLG(^_uLcDXXQN8eYZCq;nZM90&;iCOmv{7mSf07 z%TH~eE!L4vz3$L(Hl**23UEM|{{+3*4+V>cT!eH3lmhZ}iuE%%CO~ zx=8Ji3F+*gtV#GrY-z4b5U{S2pS<}Z2~;?`EYL?WACoe3M7i~;MvjBpzuD5y8hgOA z24l3WQ1{ZDqUPLY(kh^TKu85m9d)6C-VD~CGHTQXh7}y7AV7y|aRI>>-snZzunfa` z&Bk2vT_IHFmO3za-h7K7bZ&HC$?1YJ5qMP4{)@043tbUxjtEGIU^<(wt$I^K$HLhW ztCms_PIgyga*Uv2ri4eB)Ge~ zySty@?y@)mg1fs1cXww4i@VFW?|bj}tGa)j-KwqaQ$5ptdiwM{^EBi)%zYJ#TLeG5 z6pJDdAn*%8iagN0gNH>@hh)w)!Xt06m3~cN)Inhba!iE{I6Ggxl=)l2Cd-w>aG8zQ^OO62@6(5$~*65k~WxO*oC&j8Gy5|NnDk%2=oIMC%Vj( zlmB}o!QlS{CF9D`U5Y!pq_jHN&8M2@U{)#brty1^`Yv8@o}@@iO4V@@Ih%=eZoWX! zY{{Kmps(QPk1bUVb1T?TmNm6G-qtP~YTrq#qF9wWY_aGsS$v+Ycg~(Ry`xJoq4p!| zHCtK&k112b11!y7xd2rJ0%NitlJcg;%-;QaFmnY@+?7fM{H`#QFIGqLPWDl4V-qr4 zQZxBS-)owBRcHA*5kf=D!i;0}Zzs_yz@_xLm?}!{qxQhk*ASsK5P&21w$6-U+>j;i zZTvSLPbA9vNQEEI&^;dM6nA%D*F2x3>zm8VPZh)MSYMlgo6CXL)7Ph+&ZmoBU^+RQ z7+l06LJk0HuTPcW@`TyU)yxb->rB?cb{?AXpvG#Vd1re?&ZBJi#oXAWFNB$xdKEw2 zy;aI*w&G?e6K@#xc$$yF|03L8h^k+g*p0F>knNmm$6oKY*~XU#bgSs-K)3AQKkq)Q$%={169FB(drcuG6}wNI$z|qjN#4|TL@!W~ zz%!&0IQCqWl=}NnB*9NC0%$}0HqM{;JfZN_IxlIn4 z9=Cq_mNK0zF{i@`9~mVmNFrm+m@OMgII%2m_k~LXG(_i+~~pXHj-xTr79qWU1wU)POIaHvWJlDxKR?Vl2DxeZN4v*oRAE)e=hCz&f(y9yUsbf} z=H+x~N%xP;bg;Qn%y?KH{$q8uQaUz3cGvuI^-^Bx)Vx*d{;YM8rrMT4L_~MG#j(#FIV%DeV04Yo+w(i zFnS2e1W!IZeDkeuHHf{VhNC)+RT>?_V#5aVN4D)+^p}6#USQY+*qqXiNs<$5=hg)^ zvpFY&h{(o&sBMV8nhp>aAbGYPxlfP_mFZ1a3=noE+8jNly2e~fQv>z+7aPiz!>5P+ zKx_BkbV)(6hpZPV_J*Snb*;H5DMMm6_%kwQca5Z6-2ENSxJ+oEJ&Jii}U zKfmwV^WwKkD7<~*pF@4L?MLjN*h>qRC`8LXoZ`VhTCTa>C#R`DYmtj^OKgv%S?LmR z$t$7VdYG=~aYLzLLoTXuQq%CTB$$;KbHnBWn^U3%X5gw`Syu(rIW6d}w;qz{WfoRC zIMwNPuIoGkH&-Xi$)-D3dA#aHe<$|K`*oL_tw5)1F0ppyrp$I>*-FO0>> zX|nNwhrSbL^O-b}=0kg%l$!J&qK9j?3+Eyen)<;tSC3%Im46e&2%kJ?R8<47FA5tD zctsi$V8sQrPBx1qF{>LzkCZtOQxSNiz?6K<#O*@(`dhtX1D;QE{)!p2V1t4W<#=gV zPR7>QVwuElq8swHeV$WX?OE0>z}seGhGYZK+*oM3p1pq2-CmWS_Po-Xn1LvCw_Mqr z8h}t;=!sutF0V3CTy2`uemZk()LGofWg2$Um(-K{u)8Xhw-)CWJl7O!ONwGl-@MUa zxr(uA!Zl1XTjja;s5-P<9kN+bwing9_~0g@`FtcCkdgTNLt}FLFnIu@ErUsUTqOmN z0qdkydd13WhApr*Cu+x2O*i|A#kITwr=lhE#PfVPu`tu!)=h6|Sw!v8!{MPLl zX_LA2&ZfnCtj1`1+AIC~n2$ewm6wmtm(%NVXS+|>->q;gATATgHbui3-7%x&%2ROh z)RlpO-0KTkr@)n~mU5YU!?$SgLsLLE?heFwJ)yyR$7K9x$*qWfc`rce(a+ zo$FMVztOkI;kfwlxjo)hZ~6;%r^_^hOO2Ei8_r81$#FLvHb-ZeJfs>ol@2g5ZvK4G z`!91r;#yViv~Vyl+n7cE@D!3mqE&a)T`BceE?I{c{=0PvxU_dJP{WEmkPJJYaP6$6jR)7-Wk3+LzNEj9yl47dl^Ip* zfVZr>bd8&@mQpE2Bb z%A7lml9#B^JG;)ZCR;|WAj%Wf3JPIflwOf`oXK&mUDyk%nO||Z-?%3yZ@B)IkM?9N z2#V7*Ccop zTm!DA(;_e@YO`;6)zi(y?v)W?XX4gvcIQAULhCh(U&lw7ho$)Dm(~N+p~B46qH!RFIxR zJt_*^CS26w_=Mw+M7^Z|H;Y}$Qwl2Mzyf_PdEhB^!=!yQ#*ST`h3*x2S##CVVoJG-uSdkrwsS^lyrA-Mh*wCln9-_en2^Oe3|dZ_3G=;m7G$0 zA{WD*P`-)}+`jKNN0Pzvi_+HhY=pwXU2WyR2ww;Md9u)Bh1^ih9ssw zO|!Cjk1~cZexO4K@gyCe=ZNjmGn#+)Nrdk?6-d+FKHzX(i0bfFm^R~i9BXM0Z-lWg zRqmg7%2Xbl;^^G1*YPlIpK+jJFhevNZQK8#VsyNceU(X^6|(go-FT7H-Mj03Wu1JN z7*a1Gkbirl=ZX-?dqnn{d94N16AnfleFrsTTEvH)xU2N`-p_{}Wv}q>kw2egS|4#8 z0k*f9J}f85O%c=Lsc|4}V$x~pX-~Hy!}WU<)eKf%dUP_RZut3$3siW1ZBuX80%5XU zk;u_WoM~2i9A7Vww|IRazSuOxMKrMmD>sXvzhwshEJILu55tv#{gQqVBe5_u{V%?Z z8O-F0qyZMC7C{9^i|)aJs{}>B;J%+C=-^ncPXu6RA(2$Dq9!H92M!J<7BKP{;a4CZ z#uy#|M<>PJ2EG>h^#AZHN*Og~r2VR*vzC_nkyWs?G>>#hpOLgf z|9e6)G1kkY=klNkdi2T`s|Wc zr`qpte!QDmPs9K8v~|@B&8BSOHwAb^@(sh$H1SzHGKDVw<`D09X1_W-JV?kLY!Sb5 zXHHE`t2~0ZwNKj?{{7Svpe`(0iJ=4+9z`%lKCQ+P{w?0Ez!rVo;`p4PllS~b=$;{V zwHaA@Z-^rP4z6DrckYA9=0-0h#I~)Ix);S2v4IsoDKj2re(F2{Jezo;-9@$l6q1LF?;EUC`Mu*z*v~bjGUL2|CVygljzn6NDQ-s_w?k)GsKa3{o zfxOi9eO7!t+ag!zw5Z<=sj@#+_2gSqZLfR_zOKnoFPg||#iYa*fy_MfZdlsmn8@Tm z668`EiEaD ziQoX~r*c)=f!z@5hKsm{r3K1b=>jcg=ar+!n8Hfnbq&^6>BbJX=XP&qW5a;=WUAfk zs%~Y>b6KbieYw2QE-QFre~aTh+A8>&>hVqwZR2$SvQK3sHXN;-OH7C|hz!3Q+;jhA z4!?k`b=mv2nemANp@v>4Kiw!N+U5SpfE;k4@yUp!ZV*zsU$E=EKX$XGDK9R^e|Jxy zwDi+PLY3!_K1JAiE+ zkEY4)dd1(I&ZjL9aJNIOK`=f0-j_EjiB(pSlv!X(n<2Zs@03_V3JZiov@L=P-wZws z1HVvYUGwCEt+bzI+MHS|>I51)78*kB+AGci^Isj0hie-Y9(5mSSZfbK3%;ZY)blrF z2{G<28*pjsSKA9W)^jt<^B!AnfLwicRh`7uG#viOeE-ABEWd;s?W+?0Dff*mv3FT1 zZ>w*Fv{O5S3gMspN=Pfdb;wPuQIs9d%Kc;OV?mX4Ql${en6#zV7?%L!9?567vr`fv}%1Q||rbI-WY_PL{C$*YZO10Ip?j1uzh-gw~(uYvC26EOvHaB9$4^Jd73)(Q zV|D4Udtg`C=v4bUS2d3Sw38d#Eo8aHV!2kinffsHHkrn%ZRwl#L$tiFZl-6C%o?rWVmn8_(9agi*1gqo$R^HqTy|fB=TGk^877w-<)5a3j`CuF^2X<=yzDVc zV>7tT`lxiTV#eDb>hP-Hmo8n6=LmsAuYSjsYs^T|XKiR+MuxUE znf`Kg%?IzkOlaH+p&{!q*Pi^HZE`w`2sHTJLBIV^%x>e@KhQ{Fu__~eB<_n{o4EQ( z#yG>TStbS}b>*iu@LMI3;dgqU!DC7yOK)K;HOeA_pXDH7nh^658a~8SC*{fU0r0)D zNG|Xn9*@V@)f@hdyy-g+?vP8bC-1I3W%I3o?o;CP%ePmTf;^a~k;E!@d8)#|@q@dW zy7c_i!(Ej$$LSa6EmAyej#bMKFzz7D?@_j#=hkwkwyRG~tt-DDy<)TsT7{ala(|C2 zT{$%VDv7g@IHT3K@mRx~o91s^E-$_9wE=p0A~jLU)DxM5QTN!E@We}?T#52Mi4MMw zG}8vWkuTcO4@~1H`@&-djx)`4Q2%hw&9&_dLcVX`D76vo<7^ynD4w`k4M*_Fjf=+Uz@ z6+B@hMark0g+<3oXeV(Mlf{ll4cryiQauyLq$3bX0q~kIn3-yByB{ zw6cIv)8Ju-Y%~p|z>h_NB;7*!tj8X}rOsuXTj^Jh2>m-u28(IUy`Q%UO{Nk^${NS#0TUm+nUw(a$xLjwGGpD#XgTitpzO?54nvzV9ngEOCjIJ z_7RD1$y=Io zlxC1~``gkSMWF;l($`bvO)^60Nh;#{@||7tR_8|2{v(Ei+iiKlPrF#9yFllS?0VzyrPy?dP(FmrsP69Juneui1dPKW4=l1f&9gkl*9sHGD zh%Fh|STUD~4k3^yb$IQUz~^eisJh}a^VTK(?9n+YzS>qz_`A_YpCp2BL{UNDX6VtY zeAeKfHRgUeZoOS2E|f4?k=f)KC_P`CZ0Gt^m}I3>@vQZ1wB(*RAgt%UrzBQbYvsJY zyuOc)iQ{CGe}kK>=1(^(!!Me7?~a>^IDJKswlM`glL>qbYPnui;JE*%B(~9iISRGD zDibRxHu7oobX!n-R^{Q-_$V%^XWqB6CsEmQyn2|s>r-K3ts}W&;Hzn#UsIRdwz1P# z4slTN;0KD^8fCr#fyk%a$9CUO54zU)OY$^9gb(p;t@d+{`e9PeoW6S{Rm|Lp4lwbStPyFseFe)plUtwa^}!e4%UGAeRI1P5e|KD;llLT*2@Fnj*QkBTJY zyrBjBCcLy2qqJnlzqNdhTGkRMbUNI-GJP%=vwfE77=KuD=RPca??|xbx4+-LOkF&@ z=DDkE`b?OqA&_@D)kxI*pC_!{qSnr$-gkM9*c|;zL{or}&RA`3nA3y?H9uUV^7hxd zafQbl0Pwz~=WzKT1ZqQ~?vTlO+05#ZS&83oBikPr*}6yj_ZX^)ia=5j6>aS}g)>p8 z#`zT=S|lS1z^zS7Rl7Rpit07naE*J(<=?izs3c~mwy2j6%8!#ypyJVGRuFz zw7hFIn;KQ1kPUtI4UOl+W=J^hX}+E_mtm*_mWo!WvbbFE9S#ej|HL~>3v1aMPCL#B zaZSi1i!7~7Z$8>~Ev8~7TvO3#TQA9~F^hWMDn`G}X}cxxw2}WU^vUIv3(nNP?Moz$wOAmEUOnfmgW&NcGB#<>U8JcbeiZU{SA5m?cdC+TrC$9g%Hh7rJ}h2 zSL~kiWHYll9V;hq<}q6TA#D(DntRQc2zRHid%FEFV~95+;0wuBZx$iu{mi&%>+F)( z6*bYjURUg*SG;aR;XVcDufwpZL`;3sdJY`VFVg=YCN=2{hv2(y+*Qh%pF5iaNYplk z+}Z%#X2U1E-ajf_4Vf4obeYa!zpuUk6rR26t{E@LEd_2vurQlXwn)Pk)K(aL;d(}n z;o{6KsMA+|97RN#AXrvj#+Tg4Q~KZOY{r+%BO4Zx1ASkff(9Az+pN|PM7IoaWOF~T zXYEC=i%xi1r*Y5Ue);*B++fwQuOj9#-(1|_(MzfBawHvm{j8C<&o_0h1lSZVS9aKP zWAE;t$7$t~wfknQcQ0lAxp&NFUpnrV;^2K}o*KLN;_y3p#Fc|=J2A0;i>(U*|Y+mgN4!FBHdsf>sCh^Dt{EK{ZU^h~97k(FKxk87-W%j%oDYgCR zh4-iEuEjc<#ijrMqIQAjE+bdr>TGlQ;f-#QRt%v_0-BA}|DEmwO&zI~Mtf$Pgqf3^ z6VQEGg-i8HP_QsOqZ&E;&eLj85)x?nD{g`^L&L@2jp@fNfWAGl_!h@A>dOO%?H)*X zCY{#JIrpD>b9yJETClb7kK z)J}VDe7?gtiv#%$t?dad!>P~*(ytxjK#o(#U`q+cN5De_x;uU2WfW)qx+>5-oUPoR ze6oI_J%0xLq+Su2JGS-aemq!Dd45Zfy}5}7ol5Ktcqb^8fOFK5^-0*%qD6@w9hYc} zN%})HvECMP_G{SSP4Pu*W-!MnOY)9UV1vjrOc1CGE$HdVHww}S<6vgqH&uiczgG9)Lg&EZd`tWYMb zsU$pQ+^bGHrPVdt`-HBynkpaDkZ>xbG5So{tEZi2+jwgRE?9B*NoN(v^k+Dw|NSP9 zV6FZ)7)CcJM&eJMpI3auS(@^&jb!|pg5-JxYP_<@2B%<;TN2fuca0JZw4foeU>r1s zT0a5Cj))34gg%#z8$OR~*^4hng|N=s)yo|nWlk(>)vi!_q6ivRPxY6^;-fFyj<;W0&(*5 zV4O}k`tO`44Raf_8rixrDqN-f)lWudf7QL97x6-{>JRtHk3wCb<}yE4bPv&Zwt%TJ zN}gm~i()fRMG>V1j;np@ggVKMDvn!sbY^$fe^q)kss|Sg!qppR{LW(P9YLl{9>chr z`D+zR=gg2TNbcQ-q2U%(@O5<3rf>n2u)iP=-vbxkyk zMuT+=@4{4E^LLz7V(dy3n)|bFMST9W6i_r`f8r`X16yIXs?Jg0$##p97c^H%Y!~ z5EU(A>1{=9**W6*AMnotsA&T01l-%a{@M@ zb)Uu(dqwCh1sx4Yy!ec32jv8=mNxgqp6*O|Azs&rTnnw_XjiBje-OkgzI0>Jts#H7 zRKb1F87W{FFnx|r(w2FBhs6RKhDe&mJXOx0@4dcPXM!UC586{y=zq|jg0KRX0z5Mj ztboM~uI>}m1S1KHpn#vq#7M#JMj};UPea%_Nbh$D_y98-6W9O2cH$33;}2YqS8j6s zlDxJA>Hi=Jrwn!qD@Xp^^%FH?d=f`;Q2YhhoqH)+5~<pYW;B!t6A5FI*&DbQx}4AH1sFTmk!%MCi7MXWAn5H8SnQRzYx6N6eN|G1PYQ8 zS8Y4ntY13r+YnB*K&g;b?$(c={VmS=p^Wbvw)RFq>9=0`-j5>-V{Z}26^{qRO^v@J zPBYqck19e%rA-KuU5Bkq7i(BBZr}|NQ7rr z?pHk?)?*aPulwenMyb=B4-~CRsFO2y@%gm8>hCAT?vaVg42G=->ewkK$EUIRYgzq} z`hz6d%dy_iE-6W=ncG1TMI(OG@Mil>kv5Et?NY^Rw)lHVVcI9PqLa~R&H|TLuRk7b z-bb+*oMrcomSX?FJu%uvV=8lh=Xga>k%<{P6ar-*y+5maJN_NcSn>?2k;m*p`YHHp zX?x>Jpy5OIP%3yECQ{Hl_T6kuqTDh#ni{3vr4f@&da%e!dZ zn5dEKw#+!QQ9okC^k6a$dw?-nY&etPj3U_i$n!Xo3suW{Xm*7^7_U*pkmBZ;@T(gB{+o#b7ea#i%M6N?95vf{&kiA*<>dbn}K}w%AAR7 z&-;)!LGo*!QOEP$^S~)^=l5^rchWEFefm4WNfF;H|L=FrXx{Lha)6TxE?Ra7tKQKJ z&$-T5Z?Z8pim@rIPAR8e_g_h;i=@JyG`*yJqip;KT)VNX0^6B`wZqx`mjxJvnde`$ zMUurAD2PT< zTL`PMYOQX?Yn<*?@NAy=QO%hNL9@bS-)1sZoMW3*CnR*-hp%&Z1T&Aj)Y#=rRU4&i zOMSy~`5;qv0PE&V!%**YEs%?0S!?;o!v9XAfvvb`Q|Aidpb?1vJ3MO~?wTd8-DKKO z(uw^vdh9p^W(&LZC{yuS%w#Jb)!yP4Ws?7${-``PCdlr6qV!Y2!kDcv1%p8{;glOeKV~E#bWa~b#-c`TU{@ybE5V)n+>=HkMyouVGGbE;;ZG^_P z3fgGSCI)`Z#!1UjBu=8!yl% zZ3qr*6gAIje*Tv=w@(4jt@L9PE`Ob3auE2VH*rJH%||x5xL0u95k;_?)4{E;$zuYZ z(bYm;o44q%h+(~2u+}Woc{AHiwM@S3JM*ukFGpRb4b1Q~EjloVkK<{{BYiD0$AMB^ zwGsq_P(_b0yj{}xjc?>&aj9)Jdnn2?(Uee>UtWh%UQy4nB`=2ur|5}_b;uKTQe=A@jjd|Gsa*Fi=-$g3){N8UE!Hgj$etlY4 zZX=-E*Z~oYZb9_lo-J)%cA}bI+|ixilKVD#_vi(kG3xD{vhWKGoS$_-;Jvf=nn6&m z&8`X74bUi36|}s3b5v|%_pjigH=uisDia|Jy~Qp}78Rw=x5k@OMlc373-e{?(>uWF z4S%+naFb)thtt?i3-WA4CWY#yHSnfR$$5`U3cArb1l#uI$#F;{`qtM8xcBvUYp~Gd z2u3rHMLHUI-Dz3(y3q2~P%6{@wkf2@^m>X(i%3w)#UyO1?~BKhG}58s1Y~WoaZQt| zi)G&xhzghd>WM)=VU)SDM@soEl4Vo9euinTj@I9-PKlr$*g|UDzt)}U$ZTkV6=b^j z=8O4OeH67Lkg^(NAgIRBV^4 zM)wass$#owKUJy6FlfU8G8dsE9TErub*jCjD949cyxiN#?wC)v<{$V2;EU8;*h_Xl zguDKuNlolgS)4iR*sieGpSH-Z#tN5YwDtC9f5CIk-Db6K3m`Ac_LFF_*`=zw5IxmL zSBNHT8kPxV!={JzLa8BBp$W|MwwvX9K0`gB{EDSw*x6H#+q?k)BCl*t+@uo{ul3IF zn8!-;?5re?O%J(hDz#`4>o7w?ouDKe4M-mxPC7aZtJLEd%D~|HAt@ZJ@$%H`-{~nF zu9SOwc3jqZIs+vx*K9K2{&fxNg|rF|`rb;bD}n-hDn4L!h+k~xmLkG(4Mgz!BY${{ zyJ~k%C#|CwX01Jt-PO=v9o+x1HYRP>$@KVyJG9!W?V49D9ciyc?LtGapk=pNNPdA> zv!Inrtts|jS7Lz_zewdtsOwk=0Yze`=Wn;B6&D*E7V{=kP_IRlWByf{@0MaY-s+G3 zYk?5u`tQ@|>LE})EA50sIffyRs32MgqIWu*#-U*^y%PZNaB?nIb1zQTm01+I8TOIP z@(n8{w6mo6R^SA9zJ`qK9bdUzzHBVE+jh!kSGu=;x>tJfhyuRn1@H^zWC@JYu-_n` z>&5W`NKqAy%LqX)J<50K@2b5w0~rt=o$)^1D}TP({g+{*BHMdH$Qz4jB$w#Ix3j-M z!6W2)`J|$dwrRHY34M}SFd={Rms{3d6@s`lk|*bTM4$kE}gzW9qZN5{qMt#EBf7Brj7UP5hJ_ArFJKH&(+5H;kY} zeSIO>1ay)9`Pi!pxCk(G>Tx+aIW!8H#tG^p~z43_-%r`Tb;nu^Thy8_ub6K>#gH^QNGeG zJ*@oBV3yOSb6py;fG<5 zRQ2rJ`gDxHr|4vB{osCQKhEau^l^Zs!8a)8B!*VAMHJ}uc}PB~hw>7oJGYD9Cb+sR z=#9)>07Q;7_o{!o>+Qc1|~qX@RrsiJ3M zEZt683yS^7Aj?GS5=&&w-(%1`Je6UA{=v|%MIDrztl@A?cX0ahgF{y!3a$UkM9xar zyEg-WX5fAeDYIT5Xfj@Z|H*pojBKx;Yo4_D0P1|cuzNjU=$^NW?(7mF@91WbMkNcMNdhI5If z`$QXA$ynrY6je5a$Crm!ArmYf_8}lp+n_4fO!%|w2R`8j#DG7v*l_g-lO%Tg%kHMe z{~Z+UKe9~XL-~h6#0t}iS@6j7W5~FybZ2i!?zxzX%DYH7_w5h@cnv2V!WKt3o&7g} zh~9onRr|&M{LsR{^tV!^TOz4}EKC7QlSb$c_|*|j-qa~GppPr(1ajVCpwB~SGOm#y zX9gT0-H7FfkJ!D9^tr;-l{2KWL0eRgDIK~f6=FCzSgp`UhLY~JrUI+n!koh#8mP`< z?dA*qfs2&h+eN|mxJQ!64LDH7rBED66iXh0XWshB<;bKf-41~XaMous7d^(_qS5MIXFf4-1bQn`%)+Dcxl-fV1BRX zUjMLSY_rLqs?;AGf{S0|_tm~aRncgs;MAPGsY>72Dm-VH909|Zo%*jiO1HduK5;HO zC0#GcUX5Tds+)^xp;93YWYj)-Pca3TbY^m1JO?Eld5DVo;d}K#k)K*m2&%Rk7O_G} zmdai7vg04QXycmlYXQ$m!o>Snz@dm4af>U|?t`9Ak9}jiEdPwa@p;Z{d~Scj4Q=zP zs?0|!lz>>xtWPn_N$7!aw;%ND$h_}jjL25f$!;X;n0kh%tp{HN%#$A(^+8(_Gste; z%rHn|d{j$kQc*$74Z6k&eL?OAZrgYc8CR$7q`Du!dOjSY2dIS338~~d0y5vrZ-r#A zVo;Jx+Zp?Rq<#qaQW^(KHw2zXKmh$*DD%X>m0AOW15QR;t3=k-=1&D?d_JN}ODrc# z_o@G`j$}-8np0V{`K*{G#K$-48>MQ}+r>uLFPXjmv3vD{uCL#}|7Mo>d-ugJg}5!K zf@nGCqZR9=4$7mL%CZm-jKs#&757gm<7=G7?dC@(L3IntLXyt~H(J!R^TUCh<&!dC zB&~STCmtTXc>SqG-Vd3$;&2+e2fOw$J4Ek-pptLKl`_))eCPg%rv{(g{x+#|x_DH- z3&o1c#9!&Itl#4GYRB*#J<5M~TNG*`hh+0bPx03cYwt=NKgfSsc{-Ad}J2R{n*!Dn9z7I^ELA=b*r|Jb2?3SNnC z`Y4|59Lr2;dwe9-=V-4I-NYudnoAS^e! zZxI|m{_Q9=Q!~?tdFB${d7EP4oqu3XF(MnQjjGE693}?AAs}qWSN%=PbkKRCwKZSf zx!*mee;`Ikr=sv?J_;dRrQ9S9Z#LoOtflER@)7&0{Ef*&5 z1pE-J$G;LvR?HYroQ3$+iC9LXXod2}UUCa$vH>kA^!;T_rZGM@;M$g<`ESj)q?|Zu z^Ep2sm+99+(R#3NV5}k8dEpoPJ~eN}gZT>1TtQ~`9?~9Y>ki>;5*{KN=&@?=H}6%Z z0udu=(KkeR$uL%FvlT{^=|#7$!#QS6YP}nE7CiMgmnllC<*jZJ|vvmHH@kKd9M;iaTbrt5OI)`#ou}hXsK0vNO zuf51<>e`kvE>Gy=b!P|j?wFh`<;MdXPLaj=1b zbMv+6+6Zjf%Al1J9c%d+(N^60D~c_nhLxb3%@#w$=01kt@ApYfQHdQ4E1wb%f5I7D zrR;FIDmZY>F{pALS4Y6`nspHhQsp|lhLQ!klU!NxOgsg~Bp*!>QHqKO5ZYxwBV`u2 z5|P%kV9t_k*Q@v!H5v6=Qm1=rJ4^tqd*YM?*dYz=C$Nk_Fdu>R+suc!*dfcwo@k6( zYZZU>mW%aRrA`Tdb!FD#y)e9-jHf{AR1oIfcTCO_QF(2~iJi-eR5y%4>AwY}IkpZi z%pacOkQ8ZI9LV}PzOl=^9PMgS02EE!ccBQ4ypZ?Ui;2I~LFuHaleBL>bF%?DFz$L$ z<-W3rh50vCoC1^{@+fcU>TLL?sl_5@{A&K|`|o~yQ+q>YYzU(^AU9p2dLym|OIl7i z3{?N4QZ?FlN`Y>8-_$P3)GkNSmH`C3_ZoO1!IU#1gLNCfmrq+>E`yyu^G>Z#-^25( zlx_%rEwpzPLoD?7Bkhs^a7&k6k=h&91PfJh=xW~-CLg5CpDz!))-y(id?s;kZ@l`A zJdGemUv)gGRO=lmX#A%El=OukGEp=C2u5hRC9K&bXE3y~)?3LjUr$F&nIZ6_v%xa&cz_y7AQysuig$((KY$ zV>5@z|JP*Zi=;Xpm4nS2ff@=^f3gNrk+|*=Qb)iD-atG8L2|P?Rdf@Asi{!p*f|#* z7{j{7y#kFngx}($2Yq6WBzvx1=r!u_kFJocCMPM~tI(br-$QS0^%lY)^19yNg#^~s zJrp@=i{G97X?od8Z2a-O+ZuWb-ZmOyV_l4Gqm$*>P{NdxG+#-{(%hw04wn%uSp05$ zVd`xl283y_hs#VS-3Dho$fRIn%N%$dWep9<*-!j$gzZ!-XLZi; z5np4&Wi%2Tq-luUFF7+O4`VgpDXv*+~*%wzM25|0~ z^2dj0-^|hx=S;^+46+(yIEJ|e{^vm}iPdOP3>uxb!(fgGr?}>gV@pc-Zq?(KO3)?0 zR6A1u!oMTH=cKdo_g}L#2oSJbb6MM7LaH2Cm>Ln0LZ4<@R(YsX5|>{{*Z*JusfJn!u+FPH5xf!`5|FzTWH z{T0#327-yV7JZOACQ2%utvdJuq>`nu83ie~_t$?7$i(?P7C$M2xd_AO;tr;T7RyQM z3FfF0Cu810LwBf2%9}I3N-l67zk$YE-uOAMPPdcrIV~cJFC=;ph^uiDB1~5wv{-3> ztN!}u7m;@s?xTJx~DY|hBL z9bA$>8fqt*zmv3?Ija;a99oF$5Y0q`@HCKR0vse}7|!6}C_b%u6S(6?Q~H4&xmZwi zcj}PZE=!h>)*JG7y1mvJ70P!th{#|?Ss3j7)7`{k15F<8^vd$!ET3ty2qRBWzeS_fZt>A4g(*O1ewrSX)t zLBe6o^u(sa(l%5>X+Uv0n9WhM+vo2jmdtOcW9%&8dp@w*tSB3O-2mSqU%6T1_4q#; zys2o)2;YQhK+*=&0GFuV`PMK3rN)M3Pe|VT&>mUe@9y6Y9K$aP>VKvWHs?nW(Cf07IGo5adY;`C>KTjyR z%q5O$rwwYzy}f@%(SSp*lYO{+uGZFuUYO*`y6ZOawqx_=86KWM+rOiB)t zGhnzTrkLdAB>kTmFjL$8K2)KtFN?5RvcC!(9gKY7ANtS*$u&dU4^5Pp?e-J01GyHc z5xG&kRXI=a{ph)fw3AFI-#!4ATZmu|b0SmnN$LB0Nps%GuH<#z^8TIvlAe4iNW)cwWO{{7ucV|qp5AzaY z`=x^DE43i{zAgER=O)vA?q{VANouZb+n>-nXWtc)otw#IFDoF6SgojZE@r;J=O^l} z&*vQI?f}x<+_t)V_jfQws7e;vQ_x4|<=>d&%}QFT{c9TSV42aOmp+Nzo9>APk{Gb#qxHuKR35Tms( zKq41i#sM!N_hfjh_BlS8lFThjOIvTWY>>b6K=ruL+c@ri03o`>q*8z*AJ5-M44AWN zJQ1?VXfj?qe8bK4fQ#(WW4W2^=4?hbw1 zwcw7T#BsJ=_tFZ5c*p=u|Wim|MMysL}|#351ML`(uBMOjtl3ZgXQMu26co$R)MZz(nrrR zOs5cGxBH*W#!Lg??H;DUrOOJ@KlI*#-K@os{V5s|I0~spjnkZ}3b-F2DW`ldWod`! zCO^Et>uqQ6-2D1)wtC>xwj3HHTm3$U)C-C+P-uy-??ef8atV!vCiBX5&SpxV5GA)E z$aB8*;bpR^s7v(q9{Uw2VksyI*`G2A*`MMC*`HF7n|=5WeA_-`HMz~ndcPD^IcIa@ z(Rz|58uwLSpDQAU zX&<@%FEn(-@VKHoruE61RGJy%a;iVtD1W9@mBBR=e_X}V+;jlW4ImR;@aQ|%=fF7T ztH`VWXkst{|b9Ji8=AOZ|d~O<21xC7VenKFccMup33UT4~){3Z~SQTvl|Oq7u;@9 z!+Gd0kSy*%>cj4@(VA38-R7AM4e{u{Jj*t@;uJk-iGOR0VY8zVaXyhg*u}@Ghs|Fs zF*r&=3QFfwz}OW+hq z(&iKAODO}VC4*zgd6chX!QS>}U98>+-Et3bKgaE(`=%>faYq4cc2K0c{4}~qXmM1* z_Ll3Awmidf?|!l0KZ1IC+3~^NeS-Q#9aDILVL~~&?tQq}Pq@t)ig=s~0i#2NF8ogX zKMuf!Seq^|vkC%OELN%=bG}r*6Pth%8_5UM#@IY`Uj!TPl1E9mKfeI|WAQj{<-mo! zm>=lN?Q>l5LFkpBV(j8$Ye=h)?yO3foG3_`z;Db)-B!$3$VjT&NygldRn#B5zjZku)Rw}NtrA_h)f5VPbrry(OIBY0 zw~Mv{Dbi+ChH>?4Xv8C^Cr}y!ALi@8CJm`mPD~E4hl zR@Gf|9AZBNf?lOE*$9Fg85+n`bJR?MB^CiNaRC7qa)V-sC#(&qsuUkpHUEipE&)eE zl_D(%3mfG#CjYvi8lnjGEb(D{AWWQLeTuHw4_OwTaDfX#d`TBX)Ucg+@Ie4nH2kAN z1tN|$u>97{7#f}kthg1eXA;HH|q(Ym8sD&?+GAKl?zg* z@T!(qctu5dgH?{^V*aTH<<|YGJ_-d3Q^X!2U|CI|Gi zYKRaZC_e%b5HWF4D52ygAduqsx5FUR2ju)CNQ>oaiJB8O?c4lUS+Je}kyc%j1QLuS z{fy~w;Cn#T=kX8X2&9_w42Y=Kq|GLCKL*iPSsTdMa@^Tyv`|oG>-J{KF$d(PpznPk zR{D$?2(ePX5q03k^bcrf%BVyg5`rm&Z}4)E=0UMDhIO#8FoY0Up`#*w)1`x$D=KeA z0SqWVf!3Gg0V7|V`M7%<>5MlXT}U~grWiIByV=Ag)j^8}vv!W7JHYx@BvK$`NA6#H zYt8_sqwf7E%g+sD3QY@`k`OzBwjTiI#Sl*AMFY9kP9XHt#{Wpe@G{Gb6LJ#3mF2L| z0?fupQ`xiDW9r+`@BC;-_{=?DqoXK~y1&96frv1WeibVB)x*H_>B`eU431c}YmQAU zV5qnUVrffes|?&^m=r{LShF9HFqx=%ncPvB%|7)i#+nZ#d^agZl*Ekt$Vx{19)j2%74zvMOm$_UC) zju{p%46gu8Pl*9jfGlKV_g6f?T3lS7kqlCum=6(eTsyeM(iA~pT0!Fr8Qg)H@=PM; zz$9#1Xfl`e>(2zVo-MdNAbzA=Ju0<=O@Gk4HNsq&fD>QPV+F(}Ia44yoFp7O|CGtK z`P+cL!s~*Z#h2}$w@T}1Ch8TZ`~I&kTjxLsGGo2t&r00pL!whmwOH=fj|$Z@QJ5iH zQ&??($ZkSM8RkEnAkt3HDApmqLSribXNW!4b9v}O13(J3{}dT5^B^OhW+@2{I{5!!bq*G0El65KoB+(GrJPK$u%%2n<9b)Ws&i@4^&f zbE^^F@Q~tiDr5}Q2;%Cf;sN!aA=U>C7se+5vA%scfC3~oDXY;#6j@|ffUW=q{ZtMf zAn68*M4D@(a^}Juf$)C*fWo4r+f9N(ko@@t&;6sDHJ-v0H0)m&BGw~q^jgd{eO|7LRAh8X>-uSz) zso0zn)wi8MXf5n~)HjLoz~;Z0aA9c{^i>r3Vu-7(hXK$*@b?PLu&7~@1euUN*rAf~ z)qh**#$U-p!Txq+%|k&&>Pq06CFu_6F<{=qWiy3ZAc9N=xSbd24UbCTJ24Zb3ZbN< z9!G*_qwtL%z=4KC0(~k(+U&yYe*Fv3@*?T^k0U{F`Udfe&T#h%ZvoI>Cv_p6&^dL@ z0lEXK|Kl-GkzbAeNy!?Vx(9`TN{`516#$L32Z>q_8JWpfANWuNdZZu(`#4}0XE-3N z*##rZ5j?cC1sIYUR6w))RbRiTJO}m+e}N+%8lZ1DhKf)CUikanl8xdf590gkq)EV~ zLD1B#-_?!7O}nk@F(87J7S&F(i7^#xhlJ;;)E~+&Gl{Bjuzzt2+CTOLcKJa=l$;kLk*FS+7bwov=s*5q5cQKiecm`zLitykc2)6dy=^=*UQ`lFmv_zi? zi=$)0&tL_I*_W@ZifSFlzEFNr5jVWyr4IfX^ z7faVqO8m+*)4a68m!)ivGO6FA4uUXCZrYf0>h8RkD}Zr1KtHWzQj z*+=%UXWs_RW3(_ezl%7_WNK>U14up9{Q4ETLhqaIi@8PUeEs3cIBi4g=QOg1b!Hzp zi)PSmL=y_zgwjSuBZPv=4O+CDd7S6&ETjh2~+@%d-m-fLegRe@gyhEcb_fo%}NPMEZvWf1)#Ym7!AW(YnvIBejMoFVZ<{nUdA= z?V}$@@OlNhU}Nudx=D3V7M0Df-%9QCPwUf1IO`@C07hmET_)y_SsIM1L4;fv3ikbR?qLwl=+Od+?zUwgROC5FvrsX9ryg{VS#$6 zlB(vXWl}7euY$tdS1lss747p`df(z&3C`(JxM;>V^nGD;wcbPyktj%SG}YFp91HS& zu)Fh?*q(LTLMlDbM1xt@;koj&s=@i+uoyh+Pus&{w6+j2}q+~b{J4wzI z2LkWb8(re1IloWZ*T!*3^0DA3Qw8k zUayff>=288J~ph)lg#={713#Jx!B$9u@>;VRe}Zbb|?;K{+;R?ePx%C$Mr`k{HE(9 z`rPUi5B(^m(?s9Dc>uu4o!b#rX zWDoEstLY~zSCbWn$}dlcOVul1-UF1W%S6_OW(d%PXqW2~nO0=)VfDz})7sj7ly89Z za#%`B2_6`g;1X;pzK`wB&u3ox+n4@&+3Zp^Ad~y7GgptY*X6 zCAP$E`6b0OG1wlEdZ|>@gFFY7&25#uijrUHOa2M<OP*%B~ zD{ZXSjEat|4fU^e4hKuvuo?Ik8j5=D9=@B%aS51sBR$m<+m};#Gbi)tv>~7&dmF#O zWQgWU0=2ITtni&RNyy4%Dvt>QvGpe@Qk1INqG$EG2iU)g&#n6G_C8vc^I*RY6w0T@ za4r=U!xNzj3vRF>OW~=;O*pYDfpUx8gmBhyjh@%{QuavE5gTNBu(slteCf4eUFr-H zL1E`h!{}ITA+1#6^dMLE&TF8dw87Zp=y`^~fm1kNa3b&Z`7Z&y@rcK#Fz?CT=rbFt zx);m1e!hl8=p`FLPG#Ov$B_VQI=6#h%f!vjgNIpb{j?6fvsLVM_g5U%{X;(u|)?Z$cp9%msiTvOd=Cm<{ZG7jm#?QdhZv~ zhh1`Wx2O2uDoJ1V^aKV62(XWpc#2XA4ANBdXyj6F87eoL{z%9|SDf*?OofX zH&-qKqld1K%9)~F9cz9o<@RD@T?#jp<4G0Ll-OtRcI0szXTv5yjV$)Z$R^PS>U93| zI;=^OAO%;__UF;IW>$9=7u>pVeD!BP?Ci+fHj9{#xA|Y&D~2ls=g*lz75nxF2P_s* z;*<2VitVm6j5E`|ECl;05BXuP92L4nvZJ+hl*}iFNTVz{@ir+b?ZoAUb$>K3Ys_AOT_w4Z(CD&FfZFbYPql_I7609mmg>2ccL3T;p zr|i84LTRu-)2Do7Uqq$Ny~A)>I^Q-oWyD$Xte6Ye2ojdjjrbUyJvy^g(C2Gxi!8IW z1Oh|}d<7K*qu+|@*UK~XkDVC>~I0hv-B4{G(=A( zY<`tDj}smpv%(v@h3C9R)I{2lm1vaC@WbR7tXnsrZh=G1zz*7cN=821xXONe;**O& z8~thWsB3`*#`-S&{J}Rr{nr%Y^68KI*po9yCP_THWq%QDwZ=@f#+|oLhzE(vK0pp$ zPHhP{_K9P+(avv>t}7*^l@2%Eo*|RVr>!<<1sCNIERO?gte)ISvaE=*P=fbP2PwHv(Bmii$A9sQ zYZ})@dkcLE5d7BSd!ZI-i+GtkG;MW=V1dHwQnsJ^RwU||7_@0J*GExs{0!>44?a)j z!>uZfQ>nCz@}Rk!W0>1W!R@k~=G8QJ>YqP1M4~CM{#mwcYo=7>ZH&~Ct3qG}`m_zT zl63P_d~e+!$lT!wIj)E8X=~^=UzRf8o${#pT2f?$lzV80UlyNy`WH)s;}oXRXGb<;CuCgdPo;XVIpAMX%# z^yEL9xI(AGzJ?riY})^}Pob1~f*X$C`!(-}1x}^{!ENk@LxK}b_ z!P8HXuFVcjsLUDJ&=@dER+Iwn5H9C?7dlx`&KWv2Yf5Za*n=>?ifqj6)y7K!&}qGiq(CZ zOH|1$TB^NKudrWZ{qmOxU`_H2e4^jZn}oF7h{^leEMNt>j2QBPsUbdwu(|#btGNRf=Ujn<*=h#FcJa? z00^^W@)_Z|@hZl)nW2JRC_LdxtgUsTShnX;)KmoZw4Bj3Zy=x zN5?sctkkd6&y;oi?_4lZ=5Y|uafI&ytktdmOGyh>cnf5O6zj=oY=XAV0>7 z{GHOShcmEa$FJkP<1@o(LzcnPI-bX-VnsD@h0_)b7Ag~SafsuI$s*4id@WP&{2Uej zn8!wI`L%pcf9rtQ1ZSZ13i1pH;56r!#NTc=#vkf@L1-iP=lbC|2Y08Be~>wVvDJ%} zPMik(EqKRM?ymzN!nWvOiUl^?cZp|nmY3DOY$+qEYNnmtFa;<@Uu^}N%bWyqEl(X* z_S^~R^OD{0x2~^s7|sHXpQ~0F#W^YlIA}?^J)I{6Y(g8}24-uT0E8IcC0*M5^zvma zj0I~jI_<|R^G~zb&gQa!-oK+OEgF|D`vX9i#>}t1o6Lw{ujMmhq0H1p7s;e16182S zHtGspkd8WJU1!>!4`z+P?Ta}~hhM#mlFAt^e;vUAbdX3ExDKc|!XFsUFT=(z*w>b} z{d=h?g!;P{QB3izC5hU@8r^eSxH@R}g#)|ABqbuSRyJNfI#4@HgE zkz!l>56L5wmw1qU$%;|*X>)O~HyleN-yn^b$P zF4HG$gFil}3pLwMAmM*!^Wo>WtnZHYS|EcfN`pU5-PiAqWl#BmV~wSb@Q-z`LXrN) z9ubWm9)SaS+57GJ*P$#yS{rjd^4@In7OGMTnOf`WR!OeFnIJBjrbJ6_NewsRqp^^z zFztao@`}}2YJ7D;j0p6;fX`qLvP3z4cMkR5tG@0RK)}ugj660vBbheA5N$5f{yZ~K7R?gJ@u%T zR}Lhniwwlnb)rMeGn0_8ZiytH5Xgf z<;MXNCj(3weimXEmBp{)8o*_*ye{gmeK4G#i*1XNex%%!>{|J7mN~^8p}loX@;e#) zTytzquB`B(4DXuoLO_#c=j8#>x15O_c70&v4LSXXC&Vp!LEK`Xr`F8brtleu%LSPa zA-|V}LR+9GZmaPHKvR9Uej8TQ0segEiha|*oa6(j3@k+nB%aGLL>Cl++R?sXVg65l zxtnX%bFjvgT$!6jN%ewWkRg$@4;o9O8!ydNZW;ww61UekMe~#kleATA1?7xJkwh9! ztKvIV4S?~RA_MP2Pt|m)#ZTjOs-Y{sS(}Wp{GCTxN(l{HY#vn6V21Em9vI0j{>Q_B zk_(vGY?O54QM%9c`8NDV05;l zP7x>H!QBY-6)mhlS4>BVUEXbZ854*gOso#Yjq>oI-Ud7Z3HjBkSJneQK} zQGU^EA6WC^cUx@5RzFD{%fH8pVs|$-!N5 z`!vQ@fQAHu3Z8L#X{hk^g;S){J0*djQVfIx=YwzS` zV4+JG*~gY2oc-*Y)rBY!a#M1wsp@VYEqyV75o}9Em2&lpTjaUGVA6M>WLmfQ# zj%bIf%;&M<-;-f&fFcU@ zm!%8?!{Y}GWqaQvS8=2gxS$f#l*PB7**ybW&daVrVHRqoUbG|zF=$+=)k5MSO4#>? z-||>D|A;{2OlAuISA$k%{{tfdnn5P{?^h!rqH@SBAqOuf=l?DGQ$vN=?PjdbXPt-k zZWq08m+)M^vK(!ThJmE0Y~2X_Lr3$*0GP48cUXFnPipm_4QdBg(jnO9$q})DYTXx2 zS~MAD;0Elg6;?{agtbtk3AzbJ1|hC|Xu8;2aAg&uO^UNTfuGyZlz#P@bvFkPiscg) z_}d5Y&fdfG=+^bt2I9s#-!SU_KpJ%brs9uT?MEV~8(`PF$3rgkKy26R{uEaJ(DxTk z*;6%oOqm=5I@lFfM7OaL3Povu$o_xXteg00QJ{>Or9GUL`cID2T@P{gc>N&I!*{7v zhIpG)^aaU|^FWUlCIrII?NipkPbyp-b3m1U%@m?>IKEb6;*caXP8DlUheTx9?Y)z- zIwou3?0g;J(j?u4ZHtxq9rB3CvZLZapr6GYK*tUJ$orUI-O0TE=X#fr>7GpP& zt^PtH>c{_bu^rmw|F%+v(;(^|3KVfh_xfFg{aC?1qo%r>oUbth;`;Nk7y|l-3@QSW zioU+8tIM>;1G^M7WRHTe&k9z3fiNmAoswpMC1aRB7CEIaNg9N34JhAb063wV)cJpX zgo{oe8DrCc`SY?#a7zWGKPg*t}Nk>Rm@B%Faz%^BjN14y6-Vz44_H`J+O>c3!}&Y)IEXQ6xiKy@P?M#dx6fx%^g<&J-y^Qd+U%Jk zC`u^Em$pI0CHO5K-MI0hJYki?h-x@~Bskm`EF$MS;x@R5pJrbx7nfzP?I8Uo-uTTV z31~-bm;b>}o)~2QYpH53IB%AFOgaUmXRq{=PmAOk5r)qlF(CarK9pe_9f3rLNLVqN zlhaq^dW=AHOFx1##EmDIdQ9IHwC>V1w!-lc8dy)X_v#{Yhyq_uvGmf)um0&^{ma3c58%ouiTmQ_oEIf6!nh4Dy&n@V_9 z%N%<*X56M2f(F1FfW$dO&-r=bsxjeGqzRukUFahWGXw|orT=69XvpiwSmD1Kgwkn8 zp{p1cKExb1#SEx6f~{gPmZ6kC9w||8R}+EZi%*oTn_A7D>wAGJ zkY&(0&zznT4`{S3Udd5Q5KWyFhfR8Qtz>UhPRO;cUOi#T@TD`12y___^&Ju0B}wwh zWyN4Ds~&@V3}5A-Cv5R>x0M~Wk7i>!ee>MA|o)fkGa|Y&sOozUGR}Pb; zy7Q)ZGXt3KO;Aj>DHL2+9?;1xh^9)Q?m8(dAYhi$Hpqmr^UYwI+4N4BszavW-Z7`E ze?2`|mxe6C*Guzf2XZ5|s)iJhx1f222{*l{O-X(`!iGU;k~5F2%jP_{@#t#@+3Y$@ zq+`Cuh@hCEFh&CF%pY6z4gm%8Ci4l7{e`Xw)LQ`IE*DLww550zl#{aG9sLXKVcg~m z&~$^;j$^Tlph=Gy6|nwS^kYgR`at46H~YT&gl*lUPS@$sswQ}gL?nTD{UYQiLJH;! znxkyBXFH`*!}E1v4!%ce1M#mB17&jiN22B>T=TQ^v9;>(uh7q#o_>gnwWH3FbVo+Q zJEWtX=1cFvZX5!GNSbp^#u-umBQy0>z#oX5g_32u#T#Fyzu6p+BrY;(`An$StTk^t zcmMnj_o;V69rPp14n-oBN1M&zx!67x$?t%Pxw2|gu(`hHTdY`3wArse(l6fQ#y2EQ zwr)w8xq4~szADX7_Kl0mFpwmvk$x}=oq2GSJhpZA_#EU^{J5@8sY#_9M+}jbPQcSY z7N>>V@J&DWty?j&Ltxupi}1Lb@(y3(l)AkbW^yRR2$Y8`ZoFJ#Y(F0?c?+ogkz_0h zq$fOTd^{9nW_C5SwJ9vRs&{i^6cXMpj^m_~KB6#@w&!%`xH=ZcZs)F~h&4{A84VAz zn>#=Fn$J*$eU)=R#KbvWp1I<5^aQk>R@(S24G+g!Z^LwRwFvCN_H^dN#8uRTIQtUZiDF8cBiy9M7c zyB|~8I7@ntDjMno8+e9mBzDg+?aPm#@3n{4;9aN!nx1eAmw)ZdD01OXBnG~5%rh<@ zRw|sPsp5H;K4dHpcreVv552~Xdy;-4bh0WAox+4g`&@g|CW3fRN-*3lX-2M*%0oI^5^_Bw_Lwm{m-cT#xBXK5ZEZ5%F)-%&o)YlB@!gYStP{)TxD2elegwXrckwh{B2 z8&3NWB!joy()g)6c<|BCKsKEh!RP_R9|ptpt1Qr<-p~s&w}mH|i4wrZFDlr&U;6=X zzt#C>55^QnH-i-L5KB_d6t?gS)F`a<5xSyl`X~Emh|LUbo`BATd*0>5+rbW# z3L?T!*YjdbKRt=)wjvmht(s1=}5G?23$1kS~h5xZtisZ8T8#8jWY0H@Avx6 zi9SCI=-}7R)9Qmrs)%7A*%-8f98h&whcDAs8 z7$-q~*0zUa!!-?-KB8b>gzA^k9cpfUW&Gt-+it~!2bi|+L(Zt z(?SZf0N5FopB_nyb(pTJXG*zN#&0i-BsFN(`1-1lt=*jC^(0Qm+$+zSZZ5B(KR=J1 zD}s?deGAR%J{{Q138fBDY)<&2;tUGti@cdX{S9rk{LU#M%`Pl&@9Wu7}S%yBKLNb@V3HC3z;3M99Ks zC$X2r-z!Jh593lH?;;$a*kMU_F$#pPiDn3efbf5FbptJ)V4#93Dx?m8+`Js@|Ib}# zrcx|5Z+yu4E#r|;!0gK#R1|`TrBKk)s2Lh8f=5j#gS!pOpSFt=3*ehbPXPyg35RB> zdIMzl2_*>Uk>N3(Fp78Rlg8cp#kt_$OvzRm zJ2MsGA2oa5#h5bes+(s-K3zWA9qpq;GWq>ym^&lY`omkBD9}}NMYMhdeeMecLDYp3 zy!`=vZ=br(U|hzE@PrPRB&O%LF7eJsp*1NKs=;Ckp)h^lb?LqmTC0k{A&S5%3u5Tm zMD@z_Ft}OGoZ9FBn?@EpSc)`1HxFXy|74)W9Ph_z3LnB`9-xDVp8jk7%N|Zqp;+FC zLs7v)TD-e{PAq%n3r>o5`s`gl*C4bl8trGKl=+>tyM9)-3Yt`VNp4>buw9#syYCf` zy@@ZNkewY4KJFp$+9Q8~gOD+s7lhOwfPMP1*TC zEPq$q+5V5$Kvhuoz32NQEG|m+Z;b3bCZB6HJZuBA_E?vluh(H~Lh9=mnXT@94=V5O z@7G;fzy)P>PZv*@i0x&$;MMK~nv66lBsgg^$cl11>d^#jHDZ+S)-DU-rNIJ3Q7;@pCkNY8zW* zh)kM{2J`HkIk1_hgoPf5x0uGPO2d|i}MQahBOfCwOAB7v?>BZBH z&4c@>kAFLQ@-8kM31z4F{0Y69mj={idfK1QSIHFVp^uEyu~17O6c61cEu7xMq3YZwozGEs-GV*mRjY1DWzAzIZavbSt0cte*4{XUETjoj-1Anv0% z1nJ5rX2D~2N&RqVWBS7;0D10ZqpS?h;}-n3lXZpAIuiLr%BPHr=ojr{hw_Q<{+;P` z3Mym0Zx0R4)6GsR(LRR@r6l$>Cda}!jXcwlr@peRgR@MC7ACm)*YPiCv!nM`z@+KX zkSOq<7lU|tpHbCsBgC!GZ%5Q=?J2x$P76&v#6M+_pXL1;B_4Q=k5}xU1@-+-l!6D1 z$$uw#FzTRW%s9xKe3n20&iXFd6yK&}Tdug0jVLPl_F{RydS)DBTh`7CFssS0k6wj8 zJ~CC||K*w5a_029(fcs$T{*zDyzLvqazRTUOCz zE#`;2Y+RcrW#Sag^TlO{C1p5NTQQc+d=b4j1)U=EL%yV;u~f0HLp=Vm@qI1&kKXvC zedLev-Nh5z%rBWW3eNe?Ta9hRW42mZv11Ayp}*&8Ar_AD`1jK0N!(j3qI_YSxu>J= z#z0xd1Bg&zdwX9?*L%Z5+BWa~H$`gC0*(cSS)Gac;jx2ztRT%S?Dj(o99`AzZkFF6MoHp82e5bW$k@r ztVHX#lR+;ePrP}L5tup*OHwPQ(-MZVk$Gb`13MC{> z*}PR-0;X;;%J?ouRk>B!c5k`7QmHEU23jU+%UhN;aXx!Ls_Qkk{)~L$y_)Z1Ozt^r zoC5+>IlYM@M{CC(jT@`5I*pJxUgOG6ve`YjL?_$kf&_UYYg!2vlI0f!*hhkLh+I6I z(r7yOz0*&xAT~{?PW0D=swn)4-%JN=nD&u(5d)X z#;#Q0hjJ&g>OaI}wDjLj#dZix4bAwP+Zx?E5KL!Ii_+&oBvaAOb``EOu;47Y)cek1 zCS+fkAGc!Z-Z7lOIT2cR>~rYSvE{OvdTp*~zis{XaJY8`=Iu@B4=>;>879lS5-9Xw zJ;A2@`L*@MXy0;IPFR{OmR5x{X;*EcVLuH0?(s2?b_x6WVot55@cU%BS|cdTomV7( z4xdp4?wXriv`zEm4`K}l%}C|tw^2Kz2ef%-bYHeu*Ucbr`+?kMbMt+ki60mcGXEcr(7iMiEe((M51|q3&>yJRos5kUAp_HF)%KRT zS2|aQh0D(yTs!tc4Z-`YXrlYvt_tJ(-z%ERgn>&H%ryJeq3t1)ZG-o|Kxn`$d z%I3c;je|0V(9-5fsye;!h+RENzpTb~8@tq4ZzbB>=SsR`lRH#*)45%elEBgtEsI0v zQDmt73h0zZtr;I77_tBllLf=a%xUdqJMF;CP4Wkly{@*kXR6E1B7?r2s7STJs>7o1 zC9Dth(`HRvCbnN5SJO(ke3um>FdZ?uGgenFXciUhT{%OOS9){ztY3FWFO_2*CJ~zE zC2@{LD)>ZqPHhwS(jtmCw{qQU62~wc7dEpd zr>=I>?grf~9&y({{+!uhveo!?>Tw}EGw>wocb1Blf&DqD3Y*3u>n-3>X9=t})wW2g zI|K}Z7xZvsZtz76m*s{P%bl%^eWojLc9=i&5UrzouVmmSwIPGcO<+@7%W5!?{c778 zUw&mj!QkU^aF?{4YvM}tC9xiim)7>90HH}<8UA-?iSu8BpQRV@$PT4CMWyRE7$Rxf zBBh2qDm`P0>~0cD)|cE`%y?b=9trWSAn+Lb#QHXlcnw*ij4TTd0UZY(qvJL1DU5{T zhx;$9Yi%20b%PcY`}Oum9_WKWVa(;;=(gt70FB26RPY#K1ZwuPlF-u3)t_WrLtX1{ z+qk3Lfzb&k@FkBA+OMXfty-dsgXH1%lS-3T^HDOqC({)GZ(T3B;mp@Lrs0B@80*MeVFjCN!!;ro|i@*40pw$&vy*lH2biJf4Pd1xayzLinxo^Wbc37bMfcBC{TW; ziA-O4>gDJF+q=n?ufzjiAGZ{PI^RKewijNF2PVLK;QIWt=(`FmX+U8`yW$M9@j=)sJ5vdR@I*!0_d(+jFZ3~lS_Z8S!m_43U7o%{Kj^O~Adqy9ZOI@nzoeK|SQ z|7qfl?ZogPdxifwV$J(;-*l3$jZ0p1p4}dHeShn^b{h;lYXcg8LacuN`e<*GyquhS zwr~Yvrv18>=-vIZE|ZfH(aML=-=Qwj_hey}pN@h0d#^PX>l1FI$9;r~9Z<3EUpaezBAE^YZS7%Oh{=Um^ zx}hrjXzPeYxT>;a;8Yo)AYh=l_Vy}@0#~~FZ{^|%$idIY_WwL88YsjP%b<52>l~1D z?*eMb0@y?QV&XdN%=p-TnPO0TCyshSTfK``m-CjjDtwnqa7RBDH(;KRBp)`5J4s%2 zeet2W5G{gtoiND1A7pK-5}aV_n+ISIcWvIf7cte56>$4hrFtmybv6BFr)&ml%4$aZ z(2iJn%~oksX#<}B_BzI`%P_FIhhQ3td2LhNU_M{m?~}JJ#0FlzlD{uyI_1`DKGzWq z+Cov@f8j@v)-}8vRrcAVKA|stGHNd7~vH=|!==g~|@ zr!C@hC;GZ47U^z3|3LpoHEK^_Scd(M1Kt;MEJ97(So=h!;V6QOa!<_`>b$SC#`{=u z-$+Hjib)Pl!lvS1u_=Ht!U~+niWj8`aI@$asM9>$YN)NOs~;S@+W9fC;Mg)0P%)7o zy(x~rkXe@8K*f{ujDFi8yik6 zH$nc_P>Qm)`~q4<1=!lb$-VVbWBSd2hlRIo(Rn_X0|1|wEn*A|_LVaaWp}xh3Lzpl zsViUagI!c=C3O+=3sBr>l(^X@GV{tKBPO*}R+JXE0~qJ)|6w%IQ#ZUj98VQCOI2 zDR4FLDR3F~$PI(xf&>TaQ`YlOkJM)p*yTAyEX}t=LiUv@h529<_B?3sxchDlQM)bV zcT$aaS>8wEBA|)|hjiwkNW-02tbGxecDiDdcV%_f&}(G7VseSn&HVlrjawugAFKmz z$QwRfeW9d#vyS*OQpnx+F)8?PCW6!?tl+J*0BI?>E$Oe$RBoW)Q~iy|5$!`CJ5Y%z z_%cruH2BP;Ls*4hI~wzPV%hsLz)%t|e@*m zB8WL?w}iqgAeic(UD}_r;x`FL1u=8;>oun6DWENZ%y;UgGI|6I23M<<yXqAYsBAm?{mbvQ(KpE7f>nY`L6h2K)RB>xG{OBXYsIiaD z&a9rFhATukuhpo6`)k0&G5Gup;bTXaPT`@HJLUJCQgoLOadOGIenG5134D+*?{9;h zLRn9yrLMIW1ltWVc2e10i~c$+p6t<(_7PT&BP>9Vu%C&IeGE7I>)-!Eip+m-`QGIO z4J=A3fLX?aoi@aFho*rmUD3PPmb=}Wq&i8nTafBA=)|D>qd)&yM8(~lrp`N`INE1@ z2~Vw5P--Q7B*8Rg?^~$Q1Z#)L?al2^RY|5n;~f-MJK0SP<}Q>|ZmYg2nGPGOlX-^l zks2DPKRAlpm*9^Mk(3=g%S+<;_c|K26+qP=IM4daqaERGTOmI_N|!0{9bLN4vvinN zDtO>~@GCs|c4^@UH$K{vR!GbvFSzUD95YCN;S{^!}|Jj^A z)x4@l4(CoDnUO%riRE6Pv(>6BjFy-Hy!IWyQ0M;*HGKU5*!WEZ(KS+T*kE^ihyl?>aZi*X9)M2iTcFI;_jp z)aDF{$;XYoxrIg}eXoEQ-jOw}Vm-db@x#XoRVGCjsfNcRfZ8yp&}x%%&N zk?FhX9uU_$1J+A6dcJo<}92sE%>!kh>|~%Q-x808KZOt6A?^QQ+G%5af(H7 zF(N#m&nc?kLkCz!sIzCoq7)V9PFSd}mai=1r!aWVqzC)X*)<>XM((*&^8w75iIcPx zDwaB&ln}=<+5N75C7QB|m$GLj*nr(L)Hy_uV~w{iO6-Kj9WrE^)SlZ2wG+^8v=^fg z1A#~)a1m)R^X$JWBARsaGo{Ix@(=7@%U5;4stprqt|}K%1Zt(yazzy>Y}pBOm~2Y9 zb*<-Dw?%sca<@8UPjBk*NWmlzRAtU8vinGoeLmuc=5tvFD--lN?nSPbHQuk^xWnvi zycHFK-C7Q87>C=NFH#)f)=(UacrNf#9L10F&QrV1TJbzrE7}nM)=_bT(>MvS2S~b| z@Lenrc*0BoTdj8wqT!=f$Au09&%?SYTJgMAt9W3o2u{=AY%@{*w36sdt>quQwSp_^ zfu1=p{LVP{YiC>@XYQ0}wSr<z;~w zvwHz}**a^>vZF>VI`piG>)y0>De1Zn?sRfTILGbA#!))~V^ZYW_uM3z^tPI;pWHqv zjNU6s4-QxG-YW^iWBh_ogXLmcSxDoR;ufQ3Tm-i}NlX=g1DIRZgPXxKkWrW1JFOlO zRb%>MJm?mmuwAz?F+xy>tj72z2yGqTOgMScB=GV4epWSr3*x41tD!_&l{su&~UGHe~v*0z}r=uz~g?(q2Ju+gZo5(LiVBf zNZV;vK=XNj6_8H%SmkunFmG+8+pX1OFYx4^zM`=aCcsB}dmB%78w8&5sxVAyoKxDK zpF4R~v;Y0DSrTU*l(2V_Pd8{|8-iPtNueWHq~aBYrlJd(`Sa@t7xmjQLBk{O4hwA0 zgV_9E3}ZN9a26@=>d&&E{-KUqzpfV0(>+KG(7gb1Si7Wrq;+#}fKHe^!VqNVl5Hb( zA*)WKMNSgX?aUl`2P7~IGMTd?q4A94Q(5cYLSFE zZ-v=pU9E2wNZ_THZ$6e>UDsq`T$@Bwwi8}Grwcf|PVc!UzJ$6EqD5uJMxUf-Zu7bT z);T%)eGS)GGZ(IYRn3ZZx*uE1HDfk;q?g`o$_-naj^*foW4>O-+i zGGgD*6^rwtY}@CRgO)_8bMW(k%R50b4q;Lw3u;x=S5wTiGm^F(Wsm5ElAor^Wz{m; z=4+LpT0&Ozk!b*5#mM5P%z;~Nh5Gr^>ww9q)z;s=ARw$@Wwtno4Y7;QDjM*V2HO3`P_E+jebN||rS`7qk%X8x z7Fdu}vO{}icK^uM&>&uY)aI)L0kZ-c%n{QkpdFa-is5u=FXa*Gd<7!ZbX1=rVK5S- zHt@B@WDtgWBmC?Yk-zR;_f@cAPLGu37t^ixao`~9y+=H!<^CrAajLex z&v8tMzLy+nC2aonTK`3Q87TO{iU#bP61DlelMJ8rU;D;bSlR!zlZ=()-xt7tLYsrJ zumHE>aM*#V>!RU6kG0Qq%-LDO_&~)C(IBAdx+rbZ=I6e$uN$J@fK{8K5y0(o7D@m+ z%YUW5sZiCnQ)YtqoviwOlW*#Pe?Y4012V|E&aRpYv7J+Ps7Ez3_yMd&Ybq)jhYBXl zpcn$~zWf*hJ$Y(@c&A0t`CLY_P{+IZ(LOp?-zJH+arN?pu}z11*TmYn2Ayi&j0&;) ziwQ|?Uf5xs&yyM97y#+(drR)<`avAscj)NsLLnniwM-zTQv<}o*{pose$=ztZ2Z?3 zaZ>10B7(xkv%&sj8a76+?Tar)&Ze~d8m98^_C1W0SwGcL7aOhuj;opnyOzK2c8v@>s zV~V=v$A}Qv+Y?X9z=S@LXfT+G@)d% zQAHf9OL$pqD~n_)lDjtdi3GJiFk3tn(-1 z-R8Vd47NQ%&jDa((5oAtpLIELkh)VkuGnNLvY-?Z#p?|h*-SFbfWpxdXuPeFug+a& zSmYC}a#IazRxicxB`YI~e*}HzJC`trJ1ePcRkOYpN4MIoL_ENQuWlh-{&3*XU3yVV zuW{XIoX}d(bmb#DOA0&@wVqgk8sBv)3)zjpR?a0WM=DUuTItc>K7ccm-kk4Qw5u z#f=awinfQ5sF<3HbQ zJ9I}Yzc!()ozT`J8l+x)VQhw@4B09-G6n&MsclvhTOWg{zWMmRSYcZeUXEIVImFWZ zbxrAxM84)YcKrNLaorf8OYteoA~B2!(ryySP_!Yh1kvQ{38+g2j0kjP$sm((5xjC~ z8XBuGWdw!;gs4ko*>S(7vx$Y=5M{}ArN4V=MI#M|5u1i>l_&h^E!oY}=AH9+dKt1S zvfD_EJ=l16YuyjAl|2JIY;>Sk+AfPTa3qBanz;MakfkIJ0QO!6S1sSSgAR(eqx3JEiv ze{>UsEGL_w#zD;NXSwk}rK*4)MneFWiP~FIGIIFLRbJ>3a0oEN+C`*RjoC@ z-ynYx_{VPkMIgi}TM&1wrUIpAHF-y+sDMpDtLqFnnL&a@Wdw+sDUU%zF478uk(|Jw z?r;mnBFm=o%R_I?iCDUvz@qN(d`eWgA$ZAyl$8tSD`+JmFCYYkRF04@6F!k8sx?&- zGj*atz${SX`~%C9CQ+p+lX$uk4Ptn|j@R16X9Q|2>z5`5ixB9&RP6WPej~d#3P5>) zSq(8$<<_~U#(y>lP70oU?-Qd0De7N5L$XOtlAcOaVf)<#WWMu4u{4|JKae1V!DlZ& z@JV4n!&E9W|ATKMP z*T`YB3jY8q8Gn>poEvnJ3h^s~a9EZipRZ^tk!|~w-7`ZQSCm40_LQ%63_#@rQ8fTg zz-|=uaL`{(;}-r`)67r%vOvJh{4a<8dg@c6^nX-o4d{QIKqiw&MEr!aHTMske_Spc ztMH#%e)92?7Xe8^+RFN-;AT`3f(1q)R8x9zN-&!0v4Bq#1O!?9s}o6;Y3s*YYOHKbd(VtA8l-ADsVB5#zu5!M|j^f1UR4mV|P3KbaNhOlmISvqY3U zEzC5734}co)d1A$Nt7Kcvm1y7nCLQnMK`E|fC+*xjvT&Vrv4^TUzX^$uoD3B_tpem zL?Km%hm6x*f8v!)Q_lS#-umn>#jZX`%E78%O8&dQR9+aCDoFgN8)<34X&ZJtlc~H5 zrS=^G)g>OT5X)Czhm|mRpumXca#ec&Xp?_ZhOk;xB?X&zGbqQZwtmD#T`KY-GV}+E zE(IczhGB6keTDPd{3l0t1hqwgKl{MduuBW2%XHlaKAGgch`B&V5c;K@QAN2WfBQ~N zw*DkY746kFkimE(Z8L%Z+#l&U)K+lU?-sDj$~KQio?f)Vt1n?Bfxbs$5-tD|$*3Zm zNDUjC;#LV>IrN)(BjhSLq8D5ayA(&gl}ySg$>GeCFsIdbXJkCR=!jT1k{iyjRw}sK z-RI#dL1gOcew?nUiDXS#X77j7A8MEP$GzJ#w~yD8jn0oDt`A4Pw-e#>g2WlUn@K=h zg4_WSa6|vv`gc{=zWUSs#m!Jx6P-oY`G8-lh9WS}n1A^|9Z6w4#Cu6g8NLITr=^fD=O zJA>>f&+74|dL&&XQ$JyOouNv*75C$Q+;M4a;B4NH77I~- zW$823?W}iSEcrag%p{7M(&L`|;yd2#OVuF524gj&8nehR@A}NGZ+3607b}x{>|e_r zzS{?P#WCDENk^umTRy=i<~y1HiQWrWOg&nhXx>nBwBjQIbc{Kh z3nHZS8rf_zvJBOP8$4CQig{@kY&9tRjfa5hJT?TGW}2eeWRM!81U(wD#4mZ8R9}#? zRL+0$%hzO%Qhx;VP35Jr=m1T2K)&{7?np~O-FlEFlj6dJ@{d7zj1;9lY6@a@K0OEO zyOZS%DdH5yj-&~93j}|k1dh+2x&%a}5)7>d=bn=!ist@%MyE8)=rGS3+oQ-obQy*} zP*{Tx5F+V}q?h`m1L_OlbQ)Ow|J}eWQS`kjK@^MSWz4{DI4uBl``Y90tSO|QhTpAD za}{S|zMQ3mO2l^`Kw-kIDhxly0E9NkT@(ap&9x!S@2BU3%|{?P))l4(0@AmB`vIa) z;8c+BJk_nu+Rcg8Q&ApQyLBqr$}YuNjQLnR1I_vZv|00HALs`~`1{hiPHQG4Poenh z8xRUQeE^phVjKXZiJO9f+&VH`bSEKB@Sz7Hq>b0h1)|UVt6hdz9susw7k{U_{ubZC zn4QHUF0jWaY!D+f-<8{_hg;=VJL!x|ZR^+c{TJf2Rt-eJ#2xV!)1!k^h62TFv@>c} z*f2i>`Mxzmu-GO8R>~FboK9#KDnh1-H?=b+4rU6Co+qI5{3@o)rDlNCX@S0QF>gkf zocD01rt17CS8DC|1~Pxd*l=|04+4+kek>{N2}j=dgU9y^EU)MuUmK?S{!BD(X>=vZ zK<*j)Rw^{Wic$Y%2lf{V(pZm-U-T|d^WVd;~?hx>yf9Iut@*{0c++0RuuTS$FH%}8(LM6;p_>-A zFSOT5dztsvy~dde(KJt(di!;dBoV#gxbq2_Df5`(U=mb%?&}1N5t93mMcXAuLwg5G zoS5;MxrgzSa@?C`Cj&qHnM5sF1R_mE))}@eaN7iZc)eJPfqhhS%wm7P^EL>P@|F+B zD$#IJMIc`JKLo{9U#6aQMorcj?+t>K){7tg<)&5W;Bz!r$K=OXzAy!3+EV z^#$bDVfks4#-tz2XI_@xXG;ovF?-8qxalW5RAgb6I%~JWi5wy!wzj*<{3gnE^ha=G zB_nLAPb|ZxvUHQZ@`m0ENaW`5-srrYzmENPWpk=z3o5|+$hT&tH|}C?G$xyZo27E_ z;Oj-HTY{K?k;Rgvyt+Rwn0c|MWVmes(q7UZ(8oFKJu~cFWHO?AgxQspS1f)Bo%)sZQXM7hx#Z;Ri*EafWJLY%&qqPgr{hWfTOi<$op1- zovGZ|?f{&JY)V-B1V}KKNxygo@Juol#+n{AF~ZmqZcL-3&aGqJPc3LCH)bNw`<-&4 zf&k1y?3F;rixgyHWsLR9Te;d1q#?+>mSCXr6~j*!s6g@2m@vr%iCO(`^{JAXqD}LD$mrb89>_xekfNCsfN`+d6WCb* zmd^xRW zQ4HVAt3Xpu1Fq-|T!Hrn0GH})2fh1hVGBy3iG@w|#BO_@^5k4}cl98j37R%=7n73B)CXRL&*O}bqlECh zeJ%njZGTR0`*E-OGj7&xUNw@X=#f@2w&Y40cUCx*M|gVSmMWixd6{hUuVtnvgkXYE zxY3|#D6$YdQ&uM(0GH;LdA~o-9-aBMH4dKkp5n$}1a zSaF>F7H_c#Z^#T9AK2&|_%9BpI0*C(&=2fDIec2yQ7j9r_Cu%2t8%_Qjc@Z!52&`d zQb(20NX-o#THYB~V!22{H8!q(JfUeVtIoYhGbpX^`xMje_#StjGHVDC+%_sB*7}9z zG4$4Y5qahZHVdQu8Nj+%Q4@fE9{A2`pkU3Jx%1}1BM+Aq4K3KcR*_BX`l2O6VLTlwSTih9x@dvo>v?(E2RD(`7uf(bqp)0Kkw&sulBi?kmci9lGxt{T(d^V;&8PDJa7 zatVHpsUC*j(i&Xdzv&JLMxhwSBXRMcXZg*>u*vMEVt+G|nKOl6Vq|q_2@Rdv=9l_aO}UF^N+K+m-D z>^Rj^Z4e#mK7ud{Ni6k2i&QN=tS^m|Qt_5aY4NMp6I1EXbFBiDCOfiBsY&aWEpzl} z6oku_(Ugb`H2GDAfd}Q5>M^vbtD-_!3!J4Ilq-pv@0Apwq7d!G+`wjA&6SBh&`9x3 z(xg{ttU%?1se=xWfT^oMuS1X-F{7IP;FQTt^JAr=ahiSu{aL!C4k%X;EmEx~T9b$+ zN&WlB$1W=KfKHe}nosDeFVj&FIJw7nwO*q}uSe{Qm&Km7w`QAZv$e zx$t*$*8hOO7Y-h3A{Ir9h5odi?mxC$@l%m;Wh1_eSSKM?wYr}tqE(r;#5fagIsq-w zzefZuQEIRYsFA|R0I1FTI=2zVKAT=3$I__2P+*sRmQ?+ZlJ~Qfe<7-6E=Sp_gDW*1 z@_{L(G^l}=r0%HAF2Vnw$|{`tCAtK$&!TLTq7PrlO3n1&YJ@N{)TVu%zY2y}cs88c zs+KG${zoGmsLCc`rRt;SYKfi%s{exY52DZV#ed6}xzHXL>3%xT>Q5K0{Fzu2s%deN z9(Akow9inXkKQ2)_V@3B$PO^KD_NZ{?`HzTsE6~3#$v31qihGyDV+=gLVFgf4`!c@ zVH}6YGn`$(klixWfaN5?_Nh_AZp~XQH z1lxoO>dZ~rKf7HfBs19+8VxB^^2Mi)I)j42xlZ!h%zfDHuj3>QU2NPW+Gwx;l>E{L zcKeG6DTzV@wm=Bvm#CdOo?aSqxGq{maB4_KHiO~~nTcUU^&8#4jnGjNW6}RI=6!Qn zbGA;wlFFXtsx5FBgZ#)vS7!$2BR~3i5g)Ip&8@QdZW6f{<;53|Ku-oGT*qM7_yR>Q z#!>>|VkEk1%_W(dvE_NHyTX|nb+v|^*aEzTe>y@J|)xfT0cRRN|^Nu8T zJJ!SMkkfVOu9nkRuW1vm+V!>x)f;uKLaZPglFkvZ3soCoEQxA24%J)Y6g#gV@Kp6O z4^`uI_Rk3qcG?*wnQFekgrWI39Oz@d{BamgTiPcf8`WOg!0+AeAKoAn^p$enAU$nl zH^^um5N~aZO)q&k-49uBf5}R4%BRX0or6|7c)*yp#ShBCUW=g zt9;`e$A|ax#)qEo+aBke>*Icx*5i)dECZeufI({FBfL0(vlE50)EZixa%P3Z?Ysf6 z1J}4?K`!*obv|T%l3wX8B(y=|5>ljey}TN8`1PGsmj|8As#*RC4`SAdp`PMfqDG=C zXig<_=kKV^8@Tmm6a+cF7c*JT^RH^f!j5VUb_Df^$$h`gMBc7B(;=85pxCx0xVT4q z0fIlnJ~QZXE4sjX^MfFnBjF||*Hq^jB-xNw<$o0Dra@Kwdm1}Y>d)?a> zo9=E|{tAy5{c#AUFNn4H8OA0AOYN97l}>;-EYAZSdq{dK$fd()!%XT(87PH6NhcN` zB31mzt6Lh@hcS3`IaXQ0c>y0<%hE304KU*0El{(kHJAC0!H#(G)0?}%=X7$^_W>@b zz2~y5fvHK#uP2fEpn95zZO8Q)7|~Ee2|FdXK86(384fI_6-&;TjGPSPyp|q zJ#Pq58+^;lmI;}Mh9SJnKLigC*yB|hnL&7BPNBwP&HYoV!HxmyIq92Z&^*-1ARB@m zF{Wh-=PK^nw9(R~hq9gY(Xzw+B>BuTlpeg>GG@_Oz1Z;F zG;A$`k8q(@McxAkB0$sAzqFaeqcD7)(d6qbrfsLEgyCwlkahT6-OU0R6i4^lWqG)M zfhtRZAFoU;R=DJ*K~H~X$vs4&MYpjrTH>ZLu(|;?5{?fFydkqQ-YhBVWeXmR` zBzy#6wq11~mTeN}dA9MpH{JpBxVHM(EblL&``JRv^(fR>OFi)?OG36>D)yf_m1CTJ zwzL-sa14RXib?i}8`{W#Qe~D%9R}X3tnG)-U`M8DMN(KLLmz~~(&TnYwD_<+x8Wz! zjs?Hi$VaGRgLsO6GaUN+7D{D@$4n|g^@XVjShQ+>wxZ9a99&au!oV5dM_d_H+{Sd%fD zpLWmPRJ`C~FKS`ekSqE6`pWdeKRwPN{;GkRVSu>fWbFf#jAvctpE(^2VCjvh)!#K* z7`A_}(E<%y1+{_Zx1tC@1UN`y;N=&wE#L{17z(hP5QYp01tXRKM74*f0I+>7=l1whM0Sd<$vJ^7wlRqHx zNEMZ^6km-;7n6t0#9===4KD>~acchH(8cu0hw39HU}ID!A%VUMT;7ZdVjHDzixFjz z&1jjeO*2Yk0~HjY;Q$@@zPzvAmk)T9VL5XeP9~8~xyhe_Bv4KdKi;0J`kE-k4zKjP z2*i@9>9kutQ(SQMhGZW(B#oRfwVdH*l+o*#q&uLBH=1`HgwX?@4>r>TX7G zk(N`sd!-}nP=P9T1BRYLLskSJ%o>QbM8aFX(%hJn75j;W(*jnVdVeySfepRF2&82S za!s>F5>&G`*9S2VP+1rB`)k@nh34V3fGsD6PYDqPAche@`0`kYrDLL17mA1m3e6fC zmlvZ(NS2y#-z8j^7M=4w)EY3mhTAp@1ZqgPXCF;Wf8)mU=F z_m9wTsx3k5JXXe&pwNwYJhuMfcdbzDWqUR6CZZWm?&7@*>%vE;q@N&7gt1_?b_v>y ziblqlRHvzCrzuo05KCihoc;wC5{0TI@0<_O>|I%J>kP;b0=r-!t)B|b1~>ZRzk!&I z-7^580}h{x2o7fh4l5Rhf&YQL;lfOoE6QaK2%Aobp!$Oo_B=8|n_+nC?`|X=si|b| z&%uw}^XuU{(n_#sO05TyUy(7uYyXFeY0C78U|CB5T)nD2=od&HQA&d@{F_B)0w_{Q zb^AO6h)RI>!f3UG<5L+TIY>}^zkY}9nWw*8$rq_Lp2m+fREXDtv<0vTka*g zZa-P#790-z;PZW|;&O|%r-kG;Ks)CZZkKM{UIWltlii*(Elk!0jJsAHu47o{x#Kgf zie2@`K%J6NZ}e{aGghi9ydwdgwip0!)~ftOAQ3mt9=@A5OUAMrp!DRgk(t~O2ec25 zL>NPllZ1qwFAl=bl{*?5;tu%I3#RyJokdJKl&>(E7n3)`-nxSxV2Bx)do6sG4k_!5 zApljad_kv-DeT}!B^WH(8$`==nb#sOQdx%VMuRtpSY*X)QxG#T3NV>a4PY34yb>={ z5m%4qqvoOLZ^`1VOeZtnm7w%1uC^$O+evv8#cJrpe8&Faxq#b38R!hM1U6T}o!ajp zgL<fyAh%jqt=KZG9};k7;_pYt7@^W8$>+)^8GOqtom`g@_MpB&`4exKxn zRV!{>m~Av7xqYUktv$DrThDHJ=W}*{3b|ABs$eF$M1g)zJsHrTz?Dbq7&>53Xb1Sk zXKP7YMh8f3pD0+8^g&XJ2D$1uzyrWJzv7#$_VUdwv*IGdc7QZcL=qrkPhk6xXrQk` zPW)6+BKzhcMgfh+E=22t!ENA5^LS=JzV+P>uCWs`Z7}JGv3d&1owm95njMs~bJ|4p zvtv$RkclY=Tm6h(RdNXm=%?wZ@&)AgTl$Uey!N&CK|M80mSRNuQ)2{fkeW=5Yy8ee zgY3DTF)tI0W|c-tSwA4+|9I+>&c^9U-x81VY)7wKNvxl&@G&B$-Ir4?#mIG!e#V8| zNhsaD&6gb4ks6Xoi(`WB?siDaoW6~(4YNN}nXNz`o1_ZFnZ08L6b{9}xC5MvAw5Ss zFja(vGRELzUPFJl#1Ug$J5ZP}m)oYgm`#7%rRWQbs~ZfoKR#RI?2G>X6@|V$FAEVQ zuzvM>T-25wC}I|+J$<&ymSsJOK{cGhkcmz-Hlj<7+64J3G@@#mGQB|wi_~S!ps7V+ zl~8C%7VMW*6=caJhzaVso^ODtN){uFoXMTa%aO?y^vo7<7E(#N5uUaP0|SC&VicyqRX$eD%SEiC-4WYqKI!(KI6te_(veLW_*dmuW^9`ZmnsTO^Qzpb=sQ z1t#iAGmJ6BkIkWJ78)3aVt2neX@5bg9yU=Xxq*`^%}d(1W(KD|3yKmuMHFhL%cS8VII0 z@e*%h92+26l5x+J3QQrkbb6FBsJzS=eMm3Zw5pZtMbdFQMZr(zYnK^T7iR)hixW(G z6OsdjOri;xUHFBfc*Fn*_uSCD3l&EkZccC(=hDV_!xMj zSdW%Xpl=oG9Zj+-BfnPp4e0r$IR~MB@GW6Rh-Hv^uw<+Z_TU(fwOZkG3Rq#s-JFjQ zLPbOzJG+lOkWk;t6+mpI9Meia3>EfMxdc@Ig4h^E)#u}$4`>4nRN61!N>;ROs?FxY zMwn8^;JbzpA(Yf6HD5)frD(EXaxG-KinIgMB)b*j8xsXb=~C|E2^g^yaD?8we~g~D zKk9}>N^5P)-^>Q^Q0)`ru;ArytC^|EGWO0*q?;YJdDh1VtMWdL@GVO4;n0ey^F(V2 z$rf{p#O_5KcbNlbFCvQZJlQ#JU!Hx+v^|6LU-FyoBebob9%6A+T1K46bkgnblUl|G}nh})T$775d983MH;!CsjhSun4N8k7r z1{;5mAz~Jeyl`J3R<>%6h8(?hq9V=B>}$Or<28nVOw@gbzr{{C&Oso~R@;=~ZYOey z$u{#Sym?EIXxXSE`HuE2?5GX!dh{|05Dp2BW600=#vCLrk(&#VOv?LSC2_pcmGOR) zHCiP=6uN=9@viOY`D*j%F|?L4%&Y%y^GYB2I2Yvr##`2`F87F_@4%oH+y$B*cvTCt z3N4sVmlp-tWho|Buq$m=N9+j>6rs9E6t;(H4fuGiM1vPFK2$;rbOMPt24Fx zq8q}siI{C#MiGZk;T`N;6E2U>h#sa{c5hb+37~{T{~l?4ESk9)8uNVW6>of~czlK7 ztG_wa&rd!lc-4lBuydIfd~t;v;Uj}N^yqabDvr;{?kg~~ZjPNd)xJ}#kH&|EdlfDr~JWZYcHc8t(-(rbSyaI9ihQ(~-(q;jO$Hi)_UlJye5k=b!$;P!;5XUA2z zbO|DwodnjDL^zwJ`0HG7&A6IaHA)#dsgrs;n_SHLO_ zA2K6jyX>7f(=kqmG%=H^t>fBn0ovq3MCz#yp41GTQEV{&p!4FIKU1R|mqB_rL!L$} zgecgWj{Lg85?~O~h{4`2s1s`)0J*b@2RAbYk#`X#)G`1Gf7qyqja=*Xb zoTe0@4U61R8!J$N3j=E)4Gwa0uH%={QOU-p60zkHxF029?enl7Cj=5s0JINA7rdTHeKeL84$%Pn8HgRvi+OkL*!Eic{ zL+;0?irbX)DGJ&TYnRPtr9N&6xivuR!~P+N^qD8+uFLm=|J)lsX&EPCo;|%vU+dx* z(GR{i<+WFktY1`=MD>AlX#hGmoXYksw>i^lg}I^kFxK@tJktR>U8o@OP#Xz7FrHTU zZ_YT47w0ZGRtBIeB=niH7GRtK9H96;S6ryyi=$EmI|62g5#hf~%9iY_$jarp$I!Qg z?%>d2LoA?Z9hE8IccWl`v4;@*B7gkX^5C5R^Q`(mLn0uv$o`O2YODJ-5yUA`eq!sB zuwPQT^Bg$~$bX@G-*1Z*smvus$wvHUebnC&G^eY@4hL#4OplJ7G7aEXguEP-iA5l2 z2@?n9zBbT38_x}_y?a4mxxQ+R2I&^d*@uKdHqdn@K`A z0<-w}Wa<1?Ev+ksCfm@UJ@`0sk0aqmis0-ozhYuDE?aHiujAOW@YY`{^NfxwVMg*e zOoys}fgXJ2g05_)jG2S&?x%|*{Cyz0r2=L?upIybiztRlU$FT~GM&?NA9PtQXA_MC zl&)A-CV&&&K-=!4;fg^-K8fce7dqXsV-XoE-;Qg$A!Wy>2j0G+x7}6Q)RC0e+xtie z=;a)v(8`BU*3A64T5i5=>yN;E31MU48`N;=ng9+fuvF3Y5AeL1`95ZIWo_Vavu#~{ zkp-+}v*9)awop0UMym?_;lP%v^q7;Q#_S>}_MD)wv zCgd9S_Mb29hL45ZTvoXr?2B*ra4z6EAviTHYKn*Mo-r22;3I4?vEFT=l4UuIR^jpx zcAsBy)4Wiv9&-gm2mVN#aCxX&auvoS!0j%%>0z&nfeuyUA#iKqJCkkyj5av^>jEkI zPbv6h)B|wOdV+<2DVOG@4G@RN{s%0VHuQ~MFcs~RNl7fTmk@mX7(;s+| zY4215r*^(e-rF+CJMe0ZSn~>q{@!dPsCyr@q1GpHA*(S9nPZ8_b*mxN!tkMkF%M&x zs?}N=zi407Nb2Z3{|r^yYYA^X2N+R4X)!ow{z=nic3v4ua1(Et)V@#cp^lYhe^B9Y zki)wYlNI`ec3MeU`OpzjG#@}^&SUr8JSDp}wmA~KGI7m>`127oo=r64x`i*1Ku&&#c5`ct)@Wf-B zG&;DzZ_ z8wePiSx@C02p$ztH2utRWV&IzREu|^xqh97$IWyihLGtOn#ieW3>GdL!Bg=ASDoRbkNHm?W3Lw>!g9`zCqFR_I{`T}1u&J&dGuw|#-H^GpBIPG_;_GUh z_(=a@@%Ex1*q z7MyiREJIMnj8Ogii-tCNLG+22@Gl+mK~sT~E}G^1D6OVDU`hc9Z4<>_MVSZ3-jfo$ z1g0WXHo@MMh)opU7l2AzN_Jh549eT9-5t?MY{U2Jku^4zh?0vvx1ltg-cW2o1nHA< zfxINg)hwljk#;w_2DU4L26RN+f4;w@CJO1cZmA4HwL)eKv-6Qz| zCU{^ZzokOhJ3u4tPpEvD>&9=SK?iE@;6dL*nkL6+1VF@~F82;S=!WuZB$$_KD%aEW zewQFL`-c;Z=3Rc4Y>w0#I&KYD|CKRblG5S?5~Md@jP+z{FL!qmVJKqvBXFbKXyualz6#y7xIJ6NsdOzylE$Y^YA=Eh! z$#FXg>Zt~6+~*e0j3r*3=7%B+^Y-^eiTKzk@1pyh=1f5R733Dp`8;gQC1UPUyKk3~ z$nee(ZGSq8F)?Ko*tjtsmjmG7;2(;N0_!(9v~Ap><*1CuN@b~al^_(EP=mnH-+3Mw zxFk1Rf&roNf4HLorbk072%G_?7cn)Ek~5X`lA2HKR)yAVtdflCX0NP1~d{pW{I~ zpr!OV?2Pwp^-T?2I#WJdT#D6!o3-SYAY{cx5g_w&YvT#9ypF1f%bsHVlcfKR_7sB- zq21JSGQHx}tf%>5kzPEfJFmE42n~}fZ|^-4Ii=VUai+jvSM=@dUt>6rqNSXXE58n#h z^z!1z7iLp*V)(4S=qYnodXPm1d~CIU#8Lk8EfSa~UX3u$nj$)u0A#UuC8r@tRwI3T zPx8E{IljF30CCV?TKS(@)tl8XD8Ne!Q6V4+1`!bk3kw_9zmB`GGyeMmXxJ#C1x$t! zLjaC>d?5kO6N$|N2MIr?SvTdm2!RX4V!OZ+A~9OvK8e^2(BT7%62Qv#-{E@+Mx%Ed zuh#XM4nX#6A1Mq@dwv>|0T&0sK=F4OD=eRC*^PKUV$e78_2y0`)?BN34sBc{O)yTz zLnYjEA0Hq$0b(FbgI463AzAcYI#km$8{=4nuLQonE%vhYi85uBv|)@;kv=m9&>*Jx z{^}y;$=fv}R0+pfGtSFibNA!N}`LL?A3;0!=>y zx?fd$r(swxz&)=Q2AwKL2g07B1`0_v-U{$I6amqTlhqqct~OW%HvyF@iBAuy$97~4 zK5@qINTWt~?RB~RT2Ml#r#oa{|+HgsYb9Fr|1hF56}a&iJ8Hk!HM<=Jz7DFkHCR_N@^c+{dYUm!94)W z8>0;KiO-w8VxVIQBKjl?vw#C6 zAS`XjX9hD7MtCTBBHz~bm-n=buBVj^naB7y~%`dT3>k4;38=EkBcHCK$rI$ zs4f_8)6GXGrWlp!W3UvM5b|&ZW-cHEAkr-2KMaE(M5?l1l&Hu;HHf*NML>_RnvG-h zRd@|!71gr-z5zWFDy^L4JDd+B_uM%3W(?NorIt)LW>`Hd6Ju_fe+qkf6WBqa_mA$D zHH_NcTv2|?u2nTOJ1O`X*u+`>9Cfw9)0<)RGor0+OJ63pIk`Xu5+-GPbZNjC74*Z% z0&m0!7WL&aRuxldb|hW##=-{RZ2|BaJ7+iN+#l0F$>MuktT$I&Dg26%hijJy)omTP zz@W({Fib%~Q*Vf#kS7RlflQ;f(`2&#J!JY#EbrHZfe9nN|7oGIs$8gbJHdH`fldj( z+Xh}napwF0vJaoTd?X51L^B}dI=yTK7{S`yN+4Sq=|!>QiMZ#j`%_HwviZejt@Hg9 ze!GtJ^7|@mMRXx~D_1}Js89^;Br4&88Q}=ox@W2~9;)vXVX>g$cd{UP_Wp*@@Y(oF#3TUdI+&#o|HGLAtgTA9Mi;R8{#_w2}bC969-2?1CIE z*%H=oz`F%*{-JOv@({)sy=#UD*GEs(2UK0f>rOhw=ksOh-{@`v#^}IsiSa3OS*kD&_z-$X5rPcA~|6MNBf#RONao+ZNejY*pm!aH^ym^TAz+<2u&I~_t7UC{cGcW_MkecVTGLT6Gq~9IlHZn3S z#zZ2+Cdl4mlZzMyeNrc@w`8p960(|gOm@(Cdr6`4pbu72{ulx5C6Vm2R)hM7bm4*& zWqfs*o$rRDr6U<}mcN6@AX_&}8=7G=Th6Lb-!h3vB|l=u_~DR#qiAU#%2&ktLFF-) zo3WG~C|Y;z*kiXyj@3<1;yP?5P$8DQ3^E=AFqcp4SG>*&}9q z3uXVLZP1m@wF$ZN`-TDLijsw^OU?G0w@=ep6G#_k=A$(L^F-t9*`pI`(gV)rv9%jW zeHLy5foaK(BB%SbGd~|y?If1CTv5r#_rq$e$7p639eX|ZB^k_czfy6lNjpc7Xp&=$ z9sL>U{YdbEPPWR(DKysNen({94prb6ag`aXFOAbJ(Qg`@OfSUJ!+Exnce)W59mdf7 zUW#p9S1d@t!gyKdY@$Il3cyj4W2O100j_XAXx3Dw_TI?Mn`2cn@2=~Yx+FN;iO-0I z?3pcw=d%$RJ~`LAjvg ztgS?03=A2S!LRFLRYNwk#ssv_m9+JGWf}teix|s*08}etoq*l|q(8lgB*p{hzbmPt zP1)55z}=9tjXrd4NzOD-ZVV2N7G=g1+vzd5gk_*sSK|`4>-nt$dyvK$f>MEZQ&UG} zYHO_k>O!%2cCVO|3^B=SW3&8o$74+60Qk-`b$E~b~$!dFDH>xI+ zcHw%=2ERaq<7v!AlHG?Sm?edS@~`(?aL->&1tVLJcnt2R3H%93s>TBKX0zVYIo`Ie zDWDRF`KMz3EZcCe$FaTDuuu%f7N8azn48J~=%BKgWQAsm%%x2?eM0uaeo!A6@zHm% zYqzQ{q4rPaETQf^wijT^Ne5}e`#!>@j**J|)}FICa6J?oz&HX+8!KTimAF2elcSY& z#rTmVX2tPm=C(K~K|wZ=wJPVC_~6f`-h=IMy#|bWlz0T)!#+;O;*7%cwD66G5sl|6 z06RqZNjoK5%DA;En`91$c`RXz-t12bly5XJF-aqvYU)d9j}3QH8$JKUFg5E~E503u zScZ0ot?wR$AoU3*E1ahu=MTo+L?5(95xbxtiw8cdBhpQ`ioD$~tj+SurOQGag{-u< z>6|^u*S)R!{A%lN+)jxv-IHZ#zk&s70g|t@42?4rIpHJ1Y>3~bhpaviY}w0G;GFn+ z{^Tz_hQDS#w{I83lZM#$+@9_e;}e=`e~Mi?)C9Dt_LS<~ukfp@EC{&q;#Ca5QU!-1 z2{=Pb{$N#A=a6*}kNKt9{5-aGx-<7oALhgO!0j9v&lGwst#}J9f43d5A=~L z?98CoGB@)6W<&jRp#zTaOTd8Qx4jT5Gjbp2>|+!q%eqO><0oh;V`J*rf|_b6+NKdx z#URI_I!){ce&mH1L=!%tL8~9wjsQ>GN)n!UE$xmPbM~r)(OK-t6BndH97;WpbNA^@ zawsYaBDxeC?l=SIy(qi!^f>vs!Tt5CF{Kc{>TW{9SMH#>wJzYLsYW4yQzgRzwx3(+?q6<2q# zrcsb9Np8glA#E|_1LNRa2VlM?u=ydkzrmA)m`=fc91g9j*o|EeYvBT8QA5G(AwZaqWq0Md8Hg98@c*cK%dk3vB~UQ9yE_DT2=0DxCrE(c?h+g(I01qr zz#+K1y9IZ5cY?b+?78>8-TmH=`KD&3r>ncBs-~r+mqE(2d~E5~RZ2g%@lf6^)~h=E z)5sWpnrV^-7Ajaf6K{|NHY519gk1M1%dwpMgVNtTY~8iGZ5VuFj(Y`0I169vHu|nI%NB7B~bd(ic7{kUu^wz}P%c3ep<#ZORj>XX~jzFJi8-J~xDfDL>HDB_; z{~0sK?83e;1NT$Gye>@Elf*ZqOnLH7E4G|HMqmC@8`1+L8BI&w+4VOmu+ z@gvuvM`G?%U49vB*qFa;!!u%nuBE!(J`ee%{0E5;j9V19P)d9N=>mI;A4n;stGZ_1APX5u;&@`*op(z46%L`CTY`N43#xD zYR6CaU@W0iliw8U9lPpTF7NiM=n`^`z;BJ%uk$n6W~^+JZG<1Kn;q`Pt)G&ZbE6HT z1f-r5DXkwg(i@~3`{FcH(M#7ejuK3=zLIF3-}6sYz(LZT2b`aVG+6#E!QDE=k~I+GI01>TI4+YlUiPxuL-;>&i!S< z-FZ+UbtiR;Q>I0hj+S?|b>faq{TsaP)&XlgKp7$ZyqrVd<1x|~gL~)2;nS6gJdOK| zt~HRKf+pT_Se(6E>L0^W0D3v)#W8A#e(twm%~fs#cudnik+XA5@-+M;S6;ooXvM@P z6{FA#ehi5a>1rKG4dZgyA!(x-g`#dwfY$=+%_G1i6soyJZg@D28 zfdgVm!n|ja2g3P7PKvy;;n~l*$?(`~WNrCVQ)^9wTTN#n5n{!HHusN*?f?bKYe&+; ze^&566I@t*?m{nWBp@_3FRYO#`x|-;F%lPQ>N*wbf26 zF51UkWipF-}-zhBDwdEvDlpC`Z;r@N(+*f%Z%98jgt%a-Udq%@@W8bEX z+WB5Qb~YCcTg@2L+9v8^ht~JuR%lI$lx{ONqB z%7uTq0Mj0q%i;8YXm7e2(JF)Cezy0eC^zVwh5}ma<(t9IX~p_~hH3V0=WGfx-Afu= ztjZCFY3WB98az}udZoU-Hg|F*eZF-L{dr6JL08iiky)!lqYANuJ12P3 z)=nzdJcYSZ45`gB2vin$&pW=e&;01;DmZoe;6b3Jg}e}S^_%&0cJK+)PVF{YjoBfB zK1Qg;U!NvG_Zu08PX%wOw@CUSskc^umYE3=_6}0+LBk@l3A#Y+#wDVal^0%3zUH9%5ePAF*`aKlFs19)`=1Jn34 zZLD&q0k7}=jkygSGZef58}xxS1^%!=jzc^U-%!{$qjsn+*?mT=ql5Wy$%jJl_rf1K zLmHe|hbK9~JhqAEyuoU-&58YfBaxNaXKNmciF5RG3=><6x7#NZwzn8?8xM%wphfIu z_aZi!Vgr=&1+ly_S1($#THV(rgzR-fRgAQ~sg{uxcv#r#4oy;Ad#fA0Y{rcmARI8S zzEz7kNB36B9X03e6BA`RYuuK#T1t4|<+5(~LQM$L^9Z{S2cMu)@tG#vHAPuto>F}d z{B9k~JtzuYAcCO|hM!qC#Y9ZLi$@v~kq$qs(!O^J2tOR8LV;D1Rd#vb^GuHU+9PTT z+a9`p-(x1-PFwoSml;DMIiyF)wDD!d>1L|X_|2c7t5WKOi0 zyt82-J1@5z|8tyGpu<3=42#yH2dcg}u{}ZzYj?hcrl;}JM|@&;&eH#`^( z^MyR8+zE-H2ohb5trcg zF+?oz!74eL;vwjH>K6w$cQevfmPw!*EnJ{uvHXp98i5?UBtO4j&W6JyVS4|JCG3rK$!)GU`0}Ka_Ut|PO=_COu1M|e(V5H zEUUUimJlYy;PF9^looNzI14?m7@UQPhYt{4eWTQELWFyXUSCWJ>Sc_7CFp_^Q>3X@ z;J>KtO`gVuZTW`-fw@{zc;Eurmf0*V1}ne+D+qxRQ@r7Zd|Yfc(<^+L47t-NZ1k5= zx6B;MN#&Z|Dz0&=FfJs%TnZje#@|(3Pg82$ftmTyq0ETpT=;A`5EOroBapWMD^Uto zIt#*~4_)0+-^Ckezu>{P9d z1kTdXnG+JgsOvd*jW+!*5%nV4Gd87bG`0*0!2eGJ;D3za!q!A@ggD}!M7QFm28n~k zF>xTx*kSvYPqL^d-=idv6(tq*$KaQ_(V%9cqcLCwSI=V0gW`U8RU&I0rh&wx1@1cm5LLm?& z_D>XfL6m^ui2UfkoM&;ukf^(XiJ}KNh+eQ(N0jZGu)X;M2Nmc@(~F zqfz4E!gZuI7bJKREr>=%DhI%0vKT;kHKocK3;BWQ<3bIDX6nTTREUOb)FHXsR%&b| z1Y1^WXOQl1Th((c6J&qS{A|y~gy`Np_8)os(hngpo>;Id?tf3QgRjgU@MPIMJ;|gq#m~7!sH=`2O@TyZV6uKJS$G>nG3G3pAltyCcJ)@K!hEY=|41K<(bka z@tB{+TmNRZj@lV|^l2&ErD6L(Z6JIhmlZ0L ztUdJ}Da%2aHO?0*4jg`0bIZG zZ3HMftQ(*M&%dDfZ3r3d2T}VU#r|=fzZvteo$c>&dg~X!^5Azq_B6K<>-2U5_0~Q~Gm65rd7hA)`3BTw*#0$dXW>3QbsetU zD0^nK7cF<$=GMyyS2*sEiFMMeEe@$$sL^f<`+7~Eux_*wHO8fO-Q3@sFTWXkz9$~- zvR+-yXyoA`+@#Y?}pmATg08d=+1g`5PZ3z$}3*;0L+*gWiVAVI!`&u6^f|8XD3 zraB%4M`MYkKj`WEc5|0h!ikE$UrYyNZb)wGU_dQ^w^SAUJh+{yV@X;{D=~tci-CP-DyXK&F6vjt3PJPFrO343 zy1w{HVCpT0vv~nq-`ZyzoxD5t=h$vtw?(e6?z=`DLqsdc{Eiim(pT=FzUJ|#+C4RJ z)cmoaiWvjn@LnjM88Iri`%Q^1Zfjk+0#IGYj&JMTp#(o&y+>N#LAhxI8jcOy1Fq4b zp$8)@w!l@Oozf)|TF2EPORT-uRNKtL;Pp8+Y|0ZKwF;x2Ng+`gy?ZC-zJ)+E_vy8;x7qzpbYl>;dmj738)l15w) zwrsV=53sW+vg4#GBO-zuF2J@AKt8=AJP9s&6!{3Cxo8IHI1+nZ1nqJRH}|?)wGYjO(5+Qy6Adyt;{e z9ne3MRz5ENE4cphXiG6w_{%7o&#Ndmyzy52>Z|{ngg!k;g`Mwq8h8J8Zol9ru9Zh# z4@iATdBShFCj zr5PwjbsyROjC3#qBPRdWJg^t+>DBm`kFmu5V&?VePhqN+Pl;>GdlO0fm@*Gk`qnQO zcZ$O^-WO(^RppeY63hz+(_9QAgx8bK_nn)&q`dZ$hIWI1f0HXHBD*i0Cv|OmKuWr( zM0ab(@$%TrbY$iUB;(pqb;;>kNyGl_b4eZef_n)cZBLOwBcjsD#^Bpg`>tp^;g(?j zT_UDPq4jN|&TSt?vDQ0+WWdz3(0#_38I@1H;LZ0mSXQ0y@lcDN1Gk_ zXA4gC=>1=_7ykXhmRD!E+_kwGJ+4#ApU8am_s_yqJq`{ZgMoh+1QC#h&i~?}H~owb;WwEup9k)zcG`%{h_PD{o!x}!>M`dQX8CE)CLKVEUJ5$%7^0kJR(K5a z+fl5PjxZ_#?}zOPqu0Y$_KrgC$_>$%Q#_f{*xR{Wr(S3>TaMC9A?Fd{YfJBbZ7U7$ zm*=fpqYSX4Du@htuWF0!c(MJORQaf`bu^qRmIR(ptvqf)a`LSWxb?y42|(`@wiNGY zMBOJ5;(EEqC?TVmuz9}Rv2x3`sz|444&Q1t0-kUAHVnF}7H@?0zcp;w7wbjU-dTxI zQ272)vGgDPMR6-?w7@oSoXQ>V>}L=Q+%MeDe1iwBFFApCib~&hkl5i)p3}g@{wmKHle#Z=IG$a%LpqD2is`Y(P3$hJe`!*GOslb-$1bLUUX^eNT#h zq3>wj+%9nRq-2zSnSa_+=Rf{oqRmoIBtuokzp;@cBu2A#w4RT${eYD#CnKlBNJi&? z0fIQgN8I2x%RPFwFaw)C_M&j}_ii-jh8)p=>)B6*n$k+q@}70iqU-B@!39O3(}0ae z@c6U46Hqs6UYIzV)9)eXTunr&e-xck$`q;N2U`+B{RmB&!x?t9JZ&HiNGZj`@<=wqWUjK?)emXyJ`@vP_>|5Eq z*4^Lw4%M;-)rdJr=T3Wb|8x+-p6;HqZI`x@k{=H~GgR@oSSIGMWAXDv=c(I==3IJR z0e(b?b4}3_meS)d&$!txd=JF~!v5m}`v(5wqd1iA7!ERj>=#R_LQ-2 z+mDQ|g}nSCtgL%Fk&`&AGMSk(l@97H?(SCnjRG-gIDhw-;%%=-q{0kHpIC~G775rTt2?@Ne3CSUB(kjOS&d~yuf{QglC}1=i zViGXk5j7S7vFTZDg4py-?SD|be*F+FK;r@luVrpx90)7mJ~Go>M{w!*M#0z~mB3KX zeQJmhfp9vNz)-UeiLPbqQE+ih7W`gj-uuO>PFOWl)kp>6L3x%G_2G@guRSe-)i-Zo2bME|*ls-9MFrPwnQ0>^9kPP- zF8H^VLvrH%>Crtna9izmK+fwcQ{TfMB*g?v_^?;MUorf6aT1%pF!Ok;H$j_XFYuGn z6Kb;VG)lg0hLq8Erf4tlX?&^6(+O~QJpW$l)WV&&Vz8+s>61Ug_T#!7GZEegZIQ_s z*qJ^6sLCqbc85gVxW!azQtl6Bnl${h3PTwmVcR{8Q@RY<;nvk@7>rHK!x>=k7n5>K zq)3Q0ppjAD$FHN{uz5HndmVpLD=}j+aATu}g3_2*XCUsG1;J*>tQ@fYN7-r4#LFtl z6vzoam7sNSp8qoka zs0gOQXT9=%>d1a=2?HT1!G0le4%-C&WFGiM#!-ySIZoQ|0sNa^nmnlu9y~k zwP9z%^@Q9o9~@%1`O{3+`Q%rZqw%*XDSZzAvDgPn_;-C(sU|hMkMm z)XulV*8Hfw-4$=`SRQaXEmJHSdUb>Qhwlw{$IHb09=7NL4NEscM1|*f-pL)@`W3m2UYaSV z`S?OVLOu-bet@Q~AM9O`lvOnEnjPYFyAn%(MomfH^Xgu%g%e35S#B*u|FveHdT&fcY`k|eXDHzt}w00IZzyEe8cuVL*h z{*$_wV{VhBpolTPu5K542EcEzVD zU**@yNPWVU`_iw*@EF7Kg6Ut&0x~fNdyj7@k1=aTMu+daxtK&U;}8d*+OIcojvB3e zTF^)F5D7-Tq6qPl0sJ{T!$4A&<8plUz_#&|k6pC*Rfy-i$?BJ<_(K}i6O(Tm15D;L zh7RVIUq~$n6Kw9MshEMp$)30-REuo5o)Ie^Kau3J2{I zi{i7R1d!5ASLIx2#z93-0`=-XM(>Z4UBle# zVIkR7uo{$Big%AT&E%27BZX4QOc(t<4ZXlEpl-!V;XsI5w-6L|;;MN0Vx!xCTmE9P zI)GAz>#XmE2V{OI*E*s$nBPTf44@ii*)JU-v5j_C5toKV&b_#@+(IW=kIxm-Gv!hu zlasS!Qwl#6+g`SuOef7Lf4GPtTjyl9j?Kt+S*!oPf@#-xx5Im;ypC=xve$J%WCOX{ zD9`{K+CK&U2vK}VoclQlJU1~+c`CfJy8<3{> zl=v++GH0H!dtUm;#nwF2f?s#p%9f!1q`-WdL+CeoKD~)>sI-m{`Mv^mRx|?TgMM(! zXN*qk(?Ji^{0s9K4o^XJ1EU*&ECI!biP#)&onGgs@7uSiY{i760y7fGeOWhn`<5Ru42C~*^Tum}m}wwWJGeek2b^rwtzYWWAwY$I!w*;a z;MGYmj#-S{Kpu}3Bbj=qP~k+Ts*)t>N$%IMt@{t23LegMXs|=o^*JGWJi$RSSCbxs zJkFWJo@}>2H^bCQ4G!{S5Y=)G!z^Ez+-(nvoexs=E(lA4gUhk46pn>IhT*^XZ6JO< zXl}ev5Fy5Lv5nvGZX~r+xLw-E#xuE3#441P=}|WB_Jo*wfB1Pvy*NXC}WJft}Q;yECSy60lmINlwXAO z(Tr|;c0%% zM?B`@+L*S()uQVgK`{$Vi2m$#E?PCc??BU*uV3~QgujOjho{-nUWamp@aazBv7Ay0 z_!IrtN2x7H2d!A{13FkrgHn)xujrdo^;KWQ#Rp0@L|gEOqEr1v(z#(9r<8tF() zOuZgu!M6Wir3k=KKK%3@ud+ZPX@v4>w>wF+M4wS{kd13|0Ow=OkhMO2yp99*g5FI% zc77$)NPPq54obmoK_1x`)IINodbhj;>d*Hk1j5FRu+N=WDvEH-G|62`dh2LRzoEY< zTJPB6{7m9&sZF<;1K|b+l9jc8iQY>aDJ{w>qh1TI(nbc@nonBwqoZLM*WO;S)5--?Q9;vflGM**sQ)mdPH0WZe{~*b_WdAY&8)-!F_E@w zVp%!HU}f`8*+9J;lQ|(CV<@0t%_Do>ek>qbY~kNP>D{%dtAyDULwtAsKOUF5_LbVT zmdGxvP=ho;4;US6O$;k~L~W6nIuo1{EscdCFtl4yFb?GLloE*n1#7r=JUItBxtQ5) zP${kZ4>k^W(GO}c!cROId%!%W$+HLUcPjoXNyvS<(Wm?#9J|l=*i1xBY(!-FtzzJ9 zI6FH)%6ifCX)HW!XT9RNr!o<9K$MHY+tt{ECQTUlC~zAF&5_$#LMoiwt^t+&7K+lj z2m2GH^Wj!JesK3sANr1qwvUinaz1)OPxOedwnD=RpTVT%y_@^)cr|uii~mq4ZB{kz zJY2t1GUu@Y|H&wAyn;SG=L@;cO>WcU|3`;bx3( zfg3yEE!{DoViThMKfQ4w)QRTu))@eEuf}G2ENBYD`k-70|6jc!DMDWDYWruy`xzUe zH$I_E$l28Mb0HsG7`eTFGKpiRc;NxRF<5Px-uk}2A1G> zvRVfAaY)vua)l~Qod+ftrnnkadjP9~Ei!@LPP9yu9-$qpiq=C;mwCfphX^Q=X}4Cg zEGxfo(aS%0B26*34swT)UopPz;{XNys`=XIQ`02@m($)x=6(LcS9_5X&f3yK5w^EI z`>No`;3wOz{2dt!GxfRae19c220>LwY7xyfTvjYr!QWq|1;C+(zI8a66F?d3p2bsb zjhAcyT;Z=7DISbnztj^ik8-`y(b#~V`XQ2Ucu=&m@g9$EYba_tm zqi|9Tv=e##Syc370~T8rIk}9e3G&=%J&>>wlaL27yU3 zSWcm4>_n*Y;Tw$b*-CgkNizo#OtB31x5M|CSSg*-?bMb#*pV-6MS_9YWRF>$Ouh`L zo8Jr-LQP?v@wLEg%OVIyCIhOc+Uj6)NaZqOu7EROk&Du`%1mt;o7MtFdl|FTY~_;y z3d>ihz-rCTO-VlDvKs67i6!by#}cUvr>kEoigylzuxchBQB*sAiDmJo7dT(?mEN6a z{+K9@`|NuR#aredyL2^`|2;R1VWoG1&wUWHkP%;-X)YQ7kMwOvV`Trq>L*e~JBXjB zTjbf_tR|%#`;P(%9C0l9#|Q%irzhdau_+?c_XoFp(EmXHr0-Kwq6mM zew06KBqMyaD!NIJdFiC0P3I12G)(<-hbbgwMj7 zZ_Zt$51H%ZKd%qG@O30Ba9N`z^$KbY)GL+#djgnbF1#2%>>h-mXZVYfEi^hqLJ;G) zHZK*1PS>d``Epne(8t!`%hjg+B*BLoPJup(1;9CC?v(=;V=;>JsyTws{}6`l+kXL! zmBMih&nu6=$Fhv8hQ0V}_v-*X&cyUS=LBL>?7H4YZ&%Jeiw;Y2^{bJF6{nLin!2(aKA%DbOTANsCUh@&^aq^5%Z~11PvGy%zF4K$t5-&V=-=nYf7>tDH#;z@R=~%d z_siBST?U#DAhq8ey2qFpAgBH0(#TOR6WMp2o*qH&HGJ2 zi)Q%mC9w*PkY{t&*l$gIeX8Xa0<=5_GTyLu0z?(Y;E%DM0|XTuSZ<4cSe@Q{tH=@! zIGi#XMPH4`)1Qi&HhO!;=wcx(A}q^&(eY&v-TP_%@%IJ3AH|<+c9z9hLTBm1M?Ox5 z*F$h=|3X(fQSt}EphTbV`X%8en18BEjqbX`3+-Y(BUK3fVKN?nidvl(89}z(#OWyE zGeR!W3W^zq;*ed~WB#5WSs0*YKipiAMafEZI~7~mK^DJ^{_IRG{%N6JRWZq1}C>E zs~(5LzVp4jxK9RLO);IvOexX95^Yb7aL6+zz^fe(5toOGy&dmdH1@ocUp$K*4WVoW zizyTXv*s4=U8YFhy}yzR<3p7&t(H13=m1?mq|^g zy7<%OgA8X`kNM)%0mZxG`K6V#hD@{7Jk4D^OpKjCLx3}oVY6dr7h!&RBd=d$-ZZ%` zsl~}SSPv#QQ!-GG751E%!9O`#d7?p|pQQONafi+SSr&$clHKQskGW zwz0Y7ffEkr$*V4#hi9-L4V_68%{swR8oFtS!{h8Ir#61!Z+kkjNiGvy@4|gy32IQ6%*_985~X@`@q<*<#naDfFmRIn-Rt&DmB@)hp*y*J8z!Z zxmS+kyNdb-ML-DH*%jmrMGxL`1&IM$m0~Z4Vs=IWt`tKdTc0Bd>!2iu1s-m8|Amr@ z{s^W&yAgdEKR)<@+jG81m5#M=W;S{|K&HCx_!i^qnM?0<9e3t^yD(BX%Vg@8>wB0z#5gxop z#K?WfkvjIlsZSw_xu>(1J+=fR*~=L46kU>OXLTEjMH+(pf~WVkuKk`(cf@A;D9h_& zvZ;4CX*ObgschJh(oRSa4{mwi zgnJFQQ@#hE^fPDazeD-Q&*zgRuegQF6Bi{>38pjp!xVD?%j6}mAZx!&GDle5q~UxL znMmx@LjJioboO$3+#h+`yM}d{b6S~9vB8;`TLSePh(g65mjQ=U9eyBC)TonX8#Z(7 ztKxx{yQViE>}hRch)a%V31L1J^B&#&RC(a}%=B7?7 zsI*BS7h4;$3_xF%kypNaq*a%=^l-t{M$H~urY<$fqsG|Kqq^ar%a6ZF^Tng|NtOnw z3%C$7tSsy9VCrR|?{{i~SJ|Y4sRV>=98wh<_wd8MQe+rAtuVU^U9tqZ7^N{`kxMw5QG6b%n5+H5 zc(qGrxf!cJC9bfWD#r`-pzpXNzS{JKCJDMYFzG@w5h`&C3_4yVRC{GXG9<=~Ui(d> zD3i$fzRI*Fxza269uVpi(cvg*6#!Hn@6Qx(4?RFUc*YZC4A~9i_5xi(cQ`lFdxO$p zpgXj{{eGZ#D67VPe-IH2)H!(bJE$2_EF}) zn;09rYd+XWNj)8l-$+XxD+4=?jd{eqrn>b=-gfYV#bZHPl3Q4z7r9qf2~v(xxIz!8 zOQmuv6u8kRol2&t!Y0lR4T*zn3JG69em`zQTau2nEv;?GCE3^q4Wm5|H{M~S1Bzh( zHw3x5L-^ki1d1O##VtZk#>K_|{|-X<|2GJM+~NK|!xAv36WxC|3T4Px!S4tkk-?wi zLH1zoI7mc*H~~Zw@M$~<0DmGwX9i;u(x8BIet`nOIT9$$;4F4LNa5cgf3W>8$RNWH z8i@qp<>TZ2zhbi*D#lU^#I!@QS$Kb+KY0B>{B7}1M%Rf&^-p->#Xj;AIbXI4IG?+B z7)1r-AHSqbgic0Xq2}N`myH-`eo<-Q$}sklgacwo519)=-V|wbPBRN@6hh-^KXgXG zi0|}%Z;Olr1{~8%jah&0zCHjKdm&bm&cz?JB8kdzJ)PbK&jL1HA(rc&5}X6g*JsLz zjDN7Ye1d6vN#33zK7qhGO8>^&BhZS&osd!jaaee+=alSzO<^QSeQlWugv0qkbg` z<$*FvTbHhkgDeVGl&{LfBP{g`;(9G1%Wu)It=-#2kk^CWI1ZZ@3QXc5nRnoOID3>K zgB#tOi;&L|3-fxU0KQ*bUzYe=*HMfNbf%E*sI!h@m#-O&>SC1FX=FVSUR!3L^)k-r zAJ0`U3?G_c{B8l3Tc?iG5Oaw=s*eFY1&dl|e|S`2Z|_zX)-vDkMvMa9kAXm}_tU!P z^GpGPy{NZG6z5S9hC($3Im*RNJf60XVLB&azUaBk2L6wkK;y>S>o1|I-F|**nE|p- zz2T@sCQ=~u$`hRklC_;PC#(DhDzRmZ^XhxeEY%+0Zh~*@aM!udyL@WuTV%D72x`AR zq@1^HT3g}ieDKXh4V?JUBZtzEF^on*QnvP^VE-T#TBhq>_C#<%faQ>4J*c39PvS0puTd|fGe zKt+Ie-?9K&uqG%TIGcS~bG4jKQ({1Y`SX2A4JdnG=y-pEY|;hKiUs~avsQ9Z3p_{Q zZhmYGok)0Z2_ea-{PRNMyffoOt+6!EAq123VHSrQP1ufB#D~$yQzICR5X~%m$+by| z!6s-Bv_kFAhIR*Q-$#oqN|7@Yv%P6UG@153#|zcNR&N42jj z1Q2v4OgMEe!lT1!cDJdPK=If0>|++&C!biI!7t5A+BIb1E-y9+)i(}u%=ZpHOyaxK z|8k%taWeWSw2E-Eq!*FLXY|FouFv}06nQqSOzMxPSPx8A^5xhU{Vcj%G)X(0(_uqF z|6+H;`!7>1MH0^?4n+c3GxDi7W$H!gnm|iMwy@Z)>xHb8p8rYRoX(g%_m{%+?bne( zQ~n`?yS?(Dm=ePrvZ2ojTBbBr#p}+Kd$-&qA<~kJrCdS}`tv>?|LEcBhI|_a z5RP&565I_UzBM`Aj){1j?OwX1xe~QbY912SRyyp|>&6a!swrO6Gc)zSCQLls(WQ7x zM>N`sQWx{A*$uG-q!!{Xs0q&>ch?N19WW2oC~jQ{d5ISq0Lv=7&>0t@Z~zTA0u8y2 zO4{l{E{9pwaoPB50a|1Wl^WA)TxL(z`68OCirDW=ydB?V%3#)4ar?~yr-L8*(QQjv zg(UwPLZOSsLVQ{8B2!K> zEffb2C%FgOIG6wQ{XPH5dCDHuoGAH-8LQ6mf@?Dd z$xM(`y;8x3ei!bjlQr6+kgPA=G}2D*h^@&|av)!9`D51CqY&*UCPAJTEr{fY{|P^F zJ|unE&UbhG|M?l8{r~W@2trLu%APN31!NA>YX<^q@(}8aYG`ezWNX${1-^u;vtUq& zMwkwfb}fTH5nj5!5RT;8eUj-?DRec8{6(e_VjtuiI*L_G1TH>l9kcMSP|Rz%;u&zT zVSnq7_yYMEh-6lC3zX(F;qnY{g^G{rcQJAX!*Fze7h}D z1nAWc&2%4@WKZ^7pA9SvG_6L~)}pWkXq{P+78DY4x`l7c^TRXVGx+V$mTc+oA%}!DOmJXTORF6BrH=dE-BTtn# zG_@jEGfPdHb+K*L!h-;dl6oM~~{nrZ7AWTzxa=M681N16w$`sJgfK~b(5{?P>muAg_j zCjP2b9-1;hC5-3fBTu&y#;6V{Cj;Tn{B6%mXkPBtj?a)d5iaHp(tl>JY=?5zR@wQF zh@WzPX)tau#cmOHdUhpi`(}Z+u&*wr*un zwczZax}j8|FdMRwHD>+u&#?k%?4Go%Q}~?F&(WdZLNprk+1d7?=z++2ba;y_rl<-c zM3oXKE|4EdBG@g8px-9yGibz>ty!uLLQ`Ulm_*#^4r?E)?-KM{jM~%-;RY&>38G%O zJqfs$W8BTWH}PYt8>MqUo=)lVxpo;r?^vAbAeJu%aYENYZ_v z+~t62hL!e0`^#g}DsfUmgU9wydHO*QssBL&)h?!d>{bbU*)WT5h=~l}sNaOS9-Y|q ziZW~*2ZG%zyIEC#X#+H|WwwP3Y5UhGj-(LM=1}=JjCV(Sg}mHR`7MPKnzt+#D~vMI5RXZ1vVHBqHXu z&Rvv@N!L3Ld@%Xx9q}DhIk2Y{JZ<(EER=x(47%x^6qM zts74;v2EM7ZCiJeOl;fE#I|isY-eIkILW);_rLd7y{hi2bNhDnJ-55h-s|jr_FAx3 zxS#c?HzEjNic{KK3p0^!Q=zmQiILK)!uZfh9CanT9DyZH1I5FrDA3D;7vBdgzhkkg zwAMj8O5C+qahAde(~Hn?Us4eO+E`t?p@0(8^(5-bco^WN2Q+~pb?^#EAgX)$^-L&A zkV`ppJzF3Wr*&Se=|^BZ!DfsG;hpHzBfSA6d-;2Q_)tv%uTi}3_%Q0`Qmm+B8`A^M z%$BvNk_+nop$i~r+hbwKT6Am~g*yHT#zJ!@X;+aC&P?}vt|L69;O$G5lv|e%sd_h|m*ur$W1J0_B4i``&DGm>lRkFtrC z%@SbExQoQ?PA!9|lAw^*aY+A|cJ_~PuAgrmNlf#16jlHWSY%UTxg(>c3nw@X!6O-K zl*5IVmL*?iMz$3dOq-P6l(Z`k}mON~d ziX-^{^X~;uuxtPIj@U=~?}06)e(EqIw-@wpg_9@)fdg3ci3UB%$Dz6cW6Ozcf5oP} zi{5d$i}X1`a87`y^2F@PKg(D@wp?p&LM7}BUG_xmPqtid*UoneVD|oA9N(3QHJh^U zsf~p7PaS!&Fs-+_y;EKUO_`IP)qF7w{A??eV4Q9%9Xg(+IZ3wqy)Y}%=f^2wP#>wD z{_SG~1qavs5cGe0h_0}a*@Gg#G{K@P{x;2Ce=ecPR!=t{rGY=G6GnReO;thR(OqxJ z&Aymrr&HQPu^$mP^fqrr(KP}J1=u6?^`;3%GHy=Y0^_~fM3O| zno!WY`f7Qh0`fKWAmQ`CMobg!5oq<+nJTJ;eOH6ibBX?OVX}M{_;fOrX#;_}#6PKG zq~$J7;OPEiY`IFUgYx_7ZJhbCSZ?$>npS`X8C-mujsMT$*1-5BW{&ZvS_4crqZ}g8 zz$AM~Hx?prf{4~?u9(e)Io4*fO#IiVvg{ZbC8twdR_s~V+I*|BoFpF;kXrAbnn*PH zx*p_TSyCpP&M(wFhxD~x`kmuFtN6UqaR3-y$U8d|!QN&^1?KOgz=^@Ql&}>;?;8mg zIYNj})KMe7BP?O+$OEGY+O3*F^}eHN6&@}BKpHEG)DY+NT@9u(^O~%EbVEBdTM~Mm z;o=my>Id~E?ZB^Ijo`vg=(m*rOu}kGpWm}}yPOnts}glmp9bI|+i7lyic0Pnd%@>% z-=q4q_}N2w6?%ahiZM=6lq0LH*%jT`v^|2aJ=6o;4dS~WOMm6@MRGg)p=^8~x~^w* zVz#ow27d_{ap|?28#<(Sd!5X;^eJUyO-7j-pLqo$6fHQ>ZwpDuRdOl5bR?lC#X!mh zQX{u0<4r+bI*H}blmyS=P-(Fzod_Wz2ZI4tRi2_@k~4ry?WyhJ>CfMF)93!z;2&%v z&H5t~GJq4&=Kf<2b)dMjY{>nh*G0Vn!z1V ztMbITmcfwCEszr8Uc2e%UqcE)uCwg;DC2NZ0kpi6rJ*V^Nxm$hvg;&ouIRZx zRkS`P=YU0tfHMztr}W_O^_A-Q)3-o#CxuRj)j7WJoHaapriJa)C9b2^N`)Lq3QM8; z%@`o469$4h%_J8})xzmTY4hboxg}^SYn3Hf#WbSEh0K^W$Augcbd!nMlMaccnSS$J z$JI&u=A22pY%;RG;@T$f7wP+UfS;4~&3LX^zXQGFM%Ow7*fiodX3MWrzW{qK3+_i& zxov?ty)J%bj;%dxlVbP%jwpF)Cf`WAbEK-lvWvLuwN~O%r2<#d-yRC5P{N#`Lqwm1AO97fa@v-A< z`>CYX`j`y)#^hNNbu?W1XOtni@Cw|&*l8#1-bMTc+Q%%;?w`0l;SEeI3gqN=j2?{s zo}CEDq<=#mSvDUOh_qMBdK(>~PxV_D>_}bm&Y@jg2wO=Eig?-kZMu>;fiHMBzW(42 zw5^rx(hAOGC6Epm?$z*990<>HOkLCJze+`EySqAYcXS&}P0|iKF)QuoaC>NXkb6OdsgYvk%0;{Gmg9OqJia`Tu z2eoJWD*q($G*ak}xSmFPp0IAB{eUR#6MXGMcnHioKt*PCY*uVBN<*mtnemx}9~vUu zArPTawytv*;fF1yN-B4iH94LYb|* zjZwe&C#jejNHv6;H5mO-#FB_#wT9sh!Y;lQ8;3+FY8J_?Rbob!|BaK5;J9DtHesA6 zo@(fTWk~Uu-}a*(5k{A?RtcC{&U?H(9DIl7HI;ZYvQ3(Ic4Kd@)|q_F)a6tX^kE0p zxo{VmE}%8ZCRdAzYJFK2W!8OU;#X#q0WXE7EU%J19#2FU86xESn&)1*?Y|cJ&^A7NA)RhCK?^LDiZjW35})SA z?&un;TdVDe`D^oD+YonrWKH@tM;PImrv6>_G1R@Gj&}&{7$BKJ=>~@~)A(!Gu(p*T z59n<@lU$uDKO!hlpdF%kCeCAyvfYCWIdJGJ&cLcGk^+<9gR&)vGrDl*)T^F@-1=Zn z_p}S4majb_lMcCk^94wzJ?j@Y5eRHKQqvBRi@&oY*u4gw?~qk znAMayyRokX^_5k`LQ{u!zm49GBlcL=?;8m~{H7{XilILXv`Zr{@9T2MXbS}rq7@Zl zqO3*_{HS(~5@p>z22;=-x@p$<$F(I(xWLJgwL?-+*8MuB(y}T_&>NU&4`$sduBQRX zO&LnupAoVHGvge8xT_$%_4mIM>+j;b2UnJ%8kK{tAo{_`Ugk=FfZjj9iA? zfFex_ccc%8&!%dEe03kjs31y;1#Q&ui41epGMNcZ<^{ z{VvMTo#TqSF7Y_~p6g_>j(D;^)faO;P6f2zw&ol1SEzI!g_@3j;HCIsVjBeS2_3@1_ z(Ea*PM(iQF`nqo*5u;wlS_~N3l<~Xh;2Q9Zj!Ns{*%00FCB(4=`qrkdAKK!6#);J{ z4Zr6?tz=5U_%q|t-BG_`zMNkn!s7$4{pqIK*gUf5mP zcY~;p{qF5$x1d}TlLSuM{0th#KlNp=Fc|-?cL61v3i1evFhQxM|0_b{`akyRwA*z_ zUC_yU#87l;1+@|(X^AzUWiqHAyaZ`#brRlb9<`v=EOQ+KkZJFA5}s+`4Ga`%shwP? zrk9}n(E(Q?D1Y?KC*=AZ@Fj%j!eQ3vPeZx{1k!~OO3OlSlx<+{-_Je?B~096@wG&K z?HLIV65fU%6 z0B%U5#VpvbP7nEcsVD@J|G6;H+RRp<`CW^i@*)>wB(&sWk+;lcmF~TI-buu^gphDQ_vurlFZpH2~sEt zaYB~;yHU$aq8)F&5S2D!#y`5}k4G7_{`qSEbkh6&e%Z|AE_x5%Ilo{QENjFrCVGScg}s;+W3{QaW7Wyb7~0) z{J>&MUkdfU5}Li9M|Lsz9{6IPhTkM%2ztVDK?u%lZv6UZkUHLe~ zznElPogj;0&O>bgNZ8nIojRKE60+0TPgs>D#_Pk0-qGq>%M4J}$p|6$QjGLyB}(Cy zYzRQ(f(1HwBx6f_y}%c95gL6rT=57C60To#?0nR}7KoI4UGH+(5UMG59K1xS zEtK1ANTc3gGsVY#=?vU14tVM6Z&(Qi*cACTDYGKJO-TKjR%S&5^A`_PWqri&Y9Z)& zJ@ufP?8`wH8GQx5oP)FgH+E$H%H-oh3qk{FhITBU=jX1#Qr5lfG4TS*Cw4O_?WBNN zx84UMC%2Ad3;bEXn~uEsQ~HTB0yfk>m{Oz6OL_GAZye24bsOf&P>uwaQ#N3o_>2Ge z%U}Q4`>QpB!Q+)6ZU>ZN;WAt?b)(73jcZyH;a$LeA(F_YdDWvy^NLszXg*5JCbR}N zCWu$bmU*%m7t{zE5L@#aUZ1i`Fkf}!zfB4DkSn)KEQJj%i!BQo;42mimgN=H#TLdD zhu13%iTfzDi@h?==tLe`bf`RW7R9S$Zb-f6ye~PE#b9dvxl#%r+aXIKvk?cg>^t-*J`X_62i+h*!t)M*R!ES5!Lgr(B`SCH}=um zkvxuPz+D~<@J8$TqNAD+SA4rj(JL&9CdE{V2NlQNVtAkER&^ylkQ`294PnO1U@qVxkPqmt(n1@V0w@PNLp^|AbnBoa2QenDJ?*Zo4 zyVF7Hnbl!BaI^8#HC& zfpCjgSRPalSid!>NxmhG!7uP>lcmR0>DKrjm@`#+uyW4~pvlSfg!kRmZ<_`A>x?6V zpWT)-_-|zTonpclc4s_&*QE0cYc-~H1ec6W7xO*@wO|mwXf>k1m$!G17Kjh~T}vTe zz7J?!O!_ga(VB+Eno-HcUfAjCZ|=>g{1m>3{hrc4nj%H^HEj<}pipKUWU zK6;f;=j_p)d$aWb5hSN#r2lj+#@f+I6|ObLFkxWou+>v&6OV0bP6KSW*ZB2^osOHx zQcoKV*HV;clhzV)qY8;~7xk~gJOI<&AiS zIj2gWH{XEn^i{sh)^50ohLXr$JFObi96m+OrKZ;xMxj(-2PMI%;*Bc3Y7_}WT^uMz zl&{_uy!+2i-Xo+_3_1|$i5kGbp4(nVk1aht=}WOKd_}W42qDIlN%o1b+ z-@il)z&Is4fGffRckZ&~+oSKVIAH1ItO&9Hxdm)b1(N5~xr7g=SsCLfK$h?KQx2M3 z=b_N9K($#C6@n|}RELQ2J9t}&^a^KNLo79pZ1DX++b>qD^y3})rzuAnW2ssyNdrT!LLz@I{s_M8`5~HSA>7 z9GTsa@#XUOB0^7t5V50E12VY{{ZCLRTNgv+p-$+j(Ffxc=(!^-DbBN7l|V!ke}Rku z5NCtL9Y%{cyK3iIjVeRcG2+%Ej`I!&qa)L{xtQs>mD4BGs-fOeOY9#eG?$It@O4z# zB<^0}#%k5Qq2-Dj6Tf8aiX4^GpLT=;isl#PfRIEaQ0Ugw+C*PDd6gGS0WlXkkFI-x zl-5J>b|PbG4pBe13M7Mm#eqC2kYJ1~0HBVVQl&zM268NHZ5_D8f z?D#w3Tdy67g2HQ5e>Ao*dVqkM48DR_zfGnd8;*lQqRrrtdbxKEXHFIyjOH5LZWsO> zwpT7PpEY>y4~y;;2MZr7?f85cBL`SvPCh*(ZEIP??efHa?a8-!KTJ55VH26{!ZN&V z6YdQUJOS?e2ew+Drk|cLc)-r4B*zL-fLw)2?y-L{QgVAwNI@mypHJmu&m-z4?r1Zq zg#s^H*49q#Cy9VP`d{~B78}|79i-a*KNfH()OGI_qU~rQS6!A}0N_T;Ys@E?8#B~! z$3$9YsrzZ+Fco;4)Wd~;L$8T~L-ydYqmiX^|G2?|z50wY+G@cfK1crx4aK&&#jxwBy1x<1WeFQITsjMNp&jbDwDWg|`Z zZNGCm;Op&5NTkU69@Qv0jb`Kd(he6uSnpkGaSpR5No=IUYwJL=Q3)1?^aLSe2||T+ zIJZHr?1sxE$STsSuq|?4P#HY8FM(osO;Y6SwAa?j?Cd3-Kq6PH>a-7b7~EW^JrLPs zT$hLWq7Y9E1O&9oc!|1MpD{!Ah&i>}!9qT7>B-Sxd$T*IE4mU7!$ zymWY&WFo39a6}MP`;>%gC5f#qh8wq+g`QHR=e71Q_Q2YN`O}K>3 zzYGbV*GWHCsosAQe4oAiK%iYe0n(#w8;e$|d1AfG^RZhyifRmtJQ#@%z54l3Kq=%|}Jn6(kzo=y#BTT(^Qe3<1+G?_F`_)E2OdpYl=&Aaim z_2W7n!bs0Z_H{zL1AA;vQ?YyG`mn2BCJc;jn9ff^6~7c7}6;z-r|GGKoavxqKT zC_+hGreHF$&Bs@UK8z~oVB*L43OD998@4P#%(7#}5S)X!CMm>WZEwY6MRnDlC}OMr z@F=8O>kk0pdnV~{&C9)V(iegKnS>JS>%n5oCOl(d@mx-?uDI9OZ((a(a~OPQ3Y+;* zC8AE4qk1Ic*%(MQT_)>?3&6fRtjdgx2gu<9p6IbsP%PN!V!b|ffi$0_n6FsGP}sVL zEAXHF?8(OkWUrg%^_&M}9>?pC|1#y{5pqnRZ?9j&9(vOD4kd~`cOvPRVYp|w_$+(#W%1?kyuY5&EsoT@A>KuDm zz*HmZTg#Hu{`7ua^3ZC4>F5Kq2s(2?t(pp}5NN5il9ajiP&CXM%QU78m>%=|y#m zTtR81cgQkRnXn@u((p^`l-J_!01xzUbFo_?Blch);sxUz$WifKYJ`>n_Q9n`Em>9x~r*d7dp@unuJdAXgsBCoxZg?)^tVsX+6ZSRvV5gpZ@ zpAZMn_CSueLhlfCPPre_;U%gD)sJ%0?aXC2ax=Gl!|(mf)K9mp+~*Err|l`6UiVXy zcemwLuCvpcQR|!iaIB9#!BuZzDJLX5>j+Kn~#Hc?8m3F%U8m%OSn(is>zQ0I)!^sD>qGK6rkX8gZU}wj8+y zZBZ5kX;!6C#Ik85IX;!za}x;grY>+=cMMBRxk8opbojkE_PR<;XQt!El6!r{ORC+t z8eR@i#6QPksQDOl;*2P&zO(7b83FO=DV!qa6GvdRV2kEW21ZJP5GG5QNwc|M3?!q@ zFwp&|u3{EyiRfeZ7qvS-nP<54!+jiHN;l3jvK_dutVqV+o&|QwH=Mp~q>{C#7AA~Z z2H0MX8}huRpA`NfLp!cGIjAJ|&pZzW468ht41yUVaFZ&^-x+Y-Keq`(?*lWe?{&)q z!2G{*jLGxg|Al=S@{5ySBSXMN8sxQqom2ELJ3-1M?OODEoq|AQUU)q%4O*{S*$Vj{ z29ZD0mM;D(lQ+_JGDY7&?SB<4WD{AQ(cl#I=#Ekg=T2_#u(v$+iXU6gFKv}=^&3k3 zOyU{;!7@4*f`guSEkiWwSODlzB75@?Iclx^E(KBINhiP?hDI*lGs#u$GynK9to2A> zJ?$-aMEAXRCV<3lA>S-Lf|$;u*^NW>EkUF|itet^4_}91j6}NBJFiQ?%!cRiE93p% z8m@HqZ3ErC_e~5lt@OmOxxiI6IMQx=n6L$=_HkA_S%;_IwSqyqEj18ncTR^k#g;0j zQu3*CQNN)~JuQQ`$Ja9Af(UBM(yfG61HXLv+;&m77=xoLL;%X;Z`Qf2 zTR~WO2&bnl|JK2N6l@_Kt)MsD7QZW8cc&5&8|w%zwFThy_WTgRyZ8^(a*DJ7>=g`V z{?6mJ?KsorSBC9<&jDZoGCt%mBifSzXB%XSl^soWdcrIGFS#|)OiY=eNJCEnRF1Gs z4e$GFOsZkm!DZ1hs-!sb{X30 zce_CdkleMWWVAETnZ$5LwllDgQ z*I@B;2 zyZ>AvZ|YZ*wJQLdXOp2bqzL3WSX5rd02u_D0C)kNLgC-gl9)C`^9v?16tAI#!w7lHkv!8|RN1f2;Y#Low>sdc6{L$#oG%iZ&n$iy+^q| z1}SrrYMQvfYgMi{Y8Q#e!{AS;3%|jjK*271kqcb_BZ(Pry;R-lx zWQq<+o)P~J3$iT|cR9#XzvAb}AOWmH#B?y=pE5%!;Ae72RJdv`1j^&8I3#ge!jwc1 z4Ji29pAq!h2tU0OILfd{DwM}_QhfVn*bDmkNkdS~Z|4JA=W1o}ia3pbT7m*-`04s| zUwcFTgIy>Oe)C#ftux<~pAU8qiFKLQ7}XCFphmQUi7il3hiF5QLM#kn7xOKRFqGX% z;z#_sc%9L5I_l5U7;Ct9IJk=+>`o+GRyWN3eYEfh@m}UKYs&y=TI2d{g)>dlU5 zyz?pTgX_fTbxs}mZrIXk>S}IawB&JD{mPmUAQIcDTkx-o4S+j|37LM?oI?0}UjS=L zC>1q=Xp>TWsMQMt9bkMyg+<~&aoUxga{&M95upI_4L89>ro;qJO*Ed2TjPyJBb%{!9CEcMaH?Y$bICaUX9M3TM{czBMr2=n{{$DDLJ ztiT{ z=$%Y$Yk<1WRMajJFeYKCZcMB=ORX19a8X9=8>;3uK>jM z8fQQA1lC8_tM<)Rjkc>|utcNQk;UAA>5LvHKSS@~FeaiDvC^d9m7YB)?n^KV6nuJL zVz9zdNtLNa7}^7qVZ=X=%^y^vdFX?N2;Dz0WD$oCF^3CG=u^;wz*&famc$s>zTgQA zL6}<8;NX<#lL0J6?JmcVh1jM!o5pbee77$})LdMBIV_zDmYo9;5}#C3`*IE^-}=h0 zF^MU4?o20d711&yNj>hiG>Jc`rF{ONa9AJ3Akr_`FO284=4MgH)|L&cIy%qK_$f13 zI<2zE)?5lq`%M=IWo!4&C1Ja8S{2u5^KsNvoizGmgHEG}zi{DWimsGI^-arbnGRtJ z%6!k~)ke-R8?3}ETa^KB&M@HPY3JkMTL1eG?|DN5p^-LCCL|3Rsq}U6IN98=9CLCv`yPyl>)%sJ*s$J->Pb~dC8xn z>QqYT?yDHnp7Wa(Q!Xqe!!^0L91dkF^u&}yiJur|4=&f^2~hHcczkVe-mSK4#^u-_ z{M@0c(1%i;GxUt+1m{3N>~w^=Sdff8rQ;nW^PD-sz#DCQ)6mCD<4#6UOq5-rChLf% zL7@_z>H z=5qcdEW1Z-{UTPK+~=Gt>th8_}xC*wCRxWcpmy;S2yMpOkD7IiTx72) zM7&~|o4tDD_YMuei9$?*-*xG2Z-d}DbtzCTuql9kbPi2D-)fuIUK;Njn`xt{q45Ps zXGvknD&$NNU6=HWAfoKXyfO{~(oH8?lf&F-mqQyy0lEphuTw_2V|V{G1qr!d@_YZ} zUFrZDT;hQrzy7miLME4N%hXE%eq528+rV(&gQmAewV=O%@P8!5V8I;_t zVy3y#E<1BsQ$W>^VIMTTPUm8$a~20+6|-ebue~{jrYd6)#7y&{3jf&z#q(@OBWBFF zYAxHV^88}7fcXPa5hFJL!0DSfBjc;HMCXgu`zcQ~j8qvPRY! z6*Xc#saQgoX1w}fL$19>8Mo-i8e*l%Xma=Y#pEnde~ne};U$^IR9cXkz&$d6q)utn z;48)oct62~Vb58_JLb)0pa-*CFk`>AR@*s5f7dUC-87HvYo08wpU77KXsIBoDK%jG zYPl?pmaAH77CxUavQW)})$smZ&)mC1H#U^SO*&TTJI8pGsB%lnFK1QFr|C2J_73*U zcDJ=^*=cAf@>vG@jh>0T-#?!!fs?Po$>t|S&VKC!slJ0%DCkghjP6fZ`foxsQaJ2~ zPP;C!M%fW5iVy;ixpx3vhamc@0D3z5`puD0ER9?-G!1aE%AprkBFIR%$(5NnOlB%! zS7j|mwND`St}+4C_G8N6=$}*ZS1HV{3V#++q2J%1*=}mZsS$m0O9jh*0z+f=^E-tT z{unoA($-A{lRU}%((#*Kitjc|dv|@v_wtirl^vWYk`yS0Tykq-<9pA1;4d{GP}A|R zs-=oQvdX?|eBM?ubeLz8`5sb_S0=GZg%mS98P#fdS`-_+_DsTBCw22mHmZQmHKGHD z0F7RphfD7wBkl&|_aejY2aZC*SY`GtNLzSQ(+Y7+!OA#6i78a{F?m639woyg`Z5jB zSSap}^!caNe2=MvXK2F53iUbA`wD;`{c-X2|6H5_P|5aMGT1lvPgJ=@MxKY6&1;4FSh?{Io&_T)0)`V`DKzE}LeDoG1K8b%WHbBI z%|i$&N(5sJ*-Iy$;^{cq3ov70&;sR9BOJvw! z%%qHTn<2wUOrtC5XR7x42kV;qzGCcSW1d&L(e7m@Nmn4t(EuiV@^9H7@Z%B!*G!lSF|oP$%|98k3-y8e`2%Y*E=c4E3|Ss1x;k5O;jZYLmw|# z&!;BI$RM*wRq#m-EteZxs{%i7PKPtfgSJsm{Cv%R*vslUB|%0}&N!_nq8)M^l4pdC zoNs#muJAWIv{n6B5oN9T2>-BOB(WsOZI43d0B#lu(6dyun<4k;tt+(Uo6ElYe>175 zUB&)I!5JnnPJ*V`ba}XZByMf3;#!FyKlFooGS=Aq#aW9%ZyEt8iu`eIYUPk5$0}Dj zLT=Z^rng+LvW4+lkaP6)Oyy+yTuG;Ia}=*>Kc;oR=^LA{YX>cDY5T5KLhltOS^Kf= zJ#b~5p`G@afoa&1;ky$^-h6nA*|VTqmK(|^_&61xuFco1^ci=$yZ_VghHke$pk`w( z&y{E#%Z1?H3gW4e4wE0&@Rws)3X>9=MuS)V+?m`a$MlHAQ2ysU~T;57Eqg&0`F7;27 z_bsPEwTJ`&ZX?Bh#8*Oo@XGXu(0sHg9)6S5TTJ@=bjDk>ACYY>IfDRz`kV!#7BJuA zhXtuP2dX%dF6;|ZtfT`M_Uz)NQNs?dq^*mrM3#Jtx=3;dC1Bx*`c~7AFJYz-WxT?Vgq5`w*y638E$88ib*8jvBQ(FxeN*+sDX$ah-I^ezu57SvCs^{vXWCxW^?A1A1n1XXSj!$Ynb#u)s9vUS+7L zJ5+&~upnD(5hexX=>Q6p5Y+tFAee4o!MtoR?d^(rS;^g>+#>rv5h2%k380|G4*&(` zJgMI9@NchIM1e6t2E?N6=C{lmEm$Td1a#!rrzQljkJyke>z(()a@NG$NO_7uM|U{` zmRFV2-2-1*`$Qpkro@hLi-B@kz9lM%L{SCL%zFl%U}-eVDl)pzc^FH>YQ7nqRoMecIjyk<@Y{?7%-Z|RC#D{p?s-gPX&mOo} zQmzjs-=FLW#)e%_i}%o;Y|}@E=S986Mk}14-_O-T3+bps)VfL!UW&4TwMlHJnH(dT zzYZ2hMRgdNiVYWe0S_Fh*C+XJkAKy~XRfP{9)K-soS!t&P3S zRG!m`C~pN;w%`A(Z>OH|yH=)cSo01-IM=2Cpsb=&m~>m>&chr!PvVxIEz$jsHLh=@ z5GXhxPmZ6mORCS^ixB0?s-tBUwQ6_?Rwq|m~%ja!^TDAC2(OriSM9Kv^XA7jl2?nEF%jb~)#bv+URaEm#o#J(j zg1r`~g9A^XC%T<)5 zq0z6MY^$V-#RiYp%vZ&j+L4_Ak+6Q z*3@7SjutIRa>ykZ+HFEJ=4S*Q$}T6l7>HZW{6$oN2?A}oFT||~gyi-Ttbn4%6%dUr zDbq1%b?DHKq;2j8QhV#>AX76#1Kh}!*OBjmZREFYOTCkRvO7MIpm}<|F>uzI*khFC zSpuKZXWM^qiW21`mq@)n+)eL9Y0DRdo9EmZjaXdJSe%}Ut1ekhU40IGxWn-`0}DE~NwO^Q2&)$=$`E_8wv z##OIl3+ZQ&1W34u?JnysX<1I<8R`b0R8trtP66V-Q(}?P@AIf1oa#ki+y&H1&5<}u zkk+u+FxabT{_!c2V3B;d*&s74$Q``#2o5BR@LsLc#)w<4%ZDM*1ny?s` zvU~*~#@`_(z$Yau{n3iA8&HVb~xFo!Eo(8YAgR zapECDQ}rNFIl)i1kxuBYZ34jlJLA^tjQ$6X967SuHD&stQ5@riCbB8otoGeZ%z&1T z5u2^w6T!qs-d6TO+FH@~`<64FYZMmO`3%lm!X6R=sswANdyZ3?K!eo4&zoHv zVtV$_J4(ASUL9_#j^9bu#81kt0K{&Z4&b%z8n9tPJMkq7C}FTDR8IKCn%KJ>>jlJIjC?88IO>?5@rLV^ffjj5S^=N?*GO+Lc;ZgLYFOxT7*2mZX_I=W6&OC>s8~HkD zeaSK#1DC6DfO66*>3002eJ$AqfTS#XKSkn$1c7%f>SRMvl<4ZSl{mt6KnP6ojl&bImMlNNqDgSj*3ywHz}=S z(;BR9e%DP;6IP^=&PlmOkdbHK%k;}O_Zar8kca=8D#u(}3AzupzZ&?6xx@nk__css-mzv@sb zs#(qyN4XSd_HU$5RnmQa`OZKE;j4|tzwA-tVT1sCBv>=t+MCwkyqAT zln(B445r%m`q=IV4SU;?!dOS%P67)~&-nF=o z;Cqp|tJOAp2bT^x)eMRyAINYD5B?y1EPuX>7>|96At20Ll_Gj z=1YlKTg?$!O>bW@$^?TWt}iFl!4U-F3nUdZ1&EC#!nAJWHn z#gbP2*{(?;Kpe<=`8$WQNljS~9wIy*CP&Y&G#&sxKsOFPSl=D|;6zo_p*H^e3H5 z5pSWIXrr(56OjCvF?ah9MooVD6Nh$Yu?7>55GWFzF+e^1_oK1~2D~Xi9h5FC_Pi}G zuJ6$=C2%XuTLPZbviPIU@dIZ46VEwqHwvrCFTV|8;D*QtzUv#!&LV`2Ul&YJf_FpS zhCtUj-Sy~&!dNM8_B}j(f-Mwmr75p6VWf>uNMQbl3s4x0{~sxsrM_O)|fR);t zd+^1yxzjuP6{LwH~`6H|Q5wE;LSje;L>^5|Pc>^H-yAJR-aH z7REh`ep>Np0mTVP*6=aVg%=O;|GDs2lP2$ldc6%C=f>R>(qqV}Z>HU7q%6;DeU<&9 z^n`+}s_`Sqw$ZLx6m1-4s z(-yvZW>6f@Mwnp_QNa76;^+H{;0JHpC*$ZK&`(+BP4ekzUQuc4wW|6TG~kcdu!F&T zmgYXx6Q8}l@}FBl;((Vl*Ry=AFJuoAC<_HbHmYAcrN{Uk^>6QyU3Ht=r`I{WUC$2O z{NCI6aOT%iDgCo&T96s$fsfzt9{0e#V~K(A8*UzUmTwsjHls(9rW}l0H(-~WMS?ZC zIbpAEvV+^l_F=&Y(Uxyu_O83zc5eZ%Q1`vN6s9aquBbT__(`E^*R;hU&k*YZle-vw zs1|C;OhMF)<|O+tuE?c&GBYsH5KQ07%J*YMJMl$-7AG#k7aAxb0N1@uPp8Cjnc^?n8 z{3u+ZEBgq>Dm0Ym-+}RPU_E;&C!@q}jl)ri3G)sujR{dfl^5N52@}MLS3&DoiK7vnZH$^wR_{#hQ7~>^bk}dUQO|qO1q3t^caQ4Fzh9ECKV`RsA*`!BI>#6c33q&l z@SMDGrOZLzF~u3T^G$WM2WQh=4&D9%QXZH$$JJiq5GvELy^L)Ad_T$id{66*Z`}z0 z6QNf`l&|s*@B@xaj!xg)t}2_Dzuys>tg0YSo*(fVFt(N59c{O##yoD1O|-n-sc2FI zs~!dDSDGyn_(gbdaL&5IN_8kvU(QJaGgX|JU7y{g<_hsx`@Ts0nk+q(MD58`aS>nw zxQOEv+CF*!5*5t1RK&@kjTB1gOr!fUqChcP)JsV3KHwKgDHVT4-3Vupy6GdjoJlt1 zrntqB6!*_pdo+CwRYn`5CEKD4(af*wVUD=-v@pYjzn@O~X**;H`SN}vpPac!M+;)w z%yuj4K$CI$7~Ym1W5sqsWLv)c#HsQb^J_v_?ixkeKG)&bI*#x*_^UqwdQDdrdpy6f zR-EeJG61V@`tj@VWAnbWVw{@yH4o_coSoj|+SEtr&}r<(kMfkeRb<^%IXP*k=!BEz zQ=dY8`+&tVkf^(13Cgg?;D$zb9GH~C+%qTVB$J@g`E?(eHZT6O-<$LS?`nHe$QN2= zg`UwjByL0vAkgs<(6M|DZEF0mvN_Y-S5n!@?E&Ueo-1NovatPL@Y|rA>P;SB0J3xTI5*vELbf zRQVCZYmURSWOLhgomKhll^!$wE&r3q|N$XY{7DnChX+Cr7aLxE}(8 zj!48%#JW9>`z~gh%zZOnG5xpH_z+@_`f0om7u~5qgbg27um%m8JU(y zEYkR61Nb9ute|wcpUjXb#(Yr5{~w*@pXvKMbX`&!v^Fs->7%S*PULQ?V1C1Kgp5Ow z9yo}%NU9@Tc$J?WqxBX%Z3ilb1ZbU}b)9N*;Y1E#Y5B=@4;PzMk;8+3i!1b@!xtjZT2neB@FIpdW>F(Z*iy5RwR5sX`&pU}YEqUuP%1K=H0|i` z*iXAu@25Nwp9b!X3t_^}D+{roS0b*dDWdS28R{|V?PyN$W2E#C&rapUz8YSD+F20uJyJn<; z$HtdF8Uy3qud7^NsQ1g}9jUa_c3toBrlwDn-M77ros&53Cyo z>2~D$wk6+Ic0eQK-R{qe={!^XXu2Y;0aqPD$5xB}cxGc(lQKx3&%VQ8O;1)A-M=eH z6{Zt1xE=!}Bpb!!fG+=kFZzO9g!wXQ#xAh;F1b!VFZ=)KH~{Hm$f#S#V_`pBtF^Km z$-dUYMe6Fwplmi+HD@$CZ-X%(y&@?K%PE!X80Cqv>sct1s=njbSUPGrb zUH*_E;sk8zq~s`>SR5mrn|T0_+4khT#1ky7RJW_-Fu&Kj0XKn`v2(6myAlTKUWtg= zfw92Tos%u9fW~O7h%LEzdz08qGMQ^>`C%LB(<^@WEOE802e`g)odd}UpF*CRP8E69 zC=c|7K_H3*0L^O)Zf(lqR|hIg7I#8#hm>=q$=A2`i+*drDA#9vG=YO?Q`J1GSS$-A z3YT*Mi2Xckr0nmCw-Oj6wFUP*QLato%&d2Lm(Jw~NI1`dh(%UTmum`($T~1G_|5bm z)OM5cZm=Tm@v*}OPdfptgq`9w9rUXgus#S)*ChVsCvwUz;!=b zA4U}bxCPZU0Fy@GaE-#(q}9H@?eBJt%5^Ug;I6-eHfGNS*m!T{+j##uG95YCheTmr z{veuAIQb4f-D%&O`4COAuvq?0*Bp`Yw#1vOe)kjC8P#Rw-Hx@6Ep1F2W}R1jvRZmk zI6RLwJ0^($tzd|4Ad`rnN;E8D*dGcnz@-V`(vlByNkHasBm{c>G)bL!>HO6S<>=W8 zB_xRdM&Q>g^lAX1>QykR^etdcz_#;$sxTEKDz`0FfB}m5@4aMzA4++JXU2e-P-;=Q ze^LM;Vr4}nSe(|v-RuN8gXeh3e&+OWspESdXKHFam5Nd{prJut(GO_45+GQ6iVwYh} zA7cd1br(Tp9M_u;C&Hu=4}fes1~D@Z6qO51X-Y@%V3Cpsy)t4oD#}--cW*FRdWb@l z6YYD()jC9oo(uGLm9sj0NTttl1#d;r>)}XGkK8e?`aO&C#_`e91U^+0U3hQ#W!TFh z^xLE>)z7$g8;)jPh$oi0l{6aP!T8R^hJKS?GH=q6YZ~9Yw}RR^5@7Q9t?b;gcvsxw zyP4}s{o)W=ZnQ)Rs0Pn?kj^u^Ok;9`X_3nhviprH2*1yC8G(I{E=#KI$HJVh*oI{9 z4EM{EtGEq@*O{8$!RAB2BfbTn-)(IQ3H(+m-JON%R}S_C7b(~z>Dqo&*2NM$Onf)N zAns8q3>Gc20W5I`0IugzkQ#=5>O@Y*uT}{s&sG^8^E~TJC_E)pYs&(vxvLbsV>@bx z#BY0$p|#`=P|98rt@hk**qd&nPOx(Kxqp(;3Lfh`&Aq^^T;e2p!$i<A;;q`#Vak9Gv(BJl!uD|zxOzQoRtZdTK zb)8w+7LFU%$~A_Rj^{Spm#GM`=h^FruGJ0|NyNhwMdIBFAD)#lulF~bFB@32~1>*GT|F6e zH`lghJ>r{y8pzzOy;8y4%S~kwP3a0@$>(!tKE^!A&RLq9~3i zSWJgc&2=rmbR1?Y* z(w)R)P79z-M9hj22|J>skhX&@Co0g$jP4Ud@LE!XqMJVsg%mBnpO-@tUL0}3~;2gc_*bVmRWlrD51;j>W zPB?QR<#6kiGk5EpbTB!$?ClUg31W2z-WIX_0(!fN>g{bvo%(fY+7hh~ zxsw@A`U9B<4&Vu`zqQ*ekHD3Avx7#i^{TzKYsWR_oX90LL&YLjb(YyPuxVZ3EieGw z=7wyzMQO1tKNR=9njqkO)x~fDP629ii4!RXEON!__AOptLe&~uGfNsjb|}tO**t4M z6gfEX97F>)A&SjslL0+^ddjTyr3h!acM*FrvmEJ2BUSK=tAu5 zh;y#xCaWPNaqwPu+cm`ok1%fE{d|1kmKd?K20XkCaOTf| z_*%SlZxJ@#8`IF9CT)yG#a(T`TZ2KCW;Y^z$yrXF7v9RPwb?DL7e%g@V&1s34)%$D z@Q*jNR}-j8-mC;$JY)veb%i?O9j!pmR}k+&(!o{|o!ftE^PJs~B6yz6jN0ZvLLc)J3dw8Ae{8QeerK z>VVu&kI&QEGU4AZz5q6#@i`HX#2Akh}k2=_qqw*odB~z zmm}%};6K50-yeJ9NqBBKytW-6UT3HH6F;+d(@^#b5k?eHN)QIDMV0J~2D`I)9)DTT zF-(zIG^k1@-xaE z2Qa-Ny}_+J7;%}{dM+7IFVxl7fg7%8$}F;s>=Lz1P0`XY`oLL>cj)SK*q58WL&`Vl zq|ETqOZ=WAlIhYr7e~i>KGEG|gI&o?JASr-7UsJ;JJH1rs%@Xp{0KLFFOygwM3}oVjY7O3ZpK!c`O1I!U!U$!3q8n`>N zsQ+g8=JImdo6gGIBp~`icyqrX#C;T)Ff9N+)%e^W21UsSKn;|E$WxxQC~ozBd40SY z*c}1u{@?cfpr6Vtq=Ao+&f(w1h^`I=zquCHx${7tvn_^_2A zzKcPhs1dZ!nZb}xK!-B)*TA*^eFd+9A` zVOlKz{vCT(!~AqwismVi5QoqqBBh4@#}P-Nq>PEw$BFZpliIcW&X~ZA^qVRnMw*IRosB z11jRet(3NYXCVO2A}#GbhJvMR;aSs}?wU`Nlz(KU7h}|Lall%%?t;bI8fjnkPQhPl zb?zBQEd>9t-Badnnudnrw!ejZrr&a~z=(%>hy@9Ab0l-GZV<7IQtz~P1Xcgi_7zo$ zy36Ty>wKQOHLzI}=E@pP32hGA)-i@TGz&6i^Fkd>hx+OQD(d;H8|G{S_@H5UQe%!^ zEM%KF0QI+HtFge>a3@mdEfj!(%m^)a>Sx=sm&i(Hw`Bw_J%A508u2*1>fe zU?KO8SFu|Fg#a=~`qSL>!;Hnd^Ot+H(S|qBE5Hoq@DP>$*!u;1u2{%V_Mv>m0m_L;owSqKLRo1RJ#loI+FY4OPGK74u zNu*+8SYLMHR0;QyG%4f!@}qdA zu=z@ske7>PzGi;5Sskaki+T4y0>^5Wlm7Grru+4nr zWl39SJvAb|K*6*Npr}c|p9Up1w3+e8W`#F(vc?hz22-PnVAivEZ3`Kz$zIdi#6 z(pLSqp893?J`Kczde2jZe#Z>2*0WsW``Jpjd5@bfpN4`b)YnlCvtxGPlDplL5<1iX zkwv!=f+FEkT3=Yb^F)gV+fc>@pmM;d`P3|1@4(=P`sA8LCmNKo*F&mCgbZZkSf~xj zD?@5_ya8B%WEP&q_x{ubZu4gaR(O)aAe^F{IE(hu-2Uj14YN9P+%BiKzc>qZXQH`f zjjd5SQ(N@QU%Fq1pntNUm+iFtH@MLQ?=}YV4AAO+U@8w}WQlzb@kcZ1>* zKUHssZy1SaSYgbv;UXQGDJ*nHbt{51_s1pvNBSysJpB+-*}sfJX@D*``FkgOJ6q+! zN_?<(ewk>B4Xn1sItgz`HHvTB=xVWFligg6GVm7cI_u>wxEUwEa2HKbv@0iE-#(OT zS%zUEdaeZS!^f7*Su5$+9-Rwsq+`e>4nB(S52i$t-`vkkxr2Y=D-P2_v5wW_6rWZd7wB6;VtohMx2XfAhZtQMpfDOkh9gzxWd|D0+8@>$GCf)P>?u~JyXXpEtifXlk`^_Bb)Y4_QhSLw+)mfPlpJs zNUBunF>%LkX6d!KOexU2=<`y zBhy%^OU=|GKv>~RuzO3ugvbe|l?#$J6~}%VkaXpqCwROliB&4A)RmF;^p}FMkp-o< zgcUzdMr3fRE&&2UXsCd_DIvd+FzqZ&Rq3Lf=u6|;jid{}c!gycmcYooj2U^o2Q_Q` z&%<5^K7OIZ2U9Y^A0)`*@~M{<)G^_(qzC?adesE=t&d1P`3$@M=Ag58Ef-u{A^os; z@f27qy4BAJ26oODOV$dtD9secn)X}Vu|%UsVcul#8D9m%7p>U ze&yw3z*sHxK|`k8W8k0mE|XKqzKKF%$`z-mW|ssf*a@u?Z3<(;+6)42ayi7EcyY$k+i)V#dv50mG zv8OQ!^@rBFiF8!Jd)p;SRi$Z#XixQZfIh7;pt&aZ0ycK0W+HQ*da&lr7Jf&lcZX;TA39en7S&E=Z5s`1FiwkI9WOpvwNqIDQ0J|+OaL5f8xi< z0ktN}q5fiv<8)yXg~A!#tcD0#RJaJC*eOBeq`F9?qps81H0Qm-e_ee5T z$q=AOPT$yHUVB}}u)=`uk_t%AI@p=>WDm-50mZZZE-IIQ)bQLmQ;R3ki!>l9!wf%; z94_+^7I?}ZQ98$n7WXXp5kOMw|Hu^}k`p<(x?GiQPhxV@36ZZ;ob{I#A!uV904~jf z*ctlvgrjEJ88Az3_|K$NPpt4Y5-9iwMMdP_iyG{BY|?o*JFTTWY|fDEviYARNZ?HU zYD&{Cuz6yGV%I5ZRvl2L`eoRJ3M7bCmx9w{f%C%lRLdYSkO;nvAz~B44?;ww?axN` zjB8DnC$<_i_7;EH$2`-5u82gz{?)yz5y}>HQ))hT^Av6fk1VHf8Vxe}S=|IheQ#z;b zkijb`2eTFedSMwk6IfDY3_#>dB+^tMiC$)4D!CWmw7-ik z*+j-&&b2JuKI7QaE#-8#0VuHXa@=0Ea}Hj_$My(Vb^1lcxjip#>9(|tc6_7In`5uQSbj2ER7UKKw?13wn|Gk#$~fj{u1j`{s3<^g}vw_aGz(kbG93+ zbYfLuzPUlpM#M){!vyjHJjRc(a ztuJP!2~*{6#%Ib#0JP7I!xUwvo+}lSmQw7h4hYQ+h_JHCkY*kK>M@*)h_okfSB14L zb|cZoYU>*Dcfz9zYq&S;m0JZv|Jkl#_*=ew$7&$I-i?snxO|j_;yD=-aSdI zE^iR0*y6FFSRyXpPJcA>M@Q=@J_P>>OTAV+p`9E}Mt^pm03Zh^CN}%etQb@Xku8rH zQAh9BincC6q}_8ErSaL5$rmF8>3f=jg0v#niK7|R$reQIBoV`@Q_ z(_1Xw0|JKt_RtL8mB0C-*VOXpJpV6Us!EHwOeqzGg%YqTK)zTl(#ojeKBRY*V{UyBQXdx&Gs*=?HQ+- ztrb5OeU!Sz;ZJvQy6}QDY&>MZ+Drn&>kJL~A98kX{D!$i{dlk-y0)l5M8NwL{0C}x z2K-530RW7}V&Wzd_6EzBZzYO7imh$B2o#ao^Cf6YRxZSp#ZH(N*B2>`%?&N($7k9= z^w=;*cDm9c6~pzl1T*_411lx?CSSnG{0|uzMR!85d*Gt_b?okn_3LTT;#B-N1sxSVIjmyg)V>z={JMy)TeN43$_coqwi z-4mK~I5V&K)<+LtxJw;1+>+#njmPW>tBGHnka$Y=R#%mJ_|iP;VM)_swkFMy&`W&gUBEECcoKI!4ytr}He#-{doYo@Ssn7AAg!5kGxG_WXh1VC59) z2@n^}K6gCtYdvOnKjlO#{tVq~-2R#MfU8V;${8%MW=|#9xUI1$X%D%fHO4p7rX2%b z{8=&})pL3?%wP7+=Bl*iI#tF&og^(6RB&>*H#Uq8T-SKwx?VWc&dT}GreOuV;_9kt+M3i|jj2T>#(|G}&p8kc~c zu>X+HlH`oj{#YZHJtOuTmtdh@aCgGV>24lyG!_e6u)o<6qU*G=`UU3K2ML(_`Yq7f zBqXeWB~TjbQ48y+MS7Ju%a9+_9V(xk4LMTt@{1l!mOCvDh#;-rD*6D0#oU^Pl z!a`~K-rjtUbFHNTt%%mL(J$zBzXG-s487Ikr#pNJLv~oeUDy!V?+oKUCLtWlkdCWf z6&-6Yt7EA13}pd#tmng%)_uU5JOyE`Q(I*tD{nWFrxDN5h;!s^bb*CTkK=Z%R4N8N z<1*nql7L{(5x-#Q#fx90N5O4Vwj*Ea9qZ@e4v=U|u~Md}T~DWaA8TdJs5^~Pv|U-( zrALW?cScH}SH+%wrbFS1(t3lrhwNHEyYfEvpR?0eR$(P5?qu3Sojic$$InjOJZSk) zjFXP&idug!%zHPmWOjq0Kz1lO?=!~_wi@xQWs5wUOVqU!YbyLaXjv#K&?JP{Djrz1 zwUZxW8r%pDN0}gX@RG!8Y~uqApfjW_iLLrKCu z#+@-jzmFSnrTZ{t4!i)bV)5cXwSq%1?^lbe_6JRiq^*B&)$dWYh?T_?JcAU9`H`0i z8{#@Jv7}mbec-8_agks!%$oPY8O(8y>x*o+2)P| zQ}H5%7N9Rs-zZF2K(R}@f>$;UZNfp=Rc7(D-fq$ql4!*{Z<_v!EQ`SK*^3vLsLUVB zUhMB4i~mxE=x&AG;3x{J33y)l{=?-RiRES|?4aU;ezRceVz)Mj{)%nE)#%$)WW(p% z?~jw;?yx27eRKqnLyzhgYB>zhak(*Mk#`JgImmM*N^=G`YgPOJ&RN>dz?@HR{2VaV zqv|0_<5I{+@8M<)K;*&>p2IEB^;}>s>zl8==WIEi9y%hdK85zw^PRre)J)RPa$i{c zc&Hbm*Nd<)ix{xb{~FYcQ}l6Ylo#PkcWK7`65CH}$jdH?cwW$`bo z%;q=S&OVNg6}kwuCd;GB^FyZ+^e(P_0gN*BzvdDwrB}@u%!-e!jdiNyF2ElDC(up!H5P2|OTkKpGuphocD3)835 z%Tte5MwosHA)`kJ(`VcV(mA+izE8nUXqaY}$k4w?vO9eo9LbX(1A9RM$P?Ih2Tq+o zdc^+B+mR(8UBG7h?J21wUHv@kUh;er4<4}}bl-OeaG|8C1&R@SZ!+go}V)ppbruEiSp2qYi&^@H)lGho*{J0;W-Dd}=|=aPW&#BA5`9V)+WWUU=<&fA2CUi_;P!#jLNLrJ!rV)Za8^ zLsafT_WT3OERp?hL%b)n1RAh5UqA?yjro7j!oO44%>RoP&c^&-v~VCI(RW&zLmyiO zl$8yb5RE_woFzGvR~rEm_tRIoIzlxf>*jP7`O zmDT^JY!Ih>7_tMRU@ib4*yRN}JktZ<)=iijE&tNUPKPxi?**?Wlvm3S*0KJX{6%mY zC}qvtu1XawUC6)i$4vsgH#pWf47IrML766dnZjj?i<75XncFJ}XjP>4O5>V$rsAZL z5fG2R3JXpgQ*{AdHyV1b=A?SaPyV|Lj@77un->XrSYe9gumn(-^_{b5IRS5dxpyc< z@t}Cbn-3w7g``5eJ^?{U5{HW|=nq~a(mkc053c@+Bxt0?O+q9rpTMw)aVi`uxsQXt zDt&bKcRcnd^?b?(k=&^0b$@i4#q{)me!x?GKxi8FhcWZL6@-6F2iB{05DjR|JH84H;B91Qj1mjhft+`qkiS!|EFUMHz&cgpB z<44r@ogCR6b=*1NGP=8HbHxA)Q5BZmRDB2-T|-EzUDB^neC-(roRYS2 z-q1Y+D=K`OJ6#h3G;!Wb^vc_uXT_TRF4!U3WE#zxUT;Z8@*Ax8hT?D6ueZ6*Ddo$G z@rW{Ab$Ld`Z?9qBR_S&`tBedBkr+@fBHsJ2rcb_)F^GJ`nm*_sc#MdhBpd21_BSy6 zZce?>fGDdaUvwiA#}~uMZNib`1=BQ~^BxY(6!!czMa*F^Cz)P)*dLY?GLhtc>0vUj zPL9HAo{6L*b8J#1iRE!0+r*Vc*M8Sl%*&&2K1+dcNBMYcgHFbh&LQjeli#5{%osj5yv5icSweeL|i;NozOjImLJ!uhVbs$s2~u zXAtAn+C0{3e5_T-BM|5RQt7rdt?X>BvlI014lcw{lXI2Ad>RG)L}Rguktn< z-k+~_i?)P=8LR=&+p{XReX?uv*&u9MFsGuii>DYjvv-E7r}|O|hlCSQ}dBuv$`19fjFPAzBNm`}7-qEC}1s;?&2S zr9!5|kF5l0Uv$B#dpq%HF=F_cz zuN7U*nsWiVSW75p+aPBGdPuLWdu1xX$KK)eHasM@pYPwS@;o9go^VR8urtJkn&q^! z*2M;MzCIjsw*HngF5#c0MJess)c~fN*P9ds)h|8r?3TOw=QGx0N%2_clPD7yAr7kL z@e&M&alL&MIy-RxK|T%7*plUTNR+^Q&TNuiJ0b(@2e!g&mfx6OkDf={j`&=8Dla^* zc3CPIMUPy%7&`YmCb|J(v{;pq%YnJwyPdvp&GXu8)8Js9%-_&joxE3%AsFzh+{8S- zrHr;uFH;0yRRT(Yr!7Kn8HZ`?p5mG6NW&sC8a#iMikdZ*q4L(3VHuEYMCE7(pWI^( zjWhsA@NIL_`;9X$b4$q8cA8D4(v~Uh-p1SNi`C@JvSz$C4~D@8KetT;^ zx_`m`i!ZV$1d)rvydx%)T(01zSzwpBTcy43d4+6tkyXUox z-&R%sQQk%z69wzO5aAaq^Ve^i$FtH>!7q>J*L}|yC$C4rjh*Zsc*1Ad881KETuXh? z?nbDV>q$MGj3x7x^;=N^_P>}49TYac`u(d|?7Jj*`HE!@o2*`FW`311PQ+fpmNS5( zrLJQwGU{LIcum{LQq6Hi#iwuy2WhC`d0cz+9l0BX4;#D_^8#{Sr&LzYAKpb{-2vpp z$^JX@pF;;!$nHb>Ta*K!lS2eVC==lAwAM@!PlItb4oGA9^#8Yh| z@L7sWhcqN5EyByU_3Yyi_6x37=l+5s(`YbPHhgM74 z19hNu)oY7;JUoap#g*PyZWm=)+*oQ^lKfb|J_uE@pA2D5?M$3qoJ6v9HJ1y(ajGyzi? zzeCg6j-R-|c;@fchd`!pKtf8E@0JJ?=IUS8Dz=fE+sL`wM}kvU6NS(R=;?VcE*3sh9`i>`LAJ8;RP%F=1$OnQ;;HWTSFj zmM~)?!Gece+4F|{*S&iqSo*S))gpd5qR^r5W>d>klp6K}fRwBM-Sf0;Z8)`6A;dkB zy{&x(fSgW`{~^t7K~CQAu0PX3=q`AD<9mK+fZZ^C#f@n+yMbHE47I)AqyMkV+kFRY z{oi}bCOE`U!I>aEBq1ESV)728%x7Z*ESHIvv(PQvj#2!wTdQhsuyosJp3ns%y3bFZ z1AKRIpftiXT&@M`2K*Wo;h$ub;`$&UNkNDpATU-G4^-bR14(%lQO)m$=a7C#srH8B zibhtnO|f-c7mk!hYw;ed{1zB0E5)YKAfUpJ=~uhadaTN4+J~gfsOs8R$HRq1eeO_+ znB)Wp*?EV(rsCSyQBKhs3R_pFEEAzYx;#_So@c9y$)(b?QW*qd!fj6-8(36MyP?7k z2#MNgVk#&Q@^4uIeDC86L4xZlHmlhjKy*Ccgg{J62dvPVu#!BWdi9NLsCED znCaI@{_>v0E~~`Uz&$u%gpz?fk~e=;Lz7u4>LF10aR`%HH$5DJgzvC{8etokl;Dnu zZS@Ti0}C$Zl~p7y)}=PHGn=52RXoIhcGO zybh$}-&C}l2RTIVf!sjNrc1`XshdZH6ODK!Lp;Cf}1$RF!^oFOi z4I!-S${HhBGDoshanT@g0!hCYXy7@AL>b^}0EzJH;~8aC?ubv$Y%hsBdv|p}V!)jv zeII%TQeY%4bo=)D6g*7^fOLboC3v5lE9N5&0CS5y4d9r~5S;=zp^BE=^qHf6X}JZ@ zc-G@t;z?_JFy&lUrk>J8vd zrtnnvD%18#Nd%rrx?Cx5?;-ZF75fYQb_|Pi;maB+$b&*=NJS$=XwKl;V4q!_%RJe0 zcfP)oGSuX>7Vxa{#*(VZCtb6?*R^-!Oi z&bZU5nCMR`Pxu?Hkh5jHBp!t@9}X}wGoFc3GwRaiB)D+tbYJpF%-biEgywF(JvTD# zNFJ$H*GQ_ijz%^@N2$gLLL(D>ka`g(R>*35W?x48lA3t7m0`rl-P=+;2Ppt5*PWNR zCerC3U{(2Wd*_+FW!9yb#1AkO>AJ$n5osQg9-#qaOT4&3QNh5KufBDuHF%7bVEg!~ z{fXFQ)WpronFa9T&@U@QJ($$WIAw&TGD#`o-f zHCDB@eKf}AXOTjEj+qf4RNn-Kh)KRaSq6HiN1?aX!vb)VYOwbgJ3Ht_rw&-`2+~CxemmoId0XU|GL8=6 zv&2!NnLCCtI^Z--08#kdlqieCngU}|g`t3E(0e((XvMzlpJRkcDAZanB5UY1cRF5t zG78dU8Cr|(R|GiH^c- zXKm9xtmOR*ldlSw(2Y@lpA9{37UdLrlJ zfxT=8X^tFe5EyQrZponB*Q8-~$TJIg!_1Op3Q4udP;44DANgdXGDFoxy zlClvBsTcbj`jQg<#?l534y?J-STF9K^*9e$R*b3vIPW{?qYoj5-D9D{Sm|%XZ$$EYUdRK7H>^>`3FYY6*QYCuj_n$3pVkZ}r+^bM+^_o{luJe5DIpKu$ zDbMUVGPM*$MRJd51o@ea$B5u*J&SswT5tDZf}bz=tBuq5;<`sfNNSZ#dRDRt71RJ9 z_96b8SY4U1Eq97+^`PY)5)VpUrViDBU}@egbL#P$u0r+n-xUQ`UBt6E>JDIHAH-tfEW~-<%E=_AYMT&rc|-W@|imzxAWb`>mDhGk8JT{Ocn9V%UxY2i^9U z%W#SQ-grZ!r&&n#eNDCry|ogmrgNzTrE11)-95s-r(6X$ATjQ6iv?l-Z*R!4y*mzI znBN?yB;jhDZIV=X;oBNwGp<`&_V8Tb5MsG??T)1)=+?-WRU$2MjNd*ZjdBEHKCcQx z4LHONzQvY=Kz#XZSyvmcn+BU zfaH}6hdyI~%XXc=G~eX0P+InO?PylKFzU>|vS=-r8l{oioaH5l)^)pJz^`?+C4WA6 z6;(WxUM^ta6D*bH-7n1^D%#&Yl zRgc>H`4@*mwLs2+o$6FIPgw@d!!mr*;^@Doo6&zl$Z=s8W%x<0WTSWxlKzAEGE&`> zfj_6Hlw3`Y{+u^#5TQ8H>T_oY|5p6@U~d;QT~!8m)kopVu|7*7RnCxC>t$N!Z;n|B z_0?F&HL_rD7?_*X@hcA!(|M|AEX)AhT2P{E!8!g@r{KZo~|K71uFjlj)#hfarjP0;bZJBFk>Yq4x!cuVf3@;OWHQqQoZ86>O$ zC+nOgqy4#(N08mutaBkHY@REb5~|uidIC5haF(uib)U{nQLVKLC(|>_%X%)CHtc+Y z-d`Cz2nJF9UF3XLgIl>0D&|LM#ZUFd@xs2MKTFTfcikyBJwUZy*sD}hoNf{PJncaG zXTkWdV5>PtC5<|2HdsDKVzrGx^h1Act^;^ZIVqk zwz1L1w#|)g+x*Vn&+}g2`~GpRIWyB;U0wC7nx5(ID&=ShOL*$W#nG=9LEhamk*HoM zs6`w7**g#43`qIPa@0tnHRlQikGYF(8-WYw&)Y2Mksh(bf2HUTrMM2SPg@1m7-s7h9 z31s}B79ajX8jL_1j5cUv1%QVg+fPx>&AhPjxbsq0d&nCwD%~sejBO_xWbWL~+-4y= z&XaLs5H?92M-#E=RT}ZA16K)YH#ozi)WinMfkZ~*d{P|<-Wdm5sSQ(o~> zUa1nzu;>MWA|!rG;r_iq5zE`s=yVkDR|yxaijx-V1(_@hP{b}NdNn8wt5}ZHMnP&( z3IxOY-X0V0wYEIk{?N#Q9yf%(jpn5KHDBW?0{a7&7u^|@j1UhLbM%WImDPV^6|i;Q zG+l}R(cXW`b3sEURoispF2{MCaOS_B=(!P$E_kwmsCIyua>X1(niQ7;i<9TM{2ToP zeh9;_`00^+i)oMGI@boCzY6GVdcL(K^eZ{yf`MF*7+tCBranxi&#xT>bu*;79eHzF#gbtkx9Ddvz zZXA~R#UB;&!aq>{7MQT!SP;HKSKh90YYD1gttF9Go zpTPIaMtTY?amnyHi~rz!^&X{qy6T<%L18(k5`U`PoV-}}8o&Fw?Q~|b&T7wHu~yqs zcz=DQpV#~rrfr!{V5Pr?YPSpU*Q4z5Qvl08a?XvJT*Ux)+E)jl8s$e|NzFCRa}=Y} zqI=8DNHPvRg;sQIj$+CT6jAvp!tt^MrDjA<;q8&&x1IgO3f4m&D%4X| z@WzOOj)E62th8}}l-Cu>b1w1?@r~q`yVu=v2aow|+~@)~zjc3y6h0D`U>>5a&e%W1 zo{n=fV#M_1 zUnq?dkF);Lj%(1oxtrH?R#5JWyKGE%&sm7A1yQQ6s5Uu;(tgzU%yGT>Z)B%uk5y0n zy>utg?;Q;@*z<4nLwlI@edZG=U;Z$X)l~eD;P-L;dTEtCQoSTy+mUQgMLA+Fxm%m5 zx^>Wbm$p-+xZS+@jr*n`B3#ik*Xk??J9D@M&?AXe+;9DS{ar+5HvE1LLM48=xDzO)nz%jr zEBAfr(HjXrJE7jDXpAPkZRb6n{yf)jkDqAiFnxU%dU~#pPu8vuhUOhffO=Nsw?tH(ko{0E? zUjAT-)u^cxvJ|W~ZnYhM9v*WueoBojCWFj#+jr-*2>&G(lm{D4VJxN}85i|*I33SWPOZ*O( zXs_5Xeyin~`|y+U&RG5;V;X60Hf>36*GiO$QYFJLhF94g|Jk@8NQTsM&qAd)7QNgK zqDD|<-&nND2g71QJlccEq%a`eO${N^k)^ps^`dpU7#(-;IiZA3zzf0&_XbbEtFL}V zF@x-+e=bJwo;}a@04za?04U`a!7-FwHD6Xj$K$hND@aBbpVFH2g#uj(gY}-BLbC&| z&LUre52YI7d<>Z#wj6#-$MhN;Gq(KM4p%c<{C_5qBV8N7|8UMfU%W$ei+y;*$t`|o z%X$LilAZzByngf@OjHZKzsyYu?JD~TIed7Hwcv6~b!N&PnD3$rn-d|knFuK#tvNKPvlqVzJ@5+*N?lKCG$Lf zIkEmVR?2TGW%=tBW;RFK|L#s}k7v<8Wz2Q8D1f{%UP2@1Xok|lBAVW}A#4(qg(+wK z-ShRsFs>h3ab^+>K7~d>iWsQIQ&_r+g~TI$GOv7-R&Dz}sX#TZVkq+w-&~eD#IBk0 z@{NmY-=931r%?o{I_#=qn}1yIAaasoPtSuRe%or;?W~m^3WpwH6lf4QK8Zu5zmLo6h)}>^`nV6fJ)$q@BTrNZA;MxMK!qlJsz2& zRu_C7-BW~Mla3}^Xcjp>YC&W7h3zk674)ltr;eMP2bK6yBJ~`DioT$eATdkkrsSjf zDX;V@!js!->H9PK-7`>{yNl~DlHIx^TlS^eOw5-`rU+E;P64W~0Pr z-9cTTouNqm<7UFe$47Pc>@?1b#Py(k+X&Z*yxA+U|P9D<7Pgxxt8HRQKDy%qn;-)MO*Df4bI z>foupQo5~mq_4?sNATKW*s49_gVv3(--wZfII-0(%9rUi)n=gA*)2JeaeX7A-22UC zydYn1b(p|ixIPaQjTXOanbr*_w_hki;;9vBT_G|gJVfUaqo|zGlF}*?bCHl-VwU38 z4#tgoUf~gW)n7MJT&%Naua_o*Hp3n+tn>h=Y-z0q}5(<}=TKRkQ z9s2JGsoGB?Va@ASlEqAtBT6<)Unm zd0FYas2ePfV2Nea2kPj3?(>4Aqx@;g7_b4*y*YDkY>U4!yc?z5G9D=4oS1l67jJAi zR8;md_D^M53+jjdB9gc3pUOd&7|5;r(Hz44w7XsDB5C1}_Q>~c8{jvRQFS{jx> zdDs6{PHvzGq?|gq(MJRRd=9Hl<7_*EDWn zFS`Kdp?6~VU*BDxIqKp0F z#3nA;66;&sm1|$UaQdSXqv@>hh@OI!FqNf(#jMfa@R5~v@su_Z_;19}~4@lsZTpC-FhSkxEnlUlYa5pPM~7A(i{H2Hi( z=1e)CbP1%BHA(O1O9YVpU36C3G;#As7=nTNpq$*ijrpPzgScM!`=*B*a2; z|9cJ{ThshU`tq??p@;ri`l&XFt=$;7<1U*5uCB9>kJqc`U5_W*+XJBN)45^a5LRV$uRnivJ5ciWYhWl%D%l-e zDw!L2U!qh+!9Lnw)@_q@xYRzYL8LGo3+MwU&OQzi7~bs&(@>hLNS%E$b@&6=v|t`l z%9i@Ue?tjd5A?%Rj5wXJa5A0!h zdlL27$Rf;`2JpPH-f7(0aIW83%vy4|_oy~cZ!yh{p1=R=$;F*AJ7JxAcsm}!Nij9U zS@UhX6dfTiHtd2Bp<^Y6e-CSXK#_T(DOmYS<7vAR-_S{;7-nlT!>q_cmh77SgQw?d zC^PBnPD_5obEt*PZNo(^SS%mP#3Mh9B{-xEAInVXIk0G-my)sD$WlK#QYthWxgfRn!5vb!-|1*5U*b08uQ%v#QqeTJvx)$b zcVxSjY{2Ahb0t2#+}1(bcx}XZf!n{hXZ^#igHGty&D3+l{|Aw)G&`pI-H#T3_6vCv`)-VcI7jd6NS)AzHY(v=f5Z>K$S4-MZEE`aQAb(}V zrhL`2<)2f0_E5XjMs*nCu0H7bPLMCW6IzVadbJ{wkIUu+aUO$GYV$g@O1IkoTui@%qc^`BWW zUS0jjf!v=s8)z)t;%9}ToV!RlK2)~e6fX+L<2hAA)nNOZ-w_wYL{nH&-3Pij27RQD68Pd&;i}G$36$#Hsu9D1V?CU&5yGoPwy-9CXLBUD(@}Bk>8FEpRZS?F_rkNE4+=AibXje{Vr&ftB6s7#RfQad%%E zON?6a?(3TqYwo$Rv{EORi^bWkD7NYfvSj|aIl`nx}5wO zHArCKcH{YNtz#LTz0xQukkyn24_DPl}AQuCwlyycMtGRDccP?=Of%(O6i9m@N> z?cZ+?h3636eW>fD{E*=hh|*exqG5sA|0(tU2}-%`_e!4S{kB+*BBegB$?=)PfAL5f z;eXdGkZ$JmdI)3KivF7!>DgW+Ijx<#DDU%$FM?-tSN1}-Y%zaS-=?qLPbG4SwKWLs z_qoYCefnb?aHUlv*{IEKT_)P%W;N}R&awb{pqjJhYLcYrrj*Wi(LEUuRnZ>FUo}@`R8PdG4 z5!1a?gM+jxdlBNI`urw_@n)71jNj*erS0Jw#CV3Fd{Pe7ZF%90sXI0_YB9@0$P$n9 zGM(RjtkUOxZW86YQM6+5q%$T4dH$}VP^`^ci(F&hw-?D?5zt&HwNjf3KQRb!h_=2M zuKK0?%1NmnS$=sV6$AN`BQz#E`*?)_eA8OP?L3Ct1ws6tYFF%2nmm5l3gMW@9 zhfO%SCvasB!+m)U15W__n~^a6$Wc7|jpE;i{>Bojo7xhBoB4~DT1klvA3?t_R)!wA zX_Jy~DO-pkI6datZGB-~IAnRZEH8=J$X!KU495Y*Ob9lN6@CG}Xu-H>pIY%;xz?m% z-CBfN@R(9s;FxAJI=u0ap@sDP~fr1YpdJBe~5$KhZ2CcjX6eml&5k9b*@fn0j6R}{F;5UmM(Hg`cVVlJ~ zP=}1nkwIq#@iDSLJWeHifEo6TH4mPB#;_|=Z_G+=LXXO`Dk>lsI(&uKP8g91b~n!c zReVy|XYdz^3)no{t;|on7M6Q@I97;r3=kDSW%oGMJ~9r&J$=L;q=OiB925}6E;~)~ zVM_$4l3jYs$H;s;!V6kf~s2F1W zjj#oA9o2$qP>>Doc#W13Fc(r<0aOAttyb7ffj$f*EWnc`f4A^cYxjQymd*3{QF&|( zhP+5zA>Y{M0MK6@egs_uASl2-(w+ej+rt&gM8lc+OyhomLHR9|Y)D4AX6`DXFu2sq zJVWE41CRKD7Co~vYAog`L>j_XPK~hH9z(^xu<%pKUK;Qo03NSTaH0hWQVsk_r1HSl zcDGo7fUSokAT|xk(Zr@3>L&JBKHM>1XWPb3q*GN znBi1am?Se=c?cXf)YTcJQwxH!VPRqJl-_y>Kt1x-R0RyGRTjd0H2~cGca<`c^cmoz z--i%Lf*R1r(gltIh2oR|s$^Cd+($Sf|oBMlZgN_D(qoas$o!6Psn!=z6kS8 zk--9yvI$cSMZmtai(1qPPoB_cm|he1qW*#8l>7of4WX>@CV_$M_u?9_Cb5JGBKtjg)01q?)Xj{(l3NSn*xe}H&&m@KETO-NOSfKhw z$jKmRf-?)kDLgYVeBaneD3j7I8lv8R5 z2F{BplE?oO@1Tz|WxJKn3^C{hizHW4DF`H!p>MDNaTgaFjta^)^? zNH?N?kgI`tU^@j7i2JQo7Z}KEJ82R2lPU;ii5M5f44Fj|q#ZFvdXKvoY5pklfB^_F z{ZLIKeqmu8F%#DbA|Px;ym6}Gb*`xyH;5M7tiq5MiOY>$?-0c2&j$FznG(D1fH5x; z=Rsx=__-lo(?Cka?Jy1Lg#a_Y&jZ0h&n-RbTKFJ1NZy;oH3*Lt#7ZkT1?w09yfyff zI_}(PCRu^YmxP3#m$_>vDDcnG8MP9$l5t)I48SMv3lQw-7TnZg5aR6?{HTOO#3*Pe zmmhTr{3Y!g0B}DEZN&nRxX}EfK{>*no=g?f?q z7WU++8L<$*%nFaocYp#M34luvLICEEsTR&($O+A7RE1H5O?42-kplxP@BqSE+9qnE zM1Uh81apG6QW?sneICCo%pFLOfEU;`lVmUer2bN(G5~M_Ni?Pa4nW1mOw)w})l-)F z=l8tpS}cCxT@`j0hk^s9OA?k7QEv{B4@iHA;qdqvpg~Rw2k6KzG$e$zBmv&$@Ra4e zNu0oL_y!?-K;tTq%mUxCulJC@fC3!p!gUL|`PC;51;bbCd+sjJp3jlbeu|k_m{8M~M-WBj>EbMil0b+8*3VjqJ zGM=2Z2^|o4#F9acV)kAC4_;obZEWDseB}{5v!*z8+#-ck>;ya6*#gHlKD5Mj z4J-;O>bf<=e%a|8L6@M*{$;&FVE{(E4Uhs*8R$T>It76+OH*EffiqyQ zY32a1ZP;HRX7S*d4W;4IR4{Jo&|qO(Ain4e3lC>4%ez8?4{n8mjMNBnK?l_Q%rQt3 zV5Zbz6R;8_BxbdClGNZ}A{IOnkN{Eg@0e&$IAnivsx-s;;g&#-6&5!rKJrF*2NHN@ zc>@4b$#DmX+|o#>j);WhMD9OIlIWm1tvj)7KsYJ?DIJ+uOuHX*=uaR*LK=b| zTdW9o!|BM7^00qX4S_Pk-DVWxpbnr7)utUlLiS6694j+K_StfxGC24SMw+3Fu&|$O zA%CX>y0Mxl?olgU7}6djK)&ivWOpkaM2`c=ZQ=S)7KbV}ksVd#k1pCVi0M1GK-q_@ zKo2@EZvAonos_ODT^A1k! zQvnKX^HqgSZ)!fHV8m_A-F|sx6&HM;+C}*s*mwUrY=?RKZ9}6UHJsMZ(0mC^?fH!a z+a;DZA&w3W=ti?dBJ%#*SMYn~&){mwL-OCfA9wG>0dKoP7GW|^dtI-Xy!z&Gp}ZM( z`~b=7=5@MS-=Z^p76++Wa5YHvzDFjCZ`&1{bd#4+U(PO)+I=a|Y97fWxTHxI4X>Y} z;XGD%Q9P4)k+W?0`Z@he7OG>Op9{yV-SxYt%L)b}fg_AZif|&S2co9V1e#`#vMt+0 zU7qH(v+g16Qc?-AgxmEZ7EK}-)|XMhjSiQk4)kiKiL>AAXNEOxnjX5mI%|VTULkf| z^@-A1o^pH_1~Q9s=bjC_w@AEy79ZCF1VpO34za(WmhFF^okiL`gw}s`dACC3y7O3i zg!zCb016lg1)Mp2c1Qb@`CgB=UoTJrf*crD5W6Y{Da|8v2dAwOo3g{TO4w^+5cy5d zOuzrBMCo{OqPq-t>OtCG=?>|-Ct~n)&LKF#+o6vs`z;?%Q?Hw}zT5pM#6LfRVwU(6 zJ^K^ghA@+?HpXN3%46w-kUgt_#`507oSGNB8aV1{DvqQ#wtW1c$(YWAd{WbaZ%a+f zhvtsgddV%dwQa3Y#~JM*m3FMV-&Uh5R-LVbGH;rL{|%|wgVAll_U7ieeLzY^{|DnJ zW|D#R9>-)p`L%;OBu0m3Dac^PeD(%zYd4rHa0)1X8>ePzHq@ zAE2u(fXkmnXZrQtGcxR`)sW1i_Gd%mRLmDFkDXN_-Hr!IBz~l{bMDEn6OsfnWN+VQ zzgQM9q$r8qZT{e8`?T<9i#f5FUkF&4J$2^!dU<44iFD=be)^E_UE&IH@r!OVtFaH6 zQ>81FA!xNjbCa`AZ?6-{^JQH#2<8{@>D>mh8an zofzi>zlamc!p9Pp7v4eQ>NvEEucL%Nr@JotpLOF6`2?~pyrul;UW7{)6+bz^6ny>0 zS~U@z&etSJeG5{5`MJr-OySU0BH@hFQuAl4DAO^O?>gbbH$@TfS)=81MG-^HjuLoy zX?wl%Pk-lSf)}kLDmUwJ7$H-!!mh2VG;q;qRaHpLjw)nb&W5*bFqRNF+BR$r(8}?i*lP+8fEtNf z<0sB2*F}d}M$W+ZSuHe>B|u?bYh4h;5x=GA8^1M|!cDId7bx7nz8hQMDK`ZAe#qUo zUl^od_L+9YXiP=Bb5v?uI?7Dt--Ij@0U_7zE)@K;E95TirQZuiFF!xtb3S}W zW3TVM1refVM>d1;#~#(l426*M_W>WE$8 zeZV3%xYA^-mY>q{Sm@{e=Fttae)T(SRpgtusyV-K3@a=I>B*(fdkc<nm-tR?fASb;kHzW>W}U8 zuP$>r@NDs0{Xq;)JrODgLcP=XS zhCAkr0S*OjPP1M)5BVnj2MytF@R!$@_Z|0$lPK?=h>f*nRI9 zf1y3_=Y@w_lMFNCW+$(+;ism43n2X_D8d?oy0Cc8*f$0#=p&MWF`wwkqTQ+Jo$kbP z9Nb-~n=d4kGGr%Z3Y6LtG*sA%&gkw)AQ9-7LlK#9W`aA>|Lgi$c7dSy`n@sXe-%@u4E^WGxg)Na3!;8=Qh{-CCcAaSEi7Zct_a+XaLnZg``rMp z^-+vFAHkh^8^&*`c{#zI(1Jn$M-Y=4_@m3ONs6a? z+`b3BnI664m&tucyZpQ#D!Z9YH}!}4(~I7a->q^9$Tm0Y6{=*~5*IhC^z0&?P;DZQ~KeKmqOing+bBFF?CeJMWSz?CMKV1d-X1q#EzkUSoCz4+j)7XjSuR@wFEvhG4=kSuREqJ@Z|YULN3K^rSj5$PHcXtu_gcZ-rtZ* zA$!CT!6kbnS{2`Cz3%T?!BED%&8)q?k6Y?F*V3hPXwYsePFREF9H&iN&Fc=+s5V!5 zM_D|+pBRk71mBdmF59XLSV~dm!@9h|T~_B-u^oG7QT3~X#*)EiCHKarr+q;qK^xNt zDE75`T_e)A-ln~4XV<00W!+I*ShY@bQRG_k?ChdH7oA=8r3T^UWm}`lYRozgaQ`j^ zl*caA)xT-NTaJxM23;w|KT!tV|50(~ODG5V+q=-m)zIbV3VqbFK4NEGuK3m+S2Pj! zua#yk`PL?S^JJw%R#SOr%bD1;MGr3^Fi1Xn#|HfewhWPAxOdWsI8$qAUEb@xz~L&Y zD2}V{@$t$lg18V(QIyK}DPytz;}vhTItK>_1kdx{SCRREo>!>+>_m+L?{pzri$uve zS>VRZo!6$ZCn#f-9y?xt%7_1N1>~h^93C4n$4#hG82;!?WwDZSKO6P=*?W>WAZv&J zpS%J)@eAXcWKwHdnmIaBsb>ot0#eRBPEotziJQije|l^565Co!93TKc^x#UGpk0~2 z9W3Y0;5*QC4mh*B(8PG!p}gv}j!JDKw5`n$gwO}XukVbDO{pTvg<4%(LEpuK;GHLm{XYu_qnO!wlQ zXvj#Zp1jna;833yDLeEO-=th!Tz7Inylm%HH#DSpw~};AvJw39YI5i+g6=3<=36rodEbT<)&o6SVrW8%BPunY!S+1{gXN=%G9+ zecFz)nxi(cALnJi{E!;%jgVSEKW`5q1$PGLgvxs(1vMR%g?itr3YD4SY$cJ34pV3r z770T}bV2<7&h%~^)*zs7kk*VRxcCfcnt8H8=ro-B6SGyXUrsy84V&Zc?*!%1vt$X^ z!T?3Gi1}H2-A0(LZ5GSJ-XPJR_p}y=ETOwr=ph4LcmDx;NyBRbcP7$=V0-`Q(y7Ho z$0CFp>7|O#wFGtl?cYQ@I2-I2W{>)DE9SZB*s~y_~J40-#M~=1DQ}QoTCOE!(&1*g$TkqfEAf9)it*`9o-_4O$ zMhCmk%-gC_I8(N9Od4;t;OBhTVGs=X5O^;-C@Aqed6~T;wVA^KoY15l>yfFOH-Nps zU8?Du4!=yARbK+@*7Zn$t-pqB;5*l~gfWkzs9245z(wGYkHmIFGP;=Ys(Wm{@veK=zqhjb?J zta>#LM$7N8s$JzvY3m%W7A^NB96#f=>T%L4!M8Ej2z3B!1nVE>AZ}hz{fvKBV@_Bq z7*MGaz*JnelSDa*D1}cNNO%0@|Ji*MZGGpCkshS^+HIKkupQN@&K;qf6ktQ#I{j2; zsPE}?SwFgUXI>r{Ti0M<Y0E~kz-2%T`saSC ztaQ>z0}t$~{h)*ws{Bl+ejD}4pnlt%JdwMZe%Pf5Tv&Qba)A`!=GilATKV*wbd)fA zoz#xhTqIDl^cN@U`1`RqFqjsgxz+r*)%$}yvNMP?+!iC@-aqAlto(H&DfVo{DaEdk z;f+g1(ktw7RN|t#juI3^s&kxCZV}Ji=q7`joW8tx%KxrbLqKFD3i0S?@aenReA$YRQ?0 ze-qBz%v7(=@EqpRg76dM-F%tt`i37Yl4LSPEp$g9b4n8iS{#gp4{g49n>sj$ib6NQ zWy#2)ao6+-VU?AQ@qebNdLEhnXPV0RNQfALo$dc@(FRRmDTwKS=CNiHVCYkrQ>7qN z5 zOoIDz1#nGJHcmcrTkl;u^eQ2pyVT-b0e4>&AthAj&>T=L8(u#2LcZ%@3jqe($)}=Bm}#DJ)aTLzg{X!{wWY{t+|WPZj`f@Bp)_+R6OCd+}4e{6!H{ zFg^cwO>7EtJrQoopA;drlsr!E2gm>IW${Qb zar1e4O$j$7`Z(?Btmg1I$;1}$A{M3UJos9?jq-4L3G{vX81cNgYWno{5|JqReE>|q zdMDrM>lvDrd5E&<5-eQ#cHG0hvlzxbwIe|j^Ohn6u(CTX>%6mAa%N~uxK+7AAQ^bDb9?klF^nOt%HE%57Z}wP}v$D8t z>)PiPc9>BJ+9HEZe>GhV!9ckx<@0Ze9xOLMJ+S+RX!GTKg@IYRR%GbtPvk>lFATba zAA4Jx3U>X~2sIf4pdsP&@5l*`-0taOF(KHUyu7dCWI)k^{Fzn!*>4d7Gs;$lT4RmS zKMyh+9Bj-;CZLoXIRe%FrB~qrzg2=a7XZphI}y-VXQx zN0gu=3Q+K=k4Glb%IvMEb^Z9SUg3L3Sx~t$TplZy@VyK>DwffGE`2fhpUxNDNcb)2 zoVP}(KncEE<)kuz11he73fP)5_%+%Fgo7J;8vNFvazx4%m{URXs5*d)mY*4PTZ_#Z zlj!a=p*kK^LpBIe1#%@Z>;t4+Zwecr_ zi_b6>e(NC60t2giLMC$RYNT09pM(~?c}r`Dqa9G?Ln9C6#E~pNE&1#z7aqM2I+um>~5&>a@m6V|@YW5JQAN68u0lX6y$+)0xSgdfjX5|vTz!DUIZql=^N*Nb9M6t$>=aQiOw+mbf$ z6i*^>lK*3fALeNs=8jnnYzgqPQAHg%Q^6Bd2CxGJN#%n#qakKTfbttDbE|=^!6I)q zCIcjIRg%170g@qguCZkRMnAr5LNMSDXiKUzkZ49J>~-Y;1!)whQ)t~*27pvhiRL70 zKxNV-qI1%c-XMIlT>AfQ@SmINAJRfQs6lQKO&XXyDeFw6FSx)1^Wn{`kl$I@D7CKLHyMq z{}6|;;)q8|f#mEnnN`CI{HE+hLJQDk)=Y!%##ZJQK@be_mooW)^Mi)?4^1n`Xdu&% zTKH5LXhLXljA{8gE1DqA;gOW_(-}ZIP*=+`w2!!I1mpVRd+Q+DJi+BYN+J zSCYCttAb=q%(u27{8>V4^ zY%F4*98>^robg|QkdC5WkPE`5$Y_bEZ-d0?e}g`vr|9<=hjO#f6*9~1v7oUwHV0G$ z0yVWs0dz)ACh)mzxJe0L(ja-|z%^9vqW7DZ*)*|3q!Y7Y^=%AfgUaa*tj zaB#~o%(1w#en;4)@dtbeHLwMEaA2G`locIpCddOo1ySXz@*=vE2Z(iB;GPhsg8UGD zra2XPX(?5J7(L$*=^aS%ryU8EdMrH2UO{DAjH4By7++kc3fb;f!RS{4F)2i5v*hHPilcb>rAq*FM`6n9ar0k!dfWNdlK;1<6PRZ8- zo4}Am&jz}P;U#ChO#jn#vaG&6n!O<22*YsJOl%4I*l4PQw!k;Q6UzD%Smx#4G@;FPBB5tXW7P} zzQ&S;Oiud)X;`qj8H~zBK}ace1r?A(BHtU%Wh=|Zb%4&0F_)96_{;@^rh-$>WxJFA zS7~aRt%WrS9BWl*MFT9y7&3%834q1SJ@O2mV-5pN6$71gXF1kkSwZA+m)z%~+ohy`;}_L@Wcv+JVp+`-t$C$0bagZlK%+duZ zcP*XYnQ)7wbgvL}-&O^^kM;?XPBl3Lo>vV=#t%N@J2ds$FL7NMkRKWwK>9MzFEcH+ZvC7u)nvsrB?TA zgXRK4M=>ZodVbSA6H0DN>Akv?@D)UqUuJ;B)1d7*DA>?FtM@2Nh&c?q0e<8I7rox} zCn!Qd|EG^Bp^rHxp*KFA+uN}|pr7d69*e(EB64FO+_#$FO^9n&nzIL3UG4(|L!bO_ zZ&N9#Nj5d<_QUjOcoBcJlloVy3u~XV6t-lzstLK|d;{JlA1B_g4+FeLxta4;gpYyD z{K?dmeY;BULl#a^m#DH@*enEua@wP>~bT3O|IgAGnx(rPCv;)e8JxxyMnm- zu!f$N4Ad>uNEXz{^%w$ZnwSvWeZ69`jW4uk-opZ4^v4^k!Cypg!;iMDNJws^y$a z!DiE?tlGiYRR{lVe<9z|{eCWgjm+CKQl`c8Sf>V0!>Ov;%g&y<`{s}M*x9nyIMrox zU!7!*Sxdu7=k9HotQy@q zK5c(b>H5n5Mi_qCCSpjSMq7TF{M<^sa*(ZbKwWfvbDua`;^PBE$rTfr;!As|Ifj^R zQd@;tUh0~2TP*&u@OtE9w_(DX+?5hMNol%HUOC5WfO|1$Cdhj$S;C#R#h~!TB8qQ= zS^S(GH~gT;`K+_d)1Igtk2kGwoRT}e{)ngS?i`5c=4S2T59A>7pV=&Yn`y6UCuq#a zuX9#NTaXE*?=>H(QY>=@@zQ`UE)@cCx!xR{gwW;yevd-%cCwcK|R-1w$g5B8Xb ziBuyJl~lCaZ3_ssgV*>*cFO)(T#=73+JKW5LB-%%UxD+QdU(9$dw^|}8@pVBbMkdK z{PiB)bjGbk>6ysF%NNI6{q!i9DUCEy(xcr`(Hl|nee(_2h{5ZM+t9KRieJE%PN;WE zZ-U`5u>U9}QyXl*N^4sJwe1GS=vx>vjIjiq(URXK5b%hx2UKW^C)pY z!76B5b^Jwg{Pc2=e^KauY>t*0?_JnF)noISR=W-L@9cfb?x=#+OPfkt+8?j;gad|y zm=MFv)J>!=A;(MdF~asQhC63W+IKTA27(G3%$<(FniiHVK30U*av3Z4b_TN535qyQbZpA_R!)hCv2W~# zyj%0mB&(cacV1Kv@L$;mPGop@Gm3^Jd@Y`BKfMy?+Y_kx%%)LR)M5~hL#IX^_SAe0 zaBfeGb5jhF{Bxd$KWMxKmK4^G;zb9NFGi=?L09Sm=On$3sG&W0+%|drTJ+Swl)Z?++ziw<%0a z&--kGLfcg7XMO#h>=ZjR#ly7OQxzUV=1M5Q-zLkIRR->+mPGYuM?V z3v|dcmbedUB@tXq)j9SCoG)b2mCH@lwrh{}`Fm)mxFYnNLYi$xb2s`a^iIE|x=`=q zRNQSIidF^o7ue!_XU=sz)=ZXX4(Owai@sIr@X?AcQ;7dF~d%QcM8Q{g@(T+`{)AaYEk?pCU!Ii}YvwPM<7;&os)=oYu) zGm+a@nw6Si8`n0tvf<_NL7>_NZ-4Ii+j92e*X)lSCvzVA3El2G;zy0cDW}Vy z$cm|2?^{;H{-&D|f|y`oXUXq?$exP*ZXOQtL7$o{?z0sc-&_nnK_}W$H0`UST)yTfW5uw6)Bb?S>Kmr{ncjuSo*Wd z*M7?yy}n5>X=SJoYq*)!tYQiccoCX9>uhX#Gf$}Y5yyEqI11wY^`6sGk&C4Ot7B7w zG3WP1OA30qgH5K-zB4!;YCNxC&$_|n4fDdS-T)69OwU4X^sp=L8f@9FndS=BfS2&~ z*|-(nH*n_jv$NpQn@a&`vN*6ht`zOP&Ss9#lR;t!{jdStJb#zowc^nbhU{Yx!>RS) zA(rH#(g5j`1(H(V2ZpJ#3cGIO2MSWA~n=60v= z+`F*p4j2e5hLBS2$IE9{lIo~N2?(My%aNN^TESn0mu<_h;R6_htDA<4eG15mW+L&q z220&exOz=A))oBxfH+_TEDr?j_tqzHr)!hD6E(9ep*gWi3KSE`0{aK8v%igEPU0DB zA(acg-GA#;&gw<9)!IH<^&1{;3B>d(+gg;hcurrrM~rCWA7*yU=z|!!2X4&h8gb^! z3c;+#6=gl?kDqv9GC~H;1Zeq?uDR|0$k-RZsPkA(Trn5IG;Q{Z3)la3qt78)o#VZk z>i5s?fix8C?VtF9X_v+ymg~pl?yes=%G)PDd5>I=CJihWSk*O_^Vq*E5)IB~7ir3o zBP&-4*3MTmnSTa{>6I{gG2q*f)V){H{s_+aRF}Y0Ye_>k>aDcN35R=|9$9Cp$dP#X zMk>~yhNncRPURqPpwKn_BeEAqBJO$fzY6Q{WTH_OZo5etq{#9uAc9l6W5kz2h ze^1f!`zH@1kyUK81)n%WJ(^zZqhb0Zi{ts{BmOSsfVRX=aeE%)6&ZWhC8)xz0!$l6 zKqW*cz*kl!Xp~iOqMA*d&ypE^{YUrSiYiVM{6`@uxl2nCssme<-ExA98z=@;NY2tl zOVUKSgSD;qzA+daziO*A?Rw>LJl1xvFj%3ddD@7MtWGOoJ|W*|$5O6t=6@(Y&<+Cg zz4dR&U8)eivTMFPQHX3$;O422IZ~GdHw4<){|M&`WvOp|hWzx>7a~>J?r5tsT)d!d z8+fj3ck~OG&u%{6O}p63opxycFl*k{aI6?Jp;kt=Zv!55sOxX?raP5)I(~b-tW(rc zHQ%{29zmj%ZgS#y+m(5gaFmKtaBWXP{!+fs0)DY`wXhW$fdGFx#fxOT#TLp^mC_yq zb8v_5GBTPqZq<$K*Yxmqu?b756${=eEQ{VLtcxx5g+_x#1M2)6IyG0z*)%#l|HHn4 z@xk4`2!;+T^KFOin8ie+`GM6@;>5}I>KDQ4j^O6MxvVw!g>QxCd6(H`QU!flk8YOB z%CF^jtLmUcnZ8t@EiBC(4|Vh#IeRIptP{q2c~4%WMxwx}aG3}%Ck$25o?ma*+e8TH zHS0~mM|H4utFcV%HS|9t!sU80sfdH+4iwf)Vy)KlQDuHy`_n#!DgDwRGq&0}IBE?Z z6Dph)6r|mmH)S;ba$)!AGy?Wz;63tH;gS*vfXcn957b=fVj0$sMGc74r8|i$8)=)? z7M!gnkk?yJ-uydgVWsURa5gLP)Yh=}|Su}sjMYl0NZydlG%%Em|1vZHL`DJ*l`+mf=c zosT1M0}VMai!5^^Nw2BleNY*|>Im1|?^gFL_QEEx-slt=hR)(0qOS!SMAdq#)t39r%uBgPU6CZ2mL%aFRj*n@;4OcR!C6&w)c-M zcP~(GqI&Gtm4~nc#>0ct zb>#KR?O~w4Jg_xC_n;r>vovkQ(jP#f@$QFB$qrX&InO*{p0^vFK7~qCtH1Va8d}*7 z&`YH>>TlXMJF&+1SbaETQoei{g{q&P=03HRx1HZ+If+aPQAHPtKLph z*2rV9A(G|oc1y-#UZ0_*Y35y=f~2Xu+9hB*dNVOV7QSZ0n<%4@p$cjG3gUxBF!K5E zZ)_72FOY4Dy(A(gC+B~&Q*-{Cof_hs1X_ofH%O{My1Njt{&mHjCxgC1kdgq;T);aa zVn|I2@U=e~NZR2D0VP2~Qh*4`fCn!LA_)PaDxbYlaH&9TRT?N6(*H_1rh{4`p=m%n zjSQexDjg`p%>-&0GXQGtl{$E(QnCQ5H1oAxHqg!{3!w0FfL~+C2B^7LYX6l={`T4~ z2cXn*fp*s4017t`pcryr+vUBs%LV#N$_Lv0$O9=_~x6jtUIC_GS0#fY&E&YQMdlH8N0s^41EUKA7`LJcZN6-1DP; zw#z4_8k0XKX=etk4VS{&%!924Xq}|f)5bzRFUCTT7Nnh|ZOnF(_E)?=mA!%E3S;-i zDK##WevyB&m(Ci=&@0ivFM^{7zfTJbXT1f||F(t1E}2js^1k>#?4AC#(V0Fg29vES zPnLWiF<{g+pkyK&Gx`l`^Z4QE zhK4&_HmY!Yh5?@^g%A>qzw%p{GDWF2O_UR(AG8MQs+(IHV9D#LbN_xwWw^uy@p~hg z0c!ArmDIVU#=x)>x@wEI#5fu*1x~tK5So%f&FF`HmkqXZ;6sF!d!UPH5t0nwt5Uxa z=|s;K6!;* zK|Xo494ez3RskYJg4T0bZ3z&a2jPet5w!G&F(SCi4(COKi5m*TCXrkgQdV1ny0~}k z)i7*(+vyN&G0&KK3PpJwnJ|&zT4q+TVOzLV?4W=X$MTk8IJ$GbrX1Jp2A>C}%-w2&M7d4Yfthh5ZbLwD zB|+A}*yShfAY&!~aX84+fd-~9T9W{FEL%Uv#pJV4xGUknwiI61yf(;4Bu}E+w8X_w z$JqT-js*3)t6yH!kf^CCVBHcy3*qk&M2S}#4=f?-$Z6Bmgn&nkn)VYIx*4UQWYfCk zkSf;CL?_MzmB4EX-gLL^AWB_F&I6@TXH(*_A-b?2Q4hmSXeb?8yu6>c1m`nR5x6L0 z@U$%AP!hF)k&GYpoGCv@)frmy8U3Ne{=f+v2E|BDfbdVfgrT-F#x8qit0g~5YykI& z4BrRNB!Q?PQM{+|JUlke+1?~)L(A{s9&mvy?d0FrExr$8lm}&*4feivxG0q52>gdM z4C9f4oyEWa^Pxs{WXy57xx>JEp(2Mc027+uf`7rwnm{Vf+vIDs?oo}fiBE|7o}G;y z5raZH&%`1ojyA=JSj0r`Jq58GO&|sYIw*&&$O;cC(5|-^PVbSaF?TMRSfm##8UxLg zEJCB2aPwBHD7eoV#YL1{2zkTtF$R-J3oQ0c0D}UP`BsZGF~sqM(%WfO?LW5!9HeYo zrl~C1a$87o8Ek~Ln#mLfZ-YXkKX*;w$ClH7)XzK=fyH|q{bZc%xNb3?ISufzg(bs# z$`O{%1u(tDqHZ=+8IV*I0wdxgoer>rh*#|yP03ntoeLCYG%L~}xau_!y94n&`&Hmj;RQ z++)xibWd15F@@x>Tj&$q0{nZ$(#|;}`w!rM6z4?(K2Gz1%|N;f4fR{SFG#j~ELAQ& zM6|(ZLrawWH$f>9^kN)16uIG+;OvO<5!qilU=WbmxMp!`@=1~yb-2J|@?FWgbqirj z0ZgRZH1ubH?}$~V6c?cBWf(?WP!4AM3QhqG0p$bJf)?Aa`&2D9Xbo6odv%nz8vR|r zCSlMBQ&p=x^Z*MhkRdCQm+w^DlQkHJ4cE6}9E^#V>P|1EU#0U*ctL_ZLL3J5D8QV3UO3kf;F~knWY5|7Yo|F+J z3i)a*Mq9<{X=sYb=j7MpK+sW+;S}w8@2}LpXrQ93f( z<4VZWq`d@ob@#*59mb^4i}N!0OOMRvl9LSSiY$e%TU;8V!3~Q#I#%x>i#&Fs#kD+z3GBYDKP z{^|k*KY~OXdGHvUaYRb}RB4EB31S800F4oaxX~3HF#9U?`8bE?B}*AmS@m0# zA~Z!}h8wipOSI&gO-s=kc!ovXn|~}^=Bt)sqjR8aw18c~ne&~)e{QHI#F6u{%q;o` z`6SI1Hkh#)Rb{B42)~8Eplq9s&-qVtc`2A zEHN7mE|966N!^t6FpX8VlJU^GQ3USSZwENRxLVY~0RC(;^bWWx|D8Xsyv(KnrbB6S z#tDQj*q;qL1u=SdH}+bI4n~^S{2zqHNiS-_X?J&vBL-*&&u70y+U~b2XaD~F-Mf~p zQthdf-5Jq*G-hH?%gwoJl1<-gaagNgJ3@XJ-AQKfyk~S|zOQhspx~s_sztHJ{QYu; zqZQluCB3oL!kvhsbCvnM@T2`k>wFuge2dG#0rDDsv7h9@p}xwo`$>vOX1!%&{9g03 z4rcpjkw^PH;p>g^+BJ~}6hl8k?F*H~me}%{1JP{my@-ab=KD$Yz1tBU1Mt;RvTNVM zakhm!pSD5c@dNR++fB?-cJl-9PRNPelE{U5^hLNwG&(CtcSbl5a#jbz1^eF~ho5x3 zJWrc=wILX68cScsWb%dW(D9RCDLK(o6>IWeyD^v~FSo1=G=hXzoLBvst?g&d_%8WU zNV`Wj2QCg!=UFbdF9aJ_J3FFi|4t^?O6U^Jh}_0vp#vScw9f-J=^T6{c1cpe_-;Hw{BFm{}|-= z+g`xWkCNS>5{Lh5Tg9?=nqq9^U8D~SeErRtx3*lLW?oEFpQP~30XPHsNcraeFTIqj zPK0SIQfphNPAkgQ)g2kbp|EUYg#p|?_3;sjK6<*t+#T^?bvuhg@mvcb!18P>E!6Jy+=3+xj;cq9M1}Are8~NagEC03Ij`?-wt&_o>B1XpT z(W9$EW({Ev9jzzjO7OyMc5^ZrYkKvn#irUmR^5&ss*j6+ z-k*ozFV`K`aYqYn$5&J}?|(D`Z$S|YcwG4nWwzD|E730xJbs%Kal?0*Uw;3tajfQm z^6DMUe7<8RqHz2s$Mf=i3&}yzGx}d+^*>{3yvL}J3rFq3D;02|@v*vIXZOa*rUj%% zK_tQOAolRq_8G`LmP6?vGJBe+nw_rmM}ueOqSHK|qj)VV_VREoYb^HRWo_|e?L+(G z?%5@8h5@>PfBo}5;!Vz9`^x9dX5!Afc_eD^D7gJ4`gZ;8dnEvx6_LBDu=hxUfM2R6@u!nqw*a8k>R z`d;6d{)8JmDP7CoBd>-{bE_2LKnszxgTXs51r`%~R0I0RDby6H_xIOrW>&)bC_esY zQ?+;l((G$?sBK)A^}ihY<~v`YwWGW{{spvVCI3HIr<0X5ISD5ZC;10*WpWNqp8q0T zo_`T8Py(sW=G1ykU8&UlkqM&O4Dy8Z$Wk*xZkj>v5c*~S2Bx)u+#sW`6n`to1!CI* zg#5IXLni`re&FK!-v=GXGG*h58-YwFPmJCqT{QYYC>7{KP3}y23{XHItX7ORp@THy zmhJh)MK!73uN4(gezozSxR1AHadi0BUp@%2`tPZ;6UI$2*V1PjMm|zSGBh%DdpfH& zZ+{Nlm(ck^2|5X@VTiA-Q$)SC-5}W5?SqT(XZ)T7V}uG~uow7t?{q@q#n;M+Zai5# z&U_VpSi7Qx>Tu!Z>HK1&KMVEv_M#L0MwL^o{+TgxVlZixjJcp&YQFTzF~ZK$in>1BV{ffBF|U z^79^ao=`R+^*t1kf38oB!oz4HbpB4BP;X8Fpp$l~-|=s-y?2p*0k<|`%u8r!J%jd1 z1dd&JNDyFhf^QjAdjwr2oaM#75y{Z0iGCx}#uYarZJE*rEXRS}ehj#Ufy@wf%>cWy zLIwm|tln~lAUh-qfW&lS?V%Cp+0dlKrF3m=1uWv);zela72@bgl<3K^elMs`ll>;4 z)|x@~)vCY^k7kysheoW?6st!JN7VWf`b(~k5futXRe1;f-cXek&XyiTp##JRHj2Tf zzA59T#$>5~-yzJn*EN1ymlWL4MsR^;gB>@F=e*huaT*vy-Y9|q zuP|t&062wu#bfY-z9QO!apt+$xx}O(iNj35j>Odv9qukLxHGPMm_-u zjqyJS?fey?Q7r$9&@g{)IB}Nh{e#fd=KeuwrS!;uPkGZ5l{f)At9Jknx`ByB^6MGL zRPEoSe-F z8{bR6$szH$*K;&4vZzK5$59OcYiV$afUt zSd|1Tu8V}=Kag2u01MjyhmPlZ#$k}Yq=9rxkc}VeNd6!yj@!xxC31n1un=d2icsK9 zK@25gGC*5NJ_)vqNQl6F9BteJI{N%pSylVpDTlhCarF=RK-+G9nB=CWe2iUG|h8PG7DRkVrl=cJ0)6}pvaL6~%(2GBH)i8#@>P)&- z{Sy%<12q#dK7?72l%*Ox*zAGo+O73S40Xq7&N` zMXPE%uBhM%d7_s;t-#bE8mRFE+V*qN-?`7-jP@Z>8d*rn;kG1JaZncF0794!X1aDxBNml;C%}#<5M8KNP1XCwot#we z&3$zwolT$(07K=iMSP}0?5UT_PPn`QMA{3O?p+N=>%cg}0zptEFcKuMwK2Kl`eK3@ zl)7085u#CuD<7M*oC}13WvZoYaMlVy_sf`L{3x>XC3qphNDoEQtQ(QTgjx;kbILy2 z-KSvRGm7v;=SpQ{!SpVg9>G+r6X;=qAb%?wSU^z>B4BhTNk0IL%M@x}ME(>K4_EzF z_RI1FgBdWZTH?%K`NyF3irUhr76^h90EjVy5P_N&l0{>mZx8)jRWdK-1IL$QCU<8n z`#GMhSCn>H=>g#P7?xn*nZ)?+8s(SkkgUR>;AqS4aZBgVJ%L$;;+lYxMLxiua$C?6 zL8cC&GO=)ll=cFFj0>p`L@;=pc;AF(O>rn8fCeUZ)0VLdp!Xg?4;a8>k;_lOL=fv{ z-t|n>0LU=^jDzqv9nh)97y`|^!Wg(4c`rcGDsV@b&%oUJ0A!zIW;+9H1OoF{0aYlEL`{py=^l*!=L59$Odt>(_xU9z<8Mr8=_VwB z`5!>YWa23$My^xk*bOI=&rSyDDV%>KP)SP(0DpgF!T^CNr-{f~j>-AE1g?2~&@yfZ zC}X>+5XW^fQD-J#N2o^+837MaqExfw`^Te@{|o2PmiPfU#~*$0*02Z-fOAi?Rs64T zj!_?gbFMj-9RBLBa1Q&i%u^OXc(VKS?yt{bMnW7DV&9Y~9S&hX#%KV*_mo4Q8DI-0 zS_b_3%n4CybS@|>d9rU@r+W-(&*~NZ|1<_|Z;w8vP8E&JJgX+L<{)_zTX4i7y6Nik zC_=?d=*somlfzI;TwmgToz=__xZfTN#E?cWw%{3Pd}@1o6by2Ba^QG6v2YM3*7v=+ zj~DTK;8{A~em=c{a5A+=u^JTmA2Jt!{ZkhvZxim5n|%5^b}i0Vaq#q?HgC5T8_N$$ z1eyi-`ppi!gL~|ys*m*-k3#BR(jHbATeH?r+z&qGfE%&hMK07`_edMhQQ+?`2qHSJ zCk(6B9R3pcC5YtcI9K*q7%ayAs3U7HUYR&-;LOUNdg~T{MPc8HHi z*cm;#m$LZeC+%}c@T4xB16B6^>=uW z?5GscF4^oQF&eqLj`A5uZt>~AuE^Xxx#lpt`FU(HzUk%yoPo0^NMaq9_Z@VVk#djd%bR z3RnLzrohWij>?8sYHd42=yz+OZK&XoFAaLjmha5_>QTQ$i##jqKFyRO@PYZoRdc0s z22sMi|3OI3m$X&qD;m^5!Pqdrpo4{6uOA*;?&$)4GmBXdx2t1zReKg~I&U|;KR;sK zuj}6A`+d+OV)NjrY({H@4V7|Dt-`-e^B|;LZ*dSUhX8M z-pBAzR|GkWWYozxK3Gm_%n;MJZ=I}C8qaZjn9HfSF>`s~o!InnK{urkm8~q$ zdV9g|Frc0@myJJy*Zp(eyBVuiwyMc0X~Joh`=(?4QVO;*huvH$3#`|+pEC$VCEgkc z%c&ULsKLU0`~oXvaCrZzK~)y~@eE5a2iv+^`=#}MAmNd{!)xZnsq#d_Pmo7sZ9FMs zqA9j0i)C}ie9qo{(b+Gi(6=Nuer~feWS30{C4ToI?ZK-_Sixc>=-~avD7?Wytu+~1 zbx8M(ANubUkr+^T0=TU7TwnW+VC#Z*`nNG9yJ1W#y4h_P3X?VZVYt;=WoCY#JJiCyxVPbUISH`X>sM^dGFZIJauhck zeSO|C60cQm=@oUEO-?D%aZd#;?-7?cx2plUZx1%G{$ zS`Cd|dE05O9PJ%1vUX%4pC8z-Wn}IkQabj&?IxPxqdtlCa8pXmt~ivq!c*J!ZK}?x zM5)OT6_oTG0odi(;?vxD_*t7{#q$qAZGtRwCRB-m+6vi+yF4>~yPpregzf2js~OG* z@m@P;EH<&#C-6J}&IQX-Eij1_#06g}eoCN8*jZfaZc6Q?8Fb!gcQov5)I2WV+r`=_ z3aze1W9u&O`ErH&!?Nn!z03x6IFQX(=)IpR#|M8n8#7n(9GURAIC;AA#|?jeex5JJ z#>=hSaIN)k0Sj70PYjbu`8(+c+x;q7HD9n`oggChaG~woD)xwHj4IFL_rpnw%`zUW zy!ZIf?5}VCEc3$x$j9b^Bh#we@KU+B%XRKBzHOX#(^}iC>GgDMYZ~;TQ#%#e>o6|O z@C&?YD@>~IE9C#1_~ztl{N#Bi{>ty660`2j1E0}yuFb<$24kXwL~5r;`Gw#M?x2gz zZ4k+W3Xm=HJpR3I$xE8c5|zM9<`vVZkMK;pMEbJuM)iFapJiDrEpQonz=e|!g&K}Ht4P$AMUEonL4Y! z8hnyAMnNYS_74cT+j)n7q*e|oV*|Y1M(qLR?<3LIcH z`k*&d7Ir%?)l%GKQrwF(GaOn6hREla*u%!{nrckk{c+g-9cHIF$uXJ-F)4$4cc*8f zkxIE-BCw|urw?b4>NOBHm=0D+8NoU(XO(P~M40%|a}$;=iO?o4#z_I&Wr<-enB-}q zSOl$-6hC)RM3^kwFwg79xe0X)M25}Z^mJD;_4 z3Tl=OX9**B6w}BiE{w!(_oJBk^P1D$q>)lEd7oS@+(VT(ELtpVZ63!M+_Be&B>qen zTlgHNr)6#&=D5Tf;s^{rWxDeG&rkH9nl@MrhdCGuBT`($%%IN zM>OjFo}ntbx($>Iid3c;FN;J zsA#XoW{k+^T;b=_rPoJ2(oiD5Gw$pih(FXI$G)rB$bqu>4yHB{{!n*Zb$+AG=ZPX| z1di`2h9CW_+=kP3cB36II9D5>{`6F}i3{$GF--}|rl7Ipl~`ASyS4(sYG`7#ZH#Ja z;&IlMyKo;iz5hb-hgdT#eGH{G0_a5!tEv0T25K~#Z?gMi+j$rXs|6di4@c@dQLPeBX?&<7aPAiSAAcOuPUpMR)tCYTl14j ze7rm=15BuhP4#A#_mWPTofmq-m?dmgmtXvSA5LfrtAGP}x~XBxio}gnuFCP+*klbc zgK`1`sT6h+KXBUdB+hgNCy!1EImKCh6EdjOy2#+XwB! zm_KD3<6sWzFf1CK-8z(E^-VU#-V_RnMe{@&g67C40KsU1A%WE9$z{{R+=Q>Z@SYz(&`5P8cP>a``f3jR3@ znrI7c*6k*+{FAp;-k87E z4W!^)o5XO7K*@J%__JBFglc~~eOQvE8L);%ZTr4DlB*R62kOU;%1~m>V!n^%Jd5zy zPaRWPW2)6MAs#-=iINM>{GiXBA#Q0=%M=Q+BBY`^YKR$Y6Qa=9oLX_Fw_`)LL-bh2 zu0@y;l*U#JEnKz!iMxMnf~zVhrfj9(tYN8j*nHE?ip}kp#VvWTv$31HE!|%oI+w$LYe3dH$E6$7!-$L_*xE3t3&$`(% zb_S82SLMxIkj^_-;q@+*=eaQXY$1@#nto#8m7GO=s)#Hae!7q(i<9xpXHIbOMt8)c z(%nMUn0;4SQt(w`f}El8Qdaj_4E(FEuDgsuv7IiS@~A3kAid}GgYU+uQFPYFZFv;6 zCYHDYp>q@&PZWk}sm#dbOvA!-X_+KdOr?tVed&WKEe?idG(x#8~7!g$y3ePtEVs z+Rn7~yxY0>u6E<;#-^$T?MIHtKR6#oj3gZK>kw|fb`*zCb!=sxct1+QsKbQRN5y|M z4k>(TeK!;5`SYnd4qCSo8yOt>A!cvjd6>V31~q(m+nuO*ifGmkWe!Y*Y#i2JR# z|Mwjqb?ZV#SWA@VTZ5GFhK|7G@ z=CkN@fulF*AA+&_5KZg=`#gC48#8K#edI=Q@S9L42BM~LZ6Y6zye3^yzHiZ$ZB$L> z2^&@+0=;60qIP}nEM_y`eVBX0d`YnzvLLp8nl8*!0hRA;pZ0n~SE2be`m+SuqGQDL zqof`m>q)Qee($tI_yV4QGV=P!^wN#Z+zn4z;I`166=`IE!94`=mL1OmB6xiOI1vGGDsP zvsM=R^Fm3!={HnTWEoL%Ejk=}qw8c38J6sl(=vh!`=oK!9;SC|nJ9BRv=)1nQ}A-* z^F2FtVe)4xOud%eU~sQwQ{}#1dZ#r^9lpTz)c1!Av7lh~6eJq9M_5PvaaS0~vp!vH zJI&-6-e;*@Up_N_!zPi!TtuEQ7s^5u&B>Uh@DeX+NrOORve>Q#5Y>k-s{eN`rc9+? z=fdw2K5L~5L`7jprWalIMFIZRd^iJ7N#h$^(3d~#iVgY+x73jL8RuNFam3Qh$^8)v z^;D?ubfzjfzTXv_U|r8gz43T1@P-m@p`}@tZ#j!b)wp$onX}~E;kiBll2;q>5Iwep zGAT`X?7y`6 z1vEtm%z!Wg!pXl0WV5FN-(oS1r|wC7KAgwIe{h49mMUQp6@J_;V`e^ooFz}Zy~D)79O`wlLOIe?A}fn{{o6Ch;E6R_LvEJ7m_;4p zO9}yvE#0fTSp!OrpV0R_g0TXw3Ro}{i~{~+cQs%w*H8;zA}0Ww24wrk0KMK z`&|FJ96@9MaXCVB@cTOcU=OEZvEecp?@+DKD6S&Hw=LFsq#6}T|%aQcnM_g zh)(*hE_+lR=oS;%Dv}(f)<3O56U8o|e0$fo4pwJ3F6YoDRb&kpK~KWRiAzC;dVc@- zaPf*>h~zu7(G1XE_--#^vHCt+m+`R=@F|U2mA1hO+~;&Y^ZLGYAqYL6t@U!CV2A$@ zk?y%urXPsUwE575h=2X}6}aFBue-dxK=IHVb9 zyDt3C370wGFJtjp@rvcbi34XQZ;7(=iNO)>urE@-Hap+?4bOe!h$R{DQE>Wn_U4K! zj<&xq7e97@ZI?LBm@0qeS$9DBak>4Shn1Y$OXVh{(_jeoyZ@XcmP>DOFuJ^;AHUo5 zFB86yepFI3ncc5eN+3=kYS@r3V0a~*5N0ZmIl%DDd9~DL+RLlN$9>S@-g}yHXbq_X$`YC9y}3wNY2Np6FcEWN=g79 zCxSAlG;gC~>^Z(E{t?uW6}CC)<5Uh8WpGl$K0mR{puG7`TfXUBddu-||Ab;B4xF)w z%5c}nPr~O>rU*ciDM72DNzsJ|>^?*P@HOt@9M7 zAEp7;TfL0PPf%PJV`3~tcgu&p#&X&7ThZ#zxRbvqdG{g{=ohzSbM56$_HUN_clZ5G zRdNEx>vxw`kedB}<)P8O`-!4bmJzPOxh>i{%En8a_2<`^{)N%MZz>xL2j{N@rG8x7EVtnmU{DTvAy!l^bOx{D9xoz4SZh%rWX(JY@V(rx-6~ zhHE8AH`|@`h(+Z-pa>^cZ~Rkv_-;|#9&Kw0p6JxMJ^z#AaF3hs4a);Li8^L;)eqS) zjlccCK&ly?D!mobz@H&Hocdpoa$HoTy=rMzwiUYN{n^u`@PI$ z^30r$+ujJ_b11OTq=?$~xEi%!i#C1h&Dk%<@=tT-6dZb9 zlCusUFlMZk=6s_@?XuIwWk2R9pEPN{&6im=R(gNavSYoLCp+A%IY;NV(u$3{bxydgyW_EuP8SUZ zw;1;<6Zy?Er~b7s*Fn);R-Bb@uHoPoR#dTQvTvp3V$vR}!b%)YHT9o0g6T^i}*2 zH*^2k)Pu=Nt`NPNUg$*Kb$Zn+3Xyly8;SBYKi}?cxrqOb?rH8dBDGUVfkChfN)P{&e_rLZ01;Y%sfV=w3xd$?R0uIkyrx? ze}_x2-sW8$T#}1{Ve{1Qqf%u53%5vthydAym90MHd7@9F5-$9^W-VBB_9K48(#^T! z%=Djx-j069hF&;M22n$(WNd8(F0sJ2KL@`>XAy2rv`X`cHs*AQ>Sr;_gOTZCHIGW^ zXsuyQ@}xgRsl2koEjK%q>;i+=Ic3NtS?iSj?y8@l6-qH5!!X+(X0ETOD;77zLy)9+;=m_v|G{LyPvwcu`@r>)D!<9J4dsxHAvv_lVMz^)~# z;zEKpKj1c%cSVY+H*7Ppd8;aEl9aOOP2QAPt^{v{x1$HhiP?YTWaLd_)SgxcDX<;} zy;+&y!eb%V-{tg@ft9R>LyO%r7-ZtPFs*Egjn*0!p{5mKrEerT1r$VFe_N9ys_08H zPV;~}p-ZSU`Nj2R^T`P>eyd_@>uS{h%CQ${fixa~fN)>C8q{lE_Z5F&!W}b@t2q9K z2w7VSHn|eVAcl$21tt$-QB0q-W&B!c#c++TS^Xts{D>WlrbYT5qEi3ou zA7BB^$p;ZDLsWW23{YRF$pBcv$MzpL2Os-C1f=v3Bn%nA6;*=}t^qEOm<~1|8M%ol zG9>Z{*Vko#Ba9{{3%0y2Tb9RueZ6H0NAAUCgH z=}v&!&{I$tsB%L;1I5@O$_prFLzEiPB&I~6^;7rBh7B^tgvrpdWec8kgL%}a$XkNoAF{!UT$jy3_&HO z_a->{m36oQ^Nh6ehu2ocf*1V!66+=~vfJiO)#9h|Yu_@i(tnP?Hu`PR0P%8oeLJ$E zk9d1OuXjG3e=~ZJrlUn7j#J_tgeZ!2vg6aP z%OL!d#CJn!5=-MyOXo5OHWC>p!iTWtWasVbg0n5lndD~q<)_Xs8&)^lgC1+(#|@3l zXfm|cwN+=PYmfb-Eb|39Yt{nnfcx@Z0xm(SFpEpn`Iv{qd=A~!Cy$p61KHIeWb+X0 z@BGYXU0^jdzt8rb=0hLjEBR0+P?~$5s>uA>xrAaey?HTb5*^$Z&`}=PdO6}f&X<^C zOdNY`T-xW;<9&%hmmyp(#%+aXBWZog>F|#H6?v4@t9mwp(Q&*kYcH42#W~;#4m{gk z0ZINo&IJ@FBuvERndVca5no&73`b%8dT~tQQlb>=2!!hfq`;EB zZ2bKSiS-^wCyyt_lR&M{)CA?okFT_KwrTT z5_ALO9LOyFEF{|4@q*?(I!MG-(v`A!Sv4$cptz#DK$I)}cfJq0fa8RGLiZ;&o$^f^ z4C(3*%aULE0$8j4VS~Mj0&gbToY#f=;{_5nB7^oFyZUR{3+vDP1OFdgZygp#^DGJn zcM0wqEV#Q%77r5K-CcqX4uRmZxP$}=?(Xgm!QI`1-+h1Yx#ynqJY4!zaYQ{81# zTTEB$gk{0HEvc-);K3Z$*ayku_@Cz|FXd~Z>e(s2lpM@nC>8T9?H%Buui<^FvWTFm zy#q~c8CL3F4)6cjN)|qhm$KnryJoB$pZ1OJZ?AkkXfrjMej2-W?Bu(Kcdj!eV={~i zy@%@Fde;Y2Qrp=9e*XaZ2jl9Kr|4@-(RLTfY?s3QU(Ldf#HQZ|ECpJ;MoObqe6QDN zK3;o&D^(*khm|uOGe^a_9Sr9K%qX30490O0sM*djC}VpR{sdt0egv^882h81I7i#g z3c+Ugl!(~Pa05%Sg+1FMbfkT;5yZ4vr%qA?4ZrGc{R1B_BxL&=KmaU)F~Oio#>OR^ zHiIxcPGZvJ7P&Z`M0n?AG*S71U}`D4ttSpsyP~2xO0p^b$!Lp*j6^Nb{%*-Jii^kb zJSAq4uBx}WHDn|rnIGIKd52pr3IW|?#&F-oa7|C3G)_v~0{$0RD5 zS$*_FgZ~Np%h~+cHl#$jm>r1*#83f$WQfN%ww!bQtWz_UfN?)%%}?$7%BXC`R{-Nk zv8BY+31^Z`CW%HjrqZJ#_IWml4t8J)?dx@(Z@9cu%{riJq%T$BgLBbNS1*l5*XS|Y z1YrgNX6tRNhE43C;^m6zZN(4u9wY_s%+3$0b%Mxv>jkvGLx-yZQ5>hW(WY!N!9@Pz z;|5|qvY16-kVxZ)nvqTDR#upNF`=@GK-p$+7_SW*e$Z=0SMe{#(rLwN!kK&G{3>kEI_}l`?XjcE>{+j7GIW zWv>gl(3!1h=*jvEF)&~SgmQ}nk))?)EdsY}hW1~ya0Yaagsb$ONUOPZ(|p{Fsol=1 z9yL{dcf%HZR4~FSULu8ya#X{fli2;!8OnQD8U|Q#kIUn>Q&_U*c7H%r4_%Jqo?>t^ z4c*8>W<(7FK^D**9MQU_*=P*UPeU7gtCf?n+I!t^jITz>;~S0uKz>b4F6cX*J^TTjSecY$KjQPE zaaN>N4ryYi#Mp3+KANj|wF>Sw2w;0nZ`UV9W75#u`!ZJT#1Dv`&t17^*-6)8K9Vg!5TwpYj{U#NvS*CIN)Z0g); zSWM8(qUQbX#C8>{&rXJC2?*PJ4;-}83~IVAJ`~QdgnS{w$oN6tV6RP)nT4_Z*&zAa z8h>jt5WHpU%tQG4+jpXo!u%CjOQ0cs>x;S^klo&Nf5`EG@}FSoWu<5(a14&}zHM$* zZh4n#Ykh6-*?Rj``Z2=XA31Q2MTiYKBmXftl#@d%I{XVnz>)np#_SVBghWA28wxN(?vk)fqHQwuD^%nsksXy$?FA)ok4R7+~ z1qRLtIOW%G;k}~$FjxCdnGK@I?OhXIpNQ9tOe2#JV20RHs{*iP(@BS)x_)+CvlCvg zjkfN)tmPxA$-xiH$)#(bKt+kZ!4UIpqy3v{7Px|BnkS1v5>Ra5DK241qM4iR-#`%3 z;QTit^m>Ctgm;RPU!b_b#(OeM;EM|q*kompBN*ZBztYUf*C0#q3>b+Kyg`nH0*-?M z*(JAwxWVkupmeYf6o?Ug2Mx*xKmXI}g#qP(hoM1y;4D~B8aNdO#0$2EgS0GQK|Ej~ zcu4Oh9|s-4#liPKlhLbLV~#tG@B7YQ8GX?!b>jP!jf^PBGo)SQ**c+-Tq=dP^{SD0 znsz28Vr`10-E}L3>kAPE3CKK4a(V|$stl^67SB9(js*t*n#R1ObhSpm=Z8IThV!8F z=-giWuvEc_ z8Y3dm1q{FRJl`V~6pNWd3Lc#J{y`Aq(!FsYhngZ8p~u7=GiUP0kEhg;k%xww+F~Ds z44_e;0;A3(ywGE^F>|x+3*TYF70m6{ivEQw;QlU7VWgAz@Y2P~Rz?&36d`csz+}EI z{ChvE34$;>>inG&QEE$n{7I(5oIu~FBMRJx2qJ;HZ&*SEAwiLy^X{nB&XZP9#N8r7 zHj22R!C^pl)JQ@$2Q-I;or9r}L6lJUU}|KL0n`&X2pNio@UFkThOfWgv~)~@W0iS<7qNjY{l8B5 z%k{ib_MBDJ{knEJA*;$OXLOgi`zH;F_acO+XO2Jv`PFfAk_Q~I#x5-~C$E|INt|yr$y}9a- z2=oA*lJN68fwhKsE7OsQCqn$C#@p3`37-qlpi`A#GrqlFTy3?3z&$LTd08h^`s=utw zqdZD#e_L84bDtp74$+?avzA2s15EUVbpeoqK2}#?M;0_xYRr9Xl3lEO&Gu*I)GGXZ zhLV&V-M-GYzG2&RAIn+9Gqc5Av|%a+FwnmYkL8`w3C)blA&9RnXV8;1!)VjvrcAJ) zud;`#7j6h`2oEmwBR?}q)nDvc6kuVU>TxA<_zhD_oCE&asEk1Tu-Hc{c+caT_X6N~ z<`kG{4R~(<*k#igu-!eq;a8e@5Xi6{pP8K&dcE|0&R_-~df0WiIpmlPB{pkRChNGXc=-FjER9_2IAkj4rQcO?s4x+O9Xw#LkZ~(C#gg zIp*BYXa7V!O}T(mGW1zfb}cQf^5(ZpNUM#}T%J4FUiB}|){lvSj@j$9cHi5Hs6`wL)%>W1wYpB+m&PFow_$#~jKIQC&J!@r{V@i(g- zy6p4a7f;j}Ojei<@{umngaaf^N$LAXrjqQfwW%5R7DfG-OMS7YDI+winA7n15@4{`Ts#+5G{6dV zwQo7qYv@L=u_oK!Q<7d6=sLG}(0sql*4$-XDR<@N9wl;h=l6AY)LK~; zS9Ra}+ne*zPX~(}vwFjH3j1EK!j4b)29caOg15ET$F-LJS!HL9+DH>>=c{w|_86>H ze|)0-4DEbs5}LJ^PXVv(=$Z-RXqG>P4gN01wScG z%c}IY{Es*WxW`^dUas{vKJE|XsKu*E3pRJxY`aZcoUBw=yaDs>t4;=NUV%@wq}|r} zLa&Rv%bF2P_CBRZUmj{B4>aAvJ?IuE4L!dpS76B#8h<0w)V-@0F53ow+V1mDL~c{w zsT)oBQ&&jH;v}$SKl8eICs~qw+wi%){iWJDz0Ky7uSC4IVR^jn<;%_u{=p4@8^HJ6 znq6!|BJuk&xg6lR^!CA8@Sste2-eT7N&W3L=SEjRa@MXlrZ-ged1R`s`s4dpstb>E zs`oA$s%^c82L>5;tjh|^l(SteNuF2ne5_x{CLH1YZ@X2N;k4QsH0PsZz2uKZo~{WGWR1Z2Rq6~b(4r!+Ds+INThaP{ zs$zb@WNh@@IHN)sykLJ-Sy*mpUiMB%4b{iD+Tr=h=f(Wik+UjEbtjzz| zCZLcjTk1XaIgW&#e%-B_>-|#UGCs@7b*we_le78LsN8WS^Clk+dI!gXBCSiqdYz$$ zU_D*bo+0Fy@GxObL)E5RcO15ZgMptr&sF9rl;-}LahFth%!@mRL{Fb9kkF0a4XLNj;X2@>fk zUWocQtLha6j{(;|E`{1{m5abTCN^C~FEZ#U!V|2W+rAhRV->5<{sz(yHDfED>rFi{ zs528YimS&|e*IbYLWZ%94teMJI_)d;<-*#FujPHtH+u~!E>Fkwbt}#9QRd{-C6=m2 zT5WrUNzNRb>ydA+pBk42q8&H1(VvIyeGI0;m;7%RrBK!QS>Z?baz>&zyfyU!&#{T* zKyyrTW%yHHSwX)Sj8Uwe3q5vg=gB1B0!I%UeP{0Y4pfGR}1!Sxe6(|C%M+s@6QbS+_RFKx-KdpHx$gtoK zpkQ!3H3TL^1Ihp^egL6@Q8CGg0UrMUmD?=SP;^{oLv4G~JkZPiO&|FK7M9=cIPz?s zN-O|P(5!!Ygd=zL4M9du?!@d%m|N7Q79QjPUxp#0OuYpPfFVGU!4=hF1#Kd@MnT$} zAn6dHDF?x9Bu(g3VlWzm_;47d_Pc!*+V{+GQUiOtPnBeVKf28XA+zAXH?)BJ6p8_< z-%v6Y;KEG{nEA9q!yXOjxz96w;wLcgzrt{gYIUE5#n~4?TkyPWTP-Qid@``OK4uK$ zuelum!CGC^=qju5`P1iK;7e}-{p^y~S^iD=hZYHkEDxTl{3M}-38(<=y0tR+2)rWP zV$^Twfxi&R07@@Mjh4;5?bD~*@Ck`+8$n-fK7?A-C>rg7@7mRFL!k;q36sfUnpi$q z;Ug6mw};9a9xlL*2G1Z)w#+)Xu+*;6CMUoIe4w=6Xcq0JvEe7w&Hqf=jx{Pm}wVH`@=s%f;csPy1_;)^lM zEZ>t*6wuKhZ<0J#F}vyUWjy=kfttq2<@2G4zd-8wLA9o3aoVd55{6^%l($60P+U!* z?2mRGDT>t$+=#P=XnH*p1Cm6&g!Lqz)-Y*B55pp_%P(&cLJJ^<-Y?63;&PP5@4GqI zoelp`yRcBpH1i+DVvMaCuvh!P-!T&tK`He`50Uw^+5aVz0uIhEGA*<9HtWbIz6Iz^ z``G>gp{Yj1jMWI4?NIH)GBWJ6iB-p7Pr^VKE_7B1cOo|0Hx=an>xs-ChHd|O7a^N@rWxP<}q9#D+k;Yny)fSl6wE~U>Ai|vuEWv%PPd;taqX4C{@ z^{}`p3IF2c4S}a935T`FNUm6+LH}5$sm3rY$hXTV0yRv1&;6(9I>DpioyB0&&jUkN z(T?XU4s-^E^>T9BzX*>HyM4bXla17Tnf)*LGxQ7+hl1Jj-C+fIVb51m4S=_YdvHhl z^Mrhx2rlnWX9fN?BGXe$g>U@oNY^@V&)4Lv>;61Fe;;Gt{JiqR$`zS`6kxy^(SC-# zr7J{f#_ij$7;f?aSfLpyXX;1Kc0&Tk?@<1DuEry zn#guzq>@eh3KfMp;O(~I=_AM%9`I$5tbTZu2|6B7*I3}*vFt)HH2|I;c9%t8PYqvh zpWb|b0j+J%3!d8tqkQmBLsE}+qlIt&FPG~LO9k6!i_#&@vcc47c{YTfat_WFfKQJZ zBC$7FRS309d<1GFRy1fL6X_^^?Rs^OD^nKM=e6HY>thcS2~qqIf6_J*12&nAC3JSP zf80)!DoC$5=Njbd^2e52MGEKV@V4wKoqlOQX-4z<(dLJ(Rd!N@J3H+VvnvEcjS!o-TS^h`~NQ?1SIMJN1jYnVGo2olOXOsq`Zb6}{enwH}17196}gwl?w zN^@uTg-Q3;<9il8{r0;y;I*aMcaB}3lZBcGxaW!85+bD~~qyL;%mPr@81I95 zyKnK&~sJqgEh zB$oKK;Rj3n(`bCIUSK}#aJ(*=-&tUMLGJWD$1*~a(>y@ZcPu#iVIwN5Xgl8Nt@)+W zZ+V7KYe_IJXA)tlj`(p|aT%FXemSxUA+cjDhw)cJw~3U;vSY{F$o<^NVwC;$NB_I_!DRpzTXs;FO%Rk||aWo`lXiXJ}OY4%zkM)Hi{(?7Ls=+|v_g!k^N zk=u*kljCkTOl9ub*K3UO2Ut0dQ#G4lQc^j9so@N?J0txx!#(x~j@YVD{k>rV2h^^= zl!OU+#1;jIg!vf`sCn%i#qprAbQ(rpa!?6iYjLR%}M5ZWzV zP>n+;!}H9z*EBS9N>`(kbRNLy9q+4==|=piYJm5v^r3;5bd$8y!mGXkZ2J|2w>1NJ zi>kldz{DYwwf?%|mJ-7q6U0(%Tw=GUaqZ5tV`y6m2m6Hs4ye(IVzx_J#?L|RO80uI zK>WAtn_IC!+L;sC=n8BDt8Wy}Te4;2(?UxTKPsqW+GF^9$m$0TB3~p8KZzV1#|TyY zfv+ecwX}A4uX5wwJGJoM^6n3nu3X*y(Q%RW%bjOC0kXUC!9ZUGudkmzs`k~xNU#WN z)^5s#p+o6sr{teyNK3d1e{Z7Q*Ee|_-vEu>ertUcYu0aIdr~ zronNhN(rH)Y^U1tdpM-j){ey$gWJ)u0*FzJ6?6|a5Rb#aw4C;2!Cah3CFE zad(flS!$cDR8??Utj8?IqT`)S>7{@Ec!yI=-zohOIl1#WR&OtRvU=1@M&BwCl%vW{!bvH#7wr4;R*Ew}e_fH%b=vM3?78;2^QvGHT_D80h1{-)9r5BANLi7d*`N#w ze5}g-M$#tE4EF#z@pjp-^HAjcIYI875ITFAZ16AX40xT!Ca;!`o7kzSjUK+kJDl(G z4i{{{#{N-+sXE{b?*?OzXCRD^)qAF2OFpY-@`~3D9rv>-g-}<{>{NmmJau2P!}t+w3PAU+OrjbRTQc9M(=vb8`*BkmaZmg4?-LG&>WcW4(M!8B)srvL!{Uu z=t3c}pQgp9u`uF&hsUN@$bKAbN94!Cp#RI${kef(1rN*XK5~rn6g&9TYZuN{MOPS) z%@;|!<^EIS?wz-$(Ud731LDp8wGP#CF4OnS6DbPAF%lex%Mf?wx_cwTLOIr)`hTvp4MBer`L*#(Lks zepq=LP-Y{totK1lMTv_*k$?wT1LryB6i;6p4fej0;1G*9pyroJE@ zhg#>Z{+0rXt{HK$hX&-_-P3^~g)h{2S1T2j5eeDQ(GFw?f33%1>wFw&d}_hqMI84D z!ieGs_$V_6QZ}(LlWF((G<0VRwtd+7>wvFDS9F?f6zd|;*2=Wb-xfzctPcNLMWwG@ zcU~*x$z=nWppkpn`fFo}?AL<$A7|l{G7)TeYN0|mObUs~cr*@p_JUC9QHKM%8&TmhcTM+I zJ$Ymm(QZ_J)ipf;Q@F^*wIlnd=%E@AX=*zH()JT0?*zx`aAn$s^M%+5mPH_!iE{BG z2Eh!tfssI!Wxd;3m1Ua_%h~$xt^VmguCw)if4OB&?^R-*I!V5nI9=f7cr}-J2c9M0 zo{HBK;(B&2@Mwz6Ez~caU)C{~u>N)JtRzPBxGWQp0`?yr>v)8mBJkS3$uCbVTT%h{ zzIFSNO1c7!kC&K>PkxNEkb~{VSa4QX`E<|&9rKUkIo4!2wXRXrM_}p=axm0~CzR8} zR!Ho_l`TfsSLu1go4IMY1hiJ80^P2p+=((f3)7dbOiv^C#h3jm-(^{l-Q1;btDO!C zYz3J6>Wf?Qd7g=&U-F1{RAiAe+PwhXH=LO}>&@+=XsnLtxnrBTT_ML;yN`KUENa!E9yLtXkM@I>lZuqW$k+Gc-e>@#ohz`S)B?Ryb@S>bV1!GKu!L+{ zm$!#K(o1NZ<->ncJ}~@@wK^jq*P)U|E?r64Qp<1+qnGpmgjsX zjP@5kbN}f;;FP1Ipw4Ib`DaDNoZIx=!muDoN8J^2IFZ1_4h4#Ine>tIJwrL^^!*r??Dnc?R42JL)JBj)o~;WnAvG>A>@Me zp;=VHMX)Dur!wto zl^Xf+N2ap;>vv}Wxa3M7lm8gO3|wQYeC9XPC_C!8@nN?>N6~S&Vws)$$=Bb!6o(9x z2jL%$1f3|-t%rWJy54pA#5QP(T#Kns`40pZbsxEuU9g{NZB9|2)aSSHBXrl~Q4jF9 zsn*n(N6##dyF5B?=!I*P!GuQq{rfG9Ppu1KG4RUeZX3YJHd(c+@LJe@bhsK@oP=WR zeWc>Jq?Kj5cTl^+$n08GnT{Lz)4Jx8-i5Fh+SYbe%=xwCC7ZC-JhXyUKx_JQ|77ch zsue$^RcgH^U2pTS!fHKu>+YG4bSe>UTs3J-a3&0!ay(;%IK6h+jDm}jrDNsi7q#XC zvwuv64-iprhaIaqPO`)AN`yN%O+wMIN#_cG8_!BaA>E_G7Z4-SfrUJX=J5ocPZ4wu z5cfMC4WNBaCGtlvB@A%(%mKh6() zXyAuunT=PKu#OFc!XM}i=vmaudxxiHt&)Cf3=Ab93ZYti#mR3tBQBIt)gM^Fc==5u zJq;A`!Ncp3z~tkJc=X}D*MFjm2@H(ogO|CRq|%bBYj8nDg#>e^Mu(jpckE6xOTq)4 z(+dlbs*p#=LrgL2-W=hQW4RZu0aIg87CGDfox)9~-2;K)7tSI{(lov&k*AcAA~AfA z0N=)ctxzK-5Ta(TsIA-ECUsY}rW?YV9oqz2jUps9$m`*f+MSzr=$Y?S+oH?t$_@R6p3@VA0jyIU8Xx2mMm_VI1frryK2Izc5Gz&e$*7 zjLBkXepOtvm)y9EB=x=D;p8U)?8QR=Z>(R7Xn_2J-Hz@XQgNNfWV30iY4=}&J`}=# zulm`!TbKlf9PR$Bc%bvX_X!~;P~N>)rPb+rgPkoc3tG==M);j+GlJ1tpe9@FFSsFn zUkHSz|4~VkmnOlZf8 z*bL3W_b#iBZZr_YxF6q62~vMviS5}NqB?Edn|=g~+~RM1Jj!tWK(tD}C)zPdu2VOq zM5S?WBg*Bk0nht}err2(-2pwuN^F%OOFZs;G5fXhu_$~|VegSD%z9^qPP1LjWhvR` z^(Okkfvj{E_^yX~)g0AkKn$>4sgS(x9@d=gis#XPcg-;#Suo0fpwxTH^$Iv;P3tL(5JvZp5q`oy7$((Faa)=0+9kQ17Ju_Z6S&zrzEGEy=h0& zHY?*tS+SJ(AI*pR`;Io>mqn$$TgSKSt1xVR<+`^KsDW^TGN0&0W!l;AGp{#TN9x-r z-#I#XEgCX1G?HE>Is!9#Og9p$cp}0@+oe#XV&W-;Fzf#MeveR79M=gN6oWM!VTaBx zNOBRD`tTJ723C=Y#K@I?1mYK;%m|Wrv0OSCoGh*JR1EFwNzl?+@727C5lj47i>^KA-9+3f4@A$(Kv+-D;lF68K<#tLPK5*4C2PLpm-w>M; z`FO*ja*h*m1+6PyerMAj6z>#zYr@*ZhS(b2xN;(O!Q)L%0J|2{OUeL#=V@9V!e$pB z3=rxPz@E{DS0cfl6~rM~{(0xA#uFn(wW2tOJzx3$&d$^rvoXU@_NN}z%GeOrRwu(d zhOYOZpcc3_OxTmYFEXS^YeBeHj2HD{6|&49zUor^flb)74>d`2dG8ZymZ&r6g#ROp z5cW(Wgo*+D-58HAS>+RZz+WrEUZ|ie+B)DfG)1EfYJ%C|J~acFDqjLj;4U_PAzz0I z?a7>oIGEP=M&K$oQ7Rcm2sd0uEzz1nC-Sf&&6*>6$(tuR7U@)LtzEfOZ3Vzh)vpsMsR}CGsTS)YyxxnVcygIdM6IkmD__A0Ru~= zBnK4)A2bvuzQNM$N?9D7o3}w?ijGK>DhLlB*s|gHshkQH?ZlYSRcx}8tep)qr7sla zViTQY$!2gadqP~9>L{>dUgU(%Vw0KSVVsDWx04s!HkX)OY{39sZ=g3U?2iEoC;UWN z2@)Dh#Ww82!mvH_ELk+`%XjiD zCws*rU}`ZU0A(}oe#r?E7EJA!E)vYREkx(92ZY{sZV=Hif+EyWZbs*<5S@*Fpo1)W zurP#szK1K|O)1hjG7&O2(s49Rd}W9IF}4@~AZ>smwX5CI5# zpde;>Wh4+_(c&R`^JK`r)C z7goRt1L6(SMV(luHnlVlt$H`{dmCEY=os-0+t2_X=)eYC=y3|C28m9Xz$7H_682ie zXHLB%V21$Wh>$H?u%Rgyu^_M-E4CYm%d@qom2XN7P_9-uCXnI@{Gg0y#>NUC5*jH>2g4l9rv-U$mePX$MeHlJ#5kMmXo~m-)1G4pFVzmJ=8!qWFzI2dDX=Lm8|6YT z;dhuGZI~gdN6)1_)JLJsbM>L0IIae<9{6s@i?SjOwiG7v&e6ccQh;k-GLzbxfn_4mkfaQ;xOXybo zT%)z9j&&_ck-K3AgR_I0h7`hwb%UBFn=Fn@QSI-B8koI_+&oBuj!DnAcnv2k509)A z6qZftqz0Mt(#DV+%U5ztg>Ko`JWIq@Z^+`u1t3(tQ!-1LFcDYW=^g(u6e;PSxT}5= zpP3pybM_|v2@@D31WbO1@QD#Zj0OqTJ4NV2W)k!b>IX0kgjJ(*hv?#sQ8SoZph?a~ z5^dI??5GZD zV8M_V>{%un5Z|&tk|pPV?#?8B!4cfKh>AqlE;iu=aO^`CfCu7(m=B>+%0ITP+J%@5 zadt!5r8~3-+8?>uw*s;$o8};%zN`ytD*zrUK?0(Py7IK9e^4R*DCtx&G}C;0=r0a8 z8tjLagy?#BObETGW7XLvbu-=oz9o6GD(X_#wvG1-P%PTUAqk(YoeBSqu6j07 zIr?>RJzr9IK!oTw@S}@%))_fQ5;9!!9}4@c45?Fp?yA?I{JFGN-{jzsTK>#TJ2+U$ z)+<%)72ukmTgm>i-zQ=XzboaEGEuLjBB!Gv-QoMY?Ue5E$Toml_*DkZJJOF&ef8Y! zzv&9>HDp<+|FoP8hnZ_rLJ&~ubQV(-^vgAs_E?sM;KTdzeO9Cvm~@7Y`OjKOT{BDw za1R;oHa~x9xS$;NZay6ZrL7aY{uxtb99~PD%C5~aVM9l&_G+ccr{nfA|@7jO(-9}BF48g2Uwv3gOmofdh9EXvpg8lzyJ6eDUp&sMMr9MZO{&|3b z553sB5W{`cPOzs4q?{KE|GQZV`+yH>0E+wcCNL(=-jV?KfZ=9J4EGyXU<|es$>$j* z@`KbxoUS4eFi{m7_WMacd!2VO_IpwjCAHV#ppAo$%3aKN^=Ty;8PgqX85za6?Ty$T z>!rgU63*qr!Gm{CA@M5MM|^Mtln@emF=?lEW?W$+#%8my|Bp)+g2aT;dCCNY-2aoP z(kB^&KXl)}oAH`)U#SKFVc(M;+Ss2~S89Kp2os*l3Tkr_QRP%w%);`czw%`kWQmNj z*JPCwMpsQ}aoR|b7H;tUgaBtDz%oL#ynleuq;wm6xe(yw{~z$bhO0K<5p&o$Nbxk_ z^SaJNR(qQL1QI+XWF&Xg20;k_lU~9U!4nS0bY6^_6NxH>TSuvjnmaglWd-=D|P zlPj&XRi;!gqt$wMB&%#NZ2Vw47x&@p9HfW6l-|g%Z7iFxYAgMbg=~KOs>u+G`2M5* z@|5U6YXdd;n0>20tB=Aduz&6B#SpdobR@6mm$cn+(q>*iWGPy-&GKX!{xG-L)FfBp z>6%wQH7C4<;ZpN)2|xL#dJ zYT`KOZpcwc-ape)+x{3+(7(Hgo~!GVgs=64)|RcT>mJSMqqbeHeUOIT6HQLh_i*Rh;Q0ZDf-Zx|~5iB*Vd(xs4 z>w$a~PAI2&?CdYCZmF!|V9j*!V$(3+HlN&947l5`Gb(4Pd?~)FD0atHRy)2LC*2nC zxzfnK)hjzDtoyRiT+LgzwzP0CNBE^6>|xDDzv0F-I#pNNCdmV42 z&6j++X<7(d_8NKgFr+6*w%j}-j&7XT5$A> z0r2uCy-%wLm$3q-wv9cQ&vIv1I&Ifoi+#Rqb?*CgNj-}q6J4+h8FprLhH1;?bZ^!2 zRHY;_i>F5xtGkH(YGzBT)f3r>kL@~)rlmSR(Vo|-iXucHZ#%+r63|VhvNu;hvViAz zzsqpkr!)FW$;(Lx;o8kOG0Ibvc+w5Y0T2Aj+*Z!!bC#B-LzWh8>362zs(70p4wu_o z{xUW2x~%K(c=e~cEbIGbVX8W`j5ydqK8`I>Hd4uj0y*^#<8`a%vA<4PK05jJ3xDbn ziftZwJ*+5dq4-7-b@fIeX8)@wk<1;Ov0L2r@j%!%T*Uuz_`xxy{mUGdjZT0C@bK}; zWUKXrM{7%{b+>Z8GY&r_pWsG-i>P|{xxD){-d{f<>S?R3aaZL0IPLm0kkzvm9p6>a z=G0l2RKMC2?dI9PuTz=iG+{-T-_V$RXTPSjl+|!ECcf|VAv~Um`^sx#le*;8Q_sb% zZAd3;=^d z(RS|`ZJ24Vc6U}kdmAJ7)zEKca>tq-ezLhA@hq_$@r%HHx=hz;lwFNliCK22S&fg( zKp~l>*k-$#IxubfRJ3|ld~*_pCEs&qjJ}@p5>30t%_W8TNN0g%);>chLTn`uFTAVgDQ@5;zWC|xKwAXR{m}rZJcC!>3N@$7uIIS`= z5^cl8d^~PB`jjrKaP)n6`C+sKznIhjQd;D`V4w1L`+C+;nRZH@m!j)s#mW6lgKN1| zn*)KiUt6Z7j6p$6x}3f6sKG~iG{+i;z{_^)6J)u?jDh-Fpm4$dKaR7jbN31JYPd~+XRkmw8vuwGk ze*C#4_s_1DBB8D2H#*`$HyMZWYZ*l9$kT???>s96+(ggQ_PTNnx^X7F+M=uVS1M-) z!?tVp`y++kr*)pdPuii3$?pcCJWp}9@?&W4TTfr8=!ci|uswkfW^IlS&8gSoLl$Ya(5pJ4+2hy&pvzK-|}EYMUn~^t)MGQ@ObUwr*^0kt%|(1c$Ho1`F}p zo(W_0MqH!(H?9#P{o@$h0z3vPU+P1zi*&e&%hJYaoEPUjw}%7QgltvLmd_g&(EML? zId|ztCaRg*o^Lv?KCQf6tdHm-Rfu^>cR)%PjXse#_gxD-m^VCeM~^`E<+|dxC2L9z z=ctM~I&c31P8#DHMt5eKcdmyf1Y00JUNviXM)NMigYdwL)S?AB<54emwV#o9c?DeG za+o!|@$#+e%4PKfVB|bL`dXr_?ck{HMwK|Cu7-3-!E3ST&{6*SWzoCinZ--DVLQWc zW8Zsw`-_1#qYui)=m`Pxgn-M`^Oawl)vdtRWH1-DA7ht(%FeRzkp8#vw^xjwn_oo# zz9jlt60{F+aq|7I&3vb%BQZPmmurSo`|k=K=-UJO-c_~nWXfY%LcyTBq|Vp-rlD1i zzrir5{?tm6D*ko0nilLiDR@LBt$`bL`;%*H^m3m#@QojHl;068vqiaZf^NJtrfgdp z_6=J!M|qgzxUP2ZBrwpm`=JIm1_|i;C6TMD5UjeA{nnW6FZ^96%RAF5_4l(@=aaZCb%JuVLU);sB^)5vOTv~ie7ND|C`<4^g+97pB&w`ga$(9ck1u#Z3 z#pHC&(Zh=T0>LEW(MBLoBxQV_JvuP?6eEQ4HhvxDjwOzqglt{=8}wlVjFf75VV3k> zgz|l(QGai}J5~ni`3Duop`=?j%J=}ok8BQ2sQ=6X>D!<2&VhgXX{NR@^{yGd!98<8 zm7r#S=jbl{pwpUEWgiUmY77X<)=slQEh+wUcjVHvp$!`x=$tsKCS!U(hs0isftL?5 z`XT}Rk@ySavcG;IP?n;#wLdvwf%24iC=G0cZQy1fRFUX*A9@OB8bl$d2QHBNOP0Ol ziM~9M?n{Vvwa|?<)(z*Y?#2W!e5@6#k>=91D+w(re9IJlwg+O0Kj}EjGYWQbQP8oL zZPwb=3svM!HV>TT6bh$vAyncaIN7q0x{amm2``-vywlTBuN~lEwrTyaWk~|_xx1vb zNP7#`Q_d$ZDXvkPE50!lZ_2I;;mmrRQ|>T{!VO$ouM-IuWR^(bG={fsGsICn>0*@4 z^a~~59f6IH4FeE5AJAEbxk-J=hdSB69kx21tCuaE+?C>F8-x@Fo8tSKwS}fe(b}M* z@^&14{`#0re^mMlvrdUJUYV%3A`b?{FpkAl{OIj@a*i>)e)KX&_40Abu z>~ie#@JEu|+A-TkA*^F(PZ23}$i}=29nqu(1Q|*FQZlfjAqXG1nqd`vd3K$G{_W#J zYl3HitR5bo$}!+rCYy_l8m)FYtJ$F&7?!KQ?-VNM|088D9h=ziNK_SjqH z)_Ufh?1Z?T`mo}Bg3_dkcHhq~N=r04sT`3P`{C;@|CVsEVJho3_yMzG%!yp6FqZMY z_pW@;dItuz74Zcq5Qx0!6WT*F{ubf^_buWl3upyPi)qwxO39g3%zjMteFSUw_iE>)0mSiQJXYT>8f454 zFoppKdfxT?EN9b1b^4usO4o((YrWK2f}J^kumhE0B8>sCq^XY38%umPai2#=pY-(; zPZ|SENXDiPMkeoJV;&K<|@7+tdPN>z;$mWLAHX<2KZIb ziOj_2%8h1RgJ{e|0hvv&TDp-=+&4{Z6x9(PM2y`I-r?Ho9gG)2&WD_+cE4Td{91_61D?VNVFgHX;l0;xcYpxdSO=hwjwZ8T5OYmQxy zgVCnS8|EqoEFd#=Kofz&4o~0Zz+g1KIX5JZr@p*$`$f2k$ShjPS31dzIp3RbVd`Mk zcU6vO9G+9Jt-5`b-PZCS2nOtkn8fDtz#?r5$PRaLtu&UXErJYxa=M1sv zbpKEJ3&)BM{!iqmI6AK;@9qWx3jj5EwqbMU9*M>T0$_6jMdTS5L(;Ud!tR_WA>vSs z%))kK^>_7^wwY;S48J=gEu$IgH?2ZK;%YyS$BEW$@%#`k$Nu)zFDec zF1QWDan_%1_FOi*id1_!`2+{VuusR}W6IQd!H{W><)y|0=`d3Tw_#r$XraOI83x77 zl4T;zuz(A>QxKuY2!3h_oE7yo%QM*!7cdO9b*I0?&vK7ybs;FR(s?)^skj+uMUQ3y zboY%>mO}!orbqvRt&I_0Ek~;sPg>B-xx$6HvQDucO)Y}bxk5(-P`7KG%w)w?IoTUw zezkcoG`oO8g-vlZ`0ji^{2T2BzLjb18jS0kbp<&7B?Q=hZrR&V9n?4Ya*yYzJG9u{ zcFpt4t+z8z)Bm1jlSeDr<}Sgf^^D(IOji4_kq(;mFJ?KV*Fj*Mw?!X5juM?<7UfaH zmQx`{d%dQtMa?oNiKmzsm(}D+$W2NdBa=+h7HozkWdHkXaTg{0yIlc14rX^rf;(W* zh611gFaC#lyz{)>+B%IHai`|g;^uD4=7Iy!sV~U%hyCrDOW&%E51Qk8C7(;gaYS5) z$axSMxjkXk-F0AG8ztFRJu9r+U>pGok+ke{RO5w+H2o#O-J)<*=A%%1^H`yqq@%Z z?ip?LM;n0ceXY@NHD$n1Sr2O92IJWN6_3g5YP|2}Pg}F7``icTpp1-A4feg`P|E}- zswt}FSIWffzPpN~HvOrRjzH=otAd(^DNMV?D5(FXu> z!WxC9-30-RZ9Y>3`$80bmy3ePI+g7XMW(aA6@_q+_>yvTOFA3E7iN(OJPc>r@0y)% zV|pKYYP7nb*9GDD2*VT+1KuBH>8+LGkfoCTRnmN?xgiwe52!H$X4zH7^&`ZTs3gq6j1r-Gec>s8L^GZl=S3S7g7m{A$eV`XaD5l6SoH(GdV!KF!*sN zj>i+aA&}M)YXlNd6b2e9Xn=1DfavD<+p%aP$VKe8f%7HYi}Z(@v1l95kOCS{MZ6;N!l{43lIZUcCNrKH%ePZm-9a_aPHG+PL9)694(O5;b~uw@!v zS`ci&u2sDAP$DU*P|g9rRG!#2us1Ra>>5Z>kC!g*R?tyOu_6Lt9qHz_j#pd#&Jzbg zU33m<3&;mCR|`TD0w9t&6lgMP;}$dmzhL27Q6{=Z2JG8Fdk)*#5(G+J;2oJ}Q z%tV-lIvnd4`rF+AvcnL#f+1OOKC?pSk7tgT>x$G^uj#%JyLG^kIr)CR(-Q}>g5^^` zVh4!M9qn9ff@&Wl)pWXY04Sv$-J?EO7qgaBAqd zMilHi+oO2vg5rA!5kke#ZfpOTsqmJAWFm?2^Py;!ufs>jx^yPhmU=ZeT`-4zSM&^L-cjkt!_Vd{33r zVz9;+wQ{?9=f*WD`^4Qb`{?A11pX%Di8d(amsV~KWD`gVfCezU-M^8<-EUnqFw8~@ z6iQO@OL?+i+Hvz{b>zB~#g)FueKTjTeMAPVgtcxq#Q$=GRYN(0)pR2IXz9iF z!~o!B!(V)%uqFCey4ED&MR_Ic77t-O;k@a(ID2jq1UoENkXHS*LgkpGMirsZX?68- zl7SGMz$P^#hF4LhoQ77@*l9ZnY0MLU5LZDec5Z;N=u;_lR{}I&A2PQY>fY1L7QQ26 ztks`Nz)w{Pc?o^c&pH~@k^oEg9l-OQc915Os zP`d(!wB_W5?@ETHvzqmZGoXU>PSzx;+9Yt7I0Z{m;^>;x0C6z=ygul!@P|9+9?+A5 zq1(qi8yNoBL~!$fT=ikOpSD+PoBzUHXs_j!gwd0Zt2c2v-V z9!`Yw-;F$)tYsj9?d@<0Io65oJri1(JxjH%VFQscp2RCaBQ9>dH{~x9)FQ>s&s*hh zgnjuEWAq9&d>#FZ&gl^>(>F{i<^|V$17#Mqb{7sg735AzQeKnYK(z%1UhLz=*8npg zoZeb!hGp(-OzC(Vy$n{CBN0r@uzR$d;to#=I2BADmX_Ob(5K>rSE<*{@Lq0GwMz_i zUUx6{4MGZlK=(ZZeGd{`!N{pr5yqGaqu9U{5CRh?0Z|XT7Yl=g1fSKdZfIiWR4GU1 z!@hm9+bhs=fh>QP6SUXM;vm>EX_7~=Rvcrbxmat?=w~>+I7(CAb@kv- z8m`?cIEtf9Vm_qm1`}|FC8uJOcqq9&D7PsFYD#-Y(_SCvB8;;k0FNrUqS}eI_?VaZ zP`4=zJg5?3JR&DdsW|A~+{IsjR58zj)Kmp~DQrAXpDWFGD#o2=Lq+P&p|v3|rpCmo z`_pg9tBX|T2_Ljn3tcJu{}#Tpa{d>Jlbx08zraf{4pIWC7QIp$Agrl>Rw?LGw;X_V z?J4$BsHt@#;uNV_j=-Pu2~c#Y%1%-RsTPhvbR|M(sen{UCm{Fum@}~S{m}_1^LLR- zNX>Ev%6MIYW$7v|K-sygR8%UGE3lR820X9FRSGUOfRYmrz{<(R{{P}GUF-e7=$mvs zFz|olhhQ2~FPe50R%PT8SS&cXo9U+m5D(~n1LvTAi8qYwzb2{l7R4@?6Dgo-K2lq4r@5en`S z1@M1*Lw{ALPPsT_^MgY7vw0o5S%Hk+eLoU~ds-TOzKt4&!yzVxReVUv>z+e5BP#zC-+Y>9T|3|yt^(m+Dmr}Iz&Lww;RKu0sAH> zg^KAi6nAbm5;#`}z#Sp5AN>l^$Vc%yO5YR4>@R92P#|9#U=1}2m%(2iZ2?;jcmA0p zf+kW)by&|o7MO?H?b+yq$rk;N#(NI9}#Ks z%qOP!wG>ZHRc;?6lHgU9bF!TTGut6T~B+% zoiRk-n1b?4J|qLTGq1WH4nO9a{nm)UYr=lg3A|{e#>vzU7OVZzNKCxZhj8a)<8p?5 zCZr#Ld6=*9!wdIs#9D}7lryH;QBs&6s32RNxkU&b4fw4{kN8VS>}gH-=Wv*=NI>)x zb1kJax2u%`;50-`98!FZ_=}SWF%S)GyaYTumKM&44{ZRiGL}eyaOdk`5XhGGMrLz2 zczpMPaQd0zO3fun**;QM1o?^B3lfJBz_13%9D6Fxb^GS@=e(RxxF$kTmO9i11kuq1xuR42yCLHR+#Ef zbvLUcKsna}Vh}9G`~e8U-{%sXKY7W$zz*U$;h41xi73BIES~u(Kf+YFquw`Vo={!g z%82Y+D16*Zf3@)_AeF2W9U4aXXz8#%`NdFhB{Czj*)t=WAs%dvkFpe9DmS}5boqWy ze%yY4ZDK<+Sa2EArM}H$!F74W31^%~%W*;}Hyt5Z1zP=ZPB+`Rx>Q8s_S`8ska7VCbIY8iNmj&`ozY<<}?} zn47M`$r#>u--g%PkjsnZ!KItH9F0!0?6x9vURrPGQ7>{XpDz|$p&*-C8jMT-DJx4~ zQOL1T&5OWbAJad0!M2)U;JhzD7vrE{>P6%@?Y3GjRVgi~U+i#!rd)bxM)3g6NWVXl z+thWA>33K`>{~*qtF8rLuEBUSR@8(EI{%levzMEzwAZ@uB?{~JQ3dhOwCzPUD)?C7 zqCrYtZ+=E)-43F09i;w2O~J?fMD`m$Eh(GYUS?eV<5zU-L;v;w2rw??b2 zUE9q%2sd$u>Sp5s8(M@j!uX5uxPq(ed{5CuY2{A4Ml)%{FM69()50k246KAE`(~SH{AIJ*jB2dPIR3UGA&{WQdgppHa4jK=w z;=zZ2b7aFnQzpc18liTz9uZUPmL7*jKRyAP-W$vaB#B z$I^0bN0vA23Dd^8^0rM&?lA@GTxLQASKZLo_mF+?kk#IH?I~|dL+$A4RhkI1 z9tBwsx0Rm7(aW4P3d}AH!zrbc=(Qe=v3{St=B(NRhqM_D_;rxBPtRq&DI|YKsf3mV z2+MI<75XQ$kCFv;j^0n7eR7 zr|X&*k{8Pl%J^R+VAD)YeCkkyrV%NUR5f7I>}~I(ZSP|}wh470#!vY;fjhcL?$6=W ztc8EsX!nWf9@guo{-&YEo^b*k>yL|mygXBZx7=LLM)S3wHBcwt9OW6nr@1(N!A^68 z()0!Xbo$G$lB@qceR1`X%me#SKdmWi6pAHxA;*Ko(e}a&rpGed-ye@2f_v5FMcT?t`6dv!JMKY06>Ez=}x?u3a zL{MLo3o(Z3#1UkWZ{HjE)U}m-KJbp{v<=_SF&__cb=wztsm)YWP<~xJYUYnsMvdw*DU- zNk+`>Lmw_9w(v|aOGglR&&@dd{wTO3@T zKh8g2cVBbA`49mFJ6~9qH}|#svk2XiBp-SC{YfdBaN4%FWE zjpp)pJejp*8evLv6h;(oYsF`5nEz zWql)826lK`*cugZTmW{I>Q06bHorJ`aobvwtYx`&5u^rG7@iGV)Rc!9LRc}hMYr_m z@bd>9iDUXQ2j69PA{hLwmK$}fPi8}%IY@7bfxSq1=@Z}}b}ZvRcEZkc-d4<`t&}h< zGbdB!?a_b+2alEGoVhrZtbUxK6Jwl(CvOv*ZF3D{r*Y|aR@xqsa9v^wjXrpA1Xb%9OYrvSJag%hkCYt!Iyf8+rN%2?`B&k z0q3?SBLEt0*C{dHQA&q}SK1a#b1d#@i#4lTeITEnViVJc-2l6Z409}$Z!=1c{U0p| z+caa7)fF|bZd}g|L1#;wOEiZS#n$2x7Ti=^V`~&tPr#hH)2vxQqpptFk)cF5m9?54 z?ql7_$ne0!KdqiVo}D#>cWq;91;arEZyoktW&qegrQgj%V)=ApWx2nP4@TUF`nX5E zQYvL_M}y6y;%`>M^?PGyTLKL`1$ups8AV%BuUL;y%y(TX>qGAVAHH1g`;&uBvd{r; za#U0NNd{-}V-~>aXi2f4cN+<#2{GeBgbiT>bwnfxWzXZ|_YYwOH`xED^e)xUUj#bU z#qEEPtw7jPm94 zgagYy3e_2ewnd?k8AaKV(9HZuZKB+44{*%{)^Utkb2R*;6Zp8|CER2+Ih*7;86evJ z0AdiJ-iopa*N7?~<)N{f2UKGtZwnSpV}?NPjUibXg?`*Sa{8@@wq&O%wh`H6QFNWM z?^XX=ff{-0y*QV*%qvH={4)Rs{!uF`tlCIve?7je$^6cQ+bz%&r67#(y@3 zRTeJKv;lFF|FoC)$IXajSz+(-MF{m!)!gVg;O6e<7~neO??= zaI(^yrC{$5VBJlw&y1WComFM%1sBmbtp?Py7}?Kg-g#Ip;E)y&N-#m!TXjnI!-)Cq{7X z_Xad%V7L_FivC{?R9vb`0kC9??yP~t!MbP4Tim^X*N>a&)!u-|>rEmcaS8ABzekKy z89qPi)ShrDT!81dPKDx+M?%75m#VwdTfo16;Y2#2dc~mZA!HII!3YMrU8yu)ABY(m zfk$mWT&rF{3Un?(n<|qaL&~yNF!;c%($Ru~Rf4iV1w5aWsu<{NHogJ*Ti6I&v29?7_)AbP{5-IB>~MoJanod<{C}NfSbN4^77&c z6X95j_$#=G)+FPgUo#Qi;YLGxIAS8-&4HI+pC*Lb!H(i_urLT2nqa??RO<~rXGMBv z(1!w2Y9Wqzx}^U+HMR=&e%+?;QbJ(sJyOCXP2t;J@w8mDPJGG zrd@XdG5}aC=FB7pnheL=GgA#dPNQR-Z;|J)e^%1&{^mx_)<6E__+3m3-zX&WdE<-c|-NRuz86u4-#Y`Bt6A zPx2Hi`cX|dEOVilLU(gW&8@8&tcm?W$hp>~^Ig(nG@;`FeQ zB~Qo}{!`Z;?#DRum@Ksc=ow4Bf1|yd1X$O zRr_;kN``#ea~}lUIt;3JGzkITvk!&kvf8Z>NxNZJL_`I0h5^27>Z)}L9P3@&8>O>w zs5uDjTwyWzfp!5)qLatNdh->Q#4d=3%xGT_%DNp}M6#*ARbX{;F=%co%XdAty>nC6?m*aqHE7uX8h+)V>_y0(w9_ zv;{s>*&4`HhAHi1z zj7!P*21m`UHU{K$$4EqUDi#E`U{srdGRW5{6nsD^i@&Xj72yS*ury3#jv+L z=*+hliEGb1Q?6|143<3@%~Mw8F6kKV@Sx_+rO#gYL5Vhs)HG{L%7$~UVkCg6TO}oI zFG0cd%kw%ploaVXxvzFnxZI{3(l`q5maA4;vK>_`@vP(h=91o=P*RxpB_j*f{iM5v&g2+;<x;x>H=Cd> zbL{a{QMv-t@4c}k)yWcF?}RpN7A8_18U?gUmSAi&B3JHT)rGztL>iSijaG$$?C&aY z&)h6-LQsjIzrWydmPp*93u)c`XcrAphZvk1&CpxP%fmG|5nZSonJzlx{bnHhHQs9T z?>cN*g<0;lb=p=hHc9}zdb+dQw9fYX;`*80+gaE>HaD8Lc5R}bq4RYKtR%m5m~maq z>3nUq8e@+lN~EwP)M5DBu!Ue~J4kLJ8Zm4a$U&dGFREiU7{xR6YbZm5Lon40ZmSWd zT&38^feAA#)u5Ce;Ne>`yb*8Hfn>OHJ{!)^<;UDUs0W61eERZj z|Kr7U6)THOD_ej8{!styIf_akWT-md{MpmU zW#*W#Ab!ufmq*i&*fx9)W|)gOFsoEIP1#8wX&ZB>Pm(I{1m-^$q9s#_;zu|18^->L z-Ra?Mhv|kL>&3l8 z*VL&SlMx_d7b$?puWsERzjs%C2u%}Pv~eDfg-I}vuzTqfZqVf5S%bY7k}}{vGZG2N z!CQK5>(9B@Jb;WNq84UreSEB!7;pN=g=m=T(Ay~7&q{9dbZy%87YAfYB11t#vk=BZ z_!qxkw9&vXC&NDx`zjedd)b>6Vm!{}7-%3*fwSXOIU&*JB8K9nIk}O!AW)!AvQpu2 z#F!7OAuG60Y>VOMXk8EgnYh2EY4TD-*X0r={qHWYbWTr=4^5s<7?Nna28wO3lU(-) z!1TP}A?WVnxPZ>x?C4wj0^s!2JBNh-xalu->bPU*gjd9Dh+2)NFcV|6F6UmvK}}7>io#mH7zA%t*kHAJF( z(7_d;Ga{9>HR6*e}80Q;3M>QIyaZS^nbih3#4PP70L*aC zO2lCG2F3q+-Cms6))e<%giAWmid35BIj?#CyO{rDMa!%62_2qUn(?VUDu$znIVYsU zD`b`#FKeF|e>>Q~Ka>0xQ34cM0we{~zSN%7QG6#h-qUW)WBh~Unf!ano)~RtvlZOk z0>i831sRY4KGTCL7mq+h2F07C3R0&)+9B~>>N!U0l5PSg=-M==_wx-L-lQ^F$~@=XGI(G1f3+$XYZyWAFKi% zydun6H8czbe2jSqYm+6Rpv^I}Sa>2=behPL?OQNFCxcsz2EXIH5Hh4svB&q&KB?=h zlk)5vEe=D5fm_?z9el<1D9)buj1JUS!Jx`4?jB5QZTZ^IYo}p8wZJC>ZpYOyXYzTk zUI9NQ2KTVT&g90*4mMAP5fN!1>z2P!DT0Rg7e~?z$ z;mn+T9zt#8b~X2f*A&oh7Ou2tCgmfsP8oY_Qe(dSbgVwhq-QW(E8MysE|f*@I2O93 zg{$hReEdlY~Yx^ZTECbn+v#Frvh$m6~DN4hr9iU@-YyXgmhJwzAi6V@`;lG)Jmeam7^}i75*c zjKeo31YcZryC>_afx+tC73ZiXazv`E9*oALi7JjlH69k!Z*Jp!U%NCxhu$;}phWb5 zJ!{{h@8aHXD=Ds4R&Xox?+?QAFsbAQM?&uTY1iEoR{R@|_xuCb5PFi>$VJ$&jGo;D zCt^5^cYCrd_%FFtbHP7=!*>T3nPBos_! z>wF$wO&YVXSLc}v1%p@)q0A)yfjj=1z)Js>+xJ1BC&M>2pc}2UWC9f~ zW|F?9u@Ot3cVBA{BpsRM4GxZzbL$VBR}+-ac284O0Q{;0^leo}ua;TJ!}zBoj~LV6 zogm0vnczKKU#gBAZiIUMl7n$wykdPaykgY%gZ$D7DE0Ra<$}QvO*l7=TU7)A>Q^a8 zzl$;pCrS`EU5LvDgHta(V7^P~CmXCS-LqThWAj8{eXAb4HDo{Uq^y$(E6Q`mtkPsv z)T~F!DsD_??Uk2LHM>&Fa>OF8bAQvze;&L^ItHMsld?t)zP0L-{W5sXT_MS?P?|l` z=JH}uE;+o0ej@DAT*!9z`^^~g&6|_$ z!_q{2b^U=i5ju4&(T~#9616h8`#mwL+9s_@=2Z#{URvrTDv7)@tu*cw?sTPr4mGbk z);Fq}mmTM;j8e)jLK)*f;`WOH7z>4rDqz7WJ7;v7L z=wbf^YEBso;6-hFb`TxeqR<<{egzy0?u>z5)FFfTNq@uM0oOuIb7Fiz{$Eo>0(mr0 zLAzv1XEP?m$1Ry~wzj58*-o+1XWF!|bKEg@@Sl*co-?a@-KyeeECk;u(i;Y@5Gzi< ziw-7)P@Hp+k}bQin|?AS&weSg`n+RV5RK6C4J`-(EC;^d%znkw5$!*C8ZhM9@yzw+ z1STrZptNQGW6piv&R$CV1`FiFswshToHXtcNHq_8W%Fj7c`Utr3s|qHbK+6--0|`R zU=ryu$_2p@Ee_c_EPbkKha=Jq{TTiQ^{`PhmS~Byf581YGJM4H%^^KXRvr~2r3;EG{9E~AH>q+ChS$PGNN<7a26=l zZG-vjqx5lM(D*BkrWp?4Gg zsw`}FX^#i8s3LQn88QEyS_uZj0l?8-7h$6CiEFk)3ixF`O9BTj=Ud;z|AtV~om>}l z7NnWqe0_KJTN88gWsgjN#A^mr*-QP>qx6*{l*_=8lnai$xQ19MX5AJQxlQ89K$sZs z4=x(=SxMTV2e^^&qEcB6@tnNE92~Tps;mf^Nk|O@Cqz(9F{K(QJ;9omrT3)BzTBJ1Y^J^p`yYLlY^kool7Mu+b%aYX^$mHXSXr9m+lV0EOtPGaU*X zP6x$M3Gp2LZwp|5*%}d6lQ4&J5|{{4tT>Dc6oL+RA64Wt4YGO^N)#56zH{=r%G%%_nD2_z zPyv`|{8hy9@@uazF{rT|8HwoN4KQGwAVD?zd)h*Iwpwk$LaQ)$ch^?ZT)6L^sa6m$ zR)D|yA#kx_a_af`Fp{RBzd`LqotoCP;3A#+=S?0-lgRe1{zMnhLc8&DFdzdF^hq+J zb4di*qpbSpOh$*qe;QfUn;yWbl%PY)q0nRNz^1i9L%<^h84tipfd>DMQtF#SPQyh9 z?~psC>_8MH+e=VEghx1jsUn^e?@h!OhX)`$N62t9u`LZ|1Pi4qBdgu9E)_-@^v@*h z@002E(oPCFZ+?00~mXs?AewV+=0jF{ZGki=eS~_+*I5ZaPJlD)s8CU_lY3g|n z(AUd7)HPW?;T5MuxZ?eZHN@CQ?iz=F{C0u26(XjG*=PEU#<`Rh&f7#GL7{)sz90;7 zs#AheQP(kf!=WXt*D}jcz$_TUfaf&jpj1vKF@y>Z1stX1R>rY^Ieli8n-eQi6pfRta>ttm(>sSxy|Kr2WG?DFQ z8>$k)Ne)Jq+(4#07-$a;89|dg=f*5s)z!eN!^#WN_~W7lgsbShiUQKa`o=5loCwS- zI$lIzP@v}muFw@7mY-AzsE5RmSSn1u6eBC^N9H#dHs7T(LoxAl7K2_9C44oTg>6D)HbU(3+iSEb+LZ4qOf=K}(Xtd3dH6 z#d?@~i$51BA#m`#BYy|OUz!lpzrB4%Jo-c?{4H zfY!0UhEteS0knT1WC)zm8SLT`H!xn;OJ<;%I9n-?Q%DnL)<*(oHKi=8*{Pj3nWV{z z%WI0v2Rx1gq8#shHPs&70d3bEDK^c_novp#yh~SRrEi3VPRrjCnprxHJmS9 z@r9eUbWMCcF*py2M0pq}j}t(0oeD5!txy+S)-~2+NkL2Y&z$vS0gV!&)dm!FTSHU{ z`K%>JY(lw?^;Q|&p?|uovY7l*5SgoO?MG<#JgYXa$Lv}90!9%C&U2wXbifESrDi-h zI24v|50?QbA_Hzr?)=>x@Pf>lWk&@cLRukF|3+u6ynq^Yh?EBWr@IVpG6YDF18J9d z)1GCMj27*pe}Qs^qciJ<+EN(LRWye?3BD90GM%2#U89K>Fv5Jo|Ebglx_^b*4RQ!W zE6RZK9qZ4|4DmOdB;ZXjKdZPZ{ZU}wwEH;{fvak)F%XoCajTDR1{(mGOAgBdA^0n9 z>_*RmJR|BJhN;4-0Z)Lw&fQ;O) zzJbCuE4)CXeH%uHj6m^b94tY+&ah<%fZiv(mORkFq+Wk>99kyR$wEsG&)P&9pobh5 zb4+ImS+zh}aXBKES_In3lk{|&j zuoUq16@@Mg|6nYgQXCEVIR1b(j`&yuYxMnCoTdVN9w6=d{nOldc=?)cb+k&`J>hH> zXz5Omn;t@m;UuzrI7x5wF6r6h-+ZOkwG7_=XaD-5h_pG)mm^^_0nX$2W@Wq4rCKv9 z2o@g0+T-8c@}BeXS!vHYmZ=Gte1C^0zx?8gMtYrKLH;;3?e6)WSzODyA{<4>MR|Kp zH3YmbYnDRGeXZE*(ca(9SIl1?))Zde1>U3O{sVGG~@UV9Z(UJ(we~q zvfZ3K^V#S8W=t#C9B}z2h15-4tuOofS<2KCf!@99o%H?iZkZcUk892wA%RO9ZLs`Zi~lzLyxabu;m@azr?w|81)`qW{o?uf?fxqltc%Cdzg=`Kw0n z+^E%8HoN}ycF|j}E){rDculba8v<#xlI|iyaA&(!J%`bK_T)Tf@t1 zs(S@U#>J=Gy>Za>Y8;JjnbLb4_zt9|B4j@>pEGwpuSJMG^>8`|MdGf z>GGZF+*4<%d3Oa^V*XBT4M6UgMQEN>%4L52cxBA*7W8QC;$#?nz1eUIuyPr(%Ta+v z>h$8}P8?+Os7SqU{$rZrV!xtyRB%(t=Qb7S33n1;9k9#ENnmjdl9}QvyF_Ry?FFh% z)*5+oFQzVk09Je&?O{L}B}f4*Vc$pA(VuTG!1BedMcV@$PTsrS4rdd|Ja!fr-YP!a z$8Us>>{GusieR(Q_3m!X8nVB3`hr~k{g@sXgS-!pRyQMH9Mb{}N1wePCg$w&e$Vz9 z@`CMJe4#>;dKfSPLI}m?p%m+K?lH>NIMK4A`0m!*pUK+)E^mG4Ftp?In*GpRg$S6C zwY*9YpTYr%@*P*42P`Qnz^smu*680ZC-SCy3g)vUj2hb0j0g1IXc;UM06sA8W%-!C zXQ|H*X;>V;TBbK{el45nE~oi7A3QHMSPJYarnQd+*sln-ux#tm2y{w5=42=dPIhy*r>d+X3Z8b(x-Eww3>u?#e z)=!G8HdH)#IM|F1%y#ktNB+PV6c2`SS@;^AnXkN(lvq) z>Bv7`BiCiBT~Kv*e`LzYsEW=~f4{ml@{f4i@m?*1_cM7)Q6T$UjtYy2Q$ObmE_K`g zUmT9xkJwwHA%g?ph9@fjI*}eQ>m1M5L(>k36V&5$1Si@>bMDyZktNDCzbaRPjp3kozkl0aNV(^uul3)ZdG~w! zkz+qwdp#o1k@WEDykDaC4h_T|KkR1 z)>L*xV}=jtHFTa$Oc}0EqrVsa&#F5JN zf(2+v6mdM}hIlst9n3Px3-CH4rWmJdw4s+Og}yhw{_q#R5Pg(s;F-J zpNY3a)~`e*$H{a1r^0$25jv;uQc~96u7CGsRXeZbO}Yv@mv%7=69}Q)VhqvztYIf< zt-j74yJ>KptYgQow)8mDCk@0_znE_LWz?sc;IjGw7_W=pLtbkSc%RGe?)3BZy;t69 z)AP)osfOsydkp2|kdSMTolHrP%+5c7XR~Z$H+8;mH|*IJ&oHYc;fkJ(r{QX~DKE@t zKNNMPx1V7{gQDOk&)a2A$U43LBMqocLu4Wr9Mp)>v zQ+aivUKa4m)Plp1rjXHj27|(Cok+nf(x)3A?+?O!5k?sn389RFl=WCK`^R4Fw93N8 zM1C4Oc2#db4DnCFUSm@ktUMacIsx5Jn*luwP}HEIT4_>aOUdnTDDM--uJM&WWxjpc zLCEp4Bv8CC%9CU7oJ@sKUqEX*XhL-vaAneLSwI$%0X*c-k?TP? zZX6jAf!I+_vsTgX(d2gnCfyvIjPp9zP*T4a`M*M0*c4}WVlUBO!?S)zL^v>bMg{{Y zfMFr0k4NMG!`WAc#j$kj;_ktMyK8WFClG?W2Y1&2f(F-tU;zRIcNp9PB*8tn1$PgA zo4t2FIp_Yl_jzEZr@CaxyH>5Ps;>HS(`7D7q7td9Nv@IoX2pTlx;=6BniETI!XBN7 z$l;VX&%D~TbEFi2Ba;>iEOXbw%Ve8(JxiEHh2n&KK-S*YVe=cj#3vrnJ%2o>0FPBsO%`4wG9a}B#BQ(6-{HZjxG2Fr;I?S0@GBSwBt0atQ^hV5;*kj z;1Oj4y>ID-j48d;Il?*di-9qkzpb93;*Zr+;gOT!0X8o1kB#$k{J8*|HcIP(y(@vS zDl#(-1n`&;Ix$$fPTn8PQ!9@RUQIwE1}C`EA%idL7iTwuDi@-SxoFt~%h2 ztC(SN5-_L%Shce=l~Xg&s9_l_t~uB6;VVoH19piHlIFG%OetMh&(XpeL>$+#I6`5e<8s^OJ5C?J0a2X7u5#K=AkDiZgZg4f}=hDZ~3RF#f9_rTip6l zX&kyn*=Fx!*HX+--%U6QE7O@YZufwVWBCh}Lmqh$Jo1+xtvQI5NJXXbOr}!=UQ< zvR<|)2u;`KGiUp?9Q87p`m4OjXGZ&_*`>>+%i&n+l_PMxHdF#%ZqL=jnd4myf@>&J z5DOQkM%Fw?gL`~mSotG;RJwhaeKod=8t!-LR}wg{nDaNqO446__Mop>SD>pcpu3Fd zcDVC9#)SUtXY7{ic6Gh|#iJZm(#Qrm5m(h2LL^vnbDy2)I)F??W^^gH{YQ*twx4|L{6NiN25 zwV6U9js#;cWm0vWYi*<*CkYNek_xjxA+=+uD}8Yy%?3%)FP>L?1l~NfKjKi;ZjlV z@FfH|>-JlV{73NDX5b3kDxU$(3pQ28qyzDC{8wjIs4?sa9CX`p$9MswrVxe8_~~1o zotk@b0}_Xc6sAohu8_S{>oub6!%vlu7BWJ_^|T*w!~*Um5U<$AL=|^5>u6jvb9*PD zj3AXN?@K#)e2DVBzmw23E9Ypa)xFS&N22`rN_G^NI@0e^)SoO69c0=0YX@FjgTxFe zhm(HOEV#05G`@F^NCYw<);mMOqkXP4XBD`{oyz6rp@qstQ|ea&vfAgxZ8IK<-~57m8!rj1 zP8d-n+?m}xy#l-f+(71I+6!y@0#LOI+?2_&$REpJcR&a277Q!A9*P?T*_kzV+ovz2 z566)Wb?m%dkgM&CFWk2wLtJ>#&-Jzr^J?29WYDkamfxU)#TZ9QO9^aI?8@eo%nd&m zU3N+#%8m1*>*$CFn^Q>ZN>JVTbhCGJx|kHj+VfJh@x5L+Y8WV}Y9jVw@APn1Xp6s$ zfTz~j!(cpiKDY7|N6tR}5 zIo*2;C!}abSZTvfK14A#{W!wF7EAJ7$4VwO_tbq)!hH zCn6V=qP55y1vbd*!A?6KC_&HFV@4onK!jBfeyK3C`Lr|w2`-)5vLq|nUN&NSFejep zZYjo^z8Ct|zR)@N+D74Ta3^Bi;DIT2#Kd5Dc)`$~sL$x;`{S$mIR61P->W|tV6`DR zJ!l>Nl=fXIj`iO4J-?yTScuQP z$l=d7Tn+wtKPBa4&8Kz0T02`n7byLV&F_+RJNm@Wm6gVi#$+-z&@;Qj$WP%JMRj|S zpu6?J9?Ym_d(yoHmr{5BOHo|8#P{4$gi>c^c*i$bhQx0MX}o-H;^FY&aETPOVRT%? z&Ibj&cF9pkBTI$})m3jLXhAkqEO_h<2i0WyasFel)K6X?rc%^Q(Yb{$1{xo&6kFt4 za(pTqd0*3ge%G{zY75Sq{}IdX>Z@{56kc$ak>h3L5$^f;)3c$lHeV>EJHmOVcjcrS zH8$ckA4<-&cHQG|N!$E7ct%BA5Zk)~v^oB5N>(EYIrVnGH=*_3v<#X?RNLV@=-A$x zGZB%oiDgy>kT=Nn((3OvFVUzQ83J|e2CphxC7n1=P8W~ko|fq4d;(rboBL!@{jkEm zEJJ5;*_96WswF&@?0@sq{(%SA??X~u@QZ;hWPACqc&;}nyWeL$UG-TxSV2QZk=&RS zg6tL4@DvqoEj^iqtacJ{GX6U0Onx=|8KCrX5He~p^^Ebnm7D^(dVsAW@3-UFO)t8y zsEGjjn~3uCq*ZKe>rYHCeY2X^2Ja1mJ@WVwsJr;(?{PZ(_wCqkYnenYl6c!OZ`;?m z@Q(sMtSf+iTq726)#kd7XVuN?O|9Eyj@S3*-IVum|A2-eies<%qfH8pA_>oxt zjz|pqfe@sJ1^wSpCj?6j08r;>C1(I{56EMIx*c&j(b`9~e=1JhGIMtgt2mp{yH zm9Z1UGg+i3rlugd4X+(uW7KckkU*K?t?H?7eGX-q7&(8(NBLD4@$3esJb{ui<4brp zd~0iSYjZo#PV2_SE)mq6?^R-X!KK*)GziLGMBiw4*_ZSc7}(@QK)30Erm`-02vGzQ z7ho9iI=S`1wC2z^GucYAushwLe4*mvhLfJSHEtYHT(qh;PHV?lk00i5w z00a{(s(pkQiJ=u(V1ZX|y*>#??QyY)wNsgxIaV$rTJ&g)BVO1?As)bBT%KsoTsb@1Z~TIgZtMmel; z13j`C)oX+z*gBdyyX$Sc!>Q4hX##;ugEYGVj8~+xEvmFkRh3dsV$dR`+~Ctl`WN8S zetBH*Sc$wOG~Zvo7L|*K|BtT)kK4%V!|?Ef)!=Yhz$QFE#LF=Vz>N!)>fdm~2jdLM zhk$Q?08y}rBMmVe52pYpxMN733I&}wr0o?vj2@vLcyCCa4EFm_Bp7vAUXJ>7?G8~4 zbQq{xSZ)yC(C8V}Vik^eIc_ZWc(ZoSclnm==^pGcEKiBH+1Gn>e-f?T>~|jz&L5U9 z1MPjL!LBS|lJ~8#U`s-3+QU=`rZJdk@8WeR3Y)892I|@!m_4hz^nQ=rk z{fFRbuzCsjt;wp?9n;lRB87*69(hrA&8tLTiJN)jQjyP1U9ybjP(cB=EC zd4Nh!L;R&C(yS<*60O0V&g=#ar=#a{nlkY59Tj<2bcRQnD#|&c_7U!TJxvl#52<30 zxEV0xPa{9UG8abEuL(;BigLkAmp3!GCy;)fP;9cG)d7O>XY2^e$P}8*p&c; zjB;rr7Xu@CrRC5lDAfjktt{$hUz?xi7N$06{TNOOlvHnd4e{iGf3AsffD%YG0Hr%0 z+PV@yCzRq;8oti{2>iBfa|`+ksl!hq)HX~5#4QA9n1@LIz*ctRB8ak9<0zfMR2y&>PFle3EQ#27bTb$Yz z00SAgQ~@b7lZAYR=w}nr^bEg!7R0Xvpqdi@Ab<#}1T0#s0yQgBwPpaN8YN;EzIKrjN7@PkCb%%DLC$Y+W|Z zGZUzvC<&nLHM=BGcNiy7w?j)OkG*Z{44jM}bj2%sn^p-bV$XVX0lA-}p6`iOOobK{ z+a*lj?1h?gEu=I>w8!*+Fr{B`7viwD5P}guH20IF2VpGy%t^S8FtqQjSNYj{wUoVizmgMH>V3 zI0cZIfgx=I%SNRHWDvrP?Ddk5lb3a4i)ztwaS4epw$)<_a0{%K$rd^|*))?leFzCi zO*3i|RG7&$$X>)vJUvVO4$;m{E`GF&4vV7DUicevH~^LjGimxsTLFI{_yp+t6?cNh z#;p;Be9S&HBk;imi?d-{E`_tfWC|+AGw#=%Q2?$zsG?j_5dgj0w$NZZs@o$(8N5zX zfVehHPbta2VnOanEmNokbUia4beB0D$uI8A3HNRH?3!!4QR27KFWoM4Jyj8 zLIwc0UbF-NRQzYf4SQ{fn;Brjm=@-_TxtRIeFU&)r@#j)1{uEA#>Tm_(Y7Oc`)n}= zf`D_&&ZOx%EcE)zN6t_CIslpXJpeFPGy$q_SPlVd+=F^XFXamW4}aO9s5L*=p=|&Q zfQrj6)jf7VF=d^#h6CHBXiNz+gB57lC>N1Om?)PAcz|~bOq|w_{mwuYpnZX7mb_>I zdRLz5RYL(xLG~qZirT*eY}m%sJx6XyT2`76=Ylvc^a-+eRTA>_bgZ$2*?B- zll6BTKq`NO0)Ml!lNpU-c6z6_4#ZRYUJ8gh({8GsqrGK8KN!I?{E+=aQx(r;u5KFT z18o?aM-H>JU;vXUp8995cHw;u%C{c(E^Js|Bu&e}&p;iZy>37?&wnJAtt7pF$wh-*5#s%R ziz=6;h8GTP76uo*nIH`zGEuc=BYH>`!2b%QrR?esyG6-@WOj+A(Pv>Gva||R2HU}7 z2HdyIc3MazK(!tF$T*-)INJ8CTLa2@;k1lgCF!y+K~+@qDaKOzW2>qepP30%Xo>E9 z@M|R9##dFPN>uWs-gnlvpTW@dq$0y}6QDnqnlXi80ADatv{`|2tAr7xj zFmTp91%5+CIk&Q80XA@Uaz3-J7&On*lR<%9DQgi%)1zr0@omiv3cfX+2Ky*oU_?K9 z5PA`Z!WBaHDLe>Z(TAB)n%MOe1!p|mfP}`ieoq(58r79srnVfAn!SsZTVla9BSAzX zg`9fJHgYaVJ&L5lH=p2RG|6kzQq3eJui=`!=5OP;MflPf+VE5EaDw1(iQSqj+c;~s9LT}Fc+d_Ej{rENmUh}2fP0)i606QKK`jBhKx3$nI3Svy zSTq0)NN)yI(?eZkf>cN>%-E2u2a=ZE!c2;V+d`zP2hZIou*;pSf~5nCL@Ul=aK_nu z_*Z|7&d+mK{qlwKSr6)3^9@Q1=&=X<>qj;$t86isx3Fs3Tr8%SwdWx8M=m&&Iyxm27)tN{9dLAXIUa89H913Tg zDXOrGQf!|{T`LJm`vwjkKu?RFAwa&F&|gKe9n@A6axb?u6#H$#L~Nn0RW9cRjQu(an^2{~lU zwJuLPe-_LBoA#~@9I>mjHA*cPPboatD>fLy8kC{U79^8U62L~Yc}!&cHKEL}J_Bv4 zN0)F=ZwNw-W^^O7Co9moCDklt$LCOokFPoen^SIES&ep#>B5etiEmpK)CQ0{~!sAl+Zw`#82MUCK^xXvNi+Ss2T#z* zP*4|Vd^_dlD$VI~LXMaqn8Z&?7B#8f{DoqALdI-6x8UH4FLb71&ZA(3SMqA-LRZrj6&+8U*Dg6!o~^j6KVDj;e*=yw;2!RBPd z<1w;HKK752!M&REHGIn7hRlx>XG|pDk%9c;(Y`%w*Ia%J-4UDhaEehJWRD-F6NJZ@ zwH`ddS7_@DVjrfAV><3*`8I;A^c9QnY(BLCW z=JFd*=NFjY2}e%lFc7~Cue-aI_7AckW`g7Bv`ZV%ldr#|c!2+5)W9~vV%;q@;*nAQ zVrS0R+^1Qq-m((eD%aB?7Q5NA-|SBT{&ZcZiE!Fmu4=xe7wx-mnL;2Rv?5MMjYYg$ zo_1p$SH#|b_ewFpbKKPStrELG!tA_zIF@;wZo+&z)z7|io*Oy@fycZLFK2H-ce#bQ z$F-%oa(h*Q1eU2B%@^@VO*y+R`SE`A5*B-4*@a+|+9)DiCX)I<`$uJ}lw-^f3n z%1vQh+xtuJQd>k=gHOe4jtvI%@Xui|1?FULKKK ztXx^yUp*cfKNP$h!$^C$7j?HM7iv!%x zBT6|Q@b*e{d^R^{M@I4zBs#u;iPMZp;FNtc9(nX4|2nGQ&FD&@GWp+MZW|DV;{O=|~z1vS4nAUf@hu5G5 zRN(;SRd5q~=lS-NyT4f;#%%H0)zZ`L!OAV*$S%feA916hs2hbl|7aMjgOM5dha`bmp@*y3H%%#4G_bI z*r+B$KRj;s-9Ken;X5hritQT`cRn!apK65(k=yC+lH&9W3vg{J2I#Cp3iA)I+zeW` zPVdh8*tgpnyc#?RVq*?z>k-q%$f_DJM`4%FayvSIsun*&><>L}b6q=|W+xwxaE1w* zPt_Oh&Yqy+rRg#Mo(bt2{4*HL|7V(y|IaiZ|DS0-{y*cxK%Rf5`8Y{2fSHgjVN|fx zIxrKGFM;}><8{;<@d$BFIdK*4C#Wx#-=p3dggjcpvV(awr^Y@^Ff$Lr`y$&@8{JfsXsq{McWYv)6SS*!{Ql3LIiL?V%Qrr zqEW6i#>Nao)Z}QQX4AC2hPGxO1cNCb%S;c#_4IQ0_!W*N>&p5Z)>rG`MqW~zQ$k_a z`8E+z_^bvhczpNg*I|dIwvYxj&0}hlSFKcu`Omzn^y~%8AayC}vCJVR>TnMxz~aRf z<>{gi+5X6)`?{&!bbCQ$Gj5>X!@!Ea6YlSLycc|A@zs8VeokQ>O&Psq>`F1p}7-uq!8($AWUI^hn(YTJmQ!Lq@rxWc)G z93F(?qN=O0*@9(+#^xXD3(4G>L|&64Uqnx?ba+(uIOQ@e-0f}|M2K#rH}`-(0{qFz z9OsTL;3|)Cb)rDRm z%cnLhr2m-x$X@pJxm-LkS&aQ~n&>Nt!BrPqtdJ@MP0=W_dx$1RlIA*b>u{Pv4`-V$ zC*DZjfw$XRhOB$;bkCFj?)T9~>-DkBkLkeQ=OjVECgV`zgVRA4o&t4Q4nFD~vcfsQ z;a5VyaC#84hb&Shal|sv)m3%pY zg*hXA_skoWFhs|lVVP0yXJ{1Y!xZan$!9$C98nd>x%cU^1f;L`M~F0ZlFR_yr?o ztVAi%C(?TO%L+X(39=rR{H9#XpFyE#q~fG3c)gCpdMmR`YIG=2emZw+WOhDP)VUq& z+FcSj2y7N?DOo!tw*@{-rjXKh<{~4H11rC5b6NaB9jh#7zBw+ptMOw00}Ih-dp0YW zs&tbp`@!wH!FX`zbwd{%$?^FnjrfQasSNT z$6@!CoMbKCJB0&^{oZls*p&Sbs^;kX;%yb0Iw~^Rj5`zQ; z{(H6QbhbqNFGyn8@g?(~eV2_|J_8EjPJiF*ry?K}vHYlph zT)#LlSTUC6i{J<5z6GAHM?1wHj*?s5M?p`W#k06OM7DQMcS7#q8Z^>%XBTs7cVDGk z1g$opSmV@ zI$G}UgtuJji4;M-S!H|RCWz?%c0TBdhJlf(RCR4NJ#j}Pk=sI+lYLDvTNOd%4zKl6 z>HD(jH0nv`Jsmpwv4U^>EN(MD?ReN~(e|=&c-VkxuZzP^!=!hUPdWR>xC1LJxDlM+ z>)af3ctA3lzL_z5#WdgfOi!{qzq*W&S7dLx3?3IKTqYO2?tCqGsXp;5)8eEzi)8eU zvfZ-SXYuUL`c;5whqp1RmI>`oEO@PUD0X;eWFf5brIR)jh4G?gx`JCqh50=(obshJ zAZ4;>r3gr|`BzGEqG}#~d6#1K9Q??8mzXGU)dldfRltg2iw-hA2mC^-uE~{T8*Vwx zfq1oN?_`K3uEUm&cQFww^nyb2Kc1`_(h&^^wF#S@IOlXbl>ix zyqYC23`#Xg9vuZUT*`B!_7+yLw?Hv>)8!t6O|IlQF^sC++WyT5xad;;6&mT?+F#{X za2HX*S7-8Epj`HVzeU+z!}rVu5rdIpvidIMf3Qw`l`s zUCIlCvIV_d{;t*wrpzb^9FiJJiZtWs4M_NZXw0UY=|6Z)G&uygUqGB2$FzJ_IE?Qz zt^bdpm1_bykZXtFJ)_qD|3g+P$(r)8)i?*ZL-Q|C{vx-WzXTezCLkdEgW#*b zo3}snDZ2{oLG7k8ZGvC0_6E%JZ@7kfQleu#HvWZ*w7(3#G{S1k%Zk~v0<^Wdiusp|(wX>M0pb7AeD=G)oBwsL^`8p-mja&K!gvIHFhDBp>&(E+ zxV>kR{t-YGX7mrxdS_deZ8P7X>JEY8xZ(tcG{C+wwbr=(NoTj5*X9B|kNm1Q1gOBn z3~yQ%!;xdc@WxXO9g82QYU#}H3)_l^b6BfVRtsl;AmQDd5Z~+O>0?l!-iJBEPOi0E zJCsgsAJwK^+&8=)()ZpoAGB&4*his;2OLKHkNS(cep1e}z4t(K6c3uCN zL)~I`EcTFffwOc)3sspr(dQyIL|M{zlcF(;8K8R4x;8lT1mo4wiPpR9i;^dK&RbG= zIQZh!6a@K7dD?u1zGy6&zBmyrO_KCR)=S3HKcpieuFFZaW})K|isLKA8q$%upAQU+ z#xic(xh#i5V#fC20=_%nel(?_1cv%VuUp&2uGD#llfFE8dV=$l!P8q1ycCi3ZGGse zKs>(!i`bujW55`B}+pD?}jwCM;-Izo+O-ps41 zuR;`Dhwh2uSlLy~Z?UA0?|X$j6+t#19WY5-RV(i;Jr2G5@FO1mAKDMs(XWeCcH?lF z+BKYSD@mGQmKsW(BOAK3p*i!dV>b$nzDI-2)JTjP0(3{m#Xz}UkBq~c z4_o(A^0m?CEqX9HEWYxyqay^~uBFkLvokkrQeVc}PCeZ~tK-J^MZRIhZfQq*Pm$?k zJ{>Ahgt?z=5wLWIpo$d@QV!p-!CaFMzpJj@{7EZZ?|&`!w#e4;U$qI|4o;5`c)YgK zZ(=lPIiAQmyiQHMnRtD^D6sB?Dq36z9oyRGX1}bj8t`Qd)VAO+CWn|KKXRwgvdWg7 zd9nZFgS7im5*sC-J8|wOcbhKYZ#@dl_!8diBvm`nwMFfua|}E#~BrJVICCBgZ&H=`zy0 zft9OX%(B;`I`4E91Y;B4_qs1FiHQcaobUV6!oWX~WD{`O< zYU_9WCt}ms*#pxHGqT>!lIlP1`YgEmi&|=j1SiQ<^ zFW?B@VwcL_r?*-bM5tEZf2vmXOR9S!bR5+lADd?{%k&P{A=v2v8$09Gxx*Yt)PHr& z;i=JtV8QFUE`YQ`Pv@yVC-QFJVbmeYQaAji)+}bN!N%<7M~9Mkt$nR5&B{9cH!Op^ z=DoYg5eUrzd&!?d^c@|Ky+yy1pOPm<j?Nr8Xyowt|BPnp-5k-vfCOmS+MENh$~2|lFj5#fIw@#h*drmd!V~j*3dn z8jwJ#vuS+fx0DR0!QC|&%;SruuonIRkXZ5Tc5fVDZ9@hr;|j9bFk&ENv#?gj|7MZIrs;$LXZlPd|p?wH(SUDE8|UKM#Q>Ur$H9d?dz^Ri8iQ>d6QhA$=<8m&BWP?kW^6#Fi6!XC zCFtm4s&s_b+eSv~HautTWnLNAA<+HIQ5=ET(4Ml2&2`*D(Z<$K=B-hIwh2ZO4P?AP zRFdVG4Xsb(kl50%daG_8#CUoezrSdo<(aHC9mtTRV)M+uY*I_LMr|u|EO_;7Hxb2{ z!Y#ezNS-dg^{i(~(|I40+;F!60iynTeh8HmAfcz7xd-6=fQ2nH(i-!F5Wij2ny$d>7SNnDb z?q0UXU9}gV4UT+vAfKY(GjD3V&LNqYyKGyDLEoT-a5m89pb3X638KLt)iQ-Qc=&Gk ziltdsZbM#UbiHp?z9ZFLS76v@)s;ru)d02AN1q~>(jf*<|DxakvFQGVBRa&qd^*In zSd%0wuF?KqL0-yWm-ONtvOv#oel;yl#`&GwL*j>5HrAXf0b>(~=7C2RW6rtcdSEp?_G ziAl9^qSu=@ziP?zA%tx^D4(8}fOTpcp)w@Yg!2f#_(dU@PwLXCJ~pN508xo#q&1TSZ8REc z_0uyfk#j7OS9`PdU>{g&3!3De6|H9f4X)Xvc!KkAaLIA&+W3-~l@otQN!eBJ)xJYe za{NBS@P|33?;ki}@lgkYsgc@YiVTpC&m=goi4bHfk`Vh)RNv9Bx5UWRTj9ZXGwOt) zx=2gM0f4Q8%3d9}3Wlu#9o2O`Tn*x5kB-3n#JoEbG^oP6BGu|xB=CFEHQQ;-p7lxn zR;Z*1c2yRx`bERoQqpCp!$fMR2F88C#0~zvtQ{4kTAOUJwo78u&NCEw-dAxQF3>@$ zSr^)6n}$WW%(8~0QhS$uq9QYl)05eKg`45S`wqFyT%InaGUGM^luH|aKsPXp#6`An z4bk;K^Oe}e4_BV+X@d_R9_*$@8pa8?Kt9GXt2VSJA-pK{7O%c=aEGyy70!Rb%nKD^ zjmP%&rP^QEVq8VQ6jNWsKM+-4bjo$WKD|&ro%>SYHjrV0wh(9U(Fp}xet4OE z2PgwYJ)pCT9+bJ_mCh`jO@F!h07LGdq~g;F_2nZnoEBGb*NHK*Ts7G6G$`!DN953d zOq~mQ`Bd$Q;Mc+M@nTb}mh=L1ZotHySEnEECr{Is6gD(H6P;!f@sKfAlOJg(Y}9Zs zx=l@{SbW~pU%YdNxt0;m7bz1!`j<_B0HZ)(MZy##Uc^7-C0=yl(#9SyO`^kKJ*sLv zSROx|tTO*{j1HxJjSyt6xk4{O(inHwVw@rjE3`Uc0EsKvVpTx1Y?t3ov&9x?jj#Mgoq!~2{ zE4!-S37Ej;srMu>t{MJq6`8sPIKmWfeOU#AGpWeNzx}}MqSOE|B%4B#;nTQCig9vs z6sZ5XwROb_RvVCad$7mdk*Alp%ek=^t@S}qk9d-*xNQ7PwO8=b28CWRQlXgmHR$HN2hL>V28>=tLKM$eWyr|M1?I7{r(;%jIZv6 zi*Y}-U^PYPDsD+n7(W%2+`F9ExuD!fxmxFwwkaYRTW#{A1c(L*k|EKN1 z{=5}l*D^Q1)xAYB{*fPCL}iC<8yxb(B4KiK>6IrbS++vQJFOK=0LfomU4v7TQPG}K zoZ$-Wi|B>rb!B^moZyn5A)aMmbkDJUCE#~{n!VDOXM9}eT2PNN`B}rX8m9NdW)OC$ z3bIsDs26CCA{_}0wm|m#d#b{w{1*`Vb?jJ{TPPAqO$e5p^sjG2b(>qxK@nc(3sg%> z_kqOiA0pp{{W>YDn2On`cUa$QH0)YzMAf-kj5Aj>Z+7q^u`209zbK)c?|&yy8T!ja}pFI#sozt^X!7P`3ejer=TBZzjJgw;j4NryV*D zRQ#@==DY?IZ?EuIPLI`GjEcX?HeWst!01#kn4T`0&?%90+uDD3$9sit8`)ZJyFyJC?H;_A10vKu2y&g7m}>-RMqOuCDry8Wud{cg2K zi!fp1MT#S4x+A8JF#Z~n@0<*#&X+bu@9n?)*oK93Qu4k-klWSPQNRlSZ@d*9*J3NX z6vsY|RQtXl=xEK2RqW7r(CW3JUdWW`k?63%Q{VfLuMLeJ4|JDbci{e4P@))IrPkKKx*f6TyBrtTvFwU^Gmav zh7C&O%FG{Cq==g!sysXX_C+^PtnL_HodPIk@Uf zrco&|2fSeXp^zIzy-?b;3#PYpQyluUD6&*es8=&!r+{za{r-Oa^EF_n%jU#x*{Z)=oS_ke%zPp=AUQ1Jv6CB)a==oe=3az>I{&T57@uJyl5#;LyHF-IzY zhZejxi4$i+uYUxMiU*|p<89ud`JDCw%cScF;+Yn*flM(gs0iM#Hg*1Z`vHz3}0b`k6;X#E{*?M2YJB0EpDzSay{+Y4l!%~BoMJz01! zrUdd!v+(P_33Obk*ghQe=@5ZM3tX_R*gJ#O_P7Zy$baOHQGm~re2;rVeUxoas_ktA z#lC;08u(KY&DB4o^rg574=fVe3h+#jZSRH1qA`U=@sD>(hyK+U{}wDp?{uK@8meI& zbXU@r#NL*+7sif?h6py7$C`jw-UQ(+r-qv33!uf+(qitVrNyY2v_#5H)x3SbI#v0n z*Q!tmDmvLo?s8Z=N(Q2}1$=BLEn_zH2V#};YeoBU-rF&U*2-xW=2hEbJm-VNA3GYF zIyoW9L;)z6wb2G^>Nr}>leUVk#HA>M;;G}PeqW09MfcwtrzC=wvF{6_d$Q*XxDJ3?_I%=ZY%Nc|QZKk z6D3iF1Rr@^M~=215V4>5v}Z&|D#+SdiUX#y`3S>&O+c8#yvDt=m)ZR3OsmV#hl}8O zL<-W`#vc#vq$()Z})3v>Hv&xoMC~6n^uzhr>45bk~)F zhkusOFV&w%7|iEKDU22~4?Nv~$zoMjdm@X~tQHS6Vc1S8TjmCzL!x)^g1rT!C{2B> zqbS!4Abn~7V*=JAKFa|QUhi?P9zK>`xmgFHYE9OF)zUOkXN~T7&`4nc2~$1zqc2LX zg&g33eN?n(CPsIJ!3`I|9SnkMdjubDVDLdQ{2|E)A@qw%?J_`&fv}+dJObt0_S@8U zcl+Sx8WeV9$G&}yI)gV0UA5o*SS>no-f(!JSZDT0vDU0Hs4vZB6-lxxlv2B=)gRCo z5umRoKwny*-z-Ad^p-$0T?RzcCjW}2ojnD+3xw{1b-b*A1(u6cW*!}4_d5@mXWxd; z&TT~E$=7}vKM&fYv8%J2XGmx!zp*@==hOOc(jhLD}?2_gHwj4Nb`P+3L{qU>ua+c0An zLQx^h*eC1Q2V?nNLtd}&9dpYJMK=#r+3Jd&H+01u^BgV zKhfPmxNF;WuC!S%SOZ|7kn<(1*7{~yqGH1Ao;onQf{5N2&LjvMx#fgbf%(syuQu=; zR!w*;k&oJuu>AV@!1NQ9JJ_Y|q*2}YWAEG?# zbl9-9VNHLgFMN)_Dc@%iiuKC6HuiZdM3&rp@I!O$6%k8JujpSTxG_|rlaM% z!eah5mW!ga{0p!b*_Odr)iWYkaW0kk7lEeFCvVS0DnH&PUT!QwzU@j>QR4#`MEZtG z=x2&D`ZJ;;XOcI_OJG*kJEcTdB)_x=fU%?$@;H_RL&;sxf9P9Zcj&`ngprkXJD!vk zE6oiJe+JzB7m}znviseL^Ch}Hz&fY~>>*f(x(uk&m4byRf!+HRn`WDYYG57YY^)q9 z*ljW&y25n>oQkJ^J$jN2jLQU~kf^dzE>Guqgk=ez2BsudVQM`uv9AoZZ9UL=2K*CC z=^)a2KP)_H^a`t;jMQY(j)~;%sGph2ZHjxhrKPOFKWjQfU}khA17=2|wBvkNfYhrU zU)`2x{MT9}1A512bYyn7ANTrFA%7Y?mWz4kO_pz<7*S3bMKWE(NB6)`vbAW{;`R&P zf2vT$ODZt%E2dR{Jt3g_cg*gdAh4COf4d?XjDb5`XomSS9A(5a%Ya&WIpn7ivb=i$u%6y&frty?rLxVXd~RDdW`=q}Q1X)DyN zyDF}sLk~L?=qS4F7e||~N*+v4c_juRDesgN4Djj&@&|@GbLFVYOsf{tI)(cEj5D&w zHxj1&`&!^TF0WFALOR$gR323ltdkp=*2`*7>ncnJp8e&!@`%1^5IsRy?ByQnLC6;A z&D-s@I*}{OK51Izd^WS6W&!+}sO%?B1T-33Z~|u5JMW3k@}AX?zb=+!OKwM$I0K~a zinE$o?n|O4_<~wwR^FFUOA1jdBV5sg?L}QdW9iblGI|A@dQJ0i&rv!uuzdNDTZr(X z@^|JAwT9Q!#G1k?!tR>NL>fK(tU3So2gdPZ$GS8btw4|&<)GDz+ZErrq`TJsfCb1; z>~I`Gm%z-eXJ-h3mPlLaLxlIbq-L^AV#HTA}8&1&` zH~al(@zvLv8V{7;p*b1gH-AA{`7Ogm?OwbkzduUOhdN_6NLgF*ccOLQ=wG}pe zUP8pT{#cj|I_&&xM7n${)4ZW|lwS5OMIq|y_aD2gSr+|zhI$5@*`g~e($}y7Y)6`9 zX~@G2snSlrvF9GHY35EUTOlh0)+wPr>b(bX&!`rWi@F?h91hsCzsC2r$j|?}vn{M} zcnc|Cw}_Pb-fP&kGjMdae<=aVS;TP>WICmwoRfF;p?A*6F+eMz3i{AA%w1k$QIQ)` zBG7II^~*pF^>~JOy)gVHW8>2}$e%K^S!fz@JMJiyJNfk#`Hj>f*I5EnukQmEJZ~s6 zz7<~N(|zGB4B5kQ;CUqrhUpt5N9%ioZUF9=-^M3I;J$6dQPSc5@`$A0#tlj@f74*J zt+z+O8;d2_Vw7m;^pI8vD{gldIgU6OsXoG82ateeyXy*0s#my|Qc0qgyOl4&U3eFH zwAbf$v^nN;&#*V9b0E`M&6$*j&ryl}X zy(1-${ix(A$v6v?OtoOzF$dA3|9U3feYF8I_305kt6-nnA#;xu+rUzOCuQ0(iqeDU zjAkY}xDPx774oWC#qj?{D^FN31AC11Q0iKXldtMkyso&|^!sc%dCD;pe#?DNLi#+qTs|&z_7VvFpTDj?Tk-TuPvFx>FcSX?kwt}R6;}CzS)0y zAbCdU2)nun@X^ zw}jtk$1Dy_iQFo9jgJYvv}0rne~r8UvTy(89lO$7Pr0!hr^J=;P=hzBvYGBK}{@=|{<{3nymKM+V@x7IRF0-iLyx@u3_TV-N z#j|B6P*yOr`gMR|N!Bb*3VyuF za{_3ZCjd{t95^P{ef&m;62mv&om>EtN^t!DbFbn*%zqWUDF65}-3^L=E+9}&?rTzV zJbQ^n#q0gmZ-b0k(XI}(7*CCQ_$|MdbK zzy7~2Ak)a{1pq7=mg-H84d7ZLruNx5SC)NWrKf7pM&01x4>&QTp6`fQ#jF>&69T zF1v2-sJ7ayhpg?6CiPw$FtvjXD@19}lI!w;+tIzr1R;#NQ(_h@Xt&!6c`%@G1b%4@ z2G~al&qrb1j@F_O91pv`e>z}t1+cbzG7io8$bkg;!)?Iwa9v@MS1C2OTe@X5J%F@2 z>mb-+&MYCS^h1F7#$GRjm}XjM)X3LE@dNOie#Q?ouGEbz0sERzRxb4_V66|>=QvtK zVXbnpt8?QmxCHDf&TMZZXs;G|u)iG`w0wQiO>^&Nt^#HxYab&!C-Xk7Ij_Oj>WwaiTn7};35xgwhV%`V| zn1%cDQrJM^V0wPjZD^DGwxfEE1WayHvjipwS=9^^$^b0xgBi7e0|R3SKUnj~`#l`d zrFO>cv`+3Du(l`}q*1t$-;0p0g4gaWtfDTCqs;fQSeLIWn{MfqNO4%kgIq7Y;!V@0 z`A*MXvdwQr&DlQ*QLQb}IpFaDkW`@)fLy9=XwK{5q5nwmI?M%Xx)v>M-*aTxuM#Zf z%#9`nv1Az2D@M%4RlyU_CLlK8Vf2~u>6;QfYOT+Nx_df3g2Vm|!_`(LZ_Umqsz}wY z9;0CnEnpaK2P`~PNEle()Xw|}MKH5sO-QKY<{)EW?=@}BWuoEzTME9z@NOTA2sSO{kMrFv!g!tmNPavcUK^{9p^AnZyJnxI;~m>QB9=dYE0T5`Ew%`V9E!6km#y__lZC%s zHDG%UgRzjyzT5a1*SomYbbC4kc)gRFKO&IO&Hxn4MoUHtjjp_1-ys4Flhv#Z1BfC~ znvx*CWXztuuG`4+w>Zw9Q2$3sVspNFSPn9)&gXLwFuNPScnN6{wKT{b=S-8UUUy4e zJ%ItXb-Pz9ls)aLw$`PcYqY9#a-cn^uV?elucZxSNFchBm$^jPQTke+Oh1CcljNu%dc!PCyH z=r=nZF~aj=j-#_xYc?zy91qXar{U^Yg@pY7$N(j@7yahzp9l%jT&#Oi+zO=;Q0D}4 zbm~Y&=O^baWUab0%4y4iAXCZ^1-Q^#_W74Tt{fP+2bRMaA`}x^3)Lbx2yK+V(nc=d`o3vTc*;Mg>1?jg+GsS{cRl1 z{SY?rX3Qvj7T>lLs_=9VolK{VpYV9n)f5rq>He24i45NT7#>2%=+n#X)2aFqn*b%&5EBHVt-4qquTA9$u>9 z<)V$yrl-oLCHafYl*MCZ8;Vg3j-VK&QJ#Qdmj7DwS& zhKyBzj|a2bRHsFUl-)Q(4T~*0#l<^hM}qOOtPv0jPujKJGM?_P+KY`A%Gh?J zI>*;V+;-znNYF&hw0yie69{^aR+S^%6!NA-g|;9#(d0B6Ud)Jtx5q3133^+!Kw451 z-?$oh9`A$=eV)Y>NjI}JUB#C+i>?TVyupF(ZrlBR2<~9-ZHInNd7OrlR)1%q`W|AU zgvQgAj!cW6HO*j$^FOy1E|s`99(1*u5lX3K4BOGs_ulMQ@l%d(Y$nekc#Acr*^M2& zXNrLSBGQHW!AhV2$~eDSc@=1zZ4UX4ZgC7G~OHf+^01 zMK1Ry8^0L#qwF>TDZ9A@M{#-UKqtz`ibnLsSVbvf3baun&_+E%Co@iLv<ws7BbbX#Ad~jAR8{yvmSAF?Go_|AH%(O|JhCv`9+J zMU!a*DPH;aAE!u)7q2QQzu*l7Lx;*4rSJV-qU7fEG|v^QTlviYfxLtgK#T20F}TdG zPfweJx0Dsa&WoAlnCWGy%!9zG8ukkLfobVU|2^QQwZa`!xoeP~kCrVC_K{ZLVI7z4=Pu@u*9;Fs5I%iZ~41M9Ozty((Po1O_)Se9x3Nha$4S&@R( z8II6tH!Qt?llQYLGmdUxc?6KuH+Oi4-Y>i0AZ8@cdfW62K_wxbhbRFSDn{cHftWrYWI)X8Xbo>&Wi#M*>BUyE_uW@o#(wHnl^|}5#G6iKYv=L_K z5C=mWzWq0q(PwXReGeVuCd$8m8rZoQ5FyaR0?p6w0>v?_HIQbNnJf#=%=Str8~E-J z2HyHPoxE(!+4AWHxALf-+m@ zISi80$=%M$fE4ktyB8Rn)$FDMxIW`JwbAmU5cpzcNPEHv|BbAvC*F|z%(-TI?=}IW zrui1nGCHz2epY6~9ZqKYwQo>q`Nsxpp?Bv?Q;AoeM=Lw{CJ|6&gFgOd&M^o+=ifH~ z--W#5mjISBC%8Pfb`NpO8wVa%A@B{)(N_VemHlU4Bw5V}a#<9dLw~Nl;zDorAY>4y z(!vDmfGmByjwJlb_BI~3O#%a07lyuROG0Ree_3*ytj^cFNh~Lvy?9@$y0NR4IMPZ( z1YCzk5<#&fuj8^VSk;A@S;F#r&mB<>x|X&}Td&NmxFIH|e(+hm zR?N*O(>_YxI1ablz;OGxxc-+J)(7{@MVjYSOUwY+nf|v>+P0RN@3)2vD>dKufEUJm z`RTCkcX03Ey9Xs3>&n<0N7-=9fI_~l_%EF68mC>B|KX_Y>~ah7O7I`go1^q>{Y+F~ zo4s5fM0z~RRyW@~GK;fowZmL1hTO=`ttj^t$(0{&M*tk%4-{<_LF-4R|@7+iME0`Yld{LtzQ17anpR8CxVVF zgP&CzTrXB|y;7wS5e*_uB#ODnhnFP5yI0)O9|G2gVA0w^xf4$bf5%U26Q@|pdf)*s zj`@-`Y_Sy^WRowyBm?Al31<|NyK2}zM~6ssI_eX|!Gn!DTsC37P6gk1A-mCVT@WiA zb5FFOuc4naMOspRlYm=^TF4$)~i58Dr?o+{PY3}B8JDUQzQb9I5 z239>=+A)I%;@H0VMY;9aN0=w?HbVP_VET>>^5m>Q<_oWa`;VcLpFy{F?*(ri=+@vf zN^8vyQn8YJS7_OW4ez*AeJe{mQ>Cy251EpfFZNkIm-`kmeW*bQjsuZ@ zE8_#i;qyZGdGoDVqWJhUrZ`c9KfDJxkZQ}XY1W^5I1Ke#KNz=p2~t)?M1;i}z-5tr z<7S!{AK@9Ryw};!bNo$h3W(OHp!3~tDyxGZwr#o;6L=I8GJ-oS{=Si0Y2_22nWqv+OiOL) z+aMqdxmGN#=HOi>t#;OsUc=fjn@H8-r8`l>(htzJ8AQ;I11IMx40u6rVNj6Nz-eB7 zAG2=WH;&!N7oZdWN_LyF(vr0IHy2tj`2Ba1v2bUJO@hrVUdJ=R^Fm<9e-*{oi19u z$6WS6+o9{56HDESe@Fjm9%p(5Qi*KrB5dpxJN!U1&F04uj*9!c_g9-vVjkzHj#y2E zq;IbR1jvCkW#DD>4-VPy0n#jpi9cC|JkiHVW_m zNtN^|SyeK5!OJ|errR;2#MzPnZX=;9v|CH&oRV$-7~wm@Rk=RPGuqG00mG*qrGX5u zN*joAJ}nFTD7%B{n0Ajq_YFb1HTkynPWiJdLz-#?jfyIUgnz>xRqmGz$a~e#VGWaL zq~^|!R2Me65Pq*b7$}|G14EqTv|JK$ZRGz?h!YOF>q|7xx0fDqN=E$at+()Q?Esfk zYJTJ)Fa_R1SEP#M2i|!->qu+=<+5Tzz8gRGxPuW+_UPiuqBd=#ArCl*Gc6y3Lu5M`e!+6x-66r?aerT>@bhP*^turQ;YY!OvD(e)kP$LrZSrWZuW1wjRq?I*FEl7^-K zI5?t7(7}bRkk|3wNib^{;sOGhMjop*C`f*;{%F~)sLOuX%W%yLxn%a|r=A$#{+W)F zHTFy8VxnhQs8G9}ciqRADFkF$l~(kc-^E#9rRnu z%wtr+0}_MW#Nf8i{R5L@0E%+VcbQpp^(8;_^98d=%Ce)2Z!_5PJ(vemJa1*=vO~80d$$5L9Hb2%zs!qn zZAiRzhKysqu6g<6ZLU2Jw~;T?7Y(G~ja|dUky#p&VcHK^2u|P>;O{w)`1jk0MF->y z9pt%;0f__UtVIcP!TMi)aQP|4JI~*2YlsfKAkO#bRyX8ry$5>;u7r>(9VfUF_UqYc zj_s+$zOm8DY(YMx+A0F4fWt=s44IdY5UBzD>*H1iHsRo@)oA*iEDmII5tb7ww@N-Lwkk2oI-e!1j{KgKVTL93GO!VZ_rn=tBU8VVhP?oYtm=MW1K z2uHZv^hLi0%S1-RO+lH6uu+DhqRSZS@(B`4V;A8syPpQcFk=Ad!?<=6w?&aU@zp zlCmz)g2h0dtVVe7^DFSYMe!@-Ba#d!6@ak%_)b@s2tL{(~+T-!Qf zpL^w(Ur4cS&R^UJBQ z5rDa2RL8P6FIPG$rwV(RO6Jhva_#71LsbH1h7XaR??KLA7lNUD>w4#marN7$({sAs zLWP_lsn5niFRxjCHX^@I1rk8c|E^naJdAL!=#R2v1z#kki7eA3X>Wg4=;~#yJ77?A zoRFdGq(us?<}Mj%XHgG!w;NqL4}J^&(t$?PUODF`OFThT4w%p|>EdA;UK+5T0FAyVYRo<5 zVa6HrMd3i4JZPA4?LnhUk&2PXqwZ%GWbGAh%?{J9jZa1?P3l}7+=W>DfDVt8Td$rT zTs|No%@4ePYbAahV5)Y-HW4Fqw6qXhH^(I++K8KE9&e(mg5+)I$Slr5I1QxCEPzPAF0!xo6nX#r5 zMbUS?tp})@_#S}iGH`Mz>NH<|GP|BIvUgwkaK4m!U+=5BOkLgMAvfw_@-w0}khAq5 zFP_{&P7y@)Jds+Q(RO)NU8(mcRn|lslq#!Nk5My<;l5OTW7i~cWI1@;u`V!!N$l8^ z-n?SHiHvLkO{rs2U&G>vG3tnOBrSJVuLYPa)R*Rs&_L3|#s$%(x8Hq8Dgh6qX?{+k zC@q{e8+uJ2eA#60x_#(75TwZff2nLX0r{Nt6<^I@#os}qz`jubBuCA1cJw~hd&l;? z|E-ktYP(5DcDBz5PbB0@a1l{#pNv!9T}i3!8?(z2%-THSm>;H1Qk`5$)=2<(@e^;w z%N;y}NQYNzTyCPR@%hjS9yI0;Z7iZCr8r8qCQ@@$Brthgpm8~g=H6@DxxoUWyAG~S zB2ibj@`Z`{Acu)4=#!9C1p(qXw@uSWUtLyIJKw%_>@*OgGq4P(I%<|`kG&e)$P6l_lb4^((7UzXKKzu!!9T*U%MJfIKq`CSbt z4OQo+c#Qk4pxv%@MX|jz_792Sm7v@tUa_yv3s$ksVW$w&sCH{=fNB#FBbLSx+&Nj> z@vmj&?-;6FFfk+woou1i4u>?HqvYox9)&u8JFdKNeTnT9_$4z{Un1xmm4}9?VNwc;y;1W%_TQwSb_>YFGtITL7l!lN&DBOx4egM0*D8H5#rHw10&-5}-ulk0P3Qsn_5f%c(7lE8N+^R8sz@zbIUq$Omb zjTKhs&)uiGM^BiYO&0nWg?e`ZtRUHEa5=ciT0I|6UuElKcd?S)!;J__EBI(Qr4eW6*a9mrf)K{aMn@VNUU9I?V04;4rff{h>0tJ;#Aeb*X9xLW zz5q}m@~Ul3cB^}Jmh8cUR$QMf3G0WoInWS}dIZze8t@_MHr;xa#%hcrCic^ls|f$$ z!SdDj%;3)tn#T=ZBqXG9bHt>uzc8Knh)=1aA}8oTQu}W+ zY!Kfi+QP(Ec^-6J7pHs0v7JmlZIOR8u#H0X0}zQVKD3n2tU?THULW=1kuU#<4ri?? zW=v!k$_MaFCB-*ho$il_+IZu?SGoL_k;_+W1HM!xo&b#a%@v+KstxyrymsD01N(9t=s&0Mt7HGE8MicNqNEAiI6IRiwAbVrcH-=gpw+ z+J9;e8eDWZpr}h&lHIT-2)qkHDqerMov^#rId<6l+_y}xJ?l^*Jj}WLRHo0y1^gE@ z1fqBje3kkJKY3M#fx+Rn-r5kxo09PstJ6b$R!56l-AKqT(yD9Qiy2;v zK}!NYu8egP{d7u>lZcd~!$k$;{(!{bmetY55hS2H)HS>6s0x{nAouyh7oR~+lHDia zp)Wz@xVL#Oi(6s`CYmL~ft1F`NC<`=My@_Z(aVyR1OjIc-Hu-RQI5=%^K5rJ2=z*- z4b04yhxgs_OY9AT&u6^)7)6Q! zRddcfg*GaxU#IbDvKPq8H^PhZT$0Ipfk}miDyjUb<5yK|HpzmT5? z0$0ivB-hKytM1ye>s`l_HPcrs7Kr_?o2WB-OXdlwatL&$X+e+@2lbCZ&I-79cT4}` z=LCYgH1~8yLelt&)rx${;`s_gE;k>$XEjW(o=&R5+u+*h8Lu-}QW$%4pF&DtU zafhijs4ez?9G5RMT%_uFg_(&!fiS3ys=6>moG7}49?u1t-j#vMtEh`mLWx;Gg?$-< zv*6{>g?>;4QK6o9vM4IN>XdyJwp|j`Z<132IkhCOUw@xWfIhmbE_&CZqW0$C@l)+r zMS?j0Ppe{Dkw~85Mq&Zl{}OavNnPx2mW(s_W3qK+UmyN6lR@z?T$tSB6KqZ4T1yD? zF%TB??Z2%t>G85?>kn2Ruc1EllM=|Rm6PA9?LB!$>XQUiQWZqJy2CQYe)KHAC0~Vy zh2!P9KA&)hEGOKd0;ri*h}TTR+tD#ucPI+VVrhZ0SRm??0y2G3W%v;%TQ^)Z*&?i` z6{PjGsvw~}0UEMNIczv`Uc?G6vx(NJ! z7pBaU_pyPYK@<~3&q@rnR#%rM6ib1^)Yaw5E3HRIkN50LBIvBTx+wXr$leprpehUv zQB)TNtRgG@c3YdpW4OyMO)XXa#MCTAbNt9jexDHy%5OpVv{g2q9~Ie+A3R@N&FZK%b1I{U%6kigwHw@2noDJP296zQF_sms*}>t4L5xN(mzN+=g2W5 zJ>-EjkLf)b&Fec8ql3u9GKO@N8kCC;2LOI^|fIpbKiS$7&((= zhXlVhjrRLk;L(6prDe_{3~u)*6)uk!(K5X*^mXiyg96VKhN&>iE3>$V#tjBfPE>_Y$o5)Ye?uZD&$rg%2wjx;O44N*4Kf6+c z8R=$dRGhVF`g^7~#1#5@aIA#G-aR!cyH9D{HTB{CP|o)5(>FI(kX6V}0%K^l9<^>d zM2cLmUYA10>}@@ljnGdkO*ug87B)3G736P0fwWKv(anGa8ql7QHCe zC(HGjx=h-#j3TEFV;4KN(AE1J%iFt)4gzPzHPN~D^8;Z61GDhrZx-M&UVDLH`u~{q zrsF0dkE(K9owdO^vg&3DsFjvFJ0KloBG5Ln_XeJU1HV4f#RXat^ALUj>mxbWvP?Ya zDl7>JjNfH(8%3BvB}NhEEN>{Q`=;Au8Oz4x-|>mN3Kw_=g(i=XQzYO8Kp^_A!Ujnr zrvc=srTo6nD1u@of5YQ8r1xlf8*3)4jjY+P-f}1;3MoBz5DJXwS9#2m+z*prxYJl1le3}iJ|NH~GR4A=~0zxxFv4t!u@_FoWzvAGyUlEyK z$>8ClN~FOiz^Z6;D*B|WQqxmu{OTf&gyB`$k{E+mBmC<)*@It3kqu!lYPiIXHcf08 zA4+I1o1Cd(79i*_JrsGrucdR2*;dBr%X}v=Ir2fVDY3kRtVPmiz$AhGDgPjNC?3(c z`rv&29rS}i27U~E{rX?3Y-_f~%D&{j-ooCZZG;c3qDMGM?6nR{!-5X z;}H4YS)Un&MG1m7N=CjR$ z-#!%9Mof)U%cS{Dh>U}C$yl6z&1bZ0Jf#+RjQn2!Z$LCn2o{ zN?!|tn)3ke=D0?_`;%P#9U1o@guzzy%yCR^xdUW6Juf80+7C`DZ|`vPzfn6rr9O4AqPhKxscb5x|r8+X6`VrC~U{2J-}yA?@kK8D5_Ybs+f9r z)FvxKNGbb|r)4yB1DDM*Wjw(h=enb2Ps?(XwM)E7a`N2!BZ0I{HYd7ZT?={>AZ zRbYC)zeNWli5I;_wYTm zzgd_UpPL#X^pRy+%$6g^icjg%;AIviCJSNLFchk2Q4xl~VZ z=dp40OPyToo241}1@q`lEE^HaPcwVD|P#68F(& zE@wUnve8vRS>6~FPH1W83chgWFgicXp2~ddbZbj0HeVOUnu24PFf)uY z;57Gi)vpn{?kMOPfSqM@@0@(f`SwqnAJsMkCNliCBUf-FNo_PDu~)45)JfIcQ4)r% z5i$Jn%`9!Yc)*1>e%*#wXElB}BD3LE%2GrPAExG(Yqc9?s_XgGRFpINPTV_rQ>6kO zBi1IkBl$f#yR#NLT_bFF#e#tF&e?h|x8=9Af~MiNvY!w9!w= zCmT!RE6Q(++9|0^JwOxZ8VW2nyz5_qnJr*XEnAMdabes%NNDl%oNh7CA!0(5g5ENd zl5Bchx~y7`rY9^R-T9*M*`1!x&pU2(R`1-rl21kU;en)Is zZX=L#Rlcn&6N#DD#t_6%^82qU9i^`yy>rjz7`?j>Y0`)BkG6?&$T%+w=4@5*<_z!P zN?#LD+sPsgX{Qk8SIwNxaoKxQ*(g;XTr@DG4K?JZVbnOh4ytkD^7xGoYkrhVBFZ&4ykjy@Nm}jB?Rm`u+lypY(v=3GWWiVEk z0sPTigAX+P*Pg)DG{+8b4G+8)R8}U&R+{*4Vx5v{4Y!wGgWCNQ>km9*WXB}An`d9e zmDpv8nKuU1e`b?LUZ>`o7>a8#awX^xdO|`oX)wn)@Vkv!5bm#la*A6@eOmN`v_vDW zQN;hesyj;5(CJwuzqle((^V<^kT|_796)cjm+dClvCrj$WBP=}UHW2-2Y7L4g<3>X zKi^oIVs15guk>XU{@7-OQVAJ~7+ef{u6mx+o}s@EbW0lV|)c1V}iSVe99D2B*<3`ihm_0yvlbH&~}(~~nSq(?}7 zkeXO!D!2Ag`Ag3t_rpI*Mms%Ac1KV9m(L6=pNZ`N(H#g1j5FzHx0_j9g^wi+DP(tyX1!i^pKAO~*U?JC0S&G?a6B^ZIsEB9L-&nVG<}U>& zxlcZ9T2e7j0sRbo^HB_*=`KsacPPv`Mr7fOS)|n-2OXss^i*80{p692kYGxj%3{8m zTE^kIejuMA=qz%^*jf2Z$AY#E<3?fO&2OJ{crNN>jN~VVChXSRXK1UozUWhy?-{eiuEs;wK0^^}XhyQTv^_4nWax(N}#0e9RuabFknLv)Mzq}}s0EpCLEJ7rp( zO%@>$d+?<%zRDM@eoa_?N{F`UQfpn7Y&tw?vM^pKPy>v+@a(<>De#BiSGB#i6X z8;(KrVE^m|4Dszql>1%XO+VnJE&LspSd(&3CxwYSc&LU}{vJm&pceXc^|{_oWAf_r z*i{;u=8i+%of)OsflW{alMTH7`>ll`|1?wV&Vg?JO|9^L-d9=I=dbwJmAYS8VMfO+ zUvEaj{j1ND+|ygS$ccKC^N{1)TTBCy;l>Q`NIktfXK&<{MW#tlc%{cR(6{joUW}s_ z;z&Fg4+JcErlR-u7kwXH)Ug;%ke~1f2x#<#aXuU$_Q<&13Qklbt+D9+`4@^@lLTFe z!q?Xf4Ad|FRmMpY+pVY<;#nNj(Lu(mt6Q-iroN7hx~}l2|0wf$Pti%cld{opdM|NAXv-T&lam2~cRFt?zommWXZ!v$O>PQsnqW0?Gw+$4 zYfmD-r&p<9*LBlw*mip6S)?&ydwqIM%J@fMvtDu+%bB!V|3+9WiQvU~(*+BwzBUGt z&t7Z#9P6S(U)vZYe|oLeKAmkTPKzb^LQ9;=O;$m7j%eVmGkWUIbVC>p2oz$+-=LFt zcUPfrVuks9I8tMeJ{TpG5=J;z-q6VR_5@F83rjjb3wEPVdr|Ap{R<4K%w<1C9_R-W zb8wsN$Oq9lI4H+S+X`7euWH8G3uPYDt<2#4CV5V|LMu05^Z^)B<@G;V%rNj;>iOC| zw}i6|&r8%%GEGJT9-fWfo{bfgO@8CG%oJl2W;`6Y-oDbrgzg{`ejbi)T|JrFr(K=I zM%qFm_sqg*M*UuBQ!!)6Kt+OML4w7Zoz+2)b(kC=-xnfjw913=mSeoho6*n5XRuc^ zv1z?K4jzW5%{Ku9rf3=!XE0z&4(2tHmI@4YxWc6ifB^EpyktvfZO?$rE~M#~_F?0e zcF`B;I64MivaKe$>N*HnR!ku2DOQu-F1j!yr@dX%Qbva;SwhLnlA6oOlCmZo(0j8l zMv>%y^Rsc{V23IGnfoCxD;Y6MdG2RRxW4JLv7gk`gogA=)`p@)kvf`^VK_t~5W{I; z&~~ZOSqaXVXm#TxX(Q+2AKG5 zgig+nzjsKm;c^+9AbpL4>PeT*2PBucqzpG3lZmXdQOtEN93@?XH;=oQ`S;hv*aU?H= zKYLTD8(Ps;?&;>PUbv_rW^W4cYx^Xu>IJZd9Chwe<(f%L`)D39z&}k`7y45pEll@2E$ywR)^Z{QG_c$3QoiFH^KJcjM88C+7nhoiBWH);&_}6p! zaLb*q7DA?$4<`;NXA{55?WkXB_}wnny^UJ#df8v~C6qm#w5$WT7G`Vk%GPgsiTQ_* z5-MKH)AiB!a}mOB(gp3;h_$lW(+TYC2)=d^nCvs+^%=hrO=cX&Hw6@U{ZCc9m(;+U z59*znM~z>1qjTx4+&7FK2q-lN*@qjvkVtTvk{7v^9Y5dtLlk1>?k|hbiBRkyi;4%0 zk(?&`&Qcc8FS^6a*-||mD|zz@ZAQ&wGWTdx@OG0-c)W|q@VjVA`HNXDug=RPr?o~6 zU6sSt#6OD{C%Z>lqZR_1mJ460BPAAky}~yxRQa5jOgNLe!T8jUHs`6n+?5QSMfkVg zyXdBJ!4J3n19(C+JHBwtmRF^95EOvIB(wXVszVhw;~gGnMUY46+Ko6--mdCR0B05O z;&sDruxen?2Fi1GUTf}VRkc^aTGQel2DipS2$BhJ>G%(f+yg6v-N+)0p6ma&Ab^d% zp)sB2Rl&6MwJ`lprzaL}v1WpqeG7_VX=>Fi9j*XuZjbSMPOm1)GJJ_}!hRmi-zNLf zP^`0Hp|j9%&woXvtGQtT!85KyFDmp#-rH(`b{>>{?8HES2=8>0zFB|Pi2Znlq5;H;IFVEwBp(^Zn75{EMlXQ*s znt&Jlp8D#R07tW%GjYJ~tqB%_IKx7!@h!1F8#BM#4Lp}>0(Au4>nD9O^IgpyDxUX# zRKB*hM1zwiBeSy9ez_U+ki1R^8fXK?4u<0w%|1$mSf7JKJ8&skBlmnv%9*9i#ea{J zr&si3U|ac@`?U%!0?Q{h9e1hd$(CvJed!UgVBY9As^A0-=CuqI4h)5Jfi%A}lvMl7 zKcJQ8-%472+=#-8_AhXOw*8e*@|yM1L5!m8e5;WWvr_r5k6WQ>(Vbe;#t1`XqY47QDni zM{crD4{|*p+s{tkxg^P5zhPe?2eRX4`5jTi)Oi6EI!90Z)yGGz0GYOJLU$hL4B<9{ zWz5)8(G2-bLts5(i!e%S+S!12rr7<9@gzLcpw%MK>4=sgj+o;Q!>?}3R&%CTf4=io)ETy=nNr2>t+%QkiW@aLHQM7MGi%k~DVis5UozHe`T33u6U`6M@6?n+Kr z20r3h0?E?s2j5l-3aQu2vdC6d6VuD~Zn@mi^Vl3&hmI=TNggII`D$rxQUYquptKLe zVr~STo{kx|jkTJsdi%ORq-JFsHM<#-el=vV_R~aYxBh?2>01j&$P%C~w(2(l9pt;m zFZFQ{y`BA!!4$4RqzLnrzMz#z55{O{_xf&v;Qct6EDL{gGwQL5UJNap9jAJPT0nu- zq@8-@)<;>cJeNYv&w%=+#;X}u7k!((@$`;lnC>O6%d%Y$-aY%9oK;S)uG<7KO-rKP zw&vO79o+UCZ9Bm4yFmfJHa7fm*jEgm0&)G<3v~mFCpK+%|2a}2#7yro2>p$0Re8`v zf|ufCr~x%v;><2nUxbg?wl|ri=13`Y*q-rY zCow5%9*F_qUemlB>O-#dzlCXslOJYQMGXNzgVaNdv9Ad`SX8EE{Sv(>neCd?r@D)y ze`8;_n;3ByqcoXqhf-Q+@NsBFW04*y1pvmOYNmGyD!}wh@ihJ7n`yC{Yk1EcG(d9A zJ)vw#5)%7uq=_<9Bg@-nAu;p1BBrFMybw`Ht@|apk;;x@>p9b-~v#z>d4#qzzj2Gz)PhyB`fy- zarV|>QAOYSxB*fkASES&(%lUz0@Bi5A|MJ3-Eag6l~RcTX%U9*Qc6HUI;Cqsx|<I(pp;PP-ZOB{Rk+S5w+2MwW#_qr(nZ>uW!UN zBJ&aThi@KFS-q{gUgctG*H%bt?3O|wo?B6#EHusM(#5IFw<%)vSrgTB&m1XAv{$-T zYfpc6s@^l-C7iFXTCFfxjhT5akDT|LwMA6@^%bXc{5qo{yE~`(B-j-$H7O=<$f%rgs@(Nn4I6}Ec~A_MPkpsTQ67n_Sd+}l zE2IhMTngvo_Wqk{G${j8jUXgGjW%pm^mK)ZM6nT(7c{^HynmVhoJsu{-cBy)0qc_mbf_ z?j>p=2NHfe#kLE(7U3d4EBx;yf2pKV{wD3=(vhIuhN`}NoC57<`$ zW5@-INlgJFR`A;&7)C;ghk8%2t2iph#qA2Hm~hyrDgW)-Ydr;%81fHCmmuxH zxn}8P>^yqtSFIFR7hz4cNA5*asnxhXJ-fJxAnaO2Ndhsf=~;eBXD4dbvFJfX)#uBa zcFls_{Oi&f_4D2MCz1~?7#nLAT_d{lSa#lwhW-Z#6(u86i=|7A3TXL>$*3$mFe@|u zO&nZewzP%hCr$k3;OVK;1r0kb_Wzt5m_G@54r80HGqWu|5q#@@=HZ*J@#VIQ0vBmQ zE!(6{;F{=vk@|yEG#1n&KtHu}sp0`($Y*tUQ`Rs(R4H^$Oa=pU&ov*D%rGyhHR~=` zM?R&4y{i2>q<2A|V)k7sHjFf zNVxhFIx}=*Xj;cZ+p5LHex7N~%!hCulL^W7vrScnc0r`j=S^(60#RQ8Cc>-@p84q2 zjY=}8=+u;)Z{p#*xr;-_|ioX1=#~o+!FfR^h zZu=8`mFBg25lbT(DVml2FLotI*REYYHLklbXfo8L9A|=vieBk^>t;DzBpKpa8QJY{ z@;T{R=;Hn_-^K>m^3PgjhQ_w_GhIo7wY`!%BcEj{pwly5S;^}E4q-YwmBWHl-j!dt z%*`hV$9fL3stHu=uFf+QIb6IfxK$`tH3N6JAa+KJJjJ}xp-V7`Shqv@f@X8*&Ydbo{l2wprtAiLrD%P!zrmxQqUQH=XiC1SyB?&BWmUPJ3pNbH6DYVF3jFnMc~f$xgHUU>PH>?s$L(n z$Jr4Iz&g&JQbQw9q)u4z@tZ&O5g(y3N-SuM5~7}o(IYAtzj35+UHuJ^w;R!;C22M> zVh%T3Ih^=x(E~`Lj?S?WHv{VTYeURh6qwl~3~D3h5}Npr2**-@D%3turF!;3{NWWT z&PDS6BOV&{r#CCSX_Yfz`l9OwXf-x5nR8J$8<;#7L1c87#yKjcBvG|Vgb`j~C(i|m zp(&+g|4>SmkWZtb9a#UA*Cv^M!$*FrX6efGWz?zuh6tT&u^AUiI@iMfkT9V&#B|P; z$XpS>Ro{G)fnFLT!28@S6a(sLXp*ZVpkpNf7^$%Q$E|@dl+(kd+?vJTf@y+le*jAV zRO5V-{{WQ!iShl9x3~50t}3I+s~E81xpwlrDq`32sYc^DzZT%Gp|$-A{%ZS`qPd6; zB`E+ZrC0k5EntQ?XVv-LfPba%bfsK0y!!qK>5T!YJ5gJC9{gaEkLSRj5;S-P&g3l5 zNr>kfr$L^FmcKJ%{M)`9N~NYJ+|K9+9B9?6pslVC7{7po7(S2?Q!C9{|AUA6FBLl| z`41lIx1tsxpehymEn>$7&vcUKC-7Ja+ROMYy;onUsspWJ5RHcD&|FejN$w7cm?Q;DZ zTK4X{%LKmSIowQR0qv{k(%cI+KRwwldY?Pozn{K%B!iZU^SKXDb(tqr7g+ok%|_ic z(x)E&RH>I_fPnM-Jmq*neQ&pLwJMAL^|r8cBX3u<`^7reAsjS1FGT0PE3hU#pR@-)2YbSI4sQgqeCMv6>jW%G zST!{9;;$h||8Iu$sF$6@{~e~nxaVPtSGA)^{@Yi>;fr?id{lni0j;5dQP#Kb86ooBY!U0hY5#1n8&!OVaX&=;R;2TmL`%9m-bNYtRiU zs#&Jb7o1*+{3$o1EdxCY(SGlGOTP+<$`dB-pg9#f$jqk%#;t#655y2FW;8Y39PMAe zTgpyFTle*#9qMK_oTj_Lo}O=?uF33bp?2*fEa4xXgNCvnMT7^|!Le%V_|?wj-&+dgy(U&yaHJ67yfbWU^{ z487_!h@j@wP*Z^b)&R0G@ zIYcQQZhN1sjJA1>-LmCeHCns8q%1AZw00OTi@L_*!FeDo%P|?swK!oo)5!Zt6F#tP z4VLqY30qq3J;b-)>hP>)HHKh~-kcni(^LK~EA5L{fR~oxfzI*9$BoUM=c#<9JF}fQ(D98(^__sqrzI+xTgRab~slM(gin zSo{(=0hfU^${HIm;G^~$liiLwhKWym3p!7InuoKrM48GIl1USi*ynTahiH>t%L9O! ze;QOkf=X`(y2K=dMr;X-VHzN*{xG_9hMV7<7>0#tiFlnJjh-YJ$(`P_f_(MH#ckj_ z^{$&DKbOs%Hs8+wXtJhD2pe##G2u_B_oyxpTXa?th=mK1VR6~}`ty)qCKon(x1)0w zV~S%KljGC&6+?54qtFrNhm5-(YDy972uo#39W!7)-+V7XPHZ8mMTKO6LLZpEo+YVN z?T1tu=gdR%T?906b5Hqu(B$Tbp`0)LWizQsL6>y3Waww{>CO16_)f{4EaM|bpS7y* zs+>}+#NsB&!FJ)&fnriFDC@;H0JxLlL9;Qp_D$oupcbI{`SL`!po`(7lhK#5>W{pV z_ZBx^fPde0h=ABd*fj#y0^C1%iq9_Y-onay(hdnX$B|CZUN6O$=DygFocZLs`57B4 z9nnB1*2D%Yzs5+1Kdb``oDE>@f1_D0@jXExZn6c}^ruklsB;SAzd4|d!yfHulJ7@U zR?z2ofUSadvf4II4u8!~FZBKVUV(*z@0siw`MeqzCe`VRRV z37Z-5l(+KW?Y7GgbXn;GNKRH5DLr5X#*51`GESu#SfVdw#+-r@;Nn) z+1zJ;3t$B0v<3IQwKJP@wxpf-3DT{giJ!@X%R5wqOA2YuO3$KBS%qtKJGBDI(455p z;P;QSm{}b`lzVsM;HD}$%y_-lIkKkyGvXak1a8MZD z-z~*VImZFuT`h<*#c2B)^&Ag>cH}+ zUWC<2S~yg4c1i7vT~kTyr2~gHSyMa4B7e7(xz3Z_{xBFz0S03wKq=R89Rbvg{v2$G z2#0&PW7TmCHPw%wP#enGQG4qqC)uc~Z-wxV3PA30Erti}0U; zk|>7FLA=^;Sq(-?2uIF5gv%W9)AsmG8x<9CXQw#S9W)#Z_28Q@qGUl3t#0@qT5{~> z8g`uL#3a83Y{sbNmEFFdtiYdKh_C~SEZdv?^OiGkybZ495Duu(wWmh^=#aN9UD?E^ z+^8C>dZ*ZGmxM1b>T$*=^QxL&jxo(evI#tD$uMYJC$%S5R_jaNMtYoV;2aSDL*td)xx9$n zEFOgIHSuR(hXw9;@Ux=H*zLV;ZZFtDx5k=Qo2x$ikfP*h%V7jV6^p&TK5&WL^|E#G zr>ab8@vS@7zP&=t+~MCM@gkf=sm_5o6@~^8EThXiEIlL{O3BxgzZ8L=km?{OxI~{p z3wJprK_@L&|4C;Q_P4NUMFJ)x_rH6!jcvhnbujUa$+BR#gQ%L#m$rFK7p>)kA@5!vs)mAiI&og2av~V%Z0Y*EN6B`PVpT z=Y)Fa%odt~w5fRN5fo(I>+Vxz;dSU(Pv(IQedau?XW~&P0o_K-?`{K~1~}cH+Ys^! z&|m-!%5x4T6L8E%0&4W%IGDoGV@wY$BqsbcuM3*&>H!`&;*ApTkkV7tvZs;!(VNyL z?Ge%C<-wiopzVKLYUyPS&GmNHS%)pf(&Q-t9^NFMrBI`0?&5)a{@L!~wuN7|NiuRic^=wr!C%MUW5pCuV#)|w z9QE&;nKfi3q0|=UH$)c2B?X@LAEcOl$D+@GrI8Es(LXB{%CL%l`!5YRn?!gH$@blr zNGN*Rw=FLF2ZHrGIlFq;*2u5&etC)ch-JXkVs!P&nBvg>wOWGF-nnBNsguUQ{up=P z( zZKyp4mY(r7Ab`YL`G=>e{Qkx(krQ)`Hnc?vYk+YFKu{DA6a-lW4C|6{) zLe+-#)P{3{bm0A}ZvgK}&I5>B!e`PT*OuVvKvjTyd@OrM)ZPoDp2hSp&VVY~uUXvF zLYNSyL9te$l>KH*GswX1jJ>21=H@fAsQ&e&*>fyx*hFe?^!lQ>&|8?{$%@40@v&r& z0=%5E>quayZ)AkQMG0TjxwifEda^}JMMIxJujojn0be&PaOCV` zES3WBNVVwx88E;**6!y?>8CTV16&@T1Q?}wC#<+M7Xty zs56&l*+11l%CNIO?un+PEzLT(o3LXJw}dMW(7Duq!{*1hdLxz+2eQuxJV2FOKG z%S`wqR0|VMzhdSK)_pSF&lO)cltB64GAsdsJ4e{x{=%y*nAQ?Ut8>CJIIzeaHa}WH zLynMLeBaM3p=EzqkiZsrKMkZqss)nwaDQ9~`9sKu0Ouu)^w()Bqy48yvj0If$*If~G9puOd_$Rk1r zhr>RygR5Kp2V}z!BAm&Fj|ePTxsTP+BtRGtU;#QJz0O%pk&8ZkM~-bFgFRf6ON468 zwB3gD^L8`%N7b|2yud-ho%!X%@Y7o=XREVKyCMQg^PhqiO8}Yb-+0O0pl2m5T2Kvx zA!XlAT_);5u_F*MoxXMHke1f3reTC_lgqfkjU!^1 zs$FY5+@vtaez)3pbp~Y-e|e}}Hug!2_S*A!f}x}x8<UIWRg(KswrvGJ z!@qw;e~Jd}zsxAHexT%UWpw{G&fL~QnnY{fFGhw%UT%8`q#yLuE|h${Kt?Mk?4QQ& z2l#-DNe!XjXF*N|Y8yzo;UZxs7^Mnn6n-1#Y|ZxvE##JYzwn-8h4a4X%Y5_$E3;Y+^OzcLi92XyN52{gN|yCIC$@r&-qk6{SnqYNK9S}2(;XZ{!?OC*c0;8xDB$o$8Wy?AiaOAfmq=l2dxeUnaZ=3llKc*i_2Ev zKu-@&7{Cn+srh-`Wa`;#E_?P)d^(Fly=kfjdan(l+Z|N9EN66qEFX}Lhy01TrO{R1Usov{BftJItSH^pb8VB?t zL$A3ON7D87sJ04}N><1-9ew~)9c@hsIZOuO<0;2?y3UOpAf2U1n1>2JuA*aC$XG)d)-{>~*KnFlHT zP-X+2`ri)MU=2Njj>GUu9rllEru1a&VonBBP0P7%l{}|NLUQ76Ts#K!)D534Sgc% z?01!ezHZV4^ey!1B~$YMaD~44aD~hOIkz!QDAG)J5FZCrNQ)G(0$lV%)_}bXF1$ma z=B9=DH(f*PuH-TI;db$jp`SB96QfZ zVA`a{=RD2f5&9rCJ-Qa85#_#mSUP` yQEzg+DmaJ9ZkvK+@lWPbbu&3Ew#F_`mC zp^sD^)}9ROgU_m8_mZ&`FJ@FLs>bEfY>{(@n@?jL@A`8sk~|y3=d^xeTXTn0NkDYB z7}`y4c**XnbI>2QY{Nm%SdxJB^!((d9G<_$PoUU z#nu>9DdW{ce)~S`DMAJZ=&ug^8kon7pOoK| zh>d4x!YDdUEX;Rh>MWvq7y`f-MwAO4_cEDj78$l&VQ82O9=h{(PqRB0jRxJqF*l52 zb_HdoF_~2nI-%K>sWE`J6!lZaUXwn7EAT!7H&}(#IN;^0?i)=AXIx2z%uLP|nI){- z(DgvDiBbe62Wd%kAlD<$GsygAO%e^r^|0EH56P#WJiHla$eBNRd)woxl+jsUUEDs_ z^N9|HTU}-4Ut*uf>lIu%$*VtYBB$Rm37e_N6Rf4CHK|oX;+Mg0aK8qN(aS&y{mth0V*cFVqun@~6g+UY<^y5#9S=sO^<=*PQkC52e-^35l|!dM|M z$lKv*W-6PuZdJogn3)}XDaVtU`%PTHZQZ7frPN1iyN}%Ybmia0&6nSt2BQEsw-wAe zo_>Gcp{cAh@ELydwbP_BYK6vJnSO3I_*AZ=BPS^?KKex2ohbT^E)crK!e@gd33;9~ zc;1Va28Xgm4RlXHUnCm^pv;2L7$Q6l^gRr|Dd$yBQmc@n&TP%5$f@^91=^OC?}e|; zy4J39B&Kq58o0a@vh~Xm^7EUanGl&|>Po%W_cLfT8*d}(m-W%A+QASCrEf&&(5YHl z@Dmd(v9!qjv|Na8Byob}2~?D|M6apoLi7hRt4U71sWySpIUL{AxTIdYWcwA4sx0$t zcYh=N_!Jv8+t;fwIz1ILJz7-D3a)i+lK!u& z#tu^kG|go&9BggGJQDFzbcZ*>a(2phCsFH)@$)o7U@jN~^)uIi$zb96WDqx4melw` z8af>73^pL@=G9N`*#M_0cKEDDBE{}cD~J4)}oFxbI9$2V29CN zulipdy&(q??YkZQ&vGF zURfp^3a^)flqYai$=U46+`y9Ko5cW^`^EH{%NaG7$us~ptc6Xf+anLHzr@pdH8YI_ z+x|M86Wo){6Psa)gYasbcpd$~FxI>VXTQc2hySfRCCvbUD{TspRHl&N|3_g8YOgTc z7N6^}J-wS7)-eh5lOshXbj;-C73;|Ld%69R{J?Q}6+h|mmw@op_N!5(Bwv5x5=`mF z6ZOq{+>m}5?qO+{rQ`k}nLIB#?&8#9tEHjUl{=5K@$D9@Y8ozQ7W?`|@8Vr;1c|0? zLs7eUq!uTC_!IG$(RRUw0D)p*_4;tw2MU-~e+6U`j?(WcT#v$BiY-^9>HCC z9**V8={%)~I4&Rv9*{B^owGAXct7ecwE`eDPT?>UmE8MuPp3&r8$udxsC|RLsNMZb zTBfhP2X6(PH+9Zjg!gCHc=mF$xHqbjW8sVUn1j?N>sEvcW)wWS-TK1t!%sCtMT+;Y z7n+1p;neSj1x!_AK1B3)bcB7Iu9~0_y1w|#V`DY!0qYYZsX?LZ6p4sK*-OldmrP?Y zzCQkjjpY_ol=c3WCZs7(IKhl_j+K>v3oH`$0H|tr%1^1qynr)Io9ytVw`I^7SPa$b ztu3E^D(vM+j1kS?!c!rDqxl~J2`P^~HX14$s=9c?JL)a64amsBiIC0x#SMVY3(rgQ z5}LwS3&*}aO~?N-U5>)WYJML!z?)z9Mo}|)LvER<4*P@hg&JFvifqDiThqEF28JcE zhcHeq9=0FT?==k#?!Cyty_7Jq{#aekPY zQ8btJ)z{2h=ra{6Hthdgp!-iXMrhm%YQwE`>$qRN;1%elNeE!t{4Pq66nVk~*F4B% z;&A|38vp5GdiT2VSg`>$d(3N%e;y{tiVeDDTu0zxn4c%F%8;T4=w)_qWC3ih`@eG;g|6adDMAki z_40k`TyU%(`JCKmeWWE1(n=qg9#jBX1apn(2Y}uBAAjN<;pw#Mw;xK#CqT-hvYWv|kdnwxy$Uzj{onqV)-~$w zjc915+&;e5p-w)Ob&CL|>}4)L*-2K)Qj)l#S7)4YTGRaGC-!mMK7_3C8H-6moNYeQPbG%(+gV_XGQLNn3QiWQKf`YWvgx?4@>K~d$ZnAG zg3fdN7v|Aliw~T$rC%~Ga;)mV^ls}7Of|B3D``J|W9jD=97ttxYuE8|L#g}pj{EfE zywI#}-Uk-j_vMGHH-bA9vjI(`AQ!D~tN<4L7;}GZ{vJFopx~$B)?rlh9O$eqkxyOniN5q-*Hv+^9l`rzN^f}%`wG};Z*w0YFKx}1tvE>8jtJAu}N z#^EU?^fu7zQoAoq7?@P?pHVvLP%Op3A5+1HsOhn1EUxezE>iO%z zu`msVzV9@bHbsQt?D7pRiu( z!az>5Iyf%)hhK?%7Vh}Kxs=-#Q&bS#W3JEw?$N)Y=n{4NV;W|Hni6*9^M58v+>D9$m!eP5_ijR!Oc0Go|3ZvwtK5z(3RbXX;%LB4kQVW zy1PdetS19sGp^GX!!8^?(US94x(!$WQ-46fQ`}_=lLQ!@gj?a8~iFJH|l8<rnh4lfcGZx~)~coG_JkAB2s#T_NWH4GxhA%9;o z1TT0ko=YtMdMU;YCC2&3M6`Vdl>ScnZ@W7-tV26oWS^4EV5o6!I`0PJaLLV(@*z-bJX^@k(!$;sGjdEEc~?sD;1edOy+3E? zFAfq^kjBw84)8~*eHLIwWxLt#PVOKlkx1}9k!PKslxO~EHQEK0XQEypl zAIz~}#nKoNNqDH&oG4FW*m6M*k1HIfful?tJU7O{Q3b_&NRdrTgZ!~zl{NixJr+ty zPS^jy2aoUR+Mu{WjlO zNVM-W#mUtbj&S=YJA8$Zn^IB>c4UjlQTtOX5%-^Rd~FxMx%}|Ai@7XXIe(?-%2R(U zf8E=nmC|ITC6W+w@yZAVr)y9T@CPEAF|$h}6s5(Mpl*zYDxy#BiCtd(h@g6EHDz#9 zf;b?)X-;WwTInc;?p~5zO5$wjwq!HLYOd;uFc#%FyZIg1RSW~DTc_q8q0K!kx6Bu= zSJVZpWEs;EXZ?fb3o%#O$(=#FBDI}CyFRu0{EH&t$>MBe8+(QhO9A|br-U>wed#KW{?x=j{P3Zb9{^iy(*y4Z!mZ~haYzwCM&-KW3l zP)Em7P`+UKBg>PZKQ)mK(L!|X;T5Is1{&g>k`LgEH6{7pFa13wLe6}JaV88R&N1Nz zwVp0Q$4yC@1uJY1XG=%6Lp_el5#VdS+C75k?huGpz$2Wm2-iGG8$0|MA#j0JRy-7ihmowh-v@(a#G)a9wk$T$67f~2dt z_$?w*06OhQb~6FX7ArO-(5q{@iK^XypPTbg4|+D_MM-{g)sh1}w552fbS_xoTj_<{ z^Y4_9NoN5!`ksa0iyZCl+7JR=WeHJi=y2RSYtWw<&>)|JFEP+-Ag3{{WUtU##`4ei zjdXYFe}EF=DuV0=>^((6HOS<^{}`6wn^etQvn-QZmKrC&{8i0I$@Re1th^CxX?aVB z1LvUX=);TV>=(WlOO0M!;HU|7q|Mn)D#?{7%sXpkyNKaig4}<}^(^on&IyKZ-BwCh z*fkG|Cz(jU>1K-s_mCo+ZaCKo#rqBBk6&RYdJvSkbR{OYh34gR8!pShi51p5VlRhh zkn<Def}KY~rtqw-LTWh9H1DXnRku?6;Vswc6@5h``>*c#h1 zx8~}#dXR37fD*zft>PK$f?@UTlGE}VLdV4^a+4WdCGjBy*mLVK7+s3wl z-z8|AS$SVN49V(_Ztt7HJWnQW<|QJ;E6ck`ybxjV@L<%F+*)neK=jJyr4o|L`~fSy)F@%s7cr|Ngxbc5px^I%hVk_@nhnl1Mjm0 z+xLP;s@Ptp|6T$vefW3D=W_6g40-*VLJs&$vOFJ=%23vL@9D=7Q<K72d@f?`^rr~lgiv6xPaUUx4I?pdoSfd$J}DKs zuoC4y%QFfy+qUI^4j-x}2{TOXfWS^ww9GC1X)>Vwi#c?~5^KQC#UA|#JPAIRBF_b^ zxvDy}#`OgoeXkA>n}uh9%lH-zF|l@ipj=Zzm~wEsG)O@z0G9P4^Ytm ztA%hz;i$haBLDLu-iv*3c$&N$1kG4qa~i zAEu{U@tbvNaQsi_Bi#GCC2FQ%@Hy-#gwvnYEOk2#t(g0_!3&6EG)gt3RAfQx_Wo_% zS^m|Xh(5I$o4$VzJxXY21{&wDo8V2V!_M1^o!Sy^mL^XE{jnHv!%badCU(T%sLSX$ z{e8&>r)|qY1|4kwPbCmFGbj=4y`@W3uI03j69~g$!xW>-wf*Oo(6a>3>UUSLp!*>H zM9oB$#ZG3N`-OMiZ{y>hh8C93S~P_FQ2j!?CJgu5+ypW10Uj$BRPKf!3Xa%^5V?S7kmq9b5@5|y3&EX(^H7cWKFSe-4${_9%39W$y+~7RKzwp z+ZyD8j*lQz!Py4l3`JU3?TebMyDCi`oEn9Kc^`{?N`>fl-}0S)FYq|tJ@W?Ib6PNXdF`{LY$w-2Mf3Pva#i!jjT2SqqE1uc z3Y9=!o{L*gML2IbuWK1Zu34GG5+a zKMmvc2PZ=y+S|v` z14X`sQ`6=hFV-14tFwq_Fk8ER_>8$?O8+yaRYy(ob z*S$trDpC|aV`{f@a4)7;_L(w!&Bka>2yP?@i9}wHa}kU(Fh2H(s)FJmm(#b7br}>? zR`J4T#-gq%W9=H+vU4oUnNzu+9jgTwS~UWRRfP_esP~wuXMk>G0s(QfOOz~K`ke?$ z{O^zK7?-b@6f;F=vXo53IQDrZ8GrWq$U1x4^Ydss%D`(c>d4nuBKal3wuqa~+No2W z<-(ckQC4!!%>IFBouGsK3m6Yzp{IMRziwjV^K31g0B%exT4eI%q+;0e zgKaHx|9&68(VAaf5NbZ1p?ZYl?z^}<+VA2Zj5z!2fYAV#ftM}eM|)*qhy*T?h$JK5 ze4`EHy*af9j>ET8m7WF?r;&0FN6KYK>A})4H-LI6X2M&K!Ar(cd6+ih>jqy7@=kf% zP~IP*I-a+*8p5+O8TM<$+cdNm?@uRivpG&q6xWxxtSOdkm&}Bk>O(L3R71N(4KpWD zTfEgWj@)O;g-WFbo+R8cuFwJD(;6qZ_#T&mw~`3@Ky;B@SHAA+oyuvImvk%XCh8ue zU!5j?DJeV|7=G*PQKb4QJa4?taJ?m+Rsg@TxpN0zazINUQr9(W(|PDcRav)gaq3em zs%zUX{ua_okym-2^HAlI@*O4~ruWYw&4((L^q-r^-$%;Pi+pdsGw&Tc%ihh8E6?rG z{}fwR(KG|L!Qi#^Fq(JSwhY6wtFHnh`PXR7hR;EDOp3(1{(aAOtl3#kSmJzOc02yK zfpi+1|7_CM@sTG(kMI8RBlaw4eU4X3(~cDJE1hRz-hK%`eR3+5kFH~YLMc-WDlJIW zpAW_;Xyho^x2GTww%a~_>y9DXv2V`;4!B1Nb<6Pm#78TNO)PCEZr_cMCf&h!s-&6;h(717D@raP(m9mRm)e9 z+h6?ls+X^%y9G3tNHmHMYWRAICpw*>d{pP|zMis|T2`(6u*;M%w=AaLyqXJ9AKh;} z0bgx-(de(`ywFj-Gwjq5Td`%;Om!E(=xhj2NuPD?hM~DeHfI*I7QDJ8F6u{aN$S#0 zc(TPnolb$z%Bh`Hmr2HpT(6q_!3G;QXWy=Bi|XJl7aFXE;KwU%ENxmblzw z{du=}cY+gnQSM1iMb4&mZH3~^%M09-qv-$~8_g7}m1NqZ?TDy1gJ5v9w>Iuga7O>g z-8P=>d8|Ze895d?BIw_=-V_kMvF}3aAaqbzRnUfZOlI-A`C-!2fKstQ)#Qu~ zsxE`Th$f%0qpr43KJWDs#>R$kP`@zfI2yju@YCihl0U*951abu7wMxdX!pcMNntl8 z1N|i|_j+_VHeAI_j7mCF-PtetBc77zZ|l4P){*&VodvXY1T%EF!f1Utw{7V?ycr=+EbdcYS0t=ozj%W}IkNDh%;`Y$9vL;bi z--3QHZ|Wc)m8m_CTnyzR0^NV_RKPMnAXURz`8{dOxCcFw? zGJO4D#)7fZ|a}z^$k<<9#deV z8vENj!e@!=6SbTK8-%Wq&)S88#k;$4jk($FW&@`6dIht(tWm=4!cMwKwydGFjfffZ zYfh3%j|WUC12xg(g}7zH>)e0iMK*f8__;4%t#PvDkqs3{tar{Yd+(Pn%?qs0AM|-5 z_GSgThJ*~pt61~gv`5{kE>SvK9NO=ElPh3Q9Y`ffmPQ6~pY$bElL8kq5T7!;1a|9b))0-FulSdKK>6rk>c(nCn z;m45}p~@%C$|qen)733&IAjn&=k?=Jz{;CbAKm_Ar+J@JtL1D{t*u#hh;P5d>(-f8 zl!=kRv8?&f8{?oa?2T)0BqtniWT@X*&j!*D_Ssa`X&N8$sKUL+Q`2k)o82E4=NckW zG4rEefAK_FNZ$j#q3!Ii*Mmbw!{Bz6Q4d$O@Y7btlmN_;k%4!)TF2S5=tXB%KcWtA zEJSB!oqPus1?l;?lrj~6WWYguWN2YW-f3}mCs8PUl3<;+5zVxs#{7MgheL#R4g!CS zpugXGlR~*#@#R#z@;`qkboK2j!8^j?acemB=#!x8N~T|lXA&ON(&5kRv$9_+7f*b$ zo)dbzBDYw(>zFV<2}PHXG_bfJJV5i|Nw8#KMDa62B=c0I&m7{H*|79m0J3;p^HpI5 zlkqjF+tu*m-bCb`cwvaQdQQ3X6WRre;N;K;D__su47ag4j_vYi??`I9?G7$0@3faM zX>VBGUnmsgj?nV~F7VU8B>%4qm29)mQJu;sF_`Mz#r@Rd$%{%g%Lmc6JxrtI9d3+$IWW*TkSQ8fUCI z)*LRU=rVo#0T&TVT!wt!PD3yR-rQpr2P0q(7y+ZpKFHDuFh+!0PF%ci&zRfrci?xy z0-cf@R&ws>+Q#duLR<0me45&x$fRxCX{}A-Jgh0}GYfdRpXm1!*P^_QgZ6NbvqZLl zoOMIGgj$aDP#ig^YOS07Xoto7{m;cvRpIs5qw9t&Cu!HqCqLiMR0m2+4R}glSl6(l zhN2o2Srw2Be=5dYU478!J+Dw;?9tpYp*Oxhf7poWVwF_v$*ZdO9Mj4uW+wg7bXLP_ zL@1sEn5%})m?wd`s^)+`Wnh1l`1MvpE#Y@s$oG(h$0voj-SYlKAPT*-M(l!EORmTn zY1&5KjNi8DI%KcgR64_os<}2({K0@l45=`T!=${n5W9RW@ky6NlXT3_Mcm-{YOOuW zrDC>QK+};;tUh-IBP8j)*p-spOeS4*4~>lvzh~SNY+^MBeav136FcGY<(FCZ-8|Z% z?dIZT{iwK3W1xBP<1-LffaSf7wM3df@a~d2PiUw28RbRup-ikgCdT}$7~=o zuiwBled1E2slLKq9Xmd~#=9zZ2z=BVpCS2hWBA_PndU7CAAO#RAU&Vy6J0EEM4Hb^r4A7xD z9^Dyd*`HtiP`+ui>g>Hk%0#QSSxY)=nprue{~gongo8MIMdkbQEw2TZ>K_V@frAE= zZmicX;oBmn{aH!Lb+anJeoCAUucyzMq`3JcUdI2g?_^e1A8cm|XX|VQcS7}pfhBFz z!!Cm}mr1R{ixohbHNeB8&A&4{X(GS<&oXO(GAnQWc#1Tl#Af=)tMX^+ulRjYLbYI8 zQr?aA)I;nOh=a~Lcp^azX369)yZKYj?7T5^;~2#p2`(HRFXQVfRa&mj)JxYmiXpk1 zGkv$(>PW-4Bh0GiExtE1DvyG@v|2d|)$RP`xxfVXCA%K*BehnJzhm*|MH;ELBzTSI z3@Wk9;@-;sY!#xR-orf=!AT=Ow;i$yKQE$|4!rJ0VYSBU%|Pr$ zGU4FeZqymv(srnj_7?JgFDHvN;dsxUvG8A1vxwHrFOrTktsC_;Laj5KR9)-iCrXJC z2oy_e$%z9HBi1MDA}hIEYNj8fk>j(1qjNMwtRmK3!9BI0bJ=LWO~XBU7KsZpG65SF zZq5@u5i`V5Vi)SiE@G37gAqhqueWpKmI3QCVH;>YRQ+{3kioeCLSw~zGKYM^!D?r8 zjtc9tS+%l1Dj_uQ_)W>DT<~cOh_vi08cm6GfNMH{CFpA~r3jlb?*w73-)nYLCMrgP zSKou}O2g|)D)E)I_l{r@O4Zu6?%_HsMYpPgl3GWh!mO4JPfx#1o39_j2boJa_aP_` zMz7h`G_;hoRoqRnlyn%B^|q^Bm_(Stkop>x_*8Rh=K!W$mfKMzHvOm%G(z>3%mwhL}HE!i; zj!W>B;UN{I7MUemwV(KC4J#FMbgOHD!u{ySc)28yfoZS2L$hi0_g`1BhL7GN1z@h_ zG3bTH(AIQUv5rL*bS%X_BxmxVcpR}Ma1a6~@zDdSLF`5TCDd(Zn#?_5l4=rI;H`dB zXDRDIc0%?27Tsy_w_fHuAAh~;X+5GNRG|ig;Ge0A8hWadd4w_X=8#G9YvtxKG{Hsh zAai;WPh3&Nj+a1paDt=zKmxOguGRDzJ6KkfuH!k$v4uMebh{*rHEq)Ak=wvFtZO|K zZr+RVV3Gtg6NUpIQbZp6M0?Dddj*!H&I+S)ADR$PNAKofB)=JPi|Hr|KtTRQSj1aZ zR;IpJDZLVfXpc_KOH_7Ex1l1J=9l#I`*L0F%<3iWyjgltm{u3zFRSh`&DiD8?_NoE zbu)PVmYO#5!?u}r33DIwovL4IY4w$(*|9bC!QD+T942+N%sG@lx11NqUFO?z6@w@m3v*v-AL#>& zl>v)=qL#j3zH}|Dcs8*iK6gV~Smk}tYHbWnqR_0yW>~QnErPH0+RKj{7$L7B#jeEX zDp(1(=D)gH@Mj*ozZwv7*thb0xDCF%uD|4*JfT-E`tXZP?&?f@-S){aX&^nnd>K7I zju^5ZW8o`n6oj2;PhZ-g6T}k1Mxo_>dtCxdHPhsWJV@Tzfk9>_j|`hh8!UOPBGkb~ zmMj}`U)+mLgl;E4+I!;3S<|*%F?3i~Zj#G}@$S@u(t7w7qP^n9I@O|5Jlk6}jy%sX z`g{b{Txb?&TiQ=wctFkxCk`T!Rcz$(c&hSVuemrRr?-}8pYZVesxREUv&{~oPEN_z z!p_wX{CcPR|D)@@G9Oihu}6#}7@BqJngS^xiuOdER@@o^bc@`~Jg=%-NltwzD&{<-&Q_V8;XJw{5#- zw#a|~s&!@GvR=Cmb=fg$((UIXlXF{ap76TCKb!M^+q>b0Io8P3(f++>%)h)M=~Cs( zf5uPwsQ?xn9P@s8@MTQJ)X{L>?cuzy3@lclcWZ6w%+%_0fAjj>&52De%xgIJ@5~Fq z`^z2O_UY8CYYyNj=HUD3sV~+}8!>L|o2hY`+0i$)d^_#$ri(LQWrqHSV(R_TU+){T zWnR90_Z{cntgCr#1bd!4fAO`f<+1Kd73ZIG_51V3s4BKKllwHiS7LY8%MI1!OU;jMDk{Gtk&HtK2Z^fPX^x@tjYKtW5vz!J(Be6CV|5G~wmbkesLC z5xLKrOk3`^EB9q?vVB{&e$*&!j`uoU-|Y?0+%xm)!J*rqci0|zs(P;~zt{5HA5o;x z2L)b4b^ZS$i$q>o-@(5-n|$@d%&Z>Gd$d1%=V02Y{zb=~YE$O$CkH?7_PpAu4JSwC zzC3bo*R4VK(|#Iu@28_Vm*X048trM}h%0kw^nY(Qc6w9qZ2Nv=zsz_4e`|k^_-R-6 z*#mKtvR@94+VuSD(cBVU;&QG;Ui9wr_-{s|8woixqGO~vPmyqe7EcDro+2(ub=!bE9XhTq3G=m zcZGL)KK$IpmkV>!cjg|scRTsXf6ov6I`G*~&kMd-A9wrc)3%w1@2z=w``Nh6^3Qjz zd6VX1#MUF{(RWqP-hGp^ zYsIE3ao2N0J~&?>%e6jduWQleO-X671NW~R^UL$TS9WySxbpTSb^Nl|4N8X`N_akD zNL=>bkJ1}mAN%j-tV_=9gs(;wbDVry{IA=uYj0@y=;h)mpI(}J>S*!xvwnU!W%9%8 zyYf{kcjKvMH}iLU2h1PTEUt*f*_0{ zx3p8lDYWcx+N*}yd`agm>5Efd8(lx`O$)QX^R3Ehe4BCx{T%On`|Y&1GWnnNCcLMQ zmdBzdjcCE5L+4)*?KZJUUCw~8^=G~9qAVU?$=GzsyyeJ6>#uqv=+PN(2}(WZO%2k8 z&Sgitu6aw+(zE#I2ENeM{7MJ~ob!f+>0`e|;-(sxfTY^I0h4ytjNlD@{D_twOn%y#BQ1g1055pZ8Xv7w6HeNtQP;pG|8DKU8b-LjQGqT4} z<7*HTUH7&Q%=gjaASzL;cZXF&v`@rY%Ush9ZlEV@Ota%O^p%lI(NcQ?dF-` zq9r#Wt-u@J;?(Y@H$FtNWV@B7-hiI}y6J5msUylG)-JcSQOr$mb?S7>+ceBHQNhTX zo1pH*EpL;0dapd{bnO|`y(160c?YU%ehc$q%xy0V(I>AVASbQ61?pbh_9jG{%)lf_6Xi7NAY{!M9|h4jWy| z`|Nt)?N-=F;I!ojdH@ue554K&{Qdhd zk8KZtF7%N%4U@gXLvOior_YGotApZ{hoJb)6K^5<-y=-b3lF_k{ZH>>Z+xWW6472- z6C55|@W@-6&OG+E40q^LB+t$qP6~bO_0Yg4m~^uqLmf`~iUR_k!eg5xj>h&U__p|| zw=r#hf*DGW;7e{l!Q2mf=1nrGxun4i;Reh|l&7ZAt$PthB?=mB@AJOtnk2eg0g zZ5pZf&!g3;t5w*i(@9I7K`3XRds~>77N?D>K8J*Qyzn-qFQ3EeY_$40e9O%j-sWK@ zX`!+81-=b==}o4UFCYRN?SBEx&t7`l)X>K?H0+Wr((R*RdUyv;qw`D9zVMaTn=giD zJp(hBIRM<1rn;}O$m-qmI1(l;IC9x&^ec=zxrz!kqdA?p2ao59p)0RIUvjp$8I64n zW@6}**8tq_&iv_Iwzri@?k=4yA$ReY&zQ6_8&(&W4Xev+!vbkej+epoHfDQkP{13| z?x5N^-tv(qg~`OaW2jdSh+X@}+b^GsQgVRuehyIXUXc()ZF9ZNi@1Djjn-yEJd55y z8b@-yjmyYx)csbhlbvX-ld3%_E1;C1ss2i`fhkYbZ(DLq9t)i-pj4-b0HwWoX1m?g z+Fxq6mYfnKywiHs@(-8s5;*hq1 zO0#;pFpNp$(FLb7?20it86f|>5M;AEn-!!7fl5Dkq{u+%2!KH9@S1t(NRSd|_IW~X zVk&t&v_B9?5(_H>ia9+#hNwxxNgacf_vrU*R+(xSQDUiZVI>^n)G3TUON%I7Vuk1g z$*vgR^~Gg1ldLl&lx=s=IgY1OQ6)W6cOM3;vTj{5777SaBI&atN;qZoVI?RkSaF5u zV+m|AcJdTeD$oB7J|Xuyi>BSdibJ3^6m5`abaBuPbfK8v(I+lMNitbBno~+JB$_lX zA)GFUKub@9F&C^h%PVIiw3re>J3}xtuto(?$uOmLy%=A+ zc8R~WPX@Zg?4vM zC_tOTm6kLl9PGI0<1h#}G#tX+`IrR}E2gk8*#iR;y&rCf;#M(;A{TwBScnov^@@R? zHpP{$q0&ruSsb({RH+cCqk_;Ws|4oZ{$hp}Ym`u&k-kpYWie^qVyBqm;BI*dr5SDH z9rL$W!>Le7CB1Qt%&7OMoMc z8BDE9DYgI|H=Qn_l&7Cd;?verN@v+MyR1I0IbRi}7(8ZFDG2-U(uBe^ytL8|W>d7N zQZCGx6~YLuHlk9XrF0pkH>Nl$stbrs;_ zhLnYRGRr9bbi1@tj;vE)y`i095kWb*q z{3E(4=yrEWoVhJ*lHl5<1G=dsLCL+&Vp)U_2A z7nD{y5=uKBWhkwBCBM$tg5lY>v zz!_5;rZ%UVqVV{!D0n_y6)q>Nx{@Y*q0z$>9NFE}zZ&9__0^TuX1!o7Jzov8-djUy zMg6KPVZc41Isg}HC~CM}j!=P@ir2u$p*58@w4erNfrGy1fS_84_iESF01avau)G%V z?bQJ%IKW;TjySEB)}ntc0Cv_^I?+8HkjnuXb(9V?rnc5%dTqr?Z|W%Bscan$;Hd)v z%&Th-3SADLHPCK%>5|i?gx&6uq6jT0{FkF?R8L8YlzfBS(uQ!7vYSA_AJm0cyi`x= zRrjrv#xmfPvvq?AF%w-@s!$KZEQnSZmEXY%7eEgy?clHyF-iiQb=ZfjEQi`?WHg}K zoc$pN!M9cWME9bhu0|FmogQ|^(lIGUsixcOb&JxjjJ$q1-`Wnn?@)@>_G_!YfNkN{=LC>5@47GGCjm?e``Woa?8qz7Z5>GE( zpw~)4ZU6>(kkw3gYk-AraP-Kdw53Ro28i(h@bP;v*`GY%*-A$}28*TZEAb`|>yv-M ze%v~3dDB%GvCxCtMm^sHE;zF=I$B?GA|klq1h4t(gIAO&qo_jzcv#&e^N=8$T2vq1 zb~jMEm;~(BEk<}W-=vxcH4yOGSUB*i4dB2h#wwkWp3kTcz*-I{(oh*-suQ@}y21>4 zos<^K>3!r4qP-23WK*#K&FLm@py@v$4#Ls<8xB{b0tR{S=wGWji@`iGL=A!Kah#Hb z0956KyW&9S$VN(XxWM#QCN4S_XN;WNNJ*@rI|yTBk2I}4KGT|x)q!vA)(G=yd1Iw{ zpzba}1mWqJQgpMCE~_A_*hFb&%8^~dofstBXhLHU0oyG|Ynv#srfd(*=~`o0)4i5T z0NI)%Tk6>aHWovpngF_?DYE0+Iv}Vi@VJ{PELNCI9wWXhxZAvfi|kmZ$8ERJERJWn zg6Vi2$SS%-{-$fdZAutj9w!}YjtsdC#l zQ89K*40UaewuqWKQ~!A6gf2SG0U9yYr-Q-MTR;q2gP-G-=JL|%j`4LKZhdpf z*q#AxPHOLkiEP+_P_{!$r6(rpqQ(DeI_H9*ZOx09S>>`&6>W3u&@VyS$ z$^kDE;QHz$Xf0wB6bP-A($ut{z|rkZ06NW46;D)bRKFFHh3;PXt$wY*g{HI2M5U=* z$#GjGYZVF5TZ_>bG@%Booi4TlLlu*hjv>+))Ob=7@kLX@ktD@o9>pg#u(?eo1-D2T zjZrN0hT|IY0vT?vWF?WtCm{m4ovftzSv*uR8J2&)HP)V_WGF*pczSEa7A^0OxUITl z7izZZrfD#SA!%PS2FbXEi8rf_Qi#g7QQ{B|SdyXUUaf)I_>^k$5pFBA)*5{^kw&#u zn$^{1Asm3)s+*KCvdM>fXkR-l8)Mt(mJ~&!+QW(6?~|`66>Nu;(@qZ(VSj;bp)|Ff zqRRCow^i1c{#PDb&``N{N+fLQtC|TVDZ8E00y#m=cA!=h)adq#-4uDat@?^&NZ&)p zd2>yZMLQtFTHPLNs-2p)H&`Cm0ahdhK5miF36@1RWKe}U<+E(KZ8rL&z0#Z-rYH_+ zkI0R*s7(ih)af0RB6FAJ1ks-u35Eu2zKg8eobQ>) zanc7V2E$iUG1qN$y911%NUCmL;gp`H*vxJRTzr*kNaT++rL(+{x}`kM`0M|Yh?{Dq zVWuzWs5qdmuhS55KJBP@>&bQ{aw8#Rb1ntP)x9GKn$<~Z6(m+2=#(-#!@ROO>bx`y zGi?+i9_Zf*iO}@U3X^j|w_Tb*B5KOxKwih(cDmaMgWI|&slt^TWa_Fg`tcQSS2x)A zsLs%zW@Oo2Oo^KtiCbtFV1vnq(#Uj3X5~mFI7*b61!9LBxPe^ym3Mlb4*zLOho2mj zp)@pAT!7lw6zwiLm5x65GL$&eW*#RZHUl1Ya94z%KV-oD+Gz&|-0zC0piWn9QZ($! zTXf?sbihsyc+gEzsBSl{OT%tDAdseXhaX=HD4k4)S3chj0(jkBX&b6DV%RSBzqY0; z72t~2bb*}uc1N?dJ(P|x%TwK97?z$$TWplnLn$97yB03nt-a7^Q4d45IXz*|4w~2l z_FS$fw*g*r^!9}J3@L+?I7>RS;7T^PY4^_U&^?%N3CO^<_B7P-y4O1e1vDo|FR(eR zx1!RjUSKY;C;mCr3uHX*tt6RTnA11Xb308g3`{ia4{|elgWMH;ly1^?r`xn$=yv8s zgIK-Y$l{LmHc0K!mltpPz`A$!Ra%HL+^arH4TN)*`zmfaHVpNdN&PWDKIsRSyr?gl z9_a@y`S(-m`h=P5c$3!s&|_YIv|HT|?GPFip!5Be{uJ6@sSAv1e^kzv4^SG>Fa7bo zz(A!9pxyyWZ9lM7aR^wNHUJ;kU}S^m2P%=pBr)haS9D^45={*UDUE!Fj~$BPzZnQ| ztQ(}5H_zSD?vWeYYUKt&0J{fcNsAi{vo=i=Y_Mexg09dYiJlIEjmA*GV8ugeLzEUY zX|M*EH5e@}4MB_0AsQfh2ypfqit4)9*)*)x<))m0N_o!W6!1jHhUktal&THW!ltG} zVY5?)K^QLDGE}JpyS_S9X-eMVSXw#_Q)<%6;Yu={9EO6XX^jTX;=?idJC0BsKK18{ zBO#92!!eHLK2k^E&rd7n(`rm%^mG^wvpgIM%X5uD6J?~*sevwNgJieQ@@$VWSKEF4 znmq>9_GKf$`h%&^cHk%_MXGdrOqFgo+~BS$h|ZlO5u>ahh3H(GNGKj%8VPJQM=LGN ztFWL-OgZce%^Zc6>qjfiOi{So?VuN|6dc~(?c`SB7TwvNSTBd^D@!munxE|2`$P`em6P>{vMfV{MBU8 zcREw+eTxHXypK9V`eY3-WHM~+m-m7HnhtnA87rV+$B=_*&jwBD-Zaoz zcRIN2`7sE0(Ws9B*f1T0-_`-y9MIqsD00Yjt;PG(0r-srUg?0sp8(MEQ#ho_pJ*+X zeWLSPfR25tq{;`CJW`D8v6~hcF#OkiFzomg3~L$QqR+5UjGPA7zV%c1i~=(hX4-M} zSbalSkJUpxKLY`u&rsThn>JR^l>Ye)9dWZzrg37 z^H6S(mntsE)n9<#yYrNI(}dvP?DOz#)O>_mYvyU(Zs!0$!i=`h*8t7u1Mn#+3A9@W zWX;D=nlBGspri{*@Ee#=k-)&sb=VzAK9{M*B2h^nhB(@;B>q4&_`2<+GBfIpUj zwJ|>eTIwssSxH*pJ))E@#O%`4K|x=_Ji9E1XqSG48e*P~Xy;03`5*qF#0sUYDPQmi z}<4&TD6XXt>X-=M|iZxt^U|5j^J^;-ZS{pRL50Sb113+glj zzr7NBuu@j+k&a4vn=BTymAt9Nw({cMxug zH6YJHOIO2&r+x={VyO$GL#q%rf4m9_$HVWGs@z|+#1hc>2PFc5C#?dG-QO$C{9GOy zy9$d=*!KvL<5$D$P5K_05;_LcVh%gXVg9QPSmo7#byx#Soxx#6)?%pbt1&3%Svk75 zMsdm&D35Q{XY-iq?wF;%a~5%$eGO-REv9;-*7^Nu-49ARsBiizIKd6S;_yPw5AaEP zr##EW!jka=y1_1c%cs;lQd!+2O5J%K;UmuQju@{cCI5hRsMn8hv>2lV?OLl?qfE7Q zLwCX|QL`?(7TxVXDJ{aq0joUR;AQMu7|f2JP&zeDHGB*E2^}?qX}V5Ht*dinctnqH zJ=gP2&_=g6fYdcVfz;RQkd$IE`VP9Uvkqz)w_fp@YPuee?ywB19dv3PETZ5BrKPF3 zf|lf6kJxA~|7Mahz8znW&@$?0%%a2%usJJbYygKVe};ve)d8oi)de$ zfaV(Tm+l1&S@H0Fg66>+(Of%VJMT_M?Q_5;rHi~jkw=ly9LGX`LGzWHlu@*BGc5Z9PRoN|@K4faMKNm-Bz(BZ z(BR*jm83Wu$kJ?CS0V<`BNu~*cY>j}hL5&xs=FEJP$dYVxm&c_!S@@%;`YrTAfp)z zqoThmj>0-hO>Q)C6BhqrTR4?GNgDU7(pHK;fz_w@iLN4^vTQFwiR)qzLYz)$% zds~6G$FIh?Yqu(PQLmfEIt3DuQpux+u@K5Cph)rh7ph5QG@84?a0FOOqTxo4eP|7ZLsZRy#$r%{ zue%dtrtCrq!u6Z(i+7^ynO#_;OYFjO>r&-C7s?pfQRA z_aL0nd$0hn)S>%!1G83;zq{lZO8tG`0AHE8esn(L$YsvQ(8!cEqe?? zwy=FD6(FaM-Ul9g{RSR2ORKpTs@5vtCtoUI`D3gO>bo5+uJabNPh$x<#9K7lt3;S( zAhH=TeXMSp{68-Dy-HUpC&1{E5sETkp4>5Fi^CYP&|Zv~u}?|x1FFG$!QRDvN_>>) z{IfQ8+e~bGaE5v|UI+3dkW2srM(& zm$W*h51D>Qhm@cTe`34+ngBoNV2qn6hwvKRbNq^k9V~X2%!_*#Q_t2uF7^dM}R-B6drP!kc;yhF$eH0dkAYDC%_OsJ*%;F2QH=WA? zMi>3dTWAg@-``3LlOc+_wIE!SFY`tN;Tive@S%U{gjb@2eV_YbV9yB+SFYME{-PBTE-Dj?%z-V=3^+O z9LM@P_8%Csg+BQQ&?Co{Zn)y70ZJX$^%O|sPr#3SrbCzHL5utggN`|&wQYO?Z9o4P z$E(p1_~w#SHauOTfd7Jvt|(6KB? zEBd4^trVX!;mkAO``}3kOyjBSY3zJS855A}d4o_b!spJXxN1+ElO^7gPM-qlCC(_x z(wQH8dh5_>$VH_%xEy#IXcEt38ty)$bcfr$avFU#K$o-1hh`tLjS-a068A~}2=Q8e`2L0?Dj(k5kuk@p$=b;MR zNji^aUtdth()T)GD+hGV!lCvq7qk|GFCbDcbWs^V<+C(E-7HYOEDlHWwqJy%cL7S* zPC;Y$vJ8#A_aEH6Z}w%6L23|nU3c>huR}LqLnd_bKjh0!N<0NX<^Q;{u0lJLFDVU? z47~rJQZ8I%&3O~Sh1OTm`cK|k(_r1p$O>;=LS)kX5**(Tmz8*)HbmaSU~UV&x&)yE zZ2&d6f^#!5+6NkPS*cCYH!;|YD=2MQbZFQWKnGs}D|8k9?#nAcTK5(l(x$u*ao4cU zHN1)shi<`!23}Rl(EqN%i@9$rA@xN5Ak0#Zxgi4GB!pcdJomo_+B7CIuVXel=*}g~ z<~7&gp6^~)I+zW@w-#)VK`mIlZt(Wm4W%PR+=7Edg>ln$xK=QiN=hFV z(~+C7h3VJO4uX7f1B%3Ub|;#CQ->_P351w)UTM$I9^)JF+bweCj88Y8fWrb;7<&t7 z5G(}H(%VY&x_YD|gyMUGhsQ*|(Lerj(qY~iLJ6a0cd!$zJ0wG94jOqIpEWnT4WG>m zqQ^#|caQ>RJV0%t)?KBAwEYVFdYo&}BAtDHhZYZge8-^W;$6@p>(5R3?i#doxM$w} z(s=pdu1-r~`tu%kqxJqG6tzf6hb2ZAVxFN(ae~QtkKQ@R-d4fMP77JqJ3uPe2H)OE(_=LQ|OQ`BGzeTjocz9kF0#rIac-69_}GK&T0crsoX#B2mEe&71c zbLjlm3+P;%YIR;A#FIBQFo>Jpe`!#%@Ria+K6`|5b*mR55eIC1L_(jx2G2pSz;mP5 zN|NuLTy(b4uvfr7SQ} z8O!-=gYNy=N;7F^6yK%UDRxnO$oADF5{9bThVaJbXqpV+T>X>{t~5HvcK>%6q9Dw8Bz*!y(Vj(m; zSFxEBIE&b`5z<2fci|0q;cjhSDdv!?ERc(vI_C;X=S^Ypv7);%7j4p96o-!tKIMha zVsp^tT#Pk27Yko(KIVX9J@!V4oHvN+es$gg<|{RU+rVbQ8L7a0Ok4O0P^pfX1?}^r zL&muTL|KoOz-V#!Dvvfvr}Al3O^PM+Gt@NsStpoc8M@%daAIWMYXFP*v0}OmJLG4k zV`FwO;%g2zH?8o)1w&2o=kr5`vTx^nSIKYC%?hvyvmLF1j zP=G0+;vAFEAdU)DE&%MB#wYrNTB*teYV}pnXl|v$1wgH~jui-C4(WVZM1G`AY5uG@ zk1h((umIL9R`fTdD(VMff{QC7hK@`cM?!eaAA^DHl2oT4G;X6^1;9+l07JgD3qgfj z3$hCG>2AnDw=9EfCp``@$gWigLYDI(G^Zg24IwWm#Ju9#OCH&7^4>PZj$Z+N831K0H1agLW39Wh%^U6h5i|jzbA`UtUJ&L~!J@Srg3u6G>srZsA7Y4oYMY#QO zzJDmnR1m$W2*VQwva#{B^k5M~ys5$9&Phvy!1Mf~=&o^>5)5(^zDBU{GMI(QyUn0j zpR_{lxD-$=*x<8s2s9!}nr{hp((GWJ!=m(SC{Vu$VdZN|2h;5q-*Z>^%V&yFOcB_C zCj|D`E0j(5IeWA|49Nao3h#gq7HS>F+J>2w;*6oDp&;)}7;7(Q?-t)j5$smk611B= zlf0|~6%B*VXN5E4vb3_ zLUo7v1<|=;EJEJhgA8=r6mrJyUSKgp&I!day>vC?i5V4wDa9a#y~SA~y(-4|7GIg- z=n-FnwU+C=7I7>~@FK3&yv1arlcmAShT`DmNGaU)&R3GP^S#+*x43*1gapbWPF@LO zanP$u2@JimBpW1cIiMe%D8cGbVkyRGKv||es_M6A*pgH zbi@t1qBN&8YX;XfvLxu}O0!zDtPD#udnu59wKT9+ zD$Bg#@=F;Q(nh_@K*np!GWpQ~(CS;lwTO!^J|gw?4cJx4ErT&|?Wzd%EXSHx*XO9v zhj=+5ud{f)0kWmo^04^DWx=1eIutI?aGs+C{%lc>8x^;^q2t zQ~@4-T?FF?5NeczG9Fg|b)HDp#%$icClTxx?Dl;Y0g*h2Vg-p+hRt1wWG&1#4#5?Q zg#5Ku1EW}D`Ycj2^d*tZP0yoPBdQ$5_+GXn3V_xYFf}d;BI~pT&TLCX2<1op`!4=H z|Ad4v>RFkUruvmw1iA4YUA-0Yu))`rSQBCKh9uE4s*sdbz-d-7)?pI+7rB(vn)+)?S6RR@C zRFAR9a`d=qUlmrH!m6=0<|qf!Q>ro?LaodKXl*r?K>Mn)aBzI8DhO>+9m994rU5>z z2372<&RR+*>7jmo*6Vg^728UAY{|x8u~GTzK=alaepZ9IQRJEw0k^uoI@~IPjuKS3 zCYDm!o4}AHvw}`)0Mq+5nb(xlbCcUw0~Vp(hX}33yk?4hBTTC)r#Fw|rYe0(=v7prx60K(I!{sk#hjt?I#q-BhM7pb5WV zDy7t8Eog6T%n1vv} z-St3sKn(N3oFbxGc^YYBp}~@Oz*85|=(;wB^`QwdtSFVRLx7K?S+V&pya|EH+7hA2 zz!-*II5&M7!zyd=YZjJ{IxL4%Weba@&#f$pzO=9~jwP73SXe!(X9JtftOl&R6|g-v z)*L}le;1}@m<=}9%+8w2fxT7SyfIjpmsBfEc!vW%>{}ZMy=#! z-ZZnVBDdC;K`WBTeRjwkC!<5@je|K&g+eqZy8~7>%E{W(4-V+gN{1X8;|cNxr4?yj z-Dp-WKPRe<6G*WUSdhMTu|x=GvmI34bAn0@TG!2zOeg>BRx6GNxzKNe8!@pIXj*+Q z$k?s&jTCLs%WMGr#ofTKDSo^MijN@{4N)v}Lljp$kd1}1-K@MRNwA8y6@)~PXt_Kf z0+rPeTJj#lV~p=Xhr2y|)o6fdD7-#v1Do=1z$(&&_b}j>^;s)9gtv<41clN}StACd z%kLRO#5dpxBXxcc^iQh~bQq+!$%7gU8zj1^L<96k%K%D`WgSdz6wPS{Z*VIX{!w2K zjhQ6niB?nQWtvGyRGhIuqe=96930BU4E%bD6^9pVdLY=7u@G#zIM&}hhUA0ghwh*} z-&E3Sx6`187(=@^em4&5<(m7^nfOi^gnSd9FwgeU224gNDiSnLD7w1 zq_g^}{xqgB>p|Z&Vj*&l3tnkUBR&#OKPokWqn5KjjwPuv8Z2vq7(-52tRb*)Y z$FhR$!`F>LzS5K>)D_PT2um>Svs$IiQOw2hP0&xXyys1sGf0fe!>aYoAbwXv{ig}C$(?_DUKrN9A~<|DRmfe|%gYQ`hN z`86I1yh$e_=MjeQK!V)@NVGEz=z~)aYY;UlEt$D^jbw?s#`9IT8EkZ2OJ*}u>l+MP zMQUd#l=prbkAV!UEKIfHkr#FLvPeH%=NZrv(a0t*i;EH|;@ghW>W6L5FfT%#Mha_a zDvCis^qCh!Y*1J?ld}_1im(|ukI~Y;ui9buRaL;*aK`!zeXpP`;Suia0S~3flw)dZ*J+v;{uK-PHjo_kM67Ww;MkIc(9RhCPxA|*|q2DGxKaYWq(&WLObeVQ6j?VUyDfAu(p;rL}QRy5iwZDm{KQ^9tt@ADG)%S}yEfJ1xRYGx`^X+sLLQjs)< zi(y(mk!KJ5%1tVo&Q3#)=`+7j$pBJ1n+kE>zl&2zohBg(Yt#{`SI0EO&^BtH3Qi`b zffGDr7C<{XvNqH#Rr~Zb4H%nuV(})2BeFd)Ej@C@(dxF6r!(f=w;f@9nsml>hI#N< zps-b(#f9Bc<1P@KtrHq)G8)^NIm}tp+t!>9kDU&70!0rxvlfMQhotdO_tStWr86+~ z>%tP{T^6gjerymc*U3SwZ(fF6^KfU3pb=C(U5m7~b^Xq7ci&3Vx|lIQo(Z4_WdO;Vt}FrP@ASzb4BjT?xwaUyh2R{0cd!}N6}+T&L#+dM!7>2& zk^?SvW2V~=c2MjiHya)jbapf7AKML5nbn<{E*SDYw7wg+!|te*Rqu}60C(oPquZb! zh=`>O&L;9&LwdRc$zv5J_9yQM>ncstd$7V3)05Rgu2rKOi0;$_L~ANs)Dt!(YuuRZ zy63dTc<5FSU_!CF2u1W__97x7)h(-0cgTEfPfU(!y;!mwwcA7vENB!r&;^a!y1R2Y zcM`m}t2ayZy;y6vS>y?9v*-pQ$ih9Y9=$-89!mFSE@{uwhK#9rZ=HW;nllDf1|mEC z%v);W$nFC-bh;l4j#9UwoR;kEtdd`d);y+f19oV3?-%hkS1Kg?yskhs`ARN9i69FZagKLbKrGx>f(wnx8ZIIy?yv3#gEJ1pB5VX9_IOwZEte78& zsW%A2)*iq)=0{+M48-iWP{ICye#4;}F*gUkQ`)gfTf;VN4aW`SboE6aG%q>#`yY#n zV}LgKSq#u&p;ZHYJabtJ9Spfv7zCc?_6LFlzD+r1FiVh~noX26g#P3!aj-4PmT-G+ z?;ud5F<>8}ZI4(6f~{VIfn1|=?GR=+C51MeAI>)f-AWE+N%9FBoA2v_cANbCgn4v4 z+%T4-!Bj0mOTI-J^vqD^l-?Nx3JX2vjWiO^4#k|C-Ia0RG%XG&7+2*_#kFvv->(0~!9W!{F= zIdZr``J@rB4tX`Si4A3gWZdlI%{7w!N3c?JGkO-7+vw*&sxcBtiR_lqm)Hoj9ypS9 zkhd0X*Z^KWoK-;0;;#{i@1hE!-c)Ur7W673Q4;@f6n2MnGccHyQhA%{r9J-c+o1O` z9sNdOI=V-*Wa%=7&6Jhfko@i%1KA871=(m`>eXm?Dar6~7qP@>kgtjE^=PiuG1wF` z=|_+y1cWWsO}q~*p_$3uN}Iqo(~)u;o~my&hD(;uI~ofsx6xq^csLe|i%Al?qQ&en z?YDB)?u-L#!^awGFFX#myL&uDd}tgJUV{IpyyRVZIn9~oZ ztp|>SP76(dPC;oi(>A?LR2u}5Nc>k$Fo*<#Qge@PElRJzp?OXLamYj;ztzfg5FLo= z>xn>hVG?T>{~gudk-SSi(-1U#B!Seyy1+G)WAaQf#Y2w#)ti%F2? zoyGaF?>L#2mvYM`6X6raWuoQ8$>tqHo2WPliJJD5xkUfV#K5rK1guFNGcjiW$-tyh z^3(gw7G)|~7&A%;6Wg>olMP`moD3T41}lZ<9@|-jQa`{cLQ^Gxb2{ODv|suGYb!s? zX}5_)SCA@iZfb!>+$Yd-_y^E(>kpCZ=&`ZEnaQb0r?72E&c}bC^I4jTe#9KUFGOQx zJ4Jtp&z$SIQ}*E2`A673_ldm`%Npbvj63LW-bI^;MW$e3F?mE}zsVn=!H6l)iM|jU zrXg~1gK|0Q!>_^6fT>{g`bS_?(*v6Zr^2SPDCr0(9yX`sDFz8YO@&i7#ekydVNmQL zzo}@hl>=){V{OAtH3BZBalFOP(-7wC6Wt)$_tkzoo=KL{GLY;WCL{m%n+7x*?IS+M zS|a&NB*L@#XU(kde2fioldHsIB8@*rgLcy)IoYL28_RfJ(@X~a$~$TU7y87!h~Yw{ zbvi!dHQ{dN^-EZr5Eb^BPwPS2N(yInZmq zPodYgpRuHR($=%hw0mrmo;tN5@6Y_y;LU#qa|FGu3((FP@BmFdd35rWOg83rLMXELYH?TGYQpyR|0gN~?Km=-2e z0UyI>qWj0Q5O3*I=NJ!`RfxQE zSPDIv#X>`c1qh?UiT#zIqw5uXH(jW;+pvuuF$W)q&Sf3tnygJKLts0|S1g)UUHBFW z^szZeplg4@+6uR2(64io7h2*M3@*$Ex#@F3E-n%V(1|aY>T@CS0iilq>I)!4EwLb_ z&122wYNbtVpc@02{I0Y`Zo`56AHD!vZ|1R1^pv2DxOqT5X+BFd&p=a07oDAljv<82 z?Zfl64YtGcK=^?9AbcS)W{xUw`s~hp^eD4{CCgf<7o`VZV$0Cv)qt{!gnVIzHh*HUIh!H7YngfT5TZ<*6468)Zqo`^F^#3{b0a%EJVRQdNItc zi{MX5G2+_dv}Q7XNZh04W*u8SbUlqGO-otLuq(uH|DPC5HhVLFIlGf`oq-Ai;T=3f1~ z6b%Vx74mc1-dh4%*iwU*Ma$kD`W6JE8yo|u0Sp*ulv~fCFcrIz`ln3rF9$!5qy~!IsN}Z z0XDhU0u8L7Ie#Lv21dd=6wqtvkFbF0-@t}-Y({@OTAlwI13&zRwTc#n3WIlP#~#P_ z%)C>(Z_v}opBth0eDrIuoAnKLIKRPoQ7e&s$SafK428t7Q#j~b;LynX?pxF(j_xc< zzpq4KZ&DFByTe;%tU{SF{5zIbM_P$cbN7{!yyb_VGHbgHM)1K(NCF7_>DYIy3$*iU zF1*F7l_=HqScTm@oP79>mBZVw5~FtCCx7gAq;spj10lG58AMgTM_s?}D%633*P}$e zW7A+24uhd`@M0C(*;ccR2q`2&b;Xxfs`VkXC(>b7}=*(JdWSPzuVBMxtYjuVDQ_N3n1a>Giu^HCs z`zv&IyJON1~$;N%wi}FpO`XsCoNphYEa0}*lRH<1w>Wa0GGG&XV#exZom?ZXT>%^OYV(~ z$#ojM#7~3PYjv8>)`Of`KN~8k{WFA>^eLuU(O+0Oy1D@$s%(V3aL7sZ!~Xn78(AF) za@R%_1haoZ;kM>47($y@X`2{+HR>0>FKMz(=;PooT%DrY7DOF?#W)x0VT-TdY&eVP zO{`#${^K^#rk$*t&{~^hQ#P}PW;Y@xxR43nojk*v`)|RK3X|hN?LgTq7I8l0-1ArA zVYaZaGP>{#a}s4IK0~PSHf<|y&sLbqqs?Gl+vjTZD@zX4eKW?T|F(ht54RxH*!wGv zT$-GQbaLB{liMYK1%atsarh{4JNB@gH0M_+{n1tktmIY=P-80q+Royq+prI@ZY%WX zq@!E8)c68kZaZY%c8eBR_1FgJN852?MP4kVgVuI=ZYak6^J&Ua2$+ohA$cI-|c zM?cEh$yC!uAzD(4osfX`LdvXNtR-#R3102=XCAb|ZX7*pxeL;=Q`#;_WA$zpPyYfy zC4R*}0lT5AYI|6+d@|84l3(Hd-~RcjkA4L~UQ<>K>dh$O|uM*>7+b#rGJi zdHQc4;g=maMfzkH2Hwj*9Q=*7mM=ovk;LY1XJsh^Rz>xHLrV?!xc|W)+3DLon0=dm zGjIZ0iVE*VgkYN6psVHoKv(Czte2>x7^W*Fv3AoNK^T44|1dw}_G8^EvyXMeGFM>- zRIBX8NUQg;){&xrUQ8h6ZJ6-*@rs(%Y(GmhXQ+0V(8zsoIA`&Za`r)8E(+ccz|aFM zjlS5g0lwvc@PpW_)qR3Nwm3~Iv|_sV%~78_0MVo!fM~WH#M#^p`|-cm2S9c0-;rV* zI)Jn0`m7Uf!0n`Y2O%Pj)os7Sf=2wVQ84Ww5EcI&J(WL@hRE3jA8E?(Ao1KEsO;(p z^GMWVZi7TQ0_Pno{ekhcA8i|Rh^6x1kK4#0&knJ+{CrKtL#%8?r?_0JQ)&E?v5>a* z3n;A)q0j0+*~enbOdro-Izo%zPNA|V5wTo41kdx)VU{ZGz1eXUdfK0?8igNW9ZY*~ zb~#MPes%g`L=rz8Vg2MCbi0%)+U2L7ux40j$uY<>=P*<;<|rEs10Ht-leWw;Hr#Y9 z!!EYpg>pPDYIhWD9y!Janl%7=ZX5-ciGSg|>SxEaS-<8O8khN-&6ek~L&^*tV)r=D zbR|9=F*Zv33up@c!}{j8BVCI>%G1NYF%Lm-6z%&5Nv$a$mU2Ykr>lPh13QU-#vXs? z#2!cb!9VzxeVl#K5PxY7R+x`NDBe(~$?iNo&Mz z{Fk*eg$7{I$Duo7oOI-bPV5+y`{1G&`Y*mcKgq_^!Q;q1xiV{TwpN}p-`87OvUAw6x^OVfu~58 zrLeHV#+ZC*op~7s-tsh>FF(VKp9L~>?9&i6UI%U^zc~#qtY=w!Qv#2cH24hcO8d#b zb7wKfADqGQ8-Vkj1-R`wY{2LeG&E*;yAA@kDdpk#?*9i)HlO9B@ls5|^Q<-IK;?5t z0cMD+0rc<+YZ+2>l~)7SqE~kkvHHWuU*Bw)!3VP9ovuk%4bk(r+L>9J&9kp>}d*a4T6l;4r+HD zq#HkMS&n|c@y_vf^r8LNp*YRd(V#SSd4bS+%uR$vJ#Ij;R{HP;uu$tLG}`H6KF6m%hT(dJo1acA(xCoens$(2P+2c#a{>eYi@#ljg~66nZumi zIgs4-zXdciZ?iP<>x72kNNJtJbgmmWJ@4IuqP2I~n%-fJkcV`>h4Cib#&|{ESHo!k z9p)6tuc1Rjr$V51DscxmaQ)J2%AnDZKDq-b{(cu{&9d)6YU=HkZE@{ z=mHKs@=rqW{PJo6+7+n=(wlooh|1s7KG(ko?t0y4)8zdIhjjefVNP0MYuS%rYsc=v z*3<`#|C-XYYXG#l4~O{I1I+dUASzVkl!71JPObR>t9j3dEG1gr(nNHjX;0`@zIcf& z%SCG*=-Mnu$CL!5>&LK{T;~x|^%#nI2o{e`NhnB*9>ELC>99e&L4%F%JOrk?kFi9` zsUKQW_eVg5Q+(~{_9IO`L66Zm{t4?V2V4%3HVJyg-AO}_d@eS~fjHJYhI~SvqS)e~ zau1+>#}lkX1b}I?+ab1e4JzGq=LsYg^9*Z+oUoxKb$^O@{?BJ@Al-ZlC+ncs95DGg z>q1kWX#jc#K-CxEYy1fi3jqYfS8%S1b~1&dHaMsqyo`W6TSWly^ChcYX2-62~tC zyQpP0%y_~ZEQCn8D!gXePXc$Nqpv})oi4uC(H5i;Icy?L%+{8hCE4f=iThLSH!PX< zztnhBasXZThV={8nK9-t_6v7E(P|49o`8vBZ=jv=xu~#NXvQ0y0eP9r((wOsxyL`@l#XGmV*XXKh;5t@~d9jOT+}a-~J_u0xEum!v0NCaa zmVyeZtIifJ`i+b~N3bc?iY#a-Ac!5km|$?fVsV(C zoe~3~<{rh=(zLp`I^N{$ObIrA0_{yP=yX5{wSNt%Jm!>k)SO~xOOrPJ6$Xp>qBv}E zQO|@xDz!eLC}owzvnpyym0=xrmH=bYrw*o{eX|=(=o)bHExD3vJS{1uwlu$3i>9=o zq}quf0kBF+h0!Ui6^J%{q4trL!*#+DPEXkB@AE+n+4oZ5^&uAufY{S<}W zY4NQDaU7ZD)mF5;0`Aduk5H4%XK>M;T2}yeExvgWp{jBq;`BL)8)bKzj>kHYr-er7 zy#r`&q&fhr+0gRvkS8NxK$a+Vh$#qif}4Jk=n+*GQac@`rpaXur${x$Y%rZ%H7r2r z3Oh!@QNV?nTWEfDwF>R5sQR9!2(1Qp_*;~U-=&XMqv&iU{Fz}xew9&4Eo+`TzQ6hg zMqMkve82hO{j^rZe$G&Ftr8%nwSdIQf(Ae6B5Gh z{hEM|tEHyWQXR041D4y>f>fb49E7`;*4bMN&^5Kywsc$vT;+hqbpYsFTWc|{HUKB< z08y?E2(4ov8e135=GD=ft>n;l#x2p`LjWc1lT$({w(NOSy;x0?n@b zR?1aqezeMu%pa(RFZ1f@qHbe;Q`adaGEO84@zI8uizmXsq8hW1Vos6M7^@FP} zmpy883icpMi)#!|$~#aU4?Ir4_h3v*#fLCD>;YX6c@Sm4r#6(&@;F6qBV3zHj^VJA z)Ttq8?eHGQ&;Y-3y|TXA)(;0IgWX^_i-YSnP!pp}8In_+gcL5(g^T_5)foD-ftp}8 z3E;}Euf9h;V$~#?*Z{E_ATt}N4Jm&^MC@f^bx5sPgr!UBgTqA)RnzaxKvlSx918_k ziNlJnHq^WHZwTe$Vcdi;L5&gHU}r$7uku6ied>d`@Hi+!ZG=b$iB}x@Xsga2ja2>$ z!@W2ayR1&w5N-)If^54thR~Nbf|4T}VUKuSBZ%N^W3^ck-}8Yqq&^HJsWHB_ZK5XC zkjj`&>2#p+mmcRNal<;u`#o)fv`FtKbR%ya*%4}xr3uLWxT%^D>|4TuH2!J=QpbcQ zL{R(Y2+LxdsS&0+mNBjoVK}H~Qy@bbAc($ermCiLBAU~`O(9}Ob4=Zi%^(n5nQsQb zk>&`_<>EPST%b9=y=eiH8Qel`DBoyxx>4+J3Jq9kO>+#2W}SF)U_nb-7_TOnkMlY4 z@oWpUEZXm@uHnmclOPg9Q z>|5MP0CjZ})g}Uku?`p#6`F|QqvE-gDp)kPB&rQfNf=sFb}LxS;iU=1h$SH%8=MFm z!@Dkt!2e4Ul4PAkF^OH$O+T0Ec^Iy~5=rQIF&SR9OEP@4lNxy;_pg#5?aRq(2h))N zli{Fv?n;J>o!nZD5BI&=hfNJMr5(vYp50nC-5Pa?q(z^xE>RX2B9PyR)QmB;HPEbX zqxPsH$=|fIVVJSNW2IBAq0fxASpU-6s70eh29hUvL4+{}95k&BhRN4XZ4>N!_yu11 zm(FTMVr}7W=C@P%Z!7wYCBZJSfn!kSrf=F~ydxb{uPOgUODfg@_K=#QD)eawtk!V<9H70o zi+5$4P{|YxS|bI}A*onLze$0`V9%cea#PioR4-Kn#H9i-Jq=644jpiW12jZEv- zQq4wYq5Yj? zd`Pq83F$y{Dnsogl>}X;Crn&YIo_pcXgID7kRVEw~#R@Wg@|c2}Fik)lBq zE$9Zt{L)=*RYupM;ZN-PQo&7~9`;g;@e_Xmy+KBm?jS?I+u1{P;wSaycY{7wbO)Nq z58zRr0czT&c1gF9Ty`tP^#Co{mMKUhdm=2BtMzD3t9rmBwFcq6;FIh0gmwUq?Wy7z zb1$_i{VpJ9dZM9r?YL=g)gfnGE|Fu2`D)6z_%PFYahW{x7NEnu)n1q^#d`zLp^uu% zM;qH4@v3Rt1BO6d`hw$4y}@y4Uo`=ewDf>rn)iWVaQOv4l-XOAui3hgEZpq_%-SYX zt$wPbh;N!e!M$P46Z!(-7yZ;UIk|U<(_?}O)15U=&eOiY3`+1AYd^Kf+{LX6)4={} zB&KLqAJBE_OFS|Hx&mfM&%|gw0kuFa*xC>@YYHd6Aa3QCz-1n1GWa z(j?GOW)20KBg540b)|L3ltH(kOhJHX2LakE8S)XD5f08>2Rt zgHV^qh&c?oqPPpO!R zj&mj>96CKkEy6keUnZs*w&PpyoNMw^BqA54s0H)8uwgTJG8!*@2lz=SjLImZgzvyrIP2lO|$qTyTBaBwc6vWt&YCbv|-#1HF1o!ot5##KMoZVsK<*2)isb9VllEuTG*(8PKv>O#|=8}??#<9X*W%mU~ue3PS?4C zG7d+u*gMmpNqK~c3>SkUE{bUw+hV$|Lm+=l2*ML1xzLGGa26IhI|WA5k!e7JO{Q*u zBu6v`ZdcTFz{<_kHJ9JtV3CGPhL!x9cBQu#q{R$fU0IG(jKmd-5j>BwRY#KmiXjG;{|4Hhli<{S2oltptBaOW1Fw&|%|Rc?V_iSl<0^4+ zA~@nO7u?FRdVRg_pQ=RrXzNVXn=^?jbMku0e;Mp9oT2G=7o^Kj}8T@S^yFH5J91t8F!oScWl z)MEpBwaErhT^7iP8|Wx|Ccts=bQd=O&fL5WIF*wsfj@$Zp#))5;k8~ zFP3NE(w!O_doeOEFh+2_1^lW=LjwGkQR~HgU6fT>e1TkD2gY{;rbU@hqhCSpR|xrW?cC=#y4Vk}W&imK6_bX+77?l(G+ zcZ)zcCHYN%EhF5rC1{$tm}^?Lm^M+uHCzgaJY7nK7!VsQ5eau;sV+(OxGBcKSHzj2 zmaQL3_{mDxE+$KH+?P>o!ZJ{-%rPYWazL^5OF^+&Ye2CkwMKM5iY*w-y8-WDckXkErNwVY<5j*0VqsWjPo|-}Ad=5qz zrsz{SxK$=7)j}q7+I=74B&iS zBhaVUI?ieug6Z(k5m8RrVJ(T{#K22+U&m9Um0Wwl*<7`bM}HdI{ zfe(3p2e!%9Em%q6Mp2edZUSRPSb(u^5uLriG+d>QkyO`+L7LsHO;{Rtc3s>II?3c2 zKJ?E`BAqO@LXI-->%2lSkkh215E*=75<+8`97$$v!17ja);V%Y&~htigz)AT&}iv# z_@_&@>NK)QsfY)GmEcb7+5$pt-K`5DWE*zp{}$CcTj%OL<;n|=ZQ@ptDgO`-y6kP3 zc==tEa^z30&O=_G1e1_wv@e9I2N|5pg;TR~MPaequ1l3^ddX9*7+JXx99hI?52e*M z39T+|=ML(zo6z)@HgWn+w?n6vT^Ym(MNx!JN0SBHMfth2<6pYKkv7`_y5Je26M3~0 zbO{efIiJZpVF6|A0K?*=rnH?iInW*zEQ$EV2wt&pY#EjpC9`sYx44}G!Itg92BOIN zog%@o8aHww0{qo%w@&_97!fVvF7TPZT|DVpI~rahQ`L%`$lJSkVg->Ad!Vwq0wCrZ zzMCgYGzr^_S#9=UJ9yQ%N2JY~y}JKAc>WjpPY6`d?T~;22w;L78x8^I5BC_5qZSUv z%^Gt>wM*hF)se}`$U=)?Z+l; z_hacw;=5m@#GnJZsBqp?DqT8nlL(X$F7!%O0ATLh&*?WMsd|u0T!=crlOmW5IRIfu zjRz@Ak0jd##Kh<<0A-F ztB424LF|r*Bzk)U_?8$44)SwW_$Y@!EYu0vb3{~X-Hu{3%KO?9k7NIyvv`LV|%ARz^VD!PG9C5kkS{cM;kH?~+eJxRNf2!nNq4P9x+z zihKw98+b{$On!YqRDD)gz^w3Hy`8jze{L{{G`%R2Yttp2M)tu;t)y6pR(8uvd9LW9 zKribnK*V1=sI@7Vb&j-JNFTr>S1;@O$nKg%90-I%B@X+`JmI|Q!xsy(;fhXPI|pOP z;>#lSQm+DX4Saf@PE#MfOO0z7E!VJH%WGi#e4)b!t^+0Es%tupwE@qOwimJJ9an)@ zE(+m$9okTGM#EW;t{eJYUoeO-wFB;4);Vtb-l0Cgh>52t>j6XR;ZuJp_=5}1~L!c z!{RwQ`9I+36apYTox0zb(n(fSL@VG!ST!8d^Y?i=wU$!{Pt%$KI!~Q%4>3W(0}lJ& z>8~73Ha^0y(;srbZg?otq|#$uEg4OOv`c{|vg=qXB+H(GCaoWdG8^qWcqwjPyC1*1(hY$5VBg z$YA)Ee9Qt;bOW)z}P7Vo=5XXh_YAp+G(%8}qQWXlWjv?+WE-6g9SitfbgB?!TZ z&(K%c*SwdU*RY2E${7p4Ucp$91Xi^YKU*vNeg}n__==~Fk_>+ZF+S`HXX;J?7Z5p2 zC*f3Ez1K*`mZ>I*Kdps7-M&DiSRuO0{Ar++yekliHS-P3gVC=+7NmN;7KxSc7DtN# z|Bx*&u_EKnj8pa|1Y-BU#mOS2nsCP|2#qX_l?u(1HzJ1*Ed+;OE=l$^K}?7% z1#F8riXqv>pg(6iazn3VQEN$d35`)C@B;|0FF~&2`VU<2;Q;+1@+0m}QcAcV+LTb1 z*obSzD<6>-^ST6EMzv%5Ywu6GzGT8j?uV5hK@?o0Gz^q-h2-{D%ey3`=NP2)HvR-V zo_oN)@3XFU7|&}Wa(E!6;wgDQhnHLLK0!R0FS?zQTnjB8*3JHmb*R4TMoE~r#wXw} z_6u0%*;ieXj4qPfT&?U49lh3>_8TPd{|XIK{2lkM`fs|4;3@Af2vKeiXA$rJg~aa0 z-*rv>WxlUg;`?gh`*!)Jt4h9p*Da8HyXZmH8^3dmb&&pW|EF%QEU-*F zulRvBZaw>cVMO*%Zp7N3`1SB_-89ns7x%-MU-)6hAKgYW{5SW*{NF$juIy|{n^8K; ztkaAeIsXuj>6*Vf2kE7-7Or2lZ@3gzk>=m9*I|F)iKQAbW?6pBAjCrI{RJdscbjG% zWNOHif#5}Qlh;MLBxAM>32Vx2)BSBl&K`3@?vbAqM^t zK0ps{i8f+f$a-Ujkvt9pd|n+2vkA$VoG_q3iG-E7B$r!83`+5uFzpTNEo&nA+tCPt z=}OaM1UR^OoMg;YCKlx|xZ*rxS5u8b8;)9Vm6P3(u_Y`)=!_d#r3n*6NI52qTnSC~ z3P2A@Z0Da5OL5sm|U>};KjGddes`GfrFVA7!+gAju$Pr;e1Bh}#=d~4>(z+~qd7;h-0_^(0u2mdobJU>~P zD@M^oW|;y95M3`4QVw^&g?1@crYPqdt|bY6tcOV?F0-A@7(6necldv3jf%zQj5jG+ zW#pn?zN4I}Iz|ik*2tf6l4bT{Zu)6$K=-p?y!BUE7t1IOQta^ACIuNA$~c7xSJ1pO zipB5|IFa%O$0A-eGe`_IM>6y5I>{E~j0J--msmk|7o&1!k?KeV^vE_al$Aht%7WW0 zAr7_{;6cU`w2rl4tjR+*#mXFChX|+7X&p`{JA)j;w56;9oGi9rDr7q_<;WvTCP<%C zBapN&2W1g%#aK%MQW(tBQdqOp2L%EYB-D}vWlCmQVG9nup?D5hF@A>63;{($_FyJr zZ_RjOIu}yInvumo(23_ck%dwE(~1cutE`zoZpeKMk;Xyj5OUuNtdn5F!`0jSmorh} zI^jxXET*+Jm`g?aSfj@c8zzi`u}~_a!!?np;da%XafuUr@=^-%%p~qsq6y>+#C@&1 z4Tul*WI-0%GI+UMKH0@wp;d>|%cyPtCA*fx7(_U1z+IF9jZq_vG%ldAhIye*fu_*R^P#W2KlQZ>JR8V1kxnjtcy!Fya0y+k%^vyY_bC@*_7wG zq!Lj~Np>SM>=>H-`jD*{efn#RRf5|AJA1Q<(1jaM--{=UI{^EpLmeBcTmjmjH%~%U3d`gMaTLwc(s1p-qs`jsw z*nsqRV*K?-reil;l*A7P6r`AeWqg^~x?x92w=rSnJ!gvm(XA zp#es@Fy7#W*3MwkVmHQ|TyVdr_h$SJpXH#i87v%6EVP3+*qZCJ%==#*AVfPv z1gXg~FO2!?4HBi@z%EjKpaNS}?eN7i zd--rpqkYiiYb`G+gUpV!N|H*IwBl?ehabj|M7W zw0I=n9stO9XcJe*vw9%poonwCi0w2D;MUwV0PVnVMa=9%%qn0vU-%aDK(utJz_{q2 z{&gXTIUODZyve21aK!Ei+t z!T4J$0064BRsiv%E8&l)ePQNuJdaNznkzs{LoXiZoWxd=rUGyrm0B6=npP3IsH768 z&%q0?3=WZKE*zH*w0S~htOtLo5Hr#)3atP@&hOvl`6ru;B zP#b2Uqh_AWY&8t?qBVxB48o*tAxuR8-L@Ul5K$R6*O;Lx7T#!=*gA%(1=&F`wUUA% zciTglP<=q48+kngO!7B`aWeR5>7h_`<33u75`)$xHI#AGAM*#YW`TecLP5apVK71a zhH&TZtPrrl%TO3#v`;_UC$b7w;~2`I(r+l(cTyEFMZh~OlOC|fcwW1MwwZ@9Rf*9R zQFF8nW326Y1yG6=Etws`c>78B&!3+0@m8Jtbn4rohZU~=?cQ+xfq7C95Atv z&PWwFY=!A()Jn0i)kF%p2~^9GC*h2fyfSrfS)r~ zjHA5}^AHpVY~$5o=+5OtnuaqK^dA=FUq;0gy2GjIYVaqGk@YMjxg)AQgROG9H z?o#`c*hgU{MRZLe8pfIL_bwCt+G+kZQe^g`nq;V(-4|~>@P>dwFy(lLS4gj|I4gA)h5syy@dJDhlCOuX z6}4xq97Ky&5ETSYT%(|`dPPHDX!H)TxJj&x13l~rW8oDkWbT(Pp-j^g2Q5qh4cS*6 zB)J>~R0YN`VfewQ9{xS60aEmD*JAAO^?6{sX*BS;KZXes+golxP;qNpU3n8)>~l;! zSOj_2Kcis-wbn8r+(KN)A}!++AtXVFOAyM}2vOD^jN`IHGV0M(V?3qdepIRCm4tvHEfl2|Fe}8uF4}$+~GSZ z7VU4UGxqw1?Ocdm9F8= zvoj-@tMQXLb5)4Hm15J-7gb0T@=JXmfyWStNQvX8@H2o8%L0Oo(82p?tnz0ZOwi;S z2(pyUufJT!mdvlg*abuy2Cz7!8EQfW9Q`Hn5S`*0;9POIwf<+a4T(yCj+Iy)3Q34d zA&(^qsUG6eQE;^eU3x2!yWHj(j^5ty!S zd;-6HQ-aKR$MUu6*AI!P-Fe_3|5o_Cw|>q97ji2RI9OkUDbHc#Qvx7^BBrETO~el7 zOmNlPCfJZ6H9_cZi9)Br31F*fi4c%WHJM7Z6S1tt_(-C)$EqU;7Elv?+MtOXE2syB zYs=YU!bSyxDkO0$g%Is16Azrmb-*#ZYXT2;wP9<17>I*Eqb}nM)|wd)p{ZL7P1&_U zK-#3gQpbkU&cTnTln6;-`0zoaK(yy|El{rdf8gk=z8FV|)+~{6aFF^d7)R1-BUJL> zKb%B4LtvPuVnd&5!$d|d(|>3gS_i0_d(OabCHnthq(_rAwAnfdNJ6tdwYCjOA}Qrb z)jA+!G)b+4xfdn@nI+Dmy^1>r_-Nu{MH~r<6rv*K)xNkhsd`i(ci|ZY%+>|6IKbd{ zKVt==(6unt#3W$rW?f*5wuzi>FMgC(1ga1sTmn1d;X!a+plf73n7bIrqYFH4A1CCJ zlrFVQ;rav3GGt1jqJ-6!x?oVwMnY{)XOfx>-5b~jst#!zresty<7N1ECjZ z|B_KUh({g+BMMDrl#mwULh)x_Zwr(_u*{nQCHk^(uIRWQ__7oD*4|MTQu_OSk?{7(x>^B+q5O7KIK_JUks@jQyjT(ac034;h92uu73ROfYv@%a0Tqgt|N_iO(rrFK0_u37>Ke-KYWCMtc zzP;X-ENhIzZ}FiNi$DzHPd$O4vPg&m5t^hXAn5xBFg@`}6f5geRSH|*=#q&CncfH@ zH?kpPOP{?@YY4W(!+R&aq8nb39L0HAzA==Bia1OKjxriD7RLC1ZM8<|MsGrm0VQBP zI3lw#LQm?lUSww@rV@G67@@<&LLk<&31;zY4C}~$D%hR^BGntC3*Hv`LamHljf*lE zrCwxBV=T3-(<$1C`_8;mQ&9B7MF5L!3d%<{;epwcPE8o+?1ngyXE()k9d;mCc(f^| z3(+&S0Sdv377!%;2rSTt^S=o;Q?(g3QF8*=9$%gJDM!gc!Wsen!<#~KH#P$e&Yr-~ss=iM5$FN7wo-fGV!n&=$Z*dUF_pjhf)MEzPm$vn}9j>6*hliF3iC zsVSeRj21W>8|Sr}S0QcH~lbO#pVS^)m&mS8LqzBM_TlHwGqRFrbJ zVJ-_G@(xQWL^bK&8N+u`Kmn~lb^vmr#l~$(#01nz@OhPD5eXDa6tlFX1X>N_dTy9X%517Z4Jv9sWbU4@i#I`mb5}2)Rc50 zPwWs9FKW&BfVm&H1d=^lgCA4d;9pPeP(AnWDUfq!8&G#bYijzp1atd!MZxABtugv~ z8|-YL5za~aya0#i!!W$3=hrMAFMTpQ3bqb;_>!N_RBaVGXTs})+u zm7uhC*+vE!L4y3xKw@vth7qWcR!`6XJqGTuLZcyV+KQXRP*<|G9pfv>>08nom?>bMc6eehzuH5N2DSq}KpKP;h9lZhTvE>)Qij}< zRJzlmc9@3Si#iSbWn2u8v0WMhmom07OqZc^k?HNRi6dzM%Z+)PhNyxxX@;A`Dh=J@ zI$#~+3QSx`Km1GbR2U4(%Y#4>>AMj*r$wpAVhWJk&e#IDKLTkGCL2vR8`=SzMI8zR zzfi;}0=6GwhTcx%B&AY-{^vRX(5sG6SKBr~$5US$rj!uf6HzRQW+|izJpU{%n$+tE z9?fmfxZtuJP+iH1PF$4gUA}SZ8O&7!ffsqfi2}M6(BQgKC7p4)QWEHoJ$EJfHUnt@F@%yCiPJ15*AV*kGlcS z9X=y`X3-sXzk*cghF>#!;GAN+gI`zdF&3_BXLe_-;jz!^#&|j@<;Ew>fUrqG^Z9P{ z{Otkt^1C~=%V4=vjZ6AXVXRCPD0Qu)`;MlNC-h*vaHQtY2toVK$zG5%)Mr@O9pDv) zrRrd%(1G5)Fz`ipQ9RR<>9C&gQP>{1x8VX|`+7nF!lj^1g*~wwa_R#3NBagy4`Mz0$hb+$Puc1MA=J1(JYc zT#XSJYT!-fHYM5H5togn=NrWdUY*qJjZIA+z}SIq4y$kkTzmo%p?(m~ePOavR+No~ zDA3W=)iqIKB5r(qU(hgk08<_p%A6h+m&)_}{|76Y^y?#{_gG)hU2%uYBOqV!A6R9t z`cN}~B0r@cY@ZK-ApgjIh!z`!`0JHY!4@z+DKc9k5q(4Y>s}JnzNV1!D;&}2&e^9Dq59o8b2lbaljF!@e zKNW;c%W5N2CcHQROxUPDm=IXE=e3qd9Epq~s@ru{PjeYeeq0ekr&9?h<~LB(78 zk_W4h4pop&1E4b|55yl_)T-Y@?C8=!#=)9r0FDeKw;$O2ErrkR&3zD%TC*FtWqGq? z=Q>fM1tkC%wN&>|Ya?)`i-2^Rfa&{1Sn^V)vUtvya`GCm`Uk~Ab zvU3o%1nUd|M{lo-)H0rVHvzCN*s*wvjZ`H%n$@{jz8x)#tE=FjxOCRB6-^fQ@(_VLpQsT zVK*>K#UZ$r=r9lx*m(&4;I=+vC_-oDl!c!Zh95fCD3SbB zFa&Gl@exCwT!-Kuy^OiL52NL<`AnJJq&2zPfb*CB%-{MJqpZ^8Ic@@and)%6ypXqr4m7>W+SoG%u&!I0Y@M(hezQm zNUGr|mClY7(Nb|VCmf2W1>)W@%-r4}HhXW{9&t~uw zyO3jjV8gV3z<49?hv&~y{O~G8)K@$giF<)$kp~nAJ;e}tIobzyjQwdHJY%RfvSti) zPoJ^a6Vfov2pI=jaWhrFLlx>c>`bb#=%BA->7u9w<31is-82s8O7CzQbfGpNJ=ZHi zXn2f>i!^*TrBU)XHN>ksjEK>6PDCmk$cAyyX852r{0XX9=L`b7{H3ipNy_uB%_lHE z(#KP@t0C_q?vyni>*EqE4o?7BtPc+9J?!Vd92%&S#xLniMiW4U+7ls?$A?l&aUxh| z@C2F|r6rSS8>$Jr@om4+CcB@Y5S%88Wb8Bv3Wx(UZ4$uDoXCS&MmxNj1a-SzFC5Sw zlW?bwvDGGFx!otzL!cG){OE1cs6v>+#eC~bhQYRS3e1nv^g{M!iUsfu_vYYa#>?@auu3HPN(UuPWg;+0 zuvM2$WvqouAYm~onE)Umt9>T6G;<1g>&H}Jf+pgTh|yR~WCo&Mef~05c1qzMjyGqN z#BVD6o%Ct&DY)JTr!l^!9J$Eysf@c^0b#?pr}C^_jzmmH_6j#DHx&gq{=UNLInf2= zPnm|41#o{k@?biXK)bk-`2{#j;xpkV@dy^BMJa4USPueZ7Sj>*3!eiHU!Dn!*4zvS zJM1+^7h$x6)HuUvvUWP7A$4XTTZ>!Eni<%6Y9?61d^!-3o{2w}Pk}M^YX)}8*}?fW zshuTaLL{{$FG?v3DI#D=zRw2ah#Amkz^)JHo9gXX+LF*v*1<%HG^f0&K>y1bbk=Fu z1LwSQ9|LyX$=F3Ig$cy@B*8VMT8@@zGJB>0rme}xS(tuq1Wru9cOdC9Ej~bPG7Ed> zFgureet9laS${2yj|vlC zJ!37s8&gVxW=g}i5E`Y-6ooBHBIm;HoT_Ky0hEshlVSiBVjO}*$YNXwE0aT6K-$5% z&@=2jc)QoKT*!!dh-?`~zm$kxb=CtzSHv#A=KT{s5f?1*DS~0a^MJ3kEa(>swP+)7 zwkQkQPWk{$gMnnxJcQUkX5l_5(GN-3aHolT7JLQNCdfj|tZV>D^m8SLva#At0D_kD zSQzB=5$&`yrk#;g|>;GmI-w{f>U2F;I1pWECAMW7h+GyDGMaUXp$zrD1{)Kz%sH_F!3fr zpfcWESu6y=j*Bp%n55=wtt|WIG)Y(t)Gb*cn@@ff^}blbpR}P<>YIk#L^=cf%?tp zbPJaNS6t)CB|x(5;4plMrcvS{TFGM2BzP(HK!RMz{9V9to29_<)K&1o4U3baw~Pg3 zu%gJoB_J5ele=<;7D_2mQv=mNmtu;T3(JvW!y8|~F7aIn)ZL<;anWLKRW>0}yo9xzyBiWu?HgjbijfrZ1g!-sIt&@vW+u35YiT=;MmP{u*Q z9kes?Ud>n=7VN}8nJFk!{7T}r3X2)K8rEm?l~~c@)r_xHStD$=hxXyV7=o?)lji$C z2){KjEo6qXux3$Gw50KBrb0Pg-?UB?XZ~d4UJUFs0Xkb+VFvVzA_rCj|6kT%Az6E& zySM;P_!>@WC$2#gz6@e+#`6T3v)9Cv?A;G&Th>BOcCGK59u){ejAv0a+m-04gD2j?n199gd?ui2AB-jfHE?J{%hq%Oj~^;c-1x< zf0U+^;pk*+s`Gk8)PO>I6EDarNd!SH{mcTFNM=Gox7>sr2NAw6*}4h5XLvE86h2E= zs#pXwLtqa)oXgk<7Pj3CLWy9ka0Llu(gzSW8f9716$#G;bJpF2t}{2o-z@8YXfsR) z8IzZdqnM@1TAQH#0=EELWdn6v{s~}ULegS0P`_;pXq)o|cO3q|>rvBH2r!kRi^raz z_hd083T5OL90k@}Kn18W3(|2b7S5S^$Z_;1T{fd(;TEa@w$eywIO|4gbb&&Q4#a(b zH#*FCBmStj6@N6#1*np#5D76~-&z{uR|@13h$pQW1IE&l7W<$J4{ybMHrtSF&H>{B z^6j_5$Wcn(A*zHVs#2;MR>aY$P_0Fs3*ys{=a$~jt0JTH4%?AF)GfuElC3n7NtW!u zq+fFx$Ls<`vLmBN|K{-jY+B$p(C=i5c_2E=j_tC+pq&aCR`a)EIxawsX~>gcoCN;e zaYBCC4(~)7#=^|RY&!&_-VU692>R)BtCb_eb|7<0&LN0YZ3o=bJD6~i(}O|km@u(G zVwDgs5|Jv?bYR{QyFi!d9pctvNMa5`c>8-|X-9X$6~&X-ZRoKRJ@~kc%`TeMfp-GB zUH=$fz^j3WPdD0eCzi*>b1=?}T-*gP+$(_37%h8`MyYaRC%~0_N>^ACsv>&+?`{KlHE!1 zs1#Jy~ki|5T;Cybk+bU zhaZtEF^t^Y!!#qg`xrH@W*U6McZ~V~_2&Dr-AQ{9kw6c!7duu58<-F!2BSJ{gB3tgW#ljhoHLycH$XaaS+1Ud@M!;Te@*6 zJ4gi;>m_Li!QhsM0FTNi<|fC6AoRdzrO++(KLovd>@bt4?|%aKr=Ot;!;V1ZNZ%5w zgm{&J7$L`5#4w#G{3K4@gu^&>vyMQ2rj5reM_SYCFqIH>6Y!7F*n-1A8~1kmx3A99 zgj*-=pK_G(k$%(rpTVU65#Z6jO|m^dY#lEDZybePSNSvyaUuOnT&2_ym#-s=d_RJ9 zq#gtFDaPaWqW4H}Cl|R;DOJc;0)wE@pI9A-UBLB-JPyH@`eU?f*fGGtmo%)oH6c_D zmvX3ywMuxODW-p+D<>f$@q|Zc!fN>-6q#`t5^(1j2*!P|)$;_{zrQWmzx@gBqSW^o z2-^2J+H+6P_f=s!MIf*w<5bD(4iy45#mAB0*X1PL>OEM++fE{1UlzJk;bl$w2|Ob3 zKZU1&=mvQm0Upgbh3$Kvgqa>is-MJ8Po08BUUZT^6%4f|^^*`Oyfgs!II1Ifdnm-N z#7#+!VwnV?UQr$%b!J((#pXmC<^@^tk~)-VU00;yWP*_}6O0PV;Wb-)#hrjAz zyn!u?M^?YhSouq$ZYo(?7&bsgoP(@2cv;VhDth9NHF2kCn{$wZz}m>1gN!oPoCaW2Y6bb3hwiJ;ojb_5KDdxL1aGj~MdbaE}_$e%TWAWrvw_?*+c)k>JkU!1YH7mt73Bn_=8W&-!A2U zq&WvzfJ7SzC6ELp%HnnuiD{PsF82y(Od*kkaf}bmv21q%$SS!EHIaH162y7V8S^2x zVK4CPSXzP^la?BO)ON!sY-U_BSS0FVTxHC&uVIfIoL>_lj*-{?vEl%R*k8p!PBKPZ zV`>?u-+0ncvM6YxvXcbnRIWvygWE#>UG>d^HdiO5sjKO zyoUL4i1^WqG*^;78B4Xh@lP;aC5e}*kf;`RogZjPdfuR~MxVHl1vlVm$n-h{cFA=R z`1=h!Y<%(&hGUJJU=aTsoXe-U0TXT6O_)#IN%x1&{^};Q(jLD3)(sImid%ThlT*Wu zKgJ`h@KRA+Qz>pFr?@OzQl>|cR5bD?U_ZNsWzpz97jM_xW*n>X_LsmwLcpw43d`bi zl<-Kfvb+T-)JG_b;vo69JPwEBw;5l1Ayy~g8zGUS=+Eh!gw3cglz8W#D=?L8h>{Gt zjVYGjfnFY`M7)O@mySXVrEFa|n`k#qRcY?xjrh4c3@<0|lQ=mMz>3I{B(JGtiJ&Tk z6z|^yPt3dn$v3$N*#$TkQuQ9*6RAj-+i3E;%kvmHdk2bf(>>_YCbt=TNrHn4fwBC% zboHFogzJJXP*eHXwA`)-CfR#nlR5WsXzIg})L48UY;f)#XU@OA2N;?M)YZA@LN88z zC13CaAta=aHZY;dl^am*WA39;6*cFT`ePT}$ZtT9KC)CHuIBhaSg8p;>K%-c2uBwo zd&QwbD%mF5lM~u=522E1#(#EPvKPcv8gErelG0SNcqJNcsdLv!FSKqFN zT0Ni*H8PPy=b$ny#jH^wH)q8|tl{e;P=$N9uzW6bRrq5Fu1v4X2C7MmM;M3)mlkB| zV`wOD^ybHO4yoe-5xGITVxOM+Yg6eCok^7=j8%jHQe-7b01t&gRB~rVc}M3MQX4pyMcPc#8jC_KHb$<$N#HC1VdrBW-N^jp)2;Jp80gu{0 zgW+aWCnb_pdpm0i}UkRZ4C zC8s^z={OWx5IDfm-mtP3I0)~WUx5cQ3c%l7Pw;@ZjbR9s6u$tf3u$T>C&xbvAV>i- zVX5#b51341R!Cl6s`#ud^56`th+YMNG4C~EX;q@2(CsY1l3AeS`xMcG;+NF z2w~sg{mz_*hzP$yc^_Vk1j-?@*Z(!Tz>%^buixOk4mGs`-~JQWQz2uf3fjrww+Nxq z{538UN3fNIU5NA%!g&I^W!Y>h(CP3S9^G6%a=qn{x1f%Ug9%-+57tOJyoH%|_#N)j zxxBUX9Q3d)gbtFqj6xQhxEa)gdWX%lFNC!+V)-z4EZl(>>8A|<&>Da96oaW5Cc6Pf#-N##MJ9D}d5K`fXw_z2c~ zUI-4+6*2$uoph_Q#*l`(@&TZyEJ7d&<-rl?{vMoQT`a=yTMRlGoJrJlfK%jF1g5!B z%ygj>z)SpqV^O9&(d#DdwethR@XNTf3d_j;jI(h@G1Ap2oTbI+F|vf2Pg)j(i)n!| z(&Gb1rx=p?0n9M+BZRlkD!3zMv2m25vWyo!HGw14!XsFoBgFslWK+xD!_m9*MkN3q z_6dJ*!0A&eQavKsGEk!y-bf0NgfNaM0Eo1cW*=eoofF2o5S!b0VQ&8!7OJ5(S0lD% z@d+2`Ej}YOh)G;Xubb!?`~^n2FhvUj>?>-uKdWudgViF!#L+X>|khxBm(PXt4-1Cx1cn-ml0?pv@n@ z;t_+yB~c6EMG+NJwv;1TLq2{1zoVL!uim)Gm7KqZxAD2(aLy>nxUW#lVimP2`lp5T zZH}=isr4QCG}6;stxyu?8vxDvjiY89LkKVDOCGkpf;eokhourpS{4d;-E+p z`x9I@_ZK`ouG7(92-M1w`$a|<2PsG)9aQ1BIH<~6h+x~_|G0A)NP7LkB3Awe7OqXk z`AT0dlC2e4t2k*OP%U}!sTRy{VMasq6{>>n?KcHm{0F&4x<5c0V7rj9e;7X@yHZ4v zjI{(Li5t<7jNjPE$3IL%9zx5%oH<|V4}Q)03!-swU;M>AlZ=~WkfO*%jLE9YR^WzY zWw3sd!r~gWBq*nrC8DVjynJ7tMY*28P_afvY$`u5EK53sKrNPv zqrWUVhcbX14~yH=X5D9l$#`Q{D-5({{|U}v44GuaMv*8Jb|mfQqJK0F)h>~zPO2HR zG;fA6Mst;NEVMFhMoBRJ!|{A7J1OM4WSgLewJBSh>p?o1Vkgf{SgH#?)22LAwm#n! zZic3l<+!Gs<~jwH!;pntUzT z2KsI5T=cdhZAlX=)`9%sTdmF6$UV<2*!o7anbftybhpj9fd%GlG}&Us)*}6PAZEpm zM}ABYi*nvlOPC^LhXso=x+bg{>0!-|;wGvw4i^kIEWW~x*|4vnR)E&thOI~M3YCts z6gCP(ZH*okZP})z!3~)Avu&{lcR;}45F0dowqm(eh||z&91rrb>3~H9kGa z)*elpZMjj0ZP7Hqo}ESkx)28k?CoKBuIX2KwleABzy@(mdb@$PWUB+~D1AGomgIq{ zWuX$Vpds_X->qj4pcNe1mORk5!;lE)$T}HmvMyrg`VP3cEO2Cp6Jw;k=;Nl?kfHbK zyAyGmQvD`LqEREl^V{&D{6LqFuZoRqMQ2 zmVzSIKCGWH2wp@v>Z%v$n&!i5xLJ;X=zD!wdw&6LDN!Y1A2q@_dwl^UH-I%IVg77SvZ6auwKmax=lQU9bf>NT0Ez415Wt4=9qI?L z@>rc3T{rl$e#FHeNZA#@wx`KGuB1vJE05REuCM(;pmekusbF5X=(`QDA%_E5yhP>w zX3?gUq)w@2Z~Z8ZW&}{ltH8z!fPPQ1A*Z^hpfIHDU_`yD7J-oZ3l-Sv2t#c%0qgly zWW8kH(W1l1??AR9=~oeiSJcI49B>B9N_eRe-&hdOdYN#xLk0A%|8U4Oj#IHz> zx2N&u537LLsg+rO@+OqEHO5oGDU~QMR0is4U0Pxu#QI{BIf*R3L=*~^KpZ5#GP-mP z!Y}CJsz0m8tM?#?m6~?*BWEh3;A_=&th5wZ@I}j5| z*V_bZCu@RPZ+*!L-bu%;9*PS@kt0Fie*X|Q5xJ!>a>T1E7=mc58_b50RTVIHUNHW6 z8NvqO@#&L5A?9-_F4>ZN3I-o`3S}#iaWS~;T^`E%NWN^QQ48S?0rj$HP!#p?N^tn~ z5Y~zGRpRIhtb+dnn2SDQmJKmQij)by9!y45!q03dkh-A?%nGi<%uJi?FxEkqOM~8q zCjtU2-$Sv>=3&sq+_2OcHe?~jk?$&q6<`mp0!>#^+TM32SKY>r*oA@Sh$@GnIkPH; ze;5HqJy8{kbz>NGWF$FAn}WjGV6JXXr*N$Czp7kI)2e96LkmgFL#*690)z7TrVq5K zX9OEaj+sMEtcqa0W$!uYhV|j-Wgf};Q_y;!Oj}Yf5@$z+2(St29!8)wClV7M!(-r5 z(~2D7o3GO5S_;;erf2GFOhY-4qp*ycM{*nL841<>0Ig)~OFT}pS7L3y032{_6=)i) zWZf~)RbMa_^{te^)I0^(x|+6HsIVz&J&-UoVT?`*v0tbHvur;u<|P!VSQP2v=upOv za6gnVo8r}&nO6V7*K&l{e)y;b*H`3gA%wv*4a%MT1E@v~ta-eO%9t9=hZ|9$Kw*N0 zMG~~&$BRrS_44uU2?GW}X=dWChBz+LK)G`Fr%yGkpQNfIik6cLw2vwZyvJR{jEQ2s zh+QJ%Z5BhZ=)ZRT@pe21r~qD7-g@jnoGWcO}IeVPEuaU_q?3pw@+G z4&X!DrGpl_klK`UwKyka#~9#@i$SNaTGpF0FG)x>;MGgZjSthJX+||r%&{7j>FsJ* zYcAh(j5bw|g|R@J^p_jilHswKxlT21WV32$z8cGVkWpIJHM=@se&$=uV$ss6IxvNS zZu;4c@jkK=${$URg$aW!_*gKQRU9bFP5ECOMtWBVmqn5A>S)>+2dsnlaQ#x9v$(I* zUlZe@x1YR6@_zl=)?`>btP6?bj#oGw!9{kG2DK@bEfHNZPt64(f#ZXK7_1M#txhtR05{8$64X_Ux%=%4&{=QDtc;#ey(B7rS$LOV=P zV7)8wWv~_al$cO1L=`0@BMAb5j**EV`N$8AEQw1^wjvImYBkwvCcS!ZCPQno!ReP8 z*E_r`)wsj`1&_a;A^k3m*?j2Bqn`Mq<;bFp$eL#@B3$o|I($nz`q)5o`yPj^_SGA# z*%kjO=#y{F-j=h&xAyGOEA3Fb#ghkBsX5`suANODcirElcDKaXd2Z3W_pYk?c+lpW z7BwtiFRj#bqMx0JEw*C%;m2)ipZ(v9k{5?NA4<_& zJ@Q?fe|dG`=fpY}Dm8IkMQT>t+_$iJhV>(jbw(?b;n7=Ox4Skn=JTu6TEA-sr}yq% zG{aJrP&Lu=mKy=7?O_D!!J+1LEoUiaXEQ z|HaLZuwU&GHEQ_fq{sVz?@vG1cecyIv6rWwwDE2#5WqGmr zoAql=U#;+X^Dt*%&XILPL*}m;vp;KbpBt0hD>1Wu_tg)|?Y!g7+T`*l+WKz|EFbVb zXt8Dj-i#`N3U~gm(Vls`jwa0r$pw}bs78E^mXM*VYT|dv+psf zt5@~G#e4I&9e*})teX4l#a7seA3F&9Xj(L8f{KUiK#xyZ`pS*65 z$??h-t-4!$FJI|Ti0Ak(Pb`;=A601!Yj!6!Yi)?*Ze?Eb?-A>|PWsezO3%ifbBg>k z$0pfr+R$K_&&%fC2e&zHUzcS0dA7+%$JHym8_ztr&ZKvppH~Ow%s#%O@w~AE0)|#A znLM!8vbJB_IJPV?(Kd=tAJ98#WUHR%558P;df&h<(H9oBX!mO4<^>Jn+I(R*ZrBtY zQKf1~cxb-^B_9XuP^zw7_g+7wXU)ZlTc=OGWp%L5=BLdkwV&7OZSm(j#vXA-Q70O- zTb6WvX4|s`OXgm6%1z8J8Zkd(bCS`HHg+K<&r6CD&!yEJ?&$coch)*(#Ow0(yXI(zHh7ENB3;&yL0zi zvtplXRw{2*w&n1B1+$k=T<6+hY}lEj0gE-ZRUGCvX*FhwKcns)b#&G3FX6Uo&7Rx0 zn!o!p^WcL8W8ITxG@Q^SIM`%^htaNa*LKex;!~Ku-RE4KcEoK(T+0W~GF!fBe(%7# zxTBwHK5VdN$e=+nbebc`aiN|=$$%8 z5+l9OoZ7nO^6MGT*IoPk*x&QB(eR|C(d8HQ-Pv{L*XG?iZ9B1MXr}M9X`VjoOs!U~ z8M1D0*r$^4l%qqNr6(mkzCQVUh4G&+_Ov(|717IX_Ml~(x4I3;zx+0rw0t*drse!K z=}j{;>=Vi_U;mIbKm2xnrfaRh$ZHRL+51;IoKLHGV6l(UwOT1GJ8%BIZh2>G=XLt* zYu;~1&g#+XqiZg=ezVThv*?X&W|-OVmjAVQa>cyEpUWMFW_sH0RyLb#oZfSM+l#ID zUvte@W`x!6*~4_UbIZ<+w^r=%C&Ih+&IA(=vz41K7hr!G+Zp@kzIb8w zW=YzuJ-f}Hdrmof$ierf?|=i#>-4qD?bdn5@xvMC74}mGHcl0MVfJ=&yItya5l&iry?!hwYT+J*PiXH`foc#uXyMb30x9P4(=(2Nn^v)R1g|YWj zD)?Bs)gRPrMB&#fG54ybsr?5SG5b&7V#9Ri|9cZ~;^p`$EB8A-G8(+!%s0-yb>8X~ zE!%YOdB#p3pV|2`{BaW4)@oczIsKOoIWQu(8A%)QFt_3!VBKOe6+$z$_{S66Fo*S#9xw`BLqnF~^qe5w{^S*g3tUQ~5a_f~ao zWO%jQ_;Enuf+l_g@?#g-<$b%9ed)`y5zXtr@7248E^@)uMi2W3+n&2O>wf#q^#@p9 zT)jY@w$gH1ci)O?tAj80W?q@n@LXuRNAid~MdrNf7i;_0NtrpP-_kLGvl4v0F6pzX z|1b)#^vP&OV*2fS*$w|ZxN$Z5-u1-J-cu7CzMU|7H{a|=e_iZ^siC3%G1*Pbch2mw zuxR!7NBs^@d$}=DnLFjb{(2-IkEQ4hpGKH`JMUQ zEO(S?`m9kqUM>3lI5PcE>rR8)JQ}*-TSVIJN`F`XN%%va+S?nUbkFqJpXg??qd~BoS48qb=IC={QRe1|A6%`IIdOp&|*4SSA)puyvppuDSFXW}iTg*BbRQuKaJZYrsA_xk9PD(e>{C=)8N>&nH>h*7}7ZY-oQcm!Aaxel2ZK+ zjhYubsrP_EaYql``51Wj@6*?Amdmp`w!Lxs+n~w6C+7uJe$Z7_a{Ri5-T2e_Gjd*a z(N?K&ziV7UwSu_4MgALOr@R=iNMB(W7hU||?7$2AUWM04S~`6H*&l-%P5Kid<`RsYS>CgTCA2uIul~~71V9j)HBzmopd$RRg)!9APix7UzCz1yelN^{=s zdt%ZFS6|~ptxa&l{fdVz+SFZJ{#Dy+ z+kRX8bntahOrG^5ZgR_3i!V(|@A$@k)9W{DCK`?E>VIhB;TJD2WxToczaDQ}-x*`^ z>_BXv$A`R{1VxuymHj0lbwEf5xu%$ za?7(_N}`-j4T@a0ZQ$LZd+$EjykXGI>u)yeAJ^FM_w3`d>6HdqCr#|TYxupjyZ(Bm zzsPLq@_F*Qq7G4~M=kGp?RV>TEB>wzczh>qlrl>Do~-fi|K?1{?x}yLwDbC#T$4Ti z(DKzqlb2te22ULt^ygxSJqH)eTclq6>Gt#Y&qB$8#vty3GGdeN*USPdjBTjX@VqC!@ zP5a3?D|5P8h46veCAXh<_^_b%rnT4p=T6MsW(OtyTv-3`rlfR@WqRS&r$$w8_4u5= z+U!z;fc;CI?6>=Gbvv-wEw1s|_~r9UJd)oyj=$I?l=5nHKc6=wr2D9FFJmWFD~i%_-1S6n3G?=9%}IU$(oJL z_8e^YxsKl^U-v?*KUNo>8W$vO==HpDgL~#z+qRk)JFWJAHCBvJTJ4KJU{N)*-Hjt5 zE_<)P4)%%cG5Od`ll`m0K7JtI8n6i=y8@ygetFvbmqpDjx!(pEt&cN1kmk1g*|_|W zX>sA79O{|-D$kDg4tsT;q%~wKh94Hf}CtM?6G}!rnsdC-wOXev)ZUTh1`i%S?VZ_{;D>#37wvwsCI91IH|t@iM_zba z^!LN%W(yyU|MGVE=-4a4E?H;u7LM6*cd6?RcI^(^Z&|j5d*{0s)?a)tYSqqX6W3df zm^=6UGvmULeZkh#*Yy8y+Py|=Q#%IsnA_w&Gx+^gbHBZ5O}`#z)6;dumyhqvdDW-2 z-`@WB9$d70pqW?u{hyoX)(+|G**aqA&@W%!w0hs>Rn?Yb+I^k-J2tBPre$NsR_mS< zai>>73)6f4(VaG(539HHvsj9bT+XhG3RjT}EpqJ`P=h>My zXXxp0opJY!dMAu*cz)lm?L%rGNKYEs@_hGQ^PV++T#$8a(6Mf<-OjIbyp}%d z>bfwqAJb1O4+UB&YF~Z#IwW#KhYb$iGXq2aSHrz(gGCM9qwbG9UnP3RpPy?&eb=sg zxB6nG^Jdc)9vJ8vajr%F`NG1Mxh5B`K=M`qJ3lDk8}7x07^i$znE1! zdLCX=<{P@V!JOAnf1JE@g?Dy#%%}RChVlhVdfMZb+}q=-Tz==AX{+0+bgWR(-VbtZ z1)lXOG82zB%H^V$>kq3mFV_gsF>W7skUPblZEMELL5EG%k5)Y&}&-e=u+DMc8iem@w7YF^n49 znP-Dvk8dR{xct>%DP|bLiI!w-@Hl=HTZ4bX*7upQtNrhh#|f= z8cREyMlPk{f3!5cZ8%v4?DuNNv}d))>7o_vDD;kKD&%kG>TZ=dE)zT=kCPC2zGgE7Ase|$8(sAlssz|962J(cqmP?0N- zBU9+_vK9znSf|%(tm~8!7i47DBPl++|E%VcCZu6BX~XgQM0_^!QX*+e>`5eviTQCu z+9m@w7_{pAh+2aI>y^O*^FYPH0v8@FowSi*B7+{$5yf*Eiro?(-}MTwn9Z)d;qZok z1i!($5UZ`DYi7p>zm4mx9Nd<-f0y1?P8kYlYaO^43&63s*_Q!VP8#tH7%mpHAP|jW~$b} z-&Wr<;;vIdu+k{>dNKZT|Dnz~H_Z3&Y;PFH1`+uOC0=Y^q96pVpjL)b34n$Q^W5tph4% z0u|H1(qAl3i_uVFP47qiI*rD18l1z+KUbJ^r*^FC`4sU+tmg&KdEX8v@u33eaL}_+GWWkMsHI!MIWtzVExwQjP^ z3U8G|LyUSa2(z9gTDFPr;fap7^5i6cnm@-gjl7>HhQW2B3{Sv=uK;LOh1Len7O9XKWPe z1Wy}b_VD|8V&z@5ZCrYezf7^_7t|~GtvsecWDoR$c=<-T2%2GNCv7~lFWidEH}SM3 zR>xyCden>kcq`tAPhbwqVro6+9%aEAq&&yniV;3IxPHBJJ&i{aO57QaUYEZbb|slSOvkF{#csHY>qpIO^2+Pb6QS3f4Bbo%{RV!TkZHvY-dUJ(nfD-an($B z+osOCSqm!Lms?Al+)*8m4%d{f+Bf5kDc~2St3Ni0f$bf=KQZ z9}>w5z(`6(94}&(h#&et5q}__7s(qUeo4gli9Z*~b`dWVH;ANF#4|*kCKigsqyT>{ z;y+Vx{G#}VNDhej0j2Gw;;=|&h%F*1e-v@Lh`}r&BL07V6!8WTFBdUjuDynt6>;C6 z#cxCcm;w3)5u^PgzE{M<;&zcN7IBk^C9zs0X$o%nBfx%H#Gi=x*Ww2vIV@u6${rEl zN^9VG;$o51h`5+Gfb~jW&Wm4*ue?e~_hr zqwpA@e<|W43Kh3gaOm_>3g#1uQN$QgY=CvY7@&BD#rs93iQ=HxnC*}}BK{i2&kcyU zhSsD#fl8VHdy+lPGOQXCf1EiQM{}{UDi920L|*U=sQh+;*iw6^yURZ@g$CFA*I)Z6 zGi%~Ac-?0b#{UDrt{(@y26kOZe|MKt$rbB4qt|zE36VsB+s?oj zJVKn$WP(-6*x9u=k6*Ys_R1xG(q+x9z*F%o#^rMFwFq z%Ih4#)u54g!mL>Zv&IN6eim9Pi+V@wLVt9BG>MLOBz2-3TaG)2`&-V7)xL-CE$bvN4#InIQ%N(#Ci`F@I^%ZAMVZLwmI8xfA75U-;(1F;t%~z!JjV(@};x$F68>8*OAxA{#Li;1;yZjRWv9&SH( zj=Rjk2l=(Jir(uQgoRm89pkQxbdVm!=5nUf6_}$-a9Y?yP77O)fBDSB8q8Q)Hg#0Q zVr*Ty_tafSgI^zPYkL-}509RDa7j||YD{^@jk8z(WQohQ^sx_IvwI49XWu(eyY^Q& zYTv(M;gx0OE63*7<+aF}wIeU|uRFSZ7S({1mxI8|C}c+M$5BG)oHEJ;x`SAtL34CA zFhO*sJiHPh8NCo$fA(0go1UA*bs}X`lhLSRfsJt!Y{al`Tm*OE{12rhP!Bxku+%x_r4j#b9H`fI}nsMVVmc92~$AkS|@>U@D&5=diws}tnzdN!e zFj#!GZrYZYfGf1eD(JBm&6A6C3|506^Fp*O+8r%NGaTO;f8Gz#`2C8%Mm;s|65R;m zSwCiYKbj(J%I<^&mT%a&RQ60v_QB+O%#h!CXYjS-%ToEXNeoV+>4JGn|oH*v2wtDV}W4r8s)DA$a2ed2iem{5`8< z9}CVtKYj%of1HrOmq7ya(7%&A``_>{MKVL) zxU4xb_#|2GzVqq-9DF7Cx93~hU%8XW|^ebEW}oO=G@4ZEEaPfi?6Ma{+n~ zkKA&iUeD<|jb^ubz)Vz~oZfF>w0@*gA>gFsf6^gP61kI?^!LjNaZ6GnI* ztcTrNAx^6mYSefpEE2~;=cxEi3I8rzKnyiDsz8u(@E~BV28>o7Y4uu4oOnK}UaM8+ ze<}gK*?@0^C2ER8j)uAdR%6W+{*@W%)>@jE9}fb1w~?*m&t82$GK+!Xh(oDzEURu(VRvhbyRWyCf*2rZ52lugwbN|2C}j>*VK z$ycF8Zs{!v|GR|oE(vdyaD~($t(F*FCeg+`OJ_#?Bwn)1qrjY_+0MJVK zH(yHltb`wtUI7?pOu`KSL%g)iDUopXSEMtv`ay|om+)!{`zaJIR2tAp_-hG6e+N!T z_<)2de$p@D)`=!q2|pNa0$`5NhVWPzIcED^xJU&3CgQQ9goNU}*pZHrG{ zWJ__UkQ7yXMtnxTl}XVla;FHM%M}(osXJn9`LDOcx~F(cKVs(%{xI){)?D}XWzYgl zU`aB9)O*4LZZ{MbmlT(%)YMvYFkrT2WP;Zqny5g=iV%%2E}6!Z#M%vQ~mzoPwf4w<$L#L&umW^`fGeW6^+|29w-SkF!Pm1!_pd02oZ|MK+CFLo`}CQR0+y2W8@5Q0)eu(M(Qy zmkUe=h4{`1#Vt8Ob>qpQLb96nmMHCr?|1D30j3l~aeWg!^>yvEaAAI28Q$a7WjRn1A+J%)i(je7~sg;bkix=_@Si`^mC3k1lhQ-~3zf zZzub%t)$Ce4Ssu|fB%J%+6fD<;r62u8&9w71Des?<0vX(FX+IQb6a{W1C|jBYqj7w zb!V7CD!(fZ$H_7F`nWiCte?Y7`4TvqM(rZB%+_|&a)g3zJq8xQoY9SoMFPFp~^e-m7*aEI=FjmUhl2D)f2 z#u8PdvmkDgu$YU@SvVmUTVpV{P>c~{Ea|`+jLO~Ra(PerK>0{HXDh#4PFxG!7Ob;a zEyR-Jx3PlXU?}v994E#i#qI%{+Z!=_6#git4~$5ejm|D*Txw+jEm5n&htPC?@tlx!hEi&kJ2CIP>3|?)cmS|H3QZQ9<`%{?s ziPct5{Qmg<_^t5=<2_Q8NQfA0<|r-0N_q>Cs-(sDbh})0%d87~f6HgNZMvA0obtByb5`#4=Yk{Jk-2b@ zCBG`Qa7Lb0A7jm_TyP`RxA9=7yhC@Wh+E#Oj=_YD(XzOIHH)>ZlikAZVjp3-3N344 z7qY9_XV_O*RfUrM7JG)}EC5rXlx%^rFWDJ8I=E~H(fjeN;p;mK(p|C+~-C_U2h7M_$q zl`Z@({t;fTc!ht9=lXf<cz^rNhQLCw+$)ahaU zW$5ivUD#rvmlhI0F(`Kx1SR}jE`W@aM!e66dyLp+#2E2B(dqRryqGN z#GkmxWT!i75mT(VxCGmo>fndt-{L}?8k4Av(h6F^5<{jUUz1GPIg{~-^J{t z_i7MQ?^3*oC+O+y=dwZZeW~On<7NqeA>lVA zJX2aJ?UbI9Sa1t?DI08OUcw8&yx%0@<+Pak3mLQwzX_K2e@b6Se*|oAT7_((cqqn| z68n4U9})pq;$i8yM4aZc&Ve%kYXX-s1DN;Y^` z0mWS!pblB1$TePl z52np!`KE%h!dbo)d0JUK`OCO5p~CA;@zs@9dN!8<*!q9ib(P)-mcB zD>zny8nY~;;TR^uBV(D_D0_&d1`qrh$_()y#hkQbJo(4Q1Rsa* zf8fu9({U*-gKu%L6@N$y#!rzylShLw_;2G&$1N}(e+P`G2*#tqzmTIGDrkdJWBRDp{+Q%x9ErFcmuKa(;loc$`9ouux#)1gwQvgRolIBD^BJ zC0r3S?^*;}x>|Tdcm~qySA;XdmjZLYfExgaXyLUBV84Vi)uUGge4gU4C|Gtuowo$_ z*8*M$e|66Y3@fAwg*1qRphg%LwhIS@UkhIg{F(#85#a;jyuj`f@PL2`65K+MzyySI z!exQkCtxJV!hkR$u$KjVmL~N8F(T{{P712>kbw6KrvaAPD%S|G5;O@!C*Vl!F#-2L zUDBwyV^#s5gj}+ZHZ&p-KSkyS?2Jl<7zS%tfAyqx_jp|R`%@?4-Ye%a-CYx>r8Mjg zueo%&EtSGcZKg{Hv70?kuUFwBd#nlX4L*y>6?Pwva|X{@>27~z=qq-For{W44chrq zK>{CzW?QL1rNaWMruH_Iz-!U$VoB>uJ(+zvn`CFF`cC+8qYsO9@zem!HYI?|P+7;x z(fWF>WS$@-d99*L+$xTVtSB0qlk}P1e@4lLM7ou7QMz^&EPNf+NjS-Gk1^bf{FZYI=WFxvo%zch221KYzyXqwQaqvMMqhC0S-J zcqU37{I~vPkFP6N$2yX1Ddw!Kyp&bT1Xbz5-|oq4u1c$`C~mJxjdQkap4)Re+(&vzQ!XL`XmEvue}vXPIfkIQOIvgu98V3HaIPNX-$ zy&!*-Do(o9F*tEaGUAaqsDEWIe=b(6D3w~J_DozL%9wh8XslrQW2@ag^Xn4{!*V2e ziQ%vrWD2vM!yEec_T~rAtQmB+R%d0&taNz*L-a-}jI#vf#fD1c6unQUv-ld5a8jyRf5*i(3VOYu zmo3<0Nob_pri_l9Y+a-Vp>nRpODjoZd*8Wf$NTrpF74euJEmpH%ZGxa%a%qr>|E&$@8+>3* z1#UZd_>Qo%KiOkXVMd{{(G(}fPhKa|Q|V)76ArxQf`glvKhWy}F03h9+**@Bfb?b+ z34WS2y~SDFQkMM3oYv}WO?F|iY30J!z3*(=^6mqzVt&0x$droBe|XmwTjQ2g;#j@A z#h%l7*OK6#wE6eYnMx_22b51inW*t4voA3*-KSShR5P9R`fOKrW41rLKYL#`mu9Hr z4D-^`MC&|3FE%5+8Jo?@?4xtc8#&^kr%oR`f5;P)$sU#@$`FQ5J$pt5nYH1S?Y@@X z$Ci)0I9xnFE1`IPf7Pt+ILsTTulebav!NuF-~*aJmn>+(aU_J!$;s4MJ&}w@l0k6%I;_)~v5%+-%eo`C zCiVK*dJ@|l1)guCnbYAg!z8+2;~ez34D<>vjE&mk$`%xGf5%beiQHO>H${AQlgEUA zAN>6B$5ZMzFLZaM8}ni_J;_lYGB;h_&fN6c;Ix%*xFu0$_~_Awv%l{ z9#o53Wlvg6q3R<%btjWfClNQyf*f60W13w*y)ic4#5dE!7)#_Z zW{P-uTvH?re^0q=Ra975QhdFuO2`(z^QRL-bapZb_5WQUNOs zDLAxw#RH37(u&8{ta--GQ3Zen!q(h&VlYc?$ti9rPZ{XXX{pW%&UMaNE!(HhN}92* zIjKA$DRE_Y^F9B$>E^fYZCtd%RN~1}r`_6m^-miQe-4*3A1}XiUTRMJo!tiy+gnC~ zhhxBrrNBcg>OGD);9-Ua%@KUzJ4^OG_WgD;pacQ?WjlAtjuS=S>3AF;QGv>`5u=H! zk554HyveF>0+S82h1cVaD8ES$61W-Ga&(t>V))9jjDtuOjRlKsZK(Bp~tvv4Gv6aV{cs!!q13S&LoQ^f27L2Id>%|e%8~Qvr zDA7|zdOx4a;TXLWh0W~vsZ&=Nw*1PQh=k4se;44Vly>9Mv-0ht;;m^k*x(~$MtsnC z!g$FTGP2;fo-%?Riv^=OU_NOk2hCV-md#D(5i{Fl?lJE%pEk3X%ov%&*#l6pM*-za zPnpk}LuRJOyx&Z8X0Lgxd7t@&ncELl&Y2mV*$R1#+Mv@mv6hKpfPi)@2NmHrjD|)A zf7eTNc2QO+gMwAJC?c?7F6@CJ{;9OZ8l4!G=}r=`*;c!jj`ts(9Q!6A`iyD$?8Ym; z>1&#DQABn&!04%6o|c4gBE}1Z6$0S|ENHNDKA3@ukq_-f?Bp?_K735*ipFZjcbdg) zM3QJICqW^*1@FQH+hWc2L@i*fR%>(|e`2X_m%QFGm-5pNXV-*yMUD=;4B?|g#n_vA zUI-rh*-eyj_*R@B+>Rf{|Jxc|#l3y?d3-Y1Ild-5j)?Ts%5LmCLGS>D1e73V6LeHFN;Vx)pVfjP>Dl!MpP(QGuOV=NFf+M{YR+cTJCeXK4oS|K0MFJAd^ znnJm2M_=oeDN65-O3Gozb@OxLe-}N9jRIGLE3p&3GO6sUZL zEqr9nO%Eojl4msgOFOpAaRk4hU^%s(Btra?Gx=4f-Z5)NQFK(1EQ>b{Y#N%;S(2d4 z_vSE^vvJ*w@q=MXvP*%I4yvoH5nY9R=Ny+E#F4%yeSbO`P=Y}E<#g^+e>$bh>1Z4s zk+A3qT@`IsHBqWWM`Y@v=ZCuLpOb)&otZsFNnIOoM1}qH!G(u4VFTO;Hb5+lCQXiu zt3&BM=>zE`u}+9@)ak8_)Qr4#^nd+@=t)~qHF-yOa8-P@{y zf4Jqwo3=aT&f;mk)u|-qf2MaIXqk8ashc;wv$wVNfp<2){(Rs>?_HfvXXjnY?;L{* z*fF*lEUseIbsVJvb(4U)j168BCUEIMDb7nW_)Z(KF+x+LVgdtAjfx2@>I{~DX#%4u z`|=K;C?#&jRN7u=0>ik%Hn4yG%tRFiItMRs3^ovsA=Cz5vA5S1OguxE!Rgsq)92+B zx0a=l)Gep?w#DVmEatL`D$K!N_J3P$O;cwTmYP;CYQ6uR&BtGGP%C(MtHZhQZpAWK zpjZZWBvD&4H7eG37MDPHP9T4;vo&KQ3;yJKA35ob*aPX;nVPMU1)kwxeUBk*@C#~X zl7g2M)02ETvDTlZOFc>2a_WKB$wj^8iim%iR2-j}u+k6a=hiiMDTd}^YH02W&leJe zktL(<<470TYcx&hS(C}S)w<70PFu0d>bD-WGEvFC(@-tKTIDu>GyoMMb5oR2uhuEL z?ix!$dr;j=dFr_~m-Ki}E)XxqFVc0Tp8oy}`dxt@I*ykzc}`jZc9)HLP9uL!M}}5B zadWHb+o+srEk*8@s?>tEq3Jc-`{c^uXZqV8y0KaR4|Q6RFK6k}?1mLp4fhPz;>x)< zEpVmOu4_)uD@_r!mV)%00&BcZms8*0HfK{?p1p3}+{8>ziq=z^o||ma>75N5Vd&=2 zU&uXNDOe<6=MrTpKgM9G!46Kc>a8?^1tiD3zot>Ko)S zm8x$s&J=}o*VK1c_^5&kX4r9W&y+C;MbUA7_RiW8+z|- z%V5jLe>$PSNzK(`sSOhfe9M5`|4=(QsQknav8!MlD)8bCu^R6oPUj6^4-TkZ0nP8w zA&xZ|1E|bhkdEmYf}MX9VI9s04h93kn{oE1%z`U#LTw!S4y=PJh()0_=#T(-)V#-Y zNUQT6#-QRnfH2w>i1}ThIPv(j=*#nj0M3sIpp%C*jsM`lem(yB|6blG1l0M5c#S5Y zIT>?^p#|h5gAOA`lb@fDUqYBLY7L(s{siPi1igy2$Hqdp80CM?@R9d$-l=1l4W18v zbmo)bN5RjrCd5=+eS@jE@+PzX>fO-6@YxNlzvW=>z5J3U{FC&F6AVI6YCP92hp8Ej zpjBxxPgn*_LGUHi5Md&Fwv2{HyjH(QixrblD@0S1Pz5Sb*_Tajq(87{E=S{Y(YP^s zUo^pLfniwV}#*xu7C*`Zj72>IAB((LDImumZ;t@0q%d-e+SHOZC>F2$+Fo+ZE~U~ z+Zb%c*?(nbUfKP|ypHJq&=^fQ%iXMt(zym9<~PtDkD6qO)Tz{U;X^t`#i+1Gqm{Mz zr1rFyY}JBHS#cxwV-~BJCRT^lO_V^?p_Y^@D(m&{x|I8`U18PbDZ=#F5Zg^PBqeI zNSs4Scy=VNLK(OZ%|QKV0Bu6+(Mq%e^`T*8Ls@7E%7#!vZupi!Y#v&MmO@yMdI2IA zVl&Y?fXav1beJJ)AiRcQNJ%Y&a2bRfmAVviHq?Kr20wou)M%aoRC>6dK?8{2J|BbrB z|05J00s1}-u{FNgttfHHruA!3;)?alR-?oO>(N&y}d+>ix@bmZpeqPaG4D=xzxsV4H0nN%#IrOLv zb%5M20&HoaBd9WT1~4)ZD+%?XGI+{EV~|^eIv}qTN*6)MfJv2%4Dh5usS4oF`~aT9 zu}X<9_;+N0Ck;v&fH?y&X8`61(kpoMP=n%1R`B&92})}q^ubdP&umD~gRl+Y=0ktj z4o@dMi{OEU5ZVf3r~wRP3Wgd8>*1MNvmM%_eWEqSpvFf~V+?AXQN~aMCG`-W9r_E@ zI0H4#Kn*(DGn8(06xa2%4{Fs+Y3GR2P7B0al^%`(y~cp1I;BQ9b_8Nalvp3c`X*&S z0@AkJmqBJv6#+1paq&|Vm(G7qBY!qNJ_>Vma%Ev{ z3V7P>J$YOdXO`brud1uNIr^&R60kYj3xRG9QPf63K)gXk6BM)&Xiftr8bc%|nV3XH zjlmV01|pk{J7|Lt$L-uu;e z)%(78eDA%lXegRcLVt)E3!c~}OemVX@$BI<bBlG(0yuXM*9f;T$1#M(j7_PMca7 zI>Z}}{T4!i&n=ue?xnF0eM-pUhw%O*}*S{~kiyrQhJfryBt_J1qv`&ZN~TlA+nAMGS$ z_S1w&t1HXP+;N-6HsIW0ct5QY2Mi<4wb*xKKen>AY3Ye$`~gBZ>^isC)GsV+4|rt< zA*0_RB=l5m+0q7+f#;Ea6%yF$%4*A_5=TBtNX;M|d$yszvB~>KG8g&3!|pfSRo<{< zndVz$b&3#S9)DrB;^uXn)&K6T`G(AINQ9O!I5%g=d{&JD0eLh1>-G7a0wfxdfB}ju?rHS%UY2<-RreFuINiD2G$nLegj? ztGzjJhAiUDI6+f9bE8V27OV}KU@ zOeEfqZXVNUd^Ex=QmWL)NagMF=8uwWVIY~!FDJ9G9)#XBoBP)L0Jif4J6XWBl8S!a zTS<|!z7?Ic@*gPl#fpq4u|I$WLpo`|d#j0;kb+Jxm#~6P4uAh=K-lGdK$zvb#8r4* z@IF9%FEp_?gCs1eQuAaT);2_5sZ&TA8Aq~7F3BfT$P7|MW|1mVLmJ2uuUDZ+xQSwN zFGU$r)RDWqUhjpU!&~1d`Z3t25qRJz8D=xKb8-3ZcGvV`+dFfj5{CVtYcqz!824}TEmvNBlij;&PH8rd6&7QY^>7%+ zbFvdi2iM~I?3fI1Tj1!CSmCG}j=K0GvG7&^{NYWz@CP@%X@|olaHts$_`!ZZ=zLug zIvw!31RV}|O@@6kyeh+98TQDqyFFLfeHGes;bj?KYJY~`%kaBE*tOGN*d@VEfB3Bf zUUb86B4N7&e*J=5__Yi#xZ(M>K;ii~*tS$JY>R{E3gB5IJTn}gUKJ@kEyGh=jlxqA zu+<1#HU|n@;$Sn*Cj7Yt2Yl{rG-i zwG59xRw6vUA0BVvAA2-Tc&r2-bMcR&T#v@Vsz*%1sz_MX;XUl~@{gF{VPyTV8y-r6 z2ZLZ`8$93#EpE5aBEyOrqp%_r?r#nh?sq_QAb;Gq+#uX%f#n9cw+)t=V5uJNx!We( za~1Ah5-!|rgC*h6gp-;gp;3mrWLVq~AS{-lApja&e0?+2)s7MBs-boa)KvQmHAbju z;j8_j+Qoa2rROSCRqhw6WT>nt5i0jXWeZ=iC{Cy-feIJDC=SYzsQfCp-LTLK3uGvh zp?`G#aG_L&`NLtJ3?(w$Spau5!(18WWJ9qGvt^jIA7;u>=!O{*On1PvsRm(MGfXwW zlq}acnB)f&-H;!x74q94&jGn$6ml&v!3;T^UdRcB?C};MyBfxiGYaD^FfPka7-xhm zmrls?1D6h5%#MZp*fto$CkSIE!{|&&7=K*=nWOYVrUaQTev}?YW|)PMC6F<~BxIOj zgbC6EAWeqU6iG;xA;oDCQY3IX^n%j@j%1zS(1XLbKgl{sN(>Q_vLSJ}RY(kh#KZjX zNWC!J3d39Y1f5$*XoF!xC1F?r3`He|N-)&L4?)p~xMA?1Bw=tC3_`&MC4n6)yMGMv zBOxvzM2IVa*ch`ATL>{YEyfHnESmpV3j1nS`CuLB1jTQF5Y4RGt!y&g9*)R zlEH|TaU2*>enT4s;=Mo_0&szV5Pt}8@%}RSVaLxkq8ju_qi+VC8?>TH&`KbhKqEK= zO*05MPjCQ_i}4A7i*kCPg+OGW9n}5s8aniUEs&xAn<0V_swa(jB6W~=5l>=k67i75 zKsc@7*W^xxGaK^=r!^9C@}QmvaP{rJaXOgJfKpgQi%~<4 z?u0xXeVBOoQbfCg*@}KX9e+4(Ir8t-mz?14@9w%`9on*AY-o8CU^6=uA z{BV(M1Amk-RCtq26enu@sYYzZlbR#T!AZAjB1kD|h9X>H3XZKIQ|KAwf{z2Y0YPLa z&RRiEQ5~H`-=c4EKLuHcbqel8{KSXQ2Hig79f)fYzxy#1h70w=Z-0b~8oQ=Uvs-gP z3{)^0u~1wszK8gYc9gb8`;3Yzs;HuhDypcWiYlt8qKYc2sG^E0s;HuhDypdB{}0rG zZk%qZu1i0GP*On8a8+C*0b+cWBRnO%@zi_C1dAj~lo(aTkw}?vjZd@x=eo~(fqq1; z5IrGdIHw~>)M#R&_kRW5k&!;u&#xpsBdKA^lo9Du2=(6S9S5_7)41vomx%-RHzgdM z%#kXdBNP(f%g8_$-R~t86c&p{;W)eIL{le?;r4C2zGItk`tP-bBQEa+{v+XQq9ay9 zVr^!NnX_@gS)w_MnK&J0z{TpRfh9WwDSv2yOQSyRzeNpin#E-aeQ9t76Jv_pcK4Okb zXCpS6s7uuIC4Wfcr_gv0`)G(up>d{1S%maBCyf$Yt(5FT{6wCHz)@Xw>9;kXeomb5g*{8S^-sB|YprPH*u^tAYxXbqj(kaG7Il^4&)50N*7 z8{{!uee9C#>!Yn)#NOQlBJO*v^)-Gm)n{a$|HH@f`+vdy@*^Gc_F8(R?b>6TcCKZ+ z9Ew(d1vw4IPA?yg7=$Gs6&-K4I5j~|hr%o--Pf>b#27m1{?F!p{6SRMi5K>~5IsoV zFMq$}w0lH@dBd|?PDVyQ(LP^ty!>uN=o0zAUW#iF+J+5(|!|QbH}1ZG#23 z0rx_T0w=e1YfmK<_7q#c&gf~fLgCv-X@ph2knuIW3Srm(ENeV8t`@ql>#OCDQO8WQ z`ANmoW0nb}r~8fBl&qK3pME+6Fx3KnD7Hgj|>4Le*=zozw#ID6iV{WYJypD;|` zdw;R#?d(akjmAxVac0tDZC%|TzMJqqedzsn-Z;jE6-<=7zq%m*l`f<6=qmbBWaPKy z9{EoM*#9yXeudGhMO()b5*Ov$->CGyji#tvOnTJKu0WgV&{vK|MLqJWd|HyXw}%Z_ zv0d)*NC*FZ(8_&&{>|9XgU@t6XB#RXl7G*5p5FP}r#$zsdbIg!n@1qkuXjBBtU2VZ z?Vo(eb{e^BGLXB-e#so?v=K8G)yL6BFvgKrCyk*?mwhLn>+EAOgRZ0tbFyWSS9s_o zu7>9M)|T&!D(#a)9 zk}Du7U|K+FKtn)Fz;gi_S`z0JqknuBz|d+wDD}MV(>m9B(BolhRudl|?Ofy&LM^Ub zi(Ax+X17)=T8-#Bl2H^jldTrB$WuMkYlQ_tMt`97fkb1KEFuJJ4Y8)+SgXkt5UY#z z<72G`63az}qG*@8PIYx%GIkleGEBi4W)@4CSAregnO7Xx@6FkleG%0kRey#sj4IbE zov1Y%%%Nh4d7ycaIng}WGFTd69&669WJvj9o_VTyqGh5~EEb#Ro99~QN>yT|x!zo5 zsgmvySC|KC(7!ZVuxOcVNnUzJO z!DyIl6sf-!>h;0`6Em_iw7VC3X;U;BzT|&`gh;*Fkv4Y$B$9JrpzxB9$d09`! z$H#pNEaDTZtFJEO|8ngak1xuEPLzEB%P=%3DA1bT!AA43(`=(u^mTZ#Ga$i{Pm?7tQ=*N#u?|DV> z&p#g8x;ws=4pUB)GUR;{c^k-b*8rX12le8D09sG<1}$&U1jcIpG4E(NBObC{*N=1= zuNbeOk*+wp<;)|FB+Sq{c5oV%!_`QPy@%_bfhKxW`eqbL(tkEGN?+3UOEi_5T20$b zhfG3=lVxZz#u5dnDk}Z0bm%)dKVf;cFg$yCf}H=|A<4scU!NWVFQ}53&&<5yrT9N&&s?H$z8SqgG z!v+=V&b$=de}5bamxCRmQG3~Uu^#TeNGU0CMQf>++9@7e?9l1+1y&`V=W4EEk3>3<5N@8&FOf|1T#ONl9C^jQ(~e;4S#63uO2?rK4*+y_O~DO>>Szo ztRx?h$G(66uK1E^ho9V-8nEN7dy1AiGiceqry{P8_t0S<9Y0LZN3?B{uegv~F>-ra zBjM8<`}PB7b#|Tw2U#WMNQ<|l^q7r;eGe3=DR$-5ql8c~w3>-@Su=I(6(FneOxF%BS8r zy5V0B;SSD535rl(=JS~Fed?y+vtv*&#H93b?3V$$^JH)PSM`$(4m$Iz@C$=|9_<;U0?pWYDVeUru&*v<3Y&pM8C$U zvPN?YQ;agWp=lpq{)GHthi&5PsPI@*GEF(Ud}B=YOV$|4U`t)SwohY?^!H0UP~nPo z6K7tfY4hFOV9&L8tEQmN<)8gW`IM5;i;uIvU}HL$qR!zYj%n@Vk)D?BM25CLS!^cU z1Ait7$^o%-7#}_A*`|y|A&(4tvQl=}PcbCZ8DG;!PJB?^aN$>-88nM-j*p%ge z^c8c)Y^i=KdvXs=k^l4Eh2`hQ-M8yK`LcnXNDs)f_*m4R**m6RPmw(np(WCp7-#|~ zR%yx}TrcB8qNi4P!Uxd7R{6}^G3WOBSARKEBi?Sewui;k)$JYsz!)LaY8f7GU%dX& z>g(K|eG5ipZUDLZ;k|S32nl8S=E)iSF+PXbNHTH-)RMVYy7HWgjC!}g9?#r7Jxz@F zxpr`nZ_Cs9WA6^%`243;9n*)ELR0e#B_;9U`JGGJ=Zw(sfjQrN(EV8}t$FK-Cx6lm zJRh3ef}SVw_G@2XX>5*<|Fp97&bdch-Sh7$s2rV#VX&3bN28hhPai#INa69rRp^5Y z@kzECZ4yC<^VT3>5ohVQ5-g-)?GmkgD6gZYeXQM7zg?1ly;L$r-P^J&x{1k&+z<*4|4Hhn7<_qb4YWGE%MsYrc4?8`^>!u|RA7BOD z)OiD>fR`kB>+9`SS}80Zo*f-#^Ycp_7ZqyryC!(xKs8D}6IUIDl8fxQ43h&}B8ttT zVY?+-g^7NrhvoNmsNrVxIHsX;K>d`4>pGc&u}nc%e7}Ox%UX8EG$PA4et)1}Oy2&z zKK+I$1b_pRXMH9wPc|Z(lT{y@vvGx!8jJ9C;wH+lq{0Pe@IjITlDm$Gl-$5tp;C~ zvJ7ypS>5?0OJz2e%1XunW*4`x1nBa|Sf-@rlq zh!hWm3@li+FS@bAXW4>7_a>C`gXM1}Q%Z#WKzmO+9ISeyzB&+B4EA1t)3{ri**35sIbqo1tgy%pJ7#?qEag{hH$@JdFeD){*OB~T z?d)RaF%2loNMSMa7|I@Pd_Okz8`;^PHmUgq>kF>eU39Kh-tnM8v`ok=lpc?Las6|t zwg7Y)I#J$N-BU7kxPQ$UKXd;2U*!&+=FDOoR-?yk;_V6tr}Bu?zb3Qb4PNkRMcR%DNk&O5Nzm+Lg|V|0v14nLmW z#G6y#j}G3H7vZw(|D*YD(2X3~-8(kg{u6l<4*Wxk{MWwh`G13Me=_aM+n=K@@xJ{? zPm5JVwcjMF63REkrCBJVC7znTn7zAb$UGR5x_ryd2#GtU81wa>zuhELb?MP}!UmkB zX5;ASA#1m|(WW;9^>G*Ck$dC~?om`pI6pL!kE@+pyXhMF&o4{z78-iy*Uv>t)NYl} z-ooydv!AC9}7J@^@Aespv2oSDl$ zDdct7KB&Bp#@ZCmw1d5Ej`)+0dfR~BdcL>K-_#cH=V5JcTSI?hsSP8vo-~kUKo!DA{6gDyrX_`nQUU!jl{K=)348zfUQit@zv6V$?5N%{e z|5}YouN>=goO3sp?3<+YBpX{ETwxYjf)oppwhULPP$+HKX6xHULiN}Y~n1|miICt*1ik&=Jur~!L&DJImv%l|9n!1(EL z?ij*nPnc9h!WJ&OtA>PC+*Mvp!fMKz>PVRKh9g1A87-|YzpIXDdv&0Ak5g*Yjef!? z>G#|S;>SLd_JQ{`Z}l&}8xh}o{W8RRUsF~+ce|9g1K#F;<{eS*Ib1pM=V|2c<&!?0 zyk*`pR`!3-R$4b~;?0(~_O<#-pLV|f4f)WLx3AH;+ol|NTV(7*c_VtB9X&1?eJmY) zD<30!ChoufCZFUKp9G{yMsHx=C@9{jQM^&aIr-=-GZ1w+cP7r|&{x=}5|o$_`{uJb zyfQ~X56;H<6A(p`i>M`eh&p90J(-B8MIWDp5;A`;_eU?EP68Ajf#~mr#Gr68Vg%1Z z4zm%>7y-q^;{S#JpNZ5P1B=MYpNxS>%mxJWftWQn$41h|&nUt&H!By*f~>i$oKb*f zQ5G97Qri6yg)y%Ag!~U>{a$~UL1s@CmjOaf6qnYSP9y;{m;0Gc zJp>6T37VHYnoeea)#gu{XnY7Etev&6ZpK5_yKM-qJwo#f=PmT-_rA4+=EIXT-nwGl zvMyXp@)082Xnetn}!@_ljv60cm z>RtRhG^#;=7)38yPhB=T7tK`PH#RbMRlQ4TY2vj+Nm+^-5mDk8iO5f5h&;v*D=CCK z3qy!Uh<}u4BX&gJ8^p2Za0Dn|{d1NEX~=-II`g=Q=#8+mEYbhHeuiRO&`@oT>oV=KPK zZ`UumvZ21NcHx5gHS^}qxvhG3Rd`mYvSQ|cjOlWDS#VluNpaEC!h*??-@rXSIJ>gs6h<07>o!6%DwnlIYUbBhRyfkq8uGkVk$887l7(g}O-58RBWk5dR|f+f z?RA~<4iD}-E28DCp13x5+p;C~5weVb)*U33gM;@*jGjo2yCRa)`%wZN`O1jbT~QhF zuvV)VT<@p)MwbxbGeoy*@b8EY$9?Iun^Ts>QdAk@-w_LjD0&A6LvB}Suyt_R*|CA; zZkOmDJQWu=*i}g}jB4s>t+Qi4*z1Ud_BBMr*40oF8*FGnb;LZssXl@;Lax<+%V-My zD|e?AIns;`<7I08SvI1Gpy;4DO-o|~-+NX@%V{JsFuy(;ccJBu(@6Gv8X~xraA`{&FY2qgAp#Hs?A+ValCg~WMDbvr%px+w-|~4!ja}4G#OpR{syJ2 zi$Yb^*5QiqnG`Lw*2D^wQ&^RMK~agse-V9Ma?lPkjV4#In>NGRsdQJi#{RafPM{6A z^1P9-CrbL-`iNXX1M;#MjVez`ep+K$DIcz9M1>P6x2|`3fpFXQohQp9IS6! z6>+vY+UQJM<*Ik2MdSub;0Aa7$_B=06hk=|X?JN#j}bhxw!V6yyLx_OeNhaMXa;MJ z%c#7i8F#%S+6-m6h$chhs>cq}KnsdA!4;wb_l#-u8Bu3w=q*x&E2)fCXH0X|g9DA1 zreH*JT$L*;V&z!;rbc;x#!fTC_}@!i(YwNOtW3Fj%f`ILuzE!kD$*{(s2yL#auYup`c5K+jhB8aiDTx4{AD6^l9D2x#YB1=m&hdrh|UZ=r1Ge}{5^omWC0XUpaO%h+&v-sP6d z`!Aoo%1bgh7z2=4_>JIk07bL z0Hp4BWXx&!mGf6vdB{IYaD?9bF}yZB&H1C6Oy{dV%yy2w3^ixF&JLU0_rOr-|V-47~u67r^iWXbjJnKY#goG7uSx;7DXR zay~-*C(BRbW6wsO#lz2@e-`_nDSrkZeHw_4&L#JLk=C%7Yr)15Vk zVZ%Ws9V0ZQ(*neQ`0FfS$AHV|-K-d0%f&F-BKMe0bzaP)r*RpTJKC&w` z<~+I+cHA@B+0$L_?4~2wuzs3zeW<{h1POJCfrL7BfYhnzm|JOH3%!?wCOexN!_G$f zHs_n_c#0D)pVVz2U?AlLU!FfUAItL#ibC@IjO@^Ra%~M%g=+ep-#*<)KP<^4iGqf)$RzYYiz1N1#o}E&in2|Gg7J}`3vhK zttk!Fkv1BTSzv$$#FSGuG^3%XyJxe9T@Vd_pdOE>yPJi8#XQkGB?O*snoWy!_jJ=p z&t}x^>F$B#i8fDLpbamj4bVqVwCV0{TE3gs?@n0C z?C5u>FLEcf@~vpA^1Ru~Euj|Y?Ffy1#$q>~ql?l1uUFJhLTAux=p?mMCtkbJUG({X z%uQ+M&`;3QO6V}U?_V_gGI}Z&I)DzLd;e*E#??wwx1vXA&u7v1sXH_Y z0<_mPvD^>QTi@Ii{3pDH9z;*lk`JPn=<_f&;`{L5(1UmZT91E2wxheLXK;*4kPft; zmTyJJp^18ScgGr7idLcxw=_D4hS1}G)V3d(;A?Fk`yZsg_I(QZ9@@@9YWr`TP~%DX zQgI5M6!z!P3rgDd@l17?bmA8=9(jmH9zgB%UIxFVaNb9zqYB;#CvNG#D*A(k^!ErI zA^lOw9>gv9UOYl(khi%#++}{Bs!(;iI;8$zP5SlUsu- zMJl^qO1F3>**QkhcZ6S*5o|o$@BbF@thWuH}C-EX@b;fwVWmq z7$87I3VAE;!ULFRFI+=o5j;$PbrBVy&u3(Z*;{rcCWo=4h5mnm`&GoRDpz3@ z@1oLQg$XJTyxW`){*9a7ZQl4hkEdA)OqRe+0_?_}_gl`6ZoSWXmb?M4j8?)c6prxN zXM7>Q2NhFnHh@L0+5@mJ9r|+j=HlfGHZ8b&0a-N*`sYH^T&VIicse|Pq)^%=;f!qX zy0^Laxk)nb<)`sWcuuQL(&lQ37AN6cOq^%O{wx;>`mi=JDKR&ZNI996T;Yr=ds-FM z@%v`O>^UZ4Cneq*I}k6}OT69^JJA~o;bb8cvH=H$xNu=jxLiL^kM;Wr+&2f7S8l4r zg_WU7OlC_tbG(_RN*i~0ff{5(<(JAY`J0o9PAq z=1YEx6dLvW{iqq5jizEF%@f}hFNv3EXtLDoK}u12#{%@lPs+@SC+j(vDwQA$;`}uQqgcKtx|@$6Rkrf zskb$+lQ%!Tz97(aSG6g{7MESOv$?9TF@HwafrVuc)&=LMJm6jvD(IZ-DoskR9zE!g zDsx-gGLonFEXtqVaD2wbK6iLsm3Lmn)VLYJBq`HAtz-YfdD}Y{rcIhNcdmOzcirU7 zaA!sJ<|Wl>o8DS~*7)XD&)z?_7kbsgy*eGYHDj8`-riKYy(nqw^m*4F>-e}=I?yq- zWmb+kHIuEf^pDo#$EXaZYC+DsR}c3JP;Y^H490|bW0+?TQ6-A10m^*3zai@PyC^4# z4j!TMa)#!2nv3!$OOylYWo9@F#1n=AyPG1fKeut;vgek6?y2{9>h~;tZrQ%ZTx{7p z`j_8zbo~C)(Y<>|Kck`F{bghyg(Qwb;!z+8%lh4V*e$?f3oNFPQ0{u30Yl$s6nM^# zU6Dm6ofTMx{Z8cNrz34`&5Zi4}Xk0U&YT2m|PMpD}9Hx!5ExSF^~92tr`7Kh_l zR(xhoI8N4!;W+h^=&%m?M?M0-GDicRkxLY~427HAg@py~0@yBCQY?LWlj}cxvS4xb z4A=A>(?4XrH^F&44|h>)r^yyX4bCo1FhZ{!h4%n|`vCy?DZ_)`-#l3|7o=I6;Bz>C z>=>>23ax$@g_|Is>>>vd72jA!H7J5EqAQ3WqT(MT1|I^d9{jWo1{(z|P!O=b@{S*S~{X~^ivz@fB7X{*x6BF8ERZm@UQF=v7;#$86d zRli4%b#b86z*hAhHQqvY5!xFyeb>uFmSYxd$r(spU#Z zDSPh5@NGTwvUBEbs+zTFo(KQv?a@!4o;~|1u)gyvus<<#<`biz{OZXIJEs=yyzu?+ z{>QzgrT6{^#l{h8xfrPA*P^Ae%Owm5SP(Sp@el``ANB(V;8cVm5vwuJcsWV5g)8`f zTE2}ZJV!(t^Qi3o-)6H0u#) zAN?`Rc>)$6;->xasXtv!I7A_7r;x-^tY@R|$a6MxusLaG67CfTMZ7Wt7G*#V^-Md` zNQWDe-H>R7&5oT8ta3nB%6eHNXXb`~Wex1tfF^gqwBFp4xg!&sGnoWngddijshMG< z$-LhLOH6A`+e}1jN-|-SzB@q;nNiq_%P$2e0Zhe=#{z+7ze1pmo}^23l3o|Q$~#a{ z#uvnhqRuKKF{!Ikr&-$r4}JIOz`XQ|mXgAj*?#p|VMfpQ)^r@-I4w}u)w^wf-J%41 zp?~x94{Y1Ed(pI}GH2?vhEn5gyH=LuFCSVuYoKRs`^r@v#fR9enoIdGkz%A2{k#0F zUNT7VX1o*Q%_Tca@aDkI0N(81>BpP(JN39XV=x0Z8P^zbQVv)(u*J8_ht)o)%7V=G zg^80}5;r8`ti-HDt=YAH@?^??n@+ReeAG;a%wP@<=+0^`xb#Ga%i@xDx0lDRf> zTPD$FCS~GGceht9c5m0gLfr~ow~knJz*9-aSeaq0`O-M%{Ff;5=uB4-NAc#rM0FWe zYfPnGqALG}@?xrtzM0fx8Z2vSDn(+Uf>U<^-VO21gH3s*D|gQ+Tf3-C8)-=tlm?W0zP1~%ALP7Gc6 zBF1duNYrk+h`%f|7|)Z6=|SyyJ(JE$5_V-e(O;y9DHf*vQScYcD9(_ zlco~8yLI>IaJvqFY!jG;@(SY+8#~}@^ z=y-CA3~zTv`a@HidPCOi>Qc9-ws+q2b@RMpa)t$eacFdZdPae~`MZn@R>x*wIx0dZ zWoe%kdToO?+@S7IE6D35q!zbfT@pUJ38`8Vd7!Zn`Q%tGS^#Y8YgsN)LC2Cb!KGWLJ02nBE@Fgm*hn_0L*L zz4_y>Lh=t=Q)jNPaW>5l?fvDxrk1kJ-|wp0vM?`yWqRjrbMI{{$*b#SQmsRg^V?B8 zs*v+~b%Q$GLB+{>l?v6wff(nahKa6)>1h{|scSjFHtOPf^eUcB8aD9eja08}WLRK> zrkskc?kP!lYFa@W7uR`uVAiWOyU(l~(UI?Qm%lsutI=PK{^-mJsDxthJ#>ie5j9Y% zCQ+(?=Aa;&kIu3GU|YwmidA>BETP7SBksikB#lsU_=v&>(1w2Tau zLD|BAFqTe#l>^{o0HUYHpi?2MS@a)5gL=A%A}y;lMc3+`2ypjVO)AD@A288 zH~|H>cmY&ol3U1ZzLo4r#hYK;w(W)6i~aLf7M3=brxkZSv99~XhQhS+=3sF3ZQlQI zl(kjOT3()PD_K=j*FM$gPOj))G;c$t%S9*Ig06}b*wgs%`m(Zh4>!!YV{w7N#g{FA z?kt^s&x+!b6+32^bS@6YaoU2#ci`I!>dW2k^7?|@`moOzt{?ecprtA=Z}ze&)7Q+& z&7HH3&bd}f9aC)1{ZQ^WkpO!DnbRa@&MY^`d4UOTn* z@Y>SyJ5Fx+^lz_cRILe3UmebJhgMhSw=XQfzkhY~Pp>Xb3w6zNG}ToOp5N!69dJ}` zJGo|Eq;JOP@so20SC#tedaGykHUuVx)-b82*xX!+;_Vm8=|oMee1pVXv?*= z$Q7H@cc$ab?wxMjnADks8?De7-y1&|Pa5^Tm#VT(dk5?Dy_-(=$(Jm%P8|WgmrAov z9)E&&VY14+#k|W*I$$g80n%aFYT08U-Ku+3c%=%q@%wn($wMz1Wc&YYZ<=f-I|(i% zi^wWM8aW7aP^X4jYA|C07Gzars0vin?1qn3U#M^rpUao=B7g8P`GR0_k~>G~U1N*buw-ks4cUfmS8TlB z27p^EX7d(3=y}2+6Dp_neRI@oX>Q)=Z>HwTMkABPEMO`Q`U5PWgp284R9;QI(nuO{ zGl$DZvZz5r(zyNK8M*7bZ{YIZ;=+;V#1xwWaJ)Uma0VOT$Y>kC{i}WsXD^tU$CqZb zP9#aNId5kk?oA&|e>9!&I;$>2M^xB`GckGE1V>G<#?)upYa*s(eWP8bexlu;gBoS$ zB>yCQauQ6E29k3ckxEp_Dxy}IvRnF-m(#RPJAa$c4$MrOxpHRRJ@vlPzaBX-dJd-7 z_Jm#YCokDvGkOHNtNI%9;l4Eww|M#OS+(06OIOzg4cd~%+wqJ|%SUIV1s9F{aOTo! z$)jAtv^J_msRhGtr86=MJuA=K8owt#>M!(V?9ITPnXoN=Upnqght6ciV2uQFQ#w=d zE`K}Z+B@ykXtioEkF6NBR_)=w zsyT4JzyFskwoWe{z65y24i3A=UTW{Nb0=U^@>J1RsikEn{PCfy?m$$Y~ zMSrEA2c8$W79c_kn!wV~tgtkrjpDaax1IXyX|elBF7MidB>&pa$;15iBcszE9km`A z@B0DTw}3icMtE%aMSVgTW0i(MP@;|tYc$lryMY}^2VBc#00Wf62Iz;Qa1!2w3!u?} zY)=gX@QC7%H!*XM&8nr%w*cm+egY^kQGXA~3hl&n?XTy^C)}S#K7VZF-zaEoHG%T| zG0OLO=wJIq8JJJ7Ce$U6MRr(Z2Hs>f)tN|d++ZATi0g>Modh~DRAn?| z;DQwB)9=+|nVM?a^d(L?Ee-WM_dBuEKj8AW`Um{P+H?|~L)e9=egu@(a)nBdNq>A& zOO9D=;U%4{!$Z1@I;_+2R8uk57su@fV2sb0;vK5G{7JDT5)@nF9ly*`c4vmWk4!Wa zrWR0J*BF}=?G2|u_3YiR54E{pOsZPFr+(nIZNV9L|EPcAzKx4gMw@V*zyGmU*PI^x z;#32EQ(=4GqP{tWQ|hLrMW@E0x_{)nsmY_qMw6t)Gcwuih*6byDIC=li#4})nY@z2oBCV*4odaX6&Xy2)H9E-yqKpvX3F1Xw=4+J5Fn@*DxcDLZB0Ss7 zC<=y^cb=rYU!j>@%`j*$><%8}?wh zn}JTW%PY$>)ij%Q|5r<*n(v~TSud^geu*QHxv$AEI^*W9?0O%2~h&mz1A^`X6pG$2@{g~M7%*8*reHD774Mmr=NV{3>= zCn9P#>-1_ofh*Knz#ONc#Na4y1LXmeJ*Gw3)NU@KywO}7peBVf8OF6i%#uq3wZb0E zeBc(0ynB}N$M^qp`&J+8@VdlAn%uQIqs1hc-RSXqA4L9M?L-L zsVSjn9>0SoWK*pm(u7=BS_XZXlIcS*hEpj+JWo@UH%(-3d4G&%=;PAU9o{9m>1YbV zA0XI^4kOGV&>-JlAN2U3)CX_-;EWG+K6vkGA58Iq%Lf)8ARm10gY!Ok-3Jj?bcgS_ zkF@%r)(5guPV@oigNLuM>aY7g@{wb#*a07|@j-lrto_d^pvy z1SQMKSe>l0TA54|O%(Um6jGfINS{uUDShpMX0}3Y41Ywqj`CIuGeOw3iC%0aeq-$2 zJf1P0xoJYi^~|Nw0P_QBApcU-2xgl)%GJ#7<}~A!!l{K*Rce(=4Q^)pW@g#!Hk+04 zGo%uG8JP+JBfkh^OyUiCr(yKKuF?G}y}_V1ia=AJx(c_eEhYmYqSc~-uD_FK0-fG~ z6v+21%YV8ilVL-4p5IVoF+A$5{5D?g<^v(E%{-ris9~wSZL6i?U)0@2Ad zphFra76Kl2U)K+QN~4Vd#ieU$X6W=#kw-C`1~+h+nU$GYz|=;`NIa$<%~St@zaj*4 z&v22+QcjcmT0Nb^;mMP8SLBf+3>z3NqZYz%V!J$R<=IUckdy&J1}sPeD-|_qQ0oAz z1Am(AkZ6ZhMpzvOs7W?hz>+iI${EPPsZA%f=d{?R1%uW}9n-`X1Ltnx&Exw!&EI79 z#VkMWCVTelJ3RbvTF#7Kd;Gc4ub!)4avJy(PXd2x$xo*DzuI@#5Btlf_rKP+<6K`U z)#sys8(w|Gpk4Lq=ojDXKYyTRT(d7a^nXFrx>Y=;cx5$v;Ry^6+2OGGw1~ANiR2Q( z$64bt;s~{84T%GCBG5mJx-mv7jjF|I@muCuS}gq*-e7spGG-xai%jK~#iBO12t<9e zvBp+N6uq8wDYoW6?g_aSUq~Huf(p661h>Apb#(bTJpaxgY%3c+etdK%-1GQh@_*YU zM>kiDe8_JPZus`HU3*79c#u(S^iG9hY-Q-X^2W86ZI*o&vN{1)r@+cduvi6klc6yS z8uMVSd7F8knIxGT%{VE$F&kUGbzYoQ*jR`)g<#FE%g5?`(CclygAp~l2-|ehan6BV z4lp>J4(xE143yy978f_Ag}0ftEq_Mjzf>Mjw6H?lC~b|!#rghm0>{Q0b7G<%Uu^ST zSqAdqe@XK>54^w2T2QetkSyCXnj4Gq-8gdQ`D!4svh zs}OcfhKIA^L>lPQ9BH1k!)aVY%83-b*9d#na1aBBEg0`8f!0Fkuz$i9Bjh&buyu!s z8O+lMghq`lnyIHWr4czrr|cwZr&%=H!grW=n;$WgQZr0pwuPT2-9F{sDGyH}B~!pW zh4;5?$c2VnsLlmdF65?D%du5}1p-tEATU`J-E)a<(@~#}Z4yLxXQ>z3d4z3HHeJ*2a`-wK}y_-z4R z6d;FI=%5u23A{r9l>muCj?%^<;RJ0}{RwRte<;8S0S*dKOv~at0YE3f!)t^-VXyGC z@QU!Ma8*#(3V$@!Ba|{Yt_t|L0Hs1TEke=-*ee{S#ongre7^vAp3ov-NdSWY?e7T} z1RP;umbzcyt_W~cI4Q7nu1kOx0b~K3?5~^_*dQFG8J7h$5@70O0S4q|VMsVHkPQOV z2;dihW}Fw`qyR$#Y!LbdEDA0`7HR};On{35oMR2P3V+OK=gI|eDPU0Nn~R4=EMs+i zm-?7G!qyE3)L1!7Vz4KN)h14#+uoRN?6TW&I-uA5HRZKfru#M6t#nqZ&MiQa%ywmV?Tnj0Vy{ zqD%jkB7anB!AjjMQ;q4EiAbg)(-jlhZ#rr^X(A?N#YT1vJI*^UIyeU#SUNRNG>!B4 z7JdUy_VY)1{2ucinbSzryjex`ElAPritWf&{bRl>+ol;;b39w!r*=q8q$|OAj6du- z|LrB`idXGjxZuI{OfTtf-9C^ZK7v*8~GY?wk#IqagMTNFVO zTYsrE9~Q5Oy!f@{VtkI8q%MkBESXvbH zxoMU7Cc7w&tqa?zNoS|Fav`;cN&FilKY9yx8B*io^>OiWDMr}w7PV|$c@6HItc)CY zy+kgeD8AIYD878$V!3Lo7d9KA5AVge3V%aS+>SULii6(N!Bkw8+K}3jN;W%pI`J&$ zVrRRP+@A+cd290e^2l}(+Qc3a*NFhGs4GWZGa9%D!Da*%s1~&$Qbg0J~zH3o(S>qN&J^o9_lmn1$v^=!^iqB^f+E`OG?d6ElDLpDtwaqC4W^) z&J1UPlc=2VvGWTjcBZQTZ`8`_%Yq);4jZ7)-1`(VEh`h2j#2TeYhM_r|PzWu(FKH`%Tlfy2b`)xDE-jr6P%vE0Gm}KTGgi37(XG zD&a#C3`$Tht(I^VYZ5e4f`tD|f}cw8{b(#(3QM~s{?MDza=VpQ`6|{X2pCeLg#TUo zvxMK4;8E!*=?4&>6>t(2aK2Q)`Mm;86#Q>1;NPi$->iTilz>%mN`PCWe(9)mPP!nCNh(B@Po!2cJCtjOwzLwsy12kT&<(rG& zT%Hy1Trais8(i|3|GklU9s#COm~8emPXH+@b?j8^_^H`$9G5*`4^XE))~&~L>$a7f z9hc3_QapIJfn|;fD(bkK17_;M+w5#z)*OG}|LddAb&1-zIDMQhLHET+qs!hLF*3nsFj^V$b2o+hXF09v^Fhn*1&BV@MuakSkNSD@B$UgQ~}9U6{@gWWmn<25B2c6 z9-h|2kREpEp;ZsHdXV&xt_P%t&-HL#DR4{=2lUXThc>n#3{&(V>Veb4I~VovfgU1y zIIf2QJ@n|IMh_KwDq6w9TB+6V(4T+Nf28L*{SZK`|EZpEdJ8RIq31elX~`Y>1M(5t% z2W(B0CcdCEgmsuOi#|srE`l$TD+D{qNpg<7M>w)c4O7%?8WOf-$`(vXZ1J3(8E0z? z8;hvsK0pTX6u{Qf&Qb z!)VR>IAPTIKJ11&-ycoII=p{+UfrQNp`m!SX$mzV4HvIbL1QLfgb!k}1%HfjG1c!_ zMLkS>NP9y2mX<8if}kzd;zVtOc8~T;EvM4L&%V^c$1FWj`!X%Vy`g`F2JKc_o)l^! zhn9X>`-zs*Y2gqp_=fh^T6|gy$F*=!3wLXwM+=LztF(9qTjHLg#U@G%Eqtyt`MUN4 zEq+4#q82}>g&kVhqJ`yJsMUh9pq8!$n^O31T7dJ~i(34;7LI8nT6{nYU0P_;T3um+ttHm;Q zX!#GcA8GL`3PxxREHPLNTE7+}Qc9{xA0Y%ZT+|DoTu7xW#2A0(<|WlzW&I6yYia(c z$|LG9To3q_mPU$yPT%<+ppM4J?C^YxBJY*ck_tl-;fEuC_$53GPyZ5!N6z9fDIQsd zk1AieP~W|qn~U<%bo3oLe`|105O0m!6Nhm&`yPZ(;;|<|FoyYLYckHrNDaw8VM9@W z(f%S*G;_c*OId%#v{;kFR%`hzCjlbO9G;1f&4iiCcQC2$aN7KATk(8BND8!Az;D@a z!4`|5CQ0|+KSJodfg^Y3|b@&6>3EH0f=Tb8MMRa<}5et7*mKhG^Sq{dI0nHi|^ zB@k6g<&w?rMceCg|82(YjRh^1XAZ8}GdC4;r8Ae7I1E`c14enxT+b_~MtwE&Int%k zIHt}ooKjory0?6JPeB6*#{9;r`c{V59m@IAcaReW(1WtjF?s7`ywwd(W#143>9E! z0gM&EaKXg_oS0FQBAQT~mG{@+C`J|klX1wVP0^jC@niKd@z@Mv+N8`Z_xSe}%q63G zTpeJiAWgTPj^k2BH}!olfEi~$2N=T{pcj|_c<+C^KYA^>thI91x~j~~s9(eUHjO%7Nr( zlmoNSW_kWr5w_Z4MFy-O;0igNn$R(}E|G&~In7{p*CaVz{jUA43og#(N)la~F3o`E zyykzRhG)yNtx9y5Ca5(Uz9!!0%z@_d6BYrsTgX;nje$G;8xt-CV&_AfK^bLX^gxAj z4vm|5Fci!VxnoZ2cEgLpwDtqb`cH4jPoG}jzNw_?{&rdaa{Q)_Iqk9oPij80v269) zxS89Q7B71E-8L3Y#uJO^NH52DqEB92H)-W0+?d~)kBgxS zup%P`E|J^H?cq3;+NR#3-lgWuAvqWAH(fSiQ^A01mQw|)uQ7ntgmnHIjfgU8NNh?` z9#9w{_DMy4{tbV;IfKm-Y!uV-ZT7&F%*-h7!!~Jh0bt)-|>75l=Od; z{?AZWz$5?XI_YPxQAq#X>PE0Y0xoP^uJ!nH1^C`ob5?koN6=_JfCE;N~;I=oXq|4f6TTxrW!T;9nZ!caN&dY16@lJ@WpJ()z={ z>`fSa`r9e9`xEt}?@8tNk(M2Hs?MF@ZK)S)$D zXNo^%UP?`IYRT2shL zr4W%*z(8BU=9)N!NKK;309K}l7)!8q%#9uo+p%YggB>$xFScF2RM8dgf)S`~Tep5D@x)gF~<58-V&)3TP`!+3mj zF}ciDqsgce{ZMrBQ*YsMd*V!5d?fXM#Nl6V9&|6u2jzU}aM(_7xqKska_1#_7#NtK|3>Onq&^ zwooRvl-6~H+aIFd)v|xX8@f;U=)~gi(`=4i@J_C2FRWZK-RYE36-~1S=avUkAEU>Z2ZnDNoxO2*XE^|?l=;nsqU~t2L z8{CQ(H`~L>38CRcK#5|alz1`mN+PdGOhSn|D>BvaV)P>?<(R-mWqWetrr3<58V6!u zt560TM}~4_LD_`}riNi9h%W11 z5FjE93;3u2UF@4Kr?L`!Mad9YapR*9}V{F`C`4ia8bBbKcGLR98uygFt;xn=a62c?wTCSyr{pT z7t|QkT24M=;1R_HlOW~g_F_6iC?eQ)X4Ij1F99`|%+pR-f4@I?Q?@P$kB+fs~z0hIS*8U)F3qo}e%2~5u2s(o}TBt9$H~4h$ zl_0l4sUPjC^OYb2hA4f2(gV=;=}@k+N|)I<-e#~uTkrrIA_JAsA$-m%JRSTnNNA-s zL71XcG6bRce-)Z|HAs#Hp@&t8j*UdSV|~%QG4wdxp|$_9eH(k&L6ptESyw5Q&RKZ;!>Jjkg|LYdwQ2V z(8dHfE9a@bYvIU!(K$x`O6OPx(?pZ#++vz2gK8oKN6{D+>{$ayvGFcual=_)$bx|^ z$Qsu~e{?<#GvUQ#7L!$UKE((UrAKt{?VB{wKSu|{11YvosVi4B(2c<-l`ZHDHQrsD z^{<8+9c0YH=Thj%;?X43BbRPVFeHV$hn)aCR!MG>lFc)Wu!#cqsU>)z^ zv9b@Yre5EW0SxH_QaYq7ZZ$P-FQh}_ET;xEf0i1pm>MLvl@0^aZ%C5P&ICb=+(Z5vedw)NcLi>KX z@2=y^vvO7(@4M^q<=I)wpHRHo(ZzIpb5JHKK?h{9qiAap?#SJmi+80TOvmX=PMWD! zf2wjeIB}J_L5+8jgM_W=-SBHEC8rHcPBw&)D2kGJMdUPMWEzxDgRW^q)39?Ij7@{# zX&0yAWN*zR(Pl6>G=(+%|ASxax$%KtmYY)c>qP!KLb96=b@e>w~;v!`{=^D+0fdPQjhf1cEL{$O2w8+J*hDWeU%Dl1%?E0FX+Nz#-m zzqRIpcel44Sz9!z^~Al*%_&*0tgp%4jZB$H{M71Gmy9D0##3TYcQOi{REy8fz z-7(%Do%)0TXZDoT6x*_OCMmUS@zf+zHfh$361%;$tk_c4RGOkDkMn%de~LZxN8Vv} zLoxO3U!;D|RP>r$$IgS|4c30^ek)mHgN#DRb%1pWD4&h!QXQ!{y~^!IVVQk(hlk9^ z%n>s&7Z2#Fv~prX5(HY+z=UJPO}n7w>XjSHp2Q2G@* z^U_^nd=1~K>(b!?cEp&?f0x+l`smA4TnucAY>a+m?74LFXRhaam>3>&bN?) zDeS*4L{GPsb2mra7jg_Mw52WuYwJg3Y1n1MTwrKYRZD`$FV2pKj(GOT4$0O-ho1eT39^?1&L!x>Yq@RQ5$+j| zqp`T~23x-k+v4;#B8CLb{^+p<7ccXinjc62gQ_NueVHv7%rT+*ZnN?U7vqya;F3N1 z^?|1us94$9yir**e<@%t^3(uzirujVN1U5eSM=|9?kKq9r#}spCrwV#==6Wbzr5#f zf4gU-Zf?0o#YO;lK!?Aulk&!=TnW{8Tjk1w1d`Hn(@N4vVth#U>-OvLIUVfR9o3EL zh%RdYLKo66r(={Zrc0ExoF+XIUGIowUCF{@S95*$CZpM7}tKd``WX&YQLeC_!n%PYO2@2q~jEElRQ;f z(>erDh(ZYOLI)8pG0ZmLM-9+n*lO5gAO)n7;BOHi?c{cHFCp>lY&gfZf68b;IgMcu zMUU7gVotO~AM9Z54uA20_`3LksQFNY8*$zt0w;n-B$zcZro&Ab=VG17VNxE|rY6%~ z(_z!wrVmY;F%!IQ`oM&bnP7+MfC;ynpu$vZ!Y&hVCW{HbdGSU8mcTMuLDhJGWvU!3 z6Fy``;V^3nnpis!O@H`ny+&VzmbrSPmTunBxM_!D=|q$Dh8a7dXzZjD z<=dh_)Rd)JY!7ez;5ge8QRZRuMs_B~96cXy4&ar)8ohn^uWGZ!s8X3NR?QdZD7VVC z@``e+wR}do4S)Zba^~0w`%iV0Gjqu)IsH#|D9M?fgL`uZa~{nh1!AR$H;e3_SdhY$ zPzo+oK776++bA0rCs!ro;$%o>%&D+4`6kipO*&!HX zI9_i{Nmc`LXS<=^4K}sg%?_&M!&SL3C4Uz(bK%Qecq8}YTzoti4(7tv zTqw*9<*v#liMjB3F1*OHcH|z&#jA3+3#+_P>xDvZ$cq!b@VOU0_QLC4c+m@oys*m)JxY;cFIc?kUaa!M&%R_; zU-YtuxPOjVRl%F+#kA(jURdN^<=y2aw1$UO0$SxGFZ_DE)$e-YfYR_LFSN1JFvVNp z#goR%9{R!yKlc98i_duB2`}vM!WIT$n-|YuMZxCH^kU8nfAIdzi$Czf8(yGec~B|2 z%Dcsj$48US$^ys6B>yTls?$ng2H!z1sqof%aev`>za3w&HsOQu!I2*C4wfCF!y)Oc zh|P;XXG8ediw}5@dodkDhcbW)mRsn>*N6E8Z2|95h6t?;hIHB$DLU?b-TQ&}b1yfb zptafyQVgwEm1@Tn)bvF$(&i-&FI-WO_clY-4(|c)8827v1&q9+7i-kacFvABhG($t zZ-1Di26b`{F&Nz0amH{Seq_tdPUJW2c>j|P z$fe(SaOIzFmrt0`Hy8I51!BifHf}No0?|LVbGgwI{WY^c_S^VR&zTe!vU4UABizAX zJgYHkw1S}3m^G)*kN)EHOX_&FTB8v(qJQf3AHAj)X;`CC8`S3__y>-fOs_xBo4LR_ zGMh?`H2X|fMpkCJQ?}y&8c9r=kuu3mV>6TR1*YBXRJ;9!$`Bp?wH!WxVHbw`G~d?X zts1yn^`HuGQNexa+X!z(FjafI7AI?=mjg2gBmwS#-S7x-cJ;mLht))-(Sn-e1b;zP z{(DsE`1yz&U9k>xIt%SV_p$B^9eG^`?0b_Jb!3MQRJu%ENViJ2OUKgQpd|#2a&98Q zIeuo{ArX1){&f)!157d`F&5pAi&>z>6 ze^&U-FZA${9)7JH5qVKL1EQkhZ-0?~m;Rvs3H=-TU+X{C3kPWcD_=go^3rg42Wx1R zev6*a#xnJVdQ2O7m<3qk6Z#kbzrL@K4cR z$_@d)XK$+tlkB0Twk)UdLMb!lE?B;N;Ph41KOJguUXS0{>alg@qhF7T~4hR%e*KL z8q~BtPx{49BdMcbE_x@tMt@>10>}-M33*Xe%Lhhjuc|N5L*j-3e{)<8U?!ghFRo; z;%wghr9t1-AdUpFEr<<4d^w0#5VL~?egXO|LW|02Gc`~T4buqSpqq4up3y&)cUONa zk_n9;{o&ju)IxRk|9>jh3-v8p#UgidJ1ub8_7~HHPY7?(eNsun3Br$QlvIN75aBLr zCRIfkB2-jB>M2c=66keGk`iPWB}fS{OjV?o$F*vkD8N_ZTdqq2dOM~aI z^*0#Ju70Nv|1zmVG(;*&Eu=!Ufs{!_q@K{M?$1?Z;f5ko5z&93Rk{Q1gYyCJmDQ-6XcftcdHzN&Q=gOde1@0OoYR|M zCusI3z2?!9A466#^79C7R?xDJ%;R^)%*=I4p@>BnUpDD~-Q%b32s!NyVcQI_s$F{W1fY|MWP0WvS zzJbYMYGRAcobKbamDBy4wzEzLQyyE0rY%I-LQ*V5nH=Udv885CwWik6zS*qt8CGks z2b=~t4Kp{&$xNGv3-3s0oGb5BbxRu3VV6Kh12~kZ(~AeWKAWd z>5_D=k8^$Vbzu|NLqQO^52iiNL2IzKjLBHe#6a=P5oz4<#aQ+NbUMZ} zGBH!HsZBEdgIb)`{ zhtV#2P1u2|g;=zS$wa3~EP5QajbIEuxPKPP4`L3Zaj<`lIRuos&ov`(S z?Eq}6VA~(sKLlkzgl!P5BfPPL&}xw83hwQeE8OR(nvX@Z_zG0beGJ=LI4^!_L} zf5Vp5GKzy^ZaAtIyPz@?$yEb3Xp?8fr_BcOJXiEaEFkI8_@DC zw;tUOd^Av+VXyPa2Dg3eo2ZP7McvsteP71D0`k3z2GL{A5B#o&t*)gzdlq$vM5{tAnw z!|C>Pgy&eoV3g`r8kod^B@Kal$9Vs1tglml>TRc9MesJD;SJ^*@6nc);bYiHZfpY= z)j$%(1~xJN^M7{p^G>OQhmY|#obJ~*RBOMYzHn{i7&xS7a2c-m>)Qz(Wflki@U}+Y zvXeI(6Sy}^$eRJSF@d~cCa=Hd=Uy)%uldQTLUM8;dBsSM8_BVk9o(@D^0I>*%^)v- zY2=7TUew478abqq=NtNS&tE4E{mDU%99T%6)5v}cd3K+Pd)7hrnaDF4D*?GY;?nbaEe`DwUAqXoUD7u$gQ)IbpduQ9Id^JtXX}WTceTH z4;ON)kCWAl*@sspat{}hhXd>?plekkS-HZ>t&AZnkG7l&w6H6zWEnhqSqb@nSvpzj zBuloChm2%#NeQ=DBa5af+#)x5aG`~JFoP_#kOg%zx4=&7WKz3@)L6-U1DQA1%gwt^ z=FW-Y=6cDTC^8$qG&_dO(#QiEsh(-(sx>mxOlAhys)c06^q$;|N;17CnO14yrYU6F zVz$ymDg$f)G3AB)Z=98Vs=VdA~&UwObM`MiKG+?m0l+$C1kQn ziZwDxBSjNCb441N*qKbwNTEjVA56wCB;zzPwl5i@kJVkCn~$iO&}8@PoG$RPcR!u7Y4d>iS<7`T3J(zlO)o$Fgk`t(+~ zK6cXkZX?%QA$JEP?rtLqNF+ezIFjwPh4f@QaXp8U9(fL~$6%7z-N5BJNM3;LZXkE% z+PJ$4Np3eQmun;4tR%-wvNe*`)xl+Hq-&;~>*^qx83r!XPBOYkT!w*U1ohKJBI#)n zTzX%U)>-A!B1qaPwsVYsf$OZ2&WqVjQVG{-3rX$h;8F*Zj=)4m2k97KQ-Ji85|Z2@ zolCx(bO6FSq!T~v{2EERizJ#OxWqz|5O3oWMv{2=TD*=UXv7774|Qq8sSwrS;M7Xu zu-iF@gE#`L-A-&!&UTzwLA+LtD6ms{6B+22w-5{5vuMN&6__K4Il!7UVuTZ8pj#y| zKpDeAB9#zPuyUe<2v)*#863ZmaPU1YgRoE;+lfG>jDg^h1Ze~x#U;zu;*S5Z33dEW zPSFTq1DXXr(NXk&4&)EuXb7r6)o2CuD-8M))#=w?V?~!e z*$Jp86YhNp<;&oFH!9ZeUnlSCc?WrynTHrM9FB(T-`I_glI|=^-VJX0x86ZL&@r@+ z9&_)aEl_R*`WSL=sC^K61)ar9(H{IET8P%7S@gY76pamk+=oC*1uEt~)bsb~e*MYx zS_StZ?|>&&0H3cw?R$dPaWWo3ibxqA0~|7V9~l5wm!S%_2(n+#eRckVJTOchJU_%Q zdY8GMNoM_cA3TRX<6WqKAL_x;w{<^817Kq){p4G;o0xz?H}@JEBn;wBm=_kJQE<18 zWa1rsG%7-W3&|*`VHjLni-zHk;VA$E+N1(B4}FS0#f6NWNoER|hnQb8{~!^h6PZYs zkT+N-JA?f#m(Tr%@5Qg{jg__=b6a6BlkpJi0TuyC)yc(GR7UVAm*x<@fm!t#F^r%;+DmI9iRE5 zyya$2nDif(r?uzy+@9NWdv4F|xjnb%_S~M^b9?@e$m{g{b|TZ7eg8}Hj-NC?-k$%1 z^Lzh)SMnbduO&H>(vx~7jZ3OXnwPXPX?xP%q$5ecNow-D{0aVE{!0I{_S~M^b9-*j z?YTYw6uE<;!-5VMl50~iVz8^_0^{R8L`Gyq(*rh{Op=OB#Wo98%set7#ilf#X>4j# zE_Xr7#VbvX>4Dsn)|1Lf`K0Bbe9*GNxKy>__!pykErok*fk_KXV|cu+#xJx z`qoYDHf&h8oMA(`C!5}BYC;S;P4+Qg0<8oI$P+Mfm_@}R%Ogfq&YVBX7-mfx$ z(y=w(>VpkWt!JX@xeuE^WIECfYS@Jk@8V8C4Y6o+AUj&(CL@_9s7un z5T8Ah_*9?1#oP5Q%cpOwP5WvTj?OE8!=5So%W+rj$r1Q2Z8sciUryauroDsjAE7nk z$y3QP?GRa^O~Uosq#fF!?OHM3MYrvE*bZEeI8@zoK}hDl2i>_)Jo2MVR2;}mB7mF{ zNMcgrP*X(&U(p#=B-knzfFAKQKGc-*$8aoZwyy>h(1{^eubroE4Dditr& zo1bcqfBMl)Pd&A1^E2blA3uJ7?%eTL&M|-Z;cvY8-0@d`f9{oI=Rud7S}yP>fO`q$ zpi_ZTi+B3QOVBEVlcr$w}Un&Yfb?GYqDzPRJXB)uf0VLxxw5=_F?)DKQbOCBtTa?xtL6ymW@j z1@fs=ASx=Z;AiLrOycsztCzLQRCXC~4esPZ3JTHkC$O5<9Tlm5I5sX3^C3}kK0nXL zdl85&Cy5FV8i~sqpOh4@3)_XWvvcCJd}=(;3$9FdMDwxHqrci;_9F9wR<)}9^23^@ z{dW7$Gt<9(v(F2&sx6CuXG~e#cN)X?yT@=CpWSbrJaYdZzh+8@y;!#Q^Zrk498-YB zFP42>+M}j-{qeXsO{<()J+4Phb@LyFzg%8fx#WwYm*}rTL(9Wc^_FKnf>AMx7*+{3 zxL@hb4Vqf8ok7{hwbz)nyaSn0RKP5l5npZLk-51HROM^ed1DPGYQzEl1_) z&c&?#+qG+d+p&E44(+w+_$;1`OYqt0#TD8j?Fnsm11AYqnIqs7kir@zvtUzbvp)|T zxB?sX1z;Q*=NmIXpXr$6ghYG1o%1Iq=5QpFB$Cgx8oXkNw#U5EtnC?sS7>je&K^V$Fb19eE}JN3FH9@b0UjOjDa`Nr#Iy_ zg1Mc^gFR>gJPmbxSw1Vc$u7B6zi?>$Zr9%s5hjf1pr@tf!Z5$+hOQS5Rlx|IJm)n@0h~|1|FT4r{v|0 z?Sc;LT@Lu5;5`l#qY%88p3|m_crDyFgu4a(*UDRZGlz7$ObJ*SLf11gcqoI)Sq5Q} z2D}7qH0Z%j(+xZrcqhiTyZQ2N?!zCZgC|+ha)DicANHdGJ1RBtrM7ZYQ3Qb&C-Jf| z0;s!kN$&xn?WZSZP|J#s(=9g+SrwF-K|h(*+qZ4oPPe~lf5z6oUBQa>eLfzJN8(X< zxYnTU*PhcFCgW{*2Cl-}w5i%g?GbG%@Npd>as?&Ke7jgr&ZDaD!pgm{)<3090y3#+FmvtU2Ar1|%=? z;xsAEz!pLoqh6-vRIm&R=w+zka9N3&U`IF}v)TuE+QXQwV1NI{(o5HC_4cVee&!&~>Qqx9|sy)FWJQ-I!%Qgms5 ztbMkv)KwZQC(lNuNu>l_e@AbO6dj*zK;TY2yvboeHm0NQ64`&zp;=d&3z4F`5@fBs0r z#EgRnH>_CksCg#0CAIUbPp^2<>-qS9+4n!o$i#6QHb1|k;l;9zk1Soi_(8DGULf}d z;DZ4lRUb%XN+g4XOAH2SC^neTEDMFAsiEI=Zn{ovl1oaSBD*KB~d1vx2 zWrWN{VMBfSp)?8O!XsYEYxY`5&@=`&m`05s++e03@~H7(DK_0wY>igMJ-h*xI>nnH*XC}D#V_TWvu&3I{{AeTup zky)9Od0CJ}*)4nINI6Q5mSapZl5s4G#c3!F^OR>`lbQrl9q2Y=pf+G-`Q}kwR~P&h zM`&NRpeetru9lwIv}@lp_2X7$6>uN!(MBaCXji`ZllBj){dHS@^Tz9c?*;lWm+4xy zRUnfsx^GHElLK)k#FxsbR0Z%-6JHuxt`;SE4KYr_+f)-TaS_HO5Xq&R-l{1G>!8Uc zN+!u{Wfe~06~QXnO?Ik^kQ7ufO+SufF{e^ZnpK zz}*FKi8XivUWpIH#9S?{(0&i%-Vc_&6f`cP2LjQAu104F#%L&X0`r7oOaR6q)_{0M zqHQvWxUXCan{g{7rJ4p6O1gd}$ZhmXuj{In=zabAVHb`dOd$q;KLSLESAAOYR z)I4ks`IxJ^zLD#46yFbh36=fYP`{9ddIsVWB1ow!mBz@WDdjOm=?M`g8|OE1oe&?X z^1RJPhw;&6ig&_N1*M5Pw?SB6G-M@JLc`|q9wrwj{ZQFL*^=|!dFI@O- z{kyKngDVfe_uk=^2dN!B6yn7Vc2pQhKpt-?u}`zrxJqT>DV4w#COHf?#K&_cHJZ0M zd1^@)ftO36p&xB!)csLgij2jvOe~3IW4YLv*w|QatS>fy?r!_tj=NQJAs|_>m#nU# zPLVc_fmApOG3}OR)hufK?~SQc;ABj$b1b z>h~xER42E8019iH;}3^+>o#;qZtjqw-ExNv$?Y~&2N~Ul4rLlc*QpFCdb$8l5|IPN z1r&;(Y?Dl^Dj}J(5f$*w8QSdVSnAhpQIx&SlR}897kwbz!qAE}b{je@2d?S3ZvuCY z-HUkON8uu9CMo`oqndKIjNH0{&U_G)SSa1Bthy5$1-T5n5nC@!pDCtP zmCL1nqIkfEksh0hk;~@8CMI5Y?7@MSZhdsvrTkja-b`;hZ9qb>ffrN?A;Jz9PaPV> zibFrCI63N5j6eCT?)euUdGLXa>ZI05g~@51KRR;kQl^Fnbo}McRlAnfQ6#AC6sow# z!CwqT(*xam-#xgWe^`PE4er+=ftdT%N`q^E<=OyQkWkxES`bm&F=v>+gUvD^lE2%8 zA}vw2=pKAjOk|HP%rI~S;Cr=ZeO7>u4XKcVm+~$HSB*D^jC7Zt$cM(tbhroor_PN( zDS7}>a9`B)+YH2wH5z(O8a`syoE!CmE&;cj5%|`4?Z-Z$I&-_Ko&&#m;@t{Ji49m8%wB-%`P$%9oEW+hvP* zW6!6*g*HE{ZC6i|2=)*8ze>QNp_Vg=9$8^Dsz)SE!ZMe3m0uRC2kOu^%rp?uUq3zaYgUqV+|HAbl^g<&7DXLw5$hz44 zkWr8plPazlSJ@XE9|RkgEuzdjWG9OfYz8aii@2%iGt?V{nn9p{O^wP$?V{3{emLEI zj~k?!8Kh3%e4%5yuRd{tJyh2`0)Jaqr@5FDbvjXp-`7mXHRX8o`uDZNC`4Nh(59mN zfd5v??6@jKn8P5-7CuavGej6TVd(iOWtT5!zz|NSEd5UOWU7>!x9XaEVhyNa{(LJf z59(t`YFTf9WyPR>{(xq!lDSHjW;oEI=n^u+Q|>5=MRK&oWQ|Tzc#A7BmKxZ_*6HU~ zIGdY(#OqD>-s2@;Xkb@fMjwP{=jihvV0l3`QnTY?<3D{%(=^O$)xR#(zQz}qY40A? z4rt{t4j;Q1TX(Ro<1c83VR-(McA#4~{7_}{2SbPAr|?97T#TRWo~P{!NswO!5{yI> z0-arpCD|wtQf20f-Kv#fXvucuFeMl~e1d4RBsdLL1q2x(f*_;98io%=|D%5D@?}@X z)jaqBR06~E=$X-rqfbV&t(sQ#Ic$Bedmd{@zD)lUgr}b;nqNNAbo~UCaba2WV1v6w|wjD(?G2qb~?nE>5oH0iX2T7@~?JltGlo@rie zt~c|vWvIR|E%-Wp9DQs>h5kf@TSjRG%*XHq2lSMYqAX$X>NB9_RT+zIOH@WirUZ-C zAgZ+6yQl-BOS=Ek-lF;oPgSToHdm1v!sdt4otO@PL@lGjqc&AX^(rl?mmpc8;Z;aH zIuh9b02wo8-h^+M>Jx9B@4rdg@yE%Nw)~#Ut*pF$@*n5p!Wwh~y%D%Wps!M5RbUit zGBSn|S&=W#)DN(qu*$(Hh^0qSUJtTI-es?;jA zs@Y&L7!4-g%v*SwS9oiLK{cxuRd!mPHm6;6q!<#7iKZlTlEp7~Q0_8ho3kx+J|$qx zHw8@j=72fh60r1^1J-~oU=KI~o{@$z#xbUU`^@)QhRb7=G1hWpxvA7#YAKV8twpvX zdy%8YxX4&zT4b7Qo@<#a*C;jCKG6Byv_%{=1KJDXRzqZ#K90YCx_J@v?mq3w=Dd(C zzQbg}=ey0B70jE>PgaDyPb^5@jM4)hqa;wbBQ3^N2pWq)Hi0y0JF$eEwQ^DSHCHcx zXMq1}(;9-_jy`su?&T_PSg&iVsbD%ywFmm!O8`OGN&q&f3P2}^A_)9Y)ov45 zY#>!4C{!^)gS8-lN_K&`L^;9gN>Hss$YF-pElSl zd6#c0nEO+3Hl=k&Mb_23QW8X)Y;y~L5w=)c2V0sg*`Dm^X6t3kwdXnp3IlBS*aq1L zImQTMY!hwc?Bg8e!c<$8t=wMjm?tc<#quy};6-8=9Zta^I_yb8f|z7aa%2mcVwOG2 zkuUTU``Ysz_X(rK`|P6}B|?cI+m+&0rubo%m; zSEa(UZ~{(O?@?!}i`9CSYr{f+$P{$yOHQB0i^!t?VoaxNn);sB$u48lpuyL$-`#kO zzB31X4IizKIlL$}U_&!Z{EUclQ<0BYA|;D0(Wk?g)@j`%6XUAlcE>@Na_a@@%1fC}Y{(k-X->+W3esx<5K$z(>i<@@fet5$SI2eZS#e?u*e6MzYPlWp_QVU?=T*g%Q3%JlbsXbHeF8pIr7qR6jLQ(jGHgVA2+lYup7Dgc z66LEfq@jIshITpq(8NfP9S$SIFd$^<+yd=701k?e?%esPc1_1Kum1u1!|Q+0-u{}o z_KR)XcL&kTh1X79Z2qKwf>Jh1JF3gh3FEauAWC-4KsHD845{3KisEfD@;dAui^*#t ziSfD=b91essnSLe=C3JCJu)$&Dq(j5$dd!PwF(f%D&W5})ubeU8!?k2?HR42Rgl^l z?OOKFr^i0?my(dAqw$k?(oGp^ztg7Q)hF<>_~;L}%R4AnK1c6=trO77zyPB`A|_EG zECEAf$xx9+QG|`EGA@m`SEQ14uJGn$>)-~5-m$0XU4IHn3D3CB?qEnZ(#go=*ko_AFFCH8lxw)lc$eue zbFL*f=C0Vgym$F>HjG7U5jh#lx1=o=U})-cvM)-={U);rcWHm*XNW|(H2 zW~ww-#!mBpPV-HRE03=;)EVncb>+>(}dUC<(m*06#`%e2)UCRJG3h#Sj z?TTr$bGqOC`ZFhf+o_}W`mVJP)m7H!<@9*9{_OdG45}sizk_>&h03Td5Gip+QY93d zp-VK#A}jNj1knWJMV?UrJpul`7@P=!)_z6HYs^Rw&v+`j2os*7eri){|DQPzRP_s7bxVij&&FI<9k_Ht=Kxd*xeP1crFSq$A2A@TSE; zu^Y{Q2qc<#w;f5#oX~U#s*;&vXORbBCA1e=NwDDr&Wdzz1zl*9?)AZDC^8C#RMHQ} zMixafxbT)Kc#qDF2YJHtv>PIKM>2&$>|s@?imah70Kh%C5*&My8F2FWmtP(~iLaf| zu4`{W{ySGuS=rR2eeuN?IEDZ&Zu&-hR{IKnN8yoxS}%dz=^7FXdL)p`5{9900hb^w z(s>6411L0G7^LXY716*mz@CXM7R?4p6zFf0NHS-XTjv{saIfubgO2&c5axrXAYhCN z192i28J4iDC`I51CPIobM_D>BDdrT5S-?*0$D|M!N=y)D#p^8NGW;?=`ZPYWvH6dG z`#bl@$4@uURWIh|F3R?aAdF8#4@o)k0p^wHYQklF?q%;%MfF} zWejt_ag=4cvBdJAakj-NV$cYYL`f2if?0&Yv>QcYC$OusZqY3{jCNCm*=T)yOGP@uWQ)^Hv2Sx?alDt0#m?baS4DgR1%2*+9Cy{=~UewCQ<<}71Xt= z>l(%~7Eq0scQMw^SK@J&0i-dTKphh64#i=Hv4nm@TB}vV;WU2iu z`D%gXKD7ds3zID+Y7MFtoB|TC#7IOCSR-o!Q;-Fx=oURrMU{swx-5iN!WiorUO|NM-upDj3Zf1CY0}kMUr|`E=Yjg0& zyPF#hF^ii2SW&^uV%AnxYO(lp7?{1*+^d56^OkSHs>bQQBQ4O+Y+{Thid8X`NCp@R z8x*5~q9u`$biic5vXRcdn)zZIbW$d((QYwV8A%lwWU(h$tsD%Rz)M_&p?;&jBq}(s zZ4J%3{kL9Hrat0-5DJd{r8`Xw{Mdqi>Sf9`_cHgQ3l^1pX`rz{8fzSH8gDK)PBm4TrkbnF zMb5dxTwPo9&Fh`Xv{CCrsJ7amUFXu1TIL$2;{iMe&v_buA6l#RI$6QEnXf_Sdl+cQ z&8f|2=s4sp|3h`^n=?O?B+f zrU_(7?Euby_8A^G;QD1cU5HVG_E+X1-T~Dl1Z?aqo|%QJMLO9|h>b3`1b}}E5?yc= z4js`@e*=DByNqpG8ti+;Wt4&yMUr9 zogy0Hn}s=@B1S|uR#fP8e{PrlGga9VO7dx@FFmq5w6FJkbR(>*CkOtWR2FFEZ6y7&nJ}o#M=?9vS(KoF~qik{n#sl96#S z9FI!7d{Mi6^(*D_RSL@JP$oT)prll#%8oT&+MiZ`Enhi%*4m?cv^_m`S3dun%V#mOY1xb= z%EY1<3qJW85Bq#>ZPk)>_?710R?Hfd|H|$sj|{9?R#NWIv5(K02Z+0=Bf?#((|}H`>DFdYu6g= zE>O`ty=0>H%j?&*(-TYfR^U0OPJeO!lRy0Oq&^!3^hSf0JSZ#RLEByHiFvE(QR{kX z4JnGWbTWC6!^5XU(oyrTg0l}zltAr&V)~(~D2kMB#?RXhLg?%^8}0wJ;TyoRo^MM3 ztF%&GyY$g*Ter+x=fS=99m1Jf3+|GZu6@5|@z-B{_058XVVk)SlHNUmBqytY^xT`x zv6}^JtsSH%6q(mBwp3Liew>Q3qCAEaD!wZhoAUB5{z!ZQ3B@b%i{cyN+0YDsF{PGH zj|8dB^4$`LWHTGIZB&duTzeD5cmS6j-Lz)i#*OPhj1_xJCgPmy*Kzj55+=Fg#yjOF zfBA<`&VO+_M0Ekk&;cX(VSyM%RBMsAom+2;SdV^gTVpDU5+&6GfXE}K==1AmF6r$P zL`fy7T&A{c^F{}v7e$lz(0llQJ?1_2y-1E)t}i6a%r@&31YODkThR3N-_>C(UJ)$s3{P^6Wg$Elz&`r3j_VM$_UOn+L)%YNUNHxef3RMS^ z1Shf?YDE;qu6I`}rdo%%(;}I1CuBAXew1yO!A8@gl`DA{GeE?lrAsh>u%iEPmx@pkW_rb7iVi{sqUvj{LURh4p*S+Bo`gr>xT>=0Kt%-^QMv5UkqEbLD_Sml0i+&_Qc+nTGZo3$ zu0(lBGOCSE-fS0l38wXbZ2V?7_!#!F=$)OUPC`toH%j)StR#<+<4oxkTr#5j7&_m7 z=^{0qPrnM8kG>k3nowt@^Pn;XzP<+<2V5{k+y&_7RWvZ*B9g7vu@g+rf(UO;HTl8Ttm)2Rpy!P4 z3NxUO{1sT2tBrLzbqWDDhbU~jTE*TvOZ9f2w9b8cr=|7z49oHA}rDiFOBLQ+q0kEcdj?Fzy=altmbEOSML}mamR*!0@})xYLF(MC(C6z;T!n9 zAWE|26kSfyBYT`lVzQj{F#OQ<-^+rBt4xOtMb0728W4 zWzM31$obNI!+c|{GT%DiHrHOOuC}jstWsAw*GF!VwVz%Q=QejC&(GXk_K zp+LaK*NW9Fs%4$kJ^fhuBq;oF)^bmV?#!N zLk4$~^e#H-T_A@BN%k~Dnla6l7V)0pJ>z?>_aaVZNQL;$?&wD+R111hHZkkT8Bgum zt1-Kas_Guvt%;#MqkFJjB@6bFF>~g<_rC755}$ZjcUl!pYW<4f5gAqfYQ@aDurCIA zMWdO4&Vt$DVM)jv@BE*8V`x(UzB5*T{~c#sR70IHIJ#Hc_~MPnUkLePidZUu3%Uxi zW5ABqoA~t}HR- zR*s9Q^%^!i)_97%OXQsiv8hP#K+kGPjaHD~oSx7MmGxQLP?w$23iu8$N^D4^6SZm^ zbnFicEsUOnqQiT_82RWe=$SSVW_a=DOA}cF(FvUA<@6 zD-Gd>T2*NYt=%DqfX8HXHgLBdS?U=IEcG}I22b~992O|!; zPdZMjC!Hr)Wa9RJWvl8wdUe#X$rbF% zIkV@DTk*)&WnaHDrLp_9d2NA{+sd^2VCh!K76P3e@jwrcBhsXEdC ziTb%}@EKDB(Jlj0%sr;`{`qMd*ulFP`~TP)cyzsA!F$g*0ZW z@CbbdAp%8&qiHICCvc)FsA7_kB&N9+x!1ev-G)MdNSW5)s~K&^K}lJkJpTC0c$~Jk zYyN=V%xZDn#`>R;S1R!!?MP*F;ff*mP29MA?K70-9Po7KV3h4fa{_TLD{nG8m}OD~ zxEi!mDq;cQ0L7{JE=#K7H>K%8ARX!iUqhiQfHHz$Is7Jn(vQMEiy|9n*e7Jk9^H~X zv{=xReQhQjba3DZEeB#g#A6OZ$#& zZQHhO{@STMwQbvWJGG~_ZMXONa+90fK>V+- zA?kX)SSWUFNL^DT+x@>|pq&s=NtZI{%<{6aXlu`?;9Ni<#?RR<-BJP+aRmfFR>En` zK1>a8VVIfO_XGghuM30{i`-&vf2_>k`qyxz!DIb8f+(Vj5hkRZs!E9Azk+3VlnT*> zBZ}~()S+`f4?mMa`=j%HR=+MG(W9SMi=gYj@X7#nofZC=*mostJaxbXtf(61qo2g$>Orav z-dyJt4U%=t&DmxRmZcm1;TCLn{`RJr7pxIT9kO||`3fE~hqUYkqOxCs7K%TzV38WX zLHEi9j%52QBNCjawT2QeZ(<=cBQ(Z>WNK5korK$bL8XODpS68sq+pRzIPE-g=wyW3 zRegip=j{Mi6PovN5mriRScC}+N7N6Bl8s9VAp(c`M3XS~;%}|8jg*|1LK}_@#aJgp zkGozsT|pg#mrB)n9c3A985i{4)ucoZ10REasJganGpxNl0yqW)26zV3?(2~udpi>j z%$WpJh)1FD14BD=-v@r}Vf*)y5)5PwF&Z%#Nl5^(+JhK3qC#;RWEgl-QKpYZ;&IMM z>9N+S!6wAo1B=&eLRHvdRdI*7<I-V8D z?7jmsc|Quha0Sbe#r}9T|92u(h7hVtW=mcT?#s-r@5?9&piXYc6_IHc#r|Y@<(4g3 zeIH4&@E9{OCeNUe;++2n>Rq_!hhsFvMb5R`jR7m-uN^f|R4jzTO)lcc{Vr?S$hgET zMkj3AuQIOEG^|uWFI+)~6i6r)KhZhS#t9%3o%9h73tM218LOGLtX(LQa_5?4{w+jp zf2Kw@x;~V3=7uqtm%vDO;Sfsy70&qO+e*KsicmCb-5te`|LLoqt-f@YL6m9Zfi2T{ZCO6oBk zW@P$>6lI{RHd z+BAkoJk2`mEDev7y&NJeb-ZnH`qs7t>$=Xzc8N}JIZIJH3B+j(o|BO>e-wQ*Rx`l& zJX{L3hw+ltz2Q9rVh6w8CI3^0qYAm(d&8W1f)fM2c*|X+#S6C(&f=p0o$*F z_M-lA4||5Lf{)fq+keN`1E?;{q)JF#6A~azC71-tewt32%3S>gS8_ui!D6)qWZzJZ z2PC)$+YK5s{V5>lHtMbRedEOyqcfMW=q8!-H8rwKYaVgP&?NU!Ge@UNk*>+~TJ#T5 zA5yCCv43Q3e(xg8St_h?EIAuo?SAer^Wxup-KF)VqfuUrv%1!W23ETosLAT-z!@UE>aFM`1>Z3R}LCl3=R`yl}9QU`L>#vDePX1SC6bmzG3BK zMnB!m=55g#C<3n?P$|Cy@ITz)A9<(5^$Wh%+UZ92AS@|Lv|~(%Bo>d8IT`Rc$D_@L z#v3XZZO}O&L__|f0z1v((W)O}j}!w-+d5OSZUgIwAuEVC68aDDECl;?Nhi-9QMb$M z>YXlQ`)^D8Pp>;=mS!D>z&)*v@WjWW(bBzSK@YtKP+Qm)^81b<*+0a@(JK(hd__>xFig-8Wm znq_G{}*W*@@LG29%I&p;QPipsl}K>_)iKuP5kz54v(%$`}pV8Pd>@md%rFg7O$rPhT?~_thkj9 zqN}r%?3E68Gq0X&!a5Gr>-m)R4g-4FU&zryYY+wBK2R39qDTr2(FrwW&0u*it~n;< z#Yg2`!%?%{26>WNTSgLeACXwKof0`hReLMP(XnXifa)D;T+9nX!ZD;sym*#Y`TajJ zfo}+1M|=tr*NaRCMj^@K>RzYHL9fW+ka)nIHsi4E)ch7*LBlD(o)xwq)97W;4|t8_ zFC=RuSl=cYqWR-$TFU#sn(;Z^%3|V={Z&`#aiZ|zG5BmoJBx{zF)PAyw9!{92cL?o zc%-Mu*$1v;i&E6^XDV>{4)e==Vzn^XN!Yn$;Xe2oo1 z$Yye#OS}puZ5GP#X7ysZ`sVw_-0?P%$>+qQ%w#CElOmns!(`Y$7>)+lqtSjYv=aoY zY$kxQ>~1q}CzHbm5yRAC3v;;BT13uq*Z*b%NG_C6^OUESf2n=v4DDG`UlN0vxR;&W zCHhzx!uVJg>SwUD!%zO=@^ipgt6Tmg=godQ^Qc{Y8dDY8>L|IgD}o}CK^3e_Yl=7k zRlr)2g5;Q2XhE+XnAcdZ2l%gOBKKGV0`*otZf;0ed_NI|U%UEfHOjh}8n@0ocBJe8 zcY`hAE+jwx|MWjZ&+xt^3bKUXyXcZ}u8-v#Bg~pL01`pW43m7Bf5*}oz2awA4?)?h ze`R-VZFYK5US}|>&JnL3DnA`gUzl&+OmL*NOK$T;WOzQxViX$jTGDhz(x!P^w^u&k zu`bQ489W|Wpx~dbN?7y(@{H#!mj_cCRqa=%caC10FHXls3op>+0hvQ-=AJFV@ z=#;AZ>MVVv>*;W|{0-Oj3J$zwjYS))HNgX1{6^3?l%Ant@o~|^tv>*38Ur1$z=GSn zdVVbJK}Tn0FyVUG(98AJtG%Z8J(ZRl1k~Pe!1%{t>++|2wTcv#l63%1lpMqy^ZsU&Mcw+mI+2BX-k| zXTf(nj1OO~w!}*0aU#ZeL~tc7}`Yvhr31Y@uoqZ#&~MsAJEUZc_E=*e9l|=OCcsZ>27)ob_tg z(?2_@u&la1j^TVZ_AjwWOX@EqL$j*SF4cSent3GlEQDprxTQ@o>0-E~cn>YAhR5g) zJimswEZN9kOjn?sd7D+ocV{11e&OM*LQ}5YQk7#F=+VHHsv&lE$wm8j?e%&4Q{|r? zn4g7h5*iP&hV~N9b~S*uzEpqZ;x5j%9MARe;zMatftD6`$ZEhUd(diyw3cLO!$JD#9_*2^PZ=`$j~1U|c(rt~bNQV9$p>6?YB2X_iRk^n4IMqLo`u6ui4 zk(do$*8_?O^M{b`Gk)UIfA(5!2ftEYN&Is*covo+f)49B`6Wn@=n!0fFyyf3xbGz7svF4JWDn%U%HwtvZ++7X-=?Wt#f`#YPA0W z%pizH=GF>YW-KQolryK-nF5|~fm`1r*ZsHmV>vWA+ ze%*Bg1NmR!@ne*eM2(sas5+zlE_14H#z0nrx}VKzd-e3D9puj{pP(S?pH((0XbM_T z#xqa}^J0u(!eUk_Dgfr_v|R8)qC3;i;gZ*P$!+YZBWP3d5pvftBaZH7=R!ksqvZ@E z*k30abIHi!SKNgocitf&Bmm=8U-!g~oVH?tX@i`r#0o15V{;%1F^lkP3n%7M zZ2qS=*k0&adQnbNe>ZwJ3l^VrE>H;e5L^IPn)huo05u`+oUGI|LT?U!q|uLIff<6& zTqw<`v<3gK=gynz^}6J1*V-9Q8GjLe5?GPyADSJmE@t>@)e~3K-gy?qDY~tWm#S@G zJ$T`k`_E$*S`stFbA0l`m-3}2aDeLjpUH{QS@tGVlivVjk!LH#Y2f~5FMtSLZPtIJ zII5vRRT(tBIAd;XSWx@JFpfl-wm72f+EchQp!TGuxIzJ~YWW-2N%+6+7hy5t>HTz= zV&dsU7%7@K^VPx?mOn5jU(YDN3QZkNPas&17bLF{E}32lJ^rw2%`x^`2-oFaa2F@1 z7*yD-%-kwTpUdBE#b|?in}LD@&S#(Mht(INBrf@@mUGw?E6y5Ul=h^Bc6lr3NBPqi z_G3?~)(;n0E9rLS=r6QWE#*1+H~x~QWv$2FN2T%q@}dSZYpYjJFQ!)Cmvz2~EX>Gl z6700b(>5t)tfWBnP)7w+^rj3wbjsj{$S_U(m9|D;8GP zAMk)wBqS$Naeb#T-W$1G1l!{G`Al~NWy1Q zVSv?)$+-2ei~pp_Gk*ms1ML^bzZ4^jo!$jHihaMK+qSYi73bfQvin~HGjEcrO?M#kfWS3Duu=UrEjkH!5 z#CE5>s}0LgkXr!n&co!H=Tp|(D)EzyHpk}%n_Blbkd@Gs9X2QZ7?;MTq!Z3tW z60WC2h$-X|8$gX?6uYOu5u=xGa9kVZl5Y6B5RC7S@9HQ$5Qbb6r5m~d`DQz-ewE9qQV2rHMkAd40=>a0zH z1uoWJA!Q+yt!Cx~nT7BkIFdO|ruZ54;x(>?`XoW=CSc%$=3;f=8<6g;-(FgUoMyUX zh8yrC>vQMslQCAP+&(&JVqtB!n1;O(Q_fRBeWqGeL5-(ks-X%h|4ZRBf}nULAaeVY z`fj`O)GjXLC$)60s$Bp`6YOZedHv?D4Su!gTYkDW4B;Um^;ICf=QsNJ3ogBq@9k_y z(&=}mp1}9rbWb5(aiu%?U?c}Z$&Fylr_m459Df@3;r#?uD}GGpcRHZ z9Y+ww$;l$PEniBB?gWNxN4tdfXxh#1M_>Eh4H%x-#<%m6=Ab59)oB$s+F~F=^;D{R zNJpIMNzgC75JMf^R!9!;pCUPRzfuS4oq1 zMGeibo`PQ2<3$;HqQ3ceBp^!(xPYY8No}>4b1=i?t$v+$>LC$Z^r+i?9&_CK8}|Mp zz<(w$TZhIYZIYc#=gE+Bp#2lI74;wDc^wS#2kI&MrHeG-nDL#Xs_UC;(TX5IX>61l zc{NqaSux2CA(x)bK{Ofi+zFe*et9=+bzSVUSvWmTePxQlP{Nbh=B(>!zoYvWYR=8_ z*L&!>@|LeJV`)=w@gHK=TeVR&`EXN7lxXotK?!e;P7IGesZ+Puej9F_v01gP-uPj9 z#6LArlgN()MP3!v!^xDMhSyFos}w;qd5o0)G&!`CSSERLfQ63_&e_Gu)X)~rWA&m7 z)&pI&o!w6^tNe7ey~9i1eeUGa1-1SgECCmGSm6q|6f_D78YDtkrPS{@iE)G9y#@jz zI{(BV%&?om#yGx5eGmA7by*rkIuS)$yJzmbP!WB<@t(l z#qWB`+w;VG1*j!K8wUNsP@}y~NtXNUOSsC$51AR}?_EipB^6KNis9f3+8cM^al8+@ zNm%GgX(7FT#tsUyETG)rdT$e~*c7x_lWYC#dzSRf^M3zGCJuV)y-DQ0O4HoSj=jAdI9dAc=1rEINJ6yWUaY z9D}4w^V0=y9T*V4yG-Zgb`~2mX>DQ9VaSA`R2gpm5o12!_}b}xsqOWg-+@aEjRc?F z*>O6RR&mICLo3AI9rNcc+S`o2s(GK8QRAJF^_n5wb6U513p45GJvI*!zn-qDv;L8{ z1vL)<@OSC?Ug<8z%CB%>6GH9nouUjyq&c$g{bR^-PmTNv_YuHNgva1?pShq+xMXsl zn(xfdY7y4{ulHiMPS+~kfty`q-Ek3NU3kfNMch*HLYx_i+@m4#xAR}R#pFrT5)IGi>9MDfB}rA!Dfg=_9eRm-&@Ee|??qeZN>@i%3r z^)}F)T|_=tXG)os*7bFvvtiMy%7J(Ho9c<8e!;PT`{K0Om^pH;<&7=I2IWdQfvcVZ z7xV)!1f@zI$W!tH$}cr}yzm#tZdf|rh*dlEq*wq{l2A?x*b9g+itN(CeC=U)#BDYO zhSgrs^E~v`jrm9@Va!M+|EeciDlAAUO`iM6@l1hg1M5<}$e}wi1GOWz*%&5|_#93} zE?XR8TZ^!x;*R&z$Qla6sN@{rVudD`$|w8Z;hl(n0*93*Kf8k-|1AQ}(6eW=1= zjn@Tyzpya!j93w(gK1cH;7-raJ3VYaoRba;tiO=TO7IUklNqre9x5hfhGiQvNLv!$ z^lQG~pLtK_>9aj&%m$emF93}V&O)3S6RNDvRFh=F7G^BJiGbyy*tZ7)?!5J__s7z> z8$EH=m>}l_;ICl{VV@-jzm*BUOJZ594p&87%Wyn9+ii%*RO;v%@$D+p?J3jkUkoQN zw3j3?Im>;Maf{1+r#a^I%u&jbl!O!$CmB)(tNj#QPAiH~^4s5m_f?@0|F@$YpCSxx}(Jc6PECN0E?M?8u_0@%M1qZYSpF z+stF)%uiQJfXqH#-YgyhLja-cgCo#p&1$E)DBf0_TV9N7r3$lNlvtbO+>Bv`ETIGx zM;W~jz_NS#?Acs8M%x65+hocTuKje5T^WN;vk9w>t!8(MT^;ix^)$&E;>nlgmeEActT^1LLnb8(%Q`kKk}9yqfr z7)|??7pq+zNAx;c4-?}!&U!20!u8b4bSuCM;OVCKiIyZ-1nH&=UJ{8|?Zm7Go50#6 z>kvPAN=A!a24`O_jvBFO>P)MtKOB{_DJ|yE&W-ZowrP{YkHkZvrj^9Cp{C&(9zl-k zj*rS@)*ClPymJn@AsW=w@+qK_}l17p+mcX;VFKZGH zgv#9i(Wc;N(`FupO!zD75PwsPb49Y}_oqKvTh7lRA?{5O?nN+&j-|xG6k=4Pl?NnZ z7jnnWK*^3XmO6{dZpMj27dNLUR?R9R7Om2%D8@`Z93KaV!^9JgR~L>TPclG4VfW7o zl?uHrEL`MtB_6M#E#BDVmraNqC3`<9U^hWABplyrM1#Zp?=PYxNnj+IU2PJ&cv~PAZKPM1n-X@c|qtPN6vt-qOTBe4mCnB}eLZ zuA!|{un-W~eJzRi^QF`2ku79cpI;Vw75k?Xw{HTc6O&?sC+QY6d1|~<4~pXh9I9i3 z@55`;z{mXQnPcKywEd;0DFpvPvc*Fa6x))3_4GoKp_ZC|fZvE~5a~P|{29$tk>;m& zWxRow`0EsZ{xciJF;oIoM{X``JZ-WK6O|I5vmrb%fkT|Sj`9bdzYRPJ&APR&94#Z6 zG=DxgSGm}P!(^tA3^mhYgBW%ua091kk}smMB12|DO+cET@*NtF5}y^r*KiN*0TgA3ys(Z;5 z8fNiXQEiOSGGE}T#b-gZj`l*+HQNZR$k{AN$yuo*;4@By8L6Ba0nKc$TfSZ=&#iZi z<>bHMp0bwDjvRRKMBDBE((_8EHLjI;I%|%=O<{3{V#;IPa3zvHibi7+mCXi9e93R%rA#E7Pw1bPlLTu zf$T2P(~VkjU_8*KSQfz4!k+RmCh+%3Nfi-Yk-G~xW`DKn1!fEO07AgGi1{0v?ddP0 zVx|s*`oyz`?=LVfFxH0f|Fl;&&h4i9H^#drB7LB?2KCuwm@AnpQ6qw=cgi_r-^-qh zSQTHhI%PjYQ5F4+@a<4#_|H_eW#|rf4ofDn7EvEcFpWG%Z`G}68xU9>e)sx+WoR3fw^>+uC@`Rn`k~bR#`O z%6Z*&R+dH0Vrx|wvr8&MS9iJY-4*UK-dLxy^^^V@#~&`GO%?9itut1NX?%vse5QmK z=vxu?bAEYQT3X=+t@!HO76)^xs{*!I3!nE`7F(hSPlO`?2~LsdL}tLxA2kZtn6Rid zrAHC+`oH*OLv?&`9}WM3iGK?r{0>9AFFU+&bCAQ;Z6bq@xAlT%obO9vJ zGQndQH(H%2GH575_Oo?SON6T1VO2>b@rs%jAru0M+gKu-9o`%8yiFSG(c~8O(C2nV zzE=sxON*QU{I&yL!2>m-G#lsW zqHC%N`K#M4b(*>>zVz&m9Ew#_!VABrW6VF+SkjQ56pw$=&Z~bqgzVl zQgWD?b8FIAq-m&==R~<{KH!jt+Bjg47yVQ}#eE=&Ubkacu`i1G>HF}mKNN`O%bTD} zBLfZrn(uWry?5lS9Pty?yB;x>yPou+Jt7U zQokX$s}w56IPW0zt_N&zNOD6U0jD3O3qxc^iMni!if8vhj6Xu;&Ri!AczjPP9G(2LGPwVD`6Es zuZv_|m}X?6=fQ+C!g5{f2&cE-eafN0()rEn=JU%Mk(ucZQ!HQ8(}?V(G?AWiiy731 zkO8yMdNd;mT77Q)fBXT4{q~|NG(=7Tu1WI}EpFO>C1kQwn?@!n@#DVV)1afkGC0(~-);MkU(dP5qz%{%L;ta*Gj-y4KZdLT#J2TI z%{<>2cIG2)r<2Z=dC#~HxWj1V=ok|()!iM{4s%$0eIqrGPTa*`i+(l1aY}LH-S0b^kezuJIFYvSO?`ig1_t-uGhBq}-k@ z^W7Y`KbSsYO&m^Ht2Y)vK{WOJ^7}8&lZOT-h41Dc&DYH;4f#M?-?w@&6STm(l8(kBwbGi42TJx)C zbmvu~CWgkAM)hk19lnRE)l%<`{G%3tv8B`Ja(&H?R2mv-f&S})zv(L&Ymd`|Wivay z+?Ut<^Ps|>=zV|)X%5Pw8a!Q9ciJRZf~+*vQ~!^?5fZ(mEC?tdk1-uvO!K2sb&Q~& z;VC1eA{$p!H>)xMg>hgKZKQuCGCS_!Y`ZHg?AW!wdFL=WmPqpTV6ow$8 z*Uok6$ezd$=c_sf((F~`7*obw52IcK0|Wz2A<^~#M~s8WD2Py|Cp~Ze+bN7_<5BKa zXRSN)XZD=!1{JBzp^w(5(W^dOYzz4b+{O^yff^JJ1mF?vmtUZgPg@fKElUL?>~AiWAuDW} zM?SdJ5rq_-nFhPyWr%PXOSz;&NivEqc>)otuu2dJU;eYU8{idPUmY#CEM8!erPsfg zj1ZB^oq!HAjO;m6^sUbw@w>G;$&S})*I1tW-jB#jtO8xP_zDSW@2|QMVrWuusq z7~y!6jLDsO8?LtRd9f?>^$PiD+ z>Z7@E?U)7d_$THkZ4s;reFpXL__^y6{^%SAMSQ(Me8zBu7uXNa^)U_OIp#Mj{Gx4^ z>TY5M9{z5izmRFf_iNiy*z+RT2^cndT;=F~)6_Q}=lg2Gnew(=W^&oYH z`xFIXc|<^(c;mP&qO@opQUCi?a|`AH(W9x{Xyp`{hZoqdbpwu>HNQXfzQHJm8N8AD@2$K&xb0oTQM}WeS!l;e2NVd$bnQU_p8BpV{7wc zU~Abm)5g+}^_^q0WTRYF)KQ-YH@3g6*REHtVi{yDZ|RComm6I0BLIE_^Ta--Lqz@; zu=8wMK60yN2p=KXwNTto{WSyWo|JK7*4hoZ`{n}Aa~M*6;Q?7=X)%*Okq({JNYJwk zPRX?@?{fa$)l4e4g(i>#5gls+;TsDiG;bCjeADDn7*W`#5AMC!S6ZWQQJh;9(r;?A z6i9-0Nz>(9cArt*&Q-x+b+PFi_b*>W2EHg{<;9F|hp_y8it^)997W|xXkp|plN+12 zK9J6VPvS-XK4g>aO`{^TzJ@-+vOTr?H`{Uj&5z08u~>a} z`dvFWA|#7$z=!xy#wk9EWybMm*>ACMJP<5W

    h?>!-Q3b)1BU;zLlTJJ%uVB$Qcq`=Wjl6;0H@UR81^z=u-G-?hxr0XMfV%G&1 zQyu3Iri|#9;V{SFb#ofFmF&1)33Cs}|Ms>8yHF(it49??p&2GC(}z?R&#%ic7cUz$ z7Vtx}+K> zWI@#>G;`VPVc4>hv;LM@v19Dr4i$$xVjXJChU}DNRb1lwQc9VMKYYqV@!vs z^^+@BMAC6wVz}hu`-)N`IEMI!xQ2uUNDU&DKePw^GFT+zbZp5_e;6!K7Amoh?efeDoXqdYDh{Hje7IYsNCP|>^l z&1Xa3z%tH0UZ1E-gV(O58?3_(O4e>;JA}0u z#_NT+P_0y&7~kUH(y6LXk6Fj8t>4P&3bUtT!(NoSGi!i-ycPQ}H5qpWlD|uX9;-E~ z+T!LELf{{pAlNQc97}1o@6gueKe6%o!Z6SIaOpTIp^XwGs=gtpVo<+Qn6%tLFOjD< z&{osJlgCQQl^# zNJ@kSK!iZ}np5j9`rbICstvHUT&^V#@4d$>dzu2cA03$oL?+o zL)_LyZj^c;6!%Q3Z?n_8#7zS_YHS+K+A`TMMfK4aG7Rrx`b=OPGCrx$< zIk5>q?v$(9{WgHs+Vf^88EqscYi7wJ;Rfu#|ENa~$P$+@W@ML{M~AzZU^d2TB>&m6 z^V=!Qs!eTrM&rsavw^l2FlCJ0vJ6toWG(XW2#~BPRVV3~6^QFr#5raN8{IYQ;Dkw% zwKAqne1SIDZ#fz85OQ*L@^y-JFMKN#EC(@3+NW6T_Ba$jUM_2`Vd<;z-|yMdR8VPr zd0ae9vpOfXc^K>&^A~7X;<;3wkH(6LrhG}t6RXHW_}G`BoPhndbhV_jG@t(_NZ$p+ zhV;7-9LBZ8yH6_FpVY;hJxIK9E2u>TzLT=Co?}pt&>k#fA$X^z@$EK3NdIDRW!Z?} zDJFZlN|notnOQ8wMM|Cn@P1cDIY^+SQ^U%dQrl3Bh6R}hFPYKhH?=qjv;46)38C_p z0Hsb&xSYGR+b|MH7GKtLfp_t&M$x;~kz*j=zwN0_&VsBC6Y8z)F zczL_*r?Xf;XBlr@?>EPb0w#~8Y~7|OxvVVi|H>=PV+f;7z*NK2YXg!XH zu`S^g2N`)XV3i?jUKyFOq3@>93N_YNjUv_-B-`z4)4=uec)KTY!2{b>eh(OR^f4cY zM1;{8wGAj)uJqb%gRb!q9)!9y7#7EGT{c`#or(o!940GP*P$;T*jCS%^Ut}fJi?o+ zAFTK{rjmb$_@I@#6gbAY1h=%s9S5}uDpaMFIjVUB5|}WFT8p$aQ@g)QdqT?}odq1$ zS&HZ*Uy})~diNP5H?w^h+sJV!fQff)6}V3F>Q>{w-x?^tTX|k)wIF301YuqvugW*( zSoQ1`2as;he7^3C{Ofxsc#Lb7_a-vm)&6nWi62WZYhhbBY7zz2?^I4EY(pF9(ZFly z93z7c@Pa_OxN`(pk!FJ#9ecZ}1&h489YRKVBa5ga)Psa1#+rXb^qO&ODO3@011WlN z6)8)Z!!V$)DE=KBKn}bQ9uU|!yLPr^ds>qEf!l-YLKcT1Rq#q|!gx!4m9Wnu71S2= zh!)4Gq(;k7o1y=E{^`VyQ#WnG{M(7OWHoLBNVH-lHtBJ5p-3YhHN%8ew^l@8gIrN{ zmVb_oTQNK!;Dz-cA6kA+T#jKYuJ)Qz$gn9iCZb{*i<(a~!|h8E;#;6=Wk;CY%$Yem@_jy`=(j?whM$5*lDOs9(r#b@271T z5RemCZmA4nE^#+t_;ruY0}YciVsC3IU7bDWs6Coq?I+_V>MEHe0DW%(X)b<<64F<; zot?K}0_g{PYq;;gwN6N}0^`gXk|#Ve1BREg0x6eO$tXtj?8=Fh09NiP027HZV=cC?eZ#F3WitXvw@g1M}n+RH90S@JxVNk>UI`FzARN?vap> zOZR&t#I|!X)k?0JlCok`CewOK)tPQ($ws?+Lr&DjrhzBT3Va4!teyF!{HLfo6qUkW zd9NQtKl@*HYT*Uq zQYhaf`84y@)D1*7uBHCb!Ut8c-Lk2j9%z{0iHKvy2~uQ`j}j06@LofeHp4nO(+GOp znp6@HKNk{LPc&<0US2nAzRb+W5@(vSBVHORgN}6gvReB3c zH`yNG*qRXB4b$_0#d^bC)y$h^h5x6AWB}`3P9@PmzVeVyu_*M^EbI#XPQpwe^xyWr z-n%a$^k;1;L3LIxkimgN%Vi`^!thrpRs^~*rCLFr?dL*qSGjJ)nro!$lf^BmuPwU&QV^oI4Zzr7fPMO3Pw+<<$-80pd;OnB9`|cl>R5A8=#fJ-voDVy%6hZZq8RpbiL=Y>}{vQXY8|-zNENPwZF%{X7&i`@0U5!N*8sK~`wVeqQOhUhJ z^;1kbkOVXrWdt_)3+Vt5?qZ3!@B)8z`Mf(smzfXqxn6xDXX1dVqha~_Bw8iEaOFYK zuHe&Ds^aswN*E{7=x_*zO(FP%(vZc0=b)h!_jaHByZm(*+3+B}=fsMPqVlb;UIJPS zvu5z}UV{6gO!m{u7%k{ew3+@tc)k!S8(I*8Yw)k26ow`&Ed5si6cj4`+qExHFpSUP zi5vfC%vn6FlvjY97l%MO^$|mPs@L?p6pwX-*>OwLD_Rvqf_!<)BZU7==$-z$>-D^R zhWkZqb(#zOWhCdsUZyt1&LhXhd8B_n82YAe9BcMZNm1F~?Hm6Lu-xLHhGygOTCAZE(k4`1S;AKau`Dvvs~~&l=LbP-|<#rmMdfBEXzhle;5e1G&H}^J4#W z>9z8oj(#Z)=F;1c==nRvUxW*Uq%hQ=(a>H9u6UV1G|eJ_0?gJNPig(3e9i>REyDqf z`7okhkS#QB(h%pcNFU!nQp4v}Xlz&6akwdLUI$(y~5<-Y`jN#wXw93x~_VmRLUBl9g_ZD5^jE!Px7PI7pcAhLNv74`K(ySL+Yb*%6Z{FN)YSuQ$FfCEo~fPd%xmvo_pl15@Wdaj z((u2U|ID4txtp+_-Ry6nD7TG_JcwkPa+K}mWYEGrIjajy+4oW-k=607UlegjSSTeK zpKMNK>g2RhjxPFjzN6{}$wHgdt%ac5zD|QTcL>+?BtyD?7w{!iqL`Uf#zmv7XqA~1 zdglY+`AqW7WqHvrY{?C+;NY>~C)(MWD3~1G>f^7>)p-q-YGY0LNh~XjU!}fJWe^;IX|s`vuq&*kMeEh>9S+Fa!z`{A!$iY+BoC`v3{ z-F$cqo^I!CwZZk$`9D$*aV#sz<z5B3JTLgX z>j#dmxqQbw$H>P(8yKXnh*AaW{Yg0p)|bDun<=w6^~+QpMsuE#SGZzX;a$# z$v%$n3$;j2DI=-Fldt%itI^YsJ;U^J92$q(Gh$})q9dXroKtL5^J)XkrT&npAJ5FA z@^+u0B59GuEodEXgZiVf$uw29Iyb!kyjXefa99h*^<(H~SITagM5Jn{W{$s>qjs1V ze>F)jmyt+brvjM@PC1h8_gO&QV>!oYiz`>)RCeXbZd2cRKbVfd`qVCy)mTq=B&IzN z?aKdRz{Nw@oz|-~Tm)-^=M9t<_FS=iX#1`>lG62LAZL@#cQ8e-X+8JRWg#=)%6N=3 z1Bzx+9k}=`E;n@5EwD~k+t_#sDV}XlVBZp6LJR4x=zM){jzHndYx-C%u$n&%^ome5B7RKL2)C^Rd_>uiNRd z+BmeD)1=%A*-`i3)JIO1FWiuku7veMJ<^f>mm|c~l3&e-bVq*HGOvU!oH|_MuU}!9 z;!Yj!M8*l6i1x> z4#frc9GO29Cx4BVj&r2;$&JM5`I(AgHS7ABBN$S2jJGV{);RLGyG^Y2N2L)x(Yx}O zja)4Zixe=y^NP02$YJjkO32Na)_T5klP{PY^-4aTtKeO9j41<3u3X$RrhBR|XktT~ zdBY0rmxsYdew(ht?xk?heJ-5uP|07bmv)z}&PVPUYZYK9Zv|VH7GOQZ-|I{nBgkB= z$sjoCep?J=wvF}kp4mW7TCLDYLqHXOD+W&N)~%_$hE zz>G*7cDj~)1B+hyhl*p!%xrd$?604QE!aIobnR}ciR>^1L0AoTakXdZaNYtsOGpy}Gom z=UCIIzF7gBvt6=XJX|53%dX+kX294;8Ae(RX_}Ew$E+oWtJ>)@n`+{BE@7>8LQ$!m-z7b@bK9>WO5HV?;s0G>mtEub|yBsfBqY-~f zSo9QTU&^)4sYDi4=v`fDJ%LLY1u+1%Y6c~?TWxOXg{rBb~{Kl5~KDaGUMgO9*<4D|CG=`|NFC^ zIpISpvwQ*A;vrMmc#`bijKIkUvSXbLlUgxGV-X+ z9~mcEcKjvkx3rN3)iHGp8ROBWBTg+1Eza-vy=-HZEUW3{6O|Y!-c)DTA*QRiy}YZ6 zW9MOFYm~!Is?bo!%>~FLE#npEAj_m*v+_>kCa@NmR9&=&sjAR@{_4cE-=VeBHi`jk zjKzM9@hCC!5eh>RjVPXHCo{~8WT=kG^0`791lnYm1DUS)>WeS6Iksfyq!S64j3OON z6pGHDk}=!t+8qC?=E<2CC1;C#lVc3T_$dbw zw!j+W9R>I4)5Uc~?@B9-JQwOOd92a|#HS2i1?jXf#`}_8j||2Q{6^|4e`o91N|AIt zxL7BMO1X95chy(sv(-?JtbTqtRVLca_|P)5n30T`^-fl%Mn_08I@|3Z8VCWoCNQ^S zd_(3kOq%PMvE-Z(2Y=h7=u1af-P0-Q+P-5kk<0v`A{HISlQCqop>o0U`g<)qAzK(l zWJze56Y+oOdhcks;_mG`YIH^&b%u!^K}7Fm5W*M|EkTR~(R*i<38R}tG7_RENFyOS z!>B>D2!iNA^wAAwUiba{-nHKHJZqi*&spo7YwxqapKI^!Ca2JQw{<4${+{K&We>CK zbFQ~JqwoyLw3Iuve1%gHZnpIQ-b6nhY^`Be{yfpz*0rJjPO&-0H6di5dvj!Pb_jXv zpEMQF})y!B<)`js*{M`dI=%!7Gy=^c|y!N`BoljwTWS#SNe zkaJZkiGw8)feDjXychl|=kB8{{>!9jJ|~?^vpwe@@UAp&JBcY<$W83ES zhMxx|@|wcNc9et{q!6Q2e#_KDoJ$%~r~s_~x7%+}A_vX<8!h-dIl&C^=SGQ#)fP)q z$1CUlsw8jc$S)sMDkdE^CCzV`OPWaq!@in*h24I=Xs$RdXg+-Zr)q2Hypp>`)L@T= z>-rw(GjCPU0pcd2vx?sCy;5Of!v~h!sfi_KX)ULl{r^s`kmpxMLS3tzvvz_9Xr4_* zqU5pcPB1N`1AXN1cQH+XcRU}=K)QMOs)FIW(Fbl~#0frPDBnC3?(~RB!IW_hrnMGE zTQ>_5g(mrLUu;#r85`6QukKZQmr1%PkVS}GXP@MQ>&!$MbZ%>lHryd+qhg+bSgwY3 z%YE2W@?t;Qbo&HxwAWtq-jY>tdBxPqfvA&fR4+zOF?wB7=KT;gDfT_l`KiP2ccvcq zJG0?gTHrdTIgQ|lDw;HJq_=PDLoN3VX0r2qrt|-L(Ai(C5YOWZ&vS_;-Quy3ifeeLSIQ(OI%*vV_(Za?IYIy9%NDizDDn*I#*RhsSw z`cXV0=pqKsd;{78P`TK|FbXqm|HzA>XZbBYZn{WR8^ z%}=4vW(XfeCdyaexf<>b7$4c@-fc)86aNjxE50pndPB=tK9?)n15^OLyjwfQRr~4^ zsTAwFO!ysCzDP-FRTcU`Lhw);ISElGUN`$(dbROM8I_dZLDUb6T`lt-;d2&2ol_!F z7KcnrkNc!b?tak(?jDL>?y+jzOVJ6XF1~Q0_@fV=!dbJYMw%7_uK8Q|%vGt?8?h~% zW6u4w6{)Yh=eaQwq~FQYYAD5cRpCPa!JQjdIsI>)kn2RP+%lHbPp*{@fgUp{Qh znP}PE8G57TMHl#<^W{?8NxGR=%UnLYm((Usb1W;@YRHr&REo#_t1IU=_w#ej-p+u2 z;cqR9pd?)GZ!(SR@_KNo4*#i4&ZO4kxtFQF9UNy{##FCOkkPNX4xKg)2+`|r3(z|X z$Ub-EyRwec6Ea7XuP60+ch{E0JjA`C$||q7ekzE4dyd-k0c2_g7yg zR+E@p9CJ%xY9`6!VFS;fr>@137EUUW9QM>(XC1S0LCSZvUr+wANskHQ@!E-x^l;YX zw>NRWwkZ=U^sZ2Jc+uQlog?Dahq{A~%Rb3D)|Tt>!HPAnXf6hmLSpK14EgF-xDapc z=Lcm2MuD-TQuQuJp^nF)bveZaAL6R-5r69GI8pE&q^n16Z%jlxZSu4i1(D)nB*Xsb zsp5k|)@6d{_Vfy#vi_S+$y0BvJ4hLgPGb6$Olox+VJ^Fm{I&J;8|#U2wRE)e9}tqO zBSPgaQ?|L$5sQj-Kv@79UO?_5??Jkdt5zK%+CJk3*f2sWM+mLLSG8F>{69F|0C>cKZP zp6-2~6UiV=&Ym2sv?KSa3qr1RN0gdcBJwt8Ww(QZ)EZA_Rlf#aYk?^FF04^rH;Vm= ztahJPi;9>E0C45KFU)`1^I{?U%<*2+m3S^M^nTN* zzTy#n@kD6oQC2yUC#6kkWvy18b#wemRTle+n6j`q-_>6c zAO48#dfcwO*xsMQMUmV{^P-)Bznvks2+8XXvSi}87~#f`he~hbG%d$e_@|aIKV;~_#PmF z7S?$ze^=pz3Q{y-SbdfZlZIa^!NX{&NG<64M>THq3!5JfYf9xxcUctahbykU zF4H@_V*b$XFw1W39-Cl{IHD}Pn<;7u!3s`%?q5O1QH;9sMs5Ha(_!!_p;XU&kw zyN&rO+~d!aM)sc{UiiSS)zak8Xd<`oJQ|%CJR!HoFELV0qJqdzBP4E>>DFB`5IBZI z15CLj$Xau=ibOZAeCUzOzVA_Z^?3l?*X~^uQ_o|fm9O3!lIqsKc>Dj=rL*Wx{gD-z0PNgl88^) zCEu^YQ$JpPqVv@Ln<*{=v2ee|%}dt{}`GQxvyFa*96FR^4N|2>v?R@q)c`giAV)d7Y5-4WXc$L!C0nYJE! zfQkp%o}Ofwd{>)sX2LHjf-N$yO&7)DV%q?lp@u+D`!AK3!)NxqwO-IHzF9^!Kh6 zTZJn;+caUcH#*p_DX|F(Ub@F%Xfr2nL-CqCcaz4Q7ybs~n2-L2Z$Kk&ZrHuY75251()W;8hDNwK$#XSkdBnE`Mp>rEa#lrstSI@z@k6G-k7&@0hlSA;*UQNooeyGa zGvKE|6-w}#on*yP#b)52u9B*-YfcAbBgXKX$i8A#{Lg;y~s=xS^K-L&ZQl>Oi?PZYH z6!IU&MtM%^_4p#`ny1C})4myTn~ks{vX(YUo0N?-$TTV)+9Dsr^wO`3-sb%fy!Gpw z_5Kab{=1(?i|&(Nf0{np9&0vIE4yQFX+Q37UR(1>QYJU=WpU|aOO9~C#}5$S6GB0g z_O;E;d%v;fCINT9yNDZEH)R+6y0N-!V)z3YJr=I?Vc*f%Q1!jBfkK5S6>pCS3!!P* zWIw z$-DKoB$1~noaWIYS;VL&$Ckzx`>Ka?t87Y2WcU%dhxh6?y1B zi+mrvx}vG}F2wt}eUaxx?Hl_t>-EvEZ5+u5t7hp!D&GRq$BdbFASDet4xMr>*DC(g*in zwm-~c=IP4n+qirJY$6OJ%%!AWWJ?(sb-(yAk-zT0ey3S^Z)D27~n z$5w0zJhD)eJ*D^BUh=czM)w<2$t1+b95L=xGXzfM#*Jk4#r!a^(7&%Yf=rJOa`NG@ z(dvx`kX5wAk;{8c`dkhA4_fqd=9kmEWRdKj)9^05vR#2_Mt^D2okgpy*T>piG{W z(4TuL1__;(-gl-t@%ZhrDyKeo=Lz5OhTBcq@_5Hrgh%#1@N2&_Do5&M9W*?hM~hBH zIdoG5@1Mr(O)ftVMK(u{e*RezICpeAMC2`r|JT>w3THDrziqx&b~@oKx4t5ywSM~)MBV%p>w{${FtA2GUi6@U{rq!<)nHUkr^*gxK+U#-97thA~&CLd1 zM0MSWdgu7yyX&#>Hr5LkeS%1ObpI z=k^Wz`|D>&RQqU{u=leno8VW|pB=D1GF$1%`BS1834dJKOS;asq!%{_GCUOq2UHGE z8wQ?t)-3)s9SD0IqSwDHnC`?wNc%M;T65VcQ0JTDZFkR`^!{65?KQ!Cs|w^Dlf^Bc zaF1&<*F$g|yb&QeUyA}w9`(qWz8p9&6D-KN-gPGI^7K*Ufa0gquUu3w#r|j^)g9Fx z-x0S^c?c)7{u@%_(>6}XmY zeRFp9OThOT#oJA|kNIA1Dy=a;kfc<*qfn>uu?)A#5RV~zgMRK%UCDUn6O~%K57%pJ z8>7p3&7K9|-0QBtepVkSO0uXECjpp~=o@Y|Iez6KKQvAZ^IOz=aQb0zJY~bO&u6%= za_1(w>3Y+|$H_0j;S(#;U%mg7c>6wZf&ME+S?+z?46hy69M<@2tnY0zeGe(q|EOZ> zqut-BVC=RR=2Q25`!2yG`@Gv!n&)!zH8Vs&1yY7o;QOo zHr@QoL-1f#X7c{@i*L9AT3xDzOb|C0dO2E|ri364j08SwzP*_6?)mGeu}6^z*t^`t zvT}XXWF^-7Y44R92hV;%pdCkPlk#4$gp-L^Qpv>R$|P%kcxc!+3FN`7{Iubg_nUE% zpVIh@O5n4FG6zQG&v%l^IpurA9|n+?Q1W1c`ZcZ!fX$-f(l1)h;G z9-hYiNF|0iV7&kMc>7m3A_M!yMbj9#oUZ$|ZY|u9jEvm=cTd4|>F86RjhB2VG{MX4 zy(i||s@FuNmv@1(Q%g6E)#9m;>wur>wSaDzhxm%Os-LXs`O|oH4&G|fl#4(6_EBV3 z#Mj*zF8(FWZ()jXHC6owk&_E1_DNwFNU{ij7e>_c=!f0OY@6zDSES&W*3MLrM|CO6 zs>BO#@}zt^@?UN@%b57pW5~^1>R7k!R%_|srQt7%?WBgDG->5V zLshfC7<|<%eLOaDJh+pLh2745u)NR{f%lprZcY8L?)>5P1jG}jVh79Cw$e0LY6=L@ z(C?=TpY<5~s$1>Fv4k8&ov8myOfeN9Sx$L;s*=c`R9=1)y1`@)0_)eZPHDNXni8U4 zG0@5SpiiXX6Fh8{+5@VElUX+}QXUJ55}kliVQo(*eg?Sqi8nJfb*6=V2tdn|2rV(Z6GT%LmR zli9JsU@M__q)GLNJmuHd=NkOhi@WwMXLB`OHb0gIFSd=64%f#%U6`c2St!_VvcHAP zy|p!7h=1M?EUXD+2qq%$_sYX!5gec?B!GCoiK20gK-ZhOQ^i zx^Yx?Ki|^&^K1+GhgVu`x+FqeasB4bLzAgL@vOdU^lql#Jb!O8ncc5!@N+)xJIsAq z8}-F@W5vvJ)1)|xT#5aWdo!ANkS$#8n)&(_r;L=_q99C6t-Gg7yuf58WnekF)}6RG z#8W2gFNky3{`CCK%Sem8j=PadKHg8J#rCDdMQ@7LADGpFb`F3sN znafc_$<@X2+EDC4?(=|Ei{k96%DOrGYX6>)L)u5vTFtAAuD3%H-~2O7x6aXkrST2< z|Fby%U4K6Ka^l_FsKV(lp8ikH{{`&l3cIw z*>|87sh0323x#~s%lqeRRRJ-&{EYSgvi!Ll-zQ6&XA=NtR*D1Y68C*!tuC7LC(F5zyXpM@m%Z zbC~2FFHGx0@2ckMGZCkwW$BctU(b;PUDaw;+Kg^MEfY4PN@I=Gbns^ zH`_Ah>pjaD%dy4R5qC#W@BXE%c)Tuif2#QjU3`yF^FCwTe8jp5Z;4vH9Bwaf6J%-N zW)p<%3c5dI6J#|Ws2U+^Q(2j_qs~7#h5f98%?-oem%>h%VC$r@$9|{H0jCT$*Z!sq zS7uv%ZWcv;9?SlG%lh-j{m)(&pT|Q;IXf3$W-eSR1Ix-n%CLdHrAXh}0AHw|@AFXK zYX6K`&y?ZN@oB1~~) z>c2^BkbowUG$Yzxx*;7g5#_Y&Sq7*hwA^hak-FH4C!vgPXkD4Z60a}DHGHah%ukDrK1SGvRMx`0Ri$mn>Z#t+ojDGq3i+N z%xHUp!a!p0gp1^uLCXzLHjuWy`vz=Edfx!347rG9F~c=Q%DR7NEZ>sZ6oZpBjMnw3 z-06_%h4Q!J-VLYqzAdEz#1?Y_*3z>AsiPnt-)J4Eu~DqkQ5g-Z>Gc8(T(z#pJ~gmN z?W#(n`}UR68ZRZ{l&x6BJ>DKMd4=DZ!z)pyimSFgWKwsz`YU5=oUgO;W?ajz;AXsWa0tm=uczbteYa53EA|L3YOfZ*GfMce>eV( z%(Bd~#C(PP)#-cHx+L~jFM>rh!oSvMdKx{WD8%>UFzeT|i~ zd_?}}5e5G#je?9rv$jPpk`H)BHA_`2`9`BluNu>rCK)4*b|9>!J^xHAt_%0~GJH+> zD9nicat7l>y7aX?e`5G^$*x>H#dvdA&m-t9mgk zs>*x&z2RB=BCGl_6sp<*6wC3wPqP>yJi0eh9x$Ckmlu0wg>h-;40|7XMYEjrV+0$n z?eX`%&6+c~k^X?T;d+4T@?I}jmb8eC-siLjG^aAlV()u@Wqp85=)~|hhy}`l+&hbZe}t0XP7Y*=-1($>vSIhWjX>n(u5^z$<`s7@J|Wif6d zLwY2JaHYKotS=*6AL*NggU+TmUk#Vt3++A2I))%K&#Cq(mO&U+5s)5<{#0&nsMjbf zQv{^1l@UdGdTmc~`Dd?N){qD}K8od3V~=Lp2_q}wq}Q4jMRO{(r?|Y)ixZyHX-$q| zJPlo*?nQ#bobD9q-v}x)mIzqBR#Yy*m!dQB zGn1Z^qf74#T!53OOP>Iz%w`k4YGR(T<*>H&xcz0oQ=1uO$0)1iG^b#C!v7)Hho4kMZvokHU3}40X(f8fWhQYP; zPX!+H^#x_K@k%%qMkU|mc+A~rBT)@+#p;mZDp=|JmWJe6lqqBH^w2zmvX# z{zhhlELaN9(E)6K+4^7-N$?o#7Y#U%2~T#Q#47wo;dx2`;4gdM<80}FNt%6%*&7nL zq8Xir*j$XY<{ z=AeQoHDEB^y2Y4tc?aC6FvB34HJEeVeN4W5rz8U^n4~5YOu23_cDo!@Xl{7Hc35&i zr5MbxE?#a0*M?p&9R`j)DgOy~D~yRFimu-ovnzKh8Z^A%!)CpMfoKkwWBr-2IGhzw zI<#=x;LlSc^Lkx*6a2Vv8+ySK3|fyF+kqo>G-HX7b=@)ja_u4^!wX*Q_D>i$(#c|| zDBq|hmMFar9WyP*!Yd0Mp)H9Kf``gu{N>7U-y%{*1pguHn0k3AoNRExcqrr{pvZiv z&9G&Lz46+L8#$}@A;p^clbStqjhcJ#$a>K)BhT1zwod?imztOEpN8#A zzUg|VjnH80D>ZTMJH^a; z{Ao(m-V#%CH4E;LVZ-8j`G zSW7oIN-?;Ytyr#@u2`ZNxCk}y?=(eY0hM4!XtqvsVwfPDoj_a6xoBqa#DLep&Op^5 z+5 z6`6%H=`k5H=`ul?^qGv(bkYo(lYmcw>A-|ABuJiHo<&|ro`??kkqQHdu4^33vr@>B$xMbpkZo!2{U(7(}@fIzlDz&_hPfRT+6kjj<{Fl93Z z^t1H?q}ikaAJ{$sJlQ+}8*Cc@el~tUE?X|(KHGi3G}|;lolPCk#5MD*d>LNFx zQAv|YlbI(%1gga=i$XYlAo(TH$6Rs|@EZ$gzbvmIV(JCU${vg5?jE;uE zd3qQsEUz`Z#B}XuWBli0&oxR1q>=KlSrFqN!_Z-eAl5%dti$>TK%&(eti(-c2u)&& z5IY!Hvm1UsTwN?);-(MNg+Yfh@~Je%iPdWj!v*?7=_HK^p@ZhN(_tr_p-jgsE#L^@ z1N<6vIJKBZ9|>qtA)2nqmf+$^QW5kA6T?nMvdJXc2+0HG5z`W^t}GS?Eu6o`O>lC_@U%#s2f?c^ASi(5qAgX%S0VS&DOW(>uJ%|YrKc38H=Nf(zA z!+fDe^j%XP_AQ>%BMV+A5kYIA!#kIwNJ%_I%>$JPK4SF2)iwHqq%~xTwjL6h*Bbc5 z7Q&*Z)$ zuDLwwFmAuxYLkJXf{1rl0~_S>J9^Uz8iqn?&A?MR$F|-~_>~f{p>P@=2$f4gaCU?N zN>sW{fwC^m@dPPD`m_l-q+^dnGJ)1mGEG_D#3j33A{EY3qG3prmI8bsC*^XtJ&dtL z%1|+F9jGWb+g+XvXIv6Yn*s*Qts}-d$}>l|B&Rq+#OMXYLyk! z99fsv_){rY`hf{Kr=IJ{r?jq;1IqHIE-%}!r`oYpYq-)3q~yGilXkIgk7BHra#b8y z&ry_{>;9N*$G9&zFqIQ5w}BW(c6`kIeWhC16*ADBVMA`jp5rYy zji~ML%KS}H4RIA87|d~yYeIx{Y-aqXsup*Z9hl9DmODcnb!=v;UI_%RH0317U3Fn; z7f4ZM3RGF48^Gl3IA`Dm(p72qqX)j^EXnn_n78GjRq6Ms2EONj5HTpxQ~4Fn0hnAF zA|~aOcV#u_r(BuKVB0z6zUjcLoN757J}>=L5$m^csrP;U0blu0m+khM)KkF~t$~Z2 zITuoF_?3O5frOkSIV4^q?Nng}Fi?`yBbVut-=>iq&ai)Lg?FGj2lp_)LnAYsV&7&U zH3usv>*CnnoD$BwueRcwqb%o(n8lw9?klZ;azf>H5TxW&o)ygj6<5BM=z*&_^aDvb zNEa*L$DH($oTMLe;k#Io&Jaw37_R<Z1?-*dyE@`SovobFbBmep5XB&+k`4w7v^@p6h$Uam2tX{7~37^bUa_W zBJD=>$1k=^RoyOTZLiUa^cz$kzuSTk(WpcDan6shs&|O!ltbR}RokCc?_7Sg5h*uJ zKfbc9u4=`_UScw|Ig%tKGpf2&Ki z@t+W$la%*+l&Z|U7^k~KsvNvnr+Zkc^f!S=R+BInx3)p_1yhLF=D?&~)$^)qgt&`a zhk3hs*I>pQDs}Or>dA(xf{wxT3ylz=&F0C|DyO!=OouB?;1J{KeD-+kPX}fu%_!gl02k@f z;^z9KV%1#t=VS-QGeInipw(Su(_})`RTtKFp%hJ~NR=bHP0Zwub0%IWU6b}Kdh^TV zQdN%&tSuj{Nqk2p7BRb>cd$_4My>g3O=GMAw?66Klc=Bvr-DjYsP z{X+3bV6$OzziQP*w#^aULKi82#J>4J_vjsTk_lRZ_LE(L8`$t0!>}3p%tiqbbg8Hd80DRkAKl?X4-%%x7vxzLUyTzKA(IN$^bR2s9a5wSyoh zU+^4hZmNXv9Yt?mouuDPnnWU9v`xsyqZCGXj6bIUmr(~mMJ*%FWzkkeDI;NNF-%3v zJeFgz(=Q(%&L>V~ZkXrhcXQ!U_xJecsOMbbyyE=k4CYeiA$bBSs{Z+1-=FRanET|d z`tQvzcYROVr!F_t4PwNb4b>kd#&y!c#SxW2TO;QkYqZ~BIyR8D6zternwhGD1 z^nW)W6|caxYLz$Sr`7W+Q9;m+c92KKX>p+Q)zf{hL9e_@?Bj1RedOGHRBAQ98|$EB z-j3hV!e-B@(CXDZDi!TTflgJ_KF6SQUV(qcyg-*~VxYh(_2BJ1E0r?;!TG$dQ<_zQ z!SFmr72M*3&IVKAvT8?*X&T{CYj@=VZ@?sd|>rsT&K#dI}#je@8UK z@sk;*dS3s6_8+KRUS&ofb|34RM>AgalJyn!zx@N}S30A)m3g)U>l^$FdVVD2@+gD0 z8S78|8Rxk>Wl;Blb#y-P8AQG8B6m+T{qf@&8$YKmnYc5)ZH0|`QUAF%nWtxBK2K(D z)<5>|UwGN`DfT{~j@{?+j8whvf_2xY#QTDEwA<75ivFGptqEA3ip$p$%@fMD{cuLO zUf(}yfu%<mhnyJnmDzF_kLtoF~FTM~HtIm6@Ka=UF-Tfy1jDGv> z49s7<<3b>mZ#!s)x87+!CRv>$lzZEzzS-lI@sn8&;p>kL=crkK{ZCZu`%0)QkJW7V^6_6C$~fd1eCZSN&z@ zNhy(lWA^RGGt%`o{*?=kJr~T!wA*Gg_v>*>v)va|$1K|pGur-Sd`l94k6A}c=GhhH zxHGn6-x;HN*36$ctNm*lys&mF!Yz$BtaGjfrz_KrWOEte=KSN%NLpDAN7v@-VYkEV z2+sv9dlU3}crABW}Gv1@)1Hni}!J5orN)zPszDol3%Z;y1W4O=CfqjR%J7?hB* z(1NxR*b!~U5**tjxhkn=J;N%OUUWuMRdUYeVs#-_+#D@WZMZ7=9D|$r!hDy0b$)ny z%z|}Zfr%r%2~!K-dNyJw0F@k$Zp}Bs90-jI!95#s6C9O1j=s%WVbKKQ!eI}8tTNk< zL$hvJ0wHmpxr;whS-_Wi*0}k2*Ki@dn?K=LYu2{eKWvF0HgDFMi#n#5ebmfK(88Yq zeHmuO!>kBeU1v-?fz40CeiB^gqvMW6XYVxIh4DKr{OCU8^JSTR&>SANPvD-H>Aa7s z1Nzd>T4K?;76Mo;KTCkxXGC2zHYCW4!NSF?IFa(_WxEC4L$L(_ zGVl4FlUIc5dGQ6eE?DcOEM)c+#A*YO?4+wF&k5R{WID3Tx#UT~ zJgke%Nme)?B9tw_dJ5vmG$iba0>Nzo`Ba;q?0K$w5=gk*HP_=5i(^9qNQiUM6H@|q zLAJ*!4#$qL$Z@ONl(rdPTUB{cI_mj z5SfxxdBQ`GU2y8g#Ur`Me5By>xn1A+xlY_uvO3B8Tzgk)XMV1W%t4ktk38`|zjc0g z!n(_G!b%`_BT;0P3&y`XB3bmDlrMB3Y*@H8oYSq7E?*?S&@p9c=C0(<4 zd+HrF?DvApvioHVjKg+T6lfrq^N_CHBHo$0gWixW?OIsoL(X>hczNm_jxm z%65bJ+teVoJ7OnU^N{#V`gd$mdU7x3t>TC1w8V1^<=#A`ZReqOVjsAc1Ks6n_lmE? zJ`A+DOiyf4rd7EQS=$}scjzwv4#ZFL=dZ?7QERgcTvIXF7Ndg&Hy>nPfy+wOoV z6ibom8i0tRa5e@)qEdFB;F(ao^aa8L205?f7@gUjt?`fWUMNXa1?o3_Alu5dsF!j) z3xTKx`U3F*{mY^Nw7`furDtU0zINTfHm8ct8IDJwWZAjJqmp+Y<8A1iM6c_f@GU58 zphW5Cz}KNCV$M(SH&Ku2`vEV-KkC?Gs@R<$Z^e7H`aX^fY z%Bx*{d?uZ?Sf1Vq{lZ;5j9wdZp6AE65QOJNIkCmuR(bBny8oJ5K;2YU6{e!L3-crKJQy$#^A81jLB{YyW=g$O(|il1H?;3GDpSO3C~e<1`f zh*GBy1;pr|$SnBaHBpiDILKwPDcFs~gXmbOhYd$dl$IikLN&% z)58GyVjB8kFL!zHfv8n_SvHbM7-pA!;W1tsWkX*Ha1=jJ-=$qJ!{0|;3U^lQJYkn* z!2z#LPZnu50*c>(G{a6}<#bQ7c75?isLY?_T=wVa@12|oDf#pq@H-9#^sCP62qpQX z9Mb{F3I`+lX(ysHU*zc47pBge?2(DKVu)ACkA+_vT$ldx2=N>Jmd#Z32;njtLVRCM;c!=I``Q7jgXr(h|^>)uyvNLFyd)4m#}rVtvo`OUD|w86d}tI`E>F_ zrwLnR`s7BZ343IMtt7&iUE1s;)0eNEeE@0LN6IfLol<}gcRn(FsYBlrwNAGUMku0N z%sz^JvG1G}w$8N`L;;WQX!a=6-CB#Y&j5S$%>HiJX=PD4E9YHTmTsi8GmET ziqK3x6dBL`PtBEl2pKP!yn>)gZZY*@`_kT-$i{Et1^lwmX~@QZds7opf=(AxN}N3F z>}KaT^3wQ1-zmnPYp_W!UK6TWQ@L^lZSK|bt>p|cU28WTV%cQ&ezMkk`tn-)o;2|0 zb7>=H-TeL4iu}?D%(~fo?43p{Y3$*+1wYcvgQcRObOrMo=0Q>Mw3HiTf5(Hq;%(_m zjJ>%BO~s2+YmB{_2Xn=@(s7JE%!8^Ty;KP^b;pCT;!|lYX3E^-YQ>w<5X_XB2Wv%3 z=@DiMwtl4|p_B!qc4wWgqNFqfqh`KNUGcos9HVBo&QwudI*3t&ty5N{mfpZL-jQ5q zsQ6I&8PjOKPFs;%>Vs)CTW6_gD&593!qzD&l1haz5qH+V|CBSu^1>~zQD*63?G&s; zDMqpV(Uxw=A+Sd3t^j_YP8QsZ-et%4(^Z0-Q+E0A8+5+l=Hy*&{50JTxH)xK2!BQg z0!N{D0r(!e0`O&I;Ki@fIe{-#&826AGN*HbL?!IX;6v%=Am_2W5Il_TQf2YG(s*Aw z9OOK1S6t5xb%PEmeEBJ};&F6j;UMT*B9=61!F^o^rAwCpNCY!Mfr)Yg&eV8g6r8RE z&<#$5ULG?EIaA^dP`Bxx1Kxq}K(UX0TUbeLLN5y|(83kGE=r#+36KF6fT|>3ik=#O z8)ZdT1{ehAK~<72g-nTkcni*{eV?ulunnGp)+hOa7AWxgC?mQ|K)%K&_AVwgFF--q z)o>s_hfAIx5z;AuRs{qKuNYn)hVaN=o~?9Jq9w5&$1pMObX&GBYzXI05i}H#D$H$k zJ3nx~y4|W^r4VV_LHQJ0lVOp$44+(2!o=`5PqGg3!(@q!`KcFjxTQg2*7jx0R z!ma5iEQ?L(9pTo@6N<$oG)Oom?Sy`@3|$}`lW{_`h($XIhZt<4P81iF(Q_g(Nhg|% ztY~c!66!=@Q5KC8Atj!uFM`lWkr2bp_!FMRIW!qeO-elhVIL{N9kFeqmS&#tP8W0! z00z!C_z&73FfH132BKF1vS3GpW>gq2fno7przd&>;0vBLXnq>TPheSe=!`@k13+Lc zgDBJqknsKIHJiTJY=9((rEBSRV>`@O;m1aOaoHS_JeEGC8ph$6J>kDbQnA@sndeqw z45P+07zSZ3L#cQyn=)JxSs`Q@T}o@rjNubjH1vr7KidR`z?!KC0+$8`S#S&bfPJ*z zxDwowa=-@XIx|Bvw?u}0tt&8P`>>ws-1c+a7p}S!8r6e`(A%< zB^Z}-&bPPG>kGyupL6d`_wImkspmp_XT2cs|IqdVFf!$wcW<@V35-lW=L#@dHt%(U zAQR4IE~)w)gdBSg*@N|JL&)*x(tEzWI0!lJTs**S`9?2N_>zOO?%{gL!lBUZM6Vga zhN}UvWyjtY%o+F?x}7uw3cs?av#i^jfJp+gLWL4F1j4EJjF;iPC72#?CR8X%Lnxeb z&tUm>?{iEU7zWKx)DR4(-Mh1F*ISKQ1rI^X z>ZrlFIqSf_(AmUh!SJhl=F1MfO_*cw4i@KbWksdY1;i%XS&C9fVtt2UT2_L}gKP#vW~7u7qz< zbNU|3C9~ftYR=rF=u46S6-A|8qWCh2f}*I5J(@nOgi}$F!9UcVVxO|aTya#=o@O7b zgm&>cYEPk0RsvUip17yp2a-S*2O0j0-{a|xgET^$kpga+-nX+9uJ=}jq-5#e$k4NOzdkt>^vDJ%J8$C z2F_T-Z736ub<>0^()~XezA$pAP%D)vu)bd|TiA*wvak1-R~ELW5c$?O%6$u4lZo8x z)8#vbt*Jzz^|MQgAA=?W)_cke3S&};yz8swPK7baL@p1bG4pb#l9&Xd%z9|~TnXtv zNFG+MT|$b#1n|D)xDrwvQQX6A>_$1Vh?GubUB{J^i$b7Vi7)mo0e~q`@RfC)G2QY6 zcv2w?R4@@MnQW;cmh2EP8C%AODg|hTlG#bSY}dIHH}(b@wf5Nk3wlYI5HxYRNpJm`ZX76-B2V(NC4R7hKNHKBAez zx;qsG8*HGC6sMHk=Zd3~jx?uO-L;D^P)7<=vhKLzi^L=KDUds|IM{F_{)lI4&YfI% zk$MEe9%{oKxnvCPqiTWP^i!5KkKOx6tP4LG+<%I_<762@{oN|T1RIxXaZNs7k7pPf zMDJi|GkhLN1EGYNwI}i2G}@g*Y^c zo!GxtS%^y^@ew!Hd<${OByQsL+D;)Zl_W$wTLTp$(Ifz|XRV;{e-NfqAu^f76=8H> zzUEYdOd!b+L;p)ENf07zO}m5~Pm;dGj<^zX97#OF?cl~5vWT2cVkP3%$VH*hokT2_ z+TsPaU=GfBM}IA8B(o3%)lQ5NxS%H9KCoIV8yPArfNCej2whMTp$DdG*pbRYCnzp4 zM(~1`Xm)Uat!`wea1M$~iUD0v5cLm?)-p#5G-xKV-~atL7A;I(?zBomSOO^0vGLqi zu1EsYC6OF**2pAKcBcYmotx7L4Ba1qmCnr>1lsOgps#atI)UX9`|UV4XA&s7lYk)S zs5An7cNwt2IVyud(~Si>IR|yFp)MJoGH?zNl|<0&W(8^^&QSz~Zdo7>ah^y}zhr7i zL{Rry{3TPH1Ck$}rxHMhHfcUs1p~M}HtUw9nISyQ1=u5R{xGjo<*7g45>xl(`f}i^ z{EdeXI_pvXyh{w-_tHFp6Y@R}XFBVj`tvWbbUUO)0*~c|9%^)kp$NdG?^e;n*xEp= zYm~3>SbrA_F6>N}1slW992$8>XYTIn@z`nTW!A42a*ZCK&0&`3cUJ25ivP`7&FdOC zz?~x_f8V*b+biKWceS8vpicoSJvjvr|A%flJ&Z{{<#II|Fwb#viAgw>Sqc3Q#1f4? zg{;7Gv|UK?r_z^53g<$KI~8|z8@Q2!bS9;rvaaBA$j;b5g;qLp&*jS=ns?am!t{`q*&1#fad&PoSkP}lWE(h6#|5w0@4X2p$nm?bV3Obqy-WC)E92*K)MpSADAj;5m5FLgRP*6}pZ-MMZW}eySefQb@?d}&p z@X22w*L_~+@jw1|h6xmG)U+?>6WOK*-kyL4b=*uc@-n*9=#;2_s0F+V}#!p<;ITt=* z)JqNFXRXT4*Y)y4&Nux`q5i4%TI`(nL||`C*w z2Q=gYeMWJ#)i0{=w}k6RbM(nWeVeOxM?D=n)bd;6b+oy{$&-CHRTrXWhQ78KCR}Gh zKF7iFGKg3|UaCZ*B!@ONgHguY3p_>KN4zy4_iS%*YR8~m#)|6CnJU6yEn@}s^IcW> zU~M{}9^+LJgSBZZn*h?79IVY)QUAG8g&B-ztRR23R22=zr>`je1TVS)Tw+E3q-&p7 zRnV}2MVzl17+y=!0$j|M4JF6Z>eH?t;v_JK= z`gvg}H_lHP+GJ0$Bkrww5j8p3-&B(tgIU=4(+RAKa-xcCzRcH1fg76X(81<+G)SJH z5_qm!HQI9O6krbT0HGmZ0^_TNqV=H5Z+yX>^uKTi`4)r3U8r(7i1>B=PWm@WSdi*} z3Xp|u&Vo>XMl@llCUZfe|6z3bP)+uNX#e%-h@qOS1)2WW(UU_pIRF%-Mq`HJG8e@A z??x95#bqyu^h41>Luc9J^o6bc=FtP3xYPyPe%WXuXO+HS)=!A8@d=dp4-Dame(U>>^rDSKT)Z}~ZE-jEDJQ(KBfChLs1t9* z>s!3Qo#Bi&cH{(YASOfhT0Ytvryw^i@K`Nspl;$@@ZwS+77v;VY5>dUt-Oy@ z1NBri-;noWYM_Ctz_;ZsOcCq(2tJONGevCpdz)TY&qwhMc-f0LxOL5ZQT|@uBv-Ka zcI6dusm**5{w}b@rnc~f`QE(t#r<49i?71R@TgP##>w;nX@xrLcv;@f#TstR@Iu36 z#(-=cacu)H5&9#_SJj+qvj*d(E#`A|hP@k#(uvYkt2HU!)y1dW@ZpYzq70%e)ox9Q zm%Nz4RTw5T1f|zWQ7zXbAh~5sT_1Nb+j+^ZUr4*s;`uutNr5F_|E&bik$ zWE}!&v9Kj^2}CL6^WA$BSyc$C$8p7lXt^3#hB%70#leB*2ul`EN62aEx=;#l!N9uP z7j{SdEuuh6*OhYfmXL!pZ9D9e_yfcat$Qw%8@EK)m);Pqz?(pAFoSiVY+SiE4U#Yd zs+z<#Z7_h9qt>_P4Jxn*RJAjATZ1)h5>@TWwQCTAVNkIou1SLqtOynB!nG8vxMQ6= z^KPLVKEl>_+g!DV1sD;*BZF0T2doak+s;)1dub|y=hk`kmSjT^jEd$taS07n*naU> z&_^9VB7{5Ri-fF~DLbL-XMCM?ya`SrqO45%Rk#@%BzLx7$uhPMkzp0mU&2qLziPI* zU&%2hhHQj_1AKHhYD152gVQiJg}WOpriyf86S>YT2p*&zo6OzG`Unrw0sARW)(iN6 zc5EtlKWhO#paT|Fe{F_&bgmz(15VTd8!LBKIouj`4$Hg7RbfSd9WL)CSB!-br($_m z!G<ZmbgSYktc_8k6 zsCYAJciI!=L7le_1^K!PJ|~O8?JjK^`9(+Hz5ok-;rnVybdyBVB#`pj`rslL0EVf1 z>OOJBq9o}wW#m@vqmCa6?kV}4F5W~kOxuHeu6@+$!{vKwJ~72Iqz;6w`>bl$42giK zAsJd5mVAr&Fww$Cbcjgo>8 zac;BnKCZ=Hq#$&h)2w0FdC~xSRm*-B*X2zjqE{Vf4Z0#ob?8-xSskD7Vj~h2x#~G9 z+f_&6BcU}n@Y^bL^W6#k9_{O-XS4dQNr_>G3de#9=VS|msBN4Hwk6{W75nroFMMvH6RercQ9I+2_+H zkpnvM_PpFh=R(qmC-VilU;9Gp$bRMmxnE}~VZ@1{E4?EUu4c=zj=12mJ-~E%r(3)S(GV-Rq`;UAJA{*e<-q1v z3+5CaP1a_5V6S?ZCLhpm-NO8aHzOZnwqdV&nx-BwYPDf5;U$3^v>ChG;|cwMUaKkd z3*Lb2&n(04_I#3Zz_8VdIfqvvZ(|-e!G7|1l6=6RbsO^s-kN-lIf4D;`6TrKq1BGL ziWeixFjcXZ9;fIdx~(S6VZ0963tA-jXi;B!o=P1tYPDsq;AP3`OdIS4kLi(bS!Op9 z&$x77C5LO@NIv7={fQi|b0g`DSNBWusP>K2GlAVp{__Oe2?97T-{%?o1=9 z^Q$f2OiSM}ja*;Ze3K|OU_K^+GHm_Qhs?(=udKfD^twO22P)iy3ghRn)Jmw^#nTlxI&%Z{U8|98n;@CV$rI zHp)Mj{On=re%ueMBj)7SZl4XiPv)OXefGNaPuvf?BeLWe@@HJPdj359+1*lG+z(9m z&HQ=75q{o0hx-0L7v*S0pM@(S0$tuPa>a+_>AR4oxayQ#k)gBnGWaLN6I^v-uCcJD z4(mGnCE^sWIyqNNli+Aa=fNXza`w6m3VcY7ejX`-lXK8br%2tla1^I+f%1HO5u zkY*aSnOBe|XpRA+9DB$mR@y|8GtStJ1PM#mSYZ>fP%pN*U`rn>X(AgM$c_aU!~vJh z3F{krjx}QvyUArUEkLePF*J&eVjO{xc|f|*BZ+l6&m!X38%#)cfp?iH%k3N>K&fOY<_4zZX@!%%CsEaDH`Ir|AluXv?dr~>;j1A{&1G?Cp)6|U3? zC9wM$aflV{ywgOE#fB&ijw>SxA%=_3w17qFa*WyD2%@uUwuR7?8M_1Nip_T92}Nz; zD6%UV!-y7~mwh3_LOjY;014u=7Nt2a7=DPmSTCo-YzyHjYxX3PYR^MX>9DUdo+83= zYnh9ZAno*0Kn zowV;`REbBKaW=6ZG5$cj!2Pu6p{EG!IwbU{&o`7xMHJ!Ikpm}#ulBLqo%}7g8+XwD zqLLoYSG#mqZlLqq%voh1Eq=^mz_^92W4#)zcm5_zL9 zLr$}aEDp)jeBG)2PDhhw?R@u^o&%8Jx$F0Y56Jsy!M=Zgo*n6bzvj=$71fk>S^k%U zxXu*>`~Glp5iX0QoIEQckP*Z3nl-aruO)0j9zk^*s`L$Rp_PL#2k~y?MWCo^bsP=tXxBnTq>C`kees<%n!|U}+qA zB~L~}jbueXqX-T5gAakPVe7iA@Qqliz?ba*0_DEfyzAPYz%xDNGU6cs28BvXTLEk+ z$Avq$rxdC!Nsp+$vCJDFwI>&XLbwr|Hy83|G)G;5|F_|k!-%5*DeO~x2|wjC68feo z&t2oLrsNy!6Z&SH!5jT2DP=g7H`-5l0bjLvs zMj88LUfP@z8A*S0Dc1nE%i(eQKIxZMr=&-&y?Oqh1;dl+eNrziPf3nke)A}IFRm`N zPjo46mMYv#ISB+v-e8%xxX1B;4gSV*=*MOo-okqUZ z04fBgM9M)a-Bjue8rX>`C7Je1QeRGkiME7NYp;}LDtd79TZ@7zT{K0z*u(K^=Cl^D z6@y9yhN4`-ecktzUrO5Smt+KnVmt{{8f(AZT<}SkSi+;3iXAk1TMkUbHm9pOPc|IX zd^-tD#LbSoGoQc?8tc6^E%>5qK=CgwbKITvMD(EHTdRUOT@}i<;^U5=GM|VXG{vguKm4;}*C zaZPD%D9^!-DszVaAeA_k=NpbXd~g&1kv)pf;YWQw zgx+iNaliG;ZHar>2Xy@s{d@WkQXZ5j-_w4Oe6-{jirNkZso$OEe1tzBwmN3{prNA- zUw8G|)X$=GaUXuY_k%*TKaul!<8$0moe%Bz_ETOL$1@;lBk+M^Zp%2TWiFe1M|`+_ zuaQD@Sd}|#@g4r5gF%E}j_~hlS-_7q0 z6ni<`NVk$cYxP~~!z887b#>#M>xUvrcyYVqjjUy}?}U4&DWk<}>B}nLZ9XjBlcXpV zuVpWbeaC)iy5~-T#EOla_GiBmf>uU+v0`)HAL=OJZ}`3u#f5rNa&FsqwGXfFEl?&) z?Cj$h%kVjq@8}PA?{!f44sqGbgzwaQgiiYyaYMB|7XeuzlpG|zqYLQ8)viFNceHsc zAW0qvc4WW(yTr@rAD++l0Xwqa@gLUmqD$hIJjsAAz#GY3>9^#a4O0A7AHnu0UxO$F zpa<-c_{{;7O>V&$+Dmp}pD7wT7^L}2Jle8H>DiORUpn8G?6iN#@E3n%x<~%mgTudf zJ}CL!{$ZNG|{Dk)B&Cfm^CYG$ywuzlE z`dogv4t4t<19K9{j)snVGokw@{Zt`byf;#GjkF^9BLZqNrnpjHbe=3(cOlQo{;>Nj z{4DiwPN#Z_twT)uywnfOv(dx+;?>l7A+=ek^Zo6+t{n+$rWajiJp>@;rqb%x+0A3+ zCE?B;DL2(trDs*gEV~9s9mzLURt;xu#x8Wt+#YqMs?=<_=rHRjKsAAiHSmi*v!P>6 zUGBH;-j?(n!@i;$l^Bfaze;&rqB5raD*0r|-A=VL3V%8+bP3NQY#npD(6h|3JDma% z?!S9*<>`UaHC7j;XRnPt?>q)2y!71^-Y->Sc~Nrq^4O!!y(M+2{p-%#uVX(tiS`jW z{Tpj=7jS#X%l=$EY_E^nAk9K+m}b;M)>D-JPx zd#tgO=)ji~m~gF8C^0!C!1GPGqwsn z!y3!%5-BkNDC$q+S7EdDV`*KICFU-e%v!}&MPRIjZEgl~m?GL(JJf@9C38xvd6!~PSZvaiAu!hNE50}R%T$vY zj>*Ir$Fmp3!?c?>XMR#7hVf`7Vqr$j<%)G7ZH-rQDmR2_Hcu*2gCT?%#YA+Cy(l>x z0j+HT$Ndlq9QRXF!8jGq*0#-8%EJyd zwWVBDn~`o)y<%xHz-~*vsxo8PW^?6&$xO)CmROai8xA?NISRPbZpEkYLq2VxSDH-R zgMSH;xPtwKt{0|%MgNzS`(esgw0}uH684L+numha`^H%l;WmUBE7JrGl`HzKANQZu zJ*{7_{4gfg|2OFi9QV|1>&HE~BdKNrX$#SI`%0rRv4JNiFugjAi7l#WmJ&0PZCzKw zj9Wsp8&z{GH=f3R#RJnTC^SBKY3o<>D+8fk4Tb5J(x|LyyNP z3ex{Y_<~+2g4MvbuWD_tuPhi(hS}AF3l@CFenV{b65%WL3ZbI@qPT&Y z|HU#XAY2_}zoiRk)78qr#<#RND}Vp8;{l&4`|IB(UP6z1mhB68S=rC}2Z6n)ln9n* z>(d21D!DQ}SiVU=WvA*xn7{Jn1g%iFe;hHZ%ZUd=cL!|qmw4B3s?ugN#-LuJ5?iKd z(4e2TQ{v$kf2Fb~0beTKhV86>z}PAN(9~bP>_Ncq6%WFGuV2@>pq5l`yn0Vez=?|f zmZKTJ%K%YpK0vL)D)cPtd*<&V4-I-!FEhMVsK_3TvW5W6-?G;@y3D&WB`m9cS!(<= zu)azvYU|gnuVb5gEXt+=&=uODo~&z`b6P#S0)oQglI9G7^>zPWvX{(wOc|ykp1mx7 zOuJ`u*{1+v*eY$S*fFD?@_@RK-x{ywJl}9kvu84Z8f?hglldHWOpn@QTJ|Ntpu#`& z5o=G@bJ1glJyvCN0V);SLQk+hXFeA>X3(>(>_>og#Tt8Aay+8!M!@Tezud9svd4%$ z8wJXkOqg1ORr*<}af=@DviyL%6<%RC8muzT%8c9ei2Qd`OuFoPz>A8LVShHf$~a4v z9k=Td24+}Jg?gB6!^QMDsc}r%XaGNSHFZu%Wdf>rA9A;)Jz>=pM9(|~pzem!%2t5& z%EQ8&+EZ?*tw>L(_F7gBu-lVwsH_-H*z{hgoCz6iiC1~O;he*SqX6aYS9}dW=Q9!7 z+f?Zud^be07yB#SFwCG=pZaUcqcD|T?O&5mgx#%BJFf6Y<9wy?1j3q?U5TDx_TH)Z zkA~Re^!?JWtu(!nKztF|5NI<?ht=g*C=ap!a<+It=MSG*3TGX9i)ZGBF5;%0A6MNHU2!_SOA zWnUBLH%uhY2bILrmQ6ZLA=~m;WuW-Mwv>$sZbw{A@68VeH+_w8dr4mei z(swoANv6KX1Ni;o()2uiuLm&D2PCAIS3ugXeJ9t~?MUevUs1jM0_V5dm%!CM_mta( z(pcY(_j7lU^tCVL>bpIVyWd^t%21c5k37mtqNO1!%0?BVQ!gHcEmYKLfJm1qWa=n?b#mxg!v)M;Loe$>*~rhs zXX?K(-izNg^HL~$Y=PmNY5bP`Uihw#7oo76%RLS-&FX>;*ZE*hbQWn z(4&OHx~OxU3D&2qr()rRcDuq=3$aKUj;bunGV?TSRJYxvaM(g8(hHKotgmvjPK%8i zwc8f1Sja}Ib8J`_GG}0;dhKR~)X1B|>%6vIa$jT+%QN-5y16i5rbUGS*i9R6#k*!TyF*+I2hplps${5{nj(y0$_-s~Ca&biDo%-SmobzyvzsmC}ytVdaU z#a?IT3G4re#0WmwCcxA_U{ORLI{)EQpq!9PD%4GhL-Sc{z3 z|GA~_Ta{U4UE`|yf><9Wipsi?W-WPs+s}@wy218_8yNyXJQF!OY*fFWv10ub194|4 zrlRY<*{TY(Hs>1}x+=C{DImtR^};{~I}`m4xMek&5R!oIH;69h9Bht}CP?;=1I6sg z(7~1%VS-qoSGBnS^u|d3Etf4#^*8?|m-SmmPjcj&4QRXM$`u2ns!`ELpmwU?CZwK? zSVz+gH@12Mft|q(t%gC;55X#Ua_D(O45r*L(7IZd`+4|m{W#;Jc)3}iLiOWl40QaV zp9Yn-Ae73zIlK;#`z2$! zK`igoB6Xth+Pg)iDYKzE8ec#D5bq=R>0n)Ukvvf){v6ModwOt`O+^zG;!pBkaAyWb zn>td9F#Hodp+%7?$)UO=zEOM#54-3*l`*8yLP#u1S*ObK$RgHx?*3TWffiY=6Aw;o z_J($A`GHlMdb|qY$A55MH1app*~W_rh_UtX`G(1KzGl2R@8_Z|H-@von#>vyt0Tk{ zd25TpTrm!nPJ~m9*IE{xxTzf3Mm~)1#~WJ2afyw5RVsc>mq*~b4(BvrGKez&#)_$F zeEGGHivxqy45A2Ce{Bnq_ifRPTi3`}=Zo<$Q&d(_8c~wEZLMRmZg8C=^9|M_7H7Dl z!-V=E25_w~{{blD;KZqQcum!ThHg;gR2mmuxj7t6BQcvQ#K*7c@!l_nb2~Uijl>-2 zil3hml>`2hVtmWBx<&p_okqf-7VQk|8z9ov9=UlMXaNpBpdFp1A=xkv+b#YCc|a#R zNkh!Ri)Jo<3OS-3ouTnBM%}NiYfs6&g%AMae+gL*Q8X0n2uvuEtbu$3lStft3poZ8 zO>_%J_QLdpQtPQ&TzD)kK?Bc#htlY`@D6&kZrDNiTT}r~*PD`f3+tdodkfnMe}LM7 zyXQqox~1)4Nc#)}g;b~yxO?863AZ#IaI|KaC;S>}3+}L2C+(J&g8{7vHi>+u8C`VC z(7~D}3;&EhqcKMAOuJ>~pg?;JF!mYTm{(`gEgc6cfd<~>1YbtY;>Ns<6M{7wTwzIY zQFN?_F+Etf!Ig?Zb`=IL7igXbSF%Bs_7YfJJQw4fU^{Aq z5G@&2hvqp{FoI1QP_#R+cks*TGK~PYiuB;E4a&6VuyJ?~`nX0fxgssttYH)F5$q56 zujmPl#r#16txo(LY69EqS&Cd41UlEEQAh|2OLrE}KyK36>~O_J7m*GXxcH)wSFmT``yF#S zb)?`z}lHbjh-O}_zOr|=Wo7d1o7SwHEv@EFuQ zcES_rA%qYjYmF`p7emF9EEti-LoIaRilAh00@y!92j7o%4Gce|%Ob#C(b<}+?iSgR zHozfCqvykQ(D81I@D~o;| z4iZtCecP+DBCUsH1WFh0I#hHH41By)uH{f2osX>5pp9u2gCKgEDWb+>Jy6hPKq^Na z)V`RdD+wU~U&(@tNxEV_Ud85VpzKZiVur4)PhfE@X(_E=Tipugcj4GpT!h+ z>Ll{H=Eb6WhCbHCvW(B@vl`#YAJXob`6v`WCSg!#ao@c@B;C{TAr$wMz>*L(2QuMX z5)Ny0xss9?qUbn}E%d{>UB<=U3_C4luPwAOv*M047gQE@nRa+fmtt`xX_(QB_SCpW z-ja6Mv%w}rMq5`{20HWJaNX?ytX8bSr<>H#cM3*jp-C$B|T*vLa%zvN_MFh zza-V6R$aE_9JcEcDoz%J6(HhnKV4|AfseS@a{d^hxGoL4_RJ3px!m#9pqevIqW;9b z@;s9|X4GX{yh4&?sH1GL7d>X_V|ra?V3%|g4Z4yrU6P@UAgq^b;Z4BT-m#U^%#d}C zJpHIcoR5I8)p-?OvQPmdnmOY%ViX^rZ=n!%5-_`CC>72^+8?MF zxV3~T+bA(kHv0wxxb&JoxAQbFsro2V#ZXj|4I|oks)g;uNJYuwfFb0^8DirYMBG|o zG=54K=t8dO98Gn1o9t+tDHtb>ozKugQ{8y-Qy7iaK5q4)|ueVMKKO0 zjf%bLW|I-UZK{J^hv?9}>CQ8lieS$$M$y0?BJ-@LFzgJ50-7ML8MwVV69m&FIG5ND zp_dnZF`~pYK6dRoG<$)96UI;JLAZ+)8|qr>qUBT_n-5yN5=XR{XYk+LOmnL}n0bKc z8Q{yA2edC_f%kro<9E9~$vXhT8h9}`FQ&QMsk{;G3mJG>w?Jkre#xz0ThHD%w-nK8 zjh|%7Y3n)q7L+QwMKMwMBY2@SGB)oGULtLKao!kSG|eqEuNSX}N@Z(Jk*TrF1Ux>C z9Ll7Z;@$L^-S~s#x6A^Zp0{seDb`Jk`4+#E{D8Rwci+o5sZ`s|kog&Zmi(Rh0e9cK zJE2t54aaQ8dy=m)x8RO=b<;|<+zgmK_{qFyniq;n4c)AnvgFVCXEeT%yVFX|+!UCP z@fhYA+&8c8q*5I>0<)irk0UQLXK~-WO%o1iw7TMx$fEhN|B8folkK#Wyi92$X3P$^ z^=!xz?ZB2+MP?;_nB1K20h(b=(+-%nLinJ(SkGzc))#m`@-Ive+*L2rq!DZ8q+7hk zQr?IT^D6!+`A|O3V_LFRmH851$K<(~<{YqV6=G78@pbt;hbN2!Caoyu9sE1;<@_=Y z@L8uH*xIVhe2yO{_v9bf_(Xn^cEGH46Y~-N5Av`16B*Hig(%z91({G+qy^QSF` zZ`EX+np_gs85UAfXsseOA2eOV4--t+w1*{>cC}WyG@ms+nH!a#x%WVy_OOi7`PM4e z<~URJ+^O75*8@DK=DGtm+QZ^Xe9Z)qvCyNp!FMB`U=KJ&D{ERi%FqkpFR36}0X(G) zt`zGjd~+&961TUoj={@u z1rE9yTu~6xh|nx>(#@f496CWikI={NaEw+MvZcR;PvT+|C?dD@9kQYv&e+Z-`Kij}NX4ZXmY zU_{_*lLC;HD4;^3CpG1x zawTx`4i}N%v`UM~O}T+C7e(${bUy@Phwa!)j`~>w>G5FhTWn3@takU_zgn5?FRFY~ zD@`X~0s#s1McMnN0u6Gf!-Mo4()X==MK9AR+9ud_Ez(ySR3qCtEX&>3_B906$VYL% zJ3PqPA$#A>SGcqzulBFfW)ojDh%Z0~5-FC@zQ+_tNOHx;gnGj1bM`agBRbtirGJuR za_6x>oR%fN9V?Bm-eJW zg(anta6wwZC}AIB$r7X$I&gIf>uH7Q3{ZWn;B1t_Go3a7v4tRKqr`ovmvX0$jC{-u zay3fYw+SR4%<~2ujZ*iizZ9DOLlq<)c99;_c}CMQZ!YBxxUOw@DRFA&$k8{y=b1qj zmVP?MOHLy>xyLl9nLP37yKlDU9n++y>{EFub87#{#W!<#DjL*mp2#Vu5tlbvdDk_l zX;4BE`2JSu`KC~J38c$v%+iKwhY_bYsd;tIcC=WzCB^Be5%e3KJa5e+mo=HCm=R1a zl?1wt!$*R0sm^QCOH$LjM^3*P&7-=m2`>pvJCC@(f%5pIHOZxj5ra3o^2#-XTx%0! z(My}APmEZZ-&Szf=Sj(k zeQO$1Qp~j!Vj4R0>vg#V9hxs*aYKpfnj-P@>yH$u23hw@f=F@ny@~ z^ST2iyo6~SC{13EBupE;jnECJv=_1DP6dil@jl0wnSyd;Dimk~4$C!%C5100 zZ_x#OioOuMXWYFovQdVSb;@1@Vot*_2;qI0`H#NJ!-k-W8u6esf>A@DBO z&CF%&clUeFJ{h-bGnXZfMt#@?LIsyehRJ)BK{DZ^&%0Zfo#TY(JU_gkyt{qb^-;p| zw(r*W6KBx4jQgN`4^t9PTh=@3 z`C-q!qT4+H?1MJQ4qW=p*ZlwA#@xMbV=l{o|9EfU)=yX4go}td z#P^U75&x@}S?9E>J}348<3n{^Rhm=y5adI3vQ4_UX-@U~g%1NheEXV&i^w_D_k$mZ zK72>8J`=kO&f0Zr6xf=#)>1|HXg|B#XqxY=) za5>N_{Y4*b{;YC1qPQm6U*?g`9+77+y80c~a|A#3KSM2a>X)pGmj5IQ4nh;@zBKU(~|MnZmp)zt9({^_Vn;*XM4$N_PiMANzOP7bsCkdrmfqZ5Uz@%Nu_qKImcwq z!+sFYbei2JCf`)DmAvRbdwjj@*0m$?CfZiv;z3W{;>!>;l|iwR#U$7v;tzVq!dMRc`snzlQ**E_@Ntc{|Yg zk289HmP+g-+zKMq(c_i=rvG)cc==W3<+HOYW9D5Ew+CG6lHwIs)dlUhvR#?0n;~=Jrvj$Zd}yVmU96r^!dJvhWJA=O zd7Eb7UwzubuC$nV2j67dBwtXTv2L3*q1N+|GdgWWCe#L={ET^<*_CjUj*y!zpm9~U zO%imK5JCc*dFUBJTb)UHa9~q)$_2HV|Ba=}4_?byQk)V0N~Hz_A7ovWFfjAqR8|)7 zsp4kyTS3*TzfoCVz=ewGP}`)r&Hi>}ya163iBQ|ro$&DsWeOD%Ve$grr#Q{wf zfz201KAV3T=s`_JiThEn<<1?M__*Gs znzVltfbiy(11zJ|{pzoU1p4eQCH7P@YzYqF!o$*m~PM@^u6bt=6>ikjDCR$?YF6;$?`_)7RhPzAMV zO?pLYe)q)b-qA{G%bM_t(7f}6doNVUXRk@FL`)d;?y4*g32LcLj6<(%nm;jN-Fv=r zGGw47K4BHHf}AJz@oV9K8@&PIOcd}zF%^M1qV=|V!JGG`0xNalOks5?Zx z3tAc~`JM-38dVHgiSdWK`d-DEGn3Y{TTe$_rcjK1RJ8yxbHg zyx`gQBJ!`c(v@vLt*hjt42Hnu3y|ilR0OT1-`c zUg#T$;@8(C{M};uH#uH;u|E0&Yz$Q3!L?MeK<(F8wc&6b#r<;H=?YK5slmO=V1smX)YySVAYHR-#A z%JG4E)!hQ`cb91S=6;pv2oC5Wl_|Fg6sdkO)!*=tu}d6uilP>{`orrcaG-qkgXrJ6 z4~7py9oNBQPGAQAUcaI^iLUmZI?DN-wIWr%El{ocRrDP9`|#HK71c>e@ZyUsuJZ8K z1~B?oU0WZ0xuP6tmdf9h8PYBEwGjgO)pV+#Ds>y@1nZB?7a|b`{oAU4L|b$JCkF1f zt1jo(Hm`_A5c@Y)Cq<`nWrpK2&ch~k`%S8cqjk7moEt3btOd3Hg=pg7Dq{iN-w|Cm zxSGD8(yvtgGRjjfPj#1Y+_o?qkmW#@E^Bg(tNkxmJoCmC9Xf zipgAnO%h|dW<$i}A|;|^yg%>wqW5rkOGjeSUr>3yJ+uh8$3#qgyZ|Z}H4^B2n>9&6 zjc6T%kBaxu5o$f*Mh+Dfc0$nJUdc%QIa(_%A#8)Z&*Z15g^umx*`gZC{+^ zfC)KBi66(4F9Of7)U zQT|p?7rHVfJBVQu*NZ{-{;$QL|H-577%XZMRE3`BQHfl_U=X{GPE`VCbsd-gKTAVZ z7R{$3h6bAJl7P0Yz81$50~Mi|A$}5{uolMCS>z+_bJGU(Xl=0F@F%DPI8YF3?I1%d zgaI=JJ)-%>oh#Mw6t)DPM$2jFl0h-3CMX6C)X?>y&qbexwWZ-0tQ=jSsq4-aZMY7LK>mf92T#z>!}U=+u+h+ zp$H&vIRf-|UaEkFxPjLg-VqPN#onlp3fT=H?*KkFqe3<00!xA(fv$B50QH?iuj%MX zq`!7-5my)#d4fPD(qE@d1A1^9{7tiD#fjK5heeYi9eNR}2VdsAs1$O7Wkm;r6tYL> zxc#E#kOEy=Tm`vJ`?w=m>DIY|?a!lPUn#Y!E0N+uzN~}vcjCJckMaAQtFA>#5A9){ zrH_l7UrzB;aSdd}t&4}Ai_$~!EMdBsxGYj#n|GNDAM#;^(Obm55jXKR&e7Mn)~rc! zss=BQtHUZ12c3kMxaKS~dboH8@}>?i33~O^FVyy$$Cl*7`dwR!zmd!shfu#^uX%1s zJ#5rvQ@liyWNbniV)uAFqaW7mGA;f>GGKsKDC{0jaPc?nvMQc~Ql9x~?kH!}YA>f8 zCU$KsP9mi;WYBT$XXsIT-zb5^ZufkZ^Cl4sFf9i%$M>h@WcE~Vn9 zq)|pYdev)||3i|bkYG=tLQD`q&p3Gbo}HZ!_@z)}?Dn6w!4bWAOsmnMCPt8Ud~%h= z)I+uw!yN@-jXZhEQ{(J|jCZIy2cGuSUiKHpJM=D%`0I;moOJdj#()+&KBvlbYK4tK z?9zO^eP33URg@@%cmcLhC@PtUjFRT$q!BgO3aYfD3^^T)W9W~XkKOm>RM|xdb2`%M zG)|I%UuY7A<`B}Lj?F$V_k!+0)Ff^#eeoD40vzR_hL9Y~STvq`!3M7-LSb-rUa_=A zfD}3J*#k(bH&1vfhfPHCJ$RB+<-kfT(zJ7r&0e&bnq*TEK^nE>*tA8{sUkLLi136i zzo%%dQ^+7r3wXy6AD0NgqaXgN+mqY_TCFbATL9xy#ajw^W2+Mr8c||~yG;YAw$2+z zESZk@j{ItS-z%l?)(ku$PfknEW!e;w%OiFGeypCW z@6A%7)<5u*xjXRpNz+E?))@RHw{`KnRKjg1^C&xv?J8;;nb_ zTiuT4#k%-jFO_lI&%B7Ab5qWZ^_muOb7H#Sv)r!b#=1dnQ9gzc#n{grx-;V~3zZ4^ zc<$JR56X{qdQvp9q1A!ugim#=)v|OvRWPF18pTB8b=5${LYs-OW6WA9ah@SxOoaYISD1;~}>-{JPx^@nGO2A>#Q=8|@2@(-^(dtK=f= zZywi@w-_AR)_vFQX+C((qT98ME#|;&tX_W`qx-d-Eky9nMH&DOo3L>=fj-G9btVVl z^L+=4U>y_WTlh<7tf?~vW|Yh9MDjwp3M0i>bUZF$oX%kJq?dGdgETs93W9|UmYrj8Bf}iG#j?w^QiU6ZBGVxVdLl0 zv*dAR5AKoo=Y-kQ-2}1k*aiUrT?G|Hwb5 z@#B9`_9l){?|=MncCyVF`#v*v6|%2`8Dl8SP|{*Ql}M-~5{5Atj9q=4Qr1o?h0;kU zOBi%ogyXbmu@_R7WEq3|o}tcizxQ|V{TEt3^OMbCt$s$6>Wsn{47-^Ckt}=&qfony|oo1gwA|d)k_4B zh}=0L*?SGlB3JXfR4+M!8N_5lvG;z(SHj2q9je|0FohUQNc3K*ctU{kZ>f4afo`Pn zgnaK^Fo?X&KcV`L@O#?Nh7;1gH!I!{?&W_`edqLh#?OoEvPHrUH@5O7lqtX^`Ec4v zVs^PiTXL?u1+UusiTbO%M1Ftp;DIHt9ZBfQg9i#+NncWa`No$~Ct4Az7K%7_(dmtS zzi01nxxZbiQ>yr^7AkY>fzumozfbQ%?r+6)JQYf6pJB&Roh$=V-s+#_kG*tyVAt=` zdm{Jr#X8H1cj}*&k1aZ#we83DD(5Z~)@fE)tACa|_T1@g;uZkKL$F?S13iZeiEh;e zW9v`$(V_r}-&k$|5-&RBLcIs*_)*(OX*t43(;o&}du3|Fj|GM$GojoH>-j+za(0kbVptkkOYs$em4kL{9TDau|QthIY#*HOR?qRv@sjbXtk zK=}Q=!}=nPY=dasfLSyHEgbsC!E^YFp_&C2T|{H1|7+g$Jz9H>hiy%K6*LylAj z!3=o3y%(iMa_A^S_HBpvy0yG#eVZM$}>4kg-y2A>z z*PM~oz%oFLQAE2BJB9w?tA%O>Jfz4=HUS2VVVa6+Jk5)H7R|_G+oI9u?O3w22*z#N z80-l;J{_#Ie1KoqMS0p+(Y^R;b-*W%@Bc>Xm!txC7%8+&STp`O{S|Mmc7P$n2**Xj z6~GST_(%?Yut*$F4{kT|0L`QeipfapGtZqQwxGH3@#cETmUJC zSEQIpM#v6_L+>BEX`6K6!6&Fpgz|7K`$H2>#vP*8%L1q#d_2O*cotuT+;BCm8M&5K zuNc8M?9A9pBde~ZK|NJOWr+BbhY-Y4cZcizXK?=8!Mm0m4WE@5J`6s$*6mm_vl!^N zpFFmcdEG54Ai&W#(hIn>(VSW@*qGV1-lv59Ik&+oTp&8(QgJVb6aP&s5C+}f?{3^5 zK)sZ$4sDO%HGOwD*qEo$Qdpg=d9L16urb@%>!j`33J(0`I5V+M#vZY2R=rmV#mK$3 zOvP&`vb%c4W5V8?>!`TId3AT=ib;ZT4!iw(J#&x1wH@x(6-BcVPdZU2$DKL5DoiLzk?8ua!u&kKQ zjkgU>?31`AqY%}qfTMz73Ny49;EjB0h6n5Z`^BGk}X1-pu&k&pCx|&SZ(rJ$N*Y{AkyeQRFQCpN=of z=A;4W_^JS(?;-AG^be+fO?DYEdi&8>&J#3S@C)Gj=egfIzV~(JWFGlKsv;iJ;Ld9^ z+uMvkL4V78U;CutsL@Yc`*G)U4*$fr-{D10n zaFW6jJ$Y(0EVmiEro1cwr6duJ*kd+9lZ^ABg0`L}s4ncvCF9rl&dAMGKWav*RBJ!+c3DGWo+yCj?-BnVwI9FHnl5R`m{aDg z+vH{9T)CvJHqBk|ioP?vpiFDJToMb$Y_{=NooHhZ?6X_17=bZ6n`C3Bo#8Ha#fqZ< z-ebG0$QiRAYwZOSc5LFDy0dY?q?R!;xUA3qTBf_el^xF31xz3bHnKfN>lGXeDd^C0 zAzmmm!a8B$M4Y6M1D-_G-6JXL;AlYHT_BmB98hkiwIe-sxSUrD=}eU+j% z9u0utDE2#~gfs8?4cJl~;(n z%Fo-a%6>!i-L4!XJ}GCbgoF9|o|AOTJne7N5Afa9nUn!*v?umv)&U+Mw%Xp;Ul~dK zRQ3XUGaJZ;dHPbo=W{bYl-|#KS3B6S&u9OvdAeh1w4L$|-=#BaLoE0$^{Nwee{x17XvroNp7m18t<%^V?tgdVZ zb>JV?VR8w0lGps|Mk22zZ?4kKq;QW!a#>5!JH|fbxPEL5b^u1$T z0u%NPJ{j1jS?NY9F12xtOXNRbQ3rMRmN(MRb8ScW>jqVq9kxF!`Z==hY0&=e+hvW3 zV9Iu>yVrfYe9ZPq+Iivaru}b%rolPfg7N|7x`rU~a`#-hlr8vTDahHf%YvrMrLekL z9QChyw~hS|0zSLP#!febJz;ZPz@F;#8@EwGCbKihj)vX4>m)BEA1OBv+HoQE zLpfg%@&Hx3Ts>%@#Mp5~`m<%-bWgnP|L_^VfZs$MI9j(O$h+tF(n!Zoi7ya0We$YZ z*#yP)FiXEVDkPY|LSg-Wb;uxWPfDq%qe7yIM5ttcP@O?gU{6PBrmN${1QU3uME_59 z+Cd&Yzm~cl^^Z9B+S+@|)!6qjkRB=Sw-u z`1B8nF<8cnp{`0dcd~DgOwW!|Z~Te^pyA0qYuE>r(^8-1`y=ZVf=qi(l)l41NIEU^ zS-C&1P9R9UN4eA*f0nW!`B|?2RGrLt$yF>_$l4l+i{-iv%bMABR}D_x^*Q}ApS3Pi zVf=OX0FEqdZ5bmrUj$0Ar^?w&IP(F>wSKgFo^jb(+!_}o@C*VWo znNJzd>~6+~(ckknYR4GP8~x1Xjf1)m|IFv@@UlDdXP$RBx6*^-Cch_rDLXrE6O*7^ z<~VK;Ls=7zIR(nE&DeEi030qGxU>I%_)-Dtt;t!^*&}zH9J6}7xpY0NNimL(={&!8 zoLmAP?w_xN{~zng@$gj%=HdC~o^`u*nN`fZ?)bi*>QZ0F=EQi!sx&in-f}#uXS#I2 zk({swTZMDBZnvJ|Qj8-xkqd7Dmh0ZY26`?R8r`7_hU=eNqeVv|H&^h6#9UE;zu(ip z9XR^%QChAr+O*@1?6hA)#;h_Y?@Io@hl5mvJ|0dl15>tSn^qRbq^z!Q)4H*O9Yy|fPZ4(=~u<@N}d(yD29Y@vY+CzG6p;R4|Oal00N$Du+|3o1rT+} zbeTfGU)y4Z46VV!EvIi7!0DT6aQdcC>A&z9>V8lte9c+74K0s|JuL#Q)Kh^?nag5e z;hy&Y(DF3n7jZ+(5iU@~NY)n)ly2FUzHD>E;OQ_&#Jr#TEBa|(;T3&$B9$fk74h_T z;h6rDK(?6~v{Ijw4RixMTdU~%`R?d|&D%G?v#ly?KhGVFBip~nQb8*f$eVedrW9uC zH-kTc*SvSMj~G5R+Rf#`D9}H=o6n=YPd{=u&!3Fl{s#(8eodMPh$*x=k{}m=FEltp zSr!FO=`e%lHkR^Nf&ZIa8VBssN(Pqxr#q%7uchuN9Ep0WTxe}@)_G zr(A_VA?7dEp-3^8JSF=f{3*N;ZQ$si)uEVVE`3VzLp0PV2+KQ!)pe89 zzC-R`3C}d|CiL06WAYB*f(@<}6SgDo7W6%@h)3R~_f=QKqrX{R8>{flIp7p5bqzyU zb%GuQ5piVKJPU_Oqicp0U3nIclUCP+E7nkvxqa&HkkhKmq>B4`9y7a7%6*@cH#+iC zpQyX3(>qk;#XcqXD5rPm$l^X8cX20c)VIPugu9!QHTqjopYXPtUjIhwIpt4>0eLT1 z>(de=rHgnG;#D2E;hg>?3dsAgfX3u=O1fkLPuC6fz9UB9lXul(&79v@`{UGeDmS)x z+Ev+mZJ_rtDmP?3BdWw}Y#2I;V1sw6a`(DY``C|dhxXiGb<%6B)~1~)a)TT6Or>gd z{P%WTr|gybBn&qA>;8K?uP5$B+>rJRt+Mcntey1#tCP9)1{aX1;k|5q1C2X^DSt`c zklO_NzqemGT>q7tZQB(7%k?w)ZL9G3pB2ne4J z)Wmll$hylNqW(gs3In+K|H;imdIj$C(4%tTmJBQa=H9i|&Efusx?0Q$sQ$g4*IW*4 ze8_L91RA9iwZ0u}arKJS)V^9n|K^lciw%Qy?Z88@*lR2teD%8al;6h<)ID@6s%D@) zUffdrw9i!RtL0i@KN-dj>L%*GSexN519o??vr7Po9AfN9_LhGj!Vy_R?d+j`#bfHZ zdyOs_+P&cqBu*cm(s{MFw)x?j!~^-$kyG-VP5x!att4-m2g;}8rmAZc{7e}qsH?^x z&#dvvrS_u#KSBCUj{fvk2!4(zDH>LDF_6q|lPJ3$up z+GY*)a+aJ}u z-S$2kv`Fj#dHTc04e1BFZzC&) z_YO5s^OZjyE)p@51N;0LDNRIIh*|XrCtE7@QMBl|S=ewxa=wzLfU9fKA+!4t?0x>D zchO?_Mz=Iy!5r z*GDrca)i#%o{no252=sBMS7dvQV+ycY1hyq3$w_G$)Uc^<*iq_fN~FS<~w54ag6e( zyM-MFZjSo%^%ya359g(ka4(uQB## z-r+yGz00ELo0&qm$?);k*YrDlM|HbQiawiJhW{^e{6FCMa8avy<|+P<+q%q)zJk$z zt@S?bl+Z`=&L4{JE~%m$W-r5Ujl6w$Kkbz8N0Tn4q6cP+oYpCr7X<awkQ1H!!F zA)l!dnD-|ld^^~#??ovv?*qa-WyNCiRAAuYvy>H$F9$cvrq7ZuDgdZFDtw?lPTW-d zgwOYz0rKBz(?t$qzPbfeMkVT1hBj^m?uh`vyBORGY)?I?3;^%v;ktwISwG6Adn1}3 zu1at&1mrno(|_CoREH}JnlM7CE5@8#0GEi1L%$Aftw-IW>W=8t>)cAYF(O~DrEy~G z%htOQN{3`#wtb7>c?&ab&5S_24GX_G5}&c6^kuOgGx*!X&@_nliKGT)AU#ZQl5elo z{~3ODr0d}(Dz5nUe*F(Z9Q_6Lw!I!Rw4=p4eZ}yLUj37BayuxNM!g-Y*A3q{e5(}{ zOWmNsZ|?47y|)?lP`KX659PQ|OJn+3(M5|dqHizO-wO{LdEe5QaaMfM<_pi;)cWjj zl@Xhkxbzhfz?%zO&GZg6QXyrq`?EFT>;Ng?%|k$dbi*e;E!uFLv-?9z9Nzp;^nHMs zpA`VR|KiNt;8^<;aw?=!y~W3_!9F^9Hhoa49Z=+K;9PvhhM}9d2={SnaF4z+`*@J; z2>03Fa58#~6BDiGe*ZCAYF1}xZ^sSFJ}Gbspf`JcXm96@#C?crX`j#ri|EMN$)UeG zSGHDj`CuFH(Y_R88 zl>Sn*+R{h7;c|52Ow7o)mQNWk#j7#zw=^Vjuy@fGg>+MqFthi94Y|?fGx(9r7KIE` zu`nydd)|h$==>Rt5to*W>87G#7Vkx%aI%M_8)kTW>p?m=Gyw2=G-hO#a!+J>U&Fvm zeCNTed)#5_?{yk5Gi!{4nfLg^w!gP%_!g}&^MAN-V1w@3;IrrfElOy5C&!u2QKl!6 zz-LkPa{$0MJ`}(xt?gQxnDyNVol3Fxu>ts$bqfH%Z(G_AjtZWqtZS?tTzWmr2H>A3 z7b^hfJ!)p4oh*(KkN084E-lXr56Up~sJ^nzg5X49kpsZ5Z&}BJ(y7W2#L!Fjm2Vc| z92r3Eda1t309k+TKBGHG&hmvfOT-^$=`8J?WqZ?`<>Mn+@=M0EAww@as*`+Wnw8_@ zSk*HMoEwC7lPILz|BW<9leHPwJ%|Y*tYa_ z!!^C7Co|;sbzV7~ z9MT;MXM*28xCMLR4Y-`kgNG?1ymCT5$mnwbd1qe;a1x~F21S95oozwSxx_)<5Aog? zdan_kI_OPV6ohj3kPudq>HspA1(dtEppBZA-3gjF8=a%1PcaAsh82dI@*S zM_wr*9rzxNN_*nDL1Bs>l(P^TXZNG!8J8VOqQr&_5XtzUqjUs!qWzKwhZvD z!`MVP`{ZCdnX0b@EWr~(z8X($3v*|rTKBQZaQu=5Aj7v&_k-ByQ~Z(!@CR>nL)ixi z00xf|98izV=3FAgQvcHpUF4AA97($bRRw-tZJUGFg&Gk6au>tSt8a7ky3Db*>%!t) zy>gFlc0>0HHLJ4nYUKSRTje?3&=(q2STCqX**^}5-4$RaYR7R)#{Pk=8dMjdi|}9J zTdAm0oEAcds#A)uM95P${L{NpbwWz^P&ayBh^IA2A4L~JfQ;cqMEtHLrJ+SC1_p7J zxvN1FD@3@GB7p;!!&*xLl9!4ADMBXz-XlRrIeW%th^IA`nk}e;utCN;FVO)lE{vk}!W(e~m&Xs6iQweYe2_8c04*MZ zt409zrhUP=anZ8lxG;%Ehk{ESS{zi!03aTdI__PzNSlL=sXvC=%iUpQz?Ce1%|@L`ujKCeh?7dwf$!D0ZolW;xNwjy)Q;aqrts|<;%@KiY@|@JPO=h#AgGEvk%y%meYh`GHN?; zhYEqnnFL62Hdeltu!IFpXB9Z4w!`7jg?bTyh8M#i^&O6fE(0|DIhm#lBfB2Tt(S;6 zJgmdm3l1^X^6KRyB7yhWI4uPJQsWl(5LB-m5eN1y1(>PY2^`BfB5+uP;gWU{eibgv zK-J>5A#@o!wfHK80z)Gr9k{#Flmehv=!G<%;T$tmRvH2va9l)?cL9iUk%58TQ$6AI zHXXc$DGdJxQI*}*`BxC)s>%dtcMSU*2*OSEGQlb>dgrX<@HNJtw5y2cs+;_|;_&^y zv2*k+YPcO-d;lWTnPmt})K6$+^|j2UsNpe&E)6tKP-{s`Zcx}k4{7N6pY8}~{R~kS zwQ(?Vl=fVr7;WPgo4BMmoWX!-dWdxwmNCDom3lhvQb~AgBy{LYEq(3I=Oo^ zuGzbv8x_vegSfuBNjoj4S8#ETK78|yG>+N#7F5VN$*0+(@(5}>)9lOgg48V1>;m#C z2-_qsGLR8YRuaW(szOevyh1hPa!Q3cAjJoAW8LO>pnhdyEE&UT2+Sck2skF6Wq+GK zx-V~l5U;u4^)?0E!RX{+2y1HptqT1AjtcyT1t+X^mK@?cKr+zUBKc0$SxZ|r59JTr zit?7A6i7IyZqyE%AwwA7|KzZxlN8?98T3h?e$L5B^ho2S$a(A(-TXHP2FiAJ5FO4~HG1y8g^7-r^_-v!@Co@dOy~rYH{yP;CU` z;7sJaqiljc%pb^QPK^AMu@}^6e|l{7We}P3K_*t=K>pl z1Qj7jMuX2GJ&-fegu6mVNkrUVR{ zOWkqOa?VPMZcXS=cC12{Yk-Iz4L1C05%Ih=T7 zDzM-40Zv>+b+0`Wc5SD-RK<0|Upd#&&^{(fR8Ix@7xsE~-@ruh}zmLo46V?`WvX#hH z0}n|%_go`2r9W(U=5A9{xMu3U^$)v~xxKkoYAV{cTXRtrvf6e`v5B)4Dmnk@>S9o< zRHN_0{kGhAJd|i&c!1$@$yMV(#I5gqbr06+|5Wxsl+W9J#X2oLP*WcQe92^ zSrXh_`4T#FT~&W%d@tcFlA+SQL@ark4~XvdP|egLIdkEYo}7kn`MM~xZCtXJm zJ-VO!Rkb<2NXA^{WIR~rg;krg4#7Zr!+#X@$RRfa*_?PtaoJ^5;*ompE+mAH7hVn> zjmjBtU=!o_6;GZSUCbG9yp?bWzRWY~{74104}XhtNb0`)$;eT8HWE%ozQo^3IwS+8 z`VA)B6t^aO9}XBkHxO_#bvTjoR`EU`z{iV`_i!hY-^$+?<-~dKIh;s+t9+k_6X?B^ z`#_c5+-0fHvBB{u$1jO*5z7i-i$9C}f6(tQ;$4xJk9M3ix44};g%$uWP*g><=A!{5 zIh)0EQf0L1(Q3{LTHIEdW+liG+6$n??Ud84M1T(e`J-ml^>m12?t$Q5HiblWi1Luf zJ|YRlfzI{k;G>w_Y?KNXK<8$2LVs`g`H!wbjr+i_+YJeMLSqhKqu*KnlieTbV2wXq zu<)qv43RG$pggvC24D!q`fvBl&RQcxhXNdydlk<`-+;gc0upoQQpJE z$7Kar?d&<_$18v=*C~rla2FcG7Ho|1Y@Xbm=Zc2&cHd2O93bW5S8SYl3Q~Zzo{f&r z2{|JQe${$Lyii_eyDSM9^YdCai3iH-?3NYBgbRMt`b_LE|Jine)+=P1f_hmNq*x?Bw{*(D3GHKatccb4A6OT)?HpL*g%G z(dH2U80(ki#$*b7N%#^vPA++;{9%#DUIh_aBP5LyRtn^~A3TcL-g`y7IR!xG>{>9n zRMF8qanAHHhU2h5DKRDq_3sCN&@x2BQg*cW2XM}T$4_(Q^`}Zd;GZRdz21idocm(8 zConBI^7>>_Mv1h;_7o;R;LJ_`=FGSE-6IXy#mU?i3Etm#vT}?xfQ?hR%N^{{Cr;EY zji()uySp`bZ(nfbU!;(d7r2|r{s$E9iUoW3WfMP@zHkgp=!bm^?8Ae(3}Y8c>6g4K z2gY{k%Hp#4lzxf3Qo$j8CY2oCT>7q3@Yy~w(5kX5J&pfN>6f~zFbP%qmd0oHE8P_c zcIyixHamPyzL0Xx&0Wf~U%@zevgG&5iAv?`+43bRmGEHtg_8JGruC$FWgKy(YytZ@ z+hPl_PpNW-KT{$5`Lq{oWRg^%@6+ z>hglFbUT+fCNG%uTLw*+o%=r4p9PCP+glG9bM-p$9-Z>Nb~n;JMQ>V=4~W)X2)f%H zT>h8cjf@32XRR0QmM@E=vkmtBnwx8VNY)GP&mMKpyAPDzwGYXB!4JIidfokHcd;Sa zFSu@^4`|kP1$lS>UKWX6k@&1zSKae_Ioo8vAliQ~sIj}Zo7V{LVxQk5X(Z)>{j*2J z2=UDRPESnvo-5soMl#!#o?*ZCaM!`M+h_Dh)J=CcIj(Ts6hGiw7az3R!(SqbQ=l%O z``v<)dQwV69TZYb6gl&Iyu*K|e6Zv%C_vfX-~+R{d^Pd3>}SFL;vmPKtkTuw(~6&Y z{|*t0U30U9oPCI*WMA9o)HM`y*Z40zcS_hs`n8=*-SO8wr%FC@jP%yx%p2d0^rDSh zKtuR@ao9()Q5H<`?clqYUZRggqh!pn`Fq_1c(TB%HwRUJQVKbe#Q~GPbzG_kV_QvK zL&hAQ*BRg2bE9;hV|5}MMTfetxe4fD>^DgC80>s@k3y*_ex0{bD8^&{$oR9KgC(40 ze%HL`_|2X-CBW{^2XWbxq@^|#@-b2K%H!5O&35b3jWRLvkS&%ZwJ#=YUXne-UoHRF z5U<2s9LJRW%U7S&O~$PY#p!SQ>Ql?t>1)DZi$`}mmSx+kWZLk@ZDX3v&yFLy$ylh$ z7d%Iz<}uyk&m^APUoW39Ukn9ka{YBr00VMQ> zcxif->}!3Wj%dDr5$DlTXg$0QodsgWk`JSm%2fez-YV;`0h;ran}K?wVkc;MOKn0fj7s_syxdqHEbOM66FVTxzv)i~vM2Ug13Vf` z?8U&Q7?j>4Qf`hH23C2SwxG10t>wme1^RP?riYM97EwxiWEZ_!zo}z9tB0ptlT$^W zZzZ%rxi{RT?8Y;5Tf_Aa(SH^ZZ|fA)x2FrDI|%wsZA;1{0(2YMI0L5te5Y)J0W1*K zku8hy7wM3t7)S=nc7)T54dPptq@b26H%YEAs8qn+4GQ_>t_WU}!QSpqM*|97vE3{M zB$gxS2w8Fw7~+OyHXqfqSEj9;=Q z{F#MZM`&{X9fd+0rR9Xz0(bO|V4kiO^5_c$h_!Oi^p--berkYNn_?EnK;ImY^^ond zKV|em_GxY5h<<0F>qC|(G#1EyaW+_gXhlE63mo+2g`N8AtyWoQxW9%yCF`%ZgBRz) z!{8~*=gAMQhxOQiIvX{A>b1Y-cEI7b7`abURa0K(H75hcS|4Yg6Zo{Zs=;fyW-hQX zW$%_xkyRA0WDcONlfG934B^9I2tW65!xRr-^svCjq;ETZDB~Mbzu9>50WKZD=&elH zKiu);4SD-gy_s1*)-J$krEopoGsvKb3EmpyZrdo8`Bf z7Ag5j_JyxkXRWK>YUVfb7tLOvmHl)Y{6(~Ic5ptReAf$Tre2b>6h7@ab^MiHU^C^C zlBK|D*QrCV?$>_xYfir;W2tgF9+2q5e$83lum`Zy{y<6U0Os%JL~q3v7chUT*Y5I% zI^u;_HYRg6u>L^t^qHx}nt{$+3EuD(o+;;7DgpaCZc)6YIO{h=C?JaHt)MqqbW_Hf z>;pL1z1?aq`kA($NO`CDfDd5n#s2pgCz9XEKM-B`_{tZ`6$Rg5R@E2SlzLR>m&A97 z6@{s=+Oz*_C}#`j7du@2Enn?8ZSh;`=Rkp1$kSA%K+RVJ{^aacp3^E*O|MpKRszKz zf)jE26aP`pJs-C6_);Ge&0_FGT4=02;opf%O=DzK(AAiGUD+nS4e#S~HwBJMY+ zi3*%gwPO{(=3lT2*0{F6;z<4lZ19e2XDUAAAFvHZUUPu_ zOo_^F{kFmAYc3Tg`Th36y4ON0e#`H-3)Z~mU2!_U9~-Q9Ev{lA-@M&_`4Nl0C zhx>G#;nTEq6)P$-yB~gXWRyL*>$%z#u|Pyx^5Ge!tE#R@4mY1ZEZKI3=c*Z~N~?!E z4;Qp*XMUCLdSf;{*pT7De{~xNmuF|DJ-Du-x&+M5fywi+PbL&-OR|Q~Z z2hV@xRSzktkGqPh!<#xbxhtH*}=q8HMds2d?$%!GHCxtA{t8>c+sSUOgiH_uw4>3f9t{ zafo}o;D=N9`YRCwt#JyAN^he$a6D)5wgwcu?w}_Fh|wj!q}HE{xH0J2elz8u(mj4Q z{7$aF8}VuIMfXWrj(9M%DMo)6advQlvC6-A@U2h%v3l-XG~J=c^;>VH-x!*# z=f9N}GSpw+7~xSbb}QqeYu2YBW=z0jA9wD!Lw?P9H~@I}qHEt`^dr7X@Q z-aMT3P$|uFYn0I!*|)XzBjKGRt`Ap5q4wj%KuBc4UC?R3X~3Cj(t9tzDQW&v#WX6; zbmA;wU>DP-cQHRcVLqus1+}`qEZ!@gA5WdfIANTb2EFU3RkI0A!urK|GGQH>UngLk zn1F~51xDM(1W0Jwp#l0EuxG>aw@1bvK1qXw^-O(~8}`l4aRB>8c^|HZm%w!@)v8P1 z$6KxCW6)sA=IYaaaP>bj+J|Qz51(t(&0bV~zY;Aqqca?r0JwT=!{g|^GuMarw%y3u z$5XB0v)!bjKRR+|ayX8y#^yIE;mO0%uiN)ZtZ{0{A|VZoN;I7c*FZ> zjv{_n=RYO!o5J=_NiSupReZ<|T+uwU{6id!-md`}jh#&y675`(o0e(toy8AkG8B?c z<-9JF4h zT`y&wKR$wGI=gFdW3K)Y`EC}8-_K$b^#g5Wm1b^0)QivP4v}fTa?M-g_p*YQ{+bOL ze95Rz_V-n27K`_0WzT#Xdf6G4FaTQ*WZ{=GK^Q!YG9cM37k`Q+y;M9*P8pDBmWmHy znJg8LkP`=_o0a0vvc#5@W-W)JI;JTDQq2l$(30;EIded%Ss>nx6*kk{KApU&llL4@ zz$8x(K3JMqQf|st8BAS*$I}74pSo_nCcYFmvogHcHl2;x0(c=+j@Mm0}WwWsfXr0*)R?+kIKGBM?aoP7)wMIBKw!~+@a%u>@_WN$KMC7W^H^*_ZM-l>G0AdDU^J8Mait5ptUZKgq-( zDg;3SUG>txBIwhCO`1!ICE|9zlz84%A%2*Mnk;Sx-QvcZB$NUZQJ2N*7Y!bz_zK3W z%i8JZ`AN0}Q4Dwkg*xDL%|hE5h4Xmu`=mf(LIY~s?7Z@7B>j*5-6-ElJuLJDeqJ*+dnOJ5_EJI^00jcm z`QaZ}J$U=euaP#{ByreI|4e7VivD`(3S`)SE(Y zz+}F}2X#AwCyB2_yaO1-qgs`z)vBtfzoD-Af;zt7@pyO)HA zs=?miD3OIybTLZ_-v+d`vtV=JCZnMmdGHyV%_1tQMzvxD#SzL#R{o6EkU?v+U^e2i zD(m8mN-J4t9c|?Vm1=`K57EK?MbXe^$6h3fgSw%?mfwsIwa$=Nt`h)SmG}->blFG)XE*eZ~l!oi7-|T zCd?a<&}AKK&XlI;mED^80?GS5K?-9+}++y!}}4>TA> z6jcVA0f8R>GBl1Xp`>nspO@*0C_~_Y&<{JW*F%ODr@@miBB{`%w{n3;72vO z?Ah*f;6$&69o6izE81|MTQRC7Hr?mOzkJZ{ZJJs^^bz89qQ}+)V>{V)Zo|XQbw5 zh^ApQPT<}aE+IBYYE#V4Wlv5gCSPCtH{-L z3ckYNiXbS$I~hW=QH%k^x-B@t(~H0iud#K*65^<}+$GK77RH8>UD=g0RyRvzt13HL zrAHgh$`02uMriEado2?xJ_9~M2h!G6ZFa{}m)wTS8J)Cs6vuTCHcY0itFL9Vr3Y+} zI*zQD^AqY!E-~xaKyRP;Z;d*|b>NO|#49MjwQGl$H``wHFN2gjQK|Vj$zL#2|?PQqu zL2Wy5nS)7tLy#Uyu+dzma0KZKYJi{5`x!N{yEnN)*U29y!wP=Z}CrC z{;+f0nL9wXu|#95bvUoe7Bk5$Tkx3g z_HrRPunYUO(_ZYP#pA`S+Bg+oHQDGTWllplUyl9nj=A zQUZA&jES1Zj%Uy4v~Hm$3MRq$K@VP^*I%nupZXG>f~MO>^Z2W^YEgRx!B12uI#xDY zpUWTBsz&`oFbvg@tk37K(`rP$2mcifPOQ>q#9AK+-hsWx0**ppD2^%)1ARYiVRp?H zJ6jlBjaSajjtDp6Rcf)-hi~ImXn`(XC&J0waGND|ck1CEm^nC?5^X&|6^Fk-Ryn>( zsDXn@d^X$!8B3Yb28Ni6@ZVIAJG@G%Q3A~kSE{#QF?tHW#0@_0KyQOx|BxS2pvDQV zz{OM*ae#n_ai(QQcH=`C9707uk9fuzM(FdM#xUlJJdrD_Vg!Pl_SDKm;ge6721 zus>Cydy6DhC^6e3U9E|-33l&;3#f|W6scyiV3tPGu<%r5QDGwiKnA4`w@d@7{aCSdl6PjHjDU#!9^Au=jh8Z@OArG`jY7| zhW$jbi%kcyc03PCw$HMfZlEk?a24gBn#(CBe&z(JT`ECoCKl|-CR%PP5gnR zI_U{4Tiuasq8f^03Qh!8xDePa_IbH~MbPUIz|!%N@BqlnnG&1`dUXyki0}hdM|=ej zK_Iuufn7tN5bPyYOy@K?TBQ7}2+ScWU@hj1#Dyhp(!M|!f?lP}>-O%g2qC=81=tm~K#JqzMb8M%5l8(& zeqG#AIg!ObM;IkND$ngy&2~^uwNgIAJ%<~0dX%5bhQ!Zoo!c{d>`@rn&GB-g6=GRw zG%EKfvN_dC;f&ba3P8f2J6uk+QaQr~J+&ZdknMeF4T5J3<|Ib1JbID?p{s3u(i*m& zF`knjy$gowYOGIo1J@b!oZ}-EbeR1b@3IG|pqrw@?B1t0h@P>W6C1ts=s^y~@qH$X zZw`8NHfQmB6MZFT5v^itLt|~9LyopRa?Hs_kyBaLa|WX$k1(q1v{>$CwK+fS(LWy@ z&3TS0#@b}ZaxJ6g)JLB@+LuGNUz1yw8THMrM)_i!vSN9bHRiUDz5%%SfL&8YtoX9c z9M5R#qwE~c*z5+%=_=^;OqTdu^CP#MV$^ynOJv!6PIwf8RE~M*K||*}$mBD8SM;1Q z1#18V7qOM2?G!w$|2RYoOH3&f!Jbh%Z1z|XY|8jDy8ZtOlxsXbsO3TYwQM)`jKX1y z$07y4a8U7`!eiE;OMVJu(U-S?F1b~~vX(HBR}$`EpG%UIlyboKkVGUA?e?`KC>HXN zfZ{6L6ug&Vhm{`36o_gmkZkOiWe+1BYibpj#irbrJ1qRzvmjLK4e4~r6z+BMocZGu zKxy8Dd!2M!W=yxBn$%?XI`y{7*p|n31z{wyQuh3NQj)VLXMy>5nQP1uA{}&B^aE4! zbFJnQR{BY)G5N=l1qxcGq!XoY@ynuPVvoHG&T1`^luN8|XQ&)qIk}9LJSRIARzN1M zIh>))NseI(j%qz8`II!^_>4t^5A^+9IYBZkIf8pey&z{S9P9~=K^{=>q;6##X{B_* zF-|IS%cO0eU1bu<7pp|Ekc^a_{8ZUSax7^|w2+9DoDAwSs0<`^mS#C#O0a-ON=*I) zHst~POB4&KNcqV(m4A|smUQ9b1ipFq?FUeJ7yeQb(`Hhj@)YS~X_upS0+@I;p%!Zo zMeo$gPsEqyCv4x*nDEKY%8Q)j`8UJ9XO#zu_sULS-(~&I6RA151AyXDKwHjKpH%K^ z0@F`eO%C(YKgL28j2!eSJ47 zUlOa!-`h5(abo6Sl~Kg$viI1=Y~~hlBZ}rY$X5|y3GS>Um#-y(qB%QnzFumB1$lGs zZ|d?v$GUsVu3&d%vsrF13Ud%{i0cCQkM3jlDdUCsO-%odpzn_F1^IqhU1?Ao7=#tF zOt?Rba$?~4@=QC03=^?XtA5_Pw4nTMjq=8{1?kNO_X!q4cw(Wx{FL=Yw_FpwynM z5+w&tfjls%6X4t{a7g5uo1(`mb-}P-FQ~c9+u=dVX{FEn{VsI}gYNajWB)@*bL8X2 zL1chSZ<5uQORODM#5cIX1p12U%@xYmD!F{P=2*ufq?i z_sj0o5^)EWlr;-x_&j_(49a@xCc9(R1q`@XOWYiaQ`StFKhMjJ8}c<4%Q|+C<{!u{zaYj2@&uSiH^f`U9j4+ z=(ECpAP>IJ;FkZP&icd%#E5i9D1AWxiyt7YQX^DGxH_03{urGOIYk*RgB2{-1uow(m~;McI&t(+dB^;Evx$BHT~_YIY#WLs2CjQOBAn zo7C_=0|7rVh9cEm7EHLvLaafme^ZvZ;wfIhQ~w(uekufxBQ^b9J7N(aFs@zbVQ|&I zDbrl(6#s|aPowk)+KZBxl|LMRYF;=U7@uG+b4vL`>{CAW=&C{9dJ6fy(jBm)?NHWz z?o;X?be{fI7^43&Af9$#?3DEf{->FRD*o~G`$Ayhbu+-Uy`|shJEi-<GmH`b*2(49>ti;P<8NZT6WhUsXTcD@@fF4^(ckN?%s`un5-I?7+2zW%LK3 zr}>5CtNLz%ms_kd&WL@r`oQ-zqY%>93-oDW34J~K)K{O}-jIGq^sB`O(We&+@9BpH zuBDt2_`2hR_0yF?aeb8ln^umF9AmKF8cSa`{eUT453p&8O0d{9Cec$Wt&Zo`*)MEr$MRdr2M2a`WUscO2Wsna4Q zQt^{Ol?wF7w7Zh88;4Z>ru$-VRfyNi+7o{77{4b+Dtt1nvh<3o{o?t%S+RwcS1Nwb+b^eD ztDNP6w*LxV;(ch1f@cjDB&M#sdQt-gRzLJfYutL)ctL*ZF4%3W+kCPcxz3^&9ABvf zhPAHovdQKe)4;Hn_vwwIXDt`RrY^mD0D9T)GgtW*pjT&W7Qe@`S85gmRUX>VR=59P zhsmj{)(ZwxBY<08r)@yQzW=6(Q48u*PhRb-A-Ar{t;kII)>a4jwl!tN@vLYpY@d4b zs@Z>_r70s$e8pygXDSu^K*^Dgv%}gdft%#9TTOAmdg`jkiur=@6m&iYylFCi<-BQL z)pNxZt(jF1|FCq2m|??HhDF-WC>=HH5-c(eXD6fOG7b5UZtF5Dnl(d&YYgvh{e}Kj zqw65M6g|AV?To@vi!Kq+hi0#&hQc4Mi(Z?Z3V+|ZyyfVQE~}ztGvRPvMYv;YZiJ+w zlw(^@goq-dv$Zw?@~s4Knh|$7Z<f1~;S z4JmdmbA5D#oJZUg-2iL++^l(!m3~U*FF;h88;Gq@uQf-{9=(lOlZElqi;xQLgu?Zv|{r`p#D_E$DyuH?*s?~2k(-_sw74K)cQ~1FGo&1 zd`DY>12FhvIHqM)a?$YZv-zTfjb=luSHS|51d zZ|>*&x~{#E_t?jp{?2(M6ixVS*xMNu4I=PGozEJ*kM9Q#QnDANKHK#!-4~0LVN=e; zi_aQ=M)zL6-#|aaWc5(rlgAnH zlCu_{Bko5>jh~Ldh+yOV$MBP0R{YZ;8U|;t&EuXI{2y8Iw=}8zPHvXCVetz zK)rcUdORMM!`4a46Uavk_qo?1A`iV4gO=#CW_?DGkKW(>C@orjT(oan?cSJsla!`M zDbb4K8hweiVlgt48iNAMcPUJdwk?aQqii4cfG)0*ux;HAuf<6YZYF ze=yH9i`^%r8y-Owxes5w%{YA^5fIvUvd{3v-ZztwM>pX#ALqh9bV~e%zD{^)e=~mo zPs^3CKqoj(tZxVtz98`{>PMZIq?;Fm#2UP4`-Mv}A9d$w16ygf!toMyT65N)66xqVFRPMBVff05mvBYr=&Ctc{S>J-7z5!)j0C_sx(S67 z294|KeiB#Eb=#~iLi5p6fYz3{z!%sbA^$jzq1am?ks5;ujUq_IDPP^ynTW&_Z}_0; z_B}?7MN>TQXG~xky(NhFUeEifksAgr8b8sk#iM0EYe6g764cy*vY&CiTUXM^@UZia zNt)0cyhl$L>~=ODf;q4ib~~;;aIX@Lh4d@p-k3``o2@Z96E^V8b{TICz;QAr!Wskj z015kF_*O0nWdDYPwvCH)8F8$vofhZfgp44KoZvZUIY^}QWCg@4cF?SGgl;4rDC+>X z{td`mDrTJFgOKbGTJ4@isd^g_|J(2nd{n-o&UuNkfO+h(iJv3ZtZ0Baa2W+1JykL2 zjA!&AOZsFuMmk5JmyyuXqbt(y$4)bbT^oUoJ&5@o;>V*x5E`Clyu%o1B5!%Vx`>jh zkJ|oGr;1a~A2PsaroF%z4XxM)3t*zhjB?k(3Ipf88NZ^B5?(vpDFpS{i1Q;@02c~C zEfydc{6G$l?V?l&Ig4e~>1=U6Sv)GYjQ*PtXFroSitZYBrlOYIVZaNmsLz03e-TiG`&IB5 zm(aF^IER@6CH5v3T&qG~A@I>tE6g%+iX6YoKS!cwbw0cHmd@>9uVx8lKs!^Hk{u&H z>BA0&Ay0;&;Q(Bf8-z43XTS$*9Sv8TO8`4Lv)x&R8U5OnGcju?x3dqiA~4dydkBA9AT5KCmnm`|#( z@3OG6)%XB!Fg4&OU0GO6gqEOf+{v)SMBw^7YO~?}BF(MaYZ1`F_^@$n*;)Jsw>BK(u6$(Kq}8IL0}RO1eN%|$WX0G9rkamoeZiL_uQN! zJ20bKHV|Lum5?&0J88gv1FqJ7T;0}$+&Q~RA$B?|mq8_PfjDK?GqB%iQg247EYFpb z1vgqG*$6V22?xn5_xz}bVpEw$?!*Ev#E#c#D!Z974j2Pm>g1MIunr%4@qpD+@d8UX ze*9N?n`zpCjZdu#Cbcncx&@wE=RBu$VX9kh{>EN7u;uAGNd1oI)owLCGi+P%O8bNx z-zk2;@TpC~ytX9YD6WSX;NX{=`Md+_PvZ)tv{l{hwC0NsV4f1ROA8W6x6U1qeCl6t zRQrwl>Aa8HuUw`!KRs4pu|4JS4`p&?$Y^cx&o6pKQ^3`uSS?p z9(F|xXW+>JG-;=HeICc-_}O8Vr>6>3wJqI`<@f4>Rb2Y%{(^YzS$B;*8|_$U!Oli4 z;J8c`4@VSG-MBiS6E7Mj7KCYcx(DRdYKv5DVs;mJxa!+htz()Nv^(pYRc&P6DrhI^ zTUV(uj~BGN=v!9VFsBOIUG<4oYnW>b^qr|!jjObnnFac!t5#LAOpgM6m#dqqOquNk z`mR@Ps@5{~3$8j}HLcQTUM;vvy1J!Gg?YH(s>@Z2sx8d1f~&4q?W#nXDg}p~ubNcp zGS3$rCSBcJrNG=%aMNxv4!%R07ukq#VK4ji|)J^WA~pZkLO(F zCf9ff682%}4jktUcpDss$jNPc)Anz!an*4$F5n#`{Owgqf zLJV2GjB4CF2lylawX=}bEE*#fC5f-g*(E$F#j-@7(Nb{Qn6qn5jW&DliW53PwPqvR zTHu8Cw@*;4(F)OFwKJgh>maE8US<4=x`wC173Pdxk~J3WbjB$Z@?*}+H8naR8(4oaj-uXZ{p$2%?#tCR_z(iCg8{dVwIETI z1HSjByS*?oFWNWhip*pSBL}|12SY3=zRI66bYA1x_>tmo=ilgMr zi2y$TGXt(8;3*mR*F@<6CI2Vm2vT|-#Ckg!fp|*FoPmHG{l#Tp`kW9um+=8@sR=g_ z==YVQB-#F~qYNUBn>8oNKFv~RSfe4=PU=m$uNZ}8FXxDMDBNQG}2A*#i+rMH{uqkY2dIY^UgZ3{3C7~^8B@KIPS^5BZ}1i;7haffw?@-0$)_Z3ffb=~l0K)b(|;U=2LR zv~`Qm|BCzMx+Uo(3P4gPAVn!o3+nG>n8bXp;})6#8I6Jok3RxJUs$gD5Yx;pEWZP{ zbY=$I9m|yDYoDp$eg6Ned-lpLS-lw#mgi?}yYp`Iu~Vt}ABI1+Rr4uRq0NNjhQqyW z)ys0{f4iLlI~5ibh|g##IvM8dTk}ABYS-SjpYyij5eJIugN;+x0=e@}dy3)%t>Zew z?VyO>=|I5(cY3w$&%A5+7xuqo?2~+8F_qqSDv#*+%b9&L59~npoSUzzWeNM<0}}}2 z{HN{rJfaK2TT7yru?Aszm3oBAE0C0XCI3Z(57rKK6_Nurmh&D z?~&UpYE$^eXAco*7VB4RcZ6!OhKGF7EZNS!D$`f$=Pe#mMd$VI`W(KT!0;7&i!XYp z_r+)I@+SLvs?yIm4?IMSRW5IGIF#AF?yXzVl+tT1`zcrM#i?E74)P_fZ*ch;10`-om(*+z%mnYY&cu(=)4+u-A0aouru_AOE5 z%PqmHWy-wWQm?-vA$`iWeNWLTJz^P$aZBR|p>|TyHoXhvU(0@Ud6l*@Jt9kN{;Q?P zNiUsDahg|uD^o-ya~%bHrBZuTQ9aqKti*X%c8BSZdBMxpOfysL3Iu}2hI z%NEW@=?fBqqVhKKg>p*fYqh%~aL3QT@&@^Audm+!99SkgEvbEx6sV|?azoc8*;67Q zu-Q?0jr;=HcNbnb)nL6|68*BbXWXaWb^n=%(t?Qc@@V={;*{B#LeGuLH$K$ms`95w zYoF+f&yIg*KNLG<^nD`bW(p?Kh|2oQ+~ftqSRjzExfL2twmA!yV-h`umAtY`j<(rx zqF*+SZSJ9xc}}*uajU;*jp-oU-})L+rS6;zf8S+V_Ji|p^q-UsB=`7(*7{aCXsy*h z$=})8b-e7Y^KYp?seUrQV-p_RHC6uBbwiRr>IQ00@SPW3nPrcYfq^C82?=lR@+dp& z94~o8ZqK1Rrr{Bn&$`5m-B8;TduJ_7o;#ec(fyS_+1}9yC^j+4U;c*5o>O;J!VS#3 z4wwH)T14HDe(f55s%xzLPuC+!UrqKn-64gSmYI`|(EgIUp$yCC?_GP!kX|A=S_^*Z zqW`M&$?Q&NSDpP{utFbIetjJFPyezT&U;gTRXHk!#NLB{2rFA?or_@lyc_=EIe+>* zYWrIBPImZ(=N6ZbI=spJRq7MrPH7j#0dctCr({wsh%+yxeYJj#4X0KBzbd>^X{KJj zXm6eIRp#~jJAZ_SJ@2Tv=(MQ#iHKN5_*qdMywfjf*b2pwW;|DbRuD<6f=K#RSD*t` z-c~HmYi8f*gRVfQ&Xh}v-y_VD<%%S#`eSjxStBYGU5wHK)E*1Rxx*UDZ!a6Aa4q6? z&qP1x1Fh9bTth)}`D|CeQ#Fliw;=Wp(5eSSYuwQp8Hg)W=>dw5HR2LyL`Sig`Eg~g zL|o{M?&!9z3*}U342t-gA(g^D-l{|=p4yV6zy!^2D)VGl1kl&IULa>5@P9l(I?WS> zQu6rode^`+b<#^>GuW;dmm}=^8FdohCswK>PkBjk=F_P4^XQ6k$Np@=#A-LQG%EI7 zrh=DA5nnQ1h#0NE%uD7H76M0IpXXKxCRWP@iJ3xJME^Ch3P9Fe%IYPp1s&v$qn{qN zg6IU~?HZvhxb@_U zknOBWI$0UI$@&KtZbzV#ulMJHoVNNks2Zh$kmrQHA10;7Q?K+mEw)RhJbfWJh94{lxbO?^@kF~M?*@Q<`jpB&|X$FHVoNE zZM>fqB{HPnVxILu$?pAz!xr1DMI{+yjS!p0n5;?Rq4h0hStCkD#tr{% zM+E`3DhQ}wnFKZ@$eW2B^m?|h_yHuApQW5rG{YXG00b*yA{ngE0?lP{SWqKE6q+}t z?N$>&u)FRVZw>ybWn;>`1>~5cjeiUNsr7o&yx~EYXC45*_BUOp&D*^bTZu4VPu`8W ztpL4c8Iun|6#8z(6$};|YQg#uoN@<4S1?#gCQ@JK7eFjDxf0~nT#~l3$nGw_Z88$n z(OieJ zcHFqWb>Eo>(jcS8n!E@-_N15bK;neiJB4RAir*Mh8#&6;ir z$&Fn-t@Ta^i96t9K%HMBdHv+B_cf+LKd{>AXO%Zd`ukr;Zr%!hoOMQd}i&T!;iF?AmzM=c319*@?Xb+jr9+@ z!P=90SLKKl@}VC75v)X->zW1B>)l-+Zc?5sppV%8C3-!3*M*xFp+_5DXWo_iK)7C7 zLuq)O^IsazuX9hW`k)Eb=JcD=p-X83(v=#rlzK||gWg{z*N1jdLoYtrk^!VEKlU7U zvm@kU6YQ?U>(jdwZyJW|r#3#!`adL{Z}N-Iaamu4Kdk@D?E1(qqniz0=@&Jug`hX& zxl(qfNLZ_W{S7?PfejS-@1Sg86F>1R0A<&_6seI6R&1fDL)lsNWkd+S?7Uy?k??8v zkGt;Os!U{am65l=1@Q_cHg4oU9*!Wdn?LRuaOsPo^l4;gRvsH^1{-0*z zD?#4Pm(pz2<3+!Ee%$@?cFoB5QTVIlN0*mpYKTo-wMEH~Ixn}@Ai+khT-kV$uO1(F zyu4QPB1jS}add;w4KEM9)L&6k|B9$J`p8qOZ`QYPMHlye9KTuL8gS;Z^rF~DY|V?% zh$nrF#}e^oUll&yc=_hrxclj)_08yz@y5RF$71nDU+q3Fy%f7C6T-`ctH;J)BVN{r z@{*SbUjx5ur z*7Zq#s4FP1;F1?nnFF=S)4E>dk`SxrD35_6R;=U|Ij=({rdAO{Ma__pR`ZH2S!*@U z-p;C``zgZ;tZy|wl#t{nZ*)b)>r{z~m3h?R!Jd|R)D>w!W0ytKhmrt|<%^~Pja?B< zcU(a-Y5@f;pv?5WGg9i5Jy ztKN@bD>NIV?N#Grw7VfEy>;-X7K4;Ui(|XNH@(u9HazCi>jC&|f71<`U|Zf1b#2hU z^+xhu%squ;M|))eqovTlN2IYs0&%p&F@8jvkI};Wqyg<~_CJTDiA_stvy!k7ZH+<( z4O^FFqeVV@^zOKSE$Rhg-@<>1MAo+mpxW`s`quqt9!bxN^FFL#N^X6V^6tBrPH-7c3)@L2W{3{&sWol2xyq`23_<{8s9Z@!t4Dbge z_SWFzEJS@=9thau18-Tsr6Q{1=Cw94v6EASZ(BDc?L<|h0)hdF%^Y}~JgXZ(t__K4 zp7avGUa_0jFwJ zV)V=>4-fv?vWTjd?sHvHL?20-H3{G=qDu$9DWdzXAp7&Yw;=OAWJh>~?4{pR0x-67 zvhK-V+C8}l<-X(KoAw{L!P=X8PbESM+201Qkd@WBZh2(B8}ng;KQc$y_KCuVaACq? z=xD>6%zIMfgxbivOhJw$&Fq$uGv>Dh)*x2&06d?g}))})hed}xghzXnMU|(!nR2(PPPRA%t7_#>xxFkPgYJ+!rsRmJqLgIMN zotwNp5Y|kUAgXeI17~w!167_VM)Bh8n|m-B*wmR)s!06SmzEqxi*r@yBG`Ng zHc+iznBop2G(RhCl)|$B_BDFqw?U+}I*Dfp?5oGz*~$Kx5 zCSM@2?eL|jdZNCCCkh20bOjNA{0Ig(Nh;Xxn2dYRr=1iHK!y%ffa0I4ECnmj2%^{YyR(M=? zyLP3s&pGHm>o0eo&l;7fIGm!X2%AeBM)&B><&{Z8`1zCs+&CtL+fSGXWX+|hZ?fiw zD+t#a&i4amv`&dS&0UT+i-MFJj?;`J{887nce&g=A0&nR^o)PL&m1^Hix98Vnadf7 zr`;9)AWqSo%MY?`5T#`cUl6yz{D^z$aWi{>Kr5A?;9h#&ObH@17}EY0hHG82AMr1j zi_z7>>EhBD4r#)=0V}9KN74uM8cb+I!cdGjsMdswH^pJ9j*wN**+|+|BFIMH6W@ydNq3{u zoCRc~qX9hniA1<=KW7;1(&#}yE76a??l@-$Ud!cL^mPH&3RJ6%#0Nl!R`kuHbSy@o zZD%46*YbV9)%L{9@c?3G`Ku0?C ztr7^@kiaR36dCkr+(Ex4@dEW-0(}VSTJlw=t_L=$UYCUc>wUg36D#oo zb4;_>?S4k28SqLs=x@NE$vFr1%x@!k?>2y!j0Wu*m*`^RGO}Ec7{-M0UKuVNs}q-AsYZ^iSnE74yF>e`^Y(M2wiWu$gmC9XLkp3kfE9A&- zvNJ;E`iQEHnh8kPJ&t#Z!j-#@gA^J*2x;$e0jZf3()pZ!w9gzpQW3$Z(^<$Fjjy=t z{DDEyT*wc%?GmlXcD}%X%opyp$DQm^f&f{4?R6(5oX}-h@wan498rAHo z7Bsb&NHf-5SU^{oT)xM(shEqJTioG;$NGvtoWmF$vKR3%g%c~LofR2|viqr84?Rz& zj_P-rSA1}`WE_+ITkGMrlj);|UA7gA&N2)QSzE0*&l&pY`YyAI5oaR?&dasrl9f;t z2`I618MjekI+P3n{Q4>*5Jx#{B^Kqy-p6{75s2?_DnYEUQ51k*MKUDOin^4G_r)hw zSrM{|I)f(K|D5^KGu8%VoR|fx>Rg?B?2Ubc3KxsM}B%2Ztn*I+v zKfq}^Fi%~K5uNm8?`GZ382P^HPdc()SZ6Ybcy0;oUplO<83@{lz%7Uone^bl{4-vl zz6qp}nQk8(6&k9#0`7L4QBMfiTAMQ`#>Qs6z(i>Fxj})!Y*K-JgZ1XyBL9hH&4`vA z*MeJM>2RmZj=jVZW5~$zJOrKa2v$7?VycA6!0*9u@I^?l3t2o=sg~WggtWPhlbhMp z4BoN`8s>gvQylyT&7lbwoYa2rZkl&M`>8XG>yqyN1&G_N{94a~i@?|JbU&UqtPNf4 z3&Z9GFlK)*gELX?!38fs_FU^QrRz>E2!SBDM_!S3>={82+!XlQBAwWDrkZ5y+oQ^S;TS zpI$*uY=d{puvtN;d!6QP$6G}Ql%F04mexP-y7q3DTjvi*A>x0+XU+M{;UfhRZgo0> z-uGSY4{j9A`TPU6Pelu|wJ*3?6#j^N<#8)}m{3saPQf8d&E87XYVCA4=|T?a`%-_L zKCJiDq+m#!T3DjF*&T@3^#y-uhq-kWl;GzPnC_>w6(R7tPwRo_@zi1cr{)D8v@P9^ z74&L7*mgX9*zl=s!J@W|n?`|+R;=d~eR%y-vw{(ABR2U^_AOWPni05x;^&L7pp2^9?x&zHfHV{>-JXXZ0>f7uZWwx_72AOVBhLOeaA5= z--rTzkE=>mY^Fz^zWbPg@6T>$b$6uoyn*pQE`9rE-?#2NG`|>DWis{iuX>Kz`tERh z>^&yryTg44e#gb_QoiQye`@Wx(38#_%UfV<->>HT#qCeRpGiHff(rp-7~gDnbKIXr z+s%AS3lO!3etVHGfBC4|ZaXYp^?>BDE%CGS z*S`2p_T%{R_`tnC|0snoLh0WgTbO%yJtn@b?iV$`$X8XnCpv+zDZ)L`bxf}64`xT+maSuIRnttvyoYXM@xH{oh5R0G zreXd=&#|>t*O(ODQ`tSId@bFU9LIJ-K5U6Jrcm{U`8jXlV$XixS+~FWZYZKVD4|wY zr8711<2=VCs;+<=%Kw`jN_mZVC+>iK8zXO7vOR*nrB#~*DQ*|2b^nv%78JOR@WW1R zxjw4|lI@+S02jS1AK`Mn#v|g@%Q0?I;%3aL8V~uck#GDMl>Vrty(Dh7T(< zChUM{mO<&_6BsK*b1uq`RGc#*0j+K`l$}#?hOy+}38dvKc?je!oy zD%SiDT1HF5QDBbNW1D~wfPkuZFIVZ|CXk0ZjtMp}>QMe6H~#C*M& z``jMnPiek&iBn#W^`$V^xQXPi#XY9Y==%mUwcK3t1DxX2tCW1Bn3j3S^EW=xd;6T@ zBoD3Xwr4uHrR1k+O1Y?{ZBjcV-0j9ByIsz2(ad&HNuROkwssrJ?{hhyG^5e&4EGCk zafwNrlmP%<@5awLC(>t3x=+Gw0y~%U$#8GLleyci6py6$`D$4G!wVl$?~Y?ixvAz` z;Es}B)9%P0Qtdv?RClw^KaKlDdYy7d5ujj2w?Hla#egEjpb+v4-9QLS|&KAw{ElEX&%eBRd!hrHYAt3y3BoYIz_Cxgd2*kvZH z6BwYY^Xf@lQGkB$fnd7S(JnhdbbjO1=Hcl!#XKV|zHu7v4G?jGj&)fHBJ=tnn0}F0 zjqkVTip=jEzQ9L+9qY0a#O9-iAGOWqjpKRA9Kuv!n@k>7i|9zn;t0>LpXzVpY4Xl+ zu-;QGl}77@%8Ln{JAJn^@$ohb{9Y0rAh|3ln6}ki)86CCUOvgpS?|h`tmpQoH8|+&1uKg-U_$x)C;_vkOG3|y+z|bUgagE z%_+wf-m1077D+;&xlVuq7nS<(OU(~x004&-9npJ1K32w|O>Jo3R@CpqCxIWN0Q$R3 z0(0%>F>j5E#Pnpy8s#=50RX(r0?*5Mzg5<+>?}WM|2yNngt^&ag`N@e?TWgj^HN`2 zdJv!6m*3g{o^f8%-14wSPi>{q<#$fM=k8f`SMxBgXQxk~i$T^N;k$ZcM=Gl?D>xbC zEQliE4Bv1hhwX!+UZ{*Hm$p}DY!N?YJcjBiuWa&3zno*Qp0Q=^sZC=_JvEg>KK-Ob zF)%Sds>Jy8J6&YJvaSuDX~Ja+V~fZs{jp78l_rud<}65zU8ywlAv#^m*dqDmM9-_r z6Fwsq9ZnZ>AFhJDi&jr_ulRUhzT{wgCQkZ`&6r5fnacjl+@uBk zn0F=OV{|#d;c@1I*_e6Hhe}Hys>71}7u~Ul%6mQ$m-`&RA8j~h+p}27FGVjXjtTXo zSLXU)FWWgJX2PUStmIX2)4dngN!=NF{?BawdOCb}SAhL*X3?Q(K`C0Ew1MU?2a`H1=;iXR@j}RrHNL0B{=y21(TJ2iS<@oo^5YZ>jZgdUNQ94< zZ*z{vLMmA-ys*p8`2x*C{-_Gf<=D&HTo;AG5Um_uTK>E9h19Q`k=b{?8pz{6y`?tZ zaD9^mcat%%58g2d-`n+T`BB$5$-iQbD!x8;$2L5^>uWhb9sQbeM<{$fA3oNlW&<#c zdL0awF21{2-PJnztNiO1kb=JGEJ#87gVf;RLb8V2;O;Yimn zW&2$gl~-cR^<_($r!k)_1w8TRvZb7r>N4>;*LhL$)9TkwcU;4By95~Vw^p-ve46ya z2|;@~%#oj5UW%Q$K5A4J=0rs=>CAi_-TeGS#fW2P_9Zb}BiPpGpHE*_v^Qb|h%d>{ z?Ce@8E~|hly7~E;%k{}fc^3Q(pU048gt@v4dyx-vemIMJKo(&&h5H#nM&iXUsyNO`8=$m(~+l!Gz9u=6R)?2l^mF1#LkJV zMBvk3P{Y(ST=j+ZGk=VRJ@2e2bs{cL+I$H#kHN((=*;{! zy7PH;1uu&twX|hHY9{bG)dj9|t1cMKycvytPIaw6Ly=jsTfmM|D|o5gRZF-9{7mbp z_w&*UUN%=|p?;KC?oDi3HMBWvoszPNY4CxTHrk{Otm2CNRh%&?OFEsUrnK1v(g!VV zDfx;+KV-p8E|axEax6XiTSz!1+#tN_D1O(-q*)1uUeL|crM>O*>2b5a6c*ct%g6<$~- zi)g}aj7geA4WU~?moecM0Wr)o_P!KMn^!w1`YfyXoUvKx!G;742q;TJKsk^F6Zby> zWqvn#-t?f|GfuIHv1EusV}i)^j%SUeA-72m;CxLCEXEv_}$#Vt(!CsA=RVPeA^6Y1PCB&sfrX*DMuj75CMpn#hD`Gz#R(dhbl04HXlN>l-;L)2c8h_lHo@ zW7ke^dZ+yCcJYXDXK28aTE@KXJDFl)2$v3mI@5RZ&#n~{Lj#&>b7F;HxDGUl2m#1f za@yjZ`m=tM@sPfz+T3}uccsPDV7n&?jCt{ClXsYBSBj~j+?08vchuq?oj0GvNpBGH zCtdg4b*|=CkZtZ+`41uxBsL0xX0iH)Z#`muhB!`n1J<8%ea$YBnzg}?X*~9#YfcA$YI&Vpku9kVMiI5GQ+ z)L-t`BWmiJwxpg?`LOP<-Pcd-8mTc1+Rs|h-~+%ll*WhjQ_3IK0{dH9^Gopl)`!Vo zBw>!Wtf4eLaR5zzaejysy{a)CjU=#nHbg3E1Bi44CMBJ?v!=G5z9dYy4^5 zkI!E2zFFGZk-4@pMAEn2}4yE67_f4v7<<$o=*(=Qco8invZ%U^RLG91`gmz5~8s1I7@ z7dNXz`=4+{7I%KUz$bYd>#`HY7Nb8tdO3S@{M*UB+{{T%Y6|U(7HaΠgBnV9g2*<%^i*SKO34l2P}IYp%nu4`3JHj@pL>j*C~ zu?mf98LZ8omhOltiH_18s7*IRk0h43TVV%0Vb~2@+p)dmkQH_?AtvN4l{3H>4xdmP5$@Ot(cy%Y6S5+oq*^qDUCE7+}HAe1}tw_$q}m;QO5>2wCN2U+aMv# zhk75Rz=XRD^>UxgV@8Zh#GosuF=*2wV0o9ZUN|(4C>!4I96b2scg6(?OS5ANy(3Y# z*>y=5q-I@uk;vOa@1FdgaY543@|Z?%?R}%6cTKZtk#+l)m6a1dXK^d7p@V0$KBde-K%2o!evhqy_L_|M*g)GoiU3l3uQ-VgUJ zBdHBb^0T^t^)9D&m(*tsKil>$-lq<5GZq#9*XFL}XX1Sx8xDMn>tt$2CjJ>w`=(=d zPX;{sEp1k-Z)?n}?<1;_Oh7;_@~;uKZ$nHqTfSujZKoUztgxpJ%D2LS?;-{cd@r!$ z+iLGkAYXj=2fm@lDV7@0>6M5XAKb=@$41EZiNzEGk9&b;DIcK%<0*D%TkE3mxL>U@ z@VLLTE~L(GMqbXsv(72P$7pS0@~loDrB*0rJ@QitH$2l49i8>GXI7~Q zFP3wC&S)U4iHhdwa6Zm$o;blCY3$4{6(btKS~@>5J*4==h!H5x<7aRshZGx(GI=W8 z4|B~EXNKT7SMtz%Cvs`lM^l&wMO>sqhku*{L>HUOGvo?$W+w>j`dp#}Pl)prWN6+E zrI|!29-fmsd1Z)71JHFHr*k5V-Ps7ox%x-maGZMr<0oLYi0*bc&b1I3f)NwVxjff8 zkvmlSgtwM=1oXe&Y%0HJyPosMT-Zb>yA-xd=*(&f0=GN{55v{r{5H39qMFUiqDlc$ zEX4_gf^B^U@V5q>H*?Vw)YkelR2dj;v2#>5FBQ_fI4+*kI_Eu6%Ko0I^(Nwz1~v=g zw5Di&lXk)eMo>lm2u{Q;CcIe!J`m`(IpskOSr>*Bav9{rwa4L+T z5U9-_I3*ZC`!taQ^KcM}DI73Bn2)`27H@>dQCWl-BxnujeK8V!gktB3)eQ$g@B1H= zr%o|x0^QIm{D*`cZmuXu6rfu(iG%0_FXX5T|ICI;aKBkPu*xBmPwVPZF>2aY&XIg= zE}0f8+$!OPN^qGlZ?F_5NC+0s|AyJd3lQA7j1}H?rvyd!J}L6zfM|n}aJ_7=_FT3A zx3vbob_KVUp%EpxS~2z$c?0N%&}GVY8Mx(%dtX93&Zz~9HfGV!iJM^#;u0o$e=oMb-tMeu#Wf~#V$+~<<8Atgcqb-6v(|0SmXCMIa-Cx`CQJwA8?Vucm;ijOS4;}* zkbx2rvcS)tnXnjCZ|s*Cm+iyXdIR`XN~fajG!xwBpj|kKX}m(GVz^FoMuSwkcPB$L zE(g+8qzX^xa~Zc#w%*W*6@gByku0QS|LMf?^RRK}^sr<~#TsXkjJ4>;jx+kOG-^4! zWCY;BuFEgRS~8GJOYpbV2Wuk|@f^-*GZtOe&O;e}I_K?YG`gHCW;1lriT0b$0X4hc z*)QWi=tSokldh8$-V8gP^A14GdRFXqF2x}0RDIm|c3P3Oiq3(up9ov*i?sOAtq!#t zXjy5ry6zUolSQLS0#$7wI&s^KRF`{2L`EHci_6LLqwBhMSDbJj$uLCi*A|#@u^AMt zht4O@jjjcVwlw1x^nSuahZ#v25iK()_=kL&RvPfxWtw&&Wz@T(o}q!V)sAzXDHcGq zD?BaHyCRH*BD$6&TjAl0@iW$LMk%4ggR>^ef~}YlsMXjy)`Mh zFl~Wd<8C!*)mCBmCAN%axsff>>&8R?KG5)}LivLmtHWZjgj&&M0FRgVppxBbBlIgBm-9mClgCU~zUH30ZSi zFq*9lbJ~;l;A8T?*0X7rBEv|Q>dg_F%!L+fpjMq{Lh79UWGCwdqZ-q%$xWTx$-clx zWwq+IC8R@~^$}~9G5&3slVMuQ=moLJxvs#{MO-VUsN zy1n3#Ha0)O)AZsnroh|%U|s^rwD5q!(-8!V^WCEUigfGZ0kNlE1^cxhxqr?3sPoEo zO5`b`z348T$K*q|a8!dor;|V?tERJ=bi8C(_~}mVz`_J4kn`>>7Q50)}=Or=8E;KCFDmjp({X=zSK`EWg8Zi{$$e_b{EMHSd3925K+K zzW>NPk=NnAMe%(vb2_hM>%tG+^KK)A{YfVsx>Mci9T#?Vr@AZR_7}|@VFnWRXPu1d zj>torTD*0r4i9zT?_nM({Ke^^;rlq|hr(m_4{`5FOx40;jt|$rKghgLc+BCU&U=66 z-oj%}4-MX*X1*!>Z2u7d-iv8n_}TH{hWE#qj|x9KJS4miV8$1Io+i=;gjO-vtSTGW za4p$a-&)Jj=_V=|-55gG;omaBZFJq03^j0hST|zD@1Z{nEVTkLEx(!iT~`a1S{KN6OEmg9qe>kT6ikFdNGwmrIrME!yYx95 zwj{$y3ofyz6{}C`un_bK%{tngeux+A1uD=rL1-nY8jGIBy>s1|G^ZQlz;a|n;1oz3 zY2kAgf}-j;6je7S?~B{vxga}>o z-f2+pw8E~=!UO2Dt4&f2Y7zx906Yv)8ZI_zVBL;lm7=K*Hpwxv$iQnKT_p84ZyePU z9f9L!&Z)A;8C1cfNg`==d8Bx#?=k zcE$H*%+CBV+@BCZty&G3s#JcRv%CW#1D_1vi8IJ-EB1!zn!q zRqDR+Olddu{4Kasq%m5Le3hziG*iRPHa`ycg*2AZqgaLYr7~B$3FV98q(~~XO>&2n zx+9tR|4sB119R9m(s|k@`9mtOf+-`kK41Kf|JU7XL0VwNO?2zWFD2c~>h z|2}91@&&k>wl1Rc%EMv#W}0En9fI2G)QPrEe0>r}OORcC1$!1nd9&EmhPG<05oe0j z{HbBfyc4()Qb)>4e|1e;gqEVSA)TWDA0f5cBB*#p7sE7;^zkS`fVJO+A~T;j?A!Kp zKGEJVg@Zf3d-!!B3HgLt)thyp=Dt#k3Lfk($kZy2zze*o*6u z6EO1%Q`InV@p3p~Q%8rb+oJQwal8zUqF~SJccmn8Q1j@i&|zvm&xu0g$cYq%`CM}O z_qtVXlRLErwyoXdTd;1$Not=-%8Hz06+vq|OZF%)BF(S*d0l(D-VfyV@*>x&BwzH; zvK~Ja>FezvUoGG6T9rJ7Zg15yCm$~FA+{s+1*UbfZ?( zwet!;qdh{4boI88&zEmhJQ_q;4zP zt5;vaNfVfF?~y;3^}0MrhlXmP9`!OOUO6hSG`;^*JWPjtwg)ucArv*M1_A5 zq;}~GHe-^NMimELeos5E{zaz;A)hF#qd`X1tLKGJplhO#x#HntJvNoGiAmnpa!B=3<0=k2UdzpFv&9+fXbJ*Jh|il1Bz()VZxqN;qR z^jev}%Z;=>>UTxQT!9?rM^*Qze!=v315^5!%hEa+yy7aqkn8P_CN1b3cIx@gfATA< z7s@PLj;8$sm!5s&yZ(P>OOY}|m;GrE)&4GS$I0IZhVIy$h-}*`t2iRBq;i>ex7J zUwx#;{j~eeI=BRATK)s+ zH`-S<*ujj-9y5NDH&ESk8c5Or(r?LM*MdBEb60>}{(*c+=} zUkDfJT3h}&)nDm``0F{nKBsuBfGCxD-d>i-@K;zNO69xs z%Xg5j(fq%Gq}cMrEPu=mg*`{_ct5vuxt8LuC?G`nK?R<;Zj|7j*BXvRPRI} zPp)|59MrqEl%FDfp#3F(Lv>H|9Syji7+3y<^daRh#T(c?)H|!gg}Ow`rAVqY3%R38 zuOsiE!|`3D@@$f7iiN^awbwC7sE{vt%fD2-pGb?+M`d0I+(``Yzr2+6EB4bWFas?c zc$XNb^qPh!Kx7994PN1(g_3MV$5#fS-s_G}{*Zc3phx75%ua>Wg z;j>*DWwy@o^sh>v0`Ksi^G7qWCFPm0F0-;Q=T7=1Wm`$u%{njFCvmmn{AYgTQ>Ttp zWm_>Qs#e4OMyk}(sTs@XC(1`i|H4m!ICVCna~0x(XS7Bm@R#}gDOWl!YDRWcr>oyZ zP*C+9{TT|X0HWdmL_Ln=_mLH>_@>>sZ8LjD?{*O#cyf=W0aK#pm&RCB|ca4|xGPsHY>u$d*HHnK_LNA00VyUq1$q8kJ8DDB{OUg&% zF{Fc88QyjAm*|)j_qH`IsR`bKpq(p70q{ybLK|WlgKi z;4`Kzdj)G+Z8ll%vQmrnH^x*EIMP`YkKm$~xmB0fwWK2#6#P^S1>4vPPAWX)m$e0O zQoE)(waXf$#4ICY6`04mP(vHCs!i$|;Dbb)g5MG0^-6vwi0gYFvcb6V*PxHhFViP& zTVz%&yDRHiu9B-sPB4car8X3n6=>`gRKns{Q*~DRB0jI-%(g9SFU(^rtmr+HWtpzP zpUbbEez)p^Ot*PXW=NvN&(pZHAwl6^?p(X{c^g>9j6#+ry3;z(5R(%@b+mbXfInXt z2eu{%t)x(6O{Rn2wQfwB*FEU)%&|BEDA2G?39)xx z&-NETGO2IsO?jYr0t+%-V$kPSo1|FOH0oV22<(U<8qGFo^O$#0&q__G4K~TKvPcjK z4}6; zLJa|pN>fBpbVSe*6a>LgVgX@}9U%!gh$0Xy1PI~TiHyf{pXa{b=fgW6=i^*+?flul zz1Dgvc~*WSEX2N>r}`EB6m{0S;bF4G=iN8f2B`)bwou5Kp z2r{UvU(y0(h1Ju~nm3|p*0%)bYJ+viiSAFt7s}T)cP8A>39xHO4*A~wDdUCeb=XeA zjnx674H6-;-5Nx5rAW1xG5=LErM;5@=jwkz_c93Tvv z<_KpyZxA*WhEc^{;%Isg!S7k$G&og(nm0P2J!~mmxX10gkrE(4M88|SLXQ)-oA*c1`-B%MIv<0Q}Sg;Ah_Nlk5Ik{u<$mt@bV&bFELi$)e4q-RqQwxe(#jhMyFDE!iL+0_(OXF2R5JPKJT; z4b~&n=t5tkXv?KOC|dd%;kRuXbW!C;J(%E@3zsB+9GkRxozO5HvP@o56)tWgJ@`{g z3X6~*VM4qTPh3)xERTq(?D~CwW7!sc6#?tp?$}1Kza>eJA1K$d6pU>pP=HjviXDC^ zpes@GUP0xlmh-V|n5|?1UD+2%u*?+Tl?DDvwQ7Af|KOFX0HK_Vb!U}!&#$Uo+m~&5 zAoekkaSV>Isov>9kF$+?LF7hze4(Y{-GF{J%`i(QmmyV()?h-e?ef4GbExZH_E!{mb}Z2)}12DnOvM83{H7`Fd-RHkIrm7=N)ynBoLT0Ft|!?vSpBNuvP5yt z8rFl%U264G!|z~;E?_f!kg-dvUJMu%6F9?Z0emJN#EpcRY=~NSJdeyMwitBeNCqZdi zZP;7j`t4p67r1@}OC*XG9RrTyIpg8z#P-pp^aRamx#4}SDMHjzm=c}i=rHZ*DWo~I z>EPDo8G+tca#@`h!P(4=p!bui)X_3vN$ekOKeeon-^n{FAS*iw>S#&6F}I#QP6xZ& z37*Bw&(7#C#1c@IbTiVj3OEz$BN(^W$FTpdSL*Qg0JC>D%ozeaobWeSDFbt5C65L?61$|{KZ10LDji|Lt zhSES~ns&o@fUj2=v)*-dzB;68IKn9=kRQoA}qhQE_{jQft0 zz?`O!WVUNA+wknTDV#YLp$N!+@jOwkBuAbF>qZlo;e20S7#Gcg^$6%o9+ZpX&=mZ^ z2~jfv{$?gXmsR-n+;-M-;j$$E7|({Az?o((lb2P6!rze|!YObo58;Oi8B8#WmaZa3 zNL3jy$p5(v6UCR3aH{jap*$3a##x5ZMSQpbb3rL#-ADJ>i6Q#TBfw zN&2VaS7`MmKzYtF|G0jE;upy+VoG=TJ4sdPrJmU!`pf8R@5Z$SgQJx!a{t(ZT7T+ z3Ti!wg3j#goRb(nMX-Ba>8Yb=VA!qPv z0>+vnp%tc3whoDu83k5ICmgJjI!IerE|eA9StU)-vvo|Q(x&?Sz~?Tc(!ka^@eGKz zC3VV>RHe-zK?bc(iKk~YSSLC)Nfy%45WYKClQm5uC=45b^MW>`BOERHp5Q(`ty7XD zFAam(8}Mi|=uQ;Lo2;9h^>KIgT8uh*6XbxwW2bLg179&_3J@ggoVS->74yYa zCyFF3Gmg}0)wP&+g@^2#rK$Su&i_5P7~6OpCB(#3&g9d2WS{s za-06b`Hz}li`0M!AW7Oe4WD}^3xz`KZyIIf@>b$7*LxHn~t?2`k(&y)ivx zyum`|N3j7MO=bWbix1s>^a=M}fc7^U(+*v76i$@;s#Aol<2Q=|G-i(cYoZJmSbi1k zkXc-Hb_98|LIk1@Q-01;2Hf-aL)#sA`msAf*ADQC`uKB}k{n|}s1t!N;GSSxoK3{00W zl+f}ErK8BSpeugJ)ul9*S#Ut6mT*-#^@ap)j|liN@@u}2w&lbbpD(8#)e_7dMvzt&KT zeAGFIO~v7gjBu(E!XI~~cpK`Rqj2&(O0`17A7uzyBSgRx!|aICt%00)3Sq88Uj zDMwnl#Z``pfd2p<2paAtWiRrcYh1;c1eiMm5$)6!0I>--MHxcgbDKpmf&qZYbB?PT zTg`B$x*>{ieB^x5m^8!R4_l>|c4mv{VOIbMox|Ox*t;#*PRP`lQ4b=Yxt_21h8(2f z;wfOfS$EiLknjo{j7rPcqIx)L(6%NC_qF(Ml!?QF!C}WiC$Q|O7??OMY(4Bd7z(n1 zDkxwnrGDEtIENiUnYipZ|4npoQw@xI25I89r}B=-VV6Pon$x)Jl$}VBF08mCG2vDN zD|w0d!(~qyu#9J4yZ~U7Qo8x40xe-gQcu*fk0FHbz)a;pjerHg!%MgxN+D9)&ARfq$OHx;O(nQmiWjoN)w<$1K?1~A zch}s;jZ^xN6>ip5$5&4{4Z76i;b;_7Bru$oH=ID~?M}cn$6Y&STY6eoCuWiNlCehVS3M*LF_;|1@pMEq#AH!^QZ*g$rBO z492{BpR&BlS0e&D32&&PuO=u;;P!s-B+;(%iG3QRqVl)>vD|ABiM38 zY%YBo!PkvFPghrrz?H*eE9v5js<^%S92B`7yVoE#lRkpDNo{szTaz^rQPgG^_ExeD zVv35TC}49C2*pj(nIv~7_{EY9*t3ZBid&_#NgkbWR*4jrghl8pZX_efTNI5H=deR4 z&M7(?p+n`;=mdmLapE?%G`SX0S)Ay_7AMoBbZeXw#r5o*BuKj;oAg_=R-njNkYNW} zSE^5_*f1thhSpTze~{J+2LNol{zeCL;`{th>k8V1N_bh180Gbo~>&laYhNeONu9{N|`|%w`FtJgeKG1 z=G5yS#H7k@goYlZug|H6x22y|-l!RRlCG6w1p#R**QXiavI`c9r;E^7<=!~(6dv4S z#ys{`p$*P?AH}3No$gyq=CL4+7rK{M0TBRn4(< zXimF;pHu`7Yy^`v0Nj82my_r+IjRsdJw6#I;SbP_0Y4e!(wdd1&5>Yx(gSmvAk(_T zF57h1UU+g=^#(RAf+oXR%XY5hMOlI0I02iMiSz(!JD>eGs=yfsDA3TXQiymbg)92X=e0)=JN zh1G}62JLH>u#yxxeQhV}{BQ6$@oP+!}5L488CW)zE};9VAEClG^1H6z7*2kV04 z5)Yzx$Af$1w zew6J9S)AJ@$~GFh#2-q~zpQtevQk-bp^_2U{^B6r2N($}Z7>~AfPER5 zlp*uxW7~Sq72novFXTzA?91`G zoX6PC-am@p={C7UWe@4x6OD5l^XjcAZqZF}naUc{z9$*yJr>mapm=d5`#t zv&mz!y_&@qdeN@K#8ze6x^;f?M|rYBd{a1b2aTomE*8t{!Z7v%owM6m6{ScQ=3<}4 z+dOO5+f(eVyPV6@1UhH`-gZE1rfSTuo!vba-#cDxrW=fDBMI?MT5-MZazU!{yvFQ_ zG0k3!;%L1Q*S3sQRjYIwOU4)Bfbnwn(i?GZE8?x1hk@qnvY_rNHNSBdI#%1;PpN{p zJK)J8?$)Kdd2=fk9 zT7PPf8^sP7J>FFML6~!G6al;UX~XM2J1^aE+?_XT|5(xxR-H9e)^sMDMLM)3p2kGGb7F|_eHSv~3Wrl3*sgC;1nwmHx1e2^@CV7Tb> zcUIq4)e+%EJ{lZYklx;^P(TNJXSBgZ8+}J zcWJM~y_`7d58kEiKBkxUI?ii;Sohex^s}LbPgM1g)4hT?$q%OPBD6p@IC9C(0n?uj&e?MeQ&0zqG+NMJHE((SM7) zgC5{Jwd9`^{}O%Y`k`0PZ(e%u&_X^b^JVK>?K>@pqy_UZ!UwTOW6zo|I&ahNNFG`S zGq6B9{EMAT$@-!7Mf|PD@#lYCY$pm7#0%FystYv3KUd+;AEPfsxb$aLYX4FY(;CJ6 z{MSZTw`cx7%o4s1jJO7$YEwvqfCee@qsM?i3QUk(+V@TQUScWLvt{s93Pxn%sUe&E%`dbg2NZICqR!ohDQ9|H%PE=IeJq_;uSR2QPa z=sR*jh(-!X$Z406>^9iass+by&L6Y=KuvX7dP(Z%{CjDch}T*Y6Arpn7<4Az2B46& z1N|4OT+rEgoh6Y4mv0_IHWIJCv<57^|1ksqTz{do`j37HN8Gn9-;@^YzAb)~f4=Mp zimYa!y;}4fb_wlB$mOqHvRaV&MpN5g^C(dqZs#fiT*8||TeFI#;hSAmgp)7rYJpFv z)Ud!AywMd(v)|&ANVum4q^@DD1r4jh^t$!)yVN{3oC#h3D4`b>ZIb^^En&k{D1!Fn zlOH0Cs&-h-C_hDQZllhAUIt($gY%a+=!DpIClWbIqw3x9`KoGW8-Wmbe$Bz;r)$sF zgD=5US?~=1;M4VI>%-d8&na)#Jb3b{)>*5K@gaYAKmDIV;Pph>I~QMb`4x+=>_*KH zAup+O(_4q;w$(43kgEAh)BDdl`&IjC!p2?u+p_N|#w-7Q&b_@{)^F8-v^Av)bWU&vP!*mm7E7KQNh=VidQ3q9K|fFu>aDhc=6|C)CBSBbwpp9Y?7+Bm&`xNF;fTA8{(!fE4Q8~o4CZI}+Tf5?*rPe9wxE(10JbX3K@ z8vT|}l>=U1K|D36>v7I^jhzNJo(Al`71Wa~YHUo4ul5&wEPghjIZ=J=<$rZkoo{7@ z%08ksmH3%s05mBA-h$@cQVBEZ*pvI`+DI!vQBH^c@i19F68Uo7jTZrtw_b)mDEhwo zWp;pI-~BEP{Jm8nX@%d#!JHcm;71xQ$6F`rOUHu5=RjfhbYXR**-QHyO97I%zA@O%76qnD(rp7{k+q{a4UikdO76st(9=9{7dH>ga-bjU(94g zKz~Ef{s(jk8*MPcPJpGhJ+}g~XucxkZ7*DsSXpZ0_m9*2GAlG~)l*Vg3M-y1ad3+=iFKLTl#5%4z* zRTcmp|NoeE7mrPfzm{oG4KeEuB0f+`QU4JKB)}tGLFr36zs$PzU3l1{C~*D?Ak9VS zq&M*J5`-dNvxfFgzDA1nkK{?&*P0C$A<^B##0SbLnmj6~dUp zJveAG?e$`V{C*hSo&*xjZj)8FiuS|0?6a0O|1f*q)8M^-Id@6(2X4||DB4ZaSX}#K z_hkI*@dmT~!Sptg(7a1)s8`#+T#%-`sPW^(q~>djhUk!y?zW6HRhx90F2@hyK=*p& z6*BUut!Qc0A`BE+mj&%rsl|;ypp&()`)^f+wLip@MZK)ccf|~jhCfVFM#1|cEziYl z8V&DA(gq}^`Wf&cIPO{AL|fAK%^m7q6{J#CErZ#qnP1KOtjoV!YQ}73AMJdTe_K4lxNmFu z7fYL%lkCaPHwCvP$2CDawe8Wo&bVax1IxvjAER0it#aa}#y9j8`BFC~$dCmWe5Z6nD zX8Tp}4Oo&@(s?giINYKEn<<=aA$?)xC`<3yN|tR;Qu}}S;o@eQ0(EqX8(tPfMZ@?))VbZi9J{itUv8qf{`aV*NT7vYH z-_U{PC$S?PX{ul*O=&ic-Nm}uy)UChWiAbnnP~cw)Lht*cMQ5~NwCkF#kA9x*33oH z>YBXuA}yLn*!b*4J5WtciJfEpwxGgd37vMt6s0+}ss846rcRGt`l2!5D^aoDEPmml zl5G3qr_KvAy|GTw1F%#4wD6LNK04z*B>pHJ}>wNoRMJ5c53EZh(#L?Z=e~L3%&tIO&)?j^rfOV4lA}^PJA+R z24I+Tro(Gm=Vo@Y|L6=XXp)FFp)EIqZ@}SKG!urO9wB;WMK}xl-6E^k`X~|2ULvi? zV+F!lo5BQ<>0PZOGhXb9&PDBM`Ck@Uo1%o(K;wjLMRWL_E%^!J)6uQh6JO2T9DV<= zg`6NWy>(c-wIxyd|5kCO)q#d94iTggv}UD}x(wD+p_ld_2s0&XPHS3x*dul3FIGEI zV5j9@2WeDbp#3?fe&$94O>KWxl{Q+EcFfOL!}m7!EOuQPXb z)n^53w@a){p`V$rx&#Yo`)a&1&lMf( zo-%iuRZkDjY}X*j^7ruOzz7SLNdc@Wm{^xL^ZGgM0MA@D=GAjvvFdw9PPIb-(sqz% z!VTm!v7&oM(%Yc~Rels$N=KMNKy!|ZW=?mFWVgeXSMeQr&fIJc!H2#qy)5-}GaX$f z610}Zg!^a}9i6#s1Axq0PCv7%3!P2SSr*~D@H~WsCP9694H!&!aq3yYJ?-hjRrTkX z3Z+rz1s|2XEj%T@9dD56yjOKszABOJY4zcmr-G z)3QUF7%Yv4TjFAJnF&O+lou2*@g6aSOxq4|VxAaHijUytF*kK66WgV4D(;0hd&$LQ zFbz6Pi0{M_q^1-RG~Z9&Dg-SN+C%t^vq+&{HpjE4H)w{O?9?Jz zNdq{@;OYOA)2??4D7~c?65FXrLP`T#h&Hg(7e#w8=`ABAKs*IzS(>VwA0C@p_RAdm z&mcOZ-I*Z0OQFrJnHrlDmcfC0mK=E1d{BE83~qWCop15Pb&-~w<*x@>%ixv^j}i`q&cZ+sJ$*Pdq$7d zPFjZ8>w|ZdyAWGTwRY3FPF%u#^v6sgX{8CK&J#u0rk7ejZ$&C$nYgnq)wU84NqMo~H3Vgg25x+Eh5%1_4BDku0wO zL)c?d&vM-WI##3rLjqoGGsleHL-tl!cIRnwaBP2}^)>Z8cP(c(JDxsHHd6>jv|)Gx z4J?gZudwWydYY@jIlWd9HXY60y1X>9$QWj90ie$4$nJqlnuj zPaQX*7<&=%B~P6Mr{;|St<$qmOw1I8XiWXTQZMpH&I;&aJShekbyD`EsOufpg? zlu?elH>xxKMg&rh;u@71FA?u3M?D&~89xvqm2^N3f}y>4-K3|WK)bqEu;nPGxxq7J#n*)Sd; zw5g`Jq8jf_y6V(?Y&W6=@fY?Ab{K8~Kl~l5>HIceu)BC`&&9Py~rzV@TWn(_%-2ffx;bD#3botAvg8%KD%ymnAhbcd*D4{N0T!CZ61P?o;a zRmzTa@Uo|kZoAdLH0Dw#?Q)-nm*gry-oQ7fOhe`-)A|qQsp6gc9@ISom(#DGJ zwHlibKds(a)-Arpv?dl(kau{mQx&>aeX#m{mdT;TsnksNL%{`kyDB z={};-Kag12Ewkn2^TgtAk1a0;6VG)UZ+SV8c)B}s3*qHoi519%&?4@(>7 z+HQ5?W~B(X@`{*~-RfDlW%_Pfwy-7(Z%g*YltV02*!gtz%*`4RX5|lJe{{T2jab`< zw_F_6Iu%dQ?Q^u09MvMm8}@|&&yHM=mB=`@{8CI|x0OVM77*@)#TGuY(is;khsJt! zTB(mKmHWqfJrX>^9Y0>aIi`7){cNl|P9QJk-6XMTl74r)((`dy{@|&G?b>$e5d5_vFTt z%Qa)7==Y?@50(eUM0MSh9Y0xa6Qjaf-+d1{ZVI0DCX5bc#GCb{Si2nA zM#d6?x|75swEM1G*0XN(2>uQ(7s!Z`G{={Xhr5#Gfo4cPW-Bu_NBG#eikX`GRlUzu zn24EI{PnhZ+@^dwR#1Lf3B3saQXPq1aR9Z)@;ly;zMAzBEM>JMd%8F=spYFsbaG5+ zxtJ`fixCr7E>cUs7So|j+oK0sw1JPzV?6iDyz2gA^hf8Hf_IWlW>W{7mtq!2qY7KZ zr&bM_#5Q$m=d_qlZEb$Xmg{^kmyj}~9V0m^*P)%;0-y3~wi%Us^j9q zpu(0_b8Ch&n|HB;GE>Z_2gX^z zMRiJXs3mr~{jP z?dygjVye3K6)b8^eQh>l-t0(&falnM0>e@p5hP-EfWP!#jkeLA-vwXK5<~K_=*}fI z;mc|CqxU(BR#U3Y!EAiyqWRQsf0Cowd=fAmnKiew`B{rLQ?O2<(Dz9G^&2qBG|t{hf4lL~BT53-e2EljiVLVhU5XM>D+%1zhmH ziI+G(I^StV!&=ig-OMl9P3Ym(iIQw>Qo@E|y~J#`c9w+-VLGN2K2u1ySu=g8HEgDv zRnTLjGHuy9%JF(=1DQs&mTk@3Ugn2lftxn z>-CwN-7N%(={>EVXKwbite$plEt`qzZV{i}+4^oKs;5OX8ZsQ(YQvf83?wF44BI8n zvEOGWpoc{hJvch_z^pli;YW!@OuO7Uwc*i3Z>Al2P6_mEYFBzTb8ClhCtl}NK1$J< z7H>6AG-E#?HK|M=Xx%mQlJy{WPGdN^^_3B4_+bik+N8CKGu)A)3OYM;9Q%jwPR;2J z3&c=q#5tqkh(t|}eGkp?FMnmUTWi&f@D;Y;{sG^!C_3%k+CIbYUX+Z64!0*Rv&?6- zY*qUoedUO>DwuWVaTHsX%pN`AtZ7xO@01LtwO9C=5ZY0A*^!499FtVd_QDaFb_+a= z*TyYl%{`hfYPaI6a7AZ;Lu3s>m;aLcjv1YYmLk~jzHkyA!t&8#1Very*M>Enk6ueq z9StU;B?+ed%Ul|(|4~&D z!HO@!GoDdp2a^fPe8LOvD`s#WL7V@bYr!1J0XGoOxJ}HFT!JS53pasj))|~nK=Jo+ zJ!Yo6+a;HSc#AXBJ%m*RBcS1aG6U-*s4YWyZXDPnaPuGyK3l6ggA13p@YnE8bFa@- zbr4ht<|_}|+a;D=z~k3f?Dl+c`CttMSiz5i2}QssCCCG{XD)B$+i<7Z?b*WkkLC=T zzAUvI#`B&*cP+0a!1?3cU?zdQtjvG)`+dl=z)#iBZD%g$0v**fm%#k>7(BXjS#=rB zlW5DBW~XrN@uy&HH||C}v5FnRwZf+dvv-Lph~`|7rY&H={|HwhYGMZIF8iVXl1_$z zoT&42+WyT%yx5ZTR@7_a{#6}k!~!8}5wFkh*CZa3mVg{}yJgoQCzc_drLY$Hx_Cc| zSRtJSnRL2k+z}<#0-bc+P`+QRqf!hm?Fz{^c%8RDnwTc_1F7bG3)aCGlT^^c#wc`j zh-E8ixyPt=1UM5PNf+u`QkjOtOVWjUYHk}UnE}L6sX~-xIuk=Ik@7OI%w%pS{v~Cg zunl2Z!CXt+EZwJXS+-xX!%A#ivD_`jo~C=;Pl+HSWr}FdVTKYtr2bZTifk@rZXza$ zeU&yv1vtcrcQ_G^rElstpJ!?iBc*S`n=6?TL`~@^{pNE_6=I-t6uh~DDMxe>%afi$ zH0SM??szXYr!eFZ1M654lUG=eOr(G!kh7RP)YfUnup>;Y2x{v%gXr)Vdm>$F5a4)= zK;5t0v01EN@rFTSAu|aGzFsN_1YaF{h&1USy#TkFbsdpnpQVFPi5W~!Vw2RcL1H#@ zA8}4<7{xucU$i4z3+Lir|(rWk7$ZO`m(7sY#5MZi90xnUX}9G+v*3 zj;SiVz~NRff9kZjWlR)|=qa|W$a8zH8zZ$>r05|^O3I0tqicYb@+0Q!q70?niMa|+ z5ZY5C@C9J*l<^#KN9tIob%>MD0A7RgC zc~%=KOll53R5i1zQ&d`B-}dZ`LZ`E|JY36zkZ8$*klYk?ToSjiHj+lAdZ0QUiCQcU z38hepO;lttNVN);?ui;KF`((Hg;qKy8nAYgB7m>UHhX4o=U1tIRQWc`%$RkoEx^~c zSqk7<`sJR9t67;ORY=gbL}`{*=RFclG04@jD8`=kfg~eUue%qUh-B>`?ScjooD)r0 zCrGcL!w!jXmM6&qI_#8a%sNJDf(|=2=frGeRge-Orh4GlK&LZBdKwOn+|`|zN%D%O zpnWhCB6tLdOwFH(?L91=>8gI;=$!Od(2_N11_l7D=P^c%{HTRzRwP z;vKn2)-F;o^tWp$E}Z2J)M0!lt}*MkKoK~@oSVrr!JW%enk2c49v>kKq}3rh}fLZ%$e*ZB4*x2?3iXYs2CqxV z_aP@xpBzDH+BIC^97d(sb35vj%fHHiD|PqF8{?aM^PH zkXiKu@((@0@vj}gV-}&>4##x|95IqmZKvag10k3&vK-2q_z_!uDW}lDI_r?uKw@%5Ogt8tidg$j@3Is@~V67m%V zPvm*mEft3(2DTA^sq8k{RQEpRqkeTB*;Mbm^A_4izv?GBe?y+3?w220J)n${A>TyY z&;59$Ix^=b@_ymR_1s_jV+vKP~ObqUqd^D{_ViKV5osXLh zq+#Zub`Ez+KRQ+)z{o@FwtbTtxP&Q!*m->u8z{keLrhSFF#mnE3e)Ly|GK8jY$Vql6w0~-oc zrI_Y=r}$%hwOLLZ;y(*bupB&Mf&4L|I{4?6TS7HDhmTmlkO#Wdgq*FAC68|~-;7?p zII^vNm7(q$vVQehLp^u$rt0#my6ed6LUUYb8?S)hi4?_GIkKT8AP7qSOn;D*0-e*F z@@Q3$1)rz%GHA3Ta142{|HzS4jP`7m<=mxbFRjd5)-}I#q>)#ZqR9$RtsRnTvRO58!iF>nP`qY!aj$)pY5C@kF?Jx zB(CSM=xz!yT&fahfDUfH;5y!^>p8LX9%z+Asy+utM?tHcQrB?~gGZq##VW5<3C=ls z1f+$CLZv_Em|SR!nTQ(0<)YoNZp>R*pDbRWTTox)FGt;&a9ogWXfrIkxP1 zIt^;3+eS>(#hQ)M}S(qBP>y;DUw1#}C@$hK4&&L8w9$cR^}BuAg!MNd#1 zacL!Squ41q)5x|WE}ku!LsLX!TLs~gY%)v_U&`Ic?jcv{;;CFC_6NE*v|bmGf4M^N zV;2;>gtg_!&?9q#5qL8ASbqW@#n!{|r@@`&cLKd0+V02`+$Kgt+nsr)oD}*rl;F^s z&UI!N<)97tB(6VTG%OSeUOaIQ4U|O)o;=xqU(E@;Z_C?wGXI7os^|pBvM0z38VH$) zC)ScnPgI)elOzcWTUunuj$txJL??W9+4R;7sA?+%{E>#Zko( zyC~}s_o!p*sMm2f_3oV+v!;H=Md{uv9y6ep;iB~JogUjteTSRU-HmBHJLW}g!JeTE zdB(|ui?q4oA@A8$3_q$QKrd`Dvl|$2L=n~2b=HyrMR-$fT^h^B4pWs8C}Z5tVq53g z^^7Cbacm_jDLq_PXwJKVOgabpRVNVj)K=HVN}61kw<=*PB^4_~N2(~P?z8F)S7A(Q zp8AUv8MC2I;{?5^l|0n^=`joH2yR6^*N)@sy}`_yF$f4*#cVo~gH5HLLLkW4P$~(5 zWMJc{#2Umkte)~==-`!_XV|imySm44Z*%XMgF4IInlA+GyONW-U$Ae6iB}gFi}s=zsBin|;R&h~<{BizQKB_r-z6$^_S>uZ_KLKC!jt z9aT>Mec|zxL2ayL3COv)ubAfK;O{e!?;3oMO+dZR04ZOoK|7oq6+CG6ystVjT(d}- z@*r4e9Y+r?;pBDgDBpAkGjQ^HcBS7o3^vqcm*_YqBPM)n+)8wutqYIaPBhf?6zg~= zi%gJfP{ozolGjXJtEnya(yhQITTiIhL{KYTlDC4_(ec=Rq+QXs)Imm#Kem?Y1+Vb3 z&NyxWo=U%|QKbZ7lOYpbz+cvkb=Wo8W5!fo^KFDEc$uJq6H^SJUAx^3Be0QN~?^cUeaR8y&;n6(94yEBa=CBSA0RS#Xk&k46B6OAFWk+F+X^d{l7q`3UH><-XsoI#68{X)JXH&IZ zx1O1dX@vI{B5ZOe4>gAMb{7|*Y|cztHjXm9bZv?!5sf7bFFl*nlUo|4!=Vf>lugFu zw#M7NeFkL&%t^U7_rk}EE4;U!JG$o0_Qu2Ee=!bHo*~Lyww6tbG|Dhc^;^zPDmGe$ z$1_ZkE%`@v-lR4@VW?2{Io=iA>|gJ_Y0#22xu@}S?@d%oIyn2vdZP?lGADO7zUz%b zwPYNHya@&8;go)$(@BdrcHwi>_iiWAZ$!gAz!^yhbp4_5=23VN#m@bQ+MCgEZ;Bo6 zhtiw4##+Ws${&b8mmh22+z!9asD!6fPKr00hnrC!VD6roJkYqS_hs<|_a7Q>k{e$! zhILa)CQTZf7{hugv`M?hIflLNJBJ^7Z`{IRC23ASjNU|qYclLni$pLz)c3X-EM`px zHcs~v+E9z>lWvVwy?BGg%*kDiBfWUkV#cI*V|y>(U@`kB^i6yCaCK=DZ96Q$gj@kr|_8v}eg(snA z`^NV5wont`(_X_Ft*E4eAzcfGNnBa0*DxWk)glQt+cs7PDo4}aZC3Lt!0^_D7|Bi5 zoqsv@juP!*pOb1c`-PF93)=>s!yAHzo=x%eHv9Zk)!BWF1o%irsyrxv!+YltFdS$i zZJ7@mODUOlZZn%#n_cRiL!nRc9A-0mLC~?NX zzjVXf&PxjpSqy&DywO-KwaV2#Jym~xVl09Jx_m10Z^lY``}NQ?p6%>c2CBqcugV>? zmaM_!`*UNrdm~DM9q@YdE@P@C!A|zssiyOn$7sd<@G5V-)w~E`Cse7yIK1-wi?LUf zU=O_Z{CD8r8zErv(D`R$O_ULL(24p2XaY0+;B9!+{Jt@d-f4sOY+euuMops#r&5jP zGsd3u!t@Ded5~E*1`JLp=Sc$~uS!4Ii@#-l&Fty1>%CQagfpq;^YLT-CG8GvSv;3n zTJI}r`!*okv!30>2!;oH^R4GK$D*n2F8rwrYvLm(E0wccFM9lUvqwXj6hk&@m1$X#+E73 z`pYyPdRF3|^At5@%s$CMhw3)AG0CZt8Zl;-xa`V}QhINc?DMVWs;`=oL8eQH|G$iqeZO7#=sZ9R z-JFY8S~A*N`nOl(K!a z++)?c0&*W26<)BUvJG=D85Ldx(xyswK<=nvVXb948OIiDeqSXkGRlDyCQ%ZZdw^)6>6d4F3cj$v1rQjx!{ zBL~stuk^&I@=AbX12t5+YqJue-|xni#6osbuBzcnpH?hKv1?B*%_!(%fE#CBSESNs zqoCTv47O)(li~0caId>Bcg}FQmU}8xv@2T)=9{{WBi&W2RONfLhFi{-$u%=-tLC0( zYvx89wO!&?vL$n2M)+#(IkswUuo3hy55qwJyBCjoyeVw7J0SVE z5Xi7?{7+t-bO&IF%>ntxm8ItH8G|)<439mwK41p&k7N>M(Q*d)adjM7@4O7|oUP#Ytc*7_4F9g_?`>@JP)_o}wd zp56QSt6_g_`8KP}xOIS4nJC?C7~$7fUGAB*`a@=^s&CLXV4&1`e6N(|7vySH6lee8 z14xtAU)YOHLVnm$y30SvImzV1iPBg8!wyMsz~)%^4?86pe>hg!}CkNoSHuyD*$t9Qgh?1KKxZ`Y`Dws zW_4=T?C!@eO8b57z2`+fXgpRm3a;MkF~12&C_ftpUrsHEv-|M5G}@;PH?Q*H9Vn=^ zc>qXfu@vS53Tc#C_~RlY^hI9j?B>S>rB(iT$9d$3U4+tLf4uX&$%ll}5r2?Ng99K3 z?az0bH~tV^+V0PHoJV~KE+zQ$oq;DH`0=u#W~tm|j|ty}($xpB>b~8j(g)nn`Tkuh zegL=I*AZD~u-)_8d0+F|BaSbqb;>&;>$Yw`cI~b2pS7PHUKH0scSO{gZr^w9zVC_J zPmV82>Rbs2e9moGIqkWl_LIwtvO4)4!FA8BF8F@0eOrD+rf&82K)+)y=9D9mb;qvW zy{v)xQ~Sk_?KVELS2Uc=OOLqKRa`xJMZ@(^nHM*=xA=bX`cv{nOdVu8-;!nrxHecG^y4~AvUo*V`W^( z?K0PH*4)qibfhlwD&gkk`-Pv9>ol)M)!Zk4I#?HYHR|&Hf=?&wY=Bb1KZ`%b*O^^yt69kX6j>L2we9jk;ir^3 z*j0SZ0{K%!UGP=><%NPz33ceJ{F;TlPtkRRt6P1SJifzrWIVnYcg=QP)w&C7uIbmE zU3by_+NQelx(n;B@q=M{1DGuY_HX78 z6+2Y=ir`UnesjO?zuQON7lGcDi^}f&2NgYTN)dpv zz$54EKaLy6+|BQJjY5uFQTS;096Cbn0dL^#Qv;5NjLZ>{%AK$5E1p_&@WkC!kIL_q zu+O?L9(S)hYN7MWyoz_yQ*aiq-o4_eEB1L$ZL)ZZB1`AhP%kU)mUl?bgHe{p{Ci13 z+93t4!%jv@rEO0v*m!TGK$8WujSEVLpSUzXQO*$VPjb>`(O}VH(cIMB)DFw=Germk zt~;?AIVDAj8FgkgJg(5V42925>ja9O6f%R!WH-^Z^?AQ}DXfgSxU7@6?!Z{AyKIT0 z&b7!4G3tu4^e`y5sDzj8y{@yZkd`a&zhBp6>d|UAx#23O=XLN?X-kGr<_tMVnwO>ao{0=ZP$t`2W%^%GTWz)qICuItsCyWSOCLZaoOr^B1uJI+b64&@r zTBECe39Z0YzqH=EuGrM-%Y+uetdthxI#^b3S+{Hgx2*$MOsw)JqRX%a6P5&9GwMA8 zv6NQkT3uRiTQ_D3SFV#Wg=^O}n8MZT0!-ohb^E6D=XE#ALP{po%R(w91j|CoCY;MW zOsKwuRs*Uwq1A}$MrbvpS`k`}sc=H50acw4YD9G=gc?%K38BW+0K%yORiAKbMD-$^ z8hQW-*RwKOuImi~2f>;kPY5RbNq9-%C7g<R7yp7!KdyF$nK9E43Xel$%qvpAdnd$vfN=0G7_dh4-WOeX!>Zo%)Tql46qo896XOl)!ap_Z@&?5rz25^dcOY30 z7aUoOd!Cwhxqt+E(u5ZLSe<*G8h3#~1E~_4UC%%RDc(6TyAYjJ3DqtW))7Y?q=a&p z4r`5LU#j=Jm}?O0hYR+s$euJlhpHHDh_!%2PRt?bF%tE>>mG<1*J#vb3aU!=j*W4H zSPL!$vC8x`8g}V|JX5`+V*o42l)wU%HK51hp#v&L4l>2>5EX-gOz|z)vhMdb+I9T} zO2q{lbb(lzdIK%G_&{7K+i5Y~5P6;jO;-J0i^mHttfGz;$tbNZNl;D-%CgHBl!M%U zA0q{_P2Nt5sRP-jZhwmL2ic}UMOD9pqSG zA%GR=IWX?B1D&RB$H(Y`PE)pXW5Tbihl{o&=J1ytKZ1B!Q86lNB7BHMypUruNF=={ zxlaI;iE|gI0h;=lK~^|-{+hZzY0xCjU9bk*#|V z;+O#vORw*1?z08K@f5zA>b`zQ8iHg;CW9Iho;@e0f*O*Z8IXyfhQy}Ib0@?GL=(1; z(~&XtnF`q;T@E*;Nge=2^iHXgt3UyWCQP3K;K+!4_L7_fQpa)d`_}eh9XG^$xzp)5 z4nAL{bUI%CIr$xkDGBzqPuY=6WcQzR2ME{W-OK6fIC(Ad5GX$JnI1VXy&EU5N8SeM zC&2Rh5RN&IcJHPa4K<4;h zJ@PKdE}=<{91XHdYBD3^L3W8vdgOAD9iqvWybhX8I4tUGaBLOZDu67}Aw+$C~6p5RiCS z-Z$%b`goTq9l#xHlV?F^iA|d1HqaS@l(5?42MGd&q`&JkaC#`2n%<)WaRT|KhxHjb z@m~Wc5md~K!TpX>NWx1qZE&SyT`ED%%nD3(tV0rBn5l!a9sN@Ys%GZkX-9t~LD@_n zECmjKWSq(m;8RVJ1Z^`faERkxN?m$IDEbILVNGO4U+S4KBATHu;U+AJ(&+jWDGeeN zU5~8$Q1Kld-oqy1rVf_tod6U60b_b5Oo^UoD6%f1Vh*j=Ghs~B0Ovc#rq&@Vun;Pr zn;qD}kt*m0fEjvZ4Tvw$jH&*S70M7!0k;aEq8-A?v#tSF@0GPAN}#)X*~Hf^z}>yF zw!|xFy=4ES3IrsZcijYB+?(;hEw5q(lFhTO19t9}wIV(QFZalr6Jh89q!gHV7ic7jBmCk{s}hku@qVdw7}-Q z&6Y$dbXAIfcEvhm`oX#ySf;lbOcXai4Ae*wljDm+|&1&;3tG9fykxsZDwD+D15{BBJZ#gNK`IwPV8c(5nPjOYp; z>R7WeO?nPDTLqY`H@+$@*Aw28aV7uNUOQH@J_sOvneH&a_p=0*AJi!!K z=E!IDAA=}@NvDv}Rz04=m=p@}KPpialTD$a<$5-RFbK*38q>2Og2|+8py53m!WeeJDW6#Lv8>{Xw$A&1lh{ldSMFYP5PZL+^|pjfM^Y z5)>@X2}otgrVw0^B!}k`fU}S=xEWpA26{h1!J2lN1jlg+!;>jP==~&Y10}?9QxqOU zIdR++r~g4>z$t3bzN48ELrN&;BxXuTBZbeATbM3HQpYQ*(VmhPAl#z#r=)JY;tN_7 zT0bcSO)+-N6`?;N-Eq`U4rvA`l8(8;^hYFTe9l8U2Wc6ns82gY3*vKl;bjyTbTK}M z2VO)0qn+`s&uL+3@uUzGMcZ*OQNf&6h!#gE=+lBpNWAR>`c=|3h@CK9gk+9yRio9R zs}Uhs3cKU15M6*IgKt%(RieERAsC9>e+;SxEgQXgPNdR+Y4m1dNHvA-I4e%SK+=XN z3Bl7T5spfa=(kAmxKJJ10y;P0q<~WFD2_a-rQAcC<81lqtfWDltr-0oX%HX!;+%pN z$AxOrEJ@<{P*s{NsTvomOA8`Z<3p8cndsT1lX^;kW1A>lfwYM~eNMYX;>Mk7(7Mq| zi6=lQWzf+p`J{;=?g$9eMM-w}Q#D!xx(#uHrEoi*3DE^fO88S%S~VI#oM0$Qj%UJj zaT0((RX<-(JHwsoLzV0KCR3=rGzbG)nUqMefbz4q!j5ahh%x1UVBhB{Qabo@D{%*oZX+)9O;s63;Tv zQqOW*b1ZTVYr2^qWJi!O#^$b_n9f@7iJ5SJK1wa~Dm;2lXfO+5Cp4IbB&jc+Th2A?kzxqY!68L}_dE8m6o@a}8788nM=H%Khair!3wiBzXj z?}eCh=O2ZZZB`#$IG@`cy(r_ZIN~YeE<1Wv7H@j;h7fOXqCto^I(bcqHw?*ITQF5J z+gmVEvfaC5qGY&-Fi`^U8Jj4X?v0q_em+tm=$oHhCk&dLJR%I5g(R&lmxNZWEtiJ2 zt|3fw^Nvgi#ifcid#pg&ph-yTTFu$mK*%>$?@HjW+z9{ZYdlxhZ~wgIWJ^jeXQeAhF6;F2mO5yJ#gxRe_q8$YVAk*&Y>rx8n1bL41e!DAkO;ZnSYjo#W- zBlD!@PosfGO8ov(rEVHF+H0~#V~FN=qp<~^y#A7YiJj79-T85*v) zOM448c>QHc&lAe%^7xCF(lw^_*De?_C1q%>@fa~7j#x|8H59bgmJ7J}_MVmsYA9%~ z2^;Ang2G2@3Uc`NKN5%V0B!jOU*T~T5D29)rg=EqnQOW zynE860U9UoN5wU<+G`3%n~0;gqZ~%uNk@^R-36hlYhyq`sPbAvfg;bIoKc(L9)nSC z(h*dpmC(1h z?Xcw`>rzbZt8c-x&sEsjQ7=0v9l=r97k%*-uk24d{*1iGQ*_&*4l z{81^q%o-KyPf(x^+-*_y3VGDk4w2jCDit7R7wu_Pl}zrPjfA$L(c>FzNwvG3{LM`Flt6t!q5QYzroPg{VDVW~~Yt z)Iatik$e2idgu9vPdhH%jDEnZ>HYxqq9ZR-^$xqvqww*Y_R3LMZTI`Axeog%th)Q( zsKgGnTkN{-*HQaXvHa3;axo>BxxPwr_9Ywb@)hK-SBT@Yiq!Htf z>}#U>c>rnTcy|Z+7X9ORu>G}2v4{1Mpxk@qx7RH1?t1c zE$!DMD+TM{jjP#bMtTU;hmD)rPeytOrapIPKxKE_j^e+iEl?jl?r9H?EWA0X?aqxl z>0rDmr|~FdoX0*QDnyNP8I|9mC|%myApKaIQCJ4a^oL*vF__AHTwx3mSJ ziR1kCtR0{z$SsV{qs;Mp_U2JGe9-Li8}>3$)4b5kaZY=?oAjh{8~gppX+hds3r18# z2iGmQ4n@@7?hZYCyrCoKCOvL^za#VkEqOe?Bj?saho3#8{opwpqG#XK5z0%GbosR2 z50sN%WW1~Wvw&4oGSNw(|E1-N;fexS5?OUZv;c;niMUiJ(qvr}3rHHGDjC^N?1pC^ z^vBo!C^$qgKexO!Y%+Y`h0R4(Q&i2;dsr*MEUDJ0;9`eK@*OsWh=m{PD~bH0cA_wVb?^n%v#w30)Hi!%bup&b4%r6wnSoD ztw4bkzgT3gQ-PFV!$%23WbK>bqeNnE?S%r>1ZK^N=fjs0nN=;HxO~uz26#L! zyC`eIk+rW1ZU~B{*6wStznIV%R!fx5sFgTRD*FFM`#c>MNT6MCxpS^ySgTo}E8ua} z#aJ^_Z9=_3SJ2~V*3+IYAm(8?TwEJ|S4pFX(Z><(j6I%7p!JYC?T-Eu=t9 z(Bq$DKs$??48QShg zzH1;jP}7~`XAbk0hQe=H`UTZ=HR*vZUEd}2WJf4X<^*niqlMZutI;;AmhRbF{8+oO z)dmk&e3LBhDJ4%-zgtJ+HqgoO&ilxPzvcsDl?zE?xnc~Hne}i}0(5mE!BQ5PPeaJ* zH{_Hi4FktL9k4$YE6eB&)-0%qUQm@~VB(!NvyOJHo{HIJy7J8kg!?!J_vf;Pc5C1orq zxy{I^bxXOf-N6{Zx36j8FfqVt)hBVg?f0mV!_q)r)tw*fhvUP`$DkH!6(ObJ?Ss^&VcKoIwOBQz6I>wK6~8$ZTTsh%99tYYglDT zDs)i1kt^dgQXd<&9$=M~YvVI2J->eqSaNZ)fsAZIVZtE4sfcp`u$_7vFO z9%~`9&UEl{WqSYfKYjb9RC)#rSw?w@|E$!GQv+X`MtGs@*mrFfhj=oLPh=~vO&`d9_y1J? zi#zsQ7iOuMKe}AJytUQyCGp)z?q>5%vpx~#^wcVAw9k-;HtTj-$c#Lno#UsKF+Q}m zUqdXmfl=%0ugm|pxxR60xs;!(3h>JVlb^?+Stzfy)$@<8W z#J(d!Uda1ly4|&}8m11p^;2hbt;z3qMvuPQ?nJIP^|nlCe{3NvG5k3DXXkdVC%9Fo zCH>(i>$~9*se-f4yDz%~rLI+{y7)l-&FamAM-wvN!+4@?XYca<`TpaVpnJ#hPyXjU zzXi%pU4U+QcVwsuDFAbAn$e;I6Njc*^v~rrm{aXzq^ps#YpE`(-}^e!ov6Z5Hd#D!5I*#7~4>GZUc8>1C+K2SJw? z?i@MP9F%3*$V*0>t9=?%r8bQJh!TzHkFMDw1N$;tJ5#f{zBM({03r0rkx{&dAzc4R z)!ntW7_X-7?@bDQD9iWc)f?QEwo`WYjScko+v_cmwwtZ%-(Q@%{uuc|z1^<*PVa|I zi|s28-T&|FcsnclFgBuST6RAn;uEic3MT+8{hZ$dEx~rgbV?lieA{v^768UwGUG?18 ze9MfsTc^C*2p5D>WK^Z1gWtEey}rcPEex9;^$IOw*GaHC=>TTw$<~$=WrZ>8D>XGL zp4{-Cz782RkC>KNMtm|aZ37{^qm=3OKhF;S^y+|LEIhOxSS+sEktEe;9%+VTo?xn4 zG_rRU7`b-c(E491Kn!B`i|%kNnLp!-TdsoGN#OSnQwuwFe$h7vQfN+bbe62J!*2Q2 zmmBQ;2LjuuXTzw;)<>?8gQR!N&Jq&52y_2hNmA>rP#+er9b4Wpc>vmtiI~x@4Gd`P z$RF9vQ5savEW$t+j#K*6SF(nJ&31;Y@HQT=GYg1dh2P9po!9!uZ+`Wl_ch_` zT=2ynSzKP}pt9NDz?^c}Sj?*n62@e&(ZCyA_BmzE&@E+CuD0Ahhdbe%flOzATs+ph zG06E8y17#6AS1rzQ#_ePgQb3t&ROz450WYp+owrlG1E;F%CoPzd?s7nzMVeKRpZj8 zMNiKtNV!LZv8$?M4%EcIwMod$j=(1vOjisFVf3XtGO-qHfHR6U`Qyir*i2(FL7j4X z)kf>TKb!VK?~KLj-LLEap`FFdoz7eZ{_1pUd9AInPq9L+I)hWLI+>pZpENMZF72UV zT{D^FF)`}w(4hL)py%(*ucz3L<5cETnhUDDpiX_mjaJ6Hk(16M_HAK?*}F)ib!rH-T)XI=wNw*ZAIPN#@Eiq8Ri9mgsP0hVue)2xG_z9Gfq2YFlxt z28LC+)KA7~oD^RrKCvC|HY~~`48;_upieVU&(&b%im?sCZUpfq{yl9dS6{i^lI@gL zwBoC~PIJPzC%0Z);MGWO>RGB_o*ocdbhX7YGBF0iFh@A;TIrFmW_B(Ce%R#o&SI%2 zu(5I6>_m{4=ytxjhjMW z_CTaVuKcyR`g2h)%5t7T9cJ5^<#w-n;&8xA^{Zmjn%D8QBjFwTdOwWk)sj||Tzyl} z-?=+^oH!*f-8eJWOX{L0QcZT|s{R}NEu^Ua9lY z`F;w69FAZAOGyB~^Gmj+xg27Fd7WQg`1liux5w^psYK&vc)gxZpFLCCY&;r(k3TA` z49Y%k7l>E!xwy_v{#XV-7hhM+u5#P1j(^cI$ znxe$gT-+53?20cuYHOa0bNG#Qi2A;5{9ZvOj+=F60JtR>cRyS3_aTksbi$Z>u#rBs z?bG|DMp=)TEkV9FSKSMm68zq(Mn)Fu-S5n7$(n|#>sXKBByzYV2Bep9y_ibBrk;c0 zXx5qfyc8yATf#H52^{-U+h21vdlIyQkFop}5}KBkQ-5H@sNkI@tEu_id)R8cpu z3iUVi0Vh!>-SRucI^x?O;tf$VQ2DVH^^NW&X2%28z>{s-$A0#t09CKZ$Vk@V;>|9e zD;XQBbbHdmb;LE^R=tQkXwH%$nfq#T@TWxY~ zy6GK_%04C_WzsHlUHfOto}qktsM#ewgHPqN0JHgx<0M6qm$BU6)wAcM28SShaL1ui0(L{+Ppm2=Saz@Y@(wnAGADwXMmOB&}_m_cNtt z1C3h>@wdv0cZ^O2Z{LaIn0it%Xa@bI(NVQU^&qp5t7~u0kQ=(8?qI#&i@5`L{Et1p zi1A)};xQSrI}lo-pSh@5%#eNZ_3Qq@;K7eUMQF&uBgOVuXMtu#cLs>nHG1a%)hpf^B2O$@LaQ!y)*mk&;G!gO`Zt}j6vw%%`0E`}{3 zDf`@u&ehhPDK=S|?qlq-EeuuO(mf&lE1bx=&ozqcUU7qgsh;>b9&egt>H5Ba>m;8{ zmnU55*@)Ll-ip*;camy|(>AAdg;l~;-y_M&ax_IY=;O7PrH)c#=hmIJd(eUlH2_3r zWjxPftgw<;KkELBQx583+-YYqNQC2B7g}kNUxxTDUG%%G-xTcEpX1RxK?{eobGv(? zAjtUuiUTb)A&COG>+Zx=M$;qe;#UZA$=Ihm#ezcd*Mrj(U1LO=6>{}j#&7&JcyF2# zL1PP3YVe;IVcK4vj`QhSqWo(LSfmAn4(Ni41$=QFshKUzz+f&D5HWVkC-ve!$Om{O zCz7^87Jn&w#k2?9M0g#l>bW=Z_fo;TF+x6dtgY1yI+*IDMETyDh6WloxGaYudA)IhO+~!OJUKBwiC1<`F9MB9!VhNH@r{9Z3+%=rvB+T@Hy6 zb3D{JiPn)l=8r!d{so8(T(e!M-UbIddDt4{2wil;$EVv9rC<{*qo8ZG8~)Mi+bdXb zvHqsVgFID}>IN&f8Og`%ZjIlUCF09`W>cX=b6^22MBcgrB6;p}bICUEF{IL*tk{75 zCN&dj*kBJ)9CEA8d-m&~xp=17TH2Ai9=#;DOMBaCcK44BU~|yU%SSnFc6Gd1_aC|8 z{>F34`{RcTtX6Wwd({kA?S@|d9&1@ZAFlZ+D&Qm9+O<0Y((fv&@Y(Z?wmDB`fU1d+ z>^F1q?UO#~3s24uIDx$jcfKg)BKM$?L7Vz|3L7#Op8VGMe4r`4MokaL4Q~W2BcI3J$hsC)B}NMgq&rJ96d!+1g)<8)^s$gxIe3*Iqq|2>HjU zr2akAKReszozILb0vnaO8l5IH3ZpK#FifV1j-Yf6fZf(fDC1~QoeXUvq-8(<57M1O zl%L{1lgm9w!sbqz_+o<%tMeI|r~vzu;SwZeeL|s39f)Ph&P+|b_0_k#r$@?iO=6+y z-E@8J<(rBx6VIr(QB0~YVD~-ju6VW1hKdODhr++DQoln)!WyVQEA}B=2VVr*suuR# z=VQ6qfk21Z?xJVG%AjiT?gI_HVXYlE0NXSMDuIdz>?f2JQOmY8NYw=-GPk7F~jFdX^#SW?W z?)1lkrPwLkWErw<68)jxe+nR-S=;Z--MR7|s7wm$=Vuqn>zT%y{hx$;XvfO3{5t{@#%5!616Lw@-VzfdT48B` z-~4!(!k+3c!3<3KDx@iOb~>E7Mi$T9v*{%lO7&9SrDswI!G&^e#nP=(!b@Q~!TK(cJQW}Q32Vxr#p$5fS9 zg_=S0!>3wlIh4ZhJ3rv(2gUpBfrbmhkQ88~Kttx4tC zmj@16)F_a|x|VEG5%xrNwT|mIm}Xa+pGLC@!uBP3820w{kK9`W6|z|rCV?Zro)?q4 zVS0tnnuaY`8@;W7OxUnz7JlS3kXmMy1YbMVG@ay zA?37+BamiZ&$3qsuMwU-ocWi#gsB52ms{I?+&S=_u*P^*v^p$W5ZbyFNuvGE#J)1c z`K_B;<_L}LMU1U}ro4z)pscDla7-5aE4p5fW;?L8c)ldCfA9xaC~!DaIh|?GP&F3U zqsK<_cOLlz2DR)EwMSX}h(#mIGTgFSl5~rG0y`Yqh3!r=qGUpUL~m^eTR+&p)Bj`+ zf=digIZ9EHl;ON~m#Q+!s2Zlp+=4T=S#qcv%I0Y2wA*MAG21qkUn`58cR2XrHqU@4 zzu;-TBw00t;Ap=y3(UDrNpS^)ZMNw3#viUshTkNlEM%@9FKWm>uBJ0xS2h_tb+qA| zp?~4AG0PCUx(;sHlA5dNzb02x)Wfrxk-wucKjw2iIEDgPt|@yC|Nf{out)xM>y_Bi zo{g{LKW?+V<9_>xFP#5u5iMU0aV#|FC)uX%DFPYQf+vGvGb0>YU~u z5w@s3`6ak&L#F!>7*VC)@93*jns=#sgW?&yc;9wR*!+>#KbzUlVo4^(0k$@yKjCbm zX*-NBHOt*N4qh@|yryN*`Cj}Z)BaEu%j@CYOWe2!3MP1azV+zb|8Jtk>CV`Z|oP%D+llAM&x*DXnDklET-GslpLl_v|y+YZHX*H?xE z=wXQy4eW!x*j`dk4hfbMXkKZ0MSAqnht1*DiDicfwb^)foPc0cat4al4ljjdRl`*mo~j-m3iadh6=f=FNJM$vo@L{7PS=G zJ-Z{$m&3O74w^05(r_NmG1`&2`eA9#<>94xPbHB+69%w-A4;M$KTc**qUv^k)`!>) zNsnCH0sjbt$5tFqwy{SIU3_|j6TvCxlDMH_n?U?U=v8O( zQ2c6@>4EMH9iDp4POzveOjckHMpO>g?#Ee&tPQ`LZmHnt7fEkF+JiTEz1?pVeZ}{C z9IxoY6u7UBPBLA{Gnp)zI%IXS!X3AFk$|F{$=m7z7oQk*+Yx66@*H;lrEt$G`?H)= zq08;vz0@KBPZ9>4xisM^+BEIneT>VCa)E}`y9y6!)f7fDvf$5p=Bvl8eh)5&S(Rsu zdsGS0PxxoH<*P$_mw#c)_7BJ1>Z=c=4?lnPT55ji@zZ;ur=+Cu>swb&P!puA3(!w@ z63c0FEmW!=K6ZoM5H@%@llJ7^i&>WCurz9^P?y&@khOo=(g zRI=GJ79;kiAU{VF#A0HHPiQ z*=7M5wY|r#vFzX%b=l&@ab_N19%Wof{WM~L-DA=!eTR6MC0cZPygP8^liR+Bb7t8T zS7_^_8c6NhOdFirqpUYoUKsy+a^gATCFC9(xOSN*J|qo@@Cr@DUB~M)}K|YwRcW2J-|$#uk*gtT~(FmgI!`v2So3`nVRz2U|>&asu;mPZo0Z` zf-A+;!(1>&dIDWmUQb_I@-#C#Z=8yQhJiqSdNxq z{~_dZ%1VOmDQU)rJ-~}tlp>J|xO$P4Y-UE7^{~PA_@l<3u~i7*(L)g@lL9w`(Fkkg zJ>U4;6zMz3&-dO@AMS63eB(~%+LUWvF!|QCG%`@*B5Z$_YW{cP6G%29jZRMf<%yq1N5fiX`I;iB8`#ITUNyA6-u~A(iK}PrH zy)eipiJnKudpG5DfFHi*oUqiOZksFqoG)|RnF5O$l+LoAz7U>UdzrnM?X{DRm1Cm# zOn>PZaC?9;aGHri%s+D47#4SZo%3m8(R%9a|I)jQgR-6%Jn1v~jX*pxwK*Pc4rqzgt0ys|U)%=ge zDr30Lnt=LHR4HO#U!DUeb0n37mkAw*Xbm#i;FWZ;n}OlEndA3%V#cSdVhle5u1B@T z>j*j!eCJKus&(>i+ll7364^vEWTW4E4>??li%wMSuHwdqOcg<=Mye~KkazKmpV?EE zUjLf0DUZAgm^nMHsYGw3sFCAPw)5gmb*L)~_QG~``x)SY# zv2uHb2|5jl2sh0daMxe-U7U_sZx3>-&$@JHg0RB^q+&lfihlAK%)K4|%;A@WedbBu zZgHhfn_{wRQxbMyX*dRZ%}?|&lcuZn%H&XCS5Uc z_upux9HTj>nQDx{GB%IC)IZkKB4a0I7rJXY4Fwj4IIe`!Xx28#Lw z#E4u~$lac=)Zn3i2@!9*cVz$&HG2J3#T47Cmg$?|Qf0 z6Ml5HY39@4nAuNvq1by-%VCk?n16qHsBqG!IddBfiW@k8@@=}1y^HAnoepyPeSX-g zw87}4VBQ_cE$}Y&u=qiRIpUStX@dCG~xIcgBf4-rzNpki~%&_Icj-s}&~BY_(MXMj?RuH0V(DtVTH? zOhx4e(Ia- zHML1ebTNlEV)`|Lq81TKRg+?=uU_YVj2Ti#v-`jC&tF|{|FKB21zyrK#DSxsXt9S|Mar)Fm zJ-BrOLAuQLwe?0nMy#!Ywu8K2IHko>+DU2VFd~!+!g7x#+Z4eYzQ@vC82Dlsh*g8@ zAi*6>3}5nORCz8tZ9N`XTK(!f_a0>Cb&_noBDD34>0s)Y#mdvy;?A7^ygDCOwk&g^ zM#e>oJPf4H2CmFujLp0zv;J{cKD)x5T-)r1Ub;8$u;V(3dh?34e1$^KvppwG58Co_ z7bjOa;-$BqcC&O=&PXj*gqn#vzoAqb_K9e9FxQZm!Gg%`f6ci7Tl>1ck`}$iJ+F1hrN2zdVP_Vv#{slYxf#om|jf=Z|1Y?UbUubacvJp!!LUJ@mC+L@VETg(3mtB z{5#3^of`ygeTN&HZ2n8Y9F2_UTDjLakRngcN7AlZ&uPu<4B-PWdP4czc8Bm}XCdy5 zeB|!cm;nA|`pOcp>n7CJt6u#}FK25=lssne3KehLEBXc_+C);X&awk{zEccJIc5_H zrAmgPa$3?D#6VG`ZL%nFGRM3=2sUl|YY(@J3hNT{{`mORF>$qJuX*|KqOI*1%aRy# zjq_cJOa1?3qjGlT`B-uhP0m5s$74_5Q*{hlP9 zIdh)+C1Jii*`Q3wKiNsEb|(j%dvbr6ltV5pH+p*y-DKT>T}{nTEB)0Z((pCzYE`-h;KvKyAY5vQ-r<(Fy_*N$@AF^e^ZDk{H! zwT4LJ9p+tTQK7mofBdZb>(X^j=3A)H1IGSLU`GH@J-D1J(gYuA9@lf2X#;-kTiFl}rLV^4ew zvEqT%Zs&vpaU`dkT={!P7W*$Lx;|CRBhe1G>u)Fab)rjnVZ3oQ$E~^LGsGXqJ0v(?}keW1q#NxGiS9SPf z_h0xC=ds3FZ(IBiQOHxbt)QaN0XprfofMgP)3zf|M&e@hylz;b5r6c4w76ey#%lVR z)Z+bw+K)2eB$-PEy%G;Rz6Xyzc+dtEJLvEzjI}D9{USx{q|a)_a-8NYhbLx|j?+i1 zZmgdF243mgCIl8Dau&p8`iQfftGmB0Jj>4hAh{6x-);xJ5&B`Zn5~z4$cxixqh$pJTIXe zaydI{CFQm$yWgtIpdQJeoO6~Qa3=_!^W+VnFp{(HR{DKgA|v>>)~g)B>+ySd{)$Qm zYo*woN3O9PT$AFwfScOjYL_v`j?P&z(*XpNZKiSLgC0R7LA}!}sEiGSq2NQ3lPp!FO71 zC5jRu$*+b&>>ZM?Xk7qn9UeM&D(m%$_b1xJTn3bd4~DZ|crK4M{rL%4*7jBFTrYfv z*!eWiNfMML)=`1eXD{`VbJ~_hPC{&QlN+*$u-!{d{sIy3B>3y&a~}@zu?hMljBw1a zlsTm>J$3fzjGf%iz9}d_x%23q`5a-#bvpqTO|EQc9Aj$Z4mkUet9JZEq?$`qq2J20 zQHgT;F;}hiH9X$Y;WserLMK$!3znBtUDC>_t7YX>1vc!co{me!UGo?*_Ij~0lh=eQ z2g9Z8js8p)(+oeanbMNsR`~9Ks?F>(@#>-{z1pmfb9q|E0U62mS_yJgo^@BU9{b`_ zb(5UUbK%n3gZ@e3!dgG1q{urh(SV79tB3LWGNZi29sM# zp>6n>6}}(-o=r0m5#gM65id*{?#&KWEv@i_7GswZH+C``j7?Y99`BbK>0W^r+ZmUM zPEW0lrO2e*446w067j_kk7efY49jZ8o0E>!la@(QxfsyQ~ewMR^yHtF~8F8@1dpKbq{J<-D zuP1Z2hrJ=C#Vw9U+#{JUx-%QpTbmSMgIY{^f*UFX5;(fGaIF(I&puC?wB{YlS8Y%D zOBwVmRFk90v4d4GCem!|V5*|ksr$vTMz^LRK0M##0{np_~PCvxA^Vq;zNS;A15WEk?-L=&YHw==;Fy`bNJM34shd$pFudK)nnf%w7kW2X*tAuFDP-)k?`_b);XO*g!?dmv@hFHVrx85qa3T)0ZBaSS5!p*tBJ9E%T4D|FXhXxi%ETbKg%tz!21F-u(kGY)<=MPs0iPYP*2_a-IvbT6hog_X$=$oP+;m*Z5g! z+_{^R`!l7@eTwqC+qefoBKvctXnnPU7+%oKe_?TduogS^CEa?IkGKx7mOHBSj`QW$ z#;}3da6*FlCD#S=8!=qwCW(gA*|Vng$>-%-#FyT$_}6^-88JbiX55N+enrd#2zc+< zvXB#w55#8=nwtCWkJeQs(d95 z5w#7P@QN+;r%i+#>|(&Pu_s;GZJ#i@)*df5T2!a~BXEstGofGFo^ppOToP|M%xH66 zzsu?dsr3htdK%x!k_s64E%q#Uu}sz>Mo1har4zb-L5K}^y2Fl zox2CI*Mc9K596N!Y{I)ga(C}DolQbUFNpnhe%=;0MrnOHhcPhmQsC$LaI2!kyO_kr!GGSs8%)KFI^;m2lxsE-CW%>UD9x>)$gMA74$%%$j_x=w$l3)H`=!pEk(P8wz(INgH zIt;^cC3}-QL6k(8=*hqlzSrlLkL5Ab(TU*62mjEj0~QZw?g8lo!R4Oo$P3>Mxq)Mu ze-?$fHcGcuk2V*tKs%L69ER=sl}r7g_O+I?!`6E>16; zVbVgD)m2KKJ^7j?jie7hJ)3n(J%CK8=(SH9o6}Vq9agH>&paD(n~5VdKxwDmN*d6b zJY5^tP583dJs5Yq)hMuQ(~~Pw-IKN+HwSVDSZgP2^o3bFt&M+!{*PtttKRFOmq~zXuhYSxteq-apUHN zTgf+7RQ@jb`})nmcPw*CR>1P{Aa*}s;AAR5QF6B;$f;A(EoUb zvW2jw`4f9(B3NEcSg4dNn+K+016DAcXlU3mEEHT}Oea#4eu&8M9_rO1SMI7tzKRE; zac%d*>?orOkZ&;xE^%s0o1d*M#;|*Db5MVlmKC}Vz4-ll8XHpeV@WaYN3I$jo6{R& zloMZQVKSRjy0?xjtFA@eI{7gLn1r10hQI(ZW8tft+JuO^ow%f@$kUm$)X;PWAzZ&u z__bWU^6a2iqc(W+vVM+pN{$d;e#=$R*>RrF+JQ4N4>}byoU5UKO8jjXib8&7Jiot( zxgH+#Gw+&i@@(7>sk3L=VnPC@QT84SXW~W2=A5Q(V^vzWH8sBs?;ZjNqoP`xXV!8e zDMDvy6E9W#MqSual1(I&*pDmuO;dZg!%h<+*Jn4AGucw1l6@It5ZMbY_CiXi+s=%}FoUt(sZq(^ zO?L`Wkzq2%a7(t_Lb8YKyRpsuuD;*r^*ld+&7WT9bzaALoS*k`eLnq}>zjoRxZ{nI zNwEhCZcpU;$z3|dU9Tis|46HqNVAblc|V!+*NJx}uY-;s67xAd>o5a$Z;$fd4$Yi? zM}xoD7M$vBF74v#uzk44ArkM3BXept#&-W?Q{=+;u6cc@x$I$XVL0|063^4tgK|cV zKiYgNj|+Mu+8h08tnu;R6ORHlAqqHKi(M}^E~tBqZ&ma51&V<$uHf=}%5`#xZc5>*W$+v{z1vLc?fDD#f(53W@2Tq+(L(GW#m+e?F$)FMmpUA; zb(6e(+|XN-&X|a{p|%mTCS<$MWUQX;F17fj^RlSlLr&w= z<89m77rBf7@ctaWXVV(-Pw=o?$TwV*mCbCoRPEjvG<76xQClDvx*AeYuO)Ou#vxLm#@8x&)jb01V8`#P%P-xzjuC= zY|+v}M(RCm$~fnhQduEi+27?{Z~rLq8@tO0v$(lpbEqp>@zrpiIja8r zVQlU4HegY;^XRZrpZ)So2*~6qr#(|mkqgtD@H&gD})>j%i-G7zdzczn<>#a&H`Rc9L)dRK*mFa!B znILGbX6?qX$WjUzk=U-Bn$}VLCQ#`kbGq(ETc^zS{Zz3wdzc1d(fwo8N9zt`aeHrz z%fr7c+ma3y#g;WO55!8$I``+l`Du4&h~NAcZm5EZnRGsBz*GGxgLmzdeU0j4L;p6x z!4Opj)#}C8_vfPhcSq~vryxV38TOuEaVoYg(_LSZk7tO#C;d!^U4*>~`Q|x%XXdZY zSJIlJ?}LXD6ra^7(EffMGH@gOpOb5acODt>Vguui^w%6KjT5ikT+Zuz6_(g#d;VO9 z>+3525cjIUiMJ;g0{-f^kNcakZY;Rz-m`rJWjJs*a8Kct+np=&r}^LFUID=TFKRuG}0`tU+uBZdyh1$ zb)mJI;kv=0sM9`WR}?UUA8hBx%(tU8v8crCw;m@a$h;p zp_bU%XZ%#kR%6Jfl_xeJ*}coXm~}Ax8pkp_H9s2FJlN`JKQRjvYr}6LAB#OJ2;8x8|NiPb_52mV#yw~11>bWJs&_Ju!H|~kAtM`T_v_DQJMD+?jnfmTKxi%i9(s(y6Zmg~-T^x7l zYx#UI>Qw%P!J42TZH~KZYep3pY&6@Ky zTKT%N8TAqU)7SZZ`M|{P!)n2lOn=6GoRP=hl!YG+Xo`t#_s!VabNREsgpEBXu0L`g zz7s*+eaW>`6HKoCuuyL(b$obB{B3KQm8)yR%yaoK20MX2biPOVMA}C^{gHpn)>`42 z*d*xcxx(8!Z?0&CSghzr>~R}DUK-8P+l5W-X~f^jdtLd=AfAmsxv}K_#QmH5>02JS zi|OxDK{q{;XFw4@2wpJdM;9*VnlLB)s>f>>?hmYHYXkM3G6OR2Xi?d#F;AE&5PqV9 zT+;{FI}yw%MaZl5KgP=MUTuJ=H-7Y&)rwo^M;?1P_4K@d@1*wUnkW~>{>sI>=idzt zvxu^O7baJyny+3bVI9&kD|KG(GM;9?#W{JU59!Z`?zq#)7z`zfmi>--Ug6MH!gS(u zN&^%2i&GxOjFNe>G~n~gLBXRj9__nmPrWi?_=YB}`IiXHrQC9_zmMFIn{+YVB}0KJ^$~ zLAEN(L*yI3+j`CDD*N|q_eZUTkwshFSIrww5&n;!I{8M_UwLsR=9i}8x8iGO?@t9b z1?KAy{1MWbvi#=akPY^A>({pDlWS+zP*0}NZy2_%XBa>3jFzB(?c5!yoL|xr4#>(a2dGVC$ zuxd9y%Y%R2AJmn7C%RS))<+Eu`q;ibm09$~=B|Ftg~w5E3^d!)%UNGEKKL&Ay}Lc~ zPj8bSP4tJjs@GTF7nAi!p{{SnsHla%a9!5#7@2(G7nephwRdbPF5R)787!QvKC`x| zt$OXBpr`ROF?)>*-xf!D!#t*#3Who%@0)CcV%J-@+vJ$^sFu0hV?y~)ogxd;Z>`l- zQ+p4e>oy_Zv_>#Ch646mQ!`8+2B!{6Rff2UZ}E3uc^5dpd8hx7DA5SU6_(NQm zt?sGa&#jle7QFmMiC)dm-p0wS^{Ar}# z`q;&2mw+hPoc@{`$9#x$oQ4_i79+g2r*Egm0Uu|nt=l;?y>5>*+7-iKr~h$~&|m(? zL2|dg%py+pm5o0}eMMbT;$~)Po^$`Pr!lT6iaAf;1itwzI@PuRYpVKHJBQfMy#_e- zVHG#`)Ya>d6Nq$;kLtw@8ZrO)zB#1`{9dS+Z~XX5*QpcKwVk&84%)RPHM;e_W9wAk zR(!`+%XM1Cby~B?g?gn;=;a(}NGf!z6uP3O`#whZy@oE-Akr-=(lmTUF>HCOclm{$ znAN@*MNLeXM=UZ%EK*i1^NLuvTs7{Fe}!2^!n*FI4qU@zP>}Rr&My?#3@of~L82A( z#*YDW++c9DQt5-*mm{bc1ce|CN8Z49TChP^l^oj-Hn9pSkbzF|}q+AD@ z7on+ETq5uo(Uo?fG)kJ2{TmW(2{FYSX?X z(#M(62VwW*wLdH7h4A&J3M3&Or?cRXnuZ?+1uCQrYSLelz9259)}1tOBn=`g(%jQM zEf_LB*BO66LNPaF9$ey)#z8J>3-GmoWo#JJ!if`FT$Xe-84*8Ho*olYBp~jMxQO2w zkI%h0{bTLu#U!x_WG>%VAHGh)6)mVqvc4AZ^;Dd@86)H*zO{Ai ziUV0qXz1~^P26Vj*?+pA$6GdWO^-WZ!cdQYtRmonn2#dMNuI{O3iFZ-3rX`f1sbm?NzYbH)M|(SmSEixY%PGA{+3ol1SJHIb55 zF}yE%oG+BRWqYDeBwdnwDeQcu^q%$4>=W?I7Jm~i$^Hs2JzUg=+}poD(#ONg^y>4)s6a2-rga=-kq=lwb-UMf3llnz)2 zXAL7TJwFs*aywg<+FL)*{s<4p%qRCNyySO2`oYXD(zNk`=wRpCQQX>&?s=iUGZViLmVfMhk zkfpb*zh?WxzgRp?ItTsbSE_G)KYK>$i`CVHTJSAMpKqzMwQcrerFeX;{4L%-o6^hH zud)Z=uQ6ANwI<=GoQ4xNW&12k?W~_=1HR&z;pAF{Tl{_YlzmrcFmBeGKfB4yfbfS5 z;QURow#sfY2i(5pf88z($pT!vEew+Wko$G5^sIG2b`#owxM|!MT?)%O4L>CP0r{m` zYHLl&egi)w{~`HHt}nb4YOR}%MSV>A1Nuv}uhN>PbeOTp-{(;Zco-mlSj8l4YQ>l! zjLl;%&R@ML|4Y5k3uoP(m0xCm@Ro2AsnLGoZSu*i@EhDi7VooyZ}1OcwzJ}=kLX+2 zC+11%E8L5j7H-#s2Uv6w@?`ae?zv9$Oy6lwX}{1ulzksQYk`I6OW(UYZPXr}y`eN~ zg$30gxrdrIZ%@ijgG*yhCm)=-7dGvdWecZR02aSG)6VTLvTZ-ZDVWp5>x%VU_b}5o z?T@m(tlr=c`0ibv4r>25`!@WW1>pUAYWiyXyX*z{H_RL2by)q;d+2G)_VnyA%e(jy ziF(<4_W?`bYj8@Ez7s-N6}e-voHPQh7rQ4&ffPGP;3Bh$N@7-u4~&jQORNV@Yq$Gl zw<%>>4~RGM9Z$LwtvocgI8L3CQ;?0Mb@uQhqo_en_@;24rJFYf15pLe}IQz zMw6*Hg=qeD``_ly**owR%qWox+dZ;A+s>a&GczH?$?OUM_QO`$G;@>WIQiY%(;-<7 z@B#~yq&T_VYtv`j1F~so6XJpKdh|3bOB2o^#X)ve0pDXvb|oAzAeP*fTMq|piFLDa zsHUVi=&tB`WjjrYlX1Ym?lB$Pjzg%7Sz!|n!1~Dt0=wGl;?sKTE`Tp_fs(1iR*VD) zlVPMUA&EglD9u4G61Y;-g|t6Km5puqa-<#46yGrahx{k6vW5+p&G{UQoZ~r*YWj}% zim9YOg_Lz|6mzI*yN>H6RD$!77jPS;9J(6DF|}9%9WDDpuR}vk+0mw$nz}A$qn^{J zcGIz=I0vns>3sAB!bUl#L#?vp5-OVe#R(gooOv}J$Dm?r$~sQU=2XtGTDaqUaX%k!Z<_x~@8ehIeW7V%n!{G(cH}D-HkT!z;kl{S(V*7im|Q|OlTA4z zc=KF`Ois1hlq0i*0w+528U8fR*>O@Sxro|5a`Qw7Q4Lmf5&b0N4EIfyj*~e#;_K-8jCeKFt0fw>rYJf0U%y3jJGO~=uAG3;1U6<}Sn=||JH0?xD z$4jB5zf=D%61=4FFMLZfJ1MBdp#1dT#Q74wa-|@-{@U_ij$cds&Ek*hAcIu;JIk*) z))cE0`lIbE?99JpJmuC=olh&Tcf4ORgZh$&dn%@5I&WLf>nKz#Wqyi$mFJyWkaj=C zDXpXlf0gUq@%dNfl|_%uPo-bwdv`KOzkj`4(ov(>)%-Pi&mc&$U)S+fu`Bv@##Qcj zz^8KMAw>h`uhXyczdIdd+`m^Y;s`B1ZyrqEJ0B$8|5y1J$7dx?iNjp)l!G+-2g-vT zzZc`)qk}VtkG?|&srGl3dpI@}N1&H7hPie0w*WUtp?A7LuzrdDrt(9_{Sr|#1(Jb4 zxYj(lzo>krSQM?0VZarBd|s`;x7^RMtvCa%kZEu<95H{qf5&mm>N(j!dCQ~1KynM+ zpXpduWN-ESfq{6q)cl?POsCnxF3fYH0Zb$O=)8G9raaAwQg|BUk-P_*zt=BWuHocX z^v2R7@uO6@!hB4>gOhF{Hkoquv@-&?rw>F8X*!A(DOwui_mtjfs02^C9K5683`_=`F?ig7O_FSfPnUdXb5FJb8~tCu2`yOB2^0P~Pnl z?e?(e#yMU)%-0^Cry2f*PXeW$rq2}C2P!_zlqyULyw%fJ`~q#8`S|D(FOZl0q~}b@ zP1NVq#|e)`PC-tAP8nVmt<4M6EdFW!IsGyJDb1@UwFiNkMUrM3Bv*mgT2~>p#euCo zo|YOJ+k#g?wSNXy7B?ol3cfyf6_C*12L9~nD7kF*isTAm@xeC2Le^sIOW8hZLe2I=3kk2jfT6_3=pk2??VjcADjBU}YLbZJo-g?1uwLz2pm>i;v7LFW*iwA$KY=biCT7o4 zf#4>qz^^@jm3%RKmU3Pw`228N;QgMN;xFiDneUGTD-9!RTLW!-9v7cN@ACxf4-3{l z3VhY$TJjooE$zK%u<>wNAhgE>O|hwSmdEY)Y?mmQ?aMF0hou9FJ)$KFsQqJ0YQt`U zZ9N$!@#)(l!=T!Sfn`1RCGlwyd`l;XBLio9nyd^nx4DOTYhk^oiw_AAprtdzlC=fB zZ;Cz84H*&KODe;ffggJAmi$2NOD^fwj`gz58qy-fmK1?8XOJT1@A&Ml?35}2tg%5WGXxrk*efr zDPcv$t36OliIQBCE0!oeS1gPxK3ObZY*fruj3_=4AxXX@SJR%(;X) z(i~xqJcpl4olBm}n0sJtxoNR!zG=CMDuwSM_LTOJd~iMlpAsJumkduvjADe*!d7H6 zvIW_kY)M9uF=RB^>Y~|2i;Lz|ViZhUR-1S2sPBnMG{cH?i}Z^mOL{`OLK-4vLhgg_ zLpH!05FxM-Bn_Mfu?5>gK7$M3kCCo$SA?sQD{=rnfEZ93K$>9gn8hUzk_HKbR|F<#^3|oV9H?9VESO#YFjFsqB_9S}8&XYz&Mz7C+Cy$ z3Hb`f{4w^M(!KYKW-YrD^QDbpG1yH?k5Hksg(ksMrcnUMDewi*th5!5w~;62!lsj3 zuNPV~$y2UTIOfXcy}6&g8ij5al>|@O!|=@$b0LLpn95{Ng+{&@yG`BRG4skKPiUiP zjK^lo+*U8NP}d@aFe-Bxys0v0*ZZtU*9yl^5#x1MRyq^ou<1G1*t=g?R=9&%A&$c0 zkL;OkqUI8NiG^YqoHRxMjI;bD8j)?XcVkn14p!)Z;eZd3o44k^_68JoTNEUjKo9*k z_2=&Q&K7lBc_lP~;~{&#o62*xy_6yxzDYiwch6??^4zQ5Z-tc@FJhD8q06SoTtN|K z?{5bL4wr!i9|~=v=ZL+Tg}4+TltE+DZ?3JEX360@>9Ttn8uSUiX|^Z)K5}73~35{7`!H+T4fUl|oJ`8@jhLhbtVz z0RO-0Ui>EioLH~lTxJif#1xfTVv6AiK@Mg2Hu`U3(ex~B31LZe3z+h$!BN7kwAnf> zTNG(*$w!vfI^%nT-cHWuMQT`bS)K=W|8er7jK0=AUn(hE2&rqSNT$l{YOVWG2~I~! z;Fd~cx(r4u)mNe=O14CgsUf4RW#datU6Zp^r+6niNa$AjU22ZvE;(VTL!Ot>(F*dV zrmRU>o+1y+07tEFe@l60?~xKEOC*^o6XJKSIWVlAi_NSfekYhj z8JN$-mfQ?&Za)>~N%D{kjB-@UNd`A1PW~yQq2=mZL3dBD=JPwnG$3!u6!_lx#1i&H zGF8Z5WUgtw_r23Hm{HB`r^-A{{vi{qwe7puGME{5Wa>USQO3(#o~}m@vg>1(H$vg8_>F`v8^mg1BVQ%pu$3(Ke@t%)<0apcc3ZdzDo zU22%flmSzO{7i=CJwmTb596P5Badle+gRLFr{ro@0 z9X*TmSLy7`y`oj)tK#k7g1gALNbk&e!hKeCCM~yK>%QMib7$HUv9qQ#wz<4oLcUV; zljJKrHERCaofPdfzb5<@uA1XBuW~DW9@9^zU*W4c>960po-3)P;p&szj5bYu80=Y_dNX$dH1}(c&GhexnH!N`86dD zan&gMYjh6e25Wuyecy5?bLeOd(qFZ+E7wD-!8f91F=L4PtZa>{zh>uXZoHO@*1qp{ z%VMVfk^Ar&cxQ7iT8rr0ltw8!?TCQjAs?YFsc2kO)oE2~;ork&nTBdDA zq+Q+_rOuXID=iwsD0NqIM!Rz=*UJx^7|peDd`7+VYwnnDezQ^9uELCd=Zbc>A3GuX z=!R8iTCS;&C!I=;=G_SBe3ko6tI}`u6E$U5Xy#Ps_uNP=TWuGAdI$LtuZD&zm+Scoi;CkFi|+bW_k0^kkAyUIT@@>+?z>g%evO37M_$2Q zm4LmDsY>;gY>AP5r8l7Au3Tl~+nBl~=c-=O=YF%Q!}n3kiOkDKUm;wTD>~dO{Vq4h zaKAd?s#7uVu2U7{+nBO-REnbcr=yf`h@Vb#Q0l+Juk;5DDL;x`l$HLhj`7{1&!_*( zufh9D)77+s?ap1r=PN>&BkSh*$h{*Qj#!eNDfb{*LeVsR4tEE%yT7;7@zPw~+%X6<^%1 zRlWBOZW+#a$9-FM;B>_g_t>g!-=&t}%1@ecP}4>7K4l} zodI2U)hc`6=X8Vgty2TC6*cZ-KF?eB6c>yJ#N4H;u#AtSE%5|_anPqk*K9@FxMPL^xRYKm2EN=r(#Dzt-YOj{lNgi?y!Vy;%?+yN}*6?;?ydikV?uRd)7!2`tYkiaK zq0qn=VYjGTJw|_%7T+zmLoa zhegl9#_E0VGVh(%W#SK5?2&D=MbuzoHPKtF6)R17WAL9N^U!4b#-jQl%-f-r4cs%cC%-#*Xwg+-Ua zvT9nZNn*UzzTx8i!7;yrHulkduI1rIki4ZTlFSy-3=vH0n#c@@~&ykUY95=?cxi$s}B*Jr)fFwbW72QJ5EFXw#=wVB9aswcWgmC4&j z=LzabhMkzW#Ee!b6YPTOT@L$u;!@ko2QK2Xc6lE{gC_c!FB4s)%M|V7^Z4{c!sI5- zF{7bnAbXcQf4whZqs_M-d_7hsX@5KKyk2nF@I-CfuY|9VGD-@?SybsE`Kx%Dw0%gP ziJrP%eAwQ^W}9rnS#SWj%R5g=4;?m2>1lCPK&(tqGtbHf2zK%7xrCW8b_D|Dy8g(M z)jJ#JKheqDl?f1~RFfT~patV6+pavQITj$<6_lr=cROrgqM~hAB7nOqfO7PXGZI%Y zCC}L9ngw_HjuDj<)EJluxEY|6V-k)qDJrmN^y{kAvt=kRVm}(+iJMsbOnSnDJ6Ph+D z)e}(ip8LazyE-HD zbvmK9C!13Cky3Y0jSSa?hb~MGw7kyze&hqth>tMqLZ;3)2d91){-D2XNKuA6DdQf7 z#ZGS1m(suU>+*ikylXnbuHz2npA@AlkPUev)s`FTT0)6a8J`qV3S}(TW+)bEvdlG- zRF@ViJ$1U-Beg+zM||XGokpnJQ_Hd=HFaYX`7MWvJ4VZ5b<&|YAS8ERd|7$q zbDdi#j@g(RE3#v-EHd(}jy66@Z%mKn-*Fom3&ph^a_^j8HXbnzTbVNX6iTunm1!dU&Ul*dz$QBT(1j^Avx{q#ARLZT2T3Yz?$_EhP$dlNsIpA#w4nlMi+m9i>0 zF3Hd!xXDxscsfyiqco=^+hTbud4Nb-w>8fejU+d@N^4=yE7W^YKi5u-UuL`_xXG@B zQ%^*Nj9+ejmF%Wa$>(VY#P*KTUnRLgD@8p$s4-DnYjWc{jN627GAqGUl_6b z)!M-L>(*<;4~i=;RFSBH35r1|ATGscM1og@sOTu-TE=*MN~FY!2GuXBZLNv9&$q%e zdV%T^RkqgDYM2-)wPHxUA2l}hylwyJ3Kx(>EWL)MHxMFaR|H49qukcsOn9_4Jctxu zk)~dY`mnYh-CcQ~)wPiY5ZKcPBdqAvjmg=T?o7@x?9l@}D`{0|O1fDy)k~Oj^I(!y zIZpYcnZh~2zRh~EYCA+S^uuSn)>#sGKHhUzDAjlbe3|arH}E@ z)Ujs|W>_oZA3lYoj0w_ou+W3|tfkfOQ<0xmNMj({S*-NI8`h82hN+!T4$PI5F(H~R z7Iq+U(8M}i-JcTs1S6RW;I!D_gCf=nrQo=eg3He8SX%+vl$XPO@R9|a#1TwIa0YDQ zgD0$-)qp7+*_0o5nr(Ej%Mx0Zp46m!k!d_Qb@rJ9hgHf{-UHss?lrMV+yk5dM~e+P&|J%$#3kW`IeP4Gtg-QePo^n2LC!h$2Ufsp z_au&p6XnDnY_Lqny*_au90c2eMOoFH@@nSD0xP6*u)xw?4VmQNaYCH)Y=r}_HCziv zfg^U%z}i{mFld>aBOE2HFbBf+J5XhX9h9+f6A;rDT>hRu4i0JO5qw}%2oa!UQvuG> z2L?cxRaQQnyIF`w7IX%3L#5q3>k<3`9Ew7qj-ev(@;v$=&*SZwtY>gBlqWupXBXs& zP&0GPDg>i^@CY6ZC>27z=$JPyi9g1p4DwWtN-vZ^-NFNsJ*Wecqgrm}m|b`bbrb&$ z^f#D_a(q-MhYH8b@#ug?k4GWX3Z+oNcmtkr&^)AHHPEals}O?n!+!uh1)oz6wCu?n zSD+}!0PW2`JjS3H2p|-ov&?%ag)kHjf0TzC#0L>pkulfG8TX)=VVvdRtBTG0JP$#C zf#b}y9*v{%nF4=7E~@6Dv>tj(HQ&K!QoQdw%E+&Rn(yHyc{D(-kO~!dbk$>Th2|K% z1L!NlhCngXH_c@;hLRpn+Ue5F7JL|&EkbR3Eo=TQaOL-JHukH>|Z zui#e%x*%~5q50$dcp)CsW7m(fQpS%p-^6S1n2KLluCok%KF-%{hxZb=3mH+VL$7Ky zhw#wE4^Ti6QEV>Y*#RknjgFHbMu@13s|2|HYRAtfc=#(!aFTRl+`3==TUeK^kD! z;}sU}PgcX}CkP>6;F4kK{=ACM$BwQG8bcx~Fz(N)M14HyKran~g3lknV=?1iYDRSmiy zp$$Y+IY?gRnYciAA(Vk=%0}p@$E$|)`-Cy^eAR;ot6USA1ZfZsLA8i_vMM;yO>hHM zLOfNesHlgl()4SD51dyL}3n5?1|wt zmW`M`)(58&vZRz0%wq_`0<;qzXmFoi0;B~|_ zx;@kJND?fKw3?XtfMSuA<}S>V!Ulo8S&a4q7eK@n{jkT$#`za2fnJ;u5+% z!;!m4#rzauSRfockLX92XZ9Q^QZh#pm;!d-r-*ZC%JNIcv#2Q92}uH5fE&z*pr&dG z_-N6=gm2(vgfLnrLyK!7oRBRL0;i^E3HqF)UlRyHl2I~gTB1HibVGp^1eLgILg{UH zkfGdp<*bieJxV7Ez?9<1RU$rybWy@{fd+5{G7i70PFEx}3haZok@9AGq*Yn^tbi9h zE+tf8LJQa~B?4{W3}jr=st#ROU<{FGrk4^bIB||1DKLi2L+Pcha?>*fOqCAEz~inI z0J>M?b+bBBC}={L@L9kO{04CyU6&EcJ>jlGUlI5K2D&&@UD_%?y+B|Gyo@|ZTGgeS z3W$Lf5k}@LU~HezCg1?hM*tgxUF<9I72ZV1mC{!5jbR9rWFcpj{4G22xsuvY-w1|0 zNgr}wX~vS`bHhaiM~Vh-AZE~jFaMEhxUUj}PQrlG5K`!q8SY%w$9>fqeWaV<&xpt9 zlbP;Es}a7+j1JOeFmQ=SS7f+zSF8A*VhoeQ!3&51bVcUik!mGhB!fw^13yEYN8ia9 zNo)nE*eg2CSr@6mTM2ai@GeN`Dm4rb)sR$lYESH(lf9w z@-Av5m34HINP;P0$#o)OhLfU<=cER3Bod2fsZT2Y?k>SQNJTRv5=(Y+mgEJ;rbG#> zX-z^HC8RcRCK8*((wWpHjUn>Qj8dWm*Un8wlE#qvD5EqM_hcr?REbSy2~AewNVDK> zq^B8`6a`w-Wqc;Nfh!T7Xlh0j_nOM&3JGYmkfSJS8jF9jfV2bjWb7oC?xZP63=Bh< zm>)>5nKIf)4&VZW2|A9An0V9&ZzTNh5RGj18Ks++9rzqcb*OVhsl2s*_V3A=V_6o* zK^H8Yvo0MMp%^@Lfl@>sIA)+?WPeGPvaPwZ_z;b$=LBwP0jKG=tYm};S}x-p7celB zZ5;w{OgSfb>l`pB6M{@f$)%kWy=ByAXuX2?J+VU3-*a%nZ65s{tgaMKt`)gu*e6>0 z+`1tv0tv*ctM@6EHd^mzZ6g)T3`oF0%B-~)JU-)pRV;7 z;<=eY${&Ki&hkYyK z{W0SY?q7N;eJj=~`)fegrMmNFZ8k9Snp*6A@x) z#S9~^-SFw`_7FHN#Yiyv-1@cl5M(AwG0jLc+GyRdeFXtTLYq*8PB_X_T-+RWaKLN_ zu^py_BU4494cA4dpSL$;MIv$d1NC*q>Bjc`tQ{oG%!C9?Zp^lO!Eq^Z0)W;HnJ#H> z%gRLJk`8p%b=$`f1!g8Gae}+&)+5`;kOe4{v;*$-%yv^H4*5U`7`m9v>PC8*HId># zyShLIwOdvt!VBG$5y!o&r?S4%{vj&_IfiOV1LiUc+IO;6kes9g-F4G;u`C$E)Evl$ zHl1#3cgQM0n4+<4t`NsQs#y<3ISE)5wuqC;QF98Ps7nT_<1-LsyJ;nxa0U!S*`m}E zostWw$!8>P%5;S0K!BMFvPCpE5NYeAR^kMN+Cpy%cev+-sZBYJqN1gL&oxlCHJqJs zVvZ&jy8=J`a)Q;qJ4F;OS_~z*j>Ds!zHH{VCevkz?w}wx}oGgZ}z*7Q@opc1=DF(&&^OcJ{(sVRI&3`VhEZnwINH73z zUG7JfCpr-eo01JA!e!<|`yu6(B^eg++*@}2PUR&|W9ISDaN&9P{;={Xr!iE#^pAqjuXLiJ0JzUHf1%%{yv&J)K2-b<>4!Pue#89$faT*b z#zX-5bIoJ=ZOdszo|cXH7|AWU`S5;dIk22KtHz`l=$7cbN582f$D)xK1KZNm^qtJdd`rr;wSm8S`but^eI`8yojQ9}s1 ziM<(x3K+xW2>B(A+REN0)V|ab&+vs>m%y^#CiK4IlJM}AT38R(Vjr{=Q0vu$#TXJJ z6qmS$F}1dVv?34727H9%lH723Ei_P9w-;;GkQ4!35*_xaHSJ+rG!P?TOPaN`UN$N= zVH>;z8Kwnt{zKHaC6;7|H>CX^5F&%Xf; zQAoWbh|>SJgEp`-rWPCl096LheeaDdT(KBSYJwh$Z#wku6s};#h)uA=BYUXL?jBPs z4%eaW{}4$S#xxl#4=~BfUK)xc^?yVX%~3oQ-n+61>%m!YK!*XFUOhOBDG{p(ph?W8 z?HsMh%aVr2N*>DXg>ORVblrM!R@i%mZ|jKY?DdQ22WiE+QmfeWN&J+wuGMyGn5RGsq`Z= zqPVB*$WAgP+N1O+sGl&?og5}Jr9IjlCH-hJ4VyZ`M3K9-Oxjpn0Q*DB5VbSBY`fAY=z76I7 zWqqBbC!n)u{iQl9a)-2P{ANCNraTckt4oQoa#E3?cP2iOJ`3~5c5>zNY76;DF;C(t z-!Z^fvo(tT@tu6RBHB=&^UOQ=A&DAU|NEU%xu>+R`MhV|NgR@@QSguL6wOu8HuQ;L zF5-tIYoPv-or<}}+Oa;{%*DhZ=^EI~=iEx~?Kb%YeelNRPE>B9HqpB&SzqG5%uHw} zB)8HpgAvEQVb|%DTcSNikAvP9o^kIC%bn5|7;BD`-Z1Xmp{%}f`27$}83zIzex1R& z-?byXml-2T_0SFRP6zEB@8#AJVm)l*$PB8p8^Cl2TpPB)eUzx3>8;pmlpHO;q0w2X zO=~`o+TfYF(CLy}rcG-(P}~rnxzY*K!Z8j&0G0CsAe<2~T5*GG2GePqOY`w$Qt{D} z8*($@ozPt1A>i5opJwQW=!^%z={O83F&eg^*-6vpG{+_E0%ILBv|Nsl2{R7AE3qLv zvmt${>=ECBaz(BCuc|)3o1Z#Jk3bq{U8O22+=r^(`u+UWk@B0!Q9K_ys|t1`K9bge zxne80D4UhPD`>TWPdIZP|F7gLsB2_}qPuZ*jL#NxKJj1aSFnN4?v>tKZE^`Z;DyT- zDEGwbWbejg9f{jA1ECcV0Mey1Vz?LVDxBO)sz>QD(A&ZT?iFF~Q`Mu*G19+j8-;Vz z5m?YF6ULsvf?q|j`}gVy?yUc-VGEiSv}$&9Ou`m; z0Wv^y=lB>iWAIxN3$gP^X)5Bq*sA5dFn40Rf=#9&=+ri9<214N^FGfAK6ANc2}9UvAOnb|A#!mT1}GU zNM??bj}gB%}ICKi7vu`j#5 zA#GjrkZ)F*BJdb!0DJBJQ~!P`0*3}bkSfRj3vU2|gwjh4OCF~tpOpxZ=?cw*=v7XU z8PVJTFmlo>2^*zHLj#1n-1EZprT{(^Ej??Tw?i2>`d#xvf76{=zr0|*?_m++i;SV9 z8tANeow^#G*G}Y#^qb}lkdyVYWxS|>`Kk@bX~}E z(JKpUYS~qs74Eu{2MfhAc0scNd0wH|R(;}q#aS+Z=h*7e{=;+bOU}x5h37%_blt+R zZS_g_p|hf09(ksrY(_m1;5eFjv@mvabixLB7Scu2<4hPaqwyOOv$9> zYU_T5ex36F^o8^cqfa7E^ z;<asdPd4HWmxam7~SzqzVaDV4C3a+&H>8bd6uuQ@ zYHif7)xN2lpFWc)AkDL$Qq+p5q1CrjKRF)phBW5r_vd*+$(ler>GKu zk;Fnngh$<}VNp|Sqs_6>E5_6vij9m$_)_b4;s@Bu5#VCpy=v07&$VJp{V&^4Xf;fZln3ZW z zQaF6iZg>W8V7Ph%-G zA)GE-l~pjg(ma+%6T_LZj~*nl3MOzF99}ksMO+n|f;F3_{)Y;s`)%O2DKOn^h;h_ky{v~f-BHG$T;5r!vk)UoQ(hB0}U+P zI41=s#xY@gv2atI#NT{?jXc1uaawR>4i872efD5hlX(&)ho=bi9VCcr z^2UYmnxOyc^`SZAGROXA8khC zt#~-c4y;yl$3e|5za@LG>nZee1Wm|a$``G2^R>ADKZza?=>IFuUnkUqc+ImN5jh}9 z^GA-zevpXy!yZH}NWq-agWLph)3dY?WRN&r!iQ2?`f<*&>s*g zkBK7WFX|BhMYM>}B0v<+fX6)#Jw5>?gdEF2$lI}`CcYE=1lo>eAmtrcq7w~-6-X0h zng(o2tQkw`{}K1*fl%#_|9`TLeHQyZX2z0`B>O&Q3>7mXsf^_+Dv6TaSOzoJA$3&B zHr;enxam?Ur9spsZrg3aNTH2E85(?Frf%Q+e*eCo&%eL>-~F@howK|i&&T6%iF6$l zI0oI;nswNKYufReUI|b0Y|TAv#&zsiqD#UQkZAqjm-^D$g+x)W;Im2b?o>6oRfz|4?AdV<2~ja;RU zOY~>32Go#lTL6h~$2IAANsot3A(vgi;kiS{H#!Zmyp^xO7466cXXq<9LGiRX7u9ir z-Vdv64~TV-WCZDXdX*I!I*=u53h<{G8&TotUeB^ZLp!p3O$GisBNhdf8-r_KjXge* zIfHm>u+ABpyyLx>`naSHMc!9qir>S$frv8zuk*+2RLIdaj`&pOBI4GTIcYMjMg%X) z48p17H=|@ zNYh`;p4d@y1V7F+h3~=Mz|Uz6gx473cQCIY_88o7Icj};BEDu9zJ>W2{u;NKHQ`;8 zjGt#N>n)y{(5aEcD=@VY;N4MYAgsm!@69}iaG>#O^Z$ak^$*%8*31d)hM+Ht^u1<H#1&sDK`%He^XbC48-cGX5OW4HQ#fe50qqV*4 zixTX4cAP0>J5k`s6B}i6jx!8U-sp3l_Js+yJlWAxoU4p|sDAW0FZ<#IN8Z}eY)(Ey z1!aZ~@@y+eu;EFMp5R_9c3X+d7#B-eo_F~d{qlY{NBD`FV4uZC&tuVok zCqH_YbCVH|qPYr;c-o`4INuoaC>>o#4}ltQoI{1vNGS~d1|DLx7M$}IqiF5|OK?m) zjI7jkB&Fo>H}T>*!>CHMqnALGSIlujtZWg;@ESPdjD8eV_x1sg6ec(>egJmc4M-~H z_O_HP@P)c5P75O%HH^OPC6MG*a^@LRs1)jT$q{-W2jr8FCBOxj%f5o_ZSTRNuKvlUvo;A603hBb!kA(mFM z*N|LFU9s7uJeDHPh(M`ei;+mB6zq9YFRKh^M5LT!uO+#cdSXwIeq(LNT_jM>vL#4c zO9QdjNbgyXaTke{O122et(1T*B%NkKO51#_TxK@*7-N@65-eG4;)!42J;9}DY(t4G zPK~g!;uo==4_FLoNH_8LFN!@8r7a#q`f6?)PyV9WlTaG(F@#Gj9!rHPX2Eeq{aUgO zZA`ROf#j&SQ2vWX&#_W1tR3lC$w&PK`j~I212&oTwdA9LjdLt(%%ZfPbX#|!bPV1T zQi{P6Nkt`^1`By(2TG$oZsTlRz#m?*C$e>qK9{^QSjZoXE~R;B zv+S{n_!+Yv8n&2pj%ANaB+LjpnVU}JJoaJ_mUJ;m{2`gV_XdP=n8o*w5t z-l9)H+Z`zjBqd!x)^;={o1}#HE8A{P=_H-d^()bO zjR>^giS3q@C!{C3e#f_)P_B`lp#7lj4wNq>OWh}|?HEcS$rAkpbc`r}lCJ4KDcx>N zxlFo-esXfV9pw`#PWMU4c5eg9SyCMO$%*Y&l-Hy$x=)U8H>2DleL+8gwzsbs-HW z0$SS+KeT#pQ0OqBzl6op;GgxtLw51>8ZMQ-A|!DM1pv}cu4n|Ai;h|_`t|nWAJWU! z%w>2$Sa5|7%uG6$8)PgF+!H3fCLzcJKniXwDRGib^+g%i3r7}_<(s=7H0L})>| z?yrn+!~^t6Vtsl5q6s;AiE#n}wz=;0IRRQcOU^UIuyYEkNg{MBrv*MtNRj02;RG_S zAwKAW_iCVZjDBN$K{z=J;5-bc7@?uN8Gn$@mm0mms6=lj9L(g~jH)oUBF>;U6AxxQ zM?w$gy_;yshstLcZK+B*%iW57CcK z%jav2&NIdlX1dGie9Wjj$BO|Wz(rAwr^2Bk8gzr)+j96C0EmIdSZ0D2xS~>ljYqg&>3u+L4fw$)8)1yjCVMsm9({vQaPGwYQ*5+{l=+ znf=kDAN|(3msuubWJS?tkC)8oy>;s?-oECd?x2i^ncgk>cG$%YgAY91S$TR&ZtIG+ zuf2$+7_oP-JTWI+Ak*W%`oZkqJ>If*#GdX}z>Vw1k?ewI4M z(q&O|QU-brBj2F?8=C!KWoE02cHU9hN$Wu=_HmC3tlNY|3BbzK*jE7=yY0RxKbg#) z^-y7@IWHn6^#*YOk^Mwx-&xtB++;l4iM5OuLNhb=84ns}DeI`r044>5|}ITm~W zZHck&4*V6mU|nqZ*t+|EC6~}Uh-q?wv{|u+@mDf-uX@-mCBrUhD%X``qsDCS$CZ3Q zuadUd)G-B?6Mh-C5H==pU#>(0EktYkfTDdymsTVYhrWIDZi7zOcq3@geJWbVU8p*X z&5*`??^7|fETB5e&g>jJ0w5dhyXq`+-|4&RjGPG{t7Op#%i;?=#*FXpC}}{in+~GRt9VA2IU1&t7puSXKQPA#E<+o-k#nkLiE0@e zk>QHH5oP9vVdO4|ywm3>jarkE9jo|OwKt{=WoSU&RxQ+uBg-rd_mTUmQ}SoDdgl$t z$);6;^cjqh(?R4k*9En=DrHpim8#wD*K=kxdZ!F&RRU(L)?0~Qs-YEmnXn-FR=GE- z%+4^L{JHuS5%4;*UYel-S^EdCQ+h00*I(tB?{yksiQ2#S@%p-*88VE@r zt$GN*r13@P@vgcS@>JE3yAbq=e5ZT6@u~Dh)h|--eK$SYSmluQb$uYAc}v8pf#0jb z-5=zf)cR!8tQlc55L^A0@F44}ePB>?O2oo|bd?f5S>%&@GxSKhT8WUXb{Q5(ZVrv; z9Pq3 zLUcf)T8^NR`4cu`1_;%K1dXiC%2Apx5}+_q3YiwA@#0vsR)pQavFcBRmsx+PMCrUp zYZe8sS@P9d1iQ?yIN;k72a2k-h;|vrke?J^Jc}5vI!mz2I;Q+d^F>ROIMPDUfR7N}-I8?QieGK&}x|#OqQ1xrVOqbZz(PsPn;ikP$e^= zcY|(PYdo>;M$VO5jS2l5*--ykU(_%E;a4uNO9}^mrQg7%>K#Oy9FQ%o9u4CgGJ;S` zCUY%9*mz4hDQeDkB5vSA^{OVBlsfklHA+m#4QNyYqGzO!^%Y{wc}?y|#T;+)KcQ`HJ14Y7n=44p7Iuo=SD)1kdRTj4jq2f>2m^?8*pi{MyzpS(9HbRf{n z?Xpnq5B2(mbDv(KhLIuo7aUam+x*9k)E}e|1MRr|MJz@S^ z@b=ES9J1CM%YtX-Lw6ETwGxD_1uYwfx)LPc>?sITy=MMC_;F`lE>FAbo9Y*H$2)xZ z8%#m5xq9#>P6VAN)pbF&GGtR%L?+LsO9kpv_6-*^QuQ^5h?72{G>j@WG$lJm@r`O% zOaV&Oz6Wt7~3$+}t!+kj}#hDI;W_*1=bMqf$UMzY@H= zvo(jO(KV$?3l=bAwBASnq0q{Fxr;CPM!74hz)m&Z{By{wZa^E&x@f8j=Gs4KBkG}S zd4KR$$NWw4NLUQl6hr7$Ko6iP27XJ${QtzZ70Gf0y&o-w5 z(zsLcs_NdDhsbiAxmO5K3e~U53bABx=*iCYxjVJ5uHEbY(6hWD)W54fbEnc(^}TTq zpKYLa3z4CExup;p&T2i3H$M>aw5vXAr^;3Bcgf{bVNbgSYi7YhZi7?T!Sui3R}t?F z$}2oC@8j@(tT?-26iDw$6$i8?7S}@3uVLS$@@gJh-p3BG*Reh{!wF zhwkP1=1{O{=kA>Ann%Rnc|xBFWMzm|?Te+QF@gR^ei&BXZSEa>j$@y_VEN7pkj4Js zbATf*n7oTG9}YX$-Il%}`mVTK#oP=4#h;+@2U(0RZx36}STGPGMq0=aN1!pQ^Ke&r zi}_UWP^XYEihRe4oD}+k>a5f|-}Q|fgB`NItf%=C>bC@(YWh7myt6mwgw_X}dd&cv zrr40TUANg^NI>!C*J5T!04`N90j^`QZsO`gFgIP0>%Nc%_D zZwy#_l7S2936MUScRpk?K;k4bJml{H`IGr?Lly!={259iodHt*d49^5H2o9nr2~|j z)`j@q%JWmZB<=54zdztfQ_#I6tq*ebR!#eZpKy|7K19{WHx70FmhGo;N#1`?eNwjAIz!Z@XP#K(>_eIS=4D6yS!%{OKmqu@Om;aT0`qSz~z=BaC zM6OFc^C$AeG!a4yyVSERl@Dk>O@LkkI6*t0@$^`|R)Ag8v5-$)FS4$w9ME~1RxcVL z*(4vL)n%Lc1^0AE0I{hkM6262BM$jN@#(XG;o!4fwpnq?A2gq~01q&=SV%7w0-Qqk zaBk4!)IJ#0S2m^HT~zuY{nW4i0AQL+MPDSJRt7w4IuyK=9f$f5T~BK~6!N<31}!U2 z<%9Oq)OyK)mC&VJACP+vjmjA41x5m%!(tKPoi-0HYGm<(f1?Xqih!U-vyPY&sK6 zD_RnV-pTs3K}ADR_mEiui{7 z8ve1ek=C^={%yxcW1)$+lCxy@Rp&V^lnRu*C6%vRh5Yj;7fpUX-=q_~lE0+$)$Jqk zd2v%^uv4dqfoPwFb^j>1iucfus~N~_^RGB){ddf{dp#M)Q3fj84prD&_rDqI?8!Z@ zb72h_n5rBO;v`C4fNu+_fMW7S6g!P_d^InKZ6j4s06Jau?I5%QxQbhc$MkZ`x-X{t zA}%2NE?J+5`E6u-=fxaft#QkWXE8%}5>Xct)F?UwG z@0<0P7{@yc@NrB1HA z3*#&$EZbA2{bPL2jWZy3pMnJ*)mAj?;RE7m=pK{;93LEPqG4Hq!yLYBv zh3`Z3g;wCKy&!MMM+Mg36Rt7nI)-9kL8-fAhtv-4W7;$seQpLSi&+NIK>{W-aH>dn*c zr8V)Q%U0SgF41kg~H60^BFQDSalt3Ty3- z@g6zHamW_BaTj9xN6rCo3*5N)*5Nnjx^Ja_6a8G=suE)c2<}g^`vc`hx3<4o&iG~^ zWV$r&5NAnaUgy=W)|Qy5k)ci@(iQp6aXH`hxX-@!(;G(|vgX%&{Y!WQx|`ONO`9e- z1pltO&D#eBwWTC1@K#l~WRWTNRqKtb)RnCE!+GoEd5)am7-!E*2Sv7Rg!*W{`XPBc zlp8dI65FIfnPnaKR^AS^2I(Nbw*3iDfEAalH6;g>xBVkeILR`=aEqTF>in1eHpRVF zyhCS7v`vBM*zrxZK?H262?>=Wsd@8iL1Dm$t9%1)12C{uuXD*UPLHm1v!zv^LQMNuE4ctIIBP9yhcD z8am^nOalU&=1@z*FgLYW$aWPHoJRL>gaVsETO}{;?l&c1viY?g0K|8xXkK!tGT|BT z(8y9YP}-u~Xw!$due)w$#j8wd3r)6_(WP7=>G9op`COH5 zvkWS-U2)l%f1dYX1ggB^s~?%RQxMC4%QGI?!D*nctV;_QtmFIfE^&8s)8tm-1Xk0- zoQ4c4YQ;p*!W+IzQ)yRDixSxK<9Hvq?YS$CX{iE*X(!GKY$Z$}!I$G{aA}zU#O~u4 z^3IH`BH=V&!CwBKyj>#@mqLygGviR{ki(?6I_(3`Y9yL7OmA1C$t?Q|qWCX)@gq~5 z;p}z|n!<9BAeH}(r!be|S_# zmJ9Rg$i4qgLyC1=HMS%*&>rFOSx&{kBIw+h;MD|g$o zX&Ni?%XwqjyU1cfl_86){p!Jdmqm_r7Pp&pLtO1Z>e*b z`!1~Gx+*S*GVR6sQDeCKL{??h8W)#L6<829fhn}gAgMgKBF>QDQ&A=6Ldv9wHNeaC z4c&C%3^C-|j4jaZXTDmYaQ1%~W_K@%odAZ}c3d67=j@0j(9MQ)6OLC&xNOaAfeq;k z88e8QNr7k>u8t`5#J))Viu(_`{9OV|**YzEH&O_dfdu9?t#x-^Y+T9|E^wa4+;z|N5`(1D^!TSnR5Gbj zSKzBQ*tEvoDKQ#cKoV+UR52?lAx-{=GJi(AGDvWqHoHp`Q;^a|*y|^_PM5(uWa<6z zt&U#hB^yv7dpp+CcS>DF>@`R!66#*7M0pnO=>0?YT1yv~0s>9RG_J#yo-IYyU+)@F z)~Fg1(}ASpq`VNfT~~E4C^P_^gdtDj))NEHHLeYD@9+d<*}dPrQyGZ@t% zC2M+XhdSL-YFIDj%(PZVywm{%2s^k1K#khmWcn29sevGU+HKXq(LdzF`i>S8wgO3WD|7!xG#r9Xsh)rGTh|s~}oe9v0!ccDU2?r2sU* z?I!#`{4VIAhmQ#@jl@^tl7$Wz@N=;C?tDwY6fQ{h!_VRDiF^}oywKrlbLNW*9WFCO zkiLL9y|04`qv6_I6HZL4bEE0)C?R!@>(Btyc?c^wGp+N(>ROe#5-O)fxb5^6gd;Wu z&o7^r;`-__Ho_g;=GJ?W2{l{rrIyr(7!KZUsE zy}fcmv_^sHsJB>NCqj0sA>b?Fsh)Fclzypm_zkM4V$yAbx;m zbf2?8mUq>Qqs9aeNcw%Q6(_7UVvYg(=Lmcp3sz=ltQB~(oJ8gY3tqm-E9%^*HX#e1wXDsmt!tRz;pM=RETPbRlu|^gCwfXe{R~(-^)3dj&687ZX0Z zj^oF?gxFyKC`sI^MuffMvimsSWVD4jj821Em1CktZ8>qw4~SJr9g{k$z;MDYGx%XZ zV3K2MtdbKW-abwt^9-D}4V-@Sy?hd6caJ7=W|=B*Gi(qZYT&J2e3@48XzUQa?Novc z&mVAKW~xZ`dy+N8JV1 z7^bwCq|Vxejl|DL^<2PKmTc0Gbe*y3QGtqeDb^Bm25Qb5Sx`g@MboOl;FR;ml3$QL zzmytbeM!HTY%w_HvhnyY$~^~5ZLmj3?@AsT>~#K}^$VgWv=oQ+BAqN*Z?Mw^suuIL zr%_8&++)keRC{7dQCI`gwvv>sGjf1HTVVGA-kjn!qt!Ey9VeNx1kN*<9`{l&0G@vW z>F)%3Mx$p6OJfO0LKIEKT9KCZ7jnmxd!kD1u<=3?o#-sY&k7{%5_|nb*O@ZKL0N#N z9KC3#OE#e*_YSUS?<8F<*=vwmv`I2@+u&~YbuOlv6h*T3uJS{oU7*pPaSDBF(5 z=9FD!S76@S8>x6)_vpn@OpnKAmtA7-#=NyPvhui2>NTMpIv$%_c9Z=I^VZQw!6OlT zNQI((e1=|jfo+d@Yhz^Qkx1$_7K0D!LZ`lvb@$BZj=A5@W$9F}adn})!m<%TZiboD zwjCNUcf=4rL8e;OHHMCa;Siqaw!&$7*GT$CSU6(H9aLgbfrN2=9Q9T#Ag z=#-*Iiq&eaN9f8h6GR}onZRGm^`bYxZxi_7gx_@+{TS>M;PD(wrxWQDhq z1YadYse=Zw{`N6g_tE`%Zley^(z(#xV7Z7QT}^lE93Z2Mb&%-3unUMj-3oW>+{4=3 zwNUUTvLbC447`WxzH$c}IUTMDkjja$V#GOJd-sH#X-%$phZlVZL-$vgE&1j0<_@6} zoC3xvI7qp78^<(co$QFotjE>j%g;*@udA=HbJ{dPaa$)5cIGjsn~XU!NBs*JK+i z$0>#%(EAm-js+(Q7a7;!Aim`yP;D{|b>J*AKUJ$Cm`GfHZ{t}ax|6hi&K%SS(`OI*DC+jVzKbL8;3f1A< zW`OAv9h8`yM%QpM7*3ewOxh3CxSDYfo{K4R*8FZ5t8$tcZ{Rd{&0=ej7`;&}XZSzF zV$LZBI3B?)7XfKklXIOh3tzztWMUjghZ!rn;JJX&3X3rxMRLwF9>5{Y73bYdFj`p0 zS^58Z$h7Ywa_hhSW3c7UZ&iqK8WrJWF>>Kx$>sv)YqC7+Q7JG~y8!nVO2!HDJo`~` zuuFsBW|$zCw!8#6p6#d{SfTx66oVVQk)Lfe6Am(nWPj99tdO!B6lIdIe#@FOr|e-Td3-5R z*R{m&r_V`&J^mH+WkO(9vvQ=?U=mx-L!)FfI*Oq3 zBC}a3Qe*HKTg$_)U?DKSNZdqU>F>iUP!;0};=RAo|o zFqJLop-`fYb|55W&M8i+4IW{uc$k$0p|dI^Y)oQp$L8**|C$AkAa*`nY*PI zqCno>3j?{B<_kA!j9VXu8bKWbt1-r4SlAD-$=g&-mXsp@T z(EU`_H@y{x02S->L)jKO(NJ*{MMG{`2}s#uW6b-8S)%>^CDw`?l$hv^g(Qc45ayr~V>n|z_U66;%UiF~)v+)|VqyJ^ z&DiXH6_%ME)%A8kiul618OyN`_pMmbdc&?z>hBa4+Kk26_{1P!f@e@!is1rTx=ImmM5m~N@rEAIsoOFria@7s@yV-JBpPK< zkmnV9Um8vc_a78xu;z$0d`n(e)s{Qs=;>bODO`V~q|cx|W&O(b8$KcLuS%g)P|(g% z@N>JEP0=_n-`i~%M}A-Zm>8Kp2tSYLH83nBpRP*Dn^Ef>H{41-UA>7InK6hwujF~4 z%*^LDenI-}fwE|y7gf#fk-3A~Z+Df+8)}hltB(>UGY6HKb5^v<83?;vfoubbU&3lV*nN(v%=`DE34_nkSvYle%1)ijOl zUoFUmHms*u)5v9EhTY_CRTX%f>{xZ74Sqy8F4>L0PLEZ4E8Xi?cEIo%`B2p>{7>~e z*>Ik$T?Llb^cmH+QoX)q`waWZK~-(|#BAw*Rpj5pV?YvXA@rrc&OO$ z{y?3(a0qhEP}q%Eb~7nj?al8udfWoM?eD$$_c!a_`aG!hcTQFKlKMEW?u3tVt-p(K z8S-1*6Q4`9Po0-w*Yx*G3r8okyg-?2oA+yhy!(fmr*4;vU#z(XBGiw)eKcw}yDTYw zv3T51K2x*VEvo2egPvL?Tz)*O8?O4pB`W`g{56O7Ep=Kxb~VRbKNY+XzXm>&1~TsL z#MLPMHG}sGb+>$yYrndD%3s91_pbXVOTTFG-mH$6G zE!Vs$B647``aEQE!5c^MhhK&VhBQBWlvj1D=&J-6mRJGn+c?Kx^RieVshJWHU3)9b zU;VOd;Lhgwf!^v9#7pU4wO@P_?o0d#momSKyvU948~Cl-k9aBLDGIpr!uZ{{Fct zi5{@6io<`PKUKRd6S$-KkZ{}aRO_;2pf}LL|8d$s5t}O?Emr?<+E@K>3EKa%Gid-W zyMEPH{2BUJjTgT(8%6jI{93)0cqU^rDoXjqL1BOWOx9+VC~Ythp;iA${HF0qr&&Bg zW~~55*|87qQJs5yk_{?z^(T>b%(BY#DK2;A!<`;>+|u5K*WXduh!k5xWNd zsE#7O%=iNprSjrXvqMDkz}M}$ zLsGXal2qodOuT;74!rkUc1a3z=fEIk-gT;QNb;5$XmLAL&$~?(JFZF91ugFODg}tA z=&K=19q6w0cCKVNN-bGI11Pehd3)_jhNEPv>7xCd)4+;rW%07rqSJ)TBb6F6S8Bm+ zu~ehQjdO1&j34c&S;@aGz2pSJU450I!#BWvf;R3Wr$&5KT%+UWRFt-M3A<=C_t(U} zNBuRGZcfF}6<1$VM2(Xh*x0OH!YvxhZUB!^ozS5hJ}SQuwiWDFy>31e{I5Zat7^7+ z&^^OUo^6+gs=N6RCqbrGl@L>aRK=NlhO`y(v=s#=;uz3;(~@B5l1rGTtbt4&BPkWiH~R}V?a98j(OK4VEK z8c?iNBOEDERy8pPzy2v#b6k%V1sp=l{8zCvV zJO@I2fwroHdD@+c>;a8h1p>7|2h3PNH(e)eO_y^)rFq(2@cQPniK0$!4=v~}Pd7(| zA-kegkDLD*yrr`|$6PB+qH9aRPSvZxsppG^$#?B8NK~bT3bM_0-b5GBHYf+L=LFE3 zRKujYCp6UtFr_XUBy-t2d3~^bXF?87^No0ySHX_*;9u`<$v-7;;jmZY zVL|z+4HjX0?>@{sC1+u`SN>rIRIKW&yzO?*PO;fIkiyOnz0F)u2KnsKa@+>5(33!R z2g{Yg^6(80K(KnJ{8jtC;t%IH40qQvz=``tkk4Lq-s|&r%3ZbHD+i`52SR@hhR&$@ z;%FDkuWdLG_Vlhm^*>VD0za-`kKIR&+;`X(N4P(>v9NP33QZMz2|HBXUIV9roey27|C| zcPsL2lTaT_{=Kf*{M0Vsd{b}miOwXIAKMw>5C(Ax=^tLdErLULAC=pKv_yLI^epd^PP4dD8V;))#Z(c;-u!daxyDKWN~6pUQ-$=6td7_pRR> z@MlwC@HNi<>?i6UWa`bDZg(uIf6%Dk91zv?BIH{4qVgqCe`5W%fU`|Eg5x^h=X}w6 zIv?=5DJl31XHn#mihp#yV?b)ts;_@Z=f|=pt!q*IfC2nza6LM}ttlr&u3J6B5_v%J zX+*twKv+{($WorA_JOre@%5yDcJLBGQQW<#^+BQDCg4cZyO1U37nP?eLWe&v9h?my zo`%-r0=$||hM05*W?Vylpw{~VssD0UVAeI|16og$>g577nl^_-b-l>Eru6@q>_C2` z)mN>0nE;h0)Bh?6Gzo_`|95Aj(4_r;a{)){RRYYKftT&>X}bYDkb z!C7%T<71mYetd4zcqDYZqp$F+q@CF@$B%;N;*Bz)DjlW;OX|lEAD=Z1-!aWw(*L^a zxqWA2ei(Gel(|P5#IWNVy~3coruj>z$80{%JXdNQzL%y0x@fqMz0ds`o$f5dZ>~FL z`SJa8%SNY;D@;h62QG=vI<6G%kpy{x8_&Nqeh9O=bBOU82J!-3&$l)@buP<(JM!_@ z=YKYy32V7?i1}LjrsY?a=hRSI_LAjStLIUTFGE}I9V%WjIVSnB==s@3yRi7XpYvYJ zfwc8h)6KB?JD-_LqQ}fW4n0q8{1&>xSVA3h`nddDv{5p2rC>?st1c9#<*UAVSt;56 ztJp{8^W%-Qd*=!q#FN*3-Slztxkcl?(Eg5dg~IX8k;d`R{(H+P5Fc20P74EXU57k< z!CTk!ON}e{px!ATOO;fyZ-!sZKfZZx(C8gn+2L52D)DXoR~zU;2e4=xsiEy1BL8Y% z|JN=jc4UmxlYLynKw(=@MT+%8jP!^i$B6E$3Pv@0AWzVi;j1X@S?6&TyNy5x`+{QM zOY14&F2`3HtZZVf-^Q#PY0I5;+~!{4DO}~Gq|c(a`Bm(N;Cj&L;N0&Tbk&Jkyg`w}XotWh!gTtSY-YCC&-MWpp#F?&ZIa!zGiXpF~$ zz`?tbhn=T#XAQunW>&bVfeu~sR+gZ}_;bMvRDS_@*L8FNqOy#m&wAINVT5Gs`55gH zdrl&KR&`ve&$nWqb$?9INE;_HTjr4Z|I$J@i3T^O&j&!bdUYn#V)*$?YcyB+o=MTJ zwJlf>u5JMp1CzpC5-saNQu^)T2XFlEq$zVznloh4X{ z{vm1MB!`x_OQvP>A+1-%G5^uB_CBluTGmU7^A@lAW6q3jz86*Wa%~IlknyXhARjH9 z$UJKu9{J;LRQ^l(7KhI*ty+ieMvrxTDtIa0VtmNz)zsnk?oUN8MOzF&KKj<-`dsWg}dzkp9=&n}2ojeFi z^IB1d4Mw+hEXl=h{H*xuV(VXrFTClybCzi*6TkWMR4Z-ddjfmj`&Ikl@i)tb-xU6< zg&lA6S^Cw9)|JsK9ZL%FmY>yMU2FYt_}QC7cV07YO2u!m_^kZua_h^(EpI;GdCj~j z6L0ld`_--1Z-?jKXy0*QB*W%60O(%Z+I_hA&AB@cOlUotj5FT+S?kr!*7?KV8`s}p z^X8vXuP(HLxb>UccT$<(q!oTPtRcNtZ|ruEA%q8ov^|^78@W|9F9G`0tC?xzoE@6N zJ~bsF`pvB@(5GI_Q^)gqxhJ|WrO#^*eG^W0{JJh>&WjA?CiwAw(0TKu^HS~(ou3mO%dP{N^F~Aaz(mKg^FYos%?5Fx&-y1^=H0&Y z4f&&~a3JfMa)VY-a$7Xdb|jATf&NUbK_+NN+aclP=9yN5WRQ28&U6y@`>J{K)CQMlam+F0K>- z&aJ-SA%Exe)zN+T`im+>oecgXIZa*DuA7DybnqLvDtBpGASqqLj~;E$rpmTkr%4G) zL2`PyizeB=DNRlAJAY~vx@T5Q6(dC zt~a!d72NXozQeFYyGfdz;44_+{8zEM{oaapyIq=s;2fCc%y&!`4okM1Ef@2hxbydZ zq$ySl5DEqzIt5N*Kid?<(c%uBLMI8@`ekbYmDl~o`%WdpNovIkLOh^=x12XC89xHn zPP~M4xBEc(VngKs6SpM$r%tSF7 zQsBO!awIyF22+Nw#|GdV%Y&uvQZmEE9!UAa>#=+&Sm`beNm1(LjIw5a4TP&3;n1@glKg9LH`7MiAwW&p3#T_u5llI z59}uL7)DSuo!s%6?f^>$8HwlljaDH#;9DS0$YnhEyvO(8#cEfAV$C?bfeZgxywD_B z=N;a}Rqbd3Rx%Bz>1~~HSdWYC7>0q5dZ58WNa0~yu58CC`c>FI)bcjIBv-TJI(-(l zf)(T+cH|BN(HIIA_$bl%X54ihE3h4?E9l)`pcL%DmFOs>pMim4EE-H$3lH0Ik%% zaR;2ni8F;uqQW}Zzz2LZTnU$S9K@yBMrOAtke0C+E{H_M8FRW1lOQ{wl+4EMko$M)R^PLm|ch^&rRnd)(+rn zNMLicRsXc>rV|nB14nDr@D|Lyh(Glg&rT@R*x-*a-yxPrz^6*7X=g5@1D%^$5r~1% z8XVq>c@kk_5a`leIzg@R!>>Rl8a@WALnw8KKjp0l;SzjwXf@!IcFZ7zTSbnw31}P7 zanu-K)UDUIr6SwfIA-(cM~)2xeDXxEZ)-)awHZK>0**LC2C1TFx<#NKgBX3r9M(1U z6zGEpMkga51?ifScIWYOkT6cGY}JdwjrMZ<7*4v&tk!ig zmZPxu97{k?uaKY>5nu2wqIYHM?p!cNy21Iv_<*v~J>>CTSPHlB3m$ryagsPlA}c+x@?DvM}z%yA>VFvig^R^MNWW>$M<>%4RdabeRje+5MiEN70!|U zdgrzZcSuJVv3y$q}zDX{b?c9OJ_^l#Oi#t%|%7MFS%jN-0~h=OuPZxKN^;1XH6}>|4@0RvU4~k@Qb2 zBgJ_JP4X+987ZDK zYCYrFtt2qsF^F^-EM+T^4wRaC+{XSWS%6gx4vbySjqNIx$7+#mOOEP;QOXInMo&C; z`1nzSNteOnAZ-zZy+vAN&EXbG#tcf+exx{rtqT|E%3~jOxfx?n+mOPdNctrL0;tAO zQ1)Z-rA{92SPyZhh%*K~RP3y9Z1jsrk87zrHlK8owH~*V@O#BC;ys?FG?IUbfcX3A zU*viMOXIK~pu5|AwnDxsJ{X!*k8kNdY(FW8)rL)UU&sCxZE13G(qpUlehG?2>1pQU zhwQy*OXG`wd;Ga=zdYqg>FNB(uh{R9Mf4h;_RE3{G7A==&k>zbV>MuD_Sr2j# z^~G5l(a*td!ILl`wVMA(fh$M1LJYZ16i;vNSVPZ%Wx*vdZCM+{xO?dH@FAjV-UeB& zD4h$Xr~0Tu;$Oi>srYa%hTaMDf}hk|?-o!5cCNUNZdj!*Sh*H9N^pI_tk#hTKBZvN zVN3r41K%^yJLvknpix}7T>lV?qQBxlWi=qwHVN5t^G^}<)1@}`8{nXQU3YGC%M#4tuU5d>l}N~8P1RkTtsEk{_? zIDmMDzCwJJ-inApjqc@`2n!mmN--Lv$2eLHI|R5W62P~SRAO{S(?H;eib>1*5!;AH zv;%tmz}uKMg^1Q2!h_-vk+X}@f|$}>rt>XE&4jUxXh&j7hOnn$Rst3wbJCPR_EC??l8w6I_#`DG6lE`ay~oay-_f^n%Cw9m zDcji3gnjwmtTGiN9ZDKodacLz;mEp72yO*}uNSo`scZ=kxe|4>C1HQ&W5tVVlp}0q z50jEW^fki%tjEe1wJ6DKc@M1;TXY=Zedc4OiyD-8wzkLGQU(^?;~`y|$3{v zLI3R`Uz$ILUhoj1Fci_99#RzPiv|=k_K-&^Yf)0#-#L0vZL zuE&(FoJ*3*qyu}tWVLL+xCYW+^tPut;um3&=3tz7-s1u5B<8YnAal-q(7@vo%O7*u zWl?d`g56(o+c_}5Sw7NXP=a0PafY=S6XmjqoHS-%_5h1P%qQm;%x0NLtAADQg)5aT z53miyq~?QB%0HF+pK<%|!Hzx*ZO`|X{l-Bh_9YK6`@^IbgVCSR7!;I^%}Lc|6$bLsvmmIY>?OJ81v+=8WW5du4+*Ira1^M8nY^LHrw{_#KA zvkWF%wlQPhB|9^AgD@zh%brrMqD9%qn!(uBsZug@ry`Vg>sXV^c1a~sgR*4JzKri{ zhPu1&_x1i9-yc55@#!z<=$Ov)b-tdD=i{NP4e4$;#L^}Bnog~Tncc3e2A#(f_H%r|CFqkz1D|Bvu)Kj$$zPOnL!^krb4;UhZR$D0aN%ECr8eE1A98p>oC@g=lNZEu%%ciznmLnz z?HDk6ku=ZPmM-@UccyT_c*n0lO&Ty=+8pv^)x2_?=mjRxl6 zakoeYrlD!`yGK29ws0P#SYXiS|IMJkrf^E8x4rlX?lI}OX(X4X{weNW*E}G;|7!AA z>UCC4)l=x+jbdgT2T8z0nFzj&c;v+<&jm@vM@y%Q&UHHuF-bQavQ#8*d$ z@hBGw=pDQQ>2KbhT)=Os7~{-Wx|gQw@b}w+DV%vr z`P}>}6@D=k&hQ;}BDi~^;H_mqbRSPCFWtXk+kL%2(=s5YkFS*9Eud1%|8#eM!4u2L z=sw<3xZ4SiN)>D`X9>S3fslgZRR)>2hBOr>_$pjkLaDW?CUKVugQ ziOWQUxWwJh1E`Kc({PE?a{X$RFlhFfqk-X+X=QqsK%uhn(d4I`r*-@HR9*ofM`Y~N zJ*PGM_W_MR+H_rXilg$0|72HR;c26fgs1GMHTnfARl93UplUVTJ{Zm6uTKCJuo_*+ z0ew=#DdLy?wY$!cHlvqN{mPXe{V#PznXC&>30A)HUj|11b*?FNKVxO0e{JDr%#v(B zsb+7znz+WMGjcVYoP8hXKmGw_oj;p1zBBH7m*7yQQF zbi3RxGusjZ0f6l^IX;;xy!LI(bEi=r$+%{*U^{lB``K-L5|w|=`9HD&k+3z7g~+k> zZrE*nDwS)^m|hF0HQ(Zf49|iGe(iRMoE3;50}F;MYU8MIIu=0>kt?nR(v2J-M%))~RUOei8d%X5G%Ebe-KbwUE(MPCB-P$XsQ7!>u z`(TfSBmp4+C2Kg!>?ht5s#Xj0U8o;R>4pt+5w+C^$z$nrTFtwNF+y=_EWTB7>P*1U zv8*=OB9yGoIm`(4v4DpSUC+@ZWTSS~N2$Rztzx&YbaRVPzSnjG&ig*AqP>tJ16ja1PEBum>rCOSgD5!{^-90STEKmGf=!6u%6V zhYnSNRjWBedM6y?wLv(`F|5@rM$A`>YF=Tccfvi@qZ*#4&+QtP-0^zMv4Lnni;%q< zwHbIlPlZ|JeJ67ONdKHNBS_zbAYUc?>)5*&dY}=tbuz@a@mkS-rR$ zMdNja06!s_JL6N6xQhOYYxmBT@ZxTPqBFo*K0^zHErF=dTc!Dr*cW@x3x7S=&Y!EO zj%nUtI?w<0RJ$f!2ePXBRWLU|{hjy2mVxLOyx@NGc)N10r%zPE3;y#WUoWw5W;uUH)&b%=9KEa&!(OaWvAFQ|IAl&AULtkX*h-ZOcC9`pWI-rO z$6xZm^aVuug>lE~M1}WyU`k~;_VEy>;pVweS|B&YX=72)2?&C_w81Yb!kiM$W=sZIDK0RROC zP-kQHhBZgAhO;fbdOzb`n@-OmutF+aI0M5?$tBD8DHV{HYLmz1oz8Z81*YC3p?Y69 z*V0|k*ru61mfXGvzn`qo_6lqqjIS0B=UAc%KA?7e@Opjse#lFr5gi{Xw0`vaOgZ#0 zly<_Wbqp%-byVJUfu+;m_1|N>>F|O3_we_%K3kVT&wv4VJBBK@>HuB9yW~k1cxHiKxMj&I6&RGq+K&N^`M$_AdH`Z}gTgH55Z zZ;^QgIt@YSI_Mw_{7_+M(c~k<$4n>WJND;|>L>;|QzD4K+M$s5Rwp0`-L%U2?R=hU zP#>kF;Yj*ph7+g`nY_Prj?$Td6N(*Lc~d(2K^H0C$sbZ5vz}1xK<91hum;sMud;kY zbV!2d_7Ei^@jTNvxeoQbVIA2ZJ4zl|H}yQrH>D2UydOG{sDuMAerR~0?nTlM#*TEI zXF+F%2kLiv3DcB;hE@J=+Ij0bupn{DM%oY7j(nZ;ASyYO_=D+NU>-i`7R8_;H0{Uk zZ=QKuK^~M?P(~s7uHICjzI6oi=hW^yVbw1iCzU=dz zCYwY^T$K^nHC*QQfAMR66ASUHiVOyXe3(1;d9*QHOjXe1OqD@M=-m95(H23)XqWAg zJu<|6F8K?8i(-rmU)f#=^VQx;`1D-=mnSWg(eHT6;2tNcR6^Y6UVaH~0mo=}IPDls zStL)UzGE#@^}tkV&ki<*bCh8QKZY>QvQW6lBE)6xK^`#WA8ZJh2$UOCtAarpIIxL2 zV_KCyD=@5Fe>C|SXQ1xjo~kQgst;<=djd5F_kmIZx?x=uWS^geOwRTVpRW5zc*Y*6 zF(^=_I#)yfnEZ?@P=AoS>SoBR*^9$d^&eB7!2&UZ4D@sY@VTtpW>t7{b;+oMLTn^EmJww@yUPcWnSA7h* zG#f=;7Y3>5S0T$Fx3JDNgC1n8N(`wT-i!gMXjD}#JrYeH;@=JFoV_(%UAHbcgQ8bY*jHs97Q!!-MCcdTm^qP5fM&vL#MkUoo9a`~nWnMf|jbGX)=CD}-mK zI&S!_yqRkEll}5 zB}iA>^2?u{VmsN;vMaG(%Jsm<#U#R}#rG%j{lW4C`pEn#-=C=WcI9zivh^ylpP0bA zjPE<@y?s#h=YZHiHf}yqq|U)v<@!rZmTYN!q9`4^pxDn+_42WQGo4`T;LAhl*yDp@ zJ|pX;W8W~jus!7a1NGc)*07!{_68G%X9F9Q@>vT!iSpT^WL6SBtJE6;X+{+4x&3VP zXUQFD#w_8pYHSOW{dR&uzFs5t8K$=g%%t0*OV z*O+o77#p<3A7%rPCd$ZnLl2U9V4?5AH@IV6j_rl z-k^sY0@&a2K9n6WdY%~s|8g8ywmtcx%mF7R^5r5JIOwxq;+>WO#%&0!vqq5_<2~U~ zrXZKh^TnGS$X<&wFafz_p)Y62@OW8vd)`|z2DD1D=$BA3o+Dn6oo3e95o!dJXV?RI zfJY-{)^f+AK{Z>^05gkA>@&RdQ1W&i885pLH)~I}1lA3-OoYjbHVEz7v*+`oWh0Ei z03IK&ngr(FK#$=@x?nb*w4cXMD(nhacsfo}GCPv=h_@OjH{@6yMC?fKcAOhIkeq}= z6lu5F_JCZ$1p4gipb0A$cZejhm~kcTddq1K}Pbs&5pPRK(BZYz1+`ar6` zUN8Q2xzG_g1>qfN$t4+!Au z1~eeXG)SFEH3+cQk_N(yETmMk8w9XgBDt0|rU+GZgRb{FVF@mVpl2ZB%n}LQ@JJgl zOXnpOnzazp;5QL^Ru_`T4s;8X9-Dn5bimyaFR>Sr#`bsflOCA8BRqryeMj7wOgBy6 z@d^3T_Cn&0zT>6Mg>+Dk7$Qu=4H0431^sRbGd!OmaxG;{y&F!SoQGL25Vgm2yE#bU zN&yvS#d&rg#f9)U-(8fQeO`BMDsQ*TFjO-Nt-gnw(?KjRHWn-%T7e z&jwU}kai9RtHnF|jiW$*4s{&_*G%CQkw)z#AVSYv5tuto(f^r!pxHBO`L-+~@>dvu zJ!2?o3jrqEymOv(jmDNOV7{CvCmK7GJhufKHhkEgj4G3?t6<_Amc=P0Y~>;Sn_#0X z^O!76urU&x^@r38tNEX02Z-CPacmwvx!Ik=n%4Dh?yc zSyZXOY)%9yP7sc%z1Ej9-KjWa6-YH;(Fh1?qFtARh{KVCkK&KXzuuoUDy4{Z&Wbn) z3>*qsZ>0jTXz5kr$ayg7?#n7c9kG8Da}4!bChIS$qx8}DF~!$fSyNK_*o#@;ksoXy zB_30Kjn3MXV#U_TtX>{Lyq3&rkQ&O0usjz(BKKN7YgkGaYnPRW)U`c#c|_^8Zq^Se zh((QdqRt*bfPW#z*XdHvuxGLdBv+G0PGosvr?Uo7t5-&}v(}|xSn;e4yLr~v`BLdv zDl+uod_2ANa4X9I6>2vhJK~wOh4sjaJ+#lUEW_GHLG0c_(f*7!?8ITmYgj*-D+!03 z9Y0{Je}*2yZXQx`d||a6aKQh+C^-BUa0s9k9HcY&tgMQTIqs3al4D^l>zA?L>PXR_ zj@{O@DX1E zF~jgta>@7FW$~rKaN3Ce(DCFw1>W&EGrzKF9w_5JPK1FM>R7bTzgV z!8BRGSSfi$=9fI7CSgU3qEEQPV}rVCtd!yk9662igc(U^qY}c3KbpcyxWc1|ayH)J zsZj9IY@8ry@?cC#l3Y0|v?wkATwsriea~5;>%-A_l~BrqG2h^<&;+7{PTqf~*g?7;EixA!@!Gkw5NDJ9LCq=Q} z@gwYHCGe&ODLbNsAzoFahe;I?C>!_z{PT{kY@izxYIy^ZgC?Lef%gQ8hV2@A$bY*N zn0hp@ok%~UHo}6aqfAjd_DIGfq@QV9+JXT+CqYY1Ebuw16b)cQGk&Hf#{ED}!oysF zaENVO6U@%{psHgIG2N5vxq)rUNJd>TQb<}5==lg{)>ljvQV-!-?kPFy7G270Lscgp zVz`IwSqEB$!zTBMhnUAri|%9JX52@;HCki4CqpkyNTA*t-%mLNyN7mUEV_(MrFSJx zB?G&HM$uQSa)ul7i3xqO-G@D$fwnxA(#w6%(2=z$4P@DaO(uxF%=Z)>wTq^)h8av! zyjCVq=V3<#!(PbtAG5ZtvtO;Nz-A zlUVHxs>RDBP^plh4Y%>8^uf4Fk73dJPTD<;xWF_nzrVE;fk~kcyU+hN?AFx>Z3c)HmaflsuR&<{ZNal<8?4#s30vP7+k!JuQI{fdvQ=NMP9#41FX%W`O;L#yP=}hpnG7XwCzH4D(~`M=YEnaX^@l)&H}$7 zJ?{c?7Bi-U=@GkD5%ZEG4YX0YF;xHv6KE~@T1zU!s^yN!U@M;9k{2Gy&%_&3`9U-O z@lHaXDz=K8mj(%WJi^nsCOLv@)qbQlqYO1iQ=9R2ja)@%B1;$zJt0&RrEa4nmZ>?PPJgf$I%h+U8RuaU$_#q)v4E@cFbx&Eqt+%OXO2rIRV6uc-qEpU&&iStET~GI=eCy5 z>5=opwUKg6Lj~^`w1vy@;}l3$>GKTM(m8E%hdn`9{$8>p*Bw1;uAFq-DN?V=z0`Si zYq6Y{a*Mc$!UIMp2|a9g)UDw;|B}nUeZcf&TF>q~($Y2c2N+D)#d?q~H= zX*0-KmE*t(kd*#=_FrOhB=r%CpK_aC&Z3+MPK)%X$p_*iJo7(|`XM<_P}q0`^TV_; zGQir zCEHLrEpql?<{!JpIq|qy7^gu(CthdQ)Ho&3TT=W1_qY(9zP5WJrC1kto>UWmokLUm zH-AE;FhB!b9B8BdNUp`;UUG5ZZ2@EDFb%e$FSlr#O1A7MJ2M z=9`>PG*5{Dox(@bQ`6Jw{R~e~6M|4Z!BLaJ94g{*(%bWI!2$Gc#1XmMJqaQ{0ogpD zC*T0NlPFqX1Kqn>%!-4N#7zu|Yg`k&y@3w3riRI3oQvV~QN3YW*zQFspjo(!voE}5 zyeYgW*z4(lH#JNN<6bnFVD23P-*z4*)xV>v~grIOTUJHC&|y~4Pi;tO{TKl|47#(lAr0D zv?YUn4u4hBsL`9GB|bNm$^rk-u6fd^>6>)tT~mIQE?pkxiUeo2Db31v-FphFW1N{v z<@#^u0m!kxIFjO$K1_}BhUUH>B4n%+p$VmvL=uT=TL|9sb1(qE=G z(x2`+E!mH(Z1T71x=KVh03@70bPBhQq!a9PZ>_5`eiEr@;}=3lyutk zW7<>3)3W_4m7n~>yOv0iNlW~o$g$qFR48V&g8*pzTXxl$uX9hy^{ZFTbVuQh)_JFN z`q?Y9{V@eMP4rVQvP{vm4Ri=Vsb9D9hreJ~l;tbJMfR!v{Sy8zT@Oj_rt9!2)yhf0 z5Kt{%C0*nIP6m88)$~>BMb;^me#6Rje^{3|$l}Kd?(&q6cfWN|@mS z^sl{6+-_^KV}EtsD12rVm^8SDu0uFl_{?}qbVqw2)}>Fv$NZ)}cvZM;B-mwsf!*E0 zrR(qoE_X}qF53$npDZqQxnF>NvV?V+F0dI|*mpTW2ls*_4@GyS%^3c+r*Um^6xXKxLTy)B;gHdm$fnGi@&dkV%X|yAskJ7y z@M>(iYo-tb^?N&V;Dx*l;^verScpWSPVZynR$?YIO3^}#_#M4HIL>HW`G*R3MHs{G=zv1s?ih)YRNuTNe-NaIu`82ETO<{MS?uB zM+gvOJ~<5`f`tY^k-)E};8T@8$6z5%Y!f={sfKPWPIllb)U)6srmLOu0Z-4=Iduy$ z;!B}LwF%z?b^e5IwnB9aIPqVAAUM$ApVqy*P})L~Xs?cL@K5b#89q;ZDg;;--wSnP zggIslSz?EfyV^^i3k_pw-Hg!td?y(Ob?5~PE(7nY+6)PKg8WAX%oo$lK#UVgRO9xI zh&#(Pe3Upt#|c)%hgpF)A!PG8;qH6>S9?YvJ-{51{@?c?I@Rk^EbKYRu1B7}eNx4VG$ zo&Y(53s@7#VCpYWuavwh^UIr1ld!7wRX_KRnvL((dL`gZ_~G6@pF892TvtL^^+$hY z&ApT#|Hz|}?k@81AehqDDiw1ohuBtwxb!|zD ze9kH*1FoUv^FE^uZRv-1P5PC%lzTKO5Dv3VY693`k8gF%VWtOieK%a2%9DMs)F~t_ z3iN#hV89i!Lh50b2TIPmC6_ANe5(@=Gdw`{t-DJ2c^xL-Cmv>=G%dOB`nLSO@7uaH zwg)oK$|e1-625Qi@24DwJwQ7%f*N9K`95FG`cuikgP>9J)m6FN&F2Z3jt}&?o-RkX zoJx7i{lL(fwIt2e(<_)fL43>nK+##dWZKmbx_{hJMq=-O5DXLPzrY34avHAyJ9WHp88jNS1ROvG;S$Bn%ivtWHjJU`&DX;au(+iVA zhYimE1{>(>gKCJXS1sWtqrU8t&HESS=Y7A`cck2e>0>T3e1|GL>!bKzAudXOe^>6= z0wf14bowCBN3cO9&3*SPDIhus^sS9^-}4JY7{WKHq;HB}WCj-vGrsuf9UuW#@xaHW z;bEFP<2vg5_4iN81AOsBch*-b7Y)C!z2_3e7SQQv3v zRMA(;7xlj{y%#Ij_rb?}Vt=J^QSkf2_n*pXDg%LX^FP^-HanLe{*w#hn#BpLIeowN zzPdczce#E#=nD=qztiG^%@nl2JaGfQ#@0srl%PoD=>%~(HxuJdjICp&c zCEuC)!IVwuC71V}zB3Jj>5;qE5lfQa8))!CJyih66AItAl-IUU8P+X#WCmODk$ct; zED3+lufW$+`Pa3-KYstMywlgSjw-f}T$29&<~`oav%V%dl55@mdu@4{?@%38WL;)S z`8&RRtBDF**IE+${_6d5IV3pm$c@+eY!LTD$&MwDsMGo782L3Zn^{)TPAl&_D3Vk~ z|3KPt=jG|Bei%c=oF=wd@uEfx}8|wOP$4_iQxlvCkcPE-Bq`P=lx43|MP){lWBkNzAJ5~ zm}h?$-EcDXZx+BiJk^;B>L0#PH%|D$Y$u!7q2nI(l5(M8Jne5r$bi-rIU7b{PYOtJ8>d?uX(}4%cP!5u>5jB`k zD0Cdi8`seYI!&&>0ro<(@6~C9*&3u=*7{znV>X^Xv3;Fa5qStO&iXu(@pvT z?~u>?TjxYjRP!qHHCKkgF{>UjQBv+^VOgq!vb}Y!T{26IZJ~sBDt1>2guI@K?Ytqd0plgeNmIJt~IUy z{7#U~@YQ|ucar@IMs2PXA|7JPxq(sr`Cg_39=d3|6ia6PjxXuN12Z3j68w``f zIhVuf0ES^&`0iyXpl-MuWIueXep7f^aKQ5{zQHghoO{_|nt5OdtPgsStBLEZ)BFPu zp1%v)YTV>l)|=)Us687<86q?G!ePtkX~uy>uq-PvjINJNW*yWB z>7@A8y&)`%g6Uy<$dTDc6u*WyY0CzK93iTd(YiND%X}UxRRbZRv-6bEhBxUhyJq~V zTxLC*6bUYDGn!TJ=JpI%$G9++$qn8JX_`$QzEY={v@8Iiiv2{(+N@j!+^k=&QB?pmJO(8b3S1HO3N7J6|4wN2LsCpX`Fxy8dZ8)0#i~-!8%2fRo zaum9q2WEtkNz43$??TpRmxjgac6bl%5X;$`rgiQaxk2@+nYpOCb>1ED1M}r3SwHm> z%M8uoKu0;026d}`gb2x{~vVbyvFY*w6Nh$n{=mzied(JP&wF)1|b0`>gLwONhf6ZM_R`CJ%%&{0wS zTuY$o7pOLL%;Q^qXG%T{gNb6;faW~w@%(fT!@F6}7FFUFOB65N!ywq8n&!E?RtjJr zfy1?No_lsY45PC{O{(cz;!(^S$tyF%czm=cd+q)x{+}X-9S_6Gli7e_JkgW2Rwc@C zV{L_NR)nHWrui3Y<*BkOf6d+)epVNlG_;4VV>mketbR*$N4p?4t53nl46)a0LwJpLGIehU(ey z;pO_7lp$CxhPrDb2KsmwsOs?sRHlujmF!vBVf*_0WDFNxkIK1mZRPRoiQ&%r{1glf zkEZV4NLWdk6&zNr_e`$k#OqS`Kzr95mGL`jh?$0=bo?$bjFjAHSQ+{(QNJayrN2?Q z(lT4yvc<4vxiP#VJ8MtbipTHSIzScP$e+X4Z}D$wZ#-W4HrqMuSqDfIBvpFj%?kdr zXMJrlDAL$()XtU-57ljn0Ki6h13$afv<2JJqKa+2T3Mc*8OGG%30qL@IdC1x#A9GO zt7Oa)OJwTgJ%(&On2~@`G}em!4tgzBMzcs`?$|sgRbCJ$w#`UHs2ZbVH<*~&JY+%= z0L>E1l)&bJ3b}b(jb?gaOXjPx!Vz!l7_-M_F$Hd$9^_+tnEcq<_;OGo&}{=?df;bM z;H$EqWiXbGZDTqtz=oD8w#KF2)-&dcO=mmB*NZH+omGdg$aQfvwn#HIq@Fb+!itWd8Ri(#iCpW6k+0nx(^re|za$rb1`CiWxKCAMk4 zfo+Tha{mjr2XC^%`Q>rEFq;M++A=puO~YG&ToV5Q@F{3}U`k@@9!s4-vB`l26yhs_3lRZ zgeX?$e>XTl-oZFOJdIKTSr;^UGoFX&+9h+UP>16g$ttjzM0AH=_-OCRVChFbPOzCq+h;;bi7KK!?g z0na8umoYGPYnXNN`61e{3!)A(q;|6-ghzZ}Ys_xJpqs-?l@Dx%SuOB6sE`KCLJ9MH zqo_9fL(yY?Bo~5*v;y`JVN4THDtqA7#)smI<+^W}H4&2GR}czT3j*CA0cCOpsbG8P zauK(*(5aDVyH3VnYX3Qkt13 zPcU-gAkfDuI%t!o%?zQGOW?CB=Ra_m3Hx6Zj46Qzzd+ZE=$~C{iB6(;e^j>&=`XXR zgr|Jqn$NB>&R@1$h4jfRoUp_fX|=!)VlvzKiXQd?VN9)C+su+sBfXY3CfBV_nn{X6 ztYwbrbhDGP%`m(-k$SclE{~lcc@mC zsLQDG)MCMLQ+Cb;J>YXe zJ+%8HZUsfT4kobyaQs2YxWS(Pz?|%F=7tp~N+;nc{Fx**@450>eaaGTGno%>3`ztFf984quj>wi!r&j+xs@|KN3dI)-MHzff$?ginhk{;Go zM39}^L%9ORw=VE9N#Kr33o)Eyp`-%oy*3>BE6kA}49MnOK(%HDHE16Zy@HsNq%_b7 z8%gR_V3#OtY$4RjQe##ucXSV1W)aCN2j+w+`AK+5>Xj93%Hzgwgig38f_ifWIVVkd z(}?Hsl&rCiNL{g~)Dp_zLkQ}P6`46@3V8iU1H+NloEYU*<1%3ejzL6WH=wQEPONyT z3} zP^ie@b+{BiRw1j(exAWfI;&0UumBbaDT!vh1UnN#-%i{$Ftgz*KGGE9#eU3khLnsffdM7LjD)sQ-VBV`{?p9<=1*y zi&7$3t*k$h9}YgkC;Su414(&;JkF!^W0=fcWr?CzZvm-= zgjHI09zxe@9{yTB>u;$O*eIFRgb|mlA#6uh9!l5#TntcHq)0(nmFx}Ua|t5~uQjtU zR#fB*yK`{>;kf~jAF3qNDl~$D>feHIG?O*X@yA7=6Oe_ryqmvm|~qqf+6d zX3s>CCRiRXwE{cqTH`H6!Pv>HK2)iFe{`kfNmNgBkuCN{R+LFUu~PRWN6*!wQY=P# zlUS(yPL2aC;r=X|- zo0y%30Gg5H3kSx9dMb*Bu`Stlh?`iwqzn7U_x9W?`Wt&Uy9064N-yPt*0^ZT3qS>Y z%T_^vA06R>`Z!4~@Gkod;u97R00E70fu7Q$kJx9~ z(}+)2U}s(%#1g6jZ6vtMWbdwBOwhC)gZbW*R^t|&M$$zNZVcw*3uUinJggXV9*uF2 zPlG>pC$L9s+VmXzvLD6dq!#^&^wW?(iv3{SrseoF`%zrZ&7$u}KW+JN><61RwBu6t zx#*m@B2nb18eZNKt83k+?wFQ+E;c8-C=WS$K>h?)*QQO^u_OCjOioJCAIQ=D@-EmH z)@_=O53|q3<=iM5K#pq3U&6kyX)|=3&Yq9XNh~rzj;hPsV?(XmG#qbb&&TFKMO7xd zB)Lr7;sIE}yB~4PtTjGESdzoUIsQ+!54`6PBWA4$8FnI)FcXjXh@a*XATIf$8IJ_* zoMg$Wv{@F=&d~-2ld6PSEfcHwOFY(+ITmtpIDrCDlhF7*Y%|E;RVHjR(A;%<3H%J| zfceURwJ&j|`7RP%T!D%jZ zSxwZNiHwbRU@HV29jq}A4|G(+NlKSD%4~(*o0IGsf0k{SR|av=Y(*HH*JzrN+;}x% zfN)`Wev9bjv*9H-QfFc0T4(`>L+##@gy4DhQFwN;Q~U|GPF@d0m03svo6o++O2RnL z->Bn8?S$Ol(XFpW?MeSdY$*|3*(%g10R(eUxe+jp5S!xym7751Rig-wxzmkVgc-zD z6QxvFmI@^wT>xtF^9-5)irm~MyyY1(#e>UZ#tIo9<;MPh;?54!!C3y8@}9fG(1*1#Z3ooa*bUAD4+)=mUZIwZwmB_8y?UaSjK8P6 zhtc>|-gQ(|;))?<7i7xjBy@}#of|8MNG9-+h{cHegngtmf5dfy04a40@sc1;N*6+0 zCh+a|9d7P}n1;kUFG#1rlLxh%ibHpiI=Fh&8?Up}{mnPxXW15$1D6+cJX2(V4b7aF9JN%4KE!j6$I-j!T}Cp3-(2DH zf?kgZ$kPm(Da6nrD(TEYV}*o6`|fc%9w|D9$Bt$yAgWV-^=S@g-j@VamDoKNN82Jd z?32t1#9Q(Jme->X@cyEwPV)5}D;mnA z8vWL)!6P>l7PNaX*exVXcdm^&~I$DO) z!7uQQ^Y3px`I~3toXkjj>yeDd$P=a=X*A;MoXW^RYiPy~0M=rOfW{9A)jX|GA9!NZ2{Ut5(kFvirqs~RI$TTA~ZXm!bC znmE9`$}ysv`3iZ-bUJN-@r5isF5@YQPaR-=p$g(Mff=>t)9D*x^UJM_8LUW{i8#@K zDU?rcUTx${D=NbhnQkJU3Ys)~pmse68IR-*)VzJGZ$=9;-Bdi?fFTq)-`QG=*h=0I znU@-Q-CB#b=-QZ@1*RI!Ds z&-0DkX?>Fcp~{S?Fz8E#qq59@;9iy)=|~AvbXvsjRjGOTk-u9{WOO3)P0{I)uAY;M z91>$1mA0{aReD~L<~b=cw@SFX!jbR*++PFM3|(SAFJ?`Mt~Y;t+=0 zNgNNNG)_4%fMl(*jr!&sm;1}X?RG@$ynNdUIb{d8f=Y{%ar3&?M{_R9O*!b@2HO(x zJ;HZ5+63i1Nf*q=FZYPuVYRlWH)U!}R`=b3S$l$}%+T$Klpcvu{hS$kTt+w^1O(XH za5>&`4GtE!iDtqH`}YCTY42VJ=xmog+-5IplldGjB4?MhSrX1Che?`$)G{X@*L<63 zE}Xbu+;4ZASx&w~lri0AVkMXD5M{Z__*<7|BWYf+ZAfnG_C^YH;s_48dtL%cEwabs zZyT70UY-{nWp1;{aVft2FJs%3>)e`#r&xN4#n*5eg~yHmO1{4BHOVV}fjeLL)%dTJ z>o85sDTdzI;shK=Va??ot;suwAtU89Ks&MbKEn-JC?~CPgJw)mu^;XY>8h!6x*G$4 zoqncbN|W8V77csx|7+GJXE>g~iGB|SAc zo!ZZ`c)s^(@f7Z3;YFhLSspNjHC;F#gy|?IH7#h`dN}{(0bYW_Z zHwB(xCN32Z6>=Mih!OPIg4IBSxS+TJmspr)B$lMNC-?x!$;d+@JmBZAFp*x2DcEks z1RG2+^(N8%Bx{NjfyLQ4*+Oa>V4VKVRBgf+RRQC)WxOdEEHk0h`=R(e?i;DY^k(|Y zUBQwQ$lj)68yrMZF?COSxqA@Qo#5z&ip#o;Y~rp8D2us;RdV_ZcmLal;&!o8)L*yz zT*0Wto4Bij$`Wo-m1evBnY;HC@LPm)m9l}xjE{dAjh_;ovaRIv4=kuob>^EA1F@Mq z-EFt8m@6hai1fAy;|WuRk0b>$Mlh1Cq+N8*Q}CGli;5-w~oLvG?Eg&o6jl z7Ld@luav9*+kcr+fEdN|c4Sf?f2oMurAl$Il|xI%tnZl$s6_imcCQsg#w{tk;VWml zYAi*fwRleR^m|oG`kQuNF5t2hiP7Ray|>>V1ZNz(m>^5Ila$_}N{Q|$6OlMAfzzV> zA(ia@@a`y!b>=CT%Aqcq0$Yo9u_@SZVHsdE@$|&oxc_{mpucLjM?u^z7ASxT#8+;y8mfk&7dFP2yEsUK zCIDsHM@N~O0M~?Ptkzk(F(%zLWP%p~Op`u{z5Is;X(QCUG5`bz@uu#?5 zGr5K{Qg?07!WPKBl$m&@*04k>ujwr;j)`<>lLAeKh&9ZSifdX6Q)6oSU6)8RCPS$; ztdXi~=!MNO)-D)H!URK%V%n5jQ{Mrp@=Y+QQ7oHEYr2r;OJKw7@+8%gflI~0jd($5 zTz$XSvBuW;OkosvUgS591DoUXaki>Rl=N> zg%$CVnzeUMvs|2mK%uBbC~=R_jL*+FjKyK%DWMtfLoLNI4)8(&3+SbQ6Tjz-?}4V3 zUBjk;gF-j^U+xwyWNwxf%J+%5+|5_WZxKM$63X`l^j~7Pcp;;OCDBgkrus{-h?qHP z3m4)Up-<{zUJH%1_{*>&u}mF^Zkomt=eU}m32my^G^~h2i^-$&mducsK z^{B=bc3;kBSK?WrVRad=gN-Y~!-7Pb8znbhT^KM<7`5NhF!@4w?~T+sSaU7(!JGC` z;tdrX0IQG=L|>s6bvv)TMxBJS`-VB2j}XrbeN$KQ`lIoA{8{1QJQwjes%i{LU_ZXEy)t)P?Qh@Xb?t=z zprgLlwI}@-6s3eGfZ(Xw*MJ?*N`%-CE)bCk^toCW!SUmCdsgm@*HyAo>JgU5O2>5p z48^ZD)buMNb3ga3+E7DD+7ZUbGXI;2WvJ!Pg~~WA_i6_J_Hj)L!{6)or6tUtNG7WvTvq$_LmF5x_95`$i?M z8q&)#acZo--1VZ#x}4{AzOuDv<`$}1`ck8>#X>D?jxu^aRKhBJry;Y=Nzv6PwLa9# zbYN;G7w`33Oa`OAMcxqkA<>RkhXQNBKpNC37&3AEP{AZlipEbB=C-J%``)TENP?aT z(Iop{#oAxxF00M>qU$0EV9ufb72bX~w^J?Ox27&4X>|`r$pP1s6+PZ}TEP3oUdr?^ z&jTK3?~-@r$sp~baCuR$PsFvUVz5ymhR!reR}9uGBplxNfYbR%$vM~23I(s~l*2#M zE{7}bdsiny0@;q@`0DhxdnXx7U=?Wcn$QDb=kp~3uK8Y($&13yHYLukr4{{Nk!f!Q z9*8-ImvFoOl(Q@{_d%}i6)(MmTP9-O!s)q|vhtediMY3d4ZtxuXM1evMDRdeGiApLUiU6vyFF6JUhSIw{% zjMJJn9O`YymbwH}=&G4Oepw0W{pt&zW)`s1p6wx}4Z)N;Rf;uV9A>(uowk#cwx9&= zfWK&`g>X*%guZYXi(>N;ym09<*;*`a-L&%1qxOl?fe?e50Mb)foDsNjf35vxDHKvt z1DNo0d?9*zS7s_o4=Yx^hh_vBCiWJ zZv*o!xr|tm>(U;3^VXQ{ifZi5ZMboKLjMN>v+>!DQxmGt&T>!HKw!i8=1GG3X%;pR zlDFIJRn*p=_@oK#=1?%ey|uTzesA)GxyQD=qh{ZtEP4(zKBxSqa9ylf&Mc65_}S-E zzo}do0r!!)v`aO8R`I%|M7q<6GK$@e0du$ z_=TGog{yT|1NenjyC7SEAC9i<1_BIt+OdRz5*glkwX!ZUwJ)nig>1PpdM)r`v>_q1 zw}!>)VQ{Y1yM)0+TMY|>V=(Rn%)HKUMCIv7&A!Df5FGuPIV~V(3_x(isa=qR-tGsF zl{0vVGvQ@HRITO3OlHHPou`)@rXT52I@mcd=nJTQnieO{E0!)+RxE`||Lm0JSIw9Y zi-8;LC8IU&$&jppO2DzIRWS-b?a2fjtx^WZW(Rve*1t@KZe-5-}U5&{Ng85qSzG& zrCtPIOdwj?FlJLT4_@+tT>V0?NkiC)8PTrmG5Ng@7-1*hDVB(L4aEFoo+hv-f&5OU zL@6M;N)?>paW$9ul_OzQHZcifbG-@4GkO8Us*%y^2BqVsa4^}hvkD#KFm|d}yg})N zsZ@k?*B)TN_>2ldt8v_inJTrhMEWxE5>q7_gB(k&pBEbOtLh%r=-p61uQDR}ll20Y zVFF`_eGADm29Um;5BFh)B<-V&h*0V}TBQUz8435}h35(Y2Nzc#VST3ru zd`GV{J?rwb@B+Mkhf~iH;ROEoEfJdo1x9%}33@W~=}=jemo-2xMgy5N3|ODB+nRJ( z@U!R|_%FEUj@0ugF}ux4`vw0HJqYi|{bh7!C0rV(<>+;;$0P{@$d)ujmB*+sAX`jD z-QZPDqwDNklcHg6h+GXV2d}eNlgFuoO3ih5BeQE>{s}D^>faKmv#!*<_i)L z>RfSvOVjM@$^@!H`CWQ*N zhz7u`a4}A>AVqq4%4gVbNGP!y;9z&J`Un$y!I8)iy`)LB$~`se|A4!CU( zHt9F`pDNW2G6$KC46IxI2g7nR<#$;3f3q~xt-0Tg#n;Q7gh^b#TFJN<6T2iOzjG-|2R>GcB>Fd)NrZ>NkZf!bysndri@?p;AY z0rmkzkP>KRH?xdLvtAfIJEaijf?TvcXAfmNg9ikuMFI=CjIcByJy3ZB-ueqoYSGz@ z9J!`ZnYh+x=|;0p;tR?yimN#drQGV$B*RI@Tcw@zY{5&$Ttxn!?{!}?7g92 zE5ujiBTIbh*_JyfP#{UR!OWd2R`5PlAnTY9PjH)5@OCfQ?0ARV0Z;G%mmpQV;|e4k z!CO28c>iWUDbxx%?jS!#9MSw@2i~j6f!l{Aq-u>X4&Viu8YpABrKU7N8538)=O{oH zMu=-D+ON&sBi|ZXfN;c;oe`NDb0@S;5>QZ{F8CZ)2jz_BGK-R_dBJvV_K$LAk5ua~ z1>NLD)K5MNQEI_y(zF#UxJp6ci{R^V!3E+|@lhrMfmpM{4&1GiYYi{3c8nuWBfe=` z*dC@1!drt1u#PU|EQE@th27ztLFv}L1;&n{PF@h}eG&$V5RkbZ{cd z>ul(Z5`-LD-)(ya>j={nz$rA>?MW;>W(C<@>MxniOQatv5&8kAaO;{xN~J}V_;OtX zrvBZxQz~tu1em87nIt8oDH=E{+G8RNH7TMa+X(C*d}8R4@aV-{aQb$ZaVPMf*-bQN zczx$dmKf83{6s1mJL~~;08J1&cY!q-;s%f}8${um5hR-WuqRt(YzCMCB2r*6VZBvK zjMkVTvzLJ-xkynksvCf=vJ!$Ud%8&Q#Wt`PlZ%T@Es}QKo3jSD%e65(SM!GLxc(13 zWuy8HXK*wz!{^OCnsD{akpwZ!EU7;vXE*MZ>sD&K{kZmvP@JCY*6ebPy$<8%uG?~s z;=Z|BP=W8__~v|(*b6yaV9sIn&(3cy6^Xcd@<^0w%wEh|4DYB6ZSHy_IlSDw%;RBkY$- zWvGu4;&YDUaAZPoP73Z!ze`R&p`MzduHdrf@-O^go+sZm5zX6_amAf>P1KxC{$=Hh zjX8U9zq#(FvR%jJUUcI)RJQw?)4#~R*q>vLJLLK)yGe74E%*yWya>)w$GN+n&DPc2 zB47tjF|5(x|I;7N_b&Y+^1>r$2kwdMG<8V*50`uS{VTxsj{`2%HH)gOZti?AuV3(m zYmP7Ox@$8vPu<+*;N^b)7fw0uILP%bb-Vf_=YyB}g+Z{i4OihhOzl*E{-pYMf3 zjth?BdYNja9_u`w*Dv(KJ;$%eexIVxZ#fsT+9r#3qfEA7Z=5H*TE9=$=YGzG%(kJT zPbd@38;=ODHtbXNnaH_7X=4}3q8{{c1ZzcB$O^1D-fFO6uT}?d8V3BKc_wXb@t*Ye zaor1w<>{D0Ym+^#S28uuJe+|;wQIbQP;R@|aiVR?zvcz?s0=4?e^E7vpYE9A3OkMH zvX4;;T1nrSvKKajTJLi1gdvj0vFt`yQ4Ey;QnnpTt*N2nNrq|wD6{AF5dJBp@ zpA-O*fjTulsZ@$bu?Pwx?ChxsX+aq~X!;KyMJs9g01UkG!QQs>PahQm(>37T1$Mt} zJE>F@NMo{~NqrBmwr42@S<)rAJ8DktWH6mJ!{b$;OIf~(L_GQj%+dm*p}@mzW~6Yh zF5R40L6~ueY`8#6H)7GYGGlqj<}1t;9*zO}iX7m?D&XPRPP@wVNJ$W;;$a+&m2C_O zxGebP9UCx?mNm-%FC5Exc%W00c?L`I$Ffaz);R$qO{NmaA3oVPWu6lO*8^=BY?2V1 zJ7}Yu;V)RG^<&2ds`$g}2*eil)*`ZGneR!y@aq^4hjr@4Obp{0$sG=1^c}WmRq~G^8E1G>%Kury0E&t2Co2`fr|njT z0TE7f+@4yg3O;I`fk$-_0T3#u&QmNIP))u^M57Xu!3VepV+2lf;lU|8NKX*JoN@vm zplYC5v|~7sQV|rCsuNpuOr9CVK$0{OL}xJLCC%K+#ibA}XdbN+%Mc^UAq>!qSzuFU z7X#e;K!7OGr7HXcc>eI@eu_F*os3Z$lVI*(#F1tY96Pq$7$4ICFf5!UhD92bhldz) zq<`uwjVY6>fxhyNdJnbBsS)TapN|wN6U?)_Y>)jti#VI_x!a%(aRccSTBQH?4#9?y zkUfWN_gX~>|R0ba$ZgeED675??%0H{JGHRr8K<^a(IC3Xupg%5qY7kFOn!j0H z^gAJp`WBOLVp9E$MbQ*NiMkGRfSaKS?bUg+uBZfr5glMu=Ce{!MD|fkLh7V74?+26 z5ArjSy#{Y=Ku#t?mB6UjTV#Nr{#tK52@TXNESFT7G=5`1xK8!JUa|w-m;{eWX~r(o zD$zwmJXIgN!wv*v;-4+vh!-NNqT)3-}Jvf?esoT2Jq{p{|hZ5RKuZ1}gZ0V>t@`ei-sBzxVsbpMU#zfrsG zE@xQ@#A@&~mKOU&wIAUC-gXflYctN@fAYB+nwatTfodGLcGe(JSg^YU873w6RjDq;X-!uxIv>pZYq~>ao`ay+KtA!16l_E zBDY)+o!Zn!Y$`6f`aN;@@^xv~K~ZC%9)Uh@Uh4&NviD~_PPpxSDS9lTNtBpg(- zEclP$zG$_z7KeB>6l6K5P%QYs-2zmcAOL20q6 z_?Gv(D|ek1_@~^VTAHu4T;SEj%*QH6M8237cZ16e3ld8MF;L5|o=U`guOA3ZXj`C{ z=he&3*2%|Yr<8fH%Vn2k3}&R5cqPF3Y0@#7Da9{G+LVe-y?JXf5pCOwE4)XpbU8gu zJ*GCL)<*PJyJF)A3>Y<@0psbNf7Qk%;l#htFYEV|6zoz5DTAKa*3ISnf&CKT^76!4 z+I=b@P+75;C`+EkKHeRecgv!(RK(7;Bi1Pwq;zg$X)}D8-?-qWreL`N2B|g~y zwCuvUvXDN#;u{*EFdQBV6PGr<>YI6o*uPjXq4q=>YvZ}F!7Z=v7lZ-}X3^r9#AM!J z#1$I(vY55$G1bYc!P(ang>tqAq=2f0}CTux=#QGree^tmFB=vUEsnm(N{;DyOXQs64d4r zCj|yYS|zWlIpdQOr57|OLk1gKJ+I_DaugQiCVdC5x3*l#cfzMGa%q@>R)Z^nj z2U}VLul!Sw!6NH#0X-(5?s-zS3|0x~G4FWkLySP*hK%jn0ob$ZllGT%8ca|m#^}shT*|%@|awGH&}5A59zF} zOplW6v#H0+bAqjEVn_gr!7q=vSk=X3jq(4B4|Coy@L3Z+V^;CUtV?y)c>!b1PfDOm z_(X5YJTGEwu-m4IeNM=byXK;su|@E{){haFrCb5pF30r*g5T0_XKoR>ufN;6Y3`i3 zp%PRm=N-0wR`%2TbH0YxgFWivMGjefTGe!(XT6w-a_Ct{I6bD>Z?x1Dosdy z+R+quZpMgH%a)tq`{dB%a*ng)yhu+dd^*%5_baJ~pgAzT7Qf{GH0uf@B(2pV%aIOM3I(+iU!Hl{E&P zX}Ed(=Sl(EGwh>A+)#EQ$fRN4iQlDe$!re0z0UtYSx3-=hA+o|N8Cbg4!y1a_Y%Rz zKcQ?cXsSW+xCuNA{&weWw7)~ysUYzN#SX_fu;X%WxIF2 zV(_q-E&d~hA+PE$B%8>EslFBQR||gCu=V%@_*d+0N||hsUj5dj2hw2*Zx7y<0olYI z26yoVLf3%hiIY?2Z&%;`-9N1KZE(VgDfPD&x2OD-O4kJ+pm$_E5DL?IyY4nOndr!R zAn;Y`c0}3H;DppEYaaaajoy*@KqSoItgHq-pTa8(N;X8gTE5R6mj z2{mHvn1?A)(;g5SY7e!P`305K2P8k0<@FTrf=U{?jz2}jA*Xi_>9ubws|X^VTrinF zI-~-oUx?{Xkzo2|geTR+$xVk3S+~cP%><1!*c?xQ&%>vKfHL4xMx@)EN>H8`oOb1H z!PuNkP@G>iy=Caol4YYh&p+)1&M;^p;ISw{VSeTGrlGL*cV!VfyBR>YF&LtiMFe%% zS0^XP&8to)@FI)E<6xH;F-_#TH~43Xrxujwg{IyA!QHIstx7wsFkq6WYqllo9^h_b zRWwCFD`6Vh#dvY@w34QzM?hY@*=*Fx9%+WQYl^S@b(n{DUa;A-D7T(mhW1Hc#p|m) zw&Wc&`xv#lXCvcAim$@;l^&b&_L==2wXdg*apR<~(sc=s9eKyhrlJ&k)-v{{{3d^0 z6gp|;^UHcbcqQQ)Nl-_j+RZ>(YwL2~bDqcXn3B zMout4)xDx@TLE5Fp}}~IQ)D_*woWf=8-E4vr)UBqeDzj_|9y%D!UlUA5)C@LDib2- znbUROD3&XtQNt+kmFy6i%9N;6$+F~+#tmzAwpNBjHZZg5R4A5w;3xst`JytSw>r~O zD0=nq+Ro_6>wV2Nm&iO<=YC{&!=+41k!by4t4_&CJmV7O$qL{RyHu+6>C<;)JQ0l6 z9$wS=u~H`zU%P`mF91*-ULj$*5;Pc_DsM%->$&@Efq%xm^GM~_DAS&B#)p(A3ejT2 zn>!Cw2KFXqK2eDl88)r#W)3qJB$ifPAn}{N;HfB*(yQ8FeIib3CbTm!(zEw+y>)V& z?2Izc*ty*B^f;L9ml__aB=!WFIj*G&N3b zMy-<=rPgD^0344RkK^%-%I~#lNI3B?3eWnO66P*-&_o!B1#GU`4;Y?+hL0kQ^eki=sGZcFG&09uks{U*8JGl}y&@1r82#g8$iq|V8nMy~dCj2O?B@s$2QQ|mTZvn75(CXXZzr#Yx4{!(Hw~!RQa%63nLe>44fu-dYt7Uj6v0+{S?5@aE z-HLfPdbjUG%@gu+JMn@3)7%QDXCZxN#RwXBI~<<36PGr#YQ(%t>|dCjP&!ctPc&W( zV{I9|&kP054#y%V%P+>#yS|Y|l|YCRg-u9`>RK*dm#^^KIVHIX zo)NtX->6>f>~-miu-%5Ftx!^~=SIk~$xFk%3lnp3=gQiRNqYrH;OjNd*%_YZ5kR{U zRi1_ycS_W5Pl^>(gU1sL^LO&q+VesTf5*~uJ4I`Kl6DEc6x|Guw=d1%DnO9;7f)HD zGCx#<9TnwIqM|S)QK=;9+5y2^u+2#D)6#uZ2u!Jbg}p`YN3|15$vcf}Ws~j*zK2y~ zSQmC$)=DHrz^c{TT}M@FXL!0#Y5GpnTGgbdg7dIxq%z8k5J~DWtVJXh3gQtzte_S_ z8axkUwjuIVk8Z6wkymS&c`l94RYQ3;|d{c%Bt>S;`6<<1w1_FGSFJSfF~-dT@aBeS)Rh<6N?#X0H+`H9leZ zn>IjQ3O*F5Ny}SzJxjLteTpyax|9btJ~h&!cNP6S&*(8rA5EbDk#Yz&Ak~azA0Ks~ z&!&jMTc8g9Ew z<>g3$UT6A-l#8O^;7PsHnI+TvF6F&wG(6FPrPu30AA!*{*?`-DP7uKROmIf^9qJ)! zuuqOk_wJ<|r-X{OEa5w`^d+!o(F07O?4s+W_=%Pv0yL}aVon2%hX&(lR5`_59F^$Z zL61wB5#^xS&?sN818{mcOHNPjs6y`{x?IXXd7ehc$<^K(yFqbr557yi5%@fVM+%f3 z&BK*HpAy zo3lr{b0p5jh&k@yxQi)}SgVhQrPHK&>*|8v9m7a(r4sBW)mtqJ zrW}<>;GPc#yihy2N2hfiFXZ6PpA0G$M39e4CAdslbHN?xVmbJl_51<#Od7WuI9?}t zATOaU+z)5*^qn7KPjmsEq>tQze(ZKQbI_tyyx^kaa$W}f&)fp)egm2qP_3GSQ9KY+ z@LGy+_s*nIUs7UL4h5($3JxOHY$T1H9!&v#2`PV9BySnvkpH&QqHvWHc2j0TSk zYQZGt#~6ICBk-t2>hhF{8iKg~@0mnOj5?1Bf{J5()ZyC97BVI?GKxAa4~f zX(G{yZ8CNg+^6n_6Wyy$gDsO0o(~iwHx|ycX2g+a5F?u4mNk_H9}8k)87^cZ#>P25 zk0m(f${RPaaf-jdS~a!>oHz0Wq021(F(;-wFYt&z&ssUQi5bRtM~;AZ;{YjSz@(8Q z5ZxNp4)G96bu59%OFj~9*;Jqn5qa7WUOmwnd~FMj{Sz5llU?PObH3jsM;Eun^&UWm zVnNj5>XBng=)!@b;37`aH6SM*H|x5RDvi^2^f^}qbM?*%#yxX&qvqnYoqR47t#aLx za}f8@bv1P(?uMg}`uU=juA6f9;eL1BM{UF1aPqlWB;mRv=NN9vRgtk0IX1j>#x-H>gS!uC0-oPQNS6ycB#iwKrJzkyYKpm+N6HoWt{ItDsIA6ma4lH zhdANVUC&Z=)wej`%lk#>g(jG5;mSfw%O~0K9{19IF?pew^8gn}jd#75^^5fj;hap| zMZ&t%`_X^6-OKFP$tiJtczOs0RH1F4Vd>6}_Z;VHK~D%rPYtE0AYxj&E9Y@y?@;c zm7FKI8N%>sw!^r=3jweu1MDFz&mPi#VVpC7Gx#@hXf^VNpX)A-Da9MQMfY+Vx#ZA0 z*N><(r`wc@x^QRGH-`Jf54PO?;!M)o_V|PlGSyA8+G2c=i<&T-6}GEatXOGt{*S%rlr-sGp)a#mo;(HApBb+A zGteC;iM^3~=a*dXtM_J9KcJ!4Q=SQ;cD8T?PEf(l4$8Xer4o#Ih}rJ|T0j8+{ak`| zqlfI5p`W8zcFL$RT{Yz?3_NOMm2JUJ7p&Ki`-Oy2wgUrPT6Ck7KA0vPM1camxMdG$ z(UB$A8~;zEYGVNPlW+Hz zy@-4#aBB$!5yAS5PEssR(M;DL_uqGP+3%ZTbE?t(-xg5ihYE=cHRu@sqK zf%|jTR+kLiA8kejyxW<(ATg%Gh(-`!V$M3~QvCVKFv04KMlSqgcRS5ryv!n4oN|rud7L=?7ag=1AgjCCoZ|_KGs2U?f8lfwyPNmuUwZGd_{>QHg2o{AJt)2{0|? z!kdeDOA16kwBt@mjD<0#Nh)wl%u)NHjCP?ionTYOFv%KDv-^K-{w%>m;3j}LSeKFj zD;Ck1#MDZ$u{fUU)0qjDDOyNz@EHt%+9)wA#!yT&qmD#FEvCf?j+ufrsRlR&d)XHB zZjy}C-|-*hm;r-^Xu(`|u%fUe!EO@=9bgMSc16e5EaN{V*e=^D^7oAj;y*?z2&i4Q z$Aq=9KT$u&WVJ1QB#QC~kEjQ+AMF~`0R&`IG>{!&dkpbey$H%4$I95QCQYvNK^M^p zPE_Fjq-|Vv!|Y8Mp#%%uAO0IS;Qm~rcG(|Oy0O+rp(vW#<+M6|qr?p>qK{Bf8sQ9e zH5M#X2;EriV^Z{mU_#x8`Q83z=A?~}O3`D&6!i<%#C9L44F(n}>IoaDHjZ z5?)a+U=xxiwSB~j&JylWZ5-y5KZ_L^WN*bLoNN=mq32^+RFd6+J!1QX)Fyhv*hjAD zF5v_9F?Py!PWXnVk3mrvgmzQ2Fe(lfS%>*QM;GC#9++kR$FqnATpwPt zVa1!OSV)B$cl#O;lk@my75X!NB7A1IfXc$0dI&RM-<+8zVs0>g==m%)-zAZ6)~O$& z20AY-ON{G)AslXP0X!eAgGT*KFf&2R0-g^yyNJL*_K9M%2m0SU-v!DEuqvT@(7b>A zxeQeY<7a<218_bv{WqWgPW8HleP?@@yj|?ky7BqvN2p&h?;P$@I#)bGAH?=c@+Kx0 z;Q;udWM9OXI)rDjML|oUN8N_0uwPs?d#K-lN^=a)WXl{>>VNqB8j!!EfXY*HMcQ6F z!$%MhJq23NywVD*PK{dtqDS4!t)PnRvyxXwxE1Ew#fp5~k$X?;qgP|$M%x=CAJJ=T z0MWC_>t?}52jYz^AAxHcZhE;LS|f#Rb~n;}B(K@H3FMyA%Jj0a-J9`7@S_7Tdu*Kd zroCBp%^dU+`32>+pqpO#(KxroyV`bE>Y7QTpVk4dj)HOrum@r7CX$<_b;--3@UY$I zv^V0{EZrn?BfS0t&J+5-r1L;qnLe7q-VY1*JN%J#Phh#+7_wjXca9daQ^t)ORdb(e z&3jE3D%+Zq4#GYfHX3Nr3Y6_;#Xo8-XC2%bijTPEtYgt}Rt)$%_q7JRnwMG)B4i{1 zzM>vw9u)bg-)NmXuO;cFT3}_r)NZT>0#Cl(E7DH_PrlQutP27rnm+;!;PXgM#kR?L z1v(~(PVH)A7Ylib6;vl}g*`CbhX5SUQnE3p2$bUKaW5q>PqDD#fzdu>o1{11 zenI|$_CDjbPsRCH64REt4lq!Gci~nNpzjF0`q1t`dWXbRSle{5ikD@RPVA$aU<=BcT)E9JHT`}#-V%jmmDbu#X;s!5D z;bq$el_|*|QxnU(6)gpq9jqyHl3!@WoU4#09Q@;~`=ZkJqwB*3vW*kg!~Uf6#L4PeZj~s{+w6c*y@m` zS8hd@)Au;N22@Yl=2dshI>MHwCiw5*0M&Etb(ejd(w((i70RPucRA@0(>F`pvDzwB zp0?-A>(zz8>JhrLdaFtKmpvx0_Z9qZe=Bp^W~)m1<2_TazZ9C-g6BopH-YkcFhgtO zI1l?4QvU0nSFbM=CL~R3Zxt&)yXVep8;5!2Z(`*Jty>EdPQDesqqo(vyri|G@QCeK z(p%9x##`me@9z2V`f=fu?Y!_EDEor1smuQ*jR$f<`f3Ir(CJuL&TBQC-jk`>s9?ap zC6hZr0r;KS*ZD3)K5$zBdL8K8LJ3&$6g8&<*3QHV<+#|6)-j_==3vQHS{A@|M8S=M zhyuu-D7J85^3C9`*WGqRxu?3v%qPbOWnM3hQUGj6W|G@ug#NioF*iSW?8%uQ*c))7DeZ-59+<%R#0KjS+#Iz(%?1CF#=3ZfOU$8 zgWq1$oFjf-r+88j?J$znC9t6M!_zS){+|InlXnK+zpf}8vE|4nXwF3sKKV}Ud>F)E z=ej9GfWGqIyGhigdKH5w_qUbtnAavs4#L1$*qkM0g=T$dGG-ovazO^zP=;8k?_4CuA6*B&0fLo|9AyuYqJt4sheJD23UgNEqK z%+ApecFLG>y=ul&`FX?X5ak*(64=KxtT&LS1uNIG#QU`BjWYV=H4PIRSOR^xWsPT% z!4d<^&VBg-!{!in@|ZzAQC`kaKX^O+Zyg6XamtJm=_BgbgRy;iNki3OD|$@Em|&l_ z2C#SXYyYw?k^iiT7isL)Z|Xc3YdFD`c_b%do8$}w8S$bMyOwK>>Ll*m#BKzDc+!Jq z>vXeb6+e9i5YO2fT{3`pw3{jnyX(1g6B8;;(MB(W&(`S%Q?~Hk$Lv;bYUD~hwYSr@ zh~Kx^E#7qD+yld~kZQ`$bw}_zI(x-^qut0RNh3U+Eq`Bow{g>_bNM?H)BfPU&)u77 z0b>)qZHc$%0)rmba(5>t!XTQQw=AAkyRb63qV zVc^C7$?qJK)v??xaXZidQR%^ukF|~I0Ozr}Jx~@pIw2OXB>DJoK3b&(6yPmC1-z0I1Xth}gJgc55 zT^#~29-&*SH=Er4;%`#AFZg%*&CDsA%__Ga`%jgA2{EbJNBSKG_ABcBHX0h96{qL08)Xgb>6}xRvwlyT-Ia2e5^t4zKO7;%!}kua{m$@bz-7hWqt$iEmy3JaV5eH4X`_ZBDx+KEDMt z8Rn&jf(Pi$nU_Q?4Wm=Zd2I#|ceIWg4Kcy;1T71Q zJKRVkA{e44ip?JwdegoOgb-k8Lieco(0IE{sZOvT{cZ*TcVvccw*OvAycP1U<}P`M z*pqeB^X*4UzXrdnyG!}7;tBdFc1V)9I(3`M~!CdsK6%xqV0J_tlAcrJs|IpNkH;|H9YthWJLg zk48gx+TWK}gpAZI%EoCVQz5TvPx(RzVZ*!3Q9nk{)Tgc80GY zP<0B-o<*khRh^o!0IH69q#F~cIxBh6gIiy2ZLG+^j=XzjA0r$4HrCuA`HEg&15}+& zkvEy(+vY}=ufTN;552q&vyr~G+8gP(U&R>eIV=P*S;eCBwh4i*WJI3zZKd!}_Wz+e9k#!>v2#D#as}z{bVG ziV7oeDkvF+r!UA?XonkjeyYsxNlbgsU!fkZ16D5Z4ZNV@E$Am6)*eWIFEJC=IbEp| zX~{fF|CaGys6r>)v~#%98jMPS*I85MC5LI1oZf&Mun8|Zvu4@hDe3E~c}k8Gn^`xk(n)+$ITJb3XH%0v znupC84I?|R$Mo!~i4!)!2K=e+#K{_121r!p#XK54*!QvaWjZiT>^*r# zrAvQV*@-ai@{GaveXD(+ULhHQ@8YXUj!7Mr0P)9+P8R~~WMnZ_>MXOO`A4Fw@S`5g zWsJwOiUyP&%k*f85vwkI42KE6-8j#|i>Bm!K8^xA<0nvuvxPmxG9Nv}9H6&k=8NDB z0Jk$cn%_X=<2ZqH+Q9l2O5h6c;#P-sa#XBOj;rfvB^t4rtdd?@7SMG>**V~9F+?Yd zaSpKGuy&1h*AnGux{2oOahA-e4%3fbk^yub88)}|@cMHcV{x8!Wb`ZZU0n&Kdj$=h zh-FKTD)pJxa^M^+n*vrcxZ@Zc(Z%a5z0qyV3OZ*M=MdXql*Whv%NJlIgPVcS>Y>*o z-ZC;ArT^sQ5dVix4*Lx2)~H`!No`;{O@e5>D9p}eT^u#-i>UpNaL-@eo;$4fqZNH4 zTWdJ7M9sx$)|1g?Q|AK<-^B0etiz`fS8>c1McLhB zoEkiNnci8hL39_**%K^I4=0_Y28GV~=o8&m06`}dwnpkFK_^u79 z)}xnHAqq5ZbWAG9JMIa7gf${JqKXM#L_Axnff5CwKtX zAytlLUASUxCz6yUcnM~KJd7T6d!2d3(oPaY9>=66F@qakr(Q9z!zV2Y3c!S=R$=6! z$8uhKdGt=O=tHUf*mjT7WI*g(66{6{VU~%Vqe!;nsPR9W5CcJ)lrox?*`rl!l+-7v z2}{&uCHLT#C7wkbD;*F!_XP)F%}BPxs6j0eqH1zao;F0L_UPAIC(R2=!c?WKFfr># zQ+l+~K-$SiHxbVLDedH|H}Nu$Abol#xSc#9W#e*=G8#*lg9YN^$)mgI>=YrGm{hgB zKdIC(2m#ogbSYV^t_Mr8_ba$&d={na3fLWOu*Tl4!JY5`caEb)Ltjdr#p-(cpD4uy zsnZ*|?hg94n}24hMUXiCLdpYJ7_!hJCJ7 z8{BFBl#&lmbZbv4L_wb8Bho=6P|)20vtv^*Kn_41%N|rOfB>{EgIZ0PT|*g+Z-s(rQkVK__l;S_R^CDdX^v+|tGTMq$>P=C zCd7g-jwYmiQomzvZkV+3Rw;PwI7Rw`G(qhnw2{ERN4?_)k_~Q-G#FCwt0Q>zi%hVe z)CQ*dS;sph8|+-(pjd$cc`Gu(sqIv;p0{N|3AqCaZp9J6EU&S*T)|yO@Rk%gg_=9{ zA3Plq$A5x4ua-#Xx=C45Dp(7T!%2hOs>DO;(vq#?SwJH#YVgt%E8Z3eSOJM@1z#}^ zc_&y3%#5FW9M%?4i-6yXQs4sl29Vzxj2!}3$n!N5Pq3Vr5Ghcj*>n5xO4OLnayA06 z9IYrLCKHT!&^*|}ynZA?3c@6&vkoxdFm{1x18jEaMwv6m88RdtDL>5J^}x!JVcul? zP9okyzC+!0-JV{#Zfu@$g!EPF9rmtg=kZE(6qYH;Tku$<0zHR9z9?mi4fkM+f{H_r zv`wl4vzWm;#55q$aN!%+GEqv*hm3C|nnt*1=ZQ*elqR#80j``c4|uSY{!@KIl>A>| zb0W~PB&T4qzs6?Lrr=C}&2^*=!RhT9M@eTm-V!0c%sY(tqzdE+YVmB0=2$e?^IryZ zK5!v`^;M}c24gnN1%?PoQc4YDvz{$BRst@#6R|dK@fj?$F;QkWnS-)%U3PZxWB|Qg zWa*BXGbb3}8`>QlT*2bNYe0UW<%AN}I63~os-7vLEKK~qGMD0 zcjVl|eIzuV-iW$E@F5qi0d&qL!p)qGSg#u%KFLKIu6j8gxRKLs=o{`nlp-5fft*vg zOo9z+@A@|>{SLs=vC-J;_9mmq926q?IpwImu5Z%%jdNODt5LH#MJ6x&a0dt-Ipx^d z3lN`yw=6M&@c$Ie;kySZ3;JpjT_5J`$Nu4QFL}958Nw{PI7d&j9mkDdsOCJy%@d|i zE2GQ_2TA>gFAQ+B9A)%uX1~^Qq{5vc>BlWcDvP+;bl~FL#|;pgm%<4cSAXRJHU~8K>c8nM ziX}|s*tlGvOvb*EBLw0S$dkL?u#1EUVma0JTS?`HdlA6WNzakR>Uqp5e*Ow9owF!C zS77OAzo{T}Yv^s*dI}s{N4vhvIg8Z`_S|}+9J5#bO(Pf6LEmxPnptkKSNzR|q6dVq z)773^Q_J=DTECeq5+^9-tivoEFE;{Uf}|@Rvv96ld#~}EPeu9EM7NHla&>Sp-a^1@ zg7a?oH*bpqvw^4J-jOvK2B{i>e{LH3{~3zIHF1caW&c~eXUXpQ;PyE4u;pj)vp7l8 zHhblY;|1@!E~a3%d28Joy7%ICM(!Q^E#4{n?==Se@#J3UT*SyiR|RNyA}ms+PfDMW z&Xm3+oh*G?I$iprbgDEYO_9#eJ)TP?=8|&H<)-9r^qJ1Sm!B(8q>TFr*G_dcw{P_J z$;v*Mmy0aQ!+n(2zV2%7(745?Is4${T(P3q~)K6oitsi+h8QC7Rc z^^rs44xi!dgZa54MOL_v2yKdMtbL=e&*kj#yj;1WD%?jIei)dwz!W(UC{#Wo8f&kS z(gfQAzlZt7;dvHS0Ig}SpVA47g^y$U9iCIXRsbj`308uYw%5w=66_TRP)-^~+95{l zs+qlLN)GHA+zp#+rMIgQwjwlQ+O)+uSQGw{`5;Bb`BUMA%x?05K0Y@00$ z-iuAS0DA!6hi$VfPWO@&xoSgifaRm0vP@qjktKaq-CifDq6VMCuCkRU z8Nz}L=@gg){1k>4KpCd=f`OO}TY0kKO0bC53JZbPV=^4%DTaJO7&;D_@&ZOfueUpw zW+)zHL0`q4jDaXv9|gXA=quJsQM8n=*C2(4ShR!E!0-%=h?oY@AT)WKZfS(qQQG}NBD0jsA9$&MFelgotnUEblD1K7)b~b=%SnAFJA`Zt7HWA21hZZNa_f8^jT-!WPjN*Ww0&-6dsq`$65N!IFbxP2ff)jUTsW(0T6k_E%auW z+b39PrVGgg5r%&23|`~Pm8k|NFenJT-Tve4@G?Yj2t$Lk0dWz%&V{)D1WP;Eow1p8 z2k{>D&}n}v_{}ju3Pe4089LsMC_{qZ6_*e+d$wYkSg;=>ob&+^hnjW-cgvJ`=nl$|uaEqNJH6q(VdkD$7YZ z)l4;tpXqq^vZoLn{M1P@lZjGf9%d+zXxK$apXI5*hlfxvJ>~UyLpFin8+9?c5)p-D z?&ki;KvbZ^UBJ%?BtZDW8P+5YX4r`>X(R;oba-h%wNzgP=;&on3nB`1pQl*LV?rSH z^dq3I*}0|XN@!dA2p44#&QsT5ciAxl#Cru8(<91y|moY~=gAqiBY@8nem%X2zrq7>?OQCEmnr za=4kbQQ)&f5oNh&+9+~E-^aRWj-ZB3NNQVg1MP$5^-LEqCJy_u+W0^F@-n8a*avp| z(%U3H8yB@?SKIERwDH}*`e=f#$pUmulO{i9Okc=tVmC~A&Q3yVo5&3VA3U#D`a*GD zyJ9cu4XUUXKxyK3ifNNb@bO(oJq3cLwfuW=Z?wQixHC4>PBDG0#9pg6f<E&5C_rY5?~K?`%<3j9P2gn#8Jrw6_&gn2>JoCt8%G>TpkwoxBq4mfaE zZT4z{R_X&Gj=Jd7kv^&Bv+`_`mj+)N6rkm0#a96ZmiowxO|JTE{zj|_B9u@e;bbp; zA`o&M6IC9;4+a6FHUb5N9O*~@A7gJG4rSXv{wM2@WsGI4V;M_inPlG?GnT@nQYz~m z;w~iF4P$4JN%y5v7%H?->87$|j}%IqWKWXp`!c@gOzuAQJkNdnet-L;L&xE|uJ`$V zov#;i_UN;wOdBZ(s~Uey^wEwpM@G&(^OFV19LY!985S5v?A^FyA}f&qRJtYQXmK~; zn8YKt*+gK0d566le@yHV&za*RVb2yajd3)VM@(nTM{v*5GOtK!Tbxel6@SD^N0~B@ zN>|{Br(=7C9!bo4JEh8Pkh+Bz(q? zQOKe3JmNj$G7|NyUv@LP7Zti~)?~!=S!^Z|D@igCSWy5bm_%t_JdHJ!W!7?p08B6$ zILTN8p-}PJkP+B3M5cnY9gfBw$~k*LZsg>%*O^{Yo9XN9vwKI5JbRG&MXJN%TA~3e zlxfy%#Nt_M<|Y<8-eHH_6*j{Cj3~XCw$3|?8`<~lN@j(WpG99nl|(4}tnJA0XHPPh zq&8ElgjbA51fbJ=^Q`%FLxN6{LSRRK7tER&r8f4aWMT7*G8_2EDn$H1C3E11w{zJ))n zDWdWYm=>q(=f19I&7H+dFfuDn-p_Si%UUAqvEqXLctHet7Pf^!i5BcJ{Xstwt+}%7 z2u{>;vy*AB*siNs>t}V?8{t>B|D>L3uwTiuf^F{XMI*wwm(F@ zZFVH>KHCYEHodF`MKODt*^1a_6vSJ;UzB%6_=H*;QE{i@_LL-<{AZ9@je~?Z%v!0< zC~HHJ-JXXkZl+5CRMSr*O_dp|Cby4M_t~Pa1dTjT?2EX|BAQ%2 zhr0hP`alTG8^ykezbvN7>*L%VQM5wf$^)StzJ;J}v!ZxHYF-W9QbXu=2c{Pxyh;qn z%?kLO?A~2;g76%uUqE>$l-SK#G)1jRbb>$R_c_tML@+kFLvj*)DC!f`En0-4M#VWH z9t!!K>eed?B7Dn#i{C&lAiCL#xCvtUTDViB9)X7Az9;lZJY@H=>vk@xCKBkSodx}FqoPQ{ zT7Fc8+kgjgjN5nT+7odS33}oS!rky9Spq(vmZB#bv}62mcR68;_=t%W^^N#Q2ED$seX9f)&s&^9ro0QWJ z0m{i~XZb7d6P<0;i{{~CAgVL#EeJ@baNavIPIBdK-ctpU(T7-xKPe|V$8<;DNu|8U zJE(J<`o{cL#v-Oi!JE5Nl&WdwOMc68XQz`!`KY%_r;&wk@>|Y3noeTne|vxbhjd!> zmgv-@2AQq#-_huC^mZu-GX0kFmivyr6L0x7@9NI50(x8rC}Sc!SE&o;Ym(pD%V}=j z%$;mhZZk3RqHGUedA_%C{sviV$0?m2HE-EY95u~sP4Lv79%T7F@8Qnof_)}elC)r_ zcK7&sJ9OTl?lZrVuEosYlsu^~%&w$qv7b`yF(_a0=IRups+b)mFDgK)mHWjN*SNm> zl@mL)sHe<6lK*D?$wr-{emDD=_BZ=?m-1@w&HU@oM9O}7#bWQZ&cy-=6aA!f9N*Oe z6jk8e(wSax)kHt}7lF;o0w~kOL6yt9qw`upwMlsLA}17_3SLB@uVXs@u8S*Q7^g;} zv4OshMOSKmZM?I1HA|S){Qj})UC;9%3$;X=76|Tq?o!U9i($en=B>vrb^(XVwrb9> zgY!OPZ@PT*h(HVzwr}2P>|xipymuC*iO#4Ek9oUJu{>?8UtAxu8W!d-?>Y9O>u4S^ zrH{W_FwEC;UTf@B*T;Nf0!?>Sc<~3gm*rq8`pJ26ESn#~$m|<6V z{t}MS*O}^E%UiOTN~9UC@{VnEvFGt(QE^7d4g9?Hn0XhF&xk}KSN-Q*I`MfKSX4Ys z8ItNJ2<+|eyqRZbk(*#75y`eXHAc+qz~;sqiAD0P9-9vxo9hzJQ^UH%)gVE7M{dlf z3(8l+yTsJ+{}kE0%P+dASHF|V$U{9Jr(bQFApfAz$?@|a^+X}$}-HYN)3o4JM< zP2<~uuX+&Y6~^qka`TPx#26a?h9DdAr1~p&kYdfqWRjJ|$&=fWN7V1T|IzR)J(F2h z0jEmtMTV-+x{owG%OGq6g&sgud2A6?+@R2t;x5n-!d0MygOMr7>*{on3b@XAhEIWH z4;`cm5gs-qrywt?D|u99%rN1Ig5(n98}$;8?x)Lq!?NVdNPw9BB&wQQkh!jVo_Z&B zaTH*12=Wc&3-!w$`3lHf*-q+8;}_oCJ&irG`SU7>$bNpI|ak-q1U{F;kn69#&CIPHH(uUA?MUb zJ$5}koOF-F1Jj%fb?gCy(>2;F_Q#=vZOrPeWKxgM!>dV zsb*>LkKonQ-GAzJc9LHsz0^T@0U}h{>kxj|e>w2hy7<*S}hBN3W=khGz?6l-&+BN1*1I+m*5pVs5z|YPlV=LX;lG zXKP}7-QG6ejy)p$K+-d^Jp*H0_hm<& z5>M2X4BS47ZMVw4fFU;IkaPtDMMuxJi)7b&(4Z??`$f>k7|2z%=~%)e@j%v5>-K}$ zw=nNq?>22od0euI9<*4fLukvP3{0-8QBy?1iufGss7<@$Vb|+*)~OeHlnoED-6kKt zRJPmWL|t3TMehG#tS<5@8y{ihyygK+y!htz8DfKLD-zrgD4euw0q7`^9>t zw1aH7b{*2aO{}1&fHDp;eLH@8sZ7cJV0{UB!3daa4wjX;A8aT|Kgj&e{C36`T6K{9 zmg*tH+pC9B9+9Ls+rY>x%Rs9xyK6T1q`%qz&4EEwIe9#+^GSWf^G)M+$Gw`TJ{fPA zZpj`}0Em?yK&%!te<7-fKhZfP@;K#_@W*l(#FGG=g5zo1pd?%Z{vDGP|V9fupr z5&##ax!o82R`IsWJ)B2cooK2ikFUX7mfOjPFO3u>i(kPa>m1LU^bVz-2{9$Ds@gNkOP-JQjtzlt+M~aYnA=&eyV})-SJfb zkk+Te;bpX@p40`@Ax_Bo!hU(Tl;1Edi8{TMpdH_I-okEQ_*J-L@Rs#<>S3ttKQucP zWv4wp)jduP;{9gymicz#;fyj#55u~!l!YDNbl-B_h7OmOL0>P>r!zO<#wdv=eCOOI zWZwI^)+Qepc!FF!`o8I&jVsis8h>2$$&PbJCeFO~^8g7T$tT+xMjFS)yK%=w)*=CA zb<5SU>2AVti6?A}iNHwnuJLaCaj_>n=Z;T=yFboNQ;iNvDU`&i;10Ay7QuNhAWKoj@q(^)tQI%7lc1x|2*V-z(vm*yH$q~Mz9V$g)xd+py1 zIPC9v@1fj`o1;h@0&60RffK^-)$X|rMqglqn0SH4=K{NenypdJx(=&9=>H_m=>e60 zy^e){-&4^4QMAS6Q~+!%>*-EFYu(&qE5d-Z`kFxy$iS90Cpe(5VT;yU(?Ja!s4Gr! z;J&G6%bmj;U{qh6?7($X%T^-ivCe}3_;3Vy4z@*Yi4O0n`vGeaZMkyn0-T1*>rbY= zX1l3ktDn>1Z`87~{U@YV)A*Gm^h`Z)K1#cSuw-8r9il>HA4-L5~9_JGYx z<)vQEf{vI!t$s!93kvE3svM3LVK23pM4g>b|Dc_a5>I;S@ZhozlWh`Wuu%tQtMt++ zXG4eGpJzzCUY8um@)Omvg?LZ|IRyrJ_21ytPd!dmJ*zhNX(wpC(H==0ZF~`bMNFIb zv~zDnQKEt!?DCu|s{`oype6lYqsqvDwZW*2HRjXAUZzUs0QNzi z<_&l-$E1C4u0OF^B0*n#Nw^mdwtx6RT8h4C@Q%sDy#eBt!vP8dwvAWg^hE$twX@P8 z;O3xh%hi}Q{Yey*0k=nji7gm5xxe>Bm0|(f zgQuH6k)8+!i%p*El>m3zg9j&@KgF)8O*;2(`a3{+^Ni`Oy~1uk5jN@2>s8qi;4)Ct z7#Yv*ELv3_@^$*v@QJ5D+YeLIa2Be%9r9uN{_y9g&yyi8HEn0fs;ZEcX*y*EdO=cs z-$LT2Ifn)7!kIxYh#Jxaz$)c*M?hIQ@2q+ia$>q|=wd^-7zhZ>h6n=EDx9}e##yea zEo5pqGTM=q_>;1tb5!7-yGm70NYM27(3^%^8B3Txg%Iv((IL%xU-CPa(w)v4Rihy) z(?(6c$?rHzHJ!z({to&64{5a+A~CHu6jZ;)U#ijP7~(PtSBDlF)+DFct7!NT=4rMe?s_rul58JeRep%^;09THho4TLT8Qj4ZYZsO zP0(*oAF}FR$nbRY@V=*4lC)udyZih?9Hws!?Q6J_uFXtmq#)az{X#59$x8~*OM3_U zpf=@KMV!_eI#vIXT*3O2!#X$gz5Zib1^bjsRdvYb;B~0u3Vl!uS({!QmUyb46wEQD z4gjozke2E6;j2&elYf!%yc~wY31CnQ>6pGYT>TW>^5=w{a=<$YbcIaU-_39h3OB2f zfaT@Nvc*j5U~RmMcr8nm)%yPB>od;>peD7%O)U@_`aGjNKsVS#S*%+xUz`E{muGEGl?ia@lYu zd~m6m(G{ASUK?0yno8U>r136q%&-seHlpHyFcQBmy=*>1tltzNB5D5XF4Opdj7C)a zrZUZY9kc8)(=wRRk{fLdC-T$&Snr>{IbcU@%1tnqAhOY>mWcx$jk)p0VniO=vGvg9 zxf$UBwMLh?S|lhC$t~N=K!a*6E-|(IKLtGR21{G|qc??V{Q!URYwVA!6(Mrb4y~VB z{x}mnFxA)}Un@rBrPVHn&uli>{clPO9z1e_R*kc1PCj{7GcFr(uSq*3&@6~=INNiNE8;Jvj$+5qK$p}z$qdq9MQ?D5NN=V zl)`e6LkUr3H_c=!NGf4@!%>3hmRdePAWOQ;@{j}E&D$cZ>RMQG`SwV8TXrVpVN4OE z8!Rt4E+fjNmb3EYOqEG*|KX{~1A!zpjvmBWsWHpWJY`dD(jt+1Bc5u6lJlNOYM_wv~FSt5%&j=@H8u$0%Z# z)M3lABv%Y*A=z;J#lK5J_ONXk$yKgSiS&lWm*Xuzs7BhA#SEyCYGE{K$iB=$l$Quw zs0=l@6lcu0r~oVr=l%HxUF(S`SRx;f91!_< z)w{(tz=+b~raBaVfx*(a0$2-Qx|}#(=bHcaL2SKM+yxj>76dFV`il;ptrv-_MbJ!j zF8B)#{t0Rpfv_*|mkP&BD$o1F2i@z9VGy6H+%a5b4rp3f*B^|#1$)PLS8hu%PXl+uCjX?|dWL#Dbax%BzmhFMLhNW<1#F71 zPp%3dlDj1d%7Eqa8OcT9mUE_A2W{#dv3%F1t!=>dVnYHOm5jZVv>S0ky3HE+*?;G~ zvN9Bn2~0p8#K~W6dmyPuodBn5CxKWKz`Vv(s6$w}By0YQGD`anBoyr;=u#^{y@{w~ zcOYi$ICUvWiT|KX$=-P*Aow|$RKkByw#4>8?3g(-kXWQjFr=($7HTr~LXtdU1GgvMTd8Xg^($5*DN11#sx90vY}o`TlC;}&B zS_q~&>))6$328m+v*a>zP7Wz*oQAN^e#3$*;HfJ-&jJlYqiP(%J zNra(vm^HZBsoTXxg|MYbPDC4=|~TGis% z<;ooaM~2Qc`XNBy=^7}JJZYSQJEHGmk6l`h1l-pxK1aE`xMNo<*=7>KmiHa{uEnt{ zl{^8*hr${cl8xnQag|H~=Ab;1mVAXzTkbTjH>Z-7PKG6e&s2HO)8@T@RZ4)Za4v#q z+ItOrE8;XKs9re0Z-}0AqNP{z2Dl7GHTEMmO?q>I z1;YeXN@A0VXh}1JtYw9v+~hiwcR z3D~W|Jys$NWUEgeM4t?-SSi6)eX?8Z)*2dh{(!VpvGxA6LOm;P3a^!sOtIDe)Iu#Q z3Cd&ig5~&yh`qBgsH@RVfM{psL;(!YzE=r_DpvZG4of426;h$06+0yzeburC{dMoG zVCy^dam&Y)v$9`pU&R(GSgBF^7`dle2`dz(2EAcfqp%WFXxzGu5`&JlWV^6#xjXI; z#a27C@r50-BDO%{!$HYJ7g$EgiR{~*@W-xJ9m)(EVJT19D}%VScUG)bfKrTpZF%ED zyA;s+@Iqy8=zBJ+`*DBlY~4-yj8?WhM7b?Fl*xRC=1jJxW{#oRlC9h`-=lewZH6+J(M(pB{F#ktn3Yni5oH6- zZplLtm(ksOChjN7WeY8<(bsQuGV8y=te?`LDjC83ug_optNU!>4Fyf+ViBtsSRc>* z56)k{*!^drr-CMXv98q%3!l^b=gwb-x+4ll6&^li6r6ZiLBYvxxAG6$4;>paJAo!} zTAWZWn5Ygu@}aG$w{Pvlq+cf7Y|QXCIwxPsOggTf!-9_v)O1Edump4<1>){CE8<*)eFUsiLmM?848`sRSkMFX~ z9&>22*xs2~!6z?E2VthQ>h(FMWcHe8r-S#le0?~_1HL|dcG@&ky?ERs4wOtpoI3BI zN1PqssO&D2!%5RS>%BNq`GjO6(it%)8+rlJ{BU~Nb^uH(f#e~b-zj5rQ>oXBTj1!I zibySEa+3vb;1?W6`To%txhWj3R|WY(@OJ%Is74>a*S0c0TTi?UNfCHACi%k#ch?KX z-QobebsW&{>D6<`UEweW5w&UMdKD;>KsQ)}_w^J9Q3|}0h3ikn>2nZedo3yx{ZWHV zp#Q`Rmy|ZZEej9A>K)>|I5wpX@F6kN{P4y-Nu^RZEFuIk67FG*JCa1;8q%J)2=1An zMs2N)$rt`k`Ys-b<&HLTCyBwerNPsf zR7odt&oxRU>2tw>0}j_43m&v6$X<&eq|+}Ql@Y=ZjBY0PpS{QE;1tw+IxP|&|~y|`4exP(x5EX zoytHO^x^z{+0Q0z$yr=GwIQ)pLI(6)!CuK1usE%j4(D&kRHx1Jyn15!`uq*q7bcgJ z=Oth5DqPC+l#Ptu!wzuDL`#(P3-eXvS4828CD(Z&naGrR5dh6KS?0d45wCV zBjqd?)XnLj;JlGAum1|g$Tgi6`^xjG-!eFJQu-4ZVEasvy{$xIgu+r%76UFI{mk-g6@WxAM0Nvv>>?0R-2vmg61AxA=&9fIo; zM0W^Vs3sf}f5dXeYGgkY`qIvdSYdHG@h9$bHS>v7u*GCTuf!wvGj=1+&#E)mq?Rlu z6MunQ5~X-8Bohq8x0sfK%oeE(3&}(S$DYMluit>Y?EC{T9~}3?xF? z0MfE_-b=bR!$53>c|`YFV5Tva#t|wxd!*%Au2cu!Il78(#bKo5ys)$yjwa5?GC@*m z7S0J(;-Rdw)*}a>-O8*rqlt!c&pM3+J^PkfYYHqv%>NF+OhL8Y4kFsYfX&Ip{;V;f z&UZ-X;%lNK;4A#ICq|T?IRaRR23rxG4H^-9rkzQ|(O6d;M~*_%I~){=+6>_kBhU2l zS@8KyTuo{O?~2hZGsrWcWQ@(C$m?peh>@GmI?ivJN2RZCUy3?lC(F z6hqf{T5DvDDyrE3hSn@9O4#dB&zgNDzhb?vY^|L&sc86b9--YtmJ^C?>RE$|vi3MC z+3a_224FLxTqkxjuo=ICs@Pf8wmn&26*cTVsa1))xjsi`eE>jEyXmFWS?M;s;vCQ& zt+1RhYTKR_4|GQn3HLcpVA{U?C_?=wW5b|*eC>&EskhCKWXy86RRG#Xi~6V82l9Q^ z6UuE`S>F})?axss%s!;uX9wWTzd$xM=DPJnCYXG zS=lx_#dr313wli+B?DU#T~5?%2Dirwz$|dk8+`{9QL#3EJ$;s)(UR)LJ&K*xZabb8 zuDC>y%mXbczR&PBk1QhLTAqPLXu>S2Eig-1QH@}_FLsp^a668K*ZDW_FQPBQH4#3Z z-S6yO@R7_6fJd9~Am0=JBIYteQ`qNpw?R=TVJ?3ZuM+LV2Vh#aZkZwrLMq^PAm8hD zj?gQW{Z_=IMHdJ+^K305#TZJWAE=8SV!^QcNYPZmOWek`AfEAK4Bybz#8u3=LeU&S zI8PP3A+Vs)Z2_bnTfQN=A{zpfuZlk&^O!$KaNMW6)V>yXJod3rki>Xcx1W8j#iwXc z!$pjHcB>Q}B~;{}#(#==jDSw5?nj#72|t2Os}kc&;Qq|dU=w?HV9^(XTAnkuIxb9P zfph#|H;OWtNG zAmNl)lwpr5prx*|EbJWD0N_n-L5)ddGM%n*?0iM7PWg*R#n6cjOk9^bcNbJAEb8@$ zc^~P#PpwY=i~B$HLVxk97&|eQleRFMA2J~)7_poJBtq5&7fqFaR|g$5y_Ir^`;MLy zcll-Shn+qJZ%l8c9^$=Yev2?-=)NE06Jx?PM$9CYp++FgO{G@=Wi7PFz8nsaUEO&nbf*mhxop z3xEQ;Le^qErPTA$dn&IwRg3$SUeAv5OWsrYFU-PGr?h(5y#qT(sgX&GZ~)9?bQzgm z$@qKQDe0b@-nsbXCfl@I&n)3IKQ@TBznI5_F=iZK;cc~jmi-;c0@^9YSou{cA zE&e~&hw)1sfE$N!j#=-fsV_&;8^1QGeao0pPGy#CqZ_+`!Cb+S0{?D-wU4eOD zupRN�+`EoaZCPR=T+Igt2OI&d6$xFv7h1SW}k`cOHaQi+2{S-Vt_W{tT4aM-UgT z<_SAKA2zno^*eC$*CX&jOcPrDV}9qDLsvhJ$i8uW{^Z!}E-wJU5P2hofQINnm$6B1 ztda1B`Fuv_mwX}_Scf9!S;x4#j4d{IM8a3y=R1CcoM5Z_=TD41?{ds5#k$1Th;As) zmv+6&E46S*tdZOhoA>L|&hx|e$JK~La;+YkKQ;ETD>!co+HuQHT8Bs{cC3DOn>Lv? z#8*S-xyFRM)bd?$wWKIPfbisY{$yUf0K!AGsEvnGS%6!BXuc`2!OJK))uu(UZ}`nW z8C&X{Dlj(LWZ#fpm7Q-H+oT$sf(X@)4deMQV``l)?$McS!-C{;Wa;lzOsQK{`V1RR zh*p81!&w($TikZ2&x_+@DhX6$K8QNETd~%fizB* z+>G3(e%XCbgLit@_TK;(?~E>{0$H2_;98EWKXyOcFqYoMT%dqcBljUA)xrO4!&nAp zn}-zW*48l~mK_bqbj)@SbhF}rvnv(q@*Z?{Wk!qGtdE>>-`kL#j$!tY2X>U}NQ zX){a=iUs8!5r^R&_8{AB;Vd&do4t^!>Ovk7>5OWWjrw2iyBZFs-`nmX*Q`W-!(eXi zv3aO8>ya0b{jL$I_n16no8`$bkVn=3(G+(7A;Z-d-6w4Sg?iB^Pho7`!4~#M zREn1&BRcl9GARHyyt`SDd<$s|Fr5JIVZCN<@)e}9$2w_7xmg7od~YWRCA#m26XR#Z znx~LN*L8Yr>J(WYN%ZJ#s!R+(4Ksn-6fZ{7&7gT%co^2~K=wjzx*4>D#LVy`+V^Ca z0tX`kMw{DXF9~a)JfqsT z1H^{QO{jSn>4?Asq-Ov$XhBdTGUyn#Y;KI0n^yCmqz?iQL_7oAg|byJN8SEz{xkN2 z&;tq2@OGYT35>qmx#kJd2f+top26*s*@l>Kx5efk2#hDOoe2nJ+1+@W#YwsXfyhz+ zc6hcd2Je>MEFP;X6evC#(hkc;U=-YH;&nv=IY$q)S77?yI{65#?kF= z^E&68Z@Xr;FXo-w-IjH>xufme*cp0HW=7G<&!ewyU2INu)UbUmn^%3aE+T1#V-5r4 zM|SGD?nVvkymPvvTFl)Wo;e@pOz$nBlg{g z1aFrdep6QB@#bks@tTno8}8L<3p{V19DZGP!{f!%%gGCp z0Bc#g=jjm{t;z1I`Zn<}%I!tND)JlR_R3+dG9mZKlm!t6=#uNf=u7e6zJB<5*v-73<4&DZ>O&r1Lk52XRX^P?X}4Ck=ppe`FDZxvB;DY*3$}_2dqx5>qbft7gQnUpm1U% zVL|^biqV(~68pyUw*PSOy-BxEEn(51F=c)me>meFttpJOAn;A(E%9*2J!jYIMmBwJ zAR{_?&!x#W@v5XgGZ^#tzQ1(Or6EdUjeBC(`y==I8($_|mC$EDXFGB1{iA!368HXe z;xE)mqAPEcWP+ji7Hm>*uf;W^Nixw;GJHF@Nn`ci55OkZNQQzyXcS!5-*hd(P$HZS zuqI1oUT(D+hGJ{X6T0sM?-@7JIKm|tTi)locC)IrBOqTMD8%(U;$J z{09E0YfYJxx7Es-(9!ijGc;1)n)VCJ!a4NAJj6g)hKLN~P*(lUGzYeuyKHrHW_1Mp zm4*(~7n2=WZz|bp=8WrT`uhxZ*B7Tbu-{a*HOyJn;r16D+EY*03*FpltC2IRqvHP? zr?RLc;jcGzw*D*mHS0}fTkV`l9Yg>B?GPf8|GykUpM_>dQSjUv)J6 zJ%_3iHMqV+=6nEjO?%y?)H&&wc%3<*I$B}zGJ3f^CmyJdA`%{Ocwt_C`4M^gPhf?C z&Jcb5-wxewIFd2P{jvg}D_TQ;)_)*BVD(adsg?6xN8kV4&_w-*vchU#s86g#K=@_0_T&QgHn0BA$;fz_5r4l&@`fI(Ae!W`;lV2-ek zT0q^t*fq}6PQW1adhkZei|8wGZNzEM-go{kEs@OHT&EB9Y6mihKZBwKe!#wl@AkjxG z8TKBjoEm=Fys<5qXYv?BD|9t+4Kt}wITs*2pxU@0u%rRb2~z{Mv_f)~HsEEa+HyPw zTum38^yw}2uWdda`$Q;MVlu4P&%d_mQ#9C2ASOL~RVt4LR1BVO`4sa60XZ7eC!>HL z(WW(t$)!q#fS=JO_TIqCF9B);&W+V^;UY_%lLvcI0mS<1gm8%^w#j|HxdFtw4Z$TL zXwnXJLhCoUmx6nZ{TU%Ax*w=EU}~tZp*mx28wfciR%ZC4hH0s5EK55lH2~ImUirgsllCoJjpiG>`QzCTo*3~~R5K?veiGj?XGB5jc@ zKYT$%XIK>lc!I2lFV->iK>ue4I#_or#gV&I&zZaGa>&DJpW!!kw^AK>OO2eFs}e%e zrbUM}>wHt*?I_jVasfFFKdkdjeaBO3=*(V~9&&YB@4w-cg}QI4?|4g%`?giZgv3s> z5r?_!#8Mb23P)9DNWnC2IIT`BRh!4pppON}$}a%W<_cMx)laGKW60D%b*eVEpI+aN zs!JhLgD>jCQGQx|>>+{EqeGD(Hs5CeplqYMD;X8r{G|JChU5;a)B{*Wm(hz-sXLld zvBOWdkF)Ax$gSx^!;$eznteQ?RS!eHO~3s?&9FhYi4LNK|Ih_V)aj>erK6^%Yg&Gx zRg4F&Ht1&rGfl~Wo$K=u$LYI68%axuKFz9cA==ZYhc?JdTz#b>6%f!Afq^Ncc6cL( z5tFKznH<5WK$D>F#S(ENV$SwdG+V=hnc{EFO41Xxnjn=QO@fT%PTWn17J55 z=Yp)|h$5`JFE`EDSPVdoYVj_jwL7AYte;^3GLDU(kP}=AcUn{z)yk0u3cgX|5#^1p#oA zJ6$^H(o!1(fE6zQ+z^|tB}Drd{|=&L<2AlFC_1e}`I1;Z?TNY^Fk_+bn+nMz`cinM#xD zSu8l{P>Z51(VmotHr+{j#d3n9jXz6P(at_5PsUV^)b_&?^s6KYT#(}LmMyaDjLwrb zl_fQ^?Blr1zem>Fwv+T5x#Dft8Ivb#ssMnM;~bCq&&rP3cE;u@n5vQbSRy%A`N7=_ zJN0N+sX8fA9g%^j?2tv;s*_yNb&CH@rBrapBj{Ahv{s!y%M|}!*=$?&SXX(VF?zt! zr;xpGnu&p@p!g%O>KOwbB)ct6WqN0w7fULK5F)~s5u#!ME5Gt8beN`$nBb~Xr$<^~ z>F0~EDT{HHt&=CcU^&Y1kCDh#p-z?bi6xw4@n3-zebN-nmj7pyikG1sIwn7P8X zyH1dFi^Ul5H~wh@dUf2SD=fx{b+c*ZI+g7)Cg}4Vke4EOxrxXeHJ33 zSFRH8pF6+=QdPV#Nw|UhGBg0Ib0B%KY{Cr`LQJPAeD!?_Pri1FW!J5reF5-f^nA~K~YlFr0H z&kqq)py~-bDd^c>b}B@6IFG!znNF5Ja?rmX9w!UK!_(!#b@add#Ro&`VQ~nU0=&jT z=aN6?;DP!ISif`xv_+g~!1`r#ES8M`al+WC$*rHCmaPwsLm{HfbaMTf2F>d2V8*h? zu$9@yNjHvF_a zz*H~#iw&Numx$Ac1;Z!h!F_kg9|cJrCJ1Tw!=vm%C_e*NL@BU$yEeUj(4yWZ4uX~P zIm@kQPAk;=#=V32@%5qCFM;Kq3(OCSRHBbZ97F}sD4{2>{1AQ8>sO{#2Mz1j;&{RS zF2Zs-X&M8xMRpvy{6@fVHmy6zRS(fwmauq5m9AUZuSu^EC#2devyv4xwj4y@;8__s zh(09UM|_rQvjV5U+5|~z6?P@*hr4JCYN2AAl2Q;CwWO4+4x}(tMfb6vliCmmrAjOh zBp2-_2vSS1Z<0z7Z=_1B4x|=o{U#`aZYdGGeE|^Digif3!C$>^o~P>x_I1(?#0#m* zR`ZfwyQoXao`^`3J&E3`U5Qu}{Dtgl_85Y?g5^pQ;*YeR7wM9rHequSjG`4k^*R<@ zB}Ckja$9oQ z3&rSNoxL)~)76g+PM(B+QV25vy(@Dn9-EO2uBMsIXN`$;5wRV~&V1GA1RZW*A3B-r zB4>-wxu(M$fE(J|cq!RMHtOm!_t37!Bgy^fmpG6oWrqfx2%;HTel&upC%(Uae#gup0tjV##ZKOLCKVI!Hp?B1sbYc;zH<202>*NkKBGs>n&= z4X%Z3pTQ1Ufh>!i{53O!i$I$coYXIO4QFsQgbmOnOG#evT04U)%gjT%je*I=Xj&53 zm$o$K@^vVH;>!7D2T*SjhO5cba_B9qWQb2q&KU<(j;u4*LkAmg@h8{H&@P8?&o~VQ zHGWI3m8Sg#UEfQe&;aX_i#GZvT7^pLfafaIm_%eQ^Us_ZQf_nv@Cz+@S#&07NUTvi znJ7<-Uv?Zi3O%<56I#l$Hp4o^2w8n>3{KjVud#{9ST>qr1|2IDzp+fz-gUJZ#L&&g zj-*Z5DBE??vK$P3($ZPl%4SySH+p4OwDlX>@BAOqt=6;hR$7$*iLr1}ekh0-^vV#C zp&rVT*|~3jLg6keUCJz4&{BzVK&E)_{`f*AD^1EcTGP^p(k)ZGZ+~K;s+A#S70qoa zO4%br_Y4*8w9=rAqE#$^16CH%5|(L0rqFpA%WD)U*@);*N3XbnqGN)>*0>PRHz0|0Bvl>!a2`eA?kD|$Y5npeg!P}~3WK2``dYrF+?G9JH_P2x0T>o7%AYbH_TG>G zL%CIp@*S;jd5$t6^I_lpM1ZsW3!_pa3j{^~=!RZW)=kc&j~KMF0uvNuse0j<^dsw8 zS-{=Av%GtuSL%@!P#DpTMZGd`ODumfWbe_h&xlr6Jsx^=z45%biCGKKJ%jB^D)G#d?L~loEW2 zQ88PgD8&a`f+?0SyiD=ImFN}=6*^ITEJ`$swF-MEKKK&DVxB@h$~d+}qgb`@F=ZTA zqF*do7)BYlDA6u9DqN+E6Y(X+#Y}~46j7{?da-n20!0+(qf-no#8E^oeD)M$3Y#gS zc%SvniFd(S0!^FKYfEJls%17kC*XCTSkb8|MT(vnCM88Ghl~hQvJ6E4Bduip7n(zf za6SiXV%kVP!h~r4n$z%^-@lM?o#hu=v57ePsj6#w{Df(dThxfuNyaF zPie5^QP3rgn4|HOi0lzXO2&EdeP?#G-b1%!irdW+C>fbKCbIz)gq4x$tQEyBGve}y z23jFA;;)fEC>@y**G9O|H_u08j@Y1YQgU!-^jbyGUX&b*Gg_^X)k|qzXvBarXQe8& z!r2;+7S4>gIO0yE*jU!!W`ihx=Z{&R5o!I5c07N~>WpBkw$)wvM_trb?2QY$>ISJAHR|&CjT{E?G^=t}wN3ppDTh z@YW2gD6?4yN^a(Q&Il95<@`Ej#1UO9zrx+>XBCB?4JT5J&l_0I^0hXgiRcwXYpxZ| zY}S#2x1`}_gDJ%G>la2`(3|p?(8cEuSoxrXC~Q_23N2pAe?5QJDhwS-VQM}92X?po zC7IBy5e(%drN!!+R48R+r+_^_NblSS@tr>kM)F3eKN380ymF}PyR8MYN)+GNmlO!( z2@t8>COgfFlg|i&7|#QO4~X&TvR_ADXSpu0wJ-ld-D7ex=@rLy3?RsFD88_NX?`;O zj8Pk_qA*DEJmR=6*Vd#6Mx`xC@m)c==_97k zxU4Jor*V&183Kz%#R_U~!Wn%cquUdl*PHwb_E|OSrDAYFZ|p19&(2wQ6+hWe0+q!X zV^H$BrdVwsRxoe+HT4xQFjz1vGTXCJcbJ9polplE*?h$Y`-B3rNhrq&bXx;3SV)@w zvWd^28YJvy`WyhhbL{dAl4k|lUMqIwf!(|i*v%6H6*~&5qIa`?w#b6)Z&3G|UrOK2 zd_ul$7g)}#70{RSyLlNqc}II8>MpZTL9mnO&w6L?j1Oi0&3h4wIHB1lnpFYaquC+7 zXSLdRvVyl3@L=&Dt{85=NUh4a&-@n3wY)`(?}k&&5V^E}ZQ4vRBAAN(Dj;-R>_07n7@`Rhe;{pJog_M3B(3j~RbpXnAXQYLUZ=GP=Y77gMaKMD~5 z0pJxW7Q{ZTzh%dW6bAT#VNp1tAO9(Fm1#U`D|ZAmA$9~~^9}KZZR5g4F4U;_Rn2kj zqJC;r;;P{|ZxK6zH(wGMJ{A=IAp1( zBE#e`PVRCRC*AU0z=!d{Ti5#$uwp1t51KtUe~!OJ{#pHD^^OPSpA^vkxf*|n>-(P! zE5=JxWt_69vc->me$S)-bYskc0?<{k?CyyNk_=Td-{fN$y?1@BXxr%j%~zsr|j={miI0rcGQuE_tC{+8*EY>$L@Fi>hd z;Q~sHPu@#;L8ecH?JghPWzh~=t!=5Kj}PIP@TFc*&_+u8&d_}&DXYp98sb-DnF9E z2xEWGz zFL}ZRP##3xa&sJ;XB*@063f@d`H}hrszp{qft#ZPU%L(HTZP7i^DD5m$PIqtyiM29 ze3yhM-7w#I<<3%UE$4>Myl-czMJ>-p81Q#!=k+H=Ay!|ERpeDz_$Bs9ZXBBb*y)F# zitdAN@PL6zKfgb|Ph{ite0b-Ry#7?W(PK4o>{Hhiek!I9Q7s(iH*Yi+*|nCxgePu` z+_q{0M0mVZUL1;KBoK)t0+R=Pj5j|6OGHKrtjdlRbhYGVSfCP(BsU22Eu9K^#_2}z z4cNRwSFRaR6r`Q3#yY5WI3mwR=)5pcegM}j|LTFC!~x#Q>Ad+^BA6jJVH-av2V)XVj3Fi2OlBBHtf0_hI|-t|Dq-GZ?Bx9Lm_nx=HMf47 zYz%=%maD)3r-kFesp41}K8{)SS&Wj$fx4m;0(XHPjtM7?<0i`hABUG)cfF2Sffi1J z9H^dxu~xUn{D2k$RJVdhq8@wdyg}z^*nm8W{NiyeIzSr7MNUq5A;$OtiYE%!g`-;?jLdMGz*k-sDTJSLuouy2tOQ|?uX_t-tun%6+L z$>{0(j2Y=>JQC#*L1OS1xuE2=1 z;1X40bCT_<*-P%{nkEuLQGlCR`{@vQ!0YMK9+ka;K|K}!p$>`7j%Aob#1n|R;(;uq z=769;HH*iuaEyAlW3oLkEpF*85dw1Ohg1iRM6K0*WvkDdmhtNsQ$Q!y9W9+{1D zoor#y8+7T)y1<-9dk2QsH7aIBZqzZ`#UmBOpcTeWM`KmEMaq0V$DQM=8=lK!|juO79SQ z2kFv#C_y@e8cG5=qp#=rp7VbH&UG=92{Q>0h9Q%zd#x|P>+6sUQ5$mT@D8{?g#4y6 zY-oRvFNfFOBMSS_x~TU$a|eIom)ltMI2KG z`ZeXlJ%!Oacsq2(uZzixHUIXT(j)(uWJH3rNPOx-pW56c4781~fVL58OOrsrolBRe zc%YoG*FM@EcPdd|&%z|yop`E7f7-$%cJlVl?PA&rr;dgPJ52GSzQsVjZya-Y|y9ox}=)g;&Yq~^qJ zG-1N{J95SC`p?Qgz9#MjXkvtK?l2d}>62PUclh8q2u>xc&8d6E)D@;3DG|cN4iZy$ij(!L%55y0qyAtW zQh#U;({{tK8vGp{P+Ou>ZrbTXzeD{0p*aY5)QTtd9l%r;l)3HYecO3`$#Qu6TzCx; z7?*0)M_T-jOMzM!nPO6q?(h#gC7bHi&ouvoh-~QNmAABAlJD?<)vK2FOR62oKLVD& z1juiw<0|TuXsS$Ku{@yjl75G@ShnK2&6snR z4_Me*KzoOKhTDg`OW&K2HIjQUc*uBI?{d%RR1{h0_42jxb(MZF2{xfXKiV~%v9+A; zDGl-`@p$Y(;KB7*P%_f(^nUSfBbkTgF2{^oMXE(+=pr53Z{U2- zw-BQ}c1dRFE0Aq16pa)plbQ4iWKRoTBN3|kkJe-l>M$SNVAl6n}#+s_}=#YxJ^nEynbGObW-(xnh_Z~5NpL>m{VJ8`7~ zBUM!pdoWTZj+cKwA1D9bUzTKJRjAD_Y#cxTu{uRsp4gDfaHn02tIRO27&Vxxs>jb~ zAMO@|E(699V6^H<+5p55Vf?|BeOO0K4`CeS$~){XHjSumufMVJJT2A5siz+Ik17Qv zR=2wF(N*$K&&qRoA$*)*gD-7Z%oDK?G>*GrnpP^d=&}zwQ(R@i!c~S?vx^Vnqn^>m{@DUN!=8bR5HrxriQW)C*%aszlD)mwD#s(xU zTuftGD*X7~@VMB>vTBDn6$q}lij5$e-V5SxD5ODM@>W$llVb#L*>Vg&0>Kr2#BXp# zkn|6)qUS=j`l!R36696L)23Zad%bV{w_t^!!<)iZc$g-w4w^;^x=xNohDp*q|I#TS z72_-B>w;Qsimf8uxCI(j7+3v*k01Z(effPn79YNm#_!V7bwRk{0M@)(x-UpJeA5{J zT37ziDY6Jm;4#lIS=y4zpGuZSTC2--kJ9QxG47a;*@*jM95Er52r)6fm{0@)M+{(A z52irmxWuf|bt)m~dc{A06@`0zFoK15Fay{xNEO7@#TCM{48DU9oEn-MYxJOw&`D>( z9ySRfav_2^EK{vabx9M|QSHydY9Kqy89_!-MuA2VM$~l-PW}t75ZYytF2~^c`*j3P zS_?L?jTMnzX~wgg3q%m3Wz*n!fc)(Bf{F`&w_}L!gZ*Ey5=dEFGx-_!LJ_2_y_xDv zVqpg|zYKrx%et=y6GgxS=c(%GK?92s#JRJXzU~(Ij)tTQvTHBcm)gm8p%H>?-wX8R zchXyMf}O2+^foj8$H{_TMs@Fn&NH6f_^V=(36s3<3H)}kSim|Vipw&=lH_L=3$I|Y z%P~FlL6TISbo*WliV()m^!I47efb4Wm&`7I!ZW)CTNln1nMhF1BEGNzF>6Z?M6>Lx z{KwKFN#RMg|8@Zi*;pR#P7jr2^t`dp10#Y^ue3xo-Uq!c4zMyr%ZJ8$o)7ll0SlBc z9*EvbOZXpyixJELGQCpT`+qSt{2O~{(k2{J@uo+hxn5wxa zxFE>jWOS!SozcOMz4({a+I@cq$O^p15AqO0ZK>g+L?DAR@Q1+}>imt~ASs(dyduFO znNd_74pO*j`VijsU+4``bO7%%imtnjj|>vA*NOfI%y@-*F|PPWoe}&YeEefP|M?RjYw1AKAZeSN4_p36 zdh<8+^&7_-@oHVZitxliiZ(4B5?;5VDUke4t%vbYQxv#AaQ*SnjCu7QsxPN^NrsRH z+-#)_pbGHDyv5LAj4_1gl!rVk8!Hw{}=P$)Cf+xidoDTWFhom$rg8e7N# zjLMSE>( zoO_Y)m&mXr7|BD)m8FoS2UsVJ??L18Qsi$9&9(pe;vupZ`C*Bol{&x~BXjP5h+aAC z1^xm4x&9X;cTT!W+QS$qdk?q|fchCSun82~1uoyaW|KuSW(<{Oz`nxt9&j$p z#(>om0u1M2W(Pn62GEqwM^-g@01~V>h8i@}w1#2HueJY!0R0xzV68FY=dOnvDW`S6m>z#AwW&UonkF9h7?zJ)o&;bi*Wj$s=AX8+BaX;Vrzloov zo}~|1l52I0$$8`9Qa1=0kzSi(&JNF3fcLG8e;^~-9xM)43o~*c+bjDXi+c?{H(LRs zvBcMP=SwR_tN%#QX;Ac`Zu?uH$S_82{_SEJqX= ziEl`5tm;AlwCCcK;PbJ<(!jD8C5|4sv4V?myD-i)xv`>)v>a_9Exr>QEPUApj5Gd@ ze!bCf;c0iosrw_Talva(2kT$^ESst>qV3Wk{Ik#gI|H^X1KMiNC{CC*m3~Hk6_sNQ zY{9t#9W_$_{-uEM2yRo{VZN^{5Cxcvwc`hd;y)*sQUxV7WdDT&9XxEe#G$}v;QaF9 z0H-|xM}tgC?cffmt+6HGppa5LkZLEw(ZV-n^9ncTZWjvN!V$!`As=J`0ih@V<*)Gy zF=uXP3DhH?qIksY6}{{pDEeDu^Z#-|05_=n(WNM6_KN(=1<~S*kiTV_Q7sQK=V=!S z+{1CE*k$qx{mTU*$(t0*L(Tcy(Ku+ZnKq+wz}&8g!${%x^bdZNNkPYS9tf&?%J5q_ z&Od^AGbDZs=lO@f)|=m45STanPtD9TkWd!?Z@r8S`jr|y$B6ioI1_4z1XAE|5~!0s z{lfG}@r#0fhCr%7r~nik7_ZQw9PAx@5u8X+bQe6=e6F8f{=WPZI7pt%Lan0;-+?Sc zO+U4qWJNrI0Wg?yz7)Zk>Y`elFy0j^+v@)r63_;3UXY{`Z>{E}TrR*XR? z>6n1}Zp+g@KAfW9NYIDV^88!^)CH*!K*{(xjpbnRE&%09>K`*sivldkg?`27|7MZu z2t4n$Jo_ug@dWv&-%!$le}_NV5!vVb!$1Aj1z|oP2zHDRklqcDJ7)*$A!ZZ-&(3*Q zJcE}guK)G=bZ~dYqJxnDVEM}>#ooPselEE}$QTStxD?JsE#jfC^t9*!1+UKs_bpNm z#6Z0O7+4EqQoftW+RwtR@mcNjv(GBpAHK7^V$YJw^2_S~Kk}P@wO?oleGmK2F=`-R z6E@6IsHPpdNtg9Hi#$v7Z|^K!<$sBABx1jdk6y@A-!*vw8gW=aBMvo%$y30M>lIJd zKo}pVy_y^DXrjCxnTeVk@o0_wG?|IU#K+CsS+wC!EDgz zOoDt-&W#iF=QM^%P%Nssk%Iml-*9kHC~HIPcgfK!dFe18@>3RY^ydHQbFSq{?-Dc7 zybuc8lmqoS|5Hf=Xw-!QH<`2ITpw*6lJ04Hxi?FvXbSi!fYs-RsY~oQh%r@ zQ)a^#)nS`DAQhz&X3FZ5zDfMwR1^@gsg^YW40V@>Y2eK4t|~HXIcS+wU}+l}?!_p%a># z121?vYXT>fHH%(w#IGs^v#h^l_ zC8tuRLPPLLP|kGxbrb^Xicya#L!94;!L~y(DRjgjvYa-M*CL!Km)HE9kJM+<9`*J; zQaA1FlS`u;=+hI|$oSqq`z?-<$p{nLIF#{X#GjT4rN z6Mh_5BNSKjD6WPz&i!GWyI5Q)etRe*>m2g$}FnTKz z;i{3Ia)1NL?bw3Edilh~Rk7(XH@fsy!-OOk#cT~5gc=W;`8Bk8=4vdi8j&co=^6*@ z4U>jqz}(X=al#$)`McQyY{uC*jS`#DP`a6)rgQjn3j*;x;}t<9`nAknP3A`%ftPbzzk1@M1@oCSO>c=+NotDqs3nW zdJom$pw)V&+&{;|S@UpM{cY4v&ncq8Ao;Tbq&*I1pJ!iX*e$*l=q6X>rtYKbgNk#T zgnbnn=2~(-Ktr%F>^42EXz6~&e&)XHd1*kdPF|OH0pB5RILviHY$rXXAQI8!R`c1{ z6cP)3lkS0^c!dxl`gIgN*iNNC$vG@qKx~q1}*hV zID)>4wtM^?V)tmPBaIQ^aV*Lk09?mZ<^PiML>||jeZO+ngGyTz`uI)DYKXIBr1X~> zZ7tb8@@*SKOb)cx*&)!mAv@UV>{zkmO#o6g;U7*6k<;D&05f=HEG)X{O>Pe5(JPYnc_J#95!j81dDs%%j{XRTe z+BT0CKG9np*#x>xF2LM3U@%`)&Vt+F)z(yc71r*(Iwa)WJa5G|ug7+%c(%w3P)?&I zC0%V?-3`2gQc~YWJM`48b-54nBl6(>zJ{%a61;T+r;D@>Eto71W1nl3+bgBZh{#Cl zjeTR0?RBH)B=z}jewXI2q@?Nu^iz)ew(;hT(aX2?REms^nz)=YC;_30%}5Qs09e&Y zrEC>mEY0Knb_r2;sZRw@Lp53ejLV(_;v+Bbm2h%%iE}>j^rTW|>ednAR_>NHM6MYY zV9>grZyI$>F^|ZDB&u4>JM<8{t`@DngPeNVO9`9sjgN>X=8g1)r)E4f`|Ja;*x#Ua zR;p8}+wt^otX!B}bxK}3h17IWL&l5w?QJBA4KFJOyJM2eEjeCm8}9*L-D#B~vk6>B z`>Gv5$-#IIBwQI{g)lov_G&RYV&HXaED?g3%BY)@ChPzn4sGPAA}m6_aYc9;Ln13*uCT7B9nxevzFygcG| z3iGft&h|rolSJUH-YBYlJ6l=k>GSX9hi{8M&?FrPi*!aqi=vQkZyV_Dd6PI)>7(OcOnAM9?K|9i-I&1ikGvQoR%<_##C*8p0rZ4@u5vE z=tHUE4s)mCA=M{$4E!7q_f?_4lA=4QpTrt$h&G!->e3xOKYJ{sEIRf6P-wJwHofRE zGSZ9LZmnPY8h>SxALCF~mXPeur))dDw+@n+-WPpsg_M!j+uPL} z%ThwAF<$+|zMOT`%75~Vqvi3qjrIIpSDm&x_7i@Y*GoS$+)NbrdUNU zf?lvbXC(;Urei9Q<*iu`P>uKz)yz;o?|z&hnNeA+pYBcjUtbSTi&@9DjI(?e`d^IN+!y^z_9eB!WFVI5KjK@~$;b{KaJoOvAw-{=m}OaC%0<@&_d z40V!*)-8EZQ=`7pVHC;Pby1P|fY;f!=hs!YwK%_Yx^w>*o=76<+I}n8V+xOle8%IC zDNqk&uPa8~pXl%~LdBAQ75KGZ!b}@XZ2;}Mup&xO*F+I1GgJ3w2sKs;*u>IGtoF&d z6Go$?Jup|=c1bbmUjS*KtSL)T47e)uc7U_D4XKkL9NAEvZ!KLmT)uwEoidM|dUM3k%QI}oe$ z#MyB;Hya^|jdG5mD2WQ3EQur{)r;)S?S*R_dmS{>Mi7xsI%*l8n=Be2o~zSp<$E7X zj=q;V!nnl?oT(OuF6P^9_O*St{k|Zkv>>#_1#k?+u-!YWe-_05oHzr zm9pAFKWW3*YA&BwZf_Z(B4~Ss28egHHFd{*SM8JQ-zcu97u^-*U1(uFzTCLSpgP&t zTn&4Mydi!2^B`d*LS&1h-a7m&HoR(e;QB(|o>G)cyC0s+QE;`T%3$kqD68~DtFL~V z(soXQpUmu&_w_kCTmh{+WLTZ;_R^TocXd-Slin;JdoUkSG*MRVGdS5D0+jI;KhW#r zlKNDbI$sHM*`qMC79Hs8qTGG+$}dmX;ksbbHs3)<^V|`=f6Ir2J3UPccG1UQNi>~v z+z+24cJHaIjC`I;J62o3WrxvsSgx@lQ# zT{{{<7vl^nxMd~^^z0H(faq+5(Lj&6{mV2_h^oz4*!^ya5bCTU%q{%}=qOSU&?N>K8>8_;pgGatnf02Bbs{}cZmHtYO)VrLT^$?cBSH@{} zP4UI&$%AKRTcn|CKbpTuGvoRF#K@ zFNRK}Pb$O1Z4|TZ5#V1`El*$73_o??YCd36v zWvV=nGHg*%VR%#aUyfaTmU9|8v9A7OaB7q)T#(z;gvaEi2yhzB!%!m0Q6V5Kz{B_A zY|jvb)LjPpu+WmW;&G!J>dv^z*RzD5)8K^K7+{XDiK;gld8v}YR7ES+9mV-@{%#Wr z`SI&oCb3)};E11h$;`_^%?^+w5fZnD2z z;>m2|$S%?T&@NFSrix$e9#rzU5BR>D&}ux(31DYnt}Mswenz^O)tM|$QD=B#-N-th z$>r(Rg12R+r%I9b1=F$ng||UUlC@nPs;^pGV&`B~gY@dGBmQ)WXdpkII`Wwa5}2sq9XFzU>rcAt(8T?W8RBh*rXFPt*^SvsLzJsa#M;v~_g*btMa-=IIeF zQ1VE!*yvMX=F%Ir*_BD$0@q{O5^l-eSD)-%)(9=;GBaIUW2J*W+w@VpiL{5@IGy5gyB?^a&3w0gVO3VCzMI1WU8%53k7(oM8$oBLDA z_4@pL^;Fibs_4|{63&)lF@Oz_AtpMmD-O9B=hcyM-GHH*#>ucYV?5oH$0y=MN5>`B zwsYSu0O@Gmz7g~jia6lSEMT}Ldp5u`fIi&Ly|`d>_PJV`89d%iWi)#%%bD=D53^7y z&+ZMB>1Sk?IVWeDUA$3`&ZfS~KZmL1o)HSxdlxys^Z7 z?mgZwnFVgwm`X#e=`Heq*@wRccSVaXO(he49x+~-;JSuL$UvGFoZe~liXtVQ*6tb- z-=75pH16z5zx^lE>Kc#T{?5L1v1eBACwTTpcHL`dYpc4}mS-m0OLG-kCMoU?^R;}u zjWx|he0pvU^Ywg=>iK|5no{ONNeTKSNeY{Ef&px-O1})ndK!W2NHFDaFeSE^T}Ogq zJ)PiqBsg&-SmzqNE={2;NueuCL6t^81g@VHqo7JBaL6DSk)W8mWQ4k*lFPx5;pBrf zL5s)i&pw{fcMOkXjj%iC*lR5I+swG72*hSBX&@@F!S>lOx79HBD?YyHfzr>B9*Rh; zo~q*$q>h2H&GbvzV{5oT)s8(?rk)64mWj1pw*M&JXzwWJ=-DeedftI#VU}a9&Coiz zJ+0R_pvwzd&or@mjcy|}I(I{EoR{j|6%Ldm3R1v?F)|g|jB|xOEyN*u6|DW*o+wqD zd?%->JRTOJU?|zBeVttLniZd_)Ycthp@&GVUFdS-D|~=1(c@=}6W)-a)#;MMkbRC({IN5_XZNWU=QLcQwouwA zVPs2c(1-8n`-J_7jg53=g>#Gdiz(9Yv}oVswA|*JtN62t$Qr#@8&ydck*zywaP*tB zY0kXerI<^mR!`~G!zJf-85HNAw;rmp#T zz}csblnA={_Ox&5t&EqSHWr|+!_p(oLI6IO3Rlf5xDL+|qix1Hp@6Pl zqEQd_Lo?uE@oRIo)qCx@UuP#SK}HCwH1c^vHYMR2)qg!KKD!KTo3>W(9n!8-9oyEX zpNamc5bjrQZTOU`KH_Jar(qyCpLn@WN*`h_7Z@SC0Y9zIBR@E5B&`Ek) zvFj~TdSeoMH8-ev^o+S%-bicuf3>?cz$%jB9`wEuBsT(Qq3-cw|_h&3rjYbOHv2DuYyDSDhbFX(l|6Lq``DCY#Z zvy*Z&UghTwZn7r*`l3+q>sN7<-&7Gp;-`_v7yEY#EW{;>Y^;$@_Txq<6-Qn79}wom zB!9u3VWmQ?VQ~-Ne}@bBlZTWhxl1^_)rw3scM|th>=j1d>e^V0h-NkXnk+SpsBxNn zWaPUBd|~%@A0Jch^UKdoOgyH}8B}Hrfg7HVJ{ud4n(!=m-}KQM9hK&-otZvWRkdMR zHjq}Wu~P*63m2>uW^;(2+OaNERX5v-YT6BeTJOY1eMt&!(UKnC4Z-YAxdL^>G?Hp!lLiRw%?|7 zjE9OdhTf;e#UWz0rcAdQ%Qu{qj&7ven8J-tqo^laRwG)@{A+VYjDD8XucjyQ?N^{{ zV+Z>Tp!*G`?y(Z!6L4t2y2}3NPc7SN8MD@sb!dvr;&Hszt z#8;>P%x#aC3%PlH^QgvoE5$goQQ1+SQWGs~YZO}Ar`&M1Wtcp%>M@j_7(X_zo8uur z%|?9&kw$YA_#02Nshl})HKPFFiP@Mi8k<%oDUB_tI@2*pK(}3)*dl4wM`TB9zGyN) zOBXHUQEx?*d}F@kNW1PNpw`sJGGdc+q)Ai23B05RuPdsJ!3`6t&qNZc>n7RuqEm93 z={f9>rkq<}6HZom*!P;pl`gB5=6s<_bCOo^DDb|Tv%w9<0dO|0ItGWPlFRN>G|RO9Cg$glc5I`dFg+n4q5W+!<1REK@)U9bglWGUBjnooCxS z1HR;3aV1n^O~I+lI^N?dlf&e&^@Yz5B?*goRHm>J`u7)ZZIrRYo~eypGlH9A-^Qb` zsY-KLLGU)RYGc;m12G`u7|-WB#%6;0tkke;m*6(5m!4CUmQ$st+_3AQJ_bHU)@Gtg z&}MURvr%v}PL8dk_eu?ZKoB^~PjEYs;M{BN$q7;)y9R$a_jr_~5;{GnH$6x8bv&Ol zcuUzg@qB=n|JW~$FF6CPzpu=(nOswXk5?6VSI%E@ZqajWwV8lZn3BXNAtk&XwXqMr z;5SjmyVd5eJ_g?GmKL}+5L_#)g!c|y8~`Vv4%`fIi7)kAQo<|!;x;SHVRF%uz~>s@ zGNR_0|%_9cg>M|F%6!Lbz)3oe7dMxH0&GVoYQugNl=#7A|k z{au1vc?TQ)!ZMo)g3W(jSqV>6LJ3={B%$vRPcoI76GY6hWuC1h;WfubFXaHllgR9| znYc$QLB*Bu%2dX5)W@v#R2z1mDCMW;Y+NcTY8K|oLWj;al57QerNe*DynN&5B_m0@ zO>Z}wIY95MR2{XJL_JQ#%NzG%Aj3t)GylrDn4KJ+J)+8IowpG?tWg)N^CUnl4;9=X z`75&$4VRUW8KY)=Fe58bz(NmvdtvmQo!s6|tFuCz1)i$fqsc8!hEyRg+>b%M)IX)9 zi3^(`l3c^{uO6DE;M$e&5|~P*QTraV{zCsWhJ>_t?aA#YvxDy>GLs3U%gH6UDJ1R9 zG+p2DWtufuo;lg7?DQ=Z{Mu6emNB$;OKrUIX>)yU;;)O@dcTKbi;Hj;z4 z`irfX+=9~3A>K6`y|wbG^`9>T@`MG_QsW}|?o3ss4F%tRmyD^1GOjU(tbTeorG0vK zr#F;DE&Ak6@5J1x4n@Uzn|WdRfT=?w-F6(0(nEv${>>pKA*XuM{{C8h6W_k+TNKem zYV>@}J4uO+?oreXv1du5qX%d-x)l}kI8s5X-4A1y5qis>+i|0%J zWLcX<nmsRIMN%Ak3HrDde5MA4XtZ!SGl35y?8wo9Ge+Ix3r#RQ&h-1YgD?;pU=#s zI8I-O{G1vyISRRJa2E2@1jARJdG+RSmS1X%4E>EyYOY~!mM$DqDb+EYjV|rgk1Hd6+}hyrS8-?TD4jnc}Kb?E6Z;qvgP(RO0GrpAOZmD)LQX-4ivo*K6J@ zldf4cyFI}ZitV_r0SZj7M>S%%P^p>N7&yhF>)iI-CJM%s^YTiL{WO>sJTuwrIeaO@ z%g7)>C4uv#BI!E4*<`V>xaIoWXAH~HW~*6oN~`YXmA}2_#p(4r-a8fXNvY<_rmrcs zP{CfEDphw=VMYzx@j`Fr^pQfFd{XFsySqeHnx0NR^w<&g*tvQYma%G^Oh>8hl$@PW zGy$Kg;=yP(nFCV~^_E*rb!E0hvO4yshY0T{a7tb3J^FnP@Zq785QDY<^ZtvSacD$& zRx5XXV{Ij&Lq-r$@lECZ&`4C>D)yfjPA|xzayA;2H$8hK5{N+gNE{p`EYsVQIrd?XHlok@xYr?^Q6p`Sum|iVcRZEaI54$`8YAt9En#23v~b%B<(wm;N`bL4 z-Fw+PvsN@Nnd@s5<8zrj6XD0=Seq+Rq(9*u(XosHYe7z$VYjA1zXjkH$-3A}na1WM zj|ddpxJ68_B9PzCRW=>IcH(tg<7>jj+09c^89}`ld2PpE=&r5`RAm~G`e!W1W-Bv{ zAzR6>%ioKX0;9v7@DRbH**eOlkys8%YzNL; zx$Xo~`R$oJrLp6uv}sTb&8cABt?Lm~zi)lYCltz>;o55~e^X~ze8Y8)n#C@l;|5~p zeXy@te`$Pte@4G~g++k{*W5FO(qhgzitPS0qtU)WHjih}8;e?Oz+on$l!?AYH3m*U z@7WbwDf;bXxwGXORlHb!59d|uJF$QQx|V6Gr})glcmI0^n$)HyL|))YE)4ARv3=;u zaCFqTG_tRK#c<-_umFyg-f86rk5+LtX6Y5j0|OgKQ%Fx~S&2zq;&&C{st0!a;lZ&q z{K7y}Lx8*cj8Jl{>bOs+FJf+cyGGJ+KRQ(ifb~rdxC~w!?&%0LkcYVkJvWTo|2kLQ z(-5gVPPxNiI5euS@pZU~cE_mWkXj)6<~oFi^YI6|hy@MSo>BSP2&#Y)O-Xf9M(Go- z*B|$UDt|D=UeWmzXq`CcO+_mO$e7Ol5T*bO4f-Eh+RSF+OKVN2KkmFc{F5f%`J(~H zQ;p1qA*A5IJ@ifg7(t}c08|JJ&g>gn}={a03 zruF$OEnHJXY6QohqjLf8{%oK}^&+)dM9gcII1SmmlK0@sc6F$hRPXuFyH}DQaGd9X zhF#L`ip1$4rjt9^Y!`Gv9h}tKIA8j+M;^J(_n2&!Mk;rK3)RQHbgA;LvIvcw(eyVO z)yFaxwXOxdGf4&0<@CAJ;{CX_8@o?Ny*B4H>>Q?I9YrY0{ePT$W?h~RKa~=#6K`EX zYXq32Hq2@y$2j_mmXMCBp!BOV8;d@3hk8xDGwNnMT`@@CX0o#_I(XrAWM~xLBJofs zuZ*Orl8xN#25>7S8ng4~Kmc_))Vc?a$JG`Bv?nLeT8{SztttnTte*aOlF+Aq(}JV# zpWDg*QYF23kAweEg$ajc-irB2*XO(P^70146I%zi{EZzLK~ty55Y*O8Y? zAzX#I{y6=t@;%W6vensp0|Pf1k)D@6YZ4XUfA)~MD=g&2BXRK%PshtmFAnBoYQ!6T zCtbiJMn*F;>Pl^B%_vkDdKA>(0I1GdIk(l)egMO57=K+RZU3yUN13RZnH6ODTuZDctCPf zzmxT0yl2i*rAM?bhoHbKvL}a9%y~hsHk1Igi;846!Xd#$#-D^_(_ig7sX_po&oHL2 z8@e85mgO|#z6*AcZ4Pl)A|rzrKr_sA=y4=*Xjk?Xsg*8Q)?Te5tMHORgs^jC6q#7gF7M6AF649(eryR z|Gk0x|95sSd#ms^^4V^bXRe!_%xURo_?9J>C%c7xeW+q6?^$SVuL#80+Oj9GK20zB1^AO7qXRv~ zo3cadZY}dlra65SOR*|ri`iWM zL}f}47*ugkNoDF0&fk2$-}FvM-mP!NTsKLAJBTzcs;JY-8H=uTXEuVHTgq+gKI~O= zI^EhWrSLor*{D+}-w+p)u?4K6R}Rw1JY?oW_uhWAE$W!9@;ArRl}uSl&VM#5NS8qp zl8^be(q}W(w$jI$SI(Kb(kF2kzV~=Hoa-Q1Wg%vvwzsXem-wv_&RfY<>HVXKSX%QU z#<%X_u_2vQW;0E=A{U)KrsWp?1oLec(h>S*H+QBkE8RboPf<@bbSVPU=T(ZgETUzl zDh&r1Dmv|XrRYeC7z(Y6#H50G7z#u1{4Er4q~53F?UpyeyOLbL^G{d!P)zWi+Pc#v zU3O|h&v|mrDMRPbtOmTHXx48wN`gfzqYgiG=@YBm3B>_GRpue&HdQO`s>`F{e;|C1b#FcX z!IJkNOHG$5{U4Fyw{%&bEGDSR4TS~^aUIg%jK1$?f4=(GiUmgU9Jn8E(8Yvb_f((v zge35##Zp#Bg!&sX0i@;2klgSTMN;N~v6eKh?;dUuxfJr$PgcH2Zv5Ah>2SN!pV$2aV9MV~mhIDMSR1D@TbI8aYkApb!^ zcR{rwZACj-=^1y-MHA%No9!lKDp?R={}Spd^zXymfEPww%}y#E?C2TsYJ0N7R$7bHovG5f_jC?bAv_i;Cb;=AxOuex=KJ*fI| zXKg&}9>YVOJx@3NNwd<3fWr-rw+9BLYUW`GyXWfuR|w=Kg}MJnUa@c?zMAR z;_fP997H4P!xEn`Slp=VQthJg`0V~YEzG)b=*j+bj6VJMjQ9F@`2kv2=^S!U84_(; zfKvMaOHewVb~t+e=;-2$z>{I$SLp+#cg@JQ{Piec%^U(_W z3W!)GD<8_w7zmmGI1+DWRep zaLSt!E!SBH2j=(TCei%C|AcQ?!XpFI)fF>vq9JayQ{R1E+^((C_uDa}37%0Njez1t zNr+JO_N(cVNx1sMoZSKu>E3&9A`^SXA8TChP=ZF5euX$xXt#A1UqrQdf zi5wJW#co;n9E`_axX1*yzL+M2Zb|I#3mmItJx%E;mbwXgS9>np-MBAqD4T!#k~J}AWMxYCf`jh;+0l zCQ<&#nB+O-98VW3gLvgdM~x0c^(>m0d6(q#6s@EPg`p$asQvR2bv*s_;Ww;KFkWSa zUjCM<>v?veG@8{;>>zd+jqfa9LIX5&{h}Gd%uxwD>zp!F1d~LEUmOLgL4k}FtoA(3ZTbV6nBlBVceVi#&DzS-y`G4AMpfUpOSu`ER=7a(<`33 zI47Firg?3yjmK=bnr|WZ+@JRLXdfyn;p2z+#(6=R!8bLu&PQU;VvR;EIf@bt+Y4(0 zgHpc3DzEC8GxOYwNk6(ZoQr-wIf}2=kZds-hx~YUn)q{yq2Z3GRkI6Fnoa8SkVe|d zX5$5$4}LL|c=&gnHO2k7rq{1+6wziT-e`{Te+&1fW6Rb7gCpyqPu=amNS&qbQ;RyN z!QbiiNqEGVAr$EfFatb}7-c_}p;_4egtJB_%@b`{SVnnv)7ECVY1dpmr$;v1Fv}N# zfW3B`@^0l-9N&g}GlAv+O^xT=hHbpoxhsa}8a|ok=kuOQEnr~p;Cmr;)5&$tS<=0{ z)(x&;g@S^nJ;tTOqUyAyvEEHBGBON$tg?2;mgHyNExhyl)u(j(9j~i(o~4z(+#0aE znadW}PUy~#`{5>8w0!Q-XkGeS;VXtRtxNCOBdzE(g;9a%LZNvLfR2g`O`ni?WTv4|{?KjHAv)L>` zo_^@R$OF#|UnJ(@49M{1l=AVs8m)s%7`CSN2rqb=btXhoxu;2D4mv}DW*cIkR@rS4 zVs|YSIOnF>J!c%QCH!GGF5vyon$z}5k&&+s<3GC-j!^23?IvFnUQ+rRsmm}9c)IU( zbmWoh6HA=`Bhg@~Wk_?{d?I~{h&|eCilSDOf2n3SE4ukM2sq2K&uKaiUcIQg>)qR3 z`u|Y(=kZYQ@BcVHWQ*)uW#5-DvhSp^B_u`Stf>}FboNVa;CEh;1lsgWdYM3zd* zk|nb5gzVqP%#+S(Ip=fE`}F$VZofa~+-{C(X6|!6uIq7K_v?OLID}3cpO-!9K-2w1 z5fkUx)W{Mtl)(J1RK)*gk@G^$iqGoh+0^wkorRTgvRJg?*hXk$HEv41p8`oWw zpGc5;wR|=&+xy}f-O620Fo~07oq}hAt~HV6$*I(d8kAlcT8$yvy7QW-kFl6m*bQzuJ)VG7L2o}6z zu1!VGn1rZPj?G;feP0;|yN+DcbKT{E_~)=EMor?9#mnmV$J%$V5Yl)@Fk=)}sYiR=%%?_boXmss6d zg*f9|#SgVPCOaj2nC~idbTxHt@w=jwspOu1XOb!6L{mb^u@5`SZNg?LGt(=MD+IfK zt#h#Q>6e+PZ8Iy6yyNjGW9&&qxD{h2)7?m}t%-)Q;`=&RU+O%$d0$C6lO%oEj4B3u zidKRPlg5y)y!{T#Z^Cv^oUtUgzJ-R<_%2WABGtc5d z^YXB>kmZ2|x1<@ReZ{pq>YSpY4fOp^c3*zme6UYRUQqb8STxJzjwg@T#62y7aE*Id z5A;2~I7sV56*Yg}K-nZHg@H5Uq4>E0j-bH4v}#+7zcKX%qy3+`QqJs4Pw@=JxxF1q zQuK>{Q(_Yn@gQHrj(=LXWsy;YDKqN&%Eud2YMfVgGudif)nm1|e^u}SPR=c?P0E&c zUDcC@unhcz%A0^%jFXY7wXV99*A)j*4s`-QD{j)`fUTYew;1l<|p7UGY->oPdL-0dSG%*McPLFs>gMEomK_yW#q?aYb{m$i-aqbF`s5?sPA${S z7|-pO##n;19QtfLM_dQGD>A&+ql`ipZ`3(XRXV?jjxfk!Nnfve*;?m#OJ&@}S!#ll z+p(8Dge6il<opRQl!tGgUbiJ;eo?%rgE?0ZK1sR~^$GV0M zX*v6xn^rG0XuqXa!&|9~l)J9<(aA;infbz>^K#8d#gnEV`!c-`cAGig8v*0b91G5#G(`cE%z3PojH?PHe|(oA1hDs?A1OWsb0z} zYM2vt<@fTuGj)`Z(()Ityu33@Tf=gqqPyQ>+VR~JF;&^_NaLdUGDY){#YP{B;?Jg! zYRN$Q~&UykWJvm_*Nwa3Vli(H$X4bvnm^>tGvFZ?|bbja1lUFYNUZ3oQ z->HNIovN-@@3#iiBG3GYq*-puhtD-qT+qwoVr0f)aM8GwZ4rk?8dBaTmohWDZ6#lD zx*96b75%yjQ+MNKyy3N*vwd0@Z*i#Zi1L*7^nJ5KVyE)}m$s)p%^SWH67 z(8cOE@hfq;_HV9#?g}$z6jXmCraa6Uob&lfP)yoQyEOhi<;vYjpOrGh%e7Kk(c26Q zDY-r{rhU00^jxUyn8%}g`(j+Vguf;-GoKqYr0fg15*;&rAnPor2GPa-IF4&J;9}?s`|nZIG`+C?HJC;4a6Fe!H5b==*n?xo+a-BNWc% zuGXlAG^txZ*;<9v2 z!goBNyy+ZoCzZ+nX$V76f*4-5+m%?qw=~XMwL-MNORT{8)0N|5`f&&KON#uEKFJy^ zJmFt*EOz^(h?`gziBIFWAyV`5cqg(M@x4k^h1QWi(ftp&W<}y|B*h!-IR4(P zr;Cj(xa|8MPluh}ZyYrqULtt%UFV)O^&a0d`aZN!YT!%HA-#1<%;0L`7dAU}s?%R? z*;w6Kk;q)(>|88+Fz3@b$7bgv-tcv~7usDrQTvGLrhV0UUo@SyHLvD9`0)iw zERjxR_@b^chWzsIF;Xq%lF!a*^yaa=f#w5z2c=kUXFI5f@V>kAVscX0AmR24^RmQ9 z3&p^2{u4R5cAQ(&kM4HGNNi0%bmSiPEW_dr@>0$08@|q_V%%3Gf`uEm`iMUgisvzY ztGOiX^X}96SzNIFYu8Da+oKhq=NAh{r`$ih@A9}jIhhswaCYg5Wy;-!G4c0d-3I*) zQ)Gc>%7c6#S#%Yw=e3NFH^pJlTv&eiVDe!9K($)#uXvQn&E zF_%@|X`g59PE}Z{oxJ=tF)C7RySf&C)uiuZWTep{{$tZ=@4BVV@kW+*ghna(`rHq{ zPRn*E($T|7;_@{qA^rX`V{;Z0r+t0lJ`aU@m0ZDA2FJV6de|dm{*Uh3njMZnlo(1_7sisNavBBDdI&?GEyAY+5 zaN|`G+9Qk>Au~Z~?$NS@47t!*OuH4iCAklRCaj}}gQwkbN?BQHN&K^zAX;ZM&*oF# zAkp@?EN=86A||Py|G{qDHeU2qQpm)HlK!$hnsf7CeG)<|(n;c9|0ojeY3ku(@9E$O z&GDdlAbnvp7n#0^k={OYXwP1>IFv4o_J$l14d|eJA@F-T6qMVo#_w?eY%vjZRRX+M=5F)>Qs@#A%>`*lpy@VWfdEY5$2SVw4c=&t zPM!>W2PBZ51)7=cpw2-ZJv}@^C1_k8Z4c3ipy?saLp%)dJHo%m0ffhhA#Zu`j(p1K zqvVjC!sa_}yaFDZfQ-}+Z^Dx}MWFKiXfNo10>FEE{wo2mAn6~^!9^RO2Z*C5S(WyibuLS_? za|BIE3h`Nfd;4!Mr$YDBX)->td74lMOm$GE&|W)qDkN$EzS$64@Ct;3yYVYAdvqK` zWCz}&%^rQ72r?<+A@~Oa{QF&d4j$NVYT)AGyw?zVqKOuvm;LEXmDz*0i%oQrKg$tbj~5AlG5G%hzaadP@jnw@ zP)!YL@7vDbYBaT$9+NN806LHY=aAV%Y_4ftt>iI+`I8uoZJk z=>5IU?303zy>n9DRa7jZFI1CI%gmM%vSELbM~x zXKr_BI50e22wz$3x2?JyV3<>Rx|yP2WXtk7I{VV*S7V9BgIaUa=HgaW-p|y|J62Z= z@+BDfo6vT?o_nN~s_olF^pzeM%L^u4gG6&pcQQ(jE9hhU7&(gulkD&VlXF z>n%ZM6mlC^CFF^*(S%-|0;sw%HrCMV9&kJ)-eRdR_Y=pR821Fxp+*`?-?P~mG<#-m+GVRTh~R&P-(inkK;!2P7<+3QN2g-)3VrmmdfNAhYh z@Lo{sKH4_X5!xIu^T0QknofyZ8=H6!k+=VzRs48sNK&AB9`Ok_kCD4g5dsqQY!`OL zs`tb*=kn}#dR1=e&v?;I@KyD~it%C-gFWf>Bo^~bF8?-;ZtY2+>yg1SK@6vCJn`q@ z%qbgbyiK>^TF=wMY^WfWlZAXZ-|IGSM4@bb$f$ zquoaFc3Y1)yZ&nLDT%o>(_m6QBHiaoC2#o7T^)qlg#@ZgUJe%B%y@EupUwR41wn0| zD5XwQ<#~JcZ9Dz0ybC0^5kgE7Mf#E>yew|GN=^y~bB$EyA$o3qJi(eCd-w=Siv4B$ zIuYyTyNcI*@&dRmrJ`6QoLySTm9UJy$5sU&97;ZLDSW?%+NG* zu=^h-Q)~n#yY$)y3FS8elYxWCiD7zvhTFc2{ZSP8p8JX9bE{9xJ;+`kS8-FG{`s8z$Z}0w;e$^ zfj3T&U=N^i)R#F}jl8=KnIbCQr;fJ`Jln|{pN^v0uijHfS?N&E&Rv+Ho>I>x!SZ71 z*;iSl=z2=N#8&z`O5a7l%!X-F`Aq0Z#S#gI<1 z_#XVpe#_MW5h45>sI^TdlEe+y+I~3>J++Y82s)~=cJ`#u8@eEQ=!23S5{f?_V+~1a zW9cCc;$R9)Rrz)Iw@g2VoMAa+b`rthnp|XVp-pY2hrAN7s1WWbaO~r<$j=JKSHF@L?kd1u>AN>`MQbOs%WP?hu|*zb^ZVv@WZn7$i;+pmS=x!g zuD!c+1x(Kl{JMgf_iIq8YXhE;<+S%b;)*MijkO|IC66&OIOoceh?5HEcw>pA{6L>g- z$1(750gvP0;R+sZ;Ngx7-|CTY0@}LfV1x4y^9ZJe?oc@LUXHuK0*S_YNI)}!53Hd5 z1t5qTVr}R#tf!O8?>Y!ckhmO@c(+c@*l{{rYTE+Mtb(t!js8a=lguYK5jU4KDx)HK zPX;BsOO2@9swBJhLR#VYORB@4dXi?Y7##ZJR`>{fl3N?mn?{V_xpkj;fYXu7ahMhO zWKzn!L-QIdOFTOj>G{l$rzzDk%_Y$)4O~J|PGTUsJpF10qDy>!;iv8KkK;#kA3D$& z1#zMDAnyvVAEV3Q1rNgM+y*Jed87iHw8VJ~)kD!2JvMC86XK_dpzr1%|+wFEL$johSIQtZ-#GnR057>_se z%DgjYmLK>Z?pz~PyRHSDQf6S>A}a^}FhF>KJHt;-BL`t;Ymm@OA>ULY`3MJLU+_4A za}f4BiiUOy`BFjS#Z*i<@NM8IpcEnB-O$T$zhvUwiV=3_{J`TR&hDIl?=(~u;%AS` z4G19L3MGg8@j|ap1)v~$x55An_UKzdce0YrD@6;wQr@|9OKt66PgVc?>KRsij@`hI zNNB71bMkpvo*ai7(0<@+)QNBEahj)R|1f4!I&`LeXS`cwYQE?4{ZX-YmE>lYDp~{z z!9FK|pvZsgc0k(9$fYrw5}(xg-d`-L)^cEFB+udUvK1UIcVWFHda;l(mn2WMpoP|Y zU8@rFg4CZw>07F%S6^FFW z1^7U(fj$QFS2;8x7sDU7wEdx^x%B3jR7@B*b7-CHCB*_3WKWsxc{{#D*O%nnsS`Pz z~KluiU8i+|e3MG-c+|9&Jz~F2SoDHKw?NrFv!3 zXwIi_M5QUE9{hGIROCe0i#iVlO1x|pwoM4f_2pGh0M1UT&|9pTr zWE~k`gU`aaf668aRltu3TFB?Ad8&`)LTy6V8ly)Bi!3X!edj`%ZfV5s5Q+O$72pq7 z0kdEUUD+6+3NZMw3fMsv5k1JQm>4)EP2pqC1jR>00^FMj z5~E-QTh0f763WGs8afgakW922Hy0DILmRps9Y6(DjAKl39?bz=Byi}BWAvtp2x$$# zg|r6xFhDfT;5i{I!D5iWXdseE2Kt1tvHF`7rJj(Jo=7D(7WuTk_vw0g7j^3r=b`3| zCwjyT)2BjWBSqRqo86-62Q3_|+{~JKgcFV21mdaMB5YnYl-jG$KeKsrxt3iX5k?$I zk2T*#q;cR<;hyyPrR4X4rbJcxox_Ir$1t|^wcgnp(}{;gjfrHdUHb*j%ZR)kaoKY% z`v7y!z1$m_m)7m?zI$vt;5oM3esp&PtN$4k#M3&!2u19@og zcpwr&j|N&pX&F6|Rt-~HpfkQM$yAPK*O4cy6OA>|s8?^z%*4GIv%YMs{RTd>(PM#xD6%{js0Z0h28u)8{4ERG0=yU;8l!$XZ)3zb(dKLNGac5 z1}SA;P5gqrNm%6p+Xm_I1Z8>vjam0Dv>4WDtVK%Cl5c0WOxdxbAh_tW)RfnR5a>4C)4I%);aniVKV2aerTomUMUAOww!YOUGd`4tl(_;7Kj1OU; ziZ%0QcRf2mzC1gtmeR*|nP<~PFQ#BXveN)i$}9j>FdgXe`>5cg++8!Ml1V>vV* zGdx^%QG)_elSX{CF@OBrOsp@*^)Y8ttjFD4)s7Qi!D(X+ccroJ3HKA-h0FVhOmnPO zyt6BF2ARZcKO8vDdTHH_xu#hASXhy|`edSFCDG+un^->0z*vlD0hW7n0L#l+U>p!4 zHy9JwwV%qDO~&NxBosk(ctkN}iPDf%w?+Q5y#`Y;%$Qir`I?JoJTc}+y6LrQUD$r+ z$5;uXeeXwNgaIMi*QvcMLFR+ACO`fnr;mjde3hn&&8Q-jTG({&>K&U)`idmVvmA%y)Gzu6~$Wz;5%V zl39ddTwe^_2T`nmxW%>_2$ZaqMqAbrL38>`bSVS*=fmPRhKT=3DhPl z98tZPQqRX4ZMT}We#IH&4R>Et(AN=zGDfE;H(XFMb$|w+WLsH!3MnVpzU$|u{gb%qTF++9-dXLR^7F_Hs z#)n+mfl{Is#B&NSQ4xfuvHKzP$s;4ee&A1IpGZ{!Jk%<1l85~4l;dnFcSStrSX!1Z zNjH^!_WNYA7=GR^PZhaZFq3(^SAq07A>>M=K4Uwjs|{tX1TjI_^*{o1IK2)GVn!T< zymTz+k03?+SCm>P&!^>nkE-`U`*R*);S%9IzIwlMR1ROg)26mbEA0Cmew*Y(ebT|w zMW=SSM3_Bh$c9iS1_a9yO9VGli~AWzofkSO3#QD7J9AFKg!+fSM)OoJZCS}_?Y-^?bZrXGrdiZ5JXgwlwD2qB7wI7k=rA_J;r`@eg*Z542@}Y#gU(Pijm5LB@8Aa`aef%wH5FyXfBn#4m zu2TS8JRtjhC`^eXgm<_8uTWTUqNrgMqvSA(!xR9;BT9hcEk)4ph*Y;Y*-2f{Zsn;# zL+1)7#oJ}BfDG{>pajGo@FC6?w3{XSr>Va9u|{JDu{NAJq|qFdXk0(lXdu>Z-Wv*c zP|zoPRYr)I5d)!^JAH2Rc8=f z;<8SKzx>E^j6C*`X7aIYV{P)~;-8HHm!H-4Zv5qUutiq$?97ED>YW0<0mNuE6bWnw z&TX(6Vz&V^Owt62LnPE7KvjJX;`xO)Y_=`_R4V_~g`r>Ut-JkyX9gKTV1{R+jF1cs zY=#^fUwAee0QR+ZNz?;NqdY0iY;58v2sXn3I@kxG=yd+86)|C1!x)03$d|gkl!dOH`N<=)Q{-9qq>5-P>x& z`EG&yp#>5YwEaywVGr0^6*&_vj`o0dpIVV8UwmYGhEwVVrA#!dy~!v^jd-x0nMFGH z`Md`CyGkc(fOog4Txs4p#Ye|ib@MucLd&oDK%4i?YwuPIC|^qk%Q>emJT60xC3y9G z1=Z5tM?zY2Vf|v#5`m$!H&-;ZcE8W)Ud`UPy65rL61cjluFGgc#dX&iAuJPovSyfq z;HDpBz#5badIH0&L1%A6nJhtotA29b6xZ+~sD~JO!wM>R@dMax(A3KyUSfF#$ao9wP0~z| z12Y?e9Qe(*9C#6*1B2^*GnVmBZRWskFM>exgzuN!1lU%=51_5p0edpm!l!a4U~dxy zUGVI!l;=Lr-aT>SpZA1fiu@Q+f;=l2-LH>7a(uPC_(qnM;<84)Fy+0N9m1R z(=Ao5kA@r7CZV!O1{po3HKIdig4Yvv`(6)9k)`Jx!6`ljJ)-8DiJXl}z9-aJ!#CRMJE-^oqxNS)Z5nT)c#6JF6S26WVqp;0 z^)QI0df;5Un}9L28{ky(SCpXbMuYhuMCx5k>|{;*|8;7gGEXH@(BoVE^iwZ)V539E zgJkAcw0$2c@>iVm%e5m9$R&^7iEuFVqAcP0L+k@d|Eo34_S`eP$YM{K)j#sHUY_6{I#sF18|0Ho0Md{+hS&z_%`h9y#- zF=DJy2VoS6uVEBh-T)L1&EPNvz6lD&{7h`!9@W6-z%vmmJ|6Y&-$y7`BUc$~pi_Nb*|KwOr*mju_nVWrNRfdSJEp&t15IrUP zKG*=VUk$X=0T0?G0Ag2mlmz_w3*N$?pS>A;{?Ha+g~aCHl6Xa{IdpLUQeg69&e8>PmLCKr|8Htp zFbueJ@w=eY_)djv3;6JtKY$Nk(DFw_dMoHc`K_O{XQ1}X(wfbv+yS)a*Y&u}kOw=8 z?oF^Zr~OHy&~Gc(mN%QdL|N#B>`^GbXeU4h319N6yy67sjw)B4?Sym38z6VgZZ9kv zD+@S3TbWPX^T4V7TEjzYbJR%&MafW~U7~_tee9~e=2X%hGK$QZMydKbD)Lrz^2_=0 zIedS!yWFx+s0Ydj4}lr#ejntH$6@#Z;JDKUaJ=~NTa54uCBZAl|F4}HXe|Cwoi3Sy zs)P}IZG{myw*dsT9YK;%SKH=Y{~L&F#aqo|z6bu7#5FEYhZ2Uu&;dg^)d8-D!OkEt zXrUv>7SCg`LvdZdC=36Uen-dQ%xAGEL;sf8)mGXw+UbIRT|}*0tAfEDPJ}pOHoUW5 zxvndsoWNMicWUM0S;TGRKA$mF;r(undF-MY+?V%fhZA&Hq4>a*6B#w83g6-HhN+R% zKzBtrQ^-yjMn)%qLDT~R6LS}QLHsU4lS+|`4f^~T@(Z%+&@dIw5KHe>F)iQ4Fk?3?J$Ddq2>P5ifd!n#Fn!uu{fV* zD>o$%Z~EHe16RLpfv-D!TeXq@%I0+^x(=?pbM~mN%@!C(BPt!5K8|66>^{Mf_U$JC zL;5p-q1XExlluI^>20U}OP$O4eVtoR%)tAtG?9tfsILP1U|Wp#0TBBK00_I!o0m3$ z9c^|H#E=ea(%n>cJlU%mcM`AhRIuN*$&UI1cGUhv1Lyn zBqRd>iQ^FPkDvj-VG*hmYE9710bTA68H+eo3f>^!VSG0Ss1euHTaS+JLGMe}lm6WA zWRvU9)zC|lON`gJvEdtTlDFLO4L9=C5k_|0n1F?Z*%s2`#p5iiIo)o!%WjqmED6H2) zK0^_w()$!sMu_ovWS0f$qFRR?PXcPr*l)MTK8{aiw#YZyEJF14PXG&l4$s0T02bbz zNS&Am!R||mRl0SbtxmboFRmohl&HKRW8SU#6Dt&Xl&Mg9oUNir)T5u}(sKCSdWAv1 zev`HE5<4-~I~(=Zdx{3y`N6?ZsT%pDSK5s*pqIliAcYYCD18h7x-+tQ)Vi6mG#J4K z4HXKhfrdAD2||WS9$ta~WDI8)G@mZ}NE2@Nj2@X&rlB_7TG>fso431?n-kLOW3iE) z>8I0?RUIL+!+xpx6wO>yG$ zQ+=!(WGU~hL4UznSb`8*AB|VQj`C|KaMkyJz~AoTb%4VrIDY>q48(K{0J%Q_fYgs| z0KrQOchj9+R?)KR>2;G>_T^?d&E6h(osnu!W1VIwM)Hj^o$>u-i<7OM9yFDWtGz5j zBql``Zi*+PbX%-BJ<`*|g`Mu$NC)oeiM@9IVq6vRjnA_!;^)GKaEFc5E>0AY^io_W zNun?(D%EmtIRO3uoL+9Q>6W1*(zmWP0d=$_FHQDGpC#f$W^Au6Mm=kpT^1rBI=Nka z-lAWjUa4jA(5fM&vO85H(E!MEw)rpS8cB`Q5Yfj6 zjJMqzypd_TcGr|W7u&jGg9+<$^bOdOC{{kk=h-bN%HWRm3`d1GZ?lR<4uI&{SIy-uqC<0{k`zjx19 zgTkU7{g>PLdPf#H>Q=~1jPs55bIoSYaOICEMa6$+J+XK)6@-C_FfDZ$iS!JNOTT?_m@!^Dv6Gd0-5sMPQ5r z3qhFwMgox;M+|Ab`@RvnLP5ue@b(}g2=`}WOD=xTFl_XAfN&qwRp)boWan>85VvW9 z(_i5aKl2rQc=R&(@Ggt+N%|fA+#R)A2dN#tKS?sgXAxBi%EZ_ve3Pf9E#fETk!l3s zvI6V=qCDJ6^lkn?eD`MbOu);? zifkL5h0+x`Q4w4P03z3c9nx1}SNM%`JO=TitTRg?e$iQ6OXKeoo31H~ol+pK#~vFd zxhj7A*10;v^Mf+uw{~g_2HjO!ssO^EgsXa%pO9XT_XLX__Osu#>Pq4DlwiIAwD`N5 z^4C+GvP_)ba@8+>FgUp^By|Gy1onv6Yp^vm)`4GV69r2^xOH%-ib{c$fuJ$}iGLdg zz1)L@@d&EW?M3~ntj$&%0xnj1lag1j#_r+;Tt@+M;`J`x$ZhK*`|GGT0}owtZFg3` z$!@p{bOI~efO{015o524hMrO4o7>%jCr%Ex4I|~aFd&`x&c0ge=_O`M`i}ihi@U{j zE>@r8#)OV3 zR^pnoUuobnmHu;yt>m$pAGiA5%+1TVlkCD=U>Sk{zWhM z##IR!HImfAKZKrTLe}ZCzcy~5}#V6m`M7-RAAd3fVB3|yGJMfK7ti!X3XDRwO zJJPo2Q0y=Q6>=Cs0XaZGLkSGQM-jXsKKYAl4^Jxo)5iMwSFyD@xBigOcp!d#bA0O} z650owT|{Oh&_#Unt&6yb?;?WsfxOS^38?0#7O!K{pjZpiTqq zV7e{%FD~xyTLbjwf7t>xX6HM2?Z0qwoPVd8k=KRm+HmS%f;MA;I#>^~qytXiK?D2p z@3^+NWX%>3|L?ACuHnrRBa0Tc06iVBfG-1p5kVKcQJw=&poBEO1d?Jzepdecs>GVh!0qhy?=01mdeA`QzvDA@=%&5D+LP z0)b-1Izgbw1_X*Jez$OWU3d7>0;>h?P-WI32_beENU`t&#XY)sIjnyhdsk|mHe`Gq z$O9hG!&ceF0IU+n1mI*dz>fV>WBq0azESX<%p{S7zZWl-$#KYyXmjFgy!&#r$WrCZ zwR0hM9sFKt=C21foO(p^3TPBuMC>M}a}~l*JecJvALME-!PAK%^5eBYyd=ge5<~m~ z@6&e(S{X$ypq0rMz06vT3p8E3$m9)%0tkHqP$3a}VNvq1M|@y}?V-a2?2*R;Jfe~b z9IM|ee$ASe&^>tzFpAXpkwCBl$+w+2j6@TmFu;WHGjo?u@=qJ(c2vIwlvt|cZ8^{I zN-W_czF&!v1)_%^X!VDE5|eHWJi3^K$tu{c-{kr@Z^ikRLaeOj?3vZYz|8t->Ud)9 zmoT6yW*CqS3jp+dI{@^7W%Kg>4UDzL^YAg*p#LRfo$06D14G%i9flIJJy;sTtL7n~ znzxBiWDCYAvV}O%Kq5PXsUQz)WiqIW!jS{_N+bjtf^O~%mcYd^gvPi)X(Ay=NIxVr znOIgaqCX@Q*B=r#VNE0pJqhu%!O3)n-6MfGLPB{Vx=}EX%+nht0r9kBHj6X;Y80IxK=hUb+SXxJZD zNso$}c^W^mR-BE|w_;VhWSu8`u6_3HrY_x$pcF1qtRTvv(H_HpTg-&Poj(R!yFP_! zLMorbkdRSt*bftr|5={yPB)3-yV^wYFoHX#Kt1+t!!XeG`+qZ3nnMHa&`PGxRi<)4BuW z3hxUeG?Bjag>8&j92^KsCX&UC4umZPL&epU8>60@_L%475Z^!;Vf=~(QUfbyAWid$ zqfnJFmg8?_GGIpePc7uX(&`$Y<~tVI@_mW=8@0M31*j4j^4{UG9faxpKkT`D93zhR z0cyy|9Rq=;8g9rP^AZDPx?#3K^&x(yIQj{UGdUz>`&As0Tm(9Y;yLgy2zv?$GnBuD z?m6=`YF|v(z%7@Wu(60I2@Q#g1z^&3H?i0aMljm^f%*~$D_3*HoqR<4Xv5O6*$Hr- z)A{k|`4V$TZL%Wo5!J`iDcwgz_svBN+gqXW5}QK`{OZZC?sT}#8%e$dZ8rjMRWuGz zjbEOEcNF~bEx6BNG$C$fEGhWgL>N)1YYyXq-y85>TP4gw^?7dJ*X+L*W_tGLJZe4h zv6nZ&K1*Yo{D}FJ!59MjllE-_4O})qOrW6#QN1uMx&;iOu);22bfHg+7$mf?fcbl6 z=D)}yI}Y4Gg?j$|@m!(MAi+})u)egW&EyDPU-}J3N#e^>!y7Q3y_n@pt5w+;qzg1% z1TZepWr4qNO<;ed*Ed=vLW>weB9^iUKrAf-5OhnJA0o_mGu8j6fu+6LtO^H;`klVb zRL26z?~gOpqxhNX8xtpl4&!B}gqiBv+q?3xJHbpfgVq%$m$}lb#>QZ#y1n^rQ{8&8 z#Yng0to(fFcwzE0D%ZoPPS`A(%dlBWmI0#eYanU}uV4rxJv0y}5=)Ii9&Nr3#scXd z;nz}p({p{(Vtat`7ocD!jK9>Vk@C_jt2PL-`KjegROf7DWP+2LGxbjfQeBphKJI`8 zU6er3MO;;U9Wexx@(0OpE?Y2PwVf|$lH&q%fvsAf3SU<~p>oX=!RKUPW<=nQC*dZj zZl8T%N8$jh> zSB6*lkJY~m&)Xcf;^_63on=g;#OM2p3{kD4%?0O;2NOq*rQK6{;_Za2&0$Y-nsa;A zP`}Vw+2JPE_BQny@suiFo0fy1F!fWsR^Df+AeWaD>A^KO_uo4Z75s?{Bov1Ht@Zu!ESGIEh^buHj%{RHXTW^Dr)N$5I^WPBZ1 z<^VAkdC39$cSjAD$^X0YefOCzJr)OKGdmRaG8}5ACLV|=gQ)OzTVJWhri7BA2xD*EWAGGbo24EdiAo*VA>aHU50d8 z8_m*WA}k>SP!MAQYe#}bLKtG~Mj;F$G!^DORH$cyAGLx9tMP!=$q(aBz2qnKe`X|$ z?q!^@u>K@-+BEc;8fo_S@hPbe`~r$q_Ci4;w==Bxo&HDKDtDk=w39NVEe1J|Gp6rbr_-2Em%Sv5F`Omrf9GvP&65K7nDwd1tszC7(;DI z+$(5S{Cx*|Cy^$?rj~=K${F9m?i<_tQ#{Lf23EPK^v8trfq?c?JUfg1RuxP107(JC zUz$i^qo|VsBv&c063{&|tmj`{EI@PiPlb)z2P4!dw0^AX0oV2X0Vx6=C#h4b`+l5+ zohp3)GAS%cJuuBJ^EZUN`0-6Lc!(TEU`_!Llv9FZ)kFatWphgGKi-dajA;R;Q9oAr z*zI693)P0!JSjBkd#$-53ndfKb`Z4YXcg{;6x6qQ;C}o(uvg5t2{F~a&AtLLB@Dxd z62N%34Zs+t1TcPYF_zI{%((r{zwPxZhMZyr{kMCeFO<@q5iG)#U!_J0`C7*Ux@s(`r1w(!YS=G85?kVg}pz&*KRHs^~VCrKO7J+IT| zcvzuCK0S(?s(k(M%$>>I4_Zj~NSn*vXMc!Fx|^BdaX9UqaQ@^Ar|HvG95rHA=BFKa zB9ZbqrFkF_R9TcNZ{7(8`xvV1E)kXHl)K;u`}!TNKqLNrdP5tuDhogygRhv2TMugdJ3ygFexNV9+P<+n~=3e$aM#9$ZGZ7{4G%mtM6L__%be?u_;PoGNHRt)cAA}Hy(@k;u- zeFP=F?27aGWWfL&mGo6_|rt*KIU_|~I1#?ahaAF^&8KGtu{my=D`G2ZO0OZ`*!aDcmVCa4a%o|zy;mdfwlWK^Z<o*z5f`H;WV64bVsNI(l2cvB`7aDm@jcaO8YvE@)4baM#1+3*Q4Rq5T3UbCJ>ju z|H~&ut12l?$@v^Ap5GU8EdB^VdidWHLl-k{JhBsx65#^L(78Q-Jo+CDcMC( z49`}fgVr8}9LvRAWEU&mI6wC4lPoK1 zJTaADQf1YpmMk!=T;UL}C19y4?k2->h8@kXBjNM`awLbq)5X zuk5ft9pivaB?fhJ{B=nC7q#X8FFF*2h``JRBM9dL2+|~hVV1an^8gBi1Ec>7_4&`F zaxL?-jyQ&2HG`iJx{RL?(tqG$B!^d@x9Rnq z8wTq03r+NVROi4H!w-Qun=UJa?}L$lEqjKmHV~f^K#23eAkuk2U|#0~AeeYJvwS?s zPgn}{S0e7pIQ7RLx3%tEh;}jTks$`-y=wG!G4nH$sf0aq)SDu15dqdxx7HBZ26zxN zP$oha9>mpL;3Kg>;1$WI(Ma%-TJ$n$drZA^3Rne&XmZb0 zUn*Y>*ScP%88st>%K}T1_m_&AFj*YTX=^^Ky*EoF#@EPX{ovX~@%FWIDUXXMT|cyp zXPgSrB7tpVEdbl5NdVYJRv5oHM{whSK^l9b|H*W$2@zfxxp#BVSO_|l!z}tDSe=7> zb3T&M^tju`KqG!ClhC#Ri<-V=%4w>#goGd8w#dP^EglN9C#yXmWe$lomjsJ*IOFT3 zS?<~e+J>Yax`5v^7KPfrxo0f=BQVM;A0reb1RG^c2pGjc6d1)``1>p7H>~WS&SoSD z@NDix6Xum`bKa!g$8w#bL&PeQYNVTXQ1^2TD(SX0foSXmqVez)J{nVgV6UvA8Wl0~ zFn(aI@G8dF>X2H$weYU$x3leFl_6NFVt?T^L8vC=8?q(n3%D|;Kpv1J0$(wtq5zMJ z7{C)E3h;pXh2y`DF4>*zCB7;1Lu)ULgqyf0c~c18H>O8$`ai}3v%PGVHpT+^z+B*; z#sX#6KshYPVEb`X2(7{k+VsHdnIV%W<1lNBA9>&r14vFw03^v`ASe6pB&8gCI!R3Z ze<{Maek{Tu+dm{~ik2I)oR{M8(NdBC06+jnLOwmf6b1!Y_Wyqgz|2rT5=-bApe2Em z-E){+S$U-B ziRj+4$%W&S6~Kj;0xrCB1k3>~7CjfR6N=hW!{y~jYAqloNOP#kUU2s1jchb#=>QG)!A|;uj9x{9)mcQ2$1j!jsy}rb+>JSQ4&B78y7MpOXQI#^kWO zp;Z~!+kaJf{hKTWJG6aE)=!e0Uo9uN{jroaHTJL#VX$d6flBNvdkMBIfIDMvinAnG z^Y|RBvJqX+$}gnnO%fkk8pjVZf843X2_uk^gArVp0|+P-flWB%H!t}A=eWS{#VaZP9~p`}Fheoh%D13(5QcS11%@@P0$`b`1KS)^ zg&pND_mKc^`KRn;LJ`$VhPEI3MS%DI$BJ9dzf;`G`@zDUG&T5u(WnCuUV8wDaP>`J z0kN1GQ!Z$*=N}9_0KywIR{-Jt-M|BW<8o9Fswc7i$AJeDFz`U~nz_YquVc-N2!+X8 zqIi*~T036kX(tq~4CF3#BcLnEr}&GmWCERTm?UJ4&x9rYL06J+%E~lga|rJNNTT)v zB$<1D%iS)O&`iPm&*bMD4M@A3?`O5R{%%%Fp<&~0Z_-%THnR{(U3%p*y5D`_2v zzxWXp{KZ>pfzSO|2e|iZE#Tg-nZbs-2c%&Ceys`%VR^Nl5KH!$84K7&+a@cQz3o|g zjbr0Sj+N~fpENX4JNPb(zyI~A8oKdu(5sq+D?rRZ|1?^lI3%L%A#a{Cyu>n9$j< z0Vb}2@~OtQvy;nA%f#<%PtKZvB@#(NCi8$yy-C=GZ*drzErwso%{tFXHyV88*-T6| zliOuW!=r)+FMM!rO|mgyxJ%fudrsLK4TR;P z!^oG;V``%+ca9^Djx;VYy_%54x9h9L2l49X&x*CTQcGH|Ni}5%$tgx3+1;pWw0gK- z9d~zWbHVP@HBzH#Ekc&U1PSWFurBKXSWEvOcW)j~RonfKJ4Yh(m{gw%KKy^l2L{@l+~&-3~{zd!bi zmvdZuzxTR^b**cy_uCj?u`Hh$<^Si32=rpVUJ<_*(5*Wp_#m>hD`sbCL3_p<%~6fq zx;cWZ80F0c9-39=y=yH!tTbK~0-pVsRa+Xn#yNSz4~vTd3$EP-%lQiS;Bl>9FjQKW zXz4ersPhCAHm%=rgu(9M$jIK9mKSu&ScL#S&UK9mEZN3@h07GMNUVTy4)kIye#U2h zLAUpPx+E|uU@?dZCWQo?Nuk)yR<>l7zL@x|@*ihi2o4JY3seL__$G$4Kuw;~Gu>jr z1PbQFD~e!jE8h~n-G=h4po0vzCzuqJIHrIHUUTFd#fUrXr>6$`61GkY4eQb(j z_4At~C8idU=T8QO5|K-IkjR>;Zgz083kA!59 zsQbGU#ViUSux0mcU@HeWD$~9RY|T~LYp{zj$zC(UBrnYX&GJ<+18iIgM|5W6xh#Ia zpKK6)e}w(O^?xVX0CEk){z{tV4@mxhL>A&gw8cUff zGhhMkpM)>|2rq$t+Jvu_xtcJA;2J=1a4jG}YyQZo!yekx?8nM`_pHMc>UTbLSkuLC zZCLE>uh-8|Y!`Js5zc#k;JlYE0o$lA0wQSrSckqRUx0PEF*a*g?*2GI#pvxab{F1) zZo-v0pA`*Oa1~z6#IvCHdeMrw07C~pzRMx;72Bh$uLT5WECE60+OJb^7Nf2_v%#>h zfnTv#or(ivn_ysf@*XaFow$g@qhG9hyk!z2cextniUG&@7;v0_3QnL)pTl+c%(3Nz zk1uXiz9@9O$JDiNf}$wLJZlsqS=rqgfG4e=bcMO$T$PB@a#c8l;## zJEqp|%swb~@Y(M9)_GVNf+#wSVl`Wy*DSYHe~=ow-pM>#tX3o@*dTdUa@^g|m*2*3 zy!ItD@Y8eO{!OYBKa!~c`7NJeKA@hgubWB9G8{gTWh+y_i8#XDjmyvc`fBK)R*wv_eip}siqimFLkfZI4{#AK_h{3fefUQ*oIge% zx77>ESMZ)lpGMemUmApyo?HeL{b~LLwg0c8_+P>X{QicDWf5%ii`{Gl%68i#vQGAh zCC4uPe2g3Ozn!7VK5C`0SI&%Fgf6duvcRc5NX^EnfB=d?)kVAxOFFsM7XCF;%}Vs+Dy?>L5E7w}#pk0?MT;0A)rt%yR;n zgnLFDto*jx!YXgWgXELd`&Peqe&%u30L$7Yebp+NAp0#^U9Jy={>+*8;AMzUaNVW3-m*$o?Cg>-JZk9dinGRhXyG zNdPg=B7l@+5fdB}lDXVN(7+dGpnlh4ezH3*$l=O!QPQ!G+C@P? z{r=MKLu25O)Z5t;m4h5lj%Ww|UFBdCRypX4RSrf^Rt{v6C< zpPkt!|G1#2J^537^Rf|s`_CmUA2e-2V?ngk0J*)<;X)2Mgwxra1BkS*gK5mK0+>IP zhqQYK-wbl_X)%bGt(N@zS zZj_%#_{t0OVcHET1OSQo|HtC-uLO&$Oc{j#H6pL7tKX$d3;dK`IGHYu^TFX}s4pPQ zpkD}PxKIRRqM(q78ZrBcnl$|sxSwEe|4#2Narx#;TQRjUOg+VX-#ZrpP`spP-r{BAMS3J-SxfR9XD^{{ug+?`Fz!xq1>`VCgET8?v7%)dDHBf zCs;4Vm*`(1#>DFz1dL5Z0OMvcz^E?*W8flpR|ax9{A8v{?A;y>0*Dtj<$-LdOOkj*rn!*vXzo>hNRsF?1QzrV)%T5E#9mTT!snpaS|Fd7>UC`4tJSzV zd*M(#rq(h4&hg@^C6>J>#`;2C7m@UQ2?+GX1cZIX0HNU)K$H&SohFa$352m~$n0D)#D7-Ds~ z|8Eut_a4qqU=eBju}J=JPUNhJ6FGmTg&*-vy+9ncsmEj;@e?_43gJXgLl6@9`c?mx;^e|$om|GyonlN3BgWmo@%!FARE~Zj8{06q8b8< zbS*#$e*nfws--R+ekEAMTmQ`%&lqis>Gc>B#)pRm4O~y%I2Mq26&ICjel$;iKC_~n zknBF%#ns!C?AS0KFP^bQz~eROfKlw5@7*lbs(#C@dUIlkXsD5T(;h{;#~!bJUCWb+ z$rn;q){_$|GE8*x+G7tFj+Fzbt97x?i$2|w=FAGZ#S>uGAIw;}tn)z6No6Uuo}4S{ z`>y7Hy31h2V}7_uzIR`NZK&+Nt-8t>9B$NjpO~i|yi1L$iekNoHOUGd96 z9gGik*i&M5$EXE9G-U+^TZf&z=DHsvJ_&7^$Lbs0^*ohHckQm4tj;H*!WK&kpC;$> zC3a{?XK2A;#BKAk93`C#F5(~?+~BtF>E5$qTfFvdpv|IRMYfdU(RM!5%oBZgt=Ra- z^Y;EO?WW!z?653IoyeV#0(~rMerHUTN3UaJtwy%``V$va<7YN}ky2j!SKudW=_M{f ziwjBX>GaA77;hdDFt*fzcU9Z~9qdsZz(^R#WkXhvAV&hQl)wBZSd412PCbzWUE|Fz ztF2h&Ut(DH>V_>%Tp*i%FlIxbPhLS!?&ALZnh4n&i!UF1LR;l8YD~8>rqjcq^H@W= zfL}fHednhRwMBh?AcrOzwc#U^M%I3jA_*Hx#;Nftk(h}0mR>^+=Hs=iwizTv`evRI zpp@~qu3*$7)F-Al5DVeH25fu&7?AWgP}g<8n~==OerFhn$co<;D4~Kwd)Slet52Hn z={tyF+OAhag2e9*wtRV}$=v5uTfT-@jVCkpN~7vQqf%4Z9OI>DPo!2pPcG#E>Ml-c z)mHO+##7P6GypVskD9bIQ6dnTjc})usr#&+0sm+yDe%Yx?5@^ zj2hObFlwOG8bp$@GrY8?kg@(w&?rUK*rlyRpb1wv3vt#-;=Hv&;kNIXob`}rXtKs( zuIZeEJR^$)6`BX_u9pW6nRl#~vKJ^ZH;FqRb>^(c3{1u71F>hHj!6lSK*i{|*K8U| z3kSyf;ClKvAbIeoJasTtdHonv1cg@{yr7R=zsTi`L288{6FL?_Tfd|*RiLO9Btqi$ z^A@@sTUcm^#ko|MnL*~=H4qWBXeRpFoo0Xm8SBz$@l(R-`V-#Df1|<}pTn{i64rRp z0xPF^dgCk${YLm!v21U7LoBLUP)9*GYi%sLnbaYZb zr7zkBqMjM1dR3`!O3FGE$-JQ_Z!DPBEIxn4%e}g&d7sal^2a6or?mO}BWY?LkrR}G z-3PKGmL(rpL)WcPlO9^+0s~&n_Qk0>-jCJGP5wXQ+-}_&G*O#-A3rfHJ%Mb~xt7jgs(!fW_VhM)B+bSV!9k z7xGV}doU`8YSIV)(FDS8tGJX-QeCl|?ZnI_-vP#n>;x2-I$)rKBm5^uh{*9Fof$t$ zRs1=pxn1Y9(#}x)m6r z_gw@cyKX>)OE^64fpFu~ZUPow>&yl@Uw1IoDJ(xqAFJRRrf(kKDj30DBrAI0W+8XC z)f@9DRk>T*!jHl)YY6AeThhZGHEXVZ@@<8B^yVRZ_ zqwLR5Q%Ii>c7{|uKPtKS>iG^$*)f=jPaLST+N<#zn98OtF#Jrfk(GM%fS6|2{^ikE zvlc9kdo#p#T7x;}uEofbjirL&mIb#r`)MuR`2MG9wO4)6*G78) z%|t>ADSN!_%Dp&UwpxO;;>gLLWaaScvpv+DmWm&8 zT2AJ*zoT%?? zQsM)(nk!w!G5(ZF;7@smbEO7f>)J;U=a`bR#;{t=>duekQwK4nMQnK34-jx34fwA> zT0>CEY%&ONet!dR9I{B;{fP)bn!J)SVg12ucjvJT1_m3qh2Xwvn zr*yqPm@^&4zVl~7H#8Pg1-{2V9o)i!_})X!U04wae4k`JBm?9kZ#ScPY=_vtt%P!X zINt zK+~|2;g&_$-9aF5S+4yki7ox9ob(d+K<5R1>uJwlk&WlS@2C;;=1!AB?3&L*?)(gm z8A`X~KWyfuc++Ma0u^Qag+zZk$c)lo_}fe}h?ub+(nUG!0P`m6A#2p-wuTj%aU5dy z%TF@Fr@p{ez8lBr%?X)q4^!^w$hTjFgr1qXOn34eeo!yAOA=S@VK6TZWy@KP?GNg# zmB$$H{XtNE0x2A-Kk}cwi+TMh(d4lDRiOL9N)2ve3U8Z^hTwt4Z*x_${;LysM(EKc+%j+=$7pzhbXkE%xi$ESBR( zKK;nL0Sa0SA346fr8 zd#<27LBz*-h$>L*rxf&@1;uh6BF>?aZV(hRT}eCe+eyGYoQ915APM*Z-{G%B^u$Xc zi0DOLw0*0);`j+@NlZj<$xnmyOx)V@l%O<`Z`jY~=Tm5?$EX>VLH^Ud7_r!# z3@XzNI`EHmvVX;V_nVP9ksngIemn=kY5Q_UL3rBs zpWEc7o0S-t@YQz~tQRQQ_IMa0t9PKq$m*Z3S%r(803AlXd5`ZZP#*Sd%Bdd1l!uq8 z?fOKn1@g5Un3h%*XlZTwxW@Nf;w;Bn<0Zg|k){S~2wv}B**P#hQj3UmaU*FX!cb?8 z01(L-48^@HXfui*$Yn>soXUh1%PpXbJ|cKK*S*`+Do`N@<6o)zbP$x3y@g)*c+Se) zrb)kgQ}GO1IM3BG)VE(;Sd}r$P3zc-fS59|U6JMP*(LO7KG)KX{mDJpSxM0Kcc7#^ zpa~frkymHa97?U9ThE_zqOi}9hd3)ag`Jh;m2!*w!dZ!Etl}}H-qe;_jr!R+qqP`U zk&T_Fk;J(5A3rPi?8^{&-y~Cbpy;VBq zzjfF%_xr;h>sW#G_ji3f?y8y&=^>qF2xeQaARhnzil9gTGY{=yN<4I@DZF!ib9m>Q z%z|9Ljgh*DHCHd7d!-YWs9M=tdRY8@ht9a4++`m9NOpVOTZK>gK3NV2rG+v`S~pm_ zJ8^~w-qd)Ss>ULpW*QLGxP6+7+VT$^>e}Y2n7`PVRP>7c9wbd-#Z>y->xugro6;92n z6j%RZeZ$WRmR_<{k)A!#eS%jKP(G~$C>vJ8(B5qxWbLP-rN!vJXSdx}XU6?adqWEt zb#<8a@ww}9d4H#yj?^@c*Ldh*r`@^FOHTLF62M}u$Zabhub%ZLd_{?U-mZSha7T@n zTj_Mh>#ODkoJYK({c35Yht629N-gzZZLhY;v6K-hdlc|`+C9yc3ya$>(;QDTG3;3E zp|R!tHGz7XMXahoEyhxEhyzI24w*5`eReU|!VeNQ?wY|_2H zsJU+Sp_l!j=R^QYTtxumTn)hXSb&X=t%f0vpM&D1Wgfs5Wh=OtK^SMj!1qvJ*z8Sp zfI#8~`pfr*+Q+Pn!)dIOCK7OQF^@fZ+Cm^8=VC3x(_N8$(scGa+AA9^nj1VC_QoA} z)#AchI?rgvb0=vU$JNf;Z5OM=cjO6JkQRlgzHUYDL0%(3%F2DTLu;jjm(atbMuxq< zx5Dilt8R9o3ctu%lEPh|LcGRzt$*6d8n9Xqh4XQ7q5L&LIDLIeC%ZY&!9!UF8@2#ccvEHrjI;-<3BFC~KR&e0j%T&f1b^ z&0>LWJaqyeRAj#geC#`!X!bW)@?u1?wv8v|kOmgD){B9ZX67ZinQytZ^0-7LtHSl? z?0wL`ov$Z&+4vY}{uv%i2N(n_yv7vM$&aCD;Tr`L!%-7TxrXdJra1!)CvZ4g_kV z!{lVw(Jy)Qy6+6FuK6wrc{eA;@YE&GS`za)6C)M)Yc_9Y&wY8RZ3gEmo5a4}GUf5q zEten19pHZo^BW#hT}xAbb&n#fK((VyCpOT){MOR?xEeTqKnMv!s$2_~h$zAev_n(F z(^l~swgUC|otm>ySKl|Yb%{(`vlfjYzn&>!lR--Y$=3CNWY_v+I&^zuuq1lCKKSov zxz_4!|7;m*w_^Hn8On&YNVHqVFPU2Q(=x<}Eklde#f0A5*QZg`y>rPW(jGpSv-^g>VPa`uK=17Sun34Vrm9!BL~b#H27XW1xD2 z-&3GoCTVr)p$C0zaKg1I7+-)+Yyt$Yx4`h9zB$+h$-waUvuA>1;0vu%-dt?>G4R;o zR|0|JLREh;j{pN6<|11?Kk2{v?ffxGI0k-U=g}zIwQc$8T{#~a?(%pa>v=AEoUOI9 zKq5bRXVW9BG~1ck^zb@v9+gN6?!iV zqjTg3jGfG4dpEZ~OpTGWR zh6*6zK_**+@pAdXtpI1XEto>VCU`SSF!g8u_5k(crjwPMbQUqJ>PfccqBn0U2Q6GV z=XT)=w*$jp_Oa0}Zgf}bWg@5}O+-1f+AE!MFzQH++*G$i?MH8jF687pu>SZ@#N?p; z(1vM0coCYQIF$c`eCqpaH7CX%B%3p;*FjyfW-6m31M&4spX zBYM|^Z2(Eh9v~Un0wioF=2w7u0S03u$45xpUG2rnrS8oTcJrAe7 z5ABvXPVZLnYRZuv+ae2;~_zsl^lu?t)-G zZ)w;O8z7bG9DDD3qY(;JcLmU~(+ke`FO#J0UU4lx912t`>aYS;m&M}`9=`@Jn!fxg zz))FZIFoDs<%(Hlry}>i)krK~X?uKYk7wT&$uC(3&CdV~FvzCnw{Y!Rj!46v+~|@6 zfn|;(U^(mrSl%wkn^d=8@iTe&&$2uT`Q>d_>ni&q%)1QUD_TlJmB4MS;~^EM!Y}!M zB$C9)0BWd09rHk_;}tLDM@B_|u&Hwk3bNe6ciI;tU@XcK!D^#iC#22Oev&p{tf7A& z4IT*NMwL5>Rb{bLFdk84MNuxnh@?c3b`8E4hd3PA1dv=wk{)FpYe+Z=*|`MEP-e1+ zWceW7+5RA&9TFmq+6-TBMshQ}aHfslC88^y8^~jGwm)@V{<&UnlSLstg|vMP``LEg z<0s{&KU@pM`8Q5f7G0v*vrzRlCMt>oO#=UUNtpN=eIOaffOD1(%=v+FyD%g~56uh% zM3SK)eoZV z_u;Bfgh1%#WQZ)%4-5Gd95i05F6zwrts~^WB?4VkJ<$(6!U+VO;efy>5)f=U8A6=v z`GrBsm>j$Qn~~$6{9iepG`TLQ2`f_dNl;5n!ktl<-f zAX{IvQDn}I8$>*^Z6Z%%*gU@O8CJF_8wTryoTl&qwd#o0pHD zjeN+~-*scmCe(Go1p`aMFkulmtW%MI%JvkX+7}6^;DqUy3cM4nlgZjBzcy9#a5#;q z4S!=dhu-}mJ?99{ZRaL{?z*#kn!el;KKVjB^b@d7##VFiU>bIu%dT3>FFeJYOh{(Phu<*# zjI&NI(jYnAgHj^Ad!3%YI-d$#WG&JFwdkF6OW*xlT=`+4Nhp4`!@89I+{ohg)~50&JG%(v8? z1s*qtfl|P9uD`e7Qtgx1$d^pqbA*RVJ1-HLZ-ovuMSM^wiDkaE0i{5h`s&i`j7Rez z^Q}3;ZkuO}SrE3%2?}2|TC(AD?!x|$)1_8Hc)(!|7ix(P!JTNcGk_#B7P{1(GsHk4 zBItiYPG;?)Md6Y9Kc%!oRwbmgucp#68vQ`a$fycLV2Zss$?W_oRV=n04*RNNky~TP zLYU@b3}Kobu>hzl4gfui1wel+?KPX}3$aKrV4=K9U~o`cBmFE>r)~Gkv$AH?ygIPj z;_)7nX2*wl>jIRmy|KFXa)x4_C@%xMJ7r^Pwe )w5f-gB7AxO9QON8ge>5y^!O zeUIyA*S-|JX)a=OskV-3jpMr*32K4+=;Q!MCL!l0&HH+h!>tF(k!+-jooyLMgo|C+60n zgi9ez$V!cg8*@!{DcgO*n&%>gjsaLXmyXl6!{FxBJ6*j@MQJdfKp(=1_@zPcU8?&@*d1*ZARZqtQ=p-{LK zWHJ4IbWgreOx8#w!r7qqVQf%0m4OXP)cx)&Cad-Q>rJorbV*&mR2tM3ZE{C=b+B=* z`Y-k<*d=-vk&{qr-I3>6kEClo}m|dl7h+AYKEj z;)msGP+4m`Ve|Cax>sf88r_dYVFTm46|Hx+$R?{FTuoZ_{@{V*fx=XB(X~GO8TPf$ z#lv~8^WD1;dFUr{QP4J&k*1aSRe%e%o(aR(uaz-jR1>G14Ld_tR1YwS3xg{hu9I*@z!eEs6kMm^ zLU5giD;lmdaK*qC3)fkSL0sG$el!vrMwP{hDvUe9kG#%?38RGfpz>tZ6o;!kZ9xN$ z!8jGlBs>1+t&6eI;8eh3CoTjGzxQN2gtR;NhbAsMY{OQX&hpBd;|6Lsb~sLoxXxx95WFFuMi zaBBORh+sHj)?ZZTIDt9>u6UV$i5CdYHd?be zvr~58n?$ujQe1*z7(T*DNy>%Ggaou7zC6pl!8*1|mDohwTi@45LAGoaV}Vd++Nb znRg7R>b=>AWM?Y|2&Y~&Tks$N7q|DVhV<*?RAbO!WON_d8(%$0r#%4GV#I{q632{M zbiYmM5r0PDXF&&E#Kn+Q17@|w!4*%L)t2BTjjEpm^}r3ih1BU`i0vF77xoVO{ME3$ zyM<&GIf72=_cOhM{tKyh*js?d-#YH+{8OF_Adx>mB7&Z4*f3Mp%|CZ95v7QpV?vu( z@JvT?_s&_M7oT#SPt|*|`F;LnMB=YEf1{Y~ZYdpCVy?IOiAn|QO5x-Gc6p#ME2wTR zcu-ZAZs|MgW+$Y00{tZz{40%-7d4xB!TfWq=o63k&q+N1cGpaA0xa5IaW0mm6fmvw z9A#Q%;&BO-R}Q%O9N4IdZg1WtHnAb~igVNw^Oi$r z=S%Jzk7g!F-O_sY^zHq5O_T5x$yQL#vx%bK-s7AK0nO!l=D*>*|xjliY)?gd*$m3EHSsxT!vRxNolR2$O= zBx21=(Ye(S+zfh`$Qt!}kQv>l^;$cb+g3E~yfkim#6y4n3~+J;WYM3eWYH(xOd=_x ztt;3BC}HVIPAsT%`gvKTU7Zw#uF#)nMJ(k>Dri@F(pDr}m9&9!vmi-~L>bRZx<#T~ zDoWZ)qI4F*@2IjQ=^2_)ob-@#;C2!}3EeVPz@tI2h*6}M1#K-$3PY*4k{%-2`$@{^ zbZJr{I$o8;hB|7J_EQGRl1fSFOL@{gipIU9+a&CxK+4^Uq=zKz3!cb5RE7g-`(_H@ zv)ILk>Ld~pe2^4I*;I?&e0N>adUWMMk}MjnONt@M1)Qo+qMWL~;OdETA0}B->`asE z8BtYT5>?F4ZGEx~3U`EfJTNIhmXrx5Q*jiRsqk3VtRxW(ySpKb>LM`vESz8oI1L|! zBGBB&tUKU1K1rD&y25X+qzi-Q+wu4$n7 zH1D0WcTRoY^h{d+VH)n;3N#Ry>XWM#_pYrhyhQW-MxPSzS(Q*YHdQ!S9{z=7mi{E{ zO4s7JwyrsXQ;u#-uKIw&hy8?!LGQonV(dF)xiOjg8rB$IqV{u`-RAjG3m`qX*bWit z>O`^m_uOT;)ax;JJPb*Hz9y)rD|17ke|xFcaf=hCTspdopPIB_uvOU3V@gSr3S%ai zxcOIwvAicQa?1?9i(m-@fBFv*ETA066~+#O0JXwlOimlyI<4f*bD4z8VR(sv8?bHJ zCCavCDVrrpY9QALS*zGghX&kJqR49MC}2;@GE}0^BuE+9lcGpQbsGnTzgZa7#>rF#C<*7Vqy=Mx{b&&Wt`N~M%Db!cC z(kF$o(kB&S)ot5?)zQe^RB3GD!!uU?hcI$Bdri6Cg*SUq*Sl#Isbg&%rDlx?}q?6eR*8U42G(`<;ftdoL$N91~%9I`ad5JtQ9rEEo4^U`=x*Yz~kfX2KuxY8+&d6(J4(Lzd^ z4aL|vBb67C^WgS^cakDdMczcK-ODq!AvstfiS@3`HX{tZw}D3QAKX6^h1g}_3DbC- z{kQ$;@xl{>nFYOg4}!e z{`fYMJebnvhjv=R- z#WYK3|Dw@O=OHDmjw;eQ8$Qb3i+Kc>``$qw)lDcsRa<5F0;5^t2Nl8P8$m@dp~qp{ z`RtWEolSL*u2g)qCtlYn?F#h z@|zj$kkJ0Or7CzvJKpUU?j#Vz>;#*PIfG3&oHBmD)__HqHEP;a3;mltF0J2 zL;C2V^qIBKFA2#yMVHe#h(GyJeg}d|H4s$7<#)_Kn13(7Q;yMGmrGxI?p}K6T$_Vn zsOXuj(>#?-?ahUfUkp?8k77Y3sxI0t8xVEJt>fcHzr#qdwe~2d%Uj&4K>X3#Y#XeHX}8Xn+yX-#l)_6p(C77;RsH-69}g7$-v`cY^cX7QxIFeY*2?s#!Rw;dcY@-49X{u zD?Tq#=3bb@aS`Yyt4x(SNVfxAV>}|Hy)QEojd^6S5DVjet4v$8vM9-t@^F8q3<^ZuQM>GP>fUev7K#voGH^797d?s3VGX!EngiEWxUNwy zk6yR3MMLj%tSJs#D97iZhLIfMC_#T-B;`esMw~5gaOna*KhY^>^r<#GB+IBd$#9;U ziRWAxCSpX*vd`5N=(0E;&_x;jAYPzE-p>Yd%3q0^hqpH3ITtZR&c!`bvT7fwUN)>0 z#f|+Va}aNt_gCr~Z5CXBfg90pp|GIOif@0^y6*O*=wd_(EXe!-MHsF3qWsd^!_Qbh zb$qK~{zJ`@*hD5t!-D)+yQ$7tjr*yYB>a#`LZDhf^j=j!M(jt-W0;y3$XB|P%M0NkGdgYc5hY0Igl$u zR#HRq#zD?#fnF;CQ8T zHb_YA)v)r>&`UU;n0b+rHk^F{6qW3Vx!(9%WAtfW`y4?J8VM5nMkbob6tTWr**AB+ z6>w-#(dv=D#OVIYp%*x|uV<1q|N1~b=01dpnj8h0KU}uZbubsV*o(njBV_On&{)2O zbnI{FgMXiK#3`&pIOtaMzoqae@sAY#PJ}Kk!=_Lk6grfPpB{}5LeZ-KOhv4H?Q8>Yrxp@9ZXi#>Uz(Umql@a$&$c$3{)$?s-Al~TVo zc^hh30eLDN#P!aZx` zV1(#+*2Jy4pTLLGH7`egk>N1p7!_M$)jJmo0$PR7L3P$+1}=1a znCNTD9|6m$QLs(g$6PA86>&8F2lUIrpO79zfEZ8%E|8b)pmb3hN3zY7v~qicho0x% zJl0hoav<5Xu`UkCpxRa?8@wQ>s>S~iRrUT$OObqq7Z-XuLclQ{1vuHCz%*r}6Q(J` z!jJP!Cdu{H~OoQ*-5*y7t*Ypd#xp5uT!+`D<&QqSG#1* zu>&7p8gzvHwKG}P&8;!tQ-pVJwc+E&)r^I+?#|zMV&Ti1#-i5bu?T^T_aPWXqFJk6 z3gLH*j^*NeCC5*Ir1CQ$!DFc4*G^Pq{sF`E-Pjq)(+V+^qb}Vb^J#J((zBP4g+L^a zk)TmpT(dVU8>dl<``}bZq-SURD+>eusJ#^A3y>MWQyw=e;MawOp5X4{I;+oi%qw*b!P9K-!7waM)s_s z*}`sHzGNp&AMr1ngbyn8nfc~wxmsCJyh+RV=p_(_SwYUjds-nGu<+64LFNT59LL~f zoS^B#;dex^vPt3A{rBJB5R0dW6lOOXNMT+s>7RV*GVdA>tDdC2 zOHxRC&T8~V)Z*eaiBETpLe1|^YRRv#jHl;N$|qd|`TDqLu-pku^8oYboV?UA1yeB{%SKA5N zL<$Se@4mO_daPZ~T;SG@SNoA|9`Lnt@TX+euO41Z+iYPN8PTB87_rUj*RG=osonpX831XN57I9<(i}=le zuJvaJ{hY&GDWvb!F+CSiC$Tje=VtcIEBU|KAIWkO6^2wi2F82f)JGw#1ACf&hG*k>&p zV9MhF`&6;Pp!s7+=-o~pU<3yD{~UusxB`f7;DHAc2VoyK4#3jD1z5T{z%<(9xqN;* zztKMW^#q^>o0(@}X0Vy5ka*I!r=*QKEb;TGLlhH<}NBNyU=?|bW;*|mojmyo?nW6 zl&_H&UL}2^DP`CtDM6!a?z|3LCBq5N6=Nt>Zi~dh=fnO;0 zqm6t3%oupT!cKHC&7ERiu!!g!0HiW2&-zdGE1Nf*%ico4UrGSxQ6^SLU8_WWMcSf{~FHZ!mo-;8WPi(}>ZG{7w zbdvg|8jl4X$0{(#OO83KCjK>`^=a$od$)@p4e^=O-L@lj_0f*)#Y^S-j+fV5j9qd# zOwM`5*y-6`bh>V?0JEMMVV9$G z2}B>}f?d|mgOTFI2OaI}uK!OYke`|%GsB(nr?Ni=n!6{-2@+IJ^rY`O(Rq)|1%bxs zz4)eIG}iOZ{3}fH6|!r%^E=KezD_$pjA0uemr}S0Yu_!JThUcGL=nI8m)PL<=e*V8djr|uF`hF1tleH)e z|I!68i9HgX=v-_p_h-m@Qy}TEId7gtLh36|ts;S=Q02T^^JW}-F$ltwWwcV3%V)|@i>4y&vP>&oLp zg10)Hy-p|Mq!NwwK$@{j^SNfR&PJNZ)T|n#ed(>0*#gSsJp!&h5R{dcd0^Cja-40y z&4{pi#QGeUCaCQ>yDVo=6EvpRC(;D4-Jh$-LAILdO>Z3}^5@6&kP%&M z4qIQZk*LiZ*PMk57RT@YJkO<5y#)BuPevJKupX3XdMihb_SwlnjEr7zseiGRd>6m~wc@IJji$@`&`lFixAAVw3CxQ8d@PK936yF=vrm-pvmF2D_a5N$eo zd!5@WM@b|1!d8!Jn-IoAx6K91)){fssSGWWo%Ln-`YKLK9g4xeyH{Kh*+pJ}$n&x2x+}$uygl+| z0f({Pdl?iyat`)9la6O0X1?AnkHft5c$Jnws z;6!K}T%lVL6l9O}(nXl)|z*aN$`SL24rU;X7{uGCG)%^uv!orVz6_bm}69ot+Reap?RL zCBu#)rh>wm#H+5jz)K_^TMjd626b0 z;nc~3G^OBBeAoWYxg-V3;OT(@GFt8of97-VTEV5FE+{9s3b@JaTx?x!92r#<6wtw= zuO-OvQ%B*I#AI@mn_K5h#6L8H0a@?vJc+V8dVy}nM2`!xcXX;k%WiQ)Z^&d71ys`R z4;AH4I<=-~ToD*hy79&z?C+A``04H_Y&ks-O3>`_Le2Xy5T0G8C~Na<;x4EJh^Q$8 zHCq|}X~Sp;63oI-yoNh0%0o%xC3j6u~LNZwaiWf?-?eO6wm`*s#T`C%{eyjueZUhKGk>J)Ks}qn8GVBw7LMh z57-~S&&yuyJ_yXenGz@Xv4jk7UI~?K>svS3cQOm0@AwSnGJnMa)}P{~DI@dYzC-AK z!3QSvS25N8WCdkJ^6G-SC{s#g0S)#C%=VM*zbJ<1U~awEaFo!%&< ztaBz*24JR#A383bMo7oh9}J?@6@j;ZZeGt+eM^~Yc4ge`Q@y5=51f$2z44FGbp@7}rV6R98xA_$B0C*;!bV>qk7H03M?y!|d6gn^6M{g8b3$XEV zj%uK*GDml7kQG!2lfy5F!@X-N5GvFWu7Z#7DIekBFCNvedARdFN3O|nE^!30R(`s<;sO0}^nZsW;L zCesE8HOjj85&aXjV{ZpWHe}?J`a6wCYJ_bOeS0S>+LQ$z-Y+IWHNwJbxP>R%m+gY~ z$NK~ri0*T`8*3jXak2v303Xe2)aiRh_phgKke$V+Z?zw$Z@E5bJ^1nPVRYs-)-Unl z3k~CDRU^!bX1s<+uiDl()r<$(1o z57>yEvO8}Jrp`TZ2QcXr{YD+RU4ywaX1Ehe{~{)AA)gcxl#tQ6fTWI3*%QlxI{L-X z1tw&C##aB;jIEC3%esS6gLD`4&exr$Bv=|afmk0_g*jwJxo>7{WGLOmf}F~`r+82B zMGlQFNl3@X#_!Ky;PV$QUBRamyXFwqg+JidRg@#F3%4zqMV+fB-|`m4E->HG*YmI^ z!KUabTRy1M6@qBhFaVf+v8FNmLeu!_OsfKa`F_}LRfBf%VGAGqVolDPs|d8RyE{G6 zG)?TOJ-f_E@|b~*K+u_(krm~Cu^Ph%#DK+qnbNx0zg`~+Ml8Brv!U6+dtGK|woVr_ zT2bDm2{*t8EE&EvwO!!@u&X5e=hO=^e2$xy&9G}OZdNpBDHsoCV-2#R!o+l}sDMw$ zlkeNr5Z=oTN0_(6Y`eIy^>b=#D&W>coGYm21nbF5eeE<_T z6W$h#E5!)|E8+&8d`0map>e5|T>^ma7p8@GUDl1e3yjF%`T!5y0Loj5p-a;IY6Wne zCY>$#2Ig#ib02HC&+E6~JAkFZcbIb3g*z=}1{9uMUT9ar05@?b%){Pii}faKISb@SUkAZbfwP3;3q^=urNJ#|7WP zJTBawciq#)i+Nnw@b+@24sXKgTDi5Whzy_oVu0g5mn3|S^@2&e$?pfdRe#`Qz^oFE zo1Lr(eoB8QOn6`YEcgp%?kQ$VaF4Kgn((u}Y1Rjtb>Ws|EiJMR^llNbQH!SgQt}j#!NeH){&}ga1-L z5Q11pqu6{0&JVU6(FyESRlezoqIXvOuBgJ|ud zZeFYne6XI}uf&P&FY1O@gS*c6)VqIaR@}#ugs1s_sJ_vJmR&lQPDcY<1`i<1CEd8^ zYzmuN+`}3$?Vd}Lqq@)cw7OY;;ae%mVV<)D8Gd5Z^yH%t=)w)sc?J(6OZ{$eeol9r zfdd9()(DygL8L)r>5%<6z0C%jEzB*R$ z7tFEx*fx$Hjc38n@9ipk5}L>3S-UpA@j|B~u;#H< zwq)fz>f_^cF=B{-$FFYxb zt~-YOgO~OBEIcH5S@SUVlxBhs&Qv0{*7_*@D*-c zB78MzT%BZSTyrTi1CqOljVf%!;z27TXqkvv!N2@EW~D^9QPj4lcBCLE^)+UdolZ3` zSqW}~ZHknXCe~W`%lDfiw#)Evc(`if*}p7qBHSk2AHRAX3<~nQFlgaNi9YljB2b0(8?qANG)=x%4hr0XFz2sA zQ~(wWQQ=NmVFA^!WF@NSr1aHug1=1dIl%|SEc~kw6?oWKhzjqJH;S=4V59cl&2I25 zqr0&n7(OLq_ng{;f)9wf_*Whj_641;V05Dlo9(edd#@Bm5Nn3=bYj;0>PNvhe=#rP zeiZKiO>JDN8wIgQMpRS*_rWLTigG|9?Y2f3;Uf!or3T4=7qU{C@S?C^rkI-}tbzMf>BHNix>IEM_g~D-)PNOy0UN+m^ix%ApA?Ep>L+ICiaK~(_!d}+ zI!TjNl#qGWF9Y{bu0+_J@TaD5dItIgc!(`zNh8(dSYQlWf~jFEtmX-`_hfIK*95&4 z4{E?iQ~S!;|1|f7pj)k2qu34@{z8mjYS4;S1^)8=_!W2t?SdO608cQrldPnUUN{Vf zpxf=xEN<8~w;9wG5sz8H=p}rp$)^?UfL5Ki1v3-N72!Tj@wVarFl*lK1}6&cgU`iy zv`X-JH$Mu+~~eLr!&LuAeec9;x@3A)5n&@ZcStDr99j ziu{FF3zfk2nR?{Hzu;DcpHqi3-~%1sk0GZ-U*Ut+6zct7v7lBo1BMm#4*1Z;rlN@$ z)z5DLTET}e*4mVjD(nj|d{0TdB1SJfIbqZP$Jd)cTUJ%~-lHx^Q-w%ZG=ek=D&__5 z>CaI#K%UW{VwF*`K`o4AM4~iyPYU6HCNE+D0V5ltqG%Ga`LxJ*hQt6;F)=DeL8GFG zp%Ou$s-SKm)!ZWb{pMV|Ir~5NE|W1XHP6~>t-a=&bNy$t=H?A@`v*#$r*Ay=A>53A z{Lm4+o$)kc3Fc%-3bk`Vw##u30Y-2!&kfvD^&g>Pl` zjkO?(OC}G$cu6-MwXi&SshVEhVHAO){pM)Y!d#x-W&LNY0SXzM^Izo~bW6MTJH71Y zx5M*hFvX*Zvk6Q!sDXVR+jF_G;KJ-r|N5Z=lEm_qORUW-w|&0Tvn|x_vl{fWm4EzD zfvK8a*j-j0!lSKmI$ODFY2t`=Z7!=5Pks0==RiZvz?sJqu(JO^FE_l*k|&0Q5>DHG zVRq|(KD3;kjPvyF$ZEws4;^N*jHXDgs|G>HqlApm!gBXuU7p?Yi=5?|yRGQ@P|%Qj ztpIJ;&CLzkLWF~?2ob{h1hN`lq z|KC$C@bH?CV{+Xv&bi}}bANUAn@w$VI))cQr`9t297DVb#li^4Sjq(w=uv9){WD zIS;$v%4Ghi*RhPI2yG8|xbXOgK-8;`eVC7JHpYpWWfJ;?#u}Dv-#62zNA34Ho>y^| ze&}&@_{KFy6-x%tG6!b9720swAjf6=ty{-m?(#-Izm@LXkUF?;OXgc3_iGJuM3!CJ zV+~tGKgVSBZp^RNYt4w>FZ(qX;O(Dy%+94zLS$Ec^~HsP%+XkO>GLYk!ZQ-ni$}cgxoN?IZ8Yp7Y|I!{8Fv?7)+f zvFxdx0I)$0!1!y-ZFq}I4t@Ia3{&=ktoO2q3mMP-T7v?D@pv7AefVX@J&P;xQ;Sre z(V^$0YA1=eH~e?W+Y*KGeEr0}@)gE9JF(kP*dRw?{nH8|-uJ8HV$&49EE<^tuh#pj z)9BZ6SQ6kiAZ8C55Ig(whYycX=I@O9#@cDeWi<8Eo4?Jtj33q>`pD(k1HZOW3~WR3qkA}i^GRneZkfwo{p(f{ zrbNKLN3U=9bTK!>XTFhW>!Q4Ej{1qNw1=IWZ`gbNP8?lUfxsPI_8*OQ6hFZ5JRbDO z9_!89<3QB)*bWCH~sw~>wyJrFpW-DzL&RXLuve;f=(abwk+H9Rmt~vwTaVg9TN7{a$Rhix zOysh3tGYa&y8rrIp83hR+%&oe7TvwD`5=1%=X4Izn7%{sxgq>209qw{FF%<64?BAO z5xKjose6ZJZv8)Yn00S3eCV;n7x5Af&D`x}#JXs&cpAMYEY5E&sBF{cCb^}#XwNg3KwL%9%CGU$xPninRB3D$aF$x z4L#hq`TRpN=W#18oBzGNmRp=@b#~(GZKYsycFOB)Cs{yoSOgR~6x%&vocb0}%m->? zc?v0B^vf&fhAEh627eOm5|BZuYw+t=!4CI>6|d0<#pu!VdQLjCg2Ovwx?{do9K^|8HP9vTk$9BiA~qd=}(@;2&cc7joRi2 zV=I~?%;n&B&#|e)W83x~LL3eYs|$*WaU}zvI)|>mc=rQ`TjQ3~c-8Wwb0qw~-<5OL zyS6YQT_*<^kJqL5hIi4kpT_*uqN8)y*Z)4>cBM-$Gd71N-MWt6Wyr(E$OfeXKrt1a zP*&sbOIBclzU-o$li6t(vK!ss<+~p5)bcz%(nPsP)N0uMmmIL#cmDxmQa>`~7584g zI)_B3U9$c_iys=^8s>P5zm|lVGJ3LaUd#-d(KQWSh}#@r{O)J-l{c5%1rS+)cv!l< z2k_)Q>u1(*dQwLlw ztZjIUemqT!bb+9U#JZ!G7h1c5&ub!`kJLumG+@1|G%Gj;2vfV5Ze0Bg4I0XtR8t( zkvzyf|C3i}4m?@!j<@VTz+2Vy=l`4T-79wOFG`R#M>DsU_&X!LOMlTSy)<0+j1BEb zi{Fvn%d`J@>IUS>bn^&|V$wS*Ar_RnZk|7ML(1E7F1NYDc#I^x%d>ptlS7QXlmM3P zr984|L)Im?b0h<}isq;0(-w7PnOlCa{P5@v4zSFbhn6;Ho-1inb|t)uig*P2u`Cb9 zXm)mvGDlg?-+Pa>1v1O{m(Sji;56?tgR|(Z*#~CBBpxTU6%`!vRp!dm+Trw3Un(R4 z&s(Xe=lHpP1fO&~OSRz{8`?9tc*GU-;b(405GyZ5-SMfXT#$4}U&Q%q zZ)c1P$D=(`$m`kX6fAdy^{+ul{T+e@e++dYm|Im*&qImjbN}E zN)qTnp7{Zx4ykYd8zyH+%X@AETB9=LNR}RbIG=C)DU&_>P0zztM(yPuFHexCMKi4C z2bbwK%*D1W^W#5xpS=Zgoqg^<8OV*NQHi=nZEh}pa9f$b&1do`g&%>{SI*JMLG|Z< zVIvr*W`vXwa>M->9omxk#8XLeClJ=K7p{8W^Ef3Iw_TWh`e7436nFOhS3Z+Kj2#fn z3_rJBBKf$Xq}o-8Uq1{#JjKUepqb6=XA4e!VPno_q}kKA5Q)Q5!mY`70lpfvN8$4t zC7)Mg3-^uu-R2FRzGd)>#z}#XlDo@OOS6-9Ow%$|GPTcRyn@Sh8}Onlm+O1C7IOXI zmXgIFlTxO6kDb7;Q4YWO+s0~#U#qn~EXJpwPeDsMw%G{AhqZDGh}<8B+1 zXlGlWwDHN=6-&*7WCv1_Nl$AN@FxA?sa^Z*wlP8O2By11EccIWT(o0}YjyrsUa{=B)%!shROSg0`F3gAKdTB z-{#O2KM<|F;-k;pLNfFi1Z9f+tGB>PQ{>qh&$b2f!-5~1-C$#PgI)8TjqP4Ao^_zM z=0m>%BHJ(~;Pe0M;^Wh`jB$a}_^FQ5_WpXo;MQ2>8810u|KyneyMHsOGh>>5+?eJs zg6%i-ZY8}VI>MgvP2+>zccN(tB9>h399282qb+?|I0Q1}%KgA=~{w z%EkJc=aK|=PDV$BSwRolTT%p=UKV?N7syTB0DolI`^hv_* zr`f$gGur^KIq;FR0mu_`8P86BN$cHAPA5yVKli{#l2&he&vdQP`2VuQ9yvJok!7zr z^pV`@ed4K=vT6fvOfJcL8*)Qg8FKRg(`iRN!Z~OHzwawb<`0uYH2b$B8Mj59=g@83 z2HkLZ_~k~snM{IKk;8SCEcC!=j*Zo+HTVRGfi=$aJIOR{Yrr=qzV+2hTXc6GtNirAk0xe=-Kr~&lli2+cNtES|E!$gHHSQk zgKo_x&%J8IVLZV(eOdOIr&-U&Rw#zVvX$RL`KDj$0v^OQ) zU~8SX<5<6bxH|irr$2gdw&e6j%}KWM^ha@$&2p6sa|8R+xC=@;={1{*yN$j*ulavuFP8qa^@acf@buBlz1#YvOzD-#pr;r5VII+=jgP9S*zswk&(|&mK)jFnp-4 zI!^j|RC1DBWi#{q8T0g8j&K?%(Ws+gsoipP`1STP7eL(fW6aK$JXUB@hHzHzEF_7= zXdy`-sTp|@DzMaiPeT91L7NV8wr4jUxM{EK^wS@G{*p2#$plQOqdKJryWW`IrV)5e za&Oru4%?JV^o@toze{xCE~8DeH9bkV>-Ix!v1-zM&dN=Bewfex?pJIo!jjp_TNB4~ zUs=+6r@Vqeo6luNcaA5_RWa+_S2IMq+UVD2CqN<4)*OG`|IJ@Nnv;j-l+!k~0WKP@ zT(haT!-XYW|~7llLghFAPWn-^{Z5HiP!y=^mt9eCybjNiGI>AT*3NydVE$kGg-?1on{ zSYpNZU;P(tg(YmTB;g5uHRu^!;on%iEIaWNn@X1%Pnl7j-SygXjJen6V^r+C{u8X$ zEk`|i1m3RZgPDF@v~PcK)3WU3PqSQ!-#HYUjFSeps9NbRtNQ=sr|I91=Qi-gF>m0@ z1^ahDYu)=1og**0Pug3fl%M)+$>xN+8dfFG&j+|1WU2`5on3wE3-&X`H(FA9$0iAJ zRdc@Ki*)U{nx9(O%gJCj9l!i%X8TWg2h-d5u+ZD3I}EZ3a06^u^@o=oV(MXk9x(}S znER|h?1g@R+(zMW<`EBDuDRh+_l8;aUlO*Pzk;x}Nb@8~a~t}i?@E7jiTt2!;p%Ot zW~;wSkDe*E>Y+_}5OdSq+a z)0;0@yPYB{K&1kVHI8t`hONii6dGM)HbmhXTfWO^-hE>)<3HRv_Ivgp<`qpZQ8$^t z`>(Kl!`C+-Zk;zC*90@&E9T1e9p7fJUb1rG<=Ok6{oDIxD|TP73z17Yo2~Bz#Huaz zy>Hu=I%ykyCj{2;W*|AMB!WBXKx@^xZ|kY{_mcazz9_run#)lXXZ-S(Ie#aEVO8gM ze$OVp1qhrRVqwFf2|j#)M~>fTiLi7}nJMG%jXz-ZU;2@4tiA&=n|g~!jCc1u{wv?I z&BGE>js zcb@Y|6ELHV12cb{A8gL$dX6rad}#BF_*+VKnI~2)bmuV^+LQP5AsP`GLpUOvU;X&% z?1x)XPR4VeHl8q(X@_LCdDRWp*~S2#C04uxr*(sTtbFP6{962fJi#lNSmUcQj^hZ+ zWx559F}u9l1cH%bm<x^a z^9st&e$qk?%KRAp@oo#CN)zyP@3;5beSve#_&vXT`z>?Xi+5XS0cE54VN&2NPB7lp zL79&-w-=+Bkk9c{V)n2QZv|y<+KUOkZNpadUyB#ahW2}tbNeoEHY5hS8_XD-`@wwv z)qxUf~AnTc#ogTvR`)JR+R0iG^_9E@pdh@C+!Dkx46cxS;6a`ebsTh zmAOF6vbV0xSw6>i$xr&oHYCr18F@56UBS5R?y(UM_@SKuS|yxIUd1q8j$+fR7Ou`Y z4J>o99v7TWxU4}7;xBbY-h$3-*v=WGz@PQ{ir@5}1lqxw33Q7$Y{UnolkRRoXx6|Z zmkwLswrU|itDpXVD9yEMZox9Xa=A_@tw~Mi^(YpSnbq))7N#p-DIPW-gSH)%sTg7Fv3sl^WV9U zPV8MqJXbhCO&s`Vqpxh#At~$Yn~Nm=2D!Wa!~>V7gxoKDJ~8~%IUYidzlgu)={~kk z|1DlJ`@sd<{sPJy23R<7H*%sansNVq3l_d~Elzs_X+FeSD`9%teQ>B*gVPp~W~~xb ztEBCsUm$Ho1;3@)1NZ0bp6h^wOrH5Wqr+cwKSNj~Bko%uuhp$sbI#^=phjnFkJ)@# zw(t6a=l^xoZu@1c9^j?W)AbLwwxE-!gSBl12W_6(cG;isTIoz@$fV;t z4%&dZ39~hD`P_wnI3#UjUZ}~-GV0{n{g<6v?1Jo^d>71h9JtYc8*W2tEqsZbB>mnn zgNvVc(DLM&xZ>TL3)Gff`!2??gPfh_xGn9pmhh!bGVOqt@TEzCg)jY9%7<4M8{oS0 z8O3e0PVQ3Uj-{b>{%JW2@i^iKSM&+IRRVR~MKG)=8@4*jrp65PJgzei^B3bubHh8^ zW6Fq)nMgjStN4W8s=kl^0DWI}(l0N`vOk3fIgbn6*74hw)Sy`Ur<*Am(Nw&1)B)s} zR!_*S>UsWy^t{&!0#Dan%7lUBr?TED*UWaRM=p=;XM0}CM|#UjVGT^YY3V=a+o%<= zb(Z~OUYGShz6PHYV4GuRNv|_h5^}v>*}0uLVtF5KZ5!QZ_Ih4y`G@~fF!rufb|clu zgnDcq@nid@2TRvk16#+5tqGqsyx_u1>F~Z+P*rxH9h)(Z>PrMd~n$6zxj&479`$5*XW3_L8{IMLXox9Ek3DQ%AScK?};ZGz0-I-|e)`G3@Ppyq>^-fq~kOWwqm*=oeb3{TT$XS- zotS^6TBYy3kQurUjh`C5rZ%tx@^_x{tApsz(HS(CV*VDfOcMqEDPFWw=>CZ>!-NFQ zq99uDRs`cq7yl|hr2k?1D{kz*g+tmo+%;D?hcxx+O+z=l_nNaPLwx017WT6?=1*y8 zbHgDNO=oQ`%+~zbuUwo@&HnLE8OUqpU%d8Lb_2jQwsq3%Mza|>o7;dI59ap(yw1Es z@_)P(j$ZV#-!0x|hTFcY+C6EMns;l=UaFblUOOKwa6z`=c3#RDp8ee$582Nb&hT2P zqv)&Iuf`9K*z7NeEdpPhnwD+m8Mn{e$__|=H6pft{gRb)&l&(d+rn}-19W;{`10e0 zbFJEaw=J?gJRRkkPq1U%qXw$AO0Le59H3>_?x5>tV2*RtAX;L7!e~|hU;7RHU;hyn z-^JotOCEP)EY-0$lbgczMTXfOy^mh|_})87Fhd9Am0WG7r8@yl>*WZI^0({(&o0BM zMr)IHV|Z~lz{N#9YqyUcuRLo$NHavE<04XG0LmHvxwk#OS9aKY9=B4ixv;l^G>W>U zQm*zQ$-CC{BA#aE0P2(Pc)SE^pF8jI9H_AcNHnvo_rKy5+mISRIPcZHcH+BuSC4u6 z5TASZ<4OLloV?p+6t;KC&z|~jMr=$l8_~A&8#b1rvy;xJb4O=bO}U$ew(e%(Z^d&a zp4@5;nh8kg;@;+5<4Jd}{bG%6D|fEh818Ig@+l$$rP=WAIz&UCCydrGzI)d$%kKXQ z-8+jNr@3H^5{t9bzQWR!IIXddB;E<7Rg!VhKe9mIy|}xZVVn!I2fzAw;ZmDpVoA5p zI@Ge$zKU?PNH>8}lkPUOMu(2pi0d6hPMk@(mAFq#&K+u&0a9GctY$e~V3vM{C!E%_ zORGTVGq$jW>=gF``YzsuM~&g?X7|Ng=-JI~n+fQwVeN8X+B0@k>@7fAxA3L$blq)w z$qqX9fEPctNH4)gE5p3z){R8dx+EjnNe%k3le+MrK{k!u^u~n;4dHDAX7;p|!Z_wh zTMn{Tc4)K2DaOh7kQ4UKvR${ds_aQ(Y64{yOK#g^OXX5omOX3fmL#^E3n{bgmM!K! zb5xdPdv0kd?K-0RJPuOI8n=Zt`N6}QXPmg@knFrA+bjoc?UHSFQ8I-z8_VW@?L?*r zUt81sZD5z$H@}d6lhi^=Qrnx)r4~w^t+&6Bex0rS)N&kq*?d1J-*O78;((iK^bWXt zrKb!^9fGYrg{~cfS>vX_^@txl72*1ex8x48muH`!ZrRHWW-FPW5H_uv-6i(;ty@}C z$*g<#maKaH!m{jBf0lDJ`~07>JKR{NZhj84^Sb$QTawFU4zl_0Z*6yw@h~jCJiF(g z7{XYZXO!Kt<*@9k*FL&!mk}+Rv6qdzVXM^#Yj%v_2r}s9tAGD(bf0s!@R9Kbu8-NK zrFSffJVostaxt3mxalpc)Ux}(&IU?M20Y;owZ2QtmA(4w?ES{p`fZQd~!%b=IDT#?stXKtO%?a%&bYvQ;$rc8)uaaXqcA8p+!@Z#+(y(}N7Z386F zn7J13`uNsTv0GbC zU2P@wx%}$5ixHA@tZ9E$^)L3mdutB5_&&yuwbK!YktmJ7T{}jcF27N?}0+b zdpv3gdv@u6!u4j)n2l-D-iEyR-IM!I|Gh;%UI9*V@C7wj;|2JFQfKqU|IO5r8gGML zbeC@DSv7zs{nH|a(E&u}DC4G#f4s<~13Y!p1OEN1f3}>0GO}46l$SinP)V&P@YSGh z$RV*)`js2ET80^iwAIuHd|6HXT&K5%F`1MzIf1SQi+A0x_^_Ho>sN2id2Chn9d-3` z)Rq0)0!-gY7?TGQj}!i?-tLjddAs!OB1;-MZEL|}@R0F12VU7Xw=h5plifY`91vmM zY4YeIU4LnDcf!Y3Qvb9kDq$|*7xQ;*o_%Wv-8Z{HdwDRES1?^(O?}gE=${I6@6TSl zWLt4e1EegV)yv`6N58!dVQ5P0M~EGNxtd7utLl1T*KK*?_iK0C<`wmgrCocaN+^uY{N?&^_{2XA-~I(^AaY$*)<1j zD`J=Z0*29p$#26DAf*$w6;aEmM^W!~(~_v-1=)w6y6vEB-K#+x*B!!FAP*l}f%%th z8-bh7J7ycPjJD7vweLBm4K_8SGJbdQz2b;%hRW8xo+19~aEAE#?k_5aNO$m9vVTeS ziW*M{m`pLJS!QTARk;M?*g5}9S*0dHWba}wG0+}^%WZ|WI zH3Ty8F(F z0-V9N!XH)%)e*-t!p~0FR)j8_-q2B*5AgLK0~oi_%AM1;<;i7t9=|Po%;?Cz^?MTi zw!yHx&_3bH3$lan-nQII<~x^DrF~nMB2>vQbp&?Qgx)=h!A~uWWrkMouSyxk7-=mS%bMkXl3;CuM^z3C{J@M+BE4LZiGWPPP zb2>Z6!;tJ8ZZbW0C1W&uKPbtc6)g=Ulcj_;~R{aTQSK?=hr5bc4ots8(15|YG z8u{C2p^+KLm0y^=-@Pao)$Au1A~%nmM>%=lJ=C=D6SvK`g|hRHLz=uM zY}K%gxohipUcdf86b&fP&fTBBpMg90KE+hKnjy<7IAmvR00 zwx`pp`6^SjeHI0jR*Nvwwwaau;Nr{QX7S|*cXD}^x8*-z^^sw_d58$-CHGj!_#x;L9b6v|I5O%ST; z_sjRtZ}AQ8)!D)Knp$vUH`UlD`)iPcr|i<7*}iH0Y|&_tJGZPVe~r0czK=mXGv5)^ z!T-e|#^LN0tCsGUU3u@earVy-T>OTc$)x_sTz2U?hH3U|F+$>W0#q}vaX%yM{lw7Y zaQSr!8oO7TAeDcL`x6zK$}W9?F`AECdka(3{H=@Znui&~KTLJVhC*bMH_Li+US)ue!5tdX&zu7`-yDsQ%OilP`-jSW$gLRD%Lh0W;bW6&@RNWaUGc^fo|o zuc>dGICwZYZZhBNbjEKu{uO7w^PG3T;}6e#=aC~y%;y05rngbY+=Zmb)o&}YKN=*A zRlFShZ;<})w<8RB6e%Gx>ft>7fW=AY#5Lfue?zufb(gy`lql4xnogb2B zXmf>G1N*k*5l`8k8`8(_y?yWO`meq?Emn!xXxMzJQ^Yi zCR(GLafKbS3qb4kcf3-|E?soM_S_4`gQor)7~$pkeT`mv$o4W(jP@Re3i62J|g?=S8jiAt{-q&UH4$uD0^j>Kd@sN#)T!1W!JxI`{%PAf50a@-}YzkeRG2_ z=2(s)Tl9oi>375HmeXu&C8OFZ^=R1a?SH~Ltz5SF z^6ZYYSf?*8Tg)^4*;hNs9kYQg%fPy6#O(awcQ5^pA;sv^@eeh@x?$lfgJPVn4&B4g zV^6;CfJIM$gT>KFfJVp*^nZAl5nZplcDup4&UM=>SO>Wtt~}yBCea_*ZYf>Oc+MWl z@!YcP>#Gsz1nTDa!9?1N^51;td$xxf-bY?Q-|jS_X){Opp^8=h%ak>DQ_PCrTSEV^ zaECz<$H~R??WHd^t=V39!s3?XIZxuh^Ix|g3^;U#x*KejZ5PiG<3MN&Q`)G`%{E^c zdfwucp1}Q$OLMVh@ryVm^G}}b(WUIuouE1D*`Ig7V)4PGitBH@oY!NWejosEfdFzp02mtO4l2gIfv72OJhauAiu}%Q1$1Y8oKaGl*iUS~+S!cte#5dw`y3^97?a-#j>}8%=RKR;HVIb| zkX)VJ@#*aaZs%2U!7VTw6cgOW9<1U;G5N(= z!tBnQwl7aw`p0Wvss|&7j={+P9JYZlen=X+6@+@Sa!HfBUJWe63bmf&!S~#9#FB+I^S8w>eT^Df+oxvBgN4qT+DF(F4CAx@8 ze(p(&ZBa=IdN{Ka>Z*Fab5DA9KlfxAOXC_F>|!VJB;o7qb4wRfLP^tGJJNFQw)xE% z*>i||=5Bct=D(1On=3xF-7apr#>VSb=jqygm{;OyYe>>-_4`-zp1W*uxzz`7WlezE zD)rBwzX;6As%v)Ez>emIJ!;kZvo)tIwwCJ$<6F6Y2l7`v74|N<62SGbL*Vb>=RFx< zy8FVA{`2StA*S}EeVc`eHGf+G_Sy&e27$+*uRNmUHq8^a8RdqLETT6QcRg~1Et!?P zpsiu+$S)>lz{^WsTzxeB_B5gqfXafdvxvGbhPEWrpU;rO|zidpw7cKxP>0dYmKe8Pic{EN&G$` zXr9d($<$tmd+VAf z-3sU%e;XEsXkr&|m*7{^{z>^^7FW9BC5s2r&^Vo4dkT|3?n|X0^m3M`;AG=CemXOe z7RGys@`~)kD`2KEKD+ki=r*s{?<~quSZk?%3WK{>&G$e8VNI{&!Ad`&uXt4<)z`g} zmpT1P%qT}>6tUspDtv1V%EQX_C*{$Wo6kXOMacLd8TJk?G1~}P_FB|xI;%(hT%_9& z866lRD_*7%kKC0eTY=gx8(8RwgpB1J4s2jWU>%nsx@HelvE z?8>(+8ZdM2f9wxgFfZS4YLL}(d`8jg>$u>^h|LI%AJQJs_~r3`49`7&=_6hHR^BJc zK0wH9tx*omvOV9*3pPhWMmad+Z#@z+|8{!!_@!&X>&~Wk6Ms<5$}7=Uj>?D|FFl*S zzjXga=_?HlTR2B&3{XF-JMUnC>)*%64E);9m2W~!05Hi*a@Q-LiE8)5Vwm&14W8K! zwt_bH2F(n2e0F*EvG?W-XBhX6As}A8e+!b1+_x9M;8z#-1k4)V(ZiaTXP>zcX7diF z)B#ea)JI9evy*pBQ>C*KQe1Np@9!r!-M2_L0MFF=XWn0`^&E|jz$axb8=HL@*DU+b zmVCel*ugzbYu$*(fB;s8%sKqUKhHUw{oQ-`ZbDl8vDNF}V%xI~i}6EJ@vVL^FV}zK zzb~%N{@-N`k!$w?l-b_i}p&KdWii%w7*_zB@bow#9w3dq2E* zbjtg@WGMv_T?K;Z>=Rl4bJyZuT7CU}w@#myt@-}q3z~#Gg*Q#O+h7_!aDactdUB!O zaTP+HD)mnm4X33;yv-xVV@aCZJYqC({|O~LmS&r>obj2L>fiJ)i*}Z` z_1c2pR^YxddCW@VTLlE~*W)8lJU%kcF-Gmb@qe)!42H3Ht^yS~2BXToW3X|7!64Kz*vik+ zt><-G+s1&VJwsmSH54)4WyC++isG;Pv-w-pWw(px{Igjv^MiAezs=Ii4>eAjyULH~ z-PfQp&3N{r{45Rjc|vD#OJWdNQ1i$&Y{@o=M!kE#C;RKK*y>xzdXKL#g5R9H^ES|Z zw~%65HUl+&Sn>t;R<&SlFU?<=p5{|ZVrd{Pt|)Sxub5 zGWmUr<&H8GnK{Z>x%|VGsHT7Bjq8TjC)b*^*)4ebZrK1NB!7GH|7L&kFT8?r-YfGv zNBSv)+ui}U)=htKahpoQp0*r*=fC>M_WcG^a37gZ-^*H@ntkva@ZJ+r#wm&4RO{EX z@1K0}A^vrprsejiXFi5)fTlJM&0xv9vKzm>_>6?jZvIw|%@FhNz3}2y&J)P_P=8iEKM6i)%Zx7?xH>nc?4(XVCy4_!A1nd2YA%<2 zkGXhi8SnE^Mo0=E`OPw_^ZScjlijc`=S#!J%2659G3GZdnETC&Z;4{rjE715y+pt7 z0uW1ii2LuR&>P0eF&Z5-ALAUsR;AxzAYV|+mB8+Imm8q~Yh|VW#z9;Iv^mij+*A60 zeQ&Pfv)%74f%$lN^Gy$$?b-&?D0uG@--gln9Z>!mE23}Q&i4E-=I#ai{md&oXo!A0 zO5@oi>uoTN26j=NFH00b%xvi|8OO_$jf;$aTD2(rJb+1q7I{x_?V61RS{vtRZJhhg zvK2RlFD1Njqv;VtX|!%*Z}OR038p2R={%j>ASlahp!1YW$n&P$t8MoyMN!(#kUQL*>iS1!tB`R>{y=jHX*U> z_6IIrm8$Gy*BrZ}?KWkq)z98+!(dochQWLTty;CCtUBiP`d9q>j*-F5{DT{Io05*| zSnRe{1+&|r7>`s~{A1VT9ETqsuXHi)7xyXiQvFSf;aDs&UBTGdcQ6MBW1gh<-C%w^mF0ri?S(fP^hUxG+6}s4;K6VZ1|EziwKw*GC*6G9 zX~FkicQ`-n>a2&INmzwpuNMXx4myE#!{IngdN>}|+f7*pO00*0DZCbDJ?ix%tv`v+ z4*T^%Y>d$)u$Yr(Jk>WI&yT_zkGpY#<32J|lZak-Jcw)>j|O4j@wlAyG#9&GcQW4% z%Qfi?!~U4`B9A8x8*?)1hk+-Po=ke$>&PER(?e6QCT1QF|X_>!`)q}LgDbrpJ@$*81Flh*6? zx}9!#<8F5pY5l+^WU-+g3I95o?j$_R`gi6-L$;Fesn_fE!$#_{FuFew&ag32ti!M} z{Z0?b@%68kzuyb0m2u})A@%xEwtM|?KdjbZUeAbLkK?6!xv3vI5P4-?u0cPj*4|*) z4{tmecfte*lOT${VW%HfVLD{L>cGSP%nb7h4jYzwhz1GIPQn?{qY87F;HW#cXKnqf zoMEwjY#0v$&5S0YN_)V8TSS=qUii*&kP1(5Hwe$O@a#UO*%n4 za*)rLB34M)q~YZz(_!3P6Yf~)n@lESWmBJHLszShlG5{FG69v;`$Ko))a*MzJ;#IY)x{``>RNoS3&2yZg%#}yn7;~NjhdIB=WWIPp()Msx+K2bGG zb~^3)qevU-nNPd1s&r_R0-BZhuRlNT%qj+0$I1Zv!%iRfyO9PO)zumY078F?1Evfz z>F6m2t=9=}H|eXorQI;D0*Wv`JJI8qtvWyH3;u)HEtaO#3!VACVnW&tM=DO(LwbnO zZZg)D;WQ`_bbQ1L0_Cg0;5jz~|fkl54Rp0#%`a{N;LJY7P+8_?x<;W5q zGv~1`H3}~5^bVLy1_plgfMI_AR4TX=?L8V&1W5Ddb`o^}QpZ92#xiVkcK+L6<}6P_IcjkP~a zHWk^<5bIO$U%$h-5#AV^O*J8hr$Q+fx~m2$v|hurKCrO|2}}5ohFFj~Yfw&@3}#$d z{&4^xePI72^f&GY1=pF5hjG)e(qVIrCvgW)xG|}dj^-JTgh5bn*dTs-+WxN;&17u; zntW*-uc2$_!?JegJ7M>C0WZ2TU5-V45w_)Irk%@QpZp&+r}}tpg1nD7@^!<3fxEg2 zBS5ge2%J+Z3AH*M2iYD?;!=<2JBot)V-`j?=6JrR&L-M%omN&AD?dRv-oIRawi^~{ zefh^62>QmD8$qeCW7KWa=NOvAXX`E+TYnmk1E0p7Nqm!TC-9gj!}5>2{jmG7g9D!A zxSGaUckvSFDqwHVY#Ljl{+JgI%in8wV^ly`RSb@_XJ+sp07P7god|IC)fwn z1lmCT0X&O|HQSE$hd2rFY7EE>vmOLL5Eg1L9K9G*ab*CWdWek&;~wuX8*b3B{OI)X z#zTB1`YiCT_ICDi!(o7HDD(onRQM0o6LsD+7Y;*LDhc#l(WH^8+R*Cv!J;q<}THNF_OY$Z~%r?z?W9OT!H`C z9zh38&|E6BxQxSLf=#1d^8UooqfQV@SZUKqzu!|Lo{~6lKSVtkWIQb2B)M78zw9m@ zc)&>%XgCBE|4jz{a2(@Xj+<-1w41{)Lbyg3|SP7FE z5`PR26H^FpGQ>fwgADn0XrSo=TcCk5 z!^;s%n$;<`{)93@d=FYMNC%kjs;Z%l^kjoJQJn&GnOCQj!I`NZy%57`2MsG#-k9Ks zTDY_eMk*FaTz)WXzNstxN5g>Kp#|$0S_r8@DKX92?wg7Iq$mHyLr7>mcK}xhP;1Cy0)!KRcZ_r$`Vn3+IP79;4}X;7KB7p;FK76y%aELEY_Y)_&TIW2=H)+DN z6SZ^AESi~Mf&&o8YGVx0_Ti|&vQ#k4x&(j>jSF}(8T=OEL?2B7%_>3U$|!Ciry>MD zKuICa1PxPM1|FkDbOo{EU5ndsQ0gGFfppemG8rO`-K~S*wF@+?Iej^-x!Eynd<+a; zI5Y%o>R!OK3AzP8ncAvs%WimMvu$)^;*Jl#f&t^sI;?zxfLwJ04p;*na*Z0wsgd)_fE+HqTLOG65RESIlm=t(yoYR2^xPR*de&^uP!x4)=oLkTavu+L>9|0hCt{rkHYe1KFcx`1e7J3mH)^o_E!tx_jSbvth z1<;eI2V5?M_OxNYr->P~8|b+Ojbf|%EFMB(F`vQhC+)!d7t0S3$qNsI<%DMOHDL)~ zrp>(rGyQdWR8|%6$q6^ppRGSc5@TkFMq_X3p$BcECJxXw=r3piLIP)TDd`xa;Z$M0 z;a=V8BN7C42Se*BxQ5n`{jo7;-`HP{_ed*Ko!($9(lK?0Ks0?A@0My}OM=tQ3T>$9 z&b)MWmazU1L!J}qWFaY!BzGJqGC}k5MH(hqXjc#7*(%^A9ZmI(nRHm{LCiSBpAoD? zXd$;28bME;3`e7$-em6KoYaOfi->j{-_mXfGLN)@#^yLk(DSutr*^uaGi$_oTnMCC z1==w19S67Sbd2$U(9i$k1O&XG_oN{aEk*0JL#azUfWB@xgoI#PXg8aqo$wzGLmJ|k0E3E{Ik**G zK?|+|1c!td85kJ}FEX5RNb3$Jy+@NZh|q+*XlNYLItU)ZFfggGy8PHIzS6e-_T zsrvwN?`lKxoU2Wb7Rm;$VeE=2sxMcv1tr?z0)d$)nsBf$(k_ojT&Jj6|@vH`1 z2MtZ5&jK>Tz#OT%{9}%+^uiVX!+_zEj&^7{O@S6J_wZ~8c|r?kKC~i>C}%tCk1C6& z)0p#9W!n-$RF1*6>ffM0l4W$#6I^~mBTU|%s?6dF4J?^NbBZxKLEf?aH8M@RzJ^Mm z;W7aawiK}A;2QIr+-((c7Jy~W;d}Gow>U(BN;0qs0ooKXh^g;ut*9V4% z8#d5L^-vlHv#^s4nC?)Mxgmy~4vhq>(BVjpO4+P5s#G)Lav4^ zHSM@q8`_1NqUc|~LZaYgFQ$mJRB&wRat z|7eJf8yY58$;@FwJCuKD7Y8PZNDWfpQMU>=v}osO$j|@c#DW-Z0zxCIA+t6l zB^!y*7}`SG*&QGiSsW2F5|Qv9xd+5a!owkwOgna~wnN0iWJuVL^8`y#?Fa&T`NdA&zg&KEeCgY<2w`Q+g{N;kCYfH}7?VD%))-_w%Mx4v z3B%Tii561Y0q%XxqkyKHi^z!cgh7L^PlZYqnaI4lu z3?)ODM_1J{R&q^P;6H1~(JgO`))Nm1?TFgecfZk4HS(-oNYa6cDi;IiQa2?cZ4NPc z7-y;Ic`_yNGAfTP6+!n0Iv{LTyP2Ys!A9zc|Bp~OCZLK5ax4l2?=`?qS;Fdztw=kp zGhG?N45doX@t-vu%J~kBgm~SAn2$O^)}Je-^%ZnJ$;yC413Ra7;kYgm+(9_Omu3^29}Q40lR*?Ed_y~8tWwOuh-!Qq4cCTtNO(^tX!fWmBodGGRJ45dnG~gj z|BR?nTWCD1Z-U!K;FWm^d0Hmer#lfvJbjuj*XcaJ58w4+b6P4t@vey(4VSWofrXHH zO&!a;^g4IT>CgotbwQ<`oDN0$0IaU&4niZC2ooGa>kyI-+1=q`F4F1N!N3a(j+;KL3@(Z=K@1GhU#3EkW_@F<=~|eN z0~2?v-UBr!u@){cnwpX3nm8vzg&JxOx1_`%vvPe%17yu!u#SbmkGjQ2_sl` zU_Dut@r|hQDC3eE(?%nMRR-b23zNaot0y}86+fUn%WaLR9v@x8m6Ctgfu^~=(14XX znds@|8YkOdbcIRJ5_XWLy6%`JF-pm?T8I13gj)QV==o5KuCz{ z47Gdi0ZKp%P{KSEVS)fs@r#q+huc$EfkGwy<+a%`8SDxB$o6xe*ng!+75D6kJI_wu zii?Ds_Rs)PvS*=T$Yw8m-V@Ifr==Y~dcV?WT35wr>c%&k-o-H*z(S@;7G>d2EI})0 z7mcMMmY8l+j(jeiXgjN05@=zkS(z=lI{!48%Qeg$*=) z8FOe}J?BOvwY7c&5hAEsm&?-M^z8`Tit8q!j5A*~=ZCM^<)hcoOQXkBG1G))O0 z`wja^bQ-i^Xi=_(BQT##A(2)SMkNheaa5K-1sd2)-UJM-=$3XGHl#D+?XqXQCXDjV z?z^Z#3{9hQ)}dBWfJW}G>iMgA&zt-K@0jD|B$8;TL}fsf0+#9Dqf*oy_hNE+rxOl!^6atm1fE! z(D14#jpIPr#6{+CqB0X|B8kd`sKteB%6PVP5Zo*}8G?ptG24A&xeZ`92#dgLWdjli zi*JJdP;-Xl_HgDy(^wW~0q9Q7d`xI@c3=ZSEM`;f1$^q|8J)8BXovdN)gmuhLPgxA zj}BKnp_+VQVfp#aN)bDV_=jYvL0sxS;ZA5UNC^ys9kY{uA6Ti~4!Jw7TLQHd_WKZ* zpKd!GovMiKhNgls(#c8#qJ))}V-~g!!2|{Er~%F8#xaHZ(gi2%s~!N9y?VIGjhZG+kU>iEM@vSNWoHt^6UMM1fR)WEU+Z$T&AZm}5VHinX1&4FfH>PVu=~EGf5+ea)ssCoE^9Muf(-_%IoeU$NnH9c@S} zyfIE24IB^w0p#fzq~>+RAfzD%yfj1|E1t%Yqe(ATqCB{ANPE+QaRkq@kh9lt#y@iU?9ad25E*dQ)E3kk#ZDnAy z`E}3W62&EGfV9G7SOCFt1Y(B}8MKgZU^n13umnvDOGjSIkVT7+8*TP(VhRe9f&l1{SyMAwcQr{v)s>uF z2SC%iMO{jPB<7ot3J`jFqX&Zn8(KJ`p#_D+!VnLuuM9N31Otda!0tP0!|c3Q0}rhH z-weBq3wGl`tt4n1!O{hKT=%TmT$&BW0C+LDI90WME z${D&;K??y*Xk;sBJ8VE*YQ|L+gsq*vvM{S2aO8yS9B3gJ4K19&_Q3}|`mv4KO)^0{ zLudA^jZfVJ0841dJ%ox+X%$QgL=|wkBSa{n;aZY`?dp(@F}9om-TnBvHHc;vJLQfG zSsdsp?T|3B9t*T%%gJQO{7SHr_b>Dkm2QB;^@h-bctX>fkq8*+#Pu}j zd@;4j7){HX7|lSIoj;{~a(03b>N*`7x#IO%8%;e=M$;lIcwWO^FxpIpRx%HbsFhrd zrm!9wY0~vgXf(CRpylWL?8~81L=?O86zx*e-sY?&myOmJr>)USInEC;XpnRTxg{=1 zi?l-|V3V(Z^)UCN>)Om3D*QJZ$pyk=5^d$ohi}}k)5+jDpV{b+|Ew|?^Og?H?9)N; z*^ArTxhdL_2pjHk-GpS234*2_-%yei3y27#Za7R@xxvFqS$eQcno_c1WiVR8rpAxw zVAR&XTz>2^vC`Or`1f=bfU;p_FskY&8`~G7N{|#ZEYKO2*!V^q1QElXE#T4GY4`?t zzgrCrOz3{Nc5E&T0>nf0%CMh7+jv3DM$M{Cn91x=c%4Zs;c520&$B9HVX~(w( z<%p&o$=156Aib&XV9Uf%ak8AAz+?Qa5|TF)UQ3f0O)qpBt;icH@t+a3@Cr2co2~+7 z7X?bu&aknp0_nM8kXkz;^|S4!EI(d#F)pByzn}wi`B?0|u0?KU{0wF#K|{^g25}l` z60-vv4Ja#tJtI=$RT>fk2|NazM(iixThfx7KYb#o$;zWj? zc<~1@5Y|D{%McU|wJZr)8ffwD>@t#01`|Y2O4eCj!eBM5R1r^RXlcoI{#2U=A}2?E zsi6_AP@3Jb3p5rY(DWl#mT(lV9T`!-i~`L{HfV=vLR~FXaF`$vPV57mRCZ-g`kUhF z(-X^znCfwCHwaXxgE~n@k`A$@RGMg~t`{zKr0YDs{>2FhQ48eI5GLzJB41C^w(ORO z#vqKwm(OH^0OJ{BCE-8NGS}}zLxL4bGp~=*P(Hc}7(ZcuVD$#p4X}SCOV;nU1ktgw zpQ32Y>#Q0RTELSy12A=D(pLQ1_Li-Gx%?Kh(KqHWo>?wGU;x#cl1api0GtkDRoqod z#*8tuS~fl?CFFA&O_Qmik)*84Pa3?cTgzD#=Y&0r_fS@0JfZBQ&Jfo|*wrL62j#;- z88)Vsz|;wHGkYdM(N~Zyn7eLy|6=(OPpUoEX9!K*?k2_>bupS&ihwp#UL?h`j8?yl z%lMoce4j*?2AVn^X-8yPL=hTzO(spmQV|mNH#J(M9n9p~zY?vwcc9^o47AFNQM{dL zOnnjR>We>-n`~zNdw&)FgQ!JOtgt#E1R0nlJl#mNo4tsbcueZC;(ma!_!Gf@B*bbN z0cePct^(Pwx~oZ#(>iEqTT>x2Y4)^kYT8-RZf(dGQ9hv^)qb~(6$w%>aJcAXH11T& z7~J+MPRbJhaSeo!WoSqalG4aG(Fqa@SL1?nH?ANR;w8&$igv>hr<;a&rP}Y5Fd+^v zlOZsyh6&l_>KVn)jfPWp+HLoF!GCszL=OpQ`mG>x80;$-G8s(8Fljsqu^oQQVt*9) zk8Eo#5rTb-0OhlB-msRb5!JM@Fmz7%OvV*9_` zT$To^9de6LjSKEY$K@v?tgal|>18?)Im&THJZ*dlVP>M z+PeMiZh-1}XsNR6tP+5Tts?{Dxlxg@`T=SZLDQ(D)ft#g$4f85AvT*!?@9p86>KbM zT5W_5@ww>)0rZl3X92L_45qwU2(v+B{guaDd{$ox?;CtHgrT(lAlFksQp#h34>M7x zv7+mN^lCG%1hfr1EjC^SvzhFu(JIrc4)xYYwx^9`C_ z0b+4U3((218i6?$Mb_<&BT(ePBatEIfCE@>YB6y1xR8B>PhYkzJ_$XOXcy%Q_|)qP z634y)1xbgzh!851#pre~-Y6c8F|i{0WaC7P$;;-y`JN+96CsttM#hMlF5= z4R4JY&(MP6g;w`Faaco}tyrB7Vaq~M*awYIZpf^OiG-yl%UfLo826aZ@+>|u6=OaC z0X)>D!QZHw9DNi}0yO>D4;C@VS@(z8wPLq;u-_&)dk8}e-ZHK(a8b1WCb&5C<}OzX z!bg`$!NPjbXGs8<1>H|IylEBE6~K-<+1d|~DGW^4^JoNOQmsoxO}*}nlvy=6nY-oO z3TOPAGr|ODBwoq>v-9V$N~Tw;NNYs1%QoR60X)<}3`Rv7VfAv>jx;#BgDLADLJ^h0{eTct$E8G> z8v2{vpAc&wkMgZ!lgs<(YUc%T5ZvqW>Zha8{xTgR@Xd$S}%_~k!eYObl@cxB~ zM2P`_h&JQ^)`7v^s?)4mzn)vHRgflV^~o?kF&X>ht_(~BF$_WkQ6&P!qD4vRkI;j@ zG528fz{D%c2a@CnFjuMKcGhL~Oz}+!4I@q_O;Wq!aqcn%Yyzzac~p@Ci1F=!RO;_U zHEJCwi@JquLTGpoWrApwdX5#50`@Pt$J&r%Uf&L{wCVt2*!p2I`Xfm>JPX!T7Mljv zNCD_L4+H|*G#dySCsF-jOR`s`Vs(WSg+mM8B4`|K(jTB+3)BKa00EHLk*y{3`V%cjDuF!q*{_;Rw?p zpgF1Zegp%PCMdjvh9M&zVu1!WnYUjy98MP;t@ z)_n*lC@P!w$dxPx3Q{b3xH&Vf=D5IYLeLfXHYtjJ@CRIoYGbutJhj+hBJ_P7mK-wQpU z2%*^eAw@%$KhpI319$~-1W1R_ux@ITv39D1pb<6^R|T#Cc6wbRpaJD{5K^NAq0x@} zaP_4&nwFb}Mp^r^zoZI`s5LQ+ruX%Xrp058rZ?s-*96N*R)K0=a-{U;r+6*{k(*Z% z_@hG{Ty=3W8Zbr%A=n@iVXh-h!!eqFl*deg0t_2bgTO}PB5W9h8%9dw!be>^d6uNY z*bY}|`K+6Q)=*347>&Sp+0gJOH0{m>h0H-I%7nZB=dkb6bRlu(;fruBD7NYdNP?;KrjU6>F#I)kf2dIB2A6 z&x~Q?BVOnkePbLQ;*zGF6L?OM^x1H(>L)pYV#`MCxf4Tf*FNc9iMi1hNuQ(_qbEE6Z07-*(Bz0@X5wg_y zkAX+fDm;vDOx_NKu9wu!L8O^X&?vAZ{XwI`PkptlfEq;(g~+XQoeaAYcUEZEmlM#+ z4uf*F9fpjsgmy*BO=${RePX>Tk4cM*L-q$WEu+ZC7RdkBb{M~6iPcEOayY;qtZ zoNYAJtGo&RD)A{;JC;k@kwK*=ATpxgFv2;A-&IUOh?ED=>#RY8}P zjQ21>`!uWa9dlT91r(5-Oa>tt2>!!1wDe_d7%uzKjq%Mqrk+Uj?du7@1| zk<%H%kw#-%%Ve<51qD-u63ba81Fb4KmdrzIho-6bhx{YmGHYl-wUQjE#swYnsRdyj zG`(U=I}Wzc&g)X!`BSN2uBB~Y%VRBVsly2Zx{sW7Su%Y8_t4qG70}#cCg|AXj-<* zQri=3s!b46EDRj1czagME3h~0(o8iQ2OD^u^JIdVjY-l$YzIPBu>;7e3bss@+L_Oh zPwGY5Z?^vB@>Ba;vXZSKU6#w0CTLf>^^I|GsII_Uh4kpNR<5n0oz3_RVqb`;h>2$3 zbyZrpo5!=r@l1#5SuVYVfpL8Hvb7%zb@Vu6P*&OnAMOZqw>&mo3oB2e)8rLZ&*2*{ zkDl_(!yuqWsJtVmOi(Rg+@R;cxQc%mVaBvf03I5?`Pvv$RJ{Sv8qsK4Ho$06n(bb4 zy+ez$>%B*42B~BW`_7ou(X)nnnaOBmmg~bIn~!#wpmIdv+y$GJ5B0Gz7NQCu5~`)$D*)3p|_fS-fb{$vU63id52tUBZ?94&u~X$E0JB zP8Hkfrv#CEuEEI`gI2~a-%w~aJH+*D=6u!fjL=~O9?;b9XYGcQ?8r|&ae(+w`GrW9 z=n`}kL&;Kbm0WygJd63FOUA=$fmp+$zfzZw_N?WiAo1d|e~c&&ULyswmD7*J2bnZ3 ze=&2WJPTNk4THqk-5Aveb~i?m1~mNyD@Qg@i#mXYKF)5s!SWeop5%o|J{4UMGuAzY z?hgA0{;85DI;ka@STQ)A_g68&d^|cC+)ZI%LJ6wmas29stL*ZtC_t$VlziQZ&BInfS6E_YT6J%mk)_)clo@stN1ftK z?sB1K@-Yg9&XxtN%fOhLa%;)9c3f(1va6+JwMl{+v>TJMkN9>C9#~y2@*DIR!lSD( zOM(F5dq+k?2;@b8nF?xXXC`0Wh_T#I#s0XBgQpxksvC)cL0HAI=ExeFMpvxeOoC2s z#6S%A$ZQ>jXVCQS7GEvEo14iSvw8V_Ij@*gs1jDbtcH2mL;_NgJBSsOI3?~ zXCT|>Z=ZMucM7c5c)c5F_yUv$qzdiG=a#N5fkF2-G`*gTjY1-8PdE!eKyS#v`1sTc zpj~h`U|#|v^;yQ%2~r550=_wCNhS^G9-5|ga?Kautt*49scfLkiA>345I^<9U>=eF ztZ!_o>7q)=7vlzvc4%=ap<#;ZuCQxK>VGr$n{C@S&mtv=Sj*ZWwNG_m)PZ_{aHJ4g z(q}2L+0U-J@rnJPukUDIkXOzSmI+;0qDwzpcjFUB^VM^;b-7$j*HeLZDXV+dlEhV`NgHCnmbN>-Ev$j4f6!Rsnd~M01efWj|B+JIb9+dh_sYNv--};K`R}ulQ!#8 z7m{*M>d?0Oc!Gka%m%AWJA?`9VqqJHsFvN&Qtucvw7I+p5fsITfH`KkLK{*=MBf;E zFZlwNy@qlK&vN@ByWxv)HH>ejqBck0hoM;8*iJtT$nf0U*EO>ehq-uET;*7h6c!$) zKjjvwIN~(0c0|nUleWtH>ZHLhtuj5eYc2W>Tcc@u8Z=xYvI?Z<=rwWLF&EjMT)@yY z6{?z$Cpr*(3NgeppaqQuO)p>3Av#;w2@OCbD}&));(-F6qJ}iT5;KBaDD99-znX?% zVR}h(Aw+~u~;6T&QOj-7WR_lSrUY*gsrk0@1K*HpF;_$X2 zS#^ABCwh2eG^&~hTM!kpJd6+2~kfRugr10p&xLuTYWXG!w&$IZ} z!n0Z^k32a%4Wjc0d`()vUu3E0@J~8~sB%oGyEiq^~ceKA$RMXeL@P+U! zR+2PiQPnnQh!8%8hUU^|@#^Tncu!}>NKSUL=d}2NdEEgp+95}{c1ZG-p1Fqjf)3y; zle9Ek8#p`zKP~%8`APbeo?BkuU$i5%s0lfaf_PE{-ERTULL=_V!DM-3yWy|Piu+X2 z2zh{7iGi$SqHnr_1gK{rw?iWWmBDbeY!N-TEO}9312nDZYu|(oXCpVq^+pZthE!%0 zenJcpTlSk?%H+(zJ*dx;8mnSVyAYg3MDlnS?_cbGh+3V2L4awpglG!R^g5ex42LWb zbH=E52O3VAnP(Z_oGi%13^CEP!m70*pIzDkYt_23xPu9?>~g0*i#JBugya;+ zC$XI*3ov_tS8PG8!iZ}WSgCJ9vYFcZBmdRKijZP4E{a~syv`WeHFr}u04;C7Z zrTQRN?p(b)d<#u;V(s&er6pA2KZsoT)DDqE+5O~Wp_)TGLRf*uA_kh)G{rw=c|tk} zutIk=-cG&a$Fry@9oS;j+8=jH)jnoxaZ5n(pLqns+Yx(KNX{PALiczM@r4PGp#`7< zt-57h;6IG7kZ1)h9G@2Bmntg^Y&pNO)aIqo<;O{(IAF?Q7iUdPAdTW8?Rs&a`*2J~ zbO1E$Ih_n?&)UvhWm1`k7y=f8NQ8aVM>Q8T{n{sMic4Fc1)4G&TCp&t%}VuCsT zgBa35p=sf32C*+$7Y`>Sizisi0fXhKX|GbkQK|Za`%Y#JNQZ_+m7jR=OQRw8zH*Je zid+^n`?`nn9V1B{t@uKGf7tn7o`4Vo8p8Gg`O5^k{;x)e*+_bpK*O!7&w_?3HJ|Vw zstn{B8qQ|pCf;$?UyW{_4OS8ss#ftrT{f_Id?KnHB5f)=G=xkPpX)C3@-N+Fc$Ugh$nRgxd=nTNp!4 zp(4hZV<)t@ec?#A2@Zgu9`Ly6-e%u~SS_>=BH=tI4Y@uUXgDK9i(8Qh^<_}5Ed)WK z1;4VT?deHv+g(@2KJrxFiYT-=L~x+Yka~)$o$dQcYFa`IdHz;yQ;#FN4WKC`Q;0;y zWni4)Dy6j3Yc6)ZfEyX|tO0mA%dn{QOKRjik*TY(2#D-B?T{j}VG#21L_OHo-{fW- zgP?U~vqGCmNy)W1#E{N}Lzb|LOvY*^R65923l?&mG;V3dKeW>toYZ%=%5EYiXa{nR zbzsZzQ<{AlCeVU0ZN;QiEm@|gY5STMho~2TaC8xF(#e=VLRSWuq;4YsWWNrYxmH3+ zxEXh9(&7*Uf=Bb{_i=a_KfdmT2EPUEkYrgId;&8AC)V+OExjSnAeM%s598NTzSEy# z6Ew;UL`bK+MM>32gO61r-31rhQlzlgHO5%EuDI1kklV=R#$K|GBhoSLZ*^>KAD&TeA*V7~hBi>O<4ASk?{$ zQCMPu)i4AP ziNpokOs09#aKK3|$%iPh`DJ55)7*dRyMjga6e9u={1(vi>rIu&lF1nPj)ASZpLU$7 z@*?JV)3j0ZwS{><=` zE<-~y*HtaEs3GSDTFB|Q3_Cp|pv|Pe<@nFa2`I22bmbb$}sxeI31rwBf zB3?zFof4c>&k7BL*=3dB0^d2;RAbUkD=6T1pk7q5;c{yqUxXuLU;p9+govj>W{65x z2N?U8+KJi@OI-O*^hnPLo}DcZk?F zV!5i>#S7??9!&939#Y2vOGow6j9{sa=8pjHqhV zXu#Xhp<2TD<9R=A#}zbj$kWcsZ`JySa_CJw6A8d*!nCnOkI91m6#^<_0La0gp;#emkXg2 zXQZ`Lzn;-F|IKKcItdM7swU|8&xn;vJRwwQ+}hBk1{wsVLczznPUkyGg!%=h8%>XG zXq^+!8jLTD{Q7fK%O1hLXE&Z2imS=lqlK2pRi0l64i( z6k!$kq?KC0Q0kXayCAL06cYuWYLBbi&P15D4P3PuK*ZL{Y6I8d>CjWvp;3G z;%N;E2}mQ+SRM}7O`(}Jp#6oEME07UmDY~;FP7i32~@T@#7L>DcL+@_B099|lG=_8 zF%di3)eTq1w}N>iC$vErwrpiw+gaQT{@;_M_EQYXI0UOoHmK2f& zWyCBe4Yr{dWH z{{dPx<&TGPEa{tI#;JCs9Z@de#%ZEYGo=K;%!o`$4Rc|0jIl` zQy}k|fpyZji}ZY<9k-Y2{y%$|fUUdU+bT?&%x;x;LMwVw+I6>ZmP~mMaiQA1IPR;;D%fQZ)sB|p@Dq#YL!l53}ZW zym-Sv9|QqJWcfsyR@0>&mCItgsg~czi;q#GZvu2wJWohWuSfGNqNuCImQlA2k%IgZ zE$?40KLANF95JGyq-TKNOk2qE+w}+KF=K=`#%8ENIL7A_1Y9xFrNLdQFpPG1h-F~A zO&)2Q%gz{VLLGyG4_YH++Y=s;=;#fhI*h z&@|{|5JF3<`9}rCfenpjsuxI{uGg*r{}E-=ntDJIY&Ka|Xhd-8%MVS{3h`i&iYn?G znqJVL9k(16|3O3+Wf0tE5>V!0BuYe<+G?af=(FSph!&;LNa+AcEbuX{C zZP{JGDU$LLji$KeBj!Psm8uZS;CbHPIl&t(#TQ0W#*B~E zB&HG}any2RoTfZ!G3&QdUJ&xbSeuKyWW?ozNU3!EP;eI6_`yGKsutMtql)h0=Vvgpfi zGs)}`P~L2xi2n{OTVD^1FD-UV#ZMMI{?5Vl$p2je0`}D*Hj=e6_p(dF#Lu&FFj%!= z8knv!`vPzJA7D9>!7{u$9eBvG{o_s711l!w#%4DM-!jGO+e@WX8K{IO&S|c33KKBA zFcu>z>L9KguP`oa9q30S(JW^0|4=|&cUE)!pwQ2IV3`5MEj{7w{Fb^$1!~z!~OGeD5z#?Y(pK@YaaE8x_yW)<_A*Mu3EErll zrcV@-+Cyyi8@`N5zl!N7?d=sL0>uJlJSkY-P5P5l6LynsauY#5RI2%s0e1bRkYkcT` za+4ZewA-4PmprANZ}UaJL24#34UAcHUNrp=Ftw6_6CV6oLG;l70L#LqU1bW6q&~Frd^6`SP%okMqRx7Pw z%hSa{kUs_rW~6#WYFA8W%G^={f@zMDzo%#=X#rbyn@0W|ESNGcyd57~_aj^3!Get= z5^@|bWA1pnpEZswdcf}bA6>NErK6vwr9_(bsmIfm(Qnq$Xw@sGL{-YG;d16w9 zLaKXuGW9;FFf5&^q#YQAk4s!VIm`vxS{`@s`0Y)_tWYsodT@9-&k3>WXHvr*pjoj^!uOr zX(Uq`zpffg{&B*1rE=UvnBs0r87P_o%MK8e&vPkP+GIxNd4j!X5;jQO9OEie3XCQY z8zEk9x6b|_=$DvKnh#huSYTgG=6L)d5tiDJaci#MU^=}g<_AyhAhICkcRszir0WGR%Zlm1Q~wDbnV+>77GI=f`n`$NZ@+iwf0Kh6 z^%^sf$0H|3uZaZ;Tl$RAd3LOPwY^2NI6LTnfUM@2L|RU!PK=F|mJV3HZ07fzTpkH| zoZb`TUcHSj4)bw#Egx7G5)G`+lL4NLOIet(Q*KVI@y@Du{f`r)&v;U+YbOGb{ezjN z$*UxtBGfQ2s?@TW%M6@A;HUw|RYdAB&^Qt+84{72%8PO3B?rs4`}2Do8=?PA>hWqI zpbsI}^zDOXi*RPnG{=pNNSsK~OBx?esfYfjWVsSVg}N};_(4AVqJ9z0^qToLo2QTQ zSmO91$BJ2#lT2|}!74Fz+74!n2(0{sVC6%iEliAPsMUMsK2=5eJ3&Ee!6PyX$`j>LF7DD*?^8$^#=OnH>4;=Qj=Q*jd(;0W zfuVOSu9)|I@(ltevm=YpRmRa5YMi9Bz{1lrT?EsbmHwA0^?uOvv2n)2dzDl?Va1-9 z&oYS6xLdi`;QxXCi5Es$jmme~M1j_ELuAMm%;Ud1TDKbkR_Pf+jg*LE+{|wh5use6 z45*Cn8OQ!SKE8ijZd&6?V1ZQvt9a(6!lr<-c5@Okr*?-42c`QqE2nJE;nkuQ)ofU` z{~i4z<0mIaLtsr@OwYm~l1Wa;0^|kR7JcY{fFyG6#LX$pP#6j` zB5Fw=5}fPiNZMMN6#Y*hqeoA%gBI8aMg1y8QV=m)D@6;east81&@sV0)fhYG?MM~c zz%t9hviT;jDu-@jfvK4}C7eLJc;EFuz{+S-VIoo-3lvdH2c=}@N?ZYxZA}{T{kgKb7?mKB z4OEm)LCs7lgATpoq5o};>Ac6&Cno8GEmi_%QbuccER)a|L>Y>XCjY%6-e5}75?$O5 zNeiN!MXa)d(|N^R1q(P@;NDbTR;= zjI%O3zzENnnC_Rd)3{ru=@8*V3jnMf_NlS#k2|_&oWi7>*fAv*2%K|-Xy&(Lt@h)B zfx&D3AY=!pU@q`U)wl}Y7#H=AGcPA-qgBg;nq=O<%1N9^EwCDfnnbc#El?rzcEjxd zK>u_EuSv2cvM||HF~+zlkBBR4+*ap)<}zTy2d8h%KR=kgO#gz1~^T;&HMcI4`t@2ft=MfP;4+^*H3-lyALiC&Q5}#ywh3}EwJYA;!=Hnv*_F& zwf?E;Z>?ME3CU{xRhR!-t+8Inc^*tuEqZ{N%v;nYed0IMPpu*&m% z^XmHbUpa`Rj29y9JufxYt;g{X*0;iDg>a$$yb2rxBa;G=%E6M)3S(qo16B0BB&bq? z8z%sm1jNO9z<$#mk>r1^P}8&`r|Uoeu0a|Lq&BYaZxJx=So@)4Hmv+;PM{pT^De_g z9s+4oLXevjiLS+rgsE{DRlx{}f}QiJZqidVPUX5&gk)vs$K2r!qvF>%dBz1J^b>aB zTsw~Nc7l+ax&iGd+tf)S;NHxWrbT5AwQ=m*m{=3Ijc*P9clIrSo|@ETDiniLZ&)0Y z&pj1<-&VpG*s|f7-%j{7@;teAie*jCR-PwEe8yn?9*21DSdb@g^XnJm!pni}tmELy z{&*IRE%vwN(l)L#$i`vT(o?QjQNJd$={xc2SL+Lt0a+MiW+uT+7Sfq8;onZA7#3Rb z_aYhuQa|WS8ivCsR>k(}NM0-9ZD18>atoa$#{HIvFyA0?g2<^RxfKa5 z;(Y{A(QG|;Houq2CYJ&7@aM5|@E3NcvsaC)OgGwW_IxtO^zNu{=`UgH8<_nY$4OHu zlVFlL;s-e%ie+#-q|eB=3I*@qUjN$X-u;s6vk%^VYi9lHZC-{nnC$kPR+yq;Wx)Hk zITe4$BcOj!0#=^}qq4W^+yPcGQn0ET2dnfou+7RnQ4vb8=8RdXE^noUDo`SiQ>93i zK~-iJM{-HGNdSEQ=|t=F-?)D5)9z?e&U^eVQtGs%sGq2CxN)?g8i!XVjA*`}>gi;( zv(0Jzbyuns=WraUsH){uv=MQHJ#=z{)2LR&^*~h`YYs>l;p_D0Mq0QD0oh6^hFs zh@>mdlbD3PkSRmP<+}|?(c#wxA~Q?fWha$lHbJdC7@47GzssgL@_m$vCXV#<>dU!m zF`g6y9*ivxGcTSLw&;GZuAll&3??x?!Ik=1DROx|#$B33B?w-GCZVlyAu;5Ri(j#; z>hl=i^Xu2X^WEna!4{^tvhs3I6Nn&JGQJWv!CLKB8(ds!0wvqdfBDIPc)EV#Gq5zF zxSmTnU>*t`voOU#D2&RNDeTdp>Y(N|s?R*T{;yy6?o%bDnIe5uw21m)eyu_%^6qg; zK5|2N@_kXq1sn%@?VJ{#Y<2X%!WsfE3?ZDF*s-nHmw_N|KmW zvlk4t&RAANVNk+CE?V1!bddh)shq7deslfo=Ufn?s4f&Ws|bI31?8FqRI)th&9n$e z(!uY_VZ*X&PZiUlSflLS5*kjw95Jk;axHA3gE&E{BqyZZoi2oLu_?K~Wf3aLC^F$P z@7;N0ys%YIqlrLy(a8RaT}kUEo`c(S{TJ_y?6U-Rhi`PNX%`0^axjU*zou?HR7EE2=)+05J1dr@- zk3K_3-pKSJ?W?H1tX8c;uXaaQDuSa?^)`D-CSD2ad*@7gdwGDWr4wN=`HGB%LAzIZYhUsjH1?|U^ui>NTjyuW%93sU1+-7tCC(@JG#9#wk}i( z-nPqm5Mals6p7kqXY@^%;kPfZpZ$J1RNZnKVPT%4RpaO^HB~nR^DJT|6wYI-?dy?D zUVKuKPt!W~Qizm(oUD$kyOcv7-ynbbJx=$Yf$hp4Pw83w@QOw28#yU5!QW^2$wTI3&j;b1%F^<`L{ed4qrxnZb$I6NUtD843i=-hsFN-AO z1*^Cc*gdKIq%8oJkpOm&tke*Fy)ao zZu%9}xQZbm+1JQ7Y?aW!kfyVFrA$XX53RLw)xatt z9IP5ljK-S+9jsdDfSokidp!?eHH4sBJUv`K zZjMTJrteP;QswM|RY!ENd{)IqB!4@0oc>HmG`}J)>SeB4RIymTw92fEVO*5o5bRur zd-KbT74n{st6sx6^=ye&LER!?anxj7(>}Mpy?*_VV#1t^`;ENohhqb!J_WWsX%BTH zk*bb~tyIl6#yaf_PJuy9aR|J(we~4w&wWeYuUpSIR^-W6>TzeE*B`zyPQJrz6*1*& zX=#C#7l$SI9`d|?<@de&;3H|hy>^C7T@Q9bt^N9yKRoBtDND3i94=5o!AMiwIHk-r zuIf~ct14|U4(L1|EUFYJMsHpBc?Kdc6TKt@Fbw7@B?OZ~vM>66Nv2t7-bA`wD&#~R zakqbbJKG7-H>}Jt-}Xg(ap@Xk11r=9rj|1&ru`%}>otTSirAgRmSA^$|(ZYDl=JBK_bbO?;#1yw#aGHVRM1w1}>NwSiz3I z8oR)g0y~+saHJBlc)WA^;V1QL$-Mi6j3V~DkrfNIWCj3&8MS8Vn)lp zOk~~O0e_PUpE8w_IpkzdOrR!JPw&&3*gle2r;F&0!RzmN`|g)z)($^mC1uhFso!yu zw7(NyzA+X4#Eh8vR%hY*Ru$L{c3i@jqP%$*bbcs_r9h?F=*#!$oj_$W%;Op>RsAMU z5VH6SQF18r!ePtLUtjsNpC9AR<|R8U&3Th$8{Tr7+W-SzLOR?JfnPr7|ewmj5pCQjL` z@-_2y299)!^Yx>T-hJT<%~8b6YO?E3{vaufl8djfJ4*Q)t7^R)64J)Y6?<^(<-Ed| z%buIpdn{?y=#>B!hfu0n4oFw6IJ0Ez4DRT#(6UG}#!1WmT{qS=FEi9msPu_6p1ETG zYJ?<~{pTM>HRaHh4W2nrvNKyHz!-}SYNl4E+1RW}UCM&);fmA6pMJ)*cyZz6B-7Wn ze=wirb=1zf#zF5w5_9p@Z5L~rFwHV>8>cr}(#|ydESO5uf;Ib{?tdTE5l*o|emouN z3MQNT`t{%HKBOR17gR;_H38_BB1mc!%v-WD)~8F0Wtxk~Q^sDokzx zGfciGOSUw2fs>{x9nR`}H1E70_#uQT@uly{a(GDVoo5lPrJm^+*c3UHqPY?I3+qN` z!dxq5!i!`#=MritYGGwGteXC5AJOWGq;O9;E4+;7CtHt zCoH)i-L47K1OheIrvN;6$A&7Ef$O-eJQA>cvx<4sk8zodtkPVmk9AoU6_rq%Z0jVh zsVT~PIVw$Ih5`IMHDN_X#jD-(vJGFeo%80f1|n7mgLL&;4E=RKx`*p?ii&pNE!EA( z?rEN}8=luwABVcK?Af}qm{X0rC^YKb;j>AExJcb?xnjlisbQtxND%7ZLxtv8Wi(Gi ziNFaD6%i`qDa@$G>~T`96N66k7WUWZ}MHSRTFDJgQzn)&XtR~ zbi+mw{Z@oUUVDL>{?##Iw>614b;EA$Qx>m|RDxz8@(JsT$;>OX;@*WVtfFDEQx7cs zQr-sFL|V-CTYvYvFMQFZJpOq58!M@<5T5vS{X;%b1z+Q33j}OBljQ9h56x*I+gzxi zgz6-t%+}(tENol4}VO~04-AsvWEB76>h+nB(lG5c$wV2*1 zwG&R$Jl^S_napiUiSlIRM7%1UMlDe>89i2t8S#6Se9%C!T$d1C=B-W<59{&JAD96t zT!akUi?5cbZipU6k00Fi48Gr@J0^TEvR?!J%GHaIuFolaUm8bV(V}9v!Z^`g;|RuQ z*RTHG_joJ4ZC9dDN0_>66HuwC(0DQf`H>Y#lKu0z9ZSNuaqcPXse?gCwG(7nix!4S*f@BTM^0VO(|5$GpRQjY!+dIaQXf*wQ?hsJxN_rc zfuaGy=FDN2x2ZF4PCo(E6#7aXN@Lh+dFta+$oQ@zDdj27qR^}?sF9urg6=|px}nwX z*t^HTn}Fx`DJ_$dQ~XeDv8+Glc%RmVM5{@#uOtZy?^#xEB1(nNd%nHBOJcx&RmG4? zY)!|cp-%}~=YiFSblRx(?)1xhd;Qdxkx#9Yl~LqGU#~qXr!Rz4B8yD;Z5#IVxP!-~ zmK9ib-?R-|FCkq)9Z$o~O*HN&JD>{K7Fi*~7Tr<0@S{;``;JMO}8i96L%6pZZ4 ziKiB)VA|uQ%_uzD=zmjhu;C?D0Si|36vK1M&7xFj_Z03ndCinlyOuTKzdNgEq<-{ z{2*vfLLJzN>#;xuu|0D$22WPNt#(vItg9jC*GwSR_%W$ zxY0s$F;Z14jE_^-6`RD(e6}*ZWdM{hDVkK= zk?LF$Rq9V+i+J(;Y1)vBc~4w~Sy09TeY!8?)TQU|DUj^j%<4_PL^-L@pL~*Hx|+Y1u0z0; zrocsQ_3JRDfYv^!n3szeG@~R%_ON! zfWhjq>Jg6v6T;ee@_@aEB*X=4VqNxz{S1e^Gq3r6(-9VHf(xYh2@08x>4^ z^nlI$Cc!mpce(^L?D1seY0+GwHBRY7!{q856W`{2`U5FPEr!FcKc=$h$JN@xx6G3Lz z>(Bkkaxu;D6u)4TEuKG7t>9-|2JHssiJ+BX9;Pj_I-kn7vDN{r)GDmvBx@-FmFbWH85RpW5| zvDM_nS~wM|F}+$KWpCXuUF!MuOMlCSo)U@v4Nn5(T%)rVEW2ZIIL~E>aWX$b&z^Bx zXV$Z2F~GEd29~Dzz}V|K39gq5Ys`E-_CK6f@^;Dzy;;BYnfs@!r;=y|z?~etpU4<9wWzUIWXn z{sYUzZLq2@8CbR>9oW5w)c%k26voc0>oNJ#Ip^)qLaX|h6IwT|jN3SJ(M%jw(B>at zw)G#F2Do{~!Yg&gYJ6(Z^?I4#t6<2$UR?jh-_#pU?75iGIJj#8g21%^Ot5Yc*I2`{ zNWud6b$3JR;RGV7N(z|i%UO&bXi5z60D@)Pe%j@%>9`(>vdC4eS;nwoA zZf%mQQDvZV4VhB^n9?Nz`ovOrTwnDm>x3pQNF08eNs7>J~lNOo~a7)j<^ z@aQKNn#K1Dg~F+Mfn-ibw82gUn)9N+yngks4~dCI*3V9&LsF?!fI_&ojP1NODzWX>iVTW{qBQL&bu+Mu0Q>gjxQIZCZt%k6p3QupIM$$RE~`?_aJLBg}-hKh?u zL~n#4l7iT=8)g& zt@Zf!o}*xriqa0OIl(;5SBsg1*qTHjC}C1RgWlw2N}0@SH?Mcs56*Mc^@ExHX3;9^ z`u8#m$vBBuZ$2X_iW;-Yw;T8w!T;V-#cwcI1&ZdWpO z@oq|E)7GI)QW zuU}sO`(M#iEJKA>Iz?_l2=mlw5`sjv@-y?)7w?>QsCh#aHr!0(2?XA%FHP)`)mmw# z!x?w|)L(Gxs1KzUdLX5AZj7vdR<3ql6e&;TEzx(Ygo|Xn+0Ux;immrzq?^>n^*>K7 z>h&Z_Cc-hJS|B6*fZcUo6$QOQ=>&yHd0q=q4oymr3o=2cqbm244r`g_Pp0 zQ_izaJl-1?V(KdHO4(%8<#Jig6DfHl{4I?cN>`E{C;a~HuB*(uvni%TM9RFNMbu>x zF)rTff)~g7Q0zUhaFNY-_Ep|!mbFw8K?YqL|p8nJIr{$r1NjSEsl%F^<#psycvP_hqTjl4U9j96S zX_^ZJ_NP!Hk64{VDX$)WuQ)Ut<2~c{djCVrXfxCpbUADLx|k<(^XDM-U zh?#kkt#+(rKWVEUL-B28*A1+-7S?_-Y**yN5;Jal6AO#D2;*edK2%3p2<3>&!xWjRl<*>Y_7T`UkTg#rS^nb((=K z@izPwj1VdvVxBNa5}%e1xx49RTjMkpICgiVQeM!y3aZvNSMT6|mjm)6%bCV{E8pmp zRisWp#VM&d&zRJr*M|Dn-||=9eeyE&k*rN$-n<{0({;F0D8Ce+k=A)k@OQG6?wH}@ zcf>0Z&U@^6?i|iVTu5-|91pG|CS7+``9&FXGV@Oad?!Luu+h&mU8u$@>)ZveYtiVd zXh98K{T@xQ&v*>-{hHj-RaIwZpb91n^khj%B{9UZN~d;X7I><*^MmyH`axyFMMx^q zp03~g+jv-Q5_c>F)f-Z#qBhjGvXdLu&M|3j52fW0+fx}^Yafo7h-4hrIKygU#9j9S zJ*~KySd(L@W3|0?;EeMx7X$ruS*V@$dl+Ybt9&=DLjjSpcQEIsStd}@thE#tsKtdr zr6~JF`}W7}lTye(``JlM&W*dO#U8P|HE zSU_1*YGca+cFnfhuSMCQG&PNJHP%kJ8ta%uC2MzT;0{#Z1eVhG^AXSdh{lzyA9M>+ z+NmHa4~a-evk}|t->ZB;P3?bw76T(oI(wWkSUK{+vUkUP`{C>BXa0d662VOTC0mCW zjj`2C=pjgZQl*pigO#%%jPvA1VLP`2R200D9ayEfPdBVQEU;|1Y|%owwP-0|>)~H! zV5O#lWxFZkB=y8$fmJ>dn7Dp!#M2zLm}!u(b$~u^K^tqGq%@wSSG^y{R($|0f53%kd6UAAzrtyU5&(2HN1uOTljz8JS z!M=|d=uRXytwHh!xr=H)7+dIFZa@iCu!zkG9kOggOCAzS2jUDALn+KKk7~zay$#Ep z_W8YhI(cB&dy$xK1BHGHO_7djc9*`bH;4zO=rF$(@Y#>^*3rN~c_)DyuzV6=#+AQdt0zgCk!_u#o(G{9{bx8+ z(_}FaS?8+TCFVq+tHzZp-?$H-u3x?qXnC1w)_pLPkD7gakU7)zJ1JP@@p%wt4@@20 zMxssz=@C;UHi7kJ*08MZBh@2aC(OPKLf|&udMYb9?c;+;{N(N?Ia}ERF=0U3(D3yTX{m>mA&L_8(_B(Y;L^X~cyNDh`%!m72qy-dAU>zEey$C{xXL<(decR2eu;O#0=Dt(UOiwV)8FFIuaeekr-+lU5 z1%4)E^z`=nWB*jfQ+a6Qe`WU>d&Mn-PfU-8R3gBtSZ#!C9wgY^AD9ri@cCKGyv9HCJ=OWH_8*--G2#M#~qJ2FA;I{YU?7UPMhkAZ$??>0ss2MCd#(nct9(WcFNB~+wmt@{cAH>c#feG4ZY}o?4ldV*0llz`EdfU|VC;k) zvpXT~SIEbLSb$y*^ zfIQgcNCrl%7Hk*i4_P#o6j?$DCdqeQjEJ#z4J%=S5fd?POZs2s*x1PFi@u2W&#Tw# z3c=ENlU>5rigAj1_|n#Ih2pbXYa%LH6ErZv;#DD46C!ybP$<5W?Lns{pQfhk#FHf* zwzzT9Is^S+N4Mg;LTX^O8yi@*^%pJ|@GaRku@6xzb2K_7Bs%7Bc zagV13QU5Gkv$jtb)%GRt1@m!Z_dxB=;l{s|oC_?i9s3bjt^G*kDBKC?*XHy!TsL>| zgS3~tPN*id5>zf9dL1`jz>H82%;i}S4yG<*op@mCfmRMTK$>fPoOPzg5veO$2bR6| z29`bnFd0J+?s(^L1LW$-iDgNx=Q-ojy8)&(VeOd3T{{-!e@uMS@+HDhA%Ye9LApw)%(G~@DJq&LqzbCDfH3}llgr87Lj%9?T6 zS{;l=UKmu3vhs=<$2+*jW(T;vPqiKirK@&FUrSmTzEz7>8di%L?QF;D7MnHkbd=tK z<4779GrVBT>x5M=Ip0d^+0XcKbP|z|iSKiags+LY=j!8XePj|cD0ipIA(RbiWy1wx z(I{b4HirK1Dzt$-*||GD=1?|fT=rBQSi0T7h={}>J@!1u%s&G&nR{UAIs;?e)s6+4 zlDKH;;Xj;jQ*MC0x}-CCfGIczmX70r(Q^{5?qXq(&KrbD`raR%v;PPBDa+XbNhTep z5+BnY_GIqIw_0%G%y&$LVcF{pB^=CN=~d*LEaKvAtD^p zLM|hg1LHr*-@|6^uwDNX11JjyEc?;;LH0os>!7P9QM|FB8m7^CT18qUXFvA=vi_IFfa#C1p69?a);qA*;glL!_VESte&s&LP5&EU zrX>z6OW_8Vbyr}@Kx%=?=+_%D(P<T%HVsERO?23dfDu^grBam_Ym>(=tVbl9T60jy#w9?-qE(;v`zbg?w zmc^gvIicP>&v}ulVOitu_moTJxii?#*7nRl1GQ;LbXiRh-1PYk(aU(3h0x>D`k8TQ z{fOW_zhn{!;3WL5i(%zwq3~G#3La}*KDA&R4Jj8m)z=$l?Eis&1GAB;kI_dQ30MZ5 zW?UMiU>xE>M__ArX!Fm&Oph5@HUkBla^&1GBcv9HrS!NoLi`^7bGnOTnGA4m(tThC zsn;Ylq(r}0Ny6<;-(rLWZGkFyXjmfg9{>^}_T9`|!2>pV;UIbZHYN zt}ZNMmY-e93HY_M>@4va&*7KlsL0*zdR({uh0*Lbzr z<_853>SOG?cEZF8Vx5GCRYuJ3u~lN6lcUcs`k$Hw~<3h`sELncv6$_%` zsCwZ6{83cBL#y8OzYWN&SoN<}Ly}_cRB-qxGuqK|c zbu30+&Khp<@px_4V;WdAw&t2ADA#nC4YqZ99r=Ifa0BEMj2{GxxWG0p;sP6NXDSaY z(A=X3gK;vSPukV!e;Y7bxDLz?SE3nM7@vmFEaKXMO{UzXACoVq%28IvuugQ3NY~c$F#>H`nlD2Q{|ABsqHId^vwMnYHf(R){c_Y|=dTXxZ6z{mj1(Q{L z#A%bqb(rG2{Bm ziG^iq9M*at_t5`LLRG9)yJRavGHy~=a*}CvS+MXK&qjo0)^QiWbQ;gV49je=htv3R zWoKOK24F;fVL@1?HYY5z#(!rLec19w$W3n)(sF8&648E-^CYjQ=vK3ZdJs#OK zLb#i$qbs&JY1L>2Ov-U|8JFD*`Jox3KmMIH&@cm;V(VfC7O4~4IPz)PopBVvl~)Wb z-btNrM<-wWe|)}lgWysF3ln_Ck^8YgFsj|U7_jh&Z{MChX`B9s9nlomvm4mSPrI?@ zfu*rBFgZ{$@pM#Mk7UM4Q^|4sf1zX=NIO`G3v6p%4?nxUFfi};1?OPF@ zIi{2TH^6if49sfs2QjHcwW}TSz_(a`?HK)@7CrhO<3P4`?sy7=*Sl@pRLsX>@VM}R z%(y5_nmGi|P7~keeR2KXf3NP`sphZps3jiB%djH->VzTlTam>2J^2asdlJPr^j!b! z&%gU+A5BGU4RKNG=jFKNiM+Ue?dR14OcY^d&Q?gn%|j4bSaawHKi5zEhxrM0IrY2e~;B{<=7VRdt#~*xZ{T>4$`Ng-sp& z2u$Ku92(*X#ya0dc9%s@O?K{^XgcXVca}0~sWtH|J13U(Sy-5KtQ;pvr6y)h3y61KrOn_`k_td;0zl-FYD3L)2~4EJVcE-VF7!{f$;cCiyPtn#|W;%>!K zxIk0n*vb-+zp)eny6{(+ST$y%aO!sRvI-Kfxof`UTMLD2V0d+4@bya%B;}b*rAJ;W zuRa#RO?6z-!c@BFkth-=Imza|-6s3Lo0L{aVMv1GT5BwD_9wy3O9n|F`aJBay z4&lf1=9rX#<6=+LAg-E3Z_hds?O+Ro%A?McY;$lq6lUJOz7z{2@ayatibefu=+;ou zke0N8oOrtTC(ZB!-;aGaDSbTlV_;#r?dOr`IJ+iB&cxbNB^K0I6|bn?_?PWt2bB{G zVb!VyVQY6H7d0{WLLQTr@@G%ZCQwBwxfF9^I!;YYt0>ISacUAePJK(qsm*ai+~<9m zlu$THcexlUN&TRVp87$>j(JSd@k<(WN(ZK=fdg5dXvKO;XB`c{CXqjxi`IwsvAg|h z+gmASB+2UtDOe01oT#1z_?j4tODw=ap?`vVwYjMpzhnAtQjQOKtu>fCD^IHAHamFD z*xklO2yuf&@3Dc=L?0918PfH;{?of(t*)kY2B7dPnHL!b4*`p2^|XHGLF#_$$ zYaIP7VQ*i0&Z&UW3t<++IaCvmn;^cWdZu2&Cm0WO`aPlNJH!3lu7gbORay^V*z5IY z|BDtQ(bZ#qg;|?h;^q(kwsBchG2hCK4fYPUl^UMSg3Wumq4N5Z|MlHxzZfsg&JRIr z5(xLEzKH+szrOpv-zeofX;ce@w1{*Zkdbix_Wx#|CCB`cTAr9@I^_{h_oO-zVk~bW zn>TeNa_F9vcKzCavrh>UF`;%CX_)e(VAI!kv+79rfS56Xa@Dv+gg&QsH8R@fTUR1i zjRFhNd||f>alXdNdFneYq|Kw@vCp++K{B6Na{HtOroKJ0{n!4tr|F zlJO2Qs7BF7O++fjYVPM!#Qa3F#!lpAW z`X+AQs`NWg3?@kT=8|_&noruFlaE!qn*{S@AJVMCC2kS}bJ6OKA7!(5PyuY131~AHNEN0pP#pW1+uNV|HFnW_)AaRm1dVE!BBY>5A2uyq`=U@%rj`&~# z99=ZU94I$0Xkp4*)`Ff{pc?z2R&qYlnT?YHwccY)KwPH$f)lGrk3TCU-d~?@>A|^Z zG?;Ed<2ZC;bM%Q1Kk@qdgWn(vONl3?q7l-}#wk&=$=yp7iSH~L;}F?IatcM9&fBVf zJ%*%o$2E48mK>WJLLh@{4p zT>?!S0$l&i|Af})_hfbsz?G&qSmux!2h(|8)Q^a+&bU%@r{%#7{U?4280FU{o(JcW z&RL!*nl`IOKBHlzLrJ|TJeK(DAPV%Tlu@S9+>RO?#ODZ{> zs^y0R69x$4nS}MERtf8MpQl+;LNS_YOq(_kX zh}HBCg4MawelqFI?~$R~^*RxSY>rGaHBfNACdSM{EC^%a?JL^AypvS0wbjxP#l*l; z9uemfKk{Scn{kOJ`jIXxxzy^W^V{+I73}Tx^1p%}U%}@%PVS4nBU+3VsTqH4^quyXcVawI?PxN2?rvXkX&#FdWR5eMWgte1OzQ4nB;I+$^lwL;XkQ<&DYSBT6#AJp%TDH7b#Hl`BKk#JqMr{r zw;SR7e--fM;q#-hYR}!K&1PJMSi!QGVjNZRpwV+Z+VrAL(}XBJI_E$5Gu1w|WE!pF zm0X|{w8Vm_TB#W-ia&hz>HJuf`qlLt|93c38U}b)`6L)W6@>=N;s(3qRLCu9~2#d zvBx2~UP->faq$=ghpM^Khz5(g?`<4HT37F`-|K@;D8gyWhz3*65+5V1RC#%LvnXNm zb<2nbTVGHb<_#!5n3Jfr4l%@KT*)=#My}n_Ym!tavXbs$us4?sm;=Te)3dbogYn#+B=x zep0S?uxKALbG&vha@ArvX#pFkZ)WURA_CX@&;Fu0!xY`B)ywtHXIRDsSQ!^!Wn6$o zuM(@b&YR!he1>CGo=I@fJNbuk55b~?#*E`!NlK*)q;_W9>aX0+kVsDU&pNB@AF#^) z0V+Em{`S72J0)u@lG4Grx9ZO0Z2Vq|2XioSb6nM&Gbu@eqzT>TdULqZjV2DY&>U`W zOfrl%WZJAHgY95hwZ+sDlnRXvY^%0DJRsD<@snn77OW}=yt;9`&UBaN09E4vrc5(7 zLfOlpl(Y1(W$u`pI=x(;_9&kkSlt|P3aa%wF<7OVfN5BM8@H>4fEBe8lAPIR zDK)_2`Ppq8*_4YBFIwqCFp+CMZHXSv$hRwM)%eAx&b+E1oVSI+}~2fgI@n zHuDdvDX)2*WOx zvtbP!wvC+hzsW4Ct4O+MfaZ|q*SHr@jW3?2?)8$H5j{_wy z{xnw4GgM_)vYLxMWi>*+$Jx(RtNllbM_vAk<0z@f61aIktyrS=#D{pim3vRyuEiU% zQSIb@)J|llB+m6MO1+-$)B;3J#dY*DvK5OqF5Zfn-{aB>4QQS@`OyAHZ`dUlV5zwiSMJ>jfh;?jNqBn$TVR!d z1h%I+?p6z6l`G?>+}XK6GPBT1_SD40Ph8pY9)>P=8JA)i{9whOg_WyZ84P>L1#(g( zR>i5(gqlJo!JPP*FEew!_%|y-X&SPm2?ds|`zBg^dJX%=1Hi=i?(;sZ7QhPZg9-P? z0%a5wsz*ak0%pahQ;7zdUG-keEF|G_5*Y=_7mTZ`I5mIC7uX__31iWdP>}R72?gr| z0>YA9Po3t>#pZyx&trmB#+G~u&OrFmBZF{jm&Y!HM9Lbt- zC9ta5ej^iyMvy;9JSMuv`IBd?1!37UIf!0t>X5B213^lo3-^n@S{Db-tLo&f)=Y1P6L|2s5$3 zPnq_dj&=n`ex84i)&zLG`E+*@ zfytvf4>XR2m^Wfvz3Bs(M_7|%f|U}yd2mx}0*p7HO-yx9tqF|NZ&@Ic<}6!}b71Li z8Q5N-`OumGt3(rQN;Gql@tG7XD>&!dtl$*7Q@*kip)9Eh{N<`qe@Mz1_cCM&*z^aC z#Z3KjE?TW}xZ~zq)UawzfJ#MHf*V+RGX@r2*>P@jgl}+*J%(vFu%k!iU27VkKw#`- zIvcEfL4QAr|H^y@CPEkAie`neGUJpytmE{!<>07E6auc?%*UdmHSuJztUsvfTzWoz zt8ro;v9xiU+obkGY#T@#=T0U8F(=U&G!eZ2!rxjnGVq#9Vt z2(a;A#_sgOIP8PXWHas!93JD$KdaF^A+f+n4ZF}d-lp0ek84d#z9jl5aWZIuL;jM9 zj`BJcEtm?rM)e<|C zrz=A4tH^Z~O6H`+WpU!bsF{HoITiP-xa)s2@MO*2sg;phgf!0w=Au=*)KwI?3YDCB zm0|b`^gE{HdSI??tXif(m}kCqBl6~m_S98m^oDgd-+E&?QA0=+`f>T!3Fn#s|gS5INOmCcEJ$dcGGSPp= zWo!qG?$;PYVd>K<}=b^XZ? zKmOn&rcH_po^m`ekj5ENLj@d~q+%RcrU@w_8X%!Wz92ko$rzc)(NjQxA zyQo1@i855_2d8c&e{jM-1gj>zTWgx0*(x zEO$Yz{C2823&tN(Fjm+GJJg^TGJ?`(0?QzQ9g}i}R(f7dELpWMqdsmSU~14-FC7G#4m1@u0U|4Vtv0`auL&JE6!g z6pVmncSP3Wz$nEzF@k$ceDn8y=&4VNd=e7#Ez%bGsHdPIevrGMG}uW9s^2U1ck_8u zzc&5jkkJz-&#N;DL5UekaZX8jD7|`i{l_`!LOG0syKRf$QkEV%KY7Of{S%^{~t zX-*=kD~OAt>`BWUN9|d5Vk6Xoba8-{m;~D^Aa{{CeKJxNni7nZBw)q0CNVv)Cs>xj z&+~wikC%epLcIVqxv%wBE`ympy%7DDbQ}&hgFmYwLAFgi~pdi(${Ch&4{AFGM2X5j1<8(}YA4)jTGVJz!#bPfaXix?tyE z?maRjvx?g)&Tir^{c$!GH8Djak4}GxlpDq|x?+wCw^QA1VmIR?(09E}RLsU#2I`1A=(9Skg+ikbw4Bx}_tFm*8FvUYpEQNLmmruUvnSpMztL1dH=EMIT2JH%QO>+YWP z!I0WS`QZORzYs>Dbuy-NcV3;Zoyd+TER1J2zeR5c`nM{8sp!;*Ee1}pOj7IA%H-}Q zn3xk!txRr2bRj*E9N8E8X-e90%C zL=7kC6PttRGxc+cK`U=j)S3@0^Qi~c41}&+)X!N|l2RAa^hl9)&z~+ya8oLFCXhLI zQREU%mRG{*L;lV@rl}MwELhE*SP%VA1Nf3o#85F1rg7bErg7;3N;RUC4PGSLtwc@# zV+PmVW=51%!y!_;nUz?kg2ap3Lf5*sGf|?JY$x1dOF1ZsMQa?@X-I* zsCAF0z9zZj)YsI+NG7lG)Yl{yroJXOcbNj4Jg3RTtew!L3JX-9M5~&cy2kTnNo|C+ z2MZhicLhYzO7-Etr2+qmrR^B6?G(=GPCZW|t_wcwDE) z#2nf|)W%5}%yDnNg%NoD==V;WoQwvtZpsXrWM7^4{=N?`S^sYvS|j9=Ib%{ZiBFfB z0!A^8Rx zpPdh~XT1;RdBEI;B7~RM@A-XjRv}knEbBBzEpY?#N2c*X!Jw^RAErk}2GKp861DBb zuBCJ60w&gsDwrHtHXfUCl?De^>5uH*$v!>w+tIcGox%w?F!|!i!of^kfQ<*g|Q{;Wjy_~2fc23C!H$KHHm_ktM$0J4l(6%QZBu%-^($6!V z^pu*I|GPFKqb#ogZ}sY--%zbmxX`bS&iS0SaiqDR!jB^J${3?)Rpx;PZi@e}AAR}b z@B57|O|2Pe)tadhZ?Av<%PvNl6fz80v3dMVnf{T|m4rw*q~lxF2gMUP%x|Q4z8LOV z`Y-)pnW55g@T{Cf&>)dJ4%R$XZHE>NZ5M+NvW}WMT!MLC?x-J>PLn8~TDHU%A7ZMY z97oSDsdfNX4lr0bQot5}#wO0j)0RiaSym**7j@@zr;9Ne0sV27>rNZKZ1)Hz-M7$B zQ%x35zgq4$SCu^}_+0)J(0!>Ajxbr8TU;oV?m}`*!1#8bI zM*T{5^`6z6thOmTzRkWJCG+8gPP^B%?%Rvgc%*rLP){ITh%@_lrXD?&Ykv zYcTvWcjB_8QNxjdH|8WG%nMc-67t}(T>?$*)ob|Ak4M-StTH5go9z<(pni%;$*hA# zA`YjWmYuhaoUVc7mSS}%ARRbCWDV=cXjudeQ&u-mFO%{5T7UQ$w?Xek<9MC@Bd z#I<9U2t{yHuNGLH8shZEFy0Bp8mLI7U{yrIqphYZ#|cj5amuWF(A(~fnZ~D`9vP`>G(qQ^9e)|-}Ww(%ll{*)VCo^}aEaJ`e+y4kgQn?(`H!GI| z(YC%fO$_rEuw&}_v0oPvHk3TJ&2}_rMl!EvBvFuv=~M7Avo?0bj!6dx0n7he_ z^SaIfMhD+u2O}W?vY#mz=Y(1FV|sc0;5-MC<0w~gh34w6IwfKNEDtGIc}VAqdx`Vs z|0t?059pNBrrs^JHhXlN45)U5%4$afNote

    This manual is revised on 2024-4-28, with GitHub commit ec47eeca11.

    NebulaGraph is a distributed, scalable, and lightning-fast graph database. It is the optimal solution in the world capable of hosting graphs with dozens of billions of vertices (nodes) and trillions of edges (relationships) with millisecond latency.

    "},{"location":"#getting_started","title":"Getting started","text":"
    • Quick start
    • Preparations before deployment
    • nGQL cheatsheet
    • FAQ
    • Ecosystem Tools
    • Live Demo
    "},{"location":"#release_notes","title":"Release notes","text":"
    • NebulaGraph Community Edition master
    • NebulaGraph Dashboard Community
    • NebulaGraph Studio
    "},{"location":"#other_sources","title":"Other Sources","text":"
    • To cite NebulaGraph
    • Forum
    • NebulaGraph Homepage
    • Blogs
    • Videos
    • Chinese Docs
    "},{"location":"#symbols_used_in_this_manual","title":"Symbols used in this manual","text":"

    Note

    Additional information or operation-related notes.

    Caution

    May have adverse effects, such as causing performance degradation or triggering known minor problems.

    Warning

    May lead to serious issues, such as data loss or system crash.

    Danger

    May lead to extremely serious issues, such as system damage or information leakage.

    Compatibility

    The compatibility notes between nGQL and openCypher, or between the current version of nGQL and its prior ones.

    Enterpriseonly

    Differences between the NebulaGraph Community and Enterprise editions.

    "},{"location":"#modify_errors","title":"Modify errors","text":"

    This NebulaGraph manual is written in the Markdown language. Users can click the pencil sign on the upper right side of each document title and modify errors.

    "},{"location":"nebula-bench/","title":"NebulaGraph Bench","text":"

    NebulaGraph Bench is a performance test tool for NebulaGraph using the LDBC data set.

    "},{"location":"nebula-bench/#scenario","title":"Scenario","text":"
    • Generate test data and import NebulaGraph.
    • Performance testing in the NebulaGraph cluster.
    "},{"location":"nebula-bench/#release_note","title":"Release note","text":"

    Release

    "},{"location":"nebula-bench/#test_process","title":"Test process","text":"

    For detailed usage instructions, see NebulaGraph Bench.

    "},{"location":"nebula-console/","title":"NebulaGraph Console","text":"

    NebulaGraph Console is a native CLI client for NebulaGraph. It can be used to connect a NebulaGraph cluster and execute queries. It also supports special commands to manage parameters, export query results, import test datasets, etc.

    "},{"location":"nebula-console/#compatibility_with_nebulagraph","title":"Compatibility with NebulaGraph","text":"

    See github.

    "},{"location":"nebula-console/#obtain_nebulagraph_console","title":"Obtain NebulaGraph Console","text":"

    You can obtain NebulaGraph Console in the following ways:

    • Download the binary file from the GitHub releases page.
    • Compile the source code to obtain the binary file. For more information, see Install from source code.
    "},{"location":"nebula-console/#nebulagraph_console_functions","title":"NebulaGraph Console functions","text":""},{"location":"nebula-console/#connect_to_nebulagraph","title":"Connect to NebulaGraph","text":"

    To connect to NebulaGraph with the nebula-console file, use the following syntax:

    <path_of_console> -addr <ip> -port <port> -u <username> -p <password>\n
    • path_of_console indicates the storage path of the NebulaGraph Console binary file.
    • When two-way authentication is required after SSL encryption is enabled, you need to specify SSL-related parameters when connecting.

    For example:

    • Direct link to NebulaGraph

      ./nebula-console -addr 192.168.8.100 -port 9669 -u root -p nebula\n
    • Enable SSL encryption and require two-way authentication

      ./nebula-console -addr 192.168.8.100 -port 9669 -u root  -p nebula -enable_ssl -ssl_root_ca_path /home/xxx/cert/root.crt -ssl_cert_path /home/xxx/cert/client.crt -ssl_private_key_path /home/xxx/cert/client.key\n

    Parameter descriptions are as follows:

    Parameter Description -h/-help Shows the help menu. -addr/-address Sets the IP or hostname of the Graph service. The default address is 127.0.0.1. -P/-port Sets the port number of the graphd service. The default port number is 9669. -u/-user Sets the username of your NebulaGraph account. Before enabling authentication, you can use any existing username. The default username is root. -p/-password Sets the password of your NebulaGraph account. Before enabling authentication, you can use any characters as the password. -t/-timeout Sets an integer-type timeout threshold of the connection. The unit is millisecond. The default value is 120. -e/-eval Sets a string-type nGQL statement. The nGQL statement is executed once the connection succeeds. The connection stops after the result is returned. -f/-file Sets the path of an nGQL file. The nGQL statements in the file are executed once the connection succeeds. The result will be returned and the connection stops then. -enable_ssl Enables SSL encryption when connecting to NebulaGraph. -ssl_root_ca_path Sets the storage path of the certification authority file. -ssl_cert_path Sets the storage path of the certificate file. -ssl_private_key_path Sets the storage path of the private key file. -ssl_insecure_skip_verify Specifies whether the client skips verifying the server's certificate chain and hostname. The default is false. If set to true, any certificate chain and hostname provided by the server is accepted.

    For information on more parameters, see the project repository.

    "},{"location":"nebula-console/#manage_parameters","title":"Manage parameters","text":"

    You can save parameters for parameterized queries.

    Note

    • Setting a parameter as a VID in a query is not supported.
    • Parameters are not supported in SAMPLE clauses.
    • Parameters are deleted when their sessions are released.
    • The command to save a parameter is as follows:

      nebula> :param <param_name> => <param_value>;\n

      The example is as follows:

      nebula> :param p1 => \"Tim Duncan\";\nnebula> MATCH (v:player{name:$p1})-[:follow]->(n)  RETURN v,n;\n+----------------------------------------------------+-------------------------------------------------------+\n| v                                                  | n                                                     |\n+----------------------------------------------------+-------------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) | (\"player125\" :player{age: 41, name: \"Manu Ginobili\"}) |\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) | (\"player101\" :player{age: 36, name: \"Tony Parker\"})   |\n+----------------------------------------------------+-------------------------------------------------------+\nnebula> :param p2 => {\"a\":3,\"b\":false,\"c\":\"Tim Duncan\"};\nnebula> RETURN $p2.b AS b;\n+-------+\n| b     |\n+-------+\n| false |\n+-------+\n
    • The command to view the saved parameters is as follows:

      nebula> :params;\n
    • The command to view the specified parameters is as follows:

      nebula> :params <param_name>;\n
    • The command to delete a specified parameter is as follows:

      nebula> :param <param_name> =>;\n
    "},{"location":"nebula-console/#export_query_results","title":"Export query results","text":"

    Export query results, which can be saved as a CSV file, DOT file, and a format of Profile or Explain.

    Note

    • The exported file is stored in the working directory, i.e., what the linux command pwd shows.
    • This command only works for the next query statement.
    • You can copy the contents of the DOT file and paste them in GraphvizOnline to generate a visualized execution plan.
    • The command to export a csv file is as follows:

      nebula> :CSV <file_name.csv>;\n
    • The command to export a DOT file is as follows:

      nebula> :dot <file_name.dot>\n

      The example is as follows:

      nebula> :dot a.dot\nnebula> PROFILE FORMAT=\"dot\" GO FROM \"player100\" OVER follow;\n
    • The command to export a PROFILE or EXPLAIN format is as follows:

      nebula> :profile <file_name>;\n
      or

      nebula> :explain <file_name>;\n

      Note

      The text file output by the above command is the preferred way to report issues in GitHub and execution plans in forums, and for graph query tuning because it has more information and is more readable than a screenshot or CSV file in Studio.

      The example is as follows:

      nebula> :profile profile.log\nnebula> PROFILE GO FROM \"player102\" OVER serve YIELD dst(edge);\nnebula> :profile profile.dot\nnebula> PROFILE FORMAT=\"dot\" GO FROM \"player102\" OVER serve YIELD dst(edge);\nnebula> :explain explain.log\nnebula> EXPLAIN GO FROM \"player102\" OVER serve YIELD dst(edge);\n
    "},{"location":"nebula-console/#import_a_testing_dataset","title":"Import a testing dataset","text":"

    The testing dataset is named basketballplayer. To view details about the schema and data, use the corresponding SHOW command.

    The command to import a testing dataset is as follows:

    nebula> :play basketballplayer\n
    "},{"location":"nebula-console/#run_a_command_multiple_times","title":"Run a command multiple times","text":"

    To run a command multiple times, use the following command:

    nebula> :repeat N\n

    The example is as follows:

    nebula> :repeat 3\nnebula> GO FROM \"player100\" OVER follow YIELD dst(edge);\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player101\" |\n| \"player125\" |\n+-------------+\nGot 2 rows (time spent 2602/3214 us)\n\nFri, 20 Aug 2021 06:36:05 UTC\n\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player101\" |\n| \"player125\" |\n+-------------+\nGot 2 rows (time spent 583/849 us)\n\nFri, 20 Aug 2021 06:36:05 UTC\n\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player101\" |\n| \"player125\" |\n+-------------+\nGot 2 rows (time spent 496/671 us)\n\nFri, 20 Aug 2021 06:36:05 UTC\n\nExecuted 3 times, (total time spent 3681/4734 us), (average time spent 1227/1578 us)\n
    "},{"location":"nebula-console/#sleep","title":"Sleep","text":"

    This command will make NebulaGraph Console sleep for N seconds. The schema is altered in an async way and takes effect in the next heartbeat cycle. Therefore, this command is usually used when altering schema. The command is as follows:

    nebula> :sleep N\n
    "},{"location":"nebula-console/#disconnect_nebulagraph_console_from_nebulagraph","title":"Disconnect NebulaGraph Console from NebulaGraph","text":"

    You can use :EXIT or :QUIT to disconnect from NebulaGraph. For convenience, NebulaGraph Console supports using these commands in lower case without the colon (\":\"), such as quit.

    The example is as follows:

    nebula> :QUIT\n\nBye root!\n
    "},{"location":"1.introduction/1.what-is-nebula-graph/","title":"What is NebulaGraph","text":"

    NebulaGraph is an open-source, distributed, easily scalable, and native graph database. It is capable of hosting graphs with hundreds of billions of vertices and trillions of edges, and serving queries with millisecond-latency.

    "},{"location":"1.introduction/1.what-is-nebula-graph/#what_is_a_graph_database","title":"What is a graph database","text":"

    A graph database, such as NebulaGraph, is a database that specializes in storing vast graph networks and retrieving information from them. It efficiently stores data as vertices (nodes) and edges (relationships) in labeled property graphs. Properties can be attached to both vertices and edges. Each vertex can have one or multiple tags (labels).

    Graph databases are well suited for storing most kinds of data models abstracted from reality. Things are connected in almost all fields in the world. Modeling systems like relational databases extract the relationships between entities and squeeze them into table columns alone, with their types and properties stored in other columns or even other tables. This makes data management time-consuming and cost-ineffective.

    NebulaGraph, as a typical native graph database, allows you to store the rich relationships as edges with edge types and properties directly attached to them.

    "},{"location":"1.introduction/1.what-is-nebula-graph/#advantages_of_nebulagraph","title":"Advantages of NebulaGraph","text":""},{"location":"1.introduction/1.what-is-nebula-graph/#open_source","title":"Open source","text":"

    NebulaGraph is open under the Apache 2.0 License. More and more people such as database developers, data scientists, security experts, and algorithm engineers are participating in the designing and development of NebulaGraph. To join the opening of source code and ideas, surf the NebulaGraph GitHub page.

    "},{"location":"1.introduction/1.what-is-nebula-graph/#outstanding_performance","title":"Outstanding performance","text":"

    Written in C++ and born for graphs, NebulaGraph handles graph queries in milliseconds. Among most databases, NebulaGraph shows superior performance in providing graph data services. The larger the data size, the greater the superiority of NebulaGraph.For more information, see NebulaGraph benchmarking.

    "},{"location":"1.introduction/1.what-is-nebula-graph/#high_scalability","title":"High scalability","text":"

    NebulaGraph is designed in a shared-nothing architecture and supports scaling in and out without interrupting the database service.

    "},{"location":"1.introduction/1.what-is-nebula-graph/#developer_friendly","title":"Developer friendly","text":"

    NebulaGraph supports clients in popular programming languages like Java, Python, C++, and Go, and more are under development. For more information, see NebulaGraph clients.

    "},{"location":"1.introduction/1.what-is-nebula-graph/#reliable_access_control","title":"Reliable access control","text":"

    NebulaGraph supports strict role-based access control and external authentication servers such as LDAP (Lightweight Directory Access Protocol) servers to enhance data security. For more information, see Authentication and authorization.

    "},{"location":"1.introduction/1.what-is-nebula-graph/#diversified_ecosystem","title":"Diversified ecosystem","text":"

    More and more native tools of NebulaGraph have been released, such as NebulaGraph Studio, NebulaGraph Console, and NebulaGraph Exchange. For more ecosystem tools, see Ecosystem tools overview.

    Besides, NebulaGraph has the ability to be integrated with many cutting-edge technologies, such as Spark, Flink, and HBase, for the purpose of mutual strengthening in a world of increasing challenges and chances.

    "},{"location":"1.introduction/1.what-is-nebula-graph/#opencypher-compatible_query_language","title":"OpenCypher-compatible query language","text":"

    The native NebulaGraph Query Language, also known as nGQL, is a declarative, openCypher-compatible textual query language. It is easy to understand and easy to use. For more information, see nGQL guide.

    "},{"location":"1.introduction/1.what-is-nebula-graph/#future-oriented_hardware_with_balanced_reading_and_writing","title":"Future-oriented hardware with balanced reading and writing","text":"

    Solid-state drives have extremely high performance and they are getting cheaper. NebulaGraph is a product based on SSD. Compared with products based on HDD and large memory, it is more suitable for future hardware trends and easier to achieve balanced reading and writing.

    "},{"location":"1.introduction/1.what-is-nebula-graph/#easy_data_modeling_and_high_flexibility","title":"Easy data modeling and high flexibility","text":"

    You can easily model the connected data into NebulaGraph for your business without forcing them into a structure such as a relational table, and properties can be added, updated, and deleted freely. For more information, see Data modeling.

    "},{"location":"1.introduction/1.what-is-nebula-graph/#high_popularity","title":"High popularity","text":"

    NebulaGraph is being used by tech leaders such as Tencent, Vivo, Meituan, and JD Digits. For more information, visit the NebulaGraph official website.

    "},{"location":"1.introduction/1.what-is-nebula-graph/#use_cases","title":"Use cases","text":"

    NebulaGraph can be used to support various graph-based scenarios. To spare the time spent on pushing the kinds of data mentioned in this section into relational databases and on bothering with join queries, use NebulaGraph.

    "},{"location":"1.introduction/1.what-is-nebula-graph/#fraud_detection","title":"Fraud detection","text":"

    Financial institutions have to traverse countless transactions to piece together potential crimes and understand how combinations of transactions and devices might be related to a single fraud scheme. This kind of scenario can be modeled in graphs, and with the help of NebulaGraph, fraud rings and other sophisticated scams can be easily detected.

    "},{"location":"1.introduction/1.what-is-nebula-graph/#real-time_recommendation","title":"Real-time recommendation","text":"

    NebulaGraph offers the ability to instantly process the real-time information produced by a visitor and make accurate recommendations on articles, videos, products, and services.

    "},{"location":"1.introduction/1.what-is-nebula-graph/#intelligent_question-answer_system","title":"Intelligent question-answer system","text":"

    Natural languages can be transformed into knowledge graphs and stored in NebulaGraph. A question organized in a natural language can be resolved by a semantic parser in an intelligent question-answer system and re-organized. Then, possible answers to the question can be retrieved from the knowledge graph and provided to the one who asked the question.

    "},{"location":"1.introduction/1.what-is-nebula-graph/#social_networking","title":"Social networking","text":"

    Information on people and their relationships is typical graph data. NebulaGraph can easily handle the social networking information of billions of people and trillions of relationships, and provide lightning-fast queries for friend recommendations and job promotions in the case of massive concurrency.

    "},{"location":"1.introduction/1.what-is-nebula-graph/#related_links","title":"Related links","text":"
    • Official website
    • Docs
    • Blogs
    • Forum
    • GitHub
    "},{"location":"1.introduction/2.1.path/","title":"Path types","text":"

    In graph theory, a path in a graph is a finite or infinite sequence of edges which joins a sequence of vertices. Paths are fundamental concepts of graph theory.

    Paths can be categorized into 3 types: walk, trail, and path. For more information, see Wikipedia.

    The following figure is an example for a brief introduction.

    "},{"location":"1.introduction/2.1.path/#walk","title":"Walk","text":"

    A walk is a finite or infinite sequence of edges. Both vertices and edges can be repeatedly visited in graph traversal.

    In the above figure C, D, and E form a cycle. So, this figure contains infinite paths, such as A->B->C->D->E, A->B->C->D->E->C, and A->B->C->D->E->C->D.

    Note

    GO statements use walk.

    "},{"location":"1.introduction/2.1.path/#trail","title":"Trail","text":"

    A trail is a finite sequence of edges. Only vertices can be repeatedly visited in graph traversal. The Seven Bridges of K\u00f6nigsberg is a typical trail.

    In the above figure, edges cannot be repeatedly visited. So, this figure contains finite paths. The longest path in this figure consists of 5 edges: A->B->C->D->E->C.

    Note

    MATCH, FIND PATH, and GET SUBGRAPH statements use trail.

    There are two special cases of trail, cycle and circuit. The following figure is an example for a brief introduction.

    • cycle

      A cycle refers to a closed trail. Only the terminal vertices can be repeatedly visited. The longest path in this figure consists of 3 edges: A->B->C->A or C->D->E->C.

    • circuit

      A circuit refers to a closed trail. Edges cannot be repeatedly visited in graph traversal. Apart from the terminal vertices, other vertices can also be repeatedly visited. The longest path in this figure: A->B->C->D->E->C->A.

    "},{"location":"1.introduction/2.1.path/#path","title":"Path","text":"

    A path is a finite sequence of edges. Neither vertices nor edges can be repeatedly visited in graph traversal.

    So, the above figure contains finite paths. The longest path in this figure consists of 4 edges: A->B->C->D->E.

    "},{"location":"1.introduction/2.data-model/","title":"Data modeling","text":"

    A data model is a model that organizes data and specifies how they are related to one another. This topic describes the Nebula\u00a0Graph data model and provides suggestions for data modeling with NebulaGraph.

    "},{"location":"1.introduction/2.data-model/#data_structures","title":"Data structures","text":"

    NebulaGraph data model uses six data structures to store data. They are graph spaces, vertices, edges, tags, edge types and properties.

    • Graph spaces: Graph spaces are used to isolate data from different teams or programs. Data stored in different graph spaces are securely isolated. Storage replications, privileges, and partitions can be assigned.
    • Vertices: Vertices are used to store entities.
    • In NebulaGraph, vertices are identified with vertex identifiers (i.e. VID). The VID must be unique in the same graph space. VID should be int64, or fixed_string(N).

      • A vertex has zero to multiple tags.

      Compatibility

      In NebulaGraph 2.x a vertex must have at least one tag. And in NebulaGraph master, a tag is not required for a vertex.

    • Edges: Edges are used to connect vertices. An edge is a connection or behavior between two vertices.
      • There can be multiple edges between two vertices.
      • Edges are directed. -> identifies the directions of edges. Edges can be traversed in either direction.
      • An edge is identified uniquely with <a source vertex, an edge type, a rank value, and a destination vertex>. Edges have no EID.
      • An edge must have one and only one edge type.
      • The rank value is an immutable user-assigned 64-bit signed integer. It identifies the edges with the same edge type between two vertices. Edges are sorted by their rank values. The edge with the greatest rank value is listed first. The default rank value is zero.
    • Tags: Tags are used to categorize vertices. Vertices that have the same tag share the same definition of properties.
    • Edge types: Edge types are used to categorize edges. Edges that have the same edge type share the same definition of properties.
    • Properties: Properties are key-value pairs. Both vertices and edges are containers for properties.

    Note

    Tags and Edge types are similar to \"vertex tables\" and \"edge tables\" in the relational databases.

    "},{"location":"1.introduction/2.data-model/#directed_property_graph","title":"Directed property graph","text":"

    NebulaGraph stores data in directed property graphs. A directed property graph has a set of vertices connected by directed edges. Both vertices and edges can have properties. A directed property graph is represented as:

    G = < V, E, PV, PE >

    • V is a set of vertices.
    • E is a set of directed edges.
    • PV is the property of vertices.
    • PE is the property of edges.

    The following table is an example of the structure of the basketball player dataset. We have two types of vertices, that is player and team, and two types of edges, that is serve and follow.

    Element Name Property name (Data type) Description Tag player name (string) age (int) Represents players in the team. The properties name and age indicate the name and age. Tag team name (string) Represents the teams. The property name indicates the team name. Edge type serve start_year (int) end_year (int) Represents the action of a player serving a team. The action links the player to the team, and the direction is from the player to the team.The properties start_year and end_year indicate the start year and end year of the service respectively. Edge type follow degree (int) Represents the action of a player following another player on Twitter. The action links one player to the other player, and the direction is from one player to the other player.The property degree indicates the rating on how well the follower liked the followee.

    Note

    NebulaGraph supports only directed edges.

    Compatibility

    NebulaGraph master allows dangling edges. Therefore, when adding or deleting, you need to ensure the corresponding source vertex and destination vertex of an edge exist. For details, see INSERT VERTEX, DELETE VERTEX, INSERT EDGE, and DELETE EDGE.

    The MERGE statement in openCypher is not supported.

    "},{"location":"1.introduction/3.vid/","title":"VID","text":"

    In a graph space, a vertex is uniquely identified by its ID, which is called a VID or a Vertex ID.

    "},{"location":"1.introduction/3.vid/#features","title":"Features","text":"
    • The data types of VIDs are restricted to FIXED_STRING(<N>) or INT64. One graph space can only select one VID type.
    • A VID in a graph space is unique. It functions just as a primary key in a relational database. VIDs in different graph spaces are independent.
    • The VID generation method must be set by users, because NebulaGraph does not provide auto increasing ID, or UUID.
    • Vertices with the same VID will be identified as the same one. For example:

      • A VID is the unique identifier of an entity, like a person's ID card number. A tag means the type of an entity, such as driver, and boss. Different tags define two groups of different properties, such as driving license number, driving age, order amount, order taking alt, and job number, payroll, debt ceiling, business phone number.
      • When two INSERT statements (neither uses a parameter of IF NOT EXISTS) with the same VID and tag are operated at the same time, the latter INSERT will overwrite the former.
      • When two INSERT statements with the same VID but different tags, like TAG A and TAG B, are operated at the same time, the operation of Tag A will not affect Tag B.
    • VIDs will usually be indexed and stored into memory (in the way of LSM-tree). Thus, direct access to VIDs enjoys peak performance.
    "},{"location":"1.introduction/3.vid/#vid_operation","title":"VID Operation","text":"
    • NebulaGraph 1.x only supports INT64 while NebulaGraph 2.x supports INT64 and FIXED_STRING(<N>). In CREATE SPACE, VID types can be set via vid_type.
    • id() function can be used to specify or locate a VID.
    • LOOKUP or MATCH statements can be used to find a VID via property index.
    • Direct access to vertices statements via VIDs enjoys peak performance, such as DELETE xxx WHERE id(xxx) == \"player100\" or GO FROM \"player100\". Finding VIDs via properties and then operating the graph will cause poor performance, such as LOOKUP | GO FROM $-.ids, which will run both LOOKUP and | one more time.
    "},{"location":"1.introduction/3.vid/#vid_generation","title":"VID Generation","text":"

    VIDs can be generated via applications. Here are some tips:

    • (Optimal) Directly take a unique primary key or property as a VID. Property access depends on the VID.
    • Generate a VID via a unique combination of properties. Property access depends on property index.
    • Generate a VID via algorithms like snowflake. Property access depends on property index.
    • If short primary keys greatly outnumber long primary keys, do not enlarge the N of FIXED_STRING(<N>) too much. Otherwise, it will occupy a lot of memory and hard disks, and slow down performance. Generate VIDs via BASE64, MD5, hash by encoding and splicing.
    • If you generate int64 VID via hash, the probability of collision is about 1/10 when there are 1 billion vertices. The number of edges has no concern with the probability of collision.
    "},{"location":"1.introduction/3.vid/#define_and_modify_a_vid_and_its_data_type","title":"Define and modify a VID and its data type","text":"

    The data type of a VID must be defined when you create the graph space. Once defined, it cannot be modified.

    A VID is set when you insert a vertex and cannot be modified.

    "},{"location":"1.introduction/3.vid/#query_start_vid_and_global_scan","title":"Query start vid and global scan","text":"

    In most cases, the execution plan of query statements in NebulaGraph (MATCH, GO, and LOOKUP) must query the start vid in a certain way.

    There are only two ways to locate start vid:

    1. For example, GO FROM \"player100\" OVER explicitly indicates in the statement that start vid is \"player100\".

    2. For example, LOOKUP ON player WHERE player.name == \"Tony Parker\" or MATCH (v:player {name:\"Tony Parker\"}) locates start vid by the index of the property player.name.

    "},{"location":"1.introduction/3.nebula-graph-architecture/1.architecture-overview/","title":"Architecture overview","text":"

    NebulaGraph consists of three services: the Graph Service, the Storage Service, and the Meta Service. It applies the separation of storage and computing architecture.

    Each service has its executable binaries and processes launched from the binaries. Users can deploy a NebulaGraph cluster on a single machine or multiple machines using these binaries.

    The following figure shows the architecture of a typical NebulaGraph cluster.

    "},{"location":"1.introduction/3.nebula-graph-architecture/1.architecture-overview/#the_meta_service","title":"The Meta Service","text":"

    The Meta Service in the NebulaGraph architecture is run by the nebula-metad processes. It is responsible for metadata management, such as schema operations, cluster administration, and user privilege management.

    For details on the Meta Service, see Meta Service.

    "},{"location":"1.introduction/3.nebula-graph-architecture/1.architecture-overview/#the_graph_service_and_the_storage_service","title":"The Graph Service and the Storage Service","text":"

    NebulaGraph applies the separation of storage and computing architecture. The Graph Service is responsible for querying. The Storage Service is responsible for storage. They are run by different processes, i.e., nebula-graphd and nebula-storaged. The benefits of the separation of storage and computing architecture are as follows:

    • Great scalability

      The separated structure makes both the Graph Service and the Storage Service flexible and easy to scale in or out.

    • High availability

      If part of the Graph Service fails, the data stored by the Storage Service suffers no loss. And if the rest part of the Graph Service is still able to serve the clients, service recovery can be performed quickly, even unfelt by the users.

    • Cost-effective

      The separation of storage and computing architecture provides a higher resource utilization rate, and it enables clients to manage the cost flexibly according to business demands.

    • Open to more possibilities

      With the ability to run separately, the Graph Service may work with multiple types of storage engines, and the Storage Service may also serve more types of computing engines.

    For details on the Graph Service and the Storage Service, see Graph Service and Storage Service.

    "},{"location":"1.introduction/3.nebula-graph-architecture/2.meta-service/","title":"Meta Service","text":"

    This topic introduces the architecture and functions of the Meta Service.

    "},{"location":"1.introduction/3.nebula-graph-architecture/2.meta-service/#the_architecture_of_the_meta_service","title":"The architecture of the Meta Service","text":"

    The architecture of the Meta Service is as follows:

    The Meta Service is run by nebula-metad processes. Users can deploy nebula-metad processes according to the scenario:

    • In a test environment, users can deploy one or three nebula-metad processes on different machines or a single machine.
    • In a production environment, we recommend that users deploy three nebula-metad processes on different machines for high availability.

    All the nebula-metad processes form a Raft-based cluster, with one process as the leader and the others as the followers.

    The leader is elected by the majorities and only the leader can provide service to the clients or other components of NebulaGraph. The followers will be run in a standby way and each has a data replication of the leader. Once the leader fails, one of the followers will be elected as the new leader.

    Note

    The data of the leader and the followers will keep consistent through Raft. Thus the breakdown and election of the leader will not cause data inconsistency. For more information on Raft, see Storage service architecture.

    "},{"location":"1.introduction/3.nebula-graph-architecture/2.meta-service/#functions_of_the_meta_service","title":"Functions of the Meta Service","text":""},{"location":"1.introduction/3.nebula-graph-architecture/2.meta-service/#manages_user_accounts","title":"Manages user accounts","text":"

    The Meta Service stores the information of user accounts and the privileges granted to the accounts. When the clients send queries to the Meta Service through an account, the Meta Service checks the account information and whether the account has the right privileges to execute the queries or not.

    For more information on NebulaGraph access control, see Authentication.

    "},{"location":"1.introduction/3.nebula-graph-architecture/2.meta-service/#manages_partitions","title":"Manages partitions","text":"

    The Meta Service stores and manages the locations of the storage partitions and helps balance the partitions.

    "},{"location":"1.introduction/3.nebula-graph-architecture/2.meta-service/#manages_graph_spaces","title":"Manages graph spaces","text":"

    NebulaGraph supports multiple graph spaces. Data stored in different graph spaces are securely isolated. The Meta Service stores the metadata of all graph spaces and tracks the changes of them, such as adding or dropping a graph space.

    "},{"location":"1.introduction/3.nebula-graph-architecture/2.meta-service/#manages_schema_information","title":"Manages schema information","text":"

    NebulaGraph is a strong-typed graph database. Its schema contains tags (i.e., the vertex types), edge types, tag properties, and edge type properties.

    The Meta Service stores the schema information. Besides, it performs the addition, modification, and deletion of the schema, and logs the versions of them.

    For more information on NebulaGraph schema, see Data model.

    "},{"location":"1.introduction/3.nebula-graph-architecture/2.meta-service/#manages_ttl_information","title":"Manages TTL information","text":"

    The Meta Service stores the definition of TTL (Time to Live) options which are used to control data expiration. The Storage Service takes care of the expiring and evicting processes. For more information, see TTL.

    "},{"location":"1.introduction/3.nebula-graph-architecture/2.meta-service/#manages_jobs","title":"Manages jobs","text":"

    The Job Management module in the Meta Service is responsible for the creation, queuing, querying, and deletion of jobs.

    "},{"location":"1.introduction/3.nebula-graph-architecture/3.graph-service/","title":"Graph Service","text":"

    The Graph Service is used to process the query. It has four submodules: Parser, Validator, Planner, and Executor. This topic will describe the Graph Service accordingly.

    "},{"location":"1.introduction/3.nebula-graph-architecture/3.graph-service/#the_architecture_of_the_graph_service","title":"The architecture of the Graph Service","text":"

    After a query is sent to the Graph Service, it will be processed by the following four submodules:

    1. Parser: Performs lexical analysis and syntax analysis.

    2. Validator: Validates the statements.

    3. Planner: Generates and optimizes the execution plans.

    4. Executor: Executes the plans with operators.

    "},{"location":"1.introduction/3.nebula-graph-architecture/3.graph-service/#parser","title":"Parser","text":"

    After receiving a request, the statements will be parsed by Parser composed of Flex (lexical analysis tool) and Bison (syntax analysis tool), and its corresponding AST will be generated. Statements will be directly intercepted in this stage because of their invalid syntax.

    For example, the structure of the AST of GO FROM \"Tim\" OVER like WHERE properties(edge).likeness > 8.0 YIELD dst(edge) is shown in the following figure.

    "},{"location":"1.introduction/3.nebula-graph-architecture/3.graph-service/#validator","title":"Validator","text":"

    Validator performs a series of validations on the AST. It mainly works on these tasks:

    • Validating metadata

      Validator will validate whether the metadata is correct or not.

      When parsing the OVER, WHERE, and YIELD clauses, Validator looks up the Schema and verifies whether the edge type and tag data exist or not. For an INSERT statement, Validator verifies whether the types of the inserted data are the same as the ones defined in the Schema.

    • Validating contextual reference

      Validator will verify whether the cited variable exists or not, or whether the cited property is variable or not.

      For composite statements, like $var = GO FROM \"Tim\" OVER like YIELD dst(edge) AS ID; GO FROM $var.ID OVER serve YIELD dst(edge), Validator verifies first to see if var is defined, and then to check if the ID property is attached to the var variable.

    • Validating type inference

      Validator infers what type the result of an expression is and verifies the type against the specified clause.

      For example, the WHERE clause requires the result to be a bool value, a NULL value, or empty.

    • Validating the information of *

      Validator needs to verify all the Schema that involves * when verifying the clause if there is a * in the statement.

      Take a statement like GO FROM \"Tim\" OVER * YIELD dst(edge), properties(edge).likeness, dst(edge) as an example. When verifying the OVER clause, Validator needs to verify all the edge types. If the edge type includes like and serve, the statement would be GO FROM \"Tim\" OVER like,serve YIELD dst(edge), properties(edge).likeness, dst(edge).

    • Validating input and output

      Validator will check the consistency of the clauses before and after the |.

      In the statement GO FROM \"Tim\" OVER like YIELD dst(edge) AS ID | GO FROM $-.ID OVER serve YIELD dst(edge), Validator will verify whether $-.ID is defined in the clause before the |.

    When the validation succeeds, an execution plan will be generated. Its data structure will be stored in the src/planner directory.

    "},{"location":"1.introduction/3.nebula-graph-architecture/3.graph-service/#planner","title":"Planner","text":"

    In the nebula-graphd.conf file, when enable_optimizer is set to be false, Planner will not optimize the execution plans generated by Validator. It will be executed by Executor directly.

    In the nebula-graphd.conf file, when enable_optimizer is set to be true, Planner will optimize the execution plans generated by Validator. The structure is as follows.

    • Before optimization

      In the execution plan on the right side of the preceding figure, each node directly depends on other nodes. For example, the root node Project depends on the Filter node, the Filter node depends on the GetNeighbor node, and so on, up to the leaf node Start. Then the execution plan is (not truly) executed.

      During this stage, every node has its input and output variables, which are stored in a hash table. The execution plan is not truly executed, so the value of each key in the associated hash table is empty (except for the Start node, where the input variables hold the starting data), and the hash table is defined in src/context/ExecutionContext.cpp under the nebula-graph repository.

      For example, if the hash table is named as ResultMap when creating the Filter node, users can determine that the node takes data from ResultMap[\"GN1\"], then puts the result into ResultMap[\"Filter2\"], and so on. All these work as the input and output of each node.

    • Process of optimization

      The optimization rules that Planner has implemented so far are considered RBO (Rule-Based Optimization), namely the pre-defined optimization rules. The CBO (Cost-Based Optimization) feature is under development. The optimized code is in the src/optimizer/ directory under the nebula-graph repository.

      RBO is a \u201cbottom-up\u201d exploration process. For each rule, the root node of the execution plan (in this case, the Project node) is the entry point, and step by step along with the node dependencies, it reaches the node at the bottom to see if it matches the rule.

      As shown in the preceding figure, when the Filter node is explored, it is found that its children node is GetNeighbors, which matches successfully with the pre-defined rules, so a transformation is initiated to integrate the Filter node into the GetNeighbors node, the Filter node is removed, and then the process continues to the next rule. Therefore, when the GetNeighbor operator calls interfaces of the Storage layer to get the neighboring edges of a vertex during the execution stage, the Storage layer will directly filter out the unqualified edges internally. Such optimization greatly reduces the amount of data transfer, which is commonly known as filter pushdown.

    "},{"location":"1.introduction/3.nebula-graph-architecture/3.graph-service/#executor","title":"Executor","text":"

    The Executor module consists of Scheduler and Executor. The Scheduler generates the corresponding execution operators against the execution plan, starting from the leaf nodes and ending at the root node. The structure is as follows.

    Each node of the execution plan has one execution operator node, whose input and output have been determined in the execution plan. Each operator only needs to get the values for the input variables, compute them, and finally put the results into the corresponding output variables. Therefore, it is only necessary to execute step by step from Start, and the result of the last operator is returned to the user as the final result.

    "},{"location":"1.introduction/3.nebula-graph-architecture/3.graph-service/#source_code_hierarchy","title":"Source code hierarchy","text":"

    The source code hierarchy under the nebula-graph repository is as follows.

    |--src\n   |--graph\n      |--context    //contexts for validation and execution\n      |--executor   //execution operators\n      |--gc         //garbage collector\n      |--optimizer  //optimization rules\n      |--planner    //structure of the execution plans\n      |--scheduler  //scheduler\n      |--service    //external service management\n      |--session    //session management\n      |--stats      //monitoring metrics\n      |--util       //basic components\n      |--validator  //validation of the statements\n      |--visitor    //visitor expression\n
    "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/","title":"Storage Service","text":"

    The persistent data of NebulaGraph have two parts. One is the Meta Service that stores the meta-related data.

    The other is the Storage Service that stores the data, which is run by the nebula-storaged process. This topic will describe the architecture of the Storage Service.

    "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#advantages","title":"Advantages","text":"
    • High performance (Customized built-in KVStore)
    • Great scalability (Shared-nothing architecture, not rely on NAS/SAN-like devices)
    • Strong consistency (Raft)
    • High availability (Raft)
    • Supports synchronizing with the third party systems, such as Elasticsearch.
    "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#the_architecture_of_the_storage_service","title":"The architecture of the Storage Service","text":"

    The Storage Service is run by the nebula-storaged process. Users can deploy nebula-storaged processes on different occasions. For example, users can deploy 1 nebula-storaged process in a test environment and deploy 3 nebula-storaged processes in a production environment.

    All the nebula-storaged processes consist of a Raft-based cluster. There are three layers in the Storage Service:

    • Storage interface

      The top layer is the storage interface. It defines a set of APIs that are related to the graph concepts. These API requests will be translated into a set of KV operations targeting the corresponding Partition. For example:

      • getNeighbors: queries the in-edge or out-edge of a set of vertices, returns the edges and the corresponding properties, and supports conditional filtering.
      • insert vertex/edge: inserts a vertex or edge and its properties.
      • getProps: gets the properties of a vertex or an edge.

      It is this layer that makes the Storage Service a real graph storage. Otherwise, it is just a KV storage.

    • Consensus

      Below the storage interface is the consensus layer that implements Multi Group Raft, which ensures the strong consistency and high availability of the Storage Service.

    • Store engine

      The bottom layer is the local storage engine library, providing operations like get, put, and scan on local disks. The related interfaces are stored in KVStore.h and KVEngine.h files. You can develop your own local store plugins based on your needs.

    The following will describe some features of the Storage Service based on the above architecture.

    "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#storage_writing_process","title":"Storage writing process","text":""},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#kvstore","title":"KVStore","text":"

    NebulaGraph develops and customizes its built-in KVStore for the following reasons.

    • It is a high-performance KVStore.
    • It is provided as a (kv) library and can be easily developed for the filter pushdown purpose. As a strong-typed database, how to provide Schema during pushdown is the key to efficiency for NebulaGraph.
    • It has strong data consistency.

    Therefore, NebulaGraph develops its own KVStore with RocksDB as the local storage engine. The advantages are as follows.

    • For multiple local hard disks, NebulaGraph can make full use of its concurrent capacities through deploying multiple data directories.
    • The Meta Service manages all the Storage servers. All the partition distribution data and current machine status can be found in the meta service. Accordingly, users can execute a manual load balancing plan in meta service.

      Note

      NebulaGraph does not support auto load balancing because auto data transfer will affect online business.

    • NebulaGraph provides its own WAL mode so one can customize the WAL. Each partition owns its WAL.
    • One NebulaGraph KVStore cluster supports multiple graph spaces, and each graph space has its own partition number and replica copies. Different graph spaces are isolated physically from each other in the same cluster.
    "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#data_storage_structure","title":"Data storage structure","text":"

    Graphs consist of vertices and edges. NebulaGraph uses key-value pairs to store vertices, edges, and their properties. Vertices and edges are stored in keys and their properties are stored in values. Such structure enables efficient property filtering.

    • The storage structure of vertices

      Different from NebulaGraph version 2.x, version 3.x added a new key for each vertex. Compared to the old key that still exists, the new key has no TagID field and no value. Vertices in NebulaGraph can now live without tags owing to the new key.

      Field Description Type One byte, used to indicate the key type. PartID Three bytes, used to indicate the sharding partition and to scan the partition data based on the prefix when re-balancing the partition. VertexID The vertex ID. For an integer VertexID, it occupies eight bytes. However, for a string VertexID, it is changed to fixed_string of a fixed length which needs to be specified by users when they create the space. TagID Four bytes, used to indicate the tags that vertex relate with. SerializedValue The serialized value of the key. It stores the property information of the vertex.
    • The storage structure of edges

      Field Description Type One byte, used to indicate the key type. PartID Three bytes, used to indicate the partition ID. This field can be used to scan the partition data based on the prefix when re-balancing the partition. VertexID Used to indicate vertex ID. The former VID refers to the source VID in the outgoing edge and the dest VID in the incoming edge, while the latter VID refers to the dest VID in the outgoing edge and the source VID in the incoming edge. Edge Type Four bytes, used to indicate the edge type. Greater than zero indicates out-edge, less than zero means in-edge. Rank Eight bytes, used to indicate multiple edges in one edge type. Users can set the field based on needs and store weight, such as transaction time and transaction number. PlaceHolder One byte. Reserved. SerializedValue The serialized value of the key. It stores the property information of the edge.
    "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#property_descriptions","title":"Property descriptions","text":"

    NebulaGraph uses strong-typed Schema.

    NebulaGraph will store the properties of vertex and edges in order after encoding them. Since the length of fixed-length properties is fixed, queries can be made in no time according to offset. Before decoding, NebulaGraph needs to get (and cache) the schema information in the Meta Service. In addition, when encoding properties, NebulaGraph will add the corresponding schema version to support online schema change.

    "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#data_partitioning","title":"Data partitioning","text":"

    Since in an ultra-large-scale relational network, vertices can be as many as tens to hundreds of billions, and edges are even more than trillions. Even if only vertices and edges are stored, the storage capacity of both exceeds that of ordinary servers. Therefore, NebulaGraph uses hash to shard the graph elements and store them in different partitions.

    "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#edge_partitioning_and_storage_amplification","title":"Edge partitioning and storage amplification","text":"

    In NebulaGraph, an edge corresponds to two key-value pairs on the hard disk. When there are lots of edges and each has many properties, storage amplification will be obvious. The storage format of edges is shown in the figure below.

    In this example, SrcVertex connects DstVertex via EdgeA, forming the path of (SrcVertex)-[EdgeA]->(DstVertex). SrcVertex, DstVertex, and EdgeA will all be stored in Partition x and Partition y as four key-value pairs in the storage layer. Details are as follows:

    • The key value of SrcVertex is stored in Partition x. Key fields include Type, PartID(x), VID(Src), and TagID. SerializedValue, namely Value, refers to serialized vertex properties.
    • The first key value of EdgeA, namely EdgeA_Out, is stored in the same partition as the SrcVertex. Key fields include Type, PartID(x), VID(Src), EdgeType(+ means out-edge), Rank(0), VID(Dst), and PlaceHolder. SerializedValue, namely Value, refers to serialized edge properties.
    • The key value of DstVertex is stored in Partition y. Key fields include Type, PartID(y), VID(Dst), and TagID. SerializedValue, namely Value, refers to serialized vertex properties.
    • The second key value of EdgeA, namely EdgeA_In, is stored in the same partition as the DstVertex. Key fields include Type, PartID(y), VID(Dst), EdgeType(- means in-edge), Rank(0), VID(Src), and PlaceHolder. SerializedValue, namely Value, refers to serialized edge properties, which is exactly the same as that in EdgeA_Out.

    EdgeA_Out and EdgeA_In are stored in storage layer with opposite directions, constituting EdgeA logically. EdgeA_Out is used for traversal requests starting from SrcVertex, such as (a)-[]->(); EdgeA_In is used for traversal requests starting from DstVertex, such as ()-[]->(a).

    Like EdgeA_Out and EdgeA_In, NebulaGraph redundantly stores the information of each edge, which doubles the actual capacities needed for edge storage. The key corresponding to the edge occupies a small hard disk space, but the space occupied by Value is proportional to the length and amount of the property value. Therefore, it will occupy a relatively large hard disk space if the property value of the edge is large or there are many edge property values.

    "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#partition_algorithm","title":"Partition algorithm","text":"

    NebulaGraph uses a static Hash strategy to shard data through a modulo operation on vertex ID. All the out-keys, in-keys, and tag data will be placed in the same partition. In this way, query efficiency is increased dramatically.

    Note

    The number of partitions needs to be determined when users are creating a graph space since it cannot be changed afterward. Users are supposed to take into consideration the demands of future business when setting it.

    When inserting into NebulaGraph, vertices and edges are distributed across different partitions. And the partitions are located on different machines. The number of partitions is set in the CREATE SPACE statement and cannot be changed afterward.

    If certain vertices need to be placed on the same partition (i.e., on the same machine), see Formula/code.

    The following code will briefly describe the relationship between VID and partition.

    // If VertexID occupies 8 bytes, it will be stored in int64 to be compatible with the version 1.0.\nuint64_t vid = 0;\nif (id.size() == 8) {\n    memcpy(static_cast<void*>(&vid), id.data(), 8);\n} else {\n    MurmurHash2 hash;\n    vid = hash(id.data());\n}\nPartitionID pId = vid % numParts + 1;\n

    Roughly speaking, after hashing a fixed string to int64, (the hashing of int64 is the number itself), do modulo, and then plus one, namely:

    pId = vid % numParts + 1;\n

    Parameters and descriptions of the preceding formula are as follows:

    Parameter Description % The modulo operation. numParts The number of partitions for the graph space where the VID is located, namely the value of partition_num in the CREATE SPACE statement. pId The ID for the partition where the VID is located.

    Suppose there are 100 partitions, the vertices with VID 1, 101, and 1001 will be stored on the same partition. But, the mapping between the partition ID and the machine address is random. Therefore, we cannot assume that any two partitions are located on the same machine.

    "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#raft","title":"Raft","text":""},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#raft_implementation","title":"Raft implementation","text":"

    In a distributed system, one data usually has multiple replicas so that the system can still run normally even if a few copies fail. It requires certain technical means to ensure consistency between replicas.

    Basic principle: Raft is designed to ensure consistency between replicas. Raft uses election between replicas, and the (candidate) replica that wins more than half of the votes will become the Leader, providing external services on behalf of all replicas. The rest Followers will play backups. When the Leader fails (due to communication failure, operation and maintenance commands, etc.), the rest Followers will conduct a new round of elections and vote for a new Leader. The Leader and Followers will detect each other's survival through heartbeats and write them to the hard disk in Raft-wal mode. Replicas that do not respond to more than multiple heartbeats will be considered faulty.

    Note

    Raft-wal needs to be written into the hard disk periodically. If hard disk bottlenecks to write, Raft will fail to send a heartbeat and conduct a new round of elections. If the hard disk IO is severely blocked, there will be no Leader for a long time.

    Read and write: For every writing request of the clients, the Leader will initiate a Raft-wal and synchronize it with the Followers. Only after over half replicas have received the Raft-wal will it return to the clients successfully. For every reading request of the clients, it will get to the Leader directly, while Followers will not be involved.

    Failure: Scenario 1: Take a (space) cluster of a single replica as an example. If the system has only one replica, the Leader will be itself. If failure happens, the system will be completely unavailable. Scenario 2: Take a (space) cluster of three replicas as an example. If the system has three replicas, one of them will be the Leader and the rest will be the Followers. If the Leader fails, the rest two can still vote for a new Leader (and a Follower), and the system is still available. But if any of the two Followers fails again, the system will be completely unavailable due to inadequate voters.

    Note

    Raft and HDFS have different modes of duplication. Raft is based on a quorum vote, so the number of replicas cannot be even.

    "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#multi_group_raft","title":"Multi Group Raft","text":"

    The Storage Service supports a distributed cluster architecture, so NebulaGraph implements Multi Group Raft according to Raft protocol. Each Raft group stores all the replicas of each partition. One replica is the leader, while others are followers. In this way, NebulaGraph achieves strong consistency and high availability. The functions of Raft are as follows.

    NebulaGraph uses Multi Group Raft to improve performance when there are many partitions because Raft-wal cannot be NULL. When there are too many partitions, costs will increase, such as storing information in Raft group, WAL files, or batch operation in low load.

    There are two key points to implement the Multi Raft Group:

    • To share transport layer

      Each Raft Group sends messages to its corresponding peers. So if the transport layer cannot be shared, the connection costs will be very high.

    • To share thread pool

      Raft Groups share the same thread pool to prevent starting too many threads and a high context switch cost.

    "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#batch","title":"Batch","text":"

    For each partition, it is necessary to do a batch to improve throughput when writing the WAL serially. As NebulaGraph uses WAL to implement some special functions, batches need to be grouped, which is a feature of NebulaGraph.

    For example, lock-free CAS operations will execute after all the previous WALs are committed. So for a batch, if there are several WALs in CAS type, we need to divide this batch into several smaller groups and make sure they are committed serially.

    "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#transfer_leadership","title":"Transfer Leadership","text":"

    Transfer leadership is extremely important for balance. When moving a partition from one machine to another, NebulaGraph first checks if the source is a leader. If so, it should be moved to another peer. After data migration is completed, it is important to balance leader distribution again.

    When a transfer leadership command is committed, the leader will abandon its leadership and the followers will start a leader election.

    "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#peer_changes","title":"Peer changes","text":"

    To avoid split-brain, when members in a Raft Group change, an intermediate state is required. In such a state, the quorum of the old group and new group always have an overlap. Thus it prevents the old or new group from making decisions unilaterally. To make it even simpler, in his doctoral thesis Diego Ongaro suggests adding or removing a peer once to ensure the overlap between the quorum of the new group and the old group. NebulaGraph also uses this approach, except that the way to add or remove a member is different. For details, please refer to addPeer/removePeer in the Raft Part class.

    "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#differences_with_hdfs","title":"Differences with HDFS","text":"

    The Storage Service is a Raft-based distributed architecture, which has certain differences with that of HDFS. For example:

    • The Storage Service ensures consistency through Raft. Usually, the number of its replicas is odd to elect a leader. However, DataNode used by HDFS ensures consistency through NameNode, which has no limit on the number of replicas.
    • In the Storage Service, only the replicas of the leader can read and write, while in HDFS all the replicas can do so.
    • In the Storage Service, the number of replicas needs to be determined when creating a space, since it cannot be changed afterward. But in HDFS, the number of replicas can be changed freely.
    • The Storage Service can access the file system directly. While the applications of HDFS (such as HBase) have to access HDFS before the file system, which requires more RPC times.

    In a word, the Storage Service is more lightweight with some functions simplified and its architecture is simpler than HDFS, which can effectively improve the read and write performance of a smaller block of data.

    "},{"location":"14.client/1.nebula-client/","title":"Clients overview","text":"

    NebulaGraph supports multiple types of clients for users to connect to and manage the NebulaGraph database.

    • NebulaGraph Console: the native CLI client
    • NebulaGraph CPP: the NebulaGraph client for C++
    • NebulaGraph Java: the NebulaGraph client for Java
    • NebulaGraph Python: the NebulaGraph client for Python
    • NebulaGraph Go: the NebulaGraph client for Golang

    Note

    Only the following classes are thread-safe:

    • NebulaPool and SessionPool in NebulaGraph Java
    • ConnectionPool and SessionPool in NebulaGraph Go
    "},{"location":"14.client/3.nebula-cpp-client/","title":"NebulaGraph CPP","text":"

    NebulaGraph CPP is a C++ client for connecting to and managing the NebulaGraph database.

    "},{"location":"14.client/3.nebula-cpp-client/#prerequisites","title":"Prerequisites","text":"

    You have installed C++ and GCC 4.8 or later versions.

    "},{"location":"14.client/3.nebula-cpp-client/#compatibility_with_nebulagraph","title":"Compatibility with NebulaGraph","text":"

    See github.

    "},{"location":"14.client/3.nebula-cpp-client/#install_nebulagraph_cpp","title":"Install NebulaGraph CPP","text":"

    This document describes how to install NebulaGraph CPP with the source code.

    "},{"location":"14.client/3.nebula-cpp-client/#prerequisites_1","title":"Prerequisites","text":"
    • You have prepared the correct resources.
    • You have installed C++ and GCC version is: {10.1.0 | 9.3.0 | 9.2.0 | 9.1.0 | 8.3.0 | 7.5.0 | 7.1.0}. For details, see the gcc_preset_versions parameter.
    "},{"location":"14.client/3.nebula-cpp-client/#steps","title":"Steps","text":"
    1. Clone the NebulaGraph CPP source code to the host.

      • (Recommended) To install a specific version of NebulaGraph CPP, use the Git option --branch to specify the branch. For example, to install v3.4.0, run the following command:

        $ git clone --branch release-3.4 https://github.com/vesoft-inc/nebula-cpp.git\n
      • To install the daily development version, run the following command to download the source code from the master branch:

        $ git clone https://github.com/vesoft-inc/nebula-cpp.git\n
    2. Change the working directory to nebula-cpp.

      $ cd nebula-cpp\n
    3. Create a directory named build and change the working directory to it.

      $ mkdir build && cd build\n
    4. Generate the makefile file with CMake.

      Note

      The default installation path is /usr/local/nebula. To modify it, add the -DCMAKE_INSTALL_PREFIX=<installation_path> option while running the following command.

      $ cmake -DCMAKE_BUILD_TYPE=Release ..\n

      Note

      If G++ does not support C++ 11, add the option -DDISABLE_CXX11_ABI=ON.

    5. Compile NebulaGraph CPP.

      To speed up the compiling, use the -j option to set a concurrent number N. It should be \\(\\min(\\text{CPU core number},\\frac{\\text{the memory size(GB)}}{2})\\).

      $ make -j{N}\n
    6. Install NebulaGraph CPP.

      $ sudo make install\n
    7. Update the dynamic link library.

      $ sudo ldconfig\n
    "},{"location":"14.client/3.nebula-cpp-client/#use_nebulagraph_cpp","title":"Use NebulaGraph CPP","text":"

    Compile the CPP file to an executable file, then you can use it. The following steps take using SessionExample.cpp for example.

    1. Use the example code to create the SessionExample.cpp file.

    2. Run the following command to compile the file.

      $ LIBRARY_PATH=<library_folder_path>:$LIBRARY_PATH g++ -std=c++11 SessionExample.cpp -I<include_folder_path> -lnebula_graph_client -o session_example\n
      • library_folder_path: The storage path of the NebulaGraph dynamic libraries. The default path is /usr/local/nebula/lib64.
      • include_folder_path: The storage of the NebulaGraph header files. The default path is /usr/local/nebula/include.

    For example:

    $ LIBRARY_PATH=/usr/local/nebula/lib64:$LIBRARY_PATH g++ -std=c++11 SessionExample.cpp -I/usr/local/nebula/include -lnebula_graph_client -o session_example\n
    "},{"location":"14.client/3.nebula-cpp-client/#api_reference","title":"API reference","text":"

    Click here to check the classes and functions provided by the CPP Client.

    "},{"location":"14.client/3.nebula-cpp-client/#core_of_the_example_code","title":"Core of the example code","text":"

    Nebula CPP clients provide both Session Pool and Connection Pool methods to connect to NebulaGraph. Using the Connection Pool method requires users to manage session instances by themselves.

    • Session Pool

      For more details about all the code, see SessionPoolExample.

    • Connection Pool

      For more details about all the code, see SessionExample.

    "},{"location":"14.client/4.nebula-java-client/","title":"NebulaGraph Java","text":"

    NebulaGraph Java is a Java client for connecting to and managing the NebulaGraph database.

    "},{"location":"14.client/4.nebula-java-client/#prerequisites","title":"Prerequisites","text":"

    You have installed Java 8.0 or later versions.

    "},{"location":"14.client/4.nebula-java-client/#compatibility_with_nebulagraph","title":"Compatibility with NebulaGraph","text":"

    See github.

    "},{"location":"14.client/4.nebula-java-client/#download_nebulagraph_java","title":"Download NebulaGraph Java","text":"
    • (Recommended) To install a specific version of NebulaGraph Java, use the Git option --branch to specify the branch. For example, to install v3.6.1, run the following command:

      $ git clone --branch release-3.6 https://github.com/vesoft-inc/nebula-java.git\n
    • To install the daily development version, run the following command to download the source code from the master branch:

      $ git clone https://github.com/vesoft-inc/nebula-java.git\n
    "},{"location":"14.client/4.nebula-java-client/#use_nebulagraph_java","title":"Use NebulaGraph Java","text":"

    Note

    We recommend that each thread use one session. If multiple threads use the same session, the performance will be reduced.

    When importing a Maven project with tools such as IDEA, set the following dependency in pom.xml.

    Note

    3.0.0-SNAPSHOT indicates the daily development version that may have unknown issues. We recommend that you replace 3.0.0-SNAPSHOT with a released version number to use a table version.

    <dependency>\n  <groupId>com.vesoft</groupId>\n  <artifactId>client</artifactId>\n  <version>3.0.0-SNAPSHOT</version>\n</dependency>\n

    If you cannot download the dependency for the daily development version, set the following content in pom.xml. Released versions have no such issue.

    <repositories> \n  <repository> \n    <id>snapshots</id> \n    <url>https://oss.sonatype.org/content/repositories/snapshots/</url> \n  </repository> \n</repositories>\n

    If there is no Maven to manage the project, manually download the JAR file to install NebulaGraph Java.

    "},{"location":"14.client/4.nebula-java-client/#api_reference","title":"API reference","text":"

    Click here to check the classes and functions provided by the Java Client.

    "},{"location":"14.client/4.nebula-java-client/#core_of_the_example_code","title":"Core of the example code","text":"

    The NebulaGraph Java client provides both Connection Pool and Session Pool modes, using Connection Pool requires the user to manage session instances.

    • Session Pool

      For all the code, see GraphSessionPoolExample.

    • Connection Pool

      For all the code, see GraphClientExample.

    "},{"location":"14.client/5.nebula-python-client/","title":"NebulaGraph Python","text":"

    NebulaGraph Python is a Python client for connecting to and managing the NebulaGraph database.

    "},{"location":"14.client/5.nebula-python-client/#prerequisites","title":"Prerequisites","text":"

    You have installed Python 3.6 or later versions.

    "},{"location":"14.client/5.nebula-python-client/#compatibility_with_nebulagraph","title":"Compatibility with NebulaGraph","text":"

    See github.

    "},{"location":"14.client/5.nebula-python-client/#install_nebulagraph_python","title":"Install NebulaGraph Python","text":""},{"location":"14.client/5.nebula-python-client/#install_nebulagraph_python_with_pip","title":"Install NebulaGraph Python with pip","text":"
    $ pip install nebula3-python==<version>\n
    "},{"location":"14.client/5.nebula-python-client/#install_nebulagraph_python_from_the_source_code","title":"Install NebulaGraph Python from the source code","text":"
    1. Clone the NebulaGraph Python source code to the host.

      • (Recommended) To install a specific version of NebulaGraph Python, use the Git option --branch to specify the branch. For example, to install v3.4.0, run the following command:

        $ git clone --branch release-3.4 https://github.com/vesoft-inc/nebula-python.git\n
      • To install the daily development version, run the following command to download the source code from the master branch:

        $ git clone https://github.com/vesoft-inc/nebula-python.git\n
    2. Change the working directory to nebula-python.

      $ cd nebula-python\n
    3. Run the following command to install NebulaGraph Python.

      $ pip install .\n
    "},{"location":"14.client/5.nebula-python-client/#api_reference","title":"API reference","text":"

    Click here to check the classes and functions provided by the Python Client.

    "},{"location":"14.client/5.nebula-python-client/#core_of_the_example_code","title":"Core of the example code","text":"

    NebulaGraph Python clients provides Connection Pool and Session Pool methods to connect to NebulaGraph. Using the Connection Pool method requires users to manage sessions by themselves.

    • Session Pool

      For details about all the code, see SessinPoolExample.py.

      For limitations of using the Session Pool method, see Example of using session pool.

    • Connection Pool

      For details about all the code, see Example.

    "},{"location":"14.client/6.nebula-go-client/","title":"NebulaGraph Go","text":"

    NebulaGraph Go is a Golang client for connecting to and managing the NebulaGraph database.

    "},{"location":"14.client/6.nebula-go-client/#prerequisites","title":"Prerequisites","text":"

    You have installed Golang 1.13 or later versions.

    "},{"location":"14.client/6.nebula-go-client/#compatibility_with_nebulagraph","title":"Compatibility with NebulaGraph","text":"

    See github.

    "},{"location":"14.client/6.nebula-go-client/#download_nebulagraph_go","title":"Download NebulaGraph Go","text":"
    • (Recommended) To install a specific version of NebulaGraph Go, use the Git option --branch to specify the branch. For example, to install v3.7.0, run the following command:

      $ git clone --branch release-3.7 https://github.com/vesoft-inc/nebula-go.git\n
    • To install the daily development version, run the following command to download the source code from the master branch:

      $ git clone https://github.com/vesoft-inc/nebula-go.git\n
    "},{"location":"14.client/6.nebula-go-client/#install_or_update","title":"Install or update","text":"

    Run the following command to install or update NebulaGraph Go:

    $ go get -u -v github.com/vesoft-inc/nebula-go/v3@v3.7.0\n
    "},{"location":"14.client/6.nebula-go-client/#api_reference","title":"API reference","text":"

    Click here to check the functions and types provided by the GO Client.

    "},{"location":"14.client/6.nebula-go-client/#core_of_the_example_code","title":"Core of the example code","text":"

    The NebulaGraph GO client provides both Connection Pool and Session Pool, using Connection Pool requires the user to manage the session instances.

    • Session Pool

      For details about all the code, see session_pool_example.go.

      For limitations of using Session Pool, see Usage example.

    • Connection Pool

      For all the code, see graph_client_basic_example and graph_client_goroutines_example.

    "},{"location":"14.client/contributed-clients/","title":"Community contributed clients","text":"

    You can use the following clients developed by community users to connect to and manage NebulaGraph:

    • NebulaGraph Rust
    • NebulaGraph PHP
    • NebulaGraph Node
    • NebulaGraph .NET
    "},{"location":"15.contribution/how-to-contribute/","title":"How to Contribute","text":""},{"location":"15.contribution/how-to-contribute/#before_you_get_started","title":"Before you get started","text":""},{"location":"15.contribution/how-to-contribute/#commit_an_issue_on_the_github_or_forum","title":"Commit an issue on the github or forum","text":"

    You are welcome to contribute any code or files to the project. But firstly we suggest you raise an issue on the github or the forum to start a discussion with the community. Check through the topic for Github.

    "},{"location":"15.contribution/how-to-contribute/#sign_the_contributor_license_agreement_cla","title":"Sign the Contributor License Agreement CLA","text":"
    1. Open the CLA sign-in page.
    2. Click the Sign in with GitHub button to sign in.
    3. Read and agree to the vesoft inc. Contributor License Agreement.

    If you have any questions, submit an issue.

    "},{"location":"15.contribution/how-to-contribute/#modify_a_single_document","title":"Modify a single document","text":"

    This manual is written in the Markdown language. Click the pencil icon on the right of the document title to commit the modification.

    This method applies to modifying a single document only.

    "},{"location":"15.contribution/how-to-contribute/#batch_modify_or_add_files","title":"Batch modify or add files","text":"

    This method applies to contributing code, modifying multiple documents in batches, or adding new documents.

    "},{"location":"15.contribution/how-to-contribute/#step_1_fork_in_the_githubcom","title":"Step 1: Fork in the github.com","text":"

    The NebulaGraph project has many repositories. Take the nebul repository for example:

    1. Visit https://github.com/vesoft-inc/nebula.

    2. Click the Fork button to establish an online fork.

    "},{"location":"15.contribution/how-to-contribute/#step_2_clone_fork_to_local_storage","title":"Step 2: Clone Fork to Local Storage","text":"
    1. Define a local working directory.

      # Define the working directory.\nworking_dir=$HOME/Workspace\n
    2. Set user to match the Github profile name.

      user={the Github profile name}\n
    3. Create your clone.

      mkdir -p $working_dir\ncd $working_dir\ngit clone https://github.com/$user/nebula.git\n# or: git clone git@github.com:$user/nebula.git\n\ncd $working_dir/nebula\ngit remote add upstream https://github.com/vesoft-inc/nebula.git\n# or: git remote add upstream git@github.com:vesoft-inc/nebula.git\n\n# Never push to upstream master since you do not have write access.\ngit remote set-url --push upstream no_push\n\n# Confirm that the remote branch is valid.\n# The correct format is:\n# origin    git@github.com:$(user)/nebula.git (fetch)\n# origin    git@github.com:$(user)/nebula.git (push)\n# upstream  https://github.com/vesoft-inc/nebula (fetch)\n# upstream  no_push (push)\ngit remote -v\n
    4. (Optional) Define a pre-commit hook.

      Please link the NebulaGraph pre-commit hook into the .git directory.

      This hook checks the commits for formatting, building, doc generation, etc.

      cd $working_dir/nebula/.git/hooks\nln -s $working_dir/nebula/.linters/cpp/hooks/pre-commit.sh .\n

      Sometimes, the pre-commit hook cannot be executed. You have to execute it manually.

      cd $working_dir/nebula/.git/hooks\nchmod +x pre-commit\n
    "},{"location":"15.contribution/how-to-contribute/#step_3_branch","title":"Step 3: Branch","text":"
    1. Get your local master up to date.

      cd $working_dir/nebula\ngit fetch upstream\ngit checkout master\ngit rebase upstream/master\n
    2. Checkout a new branch from master.

      git checkout -b myfeature\n

      Note

      Because the PR often consists of several commits, which might be squashed while being merged into upstream. We strongly suggest you to open a separate topic branch to make your changes on. After merged, this topic branch can be just abandoned, thus you could synchronize your master branch with upstream easily with a rebase like above. Otherwise, if you commit your changes directly into master, you need to use a hard reset on the master branch. For example:

      git fetch upstream\ngit checkout master\ngit reset --hard upstream/master\ngit push --force origin master\n
    "},{"location":"15.contribution/how-to-contribute/#step_4_develop","title":"Step 4: Develop","text":"
    • Code style

      NebulaGraph adopts cpplint to make sure that the project conforms to Google's coding style guides. The checker will be implemented before the code is committed.

    • Unit tests requirements

      Please add unit tests for the new features or bug fixes.

    • Build your code with unit tests enabled

      For more information, see Install NebulaGraph by compiling the source code.

      Note

      Make sure you have enabled the building of unit tests by setting -DENABLE_TESTING=ON.

    • Run tests

      In the root directory of nebula, run the following command:

      cd nebula/build\nctest -j$(nproc)\n
    "},{"location":"15.contribution/how-to-contribute/#step_5_bring_your_branch_update_to_date","title":"Step 5: Bring Your Branch Update to Date","text":"
    # While on your myfeature branch.\ngit fetch upstream\ngit rebase upstream/master\n

    Users need to bring the head branch up to date after other contributors merge PR to the base branch.

    "},{"location":"15.contribution/how-to-contribute/#step_6_commit","title":"Step 6: Commit","text":"

    Commit your changes.

    git commit -a\n

    Users can use the command --amend to re-edit the previous code.

    "},{"location":"15.contribution/how-to-contribute/#step_7_push","title":"Step 7: Push","text":"

    When ready to review or just to establish an offsite backup, push your branch to your fork on github.com:

    git push origin myfeature\n
    "},{"location":"15.contribution/how-to-contribute/#step_8_create_a_pull_request","title":"Step 8: Create a Pull Request","text":"
    1. Visit your fork at https://github.com/$user/nebula (replace $user here).

    2. Click the Compare & pull request button next to your myfeature branch.

    "},{"location":"15.contribution/how-to-contribute/#step_9_get_a_code_review","title":"Step 9: Get a Code Review","text":"

    Once your pull request has been created, it will be assigned to at least two reviewers. Those reviewers will do a thorough code review to make sure that the changes meet the repository's contributing guidelines and other quality standards.

    "},{"location":"15.contribution/how-to-contribute/#add_test_cases","title":"Add test cases","text":"

    For detailed methods, see How to add test cases.

    "},{"location":"15.contribution/how-to-contribute/#donation","title":"Donation","text":""},{"location":"15.contribution/how-to-contribute/#step_1_confirm_the_project_donation","title":"Step 1: Confirm the project donation","text":"

    Contact the official NebulaGraph staff via email, WeChat, Slack, etc. to confirm the donation project. The project will be donated to the NebulaGraph Contrib organization.

    Email address: info@vesoft.com

    WeChat: NebulaGraphbot

    Slack: Join Slack

    "},{"location":"15.contribution/how-to-contribute/#step_2_get_the_information_of_the_project_recipient","title":"Step 2: Get the information of the project recipient","text":"

    The NebulaGraph official staff will give the recipient ID of the NebulaGraph Contrib project.

    "},{"location":"15.contribution/how-to-contribute/#step_3_donate_a_project","title":"Step 3: Donate a project","text":"

    The user transfers the project to the recipient of this donation, and the recipient transfers the project to the NebulaGraph Contrib organization. After the donation, the user will continue to lead the development of community projects as a Maintainer.

    For operations of transferring a repository on GitHub, see Transferring a repository owned by your user account.

    "},{"location":"2.quick-start/1.quick-start-workflow/","title":"Quickly deploy NebulaGraph using Docker","text":"

    You can quickly get started with NebulaGraph by deploying NebulaGraph with Docker Desktop or Docker Compose.

    Using Docker DesktopUsing Docker Compose

    NebulaGraph is available as a Docker Extension that you can easily install and run on your Docker Desktop. You can quickly deploy NebulaGraph using Docker Desktop with just one click.

    1. Install Docker Desktop.

      Caution

      We do not recommend you deploy NebulaGraph on Docker Desktop for Windows due to its subpar performance. For details, see #12401. If you must use Docker Desktop for Windows, install WSL 2 first.

    2. In the left sidebar of Docker Desktop, click Extensions or Add Extensions.

    3. On the Extensions Marketplace, search for NebulaGraph and click Install.

      Click Update to update NebulaGraph to the latest version when a new version is available.

    4. Click Open to navigate to the NebulaGraph extension page.

    5. At the top of the page, click Studio in Browser to use NebulaGraph.

    For more information about how to use NebulaGraph with Docker Desktop, see the following video:

    Using Docker Compose can quickly deploy NebulaGraph services based on the prepared configuration file. It is only recommended to use this method when testing the functions of NebulaGraph.

    "},{"location":"2.quick-start/1.quick-start-workflow/#prerequisites","title":"Prerequisites","text":"
    • You have installed the following applications on your host.

      Application Recommended version Official installation reference Docker Latest Install Docker Engine Docker Compose Latest Install Docker Compose Git Latest Download Git
    • If you are deploying NebulaGraph as a non-root user, grant the user with Docker-related privileges. For detailed instructions, see Manage Docker as a non-root user.
    • You have started the Docker service on your host.
    • If you have already deployed another version of NebulaGraph with Docker Compose on your host, to avoid compatibility issues, you need to delete the nebula-docker-compose/data directory.
    "},{"location":"2.quick-start/1.quick-start-workflow/#deploy_nebulagraph","title":"Deploy NebulaGraph","text":"
    1. Clone the 3.6.0 branch of the nebula-docker-compose repository to your host with Git.

      Danger

      The master branch contains the untested code for the latest NebulaGraph development release. DO NOT use this release in a production environment.

      $ git clone -b release-3.6 https://github.com/vesoft-inc/nebula-docker-compose.git\n

      Note

      The x.y version of Docker Compose aligns to the x.y version of NebulaGraph. For the NebulaGraph z version, Docker Compose does not publish the corresponding z version, but pulls the z version of the NebulaGraph image.

    2. Go to the nebula-docker-compose directory.

      $ cd nebula-docker-compose/\n
    3. Run the following command to start all the NebulaGraph services.

      Note

      • Update the NebulaGraph images and NebulaGraph Console images first if they are out of date.
      • The return result after executing the command varies depending on the installation directory.
      [nebula-docker-compose]$ docker-compose up -d\nCreating nebula-docker-compose_metad0_1 ... done\nCreating nebula-docker-compose_metad2_1 ... done\nCreating nebula-docker-compose_metad1_1 ... done\nCreating nebula-docker-compose_graphd2_1   ... done\nCreating nebula-docker-compose_graphd_1    ... done\nCreating nebula-docker-compose_graphd1_1   ... done\nCreating nebula-docker-compose_storaged0_1 ... done\nCreating nebula-docker-compose_storaged2_1 ... done\nCreating nebula-docker-compose_storaged1_1 ... done\n

      Compatibility

      Starting from NebulaGraph version 3.1.0, nebula-docker-compose automatically starts a NebulaGraph Console docker container and adds the storage host to the cluster (i.e. ADD HOSTS command).

      Note

      For more information of the preceding services, see NebulaGraph architecture.

    "},{"location":"2.quick-start/1.quick-start-workflow/#connect_to_nebulagraph","title":"Connect to NebulaGraph","text":"

    There are two ways to connect to NebulaGraph:

    • Connected with Nebula Console outside the container. Because the external mapping port for the Graph service is also fixed as 9669 in the container's configuration file, you can connect directly through the default port. For details, see Connect to NebulaGraph.
    • Log into the container installed NebulaGraph Console, then connect to the Graph service. This section describes this approach.
    1. Run the following command to view the name of NebulaGraph Console docker container.

      $ docker-compose ps\n          Name                         Command             State                 Ports\n--------------------------------------------------------------------------------------------\nnebula-docker-compose_console_1     sh -c sleep 3 &&          Up\n                                  nebula-co ...\n......\n
    2. Run the following command to enter the NebulaGraph Console docker container.

      docker exec -it nebula-docker-compose_console_1 /bin/sh\n/ #\n
    3. Connect to NebulaGraph with NebulaGraph Console.

      / # ./usr/local/bin/nebula-console -u <user_name> -p <password> --address=graphd --port=9669\n

      Note

      By default, the authentication is off, you can only log in with an existing username (the default is root) and any password. To turn it on, see Enable authentication.

    4. Run the following commands to view the cluster state.

      nebula> SHOW HOSTS;\n+-------------+------+----------+--------------+----------------------+------------------------+---------+\n| Host        | Port | Status   | Leader count | Leader distribution  | Partition distribution | Version |\n+-------------+------+----------+--------------+----------------------+------------------------+---------+\n| \"storaged0\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No valid partition\"   | \"master\" |\n| \"storaged1\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No valid partition\"   | \"master\" |\n| \"storaged2\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No valid partition\"   | \"master\" |\n+-------------+------+----------+--------------+----------------------+------------------------+---------+\n

    Run exit twice to switch back to your terminal (shell).

    "},{"location":"2.quick-start/1.quick-start-workflow/#check_the_nebulagraph_service_status_and_ports","title":"Check the NebulaGraph service status and ports","text":"

    Run docker-compose ps to list all the services of NebulaGraph and their status and ports.

    Note

    NebulaGraph provides services to the clients through port 9669 by default. To use other ports, modify the docker-compose.yaml file in the nebula-docker-compose directory and restart the NebulaGraph services.

    $ docker-compose ps\nnebula-docker-compose_console_1     sh -c sleep 3 &&                 Up\n                                  nebula-co ...\nnebula-docker-compose_graphd1_1     /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49174->19669/tcp,:::49174->19669/tcp, 0.0.0.0:49171->19670/tcp,:::49171->19670/tcp, 0.0.0.0:49177->9669/tcp,:::49177->9669/tcp\nnebula-docker-compose_graphd2_1     /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49175->19669/tcp,:::49175->19669/tcp, 0.0.0.0:49172->19670/tcp,:::49172->19670/tcp, 0.0.0.0:49178->9669/tcp,:::49178->9669/tcp\nnebula-docker-compose_graphd_1      /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49180->19669/tcp,:::49180->19669/tcp, 0.0.0.0:49179->19670/tcp,:::49179->19670/tcp, 0.0.0.0:9669->9669/tcp,:::9669->9669/tcp\nnebula-docker-compose_metad0_1      /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49157->19559/tcp,:::49157->19559/tcp, 0.0.0.0:49154->19560/tcp,:::49154->19560/tcp, 0.0.0.0:49160->9559/tcp,:::49160->9559/tcp, 9560/tcp\nnebula-docker-compose_metad1_1      /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49156->19559/tcp,:::49156->19559/tcp, 0.0.0.0:49153->19560/tcp,:::49153->19560/tcp, 0.0.0.0:49159->9559/tcp,:::49159->9559/tcp, 9560/tcp\nnebula-docker-compose_metad2_1      /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49158->19559/tcp,:::49158->19559/tcp, 0.0.0.0:49155->19560/tcp,:::49155->19560/tcp, 0.0.0.0:49161->9559/tcp,:::49161->9559/tcp, 9560/tcp\nnebula-docker-compose_storaged0_1   /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49166->19779/tcp,:::49166->19779/tcp, 0.0.0.0:49163->19780/tcp,:::49163->19780/tcp, 9777/tcp, 9778/tcp, 0.0.0.0:49169->9779/tcp,:::49169->9779/tcp, 9780/tcp\nnebula-docker-compose_storaged1_1   /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49165->19779/tcp,:::49165->19779/tcp, 0.0.0.0:49162->19780/tcp,:::49162->19780/tcp, 9777/tcp, 9778/tcp, 0.0.0.0:49168->9779/tcp,:::49168->9779/tcp, 9780/tcp\nnebula-docker-compose_storaged2_1   /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49167->19779/tcp,:::49167->19779/tcp, 0.0.0.0:49164->19780/tcp,:::49164->19780/tcp, 9777/tcp, 9778/tcp, 0.0.0.0:49170->9779/tcp,:::49170->9779/tcp, 9780/tcp\n

    If the service is abnormal, you can first confirm the abnormal container name (such as nebula-docker-compose_graphd2_1).

    Then you can execute docker ps to view the corresponding CONTAINER ID (such as 2a6c56c405f5).

    [nebula-docker-compose]$ docker ps\nCONTAINER ID   IMAGE                               COMMAND                  CREATED          STATUS                    PORTS                                                                                                  NAMES\n2a6c56c405f5   vesoft/nebula-graphd:nightly     \"/usr/local/nebula/b\u2026\"   36 minutes ago   Up 36 minutes (healthy)   0.0.0.0:49230->9669/tcp, 0.0.0.0:49229->19669/tcp, 0.0.0.0:49228->19670/tcp                            nebula-docker-compose_graphd2_1\n7042e0a8e83d   vesoft/nebula-storaged:nightly   \"./bin/nebula-storag\u2026\"   36 minutes ago   Up 36 minutes (healthy)   9777-9778/tcp, 9780/tcp, 0.0.0.0:49227->9779/tcp, 0.0.0.0:49226->19779/tcp, 0.0.0.0:49225->19780/tcp   nebula-docker-compose_storaged2_1\n18e3ea63ad65   vesoft/nebula-storaged:nightly   \"./bin/nebula-storag\u2026\"   36 minutes ago   Up 36 minutes (healthy)   9777-9778/tcp, 9780/tcp, 0.0.0.0:49219->9779/tcp, 0.0.0.0:49218->19779/tcp, 0.0.0.0:49217->19780/tcp   nebula-docker-compose_storaged0_1\n4dcabfe8677a   vesoft/nebula-graphd:nightly     \"/usr/local/nebula/b\u2026\"   36 minutes ago   Up 36 minutes (healthy)   0.0.0.0:49224->9669/tcp, 0.0.0.0:49223->19669/tcp, 0.0.0.0:49222->19670/tcp                            nebula-docker-compose_graphd1_1\na74054c6ae25   vesoft/nebula-graphd:nightly     \"/usr/local/nebula/b\u2026\"   36 minutes ago   Up 36 minutes (healthy)   0.0.0.0:9669->9669/tcp, 0.0.0.0:49221->19669/tcp, 0.0.0.0:49220->19670/tcp                             nebula-docker-compose_graphd_1\n880025a3858c   vesoft/nebula-storaged:nightly   \"./bin/nebula-storag\u2026\"   36 minutes ago   Up 36 minutes (healthy)   9777-9778/tcp, 9780/tcp, 0.0.0.0:49216->9779/tcp, 0.0.0.0:49215->19779/tcp, 0.0.0.0:49214->19780/tcp   nebula-docker-compose_storaged1_1\n45736a32a23a   vesoft/nebula-metad:nightly      \"./bin/nebula-metad \u2026\"   36 minutes ago   Up 36 minutes (healthy)   9560/tcp, 0.0.0.0:49213->9559/tcp, 0.0.0.0:49212->19559/tcp, 0.0.0.0:49211->19560/tcp                  nebula-docker-compose_metad0_1\n3b2c90eb073e   vesoft/nebula-metad:nightly      \"./bin/nebula-metad \u2026\"   36 minutes ago   Up 36 minutes (healthy)   9560/tcp, 0.0.0.0:49207->9559/tcp, 0.0.0.0:49206->19559/tcp, 0.0.0.0:49205->19560/tcp                  nebula-docker-compose_metad2_1\n7bb31b7a5b3f   vesoft/nebula-metad:nightly      \"./bin/nebula-metad \u2026\"   36 minutes ago   Up 36 minutes (healthy)   9560/tcp, 0.0.0.0:49210->9559/tcp, 0.0.0.0:49209->19559/tcp, 0.0.0.0:49208->19560/tcp                  nebula-docker-compose_metad1_1\n

    Use the CONTAINER ID to log in the container and troubleshoot.

    nebula-docker-compose]$ docker exec -it 2a6c56c405f5 bash\n[root@2a6c56c405f5 nebula]#\n
    "},{"location":"2.quick-start/1.quick-start-workflow/#check_the_service_data_and_logs","title":"Check the service data and logs","text":"

    All the data and logs of NebulaGraph are stored persistently in the nebula-docker-compose/data and nebula-docker-compose/logs directories.

    The structure of the directories is as follows:

    nebula-docker-compose/\n  |-- docker-compose.yaml\n  \u251c\u2500\u2500 data\n  \u2502\u00a0\u00a0 \u251c\u2500\u2500 meta0\n  \u2502\u00a0\u00a0 \u251c\u2500\u2500 meta1\n  \u2502\u00a0\u00a0 \u251c\u2500\u2500 meta2\n  \u2502\u00a0\u00a0 \u251c\u2500\u2500 storage0\n  \u2502\u00a0\u00a0 \u251c\u2500\u2500 storage1\n  \u2502\u00a0\u00a0 \u2514\u2500\u2500 storage2\n  \u2514\u2500\u2500 logs\n      \u251c\u2500\u2500 graph\n      \u251c\u2500\u2500 graph1\n      \u251c\u2500\u2500 graph2\n      \u251c\u2500\u2500 meta0\n      \u251c\u2500\u2500 meta1\n      \u251c\u2500\u2500 meta2\n      \u251c\u2500\u2500 storage0\n      \u251c\u2500\u2500 storage1\n      \u2514\u2500\u2500 storage2\n
    "},{"location":"2.quick-start/1.quick-start-workflow/#stop_the_nebulagraph_services","title":"Stop the NebulaGraph services","text":"

    You can run the following command to stop the NebulaGraph services:

    $ docker-compose down\n

    The following information indicates you have successfully stopped the NebulaGraph services:

    Stopping nebula-docker-compose_console_1   ... done\nStopping nebula-docker-compose_graphd1_1   ... done\nStopping nebula-docker-compose_graphd_1    ... done\nStopping nebula-docker-compose_graphd2_1   ... done\nStopping nebula-docker-compose_storaged1_1 ... done\nStopping nebula-docker-compose_storaged0_1 ... done\nStopping nebula-docker-compose_storaged2_1 ... done\nStopping nebula-docker-compose_metad2_1    ... done\nStopping nebula-docker-compose_metad0_1    ... done\nStopping nebula-docker-compose_metad1_1    ... done\nRemoving nebula-docker-compose_console_1   ... done\nRemoving nebula-docker-compose_graphd1_1   ... done\nRemoving nebula-docker-compose_graphd_1    ... done\nRemoving nebula-docker-compose_graphd2_1   ... done\nRemoving nebula-docker-compose_storaged1_1 ... done\nRemoving nebula-docker-compose_storaged0_1 ... done\nRemoving nebula-docker-compose_storaged2_1 ... done\nRemoving nebula-docker-compose_metad2_1    ... done\nRemoving nebula-docker-compose_metad0_1    ... done\nRemoving nebula-docker-compose_metad1_1    ... done\nRemoving network nebula-docker-compose_nebula-net\n

    Danger

    The parameter -v in the command docker-compose down -v will delete all your local NebulaGraph storage data. Try this command if you are using the nightly release and having some compatibility issues.

    "},{"location":"2.quick-start/1.quick-start-workflow/#modify_configurations","title":"Modify configurations","text":"

    The configuration file of NebulaGraph deployed by Docker Compose is nebula-docker-compose/docker-compose.yaml. To make the new configuration take effect, modify the configuration in this file and restart the service.

    For more instructions, see Configurations.

    "},{"location":"2.quick-start/1.quick-start-workflow/#faq","title":"FAQ","text":""},{"location":"2.quick-start/1.quick-start-workflow/#how_to_fix_the_docker_mapping_to_external_ports","title":"How to fix the docker mapping to external ports?","text":"

    To set the ports of corresponding services as fixed mapping, modify the docker-compose.yaml in the nebula-docker-compose directory. For example:

    graphd:\n    image: vesoft/nebula-graphd:release-3.6\n    ...\n    ports:\n      - 9669:9669\n      - 19669\n      - 19670\n

    9669:9669 indicates the internal port 9669 is uniformly mapped to external ports, while 19669 indicates the internal port 19669 is randomly mapped to external ports.

    "},{"location":"2.quick-start/1.quick-start-workflow/#how_to_upgrade_or_update_the_docker_images_of_nebulagraph_services","title":"How to upgrade or update the docker images of NebulaGraph services","text":"
    1. In the nebula-docker-compose/docker-compose.yaml file, change all the image values to the required image version.

    2. In the nebula-docker-compose directory, run docker-compose pull to update the images of the Graph Service, Storage Service, Meta Service, and NebulaGraph Console.

    3. Run docker-compose up -d to start the NebulaGraph services again.

    4. After connecting to NebulaGraph with NebulaGraph Console, run SHOW HOSTS GRAPH, SHOW HOSTS STORAGE, or SHOW HOSTS META to check the version of the responding service respectively.

    "},{"location":"2.quick-start/1.quick-start-workflow/#error_toomanyrequests_when_docker-compose_pull","title":"ERROR: toomanyrequests when docker-compose pull","text":"

    You may meet the following error.

    ERROR: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit.

    You have met the rate limit of Docker Hub. Learn more on Understanding Docker Hub Rate Limiting.

    "},{"location":"2.quick-start/1.quick-start-workflow/#how_to_update_the_nebulagraph_console_client","title":"How to update the NebulaGraph Console client","text":"

    The command docker-compose pull updates both the NebulaGraph services and the NebulaGraph Console.

    "},{"location":"2.quick-start/2.install-nebula-graph/","title":"Step 1: Install NebulaGraph","text":"

    RPM and DEB are common package formats on Linux systems. This topic shows how to quickly install NebulaGraph with the RPM or DEB package.

    Note

    The console is not complied or packaged with NebulaGraph server binaries. You can install nebula-console by yourself.

    "},{"location":"2.quick-start/2.install-nebula-graph/#prerequisites","title":"Prerequisites","text":"
    • The tool wget is installed.
    "},{"location":"2.quick-start/2.install-nebula-graph/#step_1_download_the_package_from_cloud_service","title":"Step 1: Download the package from cloud service","text":"

    Note

    NebulaGraph is currently only supported for installation on Linux systems, and only CentOS 7.x, CentOS 8.x, Ubuntu 16.04, Ubuntu 18.04, and Ubuntu 20.04 operating systems are supported.

    • Download the released version.

      URL:

      //Centos 7\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.el7.x86_64.rpm\n\n//Centos 8\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.el8.x86_64.rpm\n\n//Ubuntu 1604\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.ubuntu1604.amd64.deb\n\n//Ubuntu 1804\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.ubuntu1804.amd64.deb\n\n//Ubuntu 2004\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.ubuntu2004.amd64.deb\n

      For example, download the release package master for Centos 7.5:

      wget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.el7.x86_64.rpm\nwget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.el7.x86_64.rpm.sha256sum.txt\n

      Download the release package master for Ubuntu 1804:

      wget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.ubuntu1804.amd64.deb\nwget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.ubuntu1804.amd64.deb.sha256sum.txt\n
    • Download the nightly version.

      Danger

      • Nightly versions are usually used to test new features. Do not use it in a production environment.
      • Nightly versions may not be built successfully every night. And the names may change from day to day.

      URL:

      //Centos 7\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.el7.x86_64.rpm\n\n//Centos 8\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.el8.x86_64.rpm\n\n//Ubuntu 1604\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.ubuntu1604.amd64.deb\n\n//Ubuntu 1804\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.ubuntu1804.amd64.deb\n\n//Ubuntu 2004\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.ubuntu2004.amd64.deb\n

      For example, download the Centos 7.5 package developed and built in 2021.11.28:

      wget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.el7.x86_64.rpm\nwget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.el7.x86_64.rpm.sha256sum.txt\n

      For example, download the Ubuntu 1804 package developed and built in 2021.11.28:

      wget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.ubuntu1804.amd64.deb\nwget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.ubuntu1804.amd64.deb.sha256sum.txt\n
    "},{"location":"2.quick-start/2.install-nebula-graph/#step_2_install_nebulagraph","title":"Step 2: Install NebulaGraph","text":"
    • Use the following syntax to install with an RPM package.

      $ sudo rpm -ivh --prefix=<installation_path> <package_name>\n

      The option --prefix indicates the installation path. The default path is /usr/local/nebula/.

      For example, to install an RPM package in the default path for the master version, run the following command.

      sudo rpm -ivh nebula-graph-master.el7.x86_64.rpm\n
    • Use the following syntax to install with a DEB package.

      $ sudo dpkg -i <package_name>\n

      Note

      Customizing the installation path is not supported when installing NebulaGraph with a DEB package. The default installation path is /usr/local/nebula/.

      For example, to install a DEB package for the master version, run the following command.

      sudo dpkg -i nebula-graph-master.ubuntu1804.amd64.deb\n

      Note

      The default installation path is /usr/local/nebula/.

    "},{"location":"2.quick-start/2.install-nebula-graph/#next_to_do","title":"Next to do","text":"
    • Start NebulaGraph
    • Connect to NebulaGraph
    "},{"location":"2.quick-start/3.1add-storage-hosts/","title":"Register the Storage Service","text":"

    When connecting to NebulaGraph for the first time, you have to add the Storage hosts, and confirm that all the hosts are online.

    Compatibility

    • Starting from NebulaGraph 3.0.0, you have to run ADD HOSTS before reading or writing data into the Storage Service.
    • For NebulaGraph of versions earlier than 3.0.0 and NebulaGraph Cloud clusters, ADD HOSTS is not needed.
    "},{"location":"2.quick-start/3.1add-storage-hosts/#prerequisites","title":"Prerequisites","text":"

    You have connected to NebulaGraph.

    "},{"location":"2.quick-start/3.1add-storage-hosts/#steps","title":"Steps","text":"
    1. Add the Storage hosts.

      Run the following command to add hosts:

      ADD HOSTS <ip>:<port> [,<ip>:<port> ...];\n

      Example\uff1a

      nebula> ADD HOSTS 192.168.10.100:9779, 192.168.10.101:9779, 192.168.10.102:9779;\n

      Caution

      Make sure that the IP you added is the same as the IP configured for local_ip in the nebula-storaged.conf file. Otherwise, the Storage service will fail to start. For information about configurations, see Configurations.

    2. Check the status of the hosts to make sure that they are all online.

      nebula> SHOW HOSTS;\n+------------------+------+----------+--------------+----------------------  +------------------------+---------+\n| Host             | Port | Status   | Leader count | Leader distribution  |   Partition distribution | Version |\n+------------------+------+----------+--------------+----------------------  +------------------------+---------+\n| \"192.168.10.100\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No   valid partition\"   | \"master\" |\n| \"192.168.10.101\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No   valid partition\"   | \"master\"|\n| \"192.168.10.102\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No   valid partition\"   | \"master\"|\n+------------------+------+----------+--------------+----------------------  +------------------------+---------+\n

      The Status column of the result above shows that all Storage hosts are online.

    "},{"location":"2.quick-start/3.connect-to-nebula-graph/","title":"Step 3: Connect to NebulaGraph","text":"

    This topic provides basic instruction on how to use the native CLI client NebulaGraph Console to connect to NebulaGraph.

    Caution

    When connecting to NebulaGraph for the first time, you must register the Storage Service before querying data.

    NebulaGraph supports multiple types of clients, including a CLI client, a GUI client, and clients developed in popular programming languages. For more information, see the client list.

    "},{"location":"2.quick-start/3.connect-to-nebula-graph/#prerequisites","title":"Prerequisites","text":"
    • You have started NebulaGraph services.
    • The machine on which you plan to run NebulaGraph Console has network access to the Graph Service of NebulaGraph.
    • The NebulaGraph Console version is compatible with the NebulaGraph version.

      Note

      NebulaGraph Console and NebulaGraph of the same version number are the most compatible. There may be compatibility issues when connecting to NebulaGraph with a different version of NebulaGraph Console. The error message incompatible version between client and server is displayed when there is such an issue.

    "},{"location":"2.quick-start/3.connect-to-nebula-graph/#steps","title":"Steps","text":"
    1. On the NebulaGraph Console releases page, select a NebulaGraph Console version and click Assets.

      Note

      It is recommended to select the latest version.

    2. In the Assets area, find the correct binary file for the machine where you want to run NebulaGraph Console and download the file to the machine.

    3. (Optional) Rename the binary file to nebula-console for convenience.

      Note

      For Windows, rename the file to nebula-console.exe.

    4. On the machine to run NebulaGraph Console, grant the execute permission of the nebula-console binary file to the user.

      Note

      For Windows, skip this step.

      $ chmod 111 nebula-console\n
    5. In the command line interface, change the working directory to the one where the nebula-console binary file is stored.

    6. Run the following command to connect to NebulaGraph.

      • For Linux or macOS:
      $ ./nebula-console -addr <ip> -port <port> -u <username> -p <password>\n[-t 120] [-e \"nGQL_statement\" | -f filename.nGQL]\n
      • For Windows:
      > nebula-console.exe -addr <ip> -port <port> -u <username> -p <password>\n[-t 120] [-e \"nGQL_statement\" | -f filename.nGQL]\n

      Parameter descriptions are as follows:

      Parameter Description -h/-help Shows the help menu. -addr/-address Sets the IP (or hostname) of the Graph service. The default address is 127.0.0.1. -P/-port Sets the port number of the graphd service. The default port number is 9669. -u/-user Sets the username of your NebulaGraph account. Before enabling authentication, you can use any existing username. The default username is root. -p/-password Sets the password of your NebulaGraph account. Before enabling authentication, you can use any characters as the password. -t/-timeout Sets an integer-type timeout threshold of the connection. The unit is millisecond. The default value is 120. -e/-eval Sets a string-type nGQL statement. The nGQL statement is executed once the connection succeeds. The connection stops after the result is returned. -f/-file Sets the path of an nGQL file. The nGQL statements in the file are executed once the connection succeeds. The result will be returned and the connection stops then. -enable_ssl Enables SSL encryption when connecting to NebulaGraph. -ssl_root_ca_path Sets the storage path of the certification authority file. -ssl_cert_path Sets the storage path of the certificate file. -ssl_private_key_path Sets the storage path of the private key file.

      For information on more parameters, see the project repository.

    "},{"location":"2.quick-start/4.nebula-graph-crud/","title":"Step 4: Use nGQL (CRUD)","text":"

    This topic will describe the basic CRUD operations in NebulaGraph.

    For more information, see nGQL guide.

    "},{"location":"2.quick-start/4.nebula-graph-crud/#graph_space_and_nebulagraph_schema","title":"Graph space and NebulaGraph schema","text":"

    A NebulaGraph instance consists of one or more graph spaces. Graph spaces are physically isolated from each other. You can use different graph spaces in the same instance to store different datasets.

    To insert data into a graph space, define a schema for the graph database. NebulaGraph schema is based on the following components.

    Schema component Description Vertex Represents an entity in the real world. A vertex can have zero to multiple tags. Tag The type of the same group of vertices. It defines a set of properties that describes the types of vertices. Edge Represents a directed relationship between two vertices. Edge type The type of an edge. It defines a group of properties that describes the types of edges.

    For more information, see Data modeling.

    In this topic, we will use the following dataset to demonstrate basic CRUD operations.

    "},{"location":"2.quick-start/4.nebula-graph-crud/#async_implementation_of_create_and_alter","title":"Async implementation of CREATE and ALTER","text":"

    Caution

    In NebulaGraph, the following CREATE or ALTER commands are implemented in an async way and take effect in the next heartbeat cycle. Otherwise, an error will be returned. To make sure the follow-up operations work as expected, Wait for two heartbeat cycles, i.e., 20 seconds.

    • CREATE SPACE
    • CREATE TAG
    • CREATE EDGE
    • ALTER TAG
    • ALTER EDGE
    • CREATE TAG INDEX
    • CREATE EDGE INDEX

    Note

    The default heartbeat interval is 10 seconds. To change the heartbeat interval, modify the heartbeat_interval_secs parameter in the configuration files for all services.

    "},{"location":"2.quick-start/4.nebula-graph-crud/#create_and_use_a_graph_space","title":"Create and use a graph space","text":""},{"location":"2.quick-start/4.nebula-graph-crud/#ngql_syntax","title":"nGQL syntax","text":"
    • Create a graph space:
      CREATE SPACE [IF NOT EXISTS] <graph_space_name> (\n[partition_num = <partition_number>,]\n[replica_factor = <replica_number>,]\nvid_type = {FIXED_STRING(<N>) | INT64}\n)\n[COMMENT = '<comment>'];\n

      For more information on parameters, see CREATE SPACE.

    • List graph spaces and check if the creation is successful:
      nebula> SHOW SPACES;\n
    • Use a graph space:
      USE <graph_space_name>;\n
    "},{"location":"2.quick-start/4.nebula-graph-crud/#examples","title":"Examples","text":"
    1. Use the following statement to create a graph space named basketballplayer.

      nebula> CREATE SPACE basketballplayer(partition_num=15, replica_factor=1, vid_type=fixed_string(30));\n

      Note

      If the system returns the error [ERROR (-1005)]: Host not enough!, check whether registered the Storage Service.

    2. Check the partition distribution with SHOW HOSTS to make sure that the partitions are distributed in a balanced way.

      nebula> SHOW HOSTS;\n+-------------+-----------+-----------+--------------+----------------------------------+------------------------+---------+\n| Host        | Port      | Status    | Leader count | Leader distribution              | Partition distribution | Version |\n+-------------+-----------+-----------+--------------+----------------------------------+------------------------+---------+\n| \"storaged0\" | 9779      | \"ONLINE\"  | 5            | \"basketballplayer:5\"             | \"basketballplayer:5\"   | \"master\"|\n| \"storaged1\" | 9779      | \"ONLINE\"  | 5            | \"basketballplayer:5\"             | \"basketballplayer:5\"   | \"master\"|\n| \"storaged2\" | 9779      | \"ONLINE\"  | 5            | \"basketballplayer:5\"             | \"basketballplayer:5\"   | \"master\"|\n+-------------+-----------+-----------+-----------+--------------+----------------------------------+------------------------+---------+\n

      If the Leader distribution is uneven, use BALANCE LEADER to redistribute the partitions. For more information, see BALANCE.

    3. Use the basketballplayer graph space.

      nebula[(none)]> USE basketballplayer;\n

      You can use SHOW SPACES to check the graph space you created.

      nebula> SHOW SPACES;\n+--------------------+\n| Name               |\n+--------------------+\n| \"basketballplayer\" |\n+--------------------+\n
    "},{"location":"2.quick-start/4.nebula-graph-crud/#create_tags_and_edge_types","title":"Create tags and edge types","text":""},{"location":"2.quick-start/4.nebula-graph-crud/#ngql_syntax_1","title":"nGQL syntax","text":"
    CREATE {TAG | EDGE} [IF NOT EXISTS] {<tag_name> | <edge_type_name>}\n    (\n      <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']\n      [{, <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']} ...] \n    )\n    [TTL_DURATION = <ttl_duration>]\n    [TTL_COL = <prop_name>]\n    [COMMENT = '<comment>'];\n

    For more information on parameters, see CREATE TAG and CREATE EDGE.

    "},{"location":"2.quick-start/4.nebula-graph-crud/#examples_1","title":"Examples","text":"

    Create tags player and team, and edge types follow and serve. Descriptions are as follows.

    Component name Type Property player Tag name (string), age (int) team Tag name (string) follow Edge type degree (int) serve Edge type start_year (int), end_year (int)
    nebula> CREATE TAG player(name string, age int);\n\nnebula> CREATE TAG team(name string);\n\nnebula> CREATE EDGE follow(degree int);\n\nnebula> CREATE EDGE serve(start_year int, end_year int);\n
    "},{"location":"2.quick-start/4.nebula-graph-crud/#insert_vertices_and_edges","title":"Insert vertices and edges","text":"

    You can use the INSERT statement to insert vertices or edges based on existing tags or edge types.

    "},{"location":"2.quick-start/4.nebula-graph-crud/#ngql_syntax_2","title":"nGQL syntax","text":"
    • Insert vertices:
      INSERT VERTEX [IF NOT EXISTS] [tag_props, [tag_props] ...]\nVALUES <vid>: ([prop_value_list])\n\ntag_props:\n  tag_name ([prop_name_list])\n\nprop_name_list:\n   [prop_name [, prop_name] ...]\n\nprop_value_list:\n   [prop_value [, prop_value] ...]   \n

      vid is short for Vertex ID. A vid must be a unique string value in a graph space. For details, see INSERT VERTEX.

    • Insert edges:

      INSERT EDGE [IF NOT EXISTS] <edge_type> ( <prop_name_list> ) VALUES \n<src_vid> -> <dst_vid>[@<rank>] : ( <prop_value_list> )\n[, <src_vid> -> <dst_vid>[@<rank>] : ( <prop_value_list> ), ...];\n<prop_name_list> ::=\n[ <prop_name> [, <prop_name> ] ...]\n<prop_value_list> ::=\n[ <prop_value> [, <prop_value> ] ...]\n

      For more information on parameters, see INSERT EDGE.

    "},{"location":"2.quick-start/4.nebula-graph-crud/#examples_2","title":"Examples","text":"
    • Insert vertices representing basketball players and teams:
      nebula> INSERT VERTEX player(name, age) VALUES \"player100\":(\"Tim Duncan\", 42);\n\nnebula> INSERT VERTEX player(name, age) VALUES \"player101\":(\"Tony Parker\", 36);\n\nnebula> INSERT VERTEX player(name, age) VALUES \"player102\":(\"LaMarcus Aldridge\", 33);\n\nnebula> INSERT VERTEX team(name) VALUES \"team203\":(\"Trail Blazers\"), \"team204\":(\"Spurs\");\n
    • Insert edges representing the relations between basketball players and teams:
      nebula> INSERT EDGE follow(degree) VALUES \"player101\" -> \"player100\":(95);\n\nnebula> INSERT EDGE follow(degree) VALUES \"player101\" -> \"player102\":(90);\n\nnebula> INSERT EDGE follow(degree) VALUES \"player102\" -> \"player100\":(75);\n\nnebula> INSERT EDGE serve(start_year, end_year) VALUES \"player101\" -> \"team204\":(1999, 2018),\"player102\" -> \"team203\":(2006,  2015);\n
    "},{"location":"2.quick-start/4.nebula-graph-crud/#read_data","title":"Read data","text":"
    • The GO statement can traverse the database based on specific conditions. A GO traversal starts from one or more vertices, along one or more edges, and returns information in a form specified in the YIELD clause.
    • The FETCH statement is used to get properties from vertices or edges.
    • The LOOKUP statement is based on indexes. It is used together with the WHERE clause to search for the data that meet the specific conditions.
    • The MATCH statement is the most commonly used statement for graph data querying. It can describe all kinds of graph patterns, but it relies on indexes to match data patterns in NebulaGraph. Therefore, its performance still needs optimization.
    "},{"location":"2.quick-start/4.nebula-graph-crud/#ngql_syntax_3","title":"nGQL syntax","text":"
    • GO
      GO [[<M> TO] <N> {STEP|STEPS} ] FROM <vertex_list>\nOVER <edge_type_list> [{REVERSELY | BIDIRECT}]\n[ WHERE <conditions> ]\nYIELD [DISTINCT] <return_list>\n[{ SAMPLE <sample_list> | <limit_by_list_clause> }]\n[| GROUP BY {<col_name> | expression> | <position>} YIELD <col_name>]\n[| ORDER BY <expression> [{ASC | DESC}]]\n[| LIMIT [<offset>,] <number_rows>];\n
    • FETCH

      • Fetch properties on tags:

        FETCH PROP ON {<tag_name>[, tag_name ...] | *}\n<vid> [, vid ...]\nYIELD <return_list> [AS <alias>];\n
      • Fetch properties on edges:

        FETCH PROP ON <edge_type> <src_vid> -> <dst_vid>[@<rank>] [, <src_vid> -> <dst_vid> ...]\nYIELD <output>;\n
    • LOOKUP
      LOOKUP ON {<vertex_tag> | <edge_type>}\n[WHERE <expression> [AND <expression> ...]]\nYIELD <return_list> [AS <alias>];\n<return_list>\n    <prop_name> [AS <col_alias>] [, <prop_name> [AS <prop_alias>] ...];\n
    • MATCH
      MATCH <pattern> [<clause_1>] RETURN <output> [<clause_2>];\n
    "},{"location":"2.quick-start/4.nebula-graph-crud/#examples_of_go_statement","title":"Examples of GO statement","text":"
    • Search for the players that the player with VID player101 follows.
      nebula> GO FROM \"player101\" OVER follow YIELD id($$);\n+-------------+\n| id($$)      |\n+-------------+\n| \"player100\" |\n| \"player102\" |\n| \"player125\" |\n+-------------+\n
    • Filter the players that the player with VID player101 follows whose age is equal to or greater than 35. Rename the corresponding columns in the results with Teammate and Age.
      nebula> GO FROM \"player101\" OVER follow WHERE properties($$).age >= 35 \\\n        YIELD properties($$).name AS Teammate, properties($$).age AS Age;\n+-----------------+-----+\n| Teammate        | Age |\n+-----------------+-----+\n| \"Tim Duncan\"    | 42  |\n| \"Manu Ginobili\" | 41  |\n+-----------------+-----+\n

      | Clause/Sign | Description | |-------------+---------------------------------------------------------------------| | YIELD | Specifies what values or results you want to return from the query. | | $$ | Represents the target vertices. | | \\ | A line-breaker. |

    • Search for the players that the player with VID player101 follows. Then retrieve the teams of the players that the player with VID player100 follows. To combine the two queries, use a pipe or a temporary variable.

      • With a pipe:

        nebula> GO FROM \"player101\" OVER follow YIELD dst(edge) AS id | \\\n        GO FROM $-.id OVER serve YIELD properties($$).name AS Team, \\\n        properties($^).name AS Player;\n+-----------------+---------------------+\n| Team            | Player              |\n+-----------------+---------------------+\n| \"Spurs\"         | \"Tim Duncan\"        |\n| \"Trail Blazers\" | \"LaMarcus Aldridge\" |\n| \"Spurs\"         | \"LaMarcus Aldridge\" |\n| \"Spurs\"         | \"Manu Ginobili\"     |\n+-----------------+---------------------+\n
        Clause/Sign Description $^ Represents the source vertex of the edge. | A pipe symbol can combine multiple queries. $- Represents the outputs of the query before the pipe symbol.
      • With a temporary variable:

        Note

        Once a composite statement is submitted to the server as a whole, the life cycle of the temporary variables in the statement ends.

        nebula> $var = GO FROM \"player101\" OVER follow YIELD dst(edge) AS id; \\\n        GO FROM $var.id OVER serve YIELD properties($$).name AS Team, \\\n        properties($^).name AS Player;\n+-----------------+---------------------+\n| Team            | Player              |\n+-----------------+---------------------+\n| \"Spurs\"         | \"Tim Duncan\"        |\n| \"Trail Blazers\" | \"LaMarcus Aldridge\" |\n| \"Spurs\"         | \"LaMarcus Aldridge\" |\n| \"Spurs\"         | \"Manu Ginobili\"     |\n+-----------------+---------------------+\n
    "},{"location":"2.quick-start/4.nebula-graph-crud/#example_of_fetch_statement","title":"Example of FETCH statement","text":"

    Use FETCH: Fetch the properties of the player with VID player100.

    nebula> FETCH PROP ON player \"player100\" YIELD properties(vertex);\n+-------------------------------+\n| properties(VERTEX)            |\n+-------------------------------+\n| {age: 42, name: \"Tim Duncan\"} |\n+-------------------------------+\n

    Note

    The examples of LOOKUP and MATCH statements are in indexes.

    "},{"location":"2.quick-start/4.nebula-graph-crud/#update_vertices_and_edges","title":"Update vertices and edges","text":"

    Users can use the UPDATE or the UPSERT statements to update existing data.

    UPSERT is the combination of UPDATE and INSERT. If you update a vertex or an edge with UPSERT, the database will insert a new vertex or edge if it does not exist.

    Note

    UPSERT operates serially in a partition-based order. Therefore, it is slower than INSERT OR UPDATE. And UPSERT has concurrency only between multiple partitions.

    "},{"location":"2.quick-start/4.nebula-graph-crud/#ngql_syntax_4","title":"nGQL syntax","text":"
    • UPDATE vertices:
      UPDATE VERTEX <vid> SET <properties to be updated>\n[WHEN <condition>] [YIELD <columns>];\n
    • UPDATE edges:
      UPDATE EDGE ON <edge_type> <source vid> -> <destination vid> [@rank] \nSET <properties to be updated> [WHEN <condition>] [YIELD <columns to be output>];\n
    • UPSERT vertices or edges:
      UPSERT {VERTEX <vid> | EDGE <edge_type>} SET <update_columns>\n[WHEN <condition>] [YIELD <columns>];\n
    "},{"location":"2.quick-start/4.nebula-graph-crud/#examples_3","title":"Examples","text":"
    • UPDATE the name property of the vertex with VID player100 and check the result with the FETCH statement.
      nebula> UPDATE VERTEX \"player100\" SET player.name = \"Tim\";\n\nnebula> FETCH PROP ON player \"player100\" YIELD properties(vertex);\n+------------------------+\n| properties(VERTEX)     |\n+------------------------+\n| {age: 42, name: \"Tim\"} |\n+------------------------+\n
    • UPDATE the degree property of an edge and check the result with the FETCH statement.
      nebula> UPDATE EDGE ON follow \"player101\" -> \"player100\" SET degree = 96;\n\nnebula> FETCH PROP ON follow \"player101\" -> \"player100\" YIELD properties(edge);\n+------------------+\n| properties(EDGE) |\n+------------------+\n| {degree: 96}     |\n+------------------+\n
    • Insert a vertex with VID player111 and UPSERT it.
      nebula> INSERT VERTEX player(name,age) VALUES \"player111\":(\"David West\", 38);\n\nnebula> UPSERT VERTEX \"player111\" SET player.name = \"David\", player.age = $^.player.age + 11 \\\n        WHEN $^.player.name == \"David West\" AND $^.player.age > 20 \\\n        YIELD $^.player.name AS Name, $^.player.age AS Age;\n+---------+-----+\n| Name    | Age |\n+---------+-----+\n| \"David\" | 49  |\n+---------+-----+\n
    "},{"location":"2.quick-start/4.nebula-graph-crud/#delete_vertices_and_edges","title":"Delete vertices and edges","text":""},{"location":"2.quick-start/4.nebula-graph-crud/#ngql_syntax_5","title":"nGQL syntax","text":"
    • Delete vertices:
      DELETE VERTEX <vid1>[, <vid2>...]\n
    • Delete edges:
      DELETE EDGE <edge_type> <src_vid> -> <dst_vid>[@<rank>]\n[, <src_vid> -> <dst_vid>...]\n
    "},{"location":"2.quick-start/4.nebula-graph-crud/#examples_4","title":"Examples","text":"
    • Delete vertices:
      nebula> DELETE VERTEX \"player111\", \"team203\";\n
    • Delete edges:
      nebula> DELETE EDGE follow \"player101\" -> \"team204\";\n
    "},{"location":"2.quick-start/4.nebula-graph-crud/#about_indexes","title":"About indexes","text":"

    Users can add indexes to tags and edge types with the CREATE INDEX statement.

    Must-read for using indexes

    Both MATCH and LOOKUP statements depend on the indexes. But indexes can dramatically reduce the write performance. DO NOT use indexes in production environments unless you are fully aware of their influences on your service.

    Users MUST rebuild indexes for pre-existing data. Otherwise, the pre-existing data cannot be indexed and therefore cannot be returned in MATCH or LOOKUP statements. For more information, see REBUILD INDEX.

    "},{"location":"2.quick-start/4.nebula-graph-crud/#ngql_syntax_6","title":"nGQL syntax","text":"
    • Create an index:
      CREATE {TAG | EDGE} INDEX [IF NOT EXISTS] <index_name>\nON {<tag_name> | <edge_name>} ([<prop_name_list>]) [COMMENT = '<comment>'];\n
    • Rebuild an index:
      REBUILD {TAG | EDGE} INDEX <index_name>;\n

    Note

    Define the index length when creating an index for a variable-length property. In UTF-8 encoding, a non-ascii character occupies 3 bytes. You should set an appropriate index length according to the variable-length property. For example, the index should be 30 bytes for 10 non-ascii characters. For more information, see CREATE INDEX

    "},{"location":"2.quick-start/4.nebula-graph-crud/#examples_of_lookup_and_match_index-based","title":"Examples of LOOKUP and MATCH (index-based)","text":"

    Make sure there is an index for LOOKUP or MATCH to use. If there is not, create an index first.

    Find the information of the vertex with the tag player and its value of the name property is Tony Parker.

    This example creates the index player_index_1 on the name property.

    nebula> CREATE TAG INDEX IF NOT EXISTS player_index_1 ON player(name(20));\n

    This example rebuilds the index to make sure it takes effect on pre-existing data.

    nebula> REBUILD TAG INDEX player_index_1\n+------------+\n| New Job Id |\n+------------+\n| 31         |\n+------------+\n

    This example uses the LOOKUP statement to retrieve the vertex property.

    nebula> LOOKUP ON player WHERE player.name == \"Tony Parker\" \\\n        YIELD properties(vertex).name AS name, properties(vertex).age AS age;\n+---------------+-----+\n| name          | age |\n+---------------+-----+\n| \"Tony Parker\" | 36  |\n+---------------+-----+\n

    This example uses the MATCH statement to retrieve the vertex property.

    nebula> MATCH (v:player{name:\"Tony Parker\"}) RETURN v;\n+-----------------------------------------------------+\n| v                                                   |\n+-----------------------------------------------------+\n| (\"player101\" :player{age: 36, name: \"Tony Parker\"}) |\n+-----------------------------------------------------+\n
    "},{"location":"2.quick-start/5.start-stop-service/","title":"Step 2: Manage NebulaGraph Service","text":"

    NebulaGraph supports managing services with scripts.

    "},{"location":"2.quick-start/5.start-stop-service/#manage_services_with_script","title":"Manage services with script","text":"

    You can use the nebula.service script to start, stop, restart, terminate, and check the NebulaGraph services.

    Note

    nebula.service is stored in the /usr/local/nebula/scripts directory by default. If you have customized the path, use the actual path in your environment.

    "},{"location":"2.quick-start/5.start-stop-service/#syntax","title":"Syntax","text":"
    $ sudo /usr/local/nebula/scripts/nebula.service\n[-v] [-c <config_file_path>]\n<start | stop | restart | kill | status>\n<metad | graphd | storaged | all>\n
    Parameter Description -v Display detailed debugging information. -c Specify the configuration file path. The default path is /usr/local/nebula/etc/. start Start the target services. stop Stop the target services. restart Restart the target services. kill Terminate the target services. status Check the status of the target services. metad Set the Meta Service as the target service. graphd Set the Graph Service as the target service. storaged Set the Storage Service as the target service. all Set all the NebulaGraph services as the target services."},{"location":"2.quick-start/5.start-stop-service/#start_nebulagraph","title":"Start NebulaGraph","text":"

    Run the following command to start NebulaGraph.

    $ sudo /usr/local/nebula/scripts/nebula.service start all\n[INFO] Starting nebula-metad...\n[INFO] Done\n[INFO] Starting nebula-graphd...\n[INFO] Done\n[INFO] Starting nebula-storaged...\n[INFO] Done\n
    "},{"location":"2.quick-start/5.start-stop-service/#stop_nebulagraph","title":"Stop NebulaGraph","text":"

    Danger

    Do not run kill -9 to forcibly terminate the processes. Otherwise, there is a low probability of data loss.

    Run the following command to stop NebulaGraph.

    $ sudo /usr/local/nebula/scripts/nebula.service stop all\n[INFO] Stopping nebula-metad...\n[INFO] Done\n[INFO] Stopping nebula-graphd...\n[INFO] Done\n[INFO] Stopping nebula-storaged...\n[INFO] Done\n
    "},{"location":"2.quick-start/5.start-stop-service/#check_the_service_status","title":"Check the service status","text":"

    Run the following command to check the service status of NebulaGraph.

    $ sudo /usr/local/nebula/scripts/nebula.service status all\n
    • NebulaGraph is running normally if the following information is returned.

      INFO] nebula-metad(33fd35e): Running as 29020, Listening on 9559\n[INFO] nebula-graphd(33fd35e): Running as 29095, Listening on 9669\n[WARN] nebula-storaged after v3.0.0 will not start service until it is added to cluster.\n[WARN] See Manage Storage hosts:ADD HOSTS in https://docs.nebula-graph.io/\n[INFO] nebula-storaged(33fd35e): Running as 29147, Listening on 9779\n

      Note

      After starting NebulaGraph, the port of the nebula-storaged process is shown in red. Because the nebula-storaged process waits for the nebula-metad to add the current Storage service during the startup process. The Storage works after it receives the ready signal. Starting from NebulaGraph 3.0.0, the Meta service cannot directly read or write data in the Storage service that you add in the configuration file. The configuration file only registers the Storage service to the Meta service. You must run the ADD HOSTS command to enable the Meta to read and write data in the Storage service. For more information, see Manage Storage hosts.

    • If the returned result is similar to the following one, there is a problem. You may also go to the NebulaGraph community for help.
      [INFO] nebula-metad: Running as 25600, Listening on 9559\n[INFO] nebula-graphd: Exited\n[INFO] nebula-storaged: Running as 25646, Listening on 9779\n

    The NebulaGraph services consist of the Meta Service, Graph Service, and Storage Service. The configuration files for all three services are stored in the /usr/local/nebula/etc/ directory by default. You can check the configuration files according to the returned result to troubleshoot problems.

    "},{"location":"2.quick-start/5.start-stop-service/#next_to_do","title":"Next to do","text":"

    Connect to NebulaGraph

    "},{"location":"2.quick-start/6.cheatsheet-for-ngql/","title":"nGQL cheatsheet","text":""},{"location":"2.quick-start/6.cheatsheet-for-ngql/#functions","title":"Functions","text":"
    • Math functions

      Function Description double abs(double x) Returns the absolute value of the argument. double floor(double x) Returns the largest integer value smaller than or equal to the argument. (Rounds down) double ceil(double x) Returns the smallest integer greater than or equal to the argument. (Rounds up) double round(double x) Returns the integer value nearest to the argument. Returns a number farther away from 0 if the argument is in the middle. double sqrt(double x) Returns the square root of the argument. double cbrt(double x) Returns the cubic root of the argument. double hypot(double x, double y) Returns the hypotenuse of a right-angled triangle. double pow(double x, double y) Returns the result of xy. double exp(double x) Returns the result of ex. double exp2(double x) Returns the result of 2x. double log(double x) Returns the base-e logarithm of the argument. double log2(double x) Returns the base-2 logarithm of the argument. double log10(double x) Returns the base-10 logarithm of the argument. double sin(double x) Returns the sine of the argument. double asin(double x) Returns the inverse sine of the argument. double cos(double x) Returns the cosine of the argument. double acos(double x) Returns the inverse cosine of the argument. double tan(double x) Returns the tangent of the argument. double atan(double x) Returns the inverse tangent of the argument. double rand() Returns a random floating point number in the range from 0 (inclusive) to 1 (exclusive); i.e.[0,1). int rand32(int min, int max) Returns a random 32-bit integer in [min, max).If you set only one argument, it is parsed as max and min is 0 by default.If you set no argument, the system returns a random signed 32-bit integer. int rand64(int min, int max) Returns a random 64-bit integer in [min, max).If you set only one argument, it is parsed as max and min is 0 by default.If you set no argument, the system returns a random signed 64-bit integer. bit_and() Bitwise AND. bit_or() Bitwise OR. bit_xor() Bitwise XOR. int size() Returns the number of elements in a list or a map or the length of a string. int range(int start, int end, int step) Returns a list of integers from [start,end] in the specified steps. step is 1 by default. int sign(double x) Returns the signum of the given number.If the number is 0, the system returns 0.If the number is negative, the system returns -1.If the number is positive, the system returns 1. double e() Returns the base of the natural logarithm, e (2.718281828459045). double pi() Returns the mathematical constant pi (3.141592653589793). double radians() Converts degrees to radians. radians(180) returns 3.141592653589793.
    • Aggregating functions

      Function Description avg() Returns the average value of the argument. count() Syntax: count({expr | *}) .count()returns the number of rows (including NULL). count(expr)returns the number of non-NULL values that meet the expression. count() and size() are different. max() Returns the maximum value. min() Returns the minimum value. collect() The collect() function returns a list containing the values returned by an expression. Using this function aggregates data by merging multiple records or values into a single list. std() Returns the population standard deviation. sum() Returns the sum value.
    • String functions

      Function Description int strcasecmp(string a, string b) Compares string a and b without case sensitivity. When a = b, the return string lower(string a) Returns the argument in lowercase. string toLower(string a) The same as lower(). string upper(string a) Returns the argument in uppercase. string toUpper(string a) The same as upper(). int length(a) Returns the length of the given string in bytes or the length of a path in hops. string trim(string a) Removes leading and trailing spaces. string ltrim(string a) Removes leading spaces. string rtrim(string a) Removes trailing spaces. string left(string a, int count) Returns a substring consisting of count characters from the left side of string right(string a, int count) Returns a substring consisting of count characters from the right side of string lpad(string a, int size, string letters) Left-pads string a with string letters and returns a string rpad(string a, int size, string letters) Right-pads string a with string letters and returns a string substr(string a, int pos, int count) Returns a substring extracting count characters starting from string substring(string a, int pos, int count) The same as substr(). string reverse(string) Returns a string in reverse order. string replace(string a, string b, string c) Replaces string b in string a with string c. list split(string a, string b) Splits string a at string b and returns a list of strings. concat() The concat() function requires at least two or more strings. All the parameters are concatenated into one string.Syntax: concat(string1,string2,...) concat_ws() The concat_ws() function connects two or more strings with a predefined separator. extract() extract() uses regular expression matching to retrieve a single substring or all substrings from a string. json_extract() The json_extract() function converts the specified JSON string to map.
    • Data and time functions

      Function Description int now() Returns the current timestamp of the system. timestamp timestamp() Returns the current timestamp of the system. date date() Returns the current UTC date based on the current system. time time() Returns the current UTC time based on the current system. datetime datetime() Returns the current UTC date and time based on the current system.
    • Schema-related functions

      • For nGQL statements

        Function Description id(vertex) Returns the ID of a vertex. The data type of the result is the same as the vertex ID. map properties(vertex) Returns the properties of a vertex. map properties(edge) Returns the properties of an edge. string type(edge) Returns the edge type of an edge. src(edge) Returns the source vertex ID of an edge. The data type of the result is the same as the vertex ID. dst(edge) Returns the destination vertex ID of an edge. The data type of the result is the same as the vertex ID. int rank(edge) Returns the rank value of an edge. vertex Returns the information of vertices, including VIDs, tags, properties, and values. edge Returns the information of edges, including edge types, source vertices, destination vertices, ranks, properties, and values. vertices Returns the information of vertices in a subgraph. For more information, see GET SUBGRAPH. edges Returns the information of edges in a subgraph. For more information, see GET SUBGRAPH. path Returns the information of a path. For more information, see FIND PATH.
      • For statements compatible with openCypher

        Function Description id(<vertex>) Returns the ID of a vertex. The data type of the result is the same as the vertex ID. list tags(<vertex>) Returns the Tag of a vertex, which serves the same purpose as labels(). list labels(<vertex>) Returns the Tag of a vertex, which serves the same purpose as tags(). This function is used for compatibility with openCypher syntax. map properties(<vertex_or_edge>) Returns the properties of a vertex or an edge. string type(<edge>) Returns the edge type of an edge. src(<edge>) Returns the source vertex ID of an edge. The data type of the result is the same as the vertex ID. dst(<edge>) Returns the destination vertex ID of an edge. The data type of the result is the same as the vertex ID. vertex startNode(<path>) Visits an edge or a path and returns its source vertex ID. string endNode(<path>) Visits an edge or a path and returns its destination vertex ID. int rank(<edge>) Returns the rank value of an edge.
    • List functions

      Function Description keys(expr) Returns a list containing the string representations for all the property names of vertices, edges, or maps. labels(vertex) Returns the list containing all the tags of a vertex. nodes(path) Returns the list containing all the vertices in a path. range(start, end [, step]) Returns the list containing all the fixed-length steps in [start,end]. step is 1 by default. relationships(path) Returns the list containing all the relationships in a path. reverse(list) Returns the list reversing the order of all elements in the original list. tail(list) Returns all the elements of the original list, excluding the first one. head(list) Returns the first element of a list. last(list) Returns the last element of a list. reduce() The reduce() function applies an expression to each element in a list one by one, chains the result to the next iteration by taking it as the initial value, and returns the final result.
    • Type conversion functions

      Function Description bool toBoolean() Converts a string value to a boolean value. float toFloat() Converts an integer or string value to a floating point number. string toString() Converts non-compound types of data, such as numbers, booleans, and so on, to strings. int toInteger() Converts a floating point or string value to an integer value. set toSet() Converts a list or set value to a set value. int hash() The hash() function returns the hash value of the argument. The argument can be a number, a string, a list, a boolean, null, or an expression that evaluates to a value of the preceding data types.
    • Predicate functions

      Predicate functions return true or false. They are most commonly used in WHERE clauses.

      <predicate>(<variable> IN <list> WHERE <condition>)\n
      Function Description exists() Returns true if the specified property exists in the vertex, edge or map. Otherwise, returns false. any() Returns true if the specified predicate holds for at least one element in the given list. Otherwise, returns false. all() Returns true if the specified predicate holds for all elements in the given list. Otherwise, returns false. none() Returns true if the specified predicate holds for no element in the given list. Otherwise, returns false. single() Returns true if the specified predicate holds for exactly one of the elements in the given list. Otherwise, returns false.
    • Conditional expressions functions

      Function Description CASE The CASE expression uses conditions to filter the result of an nGQL query statement. It is usually used in the YIELD and RETURN clauses. The CASE expression will traverse all the conditions. When the first condition is met, the CASE expression stops reading the conditions and returns the result. If no conditions are met, it returns the result in the ELSE clause. If there is no ELSE clause and no conditions are met, it returns NULL. coalesce() Returns the first not null value in all expressions.
    "},{"location":"2.quick-start/6.cheatsheet-for-ngql/#general_queries_statements","title":"General queries statements","text":"
    • MATCH

      MATCH <pattern> [<clause_1>] RETURN <output> [<clause_2>];\n
      Pattern Example Description Match vertices (v) You can use a user-defined variable in a pair of parentheses to represent a vertex in a pattern. For example: (v). Match tags MATCH (v:player) RETURN v You can specify a tag with :<tag_name> after the vertex in a pattern. Match multiple tags MATCH (v:player:team) RETURN v To match vertices with multiple tags, use colons (:). Match vertex properties MATCH (v:player{name:\"Tim Duncan\"}) RETURN v MATCH (v) WITH v, properties(v) as props, keys(properties(v)) as kk WHERE [i in kk where props[i] == \"Tim Duncan\"] RETURN v You can specify a vertex property with {<prop_name>: <prop_value>} after the tag in a pattern; or use a vertex property value to get vertices directly. Match a VID. MATCH (v) WHERE id(v) == 'player101' RETURN v You can use the VID to match a vertex. The id() function can retrieve the VID of a vertex. Match multiple VIDs. MATCH (v:player { name: 'Tim Duncan' })--(v2) WHERE id(v2) IN [\"player101\", \"player102\"] RETURN v2 To match multiple VIDs, use WHERE id(v) IN [vid_list]. Match connected vertices MATCH (v:player{name:\"Tim Duncan\"})--(v2) RETURN v2.player.name AS Name You can use the -- symbol to represent edges of both directions and match vertices connected by these edges. You can add a > or < to the -- symbol to specify the direction of an edge. Match paths MATCH p=(v:player{name:\"Tim Duncan\"})-->(v2) RETURN p Connected vertices and edges form a path. You can use a user-defined variable to name a path as follows. Match edges MATCH (v:player{name:\"Tim Duncan\"})-[e]-(v2) RETURN eMATCH ()<-[e]-() RETURN e Besides using --, -->, or <-- to indicate a nameless edge, you can use a user-defined variable in a pair of square brackets to represent a named edge. For example: -[e]-. Match an edge type MATCH ()-[e:follow]-() RETURN e Just like vertices, you can specify an edge type with :<edge_type> in a pattern. For example: -[e:follow]-. Match edge type properties MATCH (v:player{name:\"Tim Duncan\"})-[e:follow{degree:95}]->(v2) RETURN e MATCH ()-[e]->() WITH e, properties(e) as props, keys(properties(e)) as kk WHERE [i in kk where props[i] == 90] RETURN e You can specify edge type properties with {<prop_name>: <prop_value>} in a pattern. For example: [e:follow{likeness:95}]; or use an edge type property value to get edges directly. Match multiple edge types MATCH (v:player{name:\"Tim Duncan\"})-[e:follow | :serve]->(v2) RETURN e The | symbol can help matching multiple edge types. For example: [e:follow|:serve]. The English colon (:) before the first edge type cannot be omitted, but the English colon before the subsequent edge type can be omitted, such as [e:follow|serve]. Match multiple edges MATCH (v:player{name:\"Tim Duncan\"})-[]->(v2)<-[e:serve]-(v3) RETURN v2, v3 You can extend a pattern to match multiple edges in a path. Match fixed-length paths MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow*2]->(v2) RETURN DISTINCT v2 AS Friends You can use the :<edge_type>*<hop> pattern to match a fixed-length path. hop must be a non-negative integer. The data type of e is the list. Match variable-length paths MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow*1..3]->(v2) RETURN v2 AS Friends minHop: Optional. It represents the minimum length of the path. minHop: must be a non-negative integer. The default value is 1.minHop and maxHop are optional and the default value is 1 and infinity respectively. The data type of e is the list. Match variable-length paths with multiple edge types MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow | serve*2]->(v2) RETURN DISTINCT v2 You can specify multiple edge types in a fixed-length or variable-length pattern. In this case, hop, minHop, and maxHop take effect on all edge types. The data type of e is the list. Retrieve vertex or edge information MATCH (v:player{name:\"Tim Duncan\"}) RETURN vMATCH (v:player{name:\"Tim Duncan\"})-[e]->(v2) RETURN e Use RETURN {<vertex_name> | <edge_name>} to retrieve all the information of a vertex or an edge. Retrieve VIDs MATCH (v:player{name:\"Tim Duncan\"}) RETURN id(v) Use the id() function to retrieve VIDs. Retrieve tags MATCH (v:player{name:\"Tim Duncan\"}) RETURN labels(v) Use the labels() function to retrieve the list of tags on a vertex.To retrieve the nth element in the labels(v) list, use labels(v)[n-1]. Retrieve a single property on a vertex or an edge MATCH (v:player{name:\"Tim Duncan\"}) RETURN v.player.age Use RETURN {<vertex_name> | <edge_name>}.<property> to retrieve a single property.Use AS to specify an alias for a property. Retrieve all properties on a vertex or an edge MATCH p=(v:player{name:\"Tim Duncan\"})-[]->(v2) RETURN properties(v2) Use the properties() function to retrieve all properties on a vertex or an edge. Retrieve edge types MATCH p=(v:player{name:\"Tim Duncan\"})-[e]->() RETURN DISTINCT type(e) Use the type() function to retrieve the matched edge types. Retrieve paths MATCH p=(v:player{name:\"Tim Duncan\"})-[*3]->() RETURN p Use RETURN <path_name> to retrieve all the information of the matched paths. Retrieve vertices in a path MATCH p=(v:player{name:\"Tim Duncan\"})-[]->(v2) RETURN nodes(p) Use the nodes() function to retrieve all vertices in a path. Retrieve edges in a path MATCH p=(v:player{name:\"Tim Duncan\"})-[]->(v2) RETURN relationships(p) Use the relationships() function to retrieve all edges in a path. Retrieve path length MATCH p=(v:player{name:\"Tim Duncan\"})-[*..2]->(v2) RETURN p AS Paths, length(p) AS Length Use the length() function to retrieve the length of a path.
    • OPTIONAL MATCH

      Pattern Example Description Matches patterns against your graph database, just like MATCH does. MATCH (m)-[]->(n) WHERE id(m)==\"player100\" OPTIONAL MATCH (n)-[]->(l) RETURN id(m),id(n),id(l) If no matches are found, OPTIONAL MATCH will use a null for missing parts of the pattern.
    • LOOKUP

      LOOKUP ON {<vertex_tag> | <edge_type>} \n[WHERE <expression> [AND <expression> ...]] \nYIELD <return_list> [AS <alias>]\n
      Pattern Example Description Retrieve vertices LOOKUP ON player WHERE player.name == \"Tony Parker\" YIELD player.name AS name, player.age AS age The following example returns vertices whose name is Tony Parker and the tag is player. Retrieve edges LOOKUP ON follow WHERE follow.degree == 90 YIELD follow.degree Returns edges whose degree is 90 and the edge type is follow. List vertices with a tag LOOKUP ON player YIELD properties(vertex),id(vertex) Shows how to retrieve the VID of all vertices tagged with player. List edges with an edge types LOOKUP ON follow YIELD edge AS e Shows how to retrieve the source Vertex IDs, destination vertex IDs, and ranks of all edges of the follow edge type. Count the numbers of vertices or edges LOOKUP ON player YIELD id(vertex)| YIELD COUNT(*) AS Player_Count Shows how to count the number of vertices tagged with player. Count the numbers of edges LOOKUP ON follow YIELD edge as e| YIELD COUNT(*) AS Like_Count Shows how to count the number of edges of the follow edge type.
    • GO

      GO [[<M> TO] <N> {STEP|STEPS} ] FROM <vertex_list>\nOVER <edge_type_list> [{REVERSELY | BIDIRECT}]\n[ WHERE <conditions> ]\nYIELD [DISTINCT] <return_list>\n[{SAMPLE <sample_list> | LIMIT <limit_list>}]\n[| GROUP BY {col_name | expr | position} YIELD <col_name>]\n[| ORDER BY <expression> [{ASC | DESC}]]\n[| LIMIT [<offset_value>,] <number_rows>]\n
      Example Description GO FROM \"player102\" OVER serve YIELD dst(edge) Returns the teams that player 102 serves. GO 2 STEPS FROM \"player102\" OVER follow YIELD dst(edge) Returns the friends of player 102 with 2 hops. GO FROM \"player100\", \"player102\" OVER serve WHERE properties(edge).start_year > 1995 YIELD DISTINCT properties($$).name AS team_name, properties(edge).start_year AS start_year, properties($^).name AS player_name Adds a filter for the traversal. GO FROM \"player100\" OVER follow, serve YIELD properties(edge).degree, properties(edge).start_year The following example traverses along with multiple edge types. If there is no value for a property, the output is NULL. GO FROM \"player100\" OVER follow REVERSELY YIELD src(edge) AS destination The following example returns the neighbor vertices in the incoming direction of player 100. GO FROM \"player100\" OVER follow REVERSELY YIELD src(edge) AS id | GO FROM $-.id OVER serve WHERE properties($^).age > 20 YIELD properties($^).name AS FriendOf, properties($$).name AS Team The following example retrieves the friends of player 100 and the teams that they serve. GO FROM \"player102\" OVER follow YIELD dst(edge) AS both The following example returns all the neighbor vertices of player 102. GO 2 STEPS FROM \"player100\" OVER follow YIELD src(edge) AS src, dst(edge) AS dst, properties($$).age AS age | GROUP BY $-.dst YIELD $-.dst AS dst, collect_set($-.src) AS src, collect($-.age) AS age The following example the outputs according to age.
    • FETCH

      • Fetch vertex properties

        FETCH PROP ON {<tag_name>[, tag_name ...] | *} \n<vid> [, vid ...] \nYIELD <return_list> [AS <alias>]\n
        Example Description FETCH PROP ON player \"player100\" YIELD properties(vertex) Specify a tag in the FETCH statement to fetch the vertex properties by that tag. FETCH PROP ON player \"player100\" YIELD player.name AS name Use a YIELD clause to specify the properties to be returned. FETCH PROP ON player \"player101\", \"player102\", \"player103\" YIELD properties(vertex) Specify multiple VIDs (vertex IDs) to fetch properties of multiple vertices. Separate the VIDs with commas. FETCH PROP ON player, t1 \"player100\", \"player103\" YIELD properties(vertex) Specify multiple tags in the FETCH statement to fetch the vertex properties by the tags. Separate the tags with commas. FETCH PROP ON * \"player100\", \"player106\", \"team200\" YIELD properties(vertex) Set an asterisk symbol * to fetch properties by all tags in the current graph space.
      • Fetch edge properties

        FETCH PROP ON <edge_type> <src_vid> -> <dst_vid>[@<rank>] [, <src_vid> -> <dst_vid> ...]\nYIELD <output>;\n
        Example Description FETCH PROP ON serve \"player100\" -> \"team204\" YIELD properties(edge) The following statement fetches all the properties of the serve edge that connects vertex \"player100\" and vertex \"team204\". FETCH PROP ON serve \"player100\" -> \"team204\" YIELD serve.start_year Use a YIELD clause to fetch specific properties of an edge. FETCH PROP ON serve \"player100\" -> \"team204\", \"player133\" -> \"team202\" YIELD properties(edge) Specify multiple edge patterns (<src_vid> -> <dst_vid>[@<rank>]) to fetch properties of multiple edges. Separate the edge patterns with commas. FETCH PROP ON serve \"player100\" -> \"team204\"@1 YIELD properties(edge) To fetch on an edge whose rank is not 0, set its rank in the FETCH statement. GO FROM \"player101\" OVER follow YIELD follow._src AS s, follow._dst AS d | FETCH PROP ON follow $-.s -> $-.d YIELD follow.degree The following statement returns the degree values of the follow edges that start from vertex \"player101\". $var = GO FROM \"player101\" OVER follow YIELD follow._src AS s, follow._dst AS d; FETCH PROP ON follow $var.s -> $var.d YIELD follow.degree You can use user-defined variables to construct similar queries.
    • SHOW

      Statement Syntax Example Description SHOW CHARSET SHOW CHARSET SHOW CHARSET Shows the available character sets. SHOW COLLATION SHOW COLLATION SHOW COLLATION Shows the collations supported by NebulaGraph. SHOW CREATE SPACE SHOW CREATE SPACE <space_name> SHOW CREATE SPACE basketballplayer Shows the creating statement of the specified graph space. SHOW CREATE TAG/EDGE SHOW CREATE {TAG <tag_name> | EDGE <edge_name>} SHOW CREATE TAG player Shows the basic information of the specified tag. SHOW HOSTS SHOW HOSTS [GRAPH | STORAGE | META] SHOW HOSTSSHOW HOSTS GRAPH Shows the host and version information of Graph Service, Storage Service, and Meta Service. SHOW INDEX STATUS SHOW {TAG | EDGE} INDEX STATUS SHOW TAG INDEX STATUS Shows the status of jobs that rebuild native indexes, which helps check whether a native index is successfully rebuilt or not. SHOW INDEXES SHOW {TAG | EDGE} INDEXES SHOW TAG INDEXES Shows the names of existing native indexes. SHOW PARTS SHOW PARTS [<part_id>] SHOW PARTS Shows the information of a specified partition or all partitions in a graph space. SHOW ROLES SHOW ROLES IN <space_name> SHOW ROLES in basketballplayer Shows the roles that are assigned to a user account. SHOW SNAPSHOTS SHOW SNAPSHOTS SHOW SNAPSHOTS Shows the information of all the snapshots. SHOW SPACES SHOW SPACES SHOW SPACES Shows existing graph spaces in NebulaGraph. SHOW STATS SHOW STATS SHOW STATS Shows the statistics of the graph space collected by the latest STATS job. SHOW TAGS/EDGES SHOW TAGS | EDGES SHOW TAGS,SHOW EDGES Shows all the tags in the current graph space. SHOW USERS SHOW USERS SHOW USERS Shows the user information. SHOW SESSIONS SHOW SESSIONS SHOW SESSIONS Shows the information of all the sessions. SHOW SESSIONS SHOW SESSION <Session_Id> SHOW SESSION 1623304491050858 Shows a specified session with its ID. SHOW QUERIES SHOW [ALL] QUERIES SHOW QUERIES Shows the information of working queries in the current session. SHOW META LEADER SHOW META LEADER SHOW META LEADER Shows the information of the leader in the current Meta cluster.
    "},{"location":"2.quick-start/6.cheatsheet-for-ngql/#clauses_and_options","title":"Clauses and options","text":"Clause Syntax Example Description GROUP BY GROUP BY <var> YIELD <var>, <aggregation_function(var)> GO FROM \"player100\" OVER follow BIDIRECT YIELD $$.player.name as Name | GROUP BY $-.Name YIELD $-.Name as Player, count(*) AS Name_Count Finds all the vertices connected directly to vertex \"player100\", groups the result set by player names, and counts how many times the name shows up in the result set. LIMIT YIELD <var> [| LIMIT [<offset_value>,] <number_rows>] GO FROM \"player100\" OVER follow REVERSELY YIELD $$.player.name AS Friend, $$.player.age AS Age | ORDER BY $-.Age, $-.Friend | LIMIT 1, 3 Returns the 3 rows of data starting from the second row of the sorted output. SKIP RETURN <var> [SKIP <offset>] [LIMIT <number_rows>] MATCH (v:player{name:\"Tim Duncan\"}) --> (v2) RETURN v2.player.name AS Name, v2.player.age AS Age ORDER BY Age DESC SKIP 1 SKIP can be used alone to set the offset and return the data after the specified position. SAMPLE <go_statement> SAMPLE <sample_list>; GO 3 STEPS FROM \"player100\" OVER * YIELD properties($$).name AS NAME, properties($$).age AS Age SAMPLE [1,2,3]; Takes samples evenly in the result set and returns the specified amount of data. ORDER BY <YIELD clause> ORDER BY <expression> [ASC | DESC] [, <expression> [ASC | DESC] ...] FETCH PROP ON player \"player100\", \"player101\", \"player102\", \"player103\" YIELD player.age AS age, player.name AS name | ORDER BY $-.age ASC, $-.name DESC The ORDER BY clause specifies the order of the rows in the output. RETURN RETURN {<vertex_name>|<edge_name>|<vertex_name>.<property>|<edge_name>.<property>|...} MATCH (v:player) RETURN v.player.name, v.player.age LIMIT 3 Returns the first three rows with values of the vertex properties name and age. TTL CREATE TAG <tag_name>(<property_name_1> <property_value_1>, <property_name_2> <property_value_2>, ...) ttl_duration= <value_int>, ttl_col = <property_name> CREATE TAG t2(a int, b int, c string) ttl_duration= 100, ttl_col = \"a\" Create a tag and set the TTL options. WHERE WHERE {<vertex|edge_alias>.<property_name> {>|==|<|...} <value>...} MATCH (v:player) WHERE v.player.name == \"Tim Duncan\" XOR (v.player.age < 30 AND v.player.name == \"Yao Ming\") OR NOT (v.player.name == \"Yao Ming\" OR v.player.name == \"Tim Duncan\") RETURN v.player.name, v.player.age The WHERE clause filters the output by conditions. The WHERE clause usually works in Native nGQL GO and LOOKUP statements, and OpenCypher MATCH and WITH statements. YIELD YIELD [DISTINCT] <col> [AS <alias>] [, <col> [AS <alias>] ...] [WHERE <conditions>]; GO FROM \"player100\" OVER follow YIELD dst(edge) AS ID | FETCH PROP ON player $-.ID YIELD player.age AS Age | YIELD AVG($-.Age) as Avg_age, count(*)as Num_friends Finds the players that \"player100\" follows and calculates their average age. WITH MATCH $expressions WITH {nodes()|labels()|...} MATCH p=(v:player{name:\"Tim Duncan\"})--() WITH nodes(p) AS n UNWIND n AS n1 RETURN DISTINCT n1 The WITH clause can retrieve the output from a query part, process it, and pass it to the next query part as the input. UNWIND UNWIND <list> AS <alias> <RETURN clause> UNWIND [1,2,3] AS n RETURN n Splits a list into rows."},{"location":"2.quick-start/6.cheatsheet-for-ngql/#space_statements","title":"Space statements","text":"Statement Syntax Example Description CREATE SPACE CREATE SPACE [IF NOT EXISTS] <graph_space_name> ( [partition_num = <partition_number>,] [replica_factor = <replica_number>,] vid_type = {FIXED_STRING(<N>) | INT[64]} ) [COMMENT = '<comment>'] CREATE SPACE my_space_1 (vid_type=FIXED_STRING(30)) Creates a graph space with CREATE SPACE CREATE SPACE <new_graph_space_name> AS <old_graph_space_name> CREATE SPACE my_space_4 as my_space_3 Clone a graph. space. USE USE <graph_space_name> USE space1 Specifies a graph space as the current working graph space for subsequent queries. SHOW SPACES SHOW SPACES SHOW SPACES Lists all the graph spaces in the NebulaGraph examples. DESCRIBE SPACE DESC[RIBE] SPACE <graph_space_name> DESCRIBE SPACE basketballplayer Returns the information about the specified graph space. CLEAR SPACE CLEAR SPACE [IF EXISTS] <graph_space_name> Deletes the vertices and edges in a graph space, but does not delete the graph space itself and the schema information. DROP SPACE DROP SPACE [IF EXISTS] <graph_space_name> DROP SPACE basketballplayer Deletes everything in the specified graph space."},{"location":"2.quick-start/6.cheatsheet-for-ngql/#tag_statements","title":"TAG statements","text":"Statement Syntax Example Description CREATE TAG CREATE TAG [IF NOT EXISTS] <tag_name> ( <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>'] [{, <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']} ...] ) [TTL_DURATION = <ttl_duration>] [TTL_COL = <prop_name>] [COMMENT = '<comment>'] CREATE TAG woman(name string, age int, married bool, salary double, create_time timestamp) TTL_DURATION = 100, TTL_COL = \"create_time\" Creates a tag with the given name in a graph space. DROP TAG DROP TAG [IF EXISTS] <tag_name> DROP TAG test; Drops a tag with the given name in the current working graph space. ALTER TAG ALTER TAG <tag_name> <alter_definition> [, alter_definition] ...] [ttl_definition [, ttl_definition] ... ] [COMMENT = '<comment>'] ALTER TAG t1 ADD (p3 int, p4 string) Alters the structure of a tag with the given name in a graph space. You can add or drop properties, and change the data type of an existing property. You can also set a TTL (Time-To-Live) on a property, or change its TTL duration. SHOW TAGS SHOW TAGS SHOW TAGS Shows the name of all tags in the current graph space. DESCRIBE TAG DESC[RIBE] TAG <tag_name> DESCRIBE TAG player Returns the information about a tag with the given name in a graph space, such as field names, data type, and so on. DELETE TAG DELETE TAG <tag_name_list> FROM <VID> DELETE TAG test1 FROM \"test\" Deletes a tag with the given name on a specified vertex."},{"location":"2.quick-start/6.cheatsheet-for-ngql/#edge_type_statements","title":"Edge type statements","text":"Statement Syntax Example Description CREATE EDGE CREATE EDGE [IF NOT EXISTS] <edge_type_name> ( <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>'] [{, <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']} ...] ) [TTL_DURATION = <ttl_duration>] [TTL_COL = <prop_name>] [COMMENT = '<comment>'] CREATE EDGE e1(p1 string, p2 int, p3 timestamp) TTL_DURATION = 100, TTL_COL = \"p2\" Creates an edge type with the given name in a graph space. DROP EDGE DROP EDGE [IF EXISTS] <edge_type_name> DROP EDGE e1 Drops an edge type with the given name in a graph space. ALTER EDGE ALTER EDGE <edge_type_name> <alter_definition> [, alter_definition] ...] [ttl_definition [, ttl_definition] ... ] [COMMENT = '<comment>'] ALTER EDGE e1 ADD (p3 int, p4 string) Alters the structure of an edge type with the given name in a graph space. SHOW EDGES SHOW EDGES SHOW EDGES Shows all edge types in the current graph space. DESCRIBE EDGE DESC[RIBE] EDGE <edge_type_name> DESCRIBE EDGE follow Returns the information about an edge type with the given name in a graph space, such as field names, data type, and so on."},{"location":"2.quick-start/6.cheatsheet-for-ngql/#vertex_statements","title":"Vertex statements","text":"Statement Syntax Example Description INSERT VERTEX INSERT VERTEX [IF NOT EXISTS] [tag_props, [tag_props] ...] VALUES <vid>: ([prop_value_list]) INSERT VERTEX t2 (name, age) VALUES \"13\":(\"n3\", 12), \"14\":(\"n4\", 8) Inserts one or more vertices into a graph space in NebulaGraph. DELETE VERTEX DELETE VERTEX <vid> [, <vid> ...] DELETE VERTEX \"team1\" Deletes vertices and the related incoming and outgoing edges of the vertices. UPDATE VERTEX UPDATE VERTEX ON <tag_name> <vid> SET <update_prop> [WHEN <condition>] [YIELD <output>] UPDATE VERTEX ON player \"player101\" SET age = age + 2 Updates properties on tags of a vertex. UPSERT VERTEX UPSERT VERTEX ON <tag> <vid> SET <update_prop> [WHEN <condition>] [YIELD <output>] UPSERT VERTEX ON player \"player667\" SET age = 31 The UPSERT statement is a combination of UPDATE and INSERT. You can use UPSERT VERTEX to update the properties of a vertex if it exists or insert a new vertex if it does not exist."},{"location":"2.quick-start/6.cheatsheet-for-ngql/#edge_statements","title":"Edge statements","text":"Statement Syntax Example Description INSERT EDGE INSERT EDGE [IF NOT EXISTS] <edge_type> ( <prop_name_list> ) VALUES <src_vid> -> <dst_vid>[@<rank>] : ( <prop_value_list> ) [, <src_vid> -> <dst_vid>[@<rank>] : ( <prop_value_list> ), ...] INSERT EDGE e2 (name, age) VALUES \"11\"->\"13\":(\"n1\", 1) Inserts an edge or multiple edges into a graph space from a source vertex (given by src_vid) to a destination vertex (given by dst_vid) with a specific rank in NebulaGraph. DELETE EDGE DELETE EDGE <edge_type> <src_vid> -> <dst_vid>[@<rank>] [, <src_vid> -> <dst_vid>[@<rank>] ...] DELETE EDGE serve \"player100\" -> \"team204\"@0 Deletes one edge or multiple edges at a time. UPDATE EDGE UPDATE EDGE ON <edge_type> <src_vid> -> <dst_vid> [@<rank>] SET <update_prop> [WHEN <condition>] [YIELD <output>] UPDATE EDGE ON serve \"player100\" -> \"team204\"@0 SET start_year = start_year + 1 Updates properties on an edge. UPSERT EDGE UPSERT EDGE ON <edge_type> <src_vid> -> <dst_vid> [@rank] SET <update_prop> [WHEN <condition>] [YIELD <properties>] UPSERT EDGE on serve \"player666\" -> \"team200\"@0 SET end_year = 2021 The UPSERT statement is a combination of UPDATE and INSERT. You can use UPSERT EDGE to update the properties of an edge if it exists or insert a new edge if it does not exist."},{"location":"2.quick-start/6.cheatsheet-for-ngql/#index","title":"Index","text":"
    • Native index

      You can use native indexes together with LOOKUP and MATCH statements.

      Statement Syntax Example Description CREATE INDEX CREATE {TAG | EDGE} INDEX [IF NOT EXISTS] <index_name> ON {<tag_name> | <edge_name>} ([<prop_name_list>]) [COMMENT = '<comment>'] CREATE TAG INDEX player_index on player() Add native indexes for the existing tags, edge types, or properties. SHOW CREATE INDEX SHOW CREATE {TAG | EDGE} INDEX <index_name> show create tag index index_2 Shows the statement used when creating a tag or an edge type. It contains detailed information about the index, such as its associated properties. SHOW INDEXES SHOW {TAG | EDGE} INDEXES SHOW TAG INDEXES Shows the defined tag or edge type indexes names in the current graph space. DESCRIBE INDEX DESCRIBE {TAG | EDGE} INDEX <index_name> DESCRIBE TAG INDEX player_index_0 Gets the information about the index with a given name, including the property name (Field) and the property type (Type) of the index. REBUILD INDEX REBUILD {TAG | EDGE} INDEX [<index_name_list>] REBUILD TAG INDEX single_person_index Rebuilds the created tag or edge type index. If data is updated or inserted before the creation of the index, you must rebuild the indexes manually to make sure that the indexes contain the previously added data. SHOW INDEX STATUS SHOW {TAG | EDGE} INDEX STATUS SHOW TAG INDEX STATUS Returns the name of the created tag or edge type index and its status. DROP INDEX DROP {TAG | EDGE} INDEX [IF EXISTS] <index_name> DROP TAG INDEX player_index_0 Removes an existing index from the current graph space.
    • Full-text index

      Syntax Example Description SIGN IN TEXT SERVICE [(<elastic_ip:port> [,<username>, <password>]), (<elastic_ip:port>), ...] SIGN IN TEXT SERVICE (127.0.0.1:9200) The full-text indexes is implemented based on Elasticsearch. After deploying an Elasticsearch cluster, you can use the SIGN IN statement to log in to the Elasticsearch client. SHOW TEXT SEARCH CLIENTS SHOW TEXT SEARCH CLIENTS Shows text search clients. SIGN OUT TEXT SERVICE SIGN OUT TEXT SERVICE Signs out to the text search clients. CREATE FULLTEXT {TAG | EDGE} INDEX <index_name> ON {<tag_name> | <edge_name>} (<prop_name> [,<prop_name>]...) [ANALYZER=\"<analyzer_name>\"] CREATE FULLTEXT TAG INDEX nebula_index_1 ON player(name) Creates full-text indexes. SHOW FULLTEXT INDEXES SHOW FULLTEXT INDEXES Show full-text indexes. REBUILD FULLTEXT INDEX REBUILD FULLTEXT INDEX Rebuild full-text indexes. DROP FULLTEXT INDEX <index_name> DROP FULLTEXT INDEX nebula_index_1 Drop full-text indexes. LOOKUP ON {<tag> | <edge_type>} WHERE ES_QUERY(<index_name>, \"<text>\") YIELD <return_list> [| LIMIT [<offset>,] <number_rows>] LOOKUP ON player WHERE ES_QUERY(fulltext_index_1,\"Chris\") YIELD id(vertex) Use query options.
    "},{"location":"2.quick-start/6.cheatsheet-for-ngql/#subgraph_and_path_statements","title":"Subgraph and path statements","text":"Type Syntax Example Description GET SUBGRAPH GET SUBGRAPH [WITH PROP] [<step_count> {STEP|STEPS}] FROM {<vid>, <vid>...} [{IN | OUT | BOTH} <edge_type>, <edge_type>...] YIELD [VERTICES AS <vertex_alias>] [,EDGES AS <edge_alias>] GET SUBGRAPH 1 STEPS FROM \"player100\" YIELD VERTICES AS nodes, EDGES AS relationships Retrieves information of vertices and edges reachable from the source vertices of the specified edge types and returns information of the subgraph. FIND PATH FIND { SHORTEST | ALL | NOLOOP } PATH [WITH PROP] FROM <vertex_id_list> TO <vertex_id_list> OVER <edge_type_list> [REVERSELY | BIDIRECT] [<WHERE clause>] [UPTO <N> {STEP|STEPS}] YIELD path as <alias> [| ORDER BY $-.path] [| LIMIT <M>] FIND SHORTEST PATH FROM \"player102\" TO \"team204\" OVER * YIELD path as p Finds the paths between the selected source vertices and destination vertices. A returned path is like (<vertex_id>)-[:<edge_type_name>@<rank>]->(<vertex_id)."},{"location":"2.quick-start/6.cheatsheet-for-ngql/#query_tuning_statements","title":"Query tuning statements","text":"Type Syntax Example Description EXPLAIN EXPLAIN [format=\"row\" | \"dot\"] <your_nGQL_statement> EXPLAIN format=\"row\" SHOW TAGSEXPLAIN format=\"dot\" SHOW TAGS Helps output the execution plan of an nGQL statement without executing the statement. PROFILE PROFILE [format=\"row\" | \"dot\"] <your_nGQL_statement> PROFILE format=\"row\" SHOW TAGSEXPLAIN format=\"dot\" SHOW TAGS Executes the statement, then outputs the execution plan as well as the execution profile."},{"location":"2.quick-start/6.cheatsheet-for-ngql/#operation_and_maintenance_statements","title":"Operation and maintenance statements","text":"
    • SUBMIT JOB BALANCE

      Syntax Description BALANCE LEADER Starts a job to balance the distribution of all the storage leaders in graph spaces. It returns the job ID.
    • Job statements

      Syntax Description SUBMIT JOB COMPACT Triggers the long-term RocksDB compact operation. SUBMIT JOB FLUSH Writes the RocksDB memfile in the memory to the hard disk. SUBMIT JOB STATS Starts a job that makes the statistics of the current graph space. Once this job succeeds, you can use the SHOW STATS statement to list the statistics. SHOW JOB <job_id> Shows the information about a specific job and all its tasks in the current graph space. The Meta Service parses a SUBMIT JOB request into multiple tasks and assigns them to the nebula-storaged processes. SHOW JOBS Lists all the unexpired jobs in the current graph space. STOP JOB Stops jobs that are not finished in the current graph space. RECOVER JOB Re-executes the failed jobs in the current graph space and returns the number of recovered jobs.
    • Kill queries

      Syntax Example Description KILL QUERY (session=<session_id>, plan=<plan_id>) KILL QUERY(SESSION=1625553545984255,PLAN=163) Terminates the query being executed, and is often used to terminate slow queries.
    • Kill sessions

      Syntax Example Description KILL {SESSION|SESSIONS} <SessionId> KILL SESSION 1672887983842984 Terminates a single session. SHOW SESSIONS | YIELD $-.SessionId AS sid [WHERE <filter_clause>] | KILL {SESSION|SESSIONS} $-.sid SHOW SESSIONS | YIELD $-.SessionId AS sid, $-.CreateTime as CreateTime | ORDER BY $-.CreateTime ASC | LIMIT 2 | KILL SESSIONS $-.sid Terminates multiple sessions based on specified criteria. SHOW SESSIONS | KILL SESSIONS $-.SessionId SHOW SESSIONS | KILL SESSIONS $-.SessionId Terminates all sessions.
    "},{"location":"20.appendix/0.FAQ/","title":"FAQ","text":"

    This topic lists the frequently asked questions for using NebulaGraph master. You can use the search box in the help center or the search function of the browser to match the questions you are looking for.

    If the solutions described in this topic cannot solve your problems, ask for help on the NebulaGraph forum or submit an issue on GitHub issue.

    "},{"location":"20.appendix/0.FAQ/#about_manual_updates","title":"About manual updates","text":""},{"location":"20.appendix/0.FAQ/#why_is_the_behavior_in_the_manual_not_consistent_with_the_system","title":"\"Why is the behavior in the manual not consistent with the system?\"","text":"

    NebulaGraph is still under development. Its behavior changes from time to time. Users can submit an issue to inform the team if the manual and the system are not consistent.

    Note

    If you find some errors in this topic:

    1. Click the pencil button at the top right side of this page.
    2. Use markdown to fix this error. Then click \"Commit changes\" at the bottom, which will start a Github pull request.
    3. Sign the CLA. This pull request will be merged after the acceptance of at least two reviewers.
    "},{"location":"20.appendix/0.FAQ/#about_legacy_version_compatibility","title":"About legacy version compatibility","text":"

    Compatibility

    Neubla Graph master is not compatible with NebulaGraph 1.x nor 2.0-RC in both data formats and RPC-protocols, and vice versa. The service process may quit if using an lower version client to connect to a higher version server.

    To upgrade data formats, see Upgrade NebulaGraph to the current version. Users must upgrade all clients.

    "},{"location":"20.appendix/0.FAQ/#about_execution_errors","title":"About execution errors","text":""},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_-1005graphmemoryexceeded_-2600","title":"\"How to resolve the error -1005:GraphMemoryExceeded: (-2600)?\"","text":"

    This error is issued by the Memory Tracker when it observes that memory usage has exceeded a set threshold. This mechanism can help avoid service processes from being terminated by the system's OOM (Out of Memory) killer. Steps to resolve:

    1. Check memory usage: First, you need to check the memory usage during the execution of the command. If the memory usage is indeed high, then this error might be expected.

    2. Check the configuration of the Memory Tracker: If the memory usage is not high, check the relevant configurations of the Memory Tracker. These include memory_tracker_untracked_reserved_memory_mb (untracked reserved memory in MB), memory_tracker_limit_ratio (memory limit ratio), and memory_purge_enabled (whether memory purge is enabled). For the configuration of the Memory Tracker, see memory tracker configuration.

    3. Optimize configurations: Adjust these configurations according to the actual situation. For example, if the available memory limit is too low, you can increase the value of memory_tracker_limit_ratio.

    "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_semanticerror_missing_yield_clause","title":"\"How to resolve the error SemanticError: Missing yield clause.?\"","text":"

    Starting with NebulaGraph 3.0.0, the statements LOOKUP, GO, and FETCH must output results with the YIELD clause. For more information, see YIELD.

    "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_host_not_enough","title":"\"How to resolve the error Host not enough!?\"","text":"

    From NebulaGraph version 3.0.0, the Storage services added in the configuration files CANNOT be read or written directly. The configuration files only register the Storage services into the Meta services. You must run the ADD HOSTS command to read and write data on Storage servers. For more information, see Manage Storage hosts.

    "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_to_get_the_property_of_the_vertex_in_vage_should_use_the_format_vartagprop","title":"\"How to resolve the error To get the property of the vertex in 'v.age', should use the format 'var.tag.prop'?\"","text":"

    From NebulaGraph version 3.0.0, patterns support matching multiple tags at the same time, so you need to specify a tag name when querying properties. The original statement RETURN variable_name.property_name is changed to RETURN variable_name.<tag_name>.property_name.

    "},{"location":"20.appendix/0.FAQ/#how_to_resolve_used_memory_hits_the_high_watermark0800000_of_total_system_memory","title":"\"How to resolve Used memory hits the high watermark(0.800000) of total system memory.?\"","text":"

    The error may be caused if the system memory usage is higher than the threshold specified bysystem_memory_high_watermark_ratio, which defaults to 0.8. When the threshold is exceeded, an alarm is triggered and NebulaGraph stops processing queries.

    Possible solutions are as follows:

    • Clean the system memory to make it below the threshold.
    • Modify the Graph configuration. Add the system_memory_high_watermark_ratio parameter to the configuration files of all Graph servers, and set it greater than 0.8, such as 0.9.

    However, the system_memory_high_watermark_ratio parameter is deprecated. It is recommended that you use the Memory Tracker feature instead to limit the memory usage of Graph and Storage services. For more information, see Memory Tracker for Graph service and Memory Tracker for Storage service.

    "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_storage_error_e_rpc_failure","title":"\"How to resolve the error Storage Error E_RPC_FAILURE?\"","text":"

    The reason for this error is usually that the storaged process returns too many data back to the graphd process. Possible solutions are as follows:

    • Modify configuration files: Modify the value of --storage_client_timeout_ms in the nebula-graphd.conf file to extend the connection timeout of the Storage client. This configuration is measured in milliseconds (ms). For example, set --storage_client_timeout_ms=60000. If this parameter is not specified in the nebula-graphd.conf file, specify it manually. Tip: Add --local_config=true at the beginning of the configuration file and restart the service.
    • Optimize the query statement: Reduce queries that scan the entire database. No matter whether LIMIT is used to limit the number of returned results, use the GO statement to rewrite the MATCH statement (the former is optimized, while the latter is not).
    • Check whether the Storaged process has OOM. (dmesg |grep nebula).
    • Use better SSD or memory for the Storage Server.
    • Retry.
    "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_the_leader_has_changed_try_again_later","title":"\"How to resolve the error The leader has changed. Try again later?\"","text":"

    It is a known issue. Just retry 1 to N times, where N is the partition number. The reason is that the meta client needs some heartbeats to update or errors to trigger the new leader information.

    If this error occurs when logging in to NebulaGraph, you can consider using df -h to view the disk space and check whether the local disk is full.

    "},{"location":"20.appendix/0.FAQ/#how_to_resolve_schema_not_exist_xxx","title":"\"How to resolve Schema not exist: xxx?\"","text":"

    If the system returns Schema not exist when querying, make sure that:

    • Whether there is a tag or an edge type in the Schema.
    • Whether the name of the tag or the edge type is a keyword. If it is a keyword, enclose them with backquotes (`). For more information, see Keywords.
    "},{"location":"20.appendix/0.FAQ/#unable_to_download_snapshot_packages_when_compiling_exchange_connectors_or_algorithm","title":"Unable to download SNAPSHOT packages when compiling Exchange, Connectors, or Algorithm","text":"

    Problem description: The system reports Could not find artifact com.vesoft:client:jar:xxx-SNAPSHOT when compiling.

    Cause: There is no local Maven repository for storing or downloading SNAPSHOT packages. The default central repository in Maven only stores official releases, not development versions (SNAPSHOTs).

    Solution: Add the following configuration in the profiles scope of Maven's setting.xml file:

      <profile>\n     <activation>\n        <activeByDefault>true</activeByDefault>\n     </activation>\n     <repositories>\n        <repository>\n            <id>snapshots</id>\n            <url>https://oss.sonatype.org/content/repositories/snapshots/</url>\n            <snapshots>\n               <enabled>true</enabled>\n            </snapshots>\n      </repository>\n     </repositories>\n  </profile>\n
    "},{"location":"20.appendix/0.FAQ/#how_to_resolve_error_-1004_syntaxerror_syntax_error_near","title":"\"How to resolve [ERROR (-1004)]: SyntaxError: syntax error near?\"","text":"

    In most cases, a query statement requires a YIELD or a RETURN. Check your query statement to see if YIELD or RETURN is provided.

    "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_cant_solve_the_start_vids_from_the_sentence","title":"\"How to resolve the error can\u2019t solve the start vids from the sentence?\"","text":"

    The graphd process requires start vids to begin a graph traversal. The start vids can be specified by the user. For example:

    > GO FROM ${vids} ...\n> MATCH (src) WHERE id(src) == ${vids}\n# The \"start vids\" are explicitly given by ${vids}.\n

    It can also be found from a property index. For example:

    # CREATE TAG INDEX IF NOT EXISTS i_player ON player(name(20));\n# REBUILD TAG INDEX i_player;\n\n> LOOKUP ON player WHERE player.name == \"abc\" | ... YIELD ...\n> MATCH (src) WHERE src.name == \"abc\" ...\n# The \"start vids\" are found from the property index \"name\".\n

    Otherwise, an error like can\u2019t solve the start vids from the sentence will be returned.

    "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_wrong_vertex_id_type_1001","title":"\"How to resolve the error Wrong vertex id type: 1001?\"","text":"

    Check whether the VID is INT64 or FIXED_STRING(N) set by create space. For more information, see create space.

    "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_the_vid_must_be_a_64-bit_integer_or_a_string_fitting_space_vertex_id_length_limit","title":"\"How to resolve the error The VID must be a 64-bit integer or a string fitting space vertex id length limit.?\"","text":"

    Check whether the length of the VID exceeds the limitation. For more information, see create space.

    "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_edge_conflict_or_vertex_conflict","title":"\"How to resolve the error edge conflict or vertex conflict?\"","text":"

    NebulaGraph may return such errors when the Storage service receives multiple requests to insert or update the same vertex or edge within milliseconds. Try the failed requests again later.

    "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_rpc_failure_in_metaclient_connection_refused","title":"\"How to resolve the error RPC failure in MetaClient: Connection refused?\"","text":"

    The reason for this error is usually that the metad service status is unusual, or the network of the machine where the metad and graphd services are located is disconnected. Possible solutions are as follows:

    • Check the metad service status on the server where the metad is located. If the service status is unusual, restart the metad service.
    • Use telnet meta-ip:port to check the network status under the server that returns an error.
    • Check the port information in the configuration file. If the port is different from the one used when connecting, use the port in the configuration file or modify the configuration.
    "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_storageclientbaseinl214_request_to_xxxx9779_failed_n6apache6thrift9transport19ttransportexceptione_timed_out_in_nebula-graphinfo","title":"\"How to resolve the error StorageClientBase.inl:214] Request to \"x.x.x.x\":9779 failed: N6apache6thrift9transport19TTransportExceptionE: Timed Out in nebula-graph.INFO?\"","text":"

    The reason for this error may be that the amount of data to be queried is too large, and the storaged process has timed out. Possible solutions are as follows:

    • When importing data, set Compaction manually to make read faster.
    • Extend the RPC connection timeout of the Graph service and the Storage service. Modify the value of --storage_client_timeout_ms in the nebula-graphd.conf file. This configuration is measured in milliseconds (ms). The default value is 60000ms.
    "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_metaclientcpp65_heartbeat_failed_statuswrong_cluster_in_nebula-storagedinfo_or_hbprocessorcpp54_reject_wrong_cluster_host_xxxx9771_in_nebula-metadinfo","title":"\"How to resolve the error MetaClient.cpp:65] Heartbeat failed, status:Wrong cluster! in nebula-storaged.INFO, or HBProcessor.cpp:54] Reject wrong cluster host \"x.x.x.x\":9771! in nebula-metad.INFO?\"","text":"

    The reason for this error may be that the user has modified the IP or the port information of the metad process, or the storage service has joined other clusters before. Possible solutions are as follows:

    Delete the cluster.id file in the installation directory where the storage machine is deployed (the default installation directory is /usr/local/nebula), and restart the storaged service.

    "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_storage_error_more_than_one_request_trying_to_addupdatedelete_one_edgevertex_at_he_same_time","title":"\"How to resolve the error Storage Error: More than one request trying to add/update/delete one edge/vertex at he same time.?\"","text":"

    The reason for this error is that the current NebulaGraph version does not support concurrent requests to the same vertex or edge at the same time. To solve this error, re-execute your commands.

    "},{"location":"20.appendix/0.FAQ/#about_design_and_functions","title":"About design and functions","text":""},{"location":"20.appendix/0.FAQ/#how_is_the_time_spent_value_at_the_end_of_each_return_message_calculated","title":"\"How is the time spent value at the end of each return message calculated?\"","text":"

    Take the returned message of SHOW SPACES as an example:

    nebula> SHOW SPACES;\n+--------------------+\n| Name               |\n+--------------------+\n| \"basketballplayer\" |\n+--------------------+\nGot 1 rows (time spent 1235/1934 us)\n
    • The first number 1235 shows the time spent by the database itself, that is, the time it takes for the query engine to receive a query from the client, fetch the data from the storage server, and perform a series of calculations.
    • The second number 1934 shows the time spent from the client's perspective, that is, the time it takes for the client from sending a request, receiving a response, and displaying the result on the screen.
    "},{"location":"20.appendix/0.FAQ/#why_does_the_port_number_of_the_nebula-storaged_process_keep_showing_red_after_connecting_to_nebulagraph","title":"\"Why does the port number of the nebula-storaged process keep showing red after connecting to NebulaGraph?\"","text":"

    Because the nebula-storaged process waits for nebula-metad to add the current Storage service during the startup process. The Storage works after it receives the ready signal. Starting from NebulaGraph 3.0.0, the Meta service cannot directly read or write data in the Storage service that you add in the configuration file. The configuration file only registers the Storage service to the Meta service. You must run the ADD HOSTS command to enable the Meta to read and write data in the Storage service. For more information, see Manage Storage hosts.

    "},{"location":"20.appendix/0.FAQ/#why_is_there_no_line_separating_each_row_in_the_returned_result_of_nebulagraph_260","title":"\"Why is there no line separating each row in the returned result of NebulaGraph 2.6.0?\"","text":"

    This is caused by the release of NebulaGraph Console 2.6.0, not the change of NebulaGraph core. And it will not affect the content of the returned data itself.

    "},{"location":"20.appendix/0.FAQ/#about_dangling_edges","title":"About dangling edges","text":"

    A dangling edge is an edge that only connects to a single vertex and only one part of the edge connects to the vertex.

    Dangling edges may appear in NebulaGraph master as the design. And there is no MERGE statements of openCypher. The guarantee for dangling edges depends entirely on the application level. For more information, see INSERT VERTEX, DELETE VERTEX, INSERT EDGE, DELETE EDGE.

    "},{"location":"20.appendix/0.FAQ/#can_i_set_replica_factor_as_an_even_number_in_create_space_statements_eg_replica_factor_2","title":"\"Can I set replica_factor as an even number in CREATE SPACE statements, e.g., replica_factor = 2?\"","text":"

    NO.

    The Storage service guarantees its availability based on the Raft consensus protocol. The number of failed replicas must not exceed half of the total replica number.

    When the number of machines is 1, replica_factor can only be set to1.

    When there are enough machines and replica_factor=2, if one replica fails, the Storage service fails. No matter replica_factor=3 or replica_factor=4, if more than one replica fails, the Storage Service fails. To prevent unnecessary waste of resources, we recommend that you set an odd replica number.

    We suggest that you set replica_factor=3 for a production environment and replica_factor=1 for a test environment. Do not use an even number.

    "},{"location":"20.appendix/0.FAQ/#is_stopping_or_killing_slow_queries_supported","title":"\"Is stopping or killing slow queries supported?\"","text":"

    Yes. For more information, see Kill query.

    "},{"location":"20.appendix/0.FAQ/#why_are_the_query_results_different_when_using_go_and_match_to_execute_the_same_semantic_query","title":"\"Why are the query results different when using GO and MATCH to execute the same semantic query?\"","text":"

    The possible reasons are listed as follows.

    • GO statements find the dangling edges.
    • RETURN commands do not specify the sequence.
    • The dense vertex truncation limitation defined by max_edge_returned_per_vertex in the Storage service is triggered.
    • Using different types of paths may cause different query results.

      • GO statements use walk. Both vertices and edges can be repeatedly visited in graph traversal.
      • MATCH statements are compatible with openCypher and use trail. Only vertices can be repeatedly visited in graph traversal.

    The example is as follows.

    All queries that start from A with 5 hops will end at C (A->B->C->D->E->C). If it is 6 hops, the GO statement will end at D (A->B->C->D->E->C->D), because the edge C->D can be visited repeatedly. However, the MATCH statement returns empty, because edges cannot be visited repeatedly.

    Therefore, using GO and MATCH to execute the same semantic query may cause different query results.

    For more information, see Wikipedia.

    "},{"location":"20.appendix/0.FAQ/#how_to_count_the_verticesedges_number_of_each_tagedge_type","title":"\"How to count the vertices/edges number of each tag/edge type?\"","text":"

    See show-stats.

    "},{"location":"20.appendix/0.FAQ/#how_to_get_all_the_verticesedge_of_each_tagedge_type","title":"\"How to get all the vertices/edge of each tag/edge type?\"","text":"
    1. Create and rebuild the index.

      > CREATE TAG INDEX IF NOT EXISTS i_player ON player();\n> REBUILD TAG INDEX IF NOT EXISTS i_player;\n
    2. Use LOOKUP or MATCH. For example:

      > LOOKUP ON player;\n> MATCH (n:player) RETURN n;\n

    For more information, see INDEX, LOOKUP, and MATCH.

    "},{"location":"20.appendix/0.FAQ/#can_non-english_characters_be_used_as_identifiers_such_as_the_names_of_graph_spaces_tags_edge_types_properties_and_indexes","title":"\"Can non-English characters be used as identifiers, such as the names of graph spaces, tags, edge types, properties, and indexes?\"","text":"

    Yes, for more information, see Keywords and reserved words.

    "},{"location":"20.appendix/0.FAQ/#how_to_get_the_out-degreethe_in-degree_of_a_given_vertex","title":"\"How to get the out-degree/the in-degree of a given vertex?\"","text":"

    The out-degree of a vertex refers to the number of edges starting from that vertex, while the in-degree refers to the number of edges pointing to that vertex.

    nebula > MATCH (s)-[e]->() WHERE id(s) == \"given\" RETURN count(e); #Out-degree\nnebula > MATCH (s)<-[e]-() WHERE id(s) == \"given\" RETURN count(e); #In-degree\n

    This is a very slow operation to get the out/in degree since no accelaration can be applied (no indices or caches). It also could be out-of-memory when hitting a supper-node.

    "},{"location":"20.appendix/0.FAQ/#how_to_quickly_get_the_out-degree_and_in-degree_of_all_vertices","title":"\"How to quickly get the out-degree and in-degree of all vertices?\"","text":"

    There is no such command.

    You can use NebulaGraph Algorithm.

    "},{"location":"20.appendix/0.FAQ/#about_operation_and_maintenance","title":"About operation and maintenance","text":""},{"location":"20.appendix/0.FAQ/#the_runtime_log_files_are_too_large_how_to_recycle_the_logs","title":"\"The runtime log files are too large. How to recycle the logs?\"","text":"

    NebulaGraph uses glog for log printing, which does not support log recycling. You can manage runtime logs by using cron jobs or the log management tool logrotate. For operational details, see Log recycling.

    "},{"location":"20.appendix/0.FAQ/#how_to_check_the_nebulagraph_version","title":"\"How to check the NebulaGraph version?\"","text":"

    If the service is running: run command SHOW HOSTS META in nebula-console. See SHOW HOSTS.

    If the service is not running:

    Different installation methods make the method of checking the version different. The instructions are as follows:

    If the service is not running, run the command ./<binary_name> --version to get the version and the Git commit IDs of the NebulaGraph binary files. For example:

    $ ./nebula-graphd --version\n
    • If you deploy NebulaGraph with Docker Compose

      Check the version of NebulaGraph deployed by Docker Compose. The method is similar to the previous method, except that you have to enter the container first. The commands are as follows:

      docker exec -it nebula-docker-compose_graphd_1 bash\ncd bin/\n./nebula-graphd --version\n
    • If you install NebulaGraph with RPM/DEB package

      Run rpm -qa |grep nebula to check the version of NebulaGraph.

    "},{"location":"20.appendix/0.FAQ/#how_to_scale_my_cluster_updown_or_outin","title":"\"How to scale my cluster up/down or out/in?\"","text":"

    Warning

    The cluster scaling function has not been officially released in the community edition. The operations involving SUBMIT JOB BALANCE DATA REMOVE and SUBMIT JOB BALANCE DATA are experimental features in the community edition and the functionality is not stable. Before using it in the community edition, make sure to back up your data first and set enable_experimental_feature and enable_data_balance to true in the Graph configuration file.

    "},{"location":"20.appendix/0.FAQ/#increase_or_decrease_the_number_of_meta_graph_or_storage_nodes","title":"Increase or decrease the number of Meta, Graph, or Storage nodes","text":"
    • NebulaGraph master does not provide any commands or tools to support automatic scale out/in. You can refer to the following steps:

      • Scale out and scale in metad: The metad process can not be scaled out or scale in. The process cannot be moved to a new machine. You cannot add a new metad process to the service.

        Note

        You can use the Meta transfer script tool to migrate Meta services. Note that the Meta-related settings in the configuration files of Storage and Graph services need to be modified correspondingly.

      • Scale in graphd: Remove the IP of the graphd process from the code in the client. Close this graphd process.
      • Scale out graphd: Prepare the binary and config files of the graphd process in the new host. Modify the config files and add all existing addresses of the metad processes. Then start the new graphd process.
      • Scale in storaged: See Balance remove command. After the command is finished, stop this storaged process.

        Caution

        • Before executing this command to migrate the data in the specified Storage node, make sure that the number of other Storage nodes is sufficient to meet the set replication factor. For example, if the replication factor is set to 3, then before executing this command, make sure that the number of other Storage nodes is greater than or equal to 3.
        • If there are multiple space partitions in the Storage node to be migrated, execute this command in each space to migrate all space partitions in the Storage node.
      • Scale out storaged: Prepare the binary and config files of the storaged process in the new host, modify the config files and add all existing addresses of the metad processes. Then register the storaged process to the metad, and then start the new storaged process. For details, see Register storaged services.

        You also need to run Balance Data and Balance leader after scaling in/out storaged.

    "},{"location":"20.appendix/0.FAQ/#add_or_remove_disks_in_the_storage_nodes","title":"Add or remove disks in the Storage nodes","text":"

    Currently, Storage cannot dynamically recognize new added disks. You can add or remove disks in the Storage nodes of the distributed cluster by following these steps:

    1. Execute SUBMIT JOB BALANCE DATA REMOVE <ip:port> to migrate data in the Storage node with the disk to be added or removed to other Storage nodes.

      Caution

      • Before executing this command to migrate the data in the specified Storage node, make sure that the number of other Storage nodes is sufficient to meet the set replication factor. For example, if the replication factor is set to 3, then before executing this command, make sure that the number of other Storage nodes is greater than or equal to 3.
      • If there are multiple space partitions in the Storage node to be migrated, execute this command in each space to migrate all space partitions in the Storage node.
    2. Execute DROP HOSTS <ip:port> to remove the Storage node with the disk to be added or removed.

    3. In the configuration file of all Storage nodes, configure the path of the new disk to be added or removed through --data_path, see Storage configuration file for details.

    4. Execute ADD HOSTS <ip:port> to re-add the Storage node with the disk to be added or removed.
    5. As needed, execute SUBMIT JOB BALANCE DATA to evenly distribute the shards of the current space to all Storage nodes and execute SUBMIT JOB BALANCE LEADER command to balance the leaders in all spaces. Before running the command, select a space.
    "},{"location":"20.appendix/0.FAQ/#after_changing_the_name_of_the_host_the_old_one_keeps_displaying_offline_what_should_i_do","title":"\"After changing the name of the host, the old one keeps displaying OFFLINE. What should I do?\"","text":"

    Hosts with the status of OFFLINE will be automatically deleted after one day.

    "},{"location":"20.appendix/0.FAQ/#how_do_i_view_the_dmp_file","title":"\"How do I view the dmp file?\"","text":"

    The dmp file is an error report file detailing the exit of the process and can be viewed with the gdb utility. the Coredump file is saved in the directory of the startup binary (by default it is /usr/local/nebula) and is generated automatically when the NebulaGraph service crashes.

    1. Check the Core file process name, pid is usually a numeric value.
      $ file core.<pid>\n
    2. Use gdb to debug.
      $ gdb <process.name> core.<pid>\n
    3. View the contents of the file.
      $(gdb) bt\n

    For example:

    $ file core.1316027\ncore.1316027: ELF 64-bit LSB core file, x86-64, version 1 (SYSV), SVR4-style, from '/home/workspace/fork/nebula-debug/bin/nebula-metad --flagfile /home/k', real uid: 1008, effective uid: 1008, real gid: 1008, effective gid: 1008, execfn: '/home/workspace/fork/nebula-debug/bin/nebula-metad', platform: 'x86_64'\n\n$ gdb /home/workspace/fork/nebula-debug/bin/nebula-metad core.1316027\n\n$(gdb) bt\n#0  0x00007f9de58fecf5 in __memcpy_ssse3_back () from /lib64/libc.so.6\n#1  0x0000000000eb2299 in void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char*>(char*, char*, std::forward_iterator_tag) ()\n#2  0x0000000000ef71a7 in nebula::meta::cpp2::QueryDesc::QueryDesc(nebula::meta::cpp2::QueryDesc const&) ()\n...\n

    If you are not clear about the information that dmp prints out, you can post the printout with the OS version, hardware configuration, error logs before and after the Core file was created and actions that may have caused the error on the NebulaGraph forum.

    "},{"location":"20.appendix/0.FAQ/#how_can_i_set_the_nebulagraph_service_to_start_automatically_on_boot_via_systemctl","title":"How can I set the NebulaGraph service to start automatically on boot via systemctl?","text":"
    1. Execute systemctl enable to start the metad, graphd and storaged services.

      [root]# systemctl enable nebula-metad.service\nCreated symlink from /etc/systemd/system/multi-user.target.wants/nebula-metad.service to /usr/lib/systemd/system/nebula-metad.service.\n[root]# systemctl enable nebula-graphd.service\nCreated symlink from /etc/systemd/system/multi-user.target.wants/nebula-graphd.service to /usr/lib/systemd/system/nebula-graphd.service.\n[root]# systemctl enable nebula-storaged.service\nCreated symlink from /etc/systemd/system/multi-user.target.wants/nebula-storaged.service to /usr/lib/systemd/system/nebula-storaged.service.\n
    2. Configure the service files for metad, graphd and storaged to set the service to pull up automatically.

      Caution

      The following points need to be noted when configuring the service file. - The paths of the PIDFile, ExecStart, ExecReload and ExecStop parameters need to be the same as those on the server. - RestartSec is the length of time (in seconds) to wait before restarting, which can be modified according to the actual situation. - (Optional) StartLimitInterval is the unlimited restart, the default is 10 seconds if the restart exceeds 5 times, and set to 0 means unlimited restart. - (Optional) LimitNOFILE is the maximum number of open files for the service, the default is 1024 and can be changed according to the actual situation.

      Configure the service file for the metad service.

      $ vi /usr/lib/systemd/system/nebula-metad.service\n\n[Unit]\nDescription=Nebula Graph Metad Service\nAfter=network.target\n\n[Service ]\nType=forking\nRestart=always\nRestartSec=15s\nPIDFile=/usr/local/nebula/pids/nebula-metad.pid\nExecStart=/usr/local/nebula/scripts/nebula.service start metad\nExecReload=/usr/local/nebula/scripts/nebula.service restart metad\nExecStop=/usr/local/nebula/scripts/nebula.service stop metad\nPrivateTmp=true\nStartLimitInterval=0\nLimitNOFILE=1024\n\n[Install]\nWantedBy=multi-user.target\n

      Configure the service file for the graphd service.

      $ vi /usr/lib/systemd/system/nebula-graphd.service\n[Unit]\nDescription=Nebula Graph Graphd Service\nAfter=network.target\n\n[Service]\nType=forking\nRestart=always\nRestartSec=15s\nPIDFile=/usr/local/nebula/pids/nebula-graphd.pid\nExecStart=/usr/local/nebula/scripts/nebula.service start graphd\nExecReload=/usr/local/nebula/scripts/nebula.service restart graphd\nExecStop=/usr/local/nebula/scripts/nebula.service stop graphd\nPrivateTmp=true\nStartLimitInterval=0\nLimitNOFILE=1024\n\n[Install]\nWantedBy=multi-user.target\n
      Configure the service file for the storaged service.

      $ vi /usr/lib/systemd/system/nebula-storaged.service\n[Unit]\nDescription=Nebula Graph Storaged Service\nAfter=network.target\n\n[Service]\nType=forking\nRestart=always\nRestartSec=15s\nPIDFile=/usr/local/nebula/pids/nebula-storaged.pid\nExecStart=/usr/local/nebula/scripts/nebula.service start storaged\nExecReload=/usr/local/nebula/scripts/nebula.service restart storaged\nExecStop=/usr/local/nebula/scripts/nebula.service stop storaged\nPrivateTmp=true\nStartLimitInterval=0\nLimitNOFILE=1024\n\n[Install]\nWantedBy=multi-user.target\n
    3. Reload the configuration file.

      [root]# sudo systemctl daemon-reload\n
    4. Restart the service.

      $ systemctl restart nebula-metad.service\n$ systemctl restart nebula-graphd.service\n$ systemctl restart nebula-storaged.service\n
    "},{"location":"20.appendix/0.FAQ/#about_connections","title":"About connections","text":""},{"location":"20.appendix/0.FAQ/#which_ports_should_be_opened_on_the_firewalls","title":"\"Which ports should be opened on the firewalls?\"","text":"

    If you have not modified the predefined ports in the Configurations, open the following ports for the NebulaGraph services:

    Service Port Meta 9559, 9560, 19559 Graph 9669, 19669 Storage 9777 ~ 9780, 19779

    If you have customized the configuration files and changed the predefined ports, find the port numbers in your configuration files and open them on the firewalls.

    For more port information, see Port Guide for Company Products.

    "},{"location":"20.appendix/0.FAQ/#how_to_test_whether_a_port_is_open_or_closed","title":"\"How to test whether a port is open or closed?\"","text":"

    You can use telnet as follows to check for port status.

    telnet <ip> <port>\n

    Note

    If you cannot use the telnet command, check if telnet is installed or enabled on your host.

    For example:

    // If the port is open:\n$ telnet 192.168.1.10 9669\nTrying 192.168.1.10...\nConnected to 192.168.1.10.\nEscape character is '^]'.\n\n// If the port is closed or blocked:\n$ telnet 192.168.1.10 9777\nTrying 192.168.1.10...\ntelnet: connect to address 192.168.1.10: Connection refused\n
    "},{"location":"20.appendix/6.eco-tool-version/","title":"Ecosystem tools overview","text":""},{"location":"20.appendix/6.eco-tool-version/#nebulagraph_studio","title":"NebulaGraph Studio","text":"

    NebulaGraph Studio (Studio for short) is a graph database visualization tool that can be accessed through the Web. It can be used with NebulaGraph DBMS to provide one-stop services such as composition, data import, writing nGQL queries, and graph exploration. For details, see What is NebulaGraph Studio.

    Note

    The release of the Studio is independent of NebulaGraph core, and its naming method is also not the same as the core naming rules.

    NebulaGraph version Studio version master v3.9.0"},{"location":"20.appendix/6.eco-tool-version/#nebulagraph_dashboard_community_edition","title":"NebulaGraph Dashboard Community Edition","text":"

    NebulaGraph Dashboard Community Edition (Dashboard for short) is a visualization tool for monitoring the status of machines and services in the NebulaGraph cluster. For details, see What is NebulaGraph Dashboard.

    NebulaGraph version Dashboard Community version master v3.4.0"},{"location":"20.appendix/6.eco-tool-version/#nebulagraph_exchange","title":"NebulaGraph Exchange","text":"

    NebulaGraph Exchange (Exchange for short) is an Apache Spark&trade application for batch migration of data in a cluster to NebulaGraph in a distributed environment. It can support the migration of batch data and streaming data in a variety of different formats. For details, see What is NebulaGraph Exchange.

    NebulaGraph version Exchange Community version master v3.7.0"},{"location":"20.appendix/6.eco-tool-version/#nebulagraph_operator","title":"NebulaGraph Operator","text":"

    NebulaGraph Operator (Operator for short) is a tool to automate the deployment, operation, and maintenance of NebulaGraph clusters on Kubernetes. Building upon the excellent scalability mechanism of Kubernetes, NebulaGraph introduced its operation and maintenance knowledge into the Kubernetes system, which makes NebulaGraph a real cloud-native graph database. For more information, see What is NebulaGraph Operator.

    NebulaGraph version Operator version master v1.8.0"},{"location":"20.appendix/6.eco-tool-version/#nebulagraph_importer","title":"NebulaGraph Importer","text":"

    NebulaGraph Importer (Importer for short) is a CSV file import tool for NebulaGraph. The Importer can read the local CSV file, and then import the data into the NebulaGraph database. For details, see What is NebulaGraph Importer.

    NebulaGraph version Importer version master v4.1.0"},{"location":"20.appendix/6.eco-tool-version/#nebulagraph_spark_connector","title":"NebulaGraph Spark Connector","text":"

    NebulaGraph Spark Connector is a Spark connector that provides the ability to read and write NebulaGraph data in the Spark standard format. NebulaGraph Spark Connector consists of two parts, Reader and Writer. For details, see What is NebulaGraph Spark Connector.

    NebulaGraph version Spark Connector version master v3.6.0"},{"location":"20.appendix/6.eco-tool-version/#nebulagraph_flink_connector","title":"NebulaGraph Flink Connector","text":"

    NebulaGraph Flink Connector is a connector that helps Flink users quickly access NebulaGraph. It supports reading data from the NebulaGraph database or writing data read from other external data sources to the NebulaGraph database. For details, see What is NebulaGraph Flink Connector.

    NebulaGraph version Flink Connector version master v3.5.0"},{"location":"20.appendix/6.eco-tool-version/#nebulagraph_algorithm","title":"NebulaGraph Algorithm","text":"

    NebulaGraph Algorithm (Algorithm for short) is a Spark application based on GraphX, which uses a complete algorithm tool to analyze data in the NebulaGraph database by submitting a Spark task To perform graph computing, use the algorithm under the lib repository through programming to perform graph computing for DataFrame. For details, see What is NebulaGraph Algorithm.

    NebulaGraph version Algorithm version master v3.0.0"},{"location":"20.appendix/6.eco-tool-version/#nebulagraph_console","title":"NebulaGraph Console","text":"

    NebulaGraph Console is the native CLI client of NebulaGraph. For how to use it, see NebulaGraph Console.

    NebulaGraph version Console version master v3.6.0"},{"location":"20.appendix/6.eco-tool-version/#nebulagraph_docker_compose","title":"NebulaGraph Docker Compose","text":"

    Docker Compose can quickly deploy NebulaGraph clusters. For how to use it, please refer to Docker Compose Deployment NebulaGraph.

    NebulaGraph version Docker Compose version master v3.6.0"},{"location":"20.appendix/6.eco-tool-version/#backup_restore","title":"Backup & Restore","text":"

    Backup&Restore (BR for short) is a command line interface (CLI) tool that can help back up the graph space data of NebulaGraph, or restore it through a backup file data.

    NebulaGraph version BR version master v3.6.0"},{"location":"20.appendix/6.eco-tool-version/#nebulagraph_bench","title":"NebulaGraph Bench","text":"

    NebulaGraph Bench is used to test the baseline performance data of NebulaGraph. It uses the standard data set of LDBC.

    NebulaGraph version Bench version master v1.2.0"},{"location":"20.appendix/6.eco-tool-version/#api_and_sdk","title":"API and SDK","text":"

    Compatibility

    Select the latest version of X.Y.* which is the same as the core version.

    NebulaGraph version Language master C++ master Go master Python master Java master HTTP"},{"location":"20.appendix/6.eco-tool-version/#community_contributed_tools","title":"Community contributed tools","text":"

    The following are useful utilities and tools contributed and maintained by community users.

    • Object Relational Mapping (ORM) frameworks
      • NGBATIS: An ORM framework that integrates with the Spring Boot ecosystem
      • graph-ocean: An ORM framework developed based on NebulaGraph Java client
      • nebula-jdbc: An ORM framework that supports JDBC
      • nebula-carina: An ORM framework developed based on NebulaGraph Python client
      • norm: An ORM framework written in Golang
    • Data processing tools
      • nebula-real-time-exchange: Enables real-time data synchronization from MySQL to NebulaGraph
      • nebula-datax-plugin: Provides NebulaGraph's Reader and Writer plugins based on DataX to enable offline data synchronization
    • Quick deployment
      • nebulagraph-docker-ext: Starts NebulaGraph in Docker Desktop in 10 seconds
      • nebulagraph-lite: A NebulaGraph sandbox running in the browser
    • Testing
      • testcontainers-nebula: A lightweight database testing library for Java
    • Clients
      • zio-nebula: Scala client
      • nebula-node: Node.js client
      • nebula-php: PHP client
      • nebula-net: .NET client
      • nebula-rust: Rust client
    • Terminal tools
      • nebula-console-intellij-plugin: A Nebula-console plugin for JetBrains IDEs that supports syntax highlighting, function field auto-completion, data table pagination, and relationship graphs.
    "},{"location":"20.appendix/error-code/","title":"Error code","text":"

    NebulaGraph returns an error code when an error occurs. This topic describes the details of the error code returned.

    Note

    • If an error occurs but no error code is returned, or if the error code description is unclear, we welcome your feedback or suggestions on the forum or GitHub.
    • When the code returned is 0, it means that the operation is successful.
    Error name Error Code Description E_DISCONNECTED -1 Lost connection E_FAIL_TO_CONNECT -2 Unable to establish connection E_RPC_FAILURE -3 RPC failure E_LEADER_CHANGED -4 Raft leader has been changed E_SPACE_NOT_FOUND -5 Graph space does not exist E_TAG_NOT_FOUND -6 Tag does not exist E_EDGE_NOT_FOUND -7 Edge type does not exist E_INDEX_NOT_FOUND -8 Index does not exist E_EDGE_PROP_NOT_FOUND -9 Edge type property does not exist E_TAG_PROP_NOT_FOUND -10 Tag property does not exist E_ROLE_NOT_FOUND -11 The current role does not exist E_CONFIG_NOT_FOUND -12 The current configuration does not exist E_MACHINE_NOT_FOUND -13 The current host does not exist E_LISTENER_NOT_FOUND -15 Listener does not exist E_PART_NOT_FOUND -16 The current partition does not exist E_KEY_NOT_FOUND -17 Key does not exist E_USER_NOT_FOUND -18 User does not exist E_STATS_NOT_FOUND -19 Statistics do not exist E_SERVICE_NOT_FOUND -20 No current service found E_DRAINER_NOT_FOUND -21 Drainer does not exist E_DRAINER_CLIENT_NOT_FOUND -22 Drainer client does not exist E_PART_STOPPED -23 The current partition has already been stopped E_BACKUP_FAILED -24 Backup failed E_BACKUP_EMPTY_TABLE -25 The backed-up table is empty E_BACKUP_TABLE_FAILED -26 Table backup failure E_PARTIAL_RESULT -27 MultiGet could not get all data E_REBUILD_INDEX_FAILED -28 Index rebuild failed E_INVALID_PASSWORD -29 Password is invalid E_FAILED_GET_ABS_PATH -30 Unable to get absolute path E_BAD_USERNAME_PASSWORD -1001 Authentication failed E_SESSION_INVALID -1002 Invalid session E_SESSION_TIMEOUT -1003 Session timeout E_SYNTAX_ERROR -1004 Syntax error E_EXECUTION_ERROR -1005 Execution error E_STATEMENT_EMPTY -1006 Statement is empty E_BAD_PERMISSION -1008 Permission denied E_SEMANTIC_ERROR -1009 Semantic error E_TOO_MANY_CONNECTIONS -1010 Maximum number of connections exceeded E_PARTIAL_SUCCEEDED -1011 Access to storage failed (only some requests succeeded) E_NO_HOSTS -2001 Host does not exist E_EXISTED -2002 Host already exists E_INVALID_HOST -2003 Invalid host E_UNSUPPORTED -2004 The current command, statement, or function is not supported E_NOT_DROP -2005 Not allowed to drop E_CONFIG_IMMUTABLE -2007 Configuration items cannot be changed E_CONFLICT -2008 Parameters conflict with meta data E_INVALID_PARM -2009 Invalid parameter E_WRONGCLUSTER -2010 Wrong cluster E_ZONE_NOT_ENOUGH -2011 Listener conflicts E_ZONE_IS_EMPTY -2012 Host not exist E_SCHEMA_NAME_EXISTS -2013 Schema name already exists E_RELATED_INDEX_EXISTS -2014 There are still indexes related to tag or edge, cannot drop it E_RELATED_SPACE_EXISTS -2015 There are still some space on the host, cannot drop it E_STORE_FAILURE -2021 Failed to store data E_STORE_SEGMENT_ILLEGAL -2022 Illegal storage segment E_BAD_BALANCE_PLAN -2023 Invalid data balancing plan E_BALANCED -2024 The cluster is already in the data balancing status E_NO_RUNNING_BALANCE_PLAN -2025 There is no running data balancing plan E_NO_VALID_HOST -2026 Lack of valid hosts E_CORRUPTED_BALANCE_PLAN -2027 A data balancing plan that has been corrupted E_IMPROPER_ROLE -2030 Failed to recover user role E_INVALID_PARTITION_NUM -2031 Number of invalid partitions E_INVALID_REPLICA_FACTOR -2032 Invalid replica factor E_INVALID_CHARSET -2033 Invalid character set E_INVALID_COLLATE -2034 Invalid character sorting rules E_CHARSET_COLLATE_NOT_MATCH -2035 Character set and character sorting rule mismatch E_SNAPSHOT_FAILURE -2040 Failed to generate a snapshot E_BLOCK_WRITE_FAILURE -2041 Failed to write block data E_ADD_JOB_FAILURE -2044 Failed to add new task E_STOP_JOB_FAILURE -2045 Failed to stop task E_SAVE_JOB_FAILURE -2046 Failed to save task information E_BALANCER_FAILURE -2047 Data balancing failed E_JOB_NOT_FINISHED -2048 The current task has not been completed E_TASK_REPORT_OUT_DATE -2049 Task report failed E_JOB_NOT_IN_SPACE -2050 The current task is not in the graph space E_JOB_NEED_RECOVER -2051 The current task needs to be resumed E_JOB_ALREADY_FINISH -2052 The job status has already been failed or finished E_JOB_SUBMITTED -2053 Job default status E_JOB_NOT_STOPPABLE -2054 The given job do not support stop E_JOB_HAS_NO_TARGET_STORAGE -2055 The leader distribution has not been reported, so can't send task to storage E_INVALID_JOB -2065 Invalid task E_BACKUP_BUILDING_INDEX -2066 Backup terminated (index being created) E_BACKUP_SPACE_NOT_FOUND -2067 Graph space does not exist at the time of backup E_RESTORE_FAILURE -2068 Backup recovery failed E_SESSION_NOT_FOUND -2069 Session does not exist E_LIST_CLUSTER_FAILURE -2070 Failed to get cluster information E_LIST_CLUSTER_GET_ABS_PATH_FAILURE -2071 Failed to get absolute path when getting cluster information E_LIST_CLUSTER_NO_AGENT_FAILURE -2072 Unable to get an agent when getting cluster information E_QUERY_NOT_FOUND -2073 Query not found E_AGENT_HB_FAILUE -2074 Failed to receive heartbeat from agent E_HOST_CAN_NOT_BE_ADDED -2082 The host can not be added for it's not a storage host E_ACCESS_ES_FAILURE -2090 Failed to access elasticsearch E_GRAPH_MEMORY_EXCEEDED -2600 Graph memory exceeded E_CONSENSUS_ERROR -3001 Consensus cannot be reached during an election E_KEY_HAS_EXISTS -3002 Key already exists E_DATA_TYPE_MISMATCH -3003 Data type mismatch E_INVALID_FIELD_VALUE -3004 Invalid field value E_INVALID_OPERATION -3005 Invalid operation E_NOT_NULLABLE -3006 Current value is not allowed to be empty E_FIELD_UNSET -3007 Field value must be set if the field value is NOT NULL or has no default value E_OUT_OF_RANGE -3008 The value is out of the range of the current type E_DATA_CONFLICT_ERROR -3010 Data conflict E_WRITE_STALLED -3011 Writes are delayed E_IMPROPER_DATA_TYPE -3021 Incorrect data type E_INVALID_SPACEVIDLEN -3022 Invalid VID length E_INVALID_FILTER -3031 Invalid filter E_INVALID_UPDATER -3032 Invalid field update E_INVALID_STORE -3033 Invalid KV storage E_INVALID_PEER -3034 Peer invalid E_RETRY_EXHAUSTED -3035 Out of retries E_TRANSFER_LEADER_FAILED -3036 Leader change failed E_INVALID_STAT_TYPE -3037 Invalid stat type E_INVALID_VID -3038 VID is invalid E_LOAD_META_FAILED -3040 Failed to load meta information E_FAILED_TO_CHECKPOINT -3041 Failed to generate checkpoint E_CHECKPOINT_BLOCKED -3042 Generating checkpoint is blocked E_FILTER_OUT -3043 Data is filtered E_INVALID_DATA -3044 Invalid data E_MUTATE_EDGE_CONFLICT -3045 Concurrent write conflicts on the same edge E_MUTATE_TAG_CONFLICT -3046 Concurrent write conflict on the same vertex E_OUTDATED_LOCK -3047 Lock is invalid E_INVALID_TASK_PARA -3051 Invalid task parameter E_USER_CANCEL -3052 The user canceled the task E_TASK_EXECUTION_FAILED -3053 Task execution failed E_PLAN_IS_KILLED -3060 Execution plan was cleared E_NO_TERM -3070 The heartbeat process was not completed when the request was received E_OUTDATED_TERM -3071 Out-of-date heartbeat received from the old leader (the new leader has been elected) E_WRITE_WRITE_CONFLICT -3073 Concurrent write conflicts with later requests E_RAFT_UNKNOWN_PART -3500 Unknown partition E_RAFT_LOG_GAP -3501 Raft logs lag behind E_RAFT_LOG_STALE -3502 Raft logs are out of date E_RAFT_TERM_OUT_OF_DATE -3503 Heartbeat messages are out of date E_RAFT_UNKNOWN_APPEND_LOG -3504 Unknown additional logs E_RAFT_WAITING_SNAPSHOT -3511 Waiting for the snapshot to complete E_RAFT_SENDING_SNAPSHOT -3512 There was an error sending the snapshot E_RAFT_INVALID_PEER -3513 Invalid receiver E_RAFT_NOT_READY -3514 Raft did not start E_RAFT_STOPPED -3515 Raft has stopped E_RAFT_BAD_ROLE -3516 Wrong role E_RAFT_WAL_FAIL -3521 Write to a WAL failed E_RAFT_HOST_STOPPED -3522 The host has stopped E_RAFT_TOO_MANY_REQUESTS -3523 Too many requests E_RAFT_PERSIST_SNAPSHOT_FAILED -3524 Persistent snapshot failed E_RAFT_RPC_EXCEPTION -3525 RPC exception E_RAFT_NO_WAL_FOUND -3526 No WAL logs found E_RAFT_HOST_PAUSED -3527 Host suspended E_RAFT_WRITE_BLOCKED -3528 Writes are blocked E_RAFT_BUFFER_OVERFLOW -3529 Cache overflow E_RAFT_ATOMIC_OP_FAILED -3530 Atomic operation failed E_LEADER_LEASE_FAILED -3531 Leader lease expired E_RAFT_CAUGHT_UP -3532 Data has been synchronized on Raft E_STORAGE_MEMORY_EXCEEDED -3600 Storage memory exceeded E_LOG_GAP -4001 Drainer logs lag behind E_LOG_STALE -4002 Drainer logs are out of date E_INVALID_DRAINER_STORE -4003 The drainer data storage is invalid E_SPACE_MISMATCH -4004 Graph space mismatch E_PART_MISMATCH -4005 Partition mismatch E_DATA_CONFLICT -4006 Data conflict E_REQ_CONFLICT -4007 Request conflict E_DATA_ILLEGAL -4008 Illegal data E_CACHE_CONFIG_ERROR -5001 Cache configuration error E_NOT_ENOUGH_SPACE -5002 Insufficient space E_CACHE_MISS -5003 No cache hit E_CACHE_WRITE_FAILURE -5005 Write cache failed E_NODE_NUMBER_EXCEED_LIMIT -7001 Number of machines exceeded the limit E_PARSING_LICENSE_FAILURE -7002 Failed to resolve certificate E_UNKNOWN -8000 Unknown error"},{"location":"20.appendix/history/","title":"History timeline for NebulaGraph","text":"
    1. 2018.9: dutor wrote and submitted the first line of NebulaGraph database code.

    2. 2019.5: NebulaGraph v0.1.0-alpha was released as open-source.

      NebulaGraph v1.0.0-beta, v1.0.0-rc1, v1.0.0-rc2, v1.0.0-rc3, and v1.0.0-rc4 were released one after another within a year thereafter.

    3. 2019.7: NebulaGraph's debut at HBaseCon1. @dangleptr

    4. 2020.3: NebulaGraph v2.0 was starting developed in the final stage of v1.0 development.

    5. 2020.6: The first major version of NebulaGraph v1.0.0 GA was released.

    6. 2021.3: The second major version of NebulaGraph v2.0 GA was released.

    7. 2021.8: NebulaGraph v2.5.0 was released.

    8. 2021.10: NebulaGraph v2.6.0 was released.

    9. 2022.2: NebulaGraph v3.0.0 was released.

    10. 2022.4: NebulaGraph v3.1.0 was released.

    11. 2022.7: NebulaGraph v3.2.0 was released.

    12. 2022.10: NebulaGraph v3.3.0 was released.

    13. 2023.2: NebulaGraph v3.4.0 was released.

    14. 2023.5: NebulaGraph v3.5.0 was released.

    15. 2023.8: NebulaGraph v3.6.0 was released.

    1. NebulaGraph v1.x supports both RocksDB and HBase as its storage engines. NebulaGraph v2.x removes HBase supports.\u00a0\u21a9

    "},{"location":"20.appendix/port-guide/","title":"Port guide for company products","text":"

    The following are the default ports used by NebulaGraph core and peripheral tools.

    No. Product / Service Type Default Description 1 NebulaGraph TCP 9669 Graph service RPC daemon listening port. Commonly used for client connections to the Graph service. 2 NebulaGraph TCP 19669 Graph service HTTP port. 3 NebulaGraph TCP 19670 Graph service HTTP/2 port. (Deprecated after version 3.x) 4 NebulaGraph TCP 9559, 9560 9559 is the RPC daemon listening port for Meta service. Commonly used by Graph and Storage services for querying and updating metadata in the graph database. The neighboring +1 (9560) port is used for Raft communication between Meta services. 5 NebulaGraph TCP 19559 Meta service HTTP port. 6 NebulaGraph TCP 19560 Meta service HTTP/2 port. (Deprecated after version 3.x) 7 NebulaGraph TCP 9779, 9778, 9780 9779 is the RPC daemon listening port for Storage service. Commonly used by Graph services for data storage-related operations, such as reading, writing, or deleting data. The neighboring ports -1 (9778) and +1 (9780) are also used. 9778: The port used by the Admin service, which receives Meta commands for Storage. 9780: The port used for Raft communication between Storage services. 8 NebulaGraph TCP 19779 Storage service HTTP port. 9 NebulaGraph TCP 19780 Storage service HTTP/2 port. (Deprecated after version 3.x) 10 NebulaGraph TCP 8888 Backup and restore Agent service port. The Agent is a daemon running on each machine in the cluster, responsible for starting and stopping NebulaGraph services and uploading and downloading backup files. 11 NebulaGraph TCP 9789, 9788, 9790 9789 is the Raft Listener port for Full-text index, which reads data from Storage services and writes it to the Elasticsearch cluster.Also the port for Storage Listener in inter-cluster data synchronization, used for synchronizing Storage data from the primary cluster. The neighboring ports -1 (9788) and +1 (9790) are also used.9788: An internal port.9790: The port used for Raft communication. 12 NebulaGraph TCP 9200 NebulaGraph uses this port for HTTP communication with Elasticsearch to perform full-text search queries and manage full-text indexes. 13 NebulaGraph TCP 9569, 9568, 9570 9569 is the Meta Listener port in inter-cluster data synchronization, used for synchronizing Meta data from the primary cluster. The neighboring ports -1 (9568) and +1 (9570) are also used.9568: An internal port.9570: The port used for Raft communication. 14 NebulaGraph TCP 9889, 9888, 9890 Drainer service port in inter-cluster data synchronization, used for synchronizing Storage and Meta data to the primary cluster. The neighboring ports -1 (9888) and +1 (9890) are also used.9888: An internal port.9890: The port used for Raft communication. 15 NebulaGraph Studio TCP 7001 Studio web service port. 16 NebulaGraph Dashboard TCP 8090 Nebula HTTP Gateway dependency service port. Provides an HTTP interface for cluster services to interact with the NebulaGraph database using nGQL statements.0 17 NebulaGraph Dashboard TCP 9200 Nebula Stats Exporter dependency service port. Collects cluster performance metrics, including service IP addresses, versions, and monitoring metrics (such as query count, query latency, heartbeat latency, etc.). 18 NebulaGraph Dashboard TCP 9100 Node Exporter dependency service port. Collects resource information for machines in the cluster, including CPU, memory, load, disk, and traffic. 19 NebulaGraph Dashboard TCP 9090 Prometheus service port. Time-series database for storing monitoring data. 20 NebulaGraph Dashboard TCP 7003 Dashboard Community Edition web service port."},{"location":"20.appendix/release-notes/dashboard-comm-release-note/","title":"NebulaGraph Dashboard Community Edition release notes","text":""},{"location":"20.appendix/release-notes/dashboard-comm-release-note/#community_edition_340","title":"Community Edition 3.4.0","text":"
    • Feature
      • Support the built-in dashboard.service script to manage the Dashboard services with one-click and view the Dashboard version.
      • Support viewing the configuration of Meta services.
    • Enhancement
      • Adjust the directory structure and simplify the deployment steps.
      • Display the names of the monitoring metrics on the overview page of machine.
      • Optimize the calculation of monitoring metrics such as num_queries, and adjust the display to time series aggregation.
    "},{"location":"20.appendix/release-notes/nebula-comm-release-note/","title":"NebulaGraph master release notes","text":""},{"location":"20.appendix/release-notes/nebula-comm-release-note/#features","title":"Features","text":"
    • Enhance the full-text index. #5567 #5575 #5577 #5580 #5584 #5587

      The changes involved are listed below:

      • The original full-text indexing function has been changed from calling Elasticsearch's Term-level queries to Full text queries.
      • In addition to supporting wildcards, regulars, fuzzy matches, etc. (but the syntax has been changed), support for word splitting (relying on Elasticsearch's own word splitter) has been added, and the query results include scoring results. For more syntax, see official Elasticsearch documentation.
    "},{"location":"20.appendix/release-notes/nebula-comm-release-note/#enhancements","title":"Enhancements","text":"
    • Support variables when querying vertex id or property index in a match clause. #5486 #5553
    • Performance
      • Support parallel startup of RocksDB instances to speed up the startup of the Storage service. #5521
      • Optimize the prefix search performance of the RocksDB iterator after the DeleteRange operation. #5525
      • Optimize the appendLog sending logic to avoid impacting write performance when a follower is down. #5571
      • Optimize the performance of the MATCH statement when querying for non-existent properties. #5634
    "},{"location":"20.appendix/release-notes/nebula-comm-release-note/#bug_fixes","title":"Bug fixes","text":"
    • DQL
      • Fix the crash of the Graph service when executing a single big query. #5619
      • Fix the crash of the Graph service when executing the Find All Path statement. #5621 #5640
      • Fix the bug that some expired data is not recycled at the bottom level. #5447 #5622
      • Fix the bug that adding a path variable in the MATCH statement causes the all() function push-down optimization to fail. #5631
      • Fix the bug in the MATCH statement that returns incorrect results when querying the self-loop by the shortest path. #5636
      • Fix the bug that deleting edges by pipe causes the Graph service to crash. #5645
      • Fix the bug in the MATCH statement that returns missing properties of edges when matching multiple hops. #5646
    • Others
      • Fix the bug of meta data inconsistency. #5517
      • Fix the bug that RocksDB ingest causes the leader lease to be invalid. #5534
      • Fix the error in the statistics logic of storage. #5547
      • Fix the bug that causes the web service to crash if a flag is set for an invalid request parameter. #5566
      • Fix the bug that too many logs are printed when listing sessions. #5618
    "},{"location":"20.appendix/release-notes/studio-release-note/","title":"NebulaGraph Studio release notes","text":""},{"location":"20.appendix/release-notes/studio-release-note/#v390_20241","title":"v3.9.0 (2024.1)","text":"
    • Features
      • Supported importing data using AI.
      • Supported the generation of nGQL statements using the AI Assistant.
    • Enhancements
      • Optimized the console feature, including automatic completion of a tag or edge type, quick selection of the historical statements, quick viewing of the schema, etc.
      • Optimized the presentation style of the execution plan.
    "},{"location":"3.ngql-guide/4.job-statements/","title":"Job manager and the JOB statements","text":"

    The long-term tasks run by the Storage Service are called jobs, such as COMPACT, FLUSH, and STATS. These jobs can be time-consuming if the data amount in the graph space is large. The job manager helps you run, show, stop, and recover jobs.

    Note

    All job management commands can be executed only after selecting a graph space.

    "},{"location":"3.ngql-guide/4.job-statements/#submit_job_balance_leader","title":"SUBMIT JOB BALANCE LEADER","text":"

    Starts a job to balance the distribution of all the storage leaders in all graph spaces. It returns the job ID.

    For example:

    nebula> SUBMIT JOB BALANCE LEADER;\n+------------+\n| New Job Id |\n+------------+\n| 33         |\n+------------+\n
    "},{"location":"3.ngql-guide/4.job-statements/#submit_job_compact","title":"SUBMIT JOB COMPACT","text":"

    The SUBMIT JOB COMPACT statement triggers the long-term RocksDB compact operation in the current graph space.

    For more information about compact configuration, see Storage Service configuration.

    For example:

    nebula> SUBMIT JOB COMPACT;\n+------------+\n| New Job Id |\n+------------+\n| 40         |\n+------------+\n
    "},{"location":"3.ngql-guide/4.job-statements/#submit_job_flush","title":"SUBMIT JOB FLUSH","text":"

    The SUBMIT JOB FLUSH statement writes the RocksDB memfile in the memory to the hard disk in the current graph space.

    For example:

    nebula> SUBMIT JOB FLUSH;\n+------------+\n| New Job Id |\n+------------+\n| 96         |\n+------------+\n
    "},{"location":"3.ngql-guide/4.job-statements/#submit_job_stats","title":"SUBMIT JOB STATS","text":"

    The SUBMIT JOB STATS statement starts a job that makes the statistics of the current graph space. Once this job succeeds, you can use the SHOW STATS statement to list the statistics. For more information, see SHOW STATS.

    Note

    If the data stored in the graph space changes, in order to get the latest statistics, you have to run SUBMIT JOB STATS again.

    For example:

    nebula> SUBMIT JOB STATS;\n+------------+\n| New Job Id |\n+------------+\n| 9          |\n+------------+\n
    "},{"location":"3.ngql-guide/4.job-statements/#submit_job_downloadingest","title":"SUBMIT JOB DOWNLOAD/INGEST","text":"

    The SUBMIT JOB DOWNLOAD HDFS and SUBMIT JOB INGEST commands are used to import the SST file into NebulaGraph. For detail, see Import data from SST files.

    The SUBMIT JOB DOWNLOAD HDFS command will download the SST file on the specified HDFS.

    The SUBMIT JOB INGEST command will import the downloaded SST file into NebulaGraph.

    For example:

    nebula> SUBMIT JOB DOWNLOAD HDFS \"hdfs://192.168.10.100:9000/sst\";\n+------------+\n| New Job Id |\n+------------+\n| 10         |\n+------------+\nnebula> SUBMIT JOB INGEST;\n+------------+\n| New Job Id |\n+------------+\n| 11         |\n+------------+\n
    "},{"location":"3.ngql-guide/4.job-statements/#show_job","title":"SHOW JOB","text":"

    The Meta Service parses a SUBMIT JOB request into multiple tasks and assigns them to the nebula-storaged processes. The SHOW JOB <job_id> statement shows the information about a specific job and all its tasks in the current graph space.

    job_id is returned when you run the SUBMIT JOB statement.

    For example:

    nebula> SHOW JOB 8;\n+----------------+-----------------+------------+----------------------------+----------------------------+-------------+\n| Job Id(TaskId) | Command(Dest)   | Status     | Start Time                 | Stop Time                  | Error Code  |\n+----------------+-----------------+------------+----------------------------+----------------------------+-------------+\n| 8              | \"STATS\"         | \"FINISHED\" | 2022-10-18T08:14:45.000000 | 2022-10-18T08:14:45.000000 | \"SUCCEEDED\" |\n| 0              | \"192.168.8.129\" | \"FINISHED\" | 2022-10-18T08:14:45.000000 | 2022-10-18T08:15:13.000000 | \"SUCCEEDED\" |\n| \"Total:1\"      | \"Succeeded:1\"   | \"Failed:0\" | \"In Progress:0\"            | \"\"                         | \"\"          |\n+----------------+-----------------+------------+----------------------------+----------------------------+-------------+\n

    The descriptions are as follows.

    Parameter Description Job Id(TaskId) The first row shows the job ID and the other rows show the task IDs and the last row shows the total number of job-related tasks. Command(Dest) The first row shows the command executed and the other rows show on which storaged processes the task is running. The last row shows the number of successful tasks related to the job. Status Shows the status of the job or task. The last row shows the number of failed tasks related to the job. For more information, see Job status. Start Time Shows a timestamp indicating the time when the job or task enters the RUNNING phase. The last row shows the number of ongoing tasks related to the job. Stop Time Shows a timestamp indicating the time when the job or task gets FINISHED, FAILED, or STOPPED. Error Code The error code of job."},{"location":"3.ngql-guide/4.job-statements/#job_status","title":"Job status","text":"

    The descriptions are as follows.

    Status Description QUEUE The job or task is waiting in a queue. The Start Time is empty in this phase. RUNNING The job or task is running. The Start Time shows the beginning time of this phase. FINISHED The job or task is successfully finished. The Stop Time shows the time when the job or task enters this phase. FAILED The job or task has failed. The Stop Time shows the time when the job or task enters this phase. STOPPED The job or task is stopped without running. The Stop Time shows the time when the job or task enters this phase. REMOVED The job or task is removed.

    The description of switching the status is described as follows.

    Queue -- running -- finished -- removed\n     \\          \\                /\n      \\          \\ -- failed -- /\n       \\          \\            /\n        \\ ---------- stopped -/\n
    "},{"location":"3.ngql-guide/4.job-statements/#show_jobs","title":"SHOW JOBS","text":"

    The SHOW JOBS statement lists all the unexpired jobs in the current graph space.

    The default job expiration interval is one week. You can change it by modifying the job_expired_secs parameter of the Meta Service. For how to modify job_expired_secs, see Meta Service configuration.

    For example:

    nebula> SHOW JOBS;\n+--------+---------------------+------------+----------------------------+----------------------------+\n| Job Id | Command             | Status     | Start Time                 | Stop Time                  |\n+--------+---------------------+------------+----------------------------+----------------------------+\n| 34     | \"STATS\"             | \"FINISHED\" | 2021-11-01T03:32:27.000000 | 2021-11-01T03:32:27.000000 |\n| 33     | \"FLUSH\"             | \"FINISHED\" | 2021-11-01T03:32:15.000000 | 2021-11-01T03:32:15.000000 |\n| 32     | \"COMPACT\"           | \"FINISHED\" | 2021-11-01T03:32:06.000000 | 2021-11-01T03:32:06.000000 |\n| 31     | \"REBUILD_TAG_INDEX\" | \"FINISHED\" | 2021-10-29T05:39:16.000000 | 2021-10-29T05:39:17.000000 |\n| 10     | \"COMPACT\"           | \"FINISHED\" | 2021-10-26T02:27:05.000000 | 2021-10-26T02:27:05.000000 |\n+--------+---------------------+------------+----------------------------+----------------------------+\n
    "},{"location":"3.ngql-guide/4.job-statements/#stop_job","title":"STOP JOB","text":"

    The STOP JOB <job_id> statement stops jobs that are not finished in the current graph space.

    For example:

    nebula> STOP JOB 22;\n+---------------+\n| Result        |\n+---------------+\n| \"Job stopped\" |\n+---------------+\n
    "},{"location":"3.ngql-guide/4.job-statements/#recover_job","title":"RECOVER JOB","text":"

    The RECOVER JOB [<job_id>] statement re-executes the jobs that status is FAILED or STOPPED in the current graph space and returns the number of recovered jobs. If <job_id> is not specified, re-execution is performed from the earliest job and the number of jobs that have been recovered is returned.

    For example:

    nebula> RECOVER JOB;\n+-------------------+\n| Recovered job num |\n+-------------------+\n| 5 job recovered   |\n+-------------------+\n
    "},{"location":"3.ngql-guide/4.job-statements/#faq","title":"FAQ","text":""},{"location":"3.ngql-guide/4.job-statements/#how_to_troubleshoot_job_problems","title":"How to troubleshoot job problems?","text":"

    The SUBMIT JOB operations use the HTTP port. Please check if the HTTP ports on the machines where the Storage Service is running are working well. You can use the following command to debug.

    curl \"http://{storaged-ip}:19779/admin?space={space_name}&op=compact\"\n
    "},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/","title":"NebulaGraph Query Language (nGQL)","text":"

    This topic gives an introduction to the query language of NebulaGraph, nGQL.

    "},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/#what_is_ngql","title":"What is nGQL","text":"

    nGQL is a declarative graph query language for NebulaGraph. It allows expressive and efficient graph patterns. nGQL is designed for both developers and operations professionals. nGQL is an SQL-like query language, so it's easy to learn.

    nGQL is a project in progress. New features and optimizations are done steadily. There can be differences between syntax and implementation. Submit an issue to inform the NebulaGraph team if you find a new issue of this type. NebulaGraph 3.0 or later releases will support openCypher 9.

    "},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/#what_can_ngql_do","title":"What can nGQL do","text":"
    • Supports graph traversals
    • Supports pattern match
    • Supports aggregation
    • Supports graph mutation
    • Supports access control
    • Supports composite queries
    • Supports index
    • Supports most openCypher 9 graph query syntax (but mutations and controls syntax are not supported)
    "},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/#example_data_basketballplayer","title":"Example data Basketballplayer","text":"

    Users can download the example data Basketballplayer in NebulaGraph. After downloading the example data, you can import it to NebulaGraph by using the -f option in NebulaGraph Console.

    Note

    Ensure that you have executed the ADD HOSTS command to add the Storage service to your NebulaGraph cluster before importing the example data. For more information, see Manage Storage hosts.

    "},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/#placeholder_identifiers_and_values","title":"Placeholder identifiers and values","text":"

    Refer to the following standards in nGQL:

    • (Draft) ISO/IEC JTC1 N14279 SC 32 - Database_Languages - GQL
    • (Draft) ISO/IEC JTC1 SC32 N3228 - SQL_Property_Graph_Queries - SQLPGQ
    • OpenCypher 9

    In template code, any token that is not a keyword, a literal value, or punctuation is a placeholder identifier or a placeholder value.

    For details of the symbols in nGQL syntax, see the following table:

    Token Meaning < > name of a syntactic element : formula that defines an element [ ] optional elements { } explicitly specified elements | complete alternative elements ... may be repeated any number of times

    For example, create vertices in nGQL syntax:

    INSERT VERTEX [IF NOT EXISTS] [tag_props, [tag_props] ...]\nVALUES <vid>: ([prop_value_list])\ntag_props:\n  tag_name ([prop_name_list])\nprop_name_list:\n   [prop_name [, prop_name] ...]\nprop_value_list:\n   [prop_value [, prop_value] ...]  \n

    Example statement:

    nebula> CREATE TAG IF NOT EXISTS player(name string, age int);\n
    "},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/#about_opencypher_compatibility","title":"About openCypher compatibility","text":""},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/#native_ngql_and_opencypher","title":"Native nGQL and openCypher","text":"

    Native nGQL is the part of a graph query language designed and implemented by NebulaGraph. OpenCypher is a graph query language maintained by openCypher Implementers Group.

    The latest release is openCypher 9. The compatible parts of openCypher in nGQL are called openCypher compatible sentences (short as openCypher).

    Note

    nGQL = native nGQL + openCypher compatible sentences

    "},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/#is_ngql_compatible_with_opencypher_9_completely","title":"Is nGQL compatible with openCypher 9 completely?","text":"

    NO.

    Compatibility with openCypher

    nGQL is designed to be compatible with part of DQL (match, optional match, with, etc.).

    • It is not planned to be compatible with any DDL, DML, or DCL.
    • It is not planned to be compatible with the Bolt Protocol.
    • It is not planned to be compatible with APOC and GDS.

    Users can search in this manual with the keyword compatibility to find major compatibility issues.

    Multiple known incompatible items are listed in NebulaGraph Issues. Submit an issue with the incompatible tag if you find a new issue of this type.

    "},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/#what_are_the_major_differences_between_ngql_and_opencypher_9","title":"What are the major differences between nGQL and openCypher 9?","text":"

    The following are some major differences (by design incompatible) between nGQL and openCypher.

    Category openCypher 9 nGQL Schema Optional Schema Strong Schema Equality operator = == Math exponentiation ^ ^ is not supported. Use pow(x, y) instead. Edge rank No such concept. edge rank (reference by @) Statement - All DMLs (CREATE, MERGE, etc) of openCypher 9. Label and tag A label is used for searching a vertex, namely an index of vertex. A tag defines the type of a vertex and its corresponding properties. It cannot be used as an index. Pre-compiling and parameterized queries Support Parameterized queries are supported, but precompiling is not.

    Compatibility

    OpenCypher 9 and Cypher have some differences in grammar and licence. For example,

    1. Cypher requires that All Cypher statements are explicitly run within a transaction. While openCypher has no such requirement. And nGQL does not support transactions.

    2. Cypher has a variety of constraints, including Unique node property constraints, Node property existence constraints, Relationship property existence constraints, and Node key constraints. While OpenCypher has no such constraints. As a strong schema system, most of the constraints mentioned above can be solved through schema definitions (including NOT NULL) in nGQL. The only function that cannot be supported is the UNIQUE constraint.

    3. Cypher has APoC, while openCypher 9 does not have APoC. Cypher has Blot protocol support requirements, while openCypher 9 does not.

    "},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/#where_can_i_find_more_ngql_examples","title":"Where can I find more nGQL examples?","text":"

    Users can find more than 2500 nGQL examples in the features directory on the NebulaGraph GitHub page.

    The features directory consists of .feature files. Each file records scenarios that you can use as nGQL examples. Here is an example:

    Feature: Basic match\n\n  Background:\n    Given a graph with space named \"basketballplayer\"\n\n  Scenario: Single node\n    When executing query:\n      \"\"\"\n      MATCH (v:player {name: \"Yao Ming\"}) RETURN v;\n      \"\"\"\n    Then the result should be, in any order, with relax comparison:\n      | v                                                |\n      | (\"player133\" :player{age: 38, name: \"Yao Ming\"}) |\n\n  Scenario: One step\n    When executing query:\n      \"\"\"\n      MATCH (v1:player{name: \"LeBron James\"}) -[r]-> (v2)\n      RETURN type(r) AS Type, v2.player.name AS Name\n      \"\"\"\n    Then the result should be, in any order:\n\n      | Type     | Name        |\n      | \"follow\" | \"Ray Allen\" |\n      | \"serve\"  | \"Lakers\"    |\n      | \"serve\"  | \"Heat\"      |\n      | \"serve\"  | \"Cavaliers\" |\n\nFeature:  Comparison of where clause\n\n  Background:\n    Given a graph with space named \"basketballplayer\"\n\n    Scenario: push edge props filter down\n      When profiling query:\n        \"\"\"\n        GO FROM \"player100\" OVER follow \n        WHERE properties(edge).degree IN [v IN [95,99] WHERE v > 0] \n        YIELD dst(edge), properties(edge).degree\n        \"\"\"\n      Then the result should be, in any order:\n        | follow._dst | follow.degree |\n        | \"player101\" | 95            |\n        | \"player125\" | 95            |\n      And the execution plan should be:\n        | id | name         | dependencies | operator info                                               |\n        | 0  | Project      | 1            |                                                             |\n        | 1  | GetNeighbors | 2            | {\"filter\": \"(properties(edge).degree IN [v IN [95,99] WHERE (v>0)])\"} |\n        | 2  | Start        |              |                                                             |\n

    The keywords in the preceding example are described as follows.

    Keyword Description Feature Describes the topic of the current .feature file. Background Describes the background information of the current .feature file. Given Describes the prerequisites of running the test statements in the current .feature file. Scenario Describes the scenarios. If there is the @skip before one Scenario, this scenario may not work and do not use it as a working example in a production environment. When Describes the nGQL statement to be executed. It can be a executing query or profiling query. Then Describes the expected return results of running the statement in the When clause. If the return results in your environment do not match the results described in the .feature file, submit an issue to inform the NebulaGraph team. And Describes the side effects of running the statement in the When clause. @skip This test case will be skipped. Commonly, the to-be-tested code is not ready.

    Welcome to add more tck case and return automatically to the using statements in CI/CD.

    "},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/#does_it_support_tinkerpop_gremlin","title":"Does it support TinkerPop Gremlin?","text":"

    No. And no plan to support that.

    "},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/#does_nebulagraph_support_w3c_rdf_sparql_or_graphql","title":"Does NebulaGraph support W3C RDF (SPARQL) or GraphQL?","text":"

    No. And no plan to support that.

    The data model of NebulaGraph is the property graph. And as a strong schema system, NebulaGraph does not support RDF.

    NebulaGraph Query Language does not support SPARQL nor GraphQL.

    "},{"location":"3.ngql-guide/1.nGQL-overview/3.graph-patterns/","title":"Patterns","text":"

    Patterns and graph pattern matching are the very heart of a graph query language. This topic will describe the patterns in NebulaGraph, some of which have not yet been implemented.

    "},{"location":"3.ngql-guide/1.nGQL-overview/3.graph-patterns/#patterns_for_vertices","title":"Patterns for vertices","text":"

    A vertex is described using a pair of parentheses and is typically given a name. For example:

    (a)\n

    This simple pattern describes a single vertex and names that vertex using the variable a.

    "},{"location":"3.ngql-guide/1.nGQL-overview/3.graph-patterns/#patterns_for_related_vertices","title":"Patterns for related vertices","text":"

    A more powerful construct is a pattern that describes multiple vertices and edges between them. Patterns describe an edge by employing an arrow between two vertices. For example:

    (a)-[]->(b)\n

    This pattern describes a very simple data structure: two vertices and a single edge from one to the other. In this example, the two vertices are named as a and b respectively and the edge is directed: it goes from a to b.

    This manner of describing vertices and edges can be extended to cover an arbitrary number of vertices and the edges between them, for example:

    (a)-[]->(b)<-[]-(c)\n

    Such a series of connected vertices and edges is called a path.

    Note that the naming of the vertices in these patterns is only necessary when one needs to refer to the same vertex again, either later in the pattern or elsewhere in the query. If not, the name may be omitted as follows:

    (a)-[]->()<-[]-(c)\n
    "},{"location":"3.ngql-guide/1.nGQL-overview/3.graph-patterns/#patterns_for_tags","title":"Patterns for tags","text":"

    Note

    The concept of tag in nGQL has a few differences from that of label in openCypher. For example, users must create a tag before using it. And a tag also defines the type of properties.

    In addition to simply describing the vertices in the graphs, patterns can also describe the tags of the vertices. For example:

    (a:User)-[]->(b)\n

    Patterns can also describe a vertex that has multiple tags. For example:

    (a:User:Admin)-[]->(b)\n
    "},{"location":"3.ngql-guide/1.nGQL-overview/3.graph-patterns/#patterns_for_properties","title":"Patterns for properties","text":"

    Vertices and edges are the fundamental elements in a graph. In nGQL, properties are added to them for richer models.

    In the patterns, the properties can be expressed as follows: some key-value pairs are enclosed in curly brackets and separated by commas, and the tag or edge type to which a property belongs must be specified.

    For example, a vertex with two properties will be like:

    (a:player{name: \"Tim Duncan\", age: 42})\n

    One of the edges that connect to this vertex can be like:

    (a)-[e:follow{degree: 95}]->(b)\n
    "},{"location":"3.ngql-guide/1.nGQL-overview/3.graph-patterns/#patterns_for_edges","title":"Patterns for edges","text":"

    The simplest way to describe an edge is by using the arrow between two vertices, as in the previous examples.

    Users can describe an edge and its direction using the following statement. If users do not care about its direction, the arrowhead can be omitted. For example:

    (a)-[]-(b)\n

    Like vertices, edges can also be named. A pair of square brackets will be used to separate the arrow and the variable will be placed between them. For example:

    (a)-[r]->(b)\n

    Like the tags on vertices, edges can also have types. To describe an edge with a specific type, use the pattern as follows:

    (a)-[r:REL_TYPE]->(b)\n

    An edge can only have one edge type. But if we'd like to describe some data such that the edge could have a set of types, then they can all be listed in the pattern, separating them with the pipe symbol | like this:

    (a)-[r:TYPE1|TYPE2]->(b)\n

    Like vertices, the name of an edge can be omitted. For example:

    (a)-[:REL_TYPE]->(b)\n
    "},{"location":"3.ngql-guide/1.nGQL-overview/3.graph-patterns/#variable-length_pattern","title":"Variable-length pattern","text":"

    Rather than describing a long path using a sequence of many vertex and edge descriptions in a pattern, many edges (and the intermediate vertices) can be described by specifying a length in the edge description of a pattern. For example:

    (a)-[*2]->(b)\n

    The following pattern describes a graph of three vertices and two edges, all in one path (a path of length 2). It is equivalent to:

    (a)-[]->()-[]->(b)\n

    The range of lengths can also be specified. Such edge patterns are called variable-length edges. For example:

    (a)-[*3..5]->(b)\n

    The preceding example defines a path with a minimum length of 3 and a maximum length of 5.

    It describes a graph of either 4 vertices and 3 edges, 5 vertices and 4 edges, or 6 vertices and 5 edges, all connected in a single path.

    You may specify either the upper limit or lower limit of the length range, or neither of them, for example:

    (a)-[*..5]->(b)   // The minimum length is 1 and the maximum length is 5.\n(a)-[*3..]->(b)   // The minimum length is 3 and the maximum length is infinity.\n(a)-[*]->(b)      // The minimum length is 1 and the maximum length is infinity.\n
    "},{"location":"3.ngql-guide/1.nGQL-overview/3.graph-patterns/#assigning_to_path_variables","title":"Assigning to path variables","text":"

    As described above, a series of connected vertices and edges is called a path. nGQL allows paths to be named using variables. For example:

    p = (a)-[*3..5]->(b)\n

    Users can do this in the MATCH statement.

    "},{"location":"3.ngql-guide/1.nGQL-overview/comments/","title":"Comments","text":"

    This topic will describe the comments in nGQL.

    Legacy version compatibility

    • In NebulaGraph 1.x, there are four comment styles: #, --, //, /* */.
    • Since NebulaGraph 2.x, -- cannot be used as comments.
    "},{"location":"3.ngql-guide/1.nGQL-overview/comments/#examples","title":"Examples","text":"
    nebula> RETURN 1+1;     # This comment continues to the end of this line.\nnebula> RETURN 1+1;     // This comment continues to the end of this line.\nnebula> RETURN 1 /* This is an in-line comment. */ + 1 == 2;\nnebula> RETURN 11 +            \\\n/* Multi-line comment.       \\\nUse a backslash as a line break.   \\\n*/ 12;\n

    Note

    • In nGQL statements, the backslash \\ in a line indicates a line break.
    • If a statement starts with # or //, the statement is not executed and the error StatementEmpty is returned.
    "},{"location":"3.ngql-guide/1.nGQL-overview/comments/#opencypher_compatibility","title":"OpenCypher compatibility","text":"
    • In nGQL, you must add a \\ at the end of every line, even in multi-line comments /* */.
    • In openCypher, there is no need to use a \\ as a line break.
    /* openCypher style:\nThe following comment\nspans more than\none line */\nMATCH (n:label)\nRETURN n;\n
    /* nGQL style:  \\\nThe following comment       \\\nspans more than     \\\none line */       \\\nMATCH (n:tag) \\\nRETURN n;\n
    "},{"location":"3.ngql-guide/1.nGQL-overview/identifier-case-sensitivity/","title":"Identifier case sensitivity","text":""},{"location":"3.ngql-guide/1.nGQL-overview/identifier-case-sensitivity/#identifiers_are_case-sensitive","title":"Identifiers are Case-Sensitive","text":"

    The following statements will not work because they refer to two different spaces, i.e. my_space and MY_SPACE.

    nebula> CREATE SPACE IF NOT EXISTS my_space (vid_type=FIXED_STRING(30));\nnebula> use MY_SPACE;\n[ERROR (-1005)]: SpaceNotFound:\n
    "},{"location":"3.ngql-guide/1.nGQL-overview/identifier-case-sensitivity/#keywords_and_reserved_words_are_case-insensitive","title":"Keywords and Reserved Words are Case-Insensitive","text":"

    The following statements are equivalent since show and spaces are keywords.

    nebula> show spaces;  \nnebula> SHOW SPACES;\nnebula> SHOW spaces;\nnebula> show SPACES;\n
    "},{"location":"3.ngql-guide/1.nGQL-overview/identifier-case-sensitivity/#functions_are_case-insensitive","title":"Functions are Case-Insensitive","text":"

    Functions are case-insensitive. For example, count(), COUNT(), and couNT() are equivalent.

    nebula> WITH [NULL, 1, 1, 2, 2] As a \\\n        UNWIND a AS b \\\n        RETURN count(b), COUNT(*), couNT(DISTINCT b);\n+----------+----------+-------------------+\n| count(b) | COUNT(*) | couNT(distinct b) |\n+----------+----------+-------------------+\n| 4        | 5        | 2                 |\n+----------+----------+-------------------+\n
    "},{"location":"3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words/","title":"Keywords","text":"

    Keywords in nGQL are words with particular meanings, such as CREATE and TAG in the CREATE TAG statement. Keywords that require special processing to be used as identifiers are referred to as reserved keywords, while the part of keywords that can be used directly as identifiers are called non-reserved keywords.

    It is not recommended to use keywords to identify schemas. If you must use keywords as identifiers, pay attention to the following restrictions:

    • To use reserved keywords or special characters as identifiers, you must enclose them with backticks (`), such as `AND`. Otherwise, a syntax error is thrown.
    • To use non-reserved keywords as identifiers:

      • If the identifier contains any uppercase letter, you must enclose them with backticks (`), such as `Comment`. Otherwise, the execution succeeds but the system automatically converts the identifier to all lowercase.
      • If the identifier contains all lowercase letters, you do not need to enclose them with backticks (`).

    Note

    Keywords are case-insensitive.

    nebula> CREATE TAG TAG(name string);\n[ERROR (-1004)]: SyntaxError: syntax error near `TAG'\n\nnebula> CREATE TAG `TAG` (name string);\nExecution succeeded\n\nnebula> CREATE TAG SPACE(name string);\nExecution succeeded\n\nnebula> CREATE TAG \u4e2d\u6587(\u7b80\u4f53 string);\nExecution succeeded\n\nnebula> CREATE TAG `\uffe5%special characters&*+-*/` (`q~\uff01\uff08\uff09=  wer` string);\nExecution succeeded\n
    "},{"location":"3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words/#reserved_keywords","title":"Reserved keywords","text":"
    ACROSS\nADD\nALTER\nAND\nAS\nASC\nASCENDING\nBALANCE\nBOOL\nBY\nCASE\nCHANGE\nCOMPACT\nCREATE\nDATE\nDATETIME\nDELETE\nDESC\nDESCENDING\nDESCRIBE\nDISTINCT\nDOUBLE\nDOWNLOAD\nDROP\nDURATION\nEDGE\nEDGES\nEXISTS\nEXPLAIN\nFALSE\nFETCH\nFIND\nFIXED_STRING\nFLOAT\nFLUSH\nFROM\nGEOGRAPHY\nGET\nGO\nGRANT\nIF\nIGNORE_EXISTED_INDEX\nIN\nINDEX\nINDEXES\nINGEST\nINSERT\nINT\nINT16\nINT32\nINT64\nINT8\nINTERSECT\nIS\nJOIN\nLEFT\nLIST\nLOOKUP\nMAP\nMATCH\nMINUS\nNO\nNOT\nNULL\nOF\nON\nOR\nORDER\nOVER\nOVERWRITE\nPATH\nPROP\nREBUILD\nRECOVER\nREMOVE\nRESTART\nRETURN\nREVERSELY\nREVOKE\nSET\nSHOW\nSTEP\nSTEPS\nSTOP\nSTRING\nSUBMIT\nTAG\nTAGS\nTIME\nTIMESTAMP\nTO\nTRUE\nUNION\nUNWIND\nUPDATE\nUPSERT\nUPTO\nUSE\nVERTEX\nVERTICES\nWHEN\nWHERE\nWITH\nXOR\nYIELD\n
    "},{"location":"3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words/#non-reserved_keywords","title":"Non-reserved keywords","text":"
    ACCOUNT\nADMIN\nAGENT\nALL\nALLSHORTESTPATHS\nANALYZER\nANY\nATOMIC_EDGE\nAUTO\nBASIC\nBIDIRECT\nBOTH\nCHARSET\nCLEAR\nCLIENTS\nCOLLATE\nCOLLATION\nCOMMENT\nCONFIGS\nCONTAINS\nDATA\nDBA\nDEFAULT\nDIVIDE\nDRAINER\nDRAINERS\nELASTICSEARCH\nELSE\nEND\nENDS\nES_QUERY\nFORCE\nFORMAT\nFULLTEXT\nGOD\nGRANTS\nGRAPH\nGROUP\nGROUPS\nGUEST\nHDFS\nHOST\nHOSTS\nHTTP\nHTTPS\nINTO\nIP\nJOB\nJOBS\nKILL\nLEADER\nLIMIT\nLINESTRING\nLISTENER\nLOCAL\nMERGE\nMETA\nNEW\nNOLOOP\nNONE\nOFFSET\nOPTIONAL\nOUT\nPART\nPARTITION_NUM\nPARTS\nPASSWORD\nPLAN\nPOINT\nPOLYGON\nPROFILE\nQUERIES\nQUERY\nREAD\nREDUCE\nRENAME\nREPLICA_FACTOR\nRESET\nROLE\nROLES\nS2_MAX_CELLS\nS2_MAX_LEVEL\nSAMPLE\nSEARCH\nSERVICE\nSESSION\nSESSIONS\nSHORTEST\nSHORTESTPATH\nSIGN\nSINGLE\nSKIP\nSNAPSHOT\nSNAPSHOTS\nSPACE\nSPACES\nSTARTS\nSTATS\nSTATUS\nSTORAGE\nSUBGRAPH\nSYNC\nTEXT\nTEXT_SEARCH\nTHEN\nTOP\nTTL_COL\nTTL_DURATION\nUSER\nUSERS\nUUID\nVALUE\nVALUES\nVARIABLES\nVID_TYPE\nWHITELIST\nWRITE\nZONE\nZONES\n
    "},{"location":"3.ngql-guide/1.nGQL-overview/ngql-style-guide/","title":"nGQL style guide","text":"

    nGQL does not have strict formatting requirements, but creating nGQL statements according to an appropriate and uniform style can improve readability and avoid ambiguity. Using the same nGQL style in the same organization or project helps reduce maintenance costs and avoid problems caused by format confusion or misunderstanding. This topic will provide a style guide for writing nGQL statements.

    Compatibility

    The styles of nGQL and Cypher Style Guide are different.

    "},{"location":"3.ngql-guide/1.nGQL-overview/ngql-style-guide/#newline","title":"Newline","text":"
    1. Start a new line to write a clause.

      Not recommended:

      GO FROM \"player100\" OVER follow REVERSELY YIELD src(edge) AS id;\n

      Recommended:

      GO FROM \"player100\" \\\nOVER follow REVERSELY \\\nYIELD src(edge) AS id;\n
    2. Start a new line to write different statements in a composite statement.

      Not recommended:

      GO FROM \"player100\" OVER follow REVERSELY YIELD src(edge) AS id | GO FROM $-.id \\\nOVER serve WHERE properties($^).age > 20 YIELD properties($^).name AS FriendOf, properties($$).name AS Team;\n

      Recommended:

      GO FROM \"player100\" \\\nOVER follow REVERSELY \\\nYIELD src(edge) AS id | \\\nGO FROM $-.id OVER serve \\\nWHERE properties($^).age > 20 \\\nYIELD properties($^).name AS FriendOf, properties($$).name AS Team;\n
    3. If the clause exceeds 80 characters, start a new line at the appropriate place.

      Not recommended:

      MATCH (v:player{name:\"Tim Duncan\"})-[e]->(v2) \\\nWHERE (v2.player.name STARTS WITH \"Y\" AND v2.player.age > 35 AND v2.player.age < v.player.age) OR (v2.player.name STARTS WITH \"T\" AND v2.player.age < 45 AND v2.player.age > v.player.age) \\\nRETURN v2;\n

      Recommended:

      MATCH (v:player{name:\"Tim Duncan\"})-[e]->(v2) \\\nWHERE (v2.player.name STARTS WITH \"Y\" AND v2.player.age > 35 AND v2.player.age < v.player.age) \\\nOR (v2.player.name STARTS WITH \"T\" AND v2.player.age < 45 AND v2.player.age > v.player.age) \\\nRETURN v2;\n

    Note

    If needed, you can also start a new line for better understanding, even if the clause does not exceed 80 characters.

    "},{"location":"3.ngql-guide/1.nGQL-overview/ngql-style-guide/#identifier_naming","title":"Identifier naming","text":"

    In nGQL statements, characters other than keywords, punctuation marks, and blanks are all identifiers. Recommended methods to name the identifiers are as follows.

    1. Use singular nouns to name tags, and use the base form of verbs or verb phrases to form Edge types.

      Not recommended:

      MATCH p=(v:players)-[e:are_following]-(v2) \\\nRETURN nodes(p);\n

      Recommended:

      MATCH p=(v:player)-[e:follow]-(v2) \\\nRETURN nodes(p);\n
    2. Use the snake case to name identifiers, and connect words with underscores (_) with all the letters lowercase.

      Not recommended:

      MATCH (v:basketballTeam) \\\nRETURN v;\n

      Recommended:

      MATCH (v:basketball_team) \\\nRETURN v;\n
    3. Use uppercase keywords and lowercase variables.

      Not recommended:

      match (V:player) return V limit 5;\n

      Recommended:

      MATCH (v:player) RETURN v LIMIT 5;\n
    "},{"location":"3.ngql-guide/1.nGQL-overview/ngql-style-guide/#pattern","title":"Pattern","text":"
    1. Start a new line on the right side of the arrow indicating an edge when writing patterns.

      Not recommended:

      MATCH (v:player{name: \"Tim Duncan\", age: 42}) \\\n-[e:follow]->()-[e:serve]->()<--(v2) \\\nRETURN v, e, v2;\n

      Recommended:

      MATCH (v:player{name: \"Tim Duncan\", age: 42})-[e:follow]-> \\\n()-[e:serve]->()<--(v2) \\\nRETURN v, e, v2;\n
    2. Anonymize the vertices and edges that do not need to be queried.

      Not recommended:

      MATCH (v:player)-[e:follow]->(v2) \\\nRETURN v;\n

      Recommended:

      MATCH (v:player)-[:follow]->() \\\nRETURN v;\n
    3. Place named vertices in front of anonymous vertices.

      Not recommended:

      MATCH ()-[:follow]->(v) \\\nRETURN v;\n

      Recommended:

      MATCH (v)<-[:follow]-() \\\nRETURN v;\n
    "},{"location":"3.ngql-guide/1.nGQL-overview/ngql-style-guide/#string","title":"String","text":"

    The strings should be surrounded by double quotes.

    Not recommended:

    RETURN 'Hello Nebula!';\n

    Recommended:

    RETURN \"Hello Nebula!\\\"123\\\"\";\n

    Note

    When single or double quotes need to be nested in a string, use a backslash () to escape. For example:

    RETURN \"\\\"NebulaGraph is amazing,\\\" the user says.\";\n
    "},{"location":"3.ngql-guide/1.nGQL-overview/ngql-style-guide/#statement_termination","title":"Statement termination","text":"
    1. End the nGQL statements with an English semicolon (;).

      Not recommended:

      FETCH PROP ON player \"player100\" YIELD properties(vertex)\n

      Recommended:

      FETCH PROP ON player \"player100\" YIELD properties(vertex);\n
    2. Use a pipe (|) to separate a composite statement, and end the statement with an English semicolon at the end of the last line. Using an English semicolon before a pipe will cause the statement to fail.

      Not supported:

      GO FROM \"player100\" \\\nOVER follow \\\nYIELD dst(edge) AS id; | \\\nGO FROM $-.id \\\nOVER serve \\\nYIELD properties($$).name AS Team, properties($^).name AS Player;\n

      Supported:

      GO FROM \"player100\" \\\nOVER follow \\\nYIELD dst(edge) AS id | \\\nGO FROM $-.id \\\nOVER serve \\\nYIELD properties($$).name AS Team, properties($^).name AS Player;\n
    3. In a composite statement that contains user-defined variables, use an English semicolon to end the statements that define the variables. If you do not follow the rules to add a semicolon or use a pipe to end the composite statement, the execution will fail.

      Not supported:

      $var = GO FROM \"player100\" \\\nOVER follow \\\nYIELD follow._dst AS id \\\nGO FROM $var.id \\\nOVER serve \\\nYIELD $$.team.name AS Team, $^.player.name AS Player;\n

      Not supported:

      $var = GO FROM \"player100\" \\\nOVER follow \\\nYIELD follow._dst AS id | \\\nGO FROM $var.id \\\nOVER serve \\\nYIELD $$.team.name AS Team, $^.player.name AS Player;\n

      Supported:

      $var = GO FROM \"player100\" \\\nOVER follow \\\nYIELD follow._dst AS id; \\\nGO FROM $var.id \\\nOVER serve \\\nYIELD $$.team.name AS Team, $^.player.name AS Player;\n
    "},{"location":"3.ngql-guide/10.tag-statements/1.create-tag/","title":"CREATE TAG","text":"

    CREATE TAG creates a tag with the given name in a graph space.

    "},{"location":"3.ngql-guide/10.tag-statements/1.create-tag/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

    Tags in nGQL are similar to labels in openCypher. But they are also quite different. For example, the ways to create them are different.

    • In openCypher, labels are created together with vertices in CREATE statements.
    • In nGQL, tags are created separately using CREATE TAG statements. Tags in nGQL are more like tables in MySQL.
    "},{"location":"3.ngql-guide/10.tag-statements/1.create-tag/#prerequisites","title":"Prerequisites","text":"

    Running the CREATE TAG statement requires some privileges for the graph space. Otherwise, NebulaGraph throws an error.

    "},{"location":"3.ngql-guide/10.tag-statements/1.create-tag/#syntax","title":"Syntax","text":"

    To create a tag in a specific graph space, you must specify the current working space with the USE statement.

    CREATE TAG [IF NOT EXISTS] <tag_name>\n    (\n      <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']\n      [{, <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']} ...] \n    )\n    [TTL_DURATION = <ttl_duration>]\n    [TTL_COL = <prop_name>]\n    [COMMENT = '<comment>'];\n
    Parameter Description IF NOT EXISTS Detects if the tag that you want to create exists. If it does not exist, a new one will be created. The tag existence detection here only compares the tag names (excluding properties). <tag_name> 1. Each tag name in the graph space must be unique. 2. Tag names cannot be modified after they are set. 3. By default, the name only supports 1-4 byte UTF-8 encoded characters, including English letters (case sensitive), numbers, Chinese characters, etc. However, it cannot include special characters other than the underscore (_), and cannot start with a number. 4. To use special characters, reserved keywords, or start with a number, quote the entire name with backticks (`) and do not include periods (.) within the pair of backticks (`). For more information, see Keywords and reserved words. Note:1. If you name a tag in Chinese and encounter a SyntaxError, you need to quote the Chinese characters with backticks (`). 2. To include a backtick (`) in a tag name, use a backslash to escape the backtick, such as \\`; to include a backslash, the backslash itself also needs to be escaped, such as \\ . <prop_name> The name of the property. It must be unique for each tag. The rules for permitted property names are the same as those for tag names. <data_type> Shows the data type of each property. For a full description of the property data types, see Data types and Boolean. NULL | NOT NULL Specifies if the property supports NULL | NOT NULL. The default value is NULL. DEFAULT Specifies a default value for a property. The default value can be a literal value or an expression supported by NebulaGraph. If no value is specified, the default value is used when inserting a new vertex. COMMENT The remarks of a certain property or the tag itself. The maximum length is 256 bytes. By default, there will be no comments on a tag. TTL_DURATION Specifies the life cycle for the property. The property that exceeds the specified TTL expires. The expiration threshold is the TTL_COL value plus the TTL_DURATION. The default value of TTL_DURATION is 0. It means the data never expires. TTL_COL Specifies the property to set a timeout on. The data type of the property must be int or timestamp. A tag can only specify one field as TTL_COL. For more information on TTL, see TTL options."},{"location":"3.ngql-guide/10.tag-statements/1.create-tag/#examples","title":"Examples","text":"
    nebula> CREATE TAG IF NOT EXISTS player(name string, age int);\n\n# The following example creates a tag with no properties.\nnebula> CREATE TAG IF NOT EXISTS no_property();\u00a0\n\n# The following example creates a tag with a default value.\nnebula> CREATE TAG IF NOT EXISTS player_with_default(name string, age int DEFAULT 20);\n\n# In the following example, the TTL of the create_time field is set to be 100 seconds.\nnebula> CREATE TAG IF NOT EXISTS woman(name string, age int, \\\n        married bool, salary double, create_time timestamp) \\\n        TTL_DURATION = 100, TTL_COL = \"create_time\";\n
    "},{"location":"3.ngql-guide/10.tag-statements/1.create-tag/#implementation_of_the_operation","title":"Implementation of the operation","text":"

    Trying to use a newly created tag may fail because the creation of the tag is implemented asynchronously. To make sure the follow-up operations work as expected, Wait for two heartbeat cycles, i.e., 20 seconds.

    To change the heartbeat interval, modify the heartbeat_interval_secs parameter in the configuration files for all services.

    "},{"location":"3.ngql-guide/10.tag-statements/2.drop-tag/","title":"DROP TAG","text":"

    DROP TAG drops a tag with the given name in the current working graph space.

    A vertex can have one or more tags.

    • If a vertex has only one tag, the vertex CANNOT be accessed after you drop it. The vertex will be dropped in the next compaction. But its edges are available, this operation will result in dangling edges.
    • If a vertex has multiple tags, the vertex is still accessible after you drop one of them. But all the properties defined by this dropped tag CANNOT be accessed.

    This operation only deletes the Schema data. All the files or directories in the disk will not be deleted directly until the next compaction.

    Compatibility

    In NebulaGraph master, inserting vertex without tag is not supported by default. If you want to use the vertex without tags, add --graph_use_vertex_key=true to the configuration files (nebula-graphd.conf) of all Graph services in the cluster, and add --use_vertex_key=true to the configuration files (nebula-storaged.conf) of all Storage services in the cluster.

    "},{"location":"3.ngql-guide/10.tag-statements/2.drop-tag/#prerequisites","title":"Prerequisites","text":"
    • Running the DROP TAG statement requires some privileges for the graph space. Otherwise, NebulaGraph throws an error.
    • Before you drop a tag, make sure that the tag does not have any indexes. Otherwise, the conflict error ([ERROR (-1005)]: Conflict!) will be returned when you run the DROP TAG statement. To drop an index, see DROP INDEX.
    "},{"location":"3.ngql-guide/10.tag-statements/2.drop-tag/#syntax","title":"Syntax","text":"
    DROP TAG [IF EXISTS] <tag_name>;\n
    • IF NOT EXISTS: Detects if the tag that you want to drop exists. Only when it exists will it be dropped.
    • tag_name: Specifies the tag name that you want to drop. You can drop only one tag in one statement.
    "},{"location":"3.ngql-guide/10.tag-statements/2.drop-tag/#example","title":"Example","text":"
    nebula> CREATE TAG IF NOT EXISTS test(p1 string, p2 int);\nnebula> DROP TAG test;\n
    "},{"location":"3.ngql-guide/10.tag-statements/3.alter-tag/","title":"ALTER TAG","text":"

    ALTER TAG alters the structure of a tag with the given name in a graph space. You can add or drop properties, and change the data type of an existing property. You can also set a TTL (Time-To-Live) on a property, or change its TTL duration.

    "},{"location":"3.ngql-guide/10.tag-statements/3.alter-tag/#notes","title":"Notes","text":"
    • Running the ALTER TAG statement requires some privileges for the graph space. Otherwise, NebulaGraph throws an error.
    • Before you alter properties for a tag, make sure that the properties are not indexed. If the properties contain any indexes, the conflict error [ERROR (-1005)]: Conflict! will occur when you ALTER TAG. For more information on dropping an index, see DROP INDEX.
    • The property name must be unique in a tag. If you add a property with the same name as an existing property or a dropped property, the operation fails.
    "},{"location":"3.ngql-guide/10.tag-statements/3.alter-tag/#syntax","title":"Syntax","text":"
    ALTER TAG <tag_name>\n    <alter_definition> [[, alter_definition] ...]\n    [ttl_definition [, ttl_definition] ... ]\n    [COMMENT '<comment>'];\n\nalter_definition:\n| ADD    (prop_name data_type [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>'])\n| DROP   (prop_name)\n| CHANGE (prop_name data_type [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>'])\n\nttl_definition:\n    TTL_DURATION = ttl_duration, TTL_COL = prop_name\n
    • tag_name: Specifies the tag name that you want to alter. You can alter only one tag in one statement. Before you alter a tag, make sure that the tag exists in the current working graph space. If the tag does not exist, an error will occur when you alter it.
    • Multiple ADD, DROP, and CHANGE clauses are permitted in a single ALTER TAG statement, separated by commas.
    • When a property value is set to NOT NULL using ADD or CHANGE, a default value must be specified for the property, that is, the value of DEFAULT must be specified.
    • When using CHANGE to modify the data type of a property:

      • Only the length of a FIXED_STRING or an INT can be increased. The length of a STRING or an INT cannot be decreased.
      • Only the data type conversions from FIXED_STRING to STRING and from FLOAT to DOUBLE are allowed.
    "},{"location":"3.ngql-guide/10.tag-statements/3.alter-tag/#examples","title":"Examples","text":"
    nebula> CREATE TAG IF NOT EXISTS t1 (p1 string, p2 int);\nnebula> ALTER TAG t1 ADD (p3 int32, fixed_string(10));\nnebula> ALTER TAG t1 TTL_DURATION = 2, TTL_COL = \"p2\";\nnebula> ALTER TAG t1 COMMENT = 'test1';\nnebula> ALTER TAG t1 ADD (p5 double NOT NULL DEFAULT 0.4 COMMENT 'p5') COMMENT='test2';\n// Change the data type of p3 in the TAG t1 from INT32 to INT64, and that of p4 from FIXED_STRING(10) to STRING.\nnebula> ALTER TAG t1 CHANGE (p3 int64, p4 string);\n[ERROR(-1005)]: Unsupported!\n
    "},{"location":"3.ngql-guide/10.tag-statements/3.alter-tag/#implementation_of_the_operation","title":"Implementation of the operation","text":"

    Trying to use a newly altered tag may fail because the alteration of the tag is implemented asynchronously. To make sure the follow-up operations work as expected, Wait for two heartbeat cycles, i.e., 20 seconds.

    To change the heartbeat interval, modify the heartbeat_interval_secs parameter in the configuration files for all services.

    "},{"location":"3.ngql-guide/10.tag-statements/4.show-tags/","title":"SHOW TAGS","text":"

    The SHOW TAGS statement shows the name of all tags in the current graph space.

    You do not need any privileges for the graph space to run the SHOW TAGS statement. But the returned results are different based on role privileges.

    "},{"location":"3.ngql-guide/10.tag-statements/4.show-tags/#syntax","title":"Syntax","text":"
    SHOW TAGS;\n
    "},{"location":"3.ngql-guide/10.tag-statements/4.show-tags/#examples","title":"Examples","text":"
    nebula> SHOW TAGS;\n+----------+\n| Name     |\n+----------+\n| \"player\" |\n| \"team\"   |\n+----------+\n
    "},{"location":"3.ngql-guide/10.tag-statements/5.describe-tag/","title":"DESCRIBE TAG","text":"

    DESCRIBE TAG returns the information about a tag with the given name in a graph space, such as field names, data type, and so on.

    "},{"location":"3.ngql-guide/10.tag-statements/5.describe-tag/#prerequisite","title":"Prerequisite","text":"

    Running the DESCRIBE TAG statement requires some privileges for the graph space. Otherwise, NebulaGraph throws an error.

    "},{"location":"3.ngql-guide/10.tag-statements/5.describe-tag/#syntax","title":"Syntax","text":"
    DESC[RIBE] TAG <tag_name>;\n

    You can use DESC instead of DESCRIBE for short.

    "},{"location":"3.ngql-guide/10.tag-statements/5.describe-tag/#example","title":"Example","text":"
    nebula> DESCRIBE TAG player;\n+--------+----------+-------+---------+---------+\n| Field  | Type     | Null  | Default | Comment |\n+--------+----------+-------+---------+---------+\n| \"name\" | \"string\" | \"YES\" |         |         |\n| \"age\"  | \"int64\"  | \"YES\" |         |         |\n+--------+----------+-------+---------+---------+\n
    "},{"location":"3.ngql-guide/10.tag-statements/6.delete-tag/","title":"DELETE TAG","text":"

    DELETE TAG deletes a tag with the given name on a specified vertex.

    "},{"location":"3.ngql-guide/10.tag-statements/6.delete-tag/#prerequisites","title":"Prerequisites","text":"

    Running the DELETE TAG statement requires some privileges for the graph space. Otherwise, NebulaGraph throws an error.

    "},{"location":"3.ngql-guide/10.tag-statements/6.delete-tag/#syntax","title":"Syntax","text":"
    DELETE TAG <tag_name_list> FROM <VID_list>;\n
    • tag_name_list: The names of the tags you want to delete. Multiple tags are separated with commas (,). * means all tags.
    • VID: The VIDs of the vertices from which you want to delete the tags. Multiple VIDs are separated with commas (,).
    "},{"location":"3.ngql-guide/10.tag-statements/6.delete-tag/#example","title":"Example","text":"
    nebula> CREATE TAG IF NOT EXISTS test1(p1 string, p2 int);\nnebula> CREATE TAG IF NOT EXISTS test2(p3 string, p4 int);\nnebula> INSERT VERTEX test1(p1, p2),test2(p3, p4) VALUES \"test\":(\"123\", 1, \"456\", 2);\nnebula> FETCH PROP ON * \"test\" YIELD vertex AS v;\n+------------------------------------------------------------+\n| v                                                          |\n+------------------------------------------------------------+\n| (\"test\" :test1{p1: \"123\", p2: 1} :test2{p3: \"456\", p4: 2}) |\n+------------------------------------------------------------+\nnebula> DELETE TAG test1 FROM \"test\";\nnebula> FETCH PROP ON * \"test\" YIELD vertex AS v;\n+-----------------------------------+\n| v                                 |\n+-----------------------------------+\n| (\"test\" :test2{p3: \"456\", p4: 2}) |\n+-----------------------------------+\nnebula> DELETE TAG * FROM \"test\";\nnebula> FETCH PROP ON * \"test\" YIELD vertex AS v;\n+---+\n| v |\n+---+\n+---+\n

    Compatibility

    • In openCypher, you can use the statement REMOVE v:LABEL to delete the tag LABEL of the vertex v.
    • DELETE TAG and DROP TAG have the same semantics but different syntax. In nGQL, use DELETE TAG.
    "},{"location":"3.ngql-guide/10.tag-statements/improve-query-by-tag-index/","title":"Add and delete tags","text":"

    OpenCypher has the features of SET label and REMOVE label to speed up the process of querying or labeling.

    NebulaGraph achieves the same operations by creating and inserting tags to an existing vertex, which can quickly query vertices based on the tag name. Users can also run DELETE TAG to delete some vertices that are no longer needed.

    "},{"location":"3.ngql-guide/10.tag-statements/improve-query-by-tag-index/#examples","title":"Examples","text":"

    For example, in the basketballplayer data set, some basketball players are also team shareholders. Users can create an index for the shareholder tag shareholder for quick search. If the player is no longer a shareholder, users can delete the shareholder tag of the corresponding player by DELETE TAG.

    //This example creates the shareholder tag and index.\nnebula> CREATE TAG IF NOT EXISTS shareholder();\nnebula> CREATE TAG INDEX IF NOT EXISTS shareholder_tag on shareholder();\n\n//This example adds a tag on the vertex.\nnebula> INSERT VERTEX shareholder() VALUES \"player100\":();\nnebula> INSERT VERTEX shareholder() VALUES \"player101\":();\n\n//This example queries all the shareholders.\nnebula> MATCH (v:shareholder) RETURN v;\n+--------------------------------------------------------------------+\n| v                                                                  |\n+--------------------------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"} :shareholder{})  |\n| (\"player101\" :player{age: 36, name: \"Tony Parker\"} :shareholder{}) |\n+--------------------------------------------------------------------+\n\nnebula> LOOKUP ON shareholder YIELD id(vertex);\n+-------------+\n| id(VERTEX)  |\n+-------------+\n| \"player100\" |\n| \"player101\" |\n+-------------+\n\n//In this example, the \"player100\" is no longer a shareholder.\nnebula> DELETE TAG shareholder FROM \"player100\";\nnebula> LOOKUP ON shareholder YIELD id(vertex);\n+-------------+\n| id(VERTEX)  |\n+-------------+\n| \"player101\" |\n+-------------+\n

    Note

    If the index is created after inserting the test data, use the REBUILD TAG INDEX <index_name_list>; statement to rebuild the index.

    "},{"location":"3.ngql-guide/11.edge-type-statements/1.create-edge/","title":"CREATE EDGE","text":"

    CREATE EDGE creates an edge type with the given name in a graph space.

    "},{"location":"3.ngql-guide/11.edge-type-statements/1.create-edge/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

    Edge types in nGQL are similar to relationship types in openCypher. But they are also quite different. For example, the ways to create them are different.

    • In openCypher, relationship types are created together with vertices in CREATE statements.
    • In nGQL, edge types are created separately using CREATE EDGE statements. Edge types in nGQL are more like tables in MySQL.
    "},{"location":"3.ngql-guide/11.edge-type-statements/1.create-edge/#prerequisites","title":"Prerequisites","text":"

    Running the CREATE EDGE statement requires some privileges for the graph space. Otherwise, NebulaGraph throws an error.

    "},{"location":"3.ngql-guide/11.edge-type-statements/1.create-edge/#syntax","title":"Syntax","text":"

    To create an edge type in a specific graph space, you must specify the current working space with the USE statement.

    CREATE EDGE [IF NOT EXISTS] <edge_type_name>\n    (\n      <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']\n      [{, <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']} ...] \n    )\n    [TTL_DURATION = <ttl_duration>]\n    [TTL_COL = <prop_name>]\n    [COMMENT = '<comment>'];\n
    Parameter Description IF NOT EXISTS Detects if the edge type that you want to create exists. If it does not exist, a new one will be created. The edge type existence detection here only compares the edge type names (excluding properties). <edge_type_name> 1. The edge type name must be unique in a graph space. 2. Once the edge type name is set, it can not be altered. 3. By default, the name only supports 1-4 byte UTF-8 encoded characters, including English letters (case sensitive), numbers, Chinese characters, etc. However, it cannot include special characters other than the underscore (_), and cannot start with a number. 4. To use special characters, reserved keywords, or start with a number, quote the entire name with backticks (`) and do not include periods (.) within the pair of backticks (`). For more information, see Keywords and reserved words. Note:1. If you name an edge type in Chinese and encounter a SyntaxError, you need to quote the Chinese characters with backticks (`). 2. To include a backtick (`) in an edge type name, use a backslash to escape the backtick, such as \\`; to include a backslash, the backslash itself also needs to be escaped, such as \\ . <prop_name> The name of the property. It must be unique for each edge type. The rules for permitted property names are the same as those for edge type names. <data_type> Shows the data type of each property. For a full description of the property data types, see Data types and Boolean. NULL | NOT NULL Specifies if the property supports NULL | NOT NULL. The default value is NULL. DEFAULT must be specified if NOT NULL is set. DEFAULT Specifies a default value for a property. The default value can be a literal value or an expression supported by NebulaGraph. If no value is specified, the default value is used when inserting a new edge. COMMENT The remarks of a certain property or the edge type itself. The maximum length is 256 bytes. By default, there will be no comments on an edge type. TTL_DURATION Specifies the life cycle for the property. The property that exceeds the specified TTL expires. The expiration threshold is the TTL_COL value plus the TTL_DURATION. The default value of TTL_DURATION is 0. It means the data never expires. TTL_COL Specifies the property to set a timeout on. The data type of the property must be int or timestamp. An edge type can only specify one field as TTL_COL. For more information on TTL, see TTL options."},{"location":"3.ngql-guide/11.edge-type-statements/1.create-edge/#examples","title":"Examples","text":"
    nebula> CREATE EDGE IF NOT EXISTS follow(degree int);\n\n# The following example creates an edge type with no properties.\nnebula> CREATE EDGE IF NOT EXISTS no_property();\n\n# The following example creates an edge type with a default value.\nnebula> CREATE EDGE IF NOT EXISTS follow_with_default(degree int DEFAULT 20);\n\n# In the following example, the TTL of the p2 field is set to be 100 seconds.\nnebula> CREATE EDGE IF NOT EXISTS e1(p1 string, p2 int, p3 timestamp) \\\n        TTL_DURATION = 100, TTL_COL = \"p2\";\n
    "},{"location":"3.ngql-guide/11.edge-type-statements/2.drop-edge/","title":"DROP EDGE","text":"

    DROP EDGE drops an edge type with the given name in a graph space.

    An edge can have only one edge type. After you drop it, the edge CANNOT be accessed. The edge will be deleted in the next compaction.

    This operation only deletes the Schema data. All the files or directories in the disk will not be deleted directly until the next compaction.

    "},{"location":"3.ngql-guide/11.edge-type-statements/2.drop-edge/#prerequisites","title":"Prerequisites","text":"
    • Running the DROP EDGE statement requires some privileges for the graph space. Otherwise, NebulaGraph throws an error.
    • Before you drop an edge type, make sure that the edge type does not have any indexes. Otherwise, the conflict error ([ERROR (-1005)]: Conflict!) will be returned. To drop an index, see DROP INDEX.
    "},{"location":"3.ngql-guide/11.edge-type-statements/2.drop-edge/#syntax","title":"Syntax","text":"
    DROP EDGE [IF EXISTS] <edge_type_name>\n
    • IF NOT EXISTS: Detects if the edge type that you want to drop exists. Only when it exists will it be dropped.
    • edge_type_name: Specifies the edge type name that you want to drop. You can drop only one edge type in one statement.
    "},{"location":"3.ngql-guide/11.edge-type-statements/2.drop-edge/#example","title":"Example","text":"
    nebula> CREATE EDGE IF NOT EXISTS e1(p1 string, p2 int);\nnebula> DROP EDGE e1;\n
    "},{"location":"3.ngql-guide/11.edge-type-statements/3.alter-edge/","title":"ALTER EDGE","text":"

    ALTER EDGE alters the structure of an edge type with the given name in a graph space. You can add or drop properties, and change the data type of an existing property. You can also set a TTL (Time-To-Live) on a property, or change its TTL duration.

    "},{"location":"3.ngql-guide/11.edge-type-statements/3.alter-edge/#notes","title":"Notes","text":"
    • Running the ALTER EDGE statement requires some privileges for the graph space. Otherwise, NebulaGraph throws an error.
    • Before you alter properties for an edge type, make sure that the properties are not indexed. If the properties contain any indexes, the conflict error [ERROR (-1005)]: Conflict! will occur when you ALTER EDGE. For more information on dropping an index, see DROP INDEX.
    • The property name must be unique in an edge type. If you add a property with the same name as an existing property or a dropped property, the operation fails.
    • Only the length of a FIXED_STRING or an INT can be increased.
    • Only the data type conversions from FIXED_STRING to STRING and from FLOAT to DOUBLE are allowed.
    "},{"location":"3.ngql-guide/11.edge-type-statements/3.alter-edge/#syntax","title":"Syntax","text":"
    ALTER EDGE <edge_type_name>\n    <alter_definition> [, alter_definition] ...]\n    [ttl_definition [, ttl_definition] ... ]\n    [COMMENT = '<comment>'];\n\nalter_definition:\n| ADD    (prop_name data_type)\n| DROP   (prop_name)\n| CHANGE (prop_name data_type)\n\nttl_definition:\n    TTL_DURATION = ttl_duration, TTL_COL = prop_name\n
    • edge_type_name: Specifies the edge type name that you want to alter. You can alter only one edge type in one statement. Before you alter an edge type, make sure that the edge type exists in the graph space. If the edge type does not exist, an error occurs when you alter it.
    • Multiple ADD, DROP, and CHANGE clauses are permitted in a single ALTER EDGE statement, separated by commas.
    • When a property value is set to NOT NULL using ADD or CHANGE, a default value must be specified for the property, that is, the value of DEFAULT must be specified.
    "},{"location":"3.ngql-guide/11.edge-type-statements/3.alter-edge/#example","title":"Example","text":"
    nebula> CREATE EDGE IF NOT EXISTS e1(p1 string, p2 int);\nnebula> ALTER EDGE e1 ADD (p3 int, p4 string);\nnebula> ALTER EDGE e1 TTL_DURATION = 2, TTL_COL = \"p2\";\nnebula> ALTER EDGE e1 COMMENT = 'edge1';\n
    "},{"location":"3.ngql-guide/11.edge-type-statements/3.alter-edge/#implementation_of_the_operation","title":"Implementation of the operation","text":"

    Trying to use a newly altered edge type may fail because the alteration of the edge type is implemented asynchronously. To make sure the follow-up operations work as expected, Wait for two heartbeat cycles, i.e., 20 seconds.

    To change the heartbeat interval, modify the heartbeat_interval_secs parameter in the configuration files for all services.

    "},{"location":"3.ngql-guide/11.edge-type-statements/4.show-edges/","title":"SHOW EDGES","text":"

    SHOW EDGES shows all edge types in the current graph space.

    You do not need any privileges for the graph space to run the SHOW EDGES statement. But the returned results are different based on role privileges.

    "},{"location":"3.ngql-guide/11.edge-type-statements/4.show-edges/#syntax","title":"Syntax","text":"
    SHOW EDGES;\n
    "},{"location":"3.ngql-guide/11.edge-type-statements/4.show-edges/#example","title":"Example","text":"
    nebula> SHOW EDGES;\n+----------+\n| Name     |\n+----------+\n| \"follow\" |\n| \"serve\"  |\n+----------+\n
    "},{"location":"3.ngql-guide/11.edge-type-statements/5.describe-edge/","title":"DESCRIBE EDGE","text":"

    DESCRIBE EDGE returns the information about an edge type with the given name in a graph space, such as field names, data type, and so on.

    "},{"location":"3.ngql-guide/11.edge-type-statements/5.describe-edge/#prerequisites","title":"Prerequisites","text":"

    Running the DESCRIBE EDGE statement requires some privileges for the graph space. Otherwise, NebulaGraph throws an error.

    "},{"location":"3.ngql-guide/11.edge-type-statements/5.describe-edge/#syntax","title":"Syntax","text":"
    DESC[RIBE] EDGE <edge_type_name>\n

    You can use DESC instead of DESCRIBE for short.

    "},{"location":"3.ngql-guide/11.edge-type-statements/5.describe-edge/#example","title":"Example","text":"
    nebula> DESCRIBE EDGE follow;\n+----------+---------+-------+---------+---------+\n| Field    | Type    | Null  | Default | Comment |\n+----------+---------+-------+---------+---------+\n| \"degree\" | \"int64\" | \"YES\" |         |         |\n+----------+---------+-------+---------+---------+\n
    "},{"location":"3.ngql-guide/12.vertex-statements/1.insert-vertex/","title":"INSERT VERTEX","text":"

    The INSERT VERTEX statement inserts one or more vertices into a graph space in NebulaGraph.

    "},{"location":"3.ngql-guide/12.vertex-statements/1.insert-vertex/#prerequisites","title":"Prerequisites","text":"

    Running the INSERT VERTEX statement requires some privileges for the graph space. Otherwise, NebulaGraph throws an error.

    "},{"location":"3.ngql-guide/12.vertex-statements/1.insert-vertex/#syntax","title":"Syntax","text":"
    INSERT VERTEX [IF NOT EXISTS] [tag_props, [tag_props] ...]\nVALUES VID: ([prop_value_list])\n\ntag_props:\n  tag_name ([prop_name_list])\n\nprop_name_list:\n   [prop_name [, prop_name] ...]\n\nprop_value_list:\n   [prop_value [, prop_value] ...] \n
    • IF NOT EXISTS detects if the VID that you want to insert exists. If it does not exist, a new one will be inserted.

      Note

      • IF NOT EXISTS only compares the names of the VID and the tag (excluding properties).
      • IF NOT EXISTS will read to check whether the data exists, which will have a significant impact on performance.
    • tag_name denotes the tag (vertex type), which must be created before INSERT VERTEX. For more information, see CREATE TAG.

      Caution

      NebulaGraph master supports inserting vertices without tags.

      Compatibility

      In NebulaGraph master, inserting vertex without tag is not supported by default. If you want to use the vertex without tags, add --graph_use_vertex_key=true to the configuration files (nebula-graphd.conf) of all Graph services in the cluster, add --use_vertex_key=true to the configuration files (nebula-storaged.conf) of all Storage services in the cluster. An example of a command to insert a vertex without tag is INSERT VERTEX VALUES \"1\":();.

    • prop_name_list contains the names of the properties on the tag.
    • VID is the vertex ID. In NebulaGraph 2.0, string and integer VID types are supported. The VID type is set when a graph space is created. For more information, see CREATE SPACE.
    • prop_value_list must provide the property values according to the prop_name_list. When the NOT NULL constraint is set for a given property, an error is returned if no property is given. When the default value for a property is NULL, you can omit to specify the property value. For details, see CREATE TAG.

    Caution

    INSERT VERTEX and CREATE have different semantics.

    • The semantics of INSERT VERTEX is closer to that of INSERT in NoSQL (key-value), or UPSERT (UPDATE or INSERT) in SQL.
    • When two INSERT statements (neither uses IF NOT EXISTS) with the same VID and TAG are operated at the same time, the latter INSERT will overwrite the former.
    • When two INSERT statements with the same VID but different TAGS are operated at the same time, the operation of different tags will not overwrite each other.

    Examples are as follows.

    "},{"location":"3.ngql-guide/12.vertex-statements/1.insert-vertex/#examples","title":"Examples","text":"
    # Insert a vertex without tag.\nnebula> INSERT VERTEX VALUES \"1\":();\n\n# The following examples create tag t1 with no property and inserts vertex \"10\" with no property.\nnebula> CREATE TAG IF NOT EXISTS t1();                   \nnebula> INSERT VERTEX t1() VALUES \"10\":(); \n
    nebula> CREATE TAG IF NOT EXISTS t2 (name string, age int);                \nnebula> INSERT VERTEX t2 (name, age) VALUES \"11\":(\"n1\", 12);\n\n#  In the following example, the insertion fails because \"a13\" is not int.\nnebula> INSERT VERTEX t2 (name, age) VALUES \"12\":(\"n1\", \"a13\"); \n\n# The following example inserts two vertices at one time.\nnebula> INSERT VERTEX t2 (name, age) VALUES \"13\":(\"n3\", 12), \"14\":(\"n4\", 8); \n
    nebula> CREATE TAG IF NOT EXISTS t3(p1 int);\nnebula> CREATE TAG IF NOT EXISTS t4(p2 string);\n\n# The following example inserts vertex \"21\" with two tags.\nnebula> INSERT VERTEX t3 (p1), t4(p2) VALUES \"21\": (321, \"hello\");\n

    A vertex can be inserted/written with new values multiple times. Only the last written values can be read.

    # The following examples insert vertex \"11\" with new values for multiple times.\nnebula> INSERT VERTEX t2 (name, age) VALUES \"11\":(\"n2\", 13);\nnebula> INSERT VERTEX t2 (name, age) VALUES \"11\":(\"n3\", 14);\nnebula> INSERT VERTEX t2 (name, age) VALUES \"11\":(\"n4\", 15);\nnebula> FETCH PROP ON t2 \"11\" YIELD properties(vertex);\n+-----------------------+\n| properties(VERTEX)    |\n+-----------------------+\n| {age: 15, name: \"n4\"} |\n+-----------------------+\n
    nebula> CREATE TAG IF NOT EXISTS t5(p1 fixed_string(5) NOT NULL, p2 int, p3 int DEFAULT NULL);\nnebula> INSERT VERTEX t5(p1, p2, p3) VALUES \"001\":(\"Abe\", 2, 3);\n\n# In the following example, the insertion fails because the value of p1 cannot be NULL.\nnebula> INSERT VERTEX t5(p1, p2, p3) VALUES \"002\":(NULL, 4, 5);\n[ERROR (-1009)]: SemanticError: No schema found for `t5'\n\n# In the following example, the value of p3 is the default NULL.\nnebula> INSERT VERTEX t5(p1, p2) VALUES \"003\":(\"cd\", 5);\nnebula> FETCH PROP ON t5 \"003\" YIELD properties(vertex);\n+---------------------------------+\n| properties(VERTEX)              |\n+---------------------------------+\n| {p1: \"cd\", p2: 5, p3: __NULL__} |\n+---------------------------------+\n\n# In the following example, the allowed maximum length of p1 is 5.\nnebula> INSERT VERTEX t5(p1, p2) VALUES \"004\":(\"shalalalala\", 4);\nnebula> FETCH PROP on t5 \"004\" YIELD properties(vertex);\n+------------------------------------+\n| properties(VERTEX)                 |\n+------------------------------------+\n| {p1: \"shala\", p2: 4, p3: __NULL__} |\n+------------------------------------+\n

    If you insert a vertex that already exists with IF NOT EXISTS, there will be no modification.

    # The following example inserts vertex \"1\".\nnebula> INSERT VERTEX t2 (name, age) VALUES \"1\":(\"n2\", 13);\n# Modify vertex \"1\" with IF NOT EXISTS. But there will be no modification as vertex \"1\" already exists.\nnebula> INSERT VERTEX IF NOT EXISTS t2 (name, age) VALUES \"1\":(\"n3\", 14);\nnebula> FETCH PROP ON t2 \"1\" YIELD properties(vertex);\n+-----------------------+\n| properties(VERTEX)    |\n+-----------------------+\n| {age: 13, name: \"n2\"} |\n+-----------------------+\n
    "},{"location":"3.ngql-guide/12.vertex-statements/2.update-vertex/","title":"UPDATE VERTEX","text":"

    The UPDATE VERTEX statement updates properties on tags of a vertex.

    In NebulaGraph, UPDATE VERTEX supports compare-and-set (CAS).

    Note

    An UPDATE VERTEX statement can only update properties on ONE TAG of a vertex.

    "},{"location":"3.ngql-guide/12.vertex-statements/2.update-vertex/#syntax","title":"Syntax","text":"
    UPDATE VERTEX ON <tag_name> <vid>\nSET <update_prop>\n[WHEN <condition>]\n[YIELD <output>]\n
    Parameter Required Description Example ON <tag_name> Yes Specifies the tag of the vertex. The properties to be updated must be on this tag. ON player <vid> Yes Specifies the ID of the vertex to be updated. \"player100\" SET <update_prop> Yes Specifies the properties to be updated and how they will be updated. SET age = age +1 WHEN <condition> No Specifies the filter conditions. If <condition> evaluates to false, the SET clause will not take effect. WHEN name == \"Tim\" YIELD <output> No Specifies the output format of the statement. YIELD name AS Name"},{"location":"3.ngql-guide/12.vertex-statements/2.update-vertex/#example","title":"Example","text":"
    // This query checks the properties of vertex \"player101\".\nnebula> FETCH PROP ON player \"player101\" YIELD properties(vertex);\n+--------------------------------+\n| properties(VERTEX)             |\n+--------------------------------+\n| {age: 36, name: \"Tony Parker\"} |\n+--------------------------------+\n\n// This query updates the age property and returns name and the new age.\nnebula> UPDATE VERTEX ON player \"player101\" \\\n        SET age = age + 2 \\\n        WHEN name == \"Tony Parker\" \\\n        YIELD name AS Name, age AS Age;\n+---------------+-----+\n| Name          | Age |\n+---------------+-----+\n| \"Tony Parker\" | 38  |\n+---------------+-----+\n
    "},{"location":"3.ngql-guide/12.vertex-statements/3.upsert-vertex/","title":"UPSERT VERTEX","text":"

    The UPSERT statement is a combination of UPDATE and INSERT. You can use UPSERT VERTEX to update the properties of a vertex if it exists or insert a new vertex if it does not exist.

    Note

    An UPSERT VERTEX statement can only update the properties on ONE TAG of a vertex.

    The performance of UPSERT is much lower than that of INSERT because UPSERT is a read-modify-write serialization operation at the partition level.

    Danger

    Don't use UPSERT for scenarios with highly concurrent writes. You can use UPDATE or INSERT instead.

    "},{"location":"3.ngql-guide/12.vertex-statements/3.upsert-vertex/#syntax","title":"Syntax","text":"
    UPSERT VERTEX ON <tag> <vid>\nSET <update_prop>\n[WHEN <condition>]\n[YIELD <output>]\n
    Parameter Required Description Example ON <tag> Yes Specifies the tag of the vertex. The properties to be updated must be on this tag. ON player <vid> Yes Specifies the ID of the vertex to be updated or inserted. \"player100\" SET <update_prop> Yes Specifies the properties to be updated and how they will be updated. SET age = age +1 WHEN <condition> No Specifies the filter conditions. WHEN name == \"Tim\" YIELD <output> No Specifies the output format of the statement. YIELD name AS Name"},{"location":"3.ngql-guide/12.vertex-statements/3.upsert-vertex/#insert_a_vertex_if_it_does_not_exist","title":"Insert a vertex if it does not exist","text":"

    If a vertex does not exist, it is created no matter the conditions in the WHEN clause are met or not, and the SET clause always takes effect. The property values of the new vertex depend on:

    • How the SET clause is defined.
    • Whether the property has a default value.

    For example, if:

    • The vertex to be inserted will have properties name and age based on the tag player.
    • The SET clause specifies that age = 30.

    Then the property values in different cases are listed as follows:

    Are WHEN conditions met If properties have default values Value of name Value of age Yes Yes The default value 30 Yes No NULL 30 No Yes The default value 30 No No NULL 30

    Here are some examples:

    // This query checks if the following three vertices exist. The result \"Empty set\" indicates that the vertices do not exist.\nnebula> FETCH PROP ON * \"player666\", \"player667\", \"player668\" YIELD properties(vertex);\n+--------------------+\n| properties(VERTEX) |\n+--------------------+\n+--------------------+\nEmpty set\n\nnebula> UPSERT VERTEX ON player \"player666\" \\\n        SET age = 30 \\\n        WHEN name == \"Joe\" \\\n        YIELD name AS Name, age AS Age;\n+----------+----------+\n| Name     | Age      |\n+----------+----------+\n| __NULL__ | 30       |\n+----------+----------+\n\nnebula> UPSERT VERTEX ON player \"player666\" \\\n        SET age = 31 \\\n        WHEN name == \"Joe\" \\\n        YIELD name AS Name, age AS Age;\n+----------+-----+\n| Name     | Age |\n+----------+-----+\n| __NULL__ | 30  |\n+----------+-----+\n\nnebula> UPSERT VERTEX ON player \"player667\" \\\n        SET age = 31 \\\n        YIELD name AS Name, age AS Age;\n+----------+-----+\n| Name     | Age |\n+----------+-----+\n| __NULL__ | 31  |\n+----------+-----+\n\nnebula> UPSERT VERTEX ON player \"player668\" \\\n        SET name = \"Amber\", age = age + 1 \\\n        YIELD name AS Name, age AS Age;\n+---------+----------+\n| Name    | Age      |\n+---------+----------+\n| \"Amber\" | __NULL__ |\n+---------+----------+\n

    In the last query of the preceding examples, since age has no default value, when the vertex is created, age is NULL, and age = age + 1 does not take effect. But if age has a default value, age = age + 1 will take effect. For example:

    nebula> CREATE TAG IF NOT EXISTS player_with_default(name string, age int DEFAULT 20);\nExecution succeeded\n\nnebula> UPSERT VERTEX ON player_with_default \"player101\" \\\n        SET age = age + 1 \\\n        YIELD name AS Name, age AS Age;\n\n+----------+-----+\n| Name     | Age |\n+----------+-----+\n| __NULL__ | 21  |\n+----------+-----+\n
    "},{"location":"3.ngql-guide/12.vertex-statements/3.upsert-vertex/#update_a_vertex_if_it_exists","title":"Update a vertex if it exists","text":"

    If the vertex exists and the WHEN conditions are met, the vertex is updated.

    nebula> FETCH PROP ON player \"player101\" YIELD properties(vertex);\n+--------------------------------+\n| properties(VERTEX)             |\n+--------------------------------+\n| {age: 36, name: \"Tony Parker\"} |\n+--------------------------------+\n\nnebula> UPSERT VERTEX ON player \"player101\" \\\n        SET age = age + 2 \\\n        WHEN name == \"Tony Parker\" \\\n        YIELD name AS Name, age AS Age;\n+---------------+-----+\n| Name          | Age |\n+---------------+-----+\n| \"Tony Parker\" | 38  |\n+---------------+-----+\n

    If the vertex exists and the WHEN conditions are not met, the update does not take effect.

    nebula> FETCH PROP ON player \"player101\" YIELD properties(vertex);\n+--------------------------------+\n| properties(VERTEX)             |\n+--------------------------------+\n| {age: 38, name: \"Tony Parker\"} |\n+--------------------------------+\n\nnebula> UPSERT VERTEX ON player \"player101\" \\\n        SET age = age + 2 \\\n        WHEN name == \"Someone else\" \\\n        YIELD name AS Name, age AS Age;\n+---------------+-----+\n| Name          | Age |\n+---------------+-----+\n| \"Tony Parker\" | 38  |\n+---------------+-----+\n
    "},{"location":"3.ngql-guide/12.vertex-statements/4.delete-vertex/","title":"DELETE VERTEX","text":"

    By default, the DELETE VERTEX statement deletes vertices but the incoming and outgoing edges of the vertices.

    Compatibility

    • NebulaGraph 2.x deletes vertices and their incoming and outgoing edges.
    • NebulaGraph master only deletes the vertices, and does not delete the related outgoing and incoming edges of the vertices. At this time, there will be dangling edges by default.

    The DELETE VERTEX statement deletes one vertex or multiple vertices at a time. You can use DELETE VERTEX together with pipes. For more information about pipe, see Pipe operator.

    Note

    • DELETE VERTEX deletes vertices directly.
    • DELETE TAG deletes a tag with the given name on a specified vertex.
    "},{"location":"3.ngql-guide/12.vertex-statements/4.delete-vertex/#syntax","title":"Syntax","text":"
    DELETE VERTEX <vid> [, <vid> ...] [WITH EDGE];\n
    • WITH EDGE: deletes vertices and the related incoming and outgoing edges of the vertices.
    "},{"location":"3.ngql-guide/12.vertex-statements/4.delete-vertex/#examples","title":"Examples","text":"

    This query deletes the vertex whose ID is \"team1\".

    # Delete the vertex whose VID is `team1` but the related incoming and outgoing edges are not deleted.\nnebula> DELETE VERTEX \"team1\";\n\n# Delete the vertex whose VID is `team1` and the related incoming and outgoing edges.\nnebula> DELETE VERTEX \"team1\" WITH EDGE;\n

    This query shows that you can use DELETE VERTEX together with pipe to delete vertices.

    nebula> GO FROM \"player100\" OVER serve WHERE properties(edge).start_year == \"2021\" YIELD dst(edge) AS id | DELETE VERTEX $-.id;\n
    "},{"location":"3.ngql-guide/12.vertex-statements/4.delete-vertex/#process_of_deleting_vertices","title":"Process of deleting vertices","text":"

    Once NebulaGraph deletes the vertices, all edges (incoming and outgoing edges) of the target vertex will become dangling edges. When NebulaGraph deletes the vertices WITH EDGE, NebulaGraph traverses the incoming and outgoing edges related to the vertices and deletes them all. Then NebulaGraph deletes the vertices.

    Caution

    • Atomic deletion is not supported during the entire process for now. Please retry when a failure occurs to avoid partial deletion, which will cause pendent edges.
    • Deleting a supernode takes a lot of time. To avoid connection timeout before the deletion is complete, you can modify the parameter --storage_client_timeout_ms in nebula-graphd.conf to extend the timeout period.
    "},{"location":"3.ngql-guide/13.edge-statements/1.insert-edge/","title":"INSERT EDGE","text":"

    The INSERT EDGE statement inserts an edge or multiple edges into a graph space from a source vertex (given by src_vid) to a destination vertex (given by dst_vid) with a specific rank in NebulaGraph.

    When inserting an edge that already exists, INSERT EDGE overrides the edge.

    "},{"location":"3.ngql-guide/13.edge-statements/1.insert-edge/#syntax","title":"Syntax","text":"
    INSERT EDGE [IF NOT EXISTS] <edge_type> ( <prop_name_list> ) VALUES \n<src_vid> -> <dst_vid>[@<rank>] : ( <prop_value_list> )\n[, <src_vid> -> <dst_vid>[@<rank>] : ( <prop_value_list> ), ...];\n\n<prop_name_list> ::=\n  [ <prop_name> [, <prop_name> ] ...]\n\n<prop_value_list> ::=\n  [ <prop_value> [, <prop_value> ] ...]\n
    • IF NOT EXISTS detects if the edge that you want to insert exists. If it does not exist, a new one will be inserted.

      Note

      • IF NOT EXISTS only detects whether exist and does not detect whether the property values overlap.
      • IF NOT EXISTS will read to check whether the data exists, which will have a significant impact on performance.
        • <edge_type> denotes the edge type, which must be created before INSERT EDGE. Only one edge type can be specified in this statement.
        • <prop_name_list> is the property name list in the given <edge_type>.
        • src_vid is the VID of the source vertex. It specifies the start of an edge.
        • dst_vid is the VID of the destination vertex. It specifies the end of an edge.
        • rank is optional. It specifies the edge rank of the same edge type. The data type is int. If not specified, the default value is 0. You can insert many edges with the same edge type, source vertex, and destination vertex by using different rank values.

          OpenCypher compatibility

          OpenCypher has no such concept as rank.

        • <prop_value_list> must provide the value list according to <prop_name_list>. If the property values do not match the data type in the edge type, an error is returned. When the NOT NULL constraint is set for a given property, an error is returned if no property is given. When the default value for a property is NULL, you can omit to specify the property value. For details, see CREATE EDGE.
        "},{"location":"3.ngql-guide/13.edge-statements/1.insert-edge/#examples","title":"Examples","text":"
        # The following example creates edge type e1 with no property and inserts an edge from vertex \"10\" to vertex \"11\" with no property.\nnebula> CREATE EDGE IF NOT EXISTS e1();                 \nnebula> INSERT EDGE e1 () VALUES \"10\"->\"11\":();  \n\n# The following example inserts an edge from vertex \"10\" to vertex \"11\" with no property. The edge rank is 1.\nnebula> INSERT EDGE e1 () VALUES \"10\"->\"11\"@1:(); \n
        nebula> CREATE EDGE IF NOT EXISTS e2 (name string, age int); \nnebula> INSERT EDGE e2 (name, age) VALUES \"11\"->\"13\":(\"n1\", 1);\n\n# The following example creates edge type e2 with two properties.\nnebula> INSERT EDGE e2 (name, age) VALUES \\\n        \"12\"->\"13\":(\"n1\", 1), \"13\"->\"14\":(\"n2\", 2); \n\n# In the following example, the insertion fails because \"a13\" is not int.\nnebula> INSERT EDGE e2 (name, age) VALUES \"11\"->\"13\":(\"n1\", \"a13\");\n

        An edge can be inserted/written with property values multiple times. Only the last written values can be read.

        The following examples insert edge e2 with the new values for multiple times.\nnebula> INSERT EDGE e2 (name, age) VALUES \"11\"->\"13\":(\"n1\", 12);\nnebula> INSERT EDGE e2 (name, age) VALUES \"11\"->\"13\":(\"n1\", 13);\nnebula> INSERT EDGE e2 (name, age) VALUES \"11\"->\"13\":(\"n1\", 14);\nnebula> FETCH PROP ON e2 \"11\"->\"13\" YIELD edge AS e;\n+-------------------------------------------+\n| e                                         |\n+-------------------------------------------+\n| [:e2 \"11\"->\"13\" @0 {age: 14, name: \"n1\"}] |\n+-------------------------------------------+\n

        If you insert an edge that already exists with IF NOT EXISTS, there will be no modification.

        # The following example inserts edge e2 from vertex \"14\" to vertex \"15\".\nnebula> INSERT EDGE e2 (name, age) VALUES \"14\"->\"15\"@1:(\"n1\", 12);\n# The following example alters the edge with IF NOT EXISTS. But there will be no alteration because edge e2 already exists.\nnebula> INSERT EDGE IF NOT EXISTS e2 (name, age) VALUES \"14\"->\"15\"@1:(\"n2\", 13);\nnebula> FETCH PROP ON e2 \"14\"->\"15\"@1 YIELD edge AS e;\n+-------------------------------------------+\n| e                                         |\n+-------------------------------------------+\n| [:e2 \"14\"->\"15\" @1 {age: 12, name: \"n1\"}] |\n+-------------------------------------------+\n

        Note

        • NebulaGraph master allows dangling edges. Therefore, you can write the edge before the source vertex or the destination vertex exists. At this time, you can get the (not written) vertex VID through <edgetype>._src or <edgetype>._dst (which is not recommended).
        • Atomic operation is not guaranteed during the entire process for now. If it fails, please try again. Otherwise, partial writing will occur. At this time, the behavior of reading the data is undefined. For example, if multiple machines are involved in the write operation, only one of the forward and reverse edges of a single edge is written successfully, or only part of the edge is written successfully when multiple edges are inserted. In this case, an error will be returned, so please execute the command again.
        • Concurrently writing the same edge will cause an edge conflict error, so please try again later.
        • The inserting speed of an edge is about half that of a vertex. Because in the storaged process, the insertion of an edge involves two tasks, while the insertion of a vertex involves only one task.
        "},{"location":"3.ngql-guide/13.edge-statements/2.update-edge/","title":"UPDATE EDGE","text":"

        The UPDATE EDGE statement updates properties on an edge.

        In NebulaGraph, UPDATE EDGE supports compare-and-swap (CAS).

        "},{"location":"3.ngql-guide/13.edge-statements/2.update-edge/#syntax","title":"Syntax","text":"
        UPDATE EDGE ON <edge_type>\n<src_vid> -> <dst_vid> [@<rank>]\nSET <update_prop>\n[WHEN <condition>]\n[YIELD <output>]\n
        Parameter Required Description Example ON <edge_type> Yes Specifies the edge type. The properties to be updated must be on this edge type. ON serve <src_vid> Yes Specifies the source vertex ID of the edge. \"player100\" <dst_vid> Yes Specifies the destination vertex ID of the edge. \"team204\" <rank> No Specifies the rank of the edge. The data type is int. 10 SET <update_prop> Yes Specifies the properties to be updated and how they will be updated. SET start_year = start_year +1 WHEN <condition> No Specifies the filter conditions. If <condition> evaluates to false, the SET clause does not take effect. WHEN end_year < 2010 YIELD <output> No Specifies the output format of the statement. YIELD start_year AS Start_Year"},{"location":"3.ngql-guide/13.edge-statements/2.update-edge/#example","title":"Example","text":"

        The following example checks the properties of the edge with the GO statement.

        nebula> GO FROM \"player100\" \\\n        OVER serve \\\n        YIELD properties(edge).start_year, properties(edge).end_year;\n+-----------------------------+---------------------------+\n| properties(EDGE).start_year | properties(EDGE).end_year |\n+-----------------------------+---------------------------+\n| 1997                        | 2016                      |\n+-----------------------------+---------------------------+\n

        The following example updates the start_year property and returns the end_year and the new start_year.

        nebula> UPDATE EDGE on serve \"player100\" -> \"team204\"@0 \\\n        SET start_year = start_year + 1 \\\n        WHEN end_year > 2010 \\\n        YIELD start_year, end_year;\n+------------+----------+\n| start_year | end_year |\n+------------+----------+\n| 1998       | 2016     |\n+------------+----------+\n
        "},{"location":"3.ngql-guide/13.edge-statements/3.upsert-edge/","title":"UPSERT EDGE","text":"

        The UPSERT statement is a combination of UPDATE and INSERT. You can use UPSERT EDGE to update the properties of an edge if it exists or insert a new edge if it does not exist.

        The performance of UPSERT is much lower than that of INSERT because UPSERT is a read-modify-write serialization operation at the partition level.

        Danger

        Do not use UPSERT for scenarios with highly concurrent writes. You can use UPDATE or INSERT instead.

        "},{"location":"3.ngql-guide/13.edge-statements/3.upsert-edge/#syntax","title":"Syntax","text":"
        UPSERT EDGE ON <edge_type>\n<src_vid> -> <dst_vid> [@rank]\nSET <update_prop>\n[WHEN <condition>]\n[YIELD <properties>]\n
        Parameter Required Description Example ON <edge_type> Yes Specifies the edge type. The properties to be updated must be on this edge type. ON serve <src_vid> Yes Specifies the source vertex ID of the edge. \"player100\" <dst_vid> Yes Specifies the destination vertex ID of the edge. \"team204\" <rank> No Specifies the rank of the edge. 10 SET <update_prop> Yes Specifies the properties to be updated and how they will be updated. SET start_year = start_year +1 WHEN <condition> No Specifies the filter conditions. WHEN end_year < 2010 YIELD <output> No Specifies the output format of the statement. YIELD start_year AS Start_Year"},{"location":"3.ngql-guide/13.edge-statements/3.upsert-edge/#insert_an_edge_if_it_does_not_exist","title":"Insert an edge if it does not exist","text":"

        If an edge does not exist, it is created no matter the conditions in the WHEN clause are met or not, and the SET clause takes effect. The property values of the new edge depend on:

        • How the SET clause is defined.
        • Whether the property has a default value.

        For example, if:

        • The edge to be inserted will have properties start_year and end_year based on the edge type serve.
        • The SET clause specifies that end_year = 2021.

        Then the property values in different cases are listed as follows:

        Are WHEN conditions met If properties have default values Value of start_year Value of end_year Yes Yes The default value 2021 Yes No NULL 2021 No Yes The default value 2021 No No NULL 2021

        Here are some examples:

        // This example checks if the following three vertices have any outgoing serve edge. The result \"Empty set\" indicates that such an edge does not exist.\nnebula> GO FROM \"player666\", \"player667\", \"player668\" \\\n        OVER serve \\\n        YIELD properties(edge).start_year, properties(edge).end_year;\n+-----------------------------+---------------------------+\n| properties(EDGE).start_year | properties(EDGE).end_year |\n+-----------------------------+---------------------------+\n+-----------------------------+---------------------------+\nEmpty set\n\nnebula> UPSERT EDGE on serve \\\n        \"player666\" -> \"team200\"@0 \\\n        SET end_year = 2021 \\\n        WHEN end_year == 2010 \\\n        YIELD start_year, end_year;\n+------------+----------+\n| start_year | end_year |\n+------------+----------+\n| __NULL__   | 2021     |\n+------------+----------+\n\nnebula> UPSERT EDGE on serve \\\n        \"player666\" -> \"team200\"@0 \\\n        SET end_year = 2022 \\\n        WHEN end_year == 2010 \\\n        YIELD start_year, end_year;\n+------------+----------+\n| start_year | end_year |\n+------------+----------+\n| __NULL__   | 2021     |\n+------------+----------+\n\nnebula> UPSERT EDGE on serve \\\n        \"player667\" -> \"team200\"@0 \\\n        SET end_year = 2022 \\\n        YIELD start_year, end_year;\n+------------+----------+\n| start_year | end_year |\n+------------+----------+\n| __NULL__   | 2022     |\n+------------+----------+\n\nnebula> UPSERT EDGE on serve \\\n        \"player668\" -> \"team200\"@0 \\\n        SET start_year = 2000, end_year = end_year + 1 \\\n        YIELD start_year, end_year;\n+------------+----------+\n| start_year | end_year |\n+------------+----------+\n| 2000       | __NULL__ |\n+------------+----------+\n

        In the last query of the preceding example, since end_year has no default value, when the edge is created, end_year is NULL, and end_year = end_year + 1 does not take effect. But if end_year has a default value, end_year = end_year + 1 will take effect. For example:

        nebula> CREATE EDGE IF NOT EXISTS serve_with_default(start_year int, end_year int DEFAULT 2010);\nExecution succeeded\n\nnebula> UPSERT EDGE on serve_with_default \\\n        \"player668\" -> \"team200\" \\\n        SET end_year = end_year + 1 \\\n        YIELD start_year, end_year;\n+------------+----------+\n| start_year | end_year |\n+------------+----------+\n| __NULL__   | 2011     |\n+------------+----------+\n
        "},{"location":"3.ngql-guide/13.edge-statements/3.upsert-edge/#update_an_edge_if_it_exists","title":"Update an edge if it exists","text":"

        If the edge exists and the WHEN conditions are met, the edge is updated.

        nebula> MATCH (v:player{name:\"Ben Simmons\"})-[e:serve]-(v2) \\\n        RETURN e;\n+-----------------------------------------------------------------------+\n| e                                                                     |\n+-----------------------------------------------------------------------+\n| [:serve \"player149\"->\"team219\" @0 {end_year: 2019, start_year: 2016}] |\n+-----------------------------------------------------------------------+\n\nnebula> UPSERT EDGE on serve \\\n        \"player149\" -> \"team219\" \\\n        SET end_year = end_year + 1 \\\n        WHEN start_year == 2016 \\\n        YIELD start_year, end_year;\n+------------+----------+\n| start_year | end_year |\n+------------+----------+\n| 2016       | 2020     |\n+------------+----------+\n

        If the edge exists and the WHEN conditions are not met, the update does not take effect.

        nebula> MATCH (v:player{name:\"Ben Simmons\"})-[e:serve]-(v2) \\\n        RETURN e;\n+-----------------------------------------------------------------------+\n| e                                                                     |\n+-----------------------------------------------------------------------+\n| [:serve \"player149\"->\"team219\" @0 {end_year: 2020, start_year: 2016}] |\n+-----------------------------------------------------------------------+\n\n\nnebula> UPSERT EDGE on serve \\\n        \"player149\" -> \"team219\" \\\n        SET end_year = end_year + 1 \\\n        WHEN start_year != 2016 \\\n        YIELD start_year, end_year;\n+------------+----------+\n| start_year | end_year |\n+------------+----------+\n| 2016       | 2020     |\n+------------+----------+\n
        "},{"location":"3.ngql-guide/13.edge-statements/4.delete-edge/","title":"DELETE EDGE","text":"

        The DELETE EDGE statement deletes one edge or multiple edges at a time. You can use DELETE EDGE together with pipe operators. For more information, see PIPE OPERATORS.

        To delete all the outgoing edges for a vertex, please delete the vertex. For more information, see DELETE VERTEX.

        "},{"location":"3.ngql-guide/13.edge-statements/4.delete-edge/#syntax","title":"Syntax","text":"
        DELETE EDGE <edge_type> <src_vid> -> <dst_vid>[@<rank>] [, <src_vid> -> <dst_vid>[@<rank>] ...]\n

        Caution

        If no rank is specified, NebulaGraph only deletes the edge with rank 0. Delete edges with all ranks, as shown in the following example.

        "},{"location":"3.ngql-guide/13.edge-statements/4.delete-edge/#examples","title":"Examples","text":"
        nebula> DELETE EDGE serve \"player100\" -> \"team204\"@0;\n

        The following example shows that you can use DELETE EDGE together with pipe operators to delete edges that meet the conditions.

        nebula> GO FROM \"player100\" OVER follow \\\n        WHERE dst(edge) == \"player101\" \\\n        YIELD src(edge) AS src, dst(edge) AS dst, rank(edge) AS rank \\\n        | DELETE EDGE follow $-.src->$-.dst @ $-.rank;\n
        "},{"location":"3.ngql-guide/14.native-index-statements/","title":"Index overview","text":"

        Indexes are built to fast process graph queries. Nebula\u00a0Graph supports two kinds of indexes: native indexes and full-text indexes. This topic introduces the index types and helps choose the right index.

        "},{"location":"3.ngql-guide/14.native-index-statements/#usage_instructions","title":"Usage Instructions","text":"
        • Indexes can improve query performance but may reduce write performance.
        • An index is a prerequisite for locating data when executing a LOOKUPstatement. If there is no index, an error will be reported when executing the LOOKUP statement.
        • When using an index, NebulaGraph will automatically select the most optimal index.
        • Indexes with high selectivity, that is, when the ratio of the number of records with unique values in the index column to the total number of records is high (for example, the ratio for ID numbers is 1), can significantly improve query performance. For indexes with low selectivity (such as country), query performance might not experience a substantial improvement.
        "},{"location":"3.ngql-guide/14.native-index-statements/#native_indexes","title":"Native indexes","text":"

        Native indexes allow querying data based on a given property. Features are as follows.

        • There are two kinds of native indexes: tag index and edge type index.
        • Native indexes must be updated manually. You can use the REBUILD INDEX statement to update native indexes.
        • Native indexes support indexing multiple properties on a tag or an edge type (composite indexes), but do not support indexing across multiple tags or edge types.
        "},{"location":"3.ngql-guide/14.native-index-statements/#operations_on_native_indexes","title":"Operations on native indexes","text":"
        • CREATE INDEX
        • SHOW CREATE INDEX
        • SHOW INDEXES
        • DESCRIBE INDEX
        • REBUILD INDEX
        • SHOW INDEX STATUS
        • DROP INDEX
        • LOOKUP
        • MATCH
        • Geography index
        "},{"location":"3.ngql-guide/14.native-index-statements/#full-text_indexes","title":"Full-text indexes","text":"

        Full-text indexes are used to do prefix, wildcard, regexp, and fuzzy search on a string property. Features are as follows.

        • Full-text indexes allow indexing just one property.
        • Full-text indexes do not support logical operations such as AND, OR, and NOT.

        Note

        To do complete string matches, use native indexes.

        "},{"location":"3.ngql-guide/14.native-index-statements/#null_values","title":"Null values","text":"

        Indexes do not support indexing null values.

        "},{"location":"3.ngql-guide/14.native-index-statements/#range_queries","title":"Range queries","text":"

        In addition to querying single results from native indexes, you can also do range queries. Not all the native indexes support range queries. You can only do range searches for numeric, date, and time type properties.

        "},{"location":"3.ngql-guide/14.native-index-statements/1.create-native-index/","title":"CREATE INDEX","text":""},{"location":"3.ngql-guide/14.native-index-statements/1.create-native-index/#prerequisites","title":"Prerequisites","text":"

        Before you create an index, make sure that the relative tag or edge type is created. For how to create tags or edge types, see CREATE TAG and CREATE EDGE.

        For how to create full-text indexes, see Deploy full-text index.

        "},{"location":"3.ngql-guide/14.native-index-statements/1.create-native-index/#must-read_for_using_indexes","title":"Must-read for using indexes","text":"

        The concept and using restrictions of indexes are comparatively complex. Before you use indexes, you must read the following sections carefully.

        You can use CREATE INDEX to add native indexes for the existing tags, edge types, or properties. They are usually called as tag indexes, edge type indexes, and property indexes.

        • Tag indexes and edge type indexes apply to queries related to the tag and the edge type, but do not apply to queries that are based on certain properties on the tag. For example, you can use LOOKUP to retrieve all the vertices with the tag player.
        • Property indexes apply to property-based queries. For example, you can use the age property to retrieve the VID of all vertices that meet age == 19.

        If a property index i_TA is created for the property A of the tag T and i_T for the tag T, the indexes can be replaced as follows (the same for edge type indexes):

        • The query engine can use i_TA to replace i_T.
        • In the MATCH and LOOKUP statements, i_T may replace i_TA for querying properties.

          Legacy version compatibility

          In previous releases, the tag or edge type index in the LOOKUP statement cannot replace the property index for property queries.

        Although the same results can be obtained by using alternative indexes for queries, the query performance varies according to the selected index.

        Caution

        Indexes can dramatically reduce the write performance. The performance can be greatly reduced. DO NOT use indexes in production environments unless you are fully aware of their influences on your service.

        Long indexes decrease the scan performance of the Storage Service and use more memory. We suggest that you set the indexing length the same as that of the longest string to be indexed. For variable-length string-type properties, the longest index length is 256 bytes; for fixed-length string-type properties, the longest index length is the length of the index itself.

        "},{"location":"3.ngql-guide/14.native-index-statements/1.create-native-index/#steps","title":"Steps","text":"

        If you must use indexes, we suggest that you:

        1. Import the data into NebulaGraph.

        2. Create indexes.

        3. Rebuild indexes.

        4. After the index is created and the data is imported, you can use LOOKUP or MATCH to retrieve the data. You do not need to specify which indexes to use in a query, NebulaGraph figures that out by itself.

        Note

        If you create an index before importing the data, the importing speed will be extremely slow due to the reduction in the write performance.

        Keep --disable_auto_compaction = false during daily incremental writing.

        The newly created index will not take effect immediately. Trying to use a newly created index (such as LOOKUP orREBUILD INDEX) may fail and return can't find xxx in the space because the creation is implemented asynchronously. To make sure the follow-up operations work as expected, Wait for two heartbeat cycles, i.e., 20 seconds. To change the heartbeat interval, modify the heartbeat_interval_secs in the configuration files for all services.

        Danger

        After creating a new index, or dropping the old index and creating a new one with the same name again, you must REBUILD INDEX. Otherwise, these data cannot be returned in the MATCH and LOOKUP statements.

        "},{"location":"3.ngql-guide/14.native-index-statements/1.create-native-index/#syntax","title":"Syntax","text":"
        CREATE {TAG | EDGE} INDEX [IF NOT EXISTS] <index_name> ON {<tag_name> | <edge_name>} ([<prop_name_list>]) [COMMENT '<comment>'];\n
        Parameter Description TAG | EDGE Specifies the index type that you want to create. IF NOT EXISTS Detects if the index that you want to create exists. If it does not exist, a new one will be created. <index_name> 1. The name of the index. It must be unique in a graph space. A recommended way of naming is i_tagName_propName. 2. By default, the name only supports 1-4 byte UTF-8 encoded characters, including English letters (case sensitive), numbers, Chinese characters, etc. However, it cannot include special characters other than the underscore (_), and cannot start with a number.3. To use special characters, reserved keywords, or start with a number, quote the entire name with backticks (`) and do not include periods (.) within the pair of backticks (`). For more information, see Keywords and reserved words.Note:1. If you name an index in Chinese and encounter a SyntaxError, you need to quote the Chinese characters with backticks (`). 2. To include a backtick (`) in an index name, use a backslash to escape the backtick, such as \\`; to include a backslash, the backslash itself also needs to be escaped, such as \\ . <tag_name> | <edge_name> Specifies the name of the tag or edge associated with the index. <prop_name_list> To index a variable-length string property, you must use prop_name(length) to specify the index length, and the maximum index length is 256. To index a tag or an edge type, ignore the prop_name_list. COMMENT The remarks of the index. The maximum length is 256 bytes. By default, there will be no comments on an index."},{"location":"3.ngql-guide/14.native-index-statements/1.create-native-index/#create_tagedge_type_indexes","title":"Create tag/edge type indexes","text":"
        nebula> CREATE TAG INDEX IF NOT EXISTS player_index on player();\n
        nebula> CREATE EDGE INDEX IF NOT EXISTS follow_index on follow();\n

        After indexing a tag or an edge type, you can use the LOOKUP statement to retrieve the VID of all vertices with the tag, or the source vertex ID, destination vertex ID, and ranks of all edges with the edge type. For more information, see LOOKUP.

        "},{"location":"3.ngql-guide/14.native-index-statements/1.create-native-index/#create_single-property_indexes","title":"Create single-property indexes","text":"
        nebula> CREATE TAG INDEX IF NOT EXISTS player_index_0 on player(name(10));\n

        The preceding example creates an index for the name property on all vertices carrying the player tag. This example creates an index using the first 10 characters of the name property.

        # To index a variable-length string property, you need to specify the index length.\nnebula> CREATE TAG IF NOT EXISTS var_string(p1 string);\nnebula> CREATE TAG INDEX IF NOT EXISTS var ON var_string(p1(10));\n\n# To index a fixed-length string property, you do not need to specify the index length.\nnebula> CREATE TAG IF NOT EXISTS fix_string(p1 FIXED_STRING(10));\nnebula> CREATE TAG INDEX IF NOT EXISTS fix ON fix_string(p1);\n
        nebula> CREATE EDGE INDEX IF NOT EXISTS follow_index_0 on follow(degree);\n
        "},{"location":"3.ngql-guide/14.native-index-statements/1.create-native-index/#create_composite_property_indexes","title":"Create composite property indexes","text":"

        An index on multiple properties on a tag (or an edge type) is called a composite property index.

        nebula> CREATE TAG INDEX IF NOT EXISTS player_index_1 on player(name(10), age);\n

        Caution

        Creating composite property indexes across multiple tags or edge types is not supported.

        Note

        NebulaGraph follows the left matching principle to select indexes.

        "},{"location":"3.ngql-guide/14.native-index-statements/2.1.show-create-index/","title":"SHOW CREATE INDEX","text":"

        SHOW CREATE INDEX shows the statement used when creating a tag or an edge type. It contains detailed information about the index, such as its associated properties.

        "},{"location":"3.ngql-guide/14.native-index-statements/2.1.show-create-index/#syntax","title":"Syntax","text":"
        SHOW CREATE {TAG | EDGE} INDEX <index_name>;\n
        "},{"location":"3.ngql-guide/14.native-index-statements/2.1.show-create-index/#examples","title":"Examples","text":"

        You can run SHOW TAG INDEXES to list all tag indexes, and then use SHOW CREATE TAG INDEX to show the information about the creation of the specified index.

        nebula> SHOW TAG INDEXES;\n+------------------+----------+----------+\n| Index Name       | By Tag   | Columns  |\n+------------------+----------+----------+\n| \"player_index_0\" | \"player\" | []       |\n| \"player_index_1\" | \"player\" | [\"name\"] |\n+------------------+----------+----------+\n\nnebula> SHOW CREATE TAG INDEX player_index_1;\n+------------------+--------------------------------------------------+\n| Tag Index Name   | Create Tag Index                                 |\n+------------------+--------------------------------------------------+\n| \"player_index_1\" | \"CREATE TAG INDEX `player_index_1` ON `player` ( |\n|                  |  `name`(20)                                      |\n|                  | )\"                                               |\n+------------------+--------------------------------------------------+\n

        Edge indexes can be queried through a similar approach.

        nebula> SHOW EDGE INDEXES;\n+----------------+----------+---------+\n| Index Name     | By Edge  | Columns |\n+----------------+----------+---------+\n| \"follow_index\" | \"follow\" | []      |\n+----------------+----------+---------+\n\nnebula> SHOW CREATE EDGE INDEX follow_index;\n+-----------------+-------------------------------------------------+\n| Edge Index Name | Create Edge Index                               |\n+-----------------+-------------------------------------------------+\n| \"follow_index\"  | \"CREATE EDGE INDEX `follow_index` ON `follow` ( |\n|                 | )\"                                              |\n+-----------------+-------------------------------------------------+\n
        "},{"location":"3.ngql-guide/14.native-index-statements/2.show-native-indexes/","title":"SHOW INDEXES","text":"

        SHOW INDEXES shows the defined tag or edge type indexes names in the current graph space.

        "},{"location":"3.ngql-guide/14.native-index-statements/2.show-native-indexes/#syntax","title":"Syntax","text":"
        SHOW {TAG | EDGE} INDEXES\n
        "},{"location":"3.ngql-guide/14.native-index-statements/2.show-native-indexes/#examples","title":"Examples","text":"
        nebula> SHOW TAG INDEXES;\n+------------------+--------------+-----------------+\n| Index Name       | By Tag       | Columns         |\n+------------------+--------------+-----------------+\n| \"fix\"            | \"fix_string\" | [\"p1\"]          |\n| \"player_index_0\" | \"player\"     | [\"name\"]        |\n| \"player_index_1\" | \"player\"     | [\"name\", \"age\"] |\n| \"var\"            | \"var_string\" | [\"p1\"]          |\n+------------------+--------------+-----------------+\n\nnebula> SHOW EDGE INDEXES;\n+----------------+----------+---------+\n| Index Name     | By Edge  | Columns |\n| \"follow_index\" | \"follow\" | []      |\n+----------------+----------+---------+\n

        Legacy version compatibility

        In NebulaGraph 2.x, the SHOW TAG/EDGE INDEXES statement only returns Names.

        "},{"location":"3.ngql-guide/14.native-index-statements/3.describe-native-index/","title":"DESCRIBE INDEX","text":"

        DESCRIBE INDEX can get the information about the index with a given name, including the property name (Field) and the property type (Type) of the index.

        "},{"location":"3.ngql-guide/14.native-index-statements/3.describe-native-index/#syntax","title":"Syntax","text":"
        DESCRIBE {TAG | EDGE} INDEX <index_name>;\n
        "},{"location":"3.ngql-guide/14.native-index-statements/3.describe-native-index/#examples","title":"Examples","text":"
        nebula> DESCRIBE TAG INDEX player_index_0;\n+--------+--------------------+\n| Field  | Type               |\n+--------+--------------------+\n| \"name\" | \"fixed_string(30)\" |\n+--------+--------------------+\n\nnebula> DESCRIBE TAG INDEX player_index_1;\n+--------+--------------------+\n| Field  | Type               |\n+--------+--------------------+\n| \"name\" | \"fixed_string(10)\" |\n| \"age\"  | \"int64\"            |\n+--------+--------------------+\n
        "},{"location":"3.ngql-guide/14.native-index-statements/4.rebuild-native-index/","title":"REBUILD INDEX","text":"

        Danger

        • If data is updated or inserted before the creation of the index, you must rebuild the indexes manually to make sure that the indexes contain the previously added data. Otherwise, you cannot use LOOKUP and MATCH to query the data based on the index. If the index is created before any data insertion, there is no need to rebuild the index.
        • When the rebuild of an index is incomplete, queries that rely on the index can use only part of the index and therefore cannot obtain accurate results.

        You can use REBUILD INDEX to rebuild the created tag or edge type index. For details on how to create an index, see CREATE INDEX.

        Caution

        The speed of rebuilding indexes can be optimized by modifying the rebuild_index_part_rate_limit and snapshot_batch_size parameters in the configuration file. In addition, greater parameter values may result in higher memory and network usage, see Storage Service configurations for details.

        "},{"location":"3.ngql-guide/14.native-index-statements/4.rebuild-native-index/#syntax","title":"Syntax","text":"
        REBUILD {TAG | EDGE} INDEX [<index_name_list>];\n\n<index_name_list>::=\n    [index_name [, index_name] ...]\n
        • Multiple indexes are permitted in a single REBUILD statement, separated by commas. When the index name is not specified, all tag or edge indexes are rebuilt.
        • After the rebuilding is complete, you can use the SHOW {TAG | EDGE} INDEX STATUS command to check if the index is successfully rebuilt. For details on index status, see SHOW INDEX STATUS.
        "},{"location":"3.ngql-guide/14.native-index-statements/4.rebuild-native-index/#examples","title":"Examples","text":"
        nebula> CREATE TAG IF NOT EXISTS person(name string, age int, gender string, email string);\nnebula> CREATE TAG INDEX IF NOT EXISTS single_person_index ON person(name(10));\n\n# The following example rebuilds an index and returns the job ID.\nnebula> REBUILD TAG INDEX single_person_index;\n+------------+\n| New Job Id |\n+------------+\n| 31         |\n+------------+\n\n# The following example checks the index status.\nnebula> SHOW TAG INDEX STATUS;\n+-----------------------+--------------+\n| Name                  | Index Status |\n+-----------------------+--------------+\n| \"single_person_index\" | \"FINISHED\"   |\n+-----------------------+--------------+\n\n# You can also use \"SHOW JOB <job_id>\" to check if the rebuilding process is complete.\nnebula> SHOW JOB 31;\n+----------------+---------------------+------------+-------------------------+-------------------------+-------------+\n| Job Id(TaskId) | Command(Dest)       | Status     | Start Time              | Stop Time               | Error Code  |\n+----------------+---------------------+------------+-------------------------+-------------------------+-------------+\n| 31             | \"REBUILD_TAG_INDEX\" | \"FINISHED\" | 2021-07-07T09:04:24.000 | 2021-07-07T09:04:24.000 | \"SUCCEEDED\" |\n| 0              | \"storaged1\"         | \"FINISHED\" | 2021-07-07T09:04:24.000 | 2021-07-07T09:04:28.000 | \"SUCCEEDED\" |\n| 1              | \"storaged2\"         | \"FINISHED\" | 2021-07-07T09:04:24.000 | 2021-07-07T09:04:28.000 | \"SUCCEEDED\" |\n| 2              | \"storaged0\"         | \"FINISHED\" | 2021-07-07T09:04:24.000 | 2021-07-07T09:04:28.000 | \"SUCCEEDED\" |\n| \"Total:3\"      | \"Succeeded:3\"       | \"Failed:0\" | \"In Progress:0\"         | \"\"                      | \"\"          |\n+----------------+---------------------+------------+-------------------------+-------------------------+-------------+\n

        NebulaGraph creates a job to rebuild the index. The job ID is displayed in the preceding return message. To check if the rebuilding process is complete, use the SHOW JOB <job_id> statement. For more information, see SHOW JOB.

        "},{"location":"3.ngql-guide/14.native-index-statements/5.show-native-index-status/","title":"SHOW INDEX STATUS","text":"

        SHOW INDEX STATUS returns the name of the created tag or edge type index and its status of job.

        The status of rebuilding indexes includes:

        • QUEUE: The job is in a queue.
        • RUNNING: The job is running.
        • FINISHED: The job is finished.
        • FAILED: The job has failed.
        • STOPPED: The job has stopped.
        • INVALID: The job is invalid.

        Note

        For details on how to create an index, see CREATE INDEX.

        "},{"location":"3.ngql-guide/14.native-index-statements/5.show-native-index-status/#syntax","title":"Syntax","text":"
        SHOW {TAG | EDGE} INDEX STATUS;\n
        "},{"location":"3.ngql-guide/14.native-index-statements/5.show-native-index-status/#example","title":"Example","text":"
        nebula> SHOW TAG INDEX STATUS;\n+----------------------+--------------+\n| Name                 | Index Status |\n+----------------------+--------------+\n| \"player_index_0\"     | \"FINISHED\"   |\n| \"player_index_1\"     | \"FINISHED\"   |\n+----------------------+--------------+\n
        "},{"location":"3.ngql-guide/14.native-index-statements/6.drop-native-index/","title":"DROP INDEX","text":"

        DROP INDEX removes an existing index from the current graph space.

        "},{"location":"3.ngql-guide/14.native-index-statements/6.drop-native-index/#prerequisite","title":"Prerequisite","text":"

        Running the DROP INDEX statement requires some privileges of DROP TAG INDEX and DROP EDGE INDEX in the given graph space. Otherwise, NebulaGraph throws an error.

        "},{"location":"3.ngql-guide/14.native-index-statements/6.drop-native-index/#syntax","title":"Syntax","text":"
        DROP {TAG | EDGE} INDEX [IF EXISTS] <index_name>;\n

        IF EXISTS: Detects whether the index that you want to drop exists. If it exists, it will be dropped.

        "},{"location":"3.ngql-guide/14.native-index-statements/6.drop-native-index/#example","title":"Example","text":"
        nebula> DROP TAG INDEX player_index_0;\n
        "},{"location":"3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index/","title":"Full-text indexes","text":"

        Full-text indexes are used to do prefix, wildcard, regexp, and fuzzy search on a string property.

        You can use the WHERE clause to specify the search strings in LOOKUP statements.

        "},{"location":"3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index/#prerequisite","title":"Prerequisite","text":"

        Before using the full-text index, make sure that you have deployed a Elasticsearch cluster and a Listener cluster. For more information, see Deploy Elasticsearch and Deploy Listener.

        "},{"location":"3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index/#precaution","title":"Precaution","text":"

        Before using the full-text index, make sure that you know the restrictions.

        "},{"location":"3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index/#full_text_queries","title":"Full Text Queries","text":"

        Full-text queries enable you to search for parsed text fields, using a parser with strict syntax to return content based on the query string provided. For details, see Query string query.

        "},{"location":"3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index/#syntax","title":"Syntax","text":""},{"location":"3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index/#create_full-text_indexes","title":"Create full-text indexes","text":"
        CREATE FULLTEXT {TAG | EDGE} INDEX <index_name> ON {<tag_name> | <edge_name>} (<prop_name> [,<prop_name>]...) [ANALYZER=\"<analyzer_name>\"];\n
        • Composite indexes with multiple properties are supported when creating full-text indexes.
        • <analyzer_name> is the name of the analyzer. The default value is standard. To use other analyzers (e.g. IK Analysis), you need to make sure that the corresponding analyzer is installed in Elasticsearch in advance.
        "},{"location":"3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index/#show_full-text_indexes","title":"Show full-text indexes","text":"
        SHOW FULLTEXT INDEXES;\n
        "},{"location":"3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index/#rebuild_full-text_indexes","title":"Rebuild full-text indexes","text":"
        REBUILD FULLTEXT INDEX;\n

        Caution

        When there is a large amount of data, rebuilding full-text index is slow, you can modify snapshot_send_files=false in the configuration file of Storage service(nebula-storaged.conf).

        "},{"location":"3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index/#drop_full-text_indexes","title":"Drop full-text indexes","text":"
        DROP FULLTEXT INDEX <index_name>;\n
        "},{"location":"3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index/#use_query_options","title":"Use query options","text":"
        LOOKUP ON {<tag> | <edge_type>} WHERE ES_QUERY(<index_name>, \"<text>\") YIELD <return_list> [| LIMIT [<offset>,] <number_rows>];\n\n<return_list>\n    <prop_name> [AS <prop_alias>] [, <prop_name> [AS <prop_alias>] ...] [, id(vertex)  [AS <prop_alias>]] [, score() AS <score_alias>]\n
        • index_name: The name of the full-text index.
        • text: Search conditions. The where can only be followed by the ES_QUERY, and all judgment conditions must be written in the text. For supported syntax, see Query string syntax.
        • score(): The score calculated by doing N degree expansion for the eligible vertices. The default value is 1.0. The higher the score, the higher the degree of match. The return value is sorted by default from highest to lowest score. For details, see Search and Scoring in Lucene.
        "},{"location":"3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index/#examples","title":"Examples","text":"
        // This example creates the graph space.\nnebula> CREATE SPACE IF NOT EXISTS basketballplayer (partition_num=3,replica_factor=1, vid_type=fixed_string(30));\n\n// This example signs in the text service.\nnebula> SIGN IN TEXT SERVICE (192.168.8.100:9200, HTTP);\n\n// This example checks the text service status.\nnebula> SHOW TEXT SEARCH CLIENTS;\n+-----------------+-----------------+------+\n| Type            | Host            | Port |\n+-----------------+-----------------+------+\n| \"ELASTICSEARCH\" | \"192.168.8.100\" | 9200 |\n+-----------------+-----------------+------+\n\n// This example switches the graph space.\nnebula> USE basketballplayer;\n\n// This example adds the listener to the NebulaGraph cluster.\nnebula> ADD LISTENER ELASTICSEARCH 192.168.8.100:9789;\n\n// This example checks the listener status. When the status is `Online`, the listener is ready.\nnebula> SHOW LISTENER;\n+--------+-----------------+------------------------+-------------+\n| PartId | Type            | Host                   | Host Status |\n+--------+-----------------+------------------------+-------------+\n| 1      | \"ELASTICSEARCH\" | \"\"192.168.8.100\":9789\" | \"ONLINE\"    |\n| 2      | \"ELASTICSEARCH\" | \"\"192.168.8.100\":9789\" | \"ONLINE\"    |\n| 3      | \"ELASTICSEARCH\" | \"\"192.168.8.100\":9789\" | \"ONLINE\"    |\n+--------+-----------------+------------------------+-------------+\n\n// This example creates the tag.\nnebula> CREATE TAG IF NOT EXISTS player(name string, city string);\n\n// This example creates a single-attribute full-text index.\nnebula> CREATE FULLTEXT TAG INDEX fulltext_index_1 ON player(name) ANALYZER=\"standard\";\n\n// This example creates a multi-attribute full-text indexe.\nnebula> CREATE FULLTEXT TAG INDEX fulltext_index_2 ON player(name,city) ANALYZER=\"standard\";\n\n// This example rebuilds the full-text index.\nnebula> REBUILD FULLTEXT INDEX;\n\n// This example shows the full-text index.\nnebula> SHOW FULLTEXT INDEXES;\n+--------------------+-------------+-------------+--------------+------------+\n| Name               | Schema Type | Schema Name | Fields       | Analyzer   |\n+--------------------+-------------+-------------+--------------+------------+\n| \"fulltext_index_1\" | \"Tag\"       | \"player\"    | \"name\"       | \"standard\" |\n| \"fulltext_index_2\" | \"Tag\"       | \"player\"    | \"name, city\" | \"standard\" |\n+--------------------+-------------+-------------+--------------+------------+\n\n// This example inserts the test data.\nnebula> INSERT VERTEX player(name, city) VALUES \\\n    \"Russell Westbrook\": (\"Russell Westbrook\", \"Los Angeles\"), \\\n    \"Chris Paul\": (\"Chris Paul\", \"Houston\"),\\\n    \"Boris Diaw\": (\"Boris Diaw\", \"Houston\"),\\\n    \"David West\": (\"David West\", \"Philadelphia\"),\\\n    \"Danny Green\": (\"Danny Green\", \"Philadelphia\"),\\\n    \"Tim Duncan\": (\"Tim Duncan\", \"New York\"),\\\n    \"James Harden\": (\"James Harden\", \"New York\"),\\\n    \"Tony Parker\": (\"Tony Parker\", \"Chicago\"),\\\n    \"Aron Baynes\": (\"Aron Baynes\", \"Chicago\"),\\\n    \"Ben Simmons\": (\"Ben Simmons\", \"Phoenix\"),\\\n    \"Blake Griffin\": (\"Blake Griffin\", \"Phoenix\");\n\n// These examples run test queries.\nnebula> LOOKUP ON player WHERE ES_QUERY(fulltext_index_1,\"Chris\") YIELD id(vertex);\n+--------------+\n| id(VERTEX)   |\n+--------------+\n| \"Chris Paul\" |\n+--------------+\nnebula> LOOKUP ON player WHERE ES_QUERY(fulltext_index_1,\"Harden\") YIELD properties(vertex);\n+----------------------------------------------------------------+\n| properties(VERTEX)                                             |\n+----------------------------------------------------------------+\n| {_vid: \"James Harden\", city: \"New York\", name: \"James Harden\"} |\n+----------------------------------------------------------------+\n\nnebula> LOOKUP ON player WHERE ES_QUERY(fulltext_index_1,\"Da*\") YIELD properties(vertex);\n+------------------------------------------------------------------+\n| properties(VERTEX)                                               |\n+------------------------------------------------------------------+\n| {_vid: \"David West\", city: \"Philadelphia\", name: \"David West\"}   |\n| {_vid: \"Danny Green\", city: \"Philadelphia\", name: \"Danny Green\"} |\n+------------------------------------------------------------------+\n\nnebula> LOOKUP ON player WHERE ES_QUERY(fulltext_index_1,\"*b*\") YIELD id(vertex);\n+---------------------+\n| id(VERTEX)          |\n+---------------------+\n| \"Russell Westbrook\" |\n| \"Boris Diaw\"        |\n| \"Aron Baynes\"       |\n| \"Ben Simmons\"       |\n| \"Blake Griffin\"     |\n+---------------------+\n\nnebula> LOOKUP ON player WHERE ES_QUERY(fulltext_index_1,\"*b*\") YIELD id(vertex) | LIMIT 2,3;\n+-----------------+\n| id(VERTEX)      |\n+-----------------+\n| \"Aron Baynes\"   |\n| \"Ben Simmons\"   |\n| \"Blake Griffin\" |\n+-----------------+\n\nnebula> LOOKUP ON player WHERE ES_QUERY(fulltext_index_1,\"*b*\") YIELD id(vertex) | YIELD count(*);\n+----------+\n| count(*) |\n+----------+\n| 5        |\n+----------+\n\nnebula> LOOKUP ON player WHERE ES_QUERY(fulltext_index_1,\"*b*\") YIELD id(vertex), score() AS score;\n+---------------------+-------+\n| id(VERTEX)          | score |\n+---------------------+-------+\n| \"Russell Westbrook\" | 1.0   |\n| \"Boris Diaw\"        | 1.0   |\n| \"Aron Baynes\"       | 1.0   |\n| \"Ben Simmons\"       | 1.0   |\n| \"Blake Griffin\"     | 1.0   |\n+---------------------+-------+\n\n// For documents containing a word `b`, its score will be multiplied by a weighting factor of 4, while for documents containing a word `c`, the default weighting factor of 1 is used.\nnebula> LOOKUP ON player WHERE ES_QUERY(fulltext_index_1,\"*b*^4 OR *c*\") YIELD id(vertex), score() AS score;\n+---------------------+-------+\n| id(VERTEX)          | score |\n+---------------------+-------+\n| \"Russell Westbrook\" | 4.0   |\n| \"Boris Diaw\"        | 4.0   |\n| \"Aron Baynes\"       | 4.0   |\n| \"Ben Simmons\"       | 4.0   |\n| \"Blake Griffin\"     | 4.0   |\n| \"Chris Paul\"        | 1.0   |\n| \"Tim Duncan\"        | 1.0   |\n+---------------------+-------+\n\n// When using a multi-attribute full-text index query, the conditions are matched within all properties of the index.\nnebula> LOOKUP ON player WHERE ES_QUERY(fulltext_index_2,\"*h*\") YIELD properties(vertex);\n+------------------------------------------------------------------+\n| properties(VERTEX)                                               |\n+------------------------------------------------------------------+\n| {_vid: \"Chris Paul\", city: \"Houston\", name: \"Chris Paul\"}        |\n| {_vid: \"Boris Diaw\", city: \"Houston\", name: \"Boris Diaw\"}        |\n| {_vid: \"David West\", city: \"Philadelphia\", name: \"David West\"}   |\n| {_vid: \"James Harden\", city: \"New York\", name: \"James Harden\"}   |\n| {_vid: \"Tony Parker\", city: \"Chicago\", name: \"Tony Parker\"}      |\n| {_vid: \"Aron Baynes\", city: \"Chicago\", name: \"Aron Baynes\"}      |\n| {_vid: \"Ben Simmons\", city: \"Phoenix\", name: \"Ben Simmons\"}      |\n| {_vid: \"Blake Griffin\", city: \"Phoenix\", name: \"Blake Griffin\"}  |\n| {_vid: \"Danny Green\", city: \"Philadelphia\", name: \"Danny Green\"} |\n+------------------------------------------------------------------+\n\n// When using multi-attribute full-text index queries, you can specify different text for different properties for the query.\nnebula> LOOKUP ON player WHERE ES_QUERY(fulltext_index_2,\"name:*b* AND city:Houston\") YIELD properties(vertex);\n+-----------------------------------------------------------+\n| properties(VERTEX)                                        |\n+-----------------------------------------------------------+\n| {_vid: \"Boris Diaw\", city: \"Houston\", name: \"Boris Diaw\"} |\n+-----------------------------------------------------------+\n\n// Delete single-attribute full-text index.\nnebula> DROP FULLTEXT INDEX fulltext_index_1;\n
        "},{"location":"3.ngql-guide/17.query-tuning-statements/1.explain-and-profile/","title":"EXPLAIN and PROFILE","text":"

        EXPLAIN helps output the execution plan of an nGQL statement without executing the statement.

        PROFILE executes the statement, then outputs the execution plan as well as the execution profile. You can optimize the queries for better performance according to the execution plan and profile.

        "},{"location":"3.ngql-guide/17.query-tuning-statements/1.explain-and-profile/#execution_plan","title":"Execution Plan","text":"

        The execution plan is determined by the execution planner in the NebulaGraph query engine.

        The execution planner processes the parsed nGQL statements into actions. An action is the smallest unit that can be executed. A typical action fetches all neighbors of a given vertex, gets the properties of an edge, and filters vertices or edges based on the given conditions. Each action is assigned to an operator that performs the action.

        For example, a SHOW TAGS statement is processed into two actions and assigned to a Start operator and a ShowTags operator, while a more complex GO statement may be processed into more than 10 actions and assigned to 10 operators.

        "},{"location":"3.ngql-guide/17.query-tuning-statements/1.explain-and-profile/#syntax","title":"Syntax","text":"
        • EXPLAIN
          EXPLAIN [format= {\"row\" | \"dot\" | \"tck\"}] <your_nGQL_statement>;\n
        • PROFILE
          PROFILE [format= {\"row\" | \"dot\" | \"tck\"}] <your_nGQL_statement>;\n
        "},{"location":"3.ngql-guide/17.query-tuning-statements/1.explain-and-profile/#output_formats","title":"Output formats","text":"

        The output of an EXPLAIN or a PROFILE statement has three formats, the default row format, the dot format, and the tck format. You can use the format option to modify the output format. Omitting the format option indicates using the default row format.

        "},{"location":"3.ngql-guide/17.query-tuning-statements/1.explain-and-profile/#the_row_format","title":"The row format","text":"

        The row format outputs the return message in a table as follows.

        • EXPLAIN
          nebula> EXPLAIN format=\"row\" SHOW TAGS;\nExecution succeeded (time spent 327/892 us)\n\nExecution Plan\n\n-----+----------+--------------+----------------+----------------------------------------------------------------------\n| id | name     | dependencies | profiling data | operator info                                                       |\n-----+----------+--------------+----------------+----------------------------------------------------------------------\n|  1 | ShowTags | 0            |                | outputVar: [{\"colNames\":[],\"name\":\"__ShowTags_1\",\"type\":\"DATASET\"}] |\n|    |          |              |                | inputVar:                                                           |\n-----+----------+--------------+----------------+----------------------------------------------------------------------\n|  0 | Start    |              |                | outputVar: [{\"colNames\":[],\"name\":\"__Start_0\",\"type\":\"DATASET\"}]    |\n-----+----------+--------------+----------------+----------------------------------------------------------------------\n
        • PROFILE
          nebula> PROFILE format=\"row\" SHOW TAGS;\n+--------+\n| Name   |\n+--------+\n| player |\n+--------+\n| team   |\n+--------+\nGot 2 rows (time spent 2038/2728 us)\n\nExecution Plan\n\n-----+----------+--------------+----------------------------------------------------+----------------------------------------------------------------------\n| id | name     | dependencies | profiling data                                     | operator info                                                       |\n-----+----------+--------------+----------------------------------------------------+----------------------------------------------------------------------\n|  1 | ShowTags | 0            | ver: 0, rows: 1, execTime: 42us, totalTime: 1177us | outputVar: [{\"colNames\":[],\"name\":\"__ShowTags_1\",\"type\":\"DATASET\"}] |\n|    |          |              |                                                    | inputVar:                                                           |\n-----+----------+--------------+----------------------------------------------------+----------------------------------------------------------------------\n|  0 | Start    |              | ver: 0, rows: 0, execTime: 1us, totalTime: 57us    | outputVar: [{\"colNames\":[],\"name\":\"__Start_0\",\"type\":\"DATASET\"}]    |\n-----+----------+--------------+----------------------------------------------------+----------------------------------------------------------------------\n

        The descriptions are as follows.

        Parameter Description id The ID of the operator. name The name of the operator. dependencies The ID of the operator that the current operator depends on. profiling data The content of the execution profile. ver is the version of the operator. rows shows the number of rows to be output by the operator. execTime shows the execution time of action. totalTime is the sum of the execution time, the system scheduling time, and the queueing time. operator info The detailed information of the operator."},{"location":"3.ngql-guide/17.query-tuning-statements/1.explain-and-profile/#the_dot_format","title":"The dot format","text":"

        You can use the format=\"dot\" option to output the return message in the dot language, and then use Graphviz to generate a graph of the plan.

        Note

        Graphviz is open source graph visualization software. Graphviz provides an online tool for previewing DOT language files and exporting them to other formats such as SVG or JSON. For more information, see Graphviz Online.

        nebula> EXPLAIN format=\"dot\" SHOW TAGS;\nExecution succeeded (time spent 161/665 us)\nExecution Plan\n---------------------------------------------------------------------------------------------------------------------------------------------  -------------\n  plan\n---------------------------------------------------------------------------------------------------------------------------------------------  -------------\n  digraph exec_plan {\n      rankdir=LR;\n      \"ShowTags_0\"[label=\"ShowTags_0|outputVar: \\[\\{\\\"colNames\\\":\\[\\],\\\"name\\\":\\\"__ShowTags_0\\\",\\\"type\\\":\\\"DATASET\\\"\\}\\]\\l|inputVar:\\l\",   shape=Mrecord];\n      \"Start_2\"->\"ShowTags_0\";\n      \"Start_2\"[label=\"Start_2|outputVar: \\[\\{\\\"colNames\\\":\\[\\],\\\"name\\\":\\\"__Start_2\\\",\\\"type\\\":\\\"DATASET\\\"\\}\\]\\l|inputVar: \\l\",   shape=Mrecord];\n  }\n---------------------------------------------------------------------------------------------------------------------------------------------  -------------\n

        The Graphviz graph transformed from the above DOT statement is as follows.

        "},{"location":"3.ngql-guide/17.query-tuning-statements/1.explain-and-profile/#the_tck_format","title":"The tck format","text":"

        The tck format is similar to a table, but without borders and dividing lines between rows. You can use the results as test cases for unit testing. For information on tck format test cases, see TCK cases.

        • EXPLAIN
          nebula> EXPLAIN format=\"tck\" FETCH PROP ON player \"player_1\",\"player_2\",\"player_3\" YIELD properties(vertex).name as name, properties(vertex).age as age;\nExecution succeeded (time spent 261\u00b5s/613.718\u00b5s)\nExecution Plan (optimize time 28 us)\n| id | name        | dependencies | profiling data | operator info |\n|  2 | Project     | 1            |                |               |\n|  1 | GetVertices | 0            |                |               |\n|  0 | Start       |              |                |               |\n\nWed, 22 Mar 2023 23:15:52 CST\n
        • PROFILE
          nebula> PROFILE format=\"tck\" FETCH PROP ON player \"player_1\",\"player_2\",\"player_3\" YIELD properties(vertex).name as name, properties(vertex).age as age;\n| name         | age |\n| \"Piter Park\" | 24  |\n| \"aaa\"        | 24  |\n| \"ccc\"        | 24  |\nGot 3 rows (time spent 1.474ms/2.19677ms)\nExecution Plan (optimize time 41 us)\n| id | name        | dependencies | profiling data                                                                                                      | operator info |\n|  2 | Project     | 1            | {\"rows\":3,\"version\":0}                                                                                              |               |\n|  1 | GetVertices | 0            | {\"resp[0]\":{\"exec\":\"232(us)\",\"host\":\"127.0.0.1:9779\",\"total\":\"758(us)\"},\"rows\":3,\"total_rpc\":\"875(us)\",\"version\":0} |               |\n|  0 | Start       |              | {\"rows\":0,\"version\":0}                                                                                              |               |\nWed, 22 Mar 2023 23:16:13 CST\n
        "},{"location":"3.ngql-guide/17.query-tuning-statements/2.kill-session/","title":"Kill sessions","text":"

        The KILL SESSION command is to terminate running sessions.

        Note

        • Only the NebulaGraph root user can terminate sessions.
        • After executing the KILL SESSION command, all Graph services synchronize the latest session information after 2* session_reclaim_interval_secs seconds (120 seconds by default).
        "},{"location":"3.ngql-guide/17.query-tuning-statements/2.kill-session/#syntax","title":"Syntax","text":"

        You can run the KILL SESSION command to terminate one or multiple sessions. The syntax is as follows:

        • To terminate one session

          KILL {SESSION|SESSIONS} <SessionId>\n
          • {SESSION|SESSIONS}: SESSION or SESSIONS, both are supported.
          • <SessionId>: Specifies the ID of one session. You can run the SHOW SESSIONS command to view the IDs of sessions.
        • To terminate multiple sessions

          SHOW SESSIONS \n| YIELD $-.SessionId AS sid [WHERE <filter_clause>]\n| KILL {SESSION|SESSIONS} $-.sid\n

          Note

          The KILL SESSION command supports the pipeline operation, combining the SHOW SESSIONS command with the KILL SESSION command to terminate multiple sessions.

          • [WHERE <filter_clause>]\uff1a
            • Optional, the WHERE clause is used to filter sessions. <filter_expression> specifies a session filtering expression, for example, WHERE $-.CreateTime < datetime(\"2022-12-14T18:00:00\"). If the WHERE clause is not specified, all sessions are terminated.
            • Filtering conditions in a WHERE clause include: SessionId, UserName, SpaceName, CreateTime, UpdateTime, GraphAddr, Timezone, and ClientIp. You can run the SHOW SESSIONS command to view descriptions of these conditions.
          • {SESSION|SESSIONS}: SESSION or SESSIONS, both are supported.

          Caution

          Please use filtering conditions with caution to avoid deleting sessions by mistake.

        "},{"location":"3.ngql-guide/17.query-tuning-statements/2.kill-session/#examples","title":"Examples","text":"
        • To terminate one session

          nebula> KILL SESSION 1672887983842984 \n
        • To terminate multiple sessions

          • Terminate all sessions whose creation time is less than 2023-01-05T18:00:00.

            nebula> SHOW SESSIONS | YIELD $-.SessionId AS sid WHERE $-.CreateTime < datetime(\"2023-01-05T18:00:00\") | KILL SESSIONS $-.sid\n
          • Terminates the two sessions with the earliest creation times.

            nebula> SHOW SESSIONS | YIELD $-.SessionId AS sid, $-.CreateTime as CreateTime | ORDER BY $-.CreateTime ASC | LIMIT 2 | KILL SESSIONS $-.sid\n
          • Terminates all sessions created by the username session_user1.

            nebula> SHOW SESSIONS | YIELD $-.SessionId as sid WHERE $-.UserName == \"session_user1\" | KILL SESSIONS $-.sid\n
          • Terminate all sessions.

            nebula> SHOW SESSIONS | YIELD $-.SessionId as sid | KILL SESSION $-.sid\n\n// Or\nnebula> SHOW SESSIONS | KILL SESSIONS $-.SessionId\n

            Caution

            When you terminate all sessions, the current session is terminated. Please use it with caution.

        "},{"location":"3.ngql-guide/17.query-tuning-statements/6.kill-query/","title":"Kill queries","text":"

        KILL QUERY can terminate the query being executed, and is often used to terminate slow queries.

        Note

        Users with the God role can kill any query. Other roles can only kill their own queries.

        "},{"location":"3.ngql-guide/17.query-tuning-statements/6.kill-query/#syntax","title":"Syntax","text":"
        KILL QUERY (session=<session_id>, plan=<plan_id>);\n
        • session_id: The ID of the session.
        • plan_id: The ID of the execution plan.

        The ID of the session and the ID of the execution plan can uniquely determine a query. Both can be obtained through the SHOW QUERIES statement.

        "},{"location":"3.ngql-guide/17.query-tuning-statements/6.kill-query/#examples","title":"Examples","text":"

        This example executes KILL QUERY in one session to terminate the query in another session.

        nebula> KILL QUERY(SESSION=1625553545984255,PLAN=163);\n

        The query will be terminated and the following information will be returned.

        [ERROR (-1005)]: ExecutionPlanId[1001] does not exist in current Session.\n
        "},{"location":"3.ngql-guide/3.data-types/1.numeric/","title":"Numeric types","text":"

        nGQL supports both integer and floating-point number.

        "},{"location":"3.ngql-guide/3.data-types/1.numeric/#integer","title":"Integer","text":"

        Signed 64-bit integer (INT64), 32-bit integer (INT32), 16-bit integer (INT16), and 8-bit integer (INT8) are supported.

        Type Declared keywords Range INT64 INT64 orINT -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 INT32 INT32 -2,147,483,648 ~ 2,147,483,647 INT16 INT16 -32,768 ~ 32,767 INT8 INT8 -128 ~ 127"},{"location":"3.ngql-guide/3.data-types/1.numeric/#floating-point_number","title":"Floating-point number","text":"

        Both single-precision floating-point format (FLOAT) and double-precision floating-point format (DOUBLE) are supported.

        Type Declared keywords Range Precision FLOAT FLOAT 3.4E +/- 38 6~7 bits DOUBLE DOUBLE 1.7E +/- 308 15~16 bits

        Scientific notation is also supported, such as 1e2, 1.1e2, .3e4, 1.e4, and -1234E-10.

        Note

        The data type of DECIMAL in MySQL is not supported.

        "},{"location":"3.ngql-guide/3.data-types/1.numeric/#reading_and_writing_of_data_values","title":"Reading and writing of data values","text":"

        When writing and reading different types of data, nGQL complies with the following rules:

        Data type Set as VID Set as property Resulted data type INT64 Supported Supported INT64 INT32 Not supported Supported INT64 INT16 Not supported Supported INT64 INT8 Not supported Supported INT64 FLOAT Not supported Supported DOUBLE DOUBLE Not supported Supported DOUBLE

        For example, nGQL does not support setting VID as INT8, but supports setting a certain property type of TAG or Edge type as INT8. When using the nGQL statement to read the property of INT8, the resulted type is INT64.

        • Multiple formats are supported:

          • Decimal, such as 123456.
          • Hexadecimal, such as 0x1e240.
          • Octal, such as 0361100.

          However, NebulaGraph will parse the written non-decimal value into a decimal value and save it. The value read is decimal.

          For example, the type of the property score is INT. The value of 0xb is assigned to it through the INSERT statement. If querying the property value with statements such as FETCH, you will get the result 11, which is the decimal result of the hexadecimal 0xb.

        • Round a FLOAT/DOUBLE value when inserting it to an INT column.
        "},{"location":"3.ngql-guide/3.data-types/10.geography/","title":"Geography","text":"

        Geography is a data type composed of latitude and longitude that represents geospatial information. NebulaGraph currently supports Point, LineString, and Polygon in Simple Features and some functions in SQL-MM 3, such as part of the core geo parsing, construction, formatting, conversion, predicates, and dimensions.

        "},{"location":"3.ngql-guide/3.data-types/10.geography/#type_description","title":"Type description","text":"

        A point is the basic data type of geography, which is determined by a latitude and a longitude. For example, \"POINT(3 8)\" means that the longitude is 3\u00b0 and the latitude is 8\u00b0. Multiple points can form a linestring or a polygon.

        Note

        You cannot directly insert geographic data of the following types, such as INSERT VERTEX any_shape(geo) VALUES \"1\":(\"POINT(1 1)\"). Instead, you need to use a geography function to specify the data type before inserting, such as INSERT VERTEX any_shape(geo) VALUES \"1\":(ST_GeogFromText(\"POINT(1 1)\"));.

        Shape Example Description Point \"POINT(3 8)\" Specifies the data type as a point. LineString \"LINESTRING(3 8, 4.7 73.23)\" Specifies the data type as a linestring. Polygon \"POLYGON((0 1, 1 2, 2 3, 0 1))\" Specifies the data type as a polygon."},{"location":"3.ngql-guide/3.data-types/10.geography/#examples","title":"Examples","text":"
        //Create a Tag to allow storing any geography data type.\nnebula> CREATE TAG IF NOT EXISTS any_shape(geo geography);\n\n//Create a Tag to allow storing a point only.\nnebula> CREATE TAG IF NOT EXISTS only_point(geo geography(point));\n\n//Create a Tag to allow storing a linestring only.\nnebula> CREATE TAG IF NOT EXISTS only_linestring(geo geography(linestring));\n\n//Create a Tag to allow storing a polygon only.\nnebula> CREATE TAG IF NOT EXISTS only_polygon(geo geography(polygon));\n\n//Create an Edge type to allow storing any geography data type.\nnebula> CREATE EDGE IF NOT EXISTS any_shape_edge(geo geography);\n\n//Create a vertex to store the geography of a polygon.\nnebula> INSERT VERTEX any_shape(geo) VALUES \"103\":(ST_GeogFromText(\"POLYGON((0 1, 1 2, 2 3, 0 1))\"));\n\n//Create an edge to store the geography of a polygon.\nnebula> INSERT EDGE any_shape_edge(geo) VALUES \"201\"->\"302\":(ST_GeogFromText(\"POLYGON((0 1, 1 2, 2 3, 0 1))\"));\n\n//Query the geography of Vertex 103.\nnebula> FETCH PROP ON any_shape \"103\" YIELD ST_ASText(any_shape.geo);\n+---------------------------------+\n| ST_ASText(any_shape.geo)        |\n+---------------------------------+\n| \"POLYGON((0 1, 1 2, 2 3, 0 1))\" |\n+---------------------------------+\n\n//Query the geography of the edge which traverses from Vertex 201 to Vertex 302.\nnebula> FETCH PROP ON any_shape_edge \"201\"->\"302\" YIELD ST_ASText(any_shape_edge.geo);\n+---------------------------------+\n| ST_ASText(any_shape_edge.geo)   |\n+---------------------------------+\n| \"POLYGON((0 1, 1 2, 2 3, 0 1))\" |\n+---------------------------------+\n\n//Create an index for the geography of the Tag any_shape and run LOOKUP.\nnebula> CREATE TAG INDEX IF NOT EXISTS any_shape_geo_index ON any_shape(geo);\nnebula> REBUILD TAG INDEX any_shape_geo_index;\nnebula> LOOKUP ON any_shape YIELD ST_ASText(any_shape.geo);\n+---------------------------------+\n| ST_ASText(any_shape.geo)        |\n+---------------------------------+\n| \"POLYGON((0 1, 1 2, 2 3, 0 1))\" |\n+---------------------------------+\n

        When creating an index for geography properties, you can specify the parameters for the index.

        Parameter Default value Description s2_max_level 30 The maximum level of S2 cell used in the covering. Allowed values: 1~30. Setting it to less than the default means that NebulaGraph will be forced to generate coverings using larger cells. s2_max_cells 8 The maximum number of S2 cells used in the covering. Provides a limit on how much work is done exploring the possible coverings. Allowed values: 1~30. You may want to use higher values for odd-shaped regions such as skinny rectangles.

        Note

        Specifying the above two parameters does not affect the Point type of property. The s2_max_level value of the Point type is forced to be 30.

        nebula> CREATE TAG INDEX IF NOT EXISTS any_shape_geo_index ON any_shape(geo) with (s2_max_level=30, s2_max_cells=8);\n

        For more index information, see Index overview.

        "},{"location":"3.ngql-guide/3.data-types/2.boolean/","title":"Boolean","text":"

        A boolean data type is declared with the bool keyword and can only take the values true or false.

        nGQL supports using boolean in the following ways:

        • Define the data type of the property value as a boolean.
        • Use boolean as judgment conditions in the WHERE clause.
        "},{"location":"3.ngql-guide/3.data-types/3.string/","title":"String","text":"

        Fixed-length strings and variable-length strings are supported.

        "},{"location":"3.ngql-guide/3.data-types/3.string/#declaration_and_literal_representation","title":"Declaration and literal representation","text":"

        The string type is declared with the keywords of:

        • STRING: Variable-length strings.
        • FIXED_STRING(<length>): Fixed-length strings. <length> is the length of the string, such as FIXED_STRING(32).

        A string type is used to store a sequence of characters (text). The literal constant is a sequence of characters of any length surrounded by double or single quotes. For example, \"Hello, Cooper\" or 'Hello, Cooper'.

        "},{"location":"3.ngql-guide/3.data-types/3.string/#string_reading_and_writing","title":"String reading and writing","text":"

        Nebula\u00a0Graph supports using string types in the following ways:

        • Define the data type of VID as a fixed-length string.
        • Set the variable-length string as the Schema name, including the names of the graph space, tag, edge type, and property.
        • Define the data type of the property as a fixed-length or variable-length string.

        For example:

        • Define the data type of the property as a fixed-length string
          nebula> CREATE TAG IF NOT EXISTS t1 (p1 FIXED_STRING(10)); \n
        • Define the data type of the property as a variable-length string
          nebula> CREATE TAG IF NOT EXISTS t2 (p2 STRING); \n

        When the fixed-length string you try to write exceeds the length limit:

        • If the fixed-length string is a property, the writing will succeed, and NebulaGraph will truncate the string and only store the part that meets the length limit.
        • If the fixed-length string is a VID, the writing will fail and NebulaGraph will return an error.
        "},{"location":"3.ngql-guide/3.data-types/3.string/#escape_characters","title":"Escape Characters","text":"

        In strings, the backslash (\\) serves as an escape character used to denote special characters.

        For example, to include a double quote (\") within a string, you cannot directly write \"Hello \"world\"\" as it leads to a syntax error. Instead, use the backslash (\\) to escape the double quote, such as \"Hello \\\"world\\\"\".

        nebula> RETURN \"Hello \\\"world\\\"\"\n+-----------------+\n| \"Hello \"world\"\" |\n+-----------------+\n| \"Hello \"world\"\" |\n+-----------------+\n

        The backslash itself needs to be escaped as it's a special character. For example, to include a backslash in a string, you need to write \"Hello \\\\ world\".

        nebula> RETURN \"Hello \\\\ world\"\n+-----------------+\n| \"Hello \\ world\" |\n+-----------------+\n| \"Hello \\ world\" |\n+-----------------+\n

        For more examples of escape characters, see Escape character examples.

        "},{"location":"3.ngql-guide/3.data-types/3.string/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

        There are some tiny differences between openCypher and Cypher, as well as nGQL. The following is what openCypher requires. Single quotes cannot be converted to double quotes.

        # File: Literals.feature\nFeature: Literals\n\nBackground:\n    Given any graph\n Scenario: Return a single-quoted string\n    When executing query:\n      \"\"\"\n      RETURN '' AS literal\n      \"\"\"\n    Then the result should be, in any order:\n      | literal |\n      | ''      |    # Note: it should return single-quotes as openCypher required.\n    And no side effects\n

        While Cypher accepts both single quotes and double quotes as the return results. nGQL follows the Cypher way.

        nebula > YIELD '' AS quote1, \"\" AS quote2, \"'\" AS quote3, '\"' AS quote4\n+--------+--------+--------+--------+\n| quote1 | quote2 | quote3 | quote4 |\n+--------+--------+--------+--------+\n| \"\"     | \"\"     | \"'\"    | \"\"\"    |\n+--------+--------+--------+--------+\n
        "},{"location":"3.ngql-guide/3.data-types/4.date-and-time/","title":"Date and time types","text":"

        This topic will describe the DATE, TIME, DATETIME, TIMESTAMP, and DURATION types.

        "},{"location":"3.ngql-guide/3.data-types/4.date-and-time/#precautions","title":"Precautions","text":"
        • While inserting time-type property values with DATE, TIME, and DATETIME, NebulaGraph transforms them to a UTC time according to the timezone specified with the timezone_name parameter in the configuration files.

          Note

          To change the timezone, modify the timezone_name value in the configuration files of all NebulaGraph services.

        • date(), time(), and datetime() can convert a time-type property with a specified timezone. For example, datetime(\"2017-03-04 22:30:40.003000+08:00\") or datetime(\"2017-03-04T22:30:40.003000[Asia/Shanghai]\").
        • date(), time(), datetime(), and timestamp() all accept empty parameters to return the current date, time, and datetime.
        • date(), time(), and datetime() all accept the property name to return a specific property value of itself. For example, date().month returns the current month, while time(\"02:59:40\").minute returns the minutes of the importing time.
        • For time operations it is recommended to use duration() to calculate the offset of the moment. Addition and subtraction of date() and date(), timestamp() and timestamp() are also supported.
        • When setting the year of the time as a negative number, you need to use Map type data.
        "},{"location":"3.ngql-guide/3.data-types/4.date-and-time/#opencypher_compatibility","title":"OpenCypher Compatibility","text":"

        In nGQL:

        • Year, month, day, hour, minute, second, millisecond, and microsecond are supported, while the nanosecond is not supported.
        • localdatetime() is not supported.
        • Most string time formats are not supported. The exceptions are YYYY-MM-DDThh:mm:ss and YYYY-MM-DD hh:mm:ss.
        • The single-digit string time format is supported. For example, time(\"1:1:1\").
        "},{"location":"3.ngql-guide/3.data-types/4.date-and-time/#date","title":"DATE","text":"

        The DATE type is used for values with a date part but no time part. Nebula\u00a0Graph retrieves and displays DATE values in the YYYY-MM-DD format. The supported range is -32768-01-01 to 32767-12-31.

        The properties of date() include year, month, and day. date() supports the input of YYYYY, YYYYY-MM or YYYYY-MM-DD, and defaults to 01 for an untyped month or day.

        nebula> RETURN DATE({year:-123, month:12, day:3});\n+------------------------------------+\n| date({year:-(123),month:12,day:3}) |\n+------------------------------------+\n| -123-12-03                         |\n+------------------------------------+\n\nnebula> RETURN DATE(\"23333\");\n+---------------+\n| date(\"23333\") |\n+---------------+\n| 23333-01-01   |\n+---------------+\n\nnebula> RETURN DATE(\"2023-12-12\") - DATE(\"2023-12-11\");\n+-----------------------------------------+\n| (date(\"2023-12-12\")-date(\"2023-12-11\")) |\n+-----------------------------------------+\n| 1                                       |\n+-----------------------------------------+\n
        "},{"location":"3.ngql-guide/3.data-types/4.date-and-time/#time","title":"TIME","text":"

        The TIME type is used for values with a time part but no date part. Nebula\u00a0Graph retrieves and displays TIME values in hh:mm:ss.msmsmsususus format. The supported range is 00:00:00.000000 to 23:59:59.999999.

        The properties of time() include hour, minute, and second.

        "},{"location":"3.ngql-guide/3.data-types/4.date-and-time/#datetime","title":"DATETIME","text":"

        The DATETIME type is used for values that contain both date and time parts. Nebula\u00a0Graph retrieves and displays DATETIME values in YYYY-MM-DDThh:mm:ss.msmsmsususus format. The supported range is -32768-01-01T00:00:00.000000 to 32767-12-31T23:59:59.999999.

        • The properties of datetime() include year, month, day, hour, minute, and second.
        • datetime() can convert TIMESTAMP to DATETIME. The value range of TIMESTAMP is 0~9223372036.
        • datetime() supports an int argument. The int argument specifies a timestamp.
        # To get the current date and time.\nnebula> RETURN datetime();\n+----------------------------+\n| datetime()                 |\n+----------------------------+\n| 2022-08-29T06:37:08.933000 |\n+----------------------------+\n\n# To get the current hour.\nnebula> RETURN datetime().hour;\n+-----------------+\n| datetime().hour |\n+-----------------+\n| 6               |\n+-----------------+\n\n# To get date time from a given timestamp.\nnebula> RETURN datetime(timestamp(1625469277));\n+---------------------------------+\n| datetime(timestamp(1625469277)) |\n+---------------------------------+\n| 2021-07-05T07:14:37.000000      |\n+---------------------------------+\n\nnebula> RETURN datetime(1625469277);\n+----------------------------+\n| datetime(1625469277)       |\n+----------------------------+\n| 2021-07-05T07:14:37.000000 |\n+----------------------------+\n
        "},{"location":"3.ngql-guide/3.data-types/4.date-and-time/#timestamp","title":"TIMESTAMP","text":"

        The TIMESTAMP data type is used for values that contain both date and time parts. It has a range of 1970-01-01T00:00:01 UTC to 2262-04-11T23:47:16 UTC.

        TIMESTAMP has the following features:

        • Stored and displayed in the form of a timestamp, such as 1615974839, which means 2021-03-17T17:53:59.
        • Supported TIMESTAMP querying methods: timestamp and timestamp() function.
        • Supported TIMESTAMP inserting methods: timestamp, timestamp() function, and now() function.
        • timestamp() function accepts empty arguments to get the current timestamp. It can pass an integer arguments to identify the integer as a timestamp and the range of passed integer is: 0~9223372036\u3002
        • timestamp() function can convert DATETIME to TIMESTAMP, and the data type of DATETIME should be a string.
        • The underlying storage data type is int64.
        # To get the current timestamp.\nnebula> RETURN timestamp();\n+-------------+\n| timestamp() |\n+-------------+\n| 1625469277  |\n+-------------+\n\n# To get a timestamp from given date and time.\nnebula> RETURN timestamp(\"2022-01-05T06:18:43\");\n+----------------------------------+\n| timestamp(\"2022-01-05T06:18:43\") |\n+----------------------------------+\n| 1641363523                       |\n+----------------------------------+\n\n# To get a timestamp using datetime().\nnebula> RETURN timestamp(datetime(\"2022-08-29T07:53:10.939000\"));\n+---------------------------------------------------+\n| timestamp(datetime(\"2022-08-29T07:53:10.939000\")) |\n+---------------------------------------------------+\n| 1661759590                                        |\n+---------------------------------------------------+    \n

        Note

        The date and time format string passed into timestamp() cannot include any millisecond and microsecond, but the date and time format string passed into timestamp(datetime()) can include a millisecond and a microsecond.

        "},{"location":"3.ngql-guide/3.data-types/4.date-and-time/#duration","title":"DURATION","text":"

        The DURATION data type is used to indicate a period of time. Map data that are freely combined by years, months, days, hours, minutes, and seconds indicates the DURATION.

        DURATION has the following features:

        • Creating indexes for DURATION is not supported.
        • DURATION can be used to calculate the specified time.
        "},{"location":"3.ngql-guide/3.data-types/4.date-and-time/#examples","title":"Examples","text":"
        1. Create a tag named date1 with three properties: DATE, TIME, and DATETIME.

          nebula> CREATE TAG IF NOT EXISTS date1(p1 date, p2 time, p3 datetime);\n
        2. Insert a vertex named test1.

          nebula> INSERT VERTEX date1(p1, p2, p3) VALUES \"test1\":(date(\"2021-03-17\"), time(\"17:53:59\"), datetime(\"2017-03-04T22:30:40.003000[Asia/Shanghai]\"));\n
        3. Query whether the value of property p1 on the test1 tag is 2021-03-17.

          nebula> MATCH (v:date1)  RETURN v.date1.p1 == date(\"2021-03-17\");\n+----------------------------------+\n| (v.date1.p1==date(\"2021-03-17\")) |\n+----------------------------------+\n| true                             |\n+----------------------------------+\n
        4. Return the content of the property p1 on test1.

          nebula> CREATE TAG INDEX IF NOT EXISTS date1_index ON date1(p1);\nnebula> REBUILD TAG INDEX date1_index;\nnebula> MATCH (v:date1) RETURN v.date1.p1;\n+------------------+\n| v.date1.p1.month |\n+------------------+\n| 3                |\n+------------------+\n
        5. Search for vertices with p3 property values less than 2023-01-01T00:00:00.000000, and return the p3 values.

          nebula> MATCH (v:date1)  \\\nWHERE v.date1.p3 < datetime(\"2023-01-01T00:00:00.000000\") \\\nRETURN v.date1.p3;\n+----------------------------+\n| v.date1.p3                 |\n+----------------------------+\n| 2017-03-04T14:30:40.003000 |\n+----------------------------+\n
        6. Create a tag named school with the property of TIMESTAMP.

          nebula> CREATE TAG IF NOT EXISTS school(name string , found_time timestamp);\n
        7. Insert a vertex named DUT with a found-time timestamp of \"1988-03-01T08:00:00\".

          # Insert as a timestamp. The corresponding timestamp of 1988-03-01T08:00:00 is 573177600, or 573206400 UTC.\nnebula> INSERT VERTEX school(name, found_time) VALUES \"DUT\":(\"DUT\", 573206400);\n\n# Insert in the form of date and time.\nnebula> INSERT VERTEX school(name, found_time) VALUES \"DUT\":(\"DUT\", timestamp(\"1988-03-01T08:00:00\"));\n
        8. Insert a vertex named dut and store time with now() or timestamp() functions.

          # Use now() function to store time\nnebula> INSERT VERTEX school(name, found_time) VALUES \"dut\":(\"dut\", now());\n\n# Use timestamp() function to store time\nnebula> INSERT VERTEX school(name, found_time) VALUES \"dut\":(\"dut\", timestamp());\n

        You can also use WITH statement to set a specific date and time, or to perform calculations. For example:

        nebula> WITH time({hour: 12, minute: 31, second: 14, millisecond:111, microsecond: 222}) AS d RETURN d;\n+-----------------+\n| d               |\n+-----------------+\n| 12:31:14.111222 |\n+-----------------+\n\nnebula> WITH date({year: 1984, month: 10, day: 11}) AS x RETURN x + 1;\n+------------+\n| (x+1)      |\n+------------+\n| 1984-10-12 |\n+------------+\n\nnebula> WITH date('1984-10-11') as x, duration({years: 12, days: 14, hours: 99, minutes: 12}) as d \\\n        RETURN x + d AS sum, x - d AS diff;\n+------------+------------+\n| sum        | diff       |\n+------------+------------+\n| 1996-10-29 | 1972-09-23 |\n+------------+------------+\n
        "},{"location":"3.ngql-guide/3.data-types/5.null/","title":"NULL","text":"

        You can set the properties for vertices or edges to NULL. Also, you can set the NOT NULL constraint to make sure that the property values are NOT NULL. If not specified, the property is set to NULL by default.

        "},{"location":"3.ngql-guide/3.data-types/5.null/#logical_operations_with_null","title":"Logical operations with NULL","text":"

        Here is the truth table for AND, OR, XOR, and NOT.

        a b a AND b a OR b a XOR b NOT a false false false false false true false null false null null true false true false true true true true false false true true false true null null true null false true true true true false false null false false null null null null null null null null null null true null true null null"},{"location":"3.ngql-guide/3.data-types/5.null/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

        The comparisons and operations about NULL are different from openCypher. There may be changes later.

        "},{"location":"3.ngql-guide/3.data-types/5.null/#comparisons_with_null","title":"Comparisons with NULL","text":"

        The comparison operations with NULL are incompatible with openCypher.

        "},{"location":"3.ngql-guide/3.data-types/5.null/#operations_and_return_with_null","title":"Operations and RETURN with NULL","text":"

        The NULL operations and RETURN with NULL are incompatible with openCypher.

        "},{"location":"3.ngql-guide/3.data-types/5.null/#examples","title":"Examples","text":""},{"location":"3.ngql-guide/3.data-types/5.null/#use_not_null","title":"Use NOT NULL","text":"

        Create a tag named player. Specify the property name as NOT NULL.

        nebula> CREATE TAG IF NOT EXISTS player(name string NOT NULL, age int);\n

        Use SHOW to create tag statements. The property name is NOT NULL. The property age is NULL by default.

        nebula> SHOW CREATE TAG player;\n+-----------+-----------------------------------+\n| Tag       | Create Tag                        |\n+-----------+-----------------------------------+\n| \"student\" | \"CREATE TAG `player` (            |\n|           |  `name` string NOT NULL,          |\n|           |  `age` int64 NULL                 |\n|           | ) ttl_duration = 0, ttl_col = \"\"\" |\n+-----------+-----------------------------------+\n

        Insert the vertex Kobe. The property age can be NULL.

        nebula> INSERT VERTEX player(name, age) VALUES \"Kobe\":(\"Kobe\",null);\n
        "},{"location":"3.ngql-guide/3.data-types/5.null/#use_not_null_and_set_the_default","title":"Use NOT NULL and set the default","text":"

        Create a tag named player. Specify the property age as NOT NULL. The default value is 18.

        nebula> CREATE TAG IF NOT EXISTS player(name string, age int NOT NULL DEFAULT 18);\n

        Insert the vertex Kobe. Specify the property name only.

        nebula> INSERT VERTEX player(name) VALUES \"Kobe\":(\"Kobe\");\n

        Query the vertex Kobe. The property age is 18 by default.

        nebula> FETCH PROP ON player \"Kobe\" YIELD properties(vertex);\n+--------------------------+\n| properties(VERTEX)       |\n+--------------------------+\n| {age: 18, name: \"Kobe\"}  |\n+--------------------------+\n
        "},{"location":"3.ngql-guide/3.data-types/6.list/","title":"Lists","text":"

        The list is a composite data type. A list is a sequence of values. Individual elements in a list can be accessed by their positions.

        A list starts with a left square bracket [ and ends with a right square bracket ]. A list contains zero, one, or more expressions. List elements are separated from each other with commas (,). Whitespace around elements is ignored in the list, thus line breaks, tab stops, and blanks can be used for formatting.

        "},{"location":"3.ngql-guide/3.data-types/6.list/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

        A composite data type (i.e. set, map, and list) CANNOT be stored as properties of vertices or edges.

        "},{"location":"3.ngql-guide/3.data-types/6.list/#list_operations","title":"List operations","text":"

        You can use the preset list function to operate the list, or use the index to filter the elements in the list.

        "},{"location":"3.ngql-guide/3.data-types/6.list/#index_syntax","title":"Index syntax","text":"
        [M]\n[M..N]\n[M..]\n[..N]\n

        The index of nGQL supports queries from front to back, starting from 0. 0 means the first element, 1 means the second element, and so on. It also supports queries from back to front, starting from -1. -1 means the last element, -2 means the penultimate element, and so on.

        • [M]: represents the element whose index is M.
        • [M..N]: represents the elements whose indexes are greater or equal to M but smaller than N. Return empty when N is 0.
        • [M..]: represents the elements whose indexes are greater or equal to M.
        • [..N]: represents the elements whose indexes are smaller than N. Return empty when N is 0.

        Note

        • Return empty if the index is out of bounds, while return normally if the index is within the bound.
        • Return empty if M\u2265N.
        • When querying a single element, if M is null, return BAD_TYPE. When conducting a range query, if M or N is null, return null.
        "},{"location":"3.ngql-guide/3.data-types/6.list/#examples","title":"Examples","text":"
        # The following query returns the list [1,2,3].\nnebula> RETURN list[1, 2, 3] AS a;\n+-----------+\n| a         |\n+-----------+\n| [1, 2, 3] |\n+-----------+\n\n# The following query returns the element whose index is 3 in the list [1,2,3,4,5]. In a list, the index starts from 0, and thus the return element is 4.\nnebula> RETURN range(1,5)[3];\n+---------------+\n| range(1,5)[3] |\n+---------------+\n| 4             |\n+---------------+\n\n# The following query returns the element whose index is -2 in the list [1,2,3,4,5]. The index of the last element in a list is -1, and thus the return element is 4.\nnebula> RETURN range(1,5)[-2];\n+------------------+\n| range(1,5)[-(2)] |\n+------------------+\n| 4                |\n+------------------+\n\n# The following query returns the elements whose indexes are from 0 to 3 (not including 3) in the list [1,2,3,4,5].\nnebula> RETURN range(1,5)[0..3];\n+------------------+\n| range(1,5)[0..3] |\n+------------------+\n| [1, 2, 3]        |\n+------------------+\n\n# The following query returns the elements whose indexes are greater than 2 in the list [1,2,3,4,5].\nnebula> RETURN range(1,5)[3..] AS a;\n+--------+\n| a      |\n+--------+\n| [4, 5] |\n+--------+\n\n# The following query returns the elements whose indexes are smaller than 3.\nnebula> WITH list[1, 2, 3, 4, 5] AS a \\\n        RETURN a[..3] AS r;\n+-----------+\n| r         |\n+-----------+\n| [1, 2, 3] |\n+-----------+\n\n# The following query filters the elements whose indexes are greater than 2 in the list [1,2,3,4,5], calculate them respectively, and returns them.\nnebula> RETURN [n IN range(1,5) WHERE n > 2 | n + 10] AS a;\n+--------------+\n| a            |\n+--------------+\n| [13, 14, 15] |\n+--------------+\n\n# The following query returns the elements from the first to the penultimate (inclusive) in the list [1, 2, 3].\nnebula> YIELD list[1, 2, 3][0..-1] AS a;\n+--------+\n| a      |\n+--------+\n| [1, 2] |\n+--------+\n\n# The following query returns the elements from the first (exclusive) to the third backward in the list [1, 2, 3, 4, 5].\nnebula> YIELD list[1, 2, 3, 4, 5][-3..-1] AS a;\n+--------+\n| a      |\n+--------+\n| [3, 4] |\n+--------+\n\n# The following query sets the variables and returns the elements whose indexes are 1 and 2.\nnebula> $var = YIELD 1 AS f, 3 AS t; \\\n        YIELD list[1, 2, 3][$var.f..$var.t] AS a;\n+--------+\n| a      |\n+--------+\n| [2, 3] |\n+--------+\n\n# The following query returns empty because the index is out of bound. It will return normally when the index is within the bound.\nnebula> RETURN list[1, 2, 3, 4, 5] [0..10] AS a;\n+-----------------+\n| a               |\n+-----------------+\n| [1, 2, 3, 4, 5] |\n+-----------------+\n\nnebula> RETURN list[1, 2, 3] [-5..5] AS a;\n+-----------+\n| a         |\n+-----------+\n| [1, 2, 3] |\n+-----------+\n\n# The following query returns empty because there is a [0..0].\nnebula> RETURN list[1, 2, 3, 4, 5] [0..0] AS a;\n+----+\n| a  |\n+----+\n| [] |\n+----+\n\n# The following query returns empty because of M \u2265 N.\nnebula> RETURN list[1, 2, 3, 4, 5] [3..1] AS a;\n+----+\n| a  |\n+----+\n| [] |\n+----+\n\n# When conduct a range query, if `M` or `N` is null, return `null`.\nnebula> WITH list[1,2,3] AS a \\\n        RETURN a[0..null] as r;\n+----------+\n| r        |\n+----------+\n| __NULL__ |\n+----------+\n\n# The following query calculates the elements in the list [1,2,3,4,5] respectively and returns them without the list head.\nnebula> RETURN tail([n IN range(1, 5) | 2 * n - 10]) AS a;\n+-----------------+\n| a               |\n+-----------------+\n| [-6, -4, -2, 0] |\n+-----------------+\n\n# The following query takes the elements in the list [1,2,3] as true and return.\nnebula> RETURN [n IN range(1, 3) WHERE true | n] AS r;\n+-----------+\n| r         |\n+-----------+\n| [1, 2, 3] |\n+-----------+\n\n# The following query returns the length of the list [1,2,3].\nnebula> RETURN size(list[1,2,3]);\n+-------------------+\n| size(list[1,2,3]) |\n+-------------------+\n| 3                 |\n+-------------------+\n\n# The following query calculates the elements in the list [92,90] and runs a conditional judgment in a where clause.\nnebula> GO FROM \"player100\" OVER follow WHERE properties(edge).degree NOT IN [x IN [92, 90] | x + $$.player.age] \\\n        YIELD dst(edge) AS id, properties(edge).degree AS degree;\n+-------------+--------+\n| id          | degree |\n+-------------+--------+\n| \"player101\" | 95     |\n| \"player102\" | 90     |\n+-------------+--------+\n\n# The following query takes the query result of the MATCH statement as the elements in a list. Then it calculates and returns them.\nnebula> MATCH p = (n:player{name:\"Tim Duncan\"})-[:follow]->(m) \\\n        RETURN [n IN nodes(p) | n.player.age + 100] AS r;\n+------------+\n| r          |\n+------------+\n| [142, 136] |\n| [142, 141] |\n+------------+\n
        "},{"location":"3.ngql-guide/3.data-types/6.list/#opencypher_compatibility_1","title":"OpenCypher compatibility","text":"
        • In openCypher, return null when querying a single out-of-bound element. However, in nGQL, return OUT_OF_RANGE when querying a single out-of-bound element.
          nebula> RETURN range(0,5)[-12];\n+-------------------+\n| range(0,5)[-(12)] |\n+-------------------+\n| OUT_OF_RANGE      |\n+-------------------+\n
        • A composite data type (i.e., set, map, and list) CAN NOT be stored as properties for vertices or edges.

          It is recommended to modify the graph modeling method. The composite data type should be modeled as an adjacent edge of a vertex, rather than its property. Each adjacent edge can be dynamically added or deleted. The rank values of the adjacent edges can be used for sequencing.

        • Patterns are not supported in the list. For example, [(src)-[]->(m) | m.name].
        "},{"location":"3.ngql-guide/3.data-types/7.set/","title":"Sets","text":"

        The set is a composite data type. A set is a set of values. Unlike a List, values in a set are unordered and each value must be unique.

        A set starts with a left curly bracket { and ends with a right curly bracket }. A set contains zero, one, or more expressions. Set elements are separated from each other with commas (,). Whitespace around elements is ignored in the set, thus line breaks, tab stops, and blanks can be used for formatting.

        "},{"location":"3.ngql-guide/3.data-types/7.set/#opencypher_compatibility","title":"OpenCypher compatibility","text":"
        • A composite data type (i.e. set, map, and list) CANNOT be stored as properties of vertices or edges.
        • A set is not a data type in openCypher, but in nGQL, users can use the set.
        "},{"location":"3.ngql-guide/3.data-types/7.set/#examples","title":"Examples","text":"
        # The following query returns the set {1,2,3}.\nnebula> RETURN set{1, 2, 3} AS a;\n+-----------+\n| a         |\n+-----------+\n| {3, 2, 1} |\n+-----------+\n\n# The following query returns the set {1,2}, Because the set does not allow repeating elements, and the order is unordered.\nnebula> RETURN set{1, 2, 1} AS a;\n+--------+\n| a      |\n+--------+\n| {2, 1} |\n+--------+\n\n# The following query checks whether the set has the specified element 1.\nnebula> RETURN 1 IN set{1, 2} AS a;\n+------+\n| a    |\n+------+\n| true |\n+------+\n\n# The following query counts the number of elements in the set.\nnebula> YIELD size(set{1, 2, 1}) AS a;\n+---+\n| a |\n+---+\n| 2 |\n+---+\n\n# The following query returns a set of target vertex property values.\nnebula> GO FROM \"player100\" OVER follow \\\n        YIELD set{properties($$).name,properties($$).age} as a;\n+-----------------------+\n| a                     |\n+-----------------------+\n| {36, \"Tony Parker\"}   |\n| {41, \"Manu Ginobili\"} |\n+-----------------------+\n
        "},{"location":"3.ngql-guide/3.data-types/8.map/","title":"Maps","text":"

        The map is a composite data type. Maps are unordered collections of key-value pairs. In maps, the key is a string. The value can have any data type. You can get the map element by using map['key'].

        A map starts with a left curly bracket { and ends with a right curly bracket }. A map contains zero, one, or more key-value pairs. Map elements are separated from each other with commas (,). Whitespace around elements is ignored in the map, thus line breaks, tab stops, and blanks can be used for formatting.

        "},{"location":"3.ngql-guide/3.data-types/8.map/#opencypher_compatibility","title":"OpenCypher compatibility","text":"
        • A composite data type (i.e. set, map, and list) CANNOT be stored as properties of vertices or edges.
        • Map projection is not supported.
        "},{"location":"3.ngql-guide/3.data-types/8.map/#examples","title":"Examples","text":"
        # The following query returns the simple map.\nnebula> YIELD map{key1: 'Value1', Key2: 'Value2'} as a;\n+----------------------------------+\n| a                                |\n+----------------------------------+\n| {Key2: \"Value2\", key1: \"Value1\"} |\n+----------------------------------+\n\n# The following query returns the list type map.\nnebula> YIELD map{listKey: [{inner: 'Map1'}, {inner: 'Map2'}]} as a;\n+-----------------------------------------------+\n| a                                             |\n+-----------------------------------------------+\n| {listKey: [{inner: \"Map1\"}, {inner: \"Map2\"}]} |\n+-----------------------------------------------+\n\n# The following query returns the hybrid type map.\nnebula> RETURN map{a: LIST[1,2], b: SET{1,2,1}, c: \"hee\"} as a;\n+----------------------------------+\n| a                                |\n+----------------------------------+\n| {a: [1, 2], b: {2, 1}, c: \"hee\"} |\n+----------------------------------+\n\n# The following query returns the specified element in a map.\nnebula> RETURN map{a: LIST[1,2], b: SET{1,2,1}, c: \"hee\"}[\"b\"] AS b;\n+--------+\n| b      |\n+--------+\n| {2, 1} |\n+--------+\n\n# The following query checks whether the map has the specified key, not support checks whether the map has the specified value yet.\nnebula> RETURN \"a\" IN MAP{a:1, b:2} AS a;\n+------+\n| a    |\n+------+\n| true |\n+------+\n
        "},{"location":"3.ngql-guide/3.data-types/9.type-conversion/","title":"Type Conversion/Type coercions","text":"

        Converting an expression of a given type to another type is known as type conversion.

        NebulaGraph supports converting expressions explicit to other types. For details, see Type conversion functions.

        "},{"location":"3.ngql-guide/3.data-types/9.type-conversion/#examples","title":"Examples","text":"
        nebula> UNWIND [true, false, 'true', 'false', NULL] AS b \\\n        RETURN toBoolean(b) AS b;\n+----------+\n| b        |\n+----------+\n| true     |\n| false    |\n| true     |\n| false    |\n| __NULL__ |\n+----------+\n\nnebula> RETURN toFloat(1), toFloat('1.3'), toFloat('1e3'), toFloat('not a number');\n+------------+----------------+----------------+-------------------------+\n| toFloat(1) | toFloat(\"1.3\") | toFloat(\"1e3\") | toFloat(\"not a number\") |\n+------------+----------------+----------------+-------------------------+\n| 1.0        | 1.3            | 1000.0         | __NULL__                |\n+------------+----------------+----------------+-------------------------+\n
        "},{"location":"3.ngql-guide/4.variable-and-composite-queries/1.composite-queries/","title":"Composite queries (clause structure)","text":"

        Composite queries put data from different queries together. They then use filters, group-bys, or sorting before returning the combined return results.

        Nebula\u00a0Graph supports three methods to run composite queries (or sub-queries):

        • (openCypher) Clauses are chained together, and they feed intermediate result sets between each other.
        • (Native nGQL) More than one query can be batched together, separated by semicolons (;). The result of the last query is returned as the result of the batch.
        • (Native nGQL) Queries can be piped together by using the pipe (|). The result of the previous query can be used as the input of the next query.
        "},{"location":"3.ngql-guide/4.variable-and-composite-queries/1.composite-queries/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

        In a composite query, do not put together openCypher and native nGQL clauses in one statement. For example, this statement is undefined: MATCH ... | GO ... | YIELD ....

        • If you are in the openCypher way (MATCH, RETURN, WITH, etc), do not introduce any pipe or semicolons to combine the sub-clauses.
        • If you are in the native nGQL way (FETCH, GO, LOOKUP, etc), you must use pipe or semicolons to combine the sub-clauses.
        "},{"location":"3.ngql-guide/4.variable-and-composite-queries/1.composite-queries/#composite_queries_are_not_transactional_queries_as_in_sqlcypher","title":"Composite queries are not transactional queries (as in SQL/Cypher)","text":"

        For example, a query is composed of three sub-queries: A B C, A | B | C or A; B; C. In that A is a read operation, B is a computation operation, and C is a write operation. If any part fails in the execution, the whole result will be undefined. There is no rollback. What is written depends on the query executor.

        Note

        OpenCypher has no requirement of transaction.

        "},{"location":"3.ngql-guide/4.variable-and-composite-queries/1.composite-queries/#examples","title":"Examples","text":"
        • OpenCypher compatibility statement
          # Connect multiple queries with clauses.\nnebula> MATCH p=(v:player{name:\"Tim Duncan\"})--() \\\n        WITH nodes(p) AS n \\\n        UNWIND n AS n1 \\\n        RETURN DISTINCT n1;\n
        • Native nGQL (Semicolon queries)
          # Only return edges.\nnebula> SHOW TAGS; SHOW EDGES;\n\n# Insert multiple vertices.\nnebula> INSERT VERTEX player(name, age) VALUES \"player100\":(\"Tim Duncan\", 42); \\\n        INSERT VERTEX player(name, age) VALUES \"player101\":(\"Tony Parker\", 36); \\\n        INSERT VERTEX player(name, age) VALUES \"player102\":(\"LaMarcus Aldridge\", 33);\n
        • Native nGQL (Pipe queries)
          # Connect multiple queries with pipes.\nnebula> GO FROM \"player100\" OVER follow YIELD dst(edge) AS id | \\\n        GO FROM $-.id OVER serve YIELD properties($$).name AS Team, \\\n        properties($^).name AS Player;\n+-----------+-----------------+\n| Team      | Player          |\n+-----------+-----------------+\n| \"Spurs\"   | \"Tony Parker\"   |\n| \"Hornets\" | \"Tony Parker\"   |\n| \"Spurs\"   | \"Manu Ginobili\" |\n+-----------+-----------------+\n
        "},{"location":"3.ngql-guide/4.variable-and-composite-queries/2.user-defined-variables/","title":"User-defined variables","text":"

        User-defined variables allow passing the result of one statement to another.

        "},{"location":"3.ngql-guide/4.variable-and-composite-queries/2.user-defined-variables/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

        In openCypher, when you refer to the vertex, edge, or path of a variable, you need to name it first. For example:

        nebula> MATCH (v:player{name:\"Tim Duncan\"}) RETURN v;\n+----------------------------------------------------+\n| v                                                  |\n+----------------------------------------------------+\n| (\"player100\" :player{name: \"Tim Duncan\", age: 42}) |\n+----------------------------------------------------+\n

        The user-defined variable in the preceding query is v.

        Caution

        In a pattern of a MATCH statement, you cannot use the same edge variable repeatedly. For example, e cannot be written in the pattern p=(v1)-[e*2..2]->(v2)-[e*2..2]->(v3).

        "},{"location":"3.ngql-guide/4.variable-and-composite-queries/2.user-defined-variables/#native_ngql","title":"Native nGQL","text":"

        User-defined variables are written as $var_name. The var_name consists of letters, numbers, or underline characters. Any other characters are not permitted.

        The user-defined variables are valid only at the current execution (namely, in this composite query). When the execution ends, the user-defined variables will be automatically expired. The user-defined variables in one statement CANNOT be used in any other clients, executions, or sessions.

        You can use user-defined variables in composite queries. Details about composite queries, see Composite queries.

        Note

        • User-defined variables are case-sensitive.
        • To define a user-defined variable in a compound statement, end the statement with a semicolon (;). For details, please refer to the nGQL Style Guide.
        "},{"location":"3.ngql-guide/4.variable-and-composite-queries/2.user-defined-variables/#example","title":"Example","text":"
        nebula> $var = GO FROM \"player100\" OVER follow YIELD dst(edge) AS id; \\\n        GO FROM $var.id OVER serve YIELD properties($$).name AS Team, \\\n        properties($^).name AS Player;\n+-----------+-----------------+\n| Team      | Player          |\n+-----------+-----------------+\n| \"Spurs\"   | \"Tony Parker\"   |\n| \"Hornets\" | \"Tony Parker\"   |\n| \"Spurs\"   | \"Manu Ginobili\" |\n+-----------+-----------------+\n
        "},{"location":"3.ngql-guide/4.variable-and-composite-queries/2.user-defined-variables/#set_operations_and_scope_of_user-defined_variables","title":"Set operations and scope of user-defined variables","text":"

        When assigning variables within a compound statement involving set operations, it is important to enclose the scope of the variable assignment in parentheses. In the example below, the source of the $var assignment is the results of the output of two INTERSECT statements.

        $var = ( \\\n    GO FROM \"player100\" OVER follow \\\n      YIELD dst(edge) AS id \\\n    INTERSECT \\\n    GO FROM \"player100\" OVER follow \\\n      YIELD dst(edge) AS id \\\n       ); \\\n    GO FROM $var.id OVER follow YIELD follow.degree AS degree\n
        "},{"location":"3.ngql-guide/4.variable-and-composite-queries/3.property-reference/","title":"Reference to properties","text":"

        nGQL provides property references to allow you to refer to the properties of the source vertex, the destination vertex, and the edge in the GO statement, and to refer to the output results of the statement in composite queries. This topic describes how to use these property references in nGQL.

        Note

        This function applies to native nGQL only.

        "},{"location":"3.ngql-guide/4.variable-and-composite-queries/3.property-reference/#property_references_for_vertexes","title":"Property references for vertexes","text":"Parameter Description $^ Used to get the property of the source vertex. $$ Used to get the property of the destination vertex."},{"location":"3.ngql-guide/4.variable-and-composite-queries/3.property-reference/#property_reference_syntax","title":"Property reference syntax","text":"
        $^.<tag_name>.<prop_name>  # Source vertex property reference\n$$.<tag_name>.<prop_name>   # Destination vertex property reference\n
        • tag_name: The tag name of the vertex.
        • prop_name: The property name within the tag.
        "},{"location":"3.ngql-guide/4.variable-and-composite-queries/3.property-reference/#property_references_for_edges","title":"Property references for edges","text":"Parameter Description _src The source vertex ID of the edge _dst The destination vertex ID of the edge _type The internal encoding of edge types that uses sign to indicate direction. Positive numbers represent forward edges, while negative numbers represent backward edges. _rank The rank value for the edge"},{"location":"3.ngql-guide/4.variable-and-composite-queries/3.property-reference/#property_reference_syntax_1","title":"Property reference syntax","text":"

        nGQL allows you to reference edge properties, including user-defined edge properties and four built-in edge properties.

        <edge_type>.<prop_name>  # User-defined edge property reference\n<edge_type>._src|_dst|_type|_rank  # Built-in edge property reference\n
        • edge_type: The edge type.
        • prop_name: The property name within the edge type.
        "},{"location":"3.ngql-guide/4.variable-and-composite-queries/3.property-reference/#property_references_for_composite_queries","title":"Property references for composite queries","text":"Parameter Description $- Used to get the output results of the statement before the pipe in the composite query. For more information, see Pipe."},{"location":"3.ngql-guide/4.variable-and-composite-queries/3.property-reference/#examples","title":"Examples","text":""},{"location":"3.ngql-guide/4.variable-and-composite-queries/3.property-reference/#use_property_references_for_vertexes","title":"Use property references for vertexes","text":"

        The following query returns the name property of the player tag on the source vertex and the age property of the player tag on the destination vertex.

        nebula> GO FROM \"player100\" OVER follow YIELD $^.player.name AS startName, $$.player.age AS endAge;\n+--------------+--------+\n| startName    | endAge |\n+--------------+--------+\n| \"Tim Duncan\" | 36     |\n| \"Tim Duncan\" | 41     |\n+--------------+--------+\n

        Legacy version compatibility

        Starting from NebulaGraph 2.6.0, Schema-related functions are supported. The preceding example can be rewritten as follows in NebulaGraph master to produce the same results:

        GO FROM \"player100\" OVER follow YIELD properties($^).name AS startName, properties($$).age AS endAge;\n

        NebulaGraph master is compatible with both new and old syntax.

        "},{"location":"3.ngql-guide/4.variable-and-composite-queries/3.property-reference/#use_property_references_for_edges","title":"Use property references for edges","text":"

        The following query returns the degree property of the edge type follow.

        nebula> GO FROM \"player100\" OVER follow YIELD follow.degree;\n+---------------+\n| follow.degree |\n+---------------+\n| 95            |\n+---------------+\n

        The following query returns the source vertex, the destination vertex, the edge type, and the edge rank value of the edge type follow.

        nebula> GO FROM \"player100\" OVER follow YIELD follow._src, follow._dst, follow._type, follow._rank;\n+-------------+-------------+--------------+--------------+\n| follow._src | follow._dst | follow._type | follow._rank |\n+-------------+-------------+--------------+--------------+\n| \"player100\" | \"player101\" | 17           | 0            |\n| \"player100\" | \"player125\" | 17           | 0            |\n+-------------+-------------+--------------+--------------+\n

        Legacy version compatibility

        Starting from NebulaGraph 2.6.0, Schema-related functions are supported. The preceding example can be rewritten as follows in NebulaGraph master to produce the same results:

        GO FROM \"player100\" OVER follow YIELD properties(edge).degree;\nGO FROM \"player100\" OVER follow YIELD src(edge), dst(edge), type(edge), rank(edge);\n

        NebulaGraph master is compatible with both new and old syntax.

        "},{"location":"3.ngql-guide/4.variable-and-composite-queries/3.property-reference/#use_property_references_for_composite_queries","title":"Use property references for composite queries","text":"

        The following composite query performs the following actions:

        1. Uses the property reference $-.id to get the results of the statement GO FROM \"player100\" OVER follow YIELD dst(edge) AS id, which returns the destination vertex ID of the follow edge type.
        2. Uses the properties($^) function to get the name property of the player tag on the source vertex of the serve edge type.
        3. Uses the properties($$) function to get the name property of the team tag on the destination vertex of the serve edge type.
        nebula> GO FROM \"player100\" OVER follow \\\n        YIELD dst(edge) AS id | \\\n        GO FROM $-.id OVER serve \\\n        YIELD properties($^).name AS Player, properties($$).name AS Team;\n+-----------------+-----------+\n| Player          | Team      |\n+-----------------+-----------+\n| \"Tony Parker\"   | \"Spurs\"   |\n| \"Tony Parker\"   | \"Hornets\" |\n| \"Manu Ginobili\" | \"Spurs\"   |\n+-----------------+-----------+\n
        "},{"location":"3.ngql-guide/5.operators/1.comparison/","title":"Comparison operators","text":"

        NebulaGraph supports the following comparison operators.

        Name Description == Equal operator !=, <> Not equal operator > Greater than operator >= Greater than or equal operator < Less than operator <= Less than or equal operator IS NULL NULL check IS NOT NULL Not NULL check IS EMPTY EMPTY check IS NOT EMPTY Not EMPTY check

        The result of the comparison operation is true or false.

        Note

        • Comparability between values of different types is often undefined. The result could be NULL or others.
        • EMPTY is currently used only for checking, and does not support functions or operations such as GROUP BY, count(), sum(), max(), hash(), collect(), + or *.
        "},{"location":"3.ngql-guide/5.operators/1.comparison/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

        openCypher does not have EMPTY. Thus EMPTY is not supported in MATCH statements.

        "},{"location":"3.ngql-guide/5.operators/1.comparison/#examples","title":"Examples","text":""},{"location":"3.ngql-guide/5.operators/1.comparison/#_1","title":"==","text":"

        String comparisons are case-sensitive. Values of different types are not equal.

        Note

        The equal operator is == in nGQL, while in openCypher it is =.

        nebula> RETURN 'A' == 'a', toUpper('A') == toUpper('a'), toLower('A') == toLower('a');\n+------------+------------------------------+------------------------------+\n| (\"A\"==\"a\") | (toUpper(\"A\")==toUpper(\"a\")) | (toLower(\"A\")==toLower(\"a\")) |\n+------------+------------------------------+------------------------------+\n| false      | true                         | true                         |\n+------------+------------------------------+------------------------------+\n\nnebula> RETURN '2' == 2, toInteger('2') == 2;\n+----------+---------------------+\n| (\"2\"==2) | (toInteger(\"2\")==2) |\n+----------+---------------------+\n| false    | true                |\n+----------+---------------------+\n
        "},{"location":"3.ngql-guide/5.operators/1.comparison/#_2","title":">","text":"
        nebula> RETURN 3 > 2;\n+-------+\n| (3>2) |\n+-------+\n| true  |\n+-------+\n\nnebula> WITH 4 AS one, 3 AS two \\\n        RETURN one > two AS result;\n+--------+\n| result |\n+--------+\n| true   |\n+--------+\n
        "},{"location":"3.ngql-guide/5.operators/1.comparison/#_3","title":">=","text":"
        nebula> RETURN 2 >= \"2\", 2 >= 2;\n+----------+--------+\n| (2>=\"2\") | (2>=2) |\n+----------+--------+\n| __NULL__ | true   |\n+----------+--------+\n
        "},{"location":"3.ngql-guide/5.operators/1.comparison/#_4","title":"<","text":"
        nebula> YIELD 2.0 < 1.9;\n+---------+\n| (2<1.9) |\n+---------+\n| false   |\n+---------+\n
        "},{"location":"3.ngql-guide/5.operators/1.comparison/#_5","title":"<=","text":"
        nebula> YIELD 0.11 <= 0.11;\n+--------------+\n| (0.11<=0.11) |\n+--------------+\n| true         |\n+--------------+\n
        "},{"location":"3.ngql-guide/5.operators/1.comparison/#_6","title":"!=","text":"
        nebula> YIELD 1 != '1';\n+----------+\n| (1!=\"1\") |\n+----------+\n| true     |\n+----------+\n
        "},{"location":"3.ngql-guide/5.operators/1.comparison/#is_not_null","title":"IS [NOT] NULL","text":"
        nebula> RETURN null IS NULL AS value1, null == null AS value2, null != null AS value3;\n+--------+----------+----------+\n| value1 | value2   | value3   |\n+--------+----------+----------+\n| true   | __NULL__ | __NULL__ |\n+--------+----------+----------+\n\nnebula> RETURN length(NULL), size(NULL), count(NULL), NULL IS NULL, NULL IS NOT NULL, sin(NULL), NULL + NULL, [1, NULL] IS NULL;\n+--------------+------------+-------------+--------------+------------------+-----------+-------------+------------------+\n| length(NULL) | size(NULL) | count(NULL) | NULL IS NULL | NULL IS NOT NULL | sin(NULL) | (NULL+NULL) | [1,NULL] IS NULL |\n+--------------+------------+-------------+--------------+------------------+-----------+-------------+------------------+\n| __NULL__     | __NULL__   | 0           | true         | false            | __NULL__  | __NULL__    | false            |\n+--------------+------------+-------------+--------------+------------------+-----------+-------------+------------------+\n\nnebula> WITH {name: null} AS `map` \\\n        RETURN `map`.name IS NOT NULL;\n+----------------------+\n| map.name IS NOT NULL |\n+----------------------+\n| false                |\n+----------------------+\n\nnebula> WITH {name: 'Mats', name2: 'Pontus'} AS map1, \\\n        {name: null} AS map2, {notName: 0, notName2: null } AS map3 \\\n        RETURN map1.name IS NULL, map2.name IS NOT NULL, map3.name IS NULL;\n+-------------------+-----------------------+-------------------+\n| map1.name IS NULL | map2.name IS NOT NULL | map3.name IS NULL |\n+-------------------+-----------------------+-------------------+\n| false             | false                 | true              |\n+-------------------+-----------------------+-------------------+\n\nnebula> MATCH (n:player) \\\n        RETURN n.player.age IS NULL, n.player.name IS NOT NULL, n.player.empty IS NULL;\n+----------------------+---------------------------+------------------------+\n| n.player.age IS NULL | n.player.name IS NOT NULL | n.player.empty IS NULL |\n+----------------------+---------------------------+------------------------+\n| false                | true                      | true                   |\n| false                | true                      | true                   |\n...\n
        "},{"location":"3.ngql-guide/5.operators/1.comparison/#is_not_empty","title":"IS [NOT] EMPTY","text":"
        nebula> RETURN null IS EMPTY;\n+---------------+\n| NULL IS EMPTY |\n+---------------+\n| false         |\n+---------------+\n\nnebula> RETURN \"a\" IS NOT EMPTY;\n+------------------+\n| \"a\" IS NOT EMPTY |\n+------------------+\n| true             |\n+------------------+\n\nnebula> GO FROM \"player100\" OVER * WHERE properties($$).name IS NOT EMPTY YIELD dst(edge);\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"team204\"   |\n| \"player101\" |\n| \"player125\" |\n+-------------+\n
        "},{"location":"3.ngql-guide/5.operators/10.arithmetic/","title":"Arithmetic operators","text":"

        NebulaGraph supports the following arithmetic operators.

        Name Description + Addition operator - Minus operator * Multiplication operator / Division operator % Modulo operator - Changes the sign of the argument"},{"location":"3.ngql-guide/5.operators/10.arithmetic/#examples","title":"Examples","text":"
        nebula> RETURN 1+2 AS result;\n+--------+\n| result |\n+--------+\n| 3      |\n+--------+\n\nnebula> RETURN -10+5 AS result;\n+--------+\n| result |\n+--------+\n| -5     |\n+--------+\n\nnebula> RETURN (3*8)%5 AS result;\n+--------+\n| result |\n+--------+\n| 4      |\n+--------+\n
        "},{"location":"3.ngql-guide/5.operators/2.boolean/","title":"Boolean operators","text":"

        NebulaGraph supports the following boolean operators.

        Name Description AND Logical AND NOT Logical NOT OR Logical OR XOR Logical XOR

        For the precedence of the operators, refer to Operator Precedence.

        For the logical operations with NULL, refer to NULL.

        "},{"location":"3.ngql-guide/5.operators/2.boolean/#legacy_version_compatibility","title":"Legacy version compatibility","text":"
        • Non-zero numbers cannot be converted to boolean values.
        "},{"location":"3.ngql-guide/5.operators/4.pipe/","title":"Pipe operators","text":"

        Multiple queries can be combined using pipe operators in nGQL.

        "},{"location":"3.ngql-guide/5.operators/4.pipe/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

        Pipe operators apply to native nGQL only.

        "},{"location":"3.ngql-guide/5.operators/4.pipe/#syntax","title":"Syntax","text":"

        One major difference between nGQL and SQL is how sub-queries are composed.

        • In SQL, sub-queries are nested in the query statements.
        • In nGQL, the shell style PIPE (|) is introduced into the sub-queries.
        "},{"location":"3.ngql-guide/5.operators/4.pipe/#examples","title":"Examples","text":"
        nebula> GO FROM \"player100\" OVER follow \\\n        YIELD dst(edge) AS dstid, properties($$).name AS Name | \\\n        GO FROM $-.dstid OVER follow YIELD dst(edge);\n\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player100\" |\n| \"player102\" |\n| \"player125\" |\n| \"player100\" |\n+-------------+\n

        Users must define aliases in the YIELD clause for the reference operator $- to use, just like $-.dstid in the preceding example.

        "},{"location":"3.ngql-guide/5.operators/4.pipe/#performance_tips","title":"Performance tips","text":"

        In NebulaGraph, pipes will affect the performance. Take A | B as an example, the effects are as follows:

        1. Pipe operators operate synchronously. That is, the data can enter the pipe clause as a whole after the execution of clause A before the pipe operator is completed.

        2. If A sends a large amount of data to |, the entire query request may be very slow. You can try to split this statement.

          1. Send A from the application,

          2. Split the return results on the application,

          3. Send to multiple graphd processes concurrently,

          4. Every graphd process executes part of B.

          This is usually much faster than executing a complete A | B with a single graphd process.

        "},{"location":"3.ngql-guide/5.operators/6.set/","title":"Set operators","text":"

        This topic will describe the set operators, including UNION, UNION ALL, INTERSECT, and MINUS. To combine multiple queries, use these set operators.

        All set operators have equal precedence. If a nGQL statement contains multiple set operators, NebulaGraph will evaluate them from left to right unless parentheses explicitly specify another order.

        Caution

        The names and order of the variables defined in the query statements before and after the set operator must be consistent. For example, the names and order of a,b,c in RETURN a,b,c UNION RETURN a,b,c need to be consistent.

        "},{"location":"3.ngql-guide/5.operators/6.set/#union_union_distinct_and_union_all","title":"UNION, UNION DISTINCT, and UNION ALL","text":"
        <left> UNION [DISTINCT | ALL] <right> [ UNION [DISTINCT | ALL] <right> ...]\n
        • Operator UNION DISTINCT (or by short UNION) returns the union of two sets A and B without duplicated elements.
        • Operator UNION ALL returns the union of two sets A and B with duplicated elements.
        • The <left> and <right> must have the same number of columns and data types. Different data types are converted according to the Type Conversion.
        "},{"location":"3.ngql-guide/5.operators/6.set/#examples","title":"Examples","text":"
        # The following statement returns the union of two query results without duplicated elements.\nnebula> GO FROM \"player102\" OVER follow YIELD dst(edge) \\\n        UNION \\\n        GO FROM \"player100\" OVER follow YIELD dst(edge);\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player100\" |\n| \"player101\" |\n| \"player125\" |\n+-------------+\n\nnebula> MATCH (v:player) \\\n        WITH v.player.name AS v \\\n        RETURN n ORDER BY n LIMIT 3 \\\n        UNION \\\n        UNWIND [\"Tony Parker\", \"Ben Simmons\"] AS n \\\n        RETURN n;\n+---------------------+\n| n                   |\n+---------------------+\n| \"Amar'e Stoudemire\" |\n| \"Aron Baynes\"       |\n| \"Ben Simmons\"       |\n| \"Tony Parker\"       |\n+---------------------+\n\n# The following statement returns the union of two query results with duplicated elements.\nnebula> GO FROM \"player102\" OVER follow YIELD dst(edge) \\\n        UNION ALL \\\n        GO FROM \"player100\" OVER follow YIELD dst(edge);\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player100\" |\n| \"player101\" |\n| \"player101\" |\n| \"player125\" |\n+-------------+\n\nnebula> MATCH (v:player) \\\n        WITH v.player.name AS n \\\n        RETURN n ORDER BY n LIMIT 3 \\\n        UNION ALL \\\n        UNWIND [\"Tony Parker\", \"Ben Simmons\"] AS n \\\n        RETURN n;\n+---------------------+\n| n                   |\n+---------------------+\n| \"Amar'e Stoudemire\" |\n| \"Aron Baynes\"       |\n| \"Ben Simmons\"       |\n| \"Tony Parker\"       |\n| \"Ben Simmons\"       |\n+---------------------+\n\n# UNION can also work with the YIELD statement. The DISTINCT keyword will check duplication by all the columns for every line, and remove duplicated lines if every column is the same.\nnebula> GO FROM \"player102\" OVER follow \\\n        YIELD dst(edge) AS id, properties(edge).degree AS Degree, properties($$).age AS Age \\\n        UNION /* DISTINCT */ \\\n        GO FROM \"player100\" OVER follow \\\n        YIELD dst(edge) AS id, properties(edge).degree AS Degree, properties($$).age AS Age;\n+-------------+--------+-----+\n| id          | Degree | Age |\n+-------------+--------+-----+\n| \"player100\" | 75     | 42  |\n| \"player101\" | 75     | 36  |\n| \"player101\" | 95     | 36  |\n| \"player125\" | 95     | 41  |\n+-------------+--------+-----+\n
        "},{"location":"3.ngql-guide/5.operators/6.set/#intersect","title":"INTERSECT","text":"
        <left> INTERSECT <right>\n
        • Operator INTERSECT returns the intersection of two sets A and B (denoted by A \u22c2 B).
        • Similar to UNION, the left and right must have the same number of columns and data types. Different data types are converted according to the Type Conversion.
        "},{"location":"3.ngql-guide/5.operators/6.set/#example","title":"Example","text":"
        # The following statement returns the intersection of two query results.\nnebula> GO FROM \"player102\" OVER follow \\\n        YIELD dst(edge) AS id, properties(edge).degree AS Degree, properties($$).age AS Age \\\n        INTERSECT \\\n        GO FROM \"player100\" OVER follow \\\n        YIELD dst(edge) AS id, properties(edge).degree AS Degree, properties($$).age AS Age;\n+----+--------+-----+\n| id | Degree | Age |\n+----+--------+-----+\n+----+--------+-----+\n\nnebula> MATCH (v:player)-[e:follow]->(v2) \\\n        WHERE id(v) == \"player102\" \\\n        RETURN id(v2) As id, e.degree As Degree, v2.player.age AS Age \\\n        INTERSECT \\\n        MATCH (v:player)-[e:follow]->(v2) \\\n        WHERE id(v) == \"player100\" \\\n        RETURN id(v2) As id, e.degree As Degree, v2.player.age AS Age;\n+----+--------+-----+\n| id | Degree | Age |\n+----+--------+-----+\n+----+--------+-----+\n\nnebula> UNWIND [1,2] AS a RETURN a \\\n        INTERSECT \\\n        UNWIND [1,2,3,4] AS a \\\n        RETURN a;\n+---+\n| a |\n+---+\n| 1 |\n| 2 |\n+---+\n
        "},{"location":"3.ngql-guide/5.operators/6.set/#minus","title":"MINUS","text":"
        <left> MINUS <right>\n

        Operator MINUS returns the subtraction (or difference) of two sets A and B (denoted by A-B). Always pay attention to the order of left and right. The set A-B consists of elements that are in A but not in B.

        "},{"location":"3.ngql-guide/5.operators/6.set/#example_1","title":"Example","text":"
        # The following statement returns the elements in the first query result but not in the second query result.\nnebula> GO FROM \"player100\" OVER follow YIELD dst(edge) \\\n        MINUS \\\n        GO FROM \"player102\" OVER follow YIELD dst(edge);\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player125\" |\n+-------------+\n\nnebula> GO FROM \"player102\" OVER follow YIELD dst(edge) AS id\\\n        MINUS \\\n        GO FROM \"player100\" OVER follow YIELD dst(edge) AS id;\n+-------------+\n| id          |\n+-------------+\n| \"player100\" |\n+-------------+\n\nnebula> MATCH (v:player)-[e:follow]->(v2) \\\n        WHERE id(v) ==\"player102\" \\\n        RETURN id(v2) AS id\\\n        MINUS \\\n        MATCH (v:player)-[e:follow]->(v2) \\\n        WHERE id(v) ==\"player100\" \\\n        RETURN id(v2) AS id;\n+-------------+\n| id          |\n+-------------+\n| \"player100\" |\n+-------------+\n\nnebula> UNWIND [1,2,3] AS a RETURN a \\\n        MINUS \\\n        WITH 4 AS a \\\n        RETURN a;\n+---+\n| a |\n+---+\n| 1 |\n| 2 |\n| 3 |\n+---+\n
        "},{"location":"3.ngql-guide/5.operators/6.set/#precedence_of_the_set_operators_and_pipe_operators","title":"Precedence of the set operators and pipe operators","text":"

        Please note that when a query contains a pipe | and a set operator, the pipe takes precedence. Refer to Pipe for details. The query GO FROM 1 UNION GO FROM 2 | GO FROM 3 is the same as the query GO FROM 1 UNION (GO FROM 2 | GO FROM 3).

        "},{"location":"3.ngql-guide/5.operators/6.set/#examples_1","title":"Examples","text":"
        nebula> GO FROM \"player102\" OVER follow \\\n        YIELD dst(edge) AS play_dst  \\\n        UNION \\\n        GO FROM \"team200\" OVER serve REVERSELY \\\n        YIELD src(edge) AS play_src \\\n        | GO FROM $-.play_src OVER follow YIELD dst(edge) AS play_dst;\n\n+-------------+\n| play_dst    |\n+-------------+\n| \"player100\" |\n| \"player101\" |\n| \"player117\" |\n| \"player105\" |\n+-------------+\n

        The above query executes the statements in the red bar first and then executes the statement in the green box.

        The parentheses can change the execution priority. For example:

        nebula> (GO FROM \"player102\" OVER follow \\\n        YIELD dst(edge) AS play_dst  \\\n        UNION \\\n        GO FROM \"team200\" OVER serve REVERSELY \\\n        YIELD src(edge) AS play_dst) \\\n        | GO FROM $-.play_dst OVER follow YIELD dst(edge) AS play_dst;\n

        In the above query, the statements within the parentheses take precedence. That is, the UNION operation will be executed first, and its output will be executed as the input of the next operation with pipes.

        "},{"location":"3.ngql-guide/5.operators/7.string/","title":"String operators","text":"

        You can use the following string operators for concatenating, querying, and matching.

        Name Description + Concatenates strings. CONTAINS Performs searchings in strings. (NOT) IN Checks whether a value is within a set of values. (NOT) STARTS WITH Performs matchings at the beginning of a string. (NOT) ENDS WITH Performs matchings at the end of a string. Regular expressions Perform string matchings using regular expressions.

        Note

        All the string searchings or matchings are case-sensitive.

        "},{"location":"3.ngql-guide/5.operators/7.string/#examples","title":"Examples","text":""},{"location":"3.ngql-guide/5.operators/7.string/#_1","title":"+","text":"
        nebula> RETURN 'a' + 'b';\n+-----------+\n| (\"a\"+\"b\") |\n+-----------+\n| \"ab\"      |\n+-----------+\nnebula> UNWIND 'a' AS a UNWIND 'b' AS b RETURN a + b;\n+-------+\n| (a+b) |\n+-------+\n| \"ab\"  |\n+-------+\n
        "},{"location":"3.ngql-guide/5.operators/7.string/#contains","title":"CONTAINS","text":"

        The CONTAINS operator requires string types on both left and right sides.

        nebula> MATCH (s:player)-[e:serve]->(t:team) WHERE id(s) == \"player101\" \\\n        AND t.team.name CONTAINS \"ets\" RETURN s.player.name, e.start_year, e.end_year, t.team.name;\n+---------------+--------------+------------+-------------+\n| s.player.name | e.start_year | e.end_year | t.team.name |\n+---------------+--------------+------------+-------------+\n| \"Tony Parker\" | 2018         | 2019       | \"Hornets\"   |\n+---------------+--------------+------------+-------------+\n\nnebula> GO FROM \"player101\" OVER serve WHERE (STRING)properties(edge).start_year CONTAINS \"19\" AND \\\n        properties($^).name CONTAINS \"ny\" \\\n        YIELD properties($^).name, properties(edge).start_year, properties(edge).end_year, properties($$).name;\n+---------------------+-----------------------------+---------------------------+---------------------+\n| properties($^).name | properties(EDGE).start_year | properties(EDGE).end_year | properties($$).name |\n+---------------------+-----------------------------+---------------------------+---------------------+\n| \"Tony Parker\"       | 1999                        | 2018                      | \"Spurs\"             |\n+---------------------+-----------------------------+---------------------------+---------------------+\n\nnebula> GO FROM \"player101\" OVER serve WHERE !(properties($$).name CONTAINS \"ets\") \\\n        YIELD properties($^).name, properties(edge).start_year, properties(edge).end_year, properties($$).name;\n+---------------------+-----------------------------+---------------------------+---------------------+\n| properties($^).name | properties(EDGE).start_year | properties(EDGE).end_year | properties($$).name |\n+---------------------+-----------------------------+---------------------------+---------------------+\n| \"Tony Parker\"       | 1999                        | 2018                      | \"Spurs\"             |\n+---------------------+-----------------------------+---------------------------+---------------------+\n
        "},{"location":"3.ngql-guide/5.operators/7.string/#not_in","title":"(NOT) IN","text":"
        nebula> RETURN  1 IN [1,2,3], \"Yao\" NOT IN [\"Yi\", \"Tim\", \"Kobe\"], NULL IN [\"Yi\", \"Tim\", \"Kobe\"];\n+----------------+------------------------------------+-------------------------------+\n| (1 IN [1,2,3]) | (\"Yao\" NOT IN [\"Yi\",\"Tim\",\"Kobe\"]) | (NULL IN [\"Yi\",\"Tim\",\"Kobe\"]) |\n+----------------+------------------------------------+-------------------------------+\n| true           | true                               | __NULL__                      |\n+----------------+------------------------------------+-------------------------------+\n
        "},{"location":"3.ngql-guide/5.operators/7.string/#not_starts_with","title":"(NOT) STARTS WITH","text":"
        nebula> RETURN 'apple' STARTS WITH 'app', 'apple' STARTS WITH 'a', 'apple' STARTS WITH toUpper('a');\n+-----------------------------+---------------------------+------------------------------------+\n| (\"apple\" STARTS WITH \"app\") | (\"apple\" STARTS WITH \"a\") | (\"apple\" STARTS WITH toUpper(\"a\")) |\n+-----------------------------+---------------------------+------------------------------------+\n| true                        | true                      | false                              |\n+-----------------------------+---------------------------+------------------------------------+\n\nnebula> RETURN 'apple' STARTS WITH 'b','apple' NOT STARTS WITH 'app';\n+---------------------------+---------------------------------+\n| (\"apple\" STARTS WITH \"b\") | (\"apple\" NOT STARTS WITH \"app\") |\n+---------------------------+---------------------------------+\n| false                     | false                           |\n+---------------------------+---------------------------------+\n
        "},{"location":"3.ngql-guide/5.operators/7.string/#not_ends_with","title":"(NOT) ENDS WITH","text":"
        nebula> RETURN 'apple' ENDS WITH 'app', 'apple' ENDS WITH 'e', 'apple' ENDS WITH 'E', 'apple' ENDS WITH 'b';\n+---------------------------+-------------------------+-------------------------+-------------------------+\n| (\"apple\" ENDS WITH \"app\") | (\"apple\" ENDS WITH \"e\") | (\"apple\" ENDS WITH \"E\") | (\"apple\" ENDS WITH \"b\") |\n+---------------------------+-------------------------+-------------------------+-------------------------+\n| false                     | true                    | false                   | false                   |\n+---------------------------+-------------------------+-------------------------+-------------------------+\n
        "},{"location":"3.ngql-guide/5.operators/7.string/#regular_expressions","title":"Regular expressions","text":"

        Note

        Regular expressions cannot work with native nGQL statements (GO, FETCH, LOOKUP, etc.). Use it in openCypher only (MATCH, WHERE, etc.).

        NebulaGraph supports filtering by using regular expressions. The regular expression syntax is inherited from std::regex. You can match on regular expressions by using =~ 'regexp'. For example:

        nebula> RETURN \"384748.39\" =~ \"\\\\d+(\\\\.\\\\d{2})?\";\n+--------------------------------+\n| (\"384748.39\"=~\"\\d+(\\.\\d{2})?\") |\n+--------------------------------+\n| true                           |\n+--------------------------------+\n\nnebula> MATCH (v:player) WHERE v.player.name =~ 'Tony.*' RETURN v.player.name;\n+---------------+\n| v.player.name |\n+---------------+\n| \"Tony Parker\" |\n+---------------+\n
        "},{"location":"3.ngql-guide/5.operators/8.list/","title":"List operators","text":"

        NebulaGraph supports the following list operators:

        List operator Description + Concatenates lists. IN Checks if an element exists in a list. [] Accesses an element(s) in a list using the index operator."},{"location":"3.ngql-guide/5.operators/8.list/#examples","title":"Examples","text":"
        nebula> YIELD [1,2,3,4,5]+[6,7] AS myList;\n+-----------------------+\n| myList                |\n+-----------------------+\n| [1, 2, 3, 4, 5, 6, 7] |\n+-----------------------+\n\nnebula> RETURN size([NULL, 1, 2]);\n+------------------+\n| size([NULL,1,2]) |\n+------------------+\n| 3                |\n+------------------+\n\nnebula> RETURN NULL IN [NULL, 1];\n+--------------------+\n| (NULL IN [NULL,1]) |\n+--------------------+\n| __NULL__           |\n+--------------------+\n\nnebula> WITH [2, 3, 4, 5] AS numberlist \\\n    UNWIND numberlist AS number \\\n    WITH number \\\n    WHERE number IN [2, 3, 8] \\\n    RETURN number;\n+--------+\n| number |\n+--------+\n| 2      |\n| 3      |\n+--------+\n\nnebula> WITH ['Anne', 'John', 'Bill', 'Diane', 'Eve'] AS names RETURN names[1] AS result;\n+--------+\n| result |\n+--------+\n| \"John\" |\n+--------+\n
        "},{"location":"3.ngql-guide/5.operators/9.precedence/","title":"Operator precedence","text":"

        The following list shows the precedence of nGQL operators in descending order. Operators that are shown together on a line have the same precedence.

        • - (negative number)
        • !, NOT
        • *, /, %
        • -, +
        • ==, >=, >, <=, <, <>, !=
        • AND
        • OR, XOR
        • = (assignment)

        For operators that occur at the same precedence level within an expression, evaluation proceeds left to right, with the exception that assignments evaluate right to left.

        The precedence of operators determines the order of evaluation of terms in an expression. To modify this order and group terms explicitly, use parentheses.

        "},{"location":"3.ngql-guide/5.operators/9.precedence/#examples","title":"Examples","text":"
        nebula> RETURN 2+3*5;\n+-----------+\n| (2+(3*5)) |\n+-----------+\n| 17        |\n+-----------+\n\nnebula> RETURN (2+3)*5;\n+-----------+\n| ((2+3)*5) |\n+-----------+\n| 25        |\n+-----------+\n
        "},{"location":"3.ngql-guide/5.operators/9.precedence/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

        In openCypher, comparisons can be chained arbitrarily, e.g., x < y <= z is equivalent to x < y AND y <= z in openCypher.

        But in nGQL, x < y <= z is equivalent to (x < y) <= z. The result of (x < y) is a boolean. Compare it with an integer z, and you will get the final result NULL.

        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/","title":"Built-in math functions","text":"

        This topic describes the built-in math functions supported by NebulaGraph.

        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#abs","title":"abs()","text":"

        abs() returns the absolute value of the argument.

        Syntax: abs(<expression>)

        • expression: An expression of which the result type is double.
        • Result type: Double

        Example:

        nebula> RETURN abs(-10);\n+------------+\n| abs(-(10)) |\n+------------+\n| 10         |\n+------------+\nnebula> RETURN abs(5-6);\n+------------+\n| abs((5-6)) |\n+------------+\n| 1          |\n+------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#floor","title":"floor()","text":"

        floor() returns the largest integer value smaller than or equal to the argument.(Rounds down)

        Syntax: floor(<expression>)

        • expression: An expression of which the result type is double.
        • Result type: Double

        Example:

        nebula> RETURN floor(9.9);\n+------------+\n| floor(9.9) |\n+------------+\n| 9.0        |\n+------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#ceil","title":"ceil()","text":"

        ceil() returns the smallest integer greater than or equal to the argument.(Rounds up)

        Syntax: ceil(<expression>)

        • expression: An expression of which the result type is double.
        • Result type: Double

        Example:

        nebula> RETURN ceil(9.1);\n+-----------+\n| ceil(9.1) |\n+-----------+\n| 10.0      |\n+-----------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#round","title":"round()","text":"

        round() returns the rounded value of the specified number. Pay attention to the floating-point precision when using this function.

        Syntax: round(<expression>, <digit>)

        • expression: An expression of which the result type is double.
        • digit: Decimal digits. If digit is less than 0, round at the left of the decimal point.
        • Result type: Double

        Example:

        nebula> RETURN round(314.15926, 2);\n+--------------------+\n| round(314.15926,2) |\n+--------------------+\n| 314.16             |\n+--------------------+\nnebula> RETURN round(314.15926, -1);\n+-----------------------+\n| round(314.15926,-(1)) |\n+-----------------------+\n| 310.0                 |\n+-----------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#sqrt","title":"sqrt()","text":"

        sqrt() returns the square root of the argument.

        Syntax: sqrt(<expression>)

        • expression: An expression of which the result type is double.
        • Result type: Double

        Example:

        nebula> RETURN sqrt(9);\n+---------+\n| sqrt(9) |\n+---------+\n| 3.0     |\n+---------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#cbrt","title":"cbrt()","text":"

        cbrt() returns the cubic root of the argument.

        Syntax: cbrt(<expression>)

        • expression: An expression of which the result type is double.
        • Result type: Double

        Example:

        nebula> RETURN cbrt(8);\n+---------+\n| cbrt(8) |\n+---------+\n| 2.0     |\n+---------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#hypot","title":"hypot()","text":"

        hypot() returns the hypotenuse of a right-angled triangle.

        Syntax: hypot(<expression_x>,<expression_y>)

        • expression_x, expression_y: An expression of which the result type is double. They represent the side lengths x and y of a right triangle.
        • Result type: Double

        Example:

        nebula> RETURN hypot(3,2*2);\n+----------------+\n| hypot(3,(2*2)) |\n+----------------+\n| 5.0            |\n+----------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#pow","title":"pow()","text":"

        pow() returns the result of xy.

        Syntax: pow(<expression_x>,<expression_y>,)

        • expression_x: An expression of which the result type is double. It represents the base x.
        • expression_y: An expression of which the result type is double. It represents the exponential y.
        • Result type: Double

        Example:

        nebula> RETURN pow(3,3);\n+----------+\n| pow(3,3) |\n+----------+\n| 27       |\n+----------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#exp","title":"exp()","text":"

        exp() returns the result of ex.

        Syntax: exp(<expression>)

        • expression: An expression of which the result type is double. It represents the exponential x.
        • Result type: Double

        Example:

        nebula> RETURN exp(2);\n+------------------+\n| exp(2)           |\n+------------------+\n| 7.38905609893065 |\n+------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#exp2","title":"exp2()","text":"

        exp2() returns the result of 2x.

        Syntax: exp2(<expression>)

        • expression: An expression of which the result type is double. It represents the exponential x.
        • Result type: Double

        Example:

        nebula> RETURN exp2(3);\n+---------+\n| exp2(3) |\n+---------+\n| 8.0     |\n+---------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#log","title":"log()","text":"

        log() returns the base-e logarithm of the argument. (\\(log_{e}{N}\\))

        Syntax: log(<expression>)

        • expression: An expression of which the result type is double. It represents the antilogarithm N.
        • Result type: Double

        Example:

        nebula> RETURN log(8);\n+--------------------+\n| log(8)             |\n+--------------------+\n| 2.0794415416798357 |\n+--------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#log2","title":"log2()","text":"

        log2() returns the base-2 logarithm of the argument. (\\(log_{2}{N}\\))

        Syntax: log2(<expression>)

        • expression: An expression of which the result type is double. It represents the antilogarithm N.
        • Result type: Double

        Example:

        nebula> RETURN log2(8);\n+---------+\n| log2(8) |\n+---------+\n| 3.0     |\n+---------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#log10","title":"log10()","text":"

        log10() returns the base-10 logarithm of the argument. (\\(log_{10}{N}\\))

        Syntax: log10(<expression>)

        • expression: An expression of which the result type is double. It represents the antilogarithm N.
        • Result type: Double

        Example:

        nebula> RETURN log10(100);\n+------------+\n| log10(100) |\n+------------+\n| 2.0        |\n+------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#sin","title":"sin()","text":"

        sin() returns the sine of the argument. Users can convert angles to radians using the function radians().

        Syntax: sin(<expression>)

        • expression: An expression of which the result type is double.
        • Result type: Double

        Example:

        nebula> RETURN sin(3);\n+--------------------+\n| sin(3)             |\n+--------------------+\n| 0.1411200080598672 |\n+--------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#asin","title":"asin()","text":"

        asin() returns the inverse sine of the argument. Users can convert angles to radians using the function radians().

        Syntax: asin(<expression>)

        • expression: An expression of which the result type is double.
        • Result type: Double

        Example:

        nebula> RETURN asin(0.5);\n+--------------------+\n| asin(0.5)          |\n+--------------------+\n| 0.5235987755982989 |\n+--------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#cos","title":"cos()","text":"

        cos() returns the cosine of the argument. Users can convert angles to radians using the function radians().

        Syntax: cos(<expression>)

        • expression: An expression of which the result type is double.
        • Result type: Double

        Example:

        nebula> RETURN cos(0.5);\n+--------------------+\n| cos(0.5)           |\n+--------------------+\n| 0.8775825618903728 |\n+--------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#acos","title":"acos()","text":"

        acos() returns the inverse cosine of the argument. Users can convert angles to radians using the function radians().

        Syntax: acos(<expression>)

        • expression: An expression of which the result type is double.
        • Result type: Double

        Example:

        nebula> RETURN acos(0.5);\n+--------------------+\n| acos(0.5)          |\n+--------------------+\n| 1.0471975511965979 |\n+--------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#tan","title":"tan()","text":"

        tan() returns the tangent of the argument. Users can convert angles to radians using the function radians().

        Syntax: tan(<expression>)

        • expression: An expression of which the result type is double.
        • Result type: Double

        Example:

        nebula> RETURN tan(0.5);\n+--------------------+\n| tan(0.5)           |\n+--------------------+\n| 0.5463024898437905 |\n+--------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#atan","title":"atan()","text":"

        atan() returns the inverse tangent of the argument. Users can convert angles to radians using the function radians().

        Syntax: atan(<expression>)

        • expression: An expression of which the result type is double.
        • Result type: Double

        Example:

        nebula> RETURN atan(0.5);\n+--------------------+\n| atan(0.5)          |\n+--------------------+\n| 0.4636476090008061 |\n+--------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#rand","title":"rand()","text":"

        rand() returns a random floating point number in the range from 0 (inclusive) to 1 (exclusive); i.e.[0,1).

        Syntax: rand()

        • Result type: Double

        Example:

        nebula> RETURN rand();\n+--------------------+\n| rand()             |\n+--------------------+\n| 0.6545837172298736 |\n+--------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#rand32","title":"rand32()","text":"

        rand32() returns a random 32-bit integer in [min, max).

        Syntax: rand32(<expression_min>,<expression_max>)

        • expression_min: An expression of which the result type is int. It represents the minimum min.
        • expression_max: An expression of which the result type is int. It represents the maximum max.
        • Result type: Int
        • If you set only one argument, it is parsed as max and min is 0 by default. If you set no argument, the system returns a random signed 32-bit integer.

        Example:

        nebula> RETURN rand32(1,100);\n+---------------+\n| rand32(1,100) |\n+---------------+\n| 63            |\n+---------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#rand64","title":"rand64()","text":"

        rand64() returns a random 64-bit integer in [min, max).

        Syntax: rand64(<expression_min>,<expression_max>)

        • expression_min: An expression of which the result type is int. It represents the minimum min.
        • expression_max: An expression of which the result type is int. It represents the maximum max.
        • Result type: Int
        • If you set only one argument, it is parsed as max and min is 0 by default. If you set no argument, the system returns a random signed 64-bit integer.

        Example:

        nebula> RETURN rand64(1,100);\n+---------------+\n| rand64(1,100) |\n+---------------+\n| 34            |\n+---------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#bit_and","title":"bit_and()","text":"

        bit_and() returns the result of bitwise AND.

        Syntax: bit_and(<expression_1>,<expression_2>)

        • expression_1, expression_2: An expression of which the result type is int.
        • Result type: Int

        Example:

        nebula> RETURN bit_and(5,6);\n+--------------+\n| bit_and(5,6) |\n+--------------+\n| 4            |\n+--------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#bit_or","title":"bit_or()","text":"

        bit_or() returns the result of bitwise OR.

        Syntax: bit_or(<expression_1>,<expression_2>)

        • expression_1, expression_2: An expression of which the result type is int.
        • Result type: Int

        Example:

        nebula> RETURN bit_or(5,6);\n+-------------+\n| bit_or(5,6) |\n+-------------+\n| 7           |\n+-------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#bit_xor","title":"bit_xor()","text":"

        bit_xor() returns the result of bitwise XOR.

        Syntax: bit_xor(<expression_1>,<expression_2>)

        • expression_1, expression_2: An expression of which the result type is int.
        • Result type: Int

        Example:

        nebula> RETURN bit_xor(5,6);\n+--------------+\n| bit_xor(5,6) |\n+--------------+\n| 3            |\n+--------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#size","title":"size()","text":"

        size() returns the number of elements in a list or a map, or the length of a string.

        Syntax: size({<expression>|<string>})

        • expression: An expression for a list or map.
        • string: A specified string.
        • Result type: Int

        Example:

        nebula> RETURN size([1,2,3,4]);\n+-----------------+\n| size([1,2,3,4]) |\n+-----------------+\n| 4               |\n+-----------------+\n
        nebula> RETURN size(\"basketballplayer\") as size;\n+------+\n| size |\n+------+\n| 16   |\n+------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#range","title":"range()","text":"

        range() returns a list of integers from [start,end] in the specified steps.

        Syntax: range(<expression_start>,<expression_end>[,<expression_step>])

        • expression_start: An expression of which the result type is int. It represents the starting value start.
        • expression_end: An expression of which the result type is int. It represents the end value end.
        • expression_step: An expression of which the result type is int. It represents the step size step, step is 1 by default.
        • Result type: List

        Example:

        nebula> RETURN range(1,3*3,2);\n+------------------+\n| range(1,(3*3),2) |\n+------------------+\n| [1, 3, 5, 7, 9]  |\n+------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#sign","title":"sign()","text":"

        sign() returns the signum of the given number. If the number is 0, the system returns 0. If the number is negative, the system returns -1. If the number is positive, the system returns 1.

        Syntax: sign(<expression>)

        • expression: An expression of which the result type is double.
        • Result type: Int

        Example:

        nebula> RETURN sign(10);\n+----------+\n| sign(10) |\n+----------+\n| 1        |\n+----------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#e","title":"e()","text":"

        e() returns the base of the natural logarithm, e (2.718281828459045).

        Syntax: e()

        • Result type: Double

        Example:

        nebula> RETURN e();\n+-------------------+\n| e()               |\n+-------------------+\n| 2.718281828459045 |\n+-------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#pi","title":"pi()","text":"

        pi() returns the mathematical constant pi (3.141592653589793).

        Syntax: pi()

        • Result type: Double

        Example:

        nebula> RETURN pi();\n+-------------------+\n| pi()              |\n+-------------------+\n| 3.141592653589793 |\n+-------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#radians","title":"radians()","text":"

        radians() converts angles to radians.

        Syntax: radians(<angle>)

        • Result type: Double

        Example:

        nebula> RETURN radians(180);\n+-------------------+\n| radians(180)      |\n+-------------------+\n| 3.141592653589793 |\n+-------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/14.geo/","title":"Geography functions","text":"

        Geography functions are used to generate or perform operations on the value of the geography data type.

        For descriptions of the geography data types, see Geography.

        "},{"location":"3.ngql-guide/6.functions-and-expressions/14.geo/#descriptions","title":"Descriptions","text":"Function Return Type Description ST_Point(longitude, latitude) GEOGRAPHY Creates the geography that contains a point. ST_GeogFromText(wkt_string) GEOGRAPHY Returns the geography corresponding to the input WKT string. ST_ASText(geography) STRING Returns the WKT string of the input geography. ST_Centroid(geography) GEOGRAPHY Returns the centroid of the input geography in the form of the single point geography. ST_ISValid(geography) BOOL Returns whether the input geography is valid. ST_Intersects(geography_1, geography_2) BOOL Returns whether geography_1 and geography_2 have intersections. ST_Covers(geography_1, geography_2) BOOL Returns whether geography_1 completely contains geography_2. If there is no point outside geography_1 in geography_2, return True. ST_CoveredBy(geography_1, geography_2) BOOL Returns whether geography_2 completely contains geography_1.If there is no point outside geography_2 in geography_1, return True. ST_DWithin(geography_1, geography_2, distance) BOOL If the distance between one point (at least) in geography_1 and one point in geography_2 is less than or equal to the distance specified by the distance parameter (measured by meters), return True. ST_Distance(geography_1, geography_2) FLOAT Returns the smallest possible distance (measured by meters) between two non-empty geographies. S2_CellIdFromPoint(point_geography) INT Returns the S2 Cell ID that covers the point geography. S2_CoveringCellIds(geography) ARRAY<INT64> Returns an array of S2 Cell IDs that cover the input geography."},{"location":"3.ngql-guide/6.functions-and-expressions/14.geo/#examples","title":"Examples","text":"
        nebula> RETURN ST_ASText(ST_Point(1,1));\n+--------------------------+\n| ST_ASText(ST_Point(1,1)) |\n+--------------------------+\n| \"POINT(1 1)\"             |\n+--------------------------+\n\nnebula> RETURN ST_ASText(ST_GeogFromText(\"POINT(3 8)\"));\n+------------------------------------------+\n| ST_ASText(ST_GeogFromText(\"POINT(3 8)\")) |\n+------------------------------------------+\n| \"POINT(3 8)\"                             |\n+------------------------------------------+\n\nnebula> RETURN ST_ASTEXT(ST_Centroid(ST_GeogFromText(\"LineString(0 1,1 0)\")));\n+----------------------------------------------------------------+\n| ST_ASTEXT(ST_Centroid(ST_GeogFromText(\"LineString(0 1,1 0)\"))) |\n+----------------------------------------------------------------+\n| \"POINT(0.5000380800773782 0.5000190382261059)\"                 |\n+----------------------------------------------------------------+\n\nnebula> RETURN ST_ISValid(ST_GeogFromText(\"POINT(3 8)\"));\n+-------------------------------------------+\n| ST_ISValid(ST_GeogFromText(\"POINT(3 8)\")) |\n+-------------------------------------------+\n| true                                      |\n+-------------------------------------------+\n\nnebula> RETURN ST_Intersects(ST_GeogFromText(\"LineString(0 1,1 0)\"),ST_GeogFromText(\"LineString(0 0,1 1)\"));\n+----------------------------------------------------------------------------------------------+\n| ST_Intersects(ST_GeogFromText(\"LineString(0 1,1 0)\"),ST_GeogFromText(\"LineString(0 0,1 1)\")) |\n+----------------------------------------------------------------------------------------------+\n| true                                                                                         |\n+----------------------------------------------------------------------------------------------+\n\nnebula> RETURN ST_Covers(ST_GeogFromText(\"POLYGON((0 0,10 0,10 10,0 10,0 0))\"),ST_Point(1,2));\n+--------------------------------------------------------------------------------+\n| ST_Covers(ST_GeogFromText(\"POLYGON((0 0,10 0,10 10,0 10,0 0))\"),ST_Point(1,2)) |\n+--------------------------------------------------------------------------------+\n| true                                                                           |\n+--------------------------------------------------------------------------------+\n\nnebula> RETURN ST_CoveredBy(ST_Point(1,2),ST_GeogFromText(\"POLYGON((0 0,10 0,10 10,0 10,0 0))\"));\n+-----------------------------------------------------------------------------------+\n| ST_CoveredBy(ST_Point(1,2),ST_GeogFromText(\"POLYGON((0 0,10 0,10 10,0 10,0 0))\")) |\n+-----------------------------------------------------------------------------------+\n| true                                                                              |\n+-----------------------------------------------------------------------------------+\n\nnebula> RETURN ST_dwithin(ST_GeogFromText(\"Point(0 0)\"),ST_GeogFromText(\"Point(10 10)\"),20000000000.0);\n+---------------------------------------------------------------------------------------+\n| ST_dwithin(ST_GeogFromText(\"Point(0 0)\"),ST_GeogFromText(\"Point(10 10)\"),20000000000) |\n+---------------------------------------------------------------------------------------+\n| true                                                                                  |\n+---------------------------------------------------------------------------------------+\n\nnebula> RETURN ST_Distance(ST_GeogFromText(\"Point(0 0)\"),ST_GeogFromText(\"Point(10 10)\"));\n+----------------------------------------------------------------------------+\n| ST_Distance(ST_GeogFromText(\"Point(0 0)\"),ST_GeogFromText(\"Point(10 10)\")) |\n+----------------------------------------------------------------------------+\n| 1.5685230187677438e+06                                                     |\n+----------------------------------------------------------------------------+\n\nnebula> RETURN S2_CellIdFromPoint(ST_GeogFromText(\"Point(1 1)\"));\n+---------------------------------------------------+\n| S2_CellIdFromPoint(ST_GeogFromText(\"Point(1 1)\")) |\n+---------------------------------------------------+\n| 1153277837650709461                               |\n+---------------------------------------------------+\n\nnebula> RETURN S2_CoveringCellIds(ST_GeogFromText(\"POLYGON((0 1, 1 2, 2 3, 0 1))\"));\n+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| S2_CoveringCellIds(ST_GeogFromText(\"POLYGON((0 1, 1 2, 2 3, 0 1))\"))                                                                                                     |\n+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| [1152391494368201343, 1153466862374223872, 1153554823304445952, 1153836298281156608, 1153959443583467520, 1154240918560178176, 1160503736791990272, 1160591697722212352] |\n+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/15.aggregating/","title":"Aggregating functions","text":"

        This topic describes the aggregating functions supported by NebulaGraph.

        "},{"location":"3.ngql-guide/6.functions-and-expressions/15.aggregating/#avg","title":"avg()","text":"

        avg() returns the average value of the argument.

        Syntax: avg(<expression>)

        • Result type: Double

        Example:

        nebula> MATCH (v:player) RETURN avg(v.player.age);\n+--------------------+\n| avg(v.player.age)  |\n+--------------------+\n| 33.294117647058826 |\n+--------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/15.aggregating/#count","title":"count()","text":"

        count() returns the number of records.

        • (Native nGQL) You can use count() and GROUP BY together to group and count the number of parameters. Use YIELD to return.
        • (OpenCypher style) You can use count() and RETURN. GROUP BY is not necessary.

        Syntax: count({<expression> | *})

        • count(*) returns the number of rows (including NULL).
        • Result type: Int

        Example:

        nebula> WITH [NULL, 1, 1, 2, 2] As a UNWIND a AS b \\\n        RETURN count(b), count(*), count(DISTINCT b);\n+----------+----------+-------------------+\n| count(b) | count(*) | count(distinct b) |\n+----------+----------+-------------------+\n| 4        | 5        | 2                 |\n+----------+----------+-------------------+\n
        # The statement in the following example searches for the people whom `player101` follows and people who follow `player101`, i.e. a bidirectional query.\n# Group and count the number of parameters.\nnebula> GO FROM \"player101\" OVER follow BIDIRECT \\\n        YIELD properties($$).name AS Name \\\n        | GROUP BY $-.Name YIELD $-.Name, count(*);\n+---------------------+----------+\n| $-.Name             | count(*) |\n+---------------------+----------+\n| \"LaMarcus Aldridge\" | 2        |\n| \"Tim Duncan\"        | 2        |\n| \"Marco Belinelli\"   | 1        |\n| \"Manu Ginobili\"     | 1        |\n| \"Boris Diaw\"        | 1        |\n| \"Dejounte Murray\"   | 1        |\n+---------------------+----------+\n\n# Count the number of parameters.\nnebula> MATCH (v1:player)-[:follow]-(v2:player) \\\n        WHERE id(v1)== \"player101\" \\\n        RETURN v2.player.name AS Name, count(*) as cnt ORDER BY cnt DESC;\n+---------------------+-----+\n| Name                | cnt |\n+---------------------+-----+\n| \"LaMarcus Aldridge\" | 2   |\n| \"Tim Duncan\"        | 2   |\n| \"Boris Diaw\"        | 1   |\n| \"Manu Ginobili\"     | 1   |\n| \"Dejounte Murray\"   | 1   |\n| \"Marco Belinelli\"   | 1   |\n+---------------------+-----+\n

        The preceding example retrieves two columns:

        • $-.Name: the names of the people.
        • count(*): how many times the names show up.

        Because there are no duplicate names in the basketballplayer dataset, the number 2 in the column count(*) shows that the person in that row and player101 have followed each other.

        # a: The statement in the following example retrieves the age distribution of the players in the dataset.\nnebula> LOOKUP ON player \\\n        YIELD player.age As playerage \\\n        | GROUP BY $-.playerage \\\n        YIELD $-.playerage as age, count(*) AS number \\\n        | ORDER BY $-.number DESC, $-.age DESC;\n+-----+--------+\n| age | number |\n+-----+--------+\n| 34  | 4      |\n| 33  | 4      |\n| 30  | 4      |\n| 29  | 4      |\n| 38  | 3      |\n+-----+--------+\n...\n# b: The statement in the following example retrieves the age distribution of the players in the dataset.\nnebula> MATCH (n:player) \\\n        RETURN n.player.age as age, count(*) as number \\\n        ORDER BY number DESC, age DESC;\n+-----+--------+\n| age | number |\n+-----+--------+\n| 34  | 4      |\n| 33  | 4      |\n| 30  | 4      |\n| 29  | 4      |\n| 38  | 3      |\n+-----+--------+\n...\n
        # The statement in the following example counts the number of edges that Tim Duncan relates.\nnebula> MATCH (v:player{name:\"Tim Duncan\"}) -[e]- (v2) \\\n        RETURN count(e);\n+----------+\n| count(e) |\n+----------+\n| 13       |\n+----------+\n\n# The statement in the following example counts the number of edges that Tim Duncan relates and returns two columns (no DISTINCT and DISTINCT) in multi-hop queries.\nnebula> MATCH (n:player {name : \"Tim Duncan\"})-[]->(friend:player)-[]->(fof:player) \\\n        RETURN count(fof), count(DISTINCT fof);\n+------------+---------------------+\n| count(fof) | count(distinct fof) |\n+------------+---------------------+\n| 4          | 3                   |\n+------------+---------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/15.aggregating/#max","title":"max()","text":"

        max() returns the maximum value.

        Syntax: max(<expression>)

        • Result type: Same as the original argument.

        Example:

        nebula> MATCH (v:player) RETURN max(v.player.age);\n+-------------------+\n| max(v.player.age) |\n+-------------------+\n| 47                |\n+-------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/15.aggregating/#min","title":"min()","text":"

        min() returns the minimum value.

        Syntax: min(<expression>)

        • Result type: Same as the original argument.

        Example:

        nebula> MATCH (v:player) RETURN min(v.player.age);\n+-------------------+\n| min(v.player.age) |\n+-------------------+\n| 20                |\n+-------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/15.aggregating/#collect","title":"collect()","text":"

        collect() returns a list containing the values returned by an expression. Using this function aggregates data by merging multiple records or values into a single list.

        Syntax: collect(<expression>)

        • Result type: List

        Example:

        nebula> UNWIND [1, 2, 1] AS a \\\n        RETURN a;\n+---+\n| a |\n+---+\n| 1 |\n| 2 |\n| 1 |\n+---+\n\nnebula> UNWIND [1, 2, 1] AS a \\\n        RETURN collect(a);\n+------------+\n| collect(a) |\n+------------+\n| [1, 2, 1]  |\n+------------+\n\nnebula> UNWIND [1, 2, 1] AS a \\\n        RETURN a, collect(a), size(collect(a));\n+---+------------+------------------+\n| a | collect(a) | size(collect(a)) |\n+---+------------+------------------+\n| 2 | [2]        | 1                |\n| 1 | [1, 1]     | 2                |\n+---+------------+------------------+\n\n# The following examples sort the results in descending order, limit output rows to 3, and collect the output into a list.\nnebula> UNWIND [\"c\", \"b\", \"a\", \"d\" ] AS p \\\n        WITH p AS q \\\n        ORDER BY q DESC LIMIT 3 \\\n        RETURN collect(q);\n+-----------------+\n| collect(q)      |\n+-----------------+\n| [\"d\", \"c\", \"b\"] |\n+-----------------+\n\nnebula> WITH [1, 1, 2, 2] AS coll \\\n        UNWIND coll AS x \\\n        WITH DISTINCT x \\\n        RETURN collect(x) AS ss;\n+--------+\n| ss     |\n+--------+\n| [1, 2] |\n+--------+\n\nnebula> MATCH (n:player) \\\n        RETURN collect(n.player.age);\n+---------------------------------------------------------------+\n| collect(n.player.age)                                         |\n+---------------------------------------------------------------+\n| [32, 32, 34, 29, 41, 40, 33, 25, 40, 37, ...\n...\n\n# The following example aggregates all the players' names by their ages.\nnebula> MATCH (n:player) \\\n        RETURN n.player.age AS age, collect(n.player.name);\n+-----+--------------------------------------------------------------------------+\n| age | collect(n.player.name)                                                   |\n+-----+--------------------------------------------------------------------------+\n| 24  | [\"Giannis Antetokounmpo\"]                                                |\n| 20  | [\"Luka Doncic\"]                                                          |\n| 25  | [\"Joel Embiid\", \"Kyle Anderson\"]                                         |\n+-----+--------------------------------------------------------------------------+\n...\n\nnebula> GO FROM \"player100\" OVER serve \\\n        YIELD properties($$).name AS name \\\n        | GROUP BY $-.name \\\n        YIELD collect($-.name) AS name;\n+-----------+\n| name      |\n+-----------+\n| [\"Spurs\"] |\n+-----------+\n\nnebula> LOOKUP ON player \\\n        YIELD player.age As playerage \\\n        | GROUP BY $-.playerage \\\n        YIELD collect($-.playerage) AS playerage;\n+------------------+\n| playerage        |\n+------------------+\n| [22]             |\n| [47]             |\n| [43]             |\n| [25, 25]         |\n+------------------+\n...\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/15.aggregating/#std","title":"std()","text":"

        std() returns the population standard deviation.

        Syntax: std(<expression>)

        • Result type: Double

        Example:

        nebula> MATCH (v:player) RETURN std(v.player.age);\n+-------------------+\n| std(v.player.age) |\n+-------------------+\n| 6.423895701687502 |\n+-------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/15.aggregating/#sum","title":"sum()","text":"

        sum() returns the sum value.

        Syntax: sum(<expression>)

        • Result type: Same as the original argument.

        Example:

        nebula> MATCH (v:player) RETURN sum(v.player.age);\n+-------------------+\n| sum(v.player.age) |\n+-------------------+\n| 1698              |\n+-------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/15.aggregating/#aggregating_example","title":"Aggregating example","text":"
        nebula>  GO FROM \"player100\" OVER follow YIELD dst(edge) AS dst, properties($$).age AS age \\\n         | GROUP BY $-.dst \\\n         YIELD \\\n         $-.dst AS dst, \\\n         toInteger((sum($-.age)/count($-.age)))+avg(distinct $-.age+1)+1 AS statistics;\n+-------------+------------+\n| dst         | statistics |\n+-------------+------------+\n| \"player125\" | 84.0       |\n| \"player101\" | 74.0       |\n+-------------+------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/16.type-conversion/","title":"Type conversion functions","text":"

        This topic describes the type conversion functions supported by NebulaGraph.

        "},{"location":"3.ngql-guide/6.functions-and-expressions/16.type-conversion/#toboolean","title":"toBoolean()","text":"

        toBoolean() converts a string value to a boolean value.

        Syntax: toBoolean(<value>)

        • Result type: Bool

        Example:

        nebula> UNWIND [true, false, 'true', 'false', NULL] AS b \\\n        RETURN toBoolean(b) AS b;\n+----------+\n| b        |\n+----------+\n| true     |\n| false    |\n| true     |\n| false    |\n| __NULL__ |\n+----------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/16.type-conversion/#tofloat","title":"toFloat()","text":"

        toFloat() converts an integer or string value to a floating point number.

        Syntax: toFloat(<value>)

        • Result type: Float

        Example:

        nebula> RETURN toFloat(1), toFloat('1.3'), toFloat('1e3'), toFloat('not a number');\n+------------+----------------+----------------+-------------------------+\n| toFloat(1) | toFloat(\"1.3\") | toFloat(\"1e3\") | toFloat(\"not a number\") |\n+------------+----------------+----------------+-------------------------+\n| 1.0        | 1.3            | 1000.0         | __NULL__                |\n+------------+----------------+----------------+-------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/16.type-conversion/#tostring","title":"toString()","text":"

        toString() converts non-compound types of data, such as numbers, booleans, and so on, to strings.

        Syntax: toString(<value>)

        • Result type: String

        Example:

        nebula> RETURN toString(9669) AS int2str, toString(null) AS null2str;\n+---------+----------+\n| int2str | null2str |\n+---------+----------+\n| \"9669\"  | __NULL__ |\n+---------+----------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/16.type-conversion/#tointeger","title":"toInteger()","text":"

        toInteger() converts a floating point or string value to an integer value.

        Syntax: toInteger(<value>)

        • Result type: Int

        Example:

        nebula> RETURN toInteger(1), toInteger('1'), toInteger('1e3'), toInteger('not a number');\n+--------------+----------------+------------------+---------------------------+\n| toInteger(1) | toInteger(\"1\") | toInteger(\"1e3\") | toInteger(\"not a number\") |\n+--------------+----------------+------------------+---------------------------+\n| 1            | 1              | 1000             | __NULL__                  |\n+--------------+----------------+------------------+---------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/16.type-conversion/#toset","title":"toSet()","text":"

        toSet() converts a list or set value to a set value.

        Syntax: toSet(<value>)

        • Result type: Set

        Example:

        nebula> RETURN toSet(list[1,2,3,1,2]) AS list2set;\n+-----------+\n| list2set  |\n+-----------+\n| {3, 1, 2} |\n+-----------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/16.type-conversion/#hash","title":"hash()","text":"

        hash() returns the hash value of the argument. The argument can be a number, a string, a list, a boolean, null, or an expression that evaluates to a value of the preceding data types.

        The source code of the hash() function (MurmurHash2), seed (0xc70f6907UL), and other parameters can be found in MurmurHash2.h.

        For Java, the hash function operates as follows.

        MurmurHash2.hash64(\"to_be_hashed\".getBytes(),\"to_be_hashed\".getBytes().length, 0xc70f6907)\n

        Syntax: hash(<string>)

        • Result type: Int

        Example:

        nebula> RETURN hash(\"abcde\");\n+--------------------+\n| hash(\"abcde\")      |\n+--------------------+\n| 811036730794841393 |\n+--------------------+\nnebula> YIELD hash([1,2,3]);\n+----------------+\n| hash([1,2,3])  |\n+----------------+\n| 11093822460243 |\n+----------------+\nnebula> YIELD hash(NULL);\n+------------+\n| hash(NULL) |\n+------------+\n| -1         |\n+------------+\nnebula> YIELD hash(toLower(\"HELLO NEBULA\"));\n+-------------------------------+\n| hash(toLower(\"HELLO NEBULA\")) |\n+-------------------------------+\n| -8481157362655072082          |\n+-------------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/","title":"Built-in string functions","text":"

        This topic describes the built-in string functions supported by NebulaGraph.

        "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#precautions","title":"Precautions","text":"
        • A string type is used to store a sequence of characters (text). The literal constant is a sequence of characters of any length surrounded by double or single quotes.
        • Like SQL, the position index of nGQL starts from 1, while in C language it starts from 0.
        "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#strcasecmp","title":"strcasecmp()","text":"

        strcasecmp() compares string a and b without case sensitivity.

        Syntax: strcasecmp(<string_a>,<string_b>)

        • string_a, string_b: Strings to compare.
        • Result type: Int
        • When string_a = string_b, the return value is 0. When string_a > string_b, the return value is greater than 0. When string_a < string_b, the return value is less than 0.

        Example:

        nebula> RETURN strcasecmp(\"a\",\"aa\");\n+----------------------+\n| strcasecmp(\"a\",\"aa\") |\n+----------------------+\n| -97                  |\n+----------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#lower_and_tolower","title":"lower() and toLower()","text":"

        lower() and toLower() can both returns the argument in lowercase.

        Syntax: lower(<string>), toLower(<string>)

        • string: A specified string.
        • Result type: String

        Example:

        nebula> RETURN lower(\"Basketball_Player\");\n+----------------------------+\n| lower(\"Basketball_Player\") |\n+----------------------------+\n| \"basketball_player\"        |\n+----------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#upper_and_toupper","title":"upper() and toUpper()","text":"

        upper() and toUpper() can both returns the argument in uppercase.

        Syntax: upper(<string>), toUpper(<string>)

        • string: A specified string.
        • Result type: String

        Example:

        nebula> RETURN upper(\"Basketball_Player\");\n+----------------------------+\n| upper(\"Basketball_Player\") |\n+----------------------------+\n| \"BASKETBALL_PLAYER\"        |\n+----------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#length","title":"length()","text":"

        length() returns the length of the given string in bytes.

        Syntax: length({<string>|<path>})

        • string: A specified string.
        • path: A specified path represented by a variable.
        • Result type: Int

        Example:

        nebula> RETURN length(\"basketball\");\n+----------------------+\n| length(\"basketball\") |\n+----------------------+\n| 10                   |\n+----------------------+\n
        nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-->(v2) return length(p);\n+-----------+\n| length(p) |\n+-----------+\n| 1         |\n| 1         |\n| 1         |\n+-----------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#trim","title":"trim()","text":"

        trim() removes the spaces at the leading and trailing of the string.

        Syntax: trim(<string>)

        • string: A specified string.
        • Result type: String

        Example:

        nebula> RETURN trim(\" basketball player \");\n+-----------------------------+\n| trim(\" basketball player \") |\n+-----------------------------+\n| \"basketball player\"         |\n+-----------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#ltrim","title":"ltrim()","text":"

        ltrim() removes the spaces at the leading of the string.

        Syntax: ltrim(<string>)

        • string: A specified string.
        • Result type: String

        Example:

        nebula> RETURN ltrim(\" basketball player \");\n+------------------------------+\n| ltrim(\" basketball player \") |\n+------------------------------+\n| \"basketball player \"         |\n+------------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#rtrim","title":"rtrim()","text":"

        rtrim() removes the spaces at the trailing of the string.

        Syntax: rtrim(<string>)

        • string: A specified string.
        • Result type: String

        Example:

        nebula> RETURN rtrim(\" basketball player \");\n+------------------------------+\n| rtrim(\" basketball player \") |\n+------------------------------+\n| \" basketball player\"         |\n+------------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#left","title":"left()","text":"

        left() returns a substring consisting of several characters from the leading of a string.

        Syntax: left(<string>,<count>)

        • string: A specified string.
        • count: The number of characters from the leading of the string. If the string is shorter than count, the system returns the string itself.
        • Result type: String

        Example:

        nebula> RETURN left(\"basketball_player\",6);\n+-----------------------------+\n| left(\"basketball_player\",6) |\n+-----------------------------+\n| \"basket\"                    |\n+-----------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#right","title":"right()","text":"

        right() returns a substring consisting of several characters from the trailing of a string.

        Syntax: right(<string>,<count>)

        • string: A specified string.
        • count: The number of characters from the trailing of the string. If the string is shorter than count, the system returns the string itself.
        • Result type: String

        Example:

        nebula> RETURN right(\"basketball_player\",6);\n+------------------------------+\n| right(\"basketball_player\",6) |\n+------------------------------+\n| \"player\"                     |\n+------------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#lpad","title":"lpad()","text":"

        lpad() pads a specified string from the left-side to the specified length and returns the result string.

        Syntax: lpad(<string>,<count>,<letters>)

        • string: A specified string.
        • count: The length of the string after it has been left-padded. If the length is less than that of string, only the length of string characters from front to back will be returned.
        • letters: A string to be padding from the leading.
        • Result type: String

        Example:

        nebula> RETURN lpad(\"abcd\",10,\"b\");\n+---------------------+\n| lpad(\"abcd\",10,\"b\") |\n+---------------------+\n| \"bbbbbbabcd\"        |\n+---------------------+\nnebula> RETURN lpad(\"abcd\",3,\"b\");\n+--------------------+\n| lpad(\"abcd\",3,\"b\") |\n+--------------------+\n| \"abc\"              |\n+--------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#rpad","title":"rpad()","text":"

        rpad() pads a specified string from the right-side to the specified length and returns the result string.

        Syntax: rpad(<string>,<count>,<letters>)

        • string: A specified string.
        • count: The length of the string after it has been right-padded. If the length is less than that of string, only the length of string characters from front to back will be returned.
        • letters: A string to be padding from the trailing.
        • Result type: String

        Example:

        nebula> RETURN rpad(\"abcd\",10,\"b\");\n+---------------------+\n| rpad(\"abcd\",10,\"b\") |\n+---------------------+\n| \"abcdbbbbbb\"        |\n+---------------------+\nnebula> RETURN rpad(\"abcd\",3,\"b\");\n+--------------------+\n| rpad(\"abcd\",3,\"b\") |\n+--------------------+\n| \"abc\"              |\n+--------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#substr_and_substring","title":"substr() and substring()","text":"

        substr() and substring() return a substring extracting count characters starting from the specified position pos of a specified string.

        Syntax: substr(<string>,<pos>,<count>), substring(<string>,<pos>,<count>)

        • string: A specified string.
        • pos: The position of starting extract (character index). Data type is int.
        • count: The number of characters extracted from the start position onwards.
        • Result type: String
        "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#explanations_for_the_return_of_substr_and_substring","title":"Explanations for the return of substr() and substring()","text":"
        • If pos is 0, it extracts from the specified string leading (including the first character).
        • If pos is greater than the maximum string index, an empty string is returned.
        • If pos is a negative number, BAD_DATA is returned.
        • If count is omitted, the function returns the substring starting at the position given by pos and extending to the end of the string.
        • If count is 0, an empty string is returned.
        • Using NULL as any of the argument of substr() will cause an issue.

        OpenCypher compatibility

        In openCypher, if a is null, null is returned.

        Example:

        nebula> RETURN substr(\"abcdefg\",2,4);\n+-----------------------+\n| substr(\"abcdefg\",2,4) |\n+-----------------------+\n| \"cdef\"                |\n+-----------------------+\nnebula> RETURN substr(\"abcdefg\",0,4);\n+-----------------------+\n| substr(\"abcdefg\",0,4) |\n+-----------------------+\n| \"abcd\"                |\n+-----------------------+\nnebula> RETURN substr(\"abcdefg\",2);\n+---------------------+\n| substr(\"abcdefg\",2) |\n+---------------------+\n| \"cdefg\"             |\n+---------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#reverse","title":"reverse()","text":"

        reverse() returns a string in reverse order.

        Syntax: reverse(<string>)

        • string: A specified string.
        • Result type: String

        Example:

        nebula> RETURN reverse(\"abcdefg\");\n+--------------------+\n| reverse(\"abcdefg\") |\n+--------------------+\n| \"gfedcba\"          |\n+--------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#replace","title":"replace()","text":"

        replace() replaces string a in a specified string with string b.

        Syntax: replace(<string>,<substr_a>,<string_b>)

        • string: A specified string.
        • substr_a: String a.
        • string_b: String b.
        • Result type: String

        Example:

        nebula> RETURN replace(\"abcdefg\",\"cd\",\"AAAAA\");\n+---------------------------------+\n| replace(\"abcdefg\",\"cd\",\"AAAAA\") |\n+---------------------------------+\n| \"abAAAAAefg\"                    |\n+---------------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#split","title":"split()","text":"

        split() splits a specified string at string b and returns a list of strings.

        Syntax: split(<string>,<substr>)

        • string: A specified string.
        • substr: String b.
        • Result type: List

        Example:

        nebula> RETURN split(\"basketballplayer\",\"a\");\n+-------------------------------+\n| split(\"basketballplayer\",\"a\") |\n+-------------------------------+\n| [\"b\", \"sketb\", \"llpl\", \"yer\"] |\n+-------------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#concat","title":"concat()","text":"

        concat() returns strings concatenated by all strings.

        Syntax: concat(<string1>,<string2>,...)

        • The function requires at least two or more strings. If there is only one string, the string itself is returned.
        • If any one of the strings is NULL, NULL is returned.
        • Result type: String

        Example:

        //This example concatenates 1, 2, and 3.\nnebula> RETURN concat(\"1\",\"2\",\"3\") AS r;\n+-------+\n| r     |\n+-------+\n| \"123\" |\n+-------+\n\n//In this example, one of the string is NULL.\nnebula> RETURN concat(\"1\",\"2\",NULL) AS r;\n+----------+\n| r        |\n+----------+\n| __NULL__ |\n+----------+\n\nnebula> GO FROM \"player100\" over follow \\\n        YIELD concat(src(edge), properties($^).age, properties($$).name, properties(edge).degree) AS A;\n+------------------------------+\n| A                            |\n+------------------------------+\n| \"player10042Tony Parker95\"   |\n| \"player10042Manu Ginobili95\" |\n+------------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#concat_ws","title":"concat_ws()","text":"

        concat_ws() returns strings concatenated by all strings that are delimited with a separator.

        Syntax: concat_ws(<separator>,<string1>,<string2>,... )

        • The function requires at least two or more strings.
        • If the separator is NULL, the concat_ws() function returns NULL.
        • If the separator is not NULL and there is only one string, the string itself is returned.
        • If there is a NULL in the strings, NULL is ignored during the concatenation.

        Example:

        //This example concatenates a, b, and c with the separator +.\nnebula> RETURN concat_ws(\"+\",\"a\",\"b\",\"c\") AS r;\n+---------+\n| r       |\n+---------+\n| \"a+b+c\" |\n+---------+\n\n//In this example, the separator is NULL.\nneubla> RETURN concat_ws(NULL,\"a\",\"b\",\"c\") AS r;\n+----------+\n| r        |\n+----------+\n| __NULL__ |\n+----------+\n\n//In this example, the separator is + and there is a NULL in the strings.\nnebula> RETURN concat_ws(\"+\",\"a\",NULL,\"b\",\"c\") AS r;\n+---------+\n| r       |\n+---------+\n| \"a+b+c\" |\n+---------+\n\n//In this example, the separator is + and there is only one string.\nnebula> RETURN concat_ws(\"+\",\"a\") AS r;\n+-----+\n| r   |\n+-----+\n| \"a\" |\n+-----+\nnebula> GO FROM \"player100\" over follow \\\n        YIELD concat_ws(\" \",src(edge), properties($^).age, properties($$).name, properties(edge).degree) AS A;\n+---------------------------------+\n| A                               |\n+---------------------------------+\n| \"player100 42 Tony Parker 95\"   |\n| \"player100 42 Manu Ginobili 95\" |\n+---------------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#extract","title":"extract()","text":"

        extract() uses regular expression matching to retrieve a single substring or all substrings from a string.

        Syntax: extract(<string>,\"<regular_expression>\")

        • string: A specified string
        • regular_expression: A regular expression
        • Result type: List

        Example:

        nebula> MATCH (a:player)-[b:serve]-(c:team{name: \"Lakers\"}) \\\n        WHERE a.player.age > 45 \\\n        RETURN extract(a.player.name, \"\\\\w+\") AS result;\n+----------------------------+\n| result                     |\n+----------------------------+\n| [\"Shaquille\", \"O\", \"Neal\"] |\n+----------------------------+\n\nnebula> MATCH (a:player)-[b:serve]-(c:team{name: \"Lakers\"}) \\\n        WHERE a.player.age > 45 \\\n        RETURN extract(a.player.name, \"hello\") AS result;\n+--------+\n| result |\n+--------+\n| []     |\n+--------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#json_extract","title":"json_extract()","text":"

        json_extract() converts the specified JSON string to a map.

        Syntax: extract(<string>)

        • string:A specified string, must be JSON string.
        • Result type: Map

        Caution

        • Only Bool, Double, Int, String value and NULL are supported.
        • Only depth-1 nested Map is supported now. If nested Map depth is greater than 1, the nested item is left as an empty Map().

        Example:

        nebula> YIELD json_extract('{\"a\": 1, \"b\": {}, \"c\": {\"d\": true}}') AS result;\n+-----------------------------+\n| result                      |\n+-----------------------------+\n| {a: 1, b: {}, c: {d: true}} |\n+-----------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/3.date-and-time/","title":"Built-in date and time functions","text":"

        NebulaGraph supports the following built-in date and time functions:

        Function Description int now() Returns the current timestamp of the system. timestamp timestamp() Returns the current timestamp of the system. date date() Returns the current UTC date based on the current system. time time() Returns the current UTC time based on the current system. datetime datetime() Returns the current UTC date and time based on the current system. map duration() Returns the period of time. It can be used to calculate the specified time.

        For more information, see Date and time types.

        "},{"location":"3.ngql-guide/6.functions-and-expressions/3.date-and-time/#examples","title":"Examples","text":"
        nebula>  RETURN now(), timestamp(), date(), time(), datetime();\n+------------+-------------+------------+-----------------+----------------------------+\n| now()      | timestamp() | date()     | time()          | datetime()                 |\n+------------+-------------+------------+-----------------+----------------------------+\n| 1640057560 | 1640057560  | 2021-12-21 | 03:32:40.351000 | 2021-12-21T03:32:40.351000 |\n+------------+-------------+------------+-----------------+----------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/","title":"Schema-related functions","text":"

        This topic describes the schema-related functions supported by NebulaGraph. There are two types of schema-related functions, one for native nGQL statements and the other for openCypher-compatible statements.

        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#for_ngql_statements","title":"For nGQL statements","text":"

        The following functions are available in YIELD and WHERE clauses of nGQL statements.

        Note

        Since vertex, edge, vertices, edges, and path are keywords, you need to use AS <alias> to set the alias, such as GO FROM \"player100\" OVER follow YIELD edge AS e;.

        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#idvertex","title":"id(vertex)","text":"

        id(vertex) returns the ID of a vertex.

        Syntax: id(vertex)

        • Result type: Same as the vertex ID.

        Example:

        nebula> LOOKUP ON player WHERE player.age  > 45 YIELD id(vertex);\n+-------------+\n| id(VERTEX)  |\n+-------------+\n| \"player144\" |\n| \"player140\" |\n+-------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#propertiesvertex","title":"properties(vertex)","text":"

        properties(vertex) returns the properties of a vertex.

        Syntax: properties(vertex)

        • Result type: Map

        Example:

        nebula> LOOKUP ON player WHERE player.age  > 45 \\\n        YIELD properties(vertex);\n+-------------------------------------+\n| properties(VERTEX)                  |\n+-------------------------------------+\n| {age: 47, name: \"Shaquille O'Neal\"} |\n| {age: 46, name: \"Grant Hill\"}       |\n+-------------------------------------+\n

        You can also use the property reference symbols ($^ and $$) instead of the vertex field in the properties() function to get all properties of a vertex.

        • $^ represents the data of the starting vertex at the beginning of exploration. For example, in GO FROM \"player100\" OVER follow reversely YIELD properties($^), $^ refers to the vertex player100.
        • $$ represents the data of the end vertex at the end of exploration.

        properties($^) and properties($$) are generally used in GO statements. For more information, see Property reference.

        Caution

        You can use properties().<property_name> to get a specific property of a vertex. However, it is not recommended to use this method to obtain specific properties because the properties() function returns all properties, which can decrease query performance.

        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#propertiesedge","title":"properties(edge)","text":"

        properties(edge) returns the properties of an edge.

        Syntax: properties(edge)

        • Result type: Map

        Example:

        nebula> GO FROM \"player100\" OVER follow \\\n        YIELD properties(edge);\n+------------------+\n| properties(EDGE) |\n+------------------+\n| {degree: 95}     |\n| {degree: 95}     |\n+------------------+\n

        Caution

        You can use properties(edge).<property_name> to get a specific property of an edge. However, it is not recommended to use this method to obtain specific properties because the properties(edge) function returns all properties, which can decrease query performance.

        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#typeedge","title":"type(edge)","text":"

        type(edge) returns the edge type of an edge.

        Syntax: type(edge)

        • Result type: String

        Example:

        nebula> GO FROM \"player100\" OVER follow \\\n        YIELD src(edge), dst(edge), type(edge), rank(edge);\n+-------------+-------------+------------+------------+\n| src(EDGE)   | dst(EDGE)   | type(EDGE) | rank(EDGE) |\n+-------------+-------------+------------+------------+\n| \"player100\" | \"player101\" | \"follow\"   | 0          |\n| \"player100\" | \"player125\" | \"follow\"   | 0          |\n+-------------+-------------+------------+------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#srcedge","title":"src(edge)","text":"

        src(edge) returns the source vertex ID of an edge.

        Syntax: src(edge)

        • Result type: Same as the vertex ID.

        Example:

        nebula> GO FROM \"player100\" OVER follow \\\n        YIELD src(edge), dst(edge);\n+-------------+-------------+\n| src(EDGE)   | dst(EDGE)   |\n+-------------+-------------+\n| \"player100\" | \"player101\" |\n| \"player100\" | \"player125\" |\n+-------------+-------------+\n

        Note

        The semantics of the query for the starting vertex with src(edge) and properties($^) are different. src(edge) indicates the starting vertex ID of the edge in the graph database, while properties($^) indicates the data of the starting vertex where you start to expand the graph, such as the data of the starting vertex player100 in the above GO statement.

        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#dstedge","title":"dst(edge)","text":"

        dst(edge) returns the destination vertex ID of an edge.

        Syntax: dst(edge)

        • Result type: Same as the vertex ID.

        Example:

        nebula> GO FROM \"player100\" OVER follow \\\n        YIELD src(edge), dst(edge);\n+-------------+-------------+\n| src(EDGE)   | dst(EDGE)   |\n+-------------+-------------+\n| \"player100\" | \"player101\" |\n| \"player100\" | \"player125\" |\n+-------------+-------------+\n

        Note

        dst(edge) indicates the destination vertex ID of the edge in the graph database.

        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#rankedge","title":"rank(edge)","text":"

        rank(edge) returns the rank value of an edge.

        Syntax: rank(edge)

        • Result type: Int

        Example:

        nebula> GO FROM \"player100\" OVER follow \\\n        YIELD src(edge), dst(edge), rank(edge);\n+-------------+-------------+------------+\n| src(EDGE)   | dst(EDGE)   | rank(EDGE) |\n+-------------+-------------+------------+\n| \"player100\" | \"player101\" | 0          |\n| \"player100\" | \"player125\" | 0          |\n+-------------+-------------+------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#vertex","title":"vertex","text":"

        vertex returns the information of vertices, including VIDs, tags, properties, and values. You need to use AS <alias> to set the alias.

        Syntax: vertex

        Example:

        nebula> LOOKUP ON player WHERE player.age > 45 YIELD vertex AS v;\n+----------------------------------------------------------+\n| v                                                        |\n+----------------------------------------------------------+\n| (\"player144\" :player{age: 47, name: \"Shaquille O'Neal\"}) |\n| (\"player140\" :player{age: 46, name: \"Grant Hill\"})       |\n+----------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#edge","title":"edge","text":"

        edge returns the information of edges, including edge types, source vertices, destination vertices, ranks, properties, and values. You need to use AS <alias> to set the alias.

        Syntax: edge

        Example:

        nebula> GO FROM \"player100\" OVER follow YIELD edge AS e;\n+----------------------------------------------------+\n| e                                                  |\n+----------------------------------------------------+\n| [:follow \"player100\"->\"player101\" @0 {degree: 95}] |\n| [:follow \"player100\"->\"player125\" @0 {degree: 95}] |\n+----------------------------------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#vertices","title":"vertices","text":"

        vertices returns the information of vertices in a subgraph. For more information, see GET SUBGRAPH.

        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#edges","title":"edges","text":"

        edges returns the information of edges in a subgraph. For more information, see GET SUBGRAPH.

        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#path","title":"path","text":"

        path returns the information of a path. For more information, see FIND PATH.

        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#for_statements_compatible_with_opencypher","title":"For statements compatible with openCypher","text":"

        The following functions are available in RETURN and WHERE clauses of openCypher-compatible statements.

        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#id","title":"id()","text":"

        id() returns the ID of a vertex.

        Syntax: id(<vertex>)

        • Result type: Same as the vertex ID.

        Example:

        nebula> MATCH (v:player) RETURN id(v); \n+-------------+\n| id(v)       |\n+-------------+\n| \"player129\" |\n| \"player115\" |\n| \"player106\" |\n| \"player102\" |\n...\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#tags_and_labels","title":"tags() and labels()","text":"

        tags() and labels() return the Tag of a vertex.

        Syntax: tags(<vertex>), labels(<vertex>)

        • Result type: List

        Example:

        nebula> MATCH (v) WHERE id(v) == \"player100\" \\\n        RETURN tags(v);\n+------------+\n| tags(v)    |\n+------------+\n| [\"player\"] |\n+------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#properties","title":"properties()","text":"

        properties() returns the properties of a vertex or an edge.

        Syntax: properties(<vertex_or_edge>)

        • Result type: Map

        Example:

        nebula> MATCH (v:player)-[e:follow]-() RETURN properties(v),properties(e);\n+---------------------------------------+---------------+\n| properties(v)                         | properties(e) |\n+---------------------------------------+---------------+\n| {age: 31, name: \"Stephen Curry\"}      | {degree: 90}  |\n| {age: 47, name: \"Shaquille O'Neal\"}   | {degree: 100} |\n| {age: 34, name: \"LeBron James\"}       | {degree: 13}  |\n...\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#type","title":"type()","text":"

        type() returns the edge type of an edge.

        Syntax: type(<edge>)

        • Result type: String

        Example:

        nebula> MATCH (v:player{name:\"Tim Duncan\"})-[e]->() \\\n        RETURN type(e);\n+----------+\n| type(e)  |\n+----------+\n| \"serve\"  |\n| \"follow\" |\n| \"follow\" |\n+----------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#typeid","title":"typeid()","text":"

        typeid() returns the internal ID value of the Edge type of the edge, which can be used to determine the direction by positive or negative.

        Syntax: typeid(<edge>)

        • Result type: Int

        Example:

        nebula> MATCH (v:player)-[e:follow]-(v2) RETURN e,typeid(e), \\\n        CASE WHEN typeid(e) > 0 \\\n        THEN \"Forward\" ELSE \"Reverse\" END AS direction \\\n        LIMIT 5;\n+----------------------------------------------------+-----------+-----------+\n| e                                                  | typeid(e) | direction |\n+----------------------------------------------------+-----------+-----------+\n| [:follow \"player127\"->\"player114\" @0 {degree: 90}] | 5         | \"Forward\" |\n| [:follow \"player127\"->\"player148\" @0 {degree: 70}] | 5         | \"Forward\" |\n| [:follow \"player148\"->\"player127\" @0 {degree: 80}] | -5        | \"Reverse\" |\n| [:follow \"player147\"->\"player136\" @0 {degree: 90}] | 5         | \"Forward\" |\n| [:follow \"player136\"->\"player147\" @0 {degree: 90}] | -5        | \"Reverse\" |\n+----------------------------------------------------+-----------+-----------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#src","title":"src()","text":"

        src() returns the source vertex ID of an edge.

        Syntax: src(<edge>)

        • Result type: Same as the vertex ID.

        Example:

        nebula> MATCH ()-[e]->(v:player{name:\"Tim Duncan\"}) \\\n        RETURN src(e);\n+-------------+\n| src(e)      |\n+-------------+\n| \"player125\" |\n| \"player113\" |\n| \"player102\" |\n...\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#dst","title":"dst()","text":"

        dst() returns the destination vertex ID of an edge.

        Syntax: dst(<edge>)

        • Result type: Same as the vertex ID.

        Example:

        nebula> MATCH (v:player{name:\"Tim Duncan\"})-[e]->() \\\n        RETURN dst(e);\n+-------------+\n| dst(e)      |\n+-------------+\n| \"team204\"   |\n| \"player101\" |\n| \"player125\" |\n+-------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#startnode","title":"startNode()","text":"

        startNode() visits a path and returns its information of source vertex ID, including VIDs, tags, properties, and values.

        Syntax: startNode(<path>)

        Example:

        nebula> MATCH p = (a :player {name : \"Tim Duncan\"})-[r:serve]-(t) \\\n        RETURN startNode(p);\n+----------------------------------------------------+\n| startNode(p)                                       |\n+----------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) |\n+----------------------------------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#endnode","title":"endNode()","text":"

        endNode() visits a path and returns its information of destination vertex ID, including VIDs, tags, properties, and values.

        Syntax: endNode(<path>)

        Example:

        nebula> MATCH p = (a :player {name : \"Tim Duncan\"})-[r:serve]-(t) \\\n        RETURN endNode(p);\n+----------------------------------+\n| endNode(p)                       |\n+----------------------------------+\n| (\"team204\" :team{name: \"Spurs\"}) |\n+----------------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#rank","title":"rank()","text":"

        rank() returns the rank value of an edge.

        Syntax: rank(<edge>)

        • Result type: Int

        Example:

        nebula> MATCH (v:player{name:\"Tim Duncan\"})-[e]->() \\\n        RETURN rank(e);\n+---------+\n| rank(e) |\n+---------+\n| 0       |\n| 0       |\n| 0       |\n+---------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/5.conditional-expressions/","title":"Conditional expressions","text":"

        This topic describes the conditional functions supported by NebulaGraph.

        "},{"location":"3.ngql-guide/6.functions-and-expressions/5.conditional-expressions/#case","title":"CASE","text":"

        The CASE expression uses conditions to filter the parameters. nGQL provides two forms of CASE expressions just like openCypher: the simple form and the generic form.

        The CASE expression will traverse all the conditions. When the first condition is met, the CASE expression stops reading the conditions and returns the result. If no conditions are met, it returns the result in the ELSE clause. If there is no ELSE clause and no conditions are met, it returns NULL.

        "},{"location":"3.ngql-guide/6.functions-and-expressions/5.conditional-expressions/#the_simple_form_of_case_expressions","title":"The simple form of CASE expressions","text":"
        • Syntax
        CASE <comparer>\nWHEN <value> THEN <result>\n[WHEN ...]\n[ELSE <default>]\nEND\n

        Caution

        Always remember to end the CASE expression with an END.

        Parameter Description comparer A value or a valid expression that outputs a value. This value is used to compare with the value. value It will be compared with the comparer. If the value matches the comparer, then this condition is met. result The result is returned by the CASE expression if the value matches the comparer. default The default is returned by the CASE expression if no conditions are met.
        • Examples
        nebula> RETURN \\\n        CASE 2+3 \\\n        WHEN 4 THEN 0 \\\n        WHEN 5 THEN 1 \\\n        ELSE -1 \\\n        END \\\n        AS result;\n+--------+\n| result |\n+--------+\n| 1      |\n+--------+\n
        nebula> GO FROM \"player100\" OVER follow \\\n        YIELD properties($$).name AS Name, \\\n        CASE properties($$).age > 35 \\\n        WHEN true THEN \"Yes\" \\\n        WHEN false THEN \"No\" \\\n        ELSE \"Nah\" \\\n        END \\\n        AS Age_above_35;\n+-----------------+--------------+\n| Name            | Age_above_35 |\n+-----------------+--------------+\n| \"Tony Parker\"   | \"Yes\"        |\n| \"Manu Ginobili\" | \"Yes\"        |\n+-----------------+--------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/5.conditional-expressions/#the_generic_form_of_case_expressions","title":"The generic form of CASE expressions","text":"
        • Syntax
        CASE\nWHEN <condition> THEN <result>\n[WHEN ...]\n[ELSE <default>]\nEND\n
        Parameter Description condition If the condition is evaluated as true, the result is returned by the CASE expression. result The result is returned by the CASE expression if the condition is evaluated as true. default The default is returned by the CASE expression if no conditions are met.
        • Examples
        nebula> YIELD \\\n        CASE WHEN 4 > 5 THEN 0 \\\n        WHEN 3+4==7 THEN 1 \\\n        ELSE 2 \\\n        END \\\n        AS result;\n+--------+\n| result |\n+--------+\n| 1      |\n+--------+\n
        nebula> MATCH (v:player) WHERE v.player.age > 30 \\\n        RETURN v.player.name AS Name,  \\\n        CASE \\\n        WHEN v.player.name STARTS WITH \"T\" THEN \"Yes\" \\\n        ELSE \"No\" \\\n        END \\\n        AS Starts_with_T;\n+---------------------+---------------+\n| Name                | Starts_with_T |\n+---------------------+---------------+\n| \"Tim Duncan\"        | \"Yes\"         |\n| \"LaMarcus Aldridge\" | \"No\"          |\n| \"Tony Parker\"       | \"Yes\"         |\n+---------------------+---------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/5.conditional-expressions/#differences_between_the_simple_form_and_the_generic_form","title":"Differences between the simple form and the generic form","text":"

        To avoid the misuse of the simple form and the generic form, it is important to understand their differences. The following example can help explain them.

        nebula> GO FROM \"player100\" OVER follow \\\n        YIELD properties($$).name AS Name, properties($$).age AS Age, \\\n        CASE properties($$).age \\\n        WHEN properties($$).age > 35 THEN \"Yes\" \\\n        ELSE \"No\" \\\n        END \\\n        AS Age_above_35;\n+-----------------+-----+--------------+\n| Name            | Age | Age_above_35 |\n+-----------------+-----+--------------+\n| \"Tony Parker\"   | 36  | \"No\"         |\n| \"Manu Ginobili\" | 41  | \"No\"         |\n+-----------------+-----+--------------+\n

        The preceding GO query is intended to output Yes when the player's age is above 35. However, in this example, when the player's age is 36, the actual output is not as expected: It is No instead of Yes.

        This is because the query uses the CASE expression in the simple form, and a comparison between the values of $$.player.age and $$.player.age > 35 is made. When the player age is 36:

        • The value of $$.player.age is 36. It is an integer.
        • $$.player.age > 35 is evaluated to be true. It is a boolean.

        The values of $$.player.age and $$.player.age > 35 do not match. Therefore, the condition is not met and No is returned.

        "},{"location":"3.ngql-guide/6.functions-and-expressions/5.conditional-expressions/#coalesce","title":"coalesce()","text":"

        coalesce() returns the first not null value in all expressions.

        Syntax: coalesce(<expression_1>[,<expression_2>...])

        • Result type: Same as the original element.

        Example:

        nebula> RETURN coalesce(null,[1,2,3]) as result;\n+-----------+\n| result    |\n+-----------+\n| [1, 2, 3] |\n+-----------+\nnebula> RETURN coalesce(null) as result;\n+----------+\n| result   |\n+----------+\n| __NULL__ |\n+----------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/","title":"List functions","text":"

        This topic describes the list functions supported by NebulaGraph. Some of the functions have different syntax in native nGQL statements and openCypher-compatible statements.

        "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#precautions","title":"Precautions","text":"

        Like SQL, the position index in nGQL starts from 1, while in the C language it starts from 0.

        "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#general","title":"General","text":""},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#range","title":"range()","text":"

        range() returns the list containing all the fixed-length steps in [start,end].

        Syntax: range(start, end [, step])

        • step: Optional parameters. step is 1 by default.
        • Result type: List

        Example:

        nebula> RETURN range(1,9,2);\n+-----------------+\n| range(1,9,2)    |\n+-----------------+\n| [1, 3, 5, 7, 9] |\n+-----------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#reverse","title":"reverse()","text":"

        reverse() returns the list reversing the order of all elements in the original list.

        Syntax: reverse(<list>)

        • Result type: List

        Example:

        nebula> WITH [NULL, 4923, 'abc', 521, 487] AS ids \\\n        RETURN reverse(ids);\n+-----------------------------------+\n| reverse(ids)                      |\n+-----------------------------------+\n| [487, 521, \"abc\", 4923, __NULL__] |\n+-----------------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#tail","title":"tail()","text":"

        tail() returns all the elements of the original list, excluding the first one.

        Syntax: tail(<list>)

        • Result type: List

        Example:

        nebula> WITH [NULL, 4923, 'abc', 521, 487] AS ids \\\n        RETURN tail(ids);\n+-------------------------+\n| tail(ids)               |\n+-------------------------+\n| [4923, \"abc\", 521, 487] |\n+-------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#head","title":"head()","text":"

        head() returns the first element of a list.

        Syntax: head(<list>)

        • Result type: Same as the element in the original list.

        Example:

        nebula> WITH [NULL, 4923, 'abc', 521, 487] AS ids \\\n        RETURN head(ids);\n+-----------+\n| head(ids) |\n+-----------+\n| __NULL__  |\n+-----------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#last","title":"last()","text":"

        last() returns the last element of a list.

        Syntax: last(<list>)

        • Result type: Same as the element in the original list.

        Example:

        nebula> WITH [NULL, 4923, 'abc', 521, 487] AS ids \\\n        RETURN last(ids);\n+-----------+\n| last(ids) |\n+-----------+\n| 487       |\n+-----------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#reduce","title":"reduce()","text":"

        reduce() applies an expression to each element in a list one by one, chains the result to the next iteration by taking it as the initial value, and returns the final result. This function iterates each element e in the given list, runs the expression on e, accumulates the result with the initial value, and store the new result in the accumulator as the initial value of the next iteration. It works like the fold or reduce method in functional languages such as Lisp and Scala.

        openCypher compatibility

        In openCypher, the reduce() function is not defined. nGQL will implement the reduce() function in the Cypher way.

        Syntax: reduce(<accumulator> = <initial>, <variable> IN <list> | <expression>)

        • accumulator: A variable that will hold the accumulated results as the list is iterated.
        • initial: An expression that runs once to give an initial value to the accumulator.
        • variable: A variable in the list that will be applied to the expression successively.
        • list: A list or a list of expressions.
        • expression: This expression will be run on each element in the list once and store the result value in the accumulator.
        • Result type: Depends on the parameters provided, along with the semantics of the expression.

        Example:

        nebula> RETURN reduce(totalNum = -4 * 5, n IN [1, 2] | totalNum + n * 2) AS r;\n+-----+\n| r   |\n+-----+\n| -14 |\n+-----+\n\nnebula> MATCH p = (n:player{name:\"LeBron James\"})<-[:follow]-(m) \\\n        RETURN  nodes(p)[0].player.age AS src1,  nodes(p)[1].player.age AS dst2,  \\\n        reduce(totalAge = 100, n IN nodes(p) | totalAge + n.player.age) AS sum;\n+------+------+-----+\n| src1 | dst2 | sum |\n+------+------+-----+\n| 34   | 31   | 165 |\n| 34   | 29   | 163 |\n| 34   | 33   | 167 |\n| 34   | 26   | 160 |\n| 34   | 34   | 168 |\n| 34   | 37   | 171 |\n+------+------+-----+\n\nnebula> LOOKUP ON player WHERE player.name == \"Tony Parker\" YIELD id(vertex) AS VertexID \\\n        |  GO FROM $-.VertexID over follow \\\n        WHERE properties(edge).degree != reduce(totalNum = 5, n IN range(1, 3) | properties($$).age + totalNum + n) \\\n        YIELD properties($$).name AS id, properties($$).age AS age, properties(edge).degree AS degree;\n+---------------------+-----+--------+\n| id                  | age | degree |\n+---------------------+-----+--------+\n| \"Tim Duncan\"        | 42  | 95     |\n| \"LaMarcus Aldridge\" | 33  | 90     |\n| \"Manu Ginobili\"     | 41  | 95     |\n+---------------------+-----+--------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#for_ngql_statements","title":"For nGQL statements","text":""},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#keys","title":"keys()","text":"

        keys() returns a list containing the string representations for all the property names of vertices or edges.

        Syntax: keys({vertex | edge})

        • Result type: List

        Example:

        nebula> LOOKUP ON player \\\n        WHERE player.age  > 45 \\\n        YIELD keys(vertex);\n+-----------------+\n| keys(VERTEX)    |\n+-----------------+\n| [\"age\", \"name\"] |\n| [\"age\", \"name\"] |\n+-----------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#labels","title":"labels()","text":"

        labels() returns the list containing all the tags of a vertex.

        Syntax: labels(verte)

        • Result type: List

        Example:

        nebula> FETCH PROP ON * \"player101\", \"player102\", \"team204\" \\\n        YIELD labels(vertex);\n+----------------+\n| labels(VERTEX) |\n+----------------+\n| [\"player\"]     |\n| [\"player\"]     |\n| [\"team\"]       |\n+----------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#for_statements_compatible_with_opencypher","title":"For statements compatible with openCypher","text":""},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#keys_1","title":"keys()","text":"

        keys() returns a list containing the string representations for all the property names of vertices, edges, or maps.

        Syntax: keys(<vertex_or_edge>)

        • Result type: List

        Example:

        nebula> MATCH (v:player{name:\"Tim Duncan\"})-[e]->() \\\n        RETURN keys(e);\n+----------------------------+\n| keys(e)                    |\n+----------------------------+\n| [\"end_year\", \"start_year\"] |\n| [\"degree\"]                 |\n| [\"degree\"]                 |\n+----------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#labels_1","title":"labels()","text":"

        labels() returns the list containing all the tags of a vertex.

        Syntax: labels(<vertex>)

        • Result type: List

        Example:

        nebula> MATCH (v)-[e:serve]->() \\\n        WHERE id(v)==\"player100\" \\\n        RETURN labels(v);\n+------------+\n| labels(v)  |\n+------------+\n| [\"player\"] |\n+------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#nodes","title":"nodes()","text":"

        nodes() returns the list containing all the vertices in a path.

        Syntax: nodes(<path>)

        • Result type: List

        Example:

        nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-->(v2) \\\n        RETURN nodes(p);\n+-------------------------------------------------------------------------------------------------------------+\n| nodes(p)                                                                                                    |\n+-------------------------------------------------------------------------------------------------------------+\n| [(\"player100\" :player{age: 42, name: \"Tim Duncan\"}), (\"team204\" :team{name: \"Spurs\"})]                      |\n| [(\"player100\" :player{age: 42, name: \"Tim Duncan\"}), (\"player101\" :player{age: 36, name: \"Tony Parker\"})]   |\n| [(\"player100\" :player{age: 42, name: \"Tim Duncan\"}), (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})] |\n+-------------------------------------------------------------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#relationships","title":"relationships()","text":"

        relationships() returns the list containing all the relationships in a path.

        Syntax: relationships(<path>)

        • Result type: List

        Example:

        nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-->(v2) \\\n        RETURN relationships(p);\n+-------------------------------------------------------------------------+\n| relationships(p)                                                        |\n+-------------------------------------------------------------------------+\n| [[:serve \"player100\"->\"team204\" @0 {end_year: 2016, start_year: 1997}]] |\n| [[:follow \"player100\"->\"player101\" @0 {degree: 95}]]                    |\n| [[:follow \"player100\"->\"player125\" @0 {degree: 95}]]                    |\n+-------------------------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/8.predicate/","title":"Predicate functions","text":"

        Predicate functions return true or false. They are most commonly used in WHERE clauses.

        NebulaGraph supports the following predicate functions:

        Functions Description exists() Returns true if the specified property exists in the vertex, edge or map. Otherwise, returns false. any() Returns true if the specified predicate holds for at least one element in the given list. Otherwise, returns false. all() Returns true if the specified predicate holds for all elements in the given list. Otherwise, returns false. none() Returns true if the specified predicate holds for no element in the given list. Otherwise, returns false. single() Returns true if the specified predicate holds for exactly one of the elements in the given list. Otherwise, returns false.

        Note

        NULL is returned if the list is NULL or all of its elements are NULL.

        Compatibility

        In openCypher, only function exists() is defined and specified. The other functions are implement-dependent.

        "},{"location":"3.ngql-guide/6.functions-and-expressions/8.predicate/#syntax","title":"Syntax","text":"
        <predicate>(<variable> IN <list> WHERE <condition>)\n
        "},{"location":"3.ngql-guide/6.functions-and-expressions/8.predicate/#examples","title":"Examples","text":"
        nebula> RETURN any(n IN [1, 2, 3, 4, 5, NULL] \\\n        WHERE n > 2) AS r;\n+------+\n| r    |\n+------+\n| true |\n+------+\n\nnebula> RETURN single(n IN range(1, 5) \\\n        WHERE n == 3) AS r;\n+------+\n| r    |\n+------+\n| true |\n+------+\n\nnebula> RETURN none(n IN range(1, 3) \\\n        WHERE n == 0) AS r;\n+------+\n| r    |\n+------+\n| true |\n+------+\n\nnebula> WITH [1, 2, 3, 4, 5, NULL] AS a \\\n        RETURN any(n IN a WHERE n > 2);\n+-------------------------+\n| any(n IN a WHERE (n>2)) |\n+-------------------------+\n| true                    |\n+-------------------------+\n\nnebula> MATCH p = (n:player{name:\"LeBron James\"})<-[:follow]-(m) \\\n        RETURN nodes(p)[0].player.name AS n1, nodes(p)[1].player.name AS n2, \\\n        all(n IN nodes(p) WHERE n.player.name NOT STARTS WITH \"D\") AS b;\n+----------------+-------------------+-------+\n| n1             | n2                | b     |\n+----------------+-------------------+-------+\n| \"LeBron James\" | \"Danny Green\"     | false |\n| \"LeBron James\" | \"Dejounte Murray\" | false |\n| \"LeBron James\" | \"Chris Paul\"      | true  |\n| \"LeBron James\" | \"Kyrie Irving\"    | true  |\n| \"LeBron James\" | \"Carmelo Anthony\" | true  |\n| \"LeBron James\" | \"Dwyane Wade\"     | false |\n+----------------+-------------------+-------+\n\nnebula> MATCH p = (n:player{name:\"LeBron James\"})-[:follow]->(m) \\\n        RETURN single(n IN nodes(p) WHERE n.player.age > 40) AS b;\n+------+\n| b    |\n+------+\n| true |\n+------+\n\nnebula> MATCH (n:player) \\\n        RETURN exists(n.player.id), n IS NOT NULL;\n+---------------------+---------------+\n| exists(n.player.id) | n IS NOT NULL |\n+---------------------+---------------+\n| false               | true          |\n...\n\nnebula> MATCH (n:player) \\\n        WHERE exists(n['name']) RETURN n;\n+-------------------------------------------------------------------------------------------------------------+\n| n                                                                                                           |\n+-------------------------------------------------------------------------------------------------------------+\n| (\"Grant Hill\" :player{age: 46, name: \"Grant Hill\"})                                                         |\n| (\"Marc Gasol\" :player{age: 34, name: \"Marc Gasol\"})                                                         |\n+-------------------------------------------------------------------------------------------------------------+\n...\n
        "},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/","title":"Overview of NebulaGraph general query statements","text":"

        This topic provides an overview of the general categories of query statements in NebulaGraph and outlines their use cases.

        "},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#background","title":"Background","text":"

        NebulaGraph stores data in the form of vertices and edges. Each vertex can have zero or more tags and each edge has exactly one edge type. Tags define the type of a vertex and describe its properties, while edge types define the type of an edge and describe its properties. When querying, you can limit the scope of the query by specifying the tag of a vertex or the type of an edge. For more information, see Patterns.

        "},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#categories","title":"Categories","text":"

        The primary query statements in NebulaGraph fall into the following categories:

        • FETCH PROP ON
        • LOOKUP ON
        • GO
        • MATCH
        • FIND PATH
        • GET SUBGRAPH
        • SHOW

        FETCH PROP ON and LOOKUP ON statements are primarily for basic data queries, GO and MATCH for more intricate queries and graph traversals, FIND PATH and GET SUBGRAPH for path and subgraph queries, and SHOW for retrieving database metadata.

        "},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#usage_and_use_cases","title":"Usage and use cases","text":""},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#fetch_prop_on","title":"FETCH PROP ON","text":"

        Usage: Retrieve properties of a specified vertex or edge.

        Use case: Knowing the specific vertex or edge ID and wanting to retrieve its properties.

        Note:

        • Must specify the ID of the vertex or edge.
        • Must specify the tag of the vertex or the edge type of the edge.
        • Must use the YIELD clause to specify the returned properties.

        Example:

        FETCH PROP ON player \"player100\" YIELD properties(vertex);\n              --+---  ----+-----       -------+----------\n                |         |                   |\n                |         |                   |\n                |         |                   +--------- Returns all properties under the player tag of the vertex.\n                |         |\n                |         +----------------- Retrieves from the vertex \"player100\".\n                |\n                +--------------------------- Retrieves properties under the player tag.\n

        For more information, see FETCH PROP ON.

        "},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#lookup_on","title":"LOOKUP ON","text":"

        Usage: Index-based querying of vertex or edge IDs.

        Use case: Finding vertex or edge IDs based on property values.

        Note: - Must pre-define indexes for the tag, edge type, or property. - Must specify the tag of the vertex or the edge type of the edge. - Must use the YIELD clause to specify the returned IDs.

        Example:

        LOOKUP ON player WHERE player.name == \"Tony Parker\" YIELD id(vertex);\n          --+--- ------------------+---------------       ---+------\n            |                      |                         |\n            |                      |                         |\n            |                      |                         +---- Returns the VID of the retrieved vertex.\n            |                      |\n            |                      +------------ Filtering is based on the value of the property name.\n            |\n            +----------------------------------- Queries based on the player tag.\n

        For more information, see LOOKUP ON.

        "},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#go","title":"GO","text":"

        Usage: Traverse the graph based on a given vertex and return information about the starting vertex, edges, or target vertices as needed. Use case: Complex graph traversals, such as finding friends of a vertex, friends' friends, etc.

        Note: - Use property reference symbols ($^ and $$) to return properties of the starting or target vertices, e.g., YIELD $^.player.name. - Use the functions properties($^) and properties($$) to return all properties of the starting or target vertices. Specify property names in the function to return specific properties, e.g., YIELD properties($^).name. - Use the functions src(edge) and dst(edge) to return the starting or destination vertex ID of an edge, e.g., YIELD src(edge).

        Example:

        GO 3 STEPS FROM \"player102\" OVER follow YIELD dst(edge);\n-----+---       --+-------       -+----       ---+-----\n     |            |               |              |\n     |            |               |              |\n     |            |               |              +--------- Returns the destination vertex of the last hop.\n     |            |               |\n     |            |               +------ Traverses out via the edge follow.\n     |            |\n     |            +--------------------- Starts from \"player102\".\n     |\n     +---------------------------------- Traverses 3 steps.\n

        For more information, see GO.

        "},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#match","title":"MATCH","text":"

        Usage: Execute complex graph pattern matching queries.

        Use case: Complex graph pattern matching, such as finding combinations of vertices and edges that satisfy a specific pattern.

        Note:

        MATCH statements are compatible with the OpenCypher syntax but with some differences:

        • Use == for equality instead of =, e.g., WHERE player.name == \"Tony Parker\".
        • When referencing properties of vertices, you need to specify the vertex's tag, e.g., YIELD player.name.
        • Introduces the WHERE id(v) == \"player100\" syntax.
        • Must use the RETURN clause to specify what information to return.

        Example:

        MATCH (v:player{name:\"Tim Duncan\"})-->(v2:player) \\\n        RETURN v2.player.name AS Name;\n

        For more information, see MATCH.

        "},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#find_path","title":"FIND PATH","text":"

        Usage: Query paths between given starting and target vertices or query properties of vertices and edges along paths.

        Use case: Querying paths between two vertices.

        Note: Must use the YIELD clause to specify returned information.

        Example:

        FIND SHORTEST PATH FROM \"player102\" TO \"team204\" OVER * YIELD path AS p;\n-------+-----           -------+---------------- ---+--       ----+----\n       |                       |                    |             |\n       |                       |                    |             |\n       |                       |                    |             +---------- Returns the path as 'p'.\n       |                       |                    |\n       |                       |                    +----------- Travels outwards via all types of edges.\n       |                       |    \n       |                       |\n       |                       +------------------ From the given starting and target VIDs.  \n       |\n       +--------------------------- Retrieves the shortest path.\n

        For more information, see FIND PATH.

        "},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#get_subgraph","title":"GET SUBGRAPH","text":"

        Usage: Extract a portion of the graph that satisfies specific conditions or query properties of vertices and edges in the subgraph.

        Use case: Analyzing structures of the graph or specific regions, such as extracting the social network subgraph of a person or the transportation network subgraph of an area.

        Note: Must use the YIELD clause to specify returned information.

        Example:

        GET SUBGRAPH 5 STEPS FROM \"player101\" YIELD VERTICES AS nodes, EDGES AS relationships;\n             -----+- -----+--------         ------------------------+----------------\n                  |       |                                         |\n                  |       |                                         |\n                  |       +------- Starts from \"player101\".         +------------ Returns all vertices and edges.\n                  |\n                  +----------------- Gets exploration of 5 steps     \n

        For more information, see GET SUBGRAPH.

        "},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#show","title":"SHOW","text":"

        SHOW statements are mainly used to obtain metadata information from the database, not for retrieving the actual data stored in the database. These statements are typically used to query the structure and configuration of the database.

        Statement Syntax Example Description SHOW CHARSET SHOW CHARSET SHOW CHARSET Shows the available character sets. SHOW COLLATION SHOW COLLATION SHOW COLLATION Shows the collations supported by NebulaGraph. SHOW CREATE SPACE SHOW CREATE SPACE <space_name> SHOW CREATE SPACE basketballplayer Shows the creating statement of the specified graph space. SHOW CREATE TAG/EDGE SHOW CREATE {TAG <tag_name> | EDGE <edge_name>} SHOW CREATE TAG player Shows the basic information of the specified tag. SHOW HOSTS SHOW HOSTS [GRAPH | STORAGE | META] SHOW HOSTSSHOW HOSTS GRAPH Shows the host and version information of Graph Service, Storage Service, and Meta Service. SHOW INDEX STATUS SHOW {TAG | EDGE} INDEX STATUS SHOW TAG INDEX STATUS Shows the status of jobs that rebuild native indexes, which helps check whether a native index is successfully rebuilt or not. SHOW INDEXES SHOW {TAG | EDGE} INDEXES SHOW TAG INDEXES Shows the names of existing native indexes. SHOW PARTS SHOW PARTS [<part_id>] SHOW PARTS Shows the information of a specified partition or all partitions in a graph space. SHOW ROLES SHOW ROLES IN <space_name> SHOW ROLES in basketballplayer Shows the roles that are assigned to a user account. SHOW SNAPSHOTS SHOW SNAPSHOTS SHOW SNAPSHOTS Shows the information of all the snapshots. SHOW SPACES SHOW SPACES SHOW SPACES Shows existing graph spaces in NebulaGraph. SHOW STATS SHOW STATS SHOW STATS Shows the statistics of the graph space collected by the latest STATS job. SHOW TAGS/EDGES SHOW TAGS | EDGES SHOW TAGS,SHOW EDGES Shows all the tags in the current graph space. SHOW USERS SHOW USERS SHOW USERS Shows the user information. SHOW SESSIONS SHOW SESSIONS SHOW SESSIONS Shows the information of all the sessions. SHOW SESSIONS SHOW SESSION <Session_Id> SHOW SESSION 1623304491050858 Shows a specified session with its ID. SHOW QUERIES SHOW [ALL] QUERIES SHOW QUERIES Shows the information of working queries in the current session. SHOW META LEADER SHOW META LEADER SHOW META LEADER Shows the information of the leader in the current Meta cluster."},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#compound_queries","title":"Compound queries","text":"

        Query statements in NebulaGraph can be combined to achieve more complex queries.

        When referencing the results of a subquery in a compound statement, you need to create an alias for the result and use the pipe symbol(|) to pass it to the next subquery. Use $- in the next subquery to reference the alias of that result. See Pipe Symbol for details.

        Example:

        nebula> GO FROM \"player100\" OVER follow \\\n        YIELD dst(edge) AS dstid, properties($$).name AS Name | \\\n        GO FROM $-.dstid OVER follow YIELD dst(edge);\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player100\" |\n| \"player102\" |\n| \"player125\" |\n| \"player100\" |\n+-------------+\n

        The pipe symbol | is applicable only in nGQL and cannot be used in OpenCypher statements. If you need to perform compound queries using MATCH statements, you can use the WITH clause.

        Example:

        nebula> MATCH (v:player)-->(v2:player) \\\n        WITH DISTINCT v2 AS v2, v2.player.age AS Age \\\n        ORDER BY Age \\\n        WHERE Age<25 \\\n        RETURN v2.player.name AS Name, Age;\n+----------------------+-----+\n| Name                 | Age |\n+----------------------+-----+\n| \"Luka Doncic\"        | 20  |\n| \"Ben Simmons\"        | 22  |\n| \"Kristaps Porzingis\" | 23  |\n+----------------------+-----+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#more_information","title":"More information","text":"

        nGQL command cheatsheet

        "},{"location":"3.ngql-guide/7.general-query-statements/2.match/","title":"MATCH","text":"

        The MATCH statement provides pattern-based search functionality, allowing you to retrieve data that matches one or more patterns in NebulaGraph. By defining one or more patterns, you can search for data that matches the patterns in NebulaGraph. Once the matching data is retrieved, you can use the RETURN clause to return it as a result.

        The examples in this topic use the basketballplayer dataset as the sample dataset.

        "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#syntax","title":"Syntax","text":"

        The syntax of MATCH is relatively more flexible compared with that of other query statements such as GO or LOOKUP. The path type of the MATCH statement is trail. That is, only vertices can be repeatedly visited in the graph traversal. Edges cannot be repeatedly visited. For details, see path. But generally, it can be summarized as follows.

        MATCH <pattern> [<clause_1>] RETURN <output> [<clause_2>];\n
        • pattern: The MATCH statement supports matching one or multiple patterns. Multiple patterns are separated by commas (,). For example: (a)-[]->(b),(c)-[]->(d). For the detailed description of patterns, see Patterns.
        • clause_1: The WHERE, WITH, UNWIND, and OPTIONAL MATCH clauses are supported, and the MATCH clause can also be used.
        • output: Define the list name for the output results to be returned. You can use AS to set an alias for the list.
        • clause_2: The ORDER BY and LIMIT clauses are supported.

        Legacy version compatibility

        • Starting from version 3.5.0, the MATCH statement supports full table scans. It can traverse vertices or edges in the graph without using any indexes or filter conditions. In previous versions, the MATCH statement required an index for certain queries or needed to use LIMIT to restrict the number of output results.
        • Starting from NebulaGraph version 3.0.0, in order to distinguish the properties of different tags, you need to specify a tag name when querying properties. The original statement RETURN <variable_name>.<property_name> is changed to RETURN <variable_name>.<tag_name>.<property_name>.
        "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#notes","title":"Notes","text":"
        • Avoid full table scans, as they may result in decreased query performance, and if there is insufficient memory during a full table scan, the query may fail, and the system will report an error. It is recommended to use queries with filter conditions or specifying tags and edge types, such as v:player and v.player.name in the statement MATCH (v:player) RETURN v.player.name AS Name.
        • You can create an index for a tag, edge type, or a specific property of a tag or edge type to improve query performance. For example, you can create an index for the player tag or the name property of the player tag. For more information about the usage and considerations for indexes, see Must-read for using indexes.
        • The MATCH statement cannot query dangling edges.
        "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#using_patterns_in_match_statements","title":"Using patterns in MATCH statements","text":""},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_vertices","title":"Match vertices","text":"

        You can use a user-defined variable in a pair of parentheses to represent a vertex in a pattern. For example: (v).

        nebula> MATCH (v) \\\n        RETURN v \\\n        LIMIT 3;\n+-----------------------------------------------------------+\n| v                                                         |\n+-----------------------------------------------------------+\n| (\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"}) |\n| (\"player106\" :player{age: 25, name: \"Kyle Anderson\"})     |\n| (\"player115\" :player{age: 40, name: \"Kobe Bryant\"})       |\n+-----------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_tags","title":"Match tags","text":"

        Legacy version compatibility

        • In NebulaGraph versions earlier than 3.0.0, the prerequisite for matching a tag is that the tag itself has an index or a certain property of the tag has an index.
        • Starting from NebulaGraph 3.0.0, you can match tags without creating an index, but you need to use LIMIT to restrict the number of output results.
        • Starting from NebulaGraph 3.5.0, the MATCH statement supports full table scans. There is no need to create an index for a tag or a specific property of a tag, nor use LIMIT to restrict the number of output results in order to execute the MATCH statement.

        You can specify a tag with :<tag_name> after the vertex in a pattern.

        nebula> MATCH (v:player) \\\n        RETURN v;\n+---------------------------------------------------------------+\n| v                                                             |\n+---------------------------------------------------------------+\n| (\"player105\" :player{age: 31, name: \"Danny Green\"})           |\n| (\"player109\" :player{age: 34, name: \"Tiago Splitter\"})        |\n| (\"player111\" :player{age: 38, name: \"David West\"})            |\n...\n

        To match vertices with multiple tags, use colons (:).

        nebula> CREATE TAG actor (name string, age int);\nnebula> INSERT VERTEX actor(name, age) VALUES \"player100\":(\"Tim Duncan\", 42);\nnebula> MATCH (v:player:actor) \\\n        RETURN v \\\n+----------------------------------------------------------------------------------------+\n| v                                                                                      |\n+----------------------------------------------------------------------------------------+\n| (\"player100\" :actor{age: 42, name: \"Tim Duncan\"} :player{age: 42, name: \"Tim Duncan\"}) |\n+----------------------------------------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_vertex_properties","title":"Match vertex properties","text":"

        Note

        The prerequisite for matching a vertex property is that the tag itself has an index of the corresponding property. Otherwise, you cannot execute the MATCH statement to match the property.

        You can specify a vertex property with {<prop_name>: <prop_value>} after the tag in a pattern.

        # The following example uses the name property to match a vertex.\nnebula> MATCH (v:player{name:\"Tim Duncan\"}) \\\n        RETURN v;\n+----------------------------------------------------+\n| v                                                  |\n+----------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) |\n+----------------------------------------------------+\n

        The WHERE clause can do the same thing:

        nebula> MATCH (v:player) \\\n        WHERE v.player.name == \"Tim Duncan\" \\\n        RETURN v;\n+----------------------------------------------------+\n| v                                                  |\n+----------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) |\n+----------------------------------------------------+\n

        OpenCypher compatibility

        In openCypher 9, = is the equality operator. However, in nGQL, == is the equality operator and = is the assignment operator (as in C++ or Java).

        Use the WHERE clause to directly get all the vertices with the vertex property value Tim Duncan.

        nebula> MATCH (v) \\\n        WITH v, properties(v) as props, keys(properties(v)) as kk \\\n        WHERE [i in kk where props[i] == \"Tim Duncan\"] \\\n        RETURN v;\n+----------------------------------------------------+\n| v                                                  |\n+----------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) |\n+----------------------------------------------------+\n\nnebula> WITH ['Tim Duncan', 'Yao Ming'] AS names \\\n        MATCH (v1:player)-->(v2:player) \\\n        WHERE v1.player.name in names \\\n        return v1, v2;\n+----------------------------------------------------+----------------------------------------------------------+\n| v1                                                 | v2                                                       |\n+----------------------------------------------------+----------------------------------------------------------+\n| (\"player133\" :player{age: 38, name: \"Yao Ming\"})   | (\"player114\" :player{age: 39, name: \"Tracy McGrady\"})    |\n| (\"player133\" :player{age: 38, name: \"Yao Ming\"})   | (\"player144\" :player{age: 47, name: \"Shaquille O'Neal\"}) |\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) | (\"player101\" :player{age: 36, name: \"Tony Parker\"})      |\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) | (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})    |\n+----------------------------------------------------+----------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_vids","title":"Match VIDs","text":"

        You can use the VID to match a vertex. The id() function can retrieve the VID of a vertex.

        nebula> MATCH (v) \\\n        WHERE id(v) == 'player101' \\\n        RETURN v;\n+-----------------------------------------------------+\n| v                                                   |\n+-----------------------------------------------------+\n| (\"player101\" :player{age: 36, name: \"Tony Parker\"}) |\n+-----------------------------------------------------+\n

        To match multiple VIDs, use WHERE id(v) IN [vid_list] or WHERE id(v) IN {vid_list}.

        nebula> MATCH (v:player { name: 'Tim Duncan' })--(v2) \\\n        WHERE id(v2) IN [\"player101\", \"player102\"] \\\n        RETURN v2;\n+-----------------------------------------------------------+\n| v2                                                        |\n+-----------------------------------------------------------+\n| (\"player101\" :player{age: 36, name: \"Tony Parker\"})       |\n| (\"player101\" :player{age: 36, name: \"Tony Parker\"})       |\n| (\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"}) |\n+-----------------------------------------------------------+\n\nnebula> MATCH (v) WHERE id(v) IN {\"player100\", \"player101\"} \\\n        RETURN v.player.name AS name;\n+---------------+\n| name          |\n+---------------+\n| \"Tony Parker\" |\n| \"Tim Duncan\"  |\n+---------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_connected_vertices","title":"Match connected vertices","text":"

        You can use the -- symbol to represent edges of both directions and match vertices connected by these edges.

        Legacy version compatibility

        In nGQL 1.x, the -- symbol is used for inline comments. Starting from nGQL 2.x, the -- symbol represents an incoming or outgoing edge.

        nebula> MATCH (v:player{name:\"Tim Duncan\"})--(v2) \\\n        RETURN v2.player.name AS Name;\n+---------------------+\n| Name                |\n+---------------------+\n| \"Manu Ginobili\"     |\n| \"Manu Ginobili\"     |\n| \"Tiago Splitter\"    |\n...\n

        You can add a > or < to the -- symbol to specify the direction of an edge.

        In the following example, --> represents an edge that starts from v and points to v2. To v, this is an outgoing edge, and to v2 this is an incoming edge.

        nebula> MATCH (v:player{name:\"Tim Duncan\"})-->(v2:player) \\\n        RETURN v2.player.name AS Name;\n+-----------------+\n| Name            |\n+-----------------+\n| \"Manu Ginobili\" |\n| \"Tony Parker\"   |\n+-----------------+\n

        To query the properties of the target vertices, use the CASE expression.

        nebula> MATCH (v:player{name:\"Tim Duncan\"})--(v2) \\\n        RETURN \\\n        CASE WHEN v2.team.name IS NOT NULL \\\n        THEN v2.team.name  \\\n        WHEN v2.player.name IS NOT NULL \\\n        THEN v2.player.name END AS Name;\n+---------------------+\n| Name                |\n+---------------------+\n| \"Manu Ginobili\"     |\n| \"Manu Ginobili\"     |\n| \"Spurs\"             |\n| \"Dejounte Murray\"   |\n...\n

        To extend the pattern, you can add more vertices and edges.

        nebula> MATCH (v:player{name:\"Tim Duncan\"})-->(v2)<--(v3) \\\n        RETURN v3.player.name AS Name;\n+---------------------+\n| Name                |\n+---------------------+\n| \"Dejounte Murray\"   |\n| \"LaMarcus Aldridge\" |\n| \"Marco Belinelli\"   |\n...\n

        If you do not need to refer to a vertex, you can omit the variable representing it in the parentheses.

        nebula> MATCH (v:player{name:\"Tim Duncan\"})-->()<--(v3) \\\n        RETURN v3.player.name AS Name;\n+---------------------+\n| Name                |\n+---------------------+\n| \"Dejounte Murray\"   |\n| \"LaMarcus Aldridge\" |\n| \"Marco Belinelli\"   |\n...\n
        "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_paths","title":"Match paths","text":"

        Connected vertices and edges form a path. You can use a user-defined variable to name a path as follows.

        nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-->(v2) \\\n        RETURN p;\n+--------------------------------------------------------------------------------------------------------------------------------------+\n| p                                                                                                                                    |\n+--------------------------------------------------------------------------------------------------------------------------------------+\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:serve@0 {end_year: 2016, start_year: 1997}]->(\"team204\" :team{name: \"Spurs\"})> |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})>   |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player125\" :player{age: 41, name: \"Manu Ginobili\"})> |\n+--------------------------------------------------------------------------------------------------------------------------------------+\n

        OpenCypher compatibility

        In nGQL, the @ symbol represents the rank of an edge, but openCypher has no such concept.

        "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_edges","title":"Match edges","text":"
        nebula> MATCH ()<-[e]-() \\\n        RETURN e \\\n        LIMIT 3;\n+----------------------------------------------------+\n| e                                                  |\n+----------------------------------------------------+\n| [:follow \"player101\"->\"player102\" @0 {degree: 90}] |\n| [:follow \"player103\"->\"player102\" @0 {degree: 70}] |\n| [:follow \"player135\"->\"player102\" @0 {degree: 80}] |\n+----------------------------------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_edge_types","title":"Match edge types","text":"

        Just like vertices, you can specify edge types with :<edge_type> in a pattern. For example: -[e:follow]-.

        OpenCypher compatibility

        • In NebulaGraph versions earlier than 3.0.0, the prerequisite for matching a edge type is that the edge type itself has an index or a certain property of the edge type has an index.
        • Starting from version 3.0.0, there is no need to create an index for matching a edge type, but you need to use LIMIT to limit the number of output results and you must specify the direction of the edge.
        • Starting from NebulaGraph 3.5.0, you can use the MATCH statement to match edges without creating an index for edge type or using LIMIT to restrict the number of output results.
        nebula> MATCH ()-[e:follow]->() \\\n        RETURN e;\n+----------------------------------------------------+\n| e                                                  |\n+----------------------------------------------------+\n| [:follow \"player102\"->\"player100\" @0 {degree: 75}] |\n| [:follow \"player102\"->\"player101\" @0 {degree: 75}] |\n| [:follow \"player129\"->\"player116\" @0 {degree: 90}] |\n...\n
        "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_edge_type_properties","title":"Match edge type properties","text":"

        Note

        The prerequisite for matching an edge type property is that the edge type itself has an index of the corresponding property. Otherwise, you cannot execute the MATCH statement to match the property.

        You can specify edge type properties with {<prop_name>: <prop_value>} in a pattern. For example: [e:follow{likeness:95}].

        nebula> MATCH (v:player{name:\"Tim Duncan\"})-[e:follow{degree:95}]->(v2) \\\n        RETURN e;\n+--------------------------------------------------------+\n| e                                                      |\n+--------------------------------------------------------+\n| [:follow \"player100\"->\"player101\" @0 {degree: 95}]     |\n| [:follow \"player100\"->\"player125\" @0 {degree: 95}]     |\n+--------------------------------------------------------+\n

        Use the WHERE clause to directly get all the edges with the edge property value 90.

        nebula> MATCH ()-[e]->() \\\n        WITH e, properties(e) as props, keys(properties(e)) as kk \\\n        WHERE [i in kk where props[i] == 90] \\\n        RETURN e;\n+----------------------------------------------------+\n| e                                                  |\n+----------------------------------------------------+\n| [:follow \"player125\"->\"player100\" @0 {degree: 90}] |\n| [:follow \"player140\"->\"player114\" @0 {degree: 90}] |\n| [:follow \"player133\"->\"player144\" @0 {degree: 90}] |\n| [:follow \"player133\"->\"player114\" @0 {degree: 90}] |\n...\n+----------------------------------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_multiple_edge_types","title":"Match multiple edge types","text":"

        The | symbol can help matching multiple edge types. For example: [e:follow|:serve]. The English colon (:) before the first edge type cannot be omitted, but the English colon before the subsequent edge type can be omitted, such as [e:follow|serve].

        nebula> MATCH (v:player{name:\"Tim Duncan\"})-[e:follow|:serve]->(v2) \\\n        RETURN e;\n+---------------------------------------------------------------------------+\n| e                                                                         |\n+---------------------------------------------------------------------------+\n| [:follow \"player100\"->\"player101\" @0 {degree: 95}]                        |\n| [:follow \"player100\"->\"player125\" @0 {degree: 95}]                        |\n| [:serve \"player100\"->\"team204\" @0 {end_year: 2016, start_year: 1997}]     |\n+---------------------------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_multiple_edges","title":"Match multiple edges","text":"

        You can extend a pattern to match multiple edges in a path.

        nebula> MATCH (v:player{name:\"Tim Duncan\"})-[]->(v2)<-[e:serve]-(v3) \\\n        RETURN v2, v3;\n+----------------------------------+-----------------------------------------------------------+\n| v2                               | v3                                                        |\n+----------------------------------+-----------------------------------------------------------+\n| (\"team204\" :team{name: \"Spurs\"}) | (\"player104\" :player{age: 32, name: \"Marco Belinelli\"})   |\n| (\"team204\" :team{name: \"Spurs\"}) | (\"player101\" :player{age: 36, name: \"Tony Parker\"})       |\n| (\"team204\" :team{name: \"Spurs\"}) | (\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"}) |\n...\n
        "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_fixed-length_paths","title":"Match fixed-length paths","text":"

        You can use the :<edge_type>*<hop> pattern to match a fixed-length path. hop must be a non-negative integer.

        nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow*2]->(v2) \\\n        RETURN DISTINCT v2 AS Friends;\n+-----------------------------------------------------------+\n| Friends                                                   |\n+-----------------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"})        |\n| (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})     |\n| (\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"}) |\n+-----------------------------------------------------------+\n

        If hop is 0, the pattern will match the source vertex of the path.

        nebula> MATCH (v:player{name:\"Tim Duncan\"}) -[*0]-> (v2) \\\n        RETURN v2;\n+----------------------------------------------------+\n| v2                                                 |\n+----------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) |\n+----------------------------------------------------+\n

        Note

        When you conditionally filter on multi-hop edges, such as -[e:follow*2]->, note that the e is a list of edges instead of a single edge.

        For example, the following statement is correct from the syntax point of view which may not get your expected query result, because the e is a list without the .degree property.

        nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow*2]->(v2) \\\n        WHERE e.degree > 1 \\\n        RETURN DISTINCT v2 AS Friends;\n

        The correct statement is as follows:

        nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow*2]->(v2) \\\n        WHERE ALL(e_ in e WHERE e_.degree > 0) \\\n        RETURN DISTINCT v2 AS Friends;\n

        Further, the following statement is for filtering the properties of the first-hop edge in multi-hop edges:

        nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow*2]->(v2) \\\n        WHERE e[0].degree > 98 \\\n        RETURN DISTINCT v2 AS Friends;\n
        "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_variable-length_paths","title":"Match variable-length paths","text":"

        You can use the :<edge_type>*[minHop..maxHop] pattern to match variable-length paths.minHop and maxHop are optional and default to 1 and infinity respectively.

        Caution

        If maxHop is not set, it may cause the Graph service to OOM. Execute this command with caution.

        Parameter Description minHop Optional. minHop indicates the minimum length of the path, which must be a non-negative integer. The default value is 1. maxHop Optional. maxHop indicates the maximum length of the path, which must be a non-negative integer. The default value is infinity.

        If neither minHop nor maxHop is specified, and only :<edge_type>* is set, the default values are applied to both, i.e., minHop is 1 and maxHop is infinity.

        nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow*]->(v2) \\\n        RETURN v2 AS Friends;\n+-----------------------------------------------------------+\n| Friends                                                   |\n+-----------------------------------------------------------+\n| (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})     |\n| (\"player101\" :player{age: 36, name: \"Tony Parker\"})       |\n...\n\nnebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow*1..3]->(v2) \\\n        RETURN v2 AS Friends;\n+-----------------------------------------------------------+\n| Friends                                                   |\n+-----------------------------------------------------------+\n| (\"player101\" :player{age: 36, name: \"Tony Parker\"})       |\n| (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})     |\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"})        |\n...\n\nnebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow*1..]->(v2) \\\n        RETURN v2 AS Friends;\n+-----------------------------------------------------------+\n| Friends                                                   |\n+-----------------------------------------------------------+\n| (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})     |\n| (\"player101\" :player{age: 36, name: \"Tony Parker\"})       |\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"})        |\n...\n

        You can use the DISTINCT keyword to aggregate duplicate results.

        nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow*1..3]->(v2:player) \\\n        RETURN DISTINCT v2 AS Friends, count(v2);\n+-----------------------------------------------------------+-----------+\n| Friends                                                   | count(v2) |\n+-----------------------------------------------------------+-----------+\n| (\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"}) | 1         |\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"})        | 4         |\n| (\"player101\" :player{age: 36, name: \"Tony Parker\"})       | 3         |\n| (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})     | 3         |\n+-----------------------------------------------------------+-----------+\n

        If minHop is 0, the pattern will match the source vertex of the path. Compared to the preceding statement, the following example uses 0 as the minHop. So in the following result set, \"Tim Duncan\" is counted one more time than it is in the preceding result set because it is the source vertex.

        nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow*0..3]->(v2:player) \\\n        RETURN DISTINCT v2 AS Friends, count(v2);\n+-----------------------------------------------------------+-----------+\n| Friends                                                   | count(v2) |\n+-----------------------------------------------------------+-----------+\n| (\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"}) | 1         |\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"})        | 5         |\n| (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})     | 3         |\n| (\"player101\" :player{age: 36, name: \"Tony Parker\"})       | 3         |\n+-----------------------------------------------------------+-----------+\n

        Note

        When using the variable e to match fixed-length or variable-length paths in a pattern, such as -[e:follow*0..3]->, it is not supported to reference e in other patterns. For example, the following statement is not supported.

        nebula> MATCH (v:player)-[e:like*1..3]->(n) \\\n        WHERE (n)-[e*1..4]->(:player) \\\n        RETURN v;\n
        "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_variable-length_paths_with_multiple_edge_types","title":"Match variable-length paths with multiple edge types","text":"

        You can specify multiple edge types in a fixed-length or variable-length pattern. In this case, hop, minHop, and maxHop take effect on all edge types.

        nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow|serve*2]->(v2) \\\n        RETURN DISTINCT v2;\n+-----------------------------------------------------------+\n| v2                                                        |\n+-----------------------------------------------------------+\n| (\"team204\" :team{name: \"Spurs\"})                          |\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"})        |\n| (\"team215\" :team{name: \"Hornets\"})                        |\n| (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})     |\n| (\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"}) |\n+-----------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_multiple_patterns","title":"Match multiple patterns","text":"

        You can separate multiple patterns with commas (,).

        nebula> CREATE TAG INDEX IF NOT EXISTS team_index ON team(name(20));\nnebula> REBUILD TAG INDEX team_index;\nnebula> MATCH (v1:player{name:\"Tim Duncan\"}), (v2:team{name:\"Spurs\"}) \\\n        RETURN v1,v2;\n+----------------------------------------------------+----------------------------------+\n| v1                                                 | v2                               |\n+----------------------------------------------------+----------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) | (\"team204\" :team{name: \"Spurs\"}) |\n+----------------------------------------------------+----------------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_shortest_paths","title":"Match shortest paths","text":"

        The allShortestPaths function can be used to find all shortest paths between two vertices.

        nebula> MATCH p = allShortestPaths((a:player{name:\"Tim Duncan\"})-[e*..5]-(b:player{name:\"Tony Parker\"})) \\\n        RETURN p;\n+------------------------------------------------------------------------------------------------------------------------------------+\n| p                                                                                                                                  |\n+------------------------------------------------------------------------------------------------------------------------------------+\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})<-[:follow@0 {degree: 95}]-(\"player101\" :player{age: 36, name: \"Tony Parker\"})> |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})> |\n+------------------------------------------------------------------------------------------------------------------------------------+\n

        The shortestPath function can be used to find a single shortest path between two vertices.

        nebula> MATCH p = shortestPath((a:player{name:\"Tim Duncan\"})-[e*..5]-(b:player{name:\"Tony Parker\"})) \\\n        RETURN p;\n+------------------------------------------------------------------------------------------------------------------------------------+\n| p                                                                                                                                  |\n+------------------------------------------------------------------------------------------------------------------------------------+\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})<-[:follow@0 {degree: 95}]-(\"player101\" :player{age: 36, name: \"Tony Parker\"})> |\n+------------------------------------------------------------------------------------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#retrieve_with_multiple_match","title":"Retrieve with multiple match","text":"

        Multiple MATCH can be used when different patterns have different filtering criteria and return the rows that exactly match the pattern.

        nebula> MATCH (m)-[]->(n) WHERE id(m)==\"player100\" \\\n        MATCH (n)-[]->(l) WHERE id(n)==\"player125\" \\\n        RETURN id(m),id(n),id(l);\n+-------------+-------------+-------------+\n| id(m)       | id(n)       | id(l)       |\n+-------------+-------------+-------------+\n| \"player100\" | \"player125\" | \"team204\"   |\n| \"player100\" | \"player125\" | \"player100\" |\n+-------------+-------------+-------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#retrieve_with_optional_match","title":"Retrieve with optional match","text":"

        See OPTIONAL MATCH.

        Caution

        In NebulaGraph, the performance and resource usage of the MATCH statement have been optimized. But we still recommend to use GO, LOOKUP, |, and FETCH instead of MATCH when high performance is required.

        "},{"location":"3.ngql-guide/7.general-query-statements/3.go/","title":"GO","text":"

        The GO statement is used in the NebulaGraph database to traverse the graph starting from a given starting vertex with specified filters and return results.

        "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

        This topic applies to native nGQL only.

        "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#syntax","title":"Syntax","text":"
        GO [[<M> TO] <N> {STEP|STEPS}] FROM <vertex_list>\nOVER <edge_type_list> [{REVERSELY | BIDIRECT}]\n[ WHERE <conditions>\u00a0]\nYIELD\u00a0[DISTINCT] <return_list>\n[{SAMPLE <sample_list> | <limit_by_list_clause>}]\n[| GROUP BY {col_name | expr | position} YIELD <col_name>]\n[| ORDER BY <expression> [{ASC | DESC}]]\n[| LIMIT [<offset>,] <number_rows>];\n\n<vertex_list> ::=\n    <vid> [, <vid> ...]\n\n<edge_type_list> ::=\n   edge_type [, edge_type ...]\n   | *\n\n<return_list> ::=\n    <col_name> [AS <col_alias>] [, <col_name> [AS <col_alias>] ...]\n
        • <N> {STEP|STEPS}: specifies the hop number. If not specified, the default value for N is one. When N is zero, NebulaGraph does not traverse any edges and returns nothing.

          Note

          The path type of the GO statement is walk, which means both vertices and edges can be repeatedly visited in graph traversal. For more information, see Path.

        • M TO N {STEP|STEPS}: traverses from M to N hops. When M is zero, the output is the same as that of M is one. That is, the output of GO 0 TO 2 and GO 1 TO 2 are the same.
        • <vertex_list>: represents a list of vertex IDs separated by commas.
        • <edge_type_list>: represents a list of edge types which the traversal can go through.
        • REVERSELY | BIDIRECT: defines the direction of the query. By default, the GO statement searches for outgoing edges of <vertex_list>. If REVERSELY is set, GO searches for incoming edges. If BIDIRECT is set, GO searches for edges of both directions. The direction of the query can be checked by returning the <edge_type>._type field using YIELD. A positive value indicates an outgoing edge, while a negative value indicates an incoming edge.
        • WHERE <expression>: specifies the traversal filters. You can use the WHERE clause for the source vertices, the edges, and the destination vertices. You can use it together with AND, OR, NOT, and XOR. For more information, see WHERE.

          Note

          • There are some restrictions for the WHERE clause when you traverse along with multiple edge types. For example, WHERE edge1.prop1 > edge2.prop2 is not supported.
          • The GO statement is executed by traversing all the vertices and then filtering according to the filter condition.
        • YIELD [DISTINCT] <return_list>: defines the output to be returned. It is recommended to use the Schema-related functions to fill in <return_list>. src(edge), dst(edge), type(edge) ), rank(edge), etc., are currently supported, while nested functions are not. For more information, see YIELD.
        • SAMPLE <sample_list>: takes samples from the result set. For more information, see SAMPLE.
        • <limit_by_list_clause>: limits the number of outputs during the traversal process. For more information, see LIMIT.
        • GROUP BY: groups the output into subgroups based on the value of the specified property. For more information, see GROUP BY. After grouping, you need to use YIELD again to define the output that needs to be returned.
        • ORDER BY: sorts outputs with specified orders. For more information, see ORDER BY.

          Note

          When the sorting method is not specified, the output orders can be different for the same query.

        • LIMIT [<offset>,] <number_rows>]: limits the number of rows of the output. For more information, see LIMIT.
        "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#notes","title":"Notes","text":"
        • The WHERE and YIELD clauses in GO statements usually utilize property reference symbols ($^ and $$) or the properties($^) and properties($$) functions to specify the properties of a vertex; use the properties(edge) function to specify the properties of an edge. For details, see Property Reference Symbols and Schema-related Functions.
        • When referring to the result of a subquery in a compound GO statement, you need to set a name for the result and pass it to the next subquery using the pipe symbol |, and reference the name of the result in the next subquery using $-. See the Pipe Operator for details.
        • When the queried property has no value, the returned result displays NULL.
        "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#cases_and_examples","title":"Cases and examples","text":""},{"location":"3.ngql-guide/7.general-query-statements/3.go/#to_query_the_immediate_neighbors_of_a_vertex","title":"To query the immediate neighbors of a vertex","text":"

        For example, to query the team that a person belongs to, assuming that the person is connected to the team by the serve edge and the person's ID is player102.

        nebula>\u00a0GO FROM \"player102\" OVER serve YIELD dst(edge);\n+-----------+\n| dst(EDGE) |\n+-----------+\n| \"team203\" |\n| \"team204\" |\n+-----------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#to_query_all_vertices_within_a_specified_number_of_hops_from_a_starting_vertex","title":"To query all vertices within a specified number of hops from a starting vertex","text":"

        For example, to query all vertices within two hops of a person vertex, assuming that the person is connected to other people by the follow edge and the person's ID is player102.

        # Return all vertices that are 2 hops away from the player102 vertex.\nnebula> GO 2 STEPS FROM \"player102\" OVER follow YIELD dst(edge);\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player101\" |\n| \"player125\" |\n| \"player100\" |\n| \"player102\" |\n| \"player125\" |\n+-------------+\n
        # Return all vertices within 1 or 2 hops away from the player102 vertex.\nnebula> GO 1 TO 2 STEPS FROM \"player100\" OVER follow \\\n        YIELD dst(edge) AS destination;\n+-------------+\n| destination |\n+-------------+\n| \"player101\" |\n| \"player125\" |\n...\n\n# The following MATCH query has the same semantics as the previous GO query.\nnebula> MATCH (v) -[e:follow*1..2]->(v2) \\\n        WHERE id(v) == \"player100\" \\\n        RETURN id(v2) AS destination;\n+-------------+\n| destination |\n+-------------+\n| \"player100\" |\n| \"player102\" |\n...\n
        "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#to_add_filtering_conditions","title":"To add filtering conditions","text":"

        Case: To query the vertices and edges that meet specific conditions.

        For example, use the WHERE clause to query the edges with specific properties between the starting vertex and the destination vertex.

        nebula>\u00a0GO FROM \"player100\", \"player102\" OVER serve \\\n        WHERE properties(edge).start_year > 1995 \\\n        YIELD DISTINCT properties($$).name AS team_name, properties(edge).start_year AS start_year, properties($^).name AS player_name;\n\n+-----------------+------------+---------------------+\n| team_name       | start_year | player_name         |\n+-----------------+------------+---------------------+\n| \"Spurs\"         | 1997       | \"Tim Duncan\"        |\n| \"Trail Blazers\" | 2006       | \"LaMarcus Aldridge\" |\n| \"Spurs\"         | 2015       | \"LaMarcus Aldridge\" |\n+-----------------+------------+---------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#to_query_all_edges","title":"To query all edges","text":"

        Case: To query all edges that are connected to the starting vertex.

        # Return all edges that are connected to the player102 vertex.\nnebula> GO FROM \"player102\" OVER * BIDIRECT YIELD edge AS e;\n+-----------------------------------------------------------------------+\n| e                                                                     |\n+-----------------------------------------------------------------------+\n| [:follow \"player101\"->\"player102\" @0 {degree: 90}]                    |\n| [:follow \"player103\"->\"player102\" @0 {degree: 70}]                    |\n| [:follow \"player135\"->\"player102\" @0 {degree: 80}]                    |\n| [:follow \"player102\"->\"player100\" @0 {degree: 75}]                    |\n| [:follow \"player102\"->\"player101\" @0 {degree: 75}]                    |\n| [:serve \"player102\"->\"team203\" @0 {end_year: 2015, start_year: 2006}] |\n| [:serve \"player102\"->\"team204\" @0 {end_year: 2019, start_year: 2015}] |\n+-----------------------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#to_query_multiple_edge_types","title":"To query multiple edge types","text":"

        Case: To query multiple edge types that are connected to the starting vertex. You can specify multiple edge types or the * symbol to query multiple edge types.

        For example, to query the follow and serve edges that are connected to the starting vertex.

        nebula> GO FROM \"player100\" OVER follow, serve \\\n        YIELD properties(edge).degree, properties(edge).start_year;\n+-------------------------+-----------------------------+\n| properties(EDGE).degree | properties(EDGE).start_year |\n+-------------------------+-----------------------------+\n| 95                      | __NULL__                    |\n| 95                      | __NULL__                    |\n| __NULL__                | 1997                        |\n+-------------------------+-----------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#to_query_incoming_vertices_using_the_reversely_keyword","title":"To query incoming vertices using the REVERSELY keyword","text":"
        # Return the vertices that follow the player100 vertex.\nnebula> GO FROM \"player100\" OVER follow REVERSELY \\\n        YIELD src(edge) AS destination;\n+-------------+\n| destination |\n+-------------+\n| \"player101\" |\n| \"player102\" |\n...\n\n# The following MATCH query has the same semantics as the previous GO query.\nnebula> MATCH (v)<-[e:follow]- (v2) WHERE id(v) == 'player100' \\\n        RETURN id(v2) AS destination;\n+-------------+\n| destination |\n+-------------+\n| \"player101\" |\n| \"player102\" |\n...\n
        "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#to_use_subqueries_as_the_starting_vertice_of_a_graph_traversal","title":"To use subqueries as the starting vertice of a graph traversal","text":"
        # Return the friends of the player100 vertex and the teams that the friends belong to.\nnebula> GO FROM \"player100\" OVER follow REVERSELY \\\n        YIELD src(edge) AS id | \\\n        GO FROM $-.id OVER serve \\\n        WHERE properties($^).age > 20 \\\n        YIELD properties($^).name AS FriendOf, properties($$).name AS Team;\n+---------------------+-----------------+\n| FriendOf            | Team            |\n+---------------------+-----------------+\n| \"Boris Diaw\"        | \"Spurs\"         |\n| \"Boris Diaw\"        | \"Jazz\"          |\n| \"Boris Diaw\"        | \"Suns\"          |\n...\n\n# The following MATCH query has the same semantics as the previous GO query.\nnebula> MATCH (v)<-[e:follow]- (v2)-[e2:serve]->(v3)  \\\n        WHERE id(v) == 'player100' \\\n        RETURN v2.player.name AS FriendOf, v3.team.name AS Team;\n+---------------------+-----------------+\n| FriendOf            | Team            |\n+---------------------+-----------------+\n| \"Boris Diaw\"        | \"Spurs\"         |\n| \"Boris Diaw\"        | \"Jazz\"          |\n| \"Boris Diaw\"        | \"Suns\"          |\n...\n
        "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#to_use_group_by_to_group_the_output","title":"To use GROUP BY to group the output","text":"

        You need to use YIELD to define the output that needs to be returned after grouping.

        # The following example collects the outputs according to age.\nnebula> GO 2 STEPS FROM \"player100\" OVER follow \\\n        YIELD src(edge) AS src, dst(edge) AS dst, properties($$).age AS age \\\n        | GROUP BY $-.dst \\\n        YIELD $-.dst AS dst, collect_set($-.src) AS src, collect($-.age) AS age;\n+-------------+----------------------------+----------+\n| dst         | src                        | age      |\n+-------------+----------------------------+----------+\n| \"player125\" | {\"player101\"}              | [41]     |\n| \"player100\" | {\"player125\", \"player101\"} | [42, 42] |\n| \"player102\" | {\"player101\"}              | [33]     |\n+-------------+----------------------------+----------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#to_use_order_by_and_limit_to_sort_and_limit_the_output","title":"To use ORDER BY and LIMIT to sort and limit the output","text":"
        # The following example groups the outputs and restricts the number of rows of the outputs.\nnebula> $a = GO FROM \"player100\" OVER follow YIELD src(edge) AS src, dst(edge) AS dst; \\\n        GO 2 STEPS FROM $a.dst OVER follow \\\n        YIELD $a.src AS src, $a.dst, src(edge), dst(edge) \\\n        | ORDER BY $-.src | OFFSET 1 LIMIT 2;\n+-------------+-------------+-------------+-------------+\n| src         | $a.dst      | src(EDGE)   | dst(EDGE)   |\n+-------------+-------------+-------------+-------------+\n| \"player100\" | \"player101\" | \"player100\" | \"player101\" |\n| \"player100\" | \"player125\" | \"player100\" | \"player125\" |\n+-------------+-------------+-------------+-------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#other_examples","title":"Other examples","text":"
        # The following example determines if $$.player.name IS NOT EMPTY.\nnebula> GO FROM \"player100\" OVER follow WHERE properties($$).name IS NOT EMPTY YIELD dst(edge);\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player125\" |\n| \"player101\" |\n+-------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/","title":"FETCH","text":"

        The FETCH statement retrieves the properties of the specified vertices or edges.

        "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#opencypher_compatibility","title":"OpenCypher Compatibility","text":"

        This topic applies to native nGQL only.

        "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#fetch_vertex_properties","title":"Fetch vertex properties","text":""},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#syntax","title":"Syntax","text":"
        FETCH PROP ON {<tag_name>[, tag_name ...] | *}\n<vid> [, vid ...]\nYIELD [DISTINCT] <return_list> [AS <alias>];\n
        Parameter Description tag_name The name of the tag. * Represents all the tags in the current graph space. vid The vertex ID. YIELD Define the output to be returned. For details, see YIELD. AS Set an alias."},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#fetch_vertex_properties_by_one_tag","title":"Fetch vertex properties by one tag","text":"

        Specify a tag in the FETCH statement to fetch the vertex properties by that tag.

        nebula> FETCH PROP ON player \"player100\" YIELD properties(vertex);\n+-------------------------------+\n| properties(VERTEX)            |\n+-------------------------------+\n| {age: 42, name: \"Tim Duncan\"} |\n+-------------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#fetch_specific_properties_of_a_vertex","title":"Fetch specific properties of a vertex","text":"

        Use a YIELD clause to specify the properties to be returned.

        nebula> FETCH PROP ON player \"player100\" \\\n        YIELD properties(vertex).name AS name;\n+--------------+\n| name         |\n+--------------+\n| \"Tim Duncan\" |\n+--------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#fetch_properties_of_multiple_vertices","title":"Fetch properties of multiple vertices","text":"

        Specify multiple VIDs (vertex IDs) to fetch properties of multiple vertices. Separate the VIDs with commas.

        nebula> FETCH PROP ON player \"player101\", \"player102\", \"player103\" YIELD properties(vertex);\n+--------------------------------------+\n| properties(VERTEX)                   |\n+--------------------------------------+\n| {age: 33, name: \"LaMarcus Aldridge\"} |\n| {age: 36, name: \"Tony Parker\"}       |\n| {age: 32, name: \"Rudy Gay\"}          |\n+--------------------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#fetch_vertex_properties_by_multiple_tags","title":"Fetch vertex properties by multiple tags","text":"

        Specify multiple tags in the FETCH statement to fetch the vertex properties by the tags. Separate the tags with commas.

        # The following example creates a new tag t1.\nnebula> CREATE TAG IF NOT EXISTS t1(a string, b int);\n\n# The following example attaches t1 to the vertex \"player100\".\nnebula> INSERT VERTEX t1(a, b) VALUES \"player100\":(\"Hello\", 100);\n\n# The following example fetches the properties of vertex \"player100\" by the tags player and t1.\nnebula> FETCH PROP ON player, t1 \"player100\" YIELD vertex AS v;\n+----------------------------------------------------------------------------+\n| v                                                                          |\n+----------------------------------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"} :t1{a: \"Hello\", b: 100}) |\n+----------------------------------------------------------------------------+\n

        You can combine multiple tags with multiple VIDs in a FETCH statement.

        nebula> FETCH PROP ON player, t1 \"player100\", \"player103\" YIELD vertex AS v;\n+----------------------------------------------------------------------------+\n| v                                                                          |\n+----------------------------------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"} :t1{a: \"Hello\", b: 100}) |\n| (\"player103\" :player{age: 32, name: \"Rudy Gay\"})                           |\n+----------------------------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#fetch_vertex_properties_by_all_tags","title":"Fetch vertex properties by all tags","text":"

        Set an asterisk symbol * to fetch properties by all tags in the current graph space.

        nebula> FETCH PROP ON * \"player100\", \"player106\", \"team200\" YIELD vertex AS v;\n+----------------------------------------------------------------------------+\n| v                                                                          |\n+----------------------------------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"} :t1{a: \"Hello\", b: 100}) |\n| (\"player106\" :player{age: 25, name: \"Kyle Anderson\"})                      |\n| (\"team200\" :team{name: \"Warriors\"})                                        |\n+----------------------------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#fetch_edge_properties","title":"Fetch edge properties","text":""},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#syntax_1","title":"Syntax","text":"
        FETCH PROP ON <edge_type> <src_vid> -> <dst_vid>[@<rank>] [, <src_vid> -> <dst_vid> ...]\nYIELD <output>;\n
        Parameter Description edge_type The name of the edge type. src_vid The VID of the source vertex. It specifies the start of an edge. dst_vid The VID of the destination vertex. It specifies the end of an edge. rank The rank of the edge. It is optional and defaults to 0. It distinguishes an edge from other edges with the same edge type, source vertex, destination vertex, and rank. YIELD Define the output to be returned. For details, see YIELD."},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#fetch_all_properties_of_an_edge","title":"Fetch all properties of an edge","text":"

        The following statement fetches all the properties of the serve edge that connects vertex \"player100\" and vertex \"team204\".

        nebula> FETCH PROP ON serve \"player100\" -> \"team204\" YIELD properties(edge);\n+------------------------------------+\n| properties(EDGE)                   |\n+------------------------------------+\n| {end_year: 2016, start_year: 1997} |\n+------------------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#fetch_specific_properties_of_an_edge","title":"Fetch specific properties of an edge","text":"

        Use a YIELD clause to fetch specific properties of an edge.

        nebula> FETCH PROP ON serve \"player100\" -> \"team204\"    \\\n        YIELD properties(edge).start_year;\n+-----------------------------+\n| properties(EDGE).start_year |\n+-----------------------------+\n| 1997                        |\n+-----------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#fetch_properties_of_multiple_edges","title":"Fetch properties of multiple edges","text":"

        Specify multiple edge patterns (<src_vid> -> <dst_vid>[@<rank>]) to fetch properties of multiple edges. Separate the edge patterns with commas.

        nebula> FETCH PROP ON serve \"player100\" -> \"team204\", \"player133\" -> \"team202\" YIELD edge AS e;\n+-----------------------------------------------------------------------+\n| e                                                                     |\n+-----------------------------------------------------------------------+\n| [:serve \"player100\"->\"team204\" @0 {end_year: 2016, start_year: 1997}] |\n| [:serve \"player133\"->\"team202\" @0 {end_year: 2011, start_year: 2002}] |\n+-----------------------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#fetch_properties_based_on_edge_rank","title":"Fetch properties based on edge rank","text":"

        If there are multiple edges with the same edge type, source vertex, and destination vertex, you can specify the rank to fetch the properties on the correct edge.

        # The following example inserts edges with different ranks and property values.\nnebula> insert edge serve(start_year,end_year) \\\n        values \"player100\"->\"team204\"@1:(1998, 2017);\n\nnebula> insert edge serve(start_year,end_year) \\\n        values \"player100\"->\"team204\"@2:(1990, 2018);\n\n# By default, the FETCH statement returns the edge whose rank is 0.\nnebula> FETCH PROP ON serve \"player100\" -> \"team204\" YIELD edge AS e;\n+-----------------------------------------------------------------------+\n| e                                                                     |\n+-----------------------------------------------------------------------+\n| [:serve \"player100\"->\"team204\" @0 {end_year: 2016, start_year: 1997}] |\n+-----------------------------------------------------------------------+\n\n# To fetch on an edge whose rank is not 0, set its rank in the FETCH statement.\nnebula> FETCH PROP ON serve \"player100\" -> \"team204\"@1 YIELD edge AS e;\n+-----------------------------------------------------------------------+\n| e                                                                     |\n+-----------------------------------------------------------------------+\n| [:serve \"player100\"->\"team204\" @1 {end_year: 2017, start_year: 1998}] |\n+-----------------------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#use_fetch_in_composite_queries","title":"Use FETCH in composite queries","text":"

        A common way to use FETCH is to combine it with native nGQL such as GO.

        The following statement returns the degree values of the follow edges that start from vertex \"player101\".

        nebula> GO FROM \"player101\" OVER follow \\\n        YIELD src(edge) AS s, dst(edge) AS d \\\n        | FETCH PROP ON follow $-.s -> $-.d \\\n        YIELD properties(edge).degree;\n+-------------------------+\n| properties(EDGE).degree |\n+-------------------------+\n| 95                      |\n| 90                      |\n| 95                      |\n+-------------------------+\n

        Or you can use user-defined variables to construct similar queries.

        nebula> $var = GO FROM \"player101\" OVER follow \\\n        YIELD src(edge) AS s, dst(edge) AS d; \\\n        FETCH PROP ON follow $var.s -> $var.d \\\n        YIELD properties(edge).degree;\n+-------------------------+\n| properties(EDGE).degree |\n+-------------------------+\n| 95                      |\n| 90                      |\n| 95                      |\n+-------------------------+\n

        For more information about composite queries, see Composite queries (clause structure).

        "},{"location":"3.ngql-guide/7.general-query-statements/5.lookup/","title":"LOOKUP","text":"

        The LOOKUP statement traverses data based on indexes. You can use LOOKUP for the following purposes:

        • Search for the specific data based on conditions defined by the WHERE clause.
        • List vertices with a tag: retrieve the VID of all vertices with a tag.
        • List edges with an edge type: retrieve the source vertex IDs, destination vertex IDs, and ranks of all edges with an edge type.
        • Count the number of vertices or edges with a tag or an edge type.
        "},{"location":"3.ngql-guide/7.general-query-statements/5.lookup/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

        This topic applies to native nGQL only.

        "},{"location":"3.ngql-guide/7.general-query-statements/5.lookup/#precautions","title":"Precautions","text":"
        • Correct use of indexes can speed up queries, but indexes can dramatically reduce the write performance. The performance can be greatly reduced. DO NOT use indexes in production environments unless you are fully aware of their influences on your service.
        • If the specified property is not indexed when using the LOOKUP statement, NebulaGraph randomly selects one of the available indexes.

          For example, the tag player has two properties, name and age. Both the tag player itself and the property name have indexes, but the property age has no indexes. When running LOOKUP ON player WHERE player.age == 36 YIELD player.name;, NebulaGraph randomly uses one of the indexes of the tag player and the property name. You can use the EXPLAIN statement to check the selected index.

          Legacy version compatibility

          Before the release 2.5.0, if the specified property is not indexed when using the LOOKUP statement, NebulaGraph reports an error and does not use other indexes.

        "},{"location":"3.ngql-guide/7.general-query-statements/5.lookup/#prerequisites","title":"Prerequisites","text":"

        Before using the LOOKUP statement, make sure that at least one index is created. If there are already related vertices, edges, or properties before an index is created, the user must rebuild the index after creating the index to make it valid.

        "},{"location":"3.ngql-guide/7.general-query-statements/5.lookup/#syntax","title":"Syntax","text":"
        LOOKUP ON {<vertex_tag> | <edge_type>}\n[WHERE <expression> [AND <expression> ...]]\nYIELD [DISTINCT] <return_list> [AS <alias>];\n\n<return_list>\n    <prop_name> [AS <col_alias>] [, <prop_name> [AS <prop_alias>] ...];\n
        • WHERE <expression>: filters data with specified conditions. Both AND and OR are supported between different expressions. For more information, see WHERE.
        • YIELD: Define the output to be returned. For details, see YIELD.
        • DISTINCT: Aggregate the output results and return the de-duplicated result set.
        • AS: Set an alias.
        "},{"location":"3.ngql-guide/7.general-query-statements/5.lookup/#limitations_of_using_where_in_lookup","title":"Limitations of using WHERE in LOOKUP","text":"

        The WHERE clause in a LOOKUP statement does not support the following operations:

        • $- and $^.
        • Filter rank().
        • In relational expressions, operators are not supported to have field names on both sides, such as tagName.prop1> tagName.prop2.
        • Nested AliasProp expressions in operation expressions and function expressions are not supported.
        • The XOR operation is not supported.
        • String operations other than STARTS WITH are not supported.
        • Graph patterns.
        "},{"location":"3.ngql-guide/7.general-query-statements/5.lookup/#retrieve_vertices","title":"Retrieve vertices","text":"

        The following example returns vertices whose name is Tony Parker and the tag is player.

        nebula> CREATE TAG INDEX IF NOT EXISTS index_player ON player(name(30), age);\n\nnebula> REBUILD TAG INDEX index_player;\n+------------+\n| New Job Id |\n+------------+\n| 15         |\n+------------+\n\nnebula> LOOKUP ON player \\\n        WHERE player.name == \"Tony Parker\" \\\n        YIELD id(vertex);\n+---------------+\n| id(VERTEX)    |\n+---------------+\n| \"player101\"   |\n+---------------+\n\nnebula> LOOKUP ON player \\\n        WHERE player.name == \"Tony Parker\" \\\n        YIELD properties(vertex).name AS name, properties(vertex).age AS age;\n+---------------+-----+\n| name          | age |\n+---------------+-----+\n| \"Tony Parker\" | 36  |\n+---------------+-----+\n\nnebula> LOOKUP ON player \\\n        WHERE player.age  > 45 \\\n        YIELD id(vertex);\n+-------------+\n| id(VERTEX)  |\n+-------------+\n| \"player144\" |\n| \"player140\" |\n+-------------+\n\nnebula> LOOKUP ON player \\\n        WHERE player.name STARTS WITH \"B\" \\\n        AND player.age IN [22,30] \\\n        YIELD properties(vertex).name, properties(vertex).age;\n+-------------------------+------------------------+\n| properties(VERTEX).name | properties(VERTEX).age |\n+-------------------------+------------------------+\n| \"Ben Simmons\"           | 22                     |\n| \"Blake Griffin\"         | 30                     |\n+-------------------------+------------------------+\n\nnebula> LOOKUP ON player \\\n        WHERE player.name == \"Kobe Bryant\"\\\n        YIELD id(vertex) AS VertexID, properties(vertex).name AS name |\\\n        GO FROM $-.VertexID OVER serve \\\n        YIELD $-.name, properties(edge).start_year, properties(edge).end_year, properties($$).name;\n+---------------+-----------------------------+---------------------------+---------------------+\n| $-.name       | properties(EDGE).start_year | properties(EDGE).end_year | properties($$).name |\n+---------------+-----------------------------+---------------------------+---------------------+\n| \"Kobe Bryant\" | 1996                        | 2016                      | \"Lakers\"            |\n+---------------+-----------------------------+---------------------------+---------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/5.lookup/#retrieve_edges","title":"Retrieve edges","text":"

        The following example returns edges whose degree is 90 and the edge type is follow.

        nebula> CREATE EDGE INDEX IF NOT EXISTS index_follow ON follow(degree);\n\nnebula> REBUILD EDGE INDEX index_follow;\n+------------+\n| New Job Id |\n+------------+\n| 62         |\n+------------+\n\nnebula> LOOKUP ON follow \\\n        WHERE follow.degree == 90 YIELD edge AS e;\n+----------------------------------------------------+\n| e                                                  |\n+----------------------------------------------------+\n| [:follow \"player109\"->\"player125\" @0 {degree: 90}] |\n| [:follow \"player118\"->\"player120\" @0 {degree: 90}] |\n| [:follow \"player118\"->\"player131\" @0 {degree: 90}] |\n...\n\nnebula> LOOKUP ON follow \\\n        WHERE follow.degree == 90 \\\n        YIELD properties(edge).degree;\n+-------------+-------------+---------+-------------------------+\n| SrcVID      | DstVID      | Ranking | properties(EDGE).degree |\n+-------------+-------------+---------+-------------------------+\n| \"player150\" | \"player143\" | 0       | 90                      |\n| \"player150\" | \"player137\" | 0       | 90                      |\n| \"player148\" | \"player136\" | 0       | 90                      |\n...\n\nnebula> LOOKUP ON follow \\\n        WHERE follow.degree == 60 \\\n        YIELD dst(edge) AS DstVID, properties(edge).degree AS Degree |\\\n        GO FROM $-.DstVID OVER serve \\\n        YIELD $-.DstVID, properties(edge).start_year, properties(edge).end_year, properties($$).name;\n+-------------+-----------------------------+---------------------------+---------------------+\n| $-.DstVID   | properties(EDGE).start_year | properties(EDGE).end_year | properties($$).name |\n+-------------+-----------------------------+---------------------------+---------------------+\n| \"player105\" | 2010                        | 2018                      | \"Spurs\"             |\n| \"player105\" | 2009                        | 2010                      | \"Cavaliers\"         |\n| \"player105\" | 2018                        | 2019                      | \"Raptors\"           |\n+-------------+-----------------------------+---------------------------+---------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/5.lookup/#list_vertices_or_edges_with_a_tag_or_an_edge_type","title":"List vertices or edges with a tag or an edge type","text":"

        To list vertices or edges with a tag or an edge type, at least one index must exist on the tag, the edge type, or its property.

        For example, if there is a player tag with a name property and an age property, to retrieve the VID of all vertices tagged with player, there has to be an index on the player tag itself, the name property, or the age property.

        • The following example shows how to retrieve the VID of all vertices tagged with player.
          nebula> CREATE TAG IF NOT EXISTS player(name string,age int);\n\nnebula> CREATE TAG INDEX IF NOT EXISTS player_index on player();\n\nnebula> REBUILD TAG INDEX player_index;\n+------------+\n| New Job Id |\n+------------+\n| 66         |\n+------------+\n\nnebula> INSERT VERTEX player(name,age) \\\n        VALUES \"player100\":(\"Tim Duncan\", 42), \"player101\":(\"Tony Parker\", 36);\n\nThe following statement retrieves the VID of all vertices with the tag `player`. It is similar to `MATCH (n:player) RETURN id(n) /*, n */`.\n\nnebula> LOOKUP ON player YIELD id(vertex);\n+-------------+\n| id(VERTEX)  |\n+-------------+\n| \"player100\" |\n| \"player101\" |\n...\n
        • The following example shows how to retrieve the source Vertex IDs, destination vertex IDs, and ranks of all edges of the follow edge type.
          nebula> CREATE EDGE IF NOT EXISTS follow(degree int);\n\nnebula> CREATE EDGE INDEX IF NOT EXISTS follow_index on follow();\n\nnebula> REBUILD EDGE INDEX follow_index;\n+------------+\n| New Job Id |\n+------------+\n| 88         |\n+------------+\n\nnebula> INSERT EDGE follow(degree) \\\n        VALUES \"player100\"->\"player101\":(95);\n\nThe following statement retrieves all edges with the edge type `follow`. It is similar to `MATCH (s)-[e:follow]->(d) RETURN id(s), rank(e), id(d) /*, type(e) */`.\n\nnebula)> LOOKUP ON follow YIELD edge AS e;\n+-----------------------------------------------------+\n| e                                                   |\n+-----------------------------------------------------+\n| [:follow \"player105\"->\"player100\" @0 {degree: 70}]  |\n| [:follow \"player105\"->\"player116\" @0 {degree: 80}]  |\n| [:follow \"player109\"->\"player100\" @0 {degree: 80}]  |\n...\n
        "},{"location":"3.ngql-guide/7.general-query-statements/5.lookup/#count_the_numbers_of_vertices_or_edges","title":"Count the numbers of vertices or edges","text":"

        The following example shows how to count the number of vertices tagged with player and edges of the follow edge type.

        nebula> LOOKUP ON player YIELD id(vertex)|\\\n        YIELD COUNT(*) AS Player_Number;\n+---------------+\n| Player_Number |\n+---------------+\n| 51            |\n+---------------+\n\nnebula> LOOKUP ON follow YIELD edge AS e| \\\n        YIELD COUNT(*) AS Follow_Number;\n+---------------+\n| Follow_Number |\n+---------------+\n| 81            |\n+---------------+\n

        Note

        You can also use SHOW STATS to count the numbers of vertices or edges.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.find-path/","title":"FIND PATH","text":"

        The FIND PATH statement finds the paths between the selected source vertices and destination vertices.

        Note

        To improve the query performance with the FIND PATH statement, you can add the num_operator_threads parameter in the nebula-graphd.conf configuration file. The value range of the num_operator_threads parameter is [2, 10] and make sure that the value is not greater than the number of CPU cores of the machine where the graphd service is deployed. It is recommended to set the value to the number of CPU cores of the machine where the graphd service is deployed. For more information about the nebula-graphd.conf configuration file, see nebula-graphd.conf.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.find-path/#syntax","title":"Syntax","text":"
        FIND { SHORTEST | SINGLE SHORTEST | ALL | NOLOOP } PATH [WITH PROP] FROM <vertex_id_list> TO <vertex_id_list>\nOVER <edge_type_list> [REVERSELY | BIDIRECT] \n[<WHERE clause>] [UPTO <N> {STEP|STEPS}] \nYIELD path as <alias>\n[| ORDER BY $-.path] [| LIMIT <M>];\n\n<vertex_id_list> ::=\n    [vertex_id [, vertex_id] ...]\n
        • SHORTEST finds all the shortest path.
        • ALL finds all the paths.
        • NOLOOP finds the paths without circles.
        • WITH PROP shows properties of vertices and edges. If not specified, properties will be hidden.
        • <vertex_id_list> is a list of vertex IDs separated with commas (,). It supports $- and $var.
        • <edge_type_list> is a list of edge types separated with commas (,). * is all edge types.
        • REVERSELY | BIDIRECT specifies the direction. REVERSELY is reverse graph traversal while BIDIRECT is bidirectional graph traversal.
        • <WHERE clause> filters properties of edges.
        • UPTO <N> {STEP|STEPS} is the maximum hop number of the path. The default value is 5.
        • ORDER BY $-.path specifies the order of the returned paths. For information about the order rules, see Path.
        • LIMIT <M> specifies the maximum number of rows to return.

        Note

        The path type of FIND PATH is trail. Only vertices can be repeatedly visited in graph traversal. For more information, see Path.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.find-path/#limitations","title":"Limitations","text":"
        • When a list of source and/or destination vertex IDs are specified, the paths between any source vertices and the destination vertices will be returned.
        • There can be cycles when searching all paths.
        • FIND PATH only supports filtering properties of edges with WHERE clauses. Filtering properties of vertices and functions are not supported for now.
        • FIND PATH is a single-thread procedure, so it uses much memory.
        "},{"location":"3.ngql-guide/7.general-query-statements/6.find-path/#examples","title":"Examples","text":"

        A returned path is like (<vertex_id>)-[:<edge_type_name>@<rank>]->(<vertex_id).

        nebula> FIND SHORTEST PATH FROM \"player102\" TO \"team204\" OVER * YIELD path AS p;\n+--------------------------------------------+\n| p                                          |\n+--------------------------------------------+\n| <(\"player102\")-[:serve@0 {}]->(\"team204\")> |\n+--------------------------------------------+\n
        nebula> FIND SHORTEST PATH WITH PROP FROM \"team204\" TO \"player100\" OVER * REVERSELY YIELD path AS p;\n+--------------------------------------------------------------------------------------------------------------------------------------+\n| p                                                                                                                                    |\n+--------------------------------------------------------------------------------------------------------------------------------------+\n| <(\"team204\" :team{name: \"Spurs\"})<-[:serve@0 {end_year: 2016, start_year: 1997}]-(\"player100\" :player{age: 42, name: \"Tim Duncan\"})> |\n+--------------------------------------------------------------------------------------------------------------------------------------+\n
        nebula> FIND SHORTEST PATH FROM \"player100\", \"player130\" TO \"player132\", \"player133\" OVER * BIDIRECT UPTO 18 STEPS YIELD path as p;\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| p                                                                                                                                                                                              |\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| <(\"player100\")<-[:follow@0 {}]-(\"player144\")<-[:follow@0 {}]-(\"player133\")>                                                                                                                    |\n| <(\"player100\")-[:serve@0 {}]->(\"team204\")<-[:serve@0 {}]-(\"player138\")-[:serve@0 {}]->(\"team225\")<-[:serve@0 {}]-(\"player132\")>                                                                |\n| <(\"player130\")-[:serve@0 {}]->(\"team219\")<-[:serve@0 {}]-(\"player112\")-[:serve@0 {}]->(\"team204\")<-[:serve@0 {}]-(\"player114\")<-[:follow@0 {}]-(\"player133\")>                                  |\n| <(\"player130\")-[:serve@0 {}]->(\"team219\")<-[:serve@0 {}]-(\"player109\")-[:serve@0 {}]->(\"team204\")<-[:serve@0 {}]-(\"player114\")<-[:follow@0 {}]-(\"player133\")>                                  |\n| <(\"player130\")-[:serve@0 {}]->(\"team219\")<-[:serve@0 {}]-(\"player104\")-[:serve@20182019 {}]->(\"team204\")<-[:serve@0 {}]-(\"player114\")<-[:follow@0 {}]-(\"player133\")>                           |\n| ...                                                                                                                                                                                            |\n| <(\"player130\")-[:serve@0 {}]->(\"team219\")<-[:serve@0 {}]-(\"player112\")-[:serve@0 {}]->(\"team204\")<-[:serve@0 {}]-(\"player138\")-[:serve@0 {}]->(\"team225\")<-[:serve@0 {}]-(\"player132\")>        |\n| <(\"player130\")-[:serve@0 {}]->(\"team219\")<-[:serve@0 {}]-(\"player109\")-[:serve@0 {}]->(\"team204\")<-[:serve@0 {}]-(\"player138\")-[:serve@0 {}]->(\"team225\")<-[:serve@0 {}]-(\"player132\")>        |\n| ...                                                                                                                                                                                            |\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n
        nebula> FIND ALL PATH FROM \"player100\" TO \"team204\" OVER * WHERE follow.degree is EMPTY or follow.degree >=0 YIELD path AS p;\n+------------------------------------------------------------------------------+\n| p                                                                            |\n+------------------------------------------------------------------------------+\n| <(\"player100\")-[:serve@0 {}]->(\"team204\")>                                   |\n| <(\"player100\")-[:follow@0 {}]->(\"player125\")-[:serve@0 {}]->(\"team204\")>     |\n| <(\"player100\")-[:follow@0 {}]->(\"player101\")-[:serve@0 {}]->(\"team204\")>     |\n|...                                                                           |\n+------------------------------------------------------------------------------+\n
        nebula> FIND NOLOOP PATH FROM \"player100\" TO \"team204\" OVER * YIELD path AS p;\n+--------------------------------------------------------------------------------------------------------+\n| p                                                                                                      |\n+--------------------------------------------------------------------------------------------------------+\n| <(\"player100\")-[:serve@0 {}]->(\"team204\")>                                                             |\n| <(\"player100\")-[:follow@0 {}]->(\"player125\")-[:serve@0 {}]->(\"team204\")>                               |\n| <(\"player100\")-[:follow@0 {}]->(\"player101\")-[:serve@0 {}]->(\"team204\")>                               |\n| <(\"player100\")-[:follow@0 {}]->(\"player101\")-[:follow@0 {}]->(\"player125\")-[:serve@0 {}]->(\"team204\")> |\n| <(\"player100\")-[:follow@0 {}]->(\"player101\")-[:follow@0 {}]->(\"player102\")-[:serve@0 {}]->(\"team204\")> |\n+--------------------------------------------------------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.find-path/#faq","title":"FAQ","text":""},{"location":"3.ngql-guide/7.general-query-statements/6.find-path/#does_it_support_the_where_clause_to_achieve_conditional_filtering_during_graph_traversal","title":"Does it support the WHERE clause to achieve conditional filtering during graph traversal?","text":"

        FIND PATH only supports filtering properties of edges with WHERE clauses, such as WHERE follow.degree is EMPTY or follow.degree >=0.

        Filtering properties of vertices is not supported for now.

        "},{"location":"3.ngql-guide/7.general-query-statements/7.get-subgraph/","title":"GET SUBGRAPH","text":"

        The GET SUBGRAPH statement returns a subgraph that is generated by traversing a graph starting from a specified vertex. GET SUBGRAPH statements allow you to specify the number of steps and the type or direction of edges during the traversal.

        "},{"location":"3.ngql-guide/7.general-query-statements/7.get-subgraph/#syntax","title":"Syntax","text":"
        GET SUBGRAPH [WITH PROP] [<step_count> {STEP|STEPS}] FROM {<vid>, <vid>...}\n[{IN | OUT | BOTH} <edge_type>, <edge_type>...]\n[WHERE <expression> [AND <expression> ...]]\nYIELD {[VERTICES AS <vertex_alias>] [,EDGES AS <edge_alias>]};\n
        • WITH PROP shows the properties. If not specified, the properties will be hidden.
        • step_count specifies the number of hops from the source vertices and returns the subgraph from 0 to step_count hops. It must be a non-negative integer. Its default value is 1.
        • vid specifies the vertex IDs.
        • edge_type specifies the edge type. You can use IN, OUT, and BOTH to specify the traversal direction of the edge type. The default is BOTH.
        • <WHERE clause> specifies the filter conditions for the traversal, which can be used with the boolean operator AND.
        • YIELD defines the output that needs to be returned. You can return only vertices or edges. A column alias must be set.

        Note

        The path type of GET SUBGRAPH is trail. Only vertices can be repeatedly visited in graph traversal. For more information, see Path.

        "},{"location":"3.ngql-guide/7.general-query-statements/7.get-subgraph/#limitations","title":"Limitations","text":"

        While using the WHERE clause in a GET SUBGRAPH statement, note the following restrictions:

        • Only support the AND operator.
        • Only support filter destination vertex, the vertex format must be $$.tagName.propName.
        • Support filter edge, the edge format must be edge_type.propName.
        • Support math functions, aggregate functions, string functions, datetime functions, type conversion functions and general functions in list functions.
        • Not support aggregate functions, schema-related functions, conditional expression, predicate functions, geography function and user-defined functions.
        "},{"location":"3.ngql-guide/7.general-query-statements/7.get-subgraph/#examples","title":"Examples","text":"

        The following graph is used as the sample.

        Insert the test data:

        nebula> CREATE SPACE IF NOT EXISTS subgraph(partition_num=15, replica_factor=1, vid_type=fixed_string(30));\nnebula> USE subgraph;\nnebula> CREATE TAG IF NOT EXISTS player(name string, age int);\nnebula> CREATE TAG IF NOT EXISTS team(name string);\nnebula> CREATE EDGE IF NOT EXISTS follow(degree int);\nnebula> CREATE EDGE IF NOT EXISTS serve(start_year int, end_year int);\nnebula> INSERT VERTEX player(name, age) VALUES \"player100\":(\"Tim Duncan\", 42);\nnebula> INSERT VERTEX player(name, age) VALUES \"player101\":(\"Tony Parker\", 36);\nnebula> INSERT VERTEX player(name, age) VALUES \"player102\":(\"LaMarcus Aldridge\", 33);\nnebula> INSERT VERTEX team(name) VALUES \"team203\":(\"Trail Blazers\"), \"team204\":(\"Spurs\");\nnebula> INSERT EDGE follow(degree) VALUES \"player101\" -> \"player100\":(95);\nnebula> INSERT EDGE follow(degree) VALUES \"player101\" -> \"player102\":(90);\nnebula> INSERT EDGE follow(degree) VALUES \"player102\" -> \"player100\":(75);\nnebula> INSERT EDGE serve(start_year, end_year) VALUES \"player101\" -> \"team204\":(1999, 2018),\"player102\" -> \"team203\":(2006,  2015);\n
        • This example goes one step from the vertex player101 over all edge types and gets the subgraph.
          nebula> GET SUBGRAPH 1 STEPS FROM \"player101\" YIELD VERTICES AS nodes, EDGES AS relationships;\n+-------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+\n| nodes                                                                   | relationships                                                                                                               |\n+-------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+\n| [(\"player101\" :player{})]                                               | [[:serve \"player101\"->\"team204\" @0 {}], [:follow \"player101\"->\"player100\" @0 {}], [:follow \"player101\"->\"player102\" @0 {}]] |\n| [(\"team204\" :team{}), (\"player100\" :player{}), (\"player102\" :player{})] | [[:follow \"player102\"->\"player100\" @0 {}]]                                                                                  |\n+-------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+\n

          The returned subgraph is as follows.

        • This example goes one step from the vertex player101 over incoming follow edges and gets the subgraph.
          nebula> GET SUBGRAPH 1 STEPS FROM \"player101\" IN follow YIELD VERTICES AS nodes, EDGES AS relationships;\n+---------------------------+---------------+\n| nodes                     | relationships |\n+---------------------------+---------------+\n| [(\"player101\" :player{})] | []            |\n+---------------------------+---------------+\n

          There is no incoming follow edge to player101, so only the vertex player101 is returned.

        • This example goes one step from the vertex player101 over outgoing serve edges, gets the subgraph, and shows the property of the edge.
          nebula> GET SUBGRAPH WITH PROP 1 STEPS FROM \"player101\" OUT serve YIELD VERTICES AS nodes, EDGES AS relationships;\n+-------------------------------------------------------+-------------------------------------------------------------------------+\n| nodes                                                 | relationships                                                           |\n+-------------------------------------------------------+-------------------------------------------------------------------------+\n| [(\"player101\" :player{age: 36, name: \"Tony Parker\"})] | [[:serve \"player101\"->\"team204\" @0 {end_year: 2018, start_year: 1999}]] |\n| [(\"team204\" :team{name: \"Spurs\"})]                    | []                                                                      |\n+-------------------------------------------------------+-------------------------------------------------------------------------+\n

          The returned subgraph is as follows.

        • This example goes two steps from the vertex player101 over follow edges, filters by degree > 90 and age > 30, and shows the properties of edges.
          nebula> GET SUBGRAPH WITH PROP 2 STEPS FROM \"player101\" \\\n    WHERE follow.degree > 90 AND $$.player.age > 30 \\\n    YIELD VERTICES AS nodes, EDGES AS relationships;\n+-------------------------------------------------------+------------------------------------------------------+\n| nodes                                                 | relationships                                        |\n+-------------------------------------------------------+------------------------------------------------------+\n| [(\"player101\" :player{age: 36, name: \"Tony Parker\"})] | [[:follow \"player101\"->\"player100\" @0 {degree: 95}]] |\n| [(\"player100\" :player{age: 42, name: \"Tim Duncan\"})]  | []                                                   |\n+-------------------------------------------------------+------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/7.get-subgraph/#faq","title":"FAQ","text":""},{"location":"3.ngql-guide/7.general-query-statements/7.get-subgraph/#why_is_the_number_of_hops_in_the_returned_result_greater_than_step_count","title":"Why is the number of hops in the returned result greater than step_count?","text":"

        To show the completeness of the subgraph, an additional hop is made on all vertices that meet the conditions. The following graph is used as the sample.

        • The returned paths of GET SUBGRAPH 1 STEPS FROM \"A\"; are A->B, B->A, and A->C. To show the completeness of the subgraph, an additional hop is made on all vertices that meet the conditions, namely B->C.
        • The returned path of GET SUBGRAPH 1 STEPS FROM \"A\" IN follow; is B->A. To show the completeness of the subgraph, an additional hop is made on all vertices that meet the conditions, namely A->B.

        If you only query paths or vertices that meet the conditions, we suggest you use MATCH or GO. The example is as follows.

        nebula> MATCH p= (v:player) -- (v2) WHERE id(v)==\"A\" RETURN p;\nnebula> GO 1 STEPS FROM \"A\" OVER follow YIELD src(edge),dst(edge);\n
        "},{"location":"3.ngql-guide/7.general-query-statements/7.get-subgraph/#why_is_the_number_of_hops_in_the_returned_result_lower_than_step_count","title":"Why is the number of hops in the returned result lower than step_count?","text":"

        The query stops when there is not enough subgraph data and will not return the null value.

        nebula> GET SUBGRAPH 100 STEPS FROM \"player101\" OUT follow YIELD VERTICES AS nodes, EDGES AS relationships;\n+----------------------------------------------------+--------------------------------------------------------------------------------------+\n| nodes                                              | relationships                                                                        |\n+----------------------------------------------------+--------------------------------------------------------------------------------------+\n| [(\"player101\" :player{})]                          | [[:follow \"player101\"->\"player100\" @0 {}], [:follow \"player101\"->\"player102\" @0 {}]] |\n| [(\"player100\" :player{}), (\"player102\" :player{})] | [[:follow \"player102\"->\"player100\" @0 {}]]                                           |\n+----------------------------------------------------+--------------------------------------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/optional-match/","title":"OPTIONAL MATCH","text":"

        Caution

        The feature is still in beta. It will continue to be optimized.

        The OPTIONAL MATCH clause is used to search for the pattern described in it. OPTIONAL MATCH matches patterns against your graph database, just like MATCH does. The difference is that if no matches are found, OPTIONAL MATCH will use a null for missing parts of the pattern.

        "},{"location":"3.ngql-guide/7.general-query-statements/optional-match/#opencypher_compatibility","title":"OpenCypher Compatibility","text":"

        This topic applies to the openCypher syntax in nGQL only.

        "},{"location":"3.ngql-guide/7.general-query-statements/optional-match/#limitations","title":"Limitations","text":"

        The WHERE clause cannot be used in an OPTIONAL MATCH clause.

        "},{"location":"3.ngql-guide/7.general-query-statements/optional-match/#example","title":"Example","text":"

        The example of the use of OPTIONAL MATCH in the MATCH statement is as follows:

        nebula> MATCH (m)-[]->(n) WHERE id(m)==\"player100\" \\\n        OPTIONAL MATCH (n)-[]->(l) \\\n        RETURN id(m),id(n),id(l);\n+-------------+-------------+-------------+\n| id(m)       | id(n)       | id(l)       |\n+-------------+-------------+-------------+\n| \"player100\" | \"team204\"   | __NULL__    |\n| \"player100\" | \"player101\" | \"team204\"   |\n| \"player100\" | \"player101\" | \"team215\"   |\n| \"player100\" | \"player101\" | \"player100\" |\n| \"player100\" | \"player101\" | \"player102\" |\n| \"player100\" | \"player101\" | \"player125\" |\n| \"player100\" | \"player125\" | \"team204\"   |\n| \"player100\" | \"player125\" | \"player100\" |\n+-------------+-------------+-------------+\n

        Using multiple MATCH instead of OPTIONAL MATCH returns rows that match the pattern exactly. The example is as follows:

        nebula> MATCH (m)-[]->(n) WHERE id(m)==\"player100\" \\\n        MATCH (n)-[]->(l) \\\n        RETURN id(m),id(n),id(l);\n+-------------+-------------+-------------+\n| id(m)       | id(n)       | id(l)       |\n+-------------+-------------+-------------+\n| \"player100\" | \"player101\" | \"team204\"   |\n| \"player100\" | \"player101\" | \"team215\"   |\n| \"player100\" | \"player101\" | \"player100\" |\n| \"player100\" | \"player101\" | \"player102\" |\n| \"player100\" | \"player101\" | \"player125\" |\n| \"player100\" | \"player125\" | \"team204\"   |\n| \"player100\" | \"player125\" | \"player100\" |\n+-------------+-------------+-------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/1.show-charset/","title":"SHOW CHARSET","text":"

        The SHOW CHARSET statement shows the available character sets.

        Currently available types are utf8 and utf8mb4. The default charset type is utf8. NebulaGraph extends the uft8 to support four-byte characters. Therefore utf8 and utf8mb4 are equivalent.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/1.show-charset/#syntax","title":"Syntax","text":"
        SHOW CHARSET;\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/1.show-charset/#example","title":"Example","text":"
        nebula> SHOW CHARSET;\n+---------+-----------------+-------------------+--------+\n| Charset | Description     | Default collation | Maxlen |\n+---------+-----------------+-------------------+--------+\n| \"utf8\"  | \"UTF-8 Unicode\" | \"utf8_bin\"        | 4      |\n+---------+-----------------+-------------------+--------+\n
        Parameter Description Charset The name of the character set. Description The description of the character set. Default collation The default collation of the character set. Maxlen The maximum number of bytes required to store one character."},{"location":"3.ngql-guide/7.general-query-statements/6.show/10.show-roles/","title":"SHOW ROLES","text":"

        The SHOW ROLES statement shows the roles that are assigned to a user account.

        The return message differs according to the role of the user who is running this statement:

        • If the user is a GOD or ADMIN and is granted access to the specified graph space, NebulaGraph shows all roles in this graph space except for GOD.
        • If the user is a DBA, USER, or GUEST and is granted access to the specified graph space, NebulaGraph shows the user's own role in this graph space.
        • If the user does not have access to the specified graph space, NebulaGraph returns PermissionError.

        For more information about roles, see Roles and privileges.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/10.show-roles/#syntax","title":"Syntax","text":"
        SHOW ROLES IN <space_name>;\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/10.show-roles/#example","title":"Example","text":"
        nebula> SHOW ROLES in basketballplayer;\n+---------+-----------+\n| Account | Role Type |\n+---------+-----------+\n| \"user1\" | \"ADMIN\"   |\n+---------+-----------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/11.show-snapshots/","title":"SHOW SNAPSHOTS","text":"

        The SHOW SNAPSHOTS statement shows the information of all the snapshots.

        For how to create a snapshot and backup data, see Snapshot.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/11.show-snapshots/#role_requirement","title":"Role requirement","text":"

        Only the root user who has the GOD role can use the SHOW SNAPSHOTS statement.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/11.show-snapshots/#syntax","title":"Syntax","text":"
        SHOW SNAPSHOTS;\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/11.show-snapshots/#example","title":"Example","text":"
        nebula> SHOW SNAPSHOTS;\n+--------------------------------+---------+-----------------------------------------------------+\n| Name                           | Status  | Hosts                                               |\n+--------------------------------+---------+-----------------------------------------------------+\n| \"SNAPSHOT_2020_12_16_11_13_55\" | \"VALID\" | \"storaged0:9779, storaged1:9779, storaged2:9779\"    |\n| \"SNAPSHOT_2020_12_16_11_14_10\" | \"VALID\" | \"storaged0:9779, storaged1:9779, storaged2:9779\"    |\n+--------------------------------+---------+-----------------------------------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/12.show-spaces/","title":"SHOW SPACES","text":"

        The SHOW SPACES statement shows existing graph spaces in NebulaGraph.

        For how to create a graph space, see CREATE SPACE.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/12.show-spaces/#syntax","title":"Syntax","text":"
        SHOW SPACES;\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/12.show-spaces/#example","title":"Example","text":"
        nebula> SHOW SPACES;\n+---------------------+\n| Name                |\n+---------------------+\n| \"docs\"              |\n| \"basketballplayer\"  |\n+---------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/14.show-stats/","title":"SHOW STATS","text":"

        The SHOW STATS statement shows the statistics of the graph space collected by the latest SUBMIT JOB STATS job.

        The statistics include the following information:

        • The number of vertices in the graph space
        • The number of edges in the graph space
        • The number of vertices of each tag
        • The number of edges of each edge type

        Warning

        The data returned by SHOW STATS is not real-time. The returned data is collected by the latest SUBMIT JOB STATS job and may include TTL-expired data. The expired data will be deleted and not included in the statistics the next time the Compaction operation is performed.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/14.show-stats/#prerequisites","title":"Prerequisites","text":"

        You have to run the SUBMIT JOB STATS statement in the graph space where you want to collect statistics. For more information, see SUBMIT JOB STATS.

        Caution

        The result of the SHOW STATS statement is based on the last executed SUBMIT JOB STATS statement. If you want to update the result, run SUBMIT JOB STATS again. Otherwise the statistics will be wrong.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/14.show-stats/#syntax","title":"Syntax","text":"
        SHOW STATS;\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/14.show-stats/#examples","title":"Examples","text":"
        # Choose a graph space.\nnebula> USE basketballplayer;\n\n# Start SUBMIT JOB STATS.\nnebula> SUBMIT JOB STATS;\n+------------+\n| New Job Id |\n+------------+\n| 98         |\n+------------+\n\n# Make sure the job executes successfully.\nnebula> SHOW JOB 98;\n+----------------+---------------+------------+----------------------------+----------------------------+-------------+\n| Job Id(TaskId) | Command(Dest) | Status     | Start Time                 | Stop Time                  | Error Code  |\n+----------------+---------------+------------+----------------------------+----------------------------+-------------+\n| 98             | \"STATS\"       | \"FINISHED\" | 2021-11-01T09:33:21.000000 | 2021-11-01T09:33:21.000000 | \"SUCCEEDED\" |\n| 0              | \"storaged2\"   | \"FINISHED\" | 2021-11-01T09:33:21.000000 | 2021-11-01T09:33:21.000000 | \"SUCCEEDED\" |\n| 1              | \"storaged0\"   | \"FINISHED\" | 2021-11-01T09:33:21.000000 | 2021-11-01T09:33:21.000000 | \"SUCCEEDED\" |\n| 2              | \"storaged1\"   | \"FINISHED\" | 2021-11-01T09:33:21.000000 | 2021-11-01T09:33:21.000000 | \"SUCCEEDED\" |\n| \"Total:3\"      | \"Succeeded:3\" | \"Failed:0\" | \"In Progress:0\"            | \"\"                         | \"\"          |\n+----------------+---------------+------------+----------------------------+----------------------------+-------------+\n\n# Show the statistics of the graph space.\nnebula> SHOW STATS;\n+---------+------------+-------+\n| Type    | Name       | Count |\n+---------+------------+-------+\n| \"Tag\"   | \"player\"   | 51    |\n| \"Tag\"   | \"team\"     | 30    |\n| \"Edge\"  | \"follow\"   | 81    |\n| \"Edge\"  | \"serve\"    | 152   |\n| \"Space\" | \"vertices\" | 81    |\n| \"Space\" | \"edges\"    | 233   |\n+---------+------------+-------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/15.show-tags-edges/","title":"SHOW TAGS/EDGES","text":"

        The SHOW TAGS statement shows all the tags in the current graph space.

        The SHOW EDGES statement shows all the edge types in the current graph space.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/15.show-tags-edges/#syntax","title":"Syntax","text":"
        SHOW {TAGS | EDGES};\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/15.show-tags-edges/#examples","title":"Examples","text":"
        nebula> SHOW TAGS;\n+----------+\n| Name     |\n+----------+\n| \"player\" |\n| \"star\"   |\n| \"team\"   |\n+----------+\n\nnebula> SHOW EDGES;\n+----------+\n| Name     |\n+----------+\n| \"follow\" |\n| \"serve\"  |\n+----------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/16.show-users/","title":"SHOW USERS","text":"

        The SHOW USERS statement shows the user information.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/16.show-users/#role_requirement","title":"Role requirement","text":"

        Only the root user who has the GOD role can use the SHOW USERS statement.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/16.show-users/#syntax","title":"Syntax","text":"
        SHOW USERS;\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/16.show-users/#example","title":"Example","text":"
        nebula> SHOW USERS;\n+---------+-----------------+\n| Account | IP Whitelist    |\n+---------+-----------------+\n| \"root\"  | \"\"              |\n| \"user1\" | \"\"              |\n| \"user2\" | \"192.168.10.10\" |\n+---------+-----------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/17.show-sessions/","title":"SHOW SESSIONS","text":"

        When a user logs in to the database, a corresponding session will be created and users can query for session information.

        The SHOW SESSIONS statement shows the information of all the sessions. It can also show a specified session with its ID.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/17.show-sessions/#precautions","title":"Precautions","text":"
        • The client will call the API release to release the session and clear the session information when you run exit after the operation ends. If you exit the database in an unexpected way and the session timeout duration is not set via session_idle_timeout_secs in nebula-graphd.conf, the session will not be released automatically. For those sessions that are not automatically released, you need to delete them manually. For details, see KILL SESSIONS.
        • SHOW SESSIONS queries the session information of all the Graph services.
        • SHOW LOCAL SESSIONS queries the session information of the currently connected Graph service and does not query the session information of other Graph services.
        • SHOW SESSION <Session_Id> queries the session information with a specific session id.
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/17.show-sessions/#syntax","title":"Syntax","text":"
        SHOW [LOCAL] SESSIONS;\nSHOW SESSION <Session_Id>;\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/17.show-sessions/#examples","title":"Examples","text":"
        nebula> SHOW SESSIONS;\n+------------------+----------+--------------------+----------------------------+----------------------------+------------------+----------+--------------------+\n| SessionId        | UserName | SpaceName          | CreateTime                 | UpdateTime                 | GraphAddr        | Timezone | ClientIp           |\n+------------------+----------+--------------------+----------------------------+----------------------------+------------------+----------+--------------------+\n| 1651220858102296 | \"root\"   | \"basketballplayer\" | 2022-04-29T08:27:38.102296 | 2022-04-29T08:50:46.282921 | \"127.0.0.1:9669\" | 0        | \"127.0.0.1\" |\n| 1651199330300991 | \"root\"   | \"basketballplayer\" | 2022-04-29T02:28:50.300991 | 2022-04-29T08:16:28.339038 | \"127.0.0.1:9669\" | 0        | \"127.0.0.1\" |\n| 1651112899847744 | \"root\"   | \"basketballplayer\" | 2022-04-28T02:28:19.847744 | 2022-04-28T08:17:44.470210 | \"127.0.0.1:9669\" | 0        | \"127.0.0.1\" |\n| 1651041092662100 | \"root\"   | \"basketballplayer\" | 2022-04-27T06:31:32.662100 | 2022-04-27T07:01:25.200978 | \"127.0.0.1:9669\" | 0        | \"127.0.0.1\" |\n| 1650959429593975 | \"root\"   | \"basketballplayer\" | 2022-04-26T07:50:29.593975 | 2022-04-26T07:51:47.184810 | \"127.0.0.1:9669\" | 0        | \"127.0.0.1\" |\n| 1650958897679595 | \"root\"   | \"\"                 | 2022-04-26T07:41:37.679595 | 2022-04-26T07:41:37.683802 | \"127.0.0.1:9669\" | 0        | \"127.0.0.1\" |\n+------------------+----------+--------------------+----------------------------+----------------------------+------------------+----------+--------------------+\n\nnebula> SHOW SESSION 1635254859271703;\n+------------------+----------+--------------------+----------------------------+----------------------------+------------------+----------+--------------------+\n| SessionId        | UserName | SpaceName          | CreateTime                 | UpdateTime                 | GraphAddr        | Timezone | ClientIp           |\n+------------------+----------+--------------------+----------------------------+----------------------------+------------------+----------+--------------------+\n| 1651220858102296 | \"root\"   | \"basketballplayer\" | 2022-04-29T08:27:38.102296 | 2022-04-29T08:50:54.254384 | \"127.0.0.1:9669\" | 0        | \"127.0.0.1\" |\n+------------------+----------+--------------------+----------------------------+----------------------------+------------------+----------+--------------------+\n
        Parameter Description SessionId The session ID, namely the identifier of a session. UserName The username in a session. SpaceName The name of the graph space that the user uses currently. It is null (\"\") when you first log in because there is no specified graph space. CreateTime The time when the session is created, namely the time when the user logs in. The time zone is specified by timezone_name in the configuration file. UpdateTime The system will update the time when there is an operation. The time zone is specified by timezone_name in the configuration file. GraphAddr The IP (or hostname) and port of the Graph server that hosts the session. Timezone A reserved parameter that has no specified meaning for now. ClientIp The IP or hostname of the client."},{"location":"3.ngql-guide/7.general-query-statements/6.show/18.show-queries/","title":"SHOW QUERIES","text":"

        The SHOW QUERIES statement shows the information of working queries in the current session.

        Note

        To terminate queries, see Kill Query.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/18.show-queries/#precautions","title":"Precautions","text":"
        • The SHOW LOCAL QUERIES statement gets the status of queries in the current session from the local cache with almost no latency.
        • The SHOW QUERIES statement gets the information of queries in all the sessions from the Meta Service. The information will be synchronized to the Meta Service according to the interval defined by session_reclaim_interval_secs. Therefore the information that you get from the client may belong to the last synchronization interval.
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/18.show-queries/#syntax","title":"Syntax","text":"
        SHOW [LOCAL] QUERIES;\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/18.show-queries/#examples","title":"Examples","text":"
        nebula> SHOW LOCAL QUERIES;\n+------------------+-----------------+--------+----------------------+----------------------------+----------------+-----------+-----------------------+\n| SessionID        | ExecutionPlanID | User   | Host                 | StartTime                  | DurationInUSec | Status    | Query                 |\n+------------------+-----------------+--------+----------------------+----------------------------+----------------+-----------+-----------------------+\n| 1625463842921750 | 46              | \"root\" | \"\"192.168.x.x\":9669\" | 2021-07-05T05:44:19.502903 | 0              | \"RUNNING\" | \"SHOW LOCAL QUERIES;\" |\n+------------------+-----------------+--------+----------------------+----------------------------+----------------+-----------+-----------------------+\n\nnebula> SHOW QUERIES;\n+------------------+-----------------+---------+----------------------+----------------------------+----------------+-----------+---------------------------------------------------------+\n| SessionID        | ExecutionPlanID | User    | Host                 | StartTime                  | DurationInUSec | Status    | Query                                                   |\n+------------------+-----------------+---------+----------------------+----------------------------+----------------+-----------+---------------------------------------------------------+\n| 1625456037718757 | 54              | \"user1\" | \"\"192.168.x.x\":9669\" | 2021-07-05T05:51:08.691318 | 1504502        | \"RUNNING\" | \"MATCH p=(v:player)-[*1..4]-(v2) RETURN v2 AS Friends;\" |\n+------------------+-----------------+---------+----------------------+----------------------------+----------------+-----------+---------------------------------------------------------+\n\n# The following statement returns the top 10 queries that have the longest duration.\nnebula> SHOW QUERIES | ORDER BY $-.DurationInUSec DESC | LIMIT 10;\n+------------------+-----------------+---------+----------------------+----------------------------+----------------+-----------+-------------------------------------------------------+\n| SessionID        | ExecutionPlanID | User    | Host                 | StartTime                  | DurationInUSec | Status    | Query                                                 |\n+------------------+-----------------+---------+----------------------+----------------------------+----------------+-----------+-------------------------------------------------------+\n| 1625471375320831 | 98              | \"user2\" | \"\"192.168.x.x\":9669\" | 2021-07-05T07:50:24.461779 | 2608176        | \"RUNNING\" | \"MATCH (v:player)-[*1..4]-(v2) RETURN v2 AS Friends;\" |\n| 1625456037718757 | 99              | \"user1\" | \"\"192.168.x.x\":9669\" | 2021-07-05T07:50:24.910616 | 2159333        | \"RUNNING\" | \"MATCH (v:player)-[*1..4]-(v2) RETURN v2 AS Friends;\" |\n+------------------+-----------------+---------+----------------------+----------------------------+----------------+-----------+-------------------------------------------------------+\n

        The descriptions are as follows.

        Parameter Description SessionID The session ID. ExecutionPlanID The ID of the execution plan. User The username that executes the query. Host The IP address and port of the Graph server that hosts the session. StartTime The time when the query starts. DurationInUSec The duration of the query. The unit is microsecond. Status The current status of the query. Query The query statement."},{"location":"3.ngql-guide/7.general-query-statements/6.show/19.show-meta-leader/","title":"SHOW META LEADER","text":"

        The SHOW META LEADER statement shows the information of the leader in the current Meta cluster.

        For more information about the Meta service, see Meta service.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/19.show-meta-leader/#syntax","title":"Syntax","text":"
        SHOW META LEADER;\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/19.show-meta-leader/#example","title":"Example","text":"
        nebula> SHOW META LEADER;\n+------------------+---------------------------+\n| Meta Leader      | secs from last heart beat |\n+------------------+---------------------------+\n| \"127.0.0.1:9559\" | 3                         |\n+------------------+---------------------------+\n
        Parameter Description Meta Leader Shows the information of the leader in the Meta cluster, including the IP (or hostname) and port of the server where the leader is located. secs from last heart beat Indicates the time interval since the last heartbeat. This parameter is measured in seconds."},{"location":"3.ngql-guide/7.general-query-statements/6.show/2.show-collation/","title":"SHOW COLLATION","text":"

        The SHOW COLLATION statement shows the collations supported by NebulaGraph.

        Currently available types are: utf8_bin and utf8mb4_bin.

        • When the character set is utf8, the default collate is utf8_bin.
        • When the character set is utf8mb4, the default collate is utf8mb4_bin.
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/2.show-collation/#syntax","title":"Syntax","text":"
        SHOW COLLATION;\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/2.show-collation/#example","title":"Example","text":"
        nebula> SHOW COLLATION;\n+------------+---------+\n| Collation  | Charset |\n+------------+---------+\n| \"utf8_bin\" | \"utf8\"  |\n+------------+---------+\n
        Parameter Description Collation The name of the collation. Charset The name of the character set with which the collation is associated."},{"location":"3.ngql-guide/7.general-query-statements/6.show/4.show-create-space/","title":"SHOW CREATE SPACE","text":"

        The SHOW CREATE SPACE statement shows the creating statement of the specified graph space.

        For details about the graph space information, see CREATE SPACE.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/4.show-create-space/#syntax","title":"Syntax","text":"
        SHOW CREATE SPACE <space_name>;\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/4.show-create-space/#example","title":"Example","text":"
        nebula> SHOW CREATE SPACE basketballplayer;\n+--------------------+---------------------------------------------------------------------------------------------------------------------------------------------+\n| Space              | Create Space                                                                                                                                |\n+--------------------+---------------------------------------------------------------------------------------------------------------------------------------------+\n| \"basketballplayer\" | \"CREATE SPACE `basketballplayer` (partition_num = 10, replica_factor = 1, charset = utf8, collate = utf8_bin, vid_type = FIXED_STRING(32))\" |\n+--------------------+---------------------------------------------------------------------------------------------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/5.show-create-tag-edge/","title":"SHOW CREATE TAG/EDGE","text":"

        The SHOW CREATE TAG statement shows the basic information of the specified tag. For details about the tag, see CREATE TAG.

        The SHOW CREATE EDGE statement shows the basic information of the specified edge type. For details about the edge type, see CREATE EDGE.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/5.show-create-tag-edge/#syntax","title":"Syntax","text":"
        SHOW CREATE {TAG <tag_name> | EDGE <edge_name>};\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/5.show-create-tag-edge/#examples","title":"Examples","text":"
        nebula> SHOW CREATE TAG player;\n+----------+-----------------------------------+\n| Tag      | Create Tag                        |\n+----------+-----------------------------------+\n| \"player\" | \"CREATE TAG `player` (            |\n|          |  `name` string NULL,              |\n|          |  `age` int64 NULL                 |\n|          | ) ttl_duration = 0, ttl_col = \"\"\" |\n+----------+-----------------------------------+\n\nnebula> SHOW CREATE EDGE follow;\n+----------+-----------------------------------+\n| Edge     | Create Edge                       |\n+----------+-----------------------------------+\n| \"follow\" | \"CREATE EDGE `follow` (           |\n|          |  `degree` int64 NULL              |\n|          | ) ttl_duration = 0, ttl_col = \"\"\" |\n+----------+-----------------------------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/6.show-hosts/","title":"SHOW HOSTS","text":"

        The SHOW HOSTS statement shows the cluster information, including the port, status, leader, partition, and version information. You can also add the service type in the statement to view the information of the specific service.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/6.show-hosts/#syntax","title":"Syntax","text":"
        SHOW HOSTS [GRAPH | STORAGE | META];\n

        Note

        For a NebulaGraph cluster installed with the source code, the version of the cluster will not be displayed in the output after executing the command SHOW HOSTS (GRAPH | STORAGE | META) with the service name.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/6.show-hosts/#examples","title":"Examples","text":"
        nebula> SHOW HOSTS;\n+-------------+-------+----------+--------------+----------------------------------+------------------------------+---------+\n| Host        | Port  | Status   | Leader count | Leader distribution              | Partition distribution       | Version |\n+-------------+-------+----------+--------------+----------------------------------+------------------------------+---------+\n| \"storaged0\" | 9779  | \"ONLINE\" | 8            | \"docs:5, basketballplayer:3\"     | \"docs:5, basketballplayer:3\" | \"master\" |\n| \"storaged1\" | 9779  | \"ONLINE\" | 9            | \"basketballplayer:4, docs:5\"     | \"docs:5, basketballplayer:4\" | \"master\" |\n| \"storaged2\" | 9779  | \"ONLINE\" | 8            | \"basketballplayer:3, docs:5\"     | \"docs:5, basketballplayer:3\" | \"master\" |\n+-------------+-------+----------+--------------+----------------------------------+------------------------------+---------+\n\nnebula> SHOW HOSTS GRAPH;\n+-----------+------+----------+---------+--------------+---------+\n| Host      | Port | Status   | Role    | Git Info Sha | Version |\n+-----------+------+----------+---------+--------------+---------+\n| \"graphd\"  | 9669 | \"ONLINE\" | \"GRAPH\" | \"3ba41bd\"    | \"master\" |\n| \"graphd1\" | 9669 | \"ONLINE\" | \"GRAPH\" | \"3ba41bd\"    | \"master\" |\n| \"graphd2\" | 9669 | \"ONLINE\" | \"GRAPH\" | \"3ba41bd\"    | \"master\" |\n+-----------+------+----------+---------+--------------+---------+\n\nnebula> SHOW HOSTS STORAGE;\n+-------------+------+----------+-----------+--------------+---------+\n| Host        | Port | Status   | Role      | Git Info Sha | Version |\n+-------------+------+----------+-----------+--------------+---------+\n| \"storaged0\" | 9779 | \"ONLINE\" | \"STORAGE\" | \"3ba41bd\"    | \"master\" |\n| \"storaged1\" | 9779 | \"ONLINE\" | \"STORAGE\" | \"3ba41bd\"    | \"master\" |\n| \"storaged2\" | 9779 | \"ONLINE\" | \"STORAGE\" | \"3ba41bd\"    | \"master\" |\n+-------------+------+----------+-----------+--------------+---------+\n\nnebula> SHOW HOSTS META;\n+----------+------+----------+--------+--------------+---------+\n| Host     | Port | Status   | Role   | Git Info Sha | Version |\n+----------+------+----------+--------+--------------+---------+\n| \"metad2\" | 9559 | \"ONLINE\" | \"META\" | \"3ba41bd\"    | \"master\" |\n| \"metad0\" | 9559 | \"ONLINE\" | \"META\" | \"3ba41bd\"    | \"master\" |\n| \"metad1\" | 9559 | \"ONLINE\" | \"META\" | \"3ba41bd\"    | \"master\" |\n+----------+------+----------+--------+--------------+---------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/7.show-index-status/","title":"SHOW INDEX STATUS","text":"

        The SHOW INDEX STATUS statement shows the status of jobs that rebuild native indexes, which helps check whether a native index is successfully rebuilt or not.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/7.show-index-status/#syntax","title":"Syntax","text":"
        SHOW {TAG | EDGE} INDEX STATUS;\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/7.show-index-status/#examples","title":"Examples","text":"
        nebula> SHOW TAG INDEX STATUS;\n+------------------------------------+--------------+\n| Name                               | Index Status |\n+------------------------------------+--------------+\n| \"date1_index\"                      | \"FINISHED\"   |\n| \"basketballplayer_all_tag_indexes\" | \"FINISHED\"   |\n| \"any_shape_geo_index\"              | \"FINISHED\"   |\n+------------------------------------+--------------+\n\nnebula> SHOW EDGE INDEX STATUS;\n+----------------+--------------+\n| Name           | Index Status |\n+----------------+--------------+\n| \"follow_index\" | \"FINISHED\"   |\n+----------------+--------------+\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/7.show-index-status/#related_topics","title":"Related topics","text":"
        • Job manager and the JOB statements
        • REBUILD NATIVE INDEX
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/8.show-indexes/","title":"SHOW INDEXES","text":"

        The SHOW INDEXES statement shows the names of existing native indexes.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/8.show-indexes/#syntax","title":"Syntax","text":"
        SHOW {TAG | EDGE} INDEXES;\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/8.show-indexes/#examples","title":"Examples","text":"
        nebula> SHOW TAG INDEXES;\n+------------------+----------+----------+\n| Index Name       | By Tag   | Columns  |\n+------------------+----------+----------+\n| \"player_index_0\" | \"player\" | []       |\n| \"player_index_1\" | \"player\" | [\"name\"] |\n+------------------+----------+----------+\n\nnebula> SHOW EDGE INDEXES;\n+----------------+----------+---------+\n| Index Name     | By Edge  | Columns |\n+----------------+----------+---------+\n| \"follow_index\" | \"follow\" | []      |\n+----------------+----------+---------+\n

        Legacy version compatibility

        In NebulaGraph 2.x, SHOW TAG/EDGE INDEXES only returns Names.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/9.show-parts/","title":"SHOW PARTS","text":"

        The SHOW PARTS statement shows the information of a specified partition or all partitions in a graph space.

        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/9.show-parts/#syntax","title":"Syntax","text":"
        SHOW PARTS [<part_id>];\n
        "},{"location":"3.ngql-guide/7.general-query-statements/6.show/9.show-parts/#examples","title":"Examples","text":"
        nebula> SHOW PARTS;\n+--------------+--------------------+--------------------+-------+\n| Partition ID | Leader             | Peers              | Losts |\n+--------------+--------------------+--------------------+-------+\n| 1            | \"192.168.2.1:9779\" | \"192.168.2.1:9779\" | \"\"    |\n| 2            | \"192.168.2.2:9779\" | \"192.168.2.2:9779\" | \"\"    |\n| 3            | \"192.168.2.3:9779\" | \"192.168.2.3:9779\" | \"\"    |\n| 4            | \"192.168.2.1:9779\" | \"192.168.2.1:9779\" | \"\"    |\n| 5            | \"192.168.2.2:9779\" | \"192.168.2.2:9779\" | \"\"    |\n| 6            | \"192.168.2.3:9779\" | \"192.168.2.3:9779\" | \"\"    |\n| 7            | \"192.168.2.1:9779\" | \"192.168.2.1:9779\" | \"\"    |\n| 8            | \"192.168.2.2:9779\" | \"192.168.2.2:9779\" | \"\"    |\n| 9            | \"192.168.2.3:9779\" | \"192.168.2.3:9779\" | \"\"    |\n| 10           | \"192.168.2.1:9779\" | \"192.168.2.1:9779\" | \"\"    |\n+--------------+--------------------+--------------------+-------+\n\nnebula> SHOW PARTS 1;\n+--------------+--------------------+--------------------+-------+\n| Partition ID | Leader             | Peers              | Losts |\n+--------------+--------------------+--------------------+-------+\n| 1            | \"192.168.2.1:9779\" | \"192.168.2.1:9779\" | \"\"    |\n+--------------+--------------------+--------------------+-------+\n

        The descriptions are as follows.

        Parameter Description Partition ID The ID of the partition. Leader The IP (or hostname) and the port of the leader. Peers The IPs (or hostnames) and the ports of all the replicas. Losts The IPs (or hostnames) and the ports of replicas at fault."},{"location":"3.ngql-guide/8.clauses-and-options/group-by/","title":"GROUP BY","text":"

        The GROUP BY clause can be used to aggregate data.

        "},{"location":"3.ngql-guide/8.clauses-and-options/group-by/#opencypher_compatibility","title":"OpenCypher Compatibility","text":"

        This topic applies to native nGQL only.

        You can also use the count() function to aggregate data.

        nebula>  MATCH (v:player)<-[:follow]-(:player) RETURN v.player.name AS Name, count(*) as cnt ORDER BY cnt DESC;\n+----------------------+-----+\n| Name                 | cnt |\n+----------------------+-----+\n| \"Tim Duncan\"         | 10  |\n| \"LeBron James\"       | 6   |\n| \"Tony Parker\"        | 5   |\n| \"Chris Paul\"         | 4   |\n| \"Manu Ginobili\"      | 4   |\n+----------------------+-----+\n...\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/group-by/#syntax","title":"Syntax","text":"

        The GROUP BY clause groups the rows with the same value. Then operations such as counting, sorting, and calculation can be applied.

        The GROUP BY clause works after the pipe symbol (|) and before a YIELD clause.

        | GROUP BY <var> YIELD <var>, <aggregation_function(var)>\n

        The aggregation_function() function supports avg(), sum(), max(), min(), count(), collect(), and std().

        "},{"location":"3.ngql-guide/8.clauses-and-options/group-by/#examples","title":"Examples","text":"

        The following statement finds all the vertices connected directly to vertex \"player100\", groups the result set by player names, and counts how many times the name shows up in the result set.

        nebula> GO FROM \"player100\" OVER follow BIDIRECT \\\n        YIELD properties($$).name as Name \\\n        | GROUP BY $-.Name \\\n        YIELD $-.Name as Player, count(*) AS Name_Count;\n+---------------------+------------+\n| Player              | Name_Count |\n+---------------------+------------+\n| \"Shaquille O'Neal\"  | 1          |\n| \"Tiago Splitter\"    | 1          |\n| \"Manu Ginobili\"     | 2          |\n| \"Boris Diaw\"        | 1          |\n| \"LaMarcus Aldridge\" | 1          |\n| \"Tony Parker\"       | 2          |\n| \"Marco Belinelli\"   | 1          |\n| \"Dejounte Murray\"   | 1          |\n| \"Danny Green\"       | 1          |\n| \"Aron Baynes\"       | 1          |\n+---------------------+------------+\n

        The following statement finds all the vertices connected directly to vertex \"player100\", groups the result set by source vertices, and returns the sum of degree values.

        nebula> GO FROM \"player100\" OVER follow \\\n        YIELD src(edge) AS player, properties(edge).degree AS degree \\\n        | GROUP BY $-.player \\\n        YIELD sum($-.degree);\n+----------------+\n| sum($-.degree) |\n+----------------+\n| 190            |\n+----------------+\n

        For more information about the sum() function, see Built-in math functions.

        "},{"location":"3.ngql-guide/8.clauses-and-options/group-by/#implicit_group_by","title":"Implicit GROUP BY","text":"

        The usage of GROUP BY in the above nGQL statements that explicitly write GROUP BY and act as grouping fields is called explicit GROUP BY, while in openCypher, the GROUP BY is implicit, i.e., GROUP BY groups fields without explicitly writing GROUP BY. The explicit GROUP BY in nGQL is the same as the implicit GROUP BY in openCypher, and nGQL also supports the implicit GROUP BY. For the implicit usage of GROUP BY, see Stack Overflow.

        For example, to look up the players over 34 years old with the same length of service, you can use the following statement:

        nebula> LOOKUP ON player WHERE player.age > 34 YIELD id(vertex) AS v | \\\n        GO FROM $-.v OVER serve YIELD serve.start_year AS start_year, serve.end_year AS end_year | \\\n        YIELD $-.start_year, $-.end_year, count(*) AS count | \\\n        ORDER BY $-.count DESC | LIMIT 5;\n+---------------+-------------+-------+\n| $-.start_year | $-.end_year | count |\n+---------------+-------------+-------+\n| 2018          | 2019        | 3     |\n| 2007          | 2012        | 2     |\n| 1998          | 2004        | 2     |\n| 2017          | 2018        | 2     |\n| 2010          | 2011        | 2     |\n+---------------+-------------+-------+ \n
        "},{"location":"3.ngql-guide/8.clauses-and-options/joins/","title":"INNER JOIN","text":"

        INNER JOIN is a type of join query that matches records based on common column values between two tables. It is commonly used to create a result set that includes two tables based on values in their associated columns. In NebulaGraph, the INNER JOIN clause can be explicitly used to conduct join queries between two tables, leading to more complex query results.

        Note

        In nGQL statements, the multi-hop query of GO implicitly utilizes the INNER JOIN clause. For example, in the statement GO 1 TO 2 STEPS FROM \"player101\" OVER follow YIELD $$.player.name AS name, $$.player.age AS age, the GO clause implicitly utilizes the INNER JOIN clause, matching the result columns of the first-hop query starting from player101 along the follow edge with the starting columns of the second-hop query. Then, based on the matching results, it returns name and age.

        "},{"location":"3.ngql-guide/8.clauses-and-options/joins/#opencypher_compatibility","title":"openCypher compatibility","text":"

        The INNER JOIN clause is only applicable to the native nGQL syntax.

        "},{"location":"3.ngql-guide/8.clauses-and-options/joins/#syntax","title":"Syntax","text":"
        YIELD <column_name_list>\nFROM <first_table> INNER JOIN <second_table> ON <join_condition>\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/joins/#notes","title":"Notes","text":"

        To conduct an INNER JOIN query, you need to follow these rules:

        • Use the YIELD clause to specify the returned columns, and place it before the INNER JOIN clause.
        • Use the FROM clause to specify the two tables to be joined.
        • The INNER JOIN clause must contain the ON clause, which specifies the join condition. The join condition only supports equi-join (i.e., ==).
        • <first_table> and <second_table> are the two tables to be joined, and the two table names cannot be the same.
        • Use user-defined variables to specify the table names. For more information, see User-defined variables.
        "},{"location":"3.ngql-guide/8.clauses-and-options/joins/#examples","title":"Examples","text":"

        The following examples show how to use the INNER JOIN clause to join the results of two queries in nGQL statements.

        "},{"location":"3.ngql-guide/8.clauses-and-options/joins/#example_1","title":"Example 1","text":"

        Firstly, the dst column obtained from the initial LOOK UP operation (whose value for Tony Parker has an ID of player101) is connected with the src column obtained from the second GO query (which has IDs player101 and player125). By matching the two columns where player101 appears on both sides, we obtain the resulting data set. The final request then uses a YIELD statement YIELD $b.vid AS vid, $a.v AS v, $b.e2 AS e2 to display the information.

        nebula> $a = LOOKUP ON player WHERE player.name == 'Tony Parker' YIELD id(vertex) as dst, vertex AS v; \\\n        $b = GO FROM 'player101', 'player125' OVER follow YIELD id($^) as src, id($$) as vid, edge AS e2; \\\n        YIELD $b.vid AS vid, $a.v AS v, $b.e2 AS e2 FROM $a INNER JOIN $b ON $a.dst == $b.src;\n+-------------+-----------------------------------------------------+----------------------------------------------------+\n| vid         | v                                                   | e2                                                 |\n+-------------+-----------------------------------------------------+----------------------------------------------------+\n| \"player100\" | (\"player101\" :player{age: 36, name: \"Tony Parker\"}) | [:follow \"player101\"->\"player100\" @0 {degree: 95}] |\n| \"player102\" | (\"player101\" :player{age: 36, name: \"Tony Parker\"}) | [:follow \"player101\"->\"player102\" @0 {degree: 90}] |\n| \"player125\" | (\"player101\" :player{age: 36, name: \"Tony Parker\"}) | [:follow \"player101\"->\"player125\" @0 {degree: 95}] |\n+-------------+-----------------------------------------------------+----------------------------------------------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/joins/#example_2","title":"Example 2","text":"

        The following nGQL example utilizes the INNER JOIN clause to combine the src column from the first LOOKUP query (with player101 as ID for Tony Parker) and the src column from the second FETCH query (with player101 being the starting point to player100). By matching player101 in both source columns, we obtain the resulting data set. The final request then utilizes a YIELD clause YIELD $a.src AS src, $a.v AS v, $b.e AS e to display the information.

        nebula> $a = LOOKUP ON player WHERE player.name == 'Tony Parker' YIELD id(vertex) as src, vertex AS v; \\\n        $b = FETCH PROP ON follow 'player101'->'player100' YIELD src(edge) as src, edge as e; \\\n        YIELD $a.src AS src, $a.v AS v, $b.e AS e FROM $a INNER JOIN $b ON $a.src == $b.src;\n+-------------+-----------------------------------------------------+----------------------------------------------------+\n| src         | v                                                   | e                                                  |\n+-------------+-----------------------------------------------------+----------------------------------------------------+\n| \"player101\" | (\"player101\" :player{age: 36, name: \"Tony Parker\"}) | [:follow \"player101\"->\"player100\" @0 {degree: 95}] |\n+-------------+-----------------------------------------------------+----------------------------------------------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/joins/#example_3","title":"Example 3","text":"

        The following example shows the process of using the INNER JOIN clause to join the results of the LOOKUP, GO, and FIND PATH clauses.

        1. Query the player table using the LOOKUP ON statement to find the vertex for player Tony Parker, storing the ID and properties in the $a.src and $a.v columns, respectively.
        2. Then use the GO statement to find player nodes that are reachable in 2-5 steps through the follow edges from the node $a.src. It also requires that the players corresponding to these nodes have an age greater than 30 years old. We store the IDs of these nodes in the $b.dst column.
        3. Use the FIND ALL PATH statement to find all the paths that traverse the follow edges from $a.src to $b.dst. We also return the paths themselves as $c.p and the destination of each path as $c.dst.
        4. Using the FIND SHORTEST PATH statement, find the shortest path from $c.dst back to $a.src, storing the path in $d.p and the starting point in $d.src.
        5. Finally, we utilize the INNER JOIN clause to join the results of steps 3 and 4 by matching the $c.dst column with the $d.src column. Then use the YIELD statement YIELD $c.forward AS forwardPath, $c.dst AS end, $d.p AS backwardPath to return the matched records of the join.
        nebula> $a = LOOKUP ON player WHERE player.name == 'Tony Parker' YIELD id(vertex) as src, vertex AS v; \\\n        $b = GO 2 TO 5 STEPS FROM $a.src OVER follow WHERE $$.player.age > 30 YIELD id($$) AS dst; \\\n        $c = (FIND ALL PATH FROM $a.src TO $b.dst OVER follow YIELD path AS p | YIELD $-.p AS forward, id(endNode($-.p)) AS dst); \\\n        $d = (FIND SHORTEST PATH FROM $c.dst TO $a.src OVER follow YIELD path AS p | YIELD $-.p AS p, id(startNode($-.p)) AS src); \\\n        YIELD $c.forward AS forwardPath, $c.dst AS end, $d.p AS backwordPath FROM $c INNER JOIN $d ON $c.dst == $d.src;\n+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+-----------------------------------------------------------------------------+\n| forwardPath                                                                                                                                                           | end         | backwordPath                                                                |\n+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+-----------------------------------------------------------------------------+\n| <(\"player101\")-[:follow@0 {}]->(\"player102\")>                                                                                                                         | \"player102\" | <(\"player102\")-[:follow@0 {}]->(\"player101\")>                               |\n| <(\"player101\")-[:follow@0 {}]->(\"player100\")-[:follow@0 {}]->(\"player101\")-[:follow@0 {}]->(\"player102\")>                                                             | \"player102\" | <(\"player102\")-[:follow@0 {}]->(\"player101\")>                               |\n| <(\"player101\")-[:follow@0 {}]->(\"player125\")>                                                                                                                         | \"player125\" | <(\"player125\")-[:follow@0 {}]->(\"player100\")-[:follow@0 {}]->(\"player101\")> |\n| <(\"player101\")-[:follow@0 {}]->(\"player100\")-[:follow@0 {}]->(\"player125\")>                                                                                           | \"player125\" | <(\"player125\")-[:follow@0 {}]->(\"player100\")-[:follow@0 {}]->(\"player101\")> |\n| <(\"player101\")-[:follow@0 {}]->(\"player100\")-[:follow@0 {}]->(\"player101\")-[:follow@0 {}]->(\"player125\")>                                                             | \"player125\" | <(\"player125\")-[:follow@0 {}]->(\"player100\")-[:follow@0 {}]->(\"player101\")> |\n| <(\"player101\")-[:follow@0 {}]->(\"player102\")-[:follow@0 {}]->(\"player100\")-[:follow@0 {}]->(\"player125\")>                                                             | \"player125\" | <(\"player125\")-[:follow@0 {}]->(\"player100\")-[:follow@0 {}]->(\"player101\")> |\n| <(\"player101\")-[:follow@0 {}]->(\"player102\")-[:follow@0 {}]->(\"player101\")-[:follow@0 {}]->(\"player125\")>                                                             | \"player125\" | <(\"player125\")-[:follow@0 {}]->(\"player100\")-[:follow@0 {}]->(\"player101\")> |\n...\n+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+-----------------------------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/limit/","title":"LIMIT AND SKIP","text":"

        The LIMIT clause constrains the number of rows in the output. The usage of LIMIT in native nGQL statements and openCypher compatible statements is different.

        • Native nGQL: Generally, a pipe | needs to be used before the LIMIT clause. The offset parameter can be set or omitted directly after the LIMIT statement.
        • OpenCypher compatible statements: No pipes are permitted before the LIMIT clause. And you can use SKIP to indicate an offset.

        Note

        When using LIMIT in either syntax above, it is important to use an ORDER BY clause that constrains the output into a unique order. Otherwise, you will get an unpredictable subset of the output.

        "},{"location":"3.ngql-guide/8.clauses-and-options/limit/#limit_in_native_ngql_statements","title":"LIMIT in native nGQL statements","text":"

        In native nGQL, LIMIT has general syntax and exclusive syntax in GO statements.

        "},{"location":"3.ngql-guide/8.clauses-and-options/limit/#general_limit_syntax_in_native_ngql_statements","title":"General LIMIT syntax in native nGQL statements","text":"

        In native nGQL, the general LIMIT syntax works the same as in SQL. The LIMIT clause accepts one or two parameters. The values of both parameters must be non-negative integers and be used after a pipe. The syntax and description are as follows:

        ... | LIMIT [<offset>,] <number_rows>;\n
        Parameter Description offset The offset value. It defines the row from which to start returning. The offset starts from 0. The default value is 0, which returns from the first row. number_rows It constrains the total number of returned rows.

        For example:

        # The following example returns the top 3 rows of data from the result.\nnebula> LOOKUP ON player YIELD id(vertex)|\\\n        LIMIT 3;\n+-------------+\n| id(VERTEX)  |\n+-------------+\n| \"player100\" |\n| \"player101\" |\n| \"player102\" |\n+-------------+\n\n# The following example returns the 3 rows of data starting from the second row of the sorted output.\nnebula> GO FROM \"player100\" OVER follow REVERSELY \\\n        YIELD properties($$).name AS Friend, properties($$).age AS Age \\\n        | ORDER BY $-.Age, $-.Friend \\\n        | LIMIT 1, 3;\n+-------------------+-----+\n| Friend            | Age |\n+-------------------+-----+\n| \"Danny Green\"     | 31  |\n| \"Aron Baynes\"     | 32  |\n| \"Marco Belinelli\" | 32  |\n+-------------------+-----+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/limit/#limit_in_go_statements","title":"LIMIT in GO statements","text":"

        In addition to the general syntax in the native nGQL, the LIMIT in the GO statement also supports limiting the number of output results based on edges.

        Syntax:

        <go_statement> LIMIT <limit_list>;\n

        limit_list is a list. Elements in the list must be natural numbers, and the number of elements must be the same as the maximum number of STEPS in the GO statement. The following takes GO 1 TO 3 STEPS FROM \"A\" OVER * LIMIT <limit_list> as an example to introduce this usage of LIMIT in detail.

        • The list limit_list must contain 3 natural numbers, such as GO 1 TO 3 STEPS FROM \"A\" OVER * LIMIT [1,2,4].
        • 1 in LIMIT [1,2,4] means that the system automatically selects 1 edge to continue traversal in the first step. 2 means to select 2 edges to continue traversal in the second step. 4 indicates that 4 edges are selected to continue traversal in the third step.
        • Because GO 1 TO 3 STEPS means to return all the traversal results from the first to third steps, all the red edges and their source and destination vertices in the figure below will be matched by this GO statement. And the yellow edges represent there is no path selected when the GO statement traverses. If it is not GO 1 TO 3 STEPS but GO 3 STEPS, it will only match the red edges of the third step and the vertices at both ends.

        In the basketballplayer dataset, the example is as follows:

        nebula> GO 3 STEPS FROM \"player100\" \\\n        OVER * \\\n        YIELD properties($$).name AS NAME, properties($$).age AS Age \\\n        LIMIT [3,3,3];\n+-----------------+----------+\n| NAME            | Age      |\n+-----------------+----------+\n| \"Tony Parker\"   | 36       |\n| \"Manu Ginobili\" | 41       |\n| \"Spurs\"         | __NULL__ |\n+-----------------+----------+\n\nnebula> GO 3 STEPS FROM \"player102\" OVER * BIDIRECT\\\n        YIELD dst(edge) \\\n        LIMIT [rand32(5),rand32(5),rand32(5)];\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player100\" |\n| \"player100\" |\n+-------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/limit/#limit_in_opencypher_compatible_statements","title":"LIMIT in openCypher compatible statements","text":"

        In openCypher compatible statements such as MATCH, there is no need to use a pipe when LIMIT is used. The syntax and description are as follows:

        ... [SKIP <offset>] [LIMIT <number_rows>];\n
        Parameter Description offset The offset value. It defines the row from which to start returning. The offset starts from 0. The default value is 0, which returns from the first row. number_rows It constrains the total number of returned rows.

        Both offset and number_rows accept expressions, but the result of the expression must be a non-negative integer.

        Note

        Fraction expressions composed of two integers are automatically floored to integers. For example, 8/6 is floored to 1.

        "},{"location":"3.ngql-guide/8.clauses-and-options/limit/#examples_of_limit","title":"Examples of LIMIT","text":"

        LIMIT can be used alone to return a specified number of results.

        nebula> MATCH (v:player) RETURN v.player.name AS Name, v.player.age AS Age \\\n        ORDER BY Age LIMIT 5;\n+-------------------------+-----+\n| Name                    | Age |\n+-------------------------+-----+\n| \"Luka Doncic\"           | 20  |\n| \"Ben Simmons\"           | 22  |\n| \"Kristaps Porzingis\"    | 23  |\n| \"Giannis Antetokounmpo\" | 24  |\n| \"Kyle Anderson\"         | 25  |\n+-------------------------+-----+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/limit/#examples_of_skip","title":"Examples of SKIP","text":"

        SKIP can be used alone to set the offset and return the data after the specified position.

        nebula> MATCH (v:player{name:\"Tim Duncan\"}) --> (v2) \\\n        RETURN v2.player.name AS Name, v2.player.age AS Age \\\n        ORDER BY Age DESC SKIP 1;\n+-----------------+-----+\n| Name            | Age |\n+-----------------+-----+\n| \"Manu Ginobili\" | 41  |\n| \"Tony Parker\"   | 36  |\n+-----------------+-----+\n\nnebula> MATCH (v:player{name:\"Tim Duncan\"}) --> (v2) \\\n        RETURN v2.player.name AS Name, v2.player.age AS Age \\\n        ORDER BY Age DESC SKIP 1+1;\n+---------------+-----+\n| Name          | Age |\n+---------------+-----+\n| \"Tony Parker\" | 36  |\n+---------------+-----+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/limit/#example_of_skip_and_limit","title":"Example of SKIP and LIMIT","text":"

        SKIP and LIMIT can be used together to return the specified amount of data starting from the specified position.

        nebula> MATCH (v:player{name:\"Tim Duncan\"}) --> (v2) \\\n        RETURN v2.player.name AS Name, v2.player.age AS Age \\\n        ORDER BY Age DESC SKIP 1 LIMIT 1;\n+-----------------+-----+\n| Name            | Age |\n+-----------------+-----+\n| \"Manu Ginobili\" | 41  |\n+-----------------+-----+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/order-by/","title":"ORDER BY","text":"

        The ORDER BY clause specifies the order of the rows in the output.

        • Native nGQL: You must use a pipe (|) and an ORDER BY clause after YIELD clause.
        • OpenCypher style: No pipes are permitted. The ORDER BY clause follows a RETURN clause.

        There are two order options:

        • ASC: Ascending. ASC is the default order.
        • DESC: Descending.
        "},{"location":"3.ngql-guide/8.clauses-and-options/order-by/#native_ngql_syntax","title":"Native nGQL Syntax","text":"
        <YIELD clause>\n| ORDER BY <expression> [ASC | DESC] [, <expression> [ASC | DESC] ...];\n

        Compatibility

        In the native nGQL syntax, $-. must be used after ORDER BY. But it is not required in releases prior to 2.5.0.

        "},{"location":"3.ngql-guide/8.clauses-and-options/order-by/#examples","title":"Examples","text":"
        nebula> FETCH PROP ON player \"player100\", \"player101\", \"player102\", \"player103\" \\\n        YIELD player.age AS age, player.name AS name \\\n        | ORDER BY $-.age ASC, $-.name DESC;\n+-----+---------------------+\n| age | name                |\n+-----+---------------------+\n| 32  | \"Rudy Gay\"          |\n| 33  | \"LaMarcus Aldridge\" |\n| 36  | \"Tony Parker\"       |\n| 42  | \"Tim Duncan\"        |\n+-----+---------------------+\n\nnebula> $var = GO FROM \"player100\" OVER follow \\\n        YIELD dst(edge) AS dst; \\\n        ORDER BY $var.dst DESC;\n+-------------+\n| dst         |\n+-------------+\n| \"player125\" |\n| \"player101\" |\n+-------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/order-by/#opencypher_syntax","title":"OpenCypher Syntax","text":"
        <RETURN clause>\nORDER BY <expression> [ASC | DESC] [, <expression> [ASC | DESC] ...];\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/order-by/#examples_1","title":"Examples","text":"
        nebula> MATCH (v:player) RETURN v.player.name AS Name, v.player.age AS Age  \\\n        ORDER BY Name DESC;\n+-----------------+-----+\n| Name            | Age |\n+-----------------+-----+\n| \"Yao Ming\"      | 38  |\n| \"Vince Carter\"  | 42  |\n| \"Tracy McGrady\" | 39  |\n| \"Tony Parker\"   | 36  |\n| \"Tim Duncan\"    | 42  |\n+-----------------+-----+\n...\n\n# In the following example, nGQL sorts the rows by age first. If multiple people are of the same age, nGQL will then sort them by name.\nnebula> MATCH (v:player) RETURN v.player.age AS Age, v.player.name AS Name  \\\n        ORDER BY Age DESC, Name ASC;\n+-----+-------------------+\n| Age | Name              |\n+-----+-------------------+\n| 47  | \"Shaquille O'Neal\" |\n| 46  | \"Grant Hill\"      |\n| 45  | \"Jason Kidd\"      |\n| 45  | \"Steve Nash\"      |\n+-----+-------------------+\n...\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/order-by/#order_of_null_values","title":"Order of NULL values","text":"

        nGQL lists NULL values at the end of the output for ascending sorting, and at the start for descending sorting.

        nebula> MATCH (v:player{name:\"Tim Duncan\"}) --> (v2) \\\n        RETURN v2.player.name AS Name, v2.player.age AS Age  \\\n        ORDER BY Age;\n+-----------------+----------+\n| Name            | Age      |\n+-----------------+----------+\n| \"Tony Parker\"   | 36       |\n| \"Manu Ginobili\" | 41       |\n| __NULL__        | __NULL__ |\n+-----------------+----------+\n\nnebula> MATCH (v:player{name:\"Tim Duncan\"}) --> (v2) \\\n        RETURN v2.player.name AS Name, v2.player.age AS Age  \\\n        ORDER BY Age DESC;\n+-----------------+----------+\n| Name            | Age      |\n+-----------------+----------+\n| __NULL__        | __NULL__ |\n| \"Manu Ginobili\" | 41       |\n| \"Tony Parker\"   | 36       |\n+-----------------+----------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/return/","title":"RETURN","text":"

        The RETURN clause defines the output of an nGQL query. To return multiple fields, separate them with commas.

        RETURN can lead a clause or a statement:

        • A RETURN clause can work in openCypher statements in nGQL, such as MATCH or UNWIND.
        • A RETURN statement can work independently to output the result of an expression.
        "},{"location":"3.ngql-guide/8.clauses-and-options/return/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

        This topic applies to the openCypher syntax in nGQL only. For native nGQL, use YIELD.

        RETURN does not support the following openCypher features yet.

        • Return variables with uncommon characters, for example:

          MATCH (`non-english_characters`:player) \\\nRETURN `non-english_characters`;\n
        • Set a pattern in the RETURN clause and return all elements that this pattern matches, for example:

          MATCH (v:player) \\\nRETURN (v)-[e]->(v2);\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/return/#map_order_description","title":"Map order description","text":"

        When RETURN returns the map data structure, the order of key-value pairs is undefined.

        nebula> RETURN {age: 32, name: \"Marco Belinelli\"};\n+------------------------------------+\n| {age:32,name:\"Marco Belinelli\"}    |\n+------------------------------------+\n| {age: 32, name: \"Marco Belinelli\"} |\n+------------------------------------+\n\nnebula> RETURN {zage: 32, name: \"Marco Belinelli\"};\n+-------------------------------------+\n| {zage:32,name:\"Marco Belinelli\"}    |\n+-------------------------------------+\n| {name: \"Marco Belinelli\", zage: 32} |\n+-------------------------------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_vertices_or_edges","title":"Return vertices or edges","text":"

        Use the RETURN {<vertex_name> | <edge_name>} to return vertices and edges all information.

        // Return vertices\nnebula> MATCH (v:player) \\\n        RETURN v;\n+---------------------------------------------------------------+\n| v                                                             |\n+---------------------------------------------------------------+\n| (\"player104\" :player{age: 32, name: \"Marco Belinelli\"})       |\n| (\"player107\" :player{age: 32, name: \"Aron Baynes\"})           |\n| (\"player116\" :player{age: 34, name: \"LeBron James\"})          |\n| (\"player120\" :player{age: 29, name: \"James Harden\"})          |\n| (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})         |\n+---------------------------------------------------------------+\n...\n\n// Return edges\nnebula> MATCH (v:player)-[e]->() \\\n        RETURN e;\n+------------------------------------------------------------------------------+\n| e                                                                            |\n+------------------------------------------------------------------------------+\n| [:follow \"player104\"->\"player100\" @0 {degree: 55}]                           |\n| [:follow \"player104\"->\"player101\" @0 {degree: 50}]                           |\n| [:follow \"player104\"->\"player105\" @0 {degree: 60}]                           |\n| [:serve \"player104\"->\"team200\" @0 {end_year: 2009, start_year: 2007}]        |\n| [:serve \"player104\"->\"team208\" @0 {end_year: 2016, start_year: 2015}]        |\n+------------------------------------------------------------------------------+\n...\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_vids","title":"Return VIDs","text":"

        Use the id() function to retrieve VIDs.

        nebula> MATCH (v:player{name:\"Tim Duncan\"}) \\\n        RETURN id(v);\n+-------------+\n| id(v)       |\n+-------------+\n| \"player100\" |\n+-------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_tag","title":"Return Tag","text":"

        Use the labels() function to return the list of tags on a vertex.

        nebula> MATCH (v:player{name:\"Tim Duncan\"}) \\\n        RETURN labels(v);\n+------------+\n| labels(v)  |\n+------------+\n| [\"player\"] |\n+------------+\n

        To retrieve the nth element in the labels(v) list, use labels(v)[n-1]. The following example shows how to use labels(v)[0] to return the first tag in the list.

        nebula> MATCH (v:player{name:\"Tim Duncan\"}) \\\n        RETURN labels(v)[0];\n+--------------+\n| labels(v)[0] |\n+--------------+\n| \"player\"     |\n+--------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_properties","title":"Return properties","text":"

        When returning properties of a vertex, it is necessary to specify the tag to which the properties belong because a vertex can have multiple tags and the same property name can appear on different tags.

        It is possible to specify the tag of a vertex to return all properties of that tag, or to specify both the tag and a property name to return only that property of the tag.

        nebula> MATCH (v:player) \\\n        RETURN v.player, v.player.name, v.player.age \\\n        LIMIT 3;\n+--------------------------------------+---------------------+--------------+\n| v.player                             | v.player.name       | v.player.age |\n+--------------------------------------+---------------------+--------------+\n| {age: 33, name: \"LaMarcus Aldridge\"} | \"LaMarcus Aldridge\" | 33           |\n| {age: 25, name: \"Kyle Anderson\"}     | \"Kyle Anderson\"     | 25           |\n| {age: 40, name: \"Kobe Bryant\"}       | \"Kobe Bryant\"       | 40           |\n+--------------------------------------+---------------------+--------------+\n

        When returning edge properties, it is not necessary to specify the edge type to which the properties belong, because an edge can only have one edge type.

        // Return the property of a vertex\nnebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[]->(v2) \\\n        RETURN properties(v2);\n+----------------------------------+\n| properties(v2)                   |\n+----------------------------------+\n| {name: \"Spurs\"}                  |\n| {age: 36, name: \"Tony Parker\"}   |\n| {age: 41, name: \"Manu Ginobili\"} |\n+----------------------------------+\n
        // Return the property of an edge\nnebula> MATCH (v:player{name:\"Tim Duncan\"})-[e]->() \\\n        RETURN e.start_year, e.degree \\\n+--------------+----------+\n| e.start_year | e.degree |\n+--------------+----------+\n| __NULL__     | 95       |\n| __NULL__     | 95       |\n| 1997         | __NULL__ |\n+--------------+----------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_edge_type","title":"Return edge type","text":"

        Use the type() function to return the matched edge types.

        nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[e]->() \\\n        RETURN DISTINCT type(e);\n+----------+\n| type(e)  |\n+----------+\n| \"serve\"  |\n| \"follow\" |\n+----------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_paths","title":"Return paths","text":"

        Use RETURN <path_name> to return all the information of the matched paths.

        nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[*3]->() \\\n        RETURN p;\n+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| p                                                                                                                                                                                                                                                                                                              |\n+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})-[:follow@0 {degree: 90}]->(\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"})-[:serve@0 {end_year: 2019, start_year: 2015}]->(\"team204\" :team{name: \"Spurs\"})>         |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})-[:follow@0 {degree: 90}]->(\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"})-[:serve@0 {end_year: 2015, start_year: 2006}]->(\"team203\" :team{name: \"Trail Blazers\"})> |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})-[:follow@0 {degree: 90}]->(\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"})-[:follow@0 {degree: 75}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})>           |\n+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n...\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_vertices_in_a_path","title":"Return vertices in a path","text":"

        Use the nodes() function to return all vertices in a path.

        nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[]->(v2) \\\n        RETURN nodes(p);\n+-------------------------------------------------------------------------------------------------------------+\n| nodes(p)                                                                                                    |\n+-------------------------------------------------------------------------------------------------------------+\n| [(\"player100\" :player{age: 42, name: \"Tim Duncan\"}), (\"team204\" :team{name: \"Spurs\"})]                      |\n| [(\"player100\" :player{age: 42, name: \"Tim Duncan\"}), (\"player101\" :player{age: 36, name: \"Tony Parker\"})]   |\n| [(\"player100\" :player{age: 42, name: \"Tim Duncan\"}), (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})] |\n+-------------------------------------------------------------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_edges_in_a_path","title":"Return edges in a path","text":"

        Use the relationships() function to return all edges in a path.

        nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[]->(v2) \\\n        RETURN relationships(p);\n+-------------------------------------------------------------------------+\n| relationships(p)                                                        |\n+-------------------------------------------------------------------------+\n| [[:serve \"player100\"->\"team204\" @0 {end_year: 2016, start_year: 1997}]] |\n| [[:follow \"player100\"->\"player101\" @0 {degree: 95}]]                    |\n| [[:follow \"player100\"->\"player125\" @0 {degree: 95}]]                    |\n+-------------------------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_path_length","title":"Return path length","text":"

        Use the length() function to return the length of a path.

        nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[*..2]->(v2) \\\n        RETURN p AS Paths, length(p) AS Length;\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------+\n| Paths                                                                                                                                                                                                                  | Length |\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------+\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:serve@0 {end_year: 2016, start_year: 1997}]->(\"team204\" :team{name: \"Spurs\"})>                                                                                   | 1      |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})>                                                                                     | 1      |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player125\" :player{age: 41, name: \"Manu Ginobili\"})>                                                                                   | 1      |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})-[:serve@0 {end_year: 2018, start_year: 1999}]->(\"team204\" :team{name: \"Spurs\"})>     | 2      |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})-[:serve@0 {end_year: 2019, start_year: 2018}]->(\"team215\" :team{name: \"Hornets\"})>   | 2      |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})-[:follow@0 {degree: 95}]->(\"player100\" :player{age: 42, name: \"Tim Duncan\"})>        | 2      |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})-[:follow@0 {degree: 90}]->(\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"})> | 2      |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})-[:follow@0 {degree: 95}]->(\"player125\" :player{age: 41, name: \"Manu Ginobili\"})>     | 2      |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player125\" :player{age: 41, name: \"Manu Ginobili\"})-[:serve@0 {end_year: 2018, start_year: 2002}]->(\"team204\" :team{name: \"Spurs\"})>   | 2      |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player125\" :player{age: 41, name: \"Manu Ginobili\"})-[:follow@0 {degree: 90}]->(\"player100\" :player{age: 42, name: \"Tim Duncan\"})>      | 2      |\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_all_elements","title":"Return all elements","text":"

        To return all the elements that this pattern matches, use an asterisk (*).

        nebula> MATCH (v:player{name:\"Tim Duncan\"}) \\\n        RETURN *;\n+----------------------------------------------------+\n| v                                                  |\n+----------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) |\n+----------------------------------------------------+\n\nnebula> MATCH (v:player{name:\"Tim Duncan\"})-[e]->(v2) \\\n        RETURN *;\n+----------------------------------------------------+-----------------------------------------------------------------------+-------------------------------------------------------+\n| v                                                  | e                                                                     | v2                                                    |\n+----------------------------------------------------+-----------------------------------------------------------------------+-------------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) | [:follow \"player100\"->\"player101\" @0 {degree: 95}]                    | (\"player101\" :player{age: 36, name: \"Tony Parker\"})   |\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) | [:follow \"player100\"->\"player125\" @0 {degree: 95}]                    | (\"player125\" :player{age: 41, name: \"Manu Ginobili\"}) |\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) | [:serve \"player100\"->\"team204\" @0 {end_year: 2016, start_year: 1997}] | (\"team204\" :team{name: \"Spurs\"})                      |\n+----------------------------------------------------+-----------------------------------------------------------------------+-------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/return/#rename_a_field","title":"Rename a field","text":"

        Use the AS <alias> syntax to rename a field in the output.

        nebula> MATCH (v:player{name:\"Tim Duncan\"})-[:serve]->(v2) \\\n        RETURN v2.team.name AS Team;\n+---------+\n| Team    |\n+---------+\n| \"Spurs\" |\n+---------+\n\nnebula> RETURN \"Amber\" AS Name;\n+---------+\n| Name    |\n+---------+\n| \"Amber\" |\n+---------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_a_non-existing_property","title":"Return a non-existing property","text":"

        If a property matched does not exist, NULL is returned.

        nebula> MATCH (v:player{name:\"Tim Duncan\"})-[e]->(v2) \\\n        RETURN v2.player.name, type(e), v2.player.age;\n+-----------------+----------+---------------+\n| v2.player.name  | type(e)  | v2.player.age |\n+-----------------+----------+---------------+\n| \"Manu Ginobili\" | \"follow\" | 41            |\n| __NULL__        | \"serve\"  | __NULL__      |\n| \"Tony Parker\"   | \"follow\" | 36            |\n+-----------------+----------+---------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_expression_results","title":"Return expression results","text":"

        To return the results of expressions such as literals, functions, or predicates, set them in a RETURN clause.

        nebula> MATCH (v:player{name:\"Tony Parker\"})-->(v2:player) \\\n        RETURN DISTINCT v2.player.name, \"Hello\"+\" graphs!\", v2.player.age > 35;\n+---------------------+----------------------+--------------------+\n| v2.player.name      | (\"Hello\"+\" graphs!\") | (v2.player.age>35) |\n+---------------------+----------------------+--------------------+\n| \"LaMarcus Aldridge\" | \"Hello graphs!\"      | false              |\n| \"Tim Duncan\"        | \"Hello graphs!\"      | true               |\n| \"Manu Ginobili\"     | \"Hello graphs!\"      | true               |\n+---------------------+----------------------+--------------------+\n\nnebula> RETURN 1+1;\n+-------+\n| (1+1) |\n+-------+\n| 2     |\n+-------+\n\nnebula> RETURN 1- -1;\n+----------+\n| (1--(1)) |\n+----------+\n| 2        |\n+----------+\n\nnebula> RETURN 3 > 1;\n+-------+\n| (3>1) |\n+-------+\n| true  |\n+-------+\n\nnebula> RETURN 1+1, rand32(1, 5);\n+-------+-------------+\n| (1+1) | rand32(1,5) |\n+-------+-------------+\n| 2     | 1           |\n+-------+-------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_unique_fields","title":"Return unique fields","text":"

        Use DISTINCT to remove duplicate fields in the result set.

        # Before using DISTINCT.\nnebula> MATCH (v:player{name:\"Tony Parker\"})--(v2:player) \\\n        RETURN v2.player.name, v2.player.age;\n+---------------------+---------------+\n| v2.player.name      | v2.player.age |\n+---------------------+---------------+\n| \"Manu Ginobili\"     | 41            |\n| \"Boris Diaw\"        | 36            |\n| \"Marco Belinelli\"   | 32            |\n| \"Dejounte Murray\"   | 29            |\n| \"Tim Duncan\"        | 42            |\n| \"Tim Duncan\"        | 42            |\n| \"LaMarcus Aldridge\" | 33            |\n| \"LaMarcus Aldridge\" | 33            |\n+---------------------+---------------+\n\n# After using DISTINCT.\nnebula> MATCH (v:player{name:\"Tony Parker\"})--(v2:player) \\\n        RETURN DISTINCT v2.player.name, v2.player.age;\n+---------------------+---------------+\n| v2.player.name      | v2.player.age |\n+---------------------+---------------+\n| \"Manu Ginobili\"     | 41            |\n| \"Boris Diaw\"        | 36            |\n| \"Marco Belinelli\"   | 32            |\n| \"Dejounte Murray\"   | 29            |\n| \"Tim Duncan\"        | 42            |\n| \"LaMarcus Aldridge\" | 33            |\n+---------------------+---------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/sample/","title":"SAMPLE","text":"

        The SAMPLE clause takes samples evenly in the result set and returns the specified amount of data.

        SAMPLE can be used in GO statements only. The syntax is as follows:

        <go_statement> SAMPLE <sample_list>;\n

        sample_list is a list. Elements in the list must be natural numbers, and the number of elements must be the same as the maximum number of STEPS in the GO statement. The following takes GO 1 TO 3 STEPS FROM \"A\" OVER * SAMPLE <sample_list> as an example to introduce this usage of SAMPLE in detail.

        • The list sample_list must contain 3 natural numbers, such as GO 1 TO 3 STEPS FROM \"A\" OVER * SAMPLE [1,2,4].
        • 1 in SAMPLE [1,2,4] means that the system automatically selects 1 edge to continue traversal in the first step. 2 means to select 2 edges to continue traversal in the second step. 4 indicates that 4 edges are selected to continue traversal in the third step. If there is no matched edge in a certain step or the number of matched edges is less than the specified number, the actual number will be returned.
        • Because GO 1 TO 3 STEPS means to return all the traversal results from the first to third steps, all the red edges and their source and destination vertices in the figure below will be matched by this GO statement. And the yellow edges represent there is no path selected when the GO statement traverses. If it is not GO 1 TO 3 STEPS but GO 3 STEPS, it will only match the red edges of the third step and the vertices at both ends.

        In the basketballplayer dataset, the example is as follows:

        nebula> GO 3 STEPS FROM \"player100\" \\\n        OVER * \\\n        YIELD properties($$).name AS NAME, properties($$).age AS Age \\\n        SAMPLE [1,2,3];\n+-----------------+----------+\n| NAME            | Age      |\n+-----------------+----------+\n| \"Tony Parker\"   | 36       |\n| \"Manu Ginobili\" | 41       |\n| \"Spurs\"         | __NULL__ |\n+-----------------+----------+\n\nnebula> GO 1 TO 3 STEPS FROM \"player100\" \\\n        OVER * \\\n        YIELD properties($$).name AS NAME, properties($$).age AS Age \\\n        SAMPLE [2,2,2];\n+-----------------+----------+\n| NAME            | Age      |\n+-----------------+----------+\n| \"Manu Ginobili\" | 41       |\n| \"Spurs\"         | __NULL__ |\n| \"Tim Duncan\"    | 42       |\n| \"Spurs\"         | __NULL__ |\n| \"Manu Ginobili\" | 41       |\n| \"Spurs\"         | __NULL__ |\n+-----------------+----------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/","title":"TTL","text":"

        TTL (Time To Live) is a mechanism in NebulaGraph that defines the lifespan of data. Once the data reaches its predefined lifespan, it is automatically deleted from the database. This feature is particularly suitable for data that only needs temporary storage, such as temporary sessions or cached data.

        "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/#opencypher_compatibility","title":"OpenCypher Compatibility","text":"

        This topic applies to native nGQL only.

        "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/#precautions","title":"Precautions","text":"
        • You CANNOT modify a property schema with TTL options on it.
        • TTL options and indexes have coexistence issues.

          • TTL options and indexes CANNOT coexist on a tag or an edge type. If there is an index on a property, you cannot set TTL options on other properties.
          • If there are TTL options on a tag, an edge type, or a property, you can still add an index on them.
        "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/#ttl_options","title":"TTL options","text":"

        The native nGQL TTL feature has the following options.

        Option Description ttl_col Specifies an existing property to set a lifespan on. The data type of the property must be int or timestamp. ttl_duration Specifies the timeout adds-on value in seconds. The value must be a non-negative int64 number. A property expires if the sum of its value and the ttl_duration value is smaller than the current timestamp. If the ttl_duration value is 0, the property never expires.You can set ttl_use_ms to true in the configuration file nebula-storaged.conf (default path: /usr/local/nightly/etc/) to set the default unit to milliseconds.

        Warning

        • Before setting ttl_use_ms to true, make sure that no TTL has been set for any property, as shortening the expiration time may cause data to be erroneously deleted.
        • After setting ttl_use_ms to true, which sets the default TTL unit to milliseconds, the data type of the property specified by ttl_col must be int, and the property value needs to be manually converted to milliseconds. For example, when setting ttl_col to a, you need to convert the value of a to milliseconds, such as when the value of a is now(), you need to set the value of a to now() * 1000.
        "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/#use_ttl_options","title":"Use TTL options","text":"

        You must use the TTL options together to set a lifespan on a property.

        Before using the TTL feature, you must first create a timestamp or integer property and specify it in the TTL options. NebulaGraph will not automatically create or manage this timestamp property for you.

        When inserting the value of the timestamp or integer property, it is recommended to use the now() function or the current timestamp to represent the present time.

        "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/#set_a_timeout_if_a_tag_or_an_edge_type_exists","title":"Set a timeout if a tag or an edge type exists","text":"

        If a tag or an edge type is already created, to set a timeout on a property bound to the tag or edge type, use ALTER to update the tag or edge type.

        # Create a tag.\nnebula> CREATE TAG IF NOT EXISTS t1 (a timestamp);\n\n# Use ALTER to update the tag and set the TTL options.\nnebula> ALTER TAG t1 TTL_COL = \"a\", TTL_DURATION = 5;\n\n# Insert a vertex with tag t1. The vertex expires 5 seconds after the insertion.\nnebula> INSERT VERTEX t1(a) VALUES \"101\":(now());\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/#set_a_timeout_when_creating_a_tag_or_an_edge_type","title":"Set a timeout when creating a tag or an edge type","text":"

        Use TTL options in the CREATE statement to set a timeout when creating a tag or an edge type. For more information, see CREATE TAG and CREATE EDGE.

        # Create a tag and set the TTL options.\nnebula> CREATE TAG IF NOT EXISTS t2(a int, b int, c string) TTL_DURATION= 100, TTL_COL = \"a\";\n\n# Insert a vertex with tag t2. The timeout timestamp is 1648197238 (1648197138 + 100).\nnebula> INSERT VERTEX t2(a, b, c) VALUES \"102\":(1648197138, 30, \"Hello\");\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/#data_expiration_and_deletion","title":"Data expiration and deletion","text":"

        Caution

        • When the TTL options are set for a property of a tag or an edge type and the property's value is NULL, the property never expires.
        • If a property with a default value of now() is added to a tag or an edge type and the TTL options are set for the property, the history data related to the tag or the edge type will never expire because the value of that property for the history data is the current timestamp.
        "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/#vertex_property_expiration","title":"Vertex property expiration","text":"

        Vertex property expiration has the following impact.

        • If a vertex has only one tag, once a property of the vertex expires, the vertex expires.
        • If a vertex has multiple tags, once a property of the vertex expires, properties bound to the same tag with the expired property also expire, but the vertex does not expire and other properties of it remain untouched.
        "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/#edge_property_expiration","title":"Edge property expiration","text":"

        Since an edge can have only one edge type, once an edge property expires, the edge expires.

        "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/#data_deletion","title":"Data deletion","text":"

        The expired data are still stored on the disk, but queries will filter them out.

        NebulaGraph automatically deletes the expired data and reclaims the disk space during the next compaction.

        Note

        If TTL is disabled, the corresponding data deleted after the last compaction can be queried again.

        "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/#remove_a_timeout","title":"Remove a timeout","text":"

        To disable TTL and remove the timeout on a property, you can use the following approaches.

        • Drop the property with the timeout.
          nebula> ALTER TAG t1 DROP (a);\n
        • Set ttl_col to an empty string.
          nebula> ALTER TAG t1 TTL_COL = \"\";\n
        • Set ttl_duration to 0. This operation keeps the TTL options and prevents the property from expiring and the property schema from being modified.
          nebula> ALTER TAG t1 TTL_DURATION = 0;\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/unwind/","title":"UNWIND","text":"

        UNWIND transform a list into a sequence of rows.

        UNWIND can be used as an individual statement or as a clause within a statement.

        "},{"location":"3.ngql-guide/8.clauses-and-options/unwind/#unwind_statement","title":"UNWIND statement","text":""},{"location":"3.ngql-guide/8.clauses-and-options/unwind/#syntax","title":"Syntax","text":"
        UNWIND <list> AS <alias> <RETURN clause>;\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/unwind/#examples","title":"Examples","text":"
        • To transform a list.

          nebula> UNWIND [1,2,3] AS n RETURN n;\n+---+\n| n |\n+---+\n| 1 |\n| 2 |\n| 3 |\n+---+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/unwind/#unwind_clause","title":"UNWIND clause","text":""},{"location":"3.ngql-guide/8.clauses-and-options/unwind/#syntax_1","title":"Syntax","text":"
        • The UNWIND clause in native nGQL statements.

          Note

          To use a UNWIND clause in a native nGQL statement, use it after the | operator and use the $- prefix for variables. If you use a statement or clause after the UNWIND clause, use the | operator and use the $- prefix for variables.

          <statement> | UNWIND $-.<var> AS <alias> <|> <clause>;\n
        • The UNWIND clause in openCypher statements.

          <statement> UNWIND <list> AS <alias> <RETURN clause>\uff1b\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/unwind/#examples_1","title":"Examples","text":"
        • To transform a list of duplicates into a unique set of rows using WITH DISTINCT in a UNWIND clause.

          Note

          WITH DISTINCT is not available in native nGQL statements.

          // Transform the list `[1,1,2,2,3,3]` into a unique set of rows, sort the rows, and then transform the rows into a list of unique values.\n\nnebula> WITH [1,1,2,2,3,3] AS n \\\n        UNWIND n AS r \\\n        WITH DISTINCT r AS r \\\n        ORDER BY r \\\n        RETURN collect(r);\n+------------+\n| collect(r) |\n+------------+\n| [1, 2, 3]  |\n+------------+\n
        • To use an UNWIND clause in a MATCH statement.

          // Get a list of the vertices in the matched path, transform the list into a unique set of rows, and then transform the rows into a list. \n\nnebula> MATCH p=(v:player{name:\"Tim Duncan\"})--(v2) \\\n        WITH nodes(p) AS n \\\n        UNWIND n AS r \\\n        WITH DISTINCT r AS r \\\n        RETURN collect(r);\n+----------------------------------------------------------------------------------------------------------------------+\n| collect(r)                                                                                                           |\n+----------------------------------------------------------------------------------------------------------------------+\n| [(\"player100\" :player{age: 42, name: \"Tim Duncan\"}), (\"player101\" :player{age: 36, name: \"Tony Parker\"}),            |\n|(\"team204\" :team{name: \"Spurs\"}), (\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"}),                          |\n|(\"player125\" :player{age: 41, name: \"Manu Ginobili\"}), (\"player104\" :player{age: 32, name: \"Marco Belinelli\"}),       |\n|(\"player144\" :player{age: 47, name: \"Shaquile O'Neal\"}), (\"player105\" :player{age: 31, name: \"Danny Green\"}),         |\n|(\"player113\" :player{age: 29, name: \"Dejounte Murray\"}), (\"player107\" :player{age: 32, name: \"Aron Baynes\"}),         |\n|(\"player109\" :player{age: 34, name: \"Tiago Splitter\"}), (\"player108\" :player{age: 36, name: \"Boris Diaw\"})]           |  \n+----------------------------------------------------------------------------------------------------------------------+\n
        • To use an UNWIND clause in a GO statement.

          // Query the vertices in a list for the corresponding edges with a specified statement.\n\nnebula> YIELD ['player101', 'player100'] AS a | UNWIND $-.a AS  b | GO FROM $-.b OVER follow YIELD edge AS e;\n+----------------------------------------------------+\n| e                                                  |\n+----------------------------------------------------+\n| [:follow \"player101\"->\"player100\" @0 {degree: 95}] |\n| [:follow \"player101\"->\"player102\" @0 {degree: 90}] |\n| [:follow \"player101\"->\"player125\" @0 {degree: 95}] |\n| [:follow \"player100\"->\"player101\" @0 {degree: 95}] |\n| [:follow \"player100\"->\"player125\" @0 {degree: 95}] |\n+----------------------------------------------------+\n
        • To use an UNWIND clause in a LOOKUP statement.

          // Find all the properties of players whose age is greater than 46, get a list of unique properties, and then transform the list into rows. \n\nnebula> LOOKUP ON player \\\n        WHERE player.age > 46 \\\n        YIELD DISTINCT keys(vertex) as p | UNWIND $-.p as a | YIELD $-.a AS a;\n+--------+\n| a      |\n+--------+\n| \"age\"  |\n| \"name\" |\n+--------+\n
        • To use an UNWIND clause in a FETCH statement.

          // Query player101 for all tags related to player101, get a list of the tags and then transform the list into rows.\n\nnebula> CREATE TAG hero(like string, height int);\n        INSERT VERTEX hero(like, height) VALUES \"player101\":(\"deep\", 182);\n        FETCH PROP ON * \"player101\" \\\n        YIELD tags(vertex) as t | UNWIND $-.t as a | YIELD $-.a AS a;\n+----------+\n| a        |\n+----------+\n| \"hero\"   |\n| \"player\" |\n+----------+\n
        • To use an UNWIND clause in a GET SUBGRAPH statement.

          // Get the subgraph including outgoing and incoming serve edges within 0~2 hops from/to player100, and transform the result into rows.\n\nnebula> GET SUBGRAPH 2 STEPS FROM \"player100\" BOTH serve \\\n        YIELD edges as e | UNWIND $-.e as a | YIELD $-.a AS a;\n+----------------------------------------------+\n| a                                            |\n+----------------------------------------------+\n| [:serve \"player100\"->\"team204\" @0 {}]        |\n| [:serve \"player101\"->\"team204\" @0 {}]        |\n| [:serve \"player102\"->\"team204\" @0 {}]        |\n| [:serve \"player103\"->\"team204\" @0 {}]        |\n| [:serve \"player105\"->\"team204\" @0 {}]        |\n| [:serve \"player106\"->\"team204\" @0 {}]        |\n| [:serve \"player107\"->\"team204\" @0 {}]        |\n| [:serve \"player108\"->\"team204\" @0 {}]        |\n| [:serve \"player109\"->\"team204\" @0 {}]        |\n| [:serve \"player110\"->\"team204\" @0 {}]        |\n| [:serve \"player111\"->\"team204\" @0 {}]        |\n| [:serve \"player112\"->\"team204\" @0 {}]        |\n| [:serve \"player113\"->\"team204\" @0 {}]        |\n| [:serve \"player114\"->\"team204\" @0 {}]        |\n| [:serve \"player125\"->\"team204\" @0 {}]        |\n| [:serve \"player138\"->\"team204\" @0 {}]        |\n| [:serve \"player104\"->\"team204\" @20132015 {}] |\n| [:serve \"player104\"->\"team204\" @20182019 {}] |\n+----------------------------------------------+\n
        • To use an UNWIND clause in a FIND PATH statement.

          // Find all the vertices in the shortest path from player101 to team204 along the serve edge, and transform the result into rows. \n\nnebula> FIND SHORTEST PATH FROM \"player101\" TO \"team204\" OVER serve \\\n        YIELD path as p | YIELD nodes($-.p) AS nodes | UNWIND $-.nodes AS a | YIELD $-.a AS a;\n+---------------+\n| a             |\n+---------------+\n| (\"player101\") |\n| (\"team204\")   |\n+---------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/where/","title":"WHERE","text":"

        The WHERE clause filters the output by conditions.

        The WHERE clause usually works in the following queries:

        • Native nGQL: such as GO and LOOKUP.
        • OpenCypher syntax: such as MATCH and WITH.
        "},{"location":"3.ngql-guide/8.clauses-and-options/where/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

        Filtering on edge rank is a native nGQL feature. To retrieve the rank value in openCypher statements, use the rank() function, such as MATCH (:player)-[e:follow]->() RETURN rank(e);.

        "},{"location":"3.ngql-guide/8.clauses-and-options/where/#basic_usage","title":"Basic usage","text":"

        Note

        In the following examples, $$ and $^ are reference operators. For more information, see Operators.

        "},{"location":"3.ngql-guide/8.clauses-and-options/where/#define_conditions_with_boolean_operators","title":"Define conditions with boolean operators","text":"

        Use the boolean operators NOT, AND, OR, and XOR to define conditions in WHERE clauses. For the precedence of the operators, see Precedence.

        nebula> MATCH (v:player) \\\n        WHERE v.player.name == \"Tim Duncan\" \\\n        XOR (v.player.age < 30 AND v.player.name == \"Yao Ming\") \\\n        OR NOT (v.player.name == \"Yao Ming\" OR v.player.name == \"Tim Duncan\") \\\n        RETURN v.player.name, v.player.age;\n+-------------------------+--------------+\n| v.player.name           | v.player.age |\n+-------------------------+--------------+\n| \"Danny Green\"           | 31           |\n| \"Tiago Splitter\"        | 34           |\n| \"David West\"            | 38           |\n...\n
        nebula> GO FROM \"player100\" \\\n        OVER follow \\\n        WHERE properties(edge).degree > 90 \\\n        OR properties($$).age != 33 \\\n        AND properties($$).name != \"Tony Parker\" \\\n        YIELD properties($$);\n+----------------------------------+\n| properties($$)                   |\n+----------------------------------+\n| {age: 41, name: \"Manu Ginobili\"} |\n+----------------------------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/where/#filter_on_properties","title":"Filter on properties","text":"

        Use vertex or edge properties to define conditions in WHERE clauses.

        • Filter on a vertex property:
          nebula> MATCH (v:player)-[e]->(v2) \\\n        WHERE v2.player.age < 25 \\\n        RETURN v2.player.name, v2.player.age;\n+----------------------+---------------+\n| v2.player.name       | v2.player.age |\n+----------------------+---------------+\n| \"Ben Simmons\"        | 22            |\n| \"Luka Doncic\"        | 20            |\n| \"Kristaps Porzingis\" | 23            |\n+----------------------+---------------+\n
          nebula> GO FROM \"player100\" OVER follow \\\n        WHERE $^.player.age >= 42 \\\n        YIELD dst(edge);\n+-------------+\n| dst(EDGE)   |\n+-------------+\n+-------------+\n| \"player101\" |\n| \"player125\" |\n+-------------+\n
        • Filter on an edge property:
          nebula> MATCH (v:player)-[e]->() \\\n        WHERE e.start_year < 2000 \\\n        RETURN DISTINCT v.player.name, v.player.age;\n+--------------------+--------------+\n| v.player.name      | v.player.age |\n+--------------------+--------------+\n| \"Tony Parker\"      | 36           |\n| \"Tim Duncan\"       | 42           |\n| \"Grant Hill\"       | 46           |\n...\n
          nebula> GO FROM \"player100\" OVER follow \\\n        WHERE follow.degree > 90 \\\n        YIELD dst(edge);\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player101\" |\n| \"player125\" |\n+-------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/where/#filter_on_dynamically-calculated_properties","title":"Filter on dynamically-calculated properties","text":"
        nebula> MATCH (v:player) \\\n        WHERE v[toLower(\"AGE\")] < 21 \\\n        RETURN v.player.name, v.player.age;\n+---------------+-------+\n| v.name        | v.age |\n+---------------+-------+\n| \"Luka Doncic\" | 20    |\n+---------------+-------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/where/#filter_on_existing_properties","title":"Filter on existing properties","text":"
        nebula> MATCH (v:player) \\\n        WHERE exists(v.player.age) \\\n        RETURN v.player.name, v.player.age;\n+-------------------------+--------------+\n| v.player.name           | v.player.age |\n+-------------------------+--------------+\n| \"Danny Green\"           | 31           |\n| \"Tiago Splitter\"        | 34           |\n| \"David West\"            | 38           |\n...\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/where/#filter_on_edge_rank","title":"Filter on edge rank","text":"

        In nGQL, if a group of edges has the same source vertex, destination vertex, and properties, the only thing that distinguishes them is the rank. Use rank conditions in WHERE clauses to filter such edges.

        # The following example creates test data.\nnebula> CREATE SPACE IF NOT EXISTS test (vid_type=FIXED_STRING(30));\nnebula> USE test;\nnebula> CREATE EDGE IF NOT EXISTS e1(p1 int);\nnebula> CREATE TAG IF NOT EXISTS person(p1 int);\nnebula> INSERT VERTEX person(p1) VALUES \"1\":(1);\nnebula> INSERT VERTEX person(p1) VALUES \"2\":(2);\nnebula> INSERT EDGE e1(p1) VALUES \"1\"->\"2\"@0:(10);\nnebula> INSERT EDGE e1(p1) VALUES \"1\"->\"2\"@1:(11);\nnebula> INSERT EDGE e1(p1) VALUES \"1\"->\"2\"@2:(12);\nnebula> INSERT EDGE e1(p1) VALUES \"1\"->\"2\"@3:(13);\nnebula> INSERT EDGE e1(p1) VALUES \"1\"->\"2\"@4:(14);\nnebula> INSERT EDGE e1(p1) VALUES \"1\"->\"2\"@5:(15);\nnebula> INSERT EDGE e1(p1) VALUES \"1\"->\"2\"@6:(16);\n\n# The following example use rank to filter edges and retrieves edges with a rank greater than 2.\nnebula> GO FROM \"1\" \\\n        OVER e1 \\\n        WHERE rank(edge) > 2 \\\n        YIELD src(edge), dst(edge), rank(edge) AS Rank, properties(edge).p1 | \\\n        ORDER BY $-.Rank DESC;\n+-----------+-----------+------+---------------------+\n| src(EDGE) | dst(EDGE) | Rank | properties(EDGE).p1 |\n+-----------+-----------+------+---------------------+\n| \"1\"       | \"2\"       | 6    | 16                  |\n| \"1\"       | \"2\"       | 5    | 15                  |\n| \"1\"       | \"2\"       | 4    | 14                  |\n| \"1\"       | \"2\"       | 3    | 13                  |\n+-----------+-----------+------+---------------------+\n\n# Filter edges by rank. Find follow edges with rank equal to 0.\nnebula> MATCH (v)-[e:follow]->() \\\n         WHERE rank(e)==0 \\\n         RETURN *;\n+------------------------------------------------------------+-----------------------------------------------------+\n| v                                                          | e                                                   |\n+------------------------------------------------------------+-----------------------------------------------------+\n| (\"player142\" :player{age: 29, name: \"Klay Thompson\"})      | [:follow \"player142\"->\"player117\" @0 {degree: 90}]  |\n| (\"player139\" :player{age: 34, name: \"Marc Gasol\"})         | [:follow \"player139\"->\"player138\" @0 {degree: 99}]  |\n| (\"player108\" :player{age: 36, name: \"Boris Diaw\"})         | [:follow \"player108\"->\"player100\" @0 {degree: 80}]  |\n| (\"player108\" :player{age: 36, name: \"Boris Diaw\"})         | [:follow \"player108\"->\"player101\" @0 {degree: 80}]  |\n...\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/where/#filter_on_pattern","title":"Filter on pattern","text":"
        nebula> MATCH (v:player{name:\"Tim Duncan\"})-[e]->(t) \\\n        WHERE (v)-[e]->(t:team) \\\n        RETURN (v)-->();\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| (v)-->() = (v)-->()                                                                                                                                                                                                                                                                                                                                                                                              |\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| [<(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:serve@0 {end_year: 2016, start_year: 1997}]->(\"team204\" :team{name: \"Spurs\"})>, <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})>, <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player125\" :player{age: 41, name: \"Manu Ginobili\"})>] |\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n\nnebula> MATCH (v:player{name:\"Tim Duncan\"})-[e]->(t) \\\n        WHERE NOT (v)-[e]->(t:team) \\\n        RETURN (v)-->();\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| (v)-->() = (v)-->()                                                                                                                                                                                                                                                                                                                                                                                              |\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| [<(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:serve@0 {end_year: 2016, start_year: 1997}]->(\"team204\" :team{name: \"Spurs\"})>, <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})>, <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player125\" :player{age: 41, name: \"Manu Ginobili\"})>] |\n| [<(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:serve@0 {end_year: 2016, start_year: 1997}]->(\"team204\" :team{name: \"Spurs\"})>, <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})>, <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player125\" :player{age: 41, name: \"Manu Ginobili\"})>] |\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/where/#filter_on_strings","title":"Filter on strings","text":"

        Use STARTS WITH, ENDS WITH, or CONTAINS in WHERE clauses to match a specific part of a string. String matching is case-sensitive.

        "},{"location":"3.ngql-guide/8.clauses-and-options/where/#starts_with","title":"STARTS WITH","text":"

        STARTS WITH will match the beginning of a string.

        The following example uses STARTS WITH \"T\" to retrieve the information of players whose name starts with T.

        nebula> MATCH (v:player) \\\n        WHERE v.player.name STARTS WITH \"T\" \\\n        RETURN v.player.name, v.player.age;\n+------------------+--------------+\n| v.player.name    | v.player.age |\n+------------------+--------------+\n| \"Tony Parker\"    | 36           |\n| \"Tiago Splitter\" | 34           |\n| \"Tim Duncan\"     | 42           |\n| \"Tracy McGrady\"  | 39           |\n+------------------+--------------+\n

        If you use STARTS WITH \"t\" in the preceding statement, an empty set is returned because no name in the dataset starts with the lowercase t.

        nebula> MATCH (v:player) \\\n        WHERE v.player.name STARTS WITH \"t\" \\\n        RETURN v.player.name, v.player.age;\n+---------------+--------------+\n| v.player.name | v.player.age |\n+---------------+--------------+\n+---------------+--------------+\nEmpty set (time spent 5080/6474 us)\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/where/#ends_with","title":"ENDS WITH","text":"

        ENDS WITH will match the ending of a string.

        The following example uses ENDS WITH \"r\" to retrieve the information of players whose name ends with r.

        nebula> MATCH (v:player) \\\n        WHERE v.player.name ENDS WITH \"r\" \\\n        RETURN v.player.name, v.player.age;\n+------------------+--------------+\n| v.player.name    | v.player.age |\n+------------------+--------------+\n| \"Tony Parker\"    | 36           |\n| \"Tiago Splitter\" | 34           |\n| \"Vince Carter\"   | 42           |\n+------------------+--------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/where/#contains","title":"CONTAINS","text":"

        CONTAINS will match a certain part of a string.

        The following example uses CONTAINS \"Pa\" to match the information of players whose name contains Pa.

        nebula> MATCH (v:player) \\\n        WHERE v.player.name CONTAINS \"Pa\" \\\n        RETURN v.player.name, v.player.age;\n+---------------+--------------+\n| v.player.name | v.player.age |\n+---------------+--------------+\n| \"Paul George\" | 28           |\n| \"Tony Parker\" | 36           |\n| \"Paul Gasol\"  | 38           |\n| \"Chris Paul\"  | 33           |\n+---------------+--------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/where/#negative_string_matching","title":"Negative string matching","text":"

        You can use the boolean operator NOT to negate a string matching condition.

        nebula> MATCH (v:player) \\\n        WHERE NOT v.player.name ENDS WITH \"R\" \\\n        RETURN v.player.name, v.player.age;\n+-------------------------+--------------+\n| v.player.name           | v.player.age |\n+-------------------------+--------------+\n| \"Danny Green\"           | 31           |\n| \"Tiago Splitter\"        | 34           |\n| \"David West\"            | 38           |\n| \"Russell Westbrook\"     | 30           |\n...\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/where/#filter_on_lists","title":"Filter on lists","text":""},{"location":"3.ngql-guide/8.clauses-and-options/where/#match_values_in_a_list","title":"Match values in a list","text":"

        Use the IN operator to check if a value is in a specific list.

        nebula> MATCH (v:player) \\\n        WHERE v.player.age IN range(20,25) \\\n        RETURN v.player.name, v.player.age;\n+-------------------------+--------------+\n| v.player.name           | v.player.age |\n+-------------------------+--------------+\n| \"Ben Simmons\"           | 22           |\n| \"Giannis Antetokounmpo\" | 24           |\n| \"Kyle Anderson\"         | 25           |\n| \"Joel Embiid\"           | 25           |\n| \"Kristaps Porzingis\"    | 23           |\n| \"Luka Doncic\"           | 20           |\n+-------------------------+--------------+\n\nnebula> LOOKUP ON player \\\n        WHERE player.age IN [25,28]  \\\n        YIELD properties(vertex).name, properties(vertex).age;\n+-------------------------+------------------------+\n| properties(VERTEX).name | properties(VERTEX).age |\n+-------------------------+------------------------+\n| \"Kyle Anderson\"         | 25                     |\n| \"Damian Lillard\"        | 28                     |\n| \"Joel Embiid\"           | 25                     |\n| \"Paul George\"           | 28                     |\n| \"Ricky Rubio\"           | 28                     |\n+-------------------------+------------------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/where/#match_values_not_in_a_list","title":"Match values not in a list","text":"

        Use NOT before IN to rule out the values in a list.

        nebula> MATCH (v:player) \\\n        WHERE v.player.age NOT IN range(20,25) \\\n        RETURN v.player.name AS Name, v.player.age AS Age \\\n        ORDER BY Age;\n+---------------------+-----+\n| Name                | Age |\n+---------------------+-----+\n| \"Kyrie Irving\"      | 26  |\n| \"Cory Joseph\"       | 27  |\n| \"Damian Lillard\"    | 28  |\n| \"Paul George\"       | 28  |\n| \"Ricky Rubio\"       | 28  |\n+---------------------+-----+\n...\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/with/","title":"WITH","text":"

        The WITH clause can retrieve the output from a query part, process it, and pass it to the next query part as the input.

        "},{"location":"3.ngql-guide/8.clauses-and-options/with/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

        This topic applies to openCypher syntax only.

        Note

        WITH has a similar function with the Pipe symbol in native nGQL, but they work in different ways. DO NOT use pipe symbols in the openCypher syntax or use WITH in native nGQL statements.

        "},{"location":"3.ngql-guide/8.clauses-and-options/with/#combine_statements_and_form_a_composite_query","title":"Combine statements and form a composite query","text":"

        Use a WITH clause to combine statements and transfer the output of a statement as the input of another statement.

        "},{"location":"3.ngql-guide/8.clauses-and-options/with/#example_1","title":"Example 1","text":"

        The following statement:

        1. Matches a path.
        2. Outputs all the vertices on the path to a list with the nodes() function.
        3. Unwinds the list into rows.
        4. Removes duplicated vertices and returns a set of distinct vertices.
        nebula> MATCH p=(v:player{name:\"Tim Duncan\"})--() \\\n        WITH nodes(p) AS n \\\n        UNWIND n AS n1 \\\n        RETURN DISTINCT n1;\n+-----------------------------------------------------------+\n| n1                                                        |\n+-----------------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"})        |\n| (\"player101\" :player{age: 36, name: \"Tony Parker\"})       |\n| (\"team204\" :team{name: \"Spurs\"})                          |\n| (\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"}) |\n| (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})     |\n| (\"player104\" :player{age: 32, name: \"Marco Belinelli\"})   |\n| (\"player144\" :player{age: 47, name: \"Shaquille O'Neal\"})  |\n| (\"player105\" :player{age: 31, name: \"Danny Green\"})       |\n| (\"player113\" :player{age: 29, name: \"Dejounte Murray\"})   |\n| (\"player107\" :player{age: 32, name: \"Aron Baynes\"})       |\n| (\"player109\" :player{age: 34, name: \"Tiago Splitter\"})    |\n| (\"player108\" :player{age: 36, name: \"Boris Diaw\"})        |\n+-----------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/with/#example_2","title":"Example 2","text":"

        The following statement:

        1. Matches the vertex with the VID player100.
        2. Outputs all the tags of the vertex into a list with the labels() function.
        3. Unwinds the list into rows.
        4. Returns the output.
        nebula> MATCH (v) \\\n        WHERE id(v)==\"player100\" \\\n        WITH labels(v) AS tags_unf \\\n        UNWIND tags_unf AS tags_f \\\n        RETURN tags_f;\n+----------+\n| tags_f   |\n+----------+\n| \"player\" |\n+----------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/with/#filter_composite_queries","title":"Filter composite queries","text":"

        WITH can work as a filter in the middle of a composite query.

        nebula> MATCH (v:player)-->(v2:player) \\\n        WITH DISTINCT v2 AS v2, v2.player.age AS Age \\\n        ORDER BY Age \\\n        WHERE Age<25 \\\n        RETURN v2.player.name AS Name, Age;\n+----------------------+-----+\n| Name                 | Age |\n+----------------------+-----+\n| \"Luka Doncic\"        | 20  |\n| \"Ben Simmons\"        | 22  |\n| \"Kristaps Porzingis\" | 23  |\n+----------------------+-----+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/with/#process_the_output_before_using_collect","title":"Process the output before using collect()","text":"

        Use a WITH clause to sort and limit the output before using collect() to transform the output into a list.

        nebula> MATCH (v:player) \\\n        WITH v.player.name AS Name \\\n        ORDER BY Name DESC \\\n        LIMIT 3 \\\n        RETURN collect(Name);\n+-----------------------------------------------+\n| collect(Name)                                 |\n+-----------------------------------------------+\n| [\"Yao Ming\", \"Vince Carter\", \"Tracy McGrady\"] |\n+-----------------------------------------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/with/#use_with_return","title":"Use with RETURN","text":"

        Set an alias using a WITH clause, and then output the result through a RETURN clause.

        nebula> WITH [1, 2, 3] AS `list` RETURN 3 IN `list` AS r;\n+------+\n| r    |\n+------+\n| true |\n+------+\n\nnebula> WITH 4 AS one, 3 AS two RETURN one > two AS result;\n+--------+\n| result |\n+--------+\n| true   |\n+--------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/yield/","title":"YIELD","text":"

        YIELD defines the output of an nGQL query.

        YIELD can lead a clause or a statement:

        • A YIELD clause works in nGQL statements such as GO, FETCH, or LOOKUP and must be defined to return the result.
        • A YIELD statement works in a composite query or independently.
        "},{"location":"3.ngql-guide/8.clauses-and-options/yield/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

        This topic applies to native nGQL only. For the openCypher syntax, use RETURN.

        YIELD has different functions in openCypher and nGQL.

        • In openCypher, YIELD is used in the CALL[\u2026YIELD] clause to specify the output of the procedure call.

          Note

          NGQL does not support CALL[\u2026YIELD] yet.

        • In nGQL, YIELD works like RETURN in openCypher.

        Note

        In the following examples, $$ and $- are property references. For more information, see Reference to properties.

        "},{"location":"3.ngql-guide/8.clauses-and-options/yield/#yield_clauses","title":"YIELD clauses","text":""},{"location":"3.ngql-guide/8.clauses-and-options/yield/#syntax","title":"Syntax","text":"
        YIELD [DISTINCT] <col> [AS <alias>] [, <col> [AS <alias>] ...];\n
        Parameter Description DISTINCT Aggregates the output and makes the statement return a distinct result set. col A field to be returned. If no alias is set, col will be a column name in the output. alias An alias for col. It is set after the keyword AS and will be a column name in the output."},{"location":"3.ngql-guide/8.clauses-and-options/yield/#use_a_yield_clause_in_a_statement","title":"Use a YIELD clause in a statement","text":"
        • Use YIELD with GO:
          nebula> GO FROM \"player100\" OVER follow \\\n        YIELD properties($$).name AS Friend, properties($$).age AS Age;\n+-----------------+-----+\n| Friend          | Age |\n+-----------------+-----+\n| \"Tony Parker\"   | 36  |\n| \"Manu Ginobili\" | 41  |\n+-----------------+-----+\n
        • Use YIELD with FETCH:
          nebula> FETCH PROP ON player \"player100\" \\\n        YIELD properties(vertex).name;\n+-------------------------+\n| properties(VERTEX).name |\n+-------------------------+\n| \"Tim Duncan\"            |\n+-------------------------+\n
        • Use YIELD with LOOKUP:
          nebula> LOOKUP ON player WHERE player.name == \"Tony Parker\" \\\n        YIELD properties(vertex).name, properties(vertex).age;\n+-------------------------+------------------------+\n| properties(VERTEX).name | properties(VERTEX).age |\n+-------------------------+------------------------+\n| \"Tony Parker\"           | 36                     |\n+-------------------------+------------------------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/yield/#yield_statements","title":"YIELD statements","text":""},{"location":"3.ngql-guide/8.clauses-and-options/yield/#syntax_1","title":"Syntax","text":"
        YIELD [DISTINCT] <col> [AS <alias>] [, <col> [AS <alias>] ...]\n[WHERE <conditions>];\n
        Parameter Description DISTINCT Aggregates the output and makes the statement return a distinct result set. col A field to be returned. If no alias is set, col will be a column name in the output. alias An alias for col. It is set after the keyword AS and will be a column name in the output. conditions Conditions set in a WHERE clause to filter the output. For more information, see WHERE."},{"location":"3.ngql-guide/8.clauses-and-options/yield/#use_a_yield_statement_in_a_composite_query","title":"Use a YIELD statement in a composite query","text":"

        In a composite query, a YIELD statement accepts, filters, and modifies the result set of the preceding statement, and then outputs it.

        The following query finds the players that \"player100\" follows and calculates their average age.

        nebula> GO FROM \"player100\" OVER follow \\\n        YIELD dst(edge) AS ID \\\n        | FETCH PROP ON player $-.ID \\\n        YIELD properties(vertex).age AS Age \\\n        | YIELD AVG($-.Age) as Avg_age, count(*)as Num_friends;\n+---------+-------------+\n| Avg_age | Num_friends |\n+---------+-------------+\n| 38.5    | 2           |\n+---------+-------------+\n

        The following query finds the players that \"player101\" follows with the follow degrees greater than 90.

        nebula> $var1 = GO FROM \"player101\" OVER follow \\\n        YIELD properties(edge).degree AS Degree, dst(edge) as ID; \\\n        YIELD $var1.ID AS ID WHERE $var1.Degree > 90;\n+-------------+\n| ID          |\n+-------------+\n| \"player100\" |\n| \"player125\" |\n+-------------+\n

        The following query finds the vertices in the player that are older than 30 and younger than 32, and returns the de-duplicate results.

        nebula> LOOKUP ON player  \\\n        WHERE player.age < 32 and player.age >30  \\\n        YIELD DISTINCT properties(vertex).age as v;\n+--------+\n| v      |\n+--------+\n| 31     |\n+--------+\n
        "},{"location":"3.ngql-guide/8.clauses-and-options/yield/#use_a_standalone_yield_statement","title":"Use a standalone YIELD statement","text":"

        A YIELD statement can calculate a valid expression and output the result.

        nebula> YIELD rand32(1, 6);\n+-------------+\n| rand32(1,6) |\n+-------------+\n| 3           |\n+-------------+\n\nnebula> YIELD \"Hel\" + \"\\tlo\" AS string1, \", World!\" AS string2;\n+-------------+------------+\n| string1     | string2    |\n+-------------+------------+\n| \"Hel    lo\" | \", World!\" |\n+-------------+------------+\n\nnebula> YIELD hash(\"Tim\") % 100;\n+-----------------+\n| (hash(Tim)%100) |\n+-----------------+\n| 42              |\n+-----------------+\n\nnebula> YIELD \\\n      CASE 2+3 \\\n      WHEN 4 THEN 0 \\\n      WHEN 5 THEN 1 \\\n      ELSE -1 \\\n      END \\\n      AS result;\n+--------+\n| result |\n+--------+\n| 1      |\n+--------+\n\nnebula> YIELD 1- -1;\n+----------+\n| (1--(1)) |\n+----------+\n| 2        |\n+----------+\n
        "},{"location":"3.ngql-guide/9.space-statements/1.create-space/","title":"CREATE SPACE","text":"

        Graph spaces are used to store data in a physically isolated way in NebulaGraph, which is similar to the database concept in MySQL. The CREATE SPACE statement can create a new graph space or clone the schema of an existing graph space.

        "},{"location":"3.ngql-guide/9.space-statements/1.create-space/#prerequisites","title":"Prerequisites","text":"

        Only the God role can use the CREATE SPACE statement. For more information, see AUTHENTICATION.

        "},{"location":"3.ngql-guide/9.space-statements/1.create-space/#syntax","title":"Syntax","text":""},{"location":"3.ngql-guide/9.space-statements/1.create-space/#create_graph_spaces","title":"Create graph spaces","text":"
        CREATE SPACE [IF NOT EXISTS] <graph_space_name> (\n    [partition_num = <partition_number>,]\n    [replica_factor = <replica_number>,]\n    vid_type = {FIXED_STRING(<N>) | INT[64]}\n    )\n    [COMMENT = '<comment>']\n
        Parameter Description IF NOT EXISTS Detects if the related graph space exists. If it does not exist, a new one will be created. The graph space existence detection here only compares the graph space name (excluding properties). <graph_space_name> 1. Uniquely identifies a graph space in a NebulaGraph instance. 2. Space names cannot be modified after they are set. 3. By default, the name only supports 1-4 byte UTF-8 encoded characters, including English letters (case sensitive), numbers, Chinese characters, etc. However, it cannot include special characters other than the underscore (_), and cannot start with a number. 4. To use special characters, reserved keywords, or start with a number, quote the entire name with backticks (`) and do not include periods (.) within the pair of backticks (`). For more information, see Keywords and reserved words. Note:1. If you name a space in Chinese and encounter a SyntaxError, you need to quote the Chinese characters with backticks (`). 2. To include a backtick (`) in a space name, use a backslash to escape the backtick, such as \\`; to include a backslash, the backslash itself also needs to be escaped, such as \\ . partition_num Specifies the number of partitions in each replica. The suggested value is 20 times (2 times for HDD) the number of the hard disks in the cluster. For example, if you have three hard disks in the cluster, we recommend that you set 60 partitions. The default value is 100. replica_factor Specifies the number of replicas in the cluster. The suggested number is 3 in a production environment and 1 in a test environment. The replica number must be an odd number for the need of quorum-based voting. The default value is 1. vid_type A required parameter. Specifies the VID type in a graph space. Available values are FIXED_STRING(N) and INT64. INT equals to INT64. `FIXED_STRING(<N>) specifies the VID as a string, while INT64 specifies it as an integer. N represents the maximum length of the VIDs. If you set a VID that is longer than N bytes, NebulaGraph throws an error. Note, for UTF-8 chars, the length may vary in different cases, i.e. a UTF-8 Chinese char is 3 byte, this means 11 Chinese chars(length-33) will exeed a FIXED_STRING(32) vid defination. COMMENT The remarks of the graph space. The maximum length is 256 bytes. By default, there is no comments on a space.

        Caution

        • If the replica number is set to one, you will not be able to load balance or scale out the NebulaGraph Storage Service with the SUBMIT JOB BALANCE statement.
        • Restrictions on VID type change and VID length:

          • For NebulaGraph v1.x, the type of VIDs can only be INT64, and the String type is not allowed. For NebulaGraph v2.x, both INT64 and FIXED_STRING(<N>) VID types are allowed. You must specify the VID type when creating a graph space, and use the same VID type in INSERT statements, otherwise, an error message Wrong vertex id type: 1001 occurs.
          • The length of the VID should not be longer than N characters. If it exceeds N, NebulaGraph throws The VID must be a 64-bit integer or a string fitting space vertex id length limit..
        • If the Host not enough! error appears, the immediate cause is that the number of online storage hosts is less than the value of replica_factor specified when creating a graph space. In this case, you can use the SHOW HOSTS command to see if the following situations occur:

          • For the case where there is only one storage host in a cluster, the value of replica_factor can only be specified to 1. Or create a graph space after storage hosts are scaled out.
          • A new storage host is found, but ADD HOSTS is not executed to activate it. In this case, run SHOW HOSTS to locate the new storage host information and then run ADD HOSTS to activate it. A graph space can be created after there are enough storage hosts.
          • For offline storage hosts after running SHOW HOSTS, troubleshooting is needed.

        Legacy version compatibility

        For NebulaGraph v2.x before v2.5.0, vid_type is optional and defaults to FIXED_STRING(8).

        Note

        graph_space_name, partition_num, replica_factor, vid_type, and comment cannot be modified once set. To modify them, drop the current working graph space with DROP SPACE and create a new one with CREATE SPACE.

        "},{"location":"3.ngql-guide/9.space-statements/1.create-space/#clone_graph_spaces","title":"Clone graph spaces","text":"
        CREATE SPACE [IF NOT EXISTS] <new_graph_space_name> AS <old_graph_space_name>;\n
        Parameter Description IF NOT EXISTS Detects if the new graph space exists. If it does not exist, the new one will be created. The graph space existence detection here only compares the graph space name (excluding properties). <new_graph_space_name> The name of the graph space that is newly created. By default, the space name only supports 1-4 byte UTF-8 encoded characters, including English letters (case sensitive), numbers, Chinese characters, etc. But special characters can only use underscore, and cannot start with a number. To use special characters, reserved keywords, or start with a number, quote the entire name with backticks (`) and cannot use periods (.). For more information, see Keywords and reserved words. When a new graph space is created, the schema of the old graph space <old_graph_space_name> will be cloned, including its parameters (the number of partitions and replicas, etc.), Tag, Edge type and native indexes. Note:1. If you name a space in Chinese and encounter a SyntaxError, you need to quote the Chinese characters with backticks (`). 2. To include a backtick (`) in a space name, use a backslash to escape the backtick, such as \\`; to include a backslash, the backslash itself also needs to be escaped, such as \\ . <old_graph_space_name> The name of the graph space that already exists."},{"location":"3.ngql-guide/9.space-statements/1.create-space/#examples","title":"Examples","text":"
        # The following example creates a graph space with a specified VID type and the maximum length. Other fields still use the default values.\nnebula> CREATE SPACE IF NOT EXISTS my_space_1 (vid_type=FIXED_STRING(30));\n\n# The following example creates a graph space with a specified partition number, replica number, and VID type.\nnebula> CREATE SPACE IF NOT EXISTS my_space_2 (partition_num=15, replica_factor=1, vid_type=FIXED_STRING(30));\n\n#  The following example creates a graph space with a specified partition number, replica number, and VID type, and adds a comment on it.\nnebula> CREATE SPACE IF NOT EXISTS my_space_3 (partition_num=15, replica_factor=1, vid_type=FIXED_STRING(30)) comment=\"Test the graph space\";\n\n# Clone a graph space.\nnebula> CREATE SPACE IF NOT EXISTS my_space_4 as my_space_3;\nnebula> SHOW CREATE SPACE my_space_4;\n+--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| Space        | Create Space                                                                                                                                                 |\n+--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| \"my_space_4\" | \"CREATE SPACE `my_space_4` (partition_num = 15, replica_factor = 1, charset = utf8, collate = utf8_bin, vid_type = FIXED_STRING(30)) comment = '\u6d4b\u8bd5\u56fe\u7a7a\u95f4'\" |\n+--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+\n
        "},{"location":"3.ngql-guide/9.space-statements/1.create-space/#implementation_of_the_operation","title":"Implementation of the operation","text":"

        Caution

        Trying to use a newly created graph space may fail because the creation is implemented asynchronously. To make sure the follow-up operations work as expected, Wait for two heartbeat cycles, i.e., 20 seconds. To change the heartbeat interval, modify the heartbeat_interval_secs parameter in the configuration files for all services. If the heartbeat interval is too short (i.e., less than 5 seconds), disconnection between peers may happen because of the misjudgment of machines in the distributed system.

        "},{"location":"3.ngql-guide/9.space-statements/1.create-space/#check_partition_distribution","title":"Check partition distribution","text":"

        On some large clusters, the partition distribution is possibly unbalanced because of the different startup times. You can run the following command to do a check of the machine distribution.

        nebula> SHOW HOSTS;\n+-------------+------+----------+--------------+--------------------------------+--------------------------------+---------+\n| Host        | Port | Status   | Leader count | Leader distribution            | Partition distribution         | Version |\n+-------------+------+----------+--------------+--------------------------------+--------------------------------+---------+\n| \"storaged0\" | 9779 | \"ONLINE\" | 8            | \"basketballplayer:3, test:5\"   | \"basketballplayer:10, test:10\" | \"master\" |\n| \"storaged1\" | 9779 | \"ONLINE\" | 9            | \"basketballplayer:4, test:5\"   | \"basketballplayer:10, test:10\" | \"master\" |\n| \"storaged2\" | 9779 | \"ONLINE\" | 3            | \"basketballplayer:3\"           | \"basketballplayer:10, test:10\" | \"master\" |\n+-------------+------+----------+--------------+--------------------------------+--------------------------------+---------+\n

        To balance the request loads, use the following command.

        nebula> BALANCE LEADER;\nnebula> SHOW HOSTS;\n+-------------+------+----------+--------------+--------------------------------+--------------------------------+---------+\n| Host        | Port | HTTP port | Status   | Leader count | Leader distribution            | Partition distribution         | Version |\n+-------------+------+-----------+----------+--------------+--------------------------------+--------------------------------+---------+\n| \"storaged0\" | 9779 | \"ONLINE\" | 7            | \"basketballplayer:3, test:4\"   | \"basketballplayer:10, test:10\" | \"master\" |\n| \"storaged1\" | 9779 | \"ONLINE\" | 7            | \"basketballplayer:4, test:3\"   | \"basketballplayer:10, test:10\" | \"master\" |\n| \"storaged2\" | 9779 | \"ONLINE\" | 6            | \"basketballplayer:3, test:3\"   | \"basketballplayer:10, test:10\" | \"master\" |\n+-------------+------+----------+--------------+--------------------------------+--------------------------------+---------+\n
        "},{"location":"3.ngql-guide/9.space-statements/2.use-space/","title":"USE","text":"

        USE specifies a graph space as the current working graph space for subsequent queries.

        "},{"location":"3.ngql-guide/9.space-statements/2.use-space/#prerequisites","title":"Prerequisites","text":"

        Running the USE statement requires some privileges for the graph space. Otherwise, NebulaGraph throws an error.

        "},{"location":"3.ngql-guide/9.space-statements/2.use-space/#syntax","title":"Syntax","text":"
        USE <graph_space_name>;\n
        "},{"location":"3.ngql-guide/9.space-statements/2.use-space/#examples","title":"Examples","text":"
        # The following example creates two sample spaces.\nnebula> CREATE SPACE IF NOT EXISTS space1 (vid_type=FIXED_STRING(30));\nnebula> CREATE SPACE IF NOT EXISTS space2 (vid_type=FIXED_STRING(30));\n\n# The following example specifies space1 as the current working graph space.\nnebula> USE space1;\n\n# The following example specifies space2 as the current working graph space. Hereafter, you cannot read any data from space1, because these vertices and edges being traversed have no relevance with space1.\nnebula> USE space2;\n

        Caution

        You cannot use two graph spaces in one statement.

        Different from Fabric Cypher, graph spaces in NebulaGraph are fully isolated from each other. Making a graph space as the working graph space prevents you from accessing other spaces. The only way to traverse in a new graph space is to switch by the USE statement. In Fabric Cypher, you can use two graph spaces in one statement (using the USE + CALL syntax). But in NebulaGraph, you can only use one graph space in one statement.

        "},{"location":"3.ngql-guide/9.space-statements/3.show-spaces/","title":"SHOW SPACES","text":"

        SHOW SPACES lists all the graph spaces in the NebulaGraph examples.

        "},{"location":"3.ngql-guide/9.space-statements/3.show-spaces/#syntax","title":"Syntax","text":"
        SHOW SPACES;\n
        "},{"location":"3.ngql-guide/9.space-statements/3.show-spaces/#example","title":"Example","text":"
        nebula> SHOW SPACES;\n+--------------------+\n| Name               |\n+--------------------+\n| \"cba\"              |\n| \"basketballplayer\" |\n+--------------------+\n

        To create graph spaces, see CREATE SPACE.

        "},{"location":"3.ngql-guide/9.space-statements/4.describe-space/","title":"DESCRIBE SPACE","text":"

        DESCRIBE SPACE returns the information about the specified graph space.

        "},{"location":"3.ngql-guide/9.space-statements/4.describe-space/#syntax","title":"Syntax","text":"

        You can use DESC instead of DESCRIBE for short.

        DESC[RIBE] SPACE <graph_space_name>;\n

        The DESCRIBE SPACE statement is different from the SHOW SPACES statement. For details about SHOW SPACES, see SHOW SPACES.

        "},{"location":"3.ngql-guide/9.space-statements/4.describe-space/#example","title":"Example","text":"
        nebula> DESCRIBE SPACE basketballplayer;\n+----+--------------------+------------------+----------------+---------+------------+--------------------+---------+\n| ID | Name               | Partition Number | Replica Factor | Charset | Collate    | Vid Type           | Comment |\n+----+--------------------+------------------+----------------+---------+------------+--------------------+---------+\n| 1  | \"basketballplayer\" | 10               | 1              | \"utf8\"  | \"utf8_bin\" | \"FIXED_STRING(32)\" |         |\n+----+--------------------+------------------+----------------+---------+------------+--------------------+---------+\n
        "},{"location":"3.ngql-guide/9.space-statements/5.drop-space/","title":"DROP SPACE","text":"

        DROP SPACE deletes the specified graph space and everything in it.

        Note

        DROP SPACE can only delete the specified logic graph space while retain all the data on the hard disk by modifying the value of auto_remove_invalid_space to false in the Storage service configuration file. For more information, see Storage configuration.

        Warning

        After you execute DROP SPACE, even if the snapshot contains data of the graph space, the data of the graph space cannot be recovered.

        "},{"location":"3.ngql-guide/9.space-statements/5.drop-space/#prerequisites","title":"Prerequisites","text":"

        Only the God role can use the DROP SPACE statement. For more information, see AUTHENTICATION.

        "},{"location":"3.ngql-guide/9.space-statements/5.drop-space/#syntax","title":"Syntax","text":"
        DROP SPACE [IF EXISTS] <graph_space_name>;\n

        You can use the IF EXISTS keywords when dropping spaces. These keywords automatically detect if the related graph space exists. If it exists, it will be deleted. Otherwise, no graph space will be deleted.

        Legacy version compatibility

        In NebulaGraph versions earlier than 3.1.0, the DROP SPACE statement does not remove all the files and directories from the disk by default.

        Danger

        BE CAUTIOUS about running the DROP SPACE statement.

        "},{"location":"3.ngql-guide/9.space-statements/5.drop-space/#faq","title":"FAQ","text":"

        Q: Why is my disk space not freed after executing the 'DROP SPACE' statement and deleting a graph space?

        A: For NebulaGraph version earlier than 3.1.0, DROP SPACE can only delete the specified logic graph space and does not delete the files and directories on the disk. To delete the files and directories on the disk, manually delete the corresponding file path. The file path is located in <nebula_graph_install_path>/data/storage/nebula/<space_id>. The <space_id> can be viewed via DESCRIBE SPACE {space_name}.

        "},{"location":"3.ngql-guide/9.space-statements/6.clear-space/","title":"CLEAR SPACE","text":"

        CLEAR SPACE deletes the vertices and edges in a graph space, but does not delete the graph space itself and the schema information.

        Note

        It is recommended to execute SUBMIT JOB COMPACT immediately after executing the CLEAR SPACE operation improve the query performance. Note that the COMPACT operation may affect query performance, and it is recommended to perform this operation during low business hours (e.g., early morning).

        "},{"location":"3.ngql-guide/9.space-statements/6.clear-space/#permission_requirements","title":"Permission requirements","text":"

        Only the God role has the permission to run CLEAR SPACE.

        "},{"location":"3.ngql-guide/9.space-statements/6.clear-space/#caution","title":"Caution","text":"
        • Once cleared, the data CANNOT be recovered. Use CLEAR SPACE with caution.
        • CLEAR SPACE is not an atomic operation. If an error occurs, re-run CLEAR SPACE to avoid data remaining.
        • The larger the amount of data in the graph space, the longer it takes to clear it. If the execution fails due to client connection timeout, increase the value of the storage_client_timeout_ms parameter in the Graph Service configuration.
        • During the execution of CLEAR SPACE, writing data into the graph space is not automatically prohibited. Such write operations can result in incomplete data clearing, and the residual data can be damaged.

        Note

        The NebulaGraph Community Edition does not support blocking data writing while allowing CLEAR SPACE.

        "},{"location":"3.ngql-guide/9.space-statements/6.clear-space/#syntax","title":"Syntax","text":"
        CLEAR SPACE [IF EXISTS] <space_name>;\n
        Parameter/Option Description IF EXISTS Check whether the graph space to be cleared exists. If it exists, continue to clear it. If it does not exist, the execution finishes, and a message indicating that the execution succeeded is displayed. If IF EXISTS is not set and the graph space does not exist, the CLEAR SPACE statement fails to execute, and an error occurs. space_name The name of the space to be cleared.

        Example:

        CLEAR SPACE basketballplayer;\n
        "},{"location":"3.ngql-guide/9.space-statements/6.clear-space/#data_reserved","title":"Data reserved","text":"

        CLEAR SPACE does not delete the following data in a graph space:

        • Tag information.
        • Edge type information.
        • The metadata of native indexes and full-text indexes.

        The following example shows what CLEAR SPACE deletes and reserves.

        # Enter the graph space basketballplayer.\nnebula [(none)]> use basketballplayer;\nExecution succeeded\n\n# List tags and Edge types.\nnebula[basketballplayer]> SHOW TAGS;\n+----------+\n| Name     |\n+----------+\n| \"player\" |\n| \"team\"   |\n+----------+\nGot 2 rows\n\nnebula[basketballplayer]> SHOW EDGES;\n+----------+\n| Name     |\n+----------+\n| \"follow\" |\n| \"serve\"  |\n+----------+\nGot 2 rows\n\n# Submit a job to make statistics of the graph space.\nnebula[basketballplayer]> SUBMIT JOB STATS;\n+------------+\n| New Job Id |\n+------------+\n| 4          |\n+------------+\nGot 1 rows\n\n# Check the statistics.\nnebula[basketballplayer]> SHOW STATS;\n+---------+------------+-------+\n| Type    | Name       | Count |\n+---------+------------+-------+\n| \"Tag\"   | \"player\"   | 51    |\n| \"Tag\"   | \"team\"     | 30    |\n| \"Edge\"  | \"follow\"   | 81    |\n| \"Edge\"  | \"serve\"    | 152   |\n| \"Space\" | \"vertices\" | 81    |\n| \"Space\" | \"edges\"    | 233   |\n+---------+------------+-------+\nGot 6 rows\n\n# List tag indexes.\nnebula[basketballplayer]> SHOW TAG INDEXES;\n+------------------+----------+----------+\n| Index Name       | By Tag   | Columns  |\n+------------------+----------+----------+\n| \"player_index_0\" | \"player\" | []       |\n| \"player_index_1\" | \"player\" | [\"name\"] |\n+------------------+----------+----------+\nGot 2 rows\n\n# ----------------------- Dividing line for CLEAR SPACE -----------------------\n# Run CLEAR SPACE to clear the graph space basketballplayer.\nnebula[basketballplayer]> CLEAR SPACE basketballplayer;\nExecution succeeded\n\n# Update the statistics.\nnebula[basketballplayer]> SUBMIT JOB STATS;\n+------------+\n| New Job Id |\n+------------+\n| 5          |\n+------------+\nGot 1 rows\n\n# Check the statistics. The tags and edge types still exist, but all the vertices and edges are gone.\nnebula[basketballplayer]> SHOW STATS;\n+---------+------------+-------+\n| Type    | Name       | Count |\n+---------+------------+-------+\n| \"Tag\"   | \"player\"   | 0     |\n| \"Tag\"   | \"team\"     | 0     |\n| \"Edge\"  | \"follow\"   | 0     |\n| \"Edge\"  | \"serve\"    | 0     |\n| \"Space\" | \"vertices\" | 0     |\n| \"Space\" | \"edges\"    | 0     |\n+---------+------------+-------+\nGot 6 rows\n\n# Try to list the tag indexes. They still exist.\nnebula[basketballplayer]> SHOW TAG INDEXES;\n+------------------+----------+----------+\n| Index Name       | By Tag   | Columns  |\n+------------------+----------+----------+\n| \"player_index_0\" | \"player\" | []       |\n| \"player_index_1\" | \"player\" | [\"name\"] |\n+------------------+----------+----------+\nGot 2 rows (time spent 523/978 us)\n
        "},{"location":"4.deployment-and-installation/1.resource-preparations/","title":"Prepare resources for compiling, installing, and running NebulaGraph","text":"

        This topic describes the requirements and suggestions for compiling and installing NebulaGraph, as well as how to estimate the resource you need to reserve for running a NebulaGraph cluster.

        "},{"location":"4.deployment-and-installation/1.resource-preparations/#about_storage_devices","title":"About storage devices","text":"

        NebulaGraph is designed and implemented for NVMe SSD. All default parameters are optimized for the SSD devices and require extremely high IOPS and low latency.

        • Due to the poor IOPS capability and long random seek latency, HDD is not recommended. Users may encounter many problems when using HDD.
        • Do not use remote storage devices, such as NAS or SAN. Do not connect an external virtual hard disk based on HDFS or Ceph.
        • RAID is not recommended because NebulaGraph provides a multi-replica mechanism. Configuring RAID would result in a waste of resources.
        • Use local SSD devices, or AWS Provisioned IOPS SSD equivalence.
        "},{"location":"4.deployment-and-installation/1.resource-preparations/#about_cpu_architecture","title":"About CPU architecture","text":"

        Starting with 3.0.2, you can run containerized NebulaGraph databases on Docker Desktop for ARM macOS or on ARM Linux servers.

        Caution

        We do not recommend you deploy NebulaGraph on Docker Desktop for Windows due to its subpar performance. For details, see #12401.

        "},{"location":"4.deployment-and-installation/1.resource-preparations/#requirements_for_compiling_the_source_code","title":"Requirements for compiling the source code","text":""},{"location":"4.deployment-and-installation/1.resource-preparations/#hardware_requirements_for_compiling_nebulagraph","title":"Hardware requirements for compiling NebulaGraph","text":"Item Requirement CPU architecture x86_64 Memory 4 GB Disk 10 GB, SSD"},{"location":"4.deployment-and-installation/1.resource-preparations/#supported_operating_systems_for_compiling_nebulagraph","title":"Supported operating systems for compiling NebulaGraph","text":"

        For now, we can only compile NebulaGraph in the Linux system. We recommend that you use any Linux system with kernel version 4.15 or above.

        Note

        To install NebulaGraph on Linux systems with kernel version lower than required, use RPM/DEB packages or TAR files.

        "},{"location":"4.deployment-and-installation/1.resource-preparations/#software_requirements_for_compiling_nebulagraph","title":"Software requirements for compiling NebulaGraph","text":"

        You must have the correct version of the software listed below to compile NebulaGraph. If they are not as required or you are not sure, follow the steps in Prepare software for compiling NebulaGraph to get them ready.

        Software Version Note glibc 2.17 or above You can run ldd --version to check the glibc version. make Any stable version - m4 Any stable version - git Any stable version - wget Any stable version - unzip Any stable version - xz Any stable version - readline-devel Any stable version - ncurses-devel Any stable version - zlib-devel Any stable version - g++ 8.5.0 or above You can run gcc -v to check the gcc version. cmake 3.14.0 or above You can run cmake --version to check the cmake version. curl Any stable version - redhat-lsb-core Any stable version - libstdc++-static Any stable version Only needed in CentOS 8+, RedHat 8+, and Fedora systems. libasan Any stable version Only needed in CentOS 8+, RedHat 8+, and Fedora systems. bzip2 Any stable version -

        Other third-party software will be automatically downloaded and installed to the build directory at the configure (cmake) stage.

        "},{"location":"4.deployment-and-installation/1.resource-preparations/#prepare_software_for_compiling_nebulagraph","title":"Prepare software for compiling NebulaGraph","text":"

        If part of the dependencies are missing or the versions does not meet the requirements, manually install them with the following steps. You can skip unnecessary dependencies or steps according to your needs.

        1. Install dependencies.

          • For CentOS, RedHat, and Fedora users, run the following commands.
            $ yum update\n$ yum install -y make \\\n                 m4 \\\n                 git \\\n                 wget \\\n                 unzip \\\n                 xz \\\n                 readline-devel \\\n                 ncurses-devel \\\n                 zlib-devel \\\n                 gcc \\\n                 gcc-c++ \\\n                 cmake \\\n                 curl \\\n                 redhat-lsb-core \\\n                 bzip2\n  // For CentOS 8+, RedHat 8+, and Fedora, install libstdc++-static and libasan as well\n$ yum install -y libstdc++-static libasan\n
          • For Debian and Ubuntu users, run the following commands.
            $ apt-get update\n$ apt-get install -y make \\\n                     m4 \\\n                     git \\\n                     wget \\\n                     unzip \\\n                     xz-utils \\\n                     curl \\\n                     lsb-core \\\n                     build-essential \\\n                     libreadline-dev \\\n                     ncurses-dev \\\n                     cmake \\\n                     bzip2\n
        2. Check if the GCC and cmake on your host are in the right version. See Software requirements for compiling NebulaGraph for the required versions.

          $ g++ --version\n$ cmake --version\n

          If your GCC and CMake are in the right versions, then you are all set and you can ignore the subsequent steps. If they are not, select and perform the needed steps as follows.

        3. If the CMake version is incorrect, visit the CMake official website to install the required version.

        4. If the G++ version is incorrect, visit the G++ official website or follow the instructions below to to install the required version.

          • For CentOS users, run:

            yum install centos-release-scl\nyum install devtoolset-11\nscl enable devtoolset-11 'bash'\n
          • For Ubuntu users, run:

            add-apt-repository ppa:ubuntu-toolchain-r/test\napt install gcc-11 g++-11\n
        "},{"location":"4.deployment-and-installation/1.resource-preparations/#requirements_and_suggestions_for_installing_nebulagraph_in_test_environments","title":"Requirements and suggestions for installing NebulaGraph in test environments","text":""},{"location":"4.deployment-and-installation/1.resource-preparations/#hardware_requirements_for_test_environments","title":"Hardware requirements for test environments","text":"Item Requirement CPU architecture x86_64 Number of CPU core 4 Memory 8 GB Disk 100 GB, SSD"},{"location":"4.deployment-and-installation/1.resource-preparations/#supported_operating_systems_for_test_environments","title":"Supported operating systems for test environments","text":"

        For now, we can only install NebulaGraph in the Linux system. To install NebulaGraph in a test environment, we recommend that you use any Linux system with kernel version 3.9 or above.

        "},{"location":"4.deployment-and-installation/1.resource-preparations/#suggested_service_architecture_for_test_environments","title":"Suggested service architecture for test environments","text":"Process Suggested number metad (the metadata service process) 1 storaged (the storage service process) 1 or more graphd (the query engine service process) 1 or more

        For example, for a single-machine test environment, you can deploy 1 metad, 1 storaged, and 1 graphd processes in the machine.

        For a more common test environment, such as a cluster of 3 machines (named as A, B, and C), you can deploy NebulaGraph as follows:

        Machine name Number of metad Number of storaged Number of graphd A 1 1 1 B None 1 1 C None 1 1"},{"location":"4.deployment-and-installation/1.resource-preparations/#requirements_and_suggestions_for_installing_nebulagraph_in_production_environments","title":"Requirements and suggestions for installing NebulaGraph in production environments","text":""},{"location":"4.deployment-and-installation/1.resource-preparations/#hardware_requirements_for_production_environments","title":"Hardware requirements for production environments","text":"Item Requirement CPU architecture x86_64 Number of CPU core 48 Memory 256 GB Disk 2 * 1.6 TB, NVMe SSD"},{"location":"4.deployment-and-installation/1.resource-preparations/#supported_operating_systems_for_production_environments","title":"Supported operating systems for production environments","text":"

        For now, we can only install NebulaGraph in the Linux system. To install NebulaGraph in a production environment, we recommend that you use any Linux system with kernel version 3.9 or above.

        Users can adjust some of the kernel parameters to better accommodate the need for running NebulaGraph. For more information, see kernel configuration.

        "},{"location":"4.deployment-and-installation/1.resource-preparations/#suggested_service_architecture_for_production_environments","title":"Suggested service architecture for production environments","text":"

        Danger

        DO NOT deploy a single cluster across IDCs (The Enterprise Edtion supports data synchronization between clusters across IDCs).

        Process Suggested number metad (the metadata service process) 3 storaged (the storage service process) 3 or more graphd (the query engine service process) 3 or more

        Each metad process automatically creates and maintains a replica of the metadata. Usually, you need to deploy three metad processes and only three.

        The number of storaged processes does not affect the number of graph space replicas.

        Users can deploy multiple processes on a single machine. For example, on a cluster of 5 machines (named as A, B, C, D, and E), you can deploy NebulaGraph as follows:

        Machine name Number of metad Number of storaged Number of graphd A 1 1 1 B 1 1 1 C 1 1 1 D None 1 1 E None 1 1"},{"location":"4.deployment-and-installation/1.resource-preparations/#capacity_requirements_for_running_a_nebulagraph_cluster","title":"Capacity requirements for running a NebulaGraph cluster","text":"

        Users can estimate the memory, disk space, and partition number needed for a NebulaGraph cluster of 3 replicas as follows.

        Resource Unit How to estimate Description Disk space for a cluster Bytes the_sum_of_edge_number_and_vertex_number * average_bytes_of_properties * 7.5 * 120% For more information, see Edge partitioning and storage amplification. Memory for a cluster Bytes [the_sum_of_edge_number_and_vertex_number * 16 + the_number_of_RocksDB_instances * (write_buffer_size * max_write_buffer_number) + rocksdb_block_cache] * 120% write_buffer_size and max_write_buffer_number are RocksDB parameters. For more information, see MemTable. For details about rocksdb_block_cache, see Memory usage in RocksDB. Number of partitions for a graph space - the_number_of_disks_in_the_cluster * disk_partition_num_multiplier disk_partition_num_multiplier is an integer between 2 and 20 (both including). Its value depends on the disk performance. Use 20 for SSD and 2 for HDD.
        • Question 1: Why do I need to multiply by 7.5 in the disk space estimation formula?

          Answer: On one hand, the data in one single replica takes up about 2.5 times more space than that of the original data file (csv) according to test values. On the other hand, indexes take up additional space. Each indexed vertex or edge takes up 16 bytes of memory. The hard disk space occupied by the index can be empirically estimated as the total number of indexed vertices or edges * 50 bytes.

        • Question 2: Why do we multiply the disk space and memory by 120%?

          Answer: The extra 20% is for buffer.

        • Question 3: How to get the number of RocksDB instances?

          Answer: Each graph space corresponds to one RocksDB instance and each directory in the --data_path item in the etc/nebula-storaged.conf file corresponds to one RocksDB instance. That is, the number of RocksDB instances = the number of directories * the number of graph spaces.

          Note

          Users can decrease the memory size occupied by the bloom filter by adding --enable_partitioned_index_filter=true in etc/nebula-storaged.conf. But it may decrease the read performance in some random-seek cases.

        Caution

        Each RocksDB instance takes up about 70M of disk space even when no data has been written yet. One partition corresponds to one RocksDB instance, and when the partition setting is very large, for example, 100, the graph space takes up a lot of disk space after it is created.

        "},{"location":"4.deployment-and-installation/4.uninstall-nebula-graph/","title":"Uninstall NebulaGraph","text":"

        This topic describes how to uninstall NebulaGraph.

        Caution

        Before re-installing NebulaGraph on a machine, follow this topic to completely uninstall the old NebulaGraph, in case the remaining data interferes with the new services, including inconsistencies between Meta services.

        "},{"location":"4.deployment-and-installation/4.uninstall-nebula-graph/#prerequisite","title":"Prerequisite","text":"

        The NebulaGraph services should be stopped before the uninstallation. For more information, see Manage NebulaGraph services.

        "},{"location":"4.deployment-and-installation/4.uninstall-nebula-graph/#step_1_delete_data_files_of_the_storage_and_meta_services","title":"Step 1: Delete data files of the Storage and Meta Services","text":"

        If you have modified the data_path in the configuration files for the Meta Service and Storage Service, the directories where NebulaGraph stores data may not be in the installation path of NebulaGraph. Check the configuration files to confirm the data paths, and then manually delete the directories to clear all data.

        Note

        For a NebulaGraph cluster, delete the data files of all Storage and Meta servers.

        1. Check the Storage Service disk settings. For example:

          ########## Disk ##########\n# Root data path. Split by comma. e.g. --data_path=/disk1/path1/,/disk2/path2/\n# One path per Rocksdb instance.\n--data_path=/nebula/data/storage\n
        2. Check the Metad Service configurations and find the corresponding metadata directories.

        3. Delete the data and the directories found in step 2.

        "},{"location":"4.deployment-and-installation/4.uninstall-nebula-graph/#step_2_delete_the_installation_directories","title":"Step 2: Delete the installation directories","text":"

        Note

        Delete all installation directories, including the cluster.id file in them.

        The default installation path is /usr/local/nebula, which is specified by --prefix while installing NebulaGraph.

        "},{"location":"4.deployment-and-installation/4.uninstall-nebula-graph/#uninstall_nebulagraph_deployed_with_source_code","title":"Uninstall NebulaGraph deployed with source code","text":"

        Find the installation directories of NebulaGraph, and delete them all.

        "},{"location":"4.deployment-and-installation/4.uninstall-nebula-graph/#uninstall_nebulagraph_deployed_with_rpm_packages","title":"Uninstall NebulaGraph deployed with RPM packages","text":"
        1. Run the following command to get the NebulaGraph version.

          $ rpm -qa | grep \"nebula\"\n

          The return message is as follows.

          nebula-graph-master-1.x86_64\n
        2. Run the following command to uninstall NebulaGraph.

          sudo rpm -e <nebula_version>\n

          For example:

          sudo rpm -e nebula-graph-master-1.x86_64\n
        3. Delete the installation directories.

        "},{"location":"4.deployment-and-installation/4.uninstall-nebula-graph/#uninstall_nebulagraph_deployed_with_deb_packages","title":"Uninstall NebulaGraph deployed with DEB packages","text":"
        1. Run the following command to get the NebulaGraph version.

          $ dpkg -l | grep \"nebula\"\n

          The return message is as follows.

          ii  nebula-graph  master  amd64     NebulaGraph Package built using CMake\n
        2. Run the following command to uninstall NebulaGraph.

          sudo dpkg -r <nebula_version>\n

          For example:

          sudo dpkg -r nebula-graph\n
        3. Delete the installation directories.

        "},{"location":"4.deployment-and-installation/4.uninstall-nebula-graph/#uninstall_nebulagraph_deployed_with_docker_compose","title":"Uninstall NebulaGraph deployed with Docker Compose","text":"
        1. In the nebula-docker-compose directory, run the following command to stop the NebulaGraph services.

          docker-compose down -v\n
        2. Delete the nebula-docker-compose directory.

        "},{"location":"4.deployment-and-installation/connect-to-nebula-graph/","title":"Connect to NebulaGraph","text":"

        This topic provides basic instruction on how to use the native CLI client NebulaGraph Console to connect to NebulaGraph.

        Caution

        When connecting to NebulaGraph for the first time, you must register the Storage Service before querying data.

        NebulaGraph supports multiple types of clients, including a CLI client, a GUI client, and clients developed in popular programming languages. For more information, see the client list.

        "},{"location":"4.deployment-and-installation/connect-to-nebula-graph/#prerequisites","title":"Prerequisites","text":"
        • You have started NebulaGraph services.
        • The machine on which you plan to run NebulaGraph Console has network access to the Graph Service of NebulaGraph.
        • The NebulaGraph Console version is compatible with the NebulaGraph version.

          Note

          NebulaGraph Console and NebulaGraph of the same version number are the most compatible. There may be compatibility issues when connecting to NebulaGraph with a different version of NebulaGraph Console. The error message incompatible version between client and server is displayed when there is such an issue.

        "},{"location":"4.deployment-and-installation/connect-to-nebula-graph/#steps","title":"Steps","text":"
        1. On the NebulaGraph Console releases page, select a NebulaGraph Console version and click Assets.

          Note

          It is recommended to select the latest version.

        2. In the Assets area, find the correct binary file for the machine where you want to run NebulaGraph Console and download the file to the machine.

        3. (Optional) Rename the binary file to nebula-console for convenience.

          Note

          For Windows, rename the file to nebula-console.exe.

        4. On the machine to run NebulaGraph Console, grant the execute permission of the nebula-console binary file to the user.

          Note

          For Windows, skip this step.

          $ chmod 111 nebula-console\n
        5. In the command line interface, change the working directory to the one where the nebula-console binary file is stored.

        6. Run the following command to connect to NebulaGraph.

          • For Linux or macOS:
          $ ./nebula-console -addr <ip> -port <port> -u <username> -p <password>\n[-t 120] [-e \"nGQL_statement\" | -f filename.nGQL]\n
          • For Windows:
          > nebula-console.exe -addr <ip> -port <port> -u <username> -p <password>\n[-t 120] [-e \"nGQL_statement\" | -f filename.nGQL]\n

          Parameter descriptions are as follows:

          Parameter Description -h/-help Shows the help menu. -addr/-address Sets the IP (or hostname) of the Graph service. The default address is 127.0.0.1. -P/-port Sets the port number of the graphd service. The default port number is 9669. -u/-user Sets the username of your NebulaGraph account. Before enabling authentication, you can use any existing username. The default username is root. -p/-password Sets the password of your NebulaGraph account. Before enabling authentication, you can use any characters as the password. -t/-timeout Sets an integer-type timeout threshold of the connection. The unit is millisecond. The default value is 120. -e/-eval Sets a string-type nGQL statement. The nGQL statement is executed once the connection succeeds. The connection stops after the result is returned. -f/-file Sets the path of an nGQL file. The nGQL statements in the file are executed once the connection succeeds. The result will be returned and the connection stops then. -enable_ssl Enables SSL encryption when connecting to NebulaGraph. -ssl_root_ca_path Sets the storage path of the certification authority file. -ssl_cert_path Sets the storage path of the certificate file. -ssl_private_key_path Sets the storage path of the private key file.

          For information on more parameters, see the project repository.

        "},{"location":"4.deployment-and-installation/manage-service/","title":"Manage NebulaGraph Service","text":"

        NebulaGraph supports managing services with scripts.

        "},{"location":"4.deployment-and-installation/manage-service/#manage_services_with_script","title":"Manage services with script","text":"

        You can use the nebula.service script to start, stop, restart, terminate, and check the NebulaGraph services.

        Note

        nebula.service is stored in the /usr/local/nebula/scripts directory by default. If you have customized the path, use the actual path in your environment.

        "},{"location":"4.deployment-and-installation/manage-service/#syntax","title":"Syntax","text":"
        $ sudo /usr/local/nebula/scripts/nebula.service\n[-v] [-c <config_file_path>]\n<start | stop | restart | kill | status>\n<metad | graphd | storaged | all>\n
        Parameter Description -v Display detailed debugging information. -c Specify the configuration file path. The default path is /usr/local/nebula/etc/. start Start the target services. stop Stop the target services. restart Restart the target services. kill Terminate the target services. status Check the status of the target services. metad Set the Meta Service as the target service. graphd Set the Graph Service as the target service. storaged Set the Storage Service as the target service. all Set all the NebulaGraph services as the target services."},{"location":"4.deployment-and-installation/manage-service/#start_nebulagraph","title":"Start NebulaGraph","text":"

        Run the following command to start NebulaGraph.

        $ sudo /usr/local/nebula/scripts/nebula.service start all\n[INFO] Starting nebula-metad...\n[INFO] Done\n[INFO] Starting nebula-graphd...\n[INFO] Done\n[INFO] Starting nebula-storaged...\n[INFO] Done\n
        "},{"location":"4.deployment-and-installation/manage-service/#stop_nebulagraph","title":"Stop NebulaGraph","text":"

        Danger

        Do not run kill -9 to forcibly terminate the processes. Otherwise, there is a low probability of data loss.

        Run the following command to stop NebulaGraph.

        $ sudo /usr/local/nebula/scripts/nebula.service stop all\n[INFO] Stopping nebula-metad...\n[INFO] Done\n[INFO] Stopping nebula-graphd...\n[INFO] Done\n[INFO] Stopping nebula-storaged...\n[INFO] Done\n
        "},{"location":"4.deployment-and-installation/manage-service/#check_the_service_status","title":"Check the service status","text":"

        Run the following command to check the service status of NebulaGraph.

        $ sudo /usr/local/nebula/scripts/nebula.service status all\n
        • NebulaGraph is running normally if the following information is returned.

          INFO] nebula-metad(33fd35e): Running as 29020, Listening on 9559\n[INFO] nebula-graphd(33fd35e): Running as 29095, Listening on 9669\n[WARN] nebula-storaged after v3.0.0 will not start service until it is added to cluster.\n[WARN] See Manage Storage hosts:ADD HOSTS in https://docs.nebula-graph.io/\n[INFO] nebula-storaged(33fd35e): Running as 29147, Listening on 9779\n

          Note

          After starting NebulaGraph, the port of the nebula-storaged process is shown in red. Because the nebula-storaged process waits for the nebula-metad to add the current Storage service during the startup process. The Storage works after it receives the ready signal. Starting from NebulaGraph 3.0.0, the Meta service cannot directly read or write data in the Storage service that you add in the configuration file. The configuration file only registers the Storage service to the Meta service. You must run the ADD HOSTS command to enable the Meta to read and write data in the Storage service. For more information, see Manage Storage hosts.

        • If the returned result is similar to the following one, there is a problem. You may also go to the NebulaGraph community for help.
          [INFO] nebula-metad: Running as 25600, Listening on 9559\n[INFO] nebula-graphd: Exited\n[INFO] nebula-storaged: Running as 25646, Listening on 9779\n

        The NebulaGraph services consist of the Meta Service, Graph Service, and Storage Service. The configuration files for all three services are stored in the /usr/local/nebula/etc/ directory by default. You can check the configuration files according to the returned result to troubleshoot problems.

        "},{"location":"4.deployment-and-installation/manage-service/#next_to_do","title":"Next to do","text":"

        Connect to NebulaGraph

        "},{"location":"4.deployment-and-installation/manage-storage-host/","title":"Manage Storage hosts","text":"

        Starting from NebulaGraph 3.0.0, setting Storage hosts in the configuration files only registers the hosts on the Meta side, but does not add them into the cluster. You must run the ADD HOSTS statement to add the Storage hosts.

        Note

        NebulaGraph Cloud clusters add Storage hosts automatically. Cloud users do not need to manually run ADD HOSTS.

        "},{"location":"4.deployment-and-installation/manage-storage-host/#prerequisites","title":"Prerequisites","text":"
        • You have connected to the NebulaGraph database.
        "},{"location":"4.deployment-and-installation/manage-storage-host/#add_storage_hosts","title":"Add Storage hosts","text":"

        Add the Storage hosts to a NebulaGraph cluster.

        nebula> ADD HOSTS <ip>:<port> [,<ip>:<port> ...];\nnebula> ADD HOSTS \"<hostname>\":<port> [,\"<hostname>\":<port> ...];\n

        Note

        • To make sure the follow-up operations work as expected, wait for two heartbeat cycles, i.e., 20 seconds, and then run SHOW HOSTS to check whether the host is online.
        • Make sure that the IP address and port number are the same as those in the configuration file. For example, the default IP address and port number in standalone deployment are 127.0.0.1:9779.
        • When using a domain name, enclose it in quotation marks, for example, ADD HOSTS \"foo-bar\":9779.
        • Ensure that the storage host to be added is not used by any other cluster, otherwise, the storage adding operation will fail.
        "},{"location":"4.deployment-and-installation/manage-storage-host/#drop_storage_hosts","title":"Drop Storage hosts","text":"

        Delete the Storage hosts from cluster.

        Note

        You can not delete an in-use Storage host directly. Delete the associated graph space before deleting the Storage host.

        nebula> DROP HOSTS <ip>:<port> [,<ip>:<port> ...];\nnebula> DROP HOSTS \"<hostname>\":<port> [,\"<hostname>\":<port> ...];\n
        "},{"location":"4.deployment-and-installation/manage-storage-host/#view_storage_hosts","title":"View Storage hosts","text":"

        View the Storage hosts in the cluster.

        nebula> SHOW HOSTS STORAGE;\n+-------------+------+----------+-----------+--------------+---------+\n| Host        | Port | Status   | Role      | Git Info Sha | Version |\n+-------------+------+----------+-----------+--------------+---------+\n| \"storaged0\" | 9779 | \"ONLINE\" | \"STORAGE\" | \"3ba41bd\"    | \"master\" |\n| \"storaged1\" | 9779 | \"ONLINE\" | \"STORAGE\" | \"3ba41bd\"    | \"master\" |\n| \"storaged2\" | 9779 | \"ONLINE\" | \"STORAGE\" | \"3ba41bd\"    | \"master\" |\n+-------------+------+----------+-----------+--------------+---------+\n
        "},{"location":"4.deployment-and-installation/standalone-deployment/","title":"Standalone NebulaGraph","text":"

        Standalone NebulaGraph merges the Meta, Storage, and Graph services into a single process deployed on a single machine. This topic introduces scenarios, deployment steps, etc. of standalone NebulaGraph.

        Danger

        Do not use standalone NebulaGraph in production environments.

        "},{"location":"4.deployment-and-installation/standalone-deployment/#background","title":"Background","text":"

        The traditional NebulaGraph consists of three services, each service having executable binary files and the corresponding process. Processes communicate with each other by RPC. In standalone NebulaGraph, the three processes corresponding to the three services are combined into one process. For more information about NebulaGraph, see Architecture overview.

        "},{"location":"4.deployment-and-installation/standalone-deployment/#scenarios","title":"Scenarios","text":"

        Small data sizes and low availability requirements. For example, test environments that are limited by the number of machines, scenarios that are only used to verify functionality.

        "},{"location":"4.deployment-and-installation/standalone-deployment/#limitations","title":"Limitations","text":"
        • Single service instance per machine.
        • High availability and reliability not supported.
        "},{"location":"4.deployment-and-installation/standalone-deployment/#resource_requirements","title":"Resource requirements","text":"

        For information about the resource requirements for standalone NebulaGraph, see Software requirements for compiling NebulaGraph.

        "},{"location":"4.deployment-and-installation/standalone-deployment/#steps","title":"Steps","text":"

        Currently, you can only install standalone NebulaGraph with the source code. The steps are similar to those of the multi-process NebulaGraph. You only need to modify the step Generate Makefile with CMake by adding -DENABLE_STANDALONE_VERSION=on to the command. For example:

        cmake -DCMAKE_INSTALL_PREFIX=/usr/local/nebula -DENABLE_TESTING=OFF -DENABLE_STANDALONE_VERSION=on -DCMAKE_BUILD_TYPE=Release .. \n

        For more information about installation details, see Install NebulaGraph by compiling the source code.

        After installing standalone NebulaGraph, see the topic connect to Service to connect to NebulaGraph databases.

        "},{"location":"4.deployment-and-installation/standalone-deployment/#configuration_file","title":"Configuration file","text":"

        The path to the configuration file for standalone NebulaGraph is /usr/local/nebula/etc by default.

        You can run sudo cat nebula-standalone.conf.default to see the file content. The parameters and the corresponding descriptions in the file are generally the same as the configurations for multi-process NebulaGraph except for the following parameters.

        Parameter Predefined value Description meta_port 9559 The port number of the Meta service. storage_port 9779 The port number of the Storage Service. meta_data_path data/meta The path to Meta data.

        You can run commands to check configurable parameters and the corresponding descriptions. For details, see Configurations.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/","title":"Install NebulaGraph by compiling the source code","text":"

        Installing NebulaGraph from the source code allows you to customize the compiling and installation settings and test the latest features.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#prerequisites","title":"Prerequisites","text":"
        • Users have to prepare correct resources described in Prepare resources for compiling, installing, and running NebulaGraph.

          Note

          Compilation of NebulaGraph offline is not currently supported.

        • The host to be installed with NebulaGraph has access to the Internet.
        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#installation_steps","title":"Installation steps","text":"
        1. Use Git to clone the source code of NebulaGraph to the host.

          • [Recommended] To install NebulaGraph master, run the following command.

            $ git clone --branch release-3.6 https://github.com/vesoft-inc/nebula.git\n
          • To install the latest developing release, run the following command to clone the source code from the master branch.

            $ git clone https://github.com/vesoft-inc/nebula.git\n
        2. Go to the nebula/third-party directory, and run the install-third-party.sh script to install the third-party libraries.

          $ cd nebula/third-party\n$ ./install-third-party.sh\n
        3. Go back to the nebula directory, create a directory named build, and enter the directory.

          $ cd ..\n$ mkdir build && cd build\n
        4. Generate Makefile with CMake.

          Note

          The installation path is /usr/local/nebula by default. To customize it, add the -DCMAKE_INSTALL_PREFIX=<installation_path> CMake variable in the following command.

          For more information about CMake variables, see CMake variables.

          $ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/nebula -DENABLE_TESTING=OFF -DCMAKE_BUILD_TYPE=Release ..\n
        5. Compile NebulaGraph.

          Note

          Check Prepare resources for compiling, installing, and running NebulaGraph.

          To speed up the compiling, use the -j option to set a concurrent number N. It should be \\(\\min(\\text{CPU core number},\\frac{\\text{the memory size(GB)}}{2})\\).

          $ make -j{N} # E.g., make -j2\n
        6. Install NebulaGraph.

          $ sudo make install\n

        Note

        The configuration files in the etc/ directory (/usr/local/nebula/etc by default) are references. Users can create their own configuration files accordingly. If you want to use the scripts in the script directory to start, stop, restart, and kill the service, and check the service status, the configuration files have to be named as nebula-graph.conf, nebula-metad.conf, and nebula-storaged.conf.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#update_the_master_branch","title":"Update the master branch","text":"

        The source code of the master branch changes frequently. If the corresponding NebulaGraph release is installed, update it in the following steps.

        1. In the nebula directory, run git pull upstream master to update the source code.

        2. In the nebula/build directory, run make -j{N} and make install again.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#next_to_do","title":"Next to do","text":"

        Manage NebulaGraph services

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#cmake_variables","title":"CMake variables","text":""},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#usage_of_cmake_variables","title":"Usage of CMake variables","text":"
        $ cmake -D<variable>=<value> ...\n

        The following CMake variables can be used at the configure (cmake) stage to adjust the compiling settings.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#cmake_install_prefix","title":"CMAKE_INSTALL_PREFIX","text":"

        CMAKE_INSTALL_PREFIX specifies the path where the service modules, scripts, configuration files are installed. The default path is /usr/local/nebula.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#enable_werror","title":"ENABLE_WERROR","text":"

        ENABLE_WERROR is ON by default and it makes all warnings into errors. You can set it to OFF if needed.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#enable_testing","title":"ENABLE_TESTING","text":"

        ENABLE_TESTING is ON by default and unit tests are built with the NebulaGraph services. If you just need the service modules, set it to OFF.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#enable_asan","title":"ENABLE_ASAN","text":"

        ENABLE_ASAN is OFF by default and the building of ASan (AddressSanitizer), a memory error detector, is disabled. To enable it, set ENABLE_ASAN to ON. This variable is intended for NebulaGraph developers.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#cmake_build_type","title":"CMAKE_BUILD_TYPE","text":"

        NebulaGraph supports the following building types of MAKE_BUILD_TYPE:

        • Debug

          The default value of CMAKE_BUILD_TYPE. It indicates building NebulaGraph with the debug info but not the optimization options.

        • Release

          It indicates building NebulaGraph with the optimization options but not the debug info.

        • RelWithDebInfo

          It indicates building NebulaGraph with the optimization options and the debug info.

        • MinSizeRel

          It indicates building NebulaGraph with the optimization options for controlling the code size but not the debug info.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#enable_include_what_you_use","title":"ENABLE_INCLUDE_WHAT_YOU_USE","text":"

        ENABLE_INCLUDE_WHAT_YOU_USE is OFF by default. When set to ON and include-what-you-use is installed on the system, the system reports redundant headers contained in the project source code during makefile generation.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#nebula_use_linker","title":"NEBULA_USE_LINKER","text":"

        Specifies the program linker on the system. The available values are:

        • bfd, the default value, indicates that ld.bfd is applied as the linker.
        • lld, indicates that ld.lld, if installed on the system, is applied as the linker.
        • gold, indicates that ld.gold, if installed on the system, is applied as the linker.
        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#cmake_c_compilercmake_cxx_compiler","title":"CMAKE_C_COMPILER/CMAKE_CXX_COMPILER","text":"

        Usually, CMake locates and uses a C/C++ compiler installed in the host automatically. But if your compiler is not installed at the standard path, or if you want to use a different one, run the command as follows to specify the installation path of the target compiler:

        $ cmake -DCMAKE_C_COMPILER=<path_to_gcc/bin/gcc> -DCMAKE_CXX_COMPILER=<path_to_gcc/bin/g++> ..\n$ cmake -DCMAKE_C_COMPILER=<path_to_clang/bin/clang> -DCMAKE_CXX_COMPILER=<path_to_clang/bin/clang++> ..\n
        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#enable_ccache","title":"ENABLE_CCACHE","text":"

        ENABLE_CCACHE is ON by default and Ccache (compiler cache) is used to speed up the compiling of NebulaGraph.

        To disable ccache, setting ENABLE_CCACHE to OFF is not enough. On some platforms, the ccache installation hooks up or precedes the compiler. In such a case, you have to set an environment variable export CCACHE_DISABLE=true or add a line disable=true in ~/.ccache/ccache.conf as well. For more information, see the ccache official documentation.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#nebula_thirdparty_root","title":"NEBULA_THIRDPARTY_ROOT","text":"

        NEBULA_THIRDPARTY_ROOT specifies the path where the third party software is installed. By default it is /opt/vesoft/third-party.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#examine_problems","title":"Examine problems","text":"

        If the compiling fails, we suggest you:

        1. Check whether the operating system release meets the requirements and whether the memory and hard disk space are sufficient.

        2. Check whether the third-party is installed correctly.

        3. Use make -j1 to reduce the compiling concurrency.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/2.install-nebula-graph-by-rpm-or-deb/","title":"Install NebulaGraph with RPM or DEB package","text":"

        RPM and DEB are common package formats on Linux systems. This topic shows how to quickly install NebulaGraph with the RPM or DEB package.

        Note

        The console is not complied or packaged with NebulaGraph server binaries. You can install nebula-console by yourself.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/2.install-nebula-graph-by-rpm-or-deb/#prerequisites","title":"Prerequisites","text":"
        • The tool wget is installed.
        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/2.install-nebula-graph-by-rpm-or-deb/#step_1_download_the_package_from_cloud_service","title":"Step 1: Download the package from cloud service","text":"

        Note

        NebulaGraph is currently only supported for installation on Linux systems, and only CentOS 7.x, CentOS 8.x, Ubuntu 16.04, Ubuntu 18.04, and Ubuntu 20.04 operating systems are supported.

        • Download the released version.

          URL:

          //Centos 7\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.el7.x86_64.rpm\n\n//Centos 8\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.el8.x86_64.rpm\n\n//Ubuntu 1604\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.ubuntu1604.amd64.deb\n\n//Ubuntu 1804\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.ubuntu1804.amd64.deb\n\n//Ubuntu 2004\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.ubuntu2004.amd64.deb\n

          For example, download the release package master for Centos 7.5:

          wget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.el7.x86_64.rpm\nwget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.el7.x86_64.rpm.sha256sum.txt\n

          Download the release package master for Ubuntu 1804:

          wget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.ubuntu1804.amd64.deb\nwget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.ubuntu1804.amd64.deb.sha256sum.txt\n
        • Download the nightly version.

          Danger

          • Nightly versions are usually used to test new features. Do not use it in a production environment.
          • Nightly versions may not be built successfully every night. And the names may change from day to day.

          URL:

          //Centos 7\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.el7.x86_64.rpm\n\n//Centos 8\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.el8.x86_64.rpm\n\n//Ubuntu 1604\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.ubuntu1604.amd64.deb\n\n//Ubuntu 1804\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.ubuntu1804.amd64.deb\n\n//Ubuntu 2004\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.ubuntu2004.amd64.deb\n

          For example, download the Centos 7.5 package developed and built in 2021.11.28:

          wget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.el7.x86_64.rpm\nwget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.el7.x86_64.rpm.sha256sum.txt\n

          For example, download the Ubuntu 1804 package developed and built in 2021.11.28:

          wget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.ubuntu1804.amd64.deb\nwget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.ubuntu1804.amd64.deb.sha256sum.txt\n
        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/2.install-nebula-graph-by-rpm-or-deb/#step_2_install_nebulagraph","title":"Step 2: Install NebulaGraph","text":"
        • Use the following syntax to install with an RPM package.

          $ sudo rpm -ivh --prefix=<installation_path> <package_name>\n

          The option --prefix indicates the installation path. The default path is /usr/local/nebula/.

          For example, to install an RPM package in the default path for the master version, run the following command.

          sudo rpm -ivh nebula-graph-master.el7.x86_64.rpm\n
        • Use the following syntax to install with a DEB package.

          $ sudo dpkg -i <package_name>\n

          Note

          Customizing the installation path is not supported when installing NebulaGraph with a DEB package. The default installation path is /usr/local/nebula/.

          For example, to install a DEB package for the master version, run the following command.

          sudo dpkg -i nebula-graph-master.ubuntu1804.amd64.deb\n

          Note

          The default installation path is /usr/local/nebula/.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/2.install-nebula-graph-by-rpm-or-deb/#next_to_do","title":"Next to do","text":"
        • Start NebulaGraph
        • Connect to NebulaGraph
        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/","title":"Deploy NebulaGraph with Docker Compose","text":"

        Using Docker Compose can quickly deploy NebulaGraph services based on the prepared configuration file. It is only recommended to use this method when testing functions of NebulaGraph.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#prerequisites","title":"Prerequisites","text":"
        • You have installed the following applications on your host.

          Application Recommended version Official installation reference Docker Latest Install Docker Engine Docker Compose Latest Install Docker Compose Git Latest Download Git
        • If you are deploying NebulaGraph as a non-root user, grant the user with Docker-related privileges. For detailed instructions, see Manage Docker as a non-root user.
        • You have started the Docker service on your host.
        • If you have already deployed another version of NebulaGraph with Docker Compose on your host, to avoid compatibility issues, you need to delete the nebula-docker-compose/data directory.
        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#deploy_nebulagraph","title":"Deploy NebulaGraph","text":"
        1. Clone the 3.6.0 branch of the nebula-docker-compose repository to your host with Git.

          Danger

          The master branch contains the untested code for the latest NebulaGraph development release. DO NOT use this release in a production environment.

          $ git clone -b release-3.6 https://github.com/vesoft-inc/nebula-docker-compose.git\n

          Note

          The x.y version of Docker Compose aligns to the x.y version of NebulaGraph. For the NebulaGraph z version, Docker Compose does not publish the corresponding z version, but pulls the z version of the NebulaGraph image.

        2. Go to the nebula-docker-compose directory.

          $ cd nebula-docker-compose/\n
        3. Run the following command to start all the NebulaGraph services.

          Note

          • Update the NebulaGraph images and NebulaGraph Console images first if they are out of date.
          • The return result after executing the command varies depending on the installation directory.
          [nebula-docker-compose]$ docker-compose up -d\nCreating nebula-docker-compose_metad0_1 ... done\nCreating nebula-docker-compose_metad2_1 ... done\nCreating nebula-docker-compose_metad1_1 ... done\nCreating nebula-docker-compose_graphd2_1   ... done\nCreating nebula-docker-compose_graphd_1    ... done\nCreating nebula-docker-compose_graphd1_1   ... done\nCreating nebula-docker-compose_storaged0_1 ... done\nCreating nebula-docker-compose_storaged2_1 ... done\nCreating nebula-docker-compose_storaged1_1 ... done\n

          Compatibility

          Starting from NebulaGraph version 3.1.0, nebula-docker-compose automatically starts a NebulaGraph Console docker container and adds the storage host to the cluster (i.e. ADD HOSTS command).

          Note

          For more information of the preceding services, see NebulaGraph architecture.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#connect_to_nebulagraph","title":"Connect to NebulaGraph","text":"

        There are two ways to connect to NebulaGraph:

        • Connected with Nebula Console outside the container. Because the external mapping port for the Graph service is also fixed as 9669 in the container's configuration file, you can connect directly through the default port. For details, see Connect to NebulaGraph.
        • Log into the container installed NebulaGraph Console, then connect to the Graph service. This section describes this approach.
        1. Run the following command to view the name of NebulaGraph Console docker container.

          $ docker-compose ps\n            Name                             Command                  State                                        Ports                                 \n-----------------------------------------------------------------------------------------------------------------------------------------------------------\nnebula-docker-compose_console_1     sh -c for i in `seq 1 60`; ...   Up                                                                                    \nnebula-docker-compose_graphd1_1     /usr/local/nebula/bin/nebu ...   Up (healthy)   0.0.0.0:32847->15669/tcp,:::32847->15669/tcp, 19669/tcp,               \n                                                                                    0.0.0.0:32846->19670/tcp,:::32846->19670/tcp,                          \n                                                                                    0.0.0.0:32849->5669/tcp,:::32849->5669/tcp, 9669/tcp         \n......\n

          Note

          nebula-docker-compose_console_1 and nebula-docker-compose_graphd1_1 are the container names of NebulaGraph Console and Graph Service respectively.

        2. Run the following command to enter the NebulaGraph Console docker container.

          docker exec -it nebula-docker-compose_console_1 /bin/sh\n/ #\n
        3. Connect to NebulaGraph with NebulaGraph Console.

          / # ./usr/local/bin/nebula-console -u <user_name> -p <password> --address=graphd --port=9669\n

          Note

          By default, the authentication is off, you can only log in with an existing username (the default is root) and any password. To turn it on, see Enable authentication.

        4. Run the following commands to view the cluster state.

          nebula> SHOW HOSTS;\n+-------------+------+----------+--------------+----------------------+------------------------+---------+\n| Host        | Port | Status   | Leader count | Leader distribution  | Partition distribution | Version |\n+-------------+------+----------+--------------+----------------------+------------------------+---------+\n| \"storaged0\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No valid partition\"   | \"master\" |\n| \"storaged1\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No valid partition\"   | \"master\" |\n| \"storaged2\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No valid partition\"   | \"master\" |\n+-------------+------+----------+--------------+----------------------+------------------------+---------+\n

        Run exit twice to switch back to your terminal (shell).

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#check_the_nebulagraph_service_status_and_ports","title":"Check the NebulaGraph service status and ports","text":"

        Run docker-compose ps to list all the services of NebulaGraph and their status and ports.

        Note

        NebulaGraph provides services to the clients through port 9669 by default. To use other ports, modify the docker-compose.yaml file in the nebula-docker-compose directory and restart the NebulaGraph services.

        $ docker-compose ps\nnebula-docker-compose_console_1     sh -c sleep 3 &&                 Up\n                                  nebula-co ...\nnebula-docker-compose_graphd1_1     /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49174->19669/tcp,:::49174->19669/tcp, 0.0.0.0:49171->19670/tcp,:::49171->19670/tcp, 0.0.0.0:49177->9669/tcp,:::49177->9669/tcp\nnebula-docker-compose_graphd2_1     /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49175->19669/tcp,:::49175->19669/tcp, 0.0.0.0:49172->19670/tcp,:::49172->19670/tcp, 0.0.0.0:49178->9669/tcp,:::49178->9669/tcp\nnebula-docker-compose_graphd_1      /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49180->19669/tcp,:::49180->19669/tcp, 0.0.0.0:49179->19670/tcp,:::49179->19670/tcp, 0.0.0.0:9669->9669/tcp,:::9669->9669/tcp\nnebula-docker-compose_metad0_1      /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49157->19559/tcp,:::49157->19559/tcp, 0.0.0.0:49154->19560/tcp,:::49154->19560/tcp, 0.0.0.0:49160->9559/tcp,:::49160->9559/tcp, 9560/tcp\nnebula-docker-compose_metad1_1      /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49156->19559/tcp,:::49156->19559/tcp, 0.0.0.0:49153->19560/tcp,:::49153->19560/tcp, 0.0.0.0:49159->9559/tcp,:::49159->9559/tcp, 9560/tcp\nnebula-docker-compose_metad2_1      /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49158->19559/tcp,:::49158->19559/tcp, 0.0.0.0:49155->19560/tcp,:::49155->19560/tcp, 0.0.0.0:49161->9559/tcp,:::49161->9559/tcp, 9560/tcp\nnebula-docker-compose_storaged0_1   /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49166->19779/tcp,:::49166->19779/tcp, 0.0.0.0:49163->19780/tcp,:::49163->19780/tcp, 9777/tcp, 9778/tcp, 0.0.0.0:49169->9779/tcp,:::49169->9779/tcp, 9780/tcp\nnebula-docker-compose_storaged1_1   /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49165->19779/tcp,:::49165->19779/tcp, 0.0.0.0:49162->19780/tcp,:::49162->19780/tcp, 9777/tcp, 9778/tcp, 0.0.0.0:49168->9779/tcp,:::49168->9779/tcp, 9780/tcp\nnebula-docker-compose_storaged2_1   /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49167->19779/tcp,:::49167->19779/tcp, 0.0.0.0:49164->19780/tcp,:::49164->19780/tcp, 9777/tcp, 9778/tcp, 0.0.0.0:49170->9779/tcp,:::49170->9779/tcp, 9780/tcp\n

        If the service is abnormal, you can first confirm the abnormal container name (such as nebula-docker-compose_graphd2_1) and then log in to the container and troubleshoot.

        $ docker exec -it nebula-docker-compose_graphd2_1 bash\n
        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#check_the_service_data_and_logs","title":"Check the service data and logs","text":"

        All the data and logs of NebulaGraph are stored persistently in the nebula-docker-compose/data and nebula-docker-compose/logs directories.

        The structure of the directories is as follows:

        nebula-docker-compose/\n  |-- docker-compose.yaml\n  \u251c\u2500\u2500 data\n  \u2502\u00a0\u00a0 \u251c\u2500\u2500 meta0\n  \u2502\u00a0\u00a0 \u251c\u2500\u2500 meta1\n  \u2502\u00a0\u00a0 \u251c\u2500\u2500 meta2\n  \u2502\u00a0\u00a0 \u251c\u2500\u2500 storage0\n  \u2502\u00a0\u00a0 \u251c\u2500\u2500 storage1\n  \u2502\u00a0\u00a0 \u2514\u2500\u2500 storage2\n  \u2514\u2500\u2500 logs\n      \u251c\u2500\u2500 graph\n      \u251c\u2500\u2500 graph1\n      \u251c\u2500\u2500 graph2\n      \u251c\u2500\u2500 meta0\n      \u251c\u2500\u2500 meta1\n      \u251c\u2500\u2500 meta2\n      \u251c\u2500\u2500 storage0\n      \u251c\u2500\u2500 storage1\n      \u2514\u2500\u2500 storage2\n
        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#modify_configurations","title":"Modify configurations","text":"

        The configuration file of Docker Compose is nebula-docker-compose/docker-compose.yaml. To make the new configuration take effect, modify the configuration in this file and restart the service.

        The configurations in the docker-compose.yaml file overwrite the configurations in the configuration file (/usr/local/nebula/etc) of the containered NebulaGraph service. Therefore, you can modify the configurations in the docker-compose.yaml file to customize the configurations of the NebulaGraph service.

        For more instructions, see Configurations.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#restart_nebulagraph_services","title":"Restart NebulaGraph services","text":"

        To restart all the NebulaGraph services, run the following command:

        $ docker-compose restart\nRestarting nebula-docker-compose_console_1   ... done\nRestarting nebula-docker-compose_graphd_1    ... done\nRestarting nebula-docker-compose_graphd1_1   ... done\nRestarting nebula-docker-compose_graphd2_1   ... done\nRestarting nebula-docker-compose_storaged1_1 ... done\nRestarting nebula-docker-compose-storaged0_1 ... done\nRestarting nebula-docker-compose_storaged2_1 ... done\nRestarting nebula-docker-compose_metad1_1    ... done\nRestarting nebula-docker-compose_metad2_1    ... done\nRestarting nebula-docker-compose_metad0_1    ... done\n

        To restart multiple services, such as graphd and storaged0, run the following command:

        $ docker-compose restart graphd storaged0\nRestarting nebula-docker-compose_graphd_1    ... done\nRestarting nebula-docker-compose_storaged0_1 ... done\n
        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#stop_and_remove_nebulagraph_services","title":"Stop and remove NebulaGraph services","text":"

        You can stop and remove all the NebulaGraph services by running the following command:

        Danger

        This command stops and removes all the containers of the NebulaGraph services and the related network. If you define volumes in the docker-compose.yaml, the related data are retained.

        The command docker-compose down -v removes all the local data. Try this command if you are using the nightly release and having some compatibility issues.

        $ docker-compose down\n

        The following information indicates you have successfully stopped the NebulaGraph services:

        Stopping nebula-docker-compose_console_1   ... done\nStopping nebula-docker-compose_graphd1_1   ... done\nStopping nebula-docker-compose_graphd_1    ... done\nStopping nebula-docker-compose_graphd2_1   ... done\nStopping nebula-docker-compose_storaged1_1 ... done\nStopping nebula-docker-compose_storaged0_1 ... done\nStopping nebula-docker-compose_storaged2_1 ... done\nStopping nebula-docker-compose_metad2_1    ... done\nStopping nebula-docker-compose_metad0_1    ... done\nStopping nebula-docker-compose_metad1_1    ... done\nRemoving nebula-docker-compose_console_1   ... done\nRemoving nebula-docker-compose_graphd1_1   ... done\nRemoving nebula-docker-compose_graphd_1    ... done\nRemoving nebula-docker-compose_graphd2_1   ... done\nRemoving nebula-docker-compose_storaged1_1 ... done\nRemoving nebula-docker-compose_storaged0_1 ... done\nRemoving nebula-docker-compose_storaged2_1 ... done\nRemoving nebula-docker-compose_metad2_1    ... done\nRemoving nebula-docker-compose_metad0_1    ... done\nRemoving nebula-docker-compose_metad1_1    ... done\nRemoving network nebula-docker-compose_nebula-net\n
        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#faq","title":"FAQ","text":""},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#how_to_fix_the_docker_mapping_to_external_ports","title":"How to fix the docker mapping to external ports?","text":"

        To set the ports of corresponding services as fixed mapping, modify the docker-compose.yaml in the nebula-docker-compose directory. For example:

        graphd:\n    image: vesoft/nebula-graphd:release-3.6\n    ...\n    ports:\n      - 9669:9669\n      - 19669\n      - 19670\n

        9669:9669 indicates the internal port 9669 is uniformly mapped to external ports, while 19669 indicates the internal port 19669 is randomly mapped to external ports.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#how_to_upgrade_or_update_the_docker_images_of_nebulagraph_services","title":"How to upgrade or update the docker images of NebulaGraph services?","text":"
        1. In the nebula-docker-compose/docker-compose.yaml file, change all the image values to the required image version.

        2. In the nebula-docker-compose directory, run docker-compose pull to update the images of the Graph Service, Storage Service, Meta Service, and NebulaGraph Console.

        3. Run docker-compose up -d to start the NebulaGraph services again.

        4. After connecting to NebulaGraph with NebulaGraph Console, run SHOW HOSTS GRAPH, SHOW HOSTS STORAGE, or SHOW HOSTS META to check the version of the responding service respectively.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#error_toomanyrequests_when_docker-compose_pull","title":"ERROR: toomanyrequests when docker-compose pull","text":"

        You may meet the following error.

        ERROR: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit.

        You have met the rate limit of Docker Hub. Learn more on Understanding Docker Hub Rate Limiting.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#how_to_update_the_nebulagraph_console_client","title":"How to update the NebulaGraph Console client?","text":"

        The command docker-compose pull updates both the NebulaGraph services and the NebulaGraph Console.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#how_to_activate_storaged_containers_when_they_remain_in_offline_status","title":"How to activate storaged containers when they remain in offline status?","text":"

        The activation script for storaged containers in Docker Compose may fail to run in rare cases. You can connect to NebulaGraph with NebulaGraph Console or NebulaGraph Studio and then manually run the ADD HOSTS command to activate them by adding the storaged containers to the cluster. An example of the command is as follows:

        nebula> ADD HOSTS \"storaged0\":9779,\"storaged1\":9779,\"storaged2\":9779\n
        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#related_documents","title":"Related documents","text":"
        • Install and deploy NebulaGraph with the source code
        • Install NebulaGraph by RPM or DEB
        • Connect to NebulaGraph
        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/4.install-nebula-graph-from-tar/","title":"Install NebulaGraph graph with the tar.gz file","text":"

        You can install NebulaGraph by downloading the tar.gz file.

        Note

        • NebulaGraph provides installing with the tar.gz file starting from version 2.6.0.
        • NebulaGraph is currently only supported for installation on Linux systems, and only CentOS 7.x, CentOS 8.x, Ubuntu 16.04, Ubuntu 18.04, and Ubuntu 20.04 operating systems are supported.
        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/4.install-nebula-graph-from-tar/#installation_steps","title":"Installation steps","text":"
        1. Download the NebulaGraph tar.gz file using the following address.

          Before downloading, you need to replace <release_version> with the version you want to download.

          //Centos 7\nhttps://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.el7.x86_64.tar.gz\n//Checksum\nhttps://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.el7.x86_64.tar.gz.sha256sum.txt\n\n//Centos 8\nhttps://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.el8.x86_64.tar.gz\n//Checksum\nhttps://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.el8.x86_64.tar.gz.sha256sum.txt\n\n//Ubuntu 1604\nhttps://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.ubuntu1604.amd64.tar.gz\n//Checksum\nhttps://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.ubuntu1604.amd64.tar.gz.sha256sum.txt\n\n//Ubuntu 1804\nhttps://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.ubuntu1804.amd64.tar.gz\n//Checksum\nhttps://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.ubuntu1804.amd64.tar.gz.sha256sum.txt\n\n//Ubuntu 2004\nhttps://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.ubuntu2004.amd64.tar.gz\n//Checksum\nhttps://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.ubuntu2004.amd64.tar.gz.sha256sum.txt\n

          For example, to download the NebulaGraph release-3.6 tar.gz file for CentOS 7.5, run the following command:

          wget https://oss-cdn.nebula-graph.com.cn/package/master/nebula-graph-master.el7.x86_64.tar.gz\n
        2. Decompress the tar.gz file to the NebulaGraph installation directory.

          tar -xvzf <tar.gz_file_name> -C <install_path>\n
          • tar.gz_file_name specifies the name of the tar.gz file.
          • install_path specifies the installation path.

          For example:

          tar -xvzf nebula-graph-master.el7.x86_64.tar.gz -C /home/joe/nebula/install\n
        3. Modify the name of the configuration file.

          Enter the decompressed directory, rename the files nebula-graphd.conf.default, nebula-metad.conf.default, and nebula-storaged.conf.default in the subdirectory etc, and delete .default to apply the default configuration of NebulaGraph.

        Note

        To modify the configuration, see Configurations.

        So far, you have installed NebulaGraph successfully.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/4.install-nebula-graph-from-tar/#next_to_do","title":"Next to do","text":"

        Manage NebulaGraph services

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/6.deploy-nebula-graph-with-peripherals/","title":"Install NebulaGraph with ecosystem tools","text":"

        You can install the NebulaGraph Community Edition with the following ecosystem tools:

        • NebulaGraph Operator
        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/6.deploy-nebula-graph-with-peripherals/#installation_details","title":"Installation details","text":"
        • To install NebulaGraph with NebulaGraph Operator, see Install NebulaGraph clusters.
        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/7.compile-using-docker/","title":"Compile NebulaGraph using Docker","text":"

        NebulaGraph's source code is written in C++. Compiling NebulaGraph requires certain dependencies which might conflict with host system dependencies, potentially causing compilation failures. Docker offers a solution to this. NebulaGraph provides a Docker image containing the complete compilation environment, ensuring an efficient build process and avoiding host OS conflicts. This guide outlines the steps to compile NebulaGraph using Docker.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/7.compile-using-docker/#prerequisites","title":"Prerequisites","text":"

        Before you begin:

        1. Docker: Ensure Docker is installed on your system.

        2. Clone NebulaGraph's Source Code: Clone the repository locally using:

          git clone --branch release-3.6 https://github.com/vesoft-inc/nebula.git\n

          This clones the NebulaGraph source code to a subdirectory named nebula.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/7.compile-using-docker/#compilation_steps","title":"Compilation steps","text":"
        1. Pull the NebulaGraph compilation image.

          docker pull vesoft/nebula-dev:ubuntu2004\n

          Here, we use the official NebulaGraph compilation image, ubuntu2004. For different versions, see nebula-dev-docker.

        2. Start the compilation container.

          docker run -ti \\\n  --security-opt seccomp=unconfined \\\n  -v \"$PWD\":/home \\\n  -w /home \\\n  --name nebula_dev \\\n  vesoft/nebula-dev:ubuntu2004 \\\n  bash\n
          • --security-opt seccomp=unconfined: Disables the seccomp security mechanism to avoid compilation errors.
          • -v \"$PWD\":/home: Mounts the local path of the NebulaGraph code to the container's /home directory.
          • -w /home: Sets the container's working directory to /home. Any command run inside the container will use this directory as the current directory.
          • --name nebula_dev: Assigns a name to the container, making it easier to manage and operate.
          • vesoft/nebula-dev:ubuntu2004: Uses the ubuntu2004 version of the vesoft/nebula-dev compilation image.
          • bash: Executes the bash command inside the container, entering the container's interactive terminal.

          After executing this command, you'll enter an interactive terminal inside the container. To re-enter the container, use docker exec -ti nebula_dev bash.

        3. Compile NebulaGraph inside the container.

          1. Enter the NebulaGraph source code directory.

            cd nebula\n
          2. Create a build directory and enter it.

            mkdir build && cd build\n
          3. Use CMake to generate the Makefile.

            cmake -DCMAKE_CXX_COMPILER=$TOOLSET_CLANG_DIR/bin/g++ -DCMAKE_C_COMPILER=$TOOLSET_CLANG_DIR/bin/gcc -DENABLE_WERROR=OFF -DCMAKE_BUILD_TYPE=Debug -DENABLE_TESTING=OFF ..\n
            For more on CMake, see CMake Parameters.

          4. Compile NebulaGraph.

            # The -j parameter specifies the number of threads to use.\n# If you have a multi-core CPU, you can use more threads to speed up compilation.\nmake -j2\n

            Compilation might take some time based on your system performance.

        4. Install the Executables and Libraries.

          Post successful compilation, NebulaGraph's binaries and libraries are located in /home/nebula/build. Install them to /usr/local/nebula:

          make install\n

        Once completed, NebulaGraph is compiled and installed in the host directory /usr/local/nebula.

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/7.compile-using-docker/#next_steps","title":"Next Steps","text":"
        • Start NebulaGraph Service
        • Connect to NebulaGraph
        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/deploy-nebula-graph-cluster/","title":"Deploy a NebulaGraph cluster with RPM/DEB package on multiple servers","text":"

        For now, NebulaGraph does not provide an official deployment tool. Users can deploy a NebulaGraph cluster with RPM or DEB package manually. This topic provides an example of deploying a NebulaGraph cluster on multiple servers (machines).

        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/deploy-nebula-graph-cluster/#deployment","title":"Deployment","text":"Machine name IP address Number of graphd Number of storaged Number of metad A 192.168.10.111 1 1 1 B 192.168.10.112 1 1 1 C 192.168.10.113 1 1 1 D 192.168.10.114 1 1 None E 192.168.10.115 1 1 None"},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/deploy-nebula-graph-cluster/#prerequisites","title":"Prerequisites","text":"
        • Prepare 5 machines for deploying the cluster.
        • Use the NTP service to synchronize time in the cluster.
        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/deploy-nebula-graph-cluster/#manual_deployment_process","title":"Manual deployment process","text":""},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/deploy-nebula-graph-cluster/#install_nebulagraph","title":"Install NebulaGraph","text":"

        Install NebulaGraph on each machine in the cluster. Available approaches of installation are as follows.

        • Install NebulaGraph with RPM or DEB package
        • Install NebulaGraph by compiling the source code
        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/deploy-nebula-graph-cluster/#modify_the_configurations","title":"Modify the configurations","text":"

        To deploy NebulaGraph according to your requirements, you have to modify the configuration files.

        All the configuration files for NebulaGraph, including nebula-graphd.conf, nebula-metad.conf, and nebula-storaged.conf, are stored in the etc directory in the installation path. You only need to modify the configuration for the corresponding service on the machines. The configurations that need to be modified for each machine are as follows.

        Machine name The configuration to be modified A nebula-graphd.conf, nebula-storaged.conf, nebula-metad.conf B nebula-graphd.conf, nebula-storaged.conf, nebula-metad.conf C nebula-graphd.conf, nebula-storaged.conf, nebula-metad.conf D nebula-graphd.conf, nebula-storaged.conf E nebula-graphd.conf, nebula-storaged.conf

        Users can refer to the content of the following configurations, which only show part of the cluster settings. The hidden content uses the default setting so that users can better understand the relationship between the servers in the NebulaGraph cluster.

        Note

        The main configuration to be modified is meta_server_addrs. All configurations need to fill in the IP addresses and ports of all Meta services. At the same time, local_ip needs to be modified as the network IP address of the machine itself. For detailed descriptions of the configuration parameters, see:

        • Meta Service configurations
        • Graph Service configurations
        • Storage Service configurations
        • Deploy machine A

          • nebula-graphd.conf

            ########## networking ##########\n# Comma separated Meta Server Addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-graphd process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.111\n# Network device to listen on\n--listen_netdev=any\n# Port to listen on\n--port=9669\n
          • nebula-storaged.conf

            ########## networking ##########\n# Comma separated Meta server addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-storaged process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.111\n# Storage daemon listening port\n--port=9779\n
          • nebula-metad.conf

            ########## networking ##########\n# Comma separated Meta Server addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-metad process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.111\n# Meta daemon listening port\n--port=9559\n
        • Deploy machine B

          • nebula-graphd.conf

            ########## networking ##########\n# Comma separated Meta Server Addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-graphd process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.112\n# Network device to listen on\n--listen_netdev=any\n# Port to listen on\n--port=9669\n
          • nebula-storaged.conf

            ########## networking ##########\n# Comma separated Meta server addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-storaged process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.112\n# Storage daemon listening port\n--port=9779\n
          • nebula-metad.conf

            ########## networking ##########\n# Comma separated Meta Server addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-metad process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.112\n# Meta daemon listening port\n--port=9559\n
        • Deploy machine C

          • nebula-graphd.conf

            ########## networking ##########\n# Comma separated Meta Server Addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-graphd process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.113\n# Network device to listen on\n--listen_netdev=any\n# Port to listen on\n--port=9669\n
          • nebula-storaged.conf

            ########## networking ##########\n# Comma separated Meta server addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-storaged process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.113\n# Storage daemon listening port\n--port=9779\n
          • nebula-metad.conf

            ########## networking ##########\n# Comma separated Meta Server addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-metad process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.113\n# Meta daemon listening port\n--port=9559\n
        • Deploy machine D

          • nebula-graphd.conf

            ########## networking ##########\n# Comma separated Meta Server Addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-graphd process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.114\n# Network device to listen on\n--listen_netdev=any\n# Port to listen on\n--port=9669\n
          • nebula-storaged.conf

            ########## networking ##########\n# Comma separated Meta server addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-storaged process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.114\n# Storage daemon listening port\n--port=9779\n
        • Deploy machine E

          • nebula-graphd.conf

            ########## networking ##########\n# Comma separated Meta Server Addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-graphd process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.115\n# Network device to listen on\n--listen_netdev=any\n# Port to listen on\n--port=9669\n
          • nebula-storaged.conf

            ########## networking ##########\n# Comma separated Meta server addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-storaged process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.115\n# Storage daemon listening port\n--port=9779\n
        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/deploy-nebula-graph-cluster/#start_the_cluster","title":"Start the cluster","text":"

        Start the corresponding service on each machine. Descriptions are as follows.

        Machine name The process to be started A graphd, storaged, metad B graphd, storaged, metad C graphd, storaged, metad D graphd, storaged E graphd, storaged

        The command to start the NebulaGraph services is as follows.

        sudo /usr/local/nebula/scripts/nebula.service start <metad|graphd|storaged|all>\n

        Note

        • Make sure all the processes of services on each machine are started. Otherwise, you will fail to start NebulaGraph.
        • When the graphd process, the storaged process, and the metad process are all started, you can use all instead.
        • /usr/local/nebula is the default installation path for NebulaGraph. Use the actual path if you have customized the path. For more information about how to start and stop the services, see Manage NebulaGraph services.
        "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/deploy-nebula-graph-cluster/#check_the_cluster_status","title":"Check the cluster status","text":"

        Install the native CLI client NebulaGraph Console, then connect to any machine that has started the graphd process, run ADD HOSTS command to add storage hosts, and run SHOW HOSTS to check the cluster status. For example:

        $ ./nebula-console --addr 192.168.10.111 --port 9669 -u root -p nebula\n\n2021/05/25 01:41:19 [INFO] connection pool is initialized successfully\nWelcome to NebulaGraph!\n\n> ADD HOSTS 192.168.10.111:9779, 192.168.10.112:9779, 192.168.10.113:9779, 192.168.10.114:9779, 192.168.10.115:9779;\n> SHOW HOSTS;\n+------------------+------+----------+--------------+----------------------+------------------------+---------+\n| Host             | Port | Status   | Leader count | Leader distribution  | Partition distribution | Version |\n+------------------+------+----------+--------------+----------------------+------------------------+---------+\n| \"192.168.10.111\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No valid partition\"   | \"master\" |\n| \"192.168.10.112\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No valid partition\"   | \"master\" |\n| \"192.168.10.113\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No valid partition\"   | \"master\" |\n| \"192.168.10.114\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No valid partition\"   | \"master\" |\n| \"192.168.10.115\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No valid partition\"   | \"master\" |\n+------------------+------+-----------+----------+--------------+----------------------+------------------------+---------+\n
        "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/","title":"Upgrade NebulaGraph to master","text":"

        This topic describes how to upgrade NebulaGraph from version 2.x and 3.x to master, taking upgrading from version 2.6.1 to master as an example.

        "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#applicable_source_versions","title":"Applicable source versions","text":"

        This topic applies to upgrading NebulaGraph from 2.5.0 and later 2.x, and 3.x versions to master. It does not apply to historical versions earlier than 2.5.0, including the 1.x versions.

        To upgrade NebulaGraph from historical versions to master:

        1. Upgrade it to the latest 2.5 version according to the docs of that version.
        2. Follow this topic to upgrade it to master.

        Caution

        To upgrade NebulaGraph from versions earlier than 2.0.0 (including the 1.x versions) to master, you need to find the date_time_zonespec.csv in the share/resources directory of master files, and then copy it to the same directory in the NebulaGraph installation path.

        "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#limitations","title":"Limitations","text":"
        • Rolling Upgrade is not supported. You must stop all the NebulaGraph services before the upgrade.
        • There is no upgrade script. You have to manually upgrade each server in the cluster.
        • This topic does not apply to scenarios where NebulaGraph is deployed with Docker, including Docker Swarm, Docker Compose, and K8s.
        • You must upgrade the old NebulaGraph services on the same machines they are deployed. DO NOT change the IP addresses, configuration files of the machines, and DO NOT change the cluster topology.
        • Known issues that could cause data loss are listed on GitHub known issues. The issues are all related to altering schema or default values.
        • DO NOT use soft links to switch the data directories.
        • You must have the sudo privileges to complete the steps in this topic.
        "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#upgrade_influences","title":"Upgrade influences","text":"
        • Client compatibility

          After the upgrade, you will not be able to connect to NebulaGraph from old clients. You will need to upgrade all clients to a version compatible with NebulaGraph master.

        • Configuration changes

          A few configuration parameters have been changed. For more information, see the release notes and configuration docs.

        • nGQL compatibility

          The nGQL syntax is partially incompatible:

          • Disable the YIELD clause to return custom variables.
          • The YIELD clause is required in the FETCH, GO, LOOKUP, FIND PATH and GET SUBGRAPH statements.
          • It is required to specify a tag to query properties of a vertex in a MATCH statement. For example, from return v.name to return v.player.name.
        • Full-text indexes

          Before upgrading a NebulaGraph cluster with full-text indexes deployed, you must manually delete the full-text indexes in Elasticsearch, and then run the SIGN IN command to log into ES and recreate the indexes after the upgrade is complete. To manually delete the full-text indexes in Elasticsearch, you can use the curl command curl -XDELETE -u <es_username>:<es_password> '<es_access_ip>:<port>/<fullindex_name>', for example, curl -XDELETE -u elastic:elastic 'http://192.168.8.xxx:9200/nebula_index_2534'. If no username and password are set for Elasticsearch, you can omit the -u <es_username>:<es_password> part.

        Caution

        There may be other undiscovered influences. Before the upgrade, we recommend that you read the release notes and user manual carefully, and keep an eye on the posts on the forum and issues on Github.

        "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#preparations_before_the_upgrade","title":"Preparations before the upgrade","text":"
        • Download the package of NebulaGraph master according to your operating system and system architecture. You need the binary files during the upgrade. Find the package on the download page.

          Note

          You can also get the new binaries from the source code or the RPM/DEB package.

        • Locate the data files based on the value of the data_path parameters in the Storage and Meta configurations, and backup the data files. The default paths are nebula/data/storage and nebula/data/meta.

          Danger

          The old data will not be automatically backed up during the upgrade. You must manually back up the data to avoid data loss.

        • Backup the configuration files.
        • Collect the statistics of all graph spaces before the upgrade. After the upgrade, you can collect again and compare the results to make sure that no data is lost. To collect the statistics:

          1. Run SUBMIT JOB STATS.
          2. Run SHOW JOBS and record the result.
        "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#upgrade_steps","title":"Upgrade steps","text":"
        1. Stop all NebulaGraph services.

          <nebula_install_path>/scripts/nebula.service stop all\n

          nebula_install_path indicates the installation path of NebulaGraph.

          The storaged progress needs around 1 minute to flush data. You can run nebula.service status all to check if all services are stopped. For more information about starting and stopping services, see Manage services.

          Note

          If the services are not fully stopped in 20 minutes, stop upgrading and ask for help on the forum or Github.

          Caution

          Starting from version 3.0.0, it is possible to insert vertices without tags. If you need to keep vertices without tags, add --graph_use_vertex_key=true in the configuration file (nebula-graphd.conf) of all Graph services within the cluster; and add --use_vertex_key=true in the configuration file (nebula-storaged.conf) of all Storage services.\"

        2. In the target path where you unpacked the package, use the binaries in the bin directory to replace the old binaries in the bin directory in the NebulaGraph installation path.

          Note

          Update the binary of the corresponding service on each NebulaGraph server.

        3. Modify the following parameters in all Graph configuration files to accommodate the value range of the new version. If the parameter values are within the specified range, skip this step.

          • Set a value in [1,604800] for session_idle_timeout_secs. The recommended value is 28800.
          • Set a value in [1,604800] for client_idle_timeout_secs. The recommended value is 28800.

          The default values of these parameters in the 2.x versions are not within the range of the new version. If you do not change the default values, the upgrade will fail. For detailed parameter description, see Graph Service Configuration.

        4. Start all Meta services.

          <nebula_install_path>/scripts/nebula-metad.service start\n

          Once started, the Meta services take several seconds to elect a leader.

          To verify that Meta services are all started, you can start any Graph server, connect to it through NebulaGraph Console, and run SHOW HOSTS meta and SHOW META LEADER. If the status of Meta services are correctly returned, the services are successfully started.

          Note

          If the operation fails, stop the upgrade and ask for help on the forum or GitHub.

        5. Start all the Graph and Storage services.

          Note

          If the operation fails, stop the upgrade and ask for help on the forum or GitHub.

        6. Connect to the new version of NebulaGraph to verify that services are available and data are complete. For how to connect, see Connect to NebulaGraph.

          Currently, there is no official way to check whether the upgrade is successful. You can run the following reference statements to test the upgrade:

          nebula> SHOW HOSTS;\nnebula> SHOW HOSTS storage;\nnebula> SHOW SPACES;\nnebula> USE <space_name>\nnebula> SHOW PARTS;\nnebula> SUBMIT JOB STATS;\nnebula> SHOW STATS;\nnebula> MATCH (v) RETURN v LIMIT 5;\n

          You can also test against new features in version master.

        "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#upgrade_failure_and_rollback","title":"Upgrade failure and rollback","text":"

        If the upgrade fails, stop all NebulaGraph services of the new version, recover the old configuration files and binaries, and start the services of the old version.

        All NebulaGraph clients in use must be switched to the old version.

        "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#faq","title":"FAQ","text":""},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#can_i_write_through_the_client_during_the_upgrade","title":"Can I write through the client during the upgrade?","text":"

        A: No. You must stop all NebulaGraph services during the upgrade.

        "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#the_space_0_not_found_warning_message_during_the_upgrade_process","title":"The Space 0 not found warning message during the upgrade process","text":"

        When the Space 0 not found warning message appears during the upgrade process, you can ignore it. The space 0 is used to store meta information about the Storage service and does not contain user data, so it will not affect the upgrade.

        "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#how_to_upgrade_if_a_machine_has_only_the_graph_service_but_not_the_storage_service","title":"How to upgrade if a machine has only the Graph Service, but not the Storage Service?","text":"

        A: You only need to update the configuration files and binaries of the Graph Service.

        "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#how_to_resolve_the_error_permission_denied","title":"How to resolve the error Permission denied?","text":"

        A: Try again with the sudo privileges.

        "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#is_there_any_change_in_gflags","title":"Is there any change in gflags?","text":"

        A: Yes. For more information, see the release notes and configuration docs.

        "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#is_there_a_tool_or_solution_for_verifying_data_consistency_after_the_upgrade","title":"Is there a tool or solution for verifying data consistency after the upgrade?","text":"

        A: No. But if you only want to check the number of vertices and edges, run SUBMIT JOB STATS and SHOW STATS after the upgrade, and compare the result with the result that you recorded before the upgrade.

        "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#how_to_solve_the_issue_that_storage_is_offline_and_leader_count_is_0","title":"How to solve the issue that Storage is OFFLINE and Leader count is 0?","text":"

        A: Run the following statement to add the Storage hosts into the cluster manually.

        ADD HOSTS <ip>:<port>[, <ip>:<port> ...];\n

        For example:

        ADD HOSTS 192.168.10.100:9779, 192.168.10.101:9779, 192.168.10.102:9779;\n

        If the issue persists, ask for help on the forum or GitHub.

        "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#why_the_job_type_changed_after_the_upgrade_but_job_id_remains_the_same","title":"Why the job type changed after the upgrade, but job ID remains the same?","text":"

        A: SHOW JOBS depends on an internal ID to identify job types, but in NebulaGraph 2.5.0 the internal ID changed in this pull request, so this issue happens after upgrading from a version earlier than 2.5.0.

        "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/1.text-based-index-restrictions/","title":"Full-text index restrictions","text":"

        This topic introduces the restrictions for full-text indexes. Please read the restrictions very carefully before using the full-text indexes.

        Caution

        The full-text index feature has been redone in version 3.6.0 and is not compatible with previous versions. If you want to continue to use wildcards, regulars, fuzzy matches, etc., there are 3 ways to do so as follows:

        • Delete the original full-text index, rebuild the full-text index in the new way, and use the new query syntax.
        • Delete the original full-text index and use the native index and string operators directly.
        • Continue to use the previous version of NebulaGraph and its full-text index.

        For now, full-text search has the following limitations:

        • Currently, full-text search supports LOOKUP statements only.
        • The full-text index name can contain only numbers, lowercase letters, and underscores.
        • The names of full-text indexes within different graph spaces cannot be duplicated.
        • The query returns 10 records by default. You can use the LIMIT clause to return more records, up to 10,000. You can modify the ElasticSearch parameters to adjust the maximum number of records returned.
        • If there is a full-text index on the tag/edge type, the tag/edge type cannot be deleted or modified.
        • The type of properties must be STRING or FIXED_STRING.
        • Full-text index can not be applied to search multiple tags/edge types.
        • Full-text index can not search properties with value NULL.
        • Altering Elasticsearch indexes is not supported at this time.
        • Modifying the analyzer is not supported. You have to delete the index data and then specify the analyzer when you rebuild the index.
        • Make sure that you start the Elasticsearch cluster and Nebula\u00a0Graph at the same time. If not, the data writing on the Elasticsearch cluster can be incomplete.
        • It may take a while for Elasticsearch to create indexes. If Nebula\u00a0Graph warns no index is found, you can check the status of the indexing task.
        • NebulaGraph clusters deployed with K8s do not have native support for the full-text search feature. However, you can manually deploy the feature yourself.
        "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/","title":"Deploy full-text index","text":"

        Nebula\u00a0Graph full-text indexes are powered by Elasticsearch. This means that you can use Elasticsearch full-text query language to retrieve what you want. Full-text indexes are managed through built-in procedures. They can be created only for variable STRING and FIXED_STRING properties when the listener cluster and the Elasticsearch cluster are deployed.

        "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/#precaution","title":"Precaution","text":"

        Before you start using the full-text index, please make sure that you know the restrictions.

        "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/#deploy_elasticsearch_cluster","title":"Deploy Elasticsearch cluster","text":"

        To deploy an Elasticsearch cluster, see Kubernetes Elasticsearch deployment or Elasticsearch installation.

        Note

        To support external network access to Elasticsearch, set network.host to 0.0.0.0 in config/elasticsearch.yml.

        You can configure the Elasticsearch to meet your business needs. To customize the Elasticsearch, see Elasticsearch Document.

        "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/#sign_in_to_the_text_search_clients","title":"Sign in to the text search clients","text":"

        When the Elasticsearch cluster is deployed, use the SIGN IN statement to sign in to the Elasticsearch clients. Multiple elastic_ip:port pairs are separated with commas. You must use the IPs and the port number in the configuration file for the Elasticsearch.

        "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/#syntax","title":"Syntax","text":"
        SIGN IN TEXT SERVICE (<elastic_ip:port>, {HTTP | HTTPS} [,\"<username>\", \"<password>\"]) [, (<elastic_ip:port>, ...)];\n
        "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/#example","title":"Example","text":"
        nebula> SIGN IN TEXT SERVICE (192.168.8.100:9200, HTTP);\n

        Note

        Elasticsearch does not have a username or password by default. If you configured a username and password, you need to specify them in the SIGN IN statement.

        Caution

        The Elasticsearch client can only be logged in once, and if there are changes, you need to SIGN OUT and then SIGN IN again, and the client takes effect globally, and multiple graph spaces share the same Elasticsearch client.

        "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/#show_text_search_clients","title":"Show text search clients","text":"

        The SHOW TEXT SEARCH CLIENTS statement can list the text search clients.

        "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/#syntax_1","title":"Syntax","text":"
        SHOW TEXT SEARCH CLIENTS;\n
        "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/#example_1","title":"Example","text":"
        nebula> SHOW TEXT SEARCH CLIENTS;\n+-----------------+-----------------+------+\n| Type            | Host            | Port |\n+-----------------+-----------------+------+\n| \"ELASTICSEARCH\" | \"192.168.8.100\" | 9200 |\n+-----------------+-----------------+------+\n
        "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/#sign_out_to_the_text_search_clients","title":"Sign out to the text search clients","text":"

        The SIGN OUT TEXT SERVICE statement can sign out all the text search clients.

        "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/#syntax_2","title":"Syntax","text":"
        SIGN OUT TEXT SERVICE;\n
        "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/#example_2","title":"Example","text":"
        nebula> SIGN OUT TEXT SERVICE;\n
        "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/","title":"Deploy Raft Listener for NebulaGraph Storage service","text":"

        Full-text index data is written to the Elasticsearch cluster asynchronously. The Raft Listener (Listener for short) is a separate process that fetches data from the Storage Service and writes them into the Elasticsearch cluster.

        "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/#prerequisites","title":"Prerequisites","text":"
        • You have read and fully understood the restrictions for using full-text indexes.
        • You have deployed a NebulaGraph cluster.
        • You have deployed a Elasticsearch cluster.
        • You have prepared one or multiple servers to run one or multiple raft listeners.
        "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/#precautions","title":"Precautions","text":"
        • The Storage Service that you want to run as the Listener must have the same or later release with all the other Nebula\u00a0Graph services in the cluster.
        • For now, you can only add all Listeners to a graph space once and for all. Trying to add a new Listener to a graph space that already has a Listener will fail. To add all Listeners, set them in one statement.
        "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/#deployment_process","title":"Deployment process","text":""},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/#step_1_install_the_listener_service","title":"Step 1: Install the Listener service","text":"

        The Listener service uses the same binary as the storaged service. However, the configuration files are different and the processes use different ports. You can install NebulaGraph on all servers that need to deploy a Listener, but only the storaged service can be used. For details, see Install NebulaGraph by RPM or DEB Package.

        "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/#step_2_prepare_the_configuration_file_for_the_listener","title":"Step 2: Prepare the configuration file for the Listener","text":"

        In the etc directory, remove the suffix from nebula-storaged-listener.conf.default or nebula-storaged-listener.conf.production to nebula-storaged-listener.conf, and then modify the configuration content.

        Most configurations are the same as the configurations of Storage Service. This topic only introduces the differences.

        Name Default value Description daemonize true When set to true, the process is a daemon process. pid_file pids/nebula-metad-listener.pid The file that records the process ID. meta_server_addrs - IP (or hostname) and ports of all Meta services. Multiple Meta services are separated by commas. local_ip - The local IP (or hostname) of the Listener service. Use real IP addresses instead of domain names or loopback IP addresses such as 127.0.0.1. port - The listening port of the RPC daemon of the Listener service. heartbeat_interval_secs 10 The heartbeat interval of the Meta service. The unit is second (s). listener_path data/listener The WAL directory of the Listener. Only one directory is allowed. data_path data For compatibility reasons, this parameter can be ignored. Fill in the default value data. part_man_type memory The type of the part manager. Optional values \u200b\u200bare memory and meta. rocksdb_batch_size 4096 The default reserved bytes for batch operations. rocksdb_block_cache 4 The default block cache size of BlockBasedTable. The unit is Megabyte (MB). engine_type rocksdb The type of the Storage engine, such as rocksdb, memory, etc. part_type simple The type of the part, such as simple, consensus, etc."},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/#step_3_start_listeners","title":"Step 3: Start Listeners","text":"

        To initiate the Listener, navigate to the installation path of the desired cluster and execute the following command:

        ./bin/nebula-storaged --flagfile etc/nebula-storaged-listener.conf\n
        "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/#step_4_add_listeners_to_nebulagraph","title":"Step 4: Add Listeners to NebulaGraph","text":"

        Connect to NebulaGraph and run USE <space> to enter the graph space that you want to create full-text indexes for. Then run the following statement to add a Listener into NebulaGraph.

        ADD LISTENER ELASTICSEARCH <listener_ip:port> [,<listener_ip:port>, ...]\n

        Warning

        You must use real IPs for a Listener.

        Add all Listeners in one statement completely.

        nebula> ADD LISTENER ELASTICSEARCH 192.168.8.100:9789,192.168.8.101:9789;\n
        "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/#show_listeners","title":"Show Listeners","text":"

        Run the SHOW LISTENER statement to list all Listeners.

        "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/#example","title":"Example","text":"
        nebula> SHOW LISTENER;\n+--------+-----------------+------------------------+-------------+\n| PartId | Type            | Host                   | Host Status |\n+--------+-----------------+------------------------+-------------+\n| 1      | \"ELASTICSEARCH\" | \"\"192.168.8.100\":9789\" | \"ONLINE\"    |\n| 2      | \"ELASTICSEARCH\" | \"\"192.168.8.100\":9789\" | \"ONLINE\"    |\n| 3      | \"ELASTICSEARCH\" | \"\"192.168.8.100\":9789\" | \"ONLINE\"    |\n+--------+-----------------+------------------------+-------------+\n
        "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/#remove_listeners","title":"Remove Listeners","text":"

        Run the REMOVE LISTENER ELASTICSEARCH statement to remove all Listeners in a graph space.

        "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/#example_1","title":"Example","text":"
        nebula> REMOVE LISTENER ELASTICSEARCH;\n
        "},{"location":"5.configurations-and-logs/1.configurations/1.configurations/","title":"Configurations","text":"

        NebulaGraph builds the configurations based on the gflags repository. Most configurations are flags. When the NebulaGraph service starts, it will get the configuration information from Configuration files by default. Configurations that are not in the file apply the default values.

        Note

        • Because there are many configurations and they may change as NebulaGraph develops, this topic will not introduce all configurations. To get detailed descriptions of configurations, follow the instructions below.
        • It is not recommended to modify the configurations that are not introduced in this topic, unless you are familiar with the source code and fully understand the function of configurations.

        Legacy version compatibility

        In the topic of 1.x, we provide a method of using the CONFIGS command to modify the configurations in the cache. However, using this method in a production environment can easily cause inconsistencies of configurations between clusters and the local. Therefore, this method will no longer be introduced starting with version 2.x.

        "},{"location":"5.configurations-and-logs/1.configurations/1.configurations/#get_the_configuration_list_and_descriptions","title":"Get the configuration list and descriptions","text":"

        Use the following command to get all the configuration information of the service corresponding to the binary file:

        <binary> --help\n

        For example:

        # Get the help information from Meta\n$ /usr/local/nebula/bin/nebula-metad  --help\n\n# Get the help information from Graph\n$ /usr/local/nebula/bin/nebula-graphd --help\n\n# Get the help information from Storage\n$ /usr/local/nebula/bin/nebula-storaged --help\n

        The above examples use the default storage path /usr/local/nebula/bin/. If you modify the installation path of NebulaGraph, use the actual path to query the configurations.

        "},{"location":"5.configurations-and-logs/1.configurations/1.configurations/#get_configurations","title":"Get configurations","text":"

        Use the curl command to get the value of the running configurations.

        For example:

        # Get the running configurations from Meta\ncurl 127.0.0.1:19559/flags\n\n# Get the running configurations from Graph\ncurl 127.0.0.1:19669/flags\n\n# Get the running configurations from Storage\ncurl 127.0.0.1:19779/flags\n

        Utilizing the -s or `-silent option allows for the concealment of the progress bar and error messages. For example:

        curl -s 127.0.0.1:19559/flags\n

        Note

        In an actual environment, use the real IP (or hostname) instead of 127.0.0.1 in the above example.

        "},{"location":"5.configurations-and-logs/1.configurations/1.configurations/#configuration_files","title":"Configuration files","text":""},{"location":"5.configurations-and-logs/1.configurations/1.configurations/#configuration_files_for_clusters_installed_from_source_with_an_rpmdeb_package_or_a_tar_package","title":"Configuration files for clusters installed from source, with an RPM/DEB package, or a TAR package","text":"

        NebulaGraph provides two initial configuration files for each service, <service_name>.conf.default and <service_name>.conf.production. You can use them in different scenarios conveniently. For clusters installed from source and with a RPM/DEB package, the default path is /usr/local/nebula/etc/. For clusters installed with a TAR package, the path is <install_path>/<tar_package_directory>/etc.

        The configuration values in the initial configuration file are for reference only and can be adjusted according to actual needs. To use the initial configuration file, choose one of the above two files and delete the suffix .default or .production to make it valid.

        Note

        To ensure the availability of services, it is recommended that configurations for the same service be consistent, except for local_ip. For example, three Storage servers are deployed in one NebulaGraph cluster. The configurations of the three Storage servers are recommended to be consistent, except for local_ip.

        The initial configuration files corresponding to each service are as follows.

        NebulaGraph service Initial configuration file Description Meta nebula-metad.conf.default and nebula-metad.conf.production Meta service configuration Graph nebula-graphd.conf.default and nebula-graphd.conf.production Graph service configuration Storage nebula-storaged.conf.default and nebula-storaged.conf.production Storage service configuration

        Each initial configuration file of all services contains local_config. The default value is true, which means that the NebulaGraph service will get configurations from its configuration files and start it.

        Caution

        It is not recommended to modify the value of local_config to false. If modified, the NebulaGraph service will first read the cached configurations, which may cause configuration inconsistencies between clusters and cause unknown risks.

        "},{"location":"5.configurations-and-logs/1.configurations/1.configurations/#configuration_files_for_clusters_installed_with_docker_compose","title":"Configuration files for clusters installed with Docker Compose","text":"

        For clusters installed with Docker Compose, the configuration file's default installation path of the cluster is <install_path>/nebula-docker-compose/docker-compose.yaml. The parameters in the command field of the file are the launch parameters for each service.

        "},{"location":"5.configurations-and-logs/1.configurations/1.configurations/#configuration_files_for_clusters_installed_with_nebulagraph_operator","title":"Configuration files for clusters installed with NebulaGraph Operator","text":"

        For clusters installed with Kubectl through NebulaGraph Operator, the configuration file's path is the path of the cluster YAML file. You can modify the configuration of each service through the spec.{graphd|storaged|metad}.config parameter.

        Note

        The services cannot be configured for clusters installed with Helm.

        "},{"location":"5.configurations-and-logs/1.configurations/1.configurations/#modify_configurations","title":"Modify configurations","text":"

        You can modify the configurations of NebulaGraph in the configuration file or use commands to dynamically modify configurations.

        Caution

        Using both methods to modify the configuration can cause the configuration information to be managed inconsistently, which may result in confusion. It is recommended to only use the configuration file to manage the configuration, or to make the same modifications to the configuration file after dynamically updating the configuration through commands to ensure consistency.

        "},{"location":"5.configurations-and-logs/1.configurations/1.configurations/#modifying_configurations_in_the_configuration_file","title":"Modifying configurations in the configuration file","text":"

        By default, each NebulaGraph service gets configured from its configuration files. You can modify configurations and make them valid according to the following steps:

        • For clusters installed from source, with a RPM/DEB, or a TAR package

          1. Use a text editor to modify the configuration files of the target service and save the modification.

          2. Choose an appropriate time to restart all NebulaGraph services to make the modifications valid.

        • For clusters installed with Docker Compose

          1. In the <install_path>/nebula-docker-compose/docker-compose.yaml file, modify the configurations of the target service.
          2. In the nebula-docker-compose directory, run the command docker-compose up -d to restart the service involving configuration modifications.
        • For clusters installed with Kubectl

          For details, see Customize configuration parameters for a NebulaGraph cluster.

        "},{"location":"5.configurations-and-logs/1.configurations/1.configurations/#dynamically_modifying_configurations_using_command","title":"Dynamically modifying configurations using command","text":"

        You can dynamically modify the configuration of NebulaGraph by using the curl command. For example, to modify the wal_ttl parameter of the Storage service to 600, use the following command:

        curl -X PUT -H \"Content-Type: application/json\" -d'{\"wal_ttl\":\"600\"}' -s \"http://192.168.15.6:19779/flags\"\n

        In this command, {\"wal_ttl\":\"600\"} specifies the configuration parameter and its value to be modified, and 192.168.15.6:19779 specifies the IP address and HTTP port number of the Storage service.

        Caution

        • The functionality of dynamically modifying configurations is only applicable to prototype verification and testing environments. It is not recommended to use this feature in production environments. This is because when the local_config value is set to true, the dynamically modified configuration is not persisted, and the configuration will be restored to the initial configuration after the service is restarted.
        • Only part of the configuration parameters can be dynamically modified. For the specific list of parameters that can be modified, see the description of Whether supports runtime dynamic modifications in the respective service configuration.
        "},{"location":"5.configurations-and-logs/1.configurations/2.meta-config/","title":"Meta Service configuration","text":"

        NebulaGraph provides two initial configuration files for the Meta service, nebula-metad.conf.default and nebula-metad.conf.production. Users can use them in different scenarios conveniently. The default file path is /usr/local/nebula/etc/.

        Caution

        • It is not recommended to modify the value of local_config to false. If modified, the NebulaGraph service will first read the cached configurations, which may cause configuration inconsistencies between clusters and cause unknown risks.
        • It is not recommended to modify the configurations that are not introduced in this topic, unless you are familiar with the source code and fully understand the function of configurations.
        "},{"location":"5.configurations-and-logs/1.configurations/2.meta-config/#how_to_use_the_configuration_files","title":"How to use the configuration files","text":"

        To use the initial configuration file, choose one of the above two files and delete the suffix .default or .production from the initial configuration file for the Meta Service to apply the configurations defined in it.

        "},{"location":"5.configurations-and-logs/1.configurations/2.meta-config/#about_parameter_values","title":"About parameter values","text":"

        If a parameter is not set in the configuration file, NebulaGraph uses the default value. Not all parameters are predefined. And the predefined parameters in the two initial configuration files are different. This topic uses the parameters in nebula-metad.conf.default.

        Caution

        Some parameter values in the configuration file can be dynamically modified during runtime. We label these parameters as Yes that supports runtime dynamic modification in this article. When the local_config value is set to true, the dynamically modified configuration is not persisted, and the configuration will be restored to the initial configuration after the service is restarted. For more information, see Modify configurations.

        For all parameters and their current values, see Configurations.

        "},{"location":"5.configurations-and-logs/1.configurations/2.meta-config/#basics_configurations","title":"Basics configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications daemonize true When set to true, the process is a daemon process. No pid_file pids/nebula-metad.pid The file that records the process ID. No timezone_name - Specifies the NebulaGraph time zone. This parameter is not predefined in the initial configuration files. You can manually set it if you need it. The system default value is UTC+00:00:00. For the format of the parameter value, see Specifying the Time Zone with TZ. For example, --timezone_name=UTC+08:00 represents the GMT+8 time zone. No

        Note

        • While inserting property values of time types, NebulaGraph transforms time types (except TIMESTAMP) to the corresponding UTC according to the time zone specified by timezone_name. The time-type values returned by nGQL queries are all UTC time.
        • timezone_name is only used to transform the data stored in NebulaGraph. Other time-related data of the NebulaGraph processes still uses the default time zone of the host, such as the log printing time.
        "},{"location":"5.configurations-and-logs/1.configurations/2.meta-config/#logging_configurations","title":"Logging configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications log_dir logs The directory that stores the Meta Service log. It is recommended to put logs on a different hard disk from the data. No minloglevel 0 Specifies the minimum level of the log. That is, log messages at or above this level. Optional values are 0 (INFO), 1 (WARNING), 2 (ERROR), 3 (FATAL). It is recommended to set it to 0 during debugging and 1 in a production environment. If it is set to 4, NebulaGraph will not print any logs. Yes v 0 Specifies the detailed level of VLOG. That is, log all VLOG messages less or equal to the level. Optional values are 0, 1, 2, 3, 4, 5. The VLOG macro provided by glog allows users to define their own numeric logging levels and control verbose messages that are logged with the parameter v. For details, see Verbose Logging. Yes logbufsecs 0 Specifies the maximum time to buffer the logs. If there is a timeout, it will output the buffered log to the log file. 0 means real-time output. This configuration is measured in seconds. No redirect_stdout true When set to true, the process redirects thestdout and stderr to separate output files. No stdout_log_file metad-stdout.log Specifies the filename for the stdout log. No stderr_log_file metad-stderr.log Specifies the filename for the stderr log. No stderrthreshold 3 Specifies the minloglevel to be copied to the stderr log. No timestamp_in_logfile_name true Specifies if the log file name contains a timestamp. true indicates yes, false indicates no. No"},{"location":"5.configurations-and-logs/1.configurations/2.meta-config/#networking_configurations","title":"Networking configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications meta_server_addrs 127.0.0.1:9559 Specifies the IPs (or hostnames) and ports of all Meta Services. Multiple addresses are separated with commas. No local_ip 127.0.0.1 Specifies the local IP (or hostname) for the Meta Service. The local IP address is used to identify the nebula-metad process. If it is a distributed cluster or requires remote access, modify it to the corresponding address. No port 9559 Specifies RPC daemon listening port of the Meta service. The neighboring +1 (9560) port is used for Raft communication between Meta services. No ws_ip 0.0.0.0 Specifies the IP address for the HTTP service. No ws_http_port 19559 Specifies the port for the HTTP service. No ws_storage_http_port 19779 Specifies the Storage service listening port used by the HTTP protocol. It must be consistent with the ws_http_port in the Storage service configuration file. This parameter only applies to standalone NebulaGraph. No

        Caution

        It is recommended to use a real IP when using IP address. Otherwise, 127.0.0.1/0.0.0.0 cannot be parsed correctly in some cases.

        "},{"location":"5.configurations-and-logs/1.configurations/2.meta-config/#storage_configurations","title":"Storage configurations","text":"Name Predefined Value Description Whether supports runtime dynamic modifications data_path data/meta The storage path for Meta data. No"},{"location":"5.configurations-and-logs/1.configurations/2.meta-config/#misc_configurations","title":"Misc configurations","text":"Name Predefined Value Description Whether supports runtime dynamic modifications default_parts_num 10 Specifies the default partition number when creating a new graph space. No default_replica_factor 1 Specifies the default replica number when creating a new graph space. No heartbeat_interval_secs 10 Specifies the default heartbeat interval. Make sure the heartbeat_interval_secs values for all services are the same, otherwise NebulaGraph CANNOT work normally. This configuration is measured in seconds. Yes agent_heartbeat_interval_secs 60 Specifies the default heartbeat interval for the Agent service. This configuration influences the time it takes for the system to determine that the Agent service is offline. This configuration is measured in seconds. No"},{"location":"5.configurations-and-logs/1.configurations/2.meta-config/#rocksdb_options_configurations","title":"RocksDB options configurations","text":"Name Predefined Value Description Whether supports runtime dynamic modifications rocksdb_wal_sync true Enables or disables RocksDB WAL synchronization. Available values are true (enable) and false (disable). No"},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/","title":"Graph Service configuration","text":"

        NebulaGraph provides two initial configuration files for the Graph Service, nebula-graphd.conf.default and nebula-graphd.conf.production. Users can use them in different scenarios conveniently. The default file path is /usr/local/nebula/etc/.

        Caution

        • It is not recommended to modify the value of local_config to false. If modified, the NebulaGraph service will first read the cached configurations, which may cause configuration inconsistencies between clusters and cause unknown risks.
        • It is not recommended to modify the configurations that are not introduced in this topic, unless you are familiar with the source code and fully understand the function of configurations.
        "},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#how_to_use_the_configuration_files","title":"How to use the configuration files","text":"

        To use the initial configuration file, choose one of the above two files and delete the suffix .default or .production from the initial configuration file for the Meta Service to apply the configurations defined in it.

        "},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#about_parameter_values","title":"About parameter values","text":"

        If a parameter is not set in the configuration file, NebulaGraph uses the default value. Not all parameters are predefined. And the predefined parameters in the two initial configuration files are different. This topic uses the parameters in nebula-metad.conf.default.

        Caution

        Some parameter values in the configuration file can be dynamically modified during runtime. We label these parameters as Yes that supports runtime dynamic modification in this article. When the local_config value is set to true, the dynamically modified configuration is not persisted, and the configuration will be restored to the initial configuration after the service is restarted. For more information, see Modify configurations.

        For all parameters and their current values, see Configurations.

        "},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#basics_configurations","title":"Basics configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications daemonize true When set to true, the process is a daemon process. No pid_file pids/nebula-graphd.pid The file that records the process ID. No enable_optimizer true When set to true, the optimizer is enabled. No timezone_name - Specifies the NebulaGraph time zone. This parameter is not predefined in the initial configuration files. The system default value is UTC+00:00:00. For the format of the parameter value, see Specifying the Time Zone with TZ. For example, --timezone_name=UTC+08:00 represents the GMT+8 time zone. No default_charset utf8 Specifies the default charset when creating a new graph space. No default_collate utf8_bin Specifies the default collate when creating a new graph space. No local_config true When set to true, the process gets configurations from the configuration files. No

        Note

        • While inserting property values of time types, NebulaGraph transforms time types (except TIMESTAMP) to the corresponding UTC according to the time zone specified by timezone_name. The time-type values returned by nGQL queries are all UTC time.
        • timezone_name is only used to transform the data stored in NebulaGraph. Other time-related data of the NebulaGraph processes still uses the default time zone of the host, such as the log printing time.
        "},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#logging_configurations","title":"Logging configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications log_dir logs The directory that stores the Graph service log. It is recommended to put logs on a different hard disk from the data. No minloglevel 0 Specifies the minimum level of the log. That is, log messages at or above this level. Optional values are 0 (INFO), 1 (WARNING), 2 (ERROR), 3 (FATAL). It is recommended to set it to 0 during debugging and 1 in a production environment. If it is set to 4, NebulaGraph will not print any logs. Yes v 0 Specifies the detailed level of VLOG. That is, log all VLOG messages less or equal to the level. Optional values are 0, 1, 2, 3, 4, 5. The VLOG macro provided by glog allows users to define their own numeric logging levels and control verbose messages that are logged with the parameter v. For details, see Verbose Logging. Yes logbufsecs 0 Specifies the maximum time to buffer the logs. If there is a timeout, it will output the buffered log to the log file. 0 means real-time output. This configuration is measured in seconds. No redirect_stdout true When set to true, the process redirects thestdout and stderr to separate output files. No stdout_log_file graphd-stdout.log Specifies the filename for the stdout log. No stderr_log_file graphd-stderr.log Specifies the filename for the stderr log. No stderrthreshold 3 Specifies the minloglevel to be copied to the stderr log. No timestamp_in_logfile_name true Specifies if the log file name contains a timestamp. true indicates yes, false indicates no. No"},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#query_configurations","title":"Query configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications accept_partial_success false When set to false, the process treats partial success as an error. This configuration only applies to read-only requests. Write requests always treat partial success as an error. A partial success query will prompt Got partial result. Yes session_reclaim_interval_secs 60 Specifies the interval that the Session information is sent to the Meta service. This configuration is measured in seconds. Yes max_allowed_query_size 4194304 Specifies the maximum length of queries. Unit: bytes. The default value is 4194304, namely 4MB. Yes"},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#networking_configurations","title":"Networking configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications meta_server_addrs 127.0.0.1:9559 Specifies the IPs (or hostnames) and ports of all Meta Services. Multiple addresses are separated with commas. No local_ip 127.0.0.1 Specifies the local IP (or hostname) for the Graph Service. The local IP address is used to identify the nebula-graphd process. If it is a distributed cluster or requires remote access, modify it to the corresponding address. No listen_netdev any Specifies the listening network device. No port 9669 Specifies RPC daemon listening port of the Graph service. No reuse_port false When set to false, the SO_REUSEPORT is closed. No listen_backlog 1024 Specifies the maximum length of the connection queue for socket monitoring. This configuration must be modified together with the net.core.somaxconn. No client_idle_timeout_secs 28800 Specifies the time to expire an idle connection. The value ranges from 1 to 604800. The default is 8 hours. This configuration is measured in seconds. No session_idle_timeout_secs 28800 Specifies the time to expire an idle session. The value ranges from 1 to 604800. The default is 8 hours. This configuration is measured in seconds. No num_accept_threads 1 Specifies the number of threads that accept incoming connections. No num_netio_threads 0 Specifies the number of networking IO threads. 0 is the number of CPU cores. No num_max_connections 0 Max active connections for all networking threads. 0 means no limit.Max connections for each networking thread = num_max_connections / num_netio_threads No num_worker_threads 0 Specifies the number of threads that execute queries. 0 is the number of CPU cores. No ws_ip 0.0.0.0 Specifies the IP address for the HTTP service. No ws_http_port 19669 Specifies the port for the HTTP service. No heartbeat_interval_secs 10 Specifies the default heartbeat interval. Make sure the heartbeat_interval_secs values for all services are the same, otherwise NebulaGraph CANNOT work normally. This configuration is measured in seconds. Yes storage_client_timeout_ms - Specifies the RPC connection timeout threshold between the Graph Service and the Storage Service. This parameter is not predefined in the initial configuration files. You can manually set it if you need it. The system default value is 60000 ms. No slow_query_threshold_us 200000 When the execution time of a query exceeds the value, the query is called a slow query. Unit: Microsecond.Note: Even if the execution time of DML statements exceeds this value, they will not be recorded as slow queries. No ws_meta_http_port 19559 Specifies the Meta service listening port used by the HTTP protocol. It must be consistent with the ws_http_port in the Meta service configuration file. No

        Caution

        It is recommended to use a real IP when using IP address. Otherwise, 127.0.0.1/0.0.0.0 cannot be parsed correctly in some cases.

        "},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#authorization_configurations","title":"Authorization configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications enable_authorize false When set to false, the system authentication is not enabled. For more information, see Authentication. No auth_type password Specifies the login method. Available values are password, ldap, and cloud. No"},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#memory_configurations","title":"Memory configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications system_memory_high_watermark_ratio 0.8 Specifies the trigger threshold of the high-level memory alarm mechanism. If the system memory usage is higher than this value, an alarm mechanism will be triggered, and NebulaGraph will stop querying. This parameter is not predefined in the initial configuration files. Yes"},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#metrics_configurations","title":"Metrics configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications enable_space_level_metrics false Enable or disable space-level metrics. Such metric names contain the name of the graph space that it monitors, for example, query_latency_us{space=basketballplayer}.avg.3600. You can view the supported metrics with the curl command. For more information, see Query NebulaGraph metrics. No"},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#session_configurations","title":"Session configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications max_sessions_per_ip_per_user 300 The maximum number of active sessions that can be created from a single IP adddress for a single user. No"},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#experimental_configurations","title":"Experimental configurations","text":"

        Note

        The switch of the experimental feature is only available in the Community Edition.

        Name Predefined value Description Whether supports runtime dynamic modifications enable_experimental_feature false Specifies the experimental feature. Optional values are true and false. No enable_data_balance true Whether to enable the BALANCE DATA feature. Only works when enable_experimental_feature is true. No"},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#memory_tracker_configurations","title":"Memory tracker configurations","text":"

        Note

        Memory Tracker is a memory management tool designed to monitor and limit memory usage. For large-scale queries, Memory Tracker can prevent Out Of Memory (OOM) issues. If you're using Memory Tracker in a containerized environment, you need to add the relevant configurations to the configuration file of the Graph service.

        1. Create the directory /sys/fs/cgroup/graphd/, and then add and configure the memory.max file under the directory.
        2. Add the following configurations to etc/nebula-graphd.conf.

          --containerized=true\n--cgroup_v2_controllers=/sys/fs/cgroup/graphd/cgroup.controllers\n--cgroup_v2_memory_stat_path=/sys/fs/cgroup/graphd/memory.stat\n--cgroup_v2_memory_max_path=/sys/fs/cgroup/graphd/memory.max\n--cgroup_v2_memory_current_path=/sys/fs/cgroup/graphd/memory.current\n

        For more details, see Memory Tracker: Memory Management Practice in NebulaGraph Database.

        Name Predefined value Description Whether supports runtime dynamic modifications memory_tracker_limit_ratio 0.8 The value of this parameter can be set to (0, 1], 2, and 3.Caution: When setting this parameter, ensure that the value of system_memory_high_watermark_ratio is not set to 1, otherwise the value of this parameter will not take effect.(0, 1]: The percentage of available memory. Formula: Percentage of available memory = Available memory / (Total memory - Reserved memory).When an ongoing query results in memory usage exceeding the configured limit, the query fails and subsequently the memory is released. Note: For the hybrid deployment of a cluster with cloud-based and on-premises nodes, the value of memory_tracker_limit_ratio should be set to a lower value. For example, when the graphd is expected to occupy only 50% of memory, the value can be set to less than 0.5.2: Dynamic Self Adaptive mode. MemoryTracker dynamically adjusts the available memory based on the system's current available memory. Note: This feature is experimental. As memory usage cannot be monitored in real time in dynamic adaptive mode, an OOM error may still occur to handle large memory allocations. 3: Disable MemoryTracker. MemoryTracker only logs memory usage and does not interfere with executions even if the limit is exceeded. Yes memory_tracker_untracked_reserved_memory_mb 50 The reserved memory that is not tracked by the memory tracker. Unit: MB. Yes memory_tracker_detail_log false Whether to enable the memory tracker log. When the value is true, the memory tracker log is generated. Yes memory_tracker_detail_log_interval_ms 60000 The time interval for generating the memory tracker log. Unit: Millisecond. memory_tracker_detail_log is true when this parameter takes effect. Yes memory_purge_enabled true Whether to enable the memory purge feature. When the value is true, the memory purge feature is enabled. Yes memory_purge_interval_seconds 10 The time interval for the memory purge feature to purge memory. Unit: Second. This parameter only takes effect if memory_purge_enabled is set to true. Yes"},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#performance_optimization_configurations","title":"performance optimization configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications max_job_size 1 The maximum number of concurrent jobs, i.e., the maximum number of threads used in the phase of query execution where concurrent execution is possible. It is recommended to be half of the physical CPU cores. Yes min_batch_size 8192 The minimum batch size for processing the dataset. Takes effect only when max_job_size is greater than 1. Yes optimize_appendvertices false When enabled, the MATCH statement is executed without filtering dangling edges. Yes path_batch_size 10000 The number of paths constructed per thread. Yes"},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/","title":"Storage Service configurations","text":"

        NebulaGraph provides two initial configuration files for the Storage Service, nebula-storaged.conf.default and nebula-storaged.conf.production. Users can use them in different scenarios conveniently. The default file path is /usr/local/nebula/etc/.

        Caution

        • It is not recommended to modify the value of local_config to false. If modified, the NebulaGraph service will first read the cached configurations, which may cause configuration inconsistencies between clusters and cause unknown risks.
        • It is not recommended to modify the configurations that are not introduced in this topic, unless you are familiar with the source code and fully understand the function of configurations.
        "},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#how_to_use_the_configuration_files","title":"How to use the configuration files","text":"

        To use the initial configuration file, choose one of the above two files and delete the suffix .default or .production from the initial configuration file for the Meta Service to apply the configurations defined in it.

        "},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#about_parameter_values","title":"About parameter values","text":"

        If a parameter is not set in the configuration file, NebulaGraph uses the default value. Not all parameters are predefined. And the predefined parameters in the two initial configuration files are different. This topic uses the parameters in nebula-metad.conf.default. For parameters that are not included in nebula-metad.conf.default, see nebula-storaged.conf.production.

        Caution

        Some parameter values in the configuration file can be dynamically modified during runtime. We label these parameters as Yes that supports runtime dynamic modification in this article. When the local_config value is set to true, the dynamically modified configuration is not persisted, and the configuration will be restored to the initial configuration after the service is restarted. For more information, see Modify configurations.

        Note

        The configurations of the Raft Listener and the Storage service are different. For details, see Deploy Raft listener.

        For all parameters and their current values, see Configurations.

        "},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#basics_configurations","title":"Basics configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications daemonize true When set to true, the process is a daemon process. No pid_file pids/nebula-storaged.pid The file that records the process ID. No timezone_name UTC+00:00:00 Specifies the NebulaGraph time zone. This parameter is not predefined in the initial configuration files, if you need to use this parameter, add it manually. For the format of the parameter value, see Specifying the Time Zone with TZ. For example, --timezone_name=UTC+08:00 represents the GMT+8 time zone. No local_config true When set to true, the process gets configurations from the configuration files. No

        Note

        • While inserting property values of time types, NebulaGraph transforms time types (except TIMESTAMP) to the corresponding UTC according to the time zone specified by timezone_name. The time-type values returned by nGQL queries are all UTC.
        • timezone_name is only used to transform the data stored in NebulaGraph. Other time-related data of the NebulaGraph processes still uses the default time zone of the host, such as the log printing time.
        "},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#logging_configurations","title":"Logging configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications log_dir logs The directory that stores the Storage service log. It is recommended to put logs on a different hard disk from the data. No minloglevel 0 Specifies the minimum level of the log. That is, log messages at or above this level. Optional values are 0 (INFO), 1 (WARNING), 2 (ERROR), 3 (FATAL). It is recommended to set it to 0 during debugging and 1 in a production environment. If it is set to 4, NebulaGraph will not print any logs. Yes v 0 Specifies the detailed level of VLOG. That is, log all VLOG messages less or equal to the level. Optional values are 0, 1, 2, 3, 4, 5. The VLOG macro provided by glog allows users to define their own numeric logging levels and control verbose messages that are logged with the parameter v. For details, see Verbose Logging. Yes logbufsecs 0 Specifies the maximum time to buffer the logs. If there is a timeout, it will output the buffered log to the log file. 0 means real-time output. This configuration is measured in seconds. No redirect_stdout true When set to true, the process redirects thestdout and stderr to separate output files. No stdout_log_file graphd-stdout.log Specifies the filename for the stdout log. No stderr_log_file graphd-stderr.log Specifies the filename for the stderr log. No stderrthreshold 3 Specifies the minloglevel to be copied to the stderr log. No timestamp_in_logfile_name true Specifies if the log file name contains a timestamp. true indicates yes, false indicates no. No"},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#networking_configurations","title":"Networking configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications meta_server_addrs 127.0.0.1:9559 Specifies the IPs (or hostnames) and ports of all Meta Services. Multiple addresses are separated with commas. No local_ip 127.0.0.1 Specifies the local IP (or hostname) for the Storage Service. The local IP address is used to identify the nebula-storaged process. If it is a distributed cluster or requires remote access, modify it to the corresponding address. No port 9779 Specifies RPC daemon listening port of the Storage service. The neighboring ports -1 (9778) and +1 (9780) are also used. 9778: The port used by the Admin service, which receives Meta commands for Storage. 9780: The port used for Raft communication between Storage services. No ws_ip 0.0.0.0 Specifies the IP address for the HTTP service. No ws_http_port 19779 Specifies the port for the HTTP service. No heartbeat_interval_secs 10 Specifies the default heartbeat interval. Make sure the heartbeat_interval_secs values for all services are the same, otherwise NebulaGraph CANNOT work normally. This configuration is measured in seconds. Yes

        Caution

        It is recommended to use a real IP when using IP address. Otherwise, 127.0.0.1/0.0.0.0 cannot be parsed correctly in some cases.

        "},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#raft_configurations","title":"Raft configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications raft_heartbeat_interval_secs 30 Specifies the time to expire the Raft election. The configuration is measured in seconds. Yes raft_rpc_timeout_ms 500 Specifies the time to expire the Raft RPC. The configuration is measured in milliseconds. Yes wal_ttl 14400 Specifies the lifetime of the RAFT WAL. The configuration is measured in seconds. Yes"},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#disk_configurations","title":"Disk configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications data_path data/storage Specifies the data storage path. Multiple paths are separated with commas. For NebulaGraph of the community edition, one RocksDB instance corresponds to one path. No minimum_reserved_bytes 268435456 Specifies the minimum remaining space of each data storage path. When the value is lower than this standard, the cluster data writing may fail. This configuration is measured in bytes. No rocksdb_batch_size 4096 Specifies the block cache for a batch operation. The configuration is measured in bytes. No rocksdb_block_cache 4 Specifies the block cache for BlockBasedTable. The configuration is measured in megabytes. No disable_page_cache false Enables or disables the operating system's page cache for NebulaGraph. By default, the parameter value is false and page cache is enabled. If the value is set to true, page cache is disabled and sufficient block cache space must be configured for NebulaGraph. No engine_type rocksdb Specifies the engine type. No rocksdb_compression lz4 Specifies the compression algorithm for RocksDB. Optional values are no, snappy, lz4, lz4hc, zlib, bzip2, and zstd.This parameter modifies the compression algorithm for each level. If you want to set different compression algorithms for each level, use the parameter rocksdb_compression_per_level. No rocksdb_compression_per_level \\ Specifies the compression algorithm for each level. The priority is higher than rocksdb_compression. For example, no:no:lz4:lz4:snappy:zstd:snappy.You can also not set certain levels of compression algorithms, for example, no:no:lz4:lz4::zstd, level L4 and L6 use the compression algorithm of rocksdb_compression. No enable_rocksdb_statistics false When set to false, RocksDB statistics is disabled. No rocksdb_stats_level kExceptHistogramOrTimers Specifies the stats level for RocksDB. Optional values are kExceptHistogramOrTimers, kExceptTimers, kExceptDetailedTimers, kExceptTimeForMutex, and kAll. No enable_rocksdb_prefix_filtering true When set to true, the prefix bloom filter for RocksDB is enabled. Enabling prefix bloom filter makes the graph traversal faster but occupies more memory. No enable_rocksdb_whole_key_filtering false When set to true, the whole key bloom filter for RocksDB is enabled. rocksdb_filtering_prefix_length 12 Specifies the prefix length for each key. Optional values are 12 and 16. The configuration is measured in bytes. No enable_partitioned_index_filter false When set to true, it reduces the amount of memory used by the bloom filter. But in some random-seek situations, it may reduce the read performance. This parameter is not predefined in the initial configuration files, if you need to use this parameter, add it manually. No"},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#rocksdb_options","title":"RocksDB options","text":"Name Predefined value Description Whether supports runtime dynamic modifications rocksdb_db_options {} Specifies the RocksDB database options. No rocksdb_column_family_options {\"write_buffer_size\":\"67108864\",\"max_write_buffer_number\":\"4\",\"max_bytes_for_level_base\":\"268435456\"} Specifies the RocksDB column family options. No rocksdb_block_based_table_options {\"block_size\":\"8192\"} Specifies the RocksDB block based table options. No

        The format of the RocksDB option is {\"<option_name>\":\"<option_value>\"}. Multiple options are separated with commas.

        Supported options of rocksdb_db_options and rocksdb_column_family_options are listed as follows.

        • rocksdb_db_options
          max_total_wal_size\ndelete_obsolete_files_period_micros\nmax_background_jobs\nstats_dump_period_sec\ncompaction_readahead_size\nwritable_file_max_buffer_size\nbytes_per_sync\nwal_bytes_per_sync\ndelayed_write_rate\navoid_flush_during_shutdown\nmax_open_files\nstats_persist_period_sec\nstats_history_buffer_size\nstrict_bytes_per_sync\nenable_rocksdb_prefix_filtering\nenable_rocksdb_whole_key_filtering\nrocksdb_filtering_prefix_length\nnum_compaction_threads\nrate_limit\n
        • rocksdb_column_family_options
          write_buffer_size\nmax_write_buffer_number\nlevel0_file_num_compaction_trigger\nlevel0_slowdown_writes_trigger\nlevel0_stop_writes_trigger\ntarget_file_size_base\ntarget_file_size_multiplier\nmax_bytes_for_level_base\nmax_bytes_for_level_multiplier\ndisable_auto_compactions \n

        For more information, see RocksDB official documentation.

        "},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#misc_configurations","title":"Misc configurations","text":"

        Caution

        The configuration snapshot in the following table is different from the snapshot in NebulaGraph. The snapshot here refers to the stock data on the leader when synchronizing Raft.

        Name Predefined value Description Whether supports runtime dynamic modifications query_concurrently true Whether to turn on multi-threaded queries. Enabling it can improve the latency performance of individual queries, but it will reduce the overall throughput under high pressure. Yes auto_remove_invalid_space true After executing DROP SPACE, the specified graph space will be deleted. This parameter sets whether to delete all the data in the specified graph space at the same time. When the value is true, all the data in the specified graph space will be deleted at the same time. Yes num_io_threads 16 The number of network I/O threads used to send RPC requests and receive responses. No num_max_connections 0 Max active connections for all networking threads. 0 means no limit.Max connections for each networking thread = num_max_connections / num_netio_threads No num_worker_threads 32 The number of worker threads for one RPC-based Storage service. No max_concurrent_subtasks 10 The maximum number of concurrent subtasks to be executed by the task manager. No snapshot_part_rate_limit 10485760 The rate limit when the Raft leader synchronizes the stock data with other members of the Raft group. Unit: bytes/s. Yes snapshot_batch_size 1048576 The amount of data sent in each batch when the Raft leader synchronizes the stock data with other members of the Raft group. Unit: bytes. Yes rebuild_index_part_rate_limit 4194304 The rate limit when the Raft leader synchronizes the index data rate with other members of the Raft group during the index rebuilding process. Unit: bytes/s. Yes rebuild_index_batch_size 1048576 The amount of data sent in each batch when the Raft leader synchronizes the index data with other members of the Raft group during the index rebuilding process. Unit: bytes. Yes"},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#memory_tracker_configurations","title":"Memory Tracker configurations","text":"

        Note

        Memory Tracker is a memory management tool designed to monitor and limit memory usage. For large-scale queries, Memory Tracker can prevent Out Of Memory (OOM) issues. If you're using Memory Tracker in a containerized environment, you need to add the relevant configurations to the configuration file of the Storage service.

        1. Create the directory /sys/fs/cgroup/storaged/, and then add and configure the memory.max file under the directory.
        2. Add the following configurations to etc/nebula-storaged.conf.

          --containerized=true\n--cgroup_v2_controllers=/sys/fs/cgroup/graphd/cgroup.controllers\n--cgroup_v2_memory_stat_path=/sys/fs/cgroup/graphd/memory.stat\n--cgroup_v2_memory_max_path=/sys/fs/cgroup/graphd/memory.max\n--cgroup_v2_memory_current_path=/sys/fs/cgroup/graphd/memory.current\n

        For more details, see Memory Tracker: Memory Management Practice in NebulaGraph Database.

        Name Predefined value Description Whether supports runtime dynamic modifications memory_tracker_limit_ratio 0.8 The value of this parameter can be set to (0, 1], 2, and 3.(0, 1]: The percentage of available memory. Formula: Percentage of available memory = Available memory / (Total memory - Reserved memory).When an ongoing query results in memory usage exceeding the configured limit, the query fails and subsequently the memory is released. Note: For the hybrid deployment of a cluster with cloud-based and on-premises nodes, the value of memory_tracker_limit_ratio should be set to a lower value. For example, when the graphd is expected to occupy only 50% of memory, the value can be set to less than 0.5.2: Dynamic Self Adaptive mode. MemoryTracker dynamically adjusts the available memory based on the system's current available memory. Note: This feature is experimental. As memory usage cannot be monitored in real time in dynamic adaptive mode, an OOM error may still occur to handle large memory allocations. 3: Disable MemoryTracker. MemoryTracker only logs memory usage and does not interfere with executions even if the limit is exceeded. Yes memory_tracker_untracked_reserved_memory_mb 50 The reserved memory that is not tracked by the Memory Tracker. Unit: MB. Yes memory_tracker_detail_log false Whether to enable the Memory Tracker log. When the value is true, the Memory Tracker log is generated. Yes memory_tracker_detail_log_interval_ms 60000 The time interval for generating the Memory Tracker log. Unit: Millisecond. memory_tracker_detail_log is true when this parameter takes effect. Yes memory_purge_enabled true Whether to enable the memory purge feature. When the value is true, the memory purge feature is enabled. Yes memory_purge_interval_seconds 10 The time interval for the memory purge feature to purge memory. Unit: Second. This parameter only takes effect if memory_purge_enabled is set to true. Yes"},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#for_super-large_vertices","title":"For super-Large vertices","text":"

        When the query starting from each vertex gets an edge, truncate it directly to avoid too many neighboring edges on the super-large vertex, because a single query occupies too much hard disk and memory. Or you can truncate a certain number of edges specified in the Max_edge_returned_per_vertex parameter. Excess edges will not be returned. This parameter applies to all spaces.

        Property name Default value Description Whether supports runtime dynamic modifications max_edge_returned_per_vertex 2147483647 Specifies the maximum number of edges returned for each dense vertex. Excess edges are truncated and not returned. This parameter is not predefined in the initial configuration files, if you need to use this parameter, add it manually. No"},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#storage_configurations_for_large_dataset","title":"Storage configurations for large dataset","text":"

        Warning

        One graph space takes up at least about 300 MB of memory.

        When you have a large dataset (in the RocksDB directory) and your memory is tight, we suggest that you set the enable_partitioned_index_filter parameter to true. The performance is affected because RocksDB indexes are cached.

        "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/","title":"Kernel configurations","text":"

        This topic introduces the Kernel configurations in Nebula\u00a0Graph.

        "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#resource_control","title":"Resource control","text":"

        You may run the ulimit command to control the resource threshold. However, the changes made only take effect for the current session or sub-process. To make permanent changes, edit file /etc/security/limits.conf. The configuration is as follows:

        # <domain>     <type>      <item>          <value>\n*              soft         core           unlimited    \n*              hard         core           unlimited   \n*              soft         nofile          130000   \n*              hard         nofile          130000\n

        Note

        The configuration modification takes effect for new sessions.

        The parameter descriptions are as follows.

        Parameter Description domain Control Domain. This parameter can be a user name, a user group name (starting with @), or * to indicate all users. type Control type. This parameter can be soft or hard. soft indicates a soft threshold (the default threshold) for the resource and hard indicates a maximum value that can be set by the user. The ulimit command can be used to increase soft, but not to exceed hard. item Resource types. For example, core limits the size of the core dump file, and nofile limits the maximum number of file descriptors a process can open. value Resource limit value. This parameter can be a number, or unlimited to indicate that there is no limit.

        You can run man limits.conf for more helpful information.

        "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#memory","title":"Memory","text":""},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#vmswappiness","title":"vm.swappiness","text":"

        vm.swappiness specifies the percentage of the available memory before starting swap. The greater the value, the more likely the swap occurs. We recommend that you set it to 0. When set to 0, the page cache is removed first. Note that when vm.swappiness is 0, it does not mean that there is no swap.

        "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#vmmin_free_kbytes","title":"vm.min_free_kbytes","text":"

        vm.min_free_kbytes specifies the minimum number of kilobytes available kept by Linux VM. If you have a large system memory, we recommend that you increase this value. For example, if your physical memory 128GB, set it to 5GB. If the value is not big enough, the system cannot apply for enough continuous physical memory.

        "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#vmmax_map_count","title":"vm.max_map_count","text":"

        vm.max_map_count limits the maximum number of vma (virtual memory area) for a process. The default value is 65530. It is enough for most applications. If your memory application fails because the memory consumption is large, increase the vm.max_map_count value.

        "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#vmdirty_","title":"vm.dirty_*","text":"

        These values control the dirty data cache for the system. For write-intensive scenarios, you can make adjustments based on your needs (throughput priority or delay priority). We recommend that you use the system default value.

        "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#transparent_huge_pages","title":"Transparent Huge Pages","text":"

        Transparent Huge Pages (THP) is a memory management feature of the Linux kernel, which enhances the system's ability to use large pages. In most database systems, Transparent Huge Pages can degrade performance, so it is recommended to disable it.

        Perform the following steps:

        1. Edit the GRUB configuration file /etc/default/grub.

          sudo vi /etc/default/grub\n
        2. Add transparent_hugepage=never to the GRUB_CMDLINE_LINUX option, and then save and exit.

          GRUB_CMDLINE_LINUX=\"... transparent_hugepage=never\"\n
        3. Update the GRUB configuration.

          • For CentOS:

            sudo grub2-mkconfig -o /boot/grub2/grub.cfg\n
          • For Ubuntu:

            sudo update-grub\n
        4. Reboot the computer.

          sudo reboot\n

          If you don't want to reboot, you can run the following commands to temporarily disable THP until the next reboot.

          echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled\necho 'never' > /sys/kernel/mm/transparent_hugepage/defrag\n
        "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#networking","title":"Networking","text":""},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#netipv4tcp_slow_start_after_idle","title":"net.ipv4.tcp_slow_start_after_idle","text":"

        The default value of net.ipv4.tcp_slow_start_after_idle is 1. If set, the congestion window is timed out after an idle period. We recommend that you set it to 0, especially for long fat scenarios (high latency and large bandwidth).

        "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#netcoresomaxconn","title":"net.core.somaxconn","text":"

        net.core.somaxconn specifies the maximum number of connection queues listened by the socket. The default value is 128. For scenarios with a large number of burst connections, we recommend that you set it to greater than 1024.

        "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#netipv4tcp_max_syn_backlog","title":"net.ipv4.tcp_max_syn_backlog","text":"

        net.ipv4.tcp_max_syn_backlog specifies the maximum number of TCP connections in the SYN_RECV (semi-connected) state. The setting rule for this parameter is the same as that of net.core.somaxconn.

        "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#netcorenetdev_max_backlog","title":"net.core.netdev_max_backlog","text":"

        net.core.netdev_max_backlog specifies the maximum number of packets. The default value is 1000. We recommend that you increase it to greater than 10,000, especially for 10G network adapters.

        "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#netipv4tcp_keepalive_","title":"net.ipv4.tcp_keepalive_*","text":"

        These values keep parameters alive for TCP connections. For applications that use a 4-layer transparent load balancer, if the idle connection is disconnected unexpectedly, decrease the values of tcp_keepalive_time and tcp_keepalive_intvl.

        "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#netipv4tcp_rmemwmem","title":"net.ipv4.tcp_rmem/wmem","text":"

        net.ipv4.tcp_wmem/rmem specifies the minimum, default, and maximum size of the buffer pool sent/received by the TCP socket. For long fat links, we recommend that you increase the default value to bandwidth (GB) * RTT (ms).

        "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#scheduler","title":"scheduler","text":"

        For SSD devices, we recommend that you set scheduler to noop or none. The path is /sys/block/DEV_NAME/queue/scheduler.

        "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#other_parameters","title":"Other parameters","text":""},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#kernelcore_pattern","title":"kernel.core_pattern","text":"

        we recommend that you set it to core and set kernel.core_uses_pid to 1.

        "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#modify_parameters","title":"Modify parameters","text":""},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#sysctl","title":"sysctl","text":"
        • sysctl <conf_name>

          Checks the current parameter value.

        • sysctl -w <conf_name>=<value>

          Modifies the parameter value. The modification takes effect immediately. The original value is restored after restarting.

        • sysctl -p [<file_path>]

          Loads Linux parameter values \u200b\u200bfrom the specified configuration file. The default path is /etc/sysctl.conf.

        "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#prlimit","title":"prlimit","text":"

        The prlimit command gets and sets process resource limits. You can modify the hard threshold by using it and the sudo command. For example, prlimit --nofile = 130000 --pid = $$ adjusts the maximum number of open files permitted by the current process to 14000. And the modification takes effect immediately. Note that this command is only available in RedHat 7u or higher versions.

        "},{"location":"5.configurations-and-logs/2.log-management/logs/","title":"Runtime logs","text":"

        Runtime logs are provided for DBAs and developers to locate faults when the system fails.

        NebulaGraph uses glog to print runtime logs, uses gflags to control the severity level of the log, and provides an HTTP interface to dynamically change the log level at runtime to facilitate tracking.

        "},{"location":"5.configurations-and-logs/2.log-management/logs/#log_directory","title":"Log directory","text":"

        The default runtime log directory is /usr/local/nebula/logs/.

        If the log directory is deleted while NebulaGraph is running, the log would not continue to be printed. However, this operation will not affect the services. To recover the logs, restart the services.

        "},{"location":"5.configurations-and-logs/2.log-management/logs/#parameter_descriptions","title":"Parameter descriptions","text":"
        • minloglevel: Specifies the minimum level of the log. That is, no logs below this level will be printed. Optional values are 0 (INFO), 1 (WARNING), 2 (ERROR), 3 (FATAL). It is recommended to set it to 0 during debugging and 1 in a production environment. If it is set to 4, NebulaGraph will not print any logs.
        • v: Specifies the detailed level of the log. The larger the value, the more detailed the log is. Optional values are 0, 1, 2, 3.

        The default severity level for the metad, graphd, and storaged logs can be found in their respective configuration files. The default path is /usr/local/nebula/etc/.

        "},{"location":"5.configurations-and-logs/2.log-management/logs/#check_the_severity_level","title":"Check the severity level","text":"

        Check all the flag values (log values included) of the current gflags with the following command.

        $ curl <ws_ip>:<ws_port>/flags\n
        Parameter Description ws_ip The IP address for the HTTP service, which can be found in the configuration files above. The default value is 127.0.0.1. ws_port The port for the HTTP service, which can be found in the configuration files above. The default values are 19559(Meta), 19669(Graph), and 19779(Storage) respectively.

        Examples are as follows:

        • Check the current minloglevel in the Meta service:
          $ curl 127.0.0.1:19559/flags | grep 'minloglevel'\n
        • Check the current v in the Storage service:
          $ curl 127.0.0.1:19779/flags | grep -w 'v'\n
        "},{"location":"5.configurations-and-logs/2.log-management/logs/#change_the_severity_level","title":"Change the severity level","text":"

        Change the severity level of the log with the following command.

        $ curl -X PUT -H \"Content-Type: application/json\" -d '{\"<key>\":<value>[,\"<key>\":<value>]}' \"<ws_ip>:<ws_port>/flags\"\n
        Parameter Description key The type of the log to be changed. For optional values, see Parameter descriptions. value The level of the log. For optional values, see Parameter descriptions. ws_ip The IP address for the HTTP service, which can be found in the configuration files above. The default value is 127.0.0.1. ws_port The port for the HTTP service, which can be found in the configuration files above. The default values are 19559(Meta), 19669(Graph), and 19779(Storage) respectively.

        Examples are as follows:

        $ curl -X PUT -H \"Content-Type: application/json\" -d '{\"minloglevel\":0,\"v\":3}' \"127.0.0.1:19779/flags\" # storaged\n$ curl -X PUT -H \"Content-Type: application/json\" -d '{\"minloglevel\":0,\"v\":3}' \"127.0.0.1:19669/flags\" # graphd\n$ curl -X PUT -H \"Content-Type: application/json\" -d '{\"minloglevel\":0,\"v\":3}' \"127.0.0.1:19559/flags\" # metad\n

        If the log level is changed while NebulaGraph is running, it will be restored to the level set in the configuration file after restarting the service. To permanently modify it, see Configuration files.

        "},{"location":"5.configurations-and-logs/2.log-management/logs/#rocksdb_runtime_logs","title":"RocksDB runtime logs","text":"

        RocksDB runtime logs are usually used to debug RocksDB parameters and stored in /usr/local/nebula/data/storage/nebula/$id/data/LOG. $id is the ID of the example.

        "},{"location":"5.configurations-and-logs/2.log-management/logs/#log_recycling","title":"Log recycling","text":"

        Glog does not inherently support log recycling. To implement this feature, you can either use cron jobs in Linux to regularly remove old log files or use the log management tool, logrotate, to rotate logs for regular archiving and deletion.

        "},{"location":"5.configurations-and-logs/2.log-management/logs/#log_recycling_using_cron_jobs","title":"Log recycling using cron jobs","text":"

        This section provides an example of how to use cron jobs to regularly delete old log files from the Graph service's runtime logs.

        1. In the Graph service configuration file, apply the following settings and restart the service:

          timestamp_in_logfile_name = true\nmax_log_size = 500\n
          • By setting timestamp_in_logfile_name to true, the log file name includes a timestamp, allowing regular deletion of old log files.
          • The max_log_size parameter sets the maximum size of a single log file in MB, such as 500. Once this size is exceeded, a new log file is automatically created. The default value is 1800.
        2. Use the following command to open the cron job editor.

          crontab -e\n
        3. Add a cron job command to the editor to regularly delete old log files.

          * * * * * find <log_path> -name \"<YourProjectName>\" -mtime +7 -delete\n

          Caution

          The find command in the above command should be executed by the root user or a user with sudo privileges.

          • * * * * *: This cron job time field signifies that the task is executed every minute. For other settings, see Cron Expression.
          • <log_path>: The path of the service runtime log file, such as /usr/local/nebula/logs.
          • <YourProjectName>: The log file name, such as nebula-graphd.*.
          • -mtime +7: This deletes log files that are older than 7 days. Alternatively, use -mmin +n to delete log files older than n minutes. For details, see the find command.
          • -delete: This deletes log files that meet the conditions.

          For example, to automatically delete the Graph service runtime log files older than 7 days at 3 o'clock every morning, use:

          0 3 * * * find /usr/local/nebula/logs -name nebula-graphd.* -mtime +7 -delete\n
        4. Save the cron job and exit the editor.

        "},{"location":"5.configurations-and-logs/2.log-management/logs/#log_recycling_using_logrotate","title":"Log recycling using logrotate","text":"

        Logrotate is a tool that can rotate specified log files for archiving and recycling.

        Note

        You must be the root user or a user with sudo privileges to install or run logrotate.

        This section provides an example of how to use logrotate to manage the Graph service's INFO level log file (/usr/local/nebula/logs/nebula-graphd.INFO.impl).

        1. In the Graph service configuration file, set timestamp_in_logfile_name to false so that the logrotate tool can recognize the log file name. Then, restart the service.

          timestamp_in_logfile_name = false\n
        2. Install logrotate.

          • For Debian/Ubuntu:

            sudo apt-get install logrotate\n
          • For CentOS/RHEL:

            sudo yum install logrotate\n
        3. Create a logrotate configuration file, add log rotation rules, and save the configuration file.

          In the /etc/logrotate.d directory, create a new logrotate configuration file nebula-graphd.INFO.

          sudo vim /etc/logrotate.d/nebula-graphd.INFO\n

          Then, add the following content:

          # The absolute path of the log file needs to be configured\n# And the file name cannot be a symbolic link file, such as `nebula-graph.INFO`\n/usr/local/nebula/logs/nebula-graphd.INFO.impl {\n    daily\n    rotate 2\n    copytruncate\n    nocompress\n    missingok\n    notifempty\n    create 644 root root\n    dateext\n    dateformat .%Y-%m-%d-%s\n    maxsize 1k\n}\n
          Parameter Description daily Rotate the log daily. Other available time units include hourly, daily, weekly, monthly, and yearly. rotate 2 Keep the most recent 2 log files before deleting the older one. copytruncate Copy the current log file and then truncate it, ensuring no disruption to the logging process. nocompress Do not compress the old log files. missingok Do not report errors if the log file is missing. notifempty Do not rotate the log file if it's empty. create 644 root root Create a new log file with the specified permissions and ownership. dateext Add a date extension to the log file name. The default is the current date in the format -%Y%m%d. You can extend this using the dateformat option. dateformat .%Y-%m-%d-%s This must follow immediately after dateext and defines the file name after log rotation. Before V3.9.0, only %Y, %m, %d, and %s parameters were supported. Starting from V3.9.0, the %H parameter is also supported. maxsize 1k Rotate the log when it exceeds 1 kilobyte (1024 bytes) in size or when the specified time unit (e.g., daily) passes. You can use size units like k and M, with the default unit being bytes.

          Modify the parameters in the configuration file according to actual needs. For more information about parameter configuration, see logrotate.

        4. Test the logrotate configuration.

          To verify whether the logrotate configuration is correct, use the following command for testing.

          sudo logrotate --debug /etc/logrotate.d/nebula-graphd.INFO\n
        5. Execute logrotate.

          Although logrotate is typically executed automatically by cron jobs, you can manually execute the following command to perform log rotation immediately.

          sudo logrotate -fv /etc/logrotate.d/nebula-graphd.INFO\n

          -fv: f stands for forced execution, v stands for verbose output.

        6. Verify the log rotation results.

          After log rotation, new log files are found in the /usr/local/nebula/logs directory, such as nebula-graphd.INFO.impl.2024-01-04-1704338204. The original log content is cleared, but the file is retained for new log entries. When the number of log files exceeds the value set by rotate, the oldest log file is deleted.

          For example, rotate2` means keeping the 2 most recently generated log files. When the number of log files exceeds 2, the oldest log file is deleted.

          [test@test logs]$ ll\n-rw-r--r-- 1 root root        0 Jan  4 11:18 nebula-graphd.INFO.impl \n-rw-r--r-- 1 root root     6894 Jan  4 11:16 nebula-graphd.INFO.impl.2024-01-04-1704338204 # This file is deleted when a new log file is generated\n-rw-r--r-- 1 root root      222 Jan  4 11:18 nebula-graphd.INFO.impl.2024-01-04-1704338287\n[test@test logs]$ ll\n-rw-r--r-- 1 root root        0 Jan  4 11:18 nebula-graphd.INFO.impl\n-rw-r--r-- 1 root root      222 Jan  4 11:18 nebula-graphd.INFO.impl.2024-01-04-1704338287\n-rw-r--r-- 1 root root      222 Jan  4 11:18 nebula-graphd.INFO.impl.2024-01-04-1704338339 # The new log file is generated\n

        If you need to rotate multiple log files, create multiple configuration files in the /etc/logrotate.d directory, with each configuration file corresponding to a log file. For example, to rotate the INFO level log file and the WARNING level log file of the Meta service, create two configuration files nebula-metad.INFO and nebula-metad.WARNING, and add log rotation rules in them respectively.

        "},{"location":"6.monitor-and-metrics/1.query-performance-metrics/","title":"Query NebulaGraph metrics","text":"

        NebulaGraph supports querying the monitoring metrics through HTTP ports.

        "},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#metrics_structure","title":"Metrics structure","text":"

        Each metric of NebulaGraph consists of three fields: name, type, and time range. The fields are separated by periods, for example, num_queries.sum.600. Different NebulaGraph services (Graph, Storage, or Meta) support different metrics. The detailed description is as follows.

        Field Example Description Metric name num_queries Indicates the function of the metric. Metric type sum Indicates how the metrics are collected. Supported types are SUM, AVG, RATE, and the P-th sample quantiles such as P75, P95, P99, and P999. Time range 600 The time range in seconds for the metric collection. Supported values are 5, 60, 600, and 3600, representing the last 5 seconds, 1 minute, 10 minutes, and 1 hour."},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#query_metrics_over_http","title":"Query metrics over HTTP","text":""},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#syntax","title":"Syntax","text":"
        curl -G \"http://<host>:<port>/stats?stats=<metric_name_list> [&format=json]\"\n
        Parameter Description host The IP (or hostname) of the server. You can find it in the configuration file in the installation directory. port The HTTP port of the server. You can find it in the configuration file in the installation directory. The default ports are 19559 (Meta), 19669 (Graph), and 19779 (Storage). metric_name_list The metrics names. Multiple metrics are separated by commas (,). &format=json Optional. Returns the result in the JSON format.

        Note

        If NebulaGraph is deployed with Docker Compose, run docker-compose ps to check the ports that are mapped from the service ports inside of the container and then query through them.

        "},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#query_a_single_metric","title":"Query a single metric","text":"

        Query the query number in the last 10 minutes in the Graph Service.

        $ curl -G \"http://192.168.8.40:19669/stats?stats=num_queries.sum.600\"\nnum_queries.sum.600=400\n
        "},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#query_multiple_metrics","title":"Query multiple metrics","text":"

        Query the following metrics together:

        • The average heartbeat latency in the last 1 minute.
        • The average latency of the slowest 1% heartbeats, i.e., the P99 heartbeats, in the last 10 minutes.

          $ curl -G \"http://192.168.8.40:19559/stats?stats=heartbeat_latency_us.avg.60,heartbeat_latency_us.p99.600\"\nheartbeat_latency_us.avg.60=281\nheartbeat_latency_us.p99.600=985\n
        "},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#return_a_json_result","title":"Return a JSON result.","text":"

        Query the number of new vertices in the Storage Service in the last 10 minutes and return the result in the JSON format.

        $ curl -G \"http://192.168.8.40:19779/stats?stats=num_add_vertices.sum.600&format=json\"\n[{\"value\":1,\"name\":\"num_add_vertices.sum.600\"}]\n
        "},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#query_all_metrics_in_a_service","title":"Query all metrics in a service.","text":"

        If no metric is specified in the query, NebulaGraph returns all metrics in the service.

        $ curl -G \"http://192.168.8.40:19559/stats\"\nheartbeat_latency_us.avg.5=304\nheartbeat_latency_us.avg.60=308\nheartbeat_latency_us.avg.600=299\nheartbeat_latency_us.avg.3600=285\nheartbeat_latency_us.p75.5=652\nheartbeat_latency_us.p75.60=669\nheartbeat_latency_us.p75.600=651\nheartbeat_latency_us.p75.3600=642\nheartbeat_latency_us.p95.5=930\nheartbeat_latency_us.p95.60=963\nheartbeat_latency_us.p95.600=933\nheartbeat_latency_us.p95.3600=929\nheartbeat_latency_us.p99.5=986\nheartbeat_latency_us.p99.60=1409\nheartbeat_latency_us.p99.600=989\nheartbeat_latency_us.p99.3600=986\nnum_heartbeats.rate.5=0\nnum_heartbeats.rate.60=0\nnum_heartbeats.rate.600=0\nnum_heartbeats.rate.3600=0\nnum_heartbeats.sum.5=2\nnum_heartbeats.sum.60=40\nnum_heartbeats.sum.600=394\nnum_heartbeats.sum.3600=2364\n...\n
        "},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#space-level_metrics","title":"Space-level metrics","text":"

        The Graph service supports a set of space-level metrics that record the information of different graph spaces separately.

        Space-level metrics can be queried only by querying all metrics. For example, run curl -G \"http://192.168.8.40:19559/stats\" to show all metrics. The returned result contains the graph space name in the form of '{space=space_name}', such as num_active_queries{space=basketballplayer}.sum.5=0.

        Caution

        To enable space-level metrics, set the value of enable_space_level_metrics to true in the Graph service configuration file before starting NebulaGraph. For details about how to modify the configuration, see Configuration Management.

        "},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#metric_description","title":"Metric description","text":""},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#graph","title":"Graph","text":"Parameter Description num_active_queries The number of changes in the number of active queries. Formula: The number of started queries minus the number of finished queries within a specified time. num_active_sessions The number of changes in the number of active sessions. Formula: The number of logged in sessions minus the number of logged out sessions within a specified time.For example, when querying num_active_sessions.sum.5, if there were 10 sessions logged in and 30 sessions logged out in the last 5 seconds, the value of this metric is -20 (10-30). num_aggregate_executors The number of executions for the Aggregation operator. num_auth_failed_sessions_bad_username_password The number of sessions where authentication failed due to incorrect username and password. num_auth_failed_sessions_out_of_max_allowed The number of sessions that failed to authenticate logins because the value of the parameter FLAG_OUT_OF_MAX_ALLOWED_CONNECTIONS was exceeded. num_auth_failed_sessions The number of sessions in which login authentication failed. num_indexscan_executors The number of executions for index scan operators. num_killed_queries The number of killed queries. num_opened_sessions The number of sessions connected to the server. num_queries The number of queries. num_query_errors_leader_changes The number of the raft leader changes due to query errors. num_query_errors The number of query errors. num_reclaimed_expired_sessions The number of expired sessions actively reclaimed by the server. num_rpc_sent_to_metad_failed The number of failed RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_metad The number of RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_storaged_failed The number of failed RPC requests that the Graphd service sent to the Storaged service. num_rpc_sent_to_storaged The number of RPC requests that the Graphd service sent to the Storaged service. num_sentences The number of statements received by the Graphd service. num_slow_queries The number of slow queries. num_sort_executors The number of executions for the Sort operator. optimizer_latency_us The latency of executing optimizer statements. query_latency_us The latency of queries. slow_query_latency_us The latency of slow queries. num_queries_hit_memory_watermark The number of queries reached the memory watermark. resp_part_completeness The completeness of the partial success. You need to set accept_partial_success to true in the graph configuration first."},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#meta","title":"Meta","text":"Parameter Description commit_log_latency_us The latency of committing logs in Raft. commit_snapshot_latency_us The latency of committing snapshots in Raft. heartbeat_latency_us The latency of heartbeats. num_heartbeats The number of heartbeats. num_raft_votes The number of votes in Raft. transfer_leader_latency_us The latency of transferring the raft leader. num_agent_heartbeats The number of heartbeats for the AgentHBProcessor. agent_heartbeat_latency_us The latency of the AgentHBProcessor. replicate_log_latency_us The latency of replicating the log record to most nodes by Raft. num_send_snapshot The number of times that Raft sends snapshots to other nodes. append_log_latency_us The latency of replicating the log record to a single node by Raft. append_wal_latency_us The Raft write latency for a single WAL. num_grant_votes The number of times that Raft votes for other nodes. num_start_elect The number of times that Raft starts an election."},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#storage","title":"Storage","text":"Parameter Description add_edges_latency_us The latency of adding edges. add_vertices_latency_us The latency of adding vertices. commit_log_latency_us The latency of committing logs in Raft. commit_snapshot_latency_us The latency of committing snapshots in Raft. delete_edges_latency_us The latency of deleting edges. delete_vertices_latency_us The latency of deleting vertices. get_neighbors_latency_us The latency of querying neighbor vertices. get_dst_by_src_latency_us The latency of querying the destination vertex by the source vertex. num_get_prop The number of executions for the GetPropProcessor. num_get_neighbors_errors The number of execution errors for the GetNeighborsProcessor. num_get_dst_by_src_errors The number of execution errors for the GetDstBySrcProcessor. get_prop_latency_us The latency of executions for the GetPropProcessor. num_edges_deleted The number of deleted edges. num_edges_inserted The number of inserted edges. num_raft_votes The number of votes in Raft. num_rpc_sent_to_metad_failed The number of failed RPC requests that the Storage service sent to the Meta service. num_rpc_sent_to_metad The number of RPC requests that the Storaged service sent to the Metad service. num_tags_deleted The number of deleted tags. num_vertices_deleted The number of deleted vertices. num_vertices_inserted The number of inserted vertices. transfer_leader_latency_us The latency of transferring the raft leader. lookup_latency_us The latency of executions for the LookupProcessor. num_lookup_errors The number of execution errors for the LookupProcessor. num_scan_vertex The number of executions for the ScanVertexProcessor. num_scan_vertex_errors The number of execution errors for the ScanVertexProcessor. update_edge_latency_us The latency of executions for the UpdateEdgeProcessor. num_update_vertex The number of executions for the UpdateVertexProcessor. num_update_vertex_errors The number of execution errors for the UpdateVertexProcessor. kv_get_latency_us The latency of executions for the Getprocessor. kv_put_latency_us The latency of executions for the PutProcessor. kv_remove_latency_us The latency of executions for the RemoveProcessor. num_kv_get_errors The number of execution errors for the GetProcessor. num_kv_get The number of executions for the GetProcessor. num_kv_put_errors The number of execution errors for the PutProcessor. num_kv_put The number of executions for the PutProcessor. num_kv_remove_errors The number of execution errors for the RemoveProcessor. num_kv_remove The number of executions for the RemoveProcessor. forward_tranx_latency_us The latency of transmission. scan_edge_latency_us The latency of executions for the ScanEdgeProcessor. num_scan_edge_errors The number of execution errors for the ScanEdgeProcessor. num_scan_edge The number of executions for the ScanEdgeProcessor. scan_vertex_latency_us The latency of executions for the ScanVertexProcessor. num_add_edges The number of times that edges are added. num_add_edges_errors The number of errors when adding edges. num_add_vertices The number of times that vertices are added. num_start_elect The number of times that Raft starts an election. num_add_vertices_errors The number of errors when adding vertices. num_delete_vertices_errors The number of errors when deleting vertices. append_log_latency_us The latency of replicating the log record to a single node by Raft. num_grant_votes The number of times that Raft votes for other nodes. replicate_log_latency_us The latency of replicating the log record to most nodes by Raft. num_delete_tags The number of times that tags are deleted. num_delete_tags_errors The number of errors when deleting tags. num_delete_edges The number of edge deletions. num_delete_edges_errors The number of errors when deleting edges num_send_snapshot The number of times that snapshots are sent. update_vertex_latency_us The latency of executions for the UpdateVertexProcessor. append_wal_latency_us The Raft write latency for a single WAL. num_update_edge The number of executions for the UpdateEdgeProcessor. delete_tags_latency_us The latency of deleting tags. num_update_edge_errors The number of execution errors for the UpdateEdgeProcessor. num_get_neighbors The number of executions for the GetNeighborsProcessor. num_get_dst_by_src The number of executions for the GetDstBySrcProcessor. num_get_prop_errors The number of execution errors for the GetPropProcessor. num_delete_vertices The number of times that vertices are deleted. num_lookup The number of executions for the LookupProcessor. num_sync_data The number of times the Storage service synchronizes data from the Drainer. num_sync_data_errors The number of errors that occur when the Storage service synchronizes data from the Drainer. sync_data_latency_us The latency of the Storage service synchronizing data from the Drainer."},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#graph_space","title":"Graph space","text":"

        Note

        Space-level metrics are created dynamically, so that only when the behavior is triggered in the graph space, the corresponding metric is created and can be queried by the user.

        Parameter Description num_active_queries The number of queries currently being executed. num_queries The number of queries. num_sentences The number of statements received by the Graphd service. optimizer_latency_us The latency of executing optimizer statements. query_latency_us The latency of queries. num_slow_queries The number of slow queries. num_query_errors The number of query errors. num_query_errors_leader_changes The number of raft leader changes due to query errors. num_killed_queries The number of killed queries. num_aggregate_executors The number of executions for the Aggregation operator. num_sort_executors The number of executions for the Sort operator. num_indexscan_executors The number of executions for index scan operators. num_auth_failed_sessions_bad_username_password The number of sessions where authentication failed due to incorrect username and password. num_auth_failed_sessions The number of sessions in which login authentication failed. num_opened_sessions The number of sessions connected to the server. num_queries_hit_memory_watermark The number of queries reached the memory watermark. num_reclaimed_expired_sessions The number of expired sessions actively reclaimed by the server. num_rpc_sent_to_metad_failed The number of failed RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_metad The number of RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_storaged_failed The number of failed RPC requests that the Graphd service sent to the Storaged service. num_rpc_sent_to_storaged The number of RPC requests that the Graphd service sent to the Storaged service. slow_query_latency_us The latency of slow queries."},{"location":"6.monitor-and-metrics/2.rocksdb-statistics/","title":"RocksDB statistics","text":"

        NebulaGraph uses RocksDB as the underlying storage. This topic describes how to collect and show the RocksDB statistics of NebulaGraph.

        "},{"location":"6.monitor-and-metrics/2.rocksdb-statistics/#enable_rocksdb","title":"Enable RocksDB","text":"

        By default, the function of RocksDB statistics is disabled. To enable RocksDB statistics, you need to:

        1. Modify the --enable_rocksdb_statistics parameter as true in the nebula-storaged.conf file. The default path of the configuration file is /use/local/nebula/etc.

        2. Restart the service to make the modification valid.

        "},{"location":"6.monitor-and-metrics/2.rocksdb-statistics/#get_rocksdb_statistics","title":"Get RocksDB statistics","text":"

        Users can use the built-in HTTP service in the storage service to get the following types of statistics. Results in the JSON format are supported.

        • All RocksDB statistics.
        • Specified RocksDB statistics.
        "},{"location":"6.monitor-and-metrics/2.rocksdb-statistics/#examples","title":"Examples","text":"

        Use the following command to get all RocksDB statistics:

        curl -L \"http://${storage_ip}:${port}/rocksdb_stats\"\n

        For example:

        curl -L \"http://172.28.2.1:19779/rocksdb_stats\"\n\nrocksdb.blobdb.blob.file.bytes.read=0\nrocksdb.blobdb.blob.file.bytes.written=0\nrocksdb.blobdb.blob.file.bytes.synced=0\n...\n

        Use the following command to get specified RocksDB statistics:

        curl -L \"http://${storage_ip}:${port}/rocksdb_stats?stats=${stats_name}\"\n

        For example, use the following command to get the information of rocksdb.bytes.read and rocksdb.block.cache.add.

        curl -L \"http://172.28.2.1:19779/rocksdb_stats?stats=rocksdb.bytes.read,rocksdb.block.cache.add\"\n\nrocksdb.block.cache.add=14\nrocksdb.bytes.read=1632\n

        Use the following command to get specified RocksDB statistics in the JSON format:

        curl -L \"http://${storage_ip}:${port}/rocksdb_stats?stats=${stats_name}&format=json\"\n

        For example, use the following command to get the information of rocksdb.bytes.read and rocksdb.block.cache.add and return the results in the JSON format.

        curl -L \"http://172.28.2.1:19779/rocksdb_stats?stats=rocksdb.bytes.read,rocksdb.block.cache.add&format=json\"\n\n[\n  {\n    \"rocksdb.block.cache.add\": 1\n  },\n  {\n    \"rocksdb.bytes.read\": 160\n  }\n]\n

        "},{"location":"7.data-security/4.ssl/","title":"SSL encryption","text":"

        NebulaGraph supports SSL encrypted transfers between the Client, Graph Service, Meta Service, and Storage Service, and this topic describes how to set up SSL encryption.

        "},{"location":"7.data-security/4.ssl/#precaution","title":"Precaution","text":"

        Enabling SSL encryption will slightly affect the performance, such as causing operation latency.

        "},{"location":"7.data-security/4.ssl/#certificate_modes","title":"Certificate modes","text":"

        To use SSL encryption, SSL certificates are required. NebulaGraph supports two certificate modes.

        • Self-signed certificate mode

          A certificate that is generated by the server itself and signed by itself. In the self-signed certificate mode, the server needs to generate its own SSL certificate and key, and then use its own private key to sign the certificate. It is suitable for building secure communications for systems and applications within a LAN.

        • CA-signed certificate mode

          A certificate granted by a trusted third-party Certificate Authority (CA). In the CA signed certificate mode, the server needs to apply for an SSL certificate from a trusted CA and ensure the authenticity and trustworthiness of the certificate through the auditing and signing of the certificate authority center. It is suitable for public network environment, especially for websites, e-commerce and other occasions that need to protect user information security.

        "},{"location":"7.data-security/4.ssl/#authentication_policies","title":"Authentication policies","text":"

        Policies for the NebulaGraph community edition.

        Scene TLS External device access to Graph Modify the Graph configuration file to add the following parameters:--enable_graph_ssl = true --ca_path=xxxxxx--cert_path=xxxxxx--key_path=xxxxxx Graph access Meta In the Graph/Meta configuration file, add the following parameters:--enable_meta_ssl = true--ca_path=xxxxxx--cert_path=xxxxxx--key_path=xxxxxx Graph access StorageMeta access Storage In the Graph/Meta/Storage configuration file, add the following parameters:--enable_storage_ssl = true--ca_path=xxxxxx--cert_path=xxxxxx--key_path=xxxxxx Graph access Meta/StorageMeta access Storage In the Graph/Meta/Storage configuration file, add the following parameters:--enable_meta_ssl = true--enable_storage_ssl = true--ca_path=xxxxxx--cert_path=xxxxxx--key_path=xxxxxx External device access to GraphGraph access Meta/StorageMeta access Storage In the Graph/Meta/Storage configuration file, add the following parameters:--enable_ssl = true--ca_path=xxxxxx--cert_path=xxxxxx--key_path=xxxxxx

        The parameters are described below.

        Parameter Default value Description cert_path - The path to the SSL public key certificate. This certificate is usually a .pem or .crt file, which is used to prove the identity of the server side, and contains information such as the public key, certificate owner, digital signature, and so on. key_path - The path to the SSL key. The SSL key is usually a .key file. password_path - (Optional) The path to the password file for the SSL key. Some SSL keys are encrypted and require a corresponding password to decrypt. We need to store the password in a separate file and use this parameter to specify the path to the password file. ca_path - The path to the SSL root certificate. The root certificate is a special SSL certificate that is considered the highest level in the SSL trust chain and is used to validate and authorize other SSL certificates. enable_ssl false Whether to enable SSL encryption in all services. only. enable_graph_ssl false Whether to enable SSL encryption in the Graph service only. enable_meta_ssl false Whether to enable SSL encryption in the Meta service only. enable_storage_ssl false Whether to enable SSL encryption in the Storage service only."},{"location":"7.data-security/4.ssl/#example_of_tls","title":"Example of TLS","text":"
        1. For example, using self-signed certificates and TLS for data transfers between the client NebulaGraph Python, the Graph service, the Meta service, and the Storage service. You need to set up all three Graph/Meta/Storage configuration files as follows:

          --enable_ssl=true\n--ca_path=xxxxxx\n--cert_path=xxxxxx\n--key_path=xxxxxx\n
        2. When the changes are complete, restart these services to make the configuration take effect.

        3. To connect to the Graph service using NebulaGraph Python, you need to set up a secure socket and add a trusted CA. For code examples, see nebula-test-run.py.

        "},{"location":"7.data-security/1.authentication/1.authentication/","title":"Authentication","text":"

        NebulaGraph replies on local authentication to implement access control.

        NebulaGraph creates a session when a client connects to it. The session stores information about the connection, including the user information. If the authentication system is enabled, the session will be mapped to corresponding users.

        Note

        By default, the authentication is disabled and NebulaGraph allows connections with the username root and any password.

        "},{"location":"7.data-security/1.authentication/1.authentication/#local_authentication","title":"Local authentication","text":"

        Local authentication indicates that usernames and passwords are stored locally on the server, with the passwords encrypted. Users will be authenticated when trying to visit NebulaGraph.

        "},{"location":"7.data-security/1.authentication/1.authentication/#enable_local_authentication","title":"Enable local authentication","text":"
        1. Modify the nebula-graphd.conf file (/usr/local/nebula/etc/ is the default path) to set the following parameters:

          • --enable_authorize: Set its value to true to enable authentication.

            Note

            • By default, the authentication is disabled and NebulaGraph allows connections with the username root and any password.
            • You can use the username root and password nebula to log into NebulaGraph after enabling local authentication. This account has the build-in God role. For more information about roles, see Roles and privileges.
          • --failed_login_attempts: This parameter is optional, and you need to add this parameter manually. Specify the attempts of continuously entering incorrect passwords for a single Graph service. When the number exceeds the limitation, your account will be locked. For multiple Graph services, the allowed attempts are number of services * failed_login_attempts.
          • --password_lock_time_in_secs: This parameter is optional, and you need to add this parameter manually. Specify the time how long your account is locked after multiple incorrect password entries are entered. Unit: second.
        2. Restart the NebulaGraph services. For how to restart, see Manage NebulaGraph services.

        "},{"location":"7.data-security/1.authentication/2.management-user/","title":"User management","text":"

        User management is an indispensable part of NebulaGraph access control. This topic describes how to manage users and roles.

        After enabling authentication, only valid users can connect to NebulaGraph and access the resources according to the user roles.

        Note

        • By default, the authentication is disabled. NebulaGraph allows connections with the username root and any password.
        • Once the role of a user is modified, the user has to re-login to make the new role takes effect.
        "},{"location":"7.data-security/1.authentication/2.management-user/#create_user","title":"CREATE USER","text":"

        The root user with the GOD role can run CREATE USER to create a new user.

        • Syntax

          CREATE USER [IF NOT EXISTS] <user_name> [WITH PASSWORD '<password>'];\n
          • IF NOT EXISTS: Detects if the user name exists. The user will be created only if the user name does not exist.
          • user_name: Sets the name of the user. The maximum length is 16 characters.
          • password: Sets the password of the user. The default password is the empty string (''). The maximum length is 24 characters.
        • Example

          nebula> CREATE USER user1 WITH PASSWORD 'nebula';\nnebula> SHOW USERS;\n+---------+-------------------------------+\n| Account | IP Whitelist                  |\n+---------+-------------------------------+\n| \"root\"  | \"\"                            |\n| \"user1\" | \"\"                            |\n+---------+-------------------------------+\n
        "},{"location":"7.data-security/1.authentication/2.management-user/#grant_role","title":"GRANT ROLE","text":"

        Users with the GOD role or the ADMIN role can run GRANT ROLE to assign a built-in role in a graph space to a user. For more information about NebulaGraph built-in roles, see Roles and privileges.

        • Syntax

          GRANT ROLE <role_type> ON <space_name> TO <user_name>;\n
        • Example

          nebula> GRANT ROLE USER ON basketballplayer TO user1;\n
        "},{"location":"7.data-security/1.authentication/2.management-user/#revoke_role","title":"REVOKE ROLE","text":"

        Users with the GOD role or the ADMIN role can run REVOKE ROLE to revoke the built-in role of a user in a graph space. For more information about NebulaGraph built-in roles, see Roles and privileges.

        • Syntax

          REVOKE ROLE <role_type> ON <space_name> FROM <user_name>;\n
        • Example

          nebula> REVOKE ROLE USER ON basketballplayer FROM user1;\n
        "},{"location":"7.data-security/1.authentication/2.management-user/#describe_user","title":"DESCRIBE USER","text":"

        Users can run DESCRIBE USER to list the roles for a specified user.

        • Syntax

          DESCRIBE USER <user_name>;\nDESC USER <user_name>;\n
        • Example

          nebula> DESCRIBE USER user1;\n+---------+--------------------+\n| role    | space              |\n+---------+--------------------+\n| \"ADMIN\" | \"basketballplayer\" |\n+---------+--------------------+\n
        "},{"location":"7.data-security/1.authentication/2.management-user/#show_roles","title":"SHOW ROLES","text":"

        Users can run SHOW ROLES to list the roles in a graph space.

        • Syntax

          SHOW ROLES IN <space_name>;\n
        • Example

          nebula> SHOW ROLES IN basketballplayer;\n+---------+-----------+\n| Account | Role Type |\n+---------+-----------+\n| \"user1\" | \"ADMIN\"   |\n+---------+-----------+\n
        "},{"location":"7.data-security/1.authentication/2.management-user/#change_password","title":"CHANGE PASSWORD","text":"

        Users can run CHANGE PASSWORD to set a new password for a user. The old password is needed when setting a new one.

        • Syntax

          CHANGE PASSWORD <user_name> FROM '<old_password>' TO '<new_password>';\n
        • Example

          nebula> CHANGE PASSWORD user1 FROM 'nebula' TO 'nebula123';\n
        "},{"location":"7.data-security/1.authentication/2.management-user/#alter_user","title":"ALTER USER","text":"

        The root user with the GOD role can run ALTER USER to set a new password. The old password is not needed when altering the user.

        • Syntax

          ALTER USER <user_name> WITH PASSWORD '<password>';\n
          - Example

          nebula> ALTER USER user2 WITH PASSWORD 'nebula';\n
        "},{"location":"7.data-security/1.authentication/2.management-user/#drop_user","title":"DROP USER","text":"

        The root user with the GOD role can run DROP USER to remove a user.

        Note

        Removing a user does not close the current session of the user, and the user role still takes effect in the session until the session is closed.

        • Syntax

          DROP USER [IF EXISTS] <user_name>;\n
        • Example

          nebula> DROP USER user1;\n
        "},{"location":"7.data-security/1.authentication/2.management-user/#show_users","title":"SHOW USERS","text":"

        The root user with the GOD role can run SHOW USERS to list all the users.

        • Syntax

          SHOW USERS;\n
        • Example

          nebula> SHOW USERS;\n+---------+-----------------+\n| Account | IP Whitelist    |\n+---------+-----------------+\n| \"root\"  | \"\"              |\n| \"user1\" | \"\"              |\n| \"user2\" | \"192.168.10.10\" |\n+---------+-----------------+\n
        "},{"location":"7.data-security/1.authentication/3.role-list/","title":"Roles and privileges","text":"

        A role is a collection of privileges. You can assign a role to a user for access control.

        "},{"location":"7.data-security/1.authentication/3.role-list/#built-in_roles","title":"Built-in roles","text":"

        NebulaGraph does not support custom roles, but it has multiple built-in roles:

        • GOD

          • GOD is the original role with all privileges not limited to graph spaces. It is similar to root in Linux and administrator in Windows.
          • When the Meta Service is initialized, the one and only GOD role user root is automatically created with the password nebula.

          Caution

          Modify the password for root timely for security.

          • When the --enable_authorize parameter in the nebula-graphd.conf file (the default directory is /usr/local/nebula/etc/) is set to true:

            • One cluster can only have one user with the GOD role. This user can manage all graph spaces in a cluster.
            • Manual authorization of the God role is not supported. Only the root user with the default God role can be used.
        • ADMIN

          • An ADMIN role can read and write both the Schema and the data in a specific graph space.
          • An ADMIN role of a graph space can grant DBA, USER, and GUEST roles in the graph space to other users.

            Note

            Only roles lower than ADMIN can be authorized to other users.

        • DBA

          • A DBA role can read and write both the Schema and the data in a specific graph space.
          • A DBA role of a graph space CANNOT grant roles to other users.
        • USER

          • A USER role can read and write data in a specific graph space.
          • The Schema information is read-only to the USER roles in a graph space.
        • GUEST
          • A GUEST role can only read the Schema and the data in a specific graph space.

        Note

        • NebulaGraph does not support custom roles. Users can only use the default built-in roles.
        • A user can have only one role in a graph space. For authenticated users, see User management.
        "},{"location":"7.data-security/1.authentication/3.role-list/#role_privileges_and_allowed_ngql","title":"Role privileges and allowed nGQL","text":"

        The privileges of roles and the nGQL statements that each role can use are listed as follows.

        Privilege God Admin DBA User Guest Allowed nGQL Read space Y Y Y Y Y USE, DESCRIBE SPACE Read schema Y Y Y Y Y DESCRIBE TAG, DESCRIBE EDGE, DESCRIBE TAG INDEX, DESCRIBE EDGE INDEX Write schema Y Y Y Y CREATE TAG, ALTER TAG, CREATE EDGE, ALTER EDGE, DROP TAG, DELETE TAG, DROP EDGE, CREATE TAG INDEX, CREATE EDGE INDEX, DROP TAG INDEX, DROP EDGE INDEX Write user Y CREATE USER, DROP USER, ALTER USER Write role Y Y GRANT, REVOKE Read data Y Y Y Y Y GO, SET, PIPE, MATCH, ASSIGNMENT, LOOKUP, YIELD, ORDER BY, FETCH VERTICES, Find, FETCH EDGES, FIND PATH, LIMIT, GROUP BY, RETURN Write data Y Y Y Y INSERT VERTEX, UPDATE VERTEX, INSERT EDGE, UPDATE EDGE, DELETE VERTEX, DELETE EDGES, DELETE TAG Show operations Y Y Y Y Y SHOW, CHANGE PASSWORD Job Y Y Y Y SUBMIT JOB COMPACT, SUBMIT JOB FLUSH, SUBMIT JOB STATS, STOP JOB, RECOVER JOB, BUILD TAG INDEX, BUILD EDGE INDEX,INGEST, DOWNLOAD Write space Y CREATE SPACE, DROP SPACE, CREATE SNAPSHOT, DROP SNAPSHOT, BALANCE, CONFIG

        Caution

        • The results of SHOW operations are limited to the role of a user. For example, all users can run SHOW SPACES, but the results only include the graph spaces that the users have privileges.
        • Only the GOD role can run SHOW USERS and SHOW SNAPSHOTS.
        "},{"location":"8.service-tuning/2.graph-modeling/","title":"Graph data modeling suggestions","text":"

        This topic provides general suggestions for modeling data in NebulaGraph.

        Note

        The following suggestions may not apply to some special scenarios. In these cases, find help in the NebulaGraph community.

        "},{"location":"8.service-tuning/2.graph-modeling/#model_for_performance","title":"Model for performance","text":"

        There is no perfect method to model in Nebula\u00a0Graph. Graph modeling depends on the questions that you want to know from the data. Your data drives your graph model. Graph data modeling is intuitive and convenient. Create your data model based on your business model. Test your model and gradually optimize it to fit your business. To get better performance, you can change or re-design your model multiple times.

        "},{"location":"8.service-tuning/2.graph-modeling/#design_and_evaluate_the_most_important_queries","title":"Design and evaluate the most important queries","text":"

        Usually, various types of queries are validated in test scenarios to assess the overall capabilities of the system. However, in most production scenarios, there are not many types of frequently used queries. You can optimize the data model based on key queries selected according to the Pareto (80/20) principle.

        "},{"location":"8.service-tuning/2.graph-modeling/#full-graph_scanning_avoidance","title":"Full-graph scanning avoidance","text":"

        Graph traversal can be performed after one or more vertices/edges are located through property indexes or VIDs. But for some query patterns, such as subgraph and path query patterns, the source vertex or edge of the traversal cannot be located through property indexes or VIDs. These queries find all the subgraphs that satisfy the query pattern by scanning the whole graph space which will have poor query performance. NebulaGraph does not implement indexing for the graph structures of subgraphs or paths.

        "},{"location":"8.service-tuning/2.graph-modeling/#no_predefined_bonds_between_tags_and_edge_types","title":"No predefined bonds between Tags and Edge types","text":"

        Define the bonds between Tags and Edge types in the application, not NebulaGraph. There are no statements that could get the bonds between Tags and Edge types.

        "},{"location":"8.service-tuning/2.graph-modeling/#tagsedge_types_predefine_a_set_of_properties","title":"Tags/Edge types predefine a set of properties","text":"

        While creating Tags or Edge types, you need to define a set of properties. Properties are part of the NebulaGraph Schema.

        "},{"location":"8.service-tuning/2.graph-modeling/#control_changes_in_the_business_model_and_the_data_model","title":"Control changes in the business model and the data model","text":"

        Changes here refer to changes in business models and data models (meta-information), not changes in the data itself.

        Some graph databases are designed to be Schema-free, so their data modeling, including the modeling of the graph topology and properties, can be very flexible. Properties can be re-modeled to graph topology, and vice versa. Such systems are often specifically optimized for graph topology access.

        NebulaGraph master is a strong-Schema (row storage) system, which means that the business model should not change frequently. For example, the property Schema should not change. It is similar to avoiding ALTER TABLE in MySQL.

        On the contrary, vertices and their edges can be added or deleted at low costs. Thus, the easy-to-change part of the business model should be transformed to vertices or edges, rather than properties.

        For example, in a business model, people have relatively fixed properties such as age, gender, and name. But their contact, place of visit, trade account, and login device are often changing. The former is suitable for modeling as properties and the latter as vertices or edges.

        "},{"location":"8.service-tuning/2.graph-modeling/#set_temporary_properties_through_self-loop_edges","title":"Set temporary properties through self-loop edges","text":"

        As a strong Schema system, NebulaGraph does not support List-type properties. And using ALTER TAG costs too much. If you need to add some temporary properties or List-type properties to a vertex, you can first create an edge type with the required properties, and then insert one or more edges that direct to the vertex itself. The figure is as follows.

        To retrieve temporary properties of vertices, fetch from self-loop edges. For example:

        //Create the edge type and insert the loop property.\nnebula> CREATE EDGE IF NOT EXISTS temp(tmp int);\nnebula> INSERT EDGE temp(tmp) VALUES \"player100\"->\"player100\"@1:(1);\nnebula> INSERT EDGE temp(tmp) VALUES \"player100\"->\"player100\"@2:(2);\nnebula> INSERT EDGE temp(tmp) VALUES \"player100\"->\"player100\"@3:(3);\n\n//After the data is inserted, you can query the loop property by general query statements, for example:\nnebula> GO FROM \"player100\" OVER temp YIELD properties(edge).tmp;\n+----------------------+\n| properties(EDGE).tmp |\n+----------------------+\n| 1                    |\n| 2                    |\n| 3                    |\n+----------------------+\n\n//If you want the results to be returned in the form of a List, you can use a function, for example:\nnebula> MATCH (v1:player)-[e:temp]->() return collect(e.tmp);\n+----------------+\n| collect(e.tmp) |\n+----------------+\n| [1, 2, 3]      |\n+----------------+\n
        Operations on loops are not encapsulated with any syntactic sugars and you can use them just like those on normal edges.

        "},{"location":"8.service-tuning/2.graph-modeling/#about_dangling_edges","title":"About dangling edges","text":"

        A dangling edge is an edge that only connects to a single vertex and only one part of the edge connects to the vertex.

        In NebulaGraph master, dangling edges may appear in the following two cases.

        1. Insert edges with INSERT EDGE statement before the source vertex or the destination vertex exists.

        2. Delete vertices with DELETE VERTEX statement and the WITH EDGE option is not used. At this time, the system does not delete the related outgoing and incoming edges of the vertices. There will be dangling edges by default.

        Dangling edges may appear in NebulaGraph master as the design allow it to exist. And there is no MERGE statement like openCypher has. The existence of dangling edges depends entirely on the application level. You can use GO and LOOKUP statements to find a dangling edge, but cannot use the MATCH statement to find a dangling edge.

        Examples:

        // Insert an edge that connects two vertices which do not exist in the graph. The source vertex's ID is '11'. The destination vertex's ID is'13'. \n\nnebula> CREATE EDGE IF NOT EXISTS e1 (name string, age int);\nnebula> INSERT EDGE e1 (name, age) VALUES \"11\"->\"13\":(\"n1\", 1);\n\n// Query using the `GO` statement\n\nnebula> GO FROM \"11\" over e1 YIELD properties(edge);\n+----------------------+\n| properties(EDGE)     |\n+----------------------+\n| {age: 1, name: \"n1\"} |\n+----------------------+\n\n// Query using the `LOOKUP` statement\n\nnebula> LOOKUP ON e1 YIELD EDGE AS r;\n+-------------------------------------------------------+\n| r                                                     |\n+-------------------------------------------------------+\n| [:e2 \"11\"->\"13\" @0 {age: 1, name: \"n1\"}]              |\n+-------------------------------------------------------+\n\n// Query using the `MATCH` statement\n\nnebula> MATCH ()-[e:e1]->() RETURN e;\n+---+\n| e |\n+---+\n+---+\nEmpty set (time spent 3153/3573 us)\n
        "},{"location":"8.service-tuning/2.graph-modeling/#breadth-first_traversal_over_depth-first_traversal","title":"Breadth-first traversal over depth-first traversal","text":"
        • NebulaGraph has lower performance for depth-first traversal based on the Graph topology, and better performance for breadth-first traversal and obtaining properties. For example, if model A contains properties \"name\", \"age\", and \"eye color\", it is recommended to create a tag person and add properties name, age, and eye_color to it. If you create a tag eye_color and an edge type has, and then create an edge to represent the eye color owned by the person, the traversal performance will not be high.
        • The performance of finding an edge by an edge property is close to that of finding a vertex by a vertex property. For some databases, it is recommended to re-model edge properties as those of the intermediate vertices. For example, model the pattern (src)-[edge {P1, P2}]->(dst) as (src)-[edge1]->(i_node {P1, P2})-[edge2]->(dst). With NebulaGraph master, you can use (src)-[edge {P1, P2}]->(dst) directly to decrease the depth of the traversal and increase the performance.
        "},{"location":"8.service-tuning/2.graph-modeling/#edge_directions","title":"Edge directions","text":"

        To query in the opposite direction of an edge, use the following syntax:

        (dst)<-[edge]-(src) or GO FROM dst REVERSELY.

        If you do not care about the directions or want to query against both directions, use the following syntax:

        (src)-[edge]-(dst) or GO FROM src BIDIRECT.

        Therefore, there is no need to insert the same edge redundantly in the reversed direction.

        "},{"location":"8.service-tuning/2.graph-modeling/#set_tag_properties_appropriately","title":"Set tag properties appropriately","text":"

        Put a group of properties that are on the same level into the same tag. Different groups represent different concepts.

        "},{"location":"8.service-tuning/2.graph-modeling/#use_indexes_correctly","title":"Use indexes correctly","text":"

        Using property indexes helps find VIDs through properties, but can lead to great performance reduction. Only use an index when you need to find vertices or edges through their properties.

        "},{"location":"8.service-tuning/2.graph-modeling/#design_vids_appropriately","title":"Design VIDs appropriately","text":"

        See VID.

        "},{"location":"8.service-tuning/2.graph-modeling/#long_texts","title":"Long texts","text":"

        Do not use long texts to create edge properties. Edge properties are stored twice and long texts lead to greater write amplification. For how edges properties are stored, see Storage architecture. It is recommended to store long texts in HBase or Elasticsearch and store its address in NebulaGraph.

        "},{"location":"8.service-tuning/2.graph-modeling/#dynamic_graphs_sequence_graphs_are_not_supported","title":"Dynamic graphs (sequence graphs) are not supported","text":"

        In some scenarios, graphs need to have the time information to describe how the structure of the entire graph changes over time.1

        The Rank field on Edges in NebulaGraph master can be used to store time in int64, but no field on vertices can do this because if you store the time information as property values, it will be covered by new insertion. Thus NebulaGraph does not support sequence graphs.

        "},{"location":"8.service-tuning/2.graph-modeling/#free_graph_data_modeling_tools","title":"Free graph data modeling tools","text":"

        arrows.app

        1. https://blog.twitter.com/engineering/en_us/topics/insights/2021/temporal-graph-networks\u00a0\u21a9

        "},{"location":"8.service-tuning/3.system-design/","title":"System design suggestions","text":""},{"location":"8.service-tuning/3.system-design/#qps_or_low-latency_first","title":"QPS or low-latency first","text":"
        • NebulaGraph master is good at handling small requests with high concurrency. In such scenarios, the whole graph is huge, containing maybe trillions of vertices or edges, but the subgraphs accessed by each request are not large (containing millions of vertices or edges), and the latency of a single request is low. The concurrent number of such requests, i.e., the QPS, can be huge.
        • On the other hand, in interactive analysis scenarios, the request concurrency is usually not high, but the subgraphs accessed by each request are large, with thousands of millions of vertices or edges. To lower the latency of big requests in such scenarios, you can split big requests into multiple small requests in the application, and concurrently send them to multiple graphd processes. This can decrease the memory used by each graphd process as well. Besides, you can use NebulaGraph Algorithm for such scenarios.
        "},{"location":"8.service-tuning/3.system-design/#data_transmission_and_optimization","title":"Data transmission and optimization","text":"
        • Read/write balance. NebulaGraph fits into OLTP scenarios with balanced read/write, i.e., concurrent write and read. It is not suitable for OLAP scenarios that usually need to write once and read many times.
        • Select different write methods. For large batches of data writing, use SST files. For small batches of data writing, use INSERT.
        • Run COMPACTION and BALANCE jobs to optimize data format and storage distribution at the right time.
        • NebulaGraph master does not support transactions and isolation in the relational database and is closer to NoSQL.
        "},{"location":"8.service-tuning/3.system-design/#query_preheating_and_data_preheating","title":"Query preheating and data preheating","text":"

        Preheat on the application side:

        • The Grapd process does not support pre-compiling queries and generating corresponding query plans, nor can it cache previous query results.
        • The Storagd process does not support preheating data. Only the LSM-Tree and BloomFilter of RocksDB are loaded into memory at startup.
        • Once accessed, vertices and edges are cached respectively in two types of LRU cache of the Storage Service.
        "},{"location":"8.service-tuning/4.plan/","title":"Execution plan","text":"

        NebulaGraph master applies rule-based execution plans. Users cannot change execution plans, pre-compile queries (and corresponding plan cache), or accelerate queries by specifying indexes.

        To view the execution plan and executive summary, see EXPLAIN and PROFILE.

        "},{"location":"8.service-tuning/compaction/","title":"Compaction","text":"

        This topic gives some information about compaction.

        In NebulaGraph, Compaction is the most important background process and has an important effect on performance.

        Compaction reads the data that is written on the hard disk, then re-organizes the data structure and the indexes, and then writes back to the hard disk. The read performance can increase by times after compaction. Thus, to get high read performance, trigger compaction (full compaction) manually when writing a large amount of data into Nebula\u00a0Graph.

        Note

        Note that compaction leads to long-time hard disk IO. We suggest that users do compaction during off-peak hours (for example, early morning).

        NebulaGraph has two types of compaction: automatic compaction and full compaction.

        "},{"location":"8.service-tuning/compaction/#automatic_compaction","title":"Automatic compaction","text":"

        Automatic compaction is automatically triggered when the system reads data, writes data, or the system restarts. The read performance can increase in a short time. Automatic compaction is enabled by default. But once triggered during peak hours, it can cause unexpected IO occupancy that has an unwanted effect on the performance.

        "},{"location":"8.service-tuning/compaction/#full_compaction","title":"Full compaction","text":"

        Full compaction enables large-scale background operations for a graph space such as merging files, deleting the data expired by TTL. This operation needs to be initiated manually. Use the following statements to enable full compaction:

        Note

        We recommend you to do the full compaction during off-peak hours because full compaction has a lot of IO operations.

        nebula> USE <your_graph_space>;\nnebula> SUBMIT JOB COMPACT;\n

        The preceding statement returns the job ID. To show the compaction progress, use the following statement:

        nebula> SHOW JOB <job_id>;\n
        "},{"location":"8.service-tuning/compaction/#operation_suggestions","title":"Operation suggestions","text":"

        These are some operation suggestions to keep Nebula\u00a0Graph performing well.

        • After data import is done, run SUBMIT JOB COMPACT.
        • Run SUBMIT JOB COMPACT periodically during off-peak hours (e.g. early morning).
        • To control the write traffic limitation for compactions, set the following parameter in the nebula-storaged.conf configuration file.

          Note

          This parameter limits the rate of all writes including normal writes and compaction writes.

          # Limit the write rate to 20MB/s.\n--rocksdb_rate_limit=20 (in MB/s)\n
        "},{"location":"8.service-tuning/compaction/#faq","title":"FAQ","text":""},{"location":"8.service-tuning/compaction/#where_are_the_logs_related_to_compaction_stored","title":"\"Where are the logs related to Compaction stored?\"","text":"

        By default, the logs are stored under the LOG file in the /usr/local/nebula/data/storage/nebula/{1}/data/ directory, or similar to LOG.old.1625797988509303. You can find the following content.

        ** Compaction Stats [default] **\nLevel    Files   Size     Score Read(GB)  Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop\n----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n  L0      2/0    2.46 KB   0.5      0.0     0.0      0.0       0.0      0.0       0.0   1.0      0.0      0.0      0.53              0.51         2    0.264       0      0\n Sum      2/0    2.46 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   1.0      0.0      0.0      0.53              0.51         2    0.264       0      0\n Int      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0      0.00              0.00         0    0.000       0      0\n

        If the number of L0 files is large, the read performance will be greatly affected and compaction can be triggered.

        "},{"location":"8.service-tuning/compaction/#can_i_do_full_compactions_for_multiple_graph_spaces_at_the_same_time","title":"\"Can I do full compactions for multiple graph spaces at the same time?\"","text":"

        Yes, you can. But the IO is much larger at this time and the efficiency may be affected.

        "},{"location":"8.service-tuning/compaction/#how_much_time_does_it_take_for_full_compactions","title":"\"How much time does it take for full compactions?\"","text":"

        When rocksdb_rate_limit is set to 20, you can estimate the full compaction time by dividing the hard disk usage by the rocksdb_rate_limit. If you do not set the rocksdb_rate_limit value, the empirical value is around 50 MB/s.

        "},{"location":"8.service-tuning/compaction/#can_i_modify_--rocksdb_rate_limit_dynamically","title":"\"Can I modify --rocksdb_rate_limit dynamically?\"","text":"

        No, you cannot.

        "},{"location":"8.service-tuning/compaction/#can_i_stop_a_full_compaction_after_it_starts","title":"\"Can I stop a full compaction after it starts?\"","text":"

        No, you cannot. When you start a full compaction, you have to wait till it is done. This is the limitation of RocksDB.

        "},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/","title":"Enable AutoFDO for NebulaGraph","text":"

        The AutoFDO can analyze the performance of an optimized program and use the program's performance information to guide the compiler to re-optimize the program. This document will help you to enable the AutoFDO for NebulaGraph.

        More information about the AutoFDO, please refer AutoFDO Wiki.

        "},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#resource_preparations","title":"Resource Preparations","text":""},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#install_dependencies","title":"Install Dependencies","text":"
        • Install perf

          sudo apt-get update\nsudo apt-get install -y linux-tools-common \\\nlinux-tools-generic \\\nlinux-tools-`uname -r`\n
        • Install autofdo tool

          sudo apt-get update\nsudo apt-get install -y autofdo\n

          Or you can compile the autofdo tool from source.

        "},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#nebulagraph_binary_with_debug_version","title":"NebulaGraph Binary with Debug Version","text":"

        For how to build NebulaGraph from source, please refer to the official document: Install NebulaGraph by compiling the source code. In the configure step, replace CMAKE_BUILD_TYPE=Release with CMAKE_BUILD_TYPE=RelWithDebInfo as below:

        $ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/nebula -DENABLE_TESTING=OFF -DCMAKE_BUILD_TYPE=RelWithDebInfo ..\n
        "},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#prepare_test_data","title":"Prepare Test Data","text":"

        In our test environment, we use NebulaGraph Bench to prepare the test data and collect the profile data by running the FindShortestPath, Go1Step, Go2Step, Go3Step, InsertPersonScenario 5 scenarios.

        Note

        You can use your TopN queries in your production environment to collect the profile data, the performance can gain more in your environment.

        "},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#prepare_profile_data","title":"Prepare Profile Data","text":""},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#collect_perf_data_for_autofdo_tool","title":"Collect Perf Data For AutoFdo Tool","text":"
        1. After the test data preparation work done. Collect the perf data for different scenarios. Get the pid of storaged, graphd, metad.

          $ nebula.service status all\n[INFO] nebula-metad: Running as 305422, Listening on 9559\n[INFO] nebula-graphd: Running as 305516, Listening on 9669\n[INFO] nebula-storaged: Running as 305707, Listening on 9779\n
        2. Start the perf record for nebula-graphd and nebula-storaged.

          perf record -p 305516,305707 -b -e br_inst_retired.near_taken:pp -o ~/FindShortestPath.data\n

          Note

          Because the nebula-metad service contribution percent is small compared with nebula-graphd and nebula-storaged services. To reduce effort, we didn't collect the perf data for nebula-metad service.

        3. Start the benchmark test for FindShortestPath scenario.

          cd NebulaGraph-Bench \npython3 run.py stress run -s benchmark -scenario find_path.FindShortestPath -a localhost:9669 --args='-u 100 -i 100000'\n
        4. After the benchmark finished, end the perf record by Ctrl + c.

        5. Repeat above steps to collect corresponding profile data for the rest Go1Step, Go2Step, Go3Step and InsertPersonScenario scenarios.

        "},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#create_gcov_file","title":"Create Gcov File","text":"
        create_gcov --binary=$NEBULA_HOME/bin/nebula-storaged \\\n--profile=~/FindShortestPath.data \\\n--gcov=~/FindShortestPath-storaged.gcov \\\n-gcov_version=1\n\ncreate_gcov --binary=$NEBULA_HOME/bin/nebula-graphd \\\n--profile=~/FindShortestPath.data \\\n--gcov=~/FindShortestPath-graphd.gcov \\\n-gcov_version=1\n

        Repeat for Go1Step, Go2Step, Go3Step and InsertPersonScenario scenarios.

        "},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#merge_the_profile_data","title":"Merge the Profile Data","text":"
        profile_merger ~/FindShortestPath-graphd.gcov \\\n~/FindShortestPath-storaged.gcov \\\n~/go1step-storaged.gcov \\\n~/go1step-graphd.gcov \\\n~/go2step-storaged.gcov \\\n~/go2step-graphd.gcov \\\n~/go3step-storaged.gcov \\\n~/go3step-master-graphd.gcov \\\n~/InsertPersonScenario-storaged.gcov \\\n~/InsertPersonScenario-graphd.gcov\n

        You will get a merged profile which is named fbdata.afdo after that.

        "},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#recompile_graphnebula_binary_with_the_merged_profile","title":"Recompile GraphNebula Binary with the Merged Profile","text":"

        Recompile the GraphNebula Binary by passing the profile with compile option -fauto-profile.

        diff --git a/cmake/nebula/GeneralCompilerConfig.cmake b/cmake/nebula/GeneralCompilerConfig.cmake\n@@ -20,6 +20,8 @@ add_compile_options(-Wshadow)\n add_compile_options(-Wnon-virtual-dtor)\n add_compile_options(-Woverloaded-virtual)\n add_compile_options(-Wignored-qualifiers)\n+add_compile_options(-fauto-profile=~/fbdata.afdo)\n

        Note

        When you use multiple fbdata.afdo to compile multiple times, please remember to make clean before re-compile, baucase only change the fbdata.afdo will not trigger re-compile.

        "},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#performance_test_result","title":"Performance Test Result","text":""},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#hardware_software_environment","title":"Hardware & Software Environment","text":"Key Value CPU Processor# 2 Sockets 2 NUMA 2 CPU Type Intel(R) Xeon(R) Platinum 8380 CPU @ 2.30GHz Cores per Processor 40C80T Cache L1 data: 48KB L1 i: 32KB L2: 1.25MB per physical core L3: shared 60MB per processor Memory Micron DDR4 3200MT/s 16GB16Micron DDR4 3200MT/s 16GB16 SSD Disk INTEL SSDPE2KE016T8 SSD R/W Sequential 3200 MB/s (read) / 2100 MB/s(write) Nebula Version master with commit id 51d84a4ed7d2a032a337e3b996c927e3bc5d1415 Kernel 4.18.0-408.el8.x86_64"},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#test_results","title":"Test Results","text":"Scenario Average Latency(LiB) Default Binary Optimized Binary with AutoFDO P95 Latency (LiB) Default Binary Optimized Binary with AutoFDO FindShortestPath 1 8072.52 7260.10 1 22102.00 19108.00 2 8034.32 7218.59 2 22060.85 19006.00 3 8079.27 7257.24 3 22147.00 19053.00 4 8087.66 7221.39 4 22143.00 19050.00 5 8044.77 7239.85 5 22181.00 19055.00 STDDEVP 20.57 17.34 STDDEVP 41.41 32.36 Mean 8063.71 7239.43 Mean 22126.77 19054.40 STDDEVP/Mean 0.26% 0.24% STDDEVP/Mean 0.19% 0.17% Opt/Default 100.00% 10.22% Opt/Default 100.00% 13.89% Go1Step 1 422.53 418.37 1 838.00 850.00 2 432.37 402.44 2 866.00 815.00 3 437.45 407.98 3 874.00 836.00 4 429.16 408.38 4 858.00 838.00 5 446.38 411.32 5 901.00 837.00 STDDEVP 8.02 5.20 STDDEVP 20.63 11.30 Mean 433.58 409.70 Mean 867.40 835.20 STDDEVP/Mean 1.85% 1.27% STDDEVP/Mean 2.38% 1.35% Opt/Default 100.00% 5.51% Opt/Default 100.00% 3.71% Go2Step 1 2989.93 2824.29 1 10202.00 9656.95 2 2957.22 2834.55 2 10129.00 9632.40 3 2962.74 2818.62 3 10168.40 9624.70 4 2992.39 2817.27 4 10285.10 9647.50 5 2934.85 2834.91 5 10025.00 9699.65 STDDEVP 21.53 7.57 STDDEVP 85.62 26.25 Mean 2967.43 2825.93 Mean 10161.90 9652.24 STDDEVP/Mean 0.73% 0.27% STDDEVP/Mean 0.84% 0.27% Opt/Default 100.00% 4.77% Opt/Default 100.00% 5.02% Go3Step 1 93551.97 89406.96 1 371359.55 345433.50 2 92418.43 89977.25 2 368868.00 352375.20 3 92587.67 90339.25 3 365390.15 356198.55 4 93371.64 92458.95 4 373578.15 365177.75 5 94046.05 89943.44 5 373392.25 352576.00 STDDEVP 609.07 1059.54 STDDEVP 3077.38 6437.52 Mean 93195.15 90425.17 Mean 370517.62 354352.20 STDDEVP/Mean 0.65% 1.17% STDDEVP/Mean 0.83% 1.82% Opt/Default 100.00% 2.97% Opt/Default 100.00% 4.36% InsertPerson 1 2022.86 1937.36 1 2689.00 2633.45 2 1966.05 1935.41 2 2620.45 2555.00 3 1985.25 1953.58 3 2546.00 2593.00 4 2026.73 1887.28 4 2564.00 2394.00 5 2007.55 1964.41 5 2676.00 2581.00 STDDEVP 23.02 26.42 STDDEVP 57.45 82.62 Mean 2001.69 1935.61 Mean 2619.09 2551.29 STDDEVP/Mean 1.15% 1.37% STDDEVP/Mean 2.19% 3.24% Opt/Default 100.00% 3.30% Opt/Default 100.00% 2.59%"},{"location":"8.service-tuning/load-balance/","title":"Storage load balance","text":"

        You can use the SUBMIT JOB BALANCE statement to balance the distribution of partitions and Raft leaders, or clear some Storage servers for easy maintenance. For details, see SUBMIT JOB BALANCE.

        Danger

        The BALANCE commands migrate data and balance the distribution of partitions by creating and executing a set of subtasks. DO NOT stop any machine in the cluster or change its IP address until all the subtasks finish. Otherwise, the follow-up subtasks fail.

        "},{"location":"8.service-tuning/load-balance/#balance_leader_distribution","title":"Balance leader distribution","text":"

        To balance the raft leaders, run SUBMIT JOB BALANCE LEADER. It will start a job to balance the distribution of all the storage leaders in all graph spaces.

        "},{"location":"8.service-tuning/load-balance/#example","title":"Example","text":"
        nebula> SUBMIT JOB BALANCE LEADER;\n

        Run SHOW HOSTS to check the balance result.

        nebula> SHOW HOSTS;\n+------------------+------+----------+--------------+-----------------------------------+------------------------+----------------------+\n| Host             | Port | Status   | Leader count | Leader distribution               | Partition distribution | Version              |\n+------------------+------+----------+--------------+-----------------------------------+------------------------+----------------------+\n| \"192.168.10.101\" | 9779 | \"ONLINE\" | 8            | \"basketballplayer:3\"              | \"basketballplayer:8\"   | \"master\" |\n| \"192.168.10.102\" | 9779 | \"ONLINE\" | 3            | \"basketballplayer:3\"              | \"basketballplayer:8\"   | \"master\" |\n| \"192.168.10.103\" | 9779 | \"ONLINE\" | 0            | \"basketballplayer:2\"              | \"basketballplayer:7\"   | \"master\" |\n| \"192.168.10.104\" | 9779 | \"ONLINE\" | 0            | \"basketballplayer:2\"              | \"basketballplayer:7\"   | \"master\" |\n| \"192.168.10.105\" | 9779 | \"ONLINE\" | 0            | \"basketballplayer:2\"              | \"basketballplayer:7\"   | \"master\" |\n+------------------+------+----------+--------------+-----------------------------------+------------------------+----------------------+\n

        Caution

        During leader partition replica switching in NebulaGraph, the leader replicas will be temporarily prohibited from being written to until the switch is completed. If there are a large number of write requests during the switching period, it will result in a request error (Storage Error E_RPC_FAILURE). See FAQ for error handling methods.

        You can set the value of raft_heartbeat_interval_secs in the Storage configuration file to control the timeout period for leader replica switching. For more information on the configuration file, see Storage configuration file.

        "},{"location":"8.service-tuning/practice/","title":"Best practices","text":"

        NebulaGraph is used in a variety of industries. This topic presents a few best practices for using NebulaGraph. For more best practices, see Blog.

        "},{"location":"8.service-tuning/practice/#scenarios","title":"Scenarios","text":"
        • Use cases
        • User review
        • Performance
        "},{"location":"8.service-tuning/practice/#kernel","title":"Kernel","text":"
        • What is a graph database and what are its use cases - Definition, examples & trends
        • NebulaGraph Source Code Explained: Variable-Length Pattern Matching
        • Adding a Test Case for NebulaGraph
        • BDD-Based Integration Testing Framework for NebulaGraph: Part \u2160
        • BDD-Based Integration Testing Framework for NebulaGraph: Part II
        • Understanding Subgraph in NebulaGraph
        • Full-Text Indexing in NebulaGraph
        "},{"location":"8.service-tuning/practice/#ecosystem_tool","title":"Ecosystem tool","text":"
        • Validating Import Performance of NebulaGraph Importer
        • Ecosystem Tools: NebulaGraph Dashboard for Monitoring
        • Visualizing Graph Data with NebulaGraph Explorer
        "},{"location":"8.service-tuning/super-node/","title":"Processing super vertices","text":""},{"location":"8.service-tuning/super-node/#principle_introduction","title":"Principle introduction","text":"

        In graph theory, a super vertex, also known as a dense vertex, is a vertex with an extremely high number of adjacent edges. The edges can be outgoing or incoming.

        Super vertices are very common because of the power-law distribution. For example, popular leaders in social networks (Internet celebrities), top stocks in the stock market, Big Four in the banking system, hubs in transportation networks, websites with high clicking rates on the Internet, and best sellers in E-commerce.

        In NebulaGraph master, a vertex and its properties form a key-value pair, with its VID and other meta information as the key. Its Out-Edge Key-Value and In-Edge Key-Value are stored in the same partition in the form of LSM-trees in hard disks and caches.

        Therefore, directed traversals from this vertex and directed traversals ending at this vertex both involve either a large number of sequential IO scans (ideally, after Compaction or a large number of random IO (frequent writes to the vertex and its ingoing and outgoing edges).

        As a rule of thumb, a vertex is considered dense when the number of its edges exceeds 10,000. Some special cases require additional consideration.

        Note

        In NebulaGraph master, there is not any data structure to store the out/in degree for each vertex. Therefore, there is no direct method to know whether it is a super vertex or not. You can try to use Spark to count the degrees periodically.

        "},{"location":"8.service-tuning/super-node/#indexes_for_duplicate_properties","title":"Indexes for duplicate properties","text":"

        In a property graph, there is another class of cases similar to super vertices: a property has a very high duplication rate, i.e., many vertices with the same tag but different VIDs have identical property and property values.

        Property indexes in NebulaGraph master are designed to reuse the functionality of RocksDB in the Storage Service, in which case indexes are modeled as keys with the same prefix. If the lookup of a property fails to hit the cache, it is processed as a random seek and a sequential prefix scan on the hard disk to find the corresponding VID. After that, the graph is usually traversed from this vertex, so that another random read and sequential scan for the corresponding key-value of this vertex will be triggered. The higher the duplication rate, the larger the scan range.

        For more information about property indexes, see How indexing works in NebulaGraph.

        Usually, special design and processing are required when the number of duplicate property values exceeds 10,000.

        "},{"location":"8.service-tuning/super-node/#suggested_solutions","title":"Suggested solutions","text":""},{"location":"8.service-tuning/super-node/#solutions_at_the_database_end","title":"Solutions at the database end","text":"
        1. Truncation: Only return a certain number (a threshold) of edges, and do not return other edges exceeding this threshold.
        2. Compact: Reorganize the order of data in RocksDB to reduce random reads and increase sequential reads.
        "},{"location":"8.service-tuning/super-node/#solutions_at_the_application_end","title":"Solutions at the application end","text":"

        Break up some of the super vertices according to their business significance:

        • Delete multiple edges and merge them into one.

          For example, in the transfer scenario (Account_A)-[TRANSFER]->(Account_B), each transfer record is modeled as an edge between account A and account B, then there may be tens of thousands of transfer records between (Account_A) and (Account_B).

          In such scenarios, merge obsolete transfer details on a daily, weekly, or monthly basis. That is, batch-delete old edges and replace them with a small number of edges representing monthly total and times. And keep the transfer details of the latest month.

        • Split an edge into multiple edges of different types.

          For example, in the (Airport)<-[DEPART]-(Flight) scenario, the departure of each flight is modeled as an edge between a flight and an airport. Departures from a big airport might be enormous.

          According to different airlines, divide the DEPART edge type into finer edge types, such as DEPART_CEAIR, DEPART_CSAIR, etc. Specify the departing airline in queries (graph traversal).

        • Split vertices.

          For example, in the loan network (person)-[BORROW]->(bank), large bank A will have a very large number of loans and borrowers.

          In such scenarios, you can split the large vertex A into connected sub-vertices A1, A2, and A3.

          (Person1)-[BORROW]->(BankA1), (Person2)-[BORROW]->(BankA2), (Person2)-[BORROW]->(BankA3);\n(BankA1)-[BELONGS_TO]->(BankA), (BankA2)-[BELONGS_TO]->(BankA), (BankA3)-[BELONGS_TO]->(BankA).\n

          A1, A2, and A3 can either be three real branches of bank A, such as Beijing branch, Shanghai branch, and Zhejiang branch, or three virtual branches set up according to certain rules, such as A1: 1-1000, A2: 1001-10000 and A3: 10000+ according to the number of loans. In this way, any operation on A is converted into three separate operations on A1, A2, and A3.

        "},{"location":"backup-and-restore/3.manage-snapshot/","title":"Backup and restore data with snapshots","text":"

        NebulaGraph supports using snapshots to back up and restore data. When data loss or misoperation occurs, the data will be restored through the snapshot.

        "},{"location":"backup-and-restore/3.manage-snapshot/#prerequisites","title":"Prerequisites","text":"

        NebulaGraph authentication is disabled by default. In this case, all users can use the snapshot feature.

        If authentication is enabled, only the GOD role user can use the snapshot feature. For more information about roles, see Roles and privileges.

        "},{"location":"backup-and-restore/3.manage-snapshot/#precautions","title":"Precautions","text":"
        • To prevent data loss, create a snapshot as soon as the system structure changes, for example, after operations such as ADD HOST, DROP HOST, CREATE SPACE, DROP SPACE, and BALANCE are performed.
        • NebulaGraph cannot automatically delete the invalid files created by a failed snapshot task. You have to manually delete them by using DROP SNAPSHOT.
        • Customizing the storage path for snapshots is not supported for now.
        "},{"location":"backup-and-restore/3.manage-snapshot/#create_snapshots","title":"Create snapshots","text":"

        Run CREATE SNAPSHOT to create a snapshot for all the graph spaces based on the current time for NebulaGraph. Creating a snapshot for a specific graph space is not supported yet.

        Note

        If the creation fails, refer to the later section to delete the corrupted snapshot and then recreate the snapshot.

        nebula> CREATE SNAPSHOT;\n
        "},{"location":"backup-and-restore/3.manage-snapshot/#view_snapshots","title":"View snapshots","text":"

        To view all existing snapshots, run SHOW SNAPSHOTS.

        nebula> SHOW SNAPSHOTS;\n+--------------------------------+---------+------------------+\n| Name                           | Status  | Hosts            |\n+--------------------------------+---------+------------------+\n| \"SNAPSHOT_2021_03_09_08_43_12\" | \"VALID\" | \"127.0.0.1:9779\" |\n| \"SNAPSHOT_2021_03_09_09_10_52\" | \"VALID\" | \"127.0.0.1:9779\" |\n+--------------------------------+---------+------------------+\n

        The parameters in the return information are described as follows.

        Parameter Description Name The name of the snapshot directory. The prefix SNAPSHOT indicates that the file is a snapshot file, and the suffix indicates the time the snapshot was created (UTC). Status The status of the snapshot. VALID indicates that the creation succeeded, while INVALID indicates that it failed. Hosts The IPs (or hostnames) and ports of all Storage servers at the time the snapshot was created."},{"location":"backup-and-restore/3.manage-snapshot/#snapshot_path","title":"Snapshot path","text":"

        Snapshots are stored in the path specified by the data_path parameter in the Meta and Storage configuration files. When a snapshot is created, the checkpoints directory is checked in the datastore path of the leader Meta service and all Storage services for the existence, and if it is not there, it is automatically created. The newly created snapshot is stored as a subdirectory within the checkpoints directory. For example, SNAPSHOT_2021_03_09_08_43_12. The suffix 2021_03_09_08_43_12 is generated automatically based on the creation time (UTC).

        To fast locate the path where the snapshots are stored, you can use the Linux command find in the datastore path. For example:

        $ cd /usr/local/nebula-graph-ent-master/data\n$ find |grep 'SNAPSHOT_2021_03_09_08_43_12'\n./data/meta2/nebula/0/checkpoints/SNAPSHOT_2021_03_09_08_43_12\n./data/meta2/nebula/0/checkpoints/SNAPSHOT_2021_03_09_08_43_12/data\n./data/meta2/nebula/0/checkpoints/SNAPSHOT_2021_03_09_08_43_12/data/000081.sst\n...\n
        "},{"location":"backup-and-restore/3.manage-snapshot/#delete_snapshots","title":"Delete snapshots","text":"

        To delete a snapshot with the given name, run DROP SNAPSHOT.

        DROP SNAPSHOT <snapshot_name>;\n

        Example:

        nebula> DROP SNAPSHOT SNAPSHOT_2021_03_09_08_43_12;\nnebula> SHOW SNAPSHOTS;\n+--------------------------------+---------+------------------+\n| Name                           | Status  | Hosts            |\n+--------------------------------+---------+------------------+\n| \"SNAPSHOT_2021_03_09_09_10_52\" | \"VALID\" | \"127.0.0.1:9779\" |\n+--------------------------------+---------+------------------+\n

        Note

        Deleting the only snapshot within the checkpoints directory also deletes the checkpoints directory.

        "},{"location":"backup-and-restore/3.manage-snapshot/#restore_data_with_snapshots","title":"Restore data with snapshots","text":"

        Warning

        When you restore data with snapshots, make sure that the graph spaces backed up in the snapshot have not been dropped. Otherwise, the data of the graph spaces cannot be restored.

        Currently, there is no command to restore data with snapshots. You need to manually copy the snapshot file to the corresponding folder, or you can make it by using a shell script. The logic implements as follows:

        1. After the snapshot is created, the checkpoints directory is generated in the installation directory of the leader Meta service and all Storage services, and saves the created snapshot. Taking this topic as an example, when there are two graph spaces, the snapshots created are saved in /usr/local/nebula/data/meta/nebula/0/checkpoints, /usr/local/nebula/data/storage/ nebula/3/checkpoints and /usr/local/nebula/data/storage/nebula/4/checkpoints.

          $ ls /usr/local/nebula/data/meta/nebula/0/checkpoints/\nSNAPSHOT_2021_03_09_09_10_52\n$ ls /usr/local/nebula/data/storage/nebula/3/checkpoints/\nSNAPSHOT_2021_03_09_09_10_52\n$ ls /usr/local/nebula/data/storage/nebula/4/checkpoints/\nSNAPSHOT_2021_03_09_09_10_52\n
        2. To restore the lost data through snapshots, you can take a snapshot at an appropriate time, copy the folders data and wal in the corresponding snapshot directory to its parent directory (at the same level with checkpoints) to overwrite the previous data and wal, and then restart the cluster.

          Warning

          The data and wal directories of all Meta services should be overwritten at the same time. Otherwise, the new leader Meta service will use the latest Meta data after a cluster is restarted.

        "},{"location":"backup-and-restore/nebula-br/1.what-is-br/","title":"What is Backup & Restore","text":"

        Backup & Restore (BR for short) is a Command-Line Interface (CLI) tool to back up data of graph spaces of NebulaGraph and to restore data from the backup files.

        "},{"location":"backup-and-restore/nebula-br/1.what-is-br/#features","title":"Features","text":"

        The BR has the following features. It supports:

        • Backing up and restoring data in a one-click operation.
        • Restoring data in the following backup file types:
          • Local Disk (SSD or HDD). It is recommend to use local disk in test environment only.
          • Amazon S3 compatible interface, such as Alibaba Cloud OSS, MinIO,Ceph RGW, etc.
        • Backing up and restoring the entire NebulaGraph cluster.
        • Backing up data of specified graph spaces (experimental).
        "},{"location":"backup-and-restore/nebula-br/1.what-is-br/#limitations","title":"Limitations","text":"
        • Supports NebulaGraph v3.x only.
        • Supports full backup, but not incremental backup.
        • Currently, NebulaGraph Listener and full-text indexes do not support backup.
        • If you back up data to the local disk, the backup files will be saved in the local path of each server. You can also mount the NFS on your host to restore the backup data to a different host.
        • Restoration requires that the number of the storage servers in the original cluster is the same as that of the storage servers in the target cluster and storage server IPs must be the same. Restoring the specified space will clear all the remaining spaces in the cluster.
        • During the backup process, both DDL and DML statements in any specified graph spaces are blocked. We recommend that you do the operation within the low peak period of the business, for example, from 2:00 AM to 5:00 AM.
        • During the restoration process, there is a time when NebulaGraph stops running.
        • Using BR in a container-based NebulaGraph cluster is not supported.
        "},{"location":"backup-and-restore/nebula-br/1.what-is-br/#how_to_use_br","title":"How to use BR","text":"

        To use the BR, follow these steps:

        1. Install BR.
        2. Use BR to back up data.
        3. Use BR to restore data from backup files.
        "},{"location":"backup-and-restore/nebula-br/2.compile-br/","title":"Install BR","text":"

        This topic introduces the installation of BR in bare-metal deployment scenarios.

        "},{"location":"backup-and-restore/nebula-br/2.compile-br/#notes","title":"Notes","text":"

        To use the BR (Community Edition) tool, you need to install the NebulaGraph Agent service, which is taken as a daemon for each machine in the cluster that starts and stops the NebulaGraph service, and uploads and downloads backup files. The BR (Community Edition) tool and the Agent plug-in are installed as described below.

        "},{"location":"backup-and-restore/nebula-br/2.compile-br/#version_compatibility","title":"Version compatibility","text":"NebulaGraph BR Agent 3.5.x ~ 3.6.0 3.6.0 3.6.x ~ 3.7.0 3.3.0 ~ 3.4.x 3.3.0 0.2.0 ~ 3.4.0 3.0.x ~ 3.2.x 0.6.1 0.1.0 ~ 0.2.0"},{"location":"backup-and-restore/nebula-br/2.compile-br/#install_br_with_a_binary_file","title":"Install BR with a binary file","text":"
        1. Install BR.

          wget https://github.com/vesoft-inc/nebula-br/releases/download/v3.6.0/br-3.6.0-linux-amd64\n
        2. Change the binary file name to br.

          sudo mv br-3.6.0-linux-amd64 br\n
        3. Grand execute permission to BR.

          sudo chmod +x br\n
        4. Run ./br version to check BR version.

          [nebula-br]$ ./br version\nNebula Backup And Restore Utility Tool,V-3.6.0\n
        "},{"location":"backup-and-restore/nebula-br/2.compile-br/#install_br_with_the_source_code","title":"Install BR with the source code","text":"

        Before compiling the BR, do a check of these:

        • Go 1.14.x or a later version is installed.
        • make is installed.

        To compile the BR, follow these steps:

        1. Clone the nebula-br repository to your machine.

          git clone https://github.com/vesoft-inc/nebula-br.git\n
        2. Change to the br directory.

          cd nebula-br\n
        3. Compile the BR.

          make\n

        Users can enter bin/br version on the command line. If the following results are returned, the BR is compiled successfully.

        [nebula-br]$ bin/br version\nNebulaGraph Backup And Restore Utility Tool,V-3.6.0\n
        "},{"location":"backup-and-restore/nebula-br/2.compile-br/#install_agent","title":"Install Agent","text":"

        NebulaGraph Agent is installed as a binary file in each machine and serves the BR tool with the RPC protocol.

        In each machine, follow these steps:

        1. Install Agent.

          wget https://github.com/vesoft-inc/nebula-agent/releases/download/v3.7.0/agent-3.7.0-linux-amd64\n
        2. Rename the Agent file to agent.

          sudo mv agent-3.7.0-linux-amd64 agent\n
        3. Add execute permission to Agent.

          sudo chmod +x agent\n
        4. Start Agent.

          Note

          Before starting Agent, make sure that the Meta service has been started and Agent has read and write access to the corresponding NebulaGraph cluster directory and backup directory.

          sudo nohup ./agent --agent=\"<agent_node_ip>:8888\" --meta=\"<metad_node_ip>:9559\" --ratelimit=<file_size_bt> > nebula_agent.log 2>&1 &\n
          • --agent: The IP address and port number of Agent.
          • --meta: The IP address and access port of any Meta service in the cluster.
          • --ratelimit: (Optional) Limits the speed of file uploads and downloads to prevent bandwidth from being filled up and making other services unavailable. Unit: Bytes.

          For example:

          sudo nohup ./agent --agent=\"192.168.8.129:8888\" --meta=\"192.168.8.129:9559\" --ratelimit=1048576 > nebula_agent.log 2>&1 &\n

          Caution

          The IP address format for --agentshould be the same as that of Meta and Storage services set in the configuration files. That is, use the real IP addresses or use 127.0.0.1. Otherwise Agent does not run.

        5. Log into NebulaGraph and then run the following command to view the status of Agent.

          nebula> SHOW HOSTS AGENT;\n+-----------------+------+----------+---------+--------------+---------+\n| Host            | Port | Status   | Role    | Git Info Sha | Version |\n+-----------------+------+----------+---------+--------------+---------+\n| \"192.168.8.129\" | 8888 | \"ONLINE\" | \"AGENT\" | \"96646b8\"    |         |\n+-----------------+------+----------+---------+--------------+---------+  \n
        "},{"location":"backup-and-restore/nebula-br/2.compile-br/#faq","title":"FAQ","text":""},{"location":"backup-and-restore/nebula-br/2.compile-br/#the_error_e_list_cluster_no_agent_failure","title":"The error `E_LIST_CLUSTER_NO_AGENT_FAILURE","text":"

        If you encounter E_LIST_CLUSTER_NO_AGENT_FAILURE error, it may be due to the Agent service is not started or the Agent service is not registered to Meta service. First, execute SHOW HOSTS AGENT to check the status of the Agent service on all nodes in the cluster, when the status shows OFFLINE, it means the registration of Agent failed, then check whether the value of the --meta option in the command to start the Agent service is correct.

        "},{"location":"backup-and-restore/nebula-br/3.br-backup-data/","title":"Use BR to back up data","text":"

        After the BR is installed, you can back up data of the entire graph space. This topic introduces how to use the BR to back up data.

        "},{"location":"backup-and-restore/nebula-br/3.br-backup-data/#prerequisites","title":"Prerequisites","text":"

        To back up data with the BR, do a check of these:

        • Install BR and Agent and run Agent on each host in the cluster.
        • The NebulaGraph services are running.
        • If you store the backup files locally, create a directory with the same absolute path on the meta servers, the storage servers, and the BR machine for the backup files and get the absolute path. Make sure the account has write privileges for this directory.

          Warning

          In the production environment, we recommend that you mount Network File System (NFS) storage to the meta servers, the storage servers, and the BR machine for local backup, or use Amazon S3 or Alibaba Cloud OSS for remote backup. When you restore the data from local files, you must manually move these backup files to a specified directory, which causes redundant data and troubles. For more information, see Restore data from backup files.

        "},{"location":"backup-and-restore/nebula-br/3.br-backup-data/#procedure","title":"Procedure","text":"

        In the BR installation directory (the default path of the compiled BR is ./bin/br), run the following command to perform a full backup for the entire cluster.

        Note

        Make sure that the local path where the backup file is stored exists.

        $ ./br backup full --meta <ip_address> --storage <storage_path>\n

        For example:

        • Run the following command to perform a full backup for the entire cluster whose meta service address is 192.168.8.129:9559, and save the backup file to /home/nebula/backup/.

          Caution

          If there are multiple metad addresses, you can use any one of them.

          Caution

          If you back up data to a local disk, only the data of the leader metad is backed up by default. So if there are multiple metad processes, you need to manually copy the directory of the leader metad (path <storage_path>/meta) and overwrite the corresponding directory of other follower meatd processes.

          $ ./br backup full --meta \"192.168.8.129:9559\" --storage \"local:///home/nebula/backup/\"\n
        • Run the following command to perform a full backup for the entire cluster whose meta service address is 192.168.8.129:9559, and save the backup file to backup in the br-test bucket of the object storage service compatible with S3 protocol.

          $ ./br backup full --meta \"192.168.8.129:9559\" --s3.endpoint \"http://192.168.8.129:9000\" --storage=\"s3://br-test/backup/\" --s3.access_key=minioadmin --s3.secret_key=minioadmin --s3.region=default\n

        The parameters are as follows.

        Parameter Data type Required Default value Description -h,-help - No None Checks help for restoration. --debug - No None Checks for more log information. --log string No \"br.log\" Specifies detailed log path for restoration and backup. --meta string Yes None The IP address and port of the meta service. --space string Yes None (Experimental feature) Specifies the names of the spaces to be backed up. All spaces will be backed up if not specified. Multiple spaces can be specified, and format is --spaces nba_01 --spaces nba_02. --storage string Yes None The target storage URL of BR backup data. The format is: \\<Schema>://\\<PATH>. Schema: Optional values are local and s3. When selecting s3, you need to fill in s3.access_key, s3.endpoint, s3.region, and s3.secret_key.PATH: The path of the storage location. --s3.access_key string No None Sets AccessKey ID. --s3.endpoint string No None Sets the S3 endpoint URL, please specify the HTTP or HTTPS scheme explicitly. --s3.region string No None Sets the region or location to upload or download the backup. --s3.secret_key string No None Sets SecretKey for AccessKey ID."},{"location":"backup-and-restore/nebula-br/3.br-backup-data/#next_to_do","title":"Next to do","text":"

        After the backup files are generated, you can use the BR to restore them for NebulaGraph. For more information, see Use BR to restore data.

        "},{"location":"backup-and-restore/nebula-br/4.br-restore-data/","title":"Use BR to restore data","text":"

        If you use the BR to back up data, you can use it to restore the data to NebulaGraph. This topic introduces how to use the BR to restore data from backup files.

        Caution

        During the restoration process, the data on the target NebulaGraph cluster is removed and then is replaced with the data from the backup files. If necessary, back up the data on the target cluster.

        Caution

        The restoration process is performed OFFLINE.

        "},{"location":"backup-and-restore/nebula-br/4.br-restore-data/#prerequisites","title":"Prerequisites","text":"
        • Install BR and Agent and run Agent on each host in the cluster.
        • No application is connected to the target NebulaGraph cluster.
        • Make sure that the target and the source NebulaGraph clusters have the same topology, which means that they have exactly the same number of hosts. The number of data folders for each host is consistently distributed.
        "},{"location":"backup-and-restore/nebula-br/4.br-restore-data/#procedures","title":"Procedures","text":"

        In the BR installation directory (the default path of the compiled BR is ./br), run the following command to perform a full backup for the entire cluster.

        1. Users can use the following command to list the existing backup information:

          $ ./br show --storage <storage_path>\n
          For example, run the following command to list the backup information in the local /home/nebula/backup path.
          $ ./br show --storage \"local:///home/nebula/backup\"\n+----------------------------+---------------------+------------------------+-------------+------------+\n|            NAME            |     CREATE TIME     |         SPACES         | FULL BACKUP | ALL SPACES |\n+----------------------------+---------------------+------------------------+-------------+------------+\n| BACKUP_2022_02_10_07_40_41 | 2022-02-10 07:40:41 | basketballplayer       | true        | true       |\n| BACKUP_2022_02_11_08_26_43 | 2022-02-11 08:26:47 | basketballplayer,foesa | true        | true       |\n+----------------------------+---------------------+------------------------+-------------+------------+\n

          Or, you can run the following command to list the backup information stored in S3 URL s3://192.168.8.129:9000/br-test/backup.

          $ ./br show --s3.endpoint \"http://192.168.8.129:9000\" --storage=\"s3://br-test/backup/\" --s3.access_key=minioadmin --s3.secret_key=minioadmin --s3.region=default\n

          Parameter Data type Required Default value Description -h,-help - No None Checks help for restoration. -debug - No None Checks for more log information. -log string No \"br.log\" Specifies detailed log path for restoration and backup. --storage string Yes None The target storage URL of BR backup data. The format is: <Schema>://<PATH>. Schema: Optional values are local and s3. When selecting s3, you need to fill in s3.access_key, s3.endpoint, s3.region, and s3.secret_key.PATH: The path of the storage location. --s3.access_key string No None Sets AccessKey ID. --s3.endpoint string No None Sets the S3 endpoint URL, please specify the HTTP or HTTPS scheme explicitly. --s3.region string No None Sets the region or location to upload or download the backup. --s3.secret_key string No None Sets SecretKey for AccessKey ID.
        2. Run the following command to restore data.

          $ ./br restore full --meta <ip_address> --storage <storage_path> --name <backup_name>\n

          For example, run the following command to upload the backup files from the local /home/nebula/backup/ to the cluster where the meta service's address is 192.168.8.129:9559.

          $ ./br restore full --meta \"192.168.8.129:9559\" --storage \"local:///home/nebula/backup/\" --name BACKUP_2021_12_08_18_38_08\n

          Or, you can run the following command to upload the backup files from the S3 URL s3://192.168.8.129:9000/br-test/backup.

          $ ./br restore full --meta \"192.168.8.129:9559\" --s3.endpoint \"http://192.168.8.129:9000\" --storage=\"s3://br-test/backup/\" --s3.access_key=minioadmin --s3.secret_key=minioadmin --s3.region=\"default\" --name BACKUP_2021_12_08_18_38_08\n

          If the following information is returned, the data is restored successfully.

          Restore succeed.\n

          Caution

          If your new cluster hosts' IPs are not all the same as the backup cluster, after restoration, you should run add hosts to add the Storage host IPs in the new cluster one by one.

          The parameters are as follows.

          Parameter Data type Required Default value Description -h,-help - No None Checks help for restoration. -debug - No None Checks for more log information. -log string No \"br.log\" Specifies detailed log path for restoration and backup. -meta string Yes None The IP address and port of the meta service. -name string Yes None The name of backup. --storage string Yes None The target storage URL of BR backup data. The format is: \\<Schema>://\\<PATH>. Schema: Optional values are local and s3. When selecting s3, you need to fill in s3.access_key, s3.endpoint, s3.region, and s3.secret_key.PATH: The path of the storage location. --s3.access_key string No None Sets AccessKey ID. --s3.endpoint string No None Sets the S3 endpoint URL, please specify the HTTP or HTTPS scheme explicitly. --s3.region string No None Sets the region or location to upload or download the backup. --s3.secret_key string No None Sets SecretKey for AccessKey ID.
        3. Run the following command to clean up temporary files if any error occurred during backup. It will clean the files in cluster and external storage. You could also use it to clean up old backups files in external storage.

          $ ./br cleanup --meta <ip_address> --storage <storage_path> --name <backup_name>\n

          The parameters are as follows.

          Parameter Data type Required Default value Description -h,-help - No None Checks help for restoration. -debug - No None Checks for more log information. -log string No \"br.log\" Specifies detailed log path for restoration and backup. -meta string Yes None The IP address and port of the meta service. -name string Yes None The name of backup. --storage string Yes None The target storage URL of BR backup data. The format is: \\<Schema>://\\<PATH>. Schema: Optional values are local and s3. When selecting s3, you need to fill in s3.access_key, s3.endpoint, s3.region, and s3.secret_key.PATH: The path of the storage location. --s3.access_key string No None Sets AccessKey ID. --s3.endpoint string No None Sets the S3 endpoint URL, please specify the HTTP or HTTPS scheme explicitly. --s3.region string No None Sets the region or location to upload or download the backup. --s3.secret_key string No None Sets SecretKey for AccessKey ID.
        "},{"location":"connector/nebula-flink-connector/","title":"NebulaGraph Flink Connector","text":"

        NebulaGraph Flink Connector is a connector that helps Flink users quickly access NebulaGraph. NebulaGraph Flink Connector supports reading data from the NebulaGraph database or writing other external data to the NebulaGraph database.

        For more information, see NebulaGraph Flink Connector.

        "},{"location":"connector/nebula-flink-connector/#use_cases","title":"Use cases","text":"

        NebulaGraph Flink Connector applies to the following scenarios:

        • Read data from NebulaGraph for analysis and computation.
        • Write data back to NebulaGraph after analysis and computation.
        • Migrate the data of NebulaGraph.
        "},{"location":"connector/nebula-flink-connector/#release_note","title":"Release note","text":"

        Release

        "},{"location":"connector/nebula-flink-connector/#version_compatibility","title":"Version compatibility","text":"

        The correspondence between the NebulaGraph Flink Connector version and the NebulaGraph core version is as follows.

        Flink Connector version NebulaGraph version 3.0-SNAPSHOT nightly 3.5.0 3.x.x 3.3.0 3.x.x 3.0.0 3.x.x 2.6.1 2.6.0, 2.6.1 2.6.0 2.6.0, 2.6.1 2.5.0 2.5.0, 2.5.1 2.0.0 2.0.0, 2.0.1"},{"location":"connector/nebula-flink-connector/#prerequisites","title":"Prerequisites","text":"
        • Java 8 or later is installed.
        • Flink 1.11.x is installed.
        "},{"location":"connector/nebula-flink-connector/#get_nebulagraph_flink_connector","title":"Get NebulaGraph Flink Connector","text":""},{"location":"connector/nebula-flink-connector/#configure_maven_dependency","title":"Configure Maven dependency","text":"

        Add the following dependency to the Maven configuration file pom.xml to automatically obtain the Flink Connector.

        <dependency>\n    <groupId>com.vesoft</groupId>\n    <artifactId>nebula-flink-connector</artifactId>\n    <version>3.5.0</version>\n</dependency>\n
        "},{"location":"connector/nebula-flink-connector/#compile_and_package","title":"Compile and package","text":"

        Follow the steps below to compile and package the Flink Connector.

        1. Clone repository nebula-flink-connector.

          $ git clone -b release-3.5 https://github.com/vesoft-inc/nebula-flink-connector.git\n
        2. Enter the nebula-flink-connector directory.

        3. Compile and package.

          $ mvn clean package -Dmaven.test.skip=true\n

        After compilation, a file similar to nebula-flink-connector-3.5.0.jar is generated in the directory connector/target of the folder.

        "},{"location":"connector/nebula-flink-connector/#how_to_use","title":"How to use","text":""},{"location":"connector/nebula-flink-connector/#write_data_into_nebulagraph","title":"Write data into NebulaGraph","text":"
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();\nNebulaClientOptions nebulaClientOptions = new NebulaClientOptions.NebulaClientOptionsBuilder()\n                .setGraphAddress(\"127.0.0.1:9669\")\n                .setMetaAddress(\"127.0.0.1:9559\")\n                .build();\nNebulaGraphConnectionProvider graphConnectionProvider = new NebulaGraphConnectionProvider(nebulaClientOptions);\nNebulaMetaConnectionProvider metaConnectionProvider = new NebulaMetaConnectionProvider(nebulaClientOptions);\n\nVertexExecutionOptions executionOptions = new VertexExecutionOptions.ExecutionOptionBuilder()\n                .setGraphSpace(\"flinkSink\")\n                .setTag(\"player\")\n                .setIdIndex(0)\n                .setFields(Arrays.asList(\"name\", \"age\"))\n                .setPositions(Arrays.asList(1, 2))\n                .setBatchSize(2)\n                .build();\n\nNebulaVertexBatchOutputFormat outputFormat = new NebulaVertexBatchOutputFormat(\n                graphConnectionProvider, metaConnectionProvider, executionOptions);\nNebulaSinkFunction<Row> nebulaSinkFunction = new NebulaSinkFunction<>(outputFormat);\nDataStream<Row> dataStream = playerSource.map(row -> {\n            Row record = new org.apache.flink.types.Row(row.size());\n            for (int i = 0; i < row.size(); i++) {\n                record.setField(i, row.get(i));\n            }\n            return record;\n        });\ndataStream.addSink(nebulaSinkFunction);\nenv.execute(\"write nebula\")\n
        "},{"location":"connector/nebula-flink-connector/#read_data_from_nebulagraph","title":"Read data from NebulaGraph","text":"
        NebulaClientOptions nebulaClientOptions = new NebulaClientOptions.NebulaClientOptionsBuilder()\n        .setMetaAddress(\"127.0.0.1:9559\")\n        .build();\nstorageConnectionProvider = new NebulaStorageConnectionProvider(nebulaClientOptions);\nStreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();\nenv.setParallelism(1);\n\nVertexExecutionOptions vertexExecutionOptions = new VertexExecutionOptions.ExecutionOptionBuilder()\n        .setGraphSpace(\"flinkSource\")\n        .setTag(\"person\")\n        .setNoColumn(false)\n        .setFields(Arrays.asList())\n        .setLimit(100)\n        .build();\n\nNebulaSourceFunction sourceFunction = new NebulaSourceFunction(storageConnectionProvider)\n        .setExecutionOptions(vertexExecutionOptions);\nDataStreamSource<BaseTableRow> dataStreamSource = env.addSource(sourceFunction);\ndataStreamSource.map(row -> {\n    List<ValueWrapper> values = row.getValues();\n    Row record = new Row(15);\n    record.setField(0, values.get(0).asLong());\n    record.setField(1, values.get(1).asString());\n    record.setField(2, values.get(2).asString());\n    record.setField(3, values.get(3).asLong());\n    record.setField(4, values.get(4).asLong());\n    record.setField(5, values.get(5).asLong());\n    record.setField(6, values.get(6).asLong());\n    record.setField(7, values.get(7).asDate());\n    record.setField(8, values.get(8).asDateTime().getUTCDateTimeStr());\n    record.setField(9, values.get(9).asLong());\n    record.setField(10, values.get(10).asBoolean());\n    record.setField(11, values.get(11).asDouble());\n    record.setField(12, values.get(12).asDouble());\n    record.setField(13, values.get(13).asTime().getUTCTimeStr());\n    record.setField(14, values.get(14).asGeography());\n    return record;\n}).print();\nenv.execute(\"NebulaStreamSource\");\n
        "},{"location":"connector/nebula-flink-connector/#parameter_descriptions","title":"Parameter descriptions","text":"
        • NebulaClientOptions is the configuration for connecting to NebulaGraph, as described below.

          Parameter Type Required Description setGraphAddress String Yes The Graph service address of NebulaGraph. setMetaAddress String Yes The Meta service address of NebulaGraph.
        • VertexExecutionOptions is the configuration for reading vertices from and writing vertices to NebulaGraph, as described below.

          Parameter Type Required Description setGraphSpace String Yes The graph space name. setTag String Yes The tag name. setIdIndex Int Yes The subscript of the stream data field that is used as the VID when writing data to NebulaGraph. setFields List Yes A collection of the property names of a tag. It is used to write data to or read data from NebulaGraph. Make sure the setNoColumn is false when reading data; otherwise, the configuration is invalid. If this parameter is empty, all properties are read when reading data from NebulaGraph. setPositions List Yes A collection of the subscripts of the stream data fields. It indicates that the corresponding field values are written to NebulaGraph as property values. This parameter needs to correspond to setFields. setBatchSize String No The maximum number of data records to write to NebulaGraph at a time. The default value is 2000. setNoColumn String No The properties are not to be read if set to true when reading data. The default value is false. setLimit String No The maximum number of data records to pull at a time when reading data. The default value is 2000.
        • EdgeExecutionOptions is the configuration for reading edges from and writing edges to NebulaGraph, as described below.

          Parameter Type Required Description setGraphSpace String Yes The graph space name. setEdge String Yes The edge type name. setSrcIndex Int Yes The subscript of the stream data field that is used as the VID of the source vertex when writing data to NebulaGraph. setDstIndex Int Yes The subscript of the stream data field that is used as the VID of the destination vertex when writing data to NebulaGraph. setRankIndex Int Yes The subscript of the stream data field that is used as the rank of the edge when writing data to NebulaGraph. setFields List Yes A collection of the property names of an edge type. It is used to write data to or read data from NebulaGraph. Make sure the setNoColumn is false when reading data; otherwise, the configuration is invalid. If this parameter is empty, all properties are read when reading data from NebulaGraph. setPositions List Yes A collection of the subscripts of the stream data fields. It indicates that the corresponding field values are written to NebulaGraph as property values. This parameter needs to correspond to setFields. setBatchSize String No The maximum number of data records to write to NebulaGraph at a time. The default value is 2000. setNoColumn String No The properties are not to be read if set to true when reading data. The default value is false. setLimit String No The maximum number of data records to pull at a time when reading data. The default value is 2000.
        "},{"location":"connector/nebula-flink-connector/#example","title":"Example","text":"
        1. Create a graph space.

          NebulaCatalog nebulaCatalog = NebulaCatalogUtils.createNebulaCatalog(\n        \"NebulaCatalog\",\n        \"default\",\n        \"root\",\n        \"nebula\",\n        \"127.0.0.1:9559\",\n        \"127.0.0.1:9669\");\n\nEnvironmentSettings settings = EnvironmentSettings.newInstance()\n        .inStreamingMode()\n        .build();\nTableEnvironment tableEnv = TableEnvironment.create(settings);\n\ntableEnv.registerCatalog(CATALOG_NAME, nebulaCatalog);\ntableEnv.useCatalog(CATALOG_NAME);\n\nString createDataBase = \"CREATE DATABASE IF NOT EXISTS `db1`\"\n        + \" COMMENT 'space 1'\"\n        + \" WITH (\"\n        + \" 'partition_num' = '100',\"\n        + \" 'replica_factor' = '3',\"\n        + \" 'vid_type' = 'FIXED_STRING(10)'\"\n        + \")\";\ntableEnv.executeSql(createDataBase);\n
        2. Create a tag.

          tableEnvironment.executeSql(\"CREATE TABLE `person` (\"\n        + \" vid BIGINT,\"\n        + \" col1 STRING,\"\n        + \" col2 STRING,\"\n        + \" col3 BIGINT,\"\n        + \" col4 BIGINT,\"\n        + \" col5 BIGINT,\"\n        + \" col6 BIGINT,\"\n        + \" col7 DATE,\"\n        + \" col8 TIMESTAMP,\"\n        + \" col9 BIGINT,\"\n        + \" col10 BOOLEAN,\"\n        + \" col11 DOUBLE,\"\n        + \" col12 DOUBLE,\"\n        + \" col13 TIME,\"\n        + \" col14 STRING\"\n        + \") WITH (\"\n        + \" 'connector' = 'nebula',\"\n        + \" 'meta-address' = '127.0.0.1:9559',\"\n        + \" 'graph-address' = '127.0.0.1:9669',\"\n        + \" 'username' = 'root',\"\n        + \" 'password' = 'nebula',\"\n        + \" 'data-type' = 'vertex',\"\n        + \" 'graph-space' = 'flink_test',\"\n        + \" 'label-name' = 'person'\"\n        + \")\"\n);\n
        3. Create an edge type.

          tableEnvironment.executeSql(\"CREATE TABLE `friend` (\"\n        + \" sid BIGINT,\"\n        + \" did BIGINT,\"\n        + \" rid BIGINT,\"\n        + \" col1 STRING,\"\n        + \" col2 STRING,\"\n        + \" col3 BIGINT,\"\n        + \" col4 BIGINT,\"\n        + \" col5 BIGINT,\"\n        + \" col6 BIGINT,\"\n        + \" col7 DATE,\"\n        + \" col8 TIMESTAMP,\"\n        + \" col9 BIGINT,\"\n        + \" col10 BOOLEAN,\"\n        + \" col11 DOUBLE,\"\n        + \" col12 DOUBLE,\"\n        + \" col13 TIME,\"\n        + \" col14 STRING\"\n        + \") WITH (\"\n        + \" 'connector' = 'nebula',\"\n        + \" 'meta-address' = '127.0.0.1:9559',\"\n        + \" 'graph-address' = '127.0.0.1:9669',\"\n        + \" 'username' = 'root',\"\n        + \" 'password' = 'nebula',\"\n        + \" 'graph-space' = 'flink_test',\"\n        + \" 'label-name' = 'friend',\"\n        + \" 'data-type'='edge',\"\n        + \" 'src-id-index'='0',\"\n        + \" 'dst-id-index'='1',\"\n        + \" 'rank-id-index'='2'\"\n        + \")\"\n);\n
        4. Queries the data of an edge type and inserts it into another edge type.

          Table table = tableEnvironment.sqlQuery(\"SELECT * FROM `friend`\");\ntable.executeInsert(\"`friend_sink`\").await();\n
        "},{"location":"connector/nebula-spark-connector/","title":"NebulaGraph Spark Connector","text":"

        NebulaGraph Spark Connector is a Spark connector application for reading and writing NebulaGraph data in Spark standard format. NebulaGraph Spark Connector consists of two parts: Reader and Writer.

        • Reader

          Provides a Spark SQL interface. This interface can be used to read NebulaGraph data. It reads one vertex or edge type data at a time and assemble the result into a Spark DataFrame.

        • Writer

          Provides a Spark SQL interface. This interface can be used to write DataFrames into NebulaGraph in a row-by-row or batch-import way.

        For more information, see NebulaGraph Spark Connector.

        "},{"location":"connector/nebula-spark-connector/#version_compatibility","title":"Version compatibility","text":"

        The correspondence between the NebulaGraph Spark Connector version, the NebulaGraph core version and the Spark version is as follows.

        Spark Connector version NebulaGraph version Spark version nebula-spark-connector_3.0-3.0-SNAPSHOT.jar nightly 3.x nebula-spark-connector_2.2-3.0-SNAPSHOT.jar nightly 2.2.x nebula-spark-connector-3.0-SNAPSHOT.jar nightly 2.4.x nebula-spark-connector_3.0-3.6.0.jar 3.x 3.x nebula-spark-connector_2.2-3.6.0.jar 3.x 2.2.x nebula-spark-connector-3.6.0.jar 3.x 2.4.x nebula-spark-connector_2.2-3.4.0.jar 3.x 2.2.x nebula-spark-connector-3.4.0.jar 3.x 2.4.x nebula-spark-connector_2.2-3.3.0.jar 3.x 2.2.x nebula-spark-connector-3.3.0.jar 3.x 2.4.x nebula-spark-connector-3.0.0.jar 3.x 2.4.x nebula-spark-connector-2.6.1.jar 2.6.0, 2.6.1 2.4.x nebula-spark-connector-2.6.0.jar 2.6.0, 2.6.1 2.4.x nebula-spark-connector-2.5.1.jar 2.5.0, 2.5.1 2.4.x nebula-spark-connector-2.5.0.jar 2.5.0, 2.5.1 2.4.x nebula-spark-connector-2.1.0.jar 2.0.0, 2.0.1 2.4.x nebula-spark-connector-2.0.1.jar 2.0.0, 2.0.1 2.4.x nebula-spark-connector-2.0.0.jar 2.0.0, 2.0.1 2.4.x"},{"location":"connector/nebula-spark-connector/#use_cases","title":"Use cases","text":"

        NebulaGraph Spark Connector applies to the following scenarios:

        • Read data from NebulaGraph for analysis and computation.
        • Write data back to NebulaGraph after analysis and computation.
        • Migrate the data of NebulaGraph.
        • Graph computing with NebulaGraph Algorithm.
        "},{"location":"connector/nebula-spark-connector/#benefits","title":"Benefits","text":"

        The features of NebulaGraph Spark Connector 3.6.0 are as follows:

        • Supports multiple connection settings, such as timeout period, number of connection retries, number of execution retries, etc.
        • Supports multiple settings for data writing, such as setting the corresponding column as vertex ID, starting vertex ID, destination vertex ID or attributes.
        • Supports non-attribute reading and full attribute reading.
        • Supports reading NebulaGraph data into VertexRDD and EdgeRDD, and supports non-Long vertex IDs.
        • Unifies the extended data source of SparkSQL, and uses DataSourceV2 to extend NebulaGraph data.
        • Three write modes, insert, update and delete, are supported. insert mode will insert (overwrite) data, update mode will only update existing data, and delete mode will only delete data.
        "},{"location":"connector/nebula-spark-connector/#release_note","title":"Release note","text":"

        Release

        "},{"location":"connector/nebula-spark-connector/#get_nebulagraph_spark_connector","title":"Get NebulaGraph Spark Connector","text":""},{"location":"connector/nebula-spark-connector/#compile_and_package","title":"Compile and package","text":"
        1. Clone repository nebula-spark-connector.

          $ git clone -b release-3.6 https://github.com/vesoft-inc/nebula-spark-connector.git\n
        2. Enter the nebula-spark-connector directory.

        3. Compile and package. The procedure varies with Spark versions.

        Note

        Spark of the corresponding version has been installed.

        - Spark 2.4

        ```bash\n$ mvn clean package -Dmaven.test.skip=true -Dgpg.skip -Dmaven.javadoc.skip=true -pl nebula-spark-connector -am -Pscala-2.11 -Pspark-2.4\n```\n

        - Spark 2.2

        ```bash\n$ mvn clean package -Dmaven.test.skip=true -Dgpg.skip -Dmaven.javadoc.skip=true -pl nebula-spark-connector_2.2 -am -Pscala-2.11 -Pspark-2.2\n```\n

        - Spark 3.x

        ```bash\n$ mvn clean package -Dmaven.test.skip=true -Dgpg.skip -Dmaven.javadoc.skip=true -pl nebula-spark-connector_3.0 -am -Pscala-2.12 -Pspark-3.0\n```\n

        After compilation, a file similar to nebula-spark-connector-3.6.0-SHANPSHOT.jar is generated in the directory target of the folder.

        "},{"location":"connector/nebula-spark-connector/#download_maven_remote_repository","title":"Download maven remote repository","text":"

        Download

        "},{"location":"connector/nebula-spark-connector/#how_to_use","title":"How to use","text":"

        When using NebulaGraph Spark Connector to reading and writing NebulaGraph data, You can refer to the following code.

        # Read vertex and edge data from NebulaGraph.\nspark.read.nebula().loadVerticesToDF()\nspark.read.nebula().loadEdgesToDF()\n\n# Write dataframe data into NebulaGraph as vertex and edges.\ndataframe.write.nebula().writeVertices()\ndataframe.write.nebula().writeEdges()\n

        nebula() receives two configuration parameters, including connection configuration and read-write configuration.

        Note

        If the value of the properties contains Chinese characters, the encoding error may appear. Please add the following options when submitting the Spark task:

        --conf spark.driver.extraJavaOptions=-Dfile.encoding=utf-8\n--conf spark.executor.extraJavaOptions=-Dfile.encoding=utf-8\n
        "},{"location":"connector/nebula-spark-connector/#reading_data_from_nebulagraph","title":"Reading data from NebulaGraph","text":"
        val config = NebulaConnectionConfig\n  .builder()\n  .withMetaAddress(\"127.0.0.1:9559\")\n  .withConenctionRetry(2)\n  .withExecuteRetry(2)\n  .withTimeout(6000)\n  .build()\n\nval nebulaReadVertexConfig: ReadNebulaConfig = ReadNebulaConfig\n  .builder()\n  .withSpace(\"test\")\n  .withLabel(\"person\")\n  .withNoColumn(false)\n  .withReturnCols(List(\"birthday\"))\n  .withLimit(10)\n  .withPartitionNum(10)\n  .build()\nval vertex = spark.read.nebula(config, nebulaReadVertexConfig).loadVerticesToDF()\n\nval nebulaReadEdgeConfig: ReadNebulaConfig = ReadNebulaConfig\n  .builder()\n  .withSpace(\"test\")\n  .withLabel(\"knows\")\n  .withNoColumn(false)\n  .withReturnCols(List(\"degree\"))\n  .withLimit(10)\n  .withPartitionNum(10)\n  .build()\nval edge = spark.read.nebula(config, nebulaReadEdgeConfig).loadEdgesToDF()\n
        • NebulaConnectionConfig is the configuration for connecting to NebulaGraph, as described below.

          Parameter Required Description withMetaAddress Yes Specifies the IP addresses and ports of all Meta Services. Separate multiple addresses with commas. The format is ip1:port1,ip2:port2,.... Read data is no need to configure withGraphAddress. withConnectionRetry No The number of retries that the NebulaGraph Java Client connected to NebulaGraph. The default value is 1. withExecuteRetry No The number of retries that the NebulaGraph Java Client executed query statements. The default value is 1. withTimeout No The timeout for the NebulaGraph Java Client request response. The default value is 6000, Unit: ms.
        • ReadNebulaConfig is the configuration to read NebulaGraph data, as described below.

          Parameter Required Description withSpace Yes NebulaGraph space name. withLabel Yes The Tag or Edge type name within the NebulaGraph space. withNoColumn No Whether the property is not read. The default value is false, read property. If the value is true, the property is not read, the withReturnCols configuration is invalid. withReturnCols No Configures the set of properties for vertex or edges to read. the format is List(property1,property2,...), The default value is List(), indicating that all properties are read. withLimit No Configure the number of rows of data read from the server by the NebulaGraph Java Storage Client at a time. The default value is 1000. withPartitionNum No Configures the number of Spark partitions to read the NebulaGraph data. The default value is 100. This value should not exceed the number of slices in the graph space (partition_num).
        "},{"location":"connector/nebula-spark-connector/#write_data_into_nebulagraph","title":"Write data into NebulaGraph","text":"

        Note

        The values of columns in a dataframe are automatically written to NebulaGraph as property values.

        val config = NebulaConnectionConfig\n  .builder()\n  .withMetaAddress(\"127.0.0.1:9559\")\n  .withGraphAddress(\"127.0.0.1:9669\")\n  .withConenctionRetry(2)\n  .build()\n\nval nebulaWriteVertexConfig: WriteNebulaVertexConfig = WriteNebulaVertexConfig      \n  .builder()\n  .withSpace(\"test\")\n  .withTag(\"person\")\n  .withVidField(\"id\")\n  .withVidPolicy(\"hash\")\n  .withVidAsProp(true)\n  .withUser(\"root\")\n  .withPasswd(\"nebula\")\n  .withBatch(1000)\n  .build()    \ndf.write.nebula(config, nebulaWriteVertexConfig).writeVertices()\n\nval nebulaWriteEdgeConfig: WriteNebulaEdgeConfig = WriteNebulaEdgeConfig      \n  .builder()\n  .withSpace(\"test\")\n  .withEdge(\"friend\")\n  .withSrcIdField(\"src\")\n  .withSrcPolicy(null)\n  .withDstIdField(\"dst\")\n  .withDstPolicy(null)\n  .withRankField(\"degree\")\n  .withSrcAsProperty(true)\n  .withDstAsProperty(true)\n  .withRankAsProperty(true)\n  .withUser(\"root\")\n  .withPasswd(\"nebula\")\n  .withBatch(1000)\n  .build()\ndf.write.nebula(config, nebulaWriteEdgeConfig).writeEdges()\n

        The default write mode is insert, which can be changed to update or delete via withWriteMode configuration:

        val config = NebulaConnectionConfig\n  .builder()\n  .withMetaAddress(\"127.0.0.1:9559\")\n  .withGraphAddress(\"127.0.0.1:9669\")\n  .build()\nval nebulaWriteVertexConfig = WriteNebulaVertexConfig\n  .builder()\n  .withSpace(\"test\")\n  .withTag(\"person\")\n  .withVidField(\"id\")\n  .withVidAsProp(true)\n  .withBatch(1000)\n  .withWriteMode(WriteMode.UPDATE)\n  .build()\ndf.write.nebula(config, nebulaWriteVertexConfig).writeVertices()\n
        • NebulaConnectionConfig is the configuration for connecting to the nebula graph, as described below.

          Parameter Required Description withMetaAddress Yes Specifies the IP addresses and ports of all Meta Services. Separate multiple addresses with commas. The format is ip1:port1,ip2:port2,.... withGraphAddress Yes Specifies the IP addresses and ports of Graph Services. Separate multiple addresses with commas. The format is ip1:port1,ip2:port2,.... withConnectionRetry No Number of retries that the NebulaGraph Java Client connected to NebulaGraph. The default value is 1.
        • WriteNebulaVertexConfig is the configuration of the write vertex, as described below.

          Parameter Required Description withSpace Yes NebulaGraph space name. withTag Yes The Tag name that needs to be associated when a vertex is written. withVidField Yes The column in the DataFrame as the vertex ID. withVidPolicy No When writing the vertex ID, NebulaGraph use mapping function, supports HASH only. No mapping is performed by default. withVidAsProp No Whether the column in the DataFrame that is the vertex ID is also written as an property. The default value is false. If set to true, make sure the Tag has the same property name as VidField. withUser No NebulaGraph username. If authentication is disabled, you do not need to configure the username and password. withPasswd No The password for the NebulaGraph username. withBatch Yes The number of rows of data written at a time. The default value is 1000. withWriteMode No Write mode. The optional values are insert, update and delete. The default value is insert. withDeleteEdge No Whether to delete the related edges synchronously when deleting a vertex. The default value is false. It takes effect when withWriteMode is delete.
        • WriteNebulaEdgeConfig is the configuration of the write edge, as described below.

          Parameter Required Description withSpace Yes NebulaGraph space name. withEdge Yes The Edge type name that needs to be associated when a edge is written. withSrcIdField Yes The column in the DataFrame as the vertex ID. withSrcPolicy No When writing the starting vertex ID, NebulaGraph use mapping function, supports HASH only. No mapping is performed by default. withDstIdField Yes The column in the DataFrame that serves as the destination vertex. withDstPolicy No When writing the destination vertex ID, NebulaGraph use mapping function, supports HASH only. No mapping is performed by default. withRankField No The column in the DataFrame as the rank. Rank is not written by default. withSrcAsProperty No Whether the column in the DataFrame that is the starting vertex is also written as an property. The default value is false. If set to true, make sure Edge type has the same property name as SrcIdField. withDstAsProperty No Whether column that are destination vertex in the DataFrame are also written as property. The default value is false. If set to true, make sure Edge type has the same property name as DstIdField. withRankAsProperty No Whether column in the DataFrame that is the rank is also written as property.The default value is false. If set to true, make sure Edge type has the same property name as RankField. withUser No NebulaGraph username. If authentication is disabled, you do not need to configure the username and password. withPasswd No The password for the NebulaGraph username. withBatch Yes The number of rows of data written at a time. The default value is 1000. withWriteMode No Write mode. The optional values are insert, update and delete. The default value is insert.
        "},{"location":"graph-computing/nebula-algorithm/","title":"NebulaGraph Algorithm","text":"

        NebulaGraph Algorithm (Algorithm) is a Spark application based on GraphX. It uses a complete algorithm tool to perform graph computing on the data in the NebulaGraph database by submitting a Spark task. You can also programmatically use the algorithm under the lib repository to perform graph computing on DataFrame.

        "},{"location":"graph-computing/nebula-algorithm/#version_compatibility","title":"Version compatibility","text":"

        The correspondence between the NebulaGraph Algorithm release and the NebulaGraph core release is as follows.

        NebulaGraph NebulaGraph Algorithm nightly 3.0-SNAPSHOT 3.0.0 ~ 3.4.x 3.x.0 2.6.x 2.6.x 2.5.0\u30012.5.1 2.5.0 2.0.0\u30012.0.1 2.1.0"},{"location":"graph-computing/nebula-algorithm/#prerequisites","title":"Prerequisites","text":"

        Before using the NebulaGraph Algorithm, users need to confirm the following information:

        • The NebulaGraph services have been deployed and started. For details, see NebulaGraph Installation.
        • The Spark version is 2.4.x.
        • The Scala version is 2.11.
        • (Optional) If users need to clone, compile, and package the latest Algorithm in Github, install Maven.
        "},{"location":"graph-computing/nebula-algorithm/#limitations","title":"Limitations","text":"

        Graph computing outputs vertex datasets, and the algorithm results are stored in DataFrames as the properties of vertices. You can do further operations such as statistics and filtering according to your business requirements.

        !!!

        Before Algorithm v3.1.0, when submitting the algorithm package directly, the data of the vertex ID must be an integer. That is, the vertex ID can be INT or String, but the data itself is an integer.\n
        "},{"location":"graph-computing/nebula-algorithm/#supported_algorithms","title":"Supported algorithms","text":"

        The graph computing algorithms supported by NebulaGraph Algorithm are as follows.

        Algorithm Description Scenario Properties name Properties type PageRank The rank of pages Web page ranking, key node mining pagerank double/string Louvain Louvain Community mining, hierarchical clustering louvain int/string KCore K core Community discovery, financial risk control kcore int/string LabelPropagation Label propagation Information spreading, advertising, and community discovery lpa int/string Hanp Label propagation advanced Community discovery, recommendation system hanp int/string ConnectedComponent Weakly connected component Community discovery, island discovery cc int/string StronglyConnectedComponent Strongly connected component Community discovery scc int/string ShortestPath The shortest path Path planning, network planning shortestpath string TriangleCount Triangle counting Network structure analysis trianglecount int/string GraphTriangleCount Graph triangle counting Network structure and tightness analysis count int BetweennessCentrality Intermediate centrality Key node mining, node influence computing betweenness double/string ClosenessCentrality Closeness centrality Key node mining, node influence computing closeness double/string DegreeStatic Degree of statistical Graph structure analysis degree,inDegree,outDegree int/string ClusteringCoefficient Aggregation coefficient Recommendation system, telecom fraud analysis clustercoefficient double/string Jaccard Jaccard similarity Similarity computing, recommendation system jaccard string BFS Breadth-First Search Sequence traversal, shortest path planning bfs string DFS Depth-First Search Sequence traversal, shortest path planning dfs string Node2Vec - Graph classification node2vec string

        Note

        When writing the algorithm results into the NebulaGraph, make sure that the tag in the corresponding graph space has properties names and data types corresponding to the table above.

        "},{"location":"graph-computing/nebula-algorithm/#implementation_methods","title":"Implementation methods","text":"

        NebulaGraph Algorithm implements the graph calculating as follows:

        1. Read the graph data of DataFrame from the NebulaGraph database using the NebulaGraph Spark Connector.

        2. Transform the graph data of DataFrame to the GraphX graph.

        3. Use graph algorithms provided by GraphX (such as PageRank) or self-implemented algorithms (such as Louvain).

        For detailed implementation methods, see Scala file.

        "},{"location":"graph-computing/nebula-algorithm/#get_nebulagraph_algorithm","title":"Get NebulaGraph Algorithm","text":""},{"location":"graph-computing/nebula-algorithm/#compile_and_package","title":"Compile and package","text":"
        1. Clone the repository nebula-algorithm.

          $ git clone -b v3.0.0 https://github.com/vesoft-inc/nebula-algorithm.git\n
        2. Enter the directory nebula-algorithm.

          $ cd nebula-algorithm\n
        3. Compile and package.

          $ mvn clean package -Dgpg.skip -Dmaven.javadoc.skip=true -Dmaven.test.skip=true\n

        After the compilation, a similar file nebula-algorithm-3.x.x.jar is generated in the directory nebula-algorithm/target.

        "},{"location":"graph-computing/nebula-algorithm/#download_maven_from_the_remote_repository","title":"Download maven from the remote repository","text":"

        Download address

        "},{"location":"graph-computing/nebula-algorithm/#how_to_use","title":"How to use","text":"

        Note

        If the value of the properties contains Chinese characters, the encoding error may appear. Please add the following options when submitting the Spark task:

        --conf spark.driver.extraJavaOptions=-Dfile.encoding=utf-8\n--conf spark.executor.extraJavaOptions=-Dfile.encoding=utf-8\n
        "},{"location":"graph-computing/nebula-algorithm/#use_algorithm_interface_recommended","title":"Use algorithm interface (recommended)","text":"

        The lib repository provides 10 common graph algorithms.

        1. Add dependencies to the file pom.xml.

          <dependency>\n     <groupId>com.vesoft</groupId>\n     <artifactId>nebula-algorithm</artifactId>\n     <version>3.0.0</version>\n</dependency>\n
        2. Use the algorithm (take PageRank as an example) by filling in parameters. For more examples, see example.

          Note

          By default, the DataFrame that executes the algorithm sets the first column as the starting vertex, the second column as the destination vertex, and the third column as the edge weights (not the rank in the NebulaGraph).

          val prConfig = new PRConfig(5, 1.0)\nval prResult = PageRankAlgo.apply(spark, data, prConfig, false)\n

          If your vertex IDs are Strings, see Pagerank Example for how to encoding and decoding them.

        "},{"location":"graph-computing/nebula-algorithm/#submit_the_algorithm_package_directly","title":"Submit the algorithm package directly","text":"
        1. Set the Configuration file.

          {\n  # Configurations related to Spark\n  spark: {\n    app: {\n        name: LPA\n        # The number of partitions of Spark\n        partitionNum:100\n    }\n    master:local\n  }\n\n  data: {\n    # Data source. Optional values are nebula, csv, and json.\n    source: csv\n    # Data sink. The algorithm result will be written into this sink. Optional values are nebula, csv, and text.\n    sink: nebula\n    # Whether the algorithm has a weight.\n    hasWeight: false\n  }\n\n  # Configurations related to NebulaGraph\n  nebula: {\n    # Data source. When NebulaGraph is the data source of the graph computing, the configuration of `nebula.read` is valid.\n    read: {\n        # The IP addresses and ports of all Meta services. Multiple addresses are separated by commas (,). Example: \"ip1:port1,ip2:port2\".\n        # To deploy NebulaGraph by using Docker Compose, fill in the port with which Docker Compose maps to the outside.\n        # Check the status with `docker-compose ps`.\n        metaAddress: \"192.168.*.10:9559\"\n        # The name of the graph space in NebulaGraph.\n        space: basketballplayer\n        # Edge types in NebulaGraph. When there are multiple labels, the data of multiple edges will be merged.\n        labels: [\"serve\"]\n        # The property name of each edge type in NebulaGraph. This property will be used as the weight column of the algorithm. Make sure that it corresponds to the edge type.\n        weightCols: [\"start_year\"]\n    }\n\n    # Data sink. When the graph computing result sinks into NebulaGraph, the configuration of `nebula.write` is valid.\n    write:{\n        # The IP addresses and ports of all Graph services. Multiple addresses are separated by commas (,). Example: \"ip1:port1,ip2:port2\".\n        # To deploy by using Docker Compose, fill in the port with which Docker Compose maps to the outside.\n        # Check the status with `docker-compose ps`.\n        graphAddress: \"192.168.*.11:9669\"\n        # The IP addresses and ports of all Meta services. Multiple addresses are separated by commas (,). Example: \"ip1:port1,ip2:port2\".\n        # To deploy NebulaGraph by using Docker Compose, fill in the port with which Docker Compose maps to the outside.\n        # Check the staus with `docker-compose ps`.\n        metaAddress: \"192.168.*.12:9559\"\n        user:root\n        pswd:nebula\n        # Before submitting the graph computing task, create the graph space and tag.\n        # The name of the graph space in NebulaGraph.\n        space:nb\n        # The name of the tag in NebulaGraph. The graph computing result will be written into this tag. The property name of this tag is as follows.\n        # PageRank: pagerank\n        # Louvain: louvain\n        # ConnectedComponent: cc\n        # StronglyConnectedComponent: scc\n        # LabelPropagation: lpa\n        # ShortestPath: shortestpath\n        # DegreeStatic: degree,inDegree,outDegree\n        # KCore: kcore\n        # TriangleCount: tranglecpunt\n        # BetweennessCentrality: betweennedss\n        tag:pagerank\n    }\n    }  \n\n  local: {\n    # Data source. When the data source is csv or json, the configuration of `local.read` is valid.\n    read:{\n        filePath: \"hdfs://127.0.0.1:9000/edge/work_for.csv\"\n        # If the CSV file has a header or it is a json file, use the header. If not, use [_c0, _c1, _c2, ..., _cn] instead.\n        # The header of the source VID column.\n        srcId:\"_c0\"\n        # The header of the destination VID column.\n        dstId:\"_c1\"\n        # The header of the weight column.\n        weight: \"_c2\"\n        # Whether the csv file has a header.\n        header: false\n        # The delimiter in the csv file.\n        delimiter:\",\"\n    }\n\n    # Data sink. When the graph computing result sinks to the csv or text file, the configuration of `local.write` is valid.\n    write:{\n        resultPath:/tmp/\n    }\n    }\n\n\n  algorithm: {\n    # The algorithm to execute. Optional values are as follow: \n    # pagerank, louvain, connectedcomponent, labelpropagation, shortestpaths, \n    # degreestatic, kcore, stronglyconnectedcomponent, trianglecount ,\n    # betweenness, graphtriangleCount.\n    executeAlgo: pagerank\n\n    # PageRank\n    pagerank: {\n        maxIter: 10\n        resetProb: 0.15 \n        encodeId:false # Configure true if the VID is of string type.\n    }\n\n    # Louvain\n    louvain: {\n        maxIter: 20\n        internalIter: 10\n        tol: 0.5\n        encodeId:false # Configure true if the VID is of string type.\n    }\n\n   # ...\n\n}\n}\n

          Note

          When sink: nebula is configured, it means that the algorithm results will be written back to the NebulaGraph cluster. The property names of the tag have implicit conventions. For details, see Supported algorithms section of this topic.

        2. Submit the graph computing task.

          ${SPARK_HOME}/bin/spark-submit --master <mode> --class com.vesoft.nebula.algorithm.Main <nebula-algorithm-3.0.0.jar_path> -p <application.conf_path>\n

          Example:

          ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.algorithm.Main /root/nebula-algorithm/target/nebula-algorithm-3.0-SNAPSHOT.jar -p /root/nebula-algorithm/src/main/resources/application.conf\n
        "},{"location":"import-export/use-importer/","title":"NebulaGraph Importer","text":"

        NebulaGraph Importer (Importer) is a standalone tool for importing data from CSV files into NebulaGraph. Importer can read and batch import CSV file data from multiple data sources, and also supports batch update and delete operations.

        "},{"location":"import-export/use-importer/#features","title":"Features","text":"
        • Support multiple data sources, including local, S3, OSS, HDFS, FTP, SFTP, and GCS.
        • Support importing data from CSV format files. A single file can contain multiple tags, multiple edge types or a mix of both.
        • Support filtering the data from source.
        • Support batch operation, including insert, update, delete.
        • Support connecting to multiple Graph services simultaneously for importing and dynamic load balancing.
        • Support reconnect or retry after failure.
        • Support displaying statistics in multiple dimensions, including import time, import percentage, etc. Support for printing statistics in Console or logs.
        • Support SSL.
        "},{"location":"import-export/use-importer/#advantage","title":"Advantage","text":"
        • Lightweight and fast: no complex environment can be used, fast data import.
        • Flexible filtering: You can flexibly filter CSV data through configuration files.
        "},{"location":"import-export/use-importer/#version_compatibility","title":"Version compatibility","text":"

        The version correspondence between NebulaGraph and NebulaGraph Importer is as follows.

        NebulaGraph version NebulaGraph Importer version 3.x.x 3.x.x, 4.x.x 2.x.x 2.x.x, 3.x.x

        Note

        Importer 4.0.0 has redone the Importer for improved performance, but the configuration file is not compatible with older versions. It is recommended to use the new version of Importer.

        "},{"location":"import-export/use-importer/#release_note","title":"Release note","text":"

        Release

        "},{"location":"import-export/use-importer/#prerequisites","title":"Prerequisites","text":"

        Before using NebulaGraph Importer, make sure:

        • NebulaGraph service has been deployed. The deployment method is as follows:

          • Deploy NebulaGraph with Docker Compose
          • Install NebulaGraph with RPM or DEB package
          • Install NebulaGraph by compiling the source code
        • Schema is created in NebulaGraph, including space, Tag and Edge type, or set by parameter manager.hooks.before.statements.
        "},{"location":"import-export/use-importer/#steps","title":"Steps","text":"

        Prepare the CSV file to be imported and configure the YAML file to use the tool to batch write data into NebulaGraph.

        Note

        For details about the YAML configuration file, see Configuration File Description at the end of topic.

        "},{"location":"import-export/use-importer/#download_binary_package_and_run","title":"Download binary package and run","text":"
        1. Download the executable binary package.

          Note

          The file installation path based on the RPM/DEB package is /usr/bin/nebula-importer.

        2. Under the directory where the binary file is located, run the following command to start importing data.

          ./<binary_file_name> --config <yaml_config_file_path>\n
        "},{"location":"import-export/use-importer/#source_code_compile_and_run","title":"Source code compile and run","text":"

        Compiling the source code requires deploying a Golang environment. For details, see Build Go environment.

        1. Clone repository.

          git clone -b release-4.1 https://github.com/vesoft-inc/nebula-importer.git\n

          Note

          Use the correct branch. Different branches have different RPC protocols.

        2. Access the directory nebula-importer.

          cd nebula-importer\n
        3. Compile the source code.

          make build\n
        4. Start the service.

          ./bin/nebula-importer --config <yaml_config_file_path>\n
        "},{"location":"import-export/use-importer/#run_in_docker_mode","title":"Run in Docker mode","text":"

        Instead of installing the Go locale locally, you can use Docker to pull the image of the NebulaGraph Importer and mount the local configuration file and CSV data file into the container. The command is as follows:

        docker pull vesoft/nebula-importer:<version>\ndocker run --rm -ti \\\n      --network=host \\\n      -v <config_file>:<config_file> \\\n      -v <data_dir>:<data_dir> \\\n      vesoft/nebula-importer:<version> \\\n      --config <config_file>\n
        • <config_file>: The absolute path to the YAML configuration file.
        • <data_dir>: The absolute path to the CSV data file. If the file is not local, ignore this parameter.
        • <version>: NebulaGraph 3.x Please fill in 'v3'.

        Note

        A relative path is recommended. If you use a local absolute path, check that the path maps to the path in the Docker.

        Example:

        docker pull vesoft/nebula-importer:v4\ndocker run --rm -ti \\\n      --network=host \\\n      -v /home/user/config.yaml:/home/user/config.yaml \\\n      -v /home/user/data:/home/user/data \\\n      vesoft/nebula-importer:v4 \\\n      --config /home/user/config.yaml\n
        "},{"location":"import-export/use-importer/#configuration_file_description","title":"Configuration File Description","text":"

        Various example configuration files are available within the Github of the NebulaGraph Importer. The configuration files are used to describe information about the files to be imported, NebulaGraph server information, etc. The following section describes the fields within the configuration file in categories.

        Note

        If users download a binary package, create the configuration file manually.

        "},{"location":"import-export/use-importer/#client_configuration","title":"Client configuration","text":"

        Client configuration stores the configuration associated with the client's connection to the NebulaGraph.

        The example configuration is as follows:

        client:\n  version: v3\n  address: \"192.168.1.100:9669,192.168.1.101:9669\"\n  user: root\n  password: nebula\n  ssl:\n    enable: true\n    certPath: \"/home/xxx/cert/importer.crt\"\n    keyPath: \"/home/xxx/cert/importer.key\"\n    caPath: \"/home/xxx/cert/root.crt\"\n    insecureSkipVerify: false\n  concurrencyPerAddress: 10\n  reconnectInitialInterval: 1s\n  retry: 3\n  retryInitialInterval: 1s\n
        Parameter Default value Required Description client.version v3 Yes Specifies the major version of the NebulaGraph. Currently only v3 is supported. client.address \"127.0.0.1:9669\" Yes Specifies the address of the NebulaGraph. Multiple addresses are separated by commas. client.user root No NebulaGraph user name. client.password nebula No The password for the NebulaGraph user name. client.ssl.enable false No Specifies whether to enable SSL authentication. client.ssl.certPath - No Specifies the storage path for the SSL public key certificate.This parameter is required when SSL authentication is enabled. client.ssl.keyPath - No S pecifies the storage path for the SSL key.This parameter is required when SSL authentication is enabled. client.ssl.caPath - No Specifies the storage path for the CA root certificate.This parameter is required when SSL authentication is enabled. client.ssl.insecureSkipVerify false No Specifies whether the client skips verifying the server's certificate chain and hostname. If set to true, any certificate chain and hostname provided by the server is accepted. client.concurrencyPerAddress 10 No The number of concurrent client connections for a single graph service. client.retryInitialInterval 1s No Reconnect interval time. client.retry 3 No The number of retries for failed execution of the nGQL statement. client.retryInitialInterval 1s No Retry interval time."},{"location":"import-export/use-importer/#manager_configuration","title":"Manager configuration","text":"

        Manager configuration is a human-controlled configuration after connecting to the database.

        The example configuration is as follows:

        manager:\n  spaceName: basic_string_examples\n  batch: 128\n  readerConcurrency: 50\n  importerConcurrency: 512\n  statsInterval: 10s\n  hooks:\n    before:\n      - statements:\n        - UPDATE CONFIGS storage:wal_ttl=3600;\n        - UPDATE CONFIGS storage:rocksdb_column_family_options = { disable_auto_compactions = true };\n      - statements:\n        - |\n            DROP SPACE IF EXISTS basic_string_examples;\n            CREATE SPACE IF NOT EXISTS basic_string_examples(partition_num=5, replica_factor=1, vid_type=int);\n            USE basic_string_examples;\n        wait: 10s\n    after:\n      - statements:\n          - |\n            UPDATE CONFIGS storage:wal_ttl=86400;\n            UPDATE CONFIGS storage:rocksdb_column_family_options = { disable_auto_compactions = false };\n
        Parameter Default value Required Description manager.spaceName - Yes Specifies the NebulaGraph space to import the data into. Do not support importing multiple map spaces at the same time. manager.batch 128 No The batch size for executing statements (global configuration). Setting the batch size individually for a data source can using the parameter sources.batch below. manager.readerConcurrency 50 No The number of concurrent reads of the data source by the reader. manager.importerConcurrency 512 No The number of concurrent nGQL statements generated to be executed, and then will call the client to execute these nGQL statements. manager.statsInterval 10s No The time interval for printing statistical information manager.hooks.before.[].statements - No The command to execute in the graph space before importing. manager.hooks.before.[].wait - No The wait time after statements are executed. manager.hooks.after.[].statements - No The commands to execute in the graph space after importing. manager.hooks.after.[].wait - No The wait time after statements are executed."},{"location":"import-export/use-importer/#log_configuration","title":"Log configuration","text":"

        Log configuration is the logging-related configuration.

        The example configuration is as follows:

        log:\n  level: INFO\n  console: true\n  files:\n    - logs/nebula-importer.log\n
        Parameter Default value Required Description log.level INFO No Specifies the log level. Optional values are DEBUG, INFO, WARN, ERROR, PANIC, FATAL. log.console true No Whether to print the logs to console synchronously when storing logs. log.files - No The log file path. The log directory must exist."},{"location":"import-export/use-importer/#source_configuration","title":"Source configuration","text":"

        The Source configuration requires the configuration of data source information, data processing methods, and Schema mapping.

        The example configuration is as follows:

        sources:\n  - path: ./person.csv  # Required. Specifies the path where the data files are stored. If a relative path is used, the path and current configuration file directory are spliced. Wildcard filename is also supported, for example: ./follower-*.csv, please make sure that all matching files with the same schema.\n#  - s3: # AWS S3\n#      endpoint: endpoint    # Optional. The endpoint of S3 service, can be omitted if using AWS S3.\n#      region: us-east-1     # Required. The region of S3 service.\n#      bucket: gdelt-open-data    # Required. The bucket of file in S3 service.\n#      key: events/20190918.export.csv     # Required. The object key of file in S3 service.\n#      accessKeyID: \"\"    # Optional. The access key of S3 service. If it is public data, no need to configure.\n#      accessKeySecret: \"\"     # Optional. The secret key of S3 service. If it is public data, no need to configure.\n#  - oss:\n#      endpoint: https://oss-cn-hangzhou.aliyuncs.com    # Required. The endpoint of OSS service.\n#      bucket: bucketName    # Required. The bucket of file in OSS service.\n#      key: objectKey    # Required. The object key of file in OSS service.\n#      accessKeyID: accessKey    # Required. The access key of OSS service.\n#      accessKeySecret: secretKey    # Required. The secret key of OSS service.\n#  - ftp:\n#      host: 192.168.0.10    # Required. The host of FTP service.\n#      port: 21    # Required. The port of FTP service.\n#      user: user    # Required. The user of FTP service.\n#      password: password    # Required. The password of FTP service.\n#      path: \"/events/20190918.export.csv\"    # Required. The path of file in the FTP service.\n#  - sftp:\n#      host: 192.168.0.10    # Required. The host of SFTP service.\n#      port: 22    # Required. The port of SFTP service.\n#      user: user    # Required. The user of SFTP service.\n#      password: password    # Optional. The password of SFTP service.\n#      keyFile: keyFile    # Optional. The ssh key file path of SFTP service.\n#      keyData: keyData    $ Optional. The ssh key file content of SFTP service.\n#      passphrase: passphrase    # Optional. The ssh key passphrase of SFTP service.\n#      path: \"/events/20190918.export.csv\"    # Required. The path of file in the SFTP service.\n#  - hdfs:\n#      address: \"127.0.0.1:8020\"    # Required. The address of HDFS service.\n#      user: \"hdfs\"    # Optional. The user of HDFS service.\n#      servicePrincipalName: <Kerberos Service Principal Name>  # Optional. The name of the Kerberos service instance for the HDFS service when Kerberos authentication is enabled.\n#      krb5ConfigFile: <Kerberos config file>  # Optional. The path to the Kerberos configuration file for the HDFS service when Kerberos authentication is enabled. Defaults to `/etc/krb5.conf`.\n#      ccacheFile: <Kerberos ccache file>  # Optional. The path to the Kerberos ccache file for the HDFS service when Kerberos authentication is enabled.\n#      keyTabFile: <Kerberos keytab file>  # Optional. The path to the Kerberos keytab file for the HDFS service when Kerberos authentication is enabled.\n#      password: <Kerberos password>  # Optional. The Kerberos password for the HDFS service when Kerberos authentication is enabled.\n#      dataTransferProtection: <Kerberos Data Transfer Protection>  # Optional. The type of transport encryption when Kerberos authentication is enabled. Optional values are `authentication`, `integrity`, `privacy`.\n#      disablePAFXFAST: false  # Optional. Whether to disable the use of PA_FX_FAST for clients.\n#      path: \"/events/20190918.export.csv\"    # Required. The path to the file in the HDFS service. Wildcard filenames are also supported, e.g. `/events/*.export.csv`, make sure all matching files have the same schema.\n#  - gcs: # Google Cloud Storage\n#      bucket: chicago-crime-sample  # Required. The name of the bucket in the GCS service.\n#      key: stats/000000000000.csv  # Required. The path to the file in the GCS service.\n#      withoutAuthentication: false  # Optional. Whether to anonymize access. Defaults to false, which means access with credentials.\n#      # When using credentials access, one of the credentialsFile and credentialsJSON parameters is sufficient.\n#      credentialsFile: \"/path/to/your/credentials/file\"  # Optional. The path to the credentials file for the GCS service.\n#      credentialsJSON: '{  # Optional. The JSON content of the credentials for the GCS service.\n#        \"type\": \"service_account\",\n#        \"project_id\": \"your-project-id\",\n#        \"private_key_id\": \"key-id\",\n#        \"private_key\": \"-----BEGIN PRIVATE KEY-----\\nxxxxx\\n-----END PRIVATE KEY-----\\n\",\n#        \"client_email\": \"your-client@your-project-id.iam.gserviceaccount.com\",\n#        \"client_id\": \"client-id\",\n#        \"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\",\n#        \"token_uri\": \"https://oauth2.googleapis.com/token\",\n#        \"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\",\n#        \"client_x509_cert_url\": \"https://www.googleapis.com/robot/v1/metadata/x509/your-client%40your-project-id.iam.gserviceaccount.com\",\n#        \"universe_domain\": \"googleapis.com\"\n#      }'\n    batch: 256\n    csv:\n      delimiter: \"|\"\n      withHeader: false\n      lazyQuotes: false\n    tags:\n    - name: Person\n#      mode: INSERT\n#      filter:  \n#        expr: Record[1] == \"XXX\"    \n      id:\n        type: \"STRING\"\n        function: \"hash\"\n#       index: 0        \n        concatItems:\n          - person_\n          - 0\n          - _id\n      props:\n        - name: \"firstName\"\n          type: \"STRING\"\n          index: 1\n        - name: \"lastName\"\n          type: \"STRING\"\n          index: 2\n        - name: \"gender\"\n          type: \"STRING\"\n          index: 3\n          nullable: true\n          defaultValue: female\n        - name: \"birthday\"\n          type: \"DATE\"\n          index: 4\n          nullable: true\n          nullValue: _NULL_\n        - name: \"creationDate\"\n          type: \"DATETIME\"\n          index: 5\n        - name: \"locationIP\"\n          type: \"STRING\"\n          index: 6\n        - name: \"browserUsed\"\n          type: \"STRING\"\n          index: 7\n  - path: ./knows.csv\n    batch: 256\n    edges:\n    - name: KNOWS # person_knows_person\n#      mode: INSERT\n#      filter:  \n#        expr: Record[1] == \"XXX\"\n      src:\n        id:\n          type: \"STRING\"\n          concatItems:\n            - person_\n            - 0\n            - _id\n      dst:\n        id:\n          type: \"STRING\"\n          concatItems:\n            - person_\n            - 1\n            - _id\n      props:\n        - name: \"creationDate\"\n          type: \"DATETIME\"\n          index: 2\n          nullable: true\n          nullValue: _NULL_\n          defaultValue: 0000-00-00T00:00:00\n

        The configuration mainly includes the following parts:

        • Specify the data source information.
        • Specifies the batch size for executing statements.
        • Specifies the CSV file format information.
        • Specifies the schema mapping for Tag.
        • Specifies the schema mapping for Edge type.
        Parameter Default value Required Description sources.pathsources.s3sources.osssources.ftpsources.sftpsources.hdfs - No Specify data source information, such as local file, HDFS, and S3. Only one source can be configured for the source. Configure multiple sources in multiple source.See the comments in the example for configuration items for different data sources. sources.batch 256 No The batch size for executing statements when importing this data source. The priority is higher than manager.batch. sources.csv.delimiter , No Specifies the delimiter for the CSV file. Only 1-character string separators are supported. Special characters like tabs (\\t) and hexadecimal values (e.g., 0x03 or Ctrl+C) must be properly escaped and enclosed in double quotes, such as \"\\t\" for tabs and \"\\x03\" or \"\\u0003\" for hexadecimal values, instead of using single quotes. For details on escaping special characters in yaml format, see Escaped Characters. sources.csv.withHeader false No Whether to ignore the first record in the CSV file. sources.csv.lazyQuotes false No Whether to allow lazy quotes. If lazyQuotes is true, a quote may appear in an unquoted field and a non-doubled quote may appear in a quoted field. sources.tags.name - Yes The tag name. sources.tags.mode INSERT No Batch operation types, including insert, update and delete. Optional values are INSERT, UPDATE and DELETE. sources.tags.filter.expr - No Filter the data and only import if the filter conditions are met. Supported comparison characters are ==, ! =, <, >, <= and >=. Logical operators supported are not (!) , and (&&) and or (||). For example (Record[0] == \"Mahinda\" or Record[0] == \"Michael\") and Record[3] == \"male\". sources.tags.id.type STRING No The type of the VID. sources.tags.id.function - No Functions to generate the VID. Currently, only function hash are supported. sources.tags.id.index - No The column number corresponding to the VID in the data file. If sources.tags.id.concatItems is not configured, this parameter must be configured. sources.tags.id.concatItems - No Used to concatenate two or more arrays, the concatenated items can be string, int or mixed. string stands for a constant, int for an index column. If this parameter is set, the sources.tags.id.index parameter will not take effect. sources.tags.ignoreExistedIndex true No Whether to enable IGNORE_EXISTED_INDEX, that is, do not update index after insertion vertex. sources.tags.props.name - Yes The tag property name, which must match the Tag property in the database. sources.tags.props.type STRING No Property data type, supporting BOOL, INT, FLOAT, DOUBLE, STRING, TIME, TIMESTAMP, DATE, DATETIME, GEOGRAPHY, GEOGRAPHY(POINT), GEOGRAPHY(LINESTRING) and GEOGRAPHY(POLYGON). sources.tags.props.index - Yes The property corresponds to the column number in the data file. sources.tags.props.nullable false No Whether this prop property can be NULL, optional values is true or false. sources.tags.props.nullValue - No Ignored when nullable is false. The value used to determine whether it is a NULL. The property is set to NULL when the value is equal to nullValue. sources.tags.props.alternativeIndices - No Ignored when nullable is false. The property is fetched from records according to the indices in order until not equal to nullValue. sources.tags.props.defaultValue - No Ignored when nullable is false. The property default value, when all the values obtained by index and alternativeIndices are nullValue. sources.edges.name - Yes The edge type name. sources.edges.mode INSERT No Batch operation types, including insert, update and delete. Optional values are INSERT, UPDATE and DELETE. sources.edges.filter.expr - No Filter the data and only import if the filter conditions are met. Supported comparison characters are ==, ! =, <, >, <= and >=. Logical operators supported are not (!) , and (&&) and or (||). For example (Record[0] == \"Mahinda\" or Record[0] == \"Michael\") and Record[3] == \"male\". sources.edges.src.id.type STRING No The data type of the VID at the starting vertex on the edge. sources.edges.src.id.index - Yes The column number in the data file corresponding to the VID at the starting vertex on the edge. sources.edges.dst.id.type STRING No The data type of the VID at the destination vertex on the edge. sources.edges.dst.id.index - Yes The column number in the data file corresponding to the VID at the destination vertex on the edge. sources.edges.rank.index - No The column number in the data file corresponding to the rank on the edge. sources.edges.ignoreExistedIndex true No Whether to enable IGNORE_EXISTED_INDEX, that is, do not update index after insertion vertex. sources.edges.props.name - No The edge type property name, which must match the Tag property in the database. sources.edges.props.type STRING No Property data type, supporting BOOL, INT, FLOAT, DOUBLE, STRING, TIME, TIMESTAMP, DATE, DATETIME, GEOGRAPHY, GEOGRAPHY(POINT), GEOGRAPHY(LINESTRING) and GEOGRAPHY(POLYGON). sources.edges.props.index - No The property corresponds to the column number in the data file. sources.edges.props.nullable - No Whether this prop property can be NULL, optional values is true or false. sources.edges.props.nullValue - No Ignored when nullable is false. The value used to determine whether it is a NULL. The property is set to NULL when the value is equal to nullValue. sources.edges.props.defaultValue - No Ignored when nullable is false. The property default value, when all the values obtained by index and alternativeIndices are nullValue.

        Note

        The sequence numbers of the columns in the CSV file start from 0, that is, the sequence numbers of the first column are 0, and the sequence numbers of the second column are 1.

        "},{"location":"import-export/use-importer/#faq","title":"FAQ","text":""},{"location":"import-export/use-importer/#what_are_the_descriptions_of_the_fields_in_the_log_output","title":"What are the descriptions of the fields in the log output?","text":"

        The following is an example of a log entry:

        \u201cmsg\u201d: \u201c44m20s 2h7m10s 25.85%(129 GiB/498 GiB) Records{Finished: 302016726, Failed: 0, Rate: 113538.13/s}, Requests{Finished: 181786, Failed: 0, Latency: 4.046496736s/4.06694393s, Rate: 68.34/s}, Processed{Finished: 908575178, Failed: 0, Rate: 341563.62/s}\u201d\n

        The fields are described below:

        • 44m20s 2h7m10s 25.85%(129 GiB/498 GiB) corresponds to basic information about the importing process.
          • The consumed time.
          • The expected remaining time.
          • The percentage of data processed.
          • The size of data processed.
          • The total data size.
        • Records corresponds to the records of the CSV files.
          • Finished: The number of the completed records.
          • Failed: The number of the failed records.
          • Rate: The number of records imported per second.
        • Requests corresponds to the requests.
          • Finished: The number of the completed requests.
          • Failed: The number of the failed requests.
          • Latency: The time consumed by server-side requests / The time consumed by client-side requests.
          • Rate: The number of requests processed per second.
        • Processed corresponds to nodes and edges.
          • Finished: The number of the completed nodes and edges.
          • Failed: The number of the failed nodes and edges.
          • Rate: The number of nodes and edges processed per second.
        "},{"location":"import-export/write-tools/","title":"Import and export tools overview","text":""},{"location":"import-export/write-tools/#import_tools","title":"Import tools","text":"

        There are many ways to write NebulaGraph master:

        • Import with the command -f: This method imports a small number of prepared nGQL files, which is suitable to prepare for a small amount of manual test data.
        • Import with Studio: This method uses a browser to import multiple CSV files of this machine. A single file cannot exceed 100 MB, and its format is limited.
        • Import with Importer: This method imports multiple CSV files on a single machine with unlimited size and flexible format. Suitable for scenarios with less than one billion records of data.
        • Import with Exchange: This method imports from various distribution sources, such as Neo4j, Hive, MySQL, etc., which requires a Spark cluster. Suitable for scenarios with more than one billion records of data.
        • Read and write APIs with Spark-connector/Flink-connector: This method requires you to write a small amount of code to make use of the APIs provided by Spark/Flink connector.
        • Import with C++/GO/Java/Python SDK: This method imports in the way of writing programs, which requires certain programming and tuning skills.

        The following figure shows the positions of these ways:

        "},{"location":"import-export/write-tools/#export_tools","title":"Export tools","text":"
        • Read and write APIs with Spark-connector/Flink-connector: This method requires you to write a small amount of code to make use of the APIs provided by Spark/Flink connector.
        • Export the data in database to a CSV file or another graph space (different NebulaGraph database clusters are supported) using the export function of the Exchange.

          Enterpriseonly

          The export function is exclusively available in the Enterprise Edition. If you require access to this version, please contact us.

        "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/","title":"Exchange FAQ","text":""},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#compilation","title":"Compilation","text":""},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_some_packages_not_in_central_repository_failed_to_download_error_could_not_resolve_dependencies_for_project_xxx","title":"Q: Some packages not in central repository failed to download, error: Could not resolve dependencies for project xxx","text":"

        Please check the mirror part of Maven installation directory libexec/conf/settings.xml:

        <mirror>\n    <id>alimaven</id>\n    <mirrorOf>central</mirrorOf>\n    <name>aliyun maven</name>\n    <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>\n</mirror>\n

        Check whether the value of mirrorOf is configured to *. If it is, change it to central or *,!SparkPackagesRepo,!bintray-streamnative-maven.

        Reason: There are two dependency packages in Exchange's pom.xml that are not in Maven's central repository. pom.xml configures the repository address for these two dependencies. If the mirrorOf value for the mirror address configured in Maven is *, all dependencies will be downloaded from the Central repository, causing the download to fail.

        "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_unable_to_download_snapshot_packages_when_compiling_exchange","title":"Q: Unable to download SNAPSHOT packages when compiling Exchange","text":"

        Problem description: The system reports Could not find artifact com.vesoft:client:jar:xxx-SNAPSHOT when compiling.

        Cause: There is no local Maven repository for storing or downloading SNAPSHOT packages. The default central repository in Maven only stores official releases, not development versions (SNAPSHOT).

        Solution: Add the following configuration in the profiles scope of Maven's setting.xml file:

          <profile>\n     <activation>\n        <activeByDefault>true</activeByDefault>\n     </activation>\n     <repositories>\n        <repository>\n            <id>snapshots</id>\n            <url>https://oss.sonatype.org/content/repositories/snapshots/</url>\n            <snapshots>\n               <enabled>true</enabled>\n            </snapshots>\n      </repository>\n     </repositories>\n  </profile>\n
        "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#execution","title":"Execution","text":""},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_error_javalangclassnotfoundexception_comvesoftnebulaexchangeexchange","title":"Q: Error: java.lang.ClassNotFoundException: com.vesoft.nebula.exchange.Exchange","text":"

        To submit a task in Yarn-Cluster mode, run the following command, especially the two '--conf' commands in the example.

        $SPARK_HOME/bin/spark-submit --class com.vesoft.nebula.exchange.Exchange \\\n--master yarn-cluster \\\n--files application.conf \\\n--conf spark.driver.extraClassPath=./ \\\n--conf spark.executor.extraClassPath=./ \\\nnebula-exchange-3.0.0.jar \\\n-c application.conf\n
        "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_error_method_name_xxx_not_found","title":"Q: Error: method name xxx not found","text":"

        Generally, the port configuration is incorrect. Check the port configuration of the Meta service, Graph service, and Storage service.

        "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_error_nosuchmethod_methodnotfound_exception_in_thread_main_javalangnosuchmethoderror_etc","title":"Q: Error: NoSuchMethod, MethodNotFound (Exception in thread \"main\" java.lang.NoSuchMethodError, etc)","text":"

        Most errors are caused by JAR package conflicts or version conflicts. Check whether the version of the error reporting service is the same as that used in Exchange, especially Spark, Scala, and Hive.

        "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_when_exchange_imports_hive_data_error_exception_in_thread_main_orgapachesparksqlanalysisexception_table_or_view_not_found","title":"Q: When Exchange imports Hive data, error: Exception in thread \"main\" org.apache.spark.sql.AnalysisException: Table or view not found","text":"

        Check whether the -h parameter is omitted in the command for submitting the Exchange task and whether the table and database are correct, and run the user-configured exec statement in spark-SQL to verify the correctness of the exec statement.

        "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_run_error_comfacebookthriftprotocoltprotocolexception_expected_protocol_id_xxx","title":"Q: Run error: com.facebook.thrift.protocol.TProtocolException: Expected protocol id xxx","text":"

        Check that the NebulaGraph service port is configured correctly.

        • For source, RPM, or DEB installations, configure the port number corresponding to --port in the configuration file for each service.
        • For docker installation, configure the docker mapped port number as follows:

          Execute docker-compose ps in the nebula-docker-compose directory, for example:

          $ docker-compose ps\n              Name                             Command                  State                                                         Ports\n---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\nnebula-docker-compose_graphd_1      /usr/local/nebula/bin/nebu ...   Up (healthy)   0.0.0.0:33205->19669/tcp, 0.0.0.0:33204->19670/tcp, 0.0.0.0:9669->9669/tcp\nnebula-docker-compose_metad0_1      ./bin/nebula-metad --flagf ...   Up (healthy)   0.0.0.0:33165->19559/tcp, 0.0.0.0:33162->19560/tcp, 0.0.0.0:33167->9559/tcp, 9560/tcp\nnebula-docker-compose_metad1_1      ./bin/nebula-metad --flagf ...   Up (healthy)   0.0.0.0:33166->19559/tcp, 0.0.0.0:33163->19560/tcp, 0.0.0.0:33168->9559/tcp, 9560/tcp\nnebula-docker-compose_metad2_1      ./bin/nebula-metad --flagf ...   Up (healthy)   0.0.0.0:33161->19559/tcp, 0.0.0.0:33160->19560/tcp, 0.0.0.0:33164->9559/tcp, 9560/tcp\nnebula-docker-compose_storaged0_1   ./bin/nebula-storaged --fl ...   Up (healthy)   0.0.0.0:33180->19779/tcp, 0.0.0.0:33178->19780/tcp, 9777/tcp, 9778/tcp, 0.0.0.0:33183->9779/tcp, 9780/tcp\nnebula-docker-compose_storaged1_1   ./bin/nebula-storaged --fl ...   Up (healthy)   0.0.0.0:33175->19779/tcp, 0.0.0.0:33172->19780/tcp, 9777/tcp, 9778/tcp, 0.0.0.0:33177->9779/tcp, 9780/tcp\nnebula-docker-compose_storaged2_1   ./bin/nebula-storaged --fl ...   Up (healthy)   0.0.0.0:33184->19779/tcp, 0.0.0.0:33181->19780/tcp, 9777/tcp, 9778/tcp, 0.0.0.0:33185->9779/tcp, 9780/tcp\n

          Check the Ports column to find the docker mapped port number, for example:

          - The port number available for Graph service is 9669.

          - The port number for Meta service are 33167, 33168, 33164.

          - The port number for Storage service are 33183, 33177, 33185.

        "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_error_exception_in_thread_main_comfacebookthriftprotocoltprotocolexception_the_field_code_has_been_assigned_the_invalid_value_-4","title":"Q: Error: Exception in thread \"main\" com.facebook.thrift.protocol.TProtocolException: The field 'code' has been assigned the invalid value -4","text":"

        Check whether the version of Exchange is the same as that of NebulaGraph. For more information, see Limitations.

        "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_how_to_correct_the_encoding_error_when_importing_data_in_a_spark_environment","title":"Q: How to correct the encoding error when importing data in a Spark environment?","text":"

        It may happen if the property value of the data contains Chinese characters. The solution is to add the following options before the JAR package path in the import command:

        --conf spark.driver.extraJavaOptions=-Dfile.encoding=utf-8\n--conf spark.executor.extraJavaOptions=-Dfile.encoding=utf-8\n

        Namely:

        <spark_install_path>/bin/spark-submit --master \"local\" \\\n--conf spark.driver.extraJavaOptions=-Dfile.encoding=utf-8 \\\n--conf spark.executor.extraJavaOptions=-Dfile.encoding=utf-8 \\\n--class com.vesoft.nebula.exchange.Exchange \\\n<nebula-exchange-3.x.y.jar_path> -c <application.conf_path>\n

        In YARN, use the following command:

        <spark_install_path>/bin/spark-submit \\\n--class com.vesoft.nebula.exchange.Exchange \\\n--master yarn-cluster \\\n--files <application.conf_path> \\\n--conf spark.driver.extraClassPath=./ \\\n--conf spark.executor.extraClassPath=./ \\\n--conf spark.driver.extraJavaOptions=-Dfile.encoding=utf-8 \\\n--conf spark.executor.extraJavaOptions=-Dfile.encoding=utf-8 \\\n<nebula-exchange-3.x.y.jar_path> \\\n-c application.conf\n
        "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_orgrocksdbrocksdbexception_while_open_a_file_for_appending_pathsst1-xxxsst_no_such_file_or_directory","title":"Q: org.rocksdb.RocksDBException: While open a file for appending: /path/sst/1-xxx.sst: No such file or directory","text":"

        Solution:

        1. Check if /path exists. If not, or if the path is set incorrectly, create or correct it.
        2. Check if Spark's current user on each machine has the operation permission on /path. If not, grant the permission.
        "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#configuration","title":"Configuration","text":""},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_which_configuration_fields_will_affect_import_performance","title":"Q: Which configuration fields will affect import performance?","text":"
        • batch: The number of data contained in each nGQL statement sent to the NebulaGraph service.
        • partition: The number of partitions to be created when the data is written to NebulaGraph, indicating the number of concurrent data imports.
        • nebula.rate: Get a token from the token bucket before sending a request to NebulaGraph.

          - limit: Represents the size of the token bucket.

          - timeout: Represents the timeout period for obtaining the token.

        The values of these four parameters can be adjusted appropriately according to the machine performance. If the leader of the Storage service changes during the import process, you can adjust the values of these four parameters to reduce the import speed.

        "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#others","title":"Others","text":""},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_which_versions_of_nebulagraph_are_supported_by_exchange","title":"Q: Which versions of NebulaGraph are supported by Exchange?","text":"

        See Limitations.

        "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_what_is_the_relationship_between_exchange_and_spark_writer","title":"Q: What is the relationship between Exchange and Spark Writer?","text":"

        Exchange is the Spark application developed based on Spark Writer. Both are suitable for bulk migration of cluster data to NebulaGraph in a distributed environment, but later maintenance work will be focused on Exchange. Compared with Spark Writer, Exchange has the following improvements:

        • It supports more abundant data sources, such as MySQL, Neo4j, Hive, HBase, Kafka, Pulsar, etc.
        • It fixed some problems of Spark Writer. For example, when Spark reads data from HDFS, the default source data is String, which may be different from the NebulaGraph's Schema. So Exchange adds automatic data type matching and type conversion. When the data type in the NebulaGraph's Schema is non-String (e.g. double), Exchange converts the source data of String type to the corresponding type.
        "},{"location":"import-export/nebula-exchange/ex-ug-compile/","title":"Get Exchange","text":"

        This topic introduces how to get the JAR file of NebulaGraph Exchange.

        "},{"location":"import-export/nebula-exchange/ex-ug-compile/#download_the_jar_file_directly","title":"Download the JAR file directly","text":"

        The JAR file of Exchange Community Edition can be downloaded directly.

        To download Exchange Enterprise Edition, contact us.

        "},{"location":"import-export/nebula-exchange/ex-ug-compile/#get_the_jar_file_by_compiling_the_source_code","title":"Get the JAR file by compiling the source code","text":"

        You can get the JAR file of Exchange Community Edition by compiling the source code. The following introduces how to compile the source code of Exchange.

        Enterpriseonly

        You can get Exchange Enterprise Edition in NebulaGraph Enterprise Edition Package only.

        "},{"location":"import-export/nebula-exchange/ex-ug-compile/#prerequisites","title":"Prerequisites","text":"
        • Install Maven.
        • Install the correct version of Apache Spark. Exporting data from different sources requires different Spark versions. For more information, see Software dependencies.
        "},{"location":"import-export/nebula-exchange/ex-ug-compile/#steps","title":"Steps","text":"
        1. Clone the repository nebula-exchange in the / directory.

          git clone -b release-3.7 https://github.com/vesoft-inc/nebula-exchange.git\n
        2. Switch to the directory nebula-exchange.

          cd nebula-exchange\n
        3. Package NebulaGraph Exchange. Run the following command based on the Spark version:

          • For Spark 2.2\uff1a

            mvn clean package -Dmaven.test.skip=true -Dgpg.skip -Dmaven.javadoc.skip=true \\\n-pl nebula-exchange_spark_2.2 -am -Pscala-2.11 -Pspark-2.2\n
          • For Spark 2.4\uff1a

            mvn clean package -Dmaven.test.skip=true -Dgpg.skip -Dmaven.javadoc.skip=true \\\n-pl nebula-exchange_spark_2.4 -am -Pscala-2.11 -Pspark-2.4\n
          • For Spark 3.0\uff1a

            mvn clean package -Dmaven.test.skip=true -Dgpg.skip -Dmaven.javadoc.skip=true \\\n-pl nebula-exchange_spark_3.0 -am -Pscala-2.12 -Pspark-3.0\n

        After the compilation is successful, you can find the nebula-exchange_spark_x.x-release-3.7.jar file in the nebula-exchange_spark_x.x/target/ directory. x.x indicates the Spark version, for example, 2.4.

        Note

        The JAR file version changes with the release of the NebulaGraph Java Client. Users can view the latest version on the Releases page.

        When migrating data, you can refer to configuration file target/classes/application.conf.

        "},{"location":"import-export/nebula-exchange/ex-ug-compile/#failed_to_download_the_dependency_package","title":"Failed to download the dependency package","text":"

        If downloading dependencies fails when compiling:

        • Check the network settings and ensure that the network is normal.
        • Modify the mirror part of Maven installation directory libexec/conf/settings.xml:

          <mirror>\n <id>alimaven</id>\n <mirrorOf>central</mirrorOf>\n <name>aliyun maven</name>\n <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>\n</mirror>\n
        "},{"location":"import-export/nebula-exchange/about-exchange/ex-ug-limitations/","title":"Limitations","text":"

        This topic describes some of the limitations of using Exchange 3.x.

        "},{"location":"import-export/nebula-exchange/about-exchange/ex-ug-limitations/#environment","title":"Environment","text":"

        Exchange 3.x supports the following operating systems:

        • CentOS 7
        • macOS
        "},{"location":"import-export/nebula-exchange/about-exchange/ex-ug-limitations/#software_dependencies","title":"Software dependencies","text":"

        To ensure the healthy operation of Exchange, ensure that the following software has been installed on the machine:

        • Java version 1.8
        • Scala version 2.10.7, 2.11.12, or 2.12.10
        • Apache Spark. The requirements for Spark versions when using Exchange to export data from data sources are as follows. In the following table, Y means that the corresponding Spark version is supported, and N means not supported.

          Note

          Use the correct Exchange JAR file based on the Spark version. For example, for Spark version 2.4, use nebula-exchange_spark_2.4-3.7.0.jar.

          Data source Spark 2.2 Spark 2.4 Spark 3 CSV file Y N Y JSON file Y Y Y ORC file Y Y Y Parquet file Y Y Y HBase Y Y Y MySQL Y Y Y PostgreSQL Y Y Y Oracle Y Y Y ClickHouse Y Y Y Neo4j N Y N Hive Y Y Y MaxCompute N Y N Pulsar N Y Untested Kafka N Y Untested NebulaGraph N Y N

        Hadoop Distributed File System (HDFS) needs to be deployed in the following scenarios:

        • Migrate HDFS data
        • Generate SST files
        "},{"location":"import-export/nebula-exchange/about-exchange/ex-ug-what-is-exchange/","title":"What is NebulaGraph Exchange","text":"

        NebulaGraph Exchange (Exchange) is an Apache Spark\u2122 application for bulk migration of cluster data to NebulaGraph in a distributed environment, supporting batch and streaming data migration in a variety of formats.

        Exchange consists of Reader, Processor, and Writer. After Reader reads data from different sources and returns a DataFrame, the Processor iterates through each row of the DataFrame and obtains the corresponding value based on the mapping between fields in the configuration file. After iterating through the number of rows in the specified batch, Writer writes the captured data to the NebulaGraph at once. The following figure illustrates the process by which Exchange completes the data conversion and migration.

        "},{"location":"import-export/nebula-exchange/about-exchange/ex-ug-what-is-exchange/#editions","title":"Editions","text":"

        Exchange has two editions, the Community Edition and the Enterprise Edition. The Community Edition is open source developed on GitHub. The Enterprise Edition supports not only the functions of the Community Edition but also adds additional features. For details, see Comparisons.

        "},{"location":"import-export/nebula-exchange/about-exchange/ex-ug-what-is-exchange/#scenarios","title":"Scenarios","text":"

        Exchange applies to the following scenarios:

        • Streaming data from Kafka and Pulsar platforms, such as log files, online shopping data, activities of game players, information on social websites, financial transactions or geospatial services, and telemetry data from connected devices or instruments in the data center, are required to be converted into the vertex or edge data of the property graph and import them into the NebulaGraph database.
        • Batch data, such as data from a time period, needs to be read from a relational database (such as MySQL) or a distributed file system (such as HDFS), converted into vertex or edge data for a property graph, and imported into the NebulaGraph database.
        • A large volume of data needs to be generated into SST files that NebulaGraph can recognize and then imported into the NebulaGraph database.
        • The data saved in NebulaGraph needs to be exported.

          Enterpriseonly

          Exporting the data saved in NebulaGraph is supported by Exchange Enterprise Edition only.

        "},{"location":"import-export/nebula-exchange/about-exchange/ex-ug-what-is-exchange/#advantages","title":"Advantages","text":"

        Exchange has the following advantages:

        • High adaptability: It supports importing data into the NebulaGraph database in a variety of formats or from a variety of sources, making it easy to migrate data.
        • SST import: It supports converting data from different sources into SST files for data import.
        • SSL encryption: It supports establishing the SSL encryption between Exchange and NebulaGraph to ensure data security.
        • Resumable data import: It supports resumable data import to save time and improve data import efficiency.

          Note

          Resumable data import is currently supported when migrating Neo4j data only.

        • Asynchronous operation: An insert statement is generated in the source data and sent to the Graph service. Then the insert operation is performed.
        • Great flexibility: It supports importing multiple Tags and Edge types at the same time. Different Tags and Edge types can be from different data sources or in different formats.
        • Statistics: It uses the accumulator in Apache Spark\u2122 to count the number of successful and failed insert operations.
        • Easy to use: It adopts the Human-Optimized Config Object Notation (HOCON) configuration file format and has an object-oriented style, which is easy to understand and operate.
        "},{"location":"import-export/nebula-exchange/about-exchange/ex-ug-what-is-exchange/#version_compatibility","title":"Version compatibility","text":"

        Exchange supports Spark versions 2.2.x, 2.4.x, and 3.x.x, which are named nebula-exchange_spark_2.2, nebula-exchange_spark_2.4, and nebula-exchange_spark_3.0 for different Spark versions.

        The correspondence between the NebulaGraph Exchange version (the JAR version), the NebulaGraph core version and the Spark version is as follows.

        Exchange version NebulaGraph version Spark version nebula-exchange_spark_3.0-3.0-SNAPSHOT.jar nightly 3.3.x\u30013.2.x\u30013.1.x\u30013.0.x nebula-exchange_spark_2.4-3.0-SNAPSHOT.jar nightly 2.4.x nebula-exchange_spark_2.2-3.0-SNAPSHOT.jar nightly 2.2.x nebula-exchange_spark_3.0-3.4.0.jar 3.x.x 3.3.x\u30013.2.x\u30013.1.x\u30013.0.x nebula-exchange_spark_2.4-3.4.0.jar 3.x.x 2.4.x nebula-exchange_spark_2.2-3.4.0.jar 3.x.x 2.2.x nebula-exchange_spark_3.0-3.3.0.jar 3.x.x 3.3.x\u30013.2.x\u30013.1.x\u30013.0.x nebula-exchange_spark_2.4-3.3.0.jar 3.x.x 2.4.x nebula-exchange_spark_2.2-3.3.0.jar 3.x.x 2.2.x nebula-exchange_spark_3.0-3.0.0.jar 3.x.x 3.3.x\u30013.2.x\u30013.1.x\u30013.0.x nebula-exchange_spark_2.4-3.0.0.jar 3.x.x 2.4.x nebula-exchange_spark_2.2-3.0.0.jar 3.x.x 2.2.x nebula-exchange-2.6.3.jar 2.6.1\u30012.6.0 2.4.x nebula-exchange-2.6.2.jar 2.6.1\u30012.6.0 2.4.x nebula-exchange-2.6.1.jar 2.6.1\u30012.6.0 2.4.x nebula-exchange-2.6.0.jar 2.6.1\u30012.6.0 2.4.x nebula-exchange-2.5.2.jar 2.5.1\u30012.5.0 2.4.x nebula-exchange-2.5.1.jar 2.5.1\u30012.5.0 2.4.x nebula-exchange-2.5.0.jar 2.5.1\u30012.5.0 2.4.x nebula-exchange-2.1.0.jar 2.0.1\u30012.0.0 2.4.x nebula-exchange-2.0.1.jar 2.0.1\u30012.0.0 2.4.x nebula-exchange-2.0.0.jar 2.0.1\u30012.0.0 2.4.x"},{"location":"import-export/nebula-exchange/about-exchange/ex-ug-what-is-exchange/#data_source","title":"Data source","text":"

        Exchange 3.7.0 supports converting data from the following formats or sources into vertexes and edges that NebulaGraph can recognize, and then importing them into NebulaGraph in the form of nGQL statements:

        • Data stored in HDFS or locally:
          • Apache Parquet
          • Apache ORC
          • JSON
          • CSV
        • Apache HBase\u2122
        • Data repository:

          • Hive
          • MaxCompute
        • Graph database: Neo4j (Client version 2.4.5-M1)
        • Relational database:
          • MySQL
          • PostgreSQL
          • Oracle
        • Column database: ClickHouse
        • Stream processing software platform: Apache Kafka\u00ae
        • Publish/Subscribe messaging platform: Apache Pulsar 2.4.5
        • JDBC

        In addition to importing data as nGQL statements, Exchange supports generating SST files for data sources and then importing SST files via Console.

        "},{"location":"import-export/nebula-exchange/about-exchange/ex-ug-what-is-exchange/#release_note","title":"Release note","text":"

        Release

        "},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-para-import-command/","title":"Options for import","text":"

        After editing the configuration file, run the following commands to import specified source data into the NebulaGraph database.

        "},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-para-import-command/#import_data","title":"Import data","text":"
        <spark_install_path>/bin/spark-submit --master \"spark://HOST:PORT\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange-2.x.y.jar_path> -c <application.conf_path> \n

        Note

        If the value of the properties contains Chinese characters, the encoding error may appear. Please add the following options when submitting the Spark task:

        --conf spark.driver.extraJavaOptions=-Dfile.encoding=utf-8\n--conf spark.executor.extraJavaOptions=-Dfile.encoding=utf-8\n

        The following table lists command parameters.

        Parameter Required Default value Description --class Yes - Specify the main class of the driver. --master Yes - Specify the URL of the master process in a Spark cluster. For more information, see master-urls. Optional values are:local: Local Mode. Run Spark applications on a single thread. Suitable for importing small data sets in a test environment.yarn: Run Spark applications on a YARN cluster. Suitable for importing large data sets in a production environment.spark://HOST:PORT: Connect to the specified Spark standalone cluster.mesos://HOST:PORT: Connect to the specified Mesos cluster.k8s://HOST:PORT: Connect to the specified Kubernetes cluster. -c/--config Yes - Specify the path of the configuration file. -h/--hive No false Specify whether importing Hive data is supported. -D/--dry No false Specify whether to check the format of the configuration file. This parameter is used to check the format of the configuration file only, it does not check the validity of tags and edges configurations and does not import data. Don't add this parameter if you need to import data. -r/--reload No - Specify the path of the reload file that needs to be reloaded.

        For more Spark parameter configurations, see Spark Configuration.

        Note

        • The version number of a JAR file is subject to the name of the JAR file that is actually compiled.
        • If users use the yarn mode to submit a job, see the following command, especially the two '--conf' commands in the example.
        $SPARK_HOME/bin/spark-submit     --master yarn \\\n--class com.vesoft.nebula.exchange.Exchange \\\n--files application.conf \\\n--conf spark.driver.extraClassPath=./ \\\n--conf spark.executor.extraClassPath=./ \\\nnebula-exchange-3.7.0.jar \\\n-c application.conf\n
        "},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-para-import-command/#import_the_reload_file","title":"Import the reload file","text":"

        If some data fails to be imported during the import, the failed data will be stored in the reload file. Use the parameter -r to import the data in reload file.

        <spark_install_path>/bin/spark-submit --master \"spark://HOST:PORT\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange-2.x.y.jar_path> -c <application.conf_path> -r \"<reload_file_path>\" \n

        If the import still fails, go to Official Forum for consultation.

        "},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/","title":"Parameters in the configuration file","text":"

        This topic describes how to automatically generate a template configuration file when users use NebulaGraph Exchange, and introduces the configuration file application.conf.

        "},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#generate_template_configuration_file_automatically","title":"Generate template configuration file automatically","text":"

        Specify the data source to be imported with the following command to get the template configuration file corresponding to the data source.

        java -cp <exchange_jar_package> com.vesoft.exchange.common.GenerateConfigTemplate -s <source_type> -p <config_file_save_path>\n

        Example:

        java -cp nebula-exchange_spark_2.4-3.0-SNAPSHOT.jar com.vesoft.exchange.common.GenerateConfigTemplate -s csv -p /home/nebula/csv_application.conf\n
        "},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#using_an_encrypted_password","title":"Using an encrypted password","text":"

        You can use either a plaintext password or an RSA encrypted password when setting the password for connecting to NebulaGraph in the configuration file.

        To use an RSA-encrypted password, you need to configure the following settings in the configuration file:

        • nebula.pswd is configured as the RSA encrypted password.
        • nebula.privateKey is configured as the key for RSA encryption.
        • nebula.enableRSA is configured as true.

        Users can use their own tools for encryption, or they can use the encryption tool provided in Exchange's JAR package, for example:

        spark-submit --master local --class com.vesoft.exchange.common.PasswordEncryption nebula-exchange_spark_2.4-3.0-SNAPSHOT.jar -p nebula\n

        The results returned are as follows:

        =================== public key begin ===================\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCLl7LaNSEXlZo2hYiJqzxgyFBQdkxbQXYU/xQthsBJwjOPhkiY37nokzKnjNlp6mv5ZUomqxLsoNQHEJ6BZD4VPiaiElFAkTD+gyul1v8f3A446Fr2rnVLogWHnz8ECPt7X8jwmpiKOXkOPIhqU5E0Cua+Kk0nnVosbos/VShfiQIDAQAB\n=================== public key end ===================\n\n\n=================== private key begin ===================\nMIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAIuXsto1IReVmjaFiImrPGDIUFB2TFtBdhT/FC2GwEnCM4+GSJjfueiTMqeM2Wnqa/llSiarEuyg1AcQnoFkPhU+JqISUUCRMP6DK6XW/x/cDjjoWvaudUuiBYefPwQI+3tfyPCamIo5eQ48iGpTkTQK5r4qTSedWixuiz9VKF+JAgMBAAECgYADWbfEPwQ1UbTq3Bej3kVLuWMcG0rH4fFYnaq5UQOqgYvFRR7W9H+80lOj6+CIB0ViLgkylmaU4WNVbBOx3VsUFFWSqIIIviKubg8m8ey7KAd9X2wMEcUHi4JyS2+/WSacaXYS5LOmMevvuaOwLEV0QmyM+nNGRIjUdzCLR1935QJBAM+IF8YD5GnoAPPjGIDS1Ljhu/u/Gj6/YBCQKSHQ5+HxHEKjQ/YxQZ/otchmMZanYelf1y+byuJX3NZ04/KSGT8CQQCsMaoFO2rF5M84HpAXPi6yH2chbtz0VTKZworwUnpmMVbNUojf4VwzAyOhT1U5o0PpFbpi+NqQhC63VUN5k003AkEArI8vnVGNMlZbvG7e5/bmM9hWs2viSbxdB0inOtv2g1M1OV+B2gp405ru0/PNVcRV0HQFfCuhVfTSxmspQoAihwJBAJW6EZa/FZbB4JVxreUoAr6Lo8dkeOhT9M3SZbGWZivaFxot/Cp/8QXCYwbuzrJxjqlsZUeOD6694Uk08JkURn0CQQC8V6aRa8ylMhLJFkGkMDHLqHcQCmY53Kd73mUu4+mjMJLZh14zQD9ydFtc0lbLXTeBAMWV3uEdeLhRvdAo3OwV\n=================== private key end ===================\n\n\n=================== encrypted  password begin ===================\nIo+3y3mLOMnZJJNUPHZ8pKb4VfTvg6wUh6jSu5xdmLAoX/59tK1HTwoN40aOOWJwa1a5io7S4JqcX/jEcAorw7pelITr+F4oB0AMCt71d+gJuu3/lw9bjUEl9tF4Raj82y2Dg39wYbagN84fZMgCD63TPiDIevSr6+MFKASpGrY=\n=================== encrypted  password end ===================\ncheck: the real password decrypted by private key and encrypted password is: nebula\n
        "},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#configuration_instructions","title":"Configuration instructions","text":"

        Before configuring the application.conf file, it is recommended to copy the file name application.conf and then edit the file name according to the file type of a data source. For example, change the file name to csv_application.conf if the file type of the data source is CSV.

        The application.conf file contains the following content types:

        • Spark configurations
        • Hive configurations (optional)
        • NebulaGraph configurations
        • Vertex configurations
        • Edge configurations
        "},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#spark_configurations","title":"Spark configurations","text":"

        This topic lists only some Spark parameters. For more information, see Spark Configuration.

        Parameter Type Default value Required Description spark.app.name string - No The drive name in Spark. spark.driver.cores int 1 No The number of CPU cores used by a driver, only applicable to a cluster mode. spark.driver.maxResultSize string 1G No The total size limit (in bytes) of the serialized results of all partitions in a single Spark operation (such as collect). The minimum value is 1M, and 0 means unlimited. spark.executor.memory string 1G No The amount of memory used by a Spark driver which can be specified in units, such as 512M or 1G. spark.cores.max int 16 No The maximum number of CPU cores of applications requested across clusters (rather than from each node) when a driver runs in a coarse-grained sharing mode on a standalone cluster or a Mesos cluster. The default value is spark.deploy.defaultCores on a Spark standalone cluster manager or the value of the infinite parameter (all available cores) on Mesos."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#hive_configurations_optional","title":"Hive configurations (optional)","text":"

        Users only need to configure parameters for connecting to Hive if Spark and Hive are deployed in different clusters. Otherwise, please ignore the following configurations.

        Parameter Type Default value Required Description hive.warehouse string - Yes The warehouse path in HDFS. Enclose the path in double quotes and start with hdfs://. hive.connectionURL string - Yes The URL of a JDBC connection. For example, \"jdbc:mysql://127.0.0.1:3306/hive_spark?characterEncoding=UTF-8\". hive.connectionDriverName string \"com.mysql.jdbc.Driver\" Yes The driver name. hive.connectionUserName list[string] - Yes The username for connections. hive.connectionPassword list[string] - Yes The account password."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#nebulagraph_configurations","title":"NebulaGraph configurations","text":"Parameter Type Default value Required Description nebula.address.graph list[string] [\"127.0.0.1:9669\"] Yes The addresses of all Graph services, including IPs and ports, separated by commas (,). Example: [\"ip1:port1\",\"ip2:port2\",\"ip3:port3\"]. nebula.address.meta list[string] [\"127.0.0.1:9559\"] Yes The addresses of all Meta services, including IPs and ports, separated by commas (,). Example: [\"ip1:port1\",\"ip2:port2\",\"ip3:port3\"]. nebula.user string - Yes The username with write permissions for NebulaGraph. nebula.pswd string - Yes The account password. The password can be plaintext or RSA encrypted. To use an RSA encrypted password, you need to set enableRSA and privateKey. For how to encrypt a password, see Using an encrypted password above. nebula.enableRSA bool false No Whether to use an RSA encrypted password. nebula.privateKey string - No The key used to encrypt the password using RSA. nebula.space string - Yes The name of the graph space where data needs to be imported. nebula.ssl.enable.graph bool false Yes Enables the SSL encryption between Exchange and Graph services. If the value is true, the SSL encryption is enabled and the following SSL parameters take effect. If Exchange is run on a multi-machine cluster, you need to store the corresponding files in the same path on each machine when setting the following SSL-related paths. nebula.ssl.sign string ca Yes Specifies the SSL sign. Optional values are ca and self. nebula.ssl.ca.param.caCrtFilePath string Specifies the storage path of the CA certificate. It takes effect when the value of nebula.ssl.sign is ca. nebula.ssl.ca.param.crtFilePath string \"/path/crtFilePath\" Yes Specifies the storage path of the CRT certificate. It takes effect when the value of nebula.ssl.sign is ca. nebula.ssl.ca.param.keyFilePath string \"/path/keyFilePath\" Yes Specifies the storage path of the key file. It takes effect when the value of nebula.ssl.sign is ca. nebula.ssl.self.param.crtFilePath string \"/path/crtFilePath\" Yes Specifies the storage path of the CRT certificate. It takes effect when the value of nebula.ssl.sign is self. nebula.ssl.self.param.keyFilePath string \"/path/keyFilePath\" Yes Specifies the storage path of the key file. It takes effect when the value of nebula.ssl.sign is self. nebula.ssl.self.param.password string \"nebula\" Yes Specifies the storage path of the password. It takes effect when the value of nebula.ssl.sign is self. nebula.path.local string \"/tmp\" No The local SST file path which needs to be set when users import SST files. nebula.path.remote string \"/sst\" No The remote SST file path which needs to be set when users import SST files. nebula.path.hdfs.namenode string \"hdfs://name_node:9000\" No The NameNode path which needs to be set when users import SST files. nebula.connection.timeout int 3000 No The timeout set for Thrift connections. Unit: ms. nebula.connection.retry int 3 No Retries set for Thrift connections. nebula.execution.retry int 3 No Retries set for executing nGQL statements. nebula.error.max int 32 No The maximum number of failures during the import process. When the number of failures reaches the maximum, the Spark job submitted will stop automatically . nebula.error.output string /tmp/errors No The path to output error logs. Failed nGQL statement executions are saved in the error log. nebula.rate.limit int 1024 No The limit on the number of tokens in the token bucket when importing data. nebula.rate.timeout int 1000 No The timeout period for getting tokens from a token bucket. Unit: milliseconds.

        Note

        NebulaGraph doesn't support vertices without tags by default. To import vertices without tags, enable vertices without tags in the NebulaGraph cluster and then add parameter nebula.enableTagless to the Exchange configuration with the value true. For example:

        nebula: {\n    address:{\n      graph:[\"127.0.0.1:9669\"]\n      meta:[\"127.0.0.1:9559\"]\n    }\n    user: root\n    pswd: nebula\n    space: test\n    enableTagless: true\n    ......\n\n }\n
        "},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#vertex_configurations","title":"Vertex configurations","text":"

        For different data sources, the vertex configurations are different. There are many general parameters and some specific parameters. General parameters and specific parameters of different data sources need to be configured when users configure vertices.

        "},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#general_parameters","title":"General parameters","text":"Parameter Type Default value Required Description tags.name string - Yes The tag name defined in NebulaGraph. tags.type.source string - Yes Specify a data source. For example, csv. tags.type.sink string client Yes Specify an import method. Optional values are client and SST. tags.writeMode string INSERT No Types of batch operations on data, including batch inserts, updates, and deletes. Optional values are INSERT, UPDATE, DELETE. tags.deleteEdge string false No Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when tags.writeMode is DELETE. tags.fields list[string] - Yes The header or column name of the column corresponding to properties. If there is a header or a column name, please use that name directly. If a CSV file does not have a header, use the form of [_c0, _c1, _c2] to represent the first column, the second column, the third column, and so on. tags.nebula.fields list[string] - Yes Property names defined in NebulaGraph, the order of which must correspond to tags.fields. For example, [_c1, _c2] corresponds to [name, age], which means that values in the second column are the values of the property name, and values in the third column are the values of the property age. tags.vertex.field string - Yes The column of vertex IDs. For example, when a CSV file has no header, users can use _c0 to indicate values in the first column are vertex IDs. tags.vertex.udf.separator string - No Support merging multiple columns by custom rules. This parameter specifies the join character. tags.vertex.udf.oldColNames list - No Support merging multiple columns by custom rules. This parameter specifies the names of the columns to be merged. Multiple columns are separated by commas. tags.vertex.udf.newColName string - No Support merging multiple columns by custom rules. This parameter specifies the new column name. tags.vertex.prefix string - No Add the specified prefix to the VID. For example, if the VID is 12345, adding the prefix tag1 will result in tag1_12345. The underscore cannot be modified. tags.vertex.policy string - No Supports only the value hash. Performs hashing operations on VIDs of type string. tags.batch int 256 Yes The maximum number of vertices written into NebulaGraph in a single batch. tags.partition int 32 Yes The number of partitions to be created when the data is written to NebulaGraph. If tags.partition \u2264 1, the number of partitions to be created in NebulaGraph is the same as that in the data source. tags.filter string - No The filtering rule. The data that matches the filter rule is imported into NebulaGraph. For information about filtering formats, see Dataset."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_of_parquetjsonorc_data_sources","title":"Specific parameters of Parquet/JSON/ORC data sources","text":"Parameter Type Default value Required Description tags.path string - Yes The path of vertex data files in HDFS. Enclose the path in double quotes and start with hdfs://."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_of_csv_data_sources","title":"Specific parameters of CSV data sources","text":"Parameter Type Default value Required Description tags.path string - Yes The path of vertex data files in HDFS. Enclose the path in double quotes and start with hdfs://. tags.separator string , Yes The separator. The default value is a comma (,). For special characters, such as the control character ^A, you can use ASCII octal \\001 or UNICODE encoded hexadecimal \\u0001, for the control character ^B, use ASCII octal \\002 or UNICODE encoded hexadecimal \\u0002, for the control character ^C, use ASCII octal \\003 or UNICODE encoded hexadecimal \\u0003. tags.header bool true Yes Whether the file has a header."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_of_hive_data_sources","title":"Specific parameters of Hive data sources","text":"Parameter Type Default value Required Description tags.exec string - Yes The statement to query data sources. For example, select name,age from mooc.users."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_of_maxcompute_data_sources","title":"Specific parameters of MaxCompute data sources","text":"Parameter Type Default value Required Description tags.table string - Yes The table name of the MaxCompute. tags.project string - Yes The project name of the MaxCompute. tags.odpsUrl string - Yes The odpsUrl of the MaxCompute service. For more information about odpsUrl, see Endpoints. tags.tunnelUrl string - Yes The tunnelUrl of the MaxCompute service. For more information about tunnelUrl, see Endpoints. tags.accessKeyId string - Yes The accessKeyId of the MaxCompute service. tags.accessKeySecret string - Yes The accessKeySecret of the MaxCompute service. tags.partitionSpec string - No Partition descriptions of MaxCompute tables. tags.sentence string - No Statements to query data sources. The table name in the SQL statement is the same as the value of the table above."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_of_neo4j_data_sources","title":"Specific parameters of Neo4j data sources","text":"Parameter Type Default value Required Description tags.exec string - Yes Statements to query data sources. For example: match (n:label) return n.neo4j-field-0. tags.server string \"bolt://127.0.0.1:7687\" Yes The server address of Neo4j. tags.user string - Yes The Neo4j username with read permissions. tags.password string - Yes The account password. tags.database string - Yes The name of the database where source data is saved in Neo4j. tags.check_point_path string /tmp/test No The directory set to import progress information, which is used for resuming transfers. If not set, the resuming transfer is disabled."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_of_mysqlpostgresql_data_sources","title":"Specific parameters of MySQL/PostgreSQL data sources","text":"Parameter Type Default value Required Description tags.host string - Yes The MySQL/PostgreSQL server address. tags.port string - Yes The MySQL/PostgreSQL server port. tags.database string - Yes The database name. tags.table string - Yes The name of a table used as a data source. tags.user string - Yes The MySQL/PostgreSQL username with read permissions. tags.password string - Yes The account password. tags.sentence string - Yes Statements to query data sources. For example: \"select teamid, name from team order by teamid\"."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_of_oracle_data_sources","title":"Specific parameters of Oracle data sources","text":"Parameter Type Default value Required Description tags.url string - Yes The Oracle server address. tags.driver string - Yes The Oracle driver address. tags.user string - Yes The Oracle username with read permissions. tags.password string - Yes The account password. tags.table string - Yes The name of a table used as a data source. tags.sentence string - Yes Statements to query data sources. For example: \"select playerid, name, age from player\"."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_of_clickhouse_data_sources","title":"Specific parameters of ClickHouse data sources","text":"Parameter Type Default value Required Description tags.url string - Yes The JDBC URL of ClickHouse. tags.user string - Yes The ClickHouse username with read permissions. tags.password string - Yes The account password. tags.numPartition string - Yes The number of ClickHouse partitions. tags.sentence string - Yes Statements to query data sources."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_of_hbase_data_sources","title":"Specific parameters of Hbase data sources","text":"Parameter Type Default value Required Description tags.host string 127.0.0.1 Yes The Hbase server address. tags.port string 2181 Yes The Hbase server port. tags.table string - Yes The name of a table used as a data source. tags.columnFamily string - Yes The column family to which a table belongs."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_of_pulsar_data_sources","title":"Specific parameters of Pulsar data sources","text":"Parameter Type Default value Required Description tags.service string \"pulsar://localhost:6650\" Yes The Pulsar server address. tags.admin string \"http://localhost:8081\" Yes The admin URL used to connect pulsar. tags.options.<topic|topics| topicsPattern> string - Yes Options offered by Pulsar, which can be configured by choosing one from topic, topics, and topicsPattern. tags.interval.seconds int 10 Yes The interval for reading messages. Unit: seconds."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_of_kafka_data_sources","title":"Specific parameters of Kafka data sources","text":"Parameter Type Default value Required Description tags.service string - Yes The Kafka server address. tags.topic string - Yes The message type. tags.interval.seconds int 10 Yes The interval for reading messages. Unit: seconds. tags.securityProtocol string - No Kafka security protocol. tags.mechanism string - No The security certification mechanism provided by SASL of Kafka. tags.kerberos bool false No Whether to enable Kerberos for security certification. If tags.mechanism is kerberos, this parameter must be set to true. tags.kerberosServiceName string - No Kerberos service name. If tags.kerberos is true, this parameter must be set."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_for_generating_sst_files","title":"Specific parameters for generating SST files","text":"Parameter Type Default value Required Description tags.path string - Yes The path of the source file specified to generate SST files. tags.repartitionWithNebula bool true No Whether to repartition data based on the number of partitions of graph spaces in NebulaGraph when generating the SST file. Enabling this function can reduce the time required to DOWNLOAD and INGEST SST files."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#edge_configurations","title":"Edge configurations","text":"

        For different data sources, configurations of edges are also different. There are general parameters and some specific parameters. General parameters and specific parameters of different data sources need to be configured when users configure edges.

        For the specific parameters of different data sources for edge configurations, please refer to the introduction of specific parameters of different data sources above, and pay attention to distinguishing tags and edges.

        "},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#general_parameters_1","title":"General parameters","text":"Parameter Type Default value Required Description edges.name string - Yes The edge type name defined in NebulaGraph. edges.type.source string - Yes The data source of edges. For example, csv. edges.type.sink string client Yes The method specified to import data. Optional values are client and SST. edges.writeMode string INSERT No Types of batch operations on data, including batch inserts, updates, and deletes. Optional values are INSERT, UPDATE, DELETE. edges.fields list[string] - Yes The header or column name of the column corresponding to properties. If there is a header or column name, please use that name directly. If a CSV file does not have a header, use the form of [_c0, _c1, _c2] to represent the first column, the second column, the third column, and so on. edges.nebula.fields list[string] - Yes Edge names defined in NebulaGraph, the order of which must correspond to edges.fields. For example, [_c2, _c3] corresponds to [start_year, end_year], which means that values in the third column are the values of the start year, and values in the fourth column are the values of the end year. edges.source.field string - Yes The column of source vertices of edges. For example, _c0 indicates a value in the first column that is used as the source vertex of an edge. edges.source.prefix string - No Add the specified prefix to the VID. For example, if the VID is 12345, adding the prefix tag1 will result in tag1_12345. The underscore cannot be modified. edges.source.policy string - No Supports only the value hash. Performs hashing operations on VIDs of type string. edges.target.field string - Yes The column of destination vertices of edges. For example, _c0 indicates a value in the first column that is used as the destination vertex of an edge. edges.target.prefix string - No Add the specified prefix to the VID. For example, if the VID is 12345, adding the prefix tag1 will result in tag1_12345. The underscore cannot be modified. edges.target.policy string - No Supports only the value hash. Performs hashing operations on VIDs of type string. edges.ranking int - No The column of rank values. If not specified, all rank values are 0 by default. edges.batch int 256 Yes The maximum number of edges written into NebulaGraph in a single batch. edges.partition int 32 Yes The number of partitions to be created when the data is written to NebulaGraph. If edges.partition \u2264 1, the number of partitions to be created in NebulaGraph is the same as that in the data source. edges.filter string - No The filtering rule. The data that matches the filter rule is imported into NebulaGraph. For information about filtering formats, see Dataset."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_for_generating_sst_files_1","title":"Specific parameters for generating SST files","text":"Parameter Type Default value Required Description edges.path string - Yes The path of the source file specified to generate SST files. edges.repartitionWithNebula bool true No Whether to repartition data based on the number of partitions of graph spaces in NebulaGraph when generating the SST file. Enabling this function can reduce the time required to DOWNLOAD and INGEST SST files."},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse/","title":"Import data from ClickHouse","text":"

        This topic provides an example of how to use Exchange to import data stored on ClickHouse into NebulaGraph.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse/#data_set","title":"Data set","text":"

        This topic takes the basketballplayer dataset as an example.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse/#environment","title":"Environment","text":"

        This example is done on MacOS. Here is the environment configuration information:

        • Hardware specifications:
          • CPU: 1.7 GHz Quad-Core Intel Core i7
          • Memory: 16 GB
        • Spark: 2.4.7, stand-alone
        • ClickHouse: docker deployment yandex/clickhouse-server tag: latest(2021.07.01)
        • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse/#prerequisites","title":"Prerequisites","text":"

        Before importing data, you need to confirm the following information:

        • NebulaGraph has been installed and deployed with the following information:

          • IP addresses and ports of Graph and Meta services.
          • The user name and password with write permission to NebulaGraph.
        • Exchange has been compiled, or download the compiled .jar file directly.
        • Spark has been installed.
        • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

        Analyze the data to create a Schema in NebulaGraph by following these steps:

        1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

          Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
        2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

          ## Create a graph space.\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer.\nnebula> USE basketballplayer;\n\n## Create the Tag player.\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team.\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow.\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve.\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

        For more information, see Quick start workflow.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse/#step_2_modify_configuration_files","title":"Step 2: Modify configuration files","text":"

        After Exchange is compiled, copy the conf file target/classes/application.conf to set ClickHouse data source configuration. In this example, the copied file is called clickhouse_application.conf. For details on each configuration item, see Parameters in the configuration file.

        {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.7.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    cores: {\n      max: 16\n    }\n  }\n\n# NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n  # Processing vertexes\n  tags: [\n    # Set the information about the Tag player.\n    {\n      name: player\n      type: {\n        # Specify the data source file format to ClickHouse.\n        source: clickhouse\n        # Specify how to import the data of vertexes into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # JDBC URL of ClickHouse\n      url:\"jdbc:clickhouse://192.168.*.*:8123/basketballplayer\"\n\n      user:\"user\"\n      password:\"123456\"\n\n      # The number of ClickHouse partitions\n      numPartition:\"5\"\n\n      sentence:\"select * from player\"\n\n      # Specify the column names in the player table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [name,age]\n      nebula.fields: [name,age]\n\n      # Specify a column of data in the table as the source of vertex VID in the NebulaGraph.\n      vertex: {\n        field:playerid\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Tag Team.\n    {\n      name: team\n      type: {\n        source: clickhouse\n        sink: client\n      }\n      url:\"jdbc:clickhouse://192.168.*.*:8123/basketballplayer\"\n      user:\"user\"\n      password:\"123456\"\n      numPartition:\"5\"\n      sentence:\"select * from team\"\n      fields: [name]\n      nebula.fields: [name]\n      vertex: {\n        field:teamid\n      }\n      batch: 256\n      partition: 32\n    }\n  ]\n\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # The corresponding Edge Type name in NebulaGraph.\n      name: follow\n\n      type: {\n        # Specify the data source file format to ClickHouse.\n        source: clickhouse\n\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # JDBC URL of ClickHouse\n      url:\"jdbc:clickhouse://192.168.*.*:8123/basketballplayer\"\n\n      user:\"user\"\n      password:\"123456\"\n\n      # The number of ClickHouse partitions.\n      numPartition:\"5\"\n\n      sentence:\"select * from follow\"\n\n      # Specify the column names in the follow table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [degree]\n      nebula.fields: [degree]\n\n      # In source, use a column in the follow table as the source of the edge's source vertexes.\n      source: {\n        field:src_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # In target, use a column in the follow table as the source of the edge's destination vertexes.\n      target: {\n        field:dst_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Edge Type serve.\n    {\n      name: serve\n      type: {\n        source: clickhouse\n        sink: client\n      }\n      url:\"jdbc:clickhouse://192.168.*.*:8123/basketballplayer\"\n      user:\"user\"\n      password:\"123456\"\n      numPartition:\"5\"\n      sentence:\"select * from serve\"\n      fields: [start_year,end_year]\n      nebula.fields: [start_year,end_year]\n      source: {\n        field:playerid\n      }\n      target: {\n        field:teamid\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      batch: 256\n      partition: 32\n    }\n  ]\n}\n
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse/#step_3_import_data_into_nebulagraph","title":"Step 3: Import data into NebulaGraph","text":"

        Run the following command to import ClickHouse data into NebulaGraph. For descriptions of the parameters, see Options for import.

        ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <clickhouse_application.conf_path>\n

        Note

        JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

        For example:

        ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.7.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/clickhouse_application.conf\n

        You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse/#step_4_optional_validate_data","title":"Step 4: (optional) Validate data","text":"

        Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

        LOOKUP ON player YIELD id(vertex);\n

        Users can also run the SHOW STATS command to view statistics.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse/#step_5_optional_rebuild_indexes_in_nebulagraph","title":"Step 5: (optional) Rebuild indexes in NebulaGraph","text":"

        With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/","title":"Import data from CSV files","text":"

        This topic provides an example of how to use Exchange to import NebulaGraph data stored in HDFS or local CSV files.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/#data_set","title":"Data set","text":"

        This topic takes the basketballplayer dataset as an example.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/#environment","title":"Environment","text":"

        This example is done on MacOS. Here is the environment configuration information:

        • Hardware specifications:
          • CPU: 1.7 GHz Quad-Core Intel Core i7
          • Memory: 16 GB
        • Spark: 2.4.7, stand-alone
        • Hadoop: 2.9.2, pseudo-distributed deployment
        • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/#prerequisites","title":"Prerequisites","text":"

        Before importing data, you need to confirm the following information:

        • NebulaGraph has been installed and deployed with the following information:

          • IP addresses and ports of Graph and Meta services.
          • The user name and password with write permission to NebulaGraph.
        • Exchange has been compiled, or download the compiled .jar file directly.
        • Spark has been installed.
        • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
        • If files are stored in HDFS, ensure that the Hadoop service is running normally.
        • If files are stored locally and NebulaGraph is a cluster architecture, you need to place the files in the same directory locally on each machine in the cluster.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

        Analyze the data to create a Schema in NebulaGraph by following these steps:

        1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

          Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
        2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

          ## Create a graph space.\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer.\nnebula> USE basketballplayer;\n\n## Create the Tag player.\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team.\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow.\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve.\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

        For more information, see Quick start workflow.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/#step_2_process_csv_files","title":"Step 2: Process CSV files","text":"

        Confirm the following information:

        1. Process CSV files to meet Schema requirements.

          Note

          Exchange supports uploading CSV files with or without headers.

        2. Obtain the CSV file storage path.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/#step_3_modify_configuration_files","title":"Step 3: Modify configuration files","text":"

        After Exchange is compiled, copy the conf file target/classes/application.conf to set CSV data source configuration. In this example, the copied file is called csv_application.conf. For details on each configuration item, see Parameters in the configuration file.

        {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.7.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    executor: {\n        memory:1G\n    }\n\n    cores: {\n      max: 16\n    }\n  }\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n\n  # Processing vertexes\n  tags: [\n    # Set the information about the Tag player.\n    {\n      # Specify the Tag name defined in NebulaGraph.\n      name: player\n      type: {\n        # Specify the data source file format to CSV.\n        source: csv\n\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # Specify the path to the CSV file.\n      # If the file is stored in HDFS, use double quotation marks to enclose the file path, starting with hdfs://. For example: \"hdfs://ip:port/xx/xx\".\n      # If the file is stored locally, use double quotation marks to enclose the file path, starting with file://. For example: \"file:///tmp/xx.csv\".\n      path: \"hdfs://192.168.*.*:9000/data/vertex_player.csv\"\n\n      # If the CSV file does not have a header, use [_c0, _c1, _c2, ..., _cn] to represent its header and indicate the columns as the source of the property values.\n      # If the CSV file has headers, use the actual column names.\n      fields: [_c1, _c2]\n\n      # Specify the column names in the player table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      nebula.fields: [age, name]\n\n      # Specify a column of data in the table as the source of vertex VID in the NebulaGraph.\n      # The value of vertex must be the same as the column names in the above fields or csv.fields.\n      # Currently, NebulaGraph master supports only strings or integers of VID.\n      vertex: {\n        field:_c0\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The delimiter specified. The default value is comma.\n      separator: \",\"\n\n      # If the CSV file has a header, set the header to true.\n      # If the CSV file does not have a header, set the header to false. The default value is false.\n      header: false\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Tag Team.\n    {\n      name: team\n      type: {\n        source: csv\n        sink: client\n      }\n      path: \"hdfs://192.168.*.*:9000/data/vertex_team.csv\"\n      fields: [_c1]\n      nebula.fields: [name]\n      vertex: {\n        field:_c0\n      }\n      separator: \",\"\n      header: false\n      batch: 256\n      partition: 32\n    }\n\n\n    # If more vertexes need to be added, refer to the previous configuration to add them.\n  ]\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # Specify the Edge Type name defined in NebulaGraph.\n      name: follow\n      type: {\n        # Specify the data source file format to CSV.\n        source: csv\n\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # Specify the path to the CSV file.\n      # If the file is stored in HDFS, use double quotation marks to enclose the file path, starting with hdfs://. For example: \"hdfs://ip:port/xx/xx\".\n      # If the file is stored locally, use double quotation marks to enclose the file path, starting with file://. For example: \"file:///tmp/xx.csv\".\n      path: \"hdfs://192.168.*.*:9000/data/edge_follow.csv\"\n\n      # If the CSV file does not have a header, use [_c0, _c1, _c2, ..., _cn] to represent its header and indicate the columns as the source of the property values.\n      # If the CSV file has headers, use the actual column names.\n      fields: [_c2]\n\n      # Specify the column names in the edge table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      nebula.fields: [degree]\n\n      # Specify a column as the source for the source and destination vertexes.\n      # The value of vertex must be the same as the column names in the above fields or csv.fields.\n      # Currently, NebulaGraph master supports only strings or integers of VID.\n      source: {\n        field: _c0\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n      target: {\n        field: _c1\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The delimiter specified. The default value is comma.\n      separator: \",\"\n\n      # Specify a column as the source of the rank (optional).\n\n      #ranking: rank\n\n      # If the CSV file has a header, set the header to true.\n      # If the CSV file does not have a header, set the header to false. The default value is false.\n      header: false\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Edge Type serve.\n    {\n      name: serve\n      type: {\n        source: csv\n        sink: client\n      }\n      path: \"hdfs://192.168.*.*:9000/data/edge_serve.csv\"\n      fields: [_c2,_c3]\n      nebula.fields: [start_year, end_year]\n      source: {\n        field: _c0\n      }\n      target: {\n        field: _c1\n      }\n      separator: \",\"\n      header: false\n      batch: 256\n      partition: 32\n    }\n\n  ]\n    # If more edges need to be added, refer to the previous configuration to add them.\n}\n
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/#step_4_import_data_into_nebulagraph","title":"Step 4: Import data into NebulaGraph","text":"

        Run the following command to import CSV data into NebulaGraph. For descriptions of the parameters, see Options for import.

        ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <csv_application.conf_path> \n

        Note

        JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

        For example:

        ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.7.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/csv_application.conf\n

        You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/#access_hdfs_data_with_kerberos_certification","title":"Access HDFS data with Kerberos certification","text":"

        When using Kerberos for security certification, you can access the HDFS data in one of the following ways.

        • Configure the Kerberos configuration file in a command

          Configure --conf and --files in the command, for example:

          ${SPARK_HOME}/bin/spark-submit --master xxx  --num-executors 2 --executor-cores 2 --executor-memory 1g \\\n--conf \"spark.driver.extraJavaOptions=-Djava.security.krb5.conf=./krb5.conf\" \\\n--conf \"spark.executor.extraJavaOptions=-Djava.security.krb5.conf=./krb5.conf\" \\\n--files /local/path/to/xxx.keytab,/local/path/to/krb5.conf \\\n--class  com.vesoft.nebula.exchange.Exchange  \\\nexchange.jar -c xx.conf\n

          The file path in --conf can be configured in two ways as follows:

          • Configure the absolute path to the file. All YARN or Spark machines are required to have the corresponding file in the same path.
          • (Recommended in YARN mode) Configure the relative path to the file (e.g. ./krb5.conf). The resource files uploaded via --files are located in the working directory of the Java virtual machine or JAR.

          The files in --files must be stored on the machine where the spark-submit command is executed.

        • Without commands

          Deploy the Spark and Kerberos-certified Hadoop in a same cluster to make them share HDFS and YARN, and then add the configuration export HADOOP_HOME=<hadoop_home_path> to spark-env.sh in Spark.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/#step_5_optional_validate_data","title":"Step 5: (optional) Validate data","text":"

        Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

        LOOKUP ON player YIELD id(vertex);\n

        Users can also run the SHOW STATS command to view statistics.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/#step_6_optional_rebuild_indexes_in_nebulagraph","title":"Step 6: (optional) Rebuild indexes in NebulaGraph","text":"

        With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hbase/","title":"Import data from HBase","text":"

        This topic provides an example of how to use Exchange to import NebulaGraph data stored in HBase.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hbase/#data_set","title":"Data set","text":"

        This topic takes the basketballplayer dataset as an example.

        In this example, the data set has been stored in HBase. All vertexes and edges are stored in the player, team, follow, and serve tables. The following are some of the data for each table.

        hbase(main):002:0> scan \"player\"\nROW                                COLUMN+CELL\n player100                         column=cf:age, timestamp=1618881347530, value=42\n player100                         column=cf:name, timestamp=1618881354604, value=Tim Duncan\n player101                         column=cf:age, timestamp=1618881369124, value=36\n player101                         column=cf:name, timestamp=1618881379102, value=Tony Parker\n player102                         column=cf:age, timestamp=1618881386987, value=33\n player102                         column=cf:name, timestamp=1618881393370, value=LaMarcus Aldridge\n player103                         column=cf:age, timestamp=1618881402002, value=32\n player103                         column=cf:name, timestamp=1618881407882, value=Rudy Gay\n ...\n\nhbase(main):003:0> scan \"team\"\nROW                                COLUMN+CELL\n team200                           column=cf:name, timestamp=1618881445563, value=Warriors\n team201                           column=cf:name, timestamp=1618881453636, value=Nuggets\n ...\n\nhbase(main):004:0> scan \"follow\"\nROW                                COLUMN+CELL\n player100                         column=cf:degree, timestamp=1618881804853, value=95\n player100                         column=cf:dst_player, timestamp=1618881791522, value=player101\n player101                         column=cf:degree, timestamp=1618881824685, value=90\n player101                         column=cf:dst_player, timestamp=1618881816042, value=player102\n ...\n\nhbase(main):005:0> scan \"serve\"\nROW                                COLUMN+CELL\n player100                         column=cf:end_year, timestamp=1618881899333, value=2016\n player100                         column=cf:start_year, timestamp=1618881890117, value=1997\n player100                         column=cf:teamid, timestamp=1618881875739, value=team204\n ...\n
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hbase/#environment","title":"Environment","text":"

        This example is done on MacOS. Here is the environment configuration information:

        • Hardware specifications:
          • CPU: 1.7 GHz Quad-Core Intel Core i7
          • Memory: 16 GB
        • Spark: 2.4.7, stand-alone
        • HBase: 2.2.7
        • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hbase/#prerequisites","title":"Prerequisites","text":"

        Before importing data, you need to confirm the following information:

        • NebulaGraph has been installed and deployed with the following information:

          • IP addresses and ports of Graph and Meta services.
          • The user name and password with write permission to NebulaGraph.
        • Exchange has been compiled, or download the compiled .jar file directly.
        • Spark has been installed.
        • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hbase/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hbase/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

        Analyze the data to create a Schema in NebulaGraph by following these steps:

        1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

          Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
        2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

          ## Create a graph space.\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer.\nnebula> USE basketballplayer;\n\n## Create the Tag player.\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team.\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow.\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve.\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

        For more information, see Quick start workflow.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hbase/#step_2_modify_configuration_files","title":"Step 2: Modify configuration files","text":"

        After Exchange is compiled, copy the conf file target/classes/application.conf to set HBase data source configuration. In this example, the copied file is called hbase_application.conf. For details on each configuration item, see Parameters in the configuration file.

        {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.7.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    cores: {\n      max: 16\n    }\n  }\n\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and all Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n  # Processing vertexes\n  tags: [\n    # Set information about Tag player.\n    # If you want to set RowKey as the data source, enter rowkey and the actual column name of the column family.\n    {\n      # The Tag name in NebulaGraph.\n      name: player\n      type: {\n        # Specify the data source file format to HBase.\n        source: hbase\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n      host:192.168.*.*\n      port:2181\n      table:\"player\"\n      columnFamily:\"cf\"\n\n      # Specify the column names in the player table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [age,name]\n      nebula.fields: [age,name]\n\n      # Specify a column of data in the table as the source of vertex VID in the NebulaGraph.\n      # For example, if rowkey is the source of the VID, enter rowkey.\n      vertex:{\n          field:rowkey\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # Number of pieces of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n    # Set Tag Team information.\n    {\n      name: team\n      type: {\n        source: hbase\n        sink: client\n      }\n      host:192.168.*.*\n      port:2181\n      table:\"team\"\n      columnFamily:\"cf\"\n      fields: [name]\n      nebula.fields: [name]\n      vertex:{\n          field:rowkey\n      }\n      batch: 256\n      partition: 32\n    }\n\n  ]\n\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # The corresponding Edge Type name in NebulaGraph.\n      name: follow\n\n      type: {\n        # Specify the data source file format to HBase.\n        source: hbase\n\n        # Specify how to import the Edge type data into NebulaGraph.\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      host:192.168.*.*\n      port:2181\n      table:\"follow\"\n      columnFamily:\"cf\"\n\n      # Specify the column names in the follow table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [degree]\n      nebula.fields: [degree]\n\n      # In source, use a column in the follow table as the source of the edge's source vertex.\n      # In target, use a column in the follow table as the source of the edge's destination vertex.\n      source:{\n          field:rowkey\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n\n      target:{\n          field:dst_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Edge Type serve.\n    {\n      name: serve\n      type: {\n        source: hbase\n        sink: client\n      }\n      host:192.168.*.*\n      port:2181\n      table:\"serve\"\n      columnFamily:\"cf\"\n\n      fields: [start_year,end_year]\n      nebula.fields: [start_year,end_year]\n      source:{\n          field:rowkey\n      }\n\n      target:{\n          field:teamid\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      batch: 256\n      partition: 32\n    }\n  ]\n}\n
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hbase/#step_3_import_data_into_nebulagraph","title":"Step 3: Import data into NebulaGraph","text":"

        Run the following command to import HBase data into NebulaGraph. For descriptions of the parameters, see Options for import.

        ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <hbase_application.conf_path>\n

        Note

        JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

        For example:

        ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.7.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/hbase_application.conf\n

        You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hbase/#step_4_optional_validate_data","title":"Step 4: (optional) Validate data","text":"

        Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

        LOOKUP ON player YIELD id(vertex);\n

        Users can also run the SHOW STATS command to view statistics.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hbase/#step_5_optional_rebuild_indexes_in_nebulagraph","title":"Step 5: (optional) Rebuild indexes in NebulaGraph","text":"

        With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/","title":"Import data from Hive","text":"

        This topic provides an example of how to use Exchange to import NebulaGraph data stored in Hive.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/#data_set","title":"Data set","text":"

        This topic takes the basketballplayer dataset as an example.

        In this example, the data set has been stored in Hive. All vertexes and edges are stored in the player, team, follow, and serve tables. The following are some of the data for each table.

        scala> spark.sql(\"describe basketball.player\").show\n+--------+---------+-------+\n|col_name|data_type|comment|\n+--------+---------+-------+\n|playerid|   string|   null|\n|     age|   bigint|   null|\n|    name|   string|   null|\n+--------+---------+-------+\n\nscala> spark.sql(\"describe basketball.team\").show\n+----------+---------+-------+\n|  col_name|data_type|comment|\n+----------+---------+-------+\n|    teamid|   string|   null|\n|      name|   string|   null|\n+----------+---------+-------+\n\nscala> spark.sql(\"describe basketball.follow\").show\n+----------+---------+-------+\n|  col_name|data_type|comment|\n+----------+---------+-------+\n|src_player|   string|   null|\n|dst_player|   string|   null|\n|    degree|   bigint|   null|\n+----------+---------+-------+\n\nscala> spark.sql(\"describe basketball.serve\").show\n+----------+---------+-------+\n|  col_name|data_type|comment|\n+----------+---------+-------+\n|  playerid|   string|   null|\n|    teamid|   string|   null|\n|start_year|   bigint|   null|\n|  end_year|   bigint|   null|\n+----------+---------+-------+\n

        Note

        The Hive data type bigint corresponds to the NebulaGraph int.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/#environment","title":"Environment","text":"

        This example is done on MacOS. Here is the environment configuration information:

        • Hardware specifications:
          • CPU: 1.7 GHz Quad-Core Intel Core i7
          • Memory: 16 GB
        • Spark: 2.4.7, stand-alone
        • Hadoop: 2.9.2, pseudo-distributed deployment
        • Hive: 2.3.7, Hive Metastore database is MySQL 8.0.22
        • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/#prerequisites","title":"Prerequisites","text":"

        Before importing data, you need to confirm the following information:

        • NebulaGraph has been installed and deployed with the following information:

          • IP addresses and ports of Graph and Meta services.
          • The user name and password with write permission to NebulaGraph.
        • Exchange has been compiled, or download the compiled .jar file directly.
        • Spark has been installed.
        • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
        • The Hive Metastore database (MySQL in this example) has been started.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

        Analyze the data to create a Schema in NebulaGraph by following these steps:

        1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

          Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
        2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

          ## Create a graph space\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer\nnebula> USE basketballplayer;\n\n## Create the Tag player\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

        For more information, see Quick start workflow.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/#step_2_use_spark_sql_to_confirm_hive_sql_statements","title":"Step 2: Use Spark SQL to confirm Hive SQL statements","text":"

        After the Spark-shell environment is started, run the following statements to ensure that Spark can read data in Hive.

        scala> sql(\"select playerid, age, name from basketball.player\").show\nscala> sql(\"select teamid, name from basketball.team\").show\nscala> sql(\"select src_player, dst_player, degree from basketball.follow\").show\nscala> sql(\"select playerid, teamid, start_year, end_year from basketball.serve\").show\n

        The following is the result read from the table basketball.player.

        +---------+----+-----------------+\n| playerid| age|             name|\n+---------+----+-----------------+\n|player100|  42|       Tim Duncan|\n|player101|  36|      Tony Parker|\n|player102|  33|LaMarcus Aldridge|\n|player103|  32|         Rudy Gay|\n|player104|  32|  Marco Belinelli|\n+---------+----+-----------------+\n...\n
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/#step_3_modify_configuration_file","title":"Step 3: Modify configuration file","text":"

        After Exchange is compiled, copy the conf file target/classes/application.conf to set Hive data source configuration. In this example, the copied file is called hive_application.conf. For details on each configuration item, see Parameters in the configuration file.

        {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.7.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    cores: {\n      max: 16\n    }\n  }\n\n  # If Spark and Hive are deployed in different clusters, you need to configure the parameters for connecting to Hive. Otherwise, skip these configurations.\n  #hive: {\n  #  waredir: \"hdfs://NAMENODE_IP:9000/apps/svr/hive-xxx/warehouse/\"\n  #  connectionURL: \"jdbc:mysql://your_ip:3306/hive_spark?characterEncoding=UTF-8\"\n  #  connectionDriverName: \"com.mysql.jdbc.Driver\"\n  #  connectionUserName: \"user\"\n  #  connectionPassword: \"password\"\n  #}\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and all Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n  # Processing vertexes\n  tags: [\n    # Set the information about the Tag player.\n    {\n      # The Tag name in NebulaGraph.\n      name: player\n      type: {\n        # Specify the data source file format to Hive.\n        source: hive\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # Set the SQL statement to read the data of player table in basketball database.\n      exec: \"select playerid, age, name from basketball.player\"\n\n      # Specify the column names in the player table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [age,name]\n      nebula.fields: [age,name]\n\n      # Specify a column of data in the table as the source of vertex VID in the NebulaGraph.\n      vertex:{\n        field:playerid\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n    # Set the information about the Tag Team.\n    {\n      name: team\n      type: {\n        source: hive\n        sink: client\n      }\n      exec: \"select teamid, name from basketball.team\"\n      fields: [name]\n      nebula.fields: [name]\n      vertex: {\n        field: teamid\n      }\n      batch: 256\n      partition: 32\n    }\n\n  ]\n\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # The corresponding Edge Type name in NebulaGraph.\n      name: follow\n\n      type: {\n        # Specify the data source file format to Hive.\n        source: hive\n\n        # Specify how to import the Edge type data into NebulaGraph.\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # Set the SQL statement to read the data of follow table in the basketball database.\n      exec: \"select src_player, dst_player, degree from basketball.follow\"\n\n      # Specify the column names in the follow table in Fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [degree]\n      nebula.fields: [degree]\n\n      # In source, use a column in the follow table as the source of the edge's starting vertex.\n      # In target, use a column in the follow table as the source of the edge's destination vertex.\n      source: {\n        field: src_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      target: {\n        field: dst_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Edge Type serve.\n    {\n      name: serve\n      type: {\n        source: hive\n        sink: client\n      }\n      exec: \"select playerid, teamid, start_year, end_year from basketball.serve\"\n      fields: [start_year,end_year]\n      nebula.fields: [start_year,end_year]\n      source: {\n        field: playerid\n      }\n      target: {\n        field: teamid\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      batch: 256\n      partition: 32\n    }\n  ]\n}\n
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/#step_4_import_data_into_nebulagraph","title":"Step 4: Import data into NebulaGraph","text":"

        Run the following command to import Hive data into NebulaGraph. For a description of the parameters, see Options for import.

        ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <hive_application.conf_path> -h\n

        Note

        JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

        For example:

        ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.7.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/hive_application.conf -h\n

        You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/#access_hdfs_data_with_kerberos_certification","title":"Access HDFS data with Kerberos certification","text":"

        When using Kerberos for security certification, you can access the HDFS data in one of the following ways.

        • Configure the Kerberos configuration file in a command

          Configure --conf and --files in the command, for example:

          ${SPARK_HOME}/bin/spark-submit --master xxx  --num-executors 2 --executor-cores 2 --executor-memory 1g \\\n--conf \"spark.driver.extraJavaOptions=-Djava.security.krb5.conf=./krb5.conf\" \\\n--conf \"spark.executor.extraJavaOptions=-Djava.security.krb5.conf=./krb5.conf\" \\\n--files /local/path/to/xxx.keytab,/local/path/to/krb5.conf \\\n--class  com.vesoft.nebula.exchange.Exchange  \\\nexchange.jar -c xx.conf\n

          The file path in --conf can be configured in two ways as follows:

          • Configure the absolute path to the file. All YARN or Spark machines are required to have the corresponding file in the same path.
          • (Recommended in YARN mode) Configure the relative path to the file (e.g. ./krb5.conf). The resource files uploaded via --files are located in the working directory of the Java virtual machine or JAR.

          The files in --files must be stored on the machine where the spark-submit command is executed.

        • Without commands

          Deploy the Spark and Kerberos-certified Hadoop in a same cluster to make them share HDFS and YARN, and then add the configuration export HADOOP_HOME=<hadoop_home_path> to spark-env.sh in Spark.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/#step_5_optional_validate_data","title":"Step 5: (optional) Validate data","text":"

        Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

        LOOKUP ON player YIELD id(vertex);\n

        Users can also run the SHOW STATS command to view statistics.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/#step_6_optional_rebuild_indexes_in_nebulagraph","title":"Step 6: (optional) Rebuild indexes in NebulaGraph","text":"

        With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-jdbc/","title":"Import data from general JDBC","text":"

        JDBC data refers to the data of various databases accessed through the JDBC interface. This topic provides an example of how to use Exchange to export MySQL data and import to NebulaGraph.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-jdbc/#data_set","title":"Data set","text":"

        This topic takes the basketballplayer dataset as an example.

        In this example, the data set has been stored in MySQL. All vertexes and edges are stored in the player, team, follow, and serve tables. The following are some of the data for each table.

        mysql> desc player;\n+----------+-------------+------+-----+---------+-------+\n| Field    | Type        | Null | Key | Default | Extra |\n+----------+-------------+------+-----+---------+-------+\n| playerid | int         | YES  |     | NULL    |       |\n| age      | int         | YES  |     | NULL    |       |\n| name     | varchar(30) | YES  |     | NULL    |       |\n+----------+-------------+------+-----+---------+-------+\n\nmysql> desc team;\n+--------+-------------+------+-----+---------+-------+\n| Field  | Type        | Null | Key | Default | Extra |\n+--------+-------------+------+-----+---------+-------+\n| teamid | int         | YES  |     | NULL    |       |\n| name   | varchar(30) | YES  |     | NULL    |       |\n+--------+-------------+------+-----+---------+-------+\n\nmysql> desc follow;\n+------------+-------------+------+-----+---------+-------+\n| Field      | Type        | Null | Key | Default | Extra |\n+------------+-------------+------+-----+---------+-------+\n| src_player | int         | YES  |     | NULL    |       |\n| dst_player | int         | YES  |     | NULL    |       |\n| degree     | int         | YES  |     | NULL    |       |\n+------------+-------------+------+-----+---------+-------+\n\nmysql> desc serve;\n+------------+-------------+------+-----+---------+-------+\n| Field      | Type        | Null | Key | Default | Extra |\n+------------+-------------+------+-----+---------+-------+\n| playerid   | int         | YES  |     | NULL    |       |\n| teamid     | int         | YES  |     | NULL    |       |\n| start_year | int         | YES  |     | NULL    |       |\n| end_year   | int         | YES  |     | NULL    |       |\n+------------+-------------+------+-----+---------+-------+\n
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-jdbc/#environment","title":"Environment","text":"

        This example is done on MacOS. Here is the environment configuration information:

        • Hardware specifications:
          • CPU: 1.7 GHz Quad-Core Intel Core i7
          • Memory: 16 GB
        • Spark: 2.4.7, stand-alone
        • MySQL: 8.0.23
        • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-jdbc/#prerequisites","title":"Prerequisites","text":"

        Before importing data, you need to confirm the following information:

        • NebulaGraph has been installed and deployed with the following information:

          • IP addresses and ports of Graph and Meta services.
          • The user name and password with write permission to NebulaGraph.
        • Exchange has been compiled, or download the compiled .jar file directly.
        • Spark has been installed.
        • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
        • The Hadoop service has been installed and started.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-jdbc/#precautions","title":"Precautions","text":"

        nebula-exchange_spark_2.2 supports only single table queries, not multi-table queries.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-jdbc/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-jdbc/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

        Analyze the data to create a Schema in NebulaGraph by following these steps:

        1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

          Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
        2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

          ## Create a graph space.\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer.\nnebula> USE basketballplayer;\n\n## Create the Tag player.\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team.\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow.\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve.\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

        For more information, see Quick start workflow.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-jdbc/#step_2_modify_configuration_files","title":"Step 2: Modify configuration files","text":"

        After Exchange is compiled, copy the conf file target/classes/application.conf to set JDBC data source configuration. In this case, the copied file is called jdbc_application.conf. For details on each configuration item, see Parameters in the configuration file.

        {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.7.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    cores: {\n      max: 16\n    }\n  }\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n  # Processing vertexes\n  tags: [\n    # Set the information about the Tag player.\n    {\n      # The Tag name in NebulaGraph.\n      name: player\n      type: {\n        # Specify the data source file format to JDBC.\n        source: jdbc\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # URL of the JDBC data source. The example is MySql database.\n      url:\"jdbc:mysql://127.0.0.1:3306/basketball?useUnicode=true&characterEncoding=utf-8\"\n\n      # JDBC driver \n      driver:\"com.mysql.cj.jdbc.Driver\"\n\n      # Database user name and password\n      user:\"root\"\n      password:\"12345\"\n\n      # Scanning a single table to read data.\n      # nebula-exchange_spark_2.2 must configure this parameter, and can additionally configure sentence.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as sentence.\n      table:\"basketball.player\"\n\n      # Use query statement to read data.\n      # nebula-exchange_spark_2.2 can configure this parameter. Multi-table queries are not supported. Only the table name needs to be written after from. The form `db.table` is not supported.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as table. Multi-table queries are supported.\n      # sentence:\"select playerid, age, name from player, team order by playerid\"\n\n      # (optional)Multiple connections read parameters. See https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html\n      partitionColumn:playerid    # optional. Must be a numeric, date, or timestamp column from the table in question.\n      lowerBound:1                # optional\n      upperBound:5                # optional\n      numPartitions:5             # optional\n\n\n      fetchSize:2           # The JDBC fetch size, which determines how many rows to fetch per round trip.\n\n      # Specify the column names in the player table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [age,name]\n      nebula.fields: [age,name]\n\n      # Specify a column of data in the table as the source of VIDs in the NebulaGraph.\n      vertex: {\n        field:playerid\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n    # Set the information about the Tag Team.\n    {\n      name: team\n      type: {\n        source: jdbc\n        sink: client\n      }\n\n      url:\"jdbc:mysql://127.0.0.1:3306/basketball?useUnicode=true&characterEncoding=utf-8\"\n      driver:\"com.mysql.cj.jdbc.Driver\"\n      user:root\n      password:\"12345\"\n      table:team\n      sentence:\"select teamid, name from team order by teamid\"\n      partitionColumn:teamid    \n      lowerBound:1                \n      upperBound:5                \n      numPartitions:5             \n      fetchSize:2  \n\n      fields: [name]\n      nebula.fields: [name]\n      vertex: {\n        field: teamid\n      }\n      batch: 256\n      partition: 32\n    }\n\n  ]\n\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # The corresponding Edge Type name in NebulaGraph.\n      name: follow\n\n      type: {\n        # Specify the data source file format to JDBC.\n        source: jdbc\n\n        # Specify how to import the Edge type data into NebulaGraph.\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      url:\"jdbc:mysql://127.0.0.1:3306/basketball?useUnicode=true&characterEncoding=utf-8\"\n      driver:\"com.mysql.cj.jdbc.Driver\"\n      user:root\n      password:\"12345\"\n\n      # Scanning a single table to read data.\n      # nebula-exchange_spark_2.2 must configure this parameter, and can additionally configure sentence.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as sentence.\n      table:\"basketball.follow\"\n\n      # Use query statement to read data.\n      # nebula-exchange_spark_2.2 can configure this parameter. Multi-table queries are not supported. Only the table name needs to be written after from. The form `db.table` is not supported.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as table. Multi-table queries are supported.\n      # sentence:\"select src_player,dst_player,degree from follow order by src_player\"\n\n      partitionColumn:src_player    \n      lowerBound:1                \n      upperBound:5                \n      numPartitions:5             \n      fetchSize:2  \n\n      # Specify the column names in the follow table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [degree]\n      nebula.fields: [degree]\n\n      # In source, use a column in the follow table as the source of the edge's source vertex.\n      # In target, use a column in the follow table as the source of the edge's destination vertex.\n      source: {\n        field: src_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      target: {\n        field: dst_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Edge Type serve.\n    {\n      name: serve\n      type: {\n        source: jdbc\n        sink: client\n      }\n\n      url:\"jdbc:mysql://127.0.0.1:3306/basketball?useUnicode=true&characterEncoding=utf-8\"\n      driver:\"com.mysql.cj.jdbc.Driver\"\n      user:root\n      password:\"12345\"\n      table:serve\n      sentence:\"select playerid,teamid,start_year,end_year from serve order by playerid\"\n      partitionColumn:playerid    \n      lowerBound:1                \n      upperBound:5                \n      numPartitions:5             \n      fetchSize:2\n\n      fields: [start_year,end_year]\n      nebula.fields: [start_year,end_year]\n      source: {\n        field: playerid\n      }\n      target: {\n        field: teamid\n      }\n      batch: 256\n      partition: 32\n    }\n  ]\n}\n
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-jdbc/#step_3_import_data_into_nebulagraph","title":"Step 3: Import data into NebulaGraph","text":"

        Run the following command to import general JDBC data into NebulaGraph. For a description of the parameters, see Options for import.

        ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <jdbc_application.conf_path>\n

        Note

        JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

        For example:

        ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.7.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/jdbc_application.conf\n

        You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-jdbc/#step_4_optional_validate_data","title":"Step 4: (optional) Validate data","text":"

        Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

        LOOKUP ON player YIELD id(vertex);\n

        Users can also run the SHOW STATS command to view statistics.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-jdbc/#step_5_optional_rebuild_indexes_in_nebulagraph","title":"Step 5: (optional) Rebuild indexes in NebulaGraph","text":"

        With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/","title":"Import data from JSON files","text":"

        This topic provides an example of how to use Exchange to import NebulaGraph data stored in HDFS or local JSON files.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/#data_set","title":"Data set","text":"

        This topic takes the basketballplayer dataset as an example. Some sample data are as follows:

        • player

          {\"id\":\"player100\",\"age\":42,\"name\":\"Tim Duncan\"}\n{\"id\":\"player101\",\"age\":36,\"name\":\"Tony Parker\"}\n{\"id\":\"player102\",\"age\":33,\"name\":\"LaMarcus Aldridge\"}\n{\"id\":\"player103\",\"age\":32,\"name\":\"Rudy Gay\"}\n...\n
        • team

          {\"id\":\"team200\",\"name\":\"Warriors\"}\n{\"id\":\"team201\",\"name\":\"Nuggets\"}\n...\n
        • follow

          {\"src\":\"player100\",\"dst\":\"player101\",\"degree\":95}\n{\"src\":\"player101\",\"dst\":\"player102\",\"degree\":90}\n...\n
        • serve

          {\"src\":\"player100\",\"dst\":\"team204\",\"start_year\":\"1997\",\"end_year\":\"2016\"}\n{\"src\":\"player101\",\"dst\":\"team204\",\"start_year\":\"1999\",\"end_year\":\"2018\"}\n...\n
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/#environment","title":"Environment","text":"

        This example is done on MacOS. Here is the environment configuration information:

        • Hardware specifications:
          • CPU: 1.7 GHz Quad-Core Intel Core i7
          • Memory: 16 GB
        • Spark: 2.4.7, stand-alone
        • Hadoop: 2.9.2, pseudo-distributed deployment
        • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/#prerequisites","title":"Prerequisites","text":"

        Before importing data, you need to confirm the following information:

        • NebulaGraph has been installed and deployed with the following information:

          • IP addresses and ports of Graph and Meta services.
          • The user name and password with write permission to NebulaGraph.
        • Exchange has been compiled, or download the compiled .jar file directly.
        • Spark has been installed.
        • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
        • If files are stored in HDFS, ensure that the Hadoop service is running properly.
        • If files are stored locally and NebulaGraph is a cluster architecture, you need to place the files in the same directory locally on each machine in the cluster.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

        Analyze the data to create a Schema in NebulaGraph by following these steps:

        1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

          Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
        2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

          ## Create a graph space.\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer.\nnebula> USE basketballplayer;\n\n## Create the Tag player.\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team.\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow.\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve.\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

        For more information, see Quick start workflow.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/#step_2_process_json_files","title":"Step 2: Process JSON files","text":"

        Confirm the following information:

        1. Process JSON files to meet Schema requirements.

        2. Obtain the JSON file storage path.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/#step_3_modify_configuration_files","title":"Step 3: Modify configuration files","text":"

        After Exchange is compiled, copy the conf file target/classes/application.conf to set JSON data source configuration. In this example, the copied file is called json_application.conf. For details on each configuration item, see Parameters in the configuration file.

        {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.7.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    executor: {\n        memory:1G\n    }\n\n    cores: {\n      max: 16\n    }\n  }\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and all Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"    \n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n\n  # Processing vertexes\n  tags: [\n    # Set the information about the Tag player.\n    {\n      # Specify the Tag name defined in NebulaGraph.\n      name: player\n      type: {\n        # Specify the data source file format to JSON.\n        source: json\n\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # Specify the path to the JSON file.\n      # If the file is stored in HDFS, use double quotation marks to enclose the file path, starting with hdfs://. For example, \"hdfs://ip:port/xx/xx\".\n      # If the file is stored locally, use double quotation marks to enclose the file path, starting with file://. For example, \"file:///tmp/xx.json\".\n      path: \"hdfs://192.168.*.*:9000/data/vertex_player.json\"\n\n      # Specify the key name in the JSON file in fields, and its corresponding value will serve as the data source for the properties specified in the NebulaGraph.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [age,name]\n\n      # Specify the column names in the player table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      nebula.fields: [age, name]\n\n      # Specify a column of data in the table as the source of vertex VID in the NebulaGraph.\n      # The value of vertex must be the same as that in the JSON file.\n      # Currently, NebulaGraph master supports only strings or integers of VID.\n      vertex: {\n        field:id\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Tag Team.\n{\n      name: team\n      type: {\n        source: json\n        sink: client\n      }\n      path: \"hdfs://192.168.*.*:9000/data/vertex_team.json\"\n      fields: [name]\n      nebula.fields: [name]\n      vertex: {\n        field:id\n      }\n      batch: 256\n      partition: 32\n    }\n\n\n    # If more vertexes need to be added, refer to the previous configuration to add them.\n  ]\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # Specify the Edge Type name defined in NebulaGraph.\n      name: follow\n      type: {\n        # Specify the data source file format to JSON.\n        source: json\n\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # Specify the path to the JSON file.\n      # If the file is stored in HDFS, use double quotation marks to enclose the file path, starting with hdfs://. For example, \"hdfs://ip:port/xx/xx\".\n      # If the file is stored locally, use double quotation marks to enclose the file path, starting with file://. For example, \"file:///tmp/xx.json\".\n      path: \"hdfs://192.168.*.*:9000/data/edge_follow.json\"\n\n      # Specify the key name in the JSON file in fields, and its corresponding value will serve as the data source for the properties specified in the NebulaGraph.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [degree]\n\n      # Specify the column names in the edge table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      nebula.fields: [degree]\n\n      # Specify a column as the source for the source and destination vertexes.\n      # The value of vertex must be the same as that in the JSON file.\n      # Currently, NebulaGraph master supports only strings or integers of VID.\n      source: {\n        field: src\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n      target: {\n        field: dst\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Edge Type serve.\n    {\n      name: serve\n      type: {\n        source: json\n        sink: client\n      }\n      path: \"hdfs://192.168.*.*:9000/data/edge_serve.json\"\n      fields: [start_year,end_year]\n      nebula.fields: [start_year, end_year]\n      source: {\n        field: src\n      }\n      target: {\n        field: dst\n      }\n      batch: 256\n      partition: 32\n    }\n\n  ]\n  # If more edges need to be added, refer to the previous configuration to add them.\n}\n
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/#step_4_import_data_into_nebulagraph","title":"Step 4: Import data into NebulaGraph","text":"

        Run the following command to import JSON data into NebulaGraph. For a description of the parameters, see Options for import.

        ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <json_application.conf_path> \n

        Note

        JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

        For example:

        ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-echange/nebula-exchange/target/nebula-exchange_spark_2.4-3.7.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/json_application.conf\n

        You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/#access_hdfs_data_with_kerberos_certification","title":"Access HDFS data with Kerberos certification","text":"

        When using Kerberos for security certification, you can access the HDFS data in one of the following ways.

        • Configure the Kerberos configuration file in a command

          Configure --conf and --files in the command, for example:

          ${SPARK_HOME}/bin/spark-submit --master xxx  --num-executors 2 --executor-cores 2 --executor-memory 1g \\\n--conf \"spark.driver.extraJavaOptions=-Djava.security.krb5.conf=./krb5.conf\" \\\n--conf \"spark.executor.extraJavaOptions=-Djava.security.krb5.conf=./krb5.conf\" \\\n--files /local/path/to/xxx.keytab,/local/path/to/krb5.conf \\\n--class  com.vesoft.nebula.exchange.Exchange  \\\nexchange.jar -c xx.conf\n

          The file path in --conf can be configured in two ways as follows:

          • Configure the absolute path to the file. All YARN or Spark machines are required to have the corresponding file in the same path.
          • (Recommended in YARN mode) Configure the relative path to the file (e.g. ./krb5.conf). The resource files uploaded via --files are located in the working directory of the Java virtual machine or JAR.

          The files in --files must be stored on the machine where the spark-submit command is executed.

        • Without commands

          Deploy the Spark and Kerberos-certified Hadoop in a same cluster to make them share HDFS and YARN, and then add the configuration export HADOOP_HOME=<hadoop_home_path> to spark-env.sh in Spark.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/#step_5_optional_validate_data","title":"Step 5: (optional) Validate data","text":"

        Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

        LOOKUP ON player YIELD id(vertex);\n

        Users can also run the SHOW STATS command to view statistics.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/#step_6_optional_rebuild_indexes_in_nebulagraph","title":"Step 6: (optional) Rebuild indexes in NebulaGraph","text":"

        With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-kafka/","title":"Import data from Kafka","text":"

        This topic provides a simple guide to importing Data stored on Kafka into NebulaGraph using Exchange.

        Compatibility

        Please use Exchange 3.5.0/3.3.0/3.0.0 when importing Kafka data. In version 3.4.0, caching of imported data was added, and streaming data import is not supported.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-kafka/#environment","title":"Environment","text":"

        This example is done on MacOS. Here is the environment configuration information:

        • Hardware specifications:
          • CPU: 1.7 GHz Quad-Core Intel Core i7
          • Memory: 16 GB
        • Spark: 2.4.7, stand-alone
        • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-kafka/#prerequisites","title":"Prerequisites","text":"

        Before importing data, you need to confirm the following information:

        • NebulaGraph has been installed and deployed with the following information:

          • IP addresses and ports of Graph and Meta services.
          • The user name and password with write permission to NebulaGraph.
        • Exchange has been compiled, or download the compiled .jar file directly.
        • Spark has been installed.
        • The following JAR files have been downloaded and placed in the directory SPARK_HOME/jars of Spark:

          • spark-streaming-kafka_xxx.jar
          • spark-sql-kafka-0-10_xxx.jar
          • kafka-clients-xxx.jar
        • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
        • The Kafka service has been installed and started.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-kafka/#precautions","title":"Precautions","text":"
        • Only client mode is supported when importing Kafka data, i.e. the value of parameters tags.type.sink and edges.type.sink is client.
        • When importing Kafka data, do not use Exchange version 3.4.0, which adds caching of imported data and does not support streaming data import. Use Exchange versions 3.0.0, 3.3.0, or 3.5.0.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-kafka/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-kafka/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

        Analyze the data to create a Schema in NebulaGraph by following these steps:

        1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

          Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
        2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

          ## Create a graph space.\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer.\nnebula> USE basketballplayer;\n\n## Create the Tag player.\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team.\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow.\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve.\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

        For more information, see Quick start workflow.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-kafka/#step_2_modify_configuration_files","title":"Step 2: Modify configuration files","text":"

        Note

        If some data is stored in Kafka's value field, you need to modify the source code, get the value from Kafka, parse the value through the from_JSON function, and return it as a Dataframe.

        After Exchange is compiled, copy the conf file target/classes/application.conf to set Kafka data source configuration. In this example, the copied file is called kafka_application.conf. For details on each configuration item, see Parameters in the configuration file.

        Note

        When importing Kafka data, a configuration file can only handle one tag or edge type. If there are multiple tag or edge types, you need to create multiple configuration files.

        {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.7.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    cores: {\n      max: 16\n    }\n  }\n\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and all Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n  # Processing vertexes\n  tags: [\n    # Set the information about the Tag player.\n    {\n\n      # The corresponding Tag name in NebulaGraph.\n      name: player\n      type: {\n        # Specify the data source file format to Kafka.\n        source: kafka\n        # Specify how to import the data into NebulaGraph. Only client is supported.\n        sink: client\n      }\n      # Kafka server address.\n      service: \"127.0.0.1:9092\"\n      # Message category.\n      topic: \"topic_name1\"\n\n      # If Kafka uses Kerberos for security certification, the following parameters need to be set. If Kafka uses SASL or SASL_PLAINTEXT for security certification, you do not need to set kerberos or kerberosServiceName.\n      #securityProtocol: SASL_PLAINTEXT\n      #mechanism: GASSAPI\n      #kerberos: true\n      #kerberosServiceName: kafka\n\n      # Kafka data has a fixed domain name: key, value, topic, partition, offset, timestamp, timestampType.\n      # If multiple fields need to be specified after Spark reads as DataFrame, separate them with commas.\n      # Specify the field name in fields. For example, use key for name in NebulaGraph and value for age in Nebula, as shown in the following.\n      fields: [key,value]\n      nebula.fields: [name,age]\n\n      # Specify a column of data in the table as the source of vertex VID in the NebulaGraph.\n      # The key is the same as the value above, indicating that key is used as both VID and property name.\n      vertex:{\n          field:key\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 10\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 10\n      # The interval for message reading. Unit: second.\n      interval.seconds: 10\n      # The consumer offsets. The default value is latest. Optional value are latest and earliest.\n      startingOffsets: latest\n      # Flow control, with a rate limit on the maximum offset processed per trigger interval, may not be configured.\n      # maxOffsetsPerTrigger:10000\n    }\n  ]\n\n  # Processing edges\n  #edges: [\n  #  # Set the information about the Edge Type follow.\n  #  {\n  #    # The corresponding Edge Type name in NebulaGraph.\n  #    name: follow\n\n  #    type: {\n  #      # Specify the data source file format to Kafka.\n  #      source: kafka\n\n  #      # Specify how to import the Edge type data into NebulaGraph.\n  #      # Specify how to import the data into NebulaGraph. Only client is supported.\n  #      sink: client\n  #    }\n\n  #    # Kafka server address.\n  #    service: \"127.0.0.1:9092\"\n  #    # Message category.\n  #    topic: \"topic_name3\"\n\n  #    # If Kafka uses Kerberos for security certification, the following parameters need to be set. If Kafka uses SASL or SASL_PLAINTEXT for security certification, you do not need to set kerberos or kerberosServiceName.\n  #    #securityProtocol: SASL_PLAINTEXT\n  #    #mechanism: GASSAPI\n  #    #kerberos: true\n  #    #kerberosServiceName: kafka\n\n  #    # Kafka data has a fixed domain name: key, value, topic, partition, offset, timestamp, timestampType.\n  #    # If multiple fields need to be specified after Spark reads as DataFrame, separate them with commas.\n  #    # Specify the field name in fields. For example, use key for degree in Nebula, as shown in the following.\n  #    fields: [key]\n  #    nebula.fields: [degree]\n\n  #    # In source, use a column in the topic as the source of the edge's source vertex.\n  #    # In target, use a column in the topic as the source of the edge's destination vertex.\n  #    source:{\n  #        field:timestamp\n  #    # udf:{\n  #    #            separator:\"_\"\n  #    #            oldColNames:[field-0,field-1,field-2]\n  #    #            newColName:new-field\n  #    #        }\n  #    # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n  #    # prefix:\"tag1\"\n  #    # Performs hashing operations on VIDs of type string.\n  #    # policy:hash\n  #    }\n\n\n  #    target:{\n  #        field:offset\n  #    # udf:{\n  #    #            separator:\"_\"\n  #    #            oldColNames:[field-0,field-1,field-2]\n  #    #            newColName:new-field\n  #    #        }\n  #    # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n  #    # prefix:\"tag1\"\n  #    # Performs hashing operations on VIDs of type string.\n  #    # policy:hash\n  #    }\n\n  #    # (Optional) Specify a column as the source of the rank.\n  #    #ranking: rank\n\n  #    # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n  #    #writeMode: INSERT\n\n  #    # The number of data written to NebulaGraph in a single batch.\n  #    batch: 10\n\n  #    # The number of partitions to be created when the data is written to NebulaGraph.\n  #    partition: 10\n\n  #    # The interval for message reading. Unit: second.\n  #    interval.seconds: 10\n  #    # The consumer offsets. The default value is latest. Optional value are latest and earliest.\n  #    startingOffsets: latest\n  #    # Flow control, with a rate limit on the maximum offset processed per trigger interval, may not be configured.\n  #    # maxOffsetsPerTrigger:10000\n  #  }\n  #]\n}\n
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-kafka/#step_3_import_data_into_nebulagraph","title":"Step 3: Import data into NebulaGraph","text":"

        Run the following command to import Kafka data into NebulaGraph. For a description of the parameters, see Options for import.

        ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <kafka_application.conf_path>\n

        Note

        • The JAR package needs to be obtained from the NebulaGraph Enterprise Edition Package.
        • If Kafka's security certification is enabled, you need to configure the driver and executor when importing data. See the example below.

        Example:

        • No security certification

          ${SPARK_HOME}/bin/spark-submit  --master \"local\" \\\n--class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/target/nebula-exchange_spark_2.4-3.7.0.jar  \\\n-c /root/nebula-exchange/target/classes/kafka_application.conf\n
        • Enable Kerberos security certification

          ${SPARK_HOME}/bin/spark-submit  --master \"local\" \\\n--conf \"spark.driver.extraJavaOptions=-Djava.security.auth.login.config=/path/kafka_client_jaas.conf -Djava.security.krb5.conf=/path/krb5.conf\" \\\n--conf \"spark.executor.extraJavaOptions=-Djava.security.auth.login.config=/path/kafka_client_jaas.conf -Djava.security.krb5.conf=/path/krb5.conf\" \\\n--files /local/path/kafka_client_jaas.conf,/local/path/kafka.keytab,/local/path/krb5.conf \\\n--class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/target/nebula-exchange_spark_2.4-3.7.0.jar  \\\n-c /root/nebula-exchange/target/classes/kafka_application.conf\n
        • Enable SASL/SASL_PLAINTEXT security certification

          ${SPARK_HOME}/bin/spark-submit  --master \"local\" \\\n--conf \"spark.driver.extraJavaOptions=-Djava.security.auth.login.config=/path/kafka_client_jaas.conf\" \\\n--conf \"spark.executor.extraJavaOptions=-Djava.security.auth.login.config=/path/kafka_client_jaas.conf\" \\\n--files /local/path/kafka_client_jaas.conf \\\n--class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/target/nebula-exchange_spark_2.4-3.7.0.jar  \\\n-c /root/nebula-exchange/target/classes/kafka_application.conf\n

        You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-kafka/#step_4_optional_validate_data","title":"Step 4: (optional) Validate data","text":"

        Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

        LOOKUP ON player YIELD id(vertex);\n

        Users can also run the SHOW STATS command to view statistics.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-kafka/#step_5_optional_rebuild_indexes_in_nebulagraph","title":"Step 5: (optional) Rebuild indexes in NebulaGraph","text":"

        With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute/","title":"Import data from MaxCompute","text":"

        This topic provides an example of how to use Exchange to import NebulaGraph data stored in MaxCompute.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute/#data_set","title":"Data set","text":"

        This topic takes the basketballplayer dataset as an example.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute/#environment","title":"Environment","text":"

        This example is done on MacOS. Here is the environment configuration information:

        • Hardware specifications:
          • CPU: 1.7 GHz Quad-Core Intel Core i7
          • Memory: 16 GB
        • Spark: 2.4.7, stand-alone
        • MaxCompute: Alibaba Cloud official version
        • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute/#prerequisites","title":"Prerequisites","text":"

        Before importing data, you need to confirm the following information:

        • NebulaGraph has been installed and deployed with the following information:

          • IP addresses and ports of Graph and Meta services.
          • The user name and password with write permission to NebulaGraph.
        • Exchange has been compiled, or download the compiled .jar file directly.
        • Spark has been installed.
        • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

        Analyze the data to create a Schema in NebulaGraph by following these steps:

        1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

          Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
        2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

          ## Create a graph space.\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer.\nnebula> USE basketballplayer;\n\n## Create the Tag player.\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team.\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow.\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve.\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

        For more information, see Quick start workflow.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute/#step_2_modify_configuration_files","title":"Step 2: Modify configuration files","text":"

        After Exchange is compiled, copy the conf file target/classes/application.conf to set MaxCompute data source configuration. In this example, the copied file is called maxcompute_application.conf. For details on each configuration item, see Parameters in the configuration file.

        {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.7.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    cores: {\n      max: 16\n    }\n  }\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n  # Processing vertexes\n  tags: [\n    # Set the information about the Tag player.\n    {\n      name: player\n      type: {\n        # Specify the data source file format to MaxCompute.\n        source: maxcompute\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # Table name of MaxCompute.\n      table:player\n\n      # Project name of MaxCompute.\n      project:project\n\n      # OdpsUrl and tunnelUrl for the MaxCompute service.\n      # The address is https://help.aliyun.com/document_detail/34951.html.\n      odpsUrl:\"http://service.cn-hangzhou.maxcompute.aliyun.com/api\"\n      tunnelUrl:\"http://dt.cn-hangzhou.maxcompute.aliyun.com\"\n\n      # AccessKeyId and accessKeySecret of the MaxCompute service.\n      accessKeyId:xxx\n      accessKeySecret:xxx\n\n      # Partition description of the MaxCompute table. This configuration is optional.\n      partitionSpec:\"dt='partition1'\"\n\n      # Ensure that the table name in the SQL statement is the same as the value of the table above. This configuration is optional.\n      sentence:\"select id, name, age, playerid from player where id < 10\"\n\n      # Specify the column names in the player table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields:[name, age]\n      nebula.fields:[name, age]\n\n      # Specify a column of data in the table as the source of vertex VID in the NebulaGraph.\n      vertex:{\n        field: playerid\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Tag Team.\n    {\n      name: team\n      type: {\n        source: maxcompute\n        sink: client\n      }\n      table:team\n      project:project\n      odpsUrl:\"http://service.cn-hangzhou.maxcompute.aliyun.com/api\"\n      tunnelUrl:\"http://dt.cn-hangzhou.maxcompute.aliyun.com\"\n      accessKeyId:xxx\n      accessKeySecret:xxx\n      partitionSpec:\"dt='partition1'\"\n      sentence:\"select id, name, teamid from team where id < 10\"\n      fields:[name]\n      nebula.fields:[name]\n      vertex:{\n        field: teamid\n      }\n      batch: 256\n      partition: 32\n    }\n  ]\n\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # The corresponding Edge Type name in NebulaGraph.\n      name: follow\n\n      type:{\n        # Specify the data source file format to MaxCompute.\n        source:maxcompute\n\n        # Specify how to import the Edge type data into NebulaGraph.\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink:client\n      }\n\n      # Table name of MaxCompute.\n      table:follow\n\n      # Project name of MaxCompute.\n      project:project\n\n      # OdpsUrl and tunnelUrl for MaxCompute service.\n      # The address is https://help.aliyun.com/document_detail/34951.html.\n      odpsUrl:\"http://service.cn-hangzhou.maxcompute.aliyun.com/api\"\n      tunnelUrl:\"http://dt.cn-hangzhou.maxcompute.aliyun.com\"\n\n      # AccessKeyId and accessKeySecret of the MaxCompute service.\n      accessKeyId:xxx\n      accessKeySecret:xxx\n\n      # Partition description of the MaxCompute table. This configuration is optional.\n      partitionSpec:\"dt='partition1'\"\n\n      # Ensure that the table name in the SQL statement is the same as the value of the table above. This configuration is optional.\n      sentence:\"select * from follow\"\n\n      # Specify the column names in the follow table in Fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields:[degree]\n      nebula.fields:[degree]\n\n      # In source, use a column in the follow table as the source of the edge's source vertex.\n      source:{\n        field: src_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # In target, use a column in the follow table as the source of the edge's destination vertex.\n      target:{\n        field: dst_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition:10\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch:10\n    }\n\n    # Set the information about the Edge Type serve.\n    {\n      name: serve\n      type:{\n        source:maxcompute\n        sink:client\n      }\n      table:serve\n      project:project\n      odpsUrl:\"http://service.cn-hangzhou.maxcompute.aliyun.com/api\"\n      tunnelUrl:\"http://dt.cn-hangzhou.maxcompute.aliyun.com\"\n      accessKeyId:xxx\n      accessKeySecret:xxx\n      partitionSpec:\"dt='partition1'\"\n      sentence:\"select * from serve\"\n      fields:[start_year,end_year]\n      nebula.fields:[start_year,end_year]\n      source:{\n        field: playerid\n      }\n      target:{\n        field: teamid\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      partition:10\n      batch:10\n    }\n  ]\n}\n
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute/#step_3_import_data_into_nebulagraph","title":"Step 3: Import data into NebulaGraph","text":"

        Run the following command to import MaxCompute data into NebulaGraph. For a description of the parameters, see Options for import.

        ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <maxcompute_application.conf_path>\n

        Note

        JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

        For example:

        ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.7.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/maxcompute_application.conf\n

        You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute/#step_4_optional_validate_data","title":"Step 4: (optional) Validate data","text":"

        Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

        LOOKUP ON player YIELD id(vertex);\n

        Users can also run the SHOW STATS command to view statistics.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute/#step_5_optional_rebuild_indexes_in_nebulagraph","title":"Step 5: (optional) Rebuild indexes in NebulaGraph","text":"

        With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-mysql/","title":"Import data from MySQL/PostgreSQL","text":"

        This topic provides an example of how to use Exchange to export MySQL data and import to NebulaGraph. It also applies to exporting data from PostgreSQL into NebulaGraph.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-mysql/#data_set","title":"Data set","text":"

        This topic takes the basketballplayer dataset as an example.

        In this example, the data set has been stored in MySQL. All vertexes and edges are stored in the player, team, follow, and serve tables. The following are some of the data for each table.

        mysql> desc player;\n+----------+-------------+------+-----+---------+-------+\n| Field    | Type        | Null | Key | Default | Extra |\n+----------+-------------+------+-----+---------+-------+\n| playerid | varchar(30) | YES  |     | NULL    |       |\n| age      | int         | YES  |     | NULL    |       |\n| name     | varchar(30) | YES  |     | NULL    |       |\n+----------+-------------+------+-----+---------+-------+\n\nmysql> desc team;\n+--------+-------------+------+-----+---------+-------+\n| Field  | Type        | Null | Key | Default | Extra |\n+--------+-------------+------+-----+---------+-------+\n| teamid | varchar(30) | YES  |     | NULL    |       |\n| name   | varchar(30) | YES  |     | NULL    |       |\n+--------+-------------+------+-----+---------+-------+\n\nmysql> desc follow;\n+------------+-------------+------+-----+---------+-------+\n| Field      | Type        | Null | Key | Default | Extra |\n+------------+-------------+------+-----+---------+-------+\n| src_player | varchar(30) | YES  |     | NULL    |       |\n| dst_player | varchar(30) | YES  |     | NULL    |       |\n| degree     | int         | YES  |     | NULL    |       |\n+------------+-------------+------+-----+---------+-------+\n\nmysql> desc serve;\n+------------+-------------+------+-----+---------+-------+\n| Field      | Type        | Null | Key | Default | Extra |\n+------------+-------------+------+-----+---------+-------+\n| playerid   | varchar(30) | YES  |     | NULL    |       |\n| teamid     | varchar(30) | YES  |     | NULL    |       |\n| start_year | int         | YES  |     | NULL    |       |\n| end_year   | int         | YES  |     | NULL    |       |\n+------------+-------------+------+-----+---------+-------+\n
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-mysql/#environment","title":"Environment","text":"

        This example is done on MacOS. Here is the environment configuration information:

        • Hardware specifications:
          • CPU: 1.7 GHz Quad-Core Intel Core i7
          • Memory: 16 GB
        • Spark: 2.4.7, stand-alone
        • MySQL: 8.0.23
        • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-mysql/#prerequisites","title":"Prerequisites","text":"

        Before importing data, you need to confirm the following information:

        • NebulaGraph has been installed and deployed with the following information:

          • IP addresses and ports of Graph and Meta services.
          • The user name and password with write permission to NebulaGraph.
        • Exchange has been compiled, or download the compiled .jar file directly.
        • Spark has been installed.
        • mysql-connector-java-xxx.jar has been downloaded and placed in the directory SPARK_HOME/jars of Spark.
        • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
        • The Hadoop service has been installed and started.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-mysql/#precautions","title":"Precautions","text":"

        nebula-exchange_spark_2.2 supports only single table queries, not multi-table queries.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-mysql/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-mysql/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

        Analyze the data to create a Schema in NebulaGraph by following these steps:

        1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

          Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
        2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

          ## Create a graph space.\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer.\nnebula> USE basketballplayer;\n\n## Create the Tag player.\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team.\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow.\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve.\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

        For more information, see Quick start workflow.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-mysql/#step_2_modify_configuration_files","title":"Step 2: Modify configuration files","text":"

        After Exchange is compiled, copy the conf file target/classes/application.conf to set MySQL data source configuration. In this case, the copied file is called mysql_application.conf. For details on each configuration item, see Parameters in the configuration file.

        {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.7.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    cores: {\n      max: 16\n    }\n  }\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n  # Processing vertexes\n  tags: [\n    # Set the information about the Tag player.\n    {\n      # The Tag name in NebulaGraph.\n      name: player\n      type: {\n        # Specify the data source file format to MySQL.\n        source: mysql\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      host:192.168.*.*\n      port:3306\n      user:\"test\"\n      password:\"123456\"\n      database:\"basketball\"\n\n      # Scanning a single table to read data.\n      # nebula-exchange_spark_2.2 must configure this parameter. Sentence is not supported.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as sentence.\n      table:\"basketball.player\"\n\n      # Use query statement to read data.\n      # This parameter is not supported by nebula-exchange_spark_2.2.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as table. Multi-table queries are supported.\n      # sentence: \"select * from people, player, team\"\n\n      # Specify the column names in the player table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [age,name]\n      nebula.fields: [age,name]\n\n      # Specify a column of data in the table as the source of VIDs in the NebulaGraph.\n      vertex: {\n        field:playerid\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n    # Set the information about the Tag Team.\n    {\n      name: team\n      type: {\n        source: mysql\n        sink: client\n      }\n\n      host:192.168.*.*\n      port:3306\n      database:\"basketball\"\n      table:\"team\"\n      user:\"test\"\n      password:\"123456\"\n      sentence:\"select teamid, name from team order by teamid;\"\n\n      fields: [name]\n      nebula.fields: [name]\n      vertex: {\n        field: teamid\n      }\n      batch: 256\n      partition: 32\n    }\n\n  ]\n\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # The corresponding Edge Type name in NebulaGraph.\n      name: follow\n\n      type: {\n        # Specify the data source file format to MySQL.\n        source: mysql\n\n        # Specify how to import the Edge type data into NebulaGraph.\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      host:192.168.*.*\n      port:3306\n      user:\"test\"\n      password:\"123456\"\n      database:\"basketball\"\n\n      # Scanning a single table to read data.\n      # nebula-exchange_spark_2.2 must configure this parameter. Sentence is not supported.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as sentence.\n      table:\"basketball.follow\"\n\n      # Use query statement to read data.\n      # This parameter is not supported by nebula-exchange_spark_2.2.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as table. Multi-table queries are supported.\n      # sentence: \"select * from follow, serve\"\n\n      # Specify the column names in the follow table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [degree]\n      nebula.fields: [degree]\n\n      # In source, use a column in the follow table as the source of the edge's source vertex.\n      # In target, use a column in the follow table as the source of the edge's destination vertex.\n      source: {\n        field: src_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      target: {\n        field: dst_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Edge Type serve.\n    {\n      name: serve\n      type: {\n        source: mysql\n        sink: client\n      }\n\n      host:192.168.*.*\n      port:3306\n      database:\"basketball\"\n      table:\"serve\"\n      user:\"test\"\n      password:\"123456\"\n      sentence:\"select playerid,teamid,start_year,end_year from serve order by playerid;\"\n      fields: [start_year,end_year]\n      nebula.fields: [start_year,end_year]\n      source: {\n        field: playerid\n      }\n      target: {\n        field: teamid\n      }\n      batch: 256\n      partition: 32\n    }\n  ]\n}\n
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-mysql/#step_3_import_data_into_nebulagraph","title":"Step 3: Import data into NebulaGraph","text":"

        Run the following command to import MySQL data into NebulaGraph. For a description of the parameters, see Options for import.

        ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <mysql_application.conf_path>\n

        Note

        JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

        For example:

        ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.7.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/mysql_application.conf\n

        You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-mysql/#step_4_optional_validate_data","title":"Step 4: (optional) Validate data","text":"

        Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

        LOOKUP ON player YIELD id(vertex);\n

        Users can also run the SHOW STATS command to view statistics.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-mysql/#step_5_optional_rebuild_indexes_in_nebulagraph","title":"Step 5: (optional) Rebuild indexes in NebulaGraph","text":"

        With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/","title":"Import data from Neo4j","text":"

        This topic provides an example of how to use Exchange to import NebulaGraph data stored in Neo4j.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#implementation_method","title":"Implementation method","text":"

        Exchange uses Neo4j Driver 4.0.1 to read Neo4j data. Before batch export, you need to write Cypher statements that are automatically executed based on labels and relationship types and the number of Spark partitions in the configuration file to improve data export performance.

        When Exchange reads Neo4j data, it needs to do the following:

        1. The Reader in Exchange replaces the statement following the Cypher RETURN statement in the exec part of the configuration file with COUNT(*), and executes this statement to get the total amount of data, then calculates the starting offset and size of each partition based on the number of Spark partitions.

        2. (Optional) If the user has configured the check_point_path directory, Reader reads the files in the directory. In the transferring state, Reader calculates the offset and size that each Spark partition should have.

        3. In each Spark partition, the Reader in Exchange adds different SKIP and LIMIT statements to the Cypher statement and calls the Neo4j Driver for parallel execution to distribute data to different Spark partitions.

        4. The Reader finally processes the returned data into a DataFrame.

        At this point, Exchange has finished exporting the Neo4j data. The data is then written in parallel to the NebulaGraph database.

        The whole process is illustrated below.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#data_set","title":"Data set","text":"

        This topic takes the basketballplayer dataset as an example.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#environment","title":"Environment","text":"

        This example is done on MacOS. Here is the environment configuration information:

        • Hardware specifications:

          • CPU\uff1aIntel(R) Xeon(R) CPU E5-2697 v3 @ 2.60GHz
          • CPU cores: 14
          • Memory: 251 GB
        • Spark: Stand-alone, 2.4.6 pre-build for Hadoop 2.7
        • Neo4j: 3.5.20 Community Edition
        • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#prerequisites","title":"Prerequisites","text":"

        Before importing data, you need to confirm the following information:

        • NebulaGraph has been installed and deployed with the following information:

          • IP addresses and ports of Graph and Meta services.
          • The user name and password with NebulaGraph write permission.
        • Exchange has been compiled, or download the compiled .jar file directly.
        • Spark has been installed.
        • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

        Analyze the data to create a Schema in NebulaGraph by following these steps:

        1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

          Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
        2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

          ## Create a graph space\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer\nnebula> USE basketballplayer;\n\n## Create the Tag player\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

        For more information, see Quick start workflow.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#step_2_configuring_source_data","title":"Step 2: Configuring source data","text":"

        To speed up the export of Neo4j data, create indexes for the corresponding properties in the Neo4j database. For more information, refer to the Neo4j manual.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#step_3_modify_configuration_files","title":"Step 3: Modify configuration files","text":"

        After Exchange is compiled, copy the conf file target/classes/application.conf to set Neo4j data source configuration. In this example, the copied file is called neo4j_application.conf. For details on each configuration item, see Parameters in the configuration file.

        {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.7.0\n    }\n\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n\n    executor: {\n        memory:1G\n    }\n\n    cores: {\n      max: 16\n    }\n  }\n\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    space: basketballplayer\n\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n\n    execution: {\n      retry: 3\n    }\n\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n\n  # Processing vertexes\n  tags: [\n\n\n    # Set the information about the Tag player\n    {\n      name: player\n      type: {\n        source: neo4j\n        sink: client\n      }\n      server: \"bolt://192.168.*.*:7687\"\n      user: neo4j\n      password:neo4j\n      # bolt 3 does not support multiple databases, do not configure database names. 4 and above can configure database names.\n      # database:neo4j\n      exec: \"match (n:player) return n.id as id, n.age as age, n.name as name\"\n      fields: [age,name]\n      nebula.fields: [age,name]\n      vertex: {\n        field:id\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      partition: 10\n      batch: 1000\n      check_point_path: /tmp/test\n   }\n  # Set the information about the Tag Team\n  {\n      name: team\n      type: {\n        source: neo4j\n        sink: client\n      }\n      server: \"bolt://192.168.*.*:7687\"\n      user: neo4j\n      password:neo4j\n      database:neo4j\n      exec: \"match (n:team) return n.id as id,n.name as name\"\n      fields: [name]\n      nebula.fields: [name]\n      vertex: {\n        field:id\n      }\n      partition: 10\n      batch: 1000\n      check_point_path: /tmp/test\n   }\n  ]\n\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow\n    {\n      name: follow\n      type: {\n        source: neo4j\n        sink: client\n      }\n      server: \"bolt://192.168.*.*:7687\"\n      user: neo4j\n      password:neo4j\n      # bolt 3 does not support multiple databases, do not configure database names. 4 and above can configure database names.\n      # database:neo4j\n      exec: \"match (a:player)-[r:follow]->(b:player) return a.id as src, b.id as dst, r.degree as degree  order by id(r)\"\n      fields: [degree]\n      nebula.fields: [degree]\n      source: {\n        field: src\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n      target: {\n        field: dst\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n      #ranking: rank\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      partition: 10\n      batch: 1000\n      check_point_path: /tmp/test\n    }\n   # Set the information about the Edge Type serve\n   {\n      name: serve\n      type: {\n        source: neo4j\n        sink: client\n      }\n      server: \"bolt://192.168.*.*:7687\"\n      user: neo4j\n      password:neo4j\n      database:neo4j\n      exec: \"match (a:player)-[r:serve]->(b:team) return a.id as src, b.id as dst, r.start_year as start_year, r.end_year as end_year  order by id(r)\"\n      fields: [start_year,end_year]\n      nebula.fields: [start_year,end_year]\n      source: {\n        field: src\n      }\n      target: {\n        field: dst\n      }\n      #ranking: rank\n      partition: 10\n      batch: 1000\n      check_point_path: /tmp/test\n    }\n   ]\n}\n
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#exec_configuration","title":"Exec configuration","text":"

        When configuring either the tags.exec or edges.exec parameters, you need to fill in the Cypher query. To prevent loss of data during import, it is strongly recommended to include ORDER BY clause in Cypher queries. Meanwhile, in order to improve data import efficiency, it is better to select indexed properties for ordering. If there is no index, users can also observe the default order and select the appropriate properties for ordering to improve efficiency. If the pattern of the default order cannot be found, users can order them by the ID of the vertex or relationship and set the partition to a small value to reduce the ordering pressure of Neo4j.

        Note

        Using the ORDER BY clause lengthens the data import time.

        Exchange needs to execute different SKIP and LIMIT Cypher statements on different Spark partitions, so SKIP and LIMIT clauses cannot be included in the Cypher statements corresponding to tags.exec and edges.exec.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#tagsvertex_or_edgesvertex_configuration","title":"tags.vertex or edges.vertex configuration","text":"

        NebulaGraph uses ID as the unique primary key when creating vertexes and edges, overwriting the data in that primary key if it already exists. So, if a Neo4j property value is given as the NebulaGraph'S ID and the value is duplicated in Neo4j, duplicate IDs will be generated. One and only one of their corresponding data will be stored in the NebulaGraph, and the others will be overwritten. Because the data import process is concurrently writing data to NebulaGraph, the final saved data is not guaranteed to be the latest data in Neo4j.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#check_point_path_configuration","title":"check_point_path configuration","text":"

        If breakpoint transfers are enabled, to avoid data loss, the state of the database should not change between the breakpoint and the transfer. For example, data cannot be added or deleted, and the partition quantity configuration should not be changed.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#step_4_import_data_into_nebulagraph","title":"Step 4: Import data into NebulaGraph","text":"

        Run the following command to import Neo4j data into NebulaGraph. For a description of the parameters, see Options for import.

        ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <neo4j_application.conf_path> \n

        Note

        JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

        For example:

        ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.7.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/neo4j_application.conf\n

        You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#step_5_optional_validate_data","title":"Step 5: (optional) Validate data","text":"

        Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

        LOOKUP ON player YIELD id(vertex);\n

        Users can also run the SHOW STATS command to view statistics.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#step_6_optional_rebuild_indexes_in_nebulagraph","title":"Step 6: (optional) Rebuild indexes in NebulaGraph","text":"

        With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-oracle/","title":"Import data from Oracle","text":"

        This topic provides an example of how to use Exchange to export Oracle data and import to NebulaGraph.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-oracle/#data_set","title":"Data set","text":"

        This topic takes the basketballplayer dataset as an example.

        In this example, the data set has been stored in Oracle. All vertexes and edges are stored in the player, team, follow, and serve tables. The following are some of the data for each table.

        oracle> desc player;\n+-----------+-------+---------------+ \n| Column    | Null  | Type          |\n+-----------+-------+---------------+ \n| PLAYERID  |  -    | VARCHAR2(30)  |\n| NAME      |  -    | VARCHAR2(30)  |\n| AGE       |  -    | NUMBER        |\n+-----------+-------+---------------+ \n\noracle> desc team;\n+-----------+-------+---------------+ \n| Column    | Null  | Type          |\n+-----------+-------+---------------+ \n| TEAMID    |  -    | VARCHAR2(30)  |\n| NAME      |  -    | VARCHAR2(30)  |\n+-----------+-------+---------------+ \n\noracle> desc follow;\n+-------------+-------+---------------+ \n| Column      | Null  | Type          |\n+-------------+-------+---------------+ \n| SRC_PLAYER  |  -    | VARCHAR2(30)  |\n| DST_PLAYER  |  -    | VARCHAR2(30)  |\n| DEGREE      |  -    | NUMBER        |\n+-------------+-------+---------------+ \n\noracle> desc serve;\n+------------+-------+---------------+ \n| Column     | Null  | Type          |\n+------------+-------+---------------+ \n| PLAYERID   |  -    | VARCHAR2(30)  |\n| TEAMID     |  -    | VARCHAR2(30)  |\n| START_YEAR |  -    | NUMBER        |\n| END_YEAR   |  -    | NUMBER        |\n+------------+-------+---------------+ \n
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-oracle/#environment","title":"Environment","text":"

        This example is done on MacOS. Here is the environment configuration information:

        • Hardware specifications:
          • CPU: 1.7 GHz Quad-Core Intel Core i7
          • Memory: 16 GB
        • Spark: 2.4.7, stand-alone
        • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-oracle/#prerequisites","title":"Prerequisites","text":"

        Before importing data, you need to confirm the following information:

        • NebulaGraph has been installed and deployed with the following information:

          • IP addresses and ports of Graph and Meta services.
          • The user name and password with write permission to NebulaGraph.
        • Exchange has been compiled, or download the compiled .jar file directly.
        • Spark has been installed.
        • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
        • The Hadoop service has been installed and started.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-oracle/#precautions","title":"Precautions","text":"

        nebula-exchange_spark_2.2 supports only single table queries, not multi-table queries.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-oracle/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-oracle/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

        Analyze the data to create a Schema in NebulaGraph by following these steps:

        1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

          Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
        2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

          ## Create a graph space.\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer.\nnebula> USE basketballplayer;\n\n## Create the Tag player.\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team.\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow.\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve.\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

        For more information, see Quick start workflow.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-oracle/#step_2_modify_configuration_files","title":"Step 2: Modify configuration files","text":"

        After Exchange is compiled, copy the conf file target/classes/application.conf to set Oracle data source configuration. In this case, the copied file is called oracle_application.conf. For details on each configuration item, see Parameters in the configuration file.

        {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.7.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    cores: {\n      max: 16\n    }\n  }\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n  # Processing vertexes\n  tags: [\n    # Set the information about the Tag player.\n    {\n      # The Tag name in NebulaGraph.\n      name: player\n      type: {\n        # Specify the data source file format to Oracle.\n        source: oracle\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      url:\"jdbc:oracle:thin:@host:1521:basketball\"\n      driver: \"oracle.jdbc.driver.OracleDriver\"\n      user: \"root\"\n      password: \"123456\"\n\n      # Scanning a single table to read data.\n      # nebula-exchange_spark_2.2 must configure this parameter. Sentence is not supported.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as sentence.\n      table:\"basketball.player\"\n\n      # Use query statement to read data.\n      # This parameter is not supported by nebula-exchange_spark_2.2.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as table. Multi-table queries are supported.\n      # sentence: \"select * from people, player, team\"\n\n      # Specify the column names in the player table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [age,name]\n      nebula.fields: [age,name]\n\n      # Specify a column of data in the table as the source of VIDs in the NebulaGraph.\n      vertex: {\n        field:playerid\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n    # Set the information about the Tag Team.\n    {\n      name: team\n      type: {\n        source: oracle\n        sink: client\n      }\n\n      url:\"jdbc:oracle:thin:@host:1521:basketball\"\n      driver: \"oracle.jdbc.driver.OracleDriver\"\n      user: \"root\"\n      password: \"123456\"\n      table: \"basketball.team\"\n      sentence: \"select teamid, name from team\"\n\n      fields: [name]\n      nebula.fields: [name]\n      vertex: {\n        field: teamid\n      }\n      batch: 256\n      partition: 32\n    }\n\n  ]\n\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # The corresponding Edge Type name in NebulaGraph.\n      name: follow\n\n      type: {\n        # Specify the data source file format to Oracle.\n        source: oracle\n\n        # Specify how to import the Edge type data into NebulaGraph.\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      url:\"jdbc:oracle:thin:@host:1521:basketball\"\n      driver: \"oracle.jdbc.driver.OracleDriver\"\n      user: \"root\"\n      password: \"123456\"\n\n      # Scanning a single table to read data.\n      # nebula-exchange_spark_2.2 must configure this parameter. Sentence is not supported.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as sentence.\n      table:\"basketball.follow\"\n\n      # Use query statement to read data.\n      # This parameter is not supported by nebula-exchange_spark_2.2.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as table. Multi-table queries are supported.\n      # sentence: \"select * from follow, serve\"\n\n      # Specify the column names in the follow table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [degree]\n      nebula.fields: [degree]\n\n      # In source, use a column in the follow table as the source of the edge's source vertex.\n      # In target, use a column in the follow table as the source of the edge's destination vertex.\n      source: {\n        field: src_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      target: {\n        field: dst_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Edge Type serve.\n    {\n      name: serve\n      type: {\n        source: oracle\n        sink: client\n      }\n\n      url:\"jdbc:oracle:thin:@host:1521:basketball\"\n      driver: \"oracle.jdbc.driver.OracleDriver\"\n      user: \"root\"\n      password: \"123456\"\n      table: \"basketball.serve\"\n      sentence: \"select playerid, teamid, start_year, end_year from serve\"\n\n      fields: [start_year,end_year]\n      nebula.fields: [start_year,end_year]\n      source: {\n        field: playerid\n      }\n      target: {\n        field: teamid\n      }\n      batch: 256\n      partition: 32\n    }\n  ]\n}\n
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-oracle/#step_3_import_data_into_nebulagraph","title":"Step 3: Import data into NebulaGraph","text":"

        Run the following command to import Oracle data into NebulaGraph. For a description of the parameters, see Options for import.

        ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <oracle_application.conf_path>\n

        Note

        JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

        For example:

        ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.7.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/oracle_application.conf\n

        You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-oracle/#step_4_optional_validate_data","title":"Step 4: (optional) Validate data","text":"

        Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

        LOOKUP ON player YIELD id(vertex);\n

        Users can also run the SHOW STATS command to view statistics.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-oracle/#step_5_optional_rebuild_indexes_in_nebulagraph","title":"Step 5: (optional) Rebuild indexes in NebulaGraph","text":"

        With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/","title":"Import data from ORC files","text":"

        This topic provides an example of how to use Exchange to import NebulaGraph data stored in HDFS or local ORC files.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/#data_set","title":"Data set","text":"

        This topic takes the basketballplayer dataset as an example.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/#environment","title":"Environment","text":"

        This example is done on MacOS. Here is the environment configuration information:

        • Hardware specifications:
          • CPU: 1.7 GHz Quad-Core Intel Core i7
          • Memory: 16 GB
        • Spark: 2.4.7, stand-alone
        • Hadoop: 2.9.2, pseudo-distributed deployment
        • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/#prerequisites","title":"Prerequisites","text":"

        Before importing data, you need to confirm the following information:

        • NebulaGraph has been installed and deployed with the following information:

          • IP addresses and ports of Graph and Meta services.
          • The user name and password with write permission to NebulaGraph.
        • Exchange has been compiled, or download the compiled .jar file directly.
        • Spark has been installed.
        • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
        • If files are stored in HDFS, ensure that the Hadoop service is running properly.
        • If files are stored locally and NebulaGraph is a cluster architecture, you need to place the files in the same directory locally on each machine in the cluster.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

        Analyze the data to create a Schema in NebulaGraph by following these steps:

        1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

          Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
        2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

          ## Create a graph space.\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer.\nnebula> USE basketballplayer;\n\n## Create the Tag player.\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team.\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow.\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve.\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

        For more information, see Quick start workflow.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/#step_2_process_orc_files","title":"Step 2: Process ORC files","text":"

        Confirm the following information:

        1. Process ORC files to meet Schema requirements.

        2. Obtain the ORC file storage path.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/#step_3_modify_configuration_files","title":"Step 3: Modify configuration files","text":"

        After Exchange is compiled, copy the conf file target/classes/application.conf to set ORC data source configuration. In this example, the copied file is called orc_application.conf. For details on each configuration item, see Parameters in the configuration file.

        {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.7.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    executor: {\n        memory:1G\n    }\n\n    cores: {\n      max: 16\n    }\n  }\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and all Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n\n  # Processing vertexes\n  tags: [\n    # Set the information about the Tag player.\n    {\n      name: player\n      type: {\n        # Specify the data source file format to ORC.\n        source: orc\n\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # Specify the path to the ORC file.\n      # If the file is stored in HDFS, use double quotation marks to enclose the file path, starting with hdfs://. For example, \"hdfs://ip:port/xx/xx\".\n      # If the file is stored locally, use double quotation marks to enclose the file path, starting with file://. For example, \"file:///tmp/xx.orc\".\n      path: \"hdfs://192.168.*.*:9000/data/vertex_player.orc\"\n\n      # Specify the key name in the ORC file in fields, and its corresponding value will serve as the data source for the properties specified in the NebulaGraph.\n      # If multiple values need to be specified, separate them with commas.\n      fields: [age,name]\n\n      # Specify the property names defined in NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      nebula.fields: [age, name]\n\n      # Specify a column of data in the table as the source of VIDs in the NebulaGraph.\n      # The value of vertex must be consistent with the field in the ORC file.\n      # Currently, NebulaGraph master supports only strings or integers of VID.\n      vertex: {\n        field:id\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Tag team.\n    {\n      name: team\n      type: {\n        source: orc\n        sink: client\n      }\n      path: \"hdfs://192.168.*.*:9000/data/vertex_team.orc\"\n      fields: [name]\n      nebula.fields: [name]\n      vertex: {\n        field:id\n      }\n      batch: 256\n      partition: 32\n    }\n\n\n\n    # If more vertexes need to be added, refer to the previous configuration to add them.\n  ]\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # Specify the Edge Type name defined in NebulaGraph.\n      name: follow\n      type: {\n        # Specify the data source file format to ORC.\n        source: orc\n\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # Specify the path to the ORC file.\n      # If the file is stored in HDFS, use double quotation marks to enclose the file path, starting with hdfs://. For example, \"hdfs://ip:port/xx/xx\".\n      # If the file is stored locally, use double quotation marks to enclose the file path, starting with file://. For example, \"file:///tmp/xx.orc\".\n      path: \"hdfs://192.168.*.*:9000/data/edge_follow.orc\"\n\n      # Specify the key name in the ORC file in fields, and its corresponding value will serve as the data source for the properties specified in the NebulaGraph.\n      # If multiple values need to be specified, separate them with commas.\n      fields: [degree]\n\n      # Specify the property names defined in NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      nebula.fields: [degree]\n\n      # Specify a column as the source for the source and destination vertexes.\n      # The value of vertex must be consistent with the field in the ORC file.\n      # Currently, NebulaGraph master supports only strings or integers of VID.\n      source: {\n        field: src\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n      target: {\n        field: dst\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Edge type serve.\n    {\n      name: serve\n      type: {\n        source: orc\n        sink: client\n      }\n      path: \"hdfs://192.168.*.*:9000/data/edge_serve.orc\"\n      fields: [start_year,end_year]\n      nebula.fields: [start_year, end_year]\n      source: {\n        field: src\n      }\n      target: {\n        field: dst\n      }\n      batch: 256\n      partition: 32\n    }\n\n  # If more edges need to be added, refer to the previous configuration to add them.\n}\n
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/#step_4_import_data_into_nebulagraph","title":"Step 4: Import data into NebulaGraph","text":"

        Run the following command to import ORC data into NebulaGraph. For a description of the parameters, see Options for import.

        ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <orc_application.conf_path> \n

        Note

        JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

        For example:

        ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.7.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/orc_application.conf\n

        You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/#access_hdfs_data_with_kerberos_certification","title":"Access HDFS data with Kerberos certification","text":"

        When using Kerberos for security certification, you can access the HDFS data in one of the following ways.

        • Configure the Kerberos configuration file in a command

          Configure --conf and --files in the command, for example:

          ${SPARK_HOME}/bin/spark-submit --master xxx  --num-executors 2 --executor-cores 2 --executor-memory 1g \\\n--conf \"spark.driver.extraJavaOptions=-Djava.security.krb5.conf=./krb5.conf\" \\\n--conf \"spark.executor.extraJavaOptions=-Djava.security.krb5.conf=./krb5.conf\" \\\n--files /local/path/to/xxx.keytab,/local/path/to/krb5.conf \\\n--class  com.vesoft.nebula.exchange.Exchange  \\\nexchange.jar -c xx.conf\n

          The file path in --conf can be configured in two ways as follows:

          • Configure the absolute path to the file. All YARN or Spark machines are required to have the corresponding file in the same path.
          • (Recommended in YARN mode) Configure the relative path to the file (e.g. ./krb5.conf). The resource files uploaded via --files are located in the working directory of the Java virtual machine or JAR.

          The files in --files must be stored on the machine where the spark-submit command is executed.

        • Without commands

          Deploy the Spark and Kerberos-certified Hadoop in a same cluster to make them share HDFS and YARN, and then add the configuration export HADOOP_HOME=<hadoop_home_path> to spark-env.sh in Spark.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/#step_5_optional_validate_data","title":"Step 5: (optional) Validate data","text":"

        Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

        LOOKUP ON player YIELD id(vertex);\n

        Users can also run the SHOW STATS command to view statistics.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/#step_6_optional_rebuild_indexes_in_nebulagraph","title":"Step 6: (optional) Rebuild indexes in NebulaGraph","text":"

        With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/","title":"Import data from Parquet files","text":"

        This topic provides an example of how to use Exchange to import NebulaGraph data stored in HDFS or local Parquet files.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/#data_set","title":"Data set","text":"

        This topic takes the basketballplayer dataset as an example.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/#environment","title":"Environment","text":"

        This example is done on MacOS. Here is the environment configuration information:

        • Hardware specifications:
          • CPU: 1.7 GHz Quad-Core Intel Core i7
          • Memory: 16 GB
        • Spark: 2.4.7, stand-alone
        • Hadoop: 2.9.2, pseudo-distributed deployment
        • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/#prerequisites","title":"Prerequisites","text":"

        Before importing data, you need to confirm the following information:

        • NebulaGraph has been installed and deployed with the following information:

          • IP addresses and ports of Graph and Meta services.
          • The user name and password with write permission to NebulaGraph.
        • Exchange has been compiled, or download the compiled .jar file directly.
        • Spark has been installed.
        • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
        • If files are stored in HDFS, ensure that the Hadoop service is running properly.
        • If files are stored locally and NebulaGraph is a cluster architecture, you need to place the files in the same directory locally on each machine in the cluster.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

        Analyze the data to create a Schema in NebulaGraph by following these steps:

        1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

          Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
        2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

          ## Create a graph space.\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer.\nnebula> USE basketballplayer;\n\n## Create the Tag player.\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team.\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow.\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve.\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

        For more information, see Quick start workflow.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/#step_2_process_parquet_files","title":"Step 2: Process Parquet files","text":"

        Confirm the following information:

        1. Process Parquet files to meet Schema requirements.

        2. Obtain the Parquet file storage path.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/#step_3_modify_configuration_files","title":"Step 3: Modify configuration files","text":"

        After Exchange is compiled, copy the conf file target/classes/application.conf to set Parquet data source configuration. In this example, the copied file is called parquet_application.conf. For details on each configuration item, see Parameters in the configuration file.

        {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.7.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    executor: {\n        memory:1G\n    }\n\n    cores: {\n      max: 16\n    }\n  }\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and all Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n\n  # Processing vertexes\n  tags: [\n    # Set the information about the Tag player.\n    {\n      # Specify the Tag name defined in NebulaGraph.\n      name: player\n      type: {\n        # Specify the data source file format to Parquet.\n        source: parquet\n\n        # Specifies how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # Specify the path to the Parquet file.\n      # If the file is stored in HDFS, use double quotation marks to enclose the file path, starting with hdfs://. For example, \"hdfs://ip:port/xx/xx\".\n      # If the file is stored locally, use double quotation marks to enclose the file path, starting with file://. For example, \"file:///tmp/xx.parquet\".\n      path: \"hdfs://192.168.*.13:9000/data/vertex_player.parquet\"\n\n      # Specify the key name in the Parquet file in fields, and its corresponding value will serve as the data source for the properties specified in the NebulaGraph.\n      # If multiple values need to be specified, separate them with commas.\n      fields: [age,name]\n\n      # Specify the property name defined in NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      nebula.fields: [age, name]\n\n      # Specify a column of data in the table as the source of VIDs in the NebulaGraph.\n      # The value of vertex must be consistent with the field in the Parquet file.\n      # Currently, NebulaGraph master supports only strings or integers of VID.\n      vertex: {\n        field:id\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Tag team.\n    {\n      name: team\n      type: {\n        source: parquet\n        sink: client\n      }\n      path: \"hdfs://192.168.11.13:9000/data/vertex_team.parquet\"\n      fields: [name]\n      nebula.fields: [name]\n      vertex: {\n        field:id\n      }\n      batch: 256\n      partition: 32\n    }\n\n\n    # If more vertexes need to be added, refer to the previous configuration to add them.\n  ]\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # Specify the Edge Type name defined in NebulaGraph.\n      name: follow\n      type: {\n        # Specify the data source file format to Parquet.\n        source: parquet\n\n        # Specifies how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # Specify the path to the Parquet file.\n      # If the file is stored in HDFS, use double quotation marks to enclose the file path, starting with hdfs://. For example, \"hdfs://ip:port/xx/xx\".\n      # If the file is stored locally, use double quotation marks to enclose the file path, starting with file://. For example, \"file:///tmp/xx.parquet\".\n      path: \"hdfs://192.168.11.13:9000/data/edge_follow.parquet\"\n\n      # Specify the key name in the Parquet file in fields, and its corresponding value will serve as the data source for the properties specified in the NebulaGraph.\n      # If multiple values need to be specified, separate them with commas.\n      fields: [degree]\n\n      # Specify the property name defined in NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      nebula.fields: [degree]\n\n      # Specify a column as the source for the source and destination vertexes.\n      # The values of vertex must be consistent with the fields in the Parquet file.\n      # Currently, NebulaGraph master supports only strings or integers of VID.\n      source: {\n        field: src\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n      target: {\n        field: dst\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Edge type serve.\n    {\n      name: serve\n      type: {\n        source: parquet\n        sink: client\n      }\n      path: \"hdfs://192.168.11.13:9000/data/edge_serve.parquet\"\n      fields: [start_year,end_year]\n      nebula.fields: [start_year, end_year]\n      source: {\n        field: src\n      }\n      target: {\n        field: dst\n      }\n      batch: 256\n      partition: 32\n    }\n\n  ]\n  # If more edges need to be added, refer to the previous configuration to add them.\n}\n
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/#step_4_import_data_into_nebulagraph","title":"Step 4: Import data into NebulaGraph","text":"

        Run the following command to import Parquet data into NebulaGraph. For a description of the parameters, see Options for import.

        ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <parquet_application.conf_path> \n

        Note

        JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

        For example:

        ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.7.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/parquet_application.conf\n

        You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/#access_hdfs_data_with_kerberos_certification","title":"Access HDFS data with Kerberos certification","text":"

        When using Kerberos for security certification, you can access the HDFS data in one of the following ways.

        • Configure the Kerberos configuration file in a command

          Configure --conf and --files in the command, for example:

          ${SPARK_HOME}/bin/spark-submit --master xxx  --num-executors 2 --executor-cores 2 --executor-memory 1g \\\n--conf \"spark.driver.extraJavaOptions=-Djava.security.krb5.conf=./krb5.conf\" \\\n--conf \"spark.executor.extraJavaOptions=-Djava.security.krb5.conf=./krb5.conf\" \\\n--files /local/path/to/xxx.keytab,/local/path/to/krb5.conf \\\n--class  com.vesoft.nebula.exchange.Exchange  \\\nexchange.jar -c xx.conf\n

          The file path in --conf can be configured in two ways as follows:

          • Configure the absolute path to the file. All YARN or Spark machines are required to have the corresponding file in the same path.
          • (Recommended in YARN mode) Configure the relative path to the file (e.g. ./krb5.conf). The resource files uploaded via --files are located in the working directory of the Java virtual machine or JAR.

          The files in --files must be stored on the machine where the spark-submit command is executed.

        • Without commands

          Deploy the Spark and Kerberos-certified Hadoop in a same cluster to make them share HDFS and YARN, and then add the configuration export HADOOP_HOME=<hadoop_home_path> to spark-env.sh in Spark.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/#step_5_optional_validate_data","title":"Step 5: (optional) Validate data","text":"

        Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

        LOOKUP ON player YIELD id(vertex);\n

        Users can also run the SHOW STATS command to view statistics.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/#step_6_optional_rebuild_indexes_in_nebulagraph","title":"Step 6: (optional) Rebuild indexes in NebulaGraph","text":"

        With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-pulsar/","title":"Import data from Pulsar","text":"

        This topic provides an example of how to use Exchange to import NebulaGraph data stored in Pulsar.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-pulsar/#environment","title":"Environment","text":"

        This example is done on MacOS. Here is the environment configuration information:

        • Hardware specifications:
          • CPU: 1.7 GHz Quad-Core Intel Core i7
          • Memory: 16 GB
        • Spark: 2.4.7, stand-alone
        • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-pulsar/#prerequisites","title":"Prerequisites","text":"

        Before importing data, you need to confirm the following information:

        • NebulaGraph has been installed and deployed with the following information:

          • IP addresses and ports of Graph and Meta services.
          • The user name and password with write permission to NebulaGraph.
        • Exchange has been compiled, or download the compiled .jar file directly.
        • Spark has been installed.
        • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
        • The Pulsar service has been installed and started.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-pulsar/#precautions","title":"Precautions","text":"
        • Only client mode is supported when importing Pulsar data, i.e. the value of parameters tags.type.sink and edges.type.sink is client.
        • When importing Pulsar data, do not use Exchange version 3.4.0, which adds caching of imported data and does not support streaming data import. Use Exchange versions 3.0.0, 3.3.0, or 3.5.0.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-pulsar/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-pulsar/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

        Analyze the data to create a Schema in NebulaGraph by following these steps:

        1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

          Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
        2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

          ## Create a graph space\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer\nnebula> USE basketballplayer;\n\n## Create the Tag player\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

        For more information, see Quick start workflow.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-pulsar/#step_2_modify_configuration_files","title":"Step 2: Modify configuration files","text":"

        After Exchange is compiled, copy the conf file target/classes/application.conf to set Pulsar data source configuration. In this example, the copied file is called pulsar_application.conf. For details on each configuration item, see Parameters in the configuration file.

        {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.7.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    cores: {\n      max: 16\n    }\n  }\n\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and all Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n  # Processing vertices\n  tags: [\n    # Set the information about the Tag player.\n    {\n      # The corresponding Tag name in NebulaGraph.\n      name: player\n      type: {\n        # Specify the data source file format to Pulsar.\n        source: pulsar\n        # Specify how to import the data into NebulaGraph. Only client is supported.\n        sink: client\n      }\n      # The address of the Pulsar server.\n      service: \"pulsar://127.0.0.1:6650\"\n      # admin.url of pulsar.\n      admin: \"http://127.0.0.1:8081\"\n      # The Pulsar option can be configured from topic, topics or topicsPattern.\n      options: {\n        topics: \"topic1,topic2\"\n      }\n\n      # Specify the column names in the player table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [age,name]\n      nebula.fields: [age,name]\n\n      # Specify a column of data in the table as the source of VIDs in the NebulaGraph.\n      vertex:{\n          field:playerid\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 10\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 10\n      # The interval for message reading. Unit: second.\n      interval.seconds: 10\n    }\n    # Set the information about the Tag Team.\n    {\n      name: team\n      type: {\n        source: pulsar\n        sink: client\n      }\n      service: \"pulsar://127.0.0.1:6650\"\n      admin: \"http://127.0.0.1:8081\"\n      options: {\n        topics: \"topic1,topic2\"\n      }\n      fields: [name]\n      nebula.fields: [name]\n      vertex:{\n          field:teamid\n      }\n      batch: 10\n      partition: 10\n      interval.seconds: 10\n    }\n\n  ]\n\n  # Processing edges\n  edges: [\n    # Set the information about Edge Type follow\n    {\n      # The corresponding Edge Type name in NebulaGraph.\n      name: follow\n\n      type: {\n        # Specify the data source file format to Pulsar.\n        source: pulsar\n\n        # Specify how to import the Edge type data into NebulaGraph.\n        # Specify how to import the data into NebulaGraph. Only client is supported.\n        sink: client\n      }\n\n      # The address of the Pulsar server.\n      service: \"pulsar://127.0.0.1:6650\"\n      # admin.url of pulsar.\n      admin: \"http://127.0.0.1:8081\"\n      # The Pulsar option can be configured from topic, topics or topicsPattern.\n      options: {\n        topics: \"topic1,topic2\"\n      }\n\n      # Specify the column names in the follow table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [degree]\n      nebula.fields: [degree]\n\n      # In source, use a column in the follow table as the source of the edge's source vertex.\n      # In target, use a column in the follow table as the source of the edge's destination vertex.\n      source:{\n          field:src_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      target:{\n          field:dst_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 10\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 10\n\n      # The interval for message reading. Unit: second.\n      interval.seconds: 10\n    }\n\n    # Set the information about the Edge Type serve\n    {\n      name: serve\n      type: {\n        source: Pulsar\n        sink: client\n      }\n      service: \"pulsar://127.0.0.1:6650\"\n      admin: \"http://127.0.0.1:8081\"\n      options: {\n        topics: \"topic1,topic2\"\n      }\n\n      fields: [start_year,end_year]\n      nebula.fields: [start_year,end_year]\n      source:{\n          field:playerid\n      }\n\n      target:{\n          field:teamid\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      batch: 10\n      partition: 10\n      interval.seconds: 10\n    }\n  ]\n}\n
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-pulsar/#step_3_import_data_into_nebulagraph","title":"Step 3: Import data into NebulaGraph","text":"

        Run the following command to import Pulsar data into NebulaGraph. For a description of the parameters, see Options for import.

        ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <pulsar_application.conf_path>\n

        Note

        JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

        For example:

        ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.7.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/pulsar_application.conf\n

        You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-pulsar/#step_4_optional_validate_data","title":"Step 4: (optional) Validate data","text":"

        Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

        LOOKUP ON player YIELD id(vertex);\n

        Users can also run the SHOW STATS command to view statistics.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-pulsar/#step_5_optional_rebuild_indexes_in_nebulagraph","title":"Step 5: (optional) Rebuild indexes in NebulaGraph","text":"

        With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/","title":"Import data from SST files","text":"

        This topic provides an example of how to generate the data from the data source into an SST (Sorted String Table) file and save it on HDFS, and then import it into NebulaGraph. The sample data source is a CSV file.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#precautions","title":"Precautions","text":"
        • The SST file can be imported only in Linux.
        • The default value of the property is not supported.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#background_information","title":"Background information","text":"

        Exchange supports two data import modes:

        • Import the data from the data source directly into NebulaGraph as nGQL statements.
        • Generate the SST file from the data source, and use Console to import the SST file into NebulaGraph.

        The following describes the scenarios, implementation methods, prerequisites, and steps for generating an SST file and importing data.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#scenarios","title":"Scenarios","text":"
        • Suitable for online services, because the generation almost does not affect services (just reads the Schema), and the import speed is fast.

          Caution

          Although the import speed is fast, write operations in the corresponding space are blocked during the import period (about 10 seconds). Therefore, you are advised to import data in off-peak hours.

        • Suitable for scenarios with a large amount of data from data sources for its fast import speed.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#implementation_methods","title":"Implementation methods","text":"

        The underlying code in NebulaGraph uses RocksDB as the key-value storage engine. RocksDB is a storage engine based on the hard disk, providing a series of APIs for creating and importing SST files to help quickly import massive data.

        The SST file is an internal file containing an arbitrarily long set of ordered key-value pairs for efficient storage of large amounts of key-value data. The entire process of generating SST files is mainly done by Exchange Reader, sstProcessor, and sstWriter. The whole data processing steps are as follows:

        1. Reader reads data from the data source.

        2. sstProcessor generates the SST file from the NebulaGraph's Schema information and uploads it to the HDFS. For details about the format of the SST file, see Data Storage Format.

        3. sstWriter opens a file and inserts data. When generating SST files, keys must be written in sequence.

        4. After the SST file is generated, RocksDB imports the SST file into NebulaGraph using the IngestExternalFile() method. For example:

          IngestExternalFileOptions ifo;\n# Import two SST files\nStatus s = db_->IngestExternalFile({\"/home/usr/file1.sst\", \"/home/usr/file2.sst\"}, ifo);\nif (!s.ok()) {\n  printf(\"Error while adding file %s and %s, Error %s\\n\",\n         file_path1.c_str(), file_path2.c_str(), s.ToString().c_str());\n  return 1;\n}\n

          When the IngestExternalFile() method is called, RocksDB copies the file to the data directory by default and blocks the RocksDB write operation. If the key range in the SST file overwrites the Memtable key range, flush the Memtable to the hard disk. After placing the SST file in an optimal location in the LSM tree, assign a global serial number to the file and turn on the write operation.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#data_set","title":"Data set","text":"

        This topic takes the basketballplayer dataset as an example.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#environment","title":"Environment","text":"

        This example is done on MacOS. Here is the environment configuration information:

        • Hardware specifications:
          • CPU: 1.7 GHz Quad-Core Intel Core i7
          • Memory: 16 GB
        • Spark: 2.4.7, stand-alone
        • Hadoop: 2.9.2, pseudo-distributed deployment
        • NebulaGraph: master.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#prerequisites","title":"Prerequisites","text":"

        Before importing data, you need to confirm the following information:

        • NebulaGraph has been installed and deployed with the following information:

          • IP addresses and ports of Graph and Meta services.
          • The user name and password with write permission to NebulaGraph.
          • --ws_storage_http_port in the Meta service configuration file is the same as --ws_http_port in the Storage service configuration file. For example, 19779.
          • --ws_meta_http_port in the Graph service configuration file is the same as --ws_http_port in the Meta service configuration file. For example, 19559.
          • The information about the Schema, including names and properties of Tags and Edge types, and more.
        • Exchange has been compiled, or download the compiled .jar file directly.
        • Spark has been installed.
        • JDK 1.8 or the later version has been installed and the environment variable JAVA_HOME has been configured.
        • The Hadoop service has been installed and started.

          Note

          • To generate SST files of other data sources, see documents of the corresponding data source and check the prerequisites.
          • To generate SST files only, users do not need to install the Hadoop service on the machine where the Storage service is deployed.
          • To delete the SST file after the ingest (data import) operation, add the configuration -- move_Files =true to the Storage Service configuration file.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

        Analyze the data to create a Schema in NebulaGraph by following these steps:

        1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

          Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
        2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

          ## Create a graph space\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer\nnebula> USE basketballplayer;\n\n## Create the Tag player\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

        For more information, see Quick start workflow.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#step_2_process_csv_files","title":"Step 2: Process CSV files","text":"

        Confirm the following information:

        1. Process CSV files to meet Schema requirements.

          Note

          Exchange supports uploading CSV files with or without headers.

        2. Obtain the CSV file storage path.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#step_3_modify_configuration_files","title":"Step 3: Modify configuration files","text":"

        After Exchange is compiled, copy the conf file target/classes/application.conf to set SST data source configuration. In this example, the copied file is called sst_application.conf. For details on each configuration item, see Parameters in the configuration file.

        {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.7.0\n    }\n\n    master:local\n\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n\n    executor: {\n        memory:1G\n    }\n\n    cores:{\n      max: 16\n    }\n  }\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      graph:[\"192.8.168.XXX:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"192.8.168.XXX:9559\"]\n    }\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    space: basketballplayer\n\n    # SST file configuration\n    path:{\n        # The local directory that temporarily stores generated SST files\n        local:\"/tmp\"\n\n        # The path for storing the SST file in the HDFS\n        remote:\"/sst\"\n\n        # The NameNode address of HDFS, for example, \"hdfs://<ip/hostname>:<port>\"\n        hdfs.namenode: \"hdfs://*.*.*.*:9000\"\n    }\n\n    # The connection parameters of clients\n    connection: {\n      # The timeout duration of socket connection and execution. Unit: milliseconds.\n      timeout: 30000\n    }\n\n    error: {\n      # The maximum number of failures that will exit the application.\n      max: 32\n      # Failed import jobs are logged in the output path.\n      output: /tmp/errors\n    }\n\n    # Use Google's RateLimiter to limit requests to NebulaGraph.\n    rate: {\n      # Steady throughput of RateLimiter.\n      limit: 1024\n\n      # Get the allowed timeout duration from RateLimiter. Unit: milliseconds.\n      timeout: 1000\n    }\n  }\n\n\n  # Processing vertices\n  tags: [\n    # Set the information about the Tag player.\n    {\n      # Specify the Tag name defined in NebulaGraph.\n      name: player\n      type: {\n        # Specify the data source file format to CSV.\n        source: csv\n\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: sst\n      }\n\n      # Specify the path to the CSV file.\n      # If the file is stored in HDFS, use double quotation marks to enclose the file path, starting with hdfs://. For example, \"hdfs://<ip/hostname>:port/xx/xx.csv\".\n      path: \"hdfs://*.*.*.*:9000/dataset/vertex_player.csv\"\n\n      # If the CSV file does not have a header, use [_c0, _c1, _c2, ..., _cn] to represent its header and indicate the columns as the source of the property values.\n      # If the CSV file has a header, use the actual column name.\n      fields: [_c1, _c2]\n\n      # Specify the property name defined in NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      nebula.fields: [age, name]\n\n      # Specify a column of data in the table as the source of VIDs in NebulaGraph.\n      # The value of vertex must be consistent with the column name in the above fields or csv.fields.\n      # Currently, NebulaGraph master supports only strings or integers of VID.\n      vertex: {\n        field:_c0\n        # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The delimiter specified. The default value is comma.\n      separator: \",\"\n\n      # If the CSV file has a header, set the header to true.\n      # If the CSV file does not have a header, set the header to false. The default value is false.\n      header: false\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n\n      # Whether to repartition data based on the number of partitions of graph spaces in NebulaGraph when generating the SST file.\n      repartitionWithNebula: false\n    }\n\n    # Set the information about the Tag Team.\n    {\n      name: team\n      type: {\n        source: csv\n        sink: sst\n      }\n      path: \"hdfs://*.*.*.*:9000/dataset/vertex_team.csv\"\n      fields: [_c1]\n      nebula.fields: [name]\n      vertex: {\n        field:_c0\n      }\n      separator: \",\"\n      header: false\n      batch: 256\n      partition: 32\n      repartitionWithNebula: false\n    }\n    # If more vertices need to be added, refer to the previous configuration to add them.\n  ]\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # The Edge Type name defined in NebulaGraph.\n      name: follow\n      type: {\n        # Specify the data source file format to CSV.\n        source: csv\n\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: sst\n      }\n\n      # Specify the path to the CSV file.\n      # If the file is stored in HDFS, use double quotation marks to enclose the file path, starting with hdfs://. For example, \"hdfs://<ip/hostname>:port/xx/xx.csv\".\n      path: \"hdfs://*.*.*.*:9000/dataset/edge_follow.csv\"\n\n      # If the CSV file does not have a header, use [_c0, _c1, _c2, ..., _cn] to represent its header and indicate the columns as the source of the property values.\n      # If the CSV file has a header, use the actual column name.\n      fields: [_c2]\n\n      # Specify the property name defined in NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      nebula.fields: [degree]\n\n      # Specify a column as the source for the source and destination vertices.\n      # The value of vertex must be consistent with the column name in the above fields or csv.fields.\n      # Currently, NebulaGraph master supports only strings or integers of VID.\n      source: {\n        field: _c0\n        # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n      target: {\n        field: _c1\n        # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The delimiter specified. The default value is comma.\n      separator: \",\"\n\n      # (Optional) Specify a column as the source of the rank.\n\n      #ranking: rank\n\n      # If the CSV file has a header, set the header to true.\n      # If the CSV file does not have a header, set the header to false. The default value is false.\n      header: false\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n\n      # Whether to repartition data based on the number of partitions of graph spaces in NebulaGraph when generating the SST file.\n      repartitionWithNebula: false\n    }\n\n    # Set the information about the Edge Type serve.\n    {\n      name: serve\n      type: {\n        source: csv\n        sink: sst\n      }\n      path: \"hdfs://*.*.*.*:9000/dataset/edge_serve.csv\"\n      fields: [_c2,_c3]\n      nebula.fields: [start_year, end_year]\n      source: {\n        field: _c0\n      }\n      target: {\n        field: _c1\n      }\n      separator: \",\"\n      header: false\n      batch: 256\n      partition: 32\n      repartitionWithNebula: false\n    }\n\n  ]\n  # If more edges need to be added, refer to the previous configuration to add them.\n}\n
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#step_4_generate_the_sst_file","title":"Step 4: Generate the SST file","text":"

        Run the following command to generate the SST file from the CSV source file. For a description of the parameters, see Options for import.

        ${SPARK_HOME}/bin/spark-submit --master \"local\" --conf spark.sql.shuffle.partition=<shuffle_concurrency> --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <sst_application.conf_path> \n

        Note

        When generating SST files, the shuffle operation of Spark will be involved. Note that the configuration of spark.sql.shuffle.partition should be added when you submit the command.

        Note

        JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

        For example:

        ${SPARK_HOME}/bin/spark-submit  --master \"local\" --conf spark.sql.shuffle.partition=200 --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.7.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/sst_application.conf\n

        After the task is complete, you can view the generated SST file in the /sst directory (specified by the nebula.path.remote parameter) on HDFS.

        Note

        If you modify the Schema, such as rebuilding the graph space, modifying the Tag, or modifying the Edge type, you need to regenerate the SST file because the SST file verifies the space ID, Tag ID, and Edge ID.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#step_5_import_the_sst_file","title":"Step 5: Import the SST file","text":"

        Note

        Confirm the following information before importing:

        • Confirm that the Hadoop service has been deployed on all the machines where the Storage service is deployed, and configure HADOOP_HOME and JAVA_HOME.
        • The --ws_storage_http_port in the Meta service configuration file (add it manually if it does not exist) is the same as the --ws_http_port in the Storage service configuration file. For example, both are 19779.
        • The --ws_meta_http_port in the Graph service configuration file (add it manually if it does not exist) is the same as the --ws_http_port in the Meta service configuration file. For example, both are 19559.

        Connect to the NebulaGraph database using the client tool and import the SST file as follows:

        1. Run the following command to select the graph space you created earlier.

          nebula> USE basketballplayer;\n
        2. Run the following command to download the SST file:

          nebula> SUBMIT JOB DOWNLOAD HDFS \"hdfs://<hadoop_address>:<hadoop_port>/<sst_file_path>\";\n

          For example:

          nebula> SUBMIT JOB DOWNLOAD HDFS \"hdfs://*.*.*.*:9000/sst\";\n
        3. Run the following command to import the SST file:

          nebula> SUBMIT JOB INGEST;\n

        Note

        • To download the SST file again, delete the download folder in the space ID in the data/storage/nebula directory in the NebulaGraph installation path, and then download the SST file again. If the space has multiple copies, the download folder needs to be deleted on all machines where the copies are saved.
        • If there is a problem with the import and re-importing is required, re-execute SUBMIT JOB INGEST;.
        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#step_6_optional_validate_data","title":"Step 6: (Optional) Validate data","text":"

        Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

        LOOKUP ON player YIELD id(vertex);\n

        Users can also run the SHOW STATS command to view statistics.

        "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#step_7_conditional_rebuild_indexes_in_nebulagraph","title":"Step 7: (Conditional) Rebuild indexes in NebulaGraph","text":"

        With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

        "},{"location":"k8s-operator/1.introduction-to-nebula-operator/","title":"What is NebulaGraph Operator","text":""},{"location":"k8s-operator/1.introduction-to-nebula-operator/#concept","title":"Concept","text":"

        NebulaGraph Operator is a tool to automate the deployment, operation, and maintenance of NebulaGraph clusters on Kubernetes. Building upon the excellent scalability mechanism of Kubernetes, NebulaGraph introduced its operation and maintenance knowledge into the Kubernetes system, which makes NebulaGraph a real cloud-native graph database.

        "},{"location":"k8s-operator/1.introduction-to-nebula-operator/#how_it_works","title":"How it works","text":"

        For resource types that do not exist within Kubernetes, you can register them by adding custom API objects. The common way is to use the CustomResourceDefinition.

        NebulaGraph Operator abstracts the deployment management of NebulaGraph clusters as a CRD. By combining multiple built-in API objects including StatefulSet, Service, and ConfigMap, the routine management and maintenance of a NebulaGraph cluster are coded as a control loop in the Kubernetes system. When a CR instance is submitted, NebulaGraph Operator drives database clusters to the final state according to the control process.

        "},{"location":"k8s-operator/1.introduction-to-nebula-operator/#features","title":"Features","text":"

        The following features are already available in NebulaGraph Operator:

        • Cluster deployment and deletion: NebulaGraph Operator simplifies the process of deploying and uninstalling clusters for users. NebulaGraph Operator allows you to quickly create, update, or delete a NebulaGraph cluster by simply providing the corresponding CR file. For more information, see Install NebulaGraph Clusters.
        • Cluster Upgrade: NebulaGraph Operator supports cluster upgrading from version 3.5.0 to version 3.6.0.
        • Self-Healing: NebulaGraph Operator calls interfaces provided by NebulaGraph clusters to dynamically sense cluster service status. Once an exception is detected, NebulaGraph Operator performs fault tolerance. For more information, see Self-Healing.
        • Balance Scheduling: Based on the scheduler extension interface, the scheduler provided by NebulaGraph Operator evenly distributes Pods in a NebulaGraph cluster across all nodes.
        "},{"location":"k8s-operator/1.introduction-to-nebula-operator/#limitations","title":"Limitations","text":""},{"location":"k8s-operator/1.introduction-to-nebula-operator/#version_limitations","title":"Version limitations","text":"

        NebulaGraph Operator does not support the v1.x version of NebulaGraph. NebulaGraph Operator version and the corresponding NebulaGraph version are as follows:

        NebulaGraph NebulaGraph Operator 3.5.x ~ 3.6.0 1.5.0 ~ 1.7.x, 1.8.0 3.0.0 ~ 3.4.1 1.3.0, 1.4.0 ~ 1.4.2 3.0.0 ~ 3.3.x 1.0.0, 1.1.0, 1.2.0 2.5.x ~ 2.6.x 0.9.0 2.5.x 0.8.0

        Legacy version compatibility

        • The 1.x version NebulaGraph Operator is not compatible with NebulaGraph of version below v3.x.
        • Starting from NebulaGraph Operator 0.9.0, logs and data are stored separately. Using NebulaGraph Operator 0.9.0 or later versions to manage a NebulaGraph 2.5.x cluster created with Operator 0.8.0 can cause compatibility issues. You can backup the data of the NebulaGraph 2.5.x cluster and then create a 2.6.x cluster with Operator 0.9.0.
        "},{"location":"k8s-operator/1.introduction-to-nebula-operator/#release_note","title":"Release note","text":"

        Release

        "},{"location":"k8s-operator/5.FAQ/","title":"FAQ","text":""},{"location":"k8s-operator/5.FAQ/#does_nebulagraph_operator_support_the_v1x_version_of_nebulagraph","title":"Does NebulaGraph Operator support the v1.x version of NebulaGraph?","text":"

        No, because the v1.x version of NebulaGraph does not support DNS, and NebulaGraph Operator requires the use of DNS.

        "},{"location":"k8s-operator/5.FAQ/#is_cluster_stability_guaranteed_if_using_local_storage","title":"Is cluster stability guaranteed if using local storage?","text":"

        There is no guarantee. Using local storage means that the Pod is bound to a specific node, and NebulaGraph Operator does not currently support failover in the event of a failure of the bound node.

        "},{"location":"k8s-operator/5.FAQ/#how_to_ensure_the_stability_of_a_cluster_when_scaling_the_cluster","title":"How to ensure the stability of a cluster when scaling the cluster?","text":"

        It is suggested to back up data in advance so that you can roll back data in case of failure.

        "},{"location":"k8s-operator/5.FAQ/#is_the_replica_in_the_operator_docs_the_same_as_the_replica_in_the_nebulagraph_core_docs","title":"Is the replica in the Operator docs the same as the replica in the NebulaGraph core docs?","text":"

        They are different concepts. A replica in the Operator docs indicates a pod replica in K8s, while a replica in the core docs is a replica of a NebulaGraph storage partition.

        "},{"location":"k8s-operator/5.FAQ/#how_to_view_the_logs_of_each_service_in_the_nebulagraph_cluster","title":"How to view the logs of each service in the NebulaGraph cluster?","text":"

        To obtain the logs of each cluster service, you need to access the container and view the log files that are stored inside.

        Steps to view the logs of each service in the NebulaGraph cluster:

        # To view the name of the pod where the container you want to access is located. \n# Replace <cluster-name> with the name of the cluster.\nkubectl get pods -l app.kubernetes.io/cluster=<cluster-name>\n\n# To access the container within the pod, such as the nebula-graphd-0 container.\nkubectl exec -it nebula-graphd-0 -- /bin/bash\n\n# To go to /usr/local/nebula/logs directory to view the logs.\ncd /usr/local/nebula/logs\n
        "},{"location":"k8s-operator/5.FAQ/#how_to_resolve_the_host_not_foundnebula-metadstoragedgraphd-0nebulametadstoragedgraphd-headlessdefaultsvcclusterlocal_error","title":"How to resolve the host not found:nebula-<metad|storaged|graphd>-0.nebula.<metad|storaged|graphd>-headless.default.svc.cluster.local error?","text":"

        This error is generally caused by a DNS resolution failure, and you need to check whether the cluster domain has been modified. If the cluster domain has been modified, you need to modify the kubernetesClusterDomain field in the NebulaGraph Operator configuration file accordingly. The steps for modifying the Operator configuration file are as follows:

        1. View the Operator configuration file.

          [abby@master ~]$ helm show values nebula-operator/nebula-operator   \nimage:\n  nebulaOperator:\n    image: vesoft/nebula-operator:v1.8.0\n    imagePullPolicy: Always\n  kubeRBACProxy:\n    image: bitnami/kube-rbac-proxy:0.14.2\n    imagePullPolicy: Always\n  kubeScheduler:\n    image: registry.k8s.io/kube-scheduler:v1.24.11\n    imagePullPolicy: Always\n\nimagePullSecrets: []\nkubernetesClusterDomain: \"\"  # The cluster domain name, and the default is cluster.local.\n
        2. Modify the value of the kubernetesClusterDomain field to the updated cluster domain name.

          helm upgrade nebula-operator nebula-operator/nebula-operator --namespace=<nebula-operator-system> --version=1.8.0 --set kubernetesClusterDomain=<cluster-domain>\n
          is the namespace where Operator is located and is the updated domain name."},{"location":"k8s-operator/2.get-started/2.1.install-operator/","title":"Install NebulaGraph Operator","text":"

          You can deploy NebulaGraph Operator with Helm.

          "},{"location":"k8s-operator/2.get-started/2.1.install-operator/#background","title":"Background","text":"

          NebulaGraph Operator automates the management of NebulaGraph clusters, and eliminates the need for you to install, scale, upgrade, and uninstall NebulaGraph clusters, which lightens the burden on managing different application versions.

          "},{"location":"k8s-operator/2.get-started/2.1.install-operator/#prerequisites","title":"Prerequisites","text":"

          Before installing NebulaGraph Operator, you need to install the following software and ensure the correct version of the software :

          Software Requirement Kubernetes >= 1.18 Helm >= 3.2.0 CoreDNS >= 1.6.0

          Note

          • If using a role-based access control policy, you need to enable RBAC (optional).
          • CoreDNS is a flexible and scalable DNS server that is installed for Pods in NebulaGraph clusters.
          "},{"location":"k8s-operator/2.get-started/2.1.install-operator/#steps","title":"Steps","text":"
          1. Add the NebulaGraph Operator Helm repository.

            helm repo add nebula-operator https://vesoft-inc.github.io/nebula-operator/charts\n
          2. Update information of available charts locally from repositories.

            helm repo update\n

            For more information about helm repo, see Helm Repo.

          3. Create a namespace for NebulaGraph Operator.

            kubectl create namespace <namespace_name>\n

            For example, run the following command to create a namespace named nebula-operator-system.

            kubectl create namespace nebula-operator-system\n

            All the resources of NebulaGraph Operator are deployed in this namespace.

          4. Install NebulaGraph Operator.

            helm install nebula-operator nebula-operator/nebula-operator --namespace=<namespace_name> --version=${chart_version}\n

            For example, the command to install NebulaGraph Operator of version 1.8.0 is as follows.

            helm install nebula-operator nebula-operator/nebula-operator --namespace=nebula-operator-system --version=1.8.0\n

            1.8.0 is the version of the nebula-operator chart. When not specifying --version, the latest version of the nebula-operator chart is used by default.

            Run helm search repo -l nebula-operator to see chart versions.

            You can customize the configuration items of the NebulaGraph Operator chart before running the installation command. For more information, see Customize installation defaults.

          5. View the information about the default-created CRD.

            kubectl get crd\n

            Output:

            NAME                                                 CREATED AT\nnebulaautoscalers.autoscaling.nebula-graph.io        2023-11-01T04:16:51Z\nnebulaclusters.apps.nebula-graph.io                  2023-10-12T07:55:32Z\nnebularestores.apps.nebula-graph.io                  2023-02-04T23:01:00Z\n
          "},{"location":"k8s-operator/2.get-started/2.1.install-operator/#whats_next","title":"What's next","text":"

          Create a NebulaGraph cluster

          "},{"location":"k8s-operator/2.get-started/2.3.create-cluster/","title":"Create a NebulaGraph cluster","text":"

          This topic introduces how to create a NebulaGraph cluster with the following two methods:

          • Create a NebulaGraph cluster with Helm
          • Create a NebulaGraph cluster with Kubectl
          "},{"location":"k8s-operator/2.get-started/2.3.create-cluster/#prerequisites","title":"Prerequisites","text":"
          • NebulaGraph Operator is installed.
          • A StorageClass is created.
          "},{"location":"k8s-operator/2.get-started/2.3.create-cluster/#create_a_nebulagraph_cluster_with_helm","title":"Create a NebulaGraph cluster with Helm","text":"

          Legacy version compatibility

          The 1.x version NebulaGraph Operator is not compatible with NebulaGraph of version below v3.x.

          1. Add the NebulaGraph Operator Helm repository.

            helm repo add nebula-operator https://vesoft-inc.github.io/nebula-operator/charts\n
          2. Update information of available charts locally from chart repositories.

            helm repo update\n
          3. Set environment variables to your desired values.

            export NEBULA_CLUSTER_NAME=nebula         # The desired NebulaGraph cluster name.\nexport NEBULA_CLUSTER_NAMESPACE=nebula    # The desired namespace where your NebulaGraph cluster locates.\nexport STORAGE_CLASS_NAME=fast-disks             # The name of the StorageClass that has been created.\n
          4. Create a namespace for your NebulaGraph cluster (If you have created one, skip this step).

            kubectl create namespace \"${NEBULA_CLUSTER_NAMESPACE}\"\n
          5. Apply the variables to the Helm chart to create a NebulaGraph cluster.

            helm install \"${NEBULA_CLUSTER_NAME}\" nebula-operator/nebula-cluster \\\n    --set nameOverride=\"${NEBULA_CLUSTER_NAME}\" \\\n    --set nebula.storageClassName=\"${STORAGE_CLASS_NAME}\" \\\n    # Specify the version of the NebulaGraph cluster. \n    --set nebula.version=vmaster \\  \n    # Specify the version of the nebula-cluster chart. If not specified, the latest version of the chart is installed by default.\n    # Run 'helm search repo nebula-operator/nebula-cluster' to view the available versions of the chart.     \n    --version=1.8.0 \\\n    --namespace=\"${NEBULA_CLUSTER_NAMESPACE}\" \\\n
          "},{"location":"k8s-operator/2.get-started/2.3.create-cluster/#create_a_nebulagraph_cluster_with_kubectl","title":"Create a NebulaGraph cluster with Kubectl","text":"

          Legacy version compatibility

          The 1.x version NebulaGraph Operator is not compatible with NebulaGraph of version below v3.x.

          The following example shows how to create a NebulaGraph cluster by creating a cluster named nebula.

          1. Create a namespace, for example, nebula. If not specified, the default namespace is used.

            kubectl create namespace nebula\n
          2. Define the cluster configuration file nebulacluster.yaml.

            Expand to see an example configuration for the cluster
            apiVersion: apps.nebula-graph.io/v1alpha1\nkind: NebulaCluster\nmetadata:\n  name: nebula\n  namespace: default\nspec:\n  topologySpreadConstraints:\n  - topologyKey: \"kubernetes.io/hostname\"\n    whenUnsatisfiable: \"ScheduleAnyway\"\n  graphd:\n    # Container image for the Graph service.\n    image: vesoft/nebula-graphd\n    logVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      # Storage class name for storing Graph service logs.\n      storageClassName: local-sc\n    replicas: 1\n    resources:\n      limits:\n        cpu: \"1\"\n        memory: 1Gi\n      requests:\n        cpu: 500m\n        memory: 500Mi\n    version: vmaster\n  imagePullPolicy: Always\n  metad:\n    # Container image for the Meta service.\n    image: vesoft/nebula-metad\n    logVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      storageClassName: local-sc\n    dataVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      storageClassName: local-sc\n    replicas: 1\n    resources:\n      limits:\n        cpu: \"1\"\n        memory: 1Gi\n      requests:\n        cpu: 500m\n        memory: 500Mi\n    version: vmaster\n  reference:\n    name: statefulsets.apps\n    version: v1\n  schedulerName: default-scheduler\n  storaged:\n    # Container image for the Storage service.\n    image: vesoft/nebula-storaged\n    logVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      storageClassName: local-sc\n    dataVolumeClaims:\n    - resources:\n        requests:\n          storage: 2Gi\n      storageClassName: local-sc\n    replicas: 1\n    resources:\n      limits:\n        cpu: \"1\"\n        memory: 1Gi\n      requests:\n        cpu: 500m\n        memory: 500Mi\n    version: vmaster\n

            For more information about the other parameters, see Install NebulaGraph clusters.

          3. Create a NebulaGraph cluster.

            kubectl create -f nebulacluster.yaml\n

            Output:

            nebulacluster.apps.nebula-graph.io/nebula created\n
          4. Check the status of the NebulaGraph cluster.

            kubectl get nc nebula\n

            Output:

            NAME     READY     GRAPHD-DESIRED   GRAPHD-READY   METAD-DESIRED   METAD-READY   STORAGED-DESIRED   STORAGED-READY   AGE\nnebula    True     1                1              1               1             1                  1                86s\n
          "},{"location":"k8s-operator/2.get-started/2.3.create-cluster/#whats_next","title":"What's next","text":"

          Connect to a cluster

          "},{"location":"k8s-operator/2.get-started/2.4.connect-to-cluster/","title":"Connect to a NebulaGraph cluster","text":"

          After creating a NebulaGraph cluster with NebulaGraph Operator on Kubernetes, you can connect to NebulaGraph databases from within the cluster and outside the cluster.

          "},{"location":"k8s-operator/2.get-started/2.4.connect-to-cluster/#prerequisites","title":"Prerequisites","text":"

          A NebulaGraph cluster is created on Kubernetes. For more information, see Create a NebulaGraph cluster.

          "},{"location":"k8s-operator/2.get-started/2.4.connect-to-cluster/#connect_to_nebulagraph_databases_from_within_a_nebulagraph_cluster","title":"Connect to NebulaGraph databases from within a NebulaGraph cluster","text":"

          You can create a ClusterIP type Service to provide an access point to the NebulaGraph database for other Pods within the cluster. By using the Service's IP and the Graph service's port number (9669), you can connect to the NebulaGraph database. For more information, see ClusterIP.

          1. Create a file named graphd-clusterip-service.yaml. The file contents are as follows:

            apiVersion: v1\nkind: Service\nmetadata:\n  labels:\n    app.kubernetes.io/cluster: nebula\n    app.kubernetes.io/component: graphd\n    app.kubernetes.io/managed-by: nebula-operator\n    app.kubernetes.io/name: nebula-graph\n  name: nebula-graphd-svc\n  namespace: default\nspec:\n  ports:\n  - name: thrift\n    port: 9669\n    protocol: TCP\n    targetPort: 9669\n  - name: http\n    port: 19669\n    protocol: TCP\n    targetPort: 19669\n  selector:\n    app.kubernetes.io/cluster: nebula\n    app.kubernetes.io/component: graphd\n    app.kubernetes.io/managed-by: nebula-operator\n    app.kubernetes.io/name: nebula-graph\n  type: ClusterIP  # Set the type to ClusterIP.\n
            • NebulaGraph uses port 9669 by default. 19669 is the HTTP port of the Graph service in a NebulaGraph cluster.
            • targetPort is the port mapped to the database Pods, which can be customized.
          2. Create a ClusterIP Service.

            kubectl create -f graphd-clusterip-service.yaml     \n
          3. Check the IP of the Service:

            $ kubectl get service -l app.kubernetes.io/cluster=<nebula>  # <nebula> is the name of your NebulaGraph cluster.\nNAME                       TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                                          AGE\nnebula-graphd-svc          ClusterIP   10.98.213.34   <none>        9669/TCP,19669/TCP,19670/TCP                     23h\n...\n
          4. Run the following command to connect to the NebulaGraph database using the IP of the <cluster-name>-graphd-svc Service above:

            kubectl run -ti --image vesoft/nebula-console:v3.6.0 --restart=Never -- <nebula_console_name> -addr <cluster_ip>  -port <service_port> -u <username> -p <password>\n

            For example:

            kubectl run -ti --image vesoft/nebula-console:v3.6.0 --restart=Never -- nebula-console -addr 10.98.213.34  -port 9669 -u root -p vesoft\n
            • --image: The image for the tool NebulaGraph Console used to connect to NebulaGraph databases.
            • <nebula-console>: The custom Pod name.
            • -addr: The IP of the ClusterIP Service, used to connect to Graphd services.
            • -port: The port to connect to Graphd services, the default port of which is 9669.
            • -u: The username of your NebulaGraph account. Before enabling authentication, you can use any existing username. The default username is root.
            • -p: The password of your NebulaGraph account. Before enabling authentication, you can use any characters as the password.

            A successful connection to the database is indicated if the following is returned:

            If you don't see a command prompt, try pressing enter.\n\n(root@nebula) [(none)]>\n

            You can also connect to NebulaGraph databases with Fully Qualified Domain Name (FQDN). The domain format is <cluster-name>-graphd.<cluster-namespace>.svc.<CLUSTER_DOMAIN>. The default value of CLUSTER_DOMAIN is cluster.local.

            kubectl run -ti --image vesoft/nebula-console:v3.6.0 --restart=Never -- <nebula_console_name> -addr <cluster_name>-graphd-svc.default.svc.cluster.local -port <service_port> -u <username> -p <password>\n

            service_port is the port to connect to Graphd services, the default port of which is 9669.

            Note

            If the spec.console field is set in the cluster configuration file, you can also connect to NebulaGraph databases with the following command:

            # Enter the nebula-console Pod.\nkubectl exec -it nebula-console -- /bin/sh\n\n# Connect to NebulaGraph databases.\nnebula-console -addr nebula-graphd-svc.default.svc.cluster.local -port 9669 -u <username> -p <password>\n

            For information about the nebula-console container, see nebula-console.

          "},{"location":"k8s-operator/2.get-started/2.4.connect-to-cluster/#connect_to_nebulagraph_databases_from_within_a_nebulagraph_cluster_1","title":"Connect to NebulaGraph databases from within a NebulaGraph cluster","text":"

          You can also create a ClusterIP type Service to provide an access point to the NebulaGraph database for other Pods within the cluster. By using the Service's IP and the Graph service's port number (9669), you can connect to the NebulaGraph database. For more information, see ClusterIP.

          1. Create a file named graphd-clusterip-service.yaml. The file contents are as follows:

            apiVersion: v1\nkind: Service\nmetadata:\n  labels:\n    app.kubernetes.io/cluster: nebula\n    app.kubernetes.io/component: graphd\n    app.kubernetes.io/managed-by: nebula-operator\n    app.kubernetes.io/name: nebula-graph\n  name: nebula-graphd-svc\n  namespace: default\nspec:\n  externalTrafficPolicy: Local\n  ports:\n  - name: thrift\n    port: 9669\n    protocol: TCP\n    targetPort: 9669\n  - name: http\n    port: 19669\n    protocol: TCP\n    targetPort: 19669\n  selector:\n    app.kubernetes.io/cluster: nebula\n    app.kubernetes.io/component: graphd\n    app.kubernetes.io/managed-by: nebula-operator\n    app.kubernetes.io/name: nebula-graph\n  type: ClusterIP  # Set the type to ClusterIP.\n
            • NebulaGraph uses port 9669 by default. 19669 is the HTTP port of the Graph service in a NebulaGraph cluster.
            • targetPort is the port mapped to the database Pods, which can be customized.
          2. Create a ClusterIP Service.

            kubectl create -f graphd-clusterip-service.yaml     \n
          3. Check the IP of the Service:

            $ kubectl get service -l app.kubernetes.io/cluster=<nebula>  # <nebula> is the name of your NebulaGraph cluster.\nNAME                       TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                                          AGE\nnebula-graphd-svc          ClusterIP   10.98.213.34   <none>        9669/TCP,19669/TCP,19670/TCP                     23h\n...\n
          4. Run the following command to connect to the NebulaGraph database using the IP of the <cluster-name>-graphd-svc Service above:

            kubectl run -ti --image vesoft/nebula-console:v3.6.0 --restart=Never -- <nebula_console_name> -addr <cluster_ip>  -port <service_port> -u <username> -p <password>\n

            For example:

            kubectl run -ti --image vesoft/nebula-console:v3.6.0 --restart=Never -- nebula-console -addr 10.98.213.34  -port 9669 -u root -p vesoft\n
            • --image: The image for the tool NebulaGraph Console used to connect to NebulaGraph databases.
            • <nebula-console>: The custom Pod name.
            • -addr: The IP of the ClusterIP Service, used to connect to Graphd services.
            • -port: The port to connect to Graphd services, the default port of which is 9669.
            • -u: The username of your NebulaGraph account. Before enabling authentication, you can use any existing username. The default username is root.
            • -p: The password of your NebulaGraph account. Before enabling authentication, you can use any characters as the password.

            A successful connection to the database is indicated if the following is returned:

            If you don't see a command prompt, try pressing enter.\n\n(root@nebula) [(none)]>\n

            You can also connect to NebulaGraph databases with Fully Qualified Domain Name (FQDN). The domain format is <cluster-name>-graphd.<cluster-namespace>.svc.<CLUSTER_DOMAIN>. The default value of CLUSTER_DOMAIN is cluster.local.

            kubectl run -ti --image vesoft/nebula-console:v3.6.0 --restart=Never -- <nebula_console_name> -addr <cluster_name>-graphd-svc.default.svc.cluster.local -port <service_port> -u <username> -p <password>\n

            service_port is the port to connect to Graphd services, the default port of which is 9669.

            Note

            If the spec.console field is set in the cluster configuration file, you can also connect to NebulaGraph databases with the following command:

            # Enter the nebula-console Pod.\nkubectl exec -it nebula-console -- /bin/sh\n\n# Connect to NebulaGraph databases.\nnebula-console -addr nebula-graphd-svc.default.svc.cluster.local -port 9669 -u <username> -p <password>\n

            For information about the nebula-console container, see nebula-console.

          "},{"location":"k8s-operator/2.get-started/2.4.connect-to-cluster/#connect_to_nebulagraph_databases_from_outside_a_nebulagraph_cluster_via_nodeport","title":"Connect to NebulaGraph databases from outside a NebulaGraph cluster via NodePort","text":"

          You can create a NodePort type Service to access internal cluster services from outside the cluster using any node IP and the exposed node port. You can also utilize load balancing services provided by cloud vendors (such as Azure, AWS, etc.) by setting the Service type to LoadBalancer. This allows external access to internal cluster services through the public IP and port of the load balancer provided by the cloud vendor.

          The Service of type NodePort forwards the front-end requests via the label selector spec.selector to Graphd pods with labels app.kubernetes.io/cluster: <cluster-name> and app.kubernetes.io/component: graphd.

          After creating a NebulaGraph cluster based on the example template, where spec.graphd.service.type=NodePort, the NebulaGraph Operator will automatically create a NodePort type Service named <cluster-name>-graphd-svc in the same namespace. You can directly connect to the NebulaGraph database through any node IP and the exposed node port (see step 4 below). You can also create a custom Service according to your needs.

          Steps:

          1. Create a YAML file named graphd-nodeport-service.yaml. The file contents are as follows:

            apiVersion: v1\nkind: Service\nmetadata:\n  labels:\n    app.kubernetes.io/cluster: nebula\n    app.kubernetes.io/component: graphd\n    app.kubernetes.io/managed-by: nebula-operator\n    app.kubernetes.io/name: nebula-graph\n  name: nebula-graphd-svc-nodeport\n  namespace: default\nspec:\n  externalTrafficPolicy: Local\n  ports:\n  - name: thrift\n    port: 9669\n    protocol: TCP\n    targetPort: 9669\n  - name: http\n    port: 19669\n    protocol: TCP\n    targetPort: 19669\n  selector:\n    app.kubernetes.io/cluster: nebula\n    app.kubernetes.io/component: graphd\n    app.kubernetes.io/managed-by: nebula-operator\n    app.kubernetes.io/name: nebula-graph\n  type: NodePort   # Set the type to NodePort.\n
            • NebulaGraph uses port 9669 by default. 19669 is the HTTP port of the Graph service in a NebulaGraph cluster.
            • The value of targetPort is the port mapped to the database Pods, which can be customized.
          2. Run the following command to create a NodePort Service.

            kubectl create -f graphd-nodeport-service.yaml\n
          3. Check the port mapped on all of your cluster nodes.

            kubectl get services -l app.kubernetes.io/cluster=<nebula> # <nebula> is the name of your NebulaGraph cluster.\n

            Output:

            NAME                           TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                                          AGE\nnebula-graphd-svc-nodeport     NodePort    10.107.153.129 <none>        9669:32236/TCP,19669:31674/TCP,19670:31057/TCP   24h\n...\n

            As you see, the mapped port of NebulaGraph databases on all cluster nodes is 32236.

          4. Connect to NebulaGraph databases with your node IP and the node port above.

            kubectl run -ti --image vesoft/nebula-console:v3.6.0 --restart=Never -- <nebula_console_name> -addr <node_ip> -port <node_port> -u <username> -p <password>\n

            For example:

            kubectl run -ti --image vesoft/nebula-console:v3.6.0 --restart=Never -- nebula-console -addr 192.168.8.24 -port 32236 -u root -p vesoft\nIf you don't see a command prompt, try pressing enter.\n\n(root@nebula) [(none)]>\n
            • --image: The image for the tool NebulaGraph Console used to connect to NebulaGraph databases.
            • <nebula-console>: The custom Pod name. The above example uses nebula-console.
            • -addr: The IP of any node in a NebulaGraph cluster. The above example uses 192.168.8.24.
            • -port: The mapped port of NebulaGraph databases on all cluster nodes. The above example uses 32236.
            • -u: The username of your NebulaGraph account. Before enabling authentication, you can use any existing username. The default username is root.
            • -p: The password of your NebulaGraph account. Before enabling authentication, you can use any characters as the password.

            Note

            If the spec.console field is set in the cluster configuration file, you can also connect to NebulaGraph databases with the following command:

            # Enter the nebula-console Pod.\nkubectl exec -it nebula-console -- /bin/sh\n\n# Connect to NebulaGraph databases.\nnebula-console -addr <node_ip> -port <node_port> -u <username> -p <password>\n

            For information about the nebula-console container, see nebula-console.

          "},{"location":"k8s-operator/2.get-started/2.4.connect-to-cluster/#connect_to_nebulagraph_databases_from_outside_a_nebulagraph_cluster_via_ingress","title":"Connect to NebulaGraph databases from outside a NebulaGraph cluster via Ingress","text":"

          When dealing with multiple pods in a cluster, managing services for each pod separately is not a good practice. Ingress is a Kubernetes resource that provides a unified entry point for accessing multiple services. Ingress can be used to expose multiple services under a single IP address.

          Nginx Ingress is an implementation of Kubernetes Ingress. Nginx Ingress watches the Ingress resource of a Kubernetes cluster and generates the Ingress rules into Nginx configurations that enable Nginx to forward 7 layers of traffic.

          You can use Nginx Ingress to connect to a NebulaGraph cluster from outside the cluster using a combination of the host network and DaemonSet pattern.

          Due to the use of HostNetwork, Nginx Ingress pods may be scheduled on the same node (port conflicts will occur when multiple pods try to listen on the same port on the same node). To avoid this situation, Nginx Ingress is deployed on these nodes in DaemonSet mode (ensuring that a pod replica runs on each node in the cluster). You first need to select some nodes and label them for the specific deployment of Nginx Ingress.

          Ingress does not support TCP or UDP services. For this reason, the nginx-ingress-controller pod uses the flags --tcp-services-configmap and --udp-services-configmap to point to an existing ConfigMap where the key refers to the external port to be used and the value refers to the format of the service to be exposed. The format of the value is <namespace/service_name>:<service_port>.

          For example, the configurations of the ConfigMap named as tcp-services is as follows:

          apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: tcp-services\n  namespace: nginx-ingress\ndata:\n  # update \n  9769: \"default/nebula-graphd-svc:9669\"\n

          Steps are as follows.

          1. Create a file named nginx-ingress-daemonset-hostnetwork.yaml.

            Click on nginx-ingress-daemonset-hostnetwork.yaml to view the complete content of the example YAML file.

            Note

            The resource objects in the YAML file above use the namespace nginx-ingress. You can run kubectl create namespace nginx-ingress to create this namespace, or you can customize the namespace.

          2. Label a node where the DaemonSet named nginx-ingress-controller in the above YAML file (The node used in this example is named worker2 with an IP of 192.168.8.160) runs.

            kubectl label node worker2 nginx-ingress=true\n
          3. Run the following command to enable Nginx Ingress in the cluster you created.

            kubectl create -f nginx-ingress-daemonset-hostnetwork.yaml\n

            Output:

            configmap/nginx-ingress-controller created\nconfigmap/tcp-services created\nserviceaccount/nginx-ingress created\nserviceaccount/nginx-ingress-backend created\nclusterrole.rbac.authorization.k8s.io/nginx-ingress created\nclusterrolebinding.rbac.authorization.k8s.io/nginx-ingress created\nrole.rbac.authorization.k8s.io/nginx-ingress created\nrolebinding.rbac.authorization.k8s.io/nginx-ingress created\nservice/nginx-ingress-controller-metrics created\nservice/nginx-ingress-default-backend created\nservice/nginx-ingress-proxy-tcp created\ndaemonset.apps/nginx-ingress-controller created\n

            Since the network type that is configured in Nginx Ingress is hostNetwork, after successfully deploying Nginx Ingress, with the IP (192.168.8.160) of the node where Nginx Ingress is deployed and with the external port (9769) you define, you can access NebulaGraph.

          4. Use the IP address and the port configured in the preceding steps. You can connect to NebulaGraph with NebulaGraph Console.

            kubectl run -ti --image vesoft/nebula-console:v3.6.0 --restart=Never -- <nebula_console_name> -addr <host_ip> -port <external_port> -u <username> -p <password>\n

            Output:

            kubectl run -ti --image vesoft/nebula-console:v3.6.0 --restart=Never -- nebula-console -addr 192.168.8.160 -port 9769 -u root -p vesoft\n
            • --image: The image for the tool NebulaGraph Console used to connect to NebulaGraph databases.
            • <nebula-console> The custom Pod name. The above example uses nebula-console.
            • -addr: The IP of the node where Nginx Ingress is deployed. The above example uses 192.168.8.160.
            • -port: The port used for external network access. The above example uses 9769.
            • -u: The username of your NebulaGraph account. Before enabling authentication, you can use any existing username. The default username is root.
            • -p: The password of your NebulaGraph account. Before enabling authentication, you can use any characters as the password.

            A successful connection to the database is indicated if the following is returned:

            If you don't see a command prompt, try pressing enter.\n(root@nebula) [(none)]>\n

            Note

            If the spec.console field is set in the cluster configuration file, you can also connect to NebulaGraph databases with the following command:

            # Enter the nebula-console Pod.\nkubectl exec -it nebula-console -- /bin/sh\n\n# Connect to NebulaGraph databases.\nnebula-console -addr <ingress_host_ip> -port <external_port> -u <username> -p <password>\n

            For information about the nebula-console container, see nebula-console.

          "},{"location":"k8s-operator/3.operator-management/3.1.customize-installation/","title":"Customize installation defaults","text":"

          This topic introduces how to customize the default configurations when installing NebulaGraph Operator.

          "},{"location":"k8s-operator/3.operator-management/3.1.customize-installation/#customizable_parameters","title":"Customizable parameters","text":"

          When executing the helm install [NAME] [CHART] [flags] command to install a chart, you can specify the chart configuration. For more information, see Customizing the Chart Before Installing.

          You can view the configurable options in the nebula-operator chart configuration file. Alternatively, you can view the configurable options through the command helm show values nebula-operator/nebula-operator, as shown below.

          [root@master ~]$ helm show values nebula-operator/nebula-operator   \nimage:\n  nebulaOperator:\n    image: vesoft/nebula-operator:v1.8.0\n    imagePullPolicy: Always\n\nimagePullSecrets: [ ]\nkubernetesClusterDomain: \"\"\n\ncontrollerManager:\n  create: true\n  replicas: 2\n  env: [ ]\n  resources:\n    limits:\n      cpu: 200m\n      memory: 200Mi\n    requests:\n      cpu: 100m\n      memory: 100Mi\n  verbosity: 0\n  ## Additional InitContainers to initialize the pod\n  # Example:\n  #  extraInitContainers:\n  #  - name: init-auth-sidecar\n  #    command:\n  #    - /bin/sh\n  #    - -c\n  #    args:\n  #    - cp -R /certs/* /credentials/\n  #    imagePullPolicy: Always\n  #    image: reg.vesoft-inc.com/nebula-certs:latest\n  #    volumeMounts:\n  #    - name: credentials\n  #      mountPath: /credentials\n  extraInitContainers: []\n\n  # sidecarContainers - add more containers to controller-manager\n  # Key/Value where Key is the sidecar `- name: <Key>`\n  # Example:\n  #   sidecarContainers:\n  #      webserver:\n  #        image: nginx\n  # OR for adding netshoot to controller manager\n  #  sidecarContainers:\n  #    netshoot:\n  #      args:\n  #      - -c\n  #      - while true; do ping localhost; sleep 60;done\n  #      command:\n  #      - /bin/bash\n  #      image: nicolaka/netshoot\n  #      imagePullPolicy: Always\n  #      name: netshoot\n  #      resources: {}\n  sidecarContainers: {}\n\n  ## Additional controller-manager Volumes\n  extraVolumes: []\n\n  ## Additional controller-manager Volume mounts\n  extraVolumeMounts: []\n\n  securityContext: {}\n  #  runAsNonRoot: true\n\nadmissionWebhook:\n  create: false\n  # The TCP port the Webhook server binds to. (default 9443)\n  webhookBindPort: 9443\n\nscheduler:\n  create: true\n  schedulerName: nebula-scheduler\n  replicas: 2\n  env: [ ]\n  resources:\n    limits:\n      cpu: 200m\n      memory: 200Mi\n    requests:\n      cpu: 100m\n      memory: 100Mi\n  verbosity: 0\n  plugins:\n    enabled: [\"NodeZone\"]\n    disabled: [] # Only in-tree plugins need to be defined here\n...\n

          Part of the above parameters are described as follows:

          Parameter Default value Description image.nebulaOperator.image vesoft/nebula-operator:v1.8.0 The image of NebulaGraph Operator, version of which is 1.8.0. image.nebulaOperator.imagePullPolicy IfNotPresent The image pull policy in Kubernetes. imagePullSecrets - The image pull secret in Kubernetes. For example imagePullSecrets[0].name=\"vesoft\". kubernetesClusterDomain cluster.local The cluster domain. controllerManager.create true Whether to enable the controller-manager component. controllerManager.replicas 2 The number of controller-manager replicas. controllerManager.env [] The environment variables for the controller-manager component. controllerManager.extraInitContainers [] Runs an init container. controllerManager.sidecarContainers {} Runs a sidecar container. controllerManager.extraVolumes [] Sets a storage volume. controllerManager.extraVolumeMounts [] Sets the storage volume mount path. controllerManager.securityContext {} Configures the access and control settings for NebulaGraph Operator. admissionWebhook.create false Whether to enable Admission Webhook. This option is disabled. To enable it, set the value to true and you will need to install cert-manager. For details, see Enable admission control. admissionWebhook.webhookBindPort 9443 The TCP port the Webhook server binds to. It is 9443 by default. shceduler.create true Whether to enable Scheduler. shceduler.schedulerName nebula-scheduler The name of the scheduler customized by NebulaGraph Operator. shceduler.replicas 2 The number of nebula-scheduler replicas."},{"location":"k8s-operator/3.operator-management/3.1.customize-installation/#example","title":"Example","text":"

          The following example shows how to enable AdmissionWebhook when you install NebulaGraph Operator (AdmissionWebhook is disabled by default):

          helm install nebula-operator nebula-operator/nebula-operator --namespace=<nebula-operator-system> --set admissionWebhook.create=true\n

          Check whether the specified configuration of NebulaGraph Operator is installed successfully:

          helm get values nebula-operator -n <nebula-operator-system>\n

          Example output:

          USER-SUPPLIED VALUES:\nadmissionWebhook:\n  create: true\n

          For more information about helm install, see Helm Install.

          "},{"location":"k8s-operator/3.operator-management/3.2.update-operator/","title":"Update NebulaGraph Operator","text":"

          This topic introduces how to update the configuration of NebulaGraph Operator.

          "},{"location":"k8s-operator/3.operator-management/3.2.update-operator/#steps","title":"Steps","text":"
          1. Update the information of available charts locally from chart repositories.

            helm repo update\n
          2. View the default values of NebulaGraph Operator.

            helm show values nebula-operator/nebula-operator\n
          3. Update NebulaGraph Operator by passing configuration parameters via --set.

            • --set\uff1aOverrides values using the command line. For more configurable items, see Customize installation defaults.

            For example, to enable the AdmissionWebhook, run the following command:

            helm upgrade nebula-operator nebula-operator/nebula-operator --namespace=nebula-operator-system --version=1.8.0 --set admissionWebhook.create=true\n

            For more information, see Helm upgrade.

          4. Check whether the configuration of NebulaGraph Operator is updated successfully.

            helm get values nebula-operator -n nebula-operator-system\n

            Example output:

            USER-SUPPLIED VALUES:\nadmissionWebhook:\n  create: true\n
          "},{"location":"k8s-operator/3.operator-management/3.3.upgrade-operator/","title":"Upgrade NebulaGraph Operator","text":"

          Legacy version compatibility

          • Does not support upgrading 0.9.0 and below version NebulaGraph Operator to 1.x.
          • The 1.x version NebulaGraph Operator is not compatible with NebulaGraph of version below v3.x.
          "},{"location":"k8s-operator/3.operator-management/3.3.upgrade-operator/#steps","title":"Steps","text":"
          1. View the current version of NebulaGraph Operator.

            helm list --all-namespaces\n

            Example output:

            NAME              NAMESPACE               REVISION    UPDATED                                 STATUS      CHART                   APP VERSION\nnebula-operator   nebula-operator-system  3           2023-11-06 12:06:24.742397418 +0800 CST deployed    nebula-operator-1.7.0   1.7.0\n
          2. Update the information of available charts locally from chart repositories.

            helm repo update\n
          3. View the latest version of NebulaGraph Operator.

            helm search repo nebula-operator/nebula-operator\n

            Example output:

            NAME                              CHART VERSION   APP VERSION DESCRIPTION\nnebula-operator/nebula-operator   1.8.0           1.8.0       Nebula Operator Helm chart for Kubernetes\n
          4. Upgrade NebulaGraph Operator to version 1.8.0.

            helm upgrade nebula-operator nebula-operator/nebula-operator --namespace=<namespace_name> --version=1.8.0\n

            For example:

            helm upgrade nebula-operator nebula-operator/nebula-operator --namespace=nebula-operator-system --version=1.8.0\n

            Output:

            Release \"nebula-operator\" has been upgraded. Happy Helming!\nNAME: nebula-operator\nLAST DEPLOYED: Tue Apr 16 02:21:08 2022\nNAMESPACE: nebula-operator-system\nSTATUS: deployed\nREVISION: 3\nTEST SUITE: None\nNOTES:\nNebulaGraph Operator installed!\n
          5. Pull the latest CRD configuration file.

            Note

            You need to upgrade the corresponding CRD configurations after NebulaGraph Operator is upgraded. Otherwise, the creation of NebulaGraph clusters will fail. For information about the CRD configurations, see apps.nebula-graph.io_nebulaclusters.yaml.

            1. Pull the NebulaGraph Operator chart package.

              helm pull nebula-operator/nebula-operator --version=1.8.0\n
              • --version: The NebulaGraph Operator version you want to upgrade to. If not specified, the latest version will be pulled.
            2. Run tar -zxvf to unpack the charts.

              For example: To unpack v1.8.0 chart to the /tmp path, run the following command:

              tar -zxvf nebula-operator-1.8.0.tgz -C /tmp\n
              • -C /tmp: If not specified, the chart files will be unpacked to the current directory.
          6. Apply the latest CRD configuration file in the nebula-operator directory.

            kubectl apply -f crds/nebulaclusters.yaml\n

            Output:

            customresourcedefinition.apiextensions.k8s.io/nebulaclusters.apps.nebula-graph.io configured\n
          "},{"location":"k8s-operator/3.operator-management/3.4.unistall-operator/","title":"Uninstall NebulaGraph Operator","text":"

          This topic introduces how to uninstall NebulaGraph Operator.

          "},{"location":"k8s-operator/3.operator-management/3.4.unistall-operator/#steps","title":"Steps","text":"
          1. Uninstall the NebulaGraph Operator chart.

            helm uninstall nebula-operator --namespace=<nebula-operator-system>\n
          2. View the information about the default-created CRD.

            kubectl get crd\n

            Output:

            NAME                                                 CREATED AT\nnebulaautoscalers.autoscaling.nebula-graph.io        2023-11-01T04:16:51Z\nnebulaclusters.apps.nebula-graph.io                  2023-10-12T07:55:32Z\nnebularestores.apps.nebula-graph.io                  2023-02-04T23:01:00Z\n
          3. Delete CRD.

            kubectl delete crd nebulaclusters.apps.nebula-graph.io nebularestores.apps.nebula-graph.io nebulaautoscalers.autoscaling.nebula-graph.io\n
          "},{"location":"k8s-operator/3.operator-management/3.5.cluster-scope-config/","title":"Use NebulaGraph Operator to manage specific clusters","text":"

          NebulaGraph Operator supports the management of multiple NebulaGraph clusters. By default, NebulaGraph Operator manages all NebulaGraph clusters. However, you can specify the clusters managed by NebulaGraph Operator. This topic describes how to specify the clusters managed by NebulaGraph Operator.

          "},{"location":"k8s-operator/3.operator-management/3.5.cluster-scope-config/#application_scenarios","title":"Application scenarios","text":"
          • Gray release of NebulaGraph Operator: You want to run the new Nebula Operator version on a part of the clusters first to test and verify its performance before fully releasing it.
          • Manage specific clusters: You want NebulaGraph Operator to manage only specific NebulaGraph clusters.
          "},{"location":"k8s-operator/3.operator-management/3.5.cluster-scope-config/#configurations","title":"Configurations","text":"

          NebulaGraph Operator supports specifying the clusters managed by controller-manager through startup parameters. The supported parameters are as follows:

          • watchNamespaces: Specifies the namespace where the NebulaGraph cluster is located. To specify multiple namespaces, separate them with commas (,). For example, watchNamespaces=default,nebula. If this parameter is not specified, NebulaGraph Operator manages all NebulaGraph clusters in all namespaces.
          • nebulaObjectSelector: Allows you to set specific labels and values to select the NebulaGraph clusters to be managed. It supports three label operation symbols: =, ==, and !=. Both = and == mean that the label's value is equal to the specified value, while != means the tag's value is not equal to the specified value. Multiple labels are separated by commas (,), and the comma needs to be escaped with \\\\. For example, nebulaObjectSelector=key1=value1\\\\,key2=value2, which selects only the NebulaGraph clusters with labels key1=value1 and key2=value2. If this parameter is not specified, NebulaGraph Operator manages all NebulaGraph clusters.
          "},{"location":"k8s-operator/3.operator-management/3.5.cluster-scope-config/#examples","title":"Examples","text":""},{"location":"k8s-operator/3.operator-management/3.5.cluster-scope-config/#specify_the_managed_clusters_by_namespace","title":"Specify the managed clusters by namespace","text":"

          Run the following command to make NebulaGraph Operator manage only the NebulaGraph clusters in the default and nebula namespaces. Ensure that the current Helm Chart version supports this parameter. For more information, see Update the configuration.

          helm upgrade nebula-operator nebula-operator/nebula-operator --set watchNamespaces=default,nebula\n
          "},{"location":"k8s-operator/3.operator-management/3.5.cluster-scope-config/#specify_the_managed_clusters_by_label","title":"Specify the managed clusters by label","text":"

          Run the following command to make NebulaGraph Operator manage only the NebulaGraph clusters with the labels key1=value1 and key2=value2. Ensure that the current Helm Chart version supports this parameter. For more information, see Update the configuration.

          helm upgrade nebula-operator nebula-operator/nebula-operator --set nebulaObjectSelector=key1=value1\\\\,key2=value2\n
          "},{"location":"k8s-operator/3.operator-management/3.5.cluster-scope-config/#faq","title":"FAQ","text":""},{"location":"k8s-operator/3.operator-management/3.5.cluster-scope-config/#how_to_set_labels_for_nebulagraph_clusters","title":"How to set labels for NebulaGraph clusters?","text":"

          Run the following command to set a label for the NebulaGraph cluster:

          kubectl label nc <cluster_name> -n <namespace> <key>=<value>\n

          For example, set the label env=test for the NebulaGraph cluster named nebula in the nebulaspace namespace:

          kubectl label nc nebula -n nebulaspace env=test\n
          "},{"location":"k8s-operator/3.operator-management/3.5.cluster-scope-config/#how_to_view_the_labels_of_nebulagraph_clusters","title":"How to view the labels of NebulaGraph clusters?","text":"

          Run the following command to view the labels of NebulaGraph clusters:

          kubectl get nc <cluster_name> -n <namespace> --show-labels\n

          For example, view the labels of the NebulaGraph cluster named nebula in the nebulaspace namespace:

          kubectl get nc nebula -n nebulaspace --show-labels\n
          "},{"location":"k8s-operator/3.operator-management/3.5.cluster-scope-config/#how_to_delete_the_labels_of_nebulagraph_clusters","title":"How to delete the labels of NebulaGraph clusters?","text":"

          Run the following command to delete the label of NebulaGraph clusters:

          kubectl label nc <cluster_name> -n <namespace> <key>-\n

          For example, delete the label env=test of the NebulaGraph cluster named nebula in the nebulaspace namespace:

          kubectl label nc nebula -n nebulaspace env-\n
          "},{"location":"k8s-operator/3.operator-management/3.5.cluster-scope-config/#how_to_view_the_namespace_where_the_nebulagraph_cluster_is_located","title":"How to view the namespace where the NebulaGraph cluster is located?","text":"

          Run the following command to list all namespaces where the NebulaGraph clusters are located:

          kubectl get nc --all-namespaces\n
          "},{"location":"k8s-operator/4.cluster-administration/4.2.configuration/","title":"Customize the configuration of the NebulaGraph cluster","text":"

          The Meta, Storage, and Graph services each have their default configurations within the NebulaGraph cluster. NebulaGraph Operator allows for the customization of these cluster service configurations. This topic describes how to update the settings of the NebulaGraph cluster.

          Note

          Configuring the parameters of the NebulaGraph cluster via Helm isn't currently supported.

          "},{"location":"k8s-operator/4.cluster-administration/4.2.configuration/#prerequisites","title":"Prerequisites","text":"

          A cluster is created using NebulaGraph Operator. For details, see Create a NebulaGraph Cluster.

          "},{"location":"k8s-operator/4.cluster-administration/4.2.configuration/#configuration_method","title":"Configuration method","text":"

          You can update the configurations of cluster services by customizing parameters through spec.<metad|graphd|storaged>.config. NebulaGraph Operator loads the configurations from config into the corresponding service's ConfigMap, which is then mounted into the service's configuration file directory (/usr/local/nebula/etc/) at the time of the service launch.

          The structure of config is as follows:

          Config map[string]string `json:\"config,omitempty\"`\n

          For instance, when updating the Graph service's enable_authorize parameter settings, the spec.graphd.config parameter can be specified at the time of cluster creation, or during cluster runtime.

          apiVersion: apps.nebula-graph.io/v1alpha1\nkind: NebulaCluster\nmetadata:\n  name: nebula\n  namespace: default\nspec:\n  graphd:\n    ...\n    config: // Custom-defined parameters for the Graph service.\n      \"enable_authorize\": \"true\"  // Enable authorization. Default value is false.\n...\n

          If you need to configure config for the Meta and Storage services, add corresponding configuration items to spec.metad.config and spec.storaged.config.

          "},{"location":"k8s-operator/4.cluster-administration/4.2.configuration/#configurable_parameters","title":"Configurable parameters","text":"

          For more detailed information on the parameters that can be set under the config field, see the following:

          • Meta Service Configuration Parameters
          • Storage Service Configuration Parameters
          • Graph Service Configuration Parameters
          "},{"location":"k8s-operator/4.cluster-administration/4.2.configuration/#parameter_updates_pod_restart_rules","title":"Parameter updates & Pod restart rules","text":"

          Configuration parameters for cluster services fall into two categories: those which require a service restart for any updates; and those which can be dynamically updated during service runtime. For the latter type, the updates will not be saved; subsequent to a service restart, configurations will revert to the state as shown in the configuration file.

          Regarding if the configuration parameters support dynamic updates during service runtime, please verify the information within the Whether supports runtime dynamic modifications column on each of the service configuration parameter detail pages linked above or see Dynamic runtime flags.

          During the update of cluster service configurations, keep the following points in mind:

          • If the updated parameters under config all allow for dynamic runtime updates, a service Pod restart will not be triggered and the configuration parameter updates will not be saved.
          • If the updated parameters under config include one or more that don\u2019t allow for dynamic runtime updates, a service Pod restart will be triggered, but only updates to those parameters that don\u2019t allow for dynamic updates will be saved.

          Note

          If you wish to modify the parameter settings during cluster runtime without triggering a Pod restart, make sure that all the parameters support dynamic updates during runtime.

          "},{"location":"k8s-operator/4.cluster-administration/4.2.configuration/#customize_port_configuration","title":"Customize port configuration","text":"

          The following example demonstrates how to customize the port configurations for the Meta, Storage, and Graph services.

          You can add port and ws_http_port parameters to the config field in order to set custom ports. For detailed information regarding these two parameters, see the networking configuration sections at Meta Service Configuration Parameters, Storage Service Configuration Parameters, Graph Service Configuration Parameters.

          Note

          • After customizing the port and ws_http_port parameter settings, a Pod restart is triggered and then the updated settings take effect after the restart.
          • Once the cluster is started, it is not recommended to modify the port parameter.
          1. Modify the cluster configuration file.

            1. Open the cluster configuration file.

              kubectl edit nc nebula\n
            2. Modify the configuration file as follows.

              Add the config field to the graphd, metad, and storaged sections to customize the port configurations for the Graph, Meta, and Storage services, respectively.

              apiVersion: apps.nebula-graph.io/v1alpha1\nkind: NebulaCluster\nmetadata:\n  name: nebula\n  namespace: default\nspec:\n  graphd:\n    config:  // Custom port configuration for the Graph service.\n      port: \"3669\"\n      ws_http_port: \"8080\"\n    resources:\n      requests:\n        cpu: \"200m\"\n        memory: \"500Mi\"\n      limits:\n        cpu: \"1\"\n        memory: \"1Gi\"\n    replicas: 1\n    image: vesoft/nebula-graphd\n    version: master\n  metad: \n    config:  // Custom port configuration for the Meta service.\n      ws_http_port: 8081\n    resources:\n      requests:\n        cpu: \"300m\"\n        memory: \"500Mi\"\n      limits:\n        cpu: \"1\"\n        memory: \"1Gi\"\n    replicas: 1\n    image: vesoft/nebula-metad\n    version: master\n    dataVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      storageClassName: local-path\n  storaged:  \n    config:  // Custom port configuration for the Storage service.\n      ws_http_port: 8082\n    resources:\n      requests:\n        cpu: \"300m\"\n        memory: \"500Mi\"\n      limits:\n        cpu: \"1\"\n        memory: \"1Gi\"\n    replicas: 1\n    image: vesoft/nebula-storaged\n    version: master\n    dataVolumeClaims:\n    - resources:\n        requests:\n          storage: 2Gi\n      storageClassName: local-path\n    enableAutoBalance: true\n  reference:\n    name: statefulsets.apps\n    version: v1\n  schedulerName: default-scheduler\n  imagePullPolicy: IfNotPresent\n  imagePullSecrets:\n  - name: nebula-image\n  enablePVReclaim: true\n  topologySpreadConstraints:\n  - topologyKey: kubernetes.io/hostname\n    whenUnsatisfiable: \"ScheduleAnyway\"\n
          2. Save the changes.

            Changes will be saved automatically after saving the file.

            1. Press Esc to enter command mode.
            2. Enter :wq to save and exit.
          3. Validate that the configurations have taken effect.

            kubectl get svc\n

            Example output:

            NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE\nnebula-graphd-headless      ClusterIP   None             <none>        3669/TCP,8080/TCP            10m\nnebula-graphd-svc           ClusterIP   10.102.13.115    <none>        3669/TCP,8080/TCP            10m\nnebula-metad-headless       ClusterIP   None             <none>        9559/TCP,8081/TCP            11m\nnebula-storaged-headless    ClusterIP   None             <none>        9779/TCP,8082/TCP,9778/TCP   11m\n

            As can be noticed, the Graph service's RPC daemon port is changed to 3669 (default 9669), the HTTP port to 8080 (default 19669); the Meta service's HTTP port is changed to 8081 (default 19559); the Storage service's HTTP port is changed to 8082 (default 19779).

          "},{"location":"k8s-operator/4.cluster-administration/4.5.logging/","title":"Manage cluster logs","text":"

          Running logs of NebulaGraph cluster services (graphd, metad, storaged) are generated and stored in the /usr/local/nebula/logs directory of each service container by default.

          "},{"location":"k8s-operator/4.cluster-administration/4.5.logging/#view_logs","title":"View logs","text":"

          To view the running logs of a NebulaGraph cluster, you can use the kubectl logs command.

          For example, to view the running logs of the Storage service:

          // View the name of the Storage service Pod, nebula-storaged-0.\n$ kubectl get pods -l app.kubernetes.io/component=storaged\nNAME                               READY   STATUS    RESTARTS      AGE\nnebula-storaged-0                  1/1     Running   0             45h\n...\n\n// Enter the container storaged of the Storage service.\n$ kubectl exec -it nebula-storaged-0 -c storaged -- /bin/bash\n\n// View the running logs of the Storage service.\n$ cd /usr/local/nebula/logs\n
          "},{"location":"k8s-operator/4.cluster-administration/4.5.logging/#clean_logs","title":"Clean logs","text":"

          Running logs generated by cluster services during runtime will occupy disk space. To avoid occupying too much disk space, the NebulaGraph Operator uses a sidecar container to periodically clean and archive logs.

          To facilitate log collection and management, each NebulaGraph service deploys a sidecar container responsible for collecting logs generated by the service container and sending them to the specified log disk. The sidecar container automatically cleans and archives logs using the logrotate tool.

          In the YAML configuration file of the cluster instance, set spec.logRotate to enable log rotation and set timestamp_in_logfile_name to false to disable the timestamp in the log file name to implement log rotation for the target service. The timestamp_in_logfile_name parameter is configured under the spec.<graphd|metad|storaged>.config field. By default, the log rotation feature is turned off. Here is an example of enabling log rotation for all services:

          ...\nspec:\n  graphd:\n    config:\n      # Whether to include a timestamp in the log file name. \n      # You must set this parameter to false to enable log rotation. \n      # It is set to true by default.\n      \"timestamp_in_logfile_name\": \"false\"\n  metad:\n    config:\n      \"timestamp_in_logfile_name\": \"false\"\n  storaged:\n    config:\n      \"timestamp_in_logfile_name\": \"false\"\n  logRotate: # Log rotation configuration\n    # The number of times a log file is rotated before being deleted.\n    # The default value is 5, and 0 means the log file will not be rotated before being deleted.\n    rotate: 5\n    # The log file is rotated only if it grows larger than the specified size. The default value is 200M.\n    size: \"200M\"\n
          "},{"location":"k8s-operator/4.cluster-administration/4.5.logging/#collect_logs","title":"Collect logs","text":"

          If you don't want to mount additional log disks to back up log files, or if you want to collect logs and send them to a log center using services like fluent-bit, you can configure logs to be output to standard error. The Operator uses the glog tool to log to standard error output.

          Note

          Currently, NebulaGraph Operator only collects standard error logs.

          In the YAML configuration file of the cluster instance, you can configure logging to standard error output in the config and env fields of each service.

          ...\nspec:\n  graphd:\n    config:\n      # Whether to redirect standard error to a separate output file. The default value is false, which means it is not redirected.\n      redirect_stdout: \"false\"\n      # The severity level of log content: INFO, WARNING, ERROR, and FATAL. The corresponding values are 0, 1, 2, and 3.\n      stderrthreshold: \"0\"\n    env: \n    - name: GLOG_logtostderr # Write log to standard error output instead of a separate file.\n      value: \"1\" # 1 represents writing to standard error output, and 0 represents writing to a file.\n    image: vesoft/nebula-graphd\n    replicas: 1\n    resources:\n      requests:\n        cpu: 500m\n        memory: 500Mi\n    service:\n      externalTrafficPolicy: Local\n      type: NodePort\n    version: vmaster\n  metad:\n    config:\n      redirect_stdout: \"false\"\n      stderrthreshold: \"0\"\n    dataVolumeClaim:\n      resources:\n        requests:\n          storage: 1Gi\n      storageClassName: ebs-sc\n    env:\n    - name: GLOG_logtostderr\n      value: \"1\"\n    image: vesoft/nebula-metad\n  ...\n
          "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.1.cluster-install/","title":"Install a NebulaGraph cluster using NebulaGraph Operator","text":"

          Using NebulaGraph Operator to install NebulaGraph clusters enables automated cluster management with automatic error recovery. This topic covers two methods, kubectl apply and helm, for installing clusters using NebulaGraph Operator.

          Historical version compatibility

          NebulaGraph Operator versions 1.x are not compatible with NebulaGraph versions below 3.x.

          "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.1.cluster-install/#prerequisites","title":"Prerequisites","text":"
          • Install NebulaGraph Operator
          • Create a StorageClass
          "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.1.cluster-install/#use_kubectl_apply","title":"Use kubectl apply","text":"
          1. Create a namespace for storing NebulaGraph cluster-related resources. For example, create the nebula namespace.

            kubectl create namespace nebula\n
          2. Create a YAML configuration file nebulacluster.yaml for the cluster. For example, create a cluster named nebula.

            Expand to view an example configuration for the nebula cluster
            apiVersion: apps.nebula-graph.io/v1alpha1\nkind: NebulaCluster\nmetadata:\n  name: nebula\n  namespace: default\nspec:\n  # Control the Pod scheduling strategy.\n  topologySpreadConstraints:\n  - topologyKey: \"kubernetes.io/hostname\"\n    whenUnsatisfiable: \"ScheduleAnyway\"\n  # Enable PV recycling.\n  enablePVReclaim: false\n  # Enable monitoring.\n  exporter:\n    image: vesoft/nebula-stats-exporter\n    version: v3.3.0\n    replicas: 1\n    maxRequests: 20\n  # Custom Agent image for cluster backup and restore, and log cleanup.\n  agent:\n    image: vesoft/nebula-agent\n    version: latest\n    resources:\n      requests:\n        cpu: \"100m\"\n        memory: \"128Mi\"\n      limits:\n        cpu: \"200m\"\n        memory: \"256Mi\"  \n  # Configure the image pull policy.\n  imagePullPolicy: Always\n  # Select the nodes for Pod scheduling.\n  nodeSelector:\n    nebula: cloud\n  # Dependent controller name.\n  reference:\n    name: statefulsets.apps\n    version: v1\n  # Scheduler name.\n  schedulerName: default-scheduler   \n  # Start NebulaGraph Console service for connecting to the Graph service.\n  console:\n    image: vesoft/nebula-console\n    version: nightly\n    username: \"demo\"\n    password: \"test\"                 \n  # Graph service configuration. \n  graphd:\n  # Used to check if the Graph service is running normally.\n  #  readinessProbe:\n  #    failureThreshold: 3\n  #    httpGet:\n  #      path: /status\n  #      port: 19669\n  #      scheme: HTTP\n  #    initialDelaySeconds: 40\n  #    periodSeconds: 10\n  #    successThreshold: 1\n  #    timeoutSeconds: 10\n    # Container image for the Graph service.\n    image: vesoft/nebula-graphd\n    logVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      # Storage class name for storing Graph service logs.\n      storageClassName: local-sc\n    # Number of replicas for the Graph service Pod.\n    replicas: 1\n    # Resource configuration for the Graph service.\n    resources:\n      limits:\n        cpu: \"1\"\n        memory: 1Gi\n      requests:\n        cpu: 500m\n        memory: 500Mi\n    # Version of the Graph service.\n    version: vmaster\n    # Custom flags configuration for the Graph service.\n    config: {}\n  # Meta service configuration.\n  metad:\n  #  readinessProbe:\n  #    failureThreshold: 3\n  #    httpGet:\n  #      path: /status\n  #      port: 19559\n  #      scheme: HTTP\n  #    initialDelaySeconds: 5\n  #    periodSeconds: 5\n  #    successThreshold: 1\n  #    timeoutSeconds: 5\n    # Container image for the Meta service.\n    image: vesoft/nebula-metad\n    logVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      storageClassName: local-sc\n    dataVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      storageClassName: local-sc\n    replicas: 1\n    resources:\n      limits:\n        cpu: \"1\"\n        memory: 1Gi\n      requests:\n        cpu: 500m\n        memory: 500Mi\n    version: vmaster\n    # Custom flags configuration for the Meta service.\n    config: {}          \n  # Storage service configuration.\n  storaged:\n  #  readinessProbe:\n  #    failureThreshold: 3\n  #    httpGet:\n  #      path: /status\n  #      port: 19779\n  #      scheme: HTTP\n  #    initialDelaySeconds: 40\n  #    periodSeconds: 10\n  #    successThreshold: 1\n  #    timeoutSeconds: 5\n    # Container image for the Storage service.\n    image: vesoft/nebula-graphd\n    logVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      storageClassName: local-sc\n    dataVolumeClaims:\n    - resources:\n        requests:\n          storage: 2Gi\n      storageClassName: local-sc\n    replicas: 1\n    resources:\n      limits:\n        cpu: \"1\"\n        memory: 1Gi\n      requests:\n        cpu: 500m\n        memory: 500Mi\n    version: vmaster\n    # Custom flags configuration for the Storage service.\n    config: {} \n
            Expand to view all configurable parameters and descriptions Parameter Default Value Description metadata.name - The name of the created NebulaGraph cluster. spec.console - Launches a Console container for connecting to the Graph service. For configuration details, see nebula-console. spec.topologySpreadConstraints - Controls the scheduling strategy for Pods. For more details, see Topology Spread Constraints. When the value of topologyKey is kubernetes.io/zone, the value of whenUnsatisfiable must be set to DoNotSchedule, and the value of spec.schedulerName should be nebula-scheduler. spec.graphd.replicas 1 The number of replicas for the Graphd service. spec.graphd.image vesoft/nebula-graphd The container image for the Graphd service. spec.graphd.version master The version of the Graphd service. spec.graphd.service Configuration for accessing the Graphd service via a Service. spec.graphd.logVolumeClaim.storageClassName - The storage class name for the log volume claim of the Graphd service. When using sample configuration, replace it with the name of the pre-created storage class. See Storage Classes for creating a storage class. spec.metad.replicas 1 The number of replicas for the Metad service. spec.metad.image vesoft/nebula-metad The container image for the Metad service. spec.metad.version master The version of the Metad service. spec.metad.dataVolumeClaim.storageClassName - Storage configuration for the data disk of the Metad service. When using sample configuration, replace it with the name of the pre-created storage class. See Storage Classes for creating a storage class. spec.metad.logVolumeClaim.storageClassName - Storage configuration for the log disk of the Metad service. When using sample configuration, replace it with the name of the pre-created storage class. See Storage Classes for creating a storage class. spec.storaged.replicas 3 The number of replicas for the Storaged service. spec.storaged.image vesoft/nebula-storaged The container image for the Storaged service. spec.storaged.version master The version of the Storaged service. spec.storaged.dataVolumeClaims.resources.requests.storage - The storage size for the data disk of the Storaged service. You can specify multiple data disks. When specifying multiple data disks, the paths are like /usr/local/nebula/data1, /usr/local/nebula/data2, and so on. spec.storaged.dataVolumeClaims.storageClassName - Storage configuration for the data disks of the Storaged service. When using sample configuration, replace it with the name of the pre-created storage class. See Storage Classes for creating a storage class. spec.storaged.logVolumeClaim.storageClassName - Storage configuration for the log disk of the Storaged service. When using sample configuration, replace it with the name of the pre-created storage class. See Storage Classes for creating a storage class. spec.<metad|storaged|graphd>.securityContext {} Defines the permission and access control for the cluster containers to control access and execution of container operations. For details, see SecurityContext. spec.agent {} Configuration for the Agent service used for backup and recovery, and log cleaning functions. If you don't customize this configuration, the default configuration is used. spec.reference.name {} The name of the controller it depends on. spec.schedulerName default-scheduler The name of the scheduler. spec.imagePullPolicy Always The image pull policy for NebulaGraph images. For more details on pull policies, please see Image pull policy. spec.logRotate {} Log rotation configuration. For details, see Managing Cluster Logs. spec.enablePVReclaim false Defines whether to automatically delete PVCs after deleting the cluster to release data. For details, see Reclaim PV. spec.metad.licenseManagerURL - Configures the URL pointing to the License Manager (LM), consisting of the access address and port (default port 9119). For example, 192.168.8.xxx:9119. For creating the NebulaGraph Enterprise Edition only. spec.storaged.enableAutoBalance false Whether to enable automatic balancing. For details, see Balancing Storage Data After Scaling Out. spec.enableBR false Defines whether to enable the BR tool. For details, see Backup and Restore. spec.imagePullSecrets [] Defines the Secret required to pull images from a private repository.
          3. Create the NebulaGraph cluster.

            kubectl create -f nebulacluster.yaml -n nebula\n

            Output:

            nebulacluster.apps.nebula-graph.io/nebula created\n

            If you don't specify the namespace using -n, it will default to the default namespace.

          4. Check the status of the NebulaGraph cluster.

            kubectl get nebulaclusters nebula -n nebula\n

            Output:

            NAME      READY   GRAPHD-DESIRED   GRAPHD-READY   METAD-DESIRED   METAD-READY   STORAGED-DESIRED   STORAGED-READY   AGE\nnebula    True    1                1              1               1             1                  1                86s\n
          "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.1.cluster-install/#use_helm","title":"Use helm","text":"
          1. Add the NebulaGraph Operator Helm repository (if it's already added, run the next step directly).

            helm repo add nebula-operator https://vesoft-inc.github.io/nebula-operator/charts\n
          2. Update the Helm repository to fetch the latest resources.

            helm repo update nebula-operator\n
          3. Set environment variables for the configuration parameters required for installing the cluster.

            export NEBULA_CLUSTER_NAME=nebula         # Name of the NebulaGraph cluster.\nexport NEBULA_CLUSTER_NAMESPACE=nebula    # Namespace for the NebulaGraph cluster.\nexport STORAGE_CLASS_NAME=local-sc       # StorageClass for the NebulaGraph cluster.\n
          4. Create a namespace for the NebulaGraph cluster if it is not created.

            kubectl create namespace \"${NEBULA_CLUSTER_NAMESPACE}\"\n
          5. Check the customizable configuration parameters for the nebula-cluster Helm chart of the nebula-operator when creating the cluster.

            • Visit nebula-cluster/values.yaml to see all the configuration parameters for the NebulaGraph cluster.
            • Run the following command to view all the configurable parameters.

              helm show values nebula-operator/nebula-cluster\n
              Example to view all configurable parameters
              nebula:\n  version: master\n  imagePullPolicy: Always\n  storageClassName: \"\"\n  enablePVReclaim: false\n  enableBR: false\n  enableForceUpdate: false\n  schedulerName: default-scheduler \n  topologySpreadConstraints:\n  - topologyKey: \"kubernetes.io/hostname\"\n    whenUnsatisfiable: \"ScheduleAnyway\"\n  logRotate: {}\n  reference:\n    name: statefulsets.apps\n    version: v1\n  graphd:\n    image: vesoft/nebula-graphd\n    replicas: 2\n    serviceType: NodePort\n    env: []\n    config: {}\n    resources:\n      requests:\n        cpu: \"500m\"\n        memory: \"500Mi\"\n      limits:\n        cpu: \"1\"\n        memory: \"500Mi\"\n    logVolume:\n      enable: true\n      storage: \"500Mi\"\n    podLabels: {}\n    podAnnotations: {}\n    securityContext: {}\n    nodeSelector: {}\n    tolerations: []\n    affinity: {}\n    readinessProbe: {}\n    livenessProbe: {}\n    initContainers: []\n    sidecarContainers: []\n    volumes: []\n    volumeMounts: []\n\n  metad:\n    image: vesoft/nebula-metad\n    replicas: 3\n    env: []\n    config: {}\n    resources:\n      requests:\n        cpu: \"500m\"\n        memory: \"500Mi\"\n      limits:\n        cpu: \"1\"\n        memory: \"1Gi\"\n    logVolume:\n      enable: true\n      storage: \"500Mi\"\n    dataVolume:\n      storage: \"2Gi\"\n    licenseManagerURL: \"\"\n    license: {}\n    podLabels: {}\n    podAnnotations: {}\n    securityContext: {}\n    nodeSelector: {}\n    tolerations: []\n    affinity: {}\n    readinessProbe: {}\n    livenessProbe: {}\n    initContainers: []\n    sidecarContainers: []\n    volumes: []\n    volumeMounts: []\n\n  storaged:\n    image: vesoft/nebula-storaged\n    replicas: 3\n    env: []\n    config: {}\n    resources:\n      requests:\n        cpu: \"500m\"\n        memory: \"500Mi\"\n      limits:\n        cpu: \"1\"\n        memory: \"1Gi\"\n    logVolume:\n      enable: true\n      storage: \"500Mi\"\n    dataVolumes:\n    - storage: \"10Gi\"\n    enableAutoBalance: false\n    podLabels: {}\n    podAnnotations: {}\n    securityContext: {}\n    nodeSelector: {}\n    tolerations: []\n    affinity: {}\n    readinessProbe: {}\n    livenessProbe: {}\n    initContainers: []\n    sidecarContainers: []\n    volumes: []\n    volumeMounts: []\n\n  exporter:\n    image: vesoft/nebula-stats-exporter\n    version: v3.3.0\n    replicas: 1\n    env: []\n    resources:\n      requests:\n        cpu: \"100m\"\n        memory: \"128Mi\"\n      limits:\n        cpu: \"200m\"\n        memory: \"256Mi\"\n    podLabels: {}\n    podAnnotations: {}\n    securityContext: {}\n    nodeSelector: {}\n    tolerations: []\n    affinity: {}\n    readinessProbe: {}\n    livenessProbe: {}\n    initContainers: []\n    sidecarContainers: []\n    volumes: []\n    volumeMounts: []\n    maxRequests: 20\n\n  agent:\n    image: vesoft/nebula-agent\n    version: latest\n    resources:\n      requests:\n        cpu: \"100m\"\n        memory: \"128Mi\"\n      limits:\n        cpu: \"200m\"\n        memory: \"256Mi\"\n\n  console:\n    username: root\n    password: nebula\n    image: vesoft/nebula-console\n    version: latest\n    nodeSelector: {}\n\n  alpineImage: \"\"\n\nimagePullSecrets: []\nnameOverride: \"\"\nfullnameOverride: \"\" \n
              Expand to view parameter descriptions Parameter Default Value Description nebula.version master Version of the cluster. nebula.imagePullPolicy Always Container image pull policy. Always means always attempting to pull the latest image from the remote. nebula.storageClassName \"\" Name of the Kubernetes storage class for dynamic provisioning of persistent volumes. nebula.enablePVReclaim false Enable persistent volume reclaim. See Reclaim PV for details. nebula.enableBR false Enable the backup and restore feature. See Backup and Restore with NebulaGraph Operator for details. nebula.enableForceUpdate false Force update the Storage service without transferring the leader partition replicas. See Optimize leader transfer in rolling updates for details. nebula.schedulerName default-scheduler Name of the Kubernetes scheduler. Must be configured as nebula-scheduler when using the Zone feature. nebula.topologySpreadConstraints [] Control the distribution of pods in the cluster. nebula.logRotate {} Log rotation configuration. See Manage cluster logs for details. nebula.reference {\"name\": \"statefulsets.apps\", \"version\": \"v1\"} The workload referenced for a NebulaGraph cluster. nebula.graphd.image vesoft/nebula-graphd Container image for the Graph service. nebula.graphd.replicas 2 Number of replicas for the Graph service. nebula.graphd.serviceType NodePort Service type for the Graph service, defining how the Graph service is accessed. See Connect to the Cluster for details. nebula.graphd.env [] Container environment variables for the Graph service. nebula.graphd.config {} Configuration for the Graph service. See Customize the configuration of the NebulaGraph cluster for details. nebula.graphd.resources {\"resources\":{\"requests\":{\"cpu\":\"500m\",\"memory\":\"500Mi\"},\"limits\":{\"cpu\":\"1\",\"memory\":\"500Mi\"}}} Resource limits and requests for the Graph service. nebula.graphd.logVolume {\"logVolume\": {\"enable\": true,\"storage\": \"500Mi\"}} Log storage configuration for the Graph service. When enable is false, log volume is not used. nebula.metad.image vesoft/nebula-metad Container image for the Meta service. nebula.metad.replicas 3 Number of replicas for the Meta service. nebula.metad.env [] Container environment variables for the Meta service. nebula.metad.config {} Configuration for the Meta service. See Customize the configuration of the NebulaGraph cluster for details. nebula.metad.resources {\"resources\":{\"requests\":{\"cpu\":\"500m\",\"memory\":\"500Mi\"},\"limits\":{\"cpu\":\"1\",\"memory\":\"1Gi\"}}} Resource limits and requests for the Meta service. nebula.metad.logVolume {\"logVolume\": {\"enable\": true,\"storage\": \"500Mi\"}} Log storage configuration for the Meta service. When enable is false, log volume is not used. nebula.metad.dataVolume {\"dataVolume\": {\"storage\": \"2Gi\"}} Data storage configuration for the Meta service. nebula.metad.licenseManagerURL \"\" URL for the license manager (LM) to obtain license information. For creating the NebulaGraph Enterprise Edition only. nebula.storaged.image vesoft/nebula-storaged Container image for the Storage service. nebula.storaged.replicas 3 Number of replicas for the Storage service. nebula.storaged.env [] Container environment variables for the Storage service. nebula.storaged.config {} Configuration for the Storage service. See Customize the configuration of the NebulaGraph cluster for details. nebula.storaged.resources {\"resources\":{\"requests\":{\"cpu\":\"500m\",\"memory\":\"500Mi\"},\"limits\":{\"cpu\":\"1\",\"memory\":\"1Gi\"}}} Resource limits and requests for the Storage service. nebula.storaged.logVolume {\"logVolume\": {\"enable\": true,\"storage\": \"500Mi\"}} Log storage configuration for the Storage service. When enable is false, log volume is not used. nebula.storaged.dataVolumes {\"dataVolumes\": [{\"storage\": \"10Gi\"}]} Data storage configuration for the Storage service. Supports specifying multiple data volumes. nebula.storaged.enableAutoBalance false Enable automatic balancing. See Balance storage data after scaling out for details. nebula.exporter.image vesoft/nebula-stats-exporter Container image for the Exporter service. nebula.exporter.version v3.3.0 Version of the Exporter service. nebula.exporter.replicas 1 Number of replicas for the Exporter service. nebula.exporter.env [] Environment variables for the Exporter service. nebula.exporter.resources {\"resources\":{\"requests\":{\"cpu\":\"100m\",\"memory\":\"128Mi\"},\"limits\":{\"cpu\":\"200m\",\"memory\":\"256Mi\"}}} Resource limits and requests for the Exporter service. nebula.agent.image vesoft/nebula-agent Container image for the agent service. nebula.agent.version latest Version of the agent service. nebula.agent.resources {\"resources\":{\"requests\":{\"cpu\":\"100m\",\"memory\":\"128Mi\"},\"limits\":{\"cpu\":\"200m\",\"memory\":\"256Mi\"}}} Resource limits and requests for the agent service. nebula.console.username root Username for accessing the NebulaGraph Console client. See Connect to the cluster for details. nebula.console.password nebula Password for accessing the NebulaGraph Console client. nebula.console.image vesoft/nebula-console Container image for the NebulaGraph Console client. nebula.console.version latest Version of the NebulaGraph Console client. nebula.alpineImage \"\" Alpine Linux container image used to obtain zone information for nodes. imagePullSecrets [] Names of secrets to pull private images. nameOverride \"\" Cluster name. fullnameOverride \"\" Name of the released chart instance. nebula.<graphd|metad|storaged|exporter>.podLabels {} Additional labels to be added to the pod. nebula.<graphd|metad|storaged|exporter>.podAnnotations {} Additional annotations to be added to the pod. nebula.<graphd|metad|storaged|exporter>.securityContext {} Security context for setting pod-level security attributes, including user ID, group ID, Linux Capabilities, etc. nebula.<graphd|metad|storaged|exporter>.nodeSelector {} Label selectors for determining which nodes to run the pod on. nebula.<graphd|metad|storaged|exporter>.tolerations [] Tolerations allow a pod to be scheduled to nodes with specific taints. nebula.<graphd|metad|storaged|exporter>.affinity {} Affinity rules for the pod, including node affinity, pod affinity, and pod anti-affinity. nebula.<graphd|metad|storaged|exporter>.readinessProbe {} Probe to check if a container is ready to accept service requests. When the probe returns success, traffic can be routed to the container. nebula.<graphd|metad|storaged|exporter>.livenessProbe {} Probe to check if a container is still running. If the probe fails, Kubernetes will kill and restart the container. nebula.<graphd|metad|storaged|exporter>.initContainers [] Special containers that run before the main application container starts, typically used for setting up the environment or initializing data. nebula.<graphd|metad|storaged|exporter>.sidecarContainers [] Containers that run alongside the main application container, typically used for auxiliary tasks such as log processing, monitoring, etc. nebula.<graphd|metad|storaged|exporter>.volumes [] Storage volumes to be attached to the service pod. nebula.<graphd|metad|storaged|exporter>.volumeMounts [] Specifies where to mount the storage volume inside the container.
          6. Create the NebulaGraph cluster.

            You can use the --set flag to customize the default values of the NebulaGraph cluster configuration. For example, --set nebula.storaged.replicas=3 sets the number of replicas for the Storage service to 3.

            helm install \"${NEBULA_CLUSTER_NAME}\" nebula-operator/nebula-cluster \\ \n    # Specify the version of the cluster chart. If not specified, it will install the latest version by default.\n    # You can check all chart versions by running the command: helm search repo -l nebula-operator/nebula-cluster\n    --version=1.8.0 \\\n    # Specify the namespace for the NebulaGraph cluster.\n    --namespace=\"${NEBULA_CLUSTER_NAMESPACE}\" \\\n    # Customize the cluster name.\n    --set nameOverride=\"${NEBULA_CLUSTER_NAME}\" \\\n    --set nebula.storageClassName=\"${STORAGE_CLASS_NAME}\" \\\n    # Specify the version for the NebulaGraph cluster.\n    --set nebula.version=vmaster\n
          7. Check the status of NebulaGraph cluster pods.

            kubectl -n \"${NEBULA_CLUSTER_NAMESPACE}\" get pod -l \"app.kubernetes.io/cluster=${NEBULA_CLUSTER_NAME}\"\n

            Output:

            NAME                               READY   STATUS    RESTARTS   AGE\nnebula-exporter-854c76989c-mp725   1/1     Running   0          14h\nnebula-graphd-0                    1/1     Running   0          14h\nnebula-graphd-1                    1/1     Running   0          14h\nnebula-metad-0                     1/1     Running   0          14h\nnebula-metad-1                     1/1     Running   0          14h\nnebula-metad-2                     1/1     Running   0          14h\nnebula-storaged-0                  1/1     Running   0          14h\nnebula-storaged-1                  1/1     Running   0          14h\nnebula-storaged-2                  1/1     Running   0          14h\n
          "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.2.cluster-upgrade/","title":"Upgrade NebulaGraph clusters created with NebulaGraph Operator","text":"

          This topic introduces how to upgrade a NebulaGraph cluster created with NebulaGraph Operator.

          Legacy version compatibility

          The 1.x version NebulaGraph Operator is not compatible with NebulaGraph of version below v3.x.

          "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.2.cluster-upgrade/#limits","title":"Limits","text":"
          • Only for upgrading the NebulaGraph clusters created with NebulaGraph Operator.
          • Only support upgrading the NebulaGraph version from 3.5.0 to 3.6.0.
          • For upgrading NebulaGraph Enterprise Edition clusters, contact us.
          "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.2.cluster-upgrade/#prerequisites","title":"Prerequisites","text":"

          You have created a NebulaGraph cluster. For details, see Create a NebulaGraph cluster.

          "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.2.cluster-upgrade/#upgrade_a_nebulagraph_cluster_with_kubectl","title":"Upgrade a NebulaGraph cluster with kubectl","text":"

          The following steps upgrade a NebulaGraph cluster from version 3.5.0 to master.

          1. Check the image version of the services in the cluster.

            kubectl get pods -l app.kubernetes.io/cluster=nebula  -o jsonpath=\"{.items[*].spec.containers[*].image}\" |tr -s '[[:space:]]' '\\n' |sort |uniq -c\n

            Output:

                  1 vesoft/nebula-graphd:3.5.0\n      1 vesoft/nebula-metad:3.5.0\n      3 vesoft/nebula-storaged:3.5.0  \n
          2. Edit the nebula cluster configuration to change the version value of the cluster services from 3.5.0 to master.

            1. Open the YAML file for the nebula cluster.

              kubectl edit nebulacluster nebula -n <namespace>\n
            2. Change the value of version.

              After making these changes, the YAML file should look like this:

              apiVersion: apps.nebula-graph.io/v1alpha1\nkind: NebulaCluster\nmetadata:\n  name: nebula\nspec:\n  graphd:\n    version: master // Change the value from 3.5.0 to master.\n    ...\n  metad:\n    version: master // Change the value from 3.5.0 to master.\n    ...\n  storaged:\n    version: master // Change the value from 3.5.0 to master.\n    ...\n
          3. Apply the configuration.

            After saving the YAML file and exiting, Kubernetes automatically updates the cluster's configuration and starts the cluster upgrade.

          4. After waiting for about 2 minutes, run the following command to see if the image versions of the services in the cluster have been changed to master.

            kubectl get pods -l app.kubernetes.io/cluster=nebula  -o jsonpath=\"{.items[*].spec.containers[*].image}\" |tr -s '[[:space:]]' '\\n' |sort |uniq -c\n

            Output:

                  1 vesoft/nebula-graphd:master\n      1 vesoft/nebula-metad:master\n      3 vesoft/nebula-storaged:master \n
          "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.2.cluster-upgrade/#upgrade_a_nebulagraph_cluster_with_helm","title":"Upgrade a NebulaGraph cluster with helm","text":"
          1. Update the information of available charts locally from chart repositories.

            helm repo update\n
          2. Set environment variables to your desired values.

            export NEBULA_CLUSTER_NAME=nebula         # The desired NebulaGraph cluster name.\nexport NEBULA_CLUSTER_NAMESPACE=nebula    # The desired namespace where your NebulaGraph cluster locates.\n
          3. Upgrade a NebulaGraph cluster.

            For example, upgrade a cluster to master.

            helm upgrade \"${NEBULA_CLUSTER_NAME}\" nebula-operator/nebula-cluster \\\n    --namespace=\"${NEBULA_CLUSTER_NAMESPACE}\" \\\n    --set nameOverride=${NEBULA_CLUSTER_NAME} \\\n    --set nebula.version=master\n

            The value of --set nebula.version specifies the version of the cluster you want to upgrade to.

          4. Run the following command to check the status and version of the upgraded cluster.

            Check cluster status:

            $ kubectl -n \"${NEBULA_CLUSTER_NAMESPACE}\" get pod -l \"app.kubernetes.io/cluster=${NEBULA_CLUSTER_NAME}\"\nNAME                READY   STATUS    RESTARTS   AGE\nnebula-graphd-0     1/1     Running   0          2m\nnebula-graphd-1     1/1     Running   0          2m\nnebula-metad-0      1/1     Running   0          2m\nnebula-metad-1      1/1     Running   0          2m\nnebula-metad-2      1/1     Running   0          2m\nnebula-storaged-0   1/1     Running   0          2m\nnebula-storaged-1   1/1     Running   0          2m\nnebula-storaged-2   1/1     Running   0          2m\n

            Check cluster version:

            $ kubectl get pods -l app.kubernetes.io/cluster=nebula  -o jsonpath=\"{.items[*].spec.containers[*].image}\" |tr -s '[[:space:]]' '\\n' |sort |uniq -c\n      1 vesoft/nebula-graphd:master\n      1 vesoft/nebula-metad:master\n      3 vesoft/nebula-storaged:master\n
          "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.2.cluster-upgrade/#accelerate_the_upgrade_process","title":"Accelerate the upgrade process","text":"

          The upgrade process of a cluster is a rolling update process and can be time-consuming due to the state transition of the leader partition replicas in the Storage service. You can configure the enableForceUpdate field in the cluster instance's YAML file to skip the leader partition replica transfer operation, thereby accelerating the upgrade process. For more information, see Specify a rolling update strategy.

          "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.2.cluster-upgrade/#troubleshooting","title":"Troubleshooting","text":"

          If you encounter issues during the upgrade process, you can check the logs of the cluster service pods.

          kubectl logs <pod-name> -n <namespace>\n

          Additionally, you can inspect the cluster's status and events.

          kubectl describe nebulaclusters <cluster-name> -n <namespace>\n
          "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.3.cluster-uninstall/","title":"Delete a NebulaGraph cluster","text":"

          This topic explains how to delete a NebulaGraph cluster created using NebulaGraph Operator.

          "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.3.cluster-uninstall/#usage_limitations","title":"Usage limitations","text":"
          • Deletion is only supported for NebulaGraph clusters created with the NebulaGraph Operator.
          • You cannot delete a NebulaGraph cluster that has deletion protection enabled. For more information, see Configure deletion protection.
          "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.3.cluster-uninstall/#delete_a_nebulagraph_cluster_using_kubectl","title":"Delete a NebulaGraph cluster using kubectl","text":"
          1. View all created clusters.

            kubectl get nc --all-namespaces\n

            Example output:

            NAMESPACE   NAME      READY   GRAPHD-DESIRED   GRAPHD-READY   METAD-DESIRED   METAD-READY   STORAGED-DESIRED   STORAGED-READY   AGE\ndefault     nebula    True    2                2              3               3             3                  3                38h\nnebula      nebula2   True    1                1              1               1             1                  1                2m7s\n
          2. Delete a cluster. For example, run the following command to delete a cluster named nebula2:

            kubectl delete nc nebula2 -n nebula\n

            Example output:

            nebulacluster.nebula-graph.io \"nebula2\" deleted\n
          3. Confirm the deletion.

            kubectl get nc nebula2 -n nebula\n

            Example output:

            No resources found in nebula namespace.\n
          "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.3.cluster-uninstall/#delete_a_nebulagraph_cluster_using_helm","title":"Delete a NebulaGraph cluster using helm","text":"
          1. View all Helm releases.

            helm list --all-namespaces\n

            Example output:

            NAME              NAMESPACE               REVISION    UPDATED                                 STATUS      CHART                   APP VERSION\nnebula            default                 1           2023-11-06 20:16:07.913136377 +0800 CST deployed    nebula-cluster-1.7.1    1.7.1\nnebula-operator   nebula-operator-system  3           2023-11-06 12:06:24.742397418 +0800 CST deployed    nebula-operator-1.7.1   1.7.1\n
          2. View detailed information about a Helm release. For example, to view the cluster information for a Helm release named nebula:

            helm get values nebula -n default\n

            Example output:

            USER-SUPPLIED VALUES:\nimagePullSecrets:\n- name: secret_for_pull_image\nnameOverride: nebula # The cluster name\nnebula:\n  graphd:\n    image: reg.vesoft-inc.com/xx\n  metad:\n    image: reg.vesoft-inc.com/xx\n    licenseManagerURL: xxx:9119\n  storageClassName: local-sc\n  storaged:\n    image: reg.vesoft-inc.com/xx\n  version: v1.8.0 # The cluster version\n
          3. Uninstall a Helm release. For example, to uninstall a Helm release named nebula:

            helm uninstall nebula -n default\n

            Example output:

            release \"nebula\" uninstalled\n

            Once the Helm release is uninstalled, NebulaGraph Operator will automatically remove all K8s resources associated with that release.

          4. Verify that the cluster resources are removed.

            kubectl get nc nebula -n default\n

            Example output:

            No resources found in default namespace.\n
          "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.1.use-local-pv/","title":"Use Local Persistent Volumes in a NebulaGraph cluster","text":"

          Local Persistent Volumes, abbreviated as Local PVs in K8s store container data directly using the node's local disk directory. Compared with network storage, Local Persistent Volumes provide higher IOPS and lower read and write latency, which is suitable for data-intensive applications. This topic introduces how to use Local PVs in Google Kubernetes Engine (GKE) and Amazon Elastic Kubernetes Service (EKS) clusters, and how to enable automatic failover for Local PVs in the cloud.

          While using Local Persistent Volumes can enhance performance, it's essential to note that, unlike network storage, local storage does not support automatic backup. In the event of a node failure, all data in local storage may be lost. Therefore, the utilization of Local Persistent Volumes involves a trade-off between service availability, data persistence, and flexibility.

          "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.1.use-local-pv/#principles","title":"Principles","text":"

          NebulaGraph Operator implements a Storage Volume Provisioner interface to automatically create and delete PV objects. Utilizing the provisioner, you can dynamically generate Local PVs as required. Based on the PVC and StorageClass specified in the cluster configuration file, NebulaGraph Operator automatically generates PVCs and associates them with their respective Local PVs.

          When a Local PV is initiated by the provisioner interface, the provisioner controller generates a local type PV and configures the nodeAffinity field. This configuration ensures that Pods using the local type PV are scheduled onto specific nodes. Conversely, when a Local PV is deleted, the provisioner controller eliminates the local type PV object and purges the node's storage resources.

          "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.1.use-local-pv/#prerequisites","title":"Prerequisites","text":"

          NebulaGraph Operator is installed. For details, see Install NebulaGraph Operator.

          "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.1.use-local-pv/#steps","title":"Steps","text":"

          The resources in the following examples are all created in the default namespace.

          Use Local PV on GKEUse Local PV on EKS
          1. Create a node pool with local SSDs if not existing

            gcloud container node-pools create \"pool-1\" --cluster \"gke-1\" --region us-central1 --node-version \"1.27.10-gke.1055000\" --machine-type \"n2-standard-2\" --local-nvme-ssd-block count=2 --max-surge-upgrade 1 --max-unavailable-upgrade 0 --num-nodes 1 --enable-autoscaling --min-nodes 1 --max-nodes 2\n

            For information about the parameters to create a node pool with local SSDs, see Create a node pool with Local SSD.

          2. Format and mount the local SSDs using a DaemonSet.

            1. Download the gke-daemonset-raid-disks.yaml file.

            2. Deploy the RAID disks DaemonSet. The DaemonSet sets a RAID 0 array on all Local SSD disks and formats the device to an ext4 filesystem.

              kubectl apply -f gke-daemonset-raid-disks.yaml\n

          3. Deploy the Local PV provisioner.

            1. Download the local-pv-provisioner.yaml file.
            2. Run the provisioner.
              kubectl apply -f local-pv-provisioner.yaml\n
          4. In the NebulaGraph cluster configuration file, specify spec.storaged.dataVolumeClaims or spec.metad.dataVolumeClaim, and the StorageClass needs to be configured as local-nvme. For more information about cluster configurations, see Create a NebulaGraph cluster.

            Partial configuration of the NebulaGraph cluster
            ...\nmetad: \n  dataVolumeClaim:\n    resources:\n      requests:\n        storage: 2Gi\n    storageClassName: local-nvme\nstoraged:\n  dataVolumeClaims:\n  - resources:\n      requests:\n        storage: 2Gi\n    storageClassName: local-nvme  \n...\n

            After the NebulaGraph is deployed, the Local PVs are automatically created.

          5. View the PV list.

            kubectl get pv\n

            Return:

            NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                     STORAGECLASS   REASON   AGE\npvc-01be9b75-9c50-4532-8695-08e11b489718   5Gi        RWO            Delete           Bound    default/storaged-data-nebula-storaged-0   local-nvme              3m35s\npvc-09de8eb1-1225-4025-b91b-fbc0bcce670f   5Gi        RWO            Delete           Bound    default/storaged-data-nebula-storaged-1   local-nvme              3m35s\npvc-4b2a9ffb-9000-4998-a7bb-edb825c872cb   5Gi        RWO            Delete           Bound    default/storaged-data-nebula-storaged-2   local-nvme              3m35s\n...\n
          6. View the detailed information of the PV.

            kubectl get pv pvc-01be9b75-9c50-4532-8695-08e11b489718 -o yaml\n

            Return:

            apiVersion: v1\nkind: PersistentVolume\nmetadata:\n  annotations:\n    local.pv.provisioner/selected-node: gke-snap-test-snap-test-591403a8-xdfc\n    nebula-graph.io/pod-name: nebula-storaged-0\n    pv.kubernetes.io/provisioned-by: nebula-cloud.io/local-pv\n  creationTimestamp: \"2024-03-05T06:12:32Z\"\n  finalizers:\n  - kubernetes.io/pv-protection\n  labels:\n    app.kubernetes.io/cluster: nebula\n    app.kubernetes.io/component: storaged\n    app.kubernetes.io/managed-by: nebula-operator\n    app.kubernetes.io/name: nebula-graph\n  name: pvc-01be9b75-9c50-4532-8695-08e11b489718\n  resourceVersion: \"9999469\"\n  uid: ee28a4da-6026-49ac-819b-2075154b4724\nspec:\n  accessModes:\n  - ReadWriteOnce\n  capacity:\n    storage: 5Gi\n  claimRef:\n    apiVersion: v1\n    kind: PersistentVolumeClaim\n    name: storaged-data-nebula-storaged-0\n    namespace: default\n    resourceVersion: \"9996541\"\n    uid: 01be9b75-9c50-4532-8695-08e11b489718\n  local:\n    fsType: ext4\n    path: /mnt/disks/raid0\n  nodeAffinity:\n    required:\n      nodeSelectorTerms:\n      - matchExpressions:\n        - key: kubernetes.io/hostname\n          operator: In\n          values:\n          - gke-snap-test-snap-test-591403a8-xdfc\n  persistentVolumeReclaimPolicy: Delete\n  storageClassName: local-nvme\n  volumeMode: Filesystem\nstatus:\n  phase: Bound    \n
          1. Create a node pool with Instance Store if not existing.

            eksctl create nodegroup  --instance-types m5ad.2xlarge  --nodes 3  --cluster eks-1\n

            For more information about parameters to cluster node pools, see Creating a managed node group.

          2. Format and mount the local SSDs using a DaemonSet.

            1. Download the eks-daemonset-raid-disks.yaml file.

            2. Based on the node type created in step 1, modify the value of the nodeSelector.node.kubernetes.io/instance-type field in the eks-daemonset-raid-disks.yaml file as needed.

                  spec:\n      nodeSelector:\n        node.kubernetes.io/instance-type: \"m5ad.2xlarge\"\n

            3. Install nvme-cli.

              • For Ubuntu and Debian systems
                sudo apt-get update\nsudo apt-get install -y nvme-cli\n
              • For CentOS and RHEL systems
                sudo yum install -y nvme-cli\n
            4. Deploy the RAID disk DaemonSet. The DaemonSet sets up a RAID 0 array on all local SSD disks and formats the devices as an ext4 file system.

              kubectl apply -f gke-daemonset-raid-disks.yaml\n

          3. Deploy the Local PV provisioner.

            1. Download the local-pv-provisioner.yaml file.
            2. Run the provisioner.
              kubectl apply -f local-pv-provisioner.yaml\n
          4. In the NebulaGraph cluster configuration file, specify spec.storaged.dataVolumeClaims or spec.metad.dataVolumeClaim, and the StorageClass needs to be configured as local-nvme. For more information about cluster configurations, see Create a NebulaGraph cluster.

            Partial configuration of the NebulaGraph cluster
            metad:\n  dataVolumeClaim:\n    resources:\n      requests:\n        storage: 2Gi\n    storageClassName: local-nvme\nstoraged:\n  dataVolumeClaims:\n  - resources:\n      requests:\n        storage: 2Gi\n    storageClassName: local-nvme  \n
          5. View the PV list.

            kubectl get pv\n

            Return:

            NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                     STORAGECLASS   REASON   AGE\npvc-290c15cc-a302-4463-a591-84b7217a6cd2   5Gi        RWO            Delete           Bound    default/storaged-data-nebula-storaged-0   local-nvme              3m40s\npvc-fbb3167f-f556-4a16-ae0e-171aed0ac954   5Gi        RWO            Delete           Bound    default/storaged-data-nebula-storaged-1   local-nvme              3m40s\npvc-6c7cfe80-0134-4573-b93e-9b259c6fcd63   5Gi        RWO            Delete           Bound    default/storaged-data-nebula-storaged-2   local-nvme              3m40s\n...\n
          6. View the detailed information of the PV.

            kubectl get pv pvc-290c15cc-a302-4463-a591-84b7217a6cd2 -o yaml\n

            Return:

            apiVersion: v1\nkind: PersistentVolume\nmetadata:\n  annotations:\n    local.pv.provisioner/selected-node: ip-192-168-77-60.ec2.internal\n    nebula-graph.io/pod-name: nebula-storaged-0\n    pv.kubernetes.io/provisioned-by: nebula-cloud.io/local-pv\n  creationTimestamp: \"2024-03-04T07:51:32Z\"\n  finalizers:\n  - kubernetes.io/pv-protection\n  labels:\n    app.kubernetes.io/cluster: nebula\n    app.kubernetes.io/component: storaged\n    app.kubernetes.io/managed-by: nebula-operator\n    app.kubernetes.io/name: nebula-graph\n  name: pvc-290c15cc-a302-4463-a591-84b7217a6cd2\n  resourceVersion: \"7932689\"\n  uid: 66c0a2d3-2914-43ad-93b5-6d84fb62acef\nspec:\n  accessModes:\n  - ReadWriteOnce\n  capacity:\n    storage: 5Gi\n  claimRef:\n    apiVersion: v1\n    kind: PersistentVolumeClaim\n    name: storaged-data-nebula-storaged-0\n    namespace: default\n    resourceVersion: \"7932688\"\n    uid: 8ecb5d96-004b-4672-bac4-1355ae15eae4\n  local:\n    fsType: ext4\n    path: /mnt/disks/raid0\n  nodeAffinity:\n    required:\n      nodeSelectorTerms:\n      - matchExpressions:\n        - key: kubernetes.io/hostname\n          operator: In\n          values:\n          - ip-192-168-77-60.ec2.internal\n  persistentVolumeReclaimPolicy: Delete\n  storageClassName: local-nvme\n  volumeMode: Filesystem\nstatus:\n  phase: Bound    \n
          "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.1.use-local-pv/#failover_for_local_persistent_volumes_in_the_cloud","title":"Failover for Local Persistent Volumes in the cloud","text":"

          When using network storage (e.g., AWS EBS, Google Cloud Persistent Disk, Azure Disk Storage, Ceph, NFS, etc.) as a PV, the storage resource is independent of any particular node. Therefore, the storage resource can be mounted and used by Pods regardless of the node to which the Pods are scheduled. However, when using a local storage disk as a PV, the storage resource can only be used by Pods on a specific node due to nodeAffinity.

          The Storage service of NebulaGraph supports data redundancy, which allows you to set multiple odd-numbered partition replicas. When a node fails, the associated partition is automatically transferred to a healthy node. However, Storage Pods using Local Persistent Volumes cannot run on other nodes due to the node affinity setting and must wait for the node to recover. To run on another node, the Pods must be unbound from the associated Local Persistent Volume.

          NebulaGraph Operator supports automatic failover in the event of a node failure while using Local Persistent Volumes in the cloud for elastic scaling. This is achieved by setting spec.enableAutoFailover to true in the cluster configuration file, which automatically unbinds the Pods from the Local Persistent Volume, allowing the Pods to run on another node.

          Example configuration:

          ...\nspec:\n  # Enable automatic failover for Local PV.\n  enableAutoFailover: true\n  # The time to wait for the Storage service to be in the `OFFLINE` status\n  # before automatic failover. \n  # The default value is 5 minutes.\n  # If the Storage service recovers to the `ONLINE` status during this period,\n  # failover will not be triggered.\n  failoverPeriod: \"2m\"\n  ...\n
          "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.2.pv-expansion/","title":"Dynamically expand persistent volumes","text":"

          In a Kubernetes environment, NebulaGraph's data is stored on Persistent Volumes (PVs). Dynamic volume expansion refers to increasing the capacity of a volume without stopping the service, enabling NebulaGraph to accommodate growing data. This topic explains how to dynamically expand the PV for NebulaGraph services in a Kubernetes environment.

          Note

          • After the cluster is created, you cannot dynamically increase the number of PVs while the cluster is running.
          • The method described in this topic is only for online volume expansion and does not support volume reduction.
          "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.2.pv-expansion/#background","title":"Background","text":"

          In Kubernetes, a StorageClass is a resource that defines a particular storage type. It describes a class of storage, including its provisioner, parameters, and other details. When creating a PersistentVolumeClaim (PVC) and specifying a StorageClass, Kubernetes automatically creates a corresponding PV. The principle of dynamic volume expansion is to edit the PVC and increase the volume's capacity. Kubernetes will then automatically expand the capacity of the PV associated with this PVC based on the specified storageClassName in the PVC. During this process, new PVs are not created; the size of the existing PV is changed. Only dynamic storage volumes, typically those associated with a storageClassName, support dynamic volume expansion. Additionally, the allowVolumeExpansion field in the StorageClass must be set to true. For more details, see the Kubernetes documentation on expanding Persistent Volume Claims.

          In NebulaGraph Operator, you cannot directly edit PVC because Operator automatically creates PVC based on the configuration in the spec.<metad|storaged>.dataVolumeClaim of the Nebula Graph cluster. Therefore, you need to modify the cluster's configuration to update the PVC and trigger dynamic online volume expansion for the PV.

          "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.2.pv-expansion/#prerequisites","title":"Prerequisites","text":"
          • Kubernetes version is equal to or greater than 1.18.
          • A StorageClass has been created in the Kubernetes environment. For details, see Expanding Persistent Volumes Claims.
            • Ensure the allowVolumeExpansion field in the StorageClass is set to true.
            • Make sure that the provisioner configured in the StorageClass supports dynamic expansion.
          • A NebulaGraph cluster is created in Kubernetes. For specific steps, see Create a NebulaGraph cluster.
          • NebulaGraph cluster Pods are in running status.
          "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.2.pv-expansion/#online_volume_expansion_example","title":"Online volume expansion example","text":"

          In the following example, we assume that the StorageClass is named ebs-sc and the NebulaGraph cluster is named nebula. We will demonstrate how to dynamically expand the PV for the Storage service.

          1. Check the status of the Storage service Pod:

            kubectl get pod\n

            Example output:

            nebula-storaged-0                                                1/1     Running   0                43h\n
          2. Check the PVC and PV information for the Storage service:

            # View PVC \nkubectl get pvc\n

            Example output:

            storaged-data-nebula-storaged-0   Bound    pvc-36ca3871-9265-460f-b812-7e73a718xxxx   5Gi        RWO            ebs-sc     43h\n
            # View PV and confirm that the capacity of the PV is 5Gi\nkubectl get pv\n

            Example output:

            pvc-36ca3871-9265-460f-b812-xxx   5Gi        RWO            Delete           Bound       default/storaged-data-nebula-storaged-0   ebs-sc              43h\n
          3. Assuming all the above-mentioned prerequisites are met, use the following command to request an expansion of the PV for the Storage service to 10Gi:

            kubectl patch nc nebula --type='merge' --patch '{\"spec\": {\"storaged\": {\"dataVolumeClaims\":[{\"resources\": {\"requests\": {\"storage\": \"10Gi\"}}, \"storageClassName\": \"ebs-sc\"}]}}}'\n

            Example output:

            nebulacluster.apps.nebula-graph.io/nebula patched\n
          4. After waiting for about a minute, check the expanded PVC and PV information:

            kubectl get pvc\n

            Example output:

            storaged-data-nebula-storaged-0   Bound    pvc-36ca3871-9265-460f-b812-7e73a718xxxx   10Gi        RWO            ebs-sc     43h\n
            kubectl get pv\n

            Example output:

            pvc-36ca3871-9265-460f-b812-xxx   10Gi        RWO            Delete           Bound       default/storaged-data-nebula-storaged-0   ebs-sc              43h\n

            As you can see, both the PVC and PV capacity have been expanded to 10Gi.

          "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.3.configure-pv-reclaim/","title":"Reclaim PVs","text":"

          NebulaGraph Operator uses PVs (Persistent Volumes) and PVCs (Persistent Volume Claims) to store persistent data. If you accidentally deletes a NebulaGraph cluster, by default, PV and PVC objects and the relevant data will be retained to ensure data security.

          You can also define the automatic deletion of PVCs to release data by setting the parameter spec.enablePVReclaim to true in the configuration file of the cluster instance. As for whether PV will be deleted automatically after PVC is deleted, you need to customize the PV reclaim policy. See reclaimPolicy in StorageClass and PV Reclaiming for details.

          "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.3.configure-pv-reclaim/#prerequisites","title":"Prerequisites","text":"

          A NebulaGraph cluster is created in Kubernetes. For specific steps, see Create a NebulaGraph cluster.

          "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.3.configure-pv-reclaim/#steps","title":"Steps","text":"

          The following example uses a cluster named nebula and the cluster's configuration file named nebula_cluster.yaml to show how to set enablePVReclaim:

          1. Run the following command to edit the nebula cluster's configuration file.

            kubectl edit nebulaclusters.apps.nebula-graph.io nebula\n
          2. Add enablePVReclaim and set its value to true under spec.

            apiVersion: apps.nebula-graph.io/v1alpha1\nkind: NebulaCluster\nmetadata:\n  name: nebula\nspec:\n  enablePVReclaim: true  //Set its value to true.\n  graphd:\n    image: vesoft/nebula-graphd\n    logVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      storageClassName: fast-disks\n    replicas: 1\n    resources:\n      limits:\n        cpu: \"1\"\n        memory: 1Gi\n      requests:\n        cpu: 500m\n        memory: 500Mi\n    version: master\n  imagePullPolicy: IfNotPresent\n  metad:\n    dataVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      storageClassName: fast-disks\n    image: vesoft/nebula-metad\n    logVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      storageClassName: fast-disks\n    replicas: 1\n    resources:\n      limits:\n        cpu: \"1\"\n        memory: 1Gi\n      requests:\n        cpu: 500m\n        memory: 500Mi\n    version: master\n  nodeSelector:\n    nebula: cloud\n  reference:\n    name: statefulsets.apps\n    version: v1\n  schedulerName: default-scheduler\n  storaged:\n    dataVolumeClaims:\n    - resources:\n        requests:\n          storage: 2Gi\n      storageClassName: fast-disks\n    - resources:\n        requests:\n          storage: 2Gi\n      storageClassName: fast-disks\n    image: vesoft/nebula-storaged\n    logVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      storageClassName: fast-disks\n    replicas: 3\n    resources:\n      limits:\n        cpu: \"1\"\n        memory: 1Gi\n      requests:\n        cpu: 500m\n        memory: 500Mi\n    version: master\n...    \n
          3. Run kubectl apply -f nebula_cluster.yaml to push your configuration changes to the cluster.

          After setting enablePVReclaim to true, the PVCs of the cluster will be deleted automatically after the cluster is deleted. If you want to delete the PVs, you need to set the reclaim policy of the PVs to Delete.

          "},{"location":"k8s-operator/4.cluster-administration/4.7.security/4.7.2.enable-admission-control/","title":"Enable admission control","text":"

          Kubernetes Admission Control is a security mechanism running as a webhook at runtime. It intercepts and modifies requests to ensure the cluster's security. Admission webhooks involve two main operations: validation and mutation. NebulaGraph Operator supports only validation operations and provides some default admission control rules. This topic describes NebulaGraph Operator's default admission control rules and how to enable admission control.

          "},{"location":"k8s-operator/4.cluster-administration/4.7.security/4.7.2.enable-admission-control/#prerequisites","title":"Prerequisites","text":"

          A NebulaGraph cluster is created with NebulaGrpah Operator. For detailed steps, see Create a NebulaGraph cluster.

          "},{"location":"k8s-operator/4.cluster-administration/4.7.security/4.7.2.enable-admission-control/#admission_control_rules","title":"Admission control rules","text":"

          Kubernetes admission control allows you to insert custom logic or policies before Kubernetes API Server processes requests. This mechanism can be used to implement various security policies, such as restricting a Pod's resource consumption or limiting its access permissions. NebulaGraph Operator supports validation operations, which means it validates and intercepts requests without making changes.

          After admission control is enabled, NebulaGraph Operator implements the following admission validation control rules by default. You cannot disable these rules:

          • Forbid adding additional PVs to Storage service via dataVolumeClaims.
          • Forbid shrinking the capacity of all service's PVCs, but allow expansion.
          • Forbid any secondary operation during Storage service scale-in/scale-out.

          After admission control is enabled, NebulaGraph Operator allows you to add annotations to implement the following admission validation control rules:

          • Clusters with the ha-mode annotation must have the minimum number of replicas as required by high availability mode:

            • For Graph service: At least 2 replicas are required.
            • For Meta service: At least 3 replicas are required.
            • For Storage service: At least 3 replicas are required.

            Note

            High availability mode refers to the high availability of NebulaGraph cluster services. Storage and Meta services are stateful, and the number of replicas should be an odd number due to Raft protocol requirements for data consistency. In high availability mode, at least 3 Storage services and 3 Meta services are required. Graph services are stateless, so their number of replicas can be even but should be at least 2.

          • Clusters with the delete-protection annotation cannot be deleted. For more information, see Configure deletion protection.
          "},{"location":"k8s-operator/4.cluster-administration/4.7.security/4.7.2.enable-admission-control/#tls_certificates_for_admission_webhooks","title":"TLS certificates for admission webhooks","text":"

          To ensure secure communication and data integrity between the K8s API server and the admission webhook, this communication is done over HTTPS by default. This means that TLS certificates are required for the admission webhook. cert-manager is a Kubernetes certificate management controller that automates the issuance and renewal of certificates. NebulaGraph Operator uses cert-manager to manage certificates.

          Once cert-manager is installed and admission control is enabled, NebulaGraph Operator will automatically create an Issuer for issuing the necessary certificate for the admission webhook, and a Certificate for storing the issued certificate. The issued certificate is stored in the nebula-operator-webhook-secret Secret.

          "},{"location":"k8s-operator/4.cluster-administration/4.7.security/4.7.2.enable-admission-control/#steps_of_enabling_admission_control","title":"Steps of enabling admission control","text":"
          1. Install cert-manager.

            kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.1/cert-manager.yaml\n

            It is suggested to deploy the latest version of cert-manager. For details, see the official cert-manager documentation.

          2. Modify the NebulaGraph Operator configuration file to enable admission control. Admission control is disabled by default and needs to be enabled manually.

            # Check the current configuration\nhelm show values nebula-operator/nebula-operator\n
            # Modify the configuration by setting `enableAdmissionWebhook` to `true`.\nhelm upgrade nebula-operator nebula-operator/nebula-operator --set enableAdmissionWebhook=true\n

            Note

            nebula-operator is the name of the chart repository, and nebula-operator/nebula-operator is the chart name. If the chart's namespace is not specified, it defaults to default.

          3. View the certificate Secret for the admission webhook.

            kubectl get secret nebula-operator-webhook-secret -o yaml\n

            If the output includes certificate contents, it means that the admission webhook's certificate has been successfully created.

          4. Verify the control rules.

            • Verify preventing additional PVs from being added to Storage service.

              $ kubectl patch nc nebula --type='merge' --patch '{\"spec\": {\"storaged\": {\"dataVolumeClaims\":[{\"resources\": {\"requests\": {\"storage\": \"2Gi\"}}, \"storageClassName\": \"local-path\"},{\"resources\": {\"requests\": {\"storage\": \"3Gi\"}}, \"storageClassName\": \"fask-disks\"}]}}}'\nError from server: admission webhook \"nebulaclustervalidating.nebula-graph.io\" deniedthe request: spec.storaged.dataVolumeClaims: Forbidden: storaged dataVolumeClaims is immutable\n
            • Verify disallowing shrinking Storage service's PVC capacity.

              $ kubectl patch nc nebula --type='merge' --patch '{\"spec\": {\"storaged\": {\"dataVolumeClaims\":[{\"resources\": {\"requests\": {\"storage\": \"1Gi\"}}, \"storageClassName\": \"fast-disks\"}]}}}'\nError from server: admission webhook \"nebulaclustervalidating.nebula-graph.io\" denied the request: spec.storaged.dataVolumeClaims: Invalid value: resource.Quantity{i:resource.int64Amount{value:1073741824, scale:0}, d:resource.infDecAmount{Dec:(*inf.Dec)(nil)}, s:\"1Gi\", Format:\"BinarySI\"}: data volume size can only be increased\n
            • Verify disallowing any secondary operation during Storage service scale-in.

              $ kubectl patch nc nebula --type='merge' --patch '{\"spec\": {\"storaged\": {\"replicas\": 5}}}'\nnebulacluster.apps.nebula-graph.io/nebula patched\n$ kubectl patch nc nebula --type='merge' --patch '{\"spec\": {\"storaged\": {\"replicas\": 3}}}'\nError from server: admission webhook \"nebulaclustervalidating.nebula-graph.io\" denied the request: [spec.storaged: Forbidden: field is immutable while in ScaleOut phase, spec.storaged.replicas: Invalid value: 3: field is immutable while not in Running phase]\n
            • Verify the minimum number of replicas in high availability mode.

              # Annotate the cluster to enable high availability mode.\n$ kubectl annotate nc nebula nebula-graph.io/ha-mode=true\n# Verify the minimum number of the Graph service's replicas.\n$ kubectl patch nc nebula --type='merge' --patch '{\"spec\": {\"graphd\": {\"replicas\":1}}}'\nError from server: admission webhook \"nebulaclustervalidating.nebula-graph.io\" denied the request: spec.graphd.replicas: Invalid value: 1: should be at least 2 in HA mode\n
            • Verify deletion protection. For more information, see Configure deletion protection.
          "},{"location":"k8s-operator/4.cluster-administration/4.7.security/4.7.3.config-deletion-protection/","title":"Configure deletion protection","text":"

          NebulaGraph Operator supports deletion protection to prevent NebulaGraph clusters from being deleted by accident. This topic describes how to configure deletion protection for a NebulaGraph cluster.

          "},{"location":"k8s-operator/4.cluster-administration/4.7.security/4.7.3.config-deletion-protection/#prerequisites","title":"Prerequisites","text":"
          • A NebulaGraph cluster is created with NebulaGrpah Operator. For more information, see Create a NebulaGraph cluster.
          • Admission control is enabled on the NebulaGraph cluster. For more information, see Enable admission control.
          "},{"location":"k8s-operator/4.cluster-administration/4.7.security/4.7.3.config-deletion-protection/#add_an_annotation_to_enable_deletion_protection","title":"Add an annotation to enable deletion protection","text":"

          Add the delete-protection annotation to the cluster.

          kubectl annotate nc nebula -n nebula-test nebula-graph.io/delete-protection=true\n
          The preceding command enables deletion protection for the nebula cluster in the nebula-test namespace.

          "},{"location":"k8s-operator/4.cluster-administration/4.7.security/4.7.3.config-deletion-protection/#verify_deletion_protection","title":"Verify deletion protection","text":"

          To verify that deletion protection is enabled, run the following command:

          kubectl delete nc nebula -n nebula-test\n

          The preceding command attempts to delete the nebula cluster in the nebula-test namespace.

          Return:

          Error from server: admission webhook \"nebulaclustervalidating.nebula-graph.io\" denied the request: metadata.annotations[nebula-graph.io/delete-protection]: Forbidden: protected cluster cannot be deleted\n
          "},{"location":"k8s-operator/4.cluster-administration/4.7.security/4.7.3.config-deletion-protection/#remove_the_annotation_to_disable_deletion_protection","title":"Remove the annotation to disable deletion protection","text":"

          Remove the delete-protection annotation from the cluster as follows:

          kubectl annotate nc nebula -n nebula-test nebula-graph.io/delete-protection-\n

          The preceding command disables deletion protection for the nebula cluster in the nebula-test namespace.

          "},{"location":"k8s-operator/4.cluster-administration/4.8.ha-and-balancing/4.8.1.self-healing/","title":"Self-healing","text":"

          NebulaGraph Operator calls the interface provided by NebulaGraph clusters to dynamically sense cluster service status. Once an exception is detected (for example, a component in a NebulaGraph cluster stops running), NebulaGraph Operator automatically performs fault tolerance. This topic shows how Nebular Operator performs self-healing by simulating cluster failure of deleting one Storage service Pod in a NebulaGraph cluster.

          "},{"location":"k8s-operator/4.cluster-administration/4.8.ha-and-balancing/4.8.1.self-healing/#prerequisites","title":"Prerequisites","text":"

          Install NebulaGraph Operator

          "},{"location":"k8s-operator/4.cluster-administration/4.8.ha-and-balancing/4.8.1.self-healing/#steps","title":"Steps","text":"
          1. Create a NebulaGraph cluster. For more information, see Create a NebulaGraph clusters.

          2. Delete the Pod named <cluster_name>-storaged-2 after all pods are in the Running status.

            kubectl delete pod <cluster-name>-storaged-2 --now\n
            <cluster_name> is the name of your NebulaGraph cluster.

          3. NebulaGraph Operator automates the creation of the Pod named <cluster-name>-storaged-2 to perform self-healing.

            Run the kubectl get pods command to check the status of the Pod <cluster-name>-storaged-2.

            ...\nnebula-cluster-storaged-1        1/1     Running             0          5d23h\nnebula-cluster-storaged-2        0/1     ContainerCreating   0          1s\n...\n

            ...\nnebula-cluster-storaged-1        1/1     Running     0          5d23h\nnebula-cluster-storaged-2        1/1     Running     0          4m2s\n...\n
            When the status of <cluster-name>-storaged-2 is changed from ContainerCreating to Running, the self-healing is performed successfully.

          "},{"location":"k8s-operator/4.cluster-administration/4.9.advanced/4.9.1.rolling-update-strategy/","title":"Optimize leader transfer in rolling updates","text":"

          NebulaGraph clusters use a distributed architecture to divide data into multiple logical partitions, which are typically evenly distributed across different nodes. In distributed systems, there are usually multiple replicas of the same data. To ensure the consistency of data across multiple replicas, NebulaGraph clusters use the Raft protocol to synchronize multiple partition replicas. In the Raft protocol, each partition elects a leader replica, which is responsible for handling write requests, while follower replicas handle read requests.

          When a NebulaGraph cluster created by NebulaGraph Operator performs a rolling update, a storage node temporarily stops providing services for the update. For an overview of rolling updates, see Performing a Rolling Update. If the node hosting the leader replica stops providing services, it will result in the unavailability of read and write operations for that partition. To avoid this situation, by default, NebulaGraph Operator transfers the leader replicas to other unaffected nodes during the rolling update process of a NebulaGraph cluster. This way, when a storage node is being updated, the leader replicas on other nodes can continue processing client requests, ensuring the read and write availability of the cluster.

          The process of migrating all leader replicas from one storage node to the other nodes may take a long time. To better control the rolling update duration, Operator provides a field called enableForceUpdate. When it is confirmed that there is no external access traffic, you can set this field to true. This way, the leader replicas will not be transferred to other nodes, thereby speeding up the rolling update process.

          "},{"location":"k8s-operator/4.cluster-administration/4.9.advanced/4.9.1.rolling-update-strategy/#rolling_update_trigger_conditions","title":"Rolling update trigger conditions","text":"

          Operator triggers a rolling update of the NebulaGraph cluster under the following circumstances:

          • The version of the NebulaGraph cluster changes.
          • The configuration of the NebulaGraph cluster changes.
          • NebulaGraph cluster services are restarted.
          "},{"location":"k8s-operator/4.cluster-administration/4.9.advanced/4.9.1.rolling-update-strategy/#specify_a_rolling_update_strategy","title":"Specify a rolling update strategy","text":"

          In the YAML file for creating a cluster instance, add the spec.storaged.enableForceUpdate field and set it to true or false to control the rolling update speed.

          When enableForceUpdate is set to true, it means that the leader partition replicas are not transferred, thus speeding up the rolling update process. Conversely, when set to false, it means that the leader replicas are transferred to other nodes to ensure the read and write availability of the cluster. The default value is false.

          Warning

          When setting enableForceUpdate to true, make sure there is no traffic entering the cluster for read and write operations. This is because this setting will force the cluster pods to be rebuilt, and during this process, data loss or client request failures may occur.

          Configuration example:

          ...\nspec:\n...\n  storaged:\n    # When set to true,\n    # it means that the leader partition replicas are not transferred,\n    # but the cluster pods are rebuilt directly.\n    enableForceUpdate: true \n    ...\n
          "},{"location":"k8s-operator/4.cluster-administration/4.9.advanced/4.9.2.restart-cluster/","title":"Restart service Pods in a NebulaGraph cluster on K8s","text":"

          Note

          Restarting NebulaGraph cluster service Pods is a feature in the Alpha version.

          During routine maintenance, it might be necessary to restart a specific service Pod in the NebulaGraph cluster, for instance, when the Pod's status is abnormal or to enforce a restart. Restarting a Pod essentially means restarting the service process. To ensure high availability, NebulaGraph Operator supports gracefully restarting all Pods of the Graph, Meta, or Storage service respectively and gracefully restarting an individual Pod of the Storage service.

          "},{"location":"k8s-operator/4.cluster-administration/4.9.advanced/4.9.2.restart-cluster/#prerequisites","title":"Prerequisites","text":"

          A NebulaGraph cluster is created in a K8s environment. For details, see Create a NebulaGraph cluster.

          "},{"location":"k8s-operator/4.cluster-administration/4.9.advanced/4.9.2.restart-cluster/#restart_all_pods_of_a_certain_service_type","title":"Restart all Pods of a certain service type","text":"

          To gracefully roll restart all Pods of a certain service type in the cluster, you can add an annotation (nebula-graph.io/restart-timestamp) with the current time to the configuration of the StatefulSet controller of the corresponding service.

          When NebulaGraph Operator detects that the StatefulSet controller of the corresponding service has the annotation nebula-graph.io/restart-timestamp and its value is changed, it triggers the graceful rolling restart operation for all Pods of that service type in the cluster.

          In the following example, the annotation is added for all Graph services so that all Pods of these Graph services are restarted one by one.

          Assume that the cluster name is nebula and the cluster resources are in the default namespace. Run the following command:

          1. Check the name of the StatefulSet controller.

            kubectl get statefulset \n

            Sample output:

            NAME              READY   AGE\nnebula-graphd     2/2     33s\nnebula-metad      3/3     69s\nnebula-storaged   3/3     69s\n
          2. Get the current timestamp.

            date -u +%s\n

            Example output:

            1700547115\n
          3. Overwrite the timestamp annotation of the StatefulSet controller to trigger the graceful rolling restart operation.

            kubectl annotate statefulset nebula-graphd nebula-graph.io/restart-timestamp=\"1700547115\" --overwrite\n

            Example output:

            statefulset.apps/nebula-graphd annotate\n
          4. Observe the restart process.

            kubectl get pods -l app.kubernetes.io/cluster=nebula,app.kubernetes.io/component=graphd -w\n

            Example output:

            NAME              READY   STATUS    RESTARTS   AGE\nnebula-graphd-0   1/1     Running   0          9m37s\nnebula-graphd-1   0/1     Running   0          17s\nnebula-graphd-1   1/1     Running   0          20s\nnebula-graphd-0   1/1     Terminating   0          9m40s\nnebula-graphd-0   0/1     Terminating   0          9m41s\nnebula-graphd-0   0/1     Terminating   0          9m42s\nnebula-graphd-0   0/1     Terminating   0          9m42s\nnebula-graphd-0   0/1     Terminating   0          9m42s\nnebula-graphd-0   0/1     Pending       0          0s\nnebula-graphd-0   0/1     Pending       0          0s\nnebula-graphd-0   0/1     ContainerCreating   0          0s\nnebula-graphd-0   0/1     Running             0          2s\n

            This above output shows the status of Graph service Pods during the restart process.

          5. Verify that the StatefulSet controller annotation is updated.

            kubectl get statefulset nebula-graphd -o yaml | grep \"nebula-graph.io/restart-timestamp\"\n

            Example output:

            nebula-graph.io/last-applied-configuration: '{\"persistentVolumeClaimRetentionPolicy\":{\"whenDeleted\":\"Retain\",\"whenScaled\":\"Retain\"},\"podManagementPolicy\":\"Parallel\",\"replicas\":2,\"revisionHistoryLimit\":10,\"selector\":{\"matchLabels\":{\"app.kubernetes.io/cluster\":\"nebula\",\"app.kubernetes.io/component\":\"graphd\",\"app.kubernetes.io/managed-by\":\"nebula-operator\",\"app.kubernetes.io/name\":\"nebula-graph\"}},\"serviceName\":\"nebula-graphd-headless\",\"template\":{\"metadata\":{\"annotations\":{\"nebula-graph.io/cm-hash\":\"7c55c0e5ac74e85f\",\"nebula-graph.io/restart-timestamp\":\"1700547815\"},\"creationTimestamp\":null,\"labels\":{\"app.kubernetes.io/cluster\":\"nebula\",\"app.kubernetes.io/component\":\"graphd\",\"app.kubernetes.io/managed-by\":\"nebula-operator\",\"app.kubernetes.io/name\":\"nebula-graph\"}},\"spec\":{\"containers\":[{\"command\":[\"/bin/sh\",\"-ecx\",\"exec\nnebula-graph.io/restart-timestamp: \"1700547115\"\n    nebula-graph.io/restart-timestamp: \"1700547815\" \n

          The above output indicates that the annotation of the StatefulSet controller has been updated, and all graph service Pods has been restarted.

          "},{"location":"k8s-operator/4.cluster-administration/4.9.advanced/4.9.2.restart-cluster/#restart_a_single_storage_service_pod","title":"Restart a single Storage service Pod","text":"

          To gracefully roll restart a single Storage service Pod, you can add an annotation (nebula-graph.io/restart-ordinal) with the value set to the ordinal number of the Storage service Pod you want to restart. This triggers a graceful restart or state transition for that specific Storage service Pod. The added annotation will be automatically removed after the Storage service Pod is restarted.

          In the following example, the annotation is added for the Pod with ordinal number 1, indicating a graceful restart for the nebula-storaged-1 Storage service Pod.

          Assume that the cluster name is nebula, and the cluster resources are in the default namespace. Run the following commands:

          1. Check the name of the StatefulSet controller.

            kubectl get statefulset \n

            Example output:

            NAME              READY   AGE\nnebula-graphd     2/2     33s\nnebula-metad      3/3     69s\nnebula-storaged   3/3     69s\n
          2. Get the ordinal number of the Storage service Pod.

            kubectl get pods -l app.kubernetes.io/cluster=nebula,app.kubernetes.io/component=storaged\n

            Example output:

            NAME                READY   STATUS    RESTARTS   AGE\nnebula-storaged-0   1/1     Running   0          13h\nnebula-storaged-1   1/1     Running   0          13h\nnebula-storaged-2   1/1     Running   0          13h\nnebula-storaged-3   1/1     Running   0          13h\nnebula-storaged-4   1/1     Running   0          13h\nnebula-storaged-5   1/1     Running   0          13h\nnebula-storaged-6   1/1     Running   0          13h\nnebula-storaged-7   1/1     Running   0          13h\nnebula-storaged-8   1/1     Running   0          13h\n
          3. Add the annotation for the nebula-storaged-1 Pod to trigger a graceful restart for that specific Pod.

            kubectl annotate statefulset nebula-storaged nebula-graph.io/restart-ordinal=\"1\" \n

            Example output:

            statefulset.apps/nebula-storaged annotate\n
          4. Observe the restart process.

            kubectl get pods -l app.kubernetes.io/cluster=nebula,app.kubernetes.io/component=storaged -w\n

            Example output:

            NAME                READY   STATUS    RESTARTS   AGE\nnebula-storaged-0   1/1     Running   0          13h\nnebula-storaged-1   1/1     Running   0          13h\nnebula-storaged-2   1/1     Running   0          13h\nnebula-storaged-3   1/1     Running   0          13h\nnebula-storaged-4   1/1     Running   0          13h\nnebula-storaged-5   1/1     Running   0          12h\nnebula-storaged-6   1/1     Running   0          12h\nnebula-storaged-7   1/1     Running   0          12h\nnebula-storaged-8   1/1     Running   0          12h\n\n\nnebula-storaged-1   1/1     Running   0          13h\nnebula-storaged-1   1/1     Terminating   0          13h\nnebula-storaged-1   0/1     Terminating   0          13h\nnebula-storaged-1   0/1     Terminating   0          13h\nnebula-storaged-1   0/1     Terminating   0          13h\nnebula-storaged-1   0/1     Terminating   0          13h\nnebula-storaged-1   0/1     Pending       0          0s\nnebula-storaged-1   0/1     Pending       0          0s\nnebula-storaged-1   0/1     ContainerCreating   0          0s\nnebula-storaged-1   0/1     Running             0          1s\nnebula-storaged-1   1/1     Running             0          10s  \n

            The above output indicates that the nebula-storaged-1 Storage service Pod is successfully restarted.

            After restarting a single Storage service Pod, the distribution of storage leader replicas may become unbalanced. You can execute the BALANCE LEADER command to rebalance the distribution of leader replicas. For information about how to view the leader distribution, see SHOW HOSTS.

          "},{"location":"nebula-cloud/2.how-to-create-subsciption/","title":"Create a subscription","text":"

          Before using NebulaGraph Cloud, you need to create a subscription on Azure. This topic describes how to create a subscription on Azure Marketplace.

          "},{"location":"nebula-cloud/2.how-to-create-subsciption/#subscription_workflow","title":"Subscription workflow","text":"
          1. Enter the Azure Marketplace, and search for NebulaGraph Cloud in the search bar in Marketplace, or directly click NebulaGraph Cloud to enter the subscription page. [TODO]

          2. Select a plan according to your own needs and click Set up + subscribe.

            1. On the Basics page of Subscribe NebulaGraph Cloud, fill in the following plan details:

              • Project details

                Field Description Subscription Select a subscription. Resource group Select an existing resource group or create a new one.
              • SaaS details

                Field Description Name Create a name for this SaaS subscription to easily identify it later. Recurring billing On or Off.
            2. At the bottom of the Basics page, click Next: Tags.

            3. (Optional) On the Tags page, enter Name: Value.
            4. At the bottom of Review + subscribe page, click Subscribe and wait for about 2 minutes.
          3. After the subscription is completed, you need to click Open the SaaS account on the publisher's website to create and configure your Solution. For details, see How to configure a Solution.

          "},{"location":"nebula-cloud/3.how-to-set-solution/","title":"Configure a Solution","text":"

          Solution refers to the NebulaGraph database running on NebulaGraph Cloud. After subscribing NebulaGraph Cloud on Azure, you need to configure your Solutions on the Cloud platform to complete the purchase. This topic describes how to configure a Solution.

          "},{"location":"nebula-cloud/3.how-to-set-solution/#configuration_workflow","title":"Configuration workflow","text":"
          1. To complete your purchase after subscribing NebulaGraph Cloud on Azure, click Configure account now on the page and the system will jump to the NebulaGraph Cloud login page.
          2. Log in to the Azure account that has subscribed the Solution service in NebulaGraph Cloud.

            1. Select a region in the Provider section.

              Caution

              The region of the database you select should be in the same area as that of your business to avoid performance and speed problems.

            2. Configure the type and the number of the query engine and the type, the number, and the disk size of the storage engine in the Instance section.

              Caution

              It is recommended to configure at least 2 query engines and 3 storage engines to ensure high service availability.

            3. Enter the specified Azure account mailbox as the Root user in the NebulaGraph section.

            4. Click Next at the bottom of this page.

            5. After confirmation, click Create at the bottom of this page.
          3. For now, you have completed the configuration of the Solution. If the status of the Solution is running on the Cloud homepage, the Solution has been created successfully.

          "},{"location":"nebula-cloud/3.how-to-set-solution/#solution_status","title":"Solution status","text":"

          You may see the following status and corresponding description on the Solution page.

          Status Description creating The resources required by a Solution are ready and the Solution will be created automatically. At this time, the Solution is in the creating state, which may last from several minutes to over ten minutes. starting After you have restarted a Solution, it will be in the starting state for a while. stopping After you have clicked Stop Solution, the Solution will be in the stopping state for a while. deleting After you have clicked Delete Solution, the Solution will be in the deleting state for a while. running After you create a Solution, it will be in the running state for a long time. stopped After you stop a Solution, it will be in the stopped state for a long time. deleted After you delete a Solution, it will be in the deleted state for a long time. create_failed If you failed to create a Solution, the Solution will be in the create_failed state for a long time. stop_failed If you failed to stop a Solution, the Solution will be in the stop_failed state for a long time. start_failed If you failed to start a Solution, the Solution will be in the start_failed state for a long time.

          Caution

          If a Solution stays in an intermediate state for a long time and the page remains unchanged after refreshing, it means that there is an exception and you need to submit an order to solve the problem.

          Caution

          If a Solution is in the state of create_failed, stop_failed, or start_failed, you can execute CREATE, STOP, or START again.

          "},{"location":"nebula-cloud/4.user-role-description/","title":"Cloud Solution roles","text":"

          After creating a Solution, you need to confirm the role privileges in the Cloud platform. This topic introduces the role privileges in the Cloud Solution.

          "},{"location":"nebula-cloud/4.user-role-description/#built-in_roles","title":"Built-in roles","text":"

          NebulaGraph Cloud has multiple built-in roles:

          • OWNER
            • Correspond to the resource manager who can subscribe services and manage resource privileges.
            • Configure Solution, create and confirm services, and activate subscription.
            • Start and stop services of the Solution.
            • Authorizing the ROOT user in the database manually.
            • Access the database on the Cloud through a private endpoint.
            • View history logs.
            • Connect to NebulaGraph Dashboard to monitor specified Solution nodes and services.
          • ROOT
            • Correspond to the God of the NebulaGraph database, which is set by the OWNER. For privileges of the God role, see Built-in role privileges.
            • Manage users with the USER role in different spaces in the Cloud platform. When authorizing the USER role, you need to specify the role privileges of the NebulaGraph database, including ADMIN, DBA, GUEST, and USER. For details, see Built-in role privileges.
            • Access the database on the Cloud through a private endpoint.
            • Connect to visualized tools, including NebulaGraph Dashboard, NebulaGraph Studio, and NebulaGraph Explorer.
          • USER
            • The database users are the Azure subscribers invited by the ROOT user in the Cloud platform.
            • Correspond to the ADMIN, DBA, GUEST, or USER in the NebulaGraph database.
            • Access the database on the Cloud through a private endpoint.
            • Connect to visualized tools, including NebulaGraph Studio and NebulaGraph Explorer.
          "},{"location":"nebula-cloud/4.user-role-description/#solutions_privileges","title":"Solutions privileges","text":"

          On the Solution page, users with different roles will see different sidebars. The following describes the privileges of each role. Among them, Y means that this role can view this page, and N means that it cannot.

          Page OWNER ROOT USER Solution Info Y Y Y Applications Y Y Y Connectivity Y N N Root Management Y N N User Management N Y N Audit Log Y N N Settings Y N N Subscribe Settings Y N N Billing Y N N"},{"location":"nebula-cloud/7.terms-and-conditions/","title":"Terms of Service","text":"

          These terms and conditions (\"Agreement\") sets forth the general terms and conditions of your use of the https://cloud.nebula-cloud.io website (\"Website\" or \"Service\") and any of its related products and services (collectively, \"Services\"). This Agreement is legally binding between you (\"User\", \"you\" or \"your\") and vesoft inc. (\"vesoft inc.\", \"we\", \"us\" or \"our\"). By accessing and using the Website and Services, you acknowledge that you have read, understood, and agree to be bound by the terms of this Agreement. If you are entering into this Agreement on behalf of a business or other legal entity, you represent that you have the authority to bind such entity to this Agreement, in which case the terms \"User\", \"you\" or \"your\" shall refer to such entity. If you do not have such authority, or if you do not agree with the terms of this Agreement, you must not accept this Agreement and may not access and use the Website and Services. You acknowledge that this Agreement is a contract between you and vesoft inc., even though it is electronic and is not physically signed by you, and it governs your use of the Website and Services.

          "},{"location":"nebula-cloud/7.terms-and-conditions/#accounts","title":"Accounts","text":"

          You give NebulaGraph Cloud permission to use your Azure account as your NebulaGraph Cloud account and get your account information so that NebulaGraph Cloud can contact you regarding this product and related products. You understand that the rights to use NebulaGraph Cloud come from vesoft instead of Microsoft, vesoft is the provider of this product. Use of NebulaGraph Cloud is governed by provider's terms of service, service-level agreement, and privacy policy.

          "},{"location":"nebula-cloud/7.terms-and-conditions/#billing_and_payments","title":"Billing and payments","text":"

          Microsoft collects payments from you for your commercial marketplace purchases. You may pay the fees for the NebulaGraph Cloud services according to your chosen solutions. You shall pay all fees or charges to your account in accordance with the fees, charges, and billing terms in effect at the time a fee or charge is due and payable.

          "},{"location":"nebula-cloud/7.terms-and-conditions/#accuracy_of_information","title":"Accuracy of information","text":"

          Occasionally there may be information on the Website that contains typographical errors, inaccuracies or omissions that may relate to pricing, availability, promotions and offers. We reserve the right to correct any errors, inaccuracies or omissions, and to change or update information or cancel orders if any information on the Website or Services is inaccurate at any time without prior notice (including after you have submitted your order). We undertake no obligation to update, amend or clarify information on the Website including, without limitation, pricing information, except as required by law. No specified update or refresh date applied on the Website should be taken to indicate that all information on the Website or Services has been modified or updated.

          "},{"location":"nebula-cloud/7.terms-and-conditions/#data_and_content_protection","title":"Data and content protection","text":"

          vesoft understands and recognizes that all the data processed, stored, uploaded, downloaded, distributed, or processed through services provided by NebulaGraph Cloud is your data or content, and you fully own your data and content. Except for the implementation of your service requirements, no unauthorized use or disclosure of your data or content will be made except in the following circumstances:

          a.vesoft may disclose the data or content in any legal proceeding or to a governmental body as required by Law;

          b.an agreement made between you and vesoft.

          You can delete or edit your data or content yourself. If you have deleted the service or data, vesoft will delete your data and will no longer retain such data in accordance with your instructions. You should operate carefully with regard to operations such as deletion or modification.

          You understand and agree: when your subscription is in the Suspended state, Microsoft gives the customer a 30-day grace period before automatically canceling the subscription. After the 30-day grace period is over, the webhook will receive an Unsubscribe action. After vesoft receives a cancellation webhook call, vesoft will only continue to store your data and content (if any) within 7 days. After 7 days, vesoft will delete all your data and content, including all cached or backup copies, and will no longer retain any of them.

          Once the data or content is deleted, it cannot be restored; you shall take responsibilities caused by the data being deleted. You understand and agree that vesoft has no obligation to continue to retain, export or return your data or content.

          "},{"location":"nebula-cloud/7.terms-and-conditions/#links_to_other_resources","title":"Links to other resources","text":"

          Although the Website and Services may link to other resources (such as websites), we are not, directly or indirectly, implying any approval, association, sponsorship, endorsement, or affiliation with any linked resource, unless specifically stated herein. You acknowledge that vesoft inc. is providing these links to you only as a convenience. We are not responsible for examining or evaluating, and we do not warrant the offerings of, any businesses or individuals or the content of their resources. We do not assume any responsibility or liability for the actions, products, services, and content of any other third parties. You should carefully review the legal statements and other conditions of use of any resource which you access through a link on the Website and Services. Your linking to any other off-site resources is at your own risk.

          "},{"location":"nebula-cloud/7.terms-and-conditions/#prohibited_uses","title":"Prohibited uses","text":"

          In addition to other terms as set forth in the Agreement, you are prohibited from using the Website and Services or Content: (a) for any unlawful purpose; (b) to solicit others to perform or participate in any unlawful acts; (c) to violate any international, federal, provincial or state regulations, rules, laws, or local ordinances; (d) to infringe upon or violate our intellectual property rights or the intellectual property rights of others; (e) to harass, abuse, insult, harm, defame, slander, disparage, intimidate, or discriminate based on gender, sexual orientation, religion, ethnicity, race, age, national origin, or disability; (f) to submit false or misleading information; (g) to upload or transmit viruses or any other type of malicious code that will or may be used in any way that will affect the functionality or operation of the Website and Services, third party products and services, or the Internet; (h) to spam, phish, pharm, pretext, spider, crawl, or scrape; (i) for any obscene or immoral purpose; or (j) to interfere with or circumvent the security features of the Website and Services, third party products and services, or the Internet. We reserve the right to terminate your use of the Website and Services for violating any of the prohibited uses.

          "},{"location":"nebula-cloud/7.terms-and-conditions/#intellectual_property_rights","title":"Intellectual property rights","text":"

          \"Intellectual Property Rights\" means all present and future rights conferred by law or statute in or in relation to any copyright and related rights, trademarks, designs, patents, inventions, goodwill and the right to sue for passing off, rights to inventions, rights to use, and all other intellectual property rights, in each case whether registered or unregistered and including all applications and rights to apply for and be granted, rights to claim priority from, such rights and all similar or equivalent rights or forms of protection and any other results of intellectual activity which subsist or will subsist now or in the future in any part of the world. This Agreement does not transfer to you any intellectual property owned by vesoft inc. or third parties, and all rights, titles, and interests in and to such property will remain (as between the parties) solely with vesoft inc. All trademarks, service marks, graphics and logos used in connection with the Website and Services, are trademarks or registered trademarks of vesoft inc. or its licensors. Other trademarks, service marks, graphics and logos used in connection with the Website and Services may be the trademarks of other third parties. Your use of the Website and Services grants you no right or license to reproduce or otherwise use any of vesoft inc. or third party trademarks.

          "},{"location":"nebula-cloud/7.terms-and-conditions/#disclaimer_of_warranty","title":"Disclaimer of warranty","text":"

          You agree that such Service is provided on an \"as is\" and \"as available\" basis and that your use of the Website and Services is solely at your own risk. We expressly disclaim all warranties of any kind, whether express or implied, including but not limited to the implied warranties of merchantability, fitness for a particular purpose and non-infringement. We make no warranty that the Services will meet your requirements, or that the Service will be uninterrupted, timely, secure, or error-free; nor do we make any warranty as to the results that may be obtained from the use of the Service or as to the accuracy or reliability of any information obtained through the Service or that defects in the Service will be corrected. You understand and agree that any material and/or data downloaded or otherwise obtained through the use of Service is done at your own discretion and risk and that you will be solely responsible for any damage or loss of data that results from the download of such material and/or data. We make no warranty regarding any goods or services purchased or obtained through the Service or any transactions entered into through the Service. No advice or information, whether oral or written, obtained by you from us or through the Service shall create any warranty not expressly made herein.

          "},{"location":"nebula-cloud/7.terms-and-conditions/#limitation_of_liability","title":"Limitation of liability","text":"

          To the fullest extent permitted by applicable law, in no event will vesoft inc., its affiliates, directors, officers, employees, agents, suppliers or licensors be liable to any person for any indirect, incidental, special, punitive, cover or consequential damages (including, without limitation, damages for lost profits, revenue, sales, goodwill, use of content, impact on business, business interruption, loss of anticipated savings, loss of business opportunity) however caused, under any theory of liability, including, without limitation, contract, tort, warranty, breach of statutory duty, negligence or otherwise, even if the liable party has been advised as to the possibility of such damages or could have foreseen such damages.

          "},{"location":"nebula-cloud/7.terms-and-conditions/#indemnification","title":"Indemnification","text":"

          You agree to indemnify and hold vesoft inc. and its affiliates, directors, officers, employees, agents, suppliers and licensors harmless from and against any liabilities, losses, damages or costs, including reasonable attorneys' fees, incurred in connection with or arising from any third party allegations, claims, actions, disputes, or demands asserted against any of them as a result of or relating to your Content, your use of the Website and Services or any willful misconduct on your part.

          "},{"location":"nebula-cloud/7.terms-and-conditions/#severability","title":"Severability","text":"

          All rights and restrictions contained in this Agreement may be exercised and shall be applicable and binding only to the extent that they do not violate any applicable laws and are intended to be limited to the extent necessary so that they will not render this Agreement illegal, invalid or unenforceable. If any provision or portion of any provision of this Agreement shall be held to be illegal, invalid or unenforceable by a court of competent jurisdiction, it is the intention of the parties that the remaining provisions or portions thereof shall constitute their agreement with respect to the subject matter hereof, and all such remaining provisions or portions thereof shall remain in full force and effect.

          "},{"location":"nebula-cloud/7.terms-and-conditions/#dispute_resolution","title":"Dispute resolution","text":"

          The formation, interpretation, and performance of this Agreement and any disputes arising out of it shall be governed by the substantive and procedural laws of China without regard to its rules on conflicts or choice of law and, to the extent applicable, the laws of China. You further consent to the territorial jurisdiction of and exclusive venue in Internet Court of Hangzhou as the legal forum for any such dispute. You hereby waive any right to a jury trial in any proceeding arising out of or related to this Agreement. The United Nations Convention on Contracts for the International Sale of Goods does not apply to this Agreement.

          "},{"location":"nebula-cloud/7.terms-and-conditions/#assignment","title":"Assignment","text":"

          You may not assign, resell, sub-license or otherwise transfer or delegate any of your rights or obligations hereunder, in whole or in part, without our prior written consent, which consent shall be at our own sole discretion and without obligation; any such assignment or transfer shall be null and void. We are free to assign any of its rights or obligations hereunder, in whole or in part, to any third party as part of the sale of all or substantially all of its assets or stock or as part of a merger.

          "},{"location":"nebula-cloud/7.terms-and-conditions/#changes_and_amendments","title":"Changes and amendments","text":"

          We reserve the right to modify this Agreement or its terms relating to the Website and Services at any time, effective upon posting of an updated version of this Agreement on the Website. When we do, we will revise the updated date at the bottom of this page. Continued use of the Website and Services after any such changes shall constitute your consent to such changes.

          "},{"location":"nebula-cloud/7.terms-and-conditions/#acceptance_of_these_terms","title":"Acceptance of these terms","text":"

          You acknowledge that you have read this Agreement and agree to all its terms and conditions. By accessing and using the Website and Services you agree to be bound by this Agreement. If you do not agree to abide by the terms of this Agreement, you are not authorized to access or use the Website and Services.

          "},{"location":"nebula-cloud/7.terms-and-conditions/#contacting_us","title":"Contacting us","text":"

          If you would like to contact us to understand more about this Agreement or wish to contact us concerning any matter relating to it, you may send an email to legal@vesoft.com

          This document was last updated on December 14, 2021

          "},{"location":"nebula-cloud/8.privacy-policy/","title":"Privacy Policy","text":"

          This privacy policy (\"Policy\") describes how the personally identifiable information (\"Personal Information\") you may provide on the https://www.nebula-cloud.io[TODO] website (\"Website\" or \"Service\") and any of its related products and services (collectively, \"Services\") is collected, protected and used. It also describes the choices available to you regarding our use of your Personal Information and how you can access and update this information. This Policy is a legally binding agreement between you (\"User\", \"you\" or \"your\") and vesoft Inc. (\"vesoft Inc.\", \"we\", \"us\" or \"our\"). By accessing and using the Website and Services, you acknowledge that you have read, understood, and agree to be bound by the terms of this Agreement. This Policy does not apply to the practices of companies that we do not own or control, or to individuals that we do not employ or manage.

          "},{"location":"nebula-cloud/8.privacy-policy/#automatic_collection_of_information","title":"Automatic collection of information","text":"

          When you open the Website, our servers automatically record information that your browser sends. This data may include information such as your device's IP address, browser type and version, operating system type and version, language preferences or the webpage you were visiting before you came to the Website and Services, pages of the Website and Services that you visit, the time spent on those pages, information you search for on the Website, access times and dates, and other statistics.

          Information collected automatically is used only to identify potential cases of abuse and establish statistical information regarding the usage and traffic of the Website and Services. This statistical information is not otherwise aggregated in such a way that would identify any particular user of the system.

          "},{"location":"nebula-cloud/8.privacy-policy/#collection_of_personal_information","title":"Collection of personal information","text":"

          You can access and use the Website and Services without telling us who you are or revealing any information by which someone could identify you as a specific, identifiable individual. If, however, you wish to use some of the features on the Website, you may be asked to provide certain Personal Information (for example, your name and e-mail address). We receive and store any information you knowingly provide to us when you create an account or fill any online forms on the Website. When required, this information may include the following:

          • Personal details such as name.
          • Contact information such as email address.
          • Account details such as user name and password.
          • Any other materials you willingly submit to us such as articles, images, feedback, etc.

          You can choose not to provide us with your Personal Information, but then you may not be able to take advantage of some of the features on the Website. Users who are uncertain about what information is mandatory are welcome to contact us.

          "},{"location":"nebula-cloud/8.privacy-policy/#use_and_processing_of_collected_information","title":"Use and processing of collected information","text":"

          In order to make the Website and Services available to you, or to meet a legal obligation, we need to collect and use certain Personal Information. If you do not provide the information that we request, we may not be able to provide you with the requested products or services. Some of the information we collect is directly from you via the Website and Services. However, we may also collect Personal Information about you from other sources. Any of the information we collect from you may be used for the following purposes:

          • Create and manage user accounts
          • Deliver products or services
          • Improve products and services
          • Send marketing and promotional communications
          • Respond to inquiries and offer support
          • Request user feedback
          • Improve user experience
          • Deliver targeted advertising
          • Enforce terms and conditions and policies
          • Protect from abuse and malicious users
          • Respond to legal requests and prevent harm
          • Run and operate the Website and Services

          Processing your Personal Information depends on how you interact with the Website and Services, where you are located in the world and if one of the following applies: (i) you have given your consent for one or more specific purposes; (ii) provision of information is necessary for the performance of an agreement with you and/or for any pre-contractual obligations thereof; (iii) processing is necessary for compliance with a legal obligation to which you are subject; (iv) processing is related to a task that is carried out in the public interest or in the exercise of official authority vested in us; (v) processing is necessary for the purposes of the legitimate interests pursued by us or by a third party.

          Note that under some legislation we may be allowed to process information until you object to such processing (by opting out), without having to rely on consent or any other of the following legal bases below. In any case, we will be happy to clarify the specific legal basis that applies to the processing, and in particular whether the provision of Personal Information is a statutory or contractual requirement, or a requirement necessary to enter into a contract.

          "},{"location":"nebula-cloud/8.privacy-policy/#managing_information","title":"Managing information","text":"

          You are able to delete certain Personal Information we have about you. The Personal Information you can delete may change as the Website and Services change. If you would like to delete your Personal Information or permanently delete your account, you can do so by contacting us.

          "},{"location":"nebula-cloud/8.privacy-policy/#disclosure_of_information","title":"Disclosure of information","text":"

          Depending on the requested Services or as necessary to complete any transaction or provide any service you have requested, we may share your information with your consent with our trusted third parties that work with us, any other affiliates and subsidiaries we rely upon to assist in the operation of the Website and Services available to you. We do not share Personal Information with unaffiliated third parties. These service providers are not authorized to use or disclose your information except as necessary to perform services on our behalf or comply with legal requirements. We may share your Personal Information for these purposes only with third parties whose privacy policies are consistent with ours or who agree to abide by our policies with respect to Personal Information. These third parties are given Personal Information they need only in order to perform their designated functions, and we do not authorize them to use or disclose Personal Information for their own marketing or other purposes.

          We will disclose any Personal Information we collect, use or receive if required or permitted by law, such as to comply with a subpoena, or similar legal process, and when we believe in good faith that disclosure is necessary to protect our rights, protect your safety or the safety of others, investigate fraud, or respond to a government request.

          In the event we go through a business transition, such as a merger or acquisition by another company, or sale of all or a portion of its assets, your user account, and Personal Information will likely be among the assets transferred.

          "},{"location":"nebula-cloud/8.privacy-policy/#retention_of_information","title":"Retention of information","text":"

          We will retain and use your Personal Information for the period necessary to comply with our legal obligations, resolve disputes, and enforce our agreements unless a longer retention period is required or permitted by law. We may use any aggregated data derived from or incorporating your Personal Information after you update or delete it, but not in a manner that would identify you personally. Once the retention period expires, Personal Information shall be deleted. Therefore, the right to access, the right to erasure, the right to rectification and the right to data portability cannot be enforced after the expiration of the retention period.

          "},{"location":"nebula-cloud/8.privacy-policy/#transfer_of_information","title":"Transfer of information","text":"

          Depending on your location, data transfers may involve transferring and storing your information in a country other than your own. You are entitled to learn about the legal basis of information transfers to a country outside the European Union or to any international organization governed by public international law or set up by two or more countries, such as the UN, and about the security measures taken by us to safeguard your information. If any such transfer takes place, you can find out more by checking the relevant sections of this Policy or inquire with us using the information provided in the contact section.

          "},{"location":"nebula-cloud/8.privacy-policy/#the_rights_of_users","title":"The rights of users","text":"

          You may exercise certain rights regarding your information processed by us. In particular, you have the right to do the following: (i) you have the right to withdraw consent where you have previously given your consent to the processing of your information; (ii) you have the right to object to the processing of your information if the processing is carried out on a legal basis other than consent; (iii) you have the right to learn if information is being processed by us, obtain disclosure regarding certain aspects of the processing and obtain a copy of the information undergoing processing; (iv) you have the right to verify the accuracy of your information and ask for it to be updated or corrected; (v) you have the right, under certain circumstances, to restrict the processing of your information, in which case, we will not process your information for any purpose other than storing it; (vi) you have the right, under certain circumstances, to obtain the erasure of your Personal Information from us; (vii) you have the right to receive your information in a structured, commonly used and machine readable format and, if technically feasible, to have it transmitted to another controller without any hindrance. This provision is applicable provided that your information is processed by automated means and that the processing is based on your consent, on a contract which you are part of or on pre-contractual obligations thereof.

          "},{"location":"nebula-cloud/8.privacy-policy/#the_right_to_object_to_processing","title":"The right to object to processing","text":"

          Where Personal Information is processed for the public interest, in the exercise of an official authority vested in us or for the purposes of the legitimate interests pursued by us, you may object to such processing by providing a ground related to your particular situation to justify the objection.

          "},{"location":"nebula-cloud/8.privacy-policy/#how_to_exercise_these_rights","title":"How to exercise these rights","text":"

          Any requests to exercise your rights can be directed to vesoft Inc. through the contact details provided in this document. Please note that we may ask you to verify your identity before responding to such requests. Your request must provide sufficient information that allows us to verify that you are the person you are claiming to be or that you are the authorized representative of such person. You must include sufficient details to allow us to properly understand the request and respond to it. We cannot respond to your request or provide you with Personal Information unless we first verify your identity or authority to make such a request and confirm that the Personal Information relates to you.

          "},{"location":"nebula-cloud/8.privacy-policy/#privacy_of_children","title":"Privacy of children","text":"

          We do not knowingly collect any Personal Information from children under the age of 18. If you are under the age of 18, please do not submit any Personal Information through the Website and Services. We encourage parents and legal guardians to monitor their children's Internet usage and to help enforce this Policy by instructing their children never to provide Personal Information through the Website and Services without their permission. If you have reason to believe that a child under the age of 18 has provided Personal Information to us through the Website and Services, please contact us. You must also be at least 16 years of age to consent to the processing of your Personal Information in your country (in some countries we may allow your parent or guardian to do so on your behalf).

          "},{"location":"nebula-cloud/8.privacy-policy/#cookies","title":"Cookies","text":"

          The Website and Services use \"cookies\" to help personalize your online experience. A cookie is a text file that is placed on your hard disk by a web page server. Cookies cannot be used to run programs or deliver viruses to your computer. Cookies are uniquely assigned to you, and can only be read by a web server in the domain that issued the cookie to you. We may use cookies to collect, store, and track information for statistical purposes to operate the Website and Services. You have the ability to accept or decline cookies. Most web browsers automatically accept cookies, but you can usually modify your browser setting to decline cookies if you prefer. To learn more about cookies and how to manage them, visit internetcookies.org

          "},{"location":"nebula-cloud/8.privacy-policy/#email_marketing","title":"Email marketing","text":"

          We offer electronic newsletters to which you may voluntarily subscribe at any time. We are committed to keeping your e-mail address confidential and will not disclose your email address to any third parties except as allowed in the information use and processing section. We will maintain the information sent via e-mail in accordance with applicable laws and regulations.

          "},{"location":"nebula-cloud/8.privacy-policy/#links_to_other_resources","title":"Links to other resources","text":"

          The Website and Services contain links to other resources that are not owned or controlled by us. Such links do not constitute an endorsement by vesoft Inc. of those External Web Sites. Please be aware that we are not responsible for the privacy practices of such other resources or third parties. We encourage you to be aware when you leave the Website and Services and to read the privacy statements of each and every resource that may collect Personal Information. You should carefully review the legal statements and other conditions of use of any resource which you access through a link on the Website and Services.

          "},{"location":"nebula-cloud/8.privacy-policy/#information_security","title":"Information security","text":"

          We secure information you provide on computer servers in a controlled, secure environment, protected from unauthorized access, use, or disclosure. We maintain reasonable administrative, technical, and physical safeguards in an effort to protect against unauthorized access, use, modification, and disclosure of Personal Information in its control and custody. However, no data transmission over the Internet or wireless network can be guaranteed. Therefore, while we strive to protect your Personal Information, you acknowledge that (i) there are security and privacy limitations of the Internet which are beyond our control; (ii) the security, integrity, and privacy of any and all information and data exchanged between you and the Website and Services cannot be guaranteed; and (iii) any such information and data may be viewed or tampered with in transit by a third party, despite best efforts.

          "},{"location":"nebula-cloud/8.privacy-policy/#data_breach","title":"Data breach","text":"

          In the event we become aware that the security of the Website and Services has been compromised or users Personal Information has been disclosed to unrelated third parties as a result of external activity, including, but not limited to, security attacks or fraud, we reserve the right to take reasonably appropriate measures, including, but not limited to, investigation and reporting, as well as notification to and cooperation with law enforcement authorities. In the event of a data breach, we will make reasonable efforts to notify affected individuals if we believe that there is a reasonable risk of harm to the user as a result of the breach or if notice is otherwise required by law. When we do, we will post a notice on the Website, send you an email.

          "},{"location":"nebula-cloud/8.privacy-policy/#changes_and_amendments","title":"Changes and amendments","text":"

          We reserve the right to modify this Policy or its terms relating to the Website and Services from time to time in our discretion and will notify you of any material changes to the way in which we treat Personal Information. When we do, we will revise the updated date at the bottom of this page. We may also provide notice to you in other ways in our discretion, such as through contact information you have provided. Any updated version of this Policy will be effective immediately upon the posting of the revised Policy unless otherwise specified. Your continued use of the Website and Services after the effective date of the revised Policy (or such other act specified at that time) will constitute your consent to those changes. However, we will not, without your consent, use your Personal Information in a manner materially different than what was stated at the time your Personal Information was collected.

          "},{"location":"nebula-cloud/8.privacy-policy/#dispute_resolution","title":"Dispute resolution","text":"

          The formation, interpretation, and performance of this Agreement and any disputes arising out of it shall be governed by the substantive and procedural laws of China without regard to its rules on conflicts or choice of law and, to the extent applicable, the laws of China. You further consent to the personal jurisdiction of and exclusive venue in Yuhang District Court located in Hangzhou as the legal forum for any such dispute. You hereby waive any right to a jury trial in any proceeding arising out of or related to this Agreement. The United Nations Convention on Contracts for the International Sale of Goods does not apply to this Agreement.

          "},{"location":"nebula-cloud/8.privacy-policy/#acceptance_of_this_policy","title":"Acceptance of this policy","text":"

          You acknowledge that you have read this Policy and agree to all its terms and conditions. By accessing and using the Website and Services you agree to be bound by this Policy. If you do not agree to abide by the terms of this Policy, you are not authorized to access or use the Website and Services.

          "},{"location":"nebula-cloud/8.privacy-policy/#contacting_us","title":"Contacting us","text":"

          If you would like to contact us to understand more about this Policy or wish to contact us concerning any matter relating to individual rights and your Personal Information, you may send an email to legal@vesoft.com

          This document was last updated on December 28, 2021

          "},{"location":"nebula-cloud/5.solution/5.0.introduce-solution/","title":"Solution","text":"

          On the Solution page, the sidebars are different based on roles and privileges. For more information, see Roles and privileges in Cloud.

          "},{"location":"nebula-cloud/5.solution/5.0.introduce-solution/#solution_info","title":"Solution Info","text":"

          On the homepage of Cloud, click on the Solution's name to enter the Solution Info page. The Solution Info page consists of the following parts: Basic Info, Instance Info, Price Info, Getting Started. You can view the information on this page in detail.

          "},{"location":"nebula-cloud/5.solution/5.0.introduce-solution/#applications","title":"Applications","text":"

          In the sidebar, click Applications to enter the page of ecosystem tools(Dashboard/Studio/Explorer). Different roles see different ecosystem tools. For more information, see Accessory applications.

          "},{"location":"nebula-cloud/5.solution/5.0.introduce-solution/#connectivity","title":"Connectivity","text":"

          In the sidebar, click Connectivity to enter Private Link page. On this page, you can create a Private Link endpoint that enables you to access NebulaGraph databases through a private IP address in a virtual network. For more information, see Private Link.

          "},{"location":"nebula-cloud/5.solution/5.0.introduce-solution/#root_management","title":"Root Management","text":"

          In the sidebar, click Root Management to enter the root account management page. For more information, see Role and User Management.

          "},{"location":"nebula-cloud/5.solution/5.0.introduce-solution/#user_management","title":"User Management","text":"

          In the sidebar, click User Management to enter the user account management page. For more information, see Role and User Management.

          "},{"location":"nebula-cloud/5.solution/5.0.introduce-solution/#audit_log","title":"Audit Log","text":"

          In the sidebar, click Audit Log to enter the operation history page. You can select the time period according to the operation information such as Create Solution, Start Solution, Stop Solution, and filter results by operator and operation record.

          "},{"location":"nebula-cloud/5.solution/5.0.introduce-solution/#settings","title":"Settings","text":"

          In the sidebar, click Settings to enter the settings page, and you can Stop Solution or Transfer Solution in this page.

          "},{"location":"nebula-cloud/5.solution/5.1.supporting-application/","title":"Accessory applications(Dashboard/Studio/Explorer)","text":"

          NebulaGraph Cloud integrates with NebulaGraph Studio, NebulaGraph Dashboard, and NebulaGraph Explorer.

          On the Applications page, ecosystem tools are different based on roles and privileges. The correspondence between different roles and privileges is as follows. The first column means the tools that the role can use, Y means the role has the corresponding privileges, and N means the role has no privileges.

          Tools OWNER ROOT USER Dashboard Y Y N Studio N Y Y Explorer N Y Y"},{"location":"nebula-cloud/5.solution/5.1.supporting-application/#dashboard","title":"Dashboard","text":"

          NebulaGraph Dashboard (Dashboard for short) is a visualization tool that monitors and manages the status of machines and services in NebulaGraph clusters.

          "},{"location":"nebula-cloud/5.solution/5.1.supporting-application/#studio","title":"Studio","text":"

          NebulaGraph Studio (Studio in short) is a browser-based visualization tool to manage NebulaGraph. It provides you with a graphical user interface to manipulate graph schemas, import data, explore graph data, and run nGQL statements to retrieve data. With Studio, you can quickly become a graph exploration expert from scratch. For more information, see What is NebulaGraph Studio.

          "},{"location":"nebula-cloud/5.solution/5.1.supporting-application/#explorer","title":"Explorer","text":"

          NebulaGraph Explorer (Explorer in short) is a browser-based visualization tool. It is used with the NebulaGraph core to visualize interaction with graph data. Even without any experience in a graph database, you can quickly become a graph exploration expert.

          "},{"location":"nebula-cloud/5.solution/5.2.connection-configuration-and-use/","title":"Private Link","text":"

          You can create a Private Link endpoint in Connectivity to allow users to access NebulaGraph databases through a private IP in a virtual network, without exposing your traffic to the public internet. For more information about Private Link, see What is Azure Private Link?.

          "},{"location":"nebula-cloud/5.solution/5.2.connection-configuration-and-use/#configure_private_link","title":"Configure Private Link","text":"
          1. Enter your subscription ID, click Create. The creation time takes about 2 minutes.

            Note

            The subscription ID on the Subscription page of Azure Portal. You can click on the [Subscriptions] (https://portal.azure.com/?l=en.en-us#blade/Microsoft_Azure_Billing/SubscriptionsBlade) page for quick access.

          2. After the creation, you can use Alias to connect to Azure resources and create a private endpoint in Azure.

            1. Navigate to the Azure portal. Search for Private Link and click Private endpoint.
            2. Click + add.

            3. In the Basics section, fill in the following plan details:

              • Project details

                Field Description Subscription Select the subscription. Resource group Select an existing resource group or create a new resource group.
              • Instance details

                Field Description Name Set the name of the private endpoint. Region Select the region.

              Caution

              The region of the database you select should be in the same area as that of your business to avoid performance and speed problems.

            4. At the bottom of the Basics page, click Next: Resource.

            5. In the Resource section, fill in the following plan details:

              Field Description Connection method Click Connect to an Azure resource by resource ID or alias. Resource ID or alias Set the alias. Request message Set the message, this message will be sent to the resource owner.

              Note

              The alias is on the Connectivity page of NebulaGraph Cloud, click to copy it.

            6. At the bottom of the Resource page, click Next: Configuration.

            7. In the Configuration section, select the following plan details:

              • Networking

                Field Description Virtual network Set virtual networks. Subnet Set the subnet in the selected virtual network.

              Note

              Private DNS integration is currently not supported.

            8. At the bottom of the Configuration page, click Next: Tags.

            9. (optional)In the Tags section, enter Name:Values.

            10. At the bottom of the Tags page, click Next: Review + create.

            11. At the bottom of the Review + create page, click Create.
          3. After creating the private endpoint, copy the Private IP address in Network interface to the Connectivity page in Cloud. Click the Create.

            Note

            Private Link Endpoint IP information is stored in the Cloud, and you can click to modify.

          "},{"location":"nebula-cloud/5.solution/5.2.connection-configuration-and-use/#connect_to_nebulagraph_with_private_link","title":"Connect to NebulaGraph with Private Link","text":"

          You can use Private link endpoint IP to connect to NebulaGraph. For more information, see Connect to NebulaGraph.

          "},{"location":"nebula-cloud/5.solution/5.3.role-and-authority-management/","title":"Roles and authority management","text":"

          NebulaGraph Cloud roles are different from roles in NebulaGraph. For more information, see Roles in Cloud Solution.

          Roles in Cloud Roles in NebulaGraph OWNER - ROOT ROOT USER ADMIN/DBA/GUEST/USER"},{"location":"nebula-cloud/5.solution/5.3.role-and-authority-management/#root_management","title":"Root Management","text":"

          Only users with OWNER authority can manage ROOT users.

          On the Root Management page, OWNER can reset ROOT users.

          1. Click Reset, enter the email address of the ROOT user to be updated, and click Send Email to send the email.

          2. After the ROOT user receives the confirmation email, click Confirm.

          "},{"location":"nebula-cloud/5.solution/5.3.role-and-authority-management/#user_management","title":"User Management","text":"

          Only users with ROOT authority can manage USER users.

          On the User Management page, the ROOT user can grant roles in graph spaces to other users. Available roles are ADMIN, DBA, GUEST, and USER.

          1. Select the graph space, click Add User, enter the specified user email and select the management authority of the user.
          2. Click Send Email to send the email.
          3. After the USER user receives the confirmation email, click Confirm.
          "},{"location":"nebula-dashboard/1.what-is-dashboard/","title":"What is NebulaGraph Dashboard Community Edition","text":"

          NebulaGraph Dashboard Community Edition (Dashboard for short) is a visualization tool that monitors the status of machines and services in NebulaGraph clusters.

          Enterpriseonly

          Dashboard Enterprise Edition adds features such as visual cluster creation, batch import of clusters, fast scaling, etc. For more information, see Pricing.

          "},{"location":"nebula-dashboard/1.what-is-dashboard/#features","title":"Features","text":"

          Dashboard monitors:

          • The status of all the machines in clusters, including CPU, memory, load, disk, and network.
          • The information of all the services in clusters, including the IP addresses, versions, and monitoring metrics (such as the number of queries, the latency of queries, the latency of heartbeats, and so on).
          • The information of clusters, including the information of services, partitions, configurations, and long-term tasks.
          • Set how often the metrics page refreshes.
          "},{"location":"nebula-dashboard/1.what-is-dashboard/#scenarios","title":"Scenarios","text":"

          You can use Dashboard in one of the following scenarios:

          • You want to monitor key metrics conveniently and quickly, and present multiple key information of the business to ensure the business operates normally.
          • You want to monitor clusters from multiple dimensions (such as the time, aggregate rules, and metrics).
          • After a failure occurs, you need to review it and confirm its occurrence time and unexpected phenomena.
          "},{"location":"nebula-dashboard/1.what-is-dashboard/#precautions","title":"Precautions","text":"

          The monitoring data will be retained for 14 days by default, that is, only the monitoring data within the last 14 days can be queried.

          Note

          The monitoring service is supported by Prometheus. The update frequency and retention intervals can be modified. For details, see Prometheus.

          "},{"location":"nebula-dashboard/1.what-is-dashboard/#version_compatibility","title":"Version compatibility","text":"

          The version correspondence between NebulaGraph and Dashboard Community Edition is as follows.

          NebulaGraph version Dashboard version 3.6.0 3.4.0 3.5.x 3.4.0 3.4.0 ~ 3.4.1 3.4.0\u30013.2.0 3.3.0 3.2.0 2.5.0 ~ 3.2.0 3.1.0 2.5.x ~ 3.1.0 1.1.1 2.0.1~2.5.1 1.0.2 2.0.1~2.5.1 1.0.1"},{"location":"nebula-dashboard/1.what-is-dashboard/#release_note","title":"Release note","text":"

          Release

          "},{"location":"nebula-dashboard/2.deploy-dashboard/","title":"Deploy Dashboard Community Edition","text":"

          This topic will describe how to deploy NebulaGraph Dashboard in detail.

          To download and compile the latest source code of Dashboard, follow the instructions on the nebula dashboard GitHub page.

          "},{"location":"nebula-dashboard/2.deploy-dashboard/#prerequisites","title":"Prerequisites","text":"

          Before you deploy Dashboard, you must confirm that:

          • The NebulaGraph services are deployed and started. For more information, see NebulaGraph Database Manual.
          • Before the installation starts, the following ports are not occupied.

            • 9200
            • 9100
            • 9090
            • 8090
            • 7003
          • The node-exporter is installed on the machines to be monitored. For details on installation, see Prometheus document.
          "},{"location":"nebula-dashboard/2.deploy-dashboard/#steps","title":"Steps","text":"
          1. Download the tar packagenebula-dashboard-3.4.0.x86_64.tar.gz as needed.

          2. Run tar -xvf nebula-dashboard-3.4.0.x86_64.tar.gz to decompress the installation package.

          3. Modify the config.yaml file in nebula-dashboard.

            The configuration file contains the configurations of four dependent services and configurations of clusters. The descriptions of the dependent services are as follows.

            Service Default port Description nebula-http-gateway 8090 Provides HTTP ports for cluster services to execute nGQL statements to interact with the NebulaGraph database. nebula-stats-exporter 9200 Collects the performance metrics in the cluster, including the IP addresses, versions, and monitoring metrics (such as the number of queries, the latency of queries, the latency of heartbeats, and so on). node-exporter 9100 Collects the source information of nodes in the cluster, including the CPU, memory, load, disk, and network. prometheus 9090 The time series database that stores monitoring data.

            The descriptions of the configuration file are as follows.

            port: 7003   # Web service port.\ngateway:\n  ip: hostIP   # The IP of the machine where the Dashboard is deployed.\n  port: 8090\n  https: false  # Whether to enable HTTPS.\n  runmode: dev  # Program running mode, including dev, test, and prod. It is used to distinguish between different running environments generally.\nstats-exporter:\n  ip: hostIP   # The IP of the machine where the Dashboard is deployed.\n  nebulaPort: 9200\n  https: false  # Whether to enable HTTPS.\nnode-exporter:\n  - ip: nebulaHostIP_1 # The IP of the machine where the NebulaGraph is deployed.\n    port: 9100\n    https: false # Whether to enable HTTPS.\n# - ip: nebulaHostIP_2\n#   port: 9100\n#   https: false\nprometheus:\n  ip: hostIP    # The IP of the machine where the Dashboard is deployed.\n  prometheusPort: 9090\n  https: false  # Whether to enable HTTPS.\n  scrape_interval: 5s  # The interval for collecting the monitoring data, which is 1 minute by default.\n  evaluation_interval: 5s  # The interval for running alert rules, which is 1 minute by default.\n# Cluster node info\nnebula-cluster:\n  name: 'default' # Cluster name\n  metad:\n    - name: metad0\n      endpointIP: nebulaMetadIP  # The IP of the machine where the Meta service is deployed.\n      port: 9559\n      endpointPort: 19559\n  # - name: metad1\n  #   endpointIP: nebulaMetadIP\n  #   port: 9559\n  #   endpointPort: 19559  \n  graphd:\n    - name: graphd0\n      endpointIP: nebulaGraphdIP  # The IP of the machine where the Graph service is deployed.\n      port: 9669\n      endpointPort: 19669\n  # - name: graphd1\n  #   endpointIP: nebulaGraphdIP\n  #   port: 9669\n  #   endpointPort: 19669  \n  storaged:\n    - name: storaged0\n      endpointIP: nebulaStoragedIP  # The IP of the machine where the Storage service is deployed.\n      port: 9779\n      endpointPort: 19779\n  # - name: storaged1\n  #   endpointIP: nebulaStoragedIP\n  #   port: 9779\n  #   endpointPort: 19779  \n
          4. Run ./dashboard.service start all to start the services.

          "},{"location":"nebula-dashboard/2.deploy-dashboard/#deploy_dashboard_with_docker_compose","title":"Deploy Dashboard with Docker Compose","text":"

          If you are deploying Dashboard using docker, you should also modify the configuration file config.yaml, and then run docker-compose up -d to start the container.

          Note

          If you change the port number in config.yaml, the port number in docker-compose.yaml needs to be consistent as well.

          Run docker-compose stop to stop the container.

          "},{"location":"nebula-dashboard/2.deploy-dashboard/#manage_services_in_dashboard","title":"Manage services in Dashboard","text":"

          You can use the dashboard.service script to start, restart, stop, and check the Dashboard services.

          sudo <dashboard_path>/dashboard.service\n[-v] [-h]\n<start|restart|stop|status>  <prometheus|webserver|exporter|gateway|all>\n
          Parameter Description dashboard_path Dashboard installation path. -v Display detailed debugging information. -h Display help information. start Start the target services. restart Restart the target services. stop Stop the target services. status Check the status of the target services. prometheus Set the prometheus service as the target service. webserver Set the webserver Service as the target service. exporter Set the exporter Service as the target service. gateway Set the gateway Service as the target service. all Set all the Dashboard services as the target services.

          Note

          To view the Dashboard version, run the command ./dashboard.service -version.

          "},{"location":"nebula-dashboard/2.deploy-dashboard/#next_to_do","title":"Next to do","text":"

          Connect to Dashboard

          "},{"location":"nebula-dashboard/3.connect-dashboard/","title":"Connect Dashboard","text":"

          After Dashboard is deployed, you can log in and use Dashboard on the browser.

          "},{"location":"nebula-dashboard/3.connect-dashboard/#prerequisites","title":"Prerequisites","text":"
          • The Dashboard services are started. For more information, see Deploy Dashboard.
          • We recommend you to use the Chrome browser of the version above 89. Otherwise, there may be compatibility issues.
          "},{"location":"nebula-dashboard/3.connect-dashboard/#procedures","title":"Procedures","text":"
          1. Confirm the IP address of the machine where the Dashboard service is installed. Enter <IP>:7003 in the browser to open the login page.

          2. Enter the username and the passwords of the NebulaGraph database.

            • If authentication is enabled, you can log in with the created accounts.
            • If authentication is not enabled, you can only log in using root as the username and random characters as the password.

            To enable authentication, see Authentication.

          3. Select the NebulaGraph version to be used.

          4. Click Login.

          "},{"location":"nebula-dashboard/4.use-dashboard/","title":"Dashboard","text":"

          NebulaGraph Dashboard consists of three parts: Machine, Service, and Management. This topic will describe them in detail.

          "},{"location":"nebula-dashboard/4.use-dashboard/#overview","title":"Overview","text":""},{"location":"nebula-dashboard/4.use-dashboard/#machine","title":"Machine","text":"

          Click Machine->Overview to enter the machine overview page.

          On this page, you can view the variation of CPU, Memory, Load, Disk, and Network In/Out quickly.

          • By default, you can view the monitoring data for a maximum of 14 days. You can also select a time range or quickly select the latest 1 hour, 6 hours, 12 hours, 1 day, 3 days, 7 days, or 14 days.
          • By default, you can view the monitoring data of all the instances in clusters. You can select the instances you want to view in the instance box.
          • By default, the monitoring information page will not be updated automatically. You can set the update frequency of the monitoring information page globally or click the button to update the page manually.
          • To set a base line, click the button.
          • To view the detailed monitoring information, click the button. In this example, select Load for details. The figure is as follows.

            • You can set the monitoring time range, instance, update frequency and base line.
            • You can search for or select the target metric. For details about monitoring metrics, see Metrics.
            • You can temporarily hide nodes that you do not need to view.
            • You can click the button to view the detailed monitoring information.
          "},{"location":"nebula-dashboard/4.use-dashboard/#service","title":"Service","text":"

          Click Service->Overview to enter the service overview page.

          On this page, you can view the information of Graph, Meta, and Storage services quickly. In the upper right corner, the number of normal services and abnormal services will be displayed.

          Note

          In the Service page, only two monitoring metrics can be set for each service, which can be adjusted by clicking the Set up button.

          • By default, you can view the monitoring data for a maximum of 14 days. You can also select a time range or quickly select the latest 1 hour, 6 hours, 12 hours, 1 day, 3 days, 7 days, or 14 days.
          • By default, you can view the monitoring data of all the instances in clusters. You can select the instances you want to view in the instance box.
          • By default, the monitoring information page will not be updated automatically. You can set the update frequency of the monitoring information page globally or click the button to update the page manually.
          • You can view the status of all the services in a cluster.
          • To view the detailed monitoring information, click the button. In this example, select Graph for details. The figure is as follows.

            • You can set the monitoring time range, instance, update frequency, period, aggregation and base line.
            • You can search for or select the target metric. For details of monitoring metrics, see Monitor parameter.
            • You can temporarily hide nodes that you do not need to view.
            • You can click the button to view the detailed monitoring information.
            • The Graph service supports a set of space-level metrics. For more information, see the following section Graph space.
          "},{"location":"nebula-dashboard/4.use-dashboard/#graph_space","title":"Graph space","text":"

          Note

          Before using graph space metrics, you need to set enable_space_level_metrics to true in the Graph service. For details, see [Graph Service configuration](../5.configurations-and-logs/1.configurations/3.graph-config.md.

          Space-level metric incompatibility

          If a graph space name contains special characters, the corresponding metric data of that graph space may not be displayed.

          The service monitoring page can also monitor graph space level metrics. Only when the behavior of a graph space metric is triggered, you can specify the graph space to view information about the corresponding graph space metric.

          Space graph metrics record the information of different graph spaces separately. Currently, only the Graph service supports a set of space-level metrics.

          For information about the space graph metrics, see Graph space.

          "},{"location":"nebula-dashboard/4.use-dashboard/#management","title":"Management","text":""},{"location":"nebula-dashboard/4.use-dashboard/#overview_info","title":"Overview info","text":"

          On the Overview Info page, you can see the information of the NebulaGraph cluster, including Storage leader distribution, Storage service details, versions and hosts information of each NebulaGraph service, and partition distribution and details.

          "},{"location":"nebula-dashboard/4.use-dashboard/#storage_leader_distribution","title":"Storage Leader Distribution","text":"

          In this section, the number of Leaders and the Leader distribution will be shown.

          • Click the Balance Leader button in the upper right corner to distribute Leaders evenly and quickly in the NebulaGraph cluster. For details about the Leader, see Storage Service.
          • Click Detail in the upper right corner to view the details of the Leader distribution.
          "},{"location":"nebula-dashboard/4.use-dashboard/#version","title":"Version","text":"

          In this section, the version and host information of each NebulaGraph service will be shown. Click Detail in the upper right corner to view the details of the version and host information.

          "},{"location":"nebula-dashboard/4.use-dashboard/#service_information","title":"Service information","text":"

          In this section, the information on Storage services will be shown. The parameter description is as follows:

          Parameter Description Host The IP address of the host. Port The port of the host. Status The host status. Git Info Sha The commit ID of the current version. Leader Count The number of Leaders. Partition Distribution The distribution of partitions. Leader Distribution The distribution of Leaders.

          Click Detail in the upper right corner to view the details of the Storage service information.

          "},{"location":"nebula-dashboard/4.use-dashboard/#partition_distribution","title":"Partition Distribution","text":"

          Select the specified graph space in the upper left corner, you can view the distribution of partitions in the specified graph space. You can see the IP addresses and ports of all Storage services in the cluster, and the number of partitions in each Storage service.

          Click Detail in the upper right corner to view more details.

          "},{"location":"nebula-dashboard/4.use-dashboard/#partition_information","title":"Partition information","text":"

          In this section, the information on partitions will be shown. Before viewing the partition information, you need to select a graph space in the upper left corner. The parameter description is as follows:

          Parameter Description Partition ID The ID of the partition. Leader The IP address and port of the leader. Peers The IP addresses and ports of all the replicas. Losts The IP addresses and ports of faulty replicas.

          Click Detail in the upper right corner to view details. You can also enter the partition ID into the input box in the upper right corner of the details page to filter the shown data.

          "},{"location":"nebula-dashboard/4.use-dashboard/#config","title":"Config","text":"

          It shows the configuration of the NebulaGraph service. NebulaGraph Dashboard Community Edition does not support online modification of configurations for now.

          "},{"location":"nebula-dashboard/4.use-dashboard/#others","title":"Others","text":"

          In the lower left corner of the page, you can:

          • Sign out
          • Switch between Chinese and English
          • View the current Dashboard release
          • View the user manual and forum
          • Fold the sidebar
          "},{"location":"nebula-dashboard/6.monitor-parameter/","title":"Metrics","text":"

          This topic will describe the monitoring metrics in NebulaGraph Dashboard.

          "},{"location":"nebula-dashboard/6.monitor-parameter/#machine","title":"Machine","text":"

          Note

          • All the machine metrics listed below are for the Linux operating system.
          • The default unit in Disk and Network is byte. The unit will change with the data magnitude as the page displays. For example, when the flow is less than 1 KB/s, the unit will be Bytes/s.
          • For versions of Dashboard Community Edition greater than v1.0.2, the memory occupied by Buff and Cache will not be counted in the memory usage.
          "},{"location":"nebula-dashboard/6.monitor-parameter/#cpu","title":"CPU","text":"Parameter Description cpu_utilization The percentage of used CPU. cpu_idle The percentage of idled CPU. cpu_wait The percentage of CPU waiting for IO operations. cpu_user The percentage of CPU used by users. cpu_system The percentage of CPU used by the system."},{"location":"nebula-dashboard/6.monitor-parameter/#memory","title":"Memory","text":"Parameter Description memory_utilization The percentage of used memory. memory_used The memory space used (not including caches). memory_free The memory space available."},{"location":"nebula-dashboard/6.monitor-parameter/#load","title":"Load","text":"Parameter Description load_1m The average load of the system in the last 1 minute. load_5m The average load of the system in the last 5 minutes. load_15m The average load of the system in the last 15 minutes."},{"location":"nebula-dashboard/6.monitor-parameter/#disk","title":"Disk","text":"Parameter Description disk_used_percentage The disk utilization percentage. disk_used The disk space used. disk_free The disk space available. disk_readbytes The number of bytes that the system reads in the disk per second. disk_writebytes The number of bytes that the system writes in the disk per second. disk_readiops The number of read queries that the disk receives per second. disk_writeiops The number of write queries that the disk receives per second. inode_utilization The percentage of used inode."},{"location":"nebula-dashboard/6.monitor-parameter/#network","title":"Network","text":"Parameter Description network_in_rate The number of bytes that the network card receives per second. network_out_rate The number of bytes that the network card sends out per second. network_in_errs The number of wrong bytes that the network card receives per second. network_out_errs The number of wrong bytes that the network card sends out per second. network_in_packets The number of data packages that the network card receives per second. network_out_packets The number of data packages that the network card sends out per second."},{"location":"nebula-dashboard/6.monitor-parameter/#service","title":"Service","text":""},{"location":"nebula-dashboard/6.monitor-parameter/#period","title":"Period","text":"

          The period is the time range of counting metrics. It currently supports 5 seconds, 60 seconds, 600 seconds, and 3600 seconds, which respectively represent the last 5 seconds, the last 1 minute, the last 10 minutes, and the last 1 hour.

          "},{"location":"nebula-dashboard/6.monitor-parameter/#metric_methods","title":"Metric methods","text":"Parameter Description rate The average rate of operations per second in a period. sum The sum of operations in the period. avg The average latency in the cycle. P75 The 75th percentile latency. P95 The 95th percentile latency. P99 The 99th percentile latency. P999 The 99.9th percentile latency.

          Note

          Dashboard collects the following metrics from the NebulaGraph core, but only shows the metrics that are important to it.

          "},{"location":"nebula-dashboard/6.monitor-parameter/#graph","title":"Graph","text":"Parameter Description num_active_queries The number of changes in the number of active queries. Formula: The number of started queries minus the number of finished queries within a specified time. num_active_sessions The number of changes in the number of active sessions. Formula: The number of logged in sessions minus the number of logged out sessions within a specified time.For example, when querying num_active_sessions.sum.5, if there were 10 sessions logged in and 30 sessions logged out in the last 5 seconds, the value of this metric is -20 (10-30). num_aggregate_executors The number of executions for the Aggregation operator. num_auth_failed_sessions_bad_username_password The number of sessions where authentication failed due to incorrect username and password. num_auth_failed_sessions_out_of_max_allowed The number of sessions that failed to authenticate logins because the value of the parameter FLAG_OUT_OF_MAX_ALLOWED_CONNECTIONS was exceeded. num_auth_failed_sessions The number of sessions in which login authentication failed. num_indexscan_executors The number of executions for index scan operators. num_killed_queries The number of killed queries. num_opened_sessions The number of sessions connected to the server. num_queries The number of queries. num_query_errors_leader_changes The number of the raft leader changes due to query errors. num_query_errors The number of query errors. num_reclaimed_expired_sessions The number of expired sessions actively reclaimed by the server. num_rpc_sent_to_metad_failed The number of failed RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_metad The number of RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_storaged_failed The number of failed RPC requests that the Graphd service sent to the Storaged service. num_rpc_sent_to_storaged The number of RPC requests that the Graphd service sent to the Storaged service. num_sentences The number of statements received by the Graphd service. num_slow_queries The number of slow queries. num_sort_executors The number of executions for the Sort operator. optimizer_latency_us The latency of executing optimizer statements. query_latency_us The latency of queries. slow_query_latency_us The latency of slow queries. num_queries_hit_memory_watermark The number of queries reached the memory watermark. resp_part_completeness The completeness of the partial success. You need to set accept_partial_success to true in the graph configuration first."},{"location":"nebula-dashboard/6.monitor-parameter/#meta","title":"Meta","text":"Parameter Description commit_log_latency_us The latency of committing logs in Raft. commit_snapshot_latency_us The latency of committing snapshots in Raft. heartbeat_latency_us The latency of heartbeats. num_heartbeats The number of heartbeats. num_raft_votes The number of votes in Raft. transfer_leader_latency_us The latency of transferring the raft leader. num_agent_heartbeats The number of heartbeats for the AgentHBProcessor. agent_heartbeat_latency_us The latency of the AgentHBProcessor. replicate_log_latency_us The latency of replicating the log record to most nodes by Raft. num_send_snapshot The number of times that Raft sends snapshots to other nodes. append_log_latency_us The latency of replicating the log record to a single node by Raft. append_wal_latency_us The Raft write latency for a single WAL. num_grant_votes The number of times that Raft votes for other nodes. num_start_elect The number of times that Raft starts an election."},{"location":"nebula-dashboard/6.monitor-parameter/#storage","title":"Storage","text":"Parameter Description add_edges_latency_us The latency of adding edges. add_vertices_latency_us The latency of adding vertices. commit_log_latency_us The latency of committing logs in Raft. commit_snapshot_latency_us The latency of committing snapshots in Raft. delete_edges_latency_us The latency of deleting edges. delete_vertices_latency_us The latency of deleting vertices. get_neighbors_latency_us The latency of querying neighbor vertices. get_dst_by_src_latency_us The latency of querying the destination vertex by the source vertex. num_get_prop The number of executions for the GetPropProcessor. num_get_neighbors_errors The number of execution errors for the GetNeighborsProcessor. num_get_dst_by_src_errors The number of execution errors for the GetDstBySrcProcessor. get_prop_latency_us The latency of executions for the GetPropProcessor. num_edges_deleted The number of deleted edges. num_edges_inserted The number of inserted edges. num_raft_votes The number of votes in Raft. num_rpc_sent_to_metad_failed The number of failed RPC requests that the Storage service sent to the Meta service. num_rpc_sent_to_metad The number of RPC requests that the Storaged service sent to the Metad service. num_tags_deleted The number of deleted tags. num_vertices_deleted The number of deleted vertices. num_vertices_inserted The number of inserted vertices. transfer_leader_latency_us The latency of transferring the raft leader. lookup_latency_us The latency of executions for the LookupProcessor. num_lookup_errors The number of execution errors for the LookupProcessor. num_scan_vertex The number of executions for the ScanVertexProcessor. num_scan_vertex_errors The number of execution errors for the ScanVertexProcessor. update_edge_latency_us The latency of executions for the UpdateEdgeProcessor. num_update_vertex The number of executions for the UpdateVertexProcessor. num_update_vertex_errors The number of execution errors for the UpdateVertexProcessor. kv_get_latency_us The latency of executions for the Getprocessor. kv_put_latency_us The latency of executions for the PutProcessor. kv_remove_latency_us The latency of executions for the RemoveProcessor. num_kv_get_errors The number of execution errors for the GetProcessor. num_kv_get The number of executions for the GetProcessor. num_kv_put_errors The number of execution errors for the PutProcessor. num_kv_put The number of executions for the PutProcessor. num_kv_remove_errors The number of execution errors for the RemoveProcessor. num_kv_remove The number of executions for the RemoveProcessor. forward_tranx_latency_us The latency of transmission. scan_edge_latency_us The latency of executions for the ScanEdgeProcessor. num_scan_edge_errors The number of execution errors for the ScanEdgeProcessor. num_scan_edge The number of executions for the ScanEdgeProcessor. scan_vertex_latency_us The latency of executions for the ScanVertexProcessor. num_add_edges The number of times that edges are added. num_add_edges_errors The number of errors when adding edges. num_add_vertices The number of times that vertices are added. num_start_elect The number of times that Raft starts an election. num_add_vertices_errors The number of errors when adding vertices. num_delete_vertices_errors The number of errors when deleting vertices. append_log_latency_us The latency of replicating the log record to a single node by Raft. num_grant_votes The number of times that Raft votes for other nodes. replicate_log_latency_us The latency of replicating the log record to most nodes by Raft. num_delete_tags The number of times that tags are deleted. num_delete_tags_errors The number of errors when deleting tags. num_delete_edges The number of edge deletions. num_delete_edges_errors The number of errors when deleting edges num_send_snapshot The number of times that snapshots are sent. update_vertex_latency_us The latency of executions for the UpdateVertexProcessor. append_wal_latency_us The Raft write latency for a single WAL. num_update_edge The number of executions for the UpdateEdgeProcessor. delete_tags_latency_us The latency of deleting tags. num_update_edge_errors The number of execution errors for the UpdateEdgeProcessor. num_get_neighbors The number of executions for the GetNeighborsProcessor. num_get_dst_by_src The number of executions for the GetDstBySrcProcessor. num_get_prop_errors The number of execution errors for the GetPropProcessor. num_delete_vertices The number of times that vertices are deleted. num_lookup The number of executions for the LookupProcessor. num_sync_data The number of times the Storage service synchronizes data from the Drainer. num_sync_data_errors The number of errors that occur when the Storage service synchronizes data from the Drainer. sync_data_latency_us The latency of the Storage service synchronizing data from the Drainer."},{"location":"nebula-dashboard/6.monitor-parameter/#graph_space","title":"Graph space","text":"

          Note

          Space-level metrics are created dynamically, so that only when the behavior is triggered in the graph space, the corresponding metric is created and can be queried by the user.

          Parameter Description num_active_queries The number of queries currently being executed. num_queries The number of queries. num_sentences The number of statements received by the Graphd service. optimizer_latency_us The latency of executing optimizer statements. query_latency_us The latency of queries. num_slow_queries The number of slow queries. num_query_errors The number of query errors. num_query_errors_leader_changes The number of raft leader changes due to query errors. num_killed_queries The number of killed queries. num_aggregate_executors The number of executions for the Aggregation operator. num_sort_executors The number of executions for the Sort operator. num_indexscan_executors The number of executions for index scan operators. num_auth_failed_sessions_bad_username_password The number of sessions where authentication failed due to incorrect username and password. num_auth_failed_sessions The number of sessions in which login authentication failed. num_opened_sessions The number of sessions connected to the server. num_queries_hit_memory_watermark The number of queries reached the memory watermark. num_reclaimed_expired_sessions The number of expired sessions actively reclaimed by the server. num_rpc_sent_to_metad_failed The number of failed RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_metad The number of RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_storaged_failed The number of failed RPC requests that the Graphd service sent to the Storaged service. num_rpc_sent_to_storaged The number of RPC requests that the Graphd service sent to the Storaged service. slow_query_latency_us The latency of slow queries."},{"location":"nebula-studio/system-settings/","title":"Global settings","text":"

          This topic introduces the global settings of NebulaGraph Studio, including language switching and beta functions.

          • Language: Switch between Chinese and English.
          • Beta functions: Switch on/off beta features, which include view schema, text to query and AI import.

            The text to query and AI import features need to be configured with AI-related configurations. See below for detailed configurations.

          "},{"location":"nebula-studio/system-settings/#text_to_query_and_ai_import","title":"Text to query and AI import","text":"

          The text to query and AI import are artificial intelligence features developed based on the large language model (LLM) and require the following parameters to be configured.

          Parameter Description API type The API type for AI. Valid values are OpenAI and Aliyun. URL The API URL. Fill in the correct URL format according to the corresponding API type. For example, https://{your-resource-name}.openai.azure.com/openai/deployments/{deployment-id}/chat/completions?api-version={api-version}\u3002 Key The key used to validate the API. The key is required when using an online large language model, and is optional depending on the actual settings when using an offline large language model. Model The version of the large language model. The model is required when using an online large language model, and is optional depending on the actual settings when using an offline large language model. Max text length The maximum length for receiving or generating a single piece of text. Unit: byte."},{"location":"nebula-studio/about-studio/st-ug-limitations/","title":"Limitations","text":"

          This topic introduces the limitations of Studio.

          "},{"location":"nebula-studio/about-studio/st-ug-limitations/#architecture","title":"Architecture","text":"

          For now, Studio v3.x supports x86_64 architecture only.

          "},{"location":"nebula-studio/about-studio/st-ug-limitations/#upload_data","title":"Upload data","text":"

          Only CSV files without headers can be uploaded, but no limitations are applied to the size and store period for a single file. The maximum data volume depends on the storage capacity of your machine.

          "},{"location":"nebula-studio/about-studio/st-ug-limitations/#data_backup","title":"Data backup","text":"

          For now, only supports exporting query results in CSV format on Console, and other data backup methods are not supported.

          "},{"location":"nebula-studio/about-studio/st-ug-limitations/#ngql_statements","title":"nGQL statements","text":"

          On the Console page of Docker-based and RPM-based Studio v3.x, all the nGQL syntaxes except these are supported:

          • USE <space_name>: You cannot run such a statement on the Console page to choose a graph space. As an alternative, you can click a graph space name in the drop-down list of Current Graph Space.
          • You cannot use line breaks (\\). As an alternative, you can use the Enter key to split a line.
          "},{"location":"nebula-studio/about-studio/st-ug-limitations/#browser","title":"Browser","text":"

          We recommend that you use the latest version of Chrome to get access to Studio. Otherwise, some features may not work properly.

          "},{"location":"nebula-studio/about-studio/st-ug-what-is-graph-studio/","title":"What is NebulaGraph Studio","text":"

          NebulaGraph Studio (Studio in short) is a browser-based visualization tool to manage NebulaGraph. It provides you with a graphical user interface to manipulate graph schemas, import data, and run nGQL statements to retrieve data. With Studio, you can quickly become a graph exploration expert from scratch. You can view the latest source code in the NebulaGraph GitHub repository, see nebula-studio for details.

          Note

          You can also try some functions online in Studio.

          "},{"location":"nebula-studio/about-studio/st-ug-what-is-graph-studio/#deployment","title":"Deployment","text":"

          In addition to deploying Studio with RPM-based, DEB-based, or Tar-based packages, or with Docker, you can also deploy Studio with Helm in the Kubernetes cluster. For more information, see Deploy Studio.

          The functions of the above four deployment methods are the same and may be restricted when using Studio. For more information, see Limitations.

          "},{"location":"nebula-studio/about-studio/st-ug-what-is-graph-studio/#features","title":"Features","text":"

          Studio can easily manage NebulaGraph data, with the following functions:

          • On the Schema page, you can use the graphical user interface to create the space, Tag, Edge Type, Index, and view the statistics on the graph. It helps you quickly get started with NebulaGraph.
          • On the Import page, you can operate batch import of vertex and edge data with clicks, and view a real-time import log.
          • On the Console page, you can run nGQL statements and read the results in a human-friendly way.
          "},{"location":"nebula-studio/about-studio/st-ug-what-is-graph-studio/#scenarios","title":"Scenarios","text":"

          You can use Studio in one of these scenarios:

          • You have a dataset, and you want to explore and analyze data in a visualized way. You can use Docker Compose to deploy NebulaGraph and then use Studio to explore or analyze data in a visualized way.
          • You are a beginner of nGQL (NebulaGraph Query Language) and you prefer to use a GUI rather than a command-line interface (CLI) to learn the language.
          "},{"location":"nebula-studio/about-studio/st-ug-what-is-graph-studio/#authentication","title":"Authentication","text":"

          Authentication is not enabled in NebulaGraph by default. Users can log into Studio with the root account and any password.

          When NebulaGraph enables authentication, users can only sign into Studio with the specified account. For more information, see Authentication.

          "},{"location":"nebula-studio/about-studio/st-ug-what-is-graph-studio/#version_compatibility","title":"Version compatibility","text":"

          Note

          The Studio version is released independently of the NebulaGraph core. The correspondence between the versions of Studio and the NebulaGraph core, as shown in the table below.

          NebulaGraph version Studio version 3.6.0 3.8.0, 3.7.0 3.5.0 3.7.0 3.4.0 ~ 3.4.1 3.7.0\u30013.6.0\u30013.5.1\u30013.5.0 3.3.0 3.5.1\u30013.5.0 3.0.0 \uff5e 3.2.0 3.4.1\u30013.4.0 3.1.0 3.3.2 3.0.0 3.2.x 2.6.x 3.1.x 2.6.x 3.1.x 2.0 & 2.0.1 2.x 1.x 1.x"},{"location":"nebula-studio/about-studio/st-ug-what-is-graph-studio/#check_updates","title":"Check updates","text":"

          Studio is in development. Users can view the latest releases features through Changelog.

          To view the Changelog, on the upper-right corner of the page, click the version and then New version.

          "},{"location":"nebula-studio/deploy-connect/st-ug-connect/","title":"Connect to NebulaGraph","text":"

          After successfully launching Studio, you need to configure to connect to NebulaGraph. This topic describes how Studio connects to the NebulaGraph database.

          "},{"location":"nebula-studio/deploy-connect/st-ug-connect/#prerequisites","title":"Prerequisites","text":"

          Before connecting to the NebulaGraph database, you need to confirm the following information:

          • The NebulaGraph services and Studio are started. For more information, see Deploy Studio.
          • You have the local IP address and the port used by the Graph service of NebulaGraph. The default port is 9669.
          • You have a NebulaGraph account and its password.
          "},{"location":"nebula-studio/deploy-connect/st-ug-connect/#procedure","title":"Procedure","text":"

          To connect Studio to NebulaGraph, follow these steps:

          1. Type http://<ip_address>:7001 in the address bar of your browser.

            The following login page shows that Studio starts successfully.

          2. On the Config Server page of Studio, configure these fields:

            • Graphd IP address: Enter the IP address of the Graph service of NebulaGraph. For example, 192.168.10.100.

              Note

              • When NebulaGraph and Studio are deployed on the same machine, you must enter the IP address of the machine, instead of 127.0.0.1 or localhost.
              • When connecting to a NebulaGraph database on a new browser tab, a new session will overwrite the sessions of the old tab. If you need to log in to multiple NebulaGraph databases simultaneously, you can use a different browser or non-trace mode.
            • Port: The port of the Graph service. The default port is 9669.
            • Username and Password: Fill in the log in account according to the authentication settings of NebulaGraph.

              • If authentication is not enabled, you can use root and any password as the username and its password.
              • If authentication is enabled and no account information has been created, you can only log in as GOD role and use root and nebula as the username and its password.
              • If authentication is enabled and different users are created and assigned roles, users in different roles log in with their accounts and passwords.
          3. After the configuration, click the Connect button.

            Note

            One session continues for up to 30 minutes. If you do not operate Studio within 30 minutes, the active session will time out and you must connect to NebulaGraph again.

          A welcome page is displayed on the first login, showing the relevant functions according to the usage process, and the test datasets can be automatically downloaded and imported.

          To visit the welcome page, click .

          "},{"location":"nebula-studio/deploy-connect/st-ug-connect/#next_to_do","title":"Next to do","text":"

          When Studio is successfully connected to NebulaGraph, you can do these operations:

          • Create a schema on the Console page or on the Schema page.
          • Batch import data on the Import page.
          • Execute nGQL statements on the Console page.
          • Design the schema visually on the Schema drafting page.

          Note

          The permissions of an account determine the operations that can be performed. For details, see Roles and privileges.

          "},{"location":"nebula-studio/deploy-connect/st-ug-connect/#log_out","title":"Log out","text":"

          If you want to reconnect to NebulaGraph, you can log out and reconfigure the database.

          Click the user profile picture in the upper right corner, and choose Log out.

          "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/","title":"Deploy Studio","text":"

          This topic describes how to deploy Studio locally by RPM, DEB, tar package and Docker.

          "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#rpm-based_studio","title":"RPM-based Studio","text":""},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#prerequisites","title":"Prerequisites","text":"

          Before you deploy RPM-based Studio, you must confirm that:

          • The NebulaGraph services are deployed and started. For more information, see NebulaGraph Database Manual.
          • The Linux distribution is CentOS, install lsof.
          • Before the installation starts, the following ports are not occupied.

            Port Description 7001 Web service provided by Studio.
          "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#install","title":"Install","text":"
          1. Select and download the RPM package according to your needs. It is recommended to select the latest version. Common links are as follows:

            Installation package Checksum NebulaGraph version nebula-graph-studio-3.9.0.x86_64.rpm nebula-graph-studio-3.9.0.x86_64.rpm.sha256 master
          2. Use sudo rpm -i <rpm_name> to install RPM package.

            For example, install Studio 3.9.0, use the following command. The default installation path is /usr/local/nebula-graph-studio.

            $ sudo rpm -i nebula-graph-studio-3.9.0.x86_64.rpm\n

            You can also install it to the specified path using the following command:

            $ sudo rpm -i nebula-graph-studio-3.9.0.x86_64.rpm --prefix=<path> \n

            When the screen returns the following message, it means that the PRM-based Studio has been successfully started.

            Start installing NebulaGraph Studio now...\nNebulaGraph Studio has been installed.\nNebulaGraph Studio started automatically.\n
          3. When Studio is started, use http://<ip address>:7001 to get access to Studio.

            If you can see the Config Server page on the browser, Studio is started successfully.

          "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#uninstall","title":"Uninstall","text":"

          You can uninstall Studio using the following command:

          $ sudo rpm -e nebula-graph-studio-3.9.0.x86_64\n

          If these lines are returned, PRM-based Studio has been uninstalled.

          NebulaGraph Studio removed, bye~\n
          "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#exception_handling","title":"Exception handling","text":"

          If the automatic start fails during the installation process or you want to manually start or stop the service, use the following command:

          • Start the service manually
            $ bash /usr/local/nebula-graph-studio/scripts/rpm/start.sh\n
          • Stop the service manually
            $ bash /usr/local/nebula-graph-studio/scripts/rpm/stop.sh\n

          If you encounter an error bind EADDRINUSE 0.0.0.0:7001 when starting the service, you can use the following command to check port 7001 usage.

          $ lsof -i:7001\n

          If the port is occupied and the process on that port cannot be terminated, you can modify the startup port within the studio configuration and restart the service.

          //Modify the studio service configuration. The default path to the configuration file is `/usr/local/nebula-graph-studio`.\n$ vi etc/studio-api.yam\n\n//Modify this port number and change it to any \nPort: 7001\n\n//Restart service\n$ systemctl restart nebula-graph-studio.service\n
          "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#deb-based_studio","title":"DEB-based Studio","text":""},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#prerequisites_1","title":"Prerequisites","text":"

          Before you deploy DEB-based Studio, you must do a check of these:

          • The NebulaGraph services are deployed and started. For more information, see NebulaGraph Database Manual.
          • The Linux distribution is Ubuntu.
          • Before the installation starts, the following ports are not occupied.

            Port Description 7001 Web service provided by Studio
          • The path /usr/lib/systemd/system exists in the system. If not, create it manually.
          "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#install_1","title":"Install","text":"
          1. Select and download the DEB package according to your needs. It is recommended to select the latest version. Common links are as follows:

            Installation package Checksum NebulaGraph version nebula-graph-studio-3.9.0.x86_64.deb nebula-graph-studio-3.9.0.x86_64.deb.sha256 master
          2. Use sudo dpkg -i <deb_name> to install DEB package.

            For example, install Studio 3.9.0, use the following command:

            $ sudo dpkg -i nebula-graph-studio-3.9.0.x86_64.deb\n
          3. When Studio is started, use http://<ip address>:7001 to get access to Studio.

            If you can see the Config Server page on the browser, Studio is started successfully.

          "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#uninstall_1","title":"Uninstall","text":"

          You can uninstall Studio using the following command:

          $ sudo dpkg -r nebula-graph-studio\n
          "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#tar-based_studio","title":"tar-based Studio","text":""},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#prerequisites_2","title":"Prerequisites","text":"

          Before you deploy tar-based Studio, you must do a check of these:

          • The NebulaGraph services are deployed and started. For more information, see NebulaGraph Database Manual.
          • Before the installation starts, the following ports are not occupied.

            Port Description 7001 Web service provided by Studio
          "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#install_and_deploy","title":"Install and deploy","text":"
          1. Select and download the tar package according to your needs. It is recommended to select the latest version. Common links are as follows:

            Installation package Studio version nebula-graph-studio-3.9.0.x86_64.tar.gz 3.9.0
          2. Use tar -xvf to decompress the tar package.

            $ tar -xvf nebula-graph-studio-3.9.0.x86_64.tar.gz\n
          3. Deploy and start nebula-graph-studio.

            $ cd nebula-graph-studio\n$ ./server\n
          4. When Studio is started, use http://<ip address>:7001 to get access to Studio.

            If you can see the Config Server page on the browser, Studio is started successfully.

          "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#stop_service","title":"Stop Service","text":"

          You can use kill pid to stop the service:

          $ kill $(lsof -t -i :7001) #stop nebula-graph-studio\n

          "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#docker-based_studio","title":"Docker-based Studio","text":""},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#prerequisites_3","title":"Prerequisites","text":"

          Before you deploy Docker-based Studio, you must do a check of these:

          • The NebulaGraph services are deployed and started. For more information, see NebulaGraph Database Manual.
          • On the machine where Studio will run, Docker Compose is installed and started. For more information, see Docker Compose Documentation.
          • Before the installation starts, the following ports are not occupied.

            Port Description 7001 Web service provided by Studio
          "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#procedure","title":"Procedure","text":"

          To deploy and start Docker-based Studio, run the following commands. Here we use NebulaGraph vmaster for demonstration:

          1. Download the configuration files for the deployment.

            Installation package NebulaGraph version nebula-graph-studio-3.9.0.tar.gz master
          2. Create the nebula-graph-studio-3.9.0 directory and decompress the installation package to the directory.

            $ mkdir nebula-graph-studio-3.9.0 -zxvf nebula-graph-studio-3.9.0.gz -C nebula-graph-studio-3.9.0\n
          3. Change to the nebula-graph-studio-3.9.0 directory.

            $ cd nebula-graph-studio-3.9.0\n

          4. Pull the Docker image of Studio.

            $ docker-compose pull\n
          5. Build and start Docker-based Studio. In this command, -d is to run the containers in the background.

            $ docker-compose up -d\n

            If these lines are returned, Docker-based Studio v3.x is deployed and started.

            Creating docker_web_1      ... done\n
          6. When Docker-based Studio is started, use http://<ip address>:7001 to get access to Studio.

            Note

            Run ifconfig or ipconfig to get the IP address of the machine where Docker-based Studio is running. On the machine running Docker-based Studio, you can use http://localhost:7001 to get access to Studio.

            If you can see the Config Server page on the browser, Docker-based Studio is started successfully.

          "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#helm-based_studio","title":"Helm-based Studio","text":"

          This section describes how to deploy Studio with Helm.

          "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#prerequisites_4","title":"Prerequisites","text":"

          Before installing Studio, you need to install the following software and ensure the correct version of the software:

          Software Requirement Kubernetes >= 1.14 Helm >= 3.2.0"},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#install_2","title":"Install","text":"
          1. Use Git to clone the source code of Studio to the host.

            $ git clone https://github.com/vesoft-inc/nebula-studio.git\n
          2. Make the nebula-studio directory the current working directory.

            bash $ cd nebula-studio

          3. Assume using release name:my-studio, installed Studio in Helm Chart.

            $ helm upgrade --install my-studio --set service.type=NodePort --set service.port=30070 deployment/helm\n

            The configuration parameters of the Helm Chart are described below.

            Parameter Default value Description replicaCount 0 The number of replicas for Deployment. image.nebulaStudio.name vesoft/nebula-graph-studio The image name of nebula-graph-studio. image.nebulaStudio.version v3.9.0 The image version of nebula-graph-studio. service.type ClusterIP The service type, which should be one of NodePort, ClusterIP, and LoadBalancer. service.port 7001 The expose port for nebula-graph-studio's web. service.nodePort 32701 The proxy port for accessing nebula-studio outside kubernetes cluster. resources.nebulaStudio {} The resource limits/requests for nebula-studio. persistent.storageClassName \"\" The name of storageClass. The default value will be used if not specified. persistent.size 5Gi The persistent volume size.
          4. When Studio is started, use http://<node_address>:30070/ to get access to Studio.

            If you can see the Config Server page on the browser, Studio is started successfully.

          "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#uninstall_2","title":"Uninstall","text":"
           $ helm uninstall my-studio\n
          "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#next_to_do","title":"Next to do","text":"

          On the Config Server page, connect Docker-based Studio to NebulaGraph. For more information, see Connect to NebulaGraph.

          "},{"location":"nebula-studio/manage-schema/st-ug-crud-edge-type/","title":"Manage edge types","text":"

          After a graph space is created in NebulaGraph, you can create edge types. With Studio, you can choose to use the Console page or the Schema page to create, retrieve, update, or delete edge types. This topic introduces how to use the Schema page to operate edge types in a graph space only.

          "},{"location":"nebula-studio/manage-schema/st-ug-crud-edge-type/#prerequisites","title":"Prerequisites","text":"

          To operate an edge type on the Schema page of Studio, you must do a check of these:

          • Studio is connected to NebulaGraph.
          • A graph space is created.
          • Your account has the authority of GOD, ADMIN, or DBA.
          "},{"location":"nebula-studio/manage-schema/st-ug-crud-edge-type/#create_an_edge_type","title":"Create an edge type","text":"
          1. In the toolbar, click the Schema tab.

          2. In the Graph Space List page, find a graph space and then click its name or click Schema in the Operations column.

          3. In the Current Graph Space field, confirm the name of the graph space. If necessary, you can choose another name to change the graph space.

          4. Click the Edge Type tab and click the + Create button.

          5. On the Create Edge Type page, do these settings:

            • Name: Specify an appropriate name for the edge type. In this example, serve is used.
            • Comment (Optional): Enter the description for edge type.
            • Define Properties (Optional): If necessary, click + Add Property to do these settings:

              • Enter a property name.
              • Select a data type.
              • Select whether to allow null values..
              • (Optional) Enter the default value.
              • (Optional) Enter the description.
            • Set TTL (Time To Live) (Optional): If no index is set for the edge type, you can set the TTL configuration: In the upper left corner of the Set TTL panel, click the check box to expand the panel, and configure TTL_COL and TTL_ DURATION (in seconds). For more information about both parameters, see TTL configuration.
          6. When the preceding settings are completed, in the Equivalent to the following nGQL statement panel, you can see the nGQL statement equivalent to these settings.

          7. Confirm the settings and then click the + Create button.

          When the edge type is created successfully, the Define Properties panel shows all its properties on the list.

          "},{"location":"nebula-studio/manage-schema/st-ug-crud-edge-type/#edit_an_edge_type","title":"Edit an edge type","text":"
          1. In the toolbar, click the Schema tab.

          2. In the Graph Space List page, find a graph space and then click its name or click Schema in the Operations column.

          3. In the Current Graph Space field, confirm the name of the graph space. If necessary, you can choose another name to change the graph space.

          4. Click the Edge Type tab, find an edge type and then click the button in the Operations column.

          5. On the Edit page, do these operations:

            • To edit a comment: Click Edit on the right of Comment.
            • To edit a property: On the Define Properties panel, find a property, click Edit, and then change the data type or the default value.
            • To delete a property: On the Define Properties panel, find a property, click Delete.
            • To add more properties: On the Define Properties panel, click the Add Property button to add a new property.
            • To set the TTL configuration: In the upper left corner of the Set TTL panel, click the check box and then set TTL.
            • To delete the TTL configuration: When the Set TTL panel is expanded, in the upper left corner of the panel, click the check box to delete the configuration.
            • To edit the TTL configuration: On the Set TTL panel, click Edit and then change the configuration of TTL_COL and TTL_DURATION (in seconds).

              Note

              For information about the coexistence problem of TTL and index, see TTL.

          "},{"location":"nebula-studio/manage-schema/st-ug-crud-edge-type/#delete_an_edge_type","title":"Delete an Edge type","text":"

          Danger

          Confirm the impact before deleting the Edge type. The deleted data cannot be restored if it is not backup.

          1. In the toolbar, click the Schema tab.

          2. In the Graph Space List page, find a graph space and then click its name or click Schema in the Operations column.

          3. In the Current Graph Space field, confirm the name of the graph space. If necessary, you can choose another name to change the graph space.

          4. Click the Edge Type tab, find an edge type and then click the button in the Operations column.

          5. Click OK to confirm in the pop-up dialog box.

          "},{"location":"nebula-studio/manage-schema/st-ug-crud-edge-type/#next_to_do","title":"Next to do","text":"

          After the edge type is created, you can use the Console page to insert edge data one by one manually or use the Import page to bulk import edge data.

          "},{"location":"nebula-studio/manage-schema/st-ug-crud-index/","title":"Manage indexes","text":"

          You can create an index for a Tag and/or an Edge type. An index lets traversal start from vertices or edges with the same property and it can make a query more efficient. With Studio, you can use the Console page or the Schema page to create, retrieve, and delete indexes. This topic introduces how to use the Schema page to operate an index only.

          Note

          You can create an index when a Tag or an Edge Type is created. But an index can decrease the write speed during data import. We recommend that you import data firstly and then create and rebuild an index. For more information, see Index overview.

          "},{"location":"nebula-studio/manage-schema/st-ug-crud-index/#prerequisites","title":"Prerequisites","text":"

          To operate an index on the Schema page of Studio, you must do a check of these:

          • Studio is connected to NebulaGraph.
          • A graph Space, Tags, and Edge Types are created.
          • Your account has the authority of GOD, ADMIN, or DBA.
          "},{"location":"nebula-studio/manage-schema/st-ug-crud-index/#create_an_index","title":"Create an index","text":"
          1. In the toolbar, click the Schema tab.

          2. In the Graph Space List page, find a graph space and then click its name or click Schema in the Operations column.

          3. In the Current Graph Space field, confirm the name of the graph space. If necessary, you can choose another name to change the graph space.

          4. Click the Index tab and then click the + Create button.

          5. On the Create page, do these settings:

            • Index Type: Choose to create an index for a tag or for an edge type. In this example, Edge Type is chosen.
            • Associated tag name: Choose a tag name or an edge type name. In this example, follow is chosen.
            • Index Name: Specify a name for the new index. In this example, follow_index is used.
            • Comment (Optional): Enter the description for index.
            • Indexed Properties (Optional): Click Add property, and then, in the dialog box, choose a property. If necessary, repeat this step to choose more properties. You can drag the properties to sort them. In this example, degree is chosen.

              Note

              The order of the indexed properties has an effect on the result of the LOOKUP statement. For more information, see nGQL Manual.

          6. When the settings are done, the Equivalent to the following nGQL statement panel shows the statement equivalent to the settings.

          7. Confirm the settings and then click the + Create button. When an index is created, the index list shows the new index.

          "},{"location":"nebula-studio/manage-schema/st-ug-crud-index/#view_indexes","title":"View indexes","text":"
          1. In the toolbar, click the Schema tab.

          2. In the Graph Space List page, find a graph space and then click its name or click Schema in the Operations column.

          3. In the Current Graph Space field, confirm the name of the graph space. If necessary, you can choose another name to change the graph space.

          4. Click the Index tab, in the upper left corner, choose an index type, Tag or Edge Type.

          5. In the list, find an index and click its row. All its details are shown in the expanded row.

          "},{"location":"nebula-studio/manage-schema/st-ug-crud-index/#rebuild_indexes","title":"Rebuild indexes","text":"
          1. In the toolbar, click the Schema tab.

          2. In the Graph Space List page, find a graph space and then click its name or click Schema in the Operations column.

          3. In the Current Graph Space field, confirm the name of the graph space. If necessary, you can choose another name to change the graph space.

          4. Click the Index tab, in the upper left corner, choose an index type, Tag or Edge Type.

          5. Click the Index tab, find an index and then click the button Rebuild in the Operations column.

          Note

          For more Information, see REBUILD INDEX.

          "},{"location":"nebula-studio/manage-schema/st-ug-crud-index/#delete_an_index","title":"Delete an index","text":"

          To delete an index on Schema, follow these steps:

          1. In the toolbar, click the Schema tab.

          2. In the Graph Space List page, find a graph space and then click its name or click Schema in the Operations column.

          3. In the Current Graph Space field, confirm the name of the graph space. If necessary, you can choose another name to change the graph space.

          4. Click the Index tab, find an index and then click the button in the Operations column.

          5. Click OK to confirm in the pop-up dialog box.

          "},{"location":"nebula-studio/manage-schema/st-ug-crud-space/","title":"Manage graph spaces","text":"

          When Studio is connected to NebulaGraph, you can create or delete a graph space. You can use the Console page or the Schema page to do these operations. This article only introduces how to use the Schema page to operate graph spaces in NebulaGraph.

          "},{"location":"nebula-studio/manage-schema/st-ug-crud-space/#prerequisites","title":"Prerequisites","text":"

          To operate a graph space on the Schema page of Studio, you must do a check of these:

          • Studio is connected to NebulaGraph.
          • Your account has the authority of GOD. It means that:
            • If the authentication is enabled in NebulaGraph, you can use root and any password to sign in to Studio.
            • If the authentication is disabled in NebulaGraph, you must use root and its password to sign in to Studio.
          "},{"location":"nebula-studio/manage-schema/st-ug-crud-space/#create_a_graph_space","title":"Create a graph space","text":"
          1. In the toolbar, click the Schema tab.

          2. In the Graph Space List page, click Create Space, do these settings:

            • Name: Specify a name to the new graph space. In this example, basketballplayer is used. The name must be unique in the database.
            • Vid Type: The data types of VIDs are restricted to FIXED_STRING(<N>) or INT64. A graph space can only select one VID type. In this example, FIXED_STRING(32) is used. For more information, see VID.
            • Comment: Enter the description for graph space. The maximum length is 256 bytes. By default, there will be no comments on a space. But in this example, Statistics of basketball players is used.
            • Optional Parameters: Set the values of partition_num and replica_factor respectively. In this example, these parameters are set to 100 and 1 respectively. For more information, see CREATE SPACE syntax.

            In the Equivalent to the following nGQL statement panel, you can see the statement equivalent to the preceding settings.

            CREATE SPACE basketballplayer (partition_num = 100, replica_factor = 1, vid_type = FIXED_STRING(32)) COMMENT = \"Statistics of basketball players\"\n
          3. Confirm the settings and then click the + Create button. If the graph space is created successfully, you can see it on the graph space list.

          "},{"location":"nebula-studio/manage-schema/st-ug-crud-space/#delete_a_graph_space","title":"Delete a graph space","text":"

          Danger

          Deleting the space will delete all the data in it, and the deleted data cannot be restored if it is not backed up.

          1. In the toolbar, click the Schema tab.

          2. In the Graph Space List, find the space you want to be deleted, and click Delete Graph Space in the Operation column.

          3. On the dialog box, confirm the information and then click OK.

          "},{"location":"nebula-studio/manage-schema/st-ug-crud-space/#next_to_do","title":"Next to do","text":"

          After a graph space is created, you can create or edit a schema, including:

          • Operate tags
          • Operate edge types
          • Operate indexes
          "},{"location":"nebula-studio/manage-schema/st-ug-crud-tag/","title":"Manage tags","text":"

          After a graph space is created in NebulaGraph, you can create tags. With Studio, you can use the Console page or the Schema page to create, retrieve, update, or delete tags. This topic introduces how to use the Schema page to operate tags in a graph space only.

          "},{"location":"nebula-studio/manage-schema/st-ug-crud-tag/#prerequisites","title":"Prerequisites","text":"

          To operate a tag on the Schema page of Studio, you must do a check of these:

          • Studio is connected to NebulaGraph.
          • A graph space is created.
          • Your account has the authority of GOD, ADMIN, or DBA.
          "},{"location":"nebula-studio/manage-schema/st-ug-crud-tag/#create_a_tag","title":"Create a tag","text":"
          1. In the toolbar, click the Schema tab.

          2. In the Graph Space List page, find a graph space and then click its name or click Schema in the Operations column.

          3. In the Current Graph Space field, confirm the name of the graph space. If necessary, you can choose another name to change the graph space.

          4. Click the Tag tab and click the + Create button.

          5. On the Create page, do these settings:

            • Name: Specify an appropriate name for the tag. In this example, course is specified.
            • Comment (Optional): Enter the description for tag.
            • Define Properties (Optional): If necessary, click + Add Property to do these settings:

              • Enter a property name.
              • Select a data type.
              • Select whether to allow null values..
              • (Optional) Enter the default value.
              • (Optional) Enter the description.
              • Set TTL (Time To Live) (Optional): If no index is set for the tag, you can set the TTL configuration: In the upper left corner of the Set TTL panel, click the check box to expand the panel, and configure TTL_COL and TTL_ DURATION (in seconds). For more information about both parameters, see TTL configuration.
          6. When the preceding settings are completed, in the Equivalent to the following nGQL statement panel, you can see the nGQL statement equivalent to these settings.

          7. Confirm the settings and then click the + Create button.

          When the tag is created successfully, the Define Properties panel shows all its properties on the list.

          "},{"location":"nebula-studio/manage-schema/st-ug-crud-tag/#edit_a_tag","title":"Edit a tag","text":"
          1. In the toolbar, click the Schema tab.

          2. In the Graph Space List page, find a graph space and then click its name or click Schema in the Operations column.

          3. In the Current Graph Space field, confirm the name of the graph space. If necessary, you can choose another name to change the graph space.

          4. Click the Tag tab, find a tag and then click the button in the Operations column.

          5. On the Edit page, do these operations:

            • To edit a Comment: Click Edit on the right of Comment.
            • To edit a property: On the Define Properties panel, find a property, click Edit, and then change the data type or the default value.
            • To delete a property: On the Define Properties panel, find a property, click Delete.
            • To add more properties: On the Define Properties panel, click the Add Property button to add a new property.
            • To set the TTL configuration: In the upper left corner of the Set TTL panel, click the check box and then set TTL.
            • To delete the TTL configuration: When the Set TTL panel is expanded, in the upper left corner of the panel, click the check box to delete the configuration.
            • To edit the TTL configuration: On the Set TTL panel, click Edit and then change the configuration of TTL_COL and TTL_DURATION (in seconds).

              Note

              For the problem of the coexistence of TTL and index, see TTL.

          "},{"location":"nebula-studio/manage-schema/st-ug-crud-tag/#delete_a_tag","title":"Delete a tag","text":"

          Danger

          Confirm the impact before deleting the tag. The deleted data cannot be restored if it is not backup.

          1. In the toolbar, click the Schema tab.

          2. In the Graph Space List page, find a graph space and then click its name or click Schema in the Operations column.

          3. In the Current Graph Space field, confirm the name of the graph space. If necessary, you can choose another name to change the graph space.

          4. Click the Tag tab, find an tag and then click the button in the Operations column.

          5. Click OK to confirm delete a tag in the pop-up dialog box.

          "},{"location":"nebula-studio/manage-schema/st-ug-crud-tag/#next_to_do","title":"Next to do","text":"

          After the tag is created, you can use the Console page to insert vertex data one by one manually or use the Import page to bulk import vertex data.

          "},{"location":"nebula-studio/manage-schema/st-ug-view-schema/","title":"View Schema","text":"

          Users can visually view schemas in NebulaGraph Studio.

          "},{"location":"nebula-studio/manage-schema/st-ug-view-schema/#steps","title":"Steps","text":"
          1. In the toolbar, click the Schema tab.

          2. In the Graph Space List page, find a graph space and then click its name or click Schema in the Operations column.

          3. Click View Schema tab and click the Get Schema button.

          "},{"location":"nebula-studio/manage-schema/st-ug-view-schema/#other_operations","title":"Other operations","text":"

          In the Graph Space List page, find a graph space and then perform the following operations in the Operations column:

          • View Schema DDL: Displays schema creation statements for the graph space, including graph spaces, tags, edge types, and indexes.
          • Clone Graph Space: Clones the schema of the graph space to a new graph space.
          • Delete Graph pace: Deletes the graph space, including the schema and all vertices and edges.
          "},{"location":"nebula-studio/quick-start/draft/","title":"Schema drafting","text":"

          Studio supports the schema drafting function. Users can design their schemas on the canvas to visually display the relationships between vertices and edges, and apply the schema to a specified graph space after the design is completed.

          "},{"location":"nebula-studio/quick-start/draft/#features","title":"Features","text":"
          • Design schema visually.
          • Applies schema to a specified graph space.
          • Export the schema as a PNG image.
          "},{"location":"nebula-studio/quick-start/draft/#entry","title":"Entry","text":"

          At the top navigation bar, click .

          "},{"location":"nebula-studio/quick-start/draft/#design_schema","title":"Design schema","text":"

          The following steps take designing the schema of the basketballplayer dataset as an example to demonstrate how to use the schema drafting function.

          1. At the upper left corner of the page, click New.
          2. Create a tag by selecting the appropriate color tag under the canvas. You can hold down the left button and drag the tag into the canvas.
          3. Click the tag. On the right side of the page, you need to fill in the name of the tag as player, and add two properties name and age.
          4. Create a tag again. The name of the tag is team, and the property is name.
          5. Connect from the anchor point of the tag player to the anchor point of the tag team. Click the generated edge, fill in the name of the edge type as serve, and add two properties start_year and end_year.
          6. Connect from an anchor point of the tag player to another one of its own. Click the generated edge, fill in the name of the edge type as follow, and add a property degree.
          7. After the design is complete, click at the top of the page to change the name of the draft, and then click at the top right corner to save the draft.

          "},{"location":"nebula-studio/quick-start/draft/#apply_schema","title":"Apply schema","text":"
          1. Select the draft that you want to import from the Draft list on the left side of the page, and then click Apply to Space at the upper right corner.
          2. Import the schema to a new or existing space, and click Confirm.

            Note

            • For more information about the parameters for creating a graph space, see CREATE SPACE.
            • If the same schema exists in the graph space, the import operation fails, and the system prompts you to modify the name or change the graph space.
          "},{"location":"nebula-studio/quick-start/draft/#modify_schema","title":"Modify schema","text":"

          Select the schema draft that you want to modify from the Draft list on the left side of the page. Click at the upper right corner after the modification.

          Note

          The graph space to which the schema has been applied will not be modified synchronously.

          "},{"location":"nebula-studio/quick-start/draft/#delete_schema","title":"Delete schema","text":"

          Select the schema draft that you want to delete from the Draft list on the left side of the page, click X at the upper right corner of the thumbnail, and confirm to delete it.

          "},{"location":"nebula-studio/quick-start/draft/#export_schema","title":"Export Schema","text":"

          Click at the upper right corner to export the schema as a PNG image.

          "},{"location":"nebula-studio/quick-start/st-ug-console/","title":"Console","text":"

          Studio console interface is shown as follows.

          "},{"location":"nebula-studio/quick-start/st-ug-console/#entry","title":"Entry","text":"

          In the top navigation bar, click Console.

          "},{"location":"nebula-studio/quick-start/st-ug-console/#overview","title":"Overview","text":"

          The following table lists the functions on the console page.

          number function descriptions 1 View the schema Display the schemas of the graph spaces. 2 Select a space Select a space in the graph space drop down list. The console does not support using the USE <space_name> statement to switch graph spaces. 3 Favorites Click the button to expand the favorites. Select a statement, and it automatically populates the input box. 4 History list Click the button to view the execution history. In the execution history list, click one of the statements, and the statement is automatically populates the input box. The list provides the record of the last 15 statements.Type / in the input box to quickly select a historical query statement. 5 Clean input box Click the button to clear the content populated in the input box. 6 Run After entering the nGQL statement in the input box, click the button to start running the statement. 7 Input box The area where the nGQL statement is entered. The statement displays different colors depending on the schemas or character strings. Code auto-completion is supported. You can quickly enter a tag or edge type based on the schema.You can input multiple statements and run them at the same time by using the separator ;. Use the symbol // to add comments.Support right-clicking on a selected statement and then performing operations such as cut, copy, or run. 8 Custom parameters display Click the button to expand the custom parameters for the parameterized query. For details, see Manage parameters. 9 Statement running status After running the nGQL statement, the statement running status is displayed. If the statement runs successfully, the statement is displayed in green. If the statement fails, the statement is displayed in red. 10 Add to favorites Click the button to save the statement as a favorite. The button for the favorite statement is colored in yellow. 11 Export CSV file or PNG file After running the nGQL statement to return the result, when the result is in the Table window, click the button to export as a CSV file. Switch to the Graph window and click the button to export the results as a CSV file or a PNG image. 12 Expand/hide execution results Click the button to hide the result or click to expand the result. 13 Close execution results Click the button to close the result returned by this nGQL statement. 14 Table window Display the results returned by the nGQL statement in a table. 15 Plan window Display the execution plan. If an EXPLAIN or PROFILE statement is executed, the window presents the execution plan in visual form. See the description of the execution plan below. 16 Graph window Display the results returned by the nGQL statement in a graph if the results contain complete vertex and edge information. Click the button on the right to view the overview panel. 17 AI Assistant You can chat with an AI assistant to convert natural language instructions into nGQL query statements and then copy the nGQL statements into the input box with one click. This feature needs to be set up and enabled in the system settings before use.Note: The schema information of the current graph space is sent to the large language model when you chat with the assistant. Please pay attention to information security.You can click the text2match toggle to switch between general Q&A and query Q&A. The query Q&A can convert the natural language instructions to nGQL query statements."},{"location":"nebula-studio/quick-start/st-ug-console/#execution_plan_descriptions","title":"Execution plan descriptions","text":"

          The Studio can display the execution plan of the statement. The execution plan descriptions are as follows.

          No. Description 1 An EXPLAIN or PROFILE statement. 2 The operators used by the execution plan, which are sorted according to the execution duration. The top three operators are labeled as red, orange, and yellow, respectively. Clicking on an operator directly selects the corresponding operator in the operator execution flow and displays the operator information.Note: The PROFILE statement actually executes the statement, and the actual execution durations can be obtained and sorted. The EXPLAIN statement does not execute the statement, and all operators are considered to have the same execution duration and are all labeled as red. 3 The operator execution flow. For each operator, the following information is displayed: in-parameters, out-parameters, and total execution duration.The Select, Loop, PassThrough, and Start operators have independent color schemes.The arrows show the direction of data flow and the number of rows. The thicker the arrows, the more rows of data. You can click on the operator to check the details of the operator on the right side. 4 The details of the operator, divided into Profiling data and Operator info.Profiling data shows the performance data of the operator, including the rows of data received, the execution time, the total time, etc.Operator info shows the detailed operation information of the operator. 5 Zoom out, zoom in, or reverse the execution flow. 6 The duration of the statement. 7 Full screen or cancel full screen."},{"location":"nebula-studio/quick-start/st-ug-create-schema/","title":"Create a schema","text":"

          To batch import data into NebulaGraph, you must have a graph schema. You can create a schema on the Console page or on the Schema page of Studio.

          Note

          • Users can use nebula-console to create a schema. For more information, see NebulaGraph Manual and Get started with NebulaGraph.
          • Users can use the Schema drafting function to design schema visually. For more information, see Schema drafting.
          "},{"location":"nebula-studio/quick-start/st-ug-create-schema/#prerequisites","title":"Prerequisites","text":"

          To create a graph schema on Studio, you must do a check of these:

          • Studio is connected to NebulaGraph.
          • Your account has the privilege of GOD, ADMIN, or DBA.
          • The schema is designed.
          • A graph space is created.

          Note

          If no graph space exists and your account has the GOD privilege, you can create a graph space on the Console page. For more information, see CREATE SPACE.

          "},{"location":"nebula-studio/quick-start/st-ug-create-schema/#create_a_schema_with_schema","title":"Create a schema with Schema","text":"
          1. Create tags. For more information, see Operate tags.

          2. Create edge types. For more information, see Operate edge types.

          "},{"location":"nebula-studio/quick-start/st-ug-create-schema/#create_a_schema_with_console","title":"Create a schema with Console","text":"
          1. In the toolbar, click the Console tab.

          2. In the Current Graph Space field, choose a graph space name. In this example, basketballplayer is used.

          3. In the input box, enter these statements one by one and click the button Run.

            // To create a tag named \"player\", with two property\nnebula> CREATE TAG player(name string, age int);\n\n// To create a tag named \"team\", with one property\nnebula> CREATE TAG team(name string);\n\n// To create an edge type named \"follow\", with one properties\nnebula> CREATE EDGE follow(degree int);\n\n// To create an edge type named \"serve\", with two properties\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

          If the preceding statements are executed successfully, the schema is created. You can run the statements as follows to view the schema.

          // To list all the tags in the current graph space\nnebula> SHOW TAGS;\n\n// To list all the edge types in the current graph space\nnebula> SHOW EDGES;\n\n// To view the definition of the tags and edge types\nDESCRIBE TAG player;\nDESCRIBE TAG team;\nDESCRIBE EDGE follow;\nDESCRIBE EDGE serve;\n

          If the schema is created successfully, in the result window, you can see the definition of the tags and edge types.

          "},{"location":"nebula-studio/quick-start/st-ug-create-schema/#next_to_do","title":"Next to do","text":"

          When a schema is created, you can import data.

          "},{"location":"nebula-studio/quick-start/st-ug-import-data/","title":"Import data","text":"

          Studio supports importing data in CSV format into NebulaGraph through an interface.

          "},{"location":"nebula-studio/quick-start/st-ug-import-data/#prerequisites","title":"Prerequisites","text":"

          To batch import data, do a check of these:

          • The schema has been created in NebulaGraph.
          • The CSV files meet the demands of the schema.
          • The account has GOD, ADMIN, or DBA permissions. For details, see Built-in Roles.
          "},{"location":"nebula-studio/quick-start/st-ug-import-data/#entry","title":"Entry","text":"

          In the top navigation bar, click Import.

          "},{"location":"nebula-studio/quick-start/st-ug-import-data/#steps","title":"Steps","text":"

          Importing data is divided into 2 parts, creating a new data source and creating an import task, which will be described in detail next.

          Note

          You can also import tasks via the AI Import feature, which is a beta feature that needs to be enabled and configured in the system settings before use.

          "},{"location":"nebula-studio/quick-start/st-ug-import-data/#create_a_new_data_source","title":"Create a new data source","text":"

          Click New Data Source in the upper right corner of the page to set the data source and its related settings. Currently, 3 types of data sources are supported.

          Type of data source Description Cloud storage Add cloud storage as the CSV file source, which only supports cloud services compatible with the Amazon S3 interface. SFTP Add SFTP as the CSV file source. Local file Upload a local CSV file. The file size can not exceed 200 MB, please put the files exceeding the limit into other types of data sources.

          Note

          • When uploading a local CSV file, you can select more than one CSV file at one time.
          • After adding a data source, you can click Data Source Management at the top of the page and switch tabs to view the details of different types of data sources, and you can also edit or delete data sources.
          "},{"location":"nebula-studio/quick-start/st-ug-import-data/#create_an_import_task","title":"Create an import task","text":"
          1. Click New Import at the top left corner of the page to complete the following settings:

            Caution

            Users can also click Import Template to download the sample configuration file example.yaml, configure it and then upload the configuration file. Configure in the same way as NebulaGraph Importer.

            • Space: The name of the graph space where the data needs to be imported.
            • Task Name: automatically generated by default, can be modified.
            • (optional)More configuration: You can customize the concurrency, batch size, retry times, read concurrency, and import concurrency.
            • Map Tags:

              1. Click Add Tag, and then select the tag within the added tags below.
              2. Click Add source file, select Data Source Type and File Path in Data source file, find the file you need to import, and then click Add.
              3. In the preview page, set the file separator and whether to carry the table header, and then click Confirm.
              4. Select the corresponding column for VID in VID Columns. You can select multiple columns to be merged into a VID, and you can also add a prefix or suffix to the VID.
              5. Select the corresponding column for the attribute in the properties box. For properties that can be NULL or have DEFAULT set, you can leave the corresponding column unspecified.
              6. Repeat steps 2 to 5 to import all the data files of the Tag selected.
              7. Repeat steps 1 to 6 to import all Tag data.
            • Map Edges: Same operation as map tags.

          2. After completing the settings, click Import, enter the password for the NebulaGraph account, and confirm.

          After the import task is created, you can view the progress of the import task in the Import Data tab, which supports operations such as filtering tasks based on graph space, editing the task, viewing logs, downloading logs, reimporting, downloading configuration files, and deleting tasks.

          "},{"location":"nebula-studio/quick-start/st-ug-import-data/#import_data_using_ai_import","title":"Import data using AI Import","text":"

          Note

          After the import task is completed, check whether the data is imported successfully. If not, it is recommended that you check the task logs on the import page to see whether issues such as timeouts, privacy policy violations, service interruption, or encoding errors occurred.

          1. Click AI Import in the upper left corner of the page to complete the following settings:

            • File: Select the files for import via AI import. Only local single file or local directory is currently supported. You can select only one local file or directory each time. The file needs to be a plain text file.
            • Import Graph Space: The graph space where the data is to be imported. The schema of the graph space needs to be created in advance.
            • Export NGQL File Path: The path to the exported nGQL file, which usually does not need to be modified.
            • Attach Prompt: You can attach additional prompts to guide the data import process. The precision of the prompts directly influences the accuracy of the import results.

            You can view the LLM parameters related to AI import in the configuration file.

          2. After completing the settings, click Next to confirm the file for import and the AI URL to be used, and then click Start.

          After the import task is created, you can view the progress of the import task on the Import Data tab, which supports operations such as viewing logs, downloading logs, reimporting, and deleting tasks.

          "},{"location":"nebula-studio/quick-start/st-ug-import-data/#next","title":"Next","text":"

          After completing the data import, users can access the Console page.

          "},{"location":"nebula-studio/quick-start/st-ug-plan-schema/","title":"Design a schema","text":"

          To manipulate graph data in NebulaGraph with Studio, you must have a graph schema. This article introduces how to design a graph schema for NebulaGraph.

          A graph schema for NebulaGraph must have these essential elements:

          • Tags (namely vertex types) and their properties.
          • Edge types and their properties.

          In this article, you can install the sample data set basketballplayer and use it to explore a pre-designed schema.

          This table gives all the essential elements of the schema.

          Element Name Property name (Data type) Description Tag player - name (string) - age (int) Represents the player. Tag team - name (string) Represents the team. Edge type serve - start_year (int) - end_year (int) Represent the players behavior.This behavior connects the player to the team, and the direction is from player to team. Edge type follow - degree (int) Represent the players behavior.This behavior connects the player to the player, and the direction is from a player to a player.

          This figure shows the relationship (serve/follow) between a player and a team.

          "},{"location":"nebula-studio/troubleshooting/st-ug-config-server-errors/","title":"Connecting to the database error","text":""},{"location":"nebula-studio/troubleshooting/st-ug-config-server-errors/#problem_description","title":"Problem description","text":"

          According to the connect Studio operation, it prompts failed.

          "},{"location":"nebula-studio/troubleshooting/st-ug-config-server-errors/#possible_causes_and_solutions","title":"Possible causes and solutions","text":"

          You can troubleshoot the problem by following the steps below.

          "},{"location":"nebula-studio/troubleshooting/st-ug-config-server-errors/#step1_confirm_that_the_format_of_the_host_field_is_correct","title":"Step1: Confirm that the format of the Host field is correct","text":"

          You must fill in the IP address (graph_server_ip) and port of the NebulaGraph database Graph service. If no changes are made, the port defaults to 9669. Even if NebulaGraph and Studio are deployed on the current machine, you must use the local IP address instead of 127.0.0.1, localhost or 0.0.0.0.

          "},{"location":"nebula-studio/troubleshooting/st-ug-config-server-errors/#step2_confirm_that_the_username_and_password_are_correct","title":"Step2: Confirm that the username and password are correct","text":"

          If authentication is not enabled, you can use root and any password as the username and its password.

          If authentication is enabled and different users are created and assigned roles, users in different roles log in with their accounts and passwords.

          "},{"location":"nebula-studio/troubleshooting/st-ug-config-server-errors/#step3_confirm_that_nebulagraph_service_is_normal","title":"Step3: Confirm that NebulaGraph service is normal","text":"

          Check NebulaGraph service status. Regarding the operation of viewing services:

          • If you compile and deploy NebulaGraph on a Linux server, refer to the NebulaGraph service.
          • If you use NebulaGraph deployed by Docker Compose and RPM, refer to the NebulaGraph service status and ports.

          If the NebulaGraph service is normal, proceed to Step 4 to continue troubleshooting. Otherwise, please restart NebulaGraph service.

          Note

          If you used docker-compose up -d to satrt NebulaGraph before, you must run the docker-compose down to stop NebulaGraph.

          "},{"location":"nebula-studio/troubleshooting/st-ug-config-server-errors/#step4_confirm_the_network_connection_of_the_graph_service_is_normal","title":"Step4: Confirm the network connection of the Graph service is normal","text":"

          Run a command (for example, telnet 9669) on the Studio machine to confirm whether NebulaGraph's Graph service network connection is normal.

          If the connection fails, check according to the following steps:

          • If Studio and NebulaGraph are on the same machine, check if the port is exposed.
          • If Studio and NebulaGraph are not on the same machine, check the network configuration of the NebulaGraph server, such as firewall, gateway, and port.

          If you cannot connect to the NebulaGraph service after troubleshooting with the above steps, please go to the NebulaGraph forum for consultation.

          "},{"location":"nebula-studio/troubleshooting/st-ug-connection-errors/","title":"Cannot access to Studio","text":""},{"location":"nebula-studio/troubleshooting/st-ug-connection-errors/#problem_description","title":"Problem description","text":"

          I follow the document description and visit 127.0.0.1:7001 or 0.0.0.0:7001 after starting Studio, why can\u2019t I open the page?

          "},{"location":"nebula-studio/troubleshooting/st-ug-connection-errors/#possible_causes_and_solutions","title":"Possible causes and solutions","text":"

          You can troubleshoot the problem by following the steps below.

          "},{"location":"nebula-studio/troubleshooting/st-ug-connection-errors/#step1_confirm_system_architecture","title":"Step1: Confirm system architecture","text":"

          It is necessary to confirm whether the machine where the Studio service is deployed is of x86_64 architecture. Currently, Studio only supports x86_64 architecture.

          "},{"location":"nebula-studio/troubleshooting/st-ug-connection-errors/#step2_check_if_the_studio_service_starts_normally","title":"Step2: Check if the Studio service starts normally","text":"
          • For Studio deployed with RPM or DEB packages, use systemctl status nebula-graph-studio to see the running status.
          • For Studio deployed with tar package, use sudo lsof -i:7001 to check port status.
          • For Studio deployed with docker, use docker-compose ps to see the running status. Run docker-compose ps to check if the service has started normally.

            If the service is normal, the return result is as follows. Among them, the State column should all be displayed as Up.

                Name                          Command               State               Ports\n------------------------------------------------------------------------------------------------------\nnebula-web-docker_client_1     ./nebula-go-api                  Up      0.0.0.0:32782->8080/tcp\nnebula-web-docker_importer_1   nebula-importer --port=569 ...   Up      0.0.0.0:32783->5699/tcp\nnebula-web-docker_nginx_1      /docker-entrypoint.sh ngin ...   Up      0.0.0.0:7001->7001/tcp, 80/tcp\nnebula-web-docker_web_1        docker-entrypoint.sh npm r ...   Up      0.0.0.0:32784->7001/tcp\n

          If the above result is not returned, stop Studio and restart it first. For details, refer to Deploy Studio.

          !!! note

              If you used `docker-compose up -d` to satrt NebulaGraph before, you must run the `docker-compose down` to stop NebulaGraph.\n
          "},{"location":"nebula-studio/troubleshooting/st-ug-connection-errors/#step3_confirm_address","title":"Step3: Confirm address","text":"

          If Studio and the browser are on the same machine, users can use localhost:7001, 127.0.0.1:7001 or 0.0.0.0:7001 in the browser to access Studio.

          If Studio and the browser are not on the same machine, you must enter <studio_server_ip>:7001 in the browser. Among them, studio_server_ip refers to the IP address of the machine where the Studio service is deployed.

          "},{"location":"nebula-studio/troubleshooting/st-ug-connection-errors/#step4_confirm_network_connection","title":"Step4: Confirm network connection","text":"

          Run curl <studio_server_ip>:7001 -I to confirm if it is normal. If it returns HTTP/1.1 200 OK, it means that the network is connected normally.

          If the connection is refused, check according to the following steps:

          If the connection fails, check according to the following steps:

          • If Studio and NebulaGraph are on the same machine, check if the port is exposed.
          • If Studio and NebulaGraph are not on the same machine, check the network configuration of the NebulaGraph server, such as firewall, gateway, and port.

          If you cannot connect to the NebulaGraph service after troubleshooting with the above steps, please go to the NebulaGraph forum for consultation.

          "},{"location":"nebula-studio/troubleshooting/st-ug-faq/","title":"FAQ","text":"

          Why can't I use a function?

          If you find that a function cannot be used, it is recommended to troubleshoot the problem according to the following steps:

          1. Confirm that NebulaGraph is the latest version. If you use Docker Compose to deploy the NebulaGraph database, it is recommended to run docker-compose pull && docker-compose up -d to pull the latest Docker image and start the container.

          2. Confirm that Studio is the latest version. For more information, refer to check updates.

          3. Search the nebula forum, nebula and nebula-studio projects on the GitHub to confirm if there are already similar problems.

          4. If none of the above steps solve the problem, you can submit a problem on the forum.

          "},{"location":"reuse/source-monitoring-metrics/","title":"Source monitoring metrics","text":""},{"location":"reuse/source-monitoring-metrics/#graph","title":"Graph","text":"Parameter Description num_active_queries The number of changes in the number of active queries. Formula: The number of started queries minus the number of finished queries within a specified time. num_active_sessions The number of changes in the number of active sessions. Formula: The number of logged in sessions minus the number of logged out sessions within a specified time.For example, when querying num_active_sessions.sum.5, if there were 10 sessions logged in and 30 sessions logged out in the last 5 seconds, the value of this metric is -20 (10-30). num_aggregate_executors The number of executions for the Aggregation operator. num_auth_failed_sessions_bad_username_password The number of sessions where authentication failed due to incorrect username and password. num_auth_failed_sessions_out_of_max_allowed The number of sessions that failed to authenticate logins because the value of the parameter FLAG_OUT_OF_MAX_ALLOWED_CONNECTIONS was exceeded. num_auth_failed_sessions The number of sessions in which login authentication failed. num_indexscan_executors The number of executions for index scan operators. num_killed_queries The number of killed queries. num_opened_sessions The number of sessions connected to the server. num_queries The number of queries. num_query_errors_leader_changes The number of the raft leader changes due to query errors. num_query_errors The number of query errors. num_reclaimed_expired_sessions The number of expired sessions actively reclaimed by the server. num_rpc_sent_to_metad_failed The number of failed RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_metad The number of RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_storaged_failed The number of failed RPC requests that the Graphd service sent to the Storaged service. num_rpc_sent_to_storaged The number of RPC requests that the Graphd service sent to the Storaged service. num_sentences The number of statements received by the Graphd service. num_slow_queries The number of slow queries. num_sort_executors The number of executions for the Sort operator. optimizer_latency_us The latency of executing optimizer statements. query_latency_us The latency of queries. slow_query_latency_us The latency of slow queries. num_queries_hit_memory_watermark The number of queries reached the memory watermark. resp_part_completeness The completeness of the partial success. You need to set accept_partial_success to true in the graph configuration first."},{"location":"reuse/source-monitoring-metrics/#meta","title":"Meta","text":"Parameter Description commit_log_latency_us The latency of committing logs in Raft. commit_snapshot_latency_us The latency of committing snapshots in Raft. heartbeat_latency_us The latency of heartbeats. num_heartbeats The number of heartbeats. num_raft_votes The number of votes in Raft. transfer_leader_latency_us The latency of transferring the raft leader. num_agent_heartbeats The number of heartbeats for the AgentHBProcessor. agent_heartbeat_latency_us The latency of the AgentHBProcessor. replicate_log_latency_us The latency of replicating the log record to most nodes by Raft. num_send_snapshot The number of times that Raft sends snapshots to other nodes. append_log_latency_us The latency of replicating the log record to a single node by Raft. append_wal_latency_us The Raft write latency for a single WAL. num_grant_votes The number of times that Raft votes for other nodes. num_start_elect The number of times that Raft starts an election."},{"location":"reuse/source-monitoring-metrics/#storage","title":"Storage","text":"Parameter Description add_edges_latency_us The latency of adding edges. add_vertices_latency_us The latency of adding vertices. commit_log_latency_us The latency of committing logs in Raft. commit_snapshot_latency_us The latency of committing snapshots in Raft. delete_edges_latency_us The latency of deleting edges. delete_vertices_latency_us The latency of deleting vertices. get_neighbors_latency_us The latency of querying neighbor vertices. get_dst_by_src_latency_us The latency of querying the destination vertex by the source vertex. num_get_prop The number of executions for the GetPropProcessor. num_get_neighbors_errors The number of execution errors for the GetNeighborsProcessor. num_get_dst_by_src_errors The number of execution errors for the GetDstBySrcProcessor. get_prop_latency_us The latency of executions for the GetPropProcessor. num_edges_deleted The number of deleted edges. num_edges_inserted The number of inserted edges. num_raft_votes The number of votes in Raft. num_rpc_sent_to_metad_failed The number of failed RPC requests that the Storage service sent to the Meta service. num_rpc_sent_to_metad The number of RPC requests that the Storaged service sent to the Metad service. num_tags_deleted The number of deleted tags. num_vertices_deleted The number of deleted vertices. num_vertices_inserted The number of inserted vertices. transfer_leader_latency_us The latency of transferring the raft leader. lookup_latency_us The latency of executions for the LookupProcessor. num_lookup_errors The number of execution errors for the LookupProcessor. num_scan_vertex The number of executions for the ScanVertexProcessor. num_scan_vertex_errors The number of execution errors for the ScanVertexProcessor. update_edge_latency_us The latency of executions for the UpdateEdgeProcessor. num_update_vertex The number of executions for the UpdateVertexProcessor. num_update_vertex_errors The number of execution errors for the UpdateVertexProcessor. kv_get_latency_us The latency of executions for the Getprocessor. kv_put_latency_us The latency of executions for the PutProcessor. kv_remove_latency_us The latency of executions for the RemoveProcessor. num_kv_get_errors The number of execution errors for the GetProcessor. num_kv_get The number of executions for the GetProcessor. num_kv_put_errors The number of execution errors for the PutProcessor. num_kv_put The number of executions for the PutProcessor. num_kv_remove_errors The number of execution errors for the RemoveProcessor. num_kv_remove The number of executions for the RemoveProcessor. forward_tranx_latency_us The latency of transmission. scan_edge_latency_us The latency of executions for the ScanEdgeProcessor. num_scan_edge_errors The number of execution errors for the ScanEdgeProcessor. num_scan_edge The number of executions for the ScanEdgeProcessor. scan_vertex_latency_us The latency of executions for the ScanVertexProcessor. num_add_edges The number of times that edges are added. num_add_edges_errors The number of errors when adding edges. num_add_vertices The number of times that vertices are added. num_start_elect The number of times that Raft starts an election. num_add_vertices_errors The number of errors when adding vertices. num_delete_vertices_errors The number of errors when deleting vertices. append_log_latency_us The latency of replicating the log record to a single node by Raft. num_grant_votes The number of times that Raft votes for other nodes. replicate_log_latency_us The latency of replicating the log record to most nodes by Raft. num_delete_tags The number of times that tags are deleted. num_delete_tags_errors The number of errors when deleting tags. num_delete_edges The number of edge deletions. num_delete_edges_errors The number of errors when deleting edges num_send_snapshot The number of times that snapshots are sent. update_vertex_latency_us The latency of executions for the UpdateVertexProcessor. append_wal_latency_us The Raft write latency for a single WAL. num_update_edge The number of executions for the UpdateEdgeProcessor. delete_tags_latency_us The latency of deleting tags. num_update_edge_errors The number of execution errors for the UpdateEdgeProcessor. num_get_neighbors The number of executions for the GetNeighborsProcessor. num_get_dst_by_src The number of executions for the GetDstBySrcProcessor. num_get_prop_errors The number of execution errors for the GetPropProcessor. num_delete_vertices The number of times that vertices are deleted. num_lookup The number of executions for the LookupProcessor. num_sync_data The number of times the Storage service synchronizes data from the Drainer. num_sync_data_errors The number of errors that occur when the Storage service synchronizes data from the Drainer. sync_data_latency_us The latency of the Storage service synchronizing data from the Drainer."},{"location":"reuse/source-monitoring-metrics/#graph_space","title":"Graph space","text":"

          Note

          Space-level metrics are created dynamically, so that only when the behavior is triggered in the graph space, the corresponding metric is created and can be queried by the user.

          Parameter Description num_active_queries The number of queries currently being executed. num_queries The number of queries. num_sentences The number of statements received by the Graphd service. optimizer_latency_us The latency of executing optimizer statements. query_latency_us The latency of queries. num_slow_queries The number of slow queries. num_query_errors The number of query errors. num_query_errors_leader_changes The number of raft leader changes due to query errors. num_killed_queries The number of killed queries. num_aggregate_executors The number of executions for the Aggregation operator. num_sort_executors The number of executions for the Sort operator. num_indexscan_executors The number of executions for index scan operators. num_auth_failed_sessions_bad_username_password The number of sessions where authentication failed due to incorrect username and password. num_auth_failed_sessions The number of sessions in which login authentication failed. num_opened_sessions The number of sessions connected to the server. num_queries_hit_memory_watermark The number of queries reached the memory watermark. num_reclaimed_expired_sessions The number of expired sessions actively reclaimed by the server. num_rpc_sent_to_metad_failed The number of failed RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_metad The number of RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_storaged_failed The number of failed RPC requests that the Graphd service sent to the Storaged service. num_rpc_sent_to_storaged The number of RPC requests that the Graphd service sent to the Storaged service. slow_query_latency_us The latency of slow queries."},{"location":"reuse/source_connect-to-nebula-graph/","title":"Source connect to nebula graph","text":"

          This topic provides basic instruction on how to use the native CLI client NebulaGraph Console to connect to NebulaGraph.

          Caution

          When connecting to NebulaGraph for the first time, you must register the Storage Service before querying data.

          NebulaGraph supports multiple types of clients, including a CLI client, a GUI client, and clients developed in popular programming languages. For more information, see the client list.

          "},{"location":"reuse/source_connect-to-nebula-graph/#prerequisites","title":"Prerequisites","text":"
          • You have started NebulaGraph services.
          • The machine on which you plan to run NebulaGraph Console has network access to the Graph Service of NebulaGraph.
          • The NebulaGraph Console version is compatible with the NebulaGraph version.

            Note

            NebulaGraph Console and NebulaGraph of the same version number are the most compatible. There may be compatibility issues when connecting to NebulaGraph with a different version of NebulaGraph Console. The error message incompatible version between client and server is displayed when there is such an issue.

          "},{"location":"reuse/source_connect-to-nebula-graph/#steps","title":"Steps","text":"
          1. On the NebulaGraph Console releases page, select a NebulaGraph Console version and click Assets.

            Note

            It is recommended to select the latest version.

          2. In the Assets area, find the correct binary file for the machine where you want to run NebulaGraph Console and download the file to the machine.

          3. (Optional) Rename the binary file to nebula-console for convenience.

            Note

            For Windows, rename the file to nebula-console.exe.

          4. On the machine to run NebulaGraph Console, grant the execute permission of the nebula-console binary file to the user.

            Note

            For Windows, skip this step.

            $ chmod 111 nebula-console\n
          5. In the command line interface, change the working directory to the one where the nebula-console binary file is stored.

          6. Run the following command to connect to NebulaGraph.

            • For Linux or macOS:
            $ ./nebula-console -addr <ip> -port <port> -u <username> -p <password>\n[-t 120] [-e \"nGQL_statement\" | -f filename.nGQL]\n
            • For Windows:
            > nebula-console.exe -addr <ip> -port <port> -u <username> -p <password>\n[-t 120] [-e \"nGQL_statement\" | -f filename.nGQL]\n

            Parameter descriptions are as follows:

            Parameter Description -h/-help Shows the help menu. -addr/-address Sets the IP (or hostname) of the Graph service. The default address is 127.0.0.1. -P/-port Sets the port number of the graphd service. The default port number is 9669. -u/-user Sets the username of your NebulaGraph account. Before enabling authentication, you can use any existing username. The default username is root. -p/-password Sets the password of your NebulaGraph account. Before enabling authentication, you can use any characters as the password. -t/-timeout Sets an integer-type timeout threshold of the connection. The unit is millisecond. The default value is 120. -e/-eval Sets a string-type nGQL statement. The nGQL statement is executed once the connection succeeds. The connection stops after the result is returned. -f/-file Sets the path of an nGQL file. The nGQL statements in the file are executed once the connection succeeds. The result will be returned and the connection stops then. -enable_ssl Enables SSL encryption when connecting to NebulaGraph. -ssl_root_ca_path Sets the storage path of the certification authority file. -ssl_cert_path Sets the storage path of the certificate file. -ssl_private_key_path Sets the storage path of the private key file.

            For information on more parameters, see the project repository.

          "},{"location":"reuse/source_install-nebula-graph-by-rpm-or-deb/","title":"Source install nebula graph by rpm or deb","text":"

          RPM and DEB are common package formats on Linux systems. This topic shows how to quickly install NebulaGraph with the RPM or DEB package.

          Note

          The console is not complied or packaged with NebulaGraph server binaries. You can install nebula-console by yourself.

          "},{"location":"reuse/source_install-nebula-graph-by-rpm-or-deb/#prerequisites","title":"Prerequisites","text":"
          • The tool wget is installed.
          "},{"location":"reuse/source_install-nebula-graph-by-rpm-or-deb/#step_1_download_the_package_from_cloud_service","title":"Step 1: Download the package from cloud service","text":"

          Note

          NebulaGraph is currently only supported for installation on Linux systems, and only CentOS 7.x, CentOS 8.x, Ubuntu 16.04, Ubuntu 18.04, and Ubuntu 20.04 operating systems are supported.

          • Download the released version.

            URL:

            //Centos 7\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.el7.x86_64.rpm\n\n//Centos 8\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.el8.x86_64.rpm\n\n//Ubuntu 1604\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.ubuntu1604.amd64.deb\n\n//Ubuntu 1804\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.ubuntu1804.amd64.deb\n\n//Ubuntu 2004\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.ubuntu2004.amd64.deb\n

            For example, download the release package master for Centos 7.5:

            wget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.el7.x86_64.rpm\nwget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.el7.x86_64.rpm.sha256sum.txt\n

            Download the release package master for Ubuntu 1804:

            wget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.ubuntu1804.amd64.deb\nwget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.ubuntu1804.amd64.deb.sha256sum.txt\n
          • Download the nightly version.

            Danger

            • Nightly versions are usually used to test new features. Do not use it in a production environment.
            • Nightly versions may not be built successfully every night. And the names may change from day to day.

            URL:

            //Centos 7\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.el7.x86_64.rpm\n\n//Centos 8\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.el8.x86_64.rpm\n\n//Ubuntu 1604\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.ubuntu1604.amd64.deb\n\n//Ubuntu 1804\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.ubuntu1804.amd64.deb\n\n//Ubuntu 2004\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.ubuntu2004.amd64.deb\n

            For example, download the Centos 7.5 package developed and built in 2021.11.28:

            wget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.el7.x86_64.rpm\nwget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.el7.x86_64.rpm.sha256sum.txt\n

            For example, download the Ubuntu 1804 package developed and built in 2021.11.28:

            wget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.ubuntu1804.amd64.deb\nwget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.ubuntu1804.amd64.deb.sha256sum.txt\n
          "},{"location":"reuse/source_install-nebula-graph-by-rpm-or-deb/#step_2_install_nebulagraph","title":"Step 2: Install NebulaGraph","text":"
          • Use the following syntax to install with an RPM package.

            $ sudo rpm -ivh --prefix=<installation_path> <package_name>\n

            The option --prefix indicates the installation path. The default path is /usr/local/nebula/.

            For example, to install an RPM package in the default path for the master version, run the following command.

            sudo rpm -ivh nebula-graph-master.el7.x86_64.rpm\n
          • Use the following syntax to install with a DEB package.

            $ sudo dpkg -i <package_name>\n

            Note

            Customizing the installation path is not supported when installing NebulaGraph with a DEB package. The default installation path is /usr/local/nebula/.

            For example, to install a DEB package for the master version, run the following command.

            sudo dpkg -i nebula-graph-master.ubuntu1804.amd64.deb\n

            Note

            The default installation path is /usr/local/nebula/.

          "},{"location":"reuse/source_install-nebula-graph-by-rpm-or-deb/#next_to_do","title":"Next to do","text":"
          • Start NebulaGraph
          • Connect to NebulaGraph
          "},{"location":"reuse/source_manage-service/","title":"Source manage service","text":"

          NebulaGraph supports managing services with scripts.

          "},{"location":"reuse/source_manage-service/#manage_services_with_script","title":"Manage services with script","text":"

          You can use the nebula.service script to start, stop, restart, terminate, and check the NebulaGraph services.

          Note

          nebula.service is stored in the /usr/local/nebula/scripts directory by default. If you have customized the path, use the actual path in your environment.

          "},{"location":"reuse/source_manage-service/#syntax","title":"Syntax","text":"
          $ sudo /usr/local/nebula/scripts/nebula.service\n[-v] [-c <config_file_path>]\n<start | stop | restart | kill | status>\n<metad | graphd | storaged | all>\n
          Parameter Description -v Display detailed debugging information. -c Specify the configuration file path. The default path is /usr/local/nebula/etc/. start Start the target services. stop Stop the target services. restart Restart the target services. kill Terminate the target services. status Check the status of the target services. metad Set the Meta Service as the target service. graphd Set the Graph Service as the target service. storaged Set the Storage Service as the target service. all Set all the NebulaGraph services as the target services."},{"location":"reuse/source_manage-service/#start_nebulagraph","title":"Start NebulaGraph","text":"

          Run the following command to start NebulaGraph.

          $ sudo /usr/local/nebula/scripts/nebula.service start all\n[INFO] Starting nebula-metad...\n[INFO] Done\n[INFO] Starting nebula-graphd...\n[INFO] Done\n[INFO] Starting nebula-storaged...\n[INFO] Done\n
          "},{"location":"reuse/source_manage-service/#stop_nebulagraph","title":"Stop NebulaGraph","text":"

          Danger

          Do not run kill -9 to forcibly terminate the processes. Otherwise, there is a low probability of data loss.

          Run the following command to stop NebulaGraph.

          $ sudo /usr/local/nebula/scripts/nebula.service stop all\n[INFO] Stopping nebula-metad...\n[INFO] Done\n[INFO] Stopping nebula-graphd...\n[INFO] Done\n[INFO] Stopping nebula-storaged...\n[INFO] Done\n
          "},{"location":"reuse/source_manage-service/#check_the_service_status","title":"Check the service status","text":"

          Run the following command to check the service status of NebulaGraph.

          $ sudo /usr/local/nebula/scripts/nebula.service status all\n
          • NebulaGraph is running normally if the following information is returned.

            INFO] nebula-metad(33fd35e): Running as 29020, Listening on 9559\n[INFO] nebula-graphd(33fd35e): Running as 29095, Listening on 9669\n[WARN] nebula-storaged after v3.0.0 will not start service until it is added to cluster.\n[WARN] See Manage Storage hosts:ADD HOSTS in https://docs.nebula-graph.io/\n[INFO] nebula-storaged(33fd35e): Running as 29147, Listening on 9779\n

            Note

            After starting NebulaGraph, the port of the nebula-storaged process is shown in red. Because the nebula-storaged process waits for the nebula-metad to add the current Storage service during the startup process. The Storage works after it receives the ready signal. Starting from NebulaGraph 3.0.0, the Meta service cannot directly read or write data in the Storage service that you add in the configuration file. The configuration file only registers the Storage service to the Meta service. You must run the ADD HOSTS command to enable the Meta to read and write data in the Storage service. For more information, see Manage Storage hosts.

          • If the returned result is similar to the following one, there is a problem. You may also go to the NebulaGraph community for help.
            [INFO] nebula-metad: Running as 25600, Listening on 9559\n[INFO] nebula-graphd: Exited\n[INFO] nebula-storaged: Running as 25646, Listening on 9779\n

          The NebulaGraph services consist of the Meta Service, Graph Service, and Storage Service. The configuration files for all three services are stored in the /usr/local/nebula/etc/ directory by default. You can check the configuration files according to the returned result to troubleshoot problems.

          "},{"location":"reuse/source_manage-service/#next_to_do","title":"Next to do","text":"

          Connect to NebulaGraph

          "},{"location":"synchronization-and-migration/2.balance-syntax/","title":"BALANCE syntax","text":"

          We can submit tasks to load balance Storage services in NebulaGraph. For more information about storage load balancing and examples, see Storage load balance.

          Note

          For other job management commands, see Job manager and the JOB statements.

          The syntax for load balance is described as follows.

          Syntax Description SUBMIT JOB BALANCE LEADER Starts a job to balance the distribution of all the storage leaders in all graph spaces. It returns the job ID.

          For details about how to view, stop, and restart a job, see Job manager and the JOB statements.

          "}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Welcome to NebulaGraph master Documentation","text":"

          Note

          This manual is revised on 2024-4-28, with GitHub commit 86c3df9cd1.

          NebulaGraph is a distributed, scalable, and lightning-fast graph database. It is the optimal solution in the world capable of hosting graphs with dozens of billions of vertices (nodes) and trillions of edges (relationships) with millisecond latency.

          "},{"location":"#getting_started","title":"Getting started","text":"
          • Quick start
          • Preparations before deployment
          • nGQL cheatsheet
          • FAQ
          • Ecosystem Tools
          • Live Demo
          "},{"location":"#release_notes","title":"Release notes","text":"
          • NebulaGraph Community Edition master
          • NebulaGraph Dashboard Community
          • NebulaGraph Studio
          "},{"location":"#other_sources","title":"Other Sources","text":"
          • To cite NebulaGraph
          • Forum
          • NebulaGraph Homepage
          • Blogs
          • Videos
          • Chinese Docs
          "},{"location":"#symbols_used_in_this_manual","title":"Symbols used in this manual","text":"

          Note

          Additional information or operation-related notes.

          Caution

          May have adverse effects, such as causing performance degradation or triggering known minor problems.

          Warning

          May lead to serious issues, such as data loss or system crash.

          Danger

          May lead to extremely serious issues, such as system damage or information leakage.

          Compatibility

          The compatibility notes between nGQL and openCypher, or between the current version of nGQL and its prior ones.

          Enterpriseonly

          Differences between the NebulaGraph Community and Enterprise editions.

          "},{"location":"#modify_errors","title":"Modify errors","text":"

          This NebulaGraph manual is written in the Markdown language. Users can click the pencil sign on the upper right side of each document title and modify errors.

          "},{"location":"nebula-bench/","title":"NebulaGraph Bench","text":"

          NebulaGraph Bench is a performance test tool for NebulaGraph using the LDBC data set.

          "},{"location":"nebula-bench/#scenario","title":"Scenario","text":"
          • Generate test data and import NebulaGraph.
          • Performance testing in the NebulaGraph cluster.
          "},{"location":"nebula-bench/#release_note","title":"Release note","text":"

          Release

          "},{"location":"nebula-bench/#test_process","title":"Test process","text":"

          For detailed usage instructions, see NebulaGraph Bench.

          "},{"location":"nebula-console/","title":"NebulaGraph Console","text":"

          NebulaGraph Console is a native CLI client for NebulaGraph. It can be used to connect a NebulaGraph cluster and execute queries. It also supports special commands to manage parameters, export query results, import test datasets, etc.

          "},{"location":"nebula-console/#compatibility_with_nebulagraph","title":"Compatibility with NebulaGraph","text":"

          See github.

          "},{"location":"nebula-console/#obtain_nebulagraph_console","title":"Obtain NebulaGraph Console","text":"

          You can obtain NebulaGraph Console in the following ways:

          • Download the binary file from the GitHub releases page.
          • Compile the source code to obtain the binary file. For more information, see Install from source code.
          "},{"location":"nebula-console/#nebulagraph_console_functions","title":"NebulaGraph Console functions","text":""},{"location":"nebula-console/#connect_to_nebulagraph","title":"Connect to NebulaGraph","text":"

          To connect to NebulaGraph with the nebula-console file, use the following syntax:

          <path_of_console> -addr <ip> -port <port> -u <username> -p <password>\n
          • path_of_console indicates the storage path of the NebulaGraph Console binary file.
          • When two-way authentication is required after SSL encryption is enabled, you need to specify SSL-related parameters when connecting.

          For example:

          • Direct link to NebulaGraph

            ./nebula-console -addr 192.168.8.100 -port 9669 -u root -p nebula\n
          • Enable SSL encryption and require two-way authentication

            ./nebula-console -addr 192.168.8.100 -port 9669 -u root  -p nebula -enable_ssl -ssl_root_ca_path /home/xxx/cert/root.crt -ssl_cert_path /home/xxx/cert/client.crt -ssl_private_key_path /home/xxx/cert/client.key\n

          Parameter descriptions are as follows:

          Parameter Description -h/-help Shows the help menu. -addr/-address Sets the IP or hostname of the Graph service. The default address is 127.0.0.1. -P/-port Sets the port number of the graphd service. The default port number is 9669. -u/-user Sets the username of your NebulaGraph account. Before enabling authentication, you can use any existing username. The default username is root. -p/-password Sets the password of your NebulaGraph account. Before enabling authentication, you can use any characters as the password. -t/-timeout Sets an integer-type timeout threshold of the connection. The unit is millisecond. The default value is 120. -e/-eval Sets a string-type nGQL statement. The nGQL statement is executed once the connection succeeds. The connection stops after the result is returned. -f/-file Sets the path of an nGQL file. The nGQL statements in the file are executed once the connection succeeds. The result will be returned and the connection stops then. -enable_ssl Enables SSL encryption when connecting to NebulaGraph. -ssl_root_ca_path Sets the storage path of the certification authority file. -ssl_cert_path Sets the storage path of the certificate file. -ssl_private_key_path Sets the storage path of the private key file. -ssl_insecure_skip_verify Specifies whether the client skips verifying the server's certificate chain and hostname. The default is false. If set to true, any certificate chain and hostname provided by the server is accepted.

          For information on more parameters, see the project repository.

          "},{"location":"nebula-console/#manage_parameters","title":"Manage parameters","text":"

          You can save parameters for parameterized queries.

          Note

          • Setting a parameter as a VID in a query is not supported.
          • Parameters are not supported in SAMPLE clauses.
          • Parameters are deleted when their sessions are released.
          • The command to save a parameter is as follows:

            nebula> :param <param_name> => <param_value>;\n

            The example is as follows:

            nebula> :param p1 => \"Tim Duncan\";\nnebula> MATCH (v:player{name:$p1})-[:follow]->(n)  RETURN v,n;\n+----------------------------------------------------+-------------------------------------------------------+\n| v                                                  | n                                                     |\n+----------------------------------------------------+-------------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) | (\"player125\" :player{age: 41, name: \"Manu Ginobili\"}) |\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) | (\"player101\" :player{age: 36, name: \"Tony Parker\"})   |\n+----------------------------------------------------+-------------------------------------------------------+\nnebula> :param p2 => {\"a\":3,\"b\":false,\"c\":\"Tim Duncan\"};\nnebula> RETURN $p2.b AS b;\n+-------+\n| b     |\n+-------+\n| false |\n+-------+\n
          • The command to view the saved parameters is as follows:

            nebula> :params;\n
          • The command to view the specified parameters is as follows:

            nebula> :params <param_name>;\n
          • The command to delete a specified parameter is as follows:

            nebula> :param <param_name> =>;\n
          "},{"location":"nebula-console/#export_query_results","title":"Export query results","text":"

          Export query results, which can be saved as a CSV file, DOT file, and a format of Profile or Explain.

          Note

          • The exported file is stored in the working directory, i.e., what the linux command pwd shows.
          • This command only works for the next query statement.
          • You can copy the contents of the DOT file and paste them in GraphvizOnline to generate a visualized execution plan.
          • The command to export a csv file is as follows:

            nebula> :CSV <file_name.csv>;\n
          • The command to export a DOT file is as follows:

            nebula> :dot <file_name.dot>\n

            The example is as follows:

            nebula> :dot a.dot\nnebula> PROFILE FORMAT=\"dot\" GO FROM \"player100\" OVER follow;\n
          • The command to export a PROFILE or EXPLAIN format is as follows:

            nebula> :profile <file_name>;\n
            or

            nebula> :explain <file_name>;\n

            Note

            The text file output by the above command is the preferred way to report issues in GitHub and execution plans in forums, and for graph query tuning because it has more information and is more readable than a screenshot or CSV file in Studio.

            The example is as follows:

            nebula> :profile profile.log\nnebula> PROFILE GO FROM \"player102\" OVER serve YIELD dst(edge);\nnebula> :profile profile.dot\nnebula> PROFILE FORMAT=\"dot\" GO FROM \"player102\" OVER serve YIELD dst(edge);\nnebula> :explain explain.log\nnebula> EXPLAIN GO FROM \"player102\" OVER serve YIELD dst(edge);\n
          "},{"location":"nebula-console/#import_a_testing_dataset","title":"Import a testing dataset","text":"

          The testing dataset is named basketballplayer. To view details about the schema and data, use the corresponding SHOW command.

          The command to import a testing dataset is as follows:

          nebula> :play basketballplayer\n
          "},{"location":"nebula-console/#run_a_command_multiple_times","title":"Run a command multiple times","text":"

          To run a command multiple times, use the following command:

          nebula> :repeat N\n

          The example is as follows:

          nebula> :repeat 3\nnebula> GO FROM \"player100\" OVER follow YIELD dst(edge);\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player101\" |\n| \"player125\" |\n+-------------+\nGot 2 rows (time spent 2602/3214 us)\n\nFri, 20 Aug 2021 06:36:05 UTC\n\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player101\" |\n| \"player125\" |\n+-------------+\nGot 2 rows (time spent 583/849 us)\n\nFri, 20 Aug 2021 06:36:05 UTC\n\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player101\" |\n| \"player125\" |\n+-------------+\nGot 2 rows (time spent 496/671 us)\n\nFri, 20 Aug 2021 06:36:05 UTC\n\nExecuted 3 times, (total time spent 3681/4734 us), (average time spent 1227/1578 us)\n
          "},{"location":"nebula-console/#sleep","title":"Sleep","text":"

          This command will make NebulaGraph Console sleep for N seconds. The schema is altered in an async way and takes effect in the next heartbeat cycle. Therefore, this command is usually used when altering schema. The command is as follows:

          nebula> :sleep N\n
          "},{"location":"nebula-console/#disconnect_nebulagraph_console_from_nebulagraph","title":"Disconnect NebulaGraph Console from NebulaGraph","text":"

          You can use :EXIT or :QUIT to disconnect from NebulaGraph. For convenience, NebulaGraph Console supports using these commands in lower case without the colon (\":\"), such as quit.

          The example is as follows:

          nebula> :QUIT\n\nBye root!\n
          "},{"location":"1.introduction/1.what-is-nebula-graph/","title":"What is NebulaGraph","text":"

          NebulaGraph is an open-source, distributed, easily scalable, and native graph database. It is capable of hosting graphs with hundreds of billions of vertices and trillions of edges, and serving queries with millisecond-latency.

          "},{"location":"1.introduction/1.what-is-nebula-graph/#what_is_a_graph_database","title":"What is a graph database","text":"

          A graph database, such as NebulaGraph, is a database that specializes in storing vast graph networks and retrieving information from them. It efficiently stores data as vertices (nodes) and edges (relationships) in labeled property graphs. Properties can be attached to both vertices and edges. Each vertex can have one or multiple tags (labels).

          Graph databases are well suited for storing most kinds of data models abstracted from reality. Things are connected in almost all fields in the world. Modeling systems like relational databases extract the relationships between entities and squeeze them into table columns alone, with their types and properties stored in other columns or even other tables. This makes data management time-consuming and cost-ineffective.

          NebulaGraph, as a typical native graph database, allows you to store the rich relationships as edges with edge types and properties directly attached to them.

          "},{"location":"1.introduction/1.what-is-nebula-graph/#advantages_of_nebulagraph","title":"Advantages of NebulaGraph","text":""},{"location":"1.introduction/1.what-is-nebula-graph/#open_source","title":"Open source","text":"

          NebulaGraph is open under the Apache 2.0 License. More and more people such as database developers, data scientists, security experts, and algorithm engineers are participating in the designing and development of NebulaGraph. To join the opening of source code and ideas, surf the NebulaGraph GitHub page.

          "},{"location":"1.introduction/1.what-is-nebula-graph/#outstanding_performance","title":"Outstanding performance","text":"

          Written in C++ and born for graphs, NebulaGraph handles graph queries in milliseconds. Among most databases, NebulaGraph shows superior performance in providing graph data services. The larger the data size, the greater the superiority of NebulaGraph.For more information, see NebulaGraph benchmarking.

          "},{"location":"1.introduction/1.what-is-nebula-graph/#high_scalability","title":"High scalability","text":"

          NebulaGraph is designed in a shared-nothing architecture and supports scaling in and out without interrupting the database service.

          "},{"location":"1.introduction/1.what-is-nebula-graph/#developer_friendly","title":"Developer friendly","text":"

          NebulaGraph supports clients in popular programming languages like Java, Python, C++, and Go, and more are under development. For more information, see NebulaGraph clients.

          "},{"location":"1.introduction/1.what-is-nebula-graph/#reliable_access_control","title":"Reliable access control","text":"

          NebulaGraph supports strict role-based access control and external authentication servers such as LDAP (Lightweight Directory Access Protocol) servers to enhance data security. For more information, see Authentication and authorization.

          "},{"location":"1.introduction/1.what-is-nebula-graph/#diversified_ecosystem","title":"Diversified ecosystem","text":"

          More and more native tools of NebulaGraph have been released, such as NebulaGraph Studio, NebulaGraph Console, and NebulaGraph Exchange. For more ecosystem tools, see Ecosystem tools overview.

          Besides, NebulaGraph has the ability to be integrated with many cutting-edge technologies, such as Spark, Flink, and HBase, for the purpose of mutual strengthening in a world of increasing challenges and chances.

          "},{"location":"1.introduction/1.what-is-nebula-graph/#opencypher-compatible_query_language","title":"OpenCypher-compatible query language","text":"

          The native NebulaGraph Query Language, also known as nGQL, is a declarative, openCypher-compatible textual query language. It is easy to understand and easy to use. For more information, see nGQL guide.

          "},{"location":"1.introduction/1.what-is-nebula-graph/#future-oriented_hardware_with_balanced_reading_and_writing","title":"Future-oriented hardware with balanced reading and writing","text":"

          Solid-state drives have extremely high performance and they are getting cheaper. NebulaGraph is a product based on SSD. Compared with products based on HDD and large memory, it is more suitable for future hardware trends and easier to achieve balanced reading and writing.

          "},{"location":"1.introduction/1.what-is-nebula-graph/#easy_data_modeling_and_high_flexibility","title":"Easy data modeling and high flexibility","text":"

          You can easily model the connected data into NebulaGraph for your business without forcing them into a structure such as a relational table, and properties can be added, updated, and deleted freely. For more information, see Data modeling.

          "},{"location":"1.introduction/1.what-is-nebula-graph/#high_popularity","title":"High popularity","text":"

          NebulaGraph is being used by tech leaders such as Tencent, Vivo, Meituan, and JD Digits. For more information, visit the NebulaGraph official website.

          "},{"location":"1.introduction/1.what-is-nebula-graph/#use_cases","title":"Use cases","text":"

          NebulaGraph can be used to support various graph-based scenarios. To spare the time spent on pushing the kinds of data mentioned in this section into relational databases and on bothering with join queries, use NebulaGraph.

          "},{"location":"1.introduction/1.what-is-nebula-graph/#fraud_detection","title":"Fraud detection","text":"

          Financial institutions have to traverse countless transactions to piece together potential crimes and understand how combinations of transactions and devices might be related to a single fraud scheme. This kind of scenario can be modeled in graphs, and with the help of NebulaGraph, fraud rings and other sophisticated scams can be easily detected.

          "},{"location":"1.introduction/1.what-is-nebula-graph/#real-time_recommendation","title":"Real-time recommendation","text":"

          NebulaGraph offers the ability to instantly process the real-time information produced by a visitor and make accurate recommendations on articles, videos, products, and services.

          "},{"location":"1.introduction/1.what-is-nebula-graph/#intelligent_question-answer_system","title":"Intelligent question-answer system","text":"

          Natural languages can be transformed into knowledge graphs and stored in NebulaGraph. A question organized in a natural language can be resolved by a semantic parser in an intelligent question-answer system and re-organized. Then, possible answers to the question can be retrieved from the knowledge graph and provided to the one who asked the question.

          "},{"location":"1.introduction/1.what-is-nebula-graph/#social_networking","title":"Social networking","text":"

          Information on people and their relationships is typical graph data. NebulaGraph can easily handle the social networking information of billions of people and trillions of relationships, and provide lightning-fast queries for friend recommendations and job promotions in the case of massive concurrency.

          "},{"location":"1.introduction/1.what-is-nebula-graph/#related_links","title":"Related links","text":"
          • Official website
          • Docs
          • Blogs
          • Forum
          • GitHub
          "},{"location":"1.introduction/2.1.path/","title":"Path types","text":"

          In graph theory, a path in a graph is a finite or infinite sequence of edges which joins a sequence of vertices. Paths are fundamental concepts of graph theory.

          Paths can be categorized into 3 types: walk, trail, and path. For more information, see Wikipedia.

          The following figure is an example for a brief introduction.

          "},{"location":"1.introduction/2.1.path/#walk","title":"Walk","text":"

          A walk is a finite or infinite sequence of edges. Both vertices and edges can be repeatedly visited in graph traversal.

          In the above figure C, D, and E form a cycle. So, this figure contains infinite paths, such as A->B->C->D->E, A->B->C->D->E->C, and A->B->C->D->E->C->D.

          Note

          GO statements use walk.

          "},{"location":"1.introduction/2.1.path/#trail","title":"Trail","text":"

          A trail is a finite sequence of edges. Only vertices can be repeatedly visited in graph traversal. The Seven Bridges of K\u00f6nigsberg is a typical trail.

          In the above figure, edges cannot be repeatedly visited. So, this figure contains finite paths. The longest path in this figure consists of 5 edges: A->B->C->D->E->C.

          Note

          MATCH, FIND PATH, and GET SUBGRAPH statements use trail.

          There are two special cases of trail, cycle and circuit. The following figure is an example for a brief introduction.

          • cycle

            A cycle refers to a closed trail. Only the terminal vertices can be repeatedly visited. The longest path in this figure consists of 3 edges: A->B->C->A or C->D->E->C.

          • circuit

            A circuit refers to a closed trail. Edges cannot be repeatedly visited in graph traversal. Apart from the terminal vertices, other vertices can also be repeatedly visited. The longest path in this figure: A->B->C->D->E->C->A.

          "},{"location":"1.introduction/2.1.path/#path","title":"Path","text":"

          A path is a finite sequence of edges. Neither vertices nor edges can be repeatedly visited in graph traversal.

          So, the above figure contains finite paths. The longest path in this figure consists of 4 edges: A->B->C->D->E.

          "},{"location":"1.introduction/2.data-model/","title":"Data modeling","text":"

          A data model is a model that organizes data and specifies how they are related to one another. This topic describes the Nebula\u00a0Graph data model and provides suggestions for data modeling with NebulaGraph.

          "},{"location":"1.introduction/2.data-model/#data_structures","title":"Data structures","text":"

          NebulaGraph data model uses six data structures to store data. They are graph spaces, vertices, edges, tags, edge types and properties.

          • Graph spaces: Graph spaces are used to isolate data from different teams or programs. Data stored in different graph spaces are securely isolated. Storage replications, privileges, and partitions can be assigned.
          • Vertices: Vertices are used to store entities.
          • In NebulaGraph, vertices are identified with vertex identifiers (i.e. VID). The VID must be unique in the same graph space. VID should be int64, or fixed_string(N).

            • A vertex has zero to multiple tags.

            Compatibility

            In NebulaGraph 2.x a vertex must have at least one tag. And in NebulaGraph master, a tag is not required for a vertex.

          • Edges: Edges are used to connect vertices. An edge is a connection or behavior between two vertices.
            • There can be multiple edges between two vertices.
            • Edges are directed. -> identifies the directions of edges. Edges can be traversed in either direction.
            • An edge is identified uniquely with <a source vertex, an edge type, a rank value, and a destination vertex>. Edges have no EID.
            • An edge must have one and only one edge type.
            • The rank value is an immutable user-assigned 64-bit signed integer. It identifies the edges with the same edge type between two vertices. Edges are sorted by their rank values. The edge with the greatest rank value is listed first. The default rank value is zero.
          • Tags: Tags are used to categorize vertices. Vertices that have the same tag share the same definition of properties.
          • Edge types: Edge types are used to categorize edges. Edges that have the same edge type share the same definition of properties.
          • Properties: Properties are key-value pairs. Both vertices and edges are containers for properties.

          Note

          Tags and Edge types are similar to \"vertex tables\" and \"edge tables\" in the relational databases.

          "},{"location":"1.introduction/2.data-model/#directed_property_graph","title":"Directed property graph","text":"

          NebulaGraph stores data in directed property graphs. A directed property graph has a set of vertices connected by directed edges. Both vertices and edges can have properties. A directed property graph is represented as:

          G = < V, E, PV, PE >

          • V is a set of vertices.
          • E is a set of directed edges.
          • PV is the property of vertices.
          • PE is the property of edges.

          The following table is an example of the structure of the basketball player dataset. We have two types of vertices, that is player and team, and two types of edges, that is serve and follow.

          Element Name Property name (Data type) Description Tag player name (string) age (int) Represents players in the team. The properties name and age indicate the name and age. Tag team name (string) Represents the teams. The property name indicates the team name. Edge type serve start_year (int) end_year (int) Represents the action of a player serving a team. The action links the player to the team, and the direction is from the player to the team.The properties start_year and end_year indicate the start year and end year of the service respectively. Edge type follow degree (int) Represents the action of a player following another player on Twitter. The action links one player to the other player, and the direction is from one player to the other player.The property degree indicates the rating on how well the follower liked the followee.

          Note

          NebulaGraph supports only directed edges.

          Compatibility

          NebulaGraph master allows dangling edges. Therefore, when adding or deleting, you need to ensure the corresponding source vertex and destination vertex of an edge exist. For details, see INSERT VERTEX, DELETE VERTEX, INSERT EDGE, and DELETE EDGE.

          The MERGE statement in openCypher is not supported.

          "},{"location":"1.introduction/3.vid/","title":"VID","text":"

          In a graph space, a vertex is uniquely identified by its ID, which is called a VID or a Vertex ID.

          "},{"location":"1.introduction/3.vid/#features","title":"Features","text":"
          • The data types of VIDs are restricted to FIXED_STRING(<N>) or INT64. One graph space can only select one VID type.
          • A VID in a graph space is unique. It functions just as a primary key in a relational database. VIDs in different graph spaces are independent.
          • The VID generation method must be set by users, because NebulaGraph does not provide auto increasing ID, or UUID.
          • Vertices with the same VID will be identified as the same one. For example:

            • A VID is the unique identifier of an entity, like a person's ID card number. A tag means the type of an entity, such as driver, and boss. Different tags define two groups of different properties, such as driving license number, driving age, order amount, order taking alt, and job number, payroll, debt ceiling, business phone number.
            • When two INSERT statements (neither uses a parameter of IF NOT EXISTS) with the same VID and tag are operated at the same time, the latter INSERT will overwrite the former.
            • When two INSERT statements with the same VID but different tags, like TAG A and TAG B, are operated at the same time, the operation of Tag A will not affect Tag B.
          • VIDs will usually be indexed and stored into memory (in the way of LSM-tree). Thus, direct access to VIDs enjoys peak performance.
          "},{"location":"1.introduction/3.vid/#vid_operation","title":"VID Operation","text":"
          • NebulaGraph 1.x only supports INT64 while NebulaGraph 2.x supports INT64 and FIXED_STRING(<N>). In CREATE SPACE, VID types can be set via vid_type.
          • id() function can be used to specify or locate a VID.
          • LOOKUP or MATCH statements can be used to find a VID via property index.
          • Direct access to vertices statements via VIDs enjoys peak performance, such as DELETE xxx WHERE id(xxx) == \"player100\" or GO FROM \"player100\". Finding VIDs via properties and then operating the graph will cause poor performance, such as LOOKUP | GO FROM $-.ids, which will run both LOOKUP and | one more time.
          "},{"location":"1.introduction/3.vid/#vid_generation","title":"VID Generation","text":"

          VIDs can be generated via applications. Here are some tips:

          • (Optimal) Directly take a unique primary key or property as a VID. Property access depends on the VID.
          • Generate a VID via a unique combination of properties. Property access depends on property index.
          • Generate a VID via algorithms like snowflake. Property access depends on property index.
          • If short primary keys greatly outnumber long primary keys, do not enlarge the N of FIXED_STRING(<N>) too much. Otherwise, it will occupy a lot of memory and hard disks, and slow down performance. Generate VIDs via BASE64, MD5, hash by encoding and splicing.
          • If you generate int64 VID via hash, the probability of collision is about 1/10 when there are 1 billion vertices. The number of edges has no concern with the probability of collision.
          "},{"location":"1.introduction/3.vid/#define_and_modify_a_vid_and_its_data_type","title":"Define and modify a VID and its data type","text":"

          The data type of a VID must be defined when you create the graph space. Once defined, it cannot be modified.

          A VID is set when you insert a vertex and cannot be modified.

          "},{"location":"1.introduction/3.vid/#query_start_vid_and_global_scan","title":"Query start vid and global scan","text":"

          In most cases, the execution plan of query statements in NebulaGraph (MATCH, GO, and LOOKUP) must query the start vid in a certain way.

          There are only two ways to locate start vid:

          1. For example, GO FROM \"player100\" OVER explicitly indicates in the statement that start vid is \"player100\".

          2. For example, LOOKUP ON player WHERE player.name == \"Tony Parker\" or MATCH (v:player {name:\"Tony Parker\"}) locates start vid by the index of the property player.name.

          "},{"location":"1.introduction/3.nebula-graph-architecture/1.architecture-overview/","title":"Architecture overview","text":"

          NebulaGraph consists of three services: the Graph Service, the Storage Service, and the Meta Service. It applies the separation of storage and computing architecture.

          Each service has its executable binaries and processes launched from the binaries. Users can deploy a NebulaGraph cluster on a single machine or multiple machines using these binaries.

          The following figure shows the architecture of a typical NebulaGraph cluster.

          "},{"location":"1.introduction/3.nebula-graph-architecture/1.architecture-overview/#the_meta_service","title":"The Meta Service","text":"

          The Meta Service in the NebulaGraph architecture is run by the nebula-metad processes. It is responsible for metadata management, such as schema operations, cluster administration, and user privilege management.

          For details on the Meta Service, see Meta Service.

          "},{"location":"1.introduction/3.nebula-graph-architecture/1.architecture-overview/#the_graph_service_and_the_storage_service","title":"The Graph Service and the Storage Service","text":"

          NebulaGraph applies the separation of storage and computing architecture. The Graph Service is responsible for querying. The Storage Service is responsible for storage. They are run by different processes, i.e., nebula-graphd and nebula-storaged. The benefits of the separation of storage and computing architecture are as follows:

          • Great scalability

            The separated structure makes both the Graph Service and the Storage Service flexible and easy to scale in or out.

          • High availability

            If part of the Graph Service fails, the data stored by the Storage Service suffers no loss. And if the rest part of the Graph Service is still able to serve the clients, service recovery can be performed quickly, even unfelt by the users.

          • Cost-effective

            The separation of storage and computing architecture provides a higher resource utilization rate, and it enables clients to manage the cost flexibly according to business demands.

          • Open to more possibilities

            With the ability to run separately, the Graph Service may work with multiple types of storage engines, and the Storage Service may also serve more types of computing engines.

          For details on the Graph Service and the Storage Service, see Graph Service and Storage Service.

          "},{"location":"1.introduction/3.nebula-graph-architecture/2.meta-service/","title":"Meta Service","text":"

          This topic introduces the architecture and functions of the Meta Service.

          "},{"location":"1.introduction/3.nebula-graph-architecture/2.meta-service/#the_architecture_of_the_meta_service","title":"The architecture of the Meta Service","text":"

          The architecture of the Meta Service is as follows:

          The Meta Service is run by nebula-metad processes. Users can deploy nebula-metad processes according to the scenario:

          • In a test environment, users can deploy one or three nebula-metad processes on different machines or a single machine.
          • In a production environment, we recommend that users deploy three nebula-metad processes on different machines for high availability.

          All the nebula-metad processes form a Raft-based cluster, with one process as the leader and the others as the followers.

          The leader is elected by the majorities and only the leader can provide service to the clients or other components of NebulaGraph. The followers will be run in a standby way and each has a data replication of the leader. Once the leader fails, one of the followers will be elected as the new leader.

          Note

          The data of the leader and the followers will keep consistent through Raft. Thus the breakdown and election of the leader will not cause data inconsistency. For more information on Raft, see Storage service architecture.

          "},{"location":"1.introduction/3.nebula-graph-architecture/2.meta-service/#functions_of_the_meta_service","title":"Functions of the Meta Service","text":""},{"location":"1.introduction/3.nebula-graph-architecture/2.meta-service/#manages_user_accounts","title":"Manages user accounts","text":"

          The Meta Service stores the information of user accounts and the privileges granted to the accounts. When the clients send queries to the Meta Service through an account, the Meta Service checks the account information and whether the account has the right privileges to execute the queries or not.

          For more information on NebulaGraph access control, see Authentication.

          "},{"location":"1.introduction/3.nebula-graph-architecture/2.meta-service/#manages_partitions","title":"Manages partitions","text":"

          The Meta Service stores and manages the locations of the storage partitions and helps balance the partitions.

          "},{"location":"1.introduction/3.nebula-graph-architecture/2.meta-service/#manages_graph_spaces","title":"Manages graph spaces","text":"

          NebulaGraph supports multiple graph spaces. Data stored in different graph spaces are securely isolated. The Meta Service stores the metadata of all graph spaces and tracks the changes of them, such as adding or dropping a graph space.

          "},{"location":"1.introduction/3.nebula-graph-architecture/2.meta-service/#manages_schema_information","title":"Manages schema information","text":"

          NebulaGraph is a strong-typed graph database. Its schema contains tags (i.e., the vertex types), edge types, tag properties, and edge type properties.

          The Meta Service stores the schema information. Besides, it performs the addition, modification, and deletion of the schema, and logs the versions of them.

          For more information on NebulaGraph schema, see Data model.

          "},{"location":"1.introduction/3.nebula-graph-architecture/2.meta-service/#manages_ttl_information","title":"Manages TTL information","text":"

          The Meta Service stores the definition of TTL (Time to Live) options which are used to control data expiration. The Storage Service takes care of the expiring and evicting processes. For more information, see TTL.

          "},{"location":"1.introduction/3.nebula-graph-architecture/2.meta-service/#manages_jobs","title":"Manages jobs","text":"

          The Job Management module in the Meta Service is responsible for the creation, queuing, querying, and deletion of jobs.

          "},{"location":"1.introduction/3.nebula-graph-architecture/3.graph-service/","title":"Graph Service","text":"

          The Graph Service is used to process the query. It has four submodules: Parser, Validator, Planner, and Executor. This topic will describe the Graph Service accordingly.

          "},{"location":"1.introduction/3.nebula-graph-architecture/3.graph-service/#the_architecture_of_the_graph_service","title":"The architecture of the Graph Service","text":"

          After a query is sent to the Graph Service, it will be processed by the following four submodules:

          1. Parser: Performs lexical analysis and syntax analysis.

          2. Validator: Validates the statements.

          3. Planner: Generates and optimizes the execution plans.

          4. Executor: Executes the plans with operators.

          "},{"location":"1.introduction/3.nebula-graph-architecture/3.graph-service/#parser","title":"Parser","text":"

          After receiving a request, the statements will be parsed by Parser composed of Flex (lexical analysis tool) and Bison (syntax analysis tool), and its corresponding AST will be generated. Statements will be directly intercepted in this stage because of their invalid syntax.

          For example, the structure of the AST of GO FROM \"Tim\" OVER like WHERE properties(edge).likeness > 8.0 YIELD dst(edge) is shown in the following figure.

          "},{"location":"1.introduction/3.nebula-graph-architecture/3.graph-service/#validator","title":"Validator","text":"

          Validator performs a series of validations on the AST. It mainly works on these tasks:

          • Validating metadata

            Validator will validate whether the metadata is correct or not.

            When parsing the OVER, WHERE, and YIELD clauses, Validator looks up the Schema and verifies whether the edge type and tag data exist or not. For an INSERT statement, Validator verifies whether the types of the inserted data are the same as the ones defined in the Schema.

          • Validating contextual reference

            Validator will verify whether the cited variable exists or not, or whether the cited property is variable or not.

            For composite statements, like $var = GO FROM \"Tim\" OVER like YIELD dst(edge) AS ID; GO FROM $var.ID OVER serve YIELD dst(edge), Validator verifies first to see if var is defined, and then to check if the ID property is attached to the var variable.

          • Validating type inference

            Validator infers what type the result of an expression is and verifies the type against the specified clause.

            For example, the WHERE clause requires the result to be a bool value, a NULL value, or empty.

          • Validating the information of *

            Validator needs to verify all the Schema that involves * when verifying the clause if there is a * in the statement.

            Take a statement like GO FROM \"Tim\" OVER * YIELD dst(edge), properties(edge).likeness, dst(edge) as an example. When verifying the OVER clause, Validator needs to verify all the edge types. If the edge type includes like and serve, the statement would be GO FROM \"Tim\" OVER like,serve YIELD dst(edge), properties(edge).likeness, dst(edge).

          • Validating input and output

            Validator will check the consistency of the clauses before and after the |.

            In the statement GO FROM \"Tim\" OVER like YIELD dst(edge) AS ID | GO FROM $-.ID OVER serve YIELD dst(edge), Validator will verify whether $-.ID is defined in the clause before the |.

          When the validation succeeds, an execution plan will be generated. Its data structure will be stored in the src/planner directory.

          "},{"location":"1.introduction/3.nebula-graph-architecture/3.graph-service/#planner","title":"Planner","text":"

          In the nebula-graphd.conf file, when enable_optimizer is set to be false, Planner will not optimize the execution plans generated by Validator. It will be executed by Executor directly.

          In the nebula-graphd.conf file, when enable_optimizer is set to be true, Planner will optimize the execution plans generated by Validator. The structure is as follows.

          • Before optimization

            In the execution plan on the right side of the preceding figure, each node directly depends on other nodes. For example, the root node Project depends on the Filter node, the Filter node depends on the GetNeighbor node, and so on, up to the leaf node Start. Then the execution plan is (not truly) executed.

            During this stage, every node has its input and output variables, which are stored in a hash table. The execution plan is not truly executed, so the value of each key in the associated hash table is empty (except for the Start node, where the input variables hold the starting data), and the hash table is defined in src/context/ExecutionContext.cpp under the nebula-graph repository.

            For example, if the hash table is named as ResultMap when creating the Filter node, users can determine that the node takes data from ResultMap[\"GN1\"], then puts the result into ResultMap[\"Filter2\"], and so on. All these work as the input and output of each node.

          • Process of optimization

            The optimization rules that Planner has implemented so far are considered RBO (Rule-Based Optimization), namely the pre-defined optimization rules. The CBO (Cost-Based Optimization) feature is under development. The optimized code is in the src/optimizer/ directory under the nebula-graph repository.

            RBO is a \u201cbottom-up\u201d exploration process. For each rule, the root node of the execution plan (in this case, the Project node) is the entry point, and step by step along with the node dependencies, it reaches the node at the bottom to see if it matches the rule.

            As shown in the preceding figure, when the Filter node is explored, it is found that its children node is GetNeighbors, which matches successfully with the pre-defined rules, so a transformation is initiated to integrate the Filter node into the GetNeighbors node, the Filter node is removed, and then the process continues to the next rule. Therefore, when the GetNeighbor operator calls interfaces of the Storage layer to get the neighboring edges of a vertex during the execution stage, the Storage layer will directly filter out the unqualified edges internally. Such optimization greatly reduces the amount of data transfer, which is commonly known as filter pushdown.

          "},{"location":"1.introduction/3.nebula-graph-architecture/3.graph-service/#executor","title":"Executor","text":"

          The Executor module consists of Scheduler and Executor. The Scheduler generates the corresponding execution operators against the execution plan, starting from the leaf nodes and ending at the root node. The structure is as follows.

          Each node of the execution plan has one execution operator node, whose input and output have been determined in the execution plan. Each operator only needs to get the values for the input variables, compute them, and finally put the results into the corresponding output variables. Therefore, it is only necessary to execute step by step from Start, and the result of the last operator is returned to the user as the final result.

          "},{"location":"1.introduction/3.nebula-graph-architecture/3.graph-service/#source_code_hierarchy","title":"Source code hierarchy","text":"

          The source code hierarchy under the nebula-graph repository is as follows.

          |--src\n   |--graph\n      |--context    //contexts for validation and execution\n      |--executor   //execution operators\n      |--gc         //garbage collector\n      |--optimizer  //optimization rules\n      |--planner    //structure of the execution plans\n      |--scheduler  //scheduler\n      |--service    //external service management\n      |--session    //session management\n      |--stats      //monitoring metrics\n      |--util       //basic components\n      |--validator  //validation of the statements\n      |--visitor    //visitor expression\n
          "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/","title":"Storage Service","text":"

          The persistent data of NebulaGraph have two parts. One is the Meta Service that stores the meta-related data.

          The other is the Storage Service that stores the data, which is run by the nebula-storaged process. This topic will describe the architecture of the Storage Service.

          "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#advantages","title":"Advantages","text":"
          • High performance (Customized built-in KVStore)
          • Great scalability (Shared-nothing architecture, not rely on NAS/SAN-like devices)
          • Strong consistency (Raft)
          • High availability (Raft)
          • Supports synchronizing with the third party systems, such as Elasticsearch.
          "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#the_architecture_of_the_storage_service","title":"The architecture of the Storage Service","text":"

          The Storage Service is run by the nebula-storaged process. Users can deploy nebula-storaged processes on different occasions. For example, users can deploy 1 nebula-storaged process in a test environment and deploy 3 nebula-storaged processes in a production environment.

          All the nebula-storaged processes consist of a Raft-based cluster. There are three layers in the Storage Service:

          • Storage interface

            The top layer is the storage interface. It defines a set of APIs that are related to the graph concepts. These API requests will be translated into a set of KV operations targeting the corresponding Partition. For example:

            • getNeighbors: queries the in-edge or out-edge of a set of vertices, returns the edges and the corresponding properties, and supports conditional filtering.
            • insert vertex/edge: inserts a vertex or edge and its properties.
            • getProps: gets the properties of a vertex or an edge.

            It is this layer that makes the Storage Service a real graph storage. Otherwise, it is just a KV storage.

          • Consensus

            Below the storage interface is the consensus layer that implements Multi Group Raft, which ensures the strong consistency and high availability of the Storage Service.

          • Store engine

            The bottom layer is the local storage engine library, providing operations like get, put, and scan on local disks. The related interfaces are stored in KVStore.h and KVEngine.h files. You can develop your own local store plugins based on your needs.

          The following will describe some features of the Storage Service based on the above architecture.

          "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#storage_writing_process","title":"Storage writing process","text":""},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#kvstore","title":"KVStore","text":"

          NebulaGraph develops and customizes its built-in KVStore for the following reasons.

          • It is a high-performance KVStore.
          • It is provided as a (kv) library and can be easily developed for the filter pushdown purpose. As a strong-typed database, how to provide Schema during pushdown is the key to efficiency for NebulaGraph.
          • It has strong data consistency.

          Therefore, NebulaGraph develops its own KVStore with RocksDB as the local storage engine. The advantages are as follows.

          • For multiple local hard disks, NebulaGraph can make full use of its concurrent capacities through deploying multiple data directories.
          • The Meta Service manages all the Storage servers. All the partition distribution data and current machine status can be found in the meta service. Accordingly, users can execute a manual load balancing plan in meta service.

            Note

            NebulaGraph does not support auto load balancing because auto data transfer will affect online business.

          • NebulaGraph provides its own WAL mode so one can customize the WAL. Each partition owns its WAL.
          • One NebulaGraph KVStore cluster supports multiple graph spaces, and each graph space has its own partition number and replica copies. Different graph spaces are isolated physically from each other in the same cluster.
          "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#data_storage_structure","title":"Data storage structure","text":"

          Graphs consist of vertices and edges. NebulaGraph uses key-value pairs to store vertices, edges, and their properties. Vertices and edges are stored in keys and their properties are stored in values. Such structure enables efficient property filtering.

          • The storage structure of vertices

            Different from NebulaGraph version 2.x, version 3.x added a new key for each vertex. Compared to the old key that still exists, the new key has no TagID field and no value. Vertices in NebulaGraph can now live without tags owing to the new key.

            Field Description Type One byte, used to indicate the key type. PartID Three bytes, used to indicate the sharding partition and to scan the partition data based on the prefix when re-balancing the partition. VertexID The vertex ID. For an integer VertexID, it occupies eight bytes. However, for a string VertexID, it is changed to fixed_string of a fixed length which needs to be specified by users when they create the space. TagID Four bytes, used to indicate the tags that vertex relate with. SerializedValue The serialized value of the key. It stores the property information of the vertex.
          • The storage structure of edges

            Field Description Type One byte, used to indicate the key type. PartID Three bytes, used to indicate the partition ID. This field can be used to scan the partition data based on the prefix when re-balancing the partition. VertexID Used to indicate vertex ID. The former VID refers to the source VID in the outgoing edge and the dest VID in the incoming edge, while the latter VID refers to the dest VID in the outgoing edge and the source VID in the incoming edge. Edge Type Four bytes, used to indicate the edge type. Greater than zero indicates out-edge, less than zero means in-edge. Rank Eight bytes, used to indicate multiple edges in one edge type. Users can set the field based on needs and store weight, such as transaction time and transaction number. PlaceHolder One byte. Reserved. SerializedValue The serialized value of the key. It stores the property information of the edge.
          "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#property_descriptions","title":"Property descriptions","text":"

          NebulaGraph uses strong-typed Schema.

          NebulaGraph will store the properties of vertex and edges in order after encoding them. Since the length of fixed-length properties is fixed, queries can be made in no time according to offset. Before decoding, NebulaGraph needs to get (and cache) the schema information in the Meta Service. In addition, when encoding properties, NebulaGraph will add the corresponding schema version to support online schema change.

          "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#data_partitioning","title":"Data partitioning","text":"

          Since in an ultra-large-scale relational network, vertices can be as many as tens to hundreds of billions, and edges are even more than trillions. Even if only vertices and edges are stored, the storage capacity of both exceeds that of ordinary servers. Therefore, NebulaGraph uses hash to shard the graph elements and store them in different partitions.

          "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#edge_partitioning_and_storage_amplification","title":"Edge partitioning and storage amplification","text":"

          In NebulaGraph, an edge corresponds to two key-value pairs on the hard disk. When there are lots of edges and each has many properties, storage amplification will be obvious. The storage format of edges is shown in the figure below.

          In this example, SrcVertex connects DstVertex via EdgeA, forming the path of (SrcVertex)-[EdgeA]->(DstVertex). SrcVertex, DstVertex, and EdgeA will all be stored in Partition x and Partition y as four key-value pairs in the storage layer. Details are as follows:

          • The key value of SrcVertex is stored in Partition x. Key fields include Type, PartID(x), VID(Src), and TagID. SerializedValue, namely Value, refers to serialized vertex properties.
          • The first key value of EdgeA, namely EdgeA_Out, is stored in the same partition as the SrcVertex. Key fields include Type, PartID(x), VID(Src), EdgeType(+ means out-edge), Rank(0), VID(Dst), and PlaceHolder. SerializedValue, namely Value, refers to serialized edge properties.
          • The key value of DstVertex is stored in Partition y. Key fields include Type, PartID(y), VID(Dst), and TagID. SerializedValue, namely Value, refers to serialized vertex properties.
          • The second key value of EdgeA, namely EdgeA_In, is stored in the same partition as the DstVertex. Key fields include Type, PartID(y), VID(Dst), EdgeType(- means in-edge), Rank(0), VID(Src), and PlaceHolder. SerializedValue, namely Value, refers to serialized edge properties, which is exactly the same as that in EdgeA_Out.

          EdgeA_Out and EdgeA_In are stored in storage layer with opposite directions, constituting EdgeA logically. EdgeA_Out is used for traversal requests starting from SrcVertex, such as (a)-[]->(); EdgeA_In is used for traversal requests starting from DstVertex, such as ()-[]->(a).

          Like EdgeA_Out and EdgeA_In, NebulaGraph redundantly stores the information of each edge, which doubles the actual capacities needed for edge storage. The key corresponding to the edge occupies a small hard disk space, but the space occupied by Value is proportional to the length and amount of the property value. Therefore, it will occupy a relatively large hard disk space if the property value of the edge is large or there are many edge property values.

          "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#partition_algorithm","title":"Partition algorithm","text":"

          NebulaGraph uses a static Hash strategy to shard data through a modulo operation on vertex ID. All the out-keys, in-keys, and tag data will be placed in the same partition. In this way, query efficiency is increased dramatically.

          Note

          The number of partitions needs to be determined when users are creating a graph space since it cannot be changed afterward. Users are supposed to take into consideration the demands of future business when setting it.

          When inserting into NebulaGraph, vertices and edges are distributed across different partitions. And the partitions are located on different machines. The number of partitions is set in the CREATE SPACE statement and cannot be changed afterward.

          If certain vertices need to be placed on the same partition (i.e., on the same machine), see Formula/code.

          The following code will briefly describe the relationship between VID and partition.

          // If VertexID occupies 8 bytes, it will be stored in int64 to be compatible with the version 1.0.\nuint64_t vid = 0;\nif (id.size() == 8) {\n    memcpy(static_cast<void*>(&vid), id.data(), 8);\n} else {\n    MurmurHash2 hash;\n    vid = hash(id.data());\n}\nPartitionID pId = vid % numParts + 1;\n

          Roughly speaking, after hashing a fixed string to int64, (the hashing of int64 is the number itself), do modulo, and then plus one, namely:

          pId = vid % numParts + 1;\n

          Parameters and descriptions of the preceding formula are as follows:

          Parameter Description % The modulo operation. numParts The number of partitions for the graph space where the VID is located, namely the value of partition_num in the CREATE SPACE statement. pId The ID for the partition where the VID is located.

          Suppose there are 100 partitions, the vertices with VID 1, 101, and 1001 will be stored on the same partition. But, the mapping between the partition ID and the machine address is random. Therefore, we cannot assume that any two partitions are located on the same machine.

          "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#raft","title":"Raft","text":""},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#raft_implementation","title":"Raft implementation","text":"

          In a distributed system, one data usually has multiple replicas so that the system can still run normally even if a few copies fail. It requires certain technical means to ensure consistency between replicas.

          Basic principle: Raft is designed to ensure consistency between replicas. Raft uses election between replicas, and the (candidate) replica that wins more than half of the votes will become the Leader, providing external services on behalf of all replicas. The rest Followers will play backups. When the Leader fails (due to communication failure, operation and maintenance commands, etc.), the rest Followers will conduct a new round of elections and vote for a new Leader. The Leader and Followers will detect each other's survival through heartbeats and write them to the hard disk in Raft-wal mode. Replicas that do not respond to more than multiple heartbeats will be considered faulty.

          Note

          Raft-wal needs to be written into the hard disk periodically. If hard disk bottlenecks to write, Raft will fail to send a heartbeat and conduct a new round of elections. If the hard disk IO is severely blocked, there will be no Leader for a long time.

          Read and write: For every writing request of the clients, the Leader will initiate a Raft-wal and synchronize it with the Followers. Only after over half replicas have received the Raft-wal will it return to the clients successfully. For every reading request of the clients, it will get to the Leader directly, while Followers will not be involved.

          Failure: Scenario 1: Take a (space) cluster of a single replica as an example. If the system has only one replica, the Leader will be itself. If failure happens, the system will be completely unavailable. Scenario 2: Take a (space) cluster of three replicas as an example. If the system has three replicas, one of them will be the Leader and the rest will be the Followers. If the Leader fails, the rest two can still vote for a new Leader (and a Follower), and the system is still available. But if any of the two Followers fails again, the system will be completely unavailable due to inadequate voters.

          Note

          Raft and HDFS have different modes of duplication. Raft is based on a quorum vote, so the number of replicas cannot be even.

          "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#multi_group_raft","title":"Multi Group Raft","text":"

          The Storage Service supports a distributed cluster architecture, so NebulaGraph implements Multi Group Raft according to Raft protocol. Each Raft group stores all the replicas of each partition. One replica is the leader, while others are followers. In this way, NebulaGraph achieves strong consistency and high availability. The functions of Raft are as follows.

          NebulaGraph uses Multi Group Raft to improve performance when there are many partitions because Raft-wal cannot be NULL. When there are too many partitions, costs will increase, such as storing information in Raft group, WAL files, or batch operation in low load.

          There are two key points to implement the Multi Raft Group:

          • To share transport layer

            Each Raft Group sends messages to its corresponding peers. So if the transport layer cannot be shared, the connection costs will be very high.

          • To share thread pool

            Raft Groups share the same thread pool to prevent starting too many threads and a high context switch cost.

          "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#batch","title":"Batch","text":"

          For each partition, it is necessary to do a batch to improve throughput when writing the WAL serially. As NebulaGraph uses WAL to implement some special functions, batches need to be grouped, which is a feature of NebulaGraph.

          For example, lock-free CAS operations will execute after all the previous WALs are committed. So for a batch, if there are several WALs in CAS type, we need to divide this batch into several smaller groups and make sure they are committed serially.

          "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#transfer_leadership","title":"Transfer Leadership","text":"

          Transfer leadership is extremely important for balance. When moving a partition from one machine to another, NebulaGraph first checks if the source is a leader. If so, it should be moved to another peer. After data migration is completed, it is important to balance leader distribution again.

          When a transfer leadership command is committed, the leader will abandon its leadership and the followers will start a leader election.

          "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#peer_changes","title":"Peer changes","text":"

          To avoid split-brain, when members in a Raft Group change, an intermediate state is required. In such a state, the quorum of the old group and new group always have an overlap. Thus it prevents the old or new group from making decisions unilaterally. To make it even simpler, in his doctoral thesis Diego Ongaro suggests adding or removing a peer once to ensure the overlap between the quorum of the new group and the old group. NebulaGraph also uses this approach, except that the way to add or remove a member is different. For details, please refer to addPeer/removePeer in the Raft Part class.

          "},{"location":"1.introduction/3.nebula-graph-architecture/4.storage-service/#differences_with_hdfs","title":"Differences with HDFS","text":"

          The Storage Service is a Raft-based distributed architecture, which has certain differences with that of HDFS. For example:

          • The Storage Service ensures consistency through Raft. Usually, the number of its replicas is odd to elect a leader. However, DataNode used by HDFS ensures consistency through NameNode, which has no limit on the number of replicas.
          • In the Storage Service, only the replicas of the leader can read and write, while in HDFS all the replicas can do so.
          • In the Storage Service, the number of replicas needs to be determined when creating a space, since it cannot be changed afterward. But in HDFS, the number of replicas can be changed freely.
          • The Storage Service can access the file system directly. While the applications of HDFS (such as HBase) have to access HDFS before the file system, which requires more RPC times.

          In a word, the Storage Service is more lightweight with some functions simplified and its architecture is simpler than HDFS, which can effectively improve the read and write performance of a smaller block of data.

          "},{"location":"14.client/1.nebula-client/","title":"Clients overview","text":"

          NebulaGraph supports multiple types of clients for users to connect to and manage the NebulaGraph database.

          • NebulaGraph Console: the native CLI client
          • NebulaGraph CPP: the NebulaGraph client for C++
          • NebulaGraph Java: the NebulaGraph client for Java
          • NebulaGraph Python: the NebulaGraph client for Python
          • NebulaGraph Go: the NebulaGraph client for Golang

          Note

          Only the following classes are thread-safe:

          • NebulaPool and SessionPool in NebulaGraph Java
          • ConnectionPool and SessionPool in NebulaGraph Go
          "},{"location":"14.client/3.nebula-cpp-client/","title":"NebulaGraph CPP","text":"

          NebulaGraph CPP is a C++ client for connecting to and managing the NebulaGraph database.

          "},{"location":"14.client/3.nebula-cpp-client/#prerequisites","title":"Prerequisites","text":"

          You have installed C++ and GCC 4.8 or later versions.

          "},{"location":"14.client/3.nebula-cpp-client/#compatibility_with_nebulagraph","title":"Compatibility with NebulaGraph","text":"

          See github.

          "},{"location":"14.client/3.nebula-cpp-client/#install_nebulagraph_cpp","title":"Install NebulaGraph CPP","text":"

          This document describes how to install NebulaGraph CPP with the source code.

          "},{"location":"14.client/3.nebula-cpp-client/#prerequisites_1","title":"Prerequisites","text":"
          • You have prepared the correct resources.
          • You have installed C++ and GCC version is: {10.1.0 | 9.3.0 | 9.2.0 | 9.1.0 | 8.3.0 | 7.5.0 | 7.1.0}. For details, see the gcc_preset_versions parameter.
          "},{"location":"14.client/3.nebula-cpp-client/#steps","title":"Steps","text":"
          1. Clone the NebulaGraph CPP source code to the host.

            • (Recommended) To install a specific version of NebulaGraph CPP, use the Git option --branch to specify the branch. For example, to install v3.4.0, run the following command:

              $ git clone --branch release-3.4 https://github.com/vesoft-inc/nebula-cpp.git\n
            • To install the daily development version, run the following command to download the source code from the master branch:

              $ git clone https://github.com/vesoft-inc/nebula-cpp.git\n
          2. Change the working directory to nebula-cpp.

            $ cd nebula-cpp\n
          3. Create a directory named build and change the working directory to it.

            $ mkdir build && cd build\n
          4. Generate the makefile file with CMake.

            Note

            The default installation path is /usr/local/nebula. To modify it, add the -DCMAKE_INSTALL_PREFIX=<installation_path> option while running the following command.

            $ cmake -DCMAKE_BUILD_TYPE=Release ..\n

            Note

            If G++ does not support C++ 11, add the option -DDISABLE_CXX11_ABI=ON.

          5. Compile NebulaGraph CPP.

            To speed up the compiling, use the -j option to set a concurrent number N. It should be \\(\\min(\\text{CPU core number},\\frac{\\text{the memory size(GB)}}{2})\\).

            $ make -j{N}\n
          6. Install NebulaGraph CPP.

            $ sudo make install\n
          7. Update the dynamic link library.

            $ sudo ldconfig\n
          "},{"location":"14.client/3.nebula-cpp-client/#use_nebulagraph_cpp","title":"Use NebulaGraph CPP","text":"

          Compile the CPP file to an executable file, then you can use it. The following steps take using SessionExample.cpp for example.

          1. Use the example code to create the SessionExample.cpp file.

          2. Run the following command to compile the file.

            $ LIBRARY_PATH=<library_folder_path>:$LIBRARY_PATH g++ -std=c++11 SessionExample.cpp -I<include_folder_path> -lnebula_graph_client -o session_example\n
            • library_folder_path: The storage path of the NebulaGraph dynamic libraries. The default path is /usr/local/nebula/lib64.
            • include_folder_path: The storage of the NebulaGraph header files. The default path is /usr/local/nebula/include.

          For example:

          $ LIBRARY_PATH=/usr/local/nebula/lib64:$LIBRARY_PATH g++ -std=c++11 SessionExample.cpp -I/usr/local/nebula/include -lnebula_graph_client -o session_example\n
          "},{"location":"14.client/3.nebula-cpp-client/#api_reference","title":"API reference","text":"

          Click here to check the classes and functions provided by the CPP Client.

          "},{"location":"14.client/3.nebula-cpp-client/#core_of_the_example_code","title":"Core of the example code","text":"

          Nebula CPP clients provide both Session Pool and Connection Pool methods to connect to NebulaGraph. Using the Connection Pool method requires users to manage session instances by themselves.

          • Session Pool

            For more details about all the code, see SessionPoolExample.

          • Connection Pool

            For more details about all the code, see SessionExample.

          "},{"location":"14.client/4.nebula-java-client/","title":"NebulaGraph Java","text":"

          NebulaGraph Java is a Java client for connecting to and managing the NebulaGraph database.

          "},{"location":"14.client/4.nebula-java-client/#prerequisites","title":"Prerequisites","text":"

          You have installed Java 8.0 or later versions.

          "},{"location":"14.client/4.nebula-java-client/#compatibility_with_nebulagraph","title":"Compatibility with NebulaGraph","text":"

          See github.

          "},{"location":"14.client/4.nebula-java-client/#download_nebulagraph_java","title":"Download NebulaGraph Java","text":"
          • (Recommended) To install a specific version of NebulaGraph Java, use the Git option --branch to specify the branch. For example, to install v3.6.1, run the following command:

            $ git clone --branch release-3.6 https://github.com/vesoft-inc/nebula-java.git\n
          • To install the daily development version, run the following command to download the source code from the master branch:

            $ git clone https://github.com/vesoft-inc/nebula-java.git\n
          "},{"location":"14.client/4.nebula-java-client/#use_nebulagraph_java","title":"Use NebulaGraph Java","text":"

          Note

          We recommend that each thread use one session. If multiple threads use the same session, the performance will be reduced.

          When importing a Maven project with tools such as IDEA, set the following dependency in pom.xml.

          Note

          3.0.0-SNAPSHOT indicates the daily development version that may have unknown issues. We recommend that you replace 3.0.0-SNAPSHOT with a released version number to use a table version.

          <dependency>\n  <groupId>com.vesoft</groupId>\n  <artifactId>client</artifactId>\n  <version>3.0.0-SNAPSHOT</version>\n</dependency>\n

          If you cannot download the dependency for the daily development version, set the following content in pom.xml. Released versions have no such issue.

          <repositories> \n  <repository> \n    <id>snapshots</id> \n    <url>https://oss.sonatype.org/content/repositories/snapshots/</url> \n  </repository> \n</repositories>\n

          If there is no Maven to manage the project, manually download the JAR file to install NebulaGraph Java.

          "},{"location":"14.client/4.nebula-java-client/#api_reference","title":"API reference","text":"

          Click here to check the classes and functions provided by the Java Client.

          "},{"location":"14.client/4.nebula-java-client/#core_of_the_example_code","title":"Core of the example code","text":"

          The NebulaGraph Java client provides both Connection Pool and Session Pool modes, using Connection Pool requires the user to manage session instances.

          • Session Pool

            For all the code, see GraphSessionPoolExample.

          • Connection Pool

            For all the code, see GraphClientExample.

          "},{"location":"14.client/5.nebula-python-client/","title":"NebulaGraph Python","text":"

          NebulaGraph Python is a Python client for connecting to and managing the NebulaGraph database.

          "},{"location":"14.client/5.nebula-python-client/#prerequisites","title":"Prerequisites","text":"

          You have installed Python 3.6 or later versions.

          "},{"location":"14.client/5.nebula-python-client/#compatibility_with_nebulagraph","title":"Compatibility with NebulaGraph","text":"

          See github.

          "},{"location":"14.client/5.nebula-python-client/#install_nebulagraph_python","title":"Install NebulaGraph Python","text":""},{"location":"14.client/5.nebula-python-client/#install_nebulagraph_python_with_pip","title":"Install NebulaGraph Python with pip","text":"
          $ pip install nebula3-python==<version>\n
          "},{"location":"14.client/5.nebula-python-client/#install_nebulagraph_python_from_the_source_code","title":"Install NebulaGraph Python from the source code","text":"
          1. Clone the NebulaGraph Python source code to the host.

            • (Recommended) To install a specific version of NebulaGraph Python, use the Git option --branch to specify the branch. For example, to install v3.4.0, run the following command:

              $ git clone --branch release-3.4 https://github.com/vesoft-inc/nebula-python.git\n
            • To install the daily development version, run the following command to download the source code from the master branch:

              $ git clone https://github.com/vesoft-inc/nebula-python.git\n
          2. Change the working directory to nebula-python.

            $ cd nebula-python\n
          3. Run the following command to install NebulaGraph Python.

            $ pip install .\n
          "},{"location":"14.client/5.nebula-python-client/#api_reference","title":"API reference","text":"

          Click here to check the classes and functions provided by the Python Client.

          "},{"location":"14.client/5.nebula-python-client/#core_of_the_example_code","title":"Core of the example code","text":"

          NebulaGraph Python clients provides Connection Pool and Session Pool methods to connect to NebulaGraph. Using the Connection Pool method requires users to manage sessions by themselves.

          • Session Pool

            For details about all the code, see SessinPoolExample.py.

            For limitations of using the Session Pool method, see Example of using session pool.

          • Connection Pool

            For details about all the code, see Example.

          "},{"location":"14.client/6.nebula-go-client/","title":"NebulaGraph Go","text":"

          NebulaGraph Go is a Golang client for connecting to and managing the NebulaGraph database.

          "},{"location":"14.client/6.nebula-go-client/#prerequisites","title":"Prerequisites","text":"

          You have installed Golang 1.13 or later versions.

          "},{"location":"14.client/6.nebula-go-client/#compatibility_with_nebulagraph","title":"Compatibility with NebulaGraph","text":"

          See github.

          "},{"location":"14.client/6.nebula-go-client/#download_nebulagraph_go","title":"Download NebulaGraph Go","text":"
          • (Recommended) To install a specific version of NebulaGraph Go, use the Git option --branch to specify the branch. For example, to install v3.7.0, run the following command:

            $ git clone --branch release-3.7 https://github.com/vesoft-inc/nebula-go.git\n
          • To install the daily development version, run the following command to download the source code from the master branch:

            $ git clone https://github.com/vesoft-inc/nebula-go.git\n
          "},{"location":"14.client/6.nebula-go-client/#install_or_update","title":"Install or update","text":"

          Run the following command to install or update NebulaGraph Go:

          $ go get -u -v github.com/vesoft-inc/nebula-go/v3@v3.7.0\n
          "},{"location":"14.client/6.nebula-go-client/#api_reference","title":"API reference","text":"

          Click here to check the functions and types provided by the GO Client.

          "},{"location":"14.client/6.nebula-go-client/#core_of_the_example_code","title":"Core of the example code","text":"

          The NebulaGraph GO client provides both Connection Pool and Session Pool, using Connection Pool requires the user to manage the session instances.

          • Session Pool

            For details about all the code, see session_pool_example.go.

            For limitations of using Session Pool, see Usage example.

          • Connection Pool

            For all the code, see graph_client_basic_example and graph_client_goroutines_example.

          "},{"location":"14.client/contributed-clients/","title":"Community contributed clients","text":"

          You can use the following clients developed by community users to connect to and manage NebulaGraph:

          • NebulaGraph Rust
          • NebulaGraph PHP
          • NebulaGraph Node
          • NebulaGraph .NET
          "},{"location":"15.contribution/how-to-contribute/","title":"How to Contribute","text":""},{"location":"15.contribution/how-to-contribute/#before_you_get_started","title":"Before you get started","text":""},{"location":"15.contribution/how-to-contribute/#commit_an_issue_on_the_github_or_forum","title":"Commit an issue on the github or forum","text":"

          You are welcome to contribute any code or files to the project. But firstly we suggest you raise an issue on the github or the forum to start a discussion with the community. Check through the topic for Github.

          "},{"location":"15.contribution/how-to-contribute/#sign_the_contributor_license_agreement_cla","title":"Sign the Contributor License Agreement CLA","text":"
          1. Open the CLA sign-in page.
          2. Click the Sign in with GitHub button to sign in.
          3. Read and agree to the vesoft inc. Contributor License Agreement.

          If you have any questions, submit an issue.

          "},{"location":"15.contribution/how-to-contribute/#modify_a_single_document","title":"Modify a single document","text":"

          This manual is written in the Markdown language. Click the pencil icon on the right of the document title to commit the modification.

          This method applies to modifying a single document only.

          "},{"location":"15.contribution/how-to-contribute/#batch_modify_or_add_files","title":"Batch modify or add files","text":"

          This method applies to contributing code, modifying multiple documents in batches, or adding new documents.

          "},{"location":"15.contribution/how-to-contribute/#step_1_fork_in_the_githubcom","title":"Step 1: Fork in the github.com","text":"

          The NebulaGraph project has many repositories. Take the nebul repository for example:

          1. Visit https://github.com/vesoft-inc/nebula.

          2. Click the Fork button to establish an online fork.

          "},{"location":"15.contribution/how-to-contribute/#step_2_clone_fork_to_local_storage","title":"Step 2: Clone Fork to Local Storage","text":"
          1. Define a local working directory.

            # Define the working directory.\nworking_dir=$HOME/Workspace\n
          2. Set user to match the Github profile name.

            user={the Github profile name}\n
          3. Create your clone.

            mkdir -p $working_dir\ncd $working_dir\ngit clone https://github.com/$user/nebula.git\n# or: git clone git@github.com:$user/nebula.git\n\ncd $working_dir/nebula\ngit remote add upstream https://github.com/vesoft-inc/nebula.git\n# or: git remote add upstream git@github.com:vesoft-inc/nebula.git\n\n# Never push to upstream master since you do not have write access.\ngit remote set-url --push upstream no_push\n\n# Confirm that the remote branch is valid.\n# The correct format is:\n# origin    git@github.com:$(user)/nebula.git (fetch)\n# origin    git@github.com:$(user)/nebula.git (push)\n# upstream  https://github.com/vesoft-inc/nebula (fetch)\n# upstream  no_push (push)\ngit remote -v\n
          4. (Optional) Define a pre-commit hook.

            Please link the NebulaGraph pre-commit hook into the .git directory.

            This hook checks the commits for formatting, building, doc generation, etc.

            cd $working_dir/nebula/.git/hooks\nln -s $working_dir/nebula/.linters/cpp/hooks/pre-commit.sh .\n

            Sometimes, the pre-commit hook cannot be executed. You have to execute it manually.

            cd $working_dir/nebula/.git/hooks\nchmod +x pre-commit\n
          "},{"location":"15.contribution/how-to-contribute/#step_3_branch","title":"Step 3: Branch","text":"
          1. Get your local master up to date.

            cd $working_dir/nebula\ngit fetch upstream\ngit checkout master\ngit rebase upstream/master\n
          2. Checkout a new branch from master.

            git checkout -b myfeature\n

            Note

            Because the PR often consists of several commits, which might be squashed while being merged into upstream. We strongly suggest you to open a separate topic branch to make your changes on. After merged, this topic branch can be just abandoned, thus you could synchronize your master branch with upstream easily with a rebase like above. Otherwise, if you commit your changes directly into master, you need to use a hard reset on the master branch. For example:

            git fetch upstream\ngit checkout master\ngit reset --hard upstream/master\ngit push --force origin master\n
          "},{"location":"15.contribution/how-to-contribute/#step_4_develop","title":"Step 4: Develop","text":"
          • Code style

            NebulaGraph adopts cpplint to make sure that the project conforms to Google's coding style guides. The checker will be implemented before the code is committed.

          • Unit tests requirements

            Please add unit tests for the new features or bug fixes.

          • Build your code with unit tests enabled

            For more information, see Install NebulaGraph by compiling the source code.

            Note

            Make sure you have enabled the building of unit tests by setting -DENABLE_TESTING=ON.

          • Run tests

            In the root directory of nebula, run the following command:

            cd nebula/build\nctest -j$(nproc)\n
          "},{"location":"15.contribution/how-to-contribute/#step_5_bring_your_branch_update_to_date","title":"Step 5: Bring Your Branch Update to Date","text":"
          # While on your myfeature branch.\ngit fetch upstream\ngit rebase upstream/master\n

          Users need to bring the head branch up to date after other contributors merge PR to the base branch.

          "},{"location":"15.contribution/how-to-contribute/#step_6_commit","title":"Step 6: Commit","text":"

          Commit your changes.

          git commit -a\n

          Users can use the command --amend to re-edit the previous code.

          "},{"location":"15.contribution/how-to-contribute/#step_7_push","title":"Step 7: Push","text":"

          When ready to review or just to establish an offsite backup, push your branch to your fork on github.com:

          git push origin myfeature\n
          "},{"location":"15.contribution/how-to-contribute/#step_8_create_a_pull_request","title":"Step 8: Create a Pull Request","text":"
          1. Visit your fork at https://github.com/$user/nebula (replace $user here).

          2. Click the Compare & pull request button next to your myfeature branch.

          "},{"location":"15.contribution/how-to-contribute/#step_9_get_a_code_review","title":"Step 9: Get a Code Review","text":"

          Once your pull request has been created, it will be assigned to at least two reviewers. Those reviewers will do a thorough code review to make sure that the changes meet the repository's contributing guidelines and other quality standards.

          "},{"location":"15.contribution/how-to-contribute/#add_test_cases","title":"Add test cases","text":"

          For detailed methods, see How to add test cases.

          "},{"location":"15.contribution/how-to-contribute/#donation","title":"Donation","text":""},{"location":"15.contribution/how-to-contribute/#step_1_confirm_the_project_donation","title":"Step 1: Confirm the project donation","text":"

          Contact the official NebulaGraph staff via email, WeChat, Slack, etc. to confirm the donation project. The project will be donated to the NebulaGraph Contrib organization.

          Email address: info@vesoft.com

          WeChat: NebulaGraphbot

          Slack: Join Slack

          "},{"location":"15.contribution/how-to-contribute/#step_2_get_the_information_of_the_project_recipient","title":"Step 2: Get the information of the project recipient","text":"

          The NebulaGraph official staff will give the recipient ID of the NebulaGraph Contrib project.

          "},{"location":"15.contribution/how-to-contribute/#step_3_donate_a_project","title":"Step 3: Donate a project","text":"

          The user transfers the project to the recipient of this donation, and the recipient transfers the project to the NebulaGraph Contrib organization. After the donation, the user will continue to lead the development of community projects as a Maintainer.

          For operations of transferring a repository on GitHub, see Transferring a repository owned by your user account.

          "},{"location":"2.quick-start/1.quick-start-workflow/","title":"Quickly deploy NebulaGraph using Docker","text":"

          You can quickly get started with NebulaGraph by deploying NebulaGraph with Docker Desktop or Docker Compose.

          Using Docker DesktopUsing Docker Compose

          NebulaGraph is available as a Docker Extension that you can easily install and run on your Docker Desktop. You can quickly deploy NebulaGraph using Docker Desktop with just one click.

          1. Install Docker Desktop.

            Caution

            We do not recommend you deploy NebulaGraph on Docker Desktop for Windows due to its subpar performance. For details, see #12401. If you must use Docker Desktop for Windows, install WSL 2 first.

          2. In the left sidebar of Docker Desktop, click Extensions or Add Extensions.

          3. On the Extensions Marketplace, search for NebulaGraph and click Install.

            Click Update to update NebulaGraph to the latest version when a new version is available.

          4. Click Open to navigate to the NebulaGraph extension page.

          5. At the top of the page, click Studio in Browser to use NebulaGraph.

          For more information about how to use NebulaGraph with Docker Desktop, see the following video:

          Using Docker Compose can quickly deploy NebulaGraph services based on the prepared configuration file. It is only recommended to use this method when testing the functions of NebulaGraph.

          "},{"location":"2.quick-start/1.quick-start-workflow/#prerequisites","title":"Prerequisites","text":"
          • You have installed the following applications on your host.

            Application Recommended version Official installation reference Docker Latest Install Docker Engine Docker Compose Latest Install Docker Compose Git Latest Download Git
          • If you are deploying NebulaGraph as a non-root user, grant the user with Docker-related privileges. For detailed instructions, see Manage Docker as a non-root user.
          • You have started the Docker service on your host.
          • If you have already deployed another version of NebulaGraph with Docker Compose on your host, to avoid compatibility issues, you need to delete the nebula-docker-compose/data directory.
          "},{"location":"2.quick-start/1.quick-start-workflow/#deploy_nebulagraph","title":"Deploy NebulaGraph","text":"
          1. Clone the 3.6.0 branch of the nebula-docker-compose repository to your host with Git.

            Danger

            The master branch contains the untested code for the latest NebulaGraph development release. DO NOT use this release in a production environment.

            $ git clone -b release-3.6 https://github.com/vesoft-inc/nebula-docker-compose.git\n

            Note

            The x.y version of Docker Compose aligns to the x.y version of NebulaGraph. For the NebulaGraph z version, Docker Compose does not publish the corresponding z version, but pulls the z version of the NebulaGraph image.

          2. Go to the nebula-docker-compose directory.

            $ cd nebula-docker-compose/\n
          3. Run the following command to start all the NebulaGraph services.

            Note

            • Update the NebulaGraph images and NebulaGraph Console images first if they are out of date.
            • The return result after executing the command varies depending on the installation directory.
            [nebula-docker-compose]$ docker-compose up -d\nCreating nebula-docker-compose_metad0_1 ... done\nCreating nebula-docker-compose_metad2_1 ... done\nCreating nebula-docker-compose_metad1_1 ... done\nCreating nebula-docker-compose_graphd2_1   ... done\nCreating nebula-docker-compose_graphd_1    ... done\nCreating nebula-docker-compose_graphd1_1   ... done\nCreating nebula-docker-compose_storaged0_1 ... done\nCreating nebula-docker-compose_storaged2_1 ... done\nCreating nebula-docker-compose_storaged1_1 ... done\n

            Compatibility

            Starting from NebulaGraph version 3.1.0, nebula-docker-compose automatically starts a NebulaGraph Console docker container and adds the storage host to the cluster (i.e. ADD HOSTS command).

            Note

            For more information of the preceding services, see NebulaGraph architecture.

          "},{"location":"2.quick-start/1.quick-start-workflow/#connect_to_nebulagraph","title":"Connect to NebulaGraph","text":"

          There are two ways to connect to NebulaGraph:

          • Connected with Nebula Console outside the container. Because the external mapping port for the Graph service is also fixed as 9669 in the container's configuration file, you can connect directly through the default port. For details, see Connect to NebulaGraph.
          • Log into the container installed NebulaGraph Console, then connect to the Graph service. This section describes this approach.
          1. Run the following command to view the name of NebulaGraph Console docker container.

            $ docker-compose ps\n          Name                         Command             State                 Ports\n--------------------------------------------------------------------------------------------\nnebula-docker-compose_console_1     sh -c sleep 3 &&          Up\n                                  nebula-co ...\n......\n
          2. Run the following command to enter the NebulaGraph Console docker container.

            docker exec -it nebula-docker-compose_console_1 /bin/sh\n/ #\n
          3. Connect to NebulaGraph with NebulaGraph Console.

            / # ./usr/local/bin/nebula-console -u <user_name> -p <password> --address=graphd --port=9669\n

            Note

            By default, the authentication is off, you can only log in with an existing username (the default is root) and any password. To turn it on, see Enable authentication.

          4. Run the following commands to view the cluster state.

            nebula> SHOW HOSTS;\n+-------------+------+----------+--------------+----------------------+------------------------+---------+\n| Host        | Port | Status   | Leader count | Leader distribution  | Partition distribution | Version |\n+-------------+------+----------+--------------+----------------------+------------------------+---------+\n| \"storaged0\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No valid partition\"   | \"master\" |\n| \"storaged1\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No valid partition\"   | \"master\" |\n| \"storaged2\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No valid partition\"   | \"master\" |\n+-------------+------+----------+--------------+----------------------+------------------------+---------+\n

          Run exit twice to switch back to your terminal (shell).

          "},{"location":"2.quick-start/1.quick-start-workflow/#check_the_nebulagraph_service_status_and_ports","title":"Check the NebulaGraph service status and ports","text":"

          Run docker-compose ps to list all the services of NebulaGraph and their status and ports.

          Note

          NebulaGraph provides services to the clients through port 9669 by default. To use other ports, modify the docker-compose.yaml file in the nebula-docker-compose directory and restart the NebulaGraph services.

          $ docker-compose ps\nnebula-docker-compose_console_1     sh -c sleep 3 &&                 Up\n                                  nebula-co ...\nnebula-docker-compose_graphd1_1     /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49174->19669/tcp,:::49174->19669/tcp, 0.0.0.0:49171->19670/tcp,:::49171->19670/tcp, 0.0.0.0:49177->9669/tcp,:::49177->9669/tcp\nnebula-docker-compose_graphd2_1     /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49175->19669/tcp,:::49175->19669/tcp, 0.0.0.0:49172->19670/tcp,:::49172->19670/tcp, 0.0.0.0:49178->9669/tcp,:::49178->9669/tcp\nnebula-docker-compose_graphd_1      /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49180->19669/tcp,:::49180->19669/tcp, 0.0.0.0:49179->19670/tcp,:::49179->19670/tcp, 0.0.0.0:9669->9669/tcp,:::9669->9669/tcp\nnebula-docker-compose_metad0_1      /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49157->19559/tcp,:::49157->19559/tcp, 0.0.0.0:49154->19560/tcp,:::49154->19560/tcp, 0.0.0.0:49160->9559/tcp,:::49160->9559/tcp, 9560/tcp\nnebula-docker-compose_metad1_1      /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49156->19559/tcp,:::49156->19559/tcp, 0.0.0.0:49153->19560/tcp,:::49153->19560/tcp, 0.0.0.0:49159->9559/tcp,:::49159->9559/tcp, 9560/tcp\nnebula-docker-compose_metad2_1      /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49158->19559/tcp,:::49158->19559/tcp, 0.0.0.0:49155->19560/tcp,:::49155->19560/tcp, 0.0.0.0:49161->9559/tcp,:::49161->9559/tcp, 9560/tcp\nnebula-docker-compose_storaged0_1   /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49166->19779/tcp,:::49166->19779/tcp, 0.0.0.0:49163->19780/tcp,:::49163->19780/tcp, 9777/tcp, 9778/tcp, 0.0.0.0:49169->9779/tcp,:::49169->9779/tcp, 9780/tcp\nnebula-docker-compose_storaged1_1   /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49165->19779/tcp,:::49165->19779/tcp, 0.0.0.0:49162->19780/tcp,:::49162->19780/tcp, 9777/tcp, 9778/tcp, 0.0.0.0:49168->9779/tcp,:::49168->9779/tcp, 9780/tcp\nnebula-docker-compose_storaged2_1   /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49167->19779/tcp,:::49167->19779/tcp, 0.0.0.0:49164->19780/tcp,:::49164->19780/tcp, 9777/tcp, 9778/tcp, 0.0.0.0:49170->9779/tcp,:::49170->9779/tcp, 9780/tcp\n

          If the service is abnormal, you can first confirm the abnormal container name (such as nebula-docker-compose_graphd2_1).

          Then you can execute docker ps to view the corresponding CONTAINER ID (such as 2a6c56c405f5).

          [nebula-docker-compose]$ docker ps\nCONTAINER ID   IMAGE                               COMMAND                  CREATED          STATUS                    PORTS                                                                                                  NAMES\n2a6c56c405f5   vesoft/nebula-graphd:nightly     \"/usr/local/nebula/b\u2026\"   36 minutes ago   Up 36 minutes (healthy)   0.0.0.0:49230->9669/tcp, 0.0.0.0:49229->19669/tcp, 0.0.0.0:49228->19670/tcp                            nebula-docker-compose_graphd2_1\n7042e0a8e83d   vesoft/nebula-storaged:nightly   \"./bin/nebula-storag\u2026\"   36 minutes ago   Up 36 minutes (healthy)   9777-9778/tcp, 9780/tcp, 0.0.0.0:49227->9779/tcp, 0.0.0.0:49226->19779/tcp, 0.0.0.0:49225->19780/tcp   nebula-docker-compose_storaged2_1\n18e3ea63ad65   vesoft/nebula-storaged:nightly   \"./bin/nebula-storag\u2026\"   36 minutes ago   Up 36 minutes (healthy)   9777-9778/tcp, 9780/tcp, 0.0.0.0:49219->9779/tcp, 0.0.0.0:49218->19779/tcp, 0.0.0.0:49217->19780/tcp   nebula-docker-compose_storaged0_1\n4dcabfe8677a   vesoft/nebula-graphd:nightly     \"/usr/local/nebula/b\u2026\"   36 minutes ago   Up 36 minutes (healthy)   0.0.0.0:49224->9669/tcp, 0.0.0.0:49223->19669/tcp, 0.0.0.0:49222->19670/tcp                            nebula-docker-compose_graphd1_1\na74054c6ae25   vesoft/nebula-graphd:nightly     \"/usr/local/nebula/b\u2026\"   36 minutes ago   Up 36 minutes (healthy)   0.0.0.0:9669->9669/tcp, 0.0.0.0:49221->19669/tcp, 0.0.0.0:49220->19670/tcp                             nebula-docker-compose_graphd_1\n880025a3858c   vesoft/nebula-storaged:nightly   \"./bin/nebula-storag\u2026\"   36 minutes ago   Up 36 minutes (healthy)   9777-9778/tcp, 9780/tcp, 0.0.0.0:49216->9779/tcp, 0.0.0.0:49215->19779/tcp, 0.0.0.0:49214->19780/tcp   nebula-docker-compose_storaged1_1\n45736a32a23a   vesoft/nebula-metad:nightly      \"./bin/nebula-metad \u2026\"   36 minutes ago   Up 36 minutes (healthy)   9560/tcp, 0.0.0.0:49213->9559/tcp, 0.0.0.0:49212->19559/tcp, 0.0.0.0:49211->19560/tcp                  nebula-docker-compose_metad0_1\n3b2c90eb073e   vesoft/nebula-metad:nightly      \"./bin/nebula-metad \u2026\"   36 minutes ago   Up 36 minutes (healthy)   9560/tcp, 0.0.0.0:49207->9559/tcp, 0.0.0.0:49206->19559/tcp, 0.0.0.0:49205->19560/tcp                  nebula-docker-compose_metad2_1\n7bb31b7a5b3f   vesoft/nebula-metad:nightly      \"./bin/nebula-metad \u2026\"   36 minutes ago   Up 36 minutes (healthy)   9560/tcp, 0.0.0.0:49210->9559/tcp, 0.0.0.0:49209->19559/tcp, 0.0.0.0:49208->19560/tcp                  nebula-docker-compose_metad1_1\n

          Use the CONTAINER ID to log in the container and troubleshoot.

          nebula-docker-compose]$ docker exec -it 2a6c56c405f5 bash\n[root@2a6c56c405f5 nebula]#\n
          "},{"location":"2.quick-start/1.quick-start-workflow/#check_the_service_data_and_logs","title":"Check the service data and logs","text":"

          All the data and logs of NebulaGraph are stored persistently in the nebula-docker-compose/data and nebula-docker-compose/logs directories.

          The structure of the directories is as follows:

          nebula-docker-compose/\n  |-- docker-compose.yaml\n  \u251c\u2500\u2500 data\n  \u2502\u00a0\u00a0 \u251c\u2500\u2500 meta0\n  \u2502\u00a0\u00a0 \u251c\u2500\u2500 meta1\n  \u2502\u00a0\u00a0 \u251c\u2500\u2500 meta2\n  \u2502\u00a0\u00a0 \u251c\u2500\u2500 storage0\n  \u2502\u00a0\u00a0 \u251c\u2500\u2500 storage1\n  \u2502\u00a0\u00a0 \u2514\u2500\u2500 storage2\n  \u2514\u2500\u2500 logs\n      \u251c\u2500\u2500 graph\n      \u251c\u2500\u2500 graph1\n      \u251c\u2500\u2500 graph2\n      \u251c\u2500\u2500 meta0\n      \u251c\u2500\u2500 meta1\n      \u251c\u2500\u2500 meta2\n      \u251c\u2500\u2500 storage0\n      \u251c\u2500\u2500 storage1\n      \u2514\u2500\u2500 storage2\n
          "},{"location":"2.quick-start/1.quick-start-workflow/#stop_the_nebulagraph_services","title":"Stop the NebulaGraph services","text":"

          You can run the following command to stop the NebulaGraph services:

          $ docker-compose down\n

          The following information indicates you have successfully stopped the NebulaGraph services:

          Stopping nebula-docker-compose_console_1   ... done\nStopping nebula-docker-compose_graphd1_1   ... done\nStopping nebula-docker-compose_graphd_1    ... done\nStopping nebula-docker-compose_graphd2_1   ... done\nStopping nebula-docker-compose_storaged1_1 ... done\nStopping nebula-docker-compose_storaged0_1 ... done\nStopping nebula-docker-compose_storaged2_1 ... done\nStopping nebula-docker-compose_metad2_1    ... done\nStopping nebula-docker-compose_metad0_1    ... done\nStopping nebula-docker-compose_metad1_1    ... done\nRemoving nebula-docker-compose_console_1   ... done\nRemoving nebula-docker-compose_graphd1_1   ... done\nRemoving nebula-docker-compose_graphd_1    ... done\nRemoving nebula-docker-compose_graphd2_1   ... done\nRemoving nebula-docker-compose_storaged1_1 ... done\nRemoving nebula-docker-compose_storaged0_1 ... done\nRemoving nebula-docker-compose_storaged2_1 ... done\nRemoving nebula-docker-compose_metad2_1    ... done\nRemoving nebula-docker-compose_metad0_1    ... done\nRemoving nebula-docker-compose_metad1_1    ... done\nRemoving network nebula-docker-compose_nebula-net\n

          Danger

          The parameter -v in the command docker-compose down -v will delete all your local NebulaGraph storage data. Try this command if you are using the nightly release and having some compatibility issues.

          "},{"location":"2.quick-start/1.quick-start-workflow/#modify_configurations","title":"Modify configurations","text":"

          The configuration file of NebulaGraph deployed by Docker Compose is nebula-docker-compose/docker-compose.yaml. To make the new configuration take effect, modify the configuration in this file and restart the service.

          For more instructions, see Configurations.

          "},{"location":"2.quick-start/1.quick-start-workflow/#faq","title":"FAQ","text":""},{"location":"2.quick-start/1.quick-start-workflow/#how_to_fix_the_docker_mapping_to_external_ports","title":"How to fix the docker mapping to external ports?","text":"

          To set the ports of corresponding services as fixed mapping, modify the docker-compose.yaml in the nebula-docker-compose directory. For example:

          graphd:\n    image: vesoft/nebula-graphd:release-3.6\n    ...\n    ports:\n      - 9669:9669\n      - 19669\n      - 19670\n

          9669:9669 indicates the internal port 9669 is uniformly mapped to external ports, while 19669 indicates the internal port 19669 is randomly mapped to external ports.

          "},{"location":"2.quick-start/1.quick-start-workflow/#how_to_upgrade_or_update_the_docker_images_of_nebulagraph_services","title":"How to upgrade or update the docker images of NebulaGraph services","text":"
          1. In the nebula-docker-compose/docker-compose.yaml file, change all the image values to the required image version.

          2. In the nebula-docker-compose directory, run docker-compose pull to update the images of the Graph Service, Storage Service, Meta Service, and NebulaGraph Console.

          3. Run docker-compose up -d to start the NebulaGraph services again.

          4. After connecting to NebulaGraph with NebulaGraph Console, run SHOW HOSTS GRAPH, SHOW HOSTS STORAGE, or SHOW HOSTS META to check the version of the responding service respectively.

          "},{"location":"2.quick-start/1.quick-start-workflow/#error_toomanyrequests_when_docker-compose_pull","title":"ERROR: toomanyrequests when docker-compose pull","text":"

          You may meet the following error.

          ERROR: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit.

          You have met the rate limit of Docker Hub. Learn more on Understanding Docker Hub Rate Limiting.

          "},{"location":"2.quick-start/1.quick-start-workflow/#how_to_update_the_nebulagraph_console_client","title":"How to update the NebulaGraph Console client","text":"

          The command docker-compose pull updates both the NebulaGraph services and the NebulaGraph Console.

          "},{"location":"2.quick-start/2.install-nebula-graph/","title":"Step 1: Install NebulaGraph","text":"

          RPM and DEB are common package formats on Linux systems. This topic shows how to quickly install NebulaGraph with the RPM or DEB package.

          Note

          The console is not complied or packaged with NebulaGraph server binaries. You can install nebula-console by yourself.

          "},{"location":"2.quick-start/2.install-nebula-graph/#prerequisites","title":"Prerequisites","text":"
          • The tool wget is installed.
          "},{"location":"2.quick-start/2.install-nebula-graph/#step_1_download_the_package_from_cloud_service","title":"Step 1: Download the package from cloud service","text":"

          Note

          NebulaGraph is currently only supported for installation on Linux systems, and only CentOS 7.x, CentOS 8.x, Ubuntu 16.04, Ubuntu 18.04, and Ubuntu 20.04 operating systems are supported.

          • Download the released version.

            URL:

            //Centos 7\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.el7.x86_64.rpm\n\n//Centos 8\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.el8.x86_64.rpm\n\n//Ubuntu 1604\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.ubuntu1604.amd64.deb\n\n//Ubuntu 1804\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.ubuntu1804.amd64.deb\n\n//Ubuntu 2004\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.ubuntu2004.amd64.deb\n

            For example, download the release package master for Centos 7.5:

            wget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.el7.x86_64.rpm\nwget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.el7.x86_64.rpm.sha256sum.txt\n

            Download the release package master for Ubuntu 1804:

            wget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.ubuntu1804.amd64.deb\nwget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.ubuntu1804.amd64.deb.sha256sum.txt\n
          • Download the nightly version.

            Danger

            • Nightly versions are usually used to test new features. Do not use it in a production environment.
            • Nightly versions may not be built successfully every night. And the names may change from day to day.

            URL:

            //Centos 7\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.el7.x86_64.rpm\n\n//Centos 8\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.el8.x86_64.rpm\n\n//Ubuntu 1604\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.ubuntu1604.amd64.deb\n\n//Ubuntu 1804\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.ubuntu1804.amd64.deb\n\n//Ubuntu 2004\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.ubuntu2004.amd64.deb\n

            For example, download the Centos 7.5 package developed and built in 2021.11.28:

            wget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.el7.x86_64.rpm\nwget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.el7.x86_64.rpm.sha256sum.txt\n

            For example, download the Ubuntu 1804 package developed and built in 2021.11.28:

            wget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.ubuntu1804.amd64.deb\nwget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.ubuntu1804.amd64.deb.sha256sum.txt\n
          "},{"location":"2.quick-start/2.install-nebula-graph/#step_2_install_nebulagraph","title":"Step 2: Install NebulaGraph","text":"
          • Use the following syntax to install with an RPM package.

            $ sudo rpm -ivh --prefix=<installation_path> <package_name>\n

            The option --prefix indicates the installation path. The default path is /usr/local/nebula/.

            For example, to install an RPM package in the default path for the master version, run the following command.

            sudo rpm -ivh nebula-graph-master.el7.x86_64.rpm\n
          • Use the following syntax to install with a DEB package.

            $ sudo dpkg -i <package_name>\n

            Note

            Customizing the installation path is not supported when installing NebulaGraph with a DEB package. The default installation path is /usr/local/nebula/.

            For example, to install a DEB package for the master version, run the following command.

            sudo dpkg -i nebula-graph-master.ubuntu1804.amd64.deb\n

            Note

            The default installation path is /usr/local/nebula/.

          "},{"location":"2.quick-start/2.install-nebula-graph/#next_to_do","title":"Next to do","text":"
          • Start NebulaGraph
          • Connect to NebulaGraph
          "},{"location":"2.quick-start/3.1add-storage-hosts/","title":"Register the Storage Service","text":"

          When connecting to NebulaGraph for the first time, you have to add the Storage hosts, and confirm that all the hosts are online.

          Compatibility

          • Starting from NebulaGraph 3.0.0, you have to run ADD HOSTS before reading or writing data into the Storage Service.
          • For NebulaGraph of versions earlier than 3.0.0 and NebulaGraph Cloud clusters, ADD HOSTS is not needed.
          "},{"location":"2.quick-start/3.1add-storage-hosts/#prerequisites","title":"Prerequisites","text":"

          You have connected to NebulaGraph.

          "},{"location":"2.quick-start/3.1add-storage-hosts/#steps","title":"Steps","text":"
          1. Add the Storage hosts.

            Run the following command to add hosts:

            ADD HOSTS <ip>:<port> [,<ip>:<port> ...];\n

            Example\uff1a

            nebula> ADD HOSTS 192.168.10.100:9779, 192.168.10.101:9779, 192.168.10.102:9779;\n

            Caution

            Make sure that the IP you added is the same as the IP configured for local_ip in the nebula-storaged.conf file. Otherwise, the Storage service will fail to start. For information about configurations, see Configurations.

          2. Check the status of the hosts to make sure that they are all online.

            nebula> SHOW HOSTS;\n+------------------+------+----------+--------------+----------------------  +------------------------+---------+\n| Host             | Port | Status   | Leader count | Leader distribution  |   Partition distribution | Version |\n+------------------+------+----------+--------------+----------------------  +------------------------+---------+\n| \"192.168.10.100\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No   valid partition\"   | \"master\" |\n| \"192.168.10.101\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No   valid partition\"   | \"master\"|\n| \"192.168.10.102\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No   valid partition\"   | \"master\"|\n+------------------+------+----------+--------------+----------------------  +------------------------+---------+\n

            The Status column of the result above shows that all Storage hosts are online.

          "},{"location":"2.quick-start/3.connect-to-nebula-graph/","title":"Step 3: Connect to NebulaGraph","text":"

          This topic provides basic instruction on how to use the native CLI client NebulaGraph Console to connect to NebulaGraph.

          Caution

          When connecting to NebulaGraph for the first time, you must register the Storage Service before querying data.

          NebulaGraph supports multiple types of clients, including a CLI client, a GUI client, and clients developed in popular programming languages. For more information, see the client list.

          "},{"location":"2.quick-start/3.connect-to-nebula-graph/#prerequisites","title":"Prerequisites","text":"
          • You have started NebulaGraph services.
          • The machine on which you plan to run NebulaGraph Console has network access to the Graph Service of NebulaGraph.
          • The NebulaGraph Console version is compatible with the NebulaGraph version.

            Note

            NebulaGraph Console and NebulaGraph of the same version number are the most compatible. There may be compatibility issues when connecting to NebulaGraph with a different version of NebulaGraph Console. The error message incompatible version between client and server is displayed when there is such an issue.

          "},{"location":"2.quick-start/3.connect-to-nebula-graph/#steps","title":"Steps","text":"
          1. On the NebulaGraph Console releases page, select a NebulaGraph Console version and click Assets.

            Note

            It is recommended to select the latest version.

          2. In the Assets area, find the correct binary file for the machine where you want to run NebulaGraph Console and download the file to the machine.

          3. (Optional) Rename the binary file to nebula-console for convenience.

            Note

            For Windows, rename the file to nebula-console.exe.

          4. On the machine to run NebulaGraph Console, grant the execute permission of the nebula-console binary file to the user.

            Note

            For Windows, skip this step.

            $ chmod 111 nebula-console\n
          5. In the command line interface, change the working directory to the one where the nebula-console binary file is stored.

          6. Run the following command to connect to NebulaGraph.

            • For Linux or macOS:
            $ ./nebula-console -addr <ip> -port <port> -u <username> -p <password>\n[-t 120] [-e \"nGQL_statement\" | -f filename.nGQL]\n
            • For Windows:
            > nebula-console.exe -addr <ip> -port <port> -u <username> -p <password>\n[-t 120] [-e \"nGQL_statement\" | -f filename.nGQL]\n

            Parameter descriptions are as follows:

            Parameter Description -h/-help Shows the help menu. -addr/-address Sets the IP (or hostname) of the Graph service. The default address is 127.0.0.1. -P/-port Sets the port number of the graphd service. The default port number is 9669. -u/-user Sets the username of your NebulaGraph account. Before enabling authentication, you can use any existing username. The default username is root. -p/-password Sets the password of your NebulaGraph account. Before enabling authentication, you can use any characters as the password. -t/-timeout Sets an integer-type timeout threshold of the connection. The unit is millisecond. The default value is 120. -e/-eval Sets a string-type nGQL statement. The nGQL statement is executed once the connection succeeds. The connection stops after the result is returned. -f/-file Sets the path of an nGQL file. The nGQL statements in the file are executed once the connection succeeds. The result will be returned and the connection stops then. -enable_ssl Enables SSL encryption when connecting to NebulaGraph. -ssl_root_ca_path Sets the storage path of the certification authority file. -ssl_cert_path Sets the storage path of the certificate file. -ssl_private_key_path Sets the storage path of the private key file.

            For information on more parameters, see the project repository.

          "},{"location":"2.quick-start/4.nebula-graph-crud/","title":"Step 4: Use nGQL (CRUD)","text":"

          This topic will describe the basic CRUD operations in NebulaGraph.

          For more information, see nGQL guide.

          "},{"location":"2.quick-start/4.nebula-graph-crud/#graph_space_and_nebulagraph_schema","title":"Graph space and NebulaGraph schema","text":"

          A NebulaGraph instance consists of one or more graph spaces. Graph spaces are physically isolated from each other. You can use different graph spaces in the same instance to store different datasets.

          To insert data into a graph space, define a schema for the graph database. NebulaGraph schema is based on the following components.

          Schema component Description Vertex Represents an entity in the real world. A vertex can have zero to multiple tags. Tag The type of the same group of vertices. It defines a set of properties that describes the types of vertices. Edge Represents a directed relationship between two vertices. Edge type The type of an edge. It defines a group of properties that describes the types of edges.

          For more information, see Data modeling.

          In this topic, we will use the following dataset to demonstrate basic CRUD operations.

          "},{"location":"2.quick-start/4.nebula-graph-crud/#async_implementation_of_create_and_alter","title":"Async implementation of CREATE and ALTER","text":"

          Caution

          In NebulaGraph, the following CREATE or ALTER commands are implemented in an async way and take effect in the next heartbeat cycle. Otherwise, an error will be returned. To make sure the follow-up operations work as expected, Wait for two heartbeat cycles, i.e., 20 seconds.

          • CREATE SPACE
          • CREATE TAG
          • CREATE EDGE
          • ALTER TAG
          • ALTER EDGE
          • CREATE TAG INDEX
          • CREATE EDGE INDEX

          Note

          The default heartbeat interval is 10 seconds. To change the heartbeat interval, modify the heartbeat_interval_secs parameter in the configuration files for all services.

          "},{"location":"2.quick-start/4.nebula-graph-crud/#create_and_use_a_graph_space","title":"Create and use a graph space","text":""},{"location":"2.quick-start/4.nebula-graph-crud/#ngql_syntax","title":"nGQL syntax","text":"
          • Create a graph space:
            CREATE SPACE [IF NOT EXISTS] <graph_space_name> (\n[partition_num = <partition_number>,]\n[replica_factor = <replica_number>,]\nvid_type = {FIXED_STRING(<N>) | INT64}\n)\n[COMMENT = '<comment>'];\n

            For more information on parameters, see CREATE SPACE.

          • List graph spaces and check if the creation is successful:
            nebula> SHOW SPACES;\n
          • Use a graph space:
            USE <graph_space_name>;\n
          "},{"location":"2.quick-start/4.nebula-graph-crud/#examples","title":"Examples","text":"
          1. Use the following statement to create a graph space named basketballplayer.

            nebula> CREATE SPACE basketballplayer(partition_num=15, replica_factor=1, vid_type=fixed_string(30));\n

            Note

            If the system returns the error [ERROR (-1005)]: Host not enough!, check whether registered the Storage Service.

          2. Check the partition distribution with SHOW HOSTS to make sure that the partitions are distributed in a balanced way.

            nebula> SHOW HOSTS;\n+-------------+-----------+-----------+--------------+----------------------------------+------------------------+---------+\n| Host        | Port      | Status    | Leader count | Leader distribution              | Partition distribution | Version |\n+-------------+-----------+-----------+--------------+----------------------------------+------------------------+---------+\n| \"storaged0\" | 9779      | \"ONLINE\"  | 5            | \"basketballplayer:5\"             | \"basketballplayer:5\"   | \"master\"|\n| \"storaged1\" | 9779      | \"ONLINE\"  | 5            | \"basketballplayer:5\"             | \"basketballplayer:5\"   | \"master\"|\n| \"storaged2\" | 9779      | \"ONLINE\"  | 5            | \"basketballplayer:5\"             | \"basketballplayer:5\"   | \"master\"|\n+-------------+-----------+-----------+-----------+--------------+----------------------------------+------------------------+---------+\n

            If the Leader distribution is uneven, use BALANCE LEADER to redistribute the partitions. For more information, see BALANCE.

          3. Use the basketballplayer graph space.

            nebula[(none)]> USE basketballplayer;\n

            You can use SHOW SPACES to check the graph space you created.

            nebula> SHOW SPACES;\n+--------------------+\n| Name               |\n+--------------------+\n| \"basketballplayer\" |\n+--------------------+\n
          "},{"location":"2.quick-start/4.nebula-graph-crud/#create_tags_and_edge_types","title":"Create tags and edge types","text":""},{"location":"2.quick-start/4.nebula-graph-crud/#ngql_syntax_1","title":"nGQL syntax","text":"
          CREATE {TAG | EDGE} [IF NOT EXISTS] {<tag_name> | <edge_type_name>}\n    (\n      <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']\n      [{, <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']} ...] \n    )\n    [TTL_DURATION = <ttl_duration>]\n    [TTL_COL = <prop_name>]\n    [COMMENT = '<comment>'];\n

          For more information on parameters, see CREATE TAG and CREATE EDGE.

          "},{"location":"2.quick-start/4.nebula-graph-crud/#examples_1","title":"Examples","text":"

          Create tags player and team, and edge types follow and serve. Descriptions are as follows.

          Component name Type Property player Tag name (string), age (int) team Tag name (string) follow Edge type degree (int) serve Edge type start_year (int), end_year (int)
          nebula> CREATE TAG player(name string, age int);\n\nnebula> CREATE TAG team(name string);\n\nnebula> CREATE EDGE follow(degree int);\n\nnebula> CREATE EDGE serve(start_year int, end_year int);\n
          "},{"location":"2.quick-start/4.nebula-graph-crud/#insert_vertices_and_edges","title":"Insert vertices and edges","text":"

          You can use the INSERT statement to insert vertices or edges based on existing tags or edge types.

          "},{"location":"2.quick-start/4.nebula-graph-crud/#ngql_syntax_2","title":"nGQL syntax","text":"
          • Insert vertices:
            INSERT VERTEX [IF NOT EXISTS] [tag_props, [tag_props] ...]\nVALUES <vid>: ([prop_value_list])\n\ntag_props:\n  tag_name ([prop_name_list])\n\nprop_name_list:\n   [prop_name [, prop_name] ...]\n\nprop_value_list:\n   [prop_value [, prop_value] ...]   \n

            vid is short for Vertex ID. A vid must be a unique string value in a graph space. For details, see INSERT VERTEX.

          • Insert edges:

            INSERT EDGE [IF NOT EXISTS] <edge_type> ( <prop_name_list> ) VALUES \n<src_vid> -> <dst_vid>[@<rank>] : ( <prop_value_list> )\n[, <src_vid> -> <dst_vid>[@<rank>] : ( <prop_value_list> ), ...];\n<prop_name_list> ::=\n[ <prop_name> [, <prop_name> ] ...]\n<prop_value_list> ::=\n[ <prop_value> [, <prop_value> ] ...]\n

            For more information on parameters, see INSERT EDGE.

          "},{"location":"2.quick-start/4.nebula-graph-crud/#examples_2","title":"Examples","text":"
          • Insert vertices representing basketball players and teams:
            nebula> INSERT VERTEX player(name, age) VALUES \"player100\":(\"Tim Duncan\", 42);\n\nnebula> INSERT VERTEX player(name, age) VALUES \"player101\":(\"Tony Parker\", 36);\n\nnebula> INSERT VERTEX player(name, age) VALUES \"player102\":(\"LaMarcus Aldridge\", 33);\n\nnebula> INSERT VERTEX team(name) VALUES \"team203\":(\"Trail Blazers\"), \"team204\":(\"Spurs\");\n
          • Insert edges representing the relations between basketball players and teams:
            nebula> INSERT EDGE follow(degree) VALUES \"player101\" -> \"player100\":(95);\n\nnebula> INSERT EDGE follow(degree) VALUES \"player101\" -> \"player102\":(90);\n\nnebula> INSERT EDGE follow(degree) VALUES \"player102\" -> \"player100\":(75);\n\nnebula> INSERT EDGE serve(start_year, end_year) VALUES \"player101\" -> \"team204\":(1999, 2018),\"player102\" -> \"team203\":(2006,  2015);\n
          "},{"location":"2.quick-start/4.nebula-graph-crud/#read_data","title":"Read data","text":"
          • The GO statement can traverse the database based on specific conditions. A GO traversal starts from one or more vertices, along one or more edges, and returns information in a form specified in the YIELD clause.
          • The FETCH statement is used to get properties from vertices or edges.
          • The LOOKUP statement is based on indexes. It is used together with the WHERE clause to search for the data that meet the specific conditions.
          • The MATCH statement is the most commonly used statement for graph data querying. It can describe all kinds of graph patterns, but it relies on indexes to match data patterns in NebulaGraph. Therefore, its performance still needs optimization.
          "},{"location":"2.quick-start/4.nebula-graph-crud/#ngql_syntax_3","title":"nGQL syntax","text":"
          • GO
            GO [[<M> TO] <N> {STEP|STEPS} ] FROM <vertex_list>\nOVER <edge_type_list> [{REVERSELY | BIDIRECT}]\n[ WHERE <conditions> ]\nYIELD [DISTINCT] <return_list>\n[{ SAMPLE <sample_list> | <limit_by_list_clause> }]\n[| GROUP BY {<col_name> | expression> | <position>} YIELD <col_name>]\n[| ORDER BY <expression> [{ASC | DESC}]]\n[| LIMIT [<offset>,] <number_rows>];\n
          • FETCH

            • Fetch properties on tags:

              FETCH PROP ON {<tag_name>[, tag_name ...] | *}\n<vid> [, vid ...]\nYIELD <return_list> [AS <alias>];\n
            • Fetch properties on edges:

              FETCH PROP ON <edge_type> <src_vid> -> <dst_vid>[@<rank>] [, <src_vid> -> <dst_vid> ...]\nYIELD <output>;\n
          • LOOKUP
            LOOKUP ON {<vertex_tag> | <edge_type>}\n[WHERE <expression> [AND <expression> ...]]\nYIELD <return_list> [AS <alias>];\n<return_list>\n    <prop_name> [AS <col_alias>] [, <prop_name> [AS <prop_alias>] ...];\n
          • MATCH
            MATCH <pattern> [<clause_1>] RETURN <output> [<clause_2>];\n
          "},{"location":"2.quick-start/4.nebula-graph-crud/#examples_of_go_statement","title":"Examples of GO statement","text":"
          • Search for the players that the player with VID player101 follows.
            nebula> GO FROM \"player101\" OVER follow YIELD id($$);\n+-------------+\n| id($$)      |\n+-------------+\n| \"player100\" |\n| \"player102\" |\n| \"player125\" |\n+-------------+\n
          • Filter the players that the player with VID player101 follows whose age is equal to or greater than 35. Rename the corresponding columns in the results with Teammate and Age.
            nebula> GO FROM \"player101\" OVER follow WHERE properties($$).age >= 35 \\\n        YIELD properties($$).name AS Teammate, properties($$).age AS Age;\n+-----------------+-----+\n| Teammate        | Age |\n+-----------------+-----+\n| \"Tim Duncan\"    | 42  |\n| \"Manu Ginobili\" | 41  |\n+-----------------+-----+\n

            | Clause/Sign | Description | |-------------+---------------------------------------------------------------------| | YIELD | Specifies what values or results you want to return from the query. | | $$ | Represents the target vertices. | | \\ | A line-breaker. |

          • Search for the players that the player with VID player101 follows. Then retrieve the teams of the players that the player with VID player100 follows. To combine the two queries, use a pipe or a temporary variable.

            • With a pipe:

              nebula> GO FROM \"player101\" OVER follow YIELD dst(edge) AS id | \\\n        GO FROM $-.id OVER serve YIELD properties($$).name AS Team, \\\n        properties($^).name AS Player;\n+-----------------+---------------------+\n| Team            | Player              |\n+-----------------+---------------------+\n| \"Spurs\"         | \"Tim Duncan\"        |\n| \"Trail Blazers\" | \"LaMarcus Aldridge\" |\n| \"Spurs\"         | \"LaMarcus Aldridge\" |\n| \"Spurs\"         | \"Manu Ginobili\"     |\n+-----------------+---------------------+\n
              Clause/Sign Description $^ Represents the source vertex of the edge. | A pipe symbol can combine multiple queries. $- Represents the outputs of the query before the pipe symbol.
            • With a temporary variable:

              Note

              Once a composite statement is submitted to the server as a whole, the life cycle of the temporary variables in the statement ends.

              nebula> $var = GO FROM \"player101\" OVER follow YIELD dst(edge) AS id; \\\n        GO FROM $var.id OVER serve YIELD properties($$).name AS Team, \\\n        properties($^).name AS Player;\n+-----------------+---------------------+\n| Team            | Player              |\n+-----------------+---------------------+\n| \"Spurs\"         | \"Tim Duncan\"        |\n| \"Trail Blazers\" | \"LaMarcus Aldridge\" |\n| \"Spurs\"         | \"LaMarcus Aldridge\" |\n| \"Spurs\"         | \"Manu Ginobili\"     |\n+-----------------+---------------------+\n
          "},{"location":"2.quick-start/4.nebula-graph-crud/#example_of_fetch_statement","title":"Example of FETCH statement","text":"

          Use FETCH: Fetch the properties of the player with VID player100.

          nebula> FETCH PROP ON player \"player100\" YIELD properties(vertex);\n+-------------------------------+\n| properties(VERTEX)            |\n+-------------------------------+\n| {age: 42, name: \"Tim Duncan\"} |\n+-------------------------------+\n

          Note

          The examples of LOOKUP and MATCH statements are in indexes.

          "},{"location":"2.quick-start/4.nebula-graph-crud/#update_vertices_and_edges","title":"Update vertices and edges","text":"

          Users can use the UPDATE or the UPSERT statements to update existing data.

          UPSERT is the combination of UPDATE and INSERT. If you update a vertex or an edge with UPSERT, the database will insert a new vertex or edge if it does not exist.

          Note

          UPSERT operates serially in a partition-based order. Therefore, it is slower than INSERT OR UPDATE. And UPSERT has concurrency only between multiple partitions.

          "},{"location":"2.quick-start/4.nebula-graph-crud/#ngql_syntax_4","title":"nGQL syntax","text":"
          • UPDATE vertices:
            UPDATE VERTEX <vid> SET <properties to be updated>\n[WHEN <condition>] [YIELD <columns>];\n
          • UPDATE edges:
            UPDATE EDGE ON <edge_type> <source vid> -> <destination vid> [@rank] \nSET <properties to be updated> [WHEN <condition>] [YIELD <columns to be output>];\n
          • UPSERT vertices or edges:
            UPSERT {VERTEX <vid> | EDGE <edge_type>} SET <update_columns>\n[WHEN <condition>] [YIELD <columns>];\n
          "},{"location":"2.quick-start/4.nebula-graph-crud/#examples_3","title":"Examples","text":"
          • UPDATE the name property of the vertex with VID player100 and check the result with the FETCH statement.
            nebula> UPDATE VERTEX \"player100\" SET player.name = \"Tim\";\n\nnebula> FETCH PROP ON player \"player100\" YIELD properties(vertex);\n+------------------------+\n| properties(VERTEX)     |\n+------------------------+\n| {age: 42, name: \"Tim\"} |\n+------------------------+\n
          • UPDATE the degree property of an edge and check the result with the FETCH statement.
            nebula> UPDATE EDGE ON follow \"player101\" -> \"player100\" SET degree = 96;\n\nnebula> FETCH PROP ON follow \"player101\" -> \"player100\" YIELD properties(edge);\n+------------------+\n| properties(EDGE) |\n+------------------+\n| {degree: 96}     |\n+------------------+\n
          • Insert a vertex with VID player111 and UPSERT it.
            nebula> INSERT VERTEX player(name,age) VALUES \"player111\":(\"David West\", 38);\n\nnebula> UPSERT VERTEX \"player111\" SET player.name = \"David\", player.age = $^.player.age + 11 \\\n        WHEN $^.player.name == \"David West\" AND $^.player.age > 20 \\\n        YIELD $^.player.name AS Name, $^.player.age AS Age;\n+---------+-----+\n| Name    | Age |\n+---------+-----+\n| \"David\" | 49  |\n+---------+-----+\n
          "},{"location":"2.quick-start/4.nebula-graph-crud/#delete_vertices_and_edges","title":"Delete vertices and edges","text":""},{"location":"2.quick-start/4.nebula-graph-crud/#ngql_syntax_5","title":"nGQL syntax","text":"
          • Delete vertices:
            DELETE VERTEX <vid1>[, <vid2>...]\n
          • Delete edges:
            DELETE EDGE <edge_type> <src_vid> -> <dst_vid>[@<rank>]\n[, <src_vid> -> <dst_vid>...]\n
          "},{"location":"2.quick-start/4.nebula-graph-crud/#examples_4","title":"Examples","text":"
          • Delete vertices:
            nebula> DELETE VERTEX \"player111\", \"team203\";\n
          • Delete edges:
            nebula> DELETE EDGE follow \"player101\" -> \"team204\";\n
          "},{"location":"2.quick-start/4.nebula-graph-crud/#about_indexes","title":"About indexes","text":"

          Users can add indexes to tags and edge types with the CREATE INDEX statement.

          Must-read for using indexes

          Both MATCH and LOOKUP statements depend on the indexes. But indexes can dramatically reduce the write performance. DO NOT use indexes in production environments unless you are fully aware of their influences on your service.

          Users MUST rebuild indexes for pre-existing data. Otherwise, the pre-existing data cannot be indexed and therefore cannot be returned in MATCH or LOOKUP statements. For more information, see REBUILD INDEX.

          "},{"location":"2.quick-start/4.nebula-graph-crud/#ngql_syntax_6","title":"nGQL syntax","text":"
          • Create an index:
            CREATE {TAG | EDGE} INDEX [IF NOT EXISTS] <index_name>\nON {<tag_name> | <edge_name>} ([<prop_name_list>]) [COMMENT = '<comment>'];\n
          • Rebuild an index:
            REBUILD {TAG | EDGE} INDEX <index_name>;\n

          Note

          Define the index length when creating an index for a variable-length property. In UTF-8 encoding, a non-ascii character occupies 3 bytes. You should set an appropriate index length according to the variable-length property. For example, the index should be 30 bytes for 10 non-ascii characters. For more information, see CREATE INDEX

          "},{"location":"2.quick-start/4.nebula-graph-crud/#examples_of_lookup_and_match_index-based","title":"Examples of LOOKUP and MATCH (index-based)","text":"

          Make sure there is an index for LOOKUP or MATCH to use. If there is not, create an index first.

          Find the information of the vertex with the tag player and its value of the name property is Tony Parker.

          This example creates the index player_index_1 on the name property.

          nebula> CREATE TAG INDEX IF NOT EXISTS player_index_1 ON player(name(20));\n

          This example rebuilds the index to make sure it takes effect on pre-existing data.

          nebula> REBUILD TAG INDEX player_index_1\n+------------+\n| New Job Id |\n+------------+\n| 31         |\n+------------+\n

          This example uses the LOOKUP statement to retrieve the vertex property.

          nebula> LOOKUP ON player WHERE player.name == \"Tony Parker\" \\\n        YIELD properties(vertex).name AS name, properties(vertex).age AS age;\n+---------------+-----+\n| name          | age |\n+---------------+-----+\n| \"Tony Parker\" | 36  |\n+---------------+-----+\n

          This example uses the MATCH statement to retrieve the vertex property.

          nebula> MATCH (v:player{name:\"Tony Parker\"}) RETURN v;\n+-----------------------------------------------------+\n| v                                                   |\n+-----------------------------------------------------+\n| (\"player101\" :player{age: 36, name: \"Tony Parker\"}) |\n+-----------------------------------------------------+\n
          "},{"location":"2.quick-start/5.start-stop-service/","title":"Step 2: Manage NebulaGraph Service","text":"

          NebulaGraph supports managing services with scripts.

          "},{"location":"2.quick-start/5.start-stop-service/#manage_services_with_script","title":"Manage services with script","text":"

          You can use the nebula.service script to start, stop, restart, terminate, and check the NebulaGraph services.

          Note

          nebula.service is stored in the /usr/local/nebula/scripts directory by default. If you have customized the path, use the actual path in your environment.

          "},{"location":"2.quick-start/5.start-stop-service/#syntax","title":"Syntax","text":"
          $ sudo /usr/local/nebula/scripts/nebula.service\n[-v] [-c <config_file_path>]\n<start | stop | restart | kill | status>\n<metad | graphd | storaged | all>\n
          Parameter Description -v Display detailed debugging information. -c Specify the configuration file path. The default path is /usr/local/nebula/etc/. start Start the target services. stop Stop the target services. restart Restart the target services. kill Terminate the target services. status Check the status of the target services. metad Set the Meta Service as the target service. graphd Set the Graph Service as the target service. storaged Set the Storage Service as the target service. all Set all the NebulaGraph services as the target services."},{"location":"2.quick-start/5.start-stop-service/#start_nebulagraph","title":"Start NebulaGraph","text":"

          Run the following command to start NebulaGraph.

          $ sudo /usr/local/nebula/scripts/nebula.service start all\n[INFO] Starting nebula-metad...\n[INFO] Done\n[INFO] Starting nebula-graphd...\n[INFO] Done\n[INFO] Starting nebula-storaged...\n[INFO] Done\n
          "},{"location":"2.quick-start/5.start-stop-service/#stop_nebulagraph","title":"Stop NebulaGraph","text":"

          Danger

          Do not run kill -9 to forcibly terminate the processes. Otherwise, there is a low probability of data loss.

          Run the following command to stop NebulaGraph.

          $ sudo /usr/local/nebula/scripts/nebula.service stop all\n[INFO] Stopping nebula-metad...\n[INFO] Done\n[INFO] Stopping nebula-graphd...\n[INFO] Done\n[INFO] Stopping nebula-storaged...\n[INFO] Done\n
          "},{"location":"2.quick-start/5.start-stop-service/#check_the_service_status","title":"Check the service status","text":"

          Run the following command to check the service status of NebulaGraph.

          $ sudo /usr/local/nebula/scripts/nebula.service status all\n
          • NebulaGraph is running normally if the following information is returned.

            INFO] nebula-metad(33fd35e): Running as 29020, Listening on 9559\n[INFO] nebula-graphd(33fd35e): Running as 29095, Listening on 9669\n[WARN] nebula-storaged after v3.0.0 will not start service until it is added to cluster.\n[WARN] See Manage Storage hosts:ADD HOSTS in https://docs.nebula-graph.io/\n[INFO] nebula-storaged(33fd35e): Running as 29147, Listening on 9779\n

            Note

            After starting NebulaGraph, the port of the nebula-storaged process is shown in red. Because the nebula-storaged process waits for the nebula-metad to add the current Storage service during the startup process. The Storage works after it receives the ready signal. Starting from NebulaGraph 3.0.0, the Meta service cannot directly read or write data in the Storage service that you add in the configuration file. The configuration file only registers the Storage service to the Meta service. You must run the ADD HOSTS command to enable the Meta to read and write data in the Storage service. For more information, see Manage Storage hosts.

          • If the returned result is similar to the following one, there is a problem. You may also go to the NebulaGraph community for help.
            [INFO] nebula-metad: Running as 25600, Listening on 9559\n[INFO] nebula-graphd: Exited\n[INFO] nebula-storaged: Running as 25646, Listening on 9779\n

          The NebulaGraph services consist of the Meta Service, Graph Service, and Storage Service. The configuration files for all three services are stored in the /usr/local/nebula/etc/ directory by default. You can check the configuration files according to the returned result to troubleshoot problems.

          "},{"location":"2.quick-start/5.start-stop-service/#next_to_do","title":"Next to do","text":"

          Connect to NebulaGraph

          "},{"location":"2.quick-start/6.cheatsheet-for-ngql/","title":"nGQL cheatsheet","text":""},{"location":"2.quick-start/6.cheatsheet-for-ngql/#functions","title":"Functions","text":"
          • Math functions

            Function Description double abs(double x) Returns the absolute value of the argument. double floor(double x) Returns the largest integer value smaller than or equal to the argument. (Rounds down) double ceil(double x) Returns the smallest integer greater than or equal to the argument. (Rounds up) double round(double x) Returns the integer value nearest to the argument. Returns a number farther away from 0 if the argument is in the middle. double sqrt(double x) Returns the square root of the argument. double cbrt(double x) Returns the cubic root of the argument. double hypot(double x, double y) Returns the hypotenuse of a right-angled triangle. double pow(double x, double y) Returns the result of xy. double exp(double x) Returns the result of ex. double exp2(double x) Returns the result of 2x. double log(double x) Returns the base-e logarithm of the argument. double log2(double x) Returns the base-2 logarithm of the argument. double log10(double x) Returns the base-10 logarithm of the argument. double sin(double x) Returns the sine of the argument. double asin(double x) Returns the inverse sine of the argument. double cos(double x) Returns the cosine of the argument. double acos(double x) Returns the inverse cosine of the argument. double tan(double x) Returns the tangent of the argument. double atan(double x) Returns the inverse tangent of the argument. double rand() Returns a random floating point number in the range from 0 (inclusive) to 1 (exclusive); i.e.[0,1). int rand32(int min, int max) Returns a random 32-bit integer in [min, max).If you set only one argument, it is parsed as max and min is 0 by default.If you set no argument, the system returns a random signed 32-bit integer. int rand64(int min, int max) Returns a random 64-bit integer in [min, max).If you set only one argument, it is parsed as max and min is 0 by default.If you set no argument, the system returns a random signed 64-bit integer. bit_and() Bitwise AND. bit_or() Bitwise OR. bit_xor() Bitwise XOR. int size() Returns the number of elements in a list or a map or the length of a string. int range(int start, int end, int step) Returns a list of integers from [start,end] in the specified steps. step is 1 by default. int sign(double x) Returns the signum of the given number.If the number is 0, the system returns 0.If the number is negative, the system returns -1.If the number is positive, the system returns 1. double e() Returns the base of the natural logarithm, e (2.718281828459045). double pi() Returns the mathematical constant pi (3.141592653589793). double radians() Converts degrees to radians. radians(180) returns 3.141592653589793.
          • Aggregating functions

            Function Description avg() Returns the average value of the argument. count() Syntax: count({expr | *}) .count()returns the number of rows (including NULL). count(expr)returns the number of non-NULL values that meet the expression. count() and size() are different. max() Returns the maximum value. min() Returns the minimum value. collect() The collect() function returns a list containing the values returned by an expression. Using this function aggregates data by merging multiple records or values into a single list. std() Returns the population standard deviation. sum() Returns the sum value.
          • String functions

            Function Description int strcasecmp(string a, string b) Compares string a and b without case sensitivity. When a = b, the return string lower(string a) Returns the argument in lowercase. string toLower(string a) The same as lower(). string upper(string a) Returns the argument in uppercase. string toUpper(string a) The same as upper(). int length(a) Returns the length of the given string in bytes or the length of a path in hops. string trim(string a) Removes leading and trailing spaces. string ltrim(string a) Removes leading spaces. string rtrim(string a) Removes trailing spaces. string left(string a, int count) Returns a substring consisting of count characters from the left side of string right(string a, int count) Returns a substring consisting of count characters from the right side of string lpad(string a, int size, string letters) Left-pads string a with string letters and returns a string rpad(string a, int size, string letters) Right-pads string a with string letters and returns a string substr(string a, int pos, int count) Returns a substring extracting count characters starting from string substring(string a, int pos, int count) The same as substr(). string reverse(string) Returns a string in reverse order. string replace(string a, string b, string c) Replaces string b in string a with string c. list split(string a, string b) Splits string a at string b and returns a list of strings. concat() The concat() function requires at least two or more strings. All the parameters are concatenated into one string.Syntax: concat(string1,string2,...) concat_ws() The concat_ws() function connects two or more strings with a predefined separator. extract() extract() uses regular expression matching to retrieve a single substring or all substrings from a string. json_extract() The json_extract() function converts the specified JSON string to map.
          • Data and time functions

            Function Description int now() Returns the current timestamp of the system. timestamp timestamp() Returns the current timestamp of the system. date date() Returns the current UTC date based on the current system. time time() Returns the current UTC time based on the current system. datetime datetime() Returns the current UTC date and time based on the current system.
          • Schema-related functions

            • For nGQL statements

              Function Description id(vertex) Returns the ID of a vertex. The data type of the result is the same as the vertex ID. map properties(vertex) Returns the properties of a vertex. map properties(edge) Returns the properties of an edge. string type(edge) Returns the edge type of an edge. src(edge) Returns the source vertex ID of an edge. The data type of the result is the same as the vertex ID. dst(edge) Returns the destination vertex ID of an edge. The data type of the result is the same as the vertex ID. int rank(edge) Returns the rank value of an edge. vertex Returns the information of vertices, including VIDs, tags, properties, and values. edge Returns the information of edges, including edge types, source vertices, destination vertices, ranks, properties, and values. vertices Returns the information of vertices in a subgraph. For more information, see GET SUBGRAPH. edges Returns the information of edges in a subgraph. For more information, see GET SUBGRAPH. path Returns the information of a path. For more information, see FIND PATH.
            • For statements compatible with openCypher

              Function Description id(<vertex>) Returns the ID of a vertex. The data type of the result is the same as the vertex ID. list tags(<vertex>) Returns the Tag of a vertex, which serves the same purpose as labels(). list labels(<vertex>) Returns the Tag of a vertex, which serves the same purpose as tags(). This function is used for compatibility with openCypher syntax. map properties(<vertex_or_edge>) Returns the properties of a vertex or an edge. string type(<edge>) Returns the edge type of an edge. src(<edge>) Returns the source vertex ID of an edge. The data type of the result is the same as the vertex ID. dst(<edge>) Returns the destination vertex ID of an edge. The data type of the result is the same as the vertex ID. vertex startNode(<path>) Visits an edge or a path and returns its source vertex ID. string endNode(<path>) Visits an edge or a path and returns its destination vertex ID. int rank(<edge>) Returns the rank value of an edge.
          • List functions

            Function Description keys(expr) Returns a list containing the string representations for all the property names of vertices, edges, or maps. labels(vertex) Returns the list containing all the tags of a vertex. nodes(path) Returns the list containing all the vertices in a path. range(start, end [, step]) Returns the list containing all the fixed-length steps in [start,end]. step is 1 by default. relationships(path) Returns the list containing all the relationships in a path. reverse(list) Returns the list reversing the order of all elements in the original list. tail(list) Returns all the elements of the original list, excluding the first one. head(list) Returns the first element of a list. last(list) Returns the last element of a list. reduce() The reduce() function applies an expression to each element in a list one by one, chains the result to the next iteration by taking it as the initial value, and returns the final result.
          • Type conversion functions

            Function Description bool toBoolean() Converts a string value to a boolean value. float toFloat() Converts an integer or string value to a floating point number. string toString() Converts non-compound types of data, such as numbers, booleans, and so on, to strings. int toInteger() Converts a floating point or string value to an integer value. set toSet() Converts a list or set value to a set value. int hash() The hash() function returns the hash value of the argument. The argument can be a number, a string, a list, a boolean, null, or an expression that evaluates to a value of the preceding data types.
          • Predicate functions

            Predicate functions return true or false. They are most commonly used in WHERE clauses.

            <predicate>(<variable> IN <list> WHERE <condition>)\n
            Function Description exists() Returns true if the specified property exists in the vertex, edge or map. Otherwise, returns false. any() Returns true if the specified predicate holds for at least one element in the given list. Otherwise, returns false. all() Returns true if the specified predicate holds for all elements in the given list. Otherwise, returns false. none() Returns true if the specified predicate holds for no element in the given list. Otherwise, returns false. single() Returns true if the specified predicate holds for exactly one of the elements in the given list. Otherwise, returns false.
          • Conditional expressions functions

            Function Description CASE The CASE expression uses conditions to filter the result of an nGQL query statement. It is usually used in the YIELD and RETURN clauses. The CASE expression will traverse all the conditions. When the first condition is met, the CASE expression stops reading the conditions and returns the result. If no conditions are met, it returns the result in the ELSE clause. If there is no ELSE clause and no conditions are met, it returns NULL. coalesce() Returns the first not null value in all expressions.
          "},{"location":"2.quick-start/6.cheatsheet-for-ngql/#general_queries_statements","title":"General queries statements","text":"
          • MATCH

            MATCH <pattern> [<clause_1>] RETURN <output> [<clause_2>];\n
            Pattern Example Description Match vertices (v) You can use a user-defined variable in a pair of parentheses to represent a vertex in a pattern. For example: (v). Match tags MATCH (v:player) RETURN v You can specify a tag with :<tag_name> after the vertex in a pattern. Match multiple tags MATCH (v:player:team) RETURN v To match vertices with multiple tags, use colons (:). Match vertex properties MATCH (v:player{name:\"Tim Duncan\"}) RETURN v MATCH (v) WITH v, properties(v) as props, keys(properties(v)) as kk WHERE [i in kk where props[i] == \"Tim Duncan\"] RETURN v You can specify a vertex property with {<prop_name>: <prop_value>} after the tag in a pattern; or use a vertex property value to get vertices directly. Match a VID. MATCH (v) WHERE id(v) == 'player101' RETURN v You can use the VID to match a vertex. The id() function can retrieve the VID of a vertex. Match multiple VIDs. MATCH (v:player { name: 'Tim Duncan' })--(v2) WHERE id(v2) IN [\"player101\", \"player102\"] RETURN v2 To match multiple VIDs, use WHERE id(v) IN [vid_list]. Match connected vertices MATCH (v:player{name:\"Tim Duncan\"})--(v2) RETURN v2.player.name AS Name You can use the -- symbol to represent edges of both directions and match vertices connected by these edges. You can add a > or < to the -- symbol to specify the direction of an edge. Match paths MATCH p=(v:player{name:\"Tim Duncan\"})-->(v2) RETURN p Connected vertices and edges form a path. You can use a user-defined variable to name a path as follows. Match edges MATCH (v:player{name:\"Tim Duncan\"})-[e]-(v2) RETURN eMATCH ()<-[e]-() RETURN e Besides using --, -->, or <-- to indicate a nameless edge, you can use a user-defined variable in a pair of square brackets to represent a named edge. For example: -[e]-. Match an edge type MATCH ()-[e:follow]-() RETURN e Just like vertices, you can specify an edge type with :<edge_type> in a pattern. For example: -[e:follow]-. Match edge type properties MATCH (v:player{name:\"Tim Duncan\"})-[e:follow{degree:95}]->(v2) RETURN e MATCH ()-[e]->() WITH e, properties(e) as props, keys(properties(e)) as kk WHERE [i in kk where props[i] == 90] RETURN e You can specify edge type properties with {<prop_name>: <prop_value>} in a pattern. For example: [e:follow{likeness:95}]; or use an edge type property value to get edges directly. Match multiple edge types MATCH (v:player{name:\"Tim Duncan\"})-[e:follow | :serve]->(v2) RETURN e The | symbol can help matching multiple edge types. For example: [e:follow|:serve]. The English colon (:) before the first edge type cannot be omitted, but the English colon before the subsequent edge type can be omitted, such as [e:follow|serve]. Match multiple edges MATCH (v:player{name:\"Tim Duncan\"})-[]->(v2)<-[e:serve]-(v3) RETURN v2, v3 You can extend a pattern to match multiple edges in a path. Match fixed-length paths MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow*2]->(v2) RETURN DISTINCT v2 AS Friends You can use the :<edge_type>*<hop> pattern to match a fixed-length path. hop must be a non-negative integer. The data type of e is the list. Match variable-length paths MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow*1..3]->(v2) RETURN v2 AS Friends minHop: Optional. It represents the minimum length of the path. minHop: must be a non-negative integer. The default value is 1.minHop and maxHop are optional and the default value is 1 and infinity respectively. The data type of e is the list. Match variable-length paths with multiple edge types MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow | serve*2]->(v2) RETURN DISTINCT v2 You can specify multiple edge types in a fixed-length or variable-length pattern. In this case, hop, minHop, and maxHop take effect on all edge types. The data type of e is the list. Retrieve vertex or edge information MATCH (v:player{name:\"Tim Duncan\"}) RETURN vMATCH (v:player{name:\"Tim Duncan\"})-[e]->(v2) RETURN e Use RETURN {<vertex_name> | <edge_name>} to retrieve all the information of a vertex or an edge. Retrieve VIDs MATCH (v:player{name:\"Tim Duncan\"}) RETURN id(v) Use the id() function to retrieve VIDs. Retrieve tags MATCH (v:player{name:\"Tim Duncan\"}) RETURN labels(v) Use the labels() function to retrieve the list of tags on a vertex.To retrieve the nth element in the labels(v) list, use labels(v)[n-1]. Retrieve a single property on a vertex or an edge MATCH (v:player{name:\"Tim Duncan\"}) RETURN v.player.age Use RETURN {<vertex_name> | <edge_name>}.<property> to retrieve a single property.Use AS to specify an alias for a property. Retrieve all properties on a vertex or an edge MATCH p=(v:player{name:\"Tim Duncan\"})-[]->(v2) RETURN properties(v2) Use the properties() function to retrieve all properties on a vertex or an edge. Retrieve edge types MATCH p=(v:player{name:\"Tim Duncan\"})-[e]->() RETURN DISTINCT type(e) Use the type() function to retrieve the matched edge types. Retrieve paths MATCH p=(v:player{name:\"Tim Duncan\"})-[*3]->() RETURN p Use RETURN <path_name> to retrieve all the information of the matched paths. Retrieve vertices in a path MATCH p=(v:player{name:\"Tim Duncan\"})-[]->(v2) RETURN nodes(p) Use the nodes() function to retrieve all vertices in a path. Retrieve edges in a path MATCH p=(v:player{name:\"Tim Duncan\"})-[]->(v2) RETURN relationships(p) Use the relationships() function to retrieve all edges in a path. Retrieve path length MATCH p=(v:player{name:\"Tim Duncan\"})-[*..2]->(v2) RETURN p AS Paths, length(p) AS Length Use the length() function to retrieve the length of a path.
          • OPTIONAL MATCH

            Pattern Example Description Matches patterns against your graph database, just like MATCH does. MATCH (m)-[]->(n) WHERE id(m)==\"player100\" OPTIONAL MATCH (n)-[]->(l) RETURN id(m),id(n),id(l) If no matches are found, OPTIONAL MATCH will use a null for missing parts of the pattern.
          • LOOKUP

            LOOKUP ON {<vertex_tag> | <edge_type>} \n[WHERE <expression> [AND <expression> ...]] \nYIELD <return_list> [AS <alias>]\n
            Pattern Example Description Retrieve vertices LOOKUP ON player WHERE player.name == \"Tony Parker\" YIELD player.name AS name, player.age AS age The following example returns vertices whose name is Tony Parker and the tag is player. Retrieve edges LOOKUP ON follow WHERE follow.degree == 90 YIELD follow.degree Returns edges whose degree is 90 and the edge type is follow. List vertices with a tag LOOKUP ON player YIELD properties(vertex),id(vertex) Shows how to retrieve the VID of all vertices tagged with player. List edges with an edge types LOOKUP ON follow YIELD edge AS e Shows how to retrieve the source Vertex IDs, destination vertex IDs, and ranks of all edges of the follow edge type. Count the numbers of vertices or edges LOOKUP ON player YIELD id(vertex)| YIELD COUNT(*) AS Player_Count Shows how to count the number of vertices tagged with player. Count the numbers of edges LOOKUP ON follow YIELD edge as e| YIELD COUNT(*) AS Like_Count Shows how to count the number of edges of the follow edge type.
          • GO

            GO [[<M> TO] <N> {STEP|STEPS} ] FROM <vertex_list>\nOVER <edge_type_list> [{REVERSELY | BIDIRECT}]\n[ WHERE <conditions> ]\nYIELD [DISTINCT] <return_list>\n[{SAMPLE <sample_list> | LIMIT <limit_list>}]\n[| GROUP BY {col_name | expr | position} YIELD <col_name>]\n[| ORDER BY <expression> [{ASC | DESC}]]\n[| LIMIT [<offset_value>,] <number_rows>]\n
            Example Description GO FROM \"player102\" OVER serve YIELD dst(edge) Returns the teams that player 102 serves. GO 2 STEPS FROM \"player102\" OVER follow YIELD dst(edge) Returns the friends of player 102 with 2 hops. GO FROM \"player100\", \"player102\" OVER serve WHERE properties(edge).start_year > 1995 YIELD DISTINCT properties($$).name AS team_name, properties(edge).start_year AS start_year, properties($^).name AS player_name Adds a filter for the traversal. GO FROM \"player100\" OVER follow, serve YIELD properties(edge).degree, properties(edge).start_year The following example traverses along with multiple edge types. If there is no value for a property, the output is NULL. GO FROM \"player100\" OVER follow REVERSELY YIELD src(edge) AS destination The following example returns the neighbor vertices in the incoming direction of player 100. GO FROM \"player100\" OVER follow REVERSELY YIELD src(edge) AS id | GO FROM $-.id OVER serve WHERE properties($^).age > 20 YIELD properties($^).name AS FriendOf, properties($$).name AS Team The following example retrieves the friends of player 100 and the teams that they serve. GO FROM \"player102\" OVER follow YIELD dst(edge) AS both The following example returns all the neighbor vertices of player 102. GO 2 STEPS FROM \"player100\" OVER follow YIELD src(edge) AS src, dst(edge) AS dst, properties($$).age AS age | GROUP BY $-.dst YIELD $-.dst AS dst, collect_set($-.src) AS src, collect($-.age) AS age The following example the outputs according to age.
          • FETCH

            • Fetch vertex properties

              FETCH PROP ON {<tag_name>[, tag_name ...] | *} \n<vid> [, vid ...] \nYIELD <return_list> [AS <alias>]\n
              Example Description FETCH PROP ON player \"player100\" YIELD properties(vertex) Specify a tag in the FETCH statement to fetch the vertex properties by that tag. FETCH PROP ON player \"player100\" YIELD player.name AS name Use a YIELD clause to specify the properties to be returned. FETCH PROP ON player \"player101\", \"player102\", \"player103\" YIELD properties(vertex) Specify multiple VIDs (vertex IDs) to fetch properties of multiple vertices. Separate the VIDs with commas. FETCH PROP ON player, t1 \"player100\", \"player103\" YIELD properties(vertex) Specify multiple tags in the FETCH statement to fetch the vertex properties by the tags. Separate the tags with commas. FETCH PROP ON * \"player100\", \"player106\", \"team200\" YIELD properties(vertex) Set an asterisk symbol * to fetch properties by all tags in the current graph space.
            • Fetch edge properties

              FETCH PROP ON <edge_type> <src_vid> -> <dst_vid>[@<rank>] [, <src_vid> -> <dst_vid> ...]\nYIELD <output>;\n
              Example Description FETCH PROP ON serve \"player100\" -> \"team204\" YIELD properties(edge) The following statement fetches all the properties of the serve edge that connects vertex \"player100\" and vertex \"team204\". FETCH PROP ON serve \"player100\" -> \"team204\" YIELD serve.start_year Use a YIELD clause to fetch specific properties of an edge. FETCH PROP ON serve \"player100\" -> \"team204\", \"player133\" -> \"team202\" YIELD properties(edge) Specify multiple edge patterns (<src_vid> -> <dst_vid>[@<rank>]) to fetch properties of multiple edges. Separate the edge patterns with commas. FETCH PROP ON serve \"player100\" -> \"team204\"@1 YIELD properties(edge) To fetch on an edge whose rank is not 0, set its rank in the FETCH statement. GO FROM \"player101\" OVER follow YIELD follow._src AS s, follow._dst AS d | FETCH PROP ON follow $-.s -> $-.d YIELD follow.degree The following statement returns the degree values of the follow edges that start from vertex \"player101\". $var = GO FROM \"player101\" OVER follow YIELD follow._src AS s, follow._dst AS d; FETCH PROP ON follow $var.s -> $var.d YIELD follow.degree You can use user-defined variables to construct similar queries.
          • SHOW

            Statement Syntax Example Description SHOW CHARSET SHOW CHARSET SHOW CHARSET Shows the available character sets. SHOW COLLATION SHOW COLLATION SHOW COLLATION Shows the collations supported by NebulaGraph. SHOW CREATE SPACE SHOW CREATE SPACE <space_name> SHOW CREATE SPACE basketballplayer Shows the creating statement of the specified graph space. SHOW CREATE TAG/EDGE SHOW CREATE {TAG <tag_name> | EDGE <edge_name>} SHOW CREATE TAG player Shows the basic information of the specified tag. SHOW HOSTS SHOW HOSTS [GRAPH | STORAGE | META] SHOW HOSTSSHOW HOSTS GRAPH Shows the host and version information of Graph Service, Storage Service, and Meta Service. SHOW INDEX STATUS SHOW {TAG | EDGE} INDEX STATUS SHOW TAG INDEX STATUS Shows the status of jobs that rebuild native indexes, which helps check whether a native index is successfully rebuilt or not. SHOW INDEXES SHOW {TAG | EDGE} INDEXES SHOW TAG INDEXES Shows the names of existing native indexes. SHOW PARTS SHOW PARTS [<part_id>] SHOW PARTS Shows the information of a specified partition or all partitions in a graph space. SHOW ROLES SHOW ROLES IN <space_name> SHOW ROLES in basketballplayer Shows the roles that are assigned to a user account. SHOW SNAPSHOTS SHOW SNAPSHOTS SHOW SNAPSHOTS Shows the information of all the snapshots. SHOW SPACES SHOW SPACES SHOW SPACES Shows existing graph spaces in NebulaGraph. SHOW STATS SHOW STATS SHOW STATS Shows the statistics of the graph space collected by the latest STATS job. SHOW TAGS/EDGES SHOW TAGS | EDGES SHOW TAGS,SHOW EDGES Shows all the tags in the current graph space. SHOW USERS SHOW USERS SHOW USERS Shows the user information. SHOW SESSIONS SHOW SESSIONS SHOW SESSIONS Shows the information of all the sessions. SHOW SESSIONS SHOW SESSION <Session_Id> SHOW SESSION 1623304491050858 Shows a specified session with its ID. SHOW QUERIES SHOW [ALL] QUERIES SHOW QUERIES Shows the information of working queries in the current session. SHOW META LEADER SHOW META LEADER SHOW META LEADER Shows the information of the leader in the current Meta cluster.
          "},{"location":"2.quick-start/6.cheatsheet-for-ngql/#clauses_and_options","title":"Clauses and options","text":"Clause Syntax Example Description GROUP BY GROUP BY <var> YIELD <var>, <aggregation_function(var)> GO FROM \"player100\" OVER follow BIDIRECT YIELD $$.player.name as Name | GROUP BY $-.Name YIELD $-.Name as Player, count(*) AS Name_Count Finds all the vertices connected directly to vertex \"player100\", groups the result set by player names, and counts how many times the name shows up in the result set. LIMIT YIELD <var> [| LIMIT [<offset_value>,] <number_rows>] GO FROM \"player100\" OVER follow REVERSELY YIELD $$.player.name AS Friend, $$.player.age AS Age | ORDER BY $-.Age, $-.Friend | LIMIT 1, 3 Returns the 3 rows of data starting from the second row of the sorted output. SKIP RETURN <var> [SKIP <offset>] [LIMIT <number_rows>] MATCH (v:player{name:\"Tim Duncan\"}) --> (v2) RETURN v2.player.name AS Name, v2.player.age AS Age ORDER BY Age DESC SKIP 1 SKIP can be used alone to set the offset and return the data after the specified position. SAMPLE <go_statement> SAMPLE <sample_list>; GO 3 STEPS FROM \"player100\" OVER * YIELD properties($$).name AS NAME, properties($$).age AS Age SAMPLE [1,2,3]; Takes samples evenly in the result set and returns the specified amount of data. ORDER BY <YIELD clause> ORDER BY <expression> [ASC | DESC] [, <expression> [ASC | DESC] ...] FETCH PROP ON player \"player100\", \"player101\", \"player102\", \"player103\" YIELD player.age AS age, player.name AS name | ORDER BY $-.age ASC, $-.name DESC The ORDER BY clause specifies the order of the rows in the output. RETURN RETURN {<vertex_name>|<edge_name>|<vertex_name>.<property>|<edge_name>.<property>|...} MATCH (v:player) RETURN v.player.name, v.player.age LIMIT 3 Returns the first three rows with values of the vertex properties name and age. TTL CREATE TAG <tag_name>(<property_name_1> <property_value_1>, <property_name_2> <property_value_2>, ...) ttl_duration= <value_int>, ttl_col = <property_name> CREATE TAG t2(a int, b int, c string) ttl_duration= 100, ttl_col = \"a\" Create a tag and set the TTL options. WHERE WHERE {<vertex|edge_alias>.<property_name> {>|==|<|...} <value>...} MATCH (v:player) WHERE v.player.name == \"Tim Duncan\" XOR (v.player.age < 30 AND v.player.name == \"Yao Ming\") OR NOT (v.player.name == \"Yao Ming\" OR v.player.name == \"Tim Duncan\") RETURN v.player.name, v.player.age The WHERE clause filters the output by conditions. The WHERE clause usually works in Native nGQL GO and LOOKUP statements, and OpenCypher MATCH and WITH statements. YIELD YIELD [DISTINCT] <col> [AS <alias>] [, <col> [AS <alias>] ...] [WHERE <conditions>]; GO FROM \"player100\" OVER follow YIELD dst(edge) AS ID | FETCH PROP ON player $-.ID YIELD player.age AS Age | YIELD AVG($-.Age) as Avg_age, count(*)as Num_friends Finds the players that \"player100\" follows and calculates their average age. WITH MATCH $expressions WITH {nodes()|labels()|...} MATCH p=(v:player{name:\"Tim Duncan\"})--() WITH nodes(p) AS n UNWIND n AS n1 RETURN DISTINCT n1 The WITH clause can retrieve the output from a query part, process it, and pass it to the next query part as the input. UNWIND UNWIND <list> AS <alias> <RETURN clause> UNWIND [1,2,3] AS n RETURN n Splits a list into rows."},{"location":"2.quick-start/6.cheatsheet-for-ngql/#space_statements","title":"Space statements","text":"Statement Syntax Example Description CREATE SPACE CREATE SPACE [IF NOT EXISTS] <graph_space_name> ( [partition_num = <partition_number>,] [replica_factor = <replica_number>,] vid_type = {FIXED_STRING(<N>) | INT[64]} ) [COMMENT = '<comment>'] CREATE SPACE my_space_1 (vid_type=FIXED_STRING(30)) Creates a graph space with CREATE SPACE CREATE SPACE <new_graph_space_name> AS <old_graph_space_name> CREATE SPACE my_space_4 as my_space_3 Clone a graph. space. USE USE <graph_space_name> USE space1 Specifies a graph space as the current working graph space for subsequent queries. SHOW SPACES SHOW SPACES SHOW SPACES Lists all the graph spaces in the NebulaGraph examples. DESCRIBE SPACE DESC[RIBE] SPACE <graph_space_name> DESCRIBE SPACE basketballplayer Returns the information about the specified graph space. CLEAR SPACE CLEAR SPACE [IF EXISTS] <graph_space_name> Deletes the vertices and edges in a graph space, but does not delete the graph space itself and the schema information. DROP SPACE DROP SPACE [IF EXISTS] <graph_space_name> DROP SPACE basketballplayer Deletes everything in the specified graph space."},{"location":"2.quick-start/6.cheatsheet-for-ngql/#tag_statements","title":"TAG statements","text":"Statement Syntax Example Description CREATE TAG CREATE TAG [IF NOT EXISTS] <tag_name> ( <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>'] [{, <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']} ...] ) [TTL_DURATION = <ttl_duration>] [TTL_COL = <prop_name>] [COMMENT = '<comment>'] CREATE TAG woman(name string, age int, married bool, salary double, create_time timestamp) TTL_DURATION = 100, TTL_COL = \"create_time\" Creates a tag with the given name in a graph space. DROP TAG DROP TAG [IF EXISTS] <tag_name> DROP TAG test; Drops a tag with the given name in the current working graph space. ALTER TAG ALTER TAG <tag_name> <alter_definition> [, alter_definition] ...] [ttl_definition [, ttl_definition] ... ] [COMMENT = '<comment>'] ALTER TAG t1 ADD (p3 int, p4 string) Alters the structure of a tag with the given name in a graph space. You can add or drop properties, and change the data type of an existing property. You can also set a TTL (Time-To-Live) on a property, or change its TTL duration. SHOW TAGS SHOW TAGS SHOW TAGS Shows the name of all tags in the current graph space. DESCRIBE TAG DESC[RIBE] TAG <tag_name> DESCRIBE TAG player Returns the information about a tag with the given name in a graph space, such as field names, data type, and so on. DELETE TAG DELETE TAG <tag_name_list> FROM <VID> DELETE TAG test1 FROM \"test\" Deletes a tag with the given name on a specified vertex."},{"location":"2.quick-start/6.cheatsheet-for-ngql/#edge_type_statements","title":"Edge type statements","text":"Statement Syntax Example Description CREATE EDGE CREATE EDGE [IF NOT EXISTS] <edge_type_name> ( <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>'] [{, <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']} ...] ) [TTL_DURATION = <ttl_duration>] [TTL_COL = <prop_name>] [COMMENT = '<comment>'] CREATE EDGE e1(p1 string, p2 int, p3 timestamp) TTL_DURATION = 100, TTL_COL = \"p2\" Creates an edge type with the given name in a graph space. DROP EDGE DROP EDGE [IF EXISTS] <edge_type_name> DROP EDGE e1 Drops an edge type with the given name in a graph space. ALTER EDGE ALTER EDGE <edge_type_name> <alter_definition> [, alter_definition] ...] [ttl_definition [, ttl_definition] ... ] [COMMENT = '<comment>'] ALTER EDGE e1 ADD (p3 int, p4 string) Alters the structure of an edge type with the given name in a graph space. SHOW EDGES SHOW EDGES SHOW EDGES Shows all edge types in the current graph space. DESCRIBE EDGE DESC[RIBE] EDGE <edge_type_name> DESCRIBE EDGE follow Returns the information about an edge type with the given name in a graph space, such as field names, data type, and so on."},{"location":"2.quick-start/6.cheatsheet-for-ngql/#vertex_statements","title":"Vertex statements","text":"Statement Syntax Example Description INSERT VERTEX INSERT VERTEX [IF NOT EXISTS] [tag_props, [tag_props] ...] VALUES <vid>: ([prop_value_list]) INSERT VERTEX t2 (name, age) VALUES \"13\":(\"n3\", 12), \"14\":(\"n4\", 8) Inserts one or more vertices into a graph space in NebulaGraph. DELETE VERTEX DELETE VERTEX <vid> [, <vid> ...] DELETE VERTEX \"team1\" Deletes vertices and the related incoming and outgoing edges of the vertices. UPDATE VERTEX UPDATE VERTEX ON <tag_name> <vid> SET <update_prop> [WHEN <condition>] [YIELD <output>] UPDATE VERTEX ON player \"player101\" SET age = age + 2 Updates properties on tags of a vertex. UPSERT VERTEX UPSERT VERTEX ON <tag> <vid> SET <update_prop> [WHEN <condition>] [YIELD <output>] UPSERT VERTEX ON player \"player667\" SET age = 31 The UPSERT statement is a combination of UPDATE and INSERT. You can use UPSERT VERTEX to update the properties of a vertex if it exists or insert a new vertex if it does not exist."},{"location":"2.quick-start/6.cheatsheet-for-ngql/#edge_statements","title":"Edge statements","text":"Statement Syntax Example Description INSERT EDGE INSERT EDGE [IF NOT EXISTS] <edge_type> ( <prop_name_list> ) VALUES <src_vid> -> <dst_vid>[@<rank>] : ( <prop_value_list> ) [, <src_vid> -> <dst_vid>[@<rank>] : ( <prop_value_list> ), ...] INSERT EDGE e2 (name, age) VALUES \"11\"->\"13\":(\"n1\", 1) Inserts an edge or multiple edges into a graph space from a source vertex (given by src_vid) to a destination vertex (given by dst_vid) with a specific rank in NebulaGraph. DELETE EDGE DELETE EDGE <edge_type> <src_vid> -> <dst_vid>[@<rank>] [, <src_vid> -> <dst_vid>[@<rank>] ...] DELETE EDGE serve \"player100\" -> \"team204\"@0 Deletes one edge or multiple edges at a time. UPDATE EDGE UPDATE EDGE ON <edge_type> <src_vid> -> <dst_vid> [@<rank>] SET <update_prop> [WHEN <condition>] [YIELD <output>] UPDATE EDGE ON serve \"player100\" -> \"team204\"@0 SET start_year = start_year + 1 Updates properties on an edge. UPSERT EDGE UPSERT EDGE ON <edge_type> <src_vid> -> <dst_vid> [@rank] SET <update_prop> [WHEN <condition>] [YIELD <properties>] UPSERT EDGE on serve \"player666\" -> \"team200\"@0 SET end_year = 2021 The UPSERT statement is a combination of UPDATE and INSERT. You can use UPSERT EDGE to update the properties of an edge if it exists or insert a new edge if it does not exist."},{"location":"2.quick-start/6.cheatsheet-for-ngql/#index","title":"Index","text":"
          • Native index

            You can use native indexes together with LOOKUP and MATCH statements.

            Statement Syntax Example Description CREATE INDEX CREATE {TAG | EDGE} INDEX [IF NOT EXISTS] <index_name> ON {<tag_name> | <edge_name>} ([<prop_name_list>]) [COMMENT = '<comment>'] CREATE TAG INDEX player_index on player() Add native indexes for the existing tags, edge types, or properties. SHOW CREATE INDEX SHOW CREATE {TAG | EDGE} INDEX <index_name> show create tag index index_2 Shows the statement used when creating a tag or an edge type. It contains detailed information about the index, such as its associated properties. SHOW INDEXES SHOW {TAG | EDGE} INDEXES SHOW TAG INDEXES Shows the defined tag or edge type indexes names in the current graph space. DESCRIBE INDEX DESCRIBE {TAG | EDGE} INDEX <index_name> DESCRIBE TAG INDEX player_index_0 Gets the information about the index with a given name, including the property name (Field) and the property type (Type) of the index. REBUILD INDEX REBUILD {TAG | EDGE} INDEX [<index_name_list>] REBUILD TAG INDEX single_person_index Rebuilds the created tag or edge type index. If data is updated or inserted before the creation of the index, you must rebuild the indexes manually to make sure that the indexes contain the previously added data. SHOW INDEX STATUS SHOW {TAG | EDGE} INDEX STATUS SHOW TAG INDEX STATUS Returns the name of the created tag or edge type index and its status. DROP INDEX DROP {TAG | EDGE} INDEX [IF EXISTS] <index_name> DROP TAG INDEX player_index_0 Removes an existing index from the current graph space.
          • Full-text index

            Syntax Example Description SIGN IN TEXT SERVICE [(<elastic_ip:port> [,<username>, <password>]), (<elastic_ip:port>), ...] SIGN IN TEXT SERVICE (127.0.0.1:9200) The full-text indexes is implemented based on Elasticsearch. After deploying an Elasticsearch cluster, you can use the SIGN IN statement to log in to the Elasticsearch client. SHOW TEXT SEARCH CLIENTS SHOW TEXT SEARCH CLIENTS Shows text search clients. SIGN OUT TEXT SERVICE SIGN OUT TEXT SERVICE Signs out to the text search clients. CREATE FULLTEXT {TAG | EDGE} INDEX <index_name> ON {<tag_name> | <edge_name>} (<prop_name> [,<prop_name>]...) [ANALYZER=\"<analyzer_name>\"] CREATE FULLTEXT TAG INDEX nebula_index_1 ON player(name) Creates full-text indexes. SHOW FULLTEXT INDEXES SHOW FULLTEXT INDEXES Show full-text indexes. REBUILD FULLTEXT INDEX REBUILD FULLTEXT INDEX Rebuild full-text indexes. DROP FULLTEXT INDEX <index_name> DROP FULLTEXT INDEX nebula_index_1 Drop full-text indexes. LOOKUP ON {<tag> | <edge_type>} WHERE ES_QUERY(<index_name>, \"<text>\") YIELD <return_list> [| LIMIT [<offset>,] <number_rows>] LOOKUP ON player WHERE ES_QUERY(fulltext_index_1,\"Chris\") YIELD id(vertex) Use query options.
          "},{"location":"2.quick-start/6.cheatsheet-for-ngql/#subgraph_and_path_statements","title":"Subgraph and path statements","text":"Type Syntax Example Description GET SUBGRAPH GET SUBGRAPH [WITH PROP] [<step_count> {STEP|STEPS}] FROM {<vid>, <vid>...} [{IN | OUT | BOTH} <edge_type>, <edge_type>...] YIELD [VERTICES AS <vertex_alias>] [,EDGES AS <edge_alias>] GET SUBGRAPH 1 STEPS FROM \"player100\" YIELD VERTICES AS nodes, EDGES AS relationships Retrieves information of vertices and edges reachable from the source vertices of the specified edge types and returns information of the subgraph. FIND PATH FIND { SHORTEST | ALL | NOLOOP } PATH [WITH PROP] FROM <vertex_id_list> TO <vertex_id_list> OVER <edge_type_list> [REVERSELY | BIDIRECT] [<WHERE clause>] [UPTO <N> {STEP|STEPS}] YIELD path as <alias> [| ORDER BY $-.path] [| LIMIT <M>] FIND SHORTEST PATH FROM \"player102\" TO \"team204\" OVER * YIELD path as p Finds the paths between the selected source vertices and destination vertices. A returned path is like (<vertex_id>)-[:<edge_type_name>@<rank>]->(<vertex_id)."},{"location":"2.quick-start/6.cheatsheet-for-ngql/#query_tuning_statements","title":"Query tuning statements","text":"Type Syntax Example Description EXPLAIN EXPLAIN [format=\"row\" | \"dot\"] <your_nGQL_statement> EXPLAIN format=\"row\" SHOW TAGSEXPLAIN format=\"dot\" SHOW TAGS Helps output the execution plan of an nGQL statement without executing the statement. PROFILE PROFILE [format=\"row\" | \"dot\"] <your_nGQL_statement> PROFILE format=\"row\" SHOW TAGSEXPLAIN format=\"dot\" SHOW TAGS Executes the statement, then outputs the execution plan as well as the execution profile."},{"location":"2.quick-start/6.cheatsheet-for-ngql/#operation_and_maintenance_statements","title":"Operation and maintenance statements","text":"
          • SUBMIT JOB BALANCE

            Syntax Description BALANCE LEADER Starts a job to balance the distribution of all the storage leaders in graph spaces. It returns the job ID.
          • Job statements

            Syntax Description SUBMIT JOB COMPACT Triggers the long-term RocksDB compact operation. SUBMIT JOB FLUSH Writes the RocksDB memfile in the memory to the hard disk. SUBMIT JOB STATS Starts a job that makes the statistics of the current graph space. Once this job succeeds, you can use the SHOW STATS statement to list the statistics. SHOW JOB <job_id> Shows the information about a specific job and all its tasks in the current graph space. The Meta Service parses a SUBMIT JOB request into multiple tasks and assigns them to the nebula-storaged processes. SHOW JOBS Lists all the unexpired jobs in the current graph space. STOP JOB Stops jobs that are not finished in the current graph space. RECOVER JOB Re-executes the failed jobs in the current graph space and returns the number of recovered jobs.
          • Kill queries

            Syntax Example Description KILL QUERY (session=<session_id>, plan=<plan_id>) KILL QUERY(SESSION=1625553545984255,PLAN=163) Terminates the query being executed, and is often used to terminate slow queries.
          • Kill sessions

            Syntax Example Description KILL {SESSION|SESSIONS} <SessionId> KILL SESSION 1672887983842984 Terminates a single session. SHOW SESSIONS | YIELD $-.SessionId AS sid [WHERE <filter_clause>] | KILL {SESSION|SESSIONS} $-.sid SHOW SESSIONS | YIELD $-.SessionId AS sid, $-.CreateTime as CreateTime | ORDER BY $-.CreateTime ASC | LIMIT 2 | KILL SESSIONS $-.sid Terminates multiple sessions based on specified criteria. SHOW SESSIONS | KILL SESSIONS $-.SessionId SHOW SESSIONS | KILL SESSIONS $-.SessionId Terminates all sessions.
          "},{"location":"20.appendix/0.FAQ/","title":"FAQ","text":"

          This topic lists the frequently asked questions for using NebulaGraph master. You can use the search box in the help center or the search function of the browser to match the questions you are looking for.

          If the solutions described in this topic cannot solve your problems, ask for help on the NebulaGraph forum or submit an issue on GitHub issue.

          "},{"location":"20.appendix/0.FAQ/#about_manual_updates","title":"About manual updates","text":""},{"location":"20.appendix/0.FAQ/#why_is_the_behavior_in_the_manual_not_consistent_with_the_system","title":"\"Why is the behavior in the manual not consistent with the system?\"","text":"

          NebulaGraph is still under development. Its behavior changes from time to time. Users can submit an issue to inform the team if the manual and the system are not consistent.

          Note

          If you find some errors in this topic:

          1. Click the pencil button at the top right side of this page.
          2. Use markdown to fix this error. Then click \"Commit changes\" at the bottom, which will start a Github pull request.
          3. Sign the CLA. This pull request will be merged after the acceptance of at least two reviewers.
          "},{"location":"20.appendix/0.FAQ/#about_legacy_version_compatibility","title":"About legacy version compatibility","text":"

          Compatibility

          Neubla Graph master is not compatible with NebulaGraph 1.x nor 2.0-RC in both data formats and RPC-protocols, and vice versa. The service process may quit if using an lower version client to connect to a higher version server.

          To upgrade data formats, see Upgrade NebulaGraph to the current version. Users must upgrade all clients.

          "},{"location":"20.appendix/0.FAQ/#about_execution_errors","title":"About execution errors","text":""},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_-1005graphmemoryexceeded_-2600","title":"\"How to resolve the error -1005:GraphMemoryExceeded: (-2600)?\"","text":"

          This error is issued by the Memory Tracker when it observes that memory usage has exceeded a set threshold. This mechanism can help avoid service processes from being terminated by the system's OOM (Out of Memory) killer. Steps to resolve:

          1. Check memory usage: First, you need to check the memory usage during the execution of the command. If the memory usage is indeed high, then this error might be expected.

          2. Check the configuration of the Memory Tracker: If the memory usage is not high, check the relevant configurations of the Memory Tracker. These include memory_tracker_untracked_reserved_memory_mb (untracked reserved memory in MB), memory_tracker_limit_ratio (memory limit ratio), and memory_purge_enabled (whether memory purge is enabled). For the configuration of the Memory Tracker, see memory tracker configuration.

          3. Optimize configurations: Adjust these configurations according to the actual situation. For example, if the available memory limit is too low, you can increase the value of memory_tracker_limit_ratio.

          "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_semanticerror_missing_yield_clause","title":"\"How to resolve the error SemanticError: Missing yield clause.?\"","text":"

          Starting with NebulaGraph 3.0.0, the statements LOOKUP, GO, and FETCH must output results with the YIELD clause. For more information, see YIELD.

          "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_host_not_enough","title":"\"How to resolve the error Host not enough!?\"","text":"

          From NebulaGraph version 3.0.0, the Storage services added in the configuration files CANNOT be read or written directly. The configuration files only register the Storage services into the Meta services. You must run the ADD HOSTS command to read and write data on Storage servers. For more information, see Manage Storage hosts.

          "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_to_get_the_property_of_the_vertex_in_vage_should_use_the_format_vartagprop","title":"\"How to resolve the error To get the property of the vertex in 'v.age', should use the format 'var.tag.prop'?\"","text":"

          From NebulaGraph version 3.0.0, patterns support matching multiple tags at the same time, so you need to specify a tag name when querying properties. The original statement RETURN variable_name.property_name is changed to RETURN variable_name.<tag_name>.property_name.

          "},{"location":"20.appendix/0.FAQ/#how_to_resolve_used_memory_hits_the_high_watermark0800000_of_total_system_memory","title":"\"How to resolve Used memory hits the high watermark(0.800000) of total system memory.?\"","text":"

          The error may be caused if the system memory usage is higher than the threshold specified bysystem_memory_high_watermark_ratio, which defaults to 0.8. When the threshold is exceeded, an alarm is triggered and NebulaGraph stops processing queries.

          Possible solutions are as follows:

          • Clean the system memory to make it below the threshold.
          • Modify the Graph configuration. Add the system_memory_high_watermark_ratio parameter to the configuration files of all Graph servers, and set it greater than 0.8, such as 0.9.

          However, the system_memory_high_watermark_ratio parameter is deprecated. It is recommended that you use the Memory Tracker feature instead to limit the memory usage of Graph and Storage services. For more information, see Memory Tracker for Graph service and Memory Tracker for Storage service.

          "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_storage_error_e_rpc_failure","title":"\"How to resolve the error Storage Error E_RPC_FAILURE?\"","text":"

          The reason for this error is usually that the storaged process returns too many data back to the graphd process. Possible solutions are as follows:

          • Modify configuration files: Modify the value of --storage_client_timeout_ms in the nebula-graphd.conf file to extend the connection timeout of the Storage client. This configuration is measured in milliseconds (ms). For example, set --storage_client_timeout_ms=60000. If this parameter is not specified in the nebula-graphd.conf file, specify it manually. Tip: Add --local_config=true at the beginning of the configuration file and restart the service.
          • Optimize the query statement: Reduce queries that scan the entire database. No matter whether LIMIT is used to limit the number of returned results, use the GO statement to rewrite the MATCH statement (the former is optimized, while the latter is not).
          • Check whether the Storaged process has OOM. (dmesg |grep nebula).
          • Use better SSD or memory for the Storage Server.
          • Retry.
          "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_the_leader_has_changed_try_again_later","title":"\"How to resolve the error The leader has changed. Try again later?\"","text":"

          It is a known issue. Just retry 1 to N times, where N is the partition number. The reason is that the meta client needs some heartbeats to update or errors to trigger the new leader information.

          If this error occurs when logging in to NebulaGraph, you can consider using df -h to view the disk space and check whether the local disk is full.

          "},{"location":"20.appendix/0.FAQ/#how_to_resolve_schema_not_exist_xxx","title":"\"How to resolve Schema not exist: xxx?\"","text":"

          If the system returns Schema not exist when querying, make sure that:

          • Whether there is a tag or an edge type in the Schema.
          • Whether the name of the tag or the edge type is a keyword. If it is a keyword, enclose them with backquotes (`). For more information, see Keywords.
          "},{"location":"20.appendix/0.FAQ/#unable_to_download_snapshot_packages_when_compiling_exchange_connectors_or_algorithm","title":"Unable to download SNAPSHOT packages when compiling Exchange, Connectors, or Algorithm","text":"

          Problem description: The system reports Could not find artifact com.vesoft:client:jar:xxx-SNAPSHOT when compiling.

          Cause: There is no local Maven repository for storing or downloading SNAPSHOT packages. The default central repository in Maven only stores official releases, not development versions (SNAPSHOTs).

          Solution: Add the following configuration in the profiles scope of Maven's setting.xml file:

            <profile>\n     <activation>\n        <activeByDefault>true</activeByDefault>\n     </activation>\n     <repositories>\n        <repository>\n            <id>snapshots</id>\n            <url>https://oss.sonatype.org/content/repositories/snapshots/</url>\n            <snapshots>\n               <enabled>true</enabled>\n            </snapshots>\n      </repository>\n     </repositories>\n  </profile>\n
          "},{"location":"20.appendix/0.FAQ/#how_to_resolve_error_-1004_syntaxerror_syntax_error_near","title":"\"How to resolve [ERROR (-1004)]: SyntaxError: syntax error near?\"","text":"

          In most cases, a query statement requires a YIELD or a RETURN. Check your query statement to see if YIELD or RETURN is provided.

          "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_cant_solve_the_start_vids_from_the_sentence","title":"\"How to resolve the error can\u2019t solve the start vids from the sentence?\"","text":"

          The graphd process requires start vids to begin a graph traversal. The start vids can be specified by the user. For example:

          > GO FROM ${vids} ...\n> MATCH (src) WHERE id(src) == ${vids}\n# The \"start vids\" are explicitly given by ${vids}.\n

          It can also be found from a property index. For example:

          # CREATE TAG INDEX IF NOT EXISTS i_player ON player(name(20));\n# REBUILD TAG INDEX i_player;\n\n> LOOKUP ON player WHERE player.name == \"abc\" | ... YIELD ...\n> MATCH (src) WHERE src.name == \"abc\" ...\n# The \"start vids\" are found from the property index \"name\".\n

          Otherwise, an error like can\u2019t solve the start vids from the sentence will be returned.

          "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_wrong_vertex_id_type_1001","title":"\"How to resolve the error Wrong vertex id type: 1001?\"","text":"

          Check whether the VID is INT64 or FIXED_STRING(N) set by create space. For more information, see create space.

          "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_the_vid_must_be_a_64-bit_integer_or_a_string_fitting_space_vertex_id_length_limit","title":"\"How to resolve the error The VID must be a 64-bit integer or a string fitting space vertex id length limit.?\"","text":"

          Check whether the length of the VID exceeds the limitation. For more information, see create space.

          "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_edge_conflict_or_vertex_conflict","title":"\"How to resolve the error edge conflict or vertex conflict?\"","text":"

          NebulaGraph may return such errors when the Storage service receives multiple requests to insert or update the same vertex or edge within milliseconds. Try the failed requests again later.

          "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_rpc_failure_in_metaclient_connection_refused","title":"\"How to resolve the error RPC failure in MetaClient: Connection refused?\"","text":"

          The reason for this error is usually that the metad service status is unusual, or the network of the machine where the metad and graphd services are located is disconnected. Possible solutions are as follows:

          • Check the metad service status on the server where the metad is located. If the service status is unusual, restart the metad service.
          • Use telnet meta-ip:port to check the network status under the server that returns an error.
          • Check the port information in the configuration file. If the port is different from the one used when connecting, use the port in the configuration file or modify the configuration.
          "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_storageclientbaseinl214_request_to_xxxx9779_failed_n6apache6thrift9transport19ttransportexceptione_timed_out_in_nebula-graphinfo","title":"\"How to resolve the error StorageClientBase.inl:214] Request to \"x.x.x.x\":9779 failed: N6apache6thrift9transport19TTransportExceptionE: Timed Out in nebula-graph.INFO?\"","text":"

          The reason for this error may be that the amount of data to be queried is too large, and the storaged process has timed out. Possible solutions are as follows:

          • When importing data, set Compaction manually to make read faster.
          • Extend the RPC connection timeout of the Graph service and the Storage service. Modify the value of --storage_client_timeout_ms in the nebula-graphd.conf file. This configuration is measured in milliseconds (ms). The default value is 60000ms.
          "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_metaclientcpp65_heartbeat_failed_statuswrong_cluster_in_nebula-storagedinfo_or_hbprocessorcpp54_reject_wrong_cluster_host_xxxx9771_in_nebula-metadinfo","title":"\"How to resolve the error MetaClient.cpp:65] Heartbeat failed, status:Wrong cluster! in nebula-storaged.INFO, or HBProcessor.cpp:54] Reject wrong cluster host \"x.x.x.x\":9771! in nebula-metad.INFO?\"","text":"

          The reason for this error may be that the user has modified the IP or the port information of the metad process, or the storage service has joined other clusters before. Possible solutions are as follows:

          Delete the cluster.id file in the installation directory where the storage machine is deployed (the default installation directory is /usr/local/nebula), and restart the storaged service.

          "},{"location":"20.appendix/0.FAQ/#how_to_resolve_the_error_storage_error_more_than_one_request_trying_to_addupdatedelete_one_edgevertex_at_he_same_time","title":"\"How to resolve the error Storage Error: More than one request trying to add/update/delete one edge/vertex at he same time.?\"","text":"

          The reason for this error is that the current NebulaGraph version does not support concurrent requests to the same vertex or edge at the same time. To solve this error, re-execute your commands.

          "},{"location":"20.appendix/0.FAQ/#about_design_and_functions","title":"About design and functions","text":""},{"location":"20.appendix/0.FAQ/#how_is_the_time_spent_value_at_the_end_of_each_return_message_calculated","title":"\"How is the time spent value at the end of each return message calculated?\"","text":"

          Take the returned message of SHOW SPACES as an example:

          nebula> SHOW SPACES;\n+--------------------+\n| Name               |\n+--------------------+\n| \"basketballplayer\" |\n+--------------------+\nGot 1 rows (time spent 1235/1934 us)\n
          • The first number 1235 shows the time spent by the database itself, that is, the time it takes for the query engine to receive a query from the client, fetch the data from the storage server, and perform a series of calculations.
          • The second number 1934 shows the time spent from the client's perspective, that is, the time it takes for the client from sending a request, receiving a response, and displaying the result on the screen.
          "},{"location":"20.appendix/0.FAQ/#why_does_the_port_number_of_the_nebula-storaged_process_keep_showing_red_after_connecting_to_nebulagraph","title":"\"Why does the port number of the nebula-storaged process keep showing red after connecting to NebulaGraph?\"","text":"

          Because the nebula-storaged process waits for nebula-metad to add the current Storage service during the startup process. The Storage works after it receives the ready signal. Starting from NebulaGraph 3.0.0, the Meta service cannot directly read or write data in the Storage service that you add in the configuration file. The configuration file only registers the Storage service to the Meta service. You must run the ADD HOSTS command to enable the Meta to read and write data in the Storage service. For more information, see Manage Storage hosts.

          "},{"location":"20.appendix/0.FAQ/#why_is_there_no_line_separating_each_row_in_the_returned_result_of_nebulagraph_260","title":"\"Why is there no line separating each row in the returned result of NebulaGraph 2.6.0?\"","text":"

          This is caused by the release of NebulaGraph Console 2.6.0, not the change of NebulaGraph core. And it will not affect the content of the returned data itself.

          "},{"location":"20.appendix/0.FAQ/#about_dangling_edges","title":"About dangling edges","text":"

          A dangling edge is an edge that only connects to a single vertex and only one part of the edge connects to the vertex.

          Dangling edges may appear in NebulaGraph master as the design. And there is no MERGE statements of openCypher. The guarantee for dangling edges depends entirely on the application level. For more information, see INSERT VERTEX, DELETE VERTEX, INSERT EDGE, DELETE EDGE.

          "},{"location":"20.appendix/0.FAQ/#can_i_set_replica_factor_as_an_even_number_in_create_space_statements_eg_replica_factor_2","title":"\"Can I set replica_factor as an even number in CREATE SPACE statements, e.g., replica_factor = 2?\"","text":"

          NO.

          The Storage service guarantees its availability based on the Raft consensus protocol. The number of failed replicas must not exceed half of the total replica number.

          When the number of machines is 1, replica_factor can only be set to1.

          When there are enough machines and replica_factor=2, if one replica fails, the Storage service fails. No matter replica_factor=3 or replica_factor=4, if more than one replica fails, the Storage Service fails. To prevent unnecessary waste of resources, we recommend that you set an odd replica number.

          We suggest that you set replica_factor=3 for a production environment and replica_factor=1 for a test environment. Do not use an even number.

          "},{"location":"20.appendix/0.FAQ/#is_stopping_or_killing_slow_queries_supported","title":"\"Is stopping or killing slow queries supported?\"","text":"

          Yes. For more information, see Kill query.

          "},{"location":"20.appendix/0.FAQ/#why_are_the_query_results_different_when_using_go_and_match_to_execute_the_same_semantic_query","title":"\"Why are the query results different when using GO and MATCH to execute the same semantic query?\"","text":"

          The possible reasons are listed as follows.

          • GO statements find the dangling edges.
          • RETURN commands do not specify the sequence.
          • The dense vertex truncation limitation defined by max_edge_returned_per_vertex in the Storage service is triggered.
          • Using different types of paths may cause different query results.

            • GO statements use walk. Both vertices and edges can be repeatedly visited in graph traversal.
            • MATCH statements are compatible with openCypher and use trail. Only vertices can be repeatedly visited in graph traversal.

          The example is as follows.

          All queries that start from A with 5 hops will end at C (A->B->C->D->E->C). If it is 6 hops, the GO statement will end at D (A->B->C->D->E->C->D), because the edge C->D can be visited repeatedly. However, the MATCH statement returns empty, because edges cannot be visited repeatedly.

          Therefore, using GO and MATCH to execute the same semantic query may cause different query results.

          For more information, see Wikipedia.

          "},{"location":"20.appendix/0.FAQ/#how_to_count_the_verticesedges_number_of_each_tagedge_type","title":"\"How to count the vertices/edges number of each tag/edge type?\"","text":"

          See show-stats.

          "},{"location":"20.appendix/0.FAQ/#how_to_get_all_the_verticesedge_of_each_tagedge_type","title":"\"How to get all the vertices/edge of each tag/edge type?\"","text":"
          1. Create and rebuild the index.

            > CREATE TAG INDEX IF NOT EXISTS i_player ON player();\n> REBUILD TAG INDEX IF NOT EXISTS i_player;\n
          2. Use LOOKUP or MATCH. For example:

            > LOOKUP ON player;\n> MATCH (n:player) RETURN n;\n

          For more information, see INDEX, LOOKUP, and MATCH.

          "},{"location":"20.appendix/0.FAQ/#can_non-english_characters_be_used_as_identifiers_such_as_the_names_of_graph_spaces_tags_edge_types_properties_and_indexes","title":"\"Can non-English characters be used as identifiers, such as the names of graph spaces, tags, edge types, properties, and indexes?\"","text":"

          Yes, for more information, see Keywords and reserved words.

          "},{"location":"20.appendix/0.FAQ/#how_to_get_the_out-degreethe_in-degree_of_a_given_vertex","title":"\"How to get the out-degree/the in-degree of a given vertex?\"","text":"

          The out-degree of a vertex refers to the number of edges starting from that vertex, while the in-degree refers to the number of edges pointing to that vertex.

          nebula > MATCH (s)-[e]->() WHERE id(s) == \"given\" RETURN count(e); #Out-degree\nnebula > MATCH (s)<-[e]-() WHERE id(s) == \"given\" RETURN count(e); #In-degree\n

          This is a very slow operation to get the out/in degree since no accelaration can be applied (no indices or caches). It also could be out-of-memory when hitting a supper-node.

          "},{"location":"20.appendix/0.FAQ/#how_to_quickly_get_the_out-degree_and_in-degree_of_all_vertices","title":"\"How to quickly get the out-degree and in-degree of all vertices?\"","text":"

          There is no such command.

          You can use NebulaGraph Algorithm.

          "},{"location":"20.appendix/0.FAQ/#about_operation_and_maintenance","title":"About operation and maintenance","text":""},{"location":"20.appendix/0.FAQ/#the_runtime_log_files_are_too_large_how_to_recycle_the_logs","title":"\"The runtime log files are too large. How to recycle the logs?\"","text":"

          NebulaGraph uses glog for log printing, which does not support log recycling. You can manage runtime logs by using cron jobs or the log management tool logrotate. For operational details, see Log recycling.

          "},{"location":"20.appendix/0.FAQ/#how_to_check_the_nebulagraph_version","title":"\"How to check the NebulaGraph version?\"","text":"

          If the service is running: run command SHOW HOSTS META in nebula-console. See SHOW HOSTS.

          If the service is not running:

          Different installation methods make the method of checking the version different. The instructions are as follows:

          If the service is not running, run the command ./<binary_name> --version to get the version and the Git commit IDs of the NebulaGraph binary files. For example:

          $ ./nebula-graphd --version\n
          • If you deploy NebulaGraph with Docker Compose

            Check the version of NebulaGraph deployed by Docker Compose. The method is similar to the previous method, except that you have to enter the container first. The commands are as follows:

            docker exec -it nebula-docker-compose_graphd_1 bash\ncd bin/\n./nebula-graphd --version\n
          • If you install NebulaGraph with RPM/DEB package

            Run rpm -qa |grep nebula to check the version of NebulaGraph.

          "},{"location":"20.appendix/0.FAQ/#how_to_scale_my_cluster_updown_or_outin","title":"\"How to scale my cluster up/down or out/in?\"","text":"

          Warning

          The cluster scaling function has not been officially released in the community edition. The operations involving SUBMIT JOB BALANCE DATA REMOVE and SUBMIT JOB BALANCE DATA are experimental features in the community edition and the functionality is not stable. Before using it in the community edition, make sure to back up your data first and set enable_experimental_feature and enable_data_balance to true in the Graph configuration file.

          "},{"location":"20.appendix/0.FAQ/#increase_or_decrease_the_number_of_meta_graph_or_storage_nodes","title":"Increase or decrease the number of Meta, Graph, or Storage nodes","text":"
          • NebulaGraph master does not provide any commands or tools to support automatic scale out/in. You can refer to the following steps:

            • Scale out and scale in metad: The metad process can not be scaled out or scale in. The process cannot be moved to a new machine. You cannot add a new metad process to the service.

              Note

              You can use the Meta transfer script tool to migrate Meta services. Note that the Meta-related settings in the configuration files of Storage and Graph services need to be modified correspondingly.

            • Scale in graphd: Remove the IP of the graphd process from the code in the client. Close this graphd process.
            • Scale out graphd: Prepare the binary and config files of the graphd process in the new host. Modify the config files and add all existing addresses of the metad processes. Then start the new graphd process.
            • Scale in storaged: See Balance remove command. After the command is finished, stop this storaged process.

              Caution

              • Before executing this command to migrate the data in the specified Storage node, make sure that the number of other Storage nodes is sufficient to meet the set replication factor. For example, if the replication factor is set to 3, then before executing this command, make sure that the number of other Storage nodes is greater than or equal to 3.
              • If there are multiple space partitions in the Storage node to be migrated, execute this command in each space to migrate all space partitions in the Storage node.
            • Scale out storaged: Prepare the binary and config files of the storaged process in the new host, modify the config files and add all existing addresses of the metad processes. Then register the storaged process to the metad, and then start the new storaged process. For details, see Register storaged services.

              You also need to run Balance Data and Balance leader after scaling in/out storaged.

          "},{"location":"20.appendix/0.FAQ/#add_or_remove_disks_in_the_storage_nodes","title":"Add or remove disks in the Storage nodes","text":"

          Currently, Storage cannot dynamically recognize new added disks. You can add or remove disks in the Storage nodes of the distributed cluster by following these steps:

          1. Execute SUBMIT JOB BALANCE DATA REMOVE <ip:port> to migrate data in the Storage node with the disk to be added or removed to other Storage nodes.

            Caution

            • Before executing this command to migrate the data in the specified Storage node, make sure that the number of other Storage nodes is sufficient to meet the set replication factor. For example, if the replication factor is set to 3, then before executing this command, make sure that the number of other Storage nodes is greater than or equal to 3.
            • If there are multiple space partitions in the Storage node to be migrated, execute this command in each space to migrate all space partitions in the Storage node.
          2. Execute DROP HOSTS <ip:port> to remove the Storage node with the disk to be added or removed.

          3. In the configuration file of all Storage nodes, configure the path of the new disk to be added or removed through --data_path, see Storage configuration file for details.

          4. Execute ADD HOSTS <ip:port> to re-add the Storage node with the disk to be added or removed.
          5. As needed, execute SUBMIT JOB BALANCE DATA to evenly distribute the shards of the current space to all Storage nodes and execute SUBMIT JOB BALANCE LEADER command to balance the leaders in all spaces. Before running the command, select a space.
          "},{"location":"20.appendix/0.FAQ/#after_changing_the_name_of_the_host_the_old_one_keeps_displaying_offline_what_should_i_do","title":"\"After changing the name of the host, the old one keeps displaying OFFLINE. What should I do?\"","text":"

          Hosts with the status of OFFLINE will be automatically deleted after one day.

          "},{"location":"20.appendix/0.FAQ/#how_do_i_view_the_dmp_file","title":"\"How do I view the dmp file?\"","text":"

          The dmp file is an error report file detailing the exit of the process and can be viewed with the gdb utility. the Coredump file is saved in the directory of the startup binary (by default it is /usr/local/nebula) and is generated automatically when the NebulaGraph service crashes.

          1. Check the Core file process name, pid is usually a numeric value.
            $ file core.<pid>\n
          2. Use gdb to debug.
            $ gdb <process.name> core.<pid>\n
          3. View the contents of the file.
            $(gdb) bt\n

          For example:

          $ file core.1316027\ncore.1316027: ELF 64-bit LSB core file, x86-64, version 1 (SYSV), SVR4-style, from '/home/workspace/fork/nebula-debug/bin/nebula-metad --flagfile /home/k', real uid: 1008, effective uid: 1008, real gid: 1008, effective gid: 1008, execfn: '/home/workspace/fork/nebula-debug/bin/nebula-metad', platform: 'x86_64'\n\n$ gdb /home/workspace/fork/nebula-debug/bin/nebula-metad core.1316027\n\n$(gdb) bt\n#0  0x00007f9de58fecf5 in __memcpy_ssse3_back () from /lib64/libc.so.6\n#1  0x0000000000eb2299 in void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char*>(char*, char*, std::forward_iterator_tag) ()\n#2  0x0000000000ef71a7 in nebula::meta::cpp2::QueryDesc::QueryDesc(nebula::meta::cpp2::QueryDesc const&) ()\n...\n

          If you are not clear about the information that dmp prints out, you can post the printout with the OS version, hardware configuration, error logs before and after the Core file was created and actions that may have caused the error on the NebulaGraph forum.

          "},{"location":"20.appendix/0.FAQ/#how_can_i_set_the_nebulagraph_service_to_start_automatically_on_boot_via_systemctl","title":"How can I set the NebulaGraph service to start automatically on boot via systemctl?","text":"
          1. Execute systemctl enable to start the metad, graphd and storaged services.

            [root]# systemctl enable nebula-metad.service\nCreated symlink from /etc/systemd/system/multi-user.target.wants/nebula-metad.service to /usr/lib/systemd/system/nebula-metad.service.\n[root]# systemctl enable nebula-graphd.service\nCreated symlink from /etc/systemd/system/multi-user.target.wants/nebula-graphd.service to /usr/lib/systemd/system/nebula-graphd.service.\n[root]# systemctl enable nebula-storaged.service\nCreated symlink from /etc/systemd/system/multi-user.target.wants/nebula-storaged.service to /usr/lib/systemd/system/nebula-storaged.service.\n
          2. Configure the service files for metad, graphd and storaged to set the service to pull up automatically.

            Caution

            The following points need to be noted when configuring the service file. - The paths of the PIDFile, ExecStart, ExecReload and ExecStop parameters need to be the same as those on the server. - RestartSec is the length of time (in seconds) to wait before restarting, which can be modified according to the actual situation. - (Optional) StartLimitInterval is the unlimited restart, the default is 10 seconds if the restart exceeds 5 times, and set to 0 means unlimited restart. - (Optional) LimitNOFILE is the maximum number of open files for the service, the default is 1024 and can be changed according to the actual situation.

            Configure the service file for the metad service.

            $ vi /usr/lib/systemd/system/nebula-metad.service\n\n[Unit]\nDescription=Nebula Graph Metad Service\nAfter=network.target\n\n[Service ]\nType=forking\nRestart=always\nRestartSec=15s\nPIDFile=/usr/local/nebula/pids/nebula-metad.pid\nExecStart=/usr/local/nebula/scripts/nebula.service start metad\nExecReload=/usr/local/nebula/scripts/nebula.service restart metad\nExecStop=/usr/local/nebula/scripts/nebula.service stop metad\nPrivateTmp=true\nStartLimitInterval=0\nLimitNOFILE=1024\n\n[Install]\nWantedBy=multi-user.target\n

            Configure the service file for the graphd service.

            $ vi /usr/lib/systemd/system/nebula-graphd.service\n[Unit]\nDescription=Nebula Graph Graphd Service\nAfter=network.target\n\n[Service]\nType=forking\nRestart=always\nRestartSec=15s\nPIDFile=/usr/local/nebula/pids/nebula-graphd.pid\nExecStart=/usr/local/nebula/scripts/nebula.service start graphd\nExecReload=/usr/local/nebula/scripts/nebula.service restart graphd\nExecStop=/usr/local/nebula/scripts/nebula.service stop graphd\nPrivateTmp=true\nStartLimitInterval=0\nLimitNOFILE=1024\n\n[Install]\nWantedBy=multi-user.target\n
            Configure the service file for the storaged service.

            $ vi /usr/lib/systemd/system/nebula-storaged.service\n[Unit]\nDescription=Nebula Graph Storaged Service\nAfter=network.target\n\n[Service]\nType=forking\nRestart=always\nRestartSec=15s\nPIDFile=/usr/local/nebula/pids/nebula-storaged.pid\nExecStart=/usr/local/nebula/scripts/nebula.service start storaged\nExecReload=/usr/local/nebula/scripts/nebula.service restart storaged\nExecStop=/usr/local/nebula/scripts/nebula.service stop storaged\nPrivateTmp=true\nStartLimitInterval=0\nLimitNOFILE=1024\n\n[Install]\nWantedBy=multi-user.target\n
          3. Reload the configuration file.

            [root]# sudo systemctl daemon-reload\n
          4. Restart the service.

            $ systemctl restart nebula-metad.service\n$ systemctl restart nebula-graphd.service\n$ systemctl restart nebula-storaged.service\n
          "},{"location":"20.appendix/0.FAQ/#about_connections","title":"About connections","text":""},{"location":"20.appendix/0.FAQ/#which_ports_should_be_opened_on_the_firewalls","title":"\"Which ports should be opened on the firewalls?\"","text":"

          If you have not modified the predefined ports in the Configurations, open the following ports for the NebulaGraph services:

          Service Port Meta 9559, 9560, 19559 Graph 9669, 19669 Storage 9777 ~ 9780, 19779

          If you have customized the configuration files and changed the predefined ports, find the port numbers in your configuration files and open them on the firewalls.

          For more port information, see Port Guide for Company Products.

          "},{"location":"20.appendix/0.FAQ/#how_to_test_whether_a_port_is_open_or_closed","title":"\"How to test whether a port is open or closed?\"","text":"

          You can use telnet as follows to check for port status.

          telnet <ip> <port>\n

          Note

          If you cannot use the telnet command, check if telnet is installed or enabled on your host.

          For example:

          // If the port is open:\n$ telnet 192.168.1.10 9669\nTrying 192.168.1.10...\nConnected to 192.168.1.10.\nEscape character is '^]'.\n\n// If the port is closed or blocked:\n$ telnet 192.168.1.10 9777\nTrying 192.168.1.10...\ntelnet: connect to address 192.168.1.10: Connection refused\n
          "},{"location":"20.appendix/6.eco-tool-version/","title":"Ecosystem tools overview","text":""},{"location":"20.appendix/6.eco-tool-version/#nebulagraph_studio","title":"NebulaGraph Studio","text":"

          NebulaGraph Studio (Studio for short) is a graph database visualization tool that can be accessed through the Web. It can be used with NebulaGraph DBMS to provide one-stop services such as composition, data import, writing nGQL queries, and graph exploration. For details, see What is NebulaGraph Studio.

          Note

          The release of the Studio is independent of NebulaGraph core, and its naming method is also not the same as the core naming rules.

          NebulaGraph version Studio version master v3.9.0"},{"location":"20.appendix/6.eco-tool-version/#nebulagraph_dashboard_community_edition","title":"NebulaGraph Dashboard Community Edition","text":"

          NebulaGraph Dashboard Community Edition (Dashboard for short) is a visualization tool for monitoring the status of machines and services in the NebulaGraph cluster. For details, see What is NebulaGraph Dashboard.

          NebulaGraph version Dashboard Community version master v3.4.0"},{"location":"20.appendix/6.eco-tool-version/#nebulagraph_exchange","title":"NebulaGraph Exchange","text":"

          NebulaGraph Exchange (Exchange for short) is an Apache Spark&trade application for batch migration of data in a cluster to NebulaGraph in a distributed environment. It can support the migration of batch data and streaming data in a variety of different formats. For details, see What is NebulaGraph Exchange.

          NebulaGraph version Exchange Community version master v3.8.0"},{"location":"20.appendix/6.eco-tool-version/#nebulagraph_operator","title":"NebulaGraph Operator","text":"

          NebulaGraph Operator (Operator for short) is a tool to automate the deployment, operation, and maintenance of NebulaGraph clusters on Kubernetes. Building upon the excellent scalability mechanism of Kubernetes, NebulaGraph introduced its operation and maintenance knowledge into the Kubernetes system, which makes NebulaGraph a real cloud-native graph database. For more information, see What is NebulaGraph Operator.

          NebulaGraph version Operator version master v1.8.0"},{"location":"20.appendix/6.eco-tool-version/#nebulagraph_importer","title":"NebulaGraph Importer","text":"

          NebulaGraph Importer (Importer for short) is a CSV file import tool for NebulaGraph. The Importer can read the local CSV file, and then import the data into the NebulaGraph database. For details, see What is NebulaGraph Importer.

          NebulaGraph version Importer version master v4.1.0"},{"location":"20.appendix/6.eco-tool-version/#nebulagraph_spark_connector","title":"NebulaGraph Spark Connector","text":"

          NebulaGraph Spark Connector is a Spark connector that provides the ability to read and write NebulaGraph data in the Spark standard format. NebulaGraph Spark Connector consists of two parts, Reader and Writer. For details, see What is NebulaGraph Spark Connector.

          NebulaGraph version Spark Connector version master v3.8.0"},{"location":"20.appendix/6.eco-tool-version/#nebulagraph_flink_connector","title":"NebulaGraph Flink Connector","text":"

          NebulaGraph Flink Connector is a connector that helps Flink users quickly access NebulaGraph. It supports reading data from the NebulaGraph database or writing data read from other external data sources to the NebulaGraph database. For details, see What is NebulaGraph Flink Connector.

          NebulaGraph version Flink Connector version master v3.8.0"},{"location":"20.appendix/6.eco-tool-version/#nebulagraph_algorithm","title":"NebulaGraph Algorithm","text":"

          NebulaGraph Algorithm (Algorithm for short) is a Spark application based on GraphX, which uses a complete algorithm tool to analyze data in the NebulaGraph database by submitting a Spark task To perform graph computing, use the algorithm under the lib repository through programming to perform graph computing for DataFrame. For details, see What is NebulaGraph Algorithm.

          NebulaGraph version Algorithm version master v3.0.0"},{"location":"20.appendix/6.eco-tool-version/#nebulagraph_console","title":"NebulaGraph Console","text":"

          NebulaGraph Console is the native CLI client of NebulaGraph. For how to use it, see NebulaGraph Console.

          NebulaGraph version Console version master v3.6.0"},{"location":"20.appendix/6.eco-tool-version/#nebulagraph_docker_compose","title":"NebulaGraph Docker Compose","text":"

          Docker Compose can quickly deploy NebulaGraph clusters. For how to use it, please refer to Docker Compose Deployment NebulaGraph.

          NebulaGraph version Docker Compose version master v3.6.0"},{"location":"20.appendix/6.eco-tool-version/#backup_restore","title":"Backup & Restore","text":"

          Backup&Restore (BR for short) is a command line interface (CLI) tool that can help back up the graph space data of NebulaGraph, or restore it through a backup file data.

          NebulaGraph version BR version master v3.6.0"},{"location":"20.appendix/6.eco-tool-version/#nebulagraph_bench","title":"NebulaGraph Bench","text":"

          NebulaGraph Bench is used to test the baseline performance data of NebulaGraph. It uses the standard data set of LDBC.

          NebulaGraph version Bench version master v1.2.0"},{"location":"20.appendix/6.eco-tool-version/#api_and_sdk","title":"API and SDK","text":"

          Compatibility

          Select the latest version of X.Y.* which is the same as the core version.

          NebulaGraph version Language master C++ master Go master Python master Java master HTTP"},{"location":"20.appendix/6.eco-tool-version/#community_contributed_tools","title":"Community contributed tools","text":"

          The following are useful utilities and tools contributed and maintained by community users.

          • Object Relational Mapping (ORM) frameworks
            • NGBATIS: An ORM framework that integrates with the Spring Boot ecosystem
            • graph-ocean: An ORM framework developed based on NebulaGraph Java client
            • nebula-jdbc: An ORM framework that supports JDBC
            • nebula-carina: An ORM framework developed based on NebulaGraph Python client
            • norm: An ORM framework written in Golang
          • Data processing tools
            • nebula-real-time-exchange: Enables real-time data synchronization from MySQL to NebulaGraph
            • nebula-datax-plugin: Provides NebulaGraph's Reader and Writer plugins based on DataX to enable offline data synchronization
          • Quick deployment
            • nebulagraph-docker-ext: Starts NebulaGraph in Docker Desktop in 10 seconds
            • nebulagraph-lite: A NebulaGraph sandbox running in the browser
          • Testing
            • testcontainers-nebula: A lightweight database testing library for Java
          • Clients
            • zio-nebula: Scala client
            • nebula-node: Node.js client
            • nebula-php: PHP client
            • nebula-net: .NET client
            • nebula-rust: Rust client
          • Terminal tools
            • nebula-console-intellij-plugin: A Nebula-console plugin for JetBrains IDEs that supports syntax highlighting, function field auto-completion, data table pagination, and relationship graphs.
          "},{"location":"20.appendix/error-code/","title":"Error code","text":"

          NebulaGraph returns an error code when an error occurs. This topic describes the details of the error code returned.

          Note

          • If an error occurs but no error code is returned, or if the error code description is unclear, we welcome your feedback or suggestions on the forum or GitHub.
          • When the code returned is 0, it means that the operation is successful.
          Error name Error Code Description E_DISCONNECTED -1 Lost connection E_FAIL_TO_CONNECT -2 Unable to establish connection E_RPC_FAILURE -3 RPC failure E_LEADER_CHANGED -4 Raft leader has been changed E_SPACE_NOT_FOUND -5 Graph space does not exist E_TAG_NOT_FOUND -6 Tag does not exist E_EDGE_NOT_FOUND -7 Edge type does not exist E_INDEX_NOT_FOUND -8 Index does not exist E_EDGE_PROP_NOT_FOUND -9 Edge type property does not exist E_TAG_PROP_NOT_FOUND -10 Tag property does not exist E_ROLE_NOT_FOUND -11 The current role does not exist E_CONFIG_NOT_FOUND -12 The current configuration does not exist E_MACHINE_NOT_FOUND -13 The current host does not exist E_LISTENER_NOT_FOUND -15 Listener does not exist E_PART_NOT_FOUND -16 The current partition does not exist E_KEY_NOT_FOUND -17 Key does not exist E_USER_NOT_FOUND -18 User does not exist E_STATS_NOT_FOUND -19 Statistics do not exist E_SERVICE_NOT_FOUND -20 No current service found E_DRAINER_NOT_FOUND -21 Drainer does not exist E_DRAINER_CLIENT_NOT_FOUND -22 Drainer client does not exist E_PART_STOPPED -23 The current partition has already been stopped E_BACKUP_FAILED -24 Backup failed E_BACKUP_EMPTY_TABLE -25 The backed-up table is empty E_BACKUP_TABLE_FAILED -26 Table backup failure E_PARTIAL_RESULT -27 MultiGet could not get all data E_REBUILD_INDEX_FAILED -28 Index rebuild failed E_INVALID_PASSWORD -29 Password is invalid E_FAILED_GET_ABS_PATH -30 Unable to get absolute path E_BAD_USERNAME_PASSWORD -1001 Authentication failed E_SESSION_INVALID -1002 Invalid session E_SESSION_TIMEOUT -1003 Session timeout E_SYNTAX_ERROR -1004 Syntax error E_EXECUTION_ERROR -1005 Execution error E_STATEMENT_EMPTY -1006 Statement is empty E_BAD_PERMISSION -1008 Permission denied E_SEMANTIC_ERROR -1009 Semantic error E_TOO_MANY_CONNECTIONS -1010 Maximum number of connections exceeded E_PARTIAL_SUCCEEDED -1011 Access to storage failed (only some requests succeeded) E_NO_HOSTS -2001 Host does not exist E_EXISTED -2002 Host already exists E_INVALID_HOST -2003 Invalid host E_UNSUPPORTED -2004 The current command, statement, or function is not supported E_NOT_DROP -2005 Not allowed to drop E_CONFIG_IMMUTABLE -2007 Configuration items cannot be changed E_CONFLICT -2008 Parameters conflict with meta data E_INVALID_PARM -2009 Invalid parameter E_WRONGCLUSTER -2010 Wrong cluster E_ZONE_NOT_ENOUGH -2011 Listener conflicts E_ZONE_IS_EMPTY -2012 Host not exist E_SCHEMA_NAME_EXISTS -2013 Schema name already exists E_RELATED_INDEX_EXISTS -2014 There are still indexes related to tag or edge, cannot drop it E_RELATED_SPACE_EXISTS -2015 There are still some space on the host, cannot drop it E_STORE_FAILURE -2021 Failed to store data E_STORE_SEGMENT_ILLEGAL -2022 Illegal storage segment E_BAD_BALANCE_PLAN -2023 Invalid data balancing plan E_BALANCED -2024 The cluster is already in the data balancing status E_NO_RUNNING_BALANCE_PLAN -2025 There is no running data balancing plan E_NO_VALID_HOST -2026 Lack of valid hosts E_CORRUPTED_BALANCE_PLAN -2027 A data balancing plan that has been corrupted E_IMPROPER_ROLE -2030 Failed to recover user role E_INVALID_PARTITION_NUM -2031 Number of invalid partitions E_INVALID_REPLICA_FACTOR -2032 Invalid replica factor E_INVALID_CHARSET -2033 Invalid character set E_INVALID_COLLATE -2034 Invalid character sorting rules E_CHARSET_COLLATE_NOT_MATCH -2035 Character set and character sorting rule mismatch E_SNAPSHOT_FAILURE -2040 Failed to generate a snapshot E_BLOCK_WRITE_FAILURE -2041 Failed to write block data E_ADD_JOB_FAILURE -2044 Failed to add new task E_STOP_JOB_FAILURE -2045 Failed to stop task E_SAVE_JOB_FAILURE -2046 Failed to save task information E_BALANCER_FAILURE -2047 Data balancing failed E_JOB_NOT_FINISHED -2048 The current task has not been completed E_TASK_REPORT_OUT_DATE -2049 Task report failed E_JOB_NOT_IN_SPACE -2050 The current task is not in the graph space E_JOB_NEED_RECOVER -2051 The current task needs to be resumed E_JOB_ALREADY_FINISH -2052 The job status has already been failed or finished E_JOB_SUBMITTED -2053 Job default status E_JOB_NOT_STOPPABLE -2054 The given job do not support stop E_JOB_HAS_NO_TARGET_STORAGE -2055 The leader distribution has not been reported, so can't send task to storage E_INVALID_JOB -2065 Invalid task E_BACKUP_BUILDING_INDEX -2066 Backup terminated (index being created) E_BACKUP_SPACE_NOT_FOUND -2067 Graph space does not exist at the time of backup E_RESTORE_FAILURE -2068 Backup recovery failed E_SESSION_NOT_FOUND -2069 Session does not exist E_LIST_CLUSTER_FAILURE -2070 Failed to get cluster information E_LIST_CLUSTER_GET_ABS_PATH_FAILURE -2071 Failed to get absolute path when getting cluster information E_LIST_CLUSTER_NO_AGENT_FAILURE -2072 Unable to get an agent when getting cluster information E_QUERY_NOT_FOUND -2073 Query not found E_AGENT_HB_FAILUE -2074 Failed to receive heartbeat from agent E_HOST_CAN_NOT_BE_ADDED -2082 The host can not be added for it's not a storage host E_ACCESS_ES_FAILURE -2090 Failed to access elasticsearch E_GRAPH_MEMORY_EXCEEDED -2600 Graph memory exceeded E_CONSENSUS_ERROR -3001 Consensus cannot be reached during an election E_KEY_HAS_EXISTS -3002 Key already exists E_DATA_TYPE_MISMATCH -3003 Data type mismatch E_INVALID_FIELD_VALUE -3004 Invalid field value E_INVALID_OPERATION -3005 Invalid operation E_NOT_NULLABLE -3006 Current value is not allowed to be empty E_FIELD_UNSET -3007 Field value must be set if the field value is NOT NULL or has no default value E_OUT_OF_RANGE -3008 The value is out of the range of the current type E_DATA_CONFLICT_ERROR -3010 Data conflict E_WRITE_STALLED -3011 Writes are delayed E_IMPROPER_DATA_TYPE -3021 Incorrect data type E_INVALID_SPACEVIDLEN -3022 Invalid VID length E_INVALID_FILTER -3031 Invalid filter E_INVALID_UPDATER -3032 Invalid field update E_INVALID_STORE -3033 Invalid KV storage E_INVALID_PEER -3034 Peer invalid E_RETRY_EXHAUSTED -3035 Out of retries E_TRANSFER_LEADER_FAILED -3036 Leader change failed E_INVALID_STAT_TYPE -3037 Invalid stat type E_INVALID_VID -3038 VID is invalid E_LOAD_META_FAILED -3040 Failed to load meta information E_FAILED_TO_CHECKPOINT -3041 Failed to generate checkpoint E_CHECKPOINT_BLOCKED -3042 Generating checkpoint is blocked E_FILTER_OUT -3043 Data is filtered E_INVALID_DATA -3044 Invalid data E_MUTATE_EDGE_CONFLICT -3045 Concurrent write conflicts on the same edge E_MUTATE_TAG_CONFLICT -3046 Concurrent write conflict on the same vertex E_OUTDATED_LOCK -3047 Lock is invalid E_INVALID_TASK_PARA -3051 Invalid task parameter E_USER_CANCEL -3052 The user canceled the task E_TASK_EXECUTION_FAILED -3053 Task execution failed E_PLAN_IS_KILLED -3060 Execution plan was cleared E_NO_TERM -3070 The heartbeat process was not completed when the request was received E_OUTDATED_TERM -3071 Out-of-date heartbeat received from the old leader (the new leader has been elected) E_WRITE_WRITE_CONFLICT -3073 Concurrent write conflicts with later requests E_RAFT_UNKNOWN_PART -3500 Unknown partition E_RAFT_LOG_GAP -3501 Raft logs lag behind E_RAFT_LOG_STALE -3502 Raft logs are out of date E_RAFT_TERM_OUT_OF_DATE -3503 Heartbeat messages are out of date E_RAFT_UNKNOWN_APPEND_LOG -3504 Unknown additional logs E_RAFT_WAITING_SNAPSHOT -3511 Waiting for the snapshot to complete E_RAFT_SENDING_SNAPSHOT -3512 There was an error sending the snapshot E_RAFT_INVALID_PEER -3513 Invalid receiver E_RAFT_NOT_READY -3514 Raft did not start E_RAFT_STOPPED -3515 Raft has stopped E_RAFT_BAD_ROLE -3516 Wrong role E_RAFT_WAL_FAIL -3521 Write to a WAL failed E_RAFT_HOST_STOPPED -3522 The host has stopped E_RAFT_TOO_MANY_REQUESTS -3523 Too many requests E_RAFT_PERSIST_SNAPSHOT_FAILED -3524 Persistent snapshot failed E_RAFT_RPC_EXCEPTION -3525 RPC exception E_RAFT_NO_WAL_FOUND -3526 No WAL logs found E_RAFT_HOST_PAUSED -3527 Host suspended E_RAFT_WRITE_BLOCKED -3528 Writes are blocked E_RAFT_BUFFER_OVERFLOW -3529 Cache overflow E_RAFT_ATOMIC_OP_FAILED -3530 Atomic operation failed E_LEADER_LEASE_FAILED -3531 Leader lease expired E_RAFT_CAUGHT_UP -3532 Data has been synchronized on Raft E_STORAGE_MEMORY_EXCEEDED -3600 Storage memory exceeded E_LOG_GAP -4001 Drainer logs lag behind E_LOG_STALE -4002 Drainer logs are out of date E_INVALID_DRAINER_STORE -4003 The drainer data storage is invalid E_SPACE_MISMATCH -4004 Graph space mismatch E_PART_MISMATCH -4005 Partition mismatch E_DATA_CONFLICT -4006 Data conflict E_REQ_CONFLICT -4007 Request conflict E_DATA_ILLEGAL -4008 Illegal data E_CACHE_CONFIG_ERROR -5001 Cache configuration error E_NOT_ENOUGH_SPACE -5002 Insufficient space E_CACHE_MISS -5003 No cache hit E_CACHE_WRITE_FAILURE -5005 Write cache failed E_NODE_NUMBER_EXCEED_LIMIT -7001 Number of machines exceeded the limit E_PARSING_LICENSE_FAILURE -7002 Failed to resolve certificate E_UNKNOWN -8000 Unknown error"},{"location":"20.appendix/history/","title":"History timeline for NebulaGraph","text":"
          1. 2018.9: dutor wrote and submitted the first line of NebulaGraph database code.

          2. 2019.5: NebulaGraph v0.1.0-alpha was released as open-source.

            NebulaGraph v1.0.0-beta, v1.0.0-rc1, v1.0.0-rc2, v1.0.0-rc3, and v1.0.0-rc4 were released one after another within a year thereafter.

          3. 2019.7: NebulaGraph's debut at HBaseCon1. @dangleptr

          4. 2020.3: NebulaGraph v2.0 was starting developed in the final stage of v1.0 development.

          5. 2020.6: The first major version of NebulaGraph v1.0.0 GA was released.

          6. 2021.3: The second major version of NebulaGraph v2.0 GA was released.

          7. 2021.8: NebulaGraph v2.5.0 was released.

          8. 2021.10: NebulaGraph v2.6.0 was released.

          9. 2022.2: NebulaGraph v3.0.0 was released.

          10. 2022.4: NebulaGraph v3.1.0 was released.

          11. 2022.7: NebulaGraph v3.2.0 was released.

          12. 2022.10: NebulaGraph v3.3.0 was released.

          13. 2023.2: NebulaGraph v3.4.0 was released.

          14. 2023.5: NebulaGraph v3.5.0 was released.

          15. 2023.8: NebulaGraph v3.6.0 was released.

          1. NebulaGraph v1.x supports both RocksDB and HBase as its storage engines. NebulaGraph v2.x removes HBase supports.\u00a0\u21a9

          "},{"location":"20.appendix/port-guide/","title":"Port guide for company products","text":"

          The following are the default ports used by NebulaGraph core and peripheral tools.

          No. Product / Service Type Default Description 1 NebulaGraph TCP 9669 Graph service RPC daemon listening port. Commonly used for client connections to the Graph service. 2 NebulaGraph TCP 19669 Graph service HTTP port. 3 NebulaGraph TCP 19670 Graph service HTTP/2 port. (Deprecated after version 3.x) 4 NebulaGraph TCP 9559, 9560 9559 is the RPC daemon listening port for Meta service. Commonly used by Graph and Storage services for querying and updating metadata in the graph database. The neighboring +1 (9560) port is used for Raft communication between Meta services. 5 NebulaGraph TCP 19559 Meta service HTTP port. 6 NebulaGraph TCP 19560 Meta service HTTP/2 port. (Deprecated after version 3.x) 7 NebulaGraph TCP 9779, 9778, 9780 9779 is the RPC daemon listening port for Storage service. Commonly used by Graph services for data storage-related operations, such as reading, writing, or deleting data. The neighboring ports -1 (9778) and +1 (9780) are also used. 9778: The port used by the Admin service, which receives Meta commands for Storage. 9780: The port used for Raft communication between Storage services. 8 NebulaGraph TCP 19779 Storage service HTTP port. 9 NebulaGraph TCP 19780 Storage service HTTP/2 port. (Deprecated after version 3.x) 10 NebulaGraph TCP 8888 Backup and restore Agent service port. The Agent is a daemon running on each machine in the cluster, responsible for starting and stopping NebulaGraph services and uploading and downloading backup files. 11 NebulaGraph TCP 9789, 9788, 9790 9789 is the Raft Listener port for Full-text index, which reads data from Storage services and writes it to the Elasticsearch cluster.Also the port for Storage Listener in inter-cluster data synchronization, used for synchronizing Storage data from the primary cluster. The neighboring ports -1 (9788) and +1 (9790) are also used.9788: An internal port.9790: The port used for Raft communication. 12 NebulaGraph TCP 9200 NebulaGraph uses this port for HTTP communication with Elasticsearch to perform full-text search queries and manage full-text indexes. 13 NebulaGraph TCP 9569, 9568, 9570 9569 is the Meta Listener port in inter-cluster data synchronization, used for synchronizing Meta data from the primary cluster. The neighboring ports -1 (9568) and +1 (9570) are also used.9568: An internal port.9570: The port used for Raft communication. 14 NebulaGraph TCP 9889, 9888, 9890 Drainer service port in inter-cluster data synchronization, used for synchronizing Storage and Meta data to the primary cluster. The neighboring ports -1 (9888) and +1 (9890) are also used.9888: An internal port.9890: The port used for Raft communication. 15 NebulaGraph Studio TCP 7001 Studio web service port. 16 NebulaGraph Dashboard TCP 8090 Nebula HTTP Gateway dependency service port. Provides an HTTP interface for cluster services to interact with the NebulaGraph database using nGQL statements.0 17 NebulaGraph Dashboard TCP 9200 Nebula Stats Exporter dependency service port. Collects cluster performance metrics, including service IP addresses, versions, and monitoring metrics (such as query count, query latency, heartbeat latency, etc.). 18 NebulaGraph Dashboard TCP 9100 Node Exporter dependency service port. Collects resource information for machines in the cluster, including CPU, memory, load, disk, and traffic. 19 NebulaGraph Dashboard TCP 9090 Prometheus service port. Time-series database for storing monitoring data. 20 NebulaGraph Dashboard TCP 7003 Dashboard Community Edition web service port."},{"location":"20.appendix/release-notes/dashboard-comm-release-note/","title":"NebulaGraph Dashboard Community Edition release notes","text":""},{"location":"20.appendix/release-notes/dashboard-comm-release-note/#community_edition_340","title":"Community Edition 3.4.0","text":"
          • Feature
            • Support the built-in dashboard.service script to manage the Dashboard services with one-click and view the Dashboard version.
            • Support viewing the configuration of Meta services.
          • Enhancement
            • Adjust the directory structure and simplify the deployment steps.
            • Display the names of the monitoring metrics on the overview page of machine.
            • Optimize the calculation of monitoring metrics such as num_queries, and adjust the display to time series aggregation.
          "},{"location":"20.appendix/release-notes/nebula-comm-release-note/","title":"NebulaGraph master release notes","text":""},{"location":"20.appendix/release-notes/nebula-comm-release-note/#features","title":"Features","text":"
          • Enhance the full-text index. #5567 #5575 #5577 #5580 #5584 #5587

            The changes involved are listed below:

            • The original full-text indexing function has been changed from calling Elasticsearch's Term-level queries to Full text queries.
            • In addition to supporting wildcards, regulars, fuzzy matches, etc. (but the syntax has been changed), support for word splitting (relying on Elasticsearch's own word splitter) has been added, and the query results include scoring results. For more syntax, see official Elasticsearch documentation.
          "},{"location":"20.appendix/release-notes/nebula-comm-release-note/#enhancements","title":"Enhancements","text":"
          • Support variables when querying vertex id or property index in a match clause. #5486 #5553
          • Performance
            • Support parallel startup of RocksDB instances to speed up the startup of the Storage service. #5521
            • Optimize the prefix search performance of the RocksDB iterator after the DeleteRange operation. #5525
            • Optimize the appendLog sending logic to avoid impacting write performance when a follower is down. #5571
            • Optimize the performance of the MATCH statement when querying for non-existent properties. #5634
          "},{"location":"20.appendix/release-notes/nebula-comm-release-note/#bug_fixes","title":"Bug fixes","text":"
          • DQL
            • Fix the crash of the Graph service when executing a single big query. #5619
            • Fix the crash of the Graph service when executing the Find All Path statement. #5621 #5640
            • Fix the bug that some expired data is not recycled at the bottom level. #5447 #5622
            • Fix the bug that adding a path variable in the MATCH statement causes the all() function push-down optimization to fail. #5631
            • Fix the bug in the MATCH statement that returns incorrect results when querying the self-loop by the shortest path. #5636
            • Fix the bug that deleting edges by pipe causes the Graph service to crash. #5645
            • Fix the bug in the MATCH statement that returns missing properties of edges when matching multiple hops. #5646
          • Others
            • Fix the bug of meta data inconsistency. #5517
            • Fix the bug that RocksDB ingest causes the leader lease to be invalid. #5534
            • Fix the error in the statistics logic of storage. #5547
            • Fix the bug that causes the web service to crash if a flag is set for an invalid request parameter. #5566
            • Fix the bug that too many logs are printed when listing sessions. #5618
          "},{"location":"20.appendix/release-notes/studio-release-note/","title":"NebulaGraph Studio release notes","text":""},{"location":"20.appendix/release-notes/studio-release-note/#v390_20241","title":"v3.9.0 (2024.1)","text":"
          • Features
            • Supported importing data using AI.
            • Supported the generation of nGQL statements using the AI Assistant.
          • Enhancements
            • Optimized the console feature, including automatic completion of a tag or edge type, quick selection of the historical statements, quick viewing of the schema, etc.
            • Optimized the presentation style of the execution plan.
          "},{"location":"3.ngql-guide/4.job-statements/","title":"Job manager and the JOB statements","text":"

          The long-term tasks run by the Storage Service are called jobs, such as COMPACT, FLUSH, and STATS. These jobs can be time-consuming if the data amount in the graph space is large. The job manager helps you run, show, stop, and recover jobs.

          Note

          All job management commands can be executed only after selecting a graph space.

          "},{"location":"3.ngql-guide/4.job-statements/#submit_job_balance_leader","title":"SUBMIT JOB BALANCE LEADER","text":"

          Starts a job to balance the distribution of all the storage leaders in all graph spaces. It returns the job ID.

          For example:

          nebula> SUBMIT JOB BALANCE LEADER;\n+------------+\n| New Job Id |\n+------------+\n| 33         |\n+------------+\n
          "},{"location":"3.ngql-guide/4.job-statements/#submit_job_compact","title":"SUBMIT JOB COMPACT","text":"

          The SUBMIT JOB COMPACT statement triggers the long-term RocksDB compact operation in the current graph space.

          For more information about compact configuration, see Storage Service configuration.

          For example:

          nebula> SUBMIT JOB COMPACT;\n+------------+\n| New Job Id |\n+------------+\n| 40         |\n+------------+\n
          "},{"location":"3.ngql-guide/4.job-statements/#submit_job_flush","title":"SUBMIT JOB FLUSH","text":"

          The SUBMIT JOB FLUSH statement writes the RocksDB memfile in the memory to the hard disk in the current graph space.

          For example:

          nebula> SUBMIT JOB FLUSH;\n+------------+\n| New Job Id |\n+------------+\n| 96         |\n+------------+\n
          "},{"location":"3.ngql-guide/4.job-statements/#submit_job_stats","title":"SUBMIT JOB STATS","text":"

          The SUBMIT JOB STATS statement starts a job that makes the statistics of the current graph space. Once this job succeeds, you can use the SHOW STATS statement to list the statistics. For more information, see SHOW STATS.

          Note

          If the data stored in the graph space changes, in order to get the latest statistics, you have to run SUBMIT JOB STATS again.

          For example:

          nebula> SUBMIT JOB STATS;\n+------------+\n| New Job Id |\n+------------+\n| 9          |\n+------------+\n
          "},{"location":"3.ngql-guide/4.job-statements/#submit_job_downloadingest","title":"SUBMIT JOB DOWNLOAD/INGEST","text":"

          The SUBMIT JOB DOWNLOAD HDFS and SUBMIT JOB INGEST commands are used to import the SST file into NebulaGraph. For detail, see Import data from SST files.

          The SUBMIT JOB DOWNLOAD HDFS command will download the SST file on the specified HDFS.

          The SUBMIT JOB INGEST command will import the downloaded SST file into NebulaGraph.

          For example:

          nebula> SUBMIT JOB DOWNLOAD HDFS \"hdfs://192.168.10.100:9000/sst\";\n+------------+\n| New Job Id |\n+------------+\n| 10         |\n+------------+\nnebula> SUBMIT JOB INGEST;\n+------------+\n| New Job Id |\n+------------+\n| 11         |\n+------------+\n
          "},{"location":"3.ngql-guide/4.job-statements/#show_job","title":"SHOW JOB","text":"

          The Meta Service parses a SUBMIT JOB request into multiple tasks and assigns them to the nebula-storaged processes. The SHOW JOB <job_id> statement shows the information about a specific job and all its tasks in the current graph space.

          job_id is returned when you run the SUBMIT JOB statement.

          For example:

          nebula> SHOW JOB 8;\n+----------------+-----------------+------------+----------------------------+----------------------------+-------------+\n| Job Id(TaskId) | Command(Dest)   | Status     | Start Time                 | Stop Time                  | Error Code  |\n+----------------+-----------------+------------+----------------------------+----------------------------+-------------+\n| 8              | \"STATS\"         | \"FINISHED\" | 2022-10-18T08:14:45.000000 | 2022-10-18T08:14:45.000000 | \"SUCCEEDED\" |\n| 0              | \"192.168.8.129\" | \"FINISHED\" | 2022-10-18T08:14:45.000000 | 2022-10-18T08:15:13.000000 | \"SUCCEEDED\" |\n| \"Total:1\"      | \"Succeeded:1\"   | \"Failed:0\" | \"In Progress:0\"            | \"\"                         | \"\"          |\n+----------------+-----------------+------------+----------------------------+----------------------------+-------------+\n

          The descriptions are as follows.

          Parameter Description Job Id(TaskId) The first row shows the job ID and the other rows show the task IDs and the last row shows the total number of job-related tasks. Command(Dest) The first row shows the command executed and the other rows show on which storaged processes the task is running. The last row shows the number of successful tasks related to the job. Status Shows the status of the job or task. The last row shows the number of failed tasks related to the job. For more information, see Job status. Start Time Shows a timestamp indicating the time when the job or task enters the RUNNING phase. The last row shows the number of ongoing tasks related to the job. Stop Time Shows a timestamp indicating the time when the job or task gets FINISHED, FAILED, or STOPPED. Error Code The error code of job."},{"location":"3.ngql-guide/4.job-statements/#job_status","title":"Job status","text":"

          The descriptions are as follows.

          Status Description QUEUE The job or task is waiting in a queue. The Start Time is empty in this phase. RUNNING The job or task is running. The Start Time shows the beginning time of this phase. FINISHED The job or task is successfully finished. The Stop Time shows the time when the job or task enters this phase. FAILED The job or task has failed. The Stop Time shows the time when the job or task enters this phase. STOPPED The job or task is stopped without running. The Stop Time shows the time when the job or task enters this phase. REMOVED The job or task is removed.

          The description of switching the status is described as follows.

          Queue -- running -- finished -- removed\n     \\          \\                /\n      \\          \\ -- failed -- /\n       \\          \\            /\n        \\ ---------- stopped -/\n
          "},{"location":"3.ngql-guide/4.job-statements/#show_jobs","title":"SHOW JOBS","text":"

          The SHOW JOBS statement lists all the unexpired jobs in the current graph space.

          The default job expiration interval is one week. You can change it by modifying the job_expired_secs parameter of the Meta Service. For how to modify job_expired_secs, see Meta Service configuration.

          For example:

          nebula> SHOW JOBS;\n+--------+---------------------+------------+----------------------------+----------------------------+\n| Job Id | Command             | Status     | Start Time                 | Stop Time                  |\n+--------+---------------------+------------+----------------------------+----------------------------+\n| 34     | \"STATS\"             | \"FINISHED\" | 2021-11-01T03:32:27.000000 | 2021-11-01T03:32:27.000000 |\n| 33     | \"FLUSH\"             | \"FINISHED\" | 2021-11-01T03:32:15.000000 | 2021-11-01T03:32:15.000000 |\n| 32     | \"COMPACT\"           | \"FINISHED\" | 2021-11-01T03:32:06.000000 | 2021-11-01T03:32:06.000000 |\n| 31     | \"REBUILD_TAG_INDEX\" | \"FINISHED\" | 2021-10-29T05:39:16.000000 | 2021-10-29T05:39:17.000000 |\n| 10     | \"COMPACT\"           | \"FINISHED\" | 2021-10-26T02:27:05.000000 | 2021-10-26T02:27:05.000000 |\n+--------+---------------------+------------+----------------------------+----------------------------+\n
          "},{"location":"3.ngql-guide/4.job-statements/#stop_job","title":"STOP JOB","text":"

          The STOP JOB <job_id> statement stops jobs that are not finished in the current graph space.

          For example:

          nebula> STOP JOB 22;\n+---------------+\n| Result        |\n+---------------+\n| \"Job stopped\" |\n+---------------+\n
          "},{"location":"3.ngql-guide/4.job-statements/#recover_job","title":"RECOVER JOB","text":"

          The RECOVER JOB [<job_id>] statement re-executes the jobs that status is FAILED or STOPPED in the current graph space and returns the number of recovered jobs. If <job_id> is not specified, re-execution is performed from the earliest job and the number of jobs that have been recovered is returned.

          For example:

          nebula> RECOVER JOB;\n+-------------------+\n| Recovered job num |\n+-------------------+\n| 5 job recovered   |\n+-------------------+\n
          "},{"location":"3.ngql-guide/4.job-statements/#faq","title":"FAQ","text":""},{"location":"3.ngql-guide/4.job-statements/#how_to_troubleshoot_job_problems","title":"How to troubleshoot job problems?","text":"

          The SUBMIT JOB operations use the HTTP port. Please check if the HTTP ports on the machines where the Storage Service is running are working well. You can use the following command to debug.

          curl \"http://{storaged-ip}:19779/admin?space={space_name}&op=compact\"\n
          "},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/","title":"NebulaGraph Query Language (nGQL)","text":"

          This topic gives an introduction to the query language of NebulaGraph, nGQL.

          "},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/#what_is_ngql","title":"What is nGQL","text":"

          nGQL is a declarative graph query language for NebulaGraph. It allows expressive and efficient graph patterns. nGQL is designed for both developers and operations professionals. nGQL is an SQL-like query language, so it's easy to learn.

          nGQL is a project in progress. New features and optimizations are done steadily. There can be differences between syntax and implementation. Submit an issue to inform the NebulaGraph team if you find a new issue of this type. NebulaGraph 3.0 or later releases will support openCypher 9.

          "},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/#what_can_ngql_do","title":"What can nGQL do","text":"
          • Supports graph traversals
          • Supports pattern match
          • Supports aggregation
          • Supports graph mutation
          • Supports access control
          • Supports composite queries
          • Supports index
          • Supports most openCypher 9 graph query syntax (but mutations and controls syntax are not supported)
          "},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/#example_data_basketballplayer","title":"Example data Basketballplayer","text":"

          Users can download the example data Basketballplayer in NebulaGraph. After downloading the example data, you can import it to NebulaGraph by using the -f option in NebulaGraph Console.

          Note

          Ensure that you have executed the ADD HOSTS command to add the Storage service to your NebulaGraph cluster before importing the example data. For more information, see Manage Storage hosts.

          "},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/#placeholder_identifiers_and_values","title":"Placeholder identifiers and values","text":"

          Refer to the following standards in nGQL:

          • (Draft) ISO/IEC JTC1 N14279 SC 32 - Database_Languages - GQL
          • (Draft) ISO/IEC JTC1 SC32 N3228 - SQL_Property_Graph_Queries - SQLPGQ
          • OpenCypher 9

          In template code, any token that is not a keyword, a literal value, or punctuation is a placeholder identifier or a placeholder value.

          For details of the symbols in nGQL syntax, see the following table:

          Token Meaning < > name of a syntactic element : formula that defines an element [ ] optional elements { } explicitly specified elements | complete alternative elements ... may be repeated any number of times

          For example, create vertices in nGQL syntax:

          INSERT VERTEX [IF NOT EXISTS] [tag_props, [tag_props] ...]\nVALUES <vid>: ([prop_value_list])\ntag_props:\n  tag_name ([prop_name_list])\nprop_name_list:\n   [prop_name [, prop_name] ...]\nprop_value_list:\n   [prop_value [, prop_value] ...]  \n

          Example statement:

          nebula> CREATE TAG IF NOT EXISTS player(name string, age int);\n
          "},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/#about_opencypher_compatibility","title":"About openCypher compatibility","text":""},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/#native_ngql_and_opencypher","title":"Native nGQL and openCypher","text":"

          Native nGQL is the part of a graph query language designed and implemented by NebulaGraph. OpenCypher is a graph query language maintained by openCypher Implementers Group.

          The latest release is openCypher 9. The compatible parts of openCypher in nGQL are called openCypher compatible sentences (short as openCypher).

          Note

          nGQL = native nGQL + openCypher compatible sentences

          "},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/#is_ngql_compatible_with_opencypher_9_completely","title":"Is nGQL compatible with openCypher 9 completely?","text":"

          NO.

          Compatibility with openCypher

          nGQL is designed to be compatible with part of DQL (match, optional match, with, etc.).

          • It is not planned to be compatible with any DDL, DML, or DCL.
          • It is not planned to be compatible with the Bolt Protocol.
          • It is not planned to be compatible with APOC and GDS.

          Users can search in this manual with the keyword compatibility to find major compatibility issues.

          Multiple known incompatible items are listed in NebulaGraph Issues. Submit an issue with the incompatible tag if you find a new issue of this type.

          "},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/#what_are_the_major_differences_between_ngql_and_opencypher_9","title":"What are the major differences between nGQL and openCypher 9?","text":"

          The following are some major differences (by design incompatible) between nGQL and openCypher.

          Category openCypher 9 nGQL Schema Optional Schema Strong Schema Equality operator = == Math exponentiation ^ ^ is not supported. Use pow(x, y) instead. Edge rank No such concept. edge rank (reference by @) Statement - All DMLs (CREATE, MERGE, etc) of openCypher 9. Label and tag A label is used for searching a vertex, namely an index of vertex. A tag defines the type of a vertex and its corresponding properties. It cannot be used as an index. Pre-compiling and parameterized queries Support Parameterized queries are supported, but precompiling is not.

          Compatibility

          OpenCypher 9 and Cypher have some differences in grammar and licence. For example,

          1. Cypher requires that All Cypher statements are explicitly run within a transaction. While openCypher has no such requirement. And nGQL does not support transactions.

          2. Cypher has a variety of constraints, including Unique node property constraints, Node property existence constraints, Relationship property existence constraints, and Node key constraints. While OpenCypher has no such constraints. As a strong schema system, most of the constraints mentioned above can be solved through schema definitions (including NOT NULL) in nGQL. The only function that cannot be supported is the UNIQUE constraint.

          3. Cypher has APoC, while openCypher 9 does not have APoC. Cypher has Blot protocol support requirements, while openCypher 9 does not.

          "},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/#where_can_i_find_more_ngql_examples","title":"Where can I find more nGQL examples?","text":"

          Users can find more than 2500 nGQL examples in the features directory on the NebulaGraph GitHub page.

          The features directory consists of .feature files. Each file records scenarios that you can use as nGQL examples. Here is an example:

          Feature: Basic match\n\n  Background:\n    Given a graph with space named \"basketballplayer\"\n\n  Scenario: Single node\n    When executing query:\n      \"\"\"\n      MATCH (v:player {name: \"Yao Ming\"}) RETURN v;\n      \"\"\"\n    Then the result should be, in any order, with relax comparison:\n      | v                                                |\n      | (\"player133\" :player{age: 38, name: \"Yao Ming\"}) |\n\n  Scenario: One step\n    When executing query:\n      \"\"\"\n      MATCH (v1:player{name: \"LeBron James\"}) -[r]-> (v2)\n      RETURN type(r) AS Type, v2.player.name AS Name\n      \"\"\"\n    Then the result should be, in any order:\n\n      | Type     | Name        |\n      | \"follow\" | \"Ray Allen\" |\n      | \"serve\"  | \"Lakers\"    |\n      | \"serve\"  | \"Heat\"      |\n      | \"serve\"  | \"Cavaliers\" |\n\nFeature:  Comparison of where clause\n\n  Background:\n    Given a graph with space named \"basketballplayer\"\n\n    Scenario: push edge props filter down\n      When profiling query:\n        \"\"\"\n        GO FROM \"player100\" OVER follow \n        WHERE properties(edge).degree IN [v IN [95,99] WHERE v > 0] \n        YIELD dst(edge), properties(edge).degree\n        \"\"\"\n      Then the result should be, in any order:\n        | follow._dst | follow.degree |\n        | \"player101\" | 95            |\n        | \"player125\" | 95            |\n      And the execution plan should be:\n        | id | name         | dependencies | operator info                                               |\n        | 0  | Project      | 1            |                                                             |\n        | 1  | GetNeighbors | 2            | {\"filter\": \"(properties(edge).degree IN [v IN [95,99] WHERE (v>0)])\"} |\n        | 2  | Start        |              |                                                             |\n

          The keywords in the preceding example are described as follows.

          Keyword Description Feature Describes the topic of the current .feature file. Background Describes the background information of the current .feature file. Given Describes the prerequisites of running the test statements in the current .feature file. Scenario Describes the scenarios. If there is the @skip before one Scenario, this scenario may not work and do not use it as a working example in a production environment. When Describes the nGQL statement to be executed. It can be a executing query or profiling query. Then Describes the expected return results of running the statement in the When clause. If the return results in your environment do not match the results described in the .feature file, submit an issue to inform the NebulaGraph team. And Describes the side effects of running the statement in the When clause. @skip This test case will be skipped. Commonly, the to-be-tested code is not ready.

          Welcome to add more tck case and return automatically to the using statements in CI/CD.

          "},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/#does_it_support_tinkerpop_gremlin","title":"Does it support TinkerPop Gremlin?","text":"

          No. And no plan to support that.

          "},{"location":"3.ngql-guide/1.nGQL-overview/1.overview/#does_nebulagraph_support_w3c_rdf_sparql_or_graphql","title":"Does NebulaGraph support W3C RDF (SPARQL) or GraphQL?","text":"

          No. And no plan to support that.

          The data model of NebulaGraph is the property graph. And as a strong schema system, NebulaGraph does not support RDF.

          NebulaGraph Query Language does not support SPARQL nor GraphQL.

          "},{"location":"3.ngql-guide/1.nGQL-overview/3.graph-patterns/","title":"Patterns","text":"

          Patterns and graph pattern matching are the very heart of a graph query language. This topic will describe the patterns in NebulaGraph, some of which have not yet been implemented.

          "},{"location":"3.ngql-guide/1.nGQL-overview/3.graph-patterns/#patterns_for_vertices","title":"Patterns for vertices","text":"

          A vertex is described using a pair of parentheses and is typically given a name. For example:

          (a)\n

          This simple pattern describes a single vertex and names that vertex using the variable a.

          "},{"location":"3.ngql-guide/1.nGQL-overview/3.graph-patterns/#patterns_for_related_vertices","title":"Patterns for related vertices","text":"

          A more powerful construct is a pattern that describes multiple vertices and edges between them. Patterns describe an edge by employing an arrow between two vertices. For example:

          (a)-[]->(b)\n

          This pattern describes a very simple data structure: two vertices and a single edge from one to the other. In this example, the two vertices are named as a and b respectively and the edge is directed: it goes from a to b.

          This manner of describing vertices and edges can be extended to cover an arbitrary number of vertices and the edges between them, for example:

          (a)-[]->(b)<-[]-(c)\n

          Such a series of connected vertices and edges is called a path.

          Note that the naming of the vertices in these patterns is only necessary when one needs to refer to the same vertex again, either later in the pattern or elsewhere in the query. If not, the name may be omitted as follows:

          (a)-[]->()<-[]-(c)\n
          "},{"location":"3.ngql-guide/1.nGQL-overview/3.graph-patterns/#patterns_for_tags","title":"Patterns for tags","text":"

          Note

          The concept of tag in nGQL has a few differences from that of label in openCypher. For example, users must create a tag before using it. And a tag also defines the type of properties.

          In addition to simply describing the vertices in the graphs, patterns can also describe the tags of the vertices. For example:

          (a:User)-[]->(b)\n

          Patterns can also describe a vertex that has multiple tags. For example:

          (a:User:Admin)-[]->(b)\n
          "},{"location":"3.ngql-guide/1.nGQL-overview/3.graph-patterns/#patterns_for_properties","title":"Patterns for properties","text":"

          Vertices and edges are the fundamental elements in a graph. In nGQL, properties are added to them for richer models.

          In the patterns, the properties can be expressed as follows: some key-value pairs are enclosed in curly brackets and separated by commas, and the tag or edge type to which a property belongs must be specified.

          For example, a vertex with two properties will be like:

          (a:player{name: \"Tim Duncan\", age: 42})\n

          One of the edges that connect to this vertex can be like:

          (a)-[e:follow{degree: 95}]->(b)\n
          "},{"location":"3.ngql-guide/1.nGQL-overview/3.graph-patterns/#patterns_for_edges","title":"Patterns for edges","text":"

          The simplest way to describe an edge is by using the arrow between two vertices, as in the previous examples.

          Users can describe an edge and its direction using the following statement. If users do not care about its direction, the arrowhead can be omitted. For example:

          (a)-[]-(b)\n

          Like vertices, edges can also be named. A pair of square brackets will be used to separate the arrow and the variable will be placed between them. For example:

          (a)-[r]->(b)\n

          Like the tags on vertices, edges can also have types. To describe an edge with a specific type, use the pattern as follows:

          (a)-[r:REL_TYPE]->(b)\n

          An edge can only have one edge type. But if we'd like to describe some data such that the edge could have a set of types, then they can all be listed in the pattern, separating them with the pipe symbol | like this:

          (a)-[r:TYPE1|TYPE2]->(b)\n

          Like vertices, the name of an edge can be omitted. For example:

          (a)-[:REL_TYPE]->(b)\n
          "},{"location":"3.ngql-guide/1.nGQL-overview/3.graph-patterns/#variable-length_pattern","title":"Variable-length pattern","text":"

          Rather than describing a long path using a sequence of many vertex and edge descriptions in a pattern, many edges (and the intermediate vertices) can be described by specifying a length in the edge description of a pattern. For example:

          (a)-[*2]->(b)\n

          The following pattern describes a graph of three vertices and two edges, all in one path (a path of length 2). It is equivalent to:

          (a)-[]->()-[]->(b)\n

          The range of lengths can also be specified. Such edge patterns are called variable-length edges. For example:

          (a)-[*3..5]->(b)\n

          The preceding example defines a path with a minimum length of 3 and a maximum length of 5.

          It describes a graph of either 4 vertices and 3 edges, 5 vertices and 4 edges, or 6 vertices and 5 edges, all connected in a single path.

          You may specify either the upper limit or lower limit of the length range, or neither of them, for example:

          (a)-[*..5]->(b)   // The minimum length is 1 and the maximum length is 5.\n(a)-[*3..]->(b)   // The minimum length is 3 and the maximum length is infinity.\n(a)-[*]->(b)      // The minimum length is 1 and the maximum length is infinity.\n
          "},{"location":"3.ngql-guide/1.nGQL-overview/3.graph-patterns/#assigning_to_path_variables","title":"Assigning to path variables","text":"

          As described above, a series of connected vertices and edges is called a path. nGQL allows paths to be named using variables. For example:

          p = (a)-[*3..5]->(b)\n

          Users can do this in the MATCH statement.

          "},{"location":"3.ngql-guide/1.nGQL-overview/comments/","title":"Comments","text":"

          This topic will describe the comments in nGQL.

          Legacy version compatibility

          • In NebulaGraph 1.x, there are four comment styles: #, --, //, /* */.
          • Since NebulaGraph 2.x, -- cannot be used as comments.
          "},{"location":"3.ngql-guide/1.nGQL-overview/comments/#examples","title":"Examples","text":"
          nebula> RETURN 1+1;     # This comment continues to the end of this line.\nnebula> RETURN 1+1;     // This comment continues to the end of this line.\nnebula> RETURN 1 /* This is an in-line comment. */ + 1 == 2;\nnebula> RETURN 11 +            \\\n/* Multi-line comment.       \\\nUse a backslash as a line break.   \\\n*/ 12;\n

          Note

          • In nGQL statements, the backslash \\ in a line indicates a line break.
          • If a statement starts with # or //, the statement is not executed and the error StatementEmpty is returned.
          "},{"location":"3.ngql-guide/1.nGQL-overview/comments/#opencypher_compatibility","title":"OpenCypher compatibility","text":"
          • In nGQL, you must add a \\ at the end of every line, even in multi-line comments /* */.
          • In openCypher, there is no need to use a \\ as a line break.
          /* openCypher style:\nThe following comment\nspans more than\none line */\nMATCH (n:label)\nRETURN n;\n
          /* nGQL style:  \\\nThe following comment       \\\nspans more than     \\\none line */       \\\nMATCH (n:tag) \\\nRETURN n;\n
          "},{"location":"3.ngql-guide/1.nGQL-overview/identifier-case-sensitivity/","title":"Identifier case sensitivity","text":""},{"location":"3.ngql-guide/1.nGQL-overview/identifier-case-sensitivity/#identifiers_are_case-sensitive","title":"Identifiers are Case-Sensitive","text":"

          The following statements will not work because they refer to two different spaces, i.e. my_space and MY_SPACE.

          nebula> CREATE SPACE IF NOT EXISTS my_space (vid_type=FIXED_STRING(30));\nnebula> use MY_SPACE;\n[ERROR (-1005)]: SpaceNotFound:\n
          "},{"location":"3.ngql-guide/1.nGQL-overview/identifier-case-sensitivity/#keywords_and_reserved_words_are_case-insensitive","title":"Keywords and Reserved Words are Case-Insensitive","text":"

          The following statements are equivalent since show and spaces are keywords.

          nebula> show spaces;  \nnebula> SHOW SPACES;\nnebula> SHOW spaces;\nnebula> show SPACES;\n
          "},{"location":"3.ngql-guide/1.nGQL-overview/identifier-case-sensitivity/#functions_are_case-insensitive","title":"Functions are Case-Insensitive","text":"

          Functions are case-insensitive. For example, count(), COUNT(), and couNT() are equivalent.

          nebula> WITH [NULL, 1, 1, 2, 2] As a \\\n        UNWIND a AS b \\\n        RETURN count(b), COUNT(*), couNT(DISTINCT b);\n+----------+----------+-------------------+\n| count(b) | COUNT(*) | couNT(distinct b) |\n+----------+----------+-------------------+\n| 4        | 5        | 2                 |\n+----------+----------+-------------------+\n
          "},{"location":"3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words/","title":"Keywords","text":"

          Keywords in nGQL are words with particular meanings, such as CREATE and TAG in the CREATE TAG statement. Keywords that require special processing to be used as identifiers are referred to as reserved keywords, while the part of keywords that can be used directly as identifiers are called non-reserved keywords.

          It is not recommended to use keywords to identify schemas. If you must use keywords as identifiers, pay attention to the following restrictions:

          • To use reserved keywords or special characters as identifiers, you must enclose them with backticks (`), such as `AND`. Otherwise, a syntax error is thrown.
          • To use non-reserved keywords as identifiers:

            • If the identifier contains any uppercase letter, you must enclose them with backticks (`), such as `Comment`. Otherwise, the execution succeeds but the system automatically converts the identifier to all lowercase.
            • If the identifier contains all lowercase letters, you do not need to enclose them with backticks (`).

          Note

          Keywords are case-insensitive.

          nebula> CREATE TAG TAG(name string);\n[ERROR (-1004)]: SyntaxError: syntax error near `TAG'\n\nnebula> CREATE TAG `TAG` (name string);\nExecution succeeded\n\nnebula> CREATE TAG SPACE(name string);\nExecution succeeded\n\nnebula> CREATE TAG \u4e2d\u6587(\u7b80\u4f53 string);\nExecution succeeded\n\nnebula> CREATE TAG `\uffe5%special characters&*+-*/` (`q~\uff01\uff08\uff09=  wer` string);\nExecution succeeded\n
          "},{"location":"3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words/#reserved_keywords","title":"Reserved keywords","text":"
          ACROSS\nADD\nALTER\nAND\nAS\nASC\nASCENDING\nBALANCE\nBOOL\nBY\nCASE\nCHANGE\nCOMPACT\nCREATE\nDATE\nDATETIME\nDELETE\nDESC\nDESCENDING\nDESCRIBE\nDISTINCT\nDOUBLE\nDOWNLOAD\nDROP\nDURATION\nEDGE\nEDGES\nEXISTS\nEXPLAIN\nFALSE\nFETCH\nFIND\nFIXED_STRING\nFLOAT\nFLUSH\nFROM\nGEOGRAPHY\nGET\nGO\nGRANT\nIF\nIGNORE_EXISTED_INDEX\nIN\nINDEX\nINDEXES\nINGEST\nINSERT\nINT\nINT16\nINT32\nINT64\nINT8\nINTERSECT\nIS\nJOIN\nLEFT\nLIST\nLOOKUP\nMAP\nMATCH\nMINUS\nNO\nNOT\nNULL\nOF\nON\nOR\nORDER\nOVER\nOVERWRITE\nPATH\nPROP\nREBUILD\nRECOVER\nREMOVE\nRESTART\nRETURN\nREVERSELY\nREVOKE\nSET\nSHOW\nSTEP\nSTEPS\nSTOP\nSTRING\nSUBMIT\nTAG\nTAGS\nTIME\nTIMESTAMP\nTO\nTRUE\nUNION\nUNWIND\nUPDATE\nUPSERT\nUPTO\nUSE\nVERTEX\nVERTICES\nWHEN\nWHERE\nWITH\nXOR\nYIELD\n
          "},{"location":"3.ngql-guide/1.nGQL-overview/keywords-and-reserved-words/#non-reserved_keywords","title":"Non-reserved keywords","text":"
          ACCOUNT\nADMIN\nAGENT\nALL\nALLSHORTESTPATHS\nANALYZER\nANY\nATOMIC_EDGE\nAUTO\nBASIC\nBIDIRECT\nBOTH\nCHARSET\nCLEAR\nCLIENTS\nCOLLATE\nCOLLATION\nCOMMENT\nCONFIGS\nCONTAINS\nDATA\nDBA\nDEFAULT\nDIVIDE\nDRAINER\nDRAINERS\nELASTICSEARCH\nELSE\nEND\nENDS\nES_QUERY\nFORCE\nFORMAT\nFULLTEXT\nGOD\nGRANTS\nGRAPH\nGROUP\nGROUPS\nGUEST\nHDFS\nHOST\nHOSTS\nHTTP\nHTTPS\nINTO\nIP\nJOB\nJOBS\nKILL\nLEADER\nLIMIT\nLINESTRING\nLISTENER\nLOCAL\nMERGE\nMETA\nNEW\nNOLOOP\nNONE\nOFFSET\nOPTIONAL\nOUT\nPART\nPARTITION_NUM\nPARTS\nPASSWORD\nPLAN\nPOINT\nPOLYGON\nPROFILE\nQUERIES\nQUERY\nREAD\nREDUCE\nRENAME\nREPLICA_FACTOR\nRESET\nROLE\nROLES\nS2_MAX_CELLS\nS2_MAX_LEVEL\nSAMPLE\nSEARCH\nSERVICE\nSESSION\nSESSIONS\nSHORTEST\nSHORTESTPATH\nSIGN\nSINGLE\nSKIP\nSNAPSHOT\nSNAPSHOTS\nSPACE\nSPACES\nSTARTS\nSTATS\nSTATUS\nSTORAGE\nSUBGRAPH\nSYNC\nTEXT\nTEXT_SEARCH\nTHEN\nTOP\nTTL_COL\nTTL_DURATION\nUSER\nUSERS\nUUID\nVALUE\nVALUES\nVARIABLES\nVID_TYPE\nWHITELIST\nWRITE\nZONE\nZONES\n
          "},{"location":"3.ngql-guide/1.nGQL-overview/ngql-style-guide/","title":"nGQL style guide","text":"

          nGQL does not have strict formatting requirements, but creating nGQL statements according to an appropriate and uniform style can improve readability and avoid ambiguity. Using the same nGQL style in the same organization or project helps reduce maintenance costs and avoid problems caused by format confusion or misunderstanding. This topic will provide a style guide for writing nGQL statements.

          Compatibility

          The styles of nGQL and Cypher Style Guide are different.

          "},{"location":"3.ngql-guide/1.nGQL-overview/ngql-style-guide/#newline","title":"Newline","text":"
          1. Start a new line to write a clause.

            Not recommended:

            GO FROM \"player100\" OVER follow REVERSELY YIELD src(edge) AS id;\n

            Recommended:

            GO FROM \"player100\" \\\nOVER follow REVERSELY \\\nYIELD src(edge) AS id;\n
          2. Start a new line to write different statements in a composite statement.

            Not recommended:

            GO FROM \"player100\" OVER follow REVERSELY YIELD src(edge) AS id | GO FROM $-.id \\\nOVER serve WHERE properties($^).age > 20 YIELD properties($^).name AS FriendOf, properties($$).name AS Team;\n

            Recommended:

            GO FROM \"player100\" \\\nOVER follow REVERSELY \\\nYIELD src(edge) AS id | \\\nGO FROM $-.id OVER serve \\\nWHERE properties($^).age > 20 \\\nYIELD properties($^).name AS FriendOf, properties($$).name AS Team;\n
          3. If the clause exceeds 80 characters, start a new line at the appropriate place.

            Not recommended:

            MATCH (v:player{name:\"Tim Duncan\"})-[e]->(v2) \\\nWHERE (v2.player.name STARTS WITH \"Y\" AND v2.player.age > 35 AND v2.player.age < v.player.age) OR (v2.player.name STARTS WITH \"T\" AND v2.player.age < 45 AND v2.player.age > v.player.age) \\\nRETURN v2;\n

            Recommended:

            MATCH (v:player{name:\"Tim Duncan\"})-[e]->(v2) \\\nWHERE (v2.player.name STARTS WITH \"Y\" AND v2.player.age > 35 AND v2.player.age < v.player.age) \\\nOR (v2.player.name STARTS WITH \"T\" AND v2.player.age < 45 AND v2.player.age > v.player.age) \\\nRETURN v2;\n

          Note

          If needed, you can also start a new line for better understanding, even if the clause does not exceed 80 characters.

          "},{"location":"3.ngql-guide/1.nGQL-overview/ngql-style-guide/#identifier_naming","title":"Identifier naming","text":"

          In nGQL statements, characters other than keywords, punctuation marks, and blanks are all identifiers. Recommended methods to name the identifiers are as follows.

          1. Use singular nouns to name tags, and use the base form of verbs or verb phrases to form Edge types.

            Not recommended:

            MATCH p=(v:players)-[e:are_following]-(v2) \\\nRETURN nodes(p);\n

            Recommended:

            MATCH p=(v:player)-[e:follow]-(v2) \\\nRETURN nodes(p);\n
          2. Use the snake case to name identifiers, and connect words with underscores (_) with all the letters lowercase.

            Not recommended:

            MATCH (v:basketballTeam) \\\nRETURN v;\n

            Recommended:

            MATCH (v:basketball_team) \\\nRETURN v;\n
          3. Use uppercase keywords and lowercase variables.

            Not recommended:

            match (V:player) return V limit 5;\n

            Recommended:

            MATCH (v:player) RETURN v LIMIT 5;\n
          "},{"location":"3.ngql-guide/1.nGQL-overview/ngql-style-guide/#pattern","title":"Pattern","text":"
          1. Start a new line on the right side of the arrow indicating an edge when writing patterns.

            Not recommended:

            MATCH (v:player{name: \"Tim Duncan\", age: 42}) \\\n-[e:follow]->()-[e:serve]->()<--(v2) \\\nRETURN v, e, v2;\n

            Recommended:

            MATCH (v:player{name: \"Tim Duncan\", age: 42})-[e:follow]-> \\\n()-[e:serve]->()<--(v2) \\\nRETURN v, e, v2;\n
          2. Anonymize the vertices and edges that do not need to be queried.

            Not recommended:

            MATCH (v:player)-[e:follow]->(v2) \\\nRETURN v;\n

            Recommended:

            MATCH (v:player)-[:follow]->() \\\nRETURN v;\n
          3. Place named vertices in front of anonymous vertices.

            Not recommended:

            MATCH ()-[:follow]->(v) \\\nRETURN v;\n

            Recommended:

            MATCH (v)<-[:follow]-() \\\nRETURN v;\n
          "},{"location":"3.ngql-guide/1.nGQL-overview/ngql-style-guide/#string","title":"String","text":"

          The strings should be surrounded by double quotes.

          Not recommended:

          RETURN 'Hello Nebula!';\n

          Recommended:

          RETURN \"Hello Nebula!\\\"123\\\"\";\n

          Note

          When single or double quotes need to be nested in a string, use a backslash () to escape. For example:

          RETURN \"\\\"NebulaGraph is amazing,\\\" the user says.\";\n
          "},{"location":"3.ngql-guide/1.nGQL-overview/ngql-style-guide/#statement_termination","title":"Statement termination","text":"
          1. End the nGQL statements with an English semicolon (;).

            Not recommended:

            FETCH PROP ON player \"player100\" YIELD properties(vertex)\n

            Recommended:

            FETCH PROP ON player \"player100\" YIELD properties(vertex);\n
          2. Use a pipe (|) to separate a composite statement, and end the statement with an English semicolon at the end of the last line. Using an English semicolon before a pipe will cause the statement to fail.

            Not supported:

            GO FROM \"player100\" \\\nOVER follow \\\nYIELD dst(edge) AS id; | \\\nGO FROM $-.id \\\nOVER serve \\\nYIELD properties($$).name AS Team, properties($^).name AS Player;\n

            Supported:

            GO FROM \"player100\" \\\nOVER follow \\\nYIELD dst(edge) AS id | \\\nGO FROM $-.id \\\nOVER serve \\\nYIELD properties($$).name AS Team, properties($^).name AS Player;\n
          3. In a composite statement that contains user-defined variables, use an English semicolon to end the statements that define the variables. If you do not follow the rules to add a semicolon or use a pipe to end the composite statement, the execution will fail.

            Not supported:

            $var = GO FROM \"player100\" \\\nOVER follow \\\nYIELD follow._dst AS id \\\nGO FROM $var.id \\\nOVER serve \\\nYIELD $$.team.name AS Team, $^.player.name AS Player;\n

            Not supported:

            $var = GO FROM \"player100\" \\\nOVER follow \\\nYIELD follow._dst AS id | \\\nGO FROM $var.id \\\nOVER serve \\\nYIELD $$.team.name AS Team, $^.player.name AS Player;\n

            Supported:

            $var = GO FROM \"player100\" \\\nOVER follow \\\nYIELD follow._dst AS id; \\\nGO FROM $var.id \\\nOVER serve \\\nYIELD $$.team.name AS Team, $^.player.name AS Player;\n
          "},{"location":"3.ngql-guide/10.tag-statements/1.create-tag/","title":"CREATE TAG","text":"

          CREATE TAG creates a tag with the given name in a graph space.

          "},{"location":"3.ngql-guide/10.tag-statements/1.create-tag/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

          Tags in nGQL are similar to labels in openCypher. But they are also quite different. For example, the ways to create them are different.

          • In openCypher, labels are created together with vertices in CREATE statements.
          • In nGQL, tags are created separately using CREATE TAG statements. Tags in nGQL are more like tables in MySQL.
          "},{"location":"3.ngql-guide/10.tag-statements/1.create-tag/#prerequisites","title":"Prerequisites","text":"

          Running the CREATE TAG statement requires some privileges for the graph space. Otherwise, NebulaGraph throws an error.

          "},{"location":"3.ngql-guide/10.tag-statements/1.create-tag/#syntax","title":"Syntax","text":"

          To create a tag in a specific graph space, you must specify the current working space with the USE statement.

          CREATE TAG [IF NOT EXISTS] <tag_name>\n    (\n      <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']\n      [{, <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']} ...] \n    )\n    [TTL_DURATION = <ttl_duration>]\n    [TTL_COL = <prop_name>]\n    [COMMENT = '<comment>'];\n
          Parameter Description IF NOT EXISTS Detects if the tag that you want to create exists. If it does not exist, a new one will be created. The tag existence detection here only compares the tag names (excluding properties). <tag_name> 1. Each tag name in the graph space must be unique. 2. Tag names cannot be modified after they are set. 3. By default, the name only supports 1-4 byte UTF-8 encoded characters, including English letters (case sensitive), numbers, Chinese characters, etc. However, it cannot include special characters other than the underscore (_), and cannot start with a number. 4. To use special characters, reserved keywords, or start with a number, quote the entire name with backticks (`) and do not include periods (.) within the pair of backticks (`). For more information, see Keywords and reserved words. Note:1. If you name a tag in Chinese and encounter a SyntaxError, you need to quote the Chinese characters with backticks (`). 2. To include a backtick (`) in a tag name, use a backslash to escape the backtick, such as \\`; to include a backslash, the backslash itself also needs to be escaped, such as \\ . <prop_name> The name of the property. It must be unique for each tag. The rules for permitted property names are the same as those for tag names. <data_type> Shows the data type of each property. For a full description of the property data types, see Data types and Boolean. NULL | NOT NULL Specifies if the property supports NULL | NOT NULL. The default value is NULL. DEFAULT Specifies a default value for a property. The default value can be a literal value or an expression supported by NebulaGraph. If no value is specified, the default value is used when inserting a new vertex. COMMENT The remarks of a certain property or the tag itself. The maximum length is 256 bytes. By default, there will be no comments on a tag. TTL_DURATION Specifies the life cycle for the property. The property that exceeds the specified TTL expires. The expiration threshold is the TTL_COL value plus the TTL_DURATION. The default value of TTL_DURATION is 0. It means the data never expires. TTL_COL Specifies the property to set a timeout on. The data type of the property must be int or timestamp. A tag can only specify one field as TTL_COL. For more information on TTL, see TTL options."},{"location":"3.ngql-guide/10.tag-statements/1.create-tag/#examples","title":"Examples","text":"
          nebula> CREATE TAG IF NOT EXISTS player(name string, age int);\n\n# The following example creates a tag with no properties.\nnebula> CREATE TAG IF NOT EXISTS no_property();\u00a0\n\n# The following example creates a tag with a default value.\nnebula> CREATE TAG IF NOT EXISTS player_with_default(name string, age int DEFAULT 20);\n\n# In the following example, the TTL of the create_time field is set to be 100 seconds.\nnebula> CREATE TAG IF NOT EXISTS woman(name string, age int, \\\n        married bool, salary double, create_time timestamp) \\\n        TTL_DURATION = 100, TTL_COL = \"create_time\";\n
          "},{"location":"3.ngql-guide/10.tag-statements/1.create-tag/#implementation_of_the_operation","title":"Implementation of the operation","text":"

          Trying to use a newly created tag may fail because the creation of the tag is implemented asynchronously. To make sure the follow-up operations work as expected, Wait for two heartbeat cycles, i.e., 20 seconds.

          To change the heartbeat interval, modify the heartbeat_interval_secs parameter in the configuration files for all services.

          "},{"location":"3.ngql-guide/10.tag-statements/2.drop-tag/","title":"DROP TAG","text":"

          DROP TAG drops a tag with the given name in the current working graph space.

          A vertex can have one or more tags.

          • If a vertex has only one tag, the vertex CANNOT be accessed after you drop it. The vertex will be dropped in the next compaction. But its edges are available, this operation will result in dangling edges.
          • If a vertex has multiple tags, the vertex is still accessible after you drop one of them. But all the properties defined by this dropped tag CANNOT be accessed.

          This operation only deletes the Schema data. All the files or directories in the disk will not be deleted directly until the next compaction.

          Compatibility

          In NebulaGraph master, inserting vertex without tag is not supported by default. If you want to use the vertex without tags, add --graph_use_vertex_key=true to the configuration files (nebula-graphd.conf) of all Graph services in the cluster, and add --use_vertex_key=true to the configuration files (nebula-storaged.conf) of all Storage services in the cluster.

          "},{"location":"3.ngql-guide/10.tag-statements/2.drop-tag/#prerequisites","title":"Prerequisites","text":"
          • Running the DROP TAG statement requires some privileges for the graph space. Otherwise, NebulaGraph throws an error.
          • Before you drop a tag, make sure that the tag does not have any indexes. Otherwise, the conflict error ([ERROR (-1005)]: Conflict!) will be returned when you run the DROP TAG statement. To drop an index, see DROP INDEX.
          "},{"location":"3.ngql-guide/10.tag-statements/2.drop-tag/#syntax","title":"Syntax","text":"
          DROP TAG [IF EXISTS] <tag_name>;\n
          • IF NOT EXISTS: Detects if the tag that you want to drop exists. Only when it exists will it be dropped.
          • tag_name: Specifies the tag name that you want to drop. You can drop only one tag in one statement.
          "},{"location":"3.ngql-guide/10.tag-statements/2.drop-tag/#example","title":"Example","text":"
          nebula> CREATE TAG IF NOT EXISTS test(p1 string, p2 int);\nnebula> DROP TAG test;\n
          "},{"location":"3.ngql-guide/10.tag-statements/3.alter-tag/","title":"ALTER TAG","text":"

          ALTER TAG alters the structure of a tag with the given name in a graph space. You can add or drop properties, and change the data type of an existing property. You can also set a TTL (Time-To-Live) on a property, or change its TTL duration.

          "},{"location":"3.ngql-guide/10.tag-statements/3.alter-tag/#notes","title":"Notes","text":"
          • Running the ALTER TAG statement requires some privileges for the graph space. Otherwise, NebulaGraph throws an error.
          • Before you alter properties for a tag, make sure that the properties are not indexed. If the properties contain any indexes, the conflict error [ERROR (-1005)]: Conflict! will occur when you ALTER TAG. For more information on dropping an index, see DROP INDEX.
          • The property name must be unique in a tag. If you add a property with the same name as an existing property or a dropped property, the operation fails.
          "},{"location":"3.ngql-guide/10.tag-statements/3.alter-tag/#syntax","title":"Syntax","text":"
          ALTER TAG <tag_name>\n    <alter_definition> [[, alter_definition] ...]\n    [ttl_definition [, ttl_definition] ... ]\n    [COMMENT '<comment>'];\n\nalter_definition:\n| ADD    (prop_name data_type [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>'])\n| DROP   (prop_name)\n| CHANGE (prop_name data_type [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>'])\n\nttl_definition:\n    TTL_DURATION = ttl_duration, TTL_COL = prop_name\n
          • tag_name: Specifies the tag name that you want to alter. You can alter only one tag in one statement. Before you alter a tag, make sure that the tag exists in the current working graph space. If the tag does not exist, an error will occur when you alter it.
          • Multiple ADD, DROP, and CHANGE clauses are permitted in a single ALTER TAG statement, separated by commas.
          • When a property value is set to NOT NULL using ADD or CHANGE, a default value must be specified for the property, that is, the value of DEFAULT must be specified.
          • When using CHANGE to modify the data type of a property:

            • Only the length of a FIXED_STRING or an INT can be increased. The length of a STRING or an INT cannot be decreased.
            • Only the data type conversions from FIXED_STRING to STRING and from FLOAT to DOUBLE are allowed.
          "},{"location":"3.ngql-guide/10.tag-statements/3.alter-tag/#examples","title":"Examples","text":"
          nebula> CREATE TAG IF NOT EXISTS t1 (p1 string, p2 int);\nnebula> ALTER TAG t1 ADD (p3 int32, fixed_string(10));\nnebula> ALTER TAG t1 TTL_DURATION = 2, TTL_COL = \"p2\";\nnebula> ALTER TAG t1 COMMENT = 'test1';\nnebula> ALTER TAG t1 ADD (p5 double NOT NULL DEFAULT 0.4 COMMENT 'p5') COMMENT='test2';\n// Change the data type of p3 in the TAG t1 from INT32 to INT64, and that of p4 from FIXED_STRING(10) to STRING.\nnebula> ALTER TAG t1 CHANGE (p3 int64, p4 string);\n[ERROR(-1005)]: Unsupported!\n
          "},{"location":"3.ngql-guide/10.tag-statements/3.alter-tag/#implementation_of_the_operation","title":"Implementation of the operation","text":"

          Trying to use a newly altered tag may fail because the alteration of the tag is implemented asynchronously. To make sure the follow-up operations work as expected, Wait for two heartbeat cycles, i.e., 20 seconds.

          To change the heartbeat interval, modify the heartbeat_interval_secs parameter in the configuration files for all services.

          "},{"location":"3.ngql-guide/10.tag-statements/4.show-tags/","title":"SHOW TAGS","text":"

          The SHOW TAGS statement shows the name of all tags in the current graph space.

          You do not need any privileges for the graph space to run the SHOW TAGS statement. But the returned results are different based on role privileges.

          "},{"location":"3.ngql-guide/10.tag-statements/4.show-tags/#syntax","title":"Syntax","text":"
          SHOW TAGS;\n
          "},{"location":"3.ngql-guide/10.tag-statements/4.show-tags/#examples","title":"Examples","text":"
          nebula> SHOW TAGS;\n+----------+\n| Name     |\n+----------+\n| \"player\" |\n| \"team\"   |\n+----------+\n
          "},{"location":"3.ngql-guide/10.tag-statements/5.describe-tag/","title":"DESCRIBE TAG","text":"

          DESCRIBE TAG returns the information about a tag with the given name in a graph space, such as field names, data type, and so on.

          "},{"location":"3.ngql-guide/10.tag-statements/5.describe-tag/#prerequisite","title":"Prerequisite","text":"

          Running the DESCRIBE TAG statement requires some privileges for the graph space. Otherwise, NebulaGraph throws an error.

          "},{"location":"3.ngql-guide/10.tag-statements/5.describe-tag/#syntax","title":"Syntax","text":"
          DESC[RIBE] TAG <tag_name>;\n

          You can use DESC instead of DESCRIBE for short.

          "},{"location":"3.ngql-guide/10.tag-statements/5.describe-tag/#example","title":"Example","text":"
          nebula> DESCRIBE TAG player;\n+--------+----------+-------+---------+---------+\n| Field  | Type     | Null  | Default | Comment |\n+--------+----------+-------+---------+---------+\n| \"name\" | \"string\" | \"YES\" |         |         |\n| \"age\"  | \"int64\"  | \"YES\" |         |         |\n+--------+----------+-------+---------+---------+\n
          "},{"location":"3.ngql-guide/10.tag-statements/6.delete-tag/","title":"DELETE TAG","text":"

          DELETE TAG deletes a tag with the given name on a specified vertex.

          "},{"location":"3.ngql-guide/10.tag-statements/6.delete-tag/#prerequisites","title":"Prerequisites","text":"

          Running the DELETE TAG statement requires some privileges for the graph space. Otherwise, NebulaGraph throws an error.

          "},{"location":"3.ngql-guide/10.tag-statements/6.delete-tag/#syntax","title":"Syntax","text":"
          DELETE TAG <tag_name_list> FROM <VID_list>;\n
          • tag_name_list: The names of the tags you want to delete. Multiple tags are separated with commas (,). * means all tags.
          • VID: The VIDs of the vertices from which you want to delete the tags. Multiple VIDs are separated with commas (,).
          "},{"location":"3.ngql-guide/10.tag-statements/6.delete-tag/#example","title":"Example","text":"
          nebula> CREATE TAG IF NOT EXISTS test1(p1 string, p2 int);\nnebula> CREATE TAG IF NOT EXISTS test2(p3 string, p4 int);\nnebula> INSERT VERTEX test1(p1, p2),test2(p3, p4) VALUES \"test\":(\"123\", 1, \"456\", 2);\nnebula> FETCH PROP ON * \"test\" YIELD vertex AS v;\n+------------------------------------------------------------+\n| v                                                          |\n+------------------------------------------------------------+\n| (\"test\" :test1{p1: \"123\", p2: 1} :test2{p3: \"456\", p4: 2}) |\n+------------------------------------------------------------+\nnebula> DELETE TAG test1 FROM \"test\";\nnebula> FETCH PROP ON * \"test\" YIELD vertex AS v;\n+-----------------------------------+\n| v                                 |\n+-----------------------------------+\n| (\"test\" :test2{p3: \"456\", p4: 2}) |\n+-----------------------------------+\nnebula> DELETE TAG * FROM \"test\";\nnebula> FETCH PROP ON * \"test\" YIELD vertex AS v;\n+---+\n| v |\n+---+\n+---+\n

          Compatibility

          • In openCypher, you can use the statement REMOVE v:LABEL to delete the tag LABEL of the vertex v.
          • DELETE TAG and DROP TAG have the same semantics but different syntax. In nGQL, use DELETE TAG.
          "},{"location":"3.ngql-guide/10.tag-statements/improve-query-by-tag-index/","title":"Add and delete tags","text":"

          OpenCypher has the features of SET label and REMOVE label to speed up the process of querying or labeling.

          NebulaGraph achieves the same operations by creating and inserting tags to an existing vertex, which can quickly query vertices based on the tag name. Users can also run DELETE TAG to delete some vertices that are no longer needed.

          "},{"location":"3.ngql-guide/10.tag-statements/improve-query-by-tag-index/#examples","title":"Examples","text":"

          For example, in the basketballplayer data set, some basketball players are also team shareholders. Users can create an index for the shareholder tag shareholder for quick search. If the player is no longer a shareholder, users can delete the shareholder tag of the corresponding player by DELETE TAG.

          //This example creates the shareholder tag and index.\nnebula> CREATE TAG IF NOT EXISTS shareholder();\nnebula> CREATE TAG INDEX IF NOT EXISTS shareholder_tag on shareholder();\n\n//This example adds a tag on the vertex.\nnebula> INSERT VERTEX shareholder() VALUES \"player100\":();\nnebula> INSERT VERTEX shareholder() VALUES \"player101\":();\n\n//This example queries all the shareholders.\nnebula> MATCH (v:shareholder) RETURN v;\n+--------------------------------------------------------------------+\n| v                                                                  |\n+--------------------------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"} :shareholder{})  |\n| (\"player101\" :player{age: 36, name: \"Tony Parker\"} :shareholder{}) |\n+--------------------------------------------------------------------+\n\nnebula> LOOKUP ON shareholder YIELD id(vertex);\n+-------------+\n| id(VERTEX)  |\n+-------------+\n| \"player100\" |\n| \"player101\" |\n+-------------+\n\n//In this example, the \"player100\" is no longer a shareholder.\nnebula> DELETE TAG shareholder FROM \"player100\";\nnebula> LOOKUP ON shareholder YIELD id(vertex);\n+-------------+\n| id(VERTEX)  |\n+-------------+\n| \"player101\" |\n+-------------+\n

          Note

          If the index is created after inserting the test data, use the REBUILD TAG INDEX <index_name_list>; statement to rebuild the index.

          "},{"location":"3.ngql-guide/11.edge-type-statements/1.create-edge/","title":"CREATE EDGE","text":"

          CREATE EDGE creates an edge type with the given name in a graph space.

          "},{"location":"3.ngql-guide/11.edge-type-statements/1.create-edge/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

          Edge types in nGQL are similar to relationship types in openCypher. But they are also quite different. For example, the ways to create them are different.

          • In openCypher, relationship types are created together with vertices in CREATE statements.
          • In nGQL, edge types are created separately using CREATE EDGE statements. Edge types in nGQL are more like tables in MySQL.
          "},{"location":"3.ngql-guide/11.edge-type-statements/1.create-edge/#prerequisites","title":"Prerequisites","text":"

          Running the CREATE EDGE statement requires some privileges for the graph space. Otherwise, NebulaGraph throws an error.

          "},{"location":"3.ngql-guide/11.edge-type-statements/1.create-edge/#syntax","title":"Syntax","text":"

          To create an edge type in a specific graph space, you must specify the current working space with the USE statement.

          CREATE EDGE [IF NOT EXISTS] <edge_type_name>\n    (\n      <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']\n      [{, <prop_name> <data_type> [NULL | NOT NULL] [DEFAULT <default_value>] [COMMENT '<comment>']} ...] \n    )\n    [TTL_DURATION = <ttl_duration>]\n    [TTL_COL = <prop_name>]\n    [COMMENT = '<comment>'];\n
          Parameter Description IF NOT EXISTS Detects if the edge type that you want to create exists. If it does not exist, a new one will be created. The edge type existence detection here only compares the edge type names (excluding properties). <edge_type_name> 1. The edge type name must be unique in a graph space. 2. Once the edge type name is set, it can not be altered. 3. By default, the name only supports 1-4 byte UTF-8 encoded characters, including English letters (case sensitive), numbers, Chinese characters, etc. However, it cannot include special characters other than the underscore (_), and cannot start with a number. 4. To use special characters, reserved keywords, or start with a number, quote the entire name with backticks (`) and do not include periods (.) within the pair of backticks (`). For more information, see Keywords and reserved words. Note:1. If you name an edge type in Chinese and encounter a SyntaxError, you need to quote the Chinese characters with backticks (`). 2. To include a backtick (`) in an edge type name, use a backslash to escape the backtick, such as \\`; to include a backslash, the backslash itself also needs to be escaped, such as \\ . <prop_name> The name of the property. It must be unique for each edge type. The rules for permitted property names are the same as those for edge type names. <data_type> Shows the data type of each property. For a full description of the property data types, see Data types and Boolean. NULL | NOT NULL Specifies if the property supports NULL | NOT NULL. The default value is NULL. DEFAULT must be specified if NOT NULL is set. DEFAULT Specifies a default value for a property. The default value can be a literal value or an expression supported by NebulaGraph. If no value is specified, the default value is used when inserting a new edge. COMMENT The remarks of a certain property or the edge type itself. The maximum length is 256 bytes. By default, there will be no comments on an edge type. TTL_DURATION Specifies the life cycle for the property. The property that exceeds the specified TTL expires. The expiration threshold is the TTL_COL value plus the TTL_DURATION. The default value of TTL_DURATION is 0. It means the data never expires. TTL_COL Specifies the property to set a timeout on. The data type of the property must be int or timestamp. An edge type can only specify one field as TTL_COL. For more information on TTL, see TTL options."},{"location":"3.ngql-guide/11.edge-type-statements/1.create-edge/#examples","title":"Examples","text":"
          nebula> CREATE EDGE IF NOT EXISTS follow(degree int);\n\n# The following example creates an edge type with no properties.\nnebula> CREATE EDGE IF NOT EXISTS no_property();\n\n# The following example creates an edge type with a default value.\nnebula> CREATE EDGE IF NOT EXISTS follow_with_default(degree int DEFAULT 20);\n\n# In the following example, the TTL of the p2 field is set to be 100 seconds.\nnebula> CREATE EDGE IF NOT EXISTS e1(p1 string, p2 int, p3 timestamp) \\\n        TTL_DURATION = 100, TTL_COL = \"p2\";\n
          "},{"location":"3.ngql-guide/11.edge-type-statements/2.drop-edge/","title":"DROP EDGE","text":"

          DROP EDGE drops an edge type with the given name in a graph space.

          An edge can have only one edge type. After you drop it, the edge CANNOT be accessed. The edge will be deleted in the next compaction.

          This operation only deletes the Schema data. All the files or directories in the disk will not be deleted directly until the next compaction.

          "},{"location":"3.ngql-guide/11.edge-type-statements/2.drop-edge/#prerequisites","title":"Prerequisites","text":"
          • Running the DROP EDGE statement requires some privileges for the graph space. Otherwise, NebulaGraph throws an error.
          • Before you drop an edge type, make sure that the edge type does not have any indexes. Otherwise, the conflict error ([ERROR (-1005)]: Conflict!) will be returned. To drop an index, see DROP INDEX.
          "},{"location":"3.ngql-guide/11.edge-type-statements/2.drop-edge/#syntax","title":"Syntax","text":"
          DROP EDGE [IF EXISTS] <edge_type_name>\n
          • IF NOT EXISTS: Detects if the edge type that you want to drop exists. Only when it exists will it be dropped.
          • edge_type_name: Specifies the edge type name that you want to drop. You can drop only one edge type in one statement.
          "},{"location":"3.ngql-guide/11.edge-type-statements/2.drop-edge/#example","title":"Example","text":"
          nebula> CREATE EDGE IF NOT EXISTS e1(p1 string, p2 int);\nnebula> DROP EDGE e1;\n
          "},{"location":"3.ngql-guide/11.edge-type-statements/3.alter-edge/","title":"ALTER EDGE","text":"

          ALTER EDGE alters the structure of an edge type with the given name in a graph space. You can add or drop properties, and change the data type of an existing property. You can also set a TTL (Time-To-Live) on a property, or change its TTL duration.

          "},{"location":"3.ngql-guide/11.edge-type-statements/3.alter-edge/#notes","title":"Notes","text":"
          • Running the ALTER EDGE statement requires some privileges for the graph space. Otherwise, NebulaGraph throws an error.
          • Before you alter properties for an edge type, make sure that the properties are not indexed. If the properties contain any indexes, the conflict error [ERROR (-1005)]: Conflict! will occur when you ALTER EDGE. For more information on dropping an index, see DROP INDEX.
          • The property name must be unique in an edge type. If you add a property with the same name as an existing property or a dropped property, the operation fails.
          • Only the length of a FIXED_STRING or an INT can be increased.
          • Only the data type conversions from FIXED_STRING to STRING and from FLOAT to DOUBLE are allowed.
          "},{"location":"3.ngql-guide/11.edge-type-statements/3.alter-edge/#syntax","title":"Syntax","text":"
          ALTER EDGE <edge_type_name>\n    <alter_definition> [, alter_definition] ...]\n    [ttl_definition [, ttl_definition] ... ]\n    [COMMENT = '<comment>'];\n\nalter_definition:\n| ADD    (prop_name data_type)\n| DROP   (prop_name)\n| CHANGE (prop_name data_type)\n\nttl_definition:\n    TTL_DURATION = ttl_duration, TTL_COL = prop_name\n
          • edge_type_name: Specifies the edge type name that you want to alter. You can alter only one edge type in one statement. Before you alter an edge type, make sure that the edge type exists in the graph space. If the edge type does not exist, an error occurs when you alter it.
          • Multiple ADD, DROP, and CHANGE clauses are permitted in a single ALTER EDGE statement, separated by commas.
          • When a property value is set to NOT NULL using ADD or CHANGE, a default value must be specified for the property, that is, the value of DEFAULT must be specified.
          "},{"location":"3.ngql-guide/11.edge-type-statements/3.alter-edge/#example","title":"Example","text":"
          nebula> CREATE EDGE IF NOT EXISTS e1(p1 string, p2 int);\nnebula> ALTER EDGE e1 ADD (p3 int, p4 string);\nnebula> ALTER EDGE e1 TTL_DURATION = 2, TTL_COL = \"p2\";\nnebula> ALTER EDGE e1 COMMENT = 'edge1';\n
          "},{"location":"3.ngql-guide/11.edge-type-statements/3.alter-edge/#implementation_of_the_operation","title":"Implementation of the operation","text":"

          Trying to use a newly altered edge type may fail because the alteration of the edge type is implemented asynchronously. To make sure the follow-up operations work as expected, Wait for two heartbeat cycles, i.e., 20 seconds.

          To change the heartbeat interval, modify the heartbeat_interval_secs parameter in the configuration files for all services.

          "},{"location":"3.ngql-guide/11.edge-type-statements/4.show-edges/","title":"SHOW EDGES","text":"

          SHOW EDGES shows all edge types in the current graph space.

          You do not need any privileges for the graph space to run the SHOW EDGES statement. But the returned results are different based on role privileges.

          "},{"location":"3.ngql-guide/11.edge-type-statements/4.show-edges/#syntax","title":"Syntax","text":"
          SHOW EDGES;\n
          "},{"location":"3.ngql-guide/11.edge-type-statements/4.show-edges/#example","title":"Example","text":"
          nebula> SHOW EDGES;\n+----------+\n| Name     |\n+----------+\n| \"follow\" |\n| \"serve\"  |\n+----------+\n
          "},{"location":"3.ngql-guide/11.edge-type-statements/5.describe-edge/","title":"DESCRIBE EDGE","text":"

          DESCRIBE EDGE returns the information about an edge type with the given name in a graph space, such as field names, data type, and so on.

          "},{"location":"3.ngql-guide/11.edge-type-statements/5.describe-edge/#prerequisites","title":"Prerequisites","text":"

          Running the DESCRIBE EDGE statement requires some privileges for the graph space. Otherwise, NebulaGraph throws an error.

          "},{"location":"3.ngql-guide/11.edge-type-statements/5.describe-edge/#syntax","title":"Syntax","text":"
          DESC[RIBE] EDGE <edge_type_name>\n

          You can use DESC instead of DESCRIBE for short.

          "},{"location":"3.ngql-guide/11.edge-type-statements/5.describe-edge/#example","title":"Example","text":"
          nebula> DESCRIBE EDGE follow;\n+----------+---------+-------+---------+---------+\n| Field    | Type    | Null  | Default | Comment |\n+----------+---------+-------+---------+---------+\n| \"degree\" | \"int64\" | \"YES\" |         |         |\n+----------+---------+-------+---------+---------+\n
          "},{"location":"3.ngql-guide/12.vertex-statements/1.insert-vertex/","title":"INSERT VERTEX","text":"

          The INSERT VERTEX statement inserts one or more vertices into a graph space in NebulaGraph.

          "},{"location":"3.ngql-guide/12.vertex-statements/1.insert-vertex/#prerequisites","title":"Prerequisites","text":"

          Running the INSERT VERTEX statement requires some privileges for the graph space. Otherwise, NebulaGraph throws an error.

          "},{"location":"3.ngql-guide/12.vertex-statements/1.insert-vertex/#syntax","title":"Syntax","text":"
          INSERT VERTEX [IF NOT EXISTS] [tag_props, [tag_props] ...]\nVALUES VID: ([prop_value_list])\n\ntag_props:\n  tag_name ([prop_name_list])\n\nprop_name_list:\n   [prop_name [, prop_name] ...]\n\nprop_value_list:\n   [prop_value [, prop_value] ...] \n
          • IF NOT EXISTS detects if the VID that you want to insert exists. If it does not exist, a new one will be inserted.

            Note

            • IF NOT EXISTS only compares the names of the VID and the tag (excluding properties).
            • IF NOT EXISTS will read to check whether the data exists, which will have a significant impact on performance.
          • tag_name denotes the tag (vertex type), which must be created before INSERT VERTEX. For more information, see CREATE TAG.

            Caution

            NebulaGraph master supports inserting vertices without tags.

            Compatibility

            In NebulaGraph master, inserting vertex without tag is not supported by default. If you want to use the vertex without tags, add --graph_use_vertex_key=true to the configuration files (nebula-graphd.conf) of all Graph services in the cluster, add --use_vertex_key=true to the configuration files (nebula-storaged.conf) of all Storage services in the cluster. An example of a command to insert a vertex without tag is INSERT VERTEX VALUES \"1\":();.

          • prop_name_list contains the names of the properties on the tag.
          • VID is the vertex ID. In NebulaGraph 2.0, string and integer VID types are supported. The VID type is set when a graph space is created. For more information, see CREATE SPACE.
          • prop_value_list must provide the property values according to the prop_name_list. When the NOT NULL constraint is set for a given property, an error is returned if no property is given. When the default value for a property is NULL, you can omit to specify the property value. For details, see CREATE TAG.

          Caution

          INSERT VERTEX and CREATE have different semantics.

          • The semantics of INSERT VERTEX is closer to that of INSERT in NoSQL (key-value), or UPSERT (UPDATE or INSERT) in SQL.
          • When two INSERT statements (neither uses IF NOT EXISTS) with the same VID and TAG are operated at the same time, the latter INSERT will overwrite the former.
          • When two INSERT statements with the same VID but different TAGS are operated at the same time, the operation of different tags will not overwrite each other.

          Examples are as follows.

          "},{"location":"3.ngql-guide/12.vertex-statements/1.insert-vertex/#examples","title":"Examples","text":"
          # Insert a vertex without tag.\nnebula> INSERT VERTEX VALUES \"1\":();\n\n# The following examples create tag t1 with no property and inserts vertex \"10\" with no property.\nnebula> CREATE TAG IF NOT EXISTS t1();                   \nnebula> INSERT VERTEX t1() VALUES \"10\":(); \n
          nebula> CREATE TAG IF NOT EXISTS t2 (name string, age int);                \nnebula> INSERT VERTEX t2 (name, age) VALUES \"11\":(\"n1\", 12);\n\n#  In the following example, the insertion fails because \"a13\" is not int.\nnebula> INSERT VERTEX t2 (name, age) VALUES \"12\":(\"n1\", \"a13\"); \n\n# The following example inserts two vertices at one time.\nnebula> INSERT VERTEX t2 (name, age) VALUES \"13\":(\"n3\", 12), \"14\":(\"n4\", 8); \n
          nebula> CREATE TAG IF NOT EXISTS t3(p1 int);\nnebula> CREATE TAG IF NOT EXISTS t4(p2 string);\n\n# The following example inserts vertex \"21\" with two tags.\nnebula> INSERT VERTEX t3 (p1), t4(p2) VALUES \"21\": (321, \"hello\");\n

          A vertex can be inserted/written with new values multiple times. Only the last written values can be read.

          # The following examples insert vertex \"11\" with new values for multiple times.\nnebula> INSERT VERTEX t2 (name, age) VALUES \"11\":(\"n2\", 13);\nnebula> INSERT VERTEX t2 (name, age) VALUES \"11\":(\"n3\", 14);\nnebula> INSERT VERTEX t2 (name, age) VALUES \"11\":(\"n4\", 15);\nnebula> FETCH PROP ON t2 \"11\" YIELD properties(vertex);\n+-----------------------+\n| properties(VERTEX)    |\n+-----------------------+\n| {age: 15, name: \"n4\"} |\n+-----------------------+\n
          nebula> CREATE TAG IF NOT EXISTS t5(p1 fixed_string(5) NOT NULL, p2 int, p3 int DEFAULT NULL);\nnebula> INSERT VERTEX t5(p1, p2, p3) VALUES \"001\":(\"Abe\", 2, 3);\n\n# In the following example, the insertion fails because the value of p1 cannot be NULL.\nnebula> INSERT VERTEX t5(p1, p2, p3) VALUES \"002\":(NULL, 4, 5);\n[ERROR (-1009)]: SemanticError: No schema found for `t5'\n\n# In the following example, the value of p3 is the default NULL.\nnebula> INSERT VERTEX t5(p1, p2) VALUES \"003\":(\"cd\", 5);\nnebula> FETCH PROP ON t5 \"003\" YIELD properties(vertex);\n+---------------------------------+\n| properties(VERTEX)              |\n+---------------------------------+\n| {p1: \"cd\", p2: 5, p3: __NULL__} |\n+---------------------------------+\n\n# In the following example, the allowed maximum length of p1 is 5.\nnebula> INSERT VERTEX t5(p1, p2) VALUES \"004\":(\"shalalalala\", 4);\nnebula> FETCH PROP on t5 \"004\" YIELD properties(vertex);\n+------------------------------------+\n| properties(VERTEX)                 |\n+------------------------------------+\n| {p1: \"shala\", p2: 4, p3: __NULL__} |\n+------------------------------------+\n

          If you insert a vertex that already exists with IF NOT EXISTS, there will be no modification.

          # The following example inserts vertex \"1\".\nnebula> INSERT VERTEX t2 (name, age) VALUES \"1\":(\"n2\", 13);\n# Modify vertex \"1\" with IF NOT EXISTS. But there will be no modification as vertex \"1\" already exists.\nnebula> INSERT VERTEX IF NOT EXISTS t2 (name, age) VALUES \"1\":(\"n3\", 14);\nnebula> FETCH PROP ON t2 \"1\" YIELD properties(vertex);\n+-----------------------+\n| properties(VERTEX)    |\n+-----------------------+\n| {age: 13, name: \"n2\"} |\n+-----------------------+\n
          "},{"location":"3.ngql-guide/12.vertex-statements/2.update-vertex/","title":"UPDATE VERTEX","text":"

          The UPDATE VERTEX statement updates properties on tags of a vertex.

          In NebulaGraph, UPDATE VERTEX supports compare-and-set (CAS).

          Note

          An UPDATE VERTEX statement can only update properties on ONE TAG of a vertex.

          "},{"location":"3.ngql-guide/12.vertex-statements/2.update-vertex/#syntax","title":"Syntax","text":"
          UPDATE VERTEX ON <tag_name> <vid>\nSET <update_prop>\n[WHEN <condition>]\n[YIELD <output>]\n
          Parameter Required Description Example ON <tag_name> Yes Specifies the tag of the vertex. The properties to be updated must be on this tag. ON player <vid> Yes Specifies the ID of the vertex to be updated. \"player100\" SET <update_prop> Yes Specifies the properties to be updated and how they will be updated. SET age = age +1 WHEN <condition> No Specifies the filter conditions. If <condition> evaluates to false, the SET clause will not take effect. WHEN name == \"Tim\" YIELD <output> No Specifies the output format of the statement. YIELD name AS Name"},{"location":"3.ngql-guide/12.vertex-statements/2.update-vertex/#example","title":"Example","text":"
          // This query checks the properties of vertex \"player101\".\nnebula> FETCH PROP ON player \"player101\" YIELD properties(vertex);\n+--------------------------------+\n| properties(VERTEX)             |\n+--------------------------------+\n| {age: 36, name: \"Tony Parker\"} |\n+--------------------------------+\n\n// This query updates the age property and returns name and the new age.\nnebula> UPDATE VERTEX ON player \"player101\" \\\n        SET age = age + 2 \\\n        WHEN name == \"Tony Parker\" \\\n        YIELD name AS Name, age AS Age;\n+---------------+-----+\n| Name          | Age |\n+---------------+-----+\n| \"Tony Parker\" | 38  |\n+---------------+-----+\n
          "},{"location":"3.ngql-guide/12.vertex-statements/3.upsert-vertex/","title":"UPSERT VERTEX","text":"

          The UPSERT statement is a combination of UPDATE and INSERT. You can use UPSERT VERTEX to update the properties of a vertex if it exists or insert a new vertex if it does not exist.

          Note

          An UPSERT VERTEX statement can only update the properties on ONE TAG of a vertex.

          The performance of UPSERT is much lower than that of INSERT because UPSERT is a read-modify-write serialization operation at the partition level.

          Danger

          Don't use UPSERT for scenarios with highly concurrent writes. You can use UPDATE or INSERT instead.

          "},{"location":"3.ngql-guide/12.vertex-statements/3.upsert-vertex/#syntax","title":"Syntax","text":"
          UPSERT VERTEX ON <tag> <vid>\nSET <update_prop>\n[WHEN <condition>]\n[YIELD <output>]\n
          Parameter Required Description Example ON <tag> Yes Specifies the tag of the vertex. The properties to be updated must be on this tag. ON player <vid> Yes Specifies the ID of the vertex to be updated or inserted. \"player100\" SET <update_prop> Yes Specifies the properties to be updated and how they will be updated. SET age = age +1 WHEN <condition> No Specifies the filter conditions. WHEN name == \"Tim\" YIELD <output> No Specifies the output format of the statement. YIELD name AS Name"},{"location":"3.ngql-guide/12.vertex-statements/3.upsert-vertex/#insert_a_vertex_if_it_does_not_exist","title":"Insert a vertex if it does not exist","text":"

          If a vertex does not exist, it is created no matter the conditions in the WHEN clause are met or not, and the SET clause always takes effect. The property values of the new vertex depend on:

          • How the SET clause is defined.
          • Whether the property has a default value.

          For example, if:

          • The vertex to be inserted will have properties name and age based on the tag player.
          • The SET clause specifies that age = 30.

          Then the property values in different cases are listed as follows:

          Are WHEN conditions met If properties have default values Value of name Value of age Yes Yes The default value 30 Yes No NULL 30 No Yes The default value 30 No No NULL 30

          Here are some examples:

          // This query checks if the following three vertices exist. The result \"Empty set\" indicates that the vertices do not exist.\nnebula> FETCH PROP ON * \"player666\", \"player667\", \"player668\" YIELD properties(vertex);\n+--------------------+\n| properties(VERTEX) |\n+--------------------+\n+--------------------+\nEmpty set\n\nnebula> UPSERT VERTEX ON player \"player666\" \\\n        SET age = 30 \\\n        WHEN name == \"Joe\" \\\n        YIELD name AS Name, age AS Age;\n+----------+----------+\n| Name     | Age      |\n+----------+----------+\n| __NULL__ | 30       |\n+----------+----------+\n\nnebula> UPSERT VERTEX ON player \"player666\" \\\n        SET age = 31 \\\n        WHEN name == \"Joe\" \\\n        YIELD name AS Name, age AS Age;\n+----------+-----+\n| Name     | Age |\n+----------+-----+\n| __NULL__ | 30  |\n+----------+-----+\n\nnebula> UPSERT VERTEX ON player \"player667\" \\\n        SET age = 31 \\\n        YIELD name AS Name, age AS Age;\n+----------+-----+\n| Name     | Age |\n+----------+-----+\n| __NULL__ | 31  |\n+----------+-----+\n\nnebula> UPSERT VERTEX ON player \"player668\" \\\n        SET name = \"Amber\", age = age + 1 \\\n        YIELD name AS Name, age AS Age;\n+---------+----------+\n| Name    | Age      |\n+---------+----------+\n| \"Amber\" | __NULL__ |\n+---------+----------+\n

          In the last query of the preceding examples, since age has no default value, when the vertex is created, age is NULL, and age = age + 1 does not take effect. But if age has a default value, age = age + 1 will take effect. For example:

          nebula> CREATE TAG IF NOT EXISTS player_with_default(name string, age int DEFAULT 20);\nExecution succeeded\n\nnebula> UPSERT VERTEX ON player_with_default \"player101\" \\\n        SET age = age + 1 \\\n        YIELD name AS Name, age AS Age;\n\n+----------+-----+\n| Name     | Age |\n+----------+-----+\n| __NULL__ | 21  |\n+----------+-----+\n
          "},{"location":"3.ngql-guide/12.vertex-statements/3.upsert-vertex/#update_a_vertex_if_it_exists","title":"Update a vertex if it exists","text":"

          If the vertex exists and the WHEN conditions are met, the vertex is updated.

          nebula> FETCH PROP ON player \"player101\" YIELD properties(vertex);\n+--------------------------------+\n| properties(VERTEX)             |\n+--------------------------------+\n| {age: 36, name: \"Tony Parker\"} |\n+--------------------------------+\n\nnebula> UPSERT VERTEX ON player \"player101\" \\\n        SET age = age + 2 \\\n        WHEN name == \"Tony Parker\" \\\n        YIELD name AS Name, age AS Age;\n+---------------+-----+\n| Name          | Age |\n+---------------+-----+\n| \"Tony Parker\" | 38  |\n+---------------+-----+\n

          If the vertex exists and the WHEN conditions are not met, the update does not take effect.

          nebula> FETCH PROP ON player \"player101\" YIELD properties(vertex);\n+--------------------------------+\n| properties(VERTEX)             |\n+--------------------------------+\n| {age: 38, name: \"Tony Parker\"} |\n+--------------------------------+\n\nnebula> UPSERT VERTEX ON player \"player101\" \\\n        SET age = age + 2 \\\n        WHEN name == \"Someone else\" \\\n        YIELD name AS Name, age AS Age;\n+---------------+-----+\n| Name          | Age |\n+---------------+-----+\n| \"Tony Parker\" | 38  |\n+---------------+-----+\n
          "},{"location":"3.ngql-guide/12.vertex-statements/4.delete-vertex/","title":"DELETE VERTEX","text":"

          By default, the DELETE VERTEX statement deletes vertices but the incoming and outgoing edges of the vertices.

          Compatibility

          • NebulaGraph 2.x deletes vertices and their incoming and outgoing edges.
          • NebulaGraph master only deletes the vertices, and does not delete the related outgoing and incoming edges of the vertices. At this time, there will be dangling edges by default.

          The DELETE VERTEX statement deletes one vertex or multiple vertices at a time. You can use DELETE VERTEX together with pipes. For more information about pipe, see Pipe operator.

          Note

          • DELETE VERTEX deletes vertices directly.
          • DELETE TAG deletes a tag with the given name on a specified vertex.
          "},{"location":"3.ngql-guide/12.vertex-statements/4.delete-vertex/#syntax","title":"Syntax","text":"
          DELETE VERTEX <vid> [, <vid> ...] [WITH EDGE];\n
          • WITH EDGE: deletes vertices and the related incoming and outgoing edges of the vertices.
          "},{"location":"3.ngql-guide/12.vertex-statements/4.delete-vertex/#examples","title":"Examples","text":"

          This query deletes the vertex whose ID is \"team1\".

          # Delete the vertex whose VID is `team1` but the related incoming and outgoing edges are not deleted.\nnebula> DELETE VERTEX \"team1\";\n\n# Delete the vertex whose VID is `team1` and the related incoming and outgoing edges.\nnebula> DELETE VERTEX \"team1\" WITH EDGE;\n

          This query shows that you can use DELETE VERTEX together with pipe to delete vertices.

          nebula> GO FROM \"player100\" OVER serve WHERE properties(edge).start_year == \"2021\" YIELD dst(edge) AS id | DELETE VERTEX $-.id;\n
          "},{"location":"3.ngql-guide/12.vertex-statements/4.delete-vertex/#process_of_deleting_vertices","title":"Process of deleting vertices","text":"

          Once NebulaGraph deletes the vertices, all edges (incoming and outgoing edges) of the target vertex will become dangling edges. When NebulaGraph deletes the vertices WITH EDGE, NebulaGraph traverses the incoming and outgoing edges related to the vertices and deletes them all. Then NebulaGraph deletes the vertices.

          Caution

          • Atomic deletion is not supported during the entire process for now. Please retry when a failure occurs to avoid partial deletion, which will cause pendent edges.
          • Deleting a supernode takes a lot of time. To avoid connection timeout before the deletion is complete, you can modify the parameter --storage_client_timeout_ms in nebula-graphd.conf to extend the timeout period.
          "},{"location":"3.ngql-guide/13.edge-statements/1.insert-edge/","title":"INSERT EDGE","text":"

          The INSERT EDGE statement inserts an edge or multiple edges into a graph space from a source vertex (given by src_vid) to a destination vertex (given by dst_vid) with a specific rank in NebulaGraph.

          When inserting an edge that already exists, INSERT EDGE overrides the edge.

          "},{"location":"3.ngql-guide/13.edge-statements/1.insert-edge/#syntax","title":"Syntax","text":"
          INSERT EDGE [IF NOT EXISTS] <edge_type> ( <prop_name_list> ) VALUES \n<src_vid> -> <dst_vid>[@<rank>] : ( <prop_value_list> )\n[, <src_vid> -> <dst_vid>[@<rank>] : ( <prop_value_list> ), ...];\n\n<prop_name_list> ::=\n  [ <prop_name> [, <prop_name> ] ...]\n\n<prop_value_list> ::=\n  [ <prop_value> [, <prop_value> ] ...]\n
          • IF NOT EXISTS detects if the edge that you want to insert exists. If it does not exist, a new one will be inserted.

            Note

            • IF NOT EXISTS only detects whether exist and does not detect whether the property values overlap.
            • IF NOT EXISTS will read to check whether the data exists, which will have a significant impact on performance.
              • <edge_type> denotes the edge type, which must be created before INSERT EDGE. Only one edge type can be specified in this statement.
              • <prop_name_list> is the property name list in the given <edge_type>.
              • src_vid is the VID of the source vertex. It specifies the start of an edge.
              • dst_vid is the VID of the destination vertex. It specifies the end of an edge.
              • rank is optional. It specifies the edge rank of the same edge type. The data type is int. If not specified, the default value is 0. You can insert many edges with the same edge type, source vertex, and destination vertex by using different rank values.

                OpenCypher compatibility

                OpenCypher has no such concept as rank.

              • <prop_value_list> must provide the value list according to <prop_name_list>. If the property values do not match the data type in the edge type, an error is returned. When the NOT NULL constraint is set for a given property, an error is returned if no property is given. When the default value for a property is NULL, you can omit to specify the property value. For details, see CREATE EDGE.
              "},{"location":"3.ngql-guide/13.edge-statements/1.insert-edge/#examples","title":"Examples","text":"
              # The following example creates edge type e1 with no property and inserts an edge from vertex \"10\" to vertex \"11\" with no property.\nnebula> CREATE EDGE IF NOT EXISTS e1();                 \nnebula> INSERT EDGE e1 () VALUES \"10\"->\"11\":();  \n\n# The following example inserts an edge from vertex \"10\" to vertex \"11\" with no property. The edge rank is 1.\nnebula> INSERT EDGE e1 () VALUES \"10\"->\"11\"@1:(); \n
              nebula> CREATE EDGE IF NOT EXISTS e2 (name string, age int); \nnebula> INSERT EDGE e2 (name, age) VALUES \"11\"->\"13\":(\"n1\", 1);\n\n# The following example creates edge type e2 with two properties.\nnebula> INSERT EDGE e2 (name, age) VALUES \\\n        \"12\"->\"13\":(\"n1\", 1), \"13\"->\"14\":(\"n2\", 2); \n\n# In the following example, the insertion fails because \"a13\" is not int.\nnebula> INSERT EDGE e2 (name, age) VALUES \"11\"->\"13\":(\"n1\", \"a13\");\n

              An edge can be inserted/written with property values multiple times. Only the last written values can be read.

              The following examples insert edge e2 with the new values for multiple times.\nnebula> INSERT EDGE e2 (name, age) VALUES \"11\"->\"13\":(\"n1\", 12);\nnebula> INSERT EDGE e2 (name, age) VALUES \"11\"->\"13\":(\"n1\", 13);\nnebula> INSERT EDGE e2 (name, age) VALUES \"11\"->\"13\":(\"n1\", 14);\nnebula> FETCH PROP ON e2 \"11\"->\"13\" YIELD edge AS e;\n+-------------------------------------------+\n| e                                         |\n+-------------------------------------------+\n| [:e2 \"11\"->\"13\" @0 {age: 14, name: \"n1\"}] |\n+-------------------------------------------+\n

              If you insert an edge that already exists with IF NOT EXISTS, there will be no modification.

              # The following example inserts edge e2 from vertex \"14\" to vertex \"15\".\nnebula> INSERT EDGE e2 (name, age) VALUES \"14\"->\"15\"@1:(\"n1\", 12);\n# The following example alters the edge with IF NOT EXISTS. But there will be no alteration because edge e2 already exists.\nnebula> INSERT EDGE IF NOT EXISTS e2 (name, age) VALUES \"14\"->\"15\"@1:(\"n2\", 13);\nnebula> FETCH PROP ON e2 \"14\"->\"15\"@1 YIELD edge AS e;\n+-------------------------------------------+\n| e                                         |\n+-------------------------------------------+\n| [:e2 \"14\"->\"15\" @1 {age: 12, name: \"n1\"}] |\n+-------------------------------------------+\n

              Note

              • NebulaGraph master allows dangling edges. Therefore, you can write the edge before the source vertex or the destination vertex exists. At this time, you can get the (not written) vertex VID through <edgetype>._src or <edgetype>._dst (which is not recommended).
              • Atomic operation is not guaranteed during the entire process for now. If it fails, please try again. Otherwise, partial writing will occur. At this time, the behavior of reading the data is undefined. For example, if multiple machines are involved in the write operation, only one of the forward and reverse edges of a single edge is written successfully, or only part of the edge is written successfully when multiple edges are inserted. In this case, an error will be returned, so please execute the command again.
              • Concurrently writing the same edge will cause an edge conflict error, so please try again later.
              • The inserting speed of an edge is about half that of a vertex. Because in the storaged process, the insertion of an edge involves two tasks, while the insertion of a vertex involves only one task.
              "},{"location":"3.ngql-guide/13.edge-statements/2.update-edge/","title":"UPDATE EDGE","text":"

              The UPDATE EDGE statement updates properties on an edge.

              In NebulaGraph, UPDATE EDGE supports compare-and-swap (CAS).

              "},{"location":"3.ngql-guide/13.edge-statements/2.update-edge/#syntax","title":"Syntax","text":"
              UPDATE EDGE ON <edge_type>\n<src_vid> -> <dst_vid> [@<rank>]\nSET <update_prop>\n[WHEN <condition>]\n[YIELD <output>]\n
              Parameter Required Description Example ON <edge_type> Yes Specifies the edge type. The properties to be updated must be on this edge type. ON serve <src_vid> Yes Specifies the source vertex ID of the edge. \"player100\" <dst_vid> Yes Specifies the destination vertex ID of the edge. \"team204\" <rank> No Specifies the rank of the edge. The data type is int. 10 SET <update_prop> Yes Specifies the properties to be updated and how they will be updated. SET start_year = start_year +1 WHEN <condition> No Specifies the filter conditions. If <condition> evaluates to false, the SET clause does not take effect. WHEN end_year < 2010 YIELD <output> No Specifies the output format of the statement. YIELD start_year AS Start_Year"},{"location":"3.ngql-guide/13.edge-statements/2.update-edge/#example","title":"Example","text":"

              The following example checks the properties of the edge with the GO statement.

              nebula> GO FROM \"player100\" \\\n        OVER serve \\\n        YIELD properties(edge).start_year, properties(edge).end_year;\n+-----------------------------+---------------------------+\n| properties(EDGE).start_year | properties(EDGE).end_year |\n+-----------------------------+---------------------------+\n| 1997                        | 2016                      |\n+-----------------------------+---------------------------+\n

              The following example updates the start_year property and returns the end_year and the new start_year.

              nebula> UPDATE EDGE on serve \"player100\" -> \"team204\"@0 \\\n        SET start_year = start_year + 1 \\\n        WHEN end_year > 2010 \\\n        YIELD start_year, end_year;\n+------------+----------+\n| start_year | end_year |\n+------------+----------+\n| 1998       | 2016     |\n+------------+----------+\n
              "},{"location":"3.ngql-guide/13.edge-statements/3.upsert-edge/","title":"UPSERT EDGE","text":"

              The UPSERT statement is a combination of UPDATE and INSERT. You can use UPSERT EDGE to update the properties of an edge if it exists or insert a new edge if it does not exist.

              The performance of UPSERT is much lower than that of INSERT because UPSERT is a read-modify-write serialization operation at the partition level.

              Danger

              Do not use UPSERT for scenarios with highly concurrent writes. You can use UPDATE or INSERT instead.

              "},{"location":"3.ngql-guide/13.edge-statements/3.upsert-edge/#syntax","title":"Syntax","text":"
              UPSERT EDGE ON <edge_type>\n<src_vid> -> <dst_vid> [@rank]\nSET <update_prop>\n[WHEN <condition>]\n[YIELD <properties>]\n
              Parameter Required Description Example ON <edge_type> Yes Specifies the edge type. The properties to be updated must be on this edge type. ON serve <src_vid> Yes Specifies the source vertex ID of the edge. \"player100\" <dst_vid> Yes Specifies the destination vertex ID of the edge. \"team204\" <rank> No Specifies the rank of the edge. 10 SET <update_prop> Yes Specifies the properties to be updated and how they will be updated. SET start_year = start_year +1 WHEN <condition> No Specifies the filter conditions. WHEN end_year < 2010 YIELD <output> No Specifies the output format of the statement. YIELD start_year AS Start_Year"},{"location":"3.ngql-guide/13.edge-statements/3.upsert-edge/#insert_an_edge_if_it_does_not_exist","title":"Insert an edge if it does not exist","text":"

              If an edge does not exist, it is created no matter the conditions in the WHEN clause are met or not, and the SET clause takes effect. The property values of the new edge depend on:

              • How the SET clause is defined.
              • Whether the property has a default value.

              For example, if:

              • The edge to be inserted will have properties start_year and end_year based on the edge type serve.
              • The SET clause specifies that end_year = 2021.

              Then the property values in different cases are listed as follows:

              Are WHEN conditions met If properties have default values Value of start_year Value of end_year Yes Yes The default value 2021 Yes No NULL 2021 No Yes The default value 2021 No No NULL 2021

              Here are some examples:

              // This example checks if the following three vertices have any outgoing serve edge. The result \"Empty set\" indicates that such an edge does not exist.\nnebula> GO FROM \"player666\", \"player667\", \"player668\" \\\n        OVER serve \\\n        YIELD properties(edge).start_year, properties(edge).end_year;\n+-----------------------------+---------------------------+\n| properties(EDGE).start_year | properties(EDGE).end_year |\n+-----------------------------+---------------------------+\n+-----------------------------+---------------------------+\nEmpty set\n\nnebula> UPSERT EDGE on serve \\\n        \"player666\" -> \"team200\"@0 \\\n        SET end_year = 2021 \\\n        WHEN end_year == 2010 \\\n        YIELD start_year, end_year;\n+------------+----------+\n| start_year | end_year |\n+------------+----------+\n| __NULL__   | 2021     |\n+------------+----------+\n\nnebula> UPSERT EDGE on serve \\\n        \"player666\" -> \"team200\"@0 \\\n        SET end_year = 2022 \\\n        WHEN end_year == 2010 \\\n        YIELD start_year, end_year;\n+------------+----------+\n| start_year | end_year |\n+------------+----------+\n| __NULL__   | 2021     |\n+------------+----------+\n\nnebula> UPSERT EDGE on serve \\\n        \"player667\" -> \"team200\"@0 \\\n        SET end_year = 2022 \\\n        YIELD start_year, end_year;\n+------------+----------+\n| start_year | end_year |\n+------------+----------+\n| __NULL__   | 2022     |\n+------------+----------+\n\nnebula> UPSERT EDGE on serve \\\n        \"player668\" -> \"team200\"@0 \\\n        SET start_year = 2000, end_year = end_year + 1 \\\n        YIELD start_year, end_year;\n+------------+----------+\n| start_year | end_year |\n+------------+----------+\n| 2000       | __NULL__ |\n+------------+----------+\n

              In the last query of the preceding example, since end_year has no default value, when the edge is created, end_year is NULL, and end_year = end_year + 1 does not take effect. But if end_year has a default value, end_year = end_year + 1 will take effect. For example:

              nebula> CREATE EDGE IF NOT EXISTS serve_with_default(start_year int, end_year int DEFAULT 2010);\nExecution succeeded\n\nnebula> UPSERT EDGE on serve_with_default \\\n        \"player668\" -> \"team200\" \\\n        SET end_year = end_year + 1 \\\n        YIELD start_year, end_year;\n+------------+----------+\n| start_year | end_year |\n+------------+----------+\n| __NULL__   | 2011     |\n+------------+----------+\n
              "},{"location":"3.ngql-guide/13.edge-statements/3.upsert-edge/#update_an_edge_if_it_exists","title":"Update an edge if it exists","text":"

              If the edge exists and the WHEN conditions are met, the edge is updated.

              nebula> MATCH (v:player{name:\"Ben Simmons\"})-[e:serve]-(v2) \\\n        RETURN e;\n+-----------------------------------------------------------------------+\n| e                                                                     |\n+-----------------------------------------------------------------------+\n| [:serve \"player149\"->\"team219\" @0 {end_year: 2019, start_year: 2016}] |\n+-----------------------------------------------------------------------+\n\nnebula> UPSERT EDGE on serve \\\n        \"player149\" -> \"team219\" \\\n        SET end_year = end_year + 1 \\\n        WHEN start_year == 2016 \\\n        YIELD start_year, end_year;\n+------------+----------+\n| start_year | end_year |\n+------------+----------+\n| 2016       | 2020     |\n+------------+----------+\n

              If the edge exists and the WHEN conditions are not met, the update does not take effect.

              nebula> MATCH (v:player{name:\"Ben Simmons\"})-[e:serve]-(v2) \\\n        RETURN e;\n+-----------------------------------------------------------------------+\n| e                                                                     |\n+-----------------------------------------------------------------------+\n| [:serve \"player149\"->\"team219\" @0 {end_year: 2020, start_year: 2016}] |\n+-----------------------------------------------------------------------+\n\n\nnebula> UPSERT EDGE on serve \\\n        \"player149\" -> \"team219\" \\\n        SET end_year = end_year + 1 \\\n        WHEN start_year != 2016 \\\n        YIELD start_year, end_year;\n+------------+----------+\n| start_year | end_year |\n+------------+----------+\n| 2016       | 2020     |\n+------------+----------+\n
              "},{"location":"3.ngql-guide/13.edge-statements/4.delete-edge/","title":"DELETE EDGE","text":"

              The DELETE EDGE statement deletes one edge or multiple edges at a time. You can use DELETE EDGE together with pipe operators. For more information, see PIPE OPERATORS.

              To delete all the outgoing edges for a vertex, please delete the vertex. For more information, see DELETE VERTEX.

              "},{"location":"3.ngql-guide/13.edge-statements/4.delete-edge/#syntax","title":"Syntax","text":"
              DELETE EDGE <edge_type> <src_vid> -> <dst_vid>[@<rank>] [, <src_vid> -> <dst_vid>[@<rank>] ...]\n

              Caution

              If no rank is specified, NebulaGraph only deletes the edge with rank 0. Delete edges with all ranks, as shown in the following example.

              "},{"location":"3.ngql-guide/13.edge-statements/4.delete-edge/#examples","title":"Examples","text":"
              nebula> DELETE EDGE serve \"player100\" -> \"team204\"@0;\n

              The following example shows that you can use DELETE EDGE together with pipe operators to delete edges that meet the conditions.

              nebula> GO FROM \"player100\" OVER follow \\\n        WHERE dst(edge) == \"player101\" \\\n        YIELD src(edge) AS src, dst(edge) AS dst, rank(edge) AS rank \\\n        | DELETE EDGE follow $-.src->$-.dst @ $-.rank;\n
              "},{"location":"3.ngql-guide/14.native-index-statements/","title":"Index overview","text":"

              Indexes are built to fast process graph queries. Nebula\u00a0Graph supports two kinds of indexes: native indexes and full-text indexes. This topic introduces the index types and helps choose the right index.

              "},{"location":"3.ngql-guide/14.native-index-statements/#usage_instructions","title":"Usage Instructions","text":"
              • Indexes can improve query performance but may reduce write performance.
              • An index is a prerequisite for locating data when executing a LOOKUPstatement. If there is no index, an error will be reported when executing the LOOKUP statement.
              • When using an index, NebulaGraph will automatically select the most optimal index.
              • Indexes with high selectivity, that is, when the ratio of the number of records with unique values in the index column to the total number of records is high (for example, the ratio for ID numbers is 1), can significantly improve query performance. For indexes with low selectivity (such as country), query performance might not experience a substantial improvement.
              "},{"location":"3.ngql-guide/14.native-index-statements/#native_indexes","title":"Native indexes","text":"

              Native indexes allow querying data based on a given property. Features are as follows.

              • There are two kinds of native indexes: tag index and edge type index.
              • Native indexes must be updated manually. You can use the REBUILD INDEX statement to update native indexes.
              • Native indexes support indexing multiple properties on a tag or an edge type (composite indexes), but do not support indexing across multiple tags or edge types.
              "},{"location":"3.ngql-guide/14.native-index-statements/#operations_on_native_indexes","title":"Operations on native indexes","text":"
              • CREATE INDEX
              • SHOW CREATE INDEX
              • SHOW INDEXES
              • DESCRIBE INDEX
              • REBUILD INDEX
              • SHOW INDEX STATUS
              • DROP INDEX
              • LOOKUP
              • MATCH
              • Geography index
              "},{"location":"3.ngql-guide/14.native-index-statements/#full-text_indexes","title":"Full-text indexes","text":"

              Full-text indexes are used to do prefix, wildcard, regexp, and fuzzy search on a string property. Features are as follows.

              • Full-text indexes allow indexing just one property.
              • Full-text indexes do not support logical operations such as AND, OR, and NOT.

              Note

              To do complete string matches, use native indexes.

              "},{"location":"3.ngql-guide/14.native-index-statements/#null_values","title":"Null values","text":"

              Indexes do not support indexing null values.

              "},{"location":"3.ngql-guide/14.native-index-statements/#range_queries","title":"Range queries","text":"

              In addition to querying single results from native indexes, you can also do range queries. Not all the native indexes support range queries. You can only do range searches for numeric, date, and time type properties.

              "},{"location":"3.ngql-guide/14.native-index-statements/1.create-native-index/","title":"CREATE INDEX","text":""},{"location":"3.ngql-guide/14.native-index-statements/1.create-native-index/#prerequisites","title":"Prerequisites","text":"

              Before you create an index, make sure that the relative tag or edge type is created. For how to create tags or edge types, see CREATE TAG and CREATE EDGE.

              For how to create full-text indexes, see Deploy full-text index.

              "},{"location":"3.ngql-guide/14.native-index-statements/1.create-native-index/#must-read_for_using_indexes","title":"Must-read for using indexes","text":"

              The concept and using restrictions of indexes are comparatively complex. Before you use indexes, you must read the following sections carefully.

              You can use CREATE INDEX to add native indexes for the existing tags, edge types, or properties. They are usually called as tag indexes, edge type indexes, and property indexes.

              • Tag indexes and edge type indexes apply to queries related to the tag and the edge type, but do not apply to queries that are based on certain properties on the tag. For example, you can use LOOKUP to retrieve all the vertices with the tag player.
              • Property indexes apply to property-based queries. For example, you can use the age property to retrieve the VID of all vertices that meet age == 19.

              If a property index i_TA is created for the property A of the tag T and i_T for the tag T, the indexes can be replaced as follows (the same for edge type indexes):

              • The query engine can use i_TA to replace i_T.
              • In the MATCH and LOOKUP statements, i_T may replace i_TA for querying properties.

                Legacy version compatibility

                In previous releases, the tag or edge type index in the LOOKUP statement cannot replace the property index for property queries.

              Although the same results can be obtained by using alternative indexes for queries, the query performance varies according to the selected index.

              Caution

              Indexes can dramatically reduce the write performance. The performance can be greatly reduced. DO NOT use indexes in production environments unless you are fully aware of their influences on your service.

              Long indexes decrease the scan performance of the Storage Service and use more memory. We suggest that you set the indexing length the same as that of the longest string to be indexed. For variable-length string-type properties, the longest index length is 256 bytes; for fixed-length string-type properties, the longest index length is the length of the index itself.

              "},{"location":"3.ngql-guide/14.native-index-statements/1.create-native-index/#steps","title":"Steps","text":"

              If you must use indexes, we suggest that you:

              1. Import the data into NebulaGraph.

              2. Create indexes.

              3. Rebuild indexes.

              4. After the index is created and the data is imported, you can use LOOKUP or MATCH to retrieve the data. You do not need to specify which indexes to use in a query, NebulaGraph figures that out by itself.

              Note

              If you create an index before importing the data, the importing speed will be extremely slow due to the reduction in the write performance.

              Keep --disable_auto_compaction = false during daily incremental writing.

              The newly created index will not take effect immediately. Trying to use a newly created index (such as LOOKUP orREBUILD INDEX) may fail and return can't find xxx in the space because the creation is implemented asynchronously. To make sure the follow-up operations work as expected, Wait for two heartbeat cycles, i.e., 20 seconds. To change the heartbeat interval, modify the heartbeat_interval_secs in the configuration files for all services.

              Danger

              After creating a new index, or dropping the old index and creating a new one with the same name again, you must REBUILD INDEX. Otherwise, these data cannot be returned in the MATCH and LOOKUP statements.

              "},{"location":"3.ngql-guide/14.native-index-statements/1.create-native-index/#syntax","title":"Syntax","text":"
              CREATE {TAG | EDGE} INDEX [IF NOT EXISTS] <index_name> ON {<tag_name> | <edge_name>} ([<prop_name_list>]) [COMMENT '<comment>'];\n
              Parameter Description TAG | EDGE Specifies the index type that you want to create. IF NOT EXISTS Detects if the index that you want to create exists. If it does not exist, a new one will be created. <index_name> 1. The name of the index. It must be unique in a graph space. A recommended way of naming is i_tagName_propName. 2. By default, the name only supports 1-4 byte UTF-8 encoded characters, including English letters (case sensitive), numbers, Chinese characters, etc. However, it cannot include special characters other than the underscore (_), and cannot start with a number.3. To use special characters, reserved keywords, or start with a number, quote the entire name with backticks (`) and do not include periods (.) within the pair of backticks (`). For more information, see Keywords and reserved words.Note:1. If you name an index in Chinese and encounter a SyntaxError, you need to quote the Chinese characters with backticks (`). 2. To include a backtick (`) in an index name, use a backslash to escape the backtick, such as \\`; to include a backslash, the backslash itself also needs to be escaped, such as \\ . <tag_name> | <edge_name> Specifies the name of the tag or edge associated with the index. <prop_name_list> To index a variable-length string property, you must use prop_name(length) to specify the index length, and the maximum index length is 256. To index a tag or an edge type, ignore the prop_name_list. COMMENT The remarks of the index. The maximum length is 256 bytes. By default, there will be no comments on an index."},{"location":"3.ngql-guide/14.native-index-statements/1.create-native-index/#create_tagedge_type_indexes","title":"Create tag/edge type indexes","text":"
              nebula> CREATE TAG INDEX IF NOT EXISTS player_index on player();\n
              nebula> CREATE EDGE INDEX IF NOT EXISTS follow_index on follow();\n

              After indexing a tag or an edge type, you can use the LOOKUP statement to retrieve the VID of all vertices with the tag, or the source vertex ID, destination vertex ID, and ranks of all edges with the edge type. For more information, see LOOKUP.

              "},{"location":"3.ngql-guide/14.native-index-statements/1.create-native-index/#create_single-property_indexes","title":"Create single-property indexes","text":"
              nebula> CREATE TAG INDEX IF NOT EXISTS player_index_0 on player(name(10));\n

              The preceding example creates an index for the name property on all vertices carrying the player tag. This example creates an index using the first 10 characters of the name property.

              # To index a variable-length string property, you need to specify the index length.\nnebula> CREATE TAG IF NOT EXISTS var_string(p1 string);\nnebula> CREATE TAG INDEX IF NOT EXISTS var ON var_string(p1(10));\n\n# To index a fixed-length string property, you do not need to specify the index length.\nnebula> CREATE TAG IF NOT EXISTS fix_string(p1 FIXED_STRING(10));\nnebula> CREATE TAG INDEX IF NOT EXISTS fix ON fix_string(p1);\n
              nebula> CREATE EDGE INDEX IF NOT EXISTS follow_index_0 on follow(degree);\n
              "},{"location":"3.ngql-guide/14.native-index-statements/1.create-native-index/#create_composite_property_indexes","title":"Create composite property indexes","text":"

              An index on multiple properties on a tag (or an edge type) is called a composite property index.

              nebula> CREATE TAG INDEX IF NOT EXISTS player_index_1 on player(name(10), age);\n

              Caution

              Creating composite property indexes across multiple tags or edge types is not supported.

              Note

              NebulaGraph follows the left matching principle to select indexes.

              "},{"location":"3.ngql-guide/14.native-index-statements/2.1.show-create-index/","title":"SHOW CREATE INDEX","text":"

              SHOW CREATE INDEX shows the statement used when creating a tag or an edge type. It contains detailed information about the index, such as its associated properties.

              "},{"location":"3.ngql-guide/14.native-index-statements/2.1.show-create-index/#syntax","title":"Syntax","text":"
              SHOW CREATE {TAG | EDGE} INDEX <index_name>;\n
              "},{"location":"3.ngql-guide/14.native-index-statements/2.1.show-create-index/#examples","title":"Examples","text":"

              You can run SHOW TAG INDEXES to list all tag indexes, and then use SHOW CREATE TAG INDEX to show the information about the creation of the specified index.

              nebula> SHOW TAG INDEXES;\n+------------------+----------+----------+\n| Index Name       | By Tag   | Columns  |\n+------------------+----------+----------+\n| \"player_index_0\" | \"player\" | []       |\n| \"player_index_1\" | \"player\" | [\"name\"] |\n+------------------+----------+----------+\n\nnebula> SHOW CREATE TAG INDEX player_index_1;\n+------------------+--------------------------------------------------+\n| Tag Index Name   | Create Tag Index                                 |\n+------------------+--------------------------------------------------+\n| \"player_index_1\" | \"CREATE TAG INDEX `player_index_1` ON `player` ( |\n|                  |  `name`(20)                                      |\n|                  | )\"                                               |\n+------------------+--------------------------------------------------+\n

              Edge indexes can be queried through a similar approach.

              nebula> SHOW EDGE INDEXES;\n+----------------+----------+---------+\n| Index Name     | By Edge  | Columns |\n+----------------+----------+---------+\n| \"follow_index\" | \"follow\" | []      |\n+----------------+----------+---------+\n\nnebula> SHOW CREATE EDGE INDEX follow_index;\n+-----------------+-------------------------------------------------+\n| Edge Index Name | Create Edge Index                               |\n+-----------------+-------------------------------------------------+\n| \"follow_index\"  | \"CREATE EDGE INDEX `follow_index` ON `follow` ( |\n|                 | )\"                                              |\n+-----------------+-------------------------------------------------+\n
              "},{"location":"3.ngql-guide/14.native-index-statements/2.show-native-indexes/","title":"SHOW INDEXES","text":"

              SHOW INDEXES shows the defined tag or edge type indexes names in the current graph space.

              "},{"location":"3.ngql-guide/14.native-index-statements/2.show-native-indexes/#syntax","title":"Syntax","text":"
              SHOW {TAG | EDGE} INDEXES\n
              "},{"location":"3.ngql-guide/14.native-index-statements/2.show-native-indexes/#examples","title":"Examples","text":"
              nebula> SHOW TAG INDEXES;\n+------------------+--------------+-----------------+\n| Index Name       | By Tag       | Columns         |\n+------------------+--------------+-----------------+\n| \"fix\"            | \"fix_string\" | [\"p1\"]          |\n| \"player_index_0\" | \"player\"     | [\"name\"]        |\n| \"player_index_1\" | \"player\"     | [\"name\", \"age\"] |\n| \"var\"            | \"var_string\" | [\"p1\"]          |\n+------------------+--------------+-----------------+\n\nnebula> SHOW EDGE INDEXES;\n+----------------+----------+---------+\n| Index Name     | By Edge  | Columns |\n| \"follow_index\" | \"follow\" | []      |\n+----------------+----------+---------+\n

              Legacy version compatibility

              In NebulaGraph 2.x, the SHOW TAG/EDGE INDEXES statement only returns Names.

              "},{"location":"3.ngql-guide/14.native-index-statements/3.describe-native-index/","title":"DESCRIBE INDEX","text":"

              DESCRIBE INDEX can get the information about the index with a given name, including the property name (Field) and the property type (Type) of the index.

              "},{"location":"3.ngql-guide/14.native-index-statements/3.describe-native-index/#syntax","title":"Syntax","text":"
              DESCRIBE {TAG | EDGE} INDEX <index_name>;\n
              "},{"location":"3.ngql-guide/14.native-index-statements/3.describe-native-index/#examples","title":"Examples","text":"
              nebula> DESCRIBE TAG INDEX player_index_0;\n+--------+--------------------+\n| Field  | Type               |\n+--------+--------------------+\n| \"name\" | \"fixed_string(30)\" |\n+--------+--------------------+\n\nnebula> DESCRIBE TAG INDEX player_index_1;\n+--------+--------------------+\n| Field  | Type               |\n+--------+--------------------+\n| \"name\" | \"fixed_string(10)\" |\n| \"age\"  | \"int64\"            |\n+--------+--------------------+\n
              "},{"location":"3.ngql-guide/14.native-index-statements/4.rebuild-native-index/","title":"REBUILD INDEX","text":"

              Danger

              • If data is updated or inserted before the creation of the index, you must rebuild the indexes manually to make sure that the indexes contain the previously added data. Otherwise, you cannot use LOOKUP and MATCH to query the data based on the index. If the index is created before any data insertion, there is no need to rebuild the index.
              • When the rebuild of an index is incomplete, queries that rely on the index can use only part of the index and therefore cannot obtain accurate results.

              You can use REBUILD INDEX to rebuild the created tag or edge type index. For details on how to create an index, see CREATE INDEX.

              Caution

              The speed of rebuilding indexes can be optimized by modifying the rebuild_index_part_rate_limit and snapshot_batch_size parameters in the configuration file. In addition, greater parameter values may result in higher memory and network usage, see Storage Service configurations for details.

              "},{"location":"3.ngql-guide/14.native-index-statements/4.rebuild-native-index/#syntax","title":"Syntax","text":"
              REBUILD {TAG | EDGE} INDEX [<index_name_list>];\n\n<index_name_list>::=\n    [index_name [, index_name] ...]\n
              • Multiple indexes are permitted in a single REBUILD statement, separated by commas. When the index name is not specified, all tag or edge indexes are rebuilt.
              • After the rebuilding is complete, you can use the SHOW {TAG | EDGE} INDEX STATUS command to check if the index is successfully rebuilt. For details on index status, see SHOW INDEX STATUS.
              "},{"location":"3.ngql-guide/14.native-index-statements/4.rebuild-native-index/#examples","title":"Examples","text":"
              nebula> CREATE TAG IF NOT EXISTS person(name string, age int, gender string, email string);\nnebula> CREATE TAG INDEX IF NOT EXISTS single_person_index ON person(name(10));\n\n# The following example rebuilds an index and returns the job ID.\nnebula> REBUILD TAG INDEX single_person_index;\n+------------+\n| New Job Id |\n+------------+\n| 31         |\n+------------+\n\n# The following example checks the index status.\nnebula> SHOW TAG INDEX STATUS;\n+-----------------------+--------------+\n| Name                  | Index Status |\n+-----------------------+--------------+\n| \"single_person_index\" | \"FINISHED\"   |\n+-----------------------+--------------+\n\n# You can also use \"SHOW JOB <job_id>\" to check if the rebuilding process is complete.\nnebula> SHOW JOB 31;\n+----------------+---------------------+------------+-------------------------+-------------------------+-------------+\n| Job Id(TaskId) | Command(Dest)       | Status     | Start Time              | Stop Time               | Error Code  |\n+----------------+---------------------+------------+-------------------------+-------------------------+-------------+\n| 31             | \"REBUILD_TAG_INDEX\" | \"FINISHED\" | 2021-07-07T09:04:24.000 | 2021-07-07T09:04:24.000 | \"SUCCEEDED\" |\n| 0              | \"storaged1\"         | \"FINISHED\" | 2021-07-07T09:04:24.000 | 2021-07-07T09:04:28.000 | \"SUCCEEDED\" |\n| 1              | \"storaged2\"         | \"FINISHED\" | 2021-07-07T09:04:24.000 | 2021-07-07T09:04:28.000 | \"SUCCEEDED\" |\n| 2              | \"storaged0\"         | \"FINISHED\" | 2021-07-07T09:04:24.000 | 2021-07-07T09:04:28.000 | \"SUCCEEDED\" |\n| \"Total:3\"      | \"Succeeded:3\"       | \"Failed:0\" | \"In Progress:0\"         | \"\"                      | \"\"          |\n+----------------+---------------------+------------+-------------------------+-------------------------+-------------+\n

              NebulaGraph creates a job to rebuild the index. The job ID is displayed in the preceding return message. To check if the rebuilding process is complete, use the SHOW JOB <job_id> statement. For more information, see SHOW JOB.

              "},{"location":"3.ngql-guide/14.native-index-statements/5.show-native-index-status/","title":"SHOW INDEX STATUS","text":"

              SHOW INDEX STATUS returns the name of the created tag or edge type index and its status of job.

              The status of rebuilding indexes includes:

              • QUEUE: The job is in a queue.
              • RUNNING: The job is running.
              • FINISHED: The job is finished.
              • FAILED: The job has failed.
              • STOPPED: The job has stopped.
              • INVALID: The job is invalid.

              Note

              For details on how to create an index, see CREATE INDEX.

              "},{"location":"3.ngql-guide/14.native-index-statements/5.show-native-index-status/#syntax","title":"Syntax","text":"
              SHOW {TAG | EDGE} INDEX STATUS;\n
              "},{"location":"3.ngql-guide/14.native-index-statements/5.show-native-index-status/#example","title":"Example","text":"
              nebula> SHOW TAG INDEX STATUS;\n+----------------------+--------------+\n| Name                 | Index Status |\n+----------------------+--------------+\n| \"player_index_0\"     | \"FINISHED\"   |\n| \"player_index_1\"     | \"FINISHED\"   |\n+----------------------+--------------+\n
              "},{"location":"3.ngql-guide/14.native-index-statements/6.drop-native-index/","title":"DROP INDEX","text":"

              DROP INDEX removes an existing index from the current graph space.

              "},{"location":"3.ngql-guide/14.native-index-statements/6.drop-native-index/#prerequisite","title":"Prerequisite","text":"

              Running the DROP INDEX statement requires some privileges of DROP TAG INDEX and DROP EDGE INDEX in the given graph space. Otherwise, NebulaGraph throws an error.

              "},{"location":"3.ngql-guide/14.native-index-statements/6.drop-native-index/#syntax","title":"Syntax","text":"
              DROP {TAG | EDGE} INDEX [IF EXISTS] <index_name>;\n

              IF EXISTS: Detects whether the index that you want to drop exists. If it exists, it will be dropped.

              "},{"location":"3.ngql-guide/14.native-index-statements/6.drop-native-index/#example","title":"Example","text":"
              nebula> DROP TAG INDEX player_index_0;\n
              "},{"location":"3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index/","title":"Full-text indexes","text":"

              Full-text indexes are used to do prefix, wildcard, regexp, and fuzzy search on a string property.

              You can use the WHERE clause to specify the search strings in LOOKUP statements.

              "},{"location":"3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index/#prerequisite","title":"Prerequisite","text":"

              Before using the full-text index, make sure that you have deployed a Elasticsearch cluster and a Listener cluster. For more information, see Deploy Elasticsearch and Deploy Listener.

              "},{"location":"3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index/#precaution","title":"Precaution","text":"

              Before using the full-text index, make sure that you know the restrictions.

              "},{"location":"3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index/#full_text_queries","title":"Full Text Queries","text":"

              Full-text queries enable you to search for parsed text fields, using a parser with strict syntax to return content based on the query string provided. For details, see Query string query.

              "},{"location":"3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index/#syntax","title":"Syntax","text":""},{"location":"3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index/#create_full-text_indexes","title":"Create full-text indexes","text":"
              CREATE FULLTEXT {TAG | EDGE} INDEX <index_name> ON {<tag_name> | <edge_name>} (<prop_name> [,<prop_name>]...) [ANALYZER=\"<analyzer_name>\"];\n
              • Composite indexes with multiple properties are supported when creating full-text indexes.
              • <analyzer_name> is the name of the analyzer. The default value is standard. To use other analyzers (e.g. IK Analysis), you need to make sure that the corresponding analyzer is installed in Elasticsearch in advance.
              "},{"location":"3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index/#show_full-text_indexes","title":"Show full-text indexes","text":"
              SHOW FULLTEXT INDEXES;\n
              "},{"location":"3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index/#rebuild_full-text_indexes","title":"Rebuild full-text indexes","text":"
              REBUILD FULLTEXT INDEX;\n

              Caution

              When there is a large amount of data, rebuilding full-text index is slow, you can modify snapshot_send_files=false in the configuration file of Storage service(nebula-storaged.conf).

              "},{"location":"3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index/#drop_full-text_indexes","title":"Drop full-text indexes","text":"
              DROP FULLTEXT INDEX <index_name>;\n
              "},{"location":"3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index/#use_query_options","title":"Use query options","text":"
              LOOKUP ON {<tag> | <edge_type>} WHERE ES_QUERY(<index_name>, \"<text>\") YIELD <return_list> [| LIMIT [<offset>,] <number_rows>];\n\n<return_list>\n    <prop_name> [AS <prop_alias>] [, <prop_name> [AS <prop_alias>] ...] [, id(vertex)  [AS <prop_alias>]] [, score() AS <score_alias>]\n
              • index_name: The name of the full-text index.
              • text: Search conditions. The where can only be followed by the ES_QUERY, and all judgment conditions must be written in the text. For supported syntax, see Query string syntax.
              • score(): The score calculated by doing N degree expansion for the eligible vertices. The default value is 1.0. The higher the score, the higher the degree of match. The return value is sorted by default from highest to lowest score. For details, see Search and Scoring in Lucene.
              "},{"location":"3.ngql-guide/15.full-text-index-statements/1.search-with-text-based-index/#examples","title":"Examples","text":"
              // This example creates the graph space.\nnebula> CREATE SPACE IF NOT EXISTS basketballplayer (partition_num=3,replica_factor=1, vid_type=fixed_string(30));\n\n// This example signs in the text service.\nnebula> SIGN IN TEXT SERVICE (192.168.8.100:9200, HTTP);\n\n// This example checks the text service status.\nnebula> SHOW TEXT SEARCH CLIENTS;\n+-----------------+-----------------+------+\n| Type            | Host            | Port |\n+-----------------+-----------------+------+\n| \"ELASTICSEARCH\" | \"192.168.8.100\" | 9200 |\n+-----------------+-----------------+------+\n\n// This example switches the graph space.\nnebula> USE basketballplayer;\n\n// This example adds the listener to the NebulaGraph cluster.\nnebula> ADD LISTENER ELASTICSEARCH 192.168.8.100:9789;\n\n// This example checks the listener status. When the status is `Online`, the listener is ready.\nnebula> SHOW LISTENER;\n+--------+-----------------+------------------------+-------------+\n| PartId | Type            | Host                   | Host Status |\n+--------+-----------------+------------------------+-------------+\n| 1      | \"ELASTICSEARCH\" | \"\"192.168.8.100\":9789\" | \"ONLINE\"    |\n| 2      | \"ELASTICSEARCH\" | \"\"192.168.8.100\":9789\" | \"ONLINE\"    |\n| 3      | \"ELASTICSEARCH\" | \"\"192.168.8.100\":9789\" | \"ONLINE\"    |\n+--------+-----------------+------------------------+-------------+\n\n// This example creates the tag.\nnebula> CREATE TAG IF NOT EXISTS player(name string, city string);\n\n// This example creates a single-attribute full-text index.\nnebula> CREATE FULLTEXT TAG INDEX fulltext_index_1 ON player(name) ANALYZER=\"standard\";\n\n// This example creates a multi-attribute full-text indexe.\nnebula> CREATE FULLTEXT TAG INDEX fulltext_index_2 ON player(name,city) ANALYZER=\"standard\";\n\n// This example rebuilds the full-text index.\nnebula> REBUILD FULLTEXT INDEX;\n\n// This example shows the full-text index.\nnebula> SHOW FULLTEXT INDEXES;\n+--------------------+-------------+-------------+--------------+------------+\n| Name               | Schema Type | Schema Name | Fields       | Analyzer   |\n+--------------------+-------------+-------------+--------------+------------+\n| \"fulltext_index_1\" | \"Tag\"       | \"player\"    | \"name\"       | \"standard\" |\n| \"fulltext_index_2\" | \"Tag\"       | \"player\"    | \"name, city\" | \"standard\" |\n+--------------------+-------------+-------------+--------------+------------+\n\n// This example inserts the test data.\nnebula> INSERT VERTEX player(name, city) VALUES \\\n    \"Russell Westbrook\": (\"Russell Westbrook\", \"Los Angeles\"), \\\n    \"Chris Paul\": (\"Chris Paul\", \"Houston\"),\\\n    \"Boris Diaw\": (\"Boris Diaw\", \"Houston\"),\\\n    \"David West\": (\"David West\", \"Philadelphia\"),\\\n    \"Danny Green\": (\"Danny Green\", \"Philadelphia\"),\\\n    \"Tim Duncan\": (\"Tim Duncan\", \"New York\"),\\\n    \"James Harden\": (\"James Harden\", \"New York\"),\\\n    \"Tony Parker\": (\"Tony Parker\", \"Chicago\"),\\\n    \"Aron Baynes\": (\"Aron Baynes\", \"Chicago\"),\\\n    \"Ben Simmons\": (\"Ben Simmons\", \"Phoenix\"),\\\n    \"Blake Griffin\": (\"Blake Griffin\", \"Phoenix\");\n\n// These examples run test queries.\nnebula> LOOKUP ON player WHERE ES_QUERY(fulltext_index_1,\"Chris\") YIELD id(vertex);\n+--------------+\n| id(VERTEX)   |\n+--------------+\n| \"Chris Paul\" |\n+--------------+\nnebula> LOOKUP ON player WHERE ES_QUERY(fulltext_index_1,\"Harden\") YIELD properties(vertex);\n+----------------------------------------------------------------+\n| properties(VERTEX)                                             |\n+----------------------------------------------------------------+\n| {_vid: \"James Harden\", city: \"New York\", name: \"James Harden\"} |\n+----------------------------------------------------------------+\n\nnebula> LOOKUP ON player WHERE ES_QUERY(fulltext_index_1,\"Da*\") YIELD properties(vertex);\n+------------------------------------------------------------------+\n| properties(VERTEX)                                               |\n+------------------------------------------------------------------+\n| {_vid: \"David West\", city: \"Philadelphia\", name: \"David West\"}   |\n| {_vid: \"Danny Green\", city: \"Philadelphia\", name: \"Danny Green\"} |\n+------------------------------------------------------------------+\n\nnebula> LOOKUP ON player WHERE ES_QUERY(fulltext_index_1,\"*b*\") YIELD id(vertex);\n+---------------------+\n| id(VERTEX)          |\n+---------------------+\n| \"Russell Westbrook\" |\n| \"Boris Diaw\"        |\n| \"Aron Baynes\"       |\n| \"Ben Simmons\"       |\n| \"Blake Griffin\"     |\n+---------------------+\n\nnebula> LOOKUP ON player WHERE ES_QUERY(fulltext_index_1,\"*b*\") YIELD id(vertex) | LIMIT 2,3;\n+-----------------+\n| id(VERTEX)      |\n+-----------------+\n| \"Aron Baynes\"   |\n| \"Ben Simmons\"   |\n| \"Blake Griffin\" |\n+-----------------+\n\nnebula> LOOKUP ON player WHERE ES_QUERY(fulltext_index_1,\"*b*\") YIELD id(vertex) | YIELD count(*);\n+----------+\n| count(*) |\n+----------+\n| 5        |\n+----------+\n\nnebula> LOOKUP ON player WHERE ES_QUERY(fulltext_index_1,\"*b*\") YIELD id(vertex), score() AS score;\n+---------------------+-------+\n| id(VERTEX)          | score |\n+---------------------+-------+\n| \"Russell Westbrook\" | 1.0   |\n| \"Boris Diaw\"        | 1.0   |\n| \"Aron Baynes\"       | 1.0   |\n| \"Ben Simmons\"       | 1.0   |\n| \"Blake Griffin\"     | 1.0   |\n+---------------------+-------+\n\n// For documents containing a word `b`, its score will be multiplied by a weighting factor of 4, while for documents containing a word `c`, the default weighting factor of 1 is used.\nnebula> LOOKUP ON player WHERE ES_QUERY(fulltext_index_1,\"*b*^4 OR *c*\") YIELD id(vertex), score() AS score;\n+---------------------+-------+\n| id(VERTEX)          | score |\n+---------------------+-------+\n| \"Russell Westbrook\" | 4.0   |\n| \"Boris Diaw\"        | 4.0   |\n| \"Aron Baynes\"       | 4.0   |\n| \"Ben Simmons\"       | 4.0   |\n| \"Blake Griffin\"     | 4.0   |\n| \"Chris Paul\"        | 1.0   |\n| \"Tim Duncan\"        | 1.0   |\n+---------------------+-------+\n\n// When using a multi-attribute full-text index query, the conditions are matched within all properties of the index.\nnebula> LOOKUP ON player WHERE ES_QUERY(fulltext_index_2,\"*h*\") YIELD properties(vertex);\n+------------------------------------------------------------------+\n| properties(VERTEX)                                               |\n+------------------------------------------------------------------+\n| {_vid: \"Chris Paul\", city: \"Houston\", name: \"Chris Paul\"}        |\n| {_vid: \"Boris Diaw\", city: \"Houston\", name: \"Boris Diaw\"}        |\n| {_vid: \"David West\", city: \"Philadelphia\", name: \"David West\"}   |\n| {_vid: \"James Harden\", city: \"New York\", name: \"James Harden\"}   |\n| {_vid: \"Tony Parker\", city: \"Chicago\", name: \"Tony Parker\"}      |\n| {_vid: \"Aron Baynes\", city: \"Chicago\", name: \"Aron Baynes\"}      |\n| {_vid: \"Ben Simmons\", city: \"Phoenix\", name: \"Ben Simmons\"}      |\n| {_vid: \"Blake Griffin\", city: \"Phoenix\", name: \"Blake Griffin\"}  |\n| {_vid: \"Danny Green\", city: \"Philadelphia\", name: \"Danny Green\"} |\n+------------------------------------------------------------------+\n\n// When using multi-attribute full-text index queries, you can specify different text for different properties for the query.\nnebula> LOOKUP ON player WHERE ES_QUERY(fulltext_index_2,\"name:*b* AND city:Houston\") YIELD properties(vertex);\n+-----------------------------------------------------------+\n| properties(VERTEX)                                        |\n+-----------------------------------------------------------+\n| {_vid: \"Boris Diaw\", city: \"Houston\", name: \"Boris Diaw\"} |\n+-----------------------------------------------------------+\n\n// Delete single-attribute full-text index.\nnebula> DROP FULLTEXT INDEX fulltext_index_1;\n
              "},{"location":"3.ngql-guide/17.query-tuning-statements/1.explain-and-profile/","title":"EXPLAIN and PROFILE","text":"

              EXPLAIN helps output the execution plan of an nGQL statement without executing the statement.

              PROFILE executes the statement, then outputs the execution plan as well as the execution profile. You can optimize the queries for better performance according to the execution plan and profile.

              "},{"location":"3.ngql-guide/17.query-tuning-statements/1.explain-and-profile/#execution_plan","title":"Execution Plan","text":"

              The execution plan is determined by the execution planner in the NebulaGraph query engine.

              The execution planner processes the parsed nGQL statements into actions. An action is the smallest unit that can be executed. A typical action fetches all neighbors of a given vertex, gets the properties of an edge, and filters vertices or edges based on the given conditions. Each action is assigned to an operator that performs the action.

              For example, a SHOW TAGS statement is processed into two actions and assigned to a Start operator and a ShowTags operator, while a more complex GO statement may be processed into more than 10 actions and assigned to 10 operators.

              "},{"location":"3.ngql-guide/17.query-tuning-statements/1.explain-and-profile/#syntax","title":"Syntax","text":"
              • EXPLAIN
                EXPLAIN [format= {\"row\" | \"dot\" | \"tck\"}] <your_nGQL_statement>;\n
              • PROFILE
                PROFILE [format= {\"row\" | \"dot\" | \"tck\"}] <your_nGQL_statement>;\n
              "},{"location":"3.ngql-guide/17.query-tuning-statements/1.explain-and-profile/#output_formats","title":"Output formats","text":"

              The output of an EXPLAIN or a PROFILE statement has three formats, the default row format, the dot format, and the tck format. You can use the format option to modify the output format. Omitting the format option indicates using the default row format.

              "},{"location":"3.ngql-guide/17.query-tuning-statements/1.explain-and-profile/#the_row_format","title":"The row format","text":"

              The row format outputs the return message in a table as follows.

              • EXPLAIN
                nebula> EXPLAIN format=\"row\" SHOW TAGS;\nExecution succeeded (time spent 327/892 us)\n\nExecution Plan\n\n-----+----------+--------------+----------------+----------------------------------------------------------------------\n| id | name     | dependencies | profiling data | operator info                                                       |\n-----+----------+--------------+----------------+----------------------------------------------------------------------\n|  1 | ShowTags | 0            |                | outputVar: [{\"colNames\":[],\"name\":\"__ShowTags_1\",\"type\":\"DATASET\"}] |\n|    |          |              |                | inputVar:                                                           |\n-----+----------+--------------+----------------+----------------------------------------------------------------------\n|  0 | Start    |              |                | outputVar: [{\"colNames\":[],\"name\":\"__Start_0\",\"type\":\"DATASET\"}]    |\n-----+----------+--------------+----------------+----------------------------------------------------------------------\n
              • PROFILE
                nebula> PROFILE format=\"row\" SHOW TAGS;\n+--------+\n| Name   |\n+--------+\n| player |\n+--------+\n| team   |\n+--------+\nGot 2 rows (time spent 2038/2728 us)\n\nExecution Plan\n\n-----+----------+--------------+----------------------------------------------------+----------------------------------------------------------------------\n| id | name     | dependencies | profiling data                                     | operator info                                                       |\n-----+----------+--------------+----------------------------------------------------+----------------------------------------------------------------------\n|  1 | ShowTags | 0            | ver: 0, rows: 1, execTime: 42us, totalTime: 1177us | outputVar: [{\"colNames\":[],\"name\":\"__ShowTags_1\",\"type\":\"DATASET\"}] |\n|    |          |              |                                                    | inputVar:                                                           |\n-----+----------+--------------+----------------------------------------------------+----------------------------------------------------------------------\n|  0 | Start    |              | ver: 0, rows: 0, execTime: 1us, totalTime: 57us    | outputVar: [{\"colNames\":[],\"name\":\"__Start_0\",\"type\":\"DATASET\"}]    |\n-----+----------+--------------+----------------------------------------------------+----------------------------------------------------------------------\n

              The descriptions are as follows.

              Parameter Description id The ID of the operator. name The name of the operator. dependencies The ID of the operator that the current operator depends on. profiling data The content of the execution profile. ver is the version of the operator. rows shows the number of rows to be output by the operator. execTime shows the execution time of action. totalTime is the sum of the execution time, the system scheduling time, and the queueing time. operator info The detailed information of the operator."},{"location":"3.ngql-guide/17.query-tuning-statements/1.explain-and-profile/#the_dot_format","title":"The dot format","text":"

              You can use the format=\"dot\" option to output the return message in the dot language, and then use Graphviz to generate a graph of the plan.

              Note

              Graphviz is open source graph visualization software. Graphviz provides an online tool for previewing DOT language files and exporting them to other formats such as SVG or JSON. For more information, see Graphviz Online.

              nebula> EXPLAIN format=\"dot\" SHOW TAGS;\nExecution succeeded (time spent 161/665 us)\nExecution Plan\n---------------------------------------------------------------------------------------------------------------------------------------------  -------------\n  plan\n---------------------------------------------------------------------------------------------------------------------------------------------  -------------\n  digraph exec_plan {\n      rankdir=LR;\n      \"ShowTags_0\"[label=\"ShowTags_0|outputVar: \\[\\{\\\"colNames\\\":\\[\\],\\\"name\\\":\\\"__ShowTags_0\\\",\\\"type\\\":\\\"DATASET\\\"\\}\\]\\l|inputVar:\\l\",   shape=Mrecord];\n      \"Start_2\"->\"ShowTags_0\";\n      \"Start_2\"[label=\"Start_2|outputVar: \\[\\{\\\"colNames\\\":\\[\\],\\\"name\\\":\\\"__Start_2\\\",\\\"type\\\":\\\"DATASET\\\"\\}\\]\\l|inputVar: \\l\",   shape=Mrecord];\n  }\n---------------------------------------------------------------------------------------------------------------------------------------------  -------------\n

              The Graphviz graph transformed from the above DOT statement is as follows.

              "},{"location":"3.ngql-guide/17.query-tuning-statements/1.explain-and-profile/#the_tck_format","title":"The tck format","text":"

              The tck format is similar to a table, but without borders and dividing lines between rows. You can use the results as test cases for unit testing. For information on tck format test cases, see TCK cases.

              • EXPLAIN
                nebula> EXPLAIN format=\"tck\" FETCH PROP ON player \"player_1\",\"player_2\",\"player_3\" YIELD properties(vertex).name as name, properties(vertex).age as age;\nExecution succeeded (time spent 261\u00b5s/613.718\u00b5s)\nExecution Plan (optimize time 28 us)\n| id | name        | dependencies | profiling data | operator info |\n|  2 | Project     | 1            |                |               |\n|  1 | GetVertices | 0            |                |               |\n|  0 | Start       |              |                |               |\n\nWed, 22 Mar 2023 23:15:52 CST\n
              • PROFILE
                nebula> PROFILE format=\"tck\" FETCH PROP ON player \"player_1\",\"player_2\",\"player_3\" YIELD properties(vertex).name as name, properties(vertex).age as age;\n| name         | age |\n| \"Piter Park\" | 24  |\n| \"aaa\"        | 24  |\n| \"ccc\"        | 24  |\nGot 3 rows (time spent 1.474ms/2.19677ms)\nExecution Plan (optimize time 41 us)\n| id | name        | dependencies | profiling data                                                                                                      | operator info |\n|  2 | Project     | 1            | {\"rows\":3,\"version\":0}                                                                                              |               |\n|  1 | GetVertices | 0            | {\"resp[0]\":{\"exec\":\"232(us)\",\"host\":\"127.0.0.1:9779\",\"total\":\"758(us)\"},\"rows\":3,\"total_rpc\":\"875(us)\",\"version\":0} |               |\n|  0 | Start       |              | {\"rows\":0,\"version\":0}                                                                                              |               |\nWed, 22 Mar 2023 23:16:13 CST\n
              "},{"location":"3.ngql-guide/17.query-tuning-statements/2.kill-session/","title":"Kill sessions","text":"

              The KILL SESSION command is to terminate running sessions.

              Note

              • Only the NebulaGraph root user can terminate sessions.
              • After executing the KILL SESSION command, all Graph services synchronize the latest session information after 2* session_reclaim_interval_secs seconds (120 seconds by default).
              "},{"location":"3.ngql-guide/17.query-tuning-statements/2.kill-session/#syntax","title":"Syntax","text":"

              You can run the KILL SESSION command to terminate one or multiple sessions. The syntax is as follows:

              • To terminate one session

                KILL {SESSION|SESSIONS} <SessionId>\n
                • {SESSION|SESSIONS}: SESSION or SESSIONS, both are supported.
                • <SessionId>: Specifies the ID of one session. You can run the SHOW SESSIONS command to view the IDs of sessions.
              • To terminate multiple sessions

                SHOW SESSIONS \n| YIELD $-.SessionId AS sid [WHERE <filter_clause>]\n| KILL {SESSION|SESSIONS} $-.sid\n

                Note

                The KILL SESSION command supports the pipeline operation, combining the SHOW SESSIONS command with the KILL SESSION command to terminate multiple sessions.

                • [WHERE <filter_clause>]\uff1a
                  • Optional, the WHERE clause is used to filter sessions. <filter_expression> specifies a session filtering expression, for example, WHERE $-.CreateTime < datetime(\"2022-12-14T18:00:00\"). If the WHERE clause is not specified, all sessions are terminated.
                  • Filtering conditions in a WHERE clause include: SessionId, UserName, SpaceName, CreateTime, UpdateTime, GraphAddr, Timezone, and ClientIp. You can run the SHOW SESSIONS command to view descriptions of these conditions.
                • {SESSION|SESSIONS}: SESSION or SESSIONS, both are supported.

                Caution

                Please use filtering conditions with caution to avoid deleting sessions by mistake.

              "},{"location":"3.ngql-guide/17.query-tuning-statements/2.kill-session/#examples","title":"Examples","text":"
              • To terminate one session

                nebula> KILL SESSION 1672887983842984 \n
              • To terminate multiple sessions

                • Terminate all sessions whose creation time is less than 2023-01-05T18:00:00.

                  nebula> SHOW SESSIONS | YIELD $-.SessionId AS sid WHERE $-.CreateTime < datetime(\"2023-01-05T18:00:00\") | KILL SESSIONS $-.sid\n
                • Terminates the two sessions with the earliest creation times.

                  nebula> SHOW SESSIONS | YIELD $-.SessionId AS sid, $-.CreateTime as CreateTime | ORDER BY $-.CreateTime ASC | LIMIT 2 | KILL SESSIONS $-.sid\n
                • Terminates all sessions created by the username session_user1.

                  nebula> SHOW SESSIONS | YIELD $-.SessionId as sid WHERE $-.UserName == \"session_user1\" | KILL SESSIONS $-.sid\n
                • Terminate all sessions.

                  nebula> SHOW SESSIONS | YIELD $-.SessionId as sid | KILL SESSION $-.sid\n\n// Or\nnebula> SHOW SESSIONS | KILL SESSIONS $-.SessionId\n

                  Caution

                  When you terminate all sessions, the current session is terminated. Please use it with caution.

              "},{"location":"3.ngql-guide/17.query-tuning-statements/6.kill-query/","title":"Kill queries","text":"

              KILL QUERY can terminate the query being executed, and is often used to terminate slow queries.

              Note

              Users with the God role can kill any query. Other roles can only kill their own queries.

              "},{"location":"3.ngql-guide/17.query-tuning-statements/6.kill-query/#syntax","title":"Syntax","text":"
              KILL QUERY (session=<session_id>, plan=<plan_id>);\n
              • session_id: The ID of the session.
              • plan_id: The ID of the execution plan.

              The ID of the session and the ID of the execution plan can uniquely determine a query. Both can be obtained through the SHOW QUERIES statement.

              "},{"location":"3.ngql-guide/17.query-tuning-statements/6.kill-query/#examples","title":"Examples","text":"

              This example executes KILL QUERY in one session to terminate the query in another session.

              nebula> KILL QUERY(SESSION=1625553545984255,PLAN=163);\n

              The query will be terminated and the following information will be returned.

              [ERROR (-1005)]: ExecutionPlanId[1001] does not exist in current Session.\n
              "},{"location":"3.ngql-guide/3.data-types/1.numeric/","title":"Numeric types","text":"

              nGQL supports both integer and floating-point number.

              "},{"location":"3.ngql-guide/3.data-types/1.numeric/#integer","title":"Integer","text":"

              Signed 64-bit integer (INT64), 32-bit integer (INT32), 16-bit integer (INT16), and 8-bit integer (INT8) are supported.

              Type Declared keywords Range INT64 INT64 orINT -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 INT32 INT32 -2,147,483,648 ~ 2,147,483,647 INT16 INT16 -32,768 ~ 32,767 INT8 INT8 -128 ~ 127"},{"location":"3.ngql-guide/3.data-types/1.numeric/#floating-point_number","title":"Floating-point number","text":"

              Both single-precision floating-point format (FLOAT) and double-precision floating-point format (DOUBLE) are supported.

              Type Declared keywords Range Precision FLOAT FLOAT 3.4E +/- 38 6~7 bits DOUBLE DOUBLE 1.7E +/- 308 15~16 bits

              Scientific notation is also supported, such as 1e2, 1.1e2, .3e4, 1.e4, and -1234E-10.

              Note

              The data type of DECIMAL in MySQL is not supported.

              "},{"location":"3.ngql-guide/3.data-types/1.numeric/#reading_and_writing_of_data_values","title":"Reading and writing of data values","text":"

              When writing and reading different types of data, nGQL complies with the following rules:

              Data type Set as VID Set as property Resulted data type INT64 Supported Supported INT64 INT32 Not supported Supported INT64 INT16 Not supported Supported INT64 INT8 Not supported Supported INT64 FLOAT Not supported Supported DOUBLE DOUBLE Not supported Supported DOUBLE

              For example, nGQL does not support setting VID as INT8, but supports setting a certain property type of TAG or Edge type as INT8. When using the nGQL statement to read the property of INT8, the resulted type is INT64.

              • Multiple formats are supported:

                • Decimal, such as 123456.
                • Hexadecimal, such as 0x1e240.
                • Octal, such as 0361100.

                However, NebulaGraph will parse the written non-decimal value into a decimal value and save it. The value read is decimal.

                For example, the type of the property score is INT. The value of 0xb is assigned to it through the INSERT statement. If querying the property value with statements such as FETCH, you will get the result 11, which is the decimal result of the hexadecimal 0xb.

              • Round a FLOAT/DOUBLE value when inserting it to an INT column.
              "},{"location":"3.ngql-guide/3.data-types/10.geography/","title":"Geography","text":"

              Geography is a data type composed of latitude and longitude that represents geospatial information. NebulaGraph currently supports Point, LineString, and Polygon in Simple Features and some functions in SQL-MM 3, such as part of the core geo parsing, construction, formatting, conversion, predicates, and dimensions.

              "},{"location":"3.ngql-guide/3.data-types/10.geography/#type_description","title":"Type description","text":"

              A point is the basic data type of geography, which is determined by a latitude and a longitude. For example, \"POINT(3 8)\" means that the longitude is 3\u00b0 and the latitude is 8\u00b0. Multiple points can form a linestring or a polygon.

              Note

              You cannot directly insert geographic data of the following types, such as INSERT VERTEX any_shape(geo) VALUES \"1\":(\"POINT(1 1)\"). Instead, you need to use a geography function to specify the data type before inserting, such as INSERT VERTEX any_shape(geo) VALUES \"1\":(ST_GeogFromText(\"POINT(1 1)\"));.

              Shape Example Description Point \"POINT(3 8)\" Specifies the data type as a point. LineString \"LINESTRING(3 8, 4.7 73.23)\" Specifies the data type as a linestring. Polygon \"POLYGON((0 1, 1 2, 2 3, 0 1))\" Specifies the data type as a polygon."},{"location":"3.ngql-guide/3.data-types/10.geography/#examples","title":"Examples","text":"
              //Create a Tag to allow storing any geography data type.\nnebula> CREATE TAG IF NOT EXISTS any_shape(geo geography);\n\n//Create a Tag to allow storing a point only.\nnebula> CREATE TAG IF NOT EXISTS only_point(geo geography(point));\n\n//Create a Tag to allow storing a linestring only.\nnebula> CREATE TAG IF NOT EXISTS only_linestring(geo geography(linestring));\n\n//Create a Tag to allow storing a polygon only.\nnebula> CREATE TAG IF NOT EXISTS only_polygon(geo geography(polygon));\n\n//Create an Edge type to allow storing any geography data type.\nnebula> CREATE EDGE IF NOT EXISTS any_shape_edge(geo geography);\n\n//Create a vertex to store the geography of a polygon.\nnebula> INSERT VERTEX any_shape(geo) VALUES \"103\":(ST_GeogFromText(\"POLYGON((0 1, 1 2, 2 3, 0 1))\"));\n\n//Create an edge to store the geography of a polygon.\nnebula> INSERT EDGE any_shape_edge(geo) VALUES \"201\"->\"302\":(ST_GeogFromText(\"POLYGON((0 1, 1 2, 2 3, 0 1))\"));\n\n//Query the geography of Vertex 103.\nnebula> FETCH PROP ON any_shape \"103\" YIELD ST_ASText(any_shape.geo);\n+---------------------------------+\n| ST_ASText(any_shape.geo)        |\n+---------------------------------+\n| \"POLYGON((0 1, 1 2, 2 3, 0 1))\" |\n+---------------------------------+\n\n//Query the geography of the edge which traverses from Vertex 201 to Vertex 302.\nnebula> FETCH PROP ON any_shape_edge \"201\"->\"302\" YIELD ST_ASText(any_shape_edge.geo);\n+---------------------------------+\n| ST_ASText(any_shape_edge.geo)   |\n+---------------------------------+\n| \"POLYGON((0 1, 1 2, 2 3, 0 1))\" |\n+---------------------------------+\n\n//Create an index for the geography of the Tag any_shape and run LOOKUP.\nnebula> CREATE TAG INDEX IF NOT EXISTS any_shape_geo_index ON any_shape(geo);\nnebula> REBUILD TAG INDEX any_shape_geo_index;\nnebula> LOOKUP ON any_shape YIELD ST_ASText(any_shape.geo);\n+---------------------------------+\n| ST_ASText(any_shape.geo)        |\n+---------------------------------+\n| \"POLYGON((0 1, 1 2, 2 3, 0 1))\" |\n+---------------------------------+\n

              When creating an index for geography properties, you can specify the parameters for the index.

              Parameter Default value Description s2_max_level 30 The maximum level of S2 cell used in the covering. Allowed values: 1~30. Setting it to less than the default means that NebulaGraph will be forced to generate coverings using larger cells. s2_max_cells 8 The maximum number of S2 cells used in the covering. Provides a limit on how much work is done exploring the possible coverings. Allowed values: 1~30. You may want to use higher values for odd-shaped regions such as skinny rectangles.

              Note

              Specifying the above two parameters does not affect the Point type of property. The s2_max_level value of the Point type is forced to be 30.

              nebula> CREATE TAG INDEX IF NOT EXISTS any_shape_geo_index ON any_shape(geo) with (s2_max_level=30, s2_max_cells=8);\n

              For more index information, see Index overview.

              "},{"location":"3.ngql-guide/3.data-types/2.boolean/","title":"Boolean","text":"

              A boolean data type is declared with the bool keyword and can only take the values true or false.

              nGQL supports using boolean in the following ways:

              • Define the data type of the property value as a boolean.
              • Use boolean as judgment conditions in the WHERE clause.
              "},{"location":"3.ngql-guide/3.data-types/3.string/","title":"String","text":"

              Fixed-length strings and variable-length strings are supported.

              "},{"location":"3.ngql-guide/3.data-types/3.string/#declaration_and_literal_representation","title":"Declaration and literal representation","text":"

              The string type is declared with the keywords of:

              • STRING: Variable-length strings.
              • FIXED_STRING(<length>): Fixed-length strings. <length> is the length of the string, such as FIXED_STRING(32).

              A string type is used to store a sequence of characters (text). The literal constant is a sequence of characters of any length surrounded by double or single quotes. For example, \"Hello, Cooper\" or 'Hello, Cooper'.

              "},{"location":"3.ngql-guide/3.data-types/3.string/#string_reading_and_writing","title":"String reading and writing","text":"

              Nebula\u00a0Graph supports using string types in the following ways:

              • Define the data type of VID as a fixed-length string.
              • Set the variable-length string as the Schema name, including the names of the graph space, tag, edge type, and property.
              • Define the data type of the property as a fixed-length or variable-length string.

              For example:

              • Define the data type of the property as a fixed-length string
                nebula> CREATE TAG IF NOT EXISTS t1 (p1 FIXED_STRING(10)); \n
              • Define the data type of the property as a variable-length string
                nebula> CREATE TAG IF NOT EXISTS t2 (p2 STRING); \n

              When the fixed-length string you try to write exceeds the length limit:

              • If the fixed-length string is a property, the writing will succeed, and NebulaGraph will truncate the string and only store the part that meets the length limit.
              • If the fixed-length string is a VID, the writing will fail and NebulaGraph will return an error.
              "},{"location":"3.ngql-guide/3.data-types/3.string/#escape_characters","title":"Escape Characters","text":"

              In strings, the backslash (\\) serves as an escape character used to denote special characters.

              For example, to include a double quote (\") within a string, you cannot directly write \"Hello \"world\"\" as it leads to a syntax error. Instead, use the backslash (\\) to escape the double quote, such as \"Hello \\\"world\\\"\".

              nebula> RETURN \"Hello \\\"world\\\"\"\n+-----------------+\n| \"Hello \"world\"\" |\n+-----------------+\n| \"Hello \"world\"\" |\n+-----------------+\n

              The backslash itself needs to be escaped as it's a special character. For example, to include a backslash in a string, you need to write \"Hello \\\\ world\".

              nebula> RETURN \"Hello \\\\ world\"\n+-----------------+\n| \"Hello \\ world\" |\n+-----------------+\n| \"Hello \\ world\" |\n+-----------------+\n

              For more examples of escape characters, see Escape character examples.

              "},{"location":"3.ngql-guide/3.data-types/3.string/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

              There are some tiny differences between openCypher and Cypher, as well as nGQL. The following is what openCypher requires. Single quotes cannot be converted to double quotes.

              # File: Literals.feature\nFeature: Literals\n\nBackground:\n    Given any graph\n Scenario: Return a single-quoted string\n    When executing query:\n      \"\"\"\n      RETURN '' AS literal\n      \"\"\"\n    Then the result should be, in any order:\n      | literal |\n      | ''      |    # Note: it should return single-quotes as openCypher required.\n    And no side effects\n

              While Cypher accepts both single quotes and double quotes as the return results. nGQL follows the Cypher way.

              nebula > YIELD '' AS quote1, \"\" AS quote2, \"'\" AS quote3, '\"' AS quote4\n+--------+--------+--------+--------+\n| quote1 | quote2 | quote3 | quote4 |\n+--------+--------+--------+--------+\n| \"\"     | \"\"     | \"'\"    | \"\"\"    |\n+--------+--------+--------+--------+\n
              "},{"location":"3.ngql-guide/3.data-types/4.date-and-time/","title":"Date and time types","text":"

              This topic will describe the DATE, TIME, DATETIME, TIMESTAMP, and DURATION types.

              "},{"location":"3.ngql-guide/3.data-types/4.date-and-time/#precautions","title":"Precautions","text":"
              • While inserting time-type property values with DATE, TIME, and DATETIME, NebulaGraph transforms them to a UTC time according to the timezone specified with the timezone_name parameter in the configuration files.

                Note

                To change the timezone, modify the timezone_name value in the configuration files of all NebulaGraph services.

              • date(), time(), and datetime() can convert a time-type property with a specified timezone. For example, datetime(\"2017-03-04 22:30:40.003000+08:00\") or datetime(\"2017-03-04T22:30:40.003000[Asia/Shanghai]\").
              • date(), time(), datetime(), and timestamp() all accept empty parameters to return the current date, time, and datetime.
              • date(), time(), and datetime() all accept the property name to return a specific property value of itself. For example, date().month returns the current month, while time(\"02:59:40\").minute returns the minutes of the importing time.
              • For time operations it is recommended to use duration() to calculate the offset of the moment. Addition and subtraction of date() and date(), timestamp() and timestamp() are also supported.
              • When setting the year of the time as a negative number, you need to use Map type data.
              "},{"location":"3.ngql-guide/3.data-types/4.date-and-time/#opencypher_compatibility","title":"OpenCypher Compatibility","text":"

              In nGQL:

              • Year, month, day, hour, minute, second, millisecond, and microsecond are supported, while the nanosecond is not supported.
              • localdatetime() is not supported.
              • Most string time formats are not supported. The exceptions are YYYY-MM-DDThh:mm:ss and YYYY-MM-DD hh:mm:ss.
              • The single-digit string time format is supported. For example, time(\"1:1:1\").
              "},{"location":"3.ngql-guide/3.data-types/4.date-and-time/#date","title":"DATE","text":"

              The DATE type is used for values with a date part but no time part. Nebula\u00a0Graph retrieves and displays DATE values in the YYYY-MM-DD format. The supported range is -32768-01-01 to 32767-12-31.

              The properties of date() include year, month, and day. date() supports the input of YYYYY, YYYYY-MM or YYYYY-MM-DD, and defaults to 01 for an untyped month or day.

              nebula> RETURN DATE({year:-123, month:12, day:3});\n+------------------------------------+\n| date({year:-(123),month:12,day:3}) |\n+------------------------------------+\n| -123-12-03                         |\n+------------------------------------+\n\nnebula> RETURN DATE(\"23333\");\n+---------------+\n| date(\"23333\") |\n+---------------+\n| 23333-01-01   |\n+---------------+\n\nnebula> RETURN DATE(\"2023-12-12\") - DATE(\"2023-12-11\");\n+-----------------------------------------+\n| (date(\"2023-12-12\")-date(\"2023-12-11\")) |\n+-----------------------------------------+\n| 1                                       |\n+-----------------------------------------+\n
              "},{"location":"3.ngql-guide/3.data-types/4.date-and-time/#time","title":"TIME","text":"

              The TIME type is used for values with a time part but no date part. Nebula\u00a0Graph retrieves and displays TIME values in hh:mm:ss.msmsmsususus format. The supported range is 00:00:00.000000 to 23:59:59.999999.

              The properties of time() include hour, minute, and second.

              "},{"location":"3.ngql-guide/3.data-types/4.date-and-time/#datetime","title":"DATETIME","text":"

              The DATETIME type is used for values that contain both date and time parts. Nebula\u00a0Graph retrieves and displays DATETIME values in YYYY-MM-DDThh:mm:ss.msmsmsususus format. The supported range is -32768-01-01T00:00:00.000000 to 32767-12-31T23:59:59.999999.

              • The properties of datetime() include year, month, day, hour, minute, and second.
              • datetime() can convert TIMESTAMP to DATETIME. The value range of TIMESTAMP is 0~9223372036.
              • datetime() supports an int argument. The int argument specifies a timestamp.
              # To get the current date and time.\nnebula> RETURN datetime();\n+----------------------------+\n| datetime()                 |\n+----------------------------+\n| 2022-08-29T06:37:08.933000 |\n+----------------------------+\n\n# To get the current hour.\nnebula> RETURN datetime().hour;\n+-----------------+\n| datetime().hour |\n+-----------------+\n| 6               |\n+-----------------+\n\n# To get date time from a given timestamp.\nnebula> RETURN datetime(timestamp(1625469277));\n+---------------------------------+\n| datetime(timestamp(1625469277)) |\n+---------------------------------+\n| 2021-07-05T07:14:37.000000      |\n+---------------------------------+\n\nnebula> RETURN datetime(1625469277);\n+----------------------------+\n| datetime(1625469277)       |\n+----------------------------+\n| 2021-07-05T07:14:37.000000 |\n+----------------------------+\n
              "},{"location":"3.ngql-guide/3.data-types/4.date-and-time/#timestamp","title":"TIMESTAMP","text":"

              The TIMESTAMP data type is used for values that contain both date and time parts. It has a range of 1970-01-01T00:00:01 UTC to 2262-04-11T23:47:16 UTC.

              TIMESTAMP has the following features:

              • Stored and displayed in the form of a timestamp, such as 1615974839, which means 2021-03-17T17:53:59.
              • Supported TIMESTAMP querying methods: timestamp and timestamp() function.
              • Supported TIMESTAMP inserting methods: timestamp, timestamp() function, and now() function.
              • timestamp() function accepts empty arguments to get the current timestamp. It can pass an integer arguments to identify the integer as a timestamp and the range of passed integer is: 0~9223372036\u3002
              • timestamp() function can convert DATETIME to TIMESTAMP, and the data type of DATETIME should be a string.
              • The underlying storage data type is int64.
              # To get the current timestamp.\nnebula> RETURN timestamp();\n+-------------+\n| timestamp() |\n+-------------+\n| 1625469277  |\n+-------------+\n\n# To get a timestamp from given date and time.\nnebula> RETURN timestamp(\"2022-01-05T06:18:43\");\n+----------------------------------+\n| timestamp(\"2022-01-05T06:18:43\") |\n+----------------------------------+\n| 1641363523                       |\n+----------------------------------+\n\n# To get a timestamp using datetime().\nnebula> RETURN timestamp(datetime(\"2022-08-29T07:53:10.939000\"));\n+---------------------------------------------------+\n| timestamp(datetime(\"2022-08-29T07:53:10.939000\")) |\n+---------------------------------------------------+\n| 1661759590                                        |\n+---------------------------------------------------+    \n

              Note

              The date and time format string passed into timestamp() cannot include any millisecond and microsecond, but the date and time format string passed into timestamp(datetime()) can include a millisecond and a microsecond.

              "},{"location":"3.ngql-guide/3.data-types/4.date-and-time/#duration","title":"DURATION","text":"

              The DURATION data type is used to indicate a period of time. Map data that are freely combined by years, months, days, hours, minutes, and seconds indicates the DURATION.

              DURATION has the following features:

              • Creating indexes for DURATION is not supported.
              • DURATION can be used to calculate the specified time.
              "},{"location":"3.ngql-guide/3.data-types/4.date-and-time/#examples","title":"Examples","text":"
              1. Create a tag named date1 with three properties: DATE, TIME, and DATETIME.

                nebula> CREATE TAG IF NOT EXISTS date1(p1 date, p2 time, p3 datetime);\n
              2. Insert a vertex named test1.

                nebula> INSERT VERTEX date1(p1, p2, p3) VALUES \"test1\":(date(\"2021-03-17\"), time(\"17:53:59\"), datetime(\"2017-03-04T22:30:40.003000[Asia/Shanghai]\"));\n
              3. Query whether the value of property p1 on the test1 tag is 2021-03-17.

                nebula> MATCH (v:date1)  RETURN v.date1.p1 == date(\"2021-03-17\");\n+----------------------------------+\n| (v.date1.p1==date(\"2021-03-17\")) |\n+----------------------------------+\n| true                             |\n+----------------------------------+\n
              4. Return the content of the property p1 on test1.

                nebula> CREATE TAG INDEX IF NOT EXISTS date1_index ON date1(p1);\nnebula> REBUILD TAG INDEX date1_index;\nnebula> MATCH (v:date1) RETURN v.date1.p1;\n+------------------+\n| v.date1.p1.month |\n+------------------+\n| 3                |\n+------------------+\n
              5. Search for vertices with p3 property values less than 2023-01-01T00:00:00.000000, and return the p3 values.

                nebula> MATCH (v:date1)  \\\nWHERE v.date1.p3 < datetime(\"2023-01-01T00:00:00.000000\") \\\nRETURN v.date1.p3;\n+----------------------------+\n| v.date1.p3                 |\n+----------------------------+\n| 2017-03-04T14:30:40.003000 |\n+----------------------------+\n
              6. Create a tag named school with the property of TIMESTAMP.

                nebula> CREATE TAG IF NOT EXISTS school(name string , found_time timestamp);\n
              7. Insert a vertex named DUT with a found-time timestamp of \"1988-03-01T08:00:00\".

                # Insert as a timestamp. The corresponding timestamp of 1988-03-01T08:00:00 is 573177600, or 573206400 UTC.\nnebula> INSERT VERTEX school(name, found_time) VALUES \"DUT\":(\"DUT\", 573206400);\n\n# Insert in the form of date and time.\nnebula> INSERT VERTEX school(name, found_time) VALUES \"DUT\":(\"DUT\", timestamp(\"1988-03-01T08:00:00\"));\n
              8. Insert a vertex named dut and store time with now() or timestamp() functions.

                # Use now() function to store time\nnebula> INSERT VERTEX school(name, found_time) VALUES \"dut\":(\"dut\", now());\n\n# Use timestamp() function to store time\nnebula> INSERT VERTEX school(name, found_time) VALUES \"dut\":(\"dut\", timestamp());\n

              You can also use WITH statement to set a specific date and time, or to perform calculations. For example:

              nebula> WITH time({hour: 12, minute: 31, second: 14, millisecond:111, microsecond: 222}) AS d RETURN d;\n+-----------------+\n| d               |\n+-----------------+\n| 12:31:14.111222 |\n+-----------------+\n\nnebula> WITH date({year: 1984, month: 10, day: 11}) AS x RETURN x + 1;\n+------------+\n| (x+1)      |\n+------------+\n| 1984-10-12 |\n+------------+\n\nnebula> WITH date('1984-10-11') as x, duration({years: 12, days: 14, hours: 99, minutes: 12}) as d \\\n        RETURN x + d AS sum, x - d AS diff;\n+------------+------------+\n| sum        | diff       |\n+------------+------------+\n| 1996-10-29 | 1972-09-23 |\n+------------+------------+\n
              "},{"location":"3.ngql-guide/3.data-types/5.null/","title":"NULL","text":"

              You can set the properties for vertices or edges to NULL. Also, you can set the NOT NULL constraint to make sure that the property values are NOT NULL. If not specified, the property is set to NULL by default.

              "},{"location":"3.ngql-guide/3.data-types/5.null/#logical_operations_with_null","title":"Logical operations with NULL","text":"

              Here is the truth table for AND, OR, XOR, and NOT.

              a b a AND b a OR b a XOR b NOT a false false false false false true false null false null null true false true false true true true true false false true true false true null null true null false true true true true false false null false false null null null null null null null null null null true null true null null"},{"location":"3.ngql-guide/3.data-types/5.null/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

              The comparisons and operations about NULL are different from openCypher. There may be changes later.

              "},{"location":"3.ngql-guide/3.data-types/5.null/#comparisons_with_null","title":"Comparisons with NULL","text":"

              The comparison operations with NULL are incompatible with openCypher.

              "},{"location":"3.ngql-guide/3.data-types/5.null/#operations_and_return_with_null","title":"Operations and RETURN with NULL","text":"

              The NULL operations and RETURN with NULL are incompatible with openCypher.

              "},{"location":"3.ngql-guide/3.data-types/5.null/#examples","title":"Examples","text":""},{"location":"3.ngql-guide/3.data-types/5.null/#use_not_null","title":"Use NOT NULL","text":"

              Create a tag named player. Specify the property name as NOT NULL.

              nebula> CREATE TAG IF NOT EXISTS player(name string NOT NULL, age int);\n

              Use SHOW to create tag statements. The property name is NOT NULL. The property age is NULL by default.

              nebula> SHOW CREATE TAG player;\n+-----------+-----------------------------------+\n| Tag       | Create Tag                        |\n+-----------+-----------------------------------+\n| \"student\" | \"CREATE TAG `player` (            |\n|           |  `name` string NOT NULL,          |\n|           |  `age` int64 NULL                 |\n|           | ) ttl_duration = 0, ttl_col = \"\"\" |\n+-----------+-----------------------------------+\n

              Insert the vertex Kobe. The property age can be NULL.

              nebula> INSERT VERTEX player(name, age) VALUES \"Kobe\":(\"Kobe\",null);\n
              "},{"location":"3.ngql-guide/3.data-types/5.null/#use_not_null_and_set_the_default","title":"Use NOT NULL and set the default","text":"

              Create a tag named player. Specify the property age as NOT NULL. The default value is 18.

              nebula> CREATE TAG IF NOT EXISTS player(name string, age int NOT NULL DEFAULT 18);\n

              Insert the vertex Kobe. Specify the property name only.

              nebula> INSERT VERTEX player(name) VALUES \"Kobe\":(\"Kobe\");\n

              Query the vertex Kobe. The property age is 18 by default.

              nebula> FETCH PROP ON player \"Kobe\" YIELD properties(vertex);\n+--------------------------+\n| properties(VERTEX)       |\n+--------------------------+\n| {age: 18, name: \"Kobe\"}  |\n+--------------------------+\n
              "},{"location":"3.ngql-guide/3.data-types/6.list/","title":"Lists","text":"

              The list is a composite data type. A list is a sequence of values. Individual elements in a list can be accessed by their positions.

              A list starts with a left square bracket [ and ends with a right square bracket ]. A list contains zero, one, or more expressions. List elements are separated from each other with commas (,). Whitespace around elements is ignored in the list, thus line breaks, tab stops, and blanks can be used for formatting.

              "},{"location":"3.ngql-guide/3.data-types/6.list/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

              A composite data type (i.e. set, map, and list) CANNOT be stored as properties of vertices or edges.

              "},{"location":"3.ngql-guide/3.data-types/6.list/#list_operations","title":"List operations","text":"

              You can use the preset list function to operate the list, or use the index to filter the elements in the list.

              "},{"location":"3.ngql-guide/3.data-types/6.list/#index_syntax","title":"Index syntax","text":"
              [M]\n[M..N]\n[M..]\n[..N]\n

              The index of nGQL supports queries from front to back, starting from 0. 0 means the first element, 1 means the second element, and so on. It also supports queries from back to front, starting from -1. -1 means the last element, -2 means the penultimate element, and so on.

              • [M]: represents the element whose index is M.
              • [M..N]: represents the elements whose indexes are greater or equal to M but smaller than N. Return empty when N is 0.
              • [M..]: represents the elements whose indexes are greater or equal to M.
              • [..N]: represents the elements whose indexes are smaller than N. Return empty when N is 0.

              Note

              • Return empty if the index is out of bounds, while return normally if the index is within the bound.
              • Return empty if M\u2265N.
              • When querying a single element, if M is null, return BAD_TYPE. When conducting a range query, if M or N is null, return null.
              "},{"location":"3.ngql-guide/3.data-types/6.list/#examples","title":"Examples","text":"
              # The following query returns the list [1,2,3].\nnebula> RETURN list[1, 2, 3] AS a;\n+-----------+\n| a         |\n+-----------+\n| [1, 2, 3] |\n+-----------+\n\n# The following query returns the element whose index is 3 in the list [1,2,3,4,5]. In a list, the index starts from 0, and thus the return element is 4.\nnebula> RETURN range(1,5)[3];\n+---------------+\n| range(1,5)[3] |\n+---------------+\n| 4             |\n+---------------+\n\n# The following query returns the element whose index is -2 in the list [1,2,3,4,5]. The index of the last element in a list is -1, and thus the return element is 4.\nnebula> RETURN range(1,5)[-2];\n+------------------+\n| range(1,5)[-(2)] |\n+------------------+\n| 4                |\n+------------------+\n\n# The following query returns the elements whose indexes are from 0 to 3 (not including 3) in the list [1,2,3,4,5].\nnebula> RETURN range(1,5)[0..3];\n+------------------+\n| range(1,5)[0..3] |\n+------------------+\n| [1, 2, 3]        |\n+------------------+\n\n# The following query returns the elements whose indexes are greater than 2 in the list [1,2,3,4,5].\nnebula> RETURN range(1,5)[3..] AS a;\n+--------+\n| a      |\n+--------+\n| [4, 5] |\n+--------+\n\n# The following query returns the elements whose indexes are smaller than 3.\nnebula> WITH list[1, 2, 3, 4, 5] AS a \\\n        RETURN a[..3] AS r;\n+-----------+\n| r         |\n+-----------+\n| [1, 2, 3] |\n+-----------+\n\n# The following query filters the elements whose indexes are greater than 2 in the list [1,2,3,4,5], calculate them respectively, and returns them.\nnebula> RETURN [n IN range(1,5) WHERE n > 2 | n + 10] AS a;\n+--------------+\n| a            |\n+--------------+\n| [13, 14, 15] |\n+--------------+\n\n# The following query returns the elements from the first to the penultimate (inclusive) in the list [1, 2, 3].\nnebula> YIELD list[1, 2, 3][0..-1] AS a;\n+--------+\n| a      |\n+--------+\n| [1, 2] |\n+--------+\n\n# The following query returns the elements from the first (exclusive) to the third backward in the list [1, 2, 3, 4, 5].\nnebula> YIELD list[1, 2, 3, 4, 5][-3..-1] AS a;\n+--------+\n| a      |\n+--------+\n| [3, 4] |\n+--------+\n\n# The following query sets the variables and returns the elements whose indexes are 1 and 2.\nnebula> $var = YIELD 1 AS f, 3 AS t; \\\n        YIELD list[1, 2, 3][$var.f..$var.t] AS a;\n+--------+\n| a      |\n+--------+\n| [2, 3] |\n+--------+\n\n# The following query returns empty because the index is out of bound. It will return normally when the index is within the bound.\nnebula> RETURN list[1, 2, 3, 4, 5] [0..10] AS a;\n+-----------------+\n| a               |\n+-----------------+\n| [1, 2, 3, 4, 5] |\n+-----------------+\n\nnebula> RETURN list[1, 2, 3] [-5..5] AS a;\n+-----------+\n| a         |\n+-----------+\n| [1, 2, 3] |\n+-----------+\n\n# The following query returns empty because there is a [0..0].\nnebula> RETURN list[1, 2, 3, 4, 5] [0..0] AS a;\n+----+\n| a  |\n+----+\n| [] |\n+----+\n\n# The following query returns empty because of M \u2265 N.\nnebula> RETURN list[1, 2, 3, 4, 5] [3..1] AS a;\n+----+\n| a  |\n+----+\n| [] |\n+----+\n\n# When conduct a range query, if `M` or `N` is null, return `null`.\nnebula> WITH list[1,2,3] AS a \\\n        RETURN a[0..null] as r;\n+----------+\n| r        |\n+----------+\n| __NULL__ |\n+----------+\n\n# The following query calculates the elements in the list [1,2,3,4,5] respectively and returns them without the list head.\nnebula> RETURN tail([n IN range(1, 5) | 2 * n - 10]) AS a;\n+-----------------+\n| a               |\n+-----------------+\n| [-6, -4, -2, 0] |\n+-----------------+\n\n# The following query takes the elements in the list [1,2,3] as true and return.\nnebula> RETURN [n IN range(1, 3) WHERE true | n] AS r;\n+-----------+\n| r         |\n+-----------+\n| [1, 2, 3] |\n+-----------+\n\n# The following query returns the length of the list [1,2,3].\nnebula> RETURN size(list[1,2,3]);\n+-------------------+\n| size(list[1,2,3]) |\n+-------------------+\n| 3                 |\n+-------------------+\n\n# The following query calculates the elements in the list [92,90] and runs a conditional judgment in a where clause.\nnebula> GO FROM \"player100\" OVER follow WHERE properties(edge).degree NOT IN [x IN [92, 90] | x + $$.player.age] \\\n        YIELD dst(edge) AS id, properties(edge).degree AS degree;\n+-------------+--------+\n| id          | degree |\n+-------------+--------+\n| \"player101\" | 95     |\n| \"player102\" | 90     |\n+-------------+--------+\n\n# The following query takes the query result of the MATCH statement as the elements in a list. Then it calculates and returns them.\nnebula> MATCH p = (n:player{name:\"Tim Duncan\"})-[:follow]->(m) \\\n        RETURN [n IN nodes(p) | n.player.age + 100] AS r;\n+------------+\n| r          |\n+------------+\n| [142, 136] |\n| [142, 141] |\n+------------+\n
              "},{"location":"3.ngql-guide/3.data-types/6.list/#opencypher_compatibility_1","title":"OpenCypher compatibility","text":"
              • In openCypher, return null when querying a single out-of-bound element. However, in nGQL, return OUT_OF_RANGE when querying a single out-of-bound element.
                nebula> RETURN range(0,5)[-12];\n+-------------------+\n| range(0,5)[-(12)] |\n+-------------------+\n| OUT_OF_RANGE      |\n+-------------------+\n
              • A composite data type (i.e., set, map, and list) CAN NOT be stored as properties for vertices or edges.

                It is recommended to modify the graph modeling method. The composite data type should be modeled as an adjacent edge of a vertex, rather than its property. Each adjacent edge can be dynamically added or deleted. The rank values of the adjacent edges can be used for sequencing.

              • Patterns are not supported in the list. For example, [(src)-[]->(m) | m.name].
              "},{"location":"3.ngql-guide/3.data-types/7.set/","title":"Sets","text":"

              The set is a composite data type. A set is a set of values. Unlike a List, values in a set are unordered and each value must be unique.

              A set starts with a left curly bracket { and ends with a right curly bracket }. A set contains zero, one, or more expressions. Set elements are separated from each other with commas (,). Whitespace around elements is ignored in the set, thus line breaks, tab stops, and blanks can be used for formatting.

              "},{"location":"3.ngql-guide/3.data-types/7.set/#opencypher_compatibility","title":"OpenCypher compatibility","text":"
              • A composite data type (i.e. set, map, and list) CANNOT be stored as properties of vertices or edges.
              • A set is not a data type in openCypher, but in nGQL, users can use the set.
              "},{"location":"3.ngql-guide/3.data-types/7.set/#examples","title":"Examples","text":"
              # The following query returns the set {1,2,3}.\nnebula> RETURN set{1, 2, 3} AS a;\n+-----------+\n| a         |\n+-----------+\n| {3, 2, 1} |\n+-----------+\n\n# The following query returns the set {1,2}, Because the set does not allow repeating elements, and the order is unordered.\nnebula> RETURN set{1, 2, 1} AS a;\n+--------+\n| a      |\n+--------+\n| {2, 1} |\n+--------+\n\n# The following query checks whether the set has the specified element 1.\nnebula> RETURN 1 IN set{1, 2} AS a;\n+------+\n| a    |\n+------+\n| true |\n+------+\n\n# The following query counts the number of elements in the set.\nnebula> YIELD size(set{1, 2, 1}) AS a;\n+---+\n| a |\n+---+\n| 2 |\n+---+\n\n# The following query returns a set of target vertex property values.\nnebula> GO FROM \"player100\" OVER follow \\\n        YIELD set{properties($$).name,properties($$).age} as a;\n+-----------------------+\n| a                     |\n+-----------------------+\n| {36, \"Tony Parker\"}   |\n| {41, \"Manu Ginobili\"} |\n+-----------------------+\n
              "},{"location":"3.ngql-guide/3.data-types/8.map/","title":"Maps","text":"

              The map is a composite data type. Maps are unordered collections of key-value pairs. In maps, the key is a string. The value can have any data type. You can get the map element by using map['key'].

              A map starts with a left curly bracket { and ends with a right curly bracket }. A map contains zero, one, or more key-value pairs. Map elements are separated from each other with commas (,). Whitespace around elements is ignored in the map, thus line breaks, tab stops, and blanks can be used for formatting.

              "},{"location":"3.ngql-guide/3.data-types/8.map/#opencypher_compatibility","title":"OpenCypher compatibility","text":"
              • A composite data type (i.e. set, map, and list) CANNOT be stored as properties of vertices or edges.
              • Map projection is not supported.
              "},{"location":"3.ngql-guide/3.data-types/8.map/#examples","title":"Examples","text":"
              # The following query returns the simple map.\nnebula> YIELD map{key1: 'Value1', Key2: 'Value2'} as a;\n+----------------------------------+\n| a                                |\n+----------------------------------+\n| {Key2: \"Value2\", key1: \"Value1\"} |\n+----------------------------------+\n\n# The following query returns the list type map.\nnebula> YIELD map{listKey: [{inner: 'Map1'}, {inner: 'Map2'}]} as a;\n+-----------------------------------------------+\n| a                                             |\n+-----------------------------------------------+\n| {listKey: [{inner: \"Map1\"}, {inner: \"Map2\"}]} |\n+-----------------------------------------------+\n\n# The following query returns the hybrid type map.\nnebula> RETURN map{a: LIST[1,2], b: SET{1,2,1}, c: \"hee\"} as a;\n+----------------------------------+\n| a                                |\n+----------------------------------+\n| {a: [1, 2], b: {2, 1}, c: \"hee\"} |\n+----------------------------------+\n\n# The following query returns the specified element in a map.\nnebula> RETURN map{a: LIST[1,2], b: SET{1,2,1}, c: \"hee\"}[\"b\"] AS b;\n+--------+\n| b      |\n+--------+\n| {2, 1} |\n+--------+\n\n# The following query checks whether the map has the specified key, not support checks whether the map has the specified value yet.\nnebula> RETURN \"a\" IN MAP{a:1, b:2} AS a;\n+------+\n| a    |\n+------+\n| true |\n+------+\n
              "},{"location":"3.ngql-guide/3.data-types/9.type-conversion/","title":"Type Conversion/Type coercions","text":"

              Converting an expression of a given type to another type is known as type conversion.

              NebulaGraph supports converting expressions explicit to other types. For details, see Type conversion functions.

              "},{"location":"3.ngql-guide/3.data-types/9.type-conversion/#examples","title":"Examples","text":"
              nebula> UNWIND [true, false, 'true', 'false', NULL] AS b \\\n        RETURN toBoolean(b) AS b;\n+----------+\n| b        |\n+----------+\n| true     |\n| false    |\n| true     |\n| false    |\n| __NULL__ |\n+----------+\n\nnebula> RETURN toFloat(1), toFloat('1.3'), toFloat('1e3'), toFloat('not a number');\n+------------+----------------+----------------+-------------------------+\n| toFloat(1) | toFloat(\"1.3\") | toFloat(\"1e3\") | toFloat(\"not a number\") |\n+------------+----------------+----------------+-------------------------+\n| 1.0        | 1.3            | 1000.0         | __NULL__                |\n+------------+----------------+----------------+-------------------------+\n
              "},{"location":"3.ngql-guide/4.variable-and-composite-queries/1.composite-queries/","title":"Composite queries (clause structure)","text":"

              Composite queries put data from different queries together. They then use filters, group-bys, or sorting before returning the combined return results.

              Nebula\u00a0Graph supports three methods to run composite queries (or sub-queries):

              • (openCypher) Clauses are chained together, and they feed intermediate result sets between each other.
              • (Native nGQL) More than one query can be batched together, separated by semicolons (;). The result of the last query is returned as the result of the batch.
              • (Native nGQL) Queries can be piped together by using the pipe (|). The result of the previous query can be used as the input of the next query.
              "},{"location":"3.ngql-guide/4.variable-and-composite-queries/1.composite-queries/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

              In a composite query, do not put together openCypher and native nGQL clauses in one statement. For example, this statement is undefined: MATCH ... | GO ... | YIELD ....

              • If you are in the openCypher way (MATCH, RETURN, WITH, etc), do not introduce any pipe or semicolons to combine the sub-clauses.
              • If you are in the native nGQL way (FETCH, GO, LOOKUP, etc), you must use pipe or semicolons to combine the sub-clauses.
              "},{"location":"3.ngql-guide/4.variable-and-composite-queries/1.composite-queries/#composite_queries_are_not_transactional_queries_as_in_sqlcypher","title":"Composite queries are not transactional queries (as in SQL/Cypher)","text":"

              For example, a query is composed of three sub-queries: A B C, A | B | C or A; B; C. In that A is a read operation, B is a computation operation, and C is a write operation. If any part fails in the execution, the whole result will be undefined. There is no rollback. What is written depends on the query executor.

              Note

              OpenCypher has no requirement of transaction.

              "},{"location":"3.ngql-guide/4.variable-and-composite-queries/1.composite-queries/#examples","title":"Examples","text":"
              • OpenCypher compatibility statement
                # Connect multiple queries with clauses.\nnebula> MATCH p=(v:player{name:\"Tim Duncan\"})--() \\\n        WITH nodes(p) AS n \\\n        UNWIND n AS n1 \\\n        RETURN DISTINCT n1;\n
              • Native nGQL (Semicolon queries)
                # Only return edges.\nnebula> SHOW TAGS; SHOW EDGES;\n\n# Insert multiple vertices.\nnebula> INSERT VERTEX player(name, age) VALUES \"player100\":(\"Tim Duncan\", 42); \\\n        INSERT VERTEX player(name, age) VALUES \"player101\":(\"Tony Parker\", 36); \\\n        INSERT VERTEX player(name, age) VALUES \"player102\":(\"LaMarcus Aldridge\", 33);\n
              • Native nGQL (Pipe queries)
                # Connect multiple queries with pipes.\nnebula> GO FROM \"player100\" OVER follow YIELD dst(edge) AS id | \\\n        GO FROM $-.id OVER serve YIELD properties($$).name AS Team, \\\n        properties($^).name AS Player;\n+-----------+-----------------+\n| Team      | Player          |\n+-----------+-----------------+\n| \"Spurs\"   | \"Tony Parker\"   |\n| \"Hornets\" | \"Tony Parker\"   |\n| \"Spurs\"   | \"Manu Ginobili\" |\n+-----------+-----------------+\n
              "},{"location":"3.ngql-guide/4.variable-and-composite-queries/2.user-defined-variables/","title":"User-defined variables","text":"

              User-defined variables allow passing the result of one statement to another.

              "},{"location":"3.ngql-guide/4.variable-and-composite-queries/2.user-defined-variables/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

              In openCypher, when you refer to the vertex, edge, or path of a variable, you need to name it first. For example:

              nebula> MATCH (v:player{name:\"Tim Duncan\"}) RETURN v;\n+----------------------------------------------------+\n| v                                                  |\n+----------------------------------------------------+\n| (\"player100\" :player{name: \"Tim Duncan\", age: 42}) |\n+----------------------------------------------------+\n

              The user-defined variable in the preceding query is v.

              Caution

              In a pattern of a MATCH statement, you cannot use the same edge variable repeatedly. For example, e cannot be written in the pattern p=(v1)-[e*2..2]->(v2)-[e*2..2]->(v3).

              "},{"location":"3.ngql-guide/4.variable-and-composite-queries/2.user-defined-variables/#native_ngql","title":"Native nGQL","text":"

              User-defined variables are written as $var_name. The var_name consists of letters, numbers, or underline characters. Any other characters are not permitted.

              The user-defined variables are valid only at the current execution (namely, in this composite query). When the execution ends, the user-defined variables will be automatically expired. The user-defined variables in one statement CANNOT be used in any other clients, executions, or sessions.

              You can use user-defined variables in composite queries. Details about composite queries, see Composite queries.

              Note

              • User-defined variables are case-sensitive.
              • To define a user-defined variable in a compound statement, end the statement with a semicolon (;). For details, please refer to the nGQL Style Guide.
              "},{"location":"3.ngql-guide/4.variable-and-composite-queries/2.user-defined-variables/#example","title":"Example","text":"
              nebula> $var = GO FROM \"player100\" OVER follow YIELD dst(edge) AS id; \\\n        GO FROM $var.id OVER serve YIELD properties($$).name AS Team, \\\n        properties($^).name AS Player;\n+-----------+-----------------+\n| Team      | Player          |\n+-----------+-----------------+\n| \"Spurs\"   | \"Tony Parker\"   |\n| \"Hornets\" | \"Tony Parker\"   |\n| \"Spurs\"   | \"Manu Ginobili\" |\n+-----------+-----------------+\n
              "},{"location":"3.ngql-guide/4.variable-and-composite-queries/2.user-defined-variables/#set_operations_and_scope_of_user-defined_variables","title":"Set operations and scope of user-defined variables","text":"

              When assigning variables within a compound statement involving set operations, it is important to enclose the scope of the variable assignment in parentheses. In the example below, the source of the $var assignment is the results of the output of two INTERSECT statements.

              $var = ( \\\n    GO FROM \"player100\" OVER follow \\\n      YIELD dst(edge) AS id \\\n    INTERSECT \\\n    GO FROM \"player100\" OVER follow \\\n      YIELD dst(edge) AS id \\\n       ); \\\n    GO FROM $var.id OVER follow YIELD follow.degree AS degree\n
              "},{"location":"3.ngql-guide/4.variable-and-composite-queries/3.property-reference/","title":"Reference to properties","text":"

              nGQL provides property references to allow you to refer to the properties of the source vertex, the destination vertex, and the edge in the GO statement, and to refer to the output results of the statement in composite queries. This topic describes how to use these property references in nGQL.

              Note

              This function applies to native nGQL only.

              "},{"location":"3.ngql-guide/4.variable-and-composite-queries/3.property-reference/#property_references_for_vertexes","title":"Property references for vertexes","text":"Parameter Description $^ Used to get the property of the source vertex. $$ Used to get the property of the destination vertex."},{"location":"3.ngql-guide/4.variable-and-composite-queries/3.property-reference/#property_reference_syntax","title":"Property reference syntax","text":"
              $^.<tag_name>.<prop_name>  # Source vertex property reference\n$$.<tag_name>.<prop_name>   # Destination vertex property reference\n
              • tag_name: The tag name of the vertex.
              • prop_name: The property name within the tag.
              "},{"location":"3.ngql-guide/4.variable-and-composite-queries/3.property-reference/#property_references_for_edges","title":"Property references for edges","text":"Parameter Description _src The source vertex ID of the edge _dst The destination vertex ID of the edge _type The internal encoding of edge types that uses sign to indicate direction. Positive numbers represent forward edges, while negative numbers represent backward edges. _rank The rank value for the edge"},{"location":"3.ngql-guide/4.variable-and-composite-queries/3.property-reference/#property_reference_syntax_1","title":"Property reference syntax","text":"

              nGQL allows you to reference edge properties, including user-defined edge properties and four built-in edge properties.

              <edge_type>.<prop_name>  # User-defined edge property reference\n<edge_type>._src|_dst|_type|_rank  # Built-in edge property reference\n
              • edge_type: The edge type.
              • prop_name: The property name within the edge type.
              "},{"location":"3.ngql-guide/4.variable-and-composite-queries/3.property-reference/#property_references_for_composite_queries","title":"Property references for composite queries","text":"Parameter Description $- Used to get the output results of the statement before the pipe in the composite query. For more information, see Pipe."},{"location":"3.ngql-guide/4.variable-and-composite-queries/3.property-reference/#examples","title":"Examples","text":""},{"location":"3.ngql-guide/4.variable-and-composite-queries/3.property-reference/#use_property_references_for_vertexes","title":"Use property references for vertexes","text":"

              The following query returns the name property of the player tag on the source vertex and the age property of the player tag on the destination vertex.

              nebula> GO FROM \"player100\" OVER follow YIELD $^.player.name AS startName, $$.player.age AS endAge;\n+--------------+--------+\n| startName    | endAge |\n+--------------+--------+\n| \"Tim Duncan\" | 36     |\n| \"Tim Duncan\" | 41     |\n+--------------+--------+\n

              Legacy version compatibility

              Starting from NebulaGraph 2.6.0, Schema-related functions are supported. The preceding example can be rewritten as follows in NebulaGraph master to produce the same results:

              GO FROM \"player100\" OVER follow YIELD properties($^).name AS startName, properties($$).age AS endAge;\n

              NebulaGraph master is compatible with both new and old syntax.

              "},{"location":"3.ngql-guide/4.variable-and-composite-queries/3.property-reference/#use_property_references_for_edges","title":"Use property references for edges","text":"

              The following query returns the degree property of the edge type follow.

              nebula> GO FROM \"player100\" OVER follow YIELD follow.degree;\n+---------------+\n| follow.degree |\n+---------------+\n| 95            |\n+---------------+\n

              The following query returns the source vertex, the destination vertex, the edge type, and the edge rank value of the edge type follow.

              nebula> GO FROM \"player100\" OVER follow YIELD follow._src, follow._dst, follow._type, follow._rank;\n+-------------+-------------+--------------+--------------+\n| follow._src | follow._dst | follow._type | follow._rank |\n+-------------+-------------+--------------+--------------+\n| \"player100\" | \"player101\" | 17           | 0            |\n| \"player100\" | \"player125\" | 17           | 0            |\n+-------------+-------------+--------------+--------------+\n

              Legacy version compatibility

              Starting from NebulaGraph 2.6.0, Schema-related functions are supported. The preceding example can be rewritten as follows in NebulaGraph master to produce the same results:

              GO FROM \"player100\" OVER follow YIELD properties(edge).degree;\nGO FROM \"player100\" OVER follow YIELD src(edge), dst(edge), type(edge), rank(edge);\n

              NebulaGraph master is compatible with both new and old syntax.

              "},{"location":"3.ngql-guide/4.variable-and-composite-queries/3.property-reference/#use_property_references_for_composite_queries","title":"Use property references for composite queries","text":"

              The following composite query performs the following actions:

              1. Uses the property reference $-.id to get the results of the statement GO FROM \"player100\" OVER follow YIELD dst(edge) AS id, which returns the destination vertex ID of the follow edge type.
              2. Uses the properties($^) function to get the name property of the player tag on the source vertex of the serve edge type.
              3. Uses the properties($$) function to get the name property of the team tag on the destination vertex of the serve edge type.
              nebula> GO FROM \"player100\" OVER follow \\\n        YIELD dst(edge) AS id | \\\n        GO FROM $-.id OVER serve \\\n        YIELD properties($^).name AS Player, properties($$).name AS Team;\n+-----------------+-----------+\n| Player          | Team      |\n+-----------------+-----------+\n| \"Tony Parker\"   | \"Spurs\"   |\n| \"Tony Parker\"   | \"Hornets\" |\n| \"Manu Ginobili\" | \"Spurs\"   |\n+-----------------+-----------+\n
              "},{"location":"3.ngql-guide/5.operators/1.comparison/","title":"Comparison operators","text":"

              NebulaGraph supports the following comparison operators.

              Name Description == Equal operator !=, <> Not equal operator > Greater than operator >= Greater than or equal operator < Less than operator <= Less than or equal operator IS NULL NULL check IS NOT NULL Not NULL check IS EMPTY EMPTY check IS NOT EMPTY Not EMPTY check

              The result of the comparison operation is true or false.

              Note

              • Comparability between values of different types is often undefined. The result could be NULL or others.
              • EMPTY is currently used only for checking, and does not support functions or operations such as GROUP BY, count(), sum(), max(), hash(), collect(), + or *.
              "},{"location":"3.ngql-guide/5.operators/1.comparison/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

              openCypher does not have EMPTY. Thus EMPTY is not supported in MATCH statements.

              "},{"location":"3.ngql-guide/5.operators/1.comparison/#examples","title":"Examples","text":""},{"location":"3.ngql-guide/5.operators/1.comparison/#_1","title":"==","text":"

              String comparisons are case-sensitive. Values of different types are not equal.

              Note

              The equal operator is == in nGQL, while in openCypher it is =.

              nebula> RETURN 'A' == 'a', toUpper('A') == toUpper('a'), toLower('A') == toLower('a');\n+------------+------------------------------+------------------------------+\n| (\"A\"==\"a\") | (toUpper(\"A\")==toUpper(\"a\")) | (toLower(\"A\")==toLower(\"a\")) |\n+------------+------------------------------+------------------------------+\n| false      | true                         | true                         |\n+------------+------------------------------+------------------------------+\n\nnebula> RETURN '2' == 2, toInteger('2') == 2;\n+----------+---------------------+\n| (\"2\"==2) | (toInteger(\"2\")==2) |\n+----------+---------------------+\n| false    | true                |\n+----------+---------------------+\n
              "},{"location":"3.ngql-guide/5.operators/1.comparison/#_2","title":">","text":"
              nebula> RETURN 3 > 2;\n+-------+\n| (3>2) |\n+-------+\n| true  |\n+-------+\n\nnebula> WITH 4 AS one, 3 AS two \\\n        RETURN one > two AS result;\n+--------+\n| result |\n+--------+\n| true   |\n+--------+\n
              "},{"location":"3.ngql-guide/5.operators/1.comparison/#_3","title":">=","text":"
              nebula> RETURN 2 >= \"2\", 2 >= 2;\n+----------+--------+\n| (2>=\"2\") | (2>=2) |\n+----------+--------+\n| __NULL__ | true   |\n+----------+--------+\n
              "},{"location":"3.ngql-guide/5.operators/1.comparison/#_4","title":"<","text":"
              nebula> YIELD 2.0 < 1.9;\n+---------+\n| (2<1.9) |\n+---------+\n| false   |\n+---------+\n
              "},{"location":"3.ngql-guide/5.operators/1.comparison/#_5","title":"<=","text":"
              nebula> YIELD 0.11 <= 0.11;\n+--------------+\n| (0.11<=0.11) |\n+--------------+\n| true         |\n+--------------+\n
              "},{"location":"3.ngql-guide/5.operators/1.comparison/#_6","title":"!=","text":"
              nebula> YIELD 1 != '1';\n+----------+\n| (1!=\"1\") |\n+----------+\n| true     |\n+----------+\n
              "},{"location":"3.ngql-guide/5.operators/1.comparison/#is_not_null","title":"IS [NOT] NULL","text":"
              nebula> RETURN null IS NULL AS value1, null == null AS value2, null != null AS value3;\n+--------+----------+----------+\n| value1 | value2   | value3   |\n+--------+----------+----------+\n| true   | __NULL__ | __NULL__ |\n+--------+----------+----------+\n\nnebula> RETURN length(NULL), size(NULL), count(NULL), NULL IS NULL, NULL IS NOT NULL, sin(NULL), NULL + NULL, [1, NULL] IS NULL;\n+--------------+------------+-------------+--------------+------------------+-----------+-------------+------------------+\n| length(NULL) | size(NULL) | count(NULL) | NULL IS NULL | NULL IS NOT NULL | sin(NULL) | (NULL+NULL) | [1,NULL] IS NULL |\n+--------------+------------+-------------+--------------+------------------+-----------+-------------+------------------+\n| __NULL__     | __NULL__   | 0           | true         | false            | __NULL__  | __NULL__    | false            |\n+--------------+------------+-------------+--------------+------------------+-----------+-------------+------------------+\n\nnebula> WITH {name: null} AS `map` \\\n        RETURN `map`.name IS NOT NULL;\n+----------------------+\n| map.name IS NOT NULL |\n+----------------------+\n| false                |\n+----------------------+\n\nnebula> WITH {name: 'Mats', name2: 'Pontus'} AS map1, \\\n        {name: null} AS map2, {notName: 0, notName2: null } AS map3 \\\n        RETURN map1.name IS NULL, map2.name IS NOT NULL, map3.name IS NULL;\n+-------------------+-----------------------+-------------------+\n| map1.name IS NULL | map2.name IS NOT NULL | map3.name IS NULL |\n+-------------------+-----------------------+-------------------+\n| false             | false                 | true              |\n+-------------------+-----------------------+-------------------+\n\nnebula> MATCH (n:player) \\\n        RETURN n.player.age IS NULL, n.player.name IS NOT NULL, n.player.empty IS NULL;\n+----------------------+---------------------------+------------------------+\n| n.player.age IS NULL | n.player.name IS NOT NULL | n.player.empty IS NULL |\n+----------------------+---------------------------+------------------------+\n| false                | true                      | true                   |\n| false                | true                      | true                   |\n...\n
              "},{"location":"3.ngql-guide/5.operators/1.comparison/#is_not_empty","title":"IS [NOT] EMPTY","text":"
              nebula> RETURN null IS EMPTY;\n+---------------+\n| NULL IS EMPTY |\n+---------------+\n| false         |\n+---------------+\n\nnebula> RETURN \"a\" IS NOT EMPTY;\n+------------------+\n| \"a\" IS NOT EMPTY |\n+------------------+\n| true             |\n+------------------+\n\nnebula> GO FROM \"player100\" OVER * WHERE properties($$).name IS NOT EMPTY YIELD dst(edge);\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"team204\"   |\n| \"player101\" |\n| \"player125\" |\n+-------------+\n
              "},{"location":"3.ngql-guide/5.operators/10.arithmetic/","title":"Arithmetic operators","text":"

              NebulaGraph supports the following arithmetic operators.

              Name Description + Addition operator - Minus operator * Multiplication operator / Division operator % Modulo operator - Changes the sign of the argument"},{"location":"3.ngql-guide/5.operators/10.arithmetic/#examples","title":"Examples","text":"
              nebula> RETURN 1+2 AS result;\n+--------+\n| result |\n+--------+\n| 3      |\n+--------+\n\nnebula> RETURN -10+5 AS result;\n+--------+\n| result |\n+--------+\n| -5     |\n+--------+\n\nnebula> RETURN (3*8)%5 AS result;\n+--------+\n| result |\n+--------+\n| 4      |\n+--------+\n
              "},{"location":"3.ngql-guide/5.operators/2.boolean/","title":"Boolean operators","text":"

              NebulaGraph supports the following boolean operators.

              Name Description AND Logical AND NOT Logical NOT OR Logical OR XOR Logical XOR

              For the precedence of the operators, refer to Operator Precedence.

              For the logical operations with NULL, refer to NULL.

              "},{"location":"3.ngql-guide/5.operators/2.boolean/#legacy_version_compatibility","title":"Legacy version compatibility","text":"
              • Non-zero numbers cannot be converted to boolean values.
              "},{"location":"3.ngql-guide/5.operators/4.pipe/","title":"Pipe operators","text":"

              Multiple queries can be combined using pipe operators in nGQL.

              "},{"location":"3.ngql-guide/5.operators/4.pipe/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

              Pipe operators apply to native nGQL only.

              "},{"location":"3.ngql-guide/5.operators/4.pipe/#syntax","title":"Syntax","text":"

              One major difference between nGQL and SQL is how sub-queries are composed.

              • In SQL, sub-queries are nested in the query statements.
              • In nGQL, the shell style PIPE (|) is introduced into the sub-queries.
              "},{"location":"3.ngql-guide/5.operators/4.pipe/#examples","title":"Examples","text":"
              nebula> GO FROM \"player100\" OVER follow \\\n        YIELD dst(edge) AS dstid, properties($$).name AS Name | \\\n        GO FROM $-.dstid OVER follow YIELD dst(edge);\n\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player100\" |\n| \"player102\" |\n| \"player125\" |\n| \"player100\" |\n+-------------+\n

              Users must define aliases in the YIELD clause for the reference operator $- to use, just like $-.dstid in the preceding example.

              "},{"location":"3.ngql-guide/5.operators/4.pipe/#performance_tips","title":"Performance tips","text":"

              In NebulaGraph, pipes will affect the performance. Take A | B as an example, the effects are as follows:

              1. Pipe operators operate synchronously. That is, the data can enter the pipe clause as a whole after the execution of clause A before the pipe operator is completed.

              2. If A sends a large amount of data to |, the entire query request may be very slow. You can try to split this statement.

                1. Send A from the application,

                2. Split the return results on the application,

                3. Send to multiple graphd processes concurrently,

                4. Every graphd process executes part of B.

                This is usually much faster than executing a complete A | B with a single graphd process.

              "},{"location":"3.ngql-guide/5.operators/6.set/","title":"Set operators","text":"

              This topic will describe the set operators, including UNION, UNION ALL, INTERSECT, and MINUS. To combine multiple queries, use these set operators.

              All set operators have equal precedence. If a nGQL statement contains multiple set operators, NebulaGraph will evaluate them from left to right unless parentheses explicitly specify another order.

              Caution

              The names and order of the variables defined in the query statements before and after the set operator must be consistent. For example, the names and order of a,b,c in RETURN a,b,c UNION RETURN a,b,c need to be consistent.

              "},{"location":"3.ngql-guide/5.operators/6.set/#union_union_distinct_and_union_all","title":"UNION, UNION DISTINCT, and UNION ALL","text":"
              <left> UNION [DISTINCT | ALL] <right> [ UNION [DISTINCT | ALL] <right> ...]\n
              • Operator UNION DISTINCT (or by short UNION) returns the union of two sets A and B without duplicated elements.
              • Operator UNION ALL returns the union of two sets A and B with duplicated elements.
              • The <left> and <right> must have the same number of columns and data types. Different data types are converted according to the Type Conversion.
              "},{"location":"3.ngql-guide/5.operators/6.set/#examples","title":"Examples","text":"
              # The following statement returns the union of two query results without duplicated elements.\nnebula> GO FROM \"player102\" OVER follow YIELD dst(edge) \\\n        UNION \\\n        GO FROM \"player100\" OVER follow YIELD dst(edge);\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player100\" |\n| \"player101\" |\n| \"player125\" |\n+-------------+\n\nnebula> MATCH (v:player) \\\n        WITH v.player.name AS v \\\n        RETURN n ORDER BY n LIMIT 3 \\\n        UNION \\\n        UNWIND [\"Tony Parker\", \"Ben Simmons\"] AS n \\\n        RETURN n;\n+---------------------+\n| n                   |\n+---------------------+\n| \"Amar'e Stoudemire\" |\n| \"Aron Baynes\"       |\n| \"Ben Simmons\"       |\n| \"Tony Parker\"       |\n+---------------------+\n\n# The following statement returns the union of two query results with duplicated elements.\nnebula> GO FROM \"player102\" OVER follow YIELD dst(edge) \\\n        UNION ALL \\\n        GO FROM \"player100\" OVER follow YIELD dst(edge);\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player100\" |\n| \"player101\" |\n| \"player101\" |\n| \"player125\" |\n+-------------+\n\nnebula> MATCH (v:player) \\\n        WITH v.player.name AS n \\\n        RETURN n ORDER BY n LIMIT 3 \\\n        UNION ALL \\\n        UNWIND [\"Tony Parker\", \"Ben Simmons\"] AS n \\\n        RETURN n;\n+---------------------+\n| n                   |\n+---------------------+\n| \"Amar'e Stoudemire\" |\n| \"Aron Baynes\"       |\n| \"Ben Simmons\"       |\n| \"Tony Parker\"       |\n| \"Ben Simmons\"       |\n+---------------------+\n\n# UNION can also work with the YIELD statement. The DISTINCT keyword will check duplication by all the columns for every line, and remove duplicated lines if every column is the same.\nnebula> GO FROM \"player102\" OVER follow \\\n        YIELD dst(edge) AS id, properties(edge).degree AS Degree, properties($$).age AS Age \\\n        UNION /* DISTINCT */ \\\n        GO FROM \"player100\" OVER follow \\\n        YIELD dst(edge) AS id, properties(edge).degree AS Degree, properties($$).age AS Age;\n+-------------+--------+-----+\n| id          | Degree | Age |\n+-------------+--------+-----+\n| \"player100\" | 75     | 42  |\n| \"player101\" | 75     | 36  |\n| \"player101\" | 95     | 36  |\n| \"player125\" | 95     | 41  |\n+-------------+--------+-----+\n
              "},{"location":"3.ngql-guide/5.operators/6.set/#intersect","title":"INTERSECT","text":"
              <left> INTERSECT <right>\n
              • Operator INTERSECT returns the intersection of two sets A and B (denoted by A \u22c2 B).
              • Similar to UNION, the left and right must have the same number of columns and data types. Different data types are converted according to the Type Conversion.
              "},{"location":"3.ngql-guide/5.operators/6.set/#example","title":"Example","text":"
              # The following statement returns the intersection of two query results.\nnebula> GO FROM \"player102\" OVER follow \\\n        YIELD dst(edge) AS id, properties(edge).degree AS Degree, properties($$).age AS Age \\\n        INTERSECT \\\n        GO FROM \"player100\" OVER follow \\\n        YIELD dst(edge) AS id, properties(edge).degree AS Degree, properties($$).age AS Age;\n+----+--------+-----+\n| id | Degree | Age |\n+----+--------+-----+\n+----+--------+-----+\n\nnebula> MATCH (v:player)-[e:follow]->(v2) \\\n        WHERE id(v) == \"player102\" \\\n        RETURN id(v2) As id, e.degree As Degree, v2.player.age AS Age \\\n        INTERSECT \\\n        MATCH (v:player)-[e:follow]->(v2) \\\n        WHERE id(v) == \"player100\" \\\n        RETURN id(v2) As id, e.degree As Degree, v2.player.age AS Age;\n+----+--------+-----+\n| id | Degree | Age |\n+----+--------+-----+\n+----+--------+-----+\n\nnebula> UNWIND [1,2] AS a RETURN a \\\n        INTERSECT \\\n        UNWIND [1,2,3,4] AS a \\\n        RETURN a;\n+---+\n| a |\n+---+\n| 1 |\n| 2 |\n+---+\n
              "},{"location":"3.ngql-guide/5.operators/6.set/#minus","title":"MINUS","text":"
              <left> MINUS <right>\n

              Operator MINUS returns the subtraction (or difference) of two sets A and B (denoted by A-B). Always pay attention to the order of left and right. The set A-B consists of elements that are in A but not in B.

              "},{"location":"3.ngql-guide/5.operators/6.set/#example_1","title":"Example","text":"
              # The following statement returns the elements in the first query result but not in the second query result.\nnebula> GO FROM \"player100\" OVER follow YIELD dst(edge) \\\n        MINUS \\\n        GO FROM \"player102\" OVER follow YIELD dst(edge);\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player125\" |\n+-------------+\n\nnebula> GO FROM \"player102\" OVER follow YIELD dst(edge) AS id\\\n        MINUS \\\n        GO FROM \"player100\" OVER follow YIELD dst(edge) AS id;\n+-------------+\n| id          |\n+-------------+\n| \"player100\" |\n+-------------+\n\nnebula> MATCH (v:player)-[e:follow]->(v2) \\\n        WHERE id(v) ==\"player102\" \\\n        RETURN id(v2) AS id\\\n        MINUS \\\n        MATCH (v:player)-[e:follow]->(v2) \\\n        WHERE id(v) ==\"player100\" \\\n        RETURN id(v2) AS id;\n+-------------+\n| id          |\n+-------------+\n| \"player100\" |\n+-------------+\n\nnebula> UNWIND [1,2,3] AS a RETURN a \\\n        MINUS \\\n        WITH 4 AS a \\\n        RETURN a;\n+---+\n| a |\n+---+\n| 1 |\n| 2 |\n| 3 |\n+---+\n
              "},{"location":"3.ngql-guide/5.operators/6.set/#precedence_of_the_set_operators_and_pipe_operators","title":"Precedence of the set operators and pipe operators","text":"

              Please note that when a query contains a pipe | and a set operator, the pipe takes precedence. Refer to Pipe for details. The query GO FROM 1 UNION GO FROM 2 | GO FROM 3 is the same as the query GO FROM 1 UNION (GO FROM 2 | GO FROM 3).

              "},{"location":"3.ngql-guide/5.operators/6.set/#examples_1","title":"Examples","text":"
              nebula> GO FROM \"player102\" OVER follow \\\n        YIELD dst(edge) AS play_dst  \\\n        UNION \\\n        GO FROM \"team200\" OVER serve REVERSELY \\\n        YIELD src(edge) AS play_src \\\n        | GO FROM $-.play_src OVER follow YIELD dst(edge) AS play_dst;\n\n+-------------+\n| play_dst    |\n+-------------+\n| \"player100\" |\n| \"player101\" |\n| \"player117\" |\n| \"player105\" |\n+-------------+\n

              The above query executes the statements in the red bar first and then executes the statement in the green box.

              The parentheses can change the execution priority. For example:

              nebula> (GO FROM \"player102\" OVER follow \\\n        YIELD dst(edge) AS play_dst  \\\n        UNION \\\n        GO FROM \"team200\" OVER serve REVERSELY \\\n        YIELD src(edge) AS play_dst) \\\n        | GO FROM $-.play_dst OVER follow YIELD dst(edge) AS play_dst;\n

              In the above query, the statements within the parentheses take precedence. That is, the UNION operation will be executed first, and its output will be executed as the input of the next operation with pipes.

              "},{"location":"3.ngql-guide/5.operators/7.string/","title":"String operators","text":"

              You can use the following string operators for concatenating, querying, and matching.

              Name Description + Concatenates strings. CONTAINS Performs searchings in strings. (NOT) IN Checks whether a value is within a set of values. (NOT) STARTS WITH Performs matchings at the beginning of a string. (NOT) ENDS WITH Performs matchings at the end of a string. Regular expressions Perform string matchings using regular expressions.

              Note

              All the string searchings or matchings are case-sensitive.

              "},{"location":"3.ngql-guide/5.operators/7.string/#examples","title":"Examples","text":""},{"location":"3.ngql-guide/5.operators/7.string/#_1","title":"+","text":"
              nebula> RETURN 'a' + 'b';\n+-----------+\n| (\"a\"+\"b\") |\n+-----------+\n| \"ab\"      |\n+-----------+\nnebula> UNWIND 'a' AS a UNWIND 'b' AS b RETURN a + b;\n+-------+\n| (a+b) |\n+-------+\n| \"ab\"  |\n+-------+\n
              "},{"location":"3.ngql-guide/5.operators/7.string/#contains","title":"CONTAINS","text":"

              The CONTAINS operator requires string types on both left and right sides.

              nebula> MATCH (s:player)-[e:serve]->(t:team) WHERE id(s) == \"player101\" \\\n        AND t.team.name CONTAINS \"ets\" RETURN s.player.name, e.start_year, e.end_year, t.team.name;\n+---------------+--------------+------------+-------------+\n| s.player.name | e.start_year | e.end_year | t.team.name |\n+---------------+--------------+------------+-------------+\n| \"Tony Parker\" | 2018         | 2019       | \"Hornets\"   |\n+---------------+--------------+------------+-------------+\n\nnebula> GO FROM \"player101\" OVER serve WHERE (STRING)properties(edge).start_year CONTAINS \"19\" AND \\\n        properties($^).name CONTAINS \"ny\" \\\n        YIELD properties($^).name, properties(edge).start_year, properties(edge).end_year, properties($$).name;\n+---------------------+-----------------------------+---------------------------+---------------------+\n| properties($^).name | properties(EDGE).start_year | properties(EDGE).end_year | properties($$).name |\n+---------------------+-----------------------------+---------------------------+---------------------+\n| \"Tony Parker\"       | 1999                        | 2018                      | \"Spurs\"             |\n+---------------------+-----------------------------+---------------------------+---------------------+\n\nnebula> GO FROM \"player101\" OVER serve WHERE !(properties($$).name CONTAINS \"ets\") \\\n        YIELD properties($^).name, properties(edge).start_year, properties(edge).end_year, properties($$).name;\n+---------------------+-----------------------------+---------------------------+---------------------+\n| properties($^).name | properties(EDGE).start_year | properties(EDGE).end_year | properties($$).name |\n+---------------------+-----------------------------+---------------------------+---------------------+\n| \"Tony Parker\"       | 1999                        | 2018                      | \"Spurs\"             |\n+---------------------+-----------------------------+---------------------------+---------------------+\n
              "},{"location":"3.ngql-guide/5.operators/7.string/#not_in","title":"(NOT) IN","text":"
              nebula> RETURN  1 IN [1,2,3], \"Yao\" NOT IN [\"Yi\", \"Tim\", \"Kobe\"], NULL IN [\"Yi\", \"Tim\", \"Kobe\"];\n+----------------+------------------------------------+-------------------------------+\n| (1 IN [1,2,3]) | (\"Yao\" NOT IN [\"Yi\",\"Tim\",\"Kobe\"]) | (NULL IN [\"Yi\",\"Tim\",\"Kobe\"]) |\n+----------------+------------------------------------+-------------------------------+\n| true           | true                               | __NULL__                      |\n+----------------+------------------------------------+-------------------------------+\n
              "},{"location":"3.ngql-guide/5.operators/7.string/#not_starts_with","title":"(NOT) STARTS WITH","text":"
              nebula> RETURN 'apple' STARTS WITH 'app', 'apple' STARTS WITH 'a', 'apple' STARTS WITH toUpper('a');\n+-----------------------------+---------------------------+------------------------------------+\n| (\"apple\" STARTS WITH \"app\") | (\"apple\" STARTS WITH \"a\") | (\"apple\" STARTS WITH toUpper(\"a\")) |\n+-----------------------------+---------------------------+------------------------------------+\n| true                        | true                      | false                              |\n+-----------------------------+---------------------------+------------------------------------+\n\nnebula> RETURN 'apple' STARTS WITH 'b','apple' NOT STARTS WITH 'app';\n+---------------------------+---------------------------------+\n| (\"apple\" STARTS WITH \"b\") | (\"apple\" NOT STARTS WITH \"app\") |\n+---------------------------+---------------------------------+\n| false                     | false                           |\n+---------------------------+---------------------------------+\n
              "},{"location":"3.ngql-guide/5.operators/7.string/#not_ends_with","title":"(NOT) ENDS WITH","text":"
              nebula> RETURN 'apple' ENDS WITH 'app', 'apple' ENDS WITH 'e', 'apple' ENDS WITH 'E', 'apple' ENDS WITH 'b';\n+---------------------------+-------------------------+-------------------------+-------------------------+\n| (\"apple\" ENDS WITH \"app\") | (\"apple\" ENDS WITH \"e\") | (\"apple\" ENDS WITH \"E\") | (\"apple\" ENDS WITH \"b\") |\n+---------------------------+-------------------------+-------------------------+-------------------------+\n| false                     | true                    | false                   | false                   |\n+---------------------------+-------------------------+-------------------------+-------------------------+\n
              "},{"location":"3.ngql-guide/5.operators/7.string/#regular_expressions","title":"Regular expressions","text":"

              Note

              Regular expressions cannot work with native nGQL statements (GO, FETCH, LOOKUP, etc.). Use it in openCypher only (MATCH, WHERE, etc.).

              NebulaGraph supports filtering by using regular expressions. The regular expression syntax is inherited from std::regex. You can match on regular expressions by using =~ 'regexp'. For example:

              nebula> RETURN \"384748.39\" =~ \"\\\\d+(\\\\.\\\\d{2})?\";\n+--------------------------------+\n| (\"384748.39\"=~\"\\d+(\\.\\d{2})?\") |\n+--------------------------------+\n| true                           |\n+--------------------------------+\n\nnebula> MATCH (v:player) WHERE v.player.name =~ 'Tony.*' RETURN v.player.name;\n+---------------+\n| v.player.name |\n+---------------+\n| \"Tony Parker\" |\n+---------------+\n
              "},{"location":"3.ngql-guide/5.operators/8.list/","title":"List operators","text":"

              NebulaGraph supports the following list operators:

              List operator Description + Concatenates lists. IN Checks if an element exists in a list. [] Accesses an element(s) in a list using the index operator."},{"location":"3.ngql-guide/5.operators/8.list/#examples","title":"Examples","text":"
              nebula> YIELD [1,2,3,4,5]+[6,7] AS myList;\n+-----------------------+\n| myList                |\n+-----------------------+\n| [1, 2, 3, 4, 5, 6, 7] |\n+-----------------------+\n\nnebula> RETURN size([NULL, 1, 2]);\n+------------------+\n| size([NULL,1,2]) |\n+------------------+\n| 3                |\n+------------------+\n\nnebula> RETURN NULL IN [NULL, 1];\n+--------------------+\n| (NULL IN [NULL,1]) |\n+--------------------+\n| __NULL__           |\n+--------------------+\n\nnebula> WITH [2, 3, 4, 5] AS numberlist \\\n    UNWIND numberlist AS number \\\n    WITH number \\\n    WHERE number IN [2, 3, 8] \\\n    RETURN number;\n+--------+\n| number |\n+--------+\n| 2      |\n| 3      |\n+--------+\n\nnebula> WITH ['Anne', 'John', 'Bill', 'Diane', 'Eve'] AS names RETURN names[1] AS result;\n+--------+\n| result |\n+--------+\n| \"John\" |\n+--------+\n
              "},{"location":"3.ngql-guide/5.operators/9.precedence/","title":"Operator precedence","text":"

              The following list shows the precedence of nGQL operators in descending order. Operators that are shown together on a line have the same precedence.

              • - (negative number)
              • !, NOT
              • *, /, %
              • -, +
              • ==, >=, >, <=, <, <>, !=
              • AND
              • OR, XOR
              • = (assignment)

              For operators that occur at the same precedence level within an expression, evaluation proceeds left to right, with the exception that assignments evaluate right to left.

              The precedence of operators determines the order of evaluation of terms in an expression. To modify this order and group terms explicitly, use parentheses.

              "},{"location":"3.ngql-guide/5.operators/9.precedence/#examples","title":"Examples","text":"
              nebula> RETURN 2+3*5;\n+-----------+\n| (2+(3*5)) |\n+-----------+\n| 17        |\n+-----------+\n\nnebula> RETURN (2+3)*5;\n+-----------+\n| ((2+3)*5) |\n+-----------+\n| 25        |\n+-----------+\n
              "},{"location":"3.ngql-guide/5.operators/9.precedence/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

              In openCypher, comparisons can be chained arbitrarily, e.g., x < y <= z is equivalent to x < y AND y <= z in openCypher.

              But in nGQL, x < y <= z is equivalent to (x < y) <= z. The result of (x < y) is a boolean. Compare it with an integer z, and you will get the final result NULL.

              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/","title":"Built-in math functions","text":"

              This topic describes the built-in math functions supported by NebulaGraph.

              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#abs","title":"abs()","text":"

              abs() returns the absolute value of the argument.

              Syntax: abs(<expression>)

              • expression: An expression of which the result type is double.
              • Result type: Double

              Example:

              nebula> RETURN abs(-10);\n+------------+\n| abs(-(10)) |\n+------------+\n| 10         |\n+------------+\nnebula> RETURN abs(5-6);\n+------------+\n| abs((5-6)) |\n+------------+\n| 1          |\n+------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#floor","title":"floor()","text":"

              floor() returns the largest integer value smaller than or equal to the argument.(Rounds down)

              Syntax: floor(<expression>)

              • expression: An expression of which the result type is double.
              • Result type: Double

              Example:

              nebula> RETURN floor(9.9);\n+------------+\n| floor(9.9) |\n+------------+\n| 9.0        |\n+------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#ceil","title":"ceil()","text":"

              ceil() returns the smallest integer greater than or equal to the argument.(Rounds up)

              Syntax: ceil(<expression>)

              • expression: An expression of which the result type is double.
              • Result type: Double

              Example:

              nebula> RETURN ceil(9.1);\n+-----------+\n| ceil(9.1) |\n+-----------+\n| 10.0      |\n+-----------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#round","title":"round()","text":"

              round() returns the rounded value of the specified number. Pay attention to the floating-point precision when using this function.

              Syntax: round(<expression>, <digit>)

              • expression: An expression of which the result type is double.
              • digit: Decimal digits. If digit is less than 0, round at the left of the decimal point.
              • Result type: Double

              Example:

              nebula> RETURN round(314.15926, 2);\n+--------------------+\n| round(314.15926,2) |\n+--------------------+\n| 314.16             |\n+--------------------+\nnebula> RETURN round(314.15926, -1);\n+-----------------------+\n| round(314.15926,-(1)) |\n+-----------------------+\n| 310.0                 |\n+-----------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#sqrt","title":"sqrt()","text":"

              sqrt() returns the square root of the argument.

              Syntax: sqrt(<expression>)

              • expression: An expression of which the result type is double.
              • Result type: Double

              Example:

              nebula> RETURN sqrt(9);\n+---------+\n| sqrt(9) |\n+---------+\n| 3.0     |\n+---------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#cbrt","title":"cbrt()","text":"

              cbrt() returns the cubic root of the argument.

              Syntax: cbrt(<expression>)

              • expression: An expression of which the result type is double.
              • Result type: Double

              Example:

              nebula> RETURN cbrt(8);\n+---------+\n| cbrt(8) |\n+---------+\n| 2.0     |\n+---------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#hypot","title":"hypot()","text":"

              hypot() returns the hypotenuse of a right-angled triangle.

              Syntax: hypot(<expression_x>,<expression_y>)

              • expression_x, expression_y: An expression of which the result type is double. They represent the side lengths x and y of a right triangle.
              • Result type: Double

              Example:

              nebula> RETURN hypot(3,2*2);\n+----------------+\n| hypot(3,(2*2)) |\n+----------------+\n| 5.0            |\n+----------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#pow","title":"pow()","text":"

              pow() returns the result of xy.

              Syntax: pow(<expression_x>,<expression_y>,)

              • expression_x: An expression of which the result type is double. It represents the base x.
              • expression_y: An expression of which the result type is double. It represents the exponential y.
              • Result type: Double

              Example:

              nebula> RETURN pow(3,3);\n+----------+\n| pow(3,3) |\n+----------+\n| 27       |\n+----------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#exp","title":"exp()","text":"

              exp() returns the result of ex.

              Syntax: exp(<expression>)

              • expression: An expression of which the result type is double. It represents the exponential x.
              • Result type: Double

              Example:

              nebula> RETURN exp(2);\n+------------------+\n| exp(2)           |\n+------------------+\n| 7.38905609893065 |\n+------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#exp2","title":"exp2()","text":"

              exp2() returns the result of 2x.

              Syntax: exp2(<expression>)

              • expression: An expression of which the result type is double. It represents the exponential x.
              • Result type: Double

              Example:

              nebula> RETURN exp2(3);\n+---------+\n| exp2(3) |\n+---------+\n| 8.0     |\n+---------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#log","title":"log()","text":"

              log() returns the base-e logarithm of the argument. (\\(log_{e}{N}\\))

              Syntax: log(<expression>)

              • expression: An expression of which the result type is double. It represents the antilogarithm N.
              • Result type: Double

              Example:

              nebula> RETURN log(8);\n+--------------------+\n| log(8)             |\n+--------------------+\n| 2.0794415416798357 |\n+--------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#log2","title":"log2()","text":"

              log2() returns the base-2 logarithm of the argument. (\\(log_{2}{N}\\))

              Syntax: log2(<expression>)

              • expression: An expression of which the result type is double. It represents the antilogarithm N.
              • Result type: Double

              Example:

              nebula> RETURN log2(8);\n+---------+\n| log2(8) |\n+---------+\n| 3.0     |\n+---------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#log10","title":"log10()","text":"

              log10() returns the base-10 logarithm of the argument. (\\(log_{10}{N}\\))

              Syntax: log10(<expression>)

              • expression: An expression of which the result type is double. It represents the antilogarithm N.
              • Result type: Double

              Example:

              nebula> RETURN log10(100);\n+------------+\n| log10(100) |\n+------------+\n| 2.0        |\n+------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#sin","title":"sin()","text":"

              sin() returns the sine of the argument. Users can convert angles to radians using the function radians().

              Syntax: sin(<expression>)

              • expression: An expression of which the result type is double.
              • Result type: Double

              Example:

              nebula> RETURN sin(3);\n+--------------------+\n| sin(3)             |\n+--------------------+\n| 0.1411200080598672 |\n+--------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#asin","title":"asin()","text":"

              asin() returns the inverse sine of the argument. Users can convert angles to radians using the function radians().

              Syntax: asin(<expression>)

              • expression: An expression of which the result type is double.
              • Result type: Double

              Example:

              nebula> RETURN asin(0.5);\n+--------------------+\n| asin(0.5)          |\n+--------------------+\n| 0.5235987755982989 |\n+--------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#cos","title":"cos()","text":"

              cos() returns the cosine of the argument. Users can convert angles to radians using the function radians().

              Syntax: cos(<expression>)

              • expression: An expression of which the result type is double.
              • Result type: Double

              Example:

              nebula> RETURN cos(0.5);\n+--------------------+\n| cos(0.5)           |\n+--------------------+\n| 0.8775825618903728 |\n+--------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#acos","title":"acos()","text":"

              acos() returns the inverse cosine of the argument. Users can convert angles to radians using the function radians().

              Syntax: acos(<expression>)

              • expression: An expression of which the result type is double.
              • Result type: Double

              Example:

              nebula> RETURN acos(0.5);\n+--------------------+\n| acos(0.5)          |\n+--------------------+\n| 1.0471975511965979 |\n+--------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#tan","title":"tan()","text":"

              tan() returns the tangent of the argument. Users can convert angles to radians using the function radians().

              Syntax: tan(<expression>)

              • expression: An expression of which the result type is double.
              • Result type: Double

              Example:

              nebula> RETURN tan(0.5);\n+--------------------+\n| tan(0.5)           |\n+--------------------+\n| 0.5463024898437905 |\n+--------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#atan","title":"atan()","text":"

              atan() returns the inverse tangent of the argument. Users can convert angles to radians using the function radians().

              Syntax: atan(<expression>)

              • expression: An expression of which the result type is double.
              • Result type: Double

              Example:

              nebula> RETURN atan(0.5);\n+--------------------+\n| atan(0.5)          |\n+--------------------+\n| 0.4636476090008061 |\n+--------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#rand","title":"rand()","text":"

              rand() returns a random floating point number in the range from 0 (inclusive) to 1 (exclusive); i.e.[0,1).

              Syntax: rand()

              • Result type: Double

              Example:

              nebula> RETURN rand();\n+--------------------+\n| rand()             |\n+--------------------+\n| 0.6545837172298736 |\n+--------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#rand32","title":"rand32()","text":"

              rand32() returns a random 32-bit integer in [min, max).

              Syntax: rand32(<expression_min>,<expression_max>)

              • expression_min: An expression of which the result type is int. It represents the minimum min.
              • expression_max: An expression of which the result type is int. It represents the maximum max.
              • Result type: Int
              • If you set only one argument, it is parsed as max and min is 0 by default. If you set no argument, the system returns a random signed 32-bit integer.

              Example:

              nebula> RETURN rand32(1,100);\n+---------------+\n| rand32(1,100) |\n+---------------+\n| 63            |\n+---------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#rand64","title":"rand64()","text":"

              rand64() returns a random 64-bit integer in [min, max).

              Syntax: rand64(<expression_min>,<expression_max>)

              • expression_min: An expression of which the result type is int. It represents the minimum min.
              • expression_max: An expression of which the result type is int. It represents the maximum max.
              • Result type: Int
              • If you set only one argument, it is parsed as max and min is 0 by default. If you set no argument, the system returns a random signed 64-bit integer.

              Example:

              nebula> RETURN rand64(1,100);\n+---------------+\n| rand64(1,100) |\n+---------------+\n| 34            |\n+---------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#bit_and","title":"bit_and()","text":"

              bit_and() returns the result of bitwise AND.

              Syntax: bit_and(<expression_1>,<expression_2>)

              • expression_1, expression_2: An expression of which the result type is int.
              • Result type: Int

              Example:

              nebula> RETURN bit_and(5,6);\n+--------------+\n| bit_and(5,6) |\n+--------------+\n| 4            |\n+--------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#bit_or","title":"bit_or()","text":"

              bit_or() returns the result of bitwise OR.

              Syntax: bit_or(<expression_1>,<expression_2>)

              • expression_1, expression_2: An expression of which the result type is int.
              • Result type: Int

              Example:

              nebula> RETURN bit_or(5,6);\n+-------------+\n| bit_or(5,6) |\n+-------------+\n| 7           |\n+-------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#bit_xor","title":"bit_xor()","text":"

              bit_xor() returns the result of bitwise XOR.

              Syntax: bit_xor(<expression_1>,<expression_2>)

              • expression_1, expression_2: An expression of which the result type is int.
              • Result type: Int

              Example:

              nebula> RETURN bit_xor(5,6);\n+--------------+\n| bit_xor(5,6) |\n+--------------+\n| 3            |\n+--------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#size","title":"size()","text":"

              size() returns the number of elements in a list or a map, or the length of a string.

              Syntax: size({<expression>|<string>})

              • expression: An expression for a list or map.
              • string: A specified string.
              • Result type: Int

              Example:

              nebula> RETURN size([1,2,3,4]);\n+-----------------+\n| size([1,2,3,4]) |\n+-----------------+\n| 4               |\n+-----------------+\n
              nebula> RETURN size(\"basketballplayer\") as size;\n+------+\n| size |\n+------+\n| 16   |\n+------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#range","title":"range()","text":"

              range() returns a list of integers from [start,end] in the specified steps.

              Syntax: range(<expression_start>,<expression_end>[,<expression_step>])

              • expression_start: An expression of which the result type is int. It represents the starting value start.
              • expression_end: An expression of which the result type is int. It represents the end value end.
              • expression_step: An expression of which the result type is int. It represents the step size step, step is 1 by default.
              • Result type: List

              Example:

              nebula> RETURN range(1,3*3,2);\n+------------------+\n| range(1,(3*3),2) |\n+------------------+\n| [1, 3, 5, 7, 9]  |\n+------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#sign","title":"sign()","text":"

              sign() returns the signum of the given number. If the number is 0, the system returns 0. If the number is negative, the system returns -1. If the number is positive, the system returns 1.

              Syntax: sign(<expression>)

              • expression: An expression of which the result type is double.
              • Result type: Int

              Example:

              nebula> RETURN sign(10);\n+----------+\n| sign(10) |\n+----------+\n| 1        |\n+----------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#e","title":"e()","text":"

              e() returns the base of the natural logarithm, e (2.718281828459045).

              Syntax: e()

              • Result type: Double

              Example:

              nebula> RETURN e();\n+-------------------+\n| e()               |\n+-------------------+\n| 2.718281828459045 |\n+-------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#pi","title":"pi()","text":"

              pi() returns the mathematical constant pi (3.141592653589793).

              Syntax: pi()

              • Result type: Double

              Example:

              nebula> RETURN pi();\n+-------------------+\n| pi()              |\n+-------------------+\n| 3.141592653589793 |\n+-------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/1.math/#radians","title":"radians()","text":"

              radians() converts angles to radians.

              Syntax: radians(<angle>)

              • Result type: Double

              Example:

              nebula> RETURN radians(180);\n+-------------------+\n| radians(180)      |\n+-------------------+\n| 3.141592653589793 |\n+-------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/14.geo/","title":"Geography functions","text":"

              Geography functions are used to generate or perform operations on the value of the geography data type.

              For descriptions of the geography data types, see Geography.

              "},{"location":"3.ngql-guide/6.functions-and-expressions/14.geo/#descriptions","title":"Descriptions","text":"Function Return Type Description ST_Point(longitude, latitude) GEOGRAPHY Creates the geography that contains a point. ST_GeogFromText(wkt_string) GEOGRAPHY Returns the geography corresponding to the input WKT string. ST_ASText(geography) STRING Returns the WKT string of the input geography. ST_Centroid(geography) GEOGRAPHY Returns the centroid of the input geography in the form of the single point geography. ST_ISValid(geography) BOOL Returns whether the input geography is valid. ST_Intersects(geography_1, geography_2) BOOL Returns whether geography_1 and geography_2 have intersections. ST_Covers(geography_1, geography_2) BOOL Returns whether geography_1 completely contains geography_2. If there is no point outside geography_1 in geography_2, return True. ST_CoveredBy(geography_1, geography_2) BOOL Returns whether geography_2 completely contains geography_1.If there is no point outside geography_2 in geography_1, return True. ST_DWithin(geography_1, geography_2, distance) BOOL If the distance between one point (at least) in geography_1 and one point in geography_2 is less than or equal to the distance specified by the distance parameter (measured by meters), return True. ST_Distance(geography_1, geography_2) FLOAT Returns the smallest possible distance (measured by meters) between two non-empty geographies. S2_CellIdFromPoint(point_geography) INT Returns the S2 Cell ID that covers the point geography. S2_CoveringCellIds(geography) ARRAY<INT64> Returns an array of S2 Cell IDs that cover the input geography."},{"location":"3.ngql-guide/6.functions-and-expressions/14.geo/#examples","title":"Examples","text":"
              nebula> RETURN ST_ASText(ST_Point(1,1));\n+--------------------------+\n| ST_ASText(ST_Point(1,1)) |\n+--------------------------+\n| \"POINT(1 1)\"             |\n+--------------------------+\n\nnebula> RETURN ST_ASText(ST_GeogFromText(\"POINT(3 8)\"));\n+------------------------------------------+\n| ST_ASText(ST_GeogFromText(\"POINT(3 8)\")) |\n+------------------------------------------+\n| \"POINT(3 8)\"                             |\n+------------------------------------------+\n\nnebula> RETURN ST_ASTEXT(ST_Centroid(ST_GeogFromText(\"LineString(0 1,1 0)\")));\n+----------------------------------------------------------------+\n| ST_ASTEXT(ST_Centroid(ST_GeogFromText(\"LineString(0 1,1 0)\"))) |\n+----------------------------------------------------------------+\n| \"POINT(0.5000380800773782 0.5000190382261059)\"                 |\n+----------------------------------------------------------------+\n\nnebula> RETURN ST_ISValid(ST_GeogFromText(\"POINT(3 8)\"));\n+-------------------------------------------+\n| ST_ISValid(ST_GeogFromText(\"POINT(3 8)\")) |\n+-------------------------------------------+\n| true                                      |\n+-------------------------------------------+\n\nnebula> RETURN ST_Intersects(ST_GeogFromText(\"LineString(0 1,1 0)\"),ST_GeogFromText(\"LineString(0 0,1 1)\"));\n+----------------------------------------------------------------------------------------------+\n| ST_Intersects(ST_GeogFromText(\"LineString(0 1,1 0)\"),ST_GeogFromText(\"LineString(0 0,1 1)\")) |\n+----------------------------------------------------------------------------------------------+\n| true                                                                                         |\n+----------------------------------------------------------------------------------------------+\n\nnebula> RETURN ST_Covers(ST_GeogFromText(\"POLYGON((0 0,10 0,10 10,0 10,0 0))\"),ST_Point(1,2));\n+--------------------------------------------------------------------------------+\n| ST_Covers(ST_GeogFromText(\"POLYGON((0 0,10 0,10 10,0 10,0 0))\"),ST_Point(1,2)) |\n+--------------------------------------------------------------------------------+\n| true                                                                           |\n+--------------------------------------------------------------------------------+\n\nnebula> RETURN ST_CoveredBy(ST_Point(1,2),ST_GeogFromText(\"POLYGON((0 0,10 0,10 10,0 10,0 0))\"));\n+-----------------------------------------------------------------------------------+\n| ST_CoveredBy(ST_Point(1,2),ST_GeogFromText(\"POLYGON((0 0,10 0,10 10,0 10,0 0))\")) |\n+-----------------------------------------------------------------------------------+\n| true                                                                              |\n+-----------------------------------------------------------------------------------+\n\nnebula> RETURN ST_dwithin(ST_GeogFromText(\"Point(0 0)\"),ST_GeogFromText(\"Point(10 10)\"),20000000000.0);\n+---------------------------------------------------------------------------------------+\n| ST_dwithin(ST_GeogFromText(\"Point(0 0)\"),ST_GeogFromText(\"Point(10 10)\"),20000000000) |\n+---------------------------------------------------------------------------------------+\n| true                                                                                  |\n+---------------------------------------------------------------------------------------+\n\nnebula> RETURN ST_Distance(ST_GeogFromText(\"Point(0 0)\"),ST_GeogFromText(\"Point(10 10)\"));\n+----------------------------------------------------------------------------+\n| ST_Distance(ST_GeogFromText(\"Point(0 0)\"),ST_GeogFromText(\"Point(10 10)\")) |\n+----------------------------------------------------------------------------+\n| 1.5685230187677438e+06                                                     |\n+----------------------------------------------------------------------------+\n\nnebula> RETURN S2_CellIdFromPoint(ST_GeogFromText(\"Point(1 1)\"));\n+---------------------------------------------------+\n| S2_CellIdFromPoint(ST_GeogFromText(\"Point(1 1)\")) |\n+---------------------------------------------------+\n| 1153277837650709461                               |\n+---------------------------------------------------+\n\nnebula> RETURN S2_CoveringCellIds(ST_GeogFromText(\"POLYGON((0 1, 1 2, 2 3, 0 1))\"));\n+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| S2_CoveringCellIds(ST_GeogFromText(\"POLYGON((0 1, 1 2, 2 3, 0 1))\"))                                                                                                     |\n+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| [1152391494368201343, 1153466862374223872, 1153554823304445952, 1153836298281156608, 1153959443583467520, 1154240918560178176, 1160503736791990272, 1160591697722212352] |\n+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/15.aggregating/","title":"Aggregating functions","text":"

              This topic describes the aggregating functions supported by NebulaGraph.

              "},{"location":"3.ngql-guide/6.functions-and-expressions/15.aggregating/#avg","title":"avg()","text":"

              avg() returns the average value of the argument.

              Syntax: avg(<expression>)

              • Result type: Double

              Example:

              nebula> MATCH (v:player) RETURN avg(v.player.age);\n+--------------------+\n| avg(v.player.age)  |\n+--------------------+\n| 33.294117647058826 |\n+--------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/15.aggregating/#count","title":"count()","text":"

              count() returns the number of records.

              • (Native nGQL) You can use count() and GROUP BY together to group and count the number of parameters. Use YIELD to return.
              • (OpenCypher style) You can use count() and RETURN. GROUP BY is not necessary.

              Syntax: count({<expression> | *})

              • count(*) returns the number of rows (including NULL).
              • Result type: Int

              Example:

              nebula> WITH [NULL, 1, 1, 2, 2] As a UNWIND a AS b \\\n        RETURN count(b), count(*), count(DISTINCT b);\n+----------+----------+-------------------+\n| count(b) | count(*) | count(distinct b) |\n+----------+----------+-------------------+\n| 4        | 5        | 2                 |\n+----------+----------+-------------------+\n
              # The statement in the following example searches for the people whom `player101` follows and people who follow `player101`, i.e. a bidirectional query.\n# Group and count the number of parameters.\nnebula> GO FROM \"player101\" OVER follow BIDIRECT \\\n        YIELD properties($$).name AS Name \\\n        | GROUP BY $-.Name YIELD $-.Name, count(*);\n+---------------------+----------+\n| $-.Name             | count(*) |\n+---------------------+----------+\n| \"LaMarcus Aldridge\" | 2        |\n| \"Tim Duncan\"        | 2        |\n| \"Marco Belinelli\"   | 1        |\n| \"Manu Ginobili\"     | 1        |\n| \"Boris Diaw\"        | 1        |\n| \"Dejounte Murray\"   | 1        |\n+---------------------+----------+\n\n# Count the number of parameters.\nnebula> MATCH (v1:player)-[:follow]-(v2:player) \\\n        WHERE id(v1)== \"player101\" \\\n        RETURN v2.player.name AS Name, count(*) as cnt ORDER BY cnt DESC;\n+---------------------+-----+\n| Name                | cnt |\n+---------------------+-----+\n| \"LaMarcus Aldridge\" | 2   |\n| \"Tim Duncan\"        | 2   |\n| \"Boris Diaw\"        | 1   |\n| \"Manu Ginobili\"     | 1   |\n| \"Dejounte Murray\"   | 1   |\n| \"Marco Belinelli\"   | 1   |\n+---------------------+-----+\n

              The preceding example retrieves two columns:

              • $-.Name: the names of the people.
              • count(*): how many times the names show up.

              Because there are no duplicate names in the basketballplayer dataset, the number 2 in the column count(*) shows that the person in that row and player101 have followed each other.

              # a: The statement in the following example retrieves the age distribution of the players in the dataset.\nnebula> LOOKUP ON player \\\n        YIELD player.age As playerage \\\n        | GROUP BY $-.playerage \\\n        YIELD $-.playerage as age, count(*) AS number \\\n        | ORDER BY $-.number DESC, $-.age DESC;\n+-----+--------+\n| age | number |\n+-----+--------+\n| 34  | 4      |\n| 33  | 4      |\n| 30  | 4      |\n| 29  | 4      |\n| 38  | 3      |\n+-----+--------+\n...\n# b: The statement in the following example retrieves the age distribution of the players in the dataset.\nnebula> MATCH (n:player) \\\n        RETURN n.player.age as age, count(*) as number \\\n        ORDER BY number DESC, age DESC;\n+-----+--------+\n| age | number |\n+-----+--------+\n| 34  | 4      |\n| 33  | 4      |\n| 30  | 4      |\n| 29  | 4      |\n| 38  | 3      |\n+-----+--------+\n...\n
              # The statement in the following example counts the number of edges that Tim Duncan relates.\nnebula> MATCH (v:player{name:\"Tim Duncan\"}) -[e]- (v2) \\\n        RETURN count(e);\n+----------+\n| count(e) |\n+----------+\n| 13       |\n+----------+\n\n# The statement in the following example counts the number of edges that Tim Duncan relates and returns two columns (no DISTINCT and DISTINCT) in multi-hop queries.\nnebula> MATCH (n:player {name : \"Tim Duncan\"})-[]->(friend:player)-[]->(fof:player) \\\n        RETURN count(fof), count(DISTINCT fof);\n+------------+---------------------+\n| count(fof) | count(distinct fof) |\n+------------+---------------------+\n| 4          | 3                   |\n+------------+---------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/15.aggregating/#max","title":"max()","text":"

              max() returns the maximum value.

              Syntax: max(<expression>)

              • Result type: Same as the original argument.

              Example:

              nebula> MATCH (v:player) RETURN max(v.player.age);\n+-------------------+\n| max(v.player.age) |\n+-------------------+\n| 47                |\n+-------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/15.aggregating/#min","title":"min()","text":"

              min() returns the minimum value.

              Syntax: min(<expression>)

              • Result type: Same as the original argument.

              Example:

              nebula> MATCH (v:player) RETURN min(v.player.age);\n+-------------------+\n| min(v.player.age) |\n+-------------------+\n| 20                |\n+-------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/15.aggregating/#collect","title":"collect()","text":"

              collect() returns a list containing the values returned by an expression. Using this function aggregates data by merging multiple records or values into a single list.

              Syntax: collect(<expression>)

              • Result type: List

              Example:

              nebula> UNWIND [1, 2, 1] AS a \\\n        RETURN a;\n+---+\n| a |\n+---+\n| 1 |\n| 2 |\n| 1 |\n+---+\n\nnebula> UNWIND [1, 2, 1] AS a \\\n        RETURN collect(a);\n+------------+\n| collect(a) |\n+------------+\n| [1, 2, 1]  |\n+------------+\n\nnebula> UNWIND [1, 2, 1] AS a \\\n        RETURN a, collect(a), size(collect(a));\n+---+------------+------------------+\n| a | collect(a) | size(collect(a)) |\n+---+------------+------------------+\n| 2 | [2]        | 1                |\n| 1 | [1, 1]     | 2                |\n+---+------------+------------------+\n\n# The following examples sort the results in descending order, limit output rows to 3, and collect the output into a list.\nnebula> UNWIND [\"c\", \"b\", \"a\", \"d\" ] AS p \\\n        WITH p AS q \\\n        ORDER BY q DESC LIMIT 3 \\\n        RETURN collect(q);\n+-----------------+\n| collect(q)      |\n+-----------------+\n| [\"d\", \"c\", \"b\"] |\n+-----------------+\n\nnebula> WITH [1, 1, 2, 2] AS coll \\\n        UNWIND coll AS x \\\n        WITH DISTINCT x \\\n        RETURN collect(x) AS ss;\n+--------+\n| ss     |\n+--------+\n| [1, 2] |\n+--------+\n\nnebula> MATCH (n:player) \\\n        RETURN collect(n.player.age);\n+---------------------------------------------------------------+\n| collect(n.player.age)                                         |\n+---------------------------------------------------------------+\n| [32, 32, 34, 29, 41, 40, 33, 25, 40, 37, ...\n...\n\n# The following example aggregates all the players' names by their ages.\nnebula> MATCH (n:player) \\\n        RETURN n.player.age AS age, collect(n.player.name);\n+-----+--------------------------------------------------------------------------+\n| age | collect(n.player.name)                                                   |\n+-----+--------------------------------------------------------------------------+\n| 24  | [\"Giannis Antetokounmpo\"]                                                |\n| 20  | [\"Luka Doncic\"]                                                          |\n| 25  | [\"Joel Embiid\", \"Kyle Anderson\"]                                         |\n+-----+--------------------------------------------------------------------------+\n...\n\nnebula> GO FROM \"player100\" OVER serve \\\n        YIELD properties($$).name AS name \\\n        | GROUP BY $-.name \\\n        YIELD collect($-.name) AS name;\n+-----------+\n| name      |\n+-----------+\n| [\"Spurs\"] |\n+-----------+\n\nnebula> LOOKUP ON player \\\n        YIELD player.age As playerage \\\n        | GROUP BY $-.playerage \\\n        YIELD collect($-.playerage) AS playerage;\n+------------------+\n| playerage        |\n+------------------+\n| [22]             |\n| [47]             |\n| [43]             |\n| [25, 25]         |\n+------------------+\n...\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/15.aggregating/#std","title":"std()","text":"

              std() returns the population standard deviation.

              Syntax: std(<expression>)

              • Result type: Double

              Example:

              nebula> MATCH (v:player) RETURN std(v.player.age);\n+-------------------+\n| std(v.player.age) |\n+-------------------+\n| 6.423895701687502 |\n+-------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/15.aggregating/#sum","title":"sum()","text":"

              sum() returns the sum value.

              Syntax: sum(<expression>)

              • Result type: Same as the original argument.

              Example:

              nebula> MATCH (v:player) RETURN sum(v.player.age);\n+-------------------+\n| sum(v.player.age) |\n+-------------------+\n| 1698              |\n+-------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/15.aggregating/#aggregating_example","title":"Aggregating example","text":"
              nebula>  GO FROM \"player100\" OVER follow YIELD dst(edge) AS dst, properties($$).age AS age \\\n         | GROUP BY $-.dst \\\n         YIELD \\\n         $-.dst AS dst, \\\n         toInteger((sum($-.age)/count($-.age)))+avg(distinct $-.age+1)+1 AS statistics;\n+-------------+------------+\n| dst         | statistics |\n+-------------+------------+\n| \"player125\" | 84.0       |\n| \"player101\" | 74.0       |\n+-------------+------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/16.type-conversion/","title":"Type conversion functions","text":"

              This topic describes the type conversion functions supported by NebulaGraph.

              "},{"location":"3.ngql-guide/6.functions-and-expressions/16.type-conversion/#toboolean","title":"toBoolean()","text":"

              toBoolean() converts a string value to a boolean value.

              Syntax: toBoolean(<value>)

              • Result type: Bool

              Example:

              nebula> UNWIND [true, false, 'true', 'false', NULL] AS b \\\n        RETURN toBoolean(b) AS b;\n+----------+\n| b        |\n+----------+\n| true     |\n| false    |\n| true     |\n| false    |\n| __NULL__ |\n+----------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/16.type-conversion/#tofloat","title":"toFloat()","text":"

              toFloat() converts an integer or string value to a floating point number.

              Syntax: toFloat(<value>)

              • Result type: Float

              Example:

              nebula> RETURN toFloat(1), toFloat('1.3'), toFloat('1e3'), toFloat('not a number');\n+------------+----------------+----------------+-------------------------+\n| toFloat(1) | toFloat(\"1.3\") | toFloat(\"1e3\") | toFloat(\"not a number\") |\n+------------+----------------+----------------+-------------------------+\n| 1.0        | 1.3            | 1000.0         | __NULL__                |\n+------------+----------------+----------------+-------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/16.type-conversion/#tostring","title":"toString()","text":"

              toString() converts non-compound types of data, such as numbers, booleans, and so on, to strings.

              Syntax: toString(<value>)

              • Result type: String

              Example:

              nebula> RETURN toString(9669) AS int2str, toString(null) AS null2str;\n+---------+----------+\n| int2str | null2str |\n+---------+----------+\n| \"9669\"  | __NULL__ |\n+---------+----------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/16.type-conversion/#tointeger","title":"toInteger()","text":"

              toInteger() converts a floating point or string value to an integer value.

              Syntax: toInteger(<value>)

              • Result type: Int

              Example:

              nebula> RETURN toInteger(1), toInteger('1'), toInteger('1e3'), toInteger('not a number');\n+--------------+----------------+------------------+---------------------------+\n| toInteger(1) | toInteger(\"1\") | toInteger(\"1e3\") | toInteger(\"not a number\") |\n+--------------+----------------+------------------+---------------------------+\n| 1            | 1              | 1000             | __NULL__                  |\n+--------------+----------------+------------------+---------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/16.type-conversion/#toset","title":"toSet()","text":"

              toSet() converts a list or set value to a set value.

              Syntax: toSet(<value>)

              • Result type: Set

              Example:

              nebula> RETURN toSet(list[1,2,3,1,2]) AS list2set;\n+-----------+\n| list2set  |\n+-----------+\n| {3, 1, 2} |\n+-----------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/16.type-conversion/#hash","title":"hash()","text":"

              hash() returns the hash value of the argument. The argument can be a number, a string, a list, a boolean, null, or an expression that evaluates to a value of the preceding data types.

              The source code of the hash() function (MurmurHash2), seed (0xc70f6907UL), and other parameters can be found in MurmurHash2.h.

              For Java, the hash function operates as follows.

              MurmurHash2.hash64(\"to_be_hashed\".getBytes(),\"to_be_hashed\".getBytes().length, 0xc70f6907)\n

              Syntax: hash(<string>)

              • Result type: Int

              Example:

              nebula> RETURN hash(\"abcde\");\n+--------------------+\n| hash(\"abcde\")      |\n+--------------------+\n| 811036730794841393 |\n+--------------------+\nnebula> YIELD hash([1,2,3]);\n+----------------+\n| hash([1,2,3])  |\n+----------------+\n| 11093822460243 |\n+----------------+\nnebula> YIELD hash(NULL);\n+------------+\n| hash(NULL) |\n+------------+\n| -1         |\n+------------+\nnebula> YIELD hash(toLower(\"HELLO NEBULA\"));\n+-------------------------------+\n| hash(toLower(\"HELLO NEBULA\")) |\n+-------------------------------+\n| -8481157362655072082          |\n+-------------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/","title":"Built-in string functions","text":"

              This topic describes the built-in string functions supported by NebulaGraph.

              "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#precautions","title":"Precautions","text":"
              • A string type is used to store a sequence of characters (text). The literal constant is a sequence of characters of any length surrounded by double or single quotes.
              • Like SQL, the position index of nGQL starts from 1, while in C language it starts from 0.
              "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#strcasecmp","title":"strcasecmp()","text":"

              strcasecmp() compares string a and b without case sensitivity.

              Syntax: strcasecmp(<string_a>,<string_b>)

              • string_a, string_b: Strings to compare.
              • Result type: Int
              • When string_a = string_b, the return value is 0. When string_a > string_b, the return value is greater than 0. When string_a < string_b, the return value is less than 0.

              Example:

              nebula> RETURN strcasecmp(\"a\",\"aa\");\n+----------------------+\n| strcasecmp(\"a\",\"aa\") |\n+----------------------+\n| -97                  |\n+----------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#lower_and_tolower","title":"lower() and toLower()","text":"

              lower() and toLower() can both returns the argument in lowercase.

              Syntax: lower(<string>), toLower(<string>)

              • string: A specified string.
              • Result type: String

              Example:

              nebula> RETURN lower(\"Basketball_Player\");\n+----------------------------+\n| lower(\"Basketball_Player\") |\n+----------------------------+\n| \"basketball_player\"        |\n+----------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#upper_and_toupper","title":"upper() and toUpper()","text":"

              upper() and toUpper() can both returns the argument in uppercase.

              Syntax: upper(<string>), toUpper(<string>)

              • string: A specified string.
              • Result type: String

              Example:

              nebula> RETURN upper(\"Basketball_Player\");\n+----------------------------+\n| upper(\"Basketball_Player\") |\n+----------------------------+\n| \"BASKETBALL_PLAYER\"        |\n+----------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#length","title":"length()","text":"

              length() returns the length of the given string in bytes.

              Syntax: length({<string>|<path>})

              • string: A specified string.
              • path: A specified path represented by a variable.
              • Result type: Int

              Example:

              nebula> RETURN length(\"basketball\");\n+----------------------+\n| length(\"basketball\") |\n+----------------------+\n| 10                   |\n+----------------------+\n
              nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-->(v2) return length(p);\n+-----------+\n| length(p) |\n+-----------+\n| 1         |\n| 1         |\n| 1         |\n+-----------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#trim","title":"trim()","text":"

              trim() removes the spaces at the leading and trailing of the string.

              Syntax: trim(<string>)

              • string: A specified string.
              • Result type: String

              Example:

              nebula> RETURN trim(\" basketball player \");\n+-----------------------------+\n| trim(\" basketball player \") |\n+-----------------------------+\n| \"basketball player\"         |\n+-----------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#ltrim","title":"ltrim()","text":"

              ltrim() removes the spaces at the leading of the string.

              Syntax: ltrim(<string>)

              • string: A specified string.
              • Result type: String

              Example:

              nebula> RETURN ltrim(\" basketball player \");\n+------------------------------+\n| ltrim(\" basketball player \") |\n+------------------------------+\n| \"basketball player \"         |\n+------------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#rtrim","title":"rtrim()","text":"

              rtrim() removes the spaces at the trailing of the string.

              Syntax: rtrim(<string>)

              • string: A specified string.
              • Result type: String

              Example:

              nebula> RETURN rtrim(\" basketball player \");\n+------------------------------+\n| rtrim(\" basketball player \") |\n+------------------------------+\n| \" basketball player\"         |\n+------------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#left","title":"left()","text":"

              left() returns a substring consisting of several characters from the leading of a string.

              Syntax: left(<string>,<count>)

              • string: A specified string.
              • count: The number of characters from the leading of the string. If the string is shorter than count, the system returns the string itself.
              • Result type: String

              Example:

              nebula> RETURN left(\"basketball_player\",6);\n+-----------------------------+\n| left(\"basketball_player\",6) |\n+-----------------------------+\n| \"basket\"                    |\n+-----------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#right","title":"right()","text":"

              right() returns a substring consisting of several characters from the trailing of a string.

              Syntax: right(<string>,<count>)

              • string: A specified string.
              • count: The number of characters from the trailing of the string. If the string is shorter than count, the system returns the string itself.
              • Result type: String

              Example:

              nebula> RETURN right(\"basketball_player\",6);\n+------------------------------+\n| right(\"basketball_player\",6) |\n+------------------------------+\n| \"player\"                     |\n+------------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#lpad","title":"lpad()","text":"

              lpad() pads a specified string from the left-side to the specified length and returns the result string.

              Syntax: lpad(<string>,<count>,<letters>)

              • string: A specified string.
              • count: The length of the string after it has been left-padded. If the length is less than that of string, only the length of string characters from front to back will be returned.
              • letters: A string to be padding from the leading.
              • Result type: String

              Example:

              nebula> RETURN lpad(\"abcd\",10,\"b\");\n+---------------------+\n| lpad(\"abcd\",10,\"b\") |\n+---------------------+\n| \"bbbbbbabcd\"        |\n+---------------------+\nnebula> RETURN lpad(\"abcd\",3,\"b\");\n+--------------------+\n| lpad(\"abcd\",3,\"b\") |\n+--------------------+\n| \"abc\"              |\n+--------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#rpad","title":"rpad()","text":"

              rpad() pads a specified string from the right-side to the specified length and returns the result string.

              Syntax: rpad(<string>,<count>,<letters>)

              • string: A specified string.
              • count: The length of the string after it has been right-padded. If the length is less than that of string, only the length of string characters from front to back will be returned.
              • letters: A string to be padding from the trailing.
              • Result type: String

              Example:

              nebula> RETURN rpad(\"abcd\",10,\"b\");\n+---------------------+\n| rpad(\"abcd\",10,\"b\") |\n+---------------------+\n| \"abcdbbbbbb\"        |\n+---------------------+\nnebula> RETURN rpad(\"abcd\",3,\"b\");\n+--------------------+\n| rpad(\"abcd\",3,\"b\") |\n+--------------------+\n| \"abc\"              |\n+--------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#substr_and_substring","title":"substr() and substring()","text":"

              substr() and substring() return a substring extracting count characters starting from the specified position pos of a specified string.

              Syntax: substr(<string>,<pos>,<count>), substring(<string>,<pos>,<count>)

              • string: A specified string.
              • pos: The position of starting extract (character index). Data type is int.
              • count: The number of characters extracted from the start position onwards.
              • Result type: String
              "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#explanations_for_the_return_of_substr_and_substring","title":"Explanations for the return of substr() and substring()","text":"
              • If pos is 0, it extracts from the specified string leading (including the first character).
              • If pos is greater than the maximum string index, an empty string is returned.
              • If pos is a negative number, BAD_DATA is returned.
              • If count is omitted, the function returns the substring starting at the position given by pos and extending to the end of the string.
              • If count is 0, an empty string is returned.
              • Using NULL as any of the argument of substr() will cause an issue.

              OpenCypher compatibility

              In openCypher, if a is null, null is returned.

              Example:

              nebula> RETURN substr(\"abcdefg\",2,4);\n+-----------------------+\n| substr(\"abcdefg\",2,4) |\n+-----------------------+\n| \"cdef\"                |\n+-----------------------+\nnebula> RETURN substr(\"abcdefg\",0,4);\n+-----------------------+\n| substr(\"abcdefg\",0,4) |\n+-----------------------+\n| \"abcd\"                |\n+-----------------------+\nnebula> RETURN substr(\"abcdefg\",2);\n+---------------------+\n| substr(\"abcdefg\",2) |\n+---------------------+\n| \"cdefg\"             |\n+---------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#reverse","title":"reverse()","text":"

              reverse() returns a string in reverse order.

              Syntax: reverse(<string>)

              • string: A specified string.
              • Result type: String

              Example:

              nebula> RETURN reverse(\"abcdefg\");\n+--------------------+\n| reverse(\"abcdefg\") |\n+--------------------+\n| \"gfedcba\"          |\n+--------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#replace","title":"replace()","text":"

              replace() replaces string a in a specified string with string b.

              Syntax: replace(<string>,<substr_a>,<string_b>)

              • string: A specified string.
              • substr_a: String a.
              • string_b: String b.
              • Result type: String

              Example:

              nebula> RETURN replace(\"abcdefg\",\"cd\",\"AAAAA\");\n+---------------------------------+\n| replace(\"abcdefg\",\"cd\",\"AAAAA\") |\n+---------------------------------+\n| \"abAAAAAefg\"                    |\n+---------------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#split","title":"split()","text":"

              split() splits a specified string at string b and returns a list of strings.

              Syntax: split(<string>,<substr>)

              • string: A specified string.
              • substr: String b.
              • Result type: List

              Example:

              nebula> RETURN split(\"basketballplayer\",\"a\");\n+-------------------------------+\n| split(\"basketballplayer\",\"a\") |\n+-------------------------------+\n| [\"b\", \"sketb\", \"llpl\", \"yer\"] |\n+-------------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#concat","title":"concat()","text":"

              concat() returns strings concatenated by all strings.

              Syntax: concat(<string1>,<string2>,...)

              • The function requires at least two or more strings. If there is only one string, the string itself is returned.
              • If any one of the strings is NULL, NULL is returned.
              • Result type: String

              Example:

              //This example concatenates 1, 2, and 3.\nnebula> RETURN concat(\"1\",\"2\",\"3\") AS r;\n+-------+\n| r     |\n+-------+\n| \"123\" |\n+-------+\n\n//In this example, one of the string is NULL.\nnebula> RETURN concat(\"1\",\"2\",NULL) AS r;\n+----------+\n| r        |\n+----------+\n| __NULL__ |\n+----------+\n\nnebula> GO FROM \"player100\" over follow \\\n        YIELD concat(src(edge), properties($^).age, properties($$).name, properties(edge).degree) AS A;\n+------------------------------+\n| A                            |\n+------------------------------+\n| \"player10042Tony Parker95\"   |\n| \"player10042Manu Ginobili95\" |\n+------------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#concat_ws","title":"concat_ws()","text":"

              concat_ws() returns strings concatenated by all strings that are delimited with a separator.

              Syntax: concat_ws(<separator>,<string1>,<string2>,... )

              • The function requires at least two or more strings.
              • If the separator is NULL, the concat_ws() function returns NULL.
              • If the separator is not NULL and there is only one string, the string itself is returned.
              • If there is a NULL in the strings, NULL is ignored during the concatenation.

              Example:

              //This example concatenates a, b, and c with the separator +.\nnebula> RETURN concat_ws(\"+\",\"a\",\"b\",\"c\") AS r;\n+---------+\n| r       |\n+---------+\n| \"a+b+c\" |\n+---------+\n\n//In this example, the separator is NULL.\nneubla> RETURN concat_ws(NULL,\"a\",\"b\",\"c\") AS r;\n+----------+\n| r        |\n+----------+\n| __NULL__ |\n+----------+\n\n//In this example, the separator is + and there is a NULL in the strings.\nnebula> RETURN concat_ws(\"+\",\"a\",NULL,\"b\",\"c\") AS r;\n+---------+\n| r       |\n+---------+\n| \"a+b+c\" |\n+---------+\n\n//In this example, the separator is + and there is only one string.\nnebula> RETURN concat_ws(\"+\",\"a\") AS r;\n+-----+\n| r   |\n+-----+\n| \"a\" |\n+-----+\nnebula> GO FROM \"player100\" over follow \\\n        YIELD concat_ws(\" \",src(edge), properties($^).age, properties($$).name, properties(edge).degree) AS A;\n+---------------------------------+\n| A                               |\n+---------------------------------+\n| \"player100 42 Tony Parker 95\"   |\n| \"player100 42 Manu Ginobili 95\" |\n+---------------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#extract","title":"extract()","text":"

              extract() uses regular expression matching to retrieve a single substring or all substrings from a string.

              Syntax: extract(<string>,\"<regular_expression>\")

              • string: A specified string
              • regular_expression: A regular expression
              • Result type: List

              Example:

              nebula> MATCH (a:player)-[b:serve]-(c:team{name: \"Lakers\"}) \\\n        WHERE a.player.age > 45 \\\n        RETURN extract(a.player.name, \"\\\\w+\") AS result;\n+----------------------------+\n| result                     |\n+----------------------------+\n| [\"Shaquille\", \"O\", \"Neal\"] |\n+----------------------------+\n\nnebula> MATCH (a:player)-[b:serve]-(c:team{name: \"Lakers\"}) \\\n        WHERE a.player.age > 45 \\\n        RETURN extract(a.player.name, \"hello\") AS result;\n+--------+\n| result |\n+--------+\n| []     |\n+--------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/2.string/#json_extract","title":"json_extract()","text":"

              json_extract() converts the specified JSON string to a map.

              Syntax: extract(<string>)

              • string:A specified string, must be JSON string.
              • Result type: Map

              Caution

              • Only Bool, Double, Int, String value and NULL are supported.
              • Only depth-1 nested Map is supported now. If nested Map depth is greater than 1, the nested item is left as an empty Map().

              Example:

              nebula> YIELD json_extract('{\"a\": 1, \"b\": {}, \"c\": {\"d\": true}}') AS result;\n+-----------------------------+\n| result                      |\n+-----------------------------+\n| {a: 1, b: {}, c: {d: true}} |\n+-----------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/3.date-and-time/","title":"Built-in date and time functions","text":"

              NebulaGraph supports the following built-in date and time functions:

              Function Description int now() Returns the current timestamp of the system. timestamp timestamp() Returns the current timestamp of the system. date date() Returns the current UTC date based on the current system. time time() Returns the current UTC time based on the current system. datetime datetime() Returns the current UTC date and time based on the current system. map duration() Returns the period of time. It can be used to calculate the specified time.

              For more information, see Date and time types.

              "},{"location":"3.ngql-guide/6.functions-and-expressions/3.date-and-time/#examples","title":"Examples","text":"
              nebula>  RETURN now(), timestamp(), date(), time(), datetime();\n+------------+-------------+------------+-----------------+----------------------------+\n| now()      | timestamp() | date()     | time()          | datetime()                 |\n+------------+-------------+------------+-----------------+----------------------------+\n| 1640057560 | 1640057560  | 2021-12-21 | 03:32:40.351000 | 2021-12-21T03:32:40.351000 |\n+------------+-------------+------------+-----------------+----------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/","title":"Schema-related functions","text":"

              This topic describes the schema-related functions supported by NebulaGraph. There are two types of schema-related functions, one for native nGQL statements and the other for openCypher-compatible statements.

              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#for_ngql_statements","title":"For nGQL statements","text":"

              The following functions are available in YIELD and WHERE clauses of nGQL statements.

              Note

              Since vertex, edge, vertices, edges, and path are keywords, you need to use AS <alias> to set the alias, such as GO FROM \"player100\" OVER follow YIELD edge AS e;.

              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#idvertex","title":"id(vertex)","text":"

              id(vertex) returns the ID of a vertex.

              Syntax: id(vertex)

              • Result type: Same as the vertex ID.

              Example:

              nebula> LOOKUP ON player WHERE player.age  > 45 YIELD id(vertex);\n+-------------+\n| id(VERTEX)  |\n+-------------+\n| \"player144\" |\n| \"player140\" |\n+-------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#propertiesvertex","title":"properties(vertex)","text":"

              properties(vertex) returns the properties of a vertex.

              Syntax: properties(vertex)

              • Result type: Map

              Example:

              nebula> LOOKUP ON player WHERE player.age  > 45 \\\n        YIELD properties(vertex);\n+-------------------------------------+\n| properties(VERTEX)                  |\n+-------------------------------------+\n| {age: 47, name: \"Shaquille O'Neal\"} |\n| {age: 46, name: \"Grant Hill\"}       |\n+-------------------------------------+\n

              You can also use the property reference symbols ($^ and $$) instead of the vertex field in the properties() function to get all properties of a vertex.

              • $^ represents the data of the starting vertex at the beginning of exploration. For example, in GO FROM \"player100\" OVER follow reversely YIELD properties($^), $^ refers to the vertex player100.
              • $$ represents the data of the end vertex at the end of exploration.

              properties($^) and properties($$) are generally used in GO statements. For more information, see Property reference.

              Caution

              You can use properties().<property_name> to get a specific property of a vertex. However, it is not recommended to use this method to obtain specific properties because the properties() function returns all properties, which can decrease query performance.

              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#propertiesedge","title":"properties(edge)","text":"

              properties(edge) returns the properties of an edge.

              Syntax: properties(edge)

              • Result type: Map

              Example:

              nebula> GO FROM \"player100\" OVER follow \\\n        YIELD properties(edge);\n+------------------+\n| properties(EDGE) |\n+------------------+\n| {degree: 95}     |\n| {degree: 95}     |\n+------------------+\n

              Caution

              You can use properties(edge).<property_name> to get a specific property of an edge. However, it is not recommended to use this method to obtain specific properties because the properties(edge) function returns all properties, which can decrease query performance.

              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#typeedge","title":"type(edge)","text":"

              type(edge) returns the edge type of an edge.

              Syntax: type(edge)

              • Result type: String

              Example:

              nebula> GO FROM \"player100\" OVER follow \\\n        YIELD src(edge), dst(edge), type(edge), rank(edge);\n+-------------+-------------+------------+------------+\n| src(EDGE)   | dst(EDGE)   | type(EDGE) | rank(EDGE) |\n+-------------+-------------+------------+------------+\n| \"player100\" | \"player101\" | \"follow\"   | 0          |\n| \"player100\" | \"player125\" | \"follow\"   | 0          |\n+-------------+-------------+------------+------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#srcedge","title":"src(edge)","text":"

              src(edge) returns the source vertex ID of an edge.

              Syntax: src(edge)

              • Result type: Same as the vertex ID.

              Example:

              nebula> GO FROM \"player100\" OVER follow \\\n        YIELD src(edge), dst(edge);\n+-------------+-------------+\n| src(EDGE)   | dst(EDGE)   |\n+-------------+-------------+\n| \"player100\" | \"player101\" |\n| \"player100\" | \"player125\" |\n+-------------+-------------+\n

              Note

              The semantics of the query for the starting vertex with src(edge) and properties($^) are different. src(edge) indicates the starting vertex ID of the edge in the graph database, while properties($^) indicates the data of the starting vertex where you start to expand the graph, such as the data of the starting vertex player100 in the above GO statement.

              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#dstedge","title":"dst(edge)","text":"

              dst(edge) returns the destination vertex ID of an edge.

              Syntax: dst(edge)

              • Result type: Same as the vertex ID.

              Example:

              nebula> GO FROM \"player100\" OVER follow \\\n        YIELD src(edge), dst(edge);\n+-------------+-------------+\n| src(EDGE)   | dst(EDGE)   |\n+-------------+-------------+\n| \"player100\" | \"player101\" |\n| \"player100\" | \"player125\" |\n+-------------+-------------+\n

              Note

              dst(edge) indicates the destination vertex ID of the edge in the graph database.

              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#rankedge","title":"rank(edge)","text":"

              rank(edge) returns the rank value of an edge.

              Syntax: rank(edge)

              • Result type: Int

              Example:

              nebula> GO FROM \"player100\" OVER follow \\\n        YIELD src(edge), dst(edge), rank(edge);\n+-------------+-------------+------------+\n| src(EDGE)   | dst(EDGE)   | rank(EDGE) |\n+-------------+-------------+------------+\n| \"player100\" | \"player101\" | 0          |\n| \"player100\" | \"player125\" | 0          |\n+-------------+-------------+------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#vertex","title":"vertex","text":"

              vertex returns the information of vertices, including VIDs, tags, properties, and values. You need to use AS <alias> to set the alias.

              Syntax: vertex

              Example:

              nebula> LOOKUP ON player WHERE player.age > 45 YIELD vertex AS v;\n+----------------------------------------------------------+\n| v                                                        |\n+----------------------------------------------------------+\n| (\"player144\" :player{age: 47, name: \"Shaquille O'Neal\"}) |\n| (\"player140\" :player{age: 46, name: \"Grant Hill\"})       |\n+----------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#edge","title":"edge","text":"

              edge returns the information of edges, including edge types, source vertices, destination vertices, ranks, properties, and values. You need to use AS <alias> to set the alias.

              Syntax: edge

              Example:

              nebula> GO FROM \"player100\" OVER follow YIELD edge AS e;\n+----------------------------------------------------+\n| e                                                  |\n+----------------------------------------------------+\n| [:follow \"player100\"->\"player101\" @0 {degree: 95}] |\n| [:follow \"player100\"->\"player125\" @0 {degree: 95}] |\n+----------------------------------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#vertices","title":"vertices","text":"

              vertices returns the information of vertices in a subgraph. For more information, see GET SUBGRAPH.

              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#edges","title":"edges","text":"

              edges returns the information of edges in a subgraph. For more information, see GET SUBGRAPH.

              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#path","title":"path","text":"

              path returns the information of a path. For more information, see FIND PATH.

              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#for_statements_compatible_with_opencypher","title":"For statements compatible with openCypher","text":"

              The following functions are available in RETURN and WHERE clauses of openCypher-compatible statements.

              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#id","title":"id()","text":"

              id() returns the ID of a vertex.

              Syntax: id(<vertex>)

              • Result type: Same as the vertex ID.

              Example:

              nebula> MATCH (v:player) RETURN id(v); \n+-------------+\n| id(v)       |\n+-------------+\n| \"player129\" |\n| \"player115\" |\n| \"player106\" |\n| \"player102\" |\n...\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#tags_and_labels","title":"tags() and labels()","text":"

              tags() and labels() return the Tag of a vertex.

              Syntax: tags(<vertex>), labels(<vertex>)

              • Result type: List

              Example:

              nebula> MATCH (v) WHERE id(v) == \"player100\" \\\n        RETURN tags(v);\n+------------+\n| tags(v)    |\n+------------+\n| [\"player\"] |\n+------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#properties","title":"properties()","text":"

              properties() returns the properties of a vertex or an edge.

              Syntax: properties(<vertex_or_edge>)

              • Result type: Map

              Example:

              nebula> MATCH (v:player)-[e:follow]-() RETURN properties(v),properties(e);\n+---------------------------------------+---------------+\n| properties(v)                         | properties(e) |\n+---------------------------------------+---------------+\n| {age: 31, name: \"Stephen Curry\"}      | {degree: 90}  |\n| {age: 47, name: \"Shaquille O'Neal\"}   | {degree: 100} |\n| {age: 34, name: \"LeBron James\"}       | {degree: 13}  |\n...\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#type","title":"type()","text":"

              type() returns the edge type of an edge.

              Syntax: type(<edge>)

              • Result type: String

              Example:

              nebula> MATCH (v:player{name:\"Tim Duncan\"})-[e]->() \\\n        RETURN type(e);\n+----------+\n| type(e)  |\n+----------+\n| \"serve\"  |\n| \"follow\" |\n| \"follow\" |\n+----------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#typeid","title":"typeid()","text":"

              typeid() returns the internal ID value of the Edge type of the edge, which can be used to determine the direction by positive or negative.

              Syntax: typeid(<edge>)

              • Result type: Int

              Example:

              nebula> MATCH (v:player)-[e:follow]-(v2) RETURN e,typeid(e), \\\n        CASE WHEN typeid(e) > 0 \\\n        THEN \"Forward\" ELSE \"Reverse\" END AS direction \\\n        LIMIT 5;\n+----------------------------------------------------+-----------+-----------+\n| e                                                  | typeid(e) | direction |\n+----------------------------------------------------+-----------+-----------+\n| [:follow \"player127\"->\"player114\" @0 {degree: 90}] | 5         | \"Forward\" |\n| [:follow \"player127\"->\"player148\" @0 {degree: 70}] | 5         | \"Forward\" |\n| [:follow \"player148\"->\"player127\" @0 {degree: 80}] | -5        | \"Reverse\" |\n| [:follow \"player147\"->\"player136\" @0 {degree: 90}] | 5         | \"Forward\" |\n| [:follow \"player136\"->\"player147\" @0 {degree: 90}] | -5        | \"Reverse\" |\n+----------------------------------------------------+-----------+-----------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#src","title":"src()","text":"

              src() returns the source vertex ID of an edge.

              Syntax: src(<edge>)

              • Result type: Same as the vertex ID.

              Example:

              nebula> MATCH ()-[e]->(v:player{name:\"Tim Duncan\"}) \\\n        RETURN src(e);\n+-------------+\n| src(e)      |\n+-------------+\n| \"player125\" |\n| \"player113\" |\n| \"player102\" |\n...\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#dst","title":"dst()","text":"

              dst() returns the destination vertex ID of an edge.

              Syntax: dst(<edge>)

              • Result type: Same as the vertex ID.

              Example:

              nebula> MATCH (v:player{name:\"Tim Duncan\"})-[e]->() \\\n        RETURN dst(e);\n+-------------+\n| dst(e)      |\n+-------------+\n| \"team204\"   |\n| \"player101\" |\n| \"player125\" |\n+-------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#startnode","title":"startNode()","text":"

              startNode() visits a path and returns its information of source vertex ID, including VIDs, tags, properties, and values.

              Syntax: startNode(<path>)

              Example:

              nebula> MATCH p = (a :player {name : \"Tim Duncan\"})-[r:serve]-(t) \\\n        RETURN startNode(p);\n+----------------------------------------------------+\n| startNode(p)                                       |\n+----------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) |\n+----------------------------------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#endnode","title":"endNode()","text":"

              endNode() visits a path and returns its information of destination vertex ID, including VIDs, tags, properties, and values.

              Syntax: endNode(<path>)

              Example:

              nebula> MATCH p = (a :player {name : \"Tim Duncan\"})-[r:serve]-(t) \\\n        RETURN endNode(p);\n+----------------------------------+\n| endNode(p)                       |\n+----------------------------------+\n| (\"team204\" :team{name: \"Spurs\"}) |\n+----------------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/4.schema/#rank","title":"rank()","text":"

              rank() returns the rank value of an edge.

              Syntax: rank(<edge>)

              • Result type: Int

              Example:

              nebula> MATCH (v:player{name:\"Tim Duncan\"})-[e]->() \\\n        RETURN rank(e);\n+---------+\n| rank(e) |\n+---------+\n| 0       |\n| 0       |\n| 0       |\n+---------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/5.conditional-expressions/","title":"Conditional expressions","text":"

              This topic describes the conditional functions supported by NebulaGraph.

              "},{"location":"3.ngql-guide/6.functions-and-expressions/5.conditional-expressions/#case","title":"CASE","text":"

              The CASE expression uses conditions to filter the parameters. nGQL provides two forms of CASE expressions just like openCypher: the simple form and the generic form.

              The CASE expression will traverse all the conditions. When the first condition is met, the CASE expression stops reading the conditions and returns the result. If no conditions are met, it returns the result in the ELSE clause. If there is no ELSE clause and no conditions are met, it returns NULL.

              "},{"location":"3.ngql-guide/6.functions-and-expressions/5.conditional-expressions/#the_simple_form_of_case_expressions","title":"The simple form of CASE expressions","text":"
              • Syntax
              CASE <comparer>\nWHEN <value> THEN <result>\n[WHEN ...]\n[ELSE <default>]\nEND\n

              Caution

              Always remember to end the CASE expression with an END.

              Parameter Description comparer A value or a valid expression that outputs a value. This value is used to compare with the value. value It will be compared with the comparer. If the value matches the comparer, then this condition is met. result The result is returned by the CASE expression if the value matches the comparer. default The default is returned by the CASE expression if no conditions are met.
              • Examples
              nebula> RETURN \\\n        CASE 2+3 \\\n        WHEN 4 THEN 0 \\\n        WHEN 5 THEN 1 \\\n        ELSE -1 \\\n        END \\\n        AS result;\n+--------+\n| result |\n+--------+\n| 1      |\n+--------+\n
              nebula> GO FROM \"player100\" OVER follow \\\n        YIELD properties($$).name AS Name, \\\n        CASE properties($$).age > 35 \\\n        WHEN true THEN \"Yes\" \\\n        WHEN false THEN \"No\" \\\n        ELSE \"Nah\" \\\n        END \\\n        AS Age_above_35;\n+-----------------+--------------+\n| Name            | Age_above_35 |\n+-----------------+--------------+\n| \"Tony Parker\"   | \"Yes\"        |\n| \"Manu Ginobili\" | \"Yes\"        |\n+-----------------+--------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/5.conditional-expressions/#the_generic_form_of_case_expressions","title":"The generic form of CASE expressions","text":"
              • Syntax
              CASE\nWHEN <condition> THEN <result>\n[WHEN ...]\n[ELSE <default>]\nEND\n
              Parameter Description condition If the condition is evaluated as true, the result is returned by the CASE expression. result The result is returned by the CASE expression if the condition is evaluated as true. default The default is returned by the CASE expression if no conditions are met.
              • Examples
              nebula> YIELD \\\n        CASE WHEN 4 > 5 THEN 0 \\\n        WHEN 3+4==7 THEN 1 \\\n        ELSE 2 \\\n        END \\\n        AS result;\n+--------+\n| result |\n+--------+\n| 1      |\n+--------+\n
              nebula> MATCH (v:player) WHERE v.player.age > 30 \\\n        RETURN v.player.name AS Name,  \\\n        CASE \\\n        WHEN v.player.name STARTS WITH \"T\" THEN \"Yes\" \\\n        ELSE \"No\" \\\n        END \\\n        AS Starts_with_T;\n+---------------------+---------------+\n| Name                | Starts_with_T |\n+---------------------+---------------+\n| \"Tim Duncan\"        | \"Yes\"         |\n| \"LaMarcus Aldridge\" | \"No\"          |\n| \"Tony Parker\"       | \"Yes\"         |\n+---------------------+---------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/5.conditional-expressions/#differences_between_the_simple_form_and_the_generic_form","title":"Differences between the simple form and the generic form","text":"

              To avoid the misuse of the simple form and the generic form, it is important to understand their differences. The following example can help explain them.

              nebula> GO FROM \"player100\" OVER follow \\\n        YIELD properties($$).name AS Name, properties($$).age AS Age, \\\n        CASE properties($$).age \\\n        WHEN properties($$).age > 35 THEN \"Yes\" \\\n        ELSE \"No\" \\\n        END \\\n        AS Age_above_35;\n+-----------------+-----+--------------+\n| Name            | Age | Age_above_35 |\n+-----------------+-----+--------------+\n| \"Tony Parker\"   | 36  | \"No\"         |\n| \"Manu Ginobili\" | 41  | \"No\"         |\n+-----------------+-----+--------------+\n

              The preceding GO query is intended to output Yes when the player's age is above 35. However, in this example, when the player's age is 36, the actual output is not as expected: It is No instead of Yes.

              This is because the query uses the CASE expression in the simple form, and a comparison between the values of $$.player.age and $$.player.age > 35 is made. When the player age is 36:

              • The value of $$.player.age is 36. It is an integer.
              • $$.player.age > 35 is evaluated to be true. It is a boolean.

              The values of $$.player.age and $$.player.age > 35 do not match. Therefore, the condition is not met and No is returned.

              "},{"location":"3.ngql-guide/6.functions-and-expressions/5.conditional-expressions/#coalesce","title":"coalesce()","text":"

              coalesce() returns the first not null value in all expressions.

              Syntax: coalesce(<expression_1>[,<expression_2>...])

              • Result type: Same as the original element.

              Example:

              nebula> RETURN coalesce(null,[1,2,3]) as result;\n+-----------+\n| result    |\n+-----------+\n| [1, 2, 3] |\n+-----------+\nnebula> RETURN coalesce(null) as result;\n+----------+\n| result   |\n+----------+\n| __NULL__ |\n+----------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/","title":"List functions","text":"

              This topic describes the list functions supported by NebulaGraph. Some of the functions have different syntax in native nGQL statements and openCypher-compatible statements.

              "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#precautions","title":"Precautions","text":"

              Like SQL, the position index in nGQL starts from 1, while in the C language it starts from 0.

              "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#general","title":"General","text":""},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#range","title":"range()","text":"

              range() returns the list containing all the fixed-length steps in [start,end].

              Syntax: range(start, end [, step])

              • step: Optional parameters. step is 1 by default.
              • Result type: List

              Example:

              nebula> RETURN range(1,9,2);\n+-----------------+\n| range(1,9,2)    |\n+-----------------+\n| [1, 3, 5, 7, 9] |\n+-----------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#reverse","title":"reverse()","text":"

              reverse() returns the list reversing the order of all elements in the original list.

              Syntax: reverse(<list>)

              • Result type: List

              Example:

              nebula> WITH [NULL, 4923, 'abc', 521, 487] AS ids \\\n        RETURN reverse(ids);\n+-----------------------------------+\n| reverse(ids)                      |\n+-----------------------------------+\n| [487, 521, \"abc\", 4923, __NULL__] |\n+-----------------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#tail","title":"tail()","text":"

              tail() returns all the elements of the original list, excluding the first one.

              Syntax: tail(<list>)

              • Result type: List

              Example:

              nebula> WITH [NULL, 4923, 'abc', 521, 487] AS ids \\\n        RETURN tail(ids);\n+-------------------------+\n| tail(ids)               |\n+-------------------------+\n| [4923, \"abc\", 521, 487] |\n+-------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#head","title":"head()","text":"

              head() returns the first element of a list.

              Syntax: head(<list>)

              • Result type: Same as the element in the original list.

              Example:

              nebula> WITH [NULL, 4923, 'abc', 521, 487] AS ids \\\n        RETURN head(ids);\n+-----------+\n| head(ids) |\n+-----------+\n| __NULL__  |\n+-----------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#last","title":"last()","text":"

              last() returns the last element of a list.

              Syntax: last(<list>)

              • Result type: Same as the element in the original list.

              Example:

              nebula> WITH [NULL, 4923, 'abc', 521, 487] AS ids \\\n        RETURN last(ids);\n+-----------+\n| last(ids) |\n+-----------+\n| 487       |\n+-----------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#reduce","title":"reduce()","text":"

              reduce() applies an expression to each element in a list one by one, chains the result to the next iteration by taking it as the initial value, and returns the final result. This function iterates each element e in the given list, runs the expression on e, accumulates the result with the initial value, and store the new result in the accumulator as the initial value of the next iteration. It works like the fold or reduce method in functional languages such as Lisp and Scala.

              openCypher compatibility

              In openCypher, the reduce() function is not defined. nGQL will implement the reduce() function in the Cypher way.

              Syntax: reduce(<accumulator> = <initial>, <variable> IN <list> | <expression>)

              • accumulator: A variable that will hold the accumulated results as the list is iterated.
              • initial: An expression that runs once to give an initial value to the accumulator.
              • variable: A variable in the list that will be applied to the expression successively.
              • list: A list or a list of expressions.
              • expression: This expression will be run on each element in the list once and store the result value in the accumulator.
              • Result type: Depends on the parameters provided, along with the semantics of the expression.

              Example:

              nebula> RETURN reduce(totalNum = -4 * 5, n IN [1, 2] | totalNum + n * 2) AS r;\n+-----+\n| r   |\n+-----+\n| -14 |\n+-----+\n\nnebula> MATCH p = (n:player{name:\"LeBron James\"})<-[:follow]-(m) \\\n        RETURN  nodes(p)[0].player.age AS src1,  nodes(p)[1].player.age AS dst2,  \\\n        reduce(totalAge = 100, n IN nodes(p) | totalAge + n.player.age) AS sum;\n+------+------+-----+\n| src1 | dst2 | sum |\n+------+------+-----+\n| 34   | 31   | 165 |\n| 34   | 29   | 163 |\n| 34   | 33   | 167 |\n| 34   | 26   | 160 |\n| 34   | 34   | 168 |\n| 34   | 37   | 171 |\n+------+------+-----+\n\nnebula> LOOKUP ON player WHERE player.name == \"Tony Parker\" YIELD id(vertex) AS VertexID \\\n        |  GO FROM $-.VertexID over follow \\\n        WHERE properties(edge).degree != reduce(totalNum = 5, n IN range(1, 3) | properties($$).age + totalNum + n) \\\n        YIELD properties($$).name AS id, properties($$).age AS age, properties(edge).degree AS degree;\n+---------------------+-----+--------+\n| id                  | age | degree |\n+---------------------+-----+--------+\n| \"Tim Duncan\"        | 42  | 95     |\n| \"LaMarcus Aldridge\" | 33  | 90     |\n| \"Manu Ginobili\"     | 41  | 95     |\n+---------------------+-----+--------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#for_ngql_statements","title":"For nGQL statements","text":""},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#keys","title":"keys()","text":"

              keys() returns a list containing the string representations for all the property names of vertices or edges.

              Syntax: keys({vertex | edge})

              • Result type: List

              Example:

              nebula> LOOKUP ON player \\\n        WHERE player.age  > 45 \\\n        YIELD keys(vertex);\n+-----------------+\n| keys(VERTEX)    |\n+-----------------+\n| [\"age\", \"name\"] |\n| [\"age\", \"name\"] |\n+-----------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#labels","title":"labels()","text":"

              labels() returns the list containing all the tags of a vertex.

              Syntax: labels(verte)

              • Result type: List

              Example:

              nebula> FETCH PROP ON * \"player101\", \"player102\", \"team204\" \\\n        YIELD labels(vertex);\n+----------------+\n| labels(VERTEX) |\n+----------------+\n| [\"player\"]     |\n| [\"player\"]     |\n| [\"team\"]       |\n+----------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#for_statements_compatible_with_opencypher","title":"For statements compatible with openCypher","text":""},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#keys_1","title":"keys()","text":"

              keys() returns a list containing the string representations for all the property names of vertices, edges, or maps.

              Syntax: keys(<vertex_or_edge>)

              • Result type: List

              Example:

              nebula> MATCH (v:player{name:\"Tim Duncan\"})-[e]->() \\\n        RETURN keys(e);\n+----------------------------+\n| keys(e)                    |\n+----------------------------+\n| [\"end_year\", \"start_year\"] |\n| [\"degree\"]                 |\n| [\"degree\"]                 |\n+----------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#labels_1","title":"labels()","text":"

              labels() returns the list containing all the tags of a vertex.

              Syntax: labels(<vertex>)

              • Result type: List

              Example:

              nebula> MATCH (v)-[e:serve]->() \\\n        WHERE id(v)==\"player100\" \\\n        RETURN labels(v);\n+------------+\n| labels(v)  |\n+------------+\n| [\"player\"] |\n+------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#nodes","title":"nodes()","text":"

              nodes() returns the list containing all the vertices in a path.

              Syntax: nodes(<path>)

              • Result type: List

              Example:

              nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-->(v2) \\\n        RETURN nodes(p);\n+-------------------------------------------------------------------------------------------------------------+\n| nodes(p)                                                                                                    |\n+-------------------------------------------------------------------------------------------------------------+\n| [(\"player100\" :player{age: 42, name: \"Tim Duncan\"}), (\"team204\" :team{name: \"Spurs\"})]                      |\n| [(\"player100\" :player{age: 42, name: \"Tim Duncan\"}), (\"player101\" :player{age: 36, name: \"Tony Parker\"})]   |\n| [(\"player100\" :player{age: 42, name: \"Tim Duncan\"}), (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})] |\n+-------------------------------------------------------------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/6.list/#relationships","title":"relationships()","text":"

              relationships() returns the list containing all the relationships in a path.

              Syntax: relationships(<path>)

              • Result type: List

              Example:

              nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-->(v2) \\\n        RETURN relationships(p);\n+-------------------------------------------------------------------------+\n| relationships(p)                                                        |\n+-------------------------------------------------------------------------+\n| [[:serve \"player100\"->\"team204\" @0 {end_year: 2016, start_year: 1997}]] |\n| [[:follow \"player100\"->\"player101\" @0 {degree: 95}]]                    |\n| [[:follow \"player100\"->\"player125\" @0 {degree: 95}]]                    |\n+-------------------------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/8.predicate/","title":"Predicate functions","text":"

              Predicate functions return true or false. They are most commonly used in WHERE clauses.

              NebulaGraph supports the following predicate functions:

              Functions Description exists() Returns true if the specified property exists in the vertex, edge or map. Otherwise, returns false. any() Returns true if the specified predicate holds for at least one element in the given list. Otherwise, returns false. all() Returns true if the specified predicate holds for all elements in the given list. Otherwise, returns false. none() Returns true if the specified predicate holds for no element in the given list. Otherwise, returns false. single() Returns true if the specified predicate holds for exactly one of the elements in the given list. Otherwise, returns false.

              Note

              NULL is returned if the list is NULL or all of its elements are NULL.

              Compatibility

              In openCypher, only function exists() is defined and specified. The other functions are implement-dependent.

              "},{"location":"3.ngql-guide/6.functions-and-expressions/8.predicate/#syntax","title":"Syntax","text":"
              <predicate>(<variable> IN <list> WHERE <condition>)\n
              "},{"location":"3.ngql-guide/6.functions-and-expressions/8.predicate/#examples","title":"Examples","text":"
              nebula> RETURN any(n IN [1, 2, 3, 4, 5, NULL] \\\n        WHERE n > 2) AS r;\n+------+\n| r    |\n+------+\n| true |\n+------+\n\nnebula> RETURN single(n IN range(1, 5) \\\n        WHERE n == 3) AS r;\n+------+\n| r    |\n+------+\n| true |\n+------+\n\nnebula> RETURN none(n IN range(1, 3) \\\n        WHERE n == 0) AS r;\n+------+\n| r    |\n+------+\n| true |\n+------+\n\nnebula> WITH [1, 2, 3, 4, 5, NULL] AS a \\\n        RETURN any(n IN a WHERE n > 2);\n+-------------------------+\n| any(n IN a WHERE (n>2)) |\n+-------------------------+\n| true                    |\n+-------------------------+\n\nnebula> MATCH p = (n:player{name:\"LeBron James\"})<-[:follow]-(m) \\\n        RETURN nodes(p)[0].player.name AS n1, nodes(p)[1].player.name AS n2, \\\n        all(n IN nodes(p) WHERE n.player.name NOT STARTS WITH \"D\") AS b;\n+----------------+-------------------+-------+\n| n1             | n2                | b     |\n+----------------+-------------------+-------+\n| \"LeBron James\" | \"Danny Green\"     | false |\n| \"LeBron James\" | \"Dejounte Murray\" | false |\n| \"LeBron James\" | \"Chris Paul\"      | true  |\n| \"LeBron James\" | \"Kyrie Irving\"    | true  |\n| \"LeBron James\" | \"Carmelo Anthony\" | true  |\n| \"LeBron James\" | \"Dwyane Wade\"     | false |\n+----------------+-------------------+-------+\n\nnebula> MATCH p = (n:player{name:\"LeBron James\"})-[:follow]->(m) \\\n        RETURN single(n IN nodes(p) WHERE n.player.age > 40) AS b;\n+------+\n| b    |\n+------+\n| true |\n+------+\n\nnebula> MATCH (n:player) \\\n        RETURN exists(n.player.id), n IS NOT NULL;\n+---------------------+---------------+\n| exists(n.player.id) | n IS NOT NULL |\n+---------------------+---------------+\n| false               | true          |\n...\n\nnebula> MATCH (n:player) \\\n        WHERE exists(n['name']) RETURN n;\n+-------------------------------------------------------------------------------------------------------------+\n| n                                                                                                           |\n+-------------------------------------------------------------------------------------------------------------+\n| (\"Grant Hill\" :player{age: 46, name: \"Grant Hill\"})                                                         |\n| (\"Marc Gasol\" :player{age: 34, name: \"Marc Gasol\"})                                                         |\n+-------------------------------------------------------------------------------------------------------------+\n...\n
              "},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/","title":"Overview of NebulaGraph general query statements","text":"

              This topic provides an overview of the general categories of query statements in NebulaGraph and outlines their use cases.

              "},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#background","title":"Background","text":"

              NebulaGraph stores data in the form of vertices and edges. Each vertex can have zero or more tags and each edge has exactly one edge type. Tags define the type of a vertex and describe its properties, while edge types define the type of an edge and describe its properties. When querying, you can limit the scope of the query by specifying the tag of a vertex or the type of an edge. For more information, see Patterns.

              "},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#categories","title":"Categories","text":"

              The primary query statements in NebulaGraph fall into the following categories:

              • FETCH PROP ON
              • LOOKUP ON
              • GO
              • MATCH
              • FIND PATH
              • GET SUBGRAPH
              • SHOW

              FETCH PROP ON and LOOKUP ON statements are primarily for basic data queries, GO and MATCH for more intricate queries and graph traversals, FIND PATH and GET SUBGRAPH for path and subgraph queries, and SHOW for retrieving database metadata.

              "},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#usage_and_use_cases","title":"Usage and use cases","text":""},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#fetch_prop_on","title":"FETCH PROP ON","text":"

              Usage: Retrieve properties of a specified vertex or edge.

              Use case: Knowing the specific vertex or edge ID and wanting to retrieve its properties.

              Note:

              • Must specify the ID of the vertex or edge.
              • Must specify the tag of the vertex or the edge type of the edge.
              • Must use the YIELD clause to specify the returned properties.

              Example:

              FETCH PROP ON player \"player100\" YIELD properties(vertex);\n              --+---  ----+-----       -------+----------\n                |         |                   |\n                |         |                   |\n                |         |                   +--------- Returns all properties under the player tag of the vertex.\n                |         |\n                |         +----------------- Retrieves from the vertex \"player100\".\n                |\n                +--------------------------- Retrieves properties under the player tag.\n

              For more information, see FETCH PROP ON.

              "},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#lookup_on","title":"LOOKUP ON","text":"

              Usage: Index-based querying of vertex or edge IDs.

              Use case: Finding vertex or edge IDs based on property values.

              Note: - Must pre-define indexes for the tag, edge type, or property. - Must specify the tag of the vertex or the edge type of the edge. - Must use the YIELD clause to specify the returned IDs.

              Example:

              LOOKUP ON player WHERE player.name == \"Tony Parker\" YIELD id(vertex);\n          --+--- ------------------+---------------       ---+------\n            |                      |                         |\n            |                      |                         |\n            |                      |                         +---- Returns the VID of the retrieved vertex.\n            |                      |\n            |                      +------------ Filtering is based on the value of the property name.\n            |\n            +----------------------------------- Queries based on the player tag.\n

              For more information, see LOOKUP ON.

              "},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#go","title":"GO","text":"

              Usage: Traverse the graph based on a given vertex and return information about the starting vertex, edges, or target vertices as needed. Use case: Complex graph traversals, such as finding friends of a vertex, friends' friends, etc.

              Note: - Use property reference symbols ($^ and $$) to return properties of the starting or target vertices, e.g., YIELD $^.player.name. - Use the functions properties($^) and properties($$) to return all properties of the starting or target vertices. Specify property names in the function to return specific properties, e.g., YIELD properties($^).name. - Use the functions src(edge) and dst(edge) to return the starting or destination vertex ID of an edge, e.g., YIELD src(edge).

              Example:

              GO 3 STEPS FROM \"player102\" OVER follow YIELD dst(edge);\n-----+---       --+-------       -+----       ---+-----\n     |            |               |              |\n     |            |               |              |\n     |            |               |              +--------- Returns the destination vertex of the last hop.\n     |            |               |\n     |            |               +------ Traverses out via the edge follow.\n     |            |\n     |            +--------------------- Starts from \"player102\".\n     |\n     +---------------------------------- Traverses 3 steps.\n

              For more information, see GO.

              "},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#match","title":"MATCH","text":"

              Usage: Execute complex graph pattern matching queries.

              Use case: Complex graph pattern matching, such as finding combinations of vertices and edges that satisfy a specific pattern.

              Note:

              MATCH statements are compatible with the OpenCypher syntax but with some differences:

              • Use == for equality instead of =, e.g., WHERE player.name == \"Tony Parker\".
              • When referencing properties of vertices, you need to specify the vertex's tag, e.g., YIELD player.name.
              • Introduces the WHERE id(v) == \"player100\" syntax.
              • Must use the RETURN clause to specify what information to return.

              Example:

              MATCH (v:player{name:\"Tim Duncan\"})-->(v2:player) \\\n        RETURN v2.player.name AS Name;\n

              For more information, see MATCH.

              "},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#find_path","title":"FIND PATH","text":"

              Usage: Query paths between given starting and target vertices or query properties of vertices and edges along paths.

              Use case: Querying paths between two vertices.

              Note: Must use the YIELD clause to specify returned information.

              Example:

              FIND SHORTEST PATH FROM \"player102\" TO \"team204\" OVER * YIELD path AS p;\n-------+-----           -------+---------------- ---+--       ----+----\n       |                       |                    |             |\n       |                       |                    |             |\n       |                       |                    |             +---------- Returns the path as 'p'.\n       |                       |                    |\n       |                       |                    +----------- Travels outwards via all types of edges.\n       |                       |    \n       |                       |\n       |                       +------------------ From the given starting and target VIDs.  \n       |\n       +--------------------------- Retrieves the shortest path.\n

              For more information, see FIND PATH.

              "},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#get_subgraph","title":"GET SUBGRAPH","text":"

              Usage: Extract a portion of the graph that satisfies specific conditions or query properties of vertices and edges in the subgraph.

              Use case: Analyzing structures of the graph or specific regions, such as extracting the social network subgraph of a person or the transportation network subgraph of an area.

              Note: Must use the YIELD clause to specify returned information.

              Example:

              GET SUBGRAPH 5 STEPS FROM \"player101\" YIELD VERTICES AS nodes, EDGES AS relationships;\n             -----+- -----+--------         ------------------------+----------------\n                  |       |                                         |\n                  |       |                                         |\n                  |       +------- Starts from \"player101\".         +------------ Returns all vertices and edges.\n                  |\n                  +----------------- Gets exploration of 5 steps     \n

              For more information, see GET SUBGRAPH.

              "},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#show","title":"SHOW","text":"

              SHOW statements are mainly used to obtain metadata information from the database, not for retrieving the actual data stored in the database. These statements are typically used to query the structure and configuration of the database.

              Statement Syntax Example Description SHOW CHARSET SHOW CHARSET SHOW CHARSET Shows the available character sets. SHOW COLLATION SHOW COLLATION SHOW COLLATION Shows the collations supported by NebulaGraph. SHOW CREATE SPACE SHOW CREATE SPACE <space_name> SHOW CREATE SPACE basketballplayer Shows the creating statement of the specified graph space. SHOW CREATE TAG/EDGE SHOW CREATE {TAG <tag_name> | EDGE <edge_name>} SHOW CREATE TAG player Shows the basic information of the specified tag. SHOW HOSTS SHOW HOSTS [GRAPH | STORAGE | META] SHOW HOSTSSHOW HOSTS GRAPH Shows the host and version information of Graph Service, Storage Service, and Meta Service. SHOW INDEX STATUS SHOW {TAG | EDGE} INDEX STATUS SHOW TAG INDEX STATUS Shows the status of jobs that rebuild native indexes, which helps check whether a native index is successfully rebuilt or not. SHOW INDEXES SHOW {TAG | EDGE} INDEXES SHOW TAG INDEXES Shows the names of existing native indexes. SHOW PARTS SHOW PARTS [<part_id>] SHOW PARTS Shows the information of a specified partition or all partitions in a graph space. SHOW ROLES SHOW ROLES IN <space_name> SHOW ROLES in basketballplayer Shows the roles that are assigned to a user account. SHOW SNAPSHOTS SHOW SNAPSHOTS SHOW SNAPSHOTS Shows the information of all the snapshots. SHOW SPACES SHOW SPACES SHOW SPACES Shows existing graph spaces in NebulaGraph. SHOW STATS SHOW STATS SHOW STATS Shows the statistics of the graph space collected by the latest STATS job. SHOW TAGS/EDGES SHOW TAGS | EDGES SHOW TAGS,SHOW EDGES Shows all the tags in the current graph space. SHOW USERS SHOW USERS SHOW USERS Shows the user information. SHOW SESSIONS SHOW SESSIONS SHOW SESSIONS Shows the information of all the sessions. SHOW SESSIONS SHOW SESSION <Session_Id> SHOW SESSION 1623304491050858 Shows a specified session with its ID. SHOW QUERIES SHOW [ALL] QUERIES SHOW QUERIES Shows the information of working queries in the current session. SHOW META LEADER SHOW META LEADER SHOW META LEADER Shows the information of the leader in the current Meta cluster."},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#compound_queries","title":"Compound queries","text":"

              Query statements in NebulaGraph can be combined to achieve more complex queries.

              When referencing the results of a subquery in a compound statement, you need to create an alias for the result and use the pipe symbol(|) to pass it to the next subquery. Use $- in the next subquery to reference the alias of that result. See Pipe Symbol for details.

              Example:

              nebula> GO FROM \"player100\" OVER follow \\\n        YIELD dst(edge) AS dstid, properties($$).name AS Name | \\\n        GO FROM $-.dstid OVER follow YIELD dst(edge);\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player100\" |\n| \"player102\" |\n| \"player125\" |\n| \"player100\" |\n+-------------+\n

              The pipe symbol | is applicable only in nGQL and cannot be used in OpenCypher statements. If you need to perform compound queries using MATCH statements, you can use the WITH clause.

              Example:

              nebula> MATCH (v:player)-->(v2:player) \\\n        WITH DISTINCT v2 AS v2, v2.player.age AS Age \\\n        ORDER BY Age \\\n        WHERE Age<25 \\\n        RETURN v2.player.name AS Name, Age;\n+----------------------+-----+\n| Name                 | Age |\n+----------------------+-----+\n| \"Luka Doncic\"        | 20  |\n| \"Ben Simmons\"        | 22  |\n| \"Kristaps Porzingis\" | 23  |\n+----------------------+-----+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/1.general-query-statements-overview/#more_information","title":"More information","text":"

              nGQL command cheatsheet

              "},{"location":"3.ngql-guide/7.general-query-statements/2.match/","title":"MATCH","text":"

              The MATCH statement provides pattern-based search functionality, allowing you to retrieve data that matches one or more patterns in NebulaGraph. By defining one or more patterns, you can search for data that matches the patterns in NebulaGraph. Once the matching data is retrieved, you can use the RETURN clause to return it as a result.

              The examples in this topic use the basketballplayer dataset as the sample dataset.

              "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#syntax","title":"Syntax","text":"

              The syntax of MATCH is relatively more flexible compared with that of other query statements such as GO or LOOKUP. The path type of the MATCH statement is trail. That is, only vertices can be repeatedly visited in the graph traversal. Edges cannot be repeatedly visited. For details, see path. But generally, it can be summarized as follows.

              MATCH <pattern> [<clause_1>] RETURN <output> [<clause_2>];\n
              • pattern: The MATCH statement supports matching one or multiple patterns. Multiple patterns are separated by commas (,). For example: (a)-[]->(b),(c)-[]->(d). For the detailed description of patterns, see Patterns.
              • clause_1: The WHERE, WITH, UNWIND, and OPTIONAL MATCH clauses are supported, and the MATCH clause can also be used.
              • output: Define the list name for the output results to be returned. You can use AS to set an alias for the list.
              • clause_2: The ORDER BY and LIMIT clauses are supported.

              Legacy version compatibility

              • Starting from version 3.5.0, the MATCH statement supports full table scans. It can traverse vertices or edges in the graph without using any indexes or filter conditions. In previous versions, the MATCH statement required an index for certain queries or needed to use LIMIT to restrict the number of output results.
              • Starting from NebulaGraph version 3.0.0, in order to distinguish the properties of different tags, you need to specify a tag name when querying properties. The original statement RETURN <variable_name>.<property_name> is changed to RETURN <variable_name>.<tag_name>.<property_name>.
              "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#notes","title":"Notes","text":"
              • Avoid full table scans, as they may result in decreased query performance, and if there is insufficient memory during a full table scan, the query may fail, and the system will report an error. It is recommended to use queries with filter conditions or specifying tags and edge types, such as v:player and v.player.name in the statement MATCH (v:player) RETURN v.player.name AS Name.
              • You can create an index for a tag, edge type, or a specific property of a tag or edge type to improve query performance. For example, you can create an index for the player tag or the name property of the player tag. For more information about the usage and considerations for indexes, see Must-read for using indexes.
              • The MATCH statement cannot query dangling edges.
              "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#using_patterns_in_match_statements","title":"Using patterns in MATCH statements","text":""},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_vertices","title":"Match vertices","text":"

              You can use a user-defined variable in a pair of parentheses to represent a vertex in a pattern. For example: (v).

              nebula> MATCH (v) \\\n        RETURN v \\\n        LIMIT 3;\n+-----------------------------------------------------------+\n| v                                                         |\n+-----------------------------------------------------------+\n| (\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"}) |\n| (\"player106\" :player{age: 25, name: \"Kyle Anderson\"})     |\n| (\"player115\" :player{age: 40, name: \"Kobe Bryant\"})       |\n+-----------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_tags","title":"Match tags","text":"

              Legacy version compatibility

              • In NebulaGraph versions earlier than 3.0.0, the prerequisite for matching a tag is that the tag itself has an index or a certain property of the tag has an index.
              • Starting from NebulaGraph 3.0.0, you can match tags without creating an index, but you need to use LIMIT to restrict the number of output results.
              • Starting from NebulaGraph 3.5.0, the MATCH statement supports full table scans. There is no need to create an index for a tag or a specific property of a tag, nor use LIMIT to restrict the number of output results in order to execute the MATCH statement.

              You can specify a tag with :<tag_name> after the vertex in a pattern.

              nebula> MATCH (v:player) \\\n        RETURN v;\n+---------------------------------------------------------------+\n| v                                                             |\n+---------------------------------------------------------------+\n| (\"player105\" :player{age: 31, name: \"Danny Green\"})           |\n| (\"player109\" :player{age: 34, name: \"Tiago Splitter\"})        |\n| (\"player111\" :player{age: 38, name: \"David West\"})            |\n...\n

              To match vertices with multiple tags, use colons (:).

              nebula> CREATE TAG actor (name string, age int);\nnebula> INSERT VERTEX actor(name, age) VALUES \"player100\":(\"Tim Duncan\", 42);\nnebula> MATCH (v:player:actor) \\\n        RETURN v \\\n+----------------------------------------------------------------------------------------+\n| v                                                                                      |\n+----------------------------------------------------------------------------------------+\n| (\"player100\" :actor{age: 42, name: \"Tim Duncan\"} :player{age: 42, name: \"Tim Duncan\"}) |\n+----------------------------------------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_vertex_properties","title":"Match vertex properties","text":"

              Note

              The prerequisite for matching a vertex property is that the tag itself has an index of the corresponding property. Otherwise, you cannot execute the MATCH statement to match the property.

              You can specify a vertex property with {<prop_name>: <prop_value>} after the tag in a pattern.

              # The following example uses the name property to match a vertex.\nnebula> MATCH (v:player{name:\"Tim Duncan\"}) \\\n        RETURN v;\n+----------------------------------------------------+\n| v                                                  |\n+----------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) |\n+----------------------------------------------------+\n

              The WHERE clause can do the same thing:

              nebula> MATCH (v:player) \\\n        WHERE v.player.name == \"Tim Duncan\" \\\n        RETURN v;\n+----------------------------------------------------+\n| v                                                  |\n+----------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) |\n+----------------------------------------------------+\n

              OpenCypher compatibility

              In openCypher 9, = is the equality operator. However, in nGQL, == is the equality operator and = is the assignment operator (as in C++ or Java).

              Use the WHERE clause to directly get all the vertices with the vertex property value Tim Duncan.

              nebula> MATCH (v) \\\n        WITH v, properties(v) as props, keys(properties(v)) as kk \\\n        WHERE [i in kk where props[i] == \"Tim Duncan\"] \\\n        RETURN v;\n+----------------------------------------------------+\n| v                                                  |\n+----------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) |\n+----------------------------------------------------+\n\nnebula> WITH ['Tim Duncan', 'Yao Ming'] AS names \\\n        MATCH (v1:player)-->(v2:player) \\\n        WHERE v1.player.name in names \\\n        return v1, v2;\n+----------------------------------------------------+----------------------------------------------------------+\n| v1                                                 | v2                                                       |\n+----------------------------------------------------+----------------------------------------------------------+\n| (\"player133\" :player{age: 38, name: \"Yao Ming\"})   | (\"player114\" :player{age: 39, name: \"Tracy McGrady\"})    |\n| (\"player133\" :player{age: 38, name: \"Yao Ming\"})   | (\"player144\" :player{age: 47, name: \"Shaquille O'Neal\"}) |\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) | (\"player101\" :player{age: 36, name: \"Tony Parker\"})      |\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) | (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})    |\n+----------------------------------------------------+----------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_vids","title":"Match VIDs","text":"

              You can use the VID to match a vertex. The id() function can retrieve the VID of a vertex.

              nebula> MATCH (v) \\\n        WHERE id(v) == 'player101' \\\n        RETURN v;\n+-----------------------------------------------------+\n| v                                                   |\n+-----------------------------------------------------+\n| (\"player101\" :player{age: 36, name: \"Tony Parker\"}) |\n+-----------------------------------------------------+\n

              To match multiple VIDs, use WHERE id(v) IN [vid_list] or WHERE id(v) IN {vid_list}.

              nebula> MATCH (v:player { name: 'Tim Duncan' })--(v2) \\\n        WHERE id(v2) IN [\"player101\", \"player102\"] \\\n        RETURN v2;\n+-----------------------------------------------------------+\n| v2                                                        |\n+-----------------------------------------------------------+\n| (\"player101\" :player{age: 36, name: \"Tony Parker\"})       |\n| (\"player101\" :player{age: 36, name: \"Tony Parker\"})       |\n| (\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"}) |\n+-----------------------------------------------------------+\n\nnebula> MATCH (v) WHERE id(v) IN {\"player100\", \"player101\"} \\\n        RETURN v.player.name AS name;\n+---------------+\n| name          |\n+---------------+\n| \"Tony Parker\" |\n| \"Tim Duncan\"  |\n+---------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_connected_vertices","title":"Match connected vertices","text":"

              You can use the -- symbol to represent edges of both directions and match vertices connected by these edges.

              Legacy version compatibility

              In nGQL 1.x, the -- symbol is used for inline comments. Starting from nGQL 2.x, the -- symbol represents an incoming or outgoing edge.

              nebula> MATCH (v:player{name:\"Tim Duncan\"})--(v2) \\\n        RETURN v2.player.name AS Name;\n+---------------------+\n| Name                |\n+---------------------+\n| \"Manu Ginobili\"     |\n| \"Manu Ginobili\"     |\n| \"Tiago Splitter\"    |\n...\n

              You can add a > or < to the -- symbol to specify the direction of an edge.

              In the following example, --> represents an edge that starts from v and points to v2. To v, this is an outgoing edge, and to v2 this is an incoming edge.

              nebula> MATCH (v:player{name:\"Tim Duncan\"})-->(v2:player) \\\n        RETURN v2.player.name AS Name;\n+-----------------+\n| Name            |\n+-----------------+\n| \"Manu Ginobili\" |\n| \"Tony Parker\"   |\n+-----------------+\n

              To query the properties of the target vertices, use the CASE expression.

              nebula> MATCH (v:player{name:\"Tim Duncan\"})--(v2) \\\n        RETURN \\\n        CASE WHEN v2.team.name IS NOT NULL \\\n        THEN v2.team.name  \\\n        WHEN v2.player.name IS NOT NULL \\\n        THEN v2.player.name END AS Name;\n+---------------------+\n| Name                |\n+---------------------+\n| \"Manu Ginobili\"     |\n| \"Manu Ginobili\"     |\n| \"Spurs\"             |\n| \"Dejounte Murray\"   |\n...\n

              To extend the pattern, you can add more vertices and edges.

              nebula> MATCH (v:player{name:\"Tim Duncan\"})-->(v2)<--(v3) \\\n        RETURN v3.player.name AS Name;\n+---------------------+\n| Name                |\n+---------------------+\n| \"Dejounte Murray\"   |\n| \"LaMarcus Aldridge\" |\n| \"Marco Belinelli\"   |\n...\n

              If you do not need to refer to a vertex, you can omit the variable representing it in the parentheses.

              nebula> MATCH (v:player{name:\"Tim Duncan\"})-->()<--(v3) \\\n        RETURN v3.player.name AS Name;\n+---------------------+\n| Name                |\n+---------------------+\n| \"Dejounte Murray\"   |\n| \"LaMarcus Aldridge\" |\n| \"Marco Belinelli\"   |\n...\n
              "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_paths","title":"Match paths","text":"

              Connected vertices and edges form a path. You can use a user-defined variable to name a path as follows.

              nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-->(v2) \\\n        RETURN p;\n+--------------------------------------------------------------------------------------------------------------------------------------+\n| p                                                                                                                                    |\n+--------------------------------------------------------------------------------------------------------------------------------------+\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:serve@0 {end_year: 2016, start_year: 1997}]->(\"team204\" :team{name: \"Spurs\"})> |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})>   |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player125\" :player{age: 41, name: \"Manu Ginobili\"})> |\n+--------------------------------------------------------------------------------------------------------------------------------------+\n

              OpenCypher compatibility

              In nGQL, the @ symbol represents the rank of an edge, but openCypher has no such concept.

              "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_edges","title":"Match edges","text":"
              nebula> MATCH ()<-[e]-() \\\n        RETURN e \\\n        LIMIT 3;\n+----------------------------------------------------+\n| e                                                  |\n+----------------------------------------------------+\n| [:follow \"player101\"->\"player102\" @0 {degree: 90}] |\n| [:follow \"player103\"->\"player102\" @0 {degree: 70}] |\n| [:follow \"player135\"->\"player102\" @0 {degree: 80}] |\n+----------------------------------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_edge_types","title":"Match edge types","text":"

              Just like vertices, you can specify edge types with :<edge_type> in a pattern. For example: -[e:follow]-.

              OpenCypher compatibility

              • In NebulaGraph versions earlier than 3.0.0, the prerequisite for matching a edge type is that the edge type itself has an index or a certain property of the edge type has an index.
              • Starting from version 3.0.0, there is no need to create an index for matching a edge type, but you need to use LIMIT to limit the number of output results and you must specify the direction of the edge.
              • Starting from NebulaGraph 3.5.0, you can use the MATCH statement to match edges without creating an index for edge type or using LIMIT to restrict the number of output results.
              nebula> MATCH ()-[e:follow]->() \\\n        RETURN e;\n+----------------------------------------------------+\n| e                                                  |\n+----------------------------------------------------+\n| [:follow \"player102\"->\"player100\" @0 {degree: 75}] |\n| [:follow \"player102\"->\"player101\" @0 {degree: 75}] |\n| [:follow \"player129\"->\"player116\" @0 {degree: 90}] |\n...\n
              "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_edge_type_properties","title":"Match edge type properties","text":"

              Note

              The prerequisite for matching an edge type property is that the edge type itself has an index of the corresponding property. Otherwise, you cannot execute the MATCH statement to match the property.

              You can specify edge type properties with {<prop_name>: <prop_value>} in a pattern. For example: [e:follow{likeness:95}].

              nebula> MATCH (v:player{name:\"Tim Duncan\"})-[e:follow{degree:95}]->(v2) \\\n        RETURN e;\n+--------------------------------------------------------+\n| e                                                      |\n+--------------------------------------------------------+\n| [:follow \"player100\"->\"player101\" @0 {degree: 95}]     |\n| [:follow \"player100\"->\"player125\" @0 {degree: 95}]     |\n+--------------------------------------------------------+\n

              Use the WHERE clause to directly get all the edges with the edge property value 90.

              nebula> MATCH ()-[e]->() \\\n        WITH e, properties(e) as props, keys(properties(e)) as kk \\\n        WHERE [i in kk where props[i] == 90] \\\n        RETURN e;\n+----------------------------------------------------+\n| e                                                  |\n+----------------------------------------------------+\n| [:follow \"player125\"->\"player100\" @0 {degree: 90}] |\n| [:follow \"player140\"->\"player114\" @0 {degree: 90}] |\n| [:follow \"player133\"->\"player144\" @0 {degree: 90}] |\n| [:follow \"player133\"->\"player114\" @0 {degree: 90}] |\n...\n+----------------------------------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_multiple_edge_types","title":"Match multiple edge types","text":"

              The | symbol can help matching multiple edge types. For example: [e:follow|:serve]. The English colon (:) before the first edge type cannot be omitted, but the English colon before the subsequent edge type can be omitted, such as [e:follow|serve].

              nebula> MATCH (v:player{name:\"Tim Duncan\"})-[e:follow|:serve]->(v2) \\\n        RETURN e;\n+---------------------------------------------------------------------------+\n| e                                                                         |\n+---------------------------------------------------------------------------+\n| [:follow \"player100\"->\"player101\" @0 {degree: 95}]                        |\n| [:follow \"player100\"->\"player125\" @0 {degree: 95}]                        |\n| [:serve \"player100\"->\"team204\" @0 {end_year: 2016, start_year: 1997}]     |\n+---------------------------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_multiple_edges","title":"Match multiple edges","text":"

              You can extend a pattern to match multiple edges in a path.

              nebula> MATCH (v:player{name:\"Tim Duncan\"})-[]->(v2)<-[e:serve]-(v3) \\\n        RETURN v2, v3;\n+----------------------------------+-----------------------------------------------------------+\n| v2                               | v3                                                        |\n+----------------------------------+-----------------------------------------------------------+\n| (\"team204\" :team{name: \"Spurs\"}) | (\"player104\" :player{age: 32, name: \"Marco Belinelli\"})   |\n| (\"team204\" :team{name: \"Spurs\"}) | (\"player101\" :player{age: 36, name: \"Tony Parker\"})       |\n| (\"team204\" :team{name: \"Spurs\"}) | (\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"}) |\n...\n
              "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_fixed-length_paths","title":"Match fixed-length paths","text":"

              You can use the :<edge_type>*<hop> pattern to match a fixed-length path. hop must be a non-negative integer.

              nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow*2]->(v2) \\\n        RETURN DISTINCT v2 AS Friends;\n+-----------------------------------------------------------+\n| Friends                                                   |\n+-----------------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"})        |\n| (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})     |\n| (\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"}) |\n+-----------------------------------------------------------+\n

              If hop is 0, the pattern will match the source vertex of the path.

              nebula> MATCH (v:player{name:\"Tim Duncan\"}) -[*0]-> (v2) \\\n        RETURN v2;\n+----------------------------------------------------+\n| v2                                                 |\n+----------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) |\n+----------------------------------------------------+\n

              Note

              When you conditionally filter on multi-hop edges, such as -[e:follow*2]->, note that the e is a list of edges instead of a single edge.

              For example, the following statement is correct from the syntax point of view which may not get your expected query result, because the e is a list without the .degree property.

              nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow*2]->(v2) \\\n        WHERE e.degree > 1 \\\n        RETURN DISTINCT v2 AS Friends;\n

              The correct statement is as follows:

              nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow*2]->(v2) \\\n        WHERE ALL(e_ in e WHERE e_.degree > 0) \\\n        RETURN DISTINCT v2 AS Friends;\n

              Further, the following statement is for filtering the properties of the first-hop edge in multi-hop edges:

              nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow*2]->(v2) \\\n        WHERE e[0].degree > 98 \\\n        RETURN DISTINCT v2 AS Friends;\n
              "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_variable-length_paths","title":"Match variable-length paths","text":"

              You can use the :<edge_type>*[minHop..maxHop] pattern to match variable-length paths.minHop and maxHop are optional and default to 1 and infinity respectively.

              Caution

              If maxHop is not set, it may cause the Graph service to OOM. Execute this command with caution.

              Parameter Description minHop Optional. minHop indicates the minimum length of the path, which must be a non-negative integer. The default value is 1. maxHop Optional. maxHop indicates the maximum length of the path, which must be a non-negative integer. The default value is infinity.

              If neither minHop nor maxHop is specified, and only :<edge_type>* is set, the default values are applied to both, i.e., minHop is 1 and maxHop is infinity.

              nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow*]->(v2) \\\n        RETURN v2 AS Friends;\n+-----------------------------------------------------------+\n| Friends                                                   |\n+-----------------------------------------------------------+\n| (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})     |\n| (\"player101\" :player{age: 36, name: \"Tony Parker\"})       |\n...\n\nnebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow*1..3]->(v2) \\\n        RETURN v2 AS Friends;\n+-----------------------------------------------------------+\n| Friends                                                   |\n+-----------------------------------------------------------+\n| (\"player101\" :player{age: 36, name: \"Tony Parker\"})       |\n| (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})     |\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"})        |\n...\n\nnebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow*1..]->(v2) \\\n        RETURN v2 AS Friends;\n+-----------------------------------------------------------+\n| Friends                                                   |\n+-----------------------------------------------------------+\n| (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})     |\n| (\"player101\" :player{age: 36, name: \"Tony Parker\"})       |\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"})        |\n...\n

              You can use the DISTINCT keyword to aggregate duplicate results.

              nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow*1..3]->(v2:player) \\\n        RETURN DISTINCT v2 AS Friends, count(v2);\n+-----------------------------------------------------------+-----------+\n| Friends                                                   | count(v2) |\n+-----------------------------------------------------------+-----------+\n| (\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"}) | 1         |\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"})        | 4         |\n| (\"player101\" :player{age: 36, name: \"Tony Parker\"})       | 3         |\n| (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})     | 3         |\n+-----------------------------------------------------------+-----------+\n

              If minHop is 0, the pattern will match the source vertex of the path. Compared to the preceding statement, the following example uses 0 as the minHop. So in the following result set, \"Tim Duncan\" is counted one more time than it is in the preceding result set because it is the source vertex.

              nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow*0..3]->(v2:player) \\\n        RETURN DISTINCT v2 AS Friends, count(v2);\n+-----------------------------------------------------------+-----------+\n| Friends                                                   | count(v2) |\n+-----------------------------------------------------------+-----------+\n| (\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"}) | 1         |\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"})        | 5         |\n| (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})     | 3         |\n| (\"player101\" :player{age: 36, name: \"Tony Parker\"})       | 3         |\n+-----------------------------------------------------------+-----------+\n

              Note

              When using the variable e to match fixed-length or variable-length paths in a pattern, such as -[e:follow*0..3]->, it is not supported to reference e in other patterns. For example, the following statement is not supported.

              nebula> MATCH (v:player)-[e:like*1..3]->(n) \\\n        WHERE (n)-[e*1..4]->(:player) \\\n        RETURN v;\n
              "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_variable-length_paths_with_multiple_edge_types","title":"Match variable-length paths with multiple edge types","text":"

              You can specify multiple edge types in a fixed-length or variable-length pattern. In this case, hop, minHop, and maxHop take effect on all edge types.

              nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[e:follow|serve*2]->(v2) \\\n        RETURN DISTINCT v2;\n+-----------------------------------------------------------+\n| v2                                                        |\n+-----------------------------------------------------------+\n| (\"team204\" :team{name: \"Spurs\"})                          |\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"})        |\n| (\"team215\" :team{name: \"Hornets\"})                        |\n| (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})     |\n| (\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"}) |\n+-----------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_multiple_patterns","title":"Match multiple patterns","text":"

              You can separate multiple patterns with commas (,).

              nebula> CREATE TAG INDEX IF NOT EXISTS team_index ON team(name(20));\nnebula> REBUILD TAG INDEX team_index;\nnebula> MATCH (v1:player{name:\"Tim Duncan\"}), (v2:team{name:\"Spurs\"}) \\\n        RETURN v1,v2;\n+----------------------------------------------------+----------------------------------+\n| v1                                                 | v2                               |\n+----------------------------------------------------+----------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) | (\"team204\" :team{name: \"Spurs\"}) |\n+----------------------------------------------------+----------------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#match_shortest_paths","title":"Match shortest paths","text":"

              The allShortestPaths function can be used to find all shortest paths between two vertices.

              nebula> MATCH p = allShortestPaths((a:player{name:\"Tim Duncan\"})-[e*..5]-(b:player{name:\"Tony Parker\"})) \\\n        RETURN p;\n+------------------------------------------------------------------------------------------------------------------------------------+\n| p                                                                                                                                  |\n+------------------------------------------------------------------------------------------------------------------------------------+\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})<-[:follow@0 {degree: 95}]-(\"player101\" :player{age: 36, name: \"Tony Parker\"})> |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})> |\n+------------------------------------------------------------------------------------------------------------------------------------+\n

              The shortestPath function can be used to find a single shortest path between two vertices.

              nebula> MATCH p = shortestPath((a:player{name:\"Tim Duncan\"})-[e*..5]-(b:player{name:\"Tony Parker\"})) \\\n        RETURN p;\n+------------------------------------------------------------------------------------------------------------------------------------+\n| p                                                                                                                                  |\n+------------------------------------------------------------------------------------------------------------------------------------+\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})<-[:follow@0 {degree: 95}]-(\"player101\" :player{age: 36, name: \"Tony Parker\"})> |\n+------------------------------------------------------------------------------------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#retrieve_with_multiple_match","title":"Retrieve with multiple match","text":"

              Multiple MATCH can be used when different patterns have different filtering criteria and return the rows that exactly match the pattern.

              nebula> MATCH (m)-[]->(n) WHERE id(m)==\"player100\" \\\n        MATCH (n)-[]->(l) WHERE id(n)==\"player125\" \\\n        RETURN id(m),id(n),id(l);\n+-------------+-------------+-------------+\n| id(m)       | id(n)       | id(l)       |\n+-------------+-------------+-------------+\n| \"player100\" | \"player125\" | \"team204\"   |\n| \"player100\" | \"player125\" | \"player100\" |\n+-------------+-------------+-------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/2.match/#retrieve_with_optional_match","title":"Retrieve with optional match","text":"

              See OPTIONAL MATCH.

              Caution

              In NebulaGraph, the performance and resource usage of the MATCH statement have been optimized. But we still recommend to use GO, LOOKUP, |, and FETCH instead of MATCH when high performance is required.

              "},{"location":"3.ngql-guide/7.general-query-statements/3.go/","title":"GO","text":"

              The GO statement is used in the NebulaGraph database to traverse the graph starting from a given starting vertex with specified filters and return results.

              "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

              This topic applies to native nGQL only.

              "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#syntax","title":"Syntax","text":"
              GO [[<M> TO] <N> {STEP|STEPS}] FROM <vertex_list>\nOVER <edge_type_list> [{REVERSELY | BIDIRECT}]\n[ WHERE <conditions>\u00a0]\nYIELD\u00a0[DISTINCT] <return_list>\n[{SAMPLE <sample_list> | <limit_by_list_clause>}]\n[| GROUP BY {col_name | expr | position} YIELD <col_name>]\n[| ORDER BY <expression> [{ASC | DESC}]]\n[| LIMIT [<offset>,] <number_rows>];\n\n<vertex_list> ::=\n    <vid> [, <vid> ...]\n\n<edge_type_list> ::=\n   edge_type [, edge_type ...]\n   | *\n\n<return_list> ::=\n    <col_name> [AS <col_alias>] [, <col_name> [AS <col_alias>] ...]\n
              • <N> {STEP|STEPS}: specifies the hop number. If not specified, the default value for N is one. When N is zero, NebulaGraph does not traverse any edges and returns nothing.

                Note

                The path type of the GO statement is walk, which means both vertices and edges can be repeatedly visited in graph traversal. For more information, see Path.

              • M TO N {STEP|STEPS}: traverses from M to N hops. When M is zero, the output is the same as that of M is one. That is, the output of GO 0 TO 2 and GO 1 TO 2 are the same.
              • <vertex_list>: represents a list of vertex IDs separated by commas.
              • <edge_type_list>: represents a list of edge types which the traversal can go through.
              • REVERSELY | BIDIRECT: defines the direction of the query. By default, the GO statement searches for outgoing edges of <vertex_list>. If REVERSELY is set, GO searches for incoming edges. If BIDIRECT is set, GO searches for edges of both directions. The direction of the query can be checked by returning the <edge_type>._type field using YIELD. A positive value indicates an outgoing edge, while a negative value indicates an incoming edge.
              • WHERE <expression>: specifies the traversal filters. You can use the WHERE clause for the source vertices, the edges, and the destination vertices. You can use it together with AND, OR, NOT, and XOR. For more information, see WHERE.

                Note

                • There are some restrictions for the WHERE clause when you traverse along with multiple edge types. For example, WHERE edge1.prop1 > edge2.prop2 is not supported.
                • The GO statement is executed by traversing all the vertices and then filtering according to the filter condition.
              • YIELD [DISTINCT] <return_list>: defines the output to be returned. It is recommended to use the Schema-related functions to fill in <return_list>. src(edge), dst(edge), type(edge) ), rank(edge), etc., are currently supported, while nested functions are not. For more information, see YIELD.
              • SAMPLE <sample_list>: takes samples from the result set. For more information, see SAMPLE.
              • <limit_by_list_clause>: limits the number of outputs during the traversal process. For more information, see LIMIT.
              • GROUP BY: groups the output into subgroups based on the value of the specified property. For more information, see GROUP BY. After grouping, you need to use YIELD again to define the output that needs to be returned.
              • ORDER BY: sorts outputs with specified orders. For more information, see ORDER BY.

                Note

                When the sorting method is not specified, the output orders can be different for the same query.

              • LIMIT [<offset>,] <number_rows>]: limits the number of rows of the output. For more information, see LIMIT.
              "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#notes","title":"Notes","text":"
              • The WHERE and YIELD clauses in GO statements usually utilize property reference symbols ($^ and $$) or the properties($^) and properties($$) functions to specify the properties of a vertex; use the properties(edge) function to specify the properties of an edge. For details, see Property Reference Symbols and Schema-related Functions.
              • When referring to the result of a subquery in a compound GO statement, you need to set a name for the result and pass it to the next subquery using the pipe symbol |, and reference the name of the result in the next subquery using $-. See the Pipe Operator for details.
              • When the queried property has no value, the returned result displays NULL.
              "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#cases_and_examples","title":"Cases and examples","text":""},{"location":"3.ngql-guide/7.general-query-statements/3.go/#to_query_the_immediate_neighbors_of_a_vertex","title":"To query the immediate neighbors of a vertex","text":"

              For example, to query the team that a person belongs to, assuming that the person is connected to the team by the serve edge and the person's ID is player102.

              nebula>\u00a0GO FROM \"player102\" OVER serve YIELD dst(edge);\n+-----------+\n| dst(EDGE) |\n+-----------+\n| \"team203\" |\n| \"team204\" |\n+-----------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#to_query_all_vertices_within_a_specified_number_of_hops_from_a_starting_vertex","title":"To query all vertices within a specified number of hops from a starting vertex","text":"

              For example, to query all vertices within two hops of a person vertex, assuming that the person is connected to other people by the follow edge and the person's ID is player102.

              # Return all vertices that are 2 hops away from the player102 vertex.\nnebula> GO 2 STEPS FROM \"player102\" OVER follow YIELD dst(edge);\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player101\" |\n| \"player125\" |\n| \"player100\" |\n| \"player102\" |\n| \"player125\" |\n+-------------+\n
              # Return all vertices within 1 or 2 hops away from the player102 vertex.\nnebula> GO 1 TO 2 STEPS FROM \"player100\" OVER follow \\\n        YIELD dst(edge) AS destination;\n+-------------+\n| destination |\n+-------------+\n| \"player101\" |\n| \"player125\" |\n...\n\n# The following MATCH query has the same semantics as the previous GO query.\nnebula> MATCH (v) -[e:follow*1..2]->(v2) \\\n        WHERE id(v) == \"player100\" \\\n        RETURN id(v2) AS destination;\n+-------------+\n| destination |\n+-------------+\n| \"player100\" |\n| \"player102\" |\n...\n
              "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#to_add_filtering_conditions","title":"To add filtering conditions","text":"

              Case: To query the vertices and edges that meet specific conditions.

              For example, use the WHERE clause to query the edges with specific properties between the starting vertex and the destination vertex.

              nebula>\u00a0GO FROM \"player100\", \"player102\" OVER serve \\\n        WHERE properties(edge).start_year > 1995 \\\n        YIELD DISTINCT properties($$).name AS team_name, properties(edge).start_year AS start_year, properties($^).name AS player_name;\n\n+-----------------+------------+---------------------+\n| team_name       | start_year | player_name         |\n+-----------------+------------+---------------------+\n| \"Spurs\"         | 1997       | \"Tim Duncan\"        |\n| \"Trail Blazers\" | 2006       | \"LaMarcus Aldridge\" |\n| \"Spurs\"         | 2015       | \"LaMarcus Aldridge\" |\n+-----------------+------------+---------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#to_query_all_edges","title":"To query all edges","text":"

              Case: To query all edges that are connected to the starting vertex.

              # Return all edges that are connected to the player102 vertex.\nnebula> GO FROM \"player102\" OVER * BIDIRECT YIELD edge AS e;\n+-----------------------------------------------------------------------+\n| e                                                                     |\n+-----------------------------------------------------------------------+\n| [:follow \"player101\"->\"player102\" @0 {degree: 90}]                    |\n| [:follow \"player103\"->\"player102\" @0 {degree: 70}]                    |\n| [:follow \"player135\"->\"player102\" @0 {degree: 80}]                    |\n| [:follow \"player102\"->\"player100\" @0 {degree: 75}]                    |\n| [:follow \"player102\"->\"player101\" @0 {degree: 75}]                    |\n| [:serve \"player102\"->\"team203\" @0 {end_year: 2015, start_year: 2006}] |\n| [:serve \"player102\"->\"team204\" @0 {end_year: 2019, start_year: 2015}] |\n+-----------------------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#to_query_multiple_edge_types","title":"To query multiple edge types","text":"

              Case: To query multiple edge types that are connected to the starting vertex. You can specify multiple edge types or the * symbol to query multiple edge types.

              For example, to query the follow and serve edges that are connected to the starting vertex.

              nebula> GO FROM \"player100\" OVER follow, serve \\\n        YIELD properties(edge).degree, properties(edge).start_year;\n+-------------------------+-----------------------------+\n| properties(EDGE).degree | properties(EDGE).start_year |\n+-------------------------+-----------------------------+\n| 95                      | __NULL__                    |\n| 95                      | __NULL__                    |\n| __NULL__                | 1997                        |\n+-------------------------+-----------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#to_query_incoming_vertices_using_the_reversely_keyword","title":"To query incoming vertices using the REVERSELY keyword","text":"
              # Return the vertices that follow the player100 vertex.\nnebula> GO FROM \"player100\" OVER follow REVERSELY \\\n        YIELD src(edge) AS destination;\n+-------------+\n| destination |\n+-------------+\n| \"player101\" |\n| \"player102\" |\n...\n\n# The following MATCH query has the same semantics as the previous GO query.\nnebula> MATCH (v)<-[e:follow]- (v2) WHERE id(v) == 'player100' \\\n        RETURN id(v2) AS destination;\n+-------------+\n| destination |\n+-------------+\n| \"player101\" |\n| \"player102\" |\n...\n
              "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#to_use_subqueries_as_the_starting_vertice_of_a_graph_traversal","title":"To use subqueries as the starting vertice of a graph traversal","text":"
              # Return the friends of the player100 vertex and the teams that the friends belong to.\nnebula> GO FROM \"player100\" OVER follow REVERSELY \\\n        YIELD src(edge) AS id | \\\n        GO FROM $-.id OVER serve \\\n        WHERE properties($^).age > 20 \\\n        YIELD properties($^).name AS FriendOf, properties($$).name AS Team;\n+---------------------+-----------------+\n| FriendOf            | Team            |\n+---------------------+-----------------+\n| \"Boris Diaw\"        | \"Spurs\"         |\n| \"Boris Diaw\"        | \"Jazz\"          |\n| \"Boris Diaw\"        | \"Suns\"          |\n...\n\n# The following MATCH query has the same semantics as the previous GO query.\nnebula> MATCH (v)<-[e:follow]- (v2)-[e2:serve]->(v3)  \\\n        WHERE id(v) == 'player100' \\\n        RETURN v2.player.name AS FriendOf, v3.team.name AS Team;\n+---------------------+-----------------+\n| FriendOf            | Team            |\n+---------------------+-----------------+\n| \"Boris Diaw\"        | \"Spurs\"         |\n| \"Boris Diaw\"        | \"Jazz\"          |\n| \"Boris Diaw\"        | \"Suns\"          |\n...\n
              "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#to_use_group_by_to_group_the_output","title":"To use GROUP BY to group the output","text":"

              You need to use YIELD to define the output that needs to be returned after grouping.

              # The following example collects the outputs according to age.\nnebula> GO 2 STEPS FROM \"player100\" OVER follow \\\n        YIELD src(edge) AS src, dst(edge) AS dst, properties($$).age AS age \\\n        | GROUP BY $-.dst \\\n        YIELD $-.dst AS dst, collect_set($-.src) AS src, collect($-.age) AS age;\n+-------------+----------------------------+----------+\n| dst         | src                        | age      |\n+-------------+----------------------------+----------+\n| \"player125\" | {\"player101\"}              | [41]     |\n| \"player100\" | {\"player125\", \"player101\"} | [42, 42] |\n| \"player102\" | {\"player101\"}              | [33]     |\n+-------------+----------------------------+----------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#to_use_order_by_and_limit_to_sort_and_limit_the_output","title":"To use ORDER BY and LIMIT to sort and limit the output","text":"
              # The following example groups the outputs and restricts the number of rows of the outputs.\nnebula> $a = GO FROM \"player100\" OVER follow YIELD src(edge) AS src, dst(edge) AS dst; \\\n        GO 2 STEPS FROM $a.dst OVER follow \\\n        YIELD $a.src AS src, $a.dst, src(edge), dst(edge) \\\n        | ORDER BY $-.src | OFFSET 1 LIMIT 2;\n+-------------+-------------+-------------+-------------+\n| src         | $a.dst      | src(EDGE)   | dst(EDGE)   |\n+-------------+-------------+-------------+-------------+\n| \"player100\" | \"player101\" | \"player100\" | \"player101\" |\n| \"player100\" | \"player125\" | \"player100\" | \"player125\" |\n+-------------+-------------+-------------+-------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/3.go/#other_examples","title":"Other examples","text":"
              # The following example determines if $$.player.name IS NOT EMPTY.\nnebula> GO FROM \"player100\" OVER follow WHERE properties($$).name IS NOT EMPTY YIELD dst(edge);\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player125\" |\n| \"player101\" |\n+-------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/","title":"FETCH","text":"

              The FETCH statement retrieves the properties of the specified vertices or edges.

              "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#opencypher_compatibility","title":"OpenCypher Compatibility","text":"

              This topic applies to native nGQL only.

              "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#fetch_vertex_properties","title":"Fetch vertex properties","text":""},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#syntax","title":"Syntax","text":"
              FETCH PROP ON {<tag_name>[, tag_name ...] | *}\n<vid> [, vid ...]\nYIELD [DISTINCT] <return_list> [AS <alias>];\n
              Parameter Description tag_name The name of the tag. * Represents all the tags in the current graph space. vid The vertex ID. YIELD Define the output to be returned. For details, see YIELD. AS Set an alias."},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#fetch_vertex_properties_by_one_tag","title":"Fetch vertex properties by one tag","text":"

              Specify a tag in the FETCH statement to fetch the vertex properties by that tag.

              nebula> FETCH PROP ON player \"player100\" YIELD properties(vertex);\n+-------------------------------+\n| properties(VERTEX)            |\n+-------------------------------+\n| {age: 42, name: \"Tim Duncan\"} |\n+-------------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#fetch_specific_properties_of_a_vertex","title":"Fetch specific properties of a vertex","text":"

              Use a YIELD clause to specify the properties to be returned.

              nebula> FETCH PROP ON player \"player100\" \\\n        YIELD properties(vertex).name AS name;\n+--------------+\n| name         |\n+--------------+\n| \"Tim Duncan\" |\n+--------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#fetch_properties_of_multiple_vertices","title":"Fetch properties of multiple vertices","text":"

              Specify multiple VIDs (vertex IDs) to fetch properties of multiple vertices. Separate the VIDs with commas.

              nebula> FETCH PROP ON player \"player101\", \"player102\", \"player103\" YIELD properties(vertex);\n+--------------------------------------+\n| properties(VERTEX)                   |\n+--------------------------------------+\n| {age: 33, name: \"LaMarcus Aldridge\"} |\n| {age: 36, name: \"Tony Parker\"}       |\n| {age: 32, name: \"Rudy Gay\"}          |\n+--------------------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#fetch_vertex_properties_by_multiple_tags","title":"Fetch vertex properties by multiple tags","text":"

              Specify multiple tags in the FETCH statement to fetch the vertex properties by the tags. Separate the tags with commas.

              # The following example creates a new tag t1.\nnebula> CREATE TAG IF NOT EXISTS t1(a string, b int);\n\n# The following example attaches t1 to the vertex \"player100\".\nnebula> INSERT VERTEX t1(a, b) VALUES \"player100\":(\"Hello\", 100);\n\n# The following example fetches the properties of vertex \"player100\" by the tags player and t1.\nnebula> FETCH PROP ON player, t1 \"player100\" YIELD vertex AS v;\n+----------------------------------------------------------------------------+\n| v                                                                          |\n+----------------------------------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"} :t1{a: \"Hello\", b: 100}) |\n+----------------------------------------------------------------------------+\n

              You can combine multiple tags with multiple VIDs in a FETCH statement.

              nebula> FETCH PROP ON player, t1 \"player100\", \"player103\" YIELD vertex AS v;\n+----------------------------------------------------------------------------+\n| v                                                                          |\n+----------------------------------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"} :t1{a: \"Hello\", b: 100}) |\n| (\"player103\" :player{age: 32, name: \"Rudy Gay\"})                           |\n+----------------------------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#fetch_vertex_properties_by_all_tags","title":"Fetch vertex properties by all tags","text":"

              Set an asterisk symbol * to fetch properties by all tags in the current graph space.

              nebula> FETCH PROP ON * \"player100\", \"player106\", \"team200\" YIELD vertex AS v;\n+----------------------------------------------------------------------------+\n| v                                                                          |\n+----------------------------------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"} :t1{a: \"Hello\", b: 100}) |\n| (\"player106\" :player{age: 25, name: \"Kyle Anderson\"})                      |\n| (\"team200\" :team{name: \"Warriors\"})                                        |\n+----------------------------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#fetch_edge_properties","title":"Fetch edge properties","text":""},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#syntax_1","title":"Syntax","text":"
              FETCH PROP ON <edge_type> <src_vid> -> <dst_vid>[@<rank>] [, <src_vid> -> <dst_vid> ...]\nYIELD <output>;\n
              Parameter Description edge_type The name of the edge type. src_vid The VID of the source vertex. It specifies the start of an edge. dst_vid The VID of the destination vertex. It specifies the end of an edge. rank The rank of the edge. It is optional and defaults to 0. It distinguishes an edge from other edges with the same edge type, source vertex, destination vertex, and rank. YIELD Define the output to be returned. For details, see YIELD."},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#fetch_all_properties_of_an_edge","title":"Fetch all properties of an edge","text":"

              The following statement fetches all the properties of the serve edge that connects vertex \"player100\" and vertex \"team204\".

              nebula> FETCH PROP ON serve \"player100\" -> \"team204\" YIELD properties(edge);\n+------------------------------------+\n| properties(EDGE)                   |\n+------------------------------------+\n| {end_year: 2016, start_year: 1997} |\n+------------------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#fetch_specific_properties_of_an_edge","title":"Fetch specific properties of an edge","text":"

              Use a YIELD clause to fetch specific properties of an edge.

              nebula> FETCH PROP ON serve \"player100\" -> \"team204\"    \\\n        YIELD properties(edge).start_year;\n+-----------------------------+\n| properties(EDGE).start_year |\n+-----------------------------+\n| 1997                        |\n+-----------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#fetch_properties_of_multiple_edges","title":"Fetch properties of multiple edges","text":"

              Specify multiple edge patterns (<src_vid> -> <dst_vid>[@<rank>]) to fetch properties of multiple edges. Separate the edge patterns with commas.

              nebula> FETCH PROP ON serve \"player100\" -> \"team204\", \"player133\" -> \"team202\" YIELD edge AS e;\n+-----------------------------------------------------------------------+\n| e                                                                     |\n+-----------------------------------------------------------------------+\n| [:serve \"player100\"->\"team204\" @0 {end_year: 2016, start_year: 1997}] |\n| [:serve \"player133\"->\"team202\" @0 {end_year: 2011, start_year: 2002}] |\n+-----------------------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#fetch_properties_based_on_edge_rank","title":"Fetch properties based on edge rank","text":"

              If there are multiple edges with the same edge type, source vertex, and destination vertex, you can specify the rank to fetch the properties on the correct edge.

              # The following example inserts edges with different ranks and property values.\nnebula> insert edge serve(start_year,end_year) \\\n        values \"player100\"->\"team204\"@1:(1998, 2017);\n\nnebula> insert edge serve(start_year,end_year) \\\n        values \"player100\"->\"team204\"@2:(1990, 2018);\n\n# By default, the FETCH statement returns the edge whose rank is 0.\nnebula> FETCH PROP ON serve \"player100\" -> \"team204\" YIELD edge AS e;\n+-----------------------------------------------------------------------+\n| e                                                                     |\n+-----------------------------------------------------------------------+\n| [:serve \"player100\"->\"team204\" @0 {end_year: 2016, start_year: 1997}] |\n+-----------------------------------------------------------------------+\n\n# To fetch on an edge whose rank is not 0, set its rank in the FETCH statement.\nnebula> FETCH PROP ON serve \"player100\" -> \"team204\"@1 YIELD edge AS e;\n+-----------------------------------------------------------------------+\n| e                                                                     |\n+-----------------------------------------------------------------------+\n| [:serve \"player100\"->\"team204\" @1 {end_year: 2017, start_year: 1998}] |\n+-----------------------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/4.fetch/#use_fetch_in_composite_queries","title":"Use FETCH in composite queries","text":"

              A common way to use FETCH is to combine it with native nGQL such as GO.

              The following statement returns the degree values of the follow edges that start from vertex \"player101\".

              nebula> GO FROM \"player101\" OVER follow \\\n        YIELD src(edge) AS s, dst(edge) AS d \\\n        | FETCH PROP ON follow $-.s -> $-.d \\\n        YIELD properties(edge).degree;\n+-------------------------+\n| properties(EDGE).degree |\n+-------------------------+\n| 95                      |\n| 90                      |\n| 95                      |\n+-------------------------+\n

              Or you can use user-defined variables to construct similar queries.

              nebula> $var = GO FROM \"player101\" OVER follow \\\n        YIELD src(edge) AS s, dst(edge) AS d; \\\n        FETCH PROP ON follow $var.s -> $var.d \\\n        YIELD properties(edge).degree;\n+-------------------------+\n| properties(EDGE).degree |\n+-------------------------+\n| 95                      |\n| 90                      |\n| 95                      |\n+-------------------------+\n

              For more information about composite queries, see Composite queries (clause structure).

              "},{"location":"3.ngql-guide/7.general-query-statements/5.lookup/","title":"LOOKUP","text":"

              The LOOKUP statement traverses data based on indexes. You can use LOOKUP for the following purposes:

              • Search for the specific data based on conditions defined by the WHERE clause.
              • List vertices with a tag: retrieve the VID of all vertices with a tag.
              • List edges with an edge type: retrieve the source vertex IDs, destination vertex IDs, and ranks of all edges with an edge type.
              • Count the number of vertices or edges with a tag or an edge type.
              "},{"location":"3.ngql-guide/7.general-query-statements/5.lookup/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

              This topic applies to native nGQL only.

              "},{"location":"3.ngql-guide/7.general-query-statements/5.lookup/#precautions","title":"Precautions","text":"
              • Correct use of indexes can speed up queries, but indexes can dramatically reduce the write performance. The performance can be greatly reduced. DO NOT use indexes in production environments unless you are fully aware of their influences on your service.
              • If the specified property is not indexed when using the LOOKUP statement, NebulaGraph randomly selects one of the available indexes.

                For example, the tag player has two properties, name and age. Both the tag player itself and the property name have indexes, but the property age has no indexes. When running LOOKUP ON player WHERE player.age == 36 YIELD player.name;, NebulaGraph randomly uses one of the indexes of the tag player and the property name. You can use the EXPLAIN statement to check the selected index.

                Legacy version compatibility

                Before the release 2.5.0, if the specified property is not indexed when using the LOOKUP statement, NebulaGraph reports an error and does not use other indexes.

              "},{"location":"3.ngql-guide/7.general-query-statements/5.lookup/#prerequisites","title":"Prerequisites","text":"

              Before using the LOOKUP statement, make sure that at least one index is created. If there are already related vertices, edges, or properties before an index is created, the user must rebuild the index after creating the index to make it valid.

              "},{"location":"3.ngql-guide/7.general-query-statements/5.lookup/#syntax","title":"Syntax","text":"
              LOOKUP ON {<vertex_tag> | <edge_type>}\n[WHERE <expression> [AND <expression> ...]]\nYIELD [DISTINCT] <return_list> [AS <alias>];\n\n<return_list>\n    <prop_name> [AS <col_alias>] [, <prop_name> [AS <prop_alias>] ...];\n
              • WHERE <expression>: filters data with specified conditions. Both AND and OR are supported between different expressions. For more information, see WHERE.
              • YIELD: Define the output to be returned. For details, see YIELD.
              • DISTINCT: Aggregate the output results and return the de-duplicated result set.
              • AS: Set an alias.
              "},{"location":"3.ngql-guide/7.general-query-statements/5.lookup/#limitations_of_using_where_in_lookup","title":"Limitations of using WHERE in LOOKUP","text":"

              The WHERE clause in a LOOKUP statement does not support the following operations:

              • $- and $^.
              • Filter rank().
              • In relational expressions, operators are not supported to have field names on both sides, such as tagName.prop1> tagName.prop2.
              • Nested AliasProp expressions in operation expressions and function expressions are not supported.
              • The XOR operation is not supported.
              • String operations other than STARTS WITH are not supported.
              • Graph patterns.
              "},{"location":"3.ngql-guide/7.general-query-statements/5.lookup/#retrieve_vertices","title":"Retrieve vertices","text":"

              The following example returns vertices whose name is Tony Parker and the tag is player.

              nebula> CREATE TAG INDEX IF NOT EXISTS index_player ON player(name(30), age);\n\nnebula> REBUILD TAG INDEX index_player;\n+------------+\n| New Job Id |\n+------------+\n| 15         |\n+------------+\n\nnebula> LOOKUP ON player \\\n        WHERE player.name == \"Tony Parker\" \\\n        YIELD id(vertex);\n+---------------+\n| id(VERTEX)    |\n+---------------+\n| \"player101\"   |\n+---------------+\n\nnebula> LOOKUP ON player \\\n        WHERE player.name == \"Tony Parker\" \\\n        YIELD properties(vertex).name AS name, properties(vertex).age AS age;\n+---------------+-----+\n| name          | age |\n+---------------+-----+\n| \"Tony Parker\" | 36  |\n+---------------+-----+\n\nnebula> LOOKUP ON player \\\n        WHERE player.age  > 45 \\\n        YIELD id(vertex);\n+-------------+\n| id(VERTEX)  |\n+-------------+\n| \"player144\" |\n| \"player140\" |\n+-------------+\n\nnebula> LOOKUP ON player \\\n        WHERE player.name STARTS WITH \"B\" \\\n        AND player.age IN [22,30] \\\n        YIELD properties(vertex).name, properties(vertex).age;\n+-------------------------+------------------------+\n| properties(VERTEX).name | properties(VERTEX).age |\n+-------------------------+------------------------+\n| \"Ben Simmons\"           | 22                     |\n| \"Blake Griffin\"         | 30                     |\n+-------------------------+------------------------+\n\nnebula> LOOKUP ON player \\\n        WHERE player.name == \"Kobe Bryant\"\\\n        YIELD id(vertex) AS VertexID, properties(vertex).name AS name |\\\n        GO FROM $-.VertexID OVER serve \\\n        YIELD $-.name, properties(edge).start_year, properties(edge).end_year, properties($$).name;\n+---------------+-----------------------------+---------------------------+---------------------+\n| $-.name       | properties(EDGE).start_year | properties(EDGE).end_year | properties($$).name |\n+---------------+-----------------------------+---------------------------+---------------------+\n| \"Kobe Bryant\" | 1996                        | 2016                      | \"Lakers\"            |\n+---------------+-----------------------------+---------------------------+---------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/5.lookup/#retrieve_edges","title":"Retrieve edges","text":"

              The following example returns edges whose degree is 90 and the edge type is follow.

              nebula> CREATE EDGE INDEX IF NOT EXISTS index_follow ON follow(degree);\n\nnebula> REBUILD EDGE INDEX index_follow;\n+------------+\n| New Job Id |\n+------------+\n| 62         |\n+------------+\n\nnebula> LOOKUP ON follow \\\n        WHERE follow.degree == 90 YIELD edge AS e;\n+----------------------------------------------------+\n| e                                                  |\n+----------------------------------------------------+\n| [:follow \"player109\"->\"player125\" @0 {degree: 90}] |\n| [:follow \"player118\"->\"player120\" @0 {degree: 90}] |\n| [:follow \"player118\"->\"player131\" @0 {degree: 90}] |\n...\n\nnebula> LOOKUP ON follow \\\n        WHERE follow.degree == 90 \\\n        YIELD properties(edge).degree;\n+-------------+-------------+---------+-------------------------+\n| SrcVID      | DstVID      | Ranking | properties(EDGE).degree |\n+-------------+-------------+---------+-------------------------+\n| \"player150\" | \"player143\" | 0       | 90                      |\n| \"player150\" | \"player137\" | 0       | 90                      |\n| \"player148\" | \"player136\" | 0       | 90                      |\n...\n\nnebula> LOOKUP ON follow \\\n        WHERE follow.degree == 60 \\\n        YIELD dst(edge) AS DstVID, properties(edge).degree AS Degree |\\\n        GO FROM $-.DstVID OVER serve \\\n        YIELD $-.DstVID, properties(edge).start_year, properties(edge).end_year, properties($$).name;\n+-------------+-----------------------------+---------------------------+---------------------+\n| $-.DstVID   | properties(EDGE).start_year | properties(EDGE).end_year | properties($$).name |\n+-------------+-----------------------------+---------------------------+---------------------+\n| \"player105\" | 2010                        | 2018                      | \"Spurs\"             |\n| \"player105\" | 2009                        | 2010                      | \"Cavaliers\"         |\n| \"player105\" | 2018                        | 2019                      | \"Raptors\"           |\n+-------------+-----------------------------+---------------------------+---------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/5.lookup/#list_vertices_or_edges_with_a_tag_or_an_edge_type","title":"List vertices or edges with a tag or an edge type","text":"

              To list vertices or edges with a tag or an edge type, at least one index must exist on the tag, the edge type, or its property.

              For example, if there is a player tag with a name property and an age property, to retrieve the VID of all vertices tagged with player, there has to be an index on the player tag itself, the name property, or the age property.

              • The following example shows how to retrieve the VID of all vertices tagged with player.
                nebula> CREATE TAG IF NOT EXISTS player(name string,age int);\n\nnebula> CREATE TAG INDEX IF NOT EXISTS player_index on player();\n\nnebula> REBUILD TAG INDEX player_index;\n+------------+\n| New Job Id |\n+------------+\n| 66         |\n+------------+\n\nnebula> INSERT VERTEX player(name,age) \\\n        VALUES \"player100\":(\"Tim Duncan\", 42), \"player101\":(\"Tony Parker\", 36);\n\nThe following statement retrieves the VID of all vertices with the tag `player`. It is similar to `MATCH (n:player) RETURN id(n) /*, n */`.\n\nnebula> LOOKUP ON player YIELD id(vertex);\n+-------------+\n| id(VERTEX)  |\n+-------------+\n| \"player100\" |\n| \"player101\" |\n...\n
              • The following example shows how to retrieve the source Vertex IDs, destination vertex IDs, and ranks of all edges of the follow edge type.
                nebula> CREATE EDGE IF NOT EXISTS follow(degree int);\n\nnebula> CREATE EDGE INDEX IF NOT EXISTS follow_index on follow();\n\nnebula> REBUILD EDGE INDEX follow_index;\n+------------+\n| New Job Id |\n+------------+\n| 88         |\n+------------+\n\nnebula> INSERT EDGE follow(degree) \\\n        VALUES \"player100\"->\"player101\":(95);\n\nThe following statement retrieves all edges with the edge type `follow`. It is similar to `MATCH (s)-[e:follow]->(d) RETURN id(s), rank(e), id(d) /*, type(e) */`.\n\nnebula)> LOOKUP ON follow YIELD edge AS e;\n+-----------------------------------------------------+\n| e                                                   |\n+-----------------------------------------------------+\n| [:follow \"player105\"->\"player100\" @0 {degree: 70}]  |\n| [:follow \"player105\"->\"player116\" @0 {degree: 80}]  |\n| [:follow \"player109\"->\"player100\" @0 {degree: 80}]  |\n...\n
              "},{"location":"3.ngql-guide/7.general-query-statements/5.lookup/#count_the_numbers_of_vertices_or_edges","title":"Count the numbers of vertices or edges","text":"

              The following example shows how to count the number of vertices tagged with player and edges of the follow edge type.

              nebula> LOOKUP ON player YIELD id(vertex)|\\\n        YIELD COUNT(*) AS Player_Number;\n+---------------+\n| Player_Number |\n+---------------+\n| 51            |\n+---------------+\n\nnebula> LOOKUP ON follow YIELD edge AS e| \\\n        YIELD COUNT(*) AS Follow_Number;\n+---------------+\n| Follow_Number |\n+---------------+\n| 81            |\n+---------------+\n

              Note

              You can also use SHOW STATS to count the numbers of vertices or edges.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.find-path/","title":"FIND PATH","text":"

              The FIND PATH statement finds the paths between the selected source vertices and destination vertices.

              Note

              To improve the query performance with the FIND PATH statement, you can add the num_operator_threads parameter in the nebula-graphd.conf configuration file. The value range of the num_operator_threads parameter is [2, 10] and make sure that the value is not greater than the number of CPU cores of the machine where the graphd service is deployed. It is recommended to set the value to the number of CPU cores of the machine where the graphd service is deployed. For more information about the nebula-graphd.conf configuration file, see nebula-graphd.conf.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.find-path/#syntax","title":"Syntax","text":"
              FIND { SHORTEST | SINGLE SHORTEST | ALL | NOLOOP } PATH [WITH PROP] FROM <vertex_id_list> TO <vertex_id_list>\nOVER <edge_type_list> [REVERSELY | BIDIRECT] \n[<WHERE clause>] [UPTO <N> {STEP|STEPS}] \nYIELD path as <alias>\n[| ORDER BY $-.path] [| LIMIT <M>];\n\n<vertex_id_list> ::=\n    [vertex_id [, vertex_id] ...]\n
              • SHORTEST finds all the shortest path.
              • ALL finds all the paths.
              • NOLOOP finds the paths without circles.
              • WITH PROP shows properties of vertices and edges. If not specified, properties will be hidden.
              • <vertex_id_list> is a list of vertex IDs separated with commas (,). It supports $- and $var.
              • <edge_type_list> is a list of edge types separated with commas (,). * is all edge types.
              • REVERSELY | BIDIRECT specifies the direction. REVERSELY is reverse graph traversal while BIDIRECT is bidirectional graph traversal.
              • <WHERE clause> filters properties of edges.
              • UPTO <N> {STEP|STEPS} is the maximum hop number of the path. The default value is 5.
              • ORDER BY $-.path specifies the order of the returned paths. For information about the order rules, see Path.
              • LIMIT <M> specifies the maximum number of rows to return.

              Note

              The path type of FIND PATH is trail. Only vertices can be repeatedly visited in graph traversal. For more information, see Path.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.find-path/#limitations","title":"Limitations","text":"
              • When a list of source and/or destination vertex IDs are specified, the paths between any source vertices and the destination vertices will be returned.
              • There can be cycles when searching all paths.
              • FIND PATH only supports filtering properties of edges with WHERE clauses. Filtering properties of vertices and functions are not supported for now.
              • FIND PATH is a single-thread procedure, so it uses much memory.
              "},{"location":"3.ngql-guide/7.general-query-statements/6.find-path/#examples","title":"Examples","text":"

              A returned path is like (<vertex_id>)-[:<edge_type_name>@<rank>]->(<vertex_id).

              nebula> FIND SHORTEST PATH FROM \"player102\" TO \"team204\" OVER * YIELD path AS p;\n+--------------------------------------------+\n| p                                          |\n+--------------------------------------------+\n| <(\"player102\")-[:serve@0 {}]->(\"team204\")> |\n+--------------------------------------------+\n
              nebula> FIND SHORTEST PATH WITH PROP FROM \"team204\" TO \"player100\" OVER * REVERSELY YIELD path AS p;\n+--------------------------------------------------------------------------------------------------------------------------------------+\n| p                                                                                                                                    |\n+--------------------------------------------------------------------------------------------------------------------------------------+\n| <(\"team204\" :team{name: \"Spurs\"})<-[:serve@0 {end_year: 2016, start_year: 1997}]-(\"player100\" :player{age: 42, name: \"Tim Duncan\"})> |\n+--------------------------------------------------------------------------------------------------------------------------------------+\n
              nebula> FIND SHORTEST PATH FROM \"player100\", \"player130\" TO \"player132\", \"player133\" OVER * BIDIRECT UPTO 18 STEPS YIELD path as p;\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| p                                                                                                                                                                                              |\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| <(\"player100\")<-[:follow@0 {}]-(\"player144\")<-[:follow@0 {}]-(\"player133\")>                                                                                                                    |\n| <(\"player100\")-[:serve@0 {}]->(\"team204\")<-[:serve@0 {}]-(\"player138\")-[:serve@0 {}]->(\"team225\")<-[:serve@0 {}]-(\"player132\")>                                                                |\n| <(\"player130\")-[:serve@0 {}]->(\"team219\")<-[:serve@0 {}]-(\"player112\")-[:serve@0 {}]->(\"team204\")<-[:serve@0 {}]-(\"player114\")<-[:follow@0 {}]-(\"player133\")>                                  |\n| <(\"player130\")-[:serve@0 {}]->(\"team219\")<-[:serve@0 {}]-(\"player109\")-[:serve@0 {}]->(\"team204\")<-[:serve@0 {}]-(\"player114\")<-[:follow@0 {}]-(\"player133\")>                                  |\n| <(\"player130\")-[:serve@0 {}]->(\"team219\")<-[:serve@0 {}]-(\"player104\")-[:serve@20182019 {}]->(\"team204\")<-[:serve@0 {}]-(\"player114\")<-[:follow@0 {}]-(\"player133\")>                           |\n| ...                                                                                                                                                                                            |\n| <(\"player130\")-[:serve@0 {}]->(\"team219\")<-[:serve@0 {}]-(\"player112\")-[:serve@0 {}]->(\"team204\")<-[:serve@0 {}]-(\"player138\")-[:serve@0 {}]->(\"team225\")<-[:serve@0 {}]-(\"player132\")>        |\n| <(\"player130\")-[:serve@0 {}]->(\"team219\")<-[:serve@0 {}]-(\"player109\")-[:serve@0 {}]->(\"team204\")<-[:serve@0 {}]-(\"player138\")-[:serve@0 {}]->(\"team225\")<-[:serve@0 {}]-(\"player132\")>        |\n| ...                                                                                                                                                                                            |\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n
              nebula> FIND ALL PATH FROM \"player100\" TO \"team204\" OVER * WHERE follow.degree is EMPTY or follow.degree >=0 YIELD path AS p;\n+------------------------------------------------------------------------------+\n| p                                                                            |\n+------------------------------------------------------------------------------+\n| <(\"player100\")-[:serve@0 {}]->(\"team204\")>                                   |\n| <(\"player100\")-[:follow@0 {}]->(\"player125\")-[:serve@0 {}]->(\"team204\")>     |\n| <(\"player100\")-[:follow@0 {}]->(\"player101\")-[:serve@0 {}]->(\"team204\")>     |\n|...                                                                           |\n+------------------------------------------------------------------------------+\n
              nebula> FIND NOLOOP PATH FROM \"player100\" TO \"team204\" OVER * YIELD path AS p;\n+--------------------------------------------------------------------------------------------------------+\n| p                                                                                                      |\n+--------------------------------------------------------------------------------------------------------+\n| <(\"player100\")-[:serve@0 {}]->(\"team204\")>                                                             |\n| <(\"player100\")-[:follow@0 {}]->(\"player125\")-[:serve@0 {}]->(\"team204\")>                               |\n| <(\"player100\")-[:follow@0 {}]->(\"player101\")-[:serve@0 {}]->(\"team204\")>                               |\n| <(\"player100\")-[:follow@0 {}]->(\"player101\")-[:follow@0 {}]->(\"player125\")-[:serve@0 {}]->(\"team204\")> |\n| <(\"player100\")-[:follow@0 {}]->(\"player101\")-[:follow@0 {}]->(\"player102\")-[:serve@0 {}]->(\"team204\")> |\n+--------------------------------------------------------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.find-path/#faq","title":"FAQ","text":""},{"location":"3.ngql-guide/7.general-query-statements/6.find-path/#does_it_support_the_where_clause_to_achieve_conditional_filtering_during_graph_traversal","title":"Does it support the WHERE clause to achieve conditional filtering during graph traversal?","text":"

              FIND PATH only supports filtering properties of edges with WHERE clauses, such as WHERE follow.degree is EMPTY or follow.degree >=0.

              Filtering properties of vertices is not supported for now.

              "},{"location":"3.ngql-guide/7.general-query-statements/7.get-subgraph/","title":"GET SUBGRAPH","text":"

              The GET SUBGRAPH statement returns a subgraph that is generated by traversing a graph starting from a specified vertex. GET SUBGRAPH statements allow you to specify the number of steps and the type or direction of edges during the traversal.

              "},{"location":"3.ngql-guide/7.general-query-statements/7.get-subgraph/#syntax","title":"Syntax","text":"
              GET SUBGRAPH [WITH PROP] [<step_count> {STEP|STEPS}] FROM {<vid>, <vid>...}\n[{IN | OUT | BOTH} <edge_type>, <edge_type>...]\n[WHERE <expression> [AND <expression> ...]]\nYIELD {[VERTICES AS <vertex_alias>] [,EDGES AS <edge_alias>]};\n
              • WITH PROP shows the properties. If not specified, the properties will be hidden.
              • step_count specifies the number of hops from the source vertices and returns the subgraph from 0 to step_count hops. It must be a non-negative integer. Its default value is 1.
              • vid specifies the vertex IDs.
              • edge_type specifies the edge type. You can use IN, OUT, and BOTH to specify the traversal direction of the edge type. The default is BOTH.
              • <WHERE clause> specifies the filter conditions for the traversal, which can be used with the boolean operator AND.
              • YIELD defines the output that needs to be returned. You can return only vertices or edges. A column alias must be set.

              Note

              The path type of GET SUBGRAPH is trail. Only vertices can be repeatedly visited in graph traversal. For more information, see Path.

              "},{"location":"3.ngql-guide/7.general-query-statements/7.get-subgraph/#limitations","title":"Limitations","text":"

              While using the WHERE clause in a GET SUBGRAPH statement, note the following restrictions:

              • Only support the AND operator.
              • Only support filter destination vertex, the vertex format must be $$.tagName.propName.
              • Support filter edge, the edge format must be edge_type.propName.
              • Support math functions, aggregate functions, string functions, datetime functions, type conversion functions and general functions in list functions.
              • Not support aggregate functions, schema-related functions, conditional expression, predicate functions, geography function and user-defined functions.
              "},{"location":"3.ngql-guide/7.general-query-statements/7.get-subgraph/#examples","title":"Examples","text":"

              The following graph is used as the sample.

              Insert the test data:

              nebula> CREATE SPACE IF NOT EXISTS subgraph(partition_num=15, replica_factor=1, vid_type=fixed_string(30));\nnebula> USE subgraph;\nnebula> CREATE TAG IF NOT EXISTS player(name string, age int);\nnebula> CREATE TAG IF NOT EXISTS team(name string);\nnebula> CREATE EDGE IF NOT EXISTS follow(degree int);\nnebula> CREATE EDGE IF NOT EXISTS serve(start_year int, end_year int);\nnebula> INSERT VERTEX player(name, age) VALUES \"player100\":(\"Tim Duncan\", 42);\nnebula> INSERT VERTEX player(name, age) VALUES \"player101\":(\"Tony Parker\", 36);\nnebula> INSERT VERTEX player(name, age) VALUES \"player102\":(\"LaMarcus Aldridge\", 33);\nnebula> INSERT VERTEX team(name) VALUES \"team203\":(\"Trail Blazers\"), \"team204\":(\"Spurs\");\nnebula> INSERT EDGE follow(degree) VALUES \"player101\" -> \"player100\":(95);\nnebula> INSERT EDGE follow(degree) VALUES \"player101\" -> \"player102\":(90);\nnebula> INSERT EDGE follow(degree) VALUES \"player102\" -> \"player100\":(75);\nnebula> INSERT EDGE serve(start_year, end_year) VALUES \"player101\" -> \"team204\":(1999, 2018),\"player102\" -> \"team203\":(2006,  2015);\n
              • This example goes one step from the vertex player101 over all edge types and gets the subgraph.
                nebula> GET SUBGRAPH 1 STEPS FROM \"player101\" YIELD VERTICES AS nodes, EDGES AS relationships;\n+-------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+\n| nodes                                                                   | relationships                                                                                                               |\n+-------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+\n| [(\"player101\" :player{})]                                               | [[:serve \"player101\"->\"team204\" @0 {}], [:follow \"player101\"->\"player100\" @0 {}], [:follow \"player101\"->\"player102\" @0 {}]] |\n| [(\"team204\" :team{}), (\"player100\" :player{}), (\"player102\" :player{})] | [[:follow \"player102\"->\"player100\" @0 {}]]                                                                                  |\n+-------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+\n

                The returned subgraph is as follows.

              • This example goes one step from the vertex player101 over incoming follow edges and gets the subgraph.
                nebula> GET SUBGRAPH 1 STEPS FROM \"player101\" IN follow YIELD VERTICES AS nodes, EDGES AS relationships;\n+---------------------------+---------------+\n| nodes                     | relationships |\n+---------------------------+---------------+\n| [(\"player101\" :player{})] | []            |\n+---------------------------+---------------+\n

                There is no incoming follow edge to player101, so only the vertex player101 is returned.

              • This example goes one step from the vertex player101 over outgoing serve edges, gets the subgraph, and shows the property of the edge.
                nebula> GET SUBGRAPH WITH PROP 1 STEPS FROM \"player101\" OUT serve YIELD VERTICES AS nodes, EDGES AS relationships;\n+-------------------------------------------------------+-------------------------------------------------------------------------+\n| nodes                                                 | relationships                                                           |\n+-------------------------------------------------------+-------------------------------------------------------------------------+\n| [(\"player101\" :player{age: 36, name: \"Tony Parker\"})] | [[:serve \"player101\"->\"team204\" @0 {end_year: 2018, start_year: 1999}]] |\n| [(\"team204\" :team{name: \"Spurs\"})]                    | []                                                                      |\n+-------------------------------------------------------+-------------------------------------------------------------------------+\n

                The returned subgraph is as follows.

              • This example goes two steps from the vertex player101 over follow edges, filters by degree > 90 and age > 30, and shows the properties of edges.
                nebula> GET SUBGRAPH WITH PROP 2 STEPS FROM \"player101\" \\\n    WHERE follow.degree > 90 AND $$.player.age > 30 \\\n    YIELD VERTICES AS nodes, EDGES AS relationships;\n+-------------------------------------------------------+------------------------------------------------------+\n| nodes                                                 | relationships                                        |\n+-------------------------------------------------------+------------------------------------------------------+\n| [(\"player101\" :player{age: 36, name: \"Tony Parker\"})] | [[:follow \"player101\"->\"player100\" @0 {degree: 95}]] |\n| [(\"player100\" :player{age: 42, name: \"Tim Duncan\"})]  | []                                                   |\n+-------------------------------------------------------+------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/7.get-subgraph/#faq","title":"FAQ","text":""},{"location":"3.ngql-guide/7.general-query-statements/7.get-subgraph/#why_is_the_number_of_hops_in_the_returned_result_greater_than_step_count","title":"Why is the number of hops in the returned result greater than step_count?","text":"

              To show the completeness of the subgraph, an additional hop is made on all vertices that meet the conditions. The following graph is used as the sample.

              • The returned paths of GET SUBGRAPH 1 STEPS FROM \"A\"; are A->B, B->A, and A->C. To show the completeness of the subgraph, an additional hop is made on all vertices that meet the conditions, namely B->C.
              • The returned path of GET SUBGRAPH 1 STEPS FROM \"A\" IN follow; is B->A. To show the completeness of the subgraph, an additional hop is made on all vertices that meet the conditions, namely A->B.

              If you only query paths or vertices that meet the conditions, we suggest you use MATCH or GO. The example is as follows.

              nebula> MATCH p= (v:player) -- (v2) WHERE id(v)==\"A\" RETURN p;\nnebula> GO 1 STEPS FROM \"A\" OVER follow YIELD src(edge),dst(edge);\n
              "},{"location":"3.ngql-guide/7.general-query-statements/7.get-subgraph/#why_is_the_number_of_hops_in_the_returned_result_lower_than_step_count","title":"Why is the number of hops in the returned result lower than step_count?","text":"

              The query stops when there is not enough subgraph data and will not return the null value.

              nebula> GET SUBGRAPH 100 STEPS FROM \"player101\" OUT follow YIELD VERTICES AS nodes, EDGES AS relationships;\n+----------------------------------------------------+--------------------------------------------------------------------------------------+\n| nodes                                              | relationships                                                                        |\n+----------------------------------------------------+--------------------------------------------------------------------------------------+\n| [(\"player101\" :player{})]                          | [[:follow \"player101\"->\"player100\" @0 {}], [:follow \"player101\"->\"player102\" @0 {}]] |\n| [(\"player100\" :player{}), (\"player102\" :player{})] | [[:follow \"player102\"->\"player100\" @0 {}]]                                           |\n+----------------------------------------------------+--------------------------------------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/optional-match/","title":"OPTIONAL MATCH","text":"

              Caution

              The feature is still in beta. It will continue to be optimized.

              The OPTIONAL MATCH clause is used to search for the pattern described in it. OPTIONAL MATCH matches patterns against your graph database, just like MATCH does. The difference is that if no matches are found, OPTIONAL MATCH will use a null for missing parts of the pattern.

              "},{"location":"3.ngql-guide/7.general-query-statements/optional-match/#opencypher_compatibility","title":"OpenCypher Compatibility","text":"

              This topic applies to the openCypher syntax in nGQL only.

              "},{"location":"3.ngql-guide/7.general-query-statements/optional-match/#limitations","title":"Limitations","text":"

              The WHERE clause cannot be used in an OPTIONAL MATCH clause.

              "},{"location":"3.ngql-guide/7.general-query-statements/optional-match/#example","title":"Example","text":"

              The example of the use of OPTIONAL MATCH in the MATCH statement is as follows:

              nebula> MATCH (m)-[]->(n) WHERE id(m)==\"player100\" \\\n        OPTIONAL MATCH (n)-[]->(l) \\\n        RETURN id(m),id(n),id(l);\n+-------------+-------------+-------------+\n| id(m)       | id(n)       | id(l)       |\n+-------------+-------------+-------------+\n| \"player100\" | \"team204\"   | __NULL__    |\n| \"player100\" | \"player101\" | \"team204\"   |\n| \"player100\" | \"player101\" | \"team215\"   |\n| \"player100\" | \"player101\" | \"player100\" |\n| \"player100\" | \"player101\" | \"player102\" |\n| \"player100\" | \"player101\" | \"player125\" |\n| \"player100\" | \"player125\" | \"team204\"   |\n| \"player100\" | \"player125\" | \"player100\" |\n+-------------+-------------+-------------+\n

              Using multiple MATCH instead of OPTIONAL MATCH returns rows that match the pattern exactly. The example is as follows:

              nebula> MATCH (m)-[]->(n) WHERE id(m)==\"player100\" \\\n        MATCH (n)-[]->(l) \\\n        RETURN id(m),id(n),id(l);\n+-------------+-------------+-------------+\n| id(m)       | id(n)       | id(l)       |\n+-------------+-------------+-------------+\n| \"player100\" | \"player101\" | \"team204\"   |\n| \"player100\" | \"player101\" | \"team215\"   |\n| \"player100\" | \"player101\" | \"player100\" |\n| \"player100\" | \"player101\" | \"player102\" |\n| \"player100\" | \"player101\" | \"player125\" |\n| \"player100\" | \"player125\" | \"team204\"   |\n| \"player100\" | \"player125\" | \"player100\" |\n+-------------+-------------+-------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/1.show-charset/","title":"SHOW CHARSET","text":"

              The SHOW CHARSET statement shows the available character sets.

              Currently available types are utf8 and utf8mb4. The default charset type is utf8. NebulaGraph extends the uft8 to support four-byte characters. Therefore utf8 and utf8mb4 are equivalent.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/1.show-charset/#syntax","title":"Syntax","text":"
              SHOW CHARSET;\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/1.show-charset/#example","title":"Example","text":"
              nebula> SHOW CHARSET;\n+---------+-----------------+-------------------+--------+\n| Charset | Description     | Default collation | Maxlen |\n+---------+-----------------+-------------------+--------+\n| \"utf8\"  | \"UTF-8 Unicode\" | \"utf8_bin\"        | 4      |\n+---------+-----------------+-------------------+--------+\n
              Parameter Description Charset The name of the character set. Description The description of the character set. Default collation The default collation of the character set. Maxlen The maximum number of bytes required to store one character."},{"location":"3.ngql-guide/7.general-query-statements/6.show/10.show-roles/","title":"SHOW ROLES","text":"

              The SHOW ROLES statement shows the roles that are assigned to a user account.

              The return message differs according to the role of the user who is running this statement:

              • If the user is a GOD or ADMIN and is granted access to the specified graph space, NebulaGraph shows all roles in this graph space except for GOD.
              • If the user is a DBA, USER, or GUEST and is granted access to the specified graph space, NebulaGraph shows the user's own role in this graph space.
              • If the user does not have access to the specified graph space, NebulaGraph returns PermissionError.

              For more information about roles, see Roles and privileges.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/10.show-roles/#syntax","title":"Syntax","text":"
              SHOW ROLES IN <space_name>;\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/10.show-roles/#example","title":"Example","text":"
              nebula> SHOW ROLES in basketballplayer;\n+---------+-----------+\n| Account | Role Type |\n+---------+-----------+\n| \"user1\" | \"ADMIN\"   |\n+---------+-----------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/11.show-snapshots/","title":"SHOW SNAPSHOTS","text":"

              The SHOW SNAPSHOTS statement shows the information of all the snapshots.

              For how to create a snapshot and backup data, see Snapshot.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/11.show-snapshots/#role_requirement","title":"Role requirement","text":"

              Only the root user who has the GOD role can use the SHOW SNAPSHOTS statement.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/11.show-snapshots/#syntax","title":"Syntax","text":"
              SHOW SNAPSHOTS;\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/11.show-snapshots/#example","title":"Example","text":"
              nebula> SHOW SNAPSHOTS;\n+--------------------------------+---------+-----------------------------------------------------+\n| Name                           | Status  | Hosts                                               |\n+--------------------------------+---------+-----------------------------------------------------+\n| \"SNAPSHOT_2020_12_16_11_13_55\" | \"VALID\" | \"storaged0:9779, storaged1:9779, storaged2:9779\"    |\n| \"SNAPSHOT_2020_12_16_11_14_10\" | \"VALID\" | \"storaged0:9779, storaged1:9779, storaged2:9779\"    |\n+--------------------------------+---------+-----------------------------------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/12.show-spaces/","title":"SHOW SPACES","text":"

              The SHOW SPACES statement shows existing graph spaces in NebulaGraph.

              For how to create a graph space, see CREATE SPACE.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/12.show-spaces/#syntax","title":"Syntax","text":"
              SHOW SPACES;\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/12.show-spaces/#example","title":"Example","text":"
              nebula> SHOW SPACES;\n+---------------------+\n| Name                |\n+---------------------+\n| \"docs\"              |\n| \"basketballplayer\"  |\n+---------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/14.show-stats/","title":"SHOW STATS","text":"

              The SHOW STATS statement shows the statistics of the graph space collected by the latest SUBMIT JOB STATS job.

              The statistics include the following information:

              • The number of vertices in the graph space
              • The number of edges in the graph space
              • The number of vertices of each tag
              • The number of edges of each edge type

              Warning

              The data returned by SHOW STATS is not real-time. The returned data is collected by the latest SUBMIT JOB STATS job and may include TTL-expired data. The expired data will be deleted and not included in the statistics the next time the Compaction operation is performed.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/14.show-stats/#prerequisites","title":"Prerequisites","text":"

              You have to run the SUBMIT JOB STATS statement in the graph space where you want to collect statistics. For more information, see SUBMIT JOB STATS.

              Caution

              The result of the SHOW STATS statement is based on the last executed SUBMIT JOB STATS statement. If you want to update the result, run SUBMIT JOB STATS again. Otherwise the statistics will be wrong.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/14.show-stats/#syntax","title":"Syntax","text":"
              SHOW STATS;\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/14.show-stats/#examples","title":"Examples","text":"
              # Choose a graph space.\nnebula> USE basketballplayer;\n\n# Start SUBMIT JOB STATS.\nnebula> SUBMIT JOB STATS;\n+------------+\n| New Job Id |\n+------------+\n| 98         |\n+------------+\n\n# Make sure the job executes successfully.\nnebula> SHOW JOB 98;\n+----------------+---------------+------------+----------------------------+----------------------------+-------------+\n| Job Id(TaskId) | Command(Dest) | Status     | Start Time                 | Stop Time                  | Error Code  |\n+----------------+---------------+------------+----------------------------+----------------------------+-------------+\n| 98             | \"STATS\"       | \"FINISHED\" | 2021-11-01T09:33:21.000000 | 2021-11-01T09:33:21.000000 | \"SUCCEEDED\" |\n| 0              | \"storaged2\"   | \"FINISHED\" | 2021-11-01T09:33:21.000000 | 2021-11-01T09:33:21.000000 | \"SUCCEEDED\" |\n| 1              | \"storaged0\"   | \"FINISHED\" | 2021-11-01T09:33:21.000000 | 2021-11-01T09:33:21.000000 | \"SUCCEEDED\" |\n| 2              | \"storaged1\"   | \"FINISHED\" | 2021-11-01T09:33:21.000000 | 2021-11-01T09:33:21.000000 | \"SUCCEEDED\" |\n| \"Total:3\"      | \"Succeeded:3\" | \"Failed:0\" | \"In Progress:0\"            | \"\"                         | \"\"          |\n+----------------+---------------+------------+----------------------------+----------------------------+-------------+\n\n# Show the statistics of the graph space.\nnebula> SHOW STATS;\n+---------+------------+-------+\n| Type    | Name       | Count |\n+---------+------------+-------+\n| \"Tag\"   | \"player\"   | 51    |\n| \"Tag\"   | \"team\"     | 30    |\n| \"Edge\"  | \"follow\"   | 81    |\n| \"Edge\"  | \"serve\"    | 152   |\n| \"Space\" | \"vertices\" | 81    |\n| \"Space\" | \"edges\"    | 233   |\n+---------+------------+-------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/15.show-tags-edges/","title":"SHOW TAGS/EDGES","text":"

              The SHOW TAGS statement shows all the tags in the current graph space.

              The SHOW EDGES statement shows all the edge types in the current graph space.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/15.show-tags-edges/#syntax","title":"Syntax","text":"
              SHOW {TAGS | EDGES};\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/15.show-tags-edges/#examples","title":"Examples","text":"
              nebula> SHOW TAGS;\n+----------+\n| Name     |\n+----------+\n| \"player\" |\n| \"star\"   |\n| \"team\"   |\n+----------+\n\nnebula> SHOW EDGES;\n+----------+\n| Name     |\n+----------+\n| \"follow\" |\n| \"serve\"  |\n+----------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/16.show-users/","title":"SHOW USERS","text":"

              The SHOW USERS statement shows the user information.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/16.show-users/#role_requirement","title":"Role requirement","text":"

              Only the root user who has the GOD role can use the SHOW USERS statement.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/16.show-users/#syntax","title":"Syntax","text":"
              SHOW USERS;\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/16.show-users/#example","title":"Example","text":"
              nebula> SHOW USERS;\n+---------+-----------------+\n| Account | IP Whitelist    |\n+---------+-----------------+\n| \"root\"  | \"\"              |\n| \"user1\" | \"\"              |\n| \"user2\" | \"192.168.10.10\" |\n+---------+-----------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/17.show-sessions/","title":"SHOW SESSIONS","text":"

              When a user logs in to the database, a corresponding session will be created and users can query for session information.

              The SHOW SESSIONS statement shows the information of all the sessions. It can also show a specified session with its ID.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/17.show-sessions/#precautions","title":"Precautions","text":"
              • The client will call the API release to release the session and clear the session information when you run exit after the operation ends. If you exit the database in an unexpected way and the session timeout duration is not set via session_idle_timeout_secs in nebula-graphd.conf, the session will not be released automatically. For those sessions that are not automatically released, you need to delete them manually. For details, see KILL SESSIONS.
              • SHOW SESSIONS queries the session information of all the Graph services.
              • SHOW LOCAL SESSIONS queries the session information of the currently connected Graph service and does not query the session information of other Graph services.
              • SHOW SESSION <Session_Id> queries the session information with a specific session id.
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/17.show-sessions/#syntax","title":"Syntax","text":"
              SHOW [LOCAL] SESSIONS;\nSHOW SESSION <Session_Id>;\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/17.show-sessions/#examples","title":"Examples","text":"
              nebula> SHOW SESSIONS;\n+------------------+----------+--------------------+----------------------------+----------------------------+------------------+----------+--------------------+\n| SessionId        | UserName | SpaceName          | CreateTime                 | UpdateTime                 | GraphAddr        | Timezone | ClientIp           |\n+------------------+----------+--------------------+----------------------------+----------------------------+------------------+----------+--------------------+\n| 1651220858102296 | \"root\"   | \"basketballplayer\" | 2022-04-29T08:27:38.102296 | 2022-04-29T08:50:46.282921 | \"127.0.0.1:9669\" | 0        | \"127.0.0.1\" |\n| 1651199330300991 | \"root\"   | \"basketballplayer\" | 2022-04-29T02:28:50.300991 | 2022-04-29T08:16:28.339038 | \"127.0.0.1:9669\" | 0        | \"127.0.0.1\" |\n| 1651112899847744 | \"root\"   | \"basketballplayer\" | 2022-04-28T02:28:19.847744 | 2022-04-28T08:17:44.470210 | \"127.0.0.1:9669\" | 0        | \"127.0.0.1\" |\n| 1651041092662100 | \"root\"   | \"basketballplayer\" | 2022-04-27T06:31:32.662100 | 2022-04-27T07:01:25.200978 | \"127.0.0.1:9669\" | 0        | \"127.0.0.1\" |\n| 1650959429593975 | \"root\"   | \"basketballplayer\" | 2022-04-26T07:50:29.593975 | 2022-04-26T07:51:47.184810 | \"127.0.0.1:9669\" | 0        | \"127.0.0.1\" |\n| 1650958897679595 | \"root\"   | \"\"                 | 2022-04-26T07:41:37.679595 | 2022-04-26T07:41:37.683802 | \"127.0.0.1:9669\" | 0        | \"127.0.0.1\" |\n+------------------+----------+--------------------+----------------------------+----------------------------+------------------+----------+--------------------+\n\nnebula> SHOW SESSION 1635254859271703;\n+------------------+----------+--------------------+----------------------------+----------------------------+------------------+----------+--------------------+\n| SessionId        | UserName | SpaceName          | CreateTime                 | UpdateTime                 | GraphAddr        | Timezone | ClientIp           |\n+------------------+----------+--------------------+----------------------------+----------------------------+------------------+----------+--------------------+\n| 1651220858102296 | \"root\"   | \"basketballplayer\" | 2022-04-29T08:27:38.102296 | 2022-04-29T08:50:54.254384 | \"127.0.0.1:9669\" | 0        | \"127.0.0.1\" |\n+------------------+----------+--------------------+----------------------------+----------------------------+------------------+----------+--------------------+\n
              Parameter Description SessionId The session ID, namely the identifier of a session. UserName The username in a session. SpaceName The name of the graph space that the user uses currently. It is null (\"\") when you first log in because there is no specified graph space. CreateTime The time when the session is created, namely the time when the user logs in. The time zone is specified by timezone_name in the configuration file. UpdateTime The system will update the time when there is an operation. The time zone is specified by timezone_name in the configuration file. GraphAddr The IP (or hostname) and port of the Graph server that hosts the session. Timezone A reserved parameter that has no specified meaning for now. ClientIp The IP or hostname of the client."},{"location":"3.ngql-guide/7.general-query-statements/6.show/18.show-queries/","title":"SHOW QUERIES","text":"

              The SHOW QUERIES statement shows the information of working queries in the current session.

              Note

              To terminate queries, see Kill Query.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/18.show-queries/#precautions","title":"Precautions","text":"
              • The SHOW LOCAL QUERIES statement gets the status of queries in the current session from the local cache with almost no latency.
              • The SHOW QUERIES statement gets the information of queries in all the sessions from the Meta Service. The information will be synchronized to the Meta Service according to the interval defined by session_reclaim_interval_secs. Therefore the information that you get from the client may belong to the last synchronization interval.
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/18.show-queries/#syntax","title":"Syntax","text":"
              SHOW [LOCAL] QUERIES;\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/18.show-queries/#examples","title":"Examples","text":"
              nebula> SHOW LOCAL QUERIES;\n+------------------+-----------------+--------+----------------------+----------------------------+----------------+-----------+-----------------------+\n| SessionID        | ExecutionPlanID | User   | Host                 | StartTime                  | DurationInUSec | Status    | Query                 |\n+------------------+-----------------+--------+----------------------+----------------------------+----------------+-----------+-----------------------+\n| 1625463842921750 | 46              | \"root\" | \"\"192.168.x.x\":9669\" | 2021-07-05T05:44:19.502903 | 0              | \"RUNNING\" | \"SHOW LOCAL QUERIES;\" |\n+------------------+-----------------+--------+----------------------+----------------------------+----------------+-----------+-----------------------+\n\nnebula> SHOW QUERIES;\n+------------------+-----------------+---------+----------------------+----------------------------+----------------+-----------+---------------------------------------------------------+\n| SessionID        | ExecutionPlanID | User    | Host                 | StartTime                  | DurationInUSec | Status    | Query                                                   |\n+------------------+-----------------+---------+----------------------+----------------------------+----------------+-----------+---------------------------------------------------------+\n| 1625456037718757 | 54              | \"user1\" | \"\"192.168.x.x\":9669\" | 2021-07-05T05:51:08.691318 | 1504502        | \"RUNNING\" | \"MATCH p=(v:player)-[*1..4]-(v2) RETURN v2 AS Friends;\" |\n+------------------+-----------------+---------+----------------------+----------------------------+----------------+-----------+---------------------------------------------------------+\n\n# The following statement returns the top 10 queries that have the longest duration.\nnebula> SHOW QUERIES | ORDER BY $-.DurationInUSec DESC | LIMIT 10;\n+------------------+-----------------+---------+----------------------+----------------------------+----------------+-----------+-------------------------------------------------------+\n| SessionID        | ExecutionPlanID | User    | Host                 | StartTime                  | DurationInUSec | Status    | Query                                                 |\n+------------------+-----------------+---------+----------------------+----------------------------+----------------+-----------+-------------------------------------------------------+\n| 1625471375320831 | 98              | \"user2\" | \"\"192.168.x.x\":9669\" | 2021-07-05T07:50:24.461779 | 2608176        | \"RUNNING\" | \"MATCH (v:player)-[*1..4]-(v2) RETURN v2 AS Friends;\" |\n| 1625456037718757 | 99              | \"user1\" | \"\"192.168.x.x\":9669\" | 2021-07-05T07:50:24.910616 | 2159333        | \"RUNNING\" | \"MATCH (v:player)-[*1..4]-(v2) RETURN v2 AS Friends;\" |\n+------------------+-----------------+---------+----------------------+----------------------------+----------------+-----------+-------------------------------------------------------+\n

              The descriptions are as follows.

              Parameter Description SessionID The session ID. ExecutionPlanID The ID of the execution plan. User The username that executes the query. Host The IP address and port of the Graph server that hosts the session. StartTime The time when the query starts. DurationInUSec The duration of the query. The unit is microsecond. Status The current status of the query. Query The query statement."},{"location":"3.ngql-guide/7.general-query-statements/6.show/19.show-meta-leader/","title":"SHOW META LEADER","text":"

              The SHOW META LEADER statement shows the information of the leader in the current Meta cluster.

              For more information about the Meta service, see Meta service.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/19.show-meta-leader/#syntax","title":"Syntax","text":"
              SHOW META LEADER;\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/19.show-meta-leader/#example","title":"Example","text":"
              nebula> SHOW META LEADER;\n+------------------+---------------------------+\n| Meta Leader      | secs from last heart beat |\n+------------------+---------------------------+\n| \"127.0.0.1:9559\" | 3                         |\n+------------------+---------------------------+\n
              Parameter Description Meta Leader Shows the information of the leader in the Meta cluster, including the IP (or hostname) and port of the server where the leader is located. secs from last heart beat Indicates the time interval since the last heartbeat. This parameter is measured in seconds."},{"location":"3.ngql-guide/7.general-query-statements/6.show/2.show-collation/","title":"SHOW COLLATION","text":"

              The SHOW COLLATION statement shows the collations supported by NebulaGraph.

              Currently available types are: utf8_bin and utf8mb4_bin.

              • When the character set is utf8, the default collate is utf8_bin.
              • When the character set is utf8mb4, the default collate is utf8mb4_bin.
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/2.show-collation/#syntax","title":"Syntax","text":"
              SHOW COLLATION;\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/2.show-collation/#example","title":"Example","text":"
              nebula> SHOW COLLATION;\n+------------+---------+\n| Collation  | Charset |\n+------------+---------+\n| \"utf8_bin\" | \"utf8\"  |\n+------------+---------+\n
              Parameter Description Collation The name of the collation. Charset The name of the character set with which the collation is associated."},{"location":"3.ngql-guide/7.general-query-statements/6.show/4.show-create-space/","title":"SHOW CREATE SPACE","text":"

              The SHOW CREATE SPACE statement shows the creating statement of the specified graph space.

              For details about the graph space information, see CREATE SPACE.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/4.show-create-space/#syntax","title":"Syntax","text":"
              SHOW CREATE SPACE <space_name>;\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/4.show-create-space/#example","title":"Example","text":"
              nebula> SHOW CREATE SPACE basketballplayer;\n+--------------------+---------------------------------------------------------------------------------------------------------------------------------------------+\n| Space              | Create Space                                                                                                                                |\n+--------------------+---------------------------------------------------------------------------------------------------------------------------------------------+\n| \"basketballplayer\" | \"CREATE SPACE `basketballplayer` (partition_num = 10, replica_factor = 1, charset = utf8, collate = utf8_bin, vid_type = FIXED_STRING(32))\" |\n+--------------------+---------------------------------------------------------------------------------------------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/5.show-create-tag-edge/","title":"SHOW CREATE TAG/EDGE","text":"

              The SHOW CREATE TAG statement shows the basic information of the specified tag. For details about the tag, see CREATE TAG.

              The SHOW CREATE EDGE statement shows the basic information of the specified edge type. For details about the edge type, see CREATE EDGE.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/5.show-create-tag-edge/#syntax","title":"Syntax","text":"
              SHOW CREATE {TAG <tag_name> | EDGE <edge_name>};\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/5.show-create-tag-edge/#examples","title":"Examples","text":"
              nebula> SHOW CREATE TAG player;\n+----------+-----------------------------------+\n| Tag      | Create Tag                        |\n+----------+-----------------------------------+\n| \"player\" | \"CREATE TAG `player` (            |\n|          |  `name` string NULL,              |\n|          |  `age` int64 NULL                 |\n|          | ) ttl_duration = 0, ttl_col = \"\"\" |\n+----------+-----------------------------------+\n\nnebula> SHOW CREATE EDGE follow;\n+----------+-----------------------------------+\n| Edge     | Create Edge                       |\n+----------+-----------------------------------+\n| \"follow\" | \"CREATE EDGE `follow` (           |\n|          |  `degree` int64 NULL              |\n|          | ) ttl_duration = 0, ttl_col = \"\"\" |\n+----------+-----------------------------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/6.show-hosts/","title":"SHOW HOSTS","text":"

              The SHOW HOSTS statement shows the cluster information, including the port, status, leader, partition, and version information. You can also add the service type in the statement to view the information of the specific service.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/6.show-hosts/#syntax","title":"Syntax","text":"
              SHOW HOSTS [GRAPH | STORAGE | META];\n

              Note

              For a NebulaGraph cluster installed with the source code, the version of the cluster will not be displayed in the output after executing the command SHOW HOSTS (GRAPH | STORAGE | META) with the service name.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/6.show-hosts/#examples","title":"Examples","text":"
              nebula> SHOW HOSTS;\n+-------------+-------+----------+--------------+----------------------------------+------------------------------+---------+\n| Host        | Port  | Status   | Leader count | Leader distribution              | Partition distribution       | Version |\n+-------------+-------+----------+--------------+----------------------------------+------------------------------+---------+\n| \"storaged0\" | 9779  | \"ONLINE\" | 8            | \"docs:5, basketballplayer:3\"     | \"docs:5, basketballplayer:3\" | \"master\" |\n| \"storaged1\" | 9779  | \"ONLINE\" | 9            | \"basketballplayer:4, docs:5\"     | \"docs:5, basketballplayer:4\" | \"master\" |\n| \"storaged2\" | 9779  | \"ONLINE\" | 8            | \"basketballplayer:3, docs:5\"     | \"docs:5, basketballplayer:3\" | \"master\" |\n+-------------+-------+----------+--------------+----------------------------------+------------------------------+---------+\n\nnebula> SHOW HOSTS GRAPH;\n+-----------+------+----------+---------+--------------+---------+\n| Host      | Port | Status   | Role    | Git Info Sha | Version |\n+-----------+------+----------+---------+--------------+---------+\n| \"graphd\"  | 9669 | \"ONLINE\" | \"GRAPH\" | \"3ba41bd\"    | \"master\" |\n| \"graphd1\" | 9669 | \"ONLINE\" | \"GRAPH\" | \"3ba41bd\"    | \"master\" |\n| \"graphd2\" | 9669 | \"ONLINE\" | \"GRAPH\" | \"3ba41bd\"    | \"master\" |\n+-----------+------+----------+---------+--------------+---------+\n\nnebula> SHOW HOSTS STORAGE;\n+-------------+------+----------+-----------+--------------+---------+\n| Host        | Port | Status   | Role      | Git Info Sha | Version |\n+-------------+------+----------+-----------+--------------+---------+\n| \"storaged0\" | 9779 | \"ONLINE\" | \"STORAGE\" | \"3ba41bd\"    | \"master\" |\n| \"storaged1\" | 9779 | \"ONLINE\" | \"STORAGE\" | \"3ba41bd\"    | \"master\" |\n| \"storaged2\" | 9779 | \"ONLINE\" | \"STORAGE\" | \"3ba41bd\"    | \"master\" |\n+-------------+------+----------+-----------+--------------+---------+\n\nnebula> SHOW HOSTS META;\n+----------+------+----------+--------+--------------+---------+\n| Host     | Port | Status   | Role   | Git Info Sha | Version |\n+----------+------+----------+--------+--------------+---------+\n| \"metad2\" | 9559 | \"ONLINE\" | \"META\" | \"3ba41bd\"    | \"master\" |\n| \"metad0\" | 9559 | \"ONLINE\" | \"META\" | \"3ba41bd\"    | \"master\" |\n| \"metad1\" | 9559 | \"ONLINE\" | \"META\" | \"3ba41bd\"    | \"master\" |\n+----------+------+----------+--------+--------------+---------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/7.show-index-status/","title":"SHOW INDEX STATUS","text":"

              The SHOW INDEX STATUS statement shows the status of jobs that rebuild native indexes, which helps check whether a native index is successfully rebuilt or not.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/7.show-index-status/#syntax","title":"Syntax","text":"
              SHOW {TAG | EDGE} INDEX STATUS;\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/7.show-index-status/#examples","title":"Examples","text":"
              nebula> SHOW TAG INDEX STATUS;\n+------------------------------------+--------------+\n| Name                               | Index Status |\n+------------------------------------+--------------+\n| \"date1_index\"                      | \"FINISHED\"   |\n| \"basketballplayer_all_tag_indexes\" | \"FINISHED\"   |\n| \"any_shape_geo_index\"              | \"FINISHED\"   |\n+------------------------------------+--------------+\n\nnebula> SHOW EDGE INDEX STATUS;\n+----------------+--------------+\n| Name           | Index Status |\n+----------------+--------------+\n| \"follow_index\" | \"FINISHED\"   |\n+----------------+--------------+\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/7.show-index-status/#related_topics","title":"Related topics","text":"
              • Job manager and the JOB statements
              • REBUILD NATIVE INDEX
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/8.show-indexes/","title":"SHOW INDEXES","text":"

              The SHOW INDEXES statement shows the names of existing native indexes.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/8.show-indexes/#syntax","title":"Syntax","text":"
              SHOW {TAG | EDGE} INDEXES;\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/8.show-indexes/#examples","title":"Examples","text":"
              nebula> SHOW TAG INDEXES;\n+------------------+----------+----------+\n| Index Name       | By Tag   | Columns  |\n+------------------+----------+----------+\n| \"player_index_0\" | \"player\" | []       |\n| \"player_index_1\" | \"player\" | [\"name\"] |\n+------------------+----------+----------+\n\nnebula> SHOW EDGE INDEXES;\n+----------------+----------+---------+\n| Index Name     | By Edge  | Columns |\n+----------------+----------+---------+\n| \"follow_index\" | \"follow\" | []      |\n+----------------+----------+---------+\n

              Legacy version compatibility

              In NebulaGraph 2.x, SHOW TAG/EDGE INDEXES only returns Names.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/9.show-parts/","title":"SHOW PARTS","text":"

              The SHOW PARTS statement shows the information of a specified partition or all partitions in a graph space.

              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/9.show-parts/#syntax","title":"Syntax","text":"
              SHOW PARTS [<part_id>];\n
              "},{"location":"3.ngql-guide/7.general-query-statements/6.show/9.show-parts/#examples","title":"Examples","text":"
              nebula> SHOW PARTS;\n+--------------+--------------------+--------------------+-------+\n| Partition ID | Leader             | Peers              | Losts |\n+--------------+--------------------+--------------------+-------+\n| 1            | \"192.168.2.1:9779\" | \"192.168.2.1:9779\" | \"\"    |\n| 2            | \"192.168.2.2:9779\" | \"192.168.2.2:9779\" | \"\"    |\n| 3            | \"192.168.2.3:9779\" | \"192.168.2.3:9779\" | \"\"    |\n| 4            | \"192.168.2.1:9779\" | \"192.168.2.1:9779\" | \"\"    |\n| 5            | \"192.168.2.2:9779\" | \"192.168.2.2:9779\" | \"\"    |\n| 6            | \"192.168.2.3:9779\" | \"192.168.2.3:9779\" | \"\"    |\n| 7            | \"192.168.2.1:9779\" | \"192.168.2.1:9779\" | \"\"    |\n| 8            | \"192.168.2.2:9779\" | \"192.168.2.2:9779\" | \"\"    |\n| 9            | \"192.168.2.3:9779\" | \"192.168.2.3:9779\" | \"\"    |\n| 10           | \"192.168.2.1:9779\" | \"192.168.2.1:9779\" | \"\"    |\n+--------------+--------------------+--------------------+-------+\n\nnebula> SHOW PARTS 1;\n+--------------+--------------------+--------------------+-------+\n| Partition ID | Leader             | Peers              | Losts |\n+--------------+--------------------+--------------------+-------+\n| 1            | \"192.168.2.1:9779\" | \"192.168.2.1:9779\" | \"\"    |\n+--------------+--------------------+--------------------+-------+\n

              The descriptions are as follows.

              Parameter Description Partition ID The ID of the partition. Leader The IP (or hostname) and the port of the leader. Peers The IPs (or hostnames) and the ports of all the replicas. Losts The IPs (or hostnames) and the ports of replicas at fault."},{"location":"3.ngql-guide/8.clauses-and-options/group-by/","title":"GROUP BY","text":"

              The GROUP BY clause can be used to aggregate data.

              "},{"location":"3.ngql-guide/8.clauses-and-options/group-by/#opencypher_compatibility","title":"OpenCypher Compatibility","text":"

              This topic applies to native nGQL only.

              You can also use the count() function to aggregate data.

              nebula>  MATCH (v:player)<-[:follow]-(:player) RETURN v.player.name AS Name, count(*) as cnt ORDER BY cnt DESC;\n+----------------------+-----+\n| Name                 | cnt |\n+----------------------+-----+\n| \"Tim Duncan\"         | 10  |\n| \"LeBron James\"       | 6   |\n| \"Tony Parker\"        | 5   |\n| \"Chris Paul\"         | 4   |\n| \"Manu Ginobili\"      | 4   |\n+----------------------+-----+\n...\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/group-by/#syntax","title":"Syntax","text":"

              The GROUP BY clause groups the rows with the same value. Then operations such as counting, sorting, and calculation can be applied.

              The GROUP BY clause works after the pipe symbol (|) and before a YIELD clause.

              | GROUP BY <var> YIELD <var>, <aggregation_function(var)>\n

              The aggregation_function() function supports avg(), sum(), max(), min(), count(), collect(), and std().

              "},{"location":"3.ngql-guide/8.clauses-and-options/group-by/#examples","title":"Examples","text":"

              The following statement finds all the vertices connected directly to vertex \"player100\", groups the result set by player names, and counts how many times the name shows up in the result set.

              nebula> GO FROM \"player100\" OVER follow BIDIRECT \\\n        YIELD properties($$).name as Name \\\n        | GROUP BY $-.Name \\\n        YIELD $-.Name as Player, count(*) AS Name_Count;\n+---------------------+------------+\n| Player              | Name_Count |\n+---------------------+------------+\n| \"Shaquille O'Neal\"  | 1          |\n| \"Tiago Splitter\"    | 1          |\n| \"Manu Ginobili\"     | 2          |\n| \"Boris Diaw\"        | 1          |\n| \"LaMarcus Aldridge\" | 1          |\n| \"Tony Parker\"       | 2          |\n| \"Marco Belinelli\"   | 1          |\n| \"Dejounte Murray\"   | 1          |\n| \"Danny Green\"       | 1          |\n| \"Aron Baynes\"       | 1          |\n+---------------------+------------+\n

              The following statement finds all the vertices connected directly to vertex \"player100\", groups the result set by source vertices, and returns the sum of degree values.

              nebula> GO FROM \"player100\" OVER follow \\\n        YIELD src(edge) AS player, properties(edge).degree AS degree \\\n        | GROUP BY $-.player \\\n        YIELD sum($-.degree);\n+----------------+\n| sum($-.degree) |\n+----------------+\n| 190            |\n+----------------+\n

              For more information about the sum() function, see Built-in math functions.

              "},{"location":"3.ngql-guide/8.clauses-and-options/group-by/#implicit_group_by","title":"Implicit GROUP BY","text":"

              The usage of GROUP BY in the above nGQL statements that explicitly write GROUP BY and act as grouping fields is called explicit GROUP BY, while in openCypher, the GROUP BY is implicit, i.e., GROUP BY groups fields without explicitly writing GROUP BY. The explicit GROUP BY in nGQL is the same as the implicit GROUP BY in openCypher, and nGQL also supports the implicit GROUP BY. For the implicit usage of GROUP BY, see Stack Overflow.

              For example, to look up the players over 34 years old with the same length of service, you can use the following statement:

              nebula> LOOKUP ON player WHERE player.age > 34 YIELD id(vertex) AS v | \\\n        GO FROM $-.v OVER serve YIELD serve.start_year AS start_year, serve.end_year AS end_year | \\\n        YIELD $-.start_year, $-.end_year, count(*) AS count | \\\n        ORDER BY $-.count DESC | LIMIT 5;\n+---------------+-------------+-------+\n| $-.start_year | $-.end_year | count |\n+---------------+-------------+-------+\n| 2018          | 2019        | 3     |\n| 2007          | 2012        | 2     |\n| 1998          | 2004        | 2     |\n| 2017          | 2018        | 2     |\n| 2010          | 2011        | 2     |\n+---------------+-------------+-------+ \n
              "},{"location":"3.ngql-guide/8.clauses-and-options/joins/","title":"INNER JOIN","text":"

              INNER JOIN is a type of join query that matches records based on common column values between two tables. It is commonly used to create a result set that includes two tables based on values in their associated columns. In NebulaGraph, the INNER JOIN clause can be explicitly used to conduct join queries between two tables, leading to more complex query results.

              Note

              In nGQL statements, the multi-hop query of GO implicitly utilizes the INNER JOIN clause. For example, in the statement GO 1 TO 2 STEPS FROM \"player101\" OVER follow YIELD $$.player.name AS name, $$.player.age AS age, the GO clause implicitly utilizes the INNER JOIN clause, matching the result columns of the first-hop query starting from player101 along the follow edge with the starting columns of the second-hop query. Then, based on the matching results, it returns name and age.

              "},{"location":"3.ngql-guide/8.clauses-and-options/joins/#opencypher_compatibility","title":"openCypher compatibility","text":"

              The INNER JOIN clause is only applicable to the native nGQL syntax.

              "},{"location":"3.ngql-guide/8.clauses-and-options/joins/#syntax","title":"Syntax","text":"
              YIELD <column_name_list>\nFROM <first_table> INNER JOIN <second_table> ON <join_condition>\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/joins/#notes","title":"Notes","text":"

              To conduct an INNER JOIN query, you need to follow these rules:

              • Use the YIELD clause to specify the returned columns, and place it before the INNER JOIN clause.
              • Use the FROM clause to specify the two tables to be joined.
              • The INNER JOIN clause must contain the ON clause, which specifies the join condition. The join condition only supports equi-join (i.e., ==).
              • <first_table> and <second_table> are the two tables to be joined, and the two table names cannot be the same.
              • Use user-defined variables to specify the table names. For more information, see User-defined variables.
              "},{"location":"3.ngql-guide/8.clauses-and-options/joins/#examples","title":"Examples","text":"

              The following examples show how to use the INNER JOIN clause to join the results of two queries in nGQL statements.

              "},{"location":"3.ngql-guide/8.clauses-and-options/joins/#example_1","title":"Example 1","text":"

              Firstly, the dst column obtained from the initial LOOK UP operation (whose value for Tony Parker has an ID of player101) is connected with the src column obtained from the second GO query (which has IDs player101 and player125). By matching the two columns where player101 appears on both sides, we obtain the resulting data set. The final request then uses a YIELD statement YIELD $b.vid AS vid, $a.v AS v, $b.e2 AS e2 to display the information.

              nebula> $a = LOOKUP ON player WHERE player.name == 'Tony Parker' YIELD id(vertex) as dst, vertex AS v; \\\n        $b = GO FROM 'player101', 'player125' OVER follow YIELD id($^) as src, id($$) as vid, edge AS e2; \\\n        YIELD $b.vid AS vid, $a.v AS v, $b.e2 AS e2 FROM $a INNER JOIN $b ON $a.dst == $b.src;\n+-------------+-----------------------------------------------------+----------------------------------------------------+\n| vid         | v                                                   | e2                                                 |\n+-------------+-----------------------------------------------------+----------------------------------------------------+\n| \"player100\" | (\"player101\" :player{age: 36, name: \"Tony Parker\"}) | [:follow \"player101\"->\"player100\" @0 {degree: 95}] |\n| \"player102\" | (\"player101\" :player{age: 36, name: \"Tony Parker\"}) | [:follow \"player101\"->\"player102\" @0 {degree: 90}] |\n| \"player125\" | (\"player101\" :player{age: 36, name: \"Tony Parker\"}) | [:follow \"player101\"->\"player125\" @0 {degree: 95}] |\n+-------------+-----------------------------------------------------+----------------------------------------------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/joins/#example_2","title":"Example 2","text":"

              The following nGQL example utilizes the INNER JOIN clause to combine the src column from the first LOOKUP query (with player101 as ID for Tony Parker) and the src column from the second FETCH query (with player101 being the starting point to player100). By matching player101 in both source columns, we obtain the resulting data set. The final request then utilizes a YIELD clause YIELD $a.src AS src, $a.v AS v, $b.e AS e to display the information.

              nebula> $a = LOOKUP ON player WHERE player.name == 'Tony Parker' YIELD id(vertex) as src, vertex AS v; \\\n        $b = FETCH PROP ON follow 'player101'->'player100' YIELD src(edge) as src, edge as e; \\\n        YIELD $a.src AS src, $a.v AS v, $b.e AS e FROM $a INNER JOIN $b ON $a.src == $b.src;\n+-------------+-----------------------------------------------------+----------------------------------------------------+\n| src         | v                                                   | e                                                  |\n+-------------+-----------------------------------------------------+----------------------------------------------------+\n| \"player101\" | (\"player101\" :player{age: 36, name: \"Tony Parker\"}) | [:follow \"player101\"->\"player100\" @0 {degree: 95}] |\n+-------------+-----------------------------------------------------+----------------------------------------------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/joins/#example_3","title":"Example 3","text":"

              The following example shows the process of using the INNER JOIN clause to join the results of the LOOKUP, GO, and FIND PATH clauses.

              1. Query the player table using the LOOKUP ON statement to find the vertex for player Tony Parker, storing the ID and properties in the $a.src and $a.v columns, respectively.
              2. Then use the GO statement to find player nodes that are reachable in 2-5 steps through the follow edges from the node $a.src. It also requires that the players corresponding to these nodes have an age greater than 30 years old. We store the IDs of these nodes in the $b.dst column.
              3. Use the FIND ALL PATH statement to find all the paths that traverse the follow edges from $a.src to $b.dst. We also return the paths themselves as $c.p and the destination of each path as $c.dst.
              4. Using the FIND SHORTEST PATH statement, find the shortest path from $c.dst back to $a.src, storing the path in $d.p and the starting point in $d.src.
              5. Finally, we utilize the INNER JOIN clause to join the results of steps 3 and 4 by matching the $c.dst column with the $d.src column. Then use the YIELD statement YIELD $c.forward AS forwardPath, $c.dst AS end, $d.p AS backwardPath to return the matched records of the join.
              nebula> $a = LOOKUP ON player WHERE player.name == 'Tony Parker' YIELD id(vertex) as src, vertex AS v; \\\n        $b = GO 2 TO 5 STEPS FROM $a.src OVER follow WHERE $$.player.age > 30 YIELD id($$) AS dst; \\\n        $c = (FIND ALL PATH FROM $a.src TO $b.dst OVER follow YIELD path AS p | YIELD $-.p AS forward, id(endNode($-.p)) AS dst); \\\n        $d = (FIND SHORTEST PATH FROM $c.dst TO $a.src OVER follow YIELD path AS p | YIELD $-.p AS p, id(startNode($-.p)) AS src); \\\n        YIELD $c.forward AS forwardPath, $c.dst AS end, $d.p AS backwordPath FROM $c INNER JOIN $d ON $c.dst == $d.src;\n+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+-----------------------------------------------------------------------------+\n| forwardPath                                                                                                                                                           | end         | backwordPath                                                                |\n+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+-----------------------------------------------------------------------------+\n| <(\"player101\")-[:follow@0 {}]->(\"player102\")>                                                                                                                         | \"player102\" | <(\"player102\")-[:follow@0 {}]->(\"player101\")>                               |\n| <(\"player101\")-[:follow@0 {}]->(\"player100\")-[:follow@0 {}]->(\"player101\")-[:follow@0 {}]->(\"player102\")>                                                             | \"player102\" | <(\"player102\")-[:follow@0 {}]->(\"player101\")>                               |\n| <(\"player101\")-[:follow@0 {}]->(\"player125\")>                                                                                                                         | \"player125\" | <(\"player125\")-[:follow@0 {}]->(\"player100\")-[:follow@0 {}]->(\"player101\")> |\n| <(\"player101\")-[:follow@0 {}]->(\"player100\")-[:follow@0 {}]->(\"player125\")>                                                                                           | \"player125\" | <(\"player125\")-[:follow@0 {}]->(\"player100\")-[:follow@0 {}]->(\"player101\")> |\n| <(\"player101\")-[:follow@0 {}]->(\"player100\")-[:follow@0 {}]->(\"player101\")-[:follow@0 {}]->(\"player125\")>                                                             | \"player125\" | <(\"player125\")-[:follow@0 {}]->(\"player100\")-[:follow@0 {}]->(\"player101\")> |\n| <(\"player101\")-[:follow@0 {}]->(\"player102\")-[:follow@0 {}]->(\"player100\")-[:follow@0 {}]->(\"player125\")>                                                             | \"player125\" | <(\"player125\")-[:follow@0 {}]->(\"player100\")-[:follow@0 {}]->(\"player101\")> |\n| <(\"player101\")-[:follow@0 {}]->(\"player102\")-[:follow@0 {}]->(\"player101\")-[:follow@0 {}]->(\"player125\")>                                                             | \"player125\" | <(\"player125\")-[:follow@0 {}]->(\"player100\")-[:follow@0 {}]->(\"player101\")> |\n...\n+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------+-----------------------------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/limit/","title":"LIMIT AND SKIP","text":"

              The LIMIT clause constrains the number of rows in the output. The usage of LIMIT in native nGQL statements and openCypher compatible statements is different.

              • Native nGQL: Generally, a pipe | needs to be used before the LIMIT clause. The offset parameter can be set or omitted directly after the LIMIT statement.
              • OpenCypher compatible statements: No pipes are permitted before the LIMIT clause. And you can use SKIP to indicate an offset.

              Note

              When using LIMIT in either syntax above, it is important to use an ORDER BY clause that constrains the output into a unique order. Otherwise, you will get an unpredictable subset of the output.

              "},{"location":"3.ngql-guide/8.clauses-and-options/limit/#limit_in_native_ngql_statements","title":"LIMIT in native nGQL statements","text":"

              In native nGQL, LIMIT has general syntax and exclusive syntax in GO statements.

              "},{"location":"3.ngql-guide/8.clauses-and-options/limit/#general_limit_syntax_in_native_ngql_statements","title":"General LIMIT syntax in native nGQL statements","text":"

              In native nGQL, the general LIMIT syntax works the same as in SQL. The LIMIT clause accepts one or two parameters. The values of both parameters must be non-negative integers and be used after a pipe. The syntax and description are as follows:

              ... | LIMIT [<offset>,] <number_rows>;\n
              Parameter Description offset The offset value. It defines the row from which to start returning. The offset starts from 0. The default value is 0, which returns from the first row. number_rows It constrains the total number of returned rows.

              For example:

              # The following example returns the top 3 rows of data from the result.\nnebula> LOOKUP ON player YIELD id(vertex)|\\\n        LIMIT 3;\n+-------------+\n| id(VERTEX)  |\n+-------------+\n| \"player100\" |\n| \"player101\" |\n| \"player102\" |\n+-------------+\n\n# The following example returns the 3 rows of data starting from the second row of the sorted output.\nnebula> GO FROM \"player100\" OVER follow REVERSELY \\\n        YIELD properties($$).name AS Friend, properties($$).age AS Age \\\n        | ORDER BY $-.Age, $-.Friend \\\n        | LIMIT 1, 3;\n+-------------------+-----+\n| Friend            | Age |\n+-------------------+-----+\n| \"Danny Green\"     | 31  |\n| \"Aron Baynes\"     | 32  |\n| \"Marco Belinelli\" | 32  |\n+-------------------+-----+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/limit/#limit_in_go_statements","title":"LIMIT in GO statements","text":"

              In addition to the general syntax in the native nGQL, the LIMIT in the GO statement also supports limiting the number of output results based on edges.

              Syntax:

              <go_statement> LIMIT <limit_list>;\n

              limit_list is a list. Elements in the list must be natural numbers, and the number of elements must be the same as the maximum number of STEPS in the GO statement. The following takes GO 1 TO 3 STEPS FROM \"A\" OVER * LIMIT <limit_list> as an example to introduce this usage of LIMIT in detail.

              • The list limit_list must contain 3 natural numbers, such as GO 1 TO 3 STEPS FROM \"A\" OVER * LIMIT [1,2,4].
              • 1 in LIMIT [1,2,4] means that the system automatically selects 1 edge to continue traversal in the first step. 2 means to select 2 edges to continue traversal in the second step. 4 indicates that 4 edges are selected to continue traversal in the third step.
              • Because GO 1 TO 3 STEPS means to return all the traversal results from the first to third steps, all the red edges and their source and destination vertices in the figure below will be matched by this GO statement. And the yellow edges represent there is no path selected when the GO statement traverses. If it is not GO 1 TO 3 STEPS but GO 3 STEPS, it will only match the red edges of the third step and the vertices at both ends.

              In the basketballplayer dataset, the example is as follows:

              nebula> GO 3 STEPS FROM \"player100\" \\\n        OVER * \\\n        YIELD properties($$).name AS NAME, properties($$).age AS Age \\\n        LIMIT [3,3,3];\n+-----------------+----------+\n| NAME            | Age      |\n+-----------------+----------+\n| \"Tony Parker\"   | 36       |\n| \"Manu Ginobili\" | 41       |\n| \"Spurs\"         | __NULL__ |\n+-----------------+----------+\n\nnebula> GO 3 STEPS FROM \"player102\" OVER * BIDIRECT\\\n        YIELD dst(edge) \\\n        LIMIT [rand32(5),rand32(5),rand32(5)];\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player100\" |\n| \"player100\" |\n+-------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/limit/#limit_in_opencypher_compatible_statements","title":"LIMIT in openCypher compatible statements","text":"

              In openCypher compatible statements such as MATCH, there is no need to use a pipe when LIMIT is used. The syntax and description are as follows:

              ... [SKIP <offset>] [LIMIT <number_rows>];\n
              Parameter Description offset The offset value. It defines the row from which to start returning. The offset starts from 0. The default value is 0, which returns from the first row. number_rows It constrains the total number of returned rows.

              Both offset and number_rows accept expressions, but the result of the expression must be a non-negative integer.

              Note

              Fraction expressions composed of two integers are automatically floored to integers. For example, 8/6 is floored to 1.

              "},{"location":"3.ngql-guide/8.clauses-and-options/limit/#examples_of_limit","title":"Examples of LIMIT","text":"

              LIMIT can be used alone to return a specified number of results.

              nebula> MATCH (v:player) RETURN v.player.name AS Name, v.player.age AS Age \\\n        ORDER BY Age LIMIT 5;\n+-------------------------+-----+\n| Name                    | Age |\n+-------------------------+-----+\n| \"Luka Doncic\"           | 20  |\n| \"Ben Simmons\"           | 22  |\n| \"Kristaps Porzingis\"    | 23  |\n| \"Giannis Antetokounmpo\" | 24  |\n| \"Kyle Anderson\"         | 25  |\n+-------------------------+-----+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/limit/#examples_of_skip","title":"Examples of SKIP","text":"

              SKIP can be used alone to set the offset and return the data after the specified position.

              nebula> MATCH (v:player{name:\"Tim Duncan\"}) --> (v2) \\\n        RETURN v2.player.name AS Name, v2.player.age AS Age \\\n        ORDER BY Age DESC SKIP 1;\n+-----------------+-----+\n| Name            | Age |\n+-----------------+-----+\n| \"Manu Ginobili\" | 41  |\n| \"Tony Parker\"   | 36  |\n+-----------------+-----+\n\nnebula> MATCH (v:player{name:\"Tim Duncan\"}) --> (v2) \\\n        RETURN v2.player.name AS Name, v2.player.age AS Age \\\n        ORDER BY Age DESC SKIP 1+1;\n+---------------+-----+\n| Name          | Age |\n+---------------+-----+\n| \"Tony Parker\" | 36  |\n+---------------+-----+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/limit/#example_of_skip_and_limit","title":"Example of SKIP and LIMIT","text":"

              SKIP and LIMIT can be used together to return the specified amount of data starting from the specified position.

              nebula> MATCH (v:player{name:\"Tim Duncan\"}) --> (v2) \\\n        RETURN v2.player.name AS Name, v2.player.age AS Age \\\n        ORDER BY Age DESC SKIP 1 LIMIT 1;\n+-----------------+-----+\n| Name            | Age |\n+-----------------+-----+\n| \"Manu Ginobili\" | 41  |\n+-----------------+-----+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/order-by/","title":"ORDER BY","text":"

              The ORDER BY clause specifies the order of the rows in the output.

              • Native nGQL: You must use a pipe (|) and an ORDER BY clause after YIELD clause.
              • OpenCypher style: No pipes are permitted. The ORDER BY clause follows a RETURN clause.

              There are two order options:

              • ASC: Ascending. ASC is the default order.
              • DESC: Descending.
              "},{"location":"3.ngql-guide/8.clauses-and-options/order-by/#native_ngql_syntax","title":"Native nGQL Syntax","text":"
              <YIELD clause>\n| ORDER BY <expression> [ASC | DESC] [, <expression> [ASC | DESC] ...];\n

              Compatibility

              In the native nGQL syntax, $-. must be used after ORDER BY. But it is not required in releases prior to 2.5.0.

              "},{"location":"3.ngql-guide/8.clauses-and-options/order-by/#examples","title":"Examples","text":"
              nebula> FETCH PROP ON player \"player100\", \"player101\", \"player102\", \"player103\" \\\n        YIELD player.age AS age, player.name AS name \\\n        | ORDER BY $-.age ASC, $-.name DESC;\n+-----+---------------------+\n| age | name                |\n+-----+---------------------+\n| 32  | \"Rudy Gay\"          |\n| 33  | \"LaMarcus Aldridge\" |\n| 36  | \"Tony Parker\"       |\n| 42  | \"Tim Duncan\"        |\n+-----+---------------------+\n\nnebula> $var = GO FROM \"player100\" OVER follow \\\n        YIELD dst(edge) AS dst; \\\n        ORDER BY $var.dst DESC;\n+-------------+\n| dst         |\n+-------------+\n| \"player125\" |\n| \"player101\" |\n+-------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/order-by/#opencypher_syntax","title":"OpenCypher Syntax","text":"
              <RETURN clause>\nORDER BY <expression> [ASC | DESC] [, <expression> [ASC | DESC] ...];\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/order-by/#examples_1","title":"Examples","text":"
              nebula> MATCH (v:player) RETURN v.player.name AS Name, v.player.age AS Age  \\\n        ORDER BY Name DESC;\n+-----------------+-----+\n| Name            | Age |\n+-----------------+-----+\n| \"Yao Ming\"      | 38  |\n| \"Vince Carter\"  | 42  |\n| \"Tracy McGrady\" | 39  |\n| \"Tony Parker\"   | 36  |\n| \"Tim Duncan\"    | 42  |\n+-----------------+-----+\n...\n\n# In the following example, nGQL sorts the rows by age first. If multiple people are of the same age, nGQL will then sort them by name.\nnebula> MATCH (v:player) RETURN v.player.age AS Age, v.player.name AS Name  \\\n        ORDER BY Age DESC, Name ASC;\n+-----+-------------------+\n| Age | Name              |\n+-----+-------------------+\n| 47  | \"Shaquille O'Neal\" |\n| 46  | \"Grant Hill\"      |\n| 45  | \"Jason Kidd\"      |\n| 45  | \"Steve Nash\"      |\n+-----+-------------------+\n...\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/order-by/#order_of_null_values","title":"Order of NULL values","text":"

              nGQL lists NULL values at the end of the output for ascending sorting, and at the start for descending sorting.

              nebula> MATCH (v:player{name:\"Tim Duncan\"}) --> (v2) \\\n        RETURN v2.player.name AS Name, v2.player.age AS Age  \\\n        ORDER BY Age;\n+-----------------+----------+\n| Name            | Age      |\n+-----------------+----------+\n| \"Tony Parker\"   | 36       |\n| \"Manu Ginobili\" | 41       |\n| __NULL__        | __NULL__ |\n+-----------------+----------+\n\nnebula> MATCH (v:player{name:\"Tim Duncan\"}) --> (v2) \\\n        RETURN v2.player.name AS Name, v2.player.age AS Age  \\\n        ORDER BY Age DESC;\n+-----------------+----------+\n| Name            | Age      |\n+-----------------+----------+\n| __NULL__        | __NULL__ |\n| \"Manu Ginobili\" | 41       |\n| \"Tony Parker\"   | 36       |\n+-----------------+----------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/return/","title":"RETURN","text":"

              The RETURN clause defines the output of an nGQL query. To return multiple fields, separate them with commas.

              RETURN can lead a clause or a statement:

              • A RETURN clause can work in openCypher statements in nGQL, such as MATCH or UNWIND.
              • A RETURN statement can work independently to output the result of an expression.
              "},{"location":"3.ngql-guide/8.clauses-and-options/return/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

              This topic applies to the openCypher syntax in nGQL only. For native nGQL, use YIELD.

              RETURN does not support the following openCypher features yet.

              • Return variables with uncommon characters, for example:

                MATCH (`non-english_characters`:player) \\\nRETURN `non-english_characters`;\n
              • Set a pattern in the RETURN clause and return all elements that this pattern matches, for example:

                MATCH (v:player) \\\nRETURN (v)-[e]->(v2);\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/return/#map_order_description","title":"Map order description","text":"

              When RETURN returns the map data structure, the order of key-value pairs is undefined.

              nebula> RETURN {age: 32, name: \"Marco Belinelli\"};\n+------------------------------------+\n| {age:32,name:\"Marco Belinelli\"}    |\n+------------------------------------+\n| {age: 32, name: \"Marco Belinelli\"} |\n+------------------------------------+\n\nnebula> RETURN {zage: 32, name: \"Marco Belinelli\"};\n+-------------------------------------+\n| {zage:32,name:\"Marco Belinelli\"}    |\n+-------------------------------------+\n| {name: \"Marco Belinelli\", zage: 32} |\n+-------------------------------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_vertices_or_edges","title":"Return vertices or edges","text":"

              Use the RETURN {<vertex_name> | <edge_name>} to return vertices and edges all information.

              // Return vertices\nnebula> MATCH (v:player) \\\n        RETURN v;\n+---------------------------------------------------------------+\n| v                                                             |\n+---------------------------------------------------------------+\n| (\"player104\" :player{age: 32, name: \"Marco Belinelli\"})       |\n| (\"player107\" :player{age: 32, name: \"Aron Baynes\"})           |\n| (\"player116\" :player{age: 34, name: \"LeBron James\"})          |\n| (\"player120\" :player{age: 29, name: \"James Harden\"})          |\n| (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})         |\n+---------------------------------------------------------------+\n...\n\n// Return edges\nnebula> MATCH (v:player)-[e]->() \\\n        RETURN e;\n+------------------------------------------------------------------------------+\n| e                                                                            |\n+------------------------------------------------------------------------------+\n| [:follow \"player104\"->\"player100\" @0 {degree: 55}]                           |\n| [:follow \"player104\"->\"player101\" @0 {degree: 50}]                           |\n| [:follow \"player104\"->\"player105\" @0 {degree: 60}]                           |\n| [:serve \"player104\"->\"team200\" @0 {end_year: 2009, start_year: 2007}]        |\n| [:serve \"player104\"->\"team208\" @0 {end_year: 2016, start_year: 2015}]        |\n+------------------------------------------------------------------------------+\n...\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_vids","title":"Return VIDs","text":"

              Use the id() function to retrieve VIDs.

              nebula> MATCH (v:player{name:\"Tim Duncan\"}) \\\n        RETURN id(v);\n+-------------+\n| id(v)       |\n+-------------+\n| \"player100\" |\n+-------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_tag","title":"Return Tag","text":"

              Use the labels() function to return the list of tags on a vertex.

              nebula> MATCH (v:player{name:\"Tim Duncan\"}) \\\n        RETURN labels(v);\n+------------+\n| labels(v)  |\n+------------+\n| [\"player\"] |\n+------------+\n

              To retrieve the nth element in the labels(v) list, use labels(v)[n-1]. The following example shows how to use labels(v)[0] to return the first tag in the list.

              nebula> MATCH (v:player{name:\"Tim Duncan\"}) \\\n        RETURN labels(v)[0];\n+--------------+\n| labels(v)[0] |\n+--------------+\n| \"player\"     |\n+--------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_properties","title":"Return properties","text":"

              When returning properties of a vertex, it is necessary to specify the tag to which the properties belong because a vertex can have multiple tags and the same property name can appear on different tags.

              It is possible to specify the tag of a vertex to return all properties of that tag, or to specify both the tag and a property name to return only that property of the tag.

              nebula> MATCH (v:player) \\\n        RETURN v.player, v.player.name, v.player.age \\\n        LIMIT 3;\n+--------------------------------------+---------------------+--------------+\n| v.player                             | v.player.name       | v.player.age |\n+--------------------------------------+---------------------+--------------+\n| {age: 33, name: \"LaMarcus Aldridge\"} | \"LaMarcus Aldridge\" | 33           |\n| {age: 25, name: \"Kyle Anderson\"}     | \"Kyle Anderson\"     | 25           |\n| {age: 40, name: \"Kobe Bryant\"}       | \"Kobe Bryant\"       | 40           |\n+--------------------------------------+---------------------+--------------+\n

              When returning edge properties, it is not necessary to specify the edge type to which the properties belong, because an edge can only have one edge type.

              // Return the property of a vertex\nnebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[]->(v2) \\\n        RETURN properties(v2);\n+----------------------------------+\n| properties(v2)                   |\n+----------------------------------+\n| {name: \"Spurs\"}                  |\n| {age: 36, name: \"Tony Parker\"}   |\n| {age: 41, name: \"Manu Ginobili\"} |\n+----------------------------------+\n
              // Return the property of an edge\nnebula> MATCH (v:player{name:\"Tim Duncan\"})-[e]->() \\\n        RETURN e.start_year, e.degree \\\n+--------------+----------+\n| e.start_year | e.degree |\n+--------------+----------+\n| __NULL__     | 95       |\n| __NULL__     | 95       |\n| 1997         | __NULL__ |\n+--------------+----------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_edge_type","title":"Return edge type","text":"

              Use the type() function to return the matched edge types.

              nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[e]->() \\\n        RETURN DISTINCT type(e);\n+----------+\n| type(e)  |\n+----------+\n| \"serve\"  |\n| \"follow\" |\n+----------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_paths","title":"Return paths","text":"

              Use RETURN <path_name> to return all the information of the matched paths.

              nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[*3]->() \\\n        RETURN p;\n+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| p                                                                                                                                                                                                                                                                                                              |\n+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})-[:follow@0 {degree: 90}]->(\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"})-[:serve@0 {end_year: 2019, start_year: 2015}]->(\"team204\" :team{name: \"Spurs\"})>         |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})-[:follow@0 {degree: 90}]->(\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"})-[:serve@0 {end_year: 2015, start_year: 2006}]->(\"team203\" :team{name: \"Trail Blazers\"})> |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})-[:follow@0 {degree: 90}]->(\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"})-[:follow@0 {degree: 75}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})>           |\n+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n...\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_vertices_in_a_path","title":"Return vertices in a path","text":"

              Use the nodes() function to return all vertices in a path.

              nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[]->(v2) \\\n        RETURN nodes(p);\n+-------------------------------------------------------------------------------------------------------------+\n| nodes(p)                                                                                                    |\n+-------------------------------------------------------------------------------------------------------------+\n| [(\"player100\" :player{age: 42, name: \"Tim Duncan\"}), (\"team204\" :team{name: \"Spurs\"})]                      |\n| [(\"player100\" :player{age: 42, name: \"Tim Duncan\"}), (\"player101\" :player{age: 36, name: \"Tony Parker\"})]   |\n| [(\"player100\" :player{age: 42, name: \"Tim Duncan\"}), (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})] |\n+-------------------------------------------------------------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_edges_in_a_path","title":"Return edges in a path","text":"

              Use the relationships() function to return all edges in a path.

              nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[]->(v2) \\\n        RETURN relationships(p);\n+-------------------------------------------------------------------------+\n| relationships(p)                                                        |\n+-------------------------------------------------------------------------+\n| [[:serve \"player100\"->\"team204\" @0 {end_year: 2016, start_year: 1997}]] |\n| [[:follow \"player100\"->\"player101\" @0 {degree: 95}]]                    |\n| [[:follow \"player100\"->\"player125\" @0 {degree: 95}]]                    |\n+-------------------------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_path_length","title":"Return path length","text":"

              Use the length() function to return the length of a path.

              nebula> MATCH p=(v:player{name:\"Tim Duncan\"})-[*..2]->(v2) \\\n        RETURN p AS Paths, length(p) AS Length;\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------+\n| Paths                                                                                                                                                                                                                  | Length |\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------+\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:serve@0 {end_year: 2016, start_year: 1997}]->(\"team204\" :team{name: \"Spurs\"})>                                                                                   | 1      |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})>                                                                                     | 1      |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player125\" :player{age: 41, name: \"Manu Ginobili\"})>                                                                                   | 1      |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})-[:serve@0 {end_year: 2018, start_year: 1999}]->(\"team204\" :team{name: \"Spurs\"})>     | 2      |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})-[:serve@0 {end_year: 2019, start_year: 2018}]->(\"team215\" :team{name: \"Hornets\"})>   | 2      |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})-[:follow@0 {degree: 95}]->(\"player100\" :player{age: 42, name: \"Tim Duncan\"})>        | 2      |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})-[:follow@0 {degree: 90}]->(\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"})> | 2      |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})-[:follow@0 {degree: 95}]->(\"player125\" :player{age: 41, name: \"Manu Ginobili\"})>     | 2      |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player125\" :player{age: 41, name: \"Manu Ginobili\"})-[:serve@0 {end_year: 2018, start_year: 2002}]->(\"team204\" :team{name: \"Spurs\"})>   | 2      |\n| <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player125\" :player{age: 41, name: \"Manu Ginobili\"})-[:follow@0 {degree: 90}]->(\"player100\" :player{age: 42, name: \"Tim Duncan\"})>      | 2      |\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_all_elements","title":"Return all elements","text":"

              To return all the elements that this pattern matches, use an asterisk (*).

              nebula> MATCH (v:player{name:\"Tim Duncan\"}) \\\n        RETURN *;\n+----------------------------------------------------+\n| v                                                  |\n+----------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) |\n+----------------------------------------------------+\n\nnebula> MATCH (v:player{name:\"Tim Duncan\"})-[e]->(v2) \\\n        RETURN *;\n+----------------------------------------------------+-----------------------------------------------------------------------+-------------------------------------------------------+\n| v                                                  | e                                                                     | v2                                                    |\n+----------------------------------------------------+-----------------------------------------------------------------------+-------------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) | [:follow \"player100\"->\"player101\" @0 {degree: 95}]                    | (\"player101\" :player{age: 36, name: \"Tony Parker\"})   |\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) | [:follow \"player100\"->\"player125\" @0 {degree: 95}]                    | (\"player125\" :player{age: 41, name: \"Manu Ginobili\"}) |\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"}) | [:serve \"player100\"->\"team204\" @0 {end_year: 2016, start_year: 1997}] | (\"team204\" :team{name: \"Spurs\"})                      |\n+----------------------------------------------------+-----------------------------------------------------------------------+-------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/return/#rename_a_field","title":"Rename a field","text":"

              Use the AS <alias> syntax to rename a field in the output.

              nebula> MATCH (v:player{name:\"Tim Duncan\"})-[:serve]->(v2) \\\n        RETURN v2.team.name AS Team;\n+---------+\n| Team    |\n+---------+\n| \"Spurs\" |\n+---------+\n\nnebula> RETURN \"Amber\" AS Name;\n+---------+\n| Name    |\n+---------+\n| \"Amber\" |\n+---------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_a_non-existing_property","title":"Return a non-existing property","text":"

              If a property matched does not exist, NULL is returned.

              nebula> MATCH (v:player{name:\"Tim Duncan\"})-[e]->(v2) \\\n        RETURN v2.player.name, type(e), v2.player.age;\n+-----------------+----------+---------------+\n| v2.player.name  | type(e)  | v2.player.age |\n+-----------------+----------+---------------+\n| \"Manu Ginobili\" | \"follow\" | 41            |\n| __NULL__        | \"serve\"  | __NULL__      |\n| \"Tony Parker\"   | \"follow\" | 36            |\n+-----------------+----------+---------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_expression_results","title":"Return expression results","text":"

              To return the results of expressions such as literals, functions, or predicates, set them in a RETURN clause.

              nebula> MATCH (v:player{name:\"Tony Parker\"})-->(v2:player) \\\n        RETURN DISTINCT v2.player.name, \"Hello\"+\" graphs!\", v2.player.age > 35;\n+---------------------+----------------------+--------------------+\n| v2.player.name      | (\"Hello\"+\" graphs!\") | (v2.player.age>35) |\n+---------------------+----------------------+--------------------+\n| \"LaMarcus Aldridge\" | \"Hello graphs!\"      | false              |\n| \"Tim Duncan\"        | \"Hello graphs!\"      | true               |\n| \"Manu Ginobili\"     | \"Hello graphs!\"      | true               |\n+---------------------+----------------------+--------------------+\n\nnebula> RETURN 1+1;\n+-------+\n| (1+1) |\n+-------+\n| 2     |\n+-------+\n\nnebula> RETURN 1- -1;\n+----------+\n| (1--(1)) |\n+----------+\n| 2        |\n+----------+\n\nnebula> RETURN 3 > 1;\n+-------+\n| (3>1) |\n+-------+\n| true  |\n+-------+\n\nnebula> RETURN 1+1, rand32(1, 5);\n+-------+-------------+\n| (1+1) | rand32(1,5) |\n+-------+-------------+\n| 2     | 1           |\n+-------+-------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/return/#return_unique_fields","title":"Return unique fields","text":"

              Use DISTINCT to remove duplicate fields in the result set.

              # Before using DISTINCT.\nnebula> MATCH (v:player{name:\"Tony Parker\"})--(v2:player) \\\n        RETURN v2.player.name, v2.player.age;\n+---------------------+---------------+\n| v2.player.name      | v2.player.age |\n+---------------------+---------------+\n| \"Manu Ginobili\"     | 41            |\n| \"Boris Diaw\"        | 36            |\n| \"Marco Belinelli\"   | 32            |\n| \"Dejounte Murray\"   | 29            |\n| \"Tim Duncan\"        | 42            |\n| \"Tim Duncan\"        | 42            |\n| \"LaMarcus Aldridge\" | 33            |\n| \"LaMarcus Aldridge\" | 33            |\n+---------------------+---------------+\n\n# After using DISTINCT.\nnebula> MATCH (v:player{name:\"Tony Parker\"})--(v2:player) \\\n        RETURN DISTINCT v2.player.name, v2.player.age;\n+---------------------+---------------+\n| v2.player.name      | v2.player.age |\n+---------------------+---------------+\n| \"Manu Ginobili\"     | 41            |\n| \"Boris Diaw\"        | 36            |\n| \"Marco Belinelli\"   | 32            |\n| \"Dejounte Murray\"   | 29            |\n| \"Tim Duncan\"        | 42            |\n| \"LaMarcus Aldridge\" | 33            |\n+---------------------+---------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/sample/","title":"SAMPLE","text":"

              The SAMPLE clause takes samples evenly in the result set and returns the specified amount of data.

              SAMPLE can be used in GO statements only. The syntax is as follows:

              <go_statement> SAMPLE <sample_list>;\n

              sample_list is a list. Elements in the list must be natural numbers, and the number of elements must be the same as the maximum number of STEPS in the GO statement. The following takes GO 1 TO 3 STEPS FROM \"A\" OVER * SAMPLE <sample_list> as an example to introduce this usage of SAMPLE in detail.

              • The list sample_list must contain 3 natural numbers, such as GO 1 TO 3 STEPS FROM \"A\" OVER * SAMPLE [1,2,4].
              • 1 in SAMPLE [1,2,4] means that the system automatically selects 1 edge to continue traversal in the first step. 2 means to select 2 edges to continue traversal in the second step. 4 indicates that 4 edges are selected to continue traversal in the third step. If there is no matched edge in a certain step or the number of matched edges is less than the specified number, the actual number will be returned.
              • Because GO 1 TO 3 STEPS means to return all the traversal results from the first to third steps, all the red edges and their source and destination vertices in the figure below will be matched by this GO statement. And the yellow edges represent there is no path selected when the GO statement traverses. If it is not GO 1 TO 3 STEPS but GO 3 STEPS, it will only match the red edges of the third step and the vertices at both ends.

              In the basketballplayer dataset, the example is as follows:

              nebula> GO 3 STEPS FROM \"player100\" \\\n        OVER * \\\n        YIELD properties($$).name AS NAME, properties($$).age AS Age \\\n        SAMPLE [1,2,3];\n+-----------------+----------+\n| NAME            | Age      |\n+-----------------+----------+\n| \"Tony Parker\"   | 36       |\n| \"Manu Ginobili\" | 41       |\n| \"Spurs\"         | __NULL__ |\n+-----------------+----------+\n\nnebula> GO 1 TO 3 STEPS FROM \"player100\" \\\n        OVER * \\\n        YIELD properties($$).name AS NAME, properties($$).age AS Age \\\n        SAMPLE [2,2,2];\n+-----------------+----------+\n| NAME            | Age      |\n+-----------------+----------+\n| \"Manu Ginobili\" | 41       |\n| \"Spurs\"         | __NULL__ |\n| \"Tim Duncan\"    | 42       |\n| \"Spurs\"         | __NULL__ |\n| \"Manu Ginobili\" | 41       |\n| \"Spurs\"         | __NULL__ |\n+-----------------+----------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/","title":"TTL","text":"

              TTL (Time To Live) is a mechanism in NebulaGraph that defines the lifespan of data. Once the data reaches its predefined lifespan, it is automatically deleted from the database. This feature is particularly suitable for data that only needs temporary storage, such as temporary sessions or cached data.

              "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/#opencypher_compatibility","title":"OpenCypher Compatibility","text":"

              This topic applies to native nGQL only.

              "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/#precautions","title":"Precautions","text":"
              • You CANNOT modify a property schema with TTL options on it.
              • TTL options and indexes have coexistence issues.

                • TTL options and indexes CANNOT coexist on a tag or an edge type. If there is an index on a property, you cannot set TTL options on other properties.
                • If there are TTL options on a tag, an edge type, or a property, you can still add an index on them.
              "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/#ttl_options","title":"TTL options","text":"

              The native nGQL TTL feature has the following options.

              Option Description ttl_col Specifies an existing property to set a lifespan on. The data type of the property must be int or timestamp. ttl_duration Specifies the timeout adds-on value in seconds. The value must be a non-negative int64 number. A property expires if the sum of its value and the ttl_duration value is smaller than the current timestamp. If the ttl_duration value is 0, the property never expires.You can set ttl_use_ms to true in the configuration file nebula-storaged.conf (default path: /usr/local/nightly/etc/) to set the default unit to milliseconds.

              Warning

              • Before setting ttl_use_ms to true, make sure that no TTL has been set for any property, as shortening the expiration time may cause data to be erroneously deleted.
              • After setting ttl_use_ms to true, which sets the default TTL unit to milliseconds, the data type of the property specified by ttl_col must be int, and the property value needs to be manually converted to milliseconds. For example, when setting ttl_col to a, you need to convert the value of a to milliseconds, such as when the value of a is now(), you need to set the value of a to now() * 1000.
              "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/#use_ttl_options","title":"Use TTL options","text":"

              You must use the TTL options together to set a lifespan on a property.

              Before using the TTL feature, you must first create a timestamp or integer property and specify it in the TTL options. NebulaGraph will not automatically create or manage this timestamp property for you.

              When inserting the value of the timestamp or integer property, it is recommended to use the now() function or the current timestamp to represent the present time.

              "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/#set_a_timeout_if_a_tag_or_an_edge_type_exists","title":"Set a timeout if a tag or an edge type exists","text":"

              If a tag or an edge type is already created, to set a timeout on a property bound to the tag or edge type, use ALTER to update the tag or edge type.

              # Create a tag.\nnebula> CREATE TAG IF NOT EXISTS t1 (a timestamp);\n\n# Use ALTER to update the tag and set the TTL options.\nnebula> ALTER TAG t1 TTL_COL = \"a\", TTL_DURATION = 5;\n\n# Insert a vertex with tag t1. The vertex expires 5 seconds after the insertion.\nnebula> INSERT VERTEX t1(a) VALUES \"101\":(now());\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/#set_a_timeout_when_creating_a_tag_or_an_edge_type","title":"Set a timeout when creating a tag or an edge type","text":"

              Use TTL options in the CREATE statement to set a timeout when creating a tag or an edge type. For more information, see CREATE TAG and CREATE EDGE.

              # Create a tag and set the TTL options.\nnebula> CREATE TAG IF NOT EXISTS t2(a int, b int, c string) TTL_DURATION= 100, TTL_COL = \"a\";\n\n# Insert a vertex with tag t2. The timeout timestamp is 1648197238 (1648197138 + 100).\nnebula> INSERT VERTEX t2(a, b, c) VALUES \"102\":(1648197138, 30, \"Hello\");\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/#data_expiration_and_deletion","title":"Data expiration and deletion","text":"

              Caution

              • When the TTL options are set for a property of a tag or an edge type and the property's value is NULL, the property never expires.
              • If a property with a default value of now() is added to a tag or an edge type and the TTL options are set for the property, the history data related to the tag or the edge type will never expire because the value of that property for the history data is the current timestamp.
              "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/#vertex_property_expiration","title":"Vertex property expiration","text":"

              Vertex property expiration has the following impact.

              • If a vertex has only one tag, once a property of the vertex expires, the vertex expires.
              • If a vertex has multiple tags, once a property of the vertex expires, properties bound to the same tag with the expired property also expire, but the vertex does not expire and other properties of it remain untouched.
              "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/#edge_property_expiration","title":"Edge property expiration","text":"

              Since an edge can have only one edge type, once an edge property expires, the edge expires.

              "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/#data_deletion","title":"Data deletion","text":"

              The expired data are still stored on the disk, but queries will filter them out.

              NebulaGraph automatically deletes the expired data and reclaims the disk space during the next compaction.

              Note

              If TTL is disabled, the corresponding data deleted after the last compaction can be queried again.

              "},{"location":"3.ngql-guide/8.clauses-and-options/ttl-options/#remove_a_timeout","title":"Remove a timeout","text":"

              To disable TTL and remove the timeout on a property, you can use the following approaches.

              • Drop the property with the timeout.
                nebula> ALTER TAG t1 DROP (a);\n
              • Set ttl_col to an empty string.
                nebula> ALTER TAG t1 TTL_COL = \"\";\n
              • Set ttl_duration to 0. This operation keeps the TTL options and prevents the property from expiring and the property schema from being modified.
                nebula> ALTER TAG t1 TTL_DURATION = 0;\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/unwind/","title":"UNWIND","text":"

              UNWIND transform a list into a sequence of rows.

              UNWIND can be used as an individual statement or as a clause within a statement.

              "},{"location":"3.ngql-guide/8.clauses-and-options/unwind/#unwind_statement","title":"UNWIND statement","text":""},{"location":"3.ngql-guide/8.clauses-and-options/unwind/#syntax","title":"Syntax","text":"
              UNWIND <list> AS <alias> <RETURN clause>;\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/unwind/#examples","title":"Examples","text":"
              • To transform a list.

                nebula> UNWIND [1,2,3] AS n RETURN n;\n+---+\n| n |\n+---+\n| 1 |\n| 2 |\n| 3 |\n+---+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/unwind/#unwind_clause","title":"UNWIND clause","text":""},{"location":"3.ngql-guide/8.clauses-and-options/unwind/#syntax_1","title":"Syntax","text":"
              • The UNWIND clause in native nGQL statements.

                Note

                To use a UNWIND clause in a native nGQL statement, use it after the | operator and use the $- prefix for variables. If you use a statement or clause after the UNWIND clause, use the | operator and use the $- prefix for variables.

                <statement> | UNWIND $-.<var> AS <alias> <|> <clause>;\n
              • The UNWIND clause in openCypher statements.

                <statement> UNWIND <list> AS <alias> <RETURN clause>\uff1b\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/unwind/#examples_1","title":"Examples","text":"
              • To transform a list of duplicates into a unique set of rows using WITH DISTINCT in a UNWIND clause.

                Note

                WITH DISTINCT is not available in native nGQL statements.

                // Transform the list `[1,1,2,2,3,3]` into a unique set of rows, sort the rows, and then transform the rows into a list of unique values.\n\nnebula> WITH [1,1,2,2,3,3] AS n \\\n        UNWIND n AS r \\\n        WITH DISTINCT r AS r \\\n        ORDER BY r \\\n        RETURN collect(r);\n+------------+\n| collect(r) |\n+------------+\n| [1, 2, 3]  |\n+------------+\n
              • To use an UNWIND clause in a MATCH statement.

                // Get a list of the vertices in the matched path, transform the list into a unique set of rows, and then transform the rows into a list. \n\nnebula> MATCH p=(v:player{name:\"Tim Duncan\"})--(v2) \\\n        WITH nodes(p) AS n \\\n        UNWIND n AS r \\\n        WITH DISTINCT r AS r \\\n        RETURN collect(r);\n+----------------------------------------------------------------------------------------------------------------------+\n| collect(r)                                                                                                           |\n+----------------------------------------------------------------------------------------------------------------------+\n| [(\"player100\" :player{age: 42, name: \"Tim Duncan\"}), (\"player101\" :player{age: 36, name: \"Tony Parker\"}),            |\n|(\"team204\" :team{name: \"Spurs\"}), (\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"}),                          |\n|(\"player125\" :player{age: 41, name: \"Manu Ginobili\"}), (\"player104\" :player{age: 32, name: \"Marco Belinelli\"}),       |\n|(\"player144\" :player{age: 47, name: \"Shaquile O'Neal\"}), (\"player105\" :player{age: 31, name: \"Danny Green\"}),         |\n|(\"player113\" :player{age: 29, name: \"Dejounte Murray\"}), (\"player107\" :player{age: 32, name: \"Aron Baynes\"}),         |\n|(\"player109\" :player{age: 34, name: \"Tiago Splitter\"}), (\"player108\" :player{age: 36, name: \"Boris Diaw\"})]           |  \n+----------------------------------------------------------------------------------------------------------------------+\n
              • To use an UNWIND clause in a GO statement.

                // Query the vertices in a list for the corresponding edges with a specified statement.\n\nnebula> YIELD ['player101', 'player100'] AS a | UNWIND $-.a AS  b | GO FROM $-.b OVER follow YIELD edge AS e;\n+----------------------------------------------------+\n| e                                                  |\n+----------------------------------------------------+\n| [:follow \"player101\"->\"player100\" @0 {degree: 95}] |\n| [:follow \"player101\"->\"player102\" @0 {degree: 90}] |\n| [:follow \"player101\"->\"player125\" @0 {degree: 95}] |\n| [:follow \"player100\"->\"player101\" @0 {degree: 95}] |\n| [:follow \"player100\"->\"player125\" @0 {degree: 95}] |\n+----------------------------------------------------+\n
              • To use an UNWIND clause in a LOOKUP statement.

                // Find all the properties of players whose age is greater than 46, get a list of unique properties, and then transform the list into rows. \n\nnebula> LOOKUP ON player \\\n        WHERE player.age > 46 \\\n        YIELD DISTINCT keys(vertex) as p | UNWIND $-.p as a | YIELD $-.a AS a;\n+--------+\n| a      |\n+--------+\n| \"age\"  |\n| \"name\" |\n+--------+\n
              • To use an UNWIND clause in a FETCH statement.

                // Query player101 for all tags related to player101, get a list of the tags and then transform the list into rows.\n\nnebula> CREATE TAG hero(like string, height int);\n        INSERT VERTEX hero(like, height) VALUES \"player101\":(\"deep\", 182);\n        FETCH PROP ON * \"player101\" \\\n        YIELD tags(vertex) as t | UNWIND $-.t as a | YIELD $-.a AS a;\n+----------+\n| a        |\n+----------+\n| \"hero\"   |\n| \"player\" |\n+----------+\n
              • To use an UNWIND clause in a GET SUBGRAPH statement.

                // Get the subgraph including outgoing and incoming serve edges within 0~2 hops from/to player100, and transform the result into rows.\n\nnebula> GET SUBGRAPH 2 STEPS FROM \"player100\" BOTH serve \\\n        YIELD edges as e | UNWIND $-.e as a | YIELD $-.a AS a;\n+----------------------------------------------+\n| a                                            |\n+----------------------------------------------+\n| [:serve \"player100\"->\"team204\" @0 {}]        |\n| [:serve \"player101\"->\"team204\" @0 {}]        |\n| [:serve \"player102\"->\"team204\" @0 {}]        |\n| [:serve \"player103\"->\"team204\" @0 {}]        |\n| [:serve \"player105\"->\"team204\" @0 {}]        |\n| [:serve \"player106\"->\"team204\" @0 {}]        |\n| [:serve \"player107\"->\"team204\" @0 {}]        |\n| [:serve \"player108\"->\"team204\" @0 {}]        |\n| [:serve \"player109\"->\"team204\" @0 {}]        |\n| [:serve \"player110\"->\"team204\" @0 {}]        |\n| [:serve \"player111\"->\"team204\" @0 {}]        |\n| [:serve \"player112\"->\"team204\" @0 {}]        |\n| [:serve \"player113\"->\"team204\" @0 {}]        |\n| [:serve \"player114\"->\"team204\" @0 {}]        |\n| [:serve \"player125\"->\"team204\" @0 {}]        |\n| [:serve \"player138\"->\"team204\" @0 {}]        |\n| [:serve \"player104\"->\"team204\" @20132015 {}] |\n| [:serve \"player104\"->\"team204\" @20182019 {}] |\n+----------------------------------------------+\n
              • To use an UNWIND clause in a FIND PATH statement.

                // Find all the vertices in the shortest path from player101 to team204 along the serve edge, and transform the result into rows. \n\nnebula> FIND SHORTEST PATH FROM \"player101\" TO \"team204\" OVER serve \\\n        YIELD path as p | YIELD nodes($-.p) AS nodes | UNWIND $-.nodes AS a | YIELD $-.a AS a;\n+---------------+\n| a             |\n+---------------+\n| (\"player101\") |\n| (\"team204\")   |\n+---------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/where/","title":"WHERE","text":"

              The WHERE clause filters the output by conditions.

              The WHERE clause usually works in the following queries:

              • Native nGQL: such as GO and LOOKUP.
              • OpenCypher syntax: such as MATCH and WITH.
              "},{"location":"3.ngql-guide/8.clauses-and-options/where/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

              Filtering on edge rank is a native nGQL feature. To retrieve the rank value in openCypher statements, use the rank() function, such as MATCH (:player)-[e:follow]->() RETURN rank(e);.

              "},{"location":"3.ngql-guide/8.clauses-and-options/where/#basic_usage","title":"Basic usage","text":"

              Note

              In the following examples, $$ and $^ are reference operators. For more information, see Operators.

              "},{"location":"3.ngql-guide/8.clauses-and-options/where/#define_conditions_with_boolean_operators","title":"Define conditions with boolean operators","text":"

              Use the boolean operators NOT, AND, OR, and XOR to define conditions in WHERE clauses. For the precedence of the operators, see Precedence.

              nebula> MATCH (v:player) \\\n        WHERE v.player.name == \"Tim Duncan\" \\\n        XOR (v.player.age < 30 AND v.player.name == \"Yao Ming\") \\\n        OR NOT (v.player.name == \"Yao Ming\" OR v.player.name == \"Tim Duncan\") \\\n        RETURN v.player.name, v.player.age;\n+-------------------------+--------------+\n| v.player.name           | v.player.age |\n+-------------------------+--------------+\n| \"Danny Green\"           | 31           |\n| \"Tiago Splitter\"        | 34           |\n| \"David West\"            | 38           |\n...\n
              nebula> GO FROM \"player100\" \\\n        OVER follow \\\n        WHERE properties(edge).degree > 90 \\\n        OR properties($$).age != 33 \\\n        AND properties($$).name != \"Tony Parker\" \\\n        YIELD properties($$);\n+----------------------------------+\n| properties($$)                   |\n+----------------------------------+\n| {age: 41, name: \"Manu Ginobili\"} |\n+----------------------------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/where/#filter_on_properties","title":"Filter on properties","text":"

              Use vertex or edge properties to define conditions in WHERE clauses.

              • Filter on a vertex property:
                nebula> MATCH (v:player)-[e]->(v2) \\\n        WHERE v2.player.age < 25 \\\n        RETURN v2.player.name, v2.player.age;\n+----------------------+---------------+\n| v2.player.name       | v2.player.age |\n+----------------------+---------------+\n| \"Ben Simmons\"        | 22            |\n| \"Luka Doncic\"        | 20            |\n| \"Kristaps Porzingis\" | 23            |\n+----------------------+---------------+\n
                nebula> GO FROM \"player100\" OVER follow \\\n        WHERE $^.player.age >= 42 \\\n        YIELD dst(edge);\n+-------------+\n| dst(EDGE)   |\n+-------------+\n+-------------+\n| \"player101\" |\n| \"player125\" |\n+-------------+\n
              • Filter on an edge property:
                nebula> MATCH (v:player)-[e]->() \\\n        WHERE e.start_year < 2000 \\\n        RETURN DISTINCT v.player.name, v.player.age;\n+--------------------+--------------+\n| v.player.name      | v.player.age |\n+--------------------+--------------+\n| \"Tony Parker\"      | 36           |\n| \"Tim Duncan\"       | 42           |\n| \"Grant Hill\"       | 46           |\n...\n
                nebula> GO FROM \"player100\" OVER follow \\\n        WHERE follow.degree > 90 \\\n        YIELD dst(edge);\n+-------------+\n| dst(EDGE)   |\n+-------------+\n| \"player101\" |\n| \"player125\" |\n+-------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/where/#filter_on_dynamically-calculated_properties","title":"Filter on dynamically-calculated properties","text":"
              nebula> MATCH (v:player) \\\n        WHERE v[toLower(\"AGE\")] < 21 \\\n        RETURN v.player.name, v.player.age;\n+---------------+-------+\n| v.name        | v.age |\n+---------------+-------+\n| \"Luka Doncic\" | 20    |\n+---------------+-------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/where/#filter_on_existing_properties","title":"Filter on existing properties","text":"
              nebula> MATCH (v:player) \\\n        WHERE exists(v.player.age) \\\n        RETURN v.player.name, v.player.age;\n+-------------------------+--------------+\n| v.player.name           | v.player.age |\n+-------------------------+--------------+\n| \"Danny Green\"           | 31           |\n| \"Tiago Splitter\"        | 34           |\n| \"David West\"            | 38           |\n...\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/where/#filter_on_edge_rank","title":"Filter on edge rank","text":"

              In nGQL, if a group of edges has the same source vertex, destination vertex, and properties, the only thing that distinguishes them is the rank. Use rank conditions in WHERE clauses to filter such edges.

              # The following example creates test data.\nnebula> CREATE SPACE IF NOT EXISTS test (vid_type=FIXED_STRING(30));\nnebula> USE test;\nnebula> CREATE EDGE IF NOT EXISTS e1(p1 int);\nnebula> CREATE TAG IF NOT EXISTS person(p1 int);\nnebula> INSERT VERTEX person(p1) VALUES \"1\":(1);\nnebula> INSERT VERTEX person(p1) VALUES \"2\":(2);\nnebula> INSERT EDGE e1(p1) VALUES \"1\"->\"2\"@0:(10);\nnebula> INSERT EDGE e1(p1) VALUES \"1\"->\"2\"@1:(11);\nnebula> INSERT EDGE e1(p1) VALUES \"1\"->\"2\"@2:(12);\nnebula> INSERT EDGE e1(p1) VALUES \"1\"->\"2\"@3:(13);\nnebula> INSERT EDGE e1(p1) VALUES \"1\"->\"2\"@4:(14);\nnebula> INSERT EDGE e1(p1) VALUES \"1\"->\"2\"@5:(15);\nnebula> INSERT EDGE e1(p1) VALUES \"1\"->\"2\"@6:(16);\n\n# The following example use rank to filter edges and retrieves edges with a rank greater than 2.\nnebula> GO FROM \"1\" \\\n        OVER e1 \\\n        WHERE rank(edge) > 2 \\\n        YIELD src(edge), dst(edge), rank(edge) AS Rank, properties(edge).p1 | \\\n        ORDER BY $-.Rank DESC;\n+-----------+-----------+------+---------------------+\n| src(EDGE) | dst(EDGE) | Rank | properties(EDGE).p1 |\n+-----------+-----------+------+---------------------+\n| \"1\"       | \"2\"       | 6    | 16                  |\n| \"1\"       | \"2\"       | 5    | 15                  |\n| \"1\"       | \"2\"       | 4    | 14                  |\n| \"1\"       | \"2\"       | 3    | 13                  |\n+-----------+-----------+------+---------------------+\n\n# Filter edges by rank. Find follow edges with rank equal to 0.\nnebula> MATCH (v)-[e:follow]->() \\\n         WHERE rank(e)==0 \\\n         RETURN *;\n+------------------------------------------------------------+-----------------------------------------------------+\n| v                                                          | e                                                   |\n+------------------------------------------------------------+-----------------------------------------------------+\n| (\"player142\" :player{age: 29, name: \"Klay Thompson\"})      | [:follow \"player142\"->\"player117\" @0 {degree: 90}]  |\n| (\"player139\" :player{age: 34, name: \"Marc Gasol\"})         | [:follow \"player139\"->\"player138\" @0 {degree: 99}]  |\n| (\"player108\" :player{age: 36, name: \"Boris Diaw\"})         | [:follow \"player108\"->\"player100\" @0 {degree: 80}]  |\n| (\"player108\" :player{age: 36, name: \"Boris Diaw\"})         | [:follow \"player108\"->\"player101\" @0 {degree: 80}]  |\n...\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/where/#filter_on_pattern","title":"Filter on pattern","text":"
              nebula> MATCH (v:player{name:\"Tim Duncan\"})-[e]->(t) \\\n        WHERE (v)-[e]->(t:team) \\\n        RETURN (v)-->();\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| (v)-->() = (v)-->()                                                                                                                                                                                                                                                                                                                                                                                              |\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| [<(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:serve@0 {end_year: 2016, start_year: 1997}]->(\"team204\" :team{name: \"Spurs\"})>, <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})>, <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player125\" :player{age: 41, name: \"Manu Ginobili\"})>] |\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n\nnebula> MATCH (v:player{name:\"Tim Duncan\"})-[e]->(t) \\\n        WHERE NOT (v)-[e]->(t:team) \\\n        RETURN (v)-->();\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| (v)-->() = (v)-->()                                                                                                                                                                                                                                                                                                                                                                                              |\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| [<(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:serve@0 {end_year: 2016, start_year: 1997}]->(\"team204\" :team{name: \"Spurs\"})>, <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})>, <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player125\" :player{age: 41, name: \"Manu Ginobili\"})>] |\n| [<(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:serve@0 {end_year: 2016, start_year: 1997}]->(\"team204\" :team{name: \"Spurs\"})>, <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player101\" :player{age: 36, name: \"Tony Parker\"})>, <(\"player100\" :player{age: 42, name: \"Tim Duncan\"})-[:follow@0 {degree: 95}]->(\"player125\" :player{age: 41, name: \"Manu Ginobili\"})>] |\n+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/where/#filter_on_strings","title":"Filter on strings","text":"

              Use STARTS WITH, ENDS WITH, or CONTAINS in WHERE clauses to match a specific part of a string. String matching is case-sensitive.

              "},{"location":"3.ngql-guide/8.clauses-and-options/where/#starts_with","title":"STARTS WITH","text":"

              STARTS WITH will match the beginning of a string.

              The following example uses STARTS WITH \"T\" to retrieve the information of players whose name starts with T.

              nebula> MATCH (v:player) \\\n        WHERE v.player.name STARTS WITH \"T\" \\\n        RETURN v.player.name, v.player.age;\n+------------------+--------------+\n| v.player.name    | v.player.age |\n+------------------+--------------+\n| \"Tony Parker\"    | 36           |\n| \"Tiago Splitter\" | 34           |\n| \"Tim Duncan\"     | 42           |\n| \"Tracy McGrady\"  | 39           |\n+------------------+--------------+\n

              If you use STARTS WITH \"t\" in the preceding statement, an empty set is returned because no name in the dataset starts with the lowercase t.

              nebula> MATCH (v:player) \\\n        WHERE v.player.name STARTS WITH \"t\" \\\n        RETURN v.player.name, v.player.age;\n+---------------+--------------+\n| v.player.name | v.player.age |\n+---------------+--------------+\n+---------------+--------------+\nEmpty set (time spent 5080/6474 us)\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/where/#ends_with","title":"ENDS WITH","text":"

              ENDS WITH will match the ending of a string.

              The following example uses ENDS WITH \"r\" to retrieve the information of players whose name ends with r.

              nebula> MATCH (v:player) \\\n        WHERE v.player.name ENDS WITH \"r\" \\\n        RETURN v.player.name, v.player.age;\n+------------------+--------------+\n| v.player.name    | v.player.age |\n+------------------+--------------+\n| \"Tony Parker\"    | 36           |\n| \"Tiago Splitter\" | 34           |\n| \"Vince Carter\"   | 42           |\n+------------------+--------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/where/#contains","title":"CONTAINS","text":"

              CONTAINS will match a certain part of a string.

              The following example uses CONTAINS \"Pa\" to match the information of players whose name contains Pa.

              nebula> MATCH (v:player) \\\n        WHERE v.player.name CONTAINS \"Pa\" \\\n        RETURN v.player.name, v.player.age;\n+---------------+--------------+\n| v.player.name | v.player.age |\n+---------------+--------------+\n| \"Paul George\" | 28           |\n| \"Tony Parker\" | 36           |\n| \"Paul Gasol\"  | 38           |\n| \"Chris Paul\"  | 33           |\n+---------------+--------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/where/#negative_string_matching","title":"Negative string matching","text":"

              You can use the boolean operator NOT to negate a string matching condition.

              nebula> MATCH (v:player) \\\n        WHERE NOT v.player.name ENDS WITH \"R\" \\\n        RETURN v.player.name, v.player.age;\n+-------------------------+--------------+\n| v.player.name           | v.player.age |\n+-------------------------+--------------+\n| \"Danny Green\"           | 31           |\n| \"Tiago Splitter\"        | 34           |\n| \"David West\"            | 38           |\n| \"Russell Westbrook\"     | 30           |\n...\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/where/#filter_on_lists","title":"Filter on lists","text":""},{"location":"3.ngql-guide/8.clauses-and-options/where/#match_values_in_a_list","title":"Match values in a list","text":"

              Use the IN operator to check if a value is in a specific list.

              nebula> MATCH (v:player) \\\n        WHERE v.player.age IN range(20,25) \\\n        RETURN v.player.name, v.player.age;\n+-------------------------+--------------+\n| v.player.name           | v.player.age |\n+-------------------------+--------------+\n| \"Ben Simmons\"           | 22           |\n| \"Giannis Antetokounmpo\" | 24           |\n| \"Kyle Anderson\"         | 25           |\n| \"Joel Embiid\"           | 25           |\n| \"Kristaps Porzingis\"    | 23           |\n| \"Luka Doncic\"           | 20           |\n+-------------------------+--------------+\n\nnebula> LOOKUP ON player \\\n        WHERE player.age IN [25,28]  \\\n        YIELD properties(vertex).name, properties(vertex).age;\n+-------------------------+------------------------+\n| properties(VERTEX).name | properties(VERTEX).age |\n+-------------------------+------------------------+\n| \"Kyle Anderson\"         | 25                     |\n| \"Damian Lillard\"        | 28                     |\n| \"Joel Embiid\"           | 25                     |\n| \"Paul George\"           | 28                     |\n| \"Ricky Rubio\"           | 28                     |\n+-------------------------+------------------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/where/#match_values_not_in_a_list","title":"Match values not in a list","text":"

              Use NOT before IN to rule out the values in a list.

              nebula> MATCH (v:player) \\\n        WHERE v.player.age NOT IN range(20,25) \\\n        RETURN v.player.name AS Name, v.player.age AS Age \\\n        ORDER BY Age;\n+---------------------+-----+\n| Name                | Age |\n+---------------------+-----+\n| \"Kyrie Irving\"      | 26  |\n| \"Cory Joseph\"       | 27  |\n| \"Damian Lillard\"    | 28  |\n| \"Paul George\"       | 28  |\n| \"Ricky Rubio\"       | 28  |\n+---------------------+-----+\n...\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/with/","title":"WITH","text":"

              The WITH clause can retrieve the output from a query part, process it, and pass it to the next query part as the input.

              "},{"location":"3.ngql-guide/8.clauses-and-options/with/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

              This topic applies to openCypher syntax only.

              Note

              WITH has a similar function with the Pipe symbol in native nGQL, but they work in different ways. DO NOT use pipe symbols in the openCypher syntax or use WITH in native nGQL statements.

              "},{"location":"3.ngql-guide/8.clauses-and-options/with/#combine_statements_and_form_a_composite_query","title":"Combine statements and form a composite query","text":"

              Use a WITH clause to combine statements and transfer the output of a statement as the input of another statement.

              "},{"location":"3.ngql-guide/8.clauses-and-options/with/#example_1","title":"Example 1","text":"

              The following statement:

              1. Matches a path.
              2. Outputs all the vertices on the path to a list with the nodes() function.
              3. Unwinds the list into rows.
              4. Removes duplicated vertices and returns a set of distinct vertices.
              nebula> MATCH p=(v:player{name:\"Tim Duncan\"})--() \\\n        WITH nodes(p) AS n \\\n        UNWIND n AS n1 \\\n        RETURN DISTINCT n1;\n+-----------------------------------------------------------+\n| n1                                                        |\n+-----------------------------------------------------------+\n| (\"player100\" :player{age: 42, name: \"Tim Duncan\"})        |\n| (\"player101\" :player{age: 36, name: \"Tony Parker\"})       |\n| (\"team204\" :team{name: \"Spurs\"})                          |\n| (\"player102\" :player{age: 33, name: \"LaMarcus Aldridge\"}) |\n| (\"player125\" :player{age: 41, name: \"Manu Ginobili\"})     |\n| (\"player104\" :player{age: 32, name: \"Marco Belinelli\"})   |\n| (\"player144\" :player{age: 47, name: \"Shaquille O'Neal\"})  |\n| (\"player105\" :player{age: 31, name: \"Danny Green\"})       |\n| (\"player113\" :player{age: 29, name: \"Dejounte Murray\"})   |\n| (\"player107\" :player{age: 32, name: \"Aron Baynes\"})       |\n| (\"player109\" :player{age: 34, name: \"Tiago Splitter\"})    |\n| (\"player108\" :player{age: 36, name: \"Boris Diaw\"})        |\n+-----------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/with/#example_2","title":"Example 2","text":"

              The following statement:

              1. Matches the vertex with the VID player100.
              2. Outputs all the tags of the vertex into a list with the labels() function.
              3. Unwinds the list into rows.
              4. Returns the output.
              nebula> MATCH (v) \\\n        WHERE id(v)==\"player100\" \\\n        WITH labels(v) AS tags_unf \\\n        UNWIND tags_unf AS tags_f \\\n        RETURN tags_f;\n+----------+\n| tags_f   |\n+----------+\n| \"player\" |\n+----------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/with/#filter_composite_queries","title":"Filter composite queries","text":"

              WITH can work as a filter in the middle of a composite query.

              nebula> MATCH (v:player)-->(v2:player) \\\n        WITH DISTINCT v2 AS v2, v2.player.age AS Age \\\n        ORDER BY Age \\\n        WHERE Age<25 \\\n        RETURN v2.player.name AS Name, Age;\n+----------------------+-----+\n| Name                 | Age |\n+----------------------+-----+\n| \"Luka Doncic\"        | 20  |\n| \"Ben Simmons\"        | 22  |\n| \"Kristaps Porzingis\" | 23  |\n+----------------------+-----+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/with/#process_the_output_before_using_collect","title":"Process the output before using collect()","text":"

              Use a WITH clause to sort and limit the output before using collect() to transform the output into a list.

              nebula> MATCH (v:player) \\\n        WITH v.player.name AS Name \\\n        ORDER BY Name DESC \\\n        LIMIT 3 \\\n        RETURN collect(Name);\n+-----------------------------------------------+\n| collect(Name)                                 |\n+-----------------------------------------------+\n| [\"Yao Ming\", \"Vince Carter\", \"Tracy McGrady\"] |\n+-----------------------------------------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/with/#use_with_return","title":"Use with RETURN","text":"

              Set an alias using a WITH clause, and then output the result through a RETURN clause.

              nebula> WITH [1, 2, 3] AS `list` RETURN 3 IN `list` AS r;\n+------+\n| r    |\n+------+\n| true |\n+------+\n\nnebula> WITH 4 AS one, 3 AS two RETURN one > two AS result;\n+--------+\n| result |\n+--------+\n| true   |\n+--------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/yield/","title":"YIELD","text":"

              YIELD defines the output of an nGQL query.

              YIELD can lead a clause or a statement:

              • A YIELD clause works in nGQL statements such as GO, FETCH, or LOOKUP and must be defined to return the result.
              • A YIELD statement works in a composite query or independently.
              "},{"location":"3.ngql-guide/8.clauses-and-options/yield/#opencypher_compatibility","title":"OpenCypher compatibility","text":"

              This topic applies to native nGQL only. For the openCypher syntax, use RETURN.

              YIELD has different functions in openCypher and nGQL.

              • In openCypher, YIELD is used in the CALL[\u2026YIELD] clause to specify the output of the procedure call.

                Note

                NGQL does not support CALL[\u2026YIELD] yet.

              • In nGQL, YIELD works like RETURN in openCypher.

              Note

              In the following examples, $$ and $- are property references. For more information, see Reference to properties.

              "},{"location":"3.ngql-guide/8.clauses-and-options/yield/#yield_clauses","title":"YIELD clauses","text":""},{"location":"3.ngql-guide/8.clauses-and-options/yield/#syntax","title":"Syntax","text":"
              YIELD [DISTINCT] <col> [AS <alias>] [, <col> [AS <alias>] ...];\n
              Parameter Description DISTINCT Aggregates the output and makes the statement return a distinct result set. col A field to be returned. If no alias is set, col will be a column name in the output. alias An alias for col. It is set after the keyword AS and will be a column name in the output."},{"location":"3.ngql-guide/8.clauses-and-options/yield/#use_a_yield_clause_in_a_statement","title":"Use a YIELD clause in a statement","text":"
              • Use YIELD with GO:
                nebula> GO FROM \"player100\" OVER follow \\\n        YIELD properties($$).name AS Friend, properties($$).age AS Age;\n+-----------------+-----+\n| Friend          | Age |\n+-----------------+-----+\n| \"Tony Parker\"   | 36  |\n| \"Manu Ginobili\" | 41  |\n+-----------------+-----+\n
              • Use YIELD with FETCH:
                nebula> FETCH PROP ON player \"player100\" \\\n        YIELD properties(vertex).name;\n+-------------------------+\n| properties(VERTEX).name |\n+-------------------------+\n| \"Tim Duncan\"            |\n+-------------------------+\n
              • Use YIELD with LOOKUP:
                nebula> LOOKUP ON player WHERE player.name == \"Tony Parker\" \\\n        YIELD properties(vertex).name, properties(vertex).age;\n+-------------------------+------------------------+\n| properties(VERTEX).name | properties(VERTEX).age |\n+-------------------------+------------------------+\n| \"Tony Parker\"           | 36                     |\n+-------------------------+------------------------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/yield/#yield_statements","title":"YIELD statements","text":""},{"location":"3.ngql-guide/8.clauses-and-options/yield/#syntax_1","title":"Syntax","text":"
              YIELD [DISTINCT] <col> [AS <alias>] [, <col> [AS <alias>] ...]\n[WHERE <conditions>];\n
              Parameter Description DISTINCT Aggregates the output and makes the statement return a distinct result set. col A field to be returned. If no alias is set, col will be a column name in the output. alias An alias for col. It is set after the keyword AS and will be a column name in the output. conditions Conditions set in a WHERE clause to filter the output. For more information, see WHERE."},{"location":"3.ngql-guide/8.clauses-and-options/yield/#use_a_yield_statement_in_a_composite_query","title":"Use a YIELD statement in a composite query","text":"

              In a composite query, a YIELD statement accepts, filters, and modifies the result set of the preceding statement, and then outputs it.

              The following query finds the players that \"player100\" follows and calculates their average age.

              nebula> GO FROM \"player100\" OVER follow \\\n        YIELD dst(edge) AS ID \\\n        | FETCH PROP ON player $-.ID \\\n        YIELD properties(vertex).age AS Age \\\n        | YIELD AVG($-.Age) as Avg_age, count(*)as Num_friends;\n+---------+-------------+\n| Avg_age | Num_friends |\n+---------+-------------+\n| 38.5    | 2           |\n+---------+-------------+\n

              The following query finds the players that \"player101\" follows with the follow degrees greater than 90.

              nebula> $var1 = GO FROM \"player101\" OVER follow \\\n        YIELD properties(edge).degree AS Degree, dst(edge) as ID; \\\n        YIELD $var1.ID AS ID WHERE $var1.Degree > 90;\n+-------------+\n| ID          |\n+-------------+\n| \"player100\" |\n| \"player125\" |\n+-------------+\n

              The following query finds the vertices in the player that are older than 30 and younger than 32, and returns the de-duplicate results.

              nebula> LOOKUP ON player  \\\n        WHERE player.age < 32 and player.age >30  \\\n        YIELD DISTINCT properties(vertex).age as v;\n+--------+\n| v      |\n+--------+\n| 31     |\n+--------+\n
              "},{"location":"3.ngql-guide/8.clauses-and-options/yield/#use_a_standalone_yield_statement","title":"Use a standalone YIELD statement","text":"

              A YIELD statement can calculate a valid expression and output the result.

              nebula> YIELD rand32(1, 6);\n+-------------+\n| rand32(1,6) |\n+-------------+\n| 3           |\n+-------------+\n\nnebula> YIELD \"Hel\" + \"\\tlo\" AS string1, \", World!\" AS string2;\n+-------------+------------+\n| string1     | string2    |\n+-------------+------------+\n| \"Hel    lo\" | \", World!\" |\n+-------------+------------+\n\nnebula> YIELD hash(\"Tim\") % 100;\n+-----------------+\n| (hash(Tim)%100) |\n+-----------------+\n| 42              |\n+-----------------+\n\nnebula> YIELD \\\n      CASE 2+3 \\\n      WHEN 4 THEN 0 \\\n      WHEN 5 THEN 1 \\\n      ELSE -1 \\\n      END \\\n      AS result;\n+--------+\n| result |\n+--------+\n| 1      |\n+--------+\n\nnebula> YIELD 1- -1;\n+----------+\n| (1--(1)) |\n+----------+\n| 2        |\n+----------+\n
              "},{"location":"3.ngql-guide/9.space-statements/1.create-space/","title":"CREATE SPACE","text":"

              Graph spaces are used to store data in a physically isolated way in NebulaGraph, which is similar to the database concept in MySQL. The CREATE SPACE statement can create a new graph space or clone the schema of an existing graph space.

              "},{"location":"3.ngql-guide/9.space-statements/1.create-space/#prerequisites","title":"Prerequisites","text":"

              Only the God role can use the CREATE SPACE statement. For more information, see AUTHENTICATION.

              "},{"location":"3.ngql-guide/9.space-statements/1.create-space/#syntax","title":"Syntax","text":""},{"location":"3.ngql-guide/9.space-statements/1.create-space/#create_graph_spaces","title":"Create graph spaces","text":"
              CREATE SPACE [IF NOT EXISTS] <graph_space_name> (\n    [partition_num = <partition_number>,]\n    [replica_factor = <replica_number>,]\n    vid_type = {FIXED_STRING(<N>) | INT[64]}\n    )\n    [COMMENT = '<comment>']\n
              Parameter Description IF NOT EXISTS Detects if the related graph space exists. If it does not exist, a new one will be created. The graph space existence detection here only compares the graph space name (excluding properties). <graph_space_name> 1. Uniquely identifies a graph space in a NebulaGraph instance. 2. Space names cannot be modified after they are set. 3. By default, the name only supports 1-4 byte UTF-8 encoded characters, including English letters (case sensitive), numbers, Chinese characters, etc. However, it cannot include special characters other than the underscore (_), and cannot start with a number. 4. To use special characters, reserved keywords, or start with a number, quote the entire name with backticks (`) and do not include periods (.) within the pair of backticks (`). For more information, see Keywords and reserved words. Note:1. If you name a space in Chinese and encounter a SyntaxError, you need to quote the Chinese characters with backticks (`). 2. To include a backtick (`) in a space name, use a backslash to escape the backtick, such as \\`; to include a backslash, the backslash itself also needs to be escaped, such as \\ . partition_num Specifies the number of partitions in each replica. The suggested value is 20 times (2 times for HDD) the number of the hard disks in the cluster. For example, if you have three hard disks in the cluster, we recommend that you set 60 partitions. The default value is 100. replica_factor Specifies the number of replicas in the cluster. The suggested number is 3 in a production environment and 1 in a test environment. The replica number must be an odd number for the need of quorum-based voting. The default value is 1. vid_type A required parameter. Specifies the VID type in a graph space. Available values are FIXED_STRING(N) and INT64. INT equals to INT64. `FIXED_STRING(<N>) specifies the VID as a string, while INT64 specifies it as an integer. N represents the maximum length of the VIDs. If you set a VID that is longer than N bytes, NebulaGraph throws an error. Note, for UTF-8 chars, the length may vary in different cases, i.e. a UTF-8 Chinese char is 3 byte, this means 11 Chinese chars(length-33) will exeed a FIXED_STRING(32) vid defination. COMMENT The remarks of the graph space. The maximum length is 256 bytes. By default, there is no comments on a space.

              Caution

              • If the replica number is set to one, you will not be able to load balance or scale out the NebulaGraph Storage Service with the SUBMIT JOB BALANCE statement.
              • Restrictions on VID type change and VID length:

                • For NebulaGraph v1.x, the type of VIDs can only be INT64, and the String type is not allowed. For NebulaGraph v2.x, both INT64 and FIXED_STRING(<N>) VID types are allowed. You must specify the VID type when creating a graph space, and use the same VID type in INSERT statements, otherwise, an error message Wrong vertex id type: 1001 occurs.
                • The length of the VID should not be longer than N characters. If it exceeds N, NebulaGraph throws The VID must be a 64-bit integer or a string fitting space vertex id length limit..
              • If the Host not enough! error appears, the immediate cause is that the number of online storage hosts is less than the value of replica_factor specified when creating a graph space. In this case, you can use the SHOW HOSTS command to see if the following situations occur:

                • For the case where there is only one storage host in a cluster, the value of replica_factor can only be specified to 1. Or create a graph space after storage hosts are scaled out.
                • A new storage host is found, but ADD HOSTS is not executed to activate it. In this case, run SHOW HOSTS to locate the new storage host information and then run ADD HOSTS to activate it. A graph space can be created after there are enough storage hosts.
                • For offline storage hosts after running SHOW HOSTS, troubleshooting is needed.

              Legacy version compatibility

              For NebulaGraph v2.x before v2.5.0, vid_type is optional and defaults to FIXED_STRING(8).

              Note

              graph_space_name, partition_num, replica_factor, vid_type, and comment cannot be modified once set. To modify them, drop the current working graph space with DROP SPACE and create a new one with CREATE SPACE.

              "},{"location":"3.ngql-guide/9.space-statements/1.create-space/#clone_graph_spaces","title":"Clone graph spaces","text":"
              CREATE SPACE [IF NOT EXISTS] <new_graph_space_name> AS <old_graph_space_name>;\n
              Parameter Description IF NOT EXISTS Detects if the new graph space exists. If it does not exist, the new one will be created. The graph space existence detection here only compares the graph space name (excluding properties). <new_graph_space_name> The name of the graph space that is newly created. By default, the space name only supports 1-4 byte UTF-8 encoded characters, including English letters (case sensitive), numbers, Chinese characters, etc. But special characters can only use underscore, and cannot start with a number. To use special characters, reserved keywords, or start with a number, quote the entire name with backticks (`) and cannot use periods (.). For more information, see Keywords and reserved words. When a new graph space is created, the schema of the old graph space <old_graph_space_name> will be cloned, including its parameters (the number of partitions and replicas, etc.), Tag, Edge type and native indexes. Note:1. If you name a space in Chinese and encounter a SyntaxError, you need to quote the Chinese characters with backticks (`). 2. To include a backtick (`) in a space name, use a backslash to escape the backtick, such as \\`; to include a backslash, the backslash itself also needs to be escaped, such as \\ . <old_graph_space_name> The name of the graph space that already exists."},{"location":"3.ngql-guide/9.space-statements/1.create-space/#examples","title":"Examples","text":"
              # The following example creates a graph space with a specified VID type and the maximum length. Other fields still use the default values.\nnebula> CREATE SPACE IF NOT EXISTS my_space_1 (vid_type=FIXED_STRING(30));\n\n# The following example creates a graph space with a specified partition number, replica number, and VID type.\nnebula> CREATE SPACE IF NOT EXISTS my_space_2 (partition_num=15, replica_factor=1, vid_type=FIXED_STRING(30));\n\n#  The following example creates a graph space with a specified partition number, replica number, and VID type, and adds a comment on it.\nnebula> CREATE SPACE IF NOT EXISTS my_space_3 (partition_num=15, replica_factor=1, vid_type=FIXED_STRING(30)) comment=\"Test the graph space\";\n\n# Clone a graph space.\nnebula> CREATE SPACE IF NOT EXISTS my_space_4 as my_space_3;\nnebula> SHOW CREATE SPACE my_space_4;\n+--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| Space        | Create Space                                                                                                                                                 |\n+--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| \"my_space_4\" | \"CREATE SPACE `my_space_4` (partition_num = 15, replica_factor = 1, charset = utf8, collate = utf8_bin, vid_type = FIXED_STRING(30)) comment = '\u6d4b\u8bd5\u56fe\u7a7a\u95f4'\" |\n+--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------+\n
              "},{"location":"3.ngql-guide/9.space-statements/1.create-space/#implementation_of_the_operation","title":"Implementation of the operation","text":"

              Caution

              Trying to use a newly created graph space may fail because the creation is implemented asynchronously. To make sure the follow-up operations work as expected, Wait for two heartbeat cycles, i.e., 20 seconds. To change the heartbeat interval, modify the heartbeat_interval_secs parameter in the configuration files for all services. If the heartbeat interval is too short (i.e., less than 5 seconds), disconnection between peers may happen because of the misjudgment of machines in the distributed system.

              "},{"location":"3.ngql-guide/9.space-statements/1.create-space/#check_partition_distribution","title":"Check partition distribution","text":"

              On some large clusters, the partition distribution is possibly unbalanced because of the different startup times. You can run the following command to do a check of the machine distribution.

              nebula> SHOW HOSTS;\n+-------------+------+----------+--------------+--------------------------------+--------------------------------+---------+\n| Host        | Port | Status   | Leader count | Leader distribution            | Partition distribution         | Version |\n+-------------+------+----------+--------------+--------------------------------+--------------------------------+---------+\n| \"storaged0\" | 9779 | \"ONLINE\" | 8            | \"basketballplayer:3, test:5\"   | \"basketballplayer:10, test:10\" | \"master\" |\n| \"storaged1\" | 9779 | \"ONLINE\" | 9            | \"basketballplayer:4, test:5\"   | \"basketballplayer:10, test:10\" | \"master\" |\n| \"storaged2\" | 9779 | \"ONLINE\" | 3            | \"basketballplayer:3\"           | \"basketballplayer:10, test:10\" | \"master\" |\n+-------------+------+----------+--------------+--------------------------------+--------------------------------+---------+\n

              To balance the request loads, use the following command.

              nebula> BALANCE LEADER;\nnebula> SHOW HOSTS;\n+-------------+------+----------+--------------+--------------------------------+--------------------------------+---------+\n| Host        | Port | HTTP port | Status   | Leader count | Leader distribution            | Partition distribution         | Version |\n+-------------+------+-----------+----------+--------------+--------------------------------+--------------------------------+---------+\n| \"storaged0\" | 9779 | \"ONLINE\" | 7            | \"basketballplayer:3, test:4\"   | \"basketballplayer:10, test:10\" | \"master\" |\n| \"storaged1\" | 9779 | \"ONLINE\" | 7            | \"basketballplayer:4, test:3\"   | \"basketballplayer:10, test:10\" | \"master\" |\n| \"storaged2\" | 9779 | \"ONLINE\" | 6            | \"basketballplayer:3, test:3\"   | \"basketballplayer:10, test:10\" | \"master\" |\n+-------------+------+----------+--------------+--------------------------------+--------------------------------+---------+\n
              "},{"location":"3.ngql-guide/9.space-statements/2.use-space/","title":"USE","text":"

              USE specifies a graph space as the current working graph space for subsequent queries.

              "},{"location":"3.ngql-guide/9.space-statements/2.use-space/#prerequisites","title":"Prerequisites","text":"

              Running the USE statement requires some privileges for the graph space. Otherwise, NebulaGraph throws an error.

              "},{"location":"3.ngql-guide/9.space-statements/2.use-space/#syntax","title":"Syntax","text":"
              USE <graph_space_name>;\n
              "},{"location":"3.ngql-guide/9.space-statements/2.use-space/#examples","title":"Examples","text":"
              # The following example creates two sample spaces.\nnebula> CREATE SPACE IF NOT EXISTS space1 (vid_type=FIXED_STRING(30));\nnebula> CREATE SPACE IF NOT EXISTS space2 (vid_type=FIXED_STRING(30));\n\n# The following example specifies space1 as the current working graph space.\nnebula> USE space1;\n\n# The following example specifies space2 as the current working graph space. Hereafter, you cannot read any data from space1, because these vertices and edges being traversed have no relevance with space1.\nnebula> USE space2;\n

              Caution

              You cannot use two graph spaces in one statement.

              Different from Fabric Cypher, graph spaces in NebulaGraph are fully isolated from each other. Making a graph space as the working graph space prevents you from accessing other spaces. The only way to traverse in a new graph space is to switch by the USE statement. In Fabric Cypher, you can use two graph spaces in one statement (using the USE + CALL syntax). But in NebulaGraph, you can only use one graph space in one statement.

              "},{"location":"3.ngql-guide/9.space-statements/3.show-spaces/","title":"SHOW SPACES","text":"

              SHOW SPACES lists all the graph spaces in the NebulaGraph examples.

              "},{"location":"3.ngql-guide/9.space-statements/3.show-spaces/#syntax","title":"Syntax","text":"
              SHOW SPACES;\n
              "},{"location":"3.ngql-guide/9.space-statements/3.show-spaces/#example","title":"Example","text":"
              nebula> SHOW SPACES;\n+--------------------+\n| Name               |\n+--------------------+\n| \"cba\"              |\n| \"basketballplayer\" |\n+--------------------+\n

              To create graph spaces, see CREATE SPACE.

              "},{"location":"3.ngql-guide/9.space-statements/4.describe-space/","title":"DESCRIBE SPACE","text":"

              DESCRIBE SPACE returns the information about the specified graph space.

              "},{"location":"3.ngql-guide/9.space-statements/4.describe-space/#syntax","title":"Syntax","text":"

              You can use DESC instead of DESCRIBE for short.

              DESC[RIBE] SPACE <graph_space_name>;\n

              The DESCRIBE SPACE statement is different from the SHOW SPACES statement. For details about SHOW SPACES, see SHOW SPACES.

              "},{"location":"3.ngql-guide/9.space-statements/4.describe-space/#example","title":"Example","text":"
              nebula> DESCRIBE SPACE basketballplayer;\n+----+--------------------+------------------+----------------+---------+------------+--------------------+---------+\n| ID | Name               | Partition Number | Replica Factor | Charset | Collate    | Vid Type           | Comment |\n+----+--------------------+------------------+----------------+---------+------------+--------------------+---------+\n| 1  | \"basketballplayer\" | 10               | 1              | \"utf8\"  | \"utf8_bin\" | \"FIXED_STRING(32)\" |         |\n+----+--------------------+------------------+----------------+---------+------------+--------------------+---------+\n
              "},{"location":"3.ngql-guide/9.space-statements/5.drop-space/","title":"DROP SPACE","text":"

              DROP SPACE deletes the specified graph space and everything in it.

              Note

              DROP SPACE can only delete the specified logic graph space while retain all the data on the hard disk by modifying the value of auto_remove_invalid_space to false in the Storage service configuration file. For more information, see Storage configuration.

              Warning

              After you execute DROP SPACE, even if the snapshot contains data of the graph space, the data of the graph space cannot be recovered.

              "},{"location":"3.ngql-guide/9.space-statements/5.drop-space/#prerequisites","title":"Prerequisites","text":"

              Only the God role can use the DROP SPACE statement. For more information, see AUTHENTICATION.

              "},{"location":"3.ngql-guide/9.space-statements/5.drop-space/#syntax","title":"Syntax","text":"
              DROP SPACE [IF EXISTS] <graph_space_name>;\n

              You can use the IF EXISTS keywords when dropping spaces. These keywords automatically detect if the related graph space exists. If it exists, it will be deleted. Otherwise, no graph space will be deleted.

              Legacy version compatibility

              In NebulaGraph versions earlier than 3.1.0, the DROP SPACE statement does not remove all the files and directories from the disk by default.

              Danger

              BE CAUTIOUS about running the DROP SPACE statement.

              "},{"location":"3.ngql-guide/9.space-statements/5.drop-space/#faq","title":"FAQ","text":"

              Q: Why is my disk space not freed after executing the 'DROP SPACE' statement and deleting a graph space?

              A: For NebulaGraph version earlier than 3.1.0, DROP SPACE can only delete the specified logic graph space and does not delete the files and directories on the disk. To delete the files and directories on the disk, manually delete the corresponding file path. The file path is located in <nebula_graph_install_path>/data/storage/nebula/<space_id>. The <space_id> can be viewed via DESCRIBE SPACE {space_name}.

              "},{"location":"3.ngql-guide/9.space-statements/6.clear-space/","title":"CLEAR SPACE","text":"

              CLEAR SPACE deletes the vertices and edges in a graph space, but does not delete the graph space itself and the schema information.

              Note

              It is recommended to execute SUBMIT JOB COMPACT immediately after executing the CLEAR SPACE operation improve the query performance. Note that the COMPACT operation may affect query performance, and it is recommended to perform this operation during low business hours (e.g., early morning).

              "},{"location":"3.ngql-guide/9.space-statements/6.clear-space/#permission_requirements","title":"Permission requirements","text":"

              Only the God role has the permission to run CLEAR SPACE.

              "},{"location":"3.ngql-guide/9.space-statements/6.clear-space/#caution","title":"Caution","text":"
              • Once cleared, the data CANNOT be recovered. Use CLEAR SPACE with caution.
              • CLEAR SPACE is not an atomic operation. If an error occurs, re-run CLEAR SPACE to avoid data remaining.
              • The larger the amount of data in the graph space, the longer it takes to clear it. If the execution fails due to client connection timeout, increase the value of the storage_client_timeout_ms parameter in the Graph Service configuration.
              • During the execution of CLEAR SPACE, writing data into the graph space is not automatically prohibited. Such write operations can result in incomplete data clearing, and the residual data can be damaged.

              Note

              The NebulaGraph Community Edition does not support blocking data writing while allowing CLEAR SPACE.

              "},{"location":"3.ngql-guide/9.space-statements/6.clear-space/#syntax","title":"Syntax","text":"
              CLEAR SPACE [IF EXISTS] <space_name>;\n
              Parameter/Option Description IF EXISTS Check whether the graph space to be cleared exists. If it exists, continue to clear it. If it does not exist, the execution finishes, and a message indicating that the execution succeeded is displayed. If IF EXISTS is not set and the graph space does not exist, the CLEAR SPACE statement fails to execute, and an error occurs. space_name The name of the space to be cleared.

              Example:

              CLEAR SPACE basketballplayer;\n
              "},{"location":"3.ngql-guide/9.space-statements/6.clear-space/#data_reserved","title":"Data reserved","text":"

              CLEAR SPACE does not delete the following data in a graph space:

              • Tag information.
              • Edge type information.
              • The metadata of native indexes and full-text indexes.

              The following example shows what CLEAR SPACE deletes and reserves.

              # Enter the graph space basketballplayer.\nnebula [(none)]> use basketballplayer;\nExecution succeeded\n\n# List tags and Edge types.\nnebula[basketballplayer]> SHOW TAGS;\n+----------+\n| Name     |\n+----------+\n| \"player\" |\n| \"team\"   |\n+----------+\nGot 2 rows\n\nnebula[basketballplayer]> SHOW EDGES;\n+----------+\n| Name     |\n+----------+\n| \"follow\" |\n| \"serve\"  |\n+----------+\nGot 2 rows\n\n# Submit a job to make statistics of the graph space.\nnebula[basketballplayer]> SUBMIT JOB STATS;\n+------------+\n| New Job Id |\n+------------+\n| 4          |\n+------------+\nGot 1 rows\n\n# Check the statistics.\nnebula[basketballplayer]> SHOW STATS;\n+---------+------------+-------+\n| Type    | Name       | Count |\n+---------+------------+-------+\n| \"Tag\"   | \"player\"   | 51    |\n| \"Tag\"   | \"team\"     | 30    |\n| \"Edge\"  | \"follow\"   | 81    |\n| \"Edge\"  | \"serve\"    | 152   |\n| \"Space\" | \"vertices\" | 81    |\n| \"Space\" | \"edges\"    | 233   |\n+---------+------------+-------+\nGot 6 rows\n\n# List tag indexes.\nnebula[basketballplayer]> SHOW TAG INDEXES;\n+------------------+----------+----------+\n| Index Name       | By Tag   | Columns  |\n+------------------+----------+----------+\n| \"player_index_0\" | \"player\" | []       |\n| \"player_index_1\" | \"player\" | [\"name\"] |\n+------------------+----------+----------+\nGot 2 rows\n\n# ----------------------- Dividing line for CLEAR SPACE -----------------------\n# Run CLEAR SPACE to clear the graph space basketballplayer.\nnebula[basketballplayer]> CLEAR SPACE basketballplayer;\nExecution succeeded\n\n# Update the statistics.\nnebula[basketballplayer]> SUBMIT JOB STATS;\n+------------+\n| New Job Id |\n+------------+\n| 5          |\n+------------+\nGot 1 rows\n\n# Check the statistics. The tags and edge types still exist, but all the vertices and edges are gone.\nnebula[basketballplayer]> SHOW STATS;\n+---------+------------+-------+\n| Type    | Name       | Count |\n+---------+------------+-------+\n| \"Tag\"   | \"player\"   | 0     |\n| \"Tag\"   | \"team\"     | 0     |\n| \"Edge\"  | \"follow\"   | 0     |\n| \"Edge\"  | \"serve\"    | 0     |\n| \"Space\" | \"vertices\" | 0     |\n| \"Space\" | \"edges\"    | 0     |\n+---------+------------+-------+\nGot 6 rows\n\n# Try to list the tag indexes. They still exist.\nnebula[basketballplayer]> SHOW TAG INDEXES;\n+------------------+----------+----------+\n| Index Name       | By Tag   | Columns  |\n+------------------+----------+----------+\n| \"player_index_0\" | \"player\" | []       |\n| \"player_index_1\" | \"player\" | [\"name\"] |\n+------------------+----------+----------+\nGot 2 rows (time spent 523/978 us)\n
              "},{"location":"4.deployment-and-installation/1.resource-preparations/","title":"Prepare resources for compiling, installing, and running NebulaGraph","text":"

              This topic describes the requirements and suggestions for compiling and installing NebulaGraph, as well as how to estimate the resource you need to reserve for running a NebulaGraph cluster.

              "},{"location":"4.deployment-and-installation/1.resource-preparations/#about_storage_devices","title":"About storage devices","text":"

              NebulaGraph is designed and implemented for NVMe SSD. All default parameters are optimized for the SSD devices and require extremely high IOPS and low latency.

              • Due to the poor IOPS capability and long random seek latency, HDD is not recommended. Users may encounter many problems when using HDD.
              • Do not use remote storage devices, such as NAS or SAN. Do not connect an external virtual hard disk based on HDFS or Ceph.
              • RAID is not recommended because NebulaGraph provides a multi-replica mechanism. Configuring RAID would result in a waste of resources.
              • Use local SSD devices, or AWS Provisioned IOPS SSD equivalence.
              "},{"location":"4.deployment-and-installation/1.resource-preparations/#about_cpu_architecture","title":"About CPU architecture","text":"

              Starting with 3.0.2, you can run containerized NebulaGraph databases on Docker Desktop for ARM macOS or on ARM Linux servers.

              Caution

              We do not recommend you deploy NebulaGraph on Docker Desktop for Windows due to its subpar performance. For details, see #12401.

              "},{"location":"4.deployment-and-installation/1.resource-preparations/#requirements_for_compiling_the_source_code","title":"Requirements for compiling the source code","text":""},{"location":"4.deployment-and-installation/1.resource-preparations/#hardware_requirements_for_compiling_nebulagraph","title":"Hardware requirements for compiling NebulaGraph","text":"Item Requirement CPU architecture x86_64 Memory 4 GB Disk 10 GB, SSD"},{"location":"4.deployment-and-installation/1.resource-preparations/#supported_operating_systems_for_compiling_nebulagraph","title":"Supported operating systems for compiling NebulaGraph","text":"

              For now, we can only compile NebulaGraph in the Linux system. We recommend that you use any Linux system with kernel version 4.15 or above.

              Note

              To install NebulaGraph on Linux systems with kernel version lower than required, use RPM/DEB packages or TAR files.

              "},{"location":"4.deployment-and-installation/1.resource-preparations/#software_requirements_for_compiling_nebulagraph","title":"Software requirements for compiling NebulaGraph","text":"

              You must have the correct version of the software listed below to compile NebulaGraph. If they are not as required or you are not sure, follow the steps in Prepare software for compiling NebulaGraph to get them ready.

              Software Version Note glibc 2.17 or above You can run ldd --version to check the glibc version. make Any stable version - m4 Any stable version - git Any stable version - wget Any stable version - unzip Any stable version - xz Any stable version - readline-devel Any stable version - ncurses-devel Any stable version - zlib-devel Any stable version - g++ 8.5.0 or above You can run gcc -v to check the gcc version. cmake 3.14.0 or above You can run cmake --version to check the cmake version. curl Any stable version - redhat-lsb-core Any stable version - libstdc++-static Any stable version Only needed in CentOS 8+, RedHat 8+, and Fedora systems. libasan Any stable version Only needed in CentOS 8+, RedHat 8+, and Fedora systems. bzip2 Any stable version -

              Other third-party software will be automatically downloaded and installed to the build directory at the configure (cmake) stage.

              "},{"location":"4.deployment-and-installation/1.resource-preparations/#prepare_software_for_compiling_nebulagraph","title":"Prepare software for compiling NebulaGraph","text":"

              If part of the dependencies are missing or the versions does not meet the requirements, manually install them with the following steps. You can skip unnecessary dependencies or steps according to your needs.

              1. Install dependencies.

                • For CentOS, RedHat, and Fedora users, run the following commands.
                  $ yum update\n$ yum install -y make \\\n                 m4 \\\n                 git \\\n                 wget \\\n                 unzip \\\n                 xz \\\n                 readline-devel \\\n                 ncurses-devel \\\n                 zlib-devel \\\n                 gcc \\\n                 gcc-c++ \\\n                 cmake \\\n                 curl \\\n                 redhat-lsb-core \\\n                 bzip2\n  // For CentOS 8+, RedHat 8+, and Fedora, install libstdc++-static and libasan as well\n$ yum install -y libstdc++-static libasan\n
                • For Debian and Ubuntu users, run the following commands.
                  $ apt-get update\n$ apt-get install -y make \\\n                     m4 \\\n                     git \\\n                     wget \\\n                     unzip \\\n                     xz-utils \\\n                     curl \\\n                     lsb-core \\\n                     build-essential \\\n                     libreadline-dev \\\n                     ncurses-dev \\\n                     cmake \\\n                     bzip2\n
              2. Check if the GCC and cmake on your host are in the right version. See Software requirements for compiling NebulaGraph for the required versions.

                $ g++ --version\n$ cmake --version\n

                If your GCC and CMake are in the right versions, then you are all set and you can ignore the subsequent steps. If they are not, select and perform the needed steps as follows.

              3. If the CMake version is incorrect, visit the CMake official website to install the required version.

              4. If the G++ version is incorrect, visit the G++ official website or follow the instructions below to to install the required version.

                • For CentOS users, run:

                  yum install centos-release-scl\nyum install devtoolset-11\nscl enable devtoolset-11 'bash'\n
                • For Ubuntu users, run:

                  add-apt-repository ppa:ubuntu-toolchain-r/test\napt install gcc-11 g++-11\n
              "},{"location":"4.deployment-and-installation/1.resource-preparations/#requirements_and_suggestions_for_installing_nebulagraph_in_test_environments","title":"Requirements and suggestions for installing NebulaGraph in test environments","text":""},{"location":"4.deployment-and-installation/1.resource-preparations/#hardware_requirements_for_test_environments","title":"Hardware requirements for test environments","text":"Item Requirement CPU architecture x86_64 Number of CPU core 4 Memory 8 GB Disk 100 GB, SSD"},{"location":"4.deployment-and-installation/1.resource-preparations/#supported_operating_systems_for_test_environments","title":"Supported operating systems for test environments","text":"

              For now, we can only install NebulaGraph in the Linux system. To install NebulaGraph in a test environment, we recommend that you use any Linux system with kernel version 3.9 or above.

              "},{"location":"4.deployment-and-installation/1.resource-preparations/#suggested_service_architecture_for_test_environments","title":"Suggested service architecture for test environments","text":"Process Suggested number metad (the metadata service process) 1 storaged (the storage service process) 1 or more graphd (the query engine service process) 1 or more

              For example, for a single-machine test environment, you can deploy 1 metad, 1 storaged, and 1 graphd processes in the machine.

              For a more common test environment, such as a cluster of 3 machines (named as A, B, and C), you can deploy NebulaGraph as follows:

              Machine name Number of metad Number of storaged Number of graphd A 1 1 1 B None 1 1 C None 1 1"},{"location":"4.deployment-and-installation/1.resource-preparations/#requirements_and_suggestions_for_installing_nebulagraph_in_production_environments","title":"Requirements and suggestions for installing NebulaGraph in production environments","text":""},{"location":"4.deployment-and-installation/1.resource-preparations/#hardware_requirements_for_production_environments","title":"Hardware requirements for production environments","text":"Item Requirement CPU architecture x86_64 Number of CPU core 48 Memory 256 GB Disk 2 * 1.6 TB, NVMe SSD"},{"location":"4.deployment-and-installation/1.resource-preparations/#supported_operating_systems_for_production_environments","title":"Supported operating systems for production environments","text":"

              For now, we can only install NebulaGraph in the Linux system. To install NebulaGraph in a production environment, we recommend that you use any Linux system with kernel version 3.9 or above.

              Users can adjust some of the kernel parameters to better accommodate the need for running NebulaGraph. For more information, see kernel configuration.

              "},{"location":"4.deployment-and-installation/1.resource-preparations/#suggested_service_architecture_for_production_environments","title":"Suggested service architecture for production environments","text":"

              Danger

              DO NOT deploy a single cluster across IDCs (The Enterprise Edtion supports data synchronization between clusters across IDCs).

              Process Suggested number metad (the metadata service process) 3 storaged (the storage service process) 3 or more graphd (the query engine service process) 3 or more

              Each metad process automatically creates and maintains a replica of the metadata. Usually, you need to deploy three metad processes and only three.

              The number of storaged processes does not affect the number of graph space replicas.

              Users can deploy multiple processes on a single machine. For example, on a cluster of 5 machines (named as A, B, C, D, and E), you can deploy NebulaGraph as follows:

              Machine name Number of metad Number of storaged Number of graphd A 1 1 1 B 1 1 1 C 1 1 1 D None 1 1 E None 1 1"},{"location":"4.deployment-and-installation/1.resource-preparations/#capacity_requirements_for_running_a_nebulagraph_cluster","title":"Capacity requirements for running a NebulaGraph cluster","text":"

              Users can estimate the memory, disk space, and partition number needed for a NebulaGraph cluster of 3 replicas as follows.

              Resource Unit How to estimate Description Disk space for a cluster Bytes the_sum_of_edge_number_and_vertex_number * average_bytes_of_properties * 7.5 * 120% For more information, see Edge partitioning and storage amplification. Memory for a cluster Bytes [the_sum_of_edge_number_and_vertex_number * 16 + the_number_of_RocksDB_instances * (write_buffer_size * max_write_buffer_number) + rocksdb_block_cache] * 120% write_buffer_size and max_write_buffer_number are RocksDB parameters. For more information, see MemTable. For details about rocksdb_block_cache, see Memory usage in RocksDB. Number of partitions for a graph space - the_number_of_disks_in_the_cluster * disk_partition_num_multiplier disk_partition_num_multiplier is an integer between 2 and 20 (both including). Its value depends on the disk performance. Use 20 for SSD and 2 for HDD.
              • Question 1: Why do I need to multiply by 7.5 in the disk space estimation formula?

                Answer: On one hand, the data in one single replica takes up about 2.5 times more space than that of the original data file (csv) according to test values. On the other hand, indexes take up additional space. Each indexed vertex or edge takes up 16 bytes of memory. The hard disk space occupied by the index can be empirically estimated as the total number of indexed vertices or edges * 50 bytes.

              • Question 2: Why do we multiply the disk space and memory by 120%?

                Answer: The extra 20% is for buffer.

              • Question 3: How to get the number of RocksDB instances?

                Answer: Each graph space corresponds to one RocksDB instance and each directory in the --data_path item in the etc/nebula-storaged.conf file corresponds to one RocksDB instance. That is, the number of RocksDB instances = the number of directories * the number of graph spaces.

                Note

                Users can decrease the memory size occupied by the bloom filter by adding --enable_partitioned_index_filter=true in etc/nebula-storaged.conf. But it may decrease the read performance in some random-seek cases.

              Caution

              Each RocksDB instance takes up about 70M of disk space even when no data has been written yet. One partition corresponds to one RocksDB instance, and when the partition setting is very large, for example, 100, the graph space takes up a lot of disk space after it is created.

              "},{"location":"4.deployment-and-installation/4.uninstall-nebula-graph/","title":"Uninstall NebulaGraph","text":"

              This topic describes how to uninstall NebulaGraph.

              Caution

              Before re-installing NebulaGraph on a machine, follow this topic to completely uninstall the old NebulaGraph, in case the remaining data interferes with the new services, including inconsistencies between Meta services.

              "},{"location":"4.deployment-and-installation/4.uninstall-nebula-graph/#prerequisite","title":"Prerequisite","text":"

              The NebulaGraph services should be stopped before the uninstallation. For more information, see Manage NebulaGraph services.

              "},{"location":"4.deployment-and-installation/4.uninstall-nebula-graph/#step_1_delete_data_files_of_the_storage_and_meta_services","title":"Step 1: Delete data files of the Storage and Meta Services","text":"

              If you have modified the data_path in the configuration files for the Meta Service and Storage Service, the directories where NebulaGraph stores data may not be in the installation path of NebulaGraph. Check the configuration files to confirm the data paths, and then manually delete the directories to clear all data.

              Note

              For a NebulaGraph cluster, delete the data files of all Storage and Meta servers.

              1. Check the Storage Service disk settings. For example:

                ########## Disk ##########\n# Root data path. Split by comma. e.g. --data_path=/disk1/path1/,/disk2/path2/\n# One path per Rocksdb instance.\n--data_path=/nebula/data/storage\n
              2. Check the Metad Service configurations and find the corresponding metadata directories.

              3. Delete the data and the directories found in step 2.

              "},{"location":"4.deployment-and-installation/4.uninstall-nebula-graph/#step_2_delete_the_installation_directories","title":"Step 2: Delete the installation directories","text":"

              Note

              Delete all installation directories, including the cluster.id file in them.

              The default installation path is /usr/local/nebula, which is specified by --prefix while installing NebulaGraph.

              "},{"location":"4.deployment-and-installation/4.uninstall-nebula-graph/#uninstall_nebulagraph_deployed_with_source_code","title":"Uninstall NebulaGraph deployed with source code","text":"

              Find the installation directories of NebulaGraph, and delete them all.

              "},{"location":"4.deployment-and-installation/4.uninstall-nebula-graph/#uninstall_nebulagraph_deployed_with_rpm_packages","title":"Uninstall NebulaGraph deployed with RPM packages","text":"
              1. Run the following command to get the NebulaGraph version.

                $ rpm -qa | grep \"nebula\"\n

                The return message is as follows.

                nebula-graph-master-1.x86_64\n
              2. Run the following command to uninstall NebulaGraph.

                sudo rpm -e <nebula_version>\n

                For example:

                sudo rpm -e nebula-graph-master-1.x86_64\n
              3. Delete the installation directories.

              "},{"location":"4.deployment-and-installation/4.uninstall-nebula-graph/#uninstall_nebulagraph_deployed_with_deb_packages","title":"Uninstall NebulaGraph deployed with DEB packages","text":"
              1. Run the following command to get the NebulaGraph version.

                $ dpkg -l | grep \"nebula\"\n

                The return message is as follows.

                ii  nebula-graph  master  amd64     NebulaGraph Package built using CMake\n
              2. Run the following command to uninstall NebulaGraph.

                sudo dpkg -r <nebula_version>\n

                For example:

                sudo dpkg -r nebula-graph\n
              3. Delete the installation directories.

              "},{"location":"4.deployment-and-installation/4.uninstall-nebula-graph/#uninstall_nebulagraph_deployed_with_docker_compose","title":"Uninstall NebulaGraph deployed with Docker Compose","text":"
              1. In the nebula-docker-compose directory, run the following command to stop the NebulaGraph services.

                docker-compose down -v\n
              2. Delete the nebula-docker-compose directory.

              "},{"location":"4.deployment-and-installation/connect-to-nebula-graph/","title":"Connect to NebulaGraph","text":"

              This topic provides basic instruction on how to use the native CLI client NebulaGraph Console to connect to NebulaGraph.

              Caution

              When connecting to NebulaGraph for the first time, you must register the Storage Service before querying data.

              NebulaGraph supports multiple types of clients, including a CLI client, a GUI client, and clients developed in popular programming languages. For more information, see the client list.

              "},{"location":"4.deployment-and-installation/connect-to-nebula-graph/#prerequisites","title":"Prerequisites","text":"
              • You have started NebulaGraph services.
              • The machine on which you plan to run NebulaGraph Console has network access to the Graph Service of NebulaGraph.
              • The NebulaGraph Console version is compatible with the NebulaGraph version.

                Note

                NebulaGraph Console and NebulaGraph of the same version number are the most compatible. There may be compatibility issues when connecting to NebulaGraph with a different version of NebulaGraph Console. The error message incompatible version between client and server is displayed when there is such an issue.

              "},{"location":"4.deployment-and-installation/connect-to-nebula-graph/#steps","title":"Steps","text":"
              1. On the NebulaGraph Console releases page, select a NebulaGraph Console version and click Assets.

                Note

                It is recommended to select the latest version.

              2. In the Assets area, find the correct binary file for the machine where you want to run NebulaGraph Console and download the file to the machine.

              3. (Optional) Rename the binary file to nebula-console for convenience.

                Note

                For Windows, rename the file to nebula-console.exe.

              4. On the machine to run NebulaGraph Console, grant the execute permission of the nebula-console binary file to the user.

                Note

                For Windows, skip this step.

                $ chmod 111 nebula-console\n
              5. In the command line interface, change the working directory to the one where the nebula-console binary file is stored.

              6. Run the following command to connect to NebulaGraph.

                • For Linux or macOS:
                $ ./nebula-console -addr <ip> -port <port> -u <username> -p <password>\n[-t 120] [-e \"nGQL_statement\" | -f filename.nGQL]\n
                • For Windows:
                > nebula-console.exe -addr <ip> -port <port> -u <username> -p <password>\n[-t 120] [-e \"nGQL_statement\" | -f filename.nGQL]\n

                Parameter descriptions are as follows:

                Parameter Description -h/-help Shows the help menu. -addr/-address Sets the IP (or hostname) of the Graph service. The default address is 127.0.0.1. -P/-port Sets the port number of the graphd service. The default port number is 9669. -u/-user Sets the username of your NebulaGraph account. Before enabling authentication, you can use any existing username. The default username is root. -p/-password Sets the password of your NebulaGraph account. Before enabling authentication, you can use any characters as the password. -t/-timeout Sets an integer-type timeout threshold of the connection. The unit is millisecond. The default value is 120. -e/-eval Sets a string-type nGQL statement. The nGQL statement is executed once the connection succeeds. The connection stops after the result is returned. -f/-file Sets the path of an nGQL file. The nGQL statements in the file are executed once the connection succeeds. The result will be returned and the connection stops then. -enable_ssl Enables SSL encryption when connecting to NebulaGraph. -ssl_root_ca_path Sets the storage path of the certification authority file. -ssl_cert_path Sets the storage path of the certificate file. -ssl_private_key_path Sets the storage path of the private key file.

                For information on more parameters, see the project repository.

              "},{"location":"4.deployment-and-installation/manage-service/","title":"Manage NebulaGraph Service","text":"

              NebulaGraph supports managing services with scripts.

              "},{"location":"4.deployment-and-installation/manage-service/#manage_services_with_script","title":"Manage services with script","text":"

              You can use the nebula.service script to start, stop, restart, terminate, and check the NebulaGraph services.

              Note

              nebula.service is stored in the /usr/local/nebula/scripts directory by default. If you have customized the path, use the actual path in your environment.

              "},{"location":"4.deployment-and-installation/manage-service/#syntax","title":"Syntax","text":"
              $ sudo /usr/local/nebula/scripts/nebula.service\n[-v] [-c <config_file_path>]\n<start | stop | restart | kill | status>\n<metad | graphd | storaged | all>\n
              Parameter Description -v Display detailed debugging information. -c Specify the configuration file path. The default path is /usr/local/nebula/etc/. start Start the target services. stop Stop the target services. restart Restart the target services. kill Terminate the target services. status Check the status of the target services. metad Set the Meta Service as the target service. graphd Set the Graph Service as the target service. storaged Set the Storage Service as the target service. all Set all the NebulaGraph services as the target services."},{"location":"4.deployment-and-installation/manage-service/#start_nebulagraph","title":"Start NebulaGraph","text":"

              Run the following command to start NebulaGraph.

              $ sudo /usr/local/nebula/scripts/nebula.service start all\n[INFO] Starting nebula-metad...\n[INFO] Done\n[INFO] Starting nebula-graphd...\n[INFO] Done\n[INFO] Starting nebula-storaged...\n[INFO] Done\n
              "},{"location":"4.deployment-and-installation/manage-service/#stop_nebulagraph","title":"Stop NebulaGraph","text":"

              Danger

              Do not run kill -9 to forcibly terminate the processes. Otherwise, there is a low probability of data loss.

              Run the following command to stop NebulaGraph.

              $ sudo /usr/local/nebula/scripts/nebula.service stop all\n[INFO] Stopping nebula-metad...\n[INFO] Done\n[INFO] Stopping nebula-graphd...\n[INFO] Done\n[INFO] Stopping nebula-storaged...\n[INFO] Done\n
              "},{"location":"4.deployment-and-installation/manage-service/#check_the_service_status","title":"Check the service status","text":"

              Run the following command to check the service status of NebulaGraph.

              $ sudo /usr/local/nebula/scripts/nebula.service status all\n
              • NebulaGraph is running normally if the following information is returned.

                INFO] nebula-metad(33fd35e): Running as 29020, Listening on 9559\n[INFO] nebula-graphd(33fd35e): Running as 29095, Listening on 9669\n[WARN] nebula-storaged after v3.0.0 will not start service until it is added to cluster.\n[WARN] See Manage Storage hosts:ADD HOSTS in https://docs.nebula-graph.io/\n[INFO] nebula-storaged(33fd35e): Running as 29147, Listening on 9779\n

                Note

                After starting NebulaGraph, the port of the nebula-storaged process is shown in red. Because the nebula-storaged process waits for the nebula-metad to add the current Storage service during the startup process. The Storage works after it receives the ready signal. Starting from NebulaGraph 3.0.0, the Meta service cannot directly read or write data in the Storage service that you add in the configuration file. The configuration file only registers the Storage service to the Meta service. You must run the ADD HOSTS command to enable the Meta to read and write data in the Storage service. For more information, see Manage Storage hosts.

              • If the returned result is similar to the following one, there is a problem. You may also go to the NebulaGraph community for help.
                [INFO] nebula-metad: Running as 25600, Listening on 9559\n[INFO] nebula-graphd: Exited\n[INFO] nebula-storaged: Running as 25646, Listening on 9779\n

              The NebulaGraph services consist of the Meta Service, Graph Service, and Storage Service. The configuration files for all three services are stored in the /usr/local/nebula/etc/ directory by default. You can check the configuration files according to the returned result to troubleshoot problems.

              "},{"location":"4.deployment-and-installation/manage-service/#next_to_do","title":"Next to do","text":"

              Connect to NebulaGraph

              "},{"location":"4.deployment-and-installation/manage-storage-host/","title":"Manage Storage hosts","text":"

              Starting from NebulaGraph 3.0.0, setting Storage hosts in the configuration files only registers the hosts on the Meta side, but does not add them into the cluster. You must run the ADD HOSTS statement to add the Storage hosts.

              Note

              NebulaGraph Cloud clusters add Storage hosts automatically. Cloud users do not need to manually run ADD HOSTS.

              "},{"location":"4.deployment-and-installation/manage-storage-host/#prerequisites","title":"Prerequisites","text":"
              • You have connected to the NebulaGraph database.
              "},{"location":"4.deployment-and-installation/manage-storage-host/#add_storage_hosts","title":"Add Storage hosts","text":"

              Add the Storage hosts to a NebulaGraph cluster.

              nebula> ADD HOSTS <ip>:<port> [,<ip>:<port> ...];\nnebula> ADD HOSTS \"<hostname>\":<port> [,\"<hostname>\":<port> ...];\n

              Note

              • To make sure the follow-up operations work as expected, wait for two heartbeat cycles, i.e., 20 seconds, and then run SHOW HOSTS to check whether the host is online.
              • Make sure that the IP address and port number are the same as those in the configuration file. For example, the default IP address and port number in standalone deployment are 127.0.0.1:9779.
              • When using a domain name, enclose it in quotation marks, for example, ADD HOSTS \"foo-bar\":9779.
              • Ensure that the storage host to be added is not used by any other cluster, otherwise, the storage adding operation will fail.
              "},{"location":"4.deployment-and-installation/manage-storage-host/#drop_storage_hosts","title":"Drop Storage hosts","text":"

              Delete the Storage hosts from cluster.

              Note

              You can not delete an in-use Storage host directly. Delete the associated graph space before deleting the Storage host.

              nebula> DROP HOSTS <ip>:<port> [,<ip>:<port> ...];\nnebula> DROP HOSTS \"<hostname>\":<port> [,\"<hostname>\":<port> ...];\n
              "},{"location":"4.deployment-and-installation/manage-storage-host/#view_storage_hosts","title":"View Storage hosts","text":"

              View the Storage hosts in the cluster.

              nebula> SHOW HOSTS STORAGE;\n+-------------+------+----------+-----------+--------------+---------+\n| Host        | Port | Status   | Role      | Git Info Sha | Version |\n+-------------+------+----------+-----------+--------------+---------+\n| \"storaged0\" | 9779 | \"ONLINE\" | \"STORAGE\" | \"3ba41bd\"    | \"master\" |\n| \"storaged1\" | 9779 | \"ONLINE\" | \"STORAGE\" | \"3ba41bd\"    | \"master\" |\n| \"storaged2\" | 9779 | \"ONLINE\" | \"STORAGE\" | \"3ba41bd\"    | \"master\" |\n+-------------+------+----------+-----------+--------------+---------+\n
              "},{"location":"4.deployment-and-installation/standalone-deployment/","title":"Standalone NebulaGraph","text":"

              Standalone NebulaGraph merges the Meta, Storage, and Graph services into a single process deployed on a single machine. This topic introduces scenarios, deployment steps, etc. of standalone NebulaGraph.

              Danger

              Do not use standalone NebulaGraph in production environments.

              "},{"location":"4.deployment-and-installation/standalone-deployment/#background","title":"Background","text":"

              The traditional NebulaGraph consists of three services, each service having executable binary files and the corresponding process. Processes communicate with each other by RPC. In standalone NebulaGraph, the three processes corresponding to the three services are combined into one process. For more information about NebulaGraph, see Architecture overview.

              "},{"location":"4.deployment-and-installation/standalone-deployment/#scenarios","title":"Scenarios","text":"

              Small data sizes and low availability requirements. For example, test environments that are limited by the number of machines, scenarios that are only used to verify functionality.

              "},{"location":"4.deployment-and-installation/standalone-deployment/#limitations","title":"Limitations","text":"
              • Single service instance per machine.
              • High availability and reliability not supported.
              "},{"location":"4.deployment-and-installation/standalone-deployment/#resource_requirements","title":"Resource requirements","text":"

              For information about the resource requirements for standalone NebulaGraph, see Software requirements for compiling NebulaGraph.

              "},{"location":"4.deployment-and-installation/standalone-deployment/#steps","title":"Steps","text":"

              Currently, you can only install standalone NebulaGraph with the source code. The steps are similar to those of the multi-process NebulaGraph. You only need to modify the step Generate Makefile with CMake by adding -DENABLE_STANDALONE_VERSION=on to the command. For example:

              cmake -DCMAKE_INSTALL_PREFIX=/usr/local/nebula -DENABLE_TESTING=OFF -DENABLE_STANDALONE_VERSION=on -DCMAKE_BUILD_TYPE=Release .. \n

              For more information about installation details, see Install NebulaGraph by compiling the source code.

              After installing standalone NebulaGraph, see the topic connect to Service to connect to NebulaGraph databases.

              "},{"location":"4.deployment-and-installation/standalone-deployment/#configuration_file","title":"Configuration file","text":"

              The path to the configuration file for standalone NebulaGraph is /usr/local/nebula/etc by default.

              You can run sudo cat nebula-standalone.conf.default to see the file content. The parameters and the corresponding descriptions in the file are generally the same as the configurations for multi-process NebulaGraph except for the following parameters.

              Parameter Predefined value Description meta_port 9559 The port number of the Meta service. storage_port 9779 The port number of the Storage Service. meta_data_path data/meta The path to Meta data.

              You can run commands to check configurable parameters and the corresponding descriptions. For details, see Configurations.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/","title":"Install NebulaGraph by compiling the source code","text":"

              Installing NebulaGraph from the source code allows you to customize the compiling and installation settings and test the latest features.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#prerequisites","title":"Prerequisites","text":"
              • Users have to prepare correct resources described in Prepare resources for compiling, installing, and running NebulaGraph.

                Note

                Compilation of NebulaGraph offline is not currently supported.

              • The host to be installed with NebulaGraph has access to the Internet.
              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#installation_steps","title":"Installation steps","text":"
              1. Use Git to clone the source code of NebulaGraph to the host.

                • [Recommended] To install NebulaGraph master, run the following command.

                  $ git clone --branch release-3.6 https://github.com/vesoft-inc/nebula.git\n
                • To install the latest developing release, run the following command to clone the source code from the master branch.

                  $ git clone https://github.com/vesoft-inc/nebula.git\n
              2. Go to the nebula/third-party directory, and run the install-third-party.sh script to install the third-party libraries.

                $ cd nebula/third-party\n$ ./install-third-party.sh\n
              3. Go back to the nebula directory, create a directory named build, and enter the directory.

                $ cd ..\n$ mkdir build && cd build\n
              4. Generate Makefile with CMake.

                Note

                The installation path is /usr/local/nebula by default. To customize it, add the -DCMAKE_INSTALL_PREFIX=<installation_path> CMake variable in the following command.

                For more information about CMake variables, see CMake variables.

                $ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/nebula -DENABLE_TESTING=OFF -DCMAKE_BUILD_TYPE=Release ..\n
              5. Compile NebulaGraph.

                Note

                Check Prepare resources for compiling, installing, and running NebulaGraph.

                To speed up the compiling, use the -j option to set a concurrent number N. It should be \\(\\min(\\text{CPU core number},\\frac{\\text{the memory size(GB)}}{2})\\).

                $ make -j{N} # E.g., make -j2\n
              6. Install NebulaGraph.

                $ sudo make install\n

              Note

              The configuration files in the etc/ directory (/usr/local/nebula/etc by default) are references. Users can create their own configuration files accordingly. If you want to use the scripts in the script directory to start, stop, restart, and kill the service, and check the service status, the configuration files have to be named as nebula-graph.conf, nebula-metad.conf, and nebula-storaged.conf.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#update_the_master_branch","title":"Update the master branch","text":"

              The source code of the master branch changes frequently. If the corresponding NebulaGraph release is installed, update it in the following steps.

              1. In the nebula directory, run git pull upstream master to update the source code.

              2. In the nebula/build directory, run make -j{N} and make install again.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#next_to_do","title":"Next to do","text":"

              Manage NebulaGraph services

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#cmake_variables","title":"CMake variables","text":""},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#usage_of_cmake_variables","title":"Usage of CMake variables","text":"
              $ cmake -D<variable>=<value> ...\n

              The following CMake variables can be used at the configure (cmake) stage to adjust the compiling settings.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#cmake_install_prefix","title":"CMAKE_INSTALL_PREFIX","text":"

              CMAKE_INSTALL_PREFIX specifies the path where the service modules, scripts, configuration files are installed. The default path is /usr/local/nebula.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#enable_werror","title":"ENABLE_WERROR","text":"

              ENABLE_WERROR is ON by default and it makes all warnings into errors. You can set it to OFF if needed.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#enable_testing","title":"ENABLE_TESTING","text":"

              ENABLE_TESTING is ON by default and unit tests are built with the NebulaGraph services. If you just need the service modules, set it to OFF.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#enable_asan","title":"ENABLE_ASAN","text":"

              ENABLE_ASAN is OFF by default and the building of ASan (AddressSanitizer), a memory error detector, is disabled. To enable it, set ENABLE_ASAN to ON. This variable is intended for NebulaGraph developers.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#cmake_build_type","title":"CMAKE_BUILD_TYPE","text":"

              NebulaGraph supports the following building types of MAKE_BUILD_TYPE:

              • Debug

                The default value of CMAKE_BUILD_TYPE. It indicates building NebulaGraph with the debug info but not the optimization options.

              • Release

                It indicates building NebulaGraph with the optimization options but not the debug info.

              • RelWithDebInfo

                It indicates building NebulaGraph with the optimization options and the debug info.

              • MinSizeRel

                It indicates building NebulaGraph with the optimization options for controlling the code size but not the debug info.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#enable_include_what_you_use","title":"ENABLE_INCLUDE_WHAT_YOU_USE","text":"

              ENABLE_INCLUDE_WHAT_YOU_USE is OFF by default. When set to ON and include-what-you-use is installed on the system, the system reports redundant headers contained in the project source code during makefile generation.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#nebula_use_linker","title":"NEBULA_USE_LINKER","text":"

              Specifies the program linker on the system. The available values are:

              • bfd, the default value, indicates that ld.bfd is applied as the linker.
              • lld, indicates that ld.lld, if installed on the system, is applied as the linker.
              • gold, indicates that ld.gold, if installed on the system, is applied as the linker.
              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#cmake_c_compilercmake_cxx_compiler","title":"CMAKE_C_COMPILER/CMAKE_CXX_COMPILER","text":"

              Usually, CMake locates and uses a C/C++ compiler installed in the host automatically. But if your compiler is not installed at the standard path, or if you want to use a different one, run the command as follows to specify the installation path of the target compiler:

              $ cmake -DCMAKE_C_COMPILER=<path_to_gcc/bin/gcc> -DCMAKE_CXX_COMPILER=<path_to_gcc/bin/g++> ..\n$ cmake -DCMAKE_C_COMPILER=<path_to_clang/bin/clang> -DCMAKE_CXX_COMPILER=<path_to_clang/bin/clang++> ..\n
              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#enable_ccache","title":"ENABLE_CCACHE","text":"

              ENABLE_CCACHE is ON by default and Ccache (compiler cache) is used to speed up the compiling of NebulaGraph.

              To disable ccache, setting ENABLE_CCACHE to OFF is not enough. On some platforms, the ccache installation hooks up or precedes the compiler. In such a case, you have to set an environment variable export CCACHE_DISABLE=true or add a line disable=true in ~/.ccache/ccache.conf as well. For more information, see the ccache official documentation.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#nebula_thirdparty_root","title":"NEBULA_THIRDPARTY_ROOT","text":"

              NEBULA_THIRDPARTY_ROOT specifies the path where the third party software is installed. By default it is /opt/vesoft/third-party.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/1.install-nebula-graph-by-compiling-the-source-code/#examine_problems","title":"Examine problems","text":"

              If the compiling fails, we suggest you:

              1. Check whether the operating system release meets the requirements and whether the memory and hard disk space are sufficient.

              2. Check whether the third-party is installed correctly.

              3. Use make -j1 to reduce the compiling concurrency.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/2.install-nebula-graph-by-rpm-or-deb/","title":"Install NebulaGraph with RPM or DEB package","text":"

              RPM and DEB are common package formats on Linux systems. This topic shows how to quickly install NebulaGraph with the RPM or DEB package.

              Note

              The console is not complied or packaged with NebulaGraph server binaries. You can install nebula-console by yourself.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/2.install-nebula-graph-by-rpm-or-deb/#prerequisites","title":"Prerequisites","text":"
              • The tool wget is installed.
              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/2.install-nebula-graph-by-rpm-or-deb/#step_1_download_the_package_from_cloud_service","title":"Step 1: Download the package from cloud service","text":"

              Note

              NebulaGraph is currently only supported for installation on Linux systems, and only CentOS 7.x, CentOS 8.x, Ubuntu 16.04, Ubuntu 18.04, and Ubuntu 20.04 operating systems are supported.

              • Download the released version.

                URL:

                //Centos 7\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.el7.x86_64.rpm\n\n//Centos 8\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.el8.x86_64.rpm\n\n//Ubuntu 1604\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.ubuntu1604.amd64.deb\n\n//Ubuntu 1804\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.ubuntu1804.amd64.deb\n\n//Ubuntu 2004\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.ubuntu2004.amd64.deb\n

                For example, download the release package master for Centos 7.5:

                wget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.el7.x86_64.rpm\nwget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.el7.x86_64.rpm.sha256sum.txt\n

                Download the release package master for Ubuntu 1804:

                wget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.ubuntu1804.amd64.deb\nwget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.ubuntu1804.amd64.deb.sha256sum.txt\n
              • Download the nightly version.

                Danger

                • Nightly versions are usually used to test new features. Do not use it in a production environment.
                • Nightly versions may not be built successfully every night. And the names may change from day to day.

                URL:

                //Centos 7\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.el7.x86_64.rpm\n\n//Centos 8\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.el8.x86_64.rpm\n\n//Ubuntu 1604\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.ubuntu1604.amd64.deb\n\n//Ubuntu 1804\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.ubuntu1804.amd64.deb\n\n//Ubuntu 2004\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.ubuntu2004.amd64.deb\n

                For example, download the Centos 7.5 package developed and built in 2021.11.28:

                wget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.el7.x86_64.rpm\nwget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.el7.x86_64.rpm.sha256sum.txt\n

                For example, download the Ubuntu 1804 package developed and built in 2021.11.28:

                wget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.ubuntu1804.amd64.deb\nwget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.ubuntu1804.amd64.deb.sha256sum.txt\n
              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/2.install-nebula-graph-by-rpm-or-deb/#step_2_install_nebulagraph","title":"Step 2: Install NebulaGraph","text":"
              • Use the following syntax to install with an RPM package.

                $ sudo rpm -ivh --prefix=<installation_path> <package_name>\n

                The option --prefix indicates the installation path. The default path is /usr/local/nebula/.

                For example, to install an RPM package in the default path for the master version, run the following command.

                sudo rpm -ivh nebula-graph-master.el7.x86_64.rpm\n
              • Use the following syntax to install with a DEB package.

                $ sudo dpkg -i <package_name>\n

                Note

                Customizing the installation path is not supported when installing NebulaGraph with a DEB package. The default installation path is /usr/local/nebula/.

                For example, to install a DEB package for the master version, run the following command.

                sudo dpkg -i nebula-graph-master.ubuntu1804.amd64.deb\n

                Note

                The default installation path is /usr/local/nebula/.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/2.install-nebula-graph-by-rpm-or-deb/#next_to_do","title":"Next to do","text":"
              • Start NebulaGraph
              • Connect to NebulaGraph
              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/","title":"Deploy NebulaGraph with Docker Compose","text":"

              Using Docker Compose can quickly deploy NebulaGraph services based on the prepared configuration file. It is only recommended to use this method when testing functions of NebulaGraph.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#prerequisites","title":"Prerequisites","text":"
              • You have installed the following applications on your host.

                Application Recommended version Official installation reference Docker Latest Install Docker Engine Docker Compose Latest Install Docker Compose Git Latest Download Git
              • If you are deploying NebulaGraph as a non-root user, grant the user with Docker-related privileges. For detailed instructions, see Manage Docker as a non-root user.
              • You have started the Docker service on your host.
              • If you have already deployed another version of NebulaGraph with Docker Compose on your host, to avoid compatibility issues, you need to delete the nebula-docker-compose/data directory.
              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#deploy_nebulagraph","title":"Deploy NebulaGraph","text":"
              1. Clone the 3.6.0 branch of the nebula-docker-compose repository to your host with Git.

                Danger

                The master branch contains the untested code for the latest NebulaGraph development release. DO NOT use this release in a production environment.

                $ git clone -b release-3.6 https://github.com/vesoft-inc/nebula-docker-compose.git\n

                Note

                The x.y version of Docker Compose aligns to the x.y version of NebulaGraph. For the NebulaGraph z version, Docker Compose does not publish the corresponding z version, but pulls the z version of the NebulaGraph image.

              2. Go to the nebula-docker-compose directory.

                $ cd nebula-docker-compose/\n
              3. Run the following command to start all the NebulaGraph services.

                Note

                • Update the NebulaGraph images and NebulaGraph Console images first if they are out of date.
                • The return result after executing the command varies depending on the installation directory.
                [nebula-docker-compose]$ docker-compose up -d\nCreating nebula-docker-compose_metad0_1 ... done\nCreating nebula-docker-compose_metad2_1 ... done\nCreating nebula-docker-compose_metad1_1 ... done\nCreating nebula-docker-compose_graphd2_1   ... done\nCreating nebula-docker-compose_graphd_1    ... done\nCreating nebula-docker-compose_graphd1_1   ... done\nCreating nebula-docker-compose_storaged0_1 ... done\nCreating nebula-docker-compose_storaged2_1 ... done\nCreating nebula-docker-compose_storaged1_1 ... done\n

                Compatibility

                Starting from NebulaGraph version 3.1.0, nebula-docker-compose automatically starts a NebulaGraph Console docker container and adds the storage host to the cluster (i.e. ADD HOSTS command).

                Note

                For more information of the preceding services, see NebulaGraph architecture.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#connect_to_nebulagraph","title":"Connect to NebulaGraph","text":"

              There are two ways to connect to NebulaGraph:

              • Connected with Nebula Console outside the container. Because the external mapping port for the Graph service is also fixed as 9669 in the container's configuration file, you can connect directly through the default port. For details, see Connect to NebulaGraph.
              • Log into the container installed NebulaGraph Console, then connect to the Graph service. This section describes this approach.
              1. Run the following command to view the name of NebulaGraph Console docker container.

                $ docker-compose ps\n            Name                             Command                  State                                        Ports                                 \n-----------------------------------------------------------------------------------------------------------------------------------------------------------\nnebula-docker-compose_console_1     sh -c for i in `seq 1 60`; ...   Up                                                                                    \nnebula-docker-compose_graphd1_1     /usr/local/nebula/bin/nebu ...   Up (healthy)   0.0.0.0:32847->15669/tcp,:::32847->15669/tcp, 19669/tcp,               \n                                                                                    0.0.0.0:32846->19670/tcp,:::32846->19670/tcp,                          \n                                                                                    0.0.0.0:32849->5669/tcp,:::32849->5669/tcp, 9669/tcp         \n......\n

                Note

                nebula-docker-compose_console_1 and nebula-docker-compose_graphd1_1 are the container names of NebulaGraph Console and Graph Service respectively.

              2. Run the following command to enter the NebulaGraph Console docker container.

                docker exec -it nebula-docker-compose_console_1 /bin/sh\n/ #\n
              3. Connect to NebulaGraph with NebulaGraph Console.

                / # ./usr/local/bin/nebula-console -u <user_name> -p <password> --address=graphd --port=9669\n

                Note

                By default, the authentication is off, you can only log in with an existing username (the default is root) and any password. To turn it on, see Enable authentication.

              4. Run the following commands to view the cluster state.

                nebula> SHOW HOSTS;\n+-------------+------+----------+--------------+----------------------+------------------------+---------+\n| Host        | Port | Status   | Leader count | Leader distribution  | Partition distribution | Version |\n+-------------+------+----------+--------------+----------------------+------------------------+---------+\n| \"storaged0\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No valid partition\"   | \"master\" |\n| \"storaged1\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No valid partition\"   | \"master\" |\n| \"storaged2\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No valid partition\"   | \"master\" |\n+-------------+------+----------+--------------+----------------------+------------------------+---------+\n

              Run exit twice to switch back to your terminal (shell).

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#check_the_nebulagraph_service_status_and_ports","title":"Check the NebulaGraph service status and ports","text":"

              Run docker-compose ps to list all the services of NebulaGraph and their status and ports.

              Note

              NebulaGraph provides services to the clients through port 9669 by default. To use other ports, modify the docker-compose.yaml file in the nebula-docker-compose directory and restart the NebulaGraph services.

              $ docker-compose ps\nnebula-docker-compose_console_1     sh -c sleep 3 &&                 Up\n                                  nebula-co ...\nnebula-docker-compose_graphd1_1     /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49174->19669/tcp,:::49174->19669/tcp, 0.0.0.0:49171->19670/tcp,:::49171->19670/tcp, 0.0.0.0:49177->9669/tcp,:::49177->9669/tcp\nnebula-docker-compose_graphd2_1     /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49175->19669/tcp,:::49175->19669/tcp, 0.0.0.0:49172->19670/tcp,:::49172->19670/tcp, 0.0.0.0:49178->9669/tcp,:::49178->9669/tcp\nnebula-docker-compose_graphd_1      /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49180->19669/tcp,:::49180->19669/tcp, 0.0.0.0:49179->19670/tcp,:::49179->19670/tcp, 0.0.0.0:9669->9669/tcp,:::9669->9669/tcp\nnebula-docker-compose_metad0_1      /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49157->19559/tcp,:::49157->19559/tcp, 0.0.0.0:49154->19560/tcp,:::49154->19560/tcp, 0.0.0.0:49160->9559/tcp,:::49160->9559/tcp, 9560/tcp\nnebula-docker-compose_metad1_1      /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49156->19559/tcp,:::49156->19559/tcp, 0.0.0.0:49153->19560/tcp,:::49153->19560/tcp, 0.0.0.0:49159->9559/tcp,:::49159->9559/tcp, 9560/tcp\nnebula-docker-compose_metad2_1      /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49158->19559/tcp,:::49158->19559/tcp, 0.0.0.0:49155->19560/tcp,:::49155->19560/tcp, 0.0.0.0:49161->9559/tcp,:::49161->9559/tcp, 9560/tcp\nnebula-docker-compose_storaged0_1   /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49166->19779/tcp,:::49166->19779/tcp, 0.0.0.0:49163->19780/tcp,:::49163->19780/tcp, 9777/tcp, 9778/tcp, 0.0.0.0:49169->9779/tcp,:::49169->9779/tcp, 9780/tcp\nnebula-docker-compose_storaged1_1   /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49165->19779/tcp,:::49165->19779/tcp, 0.0.0.0:49162->19780/tcp,:::49162->19780/tcp, 9777/tcp, 9778/tcp, 0.0.0.0:49168->9779/tcp,:::49168->9779/tcp, 9780/tcp\nnebula-docker-compose_storaged2_1   /usr/local/nebula/bin/nebu ...   Up      0.0.0.0:49167->19779/tcp,:::49167->19779/tcp, 0.0.0.0:49164->19780/tcp,:::49164->19780/tcp, 9777/tcp, 9778/tcp, 0.0.0.0:49170->9779/tcp,:::49170->9779/tcp, 9780/tcp\n

              If the service is abnormal, you can first confirm the abnormal container name (such as nebula-docker-compose_graphd2_1) and then log in to the container and troubleshoot.

              $ docker exec -it nebula-docker-compose_graphd2_1 bash\n
              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#check_the_service_data_and_logs","title":"Check the service data and logs","text":"

              All the data and logs of NebulaGraph are stored persistently in the nebula-docker-compose/data and nebula-docker-compose/logs directories.

              The structure of the directories is as follows:

              nebula-docker-compose/\n  |-- docker-compose.yaml\n  \u251c\u2500\u2500 data\n  \u2502\u00a0\u00a0 \u251c\u2500\u2500 meta0\n  \u2502\u00a0\u00a0 \u251c\u2500\u2500 meta1\n  \u2502\u00a0\u00a0 \u251c\u2500\u2500 meta2\n  \u2502\u00a0\u00a0 \u251c\u2500\u2500 storage0\n  \u2502\u00a0\u00a0 \u251c\u2500\u2500 storage1\n  \u2502\u00a0\u00a0 \u2514\u2500\u2500 storage2\n  \u2514\u2500\u2500 logs\n      \u251c\u2500\u2500 graph\n      \u251c\u2500\u2500 graph1\n      \u251c\u2500\u2500 graph2\n      \u251c\u2500\u2500 meta0\n      \u251c\u2500\u2500 meta1\n      \u251c\u2500\u2500 meta2\n      \u251c\u2500\u2500 storage0\n      \u251c\u2500\u2500 storage1\n      \u2514\u2500\u2500 storage2\n
              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#modify_configurations","title":"Modify configurations","text":"

              The configuration file of Docker Compose is nebula-docker-compose/docker-compose.yaml. To make the new configuration take effect, modify the configuration in this file and restart the service.

              The configurations in the docker-compose.yaml file overwrite the configurations in the configuration file (/usr/local/nebula/etc) of the containered NebulaGraph service. Therefore, you can modify the configurations in the docker-compose.yaml file to customize the configurations of the NebulaGraph service.

              For more instructions, see Configurations.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#restart_nebulagraph_services","title":"Restart NebulaGraph services","text":"

              To restart all the NebulaGraph services, run the following command:

              $ docker-compose restart\nRestarting nebula-docker-compose_console_1   ... done\nRestarting nebula-docker-compose_graphd_1    ... done\nRestarting nebula-docker-compose_graphd1_1   ... done\nRestarting nebula-docker-compose_graphd2_1   ... done\nRestarting nebula-docker-compose_storaged1_1 ... done\nRestarting nebula-docker-compose-storaged0_1 ... done\nRestarting nebula-docker-compose_storaged2_1 ... done\nRestarting nebula-docker-compose_metad1_1    ... done\nRestarting nebula-docker-compose_metad2_1    ... done\nRestarting nebula-docker-compose_metad0_1    ... done\n

              To restart multiple services, such as graphd and storaged0, run the following command:

              $ docker-compose restart graphd storaged0\nRestarting nebula-docker-compose_graphd_1    ... done\nRestarting nebula-docker-compose_storaged0_1 ... done\n
              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#stop_and_remove_nebulagraph_services","title":"Stop and remove NebulaGraph services","text":"

              You can stop and remove all the NebulaGraph services by running the following command:

              Danger

              This command stops and removes all the containers of the NebulaGraph services and the related network. If you define volumes in the docker-compose.yaml, the related data are retained.

              The command docker-compose down -v removes all the local data. Try this command if you are using the nightly release and having some compatibility issues.

              $ docker-compose down\n

              The following information indicates you have successfully stopped the NebulaGraph services:

              Stopping nebula-docker-compose_console_1   ... done\nStopping nebula-docker-compose_graphd1_1   ... done\nStopping nebula-docker-compose_graphd_1    ... done\nStopping nebula-docker-compose_graphd2_1   ... done\nStopping nebula-docker-compose_storaged1_1 ... done\nStopping nebula-docker-compose_storaged0_1 ... done\nStopping nebula-docker-compose_storaged2_1 ... done\nStopping nebula-docker-compose_metad2_1    ... done\nStopping nebula-docker-compose_metad0_1    ... done\nStopping nebula-docker-compose_metad1_1    ... done\nRemoving nebula-docker-compose_console_1   ... done\nRemoving nebula-docker-compose_graphd1_1   ... done\nRemoving nebula-docker-compose_graphd_1    ... done\nRemoving nebula-docker-compose_graphd2_1   ... done\nRemoving nebula-docker-compose_storaged1_1 ... done\nRemoving nebula-docker-compose_storaged0_1 ... done\nRemoving nebula-docker-compose_storaged2_1 ... done\nRemoving nebula-docker-compose_metad2_1    ... done\nRemoving nebula-docker-compose_metad0_1    ... done\nRemoving nebula-docker-compose_metad1_1    ... done\nRemoving network nebula-docker-compose_nebula-net\n
              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#faq","title":"FAQ","text":""},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#how_to_fix_the_docker_mapping_to_external_ports","title":"How to fix the docker mapping to external ports?","text":"

              To set the ports of corresponding services as fixed mapping, modify the docker-compose.yaml in the nebula-docker-compose directory. For example:

              graphd:\n    image: vesoft/nebula-graphd:release-3.6\n    ...\n    ports:\n      - 9669:9669\n      - 19669\n      - 19670\n

              9669:9669 indicates the internal port 9669 is uniformly mapped to external ports, while 19669 indicates the internal port 19669 is randomly mapped to external ports.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#how_to_upgrade_or_update_the_docker_images_of_nebulagraph_services","title":"How to upgrade or update the docker images of NebulaGraph services?","text":"
              1. In the nebula-docker-compose/docker-compose.yaml file, change all the image values to the required image version.

              2. In the nebula-docker-compose directory, run docker-compose pull to update the images of the Graph Service, Storage Service, Meta Service, and NebulaGraph Console.

              3. Run docker-compose up -d to start the NebulaGraph services again.

              4. After connecting to NebulaGraph with NebulaGraph Console, run SHOW HOSTS GRAPH, SHOW HOSTS STORAGE, or SHOW HOSTS META to check the version of the responding service respectively.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#error_toomanyrequests_when_docker-compose_pull","title":"ERROR: toomanyrequests when docker-compose pull","text":"

              You may meet the following error.

              ERROR: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit.

              You have met the rate limit of Docker Hub. Learn more on Understanding Docker Hub Rate Limiting.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#how_to_update_the_nebulagraph_console_client","title":"How to update the NebulaGraph Console client?","text":"

              The command docker-compose pull updates both the NebulaGraph services and the NebulaGraph Console.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#how_to_activate_storaged_containers_when_they_remain_in_offline_status","title":"How to activate storaged containers when they remain in offline status?","text":"

              The activation script for storaged containers in Docker Compose may fail to run in rare cases. You can connect to NebulaGraph with NebulaGraph Console or NebulaGraph Studio and then manually run the ADD HOSTS command to activate them by adding the storaged containers to the cluster. An example of the command is as follows:

              nebula> ADD HOSTS \"storaged0\":9779,\"storaged1\":9779,\"storaged2\":9779\n
              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/3.deploy-nebula-graph-with-docker-compose/#related_documents","title":"Related documents","text":"
              • Install and deploy NebulaGraph with the source code
              • Install NebulaGraph by RPM or DEB
              • Connect to NebulaGraph
              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/4.install-nebula-graph-from-tar/","title":"Install NebulaGraph graph with the tar.gz file","text":"

              You can install NebulaGraph by downloading the tar.gz file.

              Note

              • NebulaGraph provides installing with the tar.gz file starting from version 2.6.0.
              • NebulaGraph is currently only supported for installation on Linux systems, and only CentOS 7.x, CentOS 8.x, Ubuntu 16.04, Ubuntu 18.04, and Ubuntu 20.04 operating systems are supported.
              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/4.install-nebula-graph-from-tar/#installation_steps","title":"Installation steps","text":"
              1. Download the NebulaGraph tar.gz file using the following address.

                Before downloading, you need to replace <release_version> with the version you want to download.

                //Centos 7\nhttps://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.el7.x86_64.tar.gz\n//Checksum\nhttps://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.el7.x86_64.tar.gz.sha256sum.txt\n\n//Centos 8\nhttps://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.el8.x86_64.tar.gz\n//Checksum\nhttps://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.el8.x86_64.tar.gz.sha256sum.txt\n\n//Ubuntu 1604\nhttps://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.ubuntu1604.amd64.tar.gz\n//Checksum\nhttps://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.ubuntu1604.amd64.tar.gz.sha256sum.txt\n\n//Ubuntu 1804\nhttps://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.ubuntu1804.amd64.tar.gz\n//Checksum\nhttps://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.ubuntu1804.amd64.tar.gz.sha256sum.txt\n\n//Ubuntu 2004\nhttps://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.ubuntu2004.amd64.tar.gz\n//Checksum\nhttps://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.ubuntu2004.amd64.tar.gz.sha256sum.txt\n

                For example, to download the NebulaGraph release-3.6 tar.gz file for CentOS 7.5, run the following command:

                wget https://oss-cdn.nebula-graph.com.cn/package/master/nebula-graph-master.el7.x86_64.tar.gz\n
              2. Decompress the tar.gz file to the NebulaGraph installation directory.

                tar -xvzf <tar.gz_file_name> -C <install_path>\n
                • tar.gz_file_name specifies the name of the tar.gz file.
                • install_path specifies the installation path.

                For example:

                tar -xvzf nebula-graph-master.el7.x86_64.tar.gz -C /home/joe/nebula/install\n
              3. Modify the name of the configuration file.

                Enter the decompressed directory, rename the files nebula-graphd.conf.default, nebula-metad.conf.default, and nebula-storaged.conf.default in the subdirectory etc, and delete .default to apply the default configuration of NebulaGraph.

              Note

              To modify the configuration, see Configurations.

              So far, you have installed NebulaGraph successfully.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/4.install-nebula-graph-from-tar/#next_to_do","title":"Next to do","text":"

              Manage NebulaGraph services

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/6.deploy-nebula-graph-with-peripherals/","title":"Install NebulaGraph with ecosystem tools","text":"

              You can install the NebulaGraph Community Edition with the following ecosystem tools:

              • NebulaGraph Operator
              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/6.deploy-nebula-graph-with-peripherals/#installation_details","title":"Installation details","text":"
              • To install NebulaGraph with NebulaGraph Operator, see Install NebulaGraph clusters.
              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/7.compile-using-docker/","title":"Compile NebulaGraph using Docker","text":"

              NebulaGraph's source code is written in C++. Compiling NebulaGraph requires certain dependencies which might conflict with host system dependencies, potentially causing compilation failures. Docker offers a solution to this. NebulaGraph provides a Docker image containing the complete compilation environment, ensuring an efficient build process and avoiding host OS conflicts. This guide outlines the steps to compile NebulaGraph using Docker.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/7.compile-using-docker/#prerequisites","title":"Prerequisites","text":"

              Before you begin:

              1. Docker: Ensure Docker is installed on your system.

              2. Clone NebulaGraph's Source Code: Clone the repository locally using:

                git clone --branch release-3.6 https://github.com/vesoft-inc/nebula.git\n

                This clones the NebulaGraph source code to a subdirectory named nebula.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/7.compile-using-docker/#compilation_steps","title":"Compilation steps","text":"
              1. Pull the NebulaGraph compilation image.

                docker pull vesoft/nebula-dev:ubuntu2004\n

                Here, we use the official NebulaGraph compilation image, ubuntu2004. For different versions, see nebula-dev-docker.

              2. Start the compilation container.

                docker run -ti \\\n  --security-opt seccomp=unconfined \\\n  -v \"$PWD\":/home \\\n  -w /home \\\n  --name nebula_dev \\\n  vesoft/nebula-dev:ubuntu2004 \\\n  bash\n
                • --security-opt seccomp=unconfined: Disables the seccomp security mechanism to avoid compilation errors.
                • -v \"$PWD\":/home: Mounts the local path of the NebulaGraph code to the container's /home directory.
                • -w /home: Sets the container's working directory to /home. Any command run inside the container will use this directory as the current directory.
                • --name nebula_dev: Assigns a name to the container, making it easier to manage and operate.
                • vesoft/nebula-dev:ubuntu2004: Uses the ubuntu2004 version of the vesoft/nebula-dev compilation image.
                • bash: Executes the bash command inside the container, entering the container's interactive terminal.

                After executing this command, you'll enter an interactive terminal inside the container. To re-enter the container, use docker exec -ti nebula_dev bash.

              3. Compile NebulaGraph inside the container.

                1. Enter the NebulaGraph source code directory.

                  cd nebula\n
                2. Create a build directory and enter it.

                  mkdir build && cd build\n
                3. Use CMake to generate the Makefile.

                  cmake -DCMAKE_CXX_COMPILER=$TOOLSET_CLANG_DIR/bin/g++ -DCMAKE_C_COMPILER=$TOOLSET_CLANG_DIR/bin/gcc -DENABLE_WERROR=OFF -DCMAKE_BUILD_TYPE=Debug -DENABLE_TESTING=OFF ..\n
                  For more on CMake, see CMake Parameters.

                4. Compile NebulaGraph.

                  # The -j parameter specifies the number of threads to use.\n# If you have a multi-core CPU, you can use more threads to speed up compilation.\nmake -j2\n

                  Compilation might take some time based on your system performance.

              4. Install the Executables and Libraries.

                Post successful compilation, NebulaGraph's binaries and libraries are located in /home/nebula/build. Install them to /usr/local/nebula:

                make install\n

              Once completed, NebulaGraph is compiled and installed in the host directory /usr/local/nebula.

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/7.compile-using-docker/#next_steps","title":"Next Steps","text":"
              • Start NebulaGraph Service
              • Connect to NebulaGraph
              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/deploy-nebula-graph-cluster/","title":"Deploy a NebulaGraph cluster with RPM/DEB package on multiple servers","text":"

              For now, NebulaGraph does not provide an official deployment tool. Users can deploy a NebulaGraph cluster with RPM or DEB package manually. This topic provides an example of deploying a NebulaGraph cluster on multiple servers (machines).

              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/deploy-nebula-graph-cluster/#deployment","title":"Deployment","text":"Machine name IP address Number of graphd Number of storaged Number of metad A 192.168.10.111 1 1 1 B 192.168.10.112 1 1 1 C 192.168.10.113 1 1 1 D 192.168.10.114 1 1 None E 192.168.10.115 1 1 None"},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/deploy-nebula-graph-cluster/#prerequisites","title":"Prerequisites","text":"
              • Prepare 5 machines for deploying the cluster.
              • Use the NTP service to synchronize time in the cluster.
              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/deploy-nebula-graph-cluster/#manual_deployment_process","title":"Manual deployment process","text":""},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/deploy-nebula-graph-cluster/#install_nebulagraph","title":"Install NebulaGraph","text":"

              Install NebulaGraph on each machine in the cluster. Available approaches of installation are as follows.

              • Install NebulaGraph with RPM or DEB package
              • Install NebulaGraph by compiling the source code
              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/deploy-nebula-graph-cluster/#modify_the_configurations","title":"Modify the configurations","text":"

              To deploy NebulaGraph according to your requirements, you have to modify the configuration files.

              All the configuration files for NebulaGraph, including nebula-graphd.conf, nebula-metad.conf, and nebula-storaged.conf, are stored in the etc directory in the installation path. You only need to modify the configuration for the corresponding service on the machines. The configurations that need to be modified for each machine are as follows.

              Machine name The configuration to be modified A nebula-graphd.conf, nebula-storaged.conf, nebula-metad.conf B nebula-graphd.conf, nebula-storaged.conf, nebula-metad.conf C nebula-graphd.conf, nebula-storaged.conf, nebula-metad.conf D nebula-graphd.conf, nebula-storaged.conf E nebula-graphd.conf, nebula-storaged.conf

              Users can refer to the content of the following configurations, which only show part of the cluster settings. The hidden content uses the default setting so that users can better understand the relationship between the servers in the NebulaGraph cluster.

              Note

              The main configuration to be modified is meta_server_addrs. All configurations need to fill in the IP addresses and ports of all Meta services. At the same time, local_ip needs to be modified as the network IP address of the machine itself. For detailed descriptions of the configuration parameters, see:

              • Meta Service configurations
              • Graph Service configurations
              • Storage Service configurations
              • Deploy machine A

                • nebula-graphd.conf

                  ########## networking ##########\n# Comma separated Meta Server Addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-graphd process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.111\n# Network device to listen on\n--listen_netdev=any\n# Port to listen on\n--port=9669\n
                • nebula-storaged.conf

                  ########## networking ##########\n# Comma separated Meta server addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-storaged process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.111\n# Storage daemon listening port\n--port=9779\n
                • nebula-metad.conf

                  ########## networking ##########\n# Comma separated Meta Server addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-metad process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.111\n# Meta daemon listening port\n--port=9559\n
              • Deploy machine B

                • nebula-graphd.conf

                  ########## networking ##########\n# Comma separated Meta Server Addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-graphd process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.112\n# Network device to listen on\n--listen_netdev=any\n# Port to listen on\n--port=9669\n
                • nebula-storaged.conf

                  ########## networking ##########\n# Comma separated Meta server addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-storaged process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.112\n# Storage daemon listening port\n--port=9779\n
                • nebula-metad.conf

                  ########## networking ##########\n# Comma separated Meta Server addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-metad process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.112\n# Meta daemon listening port\n--port=9559\n
              • Deploy machine C

                • nebula-graphd.conf

                  ########## networking ##########\n# Comma separated Meta Server Addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-graphd process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.113\n# Network device to listen on\n--listen_netdev=any\n# Port to listen on\n--port=9669\n
                • nebula-storaged.conf

                  ########## networking ##########\n# Comma separated Meta server addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-storaged process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.113\n# Storage daemon listening port\n--port=9779\n
                • nebula-metad.conf

                  ########## networking ##########\n# Comma separated Meta Server addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-metad process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.113\n# Meta daemon listening port\n--port=9559\n
              • Deploy machine D

                • nebula-graphd.conf

                  ########## networking ##########\n# Comma separated Meta Server Addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-graphd process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.114\n# Network device to listen on\n--listen_netdev=any\n# Port to listen on\n--port=9669\n
                • nebula-storaged.conf

                  ########## networking ##########\n# Comma separated Meta server addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-storaged process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.114\n# Storage daemon listening port\n--port=9779\n
              • Deploy machine E

                • nebula-graphd.conf

                  ########## networking ##########\n# Comma separated Meta Server Addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-graphd process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.115\n# Network device to listen on\n--listen_netdev=any\n# Port to listen on\n--port=9669\n
                • nebula-storaged.conf

                  ########## networking ##########\n# Comma separated Meta server addresses\n--meta_server_addrs=192.168.10.111:9559,192.168.10.112:9559,192.168.10.113:9559\n# Local IP used to identify the nebula-storaged process.\n# Change it to an address other than loopback if the service is distributed or\n# will be accessed remotely.\n--local_ip=192.168.10.115\n# Storage daemon listening port\n--port=9779\n
              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/deploy-nebula-graph-cluster/#start_the_cluster","title":"Start the cluster","text":"

              Start the corresponding service on each machine. Descriptions are as follows.

              Machine name The process to be started A graphd, storaged, metad B graphd, storaged, metad C graphd, storaged, metad D graphd, storaged E graphd, storaged

              The command to start the NebulaGraph services is as follows.

              sudo /usr/local/nebula/scripts/nebula.service start <metad|graphd|storaged|all>\n

              Note

              • Make sure all the processes of services on each machine are started. Otherwise, you will fail to start NebulaGraph.
              • When the graphd process, the storaged process, and the metad process are all started, you can use all instead.
              • /usr/local/nebula is the default installation path for NebulaGraph. Use the actual path if you have customized the path. For more information about how to start and stop the services, see Manage NebulaGraph services.
              "},{"location":"4.deployment-and-installation/2.compile-and-install-nebula-graph/deploy-nebula-graph-cluster/#check_the_cluster_status","title":"Check the cluster status","text":"

              Install the native CLI client NebulaGraph Console, then connect to any machine that has started the graphd process, run ADD HOSTS command to add storage hosts, and run SHOW HOSTS to check the cluster status. For example:

              $ ./nebula-console --addr 192.168.10.111 --port 9669 -u root -p nebula\n\n2021/05/25 01:41:19 [INFO] connection pool is initialized successfully\nWelcome to NebulaGraph!\n\n> ADD HOSTS 192.168.10.111:9779, 192.168.10.112:9779, 192.168.10.113:9779, 192.168.10.114:9779, 192.168.10.115:9779;\n> SHOW HOSTS;\n+------------------+------+----------+--------------+----------------------+------------------------+---------+\n| Host             | Port | Status   | Leader count | Leader distribution  | Partition distribution | Version |\n+------------------+------+----------+--------------+----------------------+------------------------+---------+\n| \"192.168.10.111\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No valid partition\"   | \"master\" |\n| \"192.168.10.112\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No valid partition\"   | \"master\" |\n| \"192.168.10.113\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No valid partition\"   | \"master\" |\n| \"192.168.10.114\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No valid partition\"   | \"master\" |\n| \"192.168.10.115\" | 9779 | \"ONLINE\" | 0            | \"No valid partition\" | \"No valid partition\"   | \"master\" |\n+------------------+------+-----------+----------+--------------+----------------------+------------------------+---------+\n
              "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/","title":"Upgrade NebulaGraph to master","text":"

              This topic describes how to upgrade NebulaGraph from version 2.x and 3.x to master, taking upgrading from version 2.6.1 to master as an example.

              "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#applicable_source_versions","title":"Applicable source versions","text":"

              This topic applies to upgrading NebulaGraph from 2.5.0 and later 2.x, and 3.x versions to master. It does not apply to historical versions earlier than 2.5.0, including the 1.x versions.

              To upgrade NebulaGraph from historical versions to master:

              1. Upgrade it to the latest 2.5 version according to the docs of that version.
              2. Follow this topic to upgrade it to master.

              Caution

              To upgrade NebulaGraph from versions earlier than 2.0.0 (including the 1.x versions) to master, you need to find the date_time_zonespec.csv in the share/resources directory of master files, and then copy it to the same directory in the NebulaGraph installation path.

              "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#limitations","title":"Limitations","text":"
              • Rolling Upgrade is not supported. You must stop all the NebulaGraph services before the upgrade.
              • There is no upgrade script. You have to manually upgrade each server in the cluster.
              • This topic does not apply to scenarios where NebulaGraph is deployed with Docker, including Docker Swarm, Docker Compose, and K8s.
              • You must upgrade the old NebulaGraph services on the same machines they are deployed. DO NOT change the IP addresses, configuration files of the machines, and DO NOT change the cluster topology.
              • Known issues that could cause data loss are listed on GitHub known issues. The issues are all related to altering schema or default values.
              • DO NOT use soft links to switch the data directories.
              • You must have the sudo privileges to complete the steps in this topic.
              "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#upgrade_influences","title":"Upgrade influences","text":"
              • Client compatibility

                After the upgrade, you will not be able to connect to NebulaGraph from old clients. You will need to upgrade all clients to a version compatible with NebulaGraph master.

              • Configuration changes

                A few configuration parameters have been changed. For more information, see the release notes and configuration docs.

              • nGQL compatibility

                The nGQL syntax is partially incompatible:

                • Disable the YIELD clause to return custom variables.
                • The YIELD clause is required in the FETCH, GO, LOOKUP, FIND PATH and GET SUBGRAPH statements.
                • It is required to specify a tag to query properties of a vertex in a MATCH statement. For example, from return v.name to return v.player.name.
              • Full-text indexes

                Before upgrading a NebulaGraph cluster with full-text indexes deployed, you must manually delete the full-text indexes in Elasticsearch, and then run the SIGN IN command to log into ES and recreate the indexes after the upgrade is complete. To manually delete the full-text indexes in Elasticsearch, you can use the curl command curl -XDELETE -u <es_username>:<es_password> '<es_access_ip>:<port>/<fullindex_name>', for example, curl -XDELETE -u elastic:elastic 'http://192.168.8.xxx:9200/nebula_index_2534'. If no username and password are set for Elasticsearch, you can omit the -u <es_username>:<es_password> part.

              Caution

              There may be other undiscovered influences. Before the upgrade, we recommend that you read the release notes and user manual carefully, and keep an eye on the posts on the forum and issues on Github.

              "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#preparations_before_the_upgrade","title":"Preparations before the upgrade","text":"
              • Download the package of NebulaGraph master according to your operating system and system architecture. You need the binary files during the upgrade. Find the package on the download page.

                Note

                You can also get the new binaries from the source code or the RPM/DEB package.

              • Locate the data files based on the value of the data_path parameters in the Storage and Meta configurations, and backup the data files. The default paths are nebula/data/storage and nebula/data/meta.

                Danger

                The old data will not be automatically backed up during the upgrade. You must manually back up the data to avoid data loss.

              • Backup the configuration files.
              • Collect the statistics of all graph spaces before the upgrade. After the upgrade, you can collect again and compare the results to make sure that no data is lost. To collect the statistics:

                1. Run SUBMIT JOB STATS.
                2. Run SHOW JOBS and record the result.
              "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#upgrade_steps","title":"Upgrade steps","text":"
              1. Stop all NebulaGraph services.

                <nebula_install_path>/scripts/nebula.service stop all\n

                nebula_install_path indicates the installation path of NebulaGraph.

                The storaged progress needs around 1 minute to flush data. You can run nebula.service status all to check if all services are stopped. For more information about starting and stopping services, see Manage services.

                Note

                If the services are not fully stopped in 20 minutes, stop upgrading and ask for help on the forum or Github.

                Caution

                Starting from version 3.0.0, it is possible to insert vertices without tags. If you need to keep vertices without tags, add --graph_use_vertex_key=true in the configuration file (nebula-graphd.conf) of all Graph services within the cluster; and add --use_vertex_key=true in the configuration file (nebula-storaged.conf) of all Storage services.\"

              2. In the target path where you unpacked the package, use the binaries in the bin directory to replace the old binaries in the bin directory in the NebulaGraph installation path.

                Note

                Update the binary of the corresponding service on each NebulaGraph server.

              3. Modify the following parameters in all Graph configuration files to accommodate the value range of the new version. If the parameter values are within the specified range, skip this step.

                • Set a value in [1,604800] for session_idle_timeout_secs. The recommended value is 28800.
                • Set a value in [1,604800] for client_idle_timeout_secs. The recommended value is 28800.

                The default values of these parameters in the 2.x versions are not within the range of the new version. If you do not change the default values, the upgrade will fail. For detailed parameter description, see Graph Service Configuration.

              4. Start all Meta services.

                <nebula_install_path>/scripts/nebula-metad.service start\n

                Once started, the Meta services take several seconds to elect a leader.

                To verify that Meta services are all started, you can start any Graph server, connect to it through NebulaGraph Console, and run SHOW HOSTS meta and SHOW META LEADER. If the status of Meta services are correctly returned, the services are successfully started.

                Note

                If the operation fails, stop the upgrade and ask for help on the forum or GitHub.

              5. Start all the Graph and Storage services.

                Note

                If the operation fails, stop the upgrade and ask for help on the forum or GitHub.

              6. Connect to the new version of NebulaGraph to verify that services are available and data are complete. For how to connect, see Connect to NebulaGraph.

                Currently, there is no official way to check whether the upgrade is successful. You can run the following reference statements to test the upgrade:

                nebula> SHOW HOSTS;\nnebula> SHOW HOSTS storage;\nnebula> SHOW SPACES;\nnebula> USE <space_name>\nnebula> SHOW PARTS;\nnebula> SUBMIT JOB STATS;\nnebula> SHOW STATS;\nnebula> MATCH (v) RETURN v LIMIT 5;\n

                You can also test against new features in version master.

              "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#upgrade_failure_and_rollback","title":"Upgrade failure and rollback","text":"

              If the upgrade fails, stop all NebulaGraph services of the new version, recover the old configuration files and binaries, and start the services of the old version.

              All NebulaGraph clients in use must be switched to the old version.

              "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#faq","title":"FAQ","text":""},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#can_i_write_through_the_client_during_the_upgrade","title":"Can I write through the client during the upgrade?","text":"

              A: No. You must stop all NebulaGraph services during the upgrade.

              "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#the_space_0_not_found_warning_message_during_the_upgrade_process","title":"The Space 0 not found warning message during the upgrade process","text":"

              When the Space 0 not found warning message appears during the upgrade process, you can ignore it. The space 0 is used to store meta information about the Storage service and does not contain user data, so it will not affect the upgrade.

              "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#how_to_upgrade_if_a_machine_has_only_the_graph_service_but_not_the_storage_service","title":"How to upgrade if a machine has only the Graph Service, but not the Storage Service?","text":"

              A: You only need to update the configuration files and binaries of the Graph Service.

              "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#how_to_resolve_the_error_permission_denied","title":"How to resolve the error Permission denied?","text":"

              A: Try again with the sudo privileges.

              "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#is_there_any_change_in_gflags","title":"Is there any change in gflags?","text":"

              A: Yes. For more information, see the release notes and configuration docs.

              "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#is_there_a_tool_or_solution_for_verifying_data_consistency_after_the_upgrade","title":"Is there a tool or solution for verifying data consistency after the upgrade?","text":"

              A: No. But if you only want to check the number of vertices and edges, run SUBMIT JOB STATS and SHOW STATS after the upgrade, and compare the result with the result that you recorded before the upgrade.

              "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#how_to_solve_the_issue_that_storage_is_offline_and_leader_count_is_0","title":"How to solve the issue that Storage is OFFLINE and Leader count is 0?","text":"

              A: Run the following statement to add the Storage hosts into the cluster manually.

              ADD HOSTS <ip>:<port>[, <ip>:<port> ...];\n

              For example:

              ADD HOSTS 192.168.10.100:9779, 192.168.10.101:9779, 192.168.10.102:9779;\n

              If the issue persists, ask for help on the forum or GitHub.

              "},{"location":"4.deployment-and-installation/3.upgrade-nebula-graph/upgrade-nebula-comm/#why_the_job_type_changed_after_the_upgrade_but_job_id_remains_the_same","title":"Why the job type changed after the upgrade, but job ID remains the same?","text":"

              A: SHOW JOBS depends on an internal ID to identify job types, but in NebulaGraph 2.5.0 the internal ID changed in this pull request, so this issue happens after upgrading from a version earlier than 2.5.0.

              "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/1.text-based-index-restrictions/","title":"Full-text index restrictions","text":"

              This topic introduces the restrictions for full-text indexes. Please read the restrictions very carefully before using the full-text indexes.

              Caution

              The full-text index feature has been redone in version 3.6.0 and is not compatible with previous versions. If you want to continue to use wildcards, regulars, fuzzy matches, etc., there are 3 ways to do so as follows:

              • Delete the original full-text index, rebuild the full-text index in the new way, and use the new query syntax.
              • Delete the original full-text index and use the native index and string operators directly.
              • Continue to use the previous version of NebulaGraph and its full-text index.

              For now, full-text search has the following limitations:

              • Currently, full-text search supports LOOKUP statements only.
              • The full-text index name can contain only numbers, lowercase letters, and underscores.
              • The names of full-text indexes within different graph spaces cannot be duplicated.
              • The query returns 10 records by default. You can use the LIMIT clause to return more records, up to 10,000. You can modify the ElasticSearch parameters to adjust the maximum number of records returned.
              • If there is a full-text index on the tag/edge type, the tag/edge type cannot be deleted or modified.
              • The type of properties must be STRING or FIXED_STRING.
              • Full-text index can not be applied to search multiple tags/edge types.
              • Full-text index can not search properties with value NULL.
              • Altering Elasticsearch indexes is not supported at this time.
              • Modifying the analyzer is not supported. You have to delete the index data and then specify the analyzer when you rebuild the index.
              • Make sure that you start the Elasticsearch cluster and Nebula\u00a0Graph at the same time. If not, the data writing on the Elasticsearch cluster can be incomplete.
              • It may take a while for Elasticsearch to create indexes. If Nebula\u00a0Graph warns no index is found, you can check the status of the indexing task.
              • NebulaGraph clusters deployed with K8s do not have native support for the full-text search feature. However, you can manually deploy the feature yourself.
              "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/","title":"Deploy full-text index","text":"

              Nebula\u00a0Graph full-text indexes are powered by Elasticsearch. This means that you can use Elasticsearch full-text query language to retrieve what you want. Full-text indexes are managed through built-in procedures. They can be created only for variable STRING and FIXED_STRING properties when the listener cluster and the Elasticsearch cluster are deployed.

              "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/#precaution","title":"Precaution","text":"

              Before you start using the full-text index, please make sure that you know the restrictions.

              "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/#deploy_elasticsearch_cluster","title":"Deploy Elasticsearch cluster","text":"

              To deploy an Elasticsearch cluster, see Kubernetes Elasticsearch deployment or Elasticsearch installation.

              Note

              To support external network access to Elasticsearch, set network.host to 0.0.0.0 in config/elasticsearch.yml.

              You can configure the Elasticsearch to meet your business needs. To customize the Elasticsearch, see Elasticsearch Document.

              "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/#sign_in_to_the_text_search_clients","title":"Sign in to the text search clients","text":"

              When the Elasticsearch cluster is deployed, use the SIGN IN statement to sign in to the Elasticsearch clients. Multiple elastic_ip:port pairs are separated with commas. You must use the IPs and the port number in the configuration file for the Elasticsearch.

              "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/#syntax","title":"Syntax","text":"
              SIGN IN TEXT SERVICE (<elastic_ip:port>, {HTTP | HTTPS} [,\"<username>\", \"<password>\"]) [, (<elastic_ip:port>, ...)];\n
              "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/#example","title":"Example","text":"
              nebula> SIGN IN TEXT SERVICE (192.168.8.100:9200, HTTP);\n

              Note

              Elasticsearch does not have a username or password by default. If you configured a username and password, you need to specify them in the SIGN IN statement.

              Caution

              The Elasticsearch client can only be logged in once, and if there are changes, you need to SIGN OUT and then SIGN IN again, and the client takes effect globally, and multiple graph spaces share the same Elasticsearch client.

              "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/#show_text_search_clients","title":"Show text search clients","text":"

              The SHOW TEXT SEARCH CLIENTS statement can list the text search clients.

              "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/#syntax_1","title":"Syntax","text":"
              SHOW TEXT SEARCH CLIENTS;\n
              "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/#example_1","title":"Example","text":"
              nebula> SHOW TEXT SEARCH CLIENTS;\n+-----------------+-----------------+------+\n| Type            | Host            | Port |\n+-----------------+-----------------+------+\n| \"ELASTICSEARCH\" | \"192.168.8.100\" | 9200 |\n+-----------------+-----------------+------+\n
              "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/#sign_out_to_the_text_search_clients","title":"Sign out to the text search clients","text":"

              The SIGN OUT TEXT SERVICE statement can sign out all the text search clients.

              "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/#syntax_2","title":"Syntax","text":"
              SIGN OUT TEXT SERVICE;\n
              "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/2.deploy-es/#example_2","title":"Example","text":"
              nebula> SIGN OUT TEXT SERVICE;\n
              "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/","title":"Deploy Raft Listener for NebulaGraph Storage service","text":"

              Full-text index data is written to the Elasticsearch cluster asynchronously. The Raft Listener (Listener for short) is a separate process that fetches data from the Storage Service and writes them into the Elasticsearch cluster.

              "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/#prerequisites","title":"Prerequisites","text":"
              • You have read and fully understood the restrictions for using full-text indexes.
              • You have deployed a NebulaGraph cluster.
              • You have deployed a Elasticsearch cluster.
              • You have prepared one or multiple servers to run one or multiple raft listeners.
              "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/#precautions","title":"Precautions","text":"
              • The Storage Service that you want to run as the Listener must have the same or later release with all the other Nebula\u00a0Graph services in the cluster.
              • For now, you can only add all Listeners to a graph space once and for all. Trying to add a new Listener to a graph space that already has a Listener will fail. To add all Listeners, set them in one statement.
              "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/#deployment_process","title":"Deployment process","text":""},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/#step_1_install_the_listener_service","title":"Step 1: Install the Listener service","text":"

              The Listener service uses the same binary as the storaged service. However, the configuration files are different and the processes use different ports. You can install NebulaGraph on all servers that need to deploy a Listener, but only the storaged service can be used. For details, see Install NebulaGraph by RPM or DEB Package.

              "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/#step_2_prepare_the_configuration_file_for_the_listener","title":"Step 2: Prepare the configuration file for the Listener","text":"

              In the etc directory, remove the suffix from nebula-storaged-listener.conf.default or nebula-storaged-listener.conf.production to nebula-storaged-listener.conf, and then modify the configuration content.

              Most configurations are the same as the configurations of Storage Service. This topic only introduces the differences.

              Name Default value Description daemonize true When set to true, the process is a daemon process. pid_file pids/nebula-metad-listener.pid The file that records the process ID. meta_server_addrs - IP (or hostname) and ports of all Meta services. Multiple Meta services are separated by commas. local_ip - The local IP (or hostname) of the Listener service. Use real IP addresses instead of domain names or loopback IP addresses such as 127.0.0.1. port - The listening port of the RPC daemon of the Listener service. heartbeat_interval_secs 10 The heartbeat interval of the Meta service. The unit is second (s). listener_path data/listener The WAL directory of the Listener. Only one directory is allowed. data_path data For compatibility reasons, this parameter can be ignored. Fill in the default value data. part_man_type memory The type of the part manager. Optional values \u200b\u200bare memory and meta. rocksdb_batch_size 4096 The default reserved bytes for batch operations. rocksdb_block_cache 4 The default block cache size of BlockBasedTable. The unit is Megabyte (MB). engine_type rocksdb The type of the Storage engine, such as rocksdb, memory, etc. part_type simple The type of the part, such as simple, consensus, etc."},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/#step_3_start_listeners","title":"Step 3: Start Listeners","text":"

              To initiate the Listener, navigate to the installation path of the desired cluster and execute the following command:

              ./bin/nebula-storaged --flagfile etc/nebula-storaged-listener.conf\n
              "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/#step_4_add_listeners_to_nebulagraph","title":"Step 4: Add Listeners to NebulaGraph","text":"

              Connect to NebulaGraph and run USE <space> to enter the graph space that you want to create full-text indexes for. Then run the following statement to add a Listener into NebulaGraph.

              ADD LISTENER ELASTICSEARCH <listener_ip:port> [,<listener_ip:port>, ...]\n

              Warning

              You must use real IPs for a Listener.

              Add all Listeners in one statement completely.

              nebula> ADD LISTENER ELASTICSEARCH 192.168.8.100:9789,192.168.8.101:9789;\n
              "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/#show_listeners","title":"Show Listeners","text":"

              Run the SHOW LISTENER statement to list all Listeners.

              "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/#example","title":"Example","text":"
              nebula> SHOW LISTENER;\n+--------+-----------------+------------------------+-------------+\n| PartId | Type            | Host                   | Host Status |\n+--------+-----------------+------------------------+-------------+\n| 1      | \"ELASTICSEARCH\" | \"\"192.168.8.100\":9789\" | \"ONLINE\"    |\n| 2      | \"ELASTICSEARCH\" | \"\"192.168.8.100\":9789\" | \"ONLINE\"    |\n| 3      | \"ELASTICSEARCH\" | \"\"192.168.8.100\":9789\" | \"ONLINE\"    |\n+--------+-----------------+------------------------+-------------+\n
              "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/#remove_listeners","title":"Remove Listeners","text":"

              Run the REMOVE LISTENER ELASTICSEARCH statement to remove all Listeners in a graph space.

              "},{"location":"4.deployment-and-installation/6.deploy-text-based-index/3.deploy-listener/#example_1","title":"Example","text":"
              nebula> REMOVE LISTENER ELASTICSEARCH;\n
              "},{"location":"5.configurations-and-logs/1.configurations/1.configurations/","title":"Configurations","text":"

              NebulaGraph builds the configurations based on the gflags repository. Most configurations are flags. When the NebulaGraph service starts, it will get the configuration information from Configuration files by default. Configurations that are not in the file apply the default values.

              Note

              • Because there are many configurations and they may change as NebulaGraph develops, this topic will not introduce all configurations. To get detailed descriptions of configurations, follow the instructions below.
              • It is not recommended to modify the configurations that are not introduced in this topic, unless you are familiar with the source code and fully understand the function of configurations.

              Legacy version compatibility

              In the topic of 1.x, we provide a method of using the CONFIGS command to modify the configurations in the cache. However, using this method in a production environment can easily cause inconsistencies of configurations between clusters and the local. Therefore, this method will no longer be introduced starting with version 2.x.

              "},{"location":"5.configurations-and-logs/1.configurations/1.configurations/#get_the_configuration_list_and_descriptions","title":"Get the configuration list and descriptions","text":"

              Use the following command to get all the configuration information of the service corresponding to the binary file:

              <binary> --help\n

              For example:

              # Get the help information from Meta\n$ /usr/local/nebula/bin/nebula-metad  --help\n\n# Get the help information from Graph\n$ /usr/local/nebula/bin/nebula-graphd --help\n\n# Get the help information from Storage\n$ /usr/local/nebula/bin/nebula-storaged --help\n

              The above examples use the default storage path /usr/local/nebula/bin/. If you modify the installation path of NebulaGraph, use the actual path to query the configurations.

              "},{"location":"5.configurations-and-logs/1.configurations/1.configurations/#get_configurations","title":"Get configurations","text":"

              Use the curl command to get the value of the running configurations.

              For example:

              # Get the running configurations from Meta\ncurl 127.0.0.1:19559/flags\n\n# Get the running configurations from Graph\ncurl 127.0.0.1:19669/flags\n\n# Get the running configurations from Storage\ncurl 127.0.0.1:19779/flags\n

              Utilizing the -s or `-silent option allows for the concealment of the progress bar and error messages. For example:

              curl -s 127.0.0.1:19559/flags\n

              Note

              In an actual environment, use the real IP (or hostname) instead of 127.0.0.1 in the above example.

              "},{"location":"5.configurations-and-logs/1.configurations/1.configurations/#configuration_files","title":"Configuration files","text":""},{"location":"5.configurations-and-logs/1.configurations/1.configurations/#configuration_files_for_clusters_installed_from_source_with_an_rpmdeb_package_or_a_tar_package","title":"Configuration files for clusters installed from source, with an RPM/DEB package, or a TAR package","text":"

              NebulaGraph provides two initial configuration files for each service, <service_name>.conf.default and <service_name>.conf.production. You can use them in different scenarios conveniently. For clusters installed from source and with a RPM/DEB package, the default path is /usr/local/nebula/etc/. For clusters installed with a TAR package, the path is <install_path>/<tar_package_directory>/etc.

              The configuration values in the initial configuration file are for reference only and can be adjusted according to actual needs. To use the initial configuration file, choose one of the above two files and delete the suffix .default or .production to make it valid.

              Note

              To ensure the availability of services, it is recommended that configurations for the same service be consistent, except for local_ip. For example, three Storage servers are deployed in one NebulaGraph cluster. The configurations of the three Storage servers are recommended to be consistent, except for local_ip.

              The initial configuration files corresponding to each service are as follows.

              NebulaGraph service Initial configuration file Description Meta nebula-metad.conf.default and nebula-metad.conf.production Meta service configuration Graph nebula-graphd.conf.default and nebula-graphd.conf.production Graph service configuration Storage nebula-storaged.conf.default and nebula-storaged.conf.production Storage service configuration

              Each initial configuration file of all services contains local_config. The default value is true, which means that the NebulaGraph service will get configurations from its configuration files and start it.

              Caution

              It is not recommended to modify the value of local_config to false. If modified, the NebulaGraph service will first read the cached configurations, which may cause configuration inconsistencies between clusters and cause unknown risks.

              "},{"location":"5.configurations-and-logs/1.configurations/1.configurations/#configuration_files_for_clusters_installed_with_docker_compose","title":"Configuration files for clusters installed with Docker Compose","text":"

              For clusters installed with Docker Compose, the configuration file's default installation path of the cluster is <install_path>/nebula-docker-compose/docker-compose.yaml. The parameters in the command field of the file are the launch parameters for each service.

              "},{"location":"5.configurations-and-logs/1.configurations/1.configurations/#configuration_files_for_clusters_installed_with_nebulagraph_operator","title":"Configuration files for clusters installed with NebulaGraph Operator","text":"

              For clusters installed with Kubectl through NebulaGraph Operator, the configuration file's path is the path of the cluster YAML file. You can modify the configuration of each service through the spec.{graphd|storaged|metad}.config parameter.

              Note

              The services cannot be configured for clusters installed with Helm.

              "},{"location":"5.configurations-and-logs/1.configurations/1.configurations/#modify_configurations","title":"Modify configurations","text":"

              You can modify the configurations of NebulaGraph in the configuration file or use commands to dynamically modify configurations.

              Caution

              Using both methods to modify the configuration can cause the configuration information to be managed inconsistently, which may result in confusion. It is recommended to only use the configuration file to manage the configuration, or to make the same modifications to the configuration file after dynamically updating the configuration through commands to ensure consistency.

              "},{"location":"5.configurations-and-logs/1.configurations/1.configurations/#modifying_configurations_in_the_configuration_file","title":"Modifying configurations in the configuration file","text":"

              By default, each NebulaGraph service gets configured from its configuration files. You can modify configurations and make them valid according to the following steps:

              • For clusters installed from source, with a RPM/DEB, or a TAR package

                1. Use a text editor to modify the configuration files of the target service and save the modification.

                2. Choose an appropriate time to restart all NebulaGraph services to make the modifications valid.

              • For clusters installed with Docker Compose

                1. In the <install_path>/nebula-docker-compose/docker-compose.yaml file, modify the configurations of the target service.
                2. In the nebula-docker-compose directory, run the command docker-compose up -d to restart the service involving configuration modifications.
              • For clusters installed with Kubectl

                For details, see Customize configuration parameters for a NebulaGraph cluster.

              "},{"location":"5.configurations-and-logs/1.configurations/1.configurations/#dynamically_modifying_configurations_using_command","title":"Dynamically modifying configurations using command","text":"

              You can dynamically modify the configuration of NebulaGraph by using the curl command. For example, to modify the wal_ttl parameter of the Storage service to 600, use the following command:

              curl -X PUT -H \"Content-Type: application/json\" -d'{\"wal_ttl\":\"600\"}' -s \"http://192.168.15.6:19779/flags\"\n

              In this command, {\"wal_ttl\":\"600\"} specifies the configuration parameter and its value to be modified, and 192.168.15.6:19779 specifies the IP address and HTTP port number of the Storage service.

              Caution

              • The functionality of dynamically modifying configurations is only applicable to prototype verification and testing environments. It is not recommended to use this feature in production environments. This is because when the local_config value is set to true, the dynamically modified configuration is not persisted, and the configuration will be restored to the initial configuration after the service is restarted.
              • Only part of the configuration parameters can be dynamically modified. For the specific list of parameters that can be modified, see the description of Whether supports runtime dynamic modifications in the respective service configuration.
              "},{"location":"5.configurations-and-logs/1.configurations/2.meta-config/","title":"Meta Service configuration","text":"

              NebulaGraph provides two initial configuration files for the Meta service, nebula-metad.conf.default and nebula-metad.conf.production. Users can use them in different scenarios conveniently. The default file path is /usr/local/nebula/etc/.

              Caution

              • It is not recommended to modify the value of local_config to false. If modified, the NebulaGraph service will first read the cached configurations, which may cause configuration inconsistencies between clusters and cause unknown risks.
              • It is not recommended to modify the configurations that are not introduced in this topic, unless you are familiar with the source code and fully understand the function of configurations.
              "},{"location":"5.configurations-and-logs/1.configurations/2.meta-config/#how_to_use_the_configuration_files","title":"How to use the configuration files","text":"

              To use the initial configuration file, choose one of the above two files and delete the suffix .default or .production from the initial configuration file for the Meta Service to apply the configurations defined in it.

              "},{"location":"5.configurations-and-logs/1.configurations/2.meta-config/#about_parameter_values","title":"About parameter values","text":"

              If a parameter is not set in the configuration file, NebulaGraph uses the default value. Not all parameters are predefined. And the predefined parameters in the two initial configuration files are different. This topic uses the parameters in nebula-metad.conf.default.

              Caution

              Some parameter values in the configuration file can be dynamically modified during runtime. We label these parameters as Yes that supports runtime dynamic modification in this article. When the local_config value is set to true, the dynamically modified configuration is not persisted, and the configuration will be restored to the initial configuration after the service is restarted. For more information, see Modify configurations.

              For all parameters and their current values, see Configurations.

              "},{"location":"5.configurations-and-logs/1.configurations/2.meta-config/#basics_configurations","title":"Basics configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications daemonize true When set to true, the process is a daemon process. No pid_file pids/nebula-metad.pid The file that records the process ID. No timezone_name - Specifies the NebulaGraph time zone. This parameter is not predefined in the initial configuration files. You can manually set it if you need it. The system default value is UTC+00:00:00. For the format of the parameter value, see Specifying the Time Zone with TZ. For example, --timezone_name=UTC+08:00 represents the GMT+8 time zone. No

              Note

              • While inserting property values of time types, NebulaGraph transforms time types (except TIMESTAMP) to the corresponding UTC according to the time zone specified by timezone_name. The time-type values returned by nGQL queries are all UTC time.
              • timezone_name is only used to transform the data stored in NebulaGraph. Other time-related data of the NebulaGraph processes still uses the default time zone of the host, such as the log printing time.
              "},{"location":"5.configurations-and-logs/1.configurations/2.meta-config/#logging_configurations","title":"Logging configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications log_dir logs The directory that stores the Meta Service log. It is recommended to put logs on a different hard disk from the data. No minloglevel 0 Specifies the minimum level of the log. That is, log messages at or above this level. Optional values are 0 (INFO), 1 (WARNING), 2 (ERROR), 3 (FATAL). It is recommended to set it to 0 during debugging and 1 in a production environment. If it is set to 4, NebulaGraph will not print any logs. Yes v 0 Specifies the detailed level of VLOG. That is, log all VLOG messages less or equal to the level. Optional values are 0, 1, 2, 3, 4, 5. The VLOG macro provided by glog allows users to define their own numeric logging levels and control verbose messages that are logged with the parameter v. For details, see Verbose Logging. Yes logbufsecs 0 Specifies the maximum time to buffer the logs. If there is a timeout, it will output the buffered log to the log file. 0 means real-time output. This configuration is measured in seconds. No redirect_stdout true When set to true, the process redirects thestdout and stderr to separate output files. No stdout_log_file metad-stdout.log Specifies the filename for the stdout log. No stderr_log_file metad-stderr.log Specifies the filename for the stderr log. No stderrthreshold 3 Specifies the minloglevel to be copied to the stderr log. No timestamp_in_logfile_name true Specifies if the log file name contains a timestamp. true indicates yes, false indicates no. No"},{"location":"5.configurations-and-logs/1.configurations/2.meta-config/#networking_configurations","title":"Networking configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications meta_server_addrs 127.0.0.1:9559 Specifies the IPs (or hostnames) and ports of all Meta Services. Multiple addresses are separated with commas. No local_ip 127.0.0.1 Specifies the local IP (or hostname) for the Meta Service. The local IP address is used to identify the nebula-metad process. If it is a distributed cluster or requires remote access, modify it to the corresponding address. No port 9559 Specifies RPC daemon listening port of the Meta service. The neighboring +1 (9560) port is used for Raft communication between Meta services. No ws_ip 0.0.0.0 Specifies the IP address for the HTTP service. No ws_http_port 19559 Specifies the port for the HTTP service. No ws_storage_http_port 19779 Specifies the Storage service listening port used by the HTTP protocol. It must be consistent with the ws_http_port in the Storage service configuration file. This parameter only applies to standalone NebulaGraph. No

              Caution

              It is recommended to use a real IP when using IP address. Otherwise, 127.0.0.1/0.0.0.0 cannot be parsed correctly in some cases.

              "},{"location":"5.configurations-and-logs/1.configurations/2.meta-config/#storage_configurations","title":"Storage configurations","text":"Name Predefined Value Description Whether supports runtime dynamic modifications data_path data/meta The storage path for Meta data. No"},{"location":"5.configurations-and-logs/1.configurations/2.meta-config/#misc_configurations","title":"Misc configurations","text":"Name Predefined Value Description Whether supports runtime dynamic modifications default_parts_num 10 Specifies the default partition number when creating a new graph space. No default_replica_factor 1 Specifies the default replica number when creating a new graph space. No heartbeat_interval_secs 10 Specifies the default heartbeat interval. Make sure the heartbeat_interval_secs values for all services are the same, otherwise NebulaGraph CANNOT work normally. This configuration is measured in seconds. Yes agent_heartbeat_interval_secs 60 Specifies the default heartbeat interval for the Agent service. This configuration influences the time it takes for the system to determine that the Agent service is offline. This configuration is measured in seconds. No"},{"location":"5.configurations-and-logs/1.configurations/2.meta-config/#rocksdb_options_configurations","title":"RocksDB options configurations","text":"Name Predefined Value Description Whether supports runtime dynamic modifications rocksdb_wal_sync true Enables or disables RocksDB WAL synchronization. Available values are true (enable) and false (disable). No"},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/","title":"Graph Service configuration","text":"

              NebulaGraph provides two initial configuration files for the Graph Service, nebula-graphd.conf.default and nebula-graphd.conf.production. Users can use them in different scenarios conveniently. The default file path is /usr/local/nebula/etc/.

              Caution

              • It is not recommended to modify the value of local_config to false. If modified, the NebulaGraph service will first read the cached configurations, which may cause configuration inconsistencies between clusters and cause unknown risks.
              • It is not recommended to modify the configurations that are not introduced in this topic, unless you are familiar with the source code and fully understand the function of configurations.
              "},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#how_to_use_the_configuration_files","title":"How to use the configuration files","text":"

              To use the initial configuration file, choose one of the above two files and delete the suffix .default or .production from the initial configuration file for the Meta Service to apply the configurations defined in it.

              "},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#about_parameter_values","title":"About parameter values","text":"

              If a parameter is not set in the configuration file, NebulaGraph uses the default value. Not all parameters are predefined. And the predefined parameters in the two initial configuration files are different. This topic uses the parameters in nebula-metad.conf.default.

              Caution

              Some parameter values in the configuration file can be dynamically modified during runtime. We label these parameters as Yes that supports runtime dynamic modification in this article. When the local_config value is set to true, the dynamically modified configuration is not persisted, and the configuration will be restored to the initial configuration after the service is restarted. For more information, see Modify configurations.

              For all parameters and their current values, see Configurations.

              "},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#basics_configurations","title":"Basics configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications daemonize true When set to true, the process is a daemon process. No pid_file pids/nebula-graphd.pid The file that records the process ID. No enable_optimizer true When set to true, the optimizer is enabled. No timezone_name - Specifies the NebulaGraph time zone. This parameter is not predefined in the initial configuration files. The system default value is UTC+00:00:00. For the format of the parameter value, see Specifying the Time Zone with TZ. For example, --timezone_name=UTC+08:00 represents the GMT+8 time zone. No default_charset utf8 Specifies the default charset when creating a new graph space. No default_collate utf8_bin Specifies the default collate when creating a new graph space. No local_config true When set to true, the process gets configurations from the configuration files. No

              Note

              • While inserting property values of time types, NebulaGraph transforms time types (except TIMESTAMP) to the corresponding UTC according to the time zone specified by timezone_name. The time-type values returned by nGQL queries are all UTC time.
              • timezone_name is only used to transform the data stored in NebulaGraph. Other time-related data of the NebulaGraph processes still uses the default time zone of the host, such as the log printing time.
              "},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#logging_configurations","title":"Logging configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications log_dir logs The directory that stores the Graph service log. It is recommended to put logs on a different hard disk from the data. No minloglevel 0 Specifies the minimum level of the log. That is, log messages at or above this level. Optional values are 0 (INFO), 1 (WARNING), 2 (ERROR), 3 (FATAL). It is recommended to set it to 0 during debugging and 1 in a production environment. If it is set to 4, NebulaGraph will not print any logs. Yes v 0 Specifies the detailed level of VLOG. That is, log all VLOG messages less or equal to the level. Optional values are 0, 1, 2, 3, 4, 5. The VLOG macro provided by glog allows users to define their own numeric logging levels and control verbose messages that are logged with the parameter v. For details, see Verbose Logging. Yes logbufsecs 0 Specifies the maximum time to buffer the logs. If there is a timeout, it will output the buffered log to the log file. 0 means real-time output. This configuration is measured in seconds. No redirect_stdout true When set to true, the process redirects thestdout and stderr to separate output files. No stdout_log_file graphd-stdout.log Specifies the filename for the stdout log. No stderr_log_file graphd-stderr.log Specifies the filename for the stderr log. No stderrthreshold 3 Specifies the minloglevel to be copied to the stderr log. No timestamp_in_logfile_name true Specifies if the log file name contains a timestamp. true indicates yes, false indicates no. No"},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#query_configurations","title":"Query configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications accept_partial_success false When set to false, the process treats partial success as an error. This configuration only applies to read-only requests. Write requests always treat partial success as an error. A partial success query will prompt Got partial result. Yes session_reclaim_interval_secs 60 Specifies the interval that the Session information is sent to the Meta service. This configuration is measured in seconds. Yes max_allowed_query_size 4194304 Specifies the maximum length of queries. Unit: bytes. The default value is 4194304, namely 4MB. Yes"},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#networking_configurations","title":"Networking configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications meta_server_addrs 127.0.0.1:9559 Specifies the IPs (or hostnames) and ports of all Meta Services. Multiple addresses are separated with commas. No local_ip 127.0.0.1 Specifies the local IP (or hostname) for the Graph Service. The local IP address is used to identify the nebula-graphd process. If it is a distributed cluster or requires remote access, modify it to the corresponding address. No listen_netdev any Specifies the listening network device. No port 9669 Specifies RPC daemon listening port of the Graph service. No reuse_port false When set to false, the SO_REUSEPORT is closed. No listen_backlog 1024 Specifies the maximum length of the connection queue for socket monitoring. This configuration must be modified together with the net.core.somaxconn. No client_idle_timeout_secs 28800 Specifies the time to expire an idle connection. The value ranges from 1 to 604800. The default is 8 hours. This configuration is measured in seconds. No session_idle_timeout_secs 28800 Specifies the time to expire an idle session. The value ranges from 1 to 604800. The default is 8 hours. This configuration is measured in seconds. No num_accept_threads 1 Specifies the number of threads that accept incoming connections. No num_netio_threads 0 Specifies the number of networking IO threads. 0 is the number of CPU cores. No num_max_connections 0 Max active connections for all networking threads. 0 means no limit.Max connections for each networking thread = num_max_connections / num_netio_threads No num_worker_threads 0 Specifies the number of threads that execute queries. 0 is the number of CPU cores. No ws_ip 0.0.0.0 Specifies the IP address for the HTTP service. No ws_http_port 19669 Specifies the port for the HTTP service. No heartbeat_interval_secs 10 Specifies the default heartbeat interval. Make sure the heartbeat_interval_secs values for all services are the same, otherwise NebulaGraph CANNOT work normally. This configuration is measured in seconds. Yes storage_client_timeout_ms - Specifies the RPC connection timeout threshold between the Graph Service and the Storage Service. This parameter is not predefined in the initial configuration files. You can manually set it if you need it. The system default value is 60000 ms. No slow_query_threshold_us 200000 When the execution time of a query exceeds the value, the query is called a slow query. Unit: Microsecond.Note: Even if the execution time of DML statements exceeds this value, they will not be recorded as slow queries. No ws_meta_http_port 19559 Specifies the Meta service listening port used by the HTTP protocol. It must be consistent with the ws_http_port in the Meta service configuration file. No

              Caution

              It is recommended to use a real IP when using IP address. Otherwise, 127.0.0.1/0.0.0.0 cannot be parsed correctly in some cases.

              "},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#authorization_configurations","title":"Authorization configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications enable_authorize false When set to false, the system authentication is not enabled. For more information, see Authentication. No auth_type password Specifies the login method. Available values are password, ldap, and cloud. No"},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#memory_configurations","title":"Memory configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications system_memory_high_watermark_ratio 0.8 Specifies the trigger threshold of the high-level memory alarm mechanism. If the system memory usage is higher than this value, an alarm mechanism will be triggered, and NebulaGraph will stop querying. This parameter is not predefined in the initial configuration files. Yes"},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#metrics_configurations","title":"Metrics configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications enable_space_level_metrics false Enable or disable space-level metrics. Such metric names contain the name of the graph space that it monitors, for example, query_latency_us{space=basketballplayer}.avg.3600. You can view the supported metrics with the curl command. For more information, see Query NebulaGraph metrics. No"},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#session_configurations","title":"Session configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications max_sessions_per_ip_per_user 300 The maximum number of active sessions that can be created from a single IP adddress for a single user. No"},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#experimental_configurations","title":"Experimental configurations","text":"

              Note

              The switch of the experimental feature is only available in the Community Edition.

              Name Predefined value Description Whether supports runtime dynamic modifications enable_experimental_feature false Specifies the experimental feature. Optional values are true and false. No enable_data_balance true Whether to enable the BALANCE DATA feature. Only works when enable_experimental_feature is true. No"},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#memory_tracker_configurations","title":"Memory tracker configurations","text":"

              Note

              Memory Tracker is a memory management tool designed to monitor and limit memory usage. For large-scale queries, Memory Tracker can prevent Out Of Memory (OOM) issues. If you're using Memory Tracker in a containerized environment, you need to add the relevant configurations to the configuration file of the Graph service.

              1. Create the directory /sys/fs/cgroup/graphd/, and then add and configure the memory.max file under the directory.
              2. Add the following configurations to etc/nebula-graphd.conf.

                --containerized=true\n--cgroup_v2_controllers=/sys/fs/cgroup/graphd/cgroup.controllers\n--cgroup_v2_memory_stat_path=/sys/fs/cgroup/graphd/memory.stat\n--cgroup_v2_memory_max_path=/sys/fs/cgroup/graphd/memory.max\n--cgroup_v2_memory_current_path=/sys/fs/cgroup/graphd/memory.current\n

              For more details, see Memory Tracker: Memory Management Practice in NebulaGraph Database.

              Name Predefined value Description Whether supports runtime dynamic modifications memory_tracker_limit_ratio 0.8 The value of this parameter can be set to (0, 1], 2, and 3.Caution: When setting this parameter, ensure that the value of system_memory_high_watermark_ratio is not set to 1, otherwise the value of this parameter will not take effect.(0, 1]: The percentage of available memory. Formula: Percentage of available memory = Available memory / (Total memory - Reserved memory).When an ongoing query results in memory usage exceeding the configured limit, the query fails and subsequently the memory is released. Note: For the hybrid deployment of a cluster with cloud-based and on-premises nodes, the value of memory_tracker_limit_ratio should be set to a lower value. For example, when the graphd is expected to occupy only 50% of memory, the value can be set to less than 0.5.2: Dynamic Self Adaptive mode. MemoryTracker dynamically adjusts the available memory based on the system's current available memory. Note: This feature is experimental. As memory usage cannot be monitored in real time in dynamic adaptive mode, an OOM error may still occur to handle large memory allocations. 3: Disable MemoryTracker. MemoryTracker only logs memory usage and does not interfere with executions even if the limit is exceeded. Yes memory_tracker_untracked_reserved_memory_mb 50 The reserved memory that is not tracked by the memory tracker. Unit: MB. Yes memory_tracker_detail_log false Whether to enable the memory tracker log. When the value is true, the memory tracker log is generated. Yes memory_tracker_detail_log_interval_ms 60000 The time interval for generating the memory tracker log. Unit: Millisecond. memory_tracker_detail_log is true when this parameter takes effect. Yes memory_purge_enabled true Whether to enable the memory purge feature. When the value is true, the memory purge feature is enabled. Yes memory_purge_interval_seconds 10 The time interval for the memory purge feature to purge memory. Unit: Second. This parameter only takes effect if memory_purge_enabled is set to true. Yes"},{"location":"5.configurations-and-logs/1.configurations/3.graph-config/#performance_optimization_configurations","title":"performance optimization configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications max_job_size 1 The maximum number of concurrent jobs, i.e., the maximum number of threads used in the phase of query execution where concurrent execution is possible. It is recommended to be half of the physical CPU cores. Yes min_batch_size 8192 The minimum batch size for processing the dataset. Takes effect only when max_job_size is greater than 1. Yes optimize_appendvertices false When enabled, the MATCH statement is executed without filtering dangling edges. Yes path_batch_size 10000 The number of paths constructed per thread. Yes"},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/","title":"Storage Service configurations","text":"

              NebulaGraph provides two initial configuration files for the Storage Service, nebula-storaged.conf.default and nebula-storaged.conf.production. Users can use them in different scenarios conveniently. The default file path is /usr/local/nebula/etc/.

              Caution

              • It is not recommended to modify the value of local_config to false. If modified, the NebulaGraph service will first read the cached configurations, which may cause configuration inconsistencies between clusters and cause unknown risks.
              • It is not recommended to modify the configurations that are not introduced in this topic, unless you are familiar with the source code and fully understand the function of configurations.
              "},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#how_to_use_the_configuration_files","title":"How to use the configuration files","text":"

              To use the initial configuration file, choose one of the above two files and delete the suffix .default or .production from the initial configuration file for the Meta Service to apply the configurations defined in it.

              "},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#about_parameter_values","title":"About parameter values","text":"

              If a parameter is not set in the configuration file, NebulaGraph uses the default value. Not all parameters are predefined. And the predefined parameters in the two initial configuration files are different. This topic uses the parameters in nebula-metad.conf.default. For parameters that are not included in nebula-metad.conf.default, see nebula-storaged.conf.production.

              Caution

              Some parameter values in the configuration file can be dynamically modified during runtime. We label these parameters as Yes that supports runtime dynamic modification in this article. When the local_config value is set to true, the dynamically modified configuration is not persisted, and the configuration will be restored to the initial configuration after the service is restarted. For more information, see Modify configurations.

              Note

              The configurations of the Raft Listener and the Storage service are different. For details, see Deploy Raft listener.

              For all parameters and their current values, see Configurations.

              "},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#basics_configurations","title":"Basics configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications daemonize true When set to true, the process is a daemon process. No pid_file pids/nebula-storaged.pid The file that records the process ID. No timezone_name UTC+00:00:00 Specifies the NebulaGraph time zone. This parameter is not predefined in the initial configuration files, if you need to use this parameter, add it manually. For the format of the parameter value, see Specifying the Time Zone with TZ. For example, --timezone_name=UTC+08:00 represents the GMT+8 time zone. No local_config true When set to true, the process gets configurations from the configuration files. No

              Note

              • While inserting property values of time types, NebulaGraph transforms time types (except TIMESTAMP) to the corresponding UTC according to the time zone specified by timezone_name. The time-type values returned by nGQL queries are all UTC.
              • timezone_name is only used to transform the data stored in NebulaGraph. Other time-related data of the NebulaGraph processes still uses the default time zone of the host, such as the log printing time.
              "},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#logging_configurations","title":"Logging configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications log_dir logs The directory that stores the Storage service log. It is recommended to put logs on a different hard disk from the data. No minloglevel 0 Specifies the minimum level of the log. That is, log messages at or above this level. Optional values are 0 (INFO), 1 (WARNING), 2 (ERROR), 3 (FATAL). It is recommended to set it to 0 during debugging and 1 in a production environment. If it is set to 4, NebulaGraph will not print any logs. Yes v 0 Specifies the detailed level of VLOG. That is, log all VLOG messages less or equal to the level. Optional values are 0, 1, 2, 3, 4, 5. The VLOG macro provided by glog allows users to define their own numeric logging levels and control verbose messages that are logged with the parameter v. For details, see Verbose Logging. Yes logbufsecs 0 Specifies the maximum time to buffer the logs. If there is a timeout, it will output the buffered log to the log file. 0 means real-time output. This configuration is measured in seconds. No redirect_stdout true When set to true, the process redirects thestdout and stderr to separate output files. No stdout_log_file graphd-stdout.log Specifies the filename for the stdout log. No stderr_log_file graphd-stderr.log Specifies the filename for the stderr log. No stderrthreshold 3 Specifies the minloglevel to be copied to the stderr log. No timestamp_in_logfile_name true Specifies if the log file name contains a timestamp. true indicates yes, false indicates no. No"},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#networking_configurations","title":"Networking configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications meta_server_addrs 127.0.0.1:9559 Specifies the IPs (or hostnames) and ports of all Meta Services. Multiple addresses are separated with commas. No local_ip 127.0.0.1 Specifies the local IP (or hostname) for the Storage Service. The local IP address is used to identify the nebula-storaged process. If it is a distributed cluster or requires remote access, modify it to the corresponding address. No port 9779 Specifies RPC daemon listening port of the Storage service. The neighboring ports -1 (9778) and +1 (9780) are also used. 9778: The port used by the Admin service, which receives Meta commands for Storage. 9780: The port used for Raft communication between Storage services. No ws_ip 0.0.0.0 Specifies the IP address for the HTTP service. No ws_http_port 19779 Specifies the port for the HTTP service. No heartbeat_interval_secs 10 Specifies the default heartbeat interval. Make sure the heartbeat_interval_secs values for all services are the same, otherwise NebulaGraph CANNOT work normally. This configuration is measured in seconds. Yes

              Caution

              It is recommended to use a real IP when using IP address. Otherwise, 127.0.0.1/0.0.0.0 cannot be parsed correctly in some cases.

              "},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#raft_configurations","title":"Raft configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications raft_heartbeat_interval_secs 30 Specifies the time to expire the Raft election. The configuration is measured in seconds. Yes raft_rpc_timeout_ms 500 Specifies the time to expire the Raft RPC. The configuration is measured in milliseconds. Yes wal_ttl 14400 Specifies the lifetime of the RAFT WAL. The configuration is measured in seconds. Yes"},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#disk_configurations","title":"Disk configurations","text":"Name Predefined value Description Whether supports runtime dynamic modifications data_path data/storage Specifies the data storage path. Multiple paths are separated with commas. For NebulaGraph of the community edition, one RocksDB instance corresponds to one path. No minimum_reserved_bytes 268435456 Specifies the minimum remaining space of each data storage path. When the value is lower than this standard, the cluster data writing may fail. This configuration is measured in bytes. No rocksdb_batch_size 4096 Specifies the block cache for a batch operation. The configuration is measured in bytes. No rocksdb_block_cache 4 Specifies the block cache for BlockBasedTable. The configuration is measured in megabytes. No disable_page_cache false Enables or disables the operating system's page cache for NebulaGraph. By default, the parameter value is false and page cache is enabled. If the value is set to true, page cache is disabled and sufficient block cache space must be configured for NebulaGraph. No engine_type rocksdb Specifies the engine type. No rocksdb_compression lz4 Specifies the compression algorithm for RocksDB. Optional values are no, snappy, lz4, lz4hc, zlib, bzip2, and zstd.This parameter modifies the compression algorithm for each level. If you want to set different compression algorithms for each level, use the parameter rocksdb_compression_per_level. No rocksdb_compression_per_level \\ Specifies the compression algorithm for each level. The priority is higher than rocksdb_compression. For example, no:no:lz4:lz4:snappy:zstd:snappy.You can also not set certain levels of compression algorithms, for example, no:no:lz4:lz4::zstd, level L4 and L6 use the compression algorithm of rocksdb_compression. No enable_rocksdb_statistics false When set to false, RocksDB statistics is disabled. No rocksdb_stats_level kExceptHistogramOrTimers Specifies the stats level for RocksDB. Optional values are kExceptHistogramOrTimers, kExceptTimers, kExceptDetailedTimers, kExceptTimeForMutex, and kAll. No enable_rocksdb_prefix_filtering true When set to true, the prefix bloom filter for RocksDB is enabled. Enabling prefix bloom filter makes the graph traversal faster but occupies more memory. No enable_rocksdb_whole_key_filtering false When set to true, the whole key bloom filter for RocksDB is enabled. rocksdb_filtering_prefix_length 12 Specifies the prefix length for each key. Optional values are 12 and 16. The configuration is measured in bytes. No enable_partitioned_index_filter false When set to true, it reduces the amount of memory used by the bloom filter. But in some random-seek situations, it may reduce the read performance. This parameter is not predefined in the initial configuration files, if you need to use this parameter, add it manually. No"},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#rocksdb_options","title":"RocksDB options","text":"Name Predefined value Description Whether supports runtime dynamic modifications rocksdb_db_options {} Specifies the RocksDB database options. No rocksdb_column_family_options {\"write_buffer_size\":\"67108864\",\"max_write_buffer_number\":\"4\",\"max_bytes_for_level_base\":\"268435456\"} Specifies the RocksDB column family options. No rocksdb_block_based_table_options {\"block_size\":\"8192\"} Specifies the RocksDB block based table options. No

              The format of the RocksDB option is {\"<option_name>\":\"<option_value>\"}. Multiple options are separated with commas.

              Supported options of rocksdb_db_options and rocksdb_column_family_options are listed as follows.

              • rocksdb_db_options
                max_total_wal_size\ndelete_obsolete_files_period_micros\nmax_background_jobs\nstats_dump_period_sec\ncompaction_readahead_size\nwritable_file_max_buffer_size\nbytes_per_sync\nwal_bytes_per_sync\ndelayed_write_rate\navoid_flush_during_shutdown\nmax_open_files\nstats_persist_period_sec\nstats_history_buffer_size\nstrict_bytes_per_sync\nenable_rocksdb_prefix_filtering\nenable_rocksdb_whole_key_filtering\nrocksdb_filtering_prefix_length\nnum_compaction_threads\nrate_limit\n
              • rocksdb_column_family_options
                write_buffer_size\nmax_write_buffer_number\nlevel0_file_num_compaction_trigger\nlevel0_slowdown_writes_trigger\nlevel0_stop_writes_trigger\ntarget_file_size_base\ntarget_file_size_multiplier\nmax_bytes_for_level_base\nmax_bytes_for_level_multiplier\ndisable_auto_compactions \n

              For more information, see RocksDB official documentation.

              "},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#misc_configurations","title":"Misc configurations","text":"

              Caution

              The configuration snapshot in the following table is different from the snapshot in NebulaGraph. The snapshot here refers to the stock data on the leader when synchronizing Raft.

              Name Predefined value Description Whether supports runtime dynamic modifications query_concurrently true Whether to turn on multi-threaded queries. Enabling it can improve the latency performance of individual queries, but it will reduce the overall throughput under high pressure. Yes auto_remove_invalid_space true After executing DROP SPACE, the specified graph space will be deleted. This parameter sets whether to delete all the data in the specified graph space at the same time. When the value is true, all the data in the specified graph space will be deleted at the same time. Yes num_io_threads 16 The number of network I/O threads used to send RPC requests and receive responses. No num_max_connections 0 Max active connections for all networking threads. 0 means no limit.Max connections for each networking thread = num_max_connections / num_netio_threads No num_worker_threads 32 The number of worker threads for one RPC-based Storage service. No max_concurrent_subtasks 10 The maximum number of concurrent subtasks to be executed by the task manager. No snapshot_part_rate_limit 10485760 The rate limit when the Raft leader synchronizes the stock data with other members of the Raft group. Unit: bytes/s. Yes snapshot_batch_size 1048576 The amount of data sent in each batch when the Raft leader synchronizes the stock data with other members of the Raft group. Unit: bytes. Yes rebuild_index_part_rate_limit 4194304 The rate limit when the Raft leader synchronizes the index data rate with other members of the Raft group during the index rebuilding process. Unit: bytes/s. Yes rebuild_index_batch_size 1048576 The amount of data sent in each batch when the Raft leader synchronizes the index data with other members of the Raft group during the index rebuilding process. Unit: bytes. Yes"},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#memory_tracker_configurations","title":"Memory Tracker configurations","text":"

              Note

              Memory Tracker is a memory management tool designed to monitor and limit memory usage. For large-scale queries, Memory Tracker can prevent Out Of Memory (OOM) issues. If you're using Memory Tracker in a containerized environment, you need to add the relevant configurations to the configuration file of the Storage service.

              1. Create the directory /sys/fs/cgroup/storaged/, and then add and configure the memory.max file under the directory.
              2. Add the following configurations to etc/nebula-storaged.conf.

                --containerized=true\n--cgroup_v2_controllers=/sys/fs/cgroup/graphd/cgroup.controllers\n--cgroup_v2_memory_stat_path=/sys/fs/cgroup/graphd/memory.stat\n--cgroup_v2_memory_max_path=/sys/fs/cgroup/graphd/memory.max\n--cgroup_v2_memory_current_path=/sys/fs/cgroup/graphd/memory.current\n

              For more details, see Memory Tracker: Memory Management Practice in NebulaGraph Database.

              Name Predefined value Description Whether supports runtime dynamic modifications memory_tracker_limit_ratio 0.8 The value of this parameter can be set to (0, 1], 2, and 3.(0, 1]: The percentage of available memory. Formula: Percentage of available memory = Available memory / (Total memory - Reserved memory).When an ongoing query results in memory usage exceeding the configured limit, the query fails and subsequently the memory is released. Note: For the hybrid deployment of a cluster with cloud-based and on-premises nodes, the value of memory_tracker_limit_ratio should be set to a lower value. For example, when the graphd is expected to occupy only 50% of memory, the value can be set to less than 0.5.2: Dynamic Self Adaptive mode. MemoryTracker dynamically adjusts the available memory based on the system's current available memory. Note: This feature is experimental. As memory usage cannot be monitored in real time in dynamic adaptive mode, an OOM error may still occur to handle large memory allocations. 3: Disable MemoryTracker. MemoryTracker only logs memory usage and does not interfere with executions even if the limit is exceeded. Yes memory_tracker_untracked_reserved_memory_mb 50 The reserved memory that is not tracked by the Memory Tracker. Unit: MB. Yes memory_tracker_detail_log false Whether to enable the Memory Tracker log. When the value is true, the Memory Tracker log is generated. Yes memory_tracker_detail_log_interval_ms 60000 The time interval for generating the Memory Tracker log. Unit: Millisecond. memory_tracker_detail_log is true when this parameter takes effect. Yes memory_purge_enabled true Whether to enable the memory purge feature. When the value is true, the memory purge feature is enabled. Yes memory_purge_interval_seconds 10 The time interval for the memory purge feature to purge memory. Unit: Second. This parameter only takes effect if memory_purge_enabled is set to true. Yes"},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#for_super-large_vertices","title":"For super-Large vertices","text":"

              When the query starting from each vertex gets an edge, truncate it directly to avoid too many neighboring edges on the super-large vertex, because a single query occupies too much hard disk and memory. Or you can truncate a certain number of edges specified in the Max_edge_returned_per_vertex parameter. Excess edges will not be returned. This parameter applies to all spaces.

              Property name Default value Description Whether supports runtime dynamic modifications max_edge_returned_per_vertex 2147483647 Specifies the maximum number of edges returned for each dense vertex. Excess edges are truncated and not returned. This parameter is not predefined in the initial configuration files, if you need to use this parameter, add it manually. No"},{"location":"5.configurations-and-logs/1.configurations/4.storage-config/#storage_configurations_for_large_dataset","title":"Storage configurations for large dataset","text":"

              Warning

              One graph space takes up at least about 300 MB of memory.

              When you have a large dataset (in the RocksDB directory) and your memory is tight, we suggest that you set the enable_partitioned_index_filter parameter to true. The performance is affected because RocksDB indexes are cached.

              "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/","title":"Kernel configurations","text":"

              This topic introduces the Kernel configurations in Nebula\u00a0Graph.

              "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#resource_control","title":"Resource control","text":"

              You may run the ulimit command to control the resource threshold. However, the changes made only take effect for the current session or sub-process. To make permanent changes, edit file /etc/security/limits.conf. The configuration is as follows:

              # <domain>     <type>      <item>          <value>\n*              soft         core           unlimited    \n*              hard         core           unlimited   \n*              soft         nofile          130000   \n*              hard         nofile          130000\n

              Note

              The configuration modification takes effect for new sessions.

              The parameter descriptions are as follows.

              Parameter Description domain Control Domain. This parameter can be a user name, a user group name (starting with @), or * to indicate all users. type Control type. This parameter can be soft or hard. soft indicates a soft threshold (the default threshold) for the resource and hard indicates a maximum value that can be set by the user. The ulimit command can be used to increase soft, but not to exceed hard. item Resource types. For example, core limits the size of the core dump file, and nofile limits the maximum number of file descriptors a process can open. value Resource limit value. This parameter can be a number, or unlimited to indicate that there is no limit.

              You can run man limits.conf for more helpful information.

              "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#memory","title":"Memory","text":""},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#vmswappiness","title":"vm.swappiness","text":"

              vm.swappiness specifies the percentage of the available memory before starting swap. The greater the value, the more likely the swap occurs. We recommend that you set it to 0. When set to 0, the page cache is removed first. Note that when vm.swappiness is 0, it does not mean that there is no swap.

              "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#vmmin_free_kbytes","title":"vm.min_free_kbytes","text":"

              vm.min_free_kbytes specifies the minimum number of kilobytes available kept by Linux VM. If you have a large system memory, we recommend that you increase this value. For example, if your physical memory 128GB, set it to 5GB. If the value is not big enough, the system cannot apply for enough continuous physical memory.

              "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#vmmax_map_count","title":"vm.max_map_count","text":"

              vm.max_map_count limits the maximum number of vma (virtual memory area) for a process. The default value is 65530. It is enough for most applications. If your memory application fails because the memory consumption is large, increase the vm.max_map_count value.

              "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#vmdirty_","title":"vm.dirty_*","text":"

              These values control the dirty data cache for the system. For write-intensive scenarios, you can make adjustments based on your needs (throughput priority or delay priority). We recommend that you use the system default value.

              "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#transparent_huge_pages","title":"Transparent Huge Pages","text":"

              Transparent Huge Pages (THP) is a memory management feature of the Linux kernel, which enhances the system's ability to use large pages. In most database systems, Transparent Huge Pages can degrade performance, so it is recommended to disable it.

              Perform the following steps:

              1. Edit the GRUB configuration file /etc/default/grub.

                sudo vi /etc/default/grub\n
              2. Add transparent_hugepage=never to the GRUB_CMDLINE_LINUX option, and then save and exit.

                GRUB_CMDLINE_LINUX=\"... transparent_hugepage=never\"\n
              3. Update the GRUB configuration.

                • For CentOS:

                  sudo grub2-mkconfig -o /boot/grub2/grub.cfg\n
                • For Ubuntu:

                  sudo update-grub\n
              4. Reboot the computer.

                sudo reboot\n

                If you don't want to reboot, you can run the following commands to temporarily disable THP until the next reboot.

                echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled\necho 'never' > /sys/kernel/mm/transparent_hugepage/defrag\n
              "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#networking","title":"Networking","text":""},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#netipv4tcp_slow_start_after_idle","title":"net.ipv4.tcp_slow_start_after_idle","text":"

              The default value of net.ipv4.tcp_slow_start_after_idle is 1. If set, the congestion window is timed out after an idle period. We recommend that you set it to 0, especially for long fat scenarios (high latency and large bandwidth).

              "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#netcoresomaxconn","title":"net.core.somaxconn","text":"

              net.core.somaxconn specifies the maximum number of connection queues listened by the socket. The default value is 128. For scenarios with a large number of burst connections, we recommend that you set it to greater than 1024.

              "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#netipv4tcp_max_syn_backlog","title":"net.ipv4.tcp_max_syn_backlog","text":"

              net.ipv4.tcp_max_syn_backlog specifies the maximum number of TCP connections in the SYN_RECV (semi-connected) state. The setting rule for this parameter is the same as that of net.core.somaxconn.

              "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#netcorenetdev_max_backlog","title":"net.core.netdev_max_backlog","text":"

              net.core.netdev_max_backlog specifies the maximum number of packets. The default value is 1000. We recommend that you increase it to greater than 10,000, especially for 10G network adapters.

              "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#netipv4tcp_keepalive_","title":"net.ipv4.tcp_keepalive_*","text":"

              These values keep parameters alive for TCP connections. For applications that use a 4-layer transparent load balancer, if the idle connection is disconnected unexpectedly, decrease the values of tcp_keepalive_time and tcp_keepalive_intvl.

              "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#netipv4tcp_rmemwmem","title":"net.ipv4.tcp_rmem/wmem","text":"

              net.ipv4.tcp_wmem/rmem specifies the minimum, default, and maximum size of the buffer pool sent/received by the TCP socket. For long fat links, we recommend that you increase the default value to bandwidth (GB) * RTT (ms).

              "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#scheduler","title":"scheduler","text":"

              For SSD devices, we recommend that you set scheduler to noop or none. The path is /sys/block/DEV_NAME/queue/scheduler.

              "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#other_parameters","title":"Other parameters","text":""},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#kernelcore_pattern","title":"kernel.core_pattern","text":"

              we recommend that you set it to core and set kernel.core_uses_pid to 1.

              "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#modify_parameters","title":"Modify parameters","text":""},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#sysctl","title":"sysctl","text":"
              • sysctl <conf_name>

                Checks the current parameter value.

              • sysctl -w <conf_name>=<value>

                Modifies the parameter value. The modification takes effect immediately. The original value is restored after restarting.

              • sysctl -p [<file_path>]

                Loads Linux parameter values \u200b\u200bfrom the specified configuration file. The default path is /etc/sysctl.conf.

              "},{"location":"5.configurations-and-logs/1.configurations/6.kernel-config/#prlimit","title":"prlimit","text":"

              The prlimit command gets and sets process resource limits. You can modify the hard threshold by using it and the sudo command. For example, prlimit --nofile = 130000 --pid = $$ adjusts the maximum number of open files permitted by the current process to 14000. And the modification takes effect immediately. Note that this command is only available in RedHat 7u or higher versions.

              "},{"location":"5.configurations-and-logs/2.log-management/logs/","title":"Runtime logs","text":"

              Runtime logs are provided for DBAs and developers to locate faults when the system fails.

              NebulaGraph uses glog to print runtime logs, uses gflags to control the severity level of the log, and provides an HTTP interface to dynamically change the log level at runtime to facilitate tracking.

              "},{"location":"5.configurations-and-logs/2.log-management/logs/#log_directory","title":"Log directory","text":"

              The default runtime log directory is /usr/local/nebula/logs/.

              If the log directory is deleted while NebulaGraph is running, the log would not continue to be printed. However, this operation will not affect the services. To recover the logs, restart the services.

              "},{"location":"5.configurations-and-logs/2.log-management/logs/#parameter_descriptions","title":"Parameter descriptions","text":"
              • minloglevel: Specifies the minimum level of the log. That is, no logs below this level will be printed. Optional values are 0 (INFO), 1 (WARNING), 2 (ERROR), 3 (FATAL). It is recommended to set it to 0 during debugging and 1 in a production environment. If it is set to 4, NebulaGraph will not print any logs.
              • v: Specifies the detailed level of the log. The larger the value, the more detailed the log is. Optional values are 0, 1, 2, 3.

              The default severity level for the metad, graphd, and storaged logs can be found in their respective configuration files. The default path is /usr/local/nebula/etc/.

              "},{"location":"5.configurations-and-logs/2.log-management/logs/#check_the_severity_level","title":"Check the severity level","text":"

              Check all the flag values (log values included) of the current gflags with the following command.

              $ curl <ws_ip>:<ws_port>/flags\n
              Parameter Description ws_ip The IP address for the HTTP service, which can be found in the configuration files above. The default value is 127.0.0.1. ws_port The port for the HTTP service, which can be found in the configuration files above. The default values are 19559(Meta), 19669(Graph), and 19779(Storage) respectively.

              Examples are as follows:

              • Check the current minloglevel in the Meta service:
                $ curl 127.0.0.1:19559/flags | grep 'minloglevel'\n
              • Check the current v in the Storage service:
                $ curl 127.0.0.1:19779/flags | grep -w 'v'\n
              "},{"location":"5.configurations-and-logs/2.log-management/logs/#change_the_severity_level","title":"Change the severity level","text":"

              Change the severity level of the log with the following command.

              $ curl -X PUT -H \"Content-Type: application/json\" -d '{\"<key>\":<value>[,\"<key>\":<value>]}' \"<ws_ip>:<ws_port>/flags\"\n
              Parameter Description key The type of the log to be changed. For optional values, see Parameter descriptions. value The level of the log. For optional values, see Parameter descriptions. ws_ip The IP address for the HTTP service, which can be found in the configuration files above. The default value is 127.0.0.1. ws_port The port for the HTTP service, which can be found in the configuration files above. The default values are 19559(Meta), 19669(Graph), and 19779(Storage) respectively.

              Examples are as follows:

              $ curl -X PUT -H \"Content-Type: application/json\" -d '{\"minloglevel\":0,\"v\":3}' \"127.0.0.1:19779/flags\" # storaged\n$ curl -X PUT -H \"Content-Type: application/json\" -d '{\"minloglevel\":0,\"v\":3}' \"127.0.0.1:19669/flags\" # graphd\n$ curl -X PUT -H \"Content-Type: application/json\" -d '{\"minloglevel\":0,\"v\":3}' \"127.0.0.1:19559/flags\" # metad\n

              If the log level is changed while NebulaGraph is running, it will be restored to the level set in the configuration file after restarting the service. To permanently modify it, see Configuration files.

              "},{"location":"5.configurations-and-logs/2.log-management/logs/#rocksdb_runtime_logs","title":"RocksDB runtime logs","text":"

              RocksDB runtime logs are usually used to debug RocksDB parameters and stored in /usr/local/nebula/data/storage/nebula/$id/data/LOG. $id is the ID of the example.

              "},{"location":"5.configurations-and-logs/2.log-management/logs/#log_recycling","title":"Log recycling","text":"

              Glog does not inherently support log recycling. To implement this feature, you can either use cron jobs in Linux to regularly remove old log files or use the log management tool, logrotate, to rotate logs for regular archiving and deletion.

              "},{"location":"5.configurations-and-logs/2.log-management/logs/#log_recycling_using_cron_jobs","title":"Log recycling using cron jobs","text":"

              This section provides an example of how to use cron jobs to regularly delete old log files from the Graph service's runtime logs.

              1. In the Graph service configuration file, apply the following settings and restart the service:

                timestamp_in_logfile_name = true\nmax_log_size = 500\n
                • By setting timestamp_in_logfile_name to true, the log file name includes a timestamp, allowing regular deletion of old log files.
                • The max_log_size parameter sets the maximum size of a single log file in MB, such as 500. Once this size is exceeded, a new log file is automatically created. The default value is 1800.
              2. Use the following command to open the cron job editor.

                crontab -e\n
              3. Add a cron job command to the editor to regularly delete old log files.

                * * * * * find <log_path> -name \"<YourProjectName>\" -mtime +7 -delete\n

                Caution

                The find command in the above command should be executed by the root user or a user with sudo privileges.

                • * * * * *: This cron job time field signifies that the task is executed every minute. For other settings, see Cron Expression.
                • <log_path>: The path of the service runtime log file, such as /usr/local/nebula/logs.
                • <YourProjectName>: The log file name, such as nebula-graphd.*.
                • -mtime +7: This deletes log files that are older than 7 days. Alternatively, use -mmin +n to delete log files older than n minutes. For details, see the find command.
                • -delete: This deletes log files that meet the conditions.

                For example, to automatically delete the Graph service runtime log files older than 7 days at 3 o'clock every morning, use:

                0 3 * * * find /usr/local/nebula/logs -name nebula-graphd.* -mtime +7 -delete\n
              4. Save the cron job and exit the editor.

              "},{"location":"5.configurations-and-logs/2.log-management/logs/#log_recycling_using_logrotate","title":"Log recycling using logrotate","text":"

              Logrotate is a tool that can rotate specified log files for archiving and recycling.

              Note

              You must be the root user or a user with sudo privileges to install or run logrotate.

              This section provides an example of how to use logrotate to manage the Graph service's INFO level log file (/usr/local/nebula/logs/nebula-graphd.INFO.impl).

              1. In the Graph service configuration file, set timestamp_in_logfile_name to false so that the logrotate tool can recognize the log file name. Then, restart the service.

                timestamp_in_logfile_name = false\n
              2. Install logrotate.

                • For Debian/Ubuntu:

                  sudo apt-get install logrotate\n
                • For CentOS/RHEL:

                  sudo yum install logrotate\n
              3. Create a logrotate configuration file, add log rotation rules, and save the configuration file.

                In the /etc/logrotate.d directory, create a new logrotate configuration file nebula-graphd.INFO.

                sudo vim /etc/logrotate.d/nebula-graphd.INFO\n

                Then, add the following content:

                # The absolute path of the log file needs to be configured\n# And the file name cannot be a symbolic link file, such as `nebula-graph.INFO`\n/usr/local/nebula/logs/nebula-graphd.INFO.impl {\n    daily\n    rotate 2\n    copytruncate\n    nocompress\n    missingok\n    notifempty\n    create 644 root root\n    dateext\n    dateformat .%Y-%m-%d-%s\n    maxsize 1k\n}\n
                Parameter Description daily Rotate the log daily. Other available time units include hourly, daily, weekly, monthly, and yearly. rotate 2 Keep the most recent 2 log files before deleting the older one. copytruncate Copy the current log file and then truncate it, ensuring no disruption to the logging process. nocompress Do not compress the old log files. missingok Do not report errors if the log file is missing. notifempty Do not rotate the log file if it's empty. create 644 root root Create a new log file with the specified permissions and ownership. dateext Add a date extension to the log file name. The default is the current date in the format -%Y%m%d. You can extend this using the dateformat option. dateformat .%Y-%m-%d-%s This must follow immediately after dateext and defines the file name after log rotation. Before V3.9.0, only %Y, %m, %d, and %s parameters were supported. Starting from V3.9.0, the %H parameter is also supported. maxsize 1k Rotate the log when it exceeds 1 kilobyte (1024 bytes) in size or when the specified time unit (e.g., daily) passes. You can use size units like k and M, with the default unit being bytes.

                Modify the parameters in the configuration file according to actual needs. For more information about parameter configuration, see logrotate.

              4. Test the logrotate configuration.

                To verify whether the logrotate configuration is correct, use the following command for testing.

                sudo logrotate --debug /etc/logrotate.d/nebula-graphd.INFO\n
              5. Execute logrotate.

                Although logrotate is typically executed automatically by cron jobs, you can manually execute the following command to perform log rotation immediately.

                sudo logrotate -fv /etc/logrotate.d/nebula-graphd.INFO\n

                -fv: f stands for forced execution, v stands for verbose output.

              6. Verify the log rotation results.

                After log rotation, new log files are found in the /usr/local/nebula/logs directory, such as nebula-graphd.INFO.impl.2024-01-04-1704338204. The original log content is cleared, but the file is retained for new log entries. When the number of log files exceeds the value set by rotate, the oldest log file is deleted.

                For example, rotate2` means keeping the 2 most recently generated log files. When the number of log files exceeds 2, the oldest log file is deleted.

                [test@test logs]$ ll\n-rw-r--r-- 1 root root        0 Jan  4 11:18 nebula-graphd.INFO.impl \n-rw-r--r-- 1 root root     6894 Jan  4 11:16 nebula-graphd.INFO.impl.2024-01-04-1704338204 # This file is deleted when a new log file is generated\n-rw-r--r-- 1 root root      222 Jan  4 11:18 nebula-graphd.INFO.impl.2024-01-04-1704338287\n[test@test logs]$ ll\n-rw-r--r-- 1 root root        0 Jan  4 11:18 nebula-graphd.INFO.impl\n-rw-r--r-- 1 root root      222 Jan  4 11:18 nebula-graphd.INFO.impl.2024-01-04-1704338287\n-rw-r--r-- 1 root root      222 Jan  4 11:18 nebula-graphd.INFO.impl.2024-01-04-1704338339 # The new log file is generated\n

              If you need to rotate multiple log files, create multiple configuration files in the /etc/logrotate.d directory, with each configuration file corresponding to a log file. For example, to rotate the INFO level log file and the WARNING level log file of the Meta service, create two configuration files nebula-metad.INFO and nebula-metad.WARNING, and add log rotation rules in them respectively.

              "},{"location":"6.monitor-and-metrics/1.query-performance-metrics/","title":"Query NebulaGraph metrics","text":"

              NebulaGraph supports querying the monitoring metrics through HTTP ports.

              "},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#metrics_structure","title":"Metrics structure","text":"

              Each metric of NebulaGraph consists of three fields: name, type, and time range. The fields are separated by periods, for example, num_queries.sum.600. Different NebulaGraph services (Graph, Storage, or Meta) support different metrics. The detailed description is as follows.

              Field Example Description Metric name num_queries Indicates the function of the metric. Metric type sum Indicates how the metrics are collected. Supported types are SUM, AVG, RATE, and the P-th sample quantiles such as P75, P95, P99, and P999. Time range 600 The time range in seconds for the metric collection. Supported values are 5, 60, 600, and 3600, representing the last 5 seconds, 1 minute, 10 minutes, and 1 hour."},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#query_metrics_over_http","title":"Query metrics over HTTP","text":""},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#syntax","title":"Syntax","text":"
              curl -G \"http://<host>:<port>/stats?stats=<metric_name_list> [&format=json]\"\n
              Parameter Description host The IP (or hostname) of the server. You can find it in the configuration file in the installation directory. port The HTTP port of the server. You can find it in the configuration file in the installation directory. The default ports are 19559 (Meta), 19669 (Graph), and 19779 (Storage). metric_name_list The metrics names. Multiple metrics are separated by commas (,). &format=json Optional. Returns the result in the JSON format.

              Note

              If NebulaGraph is deployed with Docker Compose, run docker-compose ps to check the ports that are mapped from the service ports inside of the container and then query through them.

              "},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#query_a_single_metric","title":"Query a single metric","text":"

              Query the query number in the last 10 minutes in the Graph Service.

              $ curl -G \"http://192.168.8.40:19669/stats?stats=num_queries.sum.600\"\nnum_queries.sum.600=400\n
              "},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#query_multiple_metrics","title":"Query multiple metrics","text":"

              Query the following metrics together:

              • The average heartbeat latency in the last 1 minute.
              • The average latency of the slowest 1% heartbeats, i.e., the P99 heartbeats, in the last 10 minutes.

                $ curl -G \"http://192.168.8.40:19559/stats?stats=heartbeat_latency_us.avg.60,heartbeat_latency_us.p99.600\"\nheartbeat_latency_us.avg.60=281\nheartbeat_latency_us.p99.600=985\n
              "},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#return_a_json_result","title":"Return a JSON result.","text":"

              Query the number of new vertices in the Storage Service in the last 10 minutes and return the result in the JSON format.

              $ curl -G \"http://192.168.8.40:19779/stats?stats=num_add_vertices.sum.600&format=json\"\n[{\"value\":1,\"name\":\"num_add_vertices.sum.600\"}]\n
              "},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#query_all_metrics_in_a_service","title":"Query all metrics in a service.","text":"

              If no metric is specified in the query, NebulaGraph returns all metrics in the service.

              $ curl -G \"http://192.168.8.40:19559/stats\"\nheartbeat_latency_us.avg.5=304\nheartbeat_latency_us.avg.60=308\nheartbeat_latency_us.avg.600=299\nheartbeat_latency_us.avg.3600=285\nheartbeat_latency_us.p75.5=652\nheartbeat_latency_us.p75.60=669\nheartbeat_latency_us.p75.600=651\nheartbeat_latency_us.p75.3600=642\nheartbeat_latency_us.p95.5=930\nheartbeat_latency_us.p95.60=963\nheartbeat_latency_us.p95.600=933\nheartbeat_latency_us.p95.3600=929\nheartbeat_latency_us.p99.5=986\nheartbeat_latency_us.p99.60=1409\nheartbeat_latency_us.p99.600=989\nheartbeat_latency_us.p99.3600=986\nnum_heartbeats.rate.5=0\nnum_heartbeats.rate.60=0\nnum_heartbeats.rate.600=0\nnum_heartbeats.rate.3600=0\nnum_heartbeats.sum.5=2\nnum_heartbeats.sum.60=40\nnum_heartbeats.sum.600=394\nnum_heartbeats.sum.3600=2364\n...\n
              "},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#space-level_metrics","title":"Space-level metrics","text":"

              The Graph service supports a set of space-level metrics that record the information of different graph spaces separately.

              Space-level metrics can be queried only by querying all metrics. For example, run curl -G \"http://192.168.8.40:19559/stats\" to show all metrics. The returned result contains the graph space name in the form of '{space=space_name}', such as num_active_queries{space=basketballplayer}.sum.5=0.

              Caution

              To enable space-level metrics, set the value of enable_space_level_metrics to true in the Graph service configuration file before starting NebulaGraph. For details about how to modify the configuration, see Configuration Management.

              "},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#metric_description","title":"Metric description","text":""},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#graph","title":"Graph","text":"Parameter Description num_active_queries The number of changes in the number of active queries. Formula: The number of started queries minus the number of finished queries within a specified time. num_active_sessions The number of changes in the number of active sessions. Formula: The number of logged in sessions minus the number of logged out sessions within a specified time.For example, when querying num_active_sessions.sum.5, if there were 10 sessions logged in and 30 sessions logged out in the last 5 seconds, the value of this metric is -20 (10-30). num_aggregate_executors The number of executions for the Aggregation operator. num_auth_failed_sessions_bad_username_password The number of sessions where authentication failed due to incorrect username and password. num_auth_failed_sessions_out_of_max_allowed The number of sessions that failed to authenticate logins because the value of the parameter FLAG_OUT_OF_MAX_ALLOWED_CONNECTIONS was exceeded. num_auth_failed_sessions The number of sessions in which login authentication failed. num_indexscan_executors The number of executions for index scan operators. num_killed_queries The number of killed queries. num_opened_sessions The number of sessions connected to the server. num_queries The number of queries. num_query_errors_leader_changes The number of the raft leader changes due to query errors. num_query_errors The number of query errors. num_reclaimed_expired_sessions The number of expired sessions actively reclaimed by the server. num_rpc_sent_to_metad_failed The number of failed RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_metad The number of RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_storaged_failed The number of failed RPC requests that the Graphd service sent to the Storaged service. num_rpc_sent_to_storaged The number of RPC requests that the Graphd service sent to the Storaged service. num_sentences The number of statements received by the Graphd service. num_slow_queries The number of slow queries. num_sort_executors The number of executions for the Sort operator. optimizer_latency_us The latency of executing optimizer statements. query_latency_us The latency of queries. slow_query_latency_us The latency of slow queries. num_queries_hit_memory_watermark The number of queries reached the memory watermark. resp_part_completeness The completeness of the partial success. You need to set accept_partial_success to true in the graph configuration first."},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#meta","title":"Meta","text":"Parameter Description commit_log_latency_us The latency of committing logs in Raft. commit_snapshot_latency_us The latency of committing snapshots in Raft. heartbeat_latency_us The latency of heartbeats. num_heartbeats The number of heartbeats. num_raft_votes The number of votes in Raft. transfer_leader_latency_us The latency of transferring the raft leader. num_agent_heartbeats The number of heartbeats for the AgentHBProcessor. agent_heartbeat_latency_us The latency of the AgentHBProcessor. replicate_log_latency_us The latency of replicating the log record to most nodes by Raft. num_send_snapshot The number of times that Raft sends snapshots to other nodes. append_log_latency_us The latency of replicating the log record to a single node by Raft. append_wal_latency_us The Raft write latency for a single WAL. num_grant_votes The number of times that Raft votes for other nodes. num_start_elect The number of times that Raft starts an election."},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#storage","title":"Storage","text":"Parameter Description add_edges_latency_us The latency of adding edges. add_vertices_latency_us The latency of adding vertices. commit_log_latency_us The latency of committing logs in Raft. commit_snapshot_latency_us The latency of committing snapshots in Raft. delete_edges_latency_us The latency of deleting edges. delete_vertices_latency_us The latency of deleting vertices. get_neighbors_latency_us The latency of querying neighbor vertices. get_dst_by_src_latency_us The latency of querying the destination vertex by the source vertex. num_get_prop The number of executions for the GetPropProcessor. num_get_neighbors_errors The number of execution errors for the GetNeighborsProcessor. num_get_dst_by_src_errors The number of execution errors for the GetDstBySrcProcessor. get_prop_latency_us The latency of executions for the GetPropProcessor. num_edges_deleted The number of deleted edges. num_edges_inserted The number of inserted edges. num_raft_votes The number of votes in Raft. num_rpc_sent_to_metad_failed The number of failed RPC requests that the Storage service sent to the Meta service. num_rpc_sent_to_metad The number of RPC requests that the Storaged service sent to the Metad service. num_tags_deleted The number of deleted tags. num_vertices_deleted The number of deleted vertices. num_vertices_inserted The number of inserted vertices. transfer_leader_latency_us The latency of transferring the raft leader. lookup_latency_us The latency of executions for the LookupProcessor. num_lookup_errors The number of execution errors for the LookupProcessor. num_scan_vertex The number of executions for the ScanVertexProcessor. num_scan_vertex_errors The number of execution errors for the ScanVertexProcessor. update_edge_latency_us The latency of executions for the UpdateEdgeProcessor. num_update_vertex The number of executions for the UpdateVertexProcessor. num_update_vertex_errors The number of execution errors for the UpdateVertexProcessor. kv_get_latency_us The latency of executions for the Getprocessor. kv_put_latency_us The latency of executions for the PutProcessor. kv_remove_latency_us The latency of executions for the RemoveProcessor. num_kv_get_errors The number of execution errors for the GetProcessor. num_kv_get The number of executions for the GetProcessor. num_kv_put_errors The number of execution errors for the PutProcessor. num_kv_put The number of executions for the PutProcessor. num_kv_remove_errors The number of execution errors for the RemoveProcessor. num_kv_remove The number of executions for the RemoveProcessor. forward_tranx_latency_us The latency of transmission. scan_edge_latency_us The latency of executions for the ScanEdgeProcessor. num_scan_edge_errors The number of execution errors for the ScanEdgeProcessor. num_scan_edge The number of executions for the ScanEdgeProcessor. scan_vertex_latency_us The latency of executions for the ScanVertexProcessor. num_add_edges The number of times that edges are added. num_add_edges_errors The number of errors when adding edges. num_add_vertices The number of times that vertices are added. num_start_elect The number of times that Raft starts an election. num_add_vertices_errors The number of errors when adding vertices. num_delete_vertices_errors The number of errors when deleting vertices. append_log_latency_us The latency of replicating the log record to a single node by Raft. num_grant_votes The number of times that Raft votes for other nodes. replicate_log_latency_us The latency of replicating the log record to most nodes by Raft. num_delete_tags The number of times that tags are deleted. num_delete_tags_errors The number of errors when deleting tags. num_delete_edges The number of edge deletions. num_delete_edges_errors The number of errors when deleting edges num_send_snapshot The number of times that snapshots are sent. update_vertex_latency_us The latency of executions for the UpdateVertexProcessor. append_wal_latency_us The Raft write latency for a single WAL. num_update_edge The number of executions for the UpdateEdgeProcessor. delete_tags_latency_us The latency of deleting tags. num_update_edge_errors The number of execution errors for the UpdateEdgeProcessor. num_get_neighbors The number of executions for the GetNeighborsProcessor. num_get_dst_by_src The number of executions for the GetDstBySrcProcessor. num_get_prop_errors The number of execution errors for the GetPropProcessor. num_delete_vertices The number of times that vertices are deleted. num_lookup The number of executions for the LookupProcessor. num_sync_data The number of times the Storage service synchronizes data from the Drainer. num_sync_data_errors The number of errors that occur when the Storage service synchronizes data from the Drainer. sync_data_latency_us The latency of the Storage service synchronizing data from the Drainer."},{"location":"6.monitor-and-metrics/1.query-performance-metrics/#graph_space","title":"Graph space","text":"

              Note

              Space-level metrics are created dynamically, so that only when the behavior is triggered in the graph space, the corresponding metric is created and can be queried by the user.

              Parameter Description num_active_queries The number of queries currently being executed. num_queries The number of queries. num_sentences The number of statements received by the Graphd service. optimizer_latency_us The latency of executing optimizer statements. query_latency_us The latency of queries. num_slow_queries The number of slow queries. num_query_errors The number of query errors. num_query_errors_leader_changes The number of raft leader changes due to query errors. num_killed_queries The number of killed queries. num_aggregate_executors The number of executions for the Aggregation operator. num_sort_executors The number of executions for the Sort operator. num_indexscan_executors The number of executions for index scan operators. num_auth_failed_sessions_bad_username_password The number of sessions where authentication failed due to incorrect username and password. num_auth_failed_sessions The number of sessions in which login authentication failed. num_opened_sessions The number of sessions connected to the server. num_queries_hit_memory_watermark The number of queries reached the memory watermark. num_reclaimed_expired_sessions The number of expired sessions actively reclaimed by the server. num_rpc_sent_to_metad_failed The number of failed RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_metad The number of RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_storaged_failed The number of failed RPC requests that the Graphd service sent to the Storaged service. num_rpc_sent_to_storaged The number of RPC requests that the Graphd service sent to the Storaged service. slow_query_latency_us The latency of slow queries."},{"location":"6.monitor-and-metrics/2.rocksdb-statistics/","title":"RocksDB statistics","text":"

              NebulaGraph uses RocksDB as the underlying storage. This topic describes how to collect and show the RocksDB statistics of NebulaGraph.

              "},{"location":"6.monitor-and-metrics/2.rocksdb-statistics/#enable_rocksdb","title":"Enable RocksDB","text":"

              By default, the function of RocksDB statistics is disabled. To enable RocksDB statistics, you need to:

              1. Modify the --enable_rocksdb_statistics parameter as true in the nebula-storaged.conf file. The default path of the configuration file is /use/local/nebula/etc.

              2. Restart the service to make the modification valid.

              "},{"location":"6.monitor-and-metrics/2.rocksdb-statistics/#get_rocksdb_statistics","title":"Get RocksDB statistics","text":"

              Users can use the built-in HTTP service in the storage service to get the following types of statistics. Results in the JSON format are supported.

              • All RocksDB statistics.
              • Specified RocksDB statistics.
              "},{"location":"6.monitor-and-metrics/2.rocksdb-statistics/#examples","title":"Examples","text":"

              Use the following command to get all RocksDB statistics:

              curl -L \"http://${storage_ip}:${port}/rocksdb_stats\"\n

              For example:

              curl -L \"http://172.28.2.1:19779/rocksdb_stats\"\n\nrocksdb.blobdb.blob.file.bytes.read=0\nrocksdb.blobdb.blob.file.bytes.written=0\nrocksdb.blobdb.blob.file.bytes.synced=0\n...\n

              Use the following command to get specified RocksDB statistics:

              curl -L \"http://${storage_ip}:${port}/rocksdb_stats?stats=${stats_name}\"\n

              For example, use the following command to get the information of rocksdb.bytes.read and rocksdb.block.cache.add.

              curl -L \"http://172.28.2.1:19779/rocksdb_stats?stats=rocksdb.bytes.read,rocksdb.block.cache.add\"\n\nrocksdb.block.cache.add=14\nrocksdb.bytes.read=1632\n

              Use the following command to get specified RocksDB statistics in the JSON format:

              curl -L \"http://${storage_ip}:${port}/rocksdb_stats?stats=${stats_name}&format=json\"\n

              For example, use the following command to get the information of rocksdb.bytes.read and rocksdb.block.cache.add and return the results in the JSON format.

              curl -L \"http://172.28.2.1:19779/rocksdb_stats?stats=rocksdb.bytes.read,rocksdb.block.cache.add&format=json\"\n\n[\n  {\n    \"rocksdb.block.cache.add\": 1\n  },\n  {\n    \"rocksdb.bytes.read\": 160\n  }\n]\n

              "},{"location":"7.data-security/4.ssl/","title":"SSL encryption","text":"

              NebulaGraph supports SSL encrypted transfers between the Client, Graph Service, Meta Service, and Storage Service, and this topic describes how to set up SSL encryption.

              "},{"location":"7.data-security/4.ssl/#precaution","title":"Precaution","text":"

              Enabling SSL encryption will slightly affect the performance, such as causing operation latency.

              "},{"location":"7.data-security/4.ssl/#certificate_modes","title":"Certificate modes","text":"

              To use SSL encryption, SSL certificates are required. NebulaGraph supports two certificate modes.

              • Self-signed certificate mode

                A certificate that is generated by the server itself and signed by itself. In the self-signed certificate mode, the server needs to generate its own SSL certificate and key, and then use its own private key to sign the certificate. It is suitable for building secure communications for systems and applications within a LAN.

              • CA-signed certificate mode

                A certificate granted by a trusted third-party Certificate Authority (CA). In the CA signed certificate mode, the server needs to apply for an SSL certificate from a trusted CA and ensure the authenticity and trustworthiness of the certificate through the auditing and signing of the certificate authority center. It is suitable for public network environment, especially for websites, e-commerce and other occasions that need to protect user information security.

              "},{"location":"7.data-security/4.ssl/#authentication_policies","title":"Authentication policies","text":"

              Policies for the NebulaGraph community edition.

              Scene TLS External device access to Graph Modify the Graph configuration file to add the following parameters:--enable_graph_ssl = true --ca_path=xxxxxx--cert_path=xxxxxx--key_path=xxxxxx Graph access Meta In the Graph/Meta configuration file, add the following parameters:--enable_meta_ssl = true--ca_path=xxxxxx--cert_path=xxxxxx--key_path=xxxxxx Graph access StorageMeta access Storage In the Graph/Meta/Storage configuration file, add the following parameters:--enable_storage_ssl = true--ca_path=xxxxxx--cert_path=xxxxxx--key_path=xxxxxx Graph access Meta/StorageMeta access Storage In the Graph/Meta/Storage configuration file, add the following parameters:--enable_meta_ssl = true--enable_storage_ssl = true--ca_path=xxxxxx--cert_path=xxxxxx--key_path=xxxxxx External device access to GraphGraph access Meta/StorageMeta access Storage In the Graph/Meta/Storage configuration file, add the following parameters:--enable_ssl = true--ca_path=xxxxxx--cert_path=xxxxxx--key_path=xxxxxx

              The parameters are described below.

              Parameter Default value Description cert_path - The path to the SSL public key certificate. This certificate is usually a .pem or .crt file, which is used to prove the identity of the server side, and contains information such as the public key, certificate owner, digital signature, and so on. key_path - The path to the SSL key. The SSL key is usually a .key file. password_path - (Optional) The path to the password file for the SSL key. Some SSL keys are encrypted and require a corresponding password to decrypt. We need to store the password in a separate file and use this parameter to specify the path to the password file. ca_path - The path to the SSL root certificate. The root certificate is a special SSL certificate that is considered the highest level in the SSL trust chain and is used to validate and authorize other SSL certificates. enable_ssl false Whether to enable SSL encryption in all services. only. enable_graph_ssl false Whether to enable SSL encryption in the Graph service only. enable_meta_ssl false Whether to enable SSL encryption in the Meta service only. enable_storage_ssl false Whether to enable SSL encryption in the Storage service only."},{"location":"7.data-security/4.ssl/#example_of_tls","title":"Example of TLS","text":"
              1. For example, using self-signed certificates and TLS for data transfers between the client NebulaGraph Python, the Graph service, the Meta service, and the Storage service. You need to set up all three Graph/Meta/Storage configuration files as follows:

                --enable_ssl=true\n--ca_path=xxxxxx\n--cert_path=xxxxxx\n--key_path=xxxxxx\n
              2. When the changes are complete, restart these services to make the configuration take effect.

              3. To connect to the Graph service using NebulaGraph Python, you need to set up a secure socket and add a trusted CA. For code examples, see nebula-test-run.py.

              "},{"location":"7.data-security/1.authentication/1.authentication/","title":"Authentication","text":"

              NebulaGraph replies on local authentication to implement access control.

              NebulaGraph creates a session when a client connects to it. The session stores information about the connection, including the user information. If the authentication system is enabled, the session will be mapped to corresponding users.

              Note

              By default, the authentication is disabled and NebulaGraph allows connections with the username root and any password.

              "},{"location":"7.data-security/1.authentication/1.authentication/#local_authentication","title":"Local authentication","text":"

              Local authentication indicates that usernames and passwords are stored locally on the server, with the passwords encrypted. Users will be authenticated when trying to visit NebulaGraph.

              "},{"location":"7.data-security/1.authentication/1.authentication/#enable_local_authentication","title":"Enable local authentication","text":"
              1. Modify the nebula-graphd.conf file (/usr/local/nebula/etc/ is the default path) to set the following parameters:

                • --enable_authorize: Set its value to true to enable authentication.

                  Note

                  • By default, the authentication is disabled and NebulaGraph allows connections with the username root and any password.
                  • You can use the username root and password nebula to log into NebulaGraph after enabling local authentication. This account has the build-in God role. For more information about roles, see Roles and privileges.
                • --failed_login_attempts: This parameter is optional, and you need to add this parameter manually. Specify the attempts of continuously entering incorrect passwords for a single Graph service. When the number exceeds the limitation, your account will be locked. For multiple Graph services, the allowed attempts are number of services * failed_login_attempts.
                • --password_lock_time_in_secs: This parameter is optional, and you need to add this parameter manually. Specify the time how long your account is locked after multiple incorrect password entries are entered. Unit: second.
              2. Restart the NebulaGraph services. For how to restart, see Manage NebulaGraph services.

              "},{"location":"7.data-security/1.authentication/2.management-user/","title":"User management","text":"

              User management is an indispensable part of NebulaGraph access control. This topic describes how to manage users and roles.

              After enabling authentication, only valid users can connect to NebulaGraph and access the resources according to the user roles.

              Note

              • By default, the authentication is disabled. NebulaGraph allows connections with the username root and any password.
              • Once the role of a user is modified, the user has to re-login to make the new role takes effect.
              "},{"location":"7.data-security/1.authentication/2.management-user/#create_user","title":"CREATE USER","text":"

              The root user with the GOD role can run CREATE USER to create a new user.

              • Syntax

                CREATE USER [IF NOT EXISTS] <user_name> [WITH PASSWORD '<password>'];\n
                • IF NOT EXISTS: Detects if the user name exists. The user will be created only if the user name does not exist.
                • user_name: Sets the name of the user. The maximum length is 16 characters.
                • password: Sets the password of the user. The default password is the empty string (''). The maximum length is 24 characters.
              • Example

                nebula> CREATE USER user1 WITH PASSWORD 'nebula';\nnebula> SHOW USERS;\n+---------+-------------------------------+\n| Account | IP Whitelist                  |\n+---------+-------------------------------+\n| \"root\"  | \"\"                            |\n| \"user1\" | \"\"                            |\n+---------+-------------------------------+\n
              "},{"location":"7.data-security/1.authentication/2.management-user/#grant_role","title":"GRANT ROLE","text":"

              Users with the GOD role or the ADMIN role can run GRANT ROLE to assign a built-in role in a graph space to a user. For more information about NebulaGraph built-in roles, see Roles and privileges.

              • Syntax

                GRANT ROLE <role_type> ON <space_name> TO <user_name>;\n
              • Example

                nebula> GRANT ROLE USER ON basketballplayer TO user1;\n
              "},{"location":"7.data-security/1.authentication/2.management-user/#revoke_role","title":"REVOKE ROLE","text":"

              Users with the GOD role or the ADMIN role can run REVOKE ROLE to revoke the built-in role of a user in a graph space. For more information about NebulaGraph built-in roles, see Roles and privileges.

              • Syntax

                REVOKE ROLE <role_type> ON <space_name> FROM <user_name>;\n
              • Example

                nebula> REVOKE ROLE USER ON basketballplayer FROM user1;\n
              "},{"location":"7.data-security/1.authentication/2.management-user/#describe_user","title":"DESCRIBE USER","text":"

              Users can run DESCRIBE USER to list the roles for a specified user.

              • Syntax

                DESCRIBE USER <user_name>;\nDESC USER <user_name>;\n
              • Example

                nebula> DESCRIBE USER user1;\n+---------+--------------------+\n| role    | space              |\n+---------+--------------------+\n| \"ADMIN\" | \"basketballplayer\" |\n+---------+--------------------+\n
              "},{"location":"7.data-security/1.authentication/2.management-user/#show_roles","title":"SHOW ROLES","text":"

              Users can run SHOW ROLES to list the roles in a graph space.

              • Syntax

                SHOW ROLES IN <space_name>;\n
              • Example

                nebula> SHOW ROLES IN basketballplayer;\n+---------+-----------+\n| Account | Role Type |\n+---------+-----------+\n| \"user1\" | \"ADMIN\"   |\n+---------+-----------+\n
              "},{"location":"7.data-security/1.authentication/2.management-user/#change_password","title":"CHANGE PASSWORD","text":"

              Users can run CHANGE PASSWORD to set a new password for a user. The old password is needed when setting a new one.

              • Syntax

                CHANGE PASSWORD <user_name> FROM '<old_password>' TO '<new_password>';\n
              • Example

                nebula> CHANGE PASSWORD user1 FROM 'nebula' TO 'nebula123';\n
              "},{"location":"7.data-security/1.authentication/2.management-user/#alter_user","title":"ALTER USER","text":"

              The root user with the GOD role can run ALTER USER to set a new password. The old password is not needed when altering the user.

              • Syntax

                ALTER USER <user_name> WITH PASSWORD '<password>';\n
                - Example

                nebula> ALTER USER user2 WITH PASSWORD 'nebula';\n
              "},{"location":"7.data-security/1.authentication/2.management-user/#drop_user","title":"DROP USER","text":"

              The root user with the GOD role can run DROP USER to remove a user.

              Note

              Removing a user does not close the current session of the user, and the user role still takes effect in the session until the session is closed.

              • Syntax

                DROP USER [IF EXISTS] <user_name>;\n
              • Example

                nebula> DROP USER user1;\n
              "},{"location":"7.data-security/1.authentication/2.management-user/#show_users","title":"SHOW USERS","text":"

              The root user with the GOD role can run SHOW USERS to list all the users.

              • Syntax

                SHOW USERS;\n
              • Example

                nebula> SHOW USERS;\n+---------+-----------------+\n| Account | IP Whitelist    |\n+---------+-----------------+\n| \"root\"  | \"\"              |\n| \"user1\" | \"\"              |\n| \"user2\" | \"192.168.10.10\" |\n+---------+-----------------+\n
              "},{"location":"7.data-security/1.authentication/3.role-list/","title":"Roles and privileges","text":"

              A role is a collection of privileges. You can assign a role to a user for access control.

              "},{"location":"7.data-security/1.authentication/3.role-list/#built-in_roles","title":"Built-in roles","text":"

              NebulaGraph does not support custom roles, but it has multiple built-in roles:

              • GOD

                • GOD is the original role with all privileges not limited to graph spaces. It is similar to root in Linux and administrator in Windows.
                • When the Meta Service is initialized, the one and only GOD role user root is automatically created with the password nebula.

                Caution

                Modify the password for root timely for security.

                • When the --enable_authorize parameter in the nebula-graphd.conf file (the default directory is /usr/local/nebula/etc/) is set to true:

                  • One cluster can only have one user with the GOD role. This user can manage all graph spaces in a cluster.
                  • Manual authorization of the God role is not supported. Only the root user with the default God role can be used.
              • ADMIN

                • An ADMIN role can read and write both the Schema and the data in a specific graph space.
                • An ADMIN role of a graph space can grant DBA, USER, and GUEST roles in the graph space to other users.

                  Note

                  Only roles lower than ADMIN can be authorized to other users.

              • DBA

                • A DBA role can read and write both the Schema and the data in a specific graph space.
                • A DBA role of a graph space CANNOT grant roles to other users.
              • USER

                • A USER role can read and write data in a specific graph space.
                • The Schema information is read-only to the USER roles in a graph space.
              • GUEST
                • A GUEST role can only read the Schema and the data in a specific graph space.

              Note

              • NebulaGraph does not support custom roles. Users can only use the default built-in roles.
              • A user can have only one role in a graph space. For authenticated users, see User management.
              "},{"location":"7.data-security/1.authentication/3.role-list/#role_privileges_and_allowed_ngql","title":"Role privileges and allowed nGQL","text":"

              The privileges of roles and the nGQL statements that each role can use are listed as follows.

              Privilege God Admin DBA User Guest Allowed nGQL Read space Y Y Y Y Y USE, DESCRIBE SPACE Read schema Y Y Y Y Y DESCRIBE TAG, DESCRIBE EDGE, DESCRIBE TAG INDEX, DESCRIBE EDGE INDEX Write schema Y Y Y Y CREATE TAG, ALTER TAG, CREATE EDGE, ALTER EDGE, DROP TAG, DELETE TAG, DROP EDGE, CREATE TAG INDEX, CREATE EDGE INDEX, DROP TAG INDEX, DROP EDGE INDEX Write user Y CREATE USER, DROP USER, ALTER USER Write role Y Y GRANT, REVOKE Read data Y Y Y Y Y GO, SET, PIPE, MATCH, ASSIGNMENT, LOOKUP, YIELD, ORDER BY, FETCH VERTICES, Find, FETCH EDGES, FIND PATH, LIMIT, GROUP BY, RETURN Write data Y Y Y Y INSERT VERTEX, UPDATE VERTEX, INSERT EDGE, UPDATE EDGE, DELETE VERTEX, DELETE EDGES, DELETE TAG Show operations Y Y Y Y Y SHOW, CHANGE PASSWORD Job Y Y Y Y SUBMIT JOB COMPACT, SUBMIT JOB FLUSH, SUBMIT JOB STATS, STOP JOB, RECOVER JOB, BUILD TAG INDEX, BUILD EDGE INDEX,INGEST, DOWNLOAD Write space Y CREATE SPACE, DROP SPACE, CREATE SNAPSHOT, DROP SNAPSHOT, BALANCE, CONFIG

              Caution

              • The results of SHOW operations are limited to the role of a user. For example, all users can run SHOW SPACES, but the results only include the graph spaces that the users have privileges.
              • Only the GOD role can run SHOW USERS and SHOW SNAPSHOTS.
              "},{"location":"8.service-tuning/2.graph-modeling/","title":"Graph data modeling suggestions","text":"

              This topic provides general suggestions for modeling data in NebulaGraph.

              Note

              The following suggestions may not apply to some special scenarios. In these cases, find help in the NebulaGraph community.

              "},{"location":"8.service-tuning/2.graph-modeling/#model_for_performance","title":"Model for performance","text":"

              There is no perfect method to model in Nebula\u00a0Graph. Graph modeling depends on the questions that you want to know from the data. Your data drives your graph model. Graph data modeling is intuitive and convenient. Create your data model based on your business model. Test your model and gradually optimize it to fit your business. To get better performance, you can change or re-design your model multiple times.

              "},{"location":"8.service-tuning/2.graph-modeling/#design_and_evaluate_the_most_important_queries","title":"Design and evaluate the most important queries","text":"

              Usually, various types of queries are validated in test scenarios to assess the overall capabilities of the system. However, in most production scenarios, there are not many types of frequently used queries. You can optimize the data model based on key queries selected according to the Pareto (80/20) principle.

              "},{"location":"8.service-tuning/2.graph-modeling/#full-graph_scanning_avoidance","title":"Full-graph scanning avoidance","text":"

              Graph traversal can be performed after one or more vertices/edges are located through property indexes or VIDs. But for some query patterns, such as subgraph and path query patterns, the source vertex or edge of the traversal cannot be located through property indexes or VIDs. These queries find all the subgraphs that satisfy the query pattern by scanning the whole graph space which will have poor query performance. NebulaGraph does not implement indexing for the graph structures of subgraphs or paths.

              "},{"location":"8.service-tuning/2.graph-modeling/#no_predefined_bonds_between_tags_and_edge_types","title":"No predefined bonds between Tags and Edge types","text":"

              Define the bonds between Tags and Edge types in the application, not NebulaGraph. There are no statements that could get the bonds between Tags and Edge types.

              "},{"location":"8.service-tuning/2.graph-modeling/#tagsedge_types_predefine_a_set_of_properties","title":"Tags/Edge types predefine a set of properties","text":"

              While creating Tags or Edge types, you need to define a set of properties. Properties are part of the NebulaGraph Schema.

              "},{"location":"8.service-tuning/2.graph-modeling/#control_changes_in_the_business_model_and_the_data_model","title":"Control changes in the business model and the data model","text":"

              Changes here refer to changes in business models and data models (meta-information), not changes in the data itself.

              Some graph databases are designed to be Schema-free, so their data modeling, including the modeling of the graph topology and properties, can be very flexible. Properties can be re-modeled to graph topology, and vice versa. Such systems are often specifically optimized for graph topology access.

              NebulaGraph master is a strong-Schema (row storage) system, which means that the business model should not change frequently. For example, the property Schema should not change. It is similar to avoiding ALTER TABLE in MySQL.

              On the contrary, vertices and their edges can be added or deleted at low costs. Thus, the easy-to-change part of the business model should be transformed to vertices or edges, rather than properties.

              For example, in a business model, people have relatively fixed properties such as age, gender, and name. But their contact, place of visit, trade account, and login device are often changing. The former is suitable for modeling as properties and the latter as vertices or edges.

              "},{"location":"8.service-tuning/2.graph-modeling/#set_temporary_properties_through_self-loop_edges","title":"Set temporary properties through self-loop edges","text":"

              As a strong Schema system, NebulaGraph does not support List-type properties. And using ALTER TAG costs too much. If you need to add some temporary properties or List-type properties to a vertex, you can first create an edge type with the required properties, and then insert one or more edges that direct to the vertex itself. The figure is as follows.

              To retrieve temporary properties of vertices, fetch from self-loop edges. For example:

              //Create the edge type and insert the loop property.\nnebula> CREATE EDGE IF NOT EXISTS temp(tmp int);\nnebula> INSERT EDGE temp(tmp) VALUES \"player100\"->\"player100\"@1:(1);\nnebula> INSERT EDGE temp(tmp) VALUES \"player100\"->\"player100\"@2:(2);\nnebula> INSERT EDGE temp(tmp) VALUES \"player100\"->\"player100\"@3:(3);\n\n//After the data is inserted, you can query the loop property by general query statements, for example:\nnebula> GO FROM \"player100\" OVER temp YIELD properties(edge).tmp;\n+----------------------+\n| properties(EDGE).tmp |\n+----------------------+\n| 1                    |\n| 2                    |\n| 3                    |\n+----------------------+\n\n//If you want the results to be returned in the form of a List, you can use a function, for example:\nnebula> MATCH (v1:player)-[e:temp]->() return collect(e.tmp);\n+----------------+\n| collect(e.tmp) |\n+----------------+\n| [1, 2, 3]      |\n+----------------+\n
              Operations on loops are not encapsulated with any syntactic sugars and you can use them just like those on normal edges.

              "},{"location":"8.service-tuning/2.graph-modeling/#about_dangling_edges","title":"About dangling edges","text":"

              A dangling edge is an edge that only connects to a single vertex and only one part of the edge connects to the vertex.

              In NebulaGraph master, dangling edges may appear in the following two cases.

              1. Insert edges with INSERT EDGE statement before the source vertex or the destination vertex exists.

              2. Delete vertices with DELETE VERTEX statement and the WITH EDGE option is not used. At this time, the system does not delete the related outgoing and incoming edges of the vertices. There will be dangling edges by default.

              Dangling edges may appear in NebulaGraph master as the design allow it to exist. And there is no MERGE statement like openCypher has. The existence of dangling edges depends entirely on the application level. You can use GO and LOOKUP statements to find a dangling edge, but cannot use the MATCH statement to find a dangling edge.

              Examples:

              // Insert an edge that connects two vertices which do not exist in the graph. The source vertex's ID is '11'. The destination vertex's ID is'13'. \n\nnebula> CREATE EDGE IF NOT EXISTS e1 (name string, age int);\nnebula> INSERT EDGE e1 (name, age) VALUES \"11\"->\"13\":(\"n1\", 1);\n\n// Query using the `GO` statement\n\nnebula> GO FROM \"11\" over e1 YIELD properties(edge);\n+----------------------+\n| properties(EDGE)     |\n+----------------------+\n| {age: 1, name: \"n1\"} |\n+----------------------+\n\n// Query using the `LOOKUP` statement\n\nnebula> LOOKUP ON e1 YIELD EDGE AS r;\n+-------------------------------------------------------+\n| r                                                     |\n+-------------------------------------------------------+\n| [:e2 \"11\"->\"13\" @0 {age: 1, name: \"n1\"}]              |\n+-------------------------------------------------------+\n\n// Query using the `MATCH` statement\n\nnebula> MATCH ()-[e:e1]->() RETURN e;\n+---+\n| e |\n+---+\n+---+\nEmpty set (time spent 3153/3573 us)\n
              "},{"location":"8.service-tuning/2.graph-modeling/#breadth-first_traversal_over_depth-first_traversal","title":"Breadth-first traversal over depth-first traversal","text":"
              • NebulaGraph has lower performance for depth-first traversal based on the Graph topology, and better performance for breadth-first traversal and obtaining properties. For example, if model A contains properties \"name\", \"age\", and \"eye color\", it is recommended to create a tag person and add properties name, age, and eye_color to it. If you create a tag eye_color and an edge type has, and then create an edge to represent the eye color owned by the person, the traversal performance will not be high.
              • The performance of finding an edge by an edge property is close to that of finding a vertex by a vertex property. For some databases, it is recommended to re-model edge properties as those of the intermediate vertices. For example, model the pattern (src)-[edge {P1, P2}]->(dst) as (src)-[edge1]->(i_node {P1, P2})-[edge2]->(dst). With NebulaGraph master, you can use (src)-[edge {P1, P2}]->(dst) directly to decrease the depth of the traversal and increase the performance.
              "},{"location":"8.service-tuning/2.graph-modeling/#edge_directions","title":"Edge directions","text":"

              To query in the opposite direction of an edge, use the following syntax:

              (dst)<-[edge]-(src) or GO FROM dst REVERSELY.

              If you do not care about the directions or want to query against both directions, use the following syntax:

              (src)-[edge]-(dst) or GO FROM src BIDIRECT.

              Therefore, there is no need to insert the same edge redundantly in the reversed direction.

              "},{"location":"8.service-tuning/2.graph-modeling/#set_tag_properties_appropriately","title":"Set tag properties appropriately","text":"

              Put a group of properties that are on the same level into the same tag. Different groups represent different concepts.

              "},{"location":"8.service-tuning/2.graph-modeling/#use_indexes_correctly","title":"Use indexes correctly","text":"

              Using property indexes helps find VIDs through properties, but can lead to great performance reduction. Only use an index when you need to find vertices or edges through their properties.

              "},{"location":"8.service-tuning/2.graph-modeling/#design_vids_appropriately","title":"Design VIDs appropriately","text":"

              See VID.

              "},{"location":"8.service-tuning/2.graph-modeling/#long_texts","title":"Long texts","text":"

              Do not use long texts to create edge properties. Edge properties are stored twice and long texts lead to greater write amplification. For how edges properties are stored, see Storage architecture. It is recommended to store long texts in HBase or Elasticsearch and store its address in NebulaGraph.

              "},{"location":"8.service-tuning/2.graph-modeling/#dynamic_graphs_sequence_graphs_are_not_supported","title":"Dynamic graphs (sequence graphs) are not supported","text":"

              In some scenarios, graphs need to have the time information to describe how the structure of the entire graph changes over time.1

              The Rank field on Edges in NebulaGraph master can be used to store time in int64, but no field on vertices can do this because if you store the time information as property values, it will be covered by new insertion. Thus NebulaGraph does not support sequence graphs.

              "},{"location":"8.service-tuning/2.graph-modeling/#free_graph_data_modeling_tools","title":"Free graph data modeling tools","text":"

              arrows.app

              1. https://blog.twitter.com/engineering/en_us/topics/insights/2021/temporal-graph-networks\u00a0\u21a9

              "},{"location":"8.service-tuning/3.system-design/","title":"System design suggestions","text":""},{"location":"8.service-tuning/3.system-design/#qps_or_low-latency_first","title":"QPS or low-latency first","text":"
              • NebulaGraph master is good at handling small requests with high concurrency. In such scenarios, the whole graph is huge, containing maybe trillions of vertices or edges, but the subgraphs accessed by each request are not large (containing millions of vertices or edges), and the latency of a single request is low. The concurrent number of such requests, i.e., the QPS, can be huge.
              • On the other hand, in interactive analysis scenarios, the request concurrency is usually not high, but the subgraphs accessed by each request are large, with thousands of millions of vertices or edges. To lower the latency of big requests in such scenarios, you can split big requests into multiple small requests in the application, and concurrently send them to multiple graphd processes. This can decrease the memory used by each graphd process as well. Besides, you can use NebulaGraph Algorithm for such scenarios.
              "},{"location":"8.service-tuning/3.system-design/#data_transmission_and_optimization","title":"Data transmission and optimization","text":"
              • Read/write balance. NebulaGraph fits into OLTP scenarios with balanced read/write, i.e., concurrent write and read. It is not suitable for OLAP scenarios that usually need to write once and read many times.
              • Select different write methods. For large batches of data writing, use SST files. For small batches of data writing, use INSERT.
              • Run COMPACTION and BALANCE jobs to optimize data format and storage distribution at the right time.
              • NebulaGraph master does not support transactions and isolation in the relational database and is closer to NoSQL.
              "},{"location":"8.service-tuning/3.system-design/#query_preheating_and_data_preheating","title":"Query preheating and data preheating","text":"

              Preheat on the application side:

              • The Grapd process does not support pre-compiling queries and generating corresponding query plans, nor can it cache previous query results.
              • The Storagd process does not support preheating data. Only the LSM-Tree and BloomFilter of RocksDB are loaded into memory at startup.
              • Once accessed, vertices and edges are cached respectively in two types of LRU cache of the Storage Service.
              "},{"location":"8.service-tuning/4.plan/","title":"Execution plan","text":"

              NebulaGraph master applies rule-based execution plans. Users cannot change execution plans, pre-compile queries (and corresponding plan cache), or accelerate queries by specifying indexes.

              To view the execution plan and executive summary, see EXPLAIN and PROFILE.

              "},{"location":"8.service-tuning/compaction/","title":"Compaction","text":"

              This topic gives some information about compaction.

              In NebulaGraph, Compaction is the most important background process and has an important effect on performance.

              Compaction reads the data that is written on the hard disk, then re-organizes the data structure and the indexes, and then writes back to the hard disk. The read performance can increase by times after compaction. Thus, to get high read performance, trigger compaction (full compaction) manually when writing a large amount of data into Nebula\u00a0Graph.

              Note

              Note that compaction leads to long-time hard disk IO. We suggest that users do compaction during off-peak hours (for example, early morning).

              NebulaGraph has two types of compaction: automatic compaction and full compaction.

              "},{"location":"8.service-tuning/compaction/#automatic_compaction","title":"Automatic compaction","text":"

              Automatic compaction is automatically triggered when the system reads data, writes data, or the system restarts. The read performance can increase in a short time. Automatic compaction is enabled by default. But once triggered during peak hours, it can cause unexpected IO occupancy that has an unwanted effect on the performance.

              "},{"location":"8.service-tuning/compaction/#full_compaction","title":"Full compaction","text":"

              Full compaction enables large-scale background operations for a graph space such as merging files, deleting the data expired by TTL. This operation needs to be initiated manually. Use the following statements to enable full compaction:

              Note

              We recommend you to do the full compaction during off-peak hours because full compaction has a lot of IO operations.

              nebula> USE <your_graph_space>;\nnebula> SUBMIT JOB COMPACT;\n

              The preceding statement returns the job ID. To show the compaction progress, use the following statement:

              nebula> SHOW JOB <job_id>;\n
              "},{"location":"8.service-tuning/compaction/#operation_suggestions","title":"Operation suggestions","text":"

              These are some operation suggestions to keep Nebula\u00a0Graph performing well.

              • After data import is done, run SUBMIT JOB COMPACT.
              • Run SUBMIT JOB COMPACT periodically during off-peak hours (e.g. early morning).
              • To control the write traffic limitation for compactions, set the following parameter in the nebula-storaged.conf configuration file.

                Note

                This parameter limits the rate of all writes including normal writes and compaction writes.

                # Limit the write rate to 20MB/s.\n--rocksdb_rate_limit=20 (in MB/s)\n
              "},{"location":"8.service-tuning/compaction/#faq","title":"FAQ","text":""},{"location":"8.service-tuning/compaction/#where_are_the_logs_related_to_compaction_stored","title":"\"Where are the logs related to Compaction stored?\"","text":"

              By default, the logs are stored under the LOG file in the /usr/local/nebula/data/storage/nebula/{1}/data/ directory, or similar to LOG.old.1625797988509303. You can find the following content.

              ** Compaction Stats [default] **\nLevel    Files   Size     Score Read(GB)  Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop\n----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n  L0      2/0    2.46 KB   0.5      0.0     0.0      0.0       0.0      0.0       0.0   1.0      0.0      0.0      0.53              0.51         2    0.264       0      0\n Sum      2/0    2.46 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   1.0      0.0      0.0      0.53              0.51         2    0.264       0      0\n Int      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0      0.0      0.00              0.00         0    0.000       0      0\n

              If the number of L0 files is large, the read performance will be greatly affected and compaction can be triggered.

              "},{"location":"8.service-tuning/compaction/#can_i_do_full_compactions_for_multiple_graph_spaces_at_the_same_time","title":"\"Can I do full compactions for multiple graph spaces at the same time?\"","text":"

              Yes, you can. But the IO is much larger at this time and the efficiency may be affected.

              "},{"location":"8.service-tuning/compaction/#how_much_time_does_it_take_for_full_compactions","title":"\"How much time does it take for full compactions?\"","text":"

              When rocksdb_rate_limit is set to 20, you can estimate the full compaction time by dividing the hard disk usage by the rocksdb_rate_limit. If you do not set the rocksdb_rate_limit value, the empirical value is around 50 MB/s.

              "},{"location":"8.service-tuning/compaction/#can_i_modify_--rocksdb_rate_limit_dynamically","title":"\"Can I modify --rocksdb_rate_limit dynamically?\"","text":"

              No, you cannot.

              "},{"location":"8.service-tuning/compaction/#can_i_stop_a_full_compaction_after_it_starts","title":"\"Can I stop a full compaction after it starts?\"","text":"

              No, you cannot. When you start a full compaction, you have to wait till it is done. This is the limitation of RocksDB.

              "},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/","title":"Enable AutoFDO for NebulaGraph","text":"

              The AutoFDO can analyze the performance of an optimized program and use the program's performance information to guide the compiler to re-optimize the program. This document will help you to enable the AutoFDO for NebulaGraph.

              More information about the AutoFDO, please refer AutoFDO Wiki.

              "},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#resource_preparations","title":"Resource Preparations","text":""},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#install_dependencies","title":"Install Dependencies","text":"
              • Install perf

                sudo apt-get update\nsudo apt-get install -y linux-tools-common \\\nlinux-tools-generic \\\nlinux-tools-`uname -r`\n
              • Install autofdo tool

                sudo apt-get update\nsudo apt-get install -y autofdo\n

                Or you can compile the autofdo tool from source.

              "},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#nebulagraph_binary_with_debug_version","title":"NebulaGraph Binary with Debug Version","text":"

              For how to build NebulaGraph from source, please refer to the official document: Install NebulaGraph by compiling the source code. In the configure step, replace CMAKE_BUILD_TYPE=Release with CMAKE_BUILD_TYPE=RelWithDebInfo as below:

              $ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/nebula -DENABLE_TESTING=OFF -DCMAKE_BUILD_TYPE=RelWithDebInfo ..\n
              "},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#prepare_test_data","title":"Prepare Test Data","text":"

              In our test environment, we use NebulaGraph Bench to prepare the test data and collect the profile data by running the FindShortestPath, Go1Step, Go2Step, Go3Step, InsertPersonScenario 5 scenarios.

              Note

              You can use your TopN queries in your production environment to collect the profile data, the performance can gain more in your environment.

              "},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#prepare_profile_data","title":"Prepare Profile Data","text":""},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#collect_perf_data_for_autofdo_tool","title":"Collect Perf Data For AutoFdo Tool","text":"
              1. After the test data preparation work done. Collect the perf data for different scenarios. Get the pid of storaged, graphd, metad.

                $ nebula.service status all\n[INFO] nebula-metad: Running as 305422, Listening on 9559\n[INFO] nebula-graphd: Running as 305516, Listening on 9669\n[INFO] nebula-storaged: Running as 305707, Listening on 9779\n
              2. Start the perf record for nebula-graphd and nebula-storaged.

                perf record -p 305516,305707 -b -e br_inst_retired.near_taken:pp -o ~/FindShortestPath.data\n

                Note

                Because the nebula-metad service contribution percent is small compared with nebula-graphd and nebula-storaged services. To reduce effort, we didn't collect the perf data for nebula-metad service.

              3. Start the benchmark test for FindShortestPath scenario.

                cd NebulaGraph-Bench \npython3 run.py stress run -s benchmark -scenario find_path.FindShortestPath -a localhost:9669 --args='-u 100 -i 100000'\n
              4. After the benchmark finished, end the perf record by Ctrl + c.

              5. Repeat above steps to collect corresponding profile data for the rest Go1Step, Go2Step, Go3Step and InsertPersonScenario scenarios.

              "},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#create_gcov_file","title":"Create Gcov File","text":"
              create_gcov --binary=$NEBULA_HOME/bin/nebula-storaged \\\n--profile=~/FindShortestPath.data \\\n--gcov=~/FindShortestPath-storaged.gcov \\\n-gcov_version=1\n\ncreate_gcov --binary=$NEBULA_HOME/bin/nebula-graphd \\\n--profile=~/FindShortestPath.data \\\n--gcov=~/FindShortestPath-graphd.gcov \\\n-gcov_version=1\n

              Repeat for Go1Step, Go2Step, Go3Step and InsertPersonScenario scenarios.

              "},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#merge_the_profile_data","title":"Merge the Profile Data","text":"
              profile_merger ~/FindShortestPath-graphd.gcov \\\n~/FindShortestPath-storaged.gcov \\\n~/go1step-storaged.gcov \\\n~/go1step-graphd.gcov \\\n~/go2step-storaged.gcov \\\n~/go2step-graphd.gcov \\\n~/go3step-storaged.gcov \\\n~/go3step-master-graphd.gcov \\\n~/InsertPersonScenario-storaged.gcov \\\n~/InsertPersonScenario-graphd.gcov\n

              You will get a merged profile which is named fbdata.afdo after that.

              "},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#recompile_graphnebula_binary_with_the_merged_profile","title":"Recompile GraphNebula Binary with the Merged Profile","text":"

              Recompile the GraphNebula Binary by passing the profile with compile option -fauto-profile.

              diff --git a/cmake/nebula/GeneralCompilerConfig.cmake b/cmake/nebula/GeneralCompilerConfig.cmake\n@@ -20,6 +20,8 @@ add_compile_options(-Wshadow)\n add_compile_options(-Wnon-virtual-dtor)\n add_compile_options(-Woverloaded-virtual)\n add_compile_options(-Wignored-qualifiers)\n+add_compile_options(-fauto-profile=~/fbdata.afdo)\n

              Note

              When you use multiple fbdata.afdo to compile multiple times, please remember to make clean before re-compile, baucase only change the fbdata.afdo will not trigger re-compile.

              "},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#performance_test_result","title":"Performance Test Result","text":""},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#hardware_software_environment","title":"Hardware & Software Environment","text":"Key Value CPU Processor# 2 Sockets 2 NUMA 2 CPU Type Intel(R) Xeon(R) Platinum 8380 CPU @ 2.30GHz Cores per Processor 40C80T Cache L1 data: 48KB L1 i: 32KB L2: 1.25MB per physical core L3: shared 60MB per processor Memory Micron DDR4 3200MT/s 16GB16Micron DDR4 3200MT/s 16GB16 SSD Disk INTEL SSDPE2KE016T8 SSD R/W Sequential 3200 MB/s (read) / 2100 MB/s(write) Nebula Version master with commit id 51d84a4ed7d2a032a337e3b996c927e3bc5d1415 Kernel 4.18.0-408.el8.x86_64"},{"location":"8.service-tuning/enable_autofdo_for_nebulagraph/#test_results","title":"Test Results","text":"Scenario Average Latency(LiB) Default Binary Optimized Binary with AutoFDO P95 Latency (LiB) Default Binary Optimized Binary with AutoFDO FindShortestPath 1 8072.52 7260.10 1 22102.00 19108.00 2 8034.32 7218.59 2 22060.85 19006.00 3 8079.27 7257.24 3 22147.00 19053.00 4 8087.66 7221.39 4 22143.00 19050.00 5 8044.77 7239.85 5 22181.00 19055.00 STDDEVP 20.57 17.34 STDDEVP 41.41 32.36 Mean 8063.71 7239.43 Mean 22126.77 19054.40 STDDEVP/Mean 0.26% 0.24% STDDEVP/Mean 0.19% 0.17% Opt/Default 100.00% 10.22% Opt/Default 100.00% 13.89% Go1Step 1 422.53 418.37 1 838.00 850.00 2 432.37 402.44 2 866.00 815.00 3 437.45 407.98 3 874.00 836.00 4 429.16 408.38 4 858.00 838.00 5 446.38 411.32 5 901.00 837.00 STDDEVP 8.02 5.20 STDDEVP 20.63 11.30 Mean 433.58 409.70 Mean 867.40 835.20 STDDEVP/Mean 1.85% 1.27% STDDEVP/Mean 2.38% 1.35% Opt/Default 100.00% 5.51% Opt/Default 100.00% 3.71% Go2Step 1 2989.93 2824.29 1 10202.00 9656.95 2 2957.22 2834.55 2 10129.00 9632.40 3 2962.74 2818.62 3 10168.40 9624.70 4 2992.39 2817.27 4 10285.10 9647.50 5 2934.85 2834.91 5 10025.00 9699.65 STDDEVP 21.53 7.57 STDDEVP 85.62 26.25 Mean 2967.43 2825.93 Mean 10161.90 9652.24 STDDEVP/Mean 0.73% 0.27% STDDEVP/Mean 0.84% 0.27% Opt/Default 100.00% 4.77% Opt/Default 100.00% 5.02% Go3Step 1 93551.97 89406.96 1 371359.55 345433.50 2 92418.43 89977.25 2 368868.00 352375.20 3 92587.67 90339.25 3 365390.15 356198.55 4 93371.64 92458.95 4 373578.15 365177.75 5 94046.05 89943.44 5 373392.25 352576.00 STDDEVP 609.07 1059.54 STDDEVP 3077.38 6437.52 Mean 93195.15 90425.17 Mean 370517.62 354352.20 STDDEVP/Mean 0.65% 1.17% STDDEVP/Mean 0.83% 1.82% Opt/Default 100.00% 2.97% Opt/Default 100.00% 4.36% InsertPerson 1 2022.86 1937.36 1 2689.00 2633.45 2 1966.05 1935.41 2 2620.45 2555.00 3 1985.25 1953.58 3 2546.00 2593.00 4 2026.73 1887.28 4 2564.00 2394.00 5 2007.55 1964.41 5 2676.00 2581.00 STDDEVP 23.02 26.42 STDDEVP 57.45 82.62 Mean 2001.69 1935.61 Mean 2619.09 2551.29 STDDEVP/Mean 1.15% 1.37% STDDEVP/Mean 2.19% 3.24% Opt/Default 100.00% 3.30% Opt/Default 100.00% 2.59%"},{"location":"8.service-tuning/load-balance/","title":"Storage load balance","text":"

              You can use the SUBMIT JOB BALANCE statement to balance the distribution of partitions and Raft leaders, or clear some Storage servers for easy maintenance. For details, see SUBMIT JOB BALANCE.

              Danger

              The BALANCE commands migrate data and balance the distribution of partitions by creating and executing a set of subtasks. DO NOT stop any machine in the cluster or change its IP address until all the subtasks finish. Otherwise, the follow-up subtasks fail.

              "},{"location":"8.service-tuning/load-balance/#balance_leader_distribution","title":"Balance leader distribution","text":"

              To balance the raft leaders, run SUBMIT JOB BALANCE LEADER. It will start a job to balance the distribution of all the storage leaders in all graph spaces.

              "},{"location":"8.service-tuning/load-balance/#example","title":"Example","text":"
              nebula> SUBMIT JOB BALANCE LEADER;\n

              Run SHOW HOSTS to check the balance result.

              nebula> SHOW HOSTS;\n+------------------+------+----------+--------------+-----------------------------------+------------------------+----------------------+\n| Host             | Port | Status   | Leader count | Leader distribution               | Partition distribution | Version              |\n+------------------+------+----------+--------------+-----------------------------------+------------------------+----------------------+\n| \"192.168.10.101\" | 9779 | \"ONLINE\" | 8            | \"basketballplayer:3\"              | \"basketballplayer:8\"   | \"master\" |\n| \"192.168.10.102\" | 9779 | \"ONLINE\" | 3            | \"basketballplayer:3\"              | \"basketballplayer:8\"   | \"master\" |\n| \"192.168.10.103\" | 9779 | \"ONLINE\" | 0            | \"basketballplayer:2\"              | \"basketballplayer:7\"   | \"master\" |\n| \"192.168.10.104\" | 9779 | \"ONLINE\" | 0            | \"basketballplayer:2\"              | \"basketballplayer:7\"   | \"master\" |\n| \"192.168.10.105\" | 9779 | \"ONLINE\" | 0            | \"basketballplayer:2\"              | \"basketballplayer:7\"   | \"master\" |\n+------------------+------+----------+--------------+-----------------------------------+------------------------+----------------------+\n

              Caution

              During leader partition replica switching in NebulaGraph, the leader replicas will be temporarily prohibited from being written to until the switch is completed. If there are a large number of write requests during the switching period, it will result in a request error (Storage Error E_RPC_FAILURE). See FAQ for error handling methods.

              You can set the value of raft_heartbeat_interval_secs in the Storage configuration file to control the timeout period for leader replica switching. For more information on the configuration file, see Storage configuration file.

              "},{"location":"8.service-tuning/practice/","title":"Best practices","text":"

              NebulaGraph is used in a variety of industries. This topic presents a few best practices for using NebulaGraph. For more best practices, see Blog.

              "},{"location":"8.service-tuning/practice/#scenarios","title":"Scenarios","text":"
              • Use cases
              • User review
              • Performance
              "},{"location":"8.service-tuning/practice/#kernel","title":"Kernel","text":"
              • What is a graph database and what are its use cases - Definition, examples & trends
              • NebulaGraph Source Code Explained: Variable-Length Pattern Matching
              • Adding a Test Case for NebulaGraph
              • BDD-Based Integration Testing Framework for NebulaGraph: Part \u2160
              • BDD-Based Integration Testing Framework for NebulaGraph: Part II
              • Understanding Subgraph in NebulaGraph
              • Full-Text Indexing in NebulaGraph
              "},{"location":"8.service-tuning/practice/#ecosystem_tool","title":"Ecosystem tool","text":"
              • Validating Import Performance of NebulaGraph Importer
              • Ecosystem Tools: NebulaGraph Dashboard for Monitoring
              • Visualizing Graph Data with NebulaGraph Explorer
              "},{"location":"8.service-tuning/super-node/","title":"Processing super vertices","text":""},{"location":"8.service-tuning/super-node/#principle_introduction","title":"Principle introduction","text":"

              In graph theory, a super vertex, also known as a dense vertex, is a vertex with an extremely high number of adjacent edges. The edges can be outgoing or incoming.

              Super vertices are very common because of the power-law distribution. For example, popular leaders in social networks (Internet celebrities), top stocks in the stock market, Big Four in the banking system, hubs in transportation networks, websites with high clicking rates on the Internet, and best sellers in E-commerce.

              In NebulaGraph master, a vertex and its properties form a key-value pair, with its VID and other meta information as the key. Its Out-Edge Key-Value and In-Edge Key-Value are stored in the same partition in the form of LSM-trees in hard disks and caches.

              Therefore, directed traversals from this vertex and directed traversals ending at this vertex both involve either a large number of sequential IO scans (ideally, after Compaction or a large number of random IO (frequent writes to the vertex and its ingoing and outgoing edges).

              As a rule of thumb, a vertex is considered dense when the number of its edges exceeds 10,000. Some special cases require additional consideration.

              Note

              In NebulaGraph master, there is not any data structure to store the out/in degree for each vertex. Therefore, there is no direct method to know whether it is a super vertex or not. You can try to use Spark to count the degrees periodically.

              "},{"location":"8.service-tuning/super-node/#indexes_for_duplicate_properties","title":"Indexes for duplicate properties","text":"

              In a property graph, there is another class of cases similar to super vertices: a property has a very high duplication rate, i.e., many vertices with the same tag but different VIDs have identical property and property values.

              Property indexes in NebulaGraph master are designed to reuse the functionality of RocksDB in the Storage Service, in which case indexes are modeled as keys with the same prefix. If the lookup of a property fails to hit the cache, it is processed as a random seek and a sequential prefix scan on the hard disk to find the corresponding VID. After that, the graph is usually traversed from this vertex, so that another random read and sequential scan for the corresponding key-value of this vertex will be triggered. The higher the duplication rate, the larger the scan range.

              For more information about property indexes, see How indexing works in NebulaGraph.

              Usually, special design and processing are required when the number of duplicate property values exceeds 10,000.

              "},{"location":"8.service-tuning/super-node/#suggested_solutions","title":"Suggested solutions","text":""},{"location":"8.service-tuning/super-node/#solutions_at_the_database_end","title":"Solutions at the database end","text":"
              1. Truncation: Only return a certain number (a threshold) of edges, and do not return other edges exceeding this threshold.
              2. Compact: Reorganize the order of data in RocksDB to reduce random reads and increase sequential reads.
              "},{"location":"8.service-tuning/super-node/#solutions_at_the_application_end","title":"Solutions at the application end","text":"

              Break up some of the super vertices according to their business significance:

              • Delete multiple edges and merge them into one.

                For example, in the transfer scenario (Account_A)-[TRANSFER]->(Account_B), each transfer record is modeled as an edge between account A and account B, then there may be tens of thousands of transfer records between (Account_A) and (Account_B).

                In such scenarios, merge obsolete transfer details on a daily, weekly, or monthly basis. That is, batch-delete old edges and replace them with a small number of edges representing monthly total and times. And keep the transfer details of the latest month.

              • Split an edge into multiple edges of different types.

                For example, in the (Airport)<-[DEPART]-(Flight) scenario, the departure of each flight is modeled as an edge between a flight and an airport. Departures from a big airport might be enormous.

                According to different airlines, divide the DEPART edge type into finer edge types, such as DEPART_CEAIR, DEPART_CSAIR, etc. Specify the departing airline in queries (graph traversal).

              • Split vertices.

                For example, in the loan network (person)-[BORROW]->(bank), large bank A will have a very large number of loans and borrowers.

                In such scenarios, you can split the large vertex A into connected sub-vertices A1, A2, and A3.

                (Person1)-[BORROW]->(BankA1), (Person2)-[BORROW]->(BankA2), (Person2)-[BORROW]->(BankA3);\n(BankA1)-[BELONGS_TO]->(BankA), (BankA2)-[BELONGS_TO]->(BankA), (BankA3)-[BELONGS_TO]->(BankA).\n

                A1, A2, and A3 can either be three real branches of bank A, such as Beijing branch, Shanghai branch, and Zhejiang branch, or three virtual branches set up according to certain rules, such as A1: 1-1000, A2: 1001-10000 and A3: 10000+ according to the number of loans. In this way, any operation on A is converted into three separate operations on A1, A2, and A3.

              "},{"location":"backup-and-restore/3.manage-snapshot/","title":"Backup and restore data with snapshots","text":"

              NebulaGraph supports using snapshots to back up and restore data. When data loss or misoperation occurs, the data will be restored through the snapshot.

              "},{"location":"backup-and-restore/3.manage-snapshot/#prerequisites","title":"Prerequisites","text":"

              NebulaGraph authentication is disabled by default. In this case, all users can use the snapshot feature.

              If authentication is enabled, only the GOD role user can use the snapshot feature. For more information about roles, see Roles and privileges.

              "},{"location":"backup-and-restore/3.manage-snapshot/#precautions","title":"Precautions","text":"
              • To prevent data loss, create a snapshot as soon as the system structure changes, for example, after operations such as ADD HOST, DROP HOST, CREATE SPACE, DROP SPACE, and BALANCE are performed.
              • NebulaGraph cannot automatically delete the invalid files created by a failed snapshot task. You have to manually delete them by using DROP SNAPSHOT.
              • Customizing the storage path for snapshots is not supported for now.
              "},{"location":"backup-and-restore/3.manage-snapshot/#create_snapshots","title":"Create snapshots","text":"

              Run CREATE SNAPSHOT to create a snapshot for all the graph spaces based on the current time for NebulaGraph. Creating a snapshot for a specific graph space is not supported yet.

              Note

              If the creation fails, refer to the later section to delete the corrupted snapshot and then recreate the snapshot.

              nebula> CREATE SNAPSHOT;\n
              "},{"location":"backup-and-restore/3.manage-snapshot/#view_snapshots","title":"View snapshots","text":"

              To view all existing snapshots, run SHOW SNAPSHOTS.

              nebula> SHOW SNAPSHOTS;\n+--------------------------------+---------+------------------+\n| Name                           | Status  | Hosts            |\n+--------------------------------+---------+------------------+\n| \"SNAPSHOT_2021_03_09_08_43_12\" | \"VALID\" | \"127.0.0.1:9779\" |\n| \"SNAPSHOT_2021_03_09_09_10_52\" | \"VALID\" | \"127.0.0.1:9779\" |\n+--------------------------------+---------+------------------+\n

              The parameters in the return information are described as follows.

              Parameter Description Name The name of the snapshot directory. The prefix SNAPSHOT indicates that the file is a snapshot file, and the suffix indicates the time the snapshot was created (UTC). Status The status of the snapshot. VALID indicates that the creation succeeded, while INVALID indicates that it failed. Hosts The IPs (or hostnames) and ports of all Storage servers at the time the snapshot was created."},{"location":"backup-and-restore/3.manage-snapshot/#snapshot_path","title":"Snapshot path","text":"

              Snapshots are stored in the path specified by the data_path parameter in the Meta and Storage configuration files. When a snapshot is created, the checkpoints directory is checked in the datastore path of the leader Meta service and all Storage services for the existence, and if it is not there, it is automatically created. The newly created snapshot is stored as a subdirectory within the checkpoints directory. For example, SNAPSHOT_2021_03_09_08_43_12. The suffix 2021_03_09_08_43_12 is generated automatically based on the creation time (UTC).

              To fast locate the path where the snapshots are stored, you can use the Linux command find in the datastore path. For example:

              $ cd /usr/local/nebula-graph-ent-master/data\n$ find |grep 'SNAPSHOT_2021_03_09_08_43_12'\n./data/meta2/nebula/0/checkpoints/SNAPSHOT_2021_03_09_08_43_12\n./data/meta2/nebula/0/checkpoints/SNAPSHOT_2021_03_09_08_43_12/data\n./data/meta2/nebula/0/checkpoints/SNAPSHOT_2021_03_09_08_43_12/data/000081.sst\n...\n
              "},{"location":"backup-and-restore/3.manage-snapshot/#delete_snapshots","title":"Delete snapshots","text":"

              To delete a snapshot with the given name, run DROP SNAPSHOT.

              DROP SNAPSHOT <snapshot_name>;\n

              Example:

              nebula> DROP SNAPSHOT SNAPSHOT_2021_03_09_08_43_12;\nnebula> SHOW SNAPSHOTS;\n+--------------------------------+---------+------------------+\n| Name                           | Status  | Hosts            |\n+--------------------------------+---------+------------------+\n| \"SNAPSHOT_2021_03_09_09_10_52\" | \"VALID\" | \"127.0.0.1:9779\" |\n+--------------------------------+---------+------------------+\n

              Note

              Deleting the only snapshot within the checkpoints directory also deletes the checkpoints directory.

              "},{"location":"backup-and-restore/3.manage-snapshot/#restore_data_with_snapshots","title":"Restore data with snapshots","text":"

              Warning

              When you restore data with snapshots, make sure that the graph spaces backed up in the snapshot have not been dropped. Otherwise, the data of the graph spaces cannot be restored.

              Currently, there is no command to restore data with snapshots. You need to manually copy the snapshot file to the corresponding folder, or you can make it by using a shell script. The logic implements as follows:

              1. After the snapshot is created, the checkpoints directory is generated in the installation directory of the leader Meta service and all Storage services, and saves the created snapshot. Taking this topic as an example, when there are two graph spaces, the snapshots created are saved in /usr/local/nebula/data/meta/nebula/0/checkpoints, /usr/local/nebula/data/storage/ nebula/3/checkpoints and /usr/local/nebula/data/storage/nebula/4/checkpoints.

                $ ls /usr/local/nebula/data/meta/nebula/0/checkpoints/\nSNAPSHOT_2021_03_09_09_10_52\n$ ls /usr/local/nebula/data/storage/nebula/3/checkpoints/\nSNAPSHOT_2021_03_09_09_10_52\n$ ls /usr/local/nebula/data/storage/nebula/4/checkpoints/\nSNAPSHOT_2021_03_09_09_10_52\n
              2. To restore the lost data through snapshots, you can take a snapshot at an appropriate time, copy the folders data and wal in the corresponding snapshot directory to its parent directory (at the same level with checkpoints) to overwrite the previous data and wal, and then restart the cluster.

                Warning

                The data and wal directories of all Meta services should be overwritten at the same time. Otherwise, the new leader Meta service will use the latest Meta data after a cluster is restarted.

              "},{"location":"backup-and-restore/nebula-br/1.what-is-br/","title":"What is Backup & Restore","text":"

              Backup & Restore (BR for short) is a Command-Line Interface (CLI) tool to back up data of graph spaces of NebulaGraph and to restore data from the backup files.

              "},{"location":"backup-and-restore/nebula-br/1.what-is-br/#features","title":"Features","text":"

              The BR has the following features. It supports:

              • Backing up and restoring data in a one-click operation.
              • Restoring data in the following backup file types:
                • Local Disk (SSD or HDD). It is recommend to use local disk in test environment only.
                • Amazon S3 compatible interface, such as Alibaba Cloud OSS, MinIO,Ceph RGW, etc.
              • Backing up and restoring the entire NebulaGraph cluster.
              • Backing up data of specified graph spaces (experimental).
              "},{"location":"backup-and-restore/nebula-br/1.what-is-br/#limitations","title":"Limitations","text":"
              • Supports NebulaGraph v3.x only.
              • Supports full backup, but not incremental backup.
              • Currently, NebulaGraph Listener and full-text indexes do not support backup.
              • If you back up data to the local disk, the backup files will be saved in the local path of each server. You can also mount the NFS on your host to restore the backup data to a different host.
              • Restoration requires that the number of the storage servers in the original cluster is the same as that of the storage servers in the target cluster and storage server IPs must be the same. Restoring the specified space will clear all the remaining spaces in the cluster.
              • During the backup process, both DDL and DML statements in any specified graph spaces are blocked. We recommend that you do the operation within the low peak period of the business, for example, from 2:00 AM to 5:00 AM.
              • During the restoration process, there is a time when NebulaGraph stops running.
              • Using BR in a container-based NebulaGraph cluster is not supported.
              "},{"location":"backup-and-restore/nebula-br/1.what-is-br/#how_to_use_br","title":"How to use BR","text":"

              To use the BR, follow these steps:

              1. Install BR.
              2. Use BR to back up data.
              3. Use BR to restore data from backup files.
              "},{"location":"backup-and-restore/nebula-br/2.compile-br/","title":"Install BR","text":"

              This topic introduces the installation of BR in bare-metal deployment scenarios.

              "},{"location":"backup-and-restore/nebula-br/2.compile-br/#notes","title":"Notes","text":"

              To use the BR (Community Edition) tool, you need to install the NebulaGraph Agent service, which is taken as a daemon for each machine in the cluster that starts and stops the NebulaGraph service, and uploads and downloads backup files. The BR (Community Edition) tool and the Agent plug-in are installed as described below.

              "},{"location":"backup-and-restore/nebula-br/2.compile-br/#version_compatibility","title":"Version compatibility","text":"NebulaGraph BR Agent 3.5.x ~ 3.6.0 3.6.0 3.6.x ~ 3.7.0 3.3.0 ~ 3.4.x 3.3.0 0.2.0 ~ 3.4.0 3.0.x ~ 3.2.x 0.6.1 0.1.0 ~ 0.2.0"},{"location":"backup-and-restore/nebula-br/2.compile-br/#install_br_with_a_binary_file","title":"Install BR with a binary file","text":"
              1. Install BR.

                wget https://github.com/vesoft-inc/nebula-br/releases/download/v3.6.0/br-3.6.0-linux-amd64\n
              2. Change the binary file name to br.

                sudo mv br-3.6.0-linux-amd64 br\n
              3. Grand execute permission to BR.

                sudo chmod +x br\n
              4. Run ./br version to check BR version.

                [nebula-br]$ ./br version\nNebula Backup And Restore Utility Tool,V-3.6.0\n
              "},{"location":"backup-and-restore/nebula-br/2.compile-br/#install_br_with_the_source_code","title":"Install BR with the source code","text":"

              Before compiling the BR, do a check of these:

              • Go 1.14.x or a later version is installed.
              • make is installed.

              To compile the BR, follow these steps:

              1. Clone the nebula-br repository to your machine.

                git clone https://github.com/vesoft-inc/nebula-br.git\n
              2. Change to the br directory.

                cd nebula-br\n
              3. Compile the BR.

                make\n

              Users can enter bin/br version on the command line. If the following results are returned, the BR is compiled successfully.

              [nebula-br]$ bin/br version\nNebulaGraph Backup And Restore Utility Tool,V-3.6.0\n
              "},{"location":"backup-and-restore/nebula-br/2.compile-br/#install_agent","title":"Install Agent","text":"

              NebulaGraph Agent is installed as a binary file in each machine and serves the BR tool with the RPC protocol.

              In each machine, follow these steps:

              1. Install Agent.

                wget https://github.com/vesoft-inc/nebula-agent/releases/download/v3.7.0/agent-3.7.0-linux-amd64\n
              2. Rename the Agent file to agent.

                sudo mv agent-3.7.0-linux-amd64 agent\n
              3. Add execute permission to Agent.

                sudo chmod +x agent\n
              4. Start Agent.

                Note

                Before starting Agent, make sure that the Meta service has been started and Agent has read and write access to the corresponding NebulaGraph cluster directory and backup directory.

                sudo nohup ./agent --agent=\"<agent_node_ip>:8888\" --meta=\"<metad_node_ip>:9559\" --ratelimit=<file_size_bt> > nebula_agent.log 2>&1 &\n
                • --agent: The IP address and port number of Agent.
                • --meta: The IP address and access port of any Meta service in the cluster.
                • --ratelimit: (Optional) Limits the speed of file uploads and downloads to prevent bandwidth from being filled up and making other services unavailable. Unit: Bytes.

                For example:

                sudo nohup ./agent --agent=\"192.168.8.129:8888\" --meta=\"192.168.8.129:9559\" --ratelimit=1048576 > nebula_agent.log 2>&1 &\n

                Caution

                The IP address format for --agentshould be the same as that of Meta and Storage services set in the configuration files. That is, use the real IP addresses or use 127.0.0.1. Otherwise Agent does not run.

              5. Log into NebulaGraph and then run the following command to view the status of Agent.

                nebula> SHOW HOSTS AGENT;\n+-----------------+------+----------+---------+--------------+---------+\n| Host            | Port | Status   | Role    | Git Info Sha | Version |\n+-----------------+------+----------+---------+--------------+---------+\n| \"192.168.8.129\" | 8888 | \"ONLINE\" | \"AGENT\" | \"96646b8\"    |         |\n+-----------------+------+----------+---------+--------------+---------+  \n
              "},{"location":"backup-and-restore/nebula-br/2.compile-br/#faq","title":"FAQ","text":""},{"location":"backup-and-restore/nebula-br/2.compile-br/#the_error_e_list_cluster_no_agent_failure","title":"The error `E_LIST_CLUSTER_NO_AGENT_FAILURE","text":"

              If you encounter E_LIST_CLUSTER_NO_AGENT_FAILURE error, it may be due to the Agent service is not started or the Agent service is not registered to Meta service. First, execute SHOW HOSTS AGENT to check the status of the Agent service on all nodes in the cluster, when the status shows OFFLINE, it means the registration of Agent failed, then check whether the value of the --meta option in the command to start the Agent service is correct.

              "},{"location":"backup-and-restore/nebula-br/3.br-backup-data/","title":"Use BR to back up data","text":"

              After the BR is installed, you can back up data of the entire graph space. This topic introduces how to use the BR to back up data.

              "},{"location":"backup-and-restore/nebula-br/3.br-backup-data/#prerequisites","title":"Prerequisites","text":"

              To back up data with the BR, do a check of these:

              • Install BR and Agent and run Agent on each host in the cluster.
              • The NebulaGraph services are running.
              • If you store the backup files locally, create a directory with the same absolute path on the meta servers, the storage servers, and the BR machine for the backup files and get the absolute path. Make sure the account has write privileges for this directory.

                Warning

                In the production environment, we recommend that you mount Network File System (NFS) storage to the meta servers, the storage servers, and the BR machine for local backup, or use Amazon S3 or Alibaba Cloud OSS for remote backup. When you restore the data from local files, you must manually move these backup files to a specified directory, which causes redundant data and troubles. For more information, see Restore data from backup files.

              "},{"location":"backup-and-restore/nebula-br/3.br-backup-data/#procedure","title":"Procedure","text":"

              In the BR installation directory (the default path of the compiled BR is ./bin/br), run the following command to perform a full backup for the entire cluster.

              Note

              Make sure that the local path where the backup file is stored exists.

              $ ./br backup full --meta <ip_address> --storage <storage_path>\n

              For example:

              • Run the following command to perform a full backup for the entire cluster whose meta service address is 192.168.8.129:9559, and save the backup file to /home/nebula/backup/.

                Caution

                If there are multiple metad addresses, you can use any one of them.

                Caution

                If you back up data to a local disk, only the data of the leader metad is backed up by default. So if there are multiple metad processes, you need to manually copy the directory of the leader metad (path <storage_path>/meta) and overwrite the corresponding directory of other follower meatd processes.

                $ ./br backup full --meta \"192.168.8.129:9559\" --storage \"local:///home/nebula/backup/\"\n
              • Run the following command to perform a full backup for the entire cluster whose meta service address is 192.168.8.129:9559, and save the backup file to backup in the br-test bucket of the object storage service compatible with S3 protocol.

                $ ./br backup full --meta \"192.168.8.129:9559\" --s3.endpoint \"http://192.168.8.129:9000\" --storage=\"s3://br-test/backup/\" --s3.access_key=minioadmin --s3.secret_key=minioadmin --s3.region=default\n

              The parameters are as follows.

              Parameter Data type Required Default value Description -h,-help - No None Checks help for restoration. --debug - No None Checks for more log information. --log string No \"br.log\" Specifies detailed log path for restoration and backup. --meta string Yes None The IP address and port of the meta service. --space string Yes None (Experimental feature) Specifies the names of the spaces to be backed up. All spaces will be backed up if not specified. Multiple spaces can be specified, and format is --spaces nba_01 --spaces nba_02. --storage string Yes None The target storage URL of BR backup data. The format is: \\<Schema>://\\<PATH>. Schema: Optional values are local and s3. When selecting s3, you need to fill in s3.access_key, s3.endpoint, s3.region, and s3.secret_key.PATH: The path of the storage location. --s3.access_key string No None Sets AccessKey ID. --s3.endpoint string No None Sets the S3 endpoint URL, please specify the HTTP or HTTPS scheme explicitly. --s3.region string No None Sets the region or location to upload or download the backup. --s3.secret_key string No None Sets SecretKey for AccessKey ID."},{"location":"backup-and-restore/nebula-br/3.br-backup-data/#next_to_do","title":"Next to do","text":"

              After the backup files are generated, you can use the BR to restore them for NebulaGraph. For more information, see Use BR to restore data.

              "},{"location":"backup-and-restore/nebula-br/4.br-restore-data/","title":"Use BR to restore data","text":"

              If you use the BR to back up data, you can use it to restore the data to NebulaGraph. This topic introduces how to use the BR to restore data from backup files.

              Caution

              During the restoration process, the data on the target NebulaGraph cluster is removed and then is replaced with the data from the backup files. If necessary, back up the data on the target cluster.

              Caution

              The restoration process is performed OFFLINE.

              "},{"location":"backup-and-restore/nebula-br/4.br-restore-data/#prerequisites","title":"Prerequisites","text":"
              • Install BR and Agent and run Agent on each host in the cluster.
              • No application is connected to the target NebulaGraph cluster.
              • Make sure that the target and the source NebulaGraph clusters have the same topology, which means that they have exactly the same number of hosts. The number of data folders for each host is consistently distributed.
              "},{"location":"backup-and-restore/nebula-br/4.br-restore-data/#procedures","title":"Procedures","text":"

              In the BR installation directory (the default path of the compiled BR is ./br), run the following command to perform a full backup for the entire cluster.

              1. Users can use the following command to list the existing backup information:

                $ ./br show --storage <storage_path>\n
                For example, run the following command to list the backup information in the local /home/nebula/backup path.
                $ ./br show --storage \"local:///home/nebula/backup\"\n+----------------------------+---------------------+------------------------+-------------+------------+\n|            NAME            |     CREATE TIME     |         SPACES         | FULL BACKUP | ALL SPACES |\n+----------------------------+---------------------+------------------------+-------------+------------+\n| BACKUP_2022_02_10_07_40_41 | 2022-02-10 07:40:41 | basketballplayer       | true        | true       |\n| BACKUP_2022_02_11_08_26_43 | 2022-02-11 08:26:47 | basketballplayer,foesa | true        | true       |\n+----------------------------+---------------------+------------------------+-------------+------------+\n

                Or, you can run the following command to list the backup information stored in S3 URL s3://192.168.8.129:9000/br-test/backup.

                $ ./br show --s3.endpoint \"http://192.168.8.129:9000\" --storage=\"s3://br-test/backup/\" --s3.access_key=minioadmin --s3.secret_key=minioadmin --s3.region=default\n

                Parameter Data type Required Default value Description -h,-help - No None Checks help for restoration. -debug - No None Checks for more log information. -log string No \"br.log\" Specifies detailed log path for restoration and backup. --storage string Yes None The target storage URL of BR backup data. The format is: <Schema>://<PATH>. Schema: Optional values are local and s3. When selecting s3, you need to fill in s3.access_key, s3.endpoint, s3.region, and s3.secret_key.PATH: The path of the storage location. --s3.access_key string No None Sets AccessKey ID. --s3.endpoint string No None Sets the S3 endpoint URL, please specify the HTTP or HTTPS scheme explicitly. --s3.region string No None Sets the region or location to upload or download the backup. --s3.secret_key string No None Sets SecretKey for AccessKey ID.
              2. Run the following command to restore data.

                $ ./br restore full --meta <ip_address> --storage <storage_path> --name <backup_name>\n

                For example, run the following command to upload the backup files from the local /home/nebula/backup/ to the cluster where the meta service's address is 192.168.8.129:9559.

                $ ./br restore full --meta \"192.168.8.129:9559\" --storage \"local:///home/nebula/backup/\" --name BACKUP_2021_12_08_18_38_08\n

                Or, you can run the following command to upload the backup files from the S3 URL s3://192.168.8.129:9000/br-test/backup.

                $ ./br restore full --meta \"192.168.8.129:9559\" --s3.endpoint \"http://192.168.8.129:9000\" --storage=\"s3://br-test/backup/\" --s3.access_key=minioadmin --s3.secret_key=minioadmin --s3.region=\"default\" --name BACKUP_2021_12_08_18_38_08\n

                If the following information is returned, the data is restored successfully.

                Restore succeed.\n

                Caution

                If your new cluster hosts' IPs are not all the same as the backup cluster, after restoration, you should run add hosts to add the Storage host IPs in the new cluster one by one.

                The parameters are as follows.

                Parameter Data type Required Default value Description -h,-help - No None Checks help for restoration. -debug - No None Checks for more log information. -log string No \"br.log\" Specifies detailed log path for restoration and backup. -meta string Yes None The IP address and port of the meta service. -name string Yes None The name of backup. --storage string Yes None The target storage URL of BR backup data. The format is: \\<Schema>://\\<PATH>. Schema: Optional values are local and s3. When selecting s3, you need to fill in s3.access_key, s3.endpoint, s3.region, and s3.secret_key.PATH: The path of the storage location. --s3.access_key string No None Sets AccessKey ID. --s3.endpoint string No None Sets the S3 endpoint URL, please specify the HTTP or HTTPS scheme explicitly. --s3.region string No None Sets the region or location to upload or download the backup. --s3.secret_key string No None Sets SecretKey for AccessKey ID.
              3. Run the following command to clean up temporary files if any error occurred during backup. It will clean the files in cluster and external storage. You could also use it to clean up old backups files in external storage.

                $ ./br cleanup --meta <ip_address> --storage <storage_path> --name <backup_name>\n

                The parameters are as follows.

                Parameter Data type Required Default value Description -h,-help - No None Checks help for restoration. -debug - No None Checks for more log information. -log string No \"br.log\" Specifies detailed log path for restoration and backup. -meta string Yes None The IP address and port of the meta service. -name string Yes None The name of backup. --storage string Yes None The target storage URL of BR backup data. The format is: \\<Schema>://\\<PATH>. Schema: Optional values are local and s3. When selecting s3, you need to fill in s3.access_key, s3.endpoint, s3.region, and s3.secret_key.PATH: The path of the storage location. --s3.access_key string No None Sets AccessKey ID. --s3.endpoint string No None Sets the S3 endpoint URL, please specify the HTTP or HTTPS scheme explicitly. --s3.region string No None Sets the region or location to upload or download the backup. --s3.secret_key string No None Sets SecretKey for AccessKey ID.
              "},{"location":"connector/nebula-flink-connector/","title":"NebulaGraph Flink Connector","text":"

              NebulaGraph Flink Connector is a connector that helps Flink users quickly access NebulaGraph. NebulaGraph Flink Connector supports reading data from the NebulaGraph database or writing other external data to the NebulaGraph database.

              For more information, see NebulaGraph Flink Connector.

              "},{"location":"connector/nebula-flink-connector/#use_cases","title":"Use cases","text":"

              NebulaGraph Flink Connector applies to the following scenarios:

              • Read data from NebulaGraph for analysis and computation.
              • Write data back to NebulaGraph after analysis and computation.
              • Migrate the data of NebulaGraph.
              "},{"location":"connector/nebula-flink-connector/#release_note","title":"Release note","text":"

              Release

              "},{"location":"connector/nebula-flink-connector/#version_compatibility","title":"Version compatibility","text":"

              The correspondence between the NebulaGraph Flink Connector version and the NebulaGraph core version is as follows.

              Flink Connector version NebulaGraph version 3.0-SNAPSHOT nightly 3.8.0 3.x.x 3.5.0 3.x.x 3.3.0 3.x.x 3.0.0 3.x.x 2.6.1 2.6.0, 2.6.1 2.6.0 2.6.0, 2.6.1 2.5.0 2.5.0, 2.5.1 2.0.0 2.0.0, 2.0.1"},{"location":"connector/nebula-flink-connector/#prerequisites","title":"Prerequisites","text":"
              • Java 8 or later is installed.
              • Flink 1.11.x is installed.
              "},{"location":"connector/nebula-flink-connector/#get_nebulagraph_flink_connector","title":"Get NebulaGraph Flink Connector","text":""},{"location":"connector/nebula-flink-connector/#configure_maven_dependency","title":"Configure Maven dependency","text":"

              Add the following dependency to the Maven configuration file pom.xml to automatically obtain the Flink Connector.

              <dependency>\n    <groupId>com.vesoft</groupId>\n    <artifactId>nebula-flink-connector</artifactId>\n    <version>3.8.0</version>\n</dependency>\n
              "},{"location":"connector/nebula-flink-connector/#compile_and_package","title":"Compile and package","text":"

              Follow the steps below to compile and package the Flink Connector.

              1. Clone repository nebula-flink-connector.

                $ git clone -b release-3.8 https://github.com/vesoft-inc/nebula-flink-connector.git\n
              2. Enter the nebula-flink-connector directory.

              3. Compile and package.

                $ mvn clean package -Dmaven.test.skip=true\n

              After compilation, a file similar to nebula-flink-connector-3.8.0.jar is generated in the directory connector/target of the folder.

              "},{"location":"connector/nebula-flink-connector/#how_to_use","title":"How to use","text":""},{"location":"connector/nebula-flink-connector/#write_data_into_nebulagraph","title":"Write data into NebulaGraph","text":"
              StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();\nNebulaClientOptions nebulaClientOptions = new NebulaClientOptions.NebulaClientOptionsBuilder()\n                .setGraphAddress(\"127.0.0.1:9669\")\n                .setMetaAddress(\"127.0.0.1:9559\")\n                .build();\nNebulaGraphConnectionProvider graphConnectionProvider = new NebulaGraphConnectionProvider(nebulaClientOptions);\nNebulaMetaConnectionProvider metaConnectionProvider = new NebulaMetaConnectionProvider(nebulaClientOptions);\n\nVertexExecutionOptions executionOptions = new VertexExecutionOptions.ExecutionOptionBuilder()\n                .setGraphSpace(\"flinkSink\")\n                .setTag(\"player\")\n                .setIdIndex(0)\n                .setFields(Arrays.asList(\"name\", \"age\"))\n                .setPositions(Arrays.asList(1, 2))\n                .setBatchSize(2)\n                .build();\n\nNebulaVertexBatchOutputFormat outputFormat = new NebulaVertexBatchOutputFormat(\n                graphConnectionProvider, metaConnectionProvider, executionOptions);\nNebulaSinkFunction<Row> nebulaSinkFunction = new NebulaSinkFunction<>(outputFormat);\nDataStream<Row> dataStream = playerSource.map(row -> {\n            Row record = new org.apache.flink.types.Row(row.size());\n            for (int i = 0; i < row.size(); i++) {\n                record.setField(i, row.get(i));\n            }\n            return record;\n        });\ndataStream.addSink(nebulaSinkFunction);\nenv.execute(\"write nebula\")\n
              "},{"location":"connector/nebula-flink-connector/#read_data_from_nebulagraph","title":"Read data from NebulaGraph","text":"
              NebulaClientOptions nebulaClientOptions = new NebulaClientOptions.NebulaClientOptionsBuilder()\n        .setMetaAddress(\"127.0.0.1:9559\")\n        .build();\nstorageConnectionProvider = new NebulaStorageConnectionProvider(nebulaClientOptions);\nStreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();\nenv.setParallelism(1);\n\nVertexExecutionOptions vertexExecutionOptions = new VertexExecutionOptions.ExecutionOptionBuilder()\n        .setGraphSpace(\"flinkSource\")\n        .setTag(\"person\")\n        .setNoColumn(false)\n        .setFields(Arrays.asList())\n        .setLimit(100)\n        .build();\n\nNebulaSourceFunction sourceFunction = new NebulaSourceFunction(storageConnectionProvider)\n        .setExecutionOptions(vertexExecutionOptions);\nDataStreamSource<BaseTableRow> dataStreamSource = env.addSource(sourceFunction);\ndataStreamSource.map(row -> {\n    List<ValueWrapper> values = row.getValues();\n    Row record = new Row(15);\n    record.setField(0, values.get(0).asLong());\n    record.setField(1, values.get(1).asString());\n    record.setField(2, values.get(2).asString());\n    record.setField(3, values.get(3).asLong());\n    record.setField(4, values.get(4).asLong());\n    record.setField(5, values.get(5).asLong());\n    record.setField(6, values.get(6).asLong());\n    record.setField(7, values.get(7).asDate());\n    record.setField(8, values.get(8).asDateTime().getUTCDateTimeStr());\n    record.setField(9, values.get(9).asLong());\n    record.setField(10, values.get(10).asBoolean());\n    record.setField(11, values.get(11).asDouble());\n    record.setField(12, values.get(12).asDouble());\n    record.setField(13, values.get(13).asTime().getUTCTimeStr());\n    record.setField(14, values.get(14).asGeography());\n    return record;\n}).print();\nenv.execute(\"NebulaStreamSource\");\n
              "},{"location":"connector/nebula-flink-connector/#parameter_descriptions","title":"Parameter descriptions","text":"
              • NebulaClientOptions is the configuration for connecting to NebulaGraph, as described below.

                Parameter Type Required Description setGraphAddress String Yes The Graph service address of NebulaGraph. setMetaAddress String Yes The Meta service address of NebulaGraph.
              • VertexExecutionOptions is the configuration for reading vertices from and writing vertices to NebulaGraph, as described below.

                Parameter Type Required Description setGraphSpace String Yes The graph space name. setTag String Yes The tag name. setIdIndex Int Yes The subscript of the stream data field that is used as the VID when writing data to NebulaGraph. setFields List Yes A collection of the property names of a tag. It is used to write data to or read data from NebulaGraph. Make sure the setNoColumn is false when reading data; otherwise, the configuration is invalid. If this parameter is empty, all properties are read when reading data from NebulaGraph. setPositions List Yes A collection of the subscripts of the stream data fields. It indicates that the corresponding field values are written to NebulaGraph as property values. This parameter needs to correspond to setFields. setBatchSize String No The maximum number of data records to write to NebulaGraph at a time. The default value is 2000. setNoColumn String No The properties are not to be read if set to true when reading data. The default value is false. setLimit String No The maximum number of data records to pull at a time when reading data. The default value is 2000.
              • EdgeExecutionOptions is the configuration for reading edges from and writing edges to NebulaGraph, as described below.

                Parameter Type Required Description setGraphSpace String Yes The graph space name. setEdge String Yes The edge type name. setSrcIndex Int Yes The subscript of the stream data field that is used as the VID of the source vertex when writing data to NebulaGraph. setDstIndex Int Yes The subscript of the stream data field that is used as the VID of the destination vertex when writing data to NebulaGraph. setRankIndex Int Yes The subscript of the stream data field that is used as the rank of the edge when writing data to NebulaGraph. setFields List Yes A collection of the property names of an edge type. It is used to write data to or read data from NebulaGraph. Make sure the setNoColumn is false when reading data; otherwise, the configuration is invalid. If this parameter is empty, all properties are read when reading data from NebulaGraph. setPositions List Yes A collection of the subscripts of the stream data fields. It indicates that the corresponding field values are written to NebulaGraph as property values. This parameter needs to correspond to setFields. setBatchSize String No The maximum number of data records to write to NebulaGraph at a time. The default value is 2000. setNoColumn String No The properties are not to be read if set to true when reading data. The default value is false. setLimit String No The maximum number of data records to pull at a time when reading data. The default value is 2000.
              "},{"location":"connector/nebula-flink-connector/#example","title":"Example","text":"
              1. Create a graph space.

                NebulaCatalog nebulaCatalog = NebulaCatalogUtils.createNebulaCatalog(\n        \"NebulaCatalog\",\n        \"default\",\n        \"root\",\n        \"nebula\",\n        \"127.0.0.1:9559\",\n        \"127.0.0.1:9669\");\n\nEnvironmentSettings settings = EnvironmentSettings.newInstance()\n        .inStreamingMode()\n        .build();\nTableEnvironment tableEnv = TableEnvironment.create(settings);\n\ntableEnv.registerCatalog(CATALOG_NAME, nebulaCatalog);\ntableEnv.useCatalog(CATALOG_NAME);\n\nString createDataBase = \"CREATE DATABASE IF NOT EXISTS `db1`\"\n        + \" COMMENT 'space 1'\"\n        + \" WITH (\"\n        + \" 'partition_num' = '100',\"\n        + \" 'replica_factor' = '3',\"\n        + \" 'vid_type' = 'FIXED_STRING(10)'\"\n        + \")\";\ntableEnv.executeSql(createDataBase);\n
              2. Create a tag.

                tableEnvironment.executeSql(\"CREATE TABLE `person` (\"\n        + \" vid BIGINT,\"\n        + \" col1 STRING,\"\n        + \" col2 STRING,\"\n        + \" col3 BIGINT,\"\n        + \" col4 BIGINT,\"\n        + \" col5 BIGINT,\"\n        + \" col6 BIGINT,\"\n        + \" col7 DATE,\"\n        + \" col8 TIMESTAMP,\"\n        + \" col9 BIGINT,\"\n        + \" col10 BOOLEAN,\"\n        + \" col11 DOUBLE,\"\n        + \" col12 DOUBLE,\"\n        + \" col13 TIME,\"\n        + \" col14 STRING\"\n        + \") WITH (\"\n        + \" 'connector' = 'nebula',\"\n        + \" 'meta-address' = '127.0.0.1:9559',\"\n        + \" 'graph-address' = '127.0.0.1:9669',\"\n        + \" 'username' = 'root',\"\n        + \" 'password' = 'nebula',\"\n        + \" 'data-type' = 'vertex',\"\n        + \" 'graph-space' = 'flink_test',\"\n        + \" 'label-name' = 'person'\"\n        + \")\"\n);\n
              3. Create an edge type.

                tableEnvironment.executeSql(\"CREATE TABLE `friend` (\"\n        + \" sid BIGINT,\"\n        + \" did BIGINT,\"\n        + \" rid BIGINT,\"\n        + \" col1 STRING,\"\n        + \" col2 STRING,\"\n        + \" col3 BIGINT,\"\n        + \" col4 BIGINT,\"\n        + \" col5 BIGINT,\"\n        + \" col6 BIGINT,\"\n        + \" col7 DATE,\"\n        + \" col8 TIMESTAMP,\"\n        + \" col9 BIGINT,\"\n        + \" col10 BOOLEAN,\"\n        + \" col11 DOUBLE,\"\n        + \" col12 DOUBLE,\"\n        + \" col13 TIME,\"\n        + \" col14 STRING\"\n        + \") WITH (\"\n        + \" 'connector' = 'nebula',\"\n        + \" 'meta-address' = '127.0.0.1:9559',\"\n        + \" 'graph-address' = '127.0.0.1:9669',\"\n        + \" 'username' = 'root',\"\n        + \" 'password' = 'nebula',\"\n        + \" 'graph-space' = 'flink_test',\"\n        + \" 'label-name' = 'friend',\"\n        + \" 'data-type'='edge',\"\n        + \" 'src-id-index'='0',\"\n        + \" 'dst-id-index'='1',\"\n        + \" 'rank-id-index'='2'\"\n        + \")\"\n);\n
              4. Queries the data of an edge type and inserts it into another edge type.

                Table table = tableEnvironment.sqlQuery(\"SELECT * FROM `friend`\");\ntable.executeInsert(\"`friend_sink`\").await();\n
              "},{"location":"connector/nebula-spark-connector/","title":"NebulaGraph Spark Connector","text":"

              NebulaGraph Spark Connector is a Spark connector application for reading and writing NebulaGraph data in Spark standard format. NebulaGraph Spark Connector consists of two parts: Reader and Writer.

              • Reader

                Provides a Spark SQL interface. This interface can be used to read NebulaGraph data. It reads one vertex or edge type data at a time and assemble the result into a Spark DataFrame.

              • Writer

                Provides a Spark SQL interface. This interface can be used to write DataFrames into NebulaGraph in a row-by-row or batch-import way.

              For more information, see NebulaGraph Spark Connector.

              "},{"location":"connector/nebula-spark-connector/#version_compatibility","title":"Version compatibility","text":"

              The correspondence between the NebulaGraph Spark Connector version, the NebulaGraph core version and the Spark version is as follows.

              Spark Connector version NebulaGraph version Spark version nebula-spark-connector_3.0-3.0-SNAPSHOT.jar nightly 3.x nebula-spark-connector_2.2-3.0-SNAPSHOT.jar nightly 2.2.x nebula-spark-connector-3.0-SNAPSHOT.jar nightly 2.4.x nebula-spark-connector_3.0-3.8.0.jar 3.x 3.x nebula-spark-connector_2.2-3.8.0.jar 3.x 2.2.x nebula-spark-connector-3.8.0.jar 3.x 2.4.x nebula-spark-connector_3.0-3.6.0.jar 3.x 3.x nebula-spark-connector_2.2-3.6.0.jar 3.x 2.2.x nebula-spark-connector-3.6.0.jar 3.x 2.4.x nebula-spark-connector_2.2-3.4.0.jar 3.x 2.2.x nebula-spark-connector-3.4.0.jar 3.x 2.4.x nebula-spark-connector_2.2-3.3.0.jar 3.x 2.2.x nebula-spark-connector-3.3.0.jar 3.x 2.4.x nebula-spark-connector-3.0.0.jar 3.x 2.4.x nebula-spark-connector-2.6.1.jar 2.6.0, 2.6.1 2.4.x nebula-spark-connector-2.6.0.jar 2.6.0, 2.6.1 2.4.x nebula-spark-connector-2.5.1.jar 2.5.0, 2.5.1 2.4.x nebula-spark-connector-2.5.0.jar 2.5.0, 2.5.1 2.4.x nebula-spark-connector-2.1.0.jar 2.0.0, 2.0.1 2.4.x nebula-spark-connector-2.0.1.jar 2.0.0, 2.0.1 2.4.x nebula-spark-connector-2.0.0.jar 2.0.0, 2.0.1 2.4.x"},{"location":"connector/nebula-spark-connector/#use_cases","title":"Use cases","text":"

              NebulaGraph Spark Connector applies to the following scenarios:

              • Read data from NebulaGraph for analysis and computation.
              • Write data back to NebulaGraph after analysis and computation.
              • Migrate the data of NebulaGraph.
              • Graph computing with NebulaGraph Algorithm.
              "},{"location":"connector/nebula-spark-connector/#benefits","title":"Benefits","text":"

              The features of NebulaGraph Spark Connector 3.8.0 are as follows:

              • Supports multiple connection settings, such as timeout period, number of connection retries, number of execution retries, etc.
              • Supports multiple settings for data writing, such as setting the corresponding column as vertex ID, starting vertex ID, destination vertex ID or attributes.
              • Supports non-attribute reading and full attribute reading.
              • Supports reading NebulaGraph data into VertexRDD and EdgeRDD, and supports non-Long vertex IDs.
              • Unifies the extended data source of SparkSQL, and uses DataSourceV2 to extend NebulaGraph data.
              • Three write modes, insert, update and delete, are supported. insert mode will insert (overwrite) data, update mode will only update existing data, and delete mode will only delete data.
              "},{"location":"connector/nebula-spark-connector/#release_note","title":"Release note","text":"

              Release

              "},{"location":"connector/nebula-spark-connector/#get_nebulagraph_spark_connector","title":"Get NebulaGraph Spark Connector","text":""},{"location":"connector/nebula-spark-connector/#compile_and_package","title":"Compile and package","text":"
              1. Clone repository nebula-spark-connector.

                $ git clone -b release-3.8 https://github.com/vesoft-inc/nebula-spark-connector.git\n
              2. Enter the nebula-spark-connector directory.

              3. Compile and package. The procedure varies with Spark versions.

              Note

              Spark of the corresponding version has been installed.

              - Spark 2.4

              ```bash\n$ mvn clean package -Dmaven.test.skip=true -Dgpg.skip -Dmaven.javadoc.skip=true -pl nebula-spark-connector -am -Pscala-2.11 -Pspark-2.4\n```\n

              - Spark 2.2

              ```bash\n$ mvn clean package -Dmaven.test.skip=true -Dgpg.skip -Dmaven.javadoc.skip=true -pl nebula-spark-connector_2.2 -am -Pscala-2.11 -Pspark-2.2\n```\n

              - Spark 3.x

              ```bash\n$ mvn clean package -Dmaven.test.skip=true -Dgpg.skip -Dmaven.javadoc.skip=true -pl nebula-spark-connector_3.0 -am -Pscala-2.12 -Pspark-3.0\n```\n

              After compilation, a file similar to nebula-spark-connector-3.8.0-SHANPSHOT.jar is generated in the directory target of the folder.

              "},{"location":"connector/nebula-spark-connector/#download_maven_remote_repository","title":"Download maven remote repository","text":"

              Download

              "},{"location":"connector/nebula-spark-connector/#how_to_use","title":"How to use","text":"

              When using NebulaGraph Spark Connector to reading and writing NebulaGraph data, You can refer to the following code.

              # Read vertex and edge data from NebulaGraph.\nspark.read.nebula().loadVerticesToDF()\nspark.read.nebula().loadEdgesToDF()\n\n# Write dataframe data into NebulaGraph as vertex and edges.\ndataframe.write.nebula().writeVertices()\ndataframe.write.nebula().writeEdges()\n

              nebula() receives two configuration parameters, including connection configuration and read-write configuration.

              Note

              If the value of the properties contains Chinese characters, the encoding error may appear. Please add the following options when submitting the Spark task:

              --conf spark.driver.extraJavaOptions=-Dfile.encoding=utf-8\n--conf spark.executor.extraJavaOptions=-Dfile.encoding=utf-8\n
              "},{"location":"connector/nebula-spark-connector/#reading_data_from_nebulagraph","title":"Reading data from NebulaGraph","text":"
              val config = NebulaConnectionConfig\n  .builder()\n  .withMetaAddress(\"127.0.0.1:9559\")\n  .withConenctionRetry(2)\n  .withExecuteRetry(2)\n  .withTimeout(6000)\n  .build()\n\nval nebulaReadVertexConfig: ReadNebulaConfig = ReadNebulaConfig\n  .builder()\n  .withUser(\"root\")\n  .withPasswd(\"nebula\")\n  .withSpace(\"test\")\n  .withLabel(\"person\")\n  .withNoColumn(false)\n  .withReturnCols(List(\"birthday\"))\n  .withLimit(10)\n  .withPartitionNum(10)\n  .build()\nval vertex = spark.read.nebula(config, nebulaReadVertexConfig).loadVerticesToDF()\n\nval nebulaReadEdgeConfig: ReadNebulaConfig = ReadNebulaConfig\n  .builder()\n  .withUser(\"root\")\n  .withPasswd(\"nebula\")\n  .withSpace(\"test\")\n  .withLabel(\"knows\")\n  .withNoColumn(false)\n  .withReturnCols(List(\"degree\"))\n  .withLimit(10)\n  .withPartitionNum(10)\n  .build()\nval edge = spark.read.nebula(config, nebulaReadEdgeConfig).loadEdgesToDF()\n
              • NebulaConnectionConfig is the configuration for connecting to NebulaGraph, as described below.

                Parameter Required Description withMetaAddress Yes Specifies the IP addresses and ports of all Meta Services. Separate multiple addresses with commas. The format is ip1:port1,ip2:port2,.... Read data is no need to configure withGraphAddress. withConnectionRetry No The number of retries that the NebulaGraph Java Client connected to NebulaGraph. The default value is 1. withExecuteRetry No The number of retries that the NebulaGraph Java Client executed query statements. The default value is 1. withTimeout No The timeout for the NebulaGraph Java Client request response. The default value is 6000, Unit: ms.
              • ReadNebulaConfig is the configuration to read NebulaGraph data, as described below.

                Parameter Required Description withUser No NebulaGraph username. This parameter is required when the Storage services require authentication. This parameter is only supported in NebulaGraph Enterprise Edition. withPasswd No The password for the NebulaGraph username. This parameter is required when the Storage services require authentication. This parameter is only supported in NebulaGraph Enterprise Edition. withSpace Yes NebulaGraph space name. withLabel Yes The Tag or Edge type name within the NebulaGraph space. withNoColumn No Whether the property is not read. The default value is false, read property. If the value is true, the property is not read, the withReturnCols configuration is invalid. withReturnCols No Configures the set of properties for vertex or edges to read. the format is List(property1,property2,...), The default value is List(), indicating that all properties are read. withLimit No Configure the number of rows of data read from the server by the NebulaGraph Java Storage Client at a time. The default value is 1000. withPartitionNum No Configures the number of Spark partitions to read the NebulaGraph data. The default value is 100. This value should not exceed the number of slices in the graph space (partition_num).
              "},{"location":"connector/nebula-spark-connector/#write_data_into_nebulagraph","title":"Write data into NebulaGraph","text":"

              Note

              The values of columns in a dataframe are automatically written to NebulaGraph as property values.

              val config = NebulaConnectionConfig\n  .builder()\n  .withMetaAddress(\"127.0.0.1:9559\")\n  .withGraphAddress(\"127.0.0.1:9669\")\n  .withConenctionRetry(2)\n  .build()\n\nval nebulaWriteVertexConfig: WriteNebulaVertexConfig = WriteNebulaVertexConfig      \n  .builder()\n  .withSpace(\"test\")\n  .withTag(\"person\")\n  .withVidField(\"id\")\n  .withVidPolicy(\"hash\")\n  .withVidAsProp(true)\n  .withUser(\"root\")\n  .withPasswd(\"nebula\")\n  .withBatch(1000)\n  .build()    \ndf.write.nebula(config, nebulaWriteVertexConfig).writeVertices()\n\nval nebulaWriteEdgeConfig: WriteNebulaEdgeConfig = WriteNebulaEdgeConfig      \n  .builder()\n  .withSpace(\"test\")\n  .withEdge(\"friend\")\n  .withSrcIdField(\"src\")\n  .withSrcPolicy(null)\n  .withDstIdField(\"dst\")\n  .withDstPolicy(null)\n  .withRankField(\"degree\")\n  .withSrcAsProperty(true)\n  .withDstAsProperty(true)\n  .withRankAsProperty(true)\n  .withUser(\"root\")\n  .withPasswd(\"nebula\")\n  .withBatch(1000)\n  .build()\ndf.write.nebula(config, nebulaWriteEdgeConfig).writeEdges()\n

              The default write mode is insert, which can be changed to update or delete via withWriteMode configuration:

              val config = NebulaConnectionConfig\n  .builder()\n  .withMetaAddress(\"127.0.0.1:9559\")\n  .withGraphAddress(\"127.0.0.1:9669\")\n  .build()\nval nebulaWriteVertexConfig = WriteNebulaVertexConfig\n  .builder()\n  .withSpace(\"test\")\n  .withTag(\"person\")\n  .withVidField(\"id\")\n  .withVidAsProp(true)\n  .withBatch(1000)\n  .withWriteMode(WriteMode.UPDATE)\n  .build()\ndf.write.nebula(config, nebulaWriteVertexConfig).writeVertices()\n
              • NebulaConnectionConfig is the configuration for connecting to the nebula graph, as described below.

                Parameter Required Description withMetaAddress Yes Specifies the IP addresses and ports of all Meta Services. Separate multiple addresses with commas. The format is ip1:port1,ip2:port2,.... withGraphAddress Yes Specifies the IP addresses and ports of Graph Services. Separate multiple addresses with commas. The format is ip1:port1,ip2:port2,.... withConnectionRetry No Number of retries that the NebulaGraph Java Client connected to NebulaGraph. The default value is 1.
              • WriteNebulaVertexConfig is the configuration of the write vertex, as described below.

                Parameter Required Description withSpace Yes NebulaGraph space name. withTag Yes The Tag name that needs to be associated when a vertex is written. withVidField Yes The column in the DataFrame as the vertex ID. withVidPolicy No When writing the vertex ID, NebulaGraph use mapping function, supports HASH only. No mapping is performed by default. withVidAsProp No Whether the column in the DataFrame that is the vertex ID is also written as an property. The default value is false. If set to true, make sure the Tag has the same property name as VidField. withUser No NebulaGraph username. If authentication is disabled, you do not need to configure the username and password. withPasswd No The password for the NebulaGraph username. withBatch Yes The number of rows of data written at a time. The default value is 1000. withWriteMode No Write mode. The optional values are insert, update and delete. The default value is insert. withDeleteEdge No Whether to delete the related edges synchronously when deleting a vertex. The default value is false. It takes effect when withWriteMode is delete.
              • WriteNebulaEdgeConfig is the configuration of the write edge, as described below.

                Parameter Required Description withSpace Yes NebulaGraph space name. withEdge Yes The Edge type name that needs to be associated when a edge is written. withSrcIdField Yes The column in the DataFrame as the vertex ID. withSrcPolicy No When writing the starting vertex ID, NebulaGraph use mapping function, supports HASH only. No mapping is performed by default. withDstIdField Yes The column in the DataFrame that serves as the destination vertex. withDstPolicy No When writing the destination vertex ID, NebulaGraph use mapping function, supports HASH only. No mapping is performed by default. withRankField No The column in the DataFrame as the rank. Rank is not written by default. withSrcAsProperty No Whether the column in the DataFrame that is the starting vertex is also written as an property. The default value is false. If set to true, make sure Edge type has the same property name as SrcIdField. withDstAsProperty No Whether column that are destination vertex in the DataFrame are also written as property. The default value is false. If set to true, make sure Edge type has the same property name as DstIdField. withRankAsProperty No Whether column in the DataFrame that is the rank is also written as property.The default value is false. If set to true, make sure Edge type has the same property name as RankField. withUser No NebulaGraph username. If authentication is disabled, you do not need to configure the username and password. withPasswd No The password for the NebulaGraph username. withBatch Yes The number of rows of data written at a time. The default value is 1000. withWriteMode No Write mode. The optional values are insert, update and delete. The default value is insert.
              "},{"location":"graph-computing/nebula-algorithm/","title":"NebulaGraph Algorithm","text":"

              NebulaGraph Algorithm (Algorithm) is a Spark application based on GraphX. It uses a complete algorithm tool to perform graph computing on the data in the NebulaGraph database by submitting a Spark task. You can also programmatically use the algorithm under the lib repository to perform graph computing on DataFrame.

              "},{"location":"graph-computing/nebula-algorithm/#version_compatibility","title":"Version compatibility","text":"

              The correspondence between the NebulaGraph Algorithm release and the NebulaGraph core release is as follows.

              NebulaGraph NebulaGraph Algorithm nightly 3.0-SNAPSHOT 3.0.0 ~ 3.4.x 3.x.0 2.6.x 2.6.x 2.5.0\u30012.5.1 2.5.0 2.0.0\u30012.0.1 2.1.0"},{"location":"graph-computing/nebula-algorithm/#prerequisites","title":"Prerequisites","text":"

              Before using the NebulaGraph Algorithm, users need to confirm the following information:

              • The NebulaGraph services have been deployed and started. For details, see NebulaGraph Installation.
              • The Spark version is 2.4.x.
              • The Scala version is 2.11.
              • (Optional) If users need to clone, compile, and package the latest Algorithm in Github, install Maven.
              "},{"location":"graph-computing/nebula-algorithm/#limitations","title":"Limitations","text":"

              Graph computing outputs vertex datasets, and the algorithm results are stored in DataFrames as the properties of vertices. You can do further operations such as statistics and filtering according to your business requirements.

              !!!

              Before Algorithm v3.1.0, when submitting the algorithm package directly, the data of the vertex ID must be an integer. That is, the vertex ID can be INT or String, but the data itself is an integer.\n
              "},{"location":"graph-computing/nebula-algorithm/#supported_algorithms","title":"Supported algorithms","text":"

              The graph computing algorithms supported by NebulaGraph Algorithm are as follows.

              Algorithm Description Scenario Properties name Properties type PageRank The rank of pages Web page ranking, key node mining pagerank double/string Louvain Louvain Community mining, hierarchical clustering louvain int/string KCore K core Community discovery, financial risk control kcore int/string LabelPropagation Label propagation Information spreading, advertising, and community discovery lpa int/string Hanp Label propagation advanced Community discovery, recommendation system hanp int/string ConnectedComponent Weakly connected component Community discovery, island discovery cc int/string StronglyConnectedComponent Strongly connected component Community discovery scc int/string ShortestPath The shortest path Path planning, network planning shortestpath string TriangleCount Triangle counting Network structure analysis trianglecount int/string GraphTriangleCount Graph triangle counting Network structure and tightness analysis count int BetweennessCentrality Intermediate centrality Key node mining, node influence computing betweenness double/string ClosenessCentrality Closeness centrality Key node mining, node influence computing closeness double/string DegreeStatic Degree of statistical Graph structure analysis degree,inDegree,outDegree int/string ClusteringCoefficient Aggregation coefficient Recommendation system, telecom fraud analysis clustercoefficient double/string Jaccard Jaccard similarity Similarity computing, recommendation system jaccard string BFS Breadth-First Search Sequence traversal, shortest path planning bfs string DFS Depth-First Search Sequence traversal, shortest path planning dfs string Node2Vec - Graph classification node2vec string

              Note

              When writing the algorithm results into the NebulaGraph, make sure that the tag in the corresponding graph space has properties names and data types corresponding to the table above.

              "},{"location":"graph-computing/nebula-algorithm/#implementation_methods","title":"Implementation methods","text":"

              NebulaGraph Algorithm implements the graph calculating as follows:

              1. Read the graph data of DataFrame from the NebulaGraph database using the NebulaGraph Spark Connector.

              2. Transform the graph data of DataFrame to the GraphX graph.

              3. Use graph algorithms provided by GraphX (such as PageRank) or self-implemented algorithms (such as Louvain).

              For detailed implementation methods, see Scala file.

              "},{"location":"graph-computing/nebula-algorithm/#get_nebulagraph_algorithm","title":"Get NebulaGraph Algorithm","text":""},{"location":"graph-computing/nebula-algorithm/#compile_and_package","title":"Compile and package","text":"
              1. Clone the repository nebula-algorithm.

                $ git clone -b v3.0.0 https://github.com/vesoft-inc/nebula-algorithm.git\n
              2. Enter the directory nebula-algorithm.

                $ cd nebula-algorithm\n
              3. Compile and package.

                $ mvn clean package -Dgpg.skip -Dmaven.javadoc.skip=true -Dmaven.test.skip=true\n

              After the compilation, a similar file nebula-algorithm-3.x.x.jar is generated in the directory nebula-algorithm/target.

              "},{"location":"graph-computing/nebula-algorithm/#download_maven_from_the_remote_repository","title":"Download maven from the remote repository","text":"

              Download address

              "},{"location":"graph-computing/nebula-algorithm/#how_to_use","title":"How to use","text":"

              Note

              If the value of the properties contains Chinese characters, the encoding error may appear. Please add the following options when submitting the Spark task:

              --conf spark.driver.extraJavaOptions=-Dfile.encoding=utf-8\n--conf spark.executor.extraJavaOptions=-Dfile.encoding=utf-8\n
              "},{"location":"graph-computing/nebula-algorithm/#use_algorithm_interface_recommended","title":"Use algorithm interface (recommended)","text":"

              The lib repository provides 10 common graph algorithms.

              1. Add dependencies to the file pom.xml.

                <dependency>\n     <groupId>com.vesoft</groupId>\n     <artifactId>nebula-algorithm</artifactId>\n     <version>3.0.0</version>\n</dependency>\n
              2. Use the algorithm (take PageRank as an example) by filling in parameters. For more examples, see example.

                Note

                By default, the DataFrame that executes the algorithm sets the first column as the starting vertex, the second column as the destination vertex, and the third column as the edge weights (not the rank in the NebulaGraph).

                val prConfig = new PRConfig(5, 1.0)\nval prResult = PageRankAlgo.apply(spark, data, prConfig, false)\n

                If your vertex IDs are Strings, see Pagerank Example for how to encoding and decoding them.

              "},{"location":"graph-computing/nebula-algorithm/#submit_the_algorithm_package_directly","title":"Submit the algorithm package directly","text":"
              1. Set the Configuration file.

                {\n  # Configurations related to Spark\n  spark: {\n    app: {\n        name: LPA\n        # The number of partitions of Spark\n        partitionNum:100\n    }\n    master:local\n  }\n\n  data: {\n    # Data source. Optional values are nebula, csv, and json.\n    source: csv\n    # Data sink. The algorithm result will be written into this sink. Optional values are nebula, csv, and text.\n    sink: nebula\n    # Whether the algorithm has a weight.\n    hasWeight: false\n  }\n\n  # Configurations related to NebulaGraph\n  nebula: {\n    # Data source. When NebulaGraph is the data source of the graph computing, the configuration of `nebula.read` is valid.\n    read: {\n        # The IP addresses and ports of all Meta services. Multiple addresses are separated by commas (,). Example: \"ip1:port1,ip2:port2\".\n        # To deploy NebulaGraph by using Docker Compose, fill in the port with which Docker Compose maps to the outside.\n        # Check the status with `docker-compose ps`.\n        metaAddress: \"192.168.*.10:9559\"\n        # The name of the graph space in NebulaGraph.\n        space: basketballplayer\n        # Edge types in NebulaGraph. When there are multiple labels, the data of multiple edges will be merged.\n        labels: [\"serve\"]\n        # The property name of each edge type in NebulaGraph. This property will be used as the weight column of the algorithm. Make sure that it corresponds to the edge type.\n        weightCols: [\"start_year\"]\n    }\n\n    # Data sink. When the graph computing result sinks into NebulaGraph, the configuration of `nebula.write` is valid.\n    write:{\n        # The IP addresses and ports of all Graph services. Multiple addresses are separated by commas (,). Example: \"ip1:port1,ip2:port2\".\n        # To deploy by using Docker Compose, fill in the port with which Docker Compose maps to the outside.\n        # Check the status with `docker-compose ps`.\n        graphAddress: \"192.168.*.11:9669\"\n        # The IP addresses and ports of all Meta services. Multiple addresses are separated by commas (,). Example: \"ip1:port1,ip2:port2\".\n        # To deploy NebulaGraph by using Docker Compose, fill in the port with which Docker Compose maps to the outside.\n        # Check the staus with `docker-compose ps`.\n        metaAddress: \"192.168.*.12:9559\"\n        user:root\n        pswd:nebula\n        # Before submitting the graph computing task, create the graph space and tag.\n        # The name of the graph space in NebulaGraph.\n        space:nb\n        # The name of the tag in NebulaGraph. The graph computing result will be written into this tag. The property name of this tag is as follows.\n        # PageRank: pagerank\n        # Louvain: louvain\n        # ConnectedComponent: cc\n        # StronglyConnectedComponent: scc\n        # LabelPropagation: lpa\n        # ShortestPath: shortestpath\n        # DegreeStatic: degree,inDegree,outDegree\n        # KCore: kcore\n        # TriangleCount: tranglecpunt\n        # BetweennessCentrality: betweennedss\n        tag:pagerank\n    }\n    }  \n\n  local: {\n    # Data source. When the data source is csv or json, the configuration of `local.read` is valid.\n    read:{\n        filePath: \"hdfs://127.0.0.1:9000/edge/work_for.csv\"\n        # If the CSV file has a header or it is a json file, use the header. If not, use [_c0, _c1, _c2, ..., _cn] instead.\n        # The header of the source VID column.\n        srcId:\"_c0\"\n        # The header of the destination VID column.\n        dstId:\"_c1\"\n        # The header of the weight column.\n        weight: \"_c2\"\n        # Whether the csv file has a header.\n        header: false\n        # The delimiter in the csv file.\n        delimiter:\",\"\n    }\n\n    # Data sink. When the graph computing result sinks to the csv or text file, the configuration of `local.write` is valid.\n    write:{\n        resultPath:/tmp/\n    }\n    }\n\n\n  algorithm: {\n    # The algorithm to execute. Optional values are as follow: \n    # pagerank, louvain, connectedcomponent, labelpropagation, shortestpaths, \n    # degreestatic, kcore, stronglyconnectedcomponent, trianglecount ,\n    # betweenness, graphtriangleCount.\n    executeAlgo: pagerank\n\n    # PageRank\n    pagerank: {\n        maxIter: 10\n        resetProb: 0.15 \n        encodeId:false # Configure true if the VID is of string type.\n    }\n\n    # Louvain\n    louvain: {\n        maxIter: 20\n        internalIter: 10\n        tol: 0.5\n        encodeId:false # Configure true if the VID is of string type.\n    }\n\n   # ...\n\n}\n}\n

                Note

                When sink: nebula is configured, it means that the algorithm results will be written back to the NebulaGraph cluster. The property names of the tag have implicit conventions. For details, see Supported algorithms section of this topic.

              2. Submit the graph computing task.

                ${SPARK_HOME}/bin/spark-submit --master <mode> --class com.vesoft.nebula.algorithm.Main <nebula-algorithm-3.0.0.jar_path> -p <application.conf_path>\n

                Example:

                ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.algorithm.Main /root/nebula-algorithm/target/nebula-algorithm-3.0-SNAPSHOT.jar -p /root/nebula-algorithm/src/main/resources/application.conf\n
              "},{"location":"import-export/use-importer/","title":"NebulaGraph Importer","text":"

              NebulaGraph Importer (Importer) is a standalone tool for importing data from CSV files into NebulaGraph. Importer can read and batch import CSV file data from multiple data sources, and also supports batch update and delete operations.

              "},{"location":"import-export/use-importer/#features","title":"Features","text":"
              • Support multiple data sources, including local, S3, OSS, HDFS, FTP, SFTP, and GCS.
              • Support importing data from CSV format files. A single file can contain multiple tags, multiple edge types or a mix of both.
              • Support filtering the data from source.
              • Support batch operation, including insert, update, delete.
              • Support connecting to multiple Graph services simultaneously for importing and dynamic load balancing.
              • Support reconnect or retry after failure.
              • Support displaying statistics in multiple dimensions, including import time, import percentage, etc. Support for printing statistics in Console or logs.
              • Support SSL.
              "},{"location":"import-export/use-importer/#advantage","title":"Advantage","text":"
              • Lightweight and fast: no complex environment can be used, fast data import.
              • Flexible filtering: You can flexibly filter CSV data through configuration files.
              "},{"location":"import-export/use-importer/#version_compatibility","title":"Version compatibility","text":"

              The version correspondence between NebulaGraph and NebulaGraph Importer is as follows.

              NebulaGraph version NebulaGraph Importer version 3.x.x 3.x.x, 4.x.x 2.x.x 2.x.x, 3.x.x

              Note

              Importer 4.0.0 has redone the Importer for improved performance, but the configuration file is not compatible with older versions. It is recommended to use the new version of Importer.

              "},{"location":"import-export/use-importer/#release_note","title":"Release note","text":"

              Release

              "},{"location":"import-export/use-importer/#prerequisites","title":"Prerequisites","text":"

              Before using NebulaGraph Importer, make sure:

              • NebulaGraph service has been deployed. The deployment method is as follows:

                • Deploy NebulaGraph with Docker Compose
                • Install NebulaGraph with RPM or DEB package
                • Install NebulaGraph by compiling the source code
              • Schema is created in NebulaGraph, including space, Tag and Edge type, or set by parameter manager.hooks.before.statements.
              "},{"location":"import-export/use-importer/#steps","title":"Steps","text":"

              Prepare the CSV file to be imported and configure the YAML file to use the tool to batch write data into NebulaGraph.

              Note

              For details about the YAML configuration file, see Configuration File Description at the end of topic.

              "},{"location":"import-export/use-importer/#download_binary_package_and_run","title":"Download binary package and run","text":"
              1. Download the executable binary package.

                Note

                The file installation path based on the RPM/DEB package is /usr/bin/nebula-importer.

              2. Under the directory where the binary file is located, run the following command to start importing data.

                ./<binary_file_name> --config <yaml_config_file_path>\n
              "},{"location":"import-export/use-importer/#source_code_compile_and_run","title":"Source code compile and run","text":"

              Compiling the source code requires deploying a Golang environment. For details, see Build Go environment.

              1. Clone repository.

                git clone -b release-4.1 https://github.com/vesoft-inc/nebula-importer.git\n

                Note

                Use the correct branch. Different branches have different RPC protocols.

              2. Access the directory nebula-importer.

                cd nebula-importer\n
              3. Compile the source code.

                make build\n
              4. Start the service.

                ./bin/nebula-importer --config <yaml_config_file_path>\n
              "},{"location":"import-export/use-importer/#run_in_docker_mode","title":"Run in Docker mode","text":"

              Instead of installing the Go locale locally, you can use Docker to pull the image of the NebulaGraph Importer and mount the local configuration file and CSV data file into the container. The command is as follows:

              docker pull vesoft/nebula-importer:<version>\ndocker run --rm -ti \\\n      --network=host \\\n      -v <config_file>:<config_file> \\\n      -v <data_dir>:<data_dir> \\\n      vesoft/nebula-importer:<version> \\\n      --config <config_file>\n
              • <config_file>: The absolute path to the YAML configuration file.
              • <data_dir>: The absolute path to the CSV data file. If the file is not local, ignore this parameter.
              • <version>: NebulaGraph 3.x Please fill in 'v3'.

              Note

              A relative path is recommended. If you use a local absolute path, check that the path maps to the path in the Docker.

              Example:

              docker pull vesoft/nebula-importer:v4\ndocker run --rm -ti \\\n      --network=host \\\n      -v /home/user/config.yaml:/home/user/config.yaml \\\n      -v /home/user/data:/home/user/data \\\n      vesoft/nebula-importer:v4 \\\n      --config /home/user/config.yaml\n
              "},{"location":"import-export/use-importer/#configuration_file_description","title":"Configuration File Description","text":"

              Various example configuration files are available within the Github of the NebulaGraph Importer. The configuration files are used to describe information about the files to be imported, NebulaGraph server information, etc. The following section describes the fields within the configuration file in categories.

              Note

              If users download a binary package, create the configuration file manually.

              "},{"location":"import-export/use-importer/#client_configuration","title":"Client configuration","text":"

              Client configuration stores the configuration associated with the client's connection to the NebulaGraph.

              The example configuration is as follows:

              client:\n  version: v3\n  address: \"192.168.1.100:9669,192.168.1.101:9669\"\n  user: root\n  password: nebula\n  ssl:\n    enable: true\n    certPath: \"/home/xxx/cert/importer.crt\"\n    keyPath: \"/home/xxx/cert/importer.key\"\n    caPath: \"/home/xxx/cert/root.crt\"\n    insecureSkipVerify: false\n  concurrencyPerAddress: 10\n  reconnectInitialInterval: 1s\n  retry: 3\n  retryInitialInterval: 1s\n
              Parameter Default value Required Description client.version v3 Yes Specifies the major version of the NebulaGraph. Currently only v3 is supported. client.address \"127.0.0.1:9669\" Yes Specifies the address of the NebulaGraph. Multiple addresses are separated by commas. client.user root No NebulaGraph user name. client.password nebula No The password for the NebulaGraph user name. client.ssl.enable false No Specifies whether to enable SSL authentication. client.ssl.certPath - No Specifies the storage path for the SSL public key certificate.This parameter is required when SSL authentication is enabled. client.ssl.keyPath - No S pecifies the storage path for the SSL key.This parameter is required when SSL authentication is enabled. client.ssl.caPath - No Specifies the storage path for the CA root certificate.This parameter is required when SSL authentication is enabled. client.ssl.insecureSkipVerify false No Specifies whether the client skips verifying the server's certificate chain and hostname. If set to true, any certificate chain and hostname provided by the server is accepted. client.concurrencyPerAddress 10 No The number of concurrent client connections for a single graph service. client.retryInitialInterval 1s No Reconnect interval time. client.retry 3 No The number of retries for failed execution of the nGQL statement. client.retryInitialInterval 1s No Retry interval time."},{"location":"import-export/use-importer/#manager_configuration","title":"Manager configuration","text":"

              Manager configuration is a human-controlled configuration after connecting to the database.

              The example configuration is as follows:

              manager:\n  spaceName: basic_string_examples\n  batch: 128\n  readerConcurrency: 50\n  importerConcurrency: 512\n  statsInterval: 10s\n  hooks:\n    before:\n      - statements:\n        - UPDATE CONFIGS storage:wal_ttl=3600;\n        - UPDATE CONFIGS storage:rocksdb_column_family_options = { disable_auto_compactions = true };\n      - statements:\n        - |\n            DROP SPACE IF EXISTS basic_string_examples;\n            CREATE SPACE IF NOT EXISTS basic_string_examples(partition_num=5, replica_factor=1, vid_type=int);\n            USE basic_string_examples;\n        wait: 10s\n    after:\n      - statements:\n          - |\n            UPDATE CONFIGS storage:wal_ttl=86400;\n            UPDATE CONFIGS storage:rocksdb_column_family_options = { disable_auto_compactions = false };\n
              Parameter Default value Required Description manager.spaceName - Yes Specifies the NebulaGraph space to import the data into. Do not support importing multiple map spaces at the same time. manager.batch 128 No The batch size for executing statements (global configuration). Setting the batch size individually for a data source can using the parameter sources.batch below. manager.readerConcurrency 50 No The number of concurrent reads of the data source by the reader. manager.importerConcurrency 512 No The number of concurrent nGQL statements generated to be executed, and then will call the client to execute these nGQL statements. manager.statsInterval 10s No The time interval for printing statistical information manager.hooks.before.[].statements - No The command to execute in the graph space before importing. manager.hooks.before.[].wait - No The wait time after statements are executed. manager.hooks.after.[].statements - No The commands to execute in the graph space after importing. manager.hooks.after.[].wait - No The wait time after statements are executed."},{"location":"import-export/use-importer/#log_configuration","title":"Log configuration","text":"

              Log configuration is the logging-related configuration.

              The example configuration is as follows:

              log:\n  level: INFO\n  console: true\n  files:\n    - logs/nebula-importer.log\n
              Parameter Default value Required Description log.level INFO No Specifies the log level. Optional values are DEBUG, INFO, WARN, ERROR, PANIC, FATAL. log.console true No Whether to print the logs to console synchronously when storing logs. log.files - No The log file path. The log directory must exist."},{"location":"import-export/use-importer/#source_configuration","title":"Source configuration","text":"

              The Source configuration requires the configuration of data source information, data processing methods, and Schema mapping.

              The example configuration is as follows:

              sources:\n  - path: ./person.csv  # Required. Specifies the path where the data files are stored. If a relative path is used, the path and current configuration file directory are spliced. Wildcard filename is also supported, for example: ./follower-*.csv, please make sure that all matching files with the same schema.\n#  - s3: # AWS S3\n#      endpoint: endpoint    # Optional. The endpoint of S3 service, can be omitted if using AWS S3.\n#      region: us-east-1     # Required. The region of S3 service.\n#      bucket: gdelt-open-data    # Required. The bucket of file in S3 service.\n#      key: events/20190918.export.csv     # Required. The object key of file in S3 service.\n#      accessKeyID: \"\"    # Optional. The access key of S3 service. If it is public data, no need to configure.\n#      accessKeySecret: \"\"     # Optional. The secret key of S3 service. If it is public data, no need to configure.\n#  - oss:\n#      endpoint: https://oss-cn-hangzhou.aliyuncs.com    # Required. The endpoint of OSS service.\n#      bucket: bucketName    # Required. The bucket of file in OSS service.\n#      key: objectKey    # Required. The object key of file in OSS service.\n#      accessKeyID: accessKey    # Required. The access key of OSS service.\n#      accessKeySecret: secretKey    # Required. The secret key of OSS service.\n#  - ftp:\n#      host: 192.168.0.10    # Required. The host of FTP service.\n#      port: 21    # Required. The port of FTP service.\n#      user: user    # Required. The user of FTP service.\n#      password: password    # Required. The password of FTP service.\n#      path: \"/events/20190918.export.csv\"    # Required. The path of file in the FTP service.\n#  - sftp:\n#      host: 192.168.0.10    # Required. The host of SFTP service.\n#      port: 22    # Required. The port of SFTP service.\n#      user: user    # Required. The user of SFTP service.\n#      password: password    # Optional. The password of SFTP service.\n#      keyFile: keyFile    # Optional. The ssh key file path of SFTP service.\n#      keyData: keyData    $ Optional. The ssh key file content of SFTP service.\n#      passphrase: passphrase    # Optional. The ssh key passphrase of SFTP service.\n#      path: \"/events/20190918.export.csv\"    # Required. The path of file in the SFTP service.\n#  - hdfs:\n#      address: \"127.0.0.1:8020\"    # Required. The address of HDFS service.\n#      user: \"hdfs\"    # Optional. The user of HDFS service.\n#      servicePrincipalName: <Kerberos Service Principal Name>  # Optional. The name of the Kerberos service instance for the HDFS service when Kerberos authentication is enabled.\n#      krb5ConfigFile: <Kerberos config file>  # Optional. The path to the Kerberos configuration file for the HDFS service when Kerberos authentication is enabled. Defaults to `/etc/krb5.conf`.\n#      ccacheFile: <Kerberos ccache file>  # Optional. The path to the Kerberos ccache file for the HDFS service when Kerberos authentication is enabled.\n#      keyTabFile: <Kerberos keytab file>  # Optional. The path to the Kerberos keytab file for the HDFS service when Kerberos authentication is enabled.\n#      password: <Kerberos password>  # Optional. The Kerberos password for the HDFS service when Kerberos authentication is enabled.\n#      dataTransferProtection: <Kerberos Data Transfer Protection>  # Optional. The type of transport encryption when Kerberos authentication is enabled. Optional values are `authentication`, `integrity`, `privacy`.\n#      disablePAFXFAST: false  # Optional. Whether to disable the use of PA_FX_FAST for clients.\n#      path: \"/events/20190918.export.csv\"    # Required. The path to the file in the HDFS service. Wildcard filenames are also supported, e.g. `/events/*.export.csv`, make sure all matching files have the same schema.\n#  - gcs: # Google Cloud Storage\n#      bucket: chicago-crime-sample  # Required. The name of the bucket in the GCS service.\n#      key: stats/000000000000.csv  # Required. The path to the file in the GCS service.\n#      withoutAuthentication: false  # Optional. Whether to anonymize access. Defaults to false, which means access with credentials.\n#      # When using credentials access, one of the credentialsFile and credentialsJSON parameters is sufficient.\n#      credentialsFile: \"/path/to/your/credentials/file\"  # Optional. The path to the credentials file for the GCS service.\n#      credentialsJSON: '{  # Optional. The JSON content of the credentials for the GCS service.\n#        \"type\": \"service_account\",\n#        \"project_id\": \"your-project-id\",\n#        \"private_key_id\": \"key-id\",\n#        \"private_key\": \"-----BEGIN PRIVATE KEY-----\\nxxxxx\\n-----END PRIVATE KEY-----\\n\",\n#        \"client_email\": \"your-client@your-project-id.iam.gserviceaccount.com\",\n#        \"client_id\": \"client-id\",\n#        \"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\",\n#        \"token_uri\": \"https://oauth2.googleapis.com/token\",\n#        \"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\",\n#        \"client_x509_cert_url\": \"https://www.googleapis.com/robot/v1/metadata/x509/your-client%40your-project-id.iam.gserviceaccount.com\",\n#        \"universe_domain\": \"googleapis.com\"\n#      }'\n    batch: 256\n    csv:\n      delimiter: \"|\"\n      withHeader: false\n      lazyQuotes: false\n    tags:\n    - name: Person\n#      mode: INSERT\n#      filter:  \n#        expr: Record[1] == \"XXX\"    \n      id:\n        type: \"STRING\"\n        function: \"hash\"\n#       index: 0        \n        concatItems:\n          - person_\n          - 0\n          - _id\n      props:\n        - name: \"firstName\"\n          type: \"STRING\"\n          index: 1\n        - name: \"lastName\"\n          type: \"STRING\"\n          index: 2\n        - name: \"gender\"\n          type: \"STRING\"\n          index: 3\n          nullable: true\n          defaultValue: female\n        - name: \"birthday\"\n          type: \"DATE\"\n          index: 4\n          nullable: true\n          nullValue: _NULL_\n        - name: \"creationDate\"\n          type: \"DATETIME\"\n          index: 5\n        - name: \"locationIP\"\n          type: \"STRING\"\n          index: 6\n        - name: \"browserUsed\"\n          type: \"STRING\"\n          index: 7\n  - path: ./knows.csv\n    batch: 256\n    edges:\n    - name: KNOWS # person_knows_person\n#      mode: INSERT\n#      filter:  \n#        expr: Record[1] == \"XXX\"\n      src:\n        id:\n          type: \"STRING\"\n          concatItems:\n            - person_\n            - 0\n            - _id\n      dst:\n        id:\n          type: \"STRING\"\n          concatItems:\n            - person_\n            - 1\n            - _id\n      props:\n        - name: \"creationDate\"\n          type: \"DATETIME\"\n          index: 2\n          nullable: true\n          nullValue: _NULL_\n          defaultValue: 0000-00-00T00:00:00\n

              The configuration mainly includes the following parts:

              • Specify the data source information.
              • Specifies the batch size for executing statements.
              • Specifies the CSV file format information.
              • Specifies the schema mapping for Tag.
              • Specifies the schema mapping for Edge type.
              Parameter Default value Required Description sources.pathsources.s3sources.osssources.ftpsources.sftpsources.hdfs - No Specify data source information, such as local file, HDFS, and S3. Only one source can be configured for the source. Configure multiple sources in multiple source.See the comments in the example for configuration items for different data sources. sources.batch 256 No The batch size for executing statements when importing this data source. The priority is higher than manager.batch. sources.csv.delimiter , No Specifies the delimiter for the CSV file. Only 1-character string separators are supported. Special characters like tabs (\\t) and hexadecimal values (e.g., 0x03 or Ctrl+C) must be properly escaped and enclosed in double quotes, such as \"\\t\" for tabs and \"\\x03\" or \"\\u0003\" for hexadecimal values, instead of using single quotes. For details on escaping special characters in yaml format, see Escaped Characters. sources.csv.withHeader false No Whether to ignore the first record in the CSV file. sources.csv.lazyQuotes false No Whether to allow lazy quotes. If lazyQuotes is true, a quote may appear in an unquoted field and a non-doubled quote may appear in a quoted field. sources.tags.name - Yes The tag name. sources.tags.mode INSERT No Batch operation types, including insert, update and delete. Optional values are INSERT, UPDATE and DELETE. sources.tags.filter.expr - No Filter the data and only import if the filter conditions are met. Supported comparison characters are ==, ! =, <, >, <= and >=. Logical operators supported are not (!) , and (&&) and or (||). For example (Record[0] == \"Mahinda\" or Record[0] == \"Michael\") and Record[3] == \"male\". sources.tags.id.type STRING No The type of the VID. sources.tags.id.function - No Functions to generate the VID. Currently, only function hash are supported. sources.tags.id.index - No The column number corresponding to the VID in the data file. If sources.tags.id.concatItems is not configured, this parameter must be configured. sources.tags.id.concatItems - No Used to concatenate two or more arrays, the concatenated items can be string, int or mixed. string stands for a constant, int for an index column. If this parameter is set, the sources.tags.id.index parameter will not take effect. sources.tags.ignoreExistedIndex true No Whether to enable IGNORE_EXISTED_INDEX, that is, do not update index after insertion vertex. sources.tags.props.name - Yes The tag property name, which must match the Tag property in the database. sources.tags.props.type STRING No Property data type, supporting BOOL, INT, FLOAT, DOUBLE, STRING, TIME, TIMESTAMP, DATE, DATETIME, GEOGRAPHY, GEOGRAPHY(POINT), GEOGRAPHY(LINESTRING) and GEOGRAPHY(POLYGON). sources.tags.props.index - Yes The property corresponds to the column number in the data file. sources.tags.props.nullable false No Whether this prop property can be NULL, optional values is true or false. sources.tags.props.nullValue - No Ignored when nullable is false. The value used to determine whether it is a NULL. The property is set to NULL when the value is equal to nullValue. sources.tags.props.alternativeIndices - No Ignored when nullable is false. The property is fetched from records according to the indices in order until not equal to nullValue. sources.tags.props.defaultValue - No Ignored when nullable is false. The property default value, when all the values obtained by index and alternativeIndices are nullValue. sources.edges.name - Yes The edge type name. sources.edges.mode INSERT No Batch operation types, including insert, update and delete. Optional values are INSERT, UPDATE and DELETE. sources.edges.filter.expr - No Filter the data and only import if the filter conditions are met. Supported comparison characters are ==, ! =, <, >, <= and >=. Logical operators supported are not (!) , and (&&) and or (||). For example (Record[0] == \"Mahinda\" or Record[0] == \"Michael\") and Record[3] == \"male\". sources.edges.src.id.type STRING No The data type of the VID at the starting vertex on the edge. sources.edges.src.id.index - Yes The column number in the data file corresponding to the VID at the starting vertex on the edge. sources.edges.dst.id.type STRING No The data type of the VID at the destination vertex on the edge. sources.edges.dst.id.index - Yes The column number in the data file corresponding to the VID at the destination vertex on the edge. sources.edges.rank.index - No The column number in the data file corresponding to the rank on the edge. sources.edges.ignoreExistedIndex true No Whether to enable IGNORE_EXISTED_INDEX, that is, do not update index after insertion vertex. sources.edges.props.name - No The edge type property name, which must match the Tag property in the database. sources.edges.props.type STRING No Property data type, supporting BOOL, INT, FLOAT, DOUBLE, STRING, TIME, TIMESTAMP, DATE, DATETIME, GEOGRAPHY, GEOGRAPHY(POINT), GEOGRAPHY(LINESTRING) and GEOGRAPHY(POLYGON). sources.edges.props.index - No The property corresponds to the column number in the data file. sources.edges.props.nullable - No Whether this prop property can be NULL, optional values is true or false. sources.edges.props.nullValue - No Ignored when nullable is false. The value used to determine whether it is a NULL. The property is set to NULL when the value is equal to nullValue. sources.edges.props.defaultValue - No Ignored when nullable is false. The property default value, when all the values obtained by index and alternativeIndices are nullValue.

              Note

              The sequence numbers of the columns in the CSV file start from 0, that is, the sequence numbers of the first column are 0, and the sequence numbers of the second column are 1.

              "},{"location":"import-export/use-importer/#faq","title":"FAQ","text":""},{"location":"import-export/use-importer/#what_are_the_descriptions_of_the_fields_in_the_log_output","title":"What are the descriptions of the fields in the log output?","text":"

              The following is an example of a log entry:

              \u201cmsg\u201d: \u201c44m20s 2h7m10s 25.85%(129 GiB/498 GiB) Records{Finished: 302016726, Failed: 0, Rate: 113538.13/s}, Requests{Finished: 181786, Failed: 0, Latency: 4.046496736s/4.06694393s, Rate: 68.34/s}, Processed{Finished: 908575178, Failed: 0, Rate: 341563.62/s}\u201d\n

              The fields are described below:

              • 44m20s 2h7m10s 25.85%(129 GiB/498 GiB) corresponds to basic information about the importing process.
                • The consumed time.
                • The expected remaining time.
                • The percentage of data processed.
                • The size of data processed.
                • The total data size.
              • Records corresponds to the records of the CSV files.
                • Finished: The number of the completed records.
                • Failed: The number of the failed records.
                • Rate: The number of records imported per second.
              • Requests corresponds to the requests.
                • Finished: The number of the completed requests.
                • Failed: The number of the failed requests.
                • Latency: The time consumed by server-side requests / The time consumed by client-side requests.
                • Rate: The number of requests processed per second.
              • Processed corresponds to nodes and edges.
                • Finished: The number of the completed nodes and edges.
                • Failed: The number of the failed nodes and edges.
                • Rate: The number of nodes and edges processed per second.
              "},{"location":"import-export/write-tools/","title":"Import and export tools overview","text":""},{"location":"import-export/write-tools/#import_tools","title":"Import tools","text":"

              There are many ways to write NebulaGraph master:

              • Import with the command -f: This method imports a small number of prepared nGQL files, which is suitable to prepare for a small amount of manual test data.
              • Import with Studio: This method uses a browser to import multiple CSV files of this machine. A single file cannot exceed 100 MB, and its format is limited.
              • Import with Importer: This method imports multiple CSV files on a single machine with unlimited size and flexible format. Suitable for scenarios with less than one billion records of data.
              • Import with Exchange: This method imports from various distribution sources, such as Neo4j, Hive, MySQL, etc., which requires a Spark cluster. Suitable for scenarios with more than one billion records of data.
              • Read and write APIs with Spark-connector/Flink-connector: This method requires you to write a small amount of code to make use of the APIs provided by Spark/Flink connector.
              • Import with C++/GO/Java/Python SDK: This method imports in the way of writing programs, which requires certain programming and tuning skills.

              The following figure shows the positions of these ways:

              "},{"location":"import-export/write-tools/#export_tools","title":"Export tools","text":"
              • Read and write APIs with Spark-connector/Flink-connector: This method requires you to write a small amount of code to make use of the APIs provided by Spark/Flink connector.
              • Export the data in database to a CSV file or another graph space (different NebulaGraph database clusters are supported) using the export function of the Exchange.

                Enterpriseonly

                The export function is exclusively available in the Enterprise Edition. If you require access to this version, please contact us.

              "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/","title":"Exchange FAQ","text":""},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#compilation","title":"Compilation","text":""},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_some_packages_not_in_central_repository_failed_to_download_error_could_not_resolve_dependencies_for_project_xxx","title":"Q: Some packages not in central repository failed to download, error: Could not resolve dependencies for project xxx","text":"

              Please check the mirror part of Maven installation directory libexec/conf/settings.xml:

              <mirror>\n    <id>alimaven</id>\n    <mirrorOf>central</mirrorOf>\n    <name>aliyun maven</name>\n    <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>\n</mirror>\n

              Check whether the value of mirrorOf is configured to *. If it is, change it to central or *,!SparkPackagesRepo,!bintray-streamnative-maven.

              Reason: There are two dependency packages in Exchange's pom.xml that are not in Maven's central repository. pom.xml configures the repository address for these two dependencies. If the mirrorOf value for the mirror address configured in Maven is *, all dependencies will be downloaded from the Central repository, causing the download to fail.

              "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_unable_to_download_snapshot_packages_when_compiling_exchange","title":"Q: Unable to download SNAPSHOT packages when compiling Exchange","text":"

              Problem description: The system reports Could not find artifact com.vesoft:client:jar:xxx-SNAPSHOT when compiling.

              Cause: There is no local Maven repository for storing or downloading SNAPSHOT packages. The default central repository in Maven only stores official releases, not development versions (SNAPSHOT).

              Solution: Add the following configuration in the profiles scope of Maven's setting.xml file:

                <profile>\n     <activation>\n        <activeByDefault>true</activeByDefault>\n     </activation>\n     <repositories>\n        <repository>\n            <id>snapshots</id>\n            <url>https://oss.sonatype.org/content/repositories/snapshots/</url>\n            <snapshots>\n               <enabled>true</enabled>\n            </snapshots>\n      </repository>\n     </repositories>\n  </profile>\n
              "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#execution","title":"Execution","text":""},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_error_javalangclassnotfoundexception_comvesoftnebulaexchangeexchange","title":"Q: Error: java.lang.ClassNotFoundException: com.vesoft.nebula.exchange.Exchange","text":"

              To submit a task in Yarn-Cluster mode, run the following command, especially the two '--conf' commands in the example.

              $SPARK_HOME/bin/spark-submit --class com.vesoft.nebula.exchange.Exchange \\\n--master yarn-cluster \\\n--files application.conf \\\n--conf spark.driver.extraClassPath=./ \\\n--conf spark.executor.extraClassPath=./ \\\nnebula-exchange-3.0.0.jar \\\n-c application.conf\n
              "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_error_method_name_xxx_not_found","title":"Q: Error: method name xxx not found","text":"

              Generally, the port configuration is incorrect. Check the port configuration of the Meta service, Graph service, and Storage service.

              "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_error_nosuchmethod_methodnotfound_exception_in_thread_main_javalangnosuchmethoderror_etc","title":"Q: Error: NoSuchMethod, MethodNotFound (Exception in thread \"main\" java.lang.NoSuchMethodError, etc)","text":"

              Most errors are caused by JAR package conflicts or version conflicts. Check whether the version of the error reporting service is the same as that used in Exchange, especially Spark, Scala, and Hive.

              "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_when_exchange_imports_hive_data_error_exception_in_thread_main_orgapachesparksqlanalysisexception_table_or_view_not_found","title":"Q: When Exchange imports Hive data, error: Exception in thread \"main\" org.apache.spark.sql.AnalysisException: Table or view not found","text":"

              Check whether the -h parameter is omitted in the command for submitting the Exchange task and whether the table and database are correct, and run the user-configured exec statement in spark-SQL to verify the correctness of the exec statement.

              "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_run_error_comfacebookthriftprotocoltprotocolexception_expected_protocol_id_xxx","title":"Q: Run error: com.facebook.thrift.protocol.TProtocolException: Expected protocol id xxx","text":"

              Check that the NebulaGraph service port is configured correctly.

              • For source, RPM, or DEB installations, configure the port number corresponding to --port in the configuration file for each service.
              • For docker installation, configure the docker mapped port number as follows:

                Execute docker-compose ps in the nebula-docker-compose directory, for example:

                $ docker-compose ps\n              Name                             Command                  State                                                         Ports\n---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\nnebula-docker-compose_graphd_1      /usr/local/nebula/bin/nebu ...   Up (healthy)   0.0.0.0:33205->19669/tcp, 0.0.0.0:33204->19670/tcp, 0.0.0.0:9669->9669/tcp\nnebula-docker-compose_metad0_1      ./bin/nebula-metad --flagf ...   Up (healthy)   0.0.0.0:33165->19559/tcp, 0.0.0.0:33162->19560/tcp, 0.0.0.0:33167->9559/tcp, 9560/tcp\nnebula-docker-compose_metad1_1      ./bin/nebula-metad --flagf ...   Up (healthy)   0.0.0.0:33166->19559/tcp, 0.0.0.0:33163->19560/tcp, 0.0.0.0:33168->9559/tcp, 9560/tcp\nnebula-docker-compose_metad2_1      ./bin/nebula-metad --flagf ...   Up (healthy)   0.0.0.0:33161->19559/tcp, 0.0.0.0:33160->19560/tcp, 0.0.0.0:33164->9559/tcp, 9560/tcp\nnebula-docker-compose_storaged0_1   ./bin/nebula-storaged --fl ...   Up (healthy)   0.0.0.0:33180->19779/tcp, 0.0.0.0:33178->19780/tcp, 9777/tcp, 9778/tcp, 0.0.0.0:33183->9779/tcp, 9780/tcp\nnebula-docker-compose_storaged1_1   ./bin/nebula-storaged --fl ...   Up (healthy)   0.0.0.0:33175->19779/tcp, 0.0.0.0:33172->19780/tcp, 9777/tcp, 9778/tcp, 0.0.0.0:33177->9779/tcp, 9780/tcp\nnebula-docker-compose_storaged2_1   ./bin/nebula-storaged --fl ...   Up (healthy)   0.0.0.0:33184->19779/tcp, 0.0.0.0:33181->19780/tcp, 9777/tcp, 9778/tcp, 0.0.0.0:33185->9779/tcp, 9780/tcp\n

                Check the Ports column to find the docker mapped port number, for example:

                - The port number available for Graph service is 9669.

                - The port number for Meta service are 33167, 33168, 33164.

                - The port number for Storage service are 33183, 33177, 33185.

              "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_error_exception_in_thread_main_comfacebookthriftprotocoltprotocolexception_the_field_code_has_been_assigned_the_invalid_value_-4","title":"Q: Error: Exception in thread \"main\" com.facebook.thrift.protocol.TProtocolException: The field 'code' has been assigned the invalid value -4","text":"

              Check whether the version of Exchange is the same as that of NebulaGraph. For more information, see Limitations.

              "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_how_to_correct_the_encoding_error_when_importing_data_in_a_spark_environment","title":"Q: How to correct the encoding error when importing data in a Spark environment?","text":"

              It may happen if the property value of the data contains Chinese characters. The solution is to add the following options before the JAR package path in the import command:

              --conf spark.driver.extraJavaOptions=-Dfile.encoding=utf-8\n--conf spark.executor.extraJavaOptions=-Dfile.encoding=utf-8\n

              Namely:

              <spark_install_path>/bin/spark-submit --master \"local\" \\\n--conf spark.driver.extraJavaOptions=-Dfile.encoding=utf-8 \\\n--conf spark.executor.extraJavaOptions=-Dfile.encoding=utf-8 \\\n--class com.vesoft.nebula.exchange.Exchange \\\n<nebula-exchange-3.x.y.jar_path> -c <application.conf_path>\n

              In YARN, use the following command:

              <spark_install_path>/bin/spark-submit \\\n--class com.vesoft.nebula.exchange.Exchange \\\n--master yarn-cluster \\\n--files <application.conf_path> \\\n--conf spark.driver.extraClassPath=./ \\\n--conf spark.executor.extraClassPath=./ \\\n--conf spark.driver.extraJavaOptions=-Dfile.encoding=utf-8 \\\n--conf spark.executor.extraJavaOptions=-Dfile.encoding=utf-8 \\\n<nebula-exchange-3.x.y.jar_path> \\\n-c application.conf\n
              "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_orgrocksdbrocksdbexception_while_open_a_file_for_appending_pathsst1-xxxsst_no_such_file_or_directory","title":"Q: org.rocksdb.RocksDBException: While open a file for appending: /path/sst/1-xxx.sst: No such file or directory","text":"

              Solution:

              1. Check if /path exists. If not, or if the path is set incorrectly, create or correct it.
              2. Check if Spark's current user on each machine has the operation permission on /path. If not, grant the permission.
              "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#configuration","title":"Configuration","text":""},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_which_configuration_fields_will_affect_import_performance","title":"Q: Which configuration fields will affect import performance?","text":"
              • batch: The number of data contained in each nGQL statement sent to the NebulaGraph service.
              • partition: The number of partitions to be created when the data is written to NebulaGraph, indicating the number of concurrent data imports.
              • nebula.rate: Get a token from the token bucket before sending a request to NebulaGraph.

                - limit: Represents the size of the token bucket.

                - timeout: Represents the timeout period for obtaining the token.

              The values of these four parameters can be adjusted appropriately according to the machine performance. If the leader of the Storage service changes during the import process, you can adjust the values of these four parameters to reduce the import speed.

              "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#others","title":"Others","text":""},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_which_versions_of_nebulagraph_are_supported_by_exchange","title":"Q: Which versions of NebulaGraph are supported by Exchange?","text":"

              See Limitations.

              "},{"location":"import-export/nebula-exchange/ex-ug-FAQ/#q_what_is_the_relationship_between_exchange_and_spark_writer","title":"Q: What is the relationship between Exchange and Spark Writer?","text":"

              Exchange is the Spark application developed based on Spark Writer. Both are suitable for bulk migration of cluster data to NebulaGraph in a distributed environment, but later maintenance work will be focused on Exchange. Compared with Spark Writer, Exchange has the following improvements:

              • It supports more abundant data sources, such as MySQL, Neo4j, Hive, HBase, Kafka, Pulsar, etc.
              • It fixed some problems of Spark Writer. For example, when Spark reads data from HDFS, the default source data is String, which may be different from the NebulaGraph's Schema. So Exchange adds automatic data type matching and type conversion. When the data type in the NebulaGraph's Schema is non-String (e.g. double), Exchange converts the source data of String type to the corresponding type.
              "},{"location":"import-export/nebula-exchange/ex-ug-compile/","title":"Get Exchange","text":"

              This topic introduces how to get the JAR file of NebulaGraph Exchange.

              "},{"location":"import-export/nebula-exchange/ex-ug-compile/#download_the_jar_file_directly","title":"Download the JAR file directly","text":"

              The JAR file of Exchange Community Edition can be downloaded directly.

              To download Exchange Enterprise Edition, contact us.

              "},{"location":"import-export/nebula-exchange/ex-ug-compile/#get_the_jar_file_by_compiling_the_source_code","title":"Get the JAR file by compiling the source code","text":"

              You can get the JAR file of Exchange Community Edition by compiling the source code. The following introduces how to compile the source code of Exchange.

              Enterpriseonly

              You can get Exchange Enterprise Edition in NebulaGraph Enterprise Edition Package only.

              "},{"location":"import-export/nebula-exchange/ex-ug-compile/#prerequisites","title":"Prerequisites","text":"
              • Install Maven.
              • Install the correct version of Apache Spark. Exporting data from different sources requires different Spark versions. For more information, see Software dependencies.
              "},{"location":"import-export/nebula-exchange/ex-ug-compile/#steps","title":"Steps","text":"
              1. Clone the repository nebula-exchange in the / directory.

                git clone -b release-3.8 https://github.com/vesoft-inc/nebula-exchange.git\n
              2. Switch to the directory nebula-exchange.

                cd nebula-exchange\n
              3. Package NebulaGraph Exchange. Run the following command based on the Spark version:

                • For Spark 2.2\uff1a

                  mvn clean package -Dmaven.test.skip=true -Dgpg.skip -Dmaven.javadoc.skip=true \\\n-pl nebula-exchange_spark_2.2 -am -Pscala-2.11 -Pspark-2.2\n
                • For Spark 2.4\uff1a

                  mvn clean package -Dmaven.test.skip=true -Dgpg.skip -Dmaven.javadoc.skip=true \\\n-pl nebula-exchange_spark_2.4 -am -Pscala-2.11 -Pspark-2.4\n
                • For Spark 3.0\uff1a

                  mvn clean package -Dmaven.test.skip=true -Dgpg.skip -Dmaven.javadoc.skip=true \\\n-pl nebula-exchange_spark_3.0 -am -Pscala-2.12 -Pspark-3.0\n

              After the compilation is successful, you can find the nebula-exchange_spark_x.x-release-3.8.jar file in the nebula-exchange_spark_x.x/target/ directory. x.x indicates the Spark version, for example, 2.4.

              Note

              The JAR file version changes with the release of the NebulaGraph Java Client. Users can view the latest version on the Releases page.

              When migrating data, you can refer to configuration file target/classes/application.conf.

              "},{"location":"import-export/nebula-exchange/ex-ug-compile/#failed_to_download_the_dependency_package","title":"Failed to download the dependency package","text":"

              If downloading dependencies fails when compiling:

              • Check the network settings and ensure that the network is normal.
              • Modify the mirror part of Maven installation directory libexec/conf/settings.xml:

                <mirror>\n <id>alimaven</id>\n <mirrorOf>central</mirrorOf>\n <name>aliyun maven</name>\n <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>\n</mirror>\n
              "},{"location":"import-export/nebula-exchange/about-exchange/ex-ug-limitations/","title":"Limitations","text":"

              This topic describes some of the limitations of using Exchange 3.x.

              "},{"location":"import-export/nebula-exchange/about-exchange/ex-ug-limitations/#environment","title":"Environment","text":"

              Exchange 3.x supports the following operating systems:

              • CentOS 7
              • macOS
              "},{"location":"import-export/nebula-exchange/about-exchange/ex-ug-limitations/#software_dependencies","title":"Software dependencies","text":"

              To ensure the healthy operation of Exchange, ensure that the following software has been installed on the machine:

              • Java version 1.8
              • Scala version 2.10.7, 2.11.12, or 2.12.10
              • Apache Spark. The requirements for Spark versions when using Exchange to export data from data sources are as follows. In the following table, Y means that the corresponding Spark version is supported, and N means not supported.

                Note

                Use the correct Exchange JAR file based on the Spark version. For example, for Spark version 2.4, use nebula-exchange_spark_2.4-3.8.0.jar.

                Data source Spark 2.2 Spark 2.4 Spark 3 CSV file Y N Y JSON file Y Y Y ORC file Y Y Y Parquet file Y Y Y HBase Y Y Y MySQL Y Y Y PostgreSQL Y Y Y Oracle Y Y Y ClickHouse Y Y Y Neo4j N Y N Hive Y Y Y MaxCompute N Y N Pulsar N Y Untested Kafka N Y Untested NebulaGraph N Y N

              Hadoop Distributed File System (HDFS) needs to be deployed in the following scenarios:

              • Migrate HDFS data
              • Generate SST files
              "},{"location":"import-export/nebula-exchange/about-exchange/ex-ug-what-is-exchange/","title":"What is NebulaGraph Exchange","text":"

              NebulaGraph Exchange (Exchange) is an Apache Spark\u2122 application for bulk migration of cluster data to NebulaGraph in a distributed environment, supporting batch and streaming data migration in a variety of formats.

              Exchange consists of Reader, Processor, and Writer. After Reader reads data from different sources and returns a DataFrame, the Processor iterates through each row of the DataFrame and obtains the corresponding value based on the mapping between fields in the configuration file. After iterating through the number of rows in the specified batch, Writer writes the captured data to the NebulaGraph at once. The following figure illustrates the process by which Exchange completes the data conversion and migration.

              "},{"location":"import-export/nebula-exchange/about-exchange/ex-ug-what-is-exchange/#editions","title":"Editions","text":"

              Exchange has two editions, the Community Edition and the Enterprise Edition. The Community Edition is open source developed on GitHub. The Enterprise Edition supports not only the functions of the Community Edition but also adds additional features. For details, see Comparisons.

              "},{"location":"import-export/nebula-exchange/about-exchange/ex-ug-what-is-exchange/#scenarios","title":"Scenarios","text":"

              Exchange applies to the following scenarios:

              • Streaming data from Kafka and Pulsar platforms, such as log files, online shopping data, activities of game players, information on social websites, financial transactions or geospatial services, and telemetry data from connected devices or instruments in the data center, are required to be converted into the vertex or edge data of the property graph and import them into the NebulaGraph database.
              • Batch data, such as data from a time period, needs to be read from a relational database (such as MySQL) or a distributed file system (such as HDFS), converted into vertex or edge data for a property graph, and imported into the NebulaGraph database.
              • A large volume of data needs to be generated into SST files that NebulaGraph can recognize and then imported into the NebulaGraph database.
              • The data saved in NebulaGraph needs to be exported.

                Enterpriseonly

                Exporting the data saved in NebulaGraph is supported by Exchange Enterprise Edition only.

              "},{"location":"import-export/nebula-exchange/about-exchange/ex-ug-what-is-exchange/#advantages","title":"Advantages","text":"

              Exchange has the following advantages:

              • High adaptability: It supports importing data into the NebulaGraph database in a variety of formats or from a variety of sources, making it easy to migrate data.
              • SST import: It supports converting data from different sources into SST files for data import.
              • SSL encryption: It supports establishing the SSL encryption between Exchange and NebulaGraph to ensure data security.
              • Resumable data import: It supports resumable data import to save time and improve data import efficiency.

                Note

                Resumable data import is currently supported when migrating Neo4j data only.

              • Asynchronous operation: An insert statement is generated in the source data and sent to the Graph service. Then the insert operation is performed.
              • Great flexibility: It supports importing multiple Tags and Edge types at the same time. Different Tags and Edge types can be from different data sources or in different formats.
              • Statistics: It uses the accumulator in Apache Spark\u2122 to count the number of successful and failed insert operations.
              • Easy to use: It adopts the Human-Optimized Config Object Notation (HOCON) configuration file format and has an object-oriented style, which is easy to understand and operate.
              "},{"location":"import-export/nebula-exchange/about-exchange/ex-ug-what-is-exchange/#version_compatibility","title":"Version compatibility","text":"

              Exchange supports Spark versions 2.2.x, 2.4.x, and 3.x.x, which are named nebula-exchange_spark_2.2, nebula-exchange_spark_2.4, and nebula-exchange_spark_3.0 for different Spark versions.

              The correspondence between the NebulaGraph Exchange version (the JAR version), the NebulaGraph core version and the Spark version is as follows.

              Exchange version NebulaGraph version Spark version nebula-exchange_spark_3.0-3.0-SNAPSHOT.jar nightly 3.3.x\u30013.2.x\u30013.1.x\u30013.0.x nebula-exchange_spark_2.4-3.0-SNAPSHOT.jar nightly 2.4.x nebula-exchange_spark_2.2-3.0-SNAPSHOT.jar nightly 2.2.x nebula-exchange_spark_3.0-3.4.0.jar 3.x.x 3.3.x\u30013.2.x\u30013.1.x\u30013.0.x nebula-exchange_spark_2.4-3.4.0.jar 3.x.x 2.4.x nebula-exchange_spark_2.2-3.4.0.jar 3.x.x 2.2.x nebula-exchange_spark_3.0-3.3.0.jar 3.x.x 3.3.x\u30013.2.x\u30013.1.x\u30013.0.x nebula-exchange_spark_2.4-3.3.0.jar 3.x.x 2.4.x nebula-exchange_spark_2.2-3.3.0.jar 3.x.x 2.2.x nebula-exchange_spark_3.0-3.0.0.jar 3.x.x 3.3.x\u30013.2.x\u30013.1.x\u30013.0.x nebula-exchange_spark_2.4-3.0.0.jar 3.x.x 2.4.x nebula-exchange_spark_2.2-3.0.0.jar 3.x.x 2.2.x nebula-exchange-2.6.3.jar 2.6.1\u30012.6.0 2.4.x nebula-exchange-2.6.2.jar 2.6.1\u30012.6.0 2.4.x nebula-exchange-2.6.1.jar 2.6.1\u30012.6.0 2.4.x nebula-exchange-2.6.0.jar 2.6.1\u30012.6.0 2.4.x nebula-exchange-2.5.2.jar 2.5.1\u30012.5.0 2.4.x nebula-exchange-2.5.1.jar 2.5.1\u30012.5.0 2.4.x nebula-exchange-2.5.0.jar 2.5.1\u30012.5.0 2.4.x nebula-exchange-2.1.0.jar 2.0.1\u30012.0.0 2.4.x nebula-exchange-2.0.1.jar 2.0.1\u30012.0.0 2.4.x nebula-exchange-2.0.0.jar 2.0.1\u30012.0.0 2.4.x"},{"location":"import-export/nebula-exchange/about-exchange/ex-ug-what-is-exchange/#data_source","title":"Data source","text":"

              Exchange 3.8.0 supports converting data from the following formats or sources into vertexes and edges that NebulaGraph can recognize, and then importing them into NebulaGraph in the form of nGQL statements:

              • Data stored in HDFS or locally:
                • Apache Parquet
                • Apache ORC
                • JSON
                • CSV
              • Apache HBase\u2122
              • Data repository:

                • Hive
                • MaxCompute
              • Graph database: Neo4j (Client version 2.4.5-M1)
              • Relational database:
                • MySQL
                • PostgreSQL
                • Oracle
              • Column database: ClickHouse
              • Stream processing software platform: Apache Kafka\u00ae
              • Publish/Subscribe messaging platform: Apache Pulsar 2.4.5
              • JDBC

              In addition to importing data as nGQL statements, Exchange supports generating SST files for data sources and then importing SST files via Console.

              "},{"location":"import-export/nebula-exchange/about-exchange/ex-ug-what-is-exchange/#release_note","title":"Release note","text":"

              Release

              "},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-para-import-command/","title":"Options for import","text":"

              After editing the configuration file, run the following commands to import specified source data into the NebulaGraph database.

              "},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-para-import-command/#import_data","title":"Import data","text":"
              <spark_install_path>/bin/spark-submit --master \"spark://HOST:PORT\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange-2.x.y.jar_path> -c <application.conf_path> \n

              Note

              If the value of the properties contains Chinese characters, the encoding error may appear. Please add the following options when submitting the Spark task:

              --conf spark.driver.extraJavaOptions=-Dfile.encoding=utf-8\n--conf spark.executor.extraJavaOptions=-Dfile.encoding=utf-8\n

              The following table lists command parameters.

              Parameter Required Default value Description --class Yes - Specify the main class of the driver. --master Yes - Specify the URL of the master process in a Spark cluster. For more information, see master-urls. Optional values are:local: Local Mode. Run Spark applications on a single thread. Suitable for importing small data sets in a test environment.yarn: Run Spark applications on a YARN cluster. Suitable for importing large data sets in a production environment.spark://HOST:PORT: Connect to the specified Spark standalone cluster.mesos://HOST:PORT: Connect to the specified Mesos cluster.k8s://HOST:PORT: Connect to the specified Kubernetes cluster. -c/--config Yes - Specify the path of the configuration file. -h/--hive No false Specify whether importing Hive data is supported. -D/--dry No false Specify whether to check the format of the configuration file. This parameter is used to check the format of the configuration file only, it does not check the validity of tags and edges configurations and does not import data. Don't add this parameter if you need to import data. -r/--reload No - Specify the path of the reload file that needs to be reloaded.

              For more Spark parameter configurations, see Spark Configuration.

              Note

              • The version number of a JAR file is subject to the name of the JAR file that is actually compiled.
              • If users use the yarn mode to submit a job, see the following command, especially the two '--conf' commands in the example.
              $SPARK_HOME/bin/spark-submit     --master yarn \\\n--class com.vesoft.nebula.exchange.Exchange \\\n--files application.conf \\\n--conf spark.driver.extraClassPath=./ \\\n--conf spark.executor.extraClassPath=./ \\\nnebula-exchange-3.8.0.jar \\\n-c application.conf\n
              "},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-para-import-command/#import_the_reload_file","title":"Import the reload file","text":"

              If some data fails to be imported during the import, the failed data will be stored in the reload file. Use the parameter -r to import the data in reload file.

              <spark_install_path>/bin/spark-submit --master \"spark://HOST:PORT\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange-2.x.y.jar_path> -c <application.conf_path> -r \"<reload_file_path>\" \n

              If the import still fails, go to Official Forum for consultation.

              "},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/","title":"Parameters in the configuration file","text":"

              This topic describes how to automatically generate a template configuration file when users use NebulaGraph Exchange, and introduces the configuration file application.conf.

              "},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#generate_template_configuration_file_automatically","title":"Generate template configuration file automatically","text":"

              Specify the data source to be imported with the following command to get the template configuration file corresponding to the data source.

              java -cp <exchange_jar_package> com.vesoft.exchange.common.GenerateConfigTemplate -s <source_type> -p <config_file_save_path>\n

              Example:

              java -cp nebula-exchange_spark_2.4-3.0-SNAPSHOT.jar com.vesoft.exchange.common.GenerateConfigTemplate -s csv -p /home/nebula/csv_application.conf\n
              "},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#using_an_encrypted_password","title":"Using an encrypted password","text":"

              You can use either a plaintext password or an RSA encrypted password when setting the password for connecting to NebulaGraph in the configuration file.

              To use an RSA-encrypted password, you need to configure the following settings in the configuration file:

              • nebula.pswd is configured as the RSA encrypted password.
              • nebula.privateKey is configured as the key for RSA encryption.
              • nebula.enableRSA is configured as true.

              Users can use their own tools for encryption, or they can use the encryption tool provided in Exchange's JAR package, for example:

              spark-submit --master local --class com.vesoft.exchange.common.PasswordEncryption nebula-exchange_spark_2.4-3.0-SNAPSHOT.jar -p nebula\n

              The results returned are as follows:

              =================== public key begin ===================\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCLl7LaNSEXlZo2hYiJqzxgyFBQdkxbQXYU/xQthsBJwjOPhkiY37nokzKnjNlp6mv5ZUomqxLsoNQHEJ6BZD4VPiaiElFAkTD+gyul1v8f3A446Fr2rnVLogWHnz8ECPt7X8jwmpiKOXkOPIhqU5E0Cua+Kk0nnVosbos/VShfiQIDAQAB\n=================== public key end ===================\n\n\n=================== private key begin ===================\nMIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAIuXsto1IReVmjaFiImrPGDIUFB2TFtBdhT/FC2GwEnCM4+GSJjfueiTMqeM2Wnqa/llSiarEuyg1AcQnoFkPhU+JqISUUCRMP6DK6XW/x/cDjjoWvaudUuiBYefPwQI+3tfyPCamIo5eQ48iGpTkTQK5r4qTSedWixuiz9VKF+JAgMBAAECgYADWbfEPwQ1UbTq3Bej3kVLuWMcG0rH4fFYnaq5UQOqgYvFRR7W9H+80lOj6+CIB0ViLgkylmaU4WNVbBOx3VsUFFWSqIIIviKubg8m8ey7KAd9X2wMEcUHi4JyS2+/WSacaXYS5LOmMevvuaOwLEV0QmyM+nNGRIjUdzCLR1935QJBAM+IF8YD5GnoAPPjGIDS1Ljhu/u/Gj6/YBCQKSHQ5+HxHEKjQ/YxQZ/otchmMZanYelf1y+byuJX3NZ04/KSGT8CQQCsMaoFO2rF5M84HpAXPi6yH2chbtz0VTKZworwUnpmMVbNUojf4VwzAyOhT1U5o0PpFbpi+NqQhC63VUN5k003AkEArI8vnVGNMlZbvG7e5/bmM9hWs2viSbxdB0inOtv2g1M1OV+B2gp405ru0/PNVcRV0HQFfCuhVfTSxmspQoAihwJBAJW6EZa/FZbB4JVxreUoAr6Lo8dkeOhT9M3SZbGWZivaFxot/Cp/8QXCYwbuzrJxjqlsZUeOD6694Uk08JkURn0CQQC8V6aRa8ylMhLJFkGkMDHLqHcQCmY53Kd73mUu4+mjMJLZh14zQD9ydFtc0lbLXTeBAMWV3uEdeLhRvdAo3OwV\n=================== private key end ===================\n\n\n=================== encrypted  password begin ===================\nIo+3y3mLOMnZJJNUPHZ8pKb4VfTvg6wUh6jSu5xdmLAoX/59tK1HTwoN40aOOWJwa1a5io7S4JqcX/jEcAorw7pelITr+F4oB0AMCt71d+gJuu3/lw9bjUEl9tF4Raj82y2Dg39wYbagN84fZMgCD63TPiDIevSr6+MFKASpGrY=\n=================== encrypted  password end ===================\ncheck: the real password decrypted by private key and encrypted password is: nebula\n
              "},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#configuration_instructions","title":"Configuration instructions","text":"

              Before configuring the application.conf file, it is recommended to copy the file name application.conf and then edit the file name according to the file type of a data source. For example, change the file name to csv_application.conf if the file type of the data source is CSV.

              The application.conf file contains the following content types:

              • Spark configurations
              • Hive configurations (optional)
              • NebulaGraph configurations
              • Vertex configurations
              • Edge configurations
              "},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#spark_configurations","title":"Spark configurations","text":"

              This topic lists only some Spark parameters. For more information, see Spark Configuration.

              Parameter Type Default value Required Description spark.app.name string - No The drive name in Spark. spark.driver.cores int 1 No The number of CPU cores used by a driver, only applicable to a cluster mode. spark.driver.maxResultSize string 1G No The total size limit (in bytes) of the serialized results of all partitions in a single Spark operation (such as collect). The minimum value is 1M, and 0 means unlimited. spark.executor.memory string 1G No The amount of memory used by a Spark driver which can be specified in units, such as 512M or 1G. spark.cores.max int 16 No The maximum number of CPU cores of applications requested across clusters (rather than from each node) when a driver runs in a coarse-grained sharing mode on a standalone cluster or a Mesos cluster. The default value is spark.deploy.defaultCores on a Spark standalone cluster manager or the value of the infinite parameter (all available cores) on Mesos."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#hive_configurations_optional","title":"Hive configurations (optional)","text":"

              Users only need to configure parameters for connecting to Hive if Spark and Hive are deployed in different clusters. Otherwise, please ignore the following configurations.

              Parameter Type Default value Required Description hive.warehouse string - Yes The warehouse path in HDFS. Enclose the path in double quotes and start with hdfs://. hive.connectionURL string - Yes The URL of a JDBC connection. For example, \"jdbc:mysql://127.0.0.1:3306/hive_spark?characterEncoding=UTF-8\". hive.connectionDriverName string \"com.mysql.jdbc.Driver\" Yes The driver name. hive.connectionUserName list[string] - Yes The username for connections. hive.connectionPassword list[string] - Yes The account password."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#nebulagraph_configurations","title":"NebulaGraph configurations","text":"Parameter Type Default value Required Description nebula.address.graph list[string] [\"127.0.0.1:9669\"] Yes The addresses of all Graph services, including IPs and ports, separated by commas (,). Example: [\"ip1:port1\",\"ip2:port2\",\"ip3:port3\"]. nebula.address.meta list[string] [\"127.0.0.1:9559\"] Yes The addresses of all Meta services, including IPs and ports, separated by commas (,). Example: [\"ip1:port1\",\"ip2:port2\",\"ip3:port3\"]. nebula.user string - Yes The username with write permissions for NebulaGraph. nebula.pswd string - Yes The account password. The password can be plaintext or RSA encrypted. To use an RSA encrypted password, you need to set enableRSA and privateKey. For how to encrypt a password, see Using an encrypted password above. nebula.enableRSA bool false No Whether to use an RSA encrypted password. nebula.privateKey string - No The key used to encrypt the password using RSA. nebula.space string - Yes The name of the graph space where data needs to be imported. nebula.ssl.enable.graph bool false Yes Enables the SSL encryption between Exchange and Graph services. If the value is true, the SSL encryption is enabled and the following SSL parameters take effect. If Exchange is run on a multi-machine cluster, you need to store the corresponding files in the same path on each machine when setting the following SSL-related paths. nebula.ssl.sign string ca Yes Specifies the SSL sign. Optional values are ca and self. nebula.ssl.ca.param.caCrtFilePath string Specifies the storage path of the CA certificate. It takes effect when the value of nebula.ssl.sign is ca. nebula.ssl.ca.param.crtFilePath string \"/path/crtFilePath\" Yes Specifies the storage path of the CRT certificate. It takes effect when the value of nebula.ssl.sign is ca. nebula.ssl.ca.param.keyFilePath string \"/path/keyFilePath\" Yes Specifies the storage path of the key file. It takes effect when the value of nebula.ssl.sign is ca. nebula.ssl.self.param.crtFilePath string \"/path/crtFilePath\" Yes Specifies the storage path of the CRT certificate. It takes effect when the value of nebula.ssl.sign is self. nebula.ssl.self.param.keyFilePath string \"/path/keyFilePath\" Yes Specifies the storage path of the key file. It takes effect when the value of nebula.ssl.sign is self. nebula.ssl.self.param.password string \"nebula\" Yes Specifies the storage path of the password. It takes effect when the value of nebula.ssl.sign is self. nebula.path.local string \"/tmp\" No The local SST file path which needs to be set when users import SST files. nebula.path.remote string \"/sst\" No The remote SST file path which needs to be set when users import SST files. nebula.path.hdfs.namenode string \"hdfs://name_node:9000\" No The NameNode path which needs to be set when users import SST files. nebula.connection.timeout int 3000 No The timeout set for Thrift connections. Unit: ms. nebula.connection.retry int 3 No Retries set for Thrift connections. nebula.execution.retry int 3 No Retries set for executing nGQL statements. nebula.error.max int 32 No The maximum number of failures during the import process. When the number of failures reaches the maximum, the Spark job submitted will stop automatically . nebula.error.output string /tmp/errors No The path to output error logs. Failed nGQL statement executions are saved in the error log. nebula.rate.limit int 1024 No The limit on the number of tokens in the token bucket when importing data. nebula.rate.timeout int 1000 No The timeout period for getting tokens from a token bucket. Unit: milliseconds.

              Note

              NebulaGraph doesn't support vertices without tags by default. To import vertices without tags, enable vertices without tags in the NebulaGraph cluster and then add parameter nebula.enableTagless to the Exchange configuration with the value true. For example:

              nebula: {\n    address:{\n      graph:[\"127.0.0.1:9669\"]\n      meta:[\"127.0.0.1:9559\"]\n    }\n    user: root\n    pswd: nebula\n    space: test\n    enableTagless: true\n    ......\n\n }\n
              "},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#vertex_configurations","title":"Vertex configurations","text":"

              For different data sources, the vertex configurations are different. There are many general parameters and some specific parameters. General parameters and specific parameters of different data sources need to be configured when users configure vertices.

              "},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#general_parameters","title":"General parameters","text":"Parameter Type Default value Required Description tags.name string - Yes The tag name defined in NebulaGraph. tags.type.source string - Yes Specify a data source. For example, csv. tags.type.sink string client Yes Specify an import method. Optional values are client and SST. tags.writeMode string INSERT No Types of batch operations on data, including batch inserts, updates, and deletes. Optional values are INSERT, UPDATE, DELETE. tags.deleteEdge string false No Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when tags.writeMode is DELETE. tags.fields list[string] - Yes The header or column name of the column corresponding to properties. If there is a header or a column name, please use that name directly. If a CSV file does not have a header, use the form of [_c0, _c1, _c2] to represent the first column, the second column, the third column, and so on. tags.nebula.fields list[string] - Yes Property names defined in NebulaGraph, the order of which must correspond to tags.fields. For example, [_c1, _c2] corresponds to [name, age], which means that values in the second column are the values of the property name, and values in the third column are the values of the property age. tags.vertex.field string - Yes The column of vertex IDs. For example, when a CSV file has no header, users can use _c0 to indicate values in the first column are vertex IDs. tags.vertex.udf.separator string - No Support merging multiple columns by custom rules. This parameter specifies the join character. tags.vertex.udf.oldColNames list - No Support merging multiple columns by custom rules. This parameter specifies the names of the columns to be merged. Multiple columns are separated by commas. tags.vertex.udf.newColName string - No Support merging multiple columns by custom rules. This parameter specifies the new column name. tags.vertex.prefix string - No Add the specified prefix to the VID. For example, if the VID is 12345, adding the prefix tag1 will result in tag1_12345. The underscore cannot be modified. tags.vertex.policy string - No Supports only the value hash. Performs hashing operations on VIDs of type string. tags.batch int 256 Yes The maximum number of vertices written into NebulaGraph in a single batch. tags.partition int 32 Yes The number of partitions to be created when the data is written to NebulaGraph. If tags.partition \u2264 1, the number of partitions to be created in NebulaGraph is the same as that in the data source. tags.filter string - No The filtering rule. The data that matches the filter rule is imported into NebulaGraph. For information about filtering formats, see Dataset."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_of_parquetjsonorc_data_sources","title":"Specific parameters of Parquet/JSON/ORC data sources","text":"Parameter Type Default value Required Description tags.path string - Yes The path of vertex data files in HDFS. Enclose the path in double quotes and start with hdfs://."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_of_csv_data_sources","title":"Specific parameters of CSV data sources","text":"Parameter Type Default value Required Description tags.path string - Yes The path of vertex data files in HDFS. Enclose the path in double quotes and start with hdfs://. tags.separator string , Yes The separator. The default value is a comma (,). For special characters, such as the control character ^A, you can use ASCII octal \\001 or UNICODE encoded hexadecimal \\u0001, for the control character ^B, use ASCII octal \\002 or UNICODE encoded hexadecimal \\u0002, for the control character ^C, use ASCII octal \\003 or UNICODE encoded hexadecimal \\u0003. tags.header bool true Yes Whether the file has a header."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_of_hive_data_sources","title":"Specific parameters of Hive data sources","text":"Parameter Type Default value Required Description tags.exec string - Yes The statement to query data sources. For example, select name,age from mooc.users."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_of_maxcompute_data_sources","title":"Specific parameters of MaxCompute data sources","text":"Parameter Type Default value Required Description tags.table string - Yes The table name of the MaxCompute. tags.project string - Yes The project name of the MaxCompute. tags.odpsUrl string - Yes The odpsUrl of the MaxCompute service. For more information about odpsUrl, see Endpoints. tags.tunnelUrl string - Yes The tunnelUrl of the MaxCompute service. For more information about tunnelUrl, see Endpoints. tags.accessKeyId string - Yes The accessKeyId of the MaxCompute service. tags.accessKeySecret string - Yes The accessKeySecret of the MaxCompute service. tags.partitionSpec string - No Partition descriptions of MaxCompute tables. tags.sentence string - No Statements to query data sources. The table name in the SQL statement is the same as the value of the table above."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_of_neo4j_data_sources","title":"Specific parameters of Neo4j data sources","text":"Parameter Type Default value Required Description tags.exec string - Yes Statements to query data sources. For example: match (n:label) return n.neo4j-field-0. tags.server string \"bolt://127.0.0.1:7687\" Yes The server address of Neo4j. tags.user string - Yes The Neo4j username with read permissions. tags.password string - Yes The account password. tags.database string - Yes The name of the database where source data is saved in Neo4j. tags.check_point_path string /tmp/test No The directory set to import progress information, which is used for resuming transfers. If not set, the resuming transfer is disabled."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_of_mysqlpostgresql_data_sources","title":"Specific parameters of MySQL/PostgreSQL data sources","text":"Parameter Type Default value Required Description tags.host string - Yes The MySQL/PostgreSQL server address. tags.port string - Yes The MySQL/PostgreSQL server port. tags.database string - Yes The database name. tags.table string - Yes The name of a table used as a data source. tags.user string - Yes The MySQL/PostgreSQL username with read permissions. tags.password string - Yes The account password. tags.sentence string - Yes Statements to query data sources. For example: \"select teamid, name from team order by teamid\"."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_of_oracle_data_sources","title":"Specific parameters of Oracle data sources","text":"Parameter Type Default value Required Description tags.url string - Yes The Oracle server address. tags.driver string - Yes The Oracle driver address. tags.user string - Yes The Oracle username with read permissions. tags.password string - Yes The account password. tags.table string - Yes The name of a table used as a data source. tags.sentence string - Yes Statements to query data sources. For example: \"select playerid, name, age from player\"."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_of_clickhouse_data_sources","title":"Specific parameters of ClickHouse data sources","text":"Parameter Type Default value Required Description tags.url string - Yes The JDBC URL of ClickHouse. tags.user string - Yes The ClickHouse username with read permissions. tags.password string - Yes The account password. tags.numPartition string - Yes The number of ClickHouse partitions. tags.sentence string - Yes Statements to query data sources."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_of_hbase_data_sources","title":"Specific parameters of Hbase data sources","text":"Parameter Type Default value Required Description tags.host string 127.0.0.1 Yes The Hbase server address. tags.port string 2181 Yes The Hbase server port. tags.table string - Yes The name of a table used as a data source. tags.columnFamily string - Yes The column family to which a table belongs."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_of_pulsar_data_sources","title":"Specific parameters of Pulsar data sources","text":"Parameter Type Default value Required Description tags.service string \"pulsar://localhost:6650\" Yes The Pulsar server address. tags.admin string \"http://localhost:8081\" Yes The admin URL used to connect pulsar. tags.options.<topic|topics| topicsPattern> string - Yes Options offered by Pulsar, which can be configured by choosing one from topic, topics, and topicsPattern. tags.interval.seconds int 10 Yes The interval for reading messages. Unit: seconds."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_of_kafka_data_sources","title":"Specific parameters of Kafka data sources","text":"Parameter Type Default value Required Description tags.service string - Yes The Kafka server address. tags.topic string - Yes The message type. tags.interval.seconds int 10 Yes The interval for reading messages. Unit: seconds. tags.securityProtocol string - No Kafka security protocol. tags.mechanism string - No The security certification mechanism provided by SASL of Kafka. tags.kerberos bool false No Whether to enable Kerberos for security certification. If tags.mechanism is kerberos, this parameter must be set to true. tags.kerberosServiceName string - No Kerberos service name. If tags.kerberos is true, this parameter must be set."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_for_generating_sst_files","title":"Specific parameters for generating SST files","text":"Parameter Type Default value Required Description tags.path string - Yes The path of the source file specified to generate SST files. tags.repartitionWithNebula bool true No Whether to repartition data based on the number of partitions of graph spaces in NebulaGraph when generating the SST file. Enabling this function can reduce the time required to DOWNLOAD and INGEST SST files."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#edge_configurations","title":"Edge configurations","text":"

              For different data sources, configurations of edges are also different. There are general parameters and some specific parameters. General parameters and specific parameters of different data sources need to be configured when users configure edges.

              For the specific parameters of different data sources for edge configurations, please refer to the introduction of specific parameters of different data sources above, and pay attention to distinguishing tags and edges.

              "},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#general_parameters_1","title":"General parameters","text":"Parameter Type Default value Required Description edges.name string - Yes The edge type name defined in NebulaGraph. edges.type.source string - Yes The data source of edges. For example, csv. edges.type.sink string client Yes The method specified to import data. Optional values are client and SST. edges.writeMode string INSERT No Types of batch operations on data, including batch inserts, updates, and deletes. Optional values are INSERT, UPDATE, DELETE. edges.fields list[string] - Yes The header or column name of the column corresponding to properties. If there is a header or column name, please use that name directly. If a CSV file does not have a header, use the form of [_c0, _c1, _c2] to represent the first column, the second column, the third column, and so on. edges.nebula.fields list[string] - Yes Edge names defined in NebulaGraph, the order of which must correspond to edges.fields. For example, [_c2, _c3] corresponds to [start_year, end_year], which means that values in the third column are the values of the start year, and values in the fourth column are the values of the end year. edges.source.field string - Yes The column of source vertices of edges. For example, _c0 indicates a value in the first column that is used as the source vertex of an edge. edges.source.prefix string - No Add the specified prefix to the VID. For example, if the VID is 12345, adding the prefix tag1 will result in tag1_12345. The underscore cannot be modified. edges.source.policy string - No Supports only the value hash. Performs hashing operations on VIDs of type string. edges.target.field string - Yes The column of destination vertices of edges. For example, _c0 indicates a value in the first column that is used as the destination vertex of an edge. edges.target.prefix string - No Add the specified prefix to the VID. For example, if the VID is 12345, adding the prefix tag1 will result in tag1_12345. The underscore cannot be modified. edges.target.policy string - No Supports only the value hash. Performs hashing operations on VIDs of type string. edges.ranking int - No The column of rank values. If not specified, all rank values are 0 by default. edges.batch int 256 Yes The maximum number of edges written into NebulaGraph in a single batch. edges.partition int 32 Yes The number of partitions to be created when the data is written to NebulaGraph. If edges.partition \u2264 1, the number of partitions to be created in NebulaGraph is the same as that in the data source. edges.filter string - No The filtering rule. The data that matches the filter rule is imported into NebulaGraph. For information about filtering formats, see Dataset."},{"location":"import-export/nebula-exchange/parameter-reference/ex-ug-parameter/#specific_parameters_for_generating_sst_files_1","title":"Specific parameters for generating SST files","text":"Parameter Type Default value Required Description edges.path string - Yes The path of the source file specified to generate SST files. edges.repartitionWithNebula bool true No Whether to repartition data based on the number of partitions of graph spaces in NebulaGraph when generating the SST file. Enabling this function can reduce the time required to DOWNLOAD and INGEST SST files."},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse/","title":"Import data from ClickHouse","text":"

              This topic provides an example of how to use Exchange to import data stored on ClickHouse into NebulaGraph.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse/#data_set","title":"Data set","text":"

              This topic takes the basketballplayer dataset as an example.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse/#environment","title":"Environment","text":"

              This example is done on MacOS. Here is the environment configuration information:

              • Hardware specifications:
                • CPU: 1.7 GHz Quad-Core Intel Core i7
                • Memory: 16 GB
              • Spark: 2.4.7, stand-alone
              • ClickHouse: docker deployment yandex/clickhouse-server tag: latest(2021.07.01)
              • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse/#prerequisites","title":"Prerequisites","text":"

              Before importing data, you need to confirm the following information:

              • NebulaGraph has been installed and deployed with the following information:

                • IP addresses and ports of Graph and Meta services.
                • The user name and password with write permission to NebulaGraph.
              • Exchange has been compiled, or download the compiled .jar file directly.
              • Spark has been installed.
              • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

              Analyze the data to create a Schema in NebulaGraph by following these steps:

              1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

                Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
              2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

                ## Create a graph space.\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer.\nnebula> USE basketballplayer;\n\n## Create the Tag player.\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team.\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow.\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve.\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

              For more information, see Quick start workflow.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse/#step_2_modify_configuration_files","title":"Step 2: Modify configuration files","text":"

              After Exchange is compiled, copy the conf file target/classes/application.conf to set ClickHouse data source configuration. In this example, the copied file is called clickhouse_application.conf. For details on each configuration item, see Parameters in the configuration file.

              {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.8.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    cores: {\n      max: 16\n    }\n  }\n\n# NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n  # Processing vertexes\n  tags: [\n    # Set the information about the Tag player.\n    {\n      name: player\n      type: {\n        # Specify the data source file format to ClickHouse.\n        source: clickhouse\n        # Specify how to import the data of vertexes into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # JDBC URL of ClickHouse\n      url:\"jdbc:clickhouse://192.168.*.*:8123/basketballplayer\"\n\n      user:\"user\"\n      password:\"123456\"\n\n      # The number of ClickHouse partitions\n      numPartition:\"5\"\n\n      sentence:\"select * from player\"\n\n      # Specify the column names in the player table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [name,age]\n      nebula.fields: [name,age]\n\n      # Specify a column of data in the table as the source of vertex VID in the NebulaGraph.\n      vertex: {\n        field:playerid\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Tag Team.\n    {\n      name: team\n      type: {\n        source: clickhouse\n        sink: client\n      }\n      url:\"jdbc:clickhouse://192.168.*.*:8123/basketballplayer\"\n      user:\"user\"\n      password:\"123456\"\n      numPartition:\"5\"\n      sentence:\"select * from team\"\n      fields: [name]\n      nebula.fields: [name]\n      vertex: {\n        field:teamid\n      }\n      batch: 256\n      partition: 32\n    }\n  ]\n\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # The corresponding Edge Type name in NebulaGraph.\n      name: follow\n\n      type: {\n        # Specify the data source file format to ClickHouse.\n        source: clickhouse\n\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # JDBC URL of ClickHouse\n      url:\"jdbc:clickhouse://192.168.*.*:8123/basketballplayer\"\n\n      user:\"user\"\n      password:\"123456\"\n\n      # The number of ClickHouse partitions.\n      numPartition:\"5\"\n\n      sentence:\"select * from follow\"\n\n      # Specify the column names in the follow table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [degree]\n      nebula.fields: [degree]\n\n      # In source, use a column in the follow table as the source of the edge's source vertexes.\n      source: {\n        field:src_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # In target, use a column in the follow table as the source of the edge's destination vertexes.\n      target: {\n        field:dst_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Edge Type serve.\n    {\n      name: serve\n      type: {\n        source: clickhouse\n        sink: client\n      }\n      url:\"jdbc:clickhouse://192.168.*.*:8123/basketballplayer\"\n      user:\"user\"\n      password:\"123456\"\n      numPartition:\"5\"\n      sentence:\"select * from serve\"\n      fields: [start_year,end_year]\n      nebula.fields: [start_year,end_year]\n      source: {\n        field:playerid\n      }\n      target: {\n        field:teamid\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      batch: 256\n      partition: 32\n    }\n  ]\n}\n
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse/#step_3_import_data_into_nebulagraph","title":"Step 3: Import data into NebulaGraph","text":"

              Run the following command to import ClickHouse data into NebulaGraph. For descriptions of the parameters, see Options for import.

              ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <clickhouse_application.conf_path>\n

              Note

              JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

              For example:

              ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.8.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/clickhouse_application.conf\n

              You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse/#step_4_optional_validate_data","title":"Step 4: (optional) Validate data","text":"

              Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

              LOOKUP ON player YIELD id(vertex);\n

              Users can also run the SHOW STATS command to view statistics.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-clickhouse/#step_5_optional_rebuild_indexes_in_nebulagraph","title":"Step 5: (optional) Rebuild indexes in NebulaGraph","text":"

              With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/","title":"Import data from CSV files","text":"

              This topic provides an example of how to use Exchange to import NebulaGraph data stored in HDFS or local CSV files.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/#data_set","title":"Data set","text":"

              This topic takes the basketballplayer dataset as an example.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/#environment","title":"Environment","text":"

              This example is done on MacOS. Here is the environment configuration information:

              • Hardware specifications:
                • CPU: 1.7 GHz Quad-Core Intel Core i7
                • Memory: 16 GB
              • Spark: 2.4.7, stand-alone
              • Hadoop: 2.9.2, pseudo-distributed deployment
              • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/#prerequisites","title":"Prerequisites","text":"

              Before importing data, you need to confirm the following information:

              • NebulaGraph has been installed and deployed with the following information:

                • IP addresses and ports of Graph and Meta services.
                • The user name and password with write permission to NebulaGraph.
              • Exchange has been compiled, or download the compiled .jar file directly.
              • Spark has been installed.
              • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
              • If files are stored in HDFS, ensure that the Hadoop service is running normally.
              • If files are stored locally and NebulaGraph is a cluster architecture, you need to place the files in the same directory locally on each machine in the cluster.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

              Analyze the data to create a Schema in NebulaGraph by following these steps:

              1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

                Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
              2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

                ## Create a graph space.\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer.\nnebula> USE basketballplayer;\n\n## Create the Tag player.\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team.\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow.\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve.\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

              For more information, see Quick start workflow.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/#step_2_process_csv_files","title":"Step 2: Process CSV files","text":"

              Confirm the following information:

              1. Process CSV files to meet Schema requirements.

                Note

                Exchange supports uploading CSV files with or without headers.

              2. Obtain the CSV file storage path.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/#step_3_modify_configuration_files","title":"Step 3: Modify configuration files","text":"

              After Exchange is compiled, copy the conf file target/classes/application.conf to set CSV data source configuration. In this example, the copied file is called csv_application.conf. For details on each configuration item, see Parameters in the configuration file.

              {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.8.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    executor: {\n        memory:1G\n    }\n\n    cores: {\n      max: 16\n    }\n  }\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n\n  # Processing vertexes\n  tags: [\n    # Set the information about the Tag player.\n    {\n      # Specify the Tag name defined in NebulaGraph.\n      name: player\n      type: {\n        # Specify the data source file format to CSV.\n        source: csv\n\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # Specify the path to the CSV file.\n      # If the file is stored in HDFS, use double quotation marks to enclose the file path, starting with hdfs://. For example: \"hdfs://ip:port/xx/xx\".\n      # If the file is stored locally, use double quotation marks to enclose the file path, starting with file://. For example: \"file:///tmp/xx.csv\".\n      path: \"hdfs://192.168.*.*:9000/data/vertex_player.csv\"\n\n      # If the CSV file does not have a header, use [_c0, _c1, _c2, ..., _cn] to represent its header and indicate the columns as the source of the property values.\n      # If the CSV file has headers, use the actual column names.\n      fields: [_c1, _c2]\n\n      # Specify the column names in the player table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      nebula.fields: [age, name]\n\n      # Specify a column of data in the table as the source of vertex VID in the NebulaGraph.\n      # The value of vertex must be the same as the column names in the above fields or csv.fields.\n      # Currently, NebulaGraph master supports only strings or integers of VID.\n      vertex: {\n        field:_c0\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The delimiter specified. The default value is comma.\n      separator: \",\"\n\n      # If the CSV file has a header, set the header to true.\n      # If the CSV file does not have a header, set the header to false. The default value is false.\n      header: false\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Tag Team.\n    {\n      name: team\n      type: {\n        source: csv\n        sink: client\n      }\n      path: \"hdfs://192.168.*.*:9000/data/vertex_team.csv\"\n      fields: [_c1]\n      nebula.fields: [name]\n      vertex: {\n        field:_c0\n      }\n      separator: \",\"\n      header: false\n      batch: 256\n      partition: 32\n    }\n\n\n    # If more vertexes need to be added, refer to the previous configuration to add them.\n  ]\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # Specify the Edge Type name defined in NebulaGraph.\n      name: follow\n      type: {\n        # Specify the data source file format to CSV.\n        source: csv\n\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # Specify the path to the CSV file.\n      # If the file is stored in HDFS, use double quotation marks to enclose the file path, starting with hdfs://. For example: \"hdfs://ip:port/xx/xx\".\n      # If the file is stored locally, use double quotation marks to enclose the file path, starting with file://. For example: \"file:///tmp/xx.csv\".\n      path: \"hdfs://192.168.*.*:9000/data/edge_follow.csv\"\n\n      # If the CSV file does not have a header, use [_c0, _c1, _c2, ..., _cn] to represent its header and indicate the columns as the source of the property values.\n      # If the CSV file has headers, use the actual column names.\n      fields: [_c2]\n\n      # Specify the column names in the edge table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      nebula.fields: [degree]\n\n      # Specify a column as the source for the source and destination vertexes.\n      # The value of vertex must be the same as the column names in the above fields or csv.fields.\n      # Currently, NebulaGraph master supports only strings or integers of VID.\n      source: {\n        field: _c0\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n      target: {\n        field: _c1\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The delimiter specified. The default value is comma.\n      separator: \",\"\n\n      # Specify a column as the source of the rank (optional).\n\n      #ranking: rank\n\n      # If the CSV file has a header, set the header to true.\n      # If the CSV file does not have a header, set the header to false. The default value is false.\n      header: false\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Edge Type serve.\n    {\n      name: serve\n      type: {\n        source: csv\n        sink: client\n      }\n      path: \"hdfs://192.168.*.*:9000/data/edge_serve.csv\"\n      fields: [_c2,_c3]\n      nebula.fields: [start_year, end_year]\n      source: {\n        field: _c0\n      }\n      target: {\n        field: _c1\n      }\n      separator: \",\"\n      header: false\n      batch: 256\n      partition: 32\n    }\n\n  ]\n    # If more edges need to be added, refer to the previous configuration to add them.\n}\n
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/#step_4_import_data_into_nebulagraph","title":"Step 4: Import data into NebulaGraph","text":"

              Run the following command to import CSV data into NebulaGraph. For descriptions of the parameters, see Options for import.

              ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <csv_application.conf_path> \n

              Note

              JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

              For example:

              ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.8.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/csv_application.conf\n

              You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/#access_hdfs_data_with_kerberos_certification","title":"Access HDFS data with Kerberos certification","text":"

              When using Kerberos for security certification, you can access the HDFS data in one of the following ways.

              • Configure the Kerberos configuration file in a command

                Configure --conf and --files in the command, for example:

                ${SPARK_HOME}/bin/spark-submit --master xxx  --num-executors 2 --executor-cores 2 --executor-memory 1g \\\n--conf \"spark.driver.extraJavaOptions=-Djava.security.krb5.conf=./krb5.conf\" \\\n--conf \"spark.executor.extraJavaOptions=-Djava.security.krb5.conf=./krb5.conf\" \\\n--files /local/path/to/xxx.keytab,/local/path/to/krb5.conf \\\n--class  com.vesoft.nebula.exchange.Exchange  \\\nexchange.jar -c xx.conf\n

                The file path in --conf can be configured in two ways as follows:

                • Configure the absolute path to the file. All YARN or Spark machines are required to have the corresponding file in the same path.
                • (Recommended in YARN mode) Configure the relative path to the file (e.g. ./krb5.conf). The resource files uploaded via --files are located in the working directory of the Java virtual machine or JAR.

                The files in --files must be stored on the machine where the spark-submit command is executed.

              • Without commands

                Deploy the Spark and Kerberos-certified Hadoop in a same cluster to make them share HDFS and YARN, and then add the configuration export HADOOP_HOME=<hadoop_home_path> to spark-env.sh in Spark.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/#step_5_optional_validate_data","title":"Step 5: (optional) Validate data","text":"

              Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

              LOOKUP ON player YIELD id(vertex);\n

              Users can also run the SHOW STATS command to view statistics.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-csv/#step_6_optional_rebuild_indexes_in_nebulagraph","title":"Step 6: (optional) Rebuild indexes in NebulaGraph","text":"

              With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hbase/","title":"Import data from HBase","text":"

              This topic provides an example of how to use Exchange to import NebulaGraph data stored in HBase.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hbase/#data_set","title":"Data set","text":"

              This topic takes the basketballplayer dataset as an example.

              In this example, the data set has been stored in HBase. All vertexes and edges are stored in the player, team, follow, and serve tables. The following are some of the data for each table.

              hbase(main):002:0> scan \"player\"\nROW                                COLUMN+CELL\n player100                         column=cf:age, timestamp=1618881347530, value=42\n player100                         column=cf:name, timestamp=1618881354604, value=Tim Duncan\n player101                         column=cf:age, timestamp=1618881369124, value=36\n player101                         column=cf:name, timestamp=1618881379102, value=Tony Parker\n player102                         column=cf:age, timestamp=1618881386987, value=33\n player102                         column=cf:name, timestamp=1618881393370, value=LaMarcus Aldridge\n player103                         column=cf:age, timestamp=1618881402002, value=32\n player103                         column=cf:name, timestamp=1618881407882, value=Rudy Gay\n ...\n\nhbase(main):003:0> scan \"team\"\nROW                                COLUMN+CELL\n team200                           column=cf:name, timestamp=1618881445563, value=Warriors\n team201                           column=cf:name, timestamp=1618881453636, value=Nuggets\n ...\n\nhbase(main):004:0> scan \"follow\"\nROW                                COLUMN+CELL\n player100                         column=cf:degree, timestamp=1618881804853, value=95\n player100                         column=cf:dst_player, timestamp=1618881791522, value=player101\n player101                         column=cf:degree, timestamp=1618881824685, value=90\n player101                         column=cf:dst_player, timestamp=1618881816042, value=player102\n ...\n\nhbase(main):005:0> scan \"serve\"\nROW                                COLUMN+CELL\n player100                         column=cf:end_year, timestamp=1618881899333, value=2016\n player100                         column=cf:start_year, timestamp=1618881890117, value=1997\n player100                         column=cf:teamid, timestamp=1618881875739, value=team204\n ...\n
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hbase/#environment","title":"Environment","text":"

              This example is done on MacOS. Here is the environment configuration information:

              • Hardware specifications:
                • CPU: 1.7 GHz Quad-Core Intel Core i7
                • Memory: 16 GB
              • Spark: 2.4.7, stand-alone
              • HBase: 2.2.7
              • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hbase/#prerequisites","title":"Prerequisites","text":"

              Before importing data, you need to confirm the following information:

              • NebulaGraph has been installed and deployed with the following information:

                • IP addresses and ports of Graph and Meta services.
                • The user name and password with write permission to NebulaGraph.
              • Exchange has been compiled, or download the compiled .jar file directly.
              • Spark has been installed.
              • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hbase/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hbase/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

              Analyze the data to create a Schema in NebulaGraph by following these steps:

              1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

                Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
              2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

                ## Create a graph space.\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer.\nnebula> USE basketballplayer;\n\n## Create the Tag player.\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team.\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow.\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve.\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

              For more information, see Quick start workflow.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hbase/#step_2_modify_configuration_files","title":"Step 2: Modify configuration files","text":"

              After Exchange is compiled, copy the conf file target/classes/application.conf to set HBase data source configuration. In this example, the copied file is called hbase_application.conf. For details on each configuration item, see Parameters in the configuration file.

              {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.8.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    cores: {\n      max: 16\n    }\n  }\n\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and all Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n  # Processing vertexes\n  tags: [\n    # Set information about Tag player.\n    # If you want to set RowKey as the data source, enter rowkey and the actual column name of the column family.\n    {\n      # The Tag name in NebulaGraph.\n      name: player\n      type: {\n        # Specify the data source file format to HBase.\n        source: hbase\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n      host:192.168.*.*\n      port:2181\n      table:\"player\"\n      columnFamily:\"cf\"\n\n      # Specify the column names in the player table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [age,name]\n      nebula.fields: [age,name]\n\n      # Specify a column of data in the table as the source of vertex VID in the NebulaGraph.\n      # For example, if rowkey is the source of the VID, enter rowkey.\n      vertex:{\n          field:rowkey\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # Number of pieces of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n    # Set Tag Team information.\n    {\n      name: team\n      type: {\n        source: hbase\n        sink: client\n      }\n      host:192.168.*.*\n      port:2181\n      table:\"team\"\n      columnFamily:\"cf\"\n      fields: [name]\n      nebula.fields: [name]\n      vertex:{\n          field:rowkey\n      }\n      batch: 256\n      partition: 32\n    }\n\n  ]\n\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # The corresponding Edge Type name in NebulaGraph.\n      name: follow\n\n      type: {\n        # Specify the data source file format to HBase.\n        source: hbase\n\n        # Specify how to import the Edge type data into NebulaGraph.\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      host:192.168.*.*\n      port:2181\n      table:\"follow\"\n      columnFamily:\"cf\"\n\n      # Specify the column names in the follow table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [degree]\n      nebula.fields: [degree]\n\n      # In source, use a column in the follow table as the source of the edge's source vertex.\n      # In target, use a column in the follow table as the source of the edge's destination vertex.\n      source:{\n          field:rowkey\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n\n      target:{\n          field:dst_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Edge Type serve.\n    {\n      name: serve\n      type: {\n        source: hbase\n        sink: client\n      }\n      host:192.168.*.*\n      port:2181\n      table:\"serve\"\n      columnFamily:\"cf\"\n\n      fields: [start_year,end_year]\n      nebula.fields: [start_year,end_year]\n      source:{\n          field:rowkey\n      }\n\n      target:{\n          field:teamid\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      batch: 256\n      partition: 32\n    }\n  ]\n}\n
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hbase/#step_3_import_data_into_nebulagraph","title":"Step 3: Import data into NebulaGraph","text":"

              Run the following command to import HBase data into NebulaGraph. For descriptions of the parameters, see Options for import.

              ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <hbase_application.conf_path>\n

              Note

              JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

              For example:

              ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.8.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/hbase_application.conf\n

              You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hbase/#step_4_optional_validate_data","title":"Step 4: (optional) Validate data","text":"

              Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

              LOOKUP ON player YIELD id(vertex);\n

              Users can also run the SHOW STATS command to view statistics.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hbase/#step_5_optional_rebuild_indexes_in_nebulagraph","title":"Step 5: (optional) Rebuild indexes in NebulaGraph","text":"

              With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/","title":"Import data from Hive","text":"

              This topic provides an example of how to use Exchange to import NebulaGraph data stored in Hive.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/#data_set","title":"Data set","text":"

              This topic takes the basketballplayer dataset as an example.

              In this example, the data set has been stored in Hive. All vertexes and edges are stored in the player, team, follow, and serve tables. The following are some of the data for each table.

              scala> spark.sql(\"describe basketball.player\").show\n+--------+---------+-------+\n|col_name|data_type|comment|\n+--------+---------+-------+\n|playerid|   string|   null|\n|     age|   bigint|   null|\n|    name|   string|   null|\n+--------+---------+-------+\n\nscala> spark.sql(\"describe basketball.team\").show\n+----------+---------+-------+\n|  col_name|data_type|comment|\n+----------+---------+-------+\n|    teamid|   string|   null|\n|      name|   string|   null|\n+----------+---------+-------+\n\nscala> spark.sql(\"describe basketball.follow\").show\n+----------+---------+-------+\n|  col_name|data_type|comment|\n+----------+---------+-------+\n|src_player|   string|   null|\n|dst_player|   string|   null|\n|    degree|   bigint|   null|\n+----------+---------+-------+\n\nscala> spark.sql(\"describe basketball.serve\").show\n+----------+---------+-------+\n|  col_name|data_type|comment|\n+----------+---------+-------+\n|  playerid|   string|   null|\n|    teamid|   string|   null|\n|start_year|   bigint|   null|\n|  end_year|   bigint|   null|\n+----------+---------+-------+\n

              Note

              The Hive data type bigint corresponds to the NebulaGraph int.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/#environment","title":"Environment","text":"

              This example is done on MacOS. Here is the environment configuration information:

              • Hardware specifications:
                • CPU: 1.7 GHz Quad-Core Intel Core i7
                • Memory: 16 GB
              • Spark: 2.4.7, stand-alone
              • Hadoop: 2.9.2, pseudo-distributed deployment
              • Hive: 2.3.7, Hive Metastore database is MySQL 8.0.22
              • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/#prerequisites","title":"Prerequisites","text":"

              Before importing data, you need to confirm the following information:

              • NebulaGraph has been installed and deployed with the following information:

                • IP addresses and ports of Graph and Meta services.
                • The user name and password with write permission to NebulaGraph.
              • Exchange has been compiled, or download the compiled .jar file directly.
              • Spark has been installed.
              • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
              • The Hive Metastore database (MySQL in this example) has been started.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

              Analyze the data to create a Schema in NebulaGraph by following these steps:

              1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

                Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
              2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

                ## Create a graph space\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer\nnebula> USE basketballplayer;\n\n## Create the Tag player\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

              For more information, see Quick start workflow.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/#step_2_use_spark_sql_to_confirm_hive_sql_statements","title":"Step 2: Use Spark SQL to confirm Hive SQL statements","text":"

              After the Spark-shell environment is started, run the following statements to ensure that Spark can read data in Hive.

              scala> sql(\"select playerid, age, name from basketball.player\").show\nscala> sql(\"select teamid, name from basketball.team\").show\nscala> sql(\"select src_player, dst_player, degree from basketball.follow\").show\nscala> sql(\"select playerid, teamid, start_year, end_year from basketball.serve\").show\n

              The following is the result read from the table basketball.player.

              +---------+----+-----------------+\n| playerid| age|             name|\n+---------+----+-----------------+\n|player100|  42|       Tim Duncan|\n|player101|  36|      Tony Parker|\n|player102|  33|LaMarcus Aldridge|\n|player103|  32|         Rudy Gay|\n|player104|  32|  Marco Belinelli|\n+---------+----+-----------------+\n...\n
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/#step_3_modify_configuration_file","title":"Step 3: Modify configuration file","text":"

              After Exchange is compiled, copy the conf file target/classes/application.conf to set Hive data source configuration. In this example, the copied file is called hive_application.conf. For details on each configuration item, see Parameters in the configuration file.

              {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.8.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    cores: {\n      max: 16\n    }\n  }\n\n  # If Spark and Hive are deployed in different clusters, you need to configure the parameters for connecting to Hive. Otherwise, skip these configurations.\n  #hive: {\n  #  waredir: \"hdfs://NAMENODE_IP:9000/apps/svr/hive-xxx/warehouse/\"\n  #  connectionURL: \"jdbc:mysql://your_ip:3306/hive_spark?characterEncoding=UTF-8\"\n  #  connectionDriverName: \"com.mysql.jdbc.Driver\"\n  #  connectionUserName: \"user\"\n  #  connectionPassword: \"password\"\n  #}\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and all Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n  # Processing vertexes\n  tags: [\n    # Set the information about the Tag player.\n    {\n      # The Tag name in NebulaGraph.\n      name: player\n      type: {\n        # Specify the data source file format to Hive.\n        source: hive\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # Set the SQL statement to read the data of player table in basketball database.\n      exec: \"select playerid, age, name from basketball.player\"\n\n      # Specify the column names in the player table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [age,name]\n      nebula.fields: [age,name]\n\n      # Specify a column of data in the table as the source of vertex VID in the NebulaGraph.\n      vertex:{\n        field:playerid\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n    # Set the information about the Tag Team.\n    {\n      name: team\n      type: {\n        source: hive\n        sink: client\n      }\n      exec: \"select teamid, name from basketball.team\"\n      fields: [name]\n      nebula.fields: [name]\n      vertex: {\n        field: teamid\n      }\n      batch: 256\n      partition: 32\n    }\n\n  ]\n\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # The corresponding Edge Type name in NebulaGraph.\n      name: follow\n\n      type: {\n        # Specify the data source file format to Hive.\n        source: hive\n\n        # Specify how to import the Edge type data into NebulaGraph.\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # Set the SQL statement to read the data of follow table in the basketball database.\n      exec: \"select src_player, dst_player, degree from basketball.follow\"\n\n      # Specify the column names in the follow table in Fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [degree]\n      nebula.fields: [degree]\n\n      # In source, use a column in the follow table as the source of the edge's starting vertex.\n      # In target, use a column in the follow table as the source of the edge's destination vertex.\n      source: {\n        field: src_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      target: {\n        field: dst_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Edge Type serve.\n    {\n      name: serve\n      type: {\n        source: hive\n        sink: client\n      }\n      exec: \"select playerid, teamid, start_year, end_year from basketball.serve\"\n      fields: [start_year,end_year]\n      nebula.fields: [start_year,end_year]\n      source: {\n        field: playerid\n      }\n      target: {\n        field: teamid\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      batch: 256\n      partition: 32\n    }\n  ]\n}\n
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/#step_4_import_data_into_nebulagraph","title":"Step 4: Import data into NebulaGraph","text":"

              Run the following command to import Hive data into NebulaGraph. For a description of the parameters, see Options for import.

              ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <hive_application.conf_path> -h\n

              Note

              JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

              For example:

              ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.8.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/hive_application.conf -h\n

              You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/#access_hdfs_data_with_kerberos_certification","title":"Access HDFS data with Kerberos certification","text":"

              When using Kerberos for security certification, you can access the HDFS data in one of the following ways.

              • Configure the Kerberos configuration file in a command

                Configure --conf and --files in the command, for example:

                ${SPARK_HOME}/bin/spark-submit --master xxx  --num-executors 2 --executor-cores 2 --executor-memory 1g \\\n--conf \"spark.driver.extraJavaOptions=-Djava.security.krb5.conf=./krb5.conf\" \\\n--conf \"spark.executor.extraJavaOptions=-Djava.security.krb5.conf=./krb5.conf\" \\\n--files /local/path/to/xxx.keytab,/local/path/to/krb5.conf \\\n--class  com.vesoft.nebula.exchange.Exchange  \\\nexchange.jar -c xx.conf\n

                The file path in --conf can be configured in two ways as follows:

                • Configure the absolute path to the file. All YARN or Spark machines are required to have the corresponding file in the same path.
                • (Recommended in YARN mode) Configure the relative path to the file (e.g. ./krb5.conf). The resource files uploaded via --files are located in the working directory of the Java virtual machine or JAR.

                The files in --files must be stored on the machine where the spark-submit command is executed.

              • Without commands

                Deploy the Spark and Kerberos-certified Hadoop in a same cluster to make them share HDFS and YARN, and then add the configuration export HADOOP_HOME=<hadoop_home_path> to spark-env.sh in Spark.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/#step_5_optional_validate_data","title":"Step 5: (optional) Validate data","text":"

              Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

              LOOKUP ON player YIELD id(vertex);\n

              Users can also run the SHOW STATS command to view statistics.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-hive/#step_6_optional_rebuild_indexes_in_nebulagraph","title":"Step 6: (optional) Rebuild indexes in NebulaGraph","text":"

              With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-jdbc/","title":"Import data from general JDBC","text":"

              JDBC data refers to the data of various databases accessed through the JDBC interface. This topic provides an example of how to use Exchange to export MySQL data and import to NebulaGraph.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-jdbc/#data_set","title":"Data set","text":"

              This topic takes the basketballplayer dataset as an example.

              In this example, the data set has been stored in MySQL. All vertexes and edges are stored in the player, team, follow, and serve tables. The following are some of the data for each table.

              mysql> desc player;\n+----------+-------------+------+-----+---------+-------+\n| Field    | Type        | Null | Key | Default | Extra |\n+----------+-------------+------+-----+---------+-------+\n| playerid | int         | YES  |     | NULL    |       |\n| age      | int         | YES  |     | NULL    |       |\n| name     | varchar(30) | YES  |     | NULL    |       |\n+----------+-------------+------+-----+---------+-------+\n\nmysql> desc team;\n+--------+-------------+------+-----+---------+-------+\n| Field  | Type        | Null | Key | Default | Extra |\n+--------+-------------+------+-----+---------+-------+\n| teamid | int         | YES  |     | NULL    |       |\n| name   | varchar(30) | YES  |     | NULL    |       |\n+--------+-------------+------+-----+---------+-------+\n\nmysql> desc follow;\n+------------+-------------+------+-----+---------+-------+\n| Field      | Type        | Null | Key | Default | Extra |\n+------------+-------------+------+-----+---------+-------+\n| src_player | int         | YES  |     | NULL    |       |\n| dst_player | int         | YES  |     | NULL    |       |\n| degree     | int         | YES  |     | NULL    |       |\n+------------+-------------+------+-----+---------+-------+\n\nmysql> desc serve;\n+------------+-------------+------+-----+---------+-------+\n| Field      | Type        | Null | Key | Default | Extra |\n+------------+-------------+------+-----+---------+-------+\n| playerid   | int         | YES  |     | NULL    |       |\n| teamid     | int         | YES  |     | NULL    |       |\n| start_year | int         | YES  |     | NULL    |       |\n| end_year   | int         | YES  |     | NULL    |       |\n+------------+-------------+------+-----+---------+-------+\n
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-jdbc/#environment","title":"Environment","text":"

              This example is done on MacOS. Here is the environment configuration information:

              • Hardware specifications:
                • CPU: 1.7 GHz Quad-Core Intel Core i7
                • Memory: 16 GB
              • Spark: 2.4.7, stand-alone
              • MySQL: 8.0.23
              • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-jdbc/#prerequisites","title":"Prerequisites","text":"

              Before importing data, you need to confirm the following information:

              • NebulaGraph has been installed and deployed with the following information:

                • IP addresses and ports of Graph and Meta services.
                • The user name and password with write permission to NebulaGraph.
              • Exchange has been compiled, or download the compiled .jar file directly.
              • Spark has been installed.
              • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
              • The Hadoop service has been installed and started.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-jdbc/#precautions","title":"Precautions","text":"

              nebula-exchange_spark_2.2 supports only single table queries, not multi-table queries.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-jdbc/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-jdbc/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

              Analyze the data to create a Schema in NebulaGraph by following these steps:

              1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

                Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
              2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

                ## Create a graph space.\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer.\nnebula> USE basketballplayer;\n\n## Create the Tag player.\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team.\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow.\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve.\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

              For more information, see Quick start workflow.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-jdbc/#step_2_modify_configuration_files","title":"Step 2: Modify configuration files","text":"

              After Exchange is compiled, copy the conf file target/classes/application.conf to set JDBC data source configuration. In this case, the copied file is called jdbc_application.conf. For details on each configuration item, see Parameters in the configuration file.

              {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.8.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    cores: {\n      max: 16\n    }\n  }\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n  # Processing vertexes\n  tags: [\n    # Set the information about the Tag player.\n    {\n      # The Tag name in NebulaGraph.\n      name: player\n      type: {\n        # Specify the data source file format to JDBC.\n        source: jdbc\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # URL of the JDBC data source. The example is MySql database.\n      url:\"jdbc:mysql://127.0.0.1:3306/basketball?useUnicode=true&characterEncoding=utf-8\"\n\n      # JDBC driver \n      driver:\"com.mysql.cj.jdbc.Driver\"\n\n      # Database user name and password\n      user:\"root\"\n      password:\"12345\"\n\n      # Scanning a single table to read data.\n      # nebula-exchange_spark_2.2 must configure this parameter, and can additionally configure sentence.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as sentence.\n      table:\"basketball.player\"\n\n      # Use query statement to read data.\n      # nebula-exchange_spark_2.2 can configure this parameter. Multi-table queries are not supported. Only the table name needs to be written after from. The form `db.table` is not supported.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as table. Multi-table queries are supported.\n      # sentence:\"select playerid, age, name from player, team order by playerid\"\n\n      # (optional)Multiple connections read parameters. See https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html\n      partitionColumn:playerid    # optional. Must be a numeric, date, or timestamp column from the table in question.\n      lowerBound:1                # optional\n      upperBound:5                # optional\n      numPartitions:5             # optional\n\n\n      fetchSize:2           # The JDBC fetch size, which determines how many rows to fetch per round trip.\n\n      # Specify the column names in the player table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [age,name]\n      nebula.fields: [age,name]\n\n      # Specify a column of data in the table as the source of VIDs in the NebulaGraph.\n      vertex: {\n        field:playerid\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n    # Set the information about the Tag Team.\n    {\n      name: team\n      type: {\n        source: jdbc\n        sink: client\n      }\n\n      url:\"jdbc:mysql://127.0.0.1:3306/basketball?useUnicode=true&characterEncoding=utf-8\"\n      driver:\"com.mysql.cj.jdbc.Driver\"\n      user:root\n      password:\"12345\"\n      table:team\n      sentence:\"select teamid, name from team order by teamid\"\n      partitionColumn:teamid    \n      lowerBound:1                \n      upperBound:5                \n      numPartitions:5             \n      fetchSize:2  \n\n      fields: [name]\n      nebula.fields: [name]\n      vertex: {\n        field: teamid\n      }\n      batch: 256\n      partition: 32\n    }\n\n  ]\n\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # The corresponding Edge Type name in NebulaGraph.\n      name: follow\n\n      type: {\n        # Specify the data source file format to JDBC.\n        source: jdbc\n\n        # Specify how to import the Edge type data into NebulaGraph.\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      url:\"jdbc:mysql://127.0.0.1:3306/basketball?useUnicode=true&characterEncoding=utf-8\"\n      driver:\"com.mysql.cj.jdbc.Driver\"\n      user:root\n      password:\"12345\"\n\n      # Scanning a single table to read data.\n      # nebula-exchange_spark_2.2 must configure this parameter, and can additionally configure sentence.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as sentence.\n      table:\"basketball.follow\"\n\n      # Use query statement to read data.\n      # nebula-exchange_spark_2.2 can configure this parameter. Multi-table queries are not supported. Only the table name needs to be written after from. The form `db.table` is not supported.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as table. Multi-table queries are supported.\n      # sentence:\"select src_player,dst_player,degree from follow order by src_player\"\n\n      partitionColumn:src_player    \n      lowerBound:1                \n      upperBound:5                \n      numPartitions:5             \n      fetchSize:2  \n\n      # Specify the column names in the follow table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [degree]\n      nebula.fields: [degree]\n\n      # In source, use a column in the follow table as the source of the edge's source vertex.\n      # In target, use a column in the follow table as the source of the edge's destination vertex.\n      source: {\n        field: src_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      target: {\n        field: dst_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Edge Type serve.\n    {\n      name: serve\n      type: {\n        source: jdbc\n        sink: client\n      }\n\n      url:\"jdbc:mysql://127.0.0.1:3306/basketball?useUnicode=true&characterEncoding=utf-8\"\n      driver:\"com.mysql.cj.jdbc.Driver\"\n      user:root\n      password:\"12345\"\n      table:serve\n      sentence:\"select playerid,teamid,start_year,end_year from serve order by playerid\"\n      partitionColumn:playerid    \n      lowerBound:1                \n      upperBound:5                \n      numPartitions:5             \n      fetchSize:2\n\n      fields: [start_year,end_year]\n      nebula.fields: [start_year,end_year]\n      source: {\n        field: playerid\n      }\n      target: {\n        field: teamid\n      }\n      batch: 256\n      partition: 32\n    }\n  ]\n}\n
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-jdbc/#step_3_import_data_into_nebulagraph","title":"Step 3: Import data into NebulaGraph","text":"

              Run the following command to import general JDBC data into NebulaGraph. For a description of the parameters, see Options for import.

              ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <jdbc_application.conf_path>\n

              Note

              JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

              For example:

              ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.8.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/jdbc_application.conf\n

              You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-jdbc/#step_4_optional_validate_data","title":"Step 4: (optional) Validate data","text":"

              Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

              LOOKUP ON player YIELD id(vertex);\n

              Users can also run the SHOW STATS command to view statistics.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-jdbc/#step_5_optional_rebuild_indexes_in_nebulagraph","title":"Step 5: (optional) Rebuild indexes in NebulaGraph","text":"

              With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/","title":"Import data from JSON files","text":"

              This topic provides an example of how to use Exchange to import NebulaGraph data stored in HDFS or local JSON files.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/#data_set","title":"Data set","text":"

              This topic takes the basketballplayer dataset as an example. Some sample data are as follows:

              • player

                {\"id\":\"player100\",\"age\":42,\"name\":\"Tim Duncan\"}\n{\"id\":\"player101\",\"age\":36,\"name\":\"Tony Parker\"}\n{\"id\":\"player102\",\"age\":33,\"name\":\"LaMarcus Aldridge\"}\n{\"id\":\"player103\",\"age\":32,\"name\":\"Rudy Gay\"}\n...\n
              • team

                {\"id\":\"team200\",\"name\":\"Warriors\"}\n{\"id\":\"team201\",\"name\":\"Nuggets\"}\n...\n
              • follow

                {\"src\":\"player100\",\"dst\":\"player101\",\"degree\":95}\n{\"src\":\"player101\",\"dst\":\"player102\",\"degree\":90}\n...\n
              • serve

                {\"src\":\"player100\",\"dst\":\"team204\",\"start_year\":\"1997\",\"end_year\":\"2016\"}\n{\"src\":\"player101\",\"dst\":\"team204\",\"start_year\":\"1999\",\"end_year\":\"2018\"}\n...\n
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/#environment","title":"Environment","text":"

              This example is done on MacOS. Here is the environment configuration information:

              • Hardware specifications:
                • CPU: 1.7 GHz Quad-Core Intel Core i7
                • Memory: 16 GB
              • Spark: 2.4.7, stand-alone
              • Hadoop: 2.9.2, pseudo-distributed deployment
              • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/#prerequisites","title":"Prerequisites","text":"

              Before importing data, you need to confirm the following information:

              • NebulaGraph has been installed and deployed with the following information:

                • IP addresses and ports of Graph and Meta services.
                • The user name and password with write permission to NebulaGraph.
              • Exchange has been compiled, or download the compiled .jar file directly.
              • Spark has been installed.
              • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
              • If files are stored in HDFS, ensure that the Hadoop service is running properly.
              • If files are stored locally and NebulaGraph is a cluster architecture, you need to place the files in the same directory locally on each machine in the cluster.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

              Analyze the data to create a Schema in NebulaGraph by following these steps:

              1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

                Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
              2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

                ## Create a graph space.\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer.\nnebula> USE basketballplayer;\n\n## Create the Tag player.\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team.\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow.\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve.\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

              For more information, see Quick start workflow.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/#step_2_process_json_files","title":"Step 2: Process JSON files","text":"

              Confirm the following information:

              1. Process JSON files to meet Schema requirements.

              2. Obtain the JSON file storage path.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/#step_3_modify_configuration_files","title":"Step 3: Modify configuration files","text":"

              After Exchange is compiled, copy the conf file target/classes/application.conf to set JSON data source configuration. In this example, the copied file is called json_application.conf. For details on each configuration item, see Parameters in the configuration file.

              {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.8.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    executor: {\n        memory:1G\n    }\n\n    cores: {\n      max: 16\n    }\n  }\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and all Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"    \n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n\n  # Processing vertexes\n  tags: [\n    # Set the information about the Tag player.\n    {\n      # Specify the Tag name defined in NebulaGraph.\n      name: player\n      type: {\n        # Specify the data source file format to JSON.\n        source: json\n\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # Specify the path to the JSON file.\n      # If the file is stored in HDFS, use double quotation marks to enclose the file path, starting with hdfs://. For example, \"hdfs://ip:port/xx/xx\".\n      # If the file is stored locally, use double quotation marks to enclose the file path, starting with file://. For example, \"file:///tmp/xx.json\".\n      path: \"hdfs://192.168.*.*:9000/data/vertex_player.json\"\n\n      # Specify the key name in the JSON file in fields, and its corresponding value will serve as the data source for the properties specified in the NebulaGraph.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [age,name]\n\n      # Specify the column names in the player table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      nebula.fields: [age, name]\n\n      # Specify a column of data in the table as the source of vertex VID in the NebulaGraph.\n      # The value of vertex must be the same as that in the JSON file.\n      # Currently, NebulaGraph master supports only strings or integers of VID.\n      vertex: {\n        field:id\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Tag Team.\n{\n      name: team\n      type: {\n        source: json\n        sink: client\n      }\n      path: \"hdfs://192.168.*.*:9000/data/vertex_team.json\"\n      fields: [name]\n      nebula.fields: [name]\n      vertex: {\n        field:id\n      }\n      batch: 256\n      partition: 32\n    }\n\n\n    # If more vertexes need to be added, refer to the previous configuration to add them.\n  ]\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # Specify the Edge Type name defined in NebulaGraph.\n      name: follow\n      type: {\n        # Specify the data source file format to JSON.\n        source: json\n\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # Specify the path to the JSON file.\n      # If the file is stored in HDFS, use double quotation marks to enclose the file path, starting with hdfs://. For example, \"hdfs://ip:port/xx/xx\".\n      # If the file is stored locally, use double quotation marks to enclose the file path, starting with file://. For example, \"file:///tmp/xx.json\".\n      path: \"hdfs://192.168.*.*:9000/data/edge_follow.json\"\n\n      # Specify the key name in the JSON file in fields, and its corresponding value will serve as the data source for the properties specified in the NebulaGraph.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [degree]\n\n      # Specify the column names in the edge table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      nebula.fields: [degree]\n\n      # Specify a column as the source for the source and destination vertexes.\n      # The value of vertex must be the same as that in the JSON file.\n      # Currently, NebulaGraph master supports only strings or integers of VID.\n      source: {\n        field: src\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n      target: {\n        field: dst\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Edge Type serve.\n    {\n      name: serve\n      type: {\n        source: json\n        sink: client\n      }\n      path: \"hdfs://192.168.*.*:9000/data/edge_serve.json\"\n      fields: [start_year,end_year]\n      nebula.fields: [start_year, end_year]\n      source: {\n        field: src\n      }\n      target: {\n        field: dst\n      }\n      batch: 256\n      partition: 32\n    }\n\n  ]\n  # If more edges need to be added, refer to the previous configuration to add them.\n}\n
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/#step_4_import_data_into_nebulagraph","title":"Step 4: Import data into NebulaGraph","text":"

              Run the following command to import JSON data into NebulaGraph. For a description of the parameters, see Options for import.

              ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <json_application.conf_path> \n

              Note

              JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

              For example:

              ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-echange/nebula-exchange/target/nebula-exchange_spark_2.4-3.8.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/json_application.conf\n

              You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/#access_hdfs_data_with_kerberos_certification","title":"Access HDFS data with Kerberos certification","text":"

              When using Kerberos for security certification, you can access the HDFS data in one of the following ways.

              • Configure the Kerberos configuration file in a command

                Configure --conf and --files in the command, for example:

                ${SPARK_HOME}/bin/spark-submit --master xxx  --num-executors 2 --executor-cores 2 --executor-memory 1g \\\n--conf \"spark.driver.extraJavaOptions=-Djava.security.krb5.conf=./krb5.conf\" \\\n--conf \"spark.executor.extraJavaOptions=-Djava.security.krb5.conf=./krb5.conf\" \\\n--files /local/path/to/xxx.keytab,/local/path/to/krb5.conf \\\n--class  com.vesoft.nebula.exchange.Exchange  \\\nexchange.jar -c xx.conf\n

                The file path in --conf can be configured in two ways as follows:

                • Configure the absolute path to the file. All YARN or Spark machines are required to have the corresponding file in the same path.
                • (Recommended in YARN mode) Configure the relative path to the file (e.g. ./krb5.conf). The resource files uploaded via --files are located in the working directory of the Java virtual machine or JAR.

                The files in --files must be stored on the machine where the spark-submit command is executed.

              • Without commands

                Deploy the Spark and Kerberos-certified Hadoop in a same cluster to make them share HDFS and YARN, and then add the configuration export HADOOP_HOME=<hadoop_home_path> to spark-env.sh in Spark.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/#step_5_optional_validate_data","title":"Step 5: (optional) Validate data","text":"

              Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

              LOOKUP ON player YIELD id(vertex);\n

              Users can also run the SHOW STATS command to view statistics.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-json/#step_6_optional_rebuild_indexes_in_nebulagraph","title":"Step 6: (optional) Rebuild indexes in NebulaGraph","text":"

              With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-kafka/","title":"Import data from Kafka","text":"

              This topic provides a simple guide to importing Data stored on Kafka into NebulaGraph using Exchange.

              Compatibility

              Please use Exchange 3.5.0/3.3.0/3.0.0 when importing Kafka data. In version 3.4.0, caching of imported data was added, and streaming data import is not supported.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-kafka/#environment","title":"Environment","text":"

              This example is done on MacOS. Here is the environment configuration information:

              • Hardware specifications:
                • CPU: 1.7 GHz Quad-Core Intel Core i7
                • Memory: 16 GB
              • Spark: 2.4.7, stand-alone
              • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-kafka/#prerequisites","title":"Prerequisites","text":"

              Before importing data, you need to confirm the following information:

              • NebulaGraph has been installed and deployed with the following information:

                • IP addresses and ports of Graph and Meta services.
                • The user name and password with write permission to NebulaGraph.
              • Exchange has been compiled, or download the compiled .jar file directly.
              • Spark has been installed.
              • The following JAR files have been downloaded and placed in the directory SPARK_HOME/jars of Spark:

                • spark-streaming-kafka_xxx.jar
                • spark-sql-kafka-0-10_xxx.jar
                • kafka-clients-xxx.jar
              • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
              • The Kafka service has been installed and started.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-kafka/#precautions","title":"Precautions","text":"
              • Only client mode is supported when importing Kafka data, i.e. the value of parameters tags.type.sink and edges.type.sink is client.
              • When importing Kafka data, do not use Exchange version 3.4.0, which adds caching of imported data and does not support streaming data import. Use Exchange versions 3.0.0, 3.3.0, or 3.5.0.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-kafka/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-kafka/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

              Analyze the data to create a Schema in NebulaGraph by following these steps:

              1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

                Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
              2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

                ## Create a graph space.\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer.\nnebula> USE basketballplayer;\n\n## Create the Tag player.\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team.\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow.\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve.\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

              For more information, see Quick start workflow.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-kafka/#step_2_modify_configuration_files","title":"Step 2: Modify configuration files","text":"

              Note

              If some data is stored in Kafka's value field, you need to modify the source code, get the value from Kafka, parse the value through the from_JSON function, and return it as a Dataframe.

              After Exchange is compiled, copy the conf file target/classes/application.conf to set Kafka data source configuration. In this example, the copied file is called kafka_application.conf. For details on each configuration item, see Parameters in the configuration file.

              Note

              When importing Kafka data, a configuration file can only handle one tag or edge type. If there are multiple tag or edge types, you need to create multiple configuration files.

              {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.8.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    cores: {\n      max: 16\n    }\n  }\n\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and all Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n  # Processing vertexes\n  tags: [\n    # Set the information about the Tag player.\n    {\n\n      # The corresponding Tag name in NebulaGraph.\n      name: player\n      type: {\n        # Specify the data source file format to Kafka.\n        source: kafka\n        # Specify how to import the data into NebulaGraph. Only client is supported.\n        sink: client\n      }\n      # Kafka server address.\n      service: \"127.0.0.1:9092\"\n      # Message category.\n      topic: \"topic_name1\"\n\n      # If Kafka uses Kerberos for security certification, the following parameters need to be set. If Kafka uses SASL or SASL_PLAINTEXT for security certification, you do not need to set kerberos or kerberosServiceName.\n      #securityProtocol: SASL_PLAINTEXT\n      #mechanism: GASSAPI\n      #kerberos: true\n      #kerberosServiceName: kafka\n\n      # Kafka data has a fixed domain name: key, value, topic, partition, offset, timestamp, timestampType.\n      # If multiple fields need to be specified after Spark reads as DataFrame, separate them with commas.\n      # Specify the field name in fields. For example, use key for name in NebulaGraph and value for age in Nebula, as shown in the following.\n      fields: [key,value]\n      nebula.fields: [name,age]\n\n      # Specify a column of data in the table as the source of vertex VID in the NebulaGraph.\n      # The key is the same as the value above, indicating that key is used as both VID and property name.\n      vertex:{\n          field:key\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 10\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 10\n      # The interval for message reading. Unit: second.\n      interval.seconds: 10\n      # The consumer offsets. The default value is latest. Optional value are latest and earliest.\n      startingOffsets: latest\n      # Flow control, with a rate limit on the maximum offset processed per trigger interval, may not be configured.\n      # maxOffsetsPerTrigger:10000\n    }\n  ]\n\n  # Processing edges\n  #edges: [\n  #  # Set the information about the Edge Type follow.\n  #  {\n  #    # The corresponding Edge Type name in NebulaGraph.\n  #    name: follow\n\n  #    type: {\n  #      # Specify the data source file format to Kafka.\n  #      source: kafka\n\n  #      # Specify how to import the Edge type data into NebulaGraph.\n  #      # Specify how to import the data into NebulaGraph. Only client is supported.\n  #      sink: client\n  #    }\n\n  #    # Kafka server address.\n  #    service: \"127.0.0.1:9092\"\n  #    # Message category.\n  #    topic: \"topic_name3\"\n\n  #    # If Kafka uses Kerberos for security certification, the following parameters need to be set. If Kafka uses SASL or SASL_PLAINTEXT for security certification, you do not need to set kerberos or kerberosServiceName.\n  #    #securityProtocol: SASL_PLAINTEXT\n  #    #mechanism: GASSAPI\n  #    #kerberos: true\n  #    #kerberosServiceName: kafka\n\n  #    # Kafka data has a fixed domain name: key, value, topic, partition, offset, timestamp, timestampType.\n  #    # If multiple fields need to be specified after Spark reads as DataFrame, separate them with commas.\n  #    # Specify the field name in fields. For example, use key for degree in Nebula, as shown in the following.\n  #    fields: [key]\n  #    nebula.fields: [degree]\n\n  #    # In source, use a column in the topic as the source of the edge's source vertex.\n  #    # In target, use a column in the topic as the source of the edge's destination vertex.\n  #    source:{\n  #        field:timestamp\n  #    # udf:{\n  #    #            separator:\"_\"\n  #    #            oldColNames:[field-0,field-1,field-2]\n  #    #            newColName:new-field\n  #    #        }\n  #    # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n  #    # prefix:\"tag1\"\n  #    # Performs hashing operations on VIDs of type string.\n  #    # policy:hash\n  #    }\n\n\n  #    target:{\n  #        field:offset\n  #    # udf:{\n  #    #            separator:\"_\"\n  #    #            oldColNames:[field-0,field-1,field-2]\n  #    #            newColName:new-field\n  #    #        }\n  #    # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n  #    # prefix:\"tag1\"\n  #    # Performs hashing operations on VIDs of type string.\n  #    # policy:hash\n  #    }\n\n  #    # (Optional) Specify a column as the source of the rank.\n  #    #ranking: rank\n\n  #    # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n  #    #writeMode: INSERT\n\n  #    # The number of data written to NebulaGraph in a single batch.\n  #    batch: 10\n\n  #    # The number of partitions to be created when the data is written to NebulaGraph.\n  #    partition: 10\n\n  #    # The interval for message reading. Unit: second.\n  #    interval.seconds: 10\n  #    # The consumer offsets. The default value is latest. Optional value are latest and earliest.\n  #    startingOffsets: latest\n  #    # Flow control, with a rate limit on the maximum offset processed per trigger interval, may not be configured.\n  #    # maxOffsetsPerTrigger:10000\n  #  }\n  #]\n}\n
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-kafka/#step_3_import_data_into_nebulagraph","title":"Step 3: Import data into NebulaGraph","text":"

              Run the following command to import Kafka data into NebulaGraph. For a description of the parameters, see Options for import.

              ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <kafka_application.conf_path>\n

              Note

              • The JAR package needs to be obtained from the NebulaGraph Enterprise Edition Package.
              • If Kafka's security certification is enabled, you need to configure the driver and executor when importing data. See the example below.

              Example:

              • No security certification

                ${SPARK_HOME}/bin/spark-submit  --master \"local\" \\\n--class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/target/nebula-exchange_spark_2.4-3.8.0.jar  \\\n-c /root/nebula-exchange/target/classes/kafka_application.conf\n
              • Enable Kerberos security certification

                ${SPARK_HOME}/bin/spark-submit  --master \"local\" \\\n--conf \"spark.driver.extraJavaOptions=-Djava.security.auth.login.config=/path/kafka_client_jaas.conf -Djava.security.krb5.conf=/path/krb5.conf\" \\\n--conf \"spark.executor.extraJavaOptions=-Djava.security.auth.login.config=/path/kafka_client_jaas.conf -Djava.security.krb5.conf=/path/krb5.conf\" \\\n--files /local/path/kafka_client_jaas.conf,/local/path/kafka.keytab,/local/path/krb5.conf \\\n--class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/target/nebula-exchange_spark_2.4-3.8.0.jar  \\\n-c /root/nebula-exchange/target/classes/kafka_application.conf\n
              • Enable SASL/SASL_PLAINTEXT security certification

                ${SPARK_HOME}/bin/spark-submit  --master \"local\" \\\n--conf \"spark.driver.extraJavaOptions=-Djava.security.auth.login.config=/path/kafka_client_jaas.conf\" \\\n--conf \"spark.executor.extraJavaOptions=-Djava.security.auth.login.config=/path/kafka_client_jaas.conf\" \\\n--files /local/path/kafka_client_jaas.conf \\\n--class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/target/nebula-exchange_spark_2.4-3.8.0.jar  \\\n-c /root/nebula-exchange/target/classes/kafka_application.conf\n

              You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-kafka/#step_4_optional_validate_data","title":"Step 4: (optional) Validate data","text":"

              Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

              LOOKUP ON player YIELD id(vertex);\n

              Users can also run the SHOW STATS command to view statistics.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-kafka/#step_5_optional_rebuild_indexes_in_nebulagraph","title":"Step 5: (optional) Rebuild indexes in NebulaGraph","text":"

              With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute/","title":"Import data from MaxCompute","text":"

              This topic provides an example of how to use Exchange to import NebulaGraph data stored in MaxCompute.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute/#data_set","title":"Data set","text":"

              This topic takes the basketballplayer dataset as an example.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute/#environment","title":"Environment","text":"

              This example is done on MacOS. Here is the environment configuration information:

              • Hardware specifications:
                • CPU: 1.7 GHz Quad-Core Intel Core i7
                • Memory: 16 GB
              • Spark: 2.4.7, stand-alone
              • MaxCompute: Alibaba Cloud official version
              • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute/#prerequisites","title":"Prerequisites","text":"

              Before importing data, you need to confirm the following information:

              • NebulaGraph has been installed and deployed with the following information:

                • IP addresses and ports of Graph and Meta services.
                • The user name and password with write permission to NebulaGraph.
              • Exchange has been compiled, or download the compiled .jar file directly.
              • Spark has been installed.
              • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

              Analyze the data to create a Schema in NebulaGraph by following these steps:

              1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

                Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
              2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

                ## Create a graph space.\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer.\nnebula> USE basketballplayer;\n\n## Create the Tag player.\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team.\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow.\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve.\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

              For more information, see Quick start workflow.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute/#step_2_modify_configuration_files","title":"Step 2: Modify configuration files","text":"

              After Exchange is compiled, copy the conf file target/classes/application.conf to set MaxCompute data source configuration. In this example, the copied file is called maxcompute_application.conf. For details on each configuration item, see Parameters in the configuration file.

              {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.8.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    cores: {\n      max: 16\n    }\n  }\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n  # Processing vertexes\n  tags: [\n    # Set the information about the Tag player.\n    {\n      name: player\n      type: {\n        # Specify the data source file format to MaxCompute.\n        source: maxcompute\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # Table name of MaxCompute.\n      table:player\n\n      # Project name of MaxCompute.\n      project:project\n\n      # OdpsUrl and tunnelUrl for the MaxCompute service.\n      # The address is https://help.aliyun.com/document_detail/34951.html.\n      odpsUrl:\"http://service.cn-hangzhou.maxcompute.aliyun.com/api\"\n      tunnelUrl:\"http://dt.cn-hangzhou.maxcompute.aliyun.com\"\n\n      # AccessKeyId and accessKeySecret of the MaxCompute service.\n      accessKeyId:xxx\n      accessKeySecret:xxx\n\n      # Partition description of the MaxCompute table. This configuration is optional.\n      partitionSpec:\"dt='partition1'\"\n\n      # Ensure that the table name in the SQL statement is the same as the value of the table above. This configuration is optional.\n      sentence:\"select id, name, age, playerid from player where id < 10\"\n\n      # Specify the column names in the player table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields:[name, age]\n      nebula.fields:[name, age]\n\n      # Specify a column of data in the table as the source of vertex VID in the NebulaGraph.\n      vertex:{\n        field: playerid\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Tag Team.\n    {\n      name: team\n      type: {\n        source: maxcompute\n        sink: client\n      }\n      table:team\n      project:project\n      odpsUrl:\"http://service.cn-hangzhou.maxcompute.aliyun.com/api\"\n      tunnelUrl:\"http://dt.cn-hangzhou.maxcompute.aliyun.com\"\n      accessKeyId:xxx\n      accessKeySecret:xxx\n      partitionSpec:\"dt='partition1'\"\n      sentence:\"select id, name, teamid from team where id < 10\"\n      fields:[name]\n      nebula.fields:[name]\n      vertex:{\n        field: teamid\n      }\n      batch: 256\n      partition: 32\n    }\n  ]\n\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # The corresponding Edge Type name in NebulaGraph.\n      name: follow\n\n      type:{\n        # Specify the data source file format to MaxCompute.\n        source:maxcompute\n\n        # Specify how to import the Edge type data into NebulaGraph.\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink:client\n      }\n\n      # Table name of MaxCompute.\n      table:follow\n\n      # Project name of MaxCompute.\n      project:project\n\n      # OdpsUrl and tunnelUrl for MaxCompute service.\n      # The address is https://help.aliyun.com/document_detail/34951.html.\n      odpsUrl:\"http://service.cn-hangzhou.maxcompute.aliyun.com/api\"\n      tunnelUrl:\"http://dt.cn-hangzhou.maxcompute.aliyun.com\"\n\n      # AccessKeyId and accessKeySecret of the MaxCompute service.\n      accessKeyId:xxx\n      accessKeySecret:xxx\n\n      # Partition description of the MaxCompute table. This configuration is optional.\n      partitionSpec:\"dt='partition1'\"\n\n      # Ensure that the table name in the SQL statement is the same as the value of the table above. This configuration is optional.\n      sentence:\"select * from follow\"\n\n      # Specify the column names in the follow table in Fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields:[degree]\n      nebula.fields:[degree]\n\n      # In source, use a column in the follow table as the source of the edge's source vertex.\n      source:{\n        field: src_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # In target, use a column in the follow table as the source of the edge's destination vertex.\n      target:{\n        field: dst_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition:10\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch:10\n    }\n\n    # Set the information about the Edge Type serve.\n    {\n      name: serve\n      type:{\n        source:maxcompute\n        sink:client\n      }\n      table:serve\n      project:project\n      odpsUrl:\"http://service.cn-hangzhou.maxcompute.aliyun.com/api\"\n      tunnelUrl:\"http://dt.cn-hangzhou.maxcompute.aliyun.com\"\n      accessKeyId:xxx\n      accessKeySecret:xxx\n      partitionSpec:\"dt='partition1'\"\n      sentence:\"select * from serve\"\n      fields:[start_year,end_year]\n      nebula.fields:[start_year,end_year]\n      source:{\n        field: playerid\n      }\n      target:{\n        field: teamid\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      partition:10\n      batch:10\n    }\n  ]\n}\n
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute/#step_3_import_data_into_nebulagraph","title":"Step 3: Import data into NebulaGraph","text":"

              Run the following command to import MaxCompute data into NebulaGraph. For a description of the parameters, see Options for import.

              ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <maxcompute_application.conf_path>\n

              Note

              JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

              For example:

              ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.8.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/maxcompute_application.conf\n

              You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute/#step_4_optional_validate_data","title":"Step 4: (optional) Validate data","text":"

              Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

              LOOKUP ON player YIELD id(vertex);\n

              Users can also run the SHOW STATS command to view statistics.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-maxcompute/#step_5_optional_rebuild_indexes_in_nebulagraph","title":"Step 5: (optional) Rebuild indexes in NebulaGraph","text":"

              With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-mysql/","title":"Import data from MySQL/PostgreSQL","text":"

              This topic provides an example of how to use Exchange to export MySQL data and import to NebulaGraph. It also applies to exporting data from PostgreSQL into NebulaGraph.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-mysql/#data_set","title":"Data set","text":"

              This topic takes the basketballplayer dataset as an example.

              In this example, the data set has been stored in MySQL. All vertexes and edges are stored in the player, team, follow, and serve tables. The following are some of the data for each table.

              mysql> desc player;\n+----------+-------------+------+-----+---------+-------+\n| Field    | Type        | Null | Key | Default | Extra |\n+----------+-------------+------+-----+---------+-------+\n| playerid | varchar(30) | YES  |     | NULL    |       |\n| age      | int         | YES  |     | NULL    |       |\n| name     | varchar(30) | YES  |     | NULL    |       |\n+----------+-------------+------+-----+---------+-------+\n\nmysql> desc team;\n+--------+-------------+------+-----+---------+-------+\n| Field  | Type        | Null | Key | Default | Extra |\n+--------+-------------+------+-----+---------+-------+\n| teamid | varchar(30) | YES  |     | NULL    |       |\n| name   | varchar(30) | YES  |     | NULL    |       |\n+--------+-------------+------+-----+---------+-------+\n\nmysql> desc follow;\n+------------+-------------+------+-----+---------+-------+\n| Field      | Type        | Null | Key | Default | Extra |\n+------------+-------------+------+-----+---------+-------+\n| src_player | varchar(30) | YES  |     | NULL    |       |\n| dst_player | varchar(30) | YES  |     | NULL    |       |\n| degree     | int         | YES  |     | NULL    |       |\n+------------+-------------+------+-----+---------+-------+\n\nmysql> desc serve;\n+------------+-------------+------+-----+---------+-------+\n| Field      | Type        | Null | Key | Default | Extra |\n+------------+-------------+------+-----+---------+-------+\n| playerid   | varchar(30) | YES  |     | NULL    |       |\n| teamid     | varchar(30) | YES  |     | NULL    |       |\n| start_year | int         | YES  |     | NULL    |       |\n| end_year   | int         | YES  |     | NULL    |       |\n+------------+-------------+------+-----+---------+-------+\n
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-mysql/#environment","title":"Environment","text":"

              This example is done on MacOS. Here is the environment configuration information:

              • Hardware specifications:
                • CPU: 1.7 GHz Quad-Core Intel Core i7
                • Memory: 16 GB
              • Spark: 2.4.7, stand-alone
              • MySQL: 8.0.23
              • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-mysql/#prerequisites","title":"Prerequisites","text":"

              Before importing data, you need to confirm the following information:

              • NebulaGraph has been installed and deployed with the following information:

                • IP addresses and ports of Graph and Meta services.
                • The user name and password with write permission to NebulaGraph.
              • Exchange has been compiled, or download the compiled .jar file directly.
              • Spark has been installed.
              • mysql-connector-java-xxx.jar has been downloaded and placed in the directory SPARK_HOME/jars of Spark.
              • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
              • The Hadoop service has been installed and started.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-mysql/#precautions","title":"Precautions","text":"

              nebula-exchange_spark_2.2 supports only single table queries, not multi-table queries.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-mysql/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-mysql/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

              Analyze the data to create a Schema in NebulaGraph by following these steps:

              1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

                Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
              2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

                ## Create a graph space.\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer.\nnebula> USE basketballplayer;\n\n## Create the Tag player.\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team.\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow.\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve.\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

              For more information, see Quick start workflow.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-mysql/#step_2_modify_configuration_files","title":"Step 2: Modify configuration files","text":"

              After Exchange is compiled, copy the conf file target/classes/application.conf to set MySQL data source configuration. In this case, the copied file is called mysql_application.conf. For details on each configuration item, see Parameters in the configuration file.

              {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.8.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    cores: {\n      max: 16\n    }\n  }\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n  # Processing vertexes\n  tags: [\n    # Set the information about the Tag player.\n    {\n      # The Tag name in NebulaGraph.\n      name: player\n      type: {\n        # Specify the data source file format to MySQL.\n        source: mysql\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      host:192.168.*.*\n      port:3306\n      user:\"test\"\n      password:\"123456\"\n      database:\"basketball\"\n\n      # Scanning a single table to read data.\n      # nebula-exchange_spark_2.2 must configure this parameter. Sentence is not supported.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as sentence.\n      table:\"basketball.player\"\n\n      # Use query statement to read data.\n      # This parameter is not supported by nebula-exchange_spark_2.2.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as table. Multi-table queries are supported.\n      # sentence: \"select * from people, player, team\"\n\n      # Specify the column names in the player table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [age,name]\n      nebula.fields: [age,name]\n\n      # Specify a column of data in the table as the source of VIDs in the NebulaGraph.\n      vertex: {\n        field:playerid\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n    # Set the information about the Tag Team.\n    {\n      name: team\n      type: {\n        source: mysql\n        sink: client\n      }\n\n      host:192.168.*.*\n      port:3306\n      database:\"basketball\"\n      table:\"team\"\n      user:\"test\"\n      password:\"123456\"\n      sentence:\"select teamid, name from team order by teamid;\"\n\n      fields: [name]\n      nebula.fields: [name]\n      vertex: {\n        field: teamid\n      }\n      batch: 256\n      partition: 32\n    }\n\n  ]\n\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # The corresponding Edge Type name in NebulaGraph.\n      name: follow\n\n      type: {\n        # Specify the data source file format to MySQL.\n        source: mysql\n\n        # Specify how to import the Edge type data into NebulaGraph.\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      host:192.168.*.*\n      port:3306\n      user:\"test\"\n      password:\"123456\"\n      database:\"basketball\"\n\n      # Scanning a single table to read data.\n      # nebula-exchange_spark_2.2 must configure this parameter. Sentence is not supported.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as sentence.\n      table:\"basketball.follow\"\n\n      # Use query statement to read data.\n      # This parameter is not supported by nebula-exchange_spark_2.2.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as table. Multi-table queries are supported.\n      # sentence: \"select * from follow, serve\"\n\n      # Specify the column names in the follow table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [degree]\n      nebula.fields: [degree]\n\n      # In source, use a column in the follow table as the source of the edge's source vertex.\n      # In target, use a column in the follow table as the source of the edge's destination vertex.\n      source: {\n        field: src_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      target: {\n        field: dst_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Edge Type serve.\n    {\n      name: serve\n      type: {\n        source: mysql\n        sink: client\n      }\n\n      host:192.168.*.*\n      port:3306\n      database:\"basketball\"\n      table:\"serve\"\n      user:\"test\"\n      password:\"123456\"\n      sentence:\"select playerid,teamid,start_year,end_year from serve order by playerid;\"\n      fields: [start_year,end_year]\n      nebula.fields: [start_year,end_year]\n      source: {\n        field: playerid\n      }\n      target: {\n        field: teamid\n      }\n      batch: 256\n      partition: 32\n    }\n  ]\n}\n
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-mysql/#step_3_import_data_into_nebulagraph","title":"Step 3: Import data into NebulaGraph","text":"

              Run the following command to import MySQL data into NebulaGraph. For a description of the parameters, see Options for import.

              ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <mysql_application.conf_path>\n

              Note

              JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

              For example:

              ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.8.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/mysql_application.conf\n

              You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-mysql/#step_4_optional_validate_data","title":"Step 4: (optional) Validate data","text":"

              Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

              LOOKUP ON player YIELD id(vertex);\n

              Users can also run the SHOW STATS command to view statistics.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-mysql/#step_5_optional_rebuild_indexes_in_nebulagraph","title":"Step 5: (optional) Rebuild indexes in NebulaGraph","text":"

              With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/","title":"Import data from Neo4j","text":"

              This topic provides an example of how to use Exchange to import NebulaGraph data stored in Neo4j.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#implementation_method","title":"Implementation method","text":"

              Exchange uses Neo4j Driver 4.0.1 to read Neo4j data. Before batch export, you need to write Cypher statements that are automatically executed based on labels and relationship types and the number of Spark partitions in the configuration file to improve data export performance.

              When Exchange reads Neo4j data, it needs to do the following:

              1. The Reader in Exchange replaces the statement following the Cypher RETURN statement in the exec part of the configuration file with COUNT(*), and executes this statement to get the total amount of data, then calculates the starting offset and size of each partition based on the number of Spark partitions.

              2. (Optional) If the user has configured the check_point_path directory, Reader reads the files in the directory. In the transferring state, Reader calculates the offset and size that each Spark partition should have.

              3. In each Spark partition, the Reader in Exchange adds different SKIP and LIMIT statements to the Cypher statement and calls the Neo4j Driver for parallel execution to distribute data to different Spark partitions.

              4. The Reader finally processes the returned data into a DataFrame.

              At this point, Exchange has finished exporting the Neo4j data. The data is then written in parallel to the NebulaGraph database.

              The whole process is illustrated below.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#data_set","title":"Data set","text":"

              This topic takes the basketballplayer dataset as an example.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#environment","title":"Environment","text":"

              This example is done on MacOS. Here is the environment configuration information:

              • Hardware specifications:

                • CPU\uff1aIntel(R) Xeon(R) CPU E5-2697 v3 @ 2.60GHz
                • CPU cores: 14
                • Memory: 251 GB
              • Spark: Stand-alone, 2.4.6 pre-build for Hadoop 2.7
              • Neo4j: 3.5.20 Community Edition
              • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#prerequisites","title":"Prerequisites","text":"

              Before importing data, you need to confirm the following information:

              • NebulaGraph has been installed and deployed with the following information:

                • IP addresses and ports of Graph and Meta services.
                • The user name and password with NebulaGraph write permission.
              • Exchange has been compiled, or download the compiled .jar file directly.
              • Spark has been installed.
              • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

              Analyze the data to create a Schema in NebulaGraph by following these steps:

              1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

                Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
              2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

                ## Create a graph space\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer\nnebula> USE basketballplayer;\n\n## Create the Tag player\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

              For more information, see Quick start workflow.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#step_2_configuring_source_data","title":"Step 2: Configuring source data","text":"

              To speed up the export of Neo4j data, create indexes for the corresponding properties in the Neo4j database. For more information, refer to the Neo4j manual.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#step_3_modify_configuration_files","title":"Step 3: Modify configuration files","text":"

              After Exchange is compiled, copy the conf file target/classes/application.conf to set Neo4j data source configuration. In this example, the copied file is called neo4j_application.conf. For details on each configuration item, see Parameters in the configuration file.

              {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.8.0\n    }\n\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n\n    executor: {\n        memory:1G\n    }\n\n    cores: {\n      max: 16\n    }\n  }\n\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    space: basketballplayer\n\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n\n    execution: {\n      retry: 3\n    }\n\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n\n  # Processing vertexes\n  tags: [\n\n\n    # Set the information about the Tag player\n    {\n      name: player\n      type: {\n        source: neo4j\n        sink: client\n      }\n      server: \"bolt://192.168.*.*:7687\"\n      user: neo4j\n      password:neo4j\n      # bolt 3 does not support multiple databases, do not configure database names. 4 and above can configure database names.\n      # database:neo4j\n      exec: \"match (n:player) return n.id as id, n.age as age, n.name as name\"\n      fields: [age,name]\n      nebula.fields: [age,name]\n      vertex: {\n        field:id\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      partition: 10\n      batch: 1000\n      check_point_path: /tmp/test\n   }\n  # Set the information about the Tag Team\n  {\n      name: team\n      type: {\n        source: neo4j\n        sink: client\n      }\n      server: \"bolt://192.168.*.*:7687\"\n      user: neo4j\n      password:neo4j\n      database:neo4j\n      exec: \"match (n:team) return n.id as id,n.name as name\"\n      fields: [name]\n      nebula.fields: [name]\n      vertex: {\n        field:id\n      }\n      partition: 10\n      batch: 1000\n      check_point_path: /tmp/test\n   }\n  ]\n\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow\n    {\n      name: follow\n      type: {\n        source: neo4j\n        sink: client\n      }\n      server: \"bolt://192.168.*.*:7687\"\n      user: neo4j\n      password:neo4j\n      # bolt 3 does not support multiple databases, do not configure database names. 4 and above can configure database names.\n      # database:neo4j\n      exec: \"match (a:player)-[r:follow]->(b:player) return a.id as src, b.id as dst, r.degree as degree  order by id(r)\"\n      fields: [degree]\n      nebula.fields: [degree]\n      source: {\n        field: src\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n      target: {\n        field: dst\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n      #ranking: rank\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      partition: 10\n      batch: 1000\n      check_point_path: /tmp/test\n    }\n   # Set the information about the Edge Type serve\n   {\n      name: serve\n      type: {\n        source: neo4j\n        sink: client\n      }\n      server: \"bolt://192.168.*.*:7687\"\n      user: neo4j\n      password:neo4j\n      database:neo4j\n      exec: \"match (a:player)-[r:serve]->(b:team) return a.id as src, b.id as dst, r.start_year as start_year, r.end_year as end_year  order by id(r)\"\n      fields: [start_year,end_year]\n      nebula.fields: [start_year,end_year]\n      source: {\n        field: src\n      }\n      target: {\n        field: dst\n      }\n      #ranking: rank\n      partition: 10\n      batch: 1000\n      check_point_path: /tmp/test\n    }\n   ]\n}\n
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#exec_configuration","title":"Exec configuration","text":"

              When configuring either the tags.exec or edges.exec parameters, you need to fill in the Cypher query. To prevent loss of data during import, it is strongly recommended to include ORDER BY clause in Cypher queries. Meanwhile, in order to improve data import efficiency, it is better to select indexed properties for ordering. If there is no index, users can also observe the default order and select the appropriate properties for ordering to improve efficiency. If the pattern of the default order cannot be found, users can order them by the ID of the vertex or relationship and set the partition to a small value to reduce the ordering pressure of Neo4j.

              Note

              Using the ORDER BY clause lengthens the data import time.

              Exchange needs to execute different SKIP and LIMIT Cypher statements on different Spark partitions, so SKIP and LIMIT clauses cannot be included in the Cypher statements corresponding to tags.exec and edges.exec.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#tagsvertex_or_edgesvertex_configuration","title":"tags.vertex or edges.vertex configuration","text":"

              NebulaGraph uses ID as the unique primary key when creating vertexes and edges, overwriting the data in that primary key if it already exists. So, if a Neo4j property value is given as the NebulaGraph'S ID and the value is duplicated in Neo4j, duplicate IDs will be generated. One and only one of their corresponding data will be stored in the NebulaGraph, and the others will be overwritten. Because the data import process is concurrently writing data to NebulaGraph, the final saved data is not guaranteed to be the latest data in Neo4j.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#check_point_path_configuration","title":"check_point_path configuration","text":"

              If breakpoint transfers are enabled, to avoid data loss, the state of the database should not change between the breakpoint and the transfer. For example, data cannot be added or deleted, and the partition quantity configuration should not be changed.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#step_4_import_data_into_nebulagraph","title":"Step 4: Import data into NebulaGraph","text":"

              Run the following command to import Neo4j data into NebulaGraph. For a description of the parameters, see Options for import.

              ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <neo4j_application.conf_path> \n

              Note

              JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

              For example:

              ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.8.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/neo4j_application.conf\n

              You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#step_5_optional_validate_data","title":"Step 5: (optional) Validate data","text":"

              Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

              LOOKUP ON player YIELD id(vertex);\n

              Users can also run the SHOW STATS command to view statistics.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-neo4j/#step_6_optional_rebuild_indexes_in_nebulagraph","title":"Step 6: (optional) Rebuild indexes in NebulaGraph","text":"

              With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-oracle/","title":"Import data from Oracle","text":"

              This topic provides an example of how to use Exchange to export Oracle data and import to NebulaGraph.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-oracle/#data_set","title":"Data set","text":"

              This topic takes the basketballplayer dataset as an example.

              In this example, the data set has been stored in Oracle. All vertexes and edges are stored in the player, team, follow, and serve tables. The following are some of the data for each table.

              oracle> desc player;\n+-----------+-------+---------------+ \n| Column    | Null  | Type          |\n+-----------+-------+---------------+ \n| PLAYERID  |  -    | VARCHAR2(30)  |\n| NAME      |  -    | VARCHAR2(30)  |\n| AGE       |  -    | NUMBER        |\n+-----------+-------+---------------+ \n\noracle> desc team;\n+-----------+-------+---------------+ \n| Column    | Null  | Type          |\n+-----------+-------+---------------+ \n| TEAMID    |  -    | VARCHAR2(30)  |\n| NAME      |  -    | VARCHAR2(30)  |\n+-----------+-------+---------------+ \n\noracle> desc follow;\n+-------------+-------+---------------+ \n| Column      | Null  | Type          |\n+-------------+-------+---------------+ \n| SRC_PLAYER  |  -    | VARCHAR2(30)  |\n| DST_PLAYER  |  -    | VARCHAR2(30)  |\n| DEGREE      |  -    | NUMBER        |\n+-------------+-------+---------------+ \n\noracle> desc serve;\n+------------+-------+---------------+ \n| Column     | Null  | Type          |\n+------------+-------+---------------+ \n| PLAYERID   |  -    | VARCHAR2(30)  |\n| TEAMID     |  -    | VARCHAR2(30)  |\n| START_YEAR |  -    | NUMBER        |\n| END_YEAR   |  -    | NUMBER        |\n+------------+-------+---------------+ \n
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-oracle/#environment","title":"Environment","text":"

              This example is done on MacOS. Here is the environment configuration information:

              • Hardware specifications:
                • CPU: 1.7 GHz Quad-Core Intel Core i7
                • Memory: 16 GB
              • Spark: 2.4.7, stand-alone
              • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-oracle/#prerequisites","title":"Prerequisites","text":"

              Before importing data, you need to confirm the following information:

              • NebulaGraph has been installed and deployed with the following information:

                • IP addresses and ports of Graph and Meta services.
                • The user name and password with write permission to NebulaGraph.
              • Exchange has been compiled, or download the compiled .jar file directly.
              • Spark has been installed.
              • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
              • The Hadoop service has been installed and started.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-oracle/#precautions","title":"Precautions","text":"

              nebula-exchange_spark_2.2 supports only single table queries, not multi-table queries.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-oracle/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-oracle/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

              Analyze the data to create a Schema in NebulaGraph by following these steps:

              1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

                Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
              2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

                ## Create a graph space.\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer.\nnebula> USE basketballplayer;\n\n## Create the Tag player.\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team.\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow.\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve.\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

              For more information, see Quick start workflow.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-oracle/#step_2_modify_configuration_files","title":"Step 2: Modify configuration files","text":"

              After Exchange is compiled, copy the conf file target/classes/application.conf to set Oracle data source configuration. In this case, the copied file is called oracle_application.conf. For details on each configuration item, see Parameters in the configuration file.

              {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.8.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    cores: {\n      max: 16\n    }\n  }\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n  # Processing vertexes\n  tags: [\n    # Set the information about the Tag player.\n    {\n      # The Tag name in NebulaGraph.\n      name: player\n      type: {\n        # Specify the data source file format to Oracle.\n        source: oracle\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      url:\"jdbc:oracle:thin:@host:1521:basketball\"\n      driver: \"oracle.jdbc.driver.OracleDriver\"\n      user: \"root\"\n      password: \"123456\"\n\n      # Scanning a single table to read data.\n      # nebula-exchange_spark_2.2 must configure this parameter. Sentence is not supported.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as sentence.\n      table:\"basketball.player\"\n\n      # Use query statement to read data.\n      # This parameter is not supported by nebula-exchange_spark_2.2.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as table. Multi-table queries are supported.\n      # sentence: \"select * from people, player, team\"\n\n      # Specify the column names in the player table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [age,name]\n      nebula.fields: [age,name]\n\n      # Specify a column of data in the table as the source of VIDs in the NebulaGraph.\n      vertex: {\n        field:playerid\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n    # Set the information about the Tag Team.\n    {\n      name: team\n      type: {\n        source: oracle\n        sink: client\n      }\n\n      url:\"jdbc:oracle:thin:@host:1521:basketball\"\n      driver: \"oracle.jdbc.driver.OracleDriver\"\n      user: \"root\"\n      password: \"123456\"\n      table: \"basketball.team\"\n      sentence: \"select teamid, name from team\"\n\n      fields: [name]\n      nebula.fields: [name]\n      vertex: {\n        field: teamid\n      }\n      batch: 256\n      partition: 32\n    }\n\n  ]\n\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # The corresponding Edge Type name in NebulaGraph.\n      name: follow\n\n      type: {\n        # Specify the data source file format to Oracle.\n        source: oracle\n\n        # Specify how to import the Edge type data into NebulaGraph.\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      url:\"jdbc:oracle:thin:@host:1521:basketball\"\n      driver: \"oracle.jdbc.driver.OracleDriver\"\n      user: \"root\"\n      password: \"123456\"\n\n      # Scanning a single table to read data.\n      # nebula-exchange_spark_2.2 must configure this parameter. Sentence is not supported.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as sentence.\n      table:\"basketball.follow\"\n\n      # Use query statement to read data.\n      # This parameter is not supported by nebula-exchange_spark_2.2.\n      # nebula-exchange_spark_2.4 and nebula-exchange_spark_3.0 can configure this parameter, but not at the same time as table. Multi-table queries are supported.\n      # sentence: \"select * from follow, serve\"\n\n      # Specify the column names in the follow table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [degree]\n      nebula.fields: [degree]\n\n      # In source, use a column in the follow table as the source of the edge's source vertex.\n      # In target, use a column in the follow table as the source of the edge's destination vertex.\n      source: {\n        field: src_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      target: {\n        field: dst_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Edge Type serve.\n    {\n      name: serve\n      type: {\n        source: oracle\n        sink: client\n      }\n\n      url:\"jdbc:oracle:thin:@host:1521:basketball\"\n      driver: \"oracle.jdbc.driver.OracleDriver\"\n      user: \"root\"\n      password: \"123456\"\n      table: \"basketball.serve\"\n      sentence: \"select playerid, teamid, start_year, end_year from serve\"\n\n      fields: [start_year,end_year]\n      nebula.fields: [start_year,end_year]\n      source: {\n        field: playerid\n      }\n      target: {\n        field: teamid\n      }\n      batch: 256\n      partition: 32\n    }\n  ]\n}\n
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-oracle/#step_3_import_data_into_nebulagraph","title":"Step 3: Import data into NebulaGraph","text":"

              Run the following command to import Oracle data into NebulaGraph. For a description of the parameters, see Options for import.

              ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <oracle_application.conf_path>\n

              Note

              JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

              For example:

              ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.8.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/oracle_application.conf\n

              You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-oracle/#step_4_optional_validate_data","title":"Step 4: (optional) Validate data","text":"

              Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

              LOOKUP ON player YIELD id(vertex);\n

              Users can also run the SHOW STATS command to view statistics.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-oracle/#step_5_optional_rebuild_indexes_in_nebulagraph","title":"Step 5: (optional) Rebuild indexes in NebulaGraph","text":"

              With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/","title":"Import data from ORC files","text":"

              This topic provides an example of how to use Exchange to import NebulaGraph data stored in HDFS or local ORC files.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/#data_set","title":"Data set","text":"

              This topic takes the basketballplayer dataset as an example.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/#environment","title":"Environment","text":"

              This example is done on MacOS. Here is the environment configuration information:

              • Hardware specifications:
                • CPU: 1.7 GHz Quad-Core Intel Core i7
                • Memory: 16 GB
              • Spark: 2.4.7, stand-alone
              • Hadoop: 2.9.2, pseudo-distributed deployment
              • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/#prerequisites","title":"Prerequisites","text":"

              Before importing data, you need to confirm the following information:

              • NebulaGraph has been installed and deployed with the following information:

                • IP addresses and ports of Graph and Meta services.
                • The user name and password with write permission to NebulaGraph.
              • Exchange has been compiled, or download the compiled .jar file directly.
              • Spark has been installed.
              • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
              • If files are stored in HDFS, ensure that the Hadoop service is running properly.
              • If files are stored locally and NebulaGraph is a cluster architecture, you need to place the files in the same directory locally on each machine in the cluster.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

              Analyze the data to create a Schema in NebulaGraph by following these steps:

              1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

                Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
              2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

                ## Create a graph space.\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer.\nnebula> USE basketballplayer;\n\n## Create the Tag player.\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team.\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow.\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve.\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

              For more information, see Quick start workflow.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/#step_2_process_orc_files","title":"Step 2: Process ORC files","text":"

              Confirm the following information:

              1. Process ORC files to meet Schema requirements.

              2. Obtain the ORC file storage path.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/#step_3_modify_configuration_files","title":"Step 3: Modify configuration files","text":"

              After Exchange is compiled, copy the conf file target/classes/application.conf to set ORC data source configuration. In this example, the copied file is called orc_application.conf. For details on each configuration item, see Parameters in the configuration file.

              {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.8.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    executor: {\n        memory:1G\n    }\n\n    cores: {\n      max: 16\n    }\n  }\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and all Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n\n  # Processing vertexes\n  tags: [\n    # Set the information about the Tag player.\n    {\n      name: player\n      type: {\n        # Specify the data source file format to ORC.\n        source: orc\n\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # Specify the path to the ORC file.\n      # If the file is stored in HDFS, use double quotation marks to enclose the file path, starting with hdfs://. For example, \"hdfs://ip:port/xx/xx\".\n      # If the file is stored locally, use double quotation marks to enclose the file path, starting with file://. For example, \"file:///tmp/xx.orc\".\n      path: \"hdfs://192.168.*.*:9000/data/vertex_player.orc\"\n\n      # Specify the key name in the ORC file in fields, and its corresponding value will serve as the data source for the properties specified in the NebulaGraph.\n      # If multiple values need to be specified, separate them with commas.\n      fields: [age,name]\n\n      # Specify the property names defined in NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      nebula.fields: [age, name]\n\n      # Specify a column of data in the table as the source of VIDs in the NebulaGraph.\n      # The value of vertex must be consistent with the field in the ORC file.\n      # Currently, NebulaGraph master supports only strings or integers of VID.\n      vertex: {\n        field:id\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Tag team.\n    {\n      name: team\n      type: {\n        source: orc\n        sink: client\n      }\n      path: \"hdfs://192.168.*.*:9000/data/vertex_team.orc\"\n      fields: [name]\n      nebula.fields: [name]\n      vertex: {\n        field:id\n      }\n      batch: 256\n      partition: 32\n    }\n\n\n\n    # If more vertexes need to be added, refer to the previous configuration to add them.\n  ]\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # Specify the Edge Type name defined in NebulaGraph.\n      name: follow\n      type: {\n        # Specify the data source file format to ORC.\n        source: orc\n\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # Specify the path to the ORC file.\n      # If the file is stored in HDFS, use double quotation marks to enclose the file path, starting with hdfs://. For example, \"hdfs://ip:port/xx/xx\".\n      # If the file is stored locally, use double quotation marks to enclose the file path, starting with file://. For example, \"file:///tmp/xx.orc\".\n      path: \"hdfs://192.168.*.*:9000/data/edge_follow.orc\"\n\n      # Specify the key name in the ORC file in fields, and its corresponding value will serve as the data source for the properties specified in the NebulaGraph.\n      # If multiple values need to be specified, separate them with commas.\n      fields: [degree]\n\n      # Specify the property names defined in NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      nebula.fields: [degree]\n\n      # Specify a column as the source for the source and destination vertexes.\n      # The value of vertex must be consistent with the field in the ORC file.\n      # Currently, NebulaGraph master supports only strings or integers of VID.\n      source: {\n        field: src\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n      target: {\n        field: dst\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Edge type serve.\n    {\n      name: serve\n      type: {\n        source: orc\n        sink: client\n      }\n      path: \"hdfs://192.168.*.*:9000/data/edge_serve.orc\"\n      fields: [start_year,end_year]\n      nebula.fields: [start_year, end_year]\n      source: {\n        field: src\n      }\n      target: {\n        field: dst\n      }\n      batch: 256\n      partition: 32\n    }\n\n  # If more edges need to be added, refer to the previous configuration to add them.\n}\n
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/#step_4_import_data_into_nebulagraph","title":"Step 4: Import data into NebulaGraph","text":"

              Run the following command to import ORC data into NebulaGraph. For a description of the parameters, see Options for import.

              ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <orc_application.conf_path> \n

              Note

              JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

              For example:

              ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.8.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/orc_application.conf\n

              You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/#access_hdfs_data_with_kerberos_certification","title":"Access HDFS data with Kerberos certification","text":"

              When using Kerberos for security certification, you can access the HDFS data in one of the following ways.

              • Configure the Kerberos configuration file in a command

                Configure --conf and --files in the command, for example:

                ${SPARK_HOME}/bin/spark-submit --master xxx  --num-executors 2 --executor-cores 2 --executor-memory 1g \\\n--conf \"spark.driver.extraJavaOptions=-Djava.security.krb5.conf=./krb5.conf\" \\\n--conf \"spark.executor.extraJavaOptions=-Djava.security.krb5.conf=./krb5.conf\" \\\n--files /local/path/to/xxx.keytab,/local/path/to/krb5.conf \\\n--class  com.vesoft.nebula.exchange.Exchange  \\\nexchange.jar -c xx.conf\n

                The file path in --conf can be configured in two ways as follows:

                • Configure the absolute path to the file. All YARN or Spark machines are required to have the corresponding file in the same path.
                • (Recommended in YARN mode) Configure the relative path to the file (e.g. ./krb5.conf). The resource files uploaded via --files are located in the working directory of the Java virtual machine or JAR.

                The files in --files must be stored on the machine where the spark-submit command is executed.

              • Without commands

                Deploy the Spark and Kerberos-certified Hadoop in a same cluster to make them share HDFS and YARN, and then add the configuration export HADOOP_HOME=<hadoop_home_path> to spark-env.sh in Spark.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/#step_5_optional_validate_data","title":"Step 5: (optional) Validate data","text":"

              Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

              LOOKUP ON player YIELD id(vertex);\n

              Users can also run the SHOW STATS command to view statistics.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-orc/#step_6_optional_rebuild_indexes_in_nebulagraph","title":"Step 6: (optional) Rebuild indexes in NebulaGraph","text":"

              With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/","title":"Import data from Parquet files","text":"

              This topic provides an example of how to use Exchange to import NebulaGraph data stored in HDFS or local Parquet files.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/#data_set","title":"Data set","text":"

              This topic takes the basketballplayer dataset as an example.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/#environment","title":"Environment","text":"

              This example is done on MacOS. Here is the environment configuration information:

              • Hardware specifications:
                • CPU: 1.7 GHz Quad-Core Intel Core i7
                • Memory: 16 GB
              • Spark: 2.4.7, stand-alone
              • Hadoop: 2.9.2, pseudo-distributed deployment
              • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/#prerequisites","title":"Prerequisites","text":"

              Before importing data, you need to confirm the following information:

              • NebulaGraph has been installed and deployed with the following information:

                • IP addresses and ports of Graph and Meta services.
                • The user name and password with write permission to NebulaGraph.
              • Exchange has been compiled, or download the compiled .jar file directly.
              • Spark has been installed.
              • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
              • If files are stored in HDFS, ensure that the Hadoop service is running properly.
              • If files are stored locally and NebulaGraph is a cluster architecture, you need to place the files in the same directory locally on each machine in the cluster.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

              Analyze the data to create a Schema in NebulaGraph by following these steps:

              1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

                Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
              2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

                ## Create a graph space.\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer.\nnebula> USE basketballplayer;\n\n## Create the Tag player.\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team.\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow.\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve.\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

              For more information, see Quick start workflow.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/#step_2_process_parquet_files","title":"Step 2: Process Parquet files","text":"

              Confirm the following information:

              1. Process Parquet files to meet Schema requirements.

              2. Obtain the Parquet file storage path.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/#step_3_modify_configuration_files","title":"Step 3: Modify configuration files","text":"

              After Exchange is compiled, copy the conf file target/classes/application.conf to set Parquet data source configuration. In this example, the copied file is called parquet_application.conf. For details on each configuration item, see Parameters in the configuration file.

              {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.8.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    executor: {\n        memory:1G\n    }\n\n    cores: {\n      max: 16\n    }\n  }\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and all Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n\n  # Processing vertexes\n  tags: [\n    # Set the information about the Tag player.\n    {\n      # Specify the Tag name defined in NebulaGraph.\n      name: player\n      type: {\n        # Specify the data source file format to Parquet.\n        source: parquet\n\n        # Specifies how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # Specify the path to the Parquet file.\n      # If the file is stored in HDFS, use double quotation marks to enclose the file path, starting with hdfs://. For example, \"hdfs://ip:port/xx/xx\".\n      # If the file is stored locally, use double quotation marks to enclose the file path, starting with file://. For example, \"file:///tmp/xx.parquet\".\n      path: \"hdfs://192.168.*.13:9000/data/vertex_player.parquet\"\n\n      # Specify the key name in the Parquet file in fields, and its corresponding value will serve as the data source for the properties specified in the NebulaGraph.\n      # If multiple values need to be specified, separate them with commas.\n      fields: [age,name]\n\n      # Specify the property name defined in NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      nebula.fields: [age, name]\n\n      # Specify a column of data in the table as the source of VIDs in the NebulaGraph.\n      # The value of vertex must be consistent with the field in the Parquet file.\n      # Currently, NebulaGraph master supports only strings or integers of VID.\n      vertex: {\n        field:id\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Tag team.\n    {\n      name: team\n      type: {\n        source: parquet\n        sink: client\n      }\n      path: \"hdfs://192.168.11.13:9000/data/vertex_team.parquet\"\n      fields: [name]\n      nebula.fields: [name]\n      vertex: {\n        field:id\n      }\n      batch: 256\n      partition: 32\n    }\n\n\n    # If more vertexes need to be added, refer to the previous configuration to add them.\n  ]\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # Specify the Edge Type name defined in NebulaGraph.\n      name: follow\n      type: {\n        # Specify the data source file format to Parquet.\n        source: parquet\n\n        # Specifies how to import the data into NebulaGraph: Client or SST.\n        sink: client\n      }\n\n      # Specify the path to the Parquet file.\n      # If the file is stored in HDFS, use double quotation marks to enclose the file path, starting with hdfs://. For example, \"hdfs://ip:port/xx/xx\".\n      # If the file is stored locally, use double quotation marks to enclose the file path, starting with file://. For example, \"file:///tmp/xx.parquet\".\n      path: \"hdfs://192.168.11.13:9000/data/edge_follow.parquet\"\n\n      # Specify the key name in the Parquet file in fields, and its corresponding value will serve as the data source for the properties specified in the NebulaGraph.\n      # If multiple values need to be specified, separate them with commas.\n      fields: [degree]\n\n      # Specify the property name defined in NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      nebula.fields: [degree]\n\n      # Specify a column as the source for the source and destination vertexes.\n      # The values of vertex must be consistent with the fields in the Parquet file.\n      # Currently, NebulaGraph master supports only strings or integers of VID.\n      source: {\n        field: src\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n      target: {\n        field: dst\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n    }\n\n    # Set the information about the Edge type serve.\n    {\n      name: serve\n      type: {\n        source: parquet\n        sink: client\n      }\n      path: \"hdfs://192.168.11.13:9000/data/edge_serve.parquet\"\n      fields: [start_year,end_year]\n      nebula.fields: [start_year, end_year]\n      source: {\n        field: src\n      }\n      target: {\n        field: dst\n      }\n      batch: 256\n      partition: 32\n    }\n\n  ]\n  # If more edges need to be added, refer to the previous configuration to add them.\n}\n
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/#step_4_import_data_into_nebulagraph","title":"Step 4: Import data into NebulaGraph","text":"

              Run the following command to import Parquet data into NebulaGraph. For a description of the parameters, see Options for import.

              ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <parquet_application.conf_path> \n

              Note

              JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

              For example:

              ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.8.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/parquet_application.conf\n

              You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/#access_hdfs_data_with_kerberos_certification","title":"Access HDFS data with Kerberos certification","text":"

              When using Kerberos for security certification, you can access the HDFS data in one of the following ways.

              • Configure the Kerberos configuration file in a command

                Configure --conf and --files in the command, for example:

                ${SPARK_HOME}/bin/spark-submit --master xxx  --num-executors 2 --executor-cores 2 --executor-memory 1g \\\n--conf \"spark.driver.extraJavaOptions=-Djava.security.krb5.conf=./krb5.conf\" \\\n--conf \"spark.executor.extraJavaOptions=-Djava.security.krb5.conf=./krb5.conf\" \\\n--files /local/path/to/xxx.keytab,/local/path/to/krb5.conf \\\n--class  com.vesoft.nebula.exchange.Exchange  \\\nexchange.jar -c xx.conf\n

                The file path in --conf can be configured in two ways as follows:

                • Configure the absolute path to the file. All YARN or Spark machines are required to have the corresponding file in the same path.
                • (Recommended in YARN mode) Configure the relative path to the file (e.g. ./krb5.conf). The resource files uploaded via --files are located in the working directory of the Java virtual machine or JAR.

                The files in --files must be stored on the machine where the spark-submit command is executed.

              • Without commands

                Deploy the Spark and Kerberos-certified Hadoop in a same cluster to make them share HDFS and YARN, and then add the configuration export HADOOP_HOME=<hadoop_home_path> to spark-env.sh in Spark.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/#step_5_optional_validate_data","title":"Step 5: (optional) Validate data","text":"

              Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

              LOOKUP ON player YIELD id(vertex);\n

              Users can also run the SHOW STATS command to view statistics.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-parquet/#step_6_optional_rebuild_indexes_in_nebulagraph","title":"Step 6: (optional) Rebuild indexes in NebulaGraph","text":"

              With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-pulsar/","title":"Import data from Pulsar","text":"

              This topic provides an example of how to use Exchange to import NebulaGraph data stored in Pulsar.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-pulsar/#environment","title":"Environment","text":"

              This example is done on MacOS. Here is the environment configuration information:

              • Hardware specifications:
                • CPU: 1.7 GHz Quad-Core Intel Core i7
                • Memory: 16 GB
              • Spark: 2.4.7, stand-alone
              • NebulaGraph: master. Deploy NebulaGraph with Docker Compose.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-pulsar/#prerequisites","title":"Prerequisites","text":"

              Before importing data, you need to confirm the following information:

              • NebulaGraph has been installed and deployed with the following information:

                • IP addresses and ports of Graph and Meta services.
                • The user name and password with write permission to NebulaGraph.
              • Exchange has been compiled, or download the compiled .jar file directly.
              • Spark has been installed.
              • Learn about the Schema created in NebulaGraph, including names and properties of Tags and Edge types, and more.
              • The Pulsar service has been installed and started.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-pulsar/#precautions","title":"Precautions","text":"
              • Only client mode is supported when importing Pulsar data, i.e. the value of parameters tags.type.sink and edges.type.sink is client.
              • When importing Pulsar data, do not use Exchange version 3.4.0, which adds caching of imported data and does not support streaming data import. Use Exchange versions 3.0.0, 3.3.0, or 3.5.0.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-pulsar/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-pulsar/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

              Analyze the data to create a Schema in NebulaGraph by following these steps:

              1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

                Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
              2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

                ## Create a graph space\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer\nnebula> USE basketballplayer;\n\n## Create the Tag player\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

              For more information, see Quick start workflow.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-pulsar/#step_2_modify_configuration_files","title":"Step 2: Modify configuration files","text":"

              After Exchange is compiled, copy the conf file target/classes/application.conf to set Pulsar data source configuration. In this example, the copied file is called pulsar_application.conf. For details on each configuration item, see Parameters in the configuration file.

              {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.8.0\n    }\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n    cores: {\n      max: 16\n    }\n  }\n\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      # Specify the IP addresses and ports for Graph and all Meta services.\n      # If there are multiple addresses, the format is \"ip1:port\",\"ip2:port\",\"ip3:port\".\n      # Addresses are separated by commas.\n      graph:[\"127.0.0.1:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"127.0.0.1:9559\"]\n    }\n\n    # The account entered must have write permission for the NebulaGraph space.\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    # Fill in the name of the graph space you want to write data to in the NebulaGraph.\n    space: basketballplayer\n    connection: {\n      timeout: 3000\n      retry: 3\n    }\n    execution: {\n      retry: 3\n    }\n    error: {\n      max: 32\n      output: /tmp/errors\n    }\n    rate: {\n      limit: 1024\n      timeout: 1000\n    }\n  }\n  # Processing vertices\n  tags: [\n    # Set the information about the Tag player.\n    {\n      # The corresponding Tag name in NebulaGraph.\n      name: player\n      type: {\n        # Specify the data source file format to Pulsar.\n        source: pulsar\n        # Specify how to import the data into NebulaGraph. Only client is supported.\n        sink: client\n      }\n      # The address of the Pulsar server.\n      service: \"pulsar://127.0.0.1:6650\"\n      # admin.url of pulsar.\n      admin: \"http://127.0.0.1:8081\"\n      # The Pulsar option can be configured from topic, topics or topicsPattern.\n      options: {\n        topics: \"topic1,topic2\"\n      }\n\n      # Specify the column names in the player table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [age,name]\n      nebula.fields: [age,name]\n\n      # Specify a column of data in the table as the source of VIDs in the NebulaGraph.\n      vertex:{\n          field:playerid\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # Whether or not to delete the related incoming and outgoing edges of the vertices when performing a batch delete operation. This parameter takes effect when `writeMode` is `DELETE`.\n      #deleteEdge: false\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 10\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 10\n      # The interval for message reading. Unit: second.\n      interval.seconds: 10\n    }\n    # Set the information about the Tag Team.\n    {\n      name: team\n      type: {\n        source: pulsar\n        sink: client\n      }\n      service: \"pulsar://127.0.0.1:6650\"\n      admin: \"http://127.0.0.1:8081\"\n      options: {\n        topics: \"topic1,topic2\"\n      }\n      fields: [name]\n      nebula.fields: [name]\n      vertex:{\n          field:teamid\n      }\n      batch: 10\n      partition: 10\n      interval.seconds: 10\n    }\n\n  ]\n\n  # Processing edges\n  edges: [\n    # Set the information about Edge Type follow\n    {\n      # The corresponding Edge Type name in NebulaGraph.\n      name: follow\n\n      type: {\n        # Specify the data source file format to Pulsar.\n        source: pulsar\n\n        # Specify how to import the Edge type data into NebulaGraph.\n        # Specify how to import the data into NebulaGraph. Only client is supported.\n        sink: client\n      }\n\n      # The address of the Pulsar server.\n      service: \"pulsar://127.0.0.1:6650\"\n      # admin.url of pulsar.\n      admin: \"http://127.0.0.1:8081\"\n      # The Pulsar option can be configured from topic, topics or topicsPattern.\n      options: {\n        topics: \"topic1,topic2\"\n      }\n\n      # Specify the column names in the follow table in fields, and their corresponding values are specified as properties in the NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      # If multiple column names need to be specified, separate them by commas.\n      fields: [degree]\n      nebula.fields: [degree]\n\n      # In source, use a column in the follow table as the source of the edge's source vertex.\n      # In target, use a column in the follow table as the source of the edge's destination vertex.\n      source:{\n          field:src_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      target:{\n          field:dst_player\n      # udf:{\n      #            separator:\"_\"\n      #            oldColNames:[field-0,field-1,field-2]\n      #            newColName:new-field\n      #        }\n      # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 10\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 10\n\n      # The interval for message reading. Unit: second.\n      interval.seconds: 10\n    }\n\n    # Set the information about the Edge Type serve\n    {\n      name: serve\n      type: {\n        source: Pulsar\n        sink: client\n      }\n      service: \"pulsar://127.0.0.1:6650\"\n      admin: \"http://127.0.0.1:8081\"\n      options: {\n        topics: \"topic1,topic2\"\n      }\n\n      fields: [start_year,end_year]\n      nebula.fields: [start_year,end_year]\n      source:{\n          field:playerid\n      }\n\n      target:{\n          field:teamid\n      }\n\n      # (Optional) Specify a column as the source of the rank.\n      #ranking: rank\n\n      batch: 10\n      partition: 10\n      interval.seconds: 10\n    }\n  ]\n}\n
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-pulsar/#step_3_import_data_into_nebulagraph","title":"Step 3: Import data into NebulaGraph","text":"

              Run the following command to import Pulsar data into NebulaGraph. For a description of the parameters, see Options for import.

              ${SPARK_HOME}/bin/spark-submit --master \"local\" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <pulsar_application.conf_path>\n

              Note

              JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

              For example:

              ${SPARK_HOME}/bin/spark-submit  --master \"local\" --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.8.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/pulsar_application.conf\n

              You can search for batchSuccess.<tag_name/edge_name> in the command output to check the number of successes. For example, batchSuccess.follow: 300.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-pulsar/#step_4_optional_validate_data","title":"Step 4: (optional) Validate data","text":"

              Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

              LOOKUP ON player YIELD id(vertex);\n

              Users can also run the SHOW STATS command to view statistics.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-pulsar/#step_5_optional_rebuild_indexes_in_nebulagraph","title":"Step 5: (optional) Rebuild indexes in NebulaGraph","text":"

              With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/","title":"Import data from SST files","text":"

              This topic provides an example of how to generate the data from the data source into an SST (Sorted String Table) file and save it on HDFS, and then import it into NebulaGraph. The sample data source is a CSV file.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#precautions","title":"Precautions","text":"
              • The SST file can be imported only in Linux.
              • The default value of the property is not supported.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#background_information","title":"Background information","text":"

              Exchange supports two data import modes:

              • Import the data from the data source directly into NebulaGraph as nGQL statements.
              • Generate the SST file from the data source, and use Console to import the SST file into NebulaGraph.

              The following describes the scenarios, implementation methods, prerequisites, and steps for generating an SST file and importing data.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#scenarios","title":"Scenarios","text":"
              • Suitable for online services, because the generation almost does not affect services (just reads the Schema), and the import speed is fast.

                Caution

                Although the import speed is fast, write operations in the corresponding space are blocked during the import period (about 10 seconds). Therefore, you are advised to import data in off-peak hours.

              • Suitable for scenarios with a large amount of data from data sources for its fast import speed.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#implementation_methods","title":"Implementation methods","text":"

              The underlying code in NebulaGraph uses RocksDB as the key-value storage engine. RocksDB is a storage engine based on the hard disk, providing a series of APIs for creating and importing SST files to help quickly import massive data.

              The SST file is an internal file containing an arbitrarily long set of ordered key-value pairs for efficient storage of large amounts of key-value data. The entire process of generating SST files is mainly done by Exchange Reader, sstProcessor, and sstWriter. The whole data processing steps are as follows:

              1. Reader reads data from the data source.

              2. sstProcessor generates the SST file from the NebulaGraph's Schema information and uploads it to the HDFS. For details about the format of the SST file, see Data Storage Format.

              3. sstWriter opens a file and inserts data. When generating SST files, keys must be written in sequence.

              4. After the SST file is generated, RocksDB imports the SST file into NebulaGraph using the IngestExternalFile() method. For example:

                IngestExternalFileOptions ifo;\n# Import two SST files\nStatus s = db_->IngestExternalFile({\"/home/usr/file1.sst\", \"/home/usr/file2.sst\"}, ifo);\nif (!s.ok()) {\n  printf(\"Error while adding file %s and %s, Error %s\\n\",\n         file_path1.c_str(), file_path2.c_str(), s.ToString().c_str());\n  return 1;\n}\n

                When the IngestExternalFile() method is called, RocksDB copies the file to the data directory by default and blocks the RocksDB write operation. If the key range in the SST file overwrites the Memtable key range, flush the Memtable to the hard disk. After placing the SST file in an optimal location in the LSM tree, assign a global serial number to the file and turn on the write operation.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#data_set","title":"Data set","text":"

              This topic takes the basketballplayer dataset as an example.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#environment","title":"Environment","text":"

              This example is done on MacOS. Here is the environment configuration information:

              • Hardware specifications:
                • CPU: 1.7 GHz Quad-Core Intel Core i7
                • Memory: 16 GB
              • Spark: 2.4.7, stand-alone
              • Hadoop: 2.9.2, pseudo-distributed deployment
              • NebulaGraph: master.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#prerequisites","title":"Prerequisites","text":"

              Before importing data, you need to confirm the following information:

              • NebulaGraph has been installed and deployed with the following information:

                • IP addresses and ports of Graph and Meta services.
                • The user name and password with write permission to NebulaGraph.
                • --ws_storage_http_port in the Meta service configuration file is the same as --ws_http_port in the Storage service configuration file. For example, 19779.
                • --ws_meta_http_port in the Graph service configuration file is the same as --ws_http_port in the Meta service configuration file. For example, 19559.
                • The information about the Schema, including names and properties of Tags and Edge types, and more.
              • Exchange has been compiled, or download the compiled .jar file directly.
              • Spark has been installed.
              • JDK 1.8 or the later version has been installed and the environment variable JAVA_HOME has been configured.
              • The Hadoop service has been installed and started.

                Note

                • To generate SST files of other data sources, see documents of the corresponding data source and check the prerequisites.
                • To generate SST files only, users do not need to install the Hadoop service on the machine where the Storage service is deployed.
                • To delete the SST file after the ingest (data import) operation, add the configuration -- move_Files =true to the Storage Service configuration file.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#steps","title":"Steps","text":""},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#step_1_create_the_schema_in_nebulagraph","title":"Step 1: Create the Schema in NebulaGraph","text":"

              Analyze the data to create a Schema in NebulaGraph by following these steps:

              1. Identify the Schema elements. The Schema elements in the NebulaGraph are shown in the following table.

                Element Name Property Tag player name string, age int Tag team name string Edge Type follow degree int Edge Type serve start_year int, end_year int
              2. Create a graph space basketballplayer in the NebulaGraph and create a Schema as shown below.

                ## Create a graph space\nnebula> CREATE SPACE basketballplayer \\\n        (partition_num = 10, \\\n        replica_factor = 1, \\\n        vid_type = FIXED_STRING(30));\n\n## Use the graph space basketballplayer\nnebula> USE basketballplayer;\n\n## Create the Tag player\nnebula> CREATE TAG player(name string, age int);\n\n## Create the Tag team\nnebula> CREATE TAG team(name string);\n\n## Create the Edge type follow\nnebula> CREATE EDGE follow(degree int);\n\n## Create the Edge type serve\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

              For more information, see Quick start workflow.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#step_2_process_csv_files","title":"Step 2: Process CSV files","text":"

              Confirm the following information:

              1. Process CSV files to meet Schema requirements.

                Note

                Exchange supports uploading CSV files with or without headers.

              2. Obtain the CSV file storage path.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#step_3_modify_configuration_files","title":"Step 3: Modify configuration files","text":"

              After Exchange is compiled, copy the conf file target/classes/application.conf to set SST data source configuration. In this example, the copied file is called sst_application.conf. For details on each configuration item, see Parameters in the configuration file.

              {\n  # Spark configuration\n  spark: {\n    app: {\n      name: NebulaGraph Exchange 3.8.0\n    }\n\n    master:local\n\n    driver: {\n      cores: 1\n      maxResultSize: 1G\n    }\n\n    executor: {\n        memory:1G\n    }\n\n    cores:{\n      max: 16\n    }\n  }\n\n  # NebulaGraph configuration\n  nebula: {\n    address:{\n      graph:[\"192.8.168.XXX:9669\"]\n      # the address of any of the meta services.\n      # if your NebulaGraph server is in virtual network like k8s, please config the leader address of meta.\n      meta:[\"192.8.168.XXX:9559\"]\n    }\n    user: root\n    pswd: nebula\n    # Whether to use a password encrypted with RSA.\n    # enableRSA: true\n    # The key used to encrypt the password using RSA.\n    # privateKey: \"\"\n\n    space: basketballplayer\n\n    # SST file configuration\n    path:{\n        # The local directory that temporarily stores generated SST files\n        local:\"/tmp\"\n\n        # The path for storing the SST file in the HDFS\n        remote:\"/sst\"\n\n        # The NameNode address of HDFS, for example, \"hdfs://<ip/hostname>:<port>\"\n        hdfs.namenode: \"hdfs://*.*.*.*:9000\"\n    }\n\n    # The connection parameters of clients\n    connection: {\n      # The timeout duration of socket connection and execution. Unit: milliseconds.\n      timeout: 30000\n    }\n\n    error: {\n      # The maximum number of failures that will exit the application.\n      max: 32\n      # Failed import jobs are logged in the output path.\n      output: /tmp/errors\n    }\n\n    # Use Google's RateLimiter to limit requests to NebulaGraph.\n    rate: {\n      # Steady throughput of RateLimiter.\n      limit: 1024\n\n      # Get the allowed timeout duration from RateLimiter. Unit: milliseconds.\n      timeout: 1000\n    }\n  }\n\n\n  # Processing vertices\n  tags: [\n    # Set the information about the Tag player.\n    {\n      # Specify the Tag name defined in NebulaGraph.\n      name: player\n      type: {\n        # Specify the data source file format to CSV.\n        source: csv\n\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: sst\n      }\n\n      # Specify the path to the CSV file.\n      # If the file is stored in HDFS, use double quotation marks to enclose the file path, starting with hdfs://. For example, \"hdfs://<ip/hostname>:port/xx/xx.csv\".\n      path: \"hdfs://*.*.*.*:9000/dataset/vertex_player.csv\"\n\n      # If the CSV file does not have a header, use [_c0, _c1, _c2, ..., _cn] to represent its header and indicate the columns as the source of the property values.\n      # If the CSV file has a header, use the actual column name.\n      fields: [_c1, _c2]\n\n      # Specify the property name defined in NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      nebula.fields: [age, name]\n\n      # Specify a column of data in the table as the source of VIDs in NebulaGraph.\n      # The value of vertex must be consistent with the column name in the above fields or csv.fields.\n      # Currently, NebulaGraph master supports only strings or integers of VID.\n      vertex: {\n        field:_c0\n        # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The delimiter specified. The default value is comma.\n      separator: \",\"\n\n      # If the CSV file has a header, set the header to true.\n      # If the CSV file does not have a header, set the header to false. The default value is false.\n      header: false\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n\n      # Whether to repartition data based on the number of partitions of graph spaces in NebulaGraph when generating the SST file.\n      repartitionWithNebula: false\n    }\n\n    # Set the information about the Tag Team.\n    {\n      name: team\n      type: {\n        source: csv\n        sink: sst\n      }\n      path: \"hdfs://*.*.*.*:9000/dataset/vertex_team.csv\"\n      fields: [_c1]\n      nebula.fields: [name]\n      vertex: {\n        field:_c0\n      }\n      separator: \",\"\n      header: false\n      batch: 256\n      partition: 32\n      repartitionWithNebula: false\n    }\n    # If more vertices need to be added, refer to the previous configuration to add them.\n  ]\n  # Processing edges\n  edges: [\n    # Set the information about the Edge Type follow.\n    {\n      # The Edge Type name defined in NebulaGraph.\n      name: follow\n      type: {\n        # Specify the data source file format to CSV.\n        source: csv\n\n        # Specify how to import the data into NebulaGraph: Client or SST.\n        sink: sst\n      }\n\n      # Specify the path to the CSV file.\n      # If the file is stored in HDFS, use double quotation marks to enclose the file path, starting with hdfs://. For example, \"hdfs://<ip/hostname>:port/xx/xx.csv\".\n      path: \"hdfs://*.*.*.*:9000/dataset/edge_follow.csv\"\n\n      # If the CSV file does not have a header, use [_c0, _c1, _c2, ..., _cn] to represent its header and indicate the columns as the source of the property values.\n      # If the CSV file has a header, use the actual column name.\n      fields: [_c2]\n\n      # Specify the property name defined in NebulaGraph.\n      # The sequence of fields and nebula.fields must correspond to each other.\n      nebula.fields: [degree]\n\n      # Specify a column as the source for the source and destination vertices.\n      # The value of vertex must be consistent with the column name in the above fields or csv.fields.\n      # Currently, NebulaGraph master supports only strings or integers of VID.\n      source: {\n        field: _c0\n        # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n      target: {\n        field: _c1\n        # Add the specified prefix to the VID. For example, if the VID is `12345`, adding the prefix `tag1` will result in `tag1_12345`. The underscore cannot be modified.\n      # prefix:\"tag1\"\n      # Performs hashing operations on VIDs of type string.\n      # policy:hash\n      }\n\n      # The delimiter specified. The default value is comma.\n      separator: \",\"\n\n      # (Optional) Specify a column as the source of the rank.\n\n      #ranking: rank\n\n      # If the CSV file has a header, set the header to true.\n      # If the CSV file does not have a header, set the header to false. The default value is false.\n      header: false\n\n      # The filtering rule. The data that matches the filter rule is imported into NebulaGraph.\n      # filter: \"name='Tom'\"\n\n      # Batch operation types, including INSERT, UPDATE, and DELETE. defaults to INSERT.\n      #writeMode: INSERT\n\n      # The number of data written to NebulaGraph in a single batch.\n      batch: 256\n\n      # The number of partitions to be created when the data is written to NebulaGraph.\n      partition: 32\n\n      # Whether to repartition data based on the number of partitions of graph spaces in NebulaGraph when generating the SST file.\n      repartitionWithNebula: false\n    }\n\n    # Set the information about the Edge Type serve.\n    {\n      name: serve\n      type: {\n        source: csv\n        sink: sst\n      }\n      path: \"hdfs://*.*.*.*:9000/dataset/edge_serve.csv\"\n      fields: [_c2,_c3]\n      nebula.fields: [start_year, end_year]\n      source: {\n        field: _c0\n      }\n      target: {\n        field: _c1\n      }\n      separator: \",\"\n      header: false\n      batch: 256\n      partition: 32\n      repartitionWithNebula: false\n    }\n\n  ]\n  # If more edges need to be added, refer to the previous configuration to add them.\n}\n
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#step_4_generate_the_sst_file","title":"Step 4: Generate the SST file","text":"

              Run the following command to generate the SST file from the CSV source file. For a description of the parameters, see Options for import.

              ${SPARK_HOME}/bin/spark-submit --master \"local\" --conf spark.sql.shuffle.partition=<shuffle_concurrency> --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <sst_application.conf_path> \n

              Note

              When generating SST files, the shuffle operation of Spark will be involved. Note that the configuration of spark.sql.shuffle.partition should be added when you submit the command.

              Note

              JAR packages are available in two ways: compiled them yourself, or download the compiled .jar file directly.

              For example:

              ${SPARK_HOME}/bin/spark-submit  --master \"local\" --conf spark.sql.shuffle.partition=200 --class com.vesoft.nebula.exchange.Exchange  /root/nebula-exchange/nebula-exchange/target/nebula-exchange_spark_2.4-3.8.0.jar  -c /root/nebula-exchange/nebula-exchange/target/classes/sst_application.conf\n

              After the task is complete, you can view the generated SST file in the /sst directory (specified by the nebula.path.remote parameter) on HDFS.

              Note

              If you modify the Schema, such as rebuilding the graph space, modifying the Tag, or modifying the Edge type, you need to regenerate the SST file because the SST file verifies the space ID, Tag ID, and Edge ID.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#step_5_import_the_sst_file","title":"Step 5: Import the SST file","text":"

              Note

              Confirm the following information before importing:

              • Confirm that the Hadoop service has been deployed on all the machines where the Storage service is deployed, and configure HADOOP_HOME and JAVA_HOME.
              • The --ws_storage_http_port in the Meta service configuration file (add it manually if it does not exist) is the same as the --ws_http_port in the Storage service configuration file. For example, both are 19779.
              • The --ws_meta_http_port in the Graph service configuration file (add it manually if it does not exist) is the same as the --ws_http_port in the Meta service configuration file. For example, both are 19559.

              Connect to the NebulaGraph database using the client tool and import the SST file as follows:

              1. Run the following command to select the graph space you created earlier.

                nebula> USE basketballplayer;\n
              2. Run the following command to download the SST file:

                nebula> SUBMIT JOB DOWNLOAD HDFS \"hdfs://<hadoop_address>:<hadoop_port>/<sst_file_path>\";\n

                For example:

                nebula> SUBMIT JOB DOWNLOAD HDFS \"hdfs://*.*.*.*:9000/sst\";\n
              3. Run the following command to import the SST file:

                nebula> SUBMIT JOB INGEST;\n

              Note

              • To download the SST file again, delete the download folder in the space ID in the data/storage/nebula directory in the NebulaGraph installation path, and then download the SST file again. If the space has multiple copies, the download folder needs to be deleted on all machines where the copies are saved.
              • If there is a problem with the import and re-importing is required, re-execute SUBMIT JOB INGEST;.
              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#step_6_optional_validate_data","title":"Step 6: (Optional) Validate data","text":"

              Users can verify that data has been imported by executing a query in the NebulaGraph client (for example, NebulaGraph Studio). For example:

              LOOKUP ON player YIELD id(vertex);\n

              Users can also run the SHOW STATS command to view statistics.

              "},{"location":"import-export/nebula-exchange/use-exchange/ex-ug-import-from-sst/#step_7_conditional_rebuild_indexes_in_nebulagraph","title":"Step 7: (Conditional) Rebuild indexes in NebulaGraph","text":"

              With the data imported, users can recreate and rebuild indexes in NebulaGraph. For details, see Index overview.

              "},{"location":"k8s-operator/1.introduction-to-nebula-operator/","title":"What is NebulaGraph Operator","text":""},{"location":"k8s-operator/1.introduction-to-nebula-operator/#concept","title":"Concept","text":"

              NebulaGraph Operator is a tool to automate the deployment, operation, and maintenance of NebulaGraph clusters on Kubernetes. Building upon the excellent scalability mechanism of Kubernetes, NebulaGraph introduced its operation and maintenance knowledge into the Kubernetes system, which makes NebulaGraph a real cloud-native graph database.

              "},{"location":"k8s-operator/1.introduction-to-nebula-operator/#how_it_works","title":"How it works","text":"

              For resource types that do not exist within Kubernetes, you can register them by adding custom API objects. The common way is to use the CustomResourceDefinition.

              NebulaGraph Operator abstracts the deployment management of NebulaGraph clusters as a CRD. By combining multiple built-in API objects including StatefulSet, Service, and ConfigMap, the routine management and maintenance of a NebulaGraph cluster are coded as a control loop in the Kubernetes system. When a CR instance is submitted, NebulaGraph Operator drives database clusters to the final state according to the control process.

              "},{"location":"k8s-operator/1.introduction-to-nebula-operator/#features","title":"Features","text":"

              The following features are already available in NebulaGraph Operator:

              • Cluster deployment and deletion: NebulaGraph Operator simplifies the process of deploying and uninstalling clusters for users. NebulaGraph Operator allows you to quickly create, update, or delete a NebulaGraph cluster by simply providing the corresponding CR file. For more information, see Install NebulaGraph Clusters.
              • Cluster Upgrade: NebulaGraph Operator supports cluster upgrading from version 3.5.0 to version 3.6.0.
              • Self-Healing: NebulaGraph Operator calls interfaces provided by NebulaGraph clusters to dynamically sense cluster service status. Once an exception is detected, NebulaGraph Operator performs fault tolerance. For more information, see Self-Healing.
              • Balance Scheduling: Based on the scheduler extension interface, the scheduler provided by NebulaGraph Operator evenly distributes Pods in a NebulaGraph cluster across all nodes.
              "},{"location":"k8s-operator/1.introduction-to-nebula-operator/#limitations","title":"Limitations","text":""},{"location":"k8s-operator/1.introduction-to-nebula-operator/#version_limitations","title":"Version limitations","text":"

              NebulaGraph Operator does not support the v1.x version of NebulaGraph. NebulaGraph Operator version and the corresponding NebulaGraph version are as follows:

              NebulaGraph NebulaGraph Operator 3.5.x ~ 3.6.0 1.5.0 ~ 1.7.x, 1.8.0 3.0.0 ~ 3.4.1 1.3.0, 1.4.0 ~ 1.4.2 3.0.0 ~ 3.3.x 1.0.0, 1.1.0, 1.2.0 2.5.x ~ 2.6.x 0.9.0 2.5.x 0.8.0

              Legacy version compatibility

              • The 1.x version NebulaGraph Operator is not compatible with NebulaGraph of version below v3.x.
              • Starting from NebulaGraph Operator 0.9.0, logs and data are stored separately. Using NebulaGraph Operator 0.9.0 or later versions to manage a NebulaGraph 2.5.x cluster created with Operator 0.8.0 can cause compatibility issues. You can backup the data of the NebulaGraph 2.5.x cluster and then create a 2.6.x cluster with Operator 0.9.0.
              "},{"location":"k8s-operator/1.introduction-to-nebula-operator/#release_note","title":"Release note","text":"

              Release

              "},{"location":"k8s-operator/5.FAQ/","title":"FAQ","text":""},{"location":"k8s-operator/5.FAQ/#does_nebulagraph_operator_support_the_v1x_version_of_nebulagraph","title":"Does NebulaGraph Operator support the v1.x version of NebulaGraph?","text":"

              No, because the v1.x version of NebulaGraph does not support DNS, and NebulaGraph Operator requires the use of DNS.

              "},{"location":"k8s-operator/5.FAQ/#is_cluster_stability_guaranteed_if_using_local_storage","title":"Is cluster stability guaranteed if using local storage?","text":"

              There is no guarantee. Using local storage means that the Pod is bound to a specific node, and NebulaGraph Operator does not currently support failover in the event of a failure of the bound node.

              "},{"location":"k8s-operator/5.FAQ/#how_to_ensure_the_stability_of_a_cluster_when_scaling_the_cluster","title":"How to ensure the stability of a cluster when scaling the cluster?","text":"

              It is suggested to back up data in advance so that you can roll back data in case of failure.

              "},{"location":"k8s-operator/5.FAQ/#is_the_replica_in_the_operator_docs_the_same_as_the_replica_in_the_nebulagraph_core_docs","title":"Is the replica in the Operator docs the same as the replica in the NebulaGraph core docs?","text":"

              They are different concepts. A replica in the Operator docs indicates a pod replica in K8s, while a replica in the core docs is a replica of a NebulaGraph storage partition.

              "},{"location":"k8s-operator/5.FAQ/#how_to_view_the_logs_of_each_service_in_the_nebulagraph_cluster","title":"How to view the logs of each service in the NebulaGraph cluster?","text":"

              To obtain the logs of each cluster service, you need to access the container and view the log files that are stored inside.

              Steps to view the logs of each service in the NebulaGraph cluster:

              # To view the name of the pod where the container you want to access is located. \n# Replace <cluster-name> with the name of the cluster.\nkubectl get pods -l app.kubernetes.io/cluster=<cluster-name>\n\n# To access the container within the pod, such as the nebula-graphd-0 container.\nkubectl exec -it nebula-graphd-0 -- /bin/bash\n\n# To go to /usr/local/nebula/logs directory to view the logs.\ncd /usr/local/nebula/logs\n
              "},{"location":"k8s-operator/5.FAQ/#how_to_resolve_the_host_not_foundnebula-metadstoragedgraphd-0nebulametadstoragedgraphd-headlessdefaultsvcclusterlocal_error","title":"How to resolve the host not found:nebula-<metad|storaged|graphd>-0.nebula.<metad|storaged|graphd>-headless.default.svc.cluster.local error?","text":"

              This error is generally caused by a DNS resolution failure, and you need to check whether the cluster domain has been modified. If the cluster domain has been modified, you need to modify the kubernetesClusterDomain field in the NebulaGraph Operator configuration file accordingly. The steps for modifying the Operator configuration file are as follows:

              1. View the Operator configuration file.

                [abby@master ~]$ helm show values nebula-operator/nebula-operator   \nimage:\n  nebulaOperator:\n    image: vesoft/nebula-operator:v1.8.0\n    imagePullPolicy: Always\n  kubeRBACProxy:\n    image: bitnami/kube-rbac-proxy:0.14.2\n    imagePullPolicy: Always\n  kubeScheduler:\n    image: registry.k8s.io/kube-scheduler:v1.24.11\n    imagePullPolicy: Always\n\nimagePullSecrets: []\nkubernetesClusterDomain: \"\"  # The cluster domain name, and the default is cluster.local.\n
              2. Modify the value of the kubernetesClusterDomain field to the updated cluster domain name.

                helm upgrade nebula-operator nebula-operator/nebula-operator --namespace=<nebula-operator-system> --version=1.8.0 --set kubernetesClusterDomain=<cluster-domain>\n
                is the namespace where Operator is located and is the updated domain name."},{"location":"k8s-operator/2.get-started/2.1.install-operator/","title":"Install NebulaGraph Operator","text":"

                You can deploy NebulaGraph Operator with Helm.

                "},{"location":"k8s-operator/2.get-started/2.1.install-operator/#background","title":"Background","text":"

                NebulaGraph Operator automates the management of NebulaGraph clusters, and eliminates the need for you to install, scale, upgrade, and uninstall NebulaGraph clusters, which lightens the burden on managing different application versions.

                "},{"location":"k8s-operator/2.get-started/2.1.install-operator/#prerequisites","title":"Prerequisites","text":"

                Before installing NebulaGraph Operator, you need to install the following software and ensure the correct version of the software :

                Software Requirement Kubernetes >= 1.18 Helm >= 3.2.0 CoreDNS >= 1.6.0

                Note

                • If using a role-based access control policy, you need to enable RBAC (optional).
                • CoreDNS is a flexible and scalable DNS server that is installed for Pods in NebulaGraph clusters.
                "},{"location":"k8s-operator/2.get-started/2.1.install-operator/#steps","title":"Steps","text":"
                1. Add the NebulaGraph Operator Helm repository.

                  helm repo add nebula-operator https://vesoft-inc.github.io/nebula-operator/charts\n
                2. Update information of available charts locally from repositories.

                  helm repo update\n

                  For more information about helm repo, see Helm Repo.

                3. Create a namespace for NebulaGraph Operator.

                  kubectl create namespace <namespace_name>\n

                  For example, run the following command to create a namespace named nebula-operator-system.

                  kubectl create namespace nebula-operator-system\n

                  All the resources of NebulaGraph Operator are deployed in this namespace.

                4. Install NebulaGraph Operator.

                  helm install nebula-operator nebula-operator/nebula-operator --namespace=<namespace_name> --version=${chart_version}\n

                  For example, the command to install NebulaGraph Operator of version 1.8.0 is as follows.

                  helm install nebula-operator nebula-operator/nebula-operator --namespace=nebula-operator-system --version=1.8.0\n

                  1.8.0 is the version of the nebula-operator chart. When not specifying --version, the latest version of the nebula-operator chart is used by default.

                  Run helm search repo -l nebula-operator to see chart versions.

                  You can customize the configuration items of the NebulaGraph Operator chart before running the installation command. For more information, see Customize installation defaults.

                5. View the information about the default-created CRD.

                  kubectl get crd\n

                  Output:

                  NAME                                                 CREATED AT\nnebulaautoscalers.autoscaling.nebula-graph.io        2023-11-01T04:16:51Z\nnebulaclusters.apps.nebula-graph.io                  2023-10-12T07:55:32Z\nnebularestores.apps.nebula-graph.io                  2023-02-04T23:01:00Z\n
                "},{"location":"k8s-operator/2.get-started/2.1.install-operator/#whats_next","title":"What's next","text":"

                Create a NebulaGraph cluster

                "},{"location":"k8s-operator/2.get-started/2.3.create-cluster/","title":"Create a NebulaGraph cluster","text":"

                This topic introduces how to create a NebulaGraph cluster with the following two methods:

                • Create a NebulaGraph cluster with Helm
                • Create a NebulaGraph cluster with Kubectl
                "},{"location":"k8s-operator/2.get-started/2.3.create-cluster/#prerequisites","title":"Prerequisites","text":"
                • NebulaGraph Operator is installed.
                • A StorageClass is created.
                "},{"location":"k8s-operator/2.get-started/2.3.create-cluster/#create_a_nebulagraph_cluster_with_helm","title":"Create a NebulaGraph cluster with Helm","text":"

                Legacy version compatibility

                The 1.x version NebulaGraph Operator is not compatible with NebulaGraph of version below v3.x.

                1. Add the NebulaGraph Operator Helm repository.

                  helm repo add nebula-operator https://vesoft-inc.github.io/nebula-operator/charts\n
                2. Update information of available charts locally from chart repositories.

                  helm repo update\n
                3. Set environment variables to your desired values.

                  export NEBULA_CLUSTER_NAME=nebula         # The desired NebulaGraph cluster name.\nexport NEBULA_CLUSTER_NAMESPACE=nebula    # The desired namespace where your NebulaGraph cluster locates.\nexport STORAGE_CLASS_NAME=fast-disks             # The name of the StorageClass that has been created.\n
                4. Create a namespace for your NebulaGraph cluster (If you have created one, skip this step).

                  kubectl create namespace \"${NEBULA_CLUSTER_NAMESPACE}\"\n
                5. Apply the variables to the Helm chart to create a NebulaGraph cluster.

                  helm install \"${NEBULA_CLUSTER_NAME}\" nebula-operator/nebula-cluster \\\n    --set nameOverride=\"${NEBULA_CLUSTER_NAME}\" \\\n    --set nebula.storageClassName=\"${STORAGE_CLASS_NAME}\" \\\n    # Specify the version of the NebulaGraph cluster. \n    --set nebula.version=vmaster \\  \n    # Specify the version of the nebula-cluster chart. If not specified, the latest version of the chart is installed by default.\n    # Run 'helm search repo nebula-operator/nebula-cluster' to view the available versions of the chart.     \n    --version=1.8.0 \\\n    --namespace=\"${NEBULA_CLUSTER_NAMESPACE}\" \\\n
                "},{"location":"k8s-operator/2.get-started/2.3.create-cluster/#create_a_nebulagraph_cluster_with_kubectl","title":"Create a NebulaGraph cluster with Kubectl","text":"

                Legacy version compatibility

                The 1.x version NebulaGraph Operator is not compatible with NebulaGraph of version below v3.x.

                The following example shows how to create a NebulaGraph cluster by creating a cluster named nebula.

                1. Create a namespace, for example, nebula. If not specified, the default namespace is used.

                  kubectl create namespace nebula\n
                2. Define the cluster configuration file nebulacluster.yaml.

                  Expand to see an example configuration for the cluster
                  apiVersion: apps.nebula-graph.io/v1alpha1\nkind: NebulaCluster\nmetadata:\n  name: nebula\n  namespace: default\nspec:\n  topologySpreadConstraints:\n  - topologyKey: \"kubernetes.io/hostname\"\n    whenUnsatisfiable: \"ScheduleAnyway\"\n  graphd:\n    # Container image for the Graph service.\n    image: vesoft/nebula-graphd\n    logVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      # Storage class name for storing Graph service logs.\n      storageClassName: local-sc\n    replicas: 1\n    resources:\n      limits:\n        cpu: \"1\"\n        memory: 1Gi\n      requests:\n        cpu: 500m\n        memory: 500Mi\n    version: vmaster\n  imagePullPolicy: Always\n  metad:\n    # Container image for the Meta service.\n    image: vesoft/nebula-metad\n    logVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      storageClassName: local-sc\n    dataVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      storageClassName: local-sc\n    replicas: 1\n    resources:\n      limits:\n        cpu: \"1\"\n        memory: 1Gi\n      requests:\n        cpu: 500m\n        memory: 500Mi\n    version: vmaster\n  reference:\n    name: statefulsets.apps\n    version: v1\n  schedulerName: default-scheduler\n  storaged:\n    # Container image for the Storage service.\n    image: vesoft/nebula-storaged\n    logVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      storageClassName: local-sc\n    dataVolumeClaims:\n    - resources:\n        requests:\n          storage: 2Gi\n      storageClassName: local-sc\n    replicas: 1\n    resources:\n      limits:\n        cpu: \"1\"\n        memory: 1Gi\n      requests:\n        cpu: 500m\n        memory: 500Mi\n    version: vmaster\n

                  For more information about the other parameters, see Install NebulaGraph clusters.

                3. Create a NebulaGraph cluster.

                  kubectl create -f nebulacluster.yaml\n

                  Output:

                  nebulacluster.apps.nebula-graph.io/nebula created\n
                4. Check the status of the NebulaGraph cluster.

                  kubectl get nc nebula\n

                  Output:

                  NAME     READY     GRAPHD-DESIRED   GRAPHD-READY   METAD-DESIRED   METAD-READY   STORAGED-DESIRED   STORAGED-READY   AGE\nnebula    True     1                1              1               1             1                  1                86s\n
                "},{"location":"k8s-operator/2.get-started/2.3.create-cluster/#whats_next","title":"What's next","text":"

                Connect to a cluster

                "},{"location":"k8s-operator/2.get-started/2.4.connect-to-cluster/","title":"Connect to a NebulaGraph cluster","text":"

                After creating a NebulaGraph cluster with NebulaGraph Operator on Kubernetes, you can connect to NebulaGraph databases from within the cluster and outside the cluster.

                "},{"location":"k8s-operator/2.get-started/2.4.connect-to-cluster/#prerequisites","title":"Prerequisites","text":"

                A NebulaGraph cluster is created on Kubernetes. For more information, see Create a NebulaGraph cluster.

                "},{"location":"k8s-operator/2.get-started/2.4.connect-to-cluster/#connect_to_nebulagraph_databases_from_within_a_nebulagraph_cluster","title":"Connect to NebulaGraph databases from within a NebulaGraph cluster","text":"

                You can create a ClusterIP type Service to provide an access point to the NebulaGraph database for other Pods within the cluster. By using the Service's IP and the Graph service's port number (9669), you can connect to the NebulaGraph database. For more information, see ClusterIP.

                1. Create a file named graphd-clusterip-service.yaml. The file contents are as follows:

                  apiVersion: v1\nkind: Service\nmetadata:\n  labels:\n    app.kubernetes.io/cluster: nebula\n    app.kubernetes.io/component: graphd\n    app.kubernetes.io/managed-by: nebula-operator\n    app.kubernetes.io/name: nebula-graph\n  name: nebula-graphd-svc\n  namespace: default\nspec:\n  ports:\n  - name: thrift\n    port: 9669\n    protocol: TCP\n    targetPort: 9669\n  - name: http\n    port: 19669\n    protocol: TCP\n    targetPort: 19669\n  selector:\n    app.kubernetes.io/cluster: nebula\n    app.kubernetes.io/component: graphd\n    app.kubernetes.io/managed-by: nebula-operator\n    app.kubernetes.io/name: nebula-graph\n  type: ClusterIP  # Set the type to ClusterIP.\n
                  • NebulaGraph uses port 9669 by default. 19669 is the HTTP port of the Graph service in a NebulaGraph cluster.
                  • targetPort is the port mapped to the database Pods, which can be customized.
                2. Create a ClusterIP Service.

                  kubectl create -f graphd-clusterip-service.yaml     \n
                3. Check the IP of the Service:

                  $ kubectl get service -l app.kubernetes.io/cluster=<nebula>  # <nebula> is the name of your NebulaGraph cluster.\nNAME                       TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                                          AGE\nnebula-graphd-svc          ClusterIP   10.98.213.34   <none>        9669/TCP,19669/TCP,19670/TCP                     23h\n...\n
                4. Run the following command to connect to the NebulaGraph database using the IP of the <cluster-name>-graphd-svc Service above:

                  kubectl run -ti --image vesoft/nebula-console:v3.6.0 --restart=Never -- <nebula_console_name> -addr <cluster_ip>  -port <service_port> -u <username> -p <password>\n

                  For example:

                  kubectl run -ti --image vesoft/nebula-console:v3.6.0 --restart=Never -- nebula-console -addr 10.98.213.34  -port 9669 -u root -p vesoft\n
                  • --image: The image for the tool NebulaGraph Console used to connect to NebulaGraph databases.
                  • <nebula-console>: The custom Pod name.
                  • -addr: The IP of the ClusterIP Service, used to connect to Graphd services.
                  • -port: The port to connect to Graphd services, the default port of which is 9669.
                  • -u: The username of your NebulaGraph account. Before enabling authentication, you can use any existing username. The default username is root.
                  • -p: The password of your NebulaGraph account. Before enabling authentication, you can use any characters as the password.

                  A successful connection to the database is indicated if the following is returned:

                  If you don't see a command prompt, try pressing enter.\n\n(root@nebula) [(none)]>\n

                  You can also connect to NebulaGraph databases with Fully Qualified Domain Name (FQDN). The domain format is <cluster-name>-graphd.<cluster-namespace>.svc.<CLUSTER_DOMAIN>. The default value of CLUSTER_DOMAIN is cluster.local.

                  kubectl run -ti --image vesoft/nebula-console:v3.6.0 --restart=Never -- <nebula_console_name> -addr <cluster_name>-graphd-svc.default.svc.cluster.local -port <service_port> -u <username> -p <password>\n

                  service_port is the port to connect to Graphd services, the default port of which is 9669.

                  Note

                  If the spec.console field is set in the cluster configuration file, you can also connect to NebulaGraph databases with the following command:

                  # Enter the nebula-console Pod.\nkubectl exec -it nebula-console -- /bin/sh\n\n# Connect to NebulaGraph databases.\nnebula-console -addr nebula-graphd-svc.default.svc.cluster.local -port 9669 -u <username> -p <password>\n

                  For information about the nebula-console container, see nebula-console.

                "},{"location":"k8s-operator/2.get-started/2.4.connect-to-cluster/#connect_to_nebulagraph_databases_from_within_a_nebulagraph_cluster_1","title":"Connect to NebulaGraph databases from within a NebulaGraph cluster","text":"

                You can also create a ClusterIP type Service to provide an access point to the NebulaGraph database for other Pods within the cluster. By using the Service's IP and the Graph service's port number (9669), you can connect to the NebulaGraph database. For more information, see ClusterIP.

                1. Create a file named graphd-clusterip-service.yaml. The file contents are as follows:

                  apiVersion: v1\nkind: Service\nmetadata:\n  labels:\n    app.kubernetes.io/cluster: nebula\n    app.kubernetes.io/component: graphd\n    app.kubernetes.io/managed-by: nebula-operator\n    app.kubernetes.io/name: nebula-graph\n  name: nebula-graphd-svc\n  namespace: default\nspec:\n  externalTrafficPolicy: Local\n  ports:\n  - name: thrift\n    port: 9669\n    protocol: TCP\n    targetPort: 9669\n  - name: http\n    port: 19669\n    protocol: TCP\n    targetPort: 19669\n  selector:\n    app.kubernetes.io/cluster: nebula\n    app.kubernetes.io/component: graphd\n    app.kubernetes.io/managed-by: nebula-operator\n    app.kubernetes.io/name: nebula-graph\n  type: ClusterIP  # Set the type to ClusterIP.\n
                  • NebulaGraph uses port 9669 by default. 19669 is the HTTP port of the Graph service in a NebulaGraph cluster.
                  • targetPort is the port mapped to the database Pods, which can be customized.
                2. Create a ClusterIP Service.

                  kubectl create -f graphd-clusterip-service.yaml     \n
                3. Check the IP of the Service:

                  $ kubectl get service -l app.kubernetes.io/cluster=<nebula>  # <nebula> is the name of your NebulaGraph cluster.\nNAME                       TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                                          AGE\nnebula-graphd-svc          ClusterIP   10.98.213.34   <none>        9669/TCP,19669/TCP,19670/TCP                     23h\n...\n
                4. Run the following command to connect to the NebulaGraph database using the IP of the <cluster-name>-graphd-svc Service above:

                  kubectl run -ti --image vesoft/nebula-console:v3.6.0 --restart=Never -- <nebula_console_name> -addr <cluster_ip>  -port <service_port> -u <username> -p <password>\n

                  For example:

                  kubectl run -ti --image vesoft/nebula-console:v3.6.0 --restart=Never -- nebula-console -addr 10.98.213.34  -port 9669 -u root -p vesoft\n
                  • --image: The image for the tool NebulaGraph Console used to connect to NebulaGraph databases.
                  • <nebula-console>: The custom Pod name.
                  • -addr: The IP of the ClusterIP Service, used to connect to Graphd services.
                  • -port: The port to connect to Graphd services, the default port of which is 9669.
                  • -u: The username of your NebulaGraph account. Before enabling authentication, you can use any existing username. The default username is root.
                  • -p: The password of your NebulaGraph account. Before enabling authentication, you can use any characters as the password.

                  A successful connection to the database is indicated if the following is returned:

                  If you don't see a command prompt, try pressing enter.\n\n(root@nebula) [(none)]>\n

                  You can also connect to NebulaGraph databases with Fully Qualified Domain Name (FQDN). The domain format is <cluster-name>-graphd.<cluster-namespace>.svc.<CLUSTER_DOMAIN>. The default value of CLUSTER_DOMAIN is cluster.local.

                  kubectl run -ti --image vesoft/nebula-console:v3.6.0 --restart=Never -- <nebula_console_name> -addr <cluster_name>-graphd-svc.default.svc.cluster.local -port <service_port> -u <username> -p <password>\n

                  service_port is the port to connect to Graphd services, the default port of which is 9669.

                  Note

                  If the spec.console field is set in the cluster configuration file, you can also connect to NebulaGraph databases with the following command:

                  # Enter the nebula-console Pod.\nkubectl exec -it nebula-console -- /bin/sh\n\n# Connect to NebulaGraph databases.\nnebula-console -addr nebula-graphd-svc.default.svc.cluster.local -port 9669 -u <username> -p <password>\n

                  For information about the nebula-console container, see nebula-console.

                "},{"location":"k8s-operator/2.get-started/2.4.connect-to-cluster/#connect_to_nebulagraph_databases_from_outside_a_nebulagraph_cluster_via_nodeport","title":"Connect to NebulaGraph databases from outside a NebulaGraph cluster via NodePort","text":"

                You can create a NodePort type Service to access internal cluster services from outside the cluster using any node IP and the exposed node port. You can also utilize load balancing services provided by cloud vendors (such as Azure, AWS, etc.) by setting the Service type to LoadBalancer. This allows external access to internal cluster services through the public IP and port of the load balancer provided by the cloud vendor.

                The Service of type NodePort forwards the front-end requests via the label selector spec.selector to Graphd pods with labels app.kubernetes.io/cluster: <cluster-name> and app.kubernetes.io/component: graphd.

                After creating a NebulaGraph cluster based on the example template, where spec.graphd.service.type=NodePort, the NebulaGraph Operator will automatically create a NodePort type Service named <cluster-name>-graphd-svc in the same namespace. You can directly connect to the NebulaGraph database through any node IP and the exposed node port (see step 4 below). You can also create a custom Service according to your needs.

                Steps:

                1. Create a YAML file named graphd-nodeport-service.yaml. The file contents are as follows:

                  apiVersion: v1\nkind: Service\nmetadata:\n  labels:\n    app.kubernetes.io/cluster: nebula\n    app.kubernetes.io/component: graphd\n    app.kubernetes.io/managed-by: nebula-operator\n    app.kubernetes.io/name: nebula-graph\n  name: nebula-graphd-svc-nodeport\n  namespace: default\nspec:\n  externalTrafficPolicy: Local\n  ports:\n  - name: thrift\n    port: 9669\n    protocol: TCP\n    targetPort: 9669\n  - name: http\n    port: 19669\n    protocol: TCP\n    targetPort: 19669\n  selector:\n    app.kubernetes.io/cluster: nebula\n    app.kubernetes.io/component: graphd\n    app.kubernetes.io/managed-by: nebula-operator\n    app.kubernetes.io/name: nebula-graph\n  type: NodePort   # Set the type to NodePort.\n
                  • NebulaGraph uses port 9669 by default. 19669 is the HTTP port of the Graph service in a NebulaGraph cluster.
                  • The value of targetPort is the port mapped to the database Pods, which can be customized.
                2. Run the following command to create a NodePort Service.

                  kubectl create -f graphd-nodeport-service.yaml\n
                3. Check the port mapped on all of your cluster nodes.

                  kubectl get services -l app.kubernetes.io/cluster=<nebula> # <nebula> is the name of your NebulaGraph cluster.\n

                  Output:

                  NAME                           TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                                          AGE\nnebula-graphd-svc-nodeport     NodePort    10.107.153.129 <none>        9669:32236/TCP,19669:31674/TCP,19670:31057/TCP   24h\n...\n

                  As you see, the mapped port of NebulaGraph databases on all cluster nodes is 32236.

                4. Connect to NebulaGraph databases with your node IP and the node port above.

                  kubectl run -ti --image vesoft/nebula-console:v3.6.0 --restart=Never -- <nebula_console_name> -addr <node_ip> -port <node_port> -u <username> -p <password>\n

                  For example:

                  kubectl run -ti --image vesoft/nebula-console:v3.6.0 --restart=Never -- nebula-console -addr 192.168.8.24 -port 32236 -u root -p vesoft\nIf you don't see a command prompt, try pressing enter.\n\n(root@nebula) [(none)]>\n
                  • --image: The image for the tool NebulaGraph Console used to connect to NebulaGraph databases.
                  • <nebula-console>: The custom Pod name. The above example uses nebula-console.
                  • -addr: The IP of any node in a NebulaGraph cluster. The above example uses 192.168.8.24.
                  • -port: The mapped port of NebulaGraph databases on all cluster nodes. The above example uses 32236.
                  • -u: The username of your NebulaGraph account. Before enabling authentication, you can use any existing username. The default username is root.
                  • -p: The password of your NebulaGraph account. Before enabling authentication, you can use any characters as the password.

                  Note

                  If the spec.console field is set in the cluster configuration file, you can also connect to NebulaGraph databases with the following command:

                  # Enter the nebula-console Pod.\nkubectl exec -it nebula-console -- /bin/sh\n\n# Connect to NebulaGraph databases.\nnebula-console -addr <node_ip> -port <node_port> -u <username> -p <password>\n

                  For information about the nebula-console container, see nebula-console.

                "},{"location":"k8s-operator/2.get-started/2.4.connect-to-cluster/#connect_to_nebulagraph_databases_from_outside_a_nebulagraph_cluster_via_ingress","title":"Connect to NebulaGraph databases from outside a NebulaGraph cluster via Ingress","text":"

                When dealing with multiple pods in a cluster, managing services for each pod separately is not a good practice. Ingress is a Kubernetes resource that provides a unified entry point for accessing multiple services. Ingress can be used to expose multiple services under a single IP address.

                Nginx Ingress is an implementation of Kubernetes Ingress. Nginx Ingress watches the Ingress resource of a Kubernetes cluster and generates the Ingress rules into Nginx configurations that enable Nginx to forward 7 layers of traffic.

                You can use Nginx Ingress to connect to a NebulaGraph cluster from outside the cluster using a combination of the host network and DaemonSet pattern.

                Due to the use of HostNetwork, Nginx Ingress pods may be scheduled on the same node (port conflicts will occur when multiple pods try to listen on the same port on the same node). To avoid this situation, Nginx Ingress is deployed on these nodes in DaemonSet mode (ensuring that a pod replica runs on each node in the cluster). You first need to select some nodes and label them for the specific deployment of Nginx Ingress.

                Ingress does not support TCP or UDP services. For this reason, the nginx-ingress-controller pod uses the flags --tcp-services-configmap and --udp-services-configmap to point to an existing ConfigMap where the key refers to the external port to be used and the value refers to the format of the service to be exposed. The format of the value is <namespace/service_name>:<service_port>.

                For example, the configurations of the ConfigMap named as tcp-services is as follows:

                apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: tcp-services\n  namespace: nginx-ingress\ndata:\n  # update \n  9769: \"default/nebula-graphd-svc:9669\"\n

                Steps are as follows.

                1. Create a file named nginx-ingress-daemonset-hostnetwork.yaml.

                  Click on nginx-ingress-daemonset-hostnetwork.yaml to view the complete content of the example YAML file.

                  Note

                  The resource objects in the YAML file above use the namespace nginx-ingress. You can run kubectl create namespace nginx-ingress to create this namespace, or you can customize the namespace.

                2. Label a node where the DaemonSet named nginx-ingress-controller in the above YAML file (The node used in this example is named worker2 with an IP of 192.168.8.160) runs.

                  kubectl label node worker2 nginx-ingress=true\n
                3. Run the following command to enable Nginx Ingress in the cluster you created.

                  kubectl create -f nginx-ingress-daemonset-hostnetwork.yaml\n

                  Output:

                  configmap/nginx-ingress-controller created\nconfigmap/tcp-services created\nserviceaccount/nginx-ingress created\nserviceaccount/nginx-ingress-backend created\nclusterrole.rbac.authorization.k8s.io/nginx-ingress created\nclusterrolebinding.rbac.authorization.k8s.io/nginx-ingress created\nrole.rbac.authorization.k8s.io/nginx-ingress created\nrolebinding.rbac.authorization.k8s.io/nginx-ingress created\nservice/nginx-ingress-controller-metrics created\nservice/nginx-ingress-default-backend created\nservice/nginx-ingress-proxy-tcp created\ndaemonset.apps/nginx-ingress-controller created\n

                  Since the network type that is configured in Nginx Ingress is hostNetwork, after successfully deploying Nginx Ingress, with the IP (192.168.8.160) of the node where Nginx Ingress is deployed and with the external port (9769) you define, you can access NebulaGraph.

                4. Use the IP address and the port configured in the preceding steps. You can connect to NebulaGraph with NebulaGraph Console.

                  kubectl run -ti --image vesoft/nebula-console:v3.6.0 --restart=Never -- <nebula_console_name> -addr <host_ip> -port <external_port> -u <username> -p <password>\n

                  Output:

                  kubectl run -ti --image vesoft/nebula-console:v3.6.0 --restart=Never -- nebula-console -addr 192.168.8.160 -port 9769 -u root -p vesoft\n
                  • --image: The image for the tool NebulaGraph Console used to connect to NebulaGraph databases.
                  • <nebula-console> The custom Pod name. The above example uses nebula-console.
                  • -addr: The IP of the node where Nginx Ingress is deployed. The above example uses 192.168.8.160.
                  • -port: The port used for external network access. The above example uses 9769.
                  • -u: The username of your NebulaGraph account. Before enabling authentication, you can use any existing username. The default username is root.
                  • -p: The password of your NebulaGraph account. Before enabling authentication, you can use any characters as the password.

                  A successful connection to the database is indicated if the following is returned:

                  If you don't see a command prompt, try pressing enter.\n(root@nebula) [(none)]>\n

                  Note

                  If the spec.console field is set in the cluster configuration file, you can also connect to NebulaGraph databases with the following command:

                  # Enter the nebula-console Pod.\nkubectl exec -it nebula-console -- /bin/sh\n\n# Connect to NebulaGraph databases.\nnebula-console -addr <ingress_host_ip> -port <external_port> -u <username> -p <password>\n

                  For information about the nebula-console container, see nebula-console.

                "},{"location":"k8s-operator/3.operator-management/3.1.customize-installation/","title":"Customize installation defaults","text":"

                This topic introduces how to customize the default configurations when installing NebulaGraph Operator.

                "},{"location":"k8s-operator/3.operator-management/3.1.customize-installation/#customizable_parameters","title":"Customizable parameters","text":"

                When executing the helm install [NAME] [CHART] [flags] command to install a chart, you can specify the chart configuration. For more information, see Customizing the Chart Before Installing.

                You can view the configurable options in the nebula-operator chart configuration file. Alternatively, you can view the configurable options through the command helm show values nebula-operator/nebula-operator, as shown below.

                [root@master ~]$ helm show values nebula-operator/nebula-operator   \nimage:\n  nebulaOperator:\n    image: vesoft/nebula-operator:v1.8.0\n    imagePullPolicy: Always\n\nimagePullSecrets: [ ]\nkubernetesClusterDomain: \"\"\n\ncontrollerManager:\n  create: true\n  replicas: 2\n  env: [ ]\n  resources:\n    limits:\n      cpu: 200m\n      memory: 200Mi\n    requests:\n      cpu: 100m\n      memory: 100Mi\n  verbosity: 0\n  ## Additional InitContainers to initialize the pod\n  # Example:\n  #  extraInitContainers:\n  #  - name: init-auth-sidecar\n  #    command:\n  #    - /bin/sh\n  #    - -c\n  #    args:\n  #    - cp -R /certs/* /credentials/\n  #    imagePullPolicy: Always\n  #    image: reg.vesoft-inc.com/nebula-certs:latest\n  #    volumeMounts:\n  #    - name: credentials\n  #      mountPath: /credentials\n  extraInitContainers: []\n\n  # sidecarContainers - add more containers to controller-manager\n  # Key/Value where Key is the sidecar `- name: <Key>`\n  # Example:\n  #   sidecarContainers:\n  #      webserver:\n  #        image: nginx\n  # OR for adding netshoot to controller manager\n  #  sidecarContainers:\n  #    netshoot:\n  #      args:\n  #      - -c\n  #      - while true; do ping localhost; sleep 60;done\n  #      command:\n  #      - /bin/bash\n  #      image: nicolaka/netshoot\n  #      imagePullPolicy: Always\n  #      name: netshoot\n  #      resources: {}\n  sidecarContainers: {}\n\n  ## Additional controller-manager Volumes\n  extraVolumes: []\n\n  ## Additional controller-manager Volume mounts\n  extraVolumeMounts: []\n\n  securityContext: {}\n  #  runAsNonRoot: true\n\nadmissionWebhook:\n  create: false\n  # The TCP port the Webhook server binds to. (default 9443)\n  webhookBindPort: 9443\n\nscheduler:\n  create: true\n  schedulerName: nebula-scheduler\n  replicas: 2\n  env: [ ]\n  resources:\n    limits:\n      cpu: 200m\n      memory: 200Mi\n    requests:\n      cpu: 100m\n      memory: 100Mi\n  verbosity: 0\n  plugins:\n    enabled: [\"NodeZone\"]\n    disabled: [] # Only in-tree plugins need to be defined here\n...\n

                Part of the above parameters are described as follows:

                Parameter Default value Description image.nebulaOperator.image vesoft/nebula-operator:v1.8.0 The image of NebulaGraph Operator, version of which is 1.8.0. image.nebulaOperator.imagePullPolicy IfNotPresent The image pull policy in Kubernetes. imagePullSecrets - The image pull secret in Kubernetes. For example imagePullSecrets[0].name=\"vesoft\". kubernetesClusterDomain cluster.local The cluster domain. controllerManager.create true Whether to enable the controller-manager component. controllerManager.replicas 2 The number of controller-manager replicas. controllerManager.env [] The environment variables for the controller-manager component. controllerManager.extraInitContainers [] Runs an init container. controllerManager.sidecarContainers {} Runs a sidecar container. controllerManager.extraVolumes [] Sets a storage volume. controllerManager.extraVolumeMounts [] Sets the storage volume mount path. controllerManager.securityContext {} Configures the access and control settings for NebulaGraph Operator. admissionWebhook.create false Whether to enable Admission Webhook. This option is disabled. To enable it, set the value to true and you will need to install cert-manager. For details, see Enable admission control. admissionWebhook.webhookBindPort 9443 The TCP port the Webhook server binds to. It is 9443 by default. shceduler.create true Whether to enable Scheduler. shceduler.schedulerName nebula-scheduler The name of the scheduler customized by NebulaGraph Operator. shceduler.replicas 2 The number of nebula-scheduler replicas."},{"location":"k8s-operator/3.operator-management/3.1.customize-installation/#example","title":"Example","text":"

                The following example shows how to enable AdmissionWebhook when you install NebulaGraph Operator (AdmissionWebhook is disabled by default):

                helm install nebula-operator nebula-operator/nebula-operator --namespace=<nebula-operator-system> --set admissionWebhook.create=true\n

                Check whether the specified configuration of NebulaGraph Operator is installed successfully:

                helm get values nebula-operator -n <nebula-operator-system>\n

                Example output:

                USER-SUPPLIED VALUES:\nadmissionWebhook:\n  create: true\n

                For more information about helm install, see Helm Install.

                "},{"location":"k8s-operator/3.operator-management/3.2.update-operator/","title":"Update NebulaGraph Operator","text":"

                This topic introduces how to update the configuration of NebulaGraph Operator.

                "},{"location":"k8s-operator/3.operator-management/3.2.update-operator/#steps","title":"Steps","text":"
                1. Update the information of available charts locally from chart repositories.

                  helm repo update\n
                2. View the default values of NebulaGraph Operator.

                  helm show values nebula-operator/nebula-operator\n
                3. Update NebulaGraph Operator by passing configuration parameters via --set.

                  • --set\uff1aOverrides values using the command line. For more configurable items, see Customize installation defaults.

                  For example, to enable the AdmissionWebhook, run the following command:

                  helm upgrade nebula-operator nebula-operator/nebula-operator --namespace=nebula-operator-system --version=1.8.0 --set admissionWebhook.create=true\n

                  For more information, see Helm upgrade.

                4. Check whether the configuration of NebulaGraph Operator is updated successfully.

                  helm get values nebula-operator -n nebula-operator-system\n

                  Example output:

                  USER-SUPPLIED VALUES:\nadmissionWebhook:\n  create: true\n
                "},{"location":"k8s-operator/3.operator-management/3.3.upgrade-operator/","title":"Upgrade NebulaGraph Operator","text":"

                Legacy version compatibility

                • Does not support upgrading 0.9.0 and below version NebulaGraph Operator to 1.x.
                • The 1.x version NebulaGraph Operator is not compatible with NebulaGraph of version below v3.x.
                "},{"location":"k8s-operator/3.operator-management/3.3.upgrade-operator/#steps","title":"Steps","text":"
                1. View the current version of NebulaGraph Operator.

                  helm list --all-namespaces\n

                  Example output:

                  NAME              NAMESPACE               REVISION    UPDATED                                 STATUS      CHART                   APP VERSION\nnebula-operator   nebula-operator-system  3           2023-11-06 12:06:24.742397418 +0800 CST deployed    nebula-operator-1.7.0   1.7.0\n
                2. Update the information of available charts locally from chart repositories.

                  helm repo update\n
                3. View the latest version of NebulaGraph Operator.

                  helm search repo nebula-operator/nebula-operator\n

                  Example output:

                  NAME                              CHART VERSION   APP VERSION DESCRIPTION\nnebula-operator/nebula-operator   1.8.0           1.8.0       Nebula Operator Helm chart for Kubernetes\n
                4. Upgrade NebulaGraph Operator to version 1.8.0.

                  helm upgrade nebula-operator nebula-operator/nebula-operator --namespace=<namespace_name> --version=1.8.0\n

                  For example:

                  helm upgrade nebula-operator nebula-operator/nebula-operator --namespace=nebula-operator-system --version=1.8.0\n

                  Output:

                  Release \"nebula-operator\" has been upgraded. Happy Helming!\nNAME: nebula-operator\nLAST DEPLOYED: Tue Apr 16 02:21:08 2022\nNAMESPACE: nebula-operator-system\nSTATUS: deployed\nREVISION: 3\nTEST SUITE: None\nNOTES:\nNebulaGraph Operator installed!\n
                5. Pull the latest CRD configuration file.

                  Note

                  You need to upgrade the corresponding CRD configurations after NebulaGraph Operator is upgraded. Otherwise, the creation of NebulaGraph clusters will fail. For information about the CRD configurations, see apps.nebula-graph.io_nebulaclusters.yaml.

                  1. Pull the NebulaGraph Operator chart package.

                    helm pull nebula-operator/nebula-operator --version=1.8.0\n
                    • --version: The NebulaGraph Operator version you want to upgrade to. If not specified, the latest version will be pulled.
                  2. Run tar -zxvf to unpack the charts.

                    For example: To unpack v1.8.0 chart to the /tmp path, run the following command:

                    tar -zxvf nebula-operator-1.8.0.tgz -C /tmp\n
                    • -C /tmp: If not specified, the chart files will be unpacked to the current directory.
                6. Apply the latest CRD configuration file in the nebula-operator directory.

                  kubectl apply -f crds/nebulaclusters.yaml\n

                  Output:

                  customresourcedefinition.apiextensions.k8s.io/nebulaclusters.apps.nebula-graph.io configured\n
                "},{"location":"k8s-operator/3.operator-management/3.4.unistall-operator/","title":"Uninstall NebulaGraph Operator","text":"

                This topic introduces how to uninstall NebulaGraph Operator.

                "},{"location":"k8s-operator/3.operator-management/3.4.unistall-operator/#steps","title":"Steps","text":"
                1. Uninstall the NebulaGraph Operator chart.

                  helm uninstall nebula-operator --namespace=<nebula-operator-system>\n
                2. View the information about the default-created CRD.

                  kubectl get crd\n

                  Output:

                  NAME                                                 CREATED AT\nnebulaautoscalers.autoscaling.nebula-graph.io        2023-11-01T04:16:51Z\nnebulaclusters.apps.nebula-graph.io                  2023-10-12T07:55:32Z\nnebularestores.apps.nebula-graph.io                  2023-02-04T23:01:00Z\n
                3. Delete CRD.

                  kubectl delete crd nebulaclusters.apps.nebula-graph.io nebularestores.apps.nebula-graph.io nebulaautoscalers.autoscaling.nebula-graph.io\n
                "},{"location":"k8s-operator/3.operator-management/3.5.cluster-scope-config/","title":"Use NebulaGraph Operator to manage specific clusters","text":"

                NebulaGraph Operator supports the management of multiple NebulaGraph clusters. By default, NebulaGraph Operator manages all NebulaGraph clusters. However, you can specify the clusters managed by NebulaGraph Operator. This topic describes how to specify the clusters managed by NebulaGraph Operator.

                "},{"location":"k8s-operator/3.operator-management/3.5.cluster-scope-config/#application_scenarios","title":"Application scenarios","text":"
                • Gray release of NebulaGraph Operator: You want to run the new Nebula Operator version on a part of the clusters first to test and verify its performance before fully releasing it.
                • Manage specific clusters: You want NebulaGraph Operator to manage only specific NebulaGraph clusters.
                "},{"location":"k8s-operator/3.operator-management/3.5.cluster-scope-config/#configurations","title":"Configurations","text":"

                NebulaGraph Operator supports specifying the clusters managed by controller-manager through startup parameters. The supported parameters are as follows:

                • watchNamespaces: Specifies the namespace where the NebulaGraph cluster is located. To specify multiple namespaces, separate them with commas (,). For example, watchNamespaces=default,nebula. If this parameter is not specified, NebulaGraph Operator manages all NebulaGraph clusters in all namespaces.
                • nebulaObjectSelector: Allows you to set specific labels and values to select the NebulaGraph clusters to be managed. It supports three label operation symbols: =, ==, and !=. Both = and == mean that the label's value is equal to the specified value, while != means the tag's value is not equal to the specified value. Multiple labels are separated by commas (,), and the comma needs to be escaped with \\\\. For example, nebulaObjectSelector=key1=value1\\\\,key2=value2, which selects only the NebulaGraph clusters with labels key1=value1 and key2=value2. If this parameter is not specified, NebulaGraph Operator manages all NebulaGraph clusters.
                "},{"location":"k8s-operator/3.operator-management/3.5.cluster-scope-config/#examples","title":"Examples","text":""},{"location":"k8s-operator/3.operator-management/3.5.cluster-scope-config/#specify_the_managed_clusters_by_namespace","title":"Specify the managed clusters by namespace","text":"

                Run the following command to make NebulaGraph Operator manage only the NebulaGraph clusters in the default and nebula namespaces. Ensure that the current Helm Chart version supports this parameter. For more information, see Update the configuration.

                helm upgrade nebula-operator nebula-operator/nebula-operator --set watchNamespaces=default,nebula\n
                "},{"location":"k8s-operator/3.operator-management/3.5.cluster-scope-config/#specify_the_managed_clusters_by_label","title":"Specify the managed clusters by label","text":"

                Run the following command to make NebulaGraph Operator manage only the NebulaGraph clusters with the labels key1=value1 and key2=value2. Ensure that the current Helm Chart version supports this parameter. For more information, see Update the configuration.

                helm upgrade nebula-operator nebula-operator/nebula-operator --set nebulaObjectSelector=key1=value1\\\\,key2=value2\n
                "},{"location":"k8s-operator/3.operator-management/3.5.cluster-scope-config/#faq","title":"FAQ","text":""},{"location":"k8s-operator/3.operator-management/3.5.cluster-scope-config/#how_to_set_labels_for_nebulagraph_clusters","title":"How to set labels for NebulaGraph clusters?","text":"

                Run the following command to set a label for the NebulaGraph cluster:

                kubectl label nc <cluster_name> -n <namespace> <key>=<value>\n

                For example, set the label env=test for the NebulaGraph cluster named nebula in the nebulaspace namespace:

                kubectl label nc nebula -n nebulaspace env=test\n
                "},{"location":"k8s-operator/3.operator-management/3.5.cluster-scope-config/#how_to_view_the_labels_of_nebulagraph_clusters","title":"How to view the labels of NebulaGraph clusters?","text":"

                Run the following command to view the labels of NebulaGraph clusters:

                kubectl get nc <cluster_name> -n <namespace> --show-labels\n

                For example, view the labels of the NebulaGraph cluster named nebula in the nebulaspace namespace:

                kubectl get nc nebula -n nebulaspace --show-labels\n
                "},{"location":"k8s-operator/3.operator-management/3.5.cluster-scope-config/#how_to_delete_the_labels_of_nebulagraph_clusters","title":"How to delete the labels of NebulaGraph clusters?","text":"

                Run the following command to delete the label of NebulaGraph clusters:

                kubectl label nc <cluster_name> -n <namespace> <key>-\n

                For example, delete the label env=test of the NebulaGraph cluster named nebula in the nebulaspace namespace:

                kubectl label nc nebula -n nebulaspace env-\n
                "},{"location":"k8s-operator/3.operator-management/3.5.cluster-scope-config/#how_to_view_the_namespace_where_the_nebulagraph_cluster_is_located","title":"How to view the namespace where the NebulaGraph cluster is located?","text":"

                Run the following command to list all namespaces where the NebulaGraph clusters are located:

                kubectl get nc --all-namespaces\n
                "},{"location":"k8s-operator/4.cluster-administration/4.2.configuration/","title":"Customize the configuration of the NebulaGraph cluster","text":"

                The Meta, Storage, and Graph services each have their default configurations within the NebulaGraph cluster. NebulaGraph Operator allows for the customization of these cluster service configurations. This topic describes how to update the settings of the NebulaGraph cluster.

                Note

                Configuring the parameters of the NebulaGraph cluster via Helm isn't currently supported.

                "},{"location":"k8s-operator/4.cluster-administration/4.2.configuration/#prerequisites","title":"Prerequisites","text":"

                A cluster is created using NebulaGraph Operator. For details, see Create a NebulaGraph Cluster.

                "},{"location":"k8s-operator/4.cluster-administration/4.2.configuration/#configuration_method","title":"Configuration method","text":"

                You can update the configurations of cluster services by customizing parameters through spec.<metad|graphd|storaged>.config. NebulaGraph Operator loads the configurations from config into the corresponding service's ConfigMap, which is then mounted into the service's configuration file directory (/usr/local/nebula/etc/) at the time of the service launch.

                The structure of config is as follows:

                Config map[string]string `json:\"config,omitempty\"`\n

                For instance, when updating the Graph service's enable_authorize parameter settings, the spec.graphd.config parameter can be specified at the time of cluster creation, or during cluster runtime.

                apiVersion: apps.nebula-graph.io/v1alpha1\nkind: NebulaCluster\nmetadata:\n  name: nebula\n  namespace: default\nspec:\n  graphd:\n    ...\n    config: // Custom-defined parameters for the Graph service.\n      \"enable_authorize\": \"true\"  // Enable authorization. Default value is false.\n...\n

                If you need to configure config for the Meta and Storage services, add corresponding configuration items to spec.metad.config and spec.storaged.config.

                "},{"location":"k8s-operator/4.cluster-administration/4.2.configuration/#configurable_parameters","title":"Configurable parameters","text":"

                For more detailed information on the parameters that can be set under the config field, see the following:

                • Meta Service Configuration Parameters
                • Storage Service Configuration Parameters
                • Graph Service Configuration Parameters
                "},{"location":"k8s-operator/4.cluster-administration/4.2.configuration/#parameter_updates_pod_restart_rules","title":"Parameter updates & Pod restart rules","text":"

                Configuration parameters for cluster services fall into two categories: those which require a service restart for any updates; and those which can be dynamically updated during service runtime. For the latter type, the updates will not be saved; subsequent to a service restart, configurations will revert to the state as shown in the configuration file.

                Regarding if the configuration parameters support dynamic updates during service runtime, please verify the information within the Whether supports runtime dynamic modifications column on each of the service configuration parameter detail pages linked above or see Dynamic runtime flags.

                During the update of cluster service configurations, keep the following points in mind:

                • If the updated parameters under config all allow for dynamic runtime updates, a service Pod restart will not be triggered and the configuration parameter updates will not be saved.
                • If the updated parameters under config include one or more that don\u2019t allow for dynamic runtime updates, a service Pod restart will be triggered, but only updates to those parameters that don\u2019t allow for dynamic updates will be saved.

                Note

                If you wish to modify the parameter settings during cluster runtime without triggering a Pod restart, make sure that all the parameters support dynamic updates during runtime.

                "},{"location":"k8s-operator/4.cluster-administration/4.2.configuration/#customize_port_configuration","title":"Customize port configuration","text":"

                The following example demonstrates how to customize the port configurations for the Meta, Storage, and Graph services.

                You can add port and ws_http_port parameters to the config field in order to set custom ports. For detailed information regarding these two parameters, see the networking configuration sections at Meta Service Configuration Parameters, Storage Service Configuration Parameters, Graph Service Configuration Parameters.

                Note

                • After customizing the port and ws_http_port parameter settings, a Pod restart is triggered and then the updated settings take effect after the restart.
                • Once the cluster is started, it is not recommended to modify the port parameter.
                1. Modify the cluster configuration file.

                  1. Open the cluster configuration file.

                    kubectl edit nc nebula\n
                  2. Modify the configuration file as follows.

                    Add the config field to the graphd, metad, and storaged sections to customize the port configurations for the Graph, Meta, and Storage services, respectively.

                    apiVersion: apps.nebula-graph.io/v1alpha1\nkind: NebulaCluster\nmetadata:\n  name: nebula\n  namespace: default\nspec:\n  graphd:\n    config:  // Custom port configuration for the Graph service.\n      port: \"3669\"\n      ws_http_port: \"8080\"\n    resources:\n      requests:\n        cpu: \"200m\"\n        memory: \"500Mi\"\n      limits:\n        cpu: \"1\"\n        memory: \"1Gi\"\n    replicas: 1\n    image: vesoft/nebula-graphd\n    version: master\n  metad: \n    config:  // Custom port configuration for the Meta service.\n      ws_http_port: 8081\n    resources:\n      requests:\n        cpu: \"300m\"\n        memory: \"500Mi\"\n      limits:\n        cpu: \"1\"\n        memory: \"1Gi\"\n    replicas: 1\n    image: vesoft/nebula-metad\n    version: master\n    dataVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      storageClassName: local-path\n  storaged:  \n    config:  // Custom port configuration for the Storage service.\n      ws_http_port: 8082\n    resources:\n      requests:\n        cpu: \"300m\"\n        memory: \"500Mi\"\n      limits:\n        cpu: \"1\"\n        memory: \"1Gi\"\n    replicas: 1\n    image: vesoft/nebula-storaged\n    version: master\n    dataVolumeClaims:\n    - resources:\n        requests:\n          storage: 2Gi\n      storageClassName: local-path\n    enableAutoBalance: true\n  reference:\n    name: statefulsets.apps\n    version: v1\n  schedulerName: default-scheduler\n  imagePullPolicy: IfNotPresent\n  imagePullSecrets:\n  - name: nebula-image\n  enablePVReclaim: true\n  topologySpreadConstraints:\n  - topologyKey: kubernetes.io/hostname\n    whenUnsatisfiable: \"ScheduleAnyway\"\n
                2. Save the changes.

                  Changes will be saved automatically after saving the file.

                  1. Press Esc to enter command mode.
                  2. Enter :wq to save and exit.
                3. Validate that the configurations have taken effect.

                  kubectl get svc\n

                  Example output:

                  NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE\nnebula-graphd-headless      ClusterIP   None             <none>        3669/TCP,8080/TCP            10m\nnebula-graphd-svc           ClusterIP   10.102.13.115    <none>        3669/TCP,8080/TCP            10m\nnebula-metad-headless       ClusterIP   None             <none>        9559/TCP,8081/TCP            11m\nnebula-storaged-headless    ClusterIP   None             <none>        9779/TCP,8082/TCP,9778/TCP   11m\n

                  As can be noticed, the Graph service's RPC daemon port is changed to 3669 (default 9669), the HTTP port to 8080 (default 19669); the Meta service's HTTP port is changed to 8081 (default 19559); the Storage service's HTTP port is changed to 8082 (default 19779).

                "},{"location":"k8s-operator/4.cluster-administration/4.5.logging/","title":"Manage cluster logs","text":"

                Running logs of NebulaGraph cluster services (graphd, metad, storaged) are generated and stored in the /usr/local/nebula/logs directory of each service container by default.

                "},{"location":"k8s-operator/4.cluster-administration/4.5.logging/#view_logs","title":"View logs","text":"

                To view the running logs of a NebulaGraph cluster, you can use the kubectl logs command.

                For example, to view the running logs of the Storage service:

                // View the name of the Storage service Pod, nebula-storaged-0.\n$ kubectl get pods -l app.kubernetes.io/component=storaged\nNAME                               READY   STATUS    RESTARTS      AGE\nnebula-storaged-0                  1/1     Running   0             45h\n...\n\n// Enter the container storaged of the Storage service.\n$ kubectl exec -it nebula-storaged-0 -c storaged -- /bin/bash\n\n// View the running logs of the Storage service.\n$ cd /usr/local/nebula/logs\n
                "},{"location":"k8s-operator/4.cluster-administration/4.5.logging/#clean_logs","title":"Clean logs","text":"

                Running logs generated by cluster services during runtime will occupy disk space. To avoid occupying too much disk space, the NebulaGraph Operator uses a sidecar container to periodically clean and archive logs.

                To facilitate log collection and management, each NebulaGraph service deploys a sidecar container responsible for collecting logs generated by the service container and sending them to the specified log disk. The sidecar container automatically cleans and archives logs using the logrotate tool.

                In the YAML configuration file of the cluster instance, set spec.logRotate to enable log rotation and set timestamp_in_logfile_name to false to disable the timestamp in the log file name to implement log rotation for the target service. The timestamp_in_logfile_name parameter is configured under the spec.<graphd|metad|storaged>.config field. By default, the log rotation feature is turned off. Here is an example of enabling log rotation for all services:

                ...\nspec:\n  graphd:\n    config:\n      # Whether to include a timestamp in the log file name. \n      # You must set this parameter to false to enable log rotation. \n      # It is set to true by default.\n      \"timestamp_in_logfile_name\": \"false\"\n  metad:\n    config:\n      \"timestamp_in_logfile_name\": \"false\"\n  storaged:\n    config:\n      \"timestamp_in_logfile_name\": \"false\"\n  logRotate: # Log rotation configuration\n    # The number of times a log file is rotated before being deleted.\n    # The default value is 5, and 0 means the log file will not be rotated before being deleted.\n    rotate: 5\n    # The log file is rotated only if it grows larger than the specified size. The default value is 200M.\n    size: \"200M\"\n
                "},{"location":"k8s-operator/4.cluster-administration/4.5.logging/#collect_logs","title":"Collect logs","text":"

                If you don't want to mount additional log disks to back up log files, or if you want to collect logs and send them to a log center using services like fluent-bit, you can configure logs to be output to standard error. The Operator uses the glog tool to log to standard error output.

                Note

                Currently, NebulaGraph Operator only collects standard error logs.

                In the YAML configuration file of the cluster instance, you can configure logging to standard error output in the config and env fields of each service.

                ...\nspec:\n  graphd:\n    config:\n      # Whether to redirect standard error to a separate output file. The default value is false, which means it is not redirected.\n      redirect_stdout: \"false\"\n      # The severity level of log content: INFO, WARNING, ERROR, and FATAL. The corresponding values are 0, 1, 2, and 3.\n      stderrthreshold: \"0\"\n    env: \n    - name: GLOG_logtostderr # Write log to standard error output instead of a separate file.\n      value: \"1\" # 1 represents writing to standard error output, and 0 represents writing to a file.\n    image: vesoft/nebula-graphd\n    replicas: 1\n    resources:\n      requests:\n        cpu: 500m\n        memory: 500Mi\n    service:\n      externalTrafficPolicy: Local\n      type: NodePort\n    version: vmaster\n  metad:\n    config:\n      redirect_stdout: \"false\"\n      stderrthreshold: \"0\"\n    dataVolumeClaim:\n      resources:\n        requests:\n          storage: 1Gi\n      storageClassName: ebs-sc\n    env:\n    - name: GLOG_logtostderr\n      value: \"1\"\n    image: vesoft/nebula-metad\n  ...\n
                "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.1.cluster-install/","title":"Install a NebulaGraph cluster using NebulaGraph Operator","text":"

                Using NebulaGraph Operator to install NebulaGraph clusters enables automated cluster management with automatic error recovery. This topic covers two methods, kubectl apply and helm, for installing clusters using NebulaGraph Operator.

                Historical version compatibility

                NebulaGraph Operator versions 1.x are not compatible with NebulaGraph versions below 3.x.

                "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.1.cluster-install/#prerequisites","title":"Prerequisites","text":"
                • Install NebulaGraph Operator
                • Create a StorageClass
                "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.1.cluster-install/#use_kubectl_apply","title":"Use kubectl apply","text":"
                1. Create a namespace for storing NebulaGraph cluster-related resources. For example, create the nebula namespace.

                  kubectl create namespace nebula\n
                2. Create a YAML configuration file nebulacluster.yaml for the cluster. For example, create a cluster named nebula.

                  Expand to view an example configuration for the nebula cluster
                  apiVersion: apps.nebula-graph.io/v1alpha1\nkind: NebulaCluster\nmetadata:\n  name: nebula\n  namespace: default\nspec:\n  # Control the Pod scheduling strategy.\n  topologySpreadConstraints:\n  - topologyKey: \"kubernetes.io/hostname\"\n    whenUnsatisfiable: \"ScheduleAnyway\"\n  # Enable PV recycling.\n  enablePVReclaim: false\n  # Enable monitoring.\n  exporter:\n    image: vesoft/nebula-stats-exporter\n    version: v3.3.0\n    replicas: 1\n    maxRequests: 20\n  # Custom Agent image for cluster backup and restore, and log cleanup.\n  agent:\n    image: vesoft/nebula-agent\n    version: latest\n    resources:\n      requests:\n        cpu: \"100m\"\n        memory: \"128Mi\"\n      limits:\n        cpu: \"200m\"\n        memory: \"256Mi\"  \n  # Configure the image pull policy.\n  imagePullPolicy: Always\n  # Select the nodes for Pod scheduling.\n  nodeSelector:\n    nebula: cloud\n  # Dependent controller name.\n  reference:\n    name: statefulsets.apps\n    version: v1\n  # Scheduler name.\n  schedulerName: default-scheduler   \n  # Start NebulaGraph Console service for connecting to the Graph service.\n  console:\n    image: vesoft/nebula-console\n    version: nightly\n    username: \"demo\"\n    password: \"test\"                 \n  # Graph service configuration. \n  graphd:\n  # Used to check if the Graph service is running normally.\n  #  readinessProbe:\n  #    failureThreshold: 3\n  #    httpGet:\n  #      path: /status\n  #      port: 19669\n  #      scheme: HTTP\n  #    initialDelaySeconds: 40\n  #    periodSeconds: 10\n  #    successThreshold: 1\n  #    timeoutSeconds: 10\n    # Container image for the Graph service.\n    image: vesoft/nebula-graphd\n    logVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      # Storage class name for storing Graph service logs.\n      storageClassName: local-sc\n    # Number of replicas for the Graph service Pod.\n    replicas: 1\n    # Resource configuration for the Graph service.\n    resources:\n      limits:\n        cpu: \"1\"\n        memory: 1Gi\n      requests:\n        cpu: 500m\n        memory: 500Mi\n    # Version of the Graph service.\n    version: vmaster\n    # Custom flags configuration for the Graph service.\n    config: {}\n  # Meta service configuration.\n  metad:\n  #  readinessProbe:\n  #    failureThreshold: 3\n  #    httpGet:\n  #      path: /status\n  #      port: 19559\n  #      scheme: HTTP\n  #    initialDelaySeconds: 5\n  #    periodSeconds: 5\n  #    successThreshold: 1\n  #    timeoutSeconds: 5\n    # Container image for the Meta service.\n    image: vesoft/nebula-metad\n    logVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      storageClassName: local-sc\n    dataVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      storageClassName: local-sc\n    replicas: 1\n    resources:\n      limits:\n        cpu: \"1\"\n        memory: 1Gi\n      requests:\n        cpu: 500m\n        memory: 500Mi\n    version: vmaster\n    # Custom flags configuration for the Meta service.\n    config: {}          \n  # Storage service configuration.\n  storaged:\n  #  readinessProbe:\n  #    failureThreshold: 3\n  #    httpGet:\n  #      path: /status\n  #      port: 19779\n  #      scheme: HTTP\n  #    initialDelaySeconds: 40\n  #    periodSeconds: 10\n  #    successThreshold: 1\n  #    timeoutSeconds: 5\n    # Container image for the Storage service.\n    image: vesoft/nebula-graphd\n    logVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      storageClassName: local-sc\n    dataVolumeClaims:\n    - resources:\n        requests:\n          storage: 2Gi\n      storageClassName: local-sc\n    replicas: 1\n    resources:\n      limits:\n        cpu: \"1\"\n        memory: 1Gi\n      requests:\n        cpu: 500m\n        memory: 500Mi\n    version: vmaster\n    # Custom flags configuration for the Storage service.\n    config: {} \n
                  Expand to view all configurable parameters and descriptions Parameter Default Value Description metadata.name - The name of the created NebulaGraph cluster. spec.console - Launches a Console container for connecting to the Graph service. For configuration details, see nebula-console. spec.topologySpreadConstraints - Controls the scheduling strategy for Pods. For more details, see Topology Spread Constraints. When the value of topologyKey is kubernetes.io/zone, the value of whenUnsatisfiable must be set to DoNotSchedule, and the value of spec.schedulerName should be nebula-scheduler. spec.graphd.replicas 1 The number of replicas for the Graphd service. spec.graphd.image vesoft/nebula-graphd The container image for the Graphd service. spec.graphd.version master The version of the Graphd service. spec.graphd.service Configuration for accessing the Graphd service via a Service. spec.graphd.logVolumeClaim.storageClassName - The storage class name for the log volume claim of the Graphd service. When using sample configuration, replace it with the name of the pre-created storage class. See Storage Classes for creating a storage class. spec.metad.replicas 1 The number of replicas for the Metad service. spec.metad.image vesoft/nebula-metad The container image for the Metad service. spec.metad.version master The version of the Metad service. spec.metad.dataVolumeClaim.storageClassName - Storage configuration for the data disk of the Metad service. When using sample configuration, replace it with the name of the pre-created storage class. See Storage Classes for creating a storage class. spec.metad.logVolumeClaim.storageClassName - Storage configuration for the log disk of the Metad service. When using sample configuration, replace it with the name of the pre-created storage class. See Storage Classes for creating a storage class. spec.storaged.replicas 3 The number of replicas for the Storaged service. spec.storaged.image vesoft/nebula-storaged The container image for the Storaged service. spec.storaged.version master The version of the Storaged service. spec.storaged.dataVolumeClaims.resources.requests.storage - The storage size for the data disk of the Storaged service. You can specify multiple data disks. When specifying multiple data disks, the paths are like /usr/local/nebula/data1, /usr/local/nebula/data2, and so on. spec.storaged.dataVolumeClaims.storageClassName - Storage configuration for the data disks of the Storaged service. When using sample configuration, replace it with the name of the pre-created storage class. See Storage Classes for creating a storage class. spec.storaged.logVolumeClaim.storageClassName - Storage configuration for the log disk of the Storaged service. When using sample configuration, replace it with the name of the pre-created storage class. See Storage Classes for creating a storage class. spec.<metad|storaged|graphd>.securityContext {} Defines the permission and access control for the cluster containers to control access and execution of container operations. For details, see SecurityContext. spec.agent {} Configuration for the Agent service used for backup and recovery, and log cleaning functions. If you don't customize this configuration, the default configuration is used. spec.reference.name {} The name of the controller it depends on. spec.schedulerName default-scheduler The name of the scheduler. spec.imagePullPolicy Always The image pull policy for NebulaGraph images. For more details on pull policies, please see Image pull policy. spec.logRotate {} Log rotation configuration. For details, see Managing Cluster Logs. spec.enablePVReclaim false Defines whether to automatically delete PVCs after deleting the cluster to release data. For details, see Reclaim PV. spec.metad.licenseManagerURL - Configures the URL pointing to the License Manager (LM), consisting of the access address and port (default port 9119). For example, 192.168.8.xxx:9119. For creating the NebulaGraph Enterprise Edition only. spec.storaged.enableAutoBalance false Whether to enable automatic balancing. For details, see Balancing Storage Data After Scaling Out. spec.enableBR false Defines whether to enable the BR tool. For details, see Backup and Restore. spec.imagePullSecrets [] Defines the Secret required to pull images from a private repository.
                3. Create the NebulaGraph cluster.

                  kubectl create -f nebulacluster.yaml -n nebula\n

                  Output:

                  nebulacluster.apps.nebula-graph.io/nebula created\n

                  If you don't specify the namespace using -n, it will default to the default namespace.

                4. Check the status of the NebulaGraph cluster.

                  kubectl get nebulaclusters nebula -n nebula\n

                  Output:

                  NAME      READY   GRAPHD-DESIRED   GRAPHD-READY   METAD-DESIRED   METAD-READY   STORAGED-DESIRED   STORAGED-READY   AGE\nnebula    True    1                1              1               1             1                  1                86s\n
                "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.1.cluster-install/#use_helm","title":"Use helm","text":"
                1. Add the NebulaGraph Operator Helm repository (if it's already added, run the next step directly).

                  helm repo add nebula-operator https://vesoft-inc.github.io/nebula-operator/charts\n
                2. Update the Helm repository to fetch the latest resources.

                  helm repo update nebula-operator\n
                3. Set environment variables for the configuration parameters required for installing the cluster.

                  export NEBULA_CLUSTER_NAME=nebula         # Name of the NebulaGraph cluster.\nexport NEBULA_CLUSTER_NAMESPACE=nebula    # Namespace for the NebulaGraph cluster.\nexport STORAGE_CLASS_NAME=local-sc       # StorageClass for the NebulaGraph cluster.\n
                4. Create a namespace for the NebulaGraph cluster if it is not created.

                  kubectl create namespace \"${NEBULA_CLUSTER_NAMESPACE}\"\n
                5. Check the customizable configuration parameters for the nebula-cluster Helm chart of the nebula-operator when creating the cluster.

                  • Visit nebula-cluster/values.yaml to see all the configuration parameters for the NebulaGraph cluster.
                  • Run the following command to view all the configurable parameters.

                    helm show values nebula-operator/nebula-cluster\n
                    Example to view all configurable parameters
                    nebula:\n  version: master\n  imagePullPolicy: Always\n  storageClassName: \"\"\n  enablePVReclaim: false\n  enableBR: false\n  enableForceUpdate: false\n  schedulerName: default-scheduler \n  topologySpreadConstraints:\n  - topologyKey: \"kubernetes.io/hostname\"\n    whenUnsatisfiable: \"ScheduleAnyway\"\n  logRotate: {}\n  reference:\n    name: statefulsets.apps\n    version: v1\n  graphd:\n    image: vesoft/nebula-graphd\n    replicas: 2\n    serviceType: NodePort\n    env: []\n    config: {}\n    resources:\n      requests:\n        cpu: \"500m\"\n        memory: \"500Mi\"\n      limits:\n        cpu: \"1\"\n        memory: \"500Mi\"\n    logVolume:\n      enable: true\n      storage: \"500Mi\"\n    podLabels: {}\n    podAnnotations: {}\n    securityContext: {}\n    nodeSelector: {}\n    tolerations: []\n    affinity: {}\n    readinessProbe: {}\n    livenessProbe: {}\n    initContainers: []\n    sidecarContainers: []\n    volumes: []\n    volumeMounts: []\n\n  metad:\n    image: vesoft/nebula-metad\n    replicas: 3\n    env: []\n    config: {}\n    resources:\n      requests:\n        cpu: \"500m\"\n        memory: \"500Mi\"\n      limits:\n        cpu: \"1\"\n        memory: \"1Gi\"\n    logVolume:\n      enable: true\n      storage: \"500Mi\"\n    dataVolume:\n      storage: \"2Gi\"\n    licenseManagerURL: \"\"\n    license: {}\n    podLabels: {}\n    podAnnotations: {}\n    securityContext: {}\n    nodeSelector: {}\n    tolerations: []\n    affinity: {}\n    readinessProbe: {}\n    livenessProbe: {}\n    initContainers: []\n    sidecarContainers: []\n    volumes: []\n    volumeMounts: []\n\n  storaged:\n    image: vesoft/nebula-storaged\n    replicas: 3\n    env: []\n    config: {}\n    resources:\n      requests:\n        cpu: \"500m\"\n        memory: \"500Mi\"\n      limits:\n        cpu: \"1\"\n        memory: \"1Gi\"\n    logVolume:\n      enable: true\n      storage: \"500Mi\"\n    dataVolumes:\n    - storage: \"10Gi\"\n    enableAutoBalance: false\n    podLabels: {}\n    podAnnotations: {}\n    securityContext: {}\n    nodeSelector: {}\n    tolerations: []\n    affinity: {}\n    readinessProbe: {}\n    livenessProbe: {}\n    initContainers: []\n    sidecarContainers: []\n    volumes: []\n    volumeMounts: []\n\n  exporter:\n    image: vesoft/nebula-stats-exporter\n    version: v3.3.0\n    replicas: 1\n    env: []\n    resources:\n      requests:\n        cpu: \"100m\"\n        memory: \"128Mi\"\n      limits:\n        cpu: \"200m\"\n        memory: \"256Mi\"\n    podLabels: {}\n    podAnnotations: {}\n    securityContext: {}\n    nodeSelector: {}\n    tolerations: []\n    affinity: {}\n    readinessProbe: {}\n    livenessProbe: {}\n    initContainers: []\n    sidecarContainers: []\n    volumes: []\n    volumeMounts: []\n    maxRequests: 20\n\n  agent:\n    image: vesoft/nebula-agent\n    version: latest\n    resources:\n      requests:\n        cpu: \"100m\"\n        memory: \"128Mi\"\n      limits:\n        cpu: \"200m\"\n        memory: \"256Mi\"\n\n  console:\n    username: root\n    password: nebula\n    image: vesoft/nebula-console\n    version: latest\n    nodeSelector: {}\n\n  alpineImage: \"\"\n\nimagePullSecrets: []\nnameOverride: \"\"\nfullnameOverride: \"\" \n
                    Expand to view parameter descriptions Parameter Default Value Description nebula.version master Version of the cluster. nebula.imagePullPolicy Always Container image pull policy. Always means always attempting to pull the latest image from the remote. nebula.storageClassName \"\" Name of the Kubernetes storage class for dynamic provisioning of persistent volumes. nebula.enablePVReclaim false Enable persistent volume reclaim. See Reclaim PV for details. nebula.enableBR false Enable the backup and restore feature. See Backup and Restore with NebulaGraph Operator for details. nebula.enableForceUpdate false Force update the Storage service without transferring the leader partition replicas. See Optimize leader transfer in rolling updates for details. nebula.schedulerName default-scheduler Name of the Kubernetes scheduler. Must be configured as nebula-scheduler when using the Zone feature. nebula.topologySpreadConstraints [] Control the distribution of pods in the cluster. nebula.logRotate {} Log rotation configuration. See Manage cluster logs for details. nebula.reference {\"name\": \"statefulsets.apps\", \"version\": \"v1\"} The workload referenced for a NebulaGraph cluster. nebula.graphd.image vesoft/nebula-graphd Container image for the Graph service. nebula.graphd.replicas 2 Number of replicas for the Graph service. nebula.graphd.serviceType NodePort Service type for the Graph service, defining how the Graph service is accessed. See Connect to the Cluster for details. nebula.graphd.env [] Container environment variables for the Graph service. nebula.graphd.config {} Configuration for the Graph service. See Customize the configuration of the NebulaGraph cluster for details. nebula.graphd.resources {\"resources\":{\"requests\":{\"cpu\":\"500m\",\"memory\":\"500Mi\"},\"limits\":{\"cpu\":\"1\",\"memory\":\"500Mi\"}}} Resource limits and requests for the Graph service. nebula.graphd.logVolume {\"logVolume\": {\"enable\": true,\"storage\": \"500Mi\"}} Log storage configuration for the Graph service. When enable is false, log volume is not used. nebula.metad.image vesoft/nebula-metad Container image for the Meta service. nebula.metad.replicas 3 Number of replicas for the Meta service. nebula.metad.env [] Container environment variables for the Meta service. nebula.metad.config {} Configuration for the Meta service. See Customize the configuration of the NebulaGraph cluster for details. nebula.metad.resources {\"resources\":{\"requests\":{\"cpu\":\"500m\",\"memory\":\"500Mi\"},\"limits\":{\"cpu\":\"1\",\"memory\":\"1Gi\"}}} Resource limits and requests for the Meta service. nebula.metad.logVolume {\"logVolume\": {\"enable\": true,\"storage\": \"500Mi\"}} Log storage configuration for the Meta service. When enable is false, log volume is not used. nebula.metad.dataVolume {\"dataVolume\": {\"storage\": \"2Gi\"}} Data storage configuration for the Meta service. nebula.metad.licenseManagerURL \"\" URL for the license manager (LM) to obtain license information. For creating the NebulaGraph Enterprise Edition only. nebula.storaged.image vesoft/nebula-storaged Container image for the Storage service. nebula.storaged.replicas 3 Number of replicas for the Storage service. nebula.storaged.env [] Container environment variables for the Storage service. nebula.storaged.config {} Configuration for the Storage service. See Customize the configuration of the NebulaGraph cluster for details. nebula.storaged.resources {\"resources\":{\"requests\":{\"cpu\":\"500m\",\"memory\":\"500Mi\"},\"limits\":{\"cpu\":\"1\",\"memory\":\"1Gi\"}}} Resource limits and requests for the Storage service. nebula.storaged.logVolume {\"logVolume\": {\"enable\": true,\"storage\": \"500Mi\"}} Log storage configuration for the Storage service. When enable is false, log volume is not used. nebula.storaged.dataVolumes {\"dataVolumes\": [{\"storage\": \"10Gi\"}]} Data storage configuration for the Storage service. Supports specifying multiple data volumes. nebula.storaged.enableAutoBalance false Enable automatic balancing. See Balance storage data after scaling out for details. nebula.exporter.image vesoft/nebula-stats-exporter Container image for the Exporter service. nebula.exporter.version v3.3.0 Version of the Exporter service. nebula.exporter.replicas 1 Number of replicas for the Exporter service. nebula.exporter.env [] Environment variables for the Exporter service. nebula.exporter.resources {\"resources\":{\"requests\":{\"cpu\":\"100m\",\"memory\":\"128Mi\"},\"limits\":{\"cpu\":\"200m\",\"memory\":\"256Mi\"}}} Resource limits and requests for the Exporter service. nebula.agent.image vesoft/nebula-agent Container image for the agent service. nebula.agent.version latest Version of the agent service. nebula.agent.resources {\"resources\":{\"requests\":{\"cpu\":\"100m\",\"memory\":\"128Mi\"},\"limits\":{\"cpu\":\"200m\",\"memory\":\"256Mi\"}}} Resource limits and requests for the agent service. nebula.console.username root Username for accessing the NebulaGraph Console client. See Connect to the cluster for details. nebula.console.password nebula Password for accessing the NebulaGraph Console client. nebula.console.image vesoft/nebula-console Container image for the NebulaGraph Console client. nebula.console.version latest Version of the NebulaGraph Console client. nebula.alpineImage \"\" Alpine Linux container image used to obtain zone information for nodes. imagePullSecrets [] Names of secrets to pull private images. nameOverride \"\" Cluster name. fullnameOverride \"\" Name of the released chart instance. nebula.<graphd|metad|storaged|exporter>.podLabels {} Additional labels to be added to the pod. nebula.<graphd|metad|storaged|exporter>.podAnnotations {} Additional annotations to be added to the pod. nebula.<graphd|metad|storaged|exporter>.securityContext {} Security context for setting pod-level security attributes, including user ID, group ID, Linux Capabilities, etc. nebula.<graphd|metad|storaged|exporter>.nodeSelector {} Label selectors for determining which nodes to run the pod on. nebula.<graphd|metad|storaged|exporter>.tolerations [] Tolerations allow a pod to be scheduled to nodes with specific taints. nebula.<graphd|metad|storaged|exporter>.affinity {} Affinity rules for the pod, including node affinity, pod affinity, and pod anti-affinity. nebula.<graphd|metad|storaged|exporter>.readinessProbe {} Probe to check if a container is ready to accept service requests. When the probe returns success, traffic can be routed to the container. nebula.<graphd|metad|storaged|exporter>.livenessProbe {} Probe to check if a container is still running. If the probe fails, Kubernetes will kill and restart the container. nebula.<graphd|metad|storaged|exporter>.initContainers [] Special containers that run before the main application container starts, typically used for setting up the environment or initializing data. nebula.<graphd|metad|storaged|exporter>.sidecarContainers [] Containers that run alongside the main application container, typically used for auxiliary tasks such as log processing, monitoring, etc. nebula.<graphd|metad|storaged|exporter>.volumes [] Storage volumes to be attached to the service pod. nebula.<graphd|metad|storaged|exporter>.volumeMounts [] Specifies where to mount the storage volume inside the container.
                6. Create the NebulaGraph cluster.

                  You can use the --set flag to customize the default values of the NebulaGraph cluster configuration. For example, --set nebula.storaged.replicas=3 sets the number of replicas for the Storage service to 3.

                  helm install \"${NEBULA_CLUSTER_NAME}\" nebula-operator/nebula-cluster \\ \n    # Specify the version of the cluster chart. If not specified, it will install the latest version by default.\n    # You can check all chart versions by running the command: helm search repo -l nebula-operator/nebula-cluster\n    --version=1.8.0 \\\n    # Specify the namespace for the NebulaGraph cluster.\n    --namespace=\"${NEBULA_CLUSTER_NAMESPACE}\" \\\n    # Customize the cluster name.\n    --set nameOverride=\"${NEBULA_CLUSTER_NAME}\" \\\n    --set nebula.storageClassName=\"${STORAGE_CLASS_NAME}\" \\\n    # Specify the version for the NebulaGraph cluster.\n    --set nebula.version=vmaster\n
                7. Check the status of NebulaGraph cluster pods.

                  kubectl -n \"${NEBULA_CLUSTER_NAMESPACE}\" get pod -l \"app.kubernetes.io/cluster=${NEBULA_CLUSTER_NAME}\"\n

                  Output:

                  NAME                               READY   STATUS    RESTARTS   AGE\nnebula-exporter-854c76989c-mp725   1/1     Running   0          14h\nnebula-graphd-0                    1/1     Running   0          14h\nnebula-graphd-1                    1/1     Running   0          14h\nnebula-metad-0                     1/1     Running   0          14h\nnebula-metad-1                     1/1     Running   0          14h\nnebula-metad-2                     1/1     Running   0          14h\nnebula-storaged-0                  1/1     Running   0          14h\nnebula-storaged-1                  1/1     Running   0          14h\nnebula-storaged-2                  1/1     Running   0          14h\n
                "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.2.cluster-upgrade/","title":"Upgrade NebulaGraph clusters created with NebulaGraph Operator","text":"

                This topic introduces how to upgrade a NebulaGraph cluster created with NebulaGraph Operator.

                Legacy version compatibility

                The 1.x version NebulaGraph Operator is not compatible with NebulaGraph of version below v3.x.

                "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.2.cluster-upgrade/#limits","title":"Limits","text":"
                • Only for upgrading the NebulaGraph clusters created with NebulaGraph Operator.
                • Only support upgrading the NebulaGraph version from 3.5.0 to 3.6.0.
                • For upgrading NebulaGraph Enterprise Edition clusters, contact us.
                "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.2.cluster-upgrade/#prerequisites","title":"Prerequisites","text":"

                You have created a NebulaGraph cluster. For details, see Create a NebulaGraph cluster.

                "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.2.cluster-upgrade/#upgrade_a_nebulagraph_cluster_with_kubectl","title":"Upgrade a NebulaGraph cluster with kubectl","text":"

                The following steps upgrade a NebulaGraph cluster from version 3.5.0 to master.

                1. Check the image version of the services in the cluster.

                  kubectl get pods -l app.kubernetes.io/cluster=nebula  -o jsonpath=\"{.items[*].spec.containers[*].image}\" |tr -s '[[:space:]]' '\\n' |sort |uniq -c\n

                  Output:

                        1 vesoft/nebula-graphd:3.5.0\n      1 vesoft/nebula-metad:3.5.0\n      3 vesoft/nebula-storaged:3.5.0  \n
                2. Edit the nebula cluster configuration to change the version value of the cluster services from 3.5.0 to master.

                  1. Open the YAML file for the nebula cluster.

                    kubectl edit nebulacluster nebula -n <namespace>\n
                  2. Change the value of version.

                    After making these changes, the YAML file should look like this:

                    apiVersion: apps.nebula-graph.io/v1alpha1\nkind: NebulaCluster\nmetadata:\n  name: nebula\nspec:\n  graphd:\n    version: master // Change the value from 3.5.0 to master.\n    ...\n  metad:\n    version: master // Change the value from 3.5.0 to master.\n    ...\n  storaged:\n    version: master // Change the value from 3.5.0 to master.\n    ...\n
                3. Apply the configuration.

                  After saving the YAML file and exiting, Kubernetes automatically updates the cluster's configuration and starts the cluster upgrade.

                4. After waiting for about 2 minutes, run the following command to see if the image versions of the services in the cluster have been changed to master.

                  kubectl get pods -l app.kubernetes.io/cluster=nebula  -o jsonpath=\"{.items[*].spec.containers[*].image}\" |tr -s '[[:space:]]' '\\n' |sort |uniq -c\n

                  Output:

                        1 vesoft/nebula-graphd:master\n      1 vesoft/nebula-metad:master\n      3 vesoft/nebula-storaged:master \n
                "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.2.cluster-upgrade/#upgrade_a_nebulagraph_cluster_with_helm","title":"Upgrade a NebulaGraph cluster with helm","text":"
                1. Update the information of available charts locally from chart repositories.

                  helm repo update\n
                2. Set environment variables to your desired values.

                  export NEBULA_CLUSTER_NAME=nebula         # The desired NebulaGraph cluster name.\nexport NEBULA_CLUSTER_NAMESPACE=nebula    # The desired namespace where your NebulaGraph cluster locates.\n
                3. Upgrade a NebulaGraph cluster.

                  For example, upgrade a cluster to master.

                  helm upgrade \"${NEBULA_CLUSTER_NAME}\" nebula-operator/nebula-cluster \\\n    --namespace=\"${NEBULA_CLUSTER_NAMESPACE}\" \\\n    --set nameOverride=${NEBULA_CLUSTER_NAME} \\\n    --set nebula.version=master\n

                  The value of --set nebula.version specifies the version of the cluster you want to upgrade to.

                4. Run the following command to check the status and version of the upgraded cluster.

                  Check cluster status:

                  $ kubectl -n \"${NEBULA_CLUSTER_NAMESPACE}\" get pod -l \"app.kubernetes.io/cluster=${NEBULA_CLUSTER_NAME}\"\nNAME                READY   STATUS    RESTARTS   AGE\nnebula-graphd-0     1/1     Running   0          2m\nnebula-graphd-1     1/1     Running   0          2m\nnebula-metad-0      1/1     Running   0          2m\nnebula-metad-1      1/1     Running   0          2m\nnebula-metad-2      1/1     Running   0          2m\nnebula-storaged-0   1/1     Running   0          2m\nnebula-storaged-1   1/1     Running   0          2m\nnebula-storaged-2   1/1     Running   0          2m\n

                  Check cluster version:

                  $ kubectl get pods -l app.kubernetes.io/cluster=nebula  -o jsonpath=\"{.items[*].spec.containers[*].image}\" |tr -s '[[:space:]]' '\\n' |sort |uniq -c\n      1 vesoft/nebula-graphd:master\n      1 vesoft/nebula-metad:master\n      3 vesoft/nebula-storaged:master\n
                "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.2.cluster-upgrade/#accelerate_the_upgrade_process","title":"Accelerate the upgrade process","text":"

                The upgrade process of a cluster is a rolling update process and can be time-consuming due to the state transition of the leader partition replicas in the Storage service. You can configure the enableForceUpdate field in the cluster instance's YAML file to skip the leader partition replica transfer operation, thereby accelerating the upgrade process. For more information, see Specify a rolling update strategy.

                "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.2.cluster-upgrade/#troubleshooting","title":"Troubleshooting","text":"

                If you encounter issues during the upgrade process, you can check the logs of the cluster service pods.

                kubectl logs <pod-name> -n <namespace>\n

                Additionally, you can inspect the cluster's status and events.

                kubectl describe nebulaclusters <cluster-name> -n <namespace>\n
                "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.3.cluster-uninstall/","title":"Delete a NebulaGraph cluster","text":"

                This topic explains how to delete a NebulaGraph cluster created using NebulaGraph Operator.

                "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.3.cluster-uninstall/#usage_limitations","title":"Usage limitations","text":"
                • Deletion is only supported for NebulaGraph clusters created with the NebulaGraph Operator.
                • You cannot delete a NebulaGraph cluster that has deletion protection enabled. For more information, see Configure deletion protection.
                "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.3.cluster-uninstall/#delete_a_nebulagraph_cluster_using_kubectl","title":"Delete a NebulaGraph cluster using kubectl","text":"
                1. View all created clusters.

                  kubectl get nc --all-namespaces\n

                  Example output:

                  NAMESPACE   NAME      READY   GRAPHD-DESIRED   GRAPHD-READY   METAD-DESIRED   METAD-READY   STORAGED-DESIRED   STORAGED-READY   AGE\ndefault     nebula    True    2                2              3               3             3                  3                38h\nnebula      nebula2   True    1                1              1               1             1                  1                2m7s\n
                2. Delete a cluster. For example, run the following command to delete a cluster named nebula2:

                  kubectl delete nc nebula2 -n nebula\n

                  Example output:

                  nebulacluster.nebula-graph.io \"nebula2\" deleted\n
                3. Confirm the deletion.

                  kubectl get nc nebula2 -n nebula\n

                  Example output:

                  No resources found in nebula namespace.\n
                "},{"location":"k8s-operator/4.cluster-administration/4.1.installation/4.1.3.cluster-uninstall/#delete_a_nebulagraph_cluster_using_helm","title":"Delete a NebulaGraph cluster using helm","text":"
                1. View all Helm releases.

                  helm list --all-namespaces\n

                  Example output:

                  NAME              NAMESPACE               REVISION    UPDATED                                 STATUS      CHART                   APP VERSION\nnebula            default                 1           2023-11-06 20:16:07.913136377 +0800 CST deployed    nebula-cluster-1.7.1    1.7.1\nnebula-operator   nebula-operator-system  3           2023-11-06 12:06:24.742397418 +0800 CST deployed    nebula-operator-1.7.1   1.7.1\n
                2. View detailed information about a Helm release. For example, to view the cluster information for a Helm release named nebula:

                  helm get values nebula -n default\n

                  Example output:

                  USER-SUPPLIED VALUES:\nimagePullSecrets:\n- name: secret_for_pull_image\nnameOverride: nebula # The cluster name\nnebula:\n  graphd:\n    image: reg.vesoft-inc.com/xx\n  metad:\n    image: reg.vesoft-inc.com/xx\n    licenseManagerURL: xxx:9119\n  storageClassName: local-sc\n  storaged:\n    image: reg.vesoft-inc.com/xx\n  version: v1.8.0 # The cluster version\n
                3. Uninstall a Helm release. For example, to uninstall a Helm release named nebula:

                  helm uninstall nebula -n default\n

                  Example output:

                  release \"nebula\" uninstalled\n

                  Once the Helm release is uninstalled, NebulaGraph Operator will automatically remove all K8s resources associated with that release.

                4. Verify that the cluster resources are removed.

                  kubectl get nc nebula -n default\n

                  Example output:

                  No resources found in default namespace.\n
                "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.1.use-local-pv/","title":"Use Local Persistent Volumes in a NebulaGraph cluster","text":"

                Local Persistent Volumes, abbreviated as Local PVs in K8s store container data directly using the node's local disk directory. Compared with network storage, Local Persistent Volumes provide higher IOPS and lower read and write latency, which is suitable for data-intensive applications. This topic introduces how to use Local PVs in Google Kubernetes Engine (GKE) and Amazon Elastic Kubernetes Service (EKS) clusters, and how to enable automatic failover for Local PVs in the cloud.

                While using Local Persistent Volumes can enhance performance, it's essential to note that, unlike network storage, local storage does not support automatic backup. In the event of a node failure, all data in local storage may be lost. Therefore, the utilization of Local Persistent Volumes involves a trade-off between service availability, data persistence, and flexibility.

                "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.1.use-local-pv/#principles","title":"Principles","text":"

                NebulaGraph Operator implements a Storage Volume Provisioner interface to automatically create and delete PV objects. Utilizing the provisioner, you can dynamically generate Local PVs as required. Based on the PVC and StorageClass specified in the cluster configuration file, NebulaGraph Operator automatically generates PVCs and associates them with their respective Local PVs.

                When a Local PV is initiated by the provisioner interface, the provisioner controller generates a local type PV and configures the nodeAffinity field. This configuration ensures that Pods using the local type PV are scheduled onto specific nodes. Conversely, when a Local PV is deleted, the provisioner controller eliminates the local type PV object and purges the node's storage resources.

                "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.1.use-local-pv/#prerequisites","title":"Prerequisites","text":"

                NebulaGraph Operator is installed. For details, see Install NebulaGraph Operator.

                "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.1.use-local-pv/#steps","title":"Steps","text":"

                The resources in the following examples are all created in the default namespace.

                Use Local PV on GKEUse Local PV on EKS
                1. Create a node pool with local SSDs if not existing

                  gcloud container node-pools create \"pool-1\" --cluster \"gke-1\" --region us-central1 --node-version \"1.27.10-gke.1055000\" --machine-type \"n2-standard-2\" --local-nvme-ssd-block count=2 --max-surge-upgrade 1 --max-unavailable-upgrade 0 --num-nodes 1 --enable-autoscaling --min-nodes 1 --max-nodes 2\n

                  For information about the parameters to create a node pool with local SSDs, see Create a node pool with Local SSD.

                2. Format and mount the local SSDs using a DaemonSet.

                  1. Download the gke-daemonset-raid-disks.yaml file.

                  2. Deploy the RAID disks DaemonSet. The DaemonSet sets a RAID 0 array on all Local SSD disks and formats the device to an ext4 filesystem.

                    kubectl apply -f gke-daemonset-raid-disks.yaml\n

                3. Deploy the Local PV provisioner.

                  1. Download the local-pv-provisioner.yaml file.
                  2. Run the provisioner.
                    kubectl apply -f local-pv-provisioner.yaml\n
                4. In the NebulaGraph cluster configuration file, specify spec.storaged.dataVolumeClaims or spec.metad.dataVolumeClaim, and the StorageClass needs to be configured as local-nvme. For more information about cluster configurations, see Create a NebulaGraph cluster.

                  Partial configuration of the NebulaGraph cluster
                  ...\nmetad: \n  dataVolumeClaim:\n    resources:\n      requests:\n        storage: 2Gi\n    storageClassName: local-nvme\nstoraged:\n  dataVolumeClaims:\n  - resources:\n      requests:\n        storage: 2Gi\n    storageClassName: local-nvme  \n...\n

                  After the NebulaGraph is deployed, the Local PVs are automatically created.

                5. View the PV list.

                  kubectl get pv\n

                  Return:

                  NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                     STORAGECLASS   REASON   AGE\npvc-01be9b75-9c50-4532-8695-08e11b489718   5Gi        RWO            Delete           Bound    default/storaged-data-nebula-storaged-0   local-nvme              3m35s\npvc-09de8eb1-1225-4025-b91b-fbc0bcce670f   5Gi        RWO            Delete           Bound    default/storaged-data-nebula-storaged-1   local-nvme              3m35s\npvc-4b2a9ffb-9000-4998-a7bb-edb825c872cb   5Gi        RWO            Delete           Bound    default/storaged-data-nebula-storaged-2   local-nvme              3m35s\n...\n
                6. View the detailed information of the PV.

                  kubectl get pv pvc-01be9b75-9c50-4532-8695-08e11b489718 -o yaml\n

                  Return:

                  apiVersion: v1\nkind: PersistentVolume\nmetadata:\n  annotations:\n    local.pv.provisioner/selected-node: gke-snap-test-snap-test-591403a8-xdfc\n    nebula-graph.io/pod-name: nebula-storaged-0\n    pv.kubernetes.io/provisioned-by: nebula-cloud.io/local-pv\n  creationTimestamp: \"2024-03-05T06:12:32Z\"\n  finalizers:\n  - kubernetes.io/pv-protection\n  labels:\n    app.kubernetes.io/cluster: nebula\n    app.kubernetes.io/component: storaged\n    app.kubernetes.io/managed-by: nebula-operator\n    app.kubernetes.io/name: nebula-graph\n  name: pvc-01be9b75-9c50-4532-8695-08e11b489718\n  resourceVersion: \"9999469\"\n  uid: ee28a4da-6026-49ac-819b-2075154b4724\nspec:\n  accessModes:\n  - ReadWriteOnce\n  capacity:\n    storage: 5Gi\n  claimRef:\n    apiVersion: v1\n    kind: PersistentVolumeClaim\n    name: storaged-data-nebula-storaged-0\n    namespace: default\n    resourceVersion: \"9996541\"\n    uid: 01be9b75-9c50-4532-8695-08e11b489718\n  local:\n    fsType: ext4\n    path: /mnt/disks/raid0\n  nodeAffinity:\n    required:\n      nodeSelectorTerms:\n      - matchExpressions:\n        - key: kubernetes.io/hostname\n          operator: In\n          values:\n          - gke-snap-test-snap-test-591403a8-xdfc\n  persistentVolumeReclaimPolicy: Delete\n  storageClassName: local-nvme\n  volumeMode: Filesystem\nstatus:\n  phase: Bound    \n
                1. Create a node pool with Instance Store if not existing.

                  eksctl create nodegroup  --instance-types m5ad.2xlarge  --nodes 3  --cluster eks-1\n

                  For more information about parameters to cluster node pools, see Creating a managed node group.

                2. Format and mount the local SSDs using a DaemonSet.

                  1. Download the eks-daemonset-raid-disks.yaml file.

                  2. Based on the node type created in step 1, modify the value of the nodeSelector.node.kubernetes.io/instance-type field in the eks-daemonset-raid-disks.yaml file as needed.

                        spec:\n      nodeSelector:\n        node.kubernetes.io/instance-type: \"m5ad.2xlarge\"\n

                  3. Install nvme-cli.

                    • For Ubuntu and Debian systems
                      sudo apt-get update\nsudo apt-get install -y nvme-cli\n
                    • For CentOS and RHEL systems
                      sudo yum install -y nvme-cli\n
                  4. Deploy the RAID disk DaemonSet. The DaemonSet sets up a RAID 0 array on all local SSD disks and formats the devices as an ext4 file system.

                    kubectl apply -f gke-daemonset-raid-disks.yaml\n

                3. Deploy the Local PV provisioner.

                  1. Download the local-pv-provisioner.yaml file.
                  2. Run the provisioner.
                    kubectl apply -f local-pv-provisioner.yaml\n
                4. In the NebulaGraph cluster configuration file, specify spec.storaged.dataVolumeClaims or spec.metad.dataVolumeClaim, and the StorageClass needs to be configured as local-nvme. For more information about cluster configurations, see Create a NebulaGraph cluster.

                  Partial configuration of the NebulaGraph cluster
                  metad:\n  dataVolumeClaim:\n    resources:\n      requests:\n        storage: 2Gi\n    storageClassName: local-nvme\nstoraged:\n  dataVolumeClaims:\n  - resources:\n      requests:\n        storage: 2Gi\n    storageClassName: local-nvme  \n
                5. View the PV list.

                  kubectl get pv\n

                  Return:

                  NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                     STORAGECLASS   REASON   AGE\npvc-290c15cc-a302-4463-a591-84b7217a6cd2   5Gi        RWO            Delete           Bound    default/storaged-data-nebula-storaged-0   local-nvme              3m40s\npvc-fbb3167f-f556-4a16-ae0e-171aed0ac954   5Gi        RWO            Delete           Bound    default/storaged-data-nebula-storaged-1   local-nvme              3m40s\npvc-6c7cfe80-0134-4573-b93e-9b259c6fcd63   5Gi        RWO            Delete           Bound    default/storaged-data-nebula-storaged-2   local-nvme              3m40s\n...\n
                6. View the detailed information of the PV.

                  kubectl get pv pvc-290c15cc-a302-4463-a591-84b7217a6cd2 -o yaml\n

                  Return:

                  apiVersion: v1\nkind: PersistentVolume\nmetadata:\n  annotations:\n    local.pv.provisioner/selected-node: ip-192-168-77-60.ec2.internal\n    nebula-graph.io/pod-name: nebula-storaged-0\n    pv.kubernetes.io/provisioned-by: nebula-cloud.io/local-pv\n  creationTimestamp: \"2024-03-04T07:51:32Z\"\n  finalizers:\n  - kubernetes.io/pv-protection\n  labels:\n    app.kubernetes.io/cluster: nebula\n    app.kubernetes.io/component: storaged\n    app.kubernetes.io/managed-by: nebula-operator\n    app.kubernetes.io/name: nebula-graph\n  name: pvc-290c15cc-a302-4463-a591-84b7217a6cd2\n  resourceVersion: \"7932689\"\n  uid: 66c0a2d3-2914-43ad-93b5-6d84fb62acef\nspec:\n  accessModes:\n  - ReadWriteOnce\n  capacity:\n    storage: 5Gi\n  claimRef:\n    apiVersion: v1\n    kind: PersistentVolumeClaim\n    name: storaged-data-nebula-storaged-0\n    namespace: default\n    resourceVersion: \"7932688\"\n    uid: 8ecb5d96-004b-4672-bac4-1355ae15eae4\n  local:\n    fsType: ext4\n    path: /mnt/disks/raid0\n  nodeAffinity:\n    required:\n      nodeSelectorTerms:\n      - matchExpressions:\n        - key: kubernetes.io/hostname\n          operator: In\n          values:\n          - ip-192-168-77-60.ec2.internal\n  persistentVolumeReclaimPolicy: Delete\n  storageClassName: local-nvme\n  volumeMode: Filesystem\nstatus:\n  phase: Bound    \n
                "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.1.use-local-pv/#failover_for_local_persistent_volumes_in_the_cloud","title":"Failover for Local Persistent Volumes in the cloud","text":"

                When using network storage (e.g., AWS EBS, Google Cloud Persistent Disk, Azure Disk Storage, Ceph, NFS, etc.) as a PV, the storage resource is independent of any particular node. Therefore, the storage resource can be mounted and used by Pods regardless of the node to which the Pods are scheduled. However, when using a local storage disk as a PV, the storage resource can only be used by Pods on a specific node due to nodeAffinity.

                The Storage service of NebulaGraph supports data redundancy, which allows you to set multiple odd-numbered partition replicas. When a node fails, the associated partition is automatically transferred to a healthy node. However, Storage Pods using Local Persistent Volumes cannot run on other nodes due to the node affinity setting and must wait for the node to recover. To run on another node, the Pods must be unbound from the associated Local Persistent Volume.

                NebulaGraph Operator supports automatic failover in the event of a node failure while using Local Persistent Volumes in the cloud for elastic scaling. This is achieved by setting spec.enableAutoFailover to true in the cluster configuration file, which automatically unbinds the Pods from the Local Persistent Volume, allowing the Pods to run on another node.

                Example configuration:

                ...\nspec:\n  # Enable automatic failover for Local PV.\n  enableAutoFailover: true\n  # The time to wait for the Storage service to be in the `OFFLINE` status\n  # before automatic failover. \n  # The default value is 5 minutes.\n  # If the Storage service recovers to the `ONLINE` status during this period,\n  # failover will not be triggered.\n  failoverPeriod: \"2m\"\n  ...\n
                "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.2.pv-expansion/","title":"Dynamically expand persistent volumes","text":"

                In a Kubernetes environment, NebulaGraph's data is stored on Persistent Volumes (PVs). Dynamic volume expansion refers to increasing the capacity of a volume without stopping the service, enabling NebulaGraph to accommodate growing data. This topic explains how to dynamically expand the PV for NebulaGraph services in a Kubernetes environment.

                Note

                • After the cluster is created, you cannot dynamically increase the number of PVs while the cluster is running.
                • The method described in this topic is only for online volume expansion and does not support volume reduction.
                "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.2.pv-expansion/#background","title":"Background","text":"

                In Kubernetes, a StorageClass is a resource that defines a particular storage type. It describes a class of storage, including its provisioner, parameters, and other details. When creating a PersistentVolumeClaim (PVC) and specifying a StorageClass, Kubernetes automatically creates a corresponding PV. The principle of dynamic volume expansion is to edit the PVC and increase the volume's capacity. Kubernetes will then automatically expand the capacity of the PV associated with this PVC based on the specified storageClassName in the PVC. During this process, new PVs are not created; the size of the existing PV is changed. Only dynamic storage volumes, typically those associated with a storageClassName, support dynamic volume expansion. Additionally, the allowVolumeExpansion field in the StorageClass must be set to true. For more details, see the Kubernetes documentation on expanding Persistent Volume Claims.

                In NebulaGraph Operator, you cannot directly edit PVC because Operator automatically creates PVC based on the configuration in the spec.<metad|storaged>.dataVolumeClaim of the Nebula Graph cluster. Therefore, you need to modify the cluster's configuration to update the PVC and trigger dynamic online volume expansion for the PV.

                "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.2.pv-expansion/#prerequisites","title":"Prerequisites","text":"
                • Kubernetes version is equal to or greater than 1.18.
                • A StorageClass has been created in the Kubernetes environment. For details, see Expanding Persistent Volumes Claims.
                  • Ensure the allowVolumeExpansion field in the StorageClass is set to true.
                  • Make sure that the provisioner configured in the StorageClass supports dynamic expansion.
                • A NebulaGraph cluster is created in Kubernetes. For specific steps, see Create a NebulaGraph cluster.
                • NebulaGraph cluster Pods are in running status.
                "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.2.pv-expansion/#online_volume_expansion_example","title":"Online volume expansion example","text":"

                In the following example, we assume that the StorageClass is named ebs-sc and the NebulaGraph cluster is named nebula. We will demonstrate how to dynamically expand the PV for the Storage service.

                1. Check the status of the Storage service Pod:

                  kubectl get pod\n

                  Example output:

                  nebula-storaged-0                                                1/1     Running   0                43h\n
                2. Check the PVC and PV information for the Storage service:

                  # View PVC \nkubectl get pvc\n

                  Example output:

                  storaged-data-nebula-storaged-0   Bound    pvc-36ca3871-9265-460f-b812-7e73a718xxxx   5Gi        RWO            ebs-sc     43h\n
                  # View PV and confirm that the capacity of the PV is 5Gi\nkubectl get pv\n

                  Example output:

                  pvc-36ca3871-9265-460f-b812-xxx   5Gi        RWO            Delete           Bound       default/storaged-data-nebula-storaged-0   ebs-sc              43h\n
                3. Assuming all the above-mentioned prerequisites are met, use the following command to request an expansion of the PV for the Storage service to 10Gi:

                  kubectl patch nc nebula --type='merge' --patch '{\"spec\": {\"storaged\": {\"dataVolumeClaims\":[{\"resources\": {\"requests\": {\"storage\": \"10Gi\"}}, \"storageClassName\": \"ebs-sc\"}]}}}'\n

                  Example output:

                  nebulacluster.apps.nebula-graph.io/nebula patched\n
                4. After waiting for about a minute, check the expanded PVC and PV information:

                  kubectl get pvc\n

                  Example output:

                  storaged-data-nebula-storaged-0   Bound    pvc-36ca3871-9265-460f-b812-7e73a718xxxx   10Gi        RWO            ebs-sc     43h\n
                  kubectl get pv\n

                  Example output:

                  pvc-36ca3871-9265-460f-b812-xxx   10Gi        RWO            Delete           Bound       default/storaged-data-nebula-storaged-0   ebs-sc              43h\n

                  As you can see, both the PVC and PV capacity have been expanded to 10Gi.

                "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.3.configure-pv-reclaim/","title":"Reclaim PVs","text":"

                NebulaGraph Operator uses PVs (Persistent Volumes) and PVCs (Persistent Volume Claims) to store persistent data. If you accidentally deletes a NebulaGraph cluster, by default, PV and PVC objects and the relevant data will be retained to ensure data security.

                You can also define the automatic deletion of PVCs to release data by setting the parameter spec.enablePVReclaim to true in the configuration file of the cluster instance. As for whether PV will be deleted automatically after PVC is deleted, you need to customize the PV reclaim policy. See reclaimPolicy in StorageClass and PV Reclaiming for details.

                "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.3.configure-pv-reclaim/#prerequisites","title":"Prerequisites","text":"

                A NebulaGraph cluster is created in Kubernetes. For specific steps, see Create a NebulaGraph cluster.

                "},{"location":"k8s-operator/4.cluster-administration/4.4.storage-management/4.4.3.configure-pv-reclaim/#steps","title":"Steps","text":"

                The following example uses a cluster named nebula and the cluster's configuration file named nebula_cluster.yaml to show how to set enablePVReclaim:

                1. Run the following command to edit the nebula cluster's configuration file.

                  kubectl edit nebulaclusters.apps.nebula-graph.io nebula\n
                2. Add enablePVReclaim and set its value to true under spec.

                  apiVersion: apps.nebula-graph.io/v1alpha1\nkind: NebulaCluster\nmetadata:\n  name: nebula\nspec:\n  enablePVReclaim: true  //Set its value to true.\n  graphd:\n    image: vesoft/nebula-graphd\n    logVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      storageClassName: fast-disks\n    replicas: 1\n    resources:\n      limits:\n        cpu: \"1\"\n        memory: 1Gi\n      requests:\n        cpu: 500m\n        memory: 500Mi\n    version: master\n  imagePullPolicy: IfNotPresent\n  metad:\n    dataVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      storageClassName: fast-disks\n    image: vesoft/nebula-metad\n    logVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      storageClassName: fast-disks\n    replicas: 1\n    resources:\n      limits:\n        cpu: \"1\"\n        memory: 1Gi\n      requests:\n        cpu: 500m\n        memory: 500Mi\n    version: master\n  nodeSelector:\n    nebula: cloud\n  reference:\n    name: statefulsets.apps\n    version: v1\n  schedulerName: default-scheduler\n  storaged:\n    dataVolumeClaims:\n    - resources:\n        requests:\n          storage: 2Gi\n      storageClassName: fast-disks\n    - resources:\n        requests:\n          storage: 2Gi\n      storageClassName: fast-disks\n    image: vesoft/nebula-storaged\n    logVolumeClaim:\n      resources:\n        requests:\n          storage: 2Gi\n      storageClassName: fast-disks\n    replicas: 3\n    resources:\n      limits:\n        cpu: \"1\"\n        memory: 1Gi\n      requests:\n        cpu: 500m\n        memory: 500Mi\n    version: master\n...    \n
                3. Run kubectl apply -f nebula_cluster.yaml to push your configuration changes to the cluster.

                After setting enablePVReclaim to true, the PVCs of the cluster will be deleted automatically after the cluster is deleted. If you want to delete the PVs, you need to set the reclaim policy of the PVs to Delete.

                "},{"location":"k8s-operator/4.cluster-administration/4.7.security/4.7.2.enable-admission-control/","title":"Enable admission control","text":"

                Kubernetes Admission Control is a security mechanism running as a webhook at runtime. It intercepts and modifies requests to ensure the cluster's security. Admission webhooks involve two main operations: validation and mutation. NebulaGraph Operator supports only validation operations and provides some default admission control rules. This topic describes NebulaGraph Operator's default admission control rules and how to enable admission control.

                "},{"location":"k8s-operator/4.cluster-administration/4.7.security/4.7.2.enable-admission-control/#prerequisites","title":"Prerequisites","text":"

                A NebulaGraph cluster is created with NebulaGrpah Operator. For detailed steps, see Create a NebulaGraph cluster.

                "},{"location":"k8s-operator/4.cluster-administration/4.7.security/4.7.2.enable-admission-control/#admission_control_rules","title":"Admission control rules","text":"

                Kubernetes admission control allows you to insert custom logic or policies before Kubernetes API Server processes requests. This mechanism can be used to implement various security policies, such as restricting a Pod's resource consumption or limiting its access permissions. NebulaGraph Operator supports validation operations, which means it validates and intercepts requests without making changes.

                After admission control is enabled, NebulaGraph Operator implements the following admission validation control rules by default. You cannot disable these rules:

                • Forbid adding additional PVs to Storage service via dataVolumeClaims.
                • Forbid shrinking the capacity of all service's PVCs, but allow expansion.
                • Forbid any secondary operation during Storage service scale-in/scale-out.

                After admission control is enabled, NebulaGraph Operator allows you to add annotations to implement the following admission validation control rules:

                • Clusters with the ha-mode annotation must have the minimum number of replicas as required by high availability mode:

                  • For Graph service: At least 2 replicas are required.
                  • For Meta service: At least 3 replicas are required.
                  • For Storage service: At least 3 replicas are required.

                  Note

                  High availability mode refers to the high availability of NebulaGraph cluster services. Storage and Meta services are stateful, and the number of replicas should be an odd number due to Raft protocol requirements for data consistency. In high availability mode, at least 3 Storage services and 3 Meta services are required. Graph services are stateless, so their number of replicas can be even but should be at least 2.

                • Clusters with the delete-protection annotation cannot be deleted. For more information, see Configure deletion protection.
                "},{"location":"k8s-operator/4.cluster-administration/4.7.security/4.7.2.enable-admission-control/#tls_certificates_for_admission_webhooks","title":"TLS certificates for admission webhooks","text":"

                To ensure secure communication and data integrity between the K8s API server and the admission webhook, this communication is done over HTTPS by default. This means that TLS certificates are required for the admission webhook. cert-manager is a Kubernetes certificate management controller that automates the issuance and renewal of certificates. NebulaGraph Operator uses cert-manager to manage certificates.

                Once cert-manager is installed and admission control is enabled, NebulaGraph Operator will automatically create an Issuer for issuing the necessary certificate for the admission webhook, and a Certificate for storing the issued certificate. The issued certificate is stored in the nebula-operator-webhook-secret Secret.

                "},{"location":"k8s-operator/4.cluster-administration/4.7.security/4.7.2.enable-admission-control/#steps_of_enabling_admission_control","title":"Steps of enabling admission control","text":"
                1. Install cert-manager.

                  kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.1/cert-manager.yaml\n

                  It is suggested to deploy the latest version of cert-manager. For details, see the official cert-manager documentation.

                2. Modify the NebulaGraph Operator configuration file to enable admission control. Admission control is disabled by default and needs to be enabled manually.

                  # Check the current configuration\nhelm show values nebula-operator/nebula-operator\n
                  # Modify the configuration by setting `enableAdmissionWebhook` to `true`.\nhelm upgrade nebula-operator nebula-operator/nebula-operator --set enableAdmissionWebhook=true\n

                  Note

                  nebula-operator is the name of the chart repository, and nebula-operator/nebula-operator is the chart name. If the chart's namespace is not specified, it defaults to default.

                3. View the certificate Secret for the admission webhook.

                  kubectl get secret nebula-operator-webhook-secret -o yaml\n

                  If the output includes certificate contents, it means that the admission webhook's certificate has been successfully created.

                4. Verify the control rules.

                  • Verify preventing additional PVs from being added to Storage service.

                    $ kubectl patch nc nebula --type='merge' --patch '{\"spec\": {\"storaged\": {\"dataVolumeClaims\":[{\"resources\": {\"requests\": {\"storage\": \"2Gi\"}}, \"storageClassName\": \"local-path\"},{\"resources\": {\"requests\": {\"storage\": \"3Gi\"}}, \"storageClassName\": \"fask-disks\"}]}}}'\nError from server: admission webhook \"nebulaclustervalidating.nebula-graph.io\" deniedthe request: spec.storaged.dataVolumeClaims: Forbidden: storaged dataVolumeClaims is immutable\n
                  • Verify disallowing shrinking Storage service's PVC capacity.

                    $ kubectl patch nc nebula --type='merge' --patch '{\"spec\": {\"storaged\": {\"dataVolumeClaims\":[{\"resources\": {\"requests\": {\"storage\": \"1Gi\"}}, \"storageClassName\": \"fast-disks\"}]}}}'\nError from server: admission webhook \"nebulaclustervalidating.nebula-graph.io\" denied the request: spec.storaged.dataVolumeClaims: Invalid value: resource.Quantity{i:resource.int64Amount{value:1073741824, scale:0}, d:resource.infDecAmount{Dec:(*inf.Dec)(nil)}, s:\"1Gi\", Format:\"BinarySI\"}: data volume size can only be increased\n
                  • Verify disallowing any secondary operation during Storage service scale-in.

                    $ kubectl patch nc nebula --type='merge' --patch '{\"spec\": {\"storaged\": {\"replicas\": 5}}}'\nnebulacluster.apps.nebula-graph.io/nebula patched\n$ kubectl patch nc nebula --type='merge' --patch '{\"spec\": {\"storaged\": {\"replicas\": 3}}}'\nError from server: admission webhook \"nebulaclustervalidating.nebula-graph.io\" denied the request: [spec.storaged: Forbidden: field is immutable while in ScaleOut phase, spec.storaged.replicas: Invalid value: 3: field is immutable while not in Running phase]\n
                  • Verify the minimum number of replicas in high availability mode.

                    # Annotate the cluster to enable high availability mode.\n$ kubectl annotate nc nebula nebula-graph.io/ha-mode=true\n# Verify the minimum number of the Graph service's replicas.\n$ kubectl patch nc nebula --type='merge' --patch '{\"spec\": {\"graphd\": {\"replicas\":1}}}'\nError from server: admission webhook \"nebulaclustervalidating.nebula-graph.io\" denied the request: spec.graphd.replicas: Invalid value: 1: should be at least 2 in HA mode\n
                  • Verify deletion protection. For more information, see Configure deletion protection.
                "},{"location":"k8s-operator/4.cluster-administration/4.7.security/4.7.3.config-deletion-protection/","title":"Configure deletion protection","text":"

                NebulaGraph Operator supports deletion protection to prevent NebulaGraph clusters from being deleted by accident. This topic describes how to configure deletion protection for a NebulaGraph cluster.

                "},{"location":"k8s-operator/4.cluster-administration/4.7.security/4.7.3.config-deletion-protection/#prerequisites","title":"Prerequisites","text":"
                • A NebulaGraph cluster is created with NebulaGrpah Operator. For more information, see Create a NebulaGraph cluster.
                • Admission control is enabled on the NebulaGraph cluster. For more information, see Enable admission control.
                "},{"location":"k8s-operator/4.cluster-administration/4.7.security/4.7.3.config-deletion-protection/#add_an_annotation_to_enable_deletion_protection","title":"Add an annotation to enable deletion protection","text":"

                Add the delete-protection annotation to the cluster.

                kubectl annotate nc nebula -n nebula-test nebula-graph.io/delete-protection=true\n
                The preceding command enables deletion protection for the nebula cluster in the nebula-test namespace.

                "},{"location":"k8s-operator/4.cluster-administration/4.7.security/4.7.3.config-deletion-protection/#verify_deletion_protection","title":"Verify deletion protection","text":"

                To verify that deletion protection is enabled, run the following command:

                kubectl delete nc nebula -n nebula-test\n

                The preceding command attempts to delete the nebula cluster in the nebula-test namespace.

                Return:

                Error from server: admission webhook \"nebulaclustervalidating.nebula-graph.io\" denied the request: metadata.annotations[nebula-graph.io/delete-protection]: Forbidden: protected cluster cannot be deleted\n
                "},{"location":"k8s-operator/4.cluster-administration/4.7.security/4.7.3.config-deletion-protection/#remove_the_annotation_to_disable_deletion_protection","title":"Remove the annotation to disable deletion protection","text":"

                Remove the delete-protection annotation from the cluster as follows:

                kubectl annotate nc nebula -n nebula-test nebula-graph.io/delete-protection-\n

                The preceding command disables deletion protection for the nebula cluster in the nebula-test namespace.

                "},{"location":"k8s-operator/4.cluster-administration/4.8.ha-and-balancing/4.8.1.self-healing/","title":"Self-healing","text":"

                NebulaGraph Operator calls the interface provided by NebulaGraph clusters to dynamically sense cluster service status. Once an exception is detected (for example, a component in a NebulaGraph cluster stops running), NebulaGraph Operator automatically performs fault tolerance. This topic shows how Nebular Operator performs self-healing by simulating cluster failure of deleting one Storage service Pod in a NebulaGraph cluster.

                "},{"location":"k8s-operator/4.cluster-administration/4.8.ha-and-balancing/4.8.1.self-healing/#prerequisites","title":"Prerequisites","text":"

                Install NebulaGraph Operator

                "},{"location":"k8s-operator/4.cluster-administration/4.8.ha-and-balancing/4.8.1.self-healing/#steps","title":"Steps","text":"
                1. Create a NebulaGraph cluster. For more information, see Create a NebulaGraph clusters.

                2. Delete the Pod named <cluster_name>-storaged-2 after all pods are in the Running status.

                  kubectl delete pod <cluster-name>-storaged-2 --now\n
                  <cluster_name> is the name of your NebulaGraph cluster.

                3. NebulaGraph Operator automates the creation of the Pod named <cluster-name>-storaged-2 to perform self-healing.

                  Run the kubectl get pods command to check the status of the Pod <cluster-name>-storaged-2.

                  ...\nnebula-cluster-storaged-1        1/1     Running             0          5d23h\nnebula-cluster-storaged-2        0/1     ContainerCreating   0          1s\n...\n

                  ...\nnebula-cluster-storaged-1        1/1     Running     0          5d23h\nnebula-cluster-storaged-2        1/1     Running     0          4m2s\n...\n
                  When the status of <cluster-name>-storaged-2 is changed from ContainerCreating to Running, the self-healing is performed successfully.

                "},{"location":"k8s-operator/4.cluster-administration/4.9.advanced/4.9.1.rolling-update-strategy/","title":"Optimize leader transfer in rolling updates","text":"

                NebulaGraph clusters use a distributed architecture to divide data into multiple logical partitions, which are typically evenly distributed across different nodes. In distributed systems, there are usually multiple replicas of the same data. To ensure the consistency of data across multiple replicas, NebulaGraph clusters use the Raft protocol to synchronize multiple partition replicas. In the Raft protocol, each partition elects a leader replica, which is responsible for handling write requests, while follower replicas handle read requests.

                When a NebulaGraph cluster created by NebulaGraph Operator performs a rolling update, a storage node temporarily stops providing services for the update. For an overview of rolling updates, see Performing a Rolling Update. If the node hosting the leader replica stops providing services, it will result in the unavailability of read and write operations for that partition. To avoid this situation, by default, NebulaGraph Operator transfers the leader replicas to other unaffected nodes during the rolling update process of a NebulaGraph cluster. This way, when a storage node is being updated, the leader replicas on other nodes can continue processing client requests, ensuring the read and write availability of the cluster.

                The process of migrating all leader replicas from one storage node to the other nodes may take a long time. To better control the rolling update duration, Operator provides a field called enableForceUpdate. When it is confirmed that there is no external access traffic, you can set this field to true. This way, the leader replicas will not be transferred to other nodes, thereby speeding up the rolling update process.

                "},{"location":"k8s-operator/4.cluster-administration/4.9.advanced/4.9.1.rolling-update-strategy/#rolling_update_trigger_conditions","title":"Rolling update trigger conditions","text":"

                Operator triggers a rolling update of the NebulaGraph cluster under the following circumstances:

                • The version of the NebulaGraph cluster changes.
                • The configuration of the NebulaGraph cluster changes.
                • NebulaGraph cluster services are restarted.
                "},{"location":"k8s-operator/4.cluster-administration/4.9.advanced/4.9.1.rolling-update-strategy/#specify_a_rolling_update_strategy","title":"Specify a rolling update strategy","text":"

                In the YAML file for creating a cluster instance, add the spec.storaged.enableForceUpdate field and set it to true or false to control the rolling update speed.

                When enableForceUpdate is set to true, it means that the leader partition replicas are not transferred, thus speeding up the rolling update process. Conversely, when set to false, it means that the leader replicas are transferred to other nodes to ensure the read and write availability of the cluster. The default value is false.

                Warning

                When setting enableForceUpdate to true, make sure there is no traffic entering the cluster for read and write operations. This is because this setting will force the cluster pods to be rebuilt, and during this process, data loss or client request failures may occur.

                Configuration example:

                ...\nspec:\n...\n  storaged:\n    # When set to true,\n    # it means that the leader partition replicas are not transferred,\n    # but the cluster pods are rebuilt directly.\n    enableForceUpdate: true \n    ...\n
                "},{"location":"k8s-operator/4.cluster-administration/4.9.advanced/4.9.2.restart-cluster/","title":"Restart service Pods in a NebulaGraph cluster on K8s","text":"

                Note

                Restarting NebulaGraph cluster service Pods is a feature in the Alpha version.

                During routine maintenance, it might be necessary to restart a specific service Pod in the NebulaGraph cluster, for instance, when the Pod's status is abnormal or to enforce a restart. Restarting a Pod essentially means restarting the service process. To ensure high availability, NebulaGraph Operator supports gracefully restarting all Pods of the Graph, Meta, or Storage service respectively and gracefully restarting an individual Pod of the Storage service.

                "},{"location":"k8s-operator/4.cluster-administration/4.9.advanced/4.9.2.restart-cluster/#prerequisites","title":"Prerequisites","text":"

                A NebulaGraph cluster is created in a K8s environment. For details, see Create a NebulaGraph cluster.

                "},{"location":"k8s-operator/4.cluster-administration/4.9.advanced/4.9.2.restart-cluster/#restart_all_pods_of_a_certain_service_type","title":"Restart all Pods of a certain service type","text":"

                To gracefully roll restart all Pods of a certain service type in the cluster, you can add an annotation (nebula-graph.io/restart-timestamp) with the current time to the configuration of the StatefulSet controller of the corresponding service.

                When NebulaGraph Operator detects that the StatefulSet controller of the corresponding service has the annotation nebula-graph.io/restart-timestamp and its value is changed, it triggers the graceful rolling restart operation for all Pods of that service type in the cluster.

                In the following example, the annotation is added for all Graph services so that all Pods of these Graph services are restarted one by one.

                Assume that the cluster name is nebula and the cluster resources are in the default namespace. Run the following command:

                1. Check the name of the StatefulSet controller.

                  kubectl get statefulset \n

                  Sample output:

                  NAME              READY   AGE\nnebula-graphd     2/2     33s\nnebula-metad      3/3     69s\nnebula-storaged   3/3     69s\n
                2. Get the current timestamp.

                  date -u +%s\n

                  Example output:

                  1700547115\n
                3. Overwrite the timestamp annotation of the StatefulSet controller to trigger the graceful rolling restart operation.

                  kubectl annotate statefulset nebula-graphd nebula-graph.io/restart-timestamp=\"1700547115\" --overwrite\n

                  Example output:

                  statefulset.apps/nebula-graphd annotate\n
                4. Observe the restart process.

                  kubectl get pods -l app.kubernetes.io/cluster=nebula,app.kubernetes.io/component=graphd -w\n

                  Example output:

                  NAME              READY   STATUS    RESTARTS   AGE\nnebula-graphd-0   1/1     Running   0          9m37s\nnebula-graphd-1   0/1     Running   0          17s\nnebula-graphd-1   1/1     Running   0          20s\nnebula-graphd-0   1/1     Terminating   0          9m40s\nnebula-graphd-0   0/1     Terminating   0          9m41s\nnebula-graphd-0   0/1     Terminating   0          9m42s\nnebula-graphd-0   0/1     Terminating   0          9m42s\nnebula-graphd-0   0/1     Terminating   0          9m42s\nnebula-graphd-0   0/1     Pending       0          0s\nnebula-graphd-0   0/1     Pending       0          0s\nnebula-graphd-0   0/1     ContainerCreating   0          0s\nnebula-graphd-0   0/1     Running             0          2s\n

                  This above output shows the status of Graph service Pods during the restart process.

                5. Verify that the StatefulSet controller annotation is updated.

                  kubectl get statefulset nebula-graphd -o yaml | grep \"nebula-graph.io/restart-timestamp\"\n

                  Example output:

                  nebula-graph.io/last-applied-configuration: '{\"persistentVolumeClaimRetentionPolicy\":{\"whenDeleted\":\"Retain\",\"whenScaled\":\"Retain\"},\"podManagementPolicy\":\"Parallel\",\"replicas\":2,\"revisionHistoryLimit\":10,\"selector\":{\"matchLabels\":{\"app.kubernetes.io/cluster\":\"nebula\",\"app.kubernetes.io/component\":\"graphd\",\"app.kubernetes.io/managed-by\":\"nebula-operator\",\"app.kubernetes.io/name\":\"nebula-graph\"}},\"serviceName\":\"nebula-graphd-headless\",\"template\":{\"metadata\":{\"annotations\":{\"nebula-graph.io/cm-hash\":\"7c55c0e5ac74e85f\",\"nebula-graph.io/restart-timestamp\":\"1700547815\"},\"creationTimestamp\":null,\"labels\":{\"app.kubernetes.io/cluster\":\"nebula\",\"app.kubernetes.io/component\":\"graphd\",\"app.kubernetes.io/managed-by\":\"nebula-operator\",\"app.kubernetes.io/name\":\"nebula-graph\"}},\"spec\":{\"containers\":[{\"command\":[\"/bin/sh\",\"-ecx\",\"exec\nnebula-graph.io/restart-timestamp: \"1700547115\"\n    nebula-graph.io/restart-timestamp: \"1700547815\" \n

                The above output indicates that the annotation of the StatefulSet controller has been updated, and all graph service Pods has been restarted.

                "},{"location":"k8s-operator/4.cluster-administration/4.9.advanced/4.9.2.restart-cluster/#restart_a_single_storage_service_pod","title":"Restart a single Storage service Pod","text":"

                To gracefully roll restart a single Storage service Pod, you can add an annotation (nebula-graph.io/restart-ordinal) with the value set to the ordinal number of the Storage service Pod you want to restart. This triggers a graceful restart or state transition for that specific Storage service Pod. The added annotation will be automatically removed after the Storage service Pod is restarted.

                In the following example, the annotation is added for the Pod with ordinal number 1, indicating a graceful restart for the nebula-storaged-1 Storage service Pod.

                Assume that the cluster name is nebula, and the cluster resources are in the default namespace. Run the following commands:

                1. Check the name of the StatefulSet controller.

                  kubectl get statefulset \n

                  Example output:

                  NAME              READY   AGE\nnebula-graphd     2/2     33s\nnebula-metad      3/3     69s\nnebula-storaged   3/3     69s\n
                2. Get the ordinal number of the Storage service Pod.

                  kubectl get pods -l app.kubernetes.io/cluster=nebula,app.kubernetes.io/component=storaged\n

                  Example output:

                  NAME                READY   STATUS    RESTARTS   AGE\nnebula-storaged-0   1/1     Running   0          13h\nnebula-storaged-1   1/1     Running   0          13h\nnebula-storaged-2   1/1     Running   0          13h\nnebula-storaged-3   1/1     Running   0          13h\nnebula-storaged-4   1/1     Running   0          13h\nnebula-storaged-5   1/1     Running   0          13h\nnebula-storaged-6   1/1     Running   0          13h\nnebula-storaged-7   1/1     Running   0          13h\nnebula-storaged-8   1/1     Running   0          13h\n
                3. Add the annotation for the nebula-storaged-1 Pod to trigger a graceful restart for that specific Pod.

                  kubectl annotate statefulset nebula-storaged nebula-graph.io/restart-ordinal=\"1\" \n

                  Example output:

                  statefulset.apps/nebula-storaged annotate\n
                4. Observe the restart process.

                  kubectl get pods -l app.kubernetes.io/cluster=nebula,app.kubernetes.io/component=storaged -w\n

                  Example output:

                  NAME                READY   STATUS    RESTARTS   AGE\nnebula-storaged-0   1/1     Running   0          13h\nnebula-storaged-1   1/1     Running   0          13h\nnebula-storaged-2   1/1     Running   0          13h\nnebula-storaged-3   1/1     Running   0          13h\nnebula-storaged-4   1/1     Running   0          13h\nnebula-storaged-5   1/1     Running   0          12h\nnebula-storaged-6   1/1     Running   0          12h\nnebula-storaged-7   1/1     Running   0          12h\nnebula-storaged-8   1/1     Running   0          12h\n\n\nnebula-storaged-1   1/1     Running   0          13h\nnebula-storaged-1   1/1     Terminating   0          13h\nnebula-storaged-1   0/1     Terminating   0          13h\nnebula-storaged-1   0/1     Terminating   0          13h\nnebula-storaged-1   0/1     Terminating   0          13h\nnebula-storaged-1   0/1     Terminating   0          13h\nnebula-storaged-1   0/1     Pending       0          0s\nnebula-storaged-1   0/1     Pending       0          0s\nnebula-storaged-1   0/1     ContainerCreating   0          0s\nnebula-storaged-1   0/1     Running             0          1s\nnebula-storaged-1   1/1     Running             0          10s  \n

                  The above output indicates that the nebula-storaged-1 Storage service Pod is successfully restarted.

                  After restarting a single Storage service Pod, the distribution of storage leader replicas may become unbalanced. You can execute the BALANCE LEADER command to rebalance the distribution of leader replicas. For information about how to view the leader distribution, see SHOW HOSTS.

                "},{"location":"nebula-cloud/2.how-to-create-subsciption/","title":"Create a subscription","text":"

                Before using NebulaGraph Cloud, you need to create a subscription on Azure. This topic describes how to create a subscription on Azure Marketplace.

                "},{"location":"nebula-cloud/2.how-to-create-subsciption/#subscription_workflow","title":"Subscription workflow","text":"
                1. Enter the Azure Marketplace, and search for NebulaGraph Cloud in the search bar in Marketplace, or directly click NebulaGraph Cloud to enter the subscription page. [TODO]

                2. Select a plan according to your own needs and click Set up + subscribe.

                  1. On the Basics page of Subscribe NebulaGraph Cloud, fill in the following plan details:

                    • Project details

                      Field Description Subscription Select a subscription. Resource group Select an existing resource group or create a new one.
                    • SaaS details

                      Field Description Name Create a name for this SaaS subscription to easily identify it later. Recurring billing On or Off.
                  2. At the bottom of the Basics page, click Next: Tags.

                  3. (Optional) On the Tags page, enter Name: Value.
                  4. At the bottom of Review + subscribe page, click Subscribe and wait for about 2 minutes.
                3. After the subscription is completed, you need to click Open the SaaS account on the publisher's website to create and configure your Solution. For details, see How to configure a Solution.

                "},{"location":"nebula-cloud/3.how-to-set-solution/","title":"Configure a Solution","text":"

                Solution refers to the NebulaGraph database running on NebulaGraph Cloud. After subscribing NebulaGraph Cloud on Azure, you need to configure your Solutions on the Cloud platform to complete the purchase. This topic describes how to configure a Solution.

                "},{"location":"nebula-cloud/3.how-to-set-solution/#configuration_workflow","title":"Configuration workflow","text":"
                1. To complete your purchase after subscribing NebulaGraph Cloud on Azure, click Configure account now on the page and the system will jump to the NebulaGraph Cloud login page.
                2. Log in to the Azure account that has subscribed the Solution service in NebulaGraph Cloud.

                  1. Select a region in the Provider section.

                    Caution

                    The region of the database you select should be in the same area as that of your business to avoid performance and speed problems.

                  2. Configure the type and the number of the query engine and the type, the number, and the disk size of the storage engine in the Instance section.

                    Caution

                    It is recommended to configure at least 2 query engines and 3 storage engines to ensure high service availability.

                  3. Enter the specified Azure account mailbox as the Root user in the NebulaGraph section.

                  4. Click Next at the bottom of this page.

                  5. After confirmation, click Create at the bottom of this page.
                3. For now, you have completed the configuration of the Solution. If the status of the Solution is running on the Cloud homepage, the Solution has been created successfully.

                "},{"location":"nebula-cloud/3.how-to-set-solution/#solution_status","title":"Solution status","text":"

                You may see the following status and corresponding description on the Solution page.

                Status Description creating The resources required by a Solution are ready and the Solution will be created automatically. At this time, the Solution is in the creating state, which may last from several minutes to over ten minutes. starting After you have restarted a Solution, it will be in the starting state for a while. stopping After you have clicked Stop Solution, the Solution will be in the stopping state for a while. deleting After you have clicked Delete Solution, the Solution will be in the deleting state for a while. running After you create a Solution, it will be in the running state for a long time. stopped After you stop a Solution, it will be in the stopped state for a long time. deleted After you delete a Solution, it will be in the deleted state for a long time. create_failed If you failed to create a Solution, the Solution will be in the create_failed state for a long time. stop_failed If you failed to stop a Solution, the Solution will be in the stop_failed state for a long time. start_failed If you failed to start a Solution, the Solution will be in the start_failed state for a long time.

                Caution

                If a Solution stays in an intermediate state for a long time and the page remains unchanged after refreshing, it means that there is an exception and you need to submit an order to solve the problem.

                Caution

                If a Solution is in the state of create_failed, stop_failed, or start_failed, you can execute CREATE, STOP, or START again.

                "},{"location":"nebula-cloud/4.user-role-description/","title":"Cloud Solution roles","text":"

                After creating a Solution, you need to confirm the role privileges in the Cloud platform. This topic introduces the role privileges in the Cloud Solution.

                "},{"location":"nebula-cloud/4.user-role-description/#built-in_roles","title":"Built-in roles","text":"

                NebulaGraph Cloud has multiple built-in roles:

                • OWNER
                  • Correspond to the resource manager who can subscribe services and manage resource privileges.
                  • Configure Solution, create and confirm services, and activate subscription.
                  • Start and stop services of the Solution.
                  • Authorizing the ROOT user in the database manually.
                  • Access the database on the Cloud through a private endpoint.
                  • View history logs.
                  • Connect to NebulaGraph Dashboard to monitor specified Solution nodes and services.
                • ROOT
                  • Correspond to the God of the NebulaGraph database, which is set by the OWNER. For privileges of the God role, see Built-in role privileges.
                  • Manage users with the USER role in different spaces in the Cloud platform. When authorizing the USER role, you need to specify the role privileges of the NebulaGraph database, including ADMIN, DBA, GUEST, and USER. For details, see Built-in role privileges.
                  • Access the database on the Cloud through a private endpoint.
                  • Connect to visualized tools, including NebulaGraph Dashboard, NebulaGraph Studio, and NebulaGraph Explorer.
                • USER
                  • The database users are the Azure subscribers invited by the ROOT user in the Cloud platform.
                  • Correspond to the ADMIN, DBA, GUEST, or USER in the NebulaGraph database.
                  • Access the database on the Cloud through a private endpoint.
                  • Connect to visualized tools, including NebulaGraph Studio and NebulaGraph Explorer.
                "},{"location":"nebula-cloud/4.user-role-description/#solutions_privileges","title":"Solutions privileges","text":"

                On the Solution page, users with different roles will see different sidebars. The following describes the privileges of each role. Among them, Y means that this role can view this page, and N means that it cannot.

                Page OWNER ROOT USER Solution Info Y Y Y Applications Y Y Y Connectivity Y N N Root Management Y N N User Management N Y N Audit Log Y N N Settings Y N N Subscribe Settings Y N N Billing Y N N"},{"location":"nebula-cloud/7.terms-and-conditions/","title":"Terms of Service","text":"

                These terms and conditions (\"Agreement\") sets forth the general terms and conditions of your use of the https://cloud.nebula-cloud.io website (\"Website\" or \"Service\") and any of its related products and services (collectively, \"Services\"). This Agreement is legally binding between you (\"User\", \"you\" or \"your\") and vesoft inc. (\"vesoft inc.\", \"we\", \"us\" or \"our\"). By accessing and using the Website and Services, you acknowledge that you have read, understood, and agree to be bound by the terms of this Agreement. If you are entering into this Agreement on behalf of a business or other legal entity, you represent that you have the authority to bind such entity to this Agreement, in which case the terms \"User\", \"you\" or \"your\" shall refer to such entity. If you do not have such authority, or if you do not agree with the terms of this Agreement, you must not accept this Agreement and may not access and use the Website and Services. You acknowledge that this Agreement is a contract between you and vesoft inc., even though it is electronic and is not physically signed by you, and it governs your use of the Website and Services.

                "},{"location":"nebula-cloud/7.terms-and-conditions/#accounts","title":"Accounts","text":"

                You give NebulaGraph Cloud permission to use your Azure account as your NebulaGraph Cloud account and get your account information so that NebulaGraph Cloud can contact you regarding this product and related products. You understand that the rights to use NebulaGraph Cloud come from vesoft instead of Microsoft, vesoft is the provider of this product. Use of NebulaGraph Cloud is governed by provider's terms of service, service-level agreement, and privacy policy.

                "},{"location":"nebula-cloud/7.terms-and-conditions/#billing_and_payments","title":"Billing and payments","text":"

                Microsoft collects payments from you for your commercial marketplace purchases. You may pay the fees for the NebulaGraph Cloud services according to your chosen solutions. You shall pay all fees or charges to your account in accordance with the fees, charges, and billing terms in effect at the time a fee or charge is due and payable.

                "},{"location":"nebula-cloud/7.terms-and-conditions/#accuracy_of_information","title":"Accuracy of information","text":"

                Occasionally there may be information on the Website that contains typographical errors, inaccuracies or omissions that may relate to pricing, availability, promotions and offers. We reserve the right to correct any errors, inaccuracies or omissions, and to change or update information or cancel orders if any information on the Website or Services is inaccurate at any time without prior notice (including after you have submitted your order). We undertake no obligation to update, amend or clarify information on the Website including, without limitation, pricing information, except as required by law. No specified update or refresh date applied on the Website should be taken to indicate that all information on the Website or Services has been modified or updated.

                "},{"location":"nebula-cloud/7.terms-and-conditions/#data_and_content_protection","title":"Data and content protection","text":"

                vesoft understands and recognizes that all the data processed, stored, uploaded, downloaded, distributed, or processed through services provided by NebulaGraph Cloud is your data or content, and you fully own your data and content. Except for the implementation of your service requirements, no unauthorized use or disclosure of your data or content will be made except in the following circumstances:

                a.vesoft may disclose the data or content in any legal proceeding or to a governmental body as required by Law;

                b.an agreement made between you and vesoft.

                You can delete or edit your data or content yourself. If you have deleted the service or data, vesoft will delete your data and will no longer retain such data in accordance with your instructions. You should operate carefully with regard to operations such as deletion or modification.

                You understand and agree: when your subscription is in the Suspended state, Microsoft gives the customer a 30-day grace period before automatically canceling the subscription. After the 30-day grace period is over, the webhook will receive an Unsubscribe action. After vesoft receives a cancellation webhook call, vesoft will only continue to store your data and content (if any) within 7 days. After 7 days, vesoft will delete all your data and content, including all cached or backup copies, and will no longer retain any of them.

                Once the data or content is deleted, it cannot be restored; you shall take responsibilities caused by the data being deleted. You understand and agree that vesoft has no obligation to continue to retain, export or return your data or content.

                "},{"location":"nebula-cloud/7.terms-and-conditions/#links_to_other_resources","title":"Links to other resources","text":"

                Although the Website and Services may link to other resources (such as websites), we are not, directly or indirectly, implying any approval, association, sponsorship, endorsement, or affiliation with any linked resource, unless specifically stated herein. You acknowledge that vesoft inc. is providing these links to you only as a convenience. We are not responsible for examining or evaluating, and we do not warrant the offerings of, any businesses or individuals or the content of their resources. We do not assume any responsibility or liability for the actions, products, services, and content of any other third parties. You should carefully review the legal statements and other conditions of use of any resource which you access through a link on the Website and Services. Your linking to any other off-site resources is at your own risk.

                "},{"location":"nebula-cloud/7.terms-and-conditions/#prohibited_uses","title":"Prohibited uses","text":"

                In addition to other terms as set forth in the Agreement, you are prohibited from using the Website and Services or Content: (a) for any unlawful purpose; (b) to solicit others to perform or participate in any unlawful acts; (c) to violate any international, federal, provincial or state regulations, rules, laws, or local ordinances; (d) to infringe upon or violate our intellectual property rights or the intellectual property rights of others; (e) to harass, abuse, insult, harm, defame, slander, disparage, intimidate, or discriminate based on gender, sexual orientation, religion, ethnicity, race, age, national origin, or disability; (f) to submit false or misleading information; (g) to upload or transmit viruses or any other type of malicious code that will or may be used in any way that will affect the functionality or operation of the Website and Services, third party products and services, or the Internet; (h) to spam, phish, pharm, pretext, spider, crawl, or scrape; (i) for any obscene or immoral purpose; or (j) to interfere with or circumvent the security features of the Website and Services, third party products and services, or the Internet. We reserve the right to terminate your use of the Website and Services for violating any of the prohibited uses.

                "},{"location":"nebula-cloud/7.terms-and-conditions/#intellectual_property_rights","title":"Intellectual property rights","text":"

                \"Intellectual Property Rights\" means all present and future rights conferred by law or statute in or in relation to any copyright and related rights, trademarks, designs, patents, inventions, goodwill and the right to sue for passing off, rights to inventions, rights to use, and all other intellectual property rights, in each case whether registered or unregistered and including all applications and rights to apply for and be granted, rights to claim priority from, such rights and all similar or equivalent rights or forms of protection and any other results of intellectual activity which subsist or will subsist now or in the future in any part of the world. This Agreement does not transfer to you any intellectual property owned by vesoft inc. or third parties, and all rights, titles, and interests in and to such property will remain (as between the parties) solely with vesoft inc. All trademarks, service marks, graphics and logos used in connection with the Website and Services, are trademarks or registered trademarks of vesoft inc. or its licensors. Other trademarks, service marks, graphics and logos used in connection with the Website and Services may be the trademarks of other third parties. Your use of the Website and Services grants you no right or license to reproduce or otherwise use any of vesoft inc. or third party trademarks.

                "},{"location":"nebula-cloud/7.terms-and-conditions/#disclaimer_of_warranty","title":"Disclaimer of warranty","text":"

                You agree that such Service is provided on an \"as is\" and \"as available\" basis and that your use of the Website and Services is solely at your own risk. We expressly disclaim all warranties of any kind, whether express or implied, including but not limited to the implied warranties of merchantability, fitness for a particular purpose and non-infringement. We make no warranty that the Services will meet your requirements, or that the Service will be uninterrupted, timely, secure, or error-free; nor do we make any warranty as to the results that may be obtained from the use of the Service or as to the accuracy or reliability of any information obtained through the Service or that defects in the Service will be corrected. You understand and agree that any material and/or data downloaded or otherwise obtained through the use of Service is done at your own discretion and risk and that you will be solely responsible for any damage or loss of data that results from the download of such material and/or data. We make no warranty regarding any goods or services purchased or obtained through the Service or any transactions entered into through the Service. No advice or information, whether oral or written, obtained by you from us or through the Service shall create any warranty not expressly made herein.

                "},{"location":"nebula-cloud/7.terms-and-conditions/#limitation_of_liability","title":"Limitation of liability","text":"

                To the fullest extent permitted by applicable law, in no event will vesoft inc., its affiliates, directors, officers, employees, agents, suppliers or licensors be liable to any person for any indirect, incidental, special, punitive, cover or consequential damages (including, without limitation, damages for lost profits, revenue, sales, goodwill, use of content, impact on business, business interruption, loss of anticipated savings, loss of business opportunity) however caused, under any theory of liability, including, without limitation, contract, tort, warranty, breach of statutory duty, negligence or otherwise, even if the liable party has been advised as to the possibility of such damages or could have foreseen such damages.

                "},{"location":"nebula-cloud/7.terms-and-conditions/#indemnification","title":"Indemnification","text":"

                You agree to indemnify and hold vesoft inc. and its affiliates, directors, officers, employees, agents, suppliers and licensors harmless from and against any liabilities, losses, damages or costs, including reasonable attorneys' fees, incurred in connection with or arising from any third party allegations, claims, actions, disputes, or demands asserted against any of them as a result of or relating to your Content, your use of the Website and Services or any willful misconduct on your part.

                "},{"location":"nebula-cloud/7.terms-and-conditions/#severability","title":"Severability","text":"

                All rights and restrictions contained in this Agreement may be exercised and shall be applicable and binding only to the extent that they do not violate any applicable laws and are intended to be limited to the extent necessary so that they will not render this Agreement illegal, invalid or unenforceable. If any provision or portion of any provision of this Agreement shall be held to be illegal, invalid or unenforceable by a court of competent jurisdiction, it is the intention of the parties that the remaining provisions or portions thereof shall constitute their agreement with respect to the subject matter hereof, and all such remaining provisions or portions thereof shall remain in full force and effect.

                "},{"location":"nebula-cloud/7.terms-and-conditions/#dispute_resolution","title":"Dispute resolution","text":"

                The formation, interpretation, and performance of this Agreement and any disputes arising out of it shall be governed by the substantive and procedural laws of China without regard to its rules on conflicts or choice of law and, to the extent applicable, the laws of China. You further consent to the territorial jurisdiction of and exclusive venue in Internet Court of Hangzhou as the legal forum for any such dispute. You hereby waive any right to a jury trial in any proceeding arising out of or related to this Agreement. The United Nations Convention on Contracts for the International Sale of Goods does not apply to this Agreement.

                "},{"location":"nebula-cloud/7.terms-and-conditions/#assignment","title":"Assignment","text":"

                You may not assign, resell, sub-license or otherwise transfer or delegate any of your rights or obligations hereunder, in whole or in part, without our prior written consent, which consent shall be at our own sole discretion and without obligation; any such assignment or transfer shall be null and void. We are free to assign any of its rights or obligations hereunder, in whole or in part, to any third party as part of the sale of all or substantially all of its assets or stock or as part of a merger.

                "},{"location":"nebula-cloud/7.terms-and-conditions/#changes_and_amendments","title":"Changes and amendments","text":"

                We reserve the right to modify this Agreement or its terms relating to the Website and Services at any time, effective upon posting of an updated version of this Agreement on the Website. When we do, we will revise the updated date at the bottom of this page. Continued use of the Website and Services after any such changes shall constitute your consent to such changes.

                "},{"location":"nebula-cloud/7.terms-and-conditions/#acceptance_of_these_terms","title":"Acceptance of these terms","text":"

                You acknowledge that you have read this Agreement and agree to all its terms and conditions. By accessing and using the Website and Services you agree to be bound by this Agreement. If you do not agree to abide by the terms of this Agreement, you are not authorized to access or use the Website and Services.

                "},{"location":"nebula-cloud/7.terms-and-conditions/#contacting_us","title":"Contacting us","text":"

                If you would like to contact us to understand more about this Agreement or wish to contact us concerning any matter relating to it, you may send an email to legal@vesoft.com

                This document was last updated on December 14, 2021

                "},{"location":"nebula-cloud/8.privacy-policy/","title":"Privacy Policy","text":"

                This privacy policy (\"Policy\") describes how the personally identifiable information (\"Personal Information\") you may provide on the https://www.nebula-cloud.io[TODO] website (\"Website\" or \"Service\") and any of its related products and services (collectively, \"Services\") is collected, protected and used. It also describes the choices available to you regarding our use of your Personal Information and how you can access and update this information. This Policy is a legally binding agreement between you (\"User\", \"you\" or \"your\") and vesoft Inc. (\"vesoft Inc.\", \"we\", \"us\" or \"our\"). By accessing and using the Website and Services, you acknowledge that you have read, understood, and agree to be bound by the terms of this Agreement. This Policy does not apply to the practices of companies that we do not own or control, or to individuals that we do not employ or manage.

                "},{"location":"nebula-cloud/8.privacy-policy/#automatic_collection_of_information","title":"Automatic collection of information","text":"

                When you open the Website, our servers automatically record information that your browser sends. This data may include information such as your device's IP address, browser type and version, operating system type and version, language preferences or the webpage you were visiting before you came to the Website and Services, pages of the Website and Services that you visit, the time spent on those pages, information you search for on the Website, access times and dates, and other statistics.

                Information collected automatically is used only to identify potential cases of abuse and establish statistical information regarding the usage and traffic of the Website and Services. This statistical information is not otherwise aggregated in such a way that would identify any particular user of the system.

                "},{"location":"nebula-cloud/8.privacy-policy/#collection_of_personal_information","title":"Collection of personal information","text":"

                You can access and use the Website and Services without telling us who you are or revealing any information by which someone could identify you as a specific, identifiable individual. If, however, you wish to use some of the features on the Website, you may be asked to provide certain Personal Information (for example, your name and e-mail address). We receive and store any information you knowingly provide to us when you create an account or fill any online forms on the Website. When required, this information may include the following:

                • Personal details such as name.
                • Contact information such as email address.
                • Account details such as user name and password.
                • Any other materials you willingly submit to us such as articles, images, feedback, etc.

                You can choose not to provide us with your Personal Information, but then you may not be able to take advantage of some of the features on the Website. Users who are uncertain about what information is mandatory are welcome to contact us.

                "},{"location":"nebula-cloud/8.privacy-policy/#use_and_processing_of_collected_information","title":"Use and processing of collected information","text":"

                In order to make the Website and Services available to you, or to meet a legal obligation, we need to collect and use certain Personal Information. If you do not provide the information that we request, we may not be able to provide you with the requested products or services. Some of the information we collect is directly from you via the Website and Services. However, we may also collect Personal Information about you from other sources. Any of the information we collect from you may be used for the following purposes:

                • Create and manage user accounts
                • Deliver products or services
                • Improve products and services
                • Send marketing and promotional communications
                • Respond to inquiries and offer support
                • Request user feedback
                • Improve user experience
                • Deliver targeted advertising
                • Enforce terms and conditions and policies
                • Protect from abuse and malicious users
                • Respond to legal requests and prevent harm
                • Run and operate the Website and Services

                Processing your Personal Information depends on how you interact with the Website and Services, where you are located in the world and if one of the following applies: (i) you have given your consent for one or more specific purposes; (ii) provision of information is necessary for the performance of an agreement with you and/or for any pre-contractual obligations thereof; (iii) processing is necessary for compliance with a legal obligation to which you are subject; (iv) processing is related to a task that is carried out in the public interest or in the exercise of official authority vested in us; (v) processing is necessary for the purposes of the legitimate interests pursued by us or by a third party.

                Note that under some legislation we may be allowed to process information until you object to such processing (by opting out), without having to rely on consent or any other of the following legal bases below. In any case, we will be happy to clarify the specific legal basis that applies to the processing, and in particular whether the provision of Personal Information is a statutory or contractual requirement, or a requirement necessary to enter into a contract.

                "},{"location":"nebula-cloud/8.privacy-policy/#managing_information","title":"Managing information","text":"

                You are able to delete certain Personal Information we have about you. The Personal Information you can delete may change as the Website and Services change. If you would like to delete your Personal Information or permanently delete your account, you can do so by contacting us.

                "},{"location":"nebula-cloud/8.privacy-policy/#disclosure_of_information","title":"Disclosure of information","text":"

                Depending on the requested Services or as necessary to complete any transaction or provide any service you have requested, we may share your information with your consent with our trusted third parties that work with us, any other affiliates and subsidiaries we rely upon to assist in the operation of the Website and Services available to you. We do not share Personal Information with unaffiliated third parties. These service providers are not authorized to use or disclose your information except as necessary to perform services on our behalf or comply with legal requirements. We may share your Personal Information for these purposes only with third parties whose privacy policies are consistent with ours or who agree to abide by our policies with respect to Personal Information. These third parties are given Personal Information they need only in order to perform their designated functions, and we do not authorize them to use or disclose Personal Information for their own marketing or other purposes.

                We will disclose any Personal Information we collect, use or receive if required or permitted by law, such as to comply with a subpoena, or similar legal process, and when we believe in good faith that disclosure is necessary to protect our rights, protect your safety or the safety of others, investigate fraud, or respond to a government request.

                In the event we go through a business transition, such as a merger or acquisition by another company, or sale of all or a portion of its assets, your user account, and Personal Information will likely be among the assets transferred.

                "},{"location":"nebula-cloud/8.privacy-policy/#retention_of_information","title":"Retention of information","text":"

                We will retain and use your Personal Information for the period necessary to comply with our legal obligations, resolve disputes, and enforce our agreements unless a longer retention period is required or permitted by law. We may use any aggregated data derived from or incorporating your Personal Information after you update or delete it, but not in a manner that would identify you personally. Once the retention period expires, Personal Information shall be deleted. Therefore, the right to access, the right to erasure, the right to rectification and the right to data portability cannot be enforced after the expiration of the retention period.

                "},{"location":"nebula-cloud/8.privacy-policy/#transfer_of_information","title":"Transfer of information","text":"

                Depending on your location, data transfers may involve transferring and storing your information in a country other than your own. You are entitled to learn about the legal basis of information transfers to a country outside the European Union or to any international organization governed by public international law or set up by two or more countries, such as the UN, and about the security measures taken by us to safeguard your information. If any such transfer takes place, you can find out more by checking the relevant sections of this Policy or inquire with us using the information provided in the contact section.

                "},{"location":"nebula-cloud/8.privacy-policy/#the_rights_of_users","title":"The rights of users","text":"

                You may exercise certain rights regarding your information processed by us. In particular, you have the right to do the following: (i) you have the right to withdraw consent where you have previously given your consent to the processing of your information; (ii) you have the right to object to the processing of your information if the processing is carried out on a legal basis other than consent; (iii) you have the right to learn if information is being processed by us, obtain disclosure regarding certain aspects of the processing and obtain a copy of the information undergoing processing; (iv) you have the right to verify the accuracy of your information and ask for it to be updated or corrected; (v) you have the right, under certain circumstances, to restrict the processing of your information, in which case, we will not process your information for any purpose other than storing it; (vi) you have the right, under certain circumstances, to obtain the erasure of your Personal Information from us; (vii) you have the right to receive your information in a structured, commonly used and machine readable format and, if technically feasible, to have it transmitted to another controller without any hindrance. This provision is applicable provided that your information is processed by automated means and that the processing is based on your consent, on a contract which you are part of or on pre-contractual obligations thereof.

                "},{"location":"nebula-cloud/8.privacy-policy/#the_right_to_object_to_processing","title":"The right to object to processing","text":"

                Where Personal Information is processed for the public interest, in the exercise of an official authority vested in us or for the purposes of the legitimate interests pursued by us, you may object to such processing by providing a ground related to your particular situation to justify the objection.

                "},{"location":"nebula-cloud/8.privacy-policy/#how_to_exercise_these_rights","title":"How to exercise these rights","text":"

                Any requests to exercise your rights can be directed to vesoft Inc. through the contact details provided in this document. Please note that we may ask you to verify your identity before responding to such requests. Your request must provide sufficient information that allows us to verify that you are the person you are claiming to be or that you are the authorized representative of such person. You must include sufficient details to allow us to properly understand the request and respond to it. We cannot respond to your request or provide you with Personal Information unless we first verify your identity or authority to make such a request and confirm that the Personal Information relates to you.

                "},{"location":"nebula-cloud/8.privacy-policy/#privacy_of_children","title":"Privacy of children","text":"

                We do not knowingly collect any Personal Information from children under the age of 18. If you are under the age of 18, please do not submit any Personal Information through the Website and Services. We encourage parents and legal guardians to monitor their children's Internet usage and to help enforce this Policy by instructing their children never to provide Personal Information through the Website and Services without their permission. If you have reason to believe that a child under the age of 18 has provided Personal Information to us through the Website and Services, please contact us. You must also be at least 16 years of age to consent to the processing of your Personal Information in your country (in some countries we may allow your parent or guardian to do so on your behalf).

                "},{"location":"nebula-cloud/8.privacy-policy/#cookies","title":"Cookies","text":"

                The Website and Services use \"cookies\" to help personalize your online experience. A cookie is a text file that is placed on your hard disk by a web page server. Cookies cannot be used to run programs or deliver viruses to your computer. Cookies are uniquely assigned to you, and can only be read by a web server in the domain that issued the cookie to you. We may use cookies to collect, store, and track information for statistical purposes to operate the Website and Services. You have the ability to accept or decline cookies. Most web browsers automatically accept cookies, but you can usually modify your browser setting to decline cookies if you prefer. To learn more about cookies and how to manage them, visit internetcookies.org

                "},{"location":"nebula-cloud/8.privacy-policy/#email_marketing","title":"Email marketing","text":"

                We offer electronic newsletters to which you may voluntarily subscribe at any time. We are committed to keeping your e-mail address confidential and will not disclose your email address to any third parties except as allowed in the information use and processing section. We will maintain the information sent via e-mail in accordance with applicable laws and regulations.

                "},{"location":"nebula-cloud/8.privacy-policy/#links_to_other_resources","title":"Links to other resources","text":"

                The Website and Services contain links to other resources that are not owned or controlled by us. Such links do not constitute an endorsement by vesoft Inc. of those External Web Sites. Please be aware that we are not responsible for the privacy practices of such other resources or third parties. We encourage you to be aware when you leave the Website and Services and to read the privacy statements of each and every resource that may collect Personal Information. You should carefully review the legal statements and other conditions of use of any resource which you access through a link on the Website and Services.

                "},{"location":"nebula-cloud/8.privacy-policy/#information_security","title":"Information security","text":"

                We secure information you provide on computer servers in a controlled, secure environment, protected from unauthorized access, use, or disclosure. We maintain reasonable administrative, technical, and physical safeguards in an effort to protect against unauthorized access, use, modification, and disclosure of Personal Information in its control and custody. However, no data transmission over the Internet or wireless network can be guaranteed. Therefore, while we strive to protect your Personal Information, you acknowledge that (i) there are security and privacy limitations of the Internet which are beyond our control; (ii) the security, integrity, and privacy of any and all information and data exchanged between you and the Website and Services cannot be guaranteed; and (iii) any such information and data may be viewed or tampered with in transit by a third party, despite best efforts.

                "},{"location":"nebula-cloud/8.privacy-policy/#data_breach","title":"Data breach","text":"

                In the event we become aware that the security of the Website and Services has been compromised or users Personal Information has been disclosed to unrelated third parties as a result of external activity, including, but not limited to, security attacks or fraud, we reserve the right to take reasonably appropriate measures, including, but not limited to, investigation and reporting, as well as notification to and cooperation with law enforcement authorities. In the event of a data breach, we will make reasonable efforts to notify affected individuals if we believe that there is a reasonable risk of harm to the user as a result of the breach or if notice is otherwise required by law. When we do, we will post a notice on the Website, send you an email.

                "},{"location":"nebula-cloud/8.privacy-policy/#changes_and_amendments","title":"Changes and amendments","text":"

                We reserve the right to modify this Policy or its terms relating to the Website and Services from time to time in our discretion and will notify you of any material changes to the way in which we treat Personal Information. When we do, we will revise the updated date at the bottom of this page. We may also provide notice to you in other ways in our discretion, such as through contact information you have provided. Any updated version of this Policy will be effective immediately upon the posting of the revised Policy unless otherwise specified. Your continued use of the Website and Services after the effective date of the revised Policy (or such other act specified at that time) will constitute your consent to those changes. However, we will not, without your consent, use your Personal Information in a manner materially different than what was stated at the time your Personal Information was collected.

                "},{"location":"nebula-cloud/8.privacy-policy/#dispute_resolution","title":"Dispute resolution","text":"

                The formation, interpretation, and performance of this Agreement and any disputes arising out of it shall be governed by the substantive and procedural laws of China without regard to its rules on conflicts or choice of law and, to the extent applicable, the laws of China. You further consent to the personal jurisdiction of and exclusive venue in Yuhang District Court located in Hangzhou as the legal forum for any such dispute. You hereby waive any right to a jury trial in any proceeding arising out of or related to this Agreement. The United Nations Convention on Contracts for the International Sale of Goods does not apply to this Agreement.

                "},{"location":"nebula-cloud/8.privacy-policy/#acceptance_of_this_policy","title":"Acceptance of this policy","text":"

                You acknowledge that you have read this Policy and agree to all its terms and conditions. By accessing and using the Website and Services you agree to be bound by this Policy. If you do not agree to abide by the terms of this Policy, you are not authorized to access or use the Website and Services.

                "},{"location":"nebula-cloud/8.privacy-policy/#contacting_us","title":"Contacting us","text":"

                If you would like to contact us to understand more about this Policy or wish to contact us concerning any matter relating to individual rights and your Personal Information, you may send an email to legal@vesoft.com

                This document was last updated on December 28, 2021

                "},{"location":"nebula-cloud/5.solution/5.0.introduce-solution/","title":"Solution","text":"

                On the Solution page, the sidebars are different based on roles and privileges. For more information, see Roles and privileges in Cloud.

                "},{"location":"nebula-cloud/5.solution/5.0.introduce-solution/#solution_info","title":"Solution Info","text":"

                On the homepage of Cloud, click on the Solution's name to enter the Solution Info page. The Solution Info page consists of the following parts: Basic Info, Instance Info, Price Info, Getting Started. You can view the information on this page in detail.

                "},{"location":"nebula-cloud/5.solution/5.0.introduce-solution/#applications","title":"Applications","text":"

                In the sidebar, click Applications to enter the page of ecosystem tools(Dashboard/Studio/Explorer). Different roles see different ecosystem tools. For more information, see Accessory applications.

                "},{"location":"nebula-cloud/5.solution/5.0.introduce-solution/#connectivity","title":"Connectivity","text":"

                In the sidebar, click Connectivity to enter Private Link page. On this page, you can create a Private Link endpoint that enables you to access NebulaGraph databases through a private IP address in a virtual network. For more information, see Private Link.

                "},{"location":"nebula-cloud/5.solution/5.0.introduce-solution/#root_management","title":"Root Management","text":"

                In the sidebar, click Root Management to enter the root account management page. For more information, see Role and User Management.

                "},{"location":"nebula-cloud/5.solution/5.0.introduce-solution/#user_management","title":"User Management","text":"

                In the sidebar, click User Management to enter the user account management page. For more information, see Role and User Management.

                "},{"location":"nebula-cloud/5.solution/5.0.introduce-solution/#audit_log","title":"Audit Log","text":"

                In the sidebar, click Audit Log to enter the operation history page. You can select the time period according to the operation information such as Create Solution, Start Solution, Stop Solution, and filter results by operator and operation record.

                "},{"location":"nebula-cloud/5.solution/5.0.introduce-solution/#settings","title":"Settings","text":"

                In the sidebar, click Settings to enter the settings page, and you can Stop Solution or Transfer Solution in this page.

                "},{"location":"nebula-cloud/5.solution/5.1.supporting-application/","title":"Accessory applications(Dashboard/Studio/Explorer)","text":"

                NebulaGraph Cloud integrates with NebulaGraph Studio, NebulaGraph Dashboard, and NebulaGraph Explorer.

                On the Applications page, ecosystem tools are different based on roles and privileges. The correspondence between different roles and privileges is as follows. The first column means the tools that the role can use, Y means the role has the corresponding privileges, and N means the role has no privileges.

                Tools OWNER ROOT USER Dashboard Y Y N Studio N Y Y Explorer N Y Y"},{"location":"nebula-cloud/5.solution/5.1.supporting-application/#dashboard","title":"Dashboard","text":"

                NebulaGraph Dashboard (Dashboard for short) is a visualization tool that monitors and manages the status of machines and services in NebulaGraph clusters.

                "},{"location":"nebula-cloud/5.solution/5.1.supporting-application/#studio","title":"Studio","text":"

                NebulaGraph Studio (Studio in short) is a browser-based visualization tool to manage NebulaGraph. It provides you with a graphical user interface to manipulate graph schemas, import data, explore graph data, and run nGQL statements to retrieve data. With Studio, you can quickly become a graph exploration expert from scratch. For more information, see What is NebulaGraph Studio.

                "},{"location":"nebula-cloud/5.solution/5.1.supporting-application/#explorer","title":"Explorer","text":"

                NebulaGraph Explorer (Explorer in short) is a browser-based visualization tool. It is used with the NebulaGraph core to visualize interaction with graph data. Even without any experience in a graph database, you can quickly become a graph exploration expert.

                "},{"location":"nebula-cloud/5.solution/5.2.connection-configuration-and-use/","title":"Private Link","text":"

                You can create a Private Link endpoint in Connectivity to allow users to access NebulaGraph databases through a private IP in a virtual network, without exposing your traffic to the public internet. For more information about Private Link, see What is Azure Private Link?.

                "},{"location":"nebula-cloud/5.solution/5.2.connection-configuration-and-use/#configure_private_link","title":"Configure Private Link","text":"
                1. Enter your subscription ID, click Create. The creation time takes about 2 minutes.

                  Note

                  The subscription ID on the Subscription page of Azure Portal. You can click on the [Subscriptions] (https://portal.azure.com/?l=en.en-us#blade/Microsoft_Azure_Billing/SubscriptionsBlade) page for quick access.

                2. After the creation, you can use Alias to connect to Azure resources and create a private endpoint in Azure.

                  1. Navigate to the Azure portal. Search for Private Link and click Private endpoint.
                  2. Click + add.

                  3. In the Basics section, fill in the following plan details:

                    • Project details

                      Field Description Subscription Select the subscription. Resource group Select an existing resource group or create a new resource group.
                    • Instance details

                      Field Description Name Set the name of the private endpoint. Region Select the region.

                    Caution

                    The region of the database you select should be in the same area as that of your business to avoid performance and speed problems.

                  4. At the bottom of the Basics page, click Next: Resource.

                  5. In the Resource section, fill in the following plan details:

                    Field Description Connection method Click Connect to an Azure resource by resource ID or alias. Resource ID or alias Set the alias. Request message Set the message, this message will be sent to the resource owner.

                    Note

                    The alias is on the Connectivity page of NebulaGraph Cloud, click to copy it.

                  6. At the bottom of the Resource page, click Next: Configuration.

                  7. In the Configuration section, select the following plan details:

                    • Networking

                      Field Description Virtual network Set virtual networks. Subnet Set the subnet in the selected virtual network.

                    Note

                    Private DNS integration is currently not supported.

                  8. At the bottom of the Configuration page, click Next: Tags.

                  9. (optional)In the Tags section, enter Name:Values.

                  10. At the bottom of the Tags page, click Next: Review + create.

                  11. At the bottom of the Review + create page, click Create.
                3. After creating the private endpoint, copy the Private IP address in Network interface to the Connectivity page in Cloud. Click the Create.

                  Note

                  Private Link Endpoint IP information is stored in the Cloud, and you can click to modify.

                "},{"location":"nebula-cloud/5.solution/5.2.connection-configuration-and-use/#connect_to_nebulagraph_with_private_link","title":"Connect to NebulaGraph with Private Link","text":"

                You can use Private link endpoint IP to connect to NebulaGraph. For more information, see Connect to NebulaGraph.

                "},{"location":"nebula-cloud/5.solution/5.3.role-and-authority-management/","title":"Roles and authority management","text":"

                NebulaGraph Cloud roles are different from roles in NebulaGraph. For more information, see Roles in Cloud Solution.

                Roles in Cloud Roles in NebulaGraph OWNER - ROOT ROOT USER ADMIN/DBA/GUEST/USER"},{"location":"nebula-cloud/5.solution/5.3.role-and-authority-management/#root_management","title":"Root Management","text":"

                Only users with OWNER authority can manage ROOT users.

                On the Root Management page, OWNER can reset ROOT users.

                1. Click Reset, enter the email address of the ROOT user to be updated, and click Send Email to send the email.

                2. After the ROOT user receives the confirmation email, click Confirm.

                "},{"location":"nebula-cloud/5.solution/5.3.role-and-authority-management/#user_management","title":"User Management","text":"

                Only users with ROOT authority can manage USER users.

                On the User Management page, the ROOT user can grant roles in graph spaces to other users. Available roles are ADMIN, DBA, GUEST, and USER.

                1. Select the graph space, click Add User, enter the specified user email and select the management authority of the user.
                2. Click Send Email to send the email.
                3. After the USER user receives the confirmation email, click Confirm.
                "},{"location":"nebula-dashboard/1.what-is-dashboard/","title":"What is NebulaGraph Dashboard Community Edition","text":"

                NebulaGraph Dashboard Community Edition (Dashboard for short) is a visualization tool that monitors the status of machines and services in NebulaGraph clusters.

                Enterpriseonly

                Dashboard Enterprise Edition adds features such as visual cluster creation, batch import of clusters, fast scaling, etc. For more information, see Pricing.

                "},{"location":"nebula-dashboard/1.what-is-dashboard/#features","title":"Features","text":"

                Dashboard monitors:

                • The status of all the machines in clusters, including CPU, memory, load, disk, and network.
                • The information of all the services in clusters, including the IP addresses, versions, and monitoring metrics (such as the number of queries, the latency of queries, the latency of heartbeats, and so on).
                • The information of clusters, including the information of services, partitions, configurations, and long-term tasks.
                • Set how often the metrics page refreshes.
                "},{"location":"nebula-dashboard/1.what-is-dashboard/#scenarios","title":"Scenarios","text":"

                You can use Dashboard in one of the following scenarios:

                • You want to monitor key metrics conveniently and quickly, and present multiple key information of the business to ensure the business operates normally.
                • You want to monitor clusters from multiple dimensions (such as the time, aggregate rules, and metrics).
                • After a failure occurs, you need to review it and confirm its occurrence time and unexpected phenomena.
                "},{"location":"nebula-dashboard/1.what-is-dashboard/#precautions","title":"Precautions","text":"

                The monitoring data will be retained for 14 days by default, that is, only the monitoring data within the last 14 days can be queried.

                Note

                The monitoring service is supported by Prometheus. The update frequency and retention intervals can be modified. For details, see Prometheus.

                "},{"location":"nebula-dashboard/1.what-is-dashboard/#version_compatibility","title":"Version compatibility","text":"

                The version correspondence between NebulaGraph and Dashboard Community Edition is as follows.

                NebulaGraph version Dashboard version 3.6.0 3.4.0 3.5.x 3.4.0 3.4.0 ~ 3.4.1 3.4.0\u30013.2.0 3.3.0 3.2.0 2.5.0 ~ 3.2.0 3.1.0 2.5.x ~ 3.1.0 1.1.1 2.0.1~2.5.1 1.0.2 2.0.1~2.5.1 1.0.1"},{"location":"nebula-dashboard/1.what-is-dashboard/#release_note","title":"Release note","text":"

                Release

                "},{"location":"nebula-dashboard/2.deploy-dashboard/","title":"Deploy Dashboard Community Edition","text":"

                This topic will describe how to deploy NebulaGraph Dashboard in detail.

                To download and compile the latest source code of Dashboard, follow the instructions on the nebula dashboard GitHub page.

                "},{"location":"nebula-dashboard/2.deploy-dashboard/#prerequisites","title":"Prerequisites","text":"

                Before you deploy Dashboard, you must confirm that:

                • The NebulaGraph services are deployed and started. For more information, see NebulaGraph Database Manual.
                • Before the installation starts, the following ports are not occupied.

                  • 9200
                  • 9100
                  • 9090
                  • 8090
                  • 7003
                • The node-exporter is installed on the machines to be monitored. For details on installation, see Prometheus document.
                "},{"location":"nebula-dashboard/2.deploy-dashboard/#steps","title":"Steps","text":"
                1. Download the tar packagenebula-dashboard-3.4.0.x86_64.tar.gz as needed.

                2. Run tar -xvf nebula-dashboard-3.4.0.x86_64.tar.gz to decompress the installation package.

                3. Modify the config.yaml file in nebula-dashboard.

                  The configuration file contains the configurations of four dependent services and configurations of clusters. The descriptions of the dependent services are as follows.

                  Service Default port Description nebula-http-gateway 8090 Provides HTTP ports for cluster services to execute nGQL statements to interact with the NebulaGraph database. nebula-stats-exporter 9200 Collects the performance metrics in the cluster, including the IP addresses, versions, and monitoring metrics (such as the number of queries, the latency of queries, the latency of heartbeats, and so on). node-exporter 9100 Collects the source information of nodes in the cluster, including the CPU, memory, load, disk, and network. prometheus 9090 The time series database that stores monitoring data.

                  The descriptions of the configuration file are as follows.

                  port: 7003   # Web service port.\ngateway:\n  ip: hostIP   # The IP of the machine where the Dashboard is deployed.\n  port: 8090\n  https: false  # Whether to enable HTTPS.\n  runmode: dev  # Program running mode, including dev, test, and prod. It is used to distinguish between different running environments generally.\nstats-exporter:\n  ip: hostIP   # The IP of the machine where the Dashboard is deployed.\n  nebulaPort: 9200\n  https: false  # Whether to enable HTTPS.\nnode-exporter:\n  - ip: nebulaHostIP_1 # The IP of the machine where the NebulaGraph is deployed.\n    port: 9100\n    https: false # Whether to enable HTTPS.\n# - ip: nebulaHostIP_2\n#   port: 9100\n#   https: false\nprometheus:\n  ip: hostIP    # The IP of the machine where the Dashboard is deployed.\n  prometheusPort: 9090\n  https: false  # Whether to enable HTTPS.\n  scrape_interval: 5s  # The interval for collecting the monitoring data, which is 1 minute by default.\n  evaluation_interval: 5s  # The interval for running alert rules, which is 1 minute by default.\n# Cluster node info\nnebula-cluster:\n  name: 'default' # Cluster name\n  metad:\n    - name: metad0\n      endpointIP: nebulaMetadIP  # The IP of the machine where the Meta service is deployed.\n      port: 9559\n      endpointPort: 19559\n  # - name: metad1\n  #   endpointIP: nebulaMetadIP\n  #   port: 9559\n  #   endpointPort: 19559  \n  graphd:\n    - name: graphd0\n      endpointIP: nebulaGraphdIP  # The IP of the machine where the Graph service is deployed.\n      port: 9669\n      endpointPort: 19669\n  # - name: graphd1\n  #   endpointIP: nebulaGraphdIP\n  #   port: 9669\n  #   endpointPort: 19669  \n  storaged:\n    - name: storaged0\n      endpointIP: nebulaStoragedIP  # The IP of the machine where the Storage service is deployed.\n      port: 9779\n      endpointPort: 19779\n  # - name: storaged1\n  #   endpointIP: nebulaStoragedIP\n  #   port: 9779\n  #   endpointPort: 19779  \n
                4. Run ./dashboard.service start all to start the services.

                "},{"location":"nebula-dashboard/2.deploy-dashboard/#deploy_dashboard_with_docker_compose","title":"Deploy Dashboard with Docker Compose","text":"

                If you are deploying Dashboard using docker, you should also modify the configuration file config.yaml, and then run docker-compose up -d to start the container.

                Note

                If you change the port number in config.yaml, the port number in docker-compose.yaml needs to be consistent as well.

                Run docker-compose stop to stop the container.

                "},{"location":"nebula-dashboard/2.deploy-dashboard/#manage_services_in_dashboard","title":"Manage services in Dashboard","text":"

                You can use the dashboard.service script to start, restart, stop, and check the Dashboard services.

                sudo <dashboard_path>/dashboard.service\n[-v] [-h]\n<start|restart|stop|status>  <prometheus|webserver|exporter|gateway|all>\n
                Parameter Description dashboard_path Dashboard installation path. -v Display detailed debugging information. -h Display help information. start Start the target services. restart Restart the target services. stop Stop the target services. status Check the status of the target services. prometheus Set the prometheus service as the target service. webserver Set the webserver Service as the target service. exporter Set the exporter Service as the target service. gateway Set the gateway Service as the target service. all Set all the Dashboard services as the target services.

                Note

                To view the Dashboard version, run the command ./dashboard.service -version.

                "},{"location":"nebula-dashboard/2.deploy-dashboard/#next_to_do","title":"Next to do","text":"

                Connect to Dashboard

                "},{"location":"nebula-dashboard/3.connect-dashboard/","title":"Connect Dashboard","text":"

                After Dashboard is deployed, you can log in and use Dashboard on the browser.

                "},{"location":"nebula-dashboard/3.connect-dashboard/#prerequisites","title":"Prerequisites","text":"
                • The Dashboard services are started. For more information, see Deploy Dashboard.
                • We recommend you to use the Chrome browser of the version above 89. Otherwise, there may be compatibility issues.
                "},{"location":"nebula-dashboard/3.connect-dashboard/#procedures","title":"Procedures","text":"
                1. Confirm the IP address of the machine where the Dashboard service is installed. Enter <IP>:7003 in the browser to open the login page.

                2. Enter the username and the passwords of the NebulaGraph database.

                  • If authentication is enabled, you can log in with the created accounts.
                  • If authentication is not enabled, you can only log in using root as the username and random characters as the password.

                  To enable authentication, see Authentication.

                3. Select the NebulaGraph version to be used.

                4. Click Login.

                "},{"location":"nebula-dashboard/4.use-dashboard/","title":"Dashboard","text":"

                NebulaGraph Dashboard consists of three parts: Machine, Service, and Management. This topic will describe them in detail.

                "},{"location":"nebula-dashboard/4.use-dashboard/#overview","title":"Overview","text":""},{"location":"nebula-dashboard/4.use-dashboard/#machine","title":"Machine","text":"

                Click Machine->Overview to enter the machine overview page.

                On this page, you can view the variation of CPU, Memory, Load, Disk, and Network In/Out quickly.

                • By default, you can view the monitoring data for a maximum of 14 days. You can also select a time range or quickly select the latest 1 hour, 6 hours, 12 hours, 1 day, 3 days, 7 days, or 14 days.
                • By default, you can view the monitoring data of all the instances in clusters. You can select the instances you want to view in the instance box.
                • By default, the monitoring information page will not be updated automatically. You can set the update frequency of the monitoring information page globally or click the button to update the page manually.
                • To set a base line, click the button.
                • To view the detailed monitoring information, click the button. In this example, select Load for details. The figure is as follows.

                  • You can set the monitoring time range, instance, update frequency and base line.
                  • You can search for or select the target metric. For details about monitoring metrics, see Metrics.
                  • You can temporarily hide nodes that you do not need to view.
                  • You can click the button to view the detailed monitoring information.
                "},{"location":"nebula-dashboard/4.use-dashboard/#service","title":"Service","text":"

                Click Service->Overview to enter the service overview page.

                On this page, you can view the information of Graph, Meta, and Storage services quickly. In the upper right corner, the number of normal services and abnormal services will be displayed.

                Note

                In the Service page, only two monitoring metrics can be set for each service, which can be adjusted by clicking the Set up button.

                • By default, you can view the monitoring data for a maximum of 14 days. You can also select a time range or quickly select the latest 1 hour, 6 hours, 12 hours, 1 day, 3 days, 7 days, or 14 days.
                • By default, you can view the monitoring data of all the instances in clusters. You can select the instances you want to view in the instance box.
                • By default, the monitoring information page will not be updated automatically. You can set the update frequency of the monitoring information page globally or click the button to update the page manually.
                • You can view the status of all the services in a cluster.
                • To view the detailed monitoring information, click the button. In this example, select Graph for details. The figure is as follows.

                  • You can set the monitoring time range, instance, update frequency, period, aggregation and base line.
                  • You can search for or select the target metric. For details of monitoring metrics, see Monitor parameter.
                  • You can temporarily hide nodes that you do not need to view.
                  • You can click the button to view the detailed monitoring information.
                  • The Graph service supports a set of space-level metrics. For more information, see the following section Graph space.
                "},{"location":"nebula-dashboard/4.use-dashboard/#graph_space","title":"Graph space","text":"

                Note

                Before using graph space metrics, you need to set enable_space_level_metrics to true in the Graph service. For details, see [Graph Service configuration](../5.configurations-and-logs/1.configurations/3.graph-config.md.

                Space-level metric incompatibility

                If a graph space name contains special characters, the corresponding metric data of that graph space may not be displayed.

                The service monitoring page can also monitor graph space level metrics. Only when the behavior of a graph space metric is triggered, you can specify the graph space to view information about the corresponding graph space metric.

                Space graph metrics record the information of different graph spaces separately. Currently, only the Graph service supports a set of space-level metrics.

                For information about the space graph metrics, see Graph space.

                "},{"location":"nebula-dashboard/4.use-dashboard/#management","title":"Management","text":""},{"location":"nebula-dashboard/4.use-dashboard/#overview_info","title":"Overview info","text":"

                On the Overview Info page, you can see the information of the NebulaGraph cluster, including Storage leader distribution, Storage service details, versions and hosts information of each NebulaGraph service, and partition distribution and details.

                "},{"location":"nebula-dashboard/4.use-dashboard/#storage_leader_distribution","title":"Storage Leader Distribution","text":"

                In this section, the number of Leaders and the Leader distribution will be shown.

                • Click the Balance Leader button in the upper right corner to distribute Leaders evenly and quickly in the NebulaGraph cluster. For details about the Leader, see Storage Service.
                • Click Detail in the upper right corner to view the details of the Leader distribution.
                "},{"location":"nebula-dashboard/4.use-dashboard/#version","title":"Version","text":"

                In this section, the version and host information of each NebulaGraph service will be shown. Click Detail in the upper right corner to view the details of the version and host information.

                "},{"location":"nebula-dashboard/4.use-dashboard/#service_information","title":"Service information","text":"

                In this section, the information on Storage services will be shown. The parameter description is as follows:

                Parameter Description Host The IP address of the host. Port The port of the host. Status The host status. Git Info Sha The commit ID of the current version. Leader Count The number of Leaders. Partition Distribution The distribution of partitions. Leader Distribution The distribution of Leaders.

                Click Detail in the upper right corner to view the details of the Storage service information.

                "},{"location":"nebula-dashboard/4.use-dashboard/#partition_distribution","title":"Partition Distribution","text":"

                Select the specified graph space in the upper left corner, you can view the distribution of partitions in the specified graph space. You can see the IP addresses and ports of all Storage services in the cluster, and the number of partitions in each Storage service.

                Click Detail in the upper right corner to view more details.

                "},{"location":"nebula-dashboard/4.use-dashboard/#partition_information","title":"Partition information","text":"

                In this section, the information on partitions will be shown. Before viewing the partition information, you need to select a graph space in the upper left corner. The parameter description is as follows:

                Parameter Description Partition ID The ID of the partition. Leader The IP address and port of the leader. Peers The IP addresses and ports of all the replicas. Losts The IP addresses and ports of faulty replicas.

                Click Detail in the upper right corner to view details. You can also enter the partition ID into the input box in the upper right corner of the details page to filter the shown data.

                "},{"location":"nebula-dashboard/4.use-dashboard/#config","title":"Config","text":"

                It shows the configuration of the NebulaGraph service. NebulaGraph Dashboard Community Edition does not support online modification of configurations for now.

                "},{"location":"nebula-dashboard/4.use-dashboard/#others","title":"Others","text":"

                In the lower left corner of the page, you can:

                • Sign out
                • Switch between Chinese and English
                • View the current Dashboard release
                • View the user manual and forum
                • Fold the sidebar
                "},{"location":"nebula-dashboard/6.monitor-parameter/","title":"Metrics","text":"

                This topic will describe the monitoring metrics in NebulaGraph Dashboard.

                "},{"location":"nebula-dashboard/6.monitor-parameter/#machine","title":"Machine","text":"

                Note

                • All the machine metrics listed below are for the Linux operating system.
                • The default unit in Disk and Network is byte. The unit will change with the data magnitude as the page displays. For example, when the flow is less than 1 KB/s, the unit will be Bytes/s.
                • For versions of Dashboard Community Edition greater than v1.0.2, the memory occupied by Buff and Cache will not be counted in the memory usage.
                "},{"location":"nebula-dashboard/6.monitor-parameter/#cpu","title":"CPU","text":"Parameter Description cpu_utilization The percentage of used CPU. cpu_idle The percentage of idled CPU. cpu_wait The percentage of CPU waiting for IO operations. cpu_user The percentage of CPU used by users. cpu_system The percentage of CPU used by the system."},{"location":"nebula-dashboard/6.monitor-parameter/#memory","title":"Memory","text":"Parameter Description memory_utilization The percentage of used memory. memory_used The memory space used (not including caches). memory_free The memory space available."},{"location":"nebula-dashboard/6.monitor-parameter/#load","title":"Load","text":"Parameter Description load_1m The average load of the system in the last 1 minute. load_5m The average load of the system in the last 5 minutes. load_15m The average load of the system in the last 15 minutes."},{"location":"nebula-dashboard/6.monitor-parameter/#disk","title":"Disk","text":"Parameter Description disk_used_percentage The disk utilization percentage. disk_used The disk space used. disk_free The disk space available. disk_readbytes The number of bytes that the system reads in the disk per second. disk_writebytes The number of bytes that the system writes in the disk per second. disk_readiops The number of read queries that the disk receives per second. disk_writeiops The number of write queries that the disk receives per second. inode_utilization The percentage of used inode."},{"location":"nebula-dashboard/6.monitor-parameter/#network","title":"Network","text":"Parameter Description network_in_rate The number of bytes that the network card receives per second. network_out_rate The number of bytes that the network card sends out per second. network_in_errs The number of wrong bytes that the network card receives per second. network_out_errs The number of wrong bytes that the network card sends out per second. network_in_packets The number of data packages that the network card receives per second. network_out_packets The number of data packages that the network card sends out per second."},{"location":"nebula-dashboard/6.monitor-parameter/#service","title":"Service","text":""},{"location":"nebula-dashboard/6.monitor-parameter/#period","title":"Period","text":"

                The period is the time range of counting metrics. It currently supports 5 seconds, 60 seconds, 600 seconds, and 3600 seconds, which respectively represent the last 5 seconds, the last 1 minute, the last 10 minutes, and the last 1 hour.

                "},{"location":"nebula-dashboard/6.monitor-parameter/#metric_methods","title":"Metric methods","text":"Parameter Description rate The average rate of operations per second in a period. sum The sum of operations in the period. avg The average latency in the cycle. P75 The 75th percentile latency. P95 The 95th percentile latency. P99 The 99th percentile latency. P999 The 99.9th percentile latency.

                Note

                Dashboard collects the following metrics from the NebulaGraph core, but only shows the metrics that are important to it.

                "},{"location":"nebula-dashboard/6.monitor-parameter/#graph","title":"Graph","text":"Parameter Description num_active_queries The number of changes in the number of active queries. Formula: The number of started queries minus the number of finished queries within a specified time. num_active_sessions The number of changes in the number of active sessions. Formula: The number of logged in sessions minus the number of logged out sessions within a specified time.For example, when querying num_active_sessions.sum.5, if there were 10 sessions logged in and 30 sessions logged out in the last 5 seconds, the value of this metric is -20 (10-30). num_aggregate_executors The number of executions for the Aggregation operator. num_auth_failed_sessions_bad_username_password The number of sessions where authentication failed due to incorrect username and password. num_auth_failed_sessions_out_of_max_allowed The number of sessions that failed to authenticate logins because the value of the parameter FLAG_OUT_OF_MAX_ALLOWED_CONNECTIONS was exceeded. num_auth_failed_sessions The number of sessions in which login authentication failed. num_indexscan_executors The number of executions for index scan operators. num_killed_queries The number of killed queries. num_opened_sessions The number of sessions connected to the server. num_queries The number of queries. num_query_errors_leader_changes The number of the raft leader changes due to query errors. num_query_errors The number of query errors. num_reclaimed_expired_sessions The number of expired sessions actively reclaimed by the server. num_rpc_sent_to_metad_failed The number of failed RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_metad The number of RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_storaged_failed The number of failed RPC requests that the Graphd service sent to the Storaged service. num_rpc_sent_to_storaged The number of RPC requests that the Graphd service sent to the Storaged service. num_sentences The number of statements received by the Graphd service. num_slow_queries The number of slow queries. num_sort_executors The number of executions for the Sort operator. optimizer_latency_us The latency of executing optimizer statements. query_latency_us The latency of queries. slow_query_latency_us The latency of slow queries. num_queries_hit_memory_watermark The number of queries reached the memory watermark. resp_part_completeness The completeness of the partial success. You need to set accept_partial_success to true in the graph configuration first."},{"location":"nebula-dashboard/6.monitor-parameter/#meta","title":"Meta","text":"Parameter Description commit_log_latency_us The latency of committing logs in Raft. commit_snapshot_latency_us The latency of committing snapshots in Raft. heartbeat_latency_us The latency of heartbeats. num_heartbeats The number of heartbeats. num_raft_votes The number of votes in Raft. transfer_leader_latency_us The latency of transferring the raft leader. num_agent_heartbeats The number of heartbeats for the AgentHBProcessor. agent_heartbeat_latency_us The latency of the AgentHBProcessor. replicate_log_latency_us The latency of replicating the log record to most nodes by Raft. num_send_snapshot The number of times that Raft sends snapshots to other nodes. append_log_latency_us The latency of replicating the log record to a single node by Raft. append_wal_latency_us The Raft write latency for a single WAL. num_grant_votes The number of times that Raft votes for other nodes. num_start_elect The number of times that Raft starts an election."},{"location":"nebula-dashboard/6.monitor-parameter/#storage","title":"Storage","text":"Parameter Description add_edges_latency_us The latency of adding edges. add_vertices_latency_us The latency of adding vertices. commit_log_latency_us The latency of committing logs in Raft. commit_snapshot_latency_us The latency of committing snapshots in Raft. delete_edges_latency_us The latency of deleting edges. delete_vertices_latency_us The latency of deleting vertices. get_neighbors_latency_us The latency of querying neighbor vertices. get_dst_by_src_latency_us The latency of querying the destination vertex by the source vertex. num_get_prop The number of executions for the GetPropProcessor. num_get_neighbors_errors The number of execution errors for the GetNeighborsProcessor. num_get_dst_by_src_errors The number of execution errors for the GetDstBySrcProcessor. get_prop_latency_us The latency of executions for the GetPropProcessor. num_edges_deleted The number of deleted edges. num_edges_inserted The number of inserted edges. num_raft_votes The number of votes in Raft. num_rpc_sent_to_metad_failed The number of failed RPC requests that the Storage service sent to the Meta service. num_rpc_sent_to_metad The number of RPC requests that the Storaged service sent to the Metad service. num_tags_deleted The number of deleted tags. num_vertices_deleted The number of deleted vertices. num_vertices_inserted The number of inserted vertices. transfer_leader_latency_us The latency of transferring the raft leader. lookup_latency_us The latency of executions for the LookupProcessor. num_lookup_errors The number of execution errors for the LookupProcessor. num_scan_vertex The number of executions for the ScanVertexProcessor. num_scan_vertex_errors The number of execution errors for the ScanVertexProcessor. update_edge_latency_us The latency of executions for the UpdateEdgeProcessor. num_update_vertex The number of executions for the UpdateVertexProcessor. num_update_vertex_errors The number of execution errors for the UpdateVertexProcessor. kv_get_latency_us The latency of executions for the Getprocessor. kv_put_latency_us The latency of executions for the PutProcessor. kv_remove_latency_us The latency of executions for the RemoveProcessor. num_kv_get_errors The number of execution errors for the GetProcessor. num_kv_get The number of executions for the GetProcessor. num_kv_put_errors The number of execution errors for the PutProcessor. num_kv_put The number of executions for the PutProcessor. num_kv_remove_errors The number of execution errors for the RemoveProcessor. num_kv_remove The number of executions for the RemoveProcessor. forward_tranx_latency_us The latency of transmission. scan_edge_latency_us The latency of executions for the ScanEdgeProcessor. num_scan_edge_errors The number of execution errors for the ScanEdgeProcessor. num_scan_edge The number of executions for the ScanEdgeProcessor. scan_vertex_latency_us The latency of executions for the ScanVertexProcessor. num_add_edges The number of times that edges are added. num_add_edges_errors The number of errors when adding edges. num_add_vertices The number of times that vertices are added. num_start_elect The number of times that Raft starts an election. num_add_vertices_errors The number of errors when adding vertices. num_delete_vertices_errors The number of errors when deleting vertices. append_log_latency_us The latency of replicating the log record to a single node by Raft. num_grant_votes The number of times that Raft votes for other nodes. replicate_log_latency_us The latency of replicating the log record to most nodes by Raft. num_delete_tags The number of times that tags are deleted. num_delete_tags_errors The number of errors when deleting tags. num_delete_edges The number of edge deletions. num_delete_edges_errors The number of errors when deleting edges num_send_snapshot The number of times that snapshots are sent. update_vertex_latency_us The latency of executions for the UpdateVertexProcessor. append_wal_latency_us The Raft write latency for a single WAL. num_update_edge The number of executions for the UpdateEdgeProcessor. delete_tags_latency_us The latency of deleting tags. num_update_edge_errors The number of execution errors for the UpdateEdgeProcessor. num_get_neighbors The number of executions for the GetNeighborsProcessor. num_get_dst_by_src The number of executions for the GetDstBySrcProcessor. num_get_prop_errors The number of execution errors for the GetPropProcessor. num_delete_vertices The number of times that vertices are deleted. num_lookup The number of executions for the LookupProcessor. num_sync_data The number of times the Storage service synchronizes data from the Drainer. num_sync_data_errors The number of errors that occur when the Storage service synchronizes data from the Drainer. sync_data_latency_us The latency of the Storage service synchronizing data from the Drainer."},{"location":"nebula-dashboard/6.monitor-parameter/#graph_space","title":"Graph space","text":"

                Note

                Space-level metrics are created dynamically, so that only when the behavior is triggered in the graph space, the corresponding metric is created and can be queried by the user.

                Parameter Description num_active_queries The number of queries currently being executed. num_queries The number of queries. num_sentences The number of statements received by the Graphd service. optimizer_latency_us The latency of executing optimizer statements. query_latency_us The latency of queries. num_slow_queries The number of slow queries. num_query_errors The number of query errors. num_query_errors_leader_changes The number of raft leader changes due to query errors. num_killed_queries The number of killed queries. num_aggregate_executors The number of executions for the Aggregation operator. num_sort_executors The number of executions for the Sort operator. num_indexscan_executors The number of executions for index scan operators. num_auth_failed_sessions_bad_username_password The number of sessions where authentication failed due to incorrect username and password. num_auth_failed_sessions The number of sessions in which login authentication failed. num_opened_sessions The number of sessions connected to the server. num_queries_hit_memory_watermark The number of queries reached the memory watermark. num_reclaimed_expired_sessions The number of expired sessions actively reclaimed by the server. num_rpc_sent_to_metad_failed The number of failed RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_metad The number of RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_storaged_failed The number of failed RPC requests that the Graphd service sent to the Storaged service. num_rpc_sent_to_storaged The number of RPC requests that the Graphd service sent to the Storaged service. slow_query_latency_us The latency of slow queries."},{"location":"nebula-studio/system-settings/","title":"Global settings","text":"

                This topic introduces the global settings of NebulaGraph Studio, including language switching and beta functions.

                • Language: Switch between Chinese and English.
                • Beta functions: Switch on/off beta features, which include view schema, text to query and AI import.

                  The text to query and AI import features need to be configured with AI-related configurations. See below for detailed configurations.

                "},{"location":"nebula-studio/system-settings/#text_to_query_and_ai_import","title":"Text to query and AI import","text":"

                The text to query and AI import are artificial intelligence features developed based on the large language model (LLM) and require the following parameters to be configured.

                Parameter Description API type The API type for AI. Valid values are OpenAI and Aliyun. URL The API URL. Fill in the correct URL format according to the corresponding API type. For example, https://{your-resource-name}.openai.azure.com/openai/deployments/{deployment-id}/chat/completions?api-version={api-version}\u3002 Key The key used to validate the API. The key is required when using an online large language model, and is optional depending on the actual settings when using an offline large language model. Model The version of the large language model. The model is required when using an online large language model, and is optional depending on the actual settings when using an offline large language model. Max text length The maximum length for receiving or generating a single piece of text. Unit: byte."},{"location":"nebula-studio/about-studio/st-ug-limitations/","title":"Limitations","text":"

                This topic introduces the limitations of Studio.

                "},{"location":"nebula-studio/about-studio/st-ug-limitations/#architecture","title":"Architecture","text":"

                For now, Studio v3.x supports x86_64 architecture only.

                "},{"location":"nebula-studio/about-studio/st-ug-limitations/#upload_data","title":"Upload data","text":"

                Only CSV files without headers can be uploaded, but no limitations are applied to the size and store period for a single file. The maximum data volume depends on the storage capacity of your machine.

                "},{"location":"nebula-studio/about-studio/st-ug-limitations/#data_backup","title":"Data backup","text":"

                For now, only supports exporting query results in CSV format on Console, and other data backup methods are not supported.

                "},{"location":"nebula-studio/about-studio/st-ug-limitations/#ngql_statements","title":"nGQL statements","text":"

                On the Console page of Docker-based and RPM-based Studio v3.x, all the nGQL syntaxes except these are supported:

                • USE <space_name>: You cannot run such a statement on the Console page to choose a graph space. As an alternative, you can click a graph space name in the drop-down list of Current Graph Space.
                • You cannot use line breaks (\\). As an alternative, you can use the Enter key to split a line.
                "},{"location":"nebula-studio/about-studio/st-ug-limitations/#browser","title":"Browser","text":"

                We recommend that you use the latest version of Chrome to get access to Studio. Otherwise, some features may not work properly.

                "},{"location":"nebula-studio/about-studio/st-ug-what-is-graph-studio/","title":"What is NebulaGraph Studio","text":"

                NebulaGraph Studio (Studio in short) is a browser-based visualization tool to manage NebulaGraph. It provides you with a graphical user interface to manipulate graph schemas, import data, and run nGQL statements to retrieve data. With Studio, you can quickly become a graph exploration expert from scratch. You can view the latest source code in the NebulaGraph GitHub repository, see nebula-studio for details.

                Note

                You can also try some functions online in Studio.

                "},{"location":"nebula-studio/about-studio/st-ug-what-is-graph-studio/#deployment","title":"Deployment","text":"

                In addition to deploying Studio with RPM-based, DEB-based, or Tar-based packages, or with Docker, you can also deploy Studio with Helm in the Kubernetes cluster. For more information, see Deploy Studio.

                The functions of the above four deployment methods are the same and may be restricted when using Studio. For more information, see Limitations.

                "},{"location":"nebula-studio/about-studio/st-ug-what-is-graph-studio/#features","title":"Features","text":"

                Studio can easily manage NebulaGraph data, with the following functions:

                • On the Schema page, you can use the graphical user interface to create the space, Tag, Edge Type, Index, and view the statistics on the graph. It helps you quickly get started with NebulaGraph.
                • On the Import page, you can operate batch import of vertex and edge data with clicks, and view a real-time import log.
                • On the Console page, you can run nGQL statements and read the results in a human-friendly way.
                "},{"location":"nebula-studio/about-studio/st-ug-what-is-graph-studio/#scenarios","title":"Scenarios","text":"

                You can use Studio in one of these scenarios:

                • You have a dataset, and you want to explore and analyze data in a visualized way. You can use Docker Compose to deploy NebulaGraph and then use Studio to explore or analyze data in a visualized way.
                • You are a beginner of nGQL (NebulaGraph Query Language) and you prefer to use a GUI rather than a command-line interface (CLI) to learn the language.
                "},{"location":"nebula-studio/about-studio/st-ug-what-is-graph-studio/#authentication","title":"Authentication","text":"

                Authentication is not enabled in NebulaGraph by default. Users can log into Studio with the root account and any password.

                When NebulaGraph enables authentication, users can only sign into Studio with the specified account. For more information, see Authentication.

                "},{"location":"nebula-studio/about-studio/st-ug-what-is-graph-studio/#version_compatibility","title":"Version compatibility","text":"

                Note

                The Studio version is released independently of the NebulaGraph core. The correspondence between the versions of Studio and the NebulaGraph core, as shown in the table below.

                NebulaGraph version Studio version 3.6.0 3.8.0, 3.7.0 3.5.0 3.7.0 3.4.0 ~ 3.4.1 3.7.0\u30013.6.0\u30013.5.1\u30013.5.0 3.3.0 3.5.1\u30013.5.0 3.0.0 \uff5e 3.2.0 3.4.1\u30013.4.0 3.1.0 3.3.2 3.0.0 3.2.x 2.6.x 3.1.x 2.6.x 3.1.x 2.0 & 2.0.1 2.x 1.x 1.x"},{"location":"nebula-studio/about-studio/st-ug-what-is-graph-studio/#check_updates","title":"Check updates","text":"

                Studio is in development. Users can view the latest releases features through Changelog.

                To view the Changelog, on the upper-right corner of the page, click the version and then New version.

                "},{"location":"nebula-studio/deploy-connect/st-ug-connect/","title":"Connect to NebulaGraph","text":"

                After successfully launching Studio, you need to configure to connect to NebulaGraph. This topic describes how Studio connects to the NebulaGraph database.

                "},{"location":"nebula-studio/deploy-connect/st-ug-connect/#prerequisites","title":"Prerequisites","text":"

                Before connecting to the NebulaGraph database, you need to confirm the following information:

                • The NebulaGraph services and Studio are started. For more information, see Deploy Studio.
                • You have the local IP address and the port used by the Graph service of NebulaGraph. The default port is 9669.
                • You have a NebulaGraph account and its password.
                "},{"location":"nebula-studio/deploy-connect/st-ug-connect/#procedure","title":"Procedure","text":"

                To connect Studio to NebulaGraph, follow these steps:

                1. Type http://<ip_address>:7001 in the address bar of your browser.

                  The following login page shows that Studio starts successfully.

                2. On the Config Server page of Studio, configure these fields:

                  • Graphd IP address: Enter the IP address of the Graph service of NebulaGraph. For example, 192.168.10.100.

                    Note

                    • When NebulaGraph and Studio are deployed on the same machine, you must enter the IP address of the machine, instead of 127.0.0.1 or localhost.
                    • When connecting to a NebulaGraph database on a new browser tab, a new session will overwrite the sessions of the old tab. If you need to log in to multiple NebulaGraph databases simultaneously, you can use a different browser or non-trace mode.
                  • Port: The port of the Graph service. The default port is 9669.
                  • Username and Password: Fill in the log in account according to the authentication settings of NebulaGraph.

                    • If authentication is not enabled, you can use root and any password as the username and its password.
                    • If authentication is enabled and no account information has been created, you can only log in as GOD role and use root and nebula as the username and its password.
                    • If authentication is enabled and different users are created and assigned roles, users in different roles log in with their accounts and passwords.
                3. After the configuration, click the Connect button.

                  Note

                  One session continues for up to 30 minutes. If you do not operate Studio within 30 minutes, the active session will time out and you must connect to NebulaGraph again.

                A welcome page is displayed on the first login, showing the relevant functions according to the usage process, and the test datasets can be automatically downloaded and imported.

                To visit the welcome page, click .

                "},{"location":"nebula-studio/deploy-connect/st-ug-connect/#next_to_do","title":"Next to do","text":"

                When Studio is successfully connected to NebulaGraph, you can do these operations:

                • Create a schema on the Console page or on the Schema page.
                • Batch import data on the Import page.
                • Execute nGQL statements on the Console page.
                • Design the schema visually on the Schema drafting page.

                Note

                The permissions of an account determine the operations that can be performed. For details, see Roles and privileges.

                "},{"location":"nebula-studio/deploy-connect/st-ug-connect/#log_out","title":"Log out","text":"

                If you want to reconnect to NebulaGraph, you can log out and reconfigure the database.

                Click the user profile picture in the upper right corner, and choose Log out.

                "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/","title":"Deploy Studio","text":"

                This topic describes how to deploy Studio locally by RPM, DEB, tar package and Docker.

                "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#rpm-based_studio","title":"RPM-based Studio","text":""},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#prerequisites","title":"Prerequisites","text":"

                Before you deploy RPM-based Studio, you must confirm that:

                • The NebulaGraph services are deployed and started. For more information, see NebulaGraph Database Manual.
                • The Linux distribution is CentOS, install lsof.
                • Before the installation starts, the following ports are not occupied.

                  Port Description 7001 Web service provided by Studio.
                "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#install","title":"Install","text":"
                1. Select and download the RPM package according to your needs. It is recommended to select the latest version. Common links are as follows:

                  Installation package Checksum NebulaGraph version nebula-graph-studio-3.9.0.x86_64.rpm nebula-graph-studio-3.9.0.x86_64.rpm.sha256 master
                2. Use sudo rpm -i <rpm_name> to install RPM package.

                  For example, install Studio 3.9.0, use the following command. The default installation path is /usr/local/nebula-graph-studio.

                  $ sudo rpm -i nebula-graph-studio-3.9.0.x86_64.rpm\n

                  You can also install it to the specified path using the following command:

                  $ sudo rpm -i nebula-graph-studio-3.9.0.x86_64.rpm --prefix=<path> \n

                  When the screen returns the following message, it means that the PRM-based Studio has been successfully started.

                  Start installing NebulaGraph Studio now...\nNebulaGraph Studio has been installed.\nNebulaGraph Studio started automatically.\n
                3. When Studio is started, use http://<ip address>:7001 to get access to Studio.

                  If you can see the Config Server page on the browser, Studio is started successfully.

                "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#uninstall","title":"Uninstall","text":"

                You can uninstall Studio using the following command:

                $ sudo rpm -e nebula-graph-studio-3.9.0.x86_64\n

                If these lines are returned, PRM-based Studio has been uninstalled.

                NebulaGraph Studio removed, bye~\n
                "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#exception_handling","title":"Exception handling","text":"

                If the automatic start fails during the installation process or you want to manually start or stop the service, use the following command:

                • Start the service manually
                  $ bash /usr/local/nebula-graph-studio/scripts/rpm/start.sh\n
                • Stop the service manually
                  $ bash /usr/local/nebula-graph-studio/scripts/rpm/stop.sh\n

                If you encounter an error bind EADDRINUSE 0.0.0.0:7001 when starting the service, you can use the following command to check port 7001 usage.

                $ lsof -i:7001\n

                If the port is occupied and the process on that port cannot be terminated, you can modify the startup port within the studio configuration and restart the service.

                //Modify the studio service configuration. The default path to the configuration file is `/usr/local/nebula-graph-studio`.\n$ vi etc/studio-api.yam\n\n//Modify this port number and change it to any \nPort: 7001\n\n//Restart service\n$ systemctl restart nebula-graph-studio.service\n
                "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#deb-based_studio","title":"DEB-based Studio","text":""},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#prerequisites_1","title":"Prerequisites","text":"

                Before you deploy DEB-based Studio, you must do a check of these:

                • The NebulaGraph services are deployed and started. For more information, see NebulaGraph Database Manual.
                • The Linux distribution is Ubuntu.
                • Before the installation starts, the following ports are not occupied.

                  Port Description 7001 Web service provided by Studio
                • The path /usr/lib/systemd/system exists in the system. If not, create it manually.
                "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#install_1","title":"Install","text":"
                1. Select and download the DEB package according to your needs. It is recommended to select the latest version. Common links are as follows:

                  Installation package Checksum NebulaGraph version nebula-graph-studio-3.9.0.x86_64.deb nebula-graph-studio-3.9.0.x86_64.deb.sha256 master
                2. Use sudo dpkg -i <deb_name> to install DEB package.

                  For example, install Studio 3.9.0, use the following command:

                  $ sudo dpkg -i nebula-graph-studio-3.9.0.x86_64.deb\n
                3. When Studio is started, use http://<ip address>:7001 to get access to Studio.

                  If you can see the Config Server page on the browser, Studio is started successfully.

                "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#uninstall_1","title":"Uninstall","text":"

                You can uninstall Studio using the following command:

                $ sudo dpkg -r nebula-graph-studio\n
                "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#tar-based_studio","title":"tar-based Studio","text":""},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#prerequisites_2","title":"Prerequisites","text":"

                Before you deploy tar-based Studio, you must do a check of these:

                • The NebulaGraph services are deployed and started. For more information, see NebulaGraph Database Manual.
                • Before the installation starts, the following ports are not occupied.

                  Port Description 7001 Web service provided by Studio
                "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#install_and_deploy","title":"Install and deploy","text":"
                1. Select and download the tar package according to your needs. It is recommended to select the latest version. Common links are as follows:

                  Installation package Studio version nebula-graph-studio-3.9.0.x86_64.tar.gz 3.9.0
                2. Use tar -xvf to decompress the tar package.

                  $ tar -xvf nebula-graph-studio-3.9.0.x86_64.tar.gz\n
                3. Deploy and start nebula-graph-studio.

                  $ cd nebula-graph-studio\n$ ./server\n
                4. When Studio is started, use http://<ip address>:7001 to get access to Studio.

                  If you can see the Config Server page on the browser, Studio is started successfully.

                "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#stop_service","title":"Stop Service","text":"

                You can use kill pid to stop the service:

                $ kill $(lsof -t -i :7001) #stop nebula-graph-studio\n

                "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#docker-based_studio","title":"Docker-based Studio","text":""},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#prerequisites_3","title":"Prerequisites","text":"

                Before you deploy Docker-based Studio, you must do a check of these:

                • The NebulaGraph services are deployed and started. For more information, see NebulaGraph Database Manual.
                • On the machine where Studio will run, Docker Compose is installed and started. For more information, see Docker Compose Documentation.
                • Before the installation starts, the following ports are not occupied.

                  Port Description 7001 Web service provided by Studio
                "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#procedure","title":"Procedure","text":"

                To deploy and start Docker-based Studio, run the following commands. Here we use NebulaGraph vmaster for demonstration:

                1. Download the configuration files for the deployment.

                  Installation package NebulaGraph version nebula-graph-studio-3.9.0.tar.gz master
                2. Create the nebula-graph-studio-3.9.0 directory and decompress the installation package to the directory.

                  $ mkdir nebula-graph-studio-3.9.0 -zxvf nebula-graph-studio-3.9.0.gz -C nebula-graph-studio-3.9.0\n
                3. Change to the nebula-graph-studio-3.9.0 directory.

                  $ cd nebula-graph-studio-3.9.0\n

                4. Pull the Docker image of Studio.

                  $ docker-compose pull\n
                5. Build and start Docker-based Studio. In this command, -d is to run the containers in the background.

                  $ docker-compose up -d\n

                  If these lines are returned, Docker-based Studio v3.x is deployed and started.

                  Creating docker_web_1      ... done\n
                6. When Docker-based Studio is started, use http://<ip address>:7001 to get access to Studio.

                  Note

                  Run ifconfig or ipconfig to get the IP address of the machine where Docker-based Studio is running. On the machine running Docker-based Studio, you can use http://localhost:7001 to get access to Studio.

                  If you can see the Config Server page on the browser, Docker-based Studio is started successfully.

                "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#helm-based_studio","title":"Helm-based Studio","text":"

                This section describes how to deploy Studio with Helm.

                "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#prerequisites_4","title":"Prerequisites","text":"

                Before installing Studio, you need to install the following software and ensure the correct version of the software:

                Software Requirement Kubernetes >= 1.14 Helm >= 3.2.0"},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#install_2","title":"Install","text":"
                1. Use Git to clone the source code of Studio to the host.

                  $ git clone https://github.com/vesoft-inc/nebula-studio.git\n
                2. Make the nebula-studio directory the current working directory.

                  bash $ cd nebula-studio

                3. Assume using release name:my-studio, installed Studio in Helm Chart.

                  $ helm upgrade --install my-studio --set service.type=NodePort --set service.port=30070 deployment/helm\n

                  The configuration parameters of the Helm Chart are described below.

                  Parameter Default value Description replicaCount 0 The number of replicas for Deployment. image.nebulaStudio.name vesoft/nebula-graph-studio The image name of nebula-graph-studio. image.nebulaStudio.version v3.9.0 The image version of nebula-graph-studio. service.type ClusterIP The service type, which should be one of NodePort, ClusterIP, and LoadBalancer. service.port 7001 The expose port for nebula-graph-studio's web. service.nodePort 32701 The proxy port for accessing nebula-studio outside kubernetes cluster. resources.nebulaStudio {} The resource limits/requests for nebula-studio. persistent.storageClassName \"\" The name of storageClass. The default value will be used if not specified. persistent.size 5Gi The persistent volume size.
                4. When Studio is started, use http://<node_address>:30070/ to get access to Studio.

                  If you can see the Config Server page on the browser, Studio is started successfully.

                "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#uninstall_2","title":"Uninstall","text":"
                 $ helm uninstall my-studio\n
                "},{"location":"nebula-studio/deploy-connect/st-ug-deploy/#next_to_do","title":"Next to do","text":"

                On the Config Server page, connect Docker-based Studio to NebulaGraph. For more information, see Connect to NebulaGraph.

                "},{"location":"nebula-studio/manage-schema/st-ug-crud-edge-type/","title":"Manage edge types","text":"

                After a graph space is created in NebulaGraph, you can create edge types. With Studio, you can choose to use the Console page or the Schema page to create, retrieve, update, or delete edge types. This topic introduces how to use the Schema page to operate edge types in a graph space only.

                "},{"location":"nebula-studio/manage-schema/st-ug-crud-edge-type/#prerequisites","title":"Prerequisites","text":"

                To operate an edge type on the Schema page of Studio, you must do a check of these:

                • Studio is connected to NebulaGraph.
                • A graph space is created.
                • Your account has the authority of GOD, ADMIN, or DBA.
                "},{"location":"nebula-studio/manage-schema/st-ug-crud-edge-type/#create_an_edge_type","title":"Create an edge type","text":"
                1. In the toolbar, click the Schema tab.

                2. In the Graph Space List page, find a graph space and then click its name or click Schema in the Operations column.

                3. In the Current Graph Space field, confirm the name of the graph space. If necessary, you can choose another name to change the graph space.

                4. Click the Edge Type tab and click the + Create button.

                5. On the Create Edge Type page, do these settings:

                  • Name: Specify an appropriate name for the edge type. In this example, serve is used.
                  • Comment (Optional): Enter the description for edge type.
                  • Define Properties (Optional): If necessary, click + Add Property to do these settings:

                    • Enter a property name.
                    • Select a data type.
                    • Select whether to allow null values..
                    • (Optional) Enter the default value.
                    • (Optional) Enter the description.
                  • Set TTL (Time To Live) (Optional): If no index is set for the edge type, you can set the TTL configuration: In the upper left corner of the Set TTL panel, click the check box to expand the panel, and configure TTL_COL and TTL_ DURATION (in seconds). For more information about both parameters, see TTL configuration.
                6. When the preceding settings are completed, in the Equivalent to the following nGQL statement panel, you can see the nGQL statement equivalent to these settings.

                7. Confirm the settings and then click the + Create button.

                When the edge type is created successfully, the Define Properties panel shows all its properties on the list.

                "},{"location":"nebula-studio/manage-schema/st-ug-crud-edge-type/#edit_an_edge_type","title":"Edit an edge type","text":"
                1. In the toolbar, click the Schema tab.

                2. In the Graph Space List page, find a graph space and then click its name or click Schema in the Operations column.

                3. In the Current Graph Space field, confirm the name of the graph space. If necessary, you can choose another name to change the graph space.

                4. Click the Edge Type tab, find an edge type and then click the button in the Operations column.

                5. On the Edit page, do these operations:

                  • To edit a comment: Click Edit on the right of Comment.
                  • To edit a property: On the Define Properties panel, find a property, click Edit, and then change the data type or the default value.
                  • To delete a property: On the Define Properties panel, find a property, click Delete.
                  • To add more properties: On the Define Properties panel, click the Add Property button to add a new property.
                  • To set the TTL configuration: In the upper left corner of the Set TTL panel, click the check box and then set TTL.
                  • To delete the TTL configuration: When the Set TTL panel is expanded, in the upper left corner of the panel, click the check box to delete the configuration.
                  • To edit the TTL configuration: On the Set TTL panel, click Edit and then change the configuration of TTL_COL and TTL_DURATION (in seconds).

                    Note

                    For information about the coexistence problem of TTL and index, see TTL.

                "},{"location":"nebula-studio/manage-schema/st-ug-crud-edge-type/#delete_an_edge_type","title":"Delete an Edge type","text":"

                Danger

                Confirm the impact before deleting the Edge type. The deleted data cannot be restored if it is not backup.

                1. In the toolbar, click the Schema tab.

                2. In the Graph Space List page, find a graph space and then click its name or click Schema in the Operations column.

                3. In the Current Graph Space field, confirm the name of the graph space. If necessary, you can choose another name to change the graph space.

                4. Click the Edge Type tab, find an edge type and then click the button in the Operations column.

                5. Click OK to confirm in the pop-up dialog box.

                "},{"location":"nebula-studio/manage-schema/st-ug-crud-edge-type/#next_to_do","title":"Next to do","text":"

                After the edge type is created, you can use the Console page to insert edge data one by one manually or use the Import page to bulk import edge data.

                "},{"location":"nebula-studio/manage-schema/st-ug-crud-index/","title":"Manage indexes","text":"

                You can create an index for a Tag and/or an Edge type. An index lets traversal start from vertices or edges with the same property and it can make a query more efficient. With Studio, you can use the Console page or the Schema page to create, retrieve, and delete indexes. This topic introduces how to use the Schema page to operate an index only.

                Note

                You can create an index when a Tag or an Edge Type is created. But an index can decrease the write speed during data import. We recommend that you import data firstly and then create and rebuild an index. For more information, see Index overview.

                "},{"location":"nebula-studio/manage-schema/st-ug-crud-index/#prerequisites","title":"Prerequisites","text":"

                To operate an index on the Schema page of Studio, you must do a check of these:

                • Studio is connected to NebulaGraph.
                • A graph Space, Tags, and Edge Types are created.
                • Your account has the authority of GOD, ADMIN, or DBA.
                "},{"location":"nebula-studio/manage-schema/st-ug-crud-index/#create_an_index","title":"Create an index","text":"
                1. In the toolbar, click the Schema tab.

                2. In the Graph Space List page, find a graph space and then click its name or click Schema in the Operations column.

                3. In the Current Graph Space field, confirm the name of the graph space. If necessary, you can choose another name to change the graph space.

                4. Click the Index tab and then click the + Create button.

                5. On the Create page, do these settings:

                  • Index Type: Choose to create an index for a tag or for an edge type. In this example, Edge Type is chosen.
                  • Associated tag name: Choose a tag name or an edge type name. In this example, follow is chosen.
                  • Index Name: Specify a name for the new index. In this example, follow_index is used.
                  • Comment (Optional): Enter the description for index.
                  • Indexed Properties (Optional): Click Add property, and then, in the dialog box, choose a property. If necessary, repeat this step to choose more properties. You can drag the properties to sort them. In this example, degree is chosen.

                    Note

                    The order of the indexed properties has an effect on the result of the LOOKUP statement. For more information, see nGQL Manual.

                6. When the settings are done, the Equivalent to the following nGQL statement panel shows the statement equivalent to the settings.

                7. Confirm the settings and then click the + Create button. When an index is created, the index list shows the new index.

                "},{"location":"nebula-studio/manage-schema/st-ug-crud-index/#view_indexes","title":"View indexes","text":"
                1. In the toolbar, click the Schema tab.

                2. In the Graph Space List page, find a graph space and then click its name or click Schema in the Operations column.

                3. In the Current Graph Space field, confirm the name of the graph space. If necessary, you can choose another name to change the graph space.

                4. Click the Index tab, in the upper left corner, choose an index type, Tag or Edge Type.

                5. In the list, find an index and click its row. All its details are shown in the expanded row.

                "},{"location":"nebula-studio/manage-schema/st-ug-crud-index/#rebuild_indexes","title":"Rebuild indexes","text":"
                1. In the toolbar, click the Schema tab.

                2. In the Graph Space List page, find a graph space and then click its name or click Schema in the Operations column.

                3. In the Current Graph Space field, confirm the name of the graph space. If necessary, you can choose another name to change the graph space.

                4. Click the Index tab, in the upper left corner, choose an index type, Tag or Edge Type.

                5. Click the Index tab, find an index and then click the button Rebuild in the Operations column.

                Note

                For more Information, see REBUILD INDEX.

                "},{"location":"nebula-studio/manage-schema/st-ug-crud-index/#delete_an_index","title":"Delete an index","text":"

                To delete an index on Schema, follow these steps:

                1. In the toolbar, click the Schema tab.

                2. In the Graph Space List page, find a graph space and then click its name or click Schema in the Operations column.

                3. In the Current Graph Space field, confirm the name of the graph space. If necessary, you can choose another name to change the graph space.

                4. Click the Index tab, find an index and then click the button in the Operations column.

                5. Click OK to confirm in the pop-up dialog box.

                "},{"location":"nebula-studio/manage-schema/st-ug-crud-space/","title":"Manage graph spaces","text":"

                When Studio is connected to NebulaGraph, you can create or delete a graph space. You can use the Console page or the Schema page to do these operations. This article only introduces how to use the Schema page to operate graph spaces in NebulaGraph.

                "},{"location":"nebula-studio/manage-schema/st-ug-crud-space/#prerequisites","title":"Prerequisites","text":"

                To operate a graph space on the Schema page of Studio, you must do a check of these:

                • Studio is connected to NebulaGraph.
                • Your account has the authority of GOD. It means that:
                  • If the authentication is enabled in NebulaGraph, you can use root and any password to sign in to Studio.
                  • If the authentication is disabled in NebulaGraph, you must use root and its password to sign in to Studio.
                "},{"location":"nebula-studio/manage-schema/st-ug-crud-space/#create_a_graph_space","title":"Create a graph space","text":"
                1. In the toolbar, click the Schema tab.

                2. In the Graph Space List page, click Create Space, do these settings:

                  • Name: Specify a name to the new graph space. In this example, basketballplayer is used. The name must be unique in the database.
                  • Vid Type: The data types of VIDs are restricted to FIXED_STRING(<N>) or INT64. A graph space can only select one VID type. In this example, FIXED_STRING(32) is used. For more information, see VID.
                  • Comment: Enter the description for graph space. The maximum length is 256 bytes. By default, there will be no comments on a space. But in this example, Statistics of basketball players is used.
                  • Optional Parameters: Set the values of partition_num and replica_factor respectively. In this example, these parameters are set to 100 and 1 respectively. For more information, see CREATE SPACE syntax.

                  In the Equivalent to the following nGQL statement panel, you can see the statement equivalent to the preceding settings.

                  CREATE SPACE basketballplayer (partition_num = 100, replica_factor = 1, vid_type = FIXED_STRING(32)) COMMENT = \"Statistics of basketball players\"\n
                3. Confirm the settings and then click the + Create button. If the graph space is created successfully, you can see it on the graph space list.

                "},{"location":"nebula-studio/manage-schema/st-ug-crud-space/#delete_a_graph_space","title":"Delete a graph space","text":"

                Danger

                Deleting the space will delete all the data in it, and the deleted data cannot be restored if it is not backed up.

                1. In the toolbar, click the Schema tab.

                2. In the Graph Space List, find the space you want to be deleted, and click Delete Graph Space in the Operation column.

                3. On the dialog box, confirm the information and then click OK.

                "},{"location":"nebula-studio/manage-schema/st-ug-crud-space/#next_to_do","title":"Next to do","text":"

                After a graph space is created, you can create or edit a schema, including:

                • Operate tags
                • Operate edge types
                • Operate indexes
                "},{"location":"nebula-studio/manage-schema/st-ug-crud-tag/","title":"Manage tags","text":"

                After a graph space is created in NebulaGraph, you can create tags. With Studio, you can use the Console page or the Schema page to create, retrieve, update, or delete tags. This topic introduces how to use the Schema page to operate tags in a graph space only.

                "},{"location":"nebula-studio/manage-schema/st-ug-crud-tag/#prerequisites","title":"Prerequisites","text":"

                To operate a tag on the Schema page of Studio, you must do a check of these:

                • Studio is connected to NebulaGraph.
                • A graph space is created.
                • Your account has the authority of GOD, ADMIN, or DBA.
                "},{"location":"nebula-studio/manage-schema/st-ug-crud-tag/#create_a_tag","title":"Create a tag","text":"
                1. In the toolbar, click the Schema tab.

                2. In the Graph Space List page, find a graph space and then click its name or click Schema in the Operations column.

                3. In the Current Graph Space field, confirm the name of the graph space. If necessary, you can choose another name to change the graph space.

                4. Click the Tag tab and click the + Create button.

                5. On the Create page, do these settings:

                  • Name: Specify an appropriate name for the tag. In this example, course is specified.
                  • Comment (Optional): Enter the description for tag.
                  • Define Properties (Optional): If necessary, click + Add Property to do these settings:

                    • Enter a property name.
                    • Select a data type.
                    • Select whether to allow null values..
                    • (Optional) Enter the default value.
                    • (Optional) Enter the description.
                    • Set TTL (Time To Live) (Optional): If no index is set for the tag, you can set the TTL configuration: In the upper left corner of the Set TTL panel, click the check box to expand the panel, and configure TTL_COL and TTL_ DURATION (in seconds). For more information about both parameters, see TTL configuration.
                6. When the preceding settings are completed, in the Equivalent to the following nGQL statement panel, you can see the nGQL statement equivalent to these settings.

                7. Confirm the settings and then click the + Create button.

                When the tag is created successfully, the Define Properties panel shows all its properties on the list.

                "},{"location":"nebula-studio/manage-schema/st-ug-crud-tag/#edit_a_tag","title":"Edit a tag","text":"
                1. In the toolbar, click the Schema tab.

                2. In the Graph Space List page, find a graph space and then click its name or click Schema in the Operations column.

                3. In the Current Graph Space field, confirm the name of the graph space. If necessary, you can choose another name to change the graph space.

                4. Click the Tag tab, find a tag and then click the button in the Operations column.

                5. On the Edit page, do these operations:

                  • To edit a Comment: Click Edit on the right of Comment.
                  • To edit a property: On the Define Properties panel, find a property, click Edit, and then change the data type or the default value.
                  • To delete a property: On the Define Properties panel, find a property, click Delete.
                  • To add more properties: On the Define Properties panel, click the Add Property button to add a new property.
                  • To set the TTL configuration: In the upper left corner of the Set TTL panel, click the check box and then set TTL.
                  • To delete the TTL configuration: When the Set TTL panel is expanded, in the upper left corner of the panel, click the check box to delete the configuration.
                  • To edit the TTL configuration: On the Set TTL panel, click Edit and then change the configuration of TTL_COL and TTL_DURATION (in seconds).

                    Note

                    For the problem of the coexistence of TTL and index, see TTL.

                "},{"location":"nebula-studio/manage-schema/st-ug-crud-tag/#delete_a_tag","title":"Delete a tag","text":"

                Danger

                Confirm the impact before deleting the tag. The deleted data cannot be restored if it is not backup.

                1. In the toolbar, click the Schema tab.

                2. In the Graph Space List page, find a graph space and then click its name or click Schema in the Operations column.

                3. In the Current Graph Space field, confirm the name of the graph space. If necessary, you can choose another name to change the graph space.

                4. Click the Tag tab, find an tag and then click the button in the Operations column.

                5. Click OK to confirm delete a tag in the pop-up dialog box.

                "},{"location":"nebula-studio/manage-schema/st-ug-crud-tag/#next_to_do","title":"Next to do","text":"

                After the tag is created, you can use the Console page to insert vertex data one by one manually or use the Import page to bulk import vertex data.

                "},{"location":"nebula-studio/manage-schema/st-ug-view-schema/","title":"View Schema","text":"

                Users can visually view schemas in NebulaGraph Studio.

                "},{"location":"nebula-studio/manage-schema/st-ug-view-schema/#steps","title":"Steps","text":"
                1. In the toolbar, click the Schema tab.

                2. In the Graph Space List page, find a graph space and then click its name or click Schema in the Operations column.

                3. Click View Schema tab and click the Get Schema button.

                "},{"location":"nebula-studio/manage-schema/st-ug-view-schema/#other_operations","title":"Other operations","text":"

                In the Graph Space List page, find a graph space and then perform the following operations in the Operations column:

                • View Schema DDL: Displays schema creation statements for the graph space, including graph spaces, tags, edge types, and indexes.
                • Clone Graph Space: Clones the schema of the graph space to a new graph space.
                • Delete Graph pace: Deletes the graph space, including the schema and all vertices and edges.
                "},{"location":"nebula-studio/quick-start/draft/","title":"Schema drafting","text":"

                Studio supports the schema drafting function. Users can design their schemas on the canvas to visually display the relationships between vertices and edges, and apply the schema to a specified graph space after the design is completed.

                "},{"location":"nebula-studio/quick-start/draft/#features","title":"Features","text":"
                • Design schema visually.
                • Applies schema to a specified graph space.
                • Export the schema as a PNG image.
                "},{"location":"nebula-studio/quick-start/draft/#entry","title":"Entry","text":"

                At the top navigation bar, click .

                "},{"location":"nebula-studio/quick-start/draft/#design_schema","title":"Design schema","text":"

                The following steps take designing the schema of the basketballplayer dataset as an example to demonstrate how to use the schema drafting function.

                1. At the upper left corner of the page, click New.
                2. Create a tag by selecting the appropriate color tag under the canvas. You can hold down the left button and drag the tag into the canvas.
                3. Click the tag. On the right side of the page, you need to fill in the name of the tag as player, and add two properties name and age.
                4. Create a tag again. The name of the tag is team, and the property is name.
                5. Connect from the anchor point of the tag player to the anchor point of the tag team. Click the generated edge, fill in the name of the edge type as serve, and add two properties start_year and end_year.
                6. Connect from an anchor point of the tag player to another one of its own. Click the generated edge, fill in the name of the edge type as follow, and add a property degree.
                7. After the design is complete, click at the top of the page to change the name of the draft, and then click at the top right corner to save the draft.

                "},{"location":"nebula-studio/quick-start/draft/#apply_schema","title":"Apply schema","text":"
                1. Select the draft that you want to import from the Draft list on the left side of the page, and then click Apply to Space at the upper right corner.
                2. Import the schema to a new or existing space, and click Confirm.

                  Note

                  • For more information about the parameters for creating a graph space, see CREATE SPACE.
                  • If the same schema exists in the graph space, the import operation fails, and the system prompts you to modify the name or change the graph space.
                "},{"location":"nebula-studio/quick-start/draft/#modify_schema","title":"Modify schema","text":"

                Select the schema draft that you want to modify from the Draft list on the left side of the page. Click at the upper right corner after the modification.

                Note

                The graph space to which the schema has been applied will not be modified synchronously.

                "},{"location":"nebula-studio/quick-start/draft/#delete_schema","title":"Delete schema","text":"

                Select the schema draft that you want to delete from the Draft list on the left side of the page, click X at the upper right corner of the thumbnail, and confirm to delete it.

                "},{"location":"nebula-studio/quick-start/draft/#export_schema","title":"Export Schema","text":"

                Click at the upper right corner to export the schema as a PNG image.

                "},{"location":"nebula-studio/quick-start/st-ug-console/","title":"Console","text":"

                Studio console interface is shown as follows.

                "},{"location":"nebula-studio/quick-start/st-ug-console/#entry","title":"Entry","text":"

                In the top navigation bar, click Console.

                "},{"location":"nebula-studio/quick-start/st-ug-console/#overview","title":"Overview","text":"

                The following table lists the functions on the console page.

                number function descriptions 1 View the schema Display the schemas of the graph spaces. 2 Select a space Select a space in the graph space drop down list. The console does not support using the USE <space_name> statement to switch graph spaces. 3 Favorites Click the button to expand the favorites. Select a statement, and it automatically populates the input box. 4 History list Click the button to view the execution history. In the execution history list, click one of the statements, and the statement is automatically populates the input box. The list provides the record of the last 15 statements.Type / in the input box to quickly select a historical query statement. 5 Clean input box Click the button to clear the content populated in the input box. 6 Run After entering the nGQL statement in the input box, click the button to start running the statement. 7 Input box The area where the nGQL statement is entered. The statement displays different colors depending on the schemas or character strings. Code auto-completion is supported. You can quickly enter a tag or edge type based on the schema.You can input multiple statements and run them at the same time by using the separator ;. Use the symbol // to add comments.Support right-clicking on a selected statement and then performing operations such as cut, copy, or run. 8 Custom parameters display Click the button to expand the custom parameters for the parameterized query. For details, see Manage parameters. 9 Statement running status After running the nGQL statement, the statement running status is displayed. If the statement runs successfully, the statement is displayed in green. If the statement fails, the statement is displayed in red. 10 Add to favorites Click the button to save the statement as a favorite. The button for the favorite statement is colored in yellow. 11 Export CSV file or PNG file After running the nGQL statement to return the result, when the result is in the Table window, click the button to export as a CSV file. Switch to the Graph window and click the button to export the results as a CSV file or a PNG image. 12 Expand/hide execution results Click the button to hide the result or click to expand the result. 13 Close execution results Click the button to close the result returned by this nGQL statement. 14 Table window Display the results returned by the nGQL statement in a table. 15 Plan window Display the execution plan. If an EXPLAIN or PROFILE statement is executed, the window presents the execution plan in visual form. See the description of the execution plan below. 16 Graph window Display the results returned by the nGQL statement in a graph if the results contain complete vertex and edge information. Click the button on the right to view the overview panel. 17 AI Assistant You can chat with an AI assistant to convert natural language instructions into nGQL query statements and then copy the nGQL statements into the input box with one click. This feature needs to be set up and enabled in the system settings before use.Note: The schema information of the current graph space is sent to the large language model when you chat with the assistant. Please pay attention to information security.You can click the text2match toggle to switch between general Q&A and query Q&A. The query Q&A can convert the natural language instructions to nGQL query statements."},{"location":"nebula-studio/quick-start/st-ug-console/#execution_plan_descriptions","title":"Execution plan descriptions","text":"

                The Studio can display the execution plan of the statement. The execution plan descriptions are as follows.

                No. Description 1 An EXPLAIN or PROFILE statement. 2 The operators used by the execution plan, which are sorted according to the execution duration. The top three operators are labeled as red, orange, and yellow, respectively. Clicking on an operator directly selects the corresponding operator in the operator execution flow and displays the operator information.Note: The PROFILE statement actually executes the statement, and the actual execution durations can be obtained and sorted. The EXPLAIN statement does not execute the statement, and all operators are considered to have the same execution duration and are all labeled as red. 3 The operator execution flow. For each operator, the following information is displayed: in-parameters, out-parameters, and total execution duration.The Select, Loop, PassThrough, and Start operators have independent color schemes.The arrows show the direction of data flow and the number of rows. The thicker the arrows, the more rows of data. You can click on the operator to check the details of the operator on the right side. 4 The details of the operator, divided into Profiling data and Operator info.Profiling data shows the performance data of the operator, including the rows of data received, the execution time, the total time, etc.Operator info shows the detailed operation information of the operator. 5 Zoom out, zoom in, or reverse the execution flow. 6 The duration of the statement. 7 Full screen or cancel full screen."},{"location":"nebula-studio/quick-start/st-ug-create-schema/","title":"Create a schema","text":"

                To batch import data into NebulaGraph, you must have a graph schema. You can create a schema on the Console page or on the Schema page of Studio.

                Note

                • Users can use nebula-console to create a schema. For more information, see NebulaGraph Manual and Get started with NebulaGraph.
                • Users can use the Schema drafting function to design schema visually. For more information, see Schema drafting.
                "},{"location":"nebula-studio/quick-start/st-ug-create-schema/#prerequisites","title":"Prerequisites","text":"

                To create a graph schema on Studio, you must do a check of these:

                • Studio is connected to NebulaGraph.
                • Your account has the privilege of GOD, ADMIN, or DBA.
                • The schema is designed.
                • A graph space is created.

                Note

                If no graph space exists and your account has the GOD privilege, you can create a graph space on the Console page. For more information, see CREATE SPACE.

                "},{"location":"nebula-studio/quick-start/st-ug-create-schema/#create_a_schema_with_schema","title":"Create a schema with Schema","text":"
                1. Create tags. For more information, see Operate tags.

                2. Create edge types. For more information, see Operate edge types.

                "},{"location":"nebula-studio/quick-start/st-ug-create-schema/#create_a_schema_with_console","title":"Create a schema with Console","text":"
                1. In the toolbar, click the Console tab.

                2. In the Current Graph Space field, choose a graph space name. In this example, basketballplayer is used.

                3. In the input box, enter these statements one by one and click the button Run.

                  // To create a tag named \"player\", with two property\nnebula> CREATE TAG player(name string, age int);\n\n// To create a tag named \"team\", with one property\nnebula> CREATE TAG team(name string);\n\n// To create an edge type named \"follow\", with one properties\nnebula> CREATE EDGE follow(degree int);\n\n// To create an edge type named \"serve\", with two properties\nnebula> CREATE EDGE serve(start_year int, end_year int);\n

                If the preceding statements are executed successfully, the schema is created. You can run the statements as follows to view the schema.

                // To list all the tags in the current graph space\nnebula> SHOW TAGS;\n\n// To list all the edge types in the current graph space\nnebula> SHOW EDGES;\n\n// To view the definition of the tags and edge types\nDESCRIBE TAG player;\nDESCRIBE TAG team;\nDESCRIBE EDGE follow;\nDESCRIBE EDGE serve;\n

                If the schema is created successfully, in the result window, you can see the definition of the tags and edge types.

                "},{"location":"nebula-studio/quick-start/st-ug-create-schema/#next_to_do","title":"Next to do","text":"

                When a schema is created, you can import data.

                "},{"location":"nebula-studio/quick-start/st-ug-import-data/","title":"Import data","text":"

                Studio supports importing data in CSV format into NebulaGraph through an interface.

                "},{"location":"nebula-studio/quick-start/st-ug-import-data/#prerequisites","title":"Prerequisites","text":"

                To batch import data, do a check of these:

                • The schema has been created in NebulaGraph.
                • The CSV files meet the demands of the schema.
                • The account has GOD, ADMIN, or DBA permissions. For details, see Built-in Roles.
                "},{"location":"nebula-studio/quick-start/st-ug-import-data/#entry","title":"Entry","text":"

                In the top navigation bar, click Import.

                "},{"location":"nebula-studio/quick-start/st-ug-import-data/#steps","title":"Steps","text":"

                Importing data is divided into 2 parts, creating a new data source and creating an import task, which will be described in detail next.

                Note

                You can also import tasks via the AI Import feature, which is a beta feature that needs to be enabled and configured in the system settings before use.

                "},{"location":"nebula-studio/quick-start/st-ug-import-data/#create_a_new_data_source","title":"Create a new data source","text":"

                Click New Data Source in the upper right corner of the page to set the data source and its related settings. Currently, 3 types of data sources are supported.

                Type of data source Description Cloud storage Add cloud storage as the CSV file source, which only supports cloud services compatible with the Amazon S3 interface. SFTP Add SFTP as the CSV file source. Local file Upload a local CSV file. The file size can not exceed 200 MB, please put the files exceeding the limit into other types of data sources.

                Note

                • When uploading a local CSV file, you can select more than one CSV file at one time.
                • After adding a data source, you can click Data Source Management at the top of the page and switch tabs to view the details of different types of data sources, and you can also edit or delete data sources.
                "},{"location":"nebula-studio/quick-start/st-ug-import-data/#create_an_import_task","title":"Create an import task","text":"
                1. Click New Import at the top left corner of the page to complete the following settings:

                  Caution

                  Users can also click Import Template to download the sample configuration file example.yaml, configure it and then upload the configuration file. Configure in the same way as NebulaGraph Importer.

                  • Space: The name of the graph space where the data needs to be imported.
                  • Task Name: automatically generated by default, can be modified.
                  • (optional)More configuration: You can customize the concurrency, batch size, retry times, read concurrency, and import concurrency.
                  • Map Tags:

                    1. Click Add Tag, and then select the tag within the added tags below.
                    2. Click Add source file, select Data Source Type and File Path in Data source file, find the file you need to import, and then click Add.
                    3. In the preview page, set the file separator and whether to carry the table header, and then click Confirm.
                    4. Select the corresponding column for VID in VID Columns. You can select multiple columns to be merged into a VID, and you can also add a prefix or suffix to the VID.
                    5. Select the corresponding column for the attribute in the properties box. For properties that can be NULL or have DEFAULT set, you can leave the corresponding column unspecified.
                    6. Repeat steps 2 to 5 to import all the data files of the Tag selected.
                    7. Repeat steps 1 to 6 to import all Tag data.
                  • Map Edges: Same operation as map tags.

                2. After completing the settings, click Import, enter the password for the NebulaGraph account, and confirm.

                After the import task is created, you can view the progress of the import task in the Import Data tab, which supports operations such as filtering tasks based on graph space, editing the task, viewing logs, downloading logs, reimporting, downloading configuration files, and deleting tasks.

                "},{"location":"nebula-studio/quick-start/st-ug-import-data/#import_data_using_ai_import","title":"Import data using AI Import","text":"

                Note

                After the import task is completed, check whether the data is imported successfully. If not, it is recommended that you check the task logs on the import page to see whether issues such as timeouts, privacy policy violations, service interruption, or encoding errors occurred.

                1. Click AI Import in the upper left corner of the page to complete the following settings:

                  • File: Select the files for import via AI import. Only local single file or local directory is currently supported. You can select only one local file or directory each time. The file needs to be a plain text file.
                  • Import Graph Space: The graph space where the data is to be imported. The schema of the graph space needs to be created in advance.
                  • Export NGQL File Path: The path to the exported nGQL file, which usually does not need to be modified.
                  • Attach Prompt: You can attach additional prompts to guide the data import process. The precision of the prompts directly influences the accuracy of the import results.

                  You can view the LLM parameters related to AI import in the configuration file.

                2. After completing the settings, click Next to confirm the file for import and the AI URL to be used, and then click Start.

                After the import task is created, you can view the progress of the import task on the Import Data tab, which supports operations such as viewing logs, downloading logs, reimporting, and deleting tasks.

                "},{"location":"nebula-studio/quick-start/st-ug-import-data/#next","title":"Next","text":"

                After completing the data import, users can access the Console page.

                "},{"location":"nebula-studio/quick-start/st-ug-plan-schema/","title":"Design a schema","text":"

                To manipulate graph data in NebulaGraph with Studio, you must have a graph schema. This article introduces how to design a graph schema for NebulaGraph.

                A graph schema for NebulaGraph must have these essential elements:

                • Tags (namely vertex types) and their properties.
                • Edge types and their properties.

                In this article, you can install the sample data set basketballplayer and use it to explore a pre-designed schema.

                This table gives all the essential elements of the schema.

                Element Name Property name (Data type) Description Tag player - name (string) - age (int) Represents the player. Tag team - name (string) Represents the team. Edge type serve - start_year (int) - end_year (int) Represent the players behavior.This behavior connects the player to the team, and the direction is from player to team. Edge type follow - degree (int) Represent the players behavior.This behavior connects the player to the player, and the direction is from a player to a player.

                This figure shows the relationship (serve/follow) between a player and a team.

                "},{"location":"nebula-studio/troubleshooting/st-ug-config-server-errors/","title":"Connecting to the database error","text":""},{"location":"nebula-studio/troubleshooting/st-ug-config-server-errors/#problem_description","title":"Problem description","text":"

                According to the connect Studio operation, it prompts failed.

                "},{"location":"nebula-studio/troubleshooting/st-ug-config-server-errors/#possible_causes_and_solutions","title":"Possible causes and solutions","text":"

                You can troubleshoot the problem by following the steps below.

                "},{"location":"nebula-studio/troubleshooting/st-ug-config-server-errors/#step1_confirm_that_the_format_of_the_host_field_is_correct","title":"Step1: Confirm that the format of the Host field is correct","text":"

                You must fill in the IP address (graph_server_ip) and port of the NebulaGraph database Graph service. If no changes are made, the port defaults to 9669. Even if NebulaGraph and Studio are deployed on the current machine, you must use the local IP address instead of 127.0.0.1, localhost or 0.0.0.0.

                "},{"location":"nebula-studio/troubleshooting/st-ug-config-server-errors/#step2_confirm_that_the_username_and_password_are_correct","title":"Step2: Confirm that the username and password are correct","text":"

                If authentication is not enabled, you can use root and any password as the username and its password.

                If authentication is enabled and different users are created and assigned roles, users in different roles log in with their accounts and passwords.

                "},{"location":"nebula-studio/troubleshooting/st-ug-config-server-errors/#step3_confirm_that_nebulagraph_service_is_normal","title":"Step3: Confirm that NebulaGraph service is normal","text":"

                Check NebulaGraph service status. Regarding the operation of viewing services:

                • If you compile and deploy NebulaGraph on a Linux server, refer to the NebulaGraph service.
                • If you use NebulaGraph deployed by Docker Compose and RPM, refer to the NebulaGraph service status and ports.

                If the NebulaGraph service is normal, proceed to Step 4 to continue troubleshooting. Otherwise, please restart NebulaGraph service.

                Note

                If you used docker-compose up -d to satrt NebulaGraph before, you must run the docker-compose down to stop NebulaGraph.

                "},{"location":"nebula-studio/troubleshooting/st-ug-config-server-errors/#step4_confirm_the_network_connection_of_the_graph_service_is_normal","title":"Step4: Confirm the network connection of the Graph service is normal","text":"

                Run a command (for example, telnet 9669) on the Studio machine to confirm whether NebulaGraph's Graph service network connection is normal.

                If the connection fails, check according to the following steps:

                • If Studio and NebulaGraph are on the same machine, check if the port is exposed.
                • If Studio and NebulaGraph are not on the same machine, check the network configuration of the NebulaGraph server, such as firewall, gateway, and port.

                If you cannot connect to the NebulaGraph service after troubleshooting with the above steps, please go to the NebulaGraph forum for consultation.

                "},{"location":"nebula-studio/troubleshooting/st-ug-connection-errors/","title":"Cannot access to Studio","text":""},{"location":"nebula-studio/troubleshooting/st-ug-connection-errors/#problem_description","title":"Problem description","text":"

                I follow the document description and visit 127.0.0.1:7001 or 0.0.0.0:7001 after starting Studio, why can\u2019t I open the page?

                "},{"location":"nebula-studio/troubleshooting/st-ug-connection-errors/#possible_causes_and_solutions","title":"Possible causes and solutions","text":"

                You can troubleshoot the problem by following the steps below.

                "},{"location":"nebula-studio/troubleshooting/st-ug-connection-errors/#step1_confirm_system_architecture","title":"Step1: Confirm system architecture","text":"

                It is necessary to confirm whether the machine where the Studio service is deployed is of x86_64 architecture. Currently, Studio only supports x86_64 architecture.

                "},{"location":"nebula-studio/troubleshooting/st-ug-connection-errors/#step2_check_if_the_studio_service_starts_normally","title":"Step2: Check if the Studio service starts normally","text":"
                • For Studio deployed with RPM or DEB packages, use systemctl status nebula-graph-studio to see the running status.
                • For Studio deployed with tar package, use sudo lsof -i:7001 to check port status.
                • For Studio deployed with docker, use docker-compose ps to see the running status. Run docker-compose ps to check if the service has started normally.

                  If the service is normal, the return result is as follows. Among them, the State column should all be displayed as Up.

                      Name                          Command               State               Ports\n------------------------------------------------------------------------------------------------------\nnebula-web-docker_client_1     ./nebula-go-api                  Up      0.0.0.0:32782->8080/tcp\nnebula-web-docker_importer_1   nebula-importer --port=569 ...   Up      0.0.0.0:32783->5699/tcp\nnebula-web-docker_nginx_1      /docker-entrypoint.sh ngin ...   Up      0.0.0.0:7001->7001/tcp, 80/tcp\nnebula-web-docker_web_1        docker-entrypoint.sh npm r ...   Up      0.0.0.0:32784->7001/tcp\n

                If the above result is not returned, stop Studio and restart it first. For details, refer to Deploy Studio.

                !!! note

                    If you used `docker-compose up -d` to satrt NebulaGraph before, you must run the `docker-compose down` to stop NebulaGraph.\n
                "},{"location":"nebula-studio/troubleshooting/st-ug-connection-errors/#step3_confirm_address","title":"Step3: Confirm address","text":"

                If Studio and the browser are on the same machine, users can use localhost:7001, 127.0.0.1:7001 or 0.0.0.0:7001 in the browser to access Studio.

                If Studio and the browser are not on the same machine, you must enter <studio_server_ip>:7001 in the browser. Among them, studio_server_ip refers to the IP address of the machine where the Studio service is deployed.

                "},{"location":"nebula-studio/troubleshooting/st-ug-connection-errors/#step4_confirm_network_connection","title":"Step4: Confirm network connection","text":"

                Run curl <studio_server_ip>:7001 -I to confirm if it is normal. If it returns HTTP/1.1 200 OK, it means that the network is connected normally.

                If the connection is refused, check according to the following steps:

                If the connection fails, check according to the following steps:

                • If Studio and NebulaGraph are on the same machine, check if the port is exposed.
                • If Studio and NebulaGraph are not on the same machine, check the network configuration of the NebulaGraph server, such as firewall, gateway, and port.

                If you cannot connect to the NebulaGraph service after troubleshooting with the above steps, please go to the NebulaGraph forum for consultation.

                "},{"location":"nebula-studio/troubleshooting/st-ug-faq/","title":"FAQ","text":"

                Why can't I use a function?

                If you find that a function cannot be used, it is recommended to troubleshoot the problem according to the following steps:

                1. Confirm that NebulaGraph is the latest version. If you use Docker Compose to deploy the NebulaGraph database, it is recommended to run docker-compose pull && docker-compose up -d to pull the latest Docker image and start the container.

                2. Confirm that Studio is the latest version. For more information, refer to check updates.

                3. Search the nebula forum, nebula and nebula-studio projects on the GitHub to confirm if there are already similar problems.

                4. If none of the above steps solve the problem, you can submit a problem on the forum.

                "},{"location":"reuse/source-monitoring-metrics/","title":"Source monitoring metrics","text":""},{"location":"reuse/source-monitoring-metrics/#graph","title":"Graph","text":"Parameter Description num_active_queries The number of changes in the number of active queries. Formula: The number of started queries minus the number of finished queries within a specified time. num_active_sessions The number of changes in the number of active sessions. Formula: The number of logged in sessions minus the number of logged out sessions within a specified time.For example, when querying num_active_sessions.sum.5, if there were 10 sessions logged in and 30 sessions logged out in the last 5 seconds, the value of this metric is -20 (10-30). num_aggregate_executors The number of executions for the Aggregation operator. num_auth_failed_sessions_bad_username_password The number of sessions where authentication failed due to incorrect username and password. num_auth_failed_sessions_out_of_max_allowed The number of sessions that failed to authenticate logins because the value of the parameter FLAG_OUT_OF_MAX_ALLOWED_CONNECTIONS was exceeded. num_auth_failed_sessions The number of sessions in which login authentication failed. num_indexscan_executors The number of executions for index scan operators. num_killed_queries The number of killed queries. num_opened_sessions The number of sessions connected to the server. num_queries The number of queries. num_query_errors_leader_changes The number of the raft leader changes due to query errors. num_query_errors The number of query errors. num_reclaimed_expired_sessions The number of expired sessions actively reclaimed by the server. num_rpc_sent_to_metad_failed The number of failed RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_metad The number of RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_storaged_failed The number of failed RPC requests that the Graphd service sent to the Storaged service. num_rpc_sent_to_storaged The number of RPC requests that the Graphd service sent to the Storaged service. num_sentences The number of statements received by the Graphd service. num_slow_queries The number of slow queries. num_sort_executors The number of executions for the Sort operator. optimizer_latency_us The latency of executing optimizer statements. query_latency_us The latency of queries. slow_query_latency_us The latency of slow queries. num_queries_hit_memory_watermark The number of queries reached the memory watermark. resp_part_completeness The completeness of the partial success. You need to set accept_partial_success to true in the graph configuration first."},{"location":"reuse/source-monitoring-metrics/#meta","title":"Meta","text":"Parameter Description commit_log_latency_us The latency of committing logs in Raft. commit_snapshot_latency_us The latency of committing snapshots in Raft. heartbeat_latency_us The latency of heartbeats. num_heartbeats The number of heartbeats. num_raft_votes The number of votes in Raft. transfer_leader_latency_us The latency of transferring the raft leader. num_agent_heartbeats The number of heartbeats for the AgentHBProcessor. agent_heartbeat_latency_us The latency of the AgentHBProcessor. replicate_log_latency_us The latency of replicating the log record to most nodes by Raft. num_send_snapshot The number of times that Raft sends snapshots to other nodes. append_log_latency_us The latency of replicating the log record to a single node by Raft. append_wal_latency_us The Raft write latency for a single WAL. num_grant_votes The number of times that Raft votes for other nodes. num_start_elect The number of times that Raft starts an election."},{"location":"reuse/source-monitoring-metrics/#storage","title":"Storage","text":"Parameter Description add_edges_latency_us The latency of adding edges. add_vertices_latency_us The latency of adding vertices. commit_log_latency_us The latency of committing logs in Raft. commit_snapshot_latency_us The latency of committing snapshots in Raft. delete_edges_latency_us The latency of deleting edges. delete_vertices_latency_us The latency of deleting vertices. get_neighbors_latency_us The latency of querying neighbor vertices. get_dst_by_src_latency_us The latency of querying the destination vertex by the source vertex. num_get_prop The number of executions for the GetPropProcessor. num_get_neighbors_errors The number of execution errors for the GetNeighborsProcessor. num_get_dst_by_src_errors The number of execution errors for the GetDstBySrcProcessor. get_prop_latency_us The latency of executions for the GetPropProcessor. num_edges_deleted The number of deleted edges. num_edges_inserted The number of inserted edges. num_raft_votes The number of votes in Raft. num_rpc_sent_to_metad_failed The number of failed RPC requests that the Storage service sent to the Meta service. num_rpc_sent_to_metad The number of RPC requests that the Storaged service sent to the Metad service. num_tags_deleted The number of deleted tags. num_vertices_deleted The number of deleted vertices. num_vertices_inserted The number of inserted vertices. transfer_leader_latency_us The latency of transferring the raft leader. lookup_latency_us The latency of executions for the LookupProcessor. num_lookup_errors The number of execution errors for the LookupProcessor. num_scan_vertex The number of executions for the ScanVertexProcessor. num_scan_vertex_errors The number of execution errors for the ScanVertexProcessor. update_edge_latency_us The latency of executions for the UpdateEdgeProcessor. num_update_vertex The number of executions for the UpdateVertexProcessor. num_update_vertex_errors The number of execution errors for the UpdateVertexProcessor. kv_get_latency_us The latency of executions for the Getprocessor. kv_put_latency_us The latency of executions for the PutProcessor. kv_remove_latency_us The latency of executions for the RemoveProcessor. num_kv_get_errors The number of execution errors for the GetProcessor. num_kv_get The number of executions for the GetProcessor. num_kv_put_errors The number of execution errors for the PutProcessor. num_kv_put The number of executions for the PutProcessor. num_kv_remove_errors The number of execution errors for the RemoveProcessor. num_kv_remove The number of executions for the RemoveProcessor. forward_tranx_latency_us The latency of transmission. scan_edge_latency_us The latency of executions for the ScanEdgeProcessor. num_scan_edge_errors The number of execution errors for the ScanEdgeProcessor. num_scan_edge The number of executions for the ScanEdgeProcessor. scan_vertex_latency_us The latency of executions for the ScanVertexProcessor. num_add_edges The number of times that edges are added. num_add_edges_errors The number of errors when adding edges. num_add_vertices The number of times that vertices are added. num_start_elect The number of times that Raft starts an election. num_add_vertices_errors The number of errors when adding vertices. num_delete_vertices_errors The number of errors when deleting vertices. append_log_latency_us The latency of replicating the log record to a single node by Raft. num_grant_votes The number of times that Raft votes for other nodes. replicate_log_latency_us The latency of replicating the log record to most nodes by Raft. num_delete_tags The number of times that tags are deleted. num_delete_tags_errors The number of errors when deleting tags. num_delete_edges The number of edge deletions. num_delete_edges_errors The number of errors when deleting edges num_send_snapshot The number of times that snapshots are sent. update_vertex_latency_us The latency of executions for the UpdateVertexProcessor. append_wal_latency_us The Raft write latency for a single WAL. num_update_edge The number of executions for the UpdateEdgeProcessor. delete_tags_latency_us The latency of deleting tags. num_update_edge_errors The number of execution errors for the UpdateEdgeProcessor. num_get_neighbors The number of executions for the GetNeighborsProcessor. num_get_dst_by_src The number of executions for the GetDstBySrcProcessor. num_get_prop_errors The number of execution errors for the GetPropProcessor. num_delete_vertices The number of times that vertices are deleted. num_lookup The number of executions for the LookupProcessor. num_sync_data The number of times the Storage service synchronizes data from the Drainer. num_sync_data_errors The number of errors that occur when the Storage service synchronizes data from the Drainer. sync_data_latency_us The latency of the Storage service synchronizing data from the Drainer."},{"location":"reuse/source-monitoring-metrics/#graph_space","title":"Graph space","text":"

                Note

                Space-level metrics are created dynamically, so that only when the behavior is triggered in the graph space, the corresponding metric is created and can be queried by the user.

                Parameter Description num_active_queries The number of queries currently being executed. num_queries The number of queries. num_sentences The number of statements received by the Graphd service. optimizer_latency_us The latency of executing optimizer statements. query_latency_us The latency of queries. num_slow_queries The number of slow queries. num_query_errors The number of query errors. num_query_errors_leader_changes The number of raft leader changes due to query errors. num_killed_queries The number of killed queries. num_aggregate_executors The number of executions for the Aggregation operator. num_sort_executors The number of executions for the Sort operator. num_indexscan_executors The number of executions for index scan operators. num_auth_failed_sessions_bad_username_password The number of sessions where authentication failed due to incorrect username and password. num_auth_failed_sessions The number of sessions in which login authentication failed. num_opened_sessions The number of sessions connected to the server. num_queries_hit_memory_watermark The number of queries reached the memory watermark. num_reclaimed_expired_sessions The number of expired sessions actively reclaimed by the server. num_rpc_sent_to_metad_failed The number of failed RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_metad The number of RPC requests that the Graphd service sent to the Metad service. num_rpc_sent_to_storaged_failed The number of failed RPC requests that the Graphd service sent to the Storaged service. num_rpc_sent_to_storaged The number of RPC requests that the Graphd service sent to the Storaged service. slow_query_latency_us The latency of slow queries."},{"location":"reuse/source_connect-to-nebula-graph/","title":"Source connect to nebula graph","text":"

                This topic provides basic instruction on how to use the native CLI client NebulaGraph Console to connect to NebulaGraph.

                Caution

                When connecting to NebulaGraph for the first time, you must register the Storage Service before querying data.

                NebulaGraph supports multiple types of clients, including a CLI client, a GUI client, and clients developed in popular programming languages. For more information, see the client list.

                "},{"location":"reuse/source_connect-to-nebula-graph/#prerequisites","title":"Prerequisites","text":"
                • You have started NebulaGraph services.
                • The machine on which you plan to run NebulaGraph Console has network access to the Graph Service of NebulaGraph.
                • The NebulaGraph Console version is compatible with the NebulaGraph version.

                  Note

                  NebulaGraph Console and NebulaGraph of the same version number are the most compatible. There may be compatibility issues when connecting to NebulaGraph with a different version of NebulaGraph Console. The error message incompatible version between client and server is displayed when there is such an issue.

                "},{"location":"reuse/source_connect-to-nebula-graph/#steps","title":"Steps","text":"
                1. On the NebulaGraph Console releases page, select a NebulaGraph Console version and click Assets.

                  Note

                  It is recommended to select the latest version.

                2. In the Assets area, find the correct binary file for the machine where you want to run NebulaGraph Console and download the file to the machine.

                3. (Optional) Rename the binary file to nebula-console for convenience.

                  Note

                  For Windows, rename the file to nebula-console.exe.

                4. On the machine to run NebulaGraph Console, grant the execute permission of the nebula-console binary file to the user.

                  Note

                  For Windows, skip this step.

                  $ chmod 111 nebula-console\n
                5. In the command line interface, change the working directory to the one where the nebula-console binary file is stored.

                6. Run the following command to connect to NebulaGraph.

                  • For Linux or macOS:
                  $ ./nebula-console -addr <ip> -port <port> -u <username> -p <password>\n[-t 120] [-e \"nGQL_statement\" | -f filename.nGQL]\n
                  • For Windows:
                  > nebula-console.exe -addr <ip> -port <port> -u <username> -p <password>\n[-t 120] [-e \"nGQL_statement\" | -f filename.nGQL]\n

                  Parameter descriptions are as follows:

                  Parameter Description -h/-help Shows the help menu. -addr/-address Sets the IP (or hostname) of the Graph service. The default address is 127.0.0.1. -P/-port Sets the port number of the graphd service. The default port number is 9669. -u/-user Sets the username of your NebulaGraph account. Before enabling authentication, you can use any existing username. The default username is root. -p/-password Sets the password of your NebulaGraph account. Before enabling authentication, you can use any characters as the password. -t/-timeout Sets an integer-type timeout threshold of the connection. The unit is millisecond. The default value is 120. -e/-eval Sets a string-type nGQL statement. The nGQL statement is executed once the connection succeeds. The connection stops after the result is returned. -f/-file Sets the path of an nGQL file. The nGQL statements in the file are executed once the connection succeeds. The result will be returned and the connection stops then. -enable_ssl Enables SSL encryption when connecting to NebulaGraph. -ssl_root_ca_path Sets the storage path of the certification authority file. -ssl_cert_path Sets the storage path of the certificate file. -ssl_private_key_path Sets the storage path of the private key file.

                  For information on more parameters, see the project repository.

                "},{"location":"reuse/source_install-nebula-graph-by-rpm-or-deb/","title":"Source install nebula graph by rpm or deb","text":"

                RPM and DEB are common package formats on Linux systems. This topic shows how to quickly install NebulaGraph with the RPM or DEB package.

                Note

                The console is not complied or packaged with NebulaGraph server binaries. You can install nebula-console by yourself.

                "},{"location":"reuse/source_install-nebula-graph-by-rpm-or-deb/#prerequisites","title":"Prerequisites","text":"
                • The tool wget is installed.
                "},{"location":"reuse/source_install-nebula-graph-by-rpm-or-deb/#step_1_download_the_package_from_cloud_service","title":"Step 1: Download the package from cloud service","text":"

                Note

                NebulaGraph is currently only supported for installation on Linux systems, and only CentOS 7.x, CentOS 8.x, Ubuntu 16.04, Ubuntu 18.04, and Ubuntu 20.04 operating systems are supported.

                • Download the released version.

                  URL:

                  //Centos 7\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.el7.x86_64.rpm\n\n//Centos 8\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.el8.x86_64.rpm\n\n//Ubuntu 1604\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.ubuntu1604.amd64.deb\n\n//Ubuntu 1804\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.ubuntu1804.amd64.deb\n\n//Ubuntu 2004\nhttps://oss-cdn.nebula-graph.io/package/<release_version>/nebula-graph-<release_version>.ubuntu2004.amd64.deb\n

                  For example, download the release package master for Centos 7.5:

                  wget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.el7.x86_64.rpm\nwget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.el7.x86_64.rpm.sha256sum.txt\n

                  Download the release package master for Ubuntu 1804:

                  wget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.ubuntu1804.amd64.deb\nwget https://oss-cdn.nebula-graph.io/package/master/nebula-graph-master.ubuntu1804.amd64.deb.sha256sum.txt\n
                • Download the nightly version.

                  Danger

                  • Nightly versions are usually used to test new features. Do not use it in a production environment.
                  • Nightly versions may not be built successfully every night. And the names may change from day to day.

                  URL:

                  //Centos 7\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.el7.x86_64.rpm\n\n//Centos 8\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.el8.x86_64.rpm\n\n//Ubuntu 1604\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.ubuntu1604.amd64.deb\n\n//Ubuntu 1804\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.ubuntu1804.amd64.deb\n\n//Ubuntu 2004\nhttps://oss-cdn.nebula-graph.io/package/nightly/<yyyy.mm.dd>/nebula-graph-<yyyy.mm.dd>-nightly.ubuntu2004.amd64.deb\n

                  For example, download the Centos 7.5 package developed and built in 2021.11.28:

                  wget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.el7.x86_64.rpm\nwget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.el7.x86_64.rpm.sha256sum.txt\n

                  For example, download the Ubuntu 1804 package developed and built in 2021.11.28:

                  wget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.ubuntu1804.amd64.deb\nwget https://oss-cdn.nebula-graph.io/package/nightly/2021.11.28/nebula-graph-2021.11.28-nightly.ubuntu1804.amd64.deb.sha256sum.txt\n
                "},{"location":"reuse/source_install-nebula-graph-by-rpm-or-deb/#step_2_install_nebulagraph","title":"Step 2: Install NebulaGraph","text":"
                • Use the following syntax to install with an RPM package.

                  $ sudo rpm -ivh --prefix=<installation_path> <package_name>\n

                  The option --prefix indicates the installation path. The default path is /usr/local/nebula/.

                  For example, to install an RPM package in the default path for the master version, run the following command.

                  sudo rpm -ivh nebula-graph-master.el7.x86_64.rpm\n
                • Use the following syntax to install with a DEB package.

                  $ sudo dpkg -i <package_name>\n

                  Note

                  Customizing the installation path is not supported when installing NebulaGraph with a DEB package. The default installation path is /usr/local/nebula/.

                  For example, to install a DEB package for the master version, run the following command.

                  sudo dpkg -i nebula-graph-master.ubuntu1804.amd64.deb\n

                  Note

                  The default installation path is /usr/local/nebula/.

                "},{"location":"reuse/source_install-nebula-graph-by-rpm-or-deb/#next_to_do","title":"Next to do","text":"
                • Start NebulaGraph
                • Connect to NebulaGraph
                "},{"location":"reuse/source_manage-service/","title":"Source manage service","text":"

                NebulaGraph supports managing services with scripts.

                "},{"location":"reuse/source_manage-service/#manage_services_with_script","title":"Manage services with script","text":"

                You can use the nebula.service script to start, stop, restart, terminate, and check the NebulaGraph services.

                Note

                nebula.service is stored in the /usr/local/nebula/scripts directory by default. If you have customized the path, use the actual path in your environment.

                "},{"location":"reuse/source_manage-service/#syntax","title":"Syntax","text":"
                $ sudo /usr/local/nebula/scripts/nebula.service\n[-v] [-c <config_file_path>]\n<start | stop | restart | kill | status>\n<metad | graphd | storaged | all>\n
                Parameter Description -v Display detailed debugging information. -c Specify the configuration file path. The default path is /usr/local/nebula/etc/. start Start the target services. stop Stop the target services. restart Restart the target services. kill Terminate the target services. status Check the status of the target services. metad Set the Meta Service as the target service. graphd Set the Graph Service as the target service. storaged Set the Storage Service as the target service. all Set all the NebulaGraph services as the target services."},{"location":"reuse/source_manage-service/#start_nebulagraph","title":"Start NebulaGraph","text":"

                Run the following command to start NebulaGraph.

                $ sudo /usr/local/nebula/scripts/nebula.service start all\n[INFO] Starting nebula-metad...\n[INFO] Done\n[INFO] Starting nebula-graphd...\n[INFO] Done\n[INFO] Starting nebula-storaged...\n[INFO] Done\n
                "},{"location":"reuse/source_manage-service/#stop_nebulagraph","title":"Stop NebulaGraph","text":"

                Danger

                Do not run kill -9 to forcibly terminate the processes. Otherwise, there is a low probability of data loss.

                Run the following command to stop NebulaGraph.

                $ sudo /usr/local/nebula/scripts/nebula.service stop all\n[INFO] Stopping nebula-metad...\n[INFO] Done\n[INFO] Stopping nebula-graphd...\n[INFO] Done\n[INFO] Stopping nebula-storaged...\n[INFO] Done\n
                "},{"location":"reuse/source_manage-service/#check_the_service_status","title":"Check the service status","text":"

                Run the following command to check the service status of NebulaGraph.

                $ sudo /usr/local/nebula/scripts/nebula.service status all\n
                • NebulaGraph is running normally if the following information is returned.

                  INFO] nebula-metad(33fd35e): Running as 29020, Listening on 9559\n[INFO] nebula-graphd(33fd35e): Running as 29095, Listening on 9669\n[WARN] nebula-storaged after v3.0.0 will not start service until it is added to cluster.\n[WARN] See Manage Storage hosts:ADD HOSTS in https://docs.nebula-graph.io/\n[INFO] nebula-storaged(33fd35e): Running as 29147, Listening on 9779\n

                  Note

                  After starting NebulaGraph, the port of the nebula-storaged process is shown in red. Because the nebula-storaged process waits for the nebula-metad to add the current Storage service during the startup process. The Storage works after it receives the ready signal. Starting from NebulaGraph 3.0.0, the Meta service cannot directly read or write data in the Storage service that you add in the configuration file. The configuration file only registers the Storage service to the Meta service. You must run the ADD HOSTS command to enable the Meta to read and write data in the Storage service. For more information, see Manage Storage hosts.

                • If the returned result is similar to the following one, there is a problem. You may also go to the NebulaGraph community for help.
                  [INFO] nebula-metad: Running as 25600, Listening on 9559\n[INFO] nebula-graphd: Exited\n[INFO] nebula-storaged: Running as 25646, Listening on 9779\n

                The NebulaGraph services consist of the Meta Service, Graph Service, and Storage Service. The configuration files for all three services are stored in the /usr/local/nebula/etc/ directory by default. You can check the configuration files according to the returned result to troubleshoot problems.

                "},{"location":"reuse/source_manage-service/#next_to_do","title":"Next to do","text":"

                Connect to NebulaGraph

                "},{"location":"synchronization-and-migration/2.balance-syntax/","title":"BALANCE syntax","text":"

                We can submit tasks to load balance Storage services in NebulaGraph. For more information about storage load balancing and examples, see Storage load balance.

                Note

                For other job management commands, see Job manager and the JOB statements.

                The syntax for load balance is described as follows.

                Syntax Description SUBMIT JOB BALANCE LEADER Starts a job to balance the distribution of all the storage leaders in all graph spaces. It returns the job ID.

                For details about how to view, stop, and restart a job, see Job manager and the JOB statements.

                "}]} \ No newline at end of file

    =lFlVDd8R zT~cvlJ`zVz^yBO_tfWj(3~-1TF@j*$(;h^9s?mnHxY)_M8Ol@94I}V)dm9e?9tQ6T zSG+LG_?BXH8d!9_2NZEDjH7>C?RbPx!0NOeh&xm#mavlAs z0^ljPdJ9y>aODakIbkvRsh%rZ=TQpWIpKoDK@V)N0bgIx*2Athg2dgkZX$d_fv}{U zx6s}fl#A)Ri^Qil_sVYNG^*bVkGk0#xYfGL=8KCQja|`jTyb6uB)^?R{!poLji%?+ z@C`OqgdzN~D#dLd0+x*!P>J;tYSa1U>grAeBBW9`-=wh@TZz^+#g-4m7%8ai8Xib; zt`SMOpQ3$7+W{L`HRnsjRGuJQX3FE>F{?43tU-dT>vwyVn$BDaFyF4Rzoa}}4Vh(G z-fS+X?Q97*1}waVbl0cn?fc0Cv|50=>|)Y*z~ARJ4$ca5KxMkQg!N9^r1|7)P06zk zFTo>zy33ds#rpICRMC~;2g(V24qVp(^wop|6w=Mr%cCk#U)v@o_zQJY)525EgeN^w zjqqs0%7CZC%s_)c?>jkX%}noOxa;8+>8>lzkEj~z^*)!92Q&jMxC?EXn3~eWZnvuU zDvXW8HGQ33K&Pp~q+=V#H#5gbVOa9q!kZZ-9Pca6qX9j`;1o)69#Pf_O6+S}}M zPLyfhQGsIK)2ySDx~Djz4Q$}p25q8TkI5#a!QooVs>t5f4w$+--Ej$Mqzd=Y{-k^( zkJX-;SkU5N_6+hs(O4Jzkor9hmFnjpj-~b7`kT}V_JEyDi`JYN@2kJ+o$L&tIfw{ z2#JTZ^XHhFP?7!v4G9v_#8p=x??JoQgQMw1fP*l{JxXG`^Oo|Ov*l0d#}nk!5vErv z*-%FM)^nvPC^TpGLP`=pEnv=+u3CM<4gvsbMw4 zq29ote#@uLp}kgk6A?6dD!=LC5_-CnorFo-zmDLh_SOo($W9U!Qv{?{j_xjiqhEt< z`Y%7XVLGs@IyOjt%+`-B#6gc}dRM2*JY~x^B$|G0^UW4NWY?NWqNuX$)NSw`1aBJz1-Rj;nQq3vt4oODS6n?H`N06W(|qvSA5gvfRy`(&j{*d!0}uph%iFu9GjU zMy>v_O83+%by}4@^!mK@#;RvO*zF;DkpX&7r{jcTsG7^g`{tB?I*N0(Hp#bg1v}&G z>G@Z|BMKt3$58Er&fxqv8tGBzazY!TRLh)4a7ERl_LU7Dns2m7=JkBRPT5j*zt8E; zsEd1X#TG7v@>mCBK;cXrfUyHoMNIvh7oUK_L?r2=7kh4KaT9GGO?t#(-U|7_9Cl-z ziiWQXE~bm=jtyDS%D3SUEEp1N`ErkB*MHP7@R+RRT$f!s@5im3_-V@Wb*-9TImcIG zCmnKJY2vU{PzA5_Q&;FoY*|eg+u3b_o08L3^;w6f`vwNld zAw0_sD@RQV$huLJt7B*Fu#VX!I#JoHx86T$y?=>0j&(~or$ggq*f&_H+;|uyaJ^I~ z8BsO>rB5T@avm)N9(Wzk9rU9m`4H$ta#p=HxO+RQtwmhcc={U&YEI8Y1z@->+?tWv z`Ww{Wj8z_a&~a8YfxpUc-j(1G9K2>La#)su2OUT&kNlgjEpVM=qMC?zs{vgb8pGG$ zej7@=rkL1>it&A8LF-3$iR7Dmuu)D8oT{^MJNA(onHT8bq(R75m<+u@huF&TkFn3o zLQzCn()MWeS!qQ7#QmwA>}@S?60TI!y<0CrHN@YLeX1)36Q~*<9^n#nrMx%NQ2nm| zFt(_=bXRbq)K>?IqsIQtHqL%J7GEnaR{=6*kH{-&u1YrXB)@O+LSCl@#kIu0!wKn? z=Ctg$PE#GV&1EV`A_c;4OL4+o0M5uhl?{{|SA=)W=TAAY<=(X!%e%UGZexg2 z&`t?&XU>14{{qO?GYnoK4z}KUT&5q?6EXNeMDyK)Xb~DP}*KW%9vA3Tw--i0y|9lF>GbEKc(hYo)pHjDVx?008biz;g zH5gqo06lAK(4TQDG(d(tI>6_6NBF(Nu60dGK!$TpCyL05p<>}oE2#KeJHk=frzZ~K zR0xK;jsXBE?B~SFAsx$S%g}BF$%z{@Sv!EIm{!4ZYa)|H8YfHD8VkIbX~fAbwb{8^ z1()9U@SOI|-EuWw`g`7x$MEk}@vNMhlEj09?X?6Ur7q463pJdx<|M%+yH&8#2Is+3 ztw+Uq2}EJ9;UHw+nXxk_EQEG9*0x zwZP{fr2mqojHUWDzWL7fp62XW*{wrp?VQiGIp(xu%}s?D{#Zu)_De^8dX4OPP`Iy|+_R&TCrXDP!{?jFOx3J_Nr3r%#bP<2m+BCFBP= z*JXjVx+4~{Vm{s;b-~5^)dleUUbAMYP#*Dm-PetmdKy>4D@i%u|P)>Q{_3laU zgZJ(E=J(_3R>sF($t(y^+Oe~!Ox3K6!3|hb}YGWH?7isF2!ttmB_ zVYy-4o(HQ$BoPdJtuN#gSWY|giFnl>Lx*=swky7Ou#`C8nUDTU(8lQUhtNG`~rhM+hP+rBIEPnP?yH_Ej+#953#t;|DGO3B$cMyao@WwmH;rjR7_Zttrh7<<}A!HO*`X z1qc?gT5Tql*TiPIJ;C(q#zG^lE4*%~b`Jc^_4n%!i8fX$f|^uVZ0N4l7J;ZCBR92s z^%qZXBix%W-5YHMAf8YT7e2bz8F2MO!A$9oc**Z{S&!+Gg33&=W^m2dzsIkIvucrP zG5#sCCJe{kF`-n*6>Ka#7UDxzrvlUuy>ed2ZzTz!~8y#cb6A7Bh zx9t$h%2wK{e`Y9HiS7!ut8Z z)k@{MqE{rE2wGz-LBoqI9P=~{e!b*pU77QwG}qNLBN&vmN++-b_vYczY2 zfx?&tyTd#}1G%~`R9#%Ab)HkxEZML>6}y>J6Ykp*&=x4@> z56ObCeuM4-?(K?775$UeUr1%SRNhbs!A6V^W4`|Kkz24czz=%+X3#bBar_`wED3%t z2MQuC)37$9lL!0ffQt*O<)iMMzIQ<4a*?@{AF)Wh4JkOOvu@xzB+LcN@=k*XGgI-Y z!tyr}*?4*&&Z#G{zXq0A@rgLsplvDnMY4tBwN-aLBr=$9=VF)5+wZSj_;4Z7%^ zz5ye+@N+(vuKH2qrvc8uQu(oO^Bgu;1_xK=s^>CrFvepQHR#l_|Giml@9%N~!NtVc zBg_|AlH|DOh*WJNmJAiAQGGeu-^)b=pm3!mfc4L0=!K^Cz~wS4F?ZZk!J9_m|%?h zckXW>^?X3V(EgM>y#Kwp)|{of>ty9MvI|@vtWL$}A0loE@a~EDAwNI~gPR+rnO9v; zY0AB9bf3O=zI-rtD$LT(r9+&7M}8+H{gmU`Bk=YPysw^zkWqJjoW-n#QKgrZcY|Es zBr1efLi8)SX2Fq*)OUdNf%-s#(e zy*8&4naO<(9kH%k6dzp4&KVuOC=Pv% z#=dsK>FzQ+Zc(pI;aU40$*?}%k@R$f?`x|7*kJCvW#$}=KDzTeWxnjy!FTavVrV{P z9Egyx=?#&wxW$Du`9x2|jPpVfsH1>2unMjpDDEix39CUyGvrZH2a-&bGftDv>nkE) z%BmxA4AOH*h@Q}UT6IuLi-Tn_I8+pUs!noyHH~Nm_g@#ahZkg*e0ug{#1CIgz|M>U z7Ww9tqnU53f}siu*vaN@xJMruelrkOj^8V1?&M7zEDk?l=pirV@;N)%r`G+tx13p8 zDM`r6nu6J)|1pG;T7gDxX7{CZ@umM@GFQA^@j%y~|$t0(G?z7cr&yU#J2 zK-mC%F|Y7_vDYC}HTMqU%RV#&vxX=)pq|5i>k$lYyMURfm?9zLw6$<5ts9AE$v|)T1ab@hN^D0Ctfz`1Cc}3?y<*B5e=POR-cgCKj zyEtQet>`muSjG9N^pZy)sOb-{5;o6`x}H{*&%33&!CTuNLGv=It$P1eu-oCMdG|*! zCY?A2ji4cmmD>08_`$oDmSo&t0LDp6-2IlwVn6J$Bk;Cgh$2H>J3l0pcVU#!EHS@FvDYf0tV)sWuc@vZH97fGo4O$TpSpD zVtS7obW9D(CRPJ75hT|}RF7_=43mGD8?f z(oQiVRQ}gPBC9TtDQ3x}+U$CyD zwB?e;*?x^z0W{u%l40(fEwV-HJt8uu4dK?{GKH?B&WVS9OtfJTw3t7mwmg090v zWumn}R$VdpW#RpW(Q9}gH~#_ULC=lz8jE?#OA0XNEg@v2KgcoFNA(#MJVrY% zNSbp??LOw;;!dSTK~N@0^_F(lUrwge$wurt^k+2@2aDvki+%O-K_q1yE};+=az|s* zYS*3$C;k+5f08R^Zb~qnJFs&Yt>Fc!S_K%cx#(#>iv*EQYnkF;p)oN1dh1t*A9XXi z9^@d}(urGk@bXr^VrV|3Vj=qcp8R;L-mX*P2o;S!YfWW(0`Ofc90b=`bXJ^>$uS6~ zPt#eOKKhMuOAmDWvh`crQT(knaWF_Q@cd&GvdTr-22P3%Jutp7^xYq2d2Sw3;#c&M z_em$Oe?e504?Vb5ks~i1Igu*;U3gTi3}Hi)R6JKs9`Cs)^CaQED6-mm4jeP}JH~@h^<8tQSw8hkAs`%#9%K#Cz z#zvSRhzGByO~f#9EHc2OXZ5or7mfzm61Jd3U$h9)9HyXz+!IQ3hNbwp_4YiQv}{fp z%I6YY%FdO}?39!7N=hN_RZ?MVJ4H>fJ-0v@)9^&cEb+${O+4dQlU%p+!AKFMitFlZ z*2sCyR)E-0aCXQyCp&nZb9c+_Cx`WwaJt?y4GuU>AE zuB`*=q+`I|+PpSt(!8lnks6KyeanuRBE=@UT?{>WI`4FgVE4Ry?iSLDIw(GwczgC% z)p47~kIOmq42nU~aq7jqZ7XE$oSs60*0i8N0|`dEA)8Sq`sf(U=DCIF)a#b|M7=TV z1|Xni2>+2qN9lBbhH+>#3)yGz=otE!6}W+(MyCq7+~B?TU=^a;yj@%CuY2NQ%XPjD zmSB4EB_K511J1&#OWVI|vbEV(g25+a+x^FNN&ya|L?>VRmhbQO0-S2$POkLvX7hF2 z$vx#;E(x|wyKd06k*Bp;ZGKyKEB2iypdVB&nqZw^vX<<9-JCH+&o0_@#I#0O`J*OQ zRo96jj@Ey#Kc8HG=E*F0rt7Ka96yqTQ+IE~iM1{}iO<1Hy)fVEX~wg6`+hu`~MwSpXun-?6k!BJk(q|`OVfo%H=xvXUS2GbXl`n z5DNwP)SA#Sxj{JJe?V%zGD;URytGku3eDM9Yv+%YZ*Li3NLg);Ty7xweV9?mF7OuY zIlS*(-t|xx^sPCf3;=!8i-F7u4&it{&W`a50WK1dt`LB}cCKQmloUxS&-;z%0DDEr^*a^YHFq{2+NhC_eJpisaf!C_@LXcK`*%<1mLE;&3L^n zrVO_HOanBcYO@%<60o)PpIzdxbQEm(`hD>DKGpE8II_{?;lQt~t16~({pltP`COhC zVC@dGdpWgtweq+`$kE33OJYpT)2#9?YGo?MYSOmX_{Zww6dEq|eT&4f=D5ew7yd0s zcLKr=(W4ao_&yC%7RrAa0u9{$M~ zqYROY6?tR2`vXLeeEdcs!02<~e%3*C={Yn#__Fj6CDE~%@0&uIta4<>Sm54P(}`sG zq{JwgG3I4>v**~U-tjlVX`U)E@JGz`8`j;;-Xl%Z)(KW!_GM-GbBGm)c{ELbrI}^< zb`3N(DOeabSGQH%5_mA)iVtth$^C;KB^WM<129dbAK(tlt^y<6@eqvgazv>_J4$;(x&MEeN2dSHJo5S<=27TB=Ft?g z^;|d)0!;}r9v@M=RYj|X;mNzVKf~tl6@a_B-sJbPNU?loLVpcipDdYH(GK_%G@aV!jypu1w5@*FcGL{c8n383$S-y~sjoe+s3zD2 z4A2GNM1EZvRWEv|3a%U7;y2oJ@T$`xH9Gv3IfkCx3#9=5j$z!^XyzAdo{lW#3h;0^R%aIWdi!SrpoZ;T(@);)gTN+TZT zeRb=fdgL*9QZ8rm<%$H@Mb)>iKEYMqEa4mNF^h-df@W3q@uFN*Q-NG@Ve@PL1TeQ@ zi6;X-Jb62v*ctH(lyp+C)Cq(2WRZig$T-;k>U~QjR3^3!6ta2_zmu^n7?pC!@IR?4 zhyW}^b%xHI8mElY2Ka$|7D@8~p&Lkl^PVM1qEh(=_+?BS9^o4>+oZ5jxc$SEh_3$w zJTjE{2Ru3?hf2Ug1p$w2{{fG_sblxx;?|~Yxb!JM1BLpGFxn&uj4%By;?^7oKaHzGouXS z5X!ozsdQ@4U7O^KO~x48ulQ6+;I@`sZ-_U_gBTF&NYQ)(*IG>1Xd3$Q#=;R$ZeEy8 z*_Uu6y)oN;V8eB0KWiTxzORJ8m?G0cR7%Sde+LncF0->FV8%245sr?efub51rI7xq zc@W|VT~Z2noX-R5bi0p959u?d#lj#M+Gs=+X)#nc15vnikc z12`J~58y~P_aETshcpOq1ot1nkxkup=&{7CUx1@7NRi}!fFqnPlO_7t;@7e(ET_iHZYE%lB5}xfF4-y9k?0&Z zvvW^+D($X2KT0XAvz$|jLrO#Bi1q@DNSi`P<7z1fo%Y1SeP}5p3mwA;#C3;BEaGy@PcFVFDBn6J zt2K2i=db$UlcPN{Hn{6=$j2;on zrf0I@LPZM%*1;VB(%>c6Zix|L7V4v&=zL7lb!7C`g@jmnr{2VlMF`?}L*?3BaeNFN znT@5d`{C^0HE+q3Jk`TOj|?bCt8K|AoB9gzzE+CLTKs~lSlc!J;qrZPdbMAAxA=Z% zEa*Y$u~m_7Xpbuu;vLcd0t}*EV@4MHU{o~l34W!&)ws(Lh%)%p5PwC8czhEtaFfp@ z6Q*(EU_dR?6E`QyYnd5?Gv0>TtJG>=$SrsH(8%VvJ$L;Ic{5O^>u<%ggHPL;86N)} z{#md zy*s0VsKK^6K(wGcM{>4_o{|~&K4pH%p8)-mHO4ELqczd&N~@)ues*+SN?d~s`zf;m z2G4{@`G?`AL1Ue5O*TpK4`Wx;GKquFN0rkUE?u5{#-bA(0%$YnGcHjNHA`@6D7>=M zGL9|bIT6cdFj()66`1wdB10Px6wJ}$wai_X?=4=ZKqtig3j(UI{~!I>Hn&&C*rB6{ zp?%$HGGRU&L*_@Yt13PcV$!n^u>+vTBi%?KLVd4>SP(cfS2^`7i%p?#J58d^HC~TxS}NF)bH?Tj zUQE~lq=%F$2$}RAnz$e*>uEPI=!=+I(~<=IV*GZ_es!x z*ie78t-Y+vR9hWA7IMN(V1`z*Ul$y9i1;JLz?gXePQ|4$taLp|>C*qm@d;wm&Jv9+ zY@l{=-Oj;{<|o_W&lTp*DF%yAis-F}>^`Rr3t*Jh5Nv%0jFP?@ul9SX59*QioASW> zFSr;bK7ohhDdk09Y4rW?v1L@oZGh$epVWQ>FD#UgsT%<;=Dl8hkpxAnEblfSjIB!* zX=(}y3>H-M;$`-Iek4!5FgQNd>vk(t=$6Ij?TEk7Hzs;UxNIUMEe&ojD@Ad{-y-Ai z=)0{SZrrgA);-s@4ZiqvE06^Kw1EOrV_Z`<;vjp;iN3_vJ-E7IP?C!~z+9tTe6P`d ztPZB{r$H-QK1OOAG~D->t@zW{?WX3}%Ql7Y0%tGNfb`|vPP7{{(CjqlY;K)9+_&(AqmE0^(W8{4V6ycJcOxiN11dINUw!*6U1EW?XKZE-1pCPn16 z-q(TBDu0}|S!O)^8+zm2>|o(zCRv1Bituy(Sh%J)+>Cso`o}tXr17IIj6_Ivmd5oE zTh`w^X0W}nB^nPM%zHk;1NDqOarwiEBm-rqs=}8i&6Q|`LawZX@c~!!1e6(gMtyWIp- z+<-m=ouZeGX(H;JEVS{r<6e!rX7=BVS@e^v((O_4+}OF7)LD<)Uxk6gzQPyIuXdp^ zKDMM<$9at^oRFLQ*6SC7nlM^6n`grlpJ2RR)b%kD6tQmY#O&lC6=H-Wb6_NLjo(X4 zoUQ|Bb0Q>OCb_NXGqhGo@ZG*(L7btb863OuqAgq!Py51qP?~sp?6F{zN`4Vj)m@f7 zb}@k+Kw5S^`-#75e~<>`wXD>x!n2&c))6E2M+cggreL!#dB}H}zO1lLeXPqzv*{$e zF^Qh0&Z#ewyx=xXebkCldtiOfACjs_ExVud*h#wQ?*H3$R!35Y8CF+P?ZV*8ku_|l zGD|_agX_k}gcKVp*td_}9aqIfH^?~qJMGQ9fC5^o5(^)^9sLR@d3m*COY?HJUj(t0 zz$sQ;rxCFpJpRL08jS|AmA3U}d0EafTURNZ8VrA*K4^z2I}V-mym;H((_9lm%Tp{> z-bdt~MEtR&-lpgjCC)}s*y!^bV4z%hKaIN;oZj16%q&vN5`I=-6!KL*Jnkl+?RtAZ zgL!m5L43S=2k!s$AGKaSZ#nx|$`=Tp2VOoqfAE2Jgs}QxtUUSzT)s;fy-7Kg!T9Qb zSF1f@12LKpGNa`vbFAf^1oF)Usy*kU<+ORLJ$@kQq;Chmr^&^=7puL&J?sbUSo?gn z@;z|!?zD8acBozN&}4dj5j39Sa{WK+A}Oz+d0R6ACWki!!1UQV@V0nl8wTVP9>gHi zD(zo*f#f_8C@PgGw))Y%%!yZJa@@0p-;EQEHQfXF3cZh8p|2-2JpX<3d_IHfOS5<3 zh3gl*xmuOt*&2~Fn=TBxC;Xa4;OP&mbd{^rXI|8k1%P5s3ckIt3tULT!EAQ$kxA1a z#NU~AKu+%fIU4|vPaDW1oauuHk^g%p?Z@cGO$oHY0=aq(R5}4_w)?KYAL5bg76Cg2 zOBoMuR}z#glYRK3MgtN!=pnCG_qUu4d3nFv6$y=frUiIAj!S3RUm&k;o^H_d-R_;F zbibYvO`JDx-A)T4-mg?ella~{+Uq}FZeb5^Kga<55}QtwFvV8<0)HP9!t3aW91na4 zC33Ql`kJ@}eqQXf5ClK@vS0b6c30e^5aXCxtdhfzBM9yF&WSQE82 z-jxKrH^g&AgvsM>zxcaIrs)cq2$YFa+-5i{oLkO}O2e6UYN7Tf2Ls`BsYie|sK0yQ7 zKUMua>2?rg+N9u}*du4{QbitM8MX@@7yb^kZKrVtgkpPx=WbL|Z-x391(T9D(_}!P z!VX~DE9`sp_Tw*9aMLnrVirpUk)YeYr5lKL&u8H-;OyTGdXyvQ;~Y>=eUWtXtgA7K zicHYuR!}7vOb-j}_cZy|Th^tRSKR}!)P65vkgyDO6OSSC$4t8JlV-IK4Ol8n$1QKzpvQGp>~N1SCfab6Cj;b6F~ zY+QwNjHc6QWfon>MiraY$6TVVIWXX0Y_ifJ8uimBGAlG|NO*r);ppSrDtZWcnpGmJ zS9TH`DM#H9hvG4)avSDRB7@lM{t0e(WpUvvvyP{_?!#Rvb-Hpm(1Ad?+kd4{fOaa> zBsg?%5;nnk(S7fAk9T1(K^OyQLFChx+kpk`9Wbl|2}eEdXDjDtG43-_g!NhsVWoh&hi3i%roa2?>IPtaEk_iyn_T=3y@nqB3s#!CoC1g)^#Twc;! zwEH9af0&I^lrY4%q1S!Kn3E;62~XhhDGYLp$!0EZJ$pTGDnfjCxHtjYaUd1eo2GFW zhn$U|`J^2gXk3B-6Wy6`pT?#>^8**B%nc)0naENz3g(EAk!ZwODCX~IG{HXIJVIX`2AHNJRwQlB!S3*c6Qu0B zv0E})V?Z-S)*0!TV6SL*d>1#jkZMk3A>{OrAzs4v*JtQdmK@_b^08r98}b#{*Ye`(gWM^Fio}`z@0x-1kB{y3Xv+vI zt=Jy{9S(&X2EtX#VJgz@7L_(ld|nywN-wq#*x#qAae;%AQo1On6KgZqMJG6A#)QLD z3@Ry%+;X}MVD}2YBEE#6t(BM6)_j9_AuZT8X{$%xRcZX!u{ZXHhV4X^a@KpT$UzHD$H0ze?h|UPk|(BXkGYoQ-Xmothj`QT zla4Ss0CXCtS6pyP+iMnQ(DnE%m(~4^O1lbU#4Wm29aSx}uz7IS@M-(oD^l^~Hs08_ZQItwnP4)p z?M%#$C$>2g8xz~f#GKf+&3oSeSGR86s#DcmZC)g4ie}ilQ&&xEVAYQJUvqaV`_4XdHBI2P z0MzECUOmi3rH`t5W3xUMM5fC^2(Z&Z}~~Q_)YVB z*eJ^biC;`)0ZND-_(UynOtqx`f$;s+t-FxZZi4(#P?d&jY&`|&JE$h6tsbsj=d zsM*(}NA+1FE4i)eA3Q3UXX>g(B8O|CTTzY{{0EuH8$wPiJ4weilESAMSx(j37+uud72y!w`9w(PdT_4^B2ValJI{vypYL-W@S$a}&4 zkCthFUz8C0T|JO_L$y@VsT9)8$gpo#9lb zli!ggGkCNrh+=25F+#eWr?-x;$qr)5e8N0fN>K5JAfzcVR**RkXG7mTLi;R5h=Q5( z14YUE)}+3rne3~AM+wQZU!&NUs($(dUWK_tfQ%LS7*{v1lX4qhWVNInaIOn#k`sm> zTPPE0J6*(thg93~nBI~Xldy(2_z3Jw389*%?9|N(rMkxRw*HLsMw5#vv5JfOvgzzY zYR#J7dZ6o`nQ#q)MSODRSPYbm7I-%+bH>&Ly(4?SqI9B9HQ~fRLNH16*Gw9mhI(cK zVn2ewWc`Ax+@YMZErVd64SdeW;vc6;1R(^B-9Mb*HFX5!DD=HBl| zPI%vl9Q%NT)Z?t}qcK(4HqHW;bENd1bQMG3?PXU*bl>nA@|QBK3!44Qo?Fn)r*ObF z`}v$l^x?`?%jX;9&8_#Asp2K8ki`zry6tn%Z9tlrwChtXWN~=yL|S}1_Ot;_O0o-1 z8|MBtRRpA%yp&fGej>xTU&GnepTRY(Z$nDyBv?x?=nzd&lPdCNX3+9OiAr0l;b~$+ zkaNq?(4Y-5DTz)mV_0CY(;(2n1&OE|>0!hhOK@Y_Vv8-kgbyI(&K*(*99)%Z5$>-axba%F| zpM9t@oepgC9?ndALVdh~KLdrTXkM20b+6}Fuizn^+h-k^D4%_+m$3UGw=x1gcRE%S zRDi221bX34usnQ03WUd7f#}=rRbIbm_pLl1*q4iNx+1nC<_zE(K`0gg-n>0MB*2Fa zKYj2#fAP)V@%rV7fJjL+|05;IdTynjY6M@U#+~lEm++*#e!<0<(S|XUEkWj#qhpi$ zasAZoE5HYy$R%x{Y{&%vhrpBXAYxjX;LET|H}Qtw)6;eh=rQE(yEWh2>2Pmu`wP!q zhd#{Dp1l4oKn(T4WViLAPxtX-b65pv=NFLw{ndsO#ot^AR-XvGeNpyRB^|pdV)Fw9M>-tLyDxq^eKSd`be1Wg<@`|;kz;PQ71st?Dmj&{d{XqQ7-bUfI z`XRdc*$ad|t~suD)f-4uGFiaLm!6I+2`#$xNm~~O!zWfv*hZZ%?76kcP?^DCY;y+6 z{_n2R?$?!}!_s0o1u$`@!CZIfN@U@PGuZg^8D!>6aiY{;<}t@}JP|6*vxP-;jlr(+ znJ1vf_K{Qk)D!2Fm@+XW_;VFvDjm&H7S)1{#uUqigiwB~4VB>v`L8sSHtvXL%zrls zh`w7X1vmfL2mpg!m{wX?yenlyDvsc^Fgfvt4jpbSG?iS)>M1rZ!lfZ^UPviYKDeG- z&ZK6C8=~^cwOAlz6$(;~Nk5x3O$}iXwr}8@0urE|qOa^=pbwxD*1+&;?n6Hw+F|O8 z`w7d|umffp^9)PI_ChrSR{V>|y5O>1r_2JZiv=e`XYu&rl7@-@nEiBan-HRDULS|L ziH^`Ac14u4`KQ7@AtjND$gAS6zxp?-@?1~xWO!5yHn2PH?bdZOcjPAAbS2EsAs|69e#b`1!23^X?7A0g>f@1+B|A=kALoTkrQ5NKeqR^ zi#u=HXB(oA*c?M)(BE2hB&^>Tfn7F?cFH?8^`8+G7+dzOAD_4cU747CXoy;4#oEuu z$OWi>bIF{NfLraX)7(x^Zqja70>E>p4D3>K9e!)aSwGVI4Ku(ME!xfoj6_ZJC2-T@ zcGc!jh{QF^GEYWW9BC!fnp{n+|pX`EMQG5ato`+7Xrc3~&j2q^kK=4uzJ zyHtjGEIIv=khlCR(pL%fH5nttb{Vj-5Pv{ThYah?e9yu^sscN0_+7l#Vt{9dT#Jmi z-An&ZuWf}l&Uj5sJ&&X4_AHJ+=PRYV%dZY;_5@w-LZIeA9i0q z&2dTDS%V$W;Y2Qoo}Tr#2Mi_dT8(TM&e@OFLXar0d&e}S@^9%+OBfGXc_$wya!0Kw zsSXWgS;46Xr3(VvAmrzRcR-74X%>0NO`(DsKj3ezmH1=+1r3fa9VFi-Rz$yQKD%co zt5c32syY^2DIqWhoDl?p&87-@u8qu+1DLNd;`LXUejvvfy z05&HT0L`2(Y?P}pRIdiFGPGWudm+8$F~F%wFFvbfn}_pHoF%V=z1;L3bAh1XXiznW zTi(gD;`)=WwEjPqnO)7p2YisgX|mXkoftqVzP{83KO4{hn&Ui+-F-*ZkPY#XuMIns3}Z7bkwC5tA! zaAfJXbq8Eu=H9j8k!#k)%d1CKj z!2~7m+}~0H?W<3#=5K-kTaO+qlS9G(La zVC8OvE@0QrfM5UOiHnfv2JP@+_H+8gaKBsn zgUYT8F5lWuaM~#Mx5HUft8v2=x7{h}S|4$v*WMxdRbnEt*+@mkmyn3Pm}8kF_6*ls za)G4yKc3!bYCas@o zA&Q0UZ+}6cbgz5+eyq2MJjF=8gVFzrUx5Yikh>u>sf3(qCHFj3Y*oj%`E6DXiXCHLKZ2#z@pA_&`I01-~-TnMrYr$;Z2yy#j(bVk)o*@F?SfkKuW z=6Tc2?9eyYaE|1o$-gs5#`7NE^;NRXC0h}_tVib}g__$d>{MrpbK@Eb0d4Ghp@em^ z-|l{j!KhCU-`+PAwqSRgyuFKU9pUWevu7H4clvUox_?!Bd;hNSX)8GFl@@$BRx@P@ zPKnAjD6Pmf_p-NeEQP+KH01&p}g-@2Gg~SyN&#lsn%Fhb6@-el?5n z5&flZZ@~_nOHtF%JSu3_rrk*ER~YUy9fXY_0O65m58h)9(g<9 z7k!qU2R{bX1kA2~9%PUOV(6KR*z6giwE_e`tu5Ra)zinTIUgeYL>#R{|3gS@`RgG} z6j`0&K@r%$)L-hS0()(vN4z$LA_onXcl-}2BiU&@Rrn}Al@$6;pF7;7-5pir0 zO#@3Iz#2oK{~!Qh$#r5{^gBexfi0RHXS!e}t>WaJY&hW{_k}|oXk5l1C5Ld%fsd^d z)3fBf#xNnTMl1$hK221}sMR2f9#9PrZ86xoghw2>cRG0`LYaNR3$HCaK?jBJdQzNDugxXRpydJ zNCSR=k`_iGvzVO;3;Yg_7*Aa&lr#8B1gPc6z2U7?d)ZfI<8Ee4c0)m%)FP{f47=2gg3gD(f!X0_LPMUM#2bQe-d>G3tQF(pYe&Ne z8HoMW&$dpCs}btI6iN_Kpbi4KOQU>b_F$2S#(@psbjn%*R!(Mto+yY?!L(z2T4c;d zb!aZ&`EpQ^n7Uy3RiUY3ff|Eolz?@AGz_|F*&F~Nh2Aw9Q+`zc-vdwcL1B#QRb3vARa#Zj} z4}iHOA9n$p-V)XW^=eUuhWQFcAY>;wgFI0_jod|3p-#|S0fR8D0DbXRv4fZbyMlTtG282 zJs=4cWI|^DMoOII(|5iOa57YP31#zbQMN~%&P^P(nE?E-}eUDB!E1&A99Kf z2IP%sxL&^~iQ;*@IJS2JEo5mz{~QTmldWOkz#;xHVnXAA?2BmV;aqB_Jh%+BWV`wb z8W3gyNhwf8y;kN-Xw5xG;fi%EiQEJyfCKdl+DcPv{D1A&b~_ z#E72i<&6B=hL7X5<1#S)KfLV$_`~-Di z(uiHc!VCh`jB!~QbTG@>blEokNT(E4?F5+=FuO*pZ7BeWNgA{Z0@YOr8jiI-S2o6h8@&LqI&?+qFmt2%+D z|EAUU2`~qPCFg7fH-eda1l81opEy7T@+1m?(w`D+a$13h9V9AAGE5F}-ZcPBJ7aTt zU8Opl4X38vo+x8PI=-@}S0(HRB$vq>@Xn4UUTxT=*QF`$2Y>`a^YtiA96~Ucg-f1uzV0*M>#Xu4b;N)6n z9|q?`gtr(3sY4=HLIai$nClc9aF*)9pFb1^c`d$G3h3uyV&uPo=u$_u7amamH3ZKA zYkg@*4a5iB0t-q){u;n(HH0~g9%wnO$P`T-EPWXFpdDa&Bu%(TwS~V&UI##B zBZw32yi-my$%yf#Ij3{t0UW0wD^L9A(mk9Ssp-35xr5PgDRp9N*`TqB>8VdwFpGus zgxSY22KkmJD0JaLr5<5|Oh-+N(N6=4IciP3*iNa@l-KljI?X{}IFh2+z?lM^ns66U zj4+$GeGwWJW@-5sU&w0XO($BBR+s6$z1;rw$%sh%{>wenyP& zEgsV-&OMl7*|6zXRU%qJzC11wq|)}|`%{&+`%lMv#Ta}QC`DQ*p=jdNvtMC({(`=* zyW)!`!0%V@whBKKI^RmQw5xc$exwWkH_xX7(XQ7AmCaAcn5S#krzwxW?Ylmo7k+q( z43p%W;*l`8$yZ9Um;DdCB9|h&4_)l-n}4gJZnmF`mUpY|4xZIu+h3JDyEYz*9;_b; zKZ8E5rxvp|7qf&6gZw(r6}H?@mz#OJHxXZ_fb85FTc1x~K{DayO+?ho&(n)xK+yNo zl=#w%;JE4NuZn%gXna*V?6Xb($_uCX{kPGXkDx z^;bJV;uTd#-4`SWYjr=~sUsD-$1eeqDxbn|JGJ?cEBy!Yl{H2j4{x8_Op9xBc0d1qvIo zceUbtJ+(ayxeOjzcJK$lEUUVwH*KKWtLeRjBWZ0lyX3PJ3+fF-W7=*iFS_FmfJZa3 z&hbJ0B!3dtdhxEn8`rs@M}xP2Cw@A5rfxnH-!uhfYt)0PU;C8gT2?}{P~L2sCuiS( z^w8nEb`zKw*Bs(^ia0&iRWr%534C9k$z$l;^OQjqA(wPm6Ua(tDV1J?Oz{@FbIpOH zOVnK^7Cs7+tS(~WUO;Z-P^Epw0ZyF%<%WJ}r2XcCFr1TI7g%aZBk(z4+63K{q&)~# z9V?u+69_8VpZEyacQaUjEJQlQh~;}MO1x&FtY-a|5)OCuc;3E&>T+P0F+jf5RCFLQm}$#;Ae3ZpBow*JH9Jeo~6Ftly-Cp8#cj?iCchf*3?VbP$^Vw<&V zzt~G06(QtzdKBG349tMRnQwYQUWXWWR~fm}?%T?X$&qet;-|a48Tq&N&>)Ui-bu9? zRE?!8Ed-Y1njGy0YpI(f5ULjUGq?In&DQ7tth25DT|wIhiaTR;eXRLwT*U(u=%y{f z?a)c)JA>Y(ls$KKX}#~Tq>ACnZA0-?)upW-S7Q|jUXmw|wm_SK{*Wop-9#juPb`Yr39Ytm2+vVqY%dr?%V%y(ZXMD>{i$)G+!gD6 zmN}PjYEQ+J!g;fE(SG8+!=wuk$}J|BaQ?7;RMRfWR}wZfc%5VXw(bz!#((T_?7HP* zHe1&7?)mC2LW>`j_7b;d@WgZ_Oo}!oMATd0`{M6gB?|D@w^bASz&m9zdXKEtvRIzF zkH7ik5GXtHbK8*^uuYsA{0iPhJV`iIp}bHr%iKjQHr#F-TaBo#3E|B>on%cv^*>#H zSe#rwiG`|bvo-dyVDYdbY|ALS4d`YP;=W|vb)7(Xf5+gqQ?6AOQYSXfh|fM*&YC_i zi9Inpy9Ssb(tlK~O>jIUjVgt0=?<_rK6(m!drwkbRko|osT z?#Ba=bq3Tjl)Rb4Fa&!ocAWo3XS``#l8?}NNLQyN6%Gl0YobsNB1RSVau}N9_pAugo$*rYM=nju1C0+lB*jKl9KoY7*@lZLQb_}* zNgsepI`lX^XKUKZId{CbJdT`KSEwoczSnxuE>!h+G#u-0w?E7qL8vY!N@bh#-U$=? z{6DJK@Kwgbc^qrF#N6RByg0?EU%S6&FX#1b!{I4Qj7owQ_MEK`N=YYq= z&k|~rj&#noRf^vHTkGSyh01(GYWVd;Ktezl^RkX1Te@$K!A$4N&8=qC&wB1hmRX?w zoVaY&d!`CR^*YBT-?r5~VNu*Tc9*2T9dJxrsp|b~6pwUBU%WjaD0F&m>oIPt@$)uB z@@b{`Fa@@+B>Y!sHkI|(Nvn7VsL+Mo-WrNwrFhD6Wnli1$(3t#^2*AT6IUVwmh=8Y zO_YzEO~kFMu8kUtn3l`2Sp?oIg&Xqi*;VIHX@V=ev*?$aAVo>9NETQZ0`HOUqE}!{BhookM0ju?f6BQ`tX6#bY;qA(d zg~x~m`?;ouP`G-BXZjdK+*^oa)7MHwoZrkLv3KPWI+K3PmPv=MrjYSyCnxP=-wB;I z89XZ)Sytex?6l3FiFr_1$imH9SDMsy@e?&a%BnbqSARm}Lw9!ZtP&0b5cSbI&W+b= zsU5|aq=YrCN~L;>E%$m4t4r+$)LCvNbKhK!+uNA;zOQgbr#Z7n>` z{SnfM>5ks#&J_r^>^>g`Zk7Tvt_LrK7E_&0x0FwW9Mn@UvgByOe1rc?GU5{gq8I!b zU=9;5S!i`fH6xxbZXu4$8dHdqq^W}kw%ElS9|Yt7W^7{_yLEJZ9Vl4Q$ol2c%FZM|8S< zcXOguGDSlipYrNSH3bj9J-%E>UdFDy?@X%w_n_`n^0Jy&HHw1-#_qD_KG0KBT}^dqBiVr^(1TAk!El@J05OE_&FF%2dJ7> zr=O-NJm-LX`qWt4>ix7O7ZlgkFq`%0cUdo4#1mE4q^g0#CjFYVf4Yu8HayjMe_l3~ zt<4u-#LKU8`DgE5vBOv{hrxclChN(9Hc~aX(TcRw?YGiBvwr`^Il>~mT1Iv-AGLf( zQbp`XVkx{p*FHD#^vpNKF@fGS7rx+7nSiseaRJA&?IXnlOi`lW0me?8Is`IL6q^=aEI zLuYSY%7Uw3TFE$EOddxN&$e_8)E9R>pT3KJK0lpKc?@r&Y`(=MxjwF59}?!~613)J z9_0Yh(@_nZm^r&$v0af0AX<!c>xl{={X z`@Y5r#iqph?riMZa1khK@pk_&YH12Sr4YRHJXuC6;WUQ7GQ-?rRcT;xu{{B3rq;f!IYIrTEk}BRY zXLNTn@=1C;l4#apMD`2!ZuqU~rz&x6TvZh+=u@MpyRr4$S=6+c>bK(j^#o{io9WCw z=AMu#;p}qot+71exjCc*F?Q}<%q#n9itHVg}C*S>H z;LwzkwSXxx?SoD=6{X*83AyT|Sg($E`eDX@glx-1!1u+|nemjash}o*DRyHp&pUxm zXa}16C=Qvy4SVopJ%gX169G81R$7!KR6W*@@s24TvnZUrahn&3Jpb#5wVKfGSFYeD z?3`K^XVP9QRQ1=Tz1?LhDw5~kH{lt4z9x?`+T}7)0At}O0h$SmPyVq_0zZJGD3hwq!97@-9+Aa zd=Ssq+p>pa0R7K~-{WSAwaGl8s!gHK^Y+dx>hx{1}@N4MLD267>mJLh1pSKn^_ZMSw5Db_j?+Pf8* zqlc0xIpQzk43K$XQ}L>PYcrDV$Vzue=Dmpa=uwN3uWPOx=DMtjE&~2;CEq1=2a?c= z5nxgx*U=RjJi*N3N$?ai>gPan;W?UYE#VK$=iq|AXpkX5MMaLv z$_6sxR~NSFw5)^u85N6voNNhP^57ZIP~?@+4YBI;p2OFqv#H)W4HnH$B?%UZaqgy4 z={qNfff4UR#?ICjHG-=>Bb`&}UyIK|!Rj}2j5NfCL#Udt97jGRR;5btOK}bLk;816Y)6*SYWRD2{2BJp76uGuAQ9O?3DtzKUTpV0Xx@}qX$b{pd!;u$ zV!R;efO#z)ybtGWDF({X;O12$*UlA^hng>BpsjuEmaMM=A6Fk!r2f#hZ=P%Kuf&Hx z+U71VkT7Rk|H4prIw4%(b$NfO+DNGI7(XFycK=xuTkt(^=H+;|Qq(0Z$f+b(NF8`~ zHKqRY~pzwaS2aSe zVvji;u6AK71Bia6bxHX@unQMBvjB1D&m1sCUn17xMjA-feZ2mf9tlmo3dPb2{ko&@ z&+{aBu3q&!GYqGi>&d>8D?FYJOp^1L4BCwEQ?UJ-uNofGTPLZIe)8JQiXLDeA}z7C zd&_H*xaAK0{ai5C@2~08(A`9kKISBulWGWmBYXajmo*P`2z1|~MRf1DRshHvZX95P z(_ccJb#-Tv+P+H+BFW5-oEdPxTQ+US9rj4WmK5LE#&(QUW$s1W-@27!MsMY5^{(-R zPPh~_@e>hk?n}?#ClwhwvSzc;(Kjg_otfjb_RF>Ha+pyU=na7&JxnVoQ87r8yr^jS zBO}+JBWa3W;nBB}gAs+B%MMg{>|tYFeM6|uh&yfR5dK1btm!n(?%FBreY9f)f`gXW z>vN8u)Q11g*T*r{2w?Onxf3+Gdz_d~d*Q9-|0SPgHB%wOnQ-36J7t(H-X%&bw^vTG zIgz8#SS99~$J&gGT7kYcl7B4EfYYEU2cz1G=%Zw@9r$)0fqy`Mx(7hcVV!Z%FZmPl z$EWHNLy*H36Bpt4y)~q^js%ISy&#ZyA3{|UulsG4XIm_vxuwQkrxUF*9|_f&J9JXS$b8IO%h+W03eyLQB}lS$#gaFwf_lHDydz(+H%O)A}D(g{^N} zIwK0VK;RO>neim_NSbMdno3-l<<27a)X_h|k4QX+8qXnp@kXH2hccHip|O4(zV;3K zoHfHh>mf>4?NXaZt3w4Ix69n$nW?QS-?oL^J5{y?FN3plh9c@8367P|@sUl-Plb{7 zZwB#g{NgyN&k=n+=9sZRtG>;p23` z^ZW`C&lqBX9YRYlPdW@7iSG>sD%5<(#JS&QU zE3Iew9n%GbDX;qyp!fwd%d^7j@q_b!v)7j?v?@Y8s>*Uu|OfS%k6WE!v%adA~!0%Y=?};m&UlBi7X%cMc=XZxLlF7?)PRho zW10alZPKqz!gSV#ac023>Y4ge>z`+Bk$a~3&{GCwSEa$*-*LO19L!x|ZW)OSAhiq; zJ7?)GqQi2{{q*DQm^hr@b$f6f7%DUO$1Pd9*SHKS+0%hQ?NTWztqSc?)m}w%KENW4 zyUK`t*aq(+-QMjH-{@}+L-mJ!f^*7!oc99y4xjX3SIRWM?3!eXr;?2|j^U2ovXnsfKn7OZm}!(H@|(dAL7Lhxi@~7u#5F}#!|4r z-D9$AOh~ZukrmPJ=l0T&)KI-b`=WhwKq@t_IcIz==SINl&Shh6X&c(n?^u)#{W zC)nmu2+s?Fz|1ih9;aWg#+7iixdpA-Di0Ajqy3U&@TrC}q~5_g3?-A!j*DEs9Pc@e zS!?`>HGTIK6A`WyM|}h5HaWaU(BXiNu}KaCb^yOI=p_XaitntkSK>%DdHRQh$;Z)A z8L+q}B$_t9)&pR10O`0;svzEL5eQxt1L_p2!?2>EN z?3eT4$)5ypJ6mEfYx2vLOW%(NaUcNZM9G9)XPo`C965t@% zPU#?MK}=^dORvr9!2D}7W1f>Bb0*MAk`Pc%*Cj@lc0#(Jg`9);htOjOf*EGFgG^al z8wYU(Ea*yqH^^<%#qQ(7^4pzcZT&J|yIoQsME_bF|Nq+OslnxmKoZX=aiZb>rfr04 z|C_csa%h=?rfpGy(+(#}a9?1O(|%sgiDZLgS2AI9l$zhxe$nvC`)5G)5BIILT$BzG zA2{EediDht`pjC9ikXWYGUO9u7M6Rr8I{XL4+}k%ewXkJ*?n$oTxdMavPUe{bRX2- z<9zFhVM0E?C-pMusKlE`jB2hmyWS7pb(&%cH*C6vk75;S;P&>yOzm1+G}ykK$-Mrj zFrHZTFbD`g2P&XA-dAx=BKcW*M3rQ8egQ+oNq7UAuIgqlLc$#m-fMv8?f$944W0}3 zBvY=Hc;Umc`7n!UDpTz#jh!eq#bU!0V0A@58WZ8u*i#JW?>*nO`QyW3|7EwR|9eMX z*ZIcBclhp49={DSnQh+}W(q^-A2=?AvoQL~x3TZPl^VSl^@xSwz|D9gy6yUZ*{l1o&`Oz>~q3+_od3P|Mz0Tgr z&%G{kWUD^s=+OmA(aZ_T(%ky6GM~+Qv6h|bP}LEdnYeZ1DKTx5W88sl^Gaj>{Y3<&;N(${gmC!F_iyh>hup>b;yH7wgd+_7OcBy9tE z-Xx?^#~@HWO8yx^PpnAu)Cty&YTdr*9*X+hnb;D9n1TCb^Wx`Uz;YWhZIY`J$n643pM;#eo9oY1dFT*ZD8jOuK-&w6OMUfjM))C#F$#K|=kNCUJd{^-73| z&iRbPdZfro))`x(4G@l3Ikn}{9ve1EP)azbe|rt<{j4+_(6MY-W8J*$I-_G}SYyTo z{~+}3Itw8mqIbC4kfW$FUpPmu4`CmL4v;{j4*g~Ex$FG+xQ@y#2m)jU;mOBv`wa2X zM)KRIu=YNDY{r3ZmH5~s9zS2KJ%Yka)bI0fq@t!vajqI>CBoky(-=%a*c8^ZC{u2I z>>A?pv~#OuC*)83@D6znnC5noo2;~VQ|=tm*G1OVZk~aj_$(PV+{9mPje2z3W4^Cm zmcI#XO%t=KvGLSHVemt*Dsy(-Kc8RMe}2BcH+R3^p;{f@T0efKEt_$Z!1A8uf&Odk zO8YS5HU{Pn(Vpy3yw;x4tkkwlli_5=cFsf$7SqSc%4O|a63DOo9)~YKo=Qaj^$Zt1 z#->f`LR8~Eb$Ai_Yw^&uo0}72n;BgxC>v3RrUE&676-0E%N z%~BlkduPsUa4i>4p4Z;8l@k14vx2aS(%~Qd=|d+U2=DKse3t)i6bbce?}Zom*V(0k z8C^A_FGwo-yaohxncgf^W)ghL>wMtK8Cns>9TsBsA-quL>qEjsOJhBuFw*{t1$7Dq z4K=3$C(d;6ti8lL)RU7)1W-3U@tky;u%T-r%Hy|Nl)PqngD5=5AsD7*s=`g9yK}kO zUPz}zr?~rH|6Qo-ns=%`EK!{iu8!>k@>x71xy3rT=};;dUw$j6eR(#Pk4#RuO6wjx zgZj}L51;abelXQrWcD%RD~*SyZykZwS6hk3SY-pAAPN_~R7tHD5f>R7$?x+?mss0u;&w zpCqera#VQZ7u}n3$A-vq=@?{BNNiAyvdsib!B@;dPMas(M=h+aXKYOPR2-Un-iYJI zH1yK{ak@YY_+e@hG<%9v3wjR0IEQq!zQ$*l{AsO&84r5)X4ISKdvwyk=hcknY;g2% zoz+NkZq>k1D&}#~!mGLC zRg3dT)GImXJzX8Qs{l_5a;PfJNY>ow;NaJ3BsSc%;E`!EHr)Mqtb!Up)upTo3Rk1p zPBGntZr;*!o`vAZva(GxS`0lY4^$-;nb&${X0ksChc5~a-3OB|Ba` zQYgcuKYhsbjTLOw(7VF)6}=XPXYxYI@|E*i%dJl>xhXoPVJdRZSim4#My-iy=pn+E zw`ODvzJE;eZem;##!g+Tt(s;Fc~KI!gN?YS%BW2(K7Bg|=n5mZraOzjx=PJL`nI~7 zh%~z*P34l-b}NLEaHolBm?7nU%U*w>6h9J;dD3-*mtvqZGv1|~HZl*T`S%@TH6Hnx zl$@xzQ|&Tti>KsdKt;83%slFUEpTo9QL&W1y(r7i;uV*vYr$Wk{i}&PAs|}|&UVRZ z4kyo{C2O2DV}G~2KN6~cj5~>dkLvoC0Lt5ie%eGO9aF_dYNaoFuqQjM;(9jGi~Yqk zH-Qq!VYyhHg=b)Z!!z!QhdX{n_idK?dID?k5Wevb+3v$JQlyNvTziaSm$cL$|`aF zBW3{#$=6b5M^KR?wLpFALs7}@Vb=UGdS*kc6G;!{i=<#F;EV9w%-28yWi}386baXn ziY8d`!D>F$-^cw-X}aXGGd$RMsC{pUKYPUgYb|>ajQc&`%b6Q~4hF`&O}U0~t#A=r zrnSy_>z_#HgJ|Kw>D|hsL!)wyIKRc~9Y7%FSi;j;ZA6&MxDj?3x$C60YCBD#N0?i| zV((cUxrzE>V~)lk-7jH<`U4nLP3+ULlM6=uCY`&AZYU-~Cv zx4ml7>>w%LprW0V)F2G&8mKoU#?Neopx(srSy9Lr)P^s`sSXUme6btgI|(ZVq{o?j z0%Mev_F1CUr%x+=x{vR%F=n}HFzH$9YchBchx%0Fa)}B;MGFJcGzi`bnGcb6Mb^35 zyvI-u=U?huDHz`2Nf%m@33M6Y#UImm-=T<9cpM9j$n6aJSA`F}tq) zQb%s)f)Ez@!?y>ak-;jX`40Ee|C1>vNT#eHnM#6WDg}}$MPz3B6gP{>g(((0`fhpz zvcW644SJo8)unj$(Ahp$jZOEQSZ83Mr=V|(KQp2W{v~KvE=(ZeOgJQeEVZ@p*k~Fhra7vP;c^q9%6wLs?%tHZ_N;bpQAo|!PDlySH4fB zR~GtW!Q7wH`=uuN3#Mc@USwOE!}EnTq%STIKmMtfp4Pa)g7xSuOj)tTAdqWm5X#d? z+$qQH8#dQ8$UJJ6MAsk{52sA_x<#J#JijD<@1)-O4d`iZh5N6Vov7p?rWGjVpc!~*<{I{b;Jo$)#H$PX%FZd3&J_)ML2y+cQBr8 zR9zCN(*9hcK={ju90XDGFDRzA8J>asnQcX@`P*dtcLpwrxxJa9S%EPZsEjxRRD67w z=qV^3XuzF#_nne&n=YvT?uR_g_v>4WrsLkw&Fk_|rpR9+o+i}%vGUW?!zV;HVIPl3 zD~@OVYEPk>kRvAxBEBYNH6n7;RSQ4G&Kn}+wvoYWJ*14Jy;*UHuYQ4Z|7>M;N)@Gq zd$Elpu7Rh`dzZLsss>Ba`;VHoykTYd&+aj37m#wYzmZdzy6=-O)vfAY{}T^^F3*kk zq&h~Ttuv2dpTUx-tZB%rYv3$XIWHkh3olE)ru*TkB-ZNo?}7(aHoe{D9AJ5L@iJ;G z{X-5bvOiDtu#q4;|%7(gO6P!)NZn+P($` z)kr_QpQeCV(T`d~{}sQdW+R8sxtsp5lKMnj+-;X+-d3wQ$je#jR0$t{_)~FQd_+0_ zh8{Ou=ap8g|A(u843D(w8n)q>6Wg|J+qRR5ZKq?~HYc`iO`J^ZWa3QhynSBx^XL11 z9NX4aU0k(l9o>a}J-OW!AJ8gd$K2t8H?O$>QUO_cWIZ|p!rX#^8#mP}ZehBnP*SgK zFb)v%;H5ShNVjpD#(qa`dY{<+kfZKoX}=NlAD~rT4|$gmuX+U;358S=Vj_gT?0CvY zwRB|O(%^5x;S*}9t>tPECxhLWzu6fSG*-Jy8IPq}F;B(t)_zZ}_v$N|uOHYvSn<`Y;qB`?stR3miUN83u$(PZ0lPG= zzABQ5X<{ES3;V|qkD$xNn>ZEKM?xl!(pV--BVm^zy)*d!)sP0A${@C|wS z4F2o?whH^*ISjx+*)s^dI0%XO(WOHk%A^~FgE0LwWAZA{rQg1TrqX|^H1VIz@Z@CZ zdU4>XU2Hl!0$1PW9QZEw3l5$(b6kcX$@2V>bgga{B0M7uiG$VuA0VsuTd?=@{;J<` z`je4*A0*fFCQ=nHWYDKsKj>z9cNgIO{uB(h19;udnDFA@0(?JC=b#byKFOpX$2<<{ zA^dZPU-|DA{^xYP<8HwB{WIWwyq~ncf5!3qYuc{9y=V5!wQB~^sqLPfZ=~bq@JoPD z%Nd~iOt5uOzVvvH|6K2^cb($Q=B)O*<0l|0*k|~>4cO`b_)N74BZY_(VNypEU5bH% z*sT>5B)jtl+>7C;3Nqc$ zE>Y&OX*jG|`?mK|)ZUo4>!<99)#v4Rcmy~xs8J$@v0C*W!5x3a9;gnc-aqQM@<^k* zY)~q<>J+iQTOxJ4Mye=l;tz!sf`$R`0bp&6PUR0d#=@96?xEA2Vgw?$xDEgE&!dy zE>OwNBXtUkMaeN8k*;WN@co)*L%x67`jN^C5ETk3Ot3S7fbM~=f&m4G;BVs_mA^u8Z^UJxzyPXw$u?=*X#E|7c!6n-?ojX3UA1@LWP)7m2}wRVo0u zWweUt%xY}I-+_h1x%P}@kx+6zVU znF~=plwujj68hZWMVc1$aDwntj#oUzyPgo2GN z(JX;^5lyl-gwZ@(U7k}pTr32E1A=C$U8VStMbNx3OSWh}rZA*Ag3)axk@Urz6!#Ja zGc%jJb+4G+N$nCZLHI1}e(=}u*(OM}9K!YH*2I$akFuTyR&4H&=SK+~1PpvY;7UqO z(r&chYMfNyljvq)u27f>nlq6aAD1KBjrmv%H&@v!ak8p2mbjXh->2PF zP~&cw-Iip{f8mgbY|SLtcL)8Wi@JsE|NalDC4@g_Z7GqP?|?PdNVHd*xR@oPt!gZT zAY%3QGjzeq!&GctdtN}zHw4Jn+6iNX6e7oGL(7;^;{=z4a5`t_2V|X`uSRfBC8mxE z&Tc>#VH~4v5JBh5uMV%uZ3Xb28hIF-o_ln;wjyH*cO*YWL1I$*W+>Hz`3#7bj{=z=T z9*1#{hZj^hILYGwbg}z9q5@u$V9{q?ZTd8)vBLUoM_utY*M=ywXffTh=b~DT9f0Gy zA)rj@kj)(xlNvI7fA4++j-}|*X`%6>BKAnjTjuOjnJWjvV&zal>NF};cWqcRi~-VM z$TR!Yh8_*FA7F8BR0{zs$j`8!;kMXXUPZHaO}A3YuQATiPSGFo(_vqNEe$!6BOq;; z$GY23G5?6B;@@kfv@QHpQ$HbB^|SWEUdx1V#ix*jqJbiM))fdvmk`LxAj?eKEqKnC~X7q3IHnk{@<}#hQ8Ys`QCDk9#F{6 zOCL?Cfw9^&X@#yF*=<(jVhob5AI5n;^h3qCF)xUx+HQGPL(p)_Dz2dm8#b>vq5LJu zM4_9CG9+c1I|10}amI~xS0V}wY|uP<HwBVsc;so{6)#U2qEdxS@I&ayL=^mK2H>;B}^U$Nbz3wuQVtj$wR|9?R$3+ zqT7Lx7kgh$`}owj@rr*&SI({q0)?cm8}M3VTQoPiS-HH2H#!2Y?_(2A`flIGOnGe7 zU{>lzRXiT#dWweU%2b>`S4uKdIm_Vs&;D@AYyie04bB20Vg*?|Ic?quaI#dE9I-YV ztR~FLd9%mrU|IW^X-|Hr&#rL%2eEQ8{NzCnP%yfwc}mQhL1Z~q#;)&KiVZ!^+{B_> z$mo?QTs%g_SC+1(571Qd{a1~SSq=(SOxa?2%N@p{UgAPvzkRmiTH%wBoZDh;rY|Bh z2gtx_8!A}j-Uo#YUfdsL9oP}iiugF6T@m{t%q(boA>~^$&t4oBeCfV?)7Uh8lR8}Y zRBZhNWT%+D#;<9}L)4=PtXp|8NZ!McT9ql%fkeQ)jnHB;iE!7G^L2ksq?fNi=8$_q z{Kvk62q5CK;7FQ_QxBQfgc@(NSF%e06k*xtXR5wT&y09C*C3|s_+ez%i@T89-GFt@ zuGhp{5I^coyy|}MeS9AA_up*jAy<|iT22?3%36xmkhE%ql@1zLVUu4 zAFSf{zz>bTWEbF2(Rs&jpL?gOD^PLnKlMd4*6X9Ce4w--o-{DIUarREbgZ}lM!Qns z7Mp@zSBp%sHRq)eI;8xx^JRSLSD$~kbL!gqsL2RKh>!BA3;A6?4t6k_y(nYi3TJFO zbisE;Pp*>a+&9^$65RDNuM*U~KZyMKtAY-Qn-3yx>fK?9we1!|hAKU(H!4-|v^VJu z*Uf(DITt}G9wjS*@X3kkyF>>7I?^j{Z2nAjDK8Bvh1-J$E9-)FPpR9E_gN6SBAJh4 z6M|wx`20A%_{`+ws5Hl7@b%sxOiv+QNu;GKdsyODZMycGI?YI4 z&?Ti^Gm;JvT)$yw%*M@!Mv#$uV8IyoMq%J8%`@=Z zuGQU{&#arS_n0R2mFgpsYtA(1vL?DsXDjl|57Irjj}L3xTyyUcQ?>eaVHp3CJWplD zh+eu`azjRzm`Llm&L4=T7y@l5@DTW}R;|!_B&BLZLy=hd_BH*MaTdZs3;5bUB?|ax z{DAuba^5rQTryjbR{G2v1tFXD?uhLpN1oAj z%Cu|Uzs%b4wF~AOqx4fwKd*Rb7?k;OA;#~Tg(nT2_K!%VP(7FhVkxDnD^Mchh3F*B zAFpa-42yB)ccttged3myU0jt8prOkmlBSwNq;mJkr2;0?(;8nbI>`Io4Xljt6XK%o zZNfY2&~KB^fCea!0itqV3$M8>GMAjgo_xH47Qn zYZbfs!rE}2_YziL>qPwmG;}p&*0ZD5MOjJPqonZSiBnuajy@ga)1B}4!*c~dC~mi1 z5f%V%yl#kGh93HxIZoh~_3P_vdMSbquH)mbpkh!7y&^lHVs2?Yu#f^KJWY55bU&yb zUkqUgXSa^&BBr)1x4=MJ+?M|?tRW(;dJ!jywnc1G7bl*{{usfWBCW4^WSEh56=o zbApsrH@FLU@;~HhDT4E7P_{yndimnmj$oF|Z0{fA8Rr@D!yi98#5S?}3ufmmICXgR zYCLg;sg7-?JI?J83!B{m)sjGE>+Qxi8!^#2f6#@FuG&9eC`N zstof9qKGc?8?qEKoY?|RKqgtT_RpC(kSPfI3PDy-9_MH|{|M=*c`XeyO?BwZsQhue zU~n}(@sXAnZc57QEN+Ai8q@h|i=TiVxkSE;>$>iSP!1tc`WR6Z-1<%;vQ_*~S(iVn&zB#D2_XZb?yL)CA#7Vo6Are}r`sEKzDAf06rzX4iL%y%;+CEL!rsn~sjW zJx`|m>m_D?N?xYyR8aWYkC>tVO_bg}t|7Uo&gxJ?ohL%3mK!_)+XQjnAyWoamRTP+ z8B)${1&bOu>w*+36-X`Y$-b&;Zn(y5&S5e$(2@>eG|u67TY~80N@d(ALR|)KQswat z60E7Iug)NgaAg$s7|PlxFpyv7pYK6ls>eDGuv}tK%QTs1;jy@W;c!rcLiiTyR~uBK z_)ir1ht=$ZsE|=fZEF+R50n5BIOgAb_!@kD*Er)J>NrXMru7lvLeK9UKjm}ROIV}k zkzrQ<{8}|f#iU2D7e&7wz4$<{b2d3|9!@z2YNQ5ahSMcwSpkIF32g9nqT3`upV&UTKM5Ya z$!SA}ET_X*Zl`Msp{(O}vYZ`KUM#6zxY2}!i9IIr`KKp=^166tBcR9O7=%Jc+e7jU zO?urx`XmxV*nYqYbAuaT{>ng&Ua7`kjTF2iQm#ETOq2Kb*4vR* zf}qD#1;lQbpwRf&9Qx*vx4zmg6r1k8d$EN#+~BxOku%ACqNWDF;uTDqCUGmUn5W{1_t#H6h0nF83pI;z_v*Yem_MuA=<3{05{oyw!(+*K<@qm zRya>6c}*MYQT2<0p2Nck+%PFlZm|4v%*e%0f3-xNGJ>a)uh98DR{T^1i!m#ceb?Z& zBI>n&&c)sUPNZ4jg*G^3u@p7`jH+x&NQq>K#_{BU`FCm@k2;VmPF4st?twDur$qCe z$k)3+?g~=B`Ga^Z=pPBX)dKNyAy@t}BZPX*^H{I0sm?&@+r8=vfCUv{xZAzs6f&ZVZH=BO6{VW7QW3p20|TfR&$@A)V7^gbF_f=#wk&3`>g2I)%}aBv zO~RfZYKF{}!@sHS=6*I{sz%^k2IJuI9<+pEj*j zAgAD8H!`~fW)6hA@BX%DXs}l)g#fkoE8}P_|B6!)wN5@|U7Dka>#uLTks>h{LisJa zp}}aU(~0*}c5YxA-=xssf+fdHMTb>POBTwE^xZp^SpKR<3+QAJqN0T*xv+snT3^rq&} zb)xf}m|sn0CbfLG1o1U~R$Dt@Mqb-{gXsbO&}jpT?XiEyf6@6q=)~X!muG}$Kg4Q1 zn_5p`9{(w5xx9P>t_wjAO&>8&SW=3~oBj9`1B5VX@s;zajenA^7ka?@i9{&*lXk=x zfFX>g5D96$tiT7pd+rXhLxgO&PMm|~Jofx33o=eWK&-6CaevW|HNe9}haad`f0w!U zUJcs!Rt*YL(}0Wp)3)~`!A}UJ5M$(!b5%`c=Uoo$>(mhS_DnA0E`fsvPyqP&00MRu z>XX5Q^AMSEtQObBpr*cAKwdd#&)CLn75egoz5>7AeQw7yk^0{_qt}k!&-HqQ0+iwp zxBPNwu8N4tFD|ℜ}PY1q#j(0qlIZbiXQN33ee){=_7=xBqV7?MMLrR6&X4FWdl^hm~HJ z7_oqW9;(B>I{gMq4#>|a0uMyX*i8hY(pdg~QE9sghn&d)&qn*Fkeb5>j$k2BoEe>? zJJVMuP};^w&&JhPJr75WlY(0X03(%DaUIpFZ4XbX4#mC3ZgtX_QB(g>Qi%n_{cj=E zuc-8FY_(gD-GI%{9yJB0*YjJll<)AlIX<-P#9YLH0y{Ia(oDcpkf~T{3+O`Tn2wqH zpKq6qPygqo_#322c9AON;e6?fF_pUo7U-+jZ=--Me_rL1C!wz{zLMg)U;hA(xQ;Gm z8y%E7_U;>iO-OjyG}ltwH?+T9EF}8#Az{dEP7z~?*(zo!rYH8E7~9yp*p_}Y-NoaQ z)~BvCVsT@oW8{D(6=#POCapNRFwe?5O2nq3tss4lV{1{u4FOHf zDl3&a`|Gg+s?k_a@ukFR1EneU^i3bN@io#=$vh1%Q9L> z4>5Ihf0gy44Jr^hToSCfZq9>vug-&F8G~q(yNFBVMCSl}>RMy}wcS??$m-!J$mcuszzNQSDIkeyXMDpJq$lErr%d-Ib%)-hg))PM0L>giTS>% z;6xD#X)-4(#JS`nUjEWBEo8Z%78EarKfw_#D1i(O5I`!{pWsf2c{F0ZhAg3 zb`TP(Ou2zlG(im)0+paq?qqFtZQ~t4FoQTe=0noRfj5|4t}$cM>BNRy9k^4t5ULD4 zat3)MNG{4(5-D4g+`|ef?VV+>=*zO4gp!x#uelLc{(8s*X*WQGLN&8#7jvE)Gmp`b%R=^CsW zKt>?dKne#3At-?T{BcTMi5LhKvXp!ZjC19q1IE2LGCYuiAnb&Y&w&buJTt2RrM@Az z2sXDTkX(o{ki|LRG^h(=wSi5=g9wrh3`Ic>0dS39x>~XSqo$$YLtmoMg9t=H9+XZss%y_)Aq|(0mhlF(xqhQiK5~5g<1W5g;=~ z=d6g5X$3i+bU(b{MS^D*Xo*WeUTVe+4I#H2e8>#srfF9IH8p216v7rX|LiCgSegp7 zT;dQaIR9|0R3;Fd#tDTLN(h#1!fr!C7ve<#gcuE?2U=pskx0{bu|$655d#Tl#F1%0 zDB6s%q6{h!$iz?#;P8*CSvJgAoi>Q{=k8~DYFDDN8BoN+I3+%UbME&y?o zrcuT+q7T-fmg(eI;4}1tPLO7x**ajsax21`2Vs&ykWDtk9me#5Y`=kvbikQ886OR- zX+_v+5EaDoHf={12*onyrTHIGt%9N-lslw%of;@Cw2;IZiPCND4&q5iAhAzki>d+S zH}@l%8~glBF?rPwn2W$_RR9U{D(E0kv2zD2gAyn=y9wHokX;Iv!=9|X>X zTpc8Q)c+u1F(f2phai@@Y-kq9h``{#;9aLcHf?#h{{~D6)1?y|-xyYLVuE`h3xNg> z2S?r-?+-ZakDlSF=vLuX7?2FOs2&A6*nnZsS?;w;3e1UY0LY%CaZn2^2+(+JL4dS_ z$=S`XNZ#ThT7}m=>6$J8p=xs7X!P1(|I3ss`j-sYvtr^>7Zy-QZiQ+J%pIKLxWvT4 z9&CD5^h*$nzcN(<1FV7Iuvz-h%pqrbgO1z-IFwOAHnjf8sNkj zD-BB=2LG*3I_M&@bV|s#!Dih37vs7+(AzaV~FgsYfRamS%Fmwnxjv_ox#fq4)irUQng7jRyLO28KC?D95QhoX~&W_uh5bs{L0`Xh$P}4}C{NhLOX{j=cZ- z&HnjJsPFq)$>=Lc(of*#>z?go`)e>Dz$p%H5_`szSt0};uH#@RM6b{E@La&+Dq6Q! zv>J8(@UiU7LxU6G-n*<=Z|J;sVQ*lAr&<38>mi}n(9y%d(XAKa!bdM-pk}q%!O^1^ zYxRc5sNUAUV+S!bU+*UDa2Rma|FwBNy~e*|CbZ~&kVG`)bsEOz!Sw3<`}+9>A5~(U z@Ab72jqpb3<26F)`(d==Rk` z!JPGbAL@1 z#_;+zhRi9(|nr)4bE^Uj(0~7R7=hB~}UC!))S%xzoxlEeT$`O(ceL7dZ4pU)s zj4@|rL`nN!L5Fni85WjrL&mI5u}}B9So-FAYzRlK7^96_=}`G5IyH)-?3}vk4pKr5 zf0q!`S|1L#u#7Gx(>gpJ>O*+>G+Iyd9Wqwds`Z%J6)vFFq9j-_h=K^qWYJ z?oIdr+Sfz4{Lo+i)^=()uC_B1Yw=iJuxjlojeoh@l!h{JEDVfg6QC^)Jh3+Br_ING zc>Nvl;N}LY%NLY=o|%I$z-QW6`B1jKm#|0nD3W(>HN&PsA9RyMp3xw7bVjO^&5|y` z-UR#mYX!x~@x;s!LNvE0AZ@QDH$yxMq+opjkVt|n{bq7KE(!+$3v1u zxfVcY3cK=_#%;QWQ%Q_hH9GQn%n`bbC@&S6m4lLZxRky)b z%PB(-K8F67ghX&M&18QRk_EOqpYC-9fJw;jbqzqIN?{2Q+`spd+`RP{g#KXw7~)d- z>MlVMJpK50wSP%uwm0b|tj}*4xTcW4*FiLSPPw z=2zO3!r#qz%*0R6uJK`LT)nCMR_dZG`?mwYL}(>Nyo%=qqA?bp%J z`7e)}*(zDn3yP@Az1LT&YWt5`%BEofwDt3s;L;ZFAjA!}^I41*^L<8+hcgkFi!FpQep{HGr@vqqWHC+C6{uOc^+e zFUWE}Wvtbm4!hKfTT$0PqJIr&n@@|1eOx`7A#Tt|y;B5$;4@`vnRwezc5*Yp>No zA1CeV-4(%Y4NFW7CiK_dggobf!;X~s^-VZ(#zqpEjO2u&T*s~EZeop)@7rts3wtr$ zu1jF*81Gl`74*RFxkC&Q4`dt2GXkv|27jGfA>DQMH@9*QGm2h$1Ef`-j%5N5)$6C3 zAg1AGNFOsE6t_VTo8Yb?@Il6#*_^RncW+*YDqrC@l*rfj_zsu^AbH;*igqqN2CIhi z8)N)cD*9f93FGp;Z(jWPlSFTX!TAso2gJabAf4s_a`4mn5)0BN=cp8a3sMT|5Hv%# z+*-??RU(2udfM6ma6^zH7Qs@IKRViY?QMi7q6uOFiZ}|tcPpLv2(Y=i^ zG;c(cZJ@|6hHi)#+|rfw4?J5gRFC&NRho}%fB z`Cv^tj4L5!%D*)2ut3Y1CYsl0ZF$#dIWW1p6v~K{hEZ+Wx85?pp+4ITPg5K*PH2BS z$Pxn=FL!x@anct83|_ZUo$>jE^U6@09rwp;>p38$BhYmMOM?0I81Exe{@WsXpE2dIX;F*sgrH-A?Q{0sTR z!nif57pS?Jn!i$B_`y8UT`O|cz(Bma}=lsvQ?C7wT{cXnS6bM zWv|S>Z&Lv#e%LJfVikemA6|?k@bTL!(c1oX4mq9^Lgkc$hwbaBi@jiH_*}Kwq`}@H zUZSJQij3tA)=px6TZ+Q|Bul%PgH#U;xeE{d|MeJ#!W?Z;4BQ|Xxa zXau|g$uvgyL;=+-xA)AxRQn@dQby|$U|Mb>e4?jV$pR6hH~RH;Px{=5h_i^4{WgP% zr1{lPSCH3<*A*oDz8fyna1DmGU@xbt$W zyk~x?QOEl+nzTY3ymxdv`BE*K^cC`mPW@y0fss9!H5w7mFk3$Z?D^Q8Y4pjM2Mejz zibSHS2I5KX52D}QDl0sIoz=>zpxbp#nPD~t-FrEUw#XD*r6{DX?9{%z{XOn!Y=@D{ zvE9)g&i<%~$X(2a`MX(k@OHthurW(27g_{?^l(DQ+)KjhQ**_`#VLU)!Fp~1$>1mT z{56%)p0`s^`RBY0XG%0@>$fRKOS10LX5C#T!ld+!W6-V0*5e?6%Q)y{MUpA!$>Vt> zx+^G#x{~Y$zJC~SI(G1evkhvef*q5_|jhMj0}v? z0u_m$M18Phg)xAHUK!1NM+RnYym4sY@%UHQ;dmbU+1W4Nf|*|>OG_G$(Yg`07@dgw z7pzbSt1B8n1Ir5tt|5t}s_yiOk*W=({&&kBanUa$9~(HFp4w4i#F*CjIXu zYvp)dZ}zLN=8ibHU3*NbY4>rRt@N>7D@-no!wsFSk89tVgY=(WyYvoX{~VcPHk0?_ zfoXqTW3lu8AVJzK`*>o%CSBIaiuzaWD^TU6@?bDilno$ufXSaVvECw>68kWZMQk2i z`kB7A9`I~jFO&ugd3NX74(5)7cJgx9NPSs479|ZZ^2Ih?s8KGKMSNPW8%aypZVhm! z+tngO{oPonXFzcA-0ki{Uy~a3@5VdQmoE=rHrF42WAQzFG_CVv@6O)d(wn#UUQj@{ z&a%Wl=NYhjj;e21qtFxIWFFSu1(BiU>Asvp_88ANSm=#%AL9kcV5WJyW)#8HcY`(m zvv!g-d;YSIE2uw=Q5R(7HON%|BWKmC*>MnVM5x`3%S|sL9jN;Xe*CvfEl$8O)@maQ`beHSzqJ<2-$z2@O7R3wn5rgjQ95Q|vq>>hI=n zH$DKo9dfk&dfXN}GMt-I18F8^Sr*N&2CTHVgYoX1IaMS%nt8KzmF}F~q-*P!U9l=* z8txd*iM78iv=pkE*WH0T1~wQBf4%z(RSf(hAmjd@z63+{tH;s(`-;P4=cM&(heXh+ z<72e4v;F`^l$+{z7qaxf6T;)lu>!UoMa+Qu(oon)F-U;L&iSj$XnEp>hrC1A_51R; z<*%$CukSs??CpK>!raUQM?^MRfOU59dqPXsQ8yC1 z%4LE^@a{jakYlOyN|Kad4u}IBXd`TRUvOK5cC++03^}n@J8o;UN7w6)Q zY3%s;xp-d9{B=fzfEk!u$Mq)`I>|Gw=}eb1ErV!@T}c+e#E1{h;$n zyNW@-FaMCUv1ys>Ny#-~2lUD4>W$PWsqq$EVrChxSt+-z5V)s0mad)>YaG4dmqzOo z3=3##p+T>oyC(iB=T`vk(o|1L0(WV=1JE`7$2W<>9!{VYr`hGj4o-$&*>mFxj+29M< zOjL6?4y$eRi`;!R=$p>!dW8MFcXcKDk}fD~cJ00xo|aDdv@M(RfA!nFdvEaKp1gM# zzQsMhO>5fG{$dww&^?vLF9?TO8}R;PE|BWkgW5k&yzlzg@IlHCssYb^k*eK@+!FBg zxkHuNA6BxIXRJ(fhB4UTqSiNUGDayt{-)n6Ro!E2>*epdN#mj1P>|P}^ZhL($o9tj ze|L1i>NpO;|Nk8_=_PEpp#%u^n|=#p?=T5B2#1u5ys3_GC>Kf)c_cg^jWX^%eS;Io zrgC?wrb>?mUCmC~&_uZs1&FEgUPcYgdH(paq##@6EjeELT)MiCLoMlQ1~TzK===nC z{||bRk|M4#qVb%PcF>3b*i z{dx8D2~YNL*8aUsC|pU!@!?kUu%>K^pt0&w)R7X4bLjZ`?=wz?G|-Pp4NwzUe$H(! zk7l3hdUEzzvH1-6zE1$WofQZ_eI7p56Hy;OTfPoAlg8qSi68+qou*?0*`gitQF1I_ zPHwi1XNF!*840Yz@O=xD2`vdcJ}wo?_;-1hZVOZoa!P@v>1@q*zh}jmu1$V&Xi7`rltOjFj#CZd>?hcUjil&mnKGPs5%W zSH7R@WxXkU#{U8U@BJDbJ4O{={OR?d96A2~`UVQ z&Yj)DUJY~fAZ{90zZ-q ze>$V8jPZ88VI+o!@F`FXqP>u}*SCu`GmOF%EC#33`AiD9;STYa6hN^1OKbz=Qq&r} zO$@Zb(R+|WfbWx zqj{v7s{7)y@hlsxDf7qz?}{KDYTRX8nZ_>y9`yiCKVz;N0ahqd0tMEiiKxusLQ51O z+}FZvL}t`~z3CI-EJ0*T2_c1Xu(qj=6gLSiVA~{~07h98zHa>`?!&MTKXKFL~K4>-8&pKHStwDihOYr#Yp+}Cy-Q#=$(8%!^K?YKhm zXhZ=_;1X8uQ%|)?{eOH4CeSv8MEO!>6=yg6=`0Udf(}aEk8T2TS`zO3a$BU%SVk+W z-2HdEgD>uTDx5T#E4yRMuP0H#dx_}gshx2*j+gF?by`)FR;{RUdr{HRGsNAZEb^Jb zp-t#7RYTuM)uP>uU;TM^_I(HtNAVUqK=Ktz zhxQeEL3Gxf0k+=raK)^rNb~43#pCF+gJ3+MG?Kmb*UjL&r9fEo7W9uJflqUvehWYV zqJ{cZ{4?8zx8LdKvcc0^RrgQt-cn^Z*-Ac3!+M6G9-GiC?_Q5RD2vs)xEu2xp9Vgg zJTC!xUhcBKX(FG6y8dYF+zGTS0GNwo~ z#*)?Tm1dMq_kOnU;XLjKX#0UxW=je1N$88BkrW#H*tZ(E+XE(AuF~oDK(@B)@ri`m ziY@_dKeQ6QlJ*ftv9{6JHDj0e1#UQkuR>MY_Rm-awkYbWUm3FVLoEZqRrbh245Wn2 z%E}<9H5=lDGiMqFOm!MFr*LIyvC1>UX*uPY5X{5;)@fwCjJj$SGze(6p*GCY>=qt2 zFYIK68R!<_?|F1(MLS*e?s+!RDDCcJH**6z9d}AN=WfyP=h4uFYYvtZiS|g0wa1o~ zZFt>Wu9Q)mtB?-v{BHqNgWa&KBmiNG54!9(gEPSXunC+=<|;vjw@z$`iEL-LVZ!MR z(!zLhlU2ZC;j0TL!>O|!bytAEdjk*K;lp#Dlt(!e+v0{4hQ6NEx_5`pbP(sj@fA+k~<41_ANKFiow1X+sMh$X@ zEbJh|Vz65zo)9islmAG@j%&_jNsn)U6ywG-^Gyt3(c^4*#QlS^-)^Z!L~I61w-EJi zG5Z01X9i*2vv&`esU%nu${exhqO!)3aS}lcJ+KIP3UKa?slet4p+c@|ibn!HMUYc#^EEmOtdmIp(IZRX8QpoPF(V2G zf12qsWmv$$+c3QBo7PAxh-;a}aw&D+4$G*CSCFYb_Wn2ylWF_5O$@4druuK}40U=0 ziob_NL3n!P&~{bzHg3VZYo=oNona8}A*PI@^NpZP?Y z>m}F@HJn7T6}W*N0;h^zCD21!g^#fCcDA~wXFdvZ|3e#LJyEB07lY3yFjT}OOD5el zY%o9}23!U{sFL11>mID^Y52Z1MI*>VyyfscW=lE@qRbKngVo#CH%7oM5FTDh{enzo8S&OxHP@}uRby0d&pV@4EY0;|HUo!M>?)als zdsn6?w7mVrH(MM(hsubc;#RBYMI zSa2M3LQgG-8q{+5fEqGs31i7%t+EZig-u!__8UC+S;r21B_y_7KFx9na9OZ*M(?BZ zBR~(3-zAuI_CrQB1rOMC_!iuGsQy+__#A(yQE9lZ- zi=^ly(ZMU=!p0WKNH%rADLl!n1XJ>0G628TK@&;&uU2**V6EAK+Ne-uT4-6uxD`Q@ zxhik0{CTNEl!tBM-b5=Vllgn@%9A7-M$i=R!C{jR4!>7#B9n%9DL6#|++coml&DQR z6v-#5XpmHcna6p|aR}AHwm9IB zL$7|HlK!|li6X~aueB_08mLQhL8+6YZfC5qC1aFyA5Xc`P;Qs2!YrR|u+WiSn@EOP zFz0n35cZV5M9)|Ikvoe6n03X%$lwZqjET<3gR$OGKIl+W|3=gceU4iDLz-Kt?G)oA z+vwf~LzKz{J3+OL@82xC8kt~mjcVxRM6vxQ6_(4)$rVQL_!0d~#x2Y4uD?QG!xFa? z_87ac#20+}nMzkl;;das``R}ENy4z9;VeCR`ixT?+ALRf`Tvpjj=_~S(W7r{+qP{d z6HO+zZQDCeCbm7XZQIsNY}-Ej{hz9H@2R@q?x+3qQ@d7ouU?I(d#zt{8A<|@-Q|jh zD+Q+G;5H>we}vkbO%~F5q$&Sp>=Oc4DP}L?w-ZpE=3*oIx1;;lvn+CpTfcs@H(GN% z#e|XJ7z0(-g)vhL$9+4HCK_j(aMQJRZD4&+Xqmr_FX|pv%=$UkKNd zi^dCIqoJ9T41jKV;mcD9Ni&_-vhwU^cER-ZQ=GQYs3Pla%^Rxk{? z8|@_4G{j)~kBirdb?oM$P(oT(YM|tuP&VZHQ6VjSG?gyaRTU^Gy~PAha?Y3Q+Ct~Sd}$|xM5SiRtsoVsKDx*thdw( zSRKp6**WZRAPn%3yP@aY|bgGpACKV9)>Sf<||C)W}M4c3NY zlCo_MA}93WPrI@V_oVk?L<>^q0eqwx9s1+mN%gV~Z2zhaO*R1MN52Mm(|xV=UYGTu zAgOc5U2dbdd+l_?A8YopeRkq^I+|CGpV^|qC6D)$A5P?QL8|kY++_&zu$o?8Btr9Z zQypcNm3Es>>~cZM^MpLNRuKrVGs2gwJtZ|6p!@PEXHXKwmIFbdExY;Q{CJwkf;;mQ z-q}ujBwwDN2a$lNt&m4+yW!u+o=tV;zA1X_HnQj2+e{Rl5Q=Sg3TX5bLwI82KCpS@ za&Sg3bP~WJa-Z52G35?8M4rrpjQ)G$eV3E#>AJA49g@M%!Zanr|(zoyMcA`&jTYdklGiN2Oqw*^!pRa~P7HHYrSTtvpdyef*3 z_*`9%Vma-}pQkv|#wFsPVg(+^tz#sAl<@ovwf7DPl=Ldb!`-|bk?vOU+={OBZzRt%wFww+$AOfmW=#A+Eg_>BYjv ziKz5%f4Rt#0raSts1s~3&ZraWIG8_ZrXTQ8Wm|%Q zPt_2TFqG628LqlK*&-&~DfIprst!qsm+rco$iXC|UrxWZ+)0g=^U`1-33 zu`2xhQgUVR(cSEP*PGv{`z^~*M-v^eyk1@P`|J`P1kx@@Pn3q5yT3*>xuN-!m9lh> zJX#8BE%k5n=iP`yy6;j&ptpjJ&Z7=-sf4`A9b_eCPlETn4WnWYuvPOvfUU}Kb}^}L zqC`!pts}iP(E^ib07DDWianFpUDk*yWQOWO|4BBKeQszbYEB-=IyNPZr2!B<5-Qh@ z;`?t-V*}2lfm4mI^$a)v&7_5z;uMdORS}9TF^eE({U@)hCo}IAf@W>h076G+>3zt$ z@fuUkd>OI2ma(D)JyaH6Vi}mUscvEX)T(d=E!73-R+wbd4s|WL1xZ~5nb^{Z$_Udm zWk!)iqv;0Eq6A7*0^SS&`eb2(xN&J;#5r5e0w?ie1{yD-6joJi+=(yDt4BebVE9iI^$ieEl}J(^i8bIDHg=r&;W`%)kdtbtL+#@8vRGc zqR_8dWPtfAUi#J7BSSQR_M44nvK^2Fnjon(yy}@R7lwQ@;QC@GU~rRH401@5!u2uz zW>TKNDFhhZ@qZ0K-k3GW|MfTuSCdlv=>;Hu{_GOVioM))V<6~#@wZSPp9iJUe+QU1 ziNC142&OHi;YZ`0_i9U=AqvjrYCv_dK@;z!iQV4l{K(0dCC{5>$?Zcq@P!$K8Sohq zDc(JgOpEr~Bl}qCN4fgz76}if+((0wlh-)FZKTTO(xcrR-ht+-ik58 z=?9i}WsVI6SgkE<4A^CRp<=P@vx$LxHTDq<0KpYfwa_?SurWONM&=niARnVR7i6~+ z!Aq`q`$>h1`hgQolF?pw{Bn)H^UVu6#p@9BkGc1{=aQ$9PoGhk?1T8_wIwN4t2UI= zr#9UgDSKPT5g`EncYd-QJ#G8u_h;Mtw);V}@lQgYWzGoc-3atK0Ge)x}BoGaM%kSYbbC)?CIZq@lLWi0gopjP^be$9_yItf7k6wCRsRopbbdr7J7 zW2it6w~EM88=`lKdz!PnP+6fwQKe6i$h&MkKq92Djmm!Npf`;+v~x%4!Dk`q5;qt- zjCvY8$}$799(}?JIR_asp#N9?2obs=CP<_mxlwPmrvgk#!%2`3(pzM|czG|8VV;D} z>@kD#!+AWSy*4dYs{PuI^I>#1I%zFXUVSElvTeA+UUhzD7rS#{X`8(9VUR5?itg?4 zIXPHQPc(T=ooFDjiTLcf@?Yc_gk$JgkWE-)1odF?Ip*cRlE_lU@iY4xe81@;J=lpSZ|L>=wAI9Yc-Dxq@={4} zcKDNK&GtEZjit=DSu%PD(%6YSwQ+2K87OTn3p~mqzSC}wmx1ir%-M1CaIa6YNvV>1 z93zGzLGg$4!+pCeceS*ij?uvh_kD6*D{CC;c}u+*_(DnD;%+jp3y6g4Dg(Z=#$l=_ zxRB~E^6p&H-Re;WR32$u#f#jpGxDWr|H^3&&e8~t{oa#$OmODYD) z*%b0$Uxlj1>&%$0R`(R^R$JG^s2XlP>-!R>E3#Pja>+|sa)v>k#TPdCDEhT(D!RqK zni2vP);>$~qCU;SqSU2;?aZVwvgctpxvDhlEa)SmjKS}W%tQtEt9AR!vgu7+RaTS#|G^7;FG|$11M$Mq2>&m<@X0R;>r1xV zNdL5-TcuRZS(2qpEk#w1;xqLhk8a$Euv zpI$&Czr0k#cIxJ55kZ=7cJfJF%)i9{_{1hO0w-#bX&DQgEC4xK;2@#Qg{pu*iqTdc zy7Pai#c~sp<@F6Nw^`oa%_9hTiFdS-ZuPcGwpBN}flTW5nE31;Xtbl0*Gl)945RGy z3;LgLi*0z)jwK-~XknvfLl0$(nfJEVP}C!8Y2js)Y)eH@yVDtXGXlj0X)-YqIu{80 zh=%C^Aze0`+{1jE>oo&fmpPOnb~YglYLG<>CLYBX!2u$deJCuFbW|IysP0)G6m~+J z73fJA2C>8f(q$bZOa=2HI$0BG5>i*FBtuMHJVClxalV&-oO)zDm;W0WEcPETxU1Du zDZ53}j-$mzE2flFt<&2)x<0+A)P+VE;3nwrLI>48Qq&0kWQTQ-*1-?McZom*3m@ts zjx}M3UFn3<#F1=i0zJ3OwzgKfP%Mm>%#yH|9EqskCaO~CS zvZkOkAQ`E`#pOvDR`g?n!6WQH%xnd`&aW*#PcnRB>VlguZ6Gh0DLxK@qjnO|@r%#{ z5Nic}g3{VDy|?$++(mJyg1f_A{gHRSo*5q6AO6vTX4!ht+HNRM7rMyUpFl{^op?yd z#3R4kkvtOnH-D{O=-ocjX9T`dXCot}x9A6<{Cc%6^_^PN<2I(lr^j%4Zxy3E4L10< z-lNs0$8v6qCL?Fd^B4gA94ra270gAv4QOQ`$o_~BHzX87@BO7kGZ+YuKl{ePkUSBx z%Iw;vnhI+mTk3DAI4}T3&2Vuu1pCkU5IH5TA^uEUOS+q8m+dwwI8qo%+j0x55HqPfD9lURQe8EqO}dkt8(Lg({0e}LrheEZhrx3= z?p?P~8QW+v<9opqTsB*DeI3^cYkd7b&O2{6c%l|>HyuIMJ~f`_x%BdzMs~HLQI5c5 zN7Ge1o&5i>puG-qf9rjJhpaM^bBjw9HPSKp-EfZq5pfL3yWQ#wL9C33gX{+r6G&+% z%_9G&9YK@RrqS6602rmVwl{nTGEvD|R|xo7nGh-g`%+N_}MH8 zJ0aLWy_1p|3`!I#3`*>A(&kkf6m3v%C9>7`1OL($E526>TNwt-!)idk|Gwf0+HFaL zC7$Rot`}f1IiNejKdQGPq5ed)0J|Rb{Mp9-OVZH8NST{|v8dD{^NyQ$le}J=xlfkB zkLy5L%mxJmAf?M@pFap5nS-qqN@z3<1$pp;q4NUfiUmw$hGxtSeZvOZaiLJf=(j?Z zWkOv3LmgV+sSzcZ27BU>Hp{pqGCitVCS!jEH!lEJ?H5PW{Zk!UyX8RJ-7VsR5feuy z{3BsW06=jETye*m*%Eiei>|%@BU}&)g*iq^OS4VKRU zTFYb?V{;x1QBm{bM)j&m{>og2zB!G8BN3KT*I!EFt`a3rw+_T?aj1(hGXE$-jG%r> z#}W`<+dJ57($-St$&iN0lQ`O7>t|cJ!)rrezfi=t;RdHgQHq|LRixPUx?!O-?Cr%C znI!csJwhuOi5jz)#Jcbt1jh`o)zquJhGMywUwLTP%G@*H_3R|1L zu)`Cbpkj^Z9%pYuEnzSynWRg5-$sKFE7)M3wZru?@6u$8qs9)MMO4qm#j68rXH9$KX%LfBTUKG^sj;PPxNH^%N^NUzZ_3JIY3u5Dr;7IOI*azc>GXs-lFl>NjC>rNKlM}TQ((XULdku|%q^D|^<;S8HKA*~I&ECE z3iE~eP%V1hy79Ao7Uv+-BMkt;%&0KsjU!*tt53_-rI|-VK8TUewqF1Cl-?WyJ#wFG z1|Hv@D3wloUJA<|-sfxuw(Nsn3OgN53#tN2g(+uX$`IHv=c>bhiJDQlOMeTp!7%qe zyujA(Bh_L8e$gL{Q)Pv|16jEI=sx@NPPEL?nvmj2drKS!xoM~T-L1r;Z`j0$$7h|c zckAsd9=laxj8I%z&lE#|Z|Le43cUaAXd}DMxds8)|BqjFgN)D_$sd@H49XWgPMIzW z4vKbQIJuBb)hG8wEUlzVsf2a-tp6vlsB<~BIez#bH(sp>03h-Ivtc{ z1)z({YXO(jG9etO@%j83OfLTC9+NuA)hb{HrM8007O{ zgGmpSp;&gAxwQ$-lSmYp=rGS0I(v&1Asmyz`!VqwG>F5KAz(B@H=)0G6dXJ-;(Fv5 zb?@=Dok@fjq>&=b{#Pc85_n%y)3Nj$q0H>X-70wngyxOrUgMP)Pq}a?Nt{HJqG2Qs zka&p65=F;^Vtz6Ee0+TR=852n1xWnZu=8gkaibaFh!Y+@7cf9}xpeAx77*-U$O|Ij3|IBxH8G*ry=MjO$AU*sR;Audb)ex*-|S}{IzD=Rewf1bP7|k0SpwqAL`Gu zYVtU$BU=~$(G`8djaBLE3s4_5FC-<>XZ}THe2+>?{&C=nP&r#RN;Hv`>REPkb-)+s zHbqJ^FB1{N=T-82^;`T!`69`>;>wQq3tTP8{h%^9M4vFr)f$9DyTr6!zb6mQ9>2hE$6yQ^+j7_!Gdh4e`nsFs~p!~RGP4Dba>b~yX3ac3h8pWAw zl!-|GfcBRsl01Mc2+6{ZwSN*V;+BUtaD|l?q}cyY>uAm&5Ezi>M|tH$9o(m)>4O}t z7j>=lyY7~dVM6H@hl;HPrTM!7G@6QdSUPpw3MW0RKu1%lx>IA@O+c20ME#DTe{0e( z1W(uwjnF1J0h5H_d-grwHR|ddH@5as5xcj7Md*)TsN;&iRwSgii#FIya zsSBwTEcgYdO!+y1{@9hHr))VG5-De;+cz?q8SJDRMB_2Z&M~`|byd;SENNHCM@CTu z@qv(|zSL026pt-?GzUl+5|b>jmFKWnnDLjtqaiH`!0Ma{^gHTIdnhu_mXq;EuF@7V zkhkxj#ghz@399h>c~?0m4!8ihIVQviBP7DI|5C zFa%qXgR1Q}5Z5p(yJ`O;%U!KaS&rVR&}?~~Ie=W?vgZNBp;sY$@&-rZq6*4Vc(d0KmP&Vc8#$R2kMk1SL^=24uN#V zxU8M*4#UYSasU|^U zAC-;hf5%4-HlA5)7ZSy=s~=k6P&Xs~#*|NJsZclK%IyA59o-%0!ED@m_@kP#xK^UI zDr$LqN55r7H97%yzA-Todh+CwoPrT+3HmOu@|)K{dl@h0a=KSuir&VnW*GhhrdA=i zNKqu1PZhvPzvgWE(IH-{#FjiksG)r9noUQUnFOciB3d8DcGc#4+X7@{mWEqpoL8B^ zmYHP5vi-m$K1qmY@%B5%^abpx!;AX&ENFX>nRtL^K)UL__|_uB(2k{P$gVw?jLF6L zL`-C&rr2QUdDE6xU~GMM$x$tTq|+^S%cHNP^a5xJ^c5bIHDDvvl801=er2w!9{qs@ zT9&qASK*6O*Me2F-!YscWLM_`XK_`6VDvY)v#WY+_`3W8jpl11XLw4s2Bnli=OclD zi-%sEW`8|Q<9kxoKPP~7+#s3US944iOU)tw3ZvfA7-rv>*WLW!e8znqcoYuW`$QI? z6~LaBPyB2~pZmW;i=nQ1`MVfrzZRnz$ zO@}1-Nblw?QFmbeBUryE>Uj3r3Uh%&E ztGqr&9L_LQa$Qe<+erdSBco7zz4*tQ$5qsYJ(HKhvvj%6%SO2h5oZx&0;R^`D?m*} z1{j)LkYm>>pcb;3I<(AnQN=!=C7A-g)+oKqxv_rgT?%OmBi3;pT7$f%q(#hmttt>m zh1iS995dN8D6rkVcRHH1WB3p1tTI`%|Ma2fBe*XcL+lx18b2l_#kXmzw@jx$jZ?OH+qWaf6=tXx=xSL$kJ!wZ0h`1c_U>&~Ti702gL#IYTEn%^=@gz5I>dabm zH^YKi;rPS`La`Xmz3Zf@h3=ROXsyBf^xpn6Eh< zNS#2^9mgzJeY#M$QO8XX#n-)Z0~1nk`s@qZWc#!#>sTGjC&^BYQb4NvPI^3nt-<=R z;F~M$Bp1_qkII0Jr|VM7o3#P-)Lg5yD*_`QW#>Y~WY68^522fPZ3+)pM8;J@wacN@ zd;cDA)Y-H9L&)BJvJ^Af!sOA5iAoS*@4RZiQCeSt_Viym;*A3H0R{5yR6Gs)Bn_n< zzC?IWvuaj4RTrlf7=Y~7g5}QA5!vKY$sR-GDLpGy3i zd2~m`&#PN9&2~l(7QekycxrW>b&St)mad(HLn^w)yraCk>8;C(a54q8dGFP5lRiJ= z5p^wI3KG65TdNQ%{aKb{j^j>1ombfAV9u5$OVGlWQeRrE-2mmSe=bqpRptDA_-5|; zhFy*gwt*51Az?N+mNdTh%@ zgM{J2V!hd#1^KX{piyK875co}XBPf?P7sfRZPZZG+1FFjOU(lY@EwI~@@Pp$t(*(Og0n?+X(#4U-GoY1EYW4ZnIU z)$!ja1!kK01?LHX=l=qP>FU%Tv>^WHy8k88RComz=|@usyO2f}1qs)55UHzJxMxm-*W=2N$%(fBt&HRucFkF5pPHV)xAn0CT<0%Ggof7miZO zg`Tw@s%RqQ3l~@J8U>G}>Qc>8m4)(?56~bO4XMX!aM+!mgs|*#Ljvnp$h2v%iZ+w-Q63z@0rLnbMj<=RXSfD<6v*&*|rjf!)me#A|tY7$Dh(?%CfAzU7hOyR|CCcJs};%VUi zyzM7eot$51S;lHhUU6IT&Bsj6<9qj3x`w~~bt36>47Vh}illGj##Lq?@w5%=U*XT$ zkDF7ityRK8e#~t4@R|jc%a3xB#BL#$Xv&1*LU$6g=D8 zFjfvQiUF%x!LrW2D07w2qi7v_4qW4lRke994b-jNZm;fRHzM2halT8@OVe;!A8nt< zp5g~5q}q2^fV@yL$T(PR8ua7B5uhj z7kZ9Oix{=jbuLBXN)e6*C!@o&&fkg{g6r2j%$6ZdzySGSUO$Opr(D``QKdPRhczoq z>S|V(^UHi|#XJ@?r9>a74St0dp@y0V^U&3l4YJDW<1Lcr0pHaJNa|D*re}3Xftrs< ziVvlB_X#Di&$%?Y*-J)qb=CG}TOaCHQQmh?oiqtCwTiHC%D+yN3B<>V35tOEtsO=) zQDOmcfX#1@eru$cC#-G|lFofSD7nJIuR>y}9*GATO?ceXtNG^))ClR67Rf%=+AdCv zIj4yauSz*e(4=aGHenjL7@E^`RDG9w>kXFVWSxY-FS z3U#u^+{??qY$PNTDO-a$pelOY z1A?SN>@#6gVdtPQQv+R;x8q1XP#=P2d?>}UNDj_N)^$jRwKAGA2RZRjCw9vBLpCPX zSf5&I$_Rv$ArxSqEF~-l>zEz3X{tT0AWBn^k>-UOdsw0csx;Tv*4Z7z@I+`Q@DAUWnn1X+ZviQk#pUKnA6u_(@ zm)!+5UDXf-4?MNJcnzEG8U59Sm1z|obtpukscoX_G&$ltGwoM{{%o6L_z%twjfQ_) zr9sw3ZB|~`PGHM?6Mp1p)@|v&3MB=n%7CZY7KCt)Dg*)LUz85qaLJ|xITH1tP8&Mu zi%eJk+DfRigDSDQp2fk=@LDo`8vxV>jzRW6SO9AA%AFuP zh2+oZtEQk@j5vI9R=TA<4mt{#SsB~K51as0PTWU`eJry$r=OkQ_=w(F=3CTL@(X`C z@I+W*ls1fJo3n^(C(~BiQE;Sb{mA3rCUB$twzw=9k@(jO|610>2WHOKDI3le7O?|Z zij7kG3`KuyIM6u2vt^Q@3IVu!fLvCoLsjG%E}3oWqL(Tt1WSyu)e^6_h2j`HP!rhG zi^fI470^9LD@@K!@#>XgN>>N9SuUNO@W%$d($SDw8U7xZ2*fe8=YSV|JVyi8=feQ< zm6XIfmxp|bAdbXPUfb%YD9W;xYJ*l6eZc3%Ll-&$Yb%Db-yb<&IDkt7aZZQK?4Z8S z#=8L#owQ>jyF^Xjw8qpF-!N-F>X*NW_>k_5BgFRrTHkkG`QK;xX}*0{MYPPi<)_|+ zOt%%2K1vMI9q+8ADi~4)Et|t9%+N-s8y;;Gb1X_ z&i&+qaxk!XH1wO*>enM*vp0JeLa;&5^<#~ee(&z$SF0N^!RNW7M^wPR7*c>+$>qFK z?pD)?xGt8v=Ry)r{#4)wS#yr2iE4QLS_e23i#Q8H?r+k!mI4a7$p-?QcoaAk?ONRB z=oKUN{g-xP``XKQA|qHIN?HIqR0nZ&k6K)K3dP{C+nF)`-;^onwEh}PRr?z=*~j{I zkTcBFcNwj2mUey)UP+b$wM)!Rhp(OY9D}qu-4M#&wKWG64y(zxJiyEC=!ZCdcCak;j?n`3MEK8-W1iKu65ThXTU{$#58_^MUwuZ;oqOXx zF2Y&Pt;(9)x3_G~_jco~^2=Qz>EpqF*I~$Uw;(+1=fqk5JSDyTL$yO zD4A*$Q4}aIbphz6%uzT{SZl*X9m~p0?g6IX#A|!vWRKSMIYhI3^`m$)7(cMi^@bPv zwC-j-`g*gWcC%ZHW;aV09jIxmek+tlt$nZ)_vR#HuHZMhK51JX_q{ekQiD*?*{jN? zzHveVw%-?p6?$_A-dE_2ikoI~K~X|M6=p(+9Fc^3zn#5ZKuLi^$r7G1=% z6rox{H>akYvjs7rRhh!}+^yX1jiA!-lqq73IO)+KhvGh#DG(-=;wjonB$+>KJjhJD zic^x0;;6v_SC}&^)zVJSMqpd)(Zz|mb#&GN9nzC_8%Zi)aumIdB*|=jX}=EA2GCp2 z@8680sC$&YnrWCJ!8DEC`arA)t%Hv_W_F|H0q>3tVug!LR%y3k*^Wh&ag*9&mQf=e z_u&eq+}B&Z@4Lj`#)vmYJfH9Hfi;^)M#cO4e42{BP(p8k_I~#8&)7l~t@9$Ab{^S) zk^M`+4DpwL8=6P~NHZ*aJG4(o?c^xv1@{YET_XzHGwl%h4!9$#w6Nl=-5?`VU(i7# z?QvatTl{VuLlL4U<~EJcz;b5D6szJbuP$ zLE;M{LZ&ZpoPmto@z(2v_+1x$-QofOeG!Wxqk5B(6SiS5n>XwUi|W-Sn>^BEB!Kt! zfv~ba{QN6-_J@1Sy*tyO54~+yx^VX@^UCrud4HaxOU?++af@>Z>OBFu&_oAyZ1&Dp z|06_i)fT?f>LF_lJ1gVHW|+kpv)7i;;3=BDPl_YT@dX;Wdm5LyNs=K5LDL=JUtQ5> z{4OvsxYKka+OGyx%EPMrhedni)|InI_E=}U74jYF7L8}`Q9a4M1J;d`AUn~;`YoXV z4){TxR@<*o0b$ZY76oqfs#)}_pFQEfC@6OQL_ivLu#RYgFlL=>*HFw2jwUB6t42$Y z{}?utZ3KcKk2ICvBgVqf34j>`T<|5PmD*^4UgV(rf0LB*6SNWb|5SZTh@kTDfV+fC;qnP&RdPr$YTUTH$7xW zrK!?U!o3nvIwnuNDms6NqJoD5U}ZdROq~A$|HBP4?tvCUmEh9zbXW5S;F5vsXAk5$ zSHTg>PbVC?aDv8K{8AZmMOYlXnj}%#HN0)$jdSeE()8m^9X+t zYNkXyS32D`v2$Q|ZxJj)t^IQPn&izx*r0FPN-bmVH@q55;vhnJ8HhC}YZ4xMOT_Q9 z4$!mj?&4$ZEfB4plobynYo7$NGFWHT;BqzZ10v$qfEPBAfh5t`ImJ7w7DxGUggx z@<34Qm>TJSL?$CuQ8qroGOFBwD(60ajIXUFC(L#a3HH z&)yb#X_qK<6KucCS$3?joKsGULcG#wleMLAg?i~d$fCIxD~hm5y6>x>OyiKW3~Fzd z%Q`W6cAHz5uKuWbf&IoL^E)g(8RwRT&|>*Zwq1AFn_ORmX@W75CtM2wDTjKaw6nkV zNf4_pR)D_ZrTj)J3q-F@QrN?@nk)^o4>f`2XOlcg5`~$^@TuWar+?n?1a|HR3ZE>| z_CQ>M-qOnFFq|g+m$V7>nDO}>kOxLW^0>yH(BGXUw+4;8;Ggn|UCJo&+eqCwpFEI#m+i6Re-wn3QRgr zzj(6@*Ty)Ys&;oH#Lnn-p}F>;cEWVBJte~qp{FmlNt8U=|Gv>45gwyMdg5Sc zdJv1~vUl(|?N7CkJKb>V4G2by@0Y$C)}+QCF&nD^=SJPrUGN6v$2jC7Xw4KpiE+ys zYLZ4h|AcAR>G&O+`%Rncd^fXKH7lbkB&<)cjrFkAZOc=J$*51;Y)QUBmGpUYS||E2 zO0pdG>|jLbjdHL;ijZ8`vy!4!5w;v|ydBm!XvYwX(v|d?br(Yb>Z8EjIEG%(M2%eH=oe7e}~b?G^CRqR}Mr5Ie_g@2?}0 z760YilymAGdAMWEbJeSX5p;%}d*ER}0gi$0rvH3fX`Um;iTa z3+!8s;BD1%IOKLW%Y<;me~GZ^qDng37tU}wQ#j4#n@2Pp{su7&Y%1f4OawCQIU7TiWQQKXFs@`y_)=kMTlXa5i z@-OrKnB+?6a3W29XNbVhedfP!Vv;5gAH+i*+|Bgf7nA+GY1Y$4fMMn=GY{rHh>ok6 z`pporF+tkGlp8SU$Vka$A3hz~M+PPYQ23<-Pasccu^w5OAL)dhGL^J}toB7r)lTzT zxy+@N8iir?YktHus={J1RmaI-?@5QqCUJBIQ}a+hkCx*K{{0&F(uVtw=Vj%}a9jAf z%^?)D*q?^X+`Y-mqCv7%0?>~aXtEXX(XU7(lke}**~n~&*o2fPgI$XsNJTf=0NOV^ zVR~npP&c?`bYXhyEX|(_Ra1Pne1mk1_>?|FZ1RVXl#mCY( z#Xc+MY0$H%OfUOjLDVIi0^auE6yXoDRz$S}lymk)>(N4&Jlc?rk?Qzv!QApVh~EFY zvZ?%^Nz<^wxo7}g-?yJ}!k--eLX4Crz97WOvs1asw*czmU9QVJ!6F;Gw$1KOq!&NI z8&u-}_|^Uf6{#UJFkC2AA0Z2p`kxUwCkH>KvZ}&V*rEusNVL2{a|!_} zxL9urzj#E};3X;eJ>QZ01+$4Lbd2te1cPdR#b%l&UpAB8 zzdFLN|M*}EeU*CbTzks3ZxKQnL^7-PcS% z4ykcnbtbgd2)G~AZ0nfhL^7Ru*$%!eUU98s4kL556exJXBp7USTy;a3!8|TV*Sg{& zb`Vd)>PeC_ZeS{X!akZ7aliQ&@ps@yvM;9BFir#%`3f!2y9qDQXP}B=E@#IBiZ4Sw z>}sf=$h#9f$h#9e{T*W5=sL=dZ=ZiZoy&8uw+#VsXYqrZ@9zC$KLWkhXsOI8n#b3t zNJ9CR)~^005PO)mCU|(9o&dhVU7q(i#|*0w$re7o(I4O&dYo5{fpqeFYNug{ zIJZ$I2z86Vw|&He-wWGGCcTr!S61~6eU!$RWx|7BkPOqYfwB7YENUXEo!zD~1!>92 zsxfS&$?})NBx)oG&^A7A7Yga5G8Q>o2kNB4C2#aQBCA59D=a1=%Z>pk)7&7@m*U_^D zc?#Lk1sz8&#$<6vf-R=3{_r3v%V^g9422Xhk^h4o3TefTQxgH7+pgQ(kqF#08p`KE z+7Mz8qFu%TAm{QzNz;zTgAXWY0}J3e5*;HC%q$XJxe8Lig%fYsDZXqlvAJ$2*uqpm zwqcBeu&Z9SYDbja{Etcn+t7I($ZjNUfW_2EHW1_KS@>Nx2A1m;q&e*rV3C`>0MzZ$*p=_N}w;XRM&J5=OI#}e_rtr+IUNs^uIL1yc=%6MWya*eu&Z5SX^D;F=k45LU9z$+y?y!Mh(w3(8?QwdTc9P8Sb7?@1frEx0; zBrFEq^&AvKz_|J?J}O64*c{O8b!{4zCn!OQi{#EZu>RtvbScM^GKc+$3L-Zgk+%K> zodkidRCOjd3_FD$c97VKreM{HfixQ5#^?o>SaRI#fARE=;gL1p7wE*cZF^#CVofly zZCgF@#I|kQw(X>2+rD{!_x|s<>U#QAo!Yf)6;AE7z8l2?UPz2)(vL7w_JXkbv0vVZ zD-*NHp4`b~pk^!qz_7+2X3nes{UIEu zeoh^kGrpL*3~b7nDQ1@o)js%DWJVpi`LC*&f$&CL zBCVMS0SX&Y0(j?wNSlWDMkv2bIVmo9G^oLjrv9fgm*x{$`-0m z_-k+TM$u@tPKdoxQ_I?EDOObpxPfJGCa0NaqHrCQh*{|NZ12x-lz7B(rCQ-W& zT>ZN~rYb!B`ZZJSYgtzWt9FN8)|I;X?+H9lpl}+fK{=*`F9A7SSI_d@-7?3eDvqq~ zl<7+VjA3CmP#G9$G0Fh5j<{W}pYB8Dl#vt-`S8+W!K3gps-{+uQ+4N4f`>5yV1dQo zmRA?oC>_bTNNsMJ8cN##A!{>iWKJzNh?qG&zeIXl}Di2Oi1r9nC zMd7t@{lTQB=i^3UReRi(d6_0CVJpCH5lIBFEW@6Ea1+$_d1lLvXvpw1csSrd!o)U%~n22ov?-O7ACVeYCRGcSDV@cX#cm)4ra(?)TGiINu)N zcBi+z{V}}Ax!w4po0NK4Hu26k?WVzn_B1E&B%j^xB#CHeWGrExezpC1vM%`XGQH^? zorj0>2L}#E)Z&jbpAXfi>HRO6c^QFWt=j05G<)8=!WT}~PUxiK?K@Y!m(H6g*6i%+ z(D|#2=JnDGSDRGdcrU5-+xE8+I9)7&U02PYVA4sf!`9gsADfX&yr;X!{*9ZZT4K>Q zc1r(H)bk2-HM_j88kqGK8?<<8k0&GMFwhD@1Du!X5OJiBDaRYI-US~Q$Vi1?! z?ZT3vAU@9M(l8-Zwjh&bLWYv7(xn#PS!ScM@*n@q6U=#upIJXiEY_27D$f6=nAi^C z6iF>c7q5u5WD9QFJ{rE>Fm68a+(o7PgmpGeo7kao3>&5dIs)h#N0D9=@+S!Z5f zjnl;g}5YM7SoxI60dJVSL$e0 zQE4+S3pND7;zcG1@V*-5FUQFrvlydZrml~(B*Uq2$AP+Ztj(5N=T_eVI^FJRy-4;M zwZfICrCo9vZ*3MFma`*2S5zCxbGGM=)oUGEzOql@ngpLD`Aix^M6 zxI4Pr=U>a~>*oDCZak;Zvs_%aV?;(;i_Y$lj-XymhJRW}cVs=PtXZx8rfTx!F=9Mm zh_eA@ueap2`Z!#-`}`0DEDs!zL^dO>7KGei$3DF^PsVPkXJwG>1qj|uz!6XBc21`9 zP4C_ed9Lq-hlM$7^>7t7kWLgz{?b0!#AF$eCsZmbPQR%|932VGZN(7WO1L+08W^9@ z^Ka8RuLY{5@eLBbD)9N^o5bI33Cxuwb}B6L^7(WADRaY+IXjL9*hI7DUc+o^@viVV zjraDu`)SJU5mdW6)ASs2ZMWwylb{o=>oj2=kc(Pwbb8~tY&@9d3yM&Mn3Y|ghz!OR zZB;W|mXv$%Ek<=c9^E7eJaySQ%rBVuFcBKK6<^?T3u+v&kudsc73nQgu)&xn&j@IF zIQGrWPuWlN_4R)M_7N&}K0vCG3Fr8)mYS~6CT~5>nQn+rj8b0)!`-*8+`BWomxr>4 z+Fy9)-El8aw};o8#mlKE+gu({Rk9%iLu!0zc(q8Y_@FjS#z$OJwbm}%!5gvAaCo=- zC;Y5dHx?N|q@7SXs1#)M@!O{@QHxr-XoAl&qBD5v;``$PA?z!-=~uO-O$S70Uav;H zr?`#+x&6b=S*<1{bJ>cit6fu0E%`^(R1N3eS5aB}%w0BatC|x^2e$t+$9a2w?0USM zb`{nB)Uw@wTh^w}QA!;(Lbv_KZ5^ZZ?=9=gJBmoB(%?xEIbNo3JR?-J5ohKau&>=C z!y2Cna6@R~d$YRhA%Hr*5qS-r-4Si~KuIOu?6ODwlvyrcUHWr;%SmI{d8b*^Wa>)8 zgu|`61p7_xSl?TW_wfK@bT6$0M^ABd&}sPzZATsEN}GeJnmWDPZRfM{K#yAxIh^&u z5uw^y9j`ra!JUj_5F{CQYs}#E(a7}MBQ0d;<;G}|cSuS2_&zlAOiZe~D zB3xA~Hp4MY*^4af-kYzTmw_EBza%u}PptgG(4E>ozkkflGBIv)?KFlXlN==t&nduq z2j4rcOs@1%5NgJz>W{+xP-C1m%{F2pMO;*MTFPkBA>-1)PfrfT)Gp*!mpx4n?&PKn zNZi=A&ELH%kifDvMDE&{xsIG+GMq>*6 zV~HP8(I-y&U>Gcp2gWQTP(4WW~^}hF&}ymoU5C&H0SOHP@qa0 z9;N6OcxlOZy24K~!)IcUuEAa&R%H4{qORcO*f(5ViAxR{>;L)IcZSQsO(5S>yOp)_ ztQfzZJG{Hw;3Kv@w~sJ=+9nnC-iIw{Hwaox2(2o&2;;Cg0@!L;X~(*e#ylkfL-S<=Azd(B*1ysFn}AeFfZvPcxN@o8+__3~BDvqqKAwYCmVDv@s8_9$F+SirWFz@Gk5DssD#mP0dhseVl}S*3i~ z#3U0-8t3enUE;-?$0VKfffwq19r|qo+o7=5>G5Dp(v|qb7$1-uu#eJkq((YUu8?Ws zZI1C=I_F!xv4~R}9&ti<%f~$-!Q)nh=m)nKFWud)C-XJ`vv>HB;B{SGC#%?8Hjau! zfWoiH`=~yH?vasz4xqV4z5XKw>LO~gd4!}Z8P{LNL9%L0*>kGe`sapRFtH5XlFK-Q z+q_aZ{bYkl^1856YHa@Uem) z0W@0@tGFuIEyMhs1d*to+uyLu#jD8q!f|S=)hoVbL$@-rY52LMt)OkP{{5q^Ze6wJ z;s0E9MRi7}wvhaG0QqWvH7=Wj;$;)u7eImL-uzv$@@XU=`pKO!xu;jRrbu4cL)6O% z+Uck4$%uRyjlDZ983~9){mp{mR!U3-O+Q5FR$8<==SX~erkBV`HY0(?-9IYu->iTC zMtU+$L-HxT%f!dB7jmh*_6F4fwq^D`Tz9^rRg7h*bp=4ML1>6{GWc!Mwx;bcq& z#x#|EV!dN`xYaN^?n{4Tn8N^YJ8lkpABK0m8@;v9-T%HVdYS*?!K>>2yc%j?9@D76 zT+RY;@!FiN17u7rJ~3qyyE7@L>tpLNW(NW&j+ndmtGT8^)dDD0K_8*-Dd?>RVvr3pzJADe<<B@2++au zt&?u%_v4!y^}fUh2Tx=DD;j-UjDx0;tv))SGp3Nn6{|e#fwFxywy(Py`+Ztkyuw9% zeD8LAr{51Xzt8*yrRU3kIwXL3fNL;PfJdsJaiT5XAchL9h%o16e3e)PFH2mNEsX{0mBb?k%p|#4So0_O#A@kwAa-eCHk|Qx$0x zMzKK5S7c}5bK)8ag!ynpYc6_`wkG+Izd;;5T0Q>~&ESW;k49_$i971{{RH@$&m;)j zP&+Wv^8-!C#*!;}i+WI}Bp#uWmT)6R3^;UlRA{&*c7e z0O0OHZ~Ftf=-HS5{XR*li*KYE309ILSVXqQU&|Ccf|`c_WgbOtkpAs;fNtj*R0BaOnfBH3miZ&w<806upTUVRmU~P^w#Tr4Dr|6xTMy zK!)5+jARcTd79*&)-r-fu^z>?n9P%hwD?Z8)`W_;r%Co|XC8%vU=~S_h5qQ{L|9In zO96$4Z|BM~_1_5eQ;B+|~WmE0=+?cmx%o*YtfOY1dpna|PY0w$s1YVe(&o&-x0m z#q)P_+6Y8FkAj4JGu|V_UTt$aMs^w#h8y;yH=!GppcBpv9OFcb!hY%Hoj5zWlhwZ< z-iZ~wn+*RGW5c>4G_K1@z(k=Gi~{u_PN5psuG`-`4jp3!UOwb~TyS`0m~?*RZnnvz zF;F=}L2ldBpDnSXU7R*F7Aop-rN`vU0~VL-;g#oG-v7-}9#1}t2nrF|l9K663UL0-421b;h)YLC`8Dis-nL3340U(h9M zj4f%~J?V0x+odnl^$Lfjw}DZqVr|SzEE>$NPtR-nIZAT>$YHZPw+sFBek3!%q{;F!q=Lq%#wPO^miQas^v4ZrA zXiH#f;0d1#m-MZ75YXWUePW`sLkrO9C{&I0E_+Y#V(mr+aHkl+3$^OG8vkqzcfB_~ zWHFOCP8vf#EHE8h0fQ^e>xZzOXLMknRxD9+8ffO|lf5a%2&`+l>k-~AHC{`^7hd|= z(12;9`82Hc{445Fyf3_8FjwDb4HY}Nne2nEMUlNb7q1yrkyvG=36ik!n!MduRh4hB zN$EG@awabh06XFB-f4r>h(5d!a@r7TG&w<=E|P@^VZem~WV*1y<&RVyi1a2bEwm2~ zCv5l*2~}`Bf1?U$NZ$nH+3$wt%9{(R$07)9x-kg(BVlS_ykbGePe%QDr)ha}JNYVn zsx&L(6}OiUeyLQU&>Ram5?V`J+)G{;9$6GG_!FEhfa{6|@mAcELVQhOWhv+9E+WxA ztVWC}urSDfU}x9$hyfwNqdK+P%~<}Py`G`l&rlGseRLSSs-u*m{Nc{Kc*n5~_j6nm z*Bquw)9UiPs>`$KR0*|g&31JGvF$?OVd{2?1AdCJo*iycToMVX-Jr~F6F$!{tR(9Z zSYajyaEjzGL(_>|t}kg1`FVmmQZ>u9(%9xU6~{dy9J7~iZ7T6nl1P>YduI9a{15c+ zNt;9HWY_K1xgHWNP(T=Id6%3B0wvoTHkK!z^{9Hi;6v$vp&C43GV3~#wsU)Vx>oP7 z6E}895i5_}(+BEKB%m3*exuj^ZfLb?D7GmLAZb*P&JpGM)FM8N_WP=Q!JtBO%euH~ z|B!onblf2~R!Qai`^;dy@k3vpuA;Q(>4HPdF!~vrPMW3dJu~P{0b@zM9J`HbVxdjU z#SOk3p{o&L^VxBDF3C&rAD=WDw=m=K*1bJ2Ie@)Iz3;h)eHzy-W%K>%qo!}YmNai8 zV9?SmW{rd@Yxv2UDzu6n#lu~HA@7bj)nhuLg*c;xcXP6z(OlfsGv@Z93CJkfG~O%` zpK^un7|C`L$kVZm7^banubvRi(-y!}$2ryI2UTOZguQ{R^_Qg)K`p2m9xICuZ;#_2h$W7^ z;WufDE8cSf^WJ8rgG|9&_)=ufNyQ@v{=vU6`CQ5sduCp2`ueWB(j%A4MX-ga0KoQ* zm5_XkY1E08^OYk=63bT%LT1Zfix_NY)72u%HqVhdPM>zTg`n@gsLJD3W#VxANEwx8orrgavNWNQuyy7k!py$Bh&FC!x z=h<*uQq}&OLhxOblhplI0F(k&$&CB`G2NjptRd|x-A%CL?M+a|%45;25!cf{`Y%$z zbQ`WX2x50Cd^g!Ue%1ULnzt7A(RF2?onRFf4AH|J^g=0io|pTOh2z|wA*R!g$3Gnp z9`Bdp<%ZH>2PhOH%drSg00wH#v;-BxY%pGNZ&GUffJSe^;I-M`erM!3EiQ9(MK&Fq z&>xPTC1evpR>@$&bSdKMvG!zK*#BZl^-Ec4<$6*`8|KtWczcY5O8T zG|dKPM6!oGrT}0UMcZByDyqmvVhM zR^!xow{lYcmxK*z$%*O4KqU|MiUBGK6&c4m>vjHR#3#GktzIcVi$2!GNkR#8u2_-l zQ)oTMk-X<~6WzHT=T$yRlbzr!W3ffFXkeP%)-0C#!y8dAf2VF6*iDtHNLG!n}TXMsuP9#YwpGeV*Ts zaY2$+bt_v`+(u%WuBbUdD3x$=u5}f$-{@tOGz@XCtb82s;UMPRR1$mi3zNwSjACry z$*Lwteu9VsHA!>(pH%f%3lsE(Pw)iSlCdpOX4)Z5^|YKEz`f_Mrd1cbW!f;304IC0 z!gf^Y%S^{zUdO12mE_4To<-mllXSZBWV&6;BOzKwf(VJMlTz5WNxcMHdcRME|8AIM zN&RncQJ2c#={9?B#+KT*$OdMmai7VHRfwW@{`4;x#;9(l z?#ovGyZ72gKp}sTTmI!w;S_K+3q8px>tu`dWroNZ1xclP`lt6e?m0N~9a2fA!)Q2z3!dx?uT82c83yZPN5 zJ{9>6tbe7IUfLe`!jZfOSK6#-qyviPvFHp$Z9va7019GCqXjXdZia^d5_2sH4AsNr zpcMqG>&#g4mnip9uxL0Xg5_27-g;>TU^{LWDQJ0g^bWl()3()5gtq0f7%k&}^J7`T0_+y|VC}^<2cr}j{1=J_`Pv{% z|F0uSz`YUa-%u{a7T3sZ_Q?4pdt!ScmLcJ5kdO*imLqZ+rdVbg(G5zGZ0*-|J-1*a z{7d{qSM0R-7kcSv5HEPl@4rW@B!k@UPN3F&Bb((xtL{3zbn6u^ zVCzHkA|gj#d3Ba2iE)C1@hAS0Wu` ze@E)~WVo*Tp0WOX%?al=j`4(@*&=dgSQv{&rK{I z^^>PkLVgjA8($nD+Nuvgk@4Y)LT;pj%D8rkUvH>6^dlN~K^5^`dPH$TrRc#pp|VeW zc3wVH4y&LR_zC$w=9~jDB{C$bNycbQn+a@`il|u)#+d27@mE$kqiHLJ0-+__)*}Kw& z1fj*4@C42F?PmV)qFS)y>n>#5J|jA0vU`h!z_ob$f^E;dT}djxaAsr8UgDx6yPM)- zs%_AYh6NBlo~d~}O}~j^d&BGcbagS@Z6n|vk>?;r-3LXoN{HO(}s-e7FyL`_3#XjK% zGjJyP%Ob>VUXeW`S^Hd1vx|u$gv%0@qkrZ&lhPt9!_*_Fh1`ct;5)9($~{H0X%`zULA~k7~ko%y`!G!>6R&< z>4uQE0zfVfK?5=+SFreR+7n{=OH$oTu@N~l=@VoX!rwWZ!{4Qz0zbmeT}$e(Kot@HE+(s^5Y|AFDF_hX*dLX(TlACX*lf?|bWtca-ejT5_l-#W->3#AwY z9!VW`!bEn~flU^VzAuoP>)7CH&gEAri~um0|06wS(KJW>OyRsZRGjU!@%QC-63+$Y z9^o((;UG3K;;b`Ie-ZnW;@is^X2Ld}#v1m^6XvGg$^N*!2w^bLf_Z^qTjiT^m}{!u z7Ce5#-H-AB!IILV&a=j;-f(-@4JNozP@;h!g&m&e=Yu8|1YjT2 zsylEkwnj=a_upPe@3;b9O`L;0F12?A^Xm;EcPi8c6I-|fyBPg|`QGGeC`dfYmVPyx$ z9vPZ~HJ*+cI=Y#ZckF@1$NSv|dH_LKX^Osub-)W7EE)r4+w5$i8LZ6tS$U=UdFOn(9*LBDM?L^wLkx>D)v-Uhs-rU0_YY;|G;>(_eL>H z&nXtz{nWo??=tp1IRo?NG#OdR2UC{}WY1ZTQS9Y9X_PnsItnY}V_4g>n|%BY0HKt# zvFXjoIp%XoC&f2C~ECr%9OY(PPALDo`!#g#@g1f35|=^03G*r8Up$cJGu zI9TaTwEL-!Hd~RQ06;Tzoaeqj8ric_2no2J`F%k#J2Sk%`Kvz$wp#^uW130iu8_ph z!sM$v9tui=q6KU-ogXo*92|M>(X^W6-xOjCWN#lzTEyYWcJ9DAjr?R+e>uS%O8ThM zYsspzZ^$tRJH^5}bTh{I7auyQZxHsBG zAt4arcE?sz$Kaw_{bq^(l(AeV9$RK1I=NuOLj#rGp3=*nTEjX7PO?f#AP0YJizmYv z90?|SIF$(spDpgd$%>7lQvSC})X``U&&JOXxR?dbK^APyUZXWh@q1az_}?OWV#Qh6 zVMf~`yQnHi?f{{n$;$PA=#}?!>4??u_+A|j|9i7UH#vU`g@;Qk1%HUchag2BoaA`@ zk?ON}pzl~rZE_s&ZYZ#|`1Vp3JYJz>%|bVT`hHf#e{ww`?jE3?6aA!BaJCQv zCsEl#DdxWmhp-A8m{pOyM%sXR=e1XWcg(j*N?#io4;D7v%>VC@R&+;)Ph4VCvkD{0 z3?;ByD{krWu9{D0Sb#j)MPwnhL7}L>&IlhG;UtS00rq^QMxtD z;*?(iHN1R!#u8=;3~8${A`~PsRZigCUg1QgXb^zwPNfa7dHJvn&Rz&*WGolw zUmf6#Xlut-#|t;}_UCvuid-zfx!r4lW?M3)hB>TPTlc*quH7K7pQN!16&*4O7vIB@ z#a&Yy+y0IxzXBd=F5J9*)f3g^DMcy0UzrF$f6$Sb!KiD)%cC)cDJ}z>#CIXo zw>D$l6Vk6y@Pp5d-ZoQE&k5FuLF0JB{y|*6CZ2A;eBG@STF=i(f zil=G#d#id@G+-&1=U3+{4=eOXr`ODy zw&Gv^bu6j;_GitLbPja8|NQ3vJi1c(ob+9u%rFxQc*4dD|=KMl_?3;KAt`(O{XOcoqI(ZAr^JHaa-jC3j z6~7UD6`uqNIO26c_q#AkUNKc4YqZ2lhszI_&)5S$VMhknp4jrW8pvL{V1I`C&_hVO!XFv2HUJf9PQf< zK_}4?Pdpc~RL-aILiZL~K6V5Rj@K0un8C$iQv~ihtX>%gTYF*d9*;3liV1jAB3aCC zzL<-3aoJMn$zy-K0ES~8{@3ju^*TJEQ&f5S+(r;=H2fKa&HQJ!s>zd5btSC>>hvsf zYnt${B6ws*b^pS7Nchbq9AuCC>Sj+tkV+OC8;3D~e|e@VB5jK0Lhvv%6fV+%i1Yay zGB~puMM3iaf6t)|r!oW6;3!>eH^t9qW%Z8Jfr)@@qY$*q(SN^`>TelGcW0El!o~gR z#AQjEUxbs=DZ`7S7ws|XhDfVS2V~MU4{gWRSKXi{&QC+-?~tq5yR_F%5%Kg^mNwox zPB1uHL47rpJa%1zL&d3e%QP2r9CFbT!{zT4Lyqkk&B5xp2ab5igAHZ6SwS6)p^apQ zb*R6!W3q)kG|Rf~!4Ifa&%8MAH%m_lb2_-$H(6sii;KKeZkHDB6(qMZ(k=~#w3MAb zg$uC0vws~QE;uV(Y-FU>hlJ{-rQK0+>t>|cdOaU5WH1bOv$6a5e10b@n>xAJbt-KL z*!4!LMPj!-e-5#v`_{_^^Q-+~Jq_=^2B^b!U8jp@fP^GO$i!e`k!5{;uE)n|_9V!R zH6$TMvjARzqNH~mUXy_Dl*nbLeGU(Wx4>e@y+)m6YnL^6%0hn$2 zPwhLflS0jTZn{N;KMOL=Hed`KW=B+>8Ms*hGm^3Vg7dzaWQ?VfHdpr!OPlGxp|pJq z*f*Jqt=4Lj-aFM5Czsze&eWN}oDC?`0gvV{`D_MwH25DvTD^&(4k=v|<0M}xKU(g~ z$!~NDd}f~Ki8Uzq_m2*olNR|rfATr2kHL{sq6U+S0XP)Yu{+)cq!>Y^yYH@}7Dj%R zR~Hf`NcmTSa!|?4JwNHe!->}<3r{hiHJ1r&>`Z z>hXQGcybs{U1VwW4ZRk;zH=z1uh*5adL+c=qWTs}*-1gxrUg$l#7)?B{TerT`nWvO zao_SBq(53(?F1kz{bcBH;MqrhyS_>$a=Xd`-+LnhY!cMwsr-2>rnoCr+JgY2YfyU2 zcE$WHQq>rPE=ans|06E@O=69neq*F2E60{= z;$!U@aB+HbRlb%f{r5CXQAUlgAy_Et7Kc!?KVc)xj|Hy5>LhGhGYuH$Fs_`wgbQ|h zP*+H|*6bW)B;z${W?#~NFuAB0)8HJ?o>XN2e-+$INWA&*;+o9?0hs*NkR;3=OA?>x z$n6*k`lH|_ZB9xS7`NUp2FZUVIM4z83hi!R@2BJ6@%A8RFZLTBXMRp5ggZNmWM4Ch z0V0r6la&ZGt_)&ri)IU!VIJ=y?_OU!c31_8Nfstt(Q{c?zt<)B<^BGEJe2+QW*6(R z92;*)wW28SC%28@Il6B#JG>iX zUKn)z-1YX_Ufumt#4P}m>*DX+i~8)-H!V}+V4mLdOf2?>z;UqnVmF#^BG1_iNduTv z%bI)%FoJuLZcXVd>P^@Wefb4oln8m0xefBZrCCN9Q!CAQu8_YSz7iNk&*m<=dM!;v zQjqy*An{D6Y@h0$ogQ4mUTKf?>$50obsF889Z=>-m-#bnSWLgm#&M^ChM|m}k$^Wy zf7ou6dRL?|;$@>OoG-=VCP_D`a>}iC^hXX}swpoY881zVX1K*sWKj{IZmZ8(QG$X{4m^(>;vps)+eIRhc{F0@>n1$offTW*`%mzy~dKj((B%5RDEtN5R zNHqq}VGL4m0^jsn887dmL( zupzp`@$-7M&&g-{+S>=Ro)Bp6Av)7$3+CiA#xNhr$|?vDg+2#VBSlSv=Nwhst@X@M zM}Kb0@L#ezl*mMx@su5==(3{f?VWQ#XbtURAGFNdWNH6Ov`L7pqIvtuQN^Z9i0;m} zWWQz^cW(k0HTm7iwuHW26`EeL!mKW1>1k^6$bUk|k$`T20Eq`X2yuA^M1}RB6cMU- z!sD*$HHb zT~)HD5Bq-6&fdu@dvv-g&5{QD<~-yVRzSIOu*S~CScDXyFJBTj_D}FRbu-t~@hE&M z!6;w*h{d4OAkKnAl0qdDuMpmSzO{^kI>R^GwU`oGuiQJ&v0QVlu6#9s{lIVi(fQL) z0Xo0b!FR3~q=EM6K^FLXDSJ5 z0&(CQl)~q%Na2cbDrhRJtgL*^+nv|eLDBqW<^+&T?p$*kaDy>Rnd766Y5~%r3tj6_ z<0u3C@ghj@yhT=iqC6(j;0v9vKs5AC3Ogg?<}u~eB&`^5F&(I?v-mM&hEXSy9Fs@u zqgD7T7mEiew6{P;nm99$VbP82m;KLv8<1-3^8DH=|DXN5mn%{d{%z4rF%GUf>-1?r zP8LMA!7cyMR&qAzZs$!?j2P+E29S^I0BRgHsEmy%F{mPgW$(dPrT=1fZ|nwJW;fX! zzQd>qHpakPHNkZ^Xnza<(FsRBAz~~(td~3;zIHwHk%yl&4Y99k`$z3T_efbRbxtDE z{z1Ud!)`+7v{d0IwYyAcukve!fd&<`#vXGs?64~jSzdbu*^cP@B6*Rp1IpzOjJV*z zT(bxQ)Zl?!<|cfD3Mg*!6ZX(7Iisxz;u(g2^L~O1{%G2fc8B~uZrk!}IZ)V`zHkZq zx1MFi|IK;xD|iXny~Y9ID$6~T>kArM>E_|9MP~}7s-02X1V@Ky_L}k zxODA|zG_q246id`x@L77Mc60snTAF|%NWOFsdVB*q)Jw5|I{AZGwwLpOE>9xgj>l? z0(g~hxAiq)2agJ@A+^X3=!egwq!RxtNr1sDcPVA3yr2URZkQmeQd`@120P=385W7- z8=A0}QB6hhY6K>u#L+@l7y{{5i0mytW?I9pH09Wlm7wx1dvmtyb};duoK9kbn_@&< zC@qJoyN+K~MysJwupa3F*HO8Ylp(hC7~}5AUJC5I614!83F`_jjTyJD+?f3T3Yd4q zw2Z_7bV-l3Q*(ryl>e_WDT8C3|5pTqrETf~{gaap962-P&}b4y|DLwv1NGLJe678s zwsS@eERU29jj$ndw=U?a;&Pa*gUtqu)@rBiS}=tJW5mK9OruZ3VeWacE1mOiQ$!_0 zI$Q%6?L1Ksh-B^G&*%o#+DI}PfMvYYTf_K(tN^Zg2bQA-vKmlRh|`oY8)kXAUh~X| z1Uk_y=|Q*@2rJ;i$?SDaQqh=mD6oM+%ZETS2+oAFu-w=-i0P^RO9&EarCGf^eNEMW#shChNS(S9ukJTQdmvUGz*<2xh{IK6 z!XCr=-058N_gMIV0O|~%f(r=u1>mFuyCTZek%j+2jT|sV z_Wb9}|LDC5#?H5M$}YqOAg1=tfpirN0<@R0H-?g^HhzIm#t*UAaq`N?qGopPS#?9( zupgo;_u5Du&{Hzv+N(fY4)sR3_;Bm@`r5QVWzvddO(^&KvVFb(Y`0LbvQENX_uB6c zb%9Xc3ZHS?YWup>;98-K(jj)q#`xCGDd}rUjD!N?!K7uLuxITDV5n32OlGd1&$9Wpl&@;tATw#ys}e?6o(6w|DQ(7MN(P+Za2r} zWZT8v#`WNuIm-aF?>s=D z-ttu|uQG)z;Be46EAJE*@V=R2R58V{Ck(m%l$RF%Pgw`Q(;!&pvM-VyCdj^d7<3Un zCwLA4=}PSnq%uAjLYC->Dw(I_juZ9fzLoh=In36Jr9axXq~-Yxt=>_2s6a6xpn7c{ zH~l|hoo7o+oeWGm;}GAwF3+Kfomz_6wtvvRS`i=4!@tg59=JeF4130Rf`X0G7sNJ~ zF#qSMV*`lQ9p8?M`0c1@-;NqOV5KC$*)7@nt@89MOqtTv{Vb$Fyss>`6UsNOPVKg? z>_eR30TOb~sr%)Jjz$U{;CaGfnLT!3tN8eulke$eijBr3)eUuNitS{PRqlX^dov)O z@~RT$#FuomAmZr@nQxP1ATniV-;^W>0+$NY94I!izNt{qIB4F_!{44w4csdE8;|R< zq79NhLrWz5pPbHozcje5Df!}qeo`c%DruRsmcN{xc9BCO2Y7=TQg4p5nJ$Eh3~v4vQNx)qu5Ptj)KH=K;;=3 z1{*IjSQ;9kv+f322R($k$ul7+dq*7sQjev=e}VC0o6Ias3V$S>gg_8ejwn=y=AU9* zp)HjAjJinQ{Qw=^2J3GG7)-1~JCJgW{Wi+b`8-j%ASo5Uy`MMC{4HC5A`ki*`D(tU zC|F43KU+t+EyqOoZe>kq_bDey?APMyf=m1p)eG_$t=StOWJFF0UOcHs3@l z^6j_~e^BPWqVgbzq+kf&)Y1iQFTI{}J~)C@)b$&&3v4gCC1T%BGG7l>$3xbCM9TF7 zF}~>tpkq-y1nF_UFosxBkLpMMcpx2NbwQomtJa*`UADov>tOYSGH~rhw7SVeG?_8N z>`^GstpILySA4W`u#O?e?V2s!ivyhkhI}gjAdxZ|mI_QycxCC>bdpz~PxvXm3IzDN zuJ)dW)b|}=t~7|aWj=r$oy-Md`3odJs4Xcl!r(GWv#+fym_7$-uO4T+G;MNj9i_ND zsr75$QKEFpx9FncGgd5~)Y)Nd(St2_$~aGgB?AtF=#qCFDO)62e^H=Er2|jEZ;D*3 z;3FHQn~QVWZ()m7J>98U@W~>ee%LgN>&PyRv1~C*Vj`!F-gjG;x@`-5Jg)B~XFttX zfA1p|xgNiGK00iFj%o;3;%PrLqaUY4h6|pSb*7*TY!--S^*KWrTFJB6 zhuiGuDusc+=*1c~*T1jc{NYyNirAvvCI`eEVF%~vV1|=B(`rF@uy7-;6;)!9YIlI1 zh2!oMyp+QY&m>yKBx90dI`~#m(UZc1RrR~u5`l?;v{Dck3%Y<9YDVZ-i*%B?&1 zO7_0gBzERSVEAeYyeb+xdPoAjZ2DtaYi9v(s&+=sS_Z%m zOX8`vbQosY>NC*M)$}UMJeaZlM>8qVXs zqQ5lB5l4$A4bs$kP)LZdjSA5*s;<+q@IORV!03o%G;2i#OOpqp!-H7aH{LO^W}l^w zU2PQ1uziI!xAD-}sF#JQBM@exr;H&WaSh(V>J3A@`HP{kwDbA;_Mie>Z!*Z1 zt>Xs|kJufPHgzHvYuf{o#VLDd3OqKg@j1%hIkzKn-}9q`oh~5r9SJns{E(?}ns8U> zZS($peZqBnPa*xk2S-@y9G;*6d{Ei%lOlI!p}*kVDy6@&@q4Dez&v&t!{SO#30LOx z857ClqV2X9?DL=Rz<^9-f3b}kQJYVeo42>9XXmyjsXlL~-QORF*k@ILR@$l}8^B|G z&Fe$|Fu`YXlrI2goUUKptqX2{zBNTGC!xuea=b$JV8`kw#*U-eYx(*Dz78(t37|Va zZo4@{;DQS06kf9gFevIEgmL7BF8^Nl#Tb>))WTMWuRj(vC!Up~LFQnPW-~L8qlVhk zMjDi#e7#=Cp^Zf_`z4)({~VwecHl06K}nOcvEBCddAmP2OYZ*I)BAU2cX_c5a5!Zl zAWYNbBlZ=zPRWEkSy1K{V&~6HdpY{r==%6Tht&@RLvsYltFMCO#={&WdW5zCSheq(hZ=D=|gza5njSvJ)tK)9$0kH#se z@zmwYVUyg;NeELYW4U60a$_%XZQ-UXbk8No_@b4Tm}xRTOYW{cY{f@shDx6wO6TGR zcHSD>AYlYljzLqOHSbjo&O1d?gpV<-pdiq)Y(E)7hvPd8l@PCjTvrZ{`WA?blYfH) zeS3Of9MwiTiFCj%sA{V2k0`8uIC!fKbTA49q6hK_3xS;DFlPqV>$0scQzsCjFhl-p zJYH6UJxoBYOqz+Mt?Q3>mdONze`=ihv3Q&IvyKdqN}8bwx?sp@TKS zua#QzAT^XvVoO0}f)$Nq#%&7omo{`vXN&3OexwN?87u7nA?hul;%b6*Q3iJj?gWCn z4ess)f;$9vcLodY?(P!Y-Q6L$I|K{vZ~k-ceRr*y*|Mry%DSg_@2{Ne$)z!F*hTk! zOv08jG)=0ogTgMzXCwQKuSqdx{lko&8!~82Ik>J$>;{bS*<;7`Z0dT{jR`@%!bN}V z%=t)m(;WX!rg(;+2lj*&N%paPKXT0=ryb5<(aK*i>W42uz#Ay`pf~Ux!?<>yK{$llibEH-d|Key8SHw@yd~G;*u!3Tb}>W)!m^S zA)P-ZqT4-?LGSEg-v|N*L_2fT)FD#po{!x8Mx>^|eoF(1_~v2nN?LO(y=L3&8OuuJ zN#HHam-Y363gg)!!at44$yOC*V~JuF9nR~YwLEojY17&1UCAH|2%y#-RS7Z=q$Ts! z)pQx?W0g{REno<{l6*1LF)AA4%#Uu+S9zq){{-?XhzU#6g%@Ysx{sItOpp#LT7PUx zB$|>)HuwqB8KcC&Gm1=IZ63EXj}m36<$+h)-rP7Sv~r7%mvsXeo&R&ylkGMx=8PQQ zJgGjIlKr6bw$gDU5i5xc&i95rDo*I_w=-!LmJQF(Q*leOa1Pqwg`PH^#WMscNf4_v zy51};JBnV9c$#0nDn7lHxr{8Hv=8$UQ~G~_*3tsexykxx53#cnd~SHN>o^i}%Bdhl zWhSr0W=bXZt6=>=oZi=2KFBcBXS2_dA8XnF)p)z{6G?uE#L2X?Wi|1l!8-IceO@qG z=mdDHJMNBF|EmCU-&W#r|H5n=H@OTlfVHJD3T2{@K9bVBJ3Ny;)AL)=Hxqj5rb1AF zM`0Mqgvdm{T*+jM>Hb{1v?VvvlVIYxpvW+b{!lpUobDk6)73tr8FEVox_kN6IN7PT zM)?r!CL`$pPfQL#y2l~F%qK7F*#Bz~;xc>uyJd_>Yp?>kATK~Aj%?YYOJ|3PGOC?- zMegR$P)l%|)g&H&FUt>1E6j@GKow==-?DY!45|!Mcp);Pfq2r1Bx7o;oRv`po5}Gi zlokip6g8$nuBWwQ2xzyhN5}*0eeMGd-}P!>2GGS=EPtPP@v5m1Aa?8c_O#qmStdBw zDx0occK9tnvXp5if*M!ubqGaz zoeP$Jmf0Z&J&-XFkmpq;XfQuDBWTR{iB`3OZh_B&(wb0M1C-O)9pWoR_AZn&JSKw8 zEQMekgkh!kaghNq+EQ(p)_Yf@Q;R;Rp6-H6yECOBXEFvn-QUcb9NqOD3+gWI@`~as zYrba~SCq-Ow1-ze!&nbLGTX#L6$B%S-Iv=YJI-##IqJ1?6(7`&SLN*HPjRPVE3zTu z53en(H|r8a5dlYeqvZ;=!&(Y4 ze6BJhDIJykN0*-08l0;qal_JM?wtb~Y^C_VDF8W#=KrLPyQ)~(+izxsRgqr-h+J_(~vB-qt#x3g$`Hqz051=1%zpGT_`KN>j z&@sCqz_`=4copf5&%Kf)0T@K+rPxY4=fzm1z4nRc3+5FvT z40#rFY3h&(kPmc4Ug9y1a=p9E+N_7KW8K0b)@vL)= zu|X`!-F~%GQx&Gr{SWEngfhJyic><$5+L*xMO4cQzuuA*3m1w+-4ut`$i&s^$`|HF z*Y6pBvVj3h1m7RC-IiS&OwroT-@g1Pe(V~qAom@B=L!KS!?@&Sn@K@3mFQM44XRi@ zI|y1$eBUL`Br=KWVv#PV(pDB@c2^LRqd)3)`b%?%%xU|UH(nYLz`u}D#e9tYrzW4c zYVIH^NshCJ$EB9v(t~|$X-;qRx7UW4PjIN|bo=$;vg?8fq4MEx@pyd+?>4HX%ty!C zn%9_We>y}^m3W=!0{7|gUUN0Y<(gp9a=B%$JFEmgjRpDCJQ3HM@g6Frap@hb3GLX; zVJ0Y1pvzy0wG2?1vOK?@c=YZf*ZPV35Z5DvOjB+ozx|C;RF1AI&hO=Ae;K@6lC~>P zkv7aDk0U4|H;iKZrYHZ$9;eZsJN&Wep6l&1T<;C2f46Qi`O-rn#5sH>LaMbV%4C8c zt+Qm@^^<7u_Lc1l5pCH40xQV;t#sc&chsP5eqtL}_z{<8O~l0}c&!f#r53Uu@zH~Y zAKfkvhMHF6^GjCzT-*=?rMzZHuSYL>@y%u;qv6CJzh8wk{OhXMpai50^p8A*I1FhZ z%%B+xw0FN9-o^1J6h0-M@&8PFQ;E%h&!F|+8_hSqJ;oriJMbD!-nAHjOWGg;8Wx=0 zX5hE_xGLhecTgUMzW7=5-X+h-NVtg(4(0a)2fM6HoS9xwkJv{n2O{}Zm7sf1mY+a? z0~LQZ!R|w>&zqNuBDZ}}gL%y_D$#%Dq2JI&=(@|3ShQ&!j<;XHFx;O4(N}ym!5}Dy zgXu68#GtJNeD594x7YQVQZ!sFhmU7aX#jPE>S50_Z!RNz19V@)7YjFGkGW>4s}UuMTkk$-O?Xqx<~bpkN~W(0hKr1Ss5{9gXM5jvg$2@T@N z<||vVlUD+S94|4b5N}tF;8|8P_4bNw{f<~URAf9M{Kd9`J2We@flbl$s`XIc=**%- z3y3JAUOXgeu%^;xlJM%#U&dXASx{AX4N=ouDW*o82Zu^tcS+Q*(!<&JvX-H9(cUx5 z?UXf#%L*u}LM4nfEuhQHj%f%ePE9~|sYez-D$r|uL`wvlCoA?BsxyZ2w%d=zNA0Fp z(K&T148%K&s1M_?@x>uo486UssNg91B-6jl(aL3m-=d#W$XnPA2r&e%3=x|eL&;kj zp1zq83UdI+;uQ!F7#}RVG+AYfk(N6Q4C1_n z$w3Z(9`#nAOIh>IoYPqgE||m3Oy6ot^s$o>WGo2qC1soQkONbubZ)2n>EDUuqamVV zA-3__vSkOuGi6%s7I#$|nuaBbIIo&p{3NE-Gc6}z5tA|(BV>?>=vYIrLnR5%zbqNf zNT0m=`}4;Tv#bOZ5}Vn#JlXu^66h(uAp=FH<~(A}sD4i5pQStB+(UFrPP3Br25>G4 zV}(|PIqngxzXspAWb;@M)&ldY%x4feMoaH!D2=A2crwRaO)2fq{saEKX|*x@1Ze$k zvug&Rvj48UpW?ohh18}!=l53Y{g}h}(n2-%m7jS;9r3mGm>cz3SHTcqA-v&g|8E!TN78H(F`Ni-oqb1~Ok_ zI@P8gPL#iPi9R$dEZ6YI=SMm6q`5q7<-FjPuu|Oa^%J%6m!>r1 z3H16S3|B`tv+aYCmUG`>R~`tp(?J^Xwey7B%|WDw!M%nhE3w|AUim2190;~uPTm!@ zoU-|?;cNTZwIeL~@7)xsI@|lN@Uj6M?Mjte%>e-{&7qf?+1|$4Q!|& zEf=~jH;-7m1g7h74H~zjAdRRcBvae5BQ?1|hA$e~6spxXB0l~M%H32`DZsT$P#ms_ z8u#$|qqksGXxigS^18Vqec682`WslT1@Y4-Cy<66gefKT)PAtet?|{qp|Ygukg9Ie zAuNqIOa=i%Y)FR*0tji;@g0=Sp)#!5SGA`X1Yu8ibvX~cE(>VvH?L+{ix)(dxKcj< zp6{++tG%z0`OB{Bh2>N{`nRody{N1?YS)8V{;j&d>sqHd|EfO*NtVhLmLa=E@PZ}&92g#6u$Iqbu=a%R;+9LJ!FQU0g#p9928 z#=y=%o33TMiyXcz&rYYHQU@)eU&WWD3|7t!Uf@-Cf;~y&ia*O0^=g;F4<(#ft*H+D z#(o5qFbySj^yxMmSWydq&$YXD&;KCoTPQClX@~feKR5}qy&8!Tq8F{2*IOO3+ahb) z|FR8=efG4Tn_E7MxVr^OC|-`zVKY@OauhqRtM1}78e#=`=9e0OZ?HG-^a0MVcJKVk zZwTYW4XkRwwa3n^SE=hU&sv^ow_N{Wlc`JlfDtY5fMIa*yH3!sXBJN)I%Qoq1Q-E3 z{3YT@`5@-1C39*sWh8mJnth=902uMEUbsDB-=tXgI+~K|XDbSVCjSOgkNDlr9Dy{F zvWF}vE#8%|f(|=tm?3|}kGS2Ml7Y6{TzHL{2)$N6MuFE&l~94*jMDAAap}U8Dt7#Y zJkG&Tj9A@}BVkl#?6MH}L}2=LJ)&?r3XPrG7Nj&sOG>v--cT2=DNA+s1yi11D3j}0 zx`xuY9{=TWC=mkGl1`Y>zs*BUv{kcX(LWH_>xw^tHFxUXe}bfBHqYoiR~#k9leqf@ zqg}0?njN`G;K7c^HuFOqD? zbP{A*2y~q(I$3AxChj;!y*g7ogFjGq-?rjd2%1u^I^#X;=tS>@6V3_OWrz^A%1O`q4F?8hAY-vs@mS~Ks;|bav%5vhLxyY#GowG zRn0e9q;;-crC?Ayn@xWG62)e^fbRuzn(zUdkniWhqtII%s00SWl{bxWwuF732*DaAb8v%{|BD7qO=gOV!S|IL-EGK1=!3NB^J~QaPH^Cy zfTyW6#_VVy{;`;i(YnW%2wtJy@(o;J^qo4>f$kOi9Dlf|T`}yA6FKXh^qbECj5f)H zF>*P^a&w6C?{w-csiP|t3G$9d*N=RFPfy0Q$389J9KjqvUdJQ(P90|QC(!Qgf(*}5 zVElAWklC8|?!YR-Oz@5hK$+I8QDq|=)SdnDdAHAj@Y<1=w!h)&jw32-CSJQ`h~zlj zll$rF<%|)P`*}ZM84^DK<6?%+Of73s2IZC>txG5;wZ<7}0&q>mbOGvv>?0o9BZku( zuV(@dIkn+iyJq7*Powfv^PCV~W2B(BZo+zLT>(&s_lQ>bT%KK6m&6MS@9_LAebENj zG!7+tDG?zCL2mq3J26ry@+)&Cg}o7khZtJp&TzlasS-KApqzFBLmH*nLvUDF9UfUt zS{nnx3Roy$H9X9r5VEvE%(D(mgNSRat$p6Gn5}TYpK@zv(1J8g#tuPl$aXu^us{}8 zcUxY>BJf2_AGGeW0+sbQf_cxE5`&sb12`MQCe1uHBKxWX$g~w}%WV1P zLE58WceU0j$L}xKFKPGHfZQfSZ8&nzih!ihv1rO9*r#Vl@4B|hmaBX8E`B%ryS+1M z;_=cm-+ru#q*t1JY2ZlGE4KDT@GZPj;z)JluBXki1t{e9x~&>&w;YsAFkQ6^u%U}Q z0vh`EdeQ5d=W_jo-)M6Xxtxe2s+n5}9`Su{%y2BWC3q#Z&m2|zr>Ir+BPeLKOs**B zur&leUlW2+C%;xZ2i@{_Z`R}%tsZY0GY>Uhh{(xF6-}ga>hMheRfkj0Y^i`J7%wh~ zIMXjk9;DPjc|BRWyFus_e(PTEF=1PeLgV)J_YAt;l0-;Qh2_vJg8aQ;W>M|MB4 zj-T|?;Y_#%10ClT{kIDUgXqXLbBbBnC~L`Bcn03}!+91LuCqnMJNP>=82jynLCak#WMev5dlOcnR;{b&a z!`kMWT^FSO=3oO^bMAS$>w51pELqOlB^M(pW##_M|L>O8&=k+euTUorR1AjRdr#lG z-^L=yks{>*z%P65fNi?9gyLc%iSpW#9ldwSK)N5ZLHwNJA#fz<0?8A=y*vpH>!9U9u9zUQz0HBrH4gzvu z)}+Z2nx>@yJGGC@IP4a5nBVME0sg=Z7=t6rSo@Yef8ad;lzUfV#vvOt2B#y9Vw3(N*f_+wsF~?D1*pLMEs%?}P2# zBhOvyAVcD=w_S{ZcX3x^jJ$?3=h@s~oSc~$DI5|`^8klo?X2tPT>C6W(qKi$^fAmI zhJ@Y@hSc6u5FxTGYxy8zg^7%pr@mn?Try*~SA&NM`O73;^c;Slio*Ht!jr-vKzSv?5YU3M+GV2`< zjKHIDGdqy1GsPqe_F}+?BV6X-wcA>2NVM?q6l6@~LcHtV@UlaI^A_F1iYw!>h1w8mKz!?OJIL=cK|Qr1wGrP(HA3wVZe`HFA8#5F zu+OPCfCO}e=Z-$8zbITzJ_o<2N%;r+kFK0%6YZ(tQ!szJ@(|DWyk>i>qiQDMI>m)V zm`9Af-ate-4X4;%yKt*@cO%Q;j98L!H?)0AL^~N3!luDupz@Cs^+J@XSau6SeTJ3@ zIF|DR2pR{*2BYnuXgL)l@bI2E@=u)Fm=pHWoD$1$fI zz(9{)=kuA%rV{kgpMDM)u%!QFp=WQe=rAv_okX?jIGd1W!;69&LuR`V>hCeIeq-hl zC{8kQK)XF&V5a7jF!lue-brg)n#X)uxo#5O1 z!s$$DPxi@2+67i}1g)Tj?Ih^H6?F{rmtP(T^m%?7DkV@J+VipRA}JxK_HIzCTAL{= zlv@B5H12JS=L4{zBHV|UfCs zo9}kv?xr=_IQPn2x+*nvdui!gL?Q4hmrV2e`eO|Oc!5I%zLoi5+6uSscRHp{>>3ok z{JuV02O^A$@yDuP>pcl?oo_zl9(`@;6Z>>)pFb-5c7Bd}q3`G~jC zg;N<5)EP?1|G*NY)8TC@FW%vl(?ht@!dc6gZ76Mth*$E${eUqLDrn4|Xh-IKe}wpp zDP5HB?t7p^r=_WT*0=Nl71>Hw%h9ik1cV^uL*GHeEh*$nNV6r@+S}pRFwR4^-s;UR zHmU+W9s@oRKMr?3ZWH^U&o9*X^=pMsH=>yFP;J@D z`1Zc^^AFpTl^&EMrntUMP~90G_nm#v$cL$ewR=rexP`{_t^4gu^O0*J(m{}k1jY|* z9m!KBrB!Aq^$-JCqH2pLW%QowV}m}M$16yRr=zeMB@lIN$@58aq!}Zuq7bP@y;fV>%_zI>&OqoRL_Q(5$c2fLeGRfd@lmbz-#NPeifSB|t{sYZtNR1x(9T#ItCWe0;Hl z6kx9d6Nt~K$)gJ(L6Z6XWSsXmXB@_a7LNW5kAcBZCLGl+0*t^q8k9|t!KxHSNkhe; zkoP2m#UOFw{sqOOIqaPr1;pq<_Jp)%f)2%bM4n*68W!LXCL7KXladvEpcz$SYIz(a z4V6QD^d;~CZ%|kTd8}^sU-ZKcxa66zQE~*$2l!9z0>A{xu0eqaa&XP<{}hptV-&_= zh@a0PcNTC6`hZ1YyAt*i$3`A26)V z{DK`UY=ZG7LEvD6@dk5I2QGwA{U5#Z_gOMUuzlh;sE^fX1`F@+154AlHbG3d7gph4f`JGKfY~XUpdL__uLh)#K4uWW4h%{yih_VI44>zX zlYkEHq93a?gu7tM;Fbz*cAweX37(z0LgZ3AUlDeg3 zmJ!CMVX34xPCo+#N7#FU85v~1q6wDen}oK{x~Mab2Vg;+Vc8M;6AY8VZ0-f zli4UsfxU|YS$aYguP9(xVy;Hn7)4$g?34Is6pTy*u1aaF9{;h;pN#$IsN>|~5aP7+ zKgY;F`nn4m>3)JRAdC#O?&!n(|9pJ_Q>=V_kXs9aw;--a$oK^>U3oNLfqo>DC-V0Z zY_Shtp~1DiCKcBeib0D@;f>YIs@fCoV1FYJ7bf&c`jbISPR1Z6<2UpbvY)LA(~?GE zQrf8ZD?~p_5e#YQQ>a#DiscC{p>a>VMXzHZKDat=5V$@D3P{n@>YrGs80gwp4dBkP zGpfpP?C=c4Nf2CT<%fXn3~~+mt87L9yaoFQrsX7bG;rRjK@2)r(tE6iTU^+}rJh^? zQXwUz9u+WaSx15Xkrl!wHy-qK%puyNiHY~;8jl0O%1G;w^y?@F*_-kpLwu>+lO7$NHqg?O*`2Jji5} z1kl3TehKZwH#7MRbyyC6F`|czd+Vf5QaPXi=-N2NlwU(3PWX+Bz$WWIO>qbAXu1>N z+eNLBB`hQvhqRoWC?IH18fj9o24NvQ6TZc^fQ+Zj+ zj8Z_frzJLi3x2+ZzMuU9V>-awMlNeEd4L-!lk_8#vSknB(*kA@?C;zZ|8&A(8O+7~ zz)AxDQqL735ZnI`!R$?67)O#TToY~sE0IM(%0`6L+bv=cbv!JH-l-Q}lSlFK! zh!ff=#sB1gf@~=P?xPphHyo%G-=tx0l3g^YTC!@6SMlNc5ao@zCg=HfW-eiR#f{C&*Eqk3s zJ>`5(P#PZDA%JRX*4&!U^SaHGM0qnfpOakAMU{H);`vnvcanQdns zI7$N7r2Qz#AYsMm3Bc6?XFX-S(E(5wOyDuPUacSr<8!v2%#4T}qQF$^AN@6m2JBm@ z7U+N=iN9d$!9b5;;RTm$0?9zF5@^2o?K#;W9=^NFLNCle--as=Jb1Kd|L3iMx<6rH zL&;`(!4~h`aZXVWh9oERV4IIn7KVman$IF9g9xOgRe>JtK}UZb@=N*>iFje3%j{c{F{dcoF4SJYI`}pQ9K6mNf=O=oCGCyuW7gutbG3 z#gzHy7x3XZyqJ1Cdu#p;K;_Moc=^b6Y^(LSP}pJCwd zEU`&E6Nn|I$e3q#8~ALlaY;5{EZnpfe0v<2`DC(!mn2WCDwPnErqwq8A^E32Gj4x$ zrwpEy10f8npDAk6T!+v3qPFQxc|uOkysJchl94agxhp3v&~|)74YdO=IGnWVvkvLC zf^PxsL{`V;%D)Ts@X@l%Wm-uHcVGWOqit!>meX#WRHo_b%pGl}&P9Jrcxt#nY77i# z)Y9{un)@+7)#8;3%maX47L-08NWq}FsJRX zPNE#eb}n{OgkO;vtHn^c#nseL5ZBK4Y1m<7oUQS$w;a?d66Zj_vowNMl77^rRHw+$ z-wG-e*vw2CVHfwQ`hVyb|#^~^)i8u zMpOLjW-t3=!0FP?_a%TqRit4HGG1}t)<@Nz6^eKrz#Bv;K5gS)8%KPOQ-MM1oy#j#|^rE|%fe(7lTtrU;Tapu_!sAxvirzQv_s8M^+SUg*Qw7)d-iwvYt?zO7Xzfek?$?2>;B?@*@)vK8 zI94ofT>2N?=9nTP+NsE0+#L>_2Er_0JhxssZ6;_`H$Q!T99QSSV@xV6KV`~6N$Ma( zMYd)xRc{Ar?fLwKzp-?mhLD|qQjm+=)?Bt+<&l7A?I}}<=<1>^%EMluGG4|?W2+Jk zU)D+^x-?3B{@wjl%%&(@L-W^4^!Zw-q0{x;zRCGW&$N&YR>;y@Lb^zx4@-Eby_vt_ zpL9@TxEXBY&D7j)p%{}pRDeh;Vb&}bfosGEV)5~%*IXAssxb()sa}H!CG76tC#`8U z>nQ@s*wR9R#s@F&Br-2Q_&Yhg-^B~-wiS{tVn5EpesW=!?22(Q?rCl|%S?rI{*MO? zD9Mi3c+qT;Il!ljffCu7zEl!kafKhQfWTOmxK*w7k-VbR6qVvqf@Q5V+8I;}n#7H~phr zCz|L`->Nq~li>P~m%d5rVt423q#=!E*Kzg?G7&eY74}|N_nF)bvSe}l7_)#7Bq(pw zI9-U(2ThK^z?~OeI{V-Jxn!v^mU>uqP{L%seei zq}FsPU_@ENb79<$o3Y(mRZh!#a8fv(*W>)n)rDkj;YO~nsflpI%eeV}^(D4SWPj0y z%x(RD^kvK2D`%y#{R(m+n?;JaqZ_nS9$5hB3DsnyMj;MZ31*#QWO z@~`vA`>$Z2(CCzh;}M}!IQJ-L{<(Gch$7ehPnESM+ga1DOdAmP&7AVx(OpVY#}c== zi}$8phpFw6I-`D8d0XP4=D0q)j3#-3$-vanu4l_Dnl`1@dxx$iVRhhr=r!ZvTD=_! zy#k{<@pO+kjJ*my=|soE$zs>i%N24jml|eOj!&&5NcC$^zVCKip@hAaLx3CiU2+O# z)1BOd*F?5g6$rFEcIG*$qvP*W#oWv~T0_pqcXm*X<_+o@{4a_$sY=zlZCHs*@D z@Idfk!YpH(^BSa1-kzY?(@-n}jt{i1WGg#TW4*o|w@HxkY`(Rt%JK5oX1Zu>4lx8X{CSb0a!7}MqRM`Iw$*>=UO+FxeYj@6vr%s^WL{$9 zf*{$$v4cHP!Bi7*n+O*NqJiDrQM0JconW)2vfDjp?z4QjNbd|KD8-r`<+|jlYw=j^ zRFyvj`J#elFc)BNIGQ@WF3y_5^dT}zBkZCo^Y3a0RCVU-!nTy?a)TzTO*M`=rYMw(({G3dzO)0hLsYBUzyaE?p{OE0cveNa zQH^;~Jt5O3-UKnbG*v5e-qNsHiUm=>Rayw(8gICAVLO|S*+6^M_hQisDzE>*x%=vh zyf}}XWLv#TQP(}a%xkp35&VufJU3@!j{L1Oqw(s7&}6&RQ|7w#r(e6e-~L*uln(>t zDe0-%BCpc(s-z*+$J*7jm5O;)Y#vn`K9i;WIWZbPx*ZXtQLNQ3zq&^D(I z?m>B?PHWHOuJ40~*iL?97j4CEtHzr{en-jh>BlS0hJ7gZIl2Y0Y!Nf7Dd;1>P$p&k z@fd$&LQJkf(Pp)uA^ba+K(0bqm&?&?0hj$-aEV4D28cSa1aoJ7A%c+8DI4;sHwQB! z*8ORE>gTCE9TMSq8m;z9VyQfG5a}FMCgTY6p{;Hj$j%`Mzw8Eyv#Xx1ggA)=+GCs- z&w*DNC2_sjCS=5^)sD7!S-NH`;#bD)@|>rI5||C!7r`{v!_(2AYO#74VEZ;z3IK;= zo0~Pz{~0CLQ5Drydd@6@!c_^{xrYu0aPi;fGUvWz{}La_)KyfK?HfGrGuX|GaUFN} zYB183m`L_;zizo);a}$+)q!&*P3_5@b_YWv*jN=xM&)jXzX~XAv)`J=+7vU|sbhW`z@vn5U5F|qGwd$)|t@cU)w7a`b#c%LF4V{1OPQRLs>rS@C*O}ytbNwjVg#GH?~ zmV!*^J^SKC1%0v~;Jd1ORP1xFmaT6+K3Tu_N9}1ADAnYAKM=PcK*b}voS`8}J?5KX z`gS>moS zEW@X@)5|VeEcnr2Y0u|{(Z|SX=x4qd)Fh*Uxre3N$$4(se ztU3CElh;TNeC2su-1&2yXHj_#5~mx-qI|h{ip)v%S_?Xj%oH*83g5Dpq%Hn$|1$hV+q$xR*QjE2iM!cPvE%KY_p=Fi zY!5g(hud4FwUK09SH*KQuM+F=?+kZrt^RcdO0Tr^9b?|d*Efz@Xnf0X*>}ASZ~B-J zGf(2poZdsK?~~P4W$&U=V?lq7PI29T?d!)_Yn)s;{JM(+0ja(8`Yqs)N&ouq>IPW? zSSsi_k{4Jb6&uPB@`KWN(u3)aN9;_dFTy>Wvv#_OiR6b>lkXBh}5ghCR`^aM#&+w?IJtz{on*KM{On{2q5^&fR7JaxytN}{Gh z?hm`wAKQw9m>UNRYe)=QUYD`{sVK#7=NxalHsCjiTzzq|YOITi1^#igBi34|w5U-Q zdr6GwX5*)!q1C%CjGn7pG|p31YKw-cKJBVUS_3_q(6q3^Iun|(tYa=$niwA2*4Aw$ z^$mM(CpMUl=mrb@>5HQZ{cy|y=N#iu+-Bmw{(t6 z(DyL@vNrd@E06FJ?_~bdPQlAbf*O8Px zD4;3BLEl7pb&c8LxTY}Z+0}!k2bG=n;f#C5WB+I*!wG-qkDa;}?%eOJ8UdD$Clvl` zckCxgx@$A=D}o^ek=OqY1+H&p=9ZOEMaNayV)TD{uO|j&+IgfZp`Ng4Tm(iwyDFiM zq6AAo&Is|;THPM(oLtu29tdysJ-ce0gAS2jef3ucnAt76ij2&psM~l5rAWuF`=r>i zJX?a9obDnXQ3&#?ez{%8Ypo|7mi{}TVDBRBrSI2@#?O}bUPoGcGC7&d7}!Bt%?|g3 zYTysjCx#=mr)e>-eE1*B=+GDz2U~_)EfIamwg?>cQw=&*Ph~HcM!@o~F$hrXmlRyO zGU#m9u-@0x{P3>7RDX)E+d{fZDgO#gjmT}9wrwn}k49f?6=yVyqAFA?DZiy2V8gd7cxxBU33bN^zVzg6j ztW0GRjud5}_52Zv=s20UzX!j>OQ}We;v@4>zD??GvVXxgd*^me`LMjI`fe%qtyEdx zp9r%`ur25Uul;gxF-b^CM&xdD@v3_wIQ!Z|DA&5+0;-F4jr)nEfdw|c-<()zu=d`5 z%BB8Uj44n~0IBD%t)_tj4|AX`B&tR@_u=*@q(gIq{{PEilv?#p0pAi(4kUmA0R;sS z|4(KkkF{czE=4F-nCoZu0Vg7z1tzT ztfz_NIEiGW`CMqo_$=ev%q||h;6YbcHmfK7dqbbVq}5^zXMZx$1Y2?dxr=_#78KkS z>*{`kCku1QU!_$sQTYT0P`q<*QlY~bna)8g`#=Q5#pRSulQO+)LZXnans5et71jAB z#(L&*hKsDY;Uc0}i~aDi>~i7Q&bh@;c@jBTtm6dJ;5fY1RY&`fLmwUk2CVB=&e+s2 zto8(}zYY3WU4DV1;Ed?LR&IvT6Mq9;Kr0nzel7EOT$!9)RqI}>pyP2K>*yip&ZF-w z8iyOJiNsfv7f*1g@LyBnUn0|VNmWm^apcx`XH$MXA)&3*CKwmH9uK-^&Sar~K$UX% z7@J5seC2~t4WKQ4Df5F>k9ZXv*$U&INN(LCQ_uT)z9G`CK;cH-3VcAirXwXxu1fiT zYWVLgRcV?LCYAIz@Xeq(-tWqQbq3IX?FWbg>^%)$Lq=}i6R^Zdka%%ydRj8?{QZP$ zj@T=v3AbvJG@oAK5j>TDq>f-nsTi#w*ZQJF^zr_^_y6qQd*^s_dbuA=XTPy}{;~_s zFIAH|^;4J#l$*LRQ~D{e`_4pj#O=N%fbf-)om|ttHrS&d^!YY&s$|~xv>^0x_d)X5NeZbY=Nbe0oKi*Ac%?F`4eZ;lZ2?iWfoJB}#dDC{2uG7`~K$$bTpwARZ%6+(Q_*@Qr<#l~xa)X?zj{dc4RL!bp!#*PG`-4GPkjM=Gs7 zulN21PM*1iE#Ok4+o9poLj35#NB@pNK`Qj#vRw=0005R#vFd@sASEH6&;6cHo=hW+ zS1(^6O==&&naHCFXM^c*cbxJW_Lg2_uEXhOlfKja(DY=>`BMLMp}900+{~WR@naTRah}e)b?)-fD0NH!_qKgY1GmNoDalu?m65iE<9m{+_A@<= z51M~bt+c!xkN1qA)+&=SMJG6RSngL|RFIJ0=RSBdt8l0CuPq=f&1?&7&vMK*&)(BJ zrQX0*DhAi@y{QAn-sh!19!Q0D@bZ=D!N0}`LwE9$-2(SoFsFS`X{;T0>ryneolv{m zw1tDhO+!_KbkaPdWLz;f@}caF8H**x`b<*I#F2cVi7h}NcvM%yu_|OtB7$B^M{(;& zEXF&dO=#x#Hiesw*ERCPMe?580|hH`jbwlPRV|Vne&?+fW*%2+M3tv+ez=nCiCXK@ zm!)8_-V4dT9h`ai#|F$$`s!a_-4bG(lLP59FgZmit62-x#gR!eQTN@Swmk%*){MpH ztBl@a)^I>gGSrNnCI6U`;}3G8(ktRMnNs>5Ld$6{_}LAwXqT)g&_^H+6`R+}f*^2$ z5q<|jXVRrm{o@vi1OmC|hGCi8MYO+piJw?E#^06BNgfh8JE%rdjN8)bY1=3lM58D+ zItG?*CE}EuG5+gFn{T43=o1w)$*DxEh#7}5W48w_FU?80HfsEkaC8+N>3Q(#THB@k zAXd9WCdFqRsVQe575bii(;l(>*Fo_eK*!QpI%3 z;3_!$IBTIh5%+;7mUFhxLb7f8v7pPNd-LcCTFhe8Xs@u;{GCmWeJw&?u3IT0OGs6H zH{L=})M(28gb-79TkaB{4@*fP?pPs$qJNOytZAA%FU1-55NZ{t@*RzuyFjI6zDXkD z3rYd^QXXtg7d7J-MXKV*)R#FV(TYC`_7D?ZagwD8)4tD9Wyp)or7g^s&eDD7c<0aEag1m#cflxx zrIZCXMI1$6Jfm522;7upa8u~wfhmA1a9e~I!~WpV$|i;F{Rk)Me8_2(=589jsuEXF zP`g34Fo9tGOw)$OM0ZYas?>H-0J%}DMa98Y5<>D5SLMnUjkPKSk4 zahInr?g*EuV`dFXUSy!BF=-Sz^ZO!o=W!~LRbR@eWtug|n0_nLT;FKC{)-6E zQx5oA4ykR93RQ9QSjNVrrz+$78&6$fJJez-xxIkU{D_XKcZjh6q@B{o|3o?cNnWm zWYlF9V-isC0;WlK$xUZ8S;h{x|zwZ#0i)LsIfRr2@A{HRDp%z zo&rlc@gc}u%MC-^H*NR!>?HTwi}2s8))!gHnvE*Q^!Ep5M8o%R(SJ4VsQB+vP`_B| z8IB_&|KfT9SqYevw}OrQ5p3iu2-#PWhW6$VMQPnh%F6%j)e;M@~ z_C=doJ41hKmo==YV9a{eBcx!^-gEw=sy$^dp-}C%ldAK4*yuvee6H=qEc^2>4k4fu zt2`K)=Zr6M%Wi&%S8}jz?K@rA7TnoS`GS!LTOa^5pLDK;i0z``ncNg5R~-#7a~N)0 z-hZ3MPTZ0{r$u#UfoqC04x~8qq_qvo%Fm0Nk8NMxL8VMiZAT(eD!Be3XNmEX^8|zP z4%@}zRn;LasM-k9U5JxA3U=~Zg|`VTQNgOronoOD9Of>2ZH6rEBlq;}^$bLJA(ufd ztr3uisqI{;J1VzQQE5UQ_lUc?=^q!4k0aMjpr7<=$4d|EZ{OtA+sutjPoRN@FNcBWH0XDc=LiMZhrjw42(q|Lmi>|Bg zd+-|LYN zCwpynCz)jKO!g$1nQA^{Qa3&7dr6wdST2Iw#%!}xgp8IJP(bjf5K zyzPVx9Jmo`6{U|co9~3$W~c#9z7{Mnxg>Z$(Exo+I49DG8rjesXa5a|!K#wf%@B`7 z>79i(7EuAW=IT?sJZ>gUf+}doHP~SIgG|}_T^#%7p-_zS+n-M6&&pSXn^_vdnjl%! z)sEEZIYWP(=c@Ct#rIXsw%h;d<*|#Jw}=Im3)Ylmzn4pq-jJF6X*D;kdc)&yZG{5B zpKpKO3PF>)e+2TG?WgTu8HaUeFzCbcOtOp1kn+iso8`9?Y8Votnn0r+%PI>+Eyubr zZTn4(XZ;&^7qTSU2>pSYo;;-#B2^5!M{{vlfKjVtD8NX$>gtB^lcNxVxl?nuW%K0ynkYL;&d$v zvY4o-nKUAqw!^`tve#*uH-YO6nXY++Tc-5R?heRz?`{H;4+!uwe^{jKw^GUg8bQNg zJudzygVHS6UJmsyiTP6gj%77wnBOr0?b}n)@}k>k{^YHBZj%dsq)?6fMS_6t6oK!f z@%MP)&~a03zYWj}kw;+zZ6W9j+pG*sICi*_QS?8_3P->X#Px=Dr34^6rW}`78H`8~ zm(oVUj$RH+RH3VO=N?J+=Nje$_*3lN_R-j51r(Yq`Q~J(ClzjIqvidUgHquElHp!V zmdMs}N5_(SMi9{7O%^cU)O9o4=I{k44h1J)ZPzPTLgWh!?b#Z{66a>Rqdm1?(}~)&LL9*2>_%C{Qy(?Q%!8vk7PT)CLeYf*&z^w*c>4Sao<2*^ zLttmurbNFZU3)5S^u3Y{M+MRn87v4p28WH zCKy)H&-+)R*wNS+APGFkUg@&*ZQ=pRP`6p~^VUWR=|lR%sr#bMMr8yBn6JK&F#crz z#RA~yok3WEGI};B+Pw0F^!%FpPQ=a@0(<0m?PG*Cx54AO6mI-LNgftbsE=IjqP7*Y z=lIFVPP6Ls1MGG6}pc+M^i{r9~GC3{Fuw=-B zIH)Z4s!6eJLN+nC=0E+Wz)e#vyW@#bM-`MFGa1O@06GF$4m#nnCX&s#ggqa^QU54$>nLA za!~tbVf}L*G?$?Jm}0U2yxv-+_`@h+Xm?VM&Y0+a3d%CAoc-A6eSH3ZpP0NL=sOZn zB_^j*o=6nOL?!HS<0FQvZTxn6f<@XaFc1S+@&Y>iP^|$(`88%Jwd~+J$?k6;=g#l{ zzf?*Ae$Cz6)i-inUlL!6XDz!<&AT*rz1(y@mD4J#JJgl4sj@tJM;C53p@WIC5R$LJ z@r%0^yr#&yppnx_QEp~@BI!w9a1dV}3-1L8nI76S|8yF;Pre@*-5dbB@1PehOnjHQh6CZg zsJElnz%igR>rbNof=1=IGCE`}=zFMX$AbO?L6Heq!J{?lb9dXD;Fyj@z}YQO(*ndL?9h(AcernvS5b3RmSt#8VpQ^!w?t>Oweemvmd=&?GF z$JU=Y1i7@8>GxMJ8Ju@&69caCs*d)+6tu+m zl-9Aj|7!H)Y2(i}t~srZxgHwJCi$&&)+Be*P}ZEuj7^m9lAg~cV1aweBi&pxMuMuo zk9uXb+8sE{bs#jw>gt%Wu#{_J#fB^W_3??4BJ<3wLlZkuvSvi*Q#w}#;g^+;NHW0% z%XSHc&^`!Rn(uxu7Zl|NIKx91)Du9r6}F+*U|63DAfmOpv&Yh!5K&1${rHGzC~LR0 zz1!cXL|2%RmYXI;42+`Qat^SCs1xCyokU_hu+%`wYa#1vd$Q&wc7&nU@qO;d?81s+ zlGVTVNL|)OqF&BfM_jB}C1|=$=TOzC8#;(%^H)*6xC|3HVcU;@xTbup$nHLSq=O<6 zhFRZ#>3%#Y-&e1$L7v>k>-4&vdWgqpFXS(L(45l0HfNeC1^pAH7hdBSut_EEb*6JHhr^Bhk^ssUMiy}@;c2bi(~++@NprbuNyzMS9&n$W|z{^ z=S13rKKy$z02JApgj&bPm-Wg>U1+gC>L`1*@eg}IB`qw0*W|PCSFiO69oxH2Z0NmA z&jnaL1#D9~S*vf|W;%%4KCL6K!_f3HQRgLTPyQHgiZV&>UNMAnWs&YqY_4xIBX|Re z!`oUyVM#}r=SJr^T~f1viL@nkXF#w>*5F&6W=_EF$kjTc$~<=R<|%z$@xa!%TB&aB z%`B^{bEFG5&NrXh4w_5s$7*T+gL1)iBe9SnrY9(evmE9h@nyfkZxQ|4_JvF977=rd z^LiYb{P*T>ybR^{fN10AkjR~=l|-A_NkWZH#)KpSy`r{twx}`6?r#%t8^*y3%9F9D z5Z*vFY5jz)@t|+nrzBVwL*IQq6(@Ce=>Zej8eq8A-c)16o$PUCiAvV%F4OfIwScN0 zu+nLZ73$gQ!TRcg1msa&!MclyAu3o9fU4HDx>X5v4Q37&Si>#o+}G!yvp^cQJW(xZ znq}}c{l4>gO$g87r~)S{RwfuFi@s%7n84xA>M~IoPs&dy+0T#E37wLvC()huLyh{P84Nhsdi_RplF|4SwFv~l z|3eXI)A`HTaU}`QESMl$sr-4c2?gy)n8_EuSm5#G8iI>xnC(kSwFsVfbf20YwEg01 zMOg%qVOB3TF{LSvX3?(x%_?uxq{qcq7X7*N$srhW7EG*C7^B<4nNsH(#OQUkW^B_@ zwD!h+Z=9@6Ut*N?jMhaDgW=YdY*j#Jz&)nBvvJU&Xirl8+Pw|O5+=(I^IRa$^d$1L zsTESj-OiH@KMJm&rBO4Ctzk0^jiS1kznb!#!@fAfN}of!!x#caVR*H!dtn{YnIVJ9 zXcK0xP6QQg#Di(@~54{R=ymrYqz{?52b`W5zW0xPXmtXUPESp`$y%P22|w@Au9>1kCNa{?3g7A zJA+!tm%Gb;+hYSIC_z)ZsWG4@Q|pFV^5QN-m*4Y?{f2oks&j#7nL?3Z=4iO>4&swZ z{g^abLLbjqKK9)UvB^Y!z*b1$PGZ3k5ig#M9E_XZ!l*Y_*W~px@f&tgZ z8;4?*b|r9BD>&y!p9XOST89FTGN;)XTAXYGzS>&MH~$u0+EcdVf)nIkn+ z4Xm!XK6-BYBeM}VD4tAK$L}~j;g>X}!$x0Bja&$RyFM*?_^e<~`=WLU$;70|;i)lk zmudU(y3bVol5G~5R#E%ZGiFI?xUy)MaP~W$qMqaNJdiK?Mq4!Z zp>X2;W`%JhZioILF;i;r0NZX=7K-iUb_;5K?lt7Mg6%1i8|JooKtuz`d9kxBNA2Yl zH5v{3mM+tk_(VV?83YX{&m<5<0VBY|==K|Ro$OXv1U{V=fyoIl8?H1P4MJ&Ppd042 zcQ${Idx$BUNHa0C9OgG&t{dW&&F~KXB7Go7U<3O)z#MYTCJ zZPW)?b8HsqMndZ@mO^hxX!cA01gi1yH=9-x!;QHUPDdI6tNFYTg8NIn7YbJo2c)Klf<(+(vvtGs=_UIyiirs-O^K@z|s z(F~D?E+$3x*Zt|>?pCkpgXifX607gWuQGRo2*CO1l;z9#&{{^C33F()7KkhS7BXcJp^mg>0 z;XLsE`c?nsG#BlS;J zNpc%YvdUffm!{YIF}6DOd_Edy4>k;jw$rezQ6iL>C(yU>kbg37D2#Odqe+e#<!fhOG{1YA_ywfs?gr2oMUnw~h-m*DTSDuf`K* zdP|NAHjfGNObRq}@I9XXEzg-O6R%u6!}0b^_YSs6er99#T_Nix4%c<9TQvz5?_Z7I zZxfw0ec=myr)YfXZkt=wk}F2S;rwZmp4_Es-3$m^j7i%m^Kq=*Oq7wl{@S@qui&}I z@z`>9fD)7 zmE*`EL1ihNI)^~1MPPJgvzAo@&&&3?NkhA-1Zr7Vvg zoJid2W_!vjEK@`cDaGHPZwHkX-lCG)_j3cEnUnBJZ=;b3^I%v%Y)Z+p0D zocwqu0c1o(cWi=27UB6uyW|ktsoVs;{#bc_dz4XR77-BRy3`qTbz@kp+iR(r$*Hj_ zF{^K{@f4aPTd8>ihg-PtC}h4kQN`k?AaT#y?{9xi=El@UuXLotT90MSwyDD#sj~)d zzdL)R?x7s5FRnD$yZ?z#`)(k&;?mJN*(HOD;MEhJA|T<;C!g+vDvbyRwz_ogK)+^F!kC<*_q7f zRv0xwNN(AK?BCPk*aui=>rsXCFa}Mx&;f=&3b-ANEmVSHltZ_b9$?ft(9VCQ`f+O zhG&mHi+;;}<%++oFWP!&wy1^I-pi#yUGnp`rS-D(@T}u%DX*P14iPW_UVhl(l9!0M znDz|lgscuznz2z^n@4=Z>E|%egc$JJlEtvIjgIKdPDl`wDFg?uht|Qc82erEr;;jZ z0m7$01aVU}sAl}rETj>kKJkf!lSo|-^;{gc!|yBEhB->TJg!v1P*i9CD!+6{9acRV zhD>h5U(DH+eADrQ4;fi?fFvlkfck7LkU>N4O}U#Cl{Ky9A@v4k3E@IEobOa+qITSq z>$17)z{CIYY#MafWsUw(3_2|F+Ecm6Jbb#8*FrsbgX0-zff`|AZZ@5YpMqOB;y6r% zyKvt5%e8*w<_=1<_d49qQ_Hr&K&O> z2Kp8-OUuQniH#vYOV=G}Q0#|HD}92j|8e*+5=i#17oJMzZyU{quT@AD9SwV@s7#{? zJ~E%p_uWm1Tw})`6paVvOCZgrDA0eOWmqo`qtco+F4auwx|Ic~#dzv;6~rmyyRw0z>#(5S(>G3?0A z&o2I*U`No%od(}gIfOtvxlcGF5FJrg2rt)i(P?5^7TMDSh2)2czA zARj5=h7bQf7~igEvPZR_m|f?h0trX{yy)u5-;3a#m?*0m zlFoTdRpxxzc#nng+ZP3Q{%QSMUVjr*&{qDaTe~jq=hLa&>j}7Z<}fUV&RjvYze(wL zB}UrVAkSKwZzewb0iCRMthk0OpuKu*I>y9yQgr@_G@r?0OPy@9_E#88R3A&fhL9)| zY*&6NCU2BqD3Dl;Tg>f73s3l%I&*N#s2*v=JBEt5nlcKR`K2qIBMB$q>1Q0|Pt1{T z8Y%89MAYc8x+@Erhh)3BOkkM(+JE4$`#&&ql&o8T_V@=F7#;OtD8_sFoWV_ddY|(M zSVVJ^%g8OaX0zIZVTSr+_G_7U5qlv?EWkHQ4uJaU78xXp*&z3ch)G{F~;PtNp z@D`h(|4uC2WTO`9i4=(jqoh<&7B!G?wSE4kdoax(7O|BOK{jt~N;4>&-_FC8pXd3;3t9 zKO(Q2+=dh|ojpidW+18FUM$gReaDtH2-8gI&#DUCJy=>6G58z&6d8(3L4Z@`7Es;fqSTG6T7$Tpm?mFkoW%{bz!(b=GnQTgxpW*hoLz`N3)LKv-cAOp3UW3`D-NRD;22;7~bA6d%7GqERzlSHL&rdvZkLK?)s4 zFtBlvg^GBlUmU?DMs&Kvu{3B=qj$iuR8hYjO(aFa7boaK>3#bBS$uN*j3>6`gkdpC z*)nipoz;vpuY~6OpTYboPauu!SWzR9;|{8M`jS^MZqd^7*zH(D98*7+I$53={W0k^HQB-5Yof*S zFPk8;XX6|CJjT5qhWZaiU?c#QR^ArL%c)z~QVO)Axdau-5V$gvmgc(Ce&BT9+VSa%Xant$ z1C3`>LP)ooENpy)ZiEFOqu_YDe?daZKf2?gP~F-eEc~@$w&FPrFnR9_B%0Y7q4h2J zb$g;t+A?IV}1bxZQY9J3n&FfMo!UvYZyhfi-Rk(%g~y za$f?wJed#Y)4YhgpbiU{aNl5oqhi3^$n0G|XKskY>2tsG07-WAj9y)FR)sNGOY|K-k`Q+?$PLmI*v`VxWMmuc?Cxi1>#<=;RSEqD7kCbRrRBD(%k|2 z{b{TxBFgl5lmYCcqCcnSD2gIYnfPva|87sp@F6KbZ2jo3-)kM3=*6zwr2fm6aL@Xe zt)!f%(w6`_J>pgq-%;UE$!qrD3&);~^f_?eK(ju&@J+M>6URCpwl~j$(8gChkW1%N zxCEz_pLlJ{qMtav|3OzC`Djsh9&CT~Z*h~P;I2GaM*5ySSb0n8lSXbW*=}+iA+)YM zLp={X93o2#L!HT=pNdvSsSp~ho1H}(xZ)GEF_p)Nvu(HFsYY1$OjWIm&q(mV^ai$b6_%P(n zKExYQ;az8n5D>x(UJyw2UIl??!I;VqB=tu7dzJFjKy>{53KYqKmLru1NVVz{|HP3F z65sZ7HZ+k8C_4x=`ile-6b?cIAF3dt?-^jrXH?%m!<$n-7DEI42SmpsSd9eOzru?Q z9J>sJT>aoP>QWz{a9e97&@HnuLdFd*Aqm78y_yrl%@Iy&_1~|ahDk2>M|VvjO+XGfDBy9QaA=n`oj)#?9M?t7+Ih~EMn!+Xo%ao zmodd&kI!(5y96-6`js)?j$;M(o)7;OM?(;Wn~By3#(|-hABLC7TmyrT$xf4RWdvV^ zV*3E{QvFm0Eq~C6F>=d@N+z5iElERDFofhJod9~M29nJc11(PqTG_Yi-Dx#$>1*o9 zlOELcj!14)F{p{(HoDcCCD98VK}qIstZHgW;f(gvh8?ggOJYDbPGlghWf^_mrD>OE z5I6Hva%6>+X^Br7tcHDmCWKOyo!aW#O&sr8kdyo-u5H3#F)sOpz_%51(t|!Mjtfi$W z+ARFVDk>l=b+KKEKc3x9nqS%Usm#q(>I!;06*ft-k6lJ{A>1s9+gfDlG{&uPHJLcl z47GtH%#2Rc!-2vk&}|<=Ip58+8v?$cUB+|+e-dO+f<0-)`m^1wu(0?CzvJ)!5<7VL zE7|c_rMYM`)GD?xvjtw`H8;~~vc*6OeM-g%;HQf%|BgW}tHkT2-F^#e20lWEKpMX4 zWv^dqH8s6aYAl@Rw^X@RdrEeTPDbCc3Y=Hb@m-VgSj!-BL_ng`i=1l^Jq{6Qx1yJ$om zV1#Rfuz9W#3sHMvrPy#)X;Plss@R4GR1aFVRh&|?buxzUW0;qV5KVHfQ0Fn!u16e0(obz#;OPp#Pjf_J`<`1cQh6(Wdn&CbCYgNooQ+}lV=d*_i8fv5sFa9C zsXO5Gn%=t}D}e9(C?#LdfUTu~8oXcubRSb*zx~0l3nz@3M!5(jqQ0*YX%Ed%X+|4T zwC!U^HJ_PStDk5}yAAq0b=F%y0a5;jMlP)F&{sY|!gSfIv&q_5QT`F=A_QYDJcIsC zn$@v4j*t?20*OYsj6yz$P~|2K*I%QmPz6#iQrAiuR}MM3f^2Q8D259b6ALB+$j2Vy z$vTc@t@{-Z`CPIC+syy|GE*q|4L^{hO@KIv75=wk;O>B5;BC;rEHWzR64Xi$U-E9!Jug_ zyo`ETN+cL*sg-x)Z%sXs+2ghsFc_Liu}f<6{cQB*NSNQaF@RWOS6C=FOx^5pDCwdM zS_3L(oJ7c2S0^1VoD2z z(8sc~3n7k2(nYsr97G=B|D=(Ul(s9Q5!YKgdF(^(D+i^)ypRJ7#R^L(WYI*OxCGQB4e5J$y&;f z!FuQ9Zshq&97fduhp|Q)YYD0}-J69osU_$-S@3bH+#w+GXB#99>c-2`PHByAG(u%k z`Yn-|ngSaVVnrCJv0ru74$6DBvTU;D>0ObOfkde{iPx-OL^zlp5QaIJm-H>$XYB2| z?AN2x)~>q4*xC-;_lDovo<;UIT_PVXH}cbqNbXtoo4p{x_L_pew5YCB1z|@BN#v($ z#d_6$;=lns5brL^?)QAVFZK~Fr*?3seQGvq1@I0J+XBzKvkzR%3q8spP^nx@um^!XP=VJP%L@gr%Xmv(ZYVU$&CU&bCKRni+B5Oa3Xf zWW$;IRc$Bg`3UJWB~qvvJOyL-2DMZb*}a;s;D-4U_I1b64|3gzn>*a@r;7{W%=b-e z72uh(WWq8}&|KG`gg3K}GR9)+kC3wa9cq}uOe@OwJ`(|uesVuDQB7*cLa>NQcuL?? zF=)DUW!-tV4~rqfwSF;^@$f+fm?YYE z>E{CvK3oV~rEVxNsx~!Y6<`k{m`Tfqa~%Tt;mbTbRT0XxR5L*<|0HbTP8S|79QPaE zqNOS@qouOF415-E+PqpWpXaTxn@NlRxwCD`RXL zlMrl(9Az5HQ*1Btn+x{&nXTOWb4(iEN`5ERuku#daplK z6>zP*`;L$PgDIGXT^3AJ`yb84?Pu__F%|nCn^Oq`2-Lvxe6@C<^t4N-UxR*57~|Gg zTDIO(uR0y=Ms^=c{dWQ&tgWzr3r|~9Nu2B(sPj=Bhe|8;M0M|VdcP{u;nifSnh0YH zC~tb}tiyc2{lqaG4&@GM@wXw_>*e}vbg?pXnAU{N2hYpt)$&V$pWl8$2~q*(;q~=1 zq5n1J2pvvm_SS5obEPVDWUnLZdRV6}+2P#s$7CHr0f1=z>XEE^(=25a>Q5#yc_^lp z+D3eedAEJl>K7e4c?9hs0S|fMv^hG{t-p*Y(Ov!&p`XI2nV(|Ytru?%@AfZ{Wr*vxfl9ymk+IA-=qv^bV{5o<)i=sW_GYdXMMdcp$@j8Ph9Di8~p&nN;Y=kUkvd=+DOO_hHgqE%@@Wa*@;gL`3U6 z@Hlc=RHQHb2OXxzmv*VZTMXb%G>^mxf$3?Dd%$3cWG$=-4`GSKr+Yz2p*DIGgvc9) zwY54_u};>EO2Eh5$ph2^Y}U#q4(v zIxuR!>RQ+^B?H06urL*Hdby-Aoc-K1q*L_+>E1|P-kBxP^oUS8ge)GAz7^xDj|fIN zCoP-UFf9|NTT~H&6-YXY=!Y%4N;u#YGccb8r)3?xh;-_1J&equ>W&pb&j4iQEw3S> zPl#vp6T`~iQCCDC2*+yd(dKs&rRy=kLtFcoT1Gk*nPiHD;FPb>V+PJi;iV^qY^mnn z;*|Yu!$wAr;1oZqm?HDrCQO1GwFDxr{c{Y$8Zx2pZ|er}<|qWMHorC`D|Qb?E3zIg zihodX`dUA%446K(zz*Xy#N>pV)4=*Nkz)rmQzmIVs_gLs4)A@j`J^}q`(O%B(ui2U zzLs4_krbJV(r<)`C&Ckt1$eN&6^fX?8Tju-{O}&83<71OG4(?aKH@myrQ_9zP#WRC z`M@0_+TH$Jc#&)i+(W@Z7h2)s(-AUKZm8jTTc<7ZB01r62H9E(+sSA@CB52 z3BnO)FQX0f6K*8kfr8ZXLz*_eMSh5H1FCRf#<9h;Q=t4z5y>k^uZ;PSmDQ2_O!@vN zFUa4Z2QdWJF9b5YSQ-70EwlEJ7Y4<@cEpj?-0gf5+?+>SdI=1XUQfI|9(0bj z;8AcFNQnFpnY<(xzeRK~B_d!dgB7WrfZgLp=Qx?NgY_*F?R_ZkCo^}0BcuVr-y^_G zgA2x#MI77$zi=f4rk~_kZcJu8<^lnR+h(x=_6P(-G^&PWl)^BqSVRs3r{Bp@cBa_( zoxtR|l<22Q!r&W@H*(S{IrFBR@T?^j72V-nGxI#$DCkDCKJnN{`@>X|-(tK$c>VVpg zcK{ux8WrM$AA?;@HoEO%$-Lx%;5}3q1w}-1PK+nX%vMDM*iku+h^b-|?1%7g{?ZQm zX7NM^&?6WNV1m0%0C3Fm5c8j^O^e2n!Y9Wk{qBa2ei($8?o%vs;5h`~j=@b>J6BOjiu6R#>z9~$+#5dCP7(05>nDMcn zu)bCjJ+NB0$S*EEuL2%HzQK8?w_1?oR2WDzNO;bfnb9^ zP9XOc&OxGT)&xABz*$tJW{)F>VDv=UDd8bG1TAUoeT`v19XA6%9+jeW)Ue3rXZrpG zpzMx$E_g%vWz5e-hfUke?KV;hmK z_TRf$qGtgc2!HWKiOT)dN!6QpGdF!HDPARn$G;8ENQ&fG%3>C4LtQG%&1%9H2Mgz6 zeZt>1B>nXngw8IZR1eQ63W^xoh3i9}eE?Uo8$rqn#tXw$`XwPGk5K}Vl@j`)Ap$uW zRt&qu7y3@$3|O@Yu%6AEB99*>Pu4%<`U2qmf@C$i!WO6gnq$g&R0e`~koZ`Z7a=87 zv@<{)!hcKe%M&0qBg@_F(TrhFJ5AUTp7_>N23Fjm+~Q6|4yuz-p9V2v*;^((!A+7V zulX(fwWtC-BKHmZ<0#0@a`6nBFgTIK1LOJt(jRvA5QseaW^G{ib^`fkhKe!Bw14)a z@5v7FDa`%B?Wb+xz6s3gM}@_Wl$bPkQv+8sz!y8*e*sOF%yP~}35k{b^PG!H;IB#+ zdH~Zr!XU;pJ1snC_!K*>S?qA+p$4+p3m9y*Ay%4T`SgNYF8=_DA*Dn9xIf zufFBvWMO_%oZ))VC$O+hDZ#?_kT8(~4@L%4)#Nj9@j#gYmWPB`$wVQ!S+S#`cbJ^N za8D$+`3j^+&%B1VCzR=&f%a`#7J+J!{WQD&FjyC$tkEn-WKpSV^w?A0GH77s`3WZ% z6b)EGR1{_bfu9{uIRDLZ}|%+Bukco2Hu0$XOnmp@%y z-#(ymLVO$wc_9}ueLg_&3YotY52fFqT~C|<&UEZu9;E-Z8tS>=r@UM=Om+>d(F>ie zTYvCbJV-y5*A4EkdFY~5t#__;w4c=ql2j?)Of^?oF5chyEZjQ)okVFx=UtC@{avT4 zsDnlqd)A|k=gr=5l3p8pZ;lU6Zikyo6!D`VyBm1wWJS1)Yn$Xkheir_fi5!QrnqyU za_}_V)wR=7&_VqBa9_ap`=?GGTp_qN z&AjyST-5n~Gzr)womQXtQN^@fy6yu-aES+&8Z2+JNBCBAtihCb#f1r8Eelr<9q~=$ z^g^pMi<3h0xvlHV$v$|4L2uV8n8?aZ=gop8pZ&g23x2#BTY2lxiF7c2tO_NnkyvXc z5uV6*BOfY7-&e?-uXbsDH~@DG9PG3fMcFZ&v{>Gp2X# z@RNzHnkM4q5oni^3dW44%Qw{$44+}&GtA1(3Yu-UQl;5!sA%ua-EEnBg(OXBB6F3u{xUlr)a<+C@Eyi!^@AzW z>w9qL`z7-S7i?j&n@{_nb1xt?Ss~e&SMX){6^Hfe49m)dR&MPCe<9sFQ=_tXENoFj z^@D5QV@-Z`oA=~-Nlk%LFR13(Q(Ym~paFHZ?4w=x!SN}i()n(2r;Cbnam+a^%6Tr^ ze);~PIBV;5n)}9pdQK1IYZU12U)FRbMtU~`_@@^KTR0q?+q3%z6T-ewA*UoKM_+?u ztZ78&6LF(C%jsxU&;ylg)irkva61^QISTv7tz7c)htB zi#$`^>qv+{qULZskSjI_L-w&!%zEyH?QKuL_E4%%d1sP~+?#WEWwd^jD>yLmEWDn4 z^R2`?D_LDkruhRYu=o$WkA4h(xmX|@NZxZiSs^&cT0Xs)hOa#5(0)tg+w%AUc7tS1 zbEtONLmzK(tn0a@B~T7nm};NEHt?UJuq$vk@Ra|OGxRoKms^uAjiQ$~I$0-#o9X=5 z<^8w*RF~CL&FksVr6R+%^QJ~iVZ9yGPpja}k=5-QpeE%e z#5Mfz&zx0|4c3G9-m6*25a((w_jX+LrV9;q{Khv&U@bd~+qgp#6ES&B|M^Fr@~wrt z9p>iy)p}#;x$ySAu;w1ZiRh>8OJ|3zmp5vqt^L>+*##f|q!xoU?l1*!Y=J+|Bk|=_ zk+#tOWK%5JK{;ma+N`3avnU%{04)1X+)&Yeme1$j)aEu6^H;i*Rg^GU=k1>yC#PA^ zGcif5#*_9$0sWCRPJ8wB{EifjcGj*ahL%JPI_u3rT3DNbY%npRsp>tPMnBbkxfe*4 zt(FHeluz%eTklPJon?ruBY0dE-4s5LME4Ttn%XEcG;g$<5;D%VDnW0ak)27QTw_+7P3%J1GDsj#v_f1FR7VTF>-)P3d9;qSFea zeKR)KmlFof(VmcqZMkSKN zY|>q=+lniDkRvnNVnf(|G&4kML|*@M4ySH7uaJue+rlX2N69Ta0kUyzvDiYgeF~1x zPK@+BFa*IavhGp6)iHU3uxqP)OzfjRgX0(FsOvJ5OtSf`fmfdS3Y`_GT$nPJ?rj|O zd6c_e&+ClTO4;U)4Y45H1Jh{HLp`q7-2rklf|*{w_ zSFSU+46~b6jz%IZUTaRDtgL*xZ zv`WvXu%{Lcmy`UD=8kQHkH7POJIATLJ}z~K??NN#v80b%EhmVd zxn9l>%7*H`&aGNTD-&6K7&L!4j>mX$=-5P?20n2w08Vc6opN^%7V)Miv+=D~e=K|G z0Pj?($djCY`^q|RbBATZ$Z^)ECfU2wvu$l3RN|(rc2DwBe%RjUOWTTLo2#=D0ZcG}WEt5P@rqYz-0dpPrI>PJ52`)2e}b2*K?o-Vk< zy}GNs&g05|w^48f%S_1k%i7eTF1DuKd&5@Ur^TQ&r2b>L<+&pD$nC-19g1|b zhBxh>hojvsdhQzO?ZriBP?PL)L+J5&&9#L69#9P@SkX#dQ~E`=h?r>nz9J3wI8@$z1Sz2M^V>#;j1MJ1r)Ys9pLxIB|ZkC z+ySAfVu!P2`-!hRb?*0u|L`9=@DKl>JS902+7uARqcyD>k`yRdJT3_qGV$9AF|nRq z1%B>lzc)@7Xuf+2B}64!r7B_`Wx5#tlV02-EelIzGHV zY@HlGG%qfXfb!5u;Prx-1L_3nk6h^8R?}VZyu4iT$0Ndrj=Owkzi@=!Mx{;G$;pRu zm)u#aZ};bvEmnj0MzPHu*Zp2v7@+q+0$Kfd{~yiWb9;>QsI6^Gaivw+hyMNCO>ZSr z;q$A(@MK|cbV7>vs>N&-Q|TE?@{4A~r$*)%u4+ht zot=aI|5=op!xLK$%m44{q_g_sa{O}3BmJ0g0RGl6aI5{ zR!+*2RP+0aG6T-Z%VVsZi$dev&;9JmpYJr9REDzMD<@~YdpqJ`n}suH`fMNUA8&4~ zA_2Qjmy5=Mk&69JD0Bc~!5^+A^9Z{IJp2ma-REiVI$NfgBo0Gl1ikm?m-0a6VM#Uq zx%$`Fr@_5+SLvY>l8<)&190HbV}+{b4rlqJQZ_~I%5OIJz5Ud&s|m;~ogAim<8s*g zAA6-4)PE`BFWFi2uH~^<&cuJ@3{F~6WEou8@f)^G>7iyjDr(DS*3I1YlgKq ze44y&8c8}{_Fe$J+UE^Hz4to_X_M^JbQ+ojRFVBHyvQiJ6s7HdnEi?0Z*DJ6RyvjO z`x!Kkln`k1;{xurg^QLjo!j~(8UiLsGln7yCZ1ArNY>?v2o@{mik+<0c~#tVSJ{5b z2j}qRV@mLr-mRS{kfkKZCMYiN>bqi6g)tiBmlLg-q}2d!?TgeovN8@q*5+q;c>!`O zSI${Wm^d*$gAF@Tl8!;;H}9wgvY}TB`*wWyFj*VTE|04VxiWS6|8cMz_3aV4Cv&9NW1gT3Q!lm94pUsc!K zm-?!#1^i;4cz3yDJ_CCyn%Cxfs$5+a_SyszW{bx;)sWnj9-izw7Bp^Fym}~>hb$ZP z>r(3#cOifc?l5Y*WL9GJhQoc-I z-AC$ee>5t*D@YGK_4Qp5IqA-gd$rPz&{lZO^6+EQNgLby0ZK32v5uPtSb-NQM zFprwBLAQ0}Sfc)Q^}_e!e^K_8QFSy+yTRSvEx7x}HMm=F4ess?7F>e6dvJ#Y*FbQ0 z*Wm7O$$QSH>)s!C|JXCD*Hl;a(^WIoGu2gewNQ#_oJ~I{Pi==7*V2fJ$76qeOp;er zG7Mf`nwb$m=lH57|{gxt`)?fq>+0>wo}%SU0URp!%>x(i)>ZqXVtU6Jol$ z;X>*z)SS0NQTHo!j+&*vI%p(-icnKpZgeF(QTa}h;-yTshM z4tF&@)*i=tMPl|5oyngN&1Mx(*;Myog>W{LFdOr*z`=7{DNg(Xn% zxU1x3n$2aSC!?R(F8&Zl3NxO9-JBUZ*{~$3Z-K)lz?!S_^f;cyr@9j|LhY=s{$(#e zwS%^nN9LypS90BPc8{B@qC3e^<7sw`d&8J-LQZi<;f!2sY}T#SayM=i_Xq zqtLrg3V=V<+6d~??JD4J7P7JGWrgRDoE5tSW3pA<{iy52ewYb+7Sh#SE8R&b`Ha70 zP$vLy`>_tk+RU~|J1_sJLP1L4VU4LPJ0F`zGaBib^(*J_lyO9Be@jElE=&dY2bfd? zCVe;}bhgjmg`F!Mhfd}ueu#Klju4zK;pT?zJOE8@J$VXz-a%~RM?9=4Hu{UWdB;<; zxffP;xjcHKEU+w!%|C^)h{Q9chnJBz3$EAn8?hu(2;GTRw>);-<_9CA-7pBnrNGVe zIFwn$l}gO2oYdYo1FAQQthn;SpvBO_#)XUpS#BAAt3j924u?URT zsEFzP2cABK%&zCDR9DVk(ypj}Ex08#>Jt#d7&IAN=GQ6lZdB>4v#>tq{k*3$CvZg zKXI5bjLA&=dv^W{vyOj{0inJi@0~o zhV-xG@`Q-*lG7{furZAJ>^%J&@}{%DkcVTSy8L@?-$4WZjanzO!oc52_%G3&xBA{u zbI~vS7izy#5TEqKO$N3qAW!}(77q1)D!t17zcu$C)c!l~(yxdApyup_SbwH$@qZx( z#Q$H^bYmZb&i_5^>i_RyD-?YC^REe;m;H-4g(G<2X=H-q|CIZ#9~kezm3YiP0nwd=StM7{TZXyV?i0>AHZBA(+nc48y9{!i2F)93~egB7j&Dra6Z`pL@ ztoj@+-TVw2_)qI(QV9D7IVNhEZx~iM=Kjz0V*vlKp1^q`Y9rTbAN%$FB0e? zgAd(N4=jZzktuW}kEn_1*}v~^=g&IcHc2)dOU7?uC!Z@MQ_>urUOK)cET-*qqHybH zf7a|AU1;{ZFC#C;67Jw6$2V`M$l-KGTswT&V#=W2U1u046Pn=RdeiXp>(EJSC4L3? z1(>r@8nSYPm~&kB<_<0iS5&F~jOup3Hc{2Bmm}>U?b>>(cR%e~R_#AFtgY(*$*;s+ zdGfvWMIUx8^HJzo6|H#+44$SLM_>D7%_1P>R>>UorK8kqjL7T3}3Yj@V*;IBgvj8Z*(;wXPB4LI37U?V#aG)Nt)w?yx|E>o^T z6}3dewCw7Dx@_r~H$2qs6c3tY9}}E^H=l!=%i0Ro+u)mTIhuW^bd;P!b*@0o?%JTP z%IMvG*Xr&{9s%m>_fCO-^=c!1&)F)Fx6E|-p1pG&e9O&KefIGOoz|LLqR&Gt?>U&4 zy(zj`Yc0EZjn5@3^=6_vPnOdIv$JI9?&MtN(lV=}K{@vg_bk!|pbyG!rZZ3+1$u7N zt9J`7^4fZ6`^)3WWTz#M(pGk-*iDoDI-lo$*Jki!5ASjbXUonHlq+g+a~)=mBx-6j zP01PC#f4|298Z_;OsQ&zyL5CQ`}hui?;z`Wa&MCtdV`=uz)0E@#%Nvy<4y+y<4SRX z;1&Zo*mzj~`#S1GPu8B08~yJ(%GrP7eH|s%MdcWHY+4^4@ImX?Xl81M4S7!bRj4Uq zocyQv40}8!UQJf5gh4_DOu44Ijho~#&-06RmykZfp09((SqaL|SiZ5$@Xtpnux|u{ zB<{nkI8iQcBplOg2qd=(9sm_&3cPSp>ZFWg^V^l*-O*_*(XG1(>tO4Z9dmHvNSI-J zH@0!?dqz^|s(H(;u$DQ3}+2P$yw~D`MuyB3qWuZ+@nj2DXtm%NE^CDS8#qwhin#RfTaBql< znuD{LOV0E-@HSWFFA7NzsP;|Nwo|NB4jG$sl;>?twk()1)cWH)ph@*{@f%e0s9rCi5QIyt{U#h6NRS&&T~cD0AtO{ zX6PJh+u_-XQM2+p)3U#MU}h%R+bkMGv@eK~?psmW zjzhtX4v=poX=WqMsWk%T>DVViD zXu9anfPG13C$NiZ<8+~#*HFMuN1kU zby8kG-*EhPwdEe*Ey`oV))r_l;|IOS!mX*43L$QW4$M_jxrC(jC-$PZ4q2((#IYAU zW==8xp;Yuu>xjvj7|AoUrM&J*omws20EBm)ZD%zTjjmF4MtZcVqDi$f+{BR*+w^Pa zU=}U2CnziIY8=G)$*0%N7DZUeqFX2GpoZ)pxROhqlj|(Z@JzCaq@H=~aNfwYGt>$` z8InOd=2;P=UToEwmT?T5xa}&nz-^t>aT;+(B&$_es?}eojgj40o_NC$Jf*$ge?Acp zZ8#ecH?m+y z9p4~gO24(b7Dy=@zhIWk0qdLcUZQapR?6%Bk3ZuCagI{JJ1}Rn8~p;Xg}OsYPA-rc zN!m9i=hibud5&_vD*S;PW7%w(Z@Po*#~MrJDtqU=1 zh_pzn@j@&ovjftG2gH z+N(^ntkW`DJZ4TTjNfb#2)w8p;8h|}zreO*XhY3~rXM$$HsQFDr+CvjNS?X2KCc6Dn6*S=WT%!CPnH@FWy~zQxVW)gmCLqiHPh%jCh* zeB?!=eCBik{_I$KEbYRQA%gN{X6C+F7Ao$K^!@btspoduH4!q6LW-|;G|;v-jdF@sLgIBeh1Ni?z(!bo zP>{3Vu=6;CNWm;*3P#A^znJev-rL9CYII`}cNh({uIv~3@Si4D!No{hJb9fg3k`Je z9Zp%+(<|Jy{6108b0)V?FWSRj*HORyfgIJ^V=%8sx2~VZ?OniBTu}XO-!FQM*M3UB zHaU!1fZePbghw@QVb1u*`F*ETiIX*tRNBcg;C}a~{p&>x1FAap)cXtS%)c4UX;vSw zI=p~Sm3n37TYH~l%0E9ZVRa}-R$o$SJhl8jOr-}+l>dOX?(k{o#cQuzgz_vzA;RF`z=iF&^0q7B^1%#K!YGvQ8FG;P6ARId zzbs?G_6jdcDYN8^19VaGI23Ako(E3e$^kjhV$$XCqiB}KSn9LLens>7{6two$!1BI zN!r9VxI}uj!)2%mM%%FSpK~gKq6Ln|iZd_zhDa-Xzq^c~Qo^BXUD5Er!O6~r`D^S-Sh#G3By z1-o&{)(6SA-~SqW?ESFni@KciwW#C?Jhe?RUB-ZD#6%?#X7&&@1{?@~os!kBM z`Pr;sSG2#@T#e6@WL>>yhUmd!Ytf}!)#bFX>DiR#Hx*dZX};L=8&Z|xW?WAGcDZ03 z){W~d$<$OSK{2S0&b798`RI|{+{>~`_%Y3*jZD>iw3ru7Wfk_tw9lM?Oa2zeeFJ-@ z78Z1BX>A;Z;kIo)v$s|LdsR;>Ck$ixPmx|sv+_c69a3wzAC3A*D-&{ZJ06U|tGgh% zaMEHN4_&JuhnWY0$VnTP?y+fUDub?M)r+$(!)yDMxAXYo^KKgEzOw@HZzqxj_|?+IgW6|xIHgxKn`Xd8@VfVm^d z!2j&aP$0l`OfZh{S>!`_UKv1POJHy^5^qPTXoJ{h$VtRvfov)`+@rF_&|+01ijy{u!= zENqnuP=(tqoD3KkWrWW-S%&0)%>jkZ%K9@tx^Qh~tarSet}4EGf8LUaI6@Z3Op0@? z=%Xf6f&kapx>lS8W-@Y+f%lJ;`y@|?)vFnAw3N4iJYaL67fkrR$A(FK$)*;WbNnju z#EON=BZUDqvm<^?H17KjBGSE}reMbclW;)vF(O~g+*ZB@B={~PbPsi((vY*%$Xj)c%O?%xV9EJekKFR zA8P|XXlyvYR{2xARepG6{@TypL3`BYT7X9BlJsBFn+pyz`GX4K0lyY{@BMpLrq1ct ziHefKyk1AK3g2<4$YXX%Fe&jU6I?eLlv%ekVN6aogKDpbY{V$eGE#@PsIz|sCdpjAwGlF(b-u}@m#A#;}hm_DO39~ z_H3nH7pntnka`KvR(a(FgnjLeM%vx*2amH68>?2I9Da;#P_&3L=XUosy;$vXCg}gk z4Vi_%tNbdNsRB9UoHj9FAog?id-tlZ! z4k8uelePoQL2tsvX>Z&g%JxP&wR|LW{+4(nO#o$BxZoY?W@19nG* z`Rdo#rlf)w##%N;_SpE(n05@3`a@yQjUd73`75sUm$BBaR-FQ1`0cJTFic-#*mi@+ z>V4B???;@EwqsZ;GSO4RqZ~Eo3U$|`X$QfMdw!PL@MS7zCnimg&XW_3L<=2yKd^0I zoV|fbx!G6!=jUYG_p=m*F-GVVQdDjq2vRoA6p?Zy?UZv=ZXPTyZXPCfE)a-~jg*ap zg^7)gla&LM5=9_|mm+)x37wKlCdrr*fyRxT^6DT(n!?gUfk42{#>BzH_Lqd4i;0zu zosE@~l!J|hi3P-yB4RC}nqp7MO@_h6#6m0h{`)J3y|EQM8z)DKG6;bR;AG|cpBd8x ze#cO7$GiJ}9fLp|-N^7)?($kO@nGhgUiJrLzRewu-&3)zIC%hUz75GqbVx}jslCTR z=4sHy4|%YVruQpS9?L*JoZsN7ZD(fXbkflP~XCgCh;J&_IRQI}58$RDx3!&hM z&lC&;l|B1ObEGjnpyD=lU6M}XM00&fW7vCF@TL)z4QXb`*WU);3wlDm0H5>;*JEJ+C(*h7IIsBt;jPTSA&D10H8(A;3}Zw&oCDa;Ln zI3C{Xj7tVk*e;yGQdP96IPCFJP>^dUIpc8N+(~mkz)|BJ_}M_^juFJJbV&cCMJpBa zvaONyz(oawWp~)$kL(S%a?X6A3NYTm>^IDN?{qCJUjD1}CA{2cypT;p!sw-pV2|QokoUiWZ2)zysn-&`{pRxoH3}m7CuB*1-kay8aB-U>hhnhXIHDsJ8Y*wQouZ(VhC+UXI zc=dsTs2)YvAq6k5cmvE&X$Kg}Ts=`#dkRY~m?Q*1H`X)T1txQr&Z|EDVE!U4yiCl= z36Sa1EXYw^slqq`arg<7s8qI-sOV6W0O}McdQ^vNqHR;KVvf+uOQ#9Q-%b0*W?r|WgS`QC9@ zA^Kp7Z1$dUy^yS&T4v&99Xsfi0@sy894aeaCq#ZcAC?slUzstmx&&Mzuvd*_fFEM9 zbk^Ao+{yu;SHPrh6DIZ44EaNv@ka24>JztNDyy!CP$PgS!g|fg-U7$kDqAUukgH_% zh5@R5!{gVY=uc%#nUXxosSz7B;ETK;#jMafD6r?t&j6QPE-^HIgv@-P`c)UEvCF?8 zaAMX*3l_bIpV=>1IBR_^V~lwSG))%dnH3~Y`lH=yP-Gm)jQ$F|3|(}eHT3xbNDp8j zoxurk3nETTw~G1?fE}>2V+xpAhlnY50dM!cfX`!++}o|R?^_`rY$Woy4)s?E`c4!J z?z2p;v#vQJ*H)rfl?->TGKsU=uc7NPl24=ND<^C;6UAp;y=S;Q-hA0WR#~#Uk}cPT zOS7|fSN%}zX`N)(O1O7u$FE!wD-w+m#784OcbWcFUDzSWVj=?82NufgDHm^Pec?~D zokKiunY`#|7b-_>q#q|f<9}u1N4>aH1fF&!x9|*W;G?n{U}(Y2Ka}+nwR^&Fot5%s zU+B1p;2L#jeNN5Piso4c5`WUn?pK~lBx$bkU`Z`_4XnkKOk^y#nKYf|KG@15ibDx} zui19egW9E46gT16m%@kf702CR`xGp5XB#r3kSUc&^Ym)$o#0n;t(fKA!orh9m_Onf z43fu^{#YjEB5e@~B9$!h$}OXyJtpu72ZhpT?s90lDUSK%9JuiSS;Plv6Q?DXcfp-1 z!VW`r#@+7myQmz9wW3kqCpkXkqf5memb(*E6jz5jM5ARnV?IY{V}i4?2EmkG)pFJa z=ap&(c!k;i?1d!Gmo6IYkZds(IVejBR=z-$?w?EJ2S0{oha^n#3BF-x(W)L=pmF$U zTep+I$WyfKUt`(|IeqJUgvSWnlGDo_0KZ>z0^olK=3XkG5 zqgT0hI7>h!o5VkGke&9F#Ol9JyWDLOWPUT(Xz`PKl8vNT0$?Z?IK>j;OP6{ZR&7fp z9Z9j!a?4B9cvF|e=YI=}bKgQ0UVlnbUz3LBI{e`$a6(G2mR_QmRz@$6UL=};s>+LYUv z-wy$52BqB7Uox{qnD^A4&VJN(<8{rn-y8;0?WXta3{)4BGeE0xqvgx>o;UmoS7J!L z=ULnNx?C5Wrws6D?(fwr*D-gXiw)~k!$MFr-UCJ|?g5yMFU@GGg)LmX)&3vKYA`T1 zAocw76%X?$Y$0XD6v2!0sKF9mTB2gWC6_D?(s=UX%*}WUhNrX=&e)DWo?I3C!3tL@ zO^{zcbDf`YpMREoNp{>+OE(QA8K|xKh91`MvHW0oVC~r1>aydkfN*3KDt9xMJIAMK zRzyJMI09hZ_w&2ow+-@(_O+2epSrK=4zub@+}DWBuQwm+cb1amMDp43-{PG03+4fW z$94UBd=AJOUQk%NtBH=MO)Zwh41n_2n9B8C9oN zP8d(1gy1^;X@vFJYJ$zYCmcd5eyZ`;K4xml@?Z+@;9(GO5W3NwqD5p$QZ(g)kSIxu zA1hfZ3Fts9%8v9e+b1`ylZcyC-jE`=(G5 zxB}+5u{@};7OcU=D2PLD!r&ETzsGjlKNKmguD%5}>TG9%JBXRxxdi z1$?(ZI3kp3$Gv7yfoI{~=H^P&ZmAKf>0_QsBoc)(_|p&ehrz=7mYZ34eRrb1^!xW5 zZt}uN^5E!&-o~ zv1)cuIV`0s)PvtKI?87w_uk62-*gUN4+&7VA87Q&tcpcwRY{iBiPi%ww?ydW27Pk{ z(o!shrmViH@9D`D>Brk=Dk}39@qbfEO7t@NVK!zALuLfe+=wQjPhI$eWWa0IK0DPO zx``9V&H4=g6A9@}q)nx_n&s)k`ya46bxuDrj`+q8H-eAH7tU9OHu5@9MWi|hPra6S zD(AJxy-JJW5jP}$^G&#oahGgJ<`Y|g;vkE?X;3cvUuhKr-MyKC8y&wHfaM}(s)!zO?tvO_EzJn=|Z1h-YeMmFt+pFBV`4exVk z37b%lVbt@(_7_xeGtixp)cr%?3dNq-k@n@}JF}W5dySd=O||UH*SRP@9Bdf-{^(Jp zLCdbHvKQl!MKbdSi#*&!k=f?vUw9WPfl%$rH?BoT-a0=0X-=j3`J$uQ7wX7|!{Gis zHm-mTlpFzxl3HQ*FmjGe<(kshri}1tE|6lU!MUv zZ}%q)FP`_OZ!DfXuZu5k{nHQ$S6)G>Zg)uqU6V(!>mJ(OnBEQG&AHeX(~L0&`epLf?WWQu2sQse@{*#hG6a zGmkuJdBF)Sd;Qo!^_RS0<{j*8=|G>6(OfV=Qxfmz^bPl6 z=UH)RXqCgBT7X2(uN(6o0;-n%F-|7or(%e+LI@BFV)fIYCTFIhh1fGPx7h?VWUpI*Xlu%Ukk}1l}TR{JGR}CNa zGuJf6;91|29Gb`jYD$lG+nbwdAiaexz0x)^MFq?~d%5_;Ow6kqAH5L=moUG4Wo2_g z66tcx7;4k59I9_>7i@)Y^oyMI|w3n`tm(NOM@N0RsM9 zKo4+e>j#pfOWQmrh9N0ecw}*ly~%5P(n&yAt?$#C{_3AeOOkAqZ+K2nRnaz)x+qnW z%X`27tT7n*aesaCjFb$q$AH6+)YrwsZGN^s-31>v1l+7ejo`=?39%rm=Bp7VD-)s# z+xRzKOF@z%mAhx-gf&<7Rw`;M8m21Vd>?>xgY{vHPHd=#FN9aKl8VYjJ1lut+-xS4991W3k3D_7I&NfqARC(>AFsfv0$J5;ESQp#$tS z2FU0bl79S*B0Dk+t3%_8x6Q`t&G)laykX#!oMhQDZK#0N!6?gfhF2ABa~459L0`r^ zTz)-Rm$v=TeC{)+&@?nH-4t7Wr)i;A#K2}yqyHGu=iDPWXh!sG>JlU_T7TD*>!0sb>m{%9Q>>^?mOaSylqGuBJ=S$fPxHZ_ zgS!WJ*baG)%h$0&-pL|%19FKQ!&OBVL^~sKQy%5#s*D^gOUgRV>gvO`89#;kMk;HDh_=i6c{^J_^A0Mg)n5y~ z3ru_GHOF;PHQ}`>ELBj}o@oYWjcqwWjqqiN^hX zzv1ItG)`=x_Y|QgI9=q;7%DqC;O95^UX9j$(YEQ+P&zGI|1v;F0odfO4X`uTl!Wfi zybl<&EvojULp^#`;zL;EkdFtwSAev++q|TK|;qDZb+8nD_Ee@gF@dk@$zr zztZGZ5O|tFHBoyXOzYhFf6*!8m|`rv{9=m-=Z{#_Ez~e+nmyXpfa>{*sb1`^BUGEL zW!_6RiK zXo5A=Ilb=+SSTf8Wy(^CW^HPeYc>V8;k_MV;khDUtC6{=+Ew9UJum(|K49q+` zw^Dtq29s1e-gi7PJeQGr&A&HPEhBBUEYI%NZ&+=&>$u7RRj-zOYpv(|5Gd}qmNDB! z5P2kt*eMsBzaoCalBnUSZvK!rih>CJgRf5s%q%3MHQ}z14@k}r%-q{6NhlF)-_Ejf z784w}F6^+cJV_>@sG&AZ9KBzWGWdQ)-h2|PV9DF$apD?zobOm|tX=HyEzSXggC>_! zh?O+SBxK<4^(W*5cMQ>GL-`_>a-VRcWlgLQxhL#*SqSzu1g)Ce0&Bkd;jsDzPo<{I z-7-g)8QN&#J0nzkCk@ObKFeJqO2@eSXHnI(Iq7b9$V*2}Bfk)EpVJU9Z&@2{Q3l6W zg_b$2=MokNI=)$@!uLSq+b~=OmWL7vslBTz5E_Xqq#__E&&3FDYz4Zj4l6Ut%%0*W zybC*cq_y&7-CkhFdqWH*DKQxEm=Qq)+g0A~Gv}Na0LuX$pQp!#_OD{WAU;jp2e=S* z2<*Rypkz-k{wjHO2T|}m$IPD|R{M{e5I4HnUEUxDPisxLP6Px!tLE>Z=EYJX#CUEi zCoXOT+;If-qD&!5F^9PjdDI^Y0uWi2VNcC+UoXMK!-E|gG-^dOg_)+C55vE`4#9NO z&Lc3xVnQU)tk7ID!C^nzoA%@~H0oz zxOM^UlsrmqZUQb4I}#L33SMasp^!oC3m;Lbdo` zbn5B`--*V_oi`kx=o@KNK7Nu;lo61^S(~;6w&%Y>mp$EAfjO7 z8|%r(Pt%uIJZPekF_(qzB51 z+=Sj@0WrgPG3}eymJ@@RI5bCxF<04C9{#WAMT&f%gcI~{UBo;UxpBQ9#p8AmLx|zp zkHupG8-NnN5wG;FXnWC$NDG?%=}yFx9BT^|3zRpg^R_WMs91BZON5$U!>`B>KZnJ^ z66J!KRJviy@>L-P%sF^}D?wp_RAs1)iuQ5CRCE~Jz4A*jXhYQg9GBuKX9Ta?yV#&A zgurEJ&(vVp`ikY%M}Hu5;_%o1QTC-stagdKGy%wMyfKg95`@d5ijCthA1`p_c#y8C zvuLOt|M1B@Z!jSj+JAX}7v^AV>m~PM;fUoxG(jm{1^3W+Mh?O6W_wy3gt9rkzY$zU zeod}bqUZB^u{`ZA^t>7R_Wn{ii0bA3^?H51^Qk%Ij&$}X0C=OwbnnCF7_7e>@%g;M z3jxg2D9K=Q()Y(p?D`6d<0C0=p05`|Iez!7vLea1GH7CUf~8)fzR0RqSm&n2dx|-& z8gYAXo7}+ts6C*Q!Cb_lvXqcGmNJgqXWQAMn3)ZB%JEF&={4ACu))snj4ZfZ_FR@k zyDmMwZl^5y+WmuFqqAJ5JxMURf4n%^75G~0%gk|ukY_LBz568o+fCnwW__@eUEuS9 zk#Fl7OHw(|sd(b^06qn^Ni+KxzzdHN&w@Mv;etu3e`XRN(PcQhc*+o(^tFpAxlS40 zK~miGjCyXm@^=iPYF*X;`Hb}{asjp=Zv_@5O4&S-^HD(6{(~TA0a7Don z+357Sa@;MlZTPah=(F~1_nIN8y!rQRXu>fyNQ~j0=k03X#$M>T6=Ax~XY%ohS%HQq zHxwhr2QB3GtX9C__&!{qQozyZ2HCV}usl^*T3?nOm4#eYO(zd~a%p}Tz% zTy*~UDxMM+@EEU+3=u}i>9G~6)_f9ovVTzU2rK=Zc+ye)LiCe)*fhMe2WXn%+P}># zzU^>XkL%QViTJ@DnD#)={V=e?#Xjkv`ch)s8sAmK^ft5Zt1dmp7pCknk{K*c6lqu*VIYKlLoW&LaP(A1GthGnWRPW&?^_UP>vwJ`CvkrlBTQ> zbY7H6+1lN76x#I^9}ZlK8o>SpLNpz4eHN)max-s{92U(+4z;WB{qsPI!Z8yz1QQJ?ZHBlXo8TuQNs!*kxLx3b zBa3IPX{a88P)uDEBzlciG+XxuxDdMfyj%HH4~^|=n3a-OI(gskV8AyZs`-Eu310)9 zGgS$3?OdiNOJ&y*QBMB+N`gpyt)3ToQXki``%&1&D|B++<=ZWtB^2Ty*`l|2`Nxr- zt~+m`Z;T3HiV4IU4XlKu)VQ`^W|YrpHXJpoTp&>nZQ=Rom={OxKWI1}bqAEYlMH;n z5%nZkWh(ELegk88`T(2`4dUKuHc8eZCIoGeJ+6@5`}I2ws1s6C=Fi&AcV}%W6H-%0 zU3r}%RX02ZLx{)>ARYUeN?X*r^!c2*%1X@t(tP@e2`Otd-kiM>FaSxG^x*{F%D!|2 zt$SX*HkaV$tS-^BcmL5Z4ma8g2d8&Y|60k|DT!Vc)XAkRfe26)7X~bA+}u-*Kh^f{egig*sIa@jX!4%xJUgS(xNf9@(EWCeV1d8+kuEPH z6EhVzxQh1Bd_TC6migff`=*ixwr2wv|BX_AV)#Y1S9mKg0%YPm^2#e#kBp$kgLl~0ZCE%hQ)IO!&8(p| zLjPa6no3%>^FwKvO#c~eLpD@_3H^fdit>;cX39UJWN8JDEfVTQLU&w8Wf|o*3@-48b;geI?$ z{T)MAE_@$o+@QEVqtL!BwI*~ELtEUr<;{VCwB96BnF=^_n)N^2TAVjVGT;Ibb}oJr zgW-sjSl_RId}sdLqX#Uq@aLsmKR7R+3|^4#=0Cv-7@7xmk{O{b0eI!v9L-b4SLJW6eI#Id;4Zxncw*6ql<(YxoV>VjcT) zp>sTKz&Kuvvg3j_eP+(^_X=KiRM9mX@e*oimodj@ zHyh;DBwc$|$WvV05SNZyhXRzhnhS?2&D3xa5(+iU5-*x9D>VP?j;)rpr2`Kp6bVm- zFu$wbfY;__SP#%e8pSLlY!pg;8!^R(d#9x&M9T`Z9d?O#jATukMd*^KfXurDaitJ$ z+^Fp0G{FO6Z(x%>;3$jQ`H@L@Z9X|;8mlPCBV60+Q46Q*wPv-%#|%PtKCKz*spyX! z5+zP%!VT2q>~*o4oh~?X{OYw30e#N6gS6AqYhf%RItx5}*3aX#gWUuI`QTR)K%j~`+f zWrNq}D^V^rdZ&H4^x9uga1B)c;bIf352<>sWhB}p?a^1!%K~k(4>kBV*u>CZ|H2vd z%chKw3TTs|>VPPy(jRO(k&do5cv>W>d#wh5uB&a&v$3(K!TU@=88ItSTifo~HE=t? zkT+e(7Jp=DV?QqF=_5PfCKrcdZPkWo@7UJ#MXq|g+3VP2Ovm%eW9<6_Ae6nmZZHHQ zhB0ZS989VqD)FV=l0?mzcG*<2b3xU|;v9$+?qY~{h8zHvVI5FbopI|=Ow)%YzD1=6p=zd1MPqWY#4A`0 z8d5imEc*xJ`m;X%UaQu?Hj4=H8>#DRq3a79@Og9M*aVJcxEJqB#dn1(8A) z!-!ZA$!jJOg6S+Ts7q%hT_INa+^JHli9_(9RLTA*UA7a1Ly!LO1T8Z@7f2|YngdC8 zp4Q#bTY()oKE+o#a84r>geENx^HP+}32By2?OuiHqS{Tb%69<^evPsxuYx^TQO(}_ z?mb9%&JdvJg__v`dge~e8@6)jvPN<-X$IyY?@#`Czq01lErE0{sO7X3Mh}7nHMd*_ zLp%i26BgCET;BH`3-`KOKU>@qU3Jg>Op6#|wEjisRPn$!%*)`>S*JoZIPxz>Jaf-P zrbO6nI$A_#@=4vnbo2q^h;u|{ji^3V6?(ej08D83)pmX}^_cr1>wh^nbFWpQ9L|0v z2WVwiQIoYF=J1SfM(~Jqgy%n{^K`0S-(rvyhLR4$N{lM{pr+DR#s1S{af|pDae~lL zvCk1}KA^;Flz;grf4wmi`hz7Y#n4kMfejBD6Bh=5*APtsXNf^TW1=xG8+n!9>uPg? zNhDU)c(+&15l#+k{`ZX0ySK9+vHYoN-*NC$?0HMnDC^S^;-nXLR7|De_%?DR@unkQ zfeBazyZDh7%ezA+5X;Bl6+B3ppj_Ny^Jmzs4C(JU|4QXe>|S&LMx0Xn*H0sR_tPe8 zv5q}g947$?ex`qkWA>ZmKU8dMh;@crAU+}lt7gnheI456`>UNmceKI+77GyL)$*cagfgZNXfVb zi;7(eU!xmiJ3rqAs46Jj|9ig!Bqm>4$GX$WK2KK@4o5+A$*B~bPtEq7Rokc zrIGAIPwLLQ-_vD;n7;`W!24z6Hf%4KO0r zbgz6MkgJ5rr140m#OaIvJ?%F&fc&ciM2LlKcpU0#+8U?C>DMRaLW*?IvM## z2VEgDj-d0((^0e{Bi0B!J>ce!XK3IMY`6?AdkfT|#j*>p#s5V5rp~=Y#=R+9THxs2 z4YPshPrSMUCCs;3ixMb|0jX zw_j}j4_j{?R@blW5999cQi{7fw75fYw~f0yEZnU)1quZUw79z$mmYC} zbKmFpN1nZtz1L)tOy)D0HA!@p&2c*xP0@l)z7HV+DtrinI*cLg;9D^v<(Q()YO(WB zODSBTP|cO{zWsvu2NT$7C-{t&^4R4M)WNtb-~@G&Sqt?Wc)UKyfrvyMy*8yiS9PGb zi_qP4gM42!)<&|2;Z<58pGp}YsG(-)I*FP{w57{1O6|FlpyV~KrgKO?i7xx#2FXg2 z00_wE`9enc;HPK?c|*bvLzwPW$t&%1rIv?xcb&o#EVo01l-hHc&P3|;w%{Avx$#20 z3wp@ebu#RBDnFKp4PL=!YifmpQ)+{gdZFs!OAm(+z$(4x!X-ZzE6&+@@Hm zf#FXXHj!PgnxvS;L{_q;+V(@OR27fdf6?$n}J4pnu6!W#iVPYv;XHqW80_E znh%IDu^l9ETC9b(<}qK`tMu@Kewed2F$hx5jsf)J%=;HOPxA7gbm8vS56SE_E zjJ#v3X99PaAp5)Q&w$^O(*U^Yi>|Ehrq^UNPbB<&wba!#^RZqdmm)^JrKMwo%!^lB z6pQFO^Pt8KxT`upXI#<|mvIm6936qU(u}^rlwSOGn*#2jiwaH^IYRz2C)Jdq8r^*k z=t2sGrD8!of>`;AJ_3SRt&Tk^k`!$ykkh}6ALmb>1c2IOtK1oPIh@kCe9n>oGZ9B? zM4z@BW-Qa_cydHitv?g)mbo{Mvw3rSUzzREe64StUK}$racXk`$>fmN>ywvLM zZLg9tj)Pq`zrIe zEz$e-E=Z%W@0Ds{C>fkgEp9XN}o-L{%R z?e;}o%7ygT(aFMZz(SCq53eje-4Xr{dipdlWa>T79&+ zER;Ol>Rv#%(_DO+`{qn~8eZk%XhFt)7qix-2q@yBzc6_i0JPTU)xIB0N_590ZV#qW zB&u!%x=>Jx=0J20242d`4<(dtD;Fp;M{RiJlsGi;_QefCCp1BnH-ARK|2vcaHIeb4 zCT$LTl{?(fl~5GkX&$&I6D)ssS$01EYeC@~mTls$cB!Rg=}XRir>?Npu9z$+OOQ4?+)Y@srZ>9GwLsADT1|J=b+ZYftR?*rW7%_R;D}JYB`z*T(><4`=u$O;zIZ)vvs{sZz^NNkv6l;(fAxu2coq1O zcV>evhEt|!`gGL(u*WaNE*I$@6uZqoZ*+#P0r7hy7Ckor$N@?h`zieQRs}SW#T;*N zp}9i-IKo$W%bnM+-J~${#d^*!DMo(n2wopQKu6u)tMpnJ46MhuY%yGC@9GauH{+BF zXdiXd9pg_e?l#~P75=!7sX*2c(tnqja<|Z52I&=tNVa{RrZ3{UgMZ5;?yGN7S)MNF4@!cJm>ub`eW|RnY0pOI&@bju~x{X*rUL+4r#5 zx#yG4LHNX6@$yMkS|}l8U}D@By&~j7m>+6a>)}Sd40vP@K$Sb9Vag#~z8`=PD$KNs zxUA@ft}F_mB8nUwxe+DO?jNZcgYJ(64ti*(V9!nNA0J^z)BJJC22t+ie7VW1BUtP2 z*mN#6O~)_{?vvKovqS5IW<<;!`;cs5#Cy_J2MawA9xK)C*vhDF{OS!MZg%U}@z)NH zD6hGg0S@9+`b7Fz709C4k;RURP&)Ijs+or@W=cjv7(=%GyTW6mY4fR-6Rqz!0je~H z40{Swdj(^mW`s{Xk81QWHIc0^51MO#K3y>sPb;T)jBU9W=s9Xg<-ZWM$}mm@RVT(z zhOSE}4F9Z?PV5LcVv(e{ZBVSfiOEt8F`J{TI55j4w~>qcl%EUYEEi z`*^o9>36odo(xti_KZlMOAZD$Jkb-CRNv{Ics!j`hMPE>7*J!24zo2NiuADY(2H!t z0=9F6(prB=7f7r~9&}xcM=PN8ZAp9{`A7NAahm1=8owv7q2aSdM$GSq*nyH)sT4pl z>$kph>QTd|-e-#%K8cN+Ok7^da(`q@4O1Zx=-zKVMa0DZqKUMm`cox+i6HFB<~i_G zG(%PmU*a7Q({%X>NcrlB?H8KwsHWfF0o>KbNCyUY^PE+;B6y>JnUGHK+|oV~wGr!- zJ>NtWE~O^_Y>>&{k!8*0@k09P?8_d`$fd}Sm4&S_kE1w*eye&~M*_-(FN;qQ44a_X zbh+o*AO2l^ZU-JZ#O}Wq-QH%=S|qva)p}rQQ=6q!8-E6S+$U{DGXC`a>GX#o!2|f@ zg@}rbt_ho?MG>U_*n9|e+CU=|QF1jgNTZ80L&MS5NkFP)Y%ruww zo&}jiKNR40G(e&p739B=1}97$C`JPXys4=&^CX8=xA!7SSx>i9hI<_sYMwRdbrDB5 zXm{u;b|=PYkS}ka^!Nl}$iK~J;iN|!fM`|D8y|H@dHXcH!dGci(Kj7OHu=ow2+WU4 z?gXF9U4dAaM#*Vm2lBjSV;#0+#ESx+Dh~t^v1VR+2gbW7ee3lijUg&c(kP(jWN_;P zY(fvUquTt*b)zg+Wio9eJiU+6{qoi$WVFMTj`*2~jkrz3Iu(w8@@7$fXIcdd(pvl^ zdFj63WtB8D2vc|sa}c)C*`Rn$pg2mpapV~Kn)qyGAjUyNuATQlSgf@XfhD!|w2-X9 zcmlLxKaQTQaQkrNvDblF@B;X3+tqy6IzE4faKA-kNYo6Nw{yt?*X5JE`FK!v2ln-m z;Mm=9$B<%@lq`Ib*>f6mtIS=SZM2R@lwG_%BfCSNaGnsUVlCM!aPtE{=;oKa$$@P= zoG>&5;=dH~Aasg&+iJLPRXj;-TUWnuztBVv@Sqd@kXwK|BwO_ZNSNBQ2M@)beRRUg z*&66>FbAn+)l0U~us$a>371m#hv`zZG<+WV464+YxEmytwA%oqElEKOys2{?+-up`pp4>A>}#bn9qWd-;XYTf((TfPdngrm||#CpMRC0AyGIILr$ zSsJe8kDWiPQ@D1{BB;Oe@0-vOT(fM!TYTNPORl{&HCg-OGdq2FOJ|VmP{v=Wom(C&+q#AisS|lZalXN-{WP>Dz~Y@gJ9xxR?s$LW-gRL+k)}m@?l$lSuRt@APWh7@ zJKd3wcOT#YyG{RZki%H~aua69o!T`rQ+gi&g-i~`7c)k!-TNUBhJV!Rk1rwo`R+>) z4t4Z9YVOhj@nIcfVekPTvnASnXN)x^NkkPSKmf$^Z+hc#Z`(ia_bv}U8>5E@({5~0 zK;Oxccv(*>8I?b90qGl8_tldVR&(nYZ}6ailX~Qy;t=nbRSDi?s=8ysExzqK|)c0(#qX zMCX*7tW!{H?H&YioSA1kb1QJi**ETcJ1cYFJRa@|QK8N<``~nf6rqdCs*Ed)Sj6~f zaC~YLJM))0Pq(GW3TJ=S!b01l6|O4pp{0wRW~6$x?<~rmW;V$6mogDCTZ*;nv@|%T zqJ;^UKI87hQ&IptmlU`Ry186iLp6wg3~s}mZtBB$+I7R6dd0GV9N6nV+zlv` zzdhaoEc+dl22Q>`C*j2FJgZFSq5Y2U=iqp7Jua4pzeEA%g9zrkTTzrWH7J{B0w84} z#|M33NedQ*I?gR5580TFQG}>5*7>lxt|H$vyCIgopr9FI??eI8-%9t3GT5z1-u)F~ zU#q^_>U)1~WVO_CP#&+K*z2*|CK%07pL{H=PP8~?*d}b{xwP`HU%{lK)p{(b zlGnZNGqnOz4KN6}*ZUoJZ?Q6PwQmhQ?2Xkx>Dh!B{RP3Wauod^?fyL<`T1h!fB3WJD)%DY^DT)I_HTl@>+?R=E-P z?o=#nm=LI2szW>1dQ`}L|11o)FZGpl2Py7e~p(KD}vhL!vReHirgTUVxIl38& zns014$*i(}>Y9`}Q)Actx{8}0tpCF&A8AR;WLFr42&O1TsoXTmT|qFuq{T*ATWlPh zib7ofxfEkqzb?RBjAbk{am1A-jci8VAvwx%VSYk&xx$&U%jg?Jz=)64?MW`9 z|5b7zwEibTl~1UAc-1`rM!|VZ7=y^u*{4l$`kpO}w{hvE=^5_|QmkS7gTPckDzK1% zO*Q}xo4O}6IRx1h5kUfxCq_(~=r2?RX{}4x1xn#&BZ{CJh0S@V$F?t(^L2v=COJ@D z2zge+Us%OJtqGp{mu$Elj1^h_H`VYQ_4vrr`XXndW=Nsk z8N^Xygf(RtAM%`gm~f!Mj2B7806?#v_33xJP;}XzIN31qb&C@p9`O$IL9$0;x`}2_ zcj611iO7`%b~fWECEEce7m@&kfmnt_x3kL(^!{HmhBMmmj~G`{yg8g>Y9AUQnk`6Z z>w=F1p|;O1q{mBJ#Klk|!X_(VJ7779AUMf~=h5!bcy+(8^96nlJ!|O!$nGm_mbbDh zr+?Q%@oyxv1ZD5vvn&14Rr*!?K}mZVa-XOu?4!4Cu#VO|^u9)%dtNTaAR=&$udv&~m-P^FCt*N>B6I z#PGxsYoy*}LxPcRN$|r80F_J>E6Ds%#&`^Q`?LQr`+3J4>Bv=v9HdQtDV8PmO;|60 z;(3~>&Jr@s2_vCjtiZhp<@9g0r-4E6<;o);kC1%V+kaLIxId72(LPT@pM{19Z04{v zK(7jaWthC5cA0AFA@i!Vd2h*CY$5_pu~FcW!HW{>vIu^Q66XzI>z>xD7FM6Ii{k#) z#ds~dPEnbMymF6w62Kiq4$WF+$hSLlu8cffX9r!nj%4Lp_eIpSK$iq@7ShhwvKh?G zK~HgqJ<*B$q6>(r#b2O9SM;1mgy;HI4dXWeYhU}IHVm?4D> zj(6Y3o7Y6u&q)QsvB3Pd{&a>vPiNQ2{!PvJ(|QQW96)pAouSWP!MM)2S+}QVOpyz{ zU}Mso_JvB>Me|C#k05J(DdS33nTP)E9!D>B;1LtL3f>iB#c5t~I9-awO401T8<5#% zwOFbVX5drr@a`DtYu4?d>@L*!s(MBTVvRidz!F|JVg|rNR`)K>!IPD?yb7D4cw?8J zsI%;5qyZbH$7+rVTB%VMF;$+gqc)U^(2GQ>fuKF%vmiP=4!1Agu%}BsMv%JURQ43A zH+7+DHnDjABSrkNU&!<$TmakGprk3JFP43Y)xIRA<glCt~5l_D_O%1 zONCf%Jc$7DiUnCzY#V__x;QPQj7h9X{j`2Y^~xUYPbvM3LNJV$);2~oWAa;^&W1#} zQFFmJ3I;3+_9Nf|HA7_Q8o|895k=;Gn?}$k1MN>#|7!}u+X`{0@v7WmyeO{f}t}&oI zrQFX~!H$qy(E%i|&K?wPLiGIQM@NZ$e{fILrqdX=q6|Z4{8iNv)A%vsbL$hO=#D3w zHGsIMRMT8C-CX*6EZ=O)RG~(m>9J!p$er|X_mYFpOh2y%nuf!l@ChGjDjIg4)+s}X zcVSsEcvq}~7NA|_tZL9(F~qe|?tA8IHMbGMgd;!AG|`5~hAFXLgf|{4#^aWRIua#O z;eJtp@M7ebSpM=^ob!jXrb0sSD>e(W! zo5O%hXT;^l!J5jTLMl=*%Nu}>0+`#wJAryisOP6wmn7+qAy0qyGc+aSPFp>0)9)mp zC1|LjS-x!@2Ep(E!!*ZUle|i=Mxc>9+gG=h1L|HGO+jSQ42=|My;{*G(fr=L|5O}VM?ReWU<$X|4X7_Ar)8FOGgHqo_*AZw4V~sf&ZGYNW_(JGe zIgV*D^;1y=f8-eaQ;GC?7ZU!Ko^7Z)%-%FNUCG+nUPAqN$?Q*eZnSaMh)r=tKPhz zw;JfjydIk9e+esiPg@}Vm~n8W{&m(dAAKr!N?u`B`wmIva-$)lG>rtpvvLW2i55-O ziWHiFq&Rn`EctN53c1sSxBR}mt zUmA&i?OhshRevNIcib!C_ES24xZ?K{=>_(b&+n>VO^Cbdf`5PQNIp?`84tKWn=^WS z*(o-P7Wgw^1nWL3YXJj+fNJAbF%C6IsE%3~`(SU9IM z?FL`ViWd9M+1Yq~k&VDWBuEbykt)O99yy4m6f-o#N-XX@X@kw=r@dL$ZsR}P4sNCp z;bqA4gj9*r$?=y~Qr6YPq2B%SlX|G2{a|V z_LqiS{CelFjoe5nGT-i~Mi+3}>MHFEJd9ZL5g0)neldx`x$I>My*&e`{URJfT3UCc zcWV?(b!G)GymVF9l${T_*=S``-sq3V=jLc@XkWeHiIV7G-x@SMV!dXOoFxE_3C1r$ z%8mIJ?EUEb2h;>I!?Qtcz3J(B-Bgzlo<9ir5j9tp)KCqI_RF=A@uqKwSQgWlr|x0J zB0NqRf5p53=bdXIo&1^ul9}66LdN4-IRB&=(Q&6YVeiL&3OXCf{{PKnIyAhP|H=~_!%a(u&T>7dX~f| zhd^L9R3Ux*`Uu^-T9!I@No+gE^<8sQL+3D-Yi7Tl1;X*22$SqW><`t@LXPz7x@#g| z4~8`6CswxNV{g5Ixn-cz+?#Zd@LK|b6t9)8aqw69_e(UJWb z;cZFZOn1KZnjQq*OzyqJl0ZlCR;MjUV#Z`DoOXN}(%_oBG84Wk8t^#tsSmHygtv#9 z7k-xbfiqXEcunYsSp|;T4BG&npsV^NWchxu=C4n{WlD^n*MYB&m^cgkT~MU-No^vu z@6C550K?_=TcmZ(fFn2fWTsvHXa67x(Sp2V>1==fuy~>=E|vq6rB+FE5h{tCQe&g{ zlfUU0o-jdc%}wv`?V1av70>WeM5!`_icp;W*;deyr^EQEyYunG(ThgZJ(6 zSpGxS6%gg)TJc^g&S1fJuL$=446duhRg{lo#d_K@gN4|?>0r28F7^XVj3I%@7YD6{ zZwE?QBE4>58Lk(1uvjm#!Q(IM^KQlVxh5@Qf0~hQC5bpF=?|CD(G)#rua!PJ%9>tb zDJuS$OVF7vK`Vmm3}z}XtO6dNI-ie}-xjoPfbtjPo&@)qw(>uvEjFu~zioTkznRv3 z$J9uq7oOvGKRaw#{h>;CbSfyUdt$Y{cx~mOdDTwpi9c^h_TGwlN1jb|5K#eb84^oU z|6PAs#=3k^EhkpLK4(U~y(XX5TCfgiWI86$ME69@@CnyR>HOZ1znUZ+LkyM}1oO2C z2M9GZtocTgu5!B_mGn!qC{H<@2ayH31!-hIQPaZ5K9lPxqyrf;cef=K9xgdxt-P)0 z#2QxeyQN_xXms1m zuS;hOrkraCK%`zqVC#Cnl0xvyq9yIb3!Yn&j6mJ+TTKX7_8 z`*T%9KtZKFF*_trf7KdVG66m!?`M8?)p7MsW`}5p#dLmF0zwLBuk;}7XV0L|`PP+L zj~+v0bIQtlPCWn};qacjzq^4t(>;B)hoj)hs$8qnb%A} zf$07*wXE7HlyDdbEHT{nP)wMzAa6woJ_Ky~dZNg{ZuFlY(VdX2T7$K9DQcN1KxJSS zCB?l>CnrTpJms*|W*+z!-!~!DA&wkym5*MxC^9{IVgmSb`fRW5w0I?Q<{m4cWbLw} z^9=Pemh}!<7j~xyD;LUE-?O2x%v9oz#?YRnzG8xo-q4;0>eNXM8XTCB&|qV-JOgb% z(tAPze7()j3Uoqze*N}5nJQk(glvX1IAqJ}@T}NKQ08JEs}$%Ec6<3Sv5i3rG&t|W z73gHllz`Y2&Y3f&Z+Wbp1)*XYkDi$-GKda}bjAwPChj;w^cc%TUl0w^iMpm!s^Y)) z@C90v-t$|fC2B%rI)xs**-Stw84LYwGh7IZ?_72@Ty$u#%4ZdfVK~?PU)B97GITOf zpH&j8vX!QX6)KZMgFECK%6mHQLZNIuXDWPS0mQy?Y5dhyD@l+$=3Cpgm`j^1%lZ4D zW)lRQl?hfg(j-6fGG594j!HZg_H(8S=Zd%XQh*`i)nNEKrIP7kP)fh{ol!P;nyvo;$LS71{^M{Y z@Ng8vsVz-FGOmNr0bwT}6&Z**+T750g<%5I4amjvw>uG#EK=L+b;1ZzV4f^WQl$wi zaJxYYf@e}F0gQO(qWA;{mPg64{t^~D+J6Kvc`#O6Yh0m|8SbwDt{e0Br>t3`xDoxT z|4Cn|ci3ROe+BBctwNLn4u-W~>qn9*a{utL$k!;PUIo>3^leJdO2;a1%El_c>7Q7`#}9|) zxT&I!FKI`~+3bsoqcthr(AIDe*!XuOybdZhjBbs^gW4094hpGHShoD|10`?sN}p_EZh3`{w81r zpXjEuN@!qb3aWq zzj(@T_qo6;=6+(Ng~?$wHlhHd&;Bxe2K%LHb3wx$zK;i~PgWX)?4@xFN(Ta;hxT>P z`J`LxREDrmCtrH6F&KV=zO34}h>bSiKS4zWNPXN3m^k^2=rez9_%Rb0Lj1UgG>CQFrukqSPC4rAN7`f9-Dq{L?q&O<&i> ziAA#4kSO5p5QPr3Y-^_wGI zC-1^GUhG1_OnWxPT$4?2G~THdec* zhh5_@BDH-fFZi2|hp?&Rxr@BG_0rehP0%nEi0ft^xa*D0cDllu>OnD_wSPgKv50Ga zSYGi4m=Bp6AG7Z&TU%yao0VmiP8ovs(5PE%XKajAKkkaNf}?5n++10ZNd$Kac|gtj z?jHsK-PgQM=OtT1rxud2JOPpRI7OvD;foiUk?ocAKcs*9xdQI zi-gJvih76~JlcCYy`6Z8o;d+5^)szOJwfP1YS3Y>#$V9R1P|Hx>YyXwim};NW6e-nS%1e9v7y9fOIh!+@6yF>PsYNtT zxo0XD0V&p*l^fP98A^Yp{YC*h7!^Xr+}+SZbW5d?2>Kmr1$=0CFFI0YCc%h+Bu%T% zC-7}_DDv+*t7lRcYGeQXzlVQw|C-bgE}u#Btiw|pzCP0}x1f-0FO zmQ_HeCr95+Er6fUo0oS|+0el`!L@<-sMAXz@o{0?BfqZx!ehjUzgA}llXc&U_ab+J zi|Qu8qSzeu9AcP})?lnSpsVOQF6jLFqu$F_sv3>{i&tL)vNhiT$N?vYR18I`=il4`9Ww+z zK8DLF*(;>HlDt_>Lz|SOJx~2Z({}wHCnwYc?7mCz0I4G~la)cHyZx%t=Hr(GZhK$U z277M7)BU4Q{aCwY+u4%qIaJTe!p-n%ToHT2L5e%++3x)H$6}#6>apS9@IO#;STm|b z60))C>Gim^!{EhBI_=!(Vuo*WGb@!xtP|MalaCNKDM@eX{$wC!vdKJ1RXV-^19#Ju1tnJ7w66+@!nr+~qVLMr z#(_sg18un*mt=S?kMCh@JxkbrD{BW`PW$YN6{qKdEN;4GibzuWr!cEMRO6UyMm_Bi zrRc(BwL5HSAVPyBo)HXVPZ%^#WelfUWu;gqAd|B{J1C|*yW7_9DDQLC9Hf3(1GOp1 z@pzZXE(#RQXTs`=?970Jc;r=7{t!6O$YR8u&w!+1td^p$R(25D#?b(&30orL*AJY* zUxHhCc~s$U4J+$hB?4+H`RHqGj$4+AOJ2r#&joD&j0OGT+7xy9yO+>9c8M~GVm@&r7e@2jf(gHD2 zel&y;7)l{R(vZBpwCK#6IHs$_sdhCH#NQ4?d811m{NvkDb`~5iZX!LI9#Q(MAVm63 zu=HUTL(Sb}7&+S=ikn_qJsr0EqhoB4eSZIHR9p7=WZ)e&I$cx?jenkzxy6k|GkZgc59?g9Em3WH|Xf-h#SMJ^)l$)BA4>$sJjuOo5^kb zID9Q?n>^{<+!m&1mbd%y8w+8mW8>CLSX){Sm(s$owA~GNN@vGLk6Ja~laud_W>lYo zY^{20KC^f7vwdzCMDFXj80Y}%4sO%wg=5RBe{q#HAz`HDqmlFvmmrjvhhmO)H1xIZ zJ|px*s-6{Yu!X{|>ox`;-p07wPHNJ^F+dL?ft@=lznsJ*QD{^8l>f1}BRAd$fz!X0 z4p#4h;PQ}WqS=urdGAMiL+&i$iY9>>?+5P}#x+sLH;;8-_f(suCG%v7jDP0XU@u`6 z(nCl@ft2vr`qK}74h=dF?Gz>OPE6r<2x%O_7>OFLW^ldgT@1o0N^k||J5ajd&ur7D zna^PD=OTSd=eZs4L3@}&Af@0eefr-6LD~%5t)wXBFD5lFd={P43maiXp2%F82C}`@ zw|EdMyct^+ti&a_#dRXw6Ux&pNV%J=MQ^@FoP+;zOnbS`U6d8;?ZK z_`16m+M~*kEmmCL)|V5+?Xfz|SFfEd97$|!cR-3N#J;!v@2Vpd1tI-Fe8DgbdS2Vh zA=@Q*Hg1!{c;{lK8nRb(++W5DqHaIY=eYC@YodpD3gC+De&)wlK)-0`&Ev%z^Qg? zNtRq?oNh};`G?8alM4f52f8_C|Jrv$FuH`-hTv7wm1E|teZ zRv?mQI5YIxLrW<+OjpbZLCc4k1j~oj!E}6xR3&Qm^1t58X#O^KxWTG;$7yQ7&-s!x zbLG&1UkW5(taZIn0ulxn^yS{&1C*<5^?^Jdyb+F=Us%aTwXL}`QA zzX-*E#{>sQx;FX0rz|5u?n4qJ_=9D#JM~yf;ZP28cc8@_H7#RQ0fpry8)q5&)jB{R zdt&YWV8p~S1|3}Yn3%r3+n}MNl|srqto4rBF9O~+4SZv|ZR`d=mEKYqmpW#kB4V4= zIp)+zFPkIYD7IP*u@w>b8fWWnRnNaSiSxb4T-3KRB}`38i$j zU@FBV$tJ1w*Ag`yRw~J;!5%Iek&re0*@7ya1p_Ynx5JlK&EpZx2+`^ybh|Yds0m>h z$x?Ax2EL#n2ObHS&F?8KQG0qSFG=z?rVURwxDmUJU)m&EL*`i8(?&!uSuQW)owXsl zGq#hV_lQ_G>)$bZkS}89GDf6WKF9BQprLU%!mopvrNb)K)t;GKf0I<$|C$~mTq~`KTEL7a|#A>|IW_#|DSQ zlwtm>3mPw@3onu2Xgw-s(qx_2hv2X_^a2lyNt&JlbITZn@|(#DS_qO_1lrefs%v=5$JiV8?dnbkjhqY&|{g0ZTzV&JTYE5Q2-;5)H-; z_Q`P~BB!XnCd4Ay;1cQDruPLq*G=u0m}CN1tO-VQq`Jo9!P0yY%YMpbfON{)WSGKE zafybL)?CIMh1J{A>z48a4zbkE@2%sQWCXTAMsLn$br7| z_m{?8n)cA`Dw6c44}k!!Reisl-zoG*lNt9E@D!eH7-NE&_Ydq|hKE^ZO2#~*8706L zndrk%3S20Y$C6TsSWH_E3>ifiU?K_X-A2qI;5~^77{d4B<#KAf(nwNYMO~`%v|qnR zDt#aFO`lZg*Hho3U_Z|3&2Hek1ah94vWC^J#-z$OBuGAp8c0C-iiyQXMsyFQi|+f2 zKy>Qw`?Y2CAC0C7>;<<6z35&7F6I4;ZSPM!Al-flL8#@Y*UbQn7?aTyHdbM*KVhCw z1UX7lY4wMvY5iF9dWN~bi)t(!(v1{d8I4=kvYta$NoNp4bB3|Q7Fl}`T%{5|J1Roj zy(Zoy9G^_p`xIe+huT%gEuDL7VXIH-d?hbo&%6ECD>D)+-aP<({Q3Whgj@N0$u_@B z$6e+A6;yJvUveNt*AXe}EWR&3G*eYL`j;dhR%-A`miK#4F@A}dOcv@tN(-&ML%&wM zazw{Q#=?ila*SQY0-^-ZtiGH(`l{Ezi+?M3ij1itjm$in1ii)P8s+MLQAOnG+uNkg z1!{+O_%nqFIrZQtn(4jvcCVikl$8Ph$4c7A00sxSt85n^p8iGp3@ld)q$`ED*NeMi za?uRyfY+xtq4vCj`qEogZ@;w&<73xYYX(=D{oAW#Ry9OqP81PjJ|6A5p7YLEG&{6T z=rjwEkn{ZkJ%LIg1`ZN@bdrHU5rSG&qeD1vA0p5|N`9sOjv3Rxw1xdXPz%^S5Zq&`#!VbVIvb z2`E8Y@Ax`_>oH13H>oa{SqPaLwTd3+I8$oWO{Vyxad zQUzBo((zkvOu5oCA1=xqmO9#MWTc?X**?SLcwHzDd-EgbA53jJlf&fV-ufUmAi=gR z?kD4F4g~M2l31liifi$y!6}|Zb2OY!N31>XO8uOJRYBi4XFdUgB6e@eNaK$1D&q z2lC00sTL2ywvB8?sR&J+g0AO7fi}5&0m^2OGvz?fe|~M7ruy`SzFu*#G_(>s>8OH0 zSIys~3>B|mPX4iX{ne$7cebd4v0s3uZB4s55;U0*hIw)=7SH?^U5$o##;eJ)t$hzN zkq~T81dVi>mWlVY#-;L5O>k6M*0s!Bzmv7AX2PV$1=)E)!GSS+mNv8smpOvymGcSPR$|~i;xNh{z~XC zwuLhEf(J*aX)*kGZ`u@-O04_yk6EM~A1gn1=&Cr_=}%Nc#lvEqTnEPs=PkU$z9u>- zg#~tq^o!zHQ5(B^oNBHAVQhmZ_2AQO;Q1@vh~$6xI)?N~A;n%LH*Zb^ZT!2vx9BR%QR6w#C(mPf1JYQ0{6!gMz?)kq0{JBr=ySOo*%z`(I7~;dPr7 z($6CAhNs4pvj4@0zs+AFIU5}R;^UN#@qhd0-+Yjohy6eJDBi;uPx}`ij{n04J248u z+H|~`bp>cjTh_?FN^G?HegG=U!{_6`?AkGqi0G4gT_4N=!VZqdbz({c4}#k<Dq1%E)lA%fHPfn7)^G*UX~s1q5YG6EBnJ3*y|7xSo-&URy}19y z%fHGHdQr_eXl}(};gEa3V}m`RU@GHInZp&hW}qo)9JBvwm7!BP1#yx{KE;2x2zCys zhVp<4i9>hsY~}j~k2ZmW2P#;CfHvOcB93+nL5j9k3ha0BlA?H0b<@cFw-D_V#Mr9_ ziHQFthn$QQdA(D(JXL0pEj-spM5zlxuDL1vR|9_&dfxwUV zs!afv$L;ycN`j-r^8k?jQE+H=w1$K!V6PJ9%}8<jS#zi?80q!Ll#$nmsb@o#dCR1}7Jz4}`O+5%}%ek4!G6UH<-KIgt?@@or|--Xm$o-EbuTQ^4t>8)+e&)DD3%jr*o?`2We&xXrA zz&Z8DH4VwctUKk?_7-miP%84X`IomXa=39(Z`xSBx5xg(jAZsNjNWFV@s2z+8vJf| zsw&?z6iMIV8!+%S7AeT-_Bk~p(Hl82+N9Mj@YkJl?3}Q?l02%_U`@`xF0EZT@Hfo% zc1|MJSKw-_GvkzOCg?F3ydD z(YtAQEhiWaYqvm^c}JCbH`N`s9%F+&K`Kk*35K5@yt!(JaIj+~!V*tH-;T1KE&P(^ zM?GGT)w^;s3Et(7Nk_(m2LC^wBl*#&zfXLY)uTi7U>KTOSU`zrg*RL0_vFiwJR1>f zCuy-CgV5`aGdMt1@*DqC*F$QFgzDc8>+=c#@R0U8wX( z@Oz%q@FG+H(*`lwRsw72ciF7%H!5O_oEIZCPsP-=1Ii|dj2F`#*tRRpu*W8pMO&w< z7*turVHy7Lb2Y>am6U}oXHh4MhvI6cCV^5YJ2iRxo>m6Ow+z1B-TDE<*7Mjm7pq~O z5tM;S07y9i9r7AtZYMA)dc#SL;lh|1%LuOBqyTN?hqW-#fz`4w4A(NDmp>{bO0gRE z97dPVFYR0H@UG`K zHjmM`L05!FTP+!5+7pkO>L102r1E0gXVJY|{Ez(Q+qd4opfu$P3y|N>TFG}BrFC`= z1eFB>6bY^U!xjMcZN<0;mzratv(G}tl7|n|#5mRvMqpcH- zM;JOK>~F%#S*Fh>_MA)5ZidD{l900Rfpfl0$@R7}8_yc*p($`NiBrbAga1qg2^s7B z$i%7b-5d?@tQJC`KiRzF4AdJ}_A!uo7>4E>S}28g%FmPr-waK*Gwul97iUm=gshw7 z_+=&{Agk`}H=HZlcT>aOgvd4&{LkqdOcqmudOdig{LwfBs{2%|?OxQ|`;UW1B#Q5J zXu;W#zR}5{!4VZQZ^BV3))2im&|hijr((t4VOnSSA88mIVF}>_oqMxqPi>=<) z^sj#x_G_azdsrHF^HEMK4)G}6z3Xa5@4-7QBS|bzFns#F+D+k$LtlE|u~IX#_YGkB z@(8m=&jsUMG#C5befjcXsMnF*5HYQH?`DT`R&GB1LqQ&_+qKVEvO;{OMQ$NyFP%3~ zg9l@F`iz)`b-qX10UKv+aB4N&*H98vQP#79ZmYIl|3VV|A9t?=iy7ieB$YMU)T=O- z!W^Vv1s|a?soHL1&5vs;<(1`}x(aNGTeQ+w>pV#s=bZ4!jM!%Sokb&BGnZ|ND4nuM z)SC%oay0DIrqi%BB9PI~3@G42dLsMq!s19Av4t7I6dH>UFe7JA*zq3PP(YbiP&(}r zlQ{Md``U$%J#3wJ?`)iYQN2!p%3 z!{DxsySoqW?(Wd&AcG8p^x*F9?(Xg`gS$J&?!SAxcX4qY(e=9P<;%*>ijvOE`qF2S zVs2h}i@(h`B01F;*XQsr+_ilxOvfi>cssp{bDVj5P1c-Gk*(Wc?vtcHOM?RObfAIR z%6jrrz=>I5^}6H=2#1^^Zuy1~4`?jX6zG!qa44s@um)g&PIm>y7XPmzwWX;L_@O|o z0ORjIermhV>}Pe>X_gPx=Q&f2^$n#Wj;KSMGwC1ysJ!pwM61rw6vtb=pjj*h1b*{r zI$ydnOIvQd-pMzGI~KdKN<`**l>m>1^C$`*yEt3zIAK@qVjdup0Gu~|05ox7^h|p{ z9F!Vg>pji%=+<%MoC(`wk=7JS zS)4yjzTXw;21E~PU%iRxA#vp9zf|7z6EE1>+zA2h(T$LuUIFgS^^p7F^^ohKjgZK` zj=nkBdUQ&8QhPR~Ts~;FB_ozcL}b9%o>E?dLZHbyZ&Cg>s!1Pf?zj^dxZ=2~mcAP= z;cQ7BCFb{<`xr7o@sU=NRjXP)z zBwPvyf#(72(GN7litOEPYZczx!W}M7o4wsZfq4LDpytv?GZxbwha=C{qR@B+pW=mp zp9B}c&2f%c@(e~_6VPbq;gt3Jshf&@*?mhOzxml%#ekGm;BGAd?f1# zF8Z;AK=FD=0_*pm(xC@<3Cns{>%vr^^8Gf>)^KhQVKMUr0w##h!?5E9TV?z@0kOo~Hlv2*M;C}uxWyYOEE+^$kaSFm-9}+NUOGlPoS5V!?txM%JuO&XN z9;_{t|Jt)kjM`O8ryyC-*0~S$j1nlN$S2kT1IyOS>k4yoGMUw=+MYHDeMMH~jt>%_ zcN;BV`7BsOnbzt)o^vc!J<~fp%ox(Nvo53f_x~NpcC0iCrzp9mzt(q`C0r8& z(}Y|;nw4C=o7G}@;;`uz!`jJtd%yoApPx+MI_Z?~`y;hhg21U*Nx#!#y#YK9@c0$XvCey!L{jh`6 z_uM;6Z7VGGSLXcc25g+2y5+A7k-~gORh2!e*lC z^{)CIi z_0-xWBU@~ZXp zQs}}fXzH%5-c|b1d*q|VeE1T`@@kOlM|OPvZMs$Vg}DN~UPwRxHu4y}AqcA{xi$`l zZJb`|XH?%D70eSymtC!WeALD(^PwxC_b}q5-$&=VmW`_~;2hj^zGW@IQKOLl@|X9J zhm#{lhc9RXz-jYQ8AJ-$O7?&`k0mBBSh-<8bD_&%#+v9ZD;hnuGdrUILrk2;_J>Bsv8 z!g092MnD~rGq2@p5$y`h{X3`mjDL3aWvAS`dxxO7dm92O;T+L;BmtvCA5>`vrx1xV zU^fB;WTevJjZmL;etT2l=%K#fdV*mz>?FbxkJb;J2O9C_9iMC$` zyTKy-_=8KKPl-luNY6$xf(42+km(Qmz8J;^naD$KN2}75i-ZNFJsSVyn<7b;z>E#4 zqEU&A7+wkw*o57}2v}^|- zB}HgHUEz!Z|ASzi*(Bm$ynG~QHrH6#uHrY}JzM`LHz9ok4#mn%l%hAiDK4X5#@qp*`iQpl@0X9E+j0^PrgB0PVQW-8EOtsn-S7qca`-j=e$u8OIqj1;EIpQDpZ#c5hJG?f%yNX5Fl z9cVYt3|mUu)2-()^>VaS0t4jD^Iogx4}k^Dw^mV0zp)O6++AHyBG6g36b^nCXP6+V zVoYR7H7Ar3y1+$|BCQZutB$}j-b7qo2#FBqV&$g>WI%}09^%BT+BigU^i$)ys$|1h zRm8X^F#wId#)9o-QV-bRhPUz5-Fy@ZM+U1g|3yl9ji=y*yZyEi(r2(Rh}Jp!4F~Mu z&X0mOSBXJ?$hB{UEwrmho|MT=R7uyEg<@YL<}2`}oMjR|YB+XHV2%V^wZk2h4C#pR zrDty&pBosqOs8Gy-NscCZIj!5oraz8f>zA&g#X8%T*s`x(SyF3zrc^x4`1j4i@9Le zXbHVWG@vi$ZbhX+D^r?Kpgg25g8@{qX~MH4io&sg%15sxJ;D8{{_Pa;xigjFJlFO0L?+~;cV|z%ybBu&L(2;l{ec+ze#uB};VbkMt<0G33F5YE3jOK^MKM5QE{mV9 z=tZ4CIZ8O!3#3E-mp~wB7Ai(`^1_1}`vlsO$ia#K;m^o|s1Sz(1gC6262#)!Qjj{J zzGXf8l!=SeP8yq%;kpE4!>lGVjYDUfw*DX44F@ffZ2z>5ZtT5+?5&K^x#M8nU++Oz$=fZ{ zg(P-oNFu^rX4}oy?H5}o;}vN{VcQviN9GF)5kP+GSQ^5 z5Y&0dAsNrIw%;$rQppcatX=^G%7#LwUnu5e6*#he+bHIUaZ?K1y7GYR<@yHJ57bz} z8^34D2nNs0fvq!3J)-%?LkR)Bx6Ou*dpw&6l+6D0{9kasPlo-OlkpphPQ9~B;ihzq(S9u%y_N##I5hk z4v{A=r;RCZCYt0{pfunaxzj7!-TmSa)dbRe1gPHwBUrGhv&&vPmV1=c^XLNm>RNh+ zaE&=LndTd#MydIjS8tn_yp#%4NHW{ezE5*R{k>(`c^6wl+&xp>ZS`S7bu2e^%0J6f z$Q?bI>6N8~{d6tHw?*t+!yu*zkIGy*rpRhFd#R0Rx_5sHB_g0=1adCgaJ1EK%uzI~ zgVi?M{Si$$HQujzIFejsEn@L5XkN9(Tm;)lj*^FYQ<01-?@bJ%5!bIn;CIDR`6Z2= z;ZDzYEe9NpDw))lzh_a0f%lDLrHR}~Zr+(f8EnZCXO7Q9Sj1`>hcay?7q#HBpN(ROB` zi-kQEOfEcSAAuOXOzb_=7lAtf0W#rLZ-0!Up@_(JCo95i-7OywD^8~im|7{eRoJyj zrcoidr-dfm$&5EM%ZO1cIzklYK)8>%&!NDCHQ61a0umht(@Z=!G+|Yj$XL$ z616h|TUGrzBKQQxuSJh-h6^v=TvG`pRS}VFg=h0p%=HK95s*&ZnS!V!FNJMt2@Rbt zv;g0ahD(ktjVRuk$q@p(N9Ur6c7ljOZ6ua6DHCm5@bA0J1tM)x$rkIkOZLSIL!9mP zASE8MGi_iG-9q$ZqU&XZALB4x0s>QMYf<#76A7vq-W&^c&?tw{Yv72$=t2~o#=55x z&#MxdvF=SL!(RnPa)*%Yz8eXIGNeDw9S8QJCY`8M#Tjd?2?%`n$^W^0p8vgXFd6a~ z==11DZ=}2&3tpKgZ}c~rh&@joI*08um~A0q2ewq_&86r$iQKJz!LibN*!|$QlVbSq zHcZy27tfX}y_aM0MQe80`N(e?NbBU8nn``^zYt-u_!{Yn8%+OiiT;~3L0LhcU_@fV#&)1qBtJ`=dLKab`;b~b2hf;A>XK*fnY4-PQ5%tKNaW2p%E z+;{@a|6ftoV+D^h4|yW=meF#99rmH2IvPzEm!gQ)uu#^}fw z_R&vP>xr=}B7YZRYpQ=;?=+DJZhm6ehXCu+n4B%menyMs<0nLXTV=!<^?Z!IBPR_B zG7r-{cN9Kyo0Hxaw)bNAbjGY61TVIPJ>NFycC-2DSYg*0xl84C$ktz-Y9nLx&k2qCZxim0vAkh z>1P*MJ1McxEMk8F-ZPI%u;2niVC1mvf>`J-{?`JAZ`~gO1TEi&S9raYpkEh4^wAV1 z2T@34+}Zo^bhA;uv{}yVsBgbfp2c-uqyRJ-suxQ5bverN=T(j8a}!cL?our~Rm1Hr z8EPn62+2-a-!E(=aBE~cIyfBy(XgYeXRZP>GuD?QmBxXbb8k$&9WQR!i=8-rCdm7u z@;jB?*XKx=ieVXtd2LM`pGkaSz5WmRq~Rcb~*p(ENeuf&n~`EI`=3 z1QXMGj&i|du22_xHAo^MD>;U8N`A|WE%DswnhICz_W^@$^KDQ8yUph#_zW@Ai%Sb` zVfF>Y3-VZR&NH-fZ@5p=>;(SYULepp3xV#~-G;|`9G_8>7byz$>J<~^L|Z)~Kve`U zJS^NuKG7_>V*6^8i3$G7EFvB`3y3FBjCp04YdpE@pil4P_12gw;s9O^7AebI?akPw zb+J&keM1>F^;WFh1DlC01^tygJ4k}HVf}_vzn^s!tVfMaTD$}XM?Z8mbbg6FC{zCw zyrJuR3IF?Xwj$5J4?1{x2HiyXfP0%L3BiM{b*NJdYQu%0WZ(N9OZ+1xYhZQRhz>KJ zUvdy42-W=#2m2FQN~1e8YtLxqi0g920NxZ0U0=EVO^t)fgUk!j3I+gixq6AshyiORy5@Zw&s-Ac8ozEni*sd$fj@*n#EhK@QuWTS5^$~=2SMsyVbjdcRJpDvyb>bbMeatC{SiBHP3x>J=c zVOgKxNaMDX|K}eMTrt27RGrBU56{U(%0jA2%ErkFs>$Tg0Sy-ekU&g2>d+w4MO;Eq zpga~Fh_MOq8z1;1YK<_>0#CN}W@!N6D^g$feD!3qF% zH3LYLxd?`?IvI93jYxm_|CUT`A4cGQ{S0EPWiEH{sNSzrNCColW_cA9V#vJ{V}{ucCWCol7tGh_1`NC*s+ z-STy~4m_2hKmfb0N4qcsLlvQlyNQec{xBs3O#{p8M@5Q2<3;rwXXgu`+zC zInQyKmB@XVK*(=sQ&DQGCx|z(!KW*)5fr=*{5X6*{9K+x=z|tORz==ZVX20R(JBj&iQ4{T7);=&lGPD}0dZ3%e%N4}$FmyTn>%O;z(9 z6sS~a0e}x`>WE7A-m>WVL4;7u{&z`jiB0U*E7!GS)=s|=S1;ei2%vzO~L(NlRxvF?aXK` z0c(pKU42iegE{I`$bwdCFz!b0NQq^KZ(^}PJ5-|=r0z>Fan9~LQVP2AOepog+!3R^ z{s+^Jf+Jkkr=DA%ckhOuu0dgC=FC@pRR=EtP_#XkFj-rb2fI6U5kLrRg{c*wmP6%_ zr#IfDiAym&OSR|M+)2;eRmn@#Pu*J$P7^3nw!Q7*uK>H&5&ZFF`Acm~e!7%zcQBHW z^Mk<<-%}9s{>Uh++7}G`BdJ*@=%mF_{-rWE#}Xl|(O6*en_mzi4;|DNgm+NX`s3du z0g0^$W>1r|9h3f(t}OHE1H(TSpo`Yk=6E3?e_Kz=@p0I0q1!I=e9S25!LNJ_v{*&M z^k)_H$VTU^aFoF;NS8va{>OfH7?`9IdG9dr>7g#k(uA>mEYOYA{TL%>AQ0MvtV_m- z-;0zH`3+$t{?D`@3`xDNmhx6JQo!FS#*v(=yh2On5ksS;ezvzxy??E=z+YS4T=z#6 zabXOa!q!!Zp~P65h|rK|h{S(4$IoAFA#?tHo}b#Y)QRZM(5s2b_g@!I%v zcITtx+^^To#2Mf$e{|Lb0d+Lkfg?%8(T}1)g19&K9Dy~8=E)qp?r zv(FNOEY2{-)CsH`05~J(LqM3RT=2>hzmx~-H znw^>;U1Vv@)v?$758Z#uddqF_C8~AE{kQk$+&!(3l=wPnxxHow`Od+vq8b<>HbEG3 z%b^{~f(U2aTZ|7QdGEw7EhjI6IWg()RM5Lp6>71l=?dosgld++_m3^$GlFc!HP3fW zh(Q%!CQ6(^Iik*)@U5%D%cnd?3$^%$$ube!GN`S3rWZz#ekXtyTmcl`2><{CDwOZI zU_RNO#dnn#k`v z?ewleO(f;T-2Wt9 zSw3@exN@}2{-Q{Nm7j&nfN1AeDh954WNni+=FtuOIuZ>KxnTViv$}xX(AvCE+HF|E zxHcWis#~&nFW|jmlMh<4WI1BSWX$T2Xf<{4y?eSmV0-ZRyWHYe&uOf>cLsiI$WgZc z`X}7L;oGmSE;6ULhK9MgvXsy+-QU_L<&$Xo%_$A&-Ps+ti&&YV0KV-dtaNel&y+Xj zoAS| zz&8PHoe8^rh7^KyG;m(C?xJsFZKCAronP-*7I7<1>A(qlT3iO~EPb;0z@wGp--cQg z@zu&rhdG35^~y~Prq;X6NhaS#2XG^mSYwq7aoDY=|!Ef+vGyNp54BncfbrS?{7&F0Kv3nAFh&E(MW!Hqk zWe9v=zvmTBRADz8`Qzh)b2s;Dk7N1re1K6SBEw{_bw`JVEAn*Caa(D_4~av=(6D+U z$%TWbE96W4hDs5G%S}?(G1&`tFUUk92@RW6h4`IrXe>NuKE!`HnHLu>fP<@eom()J zlidWP0uN>|@>n^RCRiIU@z(UXmxQh(`v91|%OZ!PwSifLg&0A|q~{glGiMV%pBSfc zJ$oUJ7-{uml3lX0EM*H!vF9=h7Y;%@R6@KGLHeT-BC8VOPtDx=LkHUpVsfUq%@#?L-yndg zWTv=(J5sEEsUmF?1UZFaLai2ccdvp==2=Fagk#~SAA7^DY&%yTS280kmGlJJ1cxX7 zI*6Bbm3(8VhDJV`l+o6cRm6yvb27q;z7~+swRk4swgNlvfph8c9rZoT-IfZGU6G^< zi-zmp$KSlO+4@VkFT7bv^I21mk_iMg^#Yc@`KEz>_W>9wxAtv}9bVqK6lL0>eq+zY zAzyOg_81>(F0aeFtcs197sCy=F@tvd0G#0NAl!a{AF(A;BfAe3IDCWYB)lvW{gXhR zrEwa`Egh9e8SkeYsJ0(q!#+sLXTEM95!XTCo0H?*WE`Tcb*#B^ZP?dL4-4B8-J&U~ zoKepAgcaqzhvH#2Y0I}c2T~dU*naEs1GNtTNbvlD)FO5mFKse^u(Z2el-#F{FGb|q zRd>fgcLM-2!XlBw!h&WWkxVN1s6+Y)1FNc>)RtC=61;A0gLta4c%rEuNczHvV)cGX`I9J81k#| zi71_mkYf0DKh88z@SUK!uaYrssfC7Dz}Ks;fA78A*QGrl82#ZfRP0-eC=FVp>m&CY zjG@L2ur2Vj`o%+*>peXJJt02n)RMwnk(xpkGln@bhg-z6qrq4J74uk(dK};o0eBP~ z17^(jJ(r&(Vs~0bD&s8O2DtZS9yShjMGe4%+(LbC`KcK-@h9h_8p|8bv1x9dieOQS z#?Vr)tcvtPe)1~lei%H#Zi+QGt`MGmH=}Xz=HtaK0%xoKy>8Bh+rlPwj{3Vt>)&;@ zuq-Si8OwT1@t*U5x>%ZV_I3!@b-HP=8PNTELn#$<8o^ztUTSqkhk^xag)AxL)>%4T zJ4d$W65zYHHQ#*&|99z@xsM!IMh`2%E$VDM_WYF{u6VX7 ztP_>_aFv{oEy|LxyGgDS3A8&Mj4nVWwJ6XGf!MX zRHh2j;tHuBB8gZzr?to-e@Z5&<~!sHkHHpXQ;4}KcZ9)VAMOiNC^g4~q#)I%6Gxjx!|JNg_sKPcij)glh)*Qf0kQYuB&l!s2XENHnF#CCG) zb4jum1ulnwG;N98f*F1@?*+o@UB>sJDG!!6_%~IrABvMxmknF6qPaHRhWN$R{$}F# zv=Z%rSE&`HH>67RL(NSYc#lAg`5qf3j;>!6vAC(K`5pK zqnjqbKKud0a7)W$~m#Q{lF#UbU9 zI0P=j*0`X{68X$;&EKiqe7kELHaaulq5to-#dL_-{N9g=FaO$ZcRjj={sh}&PvM+W zWs)n3mz_Chqig>3GzE}%zpVUL!S`xc{KkTD`MX0wXE!m07GLq;n;iuDki^>;zi@nGx@As1HxAu`=-pOU_)ky0!JQD*qX!Ymw zYn2nuZd96XrRaL+(^VQO3Xh{3w{uIDPr8C$;qr~uE_nemHO5jyv<^?g{S!_HM9uo@ zDm^M+IFa2r1`L9uE1e8b^5hR$2nnG6E)-1oUWW`iUr8>3$ z!-V5-Ax6itND$d~EFG8kl}MuCcpE4K4cFHhM(Z*~1GS+%T`(e;14@hoCrO6Xksoee zJ#PI*pS}UAyUr69ZT7r!>N?3{WA?mbQTW08&(WSb?qa}um$HR*>wvmi=lOK=&C3FT zlDO%4$wNWZ8*9L4GWPf)Z4c-QuK;fO)PztHwlqQ8&F9Kk$6H9IAOxe5*9e&X*0^fzd}@p7YD}^W>ihI014V)wm5f%U`MVfXsuZ0<9@J+j zgALBxB@HlDeDXaH8mW;^`||FtrX9K&dr{B{KVQ1e1KUhvWYW4n4}Qw%w2&nBYFGBW zU(wZ5*Mt#eT->^&R&P^>uqr_{$lS!g9_efsk*PXD21Q zN(9(jC+n6Ij63S}pk1tA1(A9S4y7i)CCfC()dCCO1CwI%xL^+6Kg=(I7)HqD$hMpj zji7`|wsMU-;}>4X*S<@j8sd16Wlzg!%W=Tmehqs zRUqx01AHmQ=1lU#V~Iq9xm|9cHFWSv7&3e@W^v&5P2GLfuvEj#jt-maGx{rI0nUb* zGQaaEIXqe;BtDatd|U9ZTG$6xD5scM2hnHRTnb*RY-AbSo@Gm=81!iM)9upK+sE31 z-+W~)V=iB5LpL10$<|2~@qV**p{h)C{00>D9u(N|Y} z6^Q1hP`gq1zm8wLmhAJP&2C7^nHIsgx{X~^t>NG-wGe@hzk=cZ^tV)v$>z9o-V@}F(Mc+#S*Q~zKrts2d?jX1gI5gyo^g!oM)RZ?&Y^c4 zjC?@#L>U{PU&%ey#xQKGQ5=pQ4DRT7g(M?K~BCk|{ucbWW6RN-xI4ZNgXTlL;7Q{f;* zDyn4LuZLuFs{Duf3g&TjDoCJ*E-QMFwM#DhyRDx(Bcn}w24F!O6O)NW#OdxjiVQMyu!uH=`3)dXVY}p*Pj7P$L;%M%=a^r zWq!u^wI2_7K=vpmBbqUA*J)78W~zIdT|}wBrpKl$u2HP|J-F?=iQ_GdZx&G$QHrT2 z5LAvzWB<%v@!*7(m~eMWDydOBrmHH=(fcQ9ecVbW{4#-eszFVer=OvX#OThNVfGHI zFW$)}qLA=$Q`<`lnz8{#uJiY3w9CS@C@!j?I~R?^tOnOpn|KD(McT>AQv3%HlMf0de*(SOZv_rfxZ^ zEGUDk`k2a~l*FhNG#|sn8WX2XT2taEHi^;=mBRIdpEP0|x4@vUvISujm4o2$70yOL z`6oVK5=~v{fe4Kn08%<}M5_zWyphvQGzI2}Tof;Om60Z4qzG#C47P)LH1N3TkIeD^ zi{t;zu*zQLXZ9k5d2x+eBwLvcaVVR+SfF@H^nIF&g{~NNqIVz@c_NUkcq5oC#ZR$d z)FXcb$Dkdz-aJ?cQ(soREkv$n0I8;6eHcbmuBAu+cY*XxOaoN1%d5{eJgXI*G1Srx zsd~w*Ke~Ej^j0)&8a%IvERa$>LN)n}F|ZbEl9qpjasx||+mxJ8a%x@7@&T^4gDlL( zollvJ;DuX@j9>#oiw2mhfIalxifnBeTUk zlDx2(>=ShH3fc@_^-7YLW%JIr>^|QLVg!Ih?fXvQ`bn~r7{^`wSJ8^Ho*3B~Ip`!- zUxTo&ELM!|pn1;^?{Fgd4GDmE+tfGF7-ise3zpRHBqset1#BJ>cSCmY_`Zqf5Q_Wv zR`KspuR^>Xu$i{0m2w>w$^ZL0YRm-$z&zKnmUSJ~{_GoI9f!0$I5@ zIsYHYDbnQP*0@juFJG`eAdD@Zh_jc)g6w}AL_s28TFvymB+03g9)H5{=6_F1Hv6L} zem~2JE2GZAJULFi#&!{C==l5d8b9oDzkHLZ)6I|%b+W$>l)?QTG_<71vokDh>6st) zKrC=h=o191dY!Kd?6oTBKJUzE-D>M~V1#Ao+>txvIGrBMmM;`yR$5XbRt2}?n@0TcVs=Q%`;(S2@&KmMBAlgeiw=SP&gl!9_TW=BL?+_HtBI%w5t2^Bv2@x~$}AmBJ1?6~1F zZOqH4<4RME1v`IQ5&zJW*|4=~iX;p8e2(G(#(a1&l{M)BlpdNhYy%m#9fGp;`B?gO zIAI1#rc;`M`Yp>m7uNTxs6Lh&B4r^MDEw=;DNV0CxT@!m{#`|cA_&{*)cQBiSE*LD zB9)39*Y2q|QG_^&i;LJB{89j--j&SnmuVlkZxwAS0eYH>FhqJNJ(g{WDlHn4=G=T( zbNNTLih2*D((p{C)23B?oGD>Zkkp|)v*c@e20dcHN()=m7VjkfJNIKX59Kvf6i2-l z51%B@{@>M;uKCm^q9)n<>p~Baf!yB*yu+M$CJhk=7n8e*Xn7$O=~|3Ic~C;M4s`qm}q83ZzoCAQNO|om^+l-a5RP0m$L0RE za98b-sJ28%%5#&uH8!anQj?=&g_MMa)pQ>3tRH5IJrhVNYECV1uJF8Kkt9pziXx^6 z2Z<*|e|P{UjV6lvM3^b;b??Rp@{}AVlag>LEJfMZXb0maiGF7|ZQp;!dgHgKJv(oS z?yucY`Nda!x7|tvXje>lCp>yfY+|kh*M9?`KxtQn+3bmr*7}>69F5xwB>{Bat`rvZ zoAV1I@c{NUl7k6#QHo8w#NTj^@c1M<6AY4NR~BS9_THwy{cG@GvfBps_08|X4ms)9-?B;sJN)*7|U3q_E{2|<%J!v`uKtKsJ>rD$D zl=5Q#H8Y&{GK8CtwJ*J6(rr5~BN#Ep@N%w(xOG1tj5uZb2PTcZ0S%2Y>S}}80lq(d z_JDufr=1-6R?$Jauf0#f=n68+jLa9GN@a9i%wvMi z;@o}POJD$Q*?o8aalHW?^1R%NlLX5?F!nO4rMz&37rqE$-n(8UAy^_A^8dVpe)jo- z9Pe`8Wrg{DIoy{;5CG@RqrMonRi-k|!#wQs6)6qYp>X6)=yhd2?6DhgHG*`w19L{0 zoYDpkL zKya0q22i{t1_o$p;VW?xCp&=Wf3Hmo`ubG_E%E+KRn1f2g?*PO-7LRXyh6^#F60p* zhsjYI2S+3Mw}e(^(|n-!Y=~L?bp+ zK(}9*>(n(~X;qClcps4;A3n1I*E4jN2D#euux!A79Ogdq0_9ZU3LM*d?2mt0hKfLe z_bJ+q%RGa2RKX`4+9aLwXr^U#(awCK&$prD$E z#6~)N+76|rx2Nmx1GyzHy(R69>O~WbNxf+3rgzLFU6}!&UvTG7;V8g78zBS5&v!-G ziY>J?&&zZ2q{rYl)Oz??+g6kDO)OiIW~sAH43Eoel=Zqbu9~U4c%StPfeY}i4A09M z6feuI)YT4hN0#^3v7t|H|0n5ui>m!f5(;(8B$TtZ^V5IuBpY0vq5m-FRkiO5V3O4 ze3+C=*qaH@5_)?DHhQ@^8w%>T|HkorcDYuaJr%A3wlo_uJ#%)1Jh$SgE5g%#rWj=1 zp1Pd7wooxuED7R@hJQfWe*mAAgg%d_fETRlNBJ%Ji8rf%>Lv~`1x`3Yi69P1Muje5 z?h@HR2qvrTvn##YMdZC_TTT2Y)f%4eWzxWf4v;R*;IyHf(LGhJM9n|=#ofB9dA?Qt z(8RAr=sokauAtM5dF{So{pGcw@pjJFg_%cc)cQ$Tl2ON6trx~x7&t7f55H~uGlY{c z*(}7z5BivCr-`&Adl+@6c^OrrVa*AnJ+{2mmR7aW${+i zRBL3)JRsrU7>e_Z2qeLhcW=l>=ppv2SWMh=1(8l4+c&Y6$U-I@L%aOwe(oeH+Mn|+ zbZO?!9ZyRMu8Crh)-ol5hHyo=l<$FjN-o$HZi&tzgY%`KnLwpL`Xtrd1+HD%-eJ3f zrQ$>bGX~Cw2k_Be=WuQA3l_*81ESyxdxl@9>XjjN^p3;3t-lHbGR>TaE?4p}WbpLL z!sKBLw`_{r`=WK+h%7Y0K2I-;t({Oh>IdZhyi~Dq4Cf!5gQ^=Kk%)QUA8Y-4wBDH# z$V(JuCPpp*S-=%M>m3EYb_Y!F=)dt6vUZAISzuq#*L`Uo5gRl&xUA9e(*INEQ)Zpp zNLPBz$MlS=aD#3l9yH)yGkW;z^JWynS*$>`oxD=^9~dvmVT0+rbN>MK1e zwQZMK^UT|g3lB;c=hL4MpF6f{tm-$Lial!0%7#{;WqxERWk&M2W3>C0vUnbfEo_pibil0gnQnM3gH-MG}dw}TSKv_ zXvL7KqGBDFCF3Kx4qiyzwPB|2n9-!37=Y%Y9>@J{s!VQ*$4tSF%6?LhLvZ>FI_wdHYm%M|4%f;3p+noB(0wnOa1IVyWT0xC6*)yZ z!AVuB?8)0xWh86d2IqeMv9vv7n=djxjL+}$${W=KVT4Ew<~btj4%^shd<91L0~)ZY ztnE27Kee{~b?o}z@A;%?;AszqH*@G~u+&-AEk@WS$yai$MFDyzr@A=E*vK$4Co6f6 z@iaL6E#K$!2fFj?n=}^_R`J@((1E`IXe<2aJbIps=5H{b)8aG55-Jw*-f-I-YVxNa zipXA~GQ3cfJ=1)x5_zNMQ`Fr==IcHC=LkPy+XkR0%93>Q)BtLw5)s^c@W{ zd4Z6Fl7b@9gJX5ex;lQh_yuCLy!(rOJ?F-B!vrApQNJ_JT~_*i zv=06n`qjXZ-jTkG@LlmypSa2oX}62O|DyF!CSnm_cxBNzVxSUe^x*NAiuvYeUVZtW z&CFbIpk@|f%a{V8VZ3gIoFbN7SC}&l6A#H;*B;Lu z@R`2cICLm`*8f!-auIm!ydqU1YFQKPVo@^WjJZu8;{Kl+iV2<*_IlniSm|`pns3NO zu}z#wpWCADKZ_PW48H7z$PJeOl2F16grQ~d8D*h<%}*H!od_rq#Mu6cG*-XoLj=^uh*U$YS}&YMalALC239_W8D z`Jh?K!1kA{9E+GFs#c0v!Hb-P0s{Y@PL2suEHwm$65lmvAQ%mp}An_vrD)2wM@#^ay)_>faX@PivLyB|cnQ7UM0?titPe(p?#SsJ;COSL0P+!zSQ-$ z?6j@4Te}g_xW%Ot6 z#bz}!o3rQN$hJPx3j;iuu(b#RD?ONI)t{rSu7w{PQ3OnM@HUgrZ^tK1j1Df=tMi`W z&CI#*xfm<|ow-*ODw`v>5>2YFSnNHrek~^hznx~hj zKzjE3-&#%Bk~OWVp=fHmR$To3ON~}+dCXTYi(Q87ppIv9zqnpkTHvdLOa)5 zGZc*;l)|$yDPDDY;1Eym-SM5~T&;`BW^#Nlju6A)=EA4!mJ#BE*sjp2RU_2rwJJ(} ze9P?pYmgrck*Rz#4Aqct*Cq1h*CVox0G@F}!AS7hHWDc68$cRXlyjn=J90DXBsAxt=gjwmbgf#WXu zD=^|L#pTaQ<@aT`@5UG*vsA@luff_p;)ly^l3wt*JtDY7vFj^k_8#SvO<~GU%ZjC^ zV;OFyNZlami1^$sbh)KuI zt>|O8nS!GS_6p8QPTAOHroQ^d^o11MXWo@io^BomqfI1Z+wY(BRfewxJ*f$Ll%?N3wm|Or zeHgyXZx$^L|MMD$EIJ9PS&p?#`^W+(%N0~p#kTgHGY zp-mcFE8ITz&GxLe`~PC>Eu-U#nQg(CnVFfHnVH#+nVFg0W@bBPjG394?U)&3jALfz z>3sLSH}|fYwPyZwx1>6)(ym=4^*OE5V-P(yQDRtADyB5s?u@F^LW^4+ib^8HkO(IH z)p^6{Wkp4wmNtCasfIaBajnr#DI;ph@zUwAZl|()5JfevxB1r*!QX-}z}eOSb&oQy z-6K>_QAfx-=ny@;ytnZC5=JIe)g;>NSjdtwz~1yzuc{*CqN5pOF>EJS!uSFS~(G!n{g2~v9d&0Qyb@gun zKvFd18sg&Oj9L)~WR!-i-~T7%GRfLTxSC{vi@DPQ!jFG3r#qK*aKx=rlsBKW_kqUr zHt)7-$-$ELD63HK*V4_8i16(!LBtxLi~FQ(U$fWtmh1bI0|Gj?rjz|9t&@e1u0@4) zF#P~dOXAV4b=Vz(yoZ-im+xI$1bgQIr_SKZ?cC6vmshe_m-WrI@F3%bt&CqH*Zd?go{vR3}I(jXbba9f-4i; zBaX6z1cT15by@UiZs+q?G=SPM0-?}(cc>ztW&KTxm%ExH36 z^@w>m3Gs{KJgUT)&i#ux<(e%EErQ{#qZFG2S9-Phj=)1gE{i(yH_7oCTB;oVIM`L9 zSLzhc2cH3kh=)B;xU7hld_1{7Y@!Mu{l+uDS@IC~@t1+2yYdDCSjxcKEmf5X0(=fPjxfG8)z$h-6b^G;)mh!SHj^ zYqevAY1x&Pbv&N+OCK{_P@2a?-jffw7zWcnt7;1s^SrWA+;QRPkf||Xd2?2_C++3D zpP-cx8frv5to#=kX|3xH?Yd^#P{X(|2(p;XZFNPKqh$wLgA>t+U=Aj{%^g2#Iar%p znARb?Z#r1Jo5pav%Km;D01n8TmTFbSSBH0c=h3*)N`MJ*hqo)Z3~QWAkG%xz0ESpF z5i_7I+u4Z4Y&iZGmkY%p$&Jb}Ubu}E=C}_1=D*fW7!-;QdCkCNe_QywBzV25R400$txM7sh!;T0N{!a)B*&b;q zNEwe9?@WC`k0d~x#ELjxC1fvGU$PjTU|zNBb#zQBi=Ro{)qOv1jpPibkw>!I zrIgt%4ew@8JHfQ|<&+?4@GVTbpRMo6qK!R9Q$;t)L{(llVG?*`T}K!tZTLXyIFC|~ zw)0xMaLu$i4d<^cZdT@6r6H73H&$-_3y(FXpZqvMzn}s4gBbN3)ghLnMF(bU$MmxC zc(U}}jwP$F$o6q^tsstiwPd}h5x4_VYC>(*nDh@-j_)*GEY_RAXP9ezC!T;`Grn-@ zevT%1i>qc!d5qS$BsAGmblwO``86{6$_>B?56kAn%_nNBAl2sW^%C?lRPTI)4kxd- zq<|mff&;)SQfSx_-1-O-9mUX}u?D)eC{vC&u)>+P=0Qu}aM4ZDaPe=#OI~}7Ik`jG zu&UVcvB>VW{MmN~fB%4|e(-vJYrTFx7j0?Yv~}KQ)|A4xbK02}-cmVfrw^M)Gbp>* zX8Fz2OQEz!R2G5kZQ5_ItJ<-IojUnhkGH4?9uQ{kE!Wu`1as2}E|CVwU*{j8lQpa! zJP{a<>iO$dbIAI+#I1H6l0PjDt9rD#LG4#(_wvT-99z-iZX+m0&)@n9wLsNYjj@4^ z*2dj=dmz0ia7Mdatu>jz;BuHtDR!DAwwQ0U|wQ*lk0Fqn4SPo3js8EouR^IX1&V z^B0?&9UfI!SQ5NBDk`QfLsrz%2fv$*E67~*0i6#;+E+z>P)J{A{SDy~?zQnh4$GVu z4Q>~|K<>fjdH-vplICweKt8X?~HWNjP>WPL+K<+-e3BNq167gX9(iYm3J zc4m@3$9E;NGS)t2WpWACR8iGy;C7;b$$#64M*eLl67=_dJ&a<|jHo)43;cowW_>Nz zuU;L@vaG{A#P|GMcWHB)2?baFB|%4%>HoR9xj3uzbr<@i%Y-$V;r^KE3LwFp?s3MI zyS99PssjjqT!t~7zvO?txrIlYXguU=IQ1=L#aNOR;H!UI4)9eCxZ!0M+m!=r>Q@ZJ zqXqwZ;p(UCh`0&McA6&M5riK7ASH0|lMumzZG=b#`4Xt>W54~RjI>=QwOgX2RU@u& zRNDGR&r#Vlh!yxSNbhJ24yc(iui+9n#v&7&SVRlrS&V63!5D<#irHPDAg$mPA5bUN z@gh5pk`^_Z>(xuWC$NLiOdn7ufPixpZtK@bhLebyYpJZvO$tyN5C&LV7u(Jiz<;K^ zUOcZW@@JI3p7-pwpK-p2C4?d+^mRn<%vwIj_uX`c&(irB0DBUs zahjYl{Cs;U`|^6dDJy`)d@+k@3bL;V(;`k%uyak6qHJA!n(2k!0leMqd;*V>H0xEl zi>*L2-59>YEmlsqdgO`(lo5Sh-w}NoWG7WIoklSE>`lpBbfoGDS1)-Jcd7EpluvXz_n4Ig`rAJYt^GLW2{dAmW8dNPr#5gZjN?L z`lfRpdEz=)T#^){?j%AS<1wrR>e4jY3;p4bEcOg^DDKa@rDz$fG#ww9w9mmsz z>ybQ|0NsM{f9Z64s)|rVEF~N6dGWt*lW zw9w7VNUSHNKOGVi!=W6x`)Q`Kp~4d}hHx)8F2nSu4Z`LanDSTO|1`JgCjiRJ^1mrw zrqtuA4(!bC4}NqXjiOiymh17c+7&*gz#tz6m+AMNEC}PJdgLMF5*+x z^SUGC0n6h&s^|cwmpQh&Dj{tt|_(#e7qW439j8^mbSRbIK!0S|Ql9ULk~so@;V9u0XL%JzG)>wx&Q z{y0w`-8~?aeXpu9+9CiZI&UziobAzPnXcg}ufbVH^luVEq4glPtVkG+sXcOb3LbT)cr{w!~<~$1@7z~ z2e7*FroUs)bEfr8E=9A@w$tVV*3e-bQnrkV5j=Z0z;#C-?HKE$&vehZ-y3i5IXpqv ziX+WmuN>kh@;l(?GsW)AE#eXAmPq=-${j`}7FlBg8om#0Izhw0i;3U8vuY9AZZu_4 zW?wX?puyhg7@a(Sm8R6dpzgteM(XI;{~isLpaGL?&S+Qxy--g=$YW0D%viQR_t=Ze zNFFDzgIqz@3FP`37~8pw7Gi)eJmi0DLNDJ2zKd2%z7LQ zbDRLOTx&go#sM>rpk|#!o9k%QF6@3agK0A3;}Z*)2YUYjRYS!A>q_sWcNxG*5& zus@{nFMqFJyTP!Zu+7~`m$f<}*J{T#kNcwKbM0apcUo=LkY4A3Rf`B!M? zr@~f^6PhQTe6U4LEd-h)u=tbRx$Tz%9UU$1sW*Y=#E7B77DQYyL6+@4V@%)B6V&MM zw4$zk2eH$%_AbintM<3rcDNmQc$!Mk6N_U?O$R&7FOE?Y=}vEWY3vx|?~pA3S_$Xa zbmkTH>Y)zS803=X$(!VYxg_T*HG0bSu+W8Z@$6l0b2766QJYZk`HV=^PuPv&eORuB z_Ca#cl~d~PUbZIA7$s378V)+zD)Y*-A>Z|wY#?Gm!9EwEOy}~_*L5F5ob$>CiS3B+ z5_M}YVaE|FbU|;k`oB^F^-Pceqh)Pf!Hs4%^Ku0UJ$AJFtBB;?=X4&?nFccV94NddYa0Ztev{RBDm zZZze2NO0u@R8@gKwMqL~1slm-B;~a*(93z3Xz%wqeyeumHohPl$tgZ&*>ij12Ufui z;G&{jQ2n-4jNY_#imOn@xOJL0m(jbh+G*fL$E@4A1?`^b3!2IV1pfEEyIGgU6}4^d zNLk+6T+}dAkm221A%K&RKMRbKVb}K;6T&lP-4?wAOo0ciaNB#3E;6HPC(1@)J~`iF zRO0s&f#(|d|5R}5fySX!wT=VoNT%~rbqvg;wJ(f^9VmI}6fzlYN0Vz?Y_*4Eh1UJc z)%u23pd!i2ru+)O5Ks2-^e8WeIr<>SbH(@}_XGI@bw-TM5HNe9$Bs3tY)W{y`zGpc zDHU4uu{a;8D-HH^gN)QHemD$8Ds1D7FKH3JkJVrJJN3*7#!p&Xw#!Ni0oJt5%C)Qv z@~N-}^&%QC-12T+xMaoZ88m=k{+FSIl6np-n01Jy(l1QP!bEi~U>e4S8YiHu_G?_~ z;HbWhx=G+C1Ati$o-(g#1s-LncC23{xSEFVxx@Z32FcJ?J^hj)y zFa)F2r!SKWzYCN56!Tp(Qk=Iq(M*gd{8`?a7myf)518LLt2VC{kk2G23;B2(ONibh zj;^CTg5H*&LCKM?qT!EMJi&m~*AB>--?a$h(@b%V-jtwTRG1+-r8oo1$&Mv}mmWxg zuBzZw#0Q6Q@dl9pcfJV(kYfQjQe4XgMxHfNT+32Za}Ky~XTbEHMw1D&p5g%%x-ML? z6szEfL~;f!16;U#gaQ*0Pmb|S-U!iq1FSr}t{ekp9$Dekny~dwVvr}<{)M%ohZx@4 z9U;;Jc|GJG#>$Td3G)caF$M24MQ(36^S@<6J3w#NS(cR0+eyrD@VRpR&G)lDbuC5o zTha`0Ryn`>5}hnJOC?ng3%~(jUG4KAcbFd+Av@6&Zn)>fkL;ZBtyt4##c&-TU@;QS z%4kL*BW#N6!2Sde5wE0yxKyCPS`n!X8j2{@@I&-{b0{R*C5Wd!sBo)j5P<^#`M`9m zr_(LHv-F*vW5x4w8y84Ds(hm5c6Ire>fux39sl5FHsV2@pQ zedt>K^qSn`*AvDGr;ABYby-DLS05_2&7APienf&AmRK+;KbD4=_s3!$!sODLR`iIO z#DfEo?Y*pnya9Ec0+Jf#j%)tO-@9{fV#4yxFqh5%&+p%-giKgf{=Z=wpNvrAqHzu3f?hj)1fK%C!(^tfX~J>3OsA-bjHgug-ob?E zF)C`)!-_LEMZbNvEC?RVb!H5ssM%EY}tq?=+JS?!7t-* zLBQ4g4U}Cl3+!jdA$Gb5mT^a?@18dcjC8TyCFQE9t^_7$cV`u5{M1<)`gvQubQwY< zlEhzda9qw`K=BsOZ{&2qm-nbtmhbIPT#w77R9bgOz& zRsb?9ZdH85YDa1IYeZ?A#s)tWCcU{0jcIV|N;ewLGai8#Z9NJm zLZDFhu>9^g5N;Kl?F?dPjJ(;)Ds&MwOU`t0EcJ2|4H3W><_;QHv!B>KV3aPVwY49q zlP?>hs@5s3(o+9^-8CQ}edJ!4>ztT1Hb&YkDZJ+*P6x~)%yFxZZzcA)OOkEpEFMNv z;u;5D^PZcB+dcl@qHgk>>OblO25VDwV%xN%mcJ8yM)t5_tKPN9FkHI1O#JC^0>DMc zqYkNzIHPqL&MoWWs~o6WL+{hv6jK+k({nJ5aFo+!n}?i9WIltZE|nu>lq6Uk*8Nma z)!n14s9~0&u>EHs4jFrl5*eHSvl5fB@1edSsY-rdbWD`Gz!|9BI6Pcfs-2x>Oqev& zWkj4b!)v^nFk9scSOMTL$XHa&6yea^$|uRQ_6VV5&`s|TeyeF+Z3}42WM~hs^IN2x z!Z>Da3S*;JRpy_uqjBWLU(~x)wZ2Znmg8L-t4FhJWp!}IDNQ!FsM>vYNUYBaUV$z@ zlr7DynF3A&ar_twO-jGY5w)=6^=NW!?B)iE7HYkI94#Ek_yBZFmw_2?-7R92X|(_l zY`VcQ)x$PRNcroeKmz}k0qyj(CWTREarNw#zdLP9y4_!?!m|0>$IH)$&pL)F96Z&*yz-22>qMg(tVWPXGgqe za84(8VQ?{IFM5+msFw(j=Wp30#{3GusO^70yZ>c6Sw8f37#bm4=*^qBo9A~M?3hRA z4sUUx#F}kC(69MEe`ft88Iu5sF5TA2#@NgkD}fMxPy*Psh#2dYo5Kz;?oS$Q*jnT# z?6kmklXED2t?OO!&@y!e;|UI2ve7&Uz}rOxRD|L;4sr@-y6%*^y-r{tq>(cRurtM|N&cFTrk0yM+wzcr&GZ-qwvm z2$IE*WKln>P5E}ODk;=IC(TR3g(`^F;J|HS&cmz+e?e-DaNtREf*V$(S_fle+R(EM z4vv_oS3f-m2gulGoyRLPScocLV6YrFqsCcU6CeRhIT@!1C=A5Jjv?pjok;dUFj(9k zU$|q}h7=yx*7!?Zx_BB5E+(X_i$iiL*&L5JkC@)J5y@??#YL9xX$LVe>7v4+}ST;9` zqR)WKwM@&e!623I(}%B$uiy7_-DuHc+3HpnqFOMxsAgH}uDRdY+sZaT5H3pbcI>L@^QC@F zEu7(OCqusr6gnyCCF`jn{#EIWmwv-@b=uhVSbZl^#<{3o`}?<7eEa}Tr$rUbpJ)|8 zwIZ|pf&27BAvw%|Nh)JhzlXT@QpbwyxA@?PVxlSbbutn-z9O%|dg0?RVzv(RC zGu;;2TP6Gr;|E?Jb4hXb=@(1TBufJ}6~C5ll~`HBZpNi4P}!~o;Mn@x{xGw0Yhoev=o)Ce!Q5Kbc%HV;7-{jYM@8(gA(vzyl zgvBVN`{l6v<~Ps&3`M^NZ5vS0Qf570ZaZjm!&%zUBeALYX%V6IA3A|XBLenhpSl_@38d`yicc(OW~3X?H=Y$1m^3Wa_9#e}V0DpsJl679TngaYKPp@L>RUbu zy*w9?-!t(b@U)To8spxF%f-gJ^>KW^Ky1OC#Ii5=dOzklgdt0)&jMbmJzY#`!{Lp1 zkSa;f+pEibk6CB_TlJVHn4@R3Bd+i;hscBlQ7LYB2GBfketQG$n+Y9|({ZjPUR@%O z*JMRte5y)ywr5(^4}j;q7pFa>qDP=`U3pDwTubMkf=^I&fnSI?qRwLy1qni$HFyFJ zN?;l|r~*oko{=;G3k(ATL7|F!5LYN=Cc=5UKT=9gS8Og9_nLAP@;c$3)+H4YuJU-l z?!gc#2H98L7j@}QkutZltoHLdQr}8D&Q0*Ym*=-?@J&Aeu6rB_-7R~RO}d{H`b@8~ z$L?~;dl`CvKZ##k?4S*t#8b4ROgRVo5d7kN%j2f@GET0luW&sWd^75ls-O@W-3d|M z5HFU4qI#LIsH&_i>|OQU9hYc?LNtNA#B2K;(B1vChb6Lujd*a@5&7EX=sHB1IatL` z)S!LKx%3PMm`%&d{mn3_XMFgs;^;fj(|i_iI^AT$Z8_)KjcNp97WV+6#A?HMklo8KwL{aZwu>-qJLZi}!e z*}W8AKO<3s)mPN+7{^zDgtur1;XQWv(H_at3i9W70Gt!-_Xj<{`$Yf2aWXq2%2#Je z<_c>w2*;ge*z11OzujNQ5prmfgvJnT^9fDCG74mL+<@8bZwb~q87?z^_iAN0R7mw9 z9oG>!gUyve6n^GAtElaI#H%d}{_Pa!uD8f?88CnX3i(Q0ZP2gYG-C2RM)T(gyg^1X zq=t|vz%f+TKmhPdk*^wq`$_@aWzY=B-nxJj^w6t|;jdd7)01>(6BOoRW3PHv#bjoN zR-`A{l$=9HUX<_cZqJ34bp^3Zj=Bor2D8j#5DC}$3}}rfWy4^qIP9pG>@G1}ikS#` ziy*Q1JH^hy2@wf_v$n}3xir$0-?wKi1sN~7*1ecj55rKBSRfy1JuG6(U$YfmQa@vk zgc6^8OHxSg1|s(F58J%-@1C_Xm-ig^cD_IojJO~E>lvNN9q>3x4mO_ux%Vws-;tcl zC+zBh&aEeK^8NE0CS>Dx%Z3h^6>Os*@Q%6W&L@kU{_O1ccm8VHiYh7nhy(W@HY@c| z_A<*-(_*(vz6Pq~lY+RP{-!U6Fdoz;f6)n*gaqI3jl%KAJPrGBn7+bRm5>CHIwaE< zO#ujE)FWxH8TL5U95b%-ZzPac3IXqLFMD-JUmtS;LRvy*rY;i+E4*Cdx@u7f#zdQa zeP0)Qn^b%mV|^c2Lt(+CKWo2ScAvyzR|G7G!cEjzZ*ImSlp}DZSYsyh9T?xv4zrcC z^?-lMF7STxEHJA^h}(N1(Lv^s47w(^xdC_+phRTlw16gwfE!Nof|k;h=xL$AlvW6v z6M!t*>3@e3W`8?A=LP-AgGq*rJUxQm7Cny4FiI5^Xywd44!nRuT_qiUF*z3nIwK7? z@el6L{^pIG6~4ayW=J$}&{7WXw(S>)(iZZj`10_4d787^^7#C2g|pn*I9qvm5dbl& z&|&xXaSQxtYrYmrH{5VXC9!e~i3Jt0Q_Ccj zA7B-o;xM#r;hDlcEU5lfbR_DE$f}eYuvPF)4;;L+mlB1#I>e!VnGV`b%;{$gznxe# zspfa2O=TAqpS`EygTAVQE(J#c@ZiT=kc9$a^Qsc<=iJ}d6gI+hb_N-khc;6YM~o;!nTXavUNec& z7>AH*g2BSl>7SQ=Qbk9`pSIA`1J;qr^HdSfnWuga({o}URL4vj+OukHhHge2n76yx zhU?h1Y8@v3rv^Qaga-1lrkx(K(d4eEI*t(8`yb*ZKycxDbQBzokyWe7K5R0iC32}U zT=-vjO2*>ALKLHRV~Ampf#EQ8W_D0{PTW*vkFN$9?TNxZ<9GsdW9>sKJrY4+ zy-%eKSM~?xdyl4S0)Y@L1ceG1t+8kV;I6Tw_~w7SQx7#5-_1ldMj*0 zq_NvSt8~0v;cjU%0)GQT(lf z^bLMZyT0;)rO61T78%X~lOC})I;e_*k{Vi%0FiMxIJX6u))0fMo(+<(6zC(sy41j2 z6go9!^rifjk!2N|_a3vGte7xk~;Ghq&lVxq`sK=q2!qoeWGwC|UJaf%U3ZdZo$ko?gDiw`WY-~bt5kpqkae73eh;=9so zIMZ0c!NP63ni9eVx{WNr0Ir%V&4cQJS%opE(5_u=Lp||~1dhmvDQs-nERP&Swg-Hx zgjEe}egPD@LkEmXU;!iWz`#fr(>py5zMeX+P|P7hzk~52aJ$h2_^80*>Kx{#&AH;1P37ULrcQ~Ij1X!$zwM< zi=9;2Qn9AZY4E4a3KtyHVMJ6H3>;3&*7^6hsmhV|XKh`MYR!Xv%l<}SoYKisTEY>U zG}9(^GJB`z!vjt&=}T%;e=Oc((=mcV?7*dAOe84}EW4AT@o|I>G=S}^Y~|=S1G9~@ z`wr7<+K(E5scv)Nndo^yucq&zw=lb`&Xfv5NZZi);&p&5C}3Ccu*%7G-cn9rs>@~o z>GOS_Y)|NyPoEZslny_)VsKEM#D-WR669~jdC;L zyzVIhKG|AcoV=fBcksejN0|ee3$J1Q^2@H`@&W0>c-&|JL*Q`>3U?%5g&=m6HQ`D{ zySgmquaQZ=tUm?yV_=A|ns0+`GFWDstpfp(kGGz<9`7&gA6wkr*SG*ChV3u>Y%0RZ zSz95dm$uoLj_H?=h}9kvCd0aE@89va2QFn}54UA+>3#3})-NE#r8ie9f9mrc>dFR! z9XlAb6dIWTT5=wX8eH61LR~&Kn{pfE_#E1LpZClquKD`CD?Tb)xBGN$i@z~n-JVX< z4fx{Td@kEQZfhL?xb(eY-Ao&>X5m>I8+&7IJ6oGX_qwx0%Xjt?Y17zO%@)Igtq@=g z_&fJ#d)#f)$c6GZSBDX6m@0dv&}KP37UvqHf$tvxq@Ay`zOOMk;ojl|st2DqXs%x5 zY`nyj>C0V=q#LF`y*F3LJcqW%edVVmh!ly!9RbT&6guI5N`J$Lx;vybNcYBf{aumW zr@Y(Z<#3bZRYLIT&})1duhLs+%CF5u*b%xTG@MQIphoyIx4(ht+4*c$V8uze^qVkE z=)F=0_;uB;Li|2^VK%fCAoO0YIGRmA(NP=nx@hje9c}qt%TO!y9WiU1(C1jgpHIY1 zwzDjfTi;i3Hv0N*wM+&Dud2VzK5b_3!3e{O)VI7q>)}Fuj^-pDR&nd8Y*7@3=twJb ze+U~Zk5fx*GyO7G=EREQpI{+SaA}Ul8lZqMyNX{(vu9#yo~rKxq55a(u?|0v#)j0F z`kzcHP(}gf$WueK(f&oGK?+Xfc1;W_H`RB2Z^M8& zAzEyYU;?p{@giYeb7I>7K^_cHg?q2M)6EC3vf`Isp_h@KFZRB3x9O~xSMR~NgRs|E zU#)YT>RgktL+?R{Gj#i=fC>AzlY!_HMkT@Zhq(*kMY^GK&HK5o-Rnp&7X`eOW#Ny?ES zHY)`)q>=l|-dq!2iif)#nr-<8OWgDto@BfOxHzG)T=>re4T-;v*=j9lwquK=@tDc` z4KeXdry6E=sV`u-=gLt*A+aI-6DPuV@rWN{NZNB=yyQG_!_gU{cA=tGL{%GG({A}2Bc>T<(OjyyT%;w*u z$;3riyluyR6w)u_AA6c+YSSdVKB#`#zhWXVKlP3t=&s98oxXeKi^coA2 zZxa4OL)<}LC25R+^wHQ+1kX+G%|f_ipE9z)jc|-T1DY7&pNYd2Wei8cUmo?saW_Ru zr07J@*2Q4{HH7}JhPfEM&4!u(*%0B7g#6g7o!VMpydGr}*xGFZL>9XT8bl zRO{;I4&DtiMYulCXNRANNd))vHLn(+CqLZqglc(4XEnwdaU5{-hp-0sy5e|&dP)QJ zq$yTgc(DNIKO}PXcx}>f*?y%?d!*jM4iWOBQjHh~5W=1SgKe0b?8YImVae1mM1OPX zZbqtMOAz+vLWTat5`ScYFgCl$z4>dJ1wZDDYs`thmI-Ojh##eV$Wlu#WjV5kCp_fM zeZ09Ms%^~a&kfH(i@ss%IJBwLh?15e&&aTS<2$!Lb^vl9uGjda%Wk3zRbj9v`k`Xz4^DG+; z5g%et#cc8QrWjY-Y&Nc)a(~$?G>tl7<(DnX9XLd!|CqkBDP^frxPztQs&jbdu5o_* zdFReK?im>$Qqe-BA~@;U3Tt}ta%IN&@Yy=J%zZ0Y>4)Ii>BO*Yd)@VsdWoU}U=mB6 zyiL`iu)+$Dj(~V;EoQ(_h$o=cJoKGjAZI9fadzgOo6JYyOt$s?6V1k`xp~pO79&^^ zRlmZ;i~Vuu{cgI+z80HHxSuAX5@z=4fK(HU5#aOuXb9gSQsrP9{?hg3+RFcV1CX49 zOXSSry}jVdcel4668X%A?)^*!z{03kj29l#6;o2y<{V>t0rQRAygpd_{AssMAphbP zs@3dK`B7+4S|BUy)GqOPorSyiId%g30SX!eM(&l7!*1e>oXT)BUNr-2mH2X2*E*(1*9mgH#nQAN6a0 zPy-V-YLYIw&zNcWb#!B`G(W?`|pP@;K*;=LkPx5}|U#LeGw{Uu@*BIIRjb zvKIM5X8FM2FXwlIV28@?9SGJoi)n0uJ0s&y{M$^Y2q-dezIbYd0)x+@CWBx_dhwhW>A7o_!$st7Ss~1KEo6IDhYh&;=6d@4=EqMX->%?+!5=wn=~g_KmH6Z6s4u z#@3<_lB2*D{w5T`d(zpe^7naU!4aV&lSM4vy-F#c zY~i_qF>vx5)7#WTXKLH?ymrmQFu49L_Yg%Dn7j{0W<={Pbv8AJof!6)qxqfk=j{-a z(EBqPLP-$LX0OQSF{hPFDr(2iONcg%wzd{S(Ie9j{|hEK#ci3(-|$MTz)LuM(x9$E$%6;ZpOC&G=&BUkF+px=E}(Yk^Y^sLB$=+o2KK^47t2< zK9XPCM5%0|oBTI6TfhUKK+im(AgZVc7|i(N^GT!z>#cb9A_uQA*>Sa|vBi#eL8ok0wqM^13SBX|I7^dvGWyBhTTWZ|f zO)Xt+30_5SYf#OEYVv=CoCeFw#lP+^Gu8EedCvAx0X%sjULXTd-|49Uogo0C{?yPu zefzG9Z60+L-;@F1Z$vKKKba}gNM32eE~*t1#87p$QKa>s9Ob^j&>X+e&yJ{%FE*1y z@s-fATUs1TH8x$ovWm0x;yljs&7032p(e15!QH0u<%ROLaw;0zb3@Cex6{U5G=ppm zDv~>mTo7p|lGV*ZwV4l-NZtWCH{cZx!*`6{ZUR(zSh%Z8mMXA#$wjYrGoRi3{^!UQnpe|JOMg6&rnhSJ^ruN%kjk!}JrlPF z@3qTQ|FWt5C6dmI_%Q}3nsLC@bXYu3?gp=$42kV~k#61hBPiPO>blTo-d9OnuF_7t zcE%*nDJ#h6pWct9bdvh<7T;ua3!297%mMdz5fQ6Qn;BwHGUF#!s2AY4;>$Hn<4DuiI4Mr#4j1AfY9v2u7C; zj$&Tc9;r!=)+4K?Cthw4oa=;9$nMg@H3A_P(Z0)_5QF0AJiy)9ZghLozWaI&++bME zya$^`PPw!_>@4nU2hR&{x%phK zk&|TE>LdkldV#?qn_cc`JviN`R9(=XYeU1sDE6{|MCMs%VB7s%+|~B-=iw1jU6+y) z#f_emo(OEM%WfYR>4Z`SsaBmQ?H)%_!g2Yt)1j z{@}#W^B&JqARUnrX>|{W-+Zldh#hj6@}bvo2!5gOf6{yFI(|xe6fx_t@h<~2nN$j;`N`b3s9(bqaT)xsm|C9cAS~P#FzMwi zUREpeZ}90(|0!BEK(28v3WlWbuyA8z^xAr{;zIHKroK?C$ol|Bdiw^VyL5O~Zc-TT z`~Voo-}_f=>0GSbfgp?N?X28HfO}N5T?e@hduDFj6_e+6^@R*nnW2h z>$mtsIX`@^M2iECWkD>U$Kkev7uSw&`f0LSr7H3L3|-%IZqPqM4+Kk*dOYtf!XUS7 ztH*HQq4HZUH1`5Sp2UVT8u2!`L9>4O^Dz4<5)_z<)MRUNSL5}ym^W*{}|iCtq5+O)v&I^BDcp|yvY}-;4&u+PKxJF0MXEM zjK7Nscr%GXhhQ;>QQy4dh|limmZkB5Q?3mWrR#G07Y1G`;t?+0I>)h+%d|O;qc4~1 zeVh@Oy-^bY;lA`WB&BJ9DzX};{x5_hCP;KxXI#kS0CFL*5w}ANIW_uJC|Q=-h5a?k z2L^1#EVyo)Gj=>33mM-<_z?84OH!h%dV3|?|4lW_FK9Fe`uh16E@w09iHK&L?FXI& zZtGcYRyq5PF2@5P)gC$=556z)u#>3*cKO#iXLcp!^L$fWyBPKJTaL$cjr~z-euE6# z%_aLNt_4XH;pHzMj~NB<8}w2(81gH2K0Y50yYs?u(m)1+fj>pI3%@qJD;3? z4-CKecfMJBSg=fbcJeR_k8uwZ^@P;%;4;Z`tW)dIHz~Sn9W6)zA0MK}dLZLK@h|Vd zuI*TyOsmBihFYG??dK`E^~kIF`Dvf2k36evW4AoGJ*Ntvi^I85g=xQ+aivYf8x$nW z(+czrujr0R7DI!^`|l$w=K0-QmgzN`>D~NY*uzW^GL*9yl{N;77LD`PmFG(L8Do|E zz55kKh4=cLv_4XR^m@ipQ6xA`{t)x0642re^?b$EvbdTA^X_}MowYv!7pR)uPMNdz z{0Jis(4HH9a;N(UfAGeA-YIvw<1-NSbIZ`?T1xYwBCk*y{K+S4NgZk1(ZrwfuKD~- z$R$e}JXjJ#OnCMp*dc~0esJKAl_~yI7F6W^IsdSo7^_JQFne&h?ZM|pG%ziS%Jmq- zDBgQ5hj$MBg>Rp$@_*Jc{m@nk?XEK5hQ6NhU>k>E8}L;AGi2K>NB9$}n~x4Dv*H!4 zf_Lj<-VE|=3`j3jSpmSuBDen+RbLqvN3gVuE$;3T+#MFT;10n(1PkuY;*#J27IzJr z;BEl|1lQmaJh=Ovob%o9KKBQ+^lWc+_uFq(_srB(RXHcE`a@@B#9++!pvQa4?eXlL z%k)Ns-^KFS_>ijmZl{Y9AeCozmB zA_A#Bkdd+UwU&{Gace_|5vFPb>d?ih*t&8VB5~xnB9{cEbiMJSA)_`O8W9T>;8^El zIG$9es7{xu7U@Fnet$H|N4H+#7W9uEcL6=}V75sL^8iwK9(!1_dRT{08WTi8{&Dyf zo!wt;t^&u)-ityRPUALRy(gDObD7sn0l9~}3;V(<30lbd@=H~@NH>`>9p%XCz zsP8ar8)>Bw(MOL!go&Fn-d<1+{_lFzy%OtYTp1s@DtSuV+H9Jv#@If#AC4;U{EQ_U zrq*6(e!8`fd!;WcOL0R#aeDE&yU#D(ADz1?>3NNxm_UMp`)SD`f#OddccURE3BT1e zE7G@e<_A?w_Yy@l_eCB~f!EIiF7p{ZZ}++>;>&F-zP=JsoOrL_ZPzhj%Dz=#ybae?8DMuV0^8CWt;ZUMji#fXDr0*Y<9IHoT^%yZw?=#vYV{5X#0$pNjdMlb|JO=4%Mxd$?MEKi*Eg{R z-iBWy)-wBhmzJ}YoqImI*-vcDz?3mppJ|}>3(l_%inbcp4DSX(&q)2dGw;W>rLlyn z9Ux~iqr?HE<_ntz_>sjBRZ6EfN;27X!sj^AGdE%dVr9H`+=xjq=8y+AmTVh`g&!YURyXejo_&dlQfS& ztyZ=M`p_BtI9#S4yAe!E+k`hEGw7Ym5Xc=$wsl#yB&?cy@E{<2COdSg>?dmXJEh01 zB#a;fiW@3%IIfZocR1OeTH;#~ibyHDhfd{?N@{KwT{sl|xp8^g#9+O+Ny#^`^}_b{ zAly3phM7m)V6K2S{VDW7Ni^J)8n&H*q*u-s!^>j6`YoJSwPI-MB;sGg+V2pc)d1CxQT8i-eb zmIM*mi80^7CjW_*#D(-Y!3n~FT4d8%GvZ;KEC_yR^*9#RDO1BXqhK0Q_j1Wu`8Y@! zW3N`AL)m}Axq!+jfH9#l{sFnh*iF|}Bp)cC(#_k){0K(aV*e>EZL2h)@CJp?)1s4_ zBgR@#B~b-wg(T<$ds46odnS;xEv>(&sCSW>9+0%?)$2y=!$&MaMTc8=#Ff4J zuZ~A+82^l#Uhv%uT|2YK}8o zVMxzswC^wpkuID*AqbSJ@;W6I+VT7x=VLMdKk zaA-?U(LwmPmb2o`DZV$K*ph-*(FHj)f{oBQ!WsJWdY|4hDxi^Pj=OAyGW8T3pfhqL zg%2|!mr}F4*vj?BpcTSIA;QB)5GbHS6gGZ~&D$Ogy=BS1$|1^4kFumZrLGl2RnHYa1lo|6D@!$^;nA)g~;!c^l!HzkKc z5mW(=)L`jO`udnA(s2@Fu82#Wf8j#0#86!_puv@)gGJ@EEsPKe^LlGRI@p&dRhDWF z=1M_8`J+W0A`zxmWQKt2Lbllt^4gqG`8C~<93c^=?h(2f{2M6-qt78WLW0*vvd<&7 zKeO3y$r0z#wp2ZJZbi#ttFFJIM24i# zWw0+xDxr{z*>ZC{U*3R+{LE&)H$s`t95@27L98hbaYzv$a+gzm#prT8)FEiMa43t{ zGzc*We;-mJ5+{1|3U1@f!Q@XF7#aZ~2rm$HbNpR5iYF2eNtDR`DY&3_^NMulMB9?A z8o|r^;V48%&XK*vgo?HxOpX;~I&%RjJ$hWOtc^a9)8+*Ax-K>Z34#cFYXHn*hIKRo zZe14eJ|oKF7`CvK;l_l6+&W4j48)rEMUl=r^orC%c%e5>%CGZZ2S|zq4PxjZA#`X{ zWnm)jhKGS*UckP-rKTaLH2#X%@o^F8bO))Ais;6W?aDx_WkIZAx?XkLUB6=_3O$0flykv`HG{dUbu_=z{~) zNrgaeibzK0Mx-wEaVa$3R?2bo!czo5);O0!tRbL7#N8-f{rx$c%o$98?jVP9(QI#y zpFvWRKL|3dk6TyMF{K^6=P{aI7R^&h|+XZog~SjWeO zW)JO!jmgKQVCu}qwq*n$<=i+bZ)@EnbuYE?KID#9si6TE1+vJ$gd9oRlLwOFMFUiY zAKUpKaVJ@N8xcp4o0JZXe0Up}6;Oa)+G-P`BdH)N0NlsDt2f{511y+CSkmWzeI`!* zL=tLFH1{7-Ay%ArI8P+{YJDnB!4hbcMS)WI8xwFVrNH!YQ2xVcB6PwaJ+Yw5>kMKU zj*4J3BASwqWbqlC?7!01^OZY1R;bQXNAD(LTlX8gZ4zi!mIlaA`at3 z!aLq~g!KKe5JKEH?*I;#+D2ro0M)fH0fZ%F_N;+bYV~h}Id~&X64y8dSOC;Cqb+Ek zNaTvOoLE*2-swiG)676p{!oTz7>A<(rUL5bI)=c*PQTrkr#WAj5{Cvs{B8?OLgiGT zbk^p?n?kl;m$!HIwhdSSn6mrKzy8SG@df}bV8;d130cT7^yO{hA@t*HPMi%(0lg#) zQ~HNxVO(gFTuZ%eJ=djf(_3oMFPua z1MiO2*I!W_@6UbiCY-0ZyidD2p+oXu3dp(HxRHE;$b0V}_?AcIQuBWa_Kw#Gpg{EY z_S?S#b3?2CyQ}^;t@F~ie^=|5OM;q9PBtT14-hfCG){xVWPNN`x!)Zabj`f$`@Rr; zQQEmsyjn~y@$?e4{#~ywfRXWEmurY?p1Z6qgS3gHfY(ew)R%T*B#PX z`nxm6uQlkSiIHI+YM^ml-_WJB*~vFFYtMlI_S=@(xPoLJtXQJ{F;xS z=1Gwn&IPH!Ys>DW=ktE1mZue?&z(*ct10hlwFt8?>8Bh&4V$$V>8c88sJ%eV6~Snb z%VezLQznvd<6}uQJtH9|H`DHZ3hlMor5KaR?)$U;sP$)~%ch~T0MW=I@yIfpfQdVw zC*7el@V0-?o@=XIcV7JHskD4|9^v2e%qvqMYwppG+%Mv8BY2-2H|+~EwInOrc`TT- zwo_Phk@xuF1{6G`L?9G7Q8yms91^l4pO-dLRN_(f8s@?IaozVl=WDq$(arOhr2gtA zC#QsJvGjA5Yt!E$`F3^QBx*eb>1&N9+~cvU=RUEAIC-&H=!@rey$yX3XR}(d4fg=g zpIo1Cw-0{hQ#`hm5;yu7$mn5wj2xT&HZY%lex7z@SyeC9|7-A_jERZ}a{=|+7I(3a zHU{$FU81aK$6;JO`A|eREPf|67V3y2rPwhJwR&Ot%n+DbF0hVMEvT(g*5vr)BkMmQ zGUD^s*jBqrW_Y<}+wTQ8a|1nYEj2kj)e#W{daNNSo1ogQ4!rR+GLe^~ZF|t=X;@9l0$1c&oQ+*w*LV zwsw2V*91BKs<0oYR5o%oFWJPir^N9LItJA84xJP54p|Qybr zIpbK*-p%*c_`TclI2eAtdud+}Fc+(sSG1NHZ4fGTLyRn$rn;$V8CqqvJNY3yUDk=5e-W@F0H#^cCm#$N)+kZh9jjy-EL zddl2KnYmL=dt6d~a@`QkAt8u)4Ydm7bb(~mYVj*J{qn24|Zs`Ep`$obV>vmAwQ7)G*`GwT6IyQ{e^3o!B z!8%*6g+D`YUU*OIRiIylu->>h=QC#fR_Bt5AiBB9`A0?Td&VnB#_e^S2KEHLTI)agJM|JTaP%@oh>C7(T zc!hs7d9lL_I&%$Y&v_&vJJy(A$^#T?5O!Y!~Q3y)aG`UK-0N424Y1&JEbjiVqwQj*{+Vig1K#Nc3}5Jbtf zzY_>HIY4S*eTJ!3rDQP@*?a$5qtwl8-KwxWkgD{Mb0})%R=HN9C)CNa(7tbDxEIul zKFu7gte{9D=%K|#uad$Zhtki1m_#@Jud*Hu4CReoN2 zn~?g=w8*mQptsAa)ZI|tU*CF@< zEnXS%ulkdw+dyz24S{}te>K`Qqlu3n#5})s>n(Go%$^p&pEYWp&T`tJ=KC)Q7iuAq02_4l>lTc%h*lenpVHQOP_$N&TVOi`Hs`5if1#j1o`>G z3dFl!*W$jc^~2Pzl>;dk>NP4ocK&q$TlhhoSh!1=N!g};`oQH6BF`^^9OvG1ZJ{0! z#LiyN;)rlLRmL5Msqb@f8tK}RGt7+Qt%d^qIL20cN`M(trM;0J15o&t1(~tHufD{u zr?i06bOJ3L5-<8>VWFR>3Sqc7d)LN#0(T~zb|FlqrdKIyQbx$@71x4o4v(=$b89uh zSFZ^nxTA_mYU+^=_=Bz)XzEq3DHc_ebKfGmS;Wajf~ZV?^oZ!!13tWi7wh# ze2mC6-AtJV@nuOXi?|S*#;>6?Iz$c)%RKyp*^geEWj4Dzeq6?1IR3k8uB{>D$H6ME zqTc_k78X555PvnJ07tRPr0dy%7bhX2s^XyQoP?{`0b9%CrCyl;io?L%f;Bl!guJH_ z^Vo4^Hxhmm%t6XUDFU0U8nGOjs)NSutC83X>(YdsPW#>zZy4_ET`$|!Ip?zrRDp%^ z-k&5&r@ovGmm!;)zlWFKm2C>C4K;JloOQ}wJ%-nqK_&;OWcJobBXjrXa;2hhBE+rR zHJaLp=kKI5SVs(9w`}cQE2FN*N?siOt9?nXm;Bd1QtXE>EjgO}8TS$tYer8ke?Mlb zN&kh8+@MKuSbT~=+0*R3>C54Qa|0#)M>Co6NL->O#$5VfV!Q)>gp_{Xeauc@bf<|{ zP0!e|21vPRAHrbAv@Z7+^-LBf*2n%$hT%>ghKrnUQa1V`h}8w&eN$5%v`(>k$(6I6 z;_*DI7I*n#@M~mi_J0CBzU8&EQYsm;Pd}Qv72Wk#o3QR{8YDrUlb4y^gpwL_E15Mv zVwGW6pc(CQR5zE6jr>+_sx%>ubH*z<@T)00QHCu4Z4wpx{yU_Fnel2H`^m5Gi)CeO z)`RyKX@3rs9QyRDHpx@APMMf-@Q1sK4r;xuhF+8iV@@V|nKs^(wZM9gN#1PJ81e<# zE1Zco4(Kf@vw_4y$u+P?@C8!K`!->Q83a#Pk^!-;)E6!Osg=E8WtI2TK#;ilk_FK^ zq_y(+KxDRLT`WN^apQouLB0A$Y9lRT-*XVMb9(u54!R{g_QgWYax-C z0zwIyHZ~KdsTf4 zJW8DSohC~I$@dNgH>$5Y2G_KqkL~w%sHW2rpHMTC+h^OL9J*k3h~K*c!!)=CgWD1_ z?rVwz{=oBB1HVsPCQhc}ogEU#tSS!UdJF|UxpvB@a0yoo@6GBpMx4;C3cAT9QUx82 zvIJW~3N%YKXGA!g%jv6)c{mY8XDYuLv$t=Dm?jxcOZ&u0)~o)n2?lg1#p>r`G~QRY zq8fg;hD(Sb6=Fx@9^cmg_R*^7-wr&3;q5`d&~0YC^xoIz8mqRBoZ{@uaXNaF-&wQ% zLFf1dTm%(`T)r*dvd8n69sWD#1INGf3{x32t})1q$x1CRM^9lFYV+bLR73wTIvF%& znVm2?jWDM>>%Z}IZslrRpI%V2EK}fwjIE6_m&1qHTQlF~Z+`8enVQvZvl@F6L&9`! zk67!n!kzRV&1*zyf<0##q-*dMp1sx)ey=lCIsIlx9i&d<zZadZOH~n6%noO6)2&};JLTd9ULa|K=B&VF z=hBw_kwIKl8OMz`nu(9%@u7%>%G+fXGP!xR5A%QW`~t79QR<6?6?7lcJbnh+v{ zS97LC;jQt=*mR49BBA6liz;}a2d|s#bP0);Ut-u){@Jr?ki}~D9SZgjlZ_YaT9EzJ z@q65IF^z6v;(YrvJv`N==PBf^?XxQl{RNwtoBQFfMkKn+OZ;O$eRmU=f(z9ucZs%E z+wbEp=(2o#IYf3}3K#Ofw%^lotk@dem`Z<3tw|s1h?y9V^WnII?#hYdUhxP@P!*OO zKko$D*fp1^-^Z^pAW_Mj3KlNNfS|gZFI!~dJ2$F5-9GZQhV*%A&bAQ4Hc8e_1Q^0^ zG3Ufie6J7_o17e@uR3p$*sEmXr3DN)_e=tB%hrQlHxu@BKN_%z9r2nb%B(b8h1`5G zcv*Nj%mQA7e?FanJddtEHTMg?$|M{)Uz*jl20HE;TKXGe;!L=GXJkhwE_2-*x|n7S zx67TU7Y>4pZ{Y>@|4fj+Qi6yi2^oG$`GOoQa_{IIhv@nF?G(FR-9F~v=e@xQC4_f$lX>Gs;UbiZ$ZxOR2mJAm+q6W9+y1R>tk zaADU5f76T{6RYPLr|nQ`mh!IUr{5(O^03bxV4Ijgelhuq&M%l`SBnz_7!oqKOCMe%4?~YtN#Fp)Otzk=a|2gcPFEdoBK%Jt82t_a~$TUi9_ z;yX4Al5G1tq73Ho996svn54+5PxvVP>ZYn^r*3~~SX8KfHOH{3;3wIhn)-#p_W1!X zRczcDGMV8KA0{Ywpx*fFTvu}wIiVC6R^N}7R;Rr7NCkn8c&A_Prw&Kx<=M!1EG0M2 zUzL{cyxvL$q{_@u!srk8i0TMyKYQgMhMdm^SM@JeL#M%)vEap}DID$qm$&FP z96zS~v-V9o$?)fmh?aVBe1(@-(wbd!&=<)t#Q={ z*NJ#GAQN8Hs24R`-otpcy{SPx0@sk&;)Yu%qQH>;)5FDgbnRLo)DOp1D;&x#$c@BUA}5H6MMwPM16&d-co9>*Ry`ur^z?vmpt)*RjDR&PFjOF83m>* zT%3g1YxLbFP9Ubjf2Xhgsy+B}V7y{>eP|w*OZ>|N-+Ld9DvKEARjhtjn!LH11r?mP zuhqw~$Op-0Rws_tAcpw~X}TxWoYmSxAhX&$qsm*mJ0)%lX)+zDHV<{kABz0H23p>Z z`o%XU1p4}#=pn{e68@cD>d}EyW8Fr^lGX=x$c>pvm`S|C3)PEb#neOB9Um#o%I`Lbk$#dHVb&<918SE%TM z>GILXQAk~H?UL>6spIFsmj{o|$Aua^7yD9Ttx4l9<@DmuxA$)@o-_CEbh^4npdrR! z0?5LV8R+Q}`LvPm^2rYtqA0ZRb3nA)wCA_+f?&6%_7z`fDM{1AG2mc$cl&A*tt*Yb zW7nA+xxUPqX91XmvxvcB!?rW1))O^WK0<+U@8U)qxs~2Ls zcCdN{wA?6-J}GUz-=b*qLQFjSdi*-ha{fx`#;TyX#$+K+;BDro5i3stRUtYeuchk6 zlP|47J$XStqP}C#uQDGJ1n5?#jc}h0TESbRT8`X%e*6>5-R%&?3|T-*I<2>6w6Ctf zxBnQGVP7^s?zzbpSNL=b`9erW^WT>O7)8K)2m%89V5pZVm=e+llg2Ob_p{?M3|zRug6wY#3J8$VT#(z_9;xg$WVE2X237rlN2(+hxw+oo!5W=xX6Q`W0 zw6PN6h!+=_ehgI1z#5((YU7h*<}&)j?T921H%E0z(-2ASqxir})wd*5%*vxq+*25l zqN9(bv>0nGic4qw2aAGbF;r@%Si{SyiUH=m|1Mt)yXeg*E%ZGbDr=_XAvdVMHNg}~n z`*>81-z#j%qV8}#Rm8Z(+x{tEX7G3Wt=dx^c2PyWkERl%S*v&Dllk;4-kALn-(ri$ zY1AifRu*jJSMRkTDR@DrHC7B$m$mScW6z6-V~FQPjRmDxR^e}j)eYt&4hJktex@8_ z=JqdTy^P0h%#Ct4aG$2>s_%sDoc(iJnmg52(90@oh;$t~k3Cg=^`q_EjjT+Fj&CmK z$8K%-1ZzVkgn)hEDDR@Azl_Na8t3}3$m`$VQ56kI9Fc7!dNQlSGx;4^h>i0I-;z0AyK?{)23D#*LK?ssB9;)^VSXleos)eFqcD zqFpzU^L}aa%>Rz}{)Cu|sd`mNekWW`lNy&#(mkaRV~8|7p4$+O6qaERQSN8#;4=*`&q%;XLiLJvIMG7lf^xbr_?ssXn7*K0Jc`^;A zn420=6ey&VuUsX`A!vnjz4)BeDhmX>n6#$@AP=idQA++A}mbE)spk6{*&tPlv`jH`GNY70Mv8Op?wn>YB`zwDFpSGQ5}d4a?hWTRJgbEh(ORYhbtRA&iBITi+PqIuy3IVGRN3|Yp)zj zePUHV<8^v$g@Xq`?tolX67~wPT1hKi`sZy2BlQ2YOz|6@qB3~OqhTI(7fx;_sbfP3 zomiE&Pyv9QVX`G3wn5(*Srsv_7xHYb!(I;K02hN+3L`y(LdQ{Y*ULm)YR*p0S0uR= z${akoVa{a%B7i4IY%xcr<^!ka17jNSh?iannKXBiyCA3L^Ko(m)A?nf*mWHe?KOA>?>?3N!*fMXg~dZxz>GZ-+(< z9T+oP+q1bDg%<)1M*o5!S6S)?xGp6e^{(Z2UMGahwHXx~CXSr!7MG_00Fs-Nh~Ho$8 z0d&GC2^9Sv8$zk7KVaa)UWpyx^%lyoE5e#mfd?cJnEo!4pCi;=p(~(a*Wd{@>&&!w zV3eHL#EuAgO6;XC|9(dPm7L+5ENjC&5UXO{-Q2|p0 z9|6D%6t0mm;PPC>4HZVr>EQ`9z$h%i%4`0Bk}@;U{Bhslz3RdtkAlxLNQmKtlm|~# zl~Mn3qqswNmqdy051HUXs`>(S>PV8+7RJ#mi`JwfnJ z4hYWhjO6b!>h5We4VR13KW2?%15IUd8POB;sB#JS8ur)-6r3Vx!{q%Af2AYf?eU9C z9QWMd)#vYW*%COV}(S3`FQxSY3=f>I#@j*f6v~ zIN|N5h(CgoHu`_d0lQEGoJ)fd4y(OV(}Feryi;t>md^`hzI;O5N59zxY)^{-B2C6; z1%DS8spNH-|M+)kz~;Cf$`jkxWymOMk-#W#=u}__(?hrbR_F5)>tOTnV0!E#hcoJ< z?f=3dHU{KkAre)AJa$EW6u3Z>By4hMBqVS-uH!2DQrP?GgxjEQseE35ssE_Yh}LSX zf?1A$%fo{p>`o&~LmNha4C6l;D!uj!_;ys`AaD@i`ue-#J|TvTffsD)2+UQfU0BOu zAdYY$$^d4PfE9^>k6c0x3hS{Z{^(2xD4c#vgGjFwy=|{E_F^o)G!-y`jhNCbL}+Ir zGYxWDn{k?Js3;^=p9|i|_9F1~D<}aOenZF`5{Ky%NmSNRg2Di}=nw(AvCTV&u2WBv z$PFU^GAxj#r6Ya1G17G|$T}eR!wl8*1Z!B8)ro*#$FJq{&VMi?I4e#&5%vtEK&|=q zV}0B+07!{pX=r5fd8N6vXe5=TkY|xUL~abDWf*S-)>5K#q{Ho_Kij7i!`1!Y0$F%| zj-(BK&qiot@c85hRw2wu5>R?7APM#ezu-vHrh`bq1wu~g@z1G4Yq1#1bwl2K8TO-Zm;KD^|Vc!y*z1NQR70@~XLzQwBr=j>%dv8kAp>Hgj^!T`VSu?tZaywM^Qck&xCT7vuW6=MnIhy89vu#j+*OToXiXG<9#|k zprw~7$%%>Q8@wCb($a%r6T$M)&ti~$bQgrv(_ZVfu)dOGC=8k8CSY?XM3Ffa08NwJ zgd;rr=g^@AyMl}gurVNVB=ny>5Pu_``VK}Ak@bU{*xj$8KmWwb>@fgy?c`?YLcT#= z?n4BaX;p4yZU>k=3t5(9RZtGdD&h`bU`(X96PW6B7y^x!1|rA;y2i}3wecCrDQTM5 zcIZStVJrYye{=GZgO56xDH~V^`7=9!NkbNkP;r9E+bjYNh1ded5rrfJM!bIrEuJ=b z;!M$0%k^Fj5up7rdMfoV-L>yj4!Atd_g%2zWr|v``mx^=lYalr*ozjZ^z;@jc+=g% z`_W9DsPi6Dv*5O8--XArt}42UlaGiHgdB?@jN-0sX?HQ>Ty`p+>jRIQ+Max=w`Og2 z($E-E+boapmr5dM?fJZ)D(LBj%C>K4^gyCp)_=wS_Sm1)r=FM4SyQ&EVE6(D;`5e@ zvY?1|r0ccza;V!OiQ$R`8MO8>CZ+ec3^G1uLV7=hHfm$Vg0Us5pH|cMa7qYTRzz4A zVMFbsMrE8Egh`PZeJP!w#?VKE9QZBiz`uPcQn2yO){foJ-KYM%pu3s8*Ogzt<4=nw zo@3PiKE#KdUZ}txXmnS~12s8m6xQ-2TEzX!+rdt}-^!eN+8MY1ji zipO2PbD6a;ihDRWPU`}%FHY4?%xsH;+Kf*B-43^p82;N12OzySQxW^wp3$&}q3&{% zRMRnRj4^z<_V@B;^d|T1nr8|8PtPSHNS`2(ZqA>m?W_|dC9rUjb6XX)RFcygbhp`0 z^=jC8IhT%=O4=I4lHpW<04&H9mLMxGn5`rQMGUo?JN4N6b+N)U zBh0RMXcRTIVj#Hi@Yb|n1AQj{96WZy-mlDB-o#fKB`ouS*fOL7HTGNFk?7zN_pBAV zil5nj6|28EXTwE{5#g%th(YTH^uYnlPUU@PS!#JN_(ICpXI$D%h#?4G{{dB#?lM=W zxuC#JfXX?7?O?H>b&gDcugN&y3F>P#_Hat*B(>zIOwhAlnzL3Y)$o2^@YbKoR`nSX z@>rzyUUYR2vTm+WA0o_~nm)Ulj?N8vXyM8|ugmQZDmwFU7`krhcV`l(2$`g$T^!$L zW$KCuX%>Ba21)x+?G{hFGj(z7=e9vzoWazvlF%e)unMd`bj=yeLAAc#?Qzh-)4LsG zJcDmZ^kt3jlQ%R6pUCrzSN#2{5|q^iECPW9ysn-~c+fyI3=Htc8z zD{;9O(Qvp7X&m2iZJ0nni!^(zZMy>MFV;hIsO81DheVk)UeZA73sF}3(y(bi{SD%* zh9_|bUn1&kX%tP%`0~}M;@?FmQ*(@wHYMTK(n-ztdD-@7QC=B9>-MMf-^|P`45M+M z5l*(=3ePNWNB9fgzkX(a>3kZ`?tOW_&|2@}p|oIeAphnZKbZ;yP=XKoWpQi2tv{c- z`IWC~g5*b!(f%HRHq&LQ*LMb_T*%!L+XUQSvD0ztWgbPPIC{s6m1!)HN;j>=1NC=hULcRCZP#0N6s&tWFuA?t|I8{SRKQD z({m{Pi{nFa$l(K6$o6vYEJX}UvFEBiK;MabPgl0&eC(?~Vt@2VYNURA>%A&41$~!r;q}4l zUc9;XA{qBhNUyw@_j}$o$Fq=#?Fe`b)0Fs`H@vR`R<4RO?=K5KkE20q`K!^t$~2+K z405DC_l+(Y5$E2K_;x%$;}A2bk`-LYe!T4)tk1Ztx=j#xF?a6GoiQ-3M~-_STGREc z@>uS0>=wlrrFMRZ6E4|>tzDvO>iXDN`e_zU?o$r%`0kY89lifXA8#p876Q1aH&lG+{y;6f6##>oV5;j-!B&1kNAGu zHy-hQy1n43{r-KhMyK6Ww#D#4e_zYeM9jqZS4??J+mCKz1yw)j4qTC$!MyTOfsq3F zz#sSfdO=?HM#jMu|FtUvw2C3IovX>DNp^4za&(EKnXiR~?&r|^l^RV?&OxbM?Y6fs zg;Ief)iy@$yFIFq`zN0v+1e8)(Z>L<$M3&~)m0VdFU8c|Xgxkx?Lrf-YbicD6Mt%T z`_jDo4Xf7lW|&d*Fs;=p052j$~${Q@3uJ$@^bmIkTj5kpu=>yy;-S_?|lBUB*oeKlY#g7E>;i+cA4?q;VS;P z+izwG;jfiRW|`76@Fl_ls=_y8c3V%oSa{P)DM z)F5&Y{~=6y#^E#7*jlQzj*K2Xb2z=B$dL8wjZci3kUQ|(w?9a@)t^W7`wj0;O6g7|9wSVjFv-@Nw?9j7v@18DvdTDIl+XzHI!h;pHVJ5TVF(^^peIoo z_9k=~bu&iQZS07UjrC#Q-xH`UET|C#)8I>#@luqXwhknTn2G6yRwEe8$>W2Biga4Ukp>F*Sjwq;^Yv3Tp(vY(Q%KF zMU?K04J5$kT`A?A{j%ho3LJBn7-D>qsNGiTA4&Mr)V1OZvW%b84`U(0Gf}vT$yNb6S~XghJS7ijFwE@aXD?cX8m2K)jgsUnySY9Jy;I8ynW3{wU!MMf)P$_cYn63H|pPg-K}Bi?wBJ+9z8YP z(Q8MLCi;8oFF3O&W z-H7@TywUqlHW)=RpJ@>-x^s5Kk#f$y?Z7`hcztZt6gK(3sOT0 z>>Gq&Ua#^jw#2v!S|GXO6#R% z-)}|k$**Qee3KvyvDHqzq3MCj>+wlGd>z@j+Wg?0ipTp;t*@~keh^otiegcz=c%RG zBCB6UX*?A@K6~J1+M*d()~CKD?T;0+hl&S)F;v%c)lSvAbDtiUPz#yo^W+w$X6K%YO8m{>xPq)tiUkEXCQG zkj9%+yI|_~0v1Zjc zHu9o?X?#0ZM279-g)j1_`wCm@pnl{&>S!&yH@#wkX%GfW)CT)j`UB&WlHQf7BAr%f zq*5bB!8>*(G{wCOrRnl)oC7*4!(lPM5ag~D4-R(voXKGQ zjE$8@3HDqka%c$o??s=)re2m}SB4ptow17aj3g_`(O`ADI*{SD?ze+ zzE7B2OQr<0nOA;-*YrxkLiy?*^f*CZGC!=r%mML`tze8d^BaS`%Kdo~Ea|b{T9dfy zFHe=f(IXOw8Z7>494{#N<4horS01{_QX9(~P9(V{9agT#M+4vYm>T(5E>Wj@Sw-fV zl9(LAXgp*22fW{FN5+`PiN9EU@4i17^InHYsCyN3*7%PE_~<2B|0HQE0cS?7R?d z@sdIE?r+DQYC3+Lvb}(6hfOWtlZ_}d&A0zLeGrGo2=EhZwy`AnaeHtjc73#rar&*I z^DI91A^Z;dsWtwU?TsVu8}{vY31-%Q{fo7|bs$Qk!qyCZ(ZJd93psy|Sl%ryW(7GG z-no=8WQsUfNhtlMf5vtOPBg`qH{sF#qBA)}f%sSSp)Bm4xUa)#J`YYtabZ3yP2>fg zEeQ$K_Fb;4wn;oORy1cmHsqay42@Oh1L+``BV*7b2Xtyz6@dmiW!&rxI_mfe_c0DD z%UIbw5dCZHR+}WoxHAU=24)&Defi~hNio#jF3PmTf^j}-{l_@XC)@Pl^^J3)l=gE- zYX#O)v{4EpyA6lm&QxM}0^F$$bI^&hXQ*&o zP}?UMlbxiGR>jRZRW3cL+RRQuzyDxEFuogoZCD+i+HLb{>L0FQG|F)>af?Po?NY`3Hrt&0y)mW`&%{`+8@_1gSA?t{Dg2y9QT>0*(|e26e@%aak&( zSy{urMo=+_YiX!7n`*t(Dq+!Nf}vOnZ@J*piH1El^<1K2I4;c^>^EuZsp-4hKq~@h zy{mL6Ys1=>ve=90C}%zY*!$RZ2$1kG=v^A%enApbPeL;D&C!!*$!h_6eS?tn?YU50fj^o*h8vMM!-388%i=mc8Nw9aNXqQJxgbJi813_| zVC~B}X@N>E4BI>I{&FjOH;BC!glfNR0=_-3 z30(zRodHiPM&0_Npl8^=)=0G!*mrwGMxJ!w5-i{v{1M!91n(CZjzo=RTliaIn!vx# z+T{N*^_F3AEy1EF?(XjH?(VL^-7UE506~JgySuv+G{G6%Ex`%F0|dBhpL5^+-jA8- z)l*g7rM=o+h^@{j$bVH5lM%GvYYWWE)2&0_(sZ`0TGmGPLHaXBR1I_)?%PR7C{oTR zTBa}C0egxmq$uoK;Izx)P@UwE|AAQTt_LIpyp4x3AtF*!BG(eGrg$D(VDd}`SKeyA zJ4H??V=nZUdW(H=2=tPq!*cv4AjCa7n~s`GiwX(LkUbpNP8h>`SU$@|NbKaR0qIfC zzCuJJCpZ3bget1)uIrcR%?I@YrIQPHYPxu58oDB7XN2L@K>UP86huN~PY!ZPaE_Z| z7@DEfkVxqxo34nm44D2-#QR07hFE#s@43V>&JE90ES>4gh4xVYK4{18c#1%!=uG3c z_)oDFtY8v6r@^&&c`B3Y-kDF{IB60*L{O1>NFWgb7HBr}ZUzcsYk*J?Jxhp{xh7otjT?Yn?#@vh@pCWiq2G z^Cd&^22JV*gWS_a%67<@rLs6Rx}R8MoA8VpT=+Fl!yLNSX$RwoTs3iNV>mjYbw5-Z z@Cy=7h`%j(-1Q(a%WxHQrvAm$Y5II z=AIxX*gvM#(Os#lQW)6KB7PCFHNZA&=Mu<-!GY&H`qiKv=DLjlSr-#$qVFKutXX9D zFN#0{Q5I!oAj9_CBXvLS3=7)6zb6Fy<6g^-{t-ehpRY+*6!Zls173ITHDwxeQ+E~S z6~`FOZF$?1eZ(~+XU7OKtFQH*+d0~8NymQxRQ|M68G0bm{N68X|BL&qdE5R8kk-F5K4lTvW2`&3C;j1;UcV2D%_OeGdIFAf7N}q7w8%ciz|cW4SxU z|KY4dvd%prz_)$*MVL?xQGA(M-rub23-7IIPVGOuL}tBAP<(D+5b*_nFb|UxSj*Mz z$`~30$p)0;A8e8LgE~Am7!tXqxZ7-J@toZ|9a|MTGIW& zC*tU|1B;a{>H-Y5{0hHo6&^H~sRVkS^YXIajXv~t{m7RKeI{6pc&3Rs(wz*jgLd<$wwmzUK_59)Q+T|Pvc{_Go#Tf4d#s2= zJ}r8D@vYmQNDq^auAkB2%r3->LQlVzS7k=8o6+vEX(4^i;cPWeu2u8o1rr4*mhXf{ z=;g5IsYD;csI<6uitLeEa@HgkY^D@gr=HXfe6o?6OBfgDv381qDNE_tCd{>|D#`Sh z8}H%W0Ik#gYO_HYxz-=K{9Y_#nZ0$$kRcd(INEz`t-QI#R%P$Mzv}*D75o8NRV4l5 z6qpl`ceg{~Gaag5r@;p9WH}UA@=Qz*j`#IQj}c6^ukHNVhbT$hYP9Ng^ej@>Xt9uB zHCdYvb};3Ev{b1=SXrwSk6oY>3lWax<4((n~H@Tfu(BW36`Nhe0-Y3F+Sjsw}OeWtQ!EQE8EGi|c< zZYjl9>w%Fk@SQJXPBgP3MQrcUSS;y8+CVIc?BT1x%1__kltz2R0cjFl4V5C)MKqz$ zeJaU`SarrdBJAQUt~Gao3M$NQ-rbq|*K9ZkkFhVi2?~o?p86kIKM^Ospod;RZ^ zX8tWspRV_k&VR%^mj7n=98xdqMO*UyxP0q!`6`eB33^ys1K>*fr&-7K9CE2MXRkOe z7Oux2qv4OMlZzuoWF&Y=46_S%lt&!vT zuE+R!Uh>@jMQ!Jn$?r*=e~&c<@pHSH!JlL`P<^tj^?jZ{(z`tPo_cw2>VI-zygKyc zR-1Ngi-tAfGtsSBS=u@-h(Cl>F%V#QR9V2smd~l>?T39G z;vgtvw`}04t0vyvzKw~E;Axw5gJyBl{`qem*gso-`j3wI_fYjZsFWH-24!f>kaze5 zxbCd~?d2T?2w-P%*z!qbxl2irLj!%htQ%rh!>p`8pl@f2NJWwL5GRn8^&BgJoF#gW zPYmMW;o}w)L-O?Uu(5DP^4q*JHmalP!VD=g;{*-2D*1jpkcj7>@J9r$5aIL}SmJhu zx_}Y>AlK@xGdkazA!+(@WfK%oYgDUMbH5^+8^t{iGJ|-ZN1&L{Zy59cdv<>pgT?x` z6Lj!n@8IMFdrijZN4t=bWCW-ArNI|Uh;)!UjfYzKe*XC#d)LyQ`iEH0|^yMH4 zsIls~z@m_LPuE%G>SlwGB`4$`fkY{q<{9t)nj_rl1gaIB@yfQap{tEQ^vKmE5ak~& zR1OTO)X!*PYm+S-R!)+{3kLrI-H^AlQSs!f$(#F8W1T{$%0)6l(d(WKYTvSqi4&xF7C%L*MSv#QRW zH63q!jKec-wp&`qy8R{xZ{JCam3=biaqz2{vIJwI-RN2qj%fVS;Ps3L}b_bt!O<=g&&RvUCnIubn)!>7-Yt~2N> zX;*(bBiNEEMqF!p6^`n>Wc}l@mKr@cAR_eV=}m^PfW?%~zrw||}_Nr~<= z*#w`ADc$2}-Hlwp`DBMW7sObI?6Pty_3l%D>)^=0pub<)RFT5Sv^kvShe0qcazy!6 zMQUJ$(hTsh(+hn$b16gKV#Q)a&fj(#rH!cCujTI>2cMP%sa3+i2J3mLEeJ(iSGdX4 zu3}Wn4oZ>I9Wi=c8Wj&XaF;2EQHIW{(Fs?%*9a+m zOux3ow#gZ;u>8uWb%kut&;mj_JKQ#H*F>X5u_B0+#G7KFfwPKu{bPH}62-3xHB^1n zf%6qgwqvFC{m)yp_y_MKe_5}oyf=3l5#u}Tzil~h!VzCklm78Q$?9^1F2+QYHLjkn zRAzhb5t1+YM}eI6SA;aZJfko^G43(GN{VoK+@l+Bcq%02b`6p5ucIJkOzN;=qvcXK z0=%#}oEGfvmEt2v6*$bKP^5+zKlFuK9Z|>tVW*=;cG%{V+Q%iVF!UjGtHUOw{g;|d zcOjWG{+k5nBQMzE`iIT<8`g6v{K@3TJMNSsoW-Chr6?1+5*$PBt_;OXoht!SL%uwv zF_E9A#QjAa+Ts~+^$wufZ+V2w(&sfzg|_p0pR`Num})BP_~PUml#jnnr`0ay0%oN`B2fE&1N3H@i%qU6>BNO)RjGGj7)R&?F z0pFsBjYg;a+0l;DL00h4KYZ=KJoRa!)@O|6boq(wnq%o=)%A? z8Rr$bCDx~$LerV{d*u0C@0)XNwQW?NQ+N;j3v~=6c*8zh$+iPWsvV{NvJYtn^ zL38Aa`?r!pNHq`+RE*|Ampnz64CV86J_ZWS!SI4&tIil_<{E0Rcb*}v^$fy>2i~1^ z-iB1Bh{45q3&&7p7~8ftoz?*JD3_5nSB8<@0mUDMKQqV0KZZ3^cT8LRDNsp^neo&^ z65+Rk(d1D@M&RFnMdb%X?7S;Xp$hz{^Noh-I9vw71>sLrpsI;T7a4;)49aM7E6He* zc4=H|c9=hRx00-$P+POfmWec^Ik_A)Qu6^U8wRsdxsAWk5QJW8q z*EK4y?Z;^#x67fZ&BAiCra1R3tPId&zG=)7vI9e*vZTL#PAn+f^QI3T-gP&!nV`4B z*2iOrn`Jm{L58AFr8naT{AwLP7iAP3QIGGCjFc`qwbC_J=CNNBvngN}Gp+Er(%Qyj zC%ogkABu>VK}}*AULSNLt7j#(iCw@ygf7hh%)xxXik*VTFs|IY1&SYTIXwU zSj}Wwi~y-!jixHT@N|iq(DBMUFC-oEaWcbZjkb5Ufad97=_snfQ*_?A@Ocim{e-?l zWx-0)Fx;8BIWrBx=k{N$+UNi7e93WkUIh(_e6GTRx5DjkR34P}=}iTzEA<&$h7ad# zLGlt1SSm4Qh<$h+>S8)Z*lH|^`}f*-$(`t8%ib+*u17JsA->o}Ypdc{!=hrmHl9i( zBmXr;0?BthI8kb*1w{&}OlY63^TQ2if6ScuBy2)WnS7>KR;mSo)o<$|YAnG-WA zdtcNlb_~>Se!KR!Pgi&e+G<(ae7ghx{x0vG*3!-_Ww4gzx8v)JPG+LYjlF58%9wRU zVMm(5N6fE7cB-qtq3;j-#>J`;GhN>_#=K%Z3BtWz+)Cc;>7iNO7r5K}a<7G5rcpz9 z=E>^97_6?wE=Os)?4QgBT^%&UW^j#qsT+RGI=@u+q?#Xauf(`s_a#&wT1!)>{nl$^ z-E6suz2q8kBH-}u6d_89LXolNNCLC#G zhGKrf3po7c-H*lOMV}IVvcoE3DSqk*Zj{T#nsDnle=@dZ8p7#d|1{Efo{RIW(#J$@ zNL%yKo2_5b)iFgUoMn|RKq<@4yDTbF@WD3`?1{TCKTvNOOE9dt#Tvr8EN(YUKu_rA z7xJoi%vdVIt6}TEurHk#8^&?$?7_utsSGoW_s5Sbh z`+IIjc4BMg(3AuH<%4?yA(UGB@U{lB908s9up`h;cuL{UoF>LH%9au_6EV?YZHo)% zGxdVIzjInxv|OkhXQLg=dXB3*NV*vWTH-ZgL_0D>zMPeFoGke$vG%g$I~rm+R(HD8 zQ3mBE-}xa|De;=TRT{f(sybSLIGEGlFS(?d7+%Gm_sKm!2v0(Mxf&50T`Zt*%Gsxi zlf!!xF->rxY5n<$$=MD(N##{t|9(>m>Q5xH@1D36F^;<>{V4T5h*mFxjMz7TcccPoSMe}O|DT|0t3Tg1A0>G*HP*x{Zu+mfvk}< z6iAzxfi)?uG-jU1Ae*2_pc}d!##Wc^W(1+18@9_VY&G4Dw2Js|#oTg;3xbPgft>qK zbV#GSmNxmVf9UnIPOw~bI?7bi&a~yKjk^_$kbBTKeG03FHD#hU&{9*@nJx*{*YDG| z)PJn{YJ;(nGR@5!e}x1ce{1>cghz@KGPH4oclp{KfvZW{<)WLa*B#G{H8Rz+c=e++ z=7~V}NFIOZI zZDhK|;S5MQH}!YwF-Xg1HN9(b`p@#bi|Ro|)5p17_0|ct5^=bXO@ea-aMZTO1V&?n z<{#o##{0MkB^4*)6TdXF{=h_KXm-MBOI?p?W*!R%$rZpjlkVFqcb|;%^$2}a+>jKkWUx@d#sQW`U%*RAj`J*T zd)yeqcc%%i$v950Z!hkMoe=RE=z>e{ly)HR4f0=amf_P zCs|h|6u+nyfPkCGlkxf~hkL@m~Y*ZM~>d^_` zzlX@vRYvyLVqyJRI}?*B3#=|Fr3&w*r_a!mfTmQy(^Yk<0JgOJ?Cll28dMjTYItR% ze&H#p{Fc@0u&AXz?>ycgFo-jg!A)$;e{I74F$y7;1PKzU`|QHGX`5N*X~3A*WZsea z+poke?YNQx%Lz6QUDO|s*;j|s4{9Ama-itFQL$6^G3tzv(MaUvhC%?jc>+R`Hoj|1OS!pu6Dze( zRId#MJ0gx|bIdikK@wBot%56TyHE<^w##Xj2~I$4{1l!hUEpp#-#@#th@BxD`kpEV z_m}w>qZ*Su)C9BIlz1HQG6gzK57srF_mol%mP8kM_y=xP#a2F}dKzhzh9vz&TIOq0cz;{?jAva_ z3D$y~-Ez~ZSj3m_#TH!JC6!|kjB<)XWb4Wrj>YU%CI9q;RN|Kzgsd}ub?Iz4OgONuv_-p;-x&v*@E@2cC)U7bktSBfsk zYT^6QP2B_6qf+$gOC$;$*R`7o)>EJ0Y{B7X)SH!R-H)6t{gmA_Qfz1fsPU|DS7v*#Z%3lGD}93EFMLZBM4F7*Xfy7Z2rOB}%kAT{hF7D9hn< zTUPdUImK>OSDbF5EYVxk))V1Z4R8#g-}cw9Slh`0YnA*YfMz`Vy#>)mM-ebNuCIa}y8{wKpE?jkUwCPjwp9p${j~ z$}4!jk~FB@?r=DJXx4eD!T#~3KUfoU%V(CSs5fYP|2)WZbpNO0W^8f!PEtl7XrZyl zx^_GbvVsURbkeg;R6BUAX|`8wtApLV_3u6{WVa93B}q3)~O1tnlkM<~bh$GJ~6OQhYna=Drdi_vghS0PcpQB?b{#bLAa?q;+sDP|Z zF&Y|eW%K9k6D@IExm0~+nlL10D2wo}}}&G`K6ruxqv^v*ohhx9M$v5r4_`C54T zy1aIe%yEnVlak*Xlqq-`A{U$c6&^Xgdu@%WK>cd0$=JcyepG0BAxfVIyMtr*?*xv7 zVAy1u2m`zEq4z%%7u;>~EPn1>2)P*-Y=mzHEffUfv_IBwQ%Y%)mDqCvI!xUw`$cA$ z1qLXb5n>x~jR%wk43>RAppRP~#{YK==6l@#9fN@s$XetPCCB6y;QGH4?E>8YlgR2W z1SZpUq4;&P;^GBRvYa_kDY6z)5RkLJ6ba;H$rS=K@55w>G+7vEGALOl#R7?0szn0K zS$HMDygW%UkQyiv2+g|qFJ)gU;Gbp1Nrjn}oJvEIg;oZDh?D~4JO4}VmjdKxWsr$s zczL<_vP{Z>ZHDHfZBb9-e?CJa`?a7OXy$~}@Nw*Zz-PuTNHYHZUVWZ><3%aVO_=Hj zqnMH|g@~UB5{Gy{!QnXR=RF4p2fqA@;jVkFdzMCjCmsy(Pt7!FisZ#_%Jx9ZAJTV2 z2}O>PV9e3g@(6rhyE+>xdVj`wF=Eg8wJj6~i4pGbX99G#0L6B2ZT8{!a)T6a2HfeS z?kmGntOOEelqR0b|FtPd+3^Qycyr-bl37tGcg!h#Vbna4`+1?(nV`0@#}T{Pkm%cA zGtkQsdB}@!>01EkrHDNr`K^9X#0hT1Fww(JOQ0F6>2!m63OG%oP4AMWaD(~W<~PzG zJHe&Nc~j8Yqi5}GNNvydo}J`s8`et5$D82D*@)->d2-laf{oZZ0pe0T*^}&%z`o}WsH`|eb zZRnk!=+Zgz?gHH~RKi1k)awEfcbE*gXh7&aoBIf>2rpXg(v@qMsj zGHPVoe$Zg8C}$??&m32$I->l1zsD_8D#4Ma2DL%4DIt0#B6ar#1!5`mNTO!p{EIUG zkq+k7*C&xK?@a8&W604Ap8g#ZE}C{4ebh}D?|~(?74kJ6C9LojG8>V3xbd)T*xg)) zt>0xI>WnAZh&~9$@GG(vw%_ruhA8|AL^-N5MM2+Smp{tFTK!Cr+Awi5rX+1@dComB zTp$OGMz$mLBN%9Z`F6NF;{5IO36ZZq#M-JiEp0IwPrZdh@Q~=2s5VQt#ozDm)IV<4 z@(s6Hd&Q?A&G>_MZXUv$oK{D^bAr z9|NanlynG{Cc8V#NpEHDaZxRYn@*qs3k9dwu>+2ah>_eZp zufE|qZ?zVElDlxXrfc_T)eNx6UR_n#VHjvu3D_9UaEssC7Ge~Q)T*d*tG$O&O9vI2 z(1w%D>6^+!~YWppQ zgr`)0l=rv2uTfWs#S$iwuh8>CT)Dqbm6~`w60nB--kW`cHDh%2xOsc5w&7uF#}dEywF-#R{Ea1d=bPD;_&! z5@-=XVt-NR#4{?n*NiLsrxAzjrqLfp98;1v*MKbtRe`7XEoNNj&xq(Z1sYz)Yisve zg(0*!>B)IN%q!oHZn;P_8Wy5X9HMy1p_tt^93smDiZzK;NnhHv8Wi+4riqGUqyYBM zDC@g_Ag(*p{jyLZhbT$7B|*%@exX97MrE~3J5s22`{o+^NR2s@KgE*@4x$b|u^llW zmbIub3QHgd!*1&Q!x2bKScLT38-^T}M{V)`rcjbI$iWw87qZJFZ~&+>H8nh|?J_qd12Q>Wx^H9bZZBxe zcdb>JY7HnZVZ(jQICKfPtOZLlwJC~~JrXmo2F6{#)ym^DPdlJ|eXF(nz=QwF*ntK0 z6*?$p)XYjUB#vD6UodGC3N?OtSB!EBbcKZ|1+GtC?^~|!qHu3*7_xVR2ppr#(>>iR z7kBRGA1@g@^G18S{2<=W?m3R}J;PTUvLhlem@1l1=Sh{R61Eqg@$4muc2_cC?R&uU z?gd0|#v64UL=F3&XWs0Am&L}8g@>tfU`+xh4WYfLf&6MPNeix?SH(kf+3PNDo{-g* zqnd8yBkOr6CchATYiF5_MTI5)rUo)f+9o1BJCT)6Jo?c~90)4D)BUj%N332D!46PG zK%S8>qnyTO>_--L5f%1S5yX{O{wk1e2q<5shjG>tcu-6uxg?jVX-h!n5y9R4eOxgb@qKr;VU(}wuZQU8zagVeB}L>fL#9XTK?LM}1g{6Mg@)va zW^IVteNxmYyOjI+8KongSh-NQK@7mMlJ! zXJxCh>m?JkDCT%*yaEuK?9?2D+>lt)ROXH#eH`O{B}qAwh4lQpb6Z}ObI9TLjBL4J z@QNyR&K#HMkIHb;gwJwMu+hzf+&DykeO`^myaQcdKl2296I)_oZJIY9Oh;h2g4*m0 zWRhQxQfr#8)}!gktCa=283+^gVpLh+)=qP@I4yfuSv`ze5hYbZ7LF_`3Dn}#_40~< zBnsjhV14eX84PLH79kk7BdJ$o9^jB6b*TW0Z>Mr^*|-C1R<0}pGEj{Y$H zanWmHqP;awU%k1Ul(n7b%q~Mo<+BsWSXn&LrE8k;67A(N9S*M+)8=ka?g($)$>nZP zxcSF(FX-s1WOjL{1|5%NeX3vL+dn!l{dG$b-=T$+^Me))Y82_foE^5$MGenVU|(GN z!SXbdhQKtT%+6V*)F@xoFpoLBKHEOFmb~#)aIoX={AP8t*z}dvW1qO%m^&WO1{#r; zk6*<_D3q+Af(~O;m-OTcLfjpc9BJ;zXlxkr;855XDd@wNj)`rZgyJZ~y)M)`OxVOW zf-JhqT;A;s$`u-dMe7be==KG@Vp5x`(7i$q1-w;$^HL316V&+jgKk)3egC@Q9M|yr zul8DV{?AD$Y3xFiD85P|tK;GzIK|Rz#g|V_d4&megxGdk{NmJA8$Kd&;)4;IXZR)l z9y((9efF|H1p24HN7v5MmfI&<$=Er0BE}>lDx2XN6O1n$p)S<(;ihLJM{0XI>}!I6 zzc#1%#qCe;)7K@b8?7`v- z5y7(}Dt!FpXR_38JeCu>n+L2T&9J7eKX1p;-5G{DdvwO=cr;N@@2{dEa&dj)WOb`d zUFMR=?)dILtK4>{op0k;Z0%Hgjb;`1+G`ilN?Dw?YY_Y@M?GBX_uVjiaBp)!i#eNoC191m9zNoWRv`}qV}yq~AOQOvvk--lX4)4q!ke`s zF(O^Dq;N1*r~IiR81M_E&XZ8f)Z_W81^>IxcTc!u=7*O99W|C_d1~hsQJj+2i4|S+X}5wn_ml34 zoP_xyqNcY@uZ&#jU+UrV6w2nN>dTm%{U!4aZ<^3S{gY8{Szr#|7(w2Y!>XlybwUnf zm7?c<&b@X~xtX8gTL46o$RC=4b@9y-`bYHiE4)A1&=txcZwVK2n#D*g2j9>lXnNC` zqN|cVRyB+har%2>EIONl=khnxbEQYxajB2$;UTMQ@N!`XAF+|pkU5xo*D0yu_far# z9j+(x(IPzM?OOMblRVtg??*s9J;o+7i@9Nxpx?k*wNoZp(@nM(0XGW&!?qn-Q>`Le_OFG z($eL4?KIT(4IP)-g8oqrD^JxZ&G(ttgG~9CbY2455A_PWUHOy)@BY!Zh4*7RqWr|U zQsY$elDH97+3G`!!;qgydb=${vUVhuGMR9{oH1QNw8>;UhaIf7&YF#=<@|N9IZ|2} z{ny!9sJ}Om&B<(`tt{rf?2svEyoUk{eG@$%IaoQBzll^0MQ0bWjNR8Z3C~1jSFUr{ zc)8p1JpB&8wollM_9RQ-9_fTlMBG;6`ZJ>35-Z&I5zQQE%*B?@?}196UUj@gn0i() z#X@QXdcOL>!~?3}MSu#)gL8%V@q(zq#m0&V3ox(YJ(_^?3-y3TbmT?Rz$6QHE^dcX z8~*PT>GVGVc&9vKm#)Of;^>^;fgDHiNj@q{wRJ?nWn38NE@bF#?;2QVT5j0xTD5Kd za2Dr2Lpbj21`*E4-0r<}fzE!wtN;EJq@c@vA{pi?hg4wJTaj4E82>Dy;?+N}%PJwb zgLpq8vCH9VgYiubiDO+V$B-w~eID{{U{7B3vLsWPT2jDKikaSLDKspFkE}hnH0)`< zNEHLcXbCi!QGY32Shk}Wly{fS z@g>XN!UJ_lV+WMZX)~fItG4B9r{ZtxW{Deuy3|^EDkg*xBsG7hW#)HC=*L4szSjiV z$-(6gCxBm!oo_zVA87aBmHsp?d z8z{Mg^<#tGFw}ywd0gN28kH|Buqh*VWKUeOZGDTYB;M17-;}r%)L3RF+Ed9MUAx}*=6)>eg=c&>^7L=;F$63rSDe`788>PV2*(8h6J<+T zf2mZ>d1-A0LjJqC$%t@Ec9PTA?ED%Ri?ghcUmN1MuvAv-jE(5LY-oV zh`B1q&X0;n(W^PCAcrV-*zgac#$|g53zJ8V6FRN zOUmYq;!4UA<>N|T8Hy9Dul)N7deh*vBng+Ay9k8hUehh@d0+bQq_a35D!yd>l`89r z4t=(eQylnNK**bF0AhsA=2c;aEz~L{beK~d*M!V3p$!$S;oD5?>fjMN?<$9K!s|^! zuq?J>f_l8LJQ0bz9y5#&2twD5^Bqt1v1Il9s6HCpG~ui)z`@xfP!6PGFJzS5blZ1z>2D3nsSAM_7Ko!4`z)B8PUIF)e}7%V4q!W%^@mn}ys2l{S(4XOtQW9p`OLck>;n6CWnJALZMaHn(vU{oVy%VTFBbc93=1zb;C_4(H;FCb; zPoLigb9<;kNnuWN-M{4e(7FG}#?#~P=qB&XH}y7{2l1YT4#E2V6uFy%aEp0qH+lA#VqAXf(fbRnFqhq^#!aWTMj_MC_q@*{%HAg5<|PmM1;o zF=yq?23730IGc|DWrop?Rx9X!tGPtcm%dQn+3N_uYDdWv>Xc3AT&~AwC7bqBdTANC z^nb;^%?w-VGpL%5&Y@Aere4YHZnSAP!l$F(mKN$vos{j{+QcF<(A_wxu*c%|$#(la zGS%9@Yhfd6$%IY!X^7QctV4})u_54|UoPlV0muVTapczkoLV?$i$B#zjBRPy*^dHo z=XaV=v|Snz^hE;U;?TcicBwH1ey;Im>v$Pi^c|r%t1J9pA+Kw0rO> zBWUFmH|97RBIs%;X(igzqf4{aDP>n-2@ds?PwuHay|1(_I<}bhvteJuQ_1!t5me`^ z1LF$OY8IsD@Cy_2amO3!U8&*LKIfo`+iDvvt);<{A^(Z8ggBOQ2*Qy3oQZ(a5jc1h z89u3(Li`sJLApWqGcM}Ig_(ActK+#@1ZYP}Rmd0GbzFm+0A!z!ina4Wtnhsg#eCJN z1N*#mG>O-tas2*(9Lem)m-8-AL|c9Cjjh^M4b@Ea>FgQ)Zz`G~5h-75fkAo|;>Tw^ zzkf`e1oBkD*LIxWIn;6pL!KqLDGDg4=M~r^u!mF3zee+#+$!)cF)kP^xNe@g${)Zcv-Q!z{~c0}Df|DH z^+Bf6{I{%6FiTU3(+~>y(F&a2TX->iDDq44FbM;cNQ*+x1NR;n^gcR!^X^Fc8?rIMBi4VH^x$EI+{JXZ zs&goyE#_j{H+s!butEs*c$)s38@;hAWU2v=%ow?<_o3pVPJFw6ldWm@^Wn>_PIR}ADCkd)d@05(Y#9tKwz z3oK`HYlI8V7z-~Etl)ILoa91om1c4~nlzE(W-4U@jq^^jTb{79FK2IEA)2 zG*>&xe5r}{3dD-?yyXey+yr1XumOq#{aJn#&fqdu{yYN_E@&rtB*!rJ>xLGj6Cf!C zW{KS74MJE&Y@x5Z$vg*c9pU9Y1X?fJQ=`e?Vh#pWMp7n90}iBAsuVt?)YVEwY*8jo z7l0L`1UX4CUmd{vi33owG}@a?oD#J+D@B#Vt;`oCx*nzbDxQmFD2ZbX9-1A-=u%1t zHNkA3Vh}&&oTGxFcA|+iILAYYD0L!Tdnx(8;&ZQUDXUFdBweqTX&QPBg$<)3^Qlr# zye-bpdV9473j3>Z28GR1$_nORt0;^nj8EnYXG$FM(n@+$!9-fUT4Wo^;EY>>sPsk{ zGwyP)ig<%~&CqrVVRFO8>grJj3BzPD2UwFD3J@VjtjsuyoTQeQZW#sRNTOyk&gg$d z!IF+KD8!EPBBf?J0;DTc0Ma9LKv6Zz7QnN@@PEm67by~x8ZVVOKn(+D`h{moHW7f} zNflrLxmn?rQJl?;GAIZoTv%^vq0;5rzF-NUGA1Ct0~A$o4XS_|fkx^&!goJmUdM-* zpVF!_E981|BBdUS0gtd^bhtd#hKAgLpzReLG&^*qm6B?`iL?Sf$p$ST1$=S_bW-Lx zAC*p~6UbkFUo8ZPL*Bxi7yuZrX)u%o8+_4B_L{TAp>U=|FC+LAUyggvpdydTD2k*_ z56~L<^eq_#E=wi?FmR+w0Axy8&hmSP^%@}gO$-HqI{*VkaJc=4LfV1bK;aPg4Uo!O zLU_3|S{a1{J0K}d)Pw(cYz1&S76HK8S$l;uO=mt;!&6OBKpHWzMDe8>oN)lNlOpk! z8k}AuW~Z8@kZS;;{Amz_0#X$hQmSPTF|6Vulc8kNh(9+_ho5%*@?QZGk?C^) z2XHDo3|P1;KuRwEzsyBTfC98ZpY8&v49xtOSn#R*g#o znq7)dRRV|em@+FEMkT^^q_op5%@Zp+aRU*9l?W`SHKPk?TY%eeQE@Yl@`~naG}$K= z4c}i#QJ%lNpq!f!ED4SoT|r8oz^K&3VRGb)m4lTV(hcRA!0LcXgc;{3Pb+661S^7< zQO{@`5~I9QdH7W~p%j&?fqlD!4zP-X%77YLWdXm+ zjt3NwVweY}OQq5T;v3Z!;2-&)cxmFEr5eC;d39@-&Y&={s#*p@@Ca8lmE5p z#j0H;Z?n1#@a})5z^pL!BSkkk9rT|7J~_dPA}uikq^8OU0VgP21Pu8WP&k>66bDc$ zRxCg%g99kF7J|n?wye|_a80G&%$lV#4(bL#%p{eX$vpr03zPqU(Svauz*i#t58n|4 zE}xIBVpf(dv3wT5-!yMqSKjiVV~*=XSz4I9+bd#(F@xmT)#))adpkH@3Gjcg#a_$0 zuH9~Oz4@9VUUc$`ac|f`A8 z{1w$6Jas7veoF*IJSjH`D})uf1r06e)SQHppB3UrAz^w;3gWwFrC2Q5_ppT$*w6_0 zyUq3KaLDh3foXQcZ@y|UbgU3RWel0-A0d8{uqr^tqf@(}Y>@5;QVx&(+K9S>Md>Pq zMICxzGa@R)rvm9gt=7WNp(jA4w=5U7LuI!#_?6@A$LFmvz$&C%%lJtG790eBHifZEx{-;MPhCbt8n*O2&-AQpw4*%Xg*eH zsVGB#S-^ZEMbWP%o6<-Arv$msYtpZY6x!-H#sCrfJ>Tmo^jG9&RU!h54thWT7=uLY zv&+&B^iu1B(wbyg#d(SQjRq5lgB4k!&r9FDM(8?=Kn_yN*0nd#+z>AyPKc}dljt9) z65ZjoQGMKDC5VL<9T{d=3C`a;d=NtBeJ?+)bfYd^SC)}sZEcL3;{Y_>s2DZA7Ra_% z4udbnxD=5!pLRq!nBx#K>G;fb@i_0xG-((X(jI=C%!Y`t%PsoN+cbiD15tJ}VjTL! zo;m3Mag_nA=T@V8#{Qj*fa}ISZXO_n6~H#u{~hUlE|P4Gv#;{!pdPnB7)#E$9jcsA z?K2L=Y_sKtuzocecO``?vqbEM76(!?mHEZOu%S0h>t;MuIjmKZS}@B6yP$>9>=~8&6;U2SVMX%%B7b*33ggWid=rK&sRX z^=hn>RD#f$fw*rODe&{vS{#6W#IZxC;~6gWi!%ms#QG>vHXhPe5NQ0gkb=HMgrvbM zQ_vWWd+3Q4r3|eH%T+)yMqMtj!Uak_DgB3qk>tb)u*gIod}ywYfW8<3w~jqB+G`=n zC=pw^M&L#t5nW>heVl&lvy`nB%6;NU1%1i*tJg(U8_CU9zvYsYMSpUA9#F42sTByc z!&Z+&F;1c`4~JJ@75)cktXT=zT77{(OFA#U4~KilUnVDn&%@dqpgZB!w{`3O2Wa&f zeE@DG+`Bz%u0+47urvG@OG%*5$;BLze(Nb;JiX?R_o?kbw4eAp)v+hd~;#N41V*wD|c@}PtSg$G0#yCVJNDb=( zI#Zz)Li#ww)u3j(i$DDWQICp;2RiYDC3(&V#Hpv&59pVGS;Y z39o@6B)HHEG;CWTB-Cg6$Gk-7*l&?>c%y6UJOe5p8XC+nEVw^Lg!4P1G2dI>u0-g? zqW}o@gi!#)pXRwI9dRfMPAz+VhYN0H(#|~5eW%hoA`Mg2PHPm|vsyI@^a#DJ0iprt z-{m-qvxO|I3j$&)e^{u}mZqK0LAo+w%6)!>oB@5+bj2A~;jr8hG*>g0;Ru5~j@VED z0s$C?dbNt|ID%n477&P4W|c7f3}OLG&M<_h)HM_E2AeCt7FSWPb>iGj$1x0?FxOj& z%R$f9cdCu-%Cw%i0VTjp0{#q@k1JO{FFJ!5TzvtHxmumI`NfpkCLy4P!xE5EoDMta zYqP>YyNHT;s9;I7%mBp*mp7aCnMjfMd1Tkx1#%+?{eAKV5F&%?l5~)g4@Ch8%Lnku z0y0&-t~~tLmtZlDrfw4m&-T?BI=G@9es6R00U^DIR80uak?1yE2rri|1x8qf6NCWK z2-*vQ9s_u|%=)|CGiw~gSgtQUh9I-zbr*iUSh#VPSq2Frt2N~c7K0NZdoCogrDmG} zvXRsWB31BItarYMCyg83*lV?(l0kE#nyHt$`8OdtS5YEZ0nQF^SQzYu0Cx>Btb+UT zLjVHus=I9zB1(|8Ss^D8tinNiKt($2#f*}Q`M&lm5;ixy+j81*IQ3KqSSfW{aU4*K02vUsR`)c+A?&8-?+L#W^i8ujV` z^l^mMEMS@Wj`HkWNXb6C&(*jTHZ~n1Pb_-!bs2y=lX4W5;8KwGAILIG2-$)aff#rZ z-<#HIIH1NoY6WT$Dsrs>c&bmtV-(_Qe}E7tXwm!w8DiX%68iu#lv}G={*Wy(KnCuF z|BDJ(bA2K;+7iR+=y9tlqw@u1NJEaC8Tub$Zem#jbl#~)^l2aG0{+VQCX zzD&L!orUQ*DsheQwBKU9ul3QD!m%$rhse^G%S_Q7Ko^pVZKvOdwY*`PP2(*^ndrO0 zU7ez1az%l=`$lrSWfcvRy(j}(Q(6zYo;)cf4f4t9);P|hFQYPW0Km!e1*NlS1Qjh% z!BuI7*tx~6065tt%z=k1cf`d{*p1N`*4Tu8f$ZCL#IUZ?(b!ICySrQRQ*tdX(oF## zyQ`q9fttMU%`VrnY7RL4m^rdP4Zjhm*m0*=^bPsSmF=?@(Vl-_81=DpNaM6SXeTY~*@?pik`8^4huOH)cKSO<~Km1bYK>ar$~`jYc*5V{+e&YWzHF zKh^*Dpu@b1s?$J{;8bchE0C(O;LaoUA;%TDk}HR>X?+lG$m7;D!SA`UM`LsG zTel<5MznknBrkcH?Ls%MK6Y8dzV9kxery%TD^x!4XSE4=U5n=bcwBJ}d3z{w1F`Id z`2D@hqAW*uoz8N-KqQ6uVrQ8-%LR`2bxggMc~JAO+C?;QX_#(6ea?9*8tmBIeSbab z`gqZDGP$PvD%i#nKA&mp^mgM5`nPip0@*jr`5Y`Z<8~G~?SaU*;cL3~rla59zWZ$O z1_ure?uAso|9kQ8vk`3$TB7Xf1_jv;Os>6j4%|8My1sNYnY8^Mn!Yk1j-_cg_~Pyw zf+V=RyL$*uaDuzTBEg*y7I$}d4ek)!-Q8u8yE*T7|ID;iPjz*5?`%&!RenY1Ki+)> zseNaPCKm^cKY#1ITXNg$a(L)<>{w}Xv`MRNl7GK#%)MXb;s*0JZM1<_VyhU>o?eS? zyvb*nS(3c9@wum%7jfqcd)M{I=l3&(PKz#TSBg%I^izSI6)Tsml)oRq7Z(OX;~+cW zHPA6tNN>Ziit%-x$`A;yc2Zsxf|$iVT|&V(^&C)>iO-FSey*A$R^qZxyI86od9c}Q z^frhou(fp+bOk#cfiKGzW@PUd`js5SIx_n&*;hf%&n~Dik!L=g#{sNouhgdpKQ7)T zL*)M+ocszMnJLtb@?bu*^+r)&xfceS1FD&9cRfj==@WdK?XLf#uH^8qWwe5%x&&s6 z+Ip9y1>Q4V8#;WNdC$RBx(htch3*SXnh!bnJARKxKV^H}Zcn7w^&5cB^2J3x%hT)hAOKBS~M@@#luc2uqd+gXdy^dFn?0#KZKD=37{P-=MuatYt=&0aVFOxKujJi5M zOHckJpvko=PY3cF6ZnDq+e9}4f`eo>per47O;F3$mJ4ay;xV*x)74w8lEXRQ*;7fUp*v6P zuous37N5(++71oPI&)BiFZn^EK-2r+qg9OK+Lps1-hnuMXdy7hy-fBGC3?->U@x}# zd^DbOb=<+_P+U8c96H|ksUa>AzNwGT)vptNnOJn1tt*m7%oyUIkK;f;)ngf$)36%G z{^^~tSi{$aXTRxKq#-Z25qSgZ8myD|lhb|#%9SxLwC);@+3AQ<|!b^?KU%HIs5kK&qkSKy}aQt~W> z&%k`;E0sZ|K7LDY?@nv`%ZAN&bIxR9X~1E?(=)aGBJtk!(nXVRqYLk^l_veHir5++ z_xV2;8?CQPw5h-G8zQhfVmR0JfX#a?K49+mS(PWfwUON7+RXfZ+K8)t@aqOd?|eLN zLfzjVfrAgg_m!O)Wpw*De$eIP%*=++@y$Wi`U zE4ch~OdS+>3Ef@XHS_wdVNSQ~tn2r@c5xs|V3TL|mDS&~#@LC`_lGZv%Qu>R9n9NX zt#d7go#`UB%g!l?Jj;Kl)?Hm;BSHW#vbz^vt_8v)R&Auvff^JcfL^ZLu#gmmXk zmtS}SxQdW5mXu;_!2i~yQ8m>PTwPOHqPt#bZ;jHmF?iv}!0H2kAe7FM=z;H*(jILe zaD|-q>jOW0yz?L7jfv54>jk((=b)mZjv92@yEw@#{s-=NWROYaPb4!t)BkfI09w1m zKmcvE^5Fc>3qgDo9|a~S@BjBW$NN8zb0Cvhh=ICP2$v=lU^S2J6nAL4;;XpMYKLFTXknotVBn&pa&@ZDbC7 z3_d!1Hnw_m_w)0H1j3|d?fH@YiF=)J*`si zM4?tNP2E?9*phKxO#H2Xzecd+%BtDfJau8vTsJ!=D9=40ckOU;kBdh15L=f=pkdvW|A#~^NW zml|Xr6MPdIibP^*+td}N0gcA}dj?x@PUJYNR@A`b49D+4sCY39Kq2rmaH&9u5`|jF z1eP-3vT|1lx{%eWJ~E6Ynvl*HR^eAoC%V6-Q%|Z8bncg3RSJsK>ttK}c#2eMd^qUb zCF3|q`z8Eo5bR9)>1Pa<@%}t`L5YwbtY7XCvYJ&Q$U8*3>m@9}L0LvRP9)$kwrjhw zmJ71}>xq;_avu(7lAs45G^Qs=ZR3y{J+I`V4G;re)A$*n5sf~K1kgietDuPE?B}7S zm}(eE>qLm-Md1{~g$t-e<>~MjSum$J{>eJ!YT|$dy;geU%UxV5+{%Insg`Flg9@np z^cNp;PV{oXtm{5^8n69^Z;D7uQ|el>;qIq4Ek zt%)^;h92OOSFi#Ny>|F3jBr4lyKovw#-E9ZJ~sq$N|DACF2K%-7s(xxo(}8oq4qbm zhochX?v69j8TMK@H}&6T(C2cOc0J&=(Cu@SBx?>r$}H_m1YIe+?7ZUzo) zYnTegd4kp!5JUazAq6TMEPNgX9^jnOCm?ZgmQ^iI>zghUzwex{-lN z0tlLB|D$~UM;C)b9m8=836T0FtU0i+Cx)l+5)XDfCal>34mSEj?@wF|WLQl6$~dcO zQ-yycIZ6*c!r&m8C>;vO#%u}thH;41RYB0Nvr~hCSLvUPDX6E3ama=gh~y=8`}q&u zP>QQ%^S>VX@HI9?rpm>8abauGP%nVqk>XQfC`zzsFPMPbB8n+9)-TYZ;#1|cZ=V4! zf-}VzjA){tXlOBcSQs!`^C_lKr^9(;uc3!UVbO$ySgz_m|KWi}?G0CmQh=7gV4wbI zF&0BL!h$Afq7+N%P@M=HXov*x8b}{tf`(rC8G_tesc9EkO3!8DX#QNv ziY8cx68Cwq8Xh*G0zd*G9)K^Sm|}$exW#yw!f1pO5ERT8m;VTmhM4Udfm{VZ@Q^OxctTJc>uYE0b$h0s${X`-uS$`)` zRD+0VMe=LN3sRUeokO-o3^2tUqKwUvpVzVC5!Arh5E@PAtZa&zR~R$i-6-dAqwQnqwn{+bGzTf@%Utu!L1U&?2sExoE;BR}KySaU0JMa^t zxu(1n|IwINLe!cai)k^};;{+){9>A&MBtz5l;BcA1=txi(g9qMm1x`H1fAhl5Wk5` z>TSgaE<#;2v3lF(f4Dv>#n7WW0|WL!S=Ec>@pk4HQuJk>)cH zpvQ>Bln%#Rc88419mkHxZvxR99UMImXeX)iC#6D=hq3(*M&{<3X&r;x6va*8Qe z-f&~4l>1FYQ93&ci}ha*hyW)|d12#hRrbl0SzZd_sjseBL-06y&CpIE>eQ<7S3@c2 zfXqw0-7y3lJ<)7pRfjFcp_JIeI0qoyE=nwGE+uwcoen!TeVBjx7OQGs^uHT5WakPW z&P^KK{g4n?JOsNtR+Jzq8A5&LFH8VcyyDs3j-?*Ph8G#k;zgmK0OWZ!_p5D20Sad2vOm1i^JSjDD$o^N!Dx2t}?T_A| zV2zu9-W8#QW2%J@qpIy7GDaXfM_!NO$da2tjKQwA5!s9hkx=;XXMm}8SNOk-)G!T1 zy<#Yk*r0e#5^E!fhqN8~2_QvCjC3tj!>;K18jdi$$P%O3ZgnD{FIDCoP6HIMd5~oW zDXMHOER*B7<>B|^>)GK^_$IJ8|9@Up5X#Xm_Q4H4ceQvN_6(w6xQ zS;D(fO#HY!admMH^bln*&Y)BXO`q!!p>&YgMY-{;qL>;l{)&fjxX%#-`CZT}m*J&! z!i#{sN~_kX%&H~akppn_Z2ZM0s-y4&KIK{fwP^4l8e;WYj4nD!AWDqW2QAvupUHg7 z5c9eDki$!Aa4?r*igP_&j>(Z65b0n9{MOXEzYSS4^IDiZlwNqY6$}7?3*$K>L=p48 ziRq-A!(^y6N{%0@YY-pDu|I1_Y*Lth5d8xOD;SA}h+pZSiMg8qnVVX=-~6ySqd+r> z&9Fnl#Gq73$hEF`SL&7lUK9KWcd9PTMh7Cu-g3y2#1sFLOMyMj{-~uI7k)_SBXLe1 z&wdzoNUmB(5bx0NidBpFU)Peb%wGVe*jP->*%o?Zd=U9a{RwV@q!~)O12X#+LP{ax z84j1TlbAGSQiVgiMFH+WzFkih=)j)*FGpG8 ztU9cCNGL1?i&l$Cu@o7hAU63JPU(=}TC~1|g$vsnBUx~XcMD`_p)$7?n@FI~y-rf8 zlkn2Pfvt_IEgo83Vvl_x?X2qw-hR`CdT=x!U^M*N0(Sj<1o08K???edCElooYzMLb zD+azjm7Gf;-MB{-f?T^^Un;Ob$I%Z8`)@Z@${X)Tkbj2Z zKPv8mbrGW`=0H|bJwdECX@v)wV^YGkws)S_m#QWOWM4^bfUbAp@AMNjz`=R^n?>uc z&$*wu&p|8camE?v!cp!0TITb?`BD@?2xx_|D?NZGq3dwy?zOvfm5-&FuY^>Fxl)O* z!=_L@-KzJ_?e;W(6ot*iEyr$<+fTn{Sf^U|0o4Kla!g(Rzq)Pbp7r#P=aGAy7^-aP#s@NM0H@_K7voDdj)@j9RM ziY|D4nc!jXk2*m(Q*fhBt?HgrarEm-@0+9*1Ww|YOMuYEsp#FP-~G7O&8#0XM3)HP zUdQ%4-&XgaXiM6foUf0LseoW3dr)|${lEc_QlxTvm0!KvCtH1k0sFJg9|NUsbz@bd z`|2~UlhK64FUQWF_gM$<>}jr7NBswOW9=xq&GyT4`F{ITmjK7Md#?)T-eK}p(Z^Fh zAh*s+N=w%0m3)xry2B3mThv!~0WwEiU3f$8jLORE{?Ln66eDcPbJQ)XB$xEcrpm95 zCu25aecDO)zCTA$V%)35JOa_fg$-L*v z>HJ1RPpMgY?3nN3H&4x|W82{3bC}K@pzO2H7sX^=33|3#1f|~5*6%AyJ2u!+v30BG zE1C=ZpH-|g8Y~XXHTM|B9-CVpwy*i!GjQqCiQOX&MF@lrGSSPHD)>WJJ-+5OpJ?z& z<>#gP%@u>g(stFF=2He%IvwIVi4&P$VNE>+A=Br666g-+`0@2%Q6vH)YZHNdi)kfwJa$$s6Ay3wJtc7w9eUnR)3(Q%6RfIskiwn<{A@FA#k;ZA&1bi-W&UXO=jA%_uHjWbv_n5)Zya|4 zS7T9#yG5;4aZ8wg&B^-LN%h;~&5X;Z>Rp}Jz49D|y&V$U<+(uX-w*R}j}osT`Y2DE zF!oyf!rS&t3xoL_E%Ew=7dKp)6}dkhPcA;eovoA+6T@2*#yK^=D1M_|0fIW5+TG^b z_B~z`zQ5j!Zw4(O=`{U$Lp=%FLcQzpy(r94GOUN*H#Dd_&Z;m>!CD=oFV%j1-h9Hf zh^#8^Spq#sYd{$qk!BgNI{D655!f1KEJRI)o?E=&?-fd&-_*E2V<~;f!9O5|s-!gA z$ML|AbN+SkL<7gAE24+(4+PEWP2xX1wO3dApY7>aQjes5pLGTImW>;9Xxy49!jd(N zTUenpm&V`P02%N|TN(;h_~9~agTY~wi_d-iruU;^KX@h;37JUfnh{Vt&{n>l7z&t{ zd@;@+#J>_E52;p6<1e%g-B)$Kkn1hns?OgrNh20EzHYr5Uoqd?2O9s<*{@)#E1a@0 zkF~YpM)&$FSD{_ajC?y6Inwr2X<3(iuJHqu!jZwuMGxXf_Q)bCzqqt1YXy0iTxvA1 zJ2uA4>r!dk+_iMxYQ`IOFi2fRSm{2Str*ZLL*fRR;zuCz-xG2XzeJZu1vRnj7t28s~2+g>}J2 zCBC=!QwH4mEi8Ep^yfO?{2)ZWCzC}c;8pN_L|Vc53Rpl8@X+*{GM_hr(v#1Vq)w)W zc2$FL5F;Lb=V%D|OWmYAQ-OZHiM8e8J1gSLR*{A$ICw|3HugP&_U5G3tcsz~7G~rD z0xaIidb8Cx*V`WKo@5us_d^i|Wgqh}K=Fabk9iz{7tSMzYE3Fk^DFIV<^w*(?0bU3 z!CCAV!g?!AI|6CPH3!@v#`}qx%NE_nMTkw0OR;jY5((-LVe(`4nOsM%{a2rA6QXwJ z(EF2}8O_^M{I+>>q588kpT&kMv}FUwo4q7Me)8qFdhA>wjq0eUDFfXK{pnE@8{IVC z>Bc7DFXM$y$)NoR#ocD>3o`?f2@Z1C0PHynnl~X@DPIDUb%iqXfx#1-$K-?etb--v zbv|OW%A1y@OQVUYKYkx;m_D59t=j&&eSQz6N$dDE*MOYHd8C{XEVf$NvaaeYl>WZD zndD77p3%S75z@P!+vX0@AV?J5It)(*duLzZp|x(&Yp!mwdEF`2ac}g3nQzl-g!XtQ z+KSza8|ZSs@NNrjd)zj)|K;9+`@+)AvCUE+-A$;Af#JMmwsi>OWIPQ_3$pd~Y3FZA zk~P;=ilhYUdkd???q_}6-EbD<>&zkRxX4(qBD$u(*AHQCX;ahS>>X`+dZ>CF162U^ z@5_27yEaPe-tXNR-h`h-l|jef9;>=KXfP^#ju)y|{9ig-a??a?a_e26FYvvH-6YUZJ^DZGrT+9_m-%$%5=9uxgYK2 zqyq-ubeuWbM97#p7wmgN|DM0`c;%f?*K7>Y$NqXA&_yGh_hPrYN*v7*+n8t{O=pc> zsB(N;Q41?0rSkZtpgk@68PyBO`p% z!FRPysNz~U-L_m+Xh)f2`x)zLpfAe;OFVXy{U-O+C&S^?6=>4I_t=G z<=5-%`q6mTx}!rWz&-kx;{wj1Z z4<)i8Tz#Q`qno_b_f7mY{H4XG6dgw~;Dg_LlFqo#KJf-k1@}l7yRZ$O;k;H|f@2rH zyZ*d@a%961yKa)3uP|u*oQFu)USFYs$l!W7>dS)R@`1@9ymJ@Iv)S?cQ>*P@dli_7 zyDj+&Rp3UCR(MXjX3-11*C0Gvh+yR-p1If-pUli=qPrQJjU7^g*=WP;FOhK-8_bk&NX3JvktafK;Jfy~A7KffXWDp(B(wf|K(`XDfX^e=hr zL0T980(C6$(tu#Dc)o*jlM!h_NikUHz=E_MJL)D($%kj83e@It;~Fh03V@99po1GL zJPXFBNWzah(HY$nG+9}_eifd|sYhv|0)bLqYfWv;!^Wfu#w)&CC-OU8(>BB==JpTD zU8}EN-x{M{PeTpwdx3l41^!7!i`mnMI$K*5;u|4b8;I!x!djE%IrRk)Jh+AqbboKx zT{yU9lpl_NFmJFks*BY^YBMzKdUbi2(_I;PRetaEo(y7&ZS^zTdB!ukTYq$Yep@s= zUtTpoHMc{1f7y2EAoFtsrR@m&1dOLyTP?MpA3R?RJ_K&Ht~k922m1j^mMbncm?Iwg z4O)qr=b|G{Z@z~AkFtdf_#bJNoQpFWet-Ge1zN9)=}#4vGS<+87Rtt@vJ@4nh<)dD zdWU82Nzc+lo--Kw1EloAIX9+mOD_%nZ{ImgaB{jWW7v*MC|UU;+;h4Qi#3K?po{Vp zRg?OThID>H7nyMJEu|Q5y6D{B43P6=RB+^UADtRZ5(76~Vt@t{xOJB$QI2F}b=Sic zS=>S;#fg@RpZT)bCh2`+Di)u8N;er2bczzb&*_-rVzm=3Da*20&#VT+w#}txNPj@| z)J6P3hv;UFaVr+M##cIoX})-eRY|p|Uve#gqRGZcW(KJh6by~~zF>hL{)f&jP4OGn zX``kjwqtq>CXn)5@=jwkiCo}HcFSCl1M#_{tb;sO6{Q}L8;nS}mVa0QKCxWjn!%UG zxbIC(IJ~_?Zr(|BQ~~;NbhROHZZpQ85#45_@wc!R$L%N`F9B3}Uq2o#k~U)^t;XSt3}@O0dil-%D1ih1#$qgp$w%U_Q_SokCtQY~@@102j>ir5eY>f})A5zXlz zg@7u-mSsF&Wm$BgnvoIRNCUY)_EZKrQ1?{!Ufx)iV2lf>o5mnb%eWOl_#Hl@bk+!y zs*S9q0xsJ6*8gi@D;YRMf}5-TT}!qaS@$<|6I8#Vj03TXo(zu?C2~A3oy4bKsOng& zf&E|pz~yR(Zd2k>5cPJDi9t^@+IB@?RNiZZbrkhy%gUO$v}x$M`M6BighuJb!cSut=2;mRteN3AYt^(CQM% zB4u#@6;ToJmB(pNiRk@=7Wvd;s)}{`HzTx|&tIzh>u=ra$2ZWoW&U^&jew$> z`&;K!T*u0?`F3bkj4RIR@_zv5FQ`_&$K@eK{+ZH|19H3k#}?V4Sip*naZf=- z*E$v88`c;Nph_%oN!0Kw))*QF)9N4g?G?#K?ilP%R!Fzb6&Q$!ZnPa=WvlrS`7jwT z$7o$?#h@~ucC!*@qYo>Ld7FCJbGaq9Eia=ENh_&ffWtU>lkgL%CCdor;{ZKOhN*Hw z*l)2tW%1aFuvNH$k>8;#tY5|UP#p$Li%=lK58kB2>LzTd<%Z}ldj?Jq^aP--^ctS$ z)A}+*CeJc8$)hsf*7+2_xx2Nkqrg95(<=(dr>CaM9cf+B$Kdt8a`)JXIA9`eMrF&@ zP|g6mwUPa4bK%k({5K)o;r_ zwtrjPrW-V5*`32~D#{EmG@aKG##rFJ^t&I~R1ex$U9QhW7 z?xqF>-QT9R)<;Zurpfr9RP#1JnAhjip)(<2$jZ&>mtzXrZQv{^YloT$v>~+OMs_;_UYAM-u@ilS zG>}IQgG>2f(PKNS=s^4h-U@1rK)|&ofq2S>k*}-|YNB{U2l5coK*&(bqls4_Wg|Io^ISo4@R#POG%^&_L0c6rXnGY^P>T9}<-rzt%+O`Tysdp$~_A<;`UdgZJnKXZ8URjg*NIxQ#7M`8XpRuxC_ z^tN)*^?KfBJ=9#Gv(K+N&PaX|UO%rZG`RQR;Mb`O+5q!>fpP~SzVJ{0MePS)ulHBm zPM+@Xon9~QG}a9#&+eY}-u(1*V@@(F@9IugR4t?l4Hka1+@)q=qgz+^?Lr{q!a}QB zVPy>+p07IP_j+S_azbCnR!U!0qRR-Bx%;b_d(9RExnIF)#*Nka+>q-i@TUHs9ed&R_#C)iMMb?t@ zzT$78EPCz^uc`rQXYb}8bqDu^3uEu&X>GnEy;BKU0;$tm(0hj{Vs<4>9`}x~XDcH6 zZ_9I$&*0C3tVWDVMkM68!mb5{Me@tf8e5==1u>4_ng^0?hTN6FPGN)|a$N(Ubi`Io zA$a-5dG)gVV1cOXx%bV0n%fXv&=0I!;rM>nLKfh zzPFT{Nj^mx?Z7q*4v208##KnkyIHpJPDU+s_}N9{RduZbh@%Bw07CtZhUEic%JbrY zMlX4=KyiqCVo)p~%oh=|e=ow-nH;)MT%c(NI7ocDc`{fK);muqXlsm=7PMQu&(uuQ1U|_5ia`Sw_J77P<(Hm$Xx% zsh9buwU4au8oHQYI(1Zj2U6&m&j|lnC&zM6#w$u;@fuVOMU+N6u3{;H+xi5QmSR7; z6)6TNJO$)^70p6&iqn2^ZhB`inuZpo`&#z(!&g>1$3u={TxE_=0@su&PIldxp+p9- z4xxd3!y0bA*B@|Amif3xhGlwwA~DVV)!|V6(lTn9hn_=hjLCFqCpr{=3QVsXmU5l=8s9K1k8WbyY8Il=_SOI4Vii%aMamT?LWD4>Ejb50>f zWSiFh$|S8(56x(Hx)9OKDjQ0x8Y1)F+CfzjI`Hkbh`bYwsq^F`^!obgKy2eA_8}xd zM#En<+PgAH^(tIn2y>Ly=xVVBK;RWw`5XOg76dmL`Smj7DI zK;G z4lI?^VU%&GQoxWyM7)X>#pCd#Oj7=XysoV_Rc>br*tRzzdF((GpF6&vn4eL`XD%p(B5<3-3DHS5m6-XzAt2hNtLrSo8{ znwyC|Gkv6$twlfl?z&le?s9-rbnt0wn+wX2I1^sH{7FiV|zS1T)BA+dV>gl5kh ztE``5MqKjU_3%}4fkl5cM+OdLlds$}fi!Q8YUivA*um?tj1i~Cp6o;Drr9tFUv1vy zpKLHMDre$H1QIQ{o-1Dz8qfr@MX>aKyDyu;J%a~5=SpPx!~SI3#RWH98yFWI8oYG; zW-Zp0sAS(tPr{dWF%*kBsQ;GX;;O;VP4zXObbx`w`h>E07gz{%VveDq5w@f|HnMR# za-XZnZX_&=Ci;EsC8DXq(fVUEX~k}PgHQkKC(~wTBjV%0+~E>G15-C9jtqoWjmoZR z^^?zgX#<*`+RNkP&O?-072ZFs2wSJ@$@nsc#S>c}P24Tuo95O9bJ+&ij(Q+bpPSY^ zW|U|8mo*AXhk+pyJFS*P-e@(C^%%X2cfTI6CgSCUT(4&D3y#pt7yA9|f7CTL9N}dw z6EM!3&sA|~S}dfWn5ZJx?ayU%sR<5Y=kwhe*rJ#85%Stdh@WtqE~^(Qk=$a=Ic|P7 zQsOC|AoTo|0zfs!{6)2}=A=D(l$`1yEvRxJf+rPozpgHR#wWQ z3{pI!y`&gB(Sk{*y9`?0cWZCGLNG{J;VI-WX8AKTg>PR+uH$Mq{Dg3k62w50382$t za*pTTq6^{ICt=;(0~B8mH@)sI+Q+dQi)0>6TLECA*)s8LHdpa0>v~pe@b**fu*s-H zs%KUE?^(7)SYA1d$M1x4Nc-hP4sgD?u3y$%OhnSmFi5oFd(tv<@#2*}Jr|p~_!XOd zK>JJJaD=1Y=&)gnnK#4+h+#14E;GBut1(m9(`O8toy|P%ZeGw^bhjd$s8%8Duq5;u z)$9S1k6PGJ7ryxURTQ9Dxs0npM@T*zzo=-k1y0;Z$U5NFUjUw02*2z^-290Rn29SWxjk+>BVS+%Yv0jV#%%wp_ZKZ*{eu0j8 zonj?@wxpY25iibm5sv}W%|Ayy4uJuWD)9L5qlifX=V;AnF{1Bg^($zSZCBq(bkPUe zo*=`0b$Jeh`sf!1^#ebd%d5KwF@O*M+&hv$5?;c=R0PJL<$}>zR&h@sH4GvWB%lK> z1(e--5!4U#0A;h=1gIr;f-!7@No-()s>;_E)jzX^K&cZZk_}_z6WSTutXe;ywSlba67iUdhe2L^`>t#?ltPMb-k%| zr=w1cvm02_AhB;%T{ERixkrNYfHDHkzjvG=yv^Sv+F{9=n=1H=?jg}(Szyb;k8>** z&ZaHZ%tGN%q`QXNB$D*EAZeL0o2faRLta<)j%V5U851W4N&G;_C3pD2Q`h>N$xB?t zl$l`gUhJ~4yScyeBw5IYIT=W9!}15wq0gr~7$!bavsLG_RQ&jN5@OVzwk8oq%1O50 z?(z}SsUzxu>vj&c)`uTFj{IfkxgDmwj1?-(z#B~GH{pI#P_890y zrtTVFCX@&q?5#Dg;+1tHUz!r)UwC*(WE|bg7n?@gjiu_;KfZfb!AF0gEB zj|dlRWYu~PSd+f2>bt$9JAK76^MUa)1i8tzY*>!Np3rZB3q^omVjd@odMxHtVk!5dIIay5sWdY>Xp=?$ay_XP6Ri%Z#J04c39$8ZS12!|GbVvSG*mVz zyZ1BC(YR6dv{Wr@#_t0tCZD{4*04gSOjE>XaU;^7<7fiF`!;24|Htx5-J$#NL*{;1 zU)E7twk6rZWExJ#+?!biMqzJ-Jo7gnrpeBF-0T-St|LfjWN0%ruiQ@jHEF-MOFZk+ zphC)Zi^kEDPP))W_{@|2#o@|r9JscUo=z*8e%u?Vw?k_U`SuyvyW)3S3po~resNRL z;ZJH*#GIVKWgBe^c67@mcS~JX?PT>M5e>cSKXw@D(8!by7bV0$J1x+x@|&TGU;}_s zY5W9J`|yY{s}wzHhJP5{@I#Jz?J#bFUb90mFqX+Ln+tbcwmKVRRCbXNV|=#!@y{J2 z_0^m`n}T`u)Pd6M#QAv79ZX|K&3fv=&G(^h--KqSi>zok+^ zyJ~LqUZL;G_#4+B;YoCh>%{|*tu*H0XkdOGB@z7&=B-ung6wmWU)Bb-BDnG>dD!Rz zA9~0d!nUC$$io@=_^BFIvbR(?11cgAOxaI5cwx5}p?i25DIE6NxI-j3emO@ns&K9) ztv`?f>B@{JCh?E-SqktfA~)F7$P*7DcuCi7!c4y6!~M8{&bXOUWcfkup->s5qa(D5 ziQ1Y7U+~u}bikx*HL1^cP(PhcXX)6k*=$u#+p2^S8i|SbKLwa->!rFqXF>At{xwxVIYfl?QUaX~8DOjj1*Z?PP}%^Mq! zCz+gHqu#9|x9>JQagC8GjS-}(h%8pvLp7aVQr4{)^|VLE4@XPdbqbo_m7W#8z7gPa z-_)EZS0~QPU&3@PIAXACyA%Fy$PjgPQLrw0yJV#nEJxHdKDiL*7t~0v`lR%mh_n#L zN$YRv%rQdi3nxKQbS?02%*#dAqnT|iv&Ud%W<4_IeZy~LL7IkPGyZ+JGX}Ho z^DpJr{LEPlU}@%pyt{-z{M%I>cx%6Ttd1$lvXgYKhyO2u|E7J@3HB$6tNR=@b4 zQboOr!tl{+hQ$09K@X@qKxyJgd~oRs;VKbeQTDP4sruM)%jv1xqt%z&t!vX9>S`~y zXl9}(Pr)ns ze8hS=#Qp*!my9Ro5lRtWEamr~-B#Up7Fbv5%Ad)k?k$}cNLkf5z^e~&yJ$Qii{JXk zoeXEbe9v(a$e*9`;o|Y%GuEIZtcn^V7`tj;H4+tR@z^HF3D7S4T3VN*N+*)nDt@-u zjJt6Xg&RTCXmm`B)$js4gR`&o$BF z!e_JtC+Ue!uDrf(7HFtsSiF!$O+y#3tXJ9Rje}_+zci81dPXLi(7}#JRW9M61^!)s zIjvn;b5BoLRiF+Vt%XrwIvoK;zpOk}_zJMq319xP9Qj#nIks4O8QpiZ-4!-E`Le*& zw#Y;VjJRA66k*Tm$Y6>M7XYIXYDhQW5jtRmPo45Fit8nSwB$lZ_$8=DK(s5-lW#qK#J)X&M&e;}RN8~J?%5+U1 z`Aj|K5WMP20}SDiW^~_;ATIkz2Xk{+${I2es$sM$G^wijVWWO`z$99HH(!L+wS5*> z?<4xhXwuD&9NPw%nXSWOTS%b-S7YZJBmW4F^9dHr{a_Zn#Dqwzn8joF?CxFfR z3>~Dh^%|m7I$CRe22pI^*t`*XK{LtU=fOCZpXNaI+EC$vOlAUMvGm~mSP#y_A2pX1N5Q&vzSM2j7tbFWGH^%mS7hHF{sbFIPqd({ z{a(R#nIdT`%NXpzkNl{kLwxv$9k#Uy9^7&pNTTCPnTnC`kDQ_;j}Wwxv*`RRqwIZm^jSpk3}4vuiz4Qp zKc}2pNZ&4n#-o)Km^KODekiLr=xQ$$8tRn{a5&EzRoJQad+0 zHQrH2;jsE9M+5sUNzi0)<|$XV&gdj(Xqe7|;FI{P-^2%-G(U zv5=vo6j*b1hW|civ@my0ZfrN*E+WfVX9B z`3tqT;88x(FF$SEyhW&0+=#p$X%XpDRB|f5e#%THkANFX^GJVK{ws~2I9uK&PDFtc zWgG3|o({jp(+_L4ccHM@Vs=yI-GjU0zfcX%_jYWrufkN+=KK(39H>Bp2pzQf20_IA z-@!E`A~ZP-7c0yEV#08-vi|?X|3!)6V*UTt9<2Xadw@XiJZPXb4!}o{7CvtTh#QX= z6C{ElO#(tE;I#xX;PWzq@(FkgL4Uab5Ww8N01^mD$m<7kC*b|REE^H80Z5LJ7a8Qc zKtK%3#l`|TFaP}oA9&30-TBuBRW*S~;C!GDYrTPpKMHxFb*alyP0e+`@P;x=*U;%$ za_W)xDc};#s*UcNk!>g{41|)Pz0Y=i!QcB{%Pl@ZEeUM#^LgI;L84atZGrpi3%)^@ zKnq7cmQ4g`8zHN1crQVLEQ+u~{BRYc-Pxq|W#|5Oq3GQ!0i;6Ai;J{#p}f(>-RtoL z2H6wyeg?ij^Un&rpwUGScuZg3zckls6kx9!rMr0c2x|l+RV~=%3T|#VHp!Huymv5IO00JW`U_?}Ou7zMn zX7mJTJVS;obrd2FxP|k6T;+Yku++(|I{^O64Lb@*C&nwAOdRa1V#H4L-K53t#F$(f zh)M_*xU3&RfMoHLMSw~OkjxTecfeUYAiM0NrX@xq1V~mSqOw3_Kf&mK$tm-Jo(Q%D zm7oJ!R6nf(>r<4dJ~w=ksLH}pxdft#>Oyc0gqo=(5f^aWiuGH>h~d~vJsk)ys((@8 z6iKrDOpvH$MBGAKUs7m-;(FtUwHnHO6dok~ux( zD)fc5*JC#NM?Df%wjF~~I1vqnGL0!}VC(Q+ak9L~8csA8PcgL2y=H*K?6_qfg@j!s z9v|g07VfOt6j$#;1Y;k=HSiQiMohO)iWNT||FdpQ@Xyvbx4#s{$cS+LdRV;-#-(_C z*ML5_JW&RWF-Y}kfI}>YOyb8ZSxzEJ5sQ%bAMr3k>`7$v z6rZhgE^ZoZ{-?WeoP zBxWgro+pV0h(6q^g{KzPKM%}B@_``ATgvE&wPN(a>$t`14;^vjJ4LTHBlK<^m(8nB1iQ zkFU23iz8^-g@Y5^-QC?5C%7j-aCd^cv$$KZ#UW?}cXxNU;I_ECp3U=~=e^GN=le0& z%=Gkj*WOiK)6-qDYMoLY95Q|(^T*tRpb{pi2Lj3D#Xt&ABq>SZd;S4*9ss^tcQbI3 z#8shC;xp(n6i;B2TYsDeBCLHLw9LH^5a+S~JkPa+KyS*XaFrG*%u$E_ugv@e8&W1% z4+Q6Pk9;oSM&s*ENJ>g^o+1p;sOy5t1E7c5Vx-)DZZc)P$he*>M%dQc5nf;z5O5M1oF(suj|9T72EwSK}Q2d|bgT^cdb zHtj>sbq(M9H5QKV8XkV}w}h6Y(iFwPHxs9R?R@TGBWq_EL9-feO9)wbAa)B3d|;xP zqbNj@+yRWk`Z6ma^sqLND%ZKrdC)-~koAmwTRL1UD3ZYcsL{<9FzPJxL zCY-c35TT`GZr0C+kwa3Dp%VvMiKdpBo2Sp9EropfP*d9Vr#{~{ysQ3GjhzyM!YX1_ z#x7Agyu>1OkPt-1;Gh>FkWe^PieGh=d;EJ$*eIxrY8qs`welaIFNG=!=n@Z7LQ$?wDOMN+#4T6l%SD_Bca2k&9Dspi9R8L6h~t!3k_pLY zx#owoaS+>To(xeRC=&8R|87$1o1k*wv|^_rnoN>8Lmz&)<~#j22vGmr#!f9I4D=1J zt#?;LjUoNIAf$vU1x`TsTZiS_%Z-S$id&-O79jU2UC+B6TGT#(0Po zvJQc-7B_aXn8f$PlO@o%;qjB{9RwCYUMOCr<}Ojs;_0ExujqNx7u%43p=*}fg}GI0 zOOo`T!lqjPbxC$e_;&_Yg|~ zYJ)&$S$u>hF;`4P>m>Dnk{YrveL=`%MVm~#RZEb5%3SgxPuhC+8^#=PkIyy;Ml|LJ z4lO127WYlH!Y4W^S#paL@*muDUkZSs>09xG1JPe@tp1S^EE4wo_?Nt`ee46v3h4AsHe3;`DI>cTF(UrP(gx-5wIbwea4E9Ad6IC+|DsqM zx%-NUUO)9R1M23+kYK;L8L#m?Mrow-s>Z)!qxmYjmPIA~w`8_qy~?!x0DSMpyj-5w}nPW zB|_}A(7v3ELp~{X+iwD_9`V4!6D8|i_MuT@{ncUV%+uKT5R-y8U0uI^!#v$)C0O&G z>Xi18oL$jz{SmdolTvQWB!?&a8QaBN<+tF~Aq{VOkU`X#4*j978NI=6t7!dIxd^-O z}UoYOeuN>9hj-b~b&YV@2m%q*K zi~K5c$jJ(Pdm%h)!+@*_!Y+Kq%sQ|EA1p~N;T{{wjuu9?B=%$F^s?mj48we{BGXQ^ zkF}-o>o@a8Zc@v+9h7)U-ayv7_Xv8W@L^kPN(z~CKh0_lpm%KCiQUlhH?6#1_UyRf zt86^ENjsrxVR^ui)i*iP*oAD}^A-#W{s1lePzOk4r!OoSvH+vL+0vKMoX!{?z@r32 zN0&DZ@$K?}S|j_(cAIoqO@Aqc4uj>J7#0vK?S+UQk*_H9a6MdfJ}R0>Pu}v*$TT0T z(;NN0ni*XT=jY|~cUzrQq&Zhu>DV#v7s|Y`hrhy@*=(p-%YHx&dMOWTXe^W|)^fi4 z`oSifs)eGFx)bPv1W-*gTN091>9w|J$D{Nh@+q|rEm!B+USQO8KE|=NC|56wc2}9M zD|AKDNnsc`-=(T|kY>NNpP673^xnbA@w0u($d`y0kJ zVtHDlTO%+-R^N=92&qz5&uZN6R)2#Z5(~vblL*>b9y$wD9_NBM8-E))KG>qAm8+d3 z1aQ@XHnF5y8nyUaadMVf+#Fk3B!dUP%A@MAXOoz$zkS?4NkJB%Xi(z0x*%#;qQ&xU&)oH-iN?F+v8TE#azL&^DsFN+HtMI?4G3j zH|48HlHDP_Ne9t7@OPfHC?U&rIWKV{?(+;>F(a$x>oG?1-IXk>+IDH)7XJkX#Rlfl zUdE(lKorR^*!I^+Hf*zSYY9lQUb2qa$2m!JMNppEF{dciQDtVK2_XN+XotqYmx%sy z8WmV0*#=sCUA2&A=WUo7kcV)T2EtK)y`2U1h}U+3;fkWi-^y1!P|HI%%05vE5@bEq zZUx)4^T<6XtXv~4oy*8R$zR%xO&nTPwO2EvnxC(5&Zx~YYvCfof)}O2rw%2@CQ`nV z;mvS7cjxa{V-^dGQ1{ajo|$rsH}UOc163^w;$5yCwdoJwk!%dNtNf#XDs#^JRE}RM z`&A)lJ4;TKyks6jDIf6u+B9dw`9>CULZ3<33!ZC3g z781uiG}jhnDkicu#E3H{nqa#x;Br~rCs)0N*==o6nB@^3}6*! z;o_6v;qUB}_Tk2cwwtT^E&Dh(AH2Uu&P`o0P{-1|5%^P4ZmVCxM@ziUW_=9BnIkJ72PjA6l1}nho=~ZBks{)>Ed~ zKh}L^Rh<8kp{4khc~*34+;(=rG{h;5lYU2`egku%q@7Iyf{TtB-}*%~9(oyFZG$mkHZfEa>fDs#6=^mWH(uY;0Hk ze$7|j4mOCCOGdAHwI(BI!INv=sF^X_`_-g2sw@vTESs*Im@W}0)M`B_iqopQT3{A@{8nfmmnG8pRBt%lPrlOd^Fndn_cmL zYb`vL43w0j0iS&haP1VItS+Oq(JLzrp7AQ1fXbCi8ME~51;gC+%xca%q@8w1tnMFA zg1(n!TScFiOv-|lp1+s#srjc8UUJj!+pjOEAPs=MjgFIiTxB_jqNDAK z4CE&JQ{3PFV(m)!YL%Rw#M*h*F`N0V_O;HQv~P@i2npC3ELPH0)9_+ zX0*yml9|mO`z@g%-Exk8k$_?9LTMrh#zw_NMYY}q5DO@&Klz#q@9lH)Z&I-P?Ioq* z+s)si#RfpuL$Rm`kNMx2a`wK4kFA=ENLp(QjhL0n-pf(o|CNVqV`j@%2K0D#uQ=ed zCOzB_(Pp!=j`6VsEOm9Rk+G;>&n=+~_H?PI_>Evj#Et!X&wC&2!&g4`@^)})hXU8{ z#lO@tG$Y4xXoql+y0c zpAVk35&P=O%?*G#ugr_AS=?u6l4Za>a_Re8_YD8WGaX~J`L%(ikgtintmX}$^(}s> zB2}EC&&Ge3Maz|Izx}v&zwcVR>;YsxzLj+Z3CGiqqFe3q&EC?^ldi?zu8umKpKpn7 zfGs!d*H3$I;}F6Eh8;MIXTyrQ(fzHTL{DuESGL4RVq;WpbVfX@FMVoh*+Ia|IckfO z=T(2}3EXkP`aLnV{oT`q^hk>WJJ)5U-5ZZoI-n3ZMC^G1lDer@?Ch3Swo20x=@sdW zh_k05;ITi0)cZrBaDyS*s4n%N=be-#`CEGOT?vstUL)-|R=(B3BGS1LoXD<(_n!dA zEJKj#LRy5&Wk=fINDGUyHx1wyJ)Q5Tn6*w{?Jy0WEm^ifOeJN8C#WzrHKwH_f?EaY zDSsnDmTfoN#lr>`ieQqv^OpJocFPuP7lL%s!G}1uYfc#Qk%iJMU^|iWe9qrC(Y}_g zpB?pOCKZC7sX+m1pn!GPy8_nwNvvTDZT0JViH1xHmfcaOg}kd52$(#GswVR8`> zEadhVFFh1xmX|(bTLW&P%&Gd(sB@4RM{8WUt;r&t13y@6@sxHkz}Nn{gSe$HgmSdI zs#IvfJpTC_7piZuIn?8MwD5`C9zWoi1MxXKKx1mo*OqMqv;K+!9h3!Jy+9tnKM6fu z_fbDoMR;9Vxp@u>=2Br ztiRk9%Ec&G7S-4nn^vB(OFu!Ehhp4!QZT9_k(x;E+Q-SMBPF}dIwl+b-M8DufBYed zo_xDqf}C|kwDp^K&tbcqkv+%D_FhxxuQbAI8-~5nnBSM&a1CIItk)1WQ%>pz*Ta+k z^E=%IYI;{M3>iR@R_sPYvipkCH7B11j($0Q&t<5TILpE6u@K!TP4cN~l#;dZx9)*GxNsnZ%XaUw+51kR8dYz_j7F&r? z(bmMq^E)${-DgpswnG`R1A4L2ws?d61h$dsj_Tc*Aa&3#LTXghV0m6+!+hGP(Q=MG zxHIV_OSah3?|#pRO|`yd$n1(mKalGyCmpBLakZ(5CWD=gpw@coN?bGGQY*9YWwH4= zORt_-W)b*~z}r?6@IR*WRbhPU5Hoqq7*u>v*95CNXtNrb0mv%=;QxQ~1)Y-GChRm^ zwgUSD*glhPpl?<|7RqDl;8sfTi>#;74a?WqeI?ir-({`jqDd5}ESA?>nVsZGd}XP? z-CJ#PUtWT`J3IF;#7ZAFvm0eZV#(3S(e0`P^~c4aA1W^%y%IgD43TZg+K5tIS052Z zfooj=Y^*>vG+p`OlitbF-h_xew54?)fc8LHEqXRGr}bIftQP{X3kZC>-x~jpezLXE zNiq@0P{8!A3wN5jpfBw7aA+a^yp{j5=}r+IXv9>-u=yJw`u$Q%oX&=Ni9))`GSPvY z0OmKUY&5@P%ApL#sc}!K>A6;r(5ILw;I}HxM?zWH7cQ8XkHW{ay;dY2f5C%$c|S4S zhq&>|juRU+eGeMD$cxxZ5RH*J>Sp*+U#?BF2_j5a-PByQsPAJ3gnJt(DWr4}_qu{K+34iA<|PYTjLOAGF5Cc7f*Q zgarJE^aSN$hS||mki??#p`_3O00L1jYAfSj_|w^TLQ*)(mHZ79y0SKn%`s028L2uZ zFlRa_;VXY}STf9_iQN`{?FfTwmUIEnfyA%+>Io+jbhL%!@l63T%a*?%s=q;%4+!>J znJI4)$@C3=87FX-3)PKx4_`3L=>~GpQ6Qyb@e&O5soYz-;m8dNh8$PZ{ck^)#~ROV z>T#$&U1E4+KQyxo@3V;eMz)0CRalyC#SIXuO|5WrvAgeJLCX@qt3g>T4#+dNB4>NxshoOyh`=zwDmD|kaSYvK7) zt^-K060(x!4zy~@8ljGV2H4-1{H+O4xP~q8<-l<+=-cRzb%9Zrb(;8^KD+V$_PhbS zH^`WsF%@IrP2oGDR)BFwkwv+M=Y@5rG}MB(>6cG^Q|Y|a%h|d|%mdHl<=$3Wyp;1E zDf9((ZgtLpDDPvu$oqM_Z|C0ASFl${@ce!NPr&IHz~5d#>327=8Ox^|{%4_qhQ$j) zYjB(|JsI4VSe&Z0Z>-yn$k1TYo#IWO#LtqPIG^C(LA!7%EY;itl(|cp$(Y(7s88VFnjoV0t z11|cpfvke4dw^|B4YVjrr(b`28Pmz@VDU2|)N6vTbj!1}^Q2PxeL0^KRtgNnl68{$ z2%KgzKnGGQ(Ie6e8|@L+L)QDGX{_QDC0dJSi`dwC&`xOno-R(OmWFEJQFufcU=>E^1-jpo0}Hr|jKe1ShiRautW+ zU~@BJ-I%q!u17AT`IM1dFa*G8!T#mt;l`c&YzIva?)=hlqs%SCM>y4G`Zo6qC0!?_ z_R+vJt)f`x9X6yD4gO08cev71zJ_JXHd7ogDUcoL^|lEGG0Ka5WUMqf?nny!#s}%xzdJv+s?DiE5juR&bi==C2@R95VPWu4mS0 z?%;Z@5SjHCaV9l)`&Q~rP|M_P|C(=anfc2qg zlSfA=>?lGpuGh$LU(!ztGFH~45Ea;FAPRBjoKsm$7pgIs*=7CZ;+{OReZrTPIDbgj%MHnZ@m%`Zq~?VXMBBK|Es1;?*=Rc5O50V=mmz`Sq% zZNcAswVIbziy)43b@F)%VXfJqb@D{FP*%Z_+8pn1wD1V|?!J_PosmUNm~K#8=Q|2B zv=B2g4Lv3A@OI~Zl!G<$55D`6y^f=)l{@CY^PoE*v7? z!v}JpcFp%*4Z8Gx7$U$|;9aFIn`t7IgU`t$PLh(Cdc4sKE}o0Fb~bydUSc;8iFev3r|#SY^#-=ojzW7kk(vx<$r@N9fUwr|>J!@ij5CFWUaq(p!e#^&(|b|BAW;|%%1G<{-)gLTbmtt z^iPp9d6m5MsD<(N$biCM?WrF1WBkP0L` zIaBvdL7zncUttp_+D<{gL;zC2MK^Tt^U1Xy3n`iUR`f_!ZHNuyj=ewJwPOZI+UOqf zF?fw1?E~~S=5v1u`F{9K;r`jX;A_(kS=OCHs*Tl6Zaceo{}tPdUyV{p*^6L5JX=w% zkAFhkawnquct!d|%Q~)*hu|O20)II|j58-owUsOS#*lWceK*~Jq?Lcn3 zxK``szQ-~9KG)J#N*npR)bHz-&j(lifDAiKQnMe{C1jRC-@V!byLrQX@Qmv!i!VL+kT=m$Nfw>Vsz7d@8E`lXR!~7& zwShgOEEEL8EEG4>I^vH%YP;kB`SQQEWK7u~&puLzCFzK7x#4MC^oVrJ(bO}YzYGbT zG8(0lq!6z>u)E@I0xwZ(A{+RTX{O&eS@PB-pKa@xi(j2Od7>{fu6((TF+r`6vk;<{ zrBkR+))`x`>JN>_k8NrJNbJAmII!wzZ@!KgE&XyMzp&o=R@FUbsC=(-fSAY>0Hx)l z+7)&l92;q^4B4=k=YK4y!YB+HegA}?7Z*01BfX;TO&%u`26j{vq!?L8nsuWzGib_ODgavM3ixqeY;3^`kUvGu-orq z%|<6K3kGjt5Lg^QqtIgGdT7SD1(gKHOMcxbZH4`eNkaEM1}wD2NckzWmlaW%%%>YA zuY33l0Tz0`nkf|AvuSVpyf^L4HW!y=k)420&;6AOuvKYbNN&mV z6@0fkNw#7XC7r!ztV00Y!)xfs0gKfAWF`zk73y0@Peh85qW-uV`nV(f!YZIR2{R^( z49bR?qxlTC(Kaf^$!$gGGnH=Y^;NplN&yKr8s1+olQJ({{FkqA zqOC})`yeGLfFf|>vU%BQtzWfCG~CLn_mv*=T^phJ!O%gY%~{*;|$22Y$?vy>>Y;)XC^G+Fv^^4+fefB-rj0dq_bwNg(Q!uV0n|f z_}b51KT_8JPKZYY2@VAHAr$o*UtJlyHRZw!p?9?Ti^J)kxdtA#r;Ate=O=B!q+0@R z@fcK9<$a}P+ma#%_c-VN0yvT+d0?|SeEU(_P8je0BFO0?IP{qw+zi7be)2?(JlUt| z+`D}FI)`-SVH>vOsLW}GiI%dNx3`*)KG5Ijpr_3G)fBgo+yj3zfv&(o&iNx{~TMbm{qiS5A`> zkTu^jkb|)!Hni)q-54!Nt^62qu2=X2u9QIcfwRe%XvFaw%mcY4%1uy6ID_bd1!DS% zDboQ1$1L9rC<#aNw`VF&2Qn8`!B>E)yxf{{i`=@xRSPjz$L}sHt)Rd9IUW>|iJ<~z z1oGj&D4z6`-K?QBMQ0YXHiT6^f;5yd!0z=!9`8^2Xj-Yd;a*%Gqg2}36KlGvB}r3ldmVvaSE^0z3((dgluBl6>-q^V9B^ zjQQpIW*E6G7ZcE_OZ~~t;yaGQ|&!J}X zdqLrTgV9?teEjebtIdJi_!MZ`*4nfd=HWLPhzLKNt}erZuq$(HWcR@4Q`A2wTeLme zTxb6nW8cvj9B8>|>r}MK_Zzeg6$o ze%|mG@S8>7ExYFBi6U?`i)b+nP) z!!dtib#z6VV{IF2Gh!%S+&>CGP$S z1JCfLC=8m1)W5dPVCx?#o4;7OzlcTgf&ff-3l^E}ofeImDqa9>| zE)5|>dyZ0Fkb=(!DFWNYxR_rkI$6$JO7M;w8JbnX;%vs;q(t9<6GGAlQ)m+k8a62* zF3_P6X(sDyA=q*FOHu)e7~w`{TKG32HT4NNs&Ds;aPLrM{w|;|MItyLJZ^v;C{YoB zM9T^Izb3_8|1~n^`md2O*ME(Sxj>vG+`5nz!HXMMNG=W~Km>?R@xO+}PfCDD5U~=( zez;s2@Cq9Lcg4{|jSSjU0i1(^l_9rJs(?(;Zxx75u?itIF=Qc;^Z%20{M0}vfq3|P z0Jw6q7OM10^uv!J(gZuN>Mox_qA^pv=dKF6*H5S(mM`zsnBFoA@-=^G2@^xpmW(Vc zWMl?1@cX~_Zipd04E|5hjh&0bi{l_}tL@n*%AR*PF-W>GGd6<56He=rc6?EioC}~5 zA{%a?0%u|B_SwVV$BWr55KPB;uxY$2c?ZbS3yG!V8O*VdcNZ3Hfw`Sm- ze!X}3@{wZLIILWFs9Za!2vU)m`R zJK|4CSl+ZY3X*FH;7`LVXgB4|e4kyB!hy@ZjX8X^MVe(oP zr25ZmMAR&qd#=@ob(weJTE-(gi9Pged(3fy#a&Q}V40Tf936Ur>S04~imysj4n>ugg-X}@ zk##VxfWFodkNKfgV-ICSsQe2864+0g_IS2K$wBXrG(Rg#p%lIQD-f6|bn$gCArI|5 z;9(RU_;_seBQ*ik``!lDCz_~_AV(ICJE(< zbwwxJVMwtAP9c1DPb4{jX~MWLP1@G#lIW8F`H)N-yV&%mU}Dd4ZJ8}^i91gzuqyp@ z*V6BKh)%R+g!ocAaQukt2uCvj5}~;(j#ID^Y<*(7nTKO#RjZqcaOZEk1+VOs-xo>u z{L%@)S6`dg$Rk2z=pz2>1pC)G`FX8jZZn>B^GVp^bYN1m5b|j;G9oMI{_H2IsjhoI(ZM9J~9` zd?pqobC<D~*P1{?RRV8;LCZ+4r-j8-G1^eUyssl-y$ zvzt*qEEN3oEa~1C_@hBH&Iu-fsY$n`PVP$qHBPDE%+~)hg!J&+Z`E??Ul-}X3col( zXilOFIUG9C-_)RkcM>37OF@#6Uwy?*@GTNBa#HHfc|-*8Ec*EKf$UOwAi?h^LOW@H^xMX@*DPrDutR&^}3@>3UnZiFli>(!mIG3pVm)9FZkh+e0> zS)8=1AKP7FC7syIh@^Esma^TxVe%b2kwk)2-0-3a3vE}{tHF;*X>jnr6Y>sB`QPRq%6z$OIPQxQPjX& z&xPh;IaP)ZW!*ND9!8_~dM4;ZZ#~%d(B1C{T*RoVGbW4ce{5=Oe+;B~mhOBV;8^&h zn`u}O@$fiT@FCec`jgI42P;u}6w}z!5sT{=ImGKAvlgozNbKcb%7_A4sleDa-HN|R z`VIVou}8T>dloq|$LY7Ldfv=&`<6s;RbxyPGwty*)VRqcSIJJyad#d>q_N+Fyaw#1 zn-X0n<_Vn)*1nxK9E{hj0Q8QekYq~!%(aj&Em-$=i;FvOZ;ZS1tJj3>RY;zsW=-Rv zlm?3PG+f`GcRn|wi>V*q6+v%^HJWGx!l8hmoQ@cr-NV)g9cPY*;=-H~rTugB%+?+6 zc(%#;<*gL(iMikY!?l5{r>ja0elhN8dDO#-ol5-lZ`CB0p;f~dYo)c6A!leQW@b}c z;M+xMUI#syJPt7&mOTa6=T9s7D5BLds(stZvoPmP#q_-U1ov##ma*Jwu|A-lpQv8A36^RWo_uVtNH(4y2em!uJmw zH!yzOie@dsE;7Ph(|fsS_v-d4_oG?P_X&qcaOiV)k@}JkexCNsSU?|fnKc-VKhlaO zXN^LFCw2x6y~+_n$X%|Fw;w}?_kU`e;E=^znwq_RtKn8Z%)n}{X#39Gk=LtcGj!sl z6GAk=eQ$1-HXgO+CF5Wt=9PZYma(ogC{&>*w%bxK~=+=qqNlrhlBP_IK-h#e@4~ z1bDgv7eW{CWUWikl`*?*ffXW#z8m%00Eoh~jBd#s5yI1&^20DX%+&yH!g&@{H839W z?4SW^J#4^Z*B?5KqKAhkRVr8YWW#u!WWjSf$pyDJn3J!2{TXZzx3i4qm{=GMs8n6E15&9+?u&*;?Hi0lxw_;w zMXf5cuk$+IFZe+c1^{f}FF&9A##ym<@3&LX&c*ZA+B;);d?$LRU8jCa`WtRF476XX z>CgRDP}WB>6tt%}%k(%z5pv?W({gNhjNzaQwlfb*<79w!Yjo);O)^)mCAF6z=3qI& z)^0Y*15QbBc0SSX7>m|f4=h!#;6s!`^-e5w8iEJ`drZ+D;*a*g8(z2kH5(4HMe$CK z;9;4(|IAHp#CZ=PD$n*mDzDZr*YK-2SyJ*yldMM2+X26m!G_c(GX~TU-n7(qw<}zQ zG}-jm%gw>9kX~yAs~GJ7PG=&JSv!_`SpKaa6Sf&#O|l28wa&M(?GEK1(o5e?yyZ~G z7olwkiXt$8Nw@WzG2k%&Zt&qRVx^vwQ9vG(z#iFAYB=0(i=Y7YoYLqY8f-SR1^ZwH z8Gd+6@pujZ{~UlE)+KyYA*`teEorZ(uE$-W4URo9B7L8MQAwyjEL~}tNU|v=8JgqB zGYKj_3{HPz#?>ulhup%+$#|iO5=W{V`byuGpY$`3WQH(7=v4EeS`)?`(aSZwH4h>G zbpWnzY?gnPGrhhsuAf=RZi3sb8JhAPN1g#5C zZ?y-=LsYoISwRvhDaV{xh>boH(VAIT#6Ck%gPIxEnP$M|D{TvZB$+QRv!Hv1cFUFB zo4^Ma?1J?*HNH23E8=mFDBcI+&J)8||FTEIQ5?W0Y=ON|Pb=F|f74OIwHWQ;;@s=A z|7=smHUlY=>8U=Xcwd`t4R$4riP@IOOJtLFHLg#RC0Ka}Yq$i7z9 zb?KLTn~Znkz(VzMeRJC;G=g^S4jwds!uSA$RZ1&B4}b4h&NVWVfolHArDu=E#Q0-q z79NIe4*ih+jjSM1HP>Bihh-ZTn|QUOG8WavWM-C?hR;zR%fSjS@q{&-;UcR!E%md+ z3WXh9Xns2OeGp%Ft9aHXjg$;d@Yu&_gdNjmwy6a=j*CpT$FY#)E2=*X*i2cP_AL?|+50oz1n_YMn<_K=ZbWbVc^ZzpHj8 zkrX8htR$AK$-A(L2lD@xcxz|_7n!L<6NiqW2!jcE)%S@!IlMoad9(9bANS1+q98r7 zRpI^>T{XXiB~yt}Par<=T8=wa3yNeo7gZfw;P+G=<|eSTH!2qf?7GO1X5}K&EID=t-qz~^eS6O zZuBf`=sqXyS7NrrDY`OZ()>%Yi3)j&cON%zdAgLtnTaT%3k5Flo$-vGrcoEIP_#$s zkN;$aqposz!8>66r>QN zTetkusgxK9tPY${RF?}8u$lfAqbU2a{01{+!W%37-$5eeF#e@#Mg}bW|9+@lyRBq( zOqaA%zIVrw%5+@T-ScBUe4?satZVFUSLSm9kYBLK`T*jP`h?RS1FyfSX|R6YxbYCA zr6g-`4jI`Uubc#KvqgMBqStJBYyv)OG7yOeUQlJ2^FqL^z+hbr39bB8G}e9mvTfi>QKA^vgW`Rq=cg z{|LWO84d0jP+juD%_i5QyLQ)aT?q)3-Kv}quXSPSY5Qcl+`nYdHc>lzVge0MUn=y` zE~Xt>gzR0t9SP5dRt&QT!hYnZ^=@-fN2LbO0L41-86ICLz@SVg;En#7SjiebuxEAjFLxkO-3*E6L zsEF&z#2DED88rEZPalyw1_o-@>VjlXF>h`6iP%g~x-9qEQ$|^RhWMI)Z@hvIsTp$k zC^-Hdk7SJtBv8cmZYzOqdn?`b8|9om1v;XtR`CbK_WMJ@FsMnuKaIJ7f67D-mMpiz z!4h%Zcp$y_YmJw3_As_g&6%8|B~4Db0>Zk{)u&SnABq6??mGZEC3d|Mw`vo-!I+*- zg&nq5^{OH_(B4#W@A!-jIpTWq9jUG&Z>tLjTQPrO?O#5 z3)(!RKrqpO`}}Ui!+3%2&MEgGl{-JYvoM*qSkj(Fc`#0c;p_K_+WJv3vL+TQ#T=gxCDBzsM~6}wUV5sH%C!!Kzk}TNwVv&(k3Cv$%Zgp+=<+GV zgB-2_CpGwL=!SpN1e|*9*#+0{YF_!;&x-4!fQmwwB;cD~xe=J${RpvQ@FTxHOKv?X zR%bRIdwd|-1iA3sX#u|T$UB%h!lB*J#V2QXmc0M@GBxRAR;MPH7_kBCvJq6qNS!Us zwNM6py^Cv0X1k>e*Hk07!6ub8)~??Y_xtaQc&B(RN5n*nA*FW1hcg&qNWA8##K8|@ zk~>-o!lmq;3}zINfC?;HVL|rb%huY!bU6Z)C~ZL!TP{wzk22=QUPxifd&E>Dw9C#E z5j+I$6sNnnzaH-2p>lAVK_(&M*#9E`VlH3cfT~&m;!s>5ldmM!pzognjG!=eHVnOS zUBv`qew2=9tucT&?iWX>prHL}s?#6#HR92DB1tviR~*Wt{imMG)xF8bAzup55x*s+2r% zY&TDHJwAb@fSuipo0Whmxwya2ivZIb`#oLf^@^aSgfjs(O@PI`h$oflJkCp#2zwce z(}Yw3Kl_rJb@X*8uh1u_#%D@5xw`GiorA1q;367t_2+g_B!k{dZk5CC2!rFQRZJ(c z_f`Ou^%qE8EBUuqXCHvU-roT+jk@d<&1N!s7cMQ&eqL{DSz6?V@8MtCTg6`9f?Yq$ z-fsUS{4IYfp@4Bvg~n>R1l^l9i~ZE}1sOCbR?h{vshvTI1tkNsT zC7wHqn~&C@Wl>4y^4)-xR;t$+cK~ypv?5$w4pQN?B2oGr2oE0+rU!(-+gMA!k4$myV8%2GPC095vp1(K&efC1^ zOG(;&>3{6h9>Jv0oScR^{LECHkE_iXy}6r~JK>YSxYscS`}@OPP{I!l58cQj>`Mck zq7B_&8c@yUk38vf_CdbI`q$chxCsKAR25|y-o4Zxm%frc`#gIWeR%E~{LCc8+83Z^ zcOfvfI!Vo^;#;~XjOW~6_&>d-4PsRt3wzw&UCTlJw~N=JrS0m<<~&(j!X@4WY5hxU zWl)SQfa2Rer(M%Xr5DY1gaXQcX#Vf7J+8H(PGHC-f1T7}Jj+-2n;E%^CG>DLR=7qs zZDVS|Ei$4p{r}U2w^sE(m2I65a1c^K3AO+-WWkaJcQi~b;qBk~pbI+yE@;dafCAJY z0R~hYll&VA1(D3mQtMaR&>lI173&UU%z^%!W(=u0c&1{E4PGazT;@SQ*dnu+9IYc+~9U zk~>-J|00=*5c5p~2*%iGgtRRRx6ewSn5(lj<1F7&AK)Ee$-<44N|~G1_HsIZ%rBNa zo1`iWb$Q4IeoD&4t1OFhip(b0_`1LSJx}b(S|Tht$LS0^@9RA)W~VR*`etl=K>PFC z+P&ijR;QA%5-hfi(-r{uK$hDO0Y2J#V12f`qE#d2=Qjra437s_`OF$YrG1nal9$wf zOj)bGl(U-+tFPD7{~T;%(ENc>kbr<~4z;&}WtEFX?TqDgj+UOHbCb4mO4UF|54D}L zpQDe923st`O#Y>9_saxeg6gnh#o`D*iE|~xK3r7zunRy^30BQ87m=cB3_?RVXjV!GAxd2Rxd3MTBOI!f|`kFq;W5^)-`d-?aCP$>=L(D)=NE{fMegQ7-w>NvJT(euE6 z3C^{f(JRGix<>vFZC@D>$I`4F2m}c3?(Qy&h5*3{!QI_GNML~wAZXCVU4jL7cbDL< z!5xCzH{`tMz31HT_x&}qHMQNt`32e^^I&}P(? zcTq9p?At2HzN6|o-cFgJ3D1?&+*`j!&Kyk03oF>BE6BnJmwaiIi;MQ!v+!;M}{D9LFK}Y;`@M zr_+b`_TcNd7K@mn2lF3RU#SB-qT6bJ)ClNv)XINvH_Bc{lGAII>tHula=!Fw@LP#1lp4As8weCB&pq@x9hwXiQw{`XI1dfP@FkzbaH?8bF zJH@$uQUDp4bCIJ>^=)SkXoLeC{wosqO^jd4+4dRc>US)J)H9Rwq;u4Wm98NkQ^_8R z-XvU;Z7Rfm3g`M2@2l>_g_kc<5>G~1Sj#p`F|757W*ZUeT!#qrhsa)~sK7DkQ^ZJI z(YADsrWo6Cq;Y08y)n-+PB$h zememhl4uUv1aon+{qtRfT;)M4Vs@mZJI4E$AE*{8sNi2BBa<&t6Vp|>L}D=vOGse7Z(22nVx9B80!>y?+iefnrxs%EqQE z%)$AB70hP(aSKVu>D^aWkxs}7W7Vf}B(OgnLlhmgK}F%Bo1)FeCVR>XropFsViY}# zSpEnU(*sdOQ8oF*7;K8Dc&GYTZ~OFoQY>c=xa%pYi;vhjzwRsZJ>8$4bxx_XHj;GI zB6cx_?sRv&k%mcyAC{J`2nu1@1RiHB1s_PT9ZPT=OFSa9+bMvWNULXVNM_!zS%D7+ zh^9mhT=1Ly^zgMox`fVW3!Ian2URSxW30SBcnLg^tM}25;~(~Rk9%U><`>e!$J>SB z3gFc7aZ9I+gQAb8)zOX`sOwrhyih#k123R!xDDq*;Q{5(O!grquvcECKKe+RNURo9-W zHY)J=g3*Pz?eLLe4hBiz1QSN{pqt;}n*pvDx#dhfNRw>t36;rs3T8Z^+W^+t{4w-;OIz#Dty3$ zBBh6L{ujKslcp&_vE%W$Uk9`^#0(W)hNi>3*x)HXkI$1HzbtC?ZOqNoS>coXI=GNw zY^d-#G~ET-#&lRgIgwj>f!T+|Z7HupAl#!w!xGhnCfM@Bn)65zD{4JazF-NqRq3_I zR*=qZCIqsx44=&5*YN{3>WJ9{8iJE{O|*W8I)gB z2;vBb$cVKLD2dBaCunvQDe~vO7PKQ_jXUaf)E#bmXslPrYyL5#e*&W91w4f?l@Zfg z$IJePf&|9wJSD=RXVa72wn-M{Z<>|hhmNa#6NCZcX5vkd;BT4-1dv+MUO>RYn;^x+;^692PT;2kN7{CAtL1cWFwyt?&$ zB{YM*6L>@ce+(7C*l7%pgsHuf;vX_Az-pYXCbrFBxk_E_(x*m6n*;oM0{ zW}M+XMA1H<6*_2cRLuJBL!k5>bUJ zN+}zx1ir}av;rh=JYKp`MJZ=Heg2QimEk-LfMqTLc5WaJBeHlOr`b@f={(NdkpsWD zOn*W#ejTAc?pJdWITLFH+2Hp3PXZ4joAK!>7wSgLz_8eVj`#vXX5rO%au3J#A}W>s zgE1p56^63MQvy~u5LgfM@64RkU)tc-+jnZB`D4nErDA>iZLf9H?54Z?QD+qbKh{zPUn*Z_1vrELRft1N;g5rK`7*3_P&mQ7-E%Me%Y#sr*y_SWSDxd(RB-V zK*`CJVtoDfIyQNbj4*dzlE+s@AcF%C#Az3?66hUJ5d1Q^WxDe{zY1M3LB~P0v+j%l3Sc)fJ(xmig!JrP`~Okc&$o-u5?^CspMVm&I;CET<_re zRpDlKV+4hVV@3bI=r117iAcj=d~5AJ>Hqhj3cfSB0fTZ9)mVNG^JJNd>Z{f=E!<{! zrFp1Scw+*^Er!pA8YPhi-(q>*zydr#7o)nuUOXwu9^8NGN*1O3S;-Ke3BV2&<)z*{ zG_mwAu0}Aca(p{yODOJDLu_C!UGeQ24;vGgaswFYIkC8%d4^Z<^$sWr#5bA8GQ|~; z2TM%ZkxMT>Ag}+8*kz8oK%BT8@cgdbJncB%p=eZ(Fl`fE}3u8{mfGS!w>hKa>pq z4=1bbQxU^#B9BD@88`5pag1)!5wk&-m@aft69-+BKr!TFHJrU1=R(6l+(Zs?%a8R3I0%9!o;f6XMlIy%X?3gOr8^& zEKedAdY=?rdiqR7fBa%7^I7I$N=R>`nx)qoI+pj1WJk)YIKpCZQ%@*BPJb0uLxo06 z<>#iFAZ$m)vUI3VXqES}-widS%r!@!D`=cchOPH5kiP$P%Bx+ve^*fNzpB3)_)l>M zN@!V&i#y<^f0R&l{-%GG&|+3%AQS#oLT|_a3eCQ}_CV2n8VVBPZonU!of!u$08V7R zj6%tJ=K6$*HmA>;Ih{oSN!2wW^W$uB{WZZ*f1ZQs$UyRE# z9`#Sg1wT`6n7}?pkl>FGj}FPsDs=gRYYpKc!OnFUC{@L*M7gt)e7@4V&y48j;FU$B)^=^<72h;p57fQToRf07B5%(m9jgCv}zpk=CcEs@}d^yxF zP=_r_1~U`Ma*@Rp{lsOE2TZ1fxUzFug3O>}Hum38GLkLxIqV5^TZ z7FN8Uzv)2EuN$5kkRm(dd&+FjF}8HvzBtY0?$wI4{vsb<$USNtMO7A#t!m8@D9$`c z5P5poyjywfZM{FbdV17)+y-t^?+qbnfgl|4H zH|fS)?tAf41#rc}Y4l8;%^eDnW6guWBRyFq%@3t3&303^jWR`fPN0eDr(bYtnj*!P zVIG?ClDp-&U~f&M`I$T+yR})4hj{9|Tiq4sK@7~67AC_^<~-C>oXdywr`v6jr-kDY z9Q)4uc+FH6m&XChkz0?kI)=cfr^{jXdpjn+{*9)o@f;0 zYhK{M`d|-o*cxVQ_Udx4l22WRNj^_L{rTMKyII6#`Kz(fKYfasMqIS-+B)vz*cuJ>Vg+Rcv_tC5$9hWRuvLP;2F_%VAUIcmC??~?LPr!6X_T$TaY!5=e zV3gC27KhtoF@M4H+MbT^1WzdO$)jKoM@YH^Wfyy7YsNRl?D?>x;A`*U5+o>BU{Z?8a)Dvb$D}>Z zpCj0P=uYvl!#`hYFAUzwx7>mLsK43JGhF5)ZW0rHl+)I5gMIsI_kA_;OlG<5%oHbq z-Q983VMAv`VC9IbdD!5iCwQKh&pdIflvr7>WzxmgXu%<yFHiHy&F>bP|q4^0$ld zIW5(y*1$IL=C9r~jlzRlLY-Z0~tB8JXbTt@(oxHQB_7YBMGTTW{favu>x zTPe~V(RWt3t=nD)g{#oY@3`MYk*qm1{&?d*te!Ob+$2TiI`QU@YjT=&w{bbjTRn!DKR>+1XkCp+#KwA#q0x> zaZ~1Tt}ekl)x{PG%Y3$C4212Sl5sWX$#n;%*RO9rjX&-9*Xyjh%fWl^@ul)q3O>X~ zQBb=mP>g&zv*tn>Pv0jjZqi#h!S882EVxW<=~lRMls*7+cQp(To)x999_TY{Y2)ff zIxvK6%^H4wu&!qQE_pltUe-{ujSN^ilq>&K-s<4vU`x{fKnjnzBQJz6wo_r z2W-J;&g&&k-ZBCUrt?YZRqn+U>bwaL6CPh4t=uuz-UpxGXsT$?38{RN7{e?@qNpQP z|7_=w3_gYp=c~R$+XYwAc(9-2>PYjc$n0xJq)Z}U+-SkRr-(uLvbI$k8luEF+jXvs0BHJME~ z51D^(v=RWmkIypZUMu5J?%40}IYK#kU6I8zVsL_11QL8|k;q?7I^`X`hP}ekkT}oV zDcfscl`h_0aG0?kc#m?$T;yn_y|^&BE(`AES(voDi-b)!HU!^_TSO*|{{#$nMD(sD z9v!f76??2RA27B8sIlNMb6sAOjU=XX65z#2pSH_1+aF6?TnAT?+;XaV`Th zy)Dc%l#!6&-+GcT6Z>JI6U*)0lBYtSS5<23uGgatQr6i}L5Jz9PD(CclOu4z%NNJV zYuo~S%@hsw*2_p&t87y!vj7bq%y%>D6mNc5%Gw}yVQa#}&lj}a>@@YcelzLjS*5#- z#5c0-*V!5RU1v2Vvj2mA@7ZPjSM9W$!M?3ck(!BY{cOi?k2)(3*aUZ%%O35RKbp4h zUdd7%AA@wa${zQEB=6K2ywi`t#Dc;e?o{MSl&Gh#O(&c@a~L1WOo`8uI&p*|BAOQ9 z84D-gHLW1z#blo);9siaF*!RsVUdb}qAlO25*?yDH_5|3ZRrO#4H`E{+~@r4KpMdw|5??%f}<8IJ-kg|?2>qEji>e<6j$mt8? zg^TmHof#UzXa4vT|ZK9Uf0n%bP50y|&>ps6C_m;sP}EKFfV;AGuh- z!ai&KrJ;FD2|D6sTcDA2T%I3>Ndl~Gb$0j=nk~}vfZ^0qOy}mln~lnHKK6;p;)?V~ zQhVLby1!PyQg#MyLzKROu)zI}fyejQf{3$9KHwLjuuP?7eJAZ0ZshHOsGL=55KTfx z{rmF=vyZOo;%X);(J=xqQTkJMcHAkm*Zbwvcn^!(SL~S{>D%pcCsR817e-lIn-Z9N z7oLP$>yV!iNL!n(n>Gn_6-v2nGO@JxtZPgwr}-j9k8AOocyBI9!N607!9j3qRqys* zt&JSZ&6L)5jfFKsx#sN5 zlYgnHjh~dVOg#!S7=uC{HZzPF&9a6i3>nSh^5+uy<#G{HFX zi}agd3^cnTRZBb`vPF{)Bw3%5Vvw zr#VPYtgLt)NHf=QmEJ(fUs(>LgE{zJ`J1Y4)e=`K@z5U`o}yK-O=?!;em39W#(IzWaA}VTX18-VaC=fAyT)&IOinh z)ciXCKo1#L`@&*b@{+HUcM5RRj8*W95vIqV{BZ7O#2m$mWEyavBGdc)EaW35=^s}&VW4ELM!}I1~ z^h~Y4sZv9b*>)gH3WwJK#%NGv=4U}kXNQd`PAKZw4I?f_8Tx#gfM2s5a3d^EkrE48 zl6*#;5+WHvycazK4O!AK@QH|S`tYy$&pC|BVhN~OoH<;RLUCX zJ2^qd_4$Be2sF|~&&Xa(Wq=;X_|uq3T~aN=P|!WldY&%)rM7fJ1`9Uk3DOLh>ntmQ zY#u3)an0YHMg35x|FgM)ks<-yys+FSB?V((p1~$M;D~eytZblQNkk&piA|Vl=I_9m z^i7F*HL>U?&>Ep@f{Cr>dOPQVd+aa;%fv8YQ8BilMPSiS`g{(J(oPt7br~qZ&Z&e- zvvr=xDX@wW)Tkg%xz@&uQD95XST$e(8t*N_UkY~SnpFaA|6GVu#xE{4z^It!YvYV$ z90rhwyO~9_oJDD`F%Njl*WC6H^EoM}hM>$(GHuL(&i3gTgE&a|I$c$&d!W*8UIbXv z!1KIVld1MK7hd(i5?$34h*U!{EsOC(KqJ8h{HQDg1TGw$%OKnGB8~hG7#x(~IRb8r z5p>!OR;5!sVH>B;%XiPxPVUvufLZ0Jze8ZNhDAXR2pRZ1F>2hRW%%$PLlFF#>i~v; z(e`zq);dADIE*_(UB!Pbs0PG)+U;#l0@-3n(KAC}OXRB{x^FQ$<;Ow;herz8jESq% z(IH~%|L{krubPgQV|Lu`J6sW7mDg+kTc+UZ7pqAz<91-V?=maF8JYstE=dSRB`@mK z<}_nC4K#jz@XD8K;A~B4RkfeM8M@9LFqfr?@t(WE&D^!7kL`3%H_`U+>zGa!F%b(ET`VFe<0y(3mdm zfsWh2_-6g4&)JF=`!W$e#V|f(n%B2-r>GhL2W)0sj1E)uLb#yxK4F`tcx~AH5)(Ww zq{&UFH_f(YdUHMgWA5eA74Q!h}hF zmA;JF$el<$Ar~-_2eiazkZ|?*H%pbqNq=KJMo{QCf zu`+=q^k}p-Eh12bTKG zdjo)F6+cM_<(UM3s5FbAt*u+e_C&RD1`t&j!3&D@Nr3u+RT)EO4;gb`q){78SOU2` zQOu2U!qlx5_c9R-lSWRGPt-?sf^)TS@v0#01gi(2CD+d zVC((?0-n$2vr$%8dC=x_?xx-$;G{rUG`l!LTVy$3heJJ`+V&wU-VJ~A!ykr+b~-0W zW^;hSGZfw-W+zO>ak*R(NNJ|##^XT!j87YowtF>tVhAwx6ug{_qJjyBdthYFv&vdF z4d7=_8wMa>Mk_`Krjq8EUzveo%AhFN`|w%+n!+l~6A5&dEBszb#N~EQmn`=iE7<_~Y}TX|sZqYtb5{1?^3t0==Z<8fgAc>FQg!9ADXo=H7ru4z zXrOQQo9bxp06ku4mXCtb?&n}%H?$p@o`HaZ=990Qa>n7JuC;LsXQ!M?AU&kG zvTVI~;If2(a=N|k#jpLJS!A!ruQ!aO7p!YV8-1(mOvlJO^=BOf0~2vMmc_QE7GPXV zHmJu8l{T@$B-lloH4+Ut$D&FgZ-V;cCfMS;?|(a)`pdtO&k(HSs+0LGIw^6@O-Xs5}bBw+PJIqo#V=*db* zSEj{5;DJi*rj`@1E+f3Jp26bWA?ifpKP0?r;(|5#^;eHlRbr+WaS_y0fl z%%|}l>ZaK7hA8g*xd|bDz6m+bbj}HP=vrAO7*L%NmE?NWjJkm;79<^~%!UJm$;i|n zJ&dgyGObSuzS{AU`;ih@&IAmb5%XXbUfIj^9@{8#y0hn@ie^0 zR+8Q}*6PMWqGo4pR*BMwlS&vzTqs48X&}L5pfzCndb68503*QHQKg3u{-ObmxE$0? z^$eAK1tts|#SZlzee!s>X~mkP1ur{?Kk)>Ulm0O{Lu}j)nRw0}-Q~Lq2-f%m5Ii-S zSpabR5@VT8n_OY00N`{Iff%5N10J=+c4nIvUrNaddC?dcVbKK7uTqrYpGmcq3t>3h z$KcO8q}Wl+bb{`QPDs})lq&-O*Atr2dHV3J4Vw6a9bm@H8DTFdzL&KzeLUHmoji)9<&` z8oHeCICTB-Xq4kcaJue)zm+hMSA18Y3yr_*)r}QK4FKqfk=)v!(>fI5HgTC2fc{9- zJH$T3hPlTs*F1KL!bxR0lLC+d6!KqWa0~hxSHLZr;Oy_awxB^#X zf;o2ti|-23kBVp)KL@e=T#@ks2$}>dNIyuSI{)m)(sV_@n{z`p2$uSAr-PW%l&jarhXHMuQkt_>;9K(206`VSj*6D zXPR09|2rlLMfs+tcU*esdjvFU3LP3)=M$mWA6y^S3Hsgot*z^n*k2k;Ob$zb?<(Af zOiR^R>uGkzh9Ka*1_L>liBZg=uR)pk!$TK2hJKI~5pZ`VMcEI1HOjdk9;(R4%|@@E z*+Ka#?wjjFR#JDjtS7ODwoM5BBhCClNqPDoT4Hymvi0Z8IwcrmD{y-KT$uEV~}}DOHgBn6_Xy4Wd(r6ZBGRN z%kU4d06J4i)WhtG3Y#Gdx-w)3_8?tiRovk(?<+;vVq#vq97G)Qu4~@ThZ;x7 zW~K3P6a<;~N$ndxO1^{C3$IkwKTMb7Q8a9zinQKeetdcy1(wHN(K{Umzh`|qEony? zN*EIkVgI@A+_oJ&YJYvuayL3d`nY+pr1|tI#$>C-!(~lC{}eR6WZmS2oIZbrNupbn zwD+|){j!eZD<->Smxb{0Q)DS|T7MIATD!pAr=kt#p~h{+D|0LTr^z(Ojs?)NmEgxxp=H4}SKUvCB?&Uwqn*n4RbE!7-f1Uj=UZ_{jk8$8pIMGBkUYMNUcPeHm;aT0trIwIG^s&0n|u?f2sU8=XAUT&1K%I+QR z=LyAKe=1#bHI;7u5qfNFDlPQMTXX!?tFB)0=D9?kaS~I}DEIvd@Tu3DZQoL(Uv}_Gqx?cERZ2-k{p%1+w5p>= z3hE6OuMRj=$2}`+c<%41gl1igwtija`7Bb zn!9?iSOJUH`5`5<)-LxOmVHjNa9*t1Xu!D4^tn2sCRj_zJQvlzU;%xoD$lCMK<3?R zi4sR6wY833$(k<2ObjUN#x1yOYO0Joan!!1Yzv`JsHFu0X)Pu+R zQx(ciwB?2s)RKPW|K92lis4R~7^Q09K39{v!7=^pAh#!(8!g=&P0;UO*>Ws{ zo%623Ll%6TGCk(A6CllSEKrm=F|U(g-Z1&7-ES$Al%TeC3o1#!ihQ3VMU!{&S!uUQ zL5kT#;3mydNH+Xe6=kcl)`C0+OCXl;C!{HzfP1+a2QBYf)3kc6#C>Iv(POK2(m0uX z*SA*Qy-?_>)0LA_D5{+T`PK6!lPQO16M4zoCqv+@1n7CK^)4n(2vbz#T=-07qZ)ha zZ^Z5|lNVGDu-)nXS(PKibP~zD5UX&@e!ubIRBsc-=CEB<6dIqMUO`k`CD%O$J@O>E zqktWmb#Il6uE^MttlcaIG>T?n3Z{80ZP9ashB?x`MM2x%CM^V229TL>&_Z_}_;@#{(;{fPZ|rMj_< z>Bp*t{=)u}GuO{>%;-J^WA(8gM#V^P$s|>6h3zC&9b47ceEh)1twMG_4MHqnNV=rX zt{!~tsZ`IvBOga8mGU`4nVIb2`xf)n>*@TawXfD*=n^d2^3*w^C__Rmv|E>mxAkP) za~ri=jO&XNR7b_-T&M#1%QiR&1Q z>b$R}qjXjflrXAQ)o{Od-~`eWX52iz)eKd#P?kDx#{M~*zgWXO4_kwew^Mm~e7pN{ zsY?#KeefourbUt!4wPkA9^#My|A{WT2ckNCv}Vd%VSwd2O%*Aw#@6_LILy(*VbXcsp0N0elH)BbPXOln(L;;y0D zlB@gqTFAQe0s18_KXE$hdEbkY8O(dOBVVE+=LvZ(k>0si>pv&`|Ec!ZZ|6XQH#e<%Ju34ZXCsduPa|BVvN6E1Hok z&HxyCSHfN zLl8l24Zdkt`+iDVZcrMNF z$ca>-a^k4Sup5whprIDx8=@m#YpaOHLoWpChiZH;v&F0N<+Bk0M=*DEXD*c6pd;#_ zCe$#(yRZX0tgaV3jHyr)Gr#D^!KQ*DZ<1iDf(~F;`o^!OJttmQRZb?WDh=n>6GMUx z)9^tP#trA@Jw2Qc4yI5s**E#wD<262Ny1_2*U)nTe!w!^c0KK(zHfMq*8pFH1szMu zcKkGQ!ySln;Ob(*gMsy9nP-WmT(byHRfYAlD=0a5R(J=&)FGn+XZg3`Xdh7MI8z=&tYCF)i!`eG3`rTDaL#QZMFfkQFuv#?wf8|bD= z>fKMkP+~${_}Pj&H2I#*fuQ5x{e%v@B%f@#?Kh>;zfnMv}29xgD@bLbAc z5p9R#wf}3MKu?#SjI){p?sdU9NX(lyGJI@Rv8N8Oel|UwSJ~9Y7Ib1b9ioEJ?Z1Im zm}tH@m>@A@|CSWZ&`x-F_cNNEi)-$S!&vzn3vjgmn;9z{XOeB$aXEN6*7SsHd7BOs zr0@vLM7%^8cuY=qWAh;t+yyp#5n}~7av~;bKQsume>yv`+cuP6$;O&Li%)!0k#}xb z`r20sc(@8wD)n;0nA6Ix7hezYrhVUNVRS^Da+(!W1Fn}05U*M_FVIHoXn#u_TvSE1 z0X8po?=p(Aq=)65v7k>l6?n=%LV*Vp)!KXpaNWBVWF9ok1Zq>C|7?wKm{ z!d^q`o*_^Z2`@jvKYQJxaW;;;6^|P`4v-s!V8Q0ptqfYG|*f15ah`2xf(>LD=Wr<$T%|_xRa}=BS z8m!Tfja6$E0WQ+QrPpsC-Fcu2$X+$C=QxFh5gDA)IoQOx4+EhEIA8&XZ=pa8T@7&H zXFbsgSxlRTcQoq!-%OXEP?3GJ9RiSN)7b&5eIIr`LUE7i^UhZrNaah;axp5hvBM!X zz&o@%&)%t@_(*|uQn`4OPi9Hs88bV=e2xFp`YqpUpLf4&iph|ra3NcIWaQw=a&V^0 zO9A6@%q0Ieylblz7-gJQ6*xdUW*~ZhSOLm|=yBwOFn30IVD!nM!#W&?1!ST!yk(V2 zeRnW00)*NkMj4KkZ>0;7`UqMIU;7mUZD5sg`VVwR$hD7z7`jtvl~o$?0b{6LUwuAT zIwePcJ&TWy*&PvP2sSq!l`AGg5}-6H97FCL2~Icy;=-kQu*m`Pt@}!h-#HR;MdN0o zF|N=hhUM#+lHaGbI?v{yDn)4S-vE4LxJS=e39ZfzNe~g@n-Y`303MCv4ww=!*+qhR9HWCYTWk-vHB{b`i zD!dHqMTj}eN*cJ5AfD>j1-8$%}gkyt)wo|wK~@10S+1t7cQfW z(=!i#?fW&pkaD9x7n$*s1u2ky{@{KrDya7M?nKu6;#WjETm&N7YncGK8uuH~;x55; zQ0V*ylSt}nkG|&k(F>q<-JCl-6&9dMiY5sFWmPg7j1%5j9}4Xqfz7k0{P+*TcwEVe zq+X#h>AX3qOe+7Ae-zsiqIDyMDrsl|EK`4sh?O6vxJMe0KLGzyyDugv@&?jWvzsRd zfWDzxhhMttzOGH5$~}^>^j`;xtMpRk#2uf-Vl^fm;?{s-5QqTf6776g zI!H4f4W)NfP@)I`tkV1PnEh+~)(`M-bMW8Px+20h%C=Vwy;rABTb8rOTzuSpmp9r$B)NM$rrajaR+-qiZ zZn8x|MU&HdhDsA?X8QvF%Pexl=#L-88bgZi55sCKJ@!ikLY}oAO&J91($nBZC zJs%ws2A(TJ3f5GHYt%o=XXEkaDJ9(`9!xLapP5Flf%|m%vKEaW7A!T zb+gz#vcc@rk`u|Nt-Ftd=TrMbqXUdV{5==O-jWC9#fg!r7YpSjvc%~eIK7woK3>6J zTyNHXe~P_|eWG^cjApD#ldB;uFbo@e0f`Z#lBk0GGLY#h9^XR0tx0Uy&txaRdml_Zic9dA8jCRbGhEJm*#rTt#?UPUips< zFAM79{&ShaElV9-eD@URMr99GIK*&|4v1Pc@S>+JJR z&I~@xzS%YPu&3XN(t%fyuC~=!JW|wxTUY8$OB1w#o;j{M5zW3e8`vGjtC9F@&b_G+ zraoUX*|cN7bK+R5J{3v2(mPwvpBZ5>TbOfU+DPynnpm&rA55%YwvU0o+bI^(Atez` zt{a^>COuQSdg#~P_P~5U!r%JXN6U2RH5*TO%Ya^?oW)723gM^g;mgNz)<}HH-}+k5 zG8u_cwii*g$k@_Q!?j-yGL0i;zA?S`p>JHdba#$dCJA!h4f$!jYdH105wcbbq6O#g zuCRMnu6QCMc&lf4}wM4idIernO4cm43BiKqX? z;FQVyEA3Q5XbCMlxang{VIiU|W)HYbtNO7}*&@Y)&bv7zNpel&pflKiLD18R)Bm_u zsK)a0&OCMl`?r4j$MCC`f}4*`c?G3?jWs37l4ahvN$-BpT^=pAu5v&6r+kB7JWPB4 zL$ZqN!OSD)VubFfv``J9OHkx!)Tz^Xvq@xAD{>!CM7be!n*Tj-lQ4Jr{Du?w`xCS@ z!Lg6mN}Z=RkIQ)0_bWzI+n~K^8qSUJie4r4tfvC`)3}>veLaYpN9r-25?|tq@m{Jz z{c87(X0_n5k4~x1o$c@Bi9#d09tN3%JM*j!k z^x(-x!Q1yThqs~N;S5R#BCE*eh|=$ZV2AkfOL|s)3_f>ZVZz>)#Rc$n+r+h0H0Jj1 zO)X?VV}NM+Hndk~Rl;6Y*z#~QJa}Vg_IkagcUdoOYi}b|T6)R&4X>wd?opMoG_A4z zJXg*Bc&0r1^3TY|?9$aal>7M$zHf0dr0It#U!%;rtHf+n(jcuDHl?St{jz<4^gj zIH(KT=POF@k6*HMZKuC_f{uS{|M=J6;Z6%c)_<0ZN8<$64kJ?{S4E2K#mO@n zts(h~+{0sZ6I-?h_5Nw`dZJRkIa2NX@nrvKm_@E+NPU!bYyH@xX)c$i`h!u?T~z*J z<3%|{x)+4<{wn>W$brwo&Gv$nGGgXM4R5F;1CJGJL|OCG(*tCwQXskG5hCJNYOymr zxd|TpBn&Zfv@dv{tCc;c|ItG(d&oqsyR5|vyMZ=6i!;IehGILaVJObK#<+A#% zDft=cuS8JN!)oOG(xJeNgYw_b2d7|Ml7lhsean(wh}e%j)(4SrcvdC(5~|yr5185J z7kIR}7|dGm`#TQ12(hCU3CItH|K0L|;v7+cl7xD#FeYzl818PWCgke-q4&FOyF~t{ zqbe5XkDt8jpMalx`8d`&ljl}iZ|-;g~QQw z-Mz$eQ&n?;bp_Xv^zsekBQGH%5`%MpONdYEp!>+jnTJz${$}uu;|0%F1+b(kn=Dvk zp7tZ>F&HVh&D{+mVkWeUU81)_wl%Vysf!j+n|)_!`2I0`26IkACvyMnmTv`j*}8xJ z41!93=dp_=IO!Eu`QYNkqHyk7)9qNl)kG<{Av(9H9ND~L{toLQz&L$zYaA}Jnv`j` zF5wZcx1`+1ym3WiqjtLXiu3*;GCvKqMq^3F16+7>ZAtGeF!-LGmUtzdbn`}f%Otz> zJqK%llD*d9*RAfEzGBeeHPORV&|Us7UiBNjUG$c8BOj9e^NFDtFl~2Gn$^SqBkP@` zBMZ7l?}=^Owr$&-*tXTd#GasIXOfvrY}=mL$;7sGd!FaMcYW{r{-|}j&pLg2*REZ= z&Z*k<+v}5PD=^gr%RrN2p`pu^-`VYH(s^bvRCxqlwZaekPj$1Gmc>!wwOnxymq1lP zrXm5DuaRp+d|bi+o(DTJx8|rqB8bciWX6zTzKmZL!R3O8e#(~a+v1tw`}NPu4}?8$ zcRq)2YbpWjzuXBpg8!6W2ON+5sr`!fRo~Nu+M`91F58na>_!;dWt`v_^3u`c)T2UV zF|5i~%v%|8@M)?4TXOF1{59`VIyLz6>H?VgBzU*$;zs*gdH?OfNrPvC@ zr}-^@*}Z<-#nPE?yuUae^Q~+COdJ%x{2gZLetBuPcg!b}ZC^djjd0LXAqujYm+2Y9 zOax3(+@H0#14KUGo*%a!B1OEWKXxO7K6u|Au=9mIZ}NIk*<`5Mx?+1f8d*DwuZ6jQ z43j=z=K>#q&(@3O8($5L-g$;Lrd`(IEf2iMee9yEVgb2GQMpB^0#9zMLKUi;1z+cwkKeQfNx?lVrA_?~tzOYDE^ z9{PK|6=CY)?2aUpz>U565w}24XT86i`0V%eC2#!OV<%u2=k_Wa#>%X`dJxHM(?>rK zNXrzD)1O!E0g(HdD?aO^3+;txlE|WcT$;ia@F_BN$Kvzf;b3i$4;`2U$1e_awc)|} z@4&$IKgmM4IQ}~@&NUw>A&`jqd&g-nqiROUR0Bd)sL)n%f&i$4>_ zBN6DOMHO0kb!xv8V9nO|Njh1X-nGUMe{1}C9vah`Fs(UDPva05^n;utpMX7zHyH?6 zIJAF<;)<%A6FI1Yc^$VIHQTe+V4d_Lm5)7yuJ5nminlcqW=mXOoD) zFnA&cj^K9dQ^1D;mH6(EDpTu5ZMQz&9uAFzek$8zPD=c;{$jdu_N_qL=8{m}KC^A{*+ChAS3p^wk5{^!sc4WJaxPBC> z+l>&uAy^JzejIh=oTkK?l<_Nhb_d|gyp`1sBBu~0OgcV}kKE@!(PW4Jx~06N)Ufk6 zd+X;sz~6#}g&=*Jq2;RO8Lk|nHYS(;jJXfCz!j5a z-H6SMVSjnn^Cf>uR>S5jmnq_}5-q)ph9WbDr(f2$wXFJ`fbQMUbQU!~A`yOcvdq`` z-y+X8LEu3wgkv6^~oZ6}`xXK!>+Cwc#=(96G5(S9qQ|bhc4?uas~vEin}K zGBkB{)QnXPFIjgrrL^~HqVhMTr!c&F1<;Lgiyvu|&;z7w0!9w08@ZMFkJ}ss8=h9g z=&;LfqX@G!#GoFBg%`tMVS{W8v$^zMc6)BVRcpEaj9UUfI+60L0`Nz>?r-!pI`yhz zAKsBYRpUssTAP$>w~KTYCV%R1)_o-*c&xTHCON(EJ##6R@)tn6=<}ti1I1wqO6G^Y zgXmRP%>W+8<#BxbOUo$XnQYlyAV>v2IZTrv7t z{k9sNxmtB1OfmTdJ*o?a>D_IwO&_tHG><-@Zwl&McR1TR59K!f=HCUU4f!=ZSmXT>V3idE}3B(gtiYIe*F8?v1Ihk|ccm)i~J0>?XKjD=S>)B$`z^ zDF8|=Xp!>RVwD{6XDhK`zR6`An)q2Y~9)qdH!=H zP3csdK&_3IKxJIVZTeTLVbymm|K=M_h6Bvx&A;d+IpFY+^iftl!6n(;8Cf22IYGiR z;Y6hqamtz`3YX=7Lr-kNC{J9rJ#NT;DgrXwXOQscvIWNn)Yd$vsnjY0()e9G>7N6x zpo^KNMj8Vw&UkA_B5t+awD#ANVmIUTxMqLlmWeu)WlEdi>M}Jx^Y5Y}2ytX$VnuxE zt&H4B>YHMSp2p74cWXJmdkZb(b*H7?m8V_28eMSXqrI&UOKMDkn5MtkwAbqrI{~o8 zEgiJK7OpMOAnOn|1WQf){f&Q~Q8Q$Yl~3YV62^rYF8el7)v=CJc|xTysWgqkY=y%z zwsv&vc;7Qs_mutG(qUq<9_IE8m2}{op*1AEqG-ZAt~RvdaDkCxI(8!AkNnj|_weuF z$z+JGBQH>7B{P4QZHejD*k8h=&l6zjSmlaT#!5qHY-o<)bu($#e@nkNn1Qq1JAb^C zFf_)6HlFZ74by#4vP|~jJ|;CZG))+5Y{<)|BrFJ{XiTAB&>jqyqKj6!>+OAgxdN3_ zsq5dG!Sc1or(Kt7u6&oFO_&ZMSLtAUy7?TnlLzt^sZVA>lbwZm@}O|HjT4YRrc#E+ z7Vl}+^91MD(R&KVaeUopSDJ{USE|9m-@S>iihqc$X+fc}RoIG1K=E@Y$Bt#RsM>^) zp@<_PssT9|}TXc#YZKXxo(VN#1br}=vY{b7W`UDZTJwD!56DZj81 zk(f7xNry{P26_fqqu%{dVq9FrGHUYB0ae!r7BJli+7B{@*`k5YgBrtW^cx|88OM} zugy8_TQjU$vaM3lAK!EazoG8*>>J((K{1&tVJ^>!-n9?Tx{$w`XA zXzYGg9pwBTF+nts{y)4(a}t6UIAoTV@z0O>Ii%Y*CYJ<4jE>Vz+xyEuZQp1$HYC^| zpAd0v+ATiUqkc05bT% ztkxwNyo~amYo#Lvq~r3zNP^r$ST4Y)`y-FdA(j6*$g=}OjP9<)3PM;Bl?J*KwZ_t3tZa01{;tX7taOg^XcJjb&--^frTq*YqD`wUWZq_t@v8=|7HpK5C zRhoW`+KFxRq<_l)qQLk=Xt(_%wb5x8SDeaGak&xj6%8gvSx@el>eFClOQkLkb zMkgIv^dclp_6feu!(O`Y=Epck2!AJsrjGs<2ZaZ8Kr>S@jwVB#LST0M2Ejy@GW7i2 z`kz`evGP!lDYRxucB7(yT6R8*o8a*hmSH2a9*&aY?yBX`nnG$lG0b$us9g4qKG&t_ z_mcjzo_b=8y%q@4^B(wPpI1gcB+=$x_rMiZk0C=Ju}3qZFGI)axC=^v_vpwYjL#C| zX)XY?cYNO*)!Fmesn3U{CIE5Iko5qeumi!MI^6eEx(oa8+;AQK4x7SR+|T}v1)L>3 zf_vz+D$EdO?cpR3xvvt=ROu0EpqW2g4rXWS*M_~x5$U=-o|XzgOSv#baLzyLPMIcu zY^-Jw?5G5kGst^90&hvKqUXVa;jLaUej1SKtyFxba{H)GkW*RY>ACG)U9r$o6}+~8 z5_Fro85z%hfDu?k_f`1rwMFLF3%Z5wZ2WiU6K}ffLe@Sta1DP?FuAf@QwnbVSC+j^ zOLtKbHfF!>waAbv3K$8!+bV7n+d2PMHsptuJUhPMdyAc>8ZBfk z+NGJ3Wx$mKJ~Du#T*9NVqE*h1q}&)?IUMKWVkO@X*8XX=jJM$#+1#6K2?fY=q($|X zs>Lu!(B1(d1><^xZl|BxpX-168SedV|7zPgvzR3`Jg^@WnROe_l)Cj zHQA*hfx1X$O1QsIk21T(ewr<2R&C5GRhFqar#bs7&3f{r;6Cq5lREjBDZ3IUdDRd5H>+cDsTuNW9}49e{o@QFhR!Nth|bh#4412}e(^q2+nZsJZ+)z$}t5%5hk z=yZ*MoxK4_rMO3bnbj}g%Vkf1uhcS5E;-Z@|4yv7ix-4{dRFiI3{BR6ofUA;0SLSW zp{6uH+r1|3T<+YzioK4?RCEYPb7Z1gM9Hx9QN)szgnoz8Ms~okSNd0{Ly?LEn>7B!0f0Yqjl8cRQJnw zdVc8_i;oVg~%T^*W-FmxHKCuaBJndj%jic8E@(*Bt0svErM#_U}u z2c*uFmsdu(42tIAI!hNipXTBJ9hS2hz8q!Pw-TvA)!}}GD4WDgOPD?6|G1u90{DGm z9Pj=e?eecn(cDCcx-Za5GCDN+v>4L)z1~(AnCQFNf!W-nm7l!^rN` zxy4$8`?M;`^N=#B`sS-3w+NIDM7LW!gBTdS9O;j(U8LUMd?5z@&I!5r)?7mqPnuz-%6E2(X6)?4Y2k4u$%tqNKLz=uD!29a$1BHU6qIxWjb!_Ob>#5 z%)ZSuSdiTu3@YeP6DA?7fQs<#PMTR0fjmN-j6G2?kN)UK zo4*7LSXIa;1mP&8!}ORSF9qcgr3p(Y;*_Xej1yu*+ZvC~H%sgi7PhpbK;rRV;19@1 z&TZ83RLI*cJ{QmD%D@F!)re;-h+l0M+cX#^BF75%6)R5GzO2CmYW@7AhBwT&iu>zO zuFKg{Vw4|f5fI^$j}U;3-C}yK_AOJUQuLpcQ^f-|z{3^-sLQ-vcC6uF&J6u0$7zJ# z@wt2#(xdH%Eko_2v5honR(W^-y^l&!uNO$SKHW4wW6T$t(@gL0tE+0z5 zN3&G_tMBOl2>Jh0H{k!PZ}n%n?El;w(#qyPDxit(W%hR~-hR(3`F|$BcY!UCw@&NZ zP2-xM<@^2It{&+O`hQxU=N1nqa9|?xC!aRpYvDyt@V_Q$=g4%Zm%0{#x3QnUlaUugsc5?IEm6=vRR=1Z;z2 zrg15mZZwHyCL+m<(SAnF{mBoTk0RF4PxLK%yoL{+d*uKE5TcgG5thAK!p1o}Gj&fH ztv$ya3ZP)zDis!2H4Kb{+*k#3N;pM1t*1i8jJr5vlS914^jT_cf5d~63SGw-KTN`% z*E!{LftpX@e|sg_{M>gwclp>m@B!!OdsTQn3;(7QymX3=#5@E6H1iBNOV2^f3ay)3 z=$Ym-lrm2M$Rabg5}uC5e*x#AH-?~1PSn(=i;8n!5G{TJ~JkFO31Vd9k#uv(^I-~3XBW+Wv9P{3hX z#7q2h$)6@+P%|_~6u|bByG3iFZeEr{e+~nC_)C{|0pPI;Jcz&9y&R#^vgTT3zE?9s zf1MN?dsGl6Uc8}WG1tB1z>`o2|ToenKvcbCt_(_oKRgbj+LLzi40L8s)&j?eU>LBY(KgJDBFi9TSR3S2wvn< zc^1dJ4cdFiJiLq zga%m@M~Z3%8Nv#u;E)ii#4U|l4o?9)pUoLTjlb$Eit2NHO9q=XzY?qANtaA&k*iel zn3zZb%RHzAiPpBgkN?`q&8Eloz-fMetCD>T#at{Q z$3OQyvC8T!f+1~0$LErk2*_^GDM9?b4_p~?hJiqk-Sy;52gQq+@?zBXW8j<9A>Ag0 z2jard9fX%3Knyyr1_wt=RkrWYnJ=!Y0~8$D_It8h3TR1+IObqn%LS;`z|URQd+cV0 zwA-3wXQ_>U5xCADPPoqJHOMk@HF)o9Xlt}*-PlqjRrqIrvx@_h_FRa<#S|)Lwyy*3 zdtPEzoHCXyR9e%&*oH+8NgiLQS9B!sMEqrKuotqu0v|4gjyI%3dapq|#|#&)0L0ki z}jo`ZF4uKGsmyZjP@F1fv>ZJxPmB)a3(*6a?ipDGl> zqnzYfaxr(?(%I6foqB$h>LdWYuR=xUPLBuBOm=iM%`Ol#MewAwj5>^iA#Em2C=!N| zG@K{u_`1caI8q_y;fAykJ2Qxkc={ViDr-P-puT>rt@AwNKY2Mc%6e0=;o>YLvx-ep z;{TAV?N4m~;Bow&`OkQnzQ@vqNPorIR|tL1umBi8Pk8iWPph|(_6~SNv5?R#xM35Z*Y3GI=Im}+vdGluH8#) zP=8p}m)DG_Ol*B7M`u~|uI;no-aU&jey)eq{N!fJKI6ZZ3^a3m`<@*dP$nRnsC zvv|P2`ur6H?TaadQS5xHC2XyV%N|)RxjsaWMVM`X;%x*E7yCdVu12DCc_~VTZ|c^I z(~f~qz4w@_dx*SpmBx-Hf`HKHqSFqj#IGS9rI%^tK_Vdsn^PKl7ygXe7!rO)OZlg> zAwA!Tr5@Az_TebMRq3@v%rXAWu|g|@%sd!OgU7?~OcR<6Jzyo6t1Z(@Q75whP_kz$ zG&&vu*rpexTEQvWruWD?mHZnMa3_oC50RPuFtVin8Cro}$J5G;LtS1Rm;4ZC1?=Q6 z_AtdvjvG_XH96NM{?!x-ANFE%`(ZAwDH=m7qn+#2G329t)u6?XD+R}o3eFCdYUt4A zHQXelM>+rgUpVD#mHEdVy!IwAk4`gG_kfOT6#NY6e$npnTCusBAK~Gaaqs;3+YY%Z zE_LEOtKv^5VEE~0R83PVYis0?Th+H1#0vBjwzK7<(c91b`2}%5(5yJ)SxqfK{$Gk) zeoivY9R{aU&fKP`Fn5Vli8+Y*^vwdaPSPTX_wbibC3xf5+|uUhEwsG=B?s3V9dI94 zDJ}2~Y*(tC<`}+ShuX0{rYZ<({>i=@pC!qsoj&0>*(7>r=_1c*kn8tJPNi!uwxfEx ztSM|~!vIHeKinNZP>BJl*dI0Pit7j58MVf4LLYITPqd8#Vo!N`uyik~#dREOto1iJ zOjC1AhtOIdX)ayC;xW*GJ2lf42Jjh*W!(qzC42@H>C2;|E5 zbZ;liZ0>O+B6u(#D`{{Hcds#}^xfWTG|vWaaPI@Rjee*&y&^om>_$XnJdCo=#iyNzm9`4FNQO+;lNo;~{At zEfVi`s>vGo{DmG(w3T)X<^B_^k+|J#1Ku%aZ7;ZWgGa8~8 z_B3q0k93A48n<*WHEyi6X4oKy8Xf_~5Z;P6>hxX$ope6?pG`l(uV>vvi{9jKg=1d`tRWoqUsuZ|)F)7iGr^`fNp9x$+!Q*z` zo_BZ@yichU(ugGB>q^bVQKZiyw=yU--FKCMMMN*4b5s^{2nN{EG7fnsb!>_x$LOdIX9T|@cP~@;Ka#4(wGaURmFV~X;O!; zhQxjkO6w>Ji~DL4iTlczT@u$5YU9&tGh5d3fuoNVvla@%7yrjwj!dQ9_;5{@r!3H0 z8UwmV(YS>msCvL$fiL<+(xvSJ$1&a*e{T4hh)7_ZI5gQ24*dHmX&b&Q^_xvV5@YcL z2;z|YuF7Y|%9y5+Rcu@;J&uVGsnmL1(6JDmH&Ppy{Wwz+C86dbze)9#!Vw|QX-BoF z<9{uojYf<}nK9wDQ~4^XfOKwHTwL)pVi>R%WFZmD8h-Q(jb$K`G4apg&gazf5&wAj za(U)bhTMBM!N-w28?ZuU$ctuks3=DVtDR}ZQuJ~(3S`I<6C7T;WOoYA13WjT5`cAS2^5szG**Ohw7Ok~2e!~paT;UPoNxtzG@? z`Udb}`IcN!5RLk&W=J;0 zDccvL`0apl*O5N05yM+LS-5++SpxAC_z;1nSd{7z?A+YIkVQUHFm525F`nMPX`J40 zEJh&p2VV)0{v9+6(=h~30AT0lVf$a9PG3QxPOWHNr#eT3CVY%_BjjNHqB*&Y+&~9H z2r$Au();p9c5XBOPZ9M1kNV~Bg5Q5%^M+j)Y*Z$m`PKf?Euq!5|9FLa>JBatkJ@t; z3eXMIx0PaUoEw{^Is!$Y9z_x=i87>R?gcsQ)Q@#?+nk4b`>p9(>{66%-M zDJYy(0VG3CrPE0&3t5h+Vd8mux1Rk(yC^ z=$w%euMo>zzj!Hb^xNVFoS*6`w?npr53u#I;C-BS4f{sh2cdQWLuns)t`$lJ*exxFYQ`9=qm%v_)yf`#16 zTA0zMadLaGK~K+KNO^rDyS`xQ6kLKB^5FD-(SLGq&f*MszSlXpaWZ&+O

    T0f}EgAk-AHU|1JMJ@;P)qBq~!mG6h;=dFczcp9W{!=#50AuMY%@!^a3Fez%PFN|EPM$ z=*XVvU3g;K)=X?;Vsm0^V%zG8G4aICgcG}C+qSKa&9{I5d)K}9{cu*Vs?$}c_On&z zRMp;S#`WkTJF^e+_(Y;Rkl5Xp5FvQqZ~*_6f|#~B)GaE&mILd5G#okke{6+VFTBQo zDCz$E#`9}RY*bW^c$)*7$M!!(ED7z0Kn;>}QUU*gPx2=?8H{CGf}F3KsHKX|Pd`Kj zaVYGn(3mDf`aCCVmMWdR;-ZP>ZH`qgM$jNkt|-%g1GWkIaYX>|!(|%<^9MRtvcNwc z%>S?)Fm2!nZqi`4T!2yfm8N1?;))<3D4v({30as=20Vo@QKbU|2~POrV+)-vnHic4 zgy;T^pJO2lGx#?-6eoQo$J_Kb;Tk9|N(?}6Tvfs&=vMmr;_88zm(`*@VABJSPGuHs zmH)>k3APd-{N^RiaH{Ue*IxUfbX#;U0}DKAX2A-dFb!U?0UVc2l zU^$8HV+ADklF9v?jmhWwxL@nCc^@AF8Np8ToRKQMU$sRp1-R7WV%H=Rkb5b(IztY-T~r zdAQd3(N@4EGxpMWUhw0Ms1qwrNadj$&bXUl{Csa4D&2lo#rfl;XHwYt;!5E3SYVUX ze@KulAQ4(Cj*&II$UL9Z^pI?&&ni>A-rnm;s+!4pQ&4y5Zjc#&Z#DSh=S?ush&$~C zr4t%(U9u=Bm+HOQ+H<=YW5e_1tz)n&F7rF*F%>pLiu&BQj=xiF^2P=%xE*t@$pVX9 z-oSa#>-@k3hosr-ceD=)&Dgc`XhxXhiO%n`5S>MEpUo@Ti@w-$P(pl2tTuwy>l*4rqGpb729 z1D$yTHBdX<)F_JHv7+mQV4WTFd_Iu6t|T0rzW?me%~sBk=fv$m3f6PYj#-h1Q`{W! zA0O+G&~J?dgRAp6##w%*09r9HCo05DrJ%>e$PzFT~z#*cxMU4z53~qGCn9 z$~$_I_9m=GT)mQAj+UWWEIr{#83!r2hGMg#?LmD$$LCBIdXE=cVa}|$b6Z`*dC@_| zESCgQmOC%lzWMdYaJ<;7q4NXd8<o#WX6)&d>O zg}Q9oA)e#z@u!$-b5%MlZQ5XLNzQ+>CMf?#zxOI=D_H|%4URm#NrS5L?hEWT06MRflP zI4BNUMqw6e$~!M0zhF^z641J2XSzPdk(`bakeC~p9G0|yfoeF*;`33tuZ*oDo#W$2 z>#h|y;43INmml|8#V~Ub<-5JByU;T@u$LeZ%@qem3LMYw=m}a|Gn3^3#)1Z~WY#bg z(bl0PyXZPen$`ze&W0x44x*JNUq$+MFZLw|fP5qQgV|XEfO7?{$>V+EPvo$+)Kspm zL+Uug$=^squ}=28s8#0WOaDUzMirBBDmy6f)YnY+;&A=lG`!VCO8V%jE6Mt(>@vZ+ zrQr4pvA}#X2S5KM6abF{6nG(ErYny$?9)b38W<62#9wQ>TZK(cmcJI{fzj%^;Q7np z=>PWfzD?;?Qg-=eV{*p(OYHx^ko_1uHl2Oe3Fr2wSUk>h8a$d-H>Y_e-Hb7~->yq>*(aj}*;$Ve-tnwj?cVW#X+A#BkLC2LteFwM4;ExhR8B|IuhSG1 zms8uL{VdtbJkDB(f8w0%A=*YiYedUD)2S-tlv%{_y1;WhKxU@oTsd;oSa zAZ(8!plj3i@8yXq(rM7%?Z8A(P(SEV;?ZxAP!J2-08byp5wsOa|R9dtI`LTU99Y8jU{;#SiFp&OwN2jQho(UL`gNt;L&W5IFVB`9u6txLrcIN?534(LEyWI4_x zZRs4N>CxkVB#ij*7RsjrV7qn5vd~yhmV2COWhWi{QJTDwrP&hTt*$+QbRe6eStrX; zKGu$rb%>|(p5ZH^ujF!}8>7q4`j)J;*>1^IC!@I6A#7y+t?|c+itV78kl$p#*ib?e z7gvOs1)pGwLY+mbpB^qjH>Fv^EX#vECGqPFbA#!6I>f8a9Gzq<;Hr2?h@?QvA$~5_ zF%qWU@ z{QIzVI+UPe@@%b~C-nd_GoFD$R9cpj=t%{zE`5ELK7kp$ebidt*fkj}u}MFo($c_J zv!bN7yMFW9AdTdBa;j4M>jb?mMaJN>pK8BQe<6>aW#jw#AId0F%=+|_%hFwbyO|Gh z8i`;W$8-Sty`>|K>JeLEw}2lUaOB0Qa~d@G zkd?C?SZ=C|&n;P=A4;8%Qii5y&Fey&&n?33kEVW#Us;Dw!m>)aL7G&lbk2Bve*k&rC zM|yq?4;!|LDqW(@crQ)PWXoCuJr9JKOMtEF7iR}_RqI2x<8F8p^yUws+1S^N=Dkj8 zi|Dzsv(V8TS0mS=z0O0PYCE(U&Pl8bTe4X}3{Ezs+?-c*RpaycSMDmcsk68yz|*63 z_GoFG0XZ?FFBX}HWYPt+Pn|{6wUX>)Ms{B5~0 z%g+nfKJ(8)I8Kgm1?_DoLq@Pe$EacBAukbV>5tt#+k|yZFG@Y9a8`h6eF#6p$>g!2 zLt>TenVs|DJ?X(vcwuLaMc3{yK*MvJt%E?Q4Pa|mWd-3Q7&8?)L479S)J~kI_+?6z zziHL0%Bil*f8qdYPG)5h(i}B?MYp@FIhfR`S|h=sba<`3{<~vQ=0@6EQM)Y@le{fn{2t)e7N({#IHjn#8o)yWQk!gxz+B+=gg z%o$=_SzHf_ur34YM|C5LorR7JAM%S#KMxQ$eoS^?3$_~HJ^duUK9zPkH}28nZDQH& zBkf%{5bv8z?Y#e~*V-}ed^$Qcnp4Esgw0*FwNx=6=@IgVINF$kdrsmj!7pU9jwcWf zqk1_-SD{zoZ}L0f$2(v|4V<&?(1U4EMn|jhZQt$6E3LDn=cni+7t(^A;}GfZ+J(oP z>Ifl&U(&#-2dEs*tgR|v;Q-P_{pVVLfIz?~2o?@oip5qp7sa26Wu|cKr#MZCAXyr{ zX~@c$Ea7dHqGx)H>RVZprK~=wb-7BN?@F6Ki*sg39pOo=Q!YT$y1rUg0MT|gwl^aU zL%KW`$#ab#(YDGBd-2U8xe;A)?|XjDLp}q`pqviC2eAN;G&2gkDUM1Iyc$UbiLEG|{j)HPL18K8+K$vZRl^~=fJAAZZ#4Q*4Jz*#$6LTjkJPW$fzSOG@2D=~Ii3^XepnLgA_^gFKz%SkYW2rpM6 zF8gB_O1Vg>z4J5kLK6WOnxuz!VnlWtMR=)rq0iy7`X2z*eS$x8hDw)^#j;Sc);AfT zbnF_|WW(n6_FKC%2Yu3|)V06ZnpA~s#q^aAT-MSoit97-SoMXQWqZ9FO|ga<3?v<# zT{`AW5_7yij=`b1+jyr-2LV1lqIbvNd>r%f^fc*~a+HYT){`6hYDeezhv;bnsgFWt zRxAFnS9kzi!WNV|gTt4Wod!XB+6Ny_H7=OO5ti0D_o&R~UZ8#C8ZaE{U^o`$yr!(e zB_HSJCShs<$U%2ppSV^>8_bJ7Feo#b1Bolv!%Pur#Ra&EN}M72>g>T;hIT(3fpn^0 zRMt4Gy?556#1&!#&K@s@4(_D>#f0g`49*J70kr<(KOYJkTL}fV!$|J``24J}GzOMz zug6S{MKR8pTRxOpG;#788X_S96qP$aFCvr!P-LyiZ*M%>(mp!*YZ4^_3RXTUv_-@0 zq@AQOJ|!@ViNP$!2gdCsz4ir;!Uq;~6!~p(G$;K`9^=y%@IEW5kXkG#xz14rpvPTU zmgLEcyz?Rw+I%pnPM15n_%ppv3!E7gk&&H{{4JWv$g-fnWA_#qmet*Xx2}6okUOe< z&_VwLHRQXr=i;MZ=fQ4h`WFwoO4VYE8FX9{Dez)#l5(f_pGR1n`Qchrko$iO;fpny zSTl+J`}tk)@yyxQCZKs(GlxL1b|tYRN89m+)o35!3991EYXkIuF{3(xUb#(u?M9wUFcQBj+} zf{)1s>-E^ii$l5SxC5QTg7c2UT4YCLNXyM^q-U3&IU`s$m)7U->ivf|U3ckp@NX&B zpFh!`pwXKF8OW5d3?ue*EgyjiMQlpRXS1VvNp1?a9SbdQ?GN5RQ;WZUD{*=Bkk!;= zNB$SSSzKk`YPK?UUP0e+x+>L5Y3l!vMAfwA<~2jvs=;29{{#uAs(_21w$xWOiEuaS zDHRyWe^7MQN)s&T{>gF<9Khq(22MI?cvcTGUqg}6}a`GWr}^X0l+INlVJfb z&V>>J+~3TtHrkg#FNN-Mb?=fqIA7*DajwDQ7MJk6zFM-dN+@Hn%+3VmOHJ}T&?*eNuoUDV4Ut10ofiX=yx3@<~)al6V z9I>ipF6D?iMPJbfXdKp?j|R=nMmLE*0!*JvpaqguT@fFrgty*ZEQ^Vc>W|0{`vAN5 zW7$(`RWk=}Mt#_FwMCnjdepWtx5Re=Q9ZtYEZuuU0g!pO1j8j_K)t|3HqY`eY^z7n?8a17;i(AAWeJ>U#>s0&jB{ zPOGSw7qcXvJ3Q0pRc!8ZC9y?=ZIdLf*7WJ0J8$$2S@|B^VCUAA?z`klXU_gmC%v{~ z5GS|!KdpoxXxY>)gqG&q)BttiANp`FFfxwCoLz2lS+>DDae}9)pKiQ%i+$m3S#e}O z`wBf*A0qRMBdPvzVcqOd6Cr&!M;|wE8v{0=B(cbFW{+^dDhc=6&W1tj9=LR5+%p~a z>W%&vCczXN9_{b!2^*yn7hk)1^e}l)wR!X}YdN|l3d$Z%oYH6v0PDnJDBG96E7F!j z@DYdF(IO(8cxvnD2^6}~KOiAyc3FqUZB)L#Dmn)t9*onG_VXN@%=*2-w3aP1KrBJn_9IdL;|3OM1ptoSEN+d z-d}>&>j)Czfu;!??&B_`H3_}1LHULU6KHSNtRY?#vk3MSk|^S|l9tm|T3n7}Fx%)l(2 z50wNc!Fp6A26!`)8$pNRe5*3do)bo67NulfMdytA3BS|D$%UT%E^ zF{&ihGC=|P^tYzp!#m2HK?Vw765{3XeSeG3WY9$XS4TuqK|U?1hXdJ!fdhnuT#JZ8 zf{&6S|4r$_iyb4QSrOEYt5eZypv;-6?7V|SOL$@!1sU{rB{~YpQ*;JiZIT||%@t9j z87WFCZIsdlz>7VRf*Ux9jy-|981!E=Jrm4?zI-djNqG(QV@)%Ca^taGF*gE1s<(ae zb{Nrm91OgwUwJE05ezaJSv_o_Kys@|^4(q>bWTWQEKLz&bP4@t$RMd-BT}MyV{Xj7 zZt#StN9y|`(-G@zwD4|`TT0QCK~i@$^e*I95@-M;Z0OeLpuC_Q48gJ*M3=+wgv{Wl zxNb`0@S<}b%{ajXR!H{^ZSG=lQU>D%LII$Ij_KgtbQGexcQ82dB80*CbaN8={yySm z8H;C+Xzh)n5({t)=|wTz8a&=onJcBlpx zS~Uxvm{iboP^yG{x)PdVhv_)Id?up1M~p;9(>hXmO8YuufO5|5W-v;>r@&%dil&Tx z|4by_X$SF`pq|YV#`zD;Yg`bL&!MadKx12E>btF6Ir+4`hVxI{yXb!w^+6)3%go?5 zS|Vbaflz|C8Y)V&97u#HW;v_Ka#5iL}M6t2iwn>oc*5if*4O zJMAzI>y#UnHV0a!_6UNTc7Cl9|%YV1=PxrC=A$s~2E<(P1)x+R1S<5z+@dq<%(L!a^973p(y;3c{36IWO zCH|)YvV?gL2Akc|^@6`Vl@V}*kso@Qx9hTUS zR-vbNAh(>+vISSsHk9rsegy*F&145q_8Bpm3RWi|4T{?{X25Z7(JR4}VW7jLM`TGl z6gWVxrAhw9#o$OR`AXk{!DTCHiNhPuaefvZ)S&2;g;Axvn!<#wFA`s$rsA~2G)!Rd zK<`9u$+o8nR?cyL$uv|xTi-y5ZJA+$LnN>~=_!{}l20?O;Dcoa@K33b7=iEi0^*P& zahwLzH=WNwk)8oq+I{3PXbfIVpD=S(4X}JH#0`QK6vIsgY<#ix&!5Gn5=DC?OJ+Fu z9l*|J36_PvrQe^Nu{ZSHf96SbzCaz$jPVOn}J|eh&Dv9HgEmmCbxpi zRq#XBzEpe?aI6OQ45nb^gb$g_lQAqIn9A$Nc(dORBqPmCa#8HWV#1A9P8 z-+~}0pRmyB1arqok*Ne$4c7ARz?>rOa@ygqcgR9Y*k+hMuw)6ZH2cW>lrJ>%jNiWM z+joW7N&Qd92t8wn|0xd=^D#jTUo{v589?(@%4`!9)lM(tu@1diDHyTDj?#VVJI3S; zb+Bn*b!Y@v5mvwxTcO8e*9D0HQy5*AqjPF0HGI_)>h0Qxe_UIm%QWK<*`uI;)dvl@ zW3iTV@BOv3U#eM+`JDqX1|Fp?TkbK3Ps&K0#P;y9jt4h2Od#{WlG1&PyJ$cvn0z~E z8HB%-e`YugWuarEbFRx|!5XHcj_4>lRX1hQWUA@dz%^D_q9IB?M*BNz+d>fqi#=7OWw10K3MKi|=|-qAXq-&`J-ez<|2Dg1mQusXX#$|_FRQ1!Pa zmuCp}$UYuFZUIKNKtaU1e}Xt$z_kn)XSY7|Fw5Di@i?@Pmvn8ZB?*?+I|~PAtGxKF zO(kMI%k|uR_uY6=w@VXNw5P{hOCH8@sMb|tb{2NE`q3mpbrwPaN4c-zm9>C{ZaN3?6DMN8^0dtdgXQkA0cwgcs ztgQf`JEnfip=_F4KT}Te&H(}0mNSsk3>0QL9udgPL7dC`5S;&~>JMl%{b&GZLp@c* z`^7nv(B9W_ZMI_oFybo1JuviufF{2SG9^o7nF^`)p74exu}=LiX^OKk0UmNvL*uEf2JKAOaYz%w`3nrLyCsH6KRbz)_c>8 zn|5oAv*+$FTRaK^Il5?sOM|Cwc7uZ17jsS^a6rJ~4#%a?5|DOVxVK@=RLSk_)XrU( zJkny8Aqf1j)SVSXWii;nxU>=zthWjDozmZn9BOeCTykrbZnHRWzDTv@ZxH5o6mzZEafU897|1 zCebW%f9$gW-WyQvt)8mg{XGJkQTF8WX9SFRJUWi>y4;+tQ)LAIlIn0~?fSG=nB z_PFozdu-bZ*fLkG>Jn{co6(3b&fkB!{SgFcF(p=T0o1%X)Cn;aq{0@c17&9n zZzF^}u&$i@CQw_w#29_2YMU}kTU+Aq|p4?lPsRL3IOt(W?P_RFRXL0iaQV<0)_FO0vP&p$LMNi$+TP=IxMG?o(r{-TeLpJN+rN+2m zc5ItuM-`u2wM98iXhBA@Z9>cKxKd?r9@>r^8FN?}k;@*?!_=V0`L-fQYaDLMKi$>+ z3{*m7z}n0kDppk&BYB+k=D5~jX>KdtZUOkxQTY~tJMJ*wBG)W=ZS)XGT^KCJ3~HU8 z7+o;f6Qbg4^I934Y}<4s^?Pb)Tv@j{SoZ603r|bEbx0%%KIsA~~V9g!g zviOXr(X)SZr`nbDI)1ah2i~t|)~7Fgki^ZU3CH7Zou~d&usZWi-c3fn%o?c-cmTAA z04I$$|G;Dn6kng@p--jWJ`hvoI4Y#CGBY395*I13^o5vf6U7{oEbUjP|BCcjUqecv zgjmyOc$tH=Px{r7c-(HO)WGYI+D|X!Z$0kdn-FzxFy0w@n+2J~1QYMFl^s_!N6@w| zaJlzV0b_ek@Z4f`+2jCZ5@~wKX9w7~oV7eRu54Bu@qP|E3sf7v@>&4B{h46NK{%P$n*UO)s+%q0{mlWx!t={F zq|P+lB8CX?KE<;GQS-H6q4U|o5{A(5S?9}r3wL0$I8D)SBVpmByAxJcYryTq!VgQ6 ze;l1FRVxR7!ciN&_fE5THnxR96fQ0sWyL=zd_N;MT0MkP9Ux^&V&hstAJy3wG?t^ERV zDuoGDJRUmck)WuMEo6%F4hd*PgXu%Q9UZ+ud_?C?=C5L|S_KI^{MK8i9(?F9%04zy z))5qNz@E%`$ry=6iuClbH8Au2+&=u3)GFetzaK^5M_lZh=X(TsloIl(Ya*;3(Lgt1 zb1O6)7RV1uES$a;y21M$y=FkY)`ajq*5L50Vqw(~9nV9fqqFpBbrqlneRd37m39nU z!S;_mefZnD7_dI({^)SjzA~BnO3F_}e6wsjW82~A_c2w)Fg4c-)X6n_Yi@MTp^rlw z@N0GJ(6iCU!?YU@<~ZE7Yntj=*|HG#YHEq+o{b>U zEzA-*`_Z!)sz*v%kquCLn@%1#d?>26{b6Efr=el^ai=S9ys3Z4+!S5QGqHaT!Y;eL z%pAF{^d3j4Z*w%|fvWoc`#bO_YR{|n?Tu&U=Ih6k|H4xiA6d|o{b6jUf4y>7ys*#W zUUG?u7O6oNjeFN|z$S}kV;q3_O5p#gpU;_JA)%T8UMhd3R$Qz^-gS zAdY=QQ)=$VREpQ#O5v-Xi3c)e zKG}9%p_i1w{!fDe{0@=)B);x?>Mh4_Ab%UON;|-f_m>nPsbwBU3hE;Ir)}>~xOZJ! zKW|BIuBFgSe_cO|9mfg0D@K}tgHC_3O!TGBb7$&7lWu+$oX(w6K0w*y{ZK8}b7v-3>rn3$Y%3#}X9 zm_$JIp{^}5@Qcp5=p4tWq+$2UCz{>$f`%DSQ3|7_A3oat$@6d(UU`%xx1Pz=&XF&~ zr#DmDV~RCZBF{7;7o@S#3HsdzD+TY;@3s|1JR0uJq|qr-Wj z04L@LpGRk!uSj*#x~-fRDH1_$>=AhnWWu1$x2K)(t<6tVk9V*2_gAJP6Q5~EG7;^I zWCSrf3Q=P$z5W`>EvGnwMyLC$-1ng_7Wb=If|@+%Y*ZCHKI}DQNmh^LT`4A?(lQ~# zEyyxd-9m5WGp14OTc_gg&^rH{#)I*F3@@xfHo9bVev}&);rE-lDdAN2I|es^(N@>% z8XTro*-MdIthm&@oX?K>oe-a$a{(?W{BarO1G2NXVb$kTl4l}oUJr|;bimZG2YBo;ON)7@2%5?kA^oBT-oYHmQj~@ zWGUghRIN|TrZeAW1(5y5Q?(HR__mQh4*a{H6zt<9EC_8AhB$6y{5c;Ymt2vLXXAj^ zxTZ|+27BYFospNgTPmz$d>D0?5}va8MJjhTr$S5>#mIWS^MCTMX*bu6fYgMlQj3lxR^!qZw~wsM#XtPPDkP({$Q)Q4Ykjz`q>=_ zxn_MXgB(LM)^Ty??-_=@!3bJYIEUll@P^*SM2EFI>pWT#@8=ZVVpgRi}N~7t_GD{2Hjp@If$!0$@qxj&8tda^L>UWf~+52 zoTho!U4uDdrC$~D(l{o)I_C2kLocwz0`O6rb;FTSNtx=%=0KWfV^H0)mUh;T zrZpAMS9F??h^J5yjs4|g$)I~6?q+i*N^BLZE!TpY+RJKtxS32PY57cP->;IZ_PgLA zgsOJFtfQpi+e1r*!hHnSv^2jx^qZzN z@ZZVn#a@+6{9Bv8{7$;W+~44?=c}=BvQIWVdTC!jA^y~?M+RPqvebn~hHnr*QePh# z*a4DheL)SOBr;`kTj?Y)mMg!QdrL?E1zL6>aB$9)W!p-qvAY&HkLz7+UD?An)HAC8 z!L-y1xpn(BWr}iE;GY$%B-4z0;y4s{#dhT#GPNV$*Lh2UT^{!`a1l4)-N5|kHM_ha zx;lR?^sM-suHPa>PvH0qCaAIhqe=c;uM`lov}pOXURT%g6Ghlibc^zy>C74AKs)AK zj^KhD{0!l;;-^M@u?M@c9NDqiOfK@D9 zdgXN$A8(&!E9RGFBRG!iZ(&#)_s6v}a7@O>ELWT`lSQFrQ}kzvK6>i1WMk;0Ks4Y4 zIJR_%F~Q-;ucbB%C+@cNs6c$(G&f&vIVGnFh4fzORGOH^aGn_>*$Ry(SXe zKjAHorvnP8;MSD~P=;&kxnIvoA1BMPaw~syBq$%^|2~zGUye#xE_4c2{f&S|f84Q@ zVa;q%Q|q#jB1#x&mCvi5N{DN^=m}_^CQWfD;+eNsc4nF(S2HTrM{tn%T7qaFB+fP1 zD5oAzHUFjeHTth#gi?%91e87MK>i{LGw*z4)16c-cJ{&V1`KI`B|*bR8sf+zO^^Y@ za@g!Tq87Id(;ZN!7ttZTqPPfk1+P{)tvHAaruLk8&x7veQ!VI8OsgHud zFRPl@$7xe+o-CgmIr;Byyst&^_rw-w`OZ;`rFd2c8^-Z`bx&_}(P)xBG_Hcpq z3|rT%l-e0p$cFCv=Ms2Z+;^%1l*bVQRbemA`?W@)*i1fdr=z{1t*p5f93F zdxq8sI#^NzODf^9i3l^EZw+(AVI%iXbUWJ-B&b-hby&!n!$|55|{otC&?S@Q28zms0Zpb&Goc@eQfllzTJ;r7p~A3pfrXVyddyv)3! zbw-vNJQim-mz_y7}@tqScOB-8Vc-6w|TH=in@Bsn%y7wVA0*y?lTRQ z1(@(v>eMh7v8Ngllwj=SR4r&8RtW8*MjX(q zaTt_+K9v$LA!!`qbM)j5h8yK6`cnf3v1Uwu@Q4bwnRJg%Q)IijlsX^RRRs?_6}4`o ztAULwyDODS_u&Q~TyzKXNcqRl@AzW3GQ9m%UvX)x0T(Su z?r!=A!IVKq!BooO{bzSOYW&|#a_xkS*#%QRiW|-vw8((ZvlK~twZ!ZQEth`qMZ4^` z>0*5GiI*d8EEk`t0aKyHEbqC9@8dL&JLyKVm&z|fDV=^P6G}sjkAE1$t%@JW756(< zX|OYN!oOBeOD>ia0(P-3y>|fyfR`>e&+)WC@iI#J6&-Bg`A(g(aXg2 zq*V$)^ZqYkOTFD!z@1-SM5qyJ(x}(u6*_t7wcPjiy%4xK+en1iR((B)c_;_)+aabB z*|P-M2UN5uaFBCO(dV?hV~ZhBWwRkrr;5E0iVZeL$Z%Tkku9YQ-?9$?yX-rE#!fE2&8|KNFS#>VsA<;ga!dt>QP}BcY{$rBW$_nq zE5J31*uPDpXRinEDzULhPH!xAYL^f&YEmlk@%JU+5=cIy+v^kV3>INfYf5-vXPFl; zEB-H`_!$Nkid**b1gXRYY)dKGf_tq=8?Z!(F*^Y(QkeMwGVK9~L-u-xWTyFA^=l}X zN&1PiVob0w;KZ-Xu@Bzl>e$;Sd`2aAXL7IVt2t3(lFLVy>z3%|AfpEa7av?09_`v< zK~%NXGr>5WFuG9+>Euh=i6O_lT_Mu1pMM#|8ak^LEm zD~^IPb0_v!ejDd1pRCDscpcRs9^FQOi)lu;UpC!dp<7ry+O;*+(_JH`hy?A`t=DO5 z*Y(=wtT5xyVRf1ibJo{RoAU4dEV-OfV-C4V+lm+DypbRnCJsfzad**q|& z;)|WJOU*`#EqsDU1n&WSDFBbYfR^m9q8Y`y1a5DC^l)rYy`7?2K0Wx_3?aw>dl`li z93msi7I6HcvF7d$o7*pAs0AVS!3K{n-P1qa^kT? z06;ieWGz^SLHO@2byXY|{}b5IGTa&85`MVq@bWzo7{=wZZ#$1Sm9c+2I&9bdP_H?M z3}dZCARY5PYa|(-8l#iY5~__)zVc>VIuJ<0ZG7NzNeK*lru}7UH4MRy1UnEI@1n0# ze$&?8R^2O(?s#4F_yR(?&lEpUM>a&R2JH&A-rWKYl}6V8*ZXM#Bx4B#fb;+Ne)?bj zN1nt^@Cj{i2+P~|FN7%3mOgOxsoB@uHNWtDm5b<)RP8H3&!5Zios`4l72$ zdIjd7B$u@iTL`ld*-FkR&9RZQ_?ba6amz&#*jzMCCEXJM1h;ck)4csYzD)ZBT#$~| zB+2@VVt-l$_rdp)pKpz}#W?)LD`{by!I;a&hTIofP#oTkT(c-cGhak?*tU5Is}`I7 zgc4G%#<=x`Cs=reh%R|65J?iF6D?6~Oa~MaWl8btvUPunQcWFpj*sE&*^qH}Lq4&Z430J%8X=-@uRui6)75C(!{-t>-;XD;c>8}Hxo+1iPy!Z=QR2=b9!B$Bh# z72Mm{#QrQAzRYs>fxbpR{KNT+zY#(rOM5L%OGX8I%Vxrgke0A#ycZLPafV1nwdg1n zEzv-C)W~5L%Hk1LfF^Y&6_roGCKI? z48p-mxEtkAD86UE8=nug4#I+!%or6Iz+v+BuOi>n<->i`!#6e%^pfQ?k{r|_XKQy- zhJ~^M#0zoIEILOm7U|jB(*b!;XfVMcG0*1(>nyd8Dz8XI(&5h7QeSxP$IG12=L1ho zH_O-#03d{z-$SBD6Vj8*{mIPv7Lyj(W&SL%zg1b%Dh7Dj3TOFretLt+3gP?-*}`j2 zMrkpODA>0YoM`+ujqaAZ&CyM6U>DXWmm%A%ix*}CEjq}*kcEbv()%|mWR|sW1KLf@ zrZ7Pq`{py6dlR4kwu<#F%Lzg)oHTVXSgvtZC)6aI`=bUFrsfIeeCy)KmG+Fz*k?-c+Y%erk})}TIU#H`HP(nbD%Hd=V)JavhjNf%*^=vvU3Gu?BWvma35liejlard} z6=qd?d^l}(noBs>h_yt7_%~J^nlqvIuZxo9FqEw*^P`2uj;e%1#KZ8A$C37bjpb1w z*fk;zpxVFvTnkYHObTxLOwlD4HXUqW%4}lFE(Kr0Wg~4_!y?QWBv{ENED`KunT52P zMa9K)MWtGXXOFV37NE6EpbNeM5D7|LCk_=+(U{Eg6L9u8zWpq_C~CdJ6@v~1M{YWF z56VDsnex=XTd_k>4qpBB=5F;7+)~;f)phZAcVA-|`=%PTk+NC_kuM!zEJBfaKvW}j z{aZCr|4@k6oHdj9vJi@WSfG-7NEm-JVr>xSNrp*9@0$Wb^>l^ekZPg`p#9>(S;1c0 zrZ$rsrNQPidc|>Uao+C2y?S7a!kf(9-qXY^JQ6WeIo$!dngQ91Wv78Ew1sC%AzOPi zug&=&n9VGm&1W&eThD8dT{K(n^<|NJt-=z%0QbD_C?^=HR!+K-Jjw)~b?}#~#ntmK zHu4AvSk`8Jo?pZi`zU$+01bBNBdBnSv`{PCHk5}yYKw=|^tI^S<|lC_z(j z4CM3!5EhpV5%_RKrhX7{?tAM!m1EKP2$pJ{XD}|Br66pWCzoe`SVbiDa+&x27$g@C zvq?69p|IP-s2Fht!_o;2sO|z+c^qeGr*e;4e^Ar6R_XKt5t}Ioe-AtZ+5_)T_6D?jbaVOK59b#D(2Rzc9)f3SD8HS16b+*?-c392j%PwK{5d{ehY{cc5_7J(SI;rFlr<`MUu-A&%~Oa%Dw5u$LYeHX==fd#6Zw_#X77e5Oph;_@inJw^_jLF4{gc;0j0CZ=UJ z)O<^vj&I;SrJ8KX*^U0aOdIL&9J^t!XU^Fn%NvaBdYalwj*>x?VpsjaGN)(bok?Nl z+5N4?>CqElHslA{AY=HH=@6cnjdooF&-iV2poBmW(}L{6x6jqDL#Y_1J66RA+NamE zT{pA$>3=CS=G4=*xs1*o^tGK)#WLf|oU3+eG7W#yau=1`GK6)MmSqXfM4$Dx&k69z zRwpgmZ$2kFjo|XE5{Y*)pJ}NVNSNZG4|asM%QJug$W^6504O879!0h{WZtwkSE#CP zL3ur!Az3+KpxA1}vEO!c-!tj_ls(6~Xw$K|O(-oSq61?=KUu!(5?SvQ0^TZeb2RH+ z(*iTLK*M!7_%QoBU!2#8V2MoPYKo_x$^lcOY9$S^O%Vk(9bWI+U}3*#r0j_&0fiQP z8Date`$bO?O$(Qc7In`US*)r3O14RP$=&Z#;W23J$)Z3Heoc4X6ueN}%ExakSh0oA z?cSb}!!1NS(~?z}*zepY4ehP8U6cQF-F!btEr9qXd6~)K8hKROTk+g}LMdhWZg^38 zf*%dvw9%bK4c&6RumWR;uz;!1F51%9vb_eNe9+`}*t&<-+=gqH$M@mz&Anyn*%Psw zQhmz!kq`xFDpkE3{7A?%KYV!i^Ly~2)5G)R38_@(9Q6`c9;^#A)8t=s*C&`kE*MkO z+ee%*KF|2t=2tOBS|?U+Tt_2(DyNGVQQpqoAivEM2x;sju7ViDaPGrHsG)x>N2HDb zk|S(csWq44CCiE;O`G|zc`EsxYL;Z<`#UF;5~{n6^?)EW1>qddw|+(KTkyew1Et)C zaJD+zx$>_mAYUh~EoI<-7YC2*h_gS1s@ig<>cp>=7?f=(y(*m}?6|%MZ0?fg*Zcmo zGgr1@t}~XE?;iGhx;#8(KN;;DW3)Q}Z8!T17dqA*&07q;RYH@aCA>UOjioOW8>DPPGN^T+?zo#6mR4$0zQ*7zaj*tvp3diX6*%Xtb+#Ppc;mq?!CU`$YEgK-oxLT zo2suI!pxbTm~3utImvu=E<@=l9>Q?XpVw@rvxbUMO13v7MvJ$A0lPAibKd>Gq48y@EA7*P`pH0v zDSU)OHBVE z$zIB)-bmZ*70RWX+h^Bo{(ellfAQ{-fZ00Nz)L(k``2XcZZTpvv3Yn8fQ+O|U-oG` zoX`_;^xbMowK7_nnV$&mq7&w^b4d|vl@%S%XR5dFoT4UQC-d;%N&n2gWLm3@m&pvJ zujD?&^F(0pLheN9MUo&4o*ezb2A@q_-{irrBu&;9#DOg`B+3#F8Dd&`4`o%U)3^N) zGK^Zq5bvSND(?tV3(SNDD4fcR$1rwp3$u?efAzW$kb>EMcaBA!aidjk4lw=~K(W>r zqiC0lqdYVzE{Y`~ozmY#^?6$OI;dM4t`sap|LV_gjWhl=Jz_*@(U4HEmTptCq+TC% zd6=FWT`hPmF9<5Njh>n4GZ?p7;|mtidp2ZW@@I-0e0+>Of+`CKaC92oc+D`w_e^Cr zz(jDf-v|A9nG>B&)KVx4Qty)`GvRkeKFptuGz>dZ>**bVu(S+S8K8)^&!Z@8-H6;v zy6fKZX?BND`}PfHH;XclA|o0T5Hi^=0G*4bw9CK!rT$oSpLf|S*aM-sDhsapE)#dy_@Mb&`G@MejIcs&uKcMmdvGrDAbu>Y{DDDv4JxI{t8r*`r zI|O%k7Vd5TLWY zHn)}7Lqw|%#lFAV`$?Px00o9VVX0IhA=KAH!NFFrh37p$aGkmOXYm)M! z@e{Uf^nyREvE2EwWi+h(Cq&p6S7CQM>L4d%SjeWy3I$dn4wA&l>ovQ=w4epsj(zNF z)V#zEqjYd^t?JA(>^0oc^Pt{!Io$D!Vp2yw4foTtptji+`1|w~c#sdCB&bS2*y>a5 zD(_h<>9J~+3IuSK#tpT8z!-bc8E#TP-!9_E+E{lEd_UB zOGEa116la5XU)~(hLW)Eu`NyR|IV%K)|G^V?NEa@Rkx#6wi^TDT--H{RD?IOss&Px zj86ark?6t1k3jaA+rquzxNJz@fw^yn?cUrhZF%$~gwhwWYm&sbO0$W_0z=9YUM)5t z`ycKsdm2OR|VJuPNhZ!A&Tu(=mFejcJo`Got0J zT+Zv|8%IBH_k{g{g99*}$rLg;XoZqwxEo$j(6wl-`3n=_TFku{41$<~n9SiRPyq7- zcl4bjuyxCnseLnh*rDcnal=Yjm-~zTF=zWy(7$c1LWkOsD_};B z_`qk=8z+~bA1b8lS>;PyN+G9m$_3I6O~*1Y_{?n1t56|xHS>1XXjk`Oe}wv8dvsi*PcHm0m|jziHt%Q@bY*W7^cRH~ctD&iZxnihOIv zI-dQQb#XYgWxr4;kl&%_0`FEq2Y`*y#KtwI4o4iF*7n`h4fz< zR`PC{%7+g|@_(e7OjVwCqgCs6t_7W3U7_2Omw8!;5cFgy&?n7rT<5x)t`=%G-#63+ zFUrkwWY?*h)@LfO?fg!102154j{<;hofgr5e>#)p%1VuA>$*OoEqOMN%!`=*3UE2m zRn(VP6v_AnC!VgToDE1{C6RwWsxHEElHXH_g<1OgCw3(|`n+JF7n!qJa|)Y(EC%u| zoM8E>!Bl#zT6@bzI2w(aVZFU*Q|&uq%UGn99DPr`FiWtaJ7~+f>omE~1$gOa#KU)N zQ~6`)`rb>b)sd;gjO-<%`PtcfBPJV3{g8%NN}*$~d^L~v^A3ytUwz5y*(SD%AM=yO zMtE~0p*xuRh^lP7^hC>UHM_x}A%~yihQCrdY$;zqB;Ni2I zDb5sCV^fYiN<;FBzP}#pla0}ScugKl^+RAgw1K##N!P7H4dhM5;~$~dQysi~o?tjw&1hd?y_JTWUXF1xhYUkhFoK%2vXspdgI z=j!ZhnA+5rY8ulG*}Hd{FSz5Q$y@B)+e-4|ABq(Ux)MBbLPPnQ%SY(|>!t2Z7) zI=rY~iOHQYl#I3&GYT4VQKiT}2v}326AO+Sy}J^FhKhVCNlJ>(ckdkr7Y2e-rwIx+ znDP7tJ);+DF5S~0AqN3I$4^V<5p={vgnjOQ#VaErt4eCXqct)VxMj%WDLoVhLfUu= zpv1;|s8 zRe58;{#vC%aDY;qSKvLt{Q^6LPI*~2m)e*B@Go} zY`T&Iluh5fNFP$t)5L+JWeDBWD4~wJ%+p^<8&C;U!h&iFbI0CM$~|QcGSCRNm0kp8 zmNU#*gVO)Y$=Ld7owW<-Nl`X9A{3CFjzT;@S=mbKqAgs``KhQVfHJUIE9^L!4HN=@ zKbt8LNr^y)GSW+kwHW48f!E}a9tT*knF$XBJJUeG|kHr zVzT@&IiW`c;q1^5J0T3CFbgJV^c~O`eI^l{lxO`juT6i0GQ*R^49o@rQruUpV|O(H zf*i)6odZn>Z8)d_AYcwFj2;wJ8#HV+sKNokAgB)_u`eM5o)co{|AS|h9@B6n-^i;J8f;SOODCJM)12Opn;Ma zLRl0sBn5+tQ5alA#Nej}_=q5r0~!J@J_H6Rms^_0ZN>!`9~_wMXkh-WSsj%A{gMgz z^UcV-B$Q^qXIde)@eLJ1S6oP;cS<3a%oCb-4EhVsOhE3wk`6pN?o+&CWmyEFFx*Im$+fQP zfBb;oF~~)sm~SZ9Hmh(SFp6i>m11F5|JH)H^7~H}(ya@rMhhJDTa6toM9|Bps*aM;KAm0FRSc{K@^aKsLZ|cCeVL8c=5)um04cxz~c@bo^o1wpNRNtaD zfw086KZCLwu45q6i{{k!Db*h4YfKJR2>l_j`cO`ZhP2O^%EZWg@{lN z?*U4@pP*Y@CCL1Qro+v9r$%!wMZayEnOw;W-3Z^A)@A}hXT9M7JV{u~#kV62dMCO*Esxm&i3My)ph5xkhl+kPFcXamC&C+=JjhDb5aMzbA7INRh{;4_{t8lsdEN3D zCAVKt39-27NGgd=wK|$((gR_Q( z0f|n8>y8!I#WXK=6tZWE|5V+%6)WHh~%li83~u zv|*c@svW!V(_OLXfUUH~!J+26X zcT@x>h49e8(iagT^WGW)2SRwr06ZbvW>E&NpwZ3V-r)dIzzQA~Cwg$o+#Me@An{}J zwjS}LV(;XAUbEu!gGOjhZS208tNN6~$p8?z3u6=18CbO_E0Ue{&67^F*P}StU2;%( z^JPI@GXWe55eN0H0*f9bi*LxV7zpK8N1IFyl`G9I%!Tg@W1_AZ1jrU@jm%sR$!0fe z{4NYGV6|+jhI+&@F2!|Ke_$MjoEnndOC9;&KZ)^o0#_KK+z(_h_|Mjs7 zLwAt#L8jNS@0}{42cbA^hx)`Cw#`(q{}r;BnhQdQd12Nju7NHjl>7X%XIlF~y3bET zMfm{-_*o9>fJA%)gdA6_Y6U0Ow655tVb3(o$PkE}4$~aqy?qOs>m6XMF1R=X>BS)n z7CLW88oxkTuo<7ci6>2_G4wvPC(U2C|Jvq+#?=v0V2_22a9rH)j@I=TgutGqFc;`A zzAOlgq@e;DPN(vMKpR5{BGukvw`el)0f-PFG{rT~hCA#{`5Uno4>Uh(`H=+0&g)ik z9h!E2mfYUAc~NYq&&8fPK^-e)V4M1l$FX*bCE#0ODgeCQ(s)nmH}6M6#!g%H+J00s zeL*%a*U+^!*P+9LyC~==rjC>W)=q17zvT zr~Y16?^l2N`aS~Z(%p)`pZZH5gxs=iX~_3ZnELY9X6Sk{7xB06%AXpxh5X*as+ZHJ zT9Y=6dg!nphyO$G&2=8Z@Vs7fxfboVf6FC)d@7q&mR{&HP$DF1fQnLTPZ0eE&+_qKYe?9!#~oS*t~>O`%dwPE^N^Te_UnQ3;h z-ud1%q=Mc!?o@eLt?&JQHu|I1$e&5~qsaE~8Fm4$%1xus#keNq^ud!a#OriHx1-DB z^ z)(5QDT)Hj4KfdM2F13+-_qOE()mjBn~RZFm+{J?4((o%mgz9iXs< z#hI5L(cH)2@DR*9v5d840T|SMR))DOTQhl$S<5s%OLHv7bGpxR@=@EI^)@|&_o;Ny zZ<~wKeb!@r_|sgpb+YC%EB)@h5cRsI!`>ekU|{j~S&HY>-*4MV%eH4&pSV?3ZkCgCw=*KM6(z&oxTG7s%GTp7JKkdKhDfYmwdE{{6 zXH`6qqzPq<$5(u|{+kxy1JNJ^0w^>@g9%LjMt=;!#szd>q{0Q{whEw|V=~3?3LUWE z4f**)IhCk2J6aITxqgt`wuE^Xq$oA6T@hx4=*;FnJw#)EjUoK>#e9mL3*bKNJ=we3 zxpLk{k|AW^M0>OA$U;HDb^qE++-bVXz4L|^WGrl7idurnszrk`B>yG!F*G)miKN4* zhntHFfsB&1PumR8N3e_g!T;{!?t&df^7-P88?QjF`YE{QZ4(tIk&CpK23tphvdU^l z&I-7UISXYwL(FeTg9$m` zyFLrOss(8C%P&NefQ9*^S?b^GjX|Yv%&al5n@Woi ziQ+GdN{c+El#i8#aLzfqDpz~G2nUrXJt?evx9xynLg;_hf>sAr%RW9GwVYOK{x%7n zCXJ_`hDt^zd^n4P%TrfMCN&OST=s?%630Ce9zNqQ(-@?-EsPD4&Q7I2JfX1&{+4N< z0qpq!4CD0TzdgDIk=-}_XHc0swTBf++3le@VW_srImy&i8%hp$yu5wZo_1yO&KV30 zVAyCVBluwlseXWSFDlq(B!bFblil`qrU)kg*w1oOpBc6)4Q=TM3@jUfL(_?!|)B zKpC<7=twOmX5GQZ&o6q=M5tI!If6!E#R}274KDSg7 zf7l8Cg)WybIIuY_ZFXNA zeZYAGYRj%Rnodm zlc`EuMp8|Z`pR16CWk@n7XVY%T2ztX1)LYx3Hh@8e9;5WF}(Ajj8s;+f2D(frQVz^`+zoixu^8?#n*mk zJ4xR99y?=FbY-B!#Wju&-7c+MeBFBJy_#Fk+7-hEPwAriqW(ZN&!&{8=FUBL5kuw* z#hQp2iW`|4m4|gSd)mitdz!PC@(b>PH`Y@Ue-X;l`mu@ZRKKYOwXFeR@Pw}z~1w!usENv7`|L!p_i0gT{! zKlF871L7>8fD7Rrj#w4F5*iXGL3<@x27XG=mNML7|0kNa{W~if)!p< z5s}pPV6Qq69`U=S5LT{QWC<>v#M-gv<^>{oP$4%Q1@6{~;2MC1V1zQUSDsr+W2>Pm z3M%J&^vB(zv)YO_S@F&qiN+^yHgM~TUyZRS47D_2rUk3YubBT<;}gk}&MM(XYt%aw%&aaVZqQbD0Z<$oA5a zM5C~d*njn8YqFr*Y4PRbR`!d^j-Cz|E%tv#e-j2fNBO-m>AsNQM3oA1DFyd>`U%!c z2XTt1{2Jvr>x8uJ;6$W5RQ3}U3XDdjn3cWBL=@)x z)xx3TSpWoyb=sh$lWp(_F7yVag6Y03`M6;~NqP z?W~h3=v}bq=xtv04d!Y--`*SdSy@0rC;vDQ8yzFG<&3?ElQ9nD0JfT zJenn|`f~jWdK%CHPlS%%JMcfbgMY!fA#+z4!{*ST z4}F2XvE;Y5H?eEb`|WXg!{Z|O;x@zfyXWRU&VA3g5MbF8&9Ai;nU5 zEhTHPMK3~PLb#iveP{GveTTE5k*!dro6A!NE zQ=2o>_VksHy3tR4T}$ViM68~QM8m{B`=b75pVkg6-U1)z+*>=n=F$)4CDkD~d4Y)Z z#(KkgU(4>A7SY;P{c*aKw-S1_Ac#|AtBaZd9vz+UW9gjuP=Dz%Fhn#(x#$hh>0@rc zZ?k$K7kR}p7uAx)g)^(*EPk2{LO3J?sJ}iX;&A?@^Q$m($X5)hFpu}W_r50l{D2kZ zB31mKWK;@vdRYiy_B9~^pg3WR!eG3&U8~S;1~vqMkxHf#M{K5}PPGs!{FUdV_G<~UBE37qETvK1%Tj%eci)n&T4-A- z*ZDatvqT!p`SqQ30^ce=BBj-wykfe|d$w)cx_Zr*hQ(o`yp5(}I$E!`zSd$%aadT^ zKaJMqD1v9l2xD0=xOaMVA{fzU-Y=BXzN>=DGOfk08F`Z8dE^4P z##)FjR9OZzlBYTV48)^jU$_NMXShQG-R^H+7DQ`!Zxm0n&-8DR5wSfez5hx&`tGp5aspU@E`@P}XMaG|- zRkz0@qQEJN&EVu0Ry;HC`P}WhWfoHKPQor@_Pb0neG+ft;2@2Oe)sFne!9T>g?#tx z`y~xTw-?~~)b2pDSblQauK0Lpf)yFMKKc&u%=+GRmrgpg{2EaHUFTr#v&;8!E8o*l zfhnG6GPF>yYBY|1C~rY2`fET^?SXvJMnD!F}{b&q}%<~j<>(2H}}(j zZ|>hbREOA~-%>Bf>geZ*v^Vga#$2kVeDzmte`%{H+BnmAn!c%=#8$p*3NY?Tr^3|% zHnBA|yX+oKbd72BS3C8lcnS*{5g-3PgzlT!h*Zr1PmAwwXA8G{CA=?@TeT1{>E|xVVRXTq zy3%|8nq7{pjgFd}?Uz^I`RPNyt1F8#@_;NGO%@v(t5fpG+t*R_&m`<$#NV>{R>;}s zILMz4)&zWB^*?Wc$$p#f$7AiEyGM_YceiREi+9Gr?xn3LCp^a2KftZBx0Vw?r`wIm zq3QHy7SrJ)wkG1Kjz|a_54DNx*M7p5CMcVAvUnc|o=!+=>DfR*wGqWG{zNQ2EM)Jj z^dA3;uRDK9sYrdPGCr8P`dtbv0vQXBjqM58>dNWC{kgtG%-4_;*pDhCq}C^?eT}Z* z2!ggbw>pwMn!9ouWF3Of5N2Bf{GQRu7qoiSaP3d$Hw#xkuN^ckt?gVA#7;O-jac}B zT^frwtg@G+HkXHC2l;&KMG8b>{gk`QM|f!R_Wk_e`zDtC)#oFjnmI+FyBmXe^d3Xs zi!F!OEztE5ymDSiJx@|b=NCQ6*ZU|fM~*ta348L?nxJZa25v!;CZmjIz|CbwbrNCz z0kjXUoAF!PoDTlb(i9zQtMUjD(^gHKn^>xP#nMxkw=Rxp%@!{x=z+>d5__`AJc&f4&HE*>qcetI z$Z>Ind<+3Hy=C#Bk=RxlU`xl9L5pJWWBGLJV0b7d?~P5OGCjX$I%DM|WkK)sz8n@Y ze`g%b6orw4S_rm;71?PUGj2zF>%>7$e1Vn7_cHlw5loAPJic+J(CGvQr6h zb#-Yvak_Zt5a)Cx{%n0GDgi)mURf(5{VMl8jMHb5Pp@GJKfQ49K@S!{R;ovN*qj7G zB^%iN!2Hn=2(T5xd%HCwz!bRGl3fdMVtoRHv)Rv)RvjdO(L?g?tC?JVb|9Ta?Xx5; z06gg6`x5Ax<{mSu% zf`&1q+KSP3b${hIkNY~bnh5eI{}R?#<0d~~XK&$R&cnl*h^~zI0IKF?U(&`?+EQ#% z8YPyC`bDae_ZaTljPN=;5~#?I{;e}g9#(Q6+E$K7cK=-hC`$rWAIrh^hOVutI@c%} z&c0R(imPH&FdCxr9HU$`XG(Kd)vKab)6)8~mljRu{kZ~NlKknZTvXR9yH4uYbE%a= zZv0NSSMso>01bgM%CE{&Zd#?hpr=%O&Y6t1e!S?Slo)ZlX(kU6pr7En0(!yENLANA zBOV)P5lM{zapA<;f0|bSv2D?ygdkKi$r1NodtlGKB<^wrLmf3pcHdEGtJLx$XpbA%ar6&+H!slfY2m0 zat?WfIeu0@!NSmH4A4-)n%&Klg}53*4B2vs0l3I)$+;9;E-eQ>vb8CCry`hn;0{qR z{+xeu#cO7!C#~3=6Bf;L;5Racbp=e>;t~=qi#iFBJ<6P=OtcCXE#~{t$leaVkxETQ zBg!%oR%`#Y`tjx+KNrt_I8Z7{oVU5XnV*4q>!x$amCWOy;T8D2a@aIn_~zPH*JP1A z1#o1PQC$sm9-4FA&nRV0-o$TFF>ROeUYL&s&fjc(+#tbHtNz6u8&pizE_c5%-zC)5 z;;h+B-#z=$bNNn1K?&!yF&L44bE3ve4l^2et4Ahf6xi&NyLUhk!+~RHJw-EVWxZ#* z)~<#?v&O{t75Moy1+e=B)28*-_N-)W?|`VO#YRBxC`oEmx1AmP zEKBZs?qBQvxPKS;`0#u=9OL{fE=~RX@&2B+rk>gS4*BX=b(&pn`vmtc5+r*|t+(!F z^l6Sm)oczB`yA*3JlI~o7C&GhcNuCz-z2>Uq@J{(b|_gt_UkDyo^k1~#q|3%lHQ|W`um&=1Z`MOjgNrdE8lfwgM zwPtUO4f<}epKDhIeYY%ov|pn!_6yv>$|AFTBL)6KH4zXCA!4}r~%qf~m zqw=KSvJa6ZL>($8pxhvkuKneQ3a~yZxQfn}2iitqIHajs*zX-z^7|D--36eMdq_?3 zF|SlEl&{F@6{3pY>!-oQ6e>Q*A3LaUa`xL(^GN$NwX%-4T}b9+ODoay!c!(4AH3M) zX!?h{&O462I$a2OLb0TXL)zUj!uaG8{jkcB8_Pc(uLtuT{*xu$eY<$d2MAU5=Uk&Q zJC7go{rJ$da->I0^C8=O(5m#<;wXeoC*Ev&QIfEbzLmbT*mNz;cg=RtO(0x`Hn*+n z5-+yM!(%1DxWme9a(_7_beG=So28L~**^?#cNabMJ%=CLr(EfTALH1m>zEir-TB77 z3c)C@-D8;1z;STsuFck_15k@<;&>X-UQFXWVs^_>g_ObHS+6*V(3a^f#l_S)6N_ zS6Y1h*+m(&9%pNF(N4YAR_XY&iG!0r&T3;hEXDGkb2HguL&HnD0nkKrC79K?7GYMP z34Ff`G}VNS?qV5Py`+$mmAlj|HxbGJOmP=#%%V3NoG4+Q7Ce=gg}5>Ebwav0zTGdc zkUZ+k6>%A>M8dGFc;?v27eCyZZ>5PAx=h!57T6)j_PY`fjyFC#efIP_JPdi|q*zbu z7y-&l)jK5lAniEI0flt0pY}bqY3AfmzHLjLYj&^Oyt~ESxd%zD0ir>BNq&UG84>Onoj_WY?CT0e>fN7-d$y&L_Id>wlzV0}ifhx3zb52MVZvE4hVbclvM1Kifp$Z7kDZl? zdaOFQ!a#oV)Gfn2#Fl>3t#CZ%O-`IOk#Llh*{OYPqX(M;H161}t;6%DNw)s@+DK-H z(|oRodL5(m4j?kZhHv>T27z)bP|RTWgCs|#nvu2hp(#GKrB}l7w=KRTj=5!p+4sYE zsC3Dx#j$XTK57N{>)S~6dHK?z>-NJ+IsZkftRVk#sY4XTm*$rmR`G|bHFCSNF0ZYv z0-ayUVcPm5`ZP-JK=6B>`7MK7T_j{|C9u!i>Jkh4F95rOnP;s$Ni!Lq7xhgfV73TR zvQy#u56b>e&>#mN9o1+Wo6oS1T5D+&>PY8v+R8DAy)s`&ad#%TD_gbi_&D{x!f6o$JLF}S3+FD_z^WY zHGYD36oXdF#u`}ZADPbKpobzZ%gO)V(Z+C}`MHKblN1r<{?&N)F$v1h8(|J5nx3rL z?r-?|ec7AHQOwPX|L!&Hor|iiPs;^DpA#xfsv43(UuC(b^)k*))~xR}1R}&> zZK;b5AFBeh#p!8*dE)e#fSJjbzx@puQHRKRP5DHAQxLBI8u8Mi7_VYRG6$yAWNu7R zQdfFYmQVPfCQm?`Ofx37ih}SY#_m*C41>-+S_XSXfamVaGiJ1^fQa~y3CBzIG#F;!omE^^EDJSl} zVZl=ljb4_2{d;E_<578yc;umTCnrWm9+YPcc}7R^_b%c;@;A@_$fWOfEU8}6dE6>m zUvMTr&y6kuGaw=cxuzO*bmbe*0ecS4^j!_$Y@8EI(l?hx|Xga{*Zhh%u4UOvw>z$7L2w2xJD#_hHzm}Br21ImN3jH5tLxS#lBVgtJv$F+I zUt%BX0142aC!b5M;%x2b6AThy1|)#uOwEyU3EcnG?;kVZ)=zqD02x;F7=K`dy&ILI zVspCk#acxRCKQe*k7WpNUcTap*>t>$^AH3MTSA_v>d>3(Ps#kesT_*ZvluMKBMPzm z(HQQFxD;`*Y$0i-6(TyFX~~F_WTM-3GWO^Q{=l??I$pJw9OdqFZCc)gHe*lxluqT1 zcD?I?xv9E8acSm%(=qjYDKRG~2opSh4?L+eNU@MpovPC6ivA zOX%inwv}JAQTCP333aPU-)MGye?nJ%XB1ROOiwOC&GGls2S5u@JFB<8GZ&AlMVI`a1F&eX#i8U1+_1!=2voMFYvW zv|Qj8n=$|(~ccpZBRhAS$UMI*1!G{~kt4k@&f1jTW;tH+If^bO~NX|o|PM*bF zs$a|TE|Mq=itxg()-6c_?C<`Q6=%dZ1-xd0Vp`9KhC~nz!jl5QS5&?wR$8KEf+1(_A=J`aN(~uM6R3_@4Im=hxo>9UX!oML$R#6U{tH0?=Cyo*% z4Lk#qiBV&fb&NH(t^0$CbHrJdv+3`^&aFyvLSYa+&6${l%29e(ISODE_UX6FI8_#9 z*cxtAh_}fn>N9dt9Z0f>*`|Oo$7CsX>H_iDzb5z?=4)ql9nMgdf>GC$#ZU^f2)k z&+q(6 zuVaXD@#w~o@2!C=dX(@aJE@W*Y3A}4TtbDu1YgHB@^xI+R=7F;UfEn>@)F5G{*?sa zfeLw>gb!wlRf?}0{AS3m+;s`8i+`K8>BT&~Qa2nL!dRH8?!|;}Lh@~7fe55A*0<4s z{4>2|zbIRMYAe9%74?8A0+&yO2Oo3jE*2i(R;{lR?^aFNZ54_n&uTpRu=(C>3vW1~n)`5X zkahpzC|Dm2uNlL>=MNO2eFo1hFJzUurK@hVa7E1XPB8`W^?yRR}^F z$XBMqh}buufLYsMu+6EUvCZ9ujHZEl1o5;?`_pZz-z^ogj|}VOeca5AXD#4RG1|I! zu0%YnGt#mN-L^0-8j4>_!|6S{J)c=#5E`K_^D(7!+aecbDxSZ0We#>_KEzk$5pGCd zNVCgC!(G^d7y1%mjDlY%MW;|}uUgz znr&tq=jG22J!rkq8Lh8UcR%L1CX{6b@%A7q^q;YT)}h?KrP?}N-FcQ&+En@`*ebFd z-1-;#C%L^5A!X3o+VeGu=79dG@6YK!=Xuc&FSQ31q?T5pw6q872sQzCT+$sUQS2P2 zQRmuQOTnNRlk`{c=ao01*pVWgOn4u5Bg6;-@v{9&?<><)5`B7ENG1B(6sk0q*RycB z+w`W+2<+=y#O|GO%8i}37dCtm*0MuM2A`E&i{r<+$e#Ct#zrxYZGU<7y8U1mtLQXp z6IUVaSA0+O7q+(y2PuFK4`FK2!nf&F{uE^Qg~RndvHuM%c>3|O=y!s!l9RnHccN3? zeXZvq@=IyzYx{1F<=5$`TiZnS*<%F3-8EnJ_9}QE1zOnVp79%eZ`X}~Op$&`6Q-TX zYgwygRw3CwjG{gv4_DTcQNC14!?iV(^!Mb4w!cOi$V>yQpUglkc~1sUC}~B<==Yeb zJKN}sIAnn{O|pX7uJHXElL#hR1(WOj$~P4>|BXp&9xys@+jkoWc-DMo4*~lZK#eWt zts||QisukauPJY1(w)KQK|$f{cG%^%`$ZxNPy32*+<;Be!mVZ}sLfBK^_|j{F{KEb zbB+2ZKv(9{-;|RvEbMECT^~;aH2$PJpHv1-ca^rq1RUz_tI^&Y<*{^m$?HAU*O3(? z&G*)%&|5pkCaRlygizMeOf`GNI^8>S?UW1xTh8Efq7a0n3-|ttTYo;_7g*h_Bn6lx z2nSOHDl*?m_lT-~4-rU@&w!Va+mT)(e5!VOz_t<$6c=+~@vnwqn2gyh6AxUgC|9MC zs-xAekgOnnWa<^~;i4?w3`G;EW3{g!-vbJj{fkR-o`a$x^V6Gj&4`lsC$IpS(~`o; zp@p!C+UC;fgI^V}bGXM$3b$8qrp$JKp1+xha091VU^;TI7iNNFL;Mao)eAKHHr)YD zIxyvkq;MZ!nA!yT7I1Rw4w|N!?tJDUeX>cS#ff+_W-_oW6iM>7U&Hb*5j$v5*aM#_@6MKw?H@A2QvUj?AW_eO&q3_2d@{f&v^?I7?&_b zcCx4T1u{NhsPfcf`_!)iMWtmJw;izGkYGN2Xi^Ig{3~Zgz@(9!pR`&e8m_dvpLEuQ zS>b>FQ%ZASL?|#VppIx#`i?4jwnN33^IPG^>8+%{@>IG8wh5~I9ASzWUPZjj#cqJ` zE3Ie3i%N$6n;g7h7}4bSSH#j3JuA_MrdSh5y?buy4vScJ4r%0b-9T*0g>t~#1fi7X zx&*S;pD}!2P-pYY%<*|sNiK)f;lXUMX3gnza{!m7b3mCpJF6=h4V|z^yB^2BX5C3b zJ8cC;(wrEGu;tOe+2Pbg0>~!qatqj+Myt3Sx-?UQa>QL}ZM?bV?LY?oM+tk|hz7Bc zO|Bmw4HU(b*8CU6ll3YApwY88JQ~m-R`Kx5Cn^=j;$hbm{NX65c^EQuShzNHyChBU zg<{}A2|c35C-&&o2nrkd z&wcNE&(ANAace1Th{J|l0?m3|P&z;Q#s|5lw6QzoSP(k$FoSQH>YBnJeKFeVokDL(t6dm$--L5e zk;9CCz;(QQTU>s_TMJe6e=$(uI&8`2&FJPlbfMWWLRAby7+|J_+WZY>2{nnk+CF(v zSa6>en@P_-#K2w-K&y_9fR$r!=g~|+aUqkd@>nFcxMO{;wai2~uee)aZ}pXRsaduoa#Ic= z4;%am{*ff!`+0l`hNsVQi~(Rb$@@BO=j!f?8pN!MLP? z#<=vKTLggoVvA1u6MINPu_r!W^jVI;ur&cOj4Sh1MX0~h8N(Lbdi(7QD2Wcfi|=WCn}k>_iYnQ}t-_1RBvx-4R0Z~1V z(Az!0cZkHip?Lj%|MOlvcKbQk!j}=5es#P=oBY@Ny=pK)fh3*mno2hFig)g7{9wOv z+y?;92g=JE=3P!UblrAxUq1UA+4|w+z?Pd1T+pM6*oV|FM-+$6$AM~}E22qr7HNyD zAxvKpm1|4K=L?u!Q7y(vP~^J50C*Ur@fC2%Jn(Nl=bIyS&u}If=U~7;ZHrt$sZK&v zd5V}!h>GyqwPG;(o-M43XIlTTn)5~kxcCN((dCR+iB09n&^%y|g0$^9O8B!SfaR1o zf3r!S;?MV7V%ht4>OvPf)y}Ct4ArD|#_t_ivJ(4N>D4t5c3~<-pKXKp`T$vP%O~`s z7A|lmMmex`HEeWwa%>2pxY!a#FDz6PZ*rG2Y-)6Ya0CycFLaUKaxR#W7+?qhTdSJw zCK$;4hEdcCWQ_I2dDQhq70?s{WQj!f+U-yEni&SCc*eWukr*^Dk__?_e^j9CnX$kL zsnDVZ3-h7yHFVC3$-~!aCVC&0;|Hi32ggc(O1+&YZ11Z;DeO2RV>2!p9380<1vJ|9 z?WfU#e*f!7A%Rvn0)UrYC;|p0FM;6`4wPaRm@JMAgj!DIVqUjRrVLw3q>wqR^6%92 zOA?V7?_NY%H8s~mH$_kHxaLi;`meHl-(Kq$JhN4 zb9DgeWSg1Oq%l!$-M-4j-voDGZxX&wXB=>PtyKs2HPejg>+0-%_T|~U&OP;@Ws-MG zlPe92pSs;;0y#<*e3e$5Ct|hM1NKjEA{Ok`H-LGt{#qau;sWc@4J}0dD||ODmxNcL@yOwL1MNI16w?gB~AnUPX%?2?Yht zVU0UE5d#JZ?^pvp2K?rqDedb^{4nl&l&>!lj$OWS>|6ZIp;-}Hab9~mxpX)P$Y0?Y ztk|ro-qQ1JKhxfKc(?}cT|Ih#x`wY>7O8hnHZ?L^k6W!QkGpIF5Tb1Rs+BL*4cD_yi|`7;J2~g->F7FHp|?WCs#_# zruleTIHi01_Hcc=yd>PrM(K7+HX8!GA*GY}d`WSwZzB9~loU}+6-N7Z5XPham!mx$ zUM$y~d8ielxbrcsI3i|_zs9ku$0D`a30$0R_FTt*X0#R&THFe7)-R8Rv`XmZoZE9` z&+}Kue{QCz1=x4|Z7Ud}*qB53Muyp*r}E`_`%A`T6K8JE@!8H{pnyG(#MTs+)8PXD zpohE6p{j-ei8s|nmzkCDjEAbr=CPA?d*xCw!X&vvwp4(sl_n#FJG*0Wg27^u7#zIo zMp~u>*s+y1yfrNV-jxsDldQMu3l4W5QhTl0H+a|n&|&n0<>>X|1OrZ5OVIPiuJPZ- zYuBtp5)7KzaYQg%Z1}{gYIt>;Mv$D{aXgrlAsMbbj)2q(U{g8`zg3;=x2Rug*`UH4jAa`RG2vEVdCV{@!W(!)L9-( zz`mY5nZNm2oN1W7zj*--CuJ{V`v6TJbY6VXf8}$i!SDbD*$B|cK(v)%MwUPujR9=J4Mg(aqrj!Ah~q;4 z?{>U_B}ibF%+MnqKk*(w>nI^u^mwMMWR3KPD{}-`^qC>86Bt{a1QJM+eA0>@*193g zPKe1L1}$OOeg|l!=&*vfejqih{8Ixu=v`ED2h`Y~epv|yz=?vNgy7R1@c>W@L|Zr$ zGk{MIk5Hn+5=91SE1{p6eqlZ&`<@U_?r`-G9WEe>Mg<1IC!$s}s-RFP_#F;D`J0Gx zlnH$5_gwo=LTk!+RG=^f=;AIiZoA2#r3P`Tqo|Ay`bS{6ECtFef5K57KE~BJ9;srC z;g_&qEg;rYziW>{4J3(`5nbrhB8g$2wb{#RwjQEwNqmD|#Lb z{h!;Kcl3(?A6su37Dv-G3S&WoySp#$9^BpCEx0>NAXspBx8M%JA-Dy1cX#)1b3f00 z-uFA#`7yIIH9ON))z#JA)m7D_c9)SnH4%MNo476{=^!Ti8Nq(CFAoot4YIJMl9yrD zC0PxIst;-@qevwr(fbu_+2;{<>2MhdHc?8km{l%90XmOqQ1+Zt9Evq`*QefQ!G7|@ zN&w1i<4>Ic^D|dAai=oKoY*}jZljgrznT4*vxKx9SG$0$w}7gG#j=|J99V8~`E?hH zvZq|s5f!j$JIAE94rXcVexFCN=myJ32A&y5@1qK8BP-IV00Qb$y*)%niS|a&(56Q>9(J$Ap^=mj!#CvF}%q0mdZF<<2T(PKy7+e0jvrL zVh&h4-0&jKF$(A@uIQS+GyxoHRknha)QH%+lvOgHEHPzIm3FuaBmSjblC{3{yeNr) zm~e<63tA(*g3*9f*~>Tc?jA8pu5Y+`8=zMl2dHZ0q?t$G<^LiW8J_~GvoD|xuRzz+ zN?wqe=Kn~~cdR5mtl<-&aCX%-G`DP>d0B~e&1j+~8(t<0>|f!N_yXGTDU&iq8N0_W zS?ebyv+32WI3-u!5*=@OANZd`!;K`Udcwd6B{0idhj4M9zl2=ANf!ChMbiI2yZa#D&#!c1kf)953UVc=AcwgURMl{{^Q#w4?k zP>8??nA~n$ff=#w!^_C*BUNeWcy%G(lx{YONmUSMps*)=d+Prf$8q!W?+iSEB&-oD zKVEiS@;8;6CrNGiz zgi?Sdp=~ROrN$cJklA;csu*UxgI7EGBr{vM{(Z|`L2RdCryF_N7bJQD{^3gyTVxoU z+Ay9)6sZg-jP2cQcsELDr${IuPGwJNmG%L_C!URh%Rn5#%#UB$(k8A4F?Zr{6;uOj zOL7!Q(WFO}AV#_*YV~6An@W~t%YU+L4Asg(n<0SNq9SV09~A!OjkUmKR!lSyYM}n9@p(-LCd1dKlWJh+>ps)!csW-}SEp8tT$e4A!M+55IghIC`3}n7u{f%p z?dj$yjhC-}u%wInZKisDcJAHX@2(`~Zhl#RU2x49^@J2<|9VPS$oHkUdBg8vR(IV% zr&448y5l)4r{#6k@WYp{$$%@mK6w!zVeKB_AcZs9rFx^{#^LChV+1vT$(Eg-2aZYQ$P}^ph!*s)GG4bs2QS)~Hye>4ctk*i|?|q2v zGq3sJ|4V-d3w@)#l>msq+C8Y~jpbfx&Cg4F{gnCoXnWE-PvxMF=Jwj>vvXwJfVBLF=9$Hmvj44?w>f90Fi(RRR)MDgD+WSNj+ z*Y|5S(}v$9xfVl{mCEH`BxhoR4&M2oSNEIOyRQJ}LH2BHtDlqfbJLu_fex=O2_WtX zfF<>|47u9bx)FwVn6YY;+7-Hbd&=#&oT9r3vHA`NE<(T$1x}JAkw5<%ud;}^6SzvS zP9#WZ)e)oPN$YnB8KCl8#Ilh5Ai^d*WI3}r`0w=ocj3!KqeSb}NO@VPQe=jh~ zd^&mG)`ljIV)#ArWM$+OV&n<`F3+p`J-*1U(VeZgv_$6YjCz+-ee*BlU|%JSKfYQ+ zaY~Ls&OcV7mQH-&GJa@{ptRR4D(MO(d^0+!Y0PrdC8t^iH#QYpa_JDvKRaq$lBd+V z3s^fninq5pAO$WG1sdrR)rWVd&M5DspK8RT*<6+Tjz42X`V_GTNcUVVly@0)_^$-1ycY9iP0RbvowuQ3-gGA}(ljwF4OUa#eO1`y8>J-~3|Oxc>D= zsItVXCVDW^D~1PXb3>4>dz92fH3%_bD}?C9I4q7c#sZvB)igIuFfS0uGnz{pOm(^x zuox&(ZY;Esc3<7 ziM#q4k&Zw-)(ZC(!yq`4-Ow9=(*jSk^LK>b z8A8iB?UkLfL6`n^NuW*i+``%g`|MC3P1{W7eiCJkCt77l8jmo8@ul7UyOWoeY zZN6PK_n@;&6a9Gui|49aRk_l~*kbxi^0|MeZyxYezO(yHmR!I8TF@dv`E%)Hu-XkOsIa^#utQd1cTei_O^n&^{iUeU%fk z)(&yNviX{!9uY-rT;!oSL=1eY>*3-iDAA;|UT#76w1R;;AFgKlPl>0y%l` ztrJk2{J={A7fZO*z~j_MfmwDD<;!6hwGNQ@e6C&B85os8*=g=B#iCq4epgZA2w;m` z!8MnhH?qv;i!$f8K4Vw%XXx6xNQG&bBv=nj9IRIf=^uZ{)hE! z?fDw|r4Clkux{}tWXrwcBJCm2Vwvrt3Ipgd`#PY?(piE07S{oP5j4~KYwe<`j=sd@ zD{}VnXsxedW#ay9q8{5|c~to6H?@ReBFY(XO9WrMuJfL>c|!D`g#M_)0q*V68wCh7 zyvaof#&1T`(s~of?RVO<&mBJYch3D(7UTOBojIAK^VfkVrsIPF<=MvOH^*N2&uqX6 zT8_wCs@a3qS5yU{4!TNKF5hVSaVFf|pX*_S^EONd@xB{fX4h|b>gg(qPcsJscQ#Xy z5`aU&=BZmNoCX-F{*$LRY$m4lnta_XrZMyf5p6%kFyTc2-+9%w`U^ff_!w+QU5Ndz)W0Ao4Z-= z*gkMHDHzp&vH@xuPapknXPLZ79nIK>Gj3q*c_ z?4b|R__xMaXRG9}ywf|QBIesKGL@XY%=-{fp!BxIw(gL&C(wJ=9yM6THHJn?vsDE` zpmYZQCY8mB0VRaphl2ztkt?x{tFt7yGa2@*W!IoI@FZQ3mcs_=n`6A44IP=_N zS|{CMEsPsQt;e23TamQQYOgxsbDr;s11!yj4m((wY#r~AbGDT!EOagC%^dcCEN~z* z_y11rUZk<|b(I;#??LksCf}+McO3S&h-fpZAFVVtJcHjN$4NUyaN!3sp}y}@lzzN> z6xowiVGA*gPWi;ALteBLGh3aSAMQ+L`i3Y=?OIQ;W8MMjbgT1_#)u7t5-iu;Qaq+oJGu0oF z9KVyrGO4jq19%8q);Wx#H1GOL>Zs9$Q+9rUqQ}FXj!}M10S(wmc zQ>|SsT`e71`Fp$_Fcl&4mhyB&@dMZAQq*)d70wuC1jmOb-9IRCxz<7m_HHU~lAUTibdWkh+c{H^#TLMe zr_njxoD?IS(h>r4NLgj(MlcT&V=7wLTY8H0Ygn_A_Gwx%o7LMcj5%FIl6PO7qdrKm zMcyR~7vzsAO%8X$ohiJgId<@M#0vGIf9<6au*xhb@Y81-qy`cxUJbvb4QLl)?W~!T zc?)(}uc`~0R41Y8umCXDCG_U|a=DwTv8$KH@JjSB6Xk$WrWBO=J8V%|Lv&H<2+pSS z9Nu?cpk)=d=7$wULkXf2(dGpwkkiKL644+XC`gK*KBbE}P+os&fiZvD%jR=jD}#r= zdElz?OE`mL*Q8&QJEL3{SIzImB^7P*Ka0QT+Z>B^sn&1{M&!znW9HmHu#)?%aDtdv zq>WR{4P1d8A;Ev7>>as6MJ>Lk=`ROhb`Thi9q9XAmng4@$+BY3K5bXj_h(%( za5Lx*#`($4lh`b@^iznYL{5Hls|vrI+b&YJ#ek-HauejS8F$$(jJ169)3 zWJK8!zbsMtFQC+3>7SbYXF@KrPdKryb8^Q@XR*qT&XH{+(MbLov8E8X0G@y`r%iGG zIiLY5IN-(~Jn|-1-yzm-iGmr0q(^Yfs`zG_bKd=3sOd-k5Zw=za$N!J-a(k1qo+Q` zx*ruW>KK$GlHebmahF|2yC@>JfB2(?1YciCpdDuBu1R}u_DuaQqdw0OC3uGaI%?H2PAne~TA2dZOK}l1eA}Dvs-(U6&kv9Z~ zh56r47DCb0*wxiPv^o0pN+W|F)+Ih3cY?SkMT{%eFoYnhpb>$NtN2#m(`4v*q#hUZ zzrwO65falNrH5FVCd)f=X&soxtJp;Phb=2u*%^vUmMH{JAZsA$96U>*p_JMxK<7YkN$h=e}=Iz0-!&SrExKC%*rgrwQ8E8>NZ&!%EN zvxdj+kT#za)8~sZBs>F}63Ub9$&i>J6BmMaZ8Khn?y8$W^rL(^KuK((!=vpOWCgx% z3I7ld5>j{-^s8b>_ziAS#2zE``gnP^@qXJZ^!7Bd`9mm^==~`Rg%{R13k4dq-$ec7 zC6@{Gd-BXia-u9SC?n(GnX5rx>r$(@HfzfIF{aq66Sqk^`2Mh2Zw+VF*$f=;Kd;=DD{52_{e4`R7!w5z?i@? z8vD#TYEH$^C&lrb44tNE01pSw8xAya#R_)Hn>zr&;L!E4^6+sd^pWayy*qG_5Q=*E z={@?Aob8_7Pp~7qJ@JyK`yj;?vG(@K6(U8`13(SLKAgRPl^lO3&?t`D01q9%8#Aws zZqZNNU{6f&^6t0R6xE({PEWE3u$oDK{F#ZXcL^VuNldI4z%MI;4$(gmkO2u`88W4{#izriAw*%QP03AbTwgjcQ$wEp2ifu%e+n)PAf3NOp_N+!A%8Dq4g--y% zOHv2aYn>gMoEA*fzbczZ19_R~m^P|yth1G{Nbi+>FBWEk!55+~*S7vPv}4=9-Oo_! zf5^sn1W5nLGP7~x&{z98x&NZ%B68P~>fI8Cj> z>uU(q(&v>j|IwJX78ICfRtY}!p-V_lyZvM!(FTQfwj+kZrE}<4gBRg$?z#PDoT@(! z`Xb`Jqi2P$S7NucxJqNZdrhlY`Oq+It}+APwz>sKpImvwFcmiIaC;`;kf%7fL*gb^ z;iA4Iw~BL2i_-B4G82@66Ajhj66J?U%T%Hc1m0Ol9Q>F5UMW5>QO;lAN+G@iGbdF{ zgZA(9Yy+|V{(P=pp1~_GdcLnBrHfOmf-o*QPs(AJK=hBDYnapCV3z2&8Qf80UDax9 zbE3ODo*&h_XBY9m@fN51P#aYhvE8HKgkuvvCzXtdSYc6fHj|}vB4c7>ir`1R9uoU5 z6xmD|j-W4!HO)KJny9>w3O$?)Oo|8xU{v*#|E$P=#JvQ&X}5DMBA3%>VgHqaLCB87 z#Y5Q7@)4w{&DldLsMCciF@sV&09IOou4!*g6 z{e`x*|E)=FX6ZdT=CF9ipO-wtB0569mKt0y8HcyOWIm9Awk{WtK^tc#KhuY{;UnOL z6|(xN^lL+J{&^~Itm+hFLDpz8u(`)5CMXPA0K86>8V2WW@(d&N^K@xX>Eh-e>%$_I zWzqCO<)1_nPIL%MwEb&fXY3$cjekV`p`b025EDf~*IAaFj5`*+bkPY9YU1S1M{ypr zs*1}i@|*c;&;yJRwETg7CLPrWYE}#Qu5v1!&r9{Hkn*r|O>_D{rXyP7X0eZq8`Yn_ zU`QNIyN)}%x1mEP$wj^kg=K;X3FCG9MYS_BE9n^S>gNOTx~*8OJiJ8Sl==`;ey?PW zwsMGqaQ2A+0Y6vn)shSkq+(4+pX#<`su`JZ`TF^LYoH+@VqS{X0&xvPYn!7&_JnD~ zZxB)*>t^KDPZ45jCNs_5#6+|Hc^V-^>oq-iMtv>)i3=_)>x+M-kB_LmIin)HfF^+U z!smup->u(_b%Z7_;>zHMTlY41H7%PF6e(oC@wu{lz+r6C1CLoBX^;aL^{B{YARTmmM;(F#!8q53jKt%hi;c0cfvPPxomMQ{mU*K|RMYyg|{@eL5d5p$Im^Blq z9pwi$wSznO5klk`!JcOGzmi~3d_gB118QYPMM)uQa4&r&em>ze+5T3AA?MQgFu&HT*Z z0_i1-=%)P)%q}U)1-*~eeXdAV8vpXe8mot%I#(KR`o$W%3+O6~8|%l0&AOHiszqoJ z1`F)19r~w7e>}EJKA?bAEvMSyY#onAw&6^ri7hYVHwAg*apzM)2Ogm=v~kW%<51); zF<(o+p}i<<%6_zO#C${zcSsU8`%XMy3jy|L{){~}u1ki<{1O&nC2D*4(((C4VpaUP za;!z4yy`*ks(x6&8!QL8t`wEttN(>$)2P~LVnIGTj!1Js?iNT$+su9^Rb4bbCbRf( z!g0htHYH*0=GSbe&GBW3Br&R^(+ix;&#&JY(+9-qv7!qoT4<# zq1gK@nkAoP0`YP#*F7q3X9vt90f(|N?t&8~0B~8#OnT?^vBp}Y`KT7`D3H_d#G+tI z7KIwVn9LmZmIXx3=Nnn?H6*pgNu0rXYu6OAUTrwgk4b^yPXrYLCNJZ=V0XCk)Jc+QW$@@=ZK~ zOsgp&qL^*qXVTlxZ*?UJ1f(M&6;m7iOHn}Apdc&#N3LVD0;B6WnWsnl zEV+Dk>rfnZ$8(!s?=MITSAU8$3_?8+7PxFy+fI9mDrP)&(zBWvqn;jY1|+VZ%%6P* z3~z6r#MSuy{FmTG7??vG!(Xr}+gyIVD|ATo-ubO1mwi662M8L*q_;d9+eGy}3FGB> z0^8`;(*}W9%vRfudGk_Vqi$lC(!_0%LNmt1*`g2-6?dLe(-PH0mFABeOPd<5n0(}) z+V?nQOf}B3A{=%(*jv1)oAZXp!JAZ}e}6&0eE&VoUgBlW#&oo$AhRm2eHjZJsKYoc z8s}qdP7dZc&vaY2S~-h-7`9(8Es%0|`P6~CDq9AuExvt5aWtYgS-d7r|IkyCFBCtq z4%Q&L(Mf00SGkC4OQvAIm}{iS^IGYoq@CcqXOMQcKU;a(XMTCUQ{gT-|F3K02s#$L|MUTi76p!sLJhveApoD=xj<6hbYPU!2qr!2bE7dOKTG}E7n zXEOo$$R{e}9Jw!7?cMQ)9wPX-=w-R2>YK-m4!@#wY@ zAn@b`U8awCRF%L0bH_AjemE?$p*F*{OH)sU-T3i_LuJ0uo@uqWR4(ENXJ9A#bXnbG zwI)GjI4oCF%=>ovQ|9eQy?Jj)-S|BxLKOj_Ka*g3&n)y`Z=9MuJrn6+lDPF~B5HMl zCv4h6QuQ3o4+m6pP9n@A^A^^D0H6DWaXuMCYy^aRUV=NR6kt8Js&Rn&2B;!@W;i)6 zBeY-V*%Wh5%*|2u-4tb@;o>b-n?QMZtGmH@4<)wHCTeuG=w?tz_Zl~^#E{qbCgA=M zl^)|>`d&akw!>nGkNKG!@%eT{vu$5ToqHX6bAj*Lj|>B9X2HF%4_cv6o_#>KLh9-< zQ8-hQ6Q^CXmfg;okBc#mF0pFOFM*KheLc2*4QG{Y`Sk=xS5-#&Ek>(`EI1Q6gr4M$ z^Ud*&`A`+B%g^}Jw1V1T6q9HkH)UI{O zNf`y9(LfVOzohA}k4tBnNAZSc?c=Q_@>TUek7*@YV@~P1sy-*x-%4K>ExQ-up{uKj zjgC?}s3tsqLnZmm7#7-X37rAYMhoQ-UV?WDadnG8L`75#G%>t$Gf&Ob7#57sC&{+& z>Fw)HJf#PHDq)6h$+8xqZ-&7$)iX8TZ*L*V*jb121>pY8v-J})I`YF%)%D2;GY>+} zY26~__E8GI0zck1YZpZ}Jlpm+Xv|cZJWo;nKBJYsdX-D=D<#aAvi}fwTEEEow|Huz zGBcpzlbiX^%;0!GtQD$k|DK&b(WHNhPpVg{n=o1Fn_=?I^h}j>PcqaD8PR?=OX+7s znUERo?K5p0z{g;?LU|lBQa7dw-ekB^3qlp_iJ49f@z(fp+;TX++dF$&-c^MHqGZ{! zZiH5BYE;}oEzuKFwZS34Ef_@flprue-GKCm0i$<8ejjOSz8_=-ecx`wk9*uoX9VS2 z=P7(lN~qrg4L1M$KRCu+J8BZaZ5p({n_7}LVfNV16f-qr2?TVU8t;PD6YL%%B%p$I})KGWCnkp2^ z{Gxx!mNj?KNb)8ZBxhY)F$EDWBZ0K>$lt35-;d8qCebD)@s{sFN?vAR_~sT2s?&Tw z3lMDWADGn!7zimI1o4+K_wdM8@e2_NwW&_2`8a zitcHrA~H=X*H|15d~?)^eEWEvm>o?srTf5FkR#v01F#fkVC>)^F`-A!<@(H(O!K3g z=qRN$6o3Hkp3)c!UISvI_GUO2FrhAzh28X-M9>Z#_a0)8@`sw^vFQ{qA&o85;qgLmf8VI+4;74!{L6%|K$WOp7{WA{H4p z6s{r7YF^rHsz6=vdtmi_6UNiqL3mbY)E__+4ewIQa=*f2FV@=@)V=nkAtd zipjxEDyBm&9=-v3j?`OzUnpTxTGe5>VH|(#A?P7hc?EJ*tViW)KX^*wFMbgd2p0McmLmb^1eS?aPU zb=`QRNRFGb%e}qThG#3~C}lLm(ox%U_0u5F**X(SE&{K@LLr(q+SC(tM!G7`jyF{) z5C#qnJAtfSOYB<4oQN8!a)OP#@X1ZJ)-`3ni+jqrfd4Ub{bAQ)^1pWJ7-ol^@1@RP zDCx;q7jYb&9ny7fE{zM9Z(#O^vu0pvIoN}3CEpqWo$>^3RuUS=OJt;vmXE>rp1^LH zD@n>!1#a++;z zVbh+6PApz(cKILdXWMXrF#MAE}Uovacv{ z_JF3-AS;!2R6l4sJ(0OCHKK{xS%e%j_?}r9J@E#)^+%!t(&uUQV;gMD6tMmoN5y4y zdsHd(F+jF@4m`Rh3Rw#>1X+q`6(*pdkqhyhgdo&n;_ws_qe$?J(=jAQwcr;UV1?k9 z6-nQKBT?UOT%0%*W~WtL0+$xo%DDVK7#s!PfGzcZY!3_TlvP{t*XmLlg~{`w6GxD- znE}XsOJTZ#j%5xnonEUq!gVa?9urbVB7`dN+!IoYW}NXHWT`0&2fM{%Qt=dY++Eva zY!h-fksOkQtiT)!K9@r9oD!hfk(yk!RYC{@w_TqoV`A*LZJhDZ zp1#RVr25xbSy5gAM3)e6UpIH6SE#{hzFphuZrQ^rhtms z$((Z6cG;le_r{gVCuTART{+8=0o+J%RR3jDy34a0YpKnB`WQIUL-{M0-v!KwNCj@) z$rkK#reS&T7X$L-5nG=3b|@fo2_z9>4y&q;>GyWdF)M3BVaY1R9$`);joGRmxVR}i zTAgJsLFV>DmwnH*9&4wVzrK5Ld|)CcW_V2D-_!bb2<%ETYr_N(0cpk zz#yvil($H@A8 z*uc&B{R`jop9;e!SU=xD1JrlNO}E6hUMkLX&Q;US(Ap$e?ckL~c70ZT?Mr%Dm$Ue< z2aJgNc#U>X2%{ByjInKBO#{XKvm~BlkkKG~d@(r$N7b&_Qix&zBH&{w#xVeN)g1pI z2puM?j-5YaZB&xG(eg9Deb#EXOsbbo8t%v6JihXx>2=_s#fPB`(p#_r zO5X>^X&03GGE#_R0SrKDwBa$?j$+1-7+lvou!eSZOl@R-gCd9gGk7JjkP!}G>zqb6zLK2bZK!tUrUeCXU;7{NF z#q&vEnd4U?YK&vXRO(YyJ~QrEhAK@o(-*FF^QF(oq-&0O95Vbsv;oDxOANFgXsOQB z-{?)_j=57;Bw7;wcefVLH{3tb@k^r=oq_I_Kk`BO0KbA3WyDs;m1$(xq&jb`(c!#g zEc!cPqIR~gkB)spf$k|IrP=seMcqb`??h~yf!cW{l%To1&z@|ChnBExB=rzu0zKCQ z4=hk-Z}$)oOu;Qn3a1b+Bqq8~8W`C7JIvhL zLKt^YJ=IAs7_NTym_}=PfV-;fH+R*sJY6}}@p4PA)7`cMRj}BJc+nXL#RC$8c;c-m z!i9vl+^KqD^Yu8rlml&^s5hGi(f9EMA6lSUTk|8*k)>cGX(;KCQKML7JOU-L_sxz_T6yVUkd0>wW$hmu59kdeZ-3Zt<+##r7y!G1gHRNp`l5|M z+4^ox{9hSKIS7r7Aa?ZL1sQmRMK=vfBt_(N8l3n?!imLwSGoyC`DApb{<-DeA zc?55Nc7yeuMEQkZ{T#+Occu0cv#;)ZcrgT5$;A4xC_T^7p794>A9(uJK_SMkiu(Q! zKab$Sp5yZ_Fx9oyH~A20U4n25da_s(c>x?aexpz~l?v=K1FTT`5mEb$dp`M+<*23+ z>JeigvB$uWu}V^NySN6TV~ewk*l*;cdD17DM-zR{7R2eOTb+W;K89UNubZ7hMI`%Y zMXj^|J(ZXDTX_mF{_i+Wf-vjHioS`d)k%R8V?)V=IQJp}4>RGc={@c+ybD7*?_^jSlE|9ya0LT(FQ>Pp z(Z^Ab{E}i9(y!bpgNA6^hV$jV>|m#wH$mU1*%N>76T>3hv@Yc4b=v7;NC-{R4A4hH zglNGPDlrAvXPY83&$oSS+7XSc@@Xi1j5G$ierw-|>A~wZufs!=kOpZBO-@QM-A1A} z4-9In76?uv0VFNMLzZ-5AaJ!XI`UqM+^5x)$Gxu0Wx2y4q zdPj72A}AD6**$Haey@20r*sDxHZ5$dpTRtgN#@!<7$kp0`lj052(G})uz&*N%LQOd z>xx#^#KP9|3P$OT=)a0r3we?Dn`$dM%6`|~mvId*|Fxu?16F4vh-;)i{v+2bzvXX( zexS&vGwOD(*QE<J)HBFexy^%9GH~R6x`p2Ud2wk}2p1mYcG=!FAgA zjCh%&@6Xi<9Un8j%%qHog%JFuVS$mZ(#b-j=9om!fr zrZLAnOMAdMo!oYr6gYfb-(CQ_-mhnN9#49kKS~09U)^4<2b(Q}KhjfTlL22KJi1b* zlL2(Xb?3WYKTcM7E{2f!kfVCl!P4^$%oQrF7hIl=rbio+eTyD+7Ok5 ztG2*19KkoxKJH!ZuM@KGzEbY6J2)nfW@GG#e<+Cco0xO1fgi6cqZgg2#;>={AAVj% zA@jveAIVh}oI5DJhbEa78Pm3MuutS&A6xyAK}GwT3MU&bc=5X4UnLa7*eu>}dp8XI z9}a|GpOAsCwQmyK7ma4fbO_ zn)2Bvf1~*>*=?J>f(d9jZ}t&zC)vA(}~=knL6iHBF?X?e&|-F;iggqjahvnepg z^s4K2G{v9$9gh>~>A~H0uWa;UC3wYEn}@+J>Cuj*0}uVl&-KavK7&{@8br6} z*jDn^HYkiIDuq`MOH+uGd;#M)cw`>nZ_XpPA;T!$lW`dqUihr{*WPDB^?#ey%{SckgLXqBqNw6gmc+jqz z$v?Q^Ml6WBDc=9^%oFAey+;QE;cnRF&=Gs!uDE`mF?-K!;v%{eZlG{&B^|3Emi`#sFb$}5DY#6L^duHI_s6=Im*4&?w0U>lt+c~Zn z+gn&*cpl&cQ=b}{pg+;hc+&_6uTqeAi2~fqbd7D6=`Y0MFOh7PW&V3xer5!H{>7~=3o2@t4tPx zCAs*S_@z{+H>k;98z|f`+Zg#)d3ULA<=6_08???JxV(Mk!sfSas zf`HsB;%T*}ZoKvBQp1zm2UgMYd4jiN5+N;qyFC0a!YM;l08-%JFMwXN zmOiF)C*dyx;fab{8vnN#cb?L+#kkAENmx^p&}nSd2U|1w0&S*fIDa zI-0*uerrBVZ4=m(=?qLtbQS~zx6j0KZ|+xOee*~-vN(C;dbrE`dd*}MYH}SYN*Nlo#3>a3>D5sNK1O}-LZYNDaEJMGPtfI=P;j6>O5a|z)|FG0{C%Az8l zLna}mTCxFpqd^SG&72Q|eEgQyiI|l8+%iCl*rPhhf*=8C_Q4|081JZJm@e zh>8xw|HF>C)8}M45IZOn{;5uD`&D~q74^Cx(C4mE)0_E$_K6|P{dWc*cZ$R(0)g&$ zR6=;B$)QpH9}B>zg^Le#BF?&;l2@AkJD<0Oms^j@RHI{g@BFk=FZlkI>lbKbmt1{7 zIPk89f7_9Ef~+q(bPw%IOQ`(qYjpw+5pNg`g zkqOf={;5OteQbE9weG!E9f1Qiiv|WLB^PUv1L_+A)cAT=b&WVyCK+QtoIh|nNC-nV z41CLCSeZW$_l!%|+@4)SFspjmZ2rc_+d(OHTF=e^e&M>yMVu{J!g~qtbRpicLza&X zm|P`3P<#=(S5%4Y6+7M{1jQoxhWM|DYkg;clRfHTMH}6~Ak5gQ32~K6pcc~B>HN5P z__!wqt`+Xh8BW{e#+@~%muJe`;A)FDd#tQy_zvev--lbVU(y*`Wg7;joD!do@V^F{jjV(^#?~r zicTGX99S6q{XuYYhTKotU(-nVM-7J^8L>`;5o*(bli?nUglv>M30%E)XZw>L3lP7OblS0O?`7NlE*I z;S<9n)-Ag$7mtxAYXio{EtnDBq4BVam2Dk65fEGV5GRNR4y=FzY%Cl$id2g)Bp!@? z9ZHW@)RcgLqtiz^AV}5!CkgJsMjOTM;U^z`v}^dy!4etanXmMp+!!&CH;6}rTvtYV z6>9+sHs4@Q3>HAETwj_OI+w@4P_aZ0@Z z`5M?$So>t4jK_@zBix6D8r&{SfG)W?Mx^sys`P5zS<-WRqWyxh(akB>%LrjR>GbL9 zz>SRX=wT1RLPgM>F~i7$cZlkwS>7wHm~pQI`cWYWj2hL#)BIB>T0vUXu`JBUDD0mq z`#pO4XoJQ)MIf7BjD;?oD$$b^Ii7KP@hK2xu;tsr!j!F%Oy?)WajlhG7)LDwteR&` zN4XPk9K492h?77ZUJYTEHx@v#P>AvL)&K?f^V{tpd*AI~Vr?xRh({y0gD})w+_I31 z9WO^QA~KMd$G0i-Q8l=sbkWel2C#v?<6uDar_D;e!8#{s<+7Dx6F>0S#)!%vLFq+<+{xc{U$buZA-|B!!=N+1C<#juwa&-dSW60_ zHy0t>LTW}PqU5Z0MOHS|D)PLDa#GJ;$C{KmD&?Ub`TwXM}QyI=ox`k^&aY&1>xu{285%a_C{|s1*|+x9&-K7JYtc zBHa_|@W47Y-Xc^(MH`GYwf|zQTA(Od=!lfF7jTzXIUe}B??0Qe?Y7=QGx0K(r^C8mRY;1lQ#AhXj6Pwvb-`eyj!1nW66~=q#%U#65Nm2 zk)hJL;1zgLG83`9BHf0z+^*!{LD=-*&KK*Ng00L(h%if!hB}fbKGSjaWYS444xT9n z=<*ydfqtMusxP1Kc_I7?BgEKL7!!8jl0AU25pWOz(*rR0C7v-+l#aRg&f<;givuJF z@_QKBJEmZVs2UsUVpyFS-XnVM-B4YP5b5qp9bK(AbX=)LciuE+$ub(=tpyH2wy8gy ziNyf@7=92y4;X_8(w7frm{{cffSgiDV1r})ubi7y`qLJ1F;W;PBpwn+3uFe7!dcIS zyQo{WXgod~8@;d#Hkj8;7ZN++_GC!*d!}mY!43in&4IUZHkETB4rI1z?9`}8ejz2r zZ{DeKoATYG{27+nb{4He3#(NpI9_;|2HK<5DSmc_3=!HkYs|%|#E139mp81oKw4{S z<w8 z8_S!gC@M0Dl5NaqO?XOfM?J2jycYw++2yzYtADB-(2}!9lv5_;xjz)@P5v;+Mc-ic z?#l5iL~vksCcc<5ns=RR*tWUsZKZgW0IY!y9D?a%Ax1gy4ZtELp5TX=|%Mf1TTybhOp-SUYizB`az(J zX^YA0n0W$@yymoNTe6cIImR`i0Fh#ryTap~s!K;cy5q;-96~KjiSEf8<$IMbkzKm= z()lPRp3dS*oclKVw!`df8izy074ZP5^J5C;qV3;;s zyw4932psPtYFc$3?ZZ~BvJ3dmC*dF6XSesKcxQJBrfMfPdw#mv zZK9XM?o2U*Q=qDQTl?zQC%Pkp_9mbF0z>Rw6}NN-!fKh+L?${P5lMF+I1%Mc?` zI9X?i`J{l~a|c1!Bt_%LgWq}=qfCnW86n&VXExxkrb48I_}R|kxP=(y6gJC!K?#A> zd4mZi)t7kjwMCMw^H>74NcjHLdYWW)of0uiah(*=2l)qkLpgj~R$!wqyhlrtt!@;? z{ffAulkx+m2CEj&7*{!#7x3ZKyY@c+fx0@?_VHCWVFYbNn<(nY$$7*A(F*NDt>_eMUGl1L9yrWF#0JWlSm* zlQkrGnVNElea*x?+YP#S*~OEhzVpv)HulYM^$&J|r%9`mR7{ZDx@R0d^}R+KUiJAU z%zDChXL!%GxikJEiC@YajVUkRPWj#Z~OfIX%Qck&7){ z^82R~Sbg0W7ufmEyaDheE^y8DMJ+_oOtWL4rw6${cx*~GA?F;m#lbNjR;>DHt6og8 zwL|jOJEvX$76bXmp`DgrzXVT}9qCF*a(2xd0FxOTet*W{2B=S%=wrHiY@EX=%P`7! zp$P8nr3j^Fx8^T;r6PoEoGq^#f$69WI(%_sJbL;236E)QEb7bqW%9EkCsGJ^>HWx_ z+*Jo^`=vT74VBM{3-Yn(d;cCN683*ZyP_Xntq-9$m5Y6VRAr~Vx*r}U4~zb+;|8(H z_!%A#`1m2ZN%;9&1~u8TyWEq!X9R)mhhyQ7LX9P-um+!O)v#wZH3fm6238knwy-W% z?SP3IgDSuOkFmFoimU1NgmJgv4grF@Htvw%?(XhxjazUC?ixI}yF-F|aCaJa@^zl) zzW2_|`ev>9){)d< z`Ayw&wRLh$!r$gt!VS%f_=<&4IG)CC4*d1Urc8_JG6ee0DHER+F;6z6UBXDkb@eRw+Nr>y?m?&~mo%(IU9^0ra?z>;Z9NR#%n2|yx% zRp6705*r?+A$YZsmQ%$@g6rv-jJwoWUdLvDoO3OaalsTjA%6CdHeJO?1=*5zSH<`l z*afzssdLfq^In&DoGt$TinPp^yXh?UaT6_Q=Nyd7Gk&VZx4~XF0ZV?md|@nP9q$24 zaofia9Z1o9cR~cW4U|!2JClaMo=OL==eL^RzsMEt?dg6wCEk-1Jkj zgGmO1-7_$1tApM?)&d6r4&m|s;(0s_(*HZ4r~7{Z^oLaJdjf;$Si>^{R5Ev^vs(af`)nq)APpe-gg_nl+7sLKr_Ur$r zZ00{@X#^E;f5HFC{`U%-h@pMo=EJWOWqw5In^7NnX{D^?P>S#dfkbS<`TB;i?kIo3 zykw3~9?J7d;=KC*4(5+6rByT=Pb#{;!(aU@#P}B>z_;w+&NY z)W^^?L`f#*D)aZOba|%ga7e?$K&}6V61>Qbr0=rb=Pc)4aXHc2Nhnq5`8N_W?m;V+d8|5!@Hfr?{5K9# zPZFJI@r=zT_CFNZfg5Ik8%l&%{1Ywl;H{wlU58)ZJcU8oiH^1Kd81`ztw7uP7y+#@ zcrd7=o9PrkcO&&nCds?z<7Z8<#MWyZfBg*~`0;|j-dEygr~ML8 zaoRXcvfwBQ^KaaG?MAmmp7hib)N(Q~eiZ3@3dkd61YG(D++3w^D$pZMLNkLew33~! zDR=qnCr%cITUpN|l1Ud$M{YC8`wO+!( zfB#wUr|}~`$KJeedjTGektPq1v{mGY0>*-Godeag4Y^$aFeDORC;g%gavY}v(|hoJ!UVwuw360v7lqEZ0`~SV6*XE=>!?ivn1d! z*|Ye4a)6%^K<4sBr&=6%+72B9dkA@8b43ti?I6kn(=i4)@PreldqQCs4&DO@8!pvL zcBl)BV~b3JV3mRD&5i_4;|DjH(jtoN%J+U_=N#@+-t9<(`LAgzgKA{@Z;&T>s)bIu z0JG=Hecp)-O4IsO$SFX0Vws_VIJU1rB43OFMP0vS*dy4ut+WODM9K2Yi%kT0)DT-H+^$*hxfA| z`+p?hhKu5*ru}LJzX(wu(bc$@m~=mjX~o=9-3TL#Ih|Hn1cs-Cx|${Xr`Xw!IsuuD z2rcMeCN>7TX6qk7?#Po7uO`$&>juc}|4}y%LNM%q7rSKwW4cWy5&^nlIVJ!_x~ z`I-6T#{{xr+9gMyQkph%v(c2=?O|kj~86=K|kiBC1m6(oeL#EFg@a&8< zNw(kXiabdc^O9vr^(<4b)faOME|orwI7%~S_>b{&br+$A=mI0!L@1f`57{3f4W*jF zXU=$Or_D2(%B1*xB$xj!fNk5x5^!Y&yRM-#Fb4U}sOUapr0) zZFhkc#>Y(&Y&K|Mvnhs70gkZ5F!&DyT1{u7K}EQUWW&=mk3ti?L>veDv6AG!^80K< zT`p7Pr~kcc1&S4Hj1<@X+M)tT+o3IKqlT@WI3!_M%J(;5c?%l=D;N^yz&Z?8CU@eh35Xwp1H_~d6a#r z#;9q9PZM5z>`~PX8GkyYY{eEEe&E?r*aQsR!66L1LPG8J(}&3fd-p^J1(5WPP&NOx zJM)G^2o^*I>_I}DL-#h)FBWyDZm`Q-v-Y{=VNG)VW$#?m4jbLDXUlJVA?lp^gWfcW zld=;j(1{i&Pmb_@QXSZuVm-uL-r4A>f{nq@DTL7J zA8%a(0w)Dw>wjQVKzi^EuMhVc<%i7*uqHQ@eF<^$P2+SE@{Zs<6MQ8^o}9xNol@$< zSvPFl@+)Kt(S?-&%U2IO`=8}bHTOXN0FCP@`(4W+5KJ0l< z>4$E6)aT}}Q<(k3mx40OZ%5}U-`l+M+>ctuD|WY}2rInvn}D2@alm`S{VooMyK9y_ zvc)VhB<@HprP?9sH$sFV!N9`wdk+<&H6DO|g5ALh4QSguD{N zjB8bP;PEBXlT|n4*+YaqnfKUMN>FWN1zhm`n1h^KkB^EFH_M8}!NA_Xy z($~OW!0>L@{>*k{VB)j^==);#`h51g#p~v_CC~V(=MBaoa|LkF-4ph46oJVJ#@Aa$ zRL|FggXuHOz(W$0+$66nL*L+@-f{wzT*i>gvsub&GVn!$s+HbPB6 zi1^Am43)q!uIBEqgL~r}jS$JU=qHK@xYRBCDP3KxZPG+Kfn$PQ6B`EUYqs2U%dyh- zOxkE2H>39B8x~&8xTaQpd&;GD$6YlRhjo}Bis%i`g5HwY(Hfj(&i;I*t-0nlTUdn- z)MR}HfIdyGM?tSO`nWEG)2imuN273{s^c~|Rp~}r9ONnB&ZTbwSZ5>+PV%)hq$3m$GWZDj{3u3s7_b4K zezOUFJF3z|cXZGtGOg1GGxqnZ5_QG*6DBf>rHhF5Ghb}lfQ zS@|xePqJ0cqgC}nD)50kMyC3R)~N2n7bFpA1}5KplzH7`E9&}0k~5Iz8X#5BOIN<; zJ`zN;(-&<8p*RQ(sTB)S%{2HOs4zINSPhxo9%AyhzYgg{6w84=QRjl*vJew(60}_W zmzw0Don3DP4O*vhLPeU8mIf}dPHd!XwD7N0Xz+>>_9tffyvj}-U?H*TquXLcn}jLA z1w5MAv2?-jY(?GAy3$fZBZ$TGz$>7H%y*EZ<>0r-18JZc1hBCSG(>2Ina&Gv@a2`N za>UAVJC>)Nk6<>#72pbq!xXy+cBaec=zMrWhX|q<+}QzcCR$P~*noAjm>RUBc~8z9 zl&VZ+Gqzf%qroHzmL2@BX*_eCp38&jr#`Bo8C*!8!QA0vJ77na?8(;lu_Buu%W%gX zgUHDSmgItUmi-fL5+om6AtP9#h<06c{qqPzqZ9=B$sGArN?R${(^*9@=R?E-(Pn`P zmIs*N85(fmJMEC%1`ilx?S8t;jfAEdo?r&|@f0`+{$xBf=IKeGf>3K@H_nlphtFLu zf-Nd`0-zDhnM1H1#Wvl^*^AI*cAkRcYSUvhrn(II$y1-ZH2Lze7B<}2QH~^ z3p&sVoFVoZFzuyY^wOXMWhAuP!V2L**DGzgikjGC^C^$lAp48Z*zkhQ`dBE7LnmnN zR|0s1^^|llWA?JB=ls!g{BFvWZokT$`*gU8(9m=J(|-vw3;3wWA{KBMGCLec9-O#B zxwsu*G{-8Urw5%i{GA1R`7BTi58jC{3qg_fz`;coJTeT$1o(6E*KIJ+vg_F5IDEuF{6*11$U|12`vOIhU*wK1u@uu z8HB}^;v;SbQ3m`lEvpIdLzA zRu)dfpt6Y2Iy8*j2Dbm&Q$&PD)z?XP5){a+BjDN!vZS;q8(vQ}8SShaD~w(A@L&me z6=b~Apqtn}Jqx)PbB+^}TYCA(sHTjaya*xhX5dVd5Y@@krAn9|MM1`g4+W_6l4Zbt zG_x)V`51^LIM)EynOtxS$n2vGbr@(Tq)iL3$|Pu9rm&X?N^4nsK&NJ9NlZk5xjTF2BTN;j3Zfp;HR4p6`T@nsc9r2%#tELo6jKr;V5XuA2gy%C1gy*8 z|K(*%kl7TFbv0;PgIzv};4YKs>9GOwshI6Ufpff2MajlcG&=S%;2FdErD|-sncISi zu=NzQPVc2_KBma|LFZA|4>UCnhrl?67VeG0CEz2Vb}N)TU#?{+wN))+UqNPTX&1Y(UetPgx41bYGGd4KUz*B_>>#d;0Ek{|hNv=(R858~8r{jy*dWASZEPR-Cb z^+zk*B4!L039{`PTTq5#&U_F3Sa z!f~jA>$x@+v|Hhq7O)g9jQI$RkfM3PHs)44pFA0=z=-vgGPRd3>y+Tr{#OXhEFrp8 zC6S#SM(Z9WZRd1sz8vVxtRtqrt=6v^p;&D&W$<$xXK8=2XN&+qj<{AcfsGk=lznUJ_5vO8auY|Cfwuwa?s=3etz>6`CUNa ztVf8ip-`Td&5zGO5W}eW-hX2h1kD>n?*DuiR!1bIfU?nX0=eX_W8Bk;@U_i9{W_Y0p?0nlk2DU2mYw=mG z8NNIApNeBRz5jtIw~*-PJrF8wUAhOkUCe+iAI%h&&T3gUd)7Ld{tO)YJnBARy~Kpx zOk`S`+K0LupXsd`c2B0EEnl|yQ(TogvyIyww|&gx-y3+DnmRR(uQkm@dyTz1j0Zwm z>)hu3dyJ6)oCE>L{=X*SI@gztr)*2?KGi(3>*e(m4wNFXYeBsT zKz(E-YBu%k?M7{(0@po;f7~Cpl@)d#Yd6toC>j%N{&W@`#x|*teA1W784ch~2S{e6 zLq4wcRrKjI1^#*EH^ItPHkqYgcm3%p7yMyKfqg_1`9v>4jlb>oc<@C(3C&A+Tu~YL zS@1Iq$U9IzC_;x`=yS0|dZ^4ppfUjsiBFUVa=4mO!sKJm?(kvat{9J!;t&ox+j0;)k z3EBKoy@Hd`{mVWZ_wvfuTSp4r+s#C7f`Gy@ft5`vqE2Yiu zd*FnE-L!iY@X@a>l_d<5)gQ}!F`y@_w`HtPkP3AQ^kp^utgL$ln}E`KtBopVoa64Y znvIUfNUC2G=tn>Lr0Wc})MpR}FVEs!=n`(xds4#Dug>4RuFq^N&I}e4za7%y>rj63 zyfg)z?R0(hU}xhyIc3{`_Pa3R7=rR_f)Ed^(Idgb-|$=u^Q4`F}j z6;~=Q8jS`qzL5p+DFG=zXC)82S=-Bp($cBT*U`Jb9#3pX2m@btr-0A!$Kc)n?L4y3 zgqx5jkP*#xS6qsF6uDeu=H=)*zsF_VH2NRc*W;eWR~Rlj@i%=0BsYGi>tzj7cd+~*ydy>jMN{Tzhp(F~OHB8&(upEp=;Vr+qgMwQ@hEwwO3B$ z%yV5x9y<+LyMf#p@B`+;;%|JLJZ%bjmn)LF5)(Y{__F){0o1@be8KH!=j~5|3@sDX zXDO#{y^f`cHIk{n&GioXnC7_-ed`7D_88im+AdV*q_^$kSzcP_vsN!*+L2q95$>=i z;d+)wg@yGrOx4{j80sqPp9F%-QS1zD15TcBHR!aJGk|k$D?aLy+8r@s(*AXt-zcnz zN)}a=FC7as*IP|5y@t=$%LT7!#X-q9>{`O334ThK>Xx1v4F0_gf(;A_>;A)M^c{me zmV&#NThFPFWmV}Ctk3E@n_`!{iYX#|3?^IUj4tp*-UbOtZu=cD8LER^jw)GE^`G(P zxehR|rh&egzDkG`bXHZtGN#w5*dD*~3LRxLxt|GvbfZ6+FbFpT%JS_S#6H?kNlq!{ zUJg;)BK_!wwcrxZXY>)tl!RxN&Qv|cXT@JsK!j!#Vp-b1h%zakOy3{3R}JPf%L z)VZYHds>EKuMDcJ_TOmuWm428hGo8>MsxJr%mJ9{t^4VWA#2k}?DeheH zHs^j`bH)KZEQ2+EC5@Pl$~82(J1}L3_QW5>!p!>90jf7F>MISq;nSjbn7^pO%mnD! zI}EsTxo|m3%6$9q!W+EWMR_^;p)=FZA%OkT%Q$9_tn+1hmwi*ppEx}06#vZZUiIC$*(E8(pC08Spe$diFiQlz%#OvD^*yO)k|-LFQ%yJ58YH` zwq*`?`xSzp_EB0*Of{c>=&)&RJYi%v=@I%9ozh0pKqAHTp2?Q>081L&PsVKE2$}Hv zQ;%(#i%XtR&YESNU#`V7_pNu~)bXCePRaVNkq};C7N7uLN%ol->&we(_#T9rlUkVP zhi#6&xLM5gfx#s+IXWV9Vv#9b+A|Xg1pbRrxtf-~+`%hqb>*n1Myj5`Z*_2!v{E4} zWzLD$9Q5tPH2V`UizIByWQf^dxOb0`e*?1rqc0_7-$x$gRi+AZJtgenFb{ zF`?PT8YC_V@S-L*ARqwOPcCA*a~TEYdo#;7tctve-+ zXKl%}r_y0INL2>oz7z6!UV}e0=wuLgeAUQfcrY7Fksm8u10({`PqmF?fmPwJCZryU z%iqyNa?w`06fC~t_a&%Pg{e2NVDrv}(YbP-v z7Vq+Fq+MzJ{odNNXKGP^!-1O3KDYIrx>T@*%hKU|quZb9Ti)!9N?)KJGJIiIyKa5V!vb zd%W@`^j0N2p3{xwWcO^bPo#f&@4vR`*C5ku`LnfHwA_#}PQOcC@>x$2oMUNN zibX85B3_kTay0VsNrYs14?uI|M9*X0kx~jZdxXmQtmYx))>@PAG{tkA>> zjAjS%`y#^rmww6t%m?=v1#9GVg7v3m>ckm{8{PeCm!?2zqM2z58u8;5pR&Ww|GM3gT&y*??}n?9y&ybPw;khIZe(XU7+iBZbbDBSXf%ZvGZ8Iu|1rjo zC9~{(552TAKbdul{UuC~A~iL$@JE!_))dpY&i;EM-;;TK#$BeO14xA$sQ$K127H|x z>AAZU`WDyNNrONi;$zimhle`tq|NlFGV^)cG5*i{!=WLNcd~~h;L%X>>bB)6jVPB{ z4A-Zre4c7Qsb2+OWx^Z5aP}BYhDjQR(~p-=1i-uHl@C#n_&xr6PUjR2ExE&;S>)r1 z7SzVx3Fq$T#A&P7VD5K9AYTyxRiR9XmJA*r&C6;JqpEYe9Q|K!TcoNS>}{X!s)M3D zI-@Z=nP$B2Q29wE+7$%3L4dzy1SB*#{UY5Z_NAQu+c^s3 zXo)Y)d9H7^;>}eI^pHrAiRoUj#ybQ!FDX7MiqYsbAukMrqm|MBiUv;cLlhhFcPXbv zrH#9tW1bwK9L=C=aZEe6Ihbh^+ZYDdcuZ`!_X%CCWtfLut|!NSWBAd!F6AywFJMf{Gh^1dxMhM zLKlPHF`Ed7zsYpQ9R|x!Kvs=b6ej53eepu`oLjyoaCoUmu)A62@ix}qq+KJ7NPA=L zooijV54udYArcb){hG8a)uu8+6Rmq=3Os=9;hk&?!(&bs!aZ%5H|ESN%3U7)litmE zWHs5I{KxSY2PQVaeyHTP{xw(z+Ae|eICWE4&5oc05L)} zab29GUEq==^zB@w>B!B8#Z+#gkOOO9u~~7Uu;G|BSV$cjTa_!2O&z+G4teyW7SMY@ z4fWr}?pn+$lu59*;qG_l`G$B+$xY{p@h+Q8vcct-SX6c%Fy3tM(?aY$27JL7Y`9M% zR{=dmipu)V`^oH4j5HNW%@=y+C9QpFqkF9Z=ra|ipA&4Yt5oz($i4DuVcqD=bPU0C zm!lmo*{^KXFh#W?iGM;sw+A9V2g9jY%vLy#J zx+qcmoyoK~bQ6D;q<20w*iaM4pXVq<98Vw%r z97HXs1S4;M(&2Tiq}p96ct_ER{U)?NPb;4tUN|Tl@a#i0su{qKKLtB--dtywGl|cw zu+Ki=ae837E?ZnVN9?#6u(9OY-u&&(W|Jf=r>dY)dhsSC?bpwnFXq&F7iv<=o1OuR zDY7F}S-&@Xae%i1WNQ6=aSz|Ww*7_=eUhU3o$^&v^@7$bIT{nwcoMPS%>T%kjzZg$ zjwsbBC_iKQ&9#1JYZP97Mb9zJ+c27w8|-CUU-%C|X$%uaX2A8PTSKfpdy>N$nWAu@ zV(fxtU`D=}(onwXUJA(*CE(aJbI@f;Sk<)^y<{i(0~i|?zBCSi+tK7egLjO3xhFi5 z6s62DYlO)wBAc9JTpEolgHrv<1-glK-;U?idAE)#j5 zu2UktWgIT4hpvgzHg!3c`k>@i19nGG{+pkGWhK=sR-vva#$Vlv=tTh;ZpB|QSz3Y1 zJ_}ps7hL#1VgLB-4{nt{c(j|cZZ8|}^2GTE*wNUxghId0`-s~_bw8*`M+I_-(XIQI zW5vO>I`o!b(Tt0LUEfCWK3RU^PVB1#j?Z;Zc-IjItHq*Z<|$GqB;&gDbOAoa3#_*a zB7HoN)tEed@;tiFOa?0p%CG4*y9dC4vM7E<<0sm;1%;`DkM|6|2S!wz(;RaR@7LN) zz64ZZ=%zMsefUK+60vY|c474X`JV7|CMd{0`m3bKPD(8V<^xzZ-w{{DC1m5h70$9ihW+ zA^Xkf1OsIK--48Svhh?csNE0Xx2}UmeUw;?>O_cZQ4cXkw0i?Xh%IbNU9E|(cK=Wo z7bnrGt9#l{T};AcklcFQY5F8!e@RTLm{;D}%)@@i6N$no^mNJ&5PJ1V=>P53VnFqH z`S^5a)Crogxs3Y&6Phn3;DZyY!lFV16Z-)-Ch`68_wM${01JG@Wzh!%8M0Spy6Q0X z8Ccm*^NH^PFAv)j{Gax&Hq!*Qz~`m{g3Rjq;D!q31f|_Z2GgVaVG6yZ`x203g8F-b zBm0sgmv~Y7mZ2Qw+Fu8@`zntT#nAx>>@z=|b|jH^-vT+%oH3l_&Y)m}ibReE_qU6& z#)DYwIo7@!Wh++Cljg+G3XWQp#1~+hM)Vzqs8aB8^eP|`$*!!Dz%$q{JA?rV7!J{D z{8}c{BQ^E~KFPl|*_JLKEEmd~o_0cf^~@_?&4!9?ujih{DVq_IsUmhFM5Q_XygLQE z8tXO`k!aC6auw+EEzDU$3EK)oFotqRp5%Cz1peu>W-FOBoMyMK zrJO{iORfRxxi_jj(m5zk+AC{0jDcee3_l55MeW924&_z<+KEu>8qu%*m+4V&WDsFBC6MAg@;BB>>n?QR%wh zPDgB1TCgP(Z@Xtpw*>@IW$sBTSQ zhJJVTvu3C34ay-J;f&P+)VWmq&cJ7mwdhDl!^;C}kznmOH_4a88dlF66bGS9_YqN{ z*JAoP==E)d)LejLe?$<$=fVe^mQ<29Kf@b1u4xInU7nB@IQN@jPXKdVK9 z_PlG5iUyw~g~w~8qM9Ef%l+p;&aZ&2fQGn@&fS)a&o|qR`dcH0`Ok(U4?z87e^s=w zmE2T(B9Wvw^v!qBx#y* zv}RDv)1nSqO{KGMRRi*66v&?qDA?Lt5On$~M%4~$i%Oo}DO=Cq8nFe6#hWOdlfdzC za&W%JwBmqMoby;I(5KF70Pyg>57?BSxox%1;P=te+H(+(A(5&uR7*>AX%g7qa=D#6 zS_7J68?ulrfW5IAP$o=*52G_OWKHX!VKAa5dZ?17E?4)SQuSI=>H3=cOA_^a9Hh8L z2Zyq_Vc3;Z;O?~vZ?);GOu#P_f>;Ip#1L79N`|irl}ZUHWqL(ql4I&K>=WJ(109a< z8eNNs#{zA017nr1=L!#z@;En`6&4#uBJeovMngH~z?EyJhA=8yM1mfRobV+`i>C_h zLINhT%K?4c5Jted>QMAmE@}+3q1E)aIK2zC=i%pyY0C>je~w=ezMZ7|q+4>SOTwGj zG_HL!>N9}h;j`uZD7L6=x1kT)-w_d|OqQcQWG}!ak%=|oZH3I`?phAAO)9Z&g$`@U z6z$9O07X#mlFr)(zGM_t*=q_Ql~prV{}j|=k58YGG8Cto1Y>Lj*}{ql^~gaHlP-^u zJ{h9siLG&PNS|S|s)4#topO1a=JxM8ubJXDPP_tdS`OS{@*tI*(bb z1(~yg^c^4O<;dXB+Yde^^V6BLLdtN4n4Y5=a5njl=Ls6zsl4DXU4SA18CEjy71C6T zhZh=>BJ!Ip1r=CPCRI7y%UPLLs&6>xviofh`)^AH{Q3@*cSPw&X2N4sd>P*>pY=f( zK=*3`aZPorj^CRasE)!$2W|K|;#0m%WG<1NORt#dSjpb(b%Hk7jR-p0+;tA}!CJFc zW#4$|(Y1tIIT2N`Pe|aBiKWUEJ5*BEowNuSs%;|Lbca1)w{I+*81$#Z;%onw>CM*07 z$Kt`9?FNm-?*YE1*sgFW1a#fACOKriY|s~NaH1FO>So~)Xn6_wu7f|L%S~YJI4Xzo z4Z1-XemW~15%P}lWM&veN@Damu;`~UQ1-aOg=G9^%{8 zkiIRF+&5js-u3UgoKen}o<$h(-|{UT&a%#xg%3je)QkMfwF&w|v>eOo>Mo+NC(T13 z-Nmk20Cd2`%)Ob6@A_?IUb&wzc1%Ft>RpKWQbH{m6~m3lU0yc(gN|395s&4QK$ZfH ze#}$A58fY*h{hu5Kq*VqXpKsv0vXG#`c#D}R%+uwXQOq1u^J1uulb!=2kF%;lfS?2D0 zcZ%6%?+dTGhzAHc&sXI}#c%mjxnoX6Os#yuFUaa@t%a@o03AOQ6|r(xR3~^)_Fty` zAf(n6jIvKp@Qsf5;44z1l-;W5X{NMcS05oEHBaLL{7miHKDEP+9uR5Xi-|V0JKduI!yUW%u8qe zHOR8Kyl~UskI;86y-Z9GBRW18iACRpY&y1M^IYS3F0|w2R4T7?^3+92?E+q9;hgWxH2 zU#bs`8Ylt&UL?Na!tThvE1ADL8|Yfw+q$Y;!37Ng+S0&Q6c46cLPv?-QOvbx>SqA& zQ~~f;`DUW5X1ajk0ivBUpL{t?CG?!zfq*~E~@0J8%fy~;UoWN z$!DtTWQTSr9>{M_aS(KAoRzi*@^oIgUR(_eo+f^=QQvUC$!<}*Ed2(T8EJ5^(G~+` zG3Ei+przLPx_8CKLNQ&~|K?_2uzl=%oFk>rdY})O`;R*lim9H9at5&7}Kw zR4jMLZg3B$(rd0X0*6NBz@GhiVYHKqNRxm_}fkb*q>YSH_xU+60$&HA=>O3`7`*DfX5&caomIAHtJ+;K`92|7>p9|Xks|%VJ-tqD(r`I)=37sWAY4`i6KGJUZS{wqk z1D~<6BNA(xiiWaSCw>5r{~YRE8RGBdOUD$_*n6azBcIlcAh_c>O`HYhrX+k=IsS!q z$cEy`Iz#v~&dJQD_ai-DcH&Hh7kDj++g&^3>m-D{tRp}HuO%dh5m_XGm@`?BG-?ql z?RTTf79PZh7E9Z)zKfK}^A(+^&y-zwsaGl};-mM(+#ZuFAHNtfliuR_BF-;G~tEZMxazHY=_h>~lxp{M-M z@iy-*%f4s*#3ta4TNGTwZq<8kh%Co>oiOdfw~RMV;i1#7wTmV81L#KjOGu_p-OyIY zNi!2zX6_gfb2dw<0=1-Qo#rCT7GNM>L&t!JrqFaF{&>?eciU*WDqQ#-hOz)-?nX_= zs9k)DflWa8hAM~9>7EL^;KNU-h5i?{X5ZXsF-tzeb}wKYS+b?mEjB3e&MF17F)V#r zhD@Ah7%c?ce02oULe{;SAC7zV@kTA?n=AZ(d{_ga)=}FZhjVmIbKh(7$Z7r5gYfd9 zIw)OPiqVva*Iox^#%L4ff0RT77hfB{S&3+4>e>&L9pVZ;7T{EP2{&owG{+nT_1wc4 z0e`T=6}o*Daa0E4eD{j&O=0=r-XUwUa>8hoQW@-dpkv9QdRh(GQw^zOm`!I*R*q)J ze-${`WG_aE0DM-w*}9C`{3dr)H;?!4LrFS-W4* zH%`qUSr4K>?Dj(iy#;&~hZ%4CN3fxcHg*VXq-+`gF4)BIkZV~5$8$olBDm8$^D zFJES)&*^U^=QSVgv`DG+ zgWg_>!5?M6fGxz^>Zeh&<4XH!A5e@4J(hq$fYZXS0niy`r9L@v7P(}#l9+ny)_Rl2 z$M2&aWT_Gq|BWQ5xGYajiR{=CxMK-+L&84m;Fv`B{nU+hQVR7NwcP>Nce6&UJhCEM?AoBT&iENb|^) zc8MR(wab*%mq7cp1|Hd7?-KtXT*mRqkwWL&&FmeB@YmfVt$+&6HdaTjCXN?1&ZAWg zeEH1kSpE`LcPxIKpTxB|&vWS%$;hwwvrNuTiLSnxpmr)Jd5CPMhIroRuB?1oinvOL z#8yRHmZ_I3vbMFF=6gh7OzsRg3ICzhYNe8tdHTUc+0?x?XSNMt;%sKURtuwM=~4R+ zkM@!&f2gnc?=ZG+mBHspX(g@&t58SEeHUcHiG~e7)8vOn%JuS|_oBsn6x(m(my3Q0 z`BdxO#g-Ol&4J_{CimaV<({=R7KMV!X&W2v&LwLJhl6e2J+|+G6x#`CL?sauB_Onu zj7szxC#JLCUOddz6BWb|v$;qWzF?#*KT=qTGj2If()EXdf`sni@uaNB@9o0Z11Z>^ zR$MDGrb*l}>nEm?#?hGO=SeT=KLzzf1c zeVm%EbM;wh$lHDsiYMOT;hFcOXd7F*iw(GkQbE)V1+{tCHN4^RlIk6*XcAM{0WJH5 z15>UCx?^mDb8<$O@M!>&>PA-fC*^?ckk9ApMg!IF;NmsSiM2-=~pbEaL6yMZ(`)BN6A<;B6ENo2}-!y;}D=N@P{_5h^%n=w1W*U#^JHwm_Gyn^$rp(=Le=qssxI=cd5ml61# zJWtyZz_PhKh0UD3m$v7RM9H!NKNj0Qu4c+$hx#V~h5dYe9<1PRKC?B>t*T)1b0J)kX5 zW!ib?D*Zf5`Mn7-O^J22eN(V7ukSJpN`7;6MUQak7p+8n$b{|iSVHdLSRc&dSpT}@ z3~ZTfr)%e(It22rvYc93eDBjKwg5ra?$ll_TK3$f7;eYD-I}3crwywvSg#FE5!G4m z$TQ@;D)#h;I0i&;$2N&(KUmlA5*G!7$Zf8k@IOREPt!-DP(13yeXz<@8Nb8mdm_Kh zA7_J-Z*bqn4=h}fu8XFGi9XPZ2^N{r0|Hzkw~7}`oHk8iqAAec@ql5p^Os~$eogHcMC`=^haU^J z81txobY-KI=yddT{XUJTpYTwFn-k}%-9wvaUh+k!Q^_x|U4x9|sb*B|AT7AZmJ3Cd zczDCBMU;5Lss>Srlz7Z{u|G>F*r-=Xpd!O&$@PP&m9CGdj9$ zv@j%1F`W(BVe=RX& z#tfhkl3x|l+XW@6j~)UK8{AHcv_$^>bQ@%9>&!~H;-*0n5i*0|F>Hk~|EZZFaiGr% zrX!sb;UrwGzpe>@FV83%MT{oZ@F9!~;iSKs5Xzns$moDG+S=-=9Mo$CQ~zB8Emc&+ z$QjJ1X%qFIuu=_(xSDp5Qk3hme=Beg>_oTqT7}YCg4-WpSC}xf5*pM0Gfwko7{2gc zt7flD9M_;3yQnY!3}l9_9+K}6HjD$aTHmS^j*|Bwz(uJFR;&RBQ&SG|?+Lf*| z)a?(Qy};>6(r)mK_Zev`dMzd5D}Exm9S9KDXd#ClbjIs!1x{y23~(Wg`v6{-bp%4C z%s?_*y`(`RK46v72FlR~4TxJYV*tTyf?GTKr-t05%$AW!5Gxf}7Hr-_hsFlvpXh@^ zYS94!%G|~Rp~Hi88Tc76k>9-vBPKy{Rdxejk0^QE;6`+aFdb^-AOfLZowOK@znoeN znf(r27Vf_Z_`%V@eR9IM4|*&<8}@qq=^UJLj=vZP6p2=aiins3Egyji&&hgz+U*m3$%`O zKp`7&Ve%S{4aWT4$xl(s#sWr50lRQAb92>U&6P|`fD8jD16`>VPILt#jA0Qf?@2^> zJaCI+C0>KuTx$#>sJ{qGbUj^Vmi#-Bth!1!L>}9V0wOV_&<)~U27Cc$u`n(!eE!xU-6 zWB!e;AJgKsU2(w@M1#|0gyf^tC(y7HaC~17O@0=6!VI1QY)tl z>;p5H8egvt_lS|o>oXhd(f>!)J4RR91Z%?+I}>MOTNB&1ZQJIaWMbQPCbn(cwrzj= zIpfs|#1BtGcV`b;?>zqG%&$t>vo{i9LXDRdrV{hs=7Imm;|3f{l{CRs8JITWHh^}97%-CGs#kb zLo$LM3zi9-;*b`Nz?so}So{x`emB%5NXOGQMoC5hfJ9O)vC4D^S4Ypug1mZ4Rx==f zoM8Xci+Iu^D%W;GDj$Q0IliRu;y`RghApeH2PBKJd&&YSQTBI>5$p`seMV9tuaG%o z|4w+LfI0js&^);!ufDpfn458Qw^Z!vw?m#$hT<-fMnRaPS4gC5%V*MzKOmMyW%S zQkYG}2+!RL!zW!tPUp~LE|U_=M~cRR%hqpRA0*zL+ zxYq`fx)|=b%Up)N^bhzjShWNiflNxb3KcqlyA_LX-!!R5kPWmD9B91#<{j}U985k# z<>Ww}W{Va95l8b$^L7b7%TzxptNHc`WNscf(IwYcT#Q^;A1NnE(^`5bz~dEJ)(a1> zVuc9v(pD36CCz>FN4qbjo<{#*j(v&y#Z7M6;Yv7;0NVZP5Fh1oYS%Gr?Zq%&2sq6K zEBl#TeroZxdw;sg-u-^$-u=z{_r-zp^N^z(b+vF+h7Wl zzggGrq}JO0lKJXrZu-u1Yxp((Ip+HNeYYRbWgsAu9sevz0!# zK3WlyHoQGuebPFi&!4kvX)b@i5wbG5%Tvr2jD@lJAEJb#Cp8OHNXAq7&-p#H+R%D=q9fH;o^a>brB1DIM$b+1%s!(zBUxJTt=NWPIu+dx;V@dSk0f=MKBJwTP!gHZ(K#R9KshfC=(_DzV32oe&7a8 zc733_MKiuzEQ1n}f@cDU~=aR9Hpo`oAwwiOACkQpadZc45_SkF20XOb6N zsvibytI-Z7l*z3u=~C#pa_4Y4;*8ykZ47O4ofn@h@h~(yJWW;+ohrEUcFd8lGM|@71U+07t9VOJ7&#_FZ2w z-*5Lq+9@urIudxEtFOLCu1Ak?>IaV=L}~lirmW*RBZb^xXD(~Xr(+7oQ?70@O?AT8 zRxxy56%}pnoZG}(lOy~D+Nt&Cg^iWY#{SDETw;}8GuK5yp*3)VeqrIBm{}<<1x+Ju zP0izoYaCZ$u~^kZ04wdlhj$U;hEqSutlI}2yK;0)&~m(|(Ab##6FkM%xcPTl$uX&T z?mO*wUVB$flvo7+AUr|3Bf|X`j&V2eX0eZ9`qz2}V9?>+bK$sF8lHe#`MLeTmh+K) zYS223uGm{f+>V!))lG5=uH?$fgFB(+X)T)2wyy5VY1Xg-ko3S`6h~BqXl!zgJU(h-zl#sY(YE9r)AMmjXgFOiJf8GO|M2Ws zEvp$>9TPp9h}84mkOXdoDT(sIo4!};itf6uom{wl)l03jFT)GcI8-yCiuFv;p=u60 zG_~_S?<5`vFc(@>#u8PRoYqs3Xu^6HkC)uulL9g&A1%M+uwvwgCjuLb6Bd!Xlkl43 zrjAdqr^R=;->;5N!+RLG*^{`0*|%tFZk1ZA;$U#KIv*)Vw^_K(B3ZP&6Cd7N>{&~oBr$ZhKU%xr0gI->5?RTz z^K$F`6}`Rl*t5G{zrVsObA9WuZK2b6`|Szxrmo^5-_c3Wj(`;luFN%7*5u>+UgNid z6m090Qys3SNSrfpB?;HA4!qzbLF!?`bs$?Fr*$FIl(~6x)Kp(K0B|F`T(I$%LKv^8 z+%M~4Bc>#QKW33Ed)EGNRC8}9(vJ6OPLF+pH{}_BW;}zp3Ez9&_RW?zH_H4R#M1|NQ;z3plwp&SCc#$`MWJ{T9OY70S62meZ!{rtK$P%7@-OpzF1z=vJFMeVqQnufTUx zuLD>2>ncD#c6fO7eh$AQN|gg19jWiVa+$EO5`?z?>dmH z_pi9D0m?4U*~{W(Zj%j?zU#}o2ax~T53NO*zvR(Trw>VSD_FR zR1+F?pOtR1HaO9&C!I;)l)GyK62|!Kqj;uG_wCEHJZWd-=;!v#AFSMQERXFwJD!`f zeBAy3osS0SeBF=xr+D;5Tn9QpH|QHqXm|v)BvtV(k9(J_kF1}x=>uG%#vsgAyo?nOaK*y{J0>#TVRJSjRwWa*53*ksR^ zBiIyXK|S1Ufw|qS;=ki(Tt2-$;?KmCJpU-$jda495X)99f5F=H+K^KJd2-kZWpe`umIL@sX;N)WM6Ck<7BZ@t`q#PT*G^%-ZC_uBj(64O zWHfm=Uv*}*J*`Cf@bXO6r}=OKXU{?suR$S?s2ycdIjizy`u;iM2Y5>E6BqL+zj5UC zJHcl^OG01Pw&J{K3O0V*gyo(JC4=<1`*-^_{tCs?^#ZyAH)wXZF_uB?+YR`Na_gwn zr7so)&l7NP_37%y$;2T5+a4_$?#G!ctL*T$_;^8+#u}BAN;eg|IC}l6lIZgL^Z|Iz z=n!{Ib)(cgXqdQ{(#n78|G)X#%#d^Ix)IfV8Cm;3u&M-f0sdb+YFYDt;!&T%*qgmo zPdTKGD&ib~7w(yxZkZi~)Sk^&g=F!P5Y8cbf_xq)##ElgHx#2o&m;C~sdOsD4I9ya zIX+WF*IIE5emvIti4pn9E*EbR^FXY=GxY@4{;=QmGp**_!=r!k*pK*LX_N_2huq4t zZIvE1$4qhLzuhbumVOi2mOp-V-XZ&p=*pj-uSfuVe6oyBDdP>_eJOX`e$78l|V)%81;p`Z1Al90QqmZzYrhhN2{f9UDgICl$VBb)@X@W#64i^j&nc!n^oyXqn+K3_v{c5!?L_wBvT ze=kvaKZgu=e?6XtT;osiXK#I0Z`6P8zqSLoyE@^$POmq+qxgGAC`}*k+rJZXbUrS> zBXc1rfA$-p46kl>t`;S#;unqq#$6_J4$|1M3YawORtdWuj_tIUJnJe3`z|^p_q$*C zHlMqj^dB+pN~YH%niFgQIO6WXS2@r$F_p0d2->_hUnj~K`;~{iMu~Uzh83uG(?Q5- z4@un5wrTn&X8cq4%-8xFDcewVY+x?NU@3})yl5%3&~&E&R*wI(k1Z3pkB!|e==qh# ziB4elztgrL*^1K!9k&`50zL3%imIDMvduP<^*7Vc?j*#_sWBX%vG8EQic{oRhfk>MKi&|nXkOVeR>1aK z?Hiltwa~z?{Y2%+Dtv$^;AQt_zW1t{S8lO&?QHfPsrbU%auw;z;@j`__U3F>{_17F zIs}ti>)+bf;=m`BIYBgE6BVX@+0#DJW7%=qgu$1CA$`Vceq!%eKl=>sm7_1Ubbt8m zm2X)SC#+yBmg)llAmTxZ!B5Q=F?{IezPeScYwGBSQd+)1?!gM zL>bHHOs4SircPgOQR4t~T$ZP&zxijr+@aDlgm$~7@F&6owX23l*i%kMAUth2SjUB-(-nNeQ`|hk{A^lt3_Ui;o z);JZ6$gXzfyWBNfTHSR!bQP#!A`P?(FDN!RcojZ~D$>Z?l`$I931rTPANcR>Y?-DdnEo6t<&U2r4xku* zg8$#iiIH>fjOrOBTbN)KI(QR8Cq}J;!8(!+h@svtS2$f?kx(^5o0K@6nm4wL5CmFP}BE8h?2-cR1?lrlDQ(&Q({~G3!g9? zciE-|yA)Pn**1zK)&V}8kkd$VEwZsh)sarzOmqkh#`lC+uy{#67fACV1n=>XG4uZ9 zzD9@ANTdaj{1$B>wCE+;BSu4FL4gNT699lBiRc7^28ace$qD9;JJ|KPLSutqsvHT- zjBIdHLA#7@3qBABh&|m=)Wl0TODlb=BGlSH{J}|uf?}DV!f!Tn;z8*}Z2ijzvK|MR6>0e-S|4|ts zjg*j1>JTGALDtg;f~AEfHDtVCYP*$*b_E3p*MF76g02P!!T}X_izoU*@euiAT30Z4 z-8Mu*Aa@qsH|?MyhS0w6d^E&|4IMzC&^(}8~8M9t=$W+@+rR(J>Ll#FuE2O>CSb1v?}VwJ39 z`wxD^%taL)bTu*{LP1~(`X99$zy!r9nJIuGAA(aF3j%2D7-%{oa8AjvT%tus|C(Y(-*hqDqPF<+HS0s7}D2(VjRy$s_&q?IFTaw{xG<2#iBIXkgQ zn|Vz#!~^(m$Pz*~9SjJ}yqSw1^sw}VBbrr|Euk0(k>uh@9I^E}Ff>2~nPw5|gk-L2 z62@`BIt9Ng0gZ}n;U5gNi?%Be7uLOylmXEJnTJ=RI~ev*>kCTpj|9+YI=Fv?fS`*K zR*-A%QS1U?DPZ$$K@gBV`z7fyIEa7tuYtz= zigC+qdn_fKLEsA=P|VL_X~=>A@wX%F5N*gcZ;+C(u63@TrP|InYbYxPb9JKypi~h% zqH*tG$2ouqPD_dOiBjg8leVSczFo6gBiOSsy!Aq02*aZ#o zP(hd>D3~kFUOwQTowU)u5=(W@IFB?CEF(BQLBAH6DJX989gv28v8xj}(ywT0&A4C?9Qf=aum6T4Ggm z<+%E@{L~zjc{j9<&@7!|7y;mYdl*22BH4wFzew~@Dsh};HejWMcHzB3wH2GDuBVOT zp!QPxJ1q*t-v#B11GR@p0tOVQdSpVnFub(z>|14#z0wmb{!U7XbOKW(ZYBV{8KG+A zQh4U#%HY)c$Ig%W`6|NLqLjhtiOIBAHdprkV2Z5LlQWp=ci@IYA&8a(->+8w8wO6=nr{i~TEa&sK zSKO}SI@xbc2^VHTil4A)oNsDTY+L!AIBLUo+OUi*Fv zTCK{P-;fh@_9nY@6ZZ3ZSz^F51eDQR%hTqBlyrVLogwhn`3n&7B`M&%TZ`3y{e?7 zV$k7(Sf?~&&=G>rrmSGlIROUQPt?^ffOj3qXZY8Ne-Zz~b~@XaHt(XgcU9wbHRR*Z zNhx@)&-l7&=J$I(s{YIIE|{|xH6H9#mvgrVyh6I>_4M_p`5NQv zVg|L2xE#_dQ8K?6%%F(B4!&Zq7E67mnLGVNw~nHEc~v=h;|ovPHt@wyXHGq4mk(U4 zo)DJX{D%{X(|ioqot<&FJGN=v-aIzM*K&NkuHNCJR_%Lvo)Qqz)V_9k&7Xn8hc6}` z39Pa-z3QVlW{~5)9}GxdDXSQi&!#WDb)%-+n{R43P@XxMQec0y_{Ov6KY9MG%X05` z|BT~;9+QHAXNP^VUWUpoI{&#cCvVhUSEiq|YQ^8aiC+sFIxc6{&YiH9Hn(mZS3<6b z#w~q3#X~iG9(2G7__ASW=RimeRwy!q66M3^DWGAMSHr&~I076u7F4Ud>F3-2Vo)p2 zp;fD@c&bqWu1P}Ryt9?6{ph@F*5jT|j+L6Q+dE6k>6fCm&3y4Q>eKjfFGlNF)oqUQ zBAU*`_S4qy4OwzB?hIM%FY&3@|63)L46tC-Zz9{`Z+mmB-HTt=A9}}~>|chg>zGcj z=iR)v@F1Ho0H`9IJ@n;I)gYZot8y|ri3+kiQd%r^9XnpXCUd?nJIY>^wz@kKF~60z zI**-?DegBr6HCnbF#WQVt)Djiy1hdxE4v9^CqJ({b-Qtz?y>y%pYaUO&px1j@~87p zFhGnp>ZV^Jxa4Kl_@185rYfelxO^KlVUnS5FFT1l1I`<#MKfvYjY%dMhL~$7IfBm( z@cUhV+Y2(OxLN9iMeTC2?Dq$~ZXD#*O>(+_dgD~}4;lb?s9B4*8Fc{Dl&tbv)Eg0V zO(Ltfu6C~utO_XHO~b z)6(92bOR~=toH7DkBN)8XTlTD%ih&rrheL#f+oF{Q8f_pNE^rDc9I^G!T6H?%n<=1UPiRApl^BlBp@P zQ^=^z<~Ve7pa3S$|GVPXmbNEtM(&!fPObMptdqbX_>(KV2bHM}4+2LzBFH@V3#0>P z>FZk{yxNSleU%xza)@aUyWANXeIzv2|wT_=EQ@>|)py6>Asi6}?-{*Z2=RHptu#VVax;y4hI+I0 zbaNGr_Y(V1SvE09!+Ha@JG^*r+Vgua*Q1{J19N4BJznbG>Me0qj>mcHU`+c30UL8@ixfpkC`D{7(D|9%x#&tjiT zj0pOYJ4}q>?I9lxT;r`-pU)=ZR|8tZMc_kPXhmAYFO>mF%Oe#JZwjLyR1Gq|>%@rq zKCPj3y{hq8sF@XxD4puq09T)LhM(M`=hrGv_=i}vs~Kq2e_*`6Z#<*kPS*jk z{`{G4-yI1k6P>N?;vfwb@jTJXV}Iw@d4He9y?yDwhjdpu9!OTB{B_0?kArc=MHca_ zhT`?&5JT{GSlMS2!G1{13vehUbe`n#Ddz z3%J*9Dgt6K?;^I^&`Q42STrTU7}w-J$Z1cZ!tMM|;6<+cF?1>x)LIin z#Ee!%04coB%@2F830r~g;khS`wdlB%xubmAN`AmB$I+9Nw6GuBLdflX;%VudUtt-u zetoNL0qXYOlDrQ&MZ=WCW;sfGmt_9G)CrNwB5EXM5^gAEb>0@GMG~@>m}5J}j!4Wy zNY>)#l}`1f%tM!C+_i26XN(q$xAhu7P0r(%dNIfkeGp^}e;H|8$lN`+C92cDDkn-q zNxuTZ_=X91l2|Kz?iy1}ZKd=N+V3nOrK*h!bi#sdoyc`ErMOKh3i)h)#Rg@=9BQ&} z7=`SQNf)Bm7Lyz?eeO%9y!z~(4*XC&h_qH@r*(!l0~chlCRaAFJ*VvHCqPQQ&C;4Ee_RF6;RycSx>})_3C*x%69fk zzN#CEfRGErdepiHn}f1|a&Y^yp8PqkC3|B=p0e>9!<4`7*#SnkzLBG@)w!Z=)|pv> z?OY+mfA#Sf?xHw z%vMtV9CY4pmY7t~mvDC6m+yi_Thdd@xd|+L!jvbUg~IZYbApZ9F6v`%*po!(`Kto{&y2V>9aXw|`#5QD-KMY*p>DA!%c?g& zSudOY#THivZ{35ZgHeGH_kDb`586$z=N*}5n5(bHDKc{k9u&f8cKS&&YA$x zY>*Z)7jPueq zv}HHsX}Q{Y^v8Y#kG_+&AnFlI&!l9 zW>y8|U{KrY{AQGb4T?5ba+T_zC>}2s^G0DbTxfgw{a(x`EqR9?9{GbCYpFa6EA^@u zDCuoB-(^?ECe!n3c~6y^hcIlwBqyJsFWz7vq0h!Q+%dU|zdxc~W$MXpnHKX_mg+>~ z;Ti-!RGM(N%kkv~{dkc!nCkElf*S|*TdF_6~<5DTUFh+ zw7m_-ix$C3!OHbioc;=~C+P!mST4rjT?r;uQ`2)_`SCgT_DV_{vdV{m*D}glQi57p z^$w;A5;%|WwZ;2#ykud+O2*LR7eGDf#R#YYlv0;=*AEx_>I#hWUYi&C)()HIyL|Xy z+jp5T@x6VNkN7jm44-Gm2-8+HN90mG8WL~Ul|3zuFMqfBg*AU@DI^dNzmj*}=XgEY zLUiWVA+f3|0!``*EbkD&Yw#L1v5WMy8IAsC_@bUIgbXiOV`w4 z;}02j%Z5iGsTj5e8rxSj%nNn#;&vw+k2&T7B2GcC*ZpqY+={h)*I%LOAW`r3-x+qj zx+Z7)%rm+0i@IAD&AvFt&)i6Z>bRj(MdPX$H@|Ogj{Q%D{4JaTs^9`+ThJzcyvJYt z=*Y+5UJRlGSbW`n$c|=x?#d#W$`d)F1E!)PxuvM2qQAbsHAMmiAi+XqzuHb)wL~5? z<(pyVkL!KAdz;Fdn|zXnmeK+jJ|&+&PNKGD;@YH1UlEXt-TPnSLM#*RJ(TXX>2Z@8 zI^&$e=!dxd?sfYCe9i+-GzOQrG=^6mAZQZ!;-^?aAw_f#qb@Oj5he;JTF4LGY6Lq> zjWaTC5RMMi?$t@H@ZX5^U`qm-7OJguPF=;H1H4M4lO||Yx>?!Rhrig5&F%y5k2Y-Z zOE=OpF7diEoa~h3#^ZFQq zE4j3b4wPkq!gt~4tyxsvk6U9yRr+qp&jdTsWCZ0?ZOXUO;KX!mFVnJ8bO5Wn6c#Ge zLqfbm%_SV}*s@H%p#5tdWB2_i=GcIPaTHv*9jI@}p zd*;01@Xth8R13`olW2!Jy0H~ElDBTiMRU{NKbGGM_5Wwrd$T$PT?jNNBWKDE104~7 zFdCtsb2az}7>ttxMm&8yiX`8`@v*V|w9U2EyJ*wTR*{I=D~ByMf>9%1(&qK4uxf^= zZ?D>-XXMJv>#gjqoH-QN&xfaetq+pwXNnjyvB}w~0@@gw`_d^y`1b%BWbSgFApzK(UgBz-T8i6r|ZgS z@Wonm*Wud=nV2yi8n_TphxwJ#)t8Qjw5-)*?ekSDR+>t+EA$;S!*QM!n60YjtjP